<?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>237266</bug_id>
          
          <creation_ts>2022-02-27 22:54:10 -0800</creation_ts>
          <short_desc>Changed IndexedDB use of SerializedScriptValue to a simpler model, with a non-DOM JavaScript global object</short_desc>
          <delta_ts>2022-03-06 22:55: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>ASSIGNED</bug_status>
          <resolution></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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>alecflett</cc>
    
    <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>benjamin</cc>
    
    <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jsbell</cc>
    
    <cc>kangil.han</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1846546</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-02-27 22:54:10 -0800</bug_when>
    <thetext>Changed IndexedDB use of SerializedScriptValue to a simpler model, with a non-DOM JavaScript global object</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846710</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-02-28 11:13:50 -0800</bug_when>
    <thetext>Got this almost working locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846774</commentid>
    <comment_count>2</comment_count>
      <attachid>453429</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-02-28 14:27:47 -0800</bug_when>
    <thetext>Created attachment 453429
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846865</commentid>
    <comment_count>3</comment_count>
      <attachid>453458</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-02-28 18:23:23 -0800</bug_when>
    <thetext>Created attachment 453458
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1848633</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-03-06 22:55:16 -0800</bug_when>
    <thetext>&lt;rdar://problem/89889256&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453429</attachid>
            <date>2022-02-28 14:27:47 -0800</date>
            <delta_ts>2022-02-28 18:37:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237266-20220228142746.patch</filename>
            <type>text/plain</type>
            <size>120363</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwNTY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
NjQ5OGE3ZTY3MjVkNzAyMzVhZjU3MTE4YTczZGFmYzU1ZjgxMWQwLi4xYjc2MzE4NTlmNDRkNmNj
NDNiNDlmMDU2MzExNjZmZWRlZWQ1ZWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOSBAQAorMjAyMi0wMi0yNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgQ2hhbmdlZCBJbmRleGVkREIgdXNlIG9mIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB0
byBhIHNpbXBsZXIgbW9kZWwsIHdpdGggYSBub24tRE9NIEphdmFTY3JpcHQgZ2xvYmFsIG9iamVj
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3MjY2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBydW50
aW1lL0RhdGFWaWV3Lmg6IEV4cG9ydGVkIHRoZSB3cmFwIGZ1bmN0aW9uIHNvIHdlIGNhbiBjYWxs
IGl0IG5vbi1wb2x5bW9ycGhpY2FsbHkKKyAgICAgICAgaW4gV2ViQ29yZS4KKworICAgICAgICAq
IHJ1bnRpbWUvSlNDSlNWYWx1ZS5oOiBSZW1vdmVkIHVubmVlZGVkIG92ZXJsb2FkIHRvIGNvbnN0
cnVjdCBhIEpTVmFsdWUgZnJvbSBhCisgICAgICAgIG5vbi1jb25zdCBKU0NlbGwqLiBBZGRlZCBh
biBvdmVybG9hZCBzbyB3ZSBjYW4gY29uc3RydWN0IGZyb20gYSBjb25zdCBKU0NlbGwmLAorICAg
ICAgICBzbyB3ZSBjYW4gdXNlIHJlZmVyZW5jZXMsIGFzIHdlIGRvIGluIFdlYkNvcmUsIGFuZCBu
b3QgaGF2ZSB0byB0eXBlICImIiBlYWNoIHRpbWUuCisgICAgICAgICogcnVudGltZS9KU0NKU1Zh
bHVlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpKU1ZhbHVlKTogRGl0dG8uCisK
IDIwMjItMDItMjYgIEJhc3VrZSBTdXp1a2kgIDxiYXN1a2Uuc3V6dWtpQHNvbnkuY29tPgogCiAg
ICAgICAgIFJlbW92ZSBVTlVTRUQgd2FybmluZ3MgZm9yIG5vbi1Db2NvYSBwbGF0Zm9ybSBhZnRl
ciByMjkwNDQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzIyMjUxZTQyNzE0ZjA3ZGQwOGMzMDc5YjVmNTQ1ZGY1
Yjk4MzA5Zi4uNjc2OTQ5NDM3YTkwYzRhZWFhZTA4MGJjNjhjZWI3NDYyMTE5NzUzNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEyMyBAQAorMjAyMi0wMi0yNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBh
cHBsZS5jb20+CisKKyAgICAgICAgQ2hhbmdlZCBJbmRleGVkREIgdXNlIG9mIFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSB0byBhIHNpbXBsZXIgbW9kZWwsIHdpdGggYSBub24tRE9NIEphdmFTY3JpcHQg
Z2xvYmFsIG9iamVjdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM3MjY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVXNlIHJlZmVyZW5jZXMgaW5zdGVhZCBvZiBuZXZlci1udWxsIHBvaW50ZXJzLgorCisg
ICAgICAgICogU291cmNlcy50eHQ6IFJlbW92ZWQgSlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2Jq
ZWN0LmNwcC4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajog
UmVtb3ZlZCBFbXB0eVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCBhbmQKKyAgICAgICAgSlNJREJT
ZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0LmNwcC9oLgorCisgICAgICAgICogYmluZGluZ3MvanMv
SURCQmluZGluZ1V0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJpYWxpemF0
aW9uQ29udGV4dDo6aW5pdGlhbGl6ZVZNKTogRG9uJ3QgY2FsbAorICAgICAgICBKU1ZNQ2xpZW50
RGF0YTo6aW5pdE5vcm1hbFdvcmxkIHNpbmNlIHdlIGRvIG5vdCB3YW50IHRvIGNyZWF0ZSBhIERP
TSB3cmFwcGVyIHdvcmxkLgorICAgICAgICBUaGlzIGdldHMgcmlkIG9mIHRoZSBoYWNrIHdoZXJl
IHdlIGNsYWltIHRvIGJlIGEgd29ya2xldC4gQ3JlYXRlIGEgSlNHbG9iYWxPYmplY3QKKyAgICAg
ICAgaW5zdGVhZCBvZiBhIEpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdC4KKyAgICAgICAg
KFdlYkNvcmU6OmNhbGxPbklEQlNlcmlhbGl6YXRpb25UaHJlYWRBbmRXYWl0KTogRml4ICJmdW5j
dGlvbiIgdHlwby4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NR2xvYmFsT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25D
b250ZXh0IGNvbnN0KTogUmVtb3ZlZCBzcGVjaWFsIGNhc2UKKyAgICAgICAgZm9yIEpTSURCU2Vy
aWFsaXphdGlvbkdsb2JhbE9iamVjdC4KKyAgICAgICAgKFdlYkNvcmU6OnNjcmlwdE1vZHVsZUxv
YWRlcik6IERpdHRvLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNJREJTZXJpYWxpemF0aW9u
R2xvYmFsT2JqZWN0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQlNl
cmlhbGl6YXRpb25HbG9iYWxPYmplY3QuaDogUmVtb3ZlZC4KKworICAgICAgICAqIGJpbmRpbmdz
L2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRp
b25Db250ZXh0KTogQWRkZWQgdGVtcG9yYXJ5IHNjYWZmb2xkaW5nIGZ1bmN0aW9uIHNvIHdlIGNh
biBzdGFydAorICAgICAgICB1c2luZyByZWZlcmVuY2VzIGluIHRoaXMgZmlsZS4gTGF0ZXIgd2Ug
d2lsbCByZW1vdmUgdGhlc2Ugb25jZSB3ZSBjaGFuZ2UgdGhlIHJlYWwKKyAgICAgICAgZnVuY3Rp
b25zIHRvIHRha2UgcmVmZXJlbmNlcy4KKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkNsb25lQmFzZTo6Q2xvbmVCYXNlKTogSW5pdGlhbGl6ZSBtX2ZhaWxlZCBpbiB0aGUg
Y2xhc3MgZGVmaW5pdGlvbiwgbm90CisgICAgICAgIHRoZSBjb25zdHJ1Y3Rvci4gQ2hhbmdlZCBt
X2xleGljYWxHbG9iYWxPYmplY3QgdG8gYSByZWZlcmVuY2UuCisgICAgICAgIChXZWJDb3JlOjpD
bG9uZUJhc2U6OmlzRE9NR2xvYmFsT2JqZWN0IGNvbnN0KTogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDbG9uZUJhc2U6OmxleGljYWxET01HbG9iYWxPYmplY3QpOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNsb25lQmFzZTo6ZXhlY3V0aW9uQ29udGV4dCk6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6d3JhcENyeXB0b0tleSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjp1bndy
YXBDcnlwdG9LZXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVy
OjpzZXJpYWxpemUpOiBUYWtlIGEgcmVmZXJlbmNlIGluc3RlYWQgb2YgcG9pbnRlci4KKyAgICAg
ICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6Q2xvbmVTZXJpYWxpemVyKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OmZpbGxUcmFuc2Zlck1hcCk6IERvIG5v
dCBtYWtlIGEgbWFwIGlmIHRoZSBnbG9iYWwKKyAgICAgICAgb2JqZWN0IGlzIG5vdCBhIERPTSBv
bmUgKG9ubHkgZm9yIElEQiBzZXJpYWxpemF0aW9uKS4KKyAgICAgICAgKFdlYkNvcmU6OkNsb25l
U2VyaWFsaXplcjo6Z2V0UHJvcGVydHkpOiBVcGRhdGUgc2luY2UgbV9sZXhpY2FsR2xvYmFsT2Jq
ZWN0IGlzCisgICAgICAgIGEgcmVmZXJlbmNlLgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJp
YWxpemVyOjp0b0pTQXJyYXlCdWZmZXIpOiBVc2UgdGhlIGxleGljYWxET01HbG9iYWxPYmplY3Qo
KQorICAgICAgICBmdW5jdGlvbiBpbnN0ZWFkIG9mIGNhc3RpbmcgaGVyZS4gVHdlYWtlZCBjb2Rl
IHN0eWxlIGEgYml0LgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpkdW1wQXJy
YXlCdWZmZXJWaWV3KTogVXBkYXRlZCBzaW5jZQorICAgICAgICBtX2xleGljYWxHbG9iYWxPYmpl
Y3QgaXMgYSByZWZlcmVuY2UuCisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OmR1
bXBET01Qb2ludCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpk
dW1wRE9NUmVjdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpk
dW1wRE9NTWF0cml4KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6
OmR1bXBET01FeGNlcHRpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFs
aXplcjo6ZHVtcElmVGVybWluYWwpOiBEaXR0by4gQWxzbyBtb3ZlIHRoZSBib2R5IG9mCisgICAg
ICAgIHdyYXBDcnlwdG9LZXkgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXpl
cjo6d3JpdGUpOiBVcGRhdGVkIHNpbmNlIG1fbGV4aWNhbEdsb2JhbE9iamVjdCBpcyBhCisgICAg
ICAgIHJlZmVyZW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpkZXNl
cmlhbGl6ZSk6IFVzZSByZWZlcmVuY2UgZm9yIGFyZ3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6
Q2xvbmVEZXNlcmlhbGl6ZXI6OkNhY2hlZFN0cmluZzo6anNTdHJpbmcpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpDbG9uZURlc2VyaWFsaXplcik6IERpdHRv
LiBBbHNvIHJlbW92ZWQKKyAgICAgICAgbV9pc0RPTUdsb2JhbE9iamVjdCBhbmQgbV9jYW5DcmVh
dGVET01PYmplY3QsIGluc3RlYWQgdXNlIGlzRE9NR2xvYmFsT2JqZWN0KCkuCisgICAgICAgIE5v
dGUgdGhhdCB0aGUgbGV4aWNhbCBnbG9iYWwgb2JqZWN0IGFuZCB0aGUgb3RoZXIgZ2xvYmFsIG9i
amVjdCBhcmUgYWx3YXlzCisgICAgICAgIGJvdGggRE9NIGdsb2JhbCBvYmplY3RzLCBvciBib3Ro
IHRoZSBzYW1lIGdsb2JhbCBvYmplY3QsIHRodXMgdGhlcmUgaXMgbm8KKyAgICAgICAgbmVlZCB0
byBjaGVjayBib3RoLgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnB1dFBy
b3BlcnR5KTogVXBkYXRlZCBzaW5jZSBtX2xleGljYWxHbG9iYWxPYmplY3QKKyAgICAgICAgaXMg
YSByZWZlcmVuY2UuCisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVhZEZp
bGUpOiBVc2UgZXhlY3V0aW9uQ29udGV4dCgpIGluc3RlYWQgb2YKKyAgICAgICAgY2hlY2tpbmcg
bV9jYW5DcmVhdGVET01PYmplY3QgZGlyZWN0bHkuIEFsc28sIG5vdyB3ZSBmYWlsIHJhdGhlciB0
aGFuCisgICAgICAgIHN1Y2NlZWRpbmcgYW5kIHJldHVybmluZyBudWxscHRyIGZvciB0aGUgZmls
ZSBpbiB0aGlzIGNhc2UuCisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVh
ZEFycmF5QnVmZmVyVmlld0ltcGwpOiBDaGVjayByZWFkVGVybWluYWwKKyAgICAgICAgZm9yIGEg
bnVsbHB0ciBKU1ZhbHVlLCB3aGljaCBpcyBub3cgcHJvZHVjZWQgZm9yIHNvbWUgdHlwZXMuIFJl
dHVybiBheAorICAgICAgICBKU1ZhbHVlIGluc3RlYWQgb2YgdXNpbmcgYW4gb3V0IGFyZ3VtZW50
LiBDYWxsIHRoZSBuZXcgZnVuY3Rpb25zIGJlbG93CisgICAgICAgIHRoYXQgY2FuIG1ha2Ugd3Jh
cHBlcnMgaW4gdGhlIG5vbi1ET00gY2FzZS4KKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJp
YWxpemVyOjpjcmVhdGVEYXRhVmlldyk6IEFkZGVkLiBJbmNsdWRlcyBhIHNwZWNpYWwKKyAgICAg
ICAgY2FzZSBmb3Igbm9uLURPTSBzZXJpYWxpemF0aW9uIHNvIHdlIGNhbiBjcmVhdGUgYSB3cmFw
cGVyIHRoZXJlLCBzaW5jZQorICAgICAgICB0aGUgd3JhcCBmdW5jdGlvbiB3b3VsZCBmYWlsLgor
ICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OmNyZWF0ZUFycmF5QnVmZmVyVmll
dyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRBcnJh
eUJ1ZmZlclZpZXcpOiBSZXR1cm4gYSBKU1ZhbHVlCisgICAgICAgIGluc3RlYWQgb2YgdXNpbmcg
YW4gb3V0IGFyZ3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJl
YWRDcnlwdG9LZXkpOiBEaXR0by4gQWxzbyB1c2UgdGhlCisgICAgICAgIG5ldyB3cmFwIGZ1bmN0
aW9uCisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6d3JhcCk6IEFkZGVkLiBD
b252ZW5pZW50IGZ1bmN0aW9uIGZvcgorICAgICAgICBjYWxsaW5nIHRvSlMgdG8gd3JhcCBhbiBv
YmplY3QgaW4gYSBET00gd3JhcHBlci4gQm90dGxlbmVjayB0aGF0CisgICAgICAgIGNhbGxzIGZh
aWwgYW5kIHJldHVybnMgYSBudWxscHRyIEpTVmFsdWUgaW4gYSBub24tRE9NIGNvbnRleHQsIG1h
a2luZworICAgICAgICBzdXJlIHdlIGRvbid0IGZvcmdldCB0aGF0IGNoZWNrIGFueXdoZXJlLgor
ICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OndyYXBOZXdseUNyZWF0ZWQpOiBT
YW1lIGFzIGFib3ZlLCBidXQKKyAgICAgICAgZm9yIG5ld2x5LWNyZWF0ZWQgb2JqZWN0cyBvbmx5
LgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRET01Qb2ludCk6IFVz
ZSB3cmFwTmV3bHlDcmVhdGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6
OnJlYWRET01NYXRyaXgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxp
emVyOjpyZWFkRE9NUmVjdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlh
bGl6ZXI6OnJlYWRET01RdWFkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2Vy
aWFsaXplcjo6cmVhZFRyYW5zZmVycmVkSW1hZ2VCaXRtYXApOiBVc2Ugd3JhcC4KKyAgICAgICAg
KFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkT2Zmc2NyZWVuQ2FudmFzKTogVXNlIGV4
ZWN1dGlvbkNvbnRleHQKKyAgICAgICAgYW5kIHdyYXAuCisgICAgICAgIChXZWJDb3JlOjpDbG9u
ZURlc2VyaWFsaXplcjo6cmVhZFJUQ0NlcnRpZmljYXRlKTogVXNlIHdyYXBOZXdseUNyZWF0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVhZFJUQ0RhdGFDaGFubmVs
KTogVXNlIGV4ZWN1dGlvbkNvbnRleHQKKyAgICAgICAgYW5kIHdyYXAuCisgICAgICAgIChXZWJD
b3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVhZEltYWdlQml0bWFwKTogVXNlIGV4ZWN1dGlvbkNv
bnRleHQKKyAgICAgICAgYW5kIHdyYXAuCisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFs
aXplcjo6cmVhZERPTUV4Y2VwdGlvbik6IFVzZSB3cmFwLgorICAgICAgICAoV2ViQ29yZTo6Q2xv
bmVEZXNlcmlhbGl6ZXI6OnJlYWRCaWdJbnQpOiBVcGRhdGUgc2luY2UgbV9sZXhpY2FsR2xvYmFs
T2JqZWN0LnZtCisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVhZFRlcm1p
bmFsKTogVXNlIHdyYXAgZm9yIEZpbGVUYWcsIEZpbGVMaXN0VGFnLAorICAgICAgICBJbWFnZURh
dGFUYWcsIE1lc3NhZ2VQb3J0UmVmZXJlbmNlVGFnLCBBcnJheUJ1ZmZlclRyYW5zZmVyVGFnLCBB
cnJheUJ1ZmZlclRhZywKKyAgICAgICAgYW5kIHVzZSByZWFkQXJyYXlCdWZmZXJWaWV3IGZvciBU
SElTIElTIE5PVCBDT1JSRUNUIFlFVCwgTkVFRCBJTVBST1ZFRCBDT0RFCisgICAgICAgIChXZWJD
b3JlOjpDbG9uZURlc2VyaWFsaXplcjo6Y3JlYXRlQmxvYik6IE5FRUQgQ09NTUVOVCBIRVJFCisg
ICAgICAgIChXZWJDb3JlOjptYXliZVRocm93RXhjZXB0aW9uSWZTZXJpYWxpemF0aW9uRmFpbGVk
KTogTkVFRCBDT01NRU5UIEhFUkUKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6Y3JlYXRlKTogTkVFRCBDT01NRU5UIEhFUkUKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUpOiBORUVEIENPTU1FTlQgSEVSRQorCisgICAg
ICAgICogYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU0hlYXBEYXRhOjpKU0hlYXBEYXRhKTogUmVtb3ZlZAorICAgICAgICBtX2hlYXBDZWxs
VHlwZUZvckpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdCwgYW5kIG1faWRiU2VyaWFsaXph
dGlvblNwYWNlLgorICAgICAgICAoV2ViQ29yZTo6SlNWTUNsaWVudERhdGE6OkpTVk1DbGllbnRE
YXRhKTogRGl0dG8uCisgICAgICAgICogYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5o
OiBEaXR0by4KKworICAgICAgICAqIGRvbS9FbXB0eVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaDog
UmVtb3ZlZC4KKwogMjAyMi0wMi0yNyAgQW50b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBbc3ZnXSBmaWxsLW9wYWNpdHkgc2hvdWxkIGJlIGNsYW1wZWQgdG8gdGhl
IFswLDFdIHJhbmdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
YXRhVmlldy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAppbmRl
eCAzNDAyNjU0MTAzMTlkMjhjM2RjNjcyODZlOWI3OTk3OWEwMTI2NDg2Li5kODliY2Y3MGUyOTEy
MmViNTQzY2FlMTAzZTRkNTY2OTlmZmI4YjFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EYXRhVmlldy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0RhdGFWaWV3LmgKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
VHlwZURhdGFWaWV3OwogICAgIH0KIAotICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB3cmFwKEpTR2xv
YmFsT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKSBmaW5hbDsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBKU0FycmF5QnVmZmVyVmlldyogd3JhcChKU0dsb2JhbE9iamVjdCosIEpTR2xvYmFsT2JqZWN0
KikgZmluYWw7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBUIGdldChzaXpl
X3Qgb2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgYm9vbCogc3RhdHVzID0gbnVsbHB0cikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAppbmRleCBlOGE0ZTdhNjIz
MzlkMzZiZWEwZjcyNTdiNDE3MzVlYzgyNDNlZjU3Li5mYTM2MTE4ZGRhYTRmYTZiNjBkMjJmNTc3
ZWVlYTc4MWE0ZmM4MGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NKU1ZhbHVlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNW
YWx1ZS5oCkBAIC0xODgsOCArMTg4LDggQEAgcHVibGljOgogICAgIEpTVmFsdWUoSlNVbmRlZmlu
ZWRUYWcpOwogICAgIEpTVmFsdWUoSlNUcnVlVGFnKTsKICAgICBKU1ZhbHVlKEpTRmFsc2VUYWcp
OwotICAgIEpTVmFsdWUoSlNDZWxsKiBwdHIpOwotICAgIEpTVmFsdWUoY29uc3QgSlNDZWxsKiBw
dHIpOworICAgIEpTVmFsdWUoY29uc3QgSlNDZWxsKik7CisgICAgSlNWYWx1ZShjb25zdCBKU0Nl
bGwmKTsKICNpZiBVU0UoQklHSU5UMzIpCiAgICAgSlNWYWx1ZShFbmNvZGVBc0JpZ0ludDMyVGFn
LCBpbnQzMl90KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ0pTVmFsdWVJbmxpbmVzLmgKaW5kZXggNzkyNjc2M2NkNTY1ZGViYjFhMGIxYzljZjE3ZmQz
MDkyMTQ0ODY2YS4uMWNiZjc4M2QzYjY4OTQyM2IyODZjOTVjZDhmMGU5YWNhMWE3YTA3MCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5o
CkBAIC0yNTksNyArMjU5LDEzIEBAIGlubGluZSBKU1ZhbHVlIEpTVmFsdWU6OmRlY29kZShFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkSlNWYWx1ZSkKICAgICByZXR1cm4gdjsKIH0KIAoraW5saW5lIEpT
VmFsdWU6OkpTVmFsdWUoY29uc3QgSlNDZWxsJiBjZWxsKQorICAgIDogSlNWYWx1ZSB7ICZjZWxs
IH0KK3sKK30KKwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisKIGlubGluZSBKU1ZhbHVlOjpKU1Zh
bHVlKCkKIHsKICAgICB1LmFzQml0cy50YWcgPSBFbXB0eVZhbHVlVGFnOwpAQCAtMjk2LDE1ICsz
MDIsNiBAQCBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShIYXNoVGFibGVEZWxldGVkVmFsdWVUYWcp
CiAgICAgdS5hc0JpdHMucGF5bG9hZCA9IDA7CiB9CiAKLWlubGluZSBKU1ZhbHVlOjpKU1ZhbHVl
KEpTQ2VsbCogcHRyKQotewotICAgIGlmIChwdHIpCi0gICAgICAgIHUuYXNCaXRzLnRhZyA9IENl
bGxUYWc7Ci0gICAgZWxzZQotICAgICAgICB1LmFzQml0cy50YWcgPSBFbXB0eVZhbHVlVGFnOwot
ICAgIHUuYXNCaXRzLnBheWxvYWQgPSByZWludGVycHJldF9jYXN0PGludDMyX3Q+KHB0cik7Ci19
Ci0KIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGNvbnN0IEpTQ2VsbCogcHRyKQogewogICAgIGlm
IChwdHIpCkBAIC00NTcsMTEgKzQ1NCw2IEBAIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEhhc2hU
YWJsZURlbGV0ZWRWYWx1ZVRhZykKICAgICB1LmFzSW50NjQgPSBWYWx1ZURlbGV0ZWQ7CiB9CiAK
LWlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEpTQ2VsbCogcHRyKQotewotICAgIHUuYXNJbnQ2NCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwdHIpOwotfQotCiBpbmxpbmUgSlNWYWx1ZTo6
SlNWYWx1ZShjb25zdCBKU0NlbGwqIHB0cikKIHsKICAgICB1LmFzSW50NjQgPSByZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4oY29uc3RfY2FzdDxKU0NlbGwqPihwdHIpKTsKQEAgLTYxMSwxMiAr
NjAzLDE0IEBAIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQqIEpTVmFsdWU6OmFzSGVhcEJpZ0ludCgp
IGNvbnN0CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKIAogI2lmIFVTRShCSUdJTlQzMikKKwog
aW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoRW5jb2RlQXNCaWdJbnQzMlRhZywgaW50MzJfdCB2YWx1
ZSkKIHsKICAgICB1aW50NjRfdCBzaGlmdGVkVmFsdWUgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSkgPDwgMTY7CiAgICAgQVNTRVJUKCEoc2hpZnRl
ZFZhbHVlICYgTnVtYmVyVGFnKSk7CiAgICAgdS5hc0ludDY0ID0gc2hpZnRlZFZhbHVlIHwgQmln
SW50MzJUYWc7CiB9CisKICNlbmRpZiAvLyBVU0UoQklHSU5UMzIpCiAKIGlubGluZSBpbnQ2NF90
IHRyeUNvbnZlcnRUb0ludDUyKGRvdWJsZSBudW1iZXIpCkBAIC03MjMsMTEgKzcxNywxMyBAQCBp
bmxpbmUgYm9vbCBKU1ZhbHVlOjppc0JpZ0ludDMyKCkgY29uc3QKIH0KIAogI2lmIFVTRShCSUdJ
TlQzMikKKwogaW5saW5lIGludDMyX3QgSlNWYWx1ZTo6YmlnSW50MzJBc0ludDMyKCkgY29uc3QK
IHsKICAgICBBU1NFUlQoaXNCaWdJbnQzMigpKTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50
MzJfdD4odS5hc0ludDY0ID4+IDE2KTsKIH0KKwogI2VuZGlmIC8vIFVTRShCSUdJTlQzMikKIAog
aW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNTeW1ib2woKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBl
ZjYzYjU0MmNjYmYxOTBjYmI1MWUxYzQ1ZjVlOWE4MjM2MzVkMjc0Li5lMTIzYWIxNjkyYmFkZDJk
ZGRmZWE4YjRmZDM5MDI2YzkxOTg3MzNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtNTY5LDcgKzU2OSw2
IEBAIGJpbmRpbmdzL2pzL0pTSURCSW5kZXhDdXN0b20uY3BwCiBiaW5kaW5ncy9qcy9KU0lEQk9i
amVjdFN0b3JlQ3VzdG9tLmNwcAogYmluZGluZ3MvanMvSlNJREJSZXF1ZXN0Q3VzdG9tLmNwcAog
YmluZGluZ3MvanMvSlNJREJUcmFuc2FjdGlvbkN1c3RvbS5jcHAKLWJpbmRpbmdzL2pzL0pTSURC
U2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdC5jcHAKIGJpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3Vz
dG9tLmNwcAogYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rpb25PYnNlcnZlckN1c3RvbS5jcHAKIGJp
bmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2YjQy
ZTVmYWQyOTYxNjY5ZjQzMzEzODAzZmQzNDE3MjZjYTIyZmM5Li5hMGQ2ODc2MWEyNDJhNmZlOGNl
MzQyNGZlYzg3MTU3NTFjMzc3MDAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yOTY5LDggKzI5NjksNiBAQAogCQk5MzgyQUFC
NDBEOEMzODYxMDBGMzU3QTYgLyogTm9kZVdpdGhJbmRleC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM4MkFBQjEwRDhDMzg2MTAwRjM1N0E2IC8qIE5v
ZGVXaXRoSW5kZXguaCAqLzsgfTsKIAkJOTM4MkRGNTgxMEE4RDVDOTAwOTI1NjUyIC8qIENvbG9y
U3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkz
ODJERjU3MTBBOEQ1QzkwMDkyNTY1MiAvKiBDb2xvclNwYWNlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTM4NDMwQjQyNDc1REU0MDAwM0Y5NjE3
IC8qIERpY3RhdGlvbkNvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDkzODQzMEIyMjQ3NURFM0YwMDNGOTYxNyAvKiBEaWN0YXRpb25Db250ZXh0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJOTM4
NDlDMUYyNEJFNDA0QjAwNDQ4RDVBIC8qIEVtcHR5U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM4NDlDMUUyNEJF
NDA0QTAwNDQ4RDVBIC8qIEVtcHR5U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oICovOyB9OwotCQk5
Mzg0OUMyMzI0QkVERDg5MDA0NDhENUEgLyogSlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Mzg0OUMy
MTI0QkVERDg4MDA0NDhENUEgLyogSlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0LmggKi87
IH07CiAJCTkzOEU2NUYxMDlGMDk4NDAwMDhBNDhFQyAvKiBKU0hUTUxFbGVtZW50V3JhcHBlckZh
Y3RvcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkz
OEU2NUYwMDlGMDk4NDAwMDhBNDhFQyAvKiBKU0hUTUxFbGVtZW50V3JhcHBlckZhY3RvcnkuaCAq
LzsgfTsKIAkJOTM4RTY2NjIwOUYwOUI4NzAwOEE0OEVDIC8qIEpTSFRNTENhbnZhc0VsZW1lbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzOEU2NjYx
MDlGMDlCODcwMDhBNDhFQyAvKiBKU0hUTUxDYW52YXNFbGVtZW50LmggKi87IH07CiAJCTkzOTFB
OTkxMTYyNzQ2Q0IwMDI5NzMzMCAvKiBTY3JvbGxpbmdDb29yZGluYXRvck1hYy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM5MUE5OTAxNjI3NDZDQjAw
Mjk3MzMwIC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEyNzk4LDkgKzEyNzk2LDYgQEAKIAkJOTM4
MkFBQjEwRDhDMzg2MTAwRjM1N0E2IC8qIE5vZGVXaXRoSW5kZXguaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTm9kZVdpdGhJbmRleC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5MzgyREY1NzEwQThENUM5MDA5MjU2NTIgLyogQ29sb3JTcGFjZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2xvclNwYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTkzODQzMEIyMjQ3NURFM0YwMDNGOTYxNyAvKiBEaWN0YXRpb25Db250ZXh0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpY3RhdGlvbkNvbnRleHQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTM4NDlDMTYyNEJFMTJFNTAwNDQ4RDVBIC8q
IEpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3QuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5Mzg0OUMxRTI0QkU0MDRBMDA0NDhENUEgLyogRW1w
dHlTY3JpcHRFeGVjdXRpb25Db250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEVtcHR5U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk5Mzg0OUMyMTI0QkVERDg4MDA0NDhENUEgLyogSlNJREJTZXJpYWxpemF0aW9uR2xv
YmFsT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSURCU2VyaWFs
aXphdGlvbkdsb2JhbE9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzhF
NjVGMDA5RjA5ODQwMDA4QTQ4RUMgLyogSlNIVE1MRWxlbWVudFdyYXBwZXJGYWN0b3J5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU0hUTUxFbGVtZW50V3JhcHBlckZhY3Rv
cnkuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNIVE1MRWxlbWVudFdyYXBwZXJG
YWN0b3J5Lmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTkzOEU2NUY2
MDlGMDk4NUQwMDhBNDhFQyAvKiBKU0hUTUxFbGVtZW50V3JhcHBlckZhY3RvcnkuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTSFRNTEVsZW1lbnRXcmFwcGVyRmFj
dG9yeS5jcHA7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTEVsZW1lbnRXcmFw
cGVyRmFjdG9yeS5jcHA7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTkz
OEU2NjI1MDlGMDk5NTYwMDhBNDhFQyAvKiBIVE1MQ2FudmFzRWxlbWVudC5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gSFRNTENhbnZhc0VsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjk0MTYsOCArMjk0MTEsNiBAQAogCQkJCUI1NjU3NkU0MTdEQTU5OUYwMEE1
NkJEQyAvKiBKU0V4ZWNTdGF0ZUluc3RydW1lbnRhdGlvbi5oICovLAogCQkJCTkzMkYxRDQ2Mjcw
RUJGNEIwMDBDMjgxMyAvKiBKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvci5jcHAg
Ki8sCiAJCQkJOTMyRjFENDUyNzBFQkY0QjAwMEMyODEzIC8qIEpTRmlsZVN5c3RlbURpcmVjdG9y
eUhhbmRsZUl0ZXJhdG9yLmggKi8sCi0JCQkJOTM4NDlDMTYyNEJFMTJFNTAwNDQ4RDVBIC8qIEpT
SURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdC5jcHAgKi8sCi0JCQkJOTM4NDlDMjEyNEJFREQ4
ODAwNDQ4RDVBIC8qIEpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdC5oICovLAogCQkJCUUz
QzlBRUM5MjExMzE0NzQwMDQxOUI5MiAvKiBKU01pY3JvdGFza0NhbGxiYWNrLmggKi8sCiAJCQkJ
OTNCNzBENEYwOUVCMEM3QzAwOUQ4NDY4IC8qIEpTUGx1Z2luRWxlbWVudEZ1bmN0aW9ucy5jcHAg
Ki8sCiAJCQkJOTNCNzBENTAwOUVCMEM3QzAwOUQ4NDY4IC8qIEpTUGx1Z2luRWxlbWVudEZ1bmN0
aW9ucy5oICovLApAQCAtMzI1MTQsNyArMzI1MDcsNiBAQAogCQkJCTRGQUI0ODY0MTY0M0E2NkQw
MEY3MEMwNyAvKiBFbGVtZW50UmFyZURhdGEuY3BwICovLAogCQkJCTYzN0I3QURFMEU4NzY3Qjgw
MEUzMjE5NCAvKiBFbGVtZW50UmFyZURhdGEuaCAqLywKIAkJCQlFNEQ1OEVCQTE3QjhGMTI4MDBD
QkRDQTggLyogRWxlbWVudFRyYXZlcnNhbC5oICovLAotCQkJCTkzODQ5QzFFMjRCRTQwNEEwMDQ0
OEQ1QSAvKiBFbXB0eVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCAqLywKIAkJCQkwNUZENjlERjEy
ODQ1RDQzMDBCMkJFQjMgLyogRXBvY2hUaW1lU3RhbXAuaCAqLywKIAkJCQkyRUNGN0FERTEwMTYy
QjU4MDA0MjdERTcgLyogRXJyb3JFdmVudC5jcHAgKi8sCiAJCQkJMkVDRjdBREYxMDE2MkI1ODAw
NDI3REU3IC8qIEVycm9yRXZlbnQuaCAqLywKQEAgLTM0NTA1LDcgKzM0NDk3LDYgQEAKIAkJCQlC
MjU1OTlBNTBEMDBEOEJBMDBCQjgyNUMgLyogRW1wdHlDbGllbnRzLmggaW4gSGVhZGVycyAqLywK
IAkJCQk0MTRERURFNzFGOUZFOTFFMDA0N0M0MEQgLyogRW1wdHlGcmFtZUxvYWRlckNsaWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTE1QkUxOTAxRDU0RjVGQjAwREQ3QzY4IC8qIEVtcHR5R2Ft
ZXBhZFByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk5Mzg0OUMxRjI0QkU0MDRCMDA0NDhE
NUEgLyogRW1wdHlTY3JpcHRFeGVjdXRpb25Db250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3
Qzc3QzNENzFERUY4NTBBMDBBNTBCRkEgLyogRW5kaW5nVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRjQwM0U3ODcyMzYzQjU4QzAwMDQ0NTUwIC8qIEVudGVyS2V5SGludC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUQyRjhFMDQyMzQ0NzUxNjAwOTkzQjY4IC8qIEVudGVyUGljdHVyZUluUGljdHVy
ZUV2ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTM1NjAxLDcgKzM1NTkyLDYgQEAKIAkJCQlDNTg1
QTY4RDExRDRGQjA4MDA0QzNFNEIgLyogSlNJREJLZXlSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzU4NUE2OEYxMUQ0RkIwODAwNEMzRTRCIC8qIEpTSURCT2JqZWN0U3RvcmUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUM1ODVBNjkxMTFENEZCMDgwMDRDM0U0QiAvKiBKU0lEQlJlcXVlc3QuaCBp
biBIZWFkZXJzICovLAotCQkJCTkzODQ5QzIzMjRCRUREODkwMDQ0OEQ1QSAvKiBKU0lEQlNlcmlh
bGl6YXRpb25HbG9iYWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUI2NTY2MjcwMTIwQjEy
MjcwMDZFQTg1QyAvKiBKU0lEQlRyYW5zYWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4MzhF
RjUzQzFEQzE0QTdDMDA4RjBDMzkgLyogSlNJREJUcmFuc2FjdGlvbk1vZGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTI2OTIzOTk2MTUwNUUxQUEwMDlFNTdGQyAvKiBKU0lEQlZlcnNpb25DaGFuZ2VF
dmVudC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCmluZGV4IDFjYTBkNjU3MzIxMGJmMWE4MGQ4OTJhYTJi
NzE4ZTY1YWVjNjA0NmUuLjdlZTgwYzZhY2JjMzJmODdiMTMxNjM5MWNmM2RjYzQ4NzVhNWU2ZmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRp
ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRp
ZXMuY3BwCkBAIC0yNiw3ICsyNiw2IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotCiAj
aW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgpAQCAtNDMsNyArNDIsNiBAQAogI2luY2x1ZGUgIkpTRE9NQ29udmVydE51bGxhYmxlLmgi
CiAjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpTRmlsZS5o
IgotI2luY2x1ZGUgIkpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaCIKQEAgLTYwLDYgKzU4LDcgQEAKICNpbmNsdWRlIDx3dGYvdGhyZWFk
cy9CaW5hcnlTZW1hcGhvcmUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgeworCiB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCiBzdGF0aWMgYm9vbCBnZXQoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVmFsdWUgb2JqZWN0LCBjb25zdCBTdHJpbmcmIGtleVBhdGhFbGVtZW50LCBK
U1ZhbHVlJiByZXN1bHQpCkBAIC01NjAsMTQgKzU1OSwxMyBAQCBwcml2YXRlOgogICAgICAgICBB
U1NFUlQoIW1fZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgbV92bSA9IEpTQzo6Vk06OmNyZWF0ZSgp
OwogICAgICAgICBtX3ZtLT5oZWFwLmFjcXVpcmVBY2Nlc3MoKTsKLSAgICAgICAgSlNWTUNsaWVu
dERhdGE6OmluaXROb3JtYWxXb3JsZChtX3ZtLmdldCgpLCBXb3JrZXJUaHJlYWRUeXBlOjpXb3Jr
bGV0KTsKIAogICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIobV92bS5nZXQoKSk7Ci0g
ICAgICAgIG1fZ2xvYmFsT2JqZWN0LnNldCgqbV92bSwgSlNJREJTZXJpYWxpemF0aW9uR2xvYmFs
T2JqZWN0OjpjcmVhdGUoKm1fdm0sIEpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdDo6Y3Jl
YXRlU3RydWN0dXJlKCptX3ZtLCBKU0M6OmpzTnVsbCgpKSwgbm9ybWFsV29ybGQoKm1fdm0pKSk7
CisgICAgICAgIG1fZ2xvYmFsT2JqZWN0LnNldCgqbV92bSwgSlNDOjpKU0dsb2JhbE9iamVjdDo6
Y3JlYXRlKCptX3ZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKm1fdm0s
IEpTQzo6anNOdWxsKCkpKSk7CiAgICAgfQogCiAgICAgUmVmUHRyPEpTQzo6Vk0+IG1fdm07Ci0g
ICAgSlNDOjpTdHJvbmc8SlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0PiBtX2dsb2JhbE9i
amVjdDsKKyAgICBKU0M6OlN0cm9uZzxKU0M6OkpTR2xvYmFsT2JqZWN0PiBtX2dsb2JhbE9iamVj
dDsKICAgICBUaHJlYWQmIG1fdGhyZWFkOwogfTsKIApAQCAtNTg3LDExICs1ODUsMTEgQEAgdm9p
ZCBjYWxsT25JREJTZXJpYWxpemF0aW9uVGhyZWFkQW5kV2FpdChGdW5jdGlvbjx2b2lkKEpTQzo6
SlNHbG9iYWxPYmplY3QmKT4mJgogICAgIH0pOwogCiAgICAgQmluYXJ5U2VtYXBob3JlIHNlbWFw
aG9yZTsKLSAgICBhdXRvIG5ld0Z1bnRpb24gPSBbJnNlbWFwaG9yZSwgZnVuY3Rpb24gPSBXVEZN
b3ZlKGZ1bmN0aW9uKV0oSlNDOjpKU0dsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KSB7CisgICAg
YXV0byBuZXdGdW5jdGlvbiA9IFsmc2VtYXBob3JlLCBmdW5jdGlvbiA9IFdURk1vdmUoZnVuY3Rp
b24pXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpIHsKICAgICAgICAgZnVuY3Rp
b24oZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgc2VtYXBob3JlLnNpZ25hbCgpOwogICAgIH07Ci0g
ICAgcXVldWUtPmFwcGVuZChtYWtlVW5pcXVlPEZ1bmN0aW9uPHZvaWQoSlNDOjpKU0dsb2JhbE9i
amVjdCYpPj4oV1RGTW92ZShuZXdGdW50aW9uKSkpOworICAgIHF1ZXVlLT5hcHBlbmQobWFrZVVu
aXF1ZTxGdW5jdGlvbjx2b2lkKEpTQzo6SlNHbG9iYWxPYmplY3QmKT4+KFdURk1vdmUobmV3RnVu
Y3Rpb24pKSk7CiAgICAgc2VtYXBob3JlLndhaXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCmluZGV4IGIyNjI2ZmViNGEwNTM3
MzhlYTdkZWQxODI3Nzg2NWM0ZjgxMzRiNTguLjRiMTNkZjdjMGUyNjMyOTVjZWYxNWFmMGZlYzdk
MjNlMzhkZDRkZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
R2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUds
b2JhbE9iamVjdC5jcHAKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5o
IgogI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkpTRmV0Y2hSZXNwb25z
ZS5oIgotI2luY2x1ZGUgIkpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdC5oIgogI2luY2x1
ZGUgIkpTTWVkaWFTdHJlYW0uaCIKICNpbmNsdWRlICJKU01lZGlhU3RyZWFtVHJhY2suaCIKICNp
bmNsdWRlICJKU1JUQ0ljZUNhbmRpZGF0ZS5oIgpAQCAtNzEsNiArNzAsNyBAQAogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL1dlYWtHQ01hcElubGluZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
eworCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKG1h
a2VUaGlzVHlwZUVycm9yRm9yQnVpbHRpbnMpOwpAQCAtMjc1LDggKzI3NSw2IEBAIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIEpTRE9NR2xvYmFsT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkgY29uc3QKICAgICAgICAgcmV0dXJuIGpzQ2FzdDxjb25zdCBKU1dvcmtlckdsb2JhbFNjb3Bl
QmFzZSo+KHRoaXMpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKGluaGVyaXRz
PEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZT4odm0oKSkpCiAgICAgICAgIHJldHVybiBqc0Nhc3Q8
Y29uc3QgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlKj4odGhpcyktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKLSAgICBpZiAoaW5oZXJpdHM8SlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0
Pih2bSgpKSkKLSAgICAgICAgcmV0dXJuIGpzQ2FzdDxjb25zdCBKU0lEQlNlcmlhbGl6YXRpb25H
bG9iYWxPYmplY3QqPih0aGlzKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogCiAgICAgZGF0
YUxvZygiVW5leHBlY3RlZCBnbG9iYWwgb2JqZWN0OiAiLCBKU1ZhbHVlKHRoaXMpLCAiXG4iKTsK
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNTAxLDYgKzQ5OSw3IEBAIEpT
Qzo6SlNQcm9taXNlKiBKU0RPTUdsb2JhbE9iamVjdDo6aW5zdGFudGlhdGVTdHJlYW1pbmcoSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvCiAgICAgQVNTRVJUKHNvdXJjZSk7CiAgICAgcmV0dXJuIGhh
bmRsZVJlc3BvbnNlT25TdHJlYW1pbmdBY3Rpb24oZ2xvYmFsT2JqZWN0LCBzb3VyY2UsIEpTQzo6
V2FzbTo6Q29tcGlsZXJNb2RlOjpGdWxsQ29tcGlsZSwgaW1wb3J0T2JqZWN0KTsKIH0KKwogI2Vu
ZGlmCiAKIHN0YXRpYyBTY3JpcHRNb2R1bGVMb2FkZXIqIHNjcmlwdE1vZHVsZUxvYWRlcihKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQpAQCAtNTE5LDggKzUxOCw2IEBAIHN0YXRpYyBT
Y3JpcHRNb2R1bGVMb2FkZXIqIHNjcmlwdE1vZHVsZUxvYWRlcihKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm4gJmpzQ2FzdDxjb25zdCBKU1dvcmtlckdsb2Jh
bFNjb3BlQmFzZSo+KGdsb2JhbE9iamVjdCktPndyYXBwZWQoKS5tb2R1bGVMb2FkZXIoKTsKICAg
ICBpZiAoZ2xvYmFsT2JqZWN0LT5pbmhlcml0czxKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U+KHZt
KSkKICAgICAgICAgcmV0dXJuICZqc0Nhc3Q8Y29uc3QgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNl
Kj4oZ2xvYmFsT2JqZWN0KS0+d3JhcHBlZCgpLm1vZHVsZUxvYWRlcigpOwotICAgIGlmIChnbG9i
YWxPYmplY3QtPmluaGVyaXRzPEpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdD4odm0pKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGRhdGFMb2coIlVuZXhwZWN0ZWQgZ2xvYmFs
IG9iamVjdDogIiwgSlNWYWx1ZShnbG9iYWxPYmplY3QpLCAiXG4iKTsKICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdC5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDQxNGY2ZDNkNTM0NmQ2YzI4NGVlMmM4YTc4NTQ0YzYxYzgwYTM5
NzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0LmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAt
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJK
U0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3QuaCIKLQotI2luY2x1ZGUgIldlYkNvcmVKU0Ns
aWVudERhdGEuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3BhY2UgSlND
OwotCi1jb25zdCBDbGFzc0luZm8gSlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0OjpzX2lu
Zm8gPSB7ICJKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBu
dWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTSURCU2VyaWFsaXphdGlvbkds
b2JhbE9iamVjdCkgfTsKLQotaW5saW5lIEpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdDo6
SlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFJlZjxET01XcmFwcGVyV29ybGQ+JiYgaW1wbCkKLSAgICA6IEJhc2Uodm0sIHN0cnVjdHVy
ZSwgV1RGTW92ZShpbXBsKSkKLSAgICAsIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChFbXB0eVNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmNyZWF0ZSh2bSkpCi17Ci19Ci0KLUpTSURCU2VyaWFsaXph
dGlvbkdsb2JhbE9iamVjdCogSlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0OjpjcmVhdGUo
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPERPTVdyYXBwZXJXb3JsZD4mJiBpbXBs
KQotewotICAgIEpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdCogcHRyID0gIG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPEpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdD4odm0pKSBK
U0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3Qodm0sIHN0cnVjdHVyZSwgV1RGTW92ZShpbXBs
KSk7Ci0gICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgcmV0dXJuIHB0cjsKLX0KLQot
dm9pZCBKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci19Ci0KLUdDQ2xpZW50OjpJc29T
dWJzcGFjZSogSlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0OjpzdWJzcGFjZUZvckltcGwo
Vk0mIHZtKQotewotICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5j
bGllbnREYXRhKS0+aWRiU2VyaWFsaXphdGlvblNwYWNlKCk7Ci19Ci0KLXZvaWQgSlNJREJTZXJp
YWxpemF0aW9uR2xvYmFsT2JqZWN0OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBzdGF0
aWNfY2FzdDxKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3QqPihjZWxsKS0+SlNJREJTZXJp
YWxpemF0aW9uR2xvYmFsT2JqZWN0Ojp+SlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0KCk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3QuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmIxMGE3ZDU3Y2M3NTZjMmIzNTgwMzgyNDM0OTky
NDllOGQ1YzMxYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmpl
Y3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAi
RW1wdHlTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSAiSlNET01HbG9iYWxPYmpl
Y3QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBKU0lEQlNlcmlhbGl6YXRpb25H
bG9iYWxPYmplY3QgZmluYWwgOiBwdWJsaWMgSlNET01HbG9iYWxPYmplY3QgewotcHVibGljOgot
ICAgIHVzaW5nIEJhc2UgPSBKU0RPTUdsb2JhbE9iamVjdDsKLSAgICBzdGF0aWMgSlNJREJTZXJp
YWxpemF0aW9uR2xvYmFsT2JqZWN0KiBjcmVhdGUoSlNDOjpWTSYsIEpTQzo6U3RydWN0dXJlKiwg
UmVmPERPTVdyYXBwZXJXb3JsZD4mJik7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpT
dWJzcGFjZUFjY2VzcyBtb2RlPgotICAgIHN0YXRpYyBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCi0gICAgewotICAgICAgICBpZiBjb25zdGV4cHIg
KG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQotICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwotICAg
IH0KLSAgICBzdGF0aWMgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJik7Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
Ci0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgMCwgcHJv
dG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6R2xvYmFsT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOwotICAgIH0KLSAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxs
Kik7Ci0KLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkgY29uc3QgeyByZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LnB0cigpOyB9Ci0KLXBy
aXZhdGU6Ci0gICAgSlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0KEpTQzo6Vk0mLCBKU0M6
OlN0cnVjdHVyZSosIFJlZjxET01XcmFwcGVyV29ybGQ+JiYpOwotICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oSlNDOjpWTSYpOwotCi0gICAgUmVmPEVtcHR5U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4g
bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0
VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcAppbmRleCBjZTk5ZmQ1ZjMyMTRjNDBhNTg2MDUxMDUzMWNjMTFiZjI5ZTg2ZTQwLi5i
ZGYwZjRjY2Y2NGM0YTYwZmRlZTFhNGU1YzNhM2YyYzA5OWE0YmVlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTQ5
LDcgKzQ5LDYgQEAKICNpbmNsdWRlICJKU0V4ZWNTdGF0ZS5oIgogI2luY2x1ZGUgIkpTRmlsZS5o
IgogI2luY2x1ZGUgIkpTRmlsZUxpc3QuaCIKLSNpbmNsdWRlICJKU0lEQlNlcmlhbGl6YXRpb25H
bG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0ltYWdlQml0bWFwLmgiCiAjaW5jbHVkZSAiSlNJ
bWFnZURhdGEuaCIKICNpbmNsdWRlICJKU01lc3NhZ2VQb3J0LmgiCkBAIC01MzYsMTMgKzUzNSwx
OCBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RyaW5nRGF0YUlzOEJpdEZsYWcgPSAweDgwMDAw
MDAwOwogICogICAgICB8IERlc3RpbmF0aW9uQ29sb3JTcGFjZUNHQ29sb3JTcGFjZVByb3BlcnR5
TGlzdFRhZyA8cHJvcGVydHlMaXN0RGF0YUxlbmd0aDp1aW50MzJfdD4gPHByb3BlcnR5TGlzdERh
dGE6dWludDhfdD57cHJvcGVydHlMaXN0RGF0YUxlbmd0aH0KICAqLwogCi11c2luZyBEZXNlcmlh
bGl6YXRpb25SZXN1bHQgPSBzdGQ6OnBhaXI8SlNDOjpKU1ZhbHVlLCBTZXJpYWxpemF0aW9uUmV0
dXJuQ29kZT47CisvLyBUaGVzZSBoZWxwZXIgZnVuY3Rpb25zIGFsbG93IHVzIHRvIHVzZSByZWZl
cmVuY2VzIGluIHRoaXMgZmlsZSBmb3IgYXJndW1lbnRzIHRvIGZ1bmN0aW9ucyB0aGF0IGFyZSBw
b2ludGVycywgYnV0IHdpbGwgYmUgcmVmZXJlbmNlcyBzb29uLgorLy8gV2UgY2FuIG1vdmUgdGhl
c2UgdG8gaGVhZGVycyBsYXRlciBpbiB0aGUgdHJhbnNpdGlvbiBpZiBuZWVkZWQsIGFuZCBldmVu
dHVhbGx5IGNhbiByZW1vdmUgdGhlc2Ugb25jZSB0aGUgY2hhbmdlcyBhcmUgY29tcGxldGUuCitz
dGF0aWMgYXV0byBleGVjdXRpb25Db250ZXh0KEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QpIHsgcmV0dXJuIGV4ZWN1dGlvbkNvbnRleHQoJmdsb2JhbE9iamVjdCk7IH0KK3RlbXBsYXRl
PHR5cGVuYW1lIEFyZ3VtZW50VHlwZT4gYXV0byB0b0pTKEpTRE9NR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBBcmd1bWVu
dFR5cGUmJiBhcmd1bWVudCkgeyByZXR1cm4gdG9KUygmbGV4aWNhbEdsb2JhbE9iamVjdCwgJmds
b2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50VHlwZT4oYXJndW1lbnQpKTsgfQordGVt
cGxhdGU8dHlwZW5hbWUgQXJndW1lbnRUeXBlPiBhdXRvIHRvSlNOZXdseUNyZWF0ZWQoSlNET01H
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIEFyZ3VtZW50VHlwZSYmIGFyZ3VtZW50KSB7IHJldHVybiB0b0pTTmV3bHlDcmVh
dGVkKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8QXJn
dW1lbnRUeXBlPihhcmd1bWVudCkpOyB9CisKK3VzaW5nIERlc2VyaWFsaXphdGlvblJlc3VsdCA9
IHN0ZDo6cGFpcjxKU1ZhbHVlLCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZT47CiAKIGNsYXNzIENs
b25lQmFzZSB7CiBwcm90ZWN0ZWQ6Ci0gICAgQ2xvbmVCYXNlKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0KQorICAgIENsb25lQmFzZShKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCkKICAgICAgICAgOiBtX2xleGljYWxHbG9iYWxPYmplY3QobGV4aWNhbEdsb2Jh
bE9iamVjdCkKLSAgICAgICAgLCBtX2ZhaWxlZChmYWxzZSkKICAgICB7CiAgICAgfQogCkBAIC01
NTEsMjQgKzU1NSwzMCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKICAg
ICB9CiAKLSAgICBKU0dsb2JhbE9iamVjdCogbV9sZXhpY2FsR2xvYmFsT2JqZWN0OwotICAgIGJv
b2wgbV9mYWlsZWQ7Ci0gICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbV9nY0J1ZmZlcjsKLX07Cisg
ICAgVk0mIHZtKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xleGljYWxHbG9iYWxP
YmplY3Qudm0oKTsKKyAgICB9CiAKLSNpZiBFTkFCTEUoV0VCX0NSWVBUTykKLXN0YXRpYyBib29s
IHdyYXBDcnlwdG9LZXkoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYga2V5LCBWZWN0b3I8dWludDhfdD4mIHdyYXBwZWRLZXkpCi17Ci0g
ICAgYXV0byBjb250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dChsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
LSAgICByZXR1cm4gY29udGV4dCAmJiBjb250ZXh0LT53cmFwQ3J5cHRvS2V5KGtleSwgd3JhcHBl
ZEtleSk7Ci19CisgICAgYm9vbCBpc0RPTUdsb2JhbE9iamVjdCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9sZXhpY2FsR2xvYmFsT2JqZWN0LmluaGVyaXRzPEpTRE9NR2xvYmFsT2Jq
ZWN0Pih2bSgpKTsKKyAgICB9CiAKLXN0YXRpYyBib29sIHVud3JhcENyeXB0b0tleShKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB3cmFw
cGVkS2V5LCBWZWN0b3I8dWludDhfdD4mIGtleSkKLXsKLSAgICBhdXRvIGNvbnRleHQgPSBleGVj
dXRpb25Db250ZXh0KGxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBjb250ZXh0ICYm
IGNvbnRleHQtPnVud3JhcENyeXB0b0tleSh3cmFwcGVkS2V5LCBrZXkpOwotfQotI2VuZGlmCisg
ICAgSlNET01HbG9iYWxPYmplY3QmIGxleGljYWxET01HbG9iYWxPYmplY3QoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbV9sZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICB9CisKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBleGVjdXRpb25D
b250ZXh0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0RPTUdsb2JhbE9iamVjdCgpID8gbnVs
bHB0ciA6IFdlYkNvcmU6OmV4ZWN1dGlvbkNvbnRleHQobGV4aWNhbERPTUdsb2JhbE9iamVjdCgp
KTsKKyAgICB9CisKKyAgICBKU0dsb2JhbE9iamVjdCYgbV9sZXhpY2FsR2xvYmFsT2JqZWN0Owor
ICAgIGJvb2wgbV9mYWlsZWQgeyBmYWxzZSB9OworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIG1f
Z2NCdWZmZXI7Cit9OwogCiAjaWYgQVNTVU1FX0xJVFRMRV9FTkRJQU4KIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPiBzdGF0aWMgdm9pZCB3cml0ZUxpdHRsZUVuZGlhbihWZWN0b3I8dWludDhfdD4mIGJ1
ZmZlciwgVCB2YWx1ZSkKQEAgLTYxNyw3ICs2MjcsNyBAQCB0ZW1wbGF0ZSA8PiBib29sIHdyaXRl
TGl0dGxlRW5kaWFuPHVpbnQ4X3Q+KFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyLCBjb25zdCB1aW50
OAogCiBjbGFzcyBDbG9uZVNlcmlhbGl6ZXIgOiBDbG9uZUJhc2UgewogcHVibGljOgotICAgIHN0
YXRpYyBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBzZXJpYWxpemUoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBv
cnQ+PiYgbWVzc2FnZVBvcnRzLCBWZWN0b3I8UmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+PiYgYXJy
YXlCdWZmZXJzLCBjb25zdCBWZWN0b3I8UmVmUHRyPEltYWdlQml0bWFwPj4mIGltYWdlQml0bWFw
cywKKyAgICBzdGF0aWMgU2VyaWFsaXphdGlvblJldHVybkNvZGUgc2VyaWFsaXplKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBWZWN0b3I8UmVmUHRy
PE1lc3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZlcj4+
JiBhcnJheUJ1ZmZlcnMsIGNvbnN0IFZlY3RvcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiYgaW1hZ2VC
aXRtYXBzLAogI2lmIEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTX0lOX1dPUktFUlMpCiAgICAgICAg
ICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPE9mZnNjcmVlbkNhbnZhcz4+JiBvZmZzY3JlZW5DYW52
YXNlcywKICNlbmRpZgpAQCAtNjY0LDcgKzY3NCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
dHlwZWRlZiBIYXNoTWFwPEpTT2JqZWN0KiwgdWludDMyX3Q+IE9iamVjdFBvb2w7CiAKLSAgICBD
bG9uZVNlcmlhbGl6ZXIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFZlY3Rv
cjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYgbWVzc2FnZVBvcnRzLCBWZWN0b3I8UmVmUHRyPEpTQzo6
QXJyYXlCdWZmZXI+PiYgYXJyYXlCdWZmZXJzLCBjb25zdCBWZWN0b3I8UmVmUHRyPEltYWdlQml0
bWFwPj4mIGltYWdlQml0bWFwcywKKyAgICBDbG9uZVNlcmlhbGl6ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYgbWVzc2Fn
ZVBvcnRzLCBWZWN0b3I8UmVmUHRyPEFycmF5QnVmZmVyPj4mIGFycmF5QnVmZmVycywgY29uc3Qg
VmVjdG9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+JiBpbWFnZUJpdG1hcHMsCiAjaWYgRU5BQkxFKE9G
RlNDUkVFTl9DQU5WQVNfSU5fV09SS0VSUykKICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8T2Zmc2NyZWVuQ2FudmFzPj4mIG9mZnNjcmVlbkNhbnZhc2VzLAogI2VuZGlmCkBAIC02NzYs
MTUgKzY4NiwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgV2FzbU1lbW9yeUhhbmRsZUFycmF5
JiB3YXNtTWVtb3J5SGFuZGxlcywKICNlbmRpZgogICAgICAgICBWZWN0b3I8QmxvYlVSTEhhbmRs
ZT4mIGJsb2JIYW5kbGVzLCBWZWN0b3I8dWludDhfdD4mIG91dCwgU2VyaWFsaXphdGlvbkNvbnRl
eHQgY29udGV4dCwgQXJyYXlCdWZmZXJDb250ZW50c0FycmF5JiBzaGFyZWRCdWZmZXJzKQotICAg
ICAgICA6IENsb25lQmFzZShsZXhpY2FsR2xvYmFsT2JqZWN0KQotICAgICAgICAsIG1fYnVmZmVy
KG91dCkKLSAgICAgICAgLCBtX2Jsb2JIYW5kbGVzKGJsb2JIYW5kbGVzKQotICAgICAgICAsIG1f
ZW1wdHlJZGVudGlmaWVyKElkZW50aWZpZXI6OmZyb21TdHJpbmcobGV4aWNhbEdsb2JhbE9iamVj
dC0+dm0oKSwgZW1wdHlTdHJpbmcoKSkpCi0gICAgICAgICwgbV9jb250ZXh0KGNvbnRleHQpCi0g
ICAgICAgICwgbV9zaGFyZWRCdWZmZXJzKHNoYXJlZEJ1ZmZlcnMpCisgICAgICAgICAgICA6IENs
b25lQmFzZShsZXhpY2FsR2xvYmFsT2JqZWN0KQorICAgICAgICAgICAgLCBtX2J1ZmZlcihvdXQp
CisgICAgICAgICAgICAsIG1fYmxvYkhhbmRsZXMoYmxvYkhhbmRsZXMpCisgICAgICAgICAgICAs
IG1fZW1wdHlJZGVudGlmaWVyKElkZW50aWZpZXI6OmZyb21TdHJpbmcobGV4aWNhbEdsb2JhbE9i
amVjdC52bSgpLCBlbXB0eVN0cmluZygpKSkKKyAgICAgICAgICAgICwgbV9jb250ZXh0KGNvbnRl
eHQpCisgICAgICAgICAgICAsIG1fc2hhcmVkQnVmZmVycyhzaGFyZWRCdWZmZXJzKQogI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKLSAgICAgICAgLCBtX3dhc21Nb2R1bGVzKHdhc21Nb2R1bGVzKQot
ICAgICAgICAsIG1fd2FzbU1lbW9yeUhhbmRsZXMod2FzbU1lbW9yeUhhbmRsZXMpCisgICAgICAg
ICAgICAsIG1fd2FzbU1vZHVsZXMod2FzbU1vZHVsZXMpCisgICAgICAgICAgICAsIG1fd2FzbU1l
bW9yeUhhbmRsZXMod2FzbU1lbW9yeUhhbmRsZXMpCiAjZW5kaWYKICAgICB7CiAgICAgICAgIHdy
aXRlKEN1cnJlbnRWZXJzaW9uKTsKQEAgLTY5OSw1NyArNzA5LDE3IEBAIHByaXZhdGU6CiAjZW5k
aWYKICAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgICB2b2lkIGZpbGxUcmFuc2Zl
ck1hcChjb25zdCBWZWN0b3I8UmVmUHRyPFQ+PiYgaW5wdXQsIE9iamVjdFBvb2wmIHJlc3VsdCkK
LSAgICB7Ci0gICAgICAgIGlmIChpbnB1dC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihtX2xleGljYWxHbG9iYWxPYmplY3QpOwotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGlucHV0LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBKU0M6OkpTVmFs
dWUgdmFsdWUgPSB0b0pTKG1fbGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpbnB1
dFtpXS5nZXQoKSk7Ci0gICAgICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmogPSB2YWx1ZS5nZXRP
YmplY3QoKTsKLSAgICAgICAgICAgIGlmIChvYmogJiYgIXJlc3VsdC5jb250YWlucyhvYmopKQot
ICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQob2JqLCBpKTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgICB2b2lkIGZpbGxUcmFuc2Zlck1hcChjb25zdCBWZWN0
b3I8UmVmPFQ+PiYgaW5wdXQsIE9iamVjdFBvb2wmIHJlc3VsdCkKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWZWN0b3JUeXBlPiB2b2lkIGZpbGxUcmFuc2Zlck1hcChjb25zdCBWZWN0b3JUeXBlJiBp
bnB1dCwgT2JqZWN0UG9vbCYgcmVzdWx0KQogICAgIHsKLSAgICAgICAgaWYgKGlucHV0LmlzRW1w
dHkoKSkKKyAgICAgICAgaWYgKCFpc0RPTUdsb2JhbE9iamVjdCgpKQogICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4obV9sZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBpbnB1dC5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgSlNDOjpK
U1ZhbHVlIHZhbHVlID0gdG9KUyhtX2xleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwg
aW5wdXRbaV0uZ2V0KCkpOwotICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqID0gdmFsdWUu
Z2V0T2JqZWN0KCk7Ci0gICAgICAgICAgICBpZiAob2JqICYmICFyZXN1bHQuY29udGFpbnMob2Jq
KSkKLSAgICAgICAgICAgICAgICByZXN1bHQuYWRkKG9iaiwgaSk7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwLCBzaXplID0gaW5wdXQuc2l6ZSgpOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAg
ICAgICBpZiAoYXV0byogb2JqZWN0ID0gdG9KUyhsZXhpY2FsRE9NR2xvYmFsT2JqZWN0KCksIGxl
eGljYWxET01HbG9iYWxPYmplY3QoKSwgaW5wdXRbaV0uZ2V0KCkpLmdldE9iamVjdCgpOyBvYmpl
Y3QgJiYgIXJlc3VsdC5jb250YWlucyhvYmplY3QpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5h
ZGQob2JqZWN0LCBpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIFNlcmlhbGl6YXRpb25SZXR1
cm5Db2RlIHNlcmlhbGl6ZShKU1ZhbHVlIGluKTsKLQotICAgIGJvb2wgaXNBcnJheShWTSYgdm0s
IEpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09i
amVjdCh2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBvYmplY3QtPmluaGVyaXRzPEpTQXJyYXk+KHZt
KTsKLSAgICB9Ci0KLSAgICBib29sIGlzTWFwKFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKLSAgICAgICAg
cmV0dXJuIG9iamVjdC0+aW5oZXJpdHM8SlNNYXA+KHZtKTsKLSAgICB9Ci0gICAgYm9vbCBpc1Nl
dChWTSYgdm0sIEpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoIXZhbHVlLmlzT2Jq
ZWN0KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIEpTT2JqZWN0KiBvYmpl
Y3QgPSBhc09iamVjdCh2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBvYmplY3QtPmluaGVyaXRzPEpT
U2V0Pih2bSk7Ci0gICAgfQorICAgIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlIHNlcmlhbGl6ZShK
U1ZhbHVlKTsKIAogICAgIGJvb2wgY2hlY2tGb3JEdXBsaWNhdGUoSlNPYmplY3QqIG9iamVjdCkK
ICAgICB7CkBAIC04MjMsMTEgKzc5MywxMSBAQCBwcml2YXRlOgogICAgICAgICB3cml0ZShUZXJt
aW5hdG9yVGFnKTsKICAgICB9CiAKLSAgICBKU1ZhbHVlIGdldFByb3BlcnR5KFZNJiB2bSwgSlNP
YmplY3QqIG9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQorICAgIEpTVmFs
dWUgZ2V0UHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lKQogICAgIHsKICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBQcm9wZXJ0
eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKLSAgICAgICAgaWYgKG9iamVjdC0+bWV0
aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBtX2xleGljYWxHbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCkpCi0gICAgICAgICAgICByZXR1cm4gc2xvdC5nZXRW
YWx1ZShtX2xleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIGlmIChv
YmplY3QtPm1ldGhvZFRhYmxlKHZtKCkpLT5nZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCAmbV9s
ZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQorICAgICAgICAgICAgcmV0
dXJuIHNsb3QuZ2V0VmFsdWUoJm1fbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICB9CiAKQEAgLTk1Miw1MSArOTIyLDQ3IEBA
IHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBKU0M6OkpTVmFsdWUgdG9KU0FycmF5
QnVmZmVyKEFycmF5QnVmZmVyJiBhcnJheUJ1ZmZlcikKKyAgICBKU1ZhbHVlIHRvSlNBcnJheUJ1
ZmZlcihBcnJheUJ1ZmZlciYgYXJyYXlCdWZmZXIpCiAgICAgewotICAgICAgICBhdXRvJiB2bSA9
IG1fbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICAgICAgYXV0byogZ2xvYmFsT2JqZWN0
ID0gbV9sZXhpY2FsR2xvYmFsT2JqZWN0OwotICAgICAgICBpZiAoZ2xvYmFsT2JqZWN0LT5pbmhl
cml0czxKU0RPTUdsb2JhbE9iamVjdD4odm0pKQotICAgICAgICAgICAgcmV0dXJuIHRvSlMoZ2xv
YmFsT2JqZWN0LCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpLCAmYXJy
YXlCdWZmZXIpOwotCisgICAgICAgIGlmIChpc0RPTUdsb2JhbE9iamVjdCgpKQorICAgICAgICAg
ICAgcmV0dXJuIHRvSlMobGV4aWNhbERPTUdsb2JhbE9iamVjdCgpLCBsZXhpY2FsRE9NR2xvYmFs
T2JqZWN0KCksICZhcnJheUJ1ZmZlcik7CiAgICAgICAgIGlmIChhdXRvKiBidWZmZXIgPSBhcnJh
eUJ1ZmZlci5tX3dyYXBwZXIuZ2V0KCkpCiAgICAgICAgICAgICByZXR1cm4gYnVmZmVyOwotCi0g
ICAgICAgIHJldHVybiBKU0M6OkpTQXJyYXlCdWZmZXI6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LT5hcnJheUJ1ZmZlclN0cnVjdHVyZShhcnJheUJ1ZmZlci5zaGFyaW5nTW9kZSgpKSwgJmFycmF5
QnVmZmVyKTsKKyAgICAgICAgYXV0byogc3RydWN0dXJlID0gbV9sZXhpY2FsR2xvYmFsT2JqZWN0
LmFycmF5QnVmZmVyU3RydWN0dXJlKGFycmF5QnVmZmVyLnNoYXJpbmdNb2RlKCkpOworICAgICAg
ICByZXR1cm4gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKHZtKCksIHN0cnVjdHVyZSwgJmFycmF5QnVm
ZmVyKTsKICAgICB9CiAKICAgICBib29sIGR1bXBBcnJheUJ1ZmZlclZpZXcoSlNPYmplY3QqIG9i
aiwgU2VyaWFsaXphdGlvblJldHVybkNvZGUmIGNvZGUpCiAgICAgewotICAgICAgICBWTSYgdm0g
PSBtX2xleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAgIHdyaXRlKEFycmF5QnVmZmVy
Vmlld1RhZyk7Ci0gICAgICAgIGlmIChvYmotPmluaGVyaXRzPEpTRGF0YVZpZXc+KHZtKSkKKyAg
ICAgICAgaWYgKG9iai0+aW5oZXJpdHM8SlNEYXRhVmlldz4odm0oKSkpCiAgICAgICAgICAgICB3
cml0ZShEYXRhVmlld1RhZyk7Ci0gICAgICAgIGVsc2UgaWYgKG9iai0+aW5oZXJpdHM8SlNVaW50
OENsYW1wZWRBcnJheT4odm0pKQorICAgICAgICBlbHNlIGlmIChvYmotPmluaGVyaXRzPEpTVWlu
dDhDbGFtcGVkQXJyYXk+KHZtKCkpKQogICAgICAgICAgICAgd3JpdGUoVWludDhDbGFtcGVkQXJy
YXlUYWcpOwotICAgICAgICBlbHNlIGlmIChvYmotPmluaGVyaXRzPEpTSW50OEFycmF5Pih2bSkp
CisgICAgICAgIGVsc2UgaWYgKG9iai0+aW5oZXJpdHM8SlNJbnQ4QXJyYXk+KHZtKCkpKQogICAg
ICAgICAgICAgd3JpdGUoSW50OEFycmF5VGFnKTsKLSAgICAgICAgZWxzZSBpZiAob2JqLT5pbmhl
cml0czxKU1VpbnQ4QXJyYXk+KHZtKSkKKyAgICAgICAgZWxzZSBpZiAob2JqLT5pbmhlcml0czxK
U1VpbnQ4QXJyYXk+KHZtKCkpKQogICAgICAgICAgICAgd3JpdGUoVWludDhBcnJheVRhZyk7Ci0g
ICAgICAgIGVsc2UgaWYgKG9iai0+aW5oZXJpdHM8SlNJbnQxNkFycmF5Pih2bSkpCisgICAgICAg
IGVsc2UgaWYgKG9iai0+aW5oZXJpdHM8SlNJbnQxNkFycmF5Pih2bSgpKSkKICAgICAgICAgICAg
IHdyaXRlKEludDE2QXJyYXlUYWcpOwotICAgICAgICBlbHNlIGlmIChvYmotPmluaGVyaXRzPEpT
VWludDE2QXJyYXk+KHZtKSkKKyAgICAgICAgZWxzZSBpZiAob2JqLT5pbmhlcml0czxKU1VpbnQx
NkFycmF5Pih2bSgpKSkKICAgICAgICAgICAgIHdyaXRlKFVpbnQxNkFycmF5VGFnKTsKLSAgICAg
ICAgZWxzZSBpZiAob2JqLT5pbmhlcml0czxKU0ludDMyQXJyYXk+KHZtKSkKKyAgICAgICAgZWxz
ZSBpZiAob2JqLT5pbmhlcml0czxKU0ludDMyQXJyYXk+KHZtKCkpKQogICAgICAgICAgICAgd3Jp
dGUoSW50MzJBcnJheVRhZyk7Ci0gICAgICAgIGVsc2UgaWYgKG9iai0+aW5oZXJpdHM8SlNVaW50
MzJBcnJheT4odm0pKQorICAgICAgICBlbHNlIGlmIChvYmotPmluaGVyaXRzPEpTVWludDMyQXJy
YXk+KHZtKCkpKQogICAgICAgICAgICAgd3JpdGUoVWludDMyQXJyYXlUYWcpOwotICAgICAgICBl
bHNlIGlmIChvYmotPmluaGVyaXRzPEpTRmxvYXQzMkFycmF5Pih2bSkpCisgICAgICAgIGVsc2Ug
aWYgKG9iai0+aW5oZXJpdHM8SlNGbG9hdDMyQXJyYXk+KHZtKCkpKQogICAgICAgICAgICAgd3Jp
dGUoRmxvYXQzMkFycmF5VGFnKTsKLSAgICAgICAgZWxzZSBpZiAob2JqLT5pbmhlcml0czxKU0Zs
b2F0NjRBcnJheT4odm0pKQorICAgICAgICBlbHNlIGlmIChvYmotPmluaGVyaXRzPEpTRmxvYXQ2
NEFycmF5Pih2bSgpKSkKICAgICAgICAgICAgIHdyaXRlKEZsb2F0NjRBcnJheVRhZyk7Ci0gICAg
ICAgIGVsc2UgaWYgKG9iai0+aW5oZXJpdHM8SlNCaWdJbnQ2NEFycmF5Pih2bSkpCisgICAgICAg
IGVsc2UgaWYgKG9iai0+aW5oZXJpdHM8SlNCaWdJbnQ2NEFycmF5Pih2bSgpKSkKICAgICAgICAg
ICAgIHdyaXRlKEJpZ0ludDY0QXJyYXlUYWcpOwotICAgICAgICBlbHNlIGlmIChvYmotPmluaGVy
aXRzPEpTQmlnVWludDY0QXJyYXk+KHZtKSkKKyAgICAgICAgZWxzZSBpZiAob2JqLT5pbmhlcml0
czxKU0JpZ1VpbnQ2NEFycmF5Pih2bSgpKSkKICAgICAgICAgICAgIHdyaXRlKEJpZ1VpbnQ2NEFy
cmF5VGFnKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ICAgIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGFycmF5QnVmZmVyVmlldyA9IHRvUG9zc2libHlT
aGFyZWRBcnJheUJ1ZmZlclZpZXcodm0sIG9iaik7CisgICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZl
clZpZXc+IGFycmF5QnVmZmVyVmlldyA9IHRvUG9zc2libHlTaGFyZWRBcnJheUJ1ZmZlclZpZXco
dm0oKSwgb2JqKTsKICAgICAgICAgdWludDY0X3QgYnl0ZU9mZnNldCA9IGFycmF5QnVmZmVyVmll
dy0+Ynl0ZU9mZnNldCgpOwogICAgICAgICB3cml0ZShieXRlT2Zmc2V0KTsKICAgICAgICAgdWlu
dDY0X3QgYnl0ZUxlbmd0aCA9IGFycmF5QnVmZmVyVmlldy0+Ynl0ZUxlbmd0aCgpOwpAQCAtMTAy
MCw4ICs5ODYsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkdW1wRE9NUG9pbnQoSlNPYmplY3Qq
IG9iaikKICAgICB7Ci0gICAgICAgIFZNJiB2bSA9IG1fbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0o
KTsKLSAgICAgICAgaWYgKG9iai0+aW5oZXJpdHM8SlNET01Qb2ludD4odm0pKQorICAgICAgICBp
ZiAob2JqLT5pbmhlcml0czxKU0RPTVBvaW50Pih2bSgpKSkKICAgICAgICAgICAgIHdyaXRlKERP
TVBvaW50VGFnKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgd3JpdGUoRE9NUG9pbnRSZWFk
T25seVRhZyk7CkBAIC0xMDMxLDggKzk5Niw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGR1bXBE
T01SZWN0KEpTT2JqZWN0KiBvYmopCiAgICAgewotICAgICAgICBWTSYgdm0gPSBtX2xleGljYWxH
bG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgICAgIGlmIChvYmotPmluaGVyaXRzPEpTRE9NUmVjdD4o
dm0pKQorICAgICAgICBpZiAob2JqLT5pbmhlcml0czxKU0RPTVJlY3Q+KHZtKCkpKQogICAgICAg
ICAgICAgd3JpdGUoRE9NUmVjdFRhZyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHdyaXRl
KERPTVJlY3RSZWFkT25seVRhZyk7CkBAIC0xMDQ2LDggKzEwMTAsNyBAQCBwcml2YXRlOgogCiAg
ICAgdm9pZCBkdW1wRE9NTWF0cml4KEpTT2JqZWN0KiBvYmopCiAgICAgewotICAgICAgICBWTSYg
dm0gPSBtX2xleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgICAgIGlmIChvYmotPmluaGVy
aXRzPEpTRE9NTWF0cml4Pih2bSkpCisgICAgICAgIGlmIChvYmotPmluaGVyaXRzPEpTRE9NTWF0
cml4Pih2bSgpKSkKICAgICAgICAgICAgIHdyaXRlKERPTU1hdHJpeFRhZyk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIHdyaXRlKERPTU1hdHJpeFJlYWRPbmx5VGFnKTsKQEAgLTExNzEsNyAr
MTEzNCw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGR1bXBET01FeGNlcHRpb24oSlNPYmplY3Qq
IG9iaiwgU2VyaWFsaXphdGlvblJldHVybkNvZGUmIGNvZGUpCiAgICAgewotICAgICAgICBpZiAo
YXV0byogZXhjZXB0aW9uID0gSlNET01FeGNlcHRpb246OnRvV3JhcHBlZChtX2xleGljYWxHbG9i
YWxPYmplY3QtPnZtKCksIG9iaikpIHsKKyAgICAgICAgaWYgKGF1dG8qIGV4Y2VwdGlvbiA9IEpT
RE9NRXhjZXB0aW9uOjp0b1dyYXBwZWQodm0oKSwgb2JqKSkgewogICAgICAgICAgICAgd3JpdGUo
RE9NRXhjZXB0aW9uVGFnKTsKICAgICAgICAgICAgIHdyaXRlKGV4Y2VwdGlvbi0+bWVzc2FnZSgp
KTsKICAgICAgICAgICAgIHdyaXRlKGV4Y2VwdGlvbi0+bmFtZSgpKTsKQEAgLTExOTAsNyArMTE1
Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVCh2YWx1ZS5pc0NlbGwoKSk7CiAKICAgICAg
ICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgICAgIGR1bXBTdHJpbmcoYXNTdHJp
bmcodmFsdWUpLT52YWx1ZShtX2xleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICAgICAgICAgIGR1
bXBTdHJpbmcoYXNTdHJpbmcodmFsdWUpLT52YWx1ZSgmbV9sZXhpY2FsR2xvYmFsT2JqZWN0KSk7
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCkBAIC0xMjA1LDM4ICsxMTY4
LDM3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCi0g
ICAgICAgIFZNJiB2bSA9IG1fbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICAgICAgaWYg
KGlzQXJyYXkodm0sIHZhbHVlKSkKKyAgICAgICAgaWYgKHZhbHVlLmluaGVyaXRzPEpTQXJyYXk+
KHZtKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGlmICh2YWx1ZS5p
c09iamVjdCgpKSB7CiAgICAgICAgICAgICBhdXRvKiBvYmogPSBhc09iamVjdCh2YWx1ZSk7Ci0g
ICAgICAgICAgICBpZiAoYXV0byogZGF0ZU9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8RGF0ZUluc3Rh
bmNlKj4odm0sIG9iaikpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBkYXRlT2JqZWN0ID0ganNE
eW5hbWljQ2FzdDxEYXRlSW5zdGFuY2UqPih2bSgpLCBvYmopKSB7CiAgICAgICAgICAgICAgICAg
d3JpdGUoRGF0ZVRhZyk7CiAgICAgICAgICAgICAgICAgd3JpdGUoZGF0ZU9iamVjdC0+aW50ZXJu
YWxOdW1iZXIoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAoYXV0byogYm9vbGVhbk9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8Qm9v
bGVhbk9iamVjdCo+KHZtLCBvYmopKSB7CisgICAgICAgICAgICBpZiAoYXV0byogYm9vbGVhbk9i
amVjdCA9IGpzRHluYW1pY0Nhc3Q8Qm9vbGVhbk9iamVjdCo+KHZtKCksIG9iaikpIHsKICAgICAg
ICAgICAgICAgICBpZiAoIXN0YXJ0T2JqZWN0SW50ZXJuYWwoYm9vbGVhbk9iamVjdCkpIC8vIGhh
bmRsZSBkdXBsaWNhdGVzCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICAgICAgICAgIHdyaXRlKGJvb2xlYW5PYmplY3QtPmludGVybmFsVmFsdWUoKS50b0Jvb2xlYW4o
bV9sZXhpY2FsR2xvYmFsT2JqZWN0KSA/IFRydWVPYmplY3RUYWcgOiBGYWxzZU9iamVjdFRhZyk7
CisgICAgICAgICAgICAgICAgd3JpdGUoYm9vbGVhbk9iamVjdC0+aW50ZXJuYWxWYWx1ZSgpLnRv
Qm9vbGVhbigmbV9sZXhpY2FsR2xvYmFsT2JqZWN0KSA/IFRydWVPYmplY3RUYWcgOiBGYWxzZU9i
amVjdFRhZyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAoYXV0byogc3RyaW5nT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxTdHJpbmdP
YmplY3QqPih2bSwgb2JqKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIHN0cmluZ09iamVjdCA9
IGpzRHluYW1pY0Nhc3Q8U3RyaW5nT2JqZWN0Kj4odm0oKSwgb2JqKSkgewogICAgICAgICAgICAg
ICAgIGlmICghc3RhcnRPYmplY3RJbnRlcm5hbChzdHJpbmdPYmplY3QpKSAvLyBoYW5kbGUgZHVw
bGljYXRlcwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICBTdHJpbmcgc3RyID0gYXNTdHJpbmcoc3RyaW5nT2JqZWN0LT5pbnRlcm5hbFZhbHVlKCkpLT52
YWx1ZShtX2xleGljYWxHbG9iYWxPYmplY3QpOworICAgICAgICAgICAgICAgIFN0cmluZyBzdHIg
PSBhc1N0cmluZyhzdHJpbmdPYmplY3QtPmludGVybmFsVmFsdWUoKSktPnZhbHVlKCZtX2xleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgICAgICAgICAgICAgIGR1bXBTdHJpbmdPYmplY3Qoc3RyKTsK
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmIChhdXRvKiBudW1iZXJPYmplY3QgPSBqc0R5bmFtaWNDYXN0PE51bWJlck9iamVjdCo+KHZt
LCBvYmopKSB7CisgICAgICAgICAgICBpZiAoYXV0byogbnVtYmVyT2JqZWN0ID0ganNEeW5hbWlj
Q2FzdDxOdW1iZXJPYmplY3QqPih2bSgpLCBvYmopKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFz
dGFydE9iamVjdEludGVybmFsKG51bWJlck9iamVjdCkpIC8vIGhhbmRsZSBkdXBsaWNhdGVzCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIHdyaXRlKE51
bWJlck9iamVjdFRhZyk7CiAgICAgICAgICAgICAgICAgd3JpdGUobnVtYmVyT2JqZWN0LT5pbnRl
cm5hbFZhbHVlKCkuYXNOdW1iZXIoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYXV0byogYmlnSW50T2JqZWN0ID0ganNEeW5h
bWljQ2FzdDxCaWdJbnRPYmplY3QqPih2bSwgb2JqKSkgeworICAgICAgICAgICAgaWYgKGF1dG8q
IGJpZ0ludE9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8QmlnSW50T2JqZWN0Kj4odm0oKSwgb2JqKSkg
ewogICAgICAgICAgICAgICAgIGlmICghc3RhcnRPYmplY3RJbnRlcm5hbChiaWdJbnRPYmplY3Qp
KSAvLyBoYW5kbGUgZHVwbGljYXRlcwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgICAgICAgICBKU1ZhbHVlIGJpZ0ludFZhbHVlID0gYmlnSW50T2JqZWN0LT5pbnRl
cm5hbFZhbHVlKCk7CkBAIC0xMjQ1LDE5ICsxMjA3LDE5IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgZHVtcEJpZ0ludERhdGEoYmlnSW50VmFsdWUpOwogICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGF1dG8qIGZpbGUgPSBKU0Zp
bGU6OnRvV3JhcHBlZCh2bSwgb2JqKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIGZpbGUgPSBK
U0ZpbGU6OnRvV3JhcHBlZCh2bSgpLCBvYmopKSB7CiAgICAgICAgICAgICAgICAgd3JpdGUoRmls
ZVRhZyk7CiAgICAgICAgICAgICAgICAgd3JpdGUoKmZpbGUpOwogICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGF1dG8qIGxpc3QgPSBK
U0ZpbGVMaXN0Ojp0b1dyYXBwZWQodm0sIG9iaikpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBs
aXN0ID0gSlNGaWxlTGlzdDo6dG9XcmFwcGVkKHZtKCksIG9iaikpIHsKICAgICAgICAgICAgICAg
ICB3cml0ZShGaWxlTGlzdFRhZyk7CiAgICAgICAgICAgICAgICAgd3JpdGUobGlzdC0+bGVuZ3Ro
KCkpOwogICAgICAgICAgICAgICAgIGZvciAoYXV0byYgZmlsZSA6IGxpc3QtPmZpbGVzKCkpCiAg
ICAgICAgICAgICAgICAgICAgIHdyaXRlKGZpbGUuZ2V0KCkpOwogICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGF1dG8qIGJsb2IgPSBK
U0Jsb2I6OnRvV3JhcHBlZCh2bSwgb2JqKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIGJsb2Ig
PSBKU0Jsb2I6OnRvV3JhcHBlZCh2bSgpLCBvYmopKSB7CiAgICAgICAgICAgICAgICAgd3JpdGUo
QmxvYlRhZyk7CiAgICAgICAgICAgICAgICAgbV9ibG9iSGFuZGxlcy5hcHBlbmQoYmxvYi0+aGFu
ZGxlKCkpOwogICAgICAgICAgICAgICAgIHdyaXRlKGJsb2ItPnVybCgpLnN0cmluZygpKTsKQEAg
LTEyNjcsNyArMTIyOSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgd3JpdGUoc2l6ZSk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAoYXV0byogZGF0YSA9IEpTSW1hZ2VEYXRhOjp0b1dyYXBwZWQodm0sIG9iaikpIHsKKyAg
ICAgICAgICAgIGlmIChhdXRvKiBkYXRhID0gSlNJbWFnZURhdGE6OnRvV3JhcHBlZCh2bSgpLCBv
YmopKSB7CiAgICAgICAgICAgICAgICAgd3JpdGUoSW1hZ2VEYXRhVGFnKTsKICAgICAgICAgICAg
ICAgICB3cml0ZShkYXRhLT53aWR0aCgpKTsKICAgICAgICAgICAgICAgICB3cml0ZShkYXRhLT5o
ZWlnaHQoKSk7CkBAIC0xMjgxLDEzICsxMjQzLDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgd3JpdGUoZGF0YS0+Y29sb3JTcGFjZSgpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChhdXRvKiByZWdFeHAgPSBqc0R5bmFt
aWNDYXN0PFJlZ0V4cE9iamVjdCo+KHZtLCBvYmopKSB7CisgICAgICAgICAgICBpZiAoYXV0byog
cmVnRXhwID0ganNEeW5hbWljQ2FzdDxSZWdFeHBPYmplY3QqPih2bSgpLCBvYmopKSB7CiAgICAg
ICAgICAgICAgICAgd3JpdGUoUmVnRXhwVGFnKTsKICAgICAgICAgICAgICAgICB3cml0ZShyZWdF
eHAtPnJlZ0V4cCgpLT5wYXR0ZXJuKCkpOwotICAgICAgICAgICAgICAgIHdyaXRlKFN0cmluZyhK
U0M6OllhcnI6OmZsYWdzU3RyaW5nKHJlZ0V4cC0+cmVnRXhwKCktPmZsYWdzKCkpLmRhdGEoKSkp
OworICAgICAgICAgICAgICAgIHdyaXRlKFN0cmluZyhZYXJyOjpmbGFnc1N0cmluZyhyZWdFeHAt
PnJlZ0V4cCgpLT5mbGFncygpKS5kYXRhKCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChvYmotPmluaGVyaXRzPEpTTWVzc2Fn
ZVBvcnQ+KHZtKSkgeworICAgICAgICAgICAgaWYgKG9iai0+aW5oZXJpdHM8SlNNZXNzYWdlUG9y
dD4odm0oKSkpIHsKICAgICAgICAgICAgICAgICBhdXRvIGluZGV4ID0gbV90cmFuc2ZlcnJlZE1l
c3NhZ2VQb3J0cy5maW5kKG9iaik7CiAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9IG1fdHJh
bnNmZXJyZWRNZXNzYWdlUG9ydHMuZW5kKCkpIHsKICAgICAgICAgICAgICAgICAgICAgd3JpdGUo
TWVzc2FnZVBvcnRSZWZlcmVuY2VUYWcpOwpAQCAtMTI5OCw3ICsxMjYwLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICBjb2RlID0gU2VyaWFsaXphdGlvblJldHVybkNvZGU6OlZhbGlkYXRp
b25FcnJvcjsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmIChhdXRvKiBhcnJheUJ1ZmZlciA9IHRvUG9zc2libHlTaGFyZWRBcnJheUJ1
ZmZlcih2bSwgb2JqKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIGFycmF5QnVmZmVyID0gdG9Q
b3NzaWJseVNoYXJlZEFycmF5QnVmZmVyKHZtKCksIG9iaikpIHsKICAgICAgICAgICAgICAgICBp
ZiAoYXJyYXlCdWZmZXItPmlzRGV0YWNoZWQoKSkgewogICAgICAgICAgICAgICAgICAgICBjb2Rl
ID0gU2VyaWFsaXphdGlvblJldHVybkNvZGU6OlZhbGlkYXRpb25FcnJvcjsKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMzI5LDcgKzEyOTEsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIHdyaXRlKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihhcnJheUJ1ZmZl
ci0+ZGF0YSgpKSwgYnl0ZUxlbmd0aCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAob2JqLT5pbmhlcml0czxKU0FycmF5QnVmZmVy
Vmlldz4odm0pKSB7CisgICAgICAgICAgICBpZiAob2JqLT5pbmhlcml0czxKU0FycmF5QnVmZmVy
Vmlldz4odm0oKSkpIHsKICAgICAgICAgICAgICAgICBpZiAoY2hlY2tGb3JEdXBsaWNhdGUob2Jq
KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgYm9v
bCBzdWNjZXNzID0gZHVtcEFycmF5QnVmZmVyVmlldyhvYmosIGNvZGUpOwpAQCAtMTMzNywxMiAr
MTI5OSwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiBzdWNjZXNzOwogICAg
ICAgICAgICAgfQogI2lmIEVOQUJMRShXRUJfQ1JZUFRPKQotICAgICAgICAgICAgaWYgKGF1dG8q
IGtleSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQodm0sIG9iaikpIHsKKyAgICAgICAgICAgIGlm
IChhdXRvKiBrZXkgPSBKU0NyeXB0b0tleTo6dG9XcmFwcGVkKHZtKCksIG9iaikpIHsKICAgICAg
ICAgICAgICAgICB3cml0ZShDcnlwdG9LZXlUYWcpOwogICAgICAgICAgICAgICAgIFZlY3Rvcjx1
aW50OF90PiBzZXJpYWxpemVkS2V5OwogICAgICAgICAgICAgICAgIFZlY3RvcjxCbG9iVVJMSGFu
ZGxlPiBkdW1teUJsb2JIYW5kbGVzOwogICAgICAgICAgICAgICAgIFZlY3RvcjxSZWZQdHI8TWVz
c2FnZVBvcnQ+PiBkdW1teU1lc3NhZ2VQb3J0czsKLSAgICAgICAgICAgICAgICBWZWN0b3I8UmVm
UHRyPEpTQzo6QXJyYXlCdWZmZXI+PiBkdW1teUFycmF5QnVmZmVyczsKKyAgICAgICAgICAgICAg
ICBWZWN0b3I8UmVmUHRyPEFycmF5QnVmZmVyPj4gZHVtbXlBcnJheUJ1ZmZlcnM7CiAjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQogICAgICAgICAgICAgICAgIFdhc21Nb2R1bGVBcnJheSBkdW1teU1v
ZHVsZXM7CiAgICAgICAgICAgICAgICAgV2FzbU1lbW9yeUhhbmRsZUFycmF5IGR1bW15TWVtb3J5
SGFuZGxlczsKQEAgLTEzNjIsMTQgKzEzMjQsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgZHVtbXlCbG9iSGFuZGxlcywgc2VyaWFsaXplZEtleSwgU2VyaWFsaXphdGlvbkNvbnRl
eHQ6OkRlZmF1bHQsIGR1bW15U2hhcmVkQnVmZmVycyk7CiAgICAgICAgICAgICAgICAgcmF3S2V5
U2VyaWFsaXplci53cml0ZShrZXkpOwogICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiB3
cmFwcGVkS2V5OwotICAgICAgICAgICAgICAgIGlmICghd3JhcENyeXB0b0tleShtX2xleGljYWxH
bG9iYWxPYmplY3QsIHNlcmlhbGl6ZWRLZXksIHdyYXBwZWRLZXkpKQorICAgICAgICAgICAgICAg
IGF1dG8qIGNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgICAgICAgICAgaWYg
KCFjb250ZXh0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgaWYgKCFjb250ZXh0LT53cmFwQ3J5cHRvS2V5KHNlcmlhbGl6ZWRLZXksIHdyYXBwZWRL
ZXkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAg
d3JpdGUod3JhcHBlZEtleSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
ICAgICB9CiAjZW5kaWYKICNpZiBFTkFCTEUoV0VCX1JUQykKLSAgICAgICAgICAgIGlmIChhdXRv
KiBydGNDZXJ0aWZpY2F0ZSA9IEpTUlRDQ2VydGlmaWNhdGU6OnRvV3JhcHBlZCh2bSwgb2JqKSkg
eworICAgICAgICAgICAgaWYgKGF1dG8qIHJ0Y0NlcnRpZmljYXRlID0gSlNSVENDZXJ0aWZpY2F0
ZTo6dG9XcmFwcGVkKHZtKCksIG9iaikpIHsKICAgICAgICAgICAgICAgICB3cml0ZShSVENDZXJ0
aWZpY2F0ZVRhZyk7CiAgICAgICAgICAgICAgICAgd3JpdGUocnRjQ2VydGlmaWNhdGUtPmV4cGly
ZXMoKSk7CiAgICAgICAgICAgICAgICAgd3JpdGUocnRjQ2VydGlmaWNhdGUtPnBlbUNlcnRpZmlj
YXRlKCkpOwpAQCAtMTM4NCw3ICsxMzQ5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICNl
bmRpZgogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICAgICAgICAgIGlmIChKU1dlYkFzc2Vt
Ymx5TW9kdWxlKiBtb2R1bGUgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlNb2R1bGUqPih2
bSwgb2JqKSkgeworICAgICAgICAgICAgaWYgKEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSA9
IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KHZtKCksIG9iaikpIHsKICAgICAg
ICAgICAgICAgICBpZiAobV9jb250ZXh0ICE9IFNlcmlhbGl6YXRpb25Db250ZXh0OjpXb3JrZXJQ
b3N0TWVzc2FnZSAmJiBtX2NvbnRleHQgIT0gU2VyaWFsaXphdGlvbkNvbnRleHQ6OldpbmRvd1Bv
c3RNZXNzYWdlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTEzOTQs
OCArMTM1OSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgd3JpdGUoaW5kZXgpOwogICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJs
eU1lbW9yeSo+KHZtLCBvYmopKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1lbW9yeS0+bWVtb3J5
KCkuc2hhcmluZ01vZGUoKSAhPSBKU0M6Oldhc206Ok1lbW9yeVNoYXJpbmdNb2RlOjpTaGFyZWQp
IHsKKyAgICAgICAgICAgIGlmIChKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkgPSBqc0R5bmFt
aWNDYXN0PEpTV2ViQXNzZW1ibHlNZW1vcnkqPih2bSgpLCBvYmopKSB7CisgICAgICAgICAgICAg
ICAgaWYgKG1lbW9yeS0+bWVtb3J5KCkuc2hhcmluZ01vZGUoKSAhPSBXYXNtOjpNZW1vcnlTaGFy
aW5nTW9kZTo6U2hhcmVkKSB7CiAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBTZXJpYWxpemF0
aW9uUmV0dXJuQ29kZTo6RGF0YUNsb25lRXJyb3I7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICAgICAgICAgIH0KQEAgLTE0MTAsMzkgKzEzNzUsMzkgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICNlbmRpZgot
ICAgICAgICAgICAgaWYgKG9iai0+aW5oZXJpdHM8SlNET01Qb2ludFJlYWRPbmx5Pih2bSkpIHsK
KyAgICAgICAgICAgIGlmIChvYmotPmluaGVyaXRzPEpTRE9NUG9pbnRSZWFkT25seT4odm0oKSkp
IHsKICAgICAgICAgICAgICAgICBkdW1wRE9NUG9pbnQob2JqKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChvYmotPmluaGVyaXRz
PEpTRE9NUmVjdFJlYWRPbmx5Pih2bSkpIHsKKyAgICAgICAgICAgIGlmIChvYmotPmluaGVyaXRz
PEpTRE9NUmVjdFJlYWRPbmx5Pih2bSgpKSkgewogICAgICAgICAgICAgICAgIGR1bXBET01SZWN0
KG9iaik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAob2JqLT5pbmhlcml0czxKU0RPTU1hdHJpeFJlYWRPbmx5Pih2bSkpIHsKKyAg
ICAgICAgICAgIGlmIChvYmotPmluaGVyaXRzPEpTRE9NTWF0cml4UmVhZE9ubHk+KHZtKCkpKSB7
CiAgICAgICAgICAgICAgICAgZHVtcERPTU1hdHJpeChvYmopOwogICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG9iai0+aW5oZXJpdHM8
SlNET01RdWFkPih2bSkpIHsKKyAgICAgICAgICAgIGlmIChvYmotPmluaGVyaXRzPEpTRE9NUXVh
ZD4odm0oKSkpIHsKICAgICAgICAgICAgICAgICBkdW1wRE9NUXVhZChvYmopOwogICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG9iai0+
aW5oZXJpdHModm0sIEpTSW1hZ2VCaXRtYXA6OmluZm8oKSkpIHsKKyAgICAgICAgICAgIGlmIChv
YmotPmluaGVyaXRzKHZtKCksIEpTSW1hZ2VCaXRtYXA6OmluZm8oKSkpIHsKICAgICAgICAgICAg
ICAgICBkdW1wSW1hZ2VCaXRtYXAob2JqLCBjb2RlKTsKICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgICAgIH0KICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBU19JTl9XT1JL
RVJTKQotICAgICAgICAgICAgaWYgKG9iai0+aW5oZXJpdHModm0sIEpTT2Zmc2NyZWVuQ2FudmFz
OjppbmZvKCkpKSB7CisgICAgICAgICAgICBpZiAob2JqLT5pbmhlcml0cyh2bSgpLCBKU09mZnNj
cmVlbkNhbnZhczo6aW5mbygpKSkgewogICAgICAgICAgICAgICAgIGR1bXBPZmZzY3JlZW5DYW52
YXMob2JqLCBjb2RlKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAg
IH0KICNlbmRpZgogI2lmIEVOQUJMRShXRUJfUlRDKQotICAgICAgICAgICAgaWYgKG9iai0+aW5o
ZXJpdHModm0sIEpTUlRDRGF0YUNoYW5uZWw6OmluZm8oKSkpIHsKKyAgICAgICAgICAgIGlmIChv
YmotPmluaGVyaXRzKHZtKCksIEpTUlRDRGF0YUNoYW5uZWw6OmluZm8oKSkpIHsKICAgICAgICAg
ICAgICAgICBkdW1wUlRDRGF0YUNoYW5uZWwob2JqLCBjb2RlKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICNlbmRpZgotICAgICAgICAgICAgaWYgKG9iai0+
aW5oZXJpdHModm0sIEpTRE9NRXhjZXB0aW9uOjppbmZvKCkpKSB7CisgICAgICAgICAgICBpZiAo
b2JqLT5pbmhlcml0cyh2bSgpLCBKU0RPTUV4Y2VwdGlvbjo6aW5mbygpKSkgewogICAgICAgICAg
ICAgICAgIGR1bXBET01FeGNlcHRpb24ob2JqLCBjb2RlKTsKICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KQEAgLTE1ODYsNyArMTU1MSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIGlmIChzdHIuaXNOdWxsKCkpCiAgICAgICAgICAgICB3cml0ZShtX2VtcHR5SWRlbnRp
Zmllcik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHdyaXRlKElkZW50aWZpZXI6OmZyb21T
dHJpbmcobV9sZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpLCBzdHIpKTsKKyAgICAgICAgICAgIHdy
aXRlKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0oKSwgc3RyKSk7CiAgICAgfQogCiAgICAgdm9p
ZCB3cml0ZShjb25zdCBWZWN0b3I8dWludDhfdD4mIHZlY3RvcikKQEAgLTE4OTQsNyArMTg1OSw2
IEBAIHByaXZhdGU6CiAKIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlIENsb25lU2VyaWFsaXplcjo6
c2VyaWFsaXplKEpTVmFsdWUgaW4pCiB7Ci0gICAgVk0mIHZtID0gbV9sZXhpY2FsR2xvYmFsT2Jq
ZWN0LT52bSgpOwogICAgIFZlY3Rvcjx1aW50MzJfdCwgMTY+IGluZGV4U3RhY2s7CiAgICAgVmVj
dG9yPHVpbnQzMl90LCAxNj4gbGVuZ3RoU3RhY2s7CiAgICAgVmVjdG9yPFByb3BlcnR5TmFtZUFy
cmF5LCAxNj4gcHJvcGVydHlTdGFjazsKQEAgLTE5MDUsMTIgKzE4NjksMTIgQEAgU2VyaWFsaXph
dGlvblJldHVybkNvZGUgQ2xvbmVTZXJpYWxpemVyOjpzZXJpYWxpemUoSlNWYWx1ZSBpbikKICAg
ICBWZWN0b3I8V2Fsa2VyU3RhdGUsIDE2PiBzdGF0ZVN0YWNrOwogICAgIFdhbGtlclN0YXRlIGxl
eGljYWxHbG9iYWxPYmplY3QgPSBTdGF0ZVVua25vd247CiAgICAgSlNWYWx1ZSBpblZhbHVlID0g
aW47Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKCkpOwogICAgIHdoaWxlICgxKSB7CiAgICAg
ICAgIHN3aXRjaCAobGV4aWNhbEdsb2JhbE9iamVjdCkgewogICAgICAgICAgICAgYXJyYXlTdGFy
dFN0YXRlOgogICAgICAgICAgICAgY2FzZSBBcnJheVN0YXJ0U3RhdGU6IHsKLSAgICAgICAgICAg
ICAgICBBU1NFUlQoaXNBcnJheSh2bSwgaW5WYWx1ZSkpOworICAgICAgICAgICAgICAgIEFTU0VS
VChpblZhbHVlLmluaGVyaXRzPEpTQXJyYXk+KHZtKCkpKTsKICAgICAgICAgICAgICAgICBpZiAo
aW5wdXRPYmplY3RTdGFjay5zaXplKCkgPiBtYXhpbXVtRmlsdGVyUmVjdXJzaW9uKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gU2VyaWFsaXphdGlvblJldHVybkNvZGU6OlN0YWNrT3ZlcmZs
b3dFcnJvcjsKIApAQCAtMTkzMSw4ICsxODk1LDggQEAgU2VyaWFsaXphdGlvblJldHVybkNvZGUg
Q2xvbmVTZXJpYWxpemVyOjpzZXJpYWxpemUoSlNWYWx1ZSBpbikKICAgICAgICAgICAgICAgICAg
ICAgaW5kZXhTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aFN0
YWNrLnJlbW92ZUxhc3QoKTsKIAotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0YWNrLmFw
cGVuZChQcm9wZXJ0eU5hbWVBcnJheSh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJp
dmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpKTsKLSAgICAgICAgICAgICAgICAgICAgYXJyYXktPmdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhtX2xleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5
U3RhY2subGFzdCgpLCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKTsKKyAgICAgICAg
ICAgICAgICAgICAgcHJvcGVydHlTdGFjay5hcHBlbmQoUHJvcGVydHlOYW1lQXJyYXkodm0oKSwg
UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpKTsK
KyAgICAgICAgICAgICAgICAgICAgYXJyYXktPmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcygm
bV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eVN0YWNrLmxhc3QoKSwgRG9udEVudW1Qcm9w
ZXJ0aWVzTW9kZTo6RXhjbHVkZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2VyaWFs
aXphdGlvblJldHVybkNvZGU6OkV4aXN0aW5nRXhjZXB0aW9uRXJyb3I7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChwcm9wZXJ0eVN0YWNrLmxhc3QoKS5zaXplKCkpIHsKQEAgLTE5NDYsNyArMTkx
MCw3IEBAIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlIENsb25lU2VyaWFsaXplcjo6c2VyaWFsaXpl
KEpTVmFsdWUgaW4pCiAgICAgICAgICAgICAgICAgICAgIGlucHV0T2JqZWN0U3RhY2sucmVtb3Zl
TGFzdCgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgaW5WYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleChtX2xleGljYWxH
bG9iYWxPYmplY3QsIGluZGV4KTsKKyAgICAgICAgICAgICAgICBpblZhbHVlID0gYXJyYXktPmdl
dERpcmVjdEluZGV4KCZtX2xleGljYWxHbG9iYWxPYmplY3QsIGluZGV4KTsKICAgICAgICAgICAg
ICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gU2VyaWFsaXphdGlvblJldHVybkNvZGU6OkV4aXN0aW5nRXhjZXB0aW9uRXJyb3I7
CiAgICAgICAgICAgICAgICAgaWYgKCFpblZhbHVlKSB7CkBAIC0xOTgxLDEyICsxOTQ1LDEyIEBA
IFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlIENsb25lU2VyaWFsaXplcjo6c2VyaWFsaXplKEpTVmFs
dWUgaW4pCiAgICAgICAgICAgICAgICAgLy8gb2JqZWN0cyBoYXZlIGJlZW4gaGFuZGxlZC4gSWYg
d2UgcmVhY2ggdGhpcyBwb2ludCBhbmQKICAgICAgICAgICAgICAgICAvLyB0aGUgaW5wdXQgaXMg
bm90IGFuIE9iamVjdCBvYmplY3QgdGhlbiB3ZSBzaG91bGQgdGhyb3cKICAgICAgICAgICAgICAg
ICAvLyBhIERhdGFDbG9uZUVycm9yLgotICAgICAgICAgICAgICAgIGlmIChpbk9iamVjdC0+Y2xh
c3NJbmZvKHZtKSAhPSBKU0ZpbmFsT2JqZWN0OjppbmZvKCkpCisgICAgICAgICAgICAgICAgaWYg
KGluT2JqZWN0LT5jbGFzc0luZm8odm0oKSkgIT0gSlNGaW5hbE9iamVjdDo6aW5mbygpKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gU2VyaWFsaXphdGlvblJldHVybkNvZGU6OkRhdGFDbG9u
ZUVycm9yOwogICAgICAgICAgICAgICAgIGlucHV0T2JqZWN0U3RhY2suYXBwZW5kKGluT2JqZWN0
KTsKICAgICAgICAgICAgICAgICBpbmRleFN0YWNrLmFwcGVuZCgwKTsKLSAgICAgICAgICAgICAg
ICBwcm9wZXJ0eVN0YWNrLmFwcGVuZChQcm9wZXJ0eU5hbWVBcnJheSh2bSwgUHJvcGVydHlOYW1l
TW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpKTsKLSAgICAgICAgICAg
ICAgICBpbk9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluT2Jq
ZWN0LCBtX2xleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5U3RhY2subGFzdCgpLCBEb250RW51
bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKTsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0YWNr
LmFwcGVuZChQcm9wZXJ0eU5hbWVBcnJheSh2bSgpLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdz
LCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSkpOworICAgICAgICAgICAgICAgIGluT2JqZWN0
LT5tZXRob2RUYWJsZSh2bSgpKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhpbk9iamVjdCwgJm1fbGV4
aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlTdGFjay5sYXN0KCksIERvbnRFbnVtUHJvcGVydGll
c01vZGU6OkV4Y2x1ZGUpOwogICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTZXJpYWxpemF0aW9uUmV0dXJu
Q29kZTo6RXhpc3RpbmdFeGNlcHRpb25FcnJvcjsKICAgICAgICAgICAgIH0KQEAgLTIwMDMsNyAr
MTk2Nyw3IEBAIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlIENsb25lU2VyaWFsaXplcjo6c2VyaWFs
aXplKEpTVmFsdWUgaW4pCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RhY2sucmVtb3Zl
TGFzdCgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgaW5WYWx1ZSA9IGdldFByb3BlcnR5KHZtLCBvYmplY3QsIHByb3BlcnRp
ZXNbaW5kZXhdKTsKKyAgICAgICAgICAgICAgICBpblZhbHVlID0gZ2V0UHJvcGVydHkob2JqZWN0
LCBwcm9wZXJ0aWVzW2luZGV4XSk7CiAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNlcmlhbGl6YXRpb25S
ZXR1cm5Db2RlOjpFeGlzdGluZ0V4Y2VwdGlvbkVycm9yOwogCkBAIC0yMDQwLDcgKzIwMDQsNyBA
QCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBDbG9uZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShKU1Zh
bHVlIGluKQogICAgICAgICAgICAgICAgIEpTTWFwKiBpbk1hcCA9IGpzQ2FzdDxKU01hcCo+KGlu
VmFsdWUpOwogICAgICAgICAgICAgICAgIGlmICghc3RhcnRNYXAoaW5NYXApKQogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBKU01hcEl0ZXJhdG9yKiBpdGVyYXRv
ciA9IEpTTWFwSXRlcmF0b3I6OmNyZWF0ZSh2bSwgbV9sZXhpY2FsR2xvYmFsT2JqZWN0LT5tYXBJ
dGVyYXRvclN0cnVjdHVyZSgpLCBpbk1hcCwgSXRlcmF0aW9uS2luZDo6RW50cmllcyk7CisgICAg
ICAgICAgICAgICAgSlNNYXBJdGVyYXRvciogaXRlcmF0b3IgPSBKU01hcEl0ZXJhdG9yOjpjcmVh
dGUodm0oKSwgbV9sZXhpY2FsR2xvYmFsT2JqZWN0Lm1hcEl0ZXJhdG9yU3RydWN0dXJlKCksIGlu
TWFwLCBJdGVyYXRpb25LaW5kOjpFbnRyaWVzKTsKICAgICAgICAgICAgICAgICBtX2djQnVmZmVy
LmFwcGVuZFdpdGhDcmFzaE9uT3ZlcmZsb3coaW5NYXApOwogICAgICAgICAgICAgICAgIG1fZ2NC
dWZmZXIuYXBwZW5kV2l0aENyYXNoT25PdmVyZmxvdyhpdGVyYXRvcik7CiAgICAgICAgICAgICAg
ICAgbWFwSXRlcmF0b3JTdGFjay5hcHBlbmQoaXRlcmF0b3IpOwpAQCAtMjA1MSwxMiArMjAxNSwx
MiBAQCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBDbG9uZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShK
U1ZhbHVlIGluKQogICAgICAgICAgICAgY2FzZSBNYXBEYXRhU3RhcnRWaXNpdEVudHJ5OiB7CiAg
ICAgICAgICAgICAgICAgSlNNYXBJdGVyYXRvciogaXRlcmF0b3IgPSBtYXBJdGVyYXRvclN0YWNr
Lmxhc3QoKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGtleSwgdmFsdWU7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFpdGVyYXRvci0+bmV4dEtleVZhbHVlKG1fbGV4aWNhbEdsb2JhbE9iamVjdCwg
a2V5LCB2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWl0ZXJhdG9yLT5uZXh0S2V5VmFs
dWUoJm1fbGV4aWNhbEdsb2JhbE9iamVjdCwga2V5LCB2YWx1ZSkpIHsKICAgICAgICAgICAgICAg
ICAgICAgbWFwSXRlcmF0b3JTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAgICAgICAg
IEpTT2JqZWN0KiBvYmplY3QgPSBpbnB1dE9iamVjdFN0YWNrLmxhc3QoKTsKLSAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKGpzRHluYW1pY0Nhc3Q8SlNNYXAqPih2bSwgb2JqZWN0KSk7Ci0gICAg
ICAgICAgICAgICAgICAgIHByb3BlcnR5U3RhY2suYXBwZW5kKFByb3BlcnR5TmFtZUFycmF5KHZt
LCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSkp
OwotICAgICAgICAgICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJv
cGVydHlOYW1lcyhvYmplY3QsIG1fbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlTdGFjay5s
YXN0KCksIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpOworICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxKU01hcCo+KHZtKCksIG9iamVjdCkpOworICAgICAg
ICAgICAgICAgICAgICBwcm9wZXJ0eVN0YWNrLmFwcGVuZChQcm9wZXJ0eU5hbWVBcnJheSh2bSgp
LCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSkp
OworICAgICAgICAgICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKCkpLT5nZXRPd25Q
cm9wZXJ0eU5hbWVzKG9iamVjdCwgJm1fbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlTdGFj
ay5sYXN0KCksIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpFeGlzdGluZ0V4Y2VwdGlv
bkVycm9yOwogICAgICAgICAgICAgICAgICAgICB3cml0ZShOb25NYXBQcm9wZXJ0aWVzVGFnKTsK
QEAgLTIwODYsNyArMjA1MCw3IEBAIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlIENsb25lU2VyaWFs
aXplcjo6c2VyaWFsaXplKEpTVmFsdWUgaW4pCiAgICAgICAgICAgICAgICAgSlNTZXQqIGluU2V0
ID0ganNDYXN0PEpTU2V0Kj4oaW5WYWx1ZSk7CiAgICAgICAgICAgICAgICAgaWYgKCFzdGFydFNl
dChpblNldCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIEpT
U2V0SXRlcmF0b3IqIGl0ZXJhdG9yID0gSlNTZXRJdGVyYXRvcjo6Y3JlYXRlKHZtLCBtX2xleGlj
YWxHbG9iYWxPYmplY3QtPnNldEl0ZXJhdG9yU3RydWN0dXJlKCksIGluU2V0LCBJdGVyYXRpb25L
aW5kOjpLZXlzKTsKKyAgICAgICAgICAgICAgICBKU1NldEl0ZXJhdG9yKiBpdGVyYXRvciA9IEpT
U2V0SXRlcmF0b3I6OmNyZWF0ZSh2bSgpLCBtX2xleGljYWxHbG9iYWxPYmplY3Quc2V0SXRlcmF0
b3JTdHJ1Y3R1cmUoKSwgaW5TZXQsIEl0ZXJhdGlvbktpbmQ6OktleXMpOwogICAgICAgICAgICAg
ICAgIG1fZ2NCdWZmZXIuYXBwZW5kV2l0aENyYXNoT25PdmVyZmxvdyhpblNldCk7CiAgICAgICAg
ICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmRXaXRoQ3Jhc2hPbk92ZXJmbG93KGl0ZXJhdG9yKTsK
ICAgICAgICAgICAgICAgICBzZXRJdGVyYXRvclN0YWNrLmFwcGVuZChpdGVyYXRvcik7CkBAIC0y
MDk3LDEyICsyMDYxLDEyIEBAIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlIENsb25lU2VyaWFsaXpl
cjo6c2VyaWFsaXplKEpTVmFsdWUgaW4pCiAgICAgICAgICAgICBjYXNlIFNldERhdGFTdGFydFZp
c2l0RW50cnk6IHsKICAgICAgICAgICAgICAgICBKU1NldEl0ZXJhdG9yKiBpdGVyYXRvciA9IHNl
dEl0ZXJhdG9yU3RhY2subGFzdCgpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUga2V5OwotICAg
ICAgICAgICAgICAgIGlmICghaXRlcmF0b3ItPm5leHQobV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBr
ZXkpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpdGVyYXRvci0+bmV4dCgmbV9sZXhpY2FsR2xv
YmFsT2JqZWN0LCBrZXkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHNldEl0ZXJhdG9yU3RhY2su
cmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gaW5w
dXRPYmplY3RTdGFjay5sYXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChqc0R5bmFt
aWNDYXN0PEpTU2V0Kj4odm0sIG9iamVjdCkpOwotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0
eVN0YWNrLmFwcGVuZChQcm9wZXJ0eU5hbWVBcnJheSh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3Ry
aW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpKTsKLSAgICAgICAgICAgICAgICAgICAg
b2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBtX2xl
eGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5U3RhY2subGFzdCgpLCBEb250RW51bVByb3BlcnRp
ZXNNb2RlOjpFeGNsdWRlKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGpzRHluYW1pY0Nh
c3Q8SlNTZXQqPih2bSgpLCBvYmplY3QpKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlT
dGFjay5hcHBlbmQoUHJvcGVydHlOYW1lQXJyYXkodm0oKSwgUHJvcGVydHlOYW1lTW9kZTo6U3Ry
aW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpKTsKKyAgICAgICAgICAgICAgICAgICAg
b2JqZWN0LT5tZXRob2RUYWJsZSh2bSgpKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsICZt
X2xleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5U3RhY2subGFzdCgpLCBEb250RW51bVByb3Bl
cnRpZXNNb2RlOjpFeGNsdWRlKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTZXJpYWxp
emF0aW9uUmV0dXJuQ29kZTo6RXhpc3RpbmdFeGNlcHRpb25FcnJvcjsKICAgICAgICAgICAgICAg
ICAgICAgd3JpdGUoTm9uU2V0UHJvcGVydGllc1RhZyk7CkBAIC0yMTI2LDExICsyMDkwLDExIEBA
IFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlIENsb25lU2VyaWFsaXplcjo6c2VyaWFsaXplKEpTVmFs
dWUgaW4pCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KHZtLCBpblZhbHVlKSkKKyAgICAgICAgICAgICAg
ICBpZiAoaW5WYWx1ZS5pbmhlcml0czxKU0FycmF5Pih2bSgpKSkKICAgICAgICAgICAgICAgICAg
ICAgZ290byBhcnJheVN0YXJ0U3RhdGU7Ci0gICAgICAgICAgICAgICAgaWYgKGlzTWFwKHZtLCBp
blZhbHVlKSkKKyAgICAgICAgICAgICAgICBpZiAoaW5WYWx1ZS5pbmhlcml0czxKU01hcD4odm0o
KSkpCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gbWFwU3RhcnRTdGF0ZTsKLSAgICAgICAgICAg
ICAgICBpZiAoaXNTZXQodm0sIGluVmFsdWUpKQorICAgICAgICAgICAgICAgIGlmIChpblZhbHVl
LmluaGVyaXRzPEpTU2V0Pih2bSgpKSkKICAgICAgICAgICAgICAgICAgICAgZ290byBzZXRTdGFy
dFN0YXRlOwogICAgICAgICAgICAgICAgIGdvdG8gb2JqZWN0U3RhcnRTdGF0ZTsKICAgICAgICAg
ICAgIH0KQEAgLTIxNzIsNyArMjEzNiw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN0cjsK
ICAgICB9CiAKLSAgICBzdGF0aWMgRGVzZXJpYWxpemF0aW9uUmVzdWx0IGRlc2VyaWFsaXplKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBjb25zdCBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywg
VmVjdG9yPHN0ZDo6b3B0aW9uYWw8SW1hZ2VCaXRtYXBCYWNraW5nPj4mJiBiYWNraW5nU3RvcmVz
CisgICAgc3RhdGljIERlc2VyaWFsaXphdGlvblJlc3VsdCBkZXNlcmlhbGl6ZShKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
Y29uc3QgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+JiBtZXNzYWdlUG9ydHMsIFZlY3Rvcjxz
dGQ6Om9wdGlvbmFsPEltYWdlQml0bWFwQmFja2luZz4+JiYgYmFja2luZ1N0b3JlcwogI2lmIEVO
QUJMRShPRkZTQ1JFRU5fQ0FOVkFTX0lOX1dPUktFUlMpCiAgICAgICAgICwgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxEZXRhY2hlZE9mZnNjcmVlbkNhbnZhcz4+JiYgZGV0YWNoZWRPZmZzY3JlZW5D
YW52YXNlcwogI2VuZGlmCkBAIC0yMjEyLDEwICsyMTc2LDEwIEBAIHByaXZhdGU6CiAgICAgICAg
IHsKICAgICAgICAgfQogCi0gICAgICAgIEpTVmFsdWUganNTdHJpbmcoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QpCisgICAgICAgIEpTVmFsdWUganNTdHJpbmcoVk0mIHZtKQog
ICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1fanNTdHJpbmcpCi0gICAgICAgICAgICAgICAg
bV9qc1N0cmluZyA9IEpTQzo6anNTdHJpbmcobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSwgbV9z
dHJpbmcpOworICAgICAgICAgICAgICAgIG1fanNTdHJpbmcgPSBKU0M6OmpzU3RyaW5nKHZtLCBt
X3N0cmluZyk7CiAgICAgICAgICAgICByZXR1cm4gbV9qc1N0cmluZzsKICAgICAgICAgfQogICAg
ICAgICBjb25zdCBTdHJpbmcmIHN0cmluZygpIHsgcmV0dXJuIG1fc3RyaW5nOyB9CkBAIC0yMjQ1
LDcgKzIyMDksNyBAQCBwcml2YXRlOgogICAgICAgICBzaXplX3QgbV9pbmRleDsKICAgICB9Owog
Ci0gICAgQ2xvbmVEZXNlcmlhbGl6ZXIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8TWVz
c2FnZVBvcnQ+PiYgbWVzc2FnZVBvcnRzLCBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkqIGFycmF5
QnVmZmVyQ29udGVudHMsIFZlY3RvcjxzdGQ6Om9wdGlvbmFsPEltYWdlQml0bWFwQmFja2luZz4+
JiYgYmFja2luZ1N0b3JlcywgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIKKyAgICBDbG9u
ZURlc2VyaWFsaXplcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNHbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+
JiBtZXNzYWdlUG9ydHMsIEFycmF5QnVmZmVyQ29udGVudHNBcnJheSogYXJyYXlCdWZmZXJDb250
ZW50cywgVmVjdG9yPHN0ZDo6b3B0aW9uYWw8SW1hZ2VCaXRtYXBCYWNraW5nPj4mJiBiYWNraW5n
U3RvcmVzLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ1ZmZlcgogI2lmIEVOQUJMRShPRkZTQ1JF
RU5fQ0FOVkFTX0lOX1dPUktFUlMpCiAgICAgICAgICwgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxE
ZXRhY2hlZE9mZnNjcmVlbkNhbnZhcz4+JiYgZGV0YWNoZWRPZmZzY3JlZW5DYW52YXNlcyA9IHsg
fQogI2VuZGlmCkBAIC0yMjU2LDExICsyMjIwLDkgQEAgcHJpdmF0ZToKICAgICAgICAgLCBXYXNt
TW9kdWxlQXJyYXkqIHdhc21Nb2R1bGVzID0gbnVsbHB0cgogICAgICAgICAsIFdhc21NZW1vcnlI
YW5kbGVBcnJheSogd2FzbU1lbW9yeUhhbmRsZXMgPSBudWxscHRyCiAjZW5kaWYKLSAgICAgICAg
KQorICAgICkKICAgICAgICAgOiBDbG9uZUJhc2UobGV4aWNhbEdsb2JhbE9iamVjdCkKICAgICAg
ICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QpCi0gICAgICAgICwgbV9pc0RPTUdsb2Jh
bE9iamVjdChnbG9iYWxPYmplY3QtPmluaGVyaXRzPEpTRE9NR2xvYmFsT2JqZWN0PihnbG9iYWxP
YmplY3QtPnZtKCkpKQotICAgICAgICAsIG1fY2FuQ3JlYXRlRE9NT2JqZWN0KG1faXNET01HbG9i
YWxPYmplY3QgJiYgIWdsb2JhbE9iamVjdC0+aW5oZXJpdHM8SlNJREJTZXJpYWxpemF0aW9uR2xv
YmFsT2JqZWN0PihnbG9iYWxPYmplY3QtPnZtKCkpKQogICAgICAgICAsIG1fcHRyKGJ1ZmZlci5k
YXRhKCkpCiAgICAgICAgICwgbV9lbmQoYnVmZmVyLmRhdGEoKSArIGJ1ZmZlci5zaXplKCkpCiAg
ICAgICAgICwgbV92ZXJzaW9uKDB4RkZGRkZGRkYpCkBAIC0yMjg2LDcgKzIyNDgsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgbV92ZXJzaW9uID0gMHhGRkZGRkZGRjsKICAgICB9CiAKLSAgICBD
bG9uZURlc2VyaWFsaXplcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9y
dD4+JiBtZXNzYWdlUG9ydHMsIEFycmF5QnVmZmVyQ29udGVudHNBcnJheSogYXJyYXlCdWZmZXJD
b250ZW50cywgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBibG9iVVJMcywgY29uc3QgVmVjdG9yPFN0cmluZz4gYmxvYkZpbGVQYXRocywgQXJyYXlC
dWZmZXJDb250ZW50c0FycmF5KiBzaGFyZWRCdWZmZXJzLCBWZWN0b3I8c3RkOjpvcHRpb25hbDxJ
bWFnZUJpdG1hcEJhY2tpbmc+PiYmIGJhY2tpbmdTdG9yZXMKKyAgICBDbG9uZURlc2VyaWFsaXpl
cihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+JiBtZXNzYWdlUG9y
dHMsIEFycmF5QnVmZmVyQ29udGVudHNBcnJheSogYXJyYXlCdWZmZXJDb250ZW50cywgY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBibG9iVVJMcywg
Y29uc3QgVmVjdG9yPFN0cmluZz4gYmxvYkZpbGVQYXRocywgQXJyYXlCdWZmZXJDb250ZW50c0Fy
cmF5KiBzaGFyZWRCdWZmZXJzLCBWZWN0b3I8c3RkOjpvcHRpb25hbDxJbWFnZUJpdG1hcEJhY2tp
bmc+PiYmIGJhY2tpbmdTdG9yZXMKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBU19JTl9XT1JL
RVJTKQogICAgICAgICAsIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RGV0YWNoZWRPZmZzY3JlZW5D
YW52YXM+PiYmIGRldGFjaGVkT2Zmc2NyZWVuQ2FudmFzZXMKICNlbmRpZgpAQCAtMjI5NywxMSAr
MjI1OSw5IEBAIHByaXZhdGU6CiAgICAgICAgICwgV2FzbU1vZHVsZUFycmF5KiB3YXNtTW9kdWxl
cwogICAgICAgICAsIFdhc21NZW1vcnlIYW5kbGVBcnJheSogd2FzbU1lbW9yeUhhbmRsZXMKICNl
bmRpZgotICAgICAgICApCisgICAgKQogICAgICAgICA6IENsb25lQmFzZShsZXhpY2FsR2xvYmFs
T2JqZWN0KQogICAgICAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKLSAgICAgICAg
LCBtX2lzRE9NR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+aW5oZXJpdHM8SlNET01HbG9iYWxP
YmplY3Q+KGdsb2JhbE9iamVjdC0+dm0oKSkpCi0gICAgICAgICwgbV9jYW5DcmVhdGVET01PYmpl
Y3QobV9pc0RPTUdsb2JhbE9iamVjdCAmJiAhZ2xvYmFsT2JqZWN0LT5pbmhlcml0czxKU0lEQlNl
cmlhbGl6YXRpb25HbG9iYWxPYmplY3Q+KGdsb2JhbE9iamVjdC0+dm0oKSkpCiAgICAgICAgICwg
bV9wdHIoYnVmZmVyLmRhdGEoKSkKICAgICAgICAgLCBtX2VuZChidWZmZXIuZGF0YSgpICsgYnVm
ZmVyLnNpemUoKSkKICAgICAgICAgLCBtX3ZlcnNpb24oMHhGRkZGRkZGRikKQEAgLTI1MjUsMTIg
KzI0ODUsMTIgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcHV0UHJvcGVydHkoSlNPYmplY3QqIG9i
amVjdCwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICBvYmpl
Y3QtPnB1dERpcmVjdEluZGV4KG1fbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHZhbHVlKTsK
KyAgICAgICAgb2JqZWN0LT5wdXREaXJlY3RJbmRleCgmbV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBp
bmRleCwgdmFsdWUpOwogICAgIH0KIAogICAgIHZvaWQgcHV0UHJvcGVydHkoSlNPYmplY3QqIG9i
amVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHksIEpTVmFsdWUgdmFsdWUpCiAgICAgewot
ICAgICAgICBvYmplY3QtPnB1dERpcmVjdE1heUJlSW5kZXgobV9sZXhpY2FsR2xvYmFsT2JqZWN0
LCBwcm9wZXJ0eSwgdmFsdWUpOworICAgICAgICBvYmplY3QtPnB1dERpcmVjdE1heUJlSW5kZXgo
Jm1fbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHksIHZhbHVlKTsKICAgICB9CiAKICAgICBi
b29sIHJlYWRGaWxlKFJlZlB0cjxGaWxlPiYgZmlsZSkKQEAgLTI1NjEsMTAgKzI1MjEsMTEgQEAg
cHJpdmF0ZToKICAgICAgICAgaWYgKGZpbGVQYXRoLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGZp
bGVQYXRoID0gcGF0aC0+c3RyaW5nKCk7CiAKLSAgICAgICAgaWYgKCFtX2NhbkNyZWF0ZURPTU9i
amVjdCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBhdXRvKiBjb250ZXh0ID0g
ZXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIWNvbnRleHQpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgZmlsZSA9IEZpbGU6OmRlc2VyaWFsaXplKGV4ZWN1dGlv
bkNvbnRleHQobV9sZXhpY2FsR2xvYmFsT2JqZWN0KSwgZmlsZVBhdGgsIFVSTCB7IHVybC0+c3Ry
aW5nKCkgfSwgdHlwZS0+c3RyaW5nKCksIG5hbWUtPnN0cmluZygpLCBvcHRpb25hbExhc3RNb2Rp
ZmllZCk7CisgICAgICAgIGZpbGUgPSBGaWxlOjpkZXNlcmlhbGl6ZShjb250ZXh0LCBmaWxlUGF0
aCwgVVJMIHsgdXJsLT5zdHJpbmcoKSB9LCB0eXBlLT5zdHJpbmcoKSwgbmFtZS0+c3RyaW5nKCks
IG9wdGlvbmFsTGFzdE1vZGlmaWVkKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBA
IC0yNTkwLDc3ICsyNTUxLDg5IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiByZWFkQXJyYXlC
dWZmZXJJbXBsPHVpbnQ2NF90PihhcnJheUJ1ZmZlcik7CiAgICAgfQogCi0gICAgdGVtcGxhdGUg
PHR5cGVuYW1lIExlbmd0aFR5cGU+Ci0gICAgYm9vbCByZWFkQXJyYXlCdWZmZXJWaWV3SW1wbChW
TSYgdm0sIEpTVmFsdWUmIGFycmF5QnVmZmVyVmlldykKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBM
ZW5ndGhUeXBlPiBKU1ZhbHVlIHJlYWRBcnJheUJ1ZmZlclZpZXdJbXBsKCkKICAgICB7CiAgICAg
ICAgIEFycmF5QnVmZmVyVmlld1N1YnRhZyBhcnJheUJ1ZmZlclZpZXdTdWJ0YWc7CiAgICAgICAg
IGlmICghcmVhZEFycmF5QnVmZmVyVmlld1N1YnRhZyhhcnJheUJ1ZmZlclZpZXdTdWJ0YWcpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAg
ICAgTGVuZ3RoVHlwZSBieXRlT2Zmc2V0OwogICAgICAgICBpZiAoIXJlYWQoYnl0ZU9mZnNldCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4geyB9OwogICAg
ICAgICBMZW5ndGhUeXBlIGJ5dGVMZW5ndGg7CiAgICAgICAgIGlmICghcmVhZChieXRlTGVuZ3Ro
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgSlNPYmplY3QqIGFycmF5QnVm
ZmVyT2JqID0gYXNPYmplY3QocmVhZFRlcm1pbmFsKCkpOwotICAgICAgICBpZiAoIWFycmF5QnVm
ZmVyT2JqIHx8ICFhcnJheUJ1ZmZlck9iai0+aW5oZXJpdHM8SlNBcnJheUJ1ZmZlcj4odm0pKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAg
ICAgYXV0byB0ZXJtaW5hbCA9IHJlYWRUZXJtaW5hbCgpOworICAgICAgICBpZiAoIXRlcm1pbmFs
KQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgYXV0byogYXJyYXlCdWZmZXJPYmog
PSB0ZXJtaW5hbC5nZXRPYmplY3QoKTsKKyAgICAgICAgaWYgKCFhcnJheUJ1ZmZlck9iaiB8fCAh
YXJyYXlCdWZmZXJPYmotPmluaGVyaXRzPEpTQXJyYXlCdWZmZXI+KHZtKCkpKQorICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKIAogICAgICAgICB1bnNpZ25lZCBlbGVtZW50U2l6ZSA9IHR5cGVkQXJy
YXlFbGVtZW50U2l6ZShhcnJheUJ1ZmZlclZpZXdTdWJ0YWcpOwogICAgICAgICBpZiAoIWVsZW1l
bnRTaXplKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHsg
fTsKICAgICAgICAgTGVuZ3RoVHlwZSBsZW5ndGggPSBieXRlTGVuZ3RoIC8gZWxlbWVudFNpemU7
CiAgICAgICAgIGlmIChsZW5ndGggKiBlbGVtZW50U2l6ZSAhPSBieXRlTGVuZ3RoKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgICAgICBS
ZWZQdHI8QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyID0gdG9Qb3NzaWJseVNoYXJlZEFycmF5QnVm
ZmVyKHZtLCBhcnJheUJ1ZmZlck9iaik7CisgICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYXJy
YXlCdWZmZXIgPSB0b1Bvc3NpYmx5U2hhcmVkQXJyYXlCdWZmZXIodm0oKSwgYXJyYXlCdWZmZXJP
YmopOwogICAgICAgICBzd2l0Y2ggKGFycmF5QnVmZmVyVmlld1N1YnRhZykgewogICAgICAgICBj
YXNlIERhdGFWaWV3VGFnOgotICAgICAgICAgICAgYXJyYXlCdWZmZXJWaWV3ID0gdG9KUyhtX2xl
eGljYWxHbG9iYWxPYmplY3QsIG1fZ2xvYmFsT2JqZWN0LCBEYXRhVmlldzo6Y3JlYXRlKFdURk1v
dmUoYXJyYXlCdWZmZXIpLCBieXRlT2Zmc2V0LCBsZW5ndGgpLmdldCgpKTsKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZURhdGFWaWV3KFdURk1vdmUo
YXJyYXlCdWZmZXIpLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwogICAgICAgICBjYXNlIEludDhBcnJh
eVRhZzoKLSAgICAgICAgICAgIGFycmF5QnVmZmVyVmlldyA9IHRvSlMobV9sZXhpY2FsR2xvYmFs
T2JqZWN0LCBtX2dsb2JhbE9iamVjdCwgSW50OEFycmF5Ojp0cnlDcmVhdGUoV1RGTW92ZShhcnJh
eUJ1ZmZlciksIGJ5dGVPZmZzZXQsIGxlbmd0aCkuZ2V0KCkpOwotICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlQXJyYXlCdWZmZXJWaWV3PEludDhBcnJh
eT4oV1RGTW92ZShhcnJheUJ1ZmZlciksIGJ5dGVPZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgIGNh
c2UgVWludDhBcnJheVRhZzoKLSAgICAgICAgICAgIGFycmF5QnVmZmVyVmlldyA9IHRvSlMobV9s
ZXhpY2FsR2xvYmFsT2JqZWN0LCBtX2dsb2JhbE9iamVjdCwgVWludDhBcnJheTo6dHJ5Q3JlYXRl
KFdURk1vdmUoYXJyYXlCdWZmZXIpLCBieXRlT2Zmc2V0LCBsZW5ndGgpLmdldCgpKTsKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUFycmF5QnVmZmVy
VmlldzxVaW50OEFycmF5PihXVEZNb3ZlKGFycmF5QnVmZmVyKSwgYnl0ZU9mZnNldCwgbGVuZ3Ro
KTsKICAgICAgICAgY2FzZSBVaW50OENsYW1wZWRBcnJheVRhZzoKLSAgICAgICAgICAgIGFycmF5
QnVmZmVyVmlldyA9IHRvSlMobV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBtX2dsb2JhbE9iamVjdCwg
VWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZShXVEZNb3ZlKGFycmF5QnVmZmVyKSwgYnl0ZU9m
ZnNldCwgbGVuZ3RoKS5nZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgIHJldHVybiBjcmVhdGVBcnJheUJ1ZmZlclZpZXc8VWludDhDbGFtcGVkQXJyYXk+KFdURk1v
dmUoYXJyYXlCdWZmZXIpLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwogICAgICAgICBjYXNlIEludDE2
QXJyYXlUYWc6Ci0gICAgICAgICAgICBhcnJheUJ1ZmZlclZpZXcgPSB0b0pTKG1fbGV4aWNhbEds
b2JhbE9iamVjdCwgbV9nbG9iYWxPYmplY3QsIEludDE2QXJyYXk6OnRyeUNyZWF0ZShXVEZNb3Zl
KGFycmF5QnVmZmVyKSwgYnl0ZU9mZnNldCwgbGVuZ3RoKS5nZXQoKSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVBcnJheUJ1ZmZlclZpZXc8SW50
MTZBcnJheT4oV1RGTW92ZShhcnJheUJ1ZmZlciksIGJ5dGVPZmZzZXQsIGxlbmd0aCk7CiAgICAg
ICAgIGNhc2UgVWludDE2QXJyYXlUYWc6Ci0gICAgICAgICAgICBhcnJheUJ1ZmZlclZpZXcgPSB0
b0pTKG1fbGV4aWNhbEdsb2JhbE9iamVjdCwgbV9nbG9iYWxPYmplY3QsIFVpbnQxNkFycmF5Ojp0
cnlDcmVhdGUoV1RGTW92ZShhcnJheUJ1ZmZlciksIGJ5dGVPZmZzZXQsIGxlbmd0aCkuZ2V0KCkp
OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlQXJy
YXlCdWZmZXJWaWV3PFVpbnQxNkFycmF5PihXVEZNb3ZlKGFycmF5QnVmZmVyKSwgYnl0ZU9mZnNl
dCwgbGVuZ3RoKTsKICAgICAgICAgY2FzZSBJbnQzMkFycmF5VGFnOgotICAgICAgICAgICAgYXJy
YXlCdWZmZXJWaWV3ID0gdG9KUyhtX2xleGljYWxHbG9iYWxPYmplY3QsIG1fZ2xvYmFsT2JqZWN0
LCBJbnQzMkFycmF5Ojp0cnlDcmVhdGUoV1RGTW92ZShhcnJheUJ1ZmZlciksIGJ5dGVPZmZzZXQs
IGxlbmd0aCkuZ2V0KCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBy
ZXR1cm4gY3JlYXRlQXJyYXlCdWZmZXJWaWV3PEludDMyQXJyYXk+KFdURk1vdmUoYXJyYXlCdWZm
ZXIpLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwogICAgICAgICBjYXNlIFVpbnQzMkFycmF5VGFnOgot
ICAgICAgICAgICAgYXJyYXlCdWZmZXJWaWV3ID0gdG9KUyhtX2xleGljYWxHbG9iYWxPYmplY3Qs
IG1fZ2xvYmFsT2JqZWN0LCBVaW50MzJBcnJheTo6dHJ5Q3JlYXRlKFdURk1vdmUoYXJyYXlCdWZm
ZXIpLCBieXRlT2Zmc2V0LCBsZW5ndGgpLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUFycmF5QnVmZmVyVmlldzxVaW50MzJBcnJheT4o
V1RGTW92ZShhcnJheUJ1ZmZlciksIGJ5dGVPZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgIGNhc2Ug
RmxvYXQzMkFycmF5VGFnOgotICAgICAgICAgICAgYXJyYXlCdWZmZXJWaWV3ID0gdG9KUyhtX2xl
eGljYWxHbG9iYWxPYmplY3QsIG1fZ2xvYmFsT2JqZWN0LCBGbG9hdDMyQXJyYXk6OnRyeUNyZWF0
ZShXVEZNb3ZlKGFycmF5QnVmZmVyKSwgYnl0ZU9mZnNldCwgbGVuZ3RoKS5nZXQoKSk7Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVBcnJheUJ1ZmZl
clZpZXc8RmxvYXQzMkFycmF5PihXVEZNb3ZlKGFycmF5QnVmZmVyKSwgYnl0ZU9mZnNldCwgbGVu
Z3RoKTsKICAgICAgICAgY2FzZSBGbG9hdDY0QXJyYXlUYWc6Ci0gICAgICAgICAgICBhcnJheUJ1
ZmZlclZpZXcgPSB0b0pTKG1fbGV4aWNhbEdsb2JhbE9iamVjdCwgbV9nbG9iYWxPYmplY3QsIEZs
b2F0NjRBcnJheTo6dHJ5Q3JlYXRlKFdURk1vdmUoYXJyYXlCdWZmZXIpLCBieXRlT2Zmc2V0LCBs
ZW5ndGgpLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0
dXJuIGNyZWF0ZUFycmF5QnVmZmVyVmlldzxGbG9hdDY0QXJyYXk+KFdURk1vdmUoYXJyYXlCdWZm
ZXIpLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwogICAgICAgICBjYXNlIEJpZ0ludDY0QXJyYXlUYWc6
Ci0gICAgICAgICAgICBhcnJheUJ1ZmZlclZpZXcgPSB0b0pTKG1fbGV4aWNhbEdsb2JhbE9iamVj
dCwgbV9nbG9iYWxPYmplY3QsIEJpZ0ludDY0QXJyYXk6OnRyeUNyZWF0ZShXVEZNb3ZlKGFycmF5
QnVmZmVyKSwgYnl0ZU9mZnNldCwgbGVuZ3RoKS5nZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVBcnJheUJ1ZmZlclZpZXc8QmlnSW50NjRB
cnJheT4oV1RGTW92ZShhcnJheUJ1ZmZlciksIGJ5dGVPZmZzZXQsIGxlbmd0aCk7CiAgICAgICAg
IGNhc2UgQmlnVWludDY0QXJyYXlUYWc6Ci0gICAgICAgICAgICBhcnJheUJ1ZmZlclZpZXcgPSB0
b0pTKG1fbGV4aWNhbEdsb2JhbE9iamVjdCwgbV9nbG9iYWxPYmplY3QsIEJpZ1VpbnQ2NEFycmF5
Ojp0cnlDcmVhdGUoV1RGTW92ZShhcnJheUJ1ZmZlciksIGJ5dGVPZmZzZXQsIGxlbmd0aCkuZ2V0
KCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRl
QXJyYXlCdWZmZXJWaWV3PEJpZ1VpbnQ2NEFycmF5PihXVEZNb3ZlKGFycmF5QnVmZmVyKSwgYnl0
ZU9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBi
b29sIHJlYWRBcnJheUJ1ZmZlclZpZXcoVk0mIHZtLCBKU1ZhbHVlJiBhcnJheUJ1ZmZlclZpZXcp
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGVuZ3RoVHlwZT4gSlNWYWx1ZSBjcmVhdGVEYXRhVmll
dyhSZWZQdHI8QXJyYXlCdWZmZXI+JiYgYnVmZmVyLCBMZW5ndGhUeXBlIG9mZnNldCwgTGVuZ3Ro
VHlwZSBsZW5ndGgpCisgICAgeworICAgICAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgICAgIHJl
dHVybiB7IH07CisgICAgICAgIGF1dG8gdmlldyA9IERhdGFWaWV3OjpjcmVhdGUoV1RGTW92ZShi
dWZmZXIpLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgICAgIGlmIChpc0RPTUdsb2JhbE9iamVjdCgp
KQorICAgICAgICAgICAgcmV0dXJuIHdyYXAodmlldy5nZXQoKSk7CisgICAgICAgIHJldHVybiB2
aWV3LT53cmFwKCZtX2xleGljYWxHbG9iYWxPYmplY3QsICZtX2dsb2JhbE9iamVjdCk7CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzLCB0eXBlbmFtZSBMZW5ndGhUeXBl
PiBKU1ZhbHVlIGNyZWF0ZUFycmF5QnVmZmVyVmlldyhSZWZQdHI8QXJyYXlCdWZmZXI+JiYgYnVm
ZmVyLCBMZW5ndGhUeXBlIG9mZnNldCwgTGVuZ3RoVHlwZSBsZW5ndGgpCisgICAgeworICAgICAg
ICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIGF1dG8gdmll
dyA9IFZpZXdDbGFzczo6dHJ5Q3JlYXRlKFdURk1vdmUoYnVmZmVyKSwgb2Zmc2V0LCBsZW5ndGgp
OworICAgICAgICBpZiAoIXZpZXcpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICBp
ZiAoaXNET01HbG9iYWxPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiB3cmFwKHZpZXcuZ2V0
KCkpOworICAgICAgICByZXR1cm4gdmlldy0+d3JhcCgmbV9sZXhpY2FsR2xvYmFsT2JqZWN0LCAm
bV9nbG9iYWxPYmplY3QpOworICAgIH0KKworICAgIEpTVmFsdWUgcmVhZEFycmF5QnVmZmVyVmll
dygpCiAgICAgewogICAgICAgICBpZiAobV92ZXJzaW9uIDwgMTApCi0gICAgICAgICAgICByZXR1
cm4gcmVhZEFycmF5QnVmZmVyVmlld0ltcGw8dWludDMyX3Q+KHZtLCBhcnJheUJ1ZmZlclZpZXcp
OwotICAgICAgICByZXR1cm4gcmVhZEFycmF5QnVmZmVyVmlld0ltcGw8dWludDY0X3Q+KHZtLCBh
cnJheUJ1ZmZlclZpZXcpOworICAgICAgICAgICAgcmV0dXJuIHJlYWRBcnJheUJ1ZmZlclZpZXdJ
bXBsPHVpbnQzMl90PigpOworICAgICAgICByZXR1cm4gcmVhZEFycmF5QnVmZmVyVmlld0ltcGw8
dWludDY0X3Q+KCk7CiAgICAgfQogCiAgICAgYm9vbCByZWFkKFZlY3Rvcjx1aW50OF90PiYgcmVz
dWx0KQpAQCAtMzAyOCwyNSArMzAwMSwyNSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKLSAgICBib29sIHJlYWRDcnlwdG9LZXkoSlNWYWx1ZSYgY3J5cHRvS2V5KQor
ICAgIEpTVmFsdWUgcmVhZENyeXB0b0tleSgpCiAgICAgewogICAgICAgICB1aW50MzJfdCBrZXlG
b3JtYXRWZXJzaW9uOwogICAgICAgICBpZiAoIXJlYWQoa2V5Rm9ybWF0VmVyc2lvbikgfHwga2V5
Rm9ybWF0VmVyc2lvbiA+IGN1cnJlbnRLZXlGb3JtYXRWZXJzaW9uKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgICAgICBpbnQzMl90IGV4
dHJhY3RhYmxlOwogICAgICAgICBpZiAoIXJlYWQoZXh0cmFjdGFibGUpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgICAgICB1aW50MzJf
dCB1c2FnZXNDb3VudDsKICAgICAgICAgaWYgKCFyZWFkKHVzYWdlc0NvdW50KSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CiAKICAgICAgICAgQ3J5
cHRvS2V5VXNhZ2VCaXRtYXAgdXNhZ2VzID0gMDsKICAgICAgICAgZm9yICh1aW50MzJfdCBpID0g
MDsgaSA8IHVzYWdlc0NvdW50OyArK2kpIHsKICAgICAgICAgICAgIENyeXB0b0tleVVzYWdlVGFn
IHVzYWdlOwogICAgICAgICAgICAgaWYgKCFyZWFkKHVzYWdlKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAgIHN3
aXRjaCAodXNhZ2UpIHsKICAgICAgICAgICAgIGNhc2UgQ3J5cHRvS2V5VXNhZ2VUYWc6OkVuY3J5
cHQ6CiAgICAgICAgICAgICAgICAgdXNhZ2VzIHw9IENyeXB0b0tleVVzYWdlRW5jcnlwdDsKQEAg
LTMwNzcsMzkgKzMwNTAsNTAgQEAgcHJpdmF0ZToKIAogICAgICAgICBDcnlwdG9LZXlDbGFzc1N1
YnRhZyBjcnlwdG9LZXlDbGFzczsKICAgICAgICAgaWYgKCFyZWFkKGNyeXB0b0tleUNsYXNzKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAg
ICAgIFJlZlB0cjxDcnlwdG9LZXk+IHJlc3VsdDsKICAgICAgICAgc3dpdGNoIChjcnlwdG9LZXlD
bGFzcykgewogICAgICAgICBjYXNlIENyeXB0b0tleUNsYXNzU3VidGFnOjpITUFDOgogICAgICAg
ICAgICAgaWYgKCFyZWFkSE1BQ0tleShleHRyYWN0YWJsZSwgdXNhZ2VzLCByZXN1bHQpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9Owog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ3J5cHRvS2V5Q2xhc3NTdWJ0YWc6OkFF
UzoKICAgICAgICAgICAgIGlmICghcmVhZEFFU0tleShleHRyYWN0YWJsZSwgdXNhZ2VzLCByZXN1
bHQpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1
cm4geyB9OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ3J5cHRvS2V5Q2xhc3NT
dWJ0YWc6OlJTQToKICAgICAgICAgICAgIGlmICghcmVhZFJTQUtleShleHRyYWN0YWJsZSwgdXNh
Z2VzLCByZXN1bHQpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4geyB9OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ3J5cHRv
S2V5Q2xhc3NTdWJ0YWc6OkVDOgogICAgICAgICAgICAgaWYgKCFyZWFkRUNLZXkoZXh0cmFjdGFi
bGUsIHVzYWdlcywgcmVzdWx0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IENyeXB0b0tleUNsYXNzU3VidGFnOjpSYXc6CiAgICAgICAgICAgICBpZiAoIXJlYWRSYXdLZXko
dXNhZ2VzLCByZXN1bHQpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4geyB9OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAg
ICAgY3J5cHRvS2V5ID0gZ2V0SlNWYWx1ZShyZXN1bHQuZ2V0KCkpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgcmV0dXJuIHdyYXAocmVzdWx0LmdldCgpKTsKICAgICB9CiAjZW5kaWYK
IAotICAgIHRlbXBsYXRlPGNsYXNzIFQ+Ci0gICAgSlNWYWx1ZSBnZXRKU1ZhbHVlKFQmJiBuYXRp
dmVPYmopCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNWYWx1ZSB3cmFwKFQmJiB3cmFwcGVk
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMobV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihtX2dsb2JhbE9iamVjdCksIHN0ZDo6Zm9yd2FyZDxUPihu
YXRpdmVPYmopKTsKKyAgICAgICAgaWYgKCFpc0RPTUdsb2JhbE9iamVjdCgpKSB7CisgICAgICAg
ICAgICBmYWlsKCk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAgICAg
IHJldHVybiB0b0pTKGxleGljYWxET01HbG9iYWxPYmplY3QoKSwgKmpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KCZtX2dsb2JhbE9iamVjdCksIHN0ZDo6Zm9yd2FyZDxUPih3cmFwcGVkKSk7Cisg
ICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNWYWx1ZSB3cmFwTmV3bHlDcmVhdGVk
KFQmJiB3cmFwcGVkKQorICAgIHsKKyAgICAgICAgaWYgKCFpc0RPTUdsb2JhbE9iamVjdCgpKSB7
CisgICAgICAgICAgICBmYWlsKCk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9
CisgICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKGxleGljYWxET01HbG9iYWxPYmplY3Qo
KSwgKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZtX2dsb2JhbE9iamVjdCksIHN0ZDo6Zm9y
d2FyZDxUPih3cmFwcGVkKSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgVD4KQEAgLTMx
MjgsNyArMzExMiw3IEBAIHByaXZhdGU6CiAgICAgICAgIGlmICghcmVhZCh3KSkKICAgICAgICAg
ICAgIHJldHVybiB7IH07CiAKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQobV9sZXhp
Y2FsR2xvYmFsT2JqZWN0LCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihtX2dsb2JhbE9iamVj
dCksIFQ6OmNyZWF0ZSh4LCB5LCB6LCB3KSk7CisgICAgICAgIHJldHVybiB3cmFwTmV3bHlDcmVh
dGVkKFQ6OmNyZWF0ZSh4LCB5LCB6LCB3KSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3Mg
VD4KQEAgLTMxNTksNyArMzE0Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJu
IHsgfTsKIAogICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4KG0xMSwgbTEy
LCBtMjEsIG0yMiwgbTQxLCBtNDIpOwotICAgICAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0
ZWQobV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihtX2ds
b2JhbE9iamVjdCksIFQ6OmNyZWF0ZShXVEZNb3ZlKG1hdHJpeCksIERPTU1hdHJpeFJlYWRPbmx5
OjpJczJEOjpZZXMpKTsKKyAgICAgICAgICAgIHJldHVybiB3cmFwTmV3bHlDcmVhdGVkKFQ6OmNy
ZWF0ZShXVEZNb3ZlKG1hdHJpeCksIERPTU1hdHJpeFJlYWRPbmx5OjpJczJEOjpZZXMpKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGRvdWJsZSBtMTE7CiAgICAgICAgICAgICBpZiAo
IXJlYWQobTExKSkKQEAgLTMyMTEsNyArMzE5NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKIAogICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4
KG0xMSwgbTEyLCBtMTMsIG0xNCwgbTIxLCBtMjIsIG0yMywgbTI0LCBtMzEsIG0zMiwgbTMzLCBt
MzQsIG00MSwgbTQyLCBtNDMsIG00NCk7Ci0gICAgICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3Jl
YXRlZChtX2xleGljYWxHbG9iYWxPYmplY3QsIGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KG1f
Z2xvYmFsT2JqZWN0KSwgVDo6Y3JlYXRlKFdURk1vdmUobWF0cml4KSwgRE9NTWF0cml4UmVhZE9u
bHk6OklzMkQ6Ok5vKSk7CisgICAgICAgICAgICByZXR1cm4gd3JhcE5ld2x5Q3JlYXRlZChUOjpj
cmVhdGUoV1RGTW92ZShtYXRyaXgpLCBET01NYXRyaXhSZWFkT25seTo6SXMyRDo6Tm8pKTsKICAg
ICAgICAgfQogICAgIH0KIApAQCAtMzIzMSw3ICszMjE1LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
aWYgKCFyZWFkKGhlaWdodCkpCiAgICAgICAgICAgICByZXR1cm4geyB9OwogCi0gICAgICAgIHJl
dHVybiB0b0pTTmV3bHlDcmVhdGVkKG1fbGV4aWNhbEdsb2JhbE9iamVjdCwganNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4obV9nbG9iYWxPYmplY3QpLCBUOjpjcmVhdGUoeCwgeSwgd2lkdGgsIGhl
aWdodCkpOworICAgICAgICByZXR1cm4gd3JhcE5ld2x5Q3JlYXRlZChUOjpjcmVhdGUoeCwgeSwg
d2lkdGgsIGhlaWdodCkpOwogICAgIH0KIAogICAgIHN0ZDo6b3B0aW9uYWw8RE9NUG9pbnRJbml0
PiByZWFkRE9NUG9pbnRJbml0KCkKQEAgLTMyNjQsNyArMzI0OCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIGlmICghcDQpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogCi0gICAgICAgIHJl
dHVybiB0b0pTTmV3bHlDcmVhdGVkKG1fbGV4aWNhbEdsb2JhbE9iamVjdCwganNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4obV9nbG9iYWxPYmplY3QpLCBET01RdWFkOjpjcmVhdGUocDEudmFsdWUo
KSwgcDIudmFsdWUoKSwgcDMudmFsdWUoKSwgcDQudmFsdWUoKSkpOworICAgICAgICByZXR1cm4g
d3JhcE5ld2x5Q3JlYXRlZChET01RdWFkOjpjcmVhdGUocDEudmFsdWUoKSwgcDIudmFsdWUoKSwg
cDMudmFsdWUoKSwgcDQudmFsdWUoKSkpOwogICAgIH0KIAogICAgIEpTVmFsdWUgcmVhZFRyYW5z
ZmVycmVkSW1hZ2VCaXRtYXAoKQpAQCAtMzI3OSw4ICszMjYzLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgaWYgKCFtX2ltYWdlQml0bWFwc1tpbmRleF0pCiAgICAgICAgICAgICBtX2ltYWdlQml0bWFw
c1tpbmRleF0gPSBJbWFnZUJpdG1hcDo6Y3JlYXRlKFdURk1vdmUobV9iYWNraW5nU3RvcmVzLmF0
KGluZGV4KSkpOwogCi0gICAgICAgIGF1dG8gYml0bWFwID0gbV9pbWFnZUJpdG1hcHNbaW5kZXhd
LmdldCgpOwotICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXApOworICAgICAgICByZXR1
cm4gd3JhcChtX2ltYWdlQml0bWFwc1tpbmRleF0uZ2V0KCkpOwogICAgIH0KIAogI2lmIEVOQUJM
RShPRkZTQ1JFRU5fQ0FOVkFTX0lOX1dPUktFUlMpCkBAIC0zMjkzLDExICszMjc2LDE2IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CiAKLSAgICAg
ICAgaWYgKCFtX29mZnNjcmVlbkNhbnZhc2VzW2luZGV4XSkKLSAgICAgICAgICAgIG1fb2Zmc2Ny
ZWVuQ2FudmFzZXNbaW5kZXhdID0gT2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGUoKmV4ZWN1dGlvbkNv
bnRleHQobV9sZXhpY2FsR2xvYmFsT2JqZWN0KSwgV1RGTW92ZShtX2RldGFjaGVkT2Zmc2NyZWVu
Q2FudmFzZXMuYXQoaW5kZXgpKSk7Ci0KLSAgICAgICAgYXV0byBvZmZzY3JlZW5DYW52YXMgPSBt
X29mZnNjcmVlbkNhbnZhc2VzW2luZGV4XS5nZXQoKTsKLSAgICAgICAgcmV0dXJuIGdldEpTVmFs
dWUob2Zmc2NyZWVuQ2FudmFzKTsKKyAgICAgICAgYXV0byYgY2FudmFzID0gbV9vZmZzY3JlZW5D
YW52YXNlc1tpbmRleF07CisgICAgICAgIGlmICghY2FudmFzKSB7CisgICAgICAgICAgICBhdXRv
KiBjb250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICAgICAgaWYgKCFjb250ZXh0
KSB7CisgICAgICAgICAgICAgICAgZmFpbCgpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYW52YXMgPSBPZmZzY3JlZW5DYW52YXM6OmNy
ZWF0ZSgqY29udGV4dCwgV1RGTW92ZShtX2RldGFjaGVkT2Zmc2NyZWVuQ2FudmFzZXMuYXQoaW5k
ZXgpKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHdyYXAoY2FudmFzLmdldCgpKTsKICAg
ICB9CiAjZW5kaWYKIApAQCAtMzM0MCwxMSArMzMyOCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBmaW5nZXJwcmludHMudW5jaGVja2VkQXBwZW5kKFJUQ0NlcnRpZmljYXRlOjpEdGxzRmluZ2Vy
cHJpbnQgeyBhbGdvcml0aG0tPnN0cmluZygpLCB2YWx1ZS0+c3RyaW5nKCkgfSk7CiAgICAgICAg
IH0KIAotICAgICAgICBpZiAoIW1fY2FuQ3JlYXRlRE9NT2JqZWN0KQotICAgICAgICAgICAgcmV0
dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KG1fbGV4aWNhbEdsb2JhbE9iamVjdCwgbV9nbG9iYWxP
YmplY3QtPm9iamVjdFByb3RvdHlwZSgpKTsKLQotICAgICAgICBhdXRvIHJ0Y0NlcnRpZmljYXRl
ID0gUlRDQ2VydGlmaWNhdGU6OmNyZWF0ZShTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmlu
ZyhvcmlnaW4tPnN0cmluZygpKSwgZXhwaXJlcywgV1RGTW92ZShmaW5nZXJwcmludHMpLCBjZXJ0
aWZpY2F0ZS0+dGFrZVN0cmluZygpLCBrZXllZE1hdGVyaWFsLT50YWtlU3RyaW5nKCkpOwotICAg
ICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChtX2xleGljYWxHbG9iYWxPYmplY3QsIGpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KG1fZ2xvYmFsT2JqZWN0KSwgV1RGTW92ZShydGNDZXJ0aWZp
Y2F0ZSkpOworICAgICAgICByZXR1cm4gd3JhcE5ld2x5Q3JlYXRlZChSVENDZXJ0aWZpY2F0ZTo6
Y3JlYXRlKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKG9yaWdpbi0+c3RyaW5nKCkp
LCBleHBpcmVzLCBXVEZNb3ZlKGZpbmdlcnByaW50cyksIGNlcnRpZmljYXRlLT50YWtlU3RyaW5n
KCksIGtleWVkTWF0ZXJpYWwtPnRha2VTdHJpbmcoKSkpOwogICAgIH0KIAogICAgIEpTVmFsdWUg
cmVhZFJUQ0RhdGFDaGFubmVsKCkKQEAgLTMzNTYsMTIgKzMzNDAsMTcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAorICAgICAgICBhdXRvJiBj
aGFubmVsID0gbV9ydGNEYXRhQ2hhbm5lbHNbaW5kZXhdOwogICAgICAgICBpZiAoIW1fcnRjRGF0
YUNoYW5uZWxzW2luZGV4XSkgewogICAgICAgICAgICAgYXV0byBkZXRhY2hlZENoYW5uZWwgPSBX
VEZNb3ZlKG1fZGV0YWNoZWRSVENEYXRhQ2hhbm5lbHMuYXQoaW5kZXgpKTsKLSAgICAgICAgICAg
IG1fcnRjRGF0YUNoYW5uZWxzW2luZGV4XSA9IFJUQ0RhdGFDaGFubmVsOjpjcmVhdGUoKmV4ZWN1
dGlvbkNvbnRleHQobV9sZXhpY2FsR2xvYmFsT2JqZWN0KSwgZGV0YWNoZWRDaGFubmVsLT5pZGVu
dGlmaWVyLCBXVEZNb3ZlKGRldGFjaGVkQ2hhbm5lbC0+bGFiZWwpLCBXVEZNb3ZlKGRldGFjaGVk
Q2hhbm5lbC0+b3B0aW9ucyksIGRldGFjaGVkQ2hhbm5lbC0+c3RhdGUpOworICAgICAgICAgICAg
YXV0byogY29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgICAgIGlmICghY29u
dGV4dCkgeworICAgICAgICAgICAgICAgIGZhaWwoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
eyB9OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2hhbm5lbCA9IFJUQ0RhdGFDaGFubmVs
OjpjcmVhdGUoKmNvbnRleHQsIGRldGFjaGVkQ2hhbm5lbC0+aWRlbnRpZmllciwgV1RGTW92ZShk
ZXRhY2hlZENoYW5uZWwtPmxhYmVsKSwgV1RGTW92ZShkZXRhY2hlZENoYW5uZWwtPm9wdGlvbnMp
LCBkZXRhY2hlZENoYW5uZWwtPnN0YXRlKTsKICAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBn
ZXRKU1ZhbHVlKG1fcnRjRGF0YUNoYW5uZWxzW2luZGV4XS5nZXQoKSk7CisgICAgICAgIHJldHVy
biB3cmFwKGNoYW5uZWwuZ2V0KCkpOwogICAgIH0KICNlbmRpZgogCkBAIC0zMzgzLDcgKzMzNzIs
MTMgQEAgcHJpdmF0ZToKICAgICAgICAgYXV0byBpbWFnZURhdGFTaXplID0gbG9naWNhbFNpemU7
CiAgICAgICAgIGltYWdlRGF0YVNpemUuc2NhbGUocmVzb2x1dGlvblNjYWxlKTsKIAotICAgICAg
ICBhdXRvIGJ1ZmZlciA9IEltYWdlQml0bWFwOjpjcmVhdGVJbWFnZUJ1ZmZlcigqZXhlY3V0aW9u
Q29udGV4dChtX2xleGljYWxHbG9iYWxPYmplY3QpLCBsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9k
ZTo6VW5hY2NlbGVyYXRlZCwgY29sb3JTcGFjZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICAgICAg
YXV0byogY29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFjb250ZXh0
KSB7CisgICAgICAgICAgICBmYWlsKCk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAg
ICB9CisKKyAgICAgICAgYXV0byBidWZmZXIgPSBJbWFnZUJpdG1hcDo6Y3JlYXRlSW1hZ2VCdWZm
ZXIoKmNvbnRleHQsIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBj
b2xvclNwYWNlLCByZXNvbHV0aW9uU2NhbGUpOwogICAgICAgICBpZiAoIWJ1ZmZlcikgewogICAg
ICAgICAgICAgZmFpbCgpOwogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKQEAgLTMzOTgs
OCArMzM5Myw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgYnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcihX
VEZNb3ZlKCpwaXhlbEJ1ZmZlciksIHsgSW50UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUgfSk7
CiAKLSAgICAgICAgYXV0byBiaXRtYXAgPSBJbWFnZUJpdG1hcDo6Y3JlYXRlKEltYWdlQml0bWFw
QmFja2luZyhXVEZNb3ZlKGJ1ZmZlciksIE9wdGlvblNldDxTZXJpYWxpemF0aW9uU3RhdGU+Ojpm
cm9tUmF3KHNlcmlhbGl6YXRpb25TdGF0ZSkpKTsKLSAgICAgICAgcmV0dXJuIGdldEpTVmFsdWUo
Yml0bWFwKTsKKyAgICAgICAgcmV0dXJuIHdyYXAoSW1hZ2VCaXRtYXA6OmNyZWF0ZShJbWFnZUJp
dG1hcEJhY2tpbmcoV1RGTW92ZShidWZmZXIpLCBPcHRpb25TZXQ8U2VyaWFsaXphdGlvblN0YXRl
Pjo6ZnJvbVJhdyhzZXJpYWxpemF0aW9uU3RhdGUpKSkpOwogICAgIH0KIAogICAgIEpTVmFsdWUg
cmVhZERPTUV4Y2VwdGlvbigpCkBAIC0zNDEwLDggKzM0MDQsNyBAQCBwcml2YXRlOgogICAgICAg
ICBDYWNoZWRTdHJpbmdSZWYgbmFtZTsKICAgICAgICAgaWYgKCFyZWFkU3RyaW5nRGF0YShuYW1l
KSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0gICAgICAgIGF1dG8gZXhjZXB0aW9u
ID0gRE9NRXhjZXB0aW9uOjpjcmVhdGUobWVzc2FnZS0+c3RyaW5nKCksIG5hbWUtPnN0cmluZygp
KTsKLSAgICAgICAgcmV0dXJuIGdldEpTVmFsdWUoZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJu
IHdyYXAoRE9NRXhjZXB0aW9uOjpjcmVhdGUobWVzc2FnZS0+c3RyaW5nKCksIG5hbWUtPnN0cmlu
ZygpKSk7CiAgICAgfQogCiAgICAgSlNWYWx1ZSByZWFkQmlnSW50KCkKQEAgLTM0MjcsNyArMzQy
MCw3IEBAIHByaXZhdGU6CiAjaWYgVVNFKEJJR0lOVDMyKQogICAgICAgICAgICAgcmV0dXJuIGpz
QmlnSW50MzIoMCk7CiAjZWxzZQotICAgICAgICAgICAgSlNCaWdJbnQqIGJpZ0ludCA9IEpTQmln
SW50Ojp0cnlDcmVhdGVaZXJvKG1fbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAg
ICAgICBKU0JpZ0ludCogYmlnSW50ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZVplcm8odm0oKSk7CiAg
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWJpZ0ludCkpIHsKICAgICAgICAgICAgICAgICBmYWls
KCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKQEAgLTM0NTEsMTQgKzM0NDQs
MTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIoc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oZGlnaXQ2NCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
QVNTRVJUKGRpZ2l0NjQgIT0gMCk7Ci0gICAgICAgICAgICBKU0JpZ0ludCogYmlnSW50ID0gSlNC
aWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5ndGgobV9sZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpLCAx
KTsKKyAgICAgICAgICAgIEpTQmlnSW50KiBiaWdJbnQgPSBKU0JpZ0ludDo6dHJ5Q3JlYXRlV2l0
aExlbmd0aCh2bSgpLCAxKTsKICAgICAgICAgICAgIGlmICghYmlnSW50KSB7CiAgICAgICAgICAg
ICAgICAgZmFpbCgpOwogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBiaWdJbnQtPnNldERpZ2l0KDAsIGRpZ2l0NjQpOwogICAgICAg
ICAgICAgYmlnSW50LT5zZXRTaWduKHNpZ24pOwotICAgICAgICAgICAgYmlnSW50ID0gYmlnSW50
LT50cnlSaWdodFRyaW0obV9sZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgICAg
IGJpZ0ludCA9IGJpZ0ludC0+dHJ5UmlnaHRUcmltKHZtKCkpOwogICAgICAgICAgICAgaWYgKCFi
aWdJbnQpIHsKICAgICAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWUoKTsKQEAgLTM0NjksNyArMzQ2Miw3IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICAg
ICAgSlNCaWdJbnQqIGJpZ0ludCA9IG51bGxwdHI7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAoc2l6
ZW9mKEpTQmlnSW50OjpEaWdpdCkgPT0gc2l6ZW9mKHVpbnQ2NF90KSkgewotICAgICAgICAgICAg
YmlnSW50ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5ndGgobV9sZXhpY2FsR2xvYmFsT2Jq
ZWN0LT52bSgpLCBsZW5ndGhJblVpbnQ2NCk7CisgICAgICAgICAgICBiaWdJbnQgPSBKU0JpZ0lu
dDo6dHJ5Q3JlYXRlV2l0aExlbmd0aCh2bSgpLCBsZW5ndGhJblVpbnQ2NCk7CiAgICAgICAgICAg
ICBpZiAoIWJpZ0ludCkgewogICAgICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZSgpOwpAQCAtMzQ4Miw3ICszNDc1LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChzaXplb2YoSlNC
aWdJbnQ6OkRpZ2l0KSA9PSBzaXplb2YodWludDMyX3QpKTsKLSAgICAgICAgICAgIGJpZ0ludCA9
IEpTQmlnSW50Ojp0cnlDcmVhdGVXaXRoTGVuZ3RoKG1fbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0o
KSwgbGVuZ3RoSW5VaW50NjQgKiAyKTsKKyAgICAgICAgICAgIGJpZ0ludCA9IEpTQmlnSW50Ojp0
cnlDcmVhdGVXaXRoTGVuZ3RoKHZtKCksIGxlbmd0aEluVWludDY0ICogMik7CiAgICAgICAgICAg
ICBpZiAoIWJpZ0ludCkgewogICAgICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZSgpOwpAQCAtMzQ5Niw3ICszNDg5LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBiaWdJbnQtPnNldFNpZ24oc2lnbik7Ci0gICAg
ICAgIGJpZ0ludCA9IGJpZ0ludC0+dHJ5UmlnaHRUcmltKG1fbGV4aWNhbEdsb2JhbE9iamVjdC0+
dm0oKSk7CisgICAgICAgIGJpZ0ludCA9IGJpZ0ludC0+dHJ5UmlnaHRUcmltKHZtKCkpOwogICAg
ICAgICBpZiAoIWJpZ0ludCkgewogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWUoKTsKQEAgLTM1MjgsMTQgKzM1MjEsMTQgQEAgcHJpdmF0ZToKICAgICAgICAg
Y2FzZSBUcnVlVGFnOgogICAgICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbih0cnVlKTsKICAgICAg
ICAgY2FzZSBGYWxzZU9iamVjdFRhZzogewotICAgICAgICAgICAgQm9vbGVhbk9iamVjdCogb2Jq
ID0gQm9vbGVhbk9iamVjdDo6Y3JlYXRlKG1fbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSwgbV9n
bG9iYWxPYmplY3QtPmJvb2xlYW5PYmplY3RTdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAgICBvYmot
PnNldEludGVybmFsVmFsdWUobV9sZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpLCBqc0Jvb2xlYW4o
ZmFsc2UpKTsKKyAgICAgICAgICAgIEJvb2xlYW5PYmplY3QqIG9iaiA9IEJvb2xlYW5PYmplY3Q6
OmNyZWF0ZSh2bSgpLCBtX2dsb2JhbE9iamVjdC5ib29sZWFuT2JqZWN0U3RydWN0dXJlKCkpOwor
ICAgICAgICAgICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKHZtKCksIGpzQm9vbGVhbihmYWxzZSkp
OwogICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmRXaXRoQ3Jhc2hPbk92ZXJmbG93KG9iaik7
CiAgICAgICAgICAgICByZXR1cm4gb2JqOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgVHJ1ZU9i
amVjdFRhZzogewotICAgICAgICAgICAgQm9vbGVhbk9iamVjdCogb2JqID0gQm9vbGVhbk9iamVj
dDo6Y3JlYXRlKG1fbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSwgbV9nbG9iYWxPYmplY3QtPmJv
b2xlYW5PYmplY3RTdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAgICBvYmotPnNldEludGVybmFsVmFs
dWUobV9sZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpLCBqc0Jvb2xlYW4odHJ1ZSkpOworICAgICAg
ICAgICAgQm9vbGVhbk9iamVjdCogb2JqID0gQm9vbGVhbk9iamVjdDo6Y3JlYXRlKHZtKCksIG1f
Z2xvYmFsT2JqZWN0LmJvb2xlYW5PYmplY3RTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICBvYmot
PnNldEludGVybmFsVmFsdWUodm0oKSwganNCb29sZWFuKHRydWUpKTsKICAgICAgICAgICAgIG1f
Z2NCdWZmZXIuYXBwZW5kV2l0aENyYXNoT25PdmVyZmxvdyhvYmopOwogICAgICAgICAgICAgcmV0
dXJuIG9iajsKICAgICAgICAgfQpAQCAtMzU1MSw0OSArMzU0NCw0MyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgZG91YmxlIGQ7CiAgICAgICAgICAgICBpZiAoIXJlYWQoZCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAgICAgICAgICAgIE51bWJlck9iamVjdCogb2JqID0g
Y29uc3RydWN0TnVtYmVyKG1fZ2xvYmFsT2JqZWN0LCBqc051bWJlcihkKSk7Ci0gICAgICAgICAg
ICBtX2djQnVmZmVyLmFwcGVuZFdpdGhDcmFzaE9uT3ZlcmZsb3cob2JqKTsKLSAgICAgICAgICAg
IHJldHVybiBvYmo7CisgICAgICAgICAgICBhdXRvKiBvYmplY3QgPSBjb25zdHJ1Y3ROdW1iZXIo
Jm1fZ2xvYmFsT2JqZWN0LCBqc051bWJlcihkKSk7CisgICAgICAgICAgICBtX2djQnVmZmVyLmFw
cGVuZFdpdGhDcmFzaE9uT3ZlcmZsb3cob2JqZWN0KTsKKyAgICAgICAgICAgIHJldHVybiBvYmpl
Y3Q7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBCaWdJbnRPYmplY3RUYWc6IHsKICAgICAgICAg
ICAgIEpTVmFsdWUgYmlnSW50ID0gcmVhZEJpZ0ludCgpOwogICAgICAgICAgICAgaWYgKCFiaWdJ
bnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgICAgIEFTU0VS
VChiaWdJbnQuaXNCaWdJbnQoKSk7Ci0gICAgICAgICAgICBCaWdJbnRPYmplY3QqIG9iaiA9IEJp
Z0ludE9iamVjdDo6Y3JlYXRlKG1fbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSwgbV9nbG9iYWxP
YmplY3QsIGJpZ0ludCk7Ci0gICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVuZFdpdGhDcmFzaE9u
T3ZlcmZsb3cob2JqKTsKLSAgICAgICAgICAgIHJldHVybiBvYmo7CisgICAgICAgICAgICBhdXRv
KiBvYmplY3QgPSBCaWdJbnRPYmplY3Q6OmNyZWF0ZSh2bSgpLCAmbV9nbG9iYWxPYmplY3QsIGJp
Z0ludCk7CisgICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVuZFdpdGhDcmFzaE9uT3ZlcmZsb3co
b2JqZWN0KTsKKyAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBEYXRlVGFnOiB7CiAgICAgICAgICAgICBkb3VibGUgZDsKICAgICAgICAgICAgIGlmICgh
cmVhZChkKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwotICAgICAgICAgICAg
cmV0dXJuIERhdGVJbnN0YW5jZTo6Y3JlYXRlKG1fbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSwg
bV9nbG9iYWxPYmplY3QtPmRhdGVTdHJ1Y3R1cmUoKSwgZCk7CisgICAgICAgICAgICByZXR1cm4g
RGF0ZUluc3RhbmNlOjpjcmVhdGUodm0oKSwgbV9nbG9iYWxPYmplY3QuZGF0ZVN0cnVjdHVyZSgp
LCBkKTsKICAgICAgICAgfQogICAgICAgICBjYXNlIEZpbGVUYWc6IHsKICAgICAgICAgICAgIFJl
ZlB0cjxGaWxlPiBmaWxlOwogICAgICAgICAgICAgaWYgKCFyZWFkRmlsZShmaWxlKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwotICAgICAgICAgICAgaWYgKCFtX2NhbkNyZWF0
ZURPTU9iamVjdCkKLSAgICAgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gdG9KUyhtX2xleGljYWxHbG9iYWxPYmplY3QsIGpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KG1fZ2xvYmFsT2JqZWN0KSwgZmlsZS5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm4g
d3JhcChmaWxlLmdldCgpKTsKICAgICAgICAgfQogICAgICAgICBjYXNlIEZpbGVMaXN0VGFnOiB7
CiAgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwogICAgICAgICAgICAgaWYgKCFyZWFk
KGxlbmd0aCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAgICAgICAgICAg
IEFTU0VSVChtX2dsb2JhbE9iamVjdC0+aW5oZXJpdHM8SlNET01HbG9iYWxPYmplY3Q+KG1fZ2xv
YmFsT2JqZWN0LT52bSgpKSk7CiAgICAgICAgICAgICBWZWN0b3I8UmVmPEZpbGU+PiBmaWxlczsK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAg
ICAgICAgICAgICAgIFJlZlB0cjxGaWxlPiBmaWxlOwogICAgICAgICAgICAgICAgIGlmICghcmVh
ZEZpbGUoZmlsZSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKG1fY2FuQ3JlYXRlRE9NT2JqZWN0KQotICAgICAgICAgICAgICAgICAg
ICBmaWxlcy5hcHBlbmQoZmlsZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgICAgICBm
aWxlcy5hcHBlbmQoZmlsZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmICghbV9jYW5DcmVhdGVET01PYmplY3QpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGpzTnVsbCgpOwotICAgICAgICAgICAgcmV0dXJuIGdldEpTVmFsdWUoRmlsZUxpc3Q6OmNyZWF0
ZShXVEZNb3ZlKGZpbGVzKSkuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJuIHdyYXAoRmlsZUxp
c3Q6OmNyZWF0ZShXVEZNb3ZlKGZpbGVzKSkuZ2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgSW1hZ2VEYXRhVGFnOiB7CiAgICAgICAgICAgICB1aW50MzJfdCB3aWR0aDsKQEAgLTM2MjMs
OSArMzYxMCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFtX2lzRE9NR2xvYmFsT2JqZWN0KQot
ICAgICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKLQogICAgICAgICAgICAgYXV0byByZXN1
bHQgPSBJbWFnZURhdGE6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQod2lkdGgsIGhlaWdodCwgcmVzdWx0
Q29sb3JTcGFjZSk7CiAgICAgICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CiAg
ICAgICAgICAgICAgICAgZmFpbCgpOwpAQCAtMzYzNSw3ICszNjE5LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICBtZW1jcHkocmVzdWx0LnJldHVyblZhbHVlKCktPmRhdGEoKS5kYXRhKCks
IGJ1ZmZlclN0YXJ0LCBsZW5ndGgpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
IHJlc3VsdC5yZXR1cm5WYWx1ZSgpLT5kYXRhKCkuemVyb0ZpbGwoKTsKLSAgICAgICAgICAgIHJl
dHVybiBnZXRKU1ZhbHVlKHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7CisgICAgICAgICAg
ICByZXR1cm4gd3JhcChyZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkpOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgQmxvYlRhZzogewogICAgICAgICAgICAgQ2FjaGVkU3RyaW5nUmVmIHVybDsK
QEAgLTM2NDcsMzEgKzM2MzEsMjggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHVpbnQ2NF90IHNp
emUgPSAwOwogICAgICAgICAgICAgaWYgKCFyZWFkKHNpemUpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlKCk7Ci0gICAgICAgICAgICBpZiAoIW1fY2FuQ3JlYXRlRE9NT2JqZWN0KQot
ICAgICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKLSAgICAgICAgICAgIHJldHVybiBnZXRK
U1ZhbHVlKEJsb2I6OmRlc2VyaWFsaXplKGV4ZWN1dGlvbkNvbnRleHQobV9sZXhpY2FsR2xvYmFs
T2JqZWN0KSwgVVJMIHsgdXJsLT5zdHJpbmcoKSB9LCB0eXBlLT5zdHJpbmcoKSwgc2l6ZSwgYmxv
YkZpbGVQYXRoRm9yQmxvYlVSTCh1cmwtPnN0cmluZygpKSkuZ2V0KCkpOworICAgICAgICAgICAg
cmV0dXJuIGNyZWF0ZUJsb2IodXJsLT5zdHJpbmcoKSwgdHlwZSwgc2l6ZSk7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBTdHJpbmdUYWc6IHsKICAgICAgICAgICAgIENhY2hlZFN0cmluZ1JlZiBj
YWNoZWRTdHJpbmc7CiAgICAgICAgICAgICBpZiAoIXJlYWRTdHJpbmdEYXRhKGNhY2hlZFN0cmlu
ZykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAgICAgICAgICAgIHJldHVy
biBjYWNoZWRTdHJpbmctPmpzU3RyaW5nKG1fbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgICAg
ICAgICByZXR1cm4gY2FjaGVkU3RyaW5nLT5qc1N0cmluZyh2bSgpKTsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIEVtcHR5U3RyaW5nVGFnOgotICAgICAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJp
bmcobV9sZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgICAgIHJldHVybiBqc0Vt
cHR5U3RyaW5nKHZtKCkpOwogICAgICAgICBjYXNlIFN0cmluZ09iamVjdFRhZzogewogICAgICAg
ICAgICAgQ2FjaGVkU3RyaW5nUmVmIGNhY2hlZFN0cmluZzsKICAgICAgICAgICAgIGlmICghcmVh
ZFN0cmluZ0RhdGEoY2FjaGVkU3RyaW5nKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZSgpOwotICAgICAgICAgICAgU3RyaW5nT2JqZWN0KiBvYmogPSBjb25zdHJ1Y3RTdHJpbmcobV9s
ZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpLCBtX2dsb2JhbE9iamVjdCwgY2FjaGVkU3RyaW5nLT5q
c1N0cmluZyhtX2xleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICAgICAgICAgIG1fZ2NCdWZmZXIu
YXBwZW5kV2l0aENyYXNoT25PdmVyZmxvdyhvYmopOwotICAgICAgICAgICAgcmV0dXJuIG9iajsK
KyAgICAgICAgICAgIGF1dG8qIG9iamVjdCA9IGNvbnN0cnVjdFN0cmluZyh2bSgpLCAmbV9nbG9i
YWxPYmplY3QsIGNhY2hlZFN0cmluZy0+anNTdHJpbmcodm0oKSkpOworICAgICAgICAgICAgbV9n
Y0J1ZmZlci5hcHBlbmRXaXRoQ3Jhc2hPbk92ZXJmbG93KG9iamVjdCk7CisgICAgICAgICAgICBy
ZXR1cm4gb2JqZWN0OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRW1wdHlTdHJpbmdPYmplY3RU
YWc6IHsKLSAgICAgICAgICAgIFZNJiB2bSA9IG1fbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsK
LSAgICAgICAgICAgIFN0cmluZ09iamVjdCogb2JqID0gY29uc3RydWN0U3RyaW5nKHZtLCBtX2ds
b2JhbE9iamVjdCwganNFbXB0eVN0cmluZyh2bSkpOwotICAgICAgICAgICAgbV9nY0J1ZmZlci5h
cHBlbmRXaXRoQ3Jhc2hPbk92ZXJmbG93KG9iaik7Ci0gICAgICAgICAgICByZXR1cm4gb2JqOwor
ICAgICAgICAgICAgYXV0byogb2JqZWN0ID0gY29uc3RydWN0U3RyaW5nKHZtKCksICZtX2dsb2Jh
bE9iamVjdCwganNFbXB0eVN0cmluZyh2bSgpKSk7CisgICAgICAgICAgICBtX2djQnVmZmVyLmFw
cGVuZFdpdGhDcmFzaE9uT3ZlcmZsb3cob2JqZWN0KTsKKyAgICAgICAgICAgIHJldHVybiBvYmpl
Y3Q7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBSZWdFeHBUYWc6IHsKICAgICAgICAgICAgIENh
Y2hlZFN0cmluZ1JlZiBwYXR0ZXJuOwpAQCAtMzY4Miw5ICszNjYzLDggQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICAgICAgYXV0byByZUZsYWdz
ID0gWWFycjo6cGFyc2VGbGFncyhmbGFncy0+c3RyaW5nKCkpOwogICAgICAgICAgICAgQVNTRVJU
KHJlRmxhZ3MuaGFzX3ZhbHVlKCkpOwotICAgICAgICAgICAgVk0mIHZtID0gbV9sZXhpY2FsR2xv
YmFsT2JqZWN0LT52bSgpOwotICAgICAgICAgICAgUmVnRXhwKiByZWdFeHAgPSBSZWdFeHA6OmNy
ZWF0ZSh2bSwgcGF0dGVybi0+c3RyaW5nKCksIHJlRmxhZ3MudmFsdWUoKSk7Ci0gICAgICAgICAg
ICByZXR1cm4gUmVnRXhwT2JqZWN0OjpjcmVhdGUodm0sIG1fZ2xvYmFsT2JqZWN0LT5yZWdFeHBT
dHJ1Y3R1cmUoKSwgcmVnRXhwKTsKKyAgICAgICAgICAgIFJlZ0V4cCogcmVnRXhwID0gUmVnRXhw
OjpjcmVhdGUodm0oKSwgcGF0dGVybi0+c3RyaW5nKCksIHJlRmxhZ3MudmFsdWUoKSk7CisgICAg
ICAgICAgICByZXR1cm4gUmVnRXhwT2JqZWN0OjpjcmVhdGUodm0oKSwgbV9nbG9iYWxPYmplY3Qu
cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cCk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBPYmpl
Y3RSZWZlcmVuY2VUYWc6IHsKICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKQEAgLTM3
MDEsNyArMzY4MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZmFpbCgpOwogICAgICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBy
ZXR1cm4gZ2V0SlNWYWx1ZShtX21lc3NhZ2VQb3J0c1tpbmRleF0uZ2V0KCkpOworICAgICAgICAg
ICAgcmV0dXJuIHdyYXAobV9tZXNzYWdlUG9ydHNbaW5kZXhdLmdldCgpKTsKICAgICAgICAgfQog
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICAgICAgY2FzZSBXYXNtTW9kdWxlVGFnOiB7CkBA
IC0zNzExLDggKzM2OTEsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGZhaWwoKTsKICAg
ICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUobV9sZXhpY2FsR2xvYmFsT2JqZWN0
LT52bSgpKTsKLSAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNDOjpKU1dlYkFzc2VtYmx5
TW9kdWxlOjpjcmVhdGVTdHViKG1fbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSwgbV9sZXhpY2Fs
R2xvYmFsT2JqZWN0LCBtX2dsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlNb2R1bGVTdHJ1Y3R1cmUo
KSwgbV93YXNtTW9kdWxlcy0+YXQoaW5kZXgpKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKCkpOworICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBK
U1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVTdHViKHZtKCksICZtX2xleGljYWxHbG9iYWxPYmpl
Y3QsIG1fZ2xvYmFsT2JqZWN0LndlYkFzc2VtYmx5TW9kdWxlU3RydWN0dXJlKCksIG1fd2FzbU1v
ZHVsZXMtPmF0KGluZGV4KSk7CiAgICAgICAgICAgICAvLyBTaW5jZSB3ZSBhcmUgY2xvbmluZyBh
IEpTV2ViQXNzZW1ibHlNb2R1bGUsIGl0J3MgaW1wb3NzaWJsZSBmb3IgdGhhdAogICAgICAgICAg
ICAgLy8gbW9kdWxlIHRvIG5vdCBoYXZlIGJlZW4gYSB2YWxpZCBtb2R1bGUuIFRoZXJlZm9yZSwg
Y3JlYXRlU3R1YiBzaG91bGQKICAgICAgICAgICAgIC8vIG5vdCB0aHJvdy4KQEAgLTM3MzIsOSAr
MzcxMiw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBhdXRvJiB2
bSA9IG1fbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICAgICAgICAgIGF1dG8mIHZtID0g
dGhpcy0+dm0oKTsKICAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIHJlc3VsdCA9IEpTQzo6SlNX
ZWJBc3NlbWJseU1lbW9yeTo6dHJ5Q3JlYXRlKG1fbGV4aWNhbEdsb2JhbE9iamVjdCwgdm0sIG1f
Z2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAg
IEpTV2ViQXNzZW1ibHlNZW1vcnkqIHJlc3VsdCA9IEpTV2ViQXNzZW1ibHlNZW1vcnk6OnRyeUNy
ZWF0ZSgmbV9sZXhpY2FsR2xvYmFsT2JqZWN0LCB2bSwgbV9nbG9iYWxPYmplY3Qud2ViQXNzZW1i
bHlNZW1vcnlTdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAvLyBTaW5jZSB3ZSBhcmUgY2xvbmlu
ZyBhIEpTV2ViQXNzZW1ibHlNZW1vcnksIGl0J3MgaW1wb3NzaWJsZSBmb3IgdGhhdAogICAgICAg
ICAgICAgLy8gbW9kdWxlIHRvIG5vdCBoYXZlIGJlZW4gYSB2YWxpZCBtb2R1bGUuIFRoZXJlZm9y
ZSwgY3JlYXRlU3R1YiBzaG91bGQKICAgICAgICAgICAgIC8vIG5vdCB0aHJvdy4KQEAgLTM3NTQs
MTQgKzM3MzQsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gbV9nbG9iYWxPYmplY3QtPmFycmF5QnVmZmVyU3RydWN0dXJl
KGFycmF5QnVmZmVyLT5zaGFyaW5nTW9kZSgpKTsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gbV9nbG9iYWxPYmplY3QuYXJyYXlCdWZmZXJTdHJ1Y3R1cmUoYXJyYXlCdWZmZXIt
PnNoYXJpbmdNb2RlKCkpOwogICAgICAgICAgICAgLy8gQSBjcmF6eSBSdW50aW1lRmxhZ3MgbWlz
bWF0Y2ggY291bGQgbWVhbiB0aGF0IHdlIGFyZSBub3QgZXF1aXBwZWQgdG8gaGFuZGxlIHNoYXJl
ZAogICAgICAgICAgICAgLy8gYXJyYXkgYnVmZmVycyB3aGlsZSB0aGUgc2VuZGVyIGlzLiBJbiB0
aGF0IGNhc2UsIHdlIHdvdWxkIHNlZSBhIG51bGwgc3RydWN0dXJlIGhlcmUuCiAgICAgICAgICAg
ICBpZiAoIXN0cnVjdHVyZSkgewogICAgICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgSlNWYWx1
ZSByZXN1bHQgPSBKU0FycmF5QnVmZmVyOjpjcmVhdGUobV9sZXhpY2FsR2xvYmFsT2JqZWN0LT52
bSgpLCBzdHJ1Y3R1cmUsIFdURk1vdmUoYXJyYXlCdWZmZXIpKTsKKyAgICAgICAgICAgIEpTVmFs
dWUgcmVzdWx0ID0gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKHZtKCksIHN0cnVjdHVyZSwgV1RGTW92
ZShhcnJheUJ1ZmZlcikpOwogICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmRXaXRoQ3Jhc2hP
bk92ZXJmbG93KHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9
CkBAIC0zNzc2LDcgKzM3NTYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKCFtX2FycmF5
QnVmZmVyc1tpbmRleF0pCiAgICAgICAgICAgICAgICAgbV9hcnJheUJ1ZmZlcnNbaW5kZXhdID0g
QXJyYXlCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKG1fYXJyYXlCdWZmZXJDb250ZW50cy0+YXQoaW5k
ZXgpKSk7CiAKLSAgICAgICAgICAgIHJldHVybiBnZXRKU1ZhbHVlKG1fYXJyYXlCdWZmZXJzW2lu
ZGV4XS5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm4gd3JhcChtX2FycmF5QnVmZmVyc1tpbmRl
eF0uZ2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgU2hhcmVkQXJyYXlCdWZmZXJUYWc6
IHsKICAgICAgICAgICAgIHVpbnQzMl90IGluZGV4ID0gVUlOVF9NQVg7CkBAIC0zNzg4LDEzICsz
NzY4LDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKG1fc2hhcmVkQnVmZmVycy0+YXQoaW5kZXgpKTsKICAgICAgICAgICAgIGF1dG8gYnVmZmVy
ID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKG1fc2hhcmVkQnVmZmVycy0+YXQoaW5kZXgp
KSk7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGdldEpTVmFsdWUoYnVmZmVyLmdldCgp
KTsKKyAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gd3JhcChidWZmZXIuZ2V0KCkpOworICAg
ICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAg
ICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5kV2l0aENyYXNoT25PdmVyZmxvdyhyZXN1bHQpOwogICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgICAgICBjYXNlIEFycmF5QnVm
ZmVyVmlld1RhZzogewotICAgICAgICAgICAgSlNWYWx1ZSBhcnJheUJ1ZmZlclZpZXc7Ci0gICAg
ICAgICAgICBpZiAoIXJlYWRBcnJheUJ1ZmZlclZpZXcobV9sZXhpY2FsR2xvYmFsT2JqZWN0LT52
bSgpLCBhcnJheUJ1ZmZlclZpZXcpKSB7CisgICAgICAgICAgICBhdXRvIGFycmF5QnVmZmVyVmll
dyA9IHJlYWRBcnJheUJ1ZmZlclZpZXcoKTsKKyAgICAgICAgICAgIGlmICghYXJyYXlCdWZmZXJW
aWV3KSB7CiAgICAgICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlKCk7CiAgICAgICAgICAgICB9CkBAIC0zODA4LDE1ICszNzkwLDIwIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
KCk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBhdXRvKiBjb250ZXh0ID0gZXhlY3V0aW9u
Q29udGV4dCgpOworICAgICAgICAgICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAgICAgICAgICAg
ZmFpbCgpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBWZWN0b3I8dWludDhfdD4gc2VyaWFsaXplZEtleTsKLSAgICAgICAgICAgIGlmICgh
dW53cmFwQ3J5cHRvS2V5KG1fbGV4aWNhbEdsb2JhbE9iamVjdCwgd3JhcHBlZEtleSwgc2VyaWFs
aXplZEtleSkpIHsKKyAgICAgICAgICAgIGlmICghY29udGV4dC0+dW53cmFwQ3J5cHRvS2V5KHdy
YXBwZWRLZXksIHNlcmlhbGl6ZWRLZXkpKSB7CiAgICAgICAgICAgICAgICAgZmFpbCgpOwogICAg
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBKU1ZhbHVlIGNyeXB0b0tleTsKICAgICAgICAgICAgIFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBv
cnQ+PiBkdW1teU1lc3NhZ2VQb3J0czsKICAgICAgICAgICAgIENsb25lRGVzZXJpYWxpemVyIHJh
d0tleURlc2VyaWFsaXplcihtX2xleGljYWxHbG9iYWxPYmplY3QsIG1fZ2xvYmFsT2JqZWN0LCBk
dW1teU1lc3NhZ2VQb3J0cywgbnVsbHB0ciwgeyB9LCBzZXJpYWxpemVkS2V5KTsKLSAgICAgICAg
ICAgIGlmICghcmF3S2V5RGVzZXJpYWxpemVyLnJlYWRDcnlwdG9LZXkoY3J5cHRvS2V5KSkgewor
ICAgICAgICAgICAgYXV0byBjcnlwdG9LZXkgPSByYXdLZXlEZXNlcmlhbGl6ZXIucmVhZENyeXB0
b0tleSgpOworICAgICAgICAgICAgaWYgKCFjcnlwdG9LZXkpIHsKICAgICAgICAgICAgICAgICBm
YWlsKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgICAgIH0K
QEAgLTM4NzMsMTYgKzM4NjAsMjcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAotICAgIEpTR2xvYmFsT2JqZWN0KiBtX2dsb2JhbE9iamVjdDsKLSAgICBib29sIG1f
aXNET01HbG9iYWxPYmplY3Q7Ci0gICAgYm9vbCBtX2NhbkNyZWF0ZURPTU9iamVjdDsKKyAgICBK
U1ZhbHVlIGNyZWF0ZUJsb2IoY29uc3QgU3RyaW5nJiBsb2NhdGlvbiwgQ2FjaGVkU3RyaW5nUmVm
IHR5cGUsIHVpbnQ2NF90IHNpemUpCisgICAgeworICAgICAgICAvLyBJbiBET00gY29udGV4dCwg
bWFrZSBhIGJsb2IgYW5kIHdyYXAgd2l0aCBhIERPTSBXcmFwcGVyLgorICAgICAgICBpZiAoaXNE
T01HbG9iYWxPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiB3cmFwKEJsb2I6OmRlc2VyaWFs
aXplKGV4ZWN1dGlvbkNvbnRleHQoKSwgVVJMIHsgbG9jYXRpb24gfSwgdHlwZS0+c3RyaW5nKCks
IHNpemUsIGJsb2JGaWxlUGF0aEZvckJsb2JVUkwobG9jYXRpb24pKSk7CisKKyAgICAgICAgLy8g
SW4gbm9uLURPTSBjb250ZXh0LCBtYWtlIGFuIG9iamVjdCB3aXRoIHRoZSB0d28gbWV0YWRhdGEg
cHJvcGVydGllcyBpbnN0ZWFkLgorICAgICAgICBhdXRvJiBvYmplY3QgPSAqY29uc3RydWN0RW1w
dHlPYmplY3QoJm1fbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgICAgIG9iamVjdC5wdXREaXJl
Y3Qodm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSgpLCAic2l6ZSIpLCBqc051bWJlcihz
aXplKSk7CisgICAgICAgIG9iamVjdC5wdXREaXJlY3Qodm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSgpLCAidHlwZSIpLCB0eXBlLT5qc1N0cmluZyh2bSgpKSk7CisgICAgICAgIHJldHVy
biBvYmplY3Q7CisgICAgfQorCisgICAgSlNHbG9iYWxPYmplY3QmIG1fZ2xvYmFsT2JqZWN0Owog
ICAgIGNvbnN0IHVpbnQ4X3QqIG1fcHRyOwogICAgIGNvbnN0IHVpbnQ4X3QqIG1fZW5kOwogICAg
IHVuc2lnbmVkIG1fdmVyc2lvbjsKICAgICBWZWN0b3I8Q2FjaGVkU3RyaW5nPiBtX2NvbnN0YW50
UG9vbDsKICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mIG1fbWVzc2FnZVBv
cnRzOwogICAgIEFycmF5QnVmZmVyQ29udGVudHNBcnJheSogbV9hcnJheUJ1ZmZlckNvbnRlbnRz
OwotICAgIFZlY3RvcjxSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4+IG1fYXJyYXlCdWZmZXJzOwor
ICAgIFZlY3RvcjxSZWZQdHI8QXJyYXlCdWZmZXI+PiBtX2FycmF5QnVmZmVyczsKICAgICBWZWN0
b3I8U3RyaW5nPiBtX2Jsb2JVUkxzOwogICAgIFZlY3RvcjxTdHJpbmc+IG1fYmxvYkZpbGVQYXRo
czsKICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkqIG1fc2hhcmVkQnVmZmVyczsKQEAgLTM5
MTUsOCArMzkxMyw3IEBAIHByaXZhdGU6CiAKIERlc2VyaWFsaXphdGlvblJlc3VsdCBDbG9uZURl
c2VyaWFsaXplcjo6ZGVzZXJpYWxpemUoKQogewotICAgIFZNJiB2bSA9IG1fbGV4aWNhbEdsb2Jh
bE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0oKSk7CiAKICAgICBWZWN0
b3I8dWludDMyX3QsIDE2PiBpbmRleFN0YWNrOwogICAgIFZlY3RvcjxJZGVudGlmaWVyLCAxNj4g
cHJvcGVydHlOYW1lU3RhY2s7CkBAIC0zOTM3LDcgKzM5MzQsNyBAQCBEZXNlcmlhbGl6YXRpb25S
ZXN1bHQgQ2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplKCkKICAgICAgICAgICAgICAgICBm
YWlsKCk7CiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIEpTQXJyYXkqIG91dEFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShtX2dsb2JhbE9i
amVjdCwgc3RhdGljX2Nhc3Q8SlNDOjpBcnJheUFsbG9jYXRpb25Qcm9maWxlKj4obnVsbHB0ciks
IGxlbmd0aCk7CisgICAgICAgICAgICBKU0FycmF5KiBvdXRBcnJheSA9IGNvbnN0cnVjdEVtcHR5
QXJyYXkoJm1fZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxBcnJheUFsbG9jYXRpb25Qcm9maWxl
Kj4obnVsbHB0ciksIGxlbmd0aCk7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBtX2dj
QnVmZmVyLmFwcGVuZFdpdGhDcmFzaE9uT3ZlcmZsb3cob3V0QXJyYXkpOwpAQCAtMzk4MCw3ICsz
OTc3LDcgQEAgRGVzZXJpYWxpemF0aW9uUmVzdWx0IENsb25lRGVzZXJpYWxpemVyOjpkZXNlcmlh
bGl6ZSgpCiAgICAgICAgIGNhc2UgT2JqZWN0U3RhcnRTdGF0ZTogewogICAgICAgICAgICAgaWYg
KG91dHB1dE9iamVjdFN0YWNrLnNpemUoKSA+IG1heGltdW1GaWx0ZXJSZWN1cnNpb24pCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKEpTVmFsdWUoKSwgU2VyaWFsaXphdGlv
blJldHVybkNvZGU6OlN0YWNrT3ZlcmZsb3dFcnJvcik7Ci0gICAgICAgICAgICBKU09iamVjdCog
b3V0T2JqZWN0ID0gY29uc3RydWN0RW1wdHlPYmplY3QobV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBt
X2dsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpOworICAgICAgICAgICAgYXV0byogb3V0
T2JqZWN0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJm1fbGV4aWNhbEdsb2JhbE9iamVjdCwgbV9n
bG9iYWxPYmplY3Qub2JqZWN0UHJvdG90eXBlKCkpOwogICAgICAgICAgICAgbV9nY0J1ZmZlci5h
cHBlbmRXaXRoQ3Jhc2hPbk92ZXJmbG93KG91dE9iamVjdCk7CiAgICAgICAgICAgICBvdXRwdXRP
YmplY3RTdGFjay5hcHBlbmQob3V0T2JqZWN0KTsKICAgICAgICAgfQpAQCAtNDAwMCwxMSArMzk5
NywxMSBAQCBEZXNlcmlhbGl6YXRpb25SZXN1bHQgQ2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFs
aXplKCkKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKEpTVmFsdWUgdGVybWluYWwg
PSByZWFkVGVybWluYWwoKSkgewotICAgICAgICAgICAgICAgIHB1dFByb3BlcnR5KG91dHB1dE9i
amVjdFN0YWNrLmxhc3QoKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgY2FjaGVkU3RyaW5n
LT5zdHJpbmcoKSksIHRlcm1pbmFsKTsKKyAgICAgICAgICAgICAgICBwdXRQcm9wZXJ0eShvdXRw
dXRPYmplY3RTdGFjay5sYXN0KCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0oKSwgY2FjaGVk
U3RyaW5nLT5zdHJpbmcoKSksIHRlcm1pbmFsKTsKICAgICAgICAgICAgICAgICBnb3RvIG9iamVj
dFN0YXJ0VmlzaXRNZW1iZXI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzdGF0ZVN0YWNr
LmFwcGVuZChPYmplY3RFbmRWaXNpdE1lbWJlcik7Ci0gICAgICAgICAgICBwcm9wZXJ0eU5hbWVT
dGFjay5hcHBlbmQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgY2FjaGVkU3RyaW5nLT5zdHJp
bmcoKSkpOworICAgICAgICAgICAgcHJvcGVydHlOYW1lU3RhY2suYXBwZW5kKElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0oKSwgY2FjaGVkU3RyaW5nLT5zdHJpbmcoKSkpOwogICAgICAgICAgICAg
Z290byBzdGF0ZVVua25vd247CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBPYmplY3RFbmRWaXNp
dE1lbWJlcjogewpAQCAtNDAxNSw3ICs0MDEyLDcgQEAgRGVzZXJpYWxpemF0aW9uUmVzdWx0IENs
b25lRGVzZXJpYWxpemVyOjpkZXNlcmlhbGl6ZSgpCiAgICAgICAgIG1hcE9iamVjdFN0YXJ0U3Rh
dGU6IHsKICAgICAgICAgICAgIGlmIChvdXRwdXRPYmplY3RTdGFjay5zaXplKCkgPiBtYXhpbXVt
RmlsdGVyUmVjdXJzaW9uKQogICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihK
U1ZhbHVlKCksIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpTdGFja092ZXJmbG93RXJyb3IpOwot
ICAgICAgICAgICAgSlNNYXAqIG1hcCA9IEpTTWFwOjpjcmVhdGUobV9sZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBtX2xleGljYWxHbG9iYWxPYmplY3QtPnZtKCksIG1fZ2xvYmFsT2JqZWN0LT5tYXBTdHJ1
Y3R1cmUoKSk7CisgICAgICAgICAgICBhdXRvKiBtYXAgPSBKU01hcDo6Y3JlYXRlKCZtX2xleGlj
YWxHbG9iYWxPYmplY3QsIHZtKCksIG1fZ2xvYmFsT2JqZWN0Lm1hcFN0cnVjdHVyZSgpKTsKICAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAg
ICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5kV2l0aENyYXNoT25P
dmVyZmxvdyhtYXApOwpAQCAtNDAzOCw3ICs0MDM1LDcgQEAgRGVzZXJpYWxpemF0aW9uUmVzdWx0
IENsb25lRGVzZXJpYWxpemVyOjpkZXNlcmlhbGl6ZSgpCiAgICAgICAgICAgICBnb3RvIHN0YXRl
VW5rbm93bjsKICAgICAgICAgfQogICAgICAgICBjYXNlIE1hcERhdGFFbmRWaXNpdFZhbHVlOiB7
Ci0gICAgICAgICAgICBtYXBTdGFjay5sYXN0KCktPnNldChtX2xleGljYWxHbG9iYWxPYmplY3Qs
IG1hcEtleVN0YWNrLmxhc3QoKSwgb3V0VmFsdWUpOworICAgICAgICAgICAgbWFwU3RhY2subGFz
dCgpLT5zZXQoJm1fbGV4aWNhbEdsb2JhbE9iamVjdCwgbWFwS2V5U3RhY2subGFzdCgpLCBvdXRW
YWx1ZSk7CiAgICAgICAgICAgICBtYXBLZXlTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAg
ICBnb3RvIG1hcERhdGFTdGFydFZpc2l0RW50cnk7CiAgICAgICAgIH0KQEAgLTQwNDYsNyArNDA0
Myw3IEBAIERlc2VyaWFsaXphdGlvblJlc3VsdCBDbG9uZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxp
emUoKQogICAgICAgICBzZXRPYmplY3RTdGFydFN0YXRlOiB7CiAgICAgICAgICAgICBpZiAob3V0
cHV0T2JqZWN0U3RhY2suc2l6ZSgpID4gbWF4aW11bUZpbHRlclJlY3Vyc2lvbikKICAgICAgICAg
ICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoSlNWYWx1ZSgpLCBTZXJpYWxpemF0aW9uUmV0
dXJuQ29kZTo6U3RhY2tPdmVyZmxvd0Vycm9yKTsKLSAgICAgICAgICAgIEpTU2V0KiBzZXQgPSBK
U1NldDo6Y3JlYXRlKG1fbGV4aWNhbEdsb2JhbE9iamVjdCwgbV9sZXhpY2FsR2xvYmFsT2JqZWN0
LT52bSgpLCBtX2dsb2JhbE9iamVjdC0+c2V0U3RydWN0dXJlKCkpOworICAgICAgICAgICAgYXV0
byogc2V0ID0gSlNTZXQ6OmNyZWF0ZSgmbV9sZXhpY2FsR2xvYmFsT2JqZWN0LCB2bSgpLCBtX2ds
b2JhbE9iamVjdC5zZXRTdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAg
ICBtX2djQnVmZmVyLmFwcGVuZFdpdGhDcmFzaE9uT3ZlcmZsb3coc2V0KTsKQEAgLTQwNjUsNyAr
NDA2Miw3IEBAIERlc2VyaWFsaXphdGlvblJlc3VsdCBDbG9uZURlc2VyaWFsaXplcjo6ZGVzZXJp
YWxpemUoKQogICAgICAgICB9CiAgICAgICAgIGNhc2UgU2V0RGF0YUVuZFZpc2l0S2V5OiB7CiAg
ICAgICAgICAgICBKU1NldCogc2V0ID0gc2V0U3RhY2subGFzdCgpOwotICAgICAgICAgICAgc2V0
LT5hZGQobV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBvdXRWYWx1ZSk7CisgICAgICAgICAgICBzZXQt
PmFkZCgmbV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBvdXRWYWx1ZSk7CiAgICAgICAgICAgICBnb3Rv
IHNldERhdGFTdGFydFZpc2l0RW50cnk7CiAgICAgICAgIH0KIApAQCAtNDA3NSw2ICs0MDcyLDgg
QEAgRGVzZXJpYWxpemF0aW9uUmVzdWx0IENsb25lRGVzZXJpYWxpemVyOjpkZXNlcmlhbGl6ZSgp
CiAgICAgICAgICAgICAgICAgb3V0VmFsdWUgPSB0ZXJtaW5hbDsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX2ZhaWxlZCkKKyAgICAgICAg
ICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgU2VyaWFsaXphdGlvblRhZyB0YWcgPSBy
ZWFkVGFnKCk7CiAgICAgICAgICAgICBpZiAodGFnID09IEFycmF5VGFnKQogICAgICAgICAgICAg
ICAgIGdvdG8gYXJyYXlTdGFydFN0YXRlOwpAQCAtNDE5MywxNCArNDE5MiwxNCBAQCBzaXplX3Qg
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjb21wdXRlTWVtb3J5Q29zdCgpIGNvbnN0CiAgICAgcmV0
dXJuIGNvc3Q7CiB9CiAKLXN0YXRpYyBFeGNlcHRpb25PcjxzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlC
dWZmZXJDb250ZW50c0FycmF5Pj4gdHJhbnNmZXJBcnJheUJ1ZmZlcnMoVk0mIHZtLCBjb25zdCBW
ZWN0b3I8UmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+PiYgYXJyYXlCdWZmZXJzKQorc3RhdGljIEV4
Y2VwdGlvbk9yPHN0ZDo6dW5pcXVlX3B0cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+PiB0cmFu
c2ZlckFycmF5QnVmZmVycyhWTSYgdm0sIGNvbnN0IFZlY3RvcjxSZWZQdHI8QXJyYXlCdWZmZXI+
PiYgYXJyYXlCdWZmZXJzKQogewogICAgIGlmIChhcnJheUJ1ZmZlcnMuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGF1dG8gY29udGVudHMgPSBtYWtlVW5pcXVlPEFy
cmF5QnVmZmVyQ29udGVudHNBcnJheT4oYXJyYXlCdWZmZXJzLnNpemUoKSk7CiAKLSAgICBIYXNo
U2V0PEpTQzo6QXJyYXlCdWZmZXIqPiB2aXNpdGVkOworICAgIEhhc2hTZXQ8QXJyYXlCdWZmZXIq
PiB2aXNpdGVkOwogICAgIGZvciAoc2l6ZV90IGFycmF5QnVmZmVySW5kZXggPSAwOyBhcnJheUJ1
ZmZlckluZGV4IDwgYXJyYXlCdWZmZXJzLnNpemUoKTsgYXJyYXlCdWZmZXJJbmRleCsrKSB7CiAg
ICAgICAgIGlmICh2aXNpdGVkLmNvbnRhaW5zKGFycmF5QnVmZmVyc1thcnJheUJ1ZmZlckluZGV4
XS5nZXQoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTQzMDMsNyArNDMwMiw3IEBAIHN0
YXRpYyBib29sIGNhbkRldGFjaFJUQ0RhdGFDaGFubmVscyhjb25zdCBWZWN0b3I8UmVmPFJUQ0Rh
dGFDaGFubmVsPj4mIGNoYW5uZWxzCiB9CiAjZW5kaWYKIAotUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoSlNDOjpKU0dsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgdmFsdWUsIFNlcmlhbGl6YXRpb25FcnJvck1v
ZGUgdGhyb3dFeGNlcHRpb25zLCBTZXJpYWxpemF0aW9uQ29udGV4dCBzZXJpYWxpemF0aW9uQ29u
dGV4dCkKK1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6Y3JlYXRlKEpTR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFNl
cmlhbGl6YXRpb25FcnJvck1vZGUgdGhyb3dFeGNlcHRpb25zLCBTZXJpYWxpemF0aW9uQ29udGV4
dCBzZXJpYWxpemF0aW9uQ29udGV4dCkKIHsKICAgICBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0
Pj4gZHVtbXlQb3J0czsKICAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZShnbG9iYWxPYmplY3QsIHZh
bHVlLCB7IH0sIGR1bW15UG9ydHMsIHRocm93RXhjZXB0aW9ucywgc2VyaWFsaXphdGlvbkNvbnRl
eHQpOwpAQCAtNDMxMiwxNSArNDMxMSwxNSBAQCBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShKU0M6OkpTR2xvYmFsT2JqZWN0JgogICAg
IHJldHVybiByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7CiB9CiAKLUV4Y2VwdGlvbk9yPFJl
ZjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+PiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShK
U0dsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBWZWN0b3I8SlNDOjpT
dHJvbmc8SlNDOjpKU09iamVjdD4+JiYgdHJhbnNmZXJMaXN0LCBWZWN0b3I8UmVmUHRyPE1lc3Nh
Z2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywgU2VyaWFsaXphdGlvbkNvbnRleHQgc2VyaWFsaXphdGlv
bkNvbnRleHQpCitFeGNlcHRpb25PcjxSZWY8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4gU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoSlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVmVjdG9yPFN0cm9uZzxKU09iamVjdD4+JiYgdHJhbnNmZXJMaXN0LCBWZWN0
b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywgU2VyaWFsaXphdGlvbkNvbnRl
eHQgc2VyaWFsaXphdGlvbkNvbnRleHQpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZShnbG9iYWxPYmpl
Y3QsIHZhbHVlLCBXVEZNb3ZlKHRyYW5zZmVyTGlzdCksIG1lc3NhZ2VQb3J0cywgU2VyaWFsaXph
dGlvbkVycm9yTW9kZTo6Tm9uVGhyb3dpbmcsIHNlcmlhbGl6YXRpb25Db250ZXh0KTsKIH0KIAot
RXhjZXB0aW9uT3I8UmVmPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4+IFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6Y3JlYXRlKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlLCBWZWN0b3I8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4+JiYgdHJhbnNmZXJMaXN0
LCBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywgU2VyaWFsaXphdGlv
bkVycm9yTW9kZSB0aHJvd0V4Y2VwdGlvbnMsIFNlcmlhbGl6YXRpb25Db250ZXh0IGNvbnRleHQp
CitFeGNlcHRpb25PcjxSZWY8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4gU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpjcmVhdGUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFZlY3RvcjxTdHJvbmc8SlNPYmplY3Q+PiYmIHRyYW5zZmVyTGlzdCwgVmVjdG9y
PFJlZlB0cjxNZXNzYWdlUG9ydD4+JiBtZXNzYWdlUG9ydHMsIFNlcmlhbGl6YXRpb25FcnJvck1v
ZGUgdGhyb3dFeGNlcHRpb25zLCBTZXJpYWxpemF0aW9uQ29udGV4dCBjb250ZXh0KQogewogICAg
IFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qudm0oKTsKLSAgICBWZWN0b3I8UmVmUHRyPEpT
Qzo6QXJyYXlCdWZmZXI+PiBhcnJheUJ1ZmZlcnM7CisgICAgVmVjdG9yPFJlZlB0cjxBcnJheUJ1
ZmZlcj4+IGFycmF5QnVmZmVyczsKICAgICBWZWN0b3I8UmVmUHRyPEltYWdlQml0bWFwPj4gaW1h
Z2VCaXRtYXBzOwogI2lmIEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTX0lOX1dPUktFUlMpCiAgICAg
VmVjdG9yPFJlZlB0cjxPZmZzY3JlZW5DYW52YXM+PiBvZmZzY3JlZW5DYW52YXNlczsKQEAgLTQz
MjgsNyArNDMyNyw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+PiBT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShKU0dsb2JhbE9iCiAjaWYgRU5BQkxFKFdFQl9S
VEMpCiAgICAgVmVjdG9yPFJlZjxSVENEYXRhQ2hhbm5lbD4+IGRhdGFDaGFubmVsczsKICNlbmRp
ZgotICAgIEhhc2hTZXQ8SlNDOjpKU09iamVjdCo+IHVuaXF1ZVRyYW5zZmVyYWJsZXM7CisgICAg
SGFzaFNldDxKU09iamVjdCo+IHVuaXF1ZVRyYW5zZmVyYWJsZXM7CiAgICAgZm9yIChhdXRvJiB0
cmFuc2ZlcmFibGUgOiB0cmFuc2Zlckxpc3QpIHsKICAgICAgICAgaWYgKCF1bmlxdWVUcmFuc2Zl
cmFibGVzLmFkZCh0cmFuc2ZlcmFibGUuZ2V0KCkpLmlzTmV3RW50cnkpCiAgICAgICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgRGF0YUNsb25lRXJyb3IsICJEdXBsaWNhdGUgdHJhbnNmZXJhYmxl
IGZvciBzdHJ1Y3R1cmVkIGNsb25lIl9zIH07CkBAIC00MzkzLDcgKzQzOTIsNyBAQCBFeGNlcHRp
b25PcjxSZWY8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpj
cmVhdGUoSlNHbG9iYWxPYgogICAgIFdhc21NZW1vcnlIYW5kbGVBcnJheSB3YXNtTWVtb3J5SGFu
ZGxlczsKICNlbmRpZgogICAgIHN0ZDo6dW5pcXVlX3B0cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJy
YXk+IHNoYXJlZEJ1ZmZlcnMgPSBtYWtlVW5pcXVlPEFycmF5QnVmZmVyQ29udGVudHNBcnJheT4o
KTsKLSAgICBhdXRvIGNvZGUgPSBDbG9uZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZSgmbGV4aWNhbEds
b2JhbE9iamVjdCwgdmFsdWUsIG1lc3NhZ2VQb3J0cywgYXJyYXlCdWZmZXJzLCBpbWFnZUJpdG1h
cHMsCisgICAgYXV0byBjb2RlID0gQ2xvbmVTZXJpYWxpemVyOjpzZXJpYWxpemUobGV4aWNhbEds
b2JhbE9iamVjdCwgdmFsdWUsIG1lc3NhZ2VQb3J0cywgYXJyYXlCdWZmZXJzLCBpbWFnZUJpdG1h
cHMsCiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVNfSU5fV09SS0VSUykKICAgICAgICAgb2Zm
c2NyZWVuQ2FudmFzZXMsCiAjZW5kaWYKQEAgLTQ0MTIsNyArNDQxMSw3IEBAIEV4Y2VwdGlvbk9y
PFJlZjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+PiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0
ZShKU0dsb2JhbE9iCiAgICAgaWYgKGNvZGUgIT0gU2VyaWFsaXphdGlvblJldHVybkNvZGU6OlN1
Y2Nlc3NmdWxseUNvbXBsZXRlZCkKICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbkZvclNlcmlhbGl6
YXRpb25GYWlsdXJlKGNvZGUpOwogCi0gICAgYXV0byBhcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkg
PSB0cmFuc2ZlckFycmF5QnVmZmVycyh2bSwgYXJyYXlCdWZmZXJzKTsKKyAgICBhdXRvIGFycmF5
QnVmZmVyQ29udGVudHNBcnJheSA9IHRyYW5zZmVyQXJyYXlCdWZmZXJzKGxleGljYWxHbG9iYWxP
YmplY3Qudm0oKSwgYXJyYXlCdWZmZXJzKTsKICAgICBpZiAoYXJyYXlCdWZmZXJDb250ZW50c0Fy
cmF5Lmhhc0V4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gYXJyYXlCdWZmZXJDb250ZW50c0Fy
cmF5LnJlbGVhc2VFeGNlcHRpb24oKTsKIApAQCAtNDQyMyw2ICs0NDIyLDcgQEAgRXhjZXB0aW9u
T3I8UmVmPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3Jl
YXRlKEpTR2xvYmFsT2IKICAgICBmb3IgKGF1dG8gb2Zmc2NyZWVuQ2FudmFzIDogb2Zmc2NyZWVu
Q2FudmFzZXMpCiAgICAgICAgIGRldGFjaGVkQ2FudmFzZXMuYXBwZW5kKG9mZnNjcmVlbkNhbnZh
cy0+ZGV0YWNoKCkpOwogI2VuZGlmCisKICNpZiBFTkFCTEUoV0VCX1JUQykKICAgICBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPERldGFjaGVkUlRDRGF0YUNoYW5uZWw+PiBkZXRhY2hlZFJUQ0RhdGFD
aGFubmVsczsKICAgICBmb3IgKGF1dG8mIGNoYW5uZWwgOiBkYXRhQ2hhbm5lbHMpCkBAIC00NDUz
LDE2ICs0NDUzLDE2IEBAIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6Y3JlYXRlKFN0cmluZ1ZpZXcgc3RyaW5nKQogCiBSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShKU0NvbnRleHRSZWYg
b3JpZ2luQ29udGV4dCwgSlNWYWx1ZVJlZiBhcGlWYWx1ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQogewotICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gdG9KUyhvcmln
aW5Db250ZXh0KTsKLSAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOworICAg
IGF1dG8mIGxleGljYWxHbG9iYWxPYmplY3QgPSAqdG9KUyhvcmlnaW5Db250ZXh0KTsKKyAgICBW
TSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2tl
cih2bSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCi0gICAg
SlNWYWx1ZSB2YWx1ZSA9IHRvSlMobGV4aWNhbEdsb2JhbE9iamVjdCwgYXBpVmFsdWUpOwotICAg
IGF1dG8gc2VyaWFsaXplZFZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoKmxl
eGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gdG9KUygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgYXBpVmFsdWUpOworICAgIGF1dG8gc2VyaWFsaXplZFZhbHVlID0g
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUobGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUp
OwogICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgaWYgKGV4
Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBzY29wZS5leGNlcHRpb24oKS0+dmFsdWUoKSk7CisgICAgICAgICAgICAqZXhjZXB0aW9u
ID0gdG9SZWYoJmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLmV4Y2VwdGlvbigpLT52YWx1ZSgp
KTsKICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQpAQCAtNDQ4MiwxNCArNDQ4MiwxMiBAQCBKU1ZhbHVlIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6ZGVzZXJpYWxpemUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
CiAKIEpTVmFsdWUgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Y29uc3QgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+JiBtZXNzYWdlUG9ydHMsIFNlcmlhbGl6
YXRpb25FcnJvck1vZGUgdGhyb3dFeGNlcHRpb25zKQogewotICAgIFZlY3RvcjxTdHJpbmc+IGR1
bW15QmxvYnM7Ci0gICAgVmVjdG9yPFN0cmluZz4gZHVtbXlQYXRoczsKLSAgICByZXR1cm4gZGVz
ZXJpYWxpemUobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBtZXNzYWdlUG9ydHMs
IGR1bW15QmxvYnMsIGR1bW15UGF0aHMsIHRocm93RXhjZXB0aW9ucyk7CisgICAgcmV0dXJuIGRl
c2VyaWFsaXplKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgbWVzc2FnZVBvcnRz
LCB7IH0sIHsgfSwgdGhyb3dFeGNlcHRpb25zKTsKIH0KIAogSlNWYWx1ZSBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmRlc2VyaWFsaXplKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8UmVmUHRyPE1lc3Nh
Z2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYkZpbGVQYXRocywgU2VyaWFsaXphdGlvbkVycm9yTW9k
ZSB0aHJvd0V4Y2VwdGlvbnMpCiB7Ci0gICAgRGVzZXJpYWxpemF0aW9uUmVzdWx0IHJlc3VsdCA9
IENsb25lRGVzZXJpYWxpemVyOjpkZXNlcmlhbGl6ZSgmbGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xv
YmFsT2JqZWN0LCBtZXNzYWdlUG9ydHMsIFdURk1vdmUobV9iYWNraW5nU3RvcmVzKQorICAgIGF1
dG8gcmVzdWx0ID0gQ2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplKGxleGljYWxHbG9iYWxP
YmplY3QsICpnbG9iYWxPYmplY3QsIG1lc3NhZ2VQb3J0cywgV1RGTW92ZShtX2JhY2tpbmdTdG9y
ZXMpCiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVNfSU5fV09SS0VSUykKICAgICAgICAgLCBX
VEZNb3ZlKG1fZGV0YWNoZWRPZmZzY3JlZW5DYW52YXNlcykKICNlbmRpZgpAQCAtNDUwOSwyMCAr
NDUwNywyMCBAQCBKU1ZhbHVlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsCiAKIEpTVmFsdWVSZWYgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShKU0NvbnRleHRSZWYgZGVzdGluYXRpb25Db250ZXh0
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QgPSB0b0pTKGRlc3RpbmF0aW9uQ29udGV4dCk7Ci0gICAgVk0mIHZtID0gbGV4
aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvJiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0g
KnRvSlMoZGVzdGluYXRpb25Db250ZXh0KTsKKyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IGRlc2VyaWFs
aXplKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBKU1Zh
bHVlIHZhbHVlID0gZGVzZXJpYWxpemUobGV4aWNhbEdsb2JhbE9iamVjdCwgJmxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAg
ICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBzY29wZS5leGNlcHRpb24oKS0+dmFsdWUoKSk7CisgICAgICAgICAgICAq
ZXhjZXB0aW9uID0gdG9SZWYoJmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLmV4Y2VwdGlvbigp
LT52YWx1ZSgpKTsKICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgcmV0dXJuIHRvUmVm
KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICByZXR1cm4gdG9SZWYoJmxleGljYWxH
bG9iYWxPYmplY3QsIHZhbHVlKTsKIH0KIAogUmVmPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAppbmRleCBhZjhiOTAyNmIzZTRhZTNi
NjBiZDg0ZWY3YjkyZmRkMDQ2ZTg4NmMyLi5iNzBiYzNkZTlhZGJhMTQ0MTg2NTA5ZjAwMGI1MTMz
ZjQ0OTBlMDAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3Jl
SlNDbGllbnREYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3Jl
SlNDbGllbnREYXRhLmNwcApAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIkpTRE9NV2luZG93
LmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3dQcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAiSlNEZWRp
Y2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5oIgotI2luY2x1ZGUgIkpTSURCU2VyaWFsaXphdGlvbkds
b2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuaCIKICNp
bmNsdWRlICJKU1JlbW90ZURPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkpTU2VydmljZVdvcmtlckds
b2JhbFNjb3BlLmgiCkBAIC04MCw3ICs3OSw2IEBAIEpTSGVhcERhdGE6OkpTSGVhcERhdGEoSGVh
cCYgaGVhcCkKICNpZiBFTkFCTEUoV0VCX0FVRElPKQogICAgICwgbV9oZWFwQ2VsbFR5cGVGb3JK
U0F1ZGlvV29ya2xldEdsb2JhbFNjb3BlKEpTQzo6SXNvSGVhcENlbGxUeXBlOjpBcmdzPEpTQXVk
aW9Xb3JrbGV0R2xvYmFsU2NvcGU+KCkpCiAjZW5kaWYKLSAgICAsIG1faGVhcENlbGxUeXBlRm9y
SlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0KEpTQzo6SXNvSGVhcENlbGxUeXBlOjpBcmdz
PEpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdD4oKSkKICAgICAsIG1fZG9tQnVpbHRpbkNv
bnN0cnVjdG9yU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxU
eXBlLCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UpCiAgICAgLCBtX2RvbUNvbnN0cnVjdG9y
U3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU0RP
TUNvbnN0cnVjdG9yQmFzZSkKICAgICAsIG1fZG9tTmFtZXNwYWNlT2JqZWN0U3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU0RPTU9iamVjdCkKQEAg
LTg5LDcgKzg3LDYgQEAgSlNIZWFwRGF0YTo6SlNIZWFwRGF0YShIZWFwJiBoZWFwKQogICAgICwg
bV9ydW50aW1lTWV0aG9kU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVh
cENlbGxUeXBlLCBSdW50aW1lTWV0aG9kKSAvLyBIYXNoOjB4ZjcwYzRhODUKICAgICAsIG1fcnVu
dGltZU9iamVjdFNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIG1fcnVudGltZU9iamVjdEhl
YXBDZWxsVHlwZSwgSlNDOjpCaW5kaW5nczo6UnVudGltZU9iamVjdCkKICAgICAsIG1fd2luZG93
UHJveHlTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBtX3dpbmRvd1Byb3h5SGVhcENlbGxU
eXBlLCBKU1dpbmRvd1Byb3h5KQotICAgICwgbV9pZGJTZXJpYWxpemF0aW9uU3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgbV9oZWFwQ2VsbFR5cGVGb3JKU0lEQlNlcmlhbGl6YXRpb25HbG9i
YWxPYmplY3QsIEpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdCkKICAgICAsIG1fc3Vic3Bh
Y2VzKG1ha2VVbmlxdWU8RXh0ZW5kZWRET01Jc29TdWJzcGFjZXM+KCkpCiB7CiB9CkBAIC0xMjEs
NyArMTE4LDYgQEAgSlNWTUNsaWVudERhdGE6OkpTVk1DbGllbnREYXRhKFZNJiB2bSkKICAgICAs
IENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChtX3J1bnRpbWVNZXRob2RTcGFjZSkKICAgICAsIENM
SUVOVF9JU09fU1VCU1BBQ0VfSU5JVChtX3J1bnRpbWVPYmplY3RTcGFjZSkKICAgICAsIENMSUVO
VF9JU09fU1VCU1BBQ0VfSU5JVChtX3dpbmRvd1Byb3h5U3BhY2UpCi0gICAgLCBDTElFTlRfSVNP
X1NVQlNQQUNFX0lOSVQobV9pZGJTZXJpYWxpemF0aW9uU3BhY2UpCiAgICAgLCBtX2NsaWVudFN1
YnNwYWNlcyhtYWtlVW5pcXVlPEV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzPigpKQogewog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50
RGF0YS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5o
CmluZGV4IDFmYTUzNTFjNTUyZjlhOTY1OGEwNTM3ZmJhMjhkZjg0ZjdjMzhmYmMuLjhhMDA0YmJk
ZDJjOTNjMTEzMWJjYjNjYjhmNmM3MjUwNTQ0MWMyZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmgKQEAgLTc4LDcgKzc4LDYgQEAgcHVi
bGljOgogI2lmIEVOQUJMRShXRUJfQVVESU8pCiAgICAgSlNDOjpJc29IZWFwQ2VsbFR5cGUgbV9o
ZWFwQ2VsbFR5cGVGb3JKU0F1ZGlvV29ya2xldEdsb2JhbFNjb3BlOwogI2VuZGlmCi0gICAgSlND
OjpJc29IZWFwQ2VsbFR5cGUgbV9oZWFwQ2VsbFR5cGVGb3JKU0lEQlNlcmlhbGl6YXRpb25HbG9i
YWxPYmplY3Q7CiAKIHByaXZhdGU6CiAgICAgSlNDOjpJc29TdWJzcGFjZSBtX2RvbUJ1aWx0aW5D
b25zdHJ1Y3RvclNwYWNlOwpAQCAtODksNyArODgsNiBAQCBwcml2YXRlOgogICAgIEpTQzo6SXNv
U3Vic3BhY2UgbV9ydW50aW1lTWV0aG9kU3BhY2U7CiAgICAgSlNDOjpJc29TdWJzcGFjZSBtX3J1
bnRpbWVPYmplY3RTcGFjZTsKICAgICBKU0M6Oklzb1N1YnNwYWNlIG1fd2luZG93UHJveHlTcGFj
ZTsKLSAgICBKU0M6Oklzb1N1YnNwYWNlIG1faWRiU2VyaWFsaXphdGlvblNwYWNlOwogCiAgICAg
c3RkOjp1bmlxdWVfcHRyPEV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzPiBtX3N1YnNwYWNlczsKICAg
ICBWZWN0b3I8SlNDOjpJc29TdWJzcGFjZSo+IG1fb3V0cHV0Q29uc3RyYWludFNwYWNlczsKQEAg
LTEzNiw3ICsxMzQsNiBAQCBwdWJsaWM6CiAgICAgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2Um
IHJ1bnRpbWVNZXRob2RTcGFjZSgpIHsgcmV0dXJuIG1fcnVudGltZU1ldGhvZFNwYWNlOyB9CiAg
ICAgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHJ1bnRpbWVPYmplY3RTcGFjZSgpIHsgcmV0
dXJuIG1fcnVudGltZU9iamVjdFNwYWNlOyB9CiAgICAgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UmIHdpbmRvd1Byb3h5U3BhY2UoKSB7IHJldHVybiBtX3dpbmRvd1Byb3h5U3BhY2U7IH0KLSAg
ICBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSYgaWRiU2VyaWFsaXphdGlvblNwYWNlKCkgeyBy
ZXR1cm4gbV9pZGJTZXJpYWxpemF0aW9uU3BhY2U7IH0KIAogICAgIEV4dGVuZGVkRE9NQ2xpZW50
SXNvU3Vic3BhY2VzJiBjbGllbnRTdWJzcGFjZXMoKSB7IHJldHVybiAqbV9jbGllbnRTdWJzcGFj
ZXMuZ2V0KCk7IH0KIApAQCAtMTU2LDcgKzE1Myw2IEBAIHByaXZhdGU6CiAgICAgSlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UgbV9ydW50aW1lTWV0aG9kU3BhY2U7CiAgICAgSlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UgbV9ydW50aW1lT2JqZWN0U3BhY2U7CiAgICAgSlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2UgbV93aW5kb3dQcm94eVNwYWNlOwotICAgIEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlIG1faWRiU2VyaWFsaXphdGlvblNwYWNlOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEV4
dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzPiBtX2NsaWVudFN1YnNwYWNlczsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRW1wdHlTY3JpcHRFeGVjdXRpb25Db250ZXh0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRW1wdHlTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxYzcyZWY5Yzk2YzI3YjUzODRjNjEzMWM3Zjk5YWFj
ZTE4Yzg0MmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0VtcHR5U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCisrKyAvZGV2
L251bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkV2ZW50TG9vcC5oIgotI2lu
Y2x1ZGUgIk1pY3JvdGFza3MuaCIKLSNpbmNsdWRlICJSZWZlcnJlclBvbGljeS5oIgotI2luY2x1
ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5o
IgotCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIEVtcHR5U2NyaXB0RXhlY3V0aW9uQ29udGV4dCBmaW5hbCA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEVtcHR5U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4sIHB1YmxpYyBTY3JpcHRFeGVjdXRpb25D
b250ZXh0IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEVtcHR5U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dD4gY3JlYXRlKEpTQzo6Vk0mIHZtKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRW1wdHlTY3JpcHRFeGVjdXRpb25Db250ZXh0KHZtKSk7Ci0gICAgfQotCi0gICAgYm9v
bCBpc1NlY3VyZUNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIGJv
b2wgaXNKU0V4ZWN1dGlvbkZvcmJpZGRlbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9
Ci0gICAgRXZlbnRMb29wVGFza0dyb3VwJiBldmVudExvb3AoKSBmaW5hbAotICAgIHsKLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAqbV9ldmVudExvb3BUYXNr
R3JvdXA7Ci0gICAgfQotICAgIGNvbnN0IFVSTCYgdXJsKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV91cmw7IH0KLSAgICBVUkwgY29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiwgRm9yY2VVVEY4ID0g
Rm9yY2VVVEY4OjpObykgY29uc3QgZmluYWwgeyByZXR1cm4geyB9OyB9OwotICAgIFN0cmluZyB1
c2VyQWdlbnQoY29uc3QgVVJMJikgY29uc3QgZmluYWwgeyByZXR1cm4gZW1wdHlTdHJpbmcoKTsg
fQotICAgIFJlZmVycmVyUG9saWN5IHJlZmVycmVyUG9saWN5KCkgY29uc3QgZmluYWwgeyByZXR1
cm4gUmVmZXJyZXJQb2xpY3k6OkVtcHR5U3RyaW5nOyB9Ci0KLSAgICB2b2lkIGRpc2FibGVFdmFs
KGNvbnN0IFN0cmluZyYpIGZpbmFsIHsgfTsKLSAgICB2b2lkIGRpc2FibGVXZWJBc3NlbWJseShj
b25zdCBTdHJpbmcmKSBmaW5hbCB7IH07Ci0KLSAgICBJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Q
cm94eSogaWRiQ29ubmVjdGlvblByb3h5KCkgZmluYWwgeyByZXR1cm4gbnVsbHB0cjsgfQotICAg
IFNvY2tldFByb3ZpZGVyKiBzb2NrZXRQcm92aWRlcigpIGZpbmFsIHsgcmV0dXJuIG51bGxwdHI7
IH0KLQotICAgIHZvaWQgYWRkQ29uc29sZU1lc3NhZ2Uoc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rv
cjo6Q29uc29sZU1lc3NhZ2U+JiYpIGZpbmFsIHsgfQotICAgIHZvaWQgYWRkQ29uc29sZU1lc3Nh
Z2UoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBs
b25nKSBmaW5hbCB7IH07Ci0KLSAgICBTZWN1cml0eU9yaWdpbiYgdG9wT3JpZ2luKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9vcmlnaW4uZ2V0KCk7IH07Ci0KLSAgICB2b2lkIHBvc3RUYXNrKFRh
c2smJikgZmluYWwgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIEV2ZW50VGFyZ2V0KiBl
cnJvckV2ZW50VGFyZ2V0KCkgZmluYWwgeyByZXR1cm4gbnVsbHB0cjsgfTsKLQotI2lmIEVOQUJM
RShXRUJfQ1JZUFRPKQotICAgIGJvb2wgd3JhcENyeXB0b0tleShjb25zdCBWZWN0b3I8dWludDhf
dD4mLCBWZWN0b3I8dWludDhfdD4mKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wg
dW53cmFwQ3J5cHRvS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIFZlY3Rvcjx1aW50OF90PiYp
IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0jZW5kaWYKLQotICAgIEpTQzo6Vk0mIHZtKCkgZmlu
YWwgeyByZXR1cm4gbV92bTsgfQotCi0gICAgdXNpbmcgUmVmQ291bnRlZDo6cmVmOwotICAgIHVz
aW5nIFJlZkNvdW50ZWQ6OmRlcmVmOwotCi1wcml2YXRlOgotICAgIEVtcHR5U2NyaXB0RXhlY3V0
aW9uQ29udGV4dChKU0M6OlZNJiB2bSkKLSAgICAgICAgOiBtX3ZtKHZtKQotICAgICAgICAsIG1f
b3JpZ2luKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVVbmlxdWUoKSkKLSAgICAgICAgLCBtX2V2ZW50
TG9vcChFbXB0eUV2ZW50TG9vcDo6Y3JlYXRlKHZtKSkKLSAgICAgICAgLCBtX2V2ZW50TG9vcFRh
c2tHcm91cChtYWtlVW5pcXVlPEV2ZW50TG9vcFRhc2tHcm91cD4obV9ldmVudExvb3ApKQotICAg
IHsKLSAgICB9Ci0KLSAgICB2b2lkIGFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxl
dmVsLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCwgdW5zaWduZWQsIFJl
ZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4mJiwgSlNDOjpKU0dsb2JhbE9iamVjdCog
PSBudWxscHRyLCB1bnNpZ25lZCBsb25nID0gMCkgZmluYWwgeyB9Ci0gICAgdm9pZCBsb2dFeGNl
cHRpb25Ub0NvbnNvbGUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgaW50LCBpbnQsIFJl
ZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4mJikgZmluYWwgeyB9OwotICAgIHZvaWQg
cmVmU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGZpbmFsIHsgcmVmKCk7IH07Ci0gICAgdm9pZCBk
ZXJlZlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBmaW5hbCB7IGRlcmVmKCk7IH07Ci0KLSAgICBj
b25zdCBTZXR0aW5nczo6VmFsdWVzJiBzZXR0aW5nc1ZhbHVlcygpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIG1fc2V0dGluZ3NWYWx1ZXM7IH0KLQotI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQotICAg
IE5vdGlmaWNhdGlvbkNsaWVudCogbm90aWZpY2F0aW9uQ2xpZW50KCkgZmluYWwgeyByZXR1cm4g
bnVsbHB0cjsgfQotI2VuZGlmCi0KLSAgICBjbGFzcyBFbXB0eUV2ZW50TG9vcCBmaW5hbCA6IHB1
YmxpYyBFdmVudExvb3AgewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFJlZjxFbXB0eUV2
ZW50TG9vcD4gY3JlYXRlKEpTQzo6Vk0mIHZtKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBFbXB0eUV2ZW50TG9vcCh2bSkpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgTWljcm90YXNrUXVldWUmIG1pY3JvdGFza1F1ZXVlKCkgZmluYWwgeyByZXR1cm4gbV9xdWV1
ZTsgfTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGV4cGxpY2l0IEVtcHR5RXZlbnRMb29wKEpT
Qzo6Vk0mIHZtKQotICAgICAgICAgICAgOiBtX3F1ZXVlKE1pY3JvdGFza1F1ZXVlKHZtKSkKLSAg
ICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzY2hlZHVsZVRvUnVuKCkgZmluYWwg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAgICAgICBib29sIGlzQ29udGV4dFRocmVhZCgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLQotICAgICAgICBNaWNyb3Rhc2tRdWV1ZSBt
X3F1ZXVlOwotICAgIH07Ci0KLSAgICBSZWY8SlNDOjpWTT4gbV92bTsKLSAgICBSZWY8U2VjdXJp
dHlPcmlnaW4+IG1fb3JpZ2luOwotICAgIFVSTCBtX3VybDsKLSAgICBSZWY8RW1wdHlFdmVudExv
b3A+IG1fZXZlbnRMb29wOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxFdmVudExvb3BUYXNrR3JvdXA+
IG1fZXZlbnRMb29wVGFza0dyb3VwOwotICAgIFNldHRpbmdzOjpWYWx1ZXMgbV9zZXR0aW5nc1Zh
bHVlczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="commit-queue"
          id="480843"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453458</attachid>
            <date>2022-02-28 18:23:23 -0800</date>
            <delta_ts>2022-03-01 09:14:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237266-20220228182322.patch</filename>
            <type>text/plain</type>
            <size>120445</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwNjIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
N2VlNTAyNDEwMzNkOTRhNjAwMjcyYWNhNDI0MmRjNmRjMzRmNjE1Li42MDU3NDhlN2VmNTliZTM0
NDFhMTc4MzBjMGM5YzJmZmQ2MWI4YmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOSBAQAorMjAyMi0wMi0yNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgQ2hhbmdlZCBJbmRleGVkREIgdXNlIG9mIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB0
byBhIHNpbXBsZXIgbW9kZWwsIHdpdGggYSBub24tRE9NIEphdmFTY3JpcHQgZ2xvYmFsIG9iamVj
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3MjY2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBydW50
aW1lL0RhdGFWaWV3Lmg6IEV4cG9ydGVkIHRoZSB3cmFwIGZ1bmN0aW9uIHNvIHdlIGNhbiBjYWxs
IGl0IG5vbi1wb2x5bW9ycGhpY2FsbHkKKyAgICAgICAgaW4gV2ViQ29yZS4KKworICAgICAgICAq
IHJ1bnRpbWUvSlNDSlNWYWx1ZS5oOiBSZW1vdmVkIHVubmVlZGVkIG92ZXJsb2FkIHRvIGNvbnN0
cnVjdCBhIEpTVmFsdWUgZnJvbSBhCisgICAgICAgIG5vbi1jb25zdCBKU0NlbGwqLiBBZGRlZCBh
biBvdmVybG9hZCBzbyB3ZSBjYW4gY29uc3RydWN0IGZyb20gYSBjb25zdCBKU0NlbGwmLAorICAg
ICAgICBzbyB3ZSBjYW4gdXNlIHJlZmVyZW5jZXMsIGFzIHdlIGRvIGluIFdlYkNvcmUsIGFuZCBu
b3QgaGF2ZSB0byB0eXBlICImIiBlYWNoIHRpbWUuCisgICAgICAgICogcnVudGltZS9KU0NKU1Zh
bHVlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpKU1ZhbHVlKTogRGl0dG8uCisK
IDIwMjItMDItMjggIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAg
IFdlYiBJbnNwZWN0b3I6IFtGbGV4Ym94XSBBZGQgb3B0aW9ucyB0byBzaG93IGVhY2ggYXJlYSdz
IENTUyBgb3JkZXJgIGFuZC9vciBET00gaW5kZXggaW4gdGhlIHBhcmVudCBmbGV4IGNvbnRhaW5l
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IGRlZjEwN2E2MDMwYzY5Mzg0MzdkYTU1MmNlYjJjMzUwOTZmODE3ZWQu
LjNjZTEyYTA4YTFiYTNhZTBkN2VjNmJkM2VkODdlOWEwYmU2N2ExNGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxMjMgQEAKKzIwMjItMDItMjcgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIENoYW5nZWQgSW5kZXhlZERCIHVzZSBvZiBTZXJpYWxpemVkU2NyaXB0VmFs
dWUgdG8gYSBzaW1wbGVyIG1vZGVsLCB3aXRoIGEgbm9uLURPTSBKYXZhU2NyaXB0IGdsb2JhbCBv
YmplY3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIz
NzI2NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVz
ZSByZWZlcmVuY2VzIGluc3RlYWQgb2YgbmV2ZXItbnVsbCBwb2ludGVycy4KKworICAgICAgICAq
IFNvdXJjZXMudHh0OiBSZW1vdmVkIEpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdC5jcHAu
CisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IFJlbW92ZWQg
RW1wdHlTY3JpcHRFeGVjdXRpb25Db250ZXh0LmggYW5kCisgICAgICAgIEpTSURCU2VyaWFsaXph
dGlvbkdsb2JhbE9iamVjdC5jcHAvaC4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0lEQkJpbmRp
bmdVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VyaWFsaXphdGlvbkNvbnRl
eHQ6OmluaXRpYWxpemVWTSk6IERvbid0IGNhbGwKKyAgICAgICAgSlNWTUNsaWVudERhdGE6Omlu
aXROb3JtYWxXb3JsZCBzaW5jZSB3ZSBkbyBub3Qgd2FudCB0byBjcmVhdGUgYSBET00gd3JhcHBl
ciB3b3JsZC4KKyAgICAgICAgVGhpcyBnZXRzIHJpZCBvZiB0aGUgaGFjayB3aGVyZSB3ZSBjbGFp
bSB0byBiZSBhIHdvcmtsZXQuIENyZWF0ZSBhIEpTR2xvYmFsT2JqZWN0CisgICAgICAgIGluc3Rl
YWQgb2YgYSBKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3QuCisgICAgICAgIChXZWJDb3Jl
OjpjYWxsT25JREJTZXJpYWxpemF0aW9uVGhyZWFkQW5kV2FpdCk6IEZpeCAiZnVuY3Rpb24iIHR5
cG8uCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCBj
b25zdCk6IFJlbW92ZWQgc3BlY2lhbCBjYXNlCisgICAgICAgIGZvciBKU0lEQlNlcmlhbGl6YXRp
b25HbG9iYWxPYmplY3QuCisgICAgICAgIChXZWJDb3JlOjpzY3JpcHRNb2R1bGVMb2FkZXIpOiBE
aXR0by4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9i
amVjdC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNJREJTZXJpYWxpemF0
aW9uR2xvYmFsT2JqZWN0Lmg6IFJlbW92ZWQuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJp
YWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0aW9uQ29udGV4
dCk6IEFkZGVkIHRlbXBvcmFyeSBzY2FmZm9sZGluZyBmdW5jdGlvbiBzbyB3ZSBjYW4gc3RhcnQK
KyAgICAgICAgdXNpbmcgcmVmZXJlbmNlcyBpbiB0aGlzIGZpbGUuIExhdGVyIHdlIHdpbGwgcmVt
b3ZlIHRoZXNlIG9uY2Ugd2UgY2hhbmdlIHRoZSByZWFsCisgICAgICAgIGZ1bmN0aW9ucyB0byB0
YWtlIHJlZmVyZW5jZXMuCisgICAgICAgIChXZWJDb3JlOjp0b0pTKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpD
bG9uZUJhc2U6OkNsb25lQmFzZSk6IEluaXRpYWxpemUgbV9mYWlsZWQgaW4gdGhlIGNsYXNzIGRl
ZmluaXRpb24sIG5vdAorICAgICAgICB0aGUgY29uc3RydWN0b3IuIENoYW5nZWQgbV9sZXhpY2Fs
R2xvYmFsT2JqZWN0IHRvIGEgcmVmZXJlbmNlLgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVCYXNl
Ojppc0RPTUdsb2JhbE9iamVjdCBjb25zdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2xv
bmVCYXNlOjpsZXhpY2FsRE9NR2xvYmFsT2JqZWN0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDbG9uZUJhc2U6OmV4ZWN1dGlvbkNvbnRleHQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OndyYXBDcnlwdG9LZXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6dW53cmFwQ3J5cHRv
S2V5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6c2VyaWFs
aXplKTogVGFrZSBhIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIHBvaW50ZXIuCisgICAgICAgIChXZWJD
b3JlOjpDbG9uZVNlcmlhbGl6ZXI6OkNsb25lU2VyaWFsaXplcik6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpmaWxsVHJhbnNmZXJNYXApOiBEbyBub3QgbWFrZSBh
IG1hcCBpZiB0aGUgZ2xvYmFsCisgICAgICAgIG9iamVjdCBpcyBub3QgYSBET00gb25lIChvbmx5
IGZvciBJREIgc2VyaWFsaXphdGlvbikuCisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6
ZXI6OmdldFByb3BlcnR5KTogVXBkYXRlIHNpbmNlIG1fbGV4aWNhbEdsb2JhbE9iamVjdCBpcwor
ICAgICAgICBhIHJlZmVyZW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6
dG9KU0FycmF5QnVmZmVyKTogVXNlIHRoZSBsZXhpY2FsRE9NR2xvYmFsT2JqZWN0KCkKKyAgICAg
ICAgZnVuY3Rpb24gaW5zdGVhZCBvZiBjYXN0aW5nIGhlcmUuIFR3ZWFrZWQgY29kZSBzdHlsZSBh
IGJpdC4KKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6ZHVtcEFycmF5QnVmZmVy
Vmlldyk6IFVwZGF0ZWQgc2luY2UKKyAgICAgICAgbV9sZXhpY2FsR2xvYmFsT2JqZWN0IGlzIGEg
cmVmZXJlbmNlLgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpkdW1wRE9NUG9p
bnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6ZHVtcERPTVJl
Y3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6ZHVtcERPTU1h
dHJpeCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpkdW1wRE9N
RXhjZXB0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OmR1
bXBJZlRlcm1pbmFsKTogRGl0dG8uIEFsc28gbW92ZSB0aGUgYm9keSBvZgorICAgICAgICB3cmFw
Q3J5cHRvS2V5IGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OndyaXRl
KTogVXBkYXRlZCBzaW5jZSBtX2xleGljYWxHbG9iYWxPYmplY3QgaXMgYQorICAgICAgICByZWZl
cmVuY2UuCisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxpemUp
OiBVc2UgcmVmZXJlbmNlIGZvciBhcmd1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVz
ZXJpYWxpemVyOjpDYWNoZWRTdHJpbmc6OmpzU3RyaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpDbG9uZURlc2VyaWFsaXplcjo6Q2xvbmVEZXNlcmlhbGl6ZXIpOiBEaXR0by4gQWxzbyBy
ZW1vdmVkCisgICAgICAgIG1faXNET01HbG9iYWxPYmplY3QgYW5kIG1fY2FuQ3JlYXRlRE9NT2Jq
ZWN0LCBpbnN0ZWFkIHVzZSBpc0RPTUdsb2JhbE9iamVjdCgpLgorICAgICAgICBOb3RlIHRoYXQg
dGhlIGxleGljYWwgZ2xvYmFsIG9iamVjdCBhbmQgdGhlIG90aGVyIGdsb2JhbCBvYmplY3QgYXJl
IGFsd2F5cworICAgICAgICBib3RoIERPTSBnbG9iYWwgb2JqZWN0cywgb3IgYm90aCB0aGUgc2Ft
ZSBnbG9iYWwgb2JqZWN0LCB0aHVzIHRoZXJlIGlzIG5vCisgICAgICAgIG5lZWQgdG8gY2hlY2sg
Ym90aC4KKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpwdXRQcm9wZXJ0eSk6
IFVwZGF0ZWQgc2luY2UgbV9sZXhpY2FsR2xvYmFsT2JqZWN0CisgICAgICAgIGlzIGEgcmVmZXJl
bmNlLgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRGaWxlKTogVXNl
IGV4ZWN1dGlvbkNvbnRleHQoKSBpbnN0ZWFkIG9mCisgICAgICAgIGNoZWNraW5nIG1fY2FuQ3Jl
YXRlRE9NT2JqZWN0IGRpcmVjdGx5LiBBbHNvLCBub3cgd2UgZmFpbCByYXRoZXIgdGhhbgorICAg
ICAgICBzdWNjZWVkaW5nIGFuZCByZXR1cm5pbmcgbnVsbHB0ciBmb3IgdGhlIGZpbGUgaW4gdGhp
cyBjYXNlLgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRBcnJheUJ1
ZmZlclZpZXdJbXBsKTogQ2hlY2sgcmVhZFRlcm1pbmFsCisgICAgICAgIGZvciBhIG51bGxwdHIg
SlNWYWx1ZSwgd2hpY2ggaXMgbm93IHByb2R1Y2VkIGZvciBzb21lIHR5cGVzLiBSZXR1cm4gYXgK
KyAgICAgICAgSlNWYWx1ZSBpbnN0ZWFkIG9mIHVzaW5nIGFuIG91dCBhcmd1bWVudC4gQ2FsbCB0
aGUgbmV3IGZ1bmN0aW9ucyBiZWxvdworICAgICAgICB0aGF0IGNhbiBtYWtlIHdyYXBwZXJzIGlu
IHRoZSBub24tRE9NIGNhc2UuCisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6
Y3JlYXRlRGF0YVZpZXcpOiBBZGRlZC4gSW5jbHVkZXMgYSBzcGVjaWFsCisgICAgICAgIGNhc2Ug
Zm9yIG5vbi1ET00gc2VyaWFsaXphdGlvbiBzbyB3ZSBjYW4gY3JlYXRlIGEgd3JhcHBlciB0aGVy
ZSwgc2luY2UKKyAgICAgICAgdGhlIHdyYXAgZnVuY3Rpb24gd291bGQgZmFpbC4KKyAgICAgICAg
KFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpjcmVhdGVBcnJheUJ1ZmZlclZpZXcpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkQXJyYXlCdWZmZXJW
aWV3KTogUmV0dXJuIGEgSlNWYWx1ZQorICAgICAgICBpbnN0ZWFkIG9mIHVzaW5nIGFuIG91dCBh
cmd1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkQ3J5cHRv
S2V5KTogRGl0dG8uIEFsc28gdXNlIHRoZQorICAgICAgICBuZXcgd3JhcCBmdW5jdGlvbgorICAg
ICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OndyYXApOiBBZGRlZC4gQ29udmVuaWVu
dCBmdW5jdGlvbiBmb3IKKyAgICAgICAgY2FsbGluZyB0b0pTIHRvIHdyYXAgYW4gb2JqZWN0IGlu
IGEgRE9NIHdyYXBwZXIuIEJvdHRsZW5lY2sgdGhhdAorICAgICAgICBjYWxscyBmYWlsIGFuZCBy
ZXR1cm5zIGEgbnVsbHB0ciBKU1ZhbHVlIGluIGEgbm9uLURPTSBjb250ZXh0LCBtYWtpbmcKKyAg
ICAgICAgc3VyZSB3ZSBkb24ndCBmb3JnZXQgdGhhdCBjaGVjayBhbnl3aGVyZS4KKyAgICAgICAg
KFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjp3cmFwTmV3bHlDcmVhdGVkKTogU2FtZSBhcyBh
Ym92ZSwgYnV0CisgICAgICAgIGZvciBuZXdseS1jcmVhdGVkIG9iamVjdHMgb25seS4KKyAgICAg
ICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkRE9NUG9pbnQpOiBVc2Ugd3JhcE5l
d2x5Q3JlYXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkRE9N
TWF0cml4KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVh
ZERPTVJlY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpy
ZWFkRE9NUXVhZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6
OnJlYWRUcmFuc2ZlcnJlZEltYWdlQml0bWFwKTogVXNlIHdyYXAuCisgICAgICAgIChXZWJDb3Jl
OjpDbG9uZURlc2VyaWFsaXplcjo6cmVhZE9mZnNjcmVlbkNhbnZhcyk6IFVzZSBleGVjdXRpb25D
b250ZXh0CisgICAgICAgIGFuZCB3cmFwLgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlh
bGl6ZXI6OnJlYWRSVENDZXJ0aWZpY2F0ZSk6IFVzZSB3cmFwTmV3bHlDcmVhdGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRSVENEYXRhQ2hhbm5lbCk6IFVzZSBl
eGVjdXRpb25Db250ZXh0CisgICAgICAgIGFuZCB3cmFwLgorICAgICAgICAoV2ViQ29yZTo6Q2xv
bmVEZXNlcmlhbGl6ZXI6OnJlYWRJbWFnZUJpdG1hcCk6IFVzZSBleGVjdXRpb25Db250ZXh0Cisg
ICAgICAgIGFuZCB3cmFwLgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJl
YWRET01FeGNlcHRpb24pOiBVc2Ugd3JhcC4KKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJp
YWxpemVyOjpyZWFkQmlnSW50KTogVXBkYXRlIHNpbmNlIG1fbGV4aWNhbEdsb2JhbE9iamVjdC52
bQorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRUZXJtaW5hbCk6IFVz
ZSB3cmFwIGZvciBGaWxlVGFnLCBGaWxlTGlzdFRhZywKKyAgICAgICAgSW1hZ2VEYXRhVGFnLCBN
ZXNzYWdlUG9ydFJlZmVyZW5jZVRhZywgQXJyYXlCdWZmZXJUcmFuc2ZlclRhZywgQXJyYXlCdWZm
ZXJUYWcsCisgICAgICAgIGFuZCB1c2UgcmVhZEFycmF5QnVmZmVyVmlldyBmb3IgVEhJUyBJUyBO
T1QgQ09SUkVDVCBZRVQsIE5FRUQgSU1QUk9WRUQgQ09ERQorICAgICAgICAoV2ViQ29yZTo6Q2xv
bmVEZXNlcmlhbGl6ZXI6OmNyZWF0ZUJsb2IpOiBORUVEIENPTU1FTlQgSEVSRQorICAgICAgICAo
V2ViQ29yZTo6bWF5YmVUaHJvd0V4Y2VwdGlvbklmU2VyaWFsaXphdGlvbkZhaWxlZCk6IE5FRUQg
Q09NTUVOVCBIRVJFCisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNy
ZWF0ZSk6IE5FRUQgQ09NTUVOVCBIRVJFCisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmRlc2VyaWFsaXplKTogTkVFRCBDT01NRU5UIEhFUkUKKworICAgICAgICAqIGJp
bmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNI
ZWFwRGF0YTo6SlNIZWFwRGF0YSk6IFJlbW92ZWQKKyAgICAgICAgbV9oZWFwQ2VsbFR5cGVGb3JK
U0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3QsIGFuZCBtX2lkYlNlcmlhbGl6YXRpb25TcGFj
ZS4KKyAgICAgICAgKFdlYkNvcmU6OkpTVk1DbGllbnREYXRhOjpKU1ZNQ2xpZW50RGF0YSk6IERp
dHRvLgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuaDogRGl0dG8u
CisKKyAgICAgICAgKiBkb20vRW1wdHlTY3JpcHRFeGVjdXRpb25Db250ZXh0Lmg6IFJlbW92ZWQu
CisKIDIwMjItMDItMjggIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAg
ICAgW0NvY29hXSBBZG9wdCAtc3RyZWFtRGF0YVBhcnNlcjpkaWRQcm92aWRlQ29udGVudEtleVNw
ZWNpZmllcjpmb3JUcmFja0lEOiBkZWxlZ2F0ZSBjYWxsYmFjawpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RhdGFWaWV3LmgKaW5kZXggMzQwMjY1NDEwMzE5ZDI4YzNkYzY3Mjg2ZTliNzk5
NzlhMDEyNjQ4Ni4uZDg5YmNmNzBlMjkxMjJlYjU0M2NhZTEwM2U0ZDU2Njk5ZmZiOGIxZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5oCkBAIC00MCw3ICs0MCw3IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFR5cGVEYXRhVmlldzsKICAgICB9CiAKLSAgICBKU0Fy
cmF5QnVmZmVyVmlldyogd3JhcChKU0dsb2JhbE9iamVjdCosIEpTR2xvYmFsT2JqZWN0KikgZmlu
YWw7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNBcnJheUJ1ZmZlclZpZXcqIHdyYXAoSlNHbG9i
YWxPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopIGZpbmFsOwogICAgIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CiAgICAgVCBnZXQoc2l6ZV90IG9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIGJv
b2wqIHN0YXR1cyA9IG51bGxwdHIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NKU1ZhbHVlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NK
U1ZhbHVlLmgKaW5kZXggZThhNGU3YTYyMzM5ZDM2YmVhMGY3MjU3YjQxNzM1ZWM4MjQzZWY1Ny4u
ZmEzNjExOGRkYWE0ZmE2YjYwZDIyZjU3N2VlZWE3ODFhNGZjODBmMCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaApAQCAtMTg4LDggKzE4OCw4IEBAIHB1Ymxp
YzoKICAgICBKU1ZhbHVlKEpTVW5kZWZpbmVkVGFnKTsKICAgICBKU1ZhbHVlKEpTVHJ1ZVRhZyk7
CiAgICAgSlNWYWx1ZShKU0ZhbHNlVGFnKTsKLSAgICBKU1ZhbHVlKEpTQ2VsbCogcHRyKTsKLSAg
ICBKU1ZhbHVlKGNvbnN0IEpTQ2VsbCogcHRyKTsKKyAgICBKU1ZhbHVlKGNvbnN0IEpTQ2VsbCop
OworICAgIEpTVmFsdWUoY29uc3QgSlNDZWxsJik7CiAjaWYgVVNFKEJJR0lOVDMyKQogICAgIEpT
VmFsdWUoRW5jb2RlQXNCaWdJbnQzMlRhZywgaW50MzJfdCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oCmluZGV4IDc5MjY3
NjNjZDU2NWRlYmIxYTBiMWM5Y2YxN2ZkMzA5MjE0NDg2NmEuLjFjYmY3ODNkM2I2ODk0MjNiMjg2
Yzk1Y2Q4ZjBlOWFjYTFhN2EwNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaApAQCAtMjU5LDcgKzI1OSwxMyBAQCBpbmxpbmUgSlNW
YWx1ZSBKU1ZhbHVlOjpkZWNvZGUoRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEpTVmFsdWUpCiAgICAg
cmV0dXJuIHY7CiB9CiAKK2lubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGNvbnN0IEpTQ2VsbCYgY2Vs
bCkKKyAgICA6IEpTVmFsdWUgeyAmY2VsbCB9Cit7Cit9CisKICNpZiBVU0UoSlNWQUxVRTMyXzY0
KQorCiBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZSgpCiB7CiAgICAgdS5hc0JpdHMudGFnID0gRW1w
dHlWYWx1ZVRhZzsKQEAgLTI5NiwxNSArMzAyLDYgQEAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUo
SGFzaFRhYmxlRGVsZXRlZFZhbHVlVGFnKQogICAgIHUuYXNCaXRzLnBheWxvYWQgPSAwOwogfQog
Ci1pbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShKU0NlbGwqIHB0cikKLXsKLSAgICBpZiAocHRyKQot
ICAgICAgICB1LmFzQml0cy50YWcgPSBDZWxsVGFnOwotICAgIGVsc2UKLSAgICAgICAgdS5hc0Jp
dHMudGFnID0gRW1wdHlWYWx1ZVRhZzsKLSAgICB1LmFzQml0cy5wYXlsb2FkID0gcmVpbnRlcnBy
ZXRfY2FzdDxpbnQzMl90PihwdHIpOwotfQotCiBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShjb25z
dCBKU0NlbGwqIHB0cikKIHsKICAgICBpZiAocHRyKQpAQCAtNDU3LDExICs0NTQsNiBAQCBpbmxp
bmUgSlNWYWx1ZTo6SlNWYWx1ZShIYXNoVGFibGVEZWxldGVkVmFsdWVUYWcpCiAgICAgdS5hc0lu
dDY0ID0gVmFsdWVEZWxldGVkOwogfQogCi1pbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShKU0NlbGwq
IHB0cikKLXsKLSAgICB1LmFzSW50NjQgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocHRy
KTsKLX0KLQogaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoY29uc3QgSlNDZWxsKiBwdHIpCiB7CiAg
ICAgdS5hc0ludDY0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNvbnN0X2Nhc3Q8SlND
ZWxsKj4ocHRyKSk7CkBAIC02MTEsMTIgKzYwMywxNCBAQCBBTFdBWVNfSU5MSU5FIEpTQmlnSW50
KiBKU1ZhbHVlOjphc0hlYXBCaWdJbnQoKSBjb25zdAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQp
CiAKICNpZiBVU0UoQklHSU5UMzIpCisKIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEVuY29kZUFz
QmlnSW50MzJUYWcsIGludDMyX3QgdmFsdWUpCiB7CiAgICAgdWludDY0X3Qgc2hpZnRlZFZhbHVl
ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkpIDw8
IDE2OwogICAgIEFTU0VSVCghKHNoaWZ0ZWRWYWx1ZSAmIE51bWJlclRhZykpOwogICAgIHUuYXNJ
bnQ2NCA9IHNoaWZ0ZWRWYWx1ZSB8IEJpZ0ludDMyVGFnOwogfQorCiAjZW5kaWYgLy8gVVNFKEJJ
R0lOVDMyKQogCiBpbmxpbmUgaW50NjRfdCB0cnlDb252ZXJ0VG9JbnQ1Mihkb3VibGUgbnVtYmVy
KQpAQCAtNzIzLDExICs3MTcsMTMgQEAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNCaWdJbnQzMigp
IGNvbnN0CiB9CiAKICNpZiBVU0UoQklHSU5UMzIpCisKIGlubGluZSBpbnQzMl90IEpTVmFsdWU6
OmJpZ0ludDMyQXNJbnQzMigpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzQmlnSW50MzIoKSk7CiAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KHUuYXNJbnQ2NCA+PiAxNik7CiB9CisKICNl
bmRpZiAvLyBVU0UoQklHSU5UMzIpCiAKIGlubGluZSBib29sIEpTVmFsdWU6OmlzU3ltYm9sKCkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKaW5kZXggZWY2M2I1NDJjY2JmMTkwY2JiNTFlMWM0NWY1ZTlhODIz
NjM1ZDI3NC4uZTEyM2FiMTY5MmJhZGQyZGRkZmVhOGI0ZmQzOTAyNmM5MTk4NzMzYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKQEAgLTU2OSw3ICs1NjksNiBAQCBiaW5kaW5ncy9qcy9KU0lEQkluZGV4Q3VzdG9t
LmNwcAogYmluZGluZ3MvanMvSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAKIGJpbmRpbmdzL2pz
L0pTSURCUmVxdWVzdEN1c3RvbS5jcHAKIGJpbmRpbmdzL2pzL0pTSURCVHJhbnNhY3Rpb25DdXN0
b20uY3BwCi1iaW5kaW5ncy9qcy9KU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3QuY3BwCiBi
aW5kaW5ncy9qcy9KU0ltYWdlRGF0YUN1c3RvbS5jcHAKIGJpbmRpbmdzL2pzL0pTSW50ZXJzZWN0
aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCiBiaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVy
RW50cnlDdXN0b20uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggNmI0MmU1ZmFkMjk2MTY2OWY0MzMxMzgwM2ZkMzQxNzI2Y2Ey
MmZjOS4uYTBkNjg3NjFhMjQyYTZmZThjZTM0MjRmZWM4NzE1NzUxYzM3NzAwMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjk2
OSw4ICsyOTY5LDYgQEAKIAkJOTM4MkFBQjQwRDhDMzg2MTAwRjM1N0E2IC8qIE5vZGVXaXRoSW5k
ZXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzODJB
QUIxMEQ4QzM4NjEwMEYzNTdBNiAvKiBOb2RlV2l0aEluZGV4LmggKi87IH07CiAJCTkzODJERjU4
MTBBOEQ1QzkwMDkyNTY1MiAvKiBDb2xvclNwYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzgyREY1NzEwQThENUM5MDA5MjU2NTIgLyogQ29sb3JT
cGFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTkzODQzMEI0MjQ3NURFNDAwMDNGOTYxNyAvKiBEaWN0YXRpb25Db250ZXh0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Mzg0MzBCMjI0NzVERTNGMDAz
Rjk2MTcgLyogRGljdGF0aW9uQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTkzODQ5QzFGMjRCRTQwNEIwMDQ0OEQ1QSAvKiBFbXB0eVNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDkzODQ5QzFFMjRCRTQwNEEwMDQ0OEQ1QSAvKiBFbXB0eVNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaCAqLzsgfTsKLQkJOTM4NDlDMjMyNEJFREQ4OTAwNDQ4RDVBIC8qIEpTSURC
U2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTM4NDlDMjEyNEJFREQ4ODAwNDQ4RDVBIC8qIEpTSURCU2VyaWFs
aXphdGlvbkdsb2JhbE9iamVjdC5oICovOyB9OwogCQk5MzhFNjVGMTA5RjA5ODQwMDA4QTQ4RUMg
LyogSlNIVE1MRWxlbWVudFdyYXBwZXJGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzhFNjVGMDA5RjA5ODQwMDA4QTQ4RUMgLyogSlNIVE1M
RWxlbWVudFdyYXBwZXJGYWN0b3J5LmggKi87IH07CiAJCTkzOEU2NjYyMDlGMDlCODcwMDhBNDhF
QyAvKiBKU0hUTUxDYW52YXNFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5MzhFNjY2MTA5RjA5Qjg3MDA4QTQ4RUMgLyogSlNIVE1MQ2FudmFz
RWxlbWVudC5oICovOyB9OwogCQk5MzkxQTk5MTE2Mjc0NkNCMDAyOTczMzAgLyogU2Nyb2xsaW5n
Q29vcmRpbmF0b3JNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzOTFBOTkwMTYyNzQ2Q0IwMDI5NzMzMCAvKiBTY3JvbGxpbmdDb29yZGluYXRvck1h
Yy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0x
Mjc5OCw5ICsxMjc5Niw2IEBACiAJCTkzODJBQUIxMEQ4QzM4NjEwMEYzNTdBNiAvKiBOb2RlV2l0
aEluZGV4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vZGVXaXRoSW5kZXgu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM4MkRGNTcxMEE4RDVDOTAwOTI1NjUy
IC8qIENvbG9yU3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29sb3JT
cGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5Mzg0MzBCMjI0NzVERTNGMDAz
Rjk2MTcgLyogRGljdGF0aW9uQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEaWN0YXRpb25Db250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkz
ODQ5QzE2MjRCRTEyRTUwMDQ0OEQ1QSAvKiBKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3Qu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJREJTZXJpYWxpemF0
aW9uR2xvYmFsT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTM4NDlD
MUUyNEJFNDA0QTAwNDQ4RDVBIC8qIEVtcHR5U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFbXB0eVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTM4NDlDMjEyNEJFREQ4ODAwNDQ4RDVB
IC8qIEpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM4RTY1RjAwOUYwOTg0MDAwOEE0OEVDIC8qIEpTSFRNTEVs
ZW1lbnRXcmFwcGVyRmFjdG9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
SlNIVE1MRWxlbWVudFdyYXBwZXJGYWN0b3J5Lmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJD
b3JlL0pTSFRNTEVsZW1lbnRXcmFwcGVyRmFjdG9yeS5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJP
RFVDVFNfRElSOyB9OwogCQk5MzhFNjVGNjA5RjA5ODVEMDA4QTQ4RUMgLyogSlNIVE1MRWxlbWVu
dFdyYXBwZXJGYWN0b3J5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBKU0hUTUxFbGVtZW50V3JhcHBlckZhY3RvcnkuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9KU0hUTUxFbGVtZW50V3JhcHBlckZhY3RvcnkuY3BwOyBzb3VyY2VUcmVlID0gQlVJ
TFRfUFJPRFVDVFNfRElSOyB9OwogCQk5MzhFNjYyNTA5RjA5OTU2MDA4QTQ4RUMgLyogSFRNTENh
bnZhc0VsZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEhUTUxDYW52YXNFbGVtZW50
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5NDE2LDggKzI5NDExLDYgQEAK
IAkJCQlCNTY1NzZFNDE3REE1OTlGMDBBNTZCREMgLyogSlNFeGVjU3RhdGVJbnN0cnVtZW50YXRp
b24uaCAqLywKIAkJCQk5MzJGMUQ0NjI3MEVCRjRCMDAwQzI4MTMgLyogSlNGaWxlU3lzdGVtRGly
ZWN0b3J5SGFuZGxlSXRlcmF0b3IuY3BwICovLAogCQkJCTkzMkYxRDQ1MjcwRUJGNEIwMDBDMjgx
MyAvKiBKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvci5oICovLAotCQkJCTkzODQ5
QzE2MjRCRTEyRTUwMDQ0OEQ1QSAvKiBKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3QuY3Bw
ICovLAotCQkJCTkzODQ5QzIxMjRCRUREODgwMDQ0OEQ1QSAvKiBKU0lEQlNlcmlhbGl6YXRpb25H
bG9iYWxPYmplY3QuaCAqLywKIAkJCQlFM0M5QUVDOTIxMTMxNDc0MDA0MTlCOTIgLyogSlNNaWNy
b3Rhc2tDYWxsYmFjay5oICovLAogCQkJCTkzQjcwRDRGMDlFQjBDN0MwMDlEODQ2OCAvKiBKU1Bs
dWdpbkVsZW1lbnRGdW5jdGlvbnMuY3BwICovLAogCQkJCTkzQjcwRDUwMDlFQjBDN0MwMDlEODQ2
OCAvKiBKU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuaCAqLywKQEAgLTMyNTE0LDcgKzMyNTA3LDYg
QEAKIAkJCQk0RkFCNDg2NDE2NDNBNjZEMDBGNzBDMDcgLyogRWxlbWVudFJhcmVEYXRhLmNwcCAq
LywKIAkJCQk2MzdCN0FERTBFODc2N0I4MDBFMzIxOTQgLyogRWxlbWVudFJhcmVEYXRhLmggKi8s
CiAJCQkJRTRENThFQkExN0I4RjEyODAwQ0JEQ0E4IC8qIEVsZW1lbnRUcmF2ZXJzYWwuaCAqLywK
LQkJCQk5Mzg0OUMxRTI0QkU0MDRBMDA0NDhENUEgLyogRW1wdHlTY3JpcHRFeGVjdXRpb25Db250
ZXh0LmggKi8sCiAJCQkJMDVGRDY5REYxMjg0NUQ0MzAwQjJCRUIzIC8qIEVwb2NoVGltZVN0YW1w
LmggKi8sCiAJCQkJMkVDRjdBREUxMDE2MkI1ODAwNDI3REU3IC8qIEVycm9yRXZlbnQuY3BwICov
LAogCQkJCTJFQ0Y3QURGMTAxNjJCNTgwMDQyN0RFNyAvKiBFcnJvckV2ZW50LmggKi8sCkBAIC0z
NDUwNSw3ICszNDQ5Nyw2IEBACiAJCQkJQjI1NTk5QTUwRDAwRDhCQTAwQkI4MjVDIC8qIEVtcHR5
Q2xpZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE0REVERTcxRjlGRTkxRTAwNDdDNDBEIC8q
IEVtcHR5RnJhbWVMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNUJFMTkwMUQ1
NEY1RkIwMEREN0M2OCAvKiBFbXB0eUdhbWVwYWRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJOTM4NDlDMUYyNEJFNDA0QjAwNDQ4RDVBIC8qIEVtcHR5U2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0M3N0MzRDcxREVGODUwQTAwQTUwQkZBIC8qIEVuZGlu
Z1R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0MDNFNzg3MjM2M0I1OEMwMDA0NDU1MCAvKiBF
bnRlcktleUhpbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFEMkY4RTA0MjM0NDc1MTYwMDk5M0I2
OCAvKiBFbnRlclBpY3R1cmVJblBpY3R1cmVFdmVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNTYw
MSw3ICszNTU5Miw2IEBACiAJCQkJQzU4NUE2OEQxMUQ0RkIwODAwNEMzRTRCIC8qIEpTSURCS2V5
UmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1ODVBNjhGMTFENEZCMDgwMDRDM0U0QiAvKiBK
U0lEQk9iamVjdFN0b3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTg1QTY5MTExRDRGQjA4MDA0
QzNFNEIgLyogSlNJREJSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKLQkJCQk5Mzg0OUMyMzI0QkVE
RDg5MDA0NDhENUEgLyogSlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCNjU2NjI3MDEyMEIxMjI3MDA2RUE4NUMgLyogSlNJREJUcmFuc2FjdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODM4RUY1M0MxREMxNEE3QzAwOEYwQzM5IC8qIEpTSURCVHJh
bnNhY3Rpb25Nb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyNjkyMzk5NjE1MDVFMUFBMDA5RTU3
RkMgLyogSlNJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAppbmRleCAx
Y2EwZDY1NzMyMTBiZjFhODBkODkyYWEyYjcxOGU2NWFlYzYwNDZlLi43ZWU4MGM2YWNiYzMyZjg3
YjEzMTYzOTFjZjNkY2M0ODc1YTVlNmZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcApAQCAtMjYsNyArMjYsNiBAQAogICovCiAK
ICNpbmNsdWRlICJjb25maWcuaCIKLQogI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIK
IAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKQEAgLTQzLDcgKzQyLDYgQEAKICNpbmNsdWRl
ICJKU0RPTUNvbnZlcnROdWxsYWJsZS5oIgogI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxp
bmcuaCIKICNpbmNsdWRlICJKU0ZpbGUuaCIKLSNpbmNsdWRlICJKU0lEQlNlcmlhbGl6YXRpb25H
bG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVBv
cnQuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCkBAIC02MCw2ICs1OCw3
IEBACiAjaW5jbHVkZSA8d3RmL3RocmVhZHMvQmluYXJ5U2VtYXBob3JlLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKKwogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogc3RhdGljIGJvb2wgZ2V0KEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1ZhbHVlIG9iamVjdCwgY29uc3Qg
U3RyaW5nJiBrZXlQYXRoRWxlbWVudCwgSlNWYWx1ZSYgcmVzdWx0KQpAQCAtNTYwLDE0ICs1NTks
MTMgQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJUKCFtX2dsb2JhbE9iamVjdCk7CiAgICAgICAg
IG1fdm0gPSBKU0M6OlZNOjpjcmVhdGUoKTsKICAgICAgICAgbV92bS0+aGVhcC5hY3F1aXJlQWNj
ZXNzKCk7Ci0gICAgICAgIEpTVk1DbGllbnREYXRhOjppbml0Tm9ybWFsV29ybGQobV92bS5nZXQo
KSwgV29ya2VyVGhyZWFkVHlwZTo6V29ya2xldCk7CiAKICAgICAgICAgSlNDOjpKU0xvY2tIb2xk
ZXIgbG9ja2VyKG1fdm0uZ2V0KCkpOwotICAgICAgICBtX2dsb2JhbE9iamVjdC5zZXQoKm1fdm0s
IEpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdDo6Y3JlYXRlKCptX3ZtLCBKU0lEQlNlcmlh
bGl6YXRpb25HbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSgqbV92bSwgSlNDOjpqc051bGwo
KSksIG5vcm1hbFdvcmxkKCptX3ZtKSkpOworICAgICAgICBtX2dsb2JhbE9iamVjdC5zZXQoKm1f
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3Q6OmNyZWF0ZSgqbV92bSwgSlNDOjpKU0dsb2JhbE9iamVj
dDo6Y3JlYXRlU3RydWN0dXJlKCptX3ZtLCBKU0M6OmpzTnVsbCgpKSkpOwogICAgIH0KIAogICAg
IFJlZlB0cjxKU0M6OlZNPiBtX3ZtOwotICAgIEpTQzo6U3Ryb25nPEpTSURCU2VyaWFsaXphdGlv
bkdsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmplY3Q7CisgICAgSlNDOjpTdHJvbmc8SlNDOjpKU0ds
b2JhbE9iamVjdD4gbV9nbG9iYWxPYmplY3Q7CiAgICAgVGhyZWFkJiBtX3RocmVhZDsKIH07CiAK
QEAgLTU4NywxMSArNTg1LDExIEBAIHZvaWQgY2FsbE9uSURCU2VyaWFsaXphdGlvblRocmVhZEFu
ZFdhaXQoRnVuY3Rpb248dm9pZChKU0M6OkpTR2xvYmFsT2JqZWN0Jik+JiYKICAgICB9KTsKIAog
ICAgIEJpbmFyeVNlbWFwaG9yZSBzZW1hcGhvcmU7Ci0gICAgYXV0byBuZXdGdW50aW9uID0gWyZz
ZW1hcGhvcmUsIGZ1bmN0aW9uID0gV1RGTW92ZShmdW5jdGlvbildKEpTQzo6SlNHbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCkgeworICAgIGF1dG8gbmV3RnVuY3Rpb24gPSBbJnNlbWFwaG9yZSwg
ZnVuY3Rpb24gPSBXVEZNb3ZlKGZ1bmN0aW9uKV0oSlNDOjpKU0dsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0KSB7CiAgICAgICAgIGZ1bmN0aW9uKGdsb2JhbE9iamVjdCk7CiAgICAgICAgIHNlbWFw
aG9yZS5zaWduYWwoKTsKICAgICB9OwotICAgIHF1ZXVlLT5hcHBlbmQobWFrZVVuaXF1ZTxGdW5j
dGlvbjx2b2lkKEpTQzo6SlNHbG9iYWxPYmplY3QmKT4+KFdURk1vdmUobmV3RnVudGlvbikpKTsK
KyAgICBxdWV1ZS0+YXBwZW5kKG1ha2VVbmlxdWU8RnVuY3Rpb248dm9pZChKU0M6OkpTR2xvYmFs
T2JqZWN0Jik+PihXVEZNb3ZlKG5ld0Z1bmN0aW9uKSkpOwogICAgIHNlbWFwaG9yZS53YWl0KCk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFs
T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0
LmNwcAppbmRleCBiMjYyNmZlYjRhMDUzNzM4ZWE3ZGVkMTgyNzc4NjVjNGY4MTM0YjU4Li40YjEz
ZGY3YzBlMjYzMjk1Y2VmMTVhZjBmZWM3ZDIzZTM4ZGQ0ZGY3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCkBAIC0zNyw3ICszNyw2IEBA
CiAjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKICNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIK
ICNpbmNsdWRlICJKU0ZldGNoUmVzcG9uc2UuaCIKLSNpbmNsdWRlICJKU0lEQlNlcmlhbGl6YXRp
b25HbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU01lZGlhU3RyZWFtLmgiCiAjaW5jbHVkZSAi
SlNNZWRpYVN0cmVhbVRyYWNrLmgiCiAjaW5jbHVkZSAiSlNSVENJY2VDYW5kaWRhdGUuaCIKQEAg
LTcxLDYgKzcwLDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9XZWFrR0NNYXBJbmxpbmVz
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKKwogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogSlND
X0RFQ0xBUkVfSE9TVF9GVU5DVElPTihtYWtlVGhpc1R5cGVFcnJvckZvckJ1aWx0aW5zKTsKQEAg
LTI3NSw4ICsyNzUsNiBAQCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBKU0RPTUdsb2JhbE9iamVj
dDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBqc0Nhc3Q8
Y29uc3QgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UqPih0aGlzKS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOwogICAgIGlmIChpbmhlcml0czxKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U+KHZtKCkp
KQogICAgICAgICByZXR1cm4ganNDYXN0PGNvbnN0IEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZSo+
KHRoaXMpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgaWYgKGluaGVyaXRzPEpTSURC
U2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdD4odm0oKSkpCi0gICAgICAgIHJldHVybiBqc0Nhc3Q8
Y29uc3QgSlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0Kj4odGhpcyktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKIAogICAgIGRhdGFMb2coIlVuZXhwZWN0ZWQgZ2xvYmFsIG9iamVjdDog
IiwgSlNWYWx1ZSh0aGlzKSwgIlxuIik7CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKQEAgLTUwMSw2ICs0OTksNyBAQCBKU0M6OkpTUHJvbWlzZSogSlNET01HbG9iYWxPYmplY3Q6
Omluc3RhbnRpYXRlU3RyZWFtaW5nKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsbwogICAgIEFTU0VS
VChzb3VyY2UpOwogICAgIHJldHVybiBoYW5kbGVSZXNwb25zZU9uU3RyZWFtaW5nQWN0aW9uKGds
b2JhbE9iamVjdCwgc291cmNlLCBKU0M6Oldhc206OkNvbXBpbGVyTW9kZTo6RnVsbENvbXBpbGUs
IGltcG9ydE9iamVjdCk7CiB9CisKICNlbmRpZgogCiBzdGF0aWMgU2NyaXB0TW9kdWxlTG9hZGVy
KiBzY3JpcHRNb2R1bGVMb2FkZXIoSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKQEAg
LTUxOSw4ICs1MTgsNiBAQCBzdGF0aWMgU2NyaXB0TW9kdWxlTG9hZGVyKiBzY3JpcHRNb2R1bGVM
b2FkZXIoSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICAgICAgcmV0dXJuICZq
c0Nhc3Q8Y29uc3QgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UqPihnbG9iYWxPYmplY3QpLT53cmFw
cGVkKCkubW9kdWxlTG9hZGVyKCk7CiAgICAgaWYgKGdsb2JhbE9iamVjdC0+aW5oZXJpdHM8SlNX
b3JrbGV0R2xvYmFsU2NvcGVCYXNlPih2bSkpCiAgICAgICAgIHJldHVybiAmanNDYXN0PGNvbnN0
IEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZSo+KGdsb2JhbE9iamVjdCktPndyYXBwZWQoKS5tb2R1
bGVMb2FkZXIoKTsKLSAgICBpZiAoZ2xvYmFsT2JqZWN0LT5pbmhlcml0czxKU0lEQlNlcmlhbGl6
YXRpb25HbG9iYWxPYmplY3Q+KHZtKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBk
YXRhTG9nKCJVbmV4cGVjdGVkIGdsb2JhbCBvYmplY3Q6ICIsIEpTVmFsdWUoZ2xvYmFsT2JqZWN0
KSwgIlxuIik7CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVj
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlNlcmlhbGl6YXRpb25HbG9i
YWxPYmplY3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTRmNmQzZDUzNDZk
NmMyODRlZTJjOGE3ODU0NGM2MWM4MGEzOTcwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCU2VyaWFs
aXphdGlvbkdsb2JhbE9iamVjdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0Lmgi
Ci0KLSNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQotY29uc3QgQ2xhc3NJbmZvIEpTSURCU2VyaWFs
aXphdGlvbkdsb2JhbE9iamVjdDo6c19pbmZvID0geyAiSlNJREJTZXJpYWxpemF0aW9uR2xvYmFs
T2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3QpIH07Ci0KLWlubGluZSBKU0lEQlNl
cmlhbGl6YXRpb25HbG9iYWxPYmplY3Q6OkpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdChW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWY8RE9NV3JhcHBlcldvcmxkPiYmIGltcGwp
Ci0gICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIFdURk1vdmUoaW1wbCkpCi0gICAgLCBtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQoRW1wdHlTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpjcmVhdGUodm0p
KQotewotfQotCi1KU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3QqIEpTSURCU2VyaWFsaXph
dGlvbkdsb2JhbE9iamVjdDo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJl
ZjxET01XcmFwcGVyV29ybGQ+JiYgaW1wbCkKLXsKLSAgICBKU0lEQlNlcmlhbGl6YXRpb25HbG9i
YWxPYmplY3QqIHB0ciA9ICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0lEQlNlcmlhbGl6
YXRpb25HbG9iYWxPYmplY3Q+KHZtKSkgSlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0KHZt
LCBzdHJ1Y3R1cmUsIFdURk1vdmUoaW1wbCkpOwotICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0p
OwotICAgIHJldHVybiBwdHI7Ci19Ci0KLXZvaWQgSlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2Jq
ZWN0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0pOwotfQotCi1HQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTSURCU2VyaWFsaXphdGlvbkdsb2Jh
bE9iamVjdDo6c3Vic3BhY2VGb3JJbXBsKFZNJiB2bSkKLXsKLSAgICByZXR1cm4gJnN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmlkYlNlcmlhbGl6YXRpb25TcGFj
ZSgpOwotfQotCi12b2lkIEpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdDo6ZGVzdHJveShK
U0NlbGwqIGNlbGwpCi17Ci0gICAgc3RhdGljX2Nhc3Q8SlNJREJTZXJpYWxpemF0aW9uR2xvYmFs
T2JqZWN0Kj4oY2VsbCktPkpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdDo6fkpTSURCU2Vy
aWFsaXphdGlvbkdsb2JhbE9iamVjdCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCU2VyaWFsaXphdGlv
bkdsb2JhbE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJTZXJpYWxp
emF0aW9uR2xvYmFsT2JqZWN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiMTBh
N2Q1N2NjNzU2YzJiMzU4MDM4MjQzNDk5MjQ5ZThkNWMzMWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
REJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkVtcHR5U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgot
I2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgSlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0IGZpbmFsIDogcHVibGljIEpTRE9N
R2xvYmFsT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB1c2luZyBCYXNlID0gSlNET01HbG9iYWxPYmpl
Y3Q7Ci0gICAgc3RhdGljIEpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdCogY3JlYXRlKEpT
Qzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSosIFJlZjxET01XcmFwcGVyV29ybGQ+JiYpOwotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4KLSAgICBzdGF0aWMg
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQotICAg
IHsKLSAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNv
bmN1cnJlbnRseSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4g
c3Vic3BhY2VGb3JJbXBsKHZtKTsKLSAgICB9Ci0gICAgc3RhdGljIEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYpOwotCi0gICAgREVDTEFSRV9JTkZP
OwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3Ry
dWN0dXJlOjpjcmVhdGUodm0sIDAsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Okdsb2Jh
bE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0gICAgc3RhdGlj
IHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwotCi0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5wdHIoKTsgfQotCi1wcml2YXRlOgotICAgIEpTSURCU2VyaWFsaXphdGlvbkds
b2JhbE9iamVjdChKU0M6OlZNJiwgSlNDOjpTdHJ1Y3R1cmUqLCBSZWY8RE9NV3JhcHBlcldvcmxk
PiYmKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKLQotICAgIFJlZjxFbXB0
eVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggY2U5OWZkNWYzMjE0YzQwYTU4
NjA1MTA1MzFjYzExYmYyOWU4NmU0MC4uODkwNWZjMTJmMjZkMWRlYjQxMTExZmI2YjNkNDZhZjFm
MDg4YTQwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuY3BwCkBAIC00OSw3ICs0OSw2IEBACiAjaW5jbHVkZSAiSlNFeGVjU3Rh
dGUuaCIKICNpbmNsdWRlICJKU0ZpbGUuaCIKICNpbmNsdWRlICJKU0ZpbGVMaXN0LmgiCi0jaW5j
bHVkZSAiSlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNJbWFn
ZUJpdG1hcC5oIgogI2luY2x1ZGUgIkpTSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiSlNNZXNzYWdl
UG9ydC5oIgpAQCAtNTM2LDEzICs1MzUsMTggQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cmlu
Z0RhdGFJczhCaXRGbGFnID0gMHg4MDAwMDAwMDsKICAqICAgICAgfCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2VDR0NvbG9yU3BhY2VQcm9wZXJ0eUxpc3RUYWcgPHByb3BlcnR5TGlzdERhdGFMZW5ndGg6
dWludDMyX3Q+IDxwcm9wZXJ0eUxpc3REYXRhOnVpbnQ4X3Q+e3Byb3BlcnR5TGlzdERhdGFMZW5n
dGh9CiAgKi8KIAotdXNpbmcgRGVzZXJpYWxpemF0aW9uUmVzdWx0ID0gc3RkOjpwYWlyPEpTQzo6
SlNWYWx1ZSwgU2VyaWFsaXphdGlvblJldHVybkNvZGU+OworLy8gVGhlc2UgaGVscGVyIGZ1bmN0
aW9ucyBhbGxvdyB1cyB0byB1c2UgcmVmZXJlbmNlcyBpbiB0aGlzIGZpbGUgZm9yIGFyZ3VtZW50
cyB0byBmdW5jdGlvbnMgdGhhdCBhcmUgcG9pbnRlcnMsIGJ1dCB3aWxsIGJlIHJlZmVyZW5jZXMg
c29vbi4KKy8vIFdlIGNhbiBtb3ZlIHRoZXNlIHRvIGhlYWRlcnMgbGF0ZXIgaW4gdGhlIHRyYW5z
aXRpb24gaWYgbmVlZGVkLCBhbmQgZXZlbnR1YWxseSBjYW4gcmVtb3ZlIHRoZXNlIG9uY2UgdGhl
IGNoYW5nZXMgYXJlIGNvbXBsZXRlLgorc3RhdGljIGF1dG8gZXhlY3V0aW9uQ29udGV4dChKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KSB7IHJldHVybiBleGVjdXRpb25Db250ZXh0KCZn
bG9iYWxPYmplY3QpOyB9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBBcmd1bWVudFR5cGU+IGF1dG8gdG9K
UyhKU0RPTUdsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgQXJndW1lbnRUeXBlJiYgYXJndW1lbnQpIHsgcmV0dXJuIHRvSlMo
JmxleGljYWxHbG9iYWxPYmplY3QsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVu
dFR5cGU+KGFyZ3VtZW50KSk7IH0KK3RlbXBsYXRlPHR5cGVuYW1lIEFyZ3VtZW50VHlwZT4gYXV0
byB0b0pTTmV3bHlDcmVhdGVkKEpTRE9NR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBBcmd1bWVudFR5cGUmJiBhcmd1bWVu
dCkgeyByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgJmdsb2Jh
bE9iamVjdCwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50VHlwZT4oYXJndW1lbnQpKTsgfQorCit1c2lu
ZyBEZXNlcmlhbGl6YXRpb25SZXN1bHQgPSBzdGQ6OnBhaXI8SlNWYWx1ZSwgU2VyaWFsaXphdGlv
blJldHVybkNvZGU+OwogCiBjbGFzcyBDbG9uZUJhc2UgewogcHJvdGVjdGVkOgotICAgIENsb25l
QmFzZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCkKKyAgICBDbG9uZUJhc2Uo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QpCiAgICAgICAgIDogbV9sZXhpY2Fs
R2xvYmFsT2JqZWN0KGxleGljYWxHbG9iYWxPYmplY3QpCi0gICAgICAgICwgbV9mYWlsZWQoZmFs
c2UpCiAgICAgewogICAgIH0KIApAQCAtNTUxLDI0ICs1NTUsMzAgQEAgcHJvdGVjdGVkOgogICAg
ICAgICBtX2ZhaWxlZCA9IHRydWU7CiAgICAgfQogCi0gICAgSlNHbG9iYWxPYmplY3QqIG1fbGV4
aWNhbEdsb2JhbE9iamVjdDsKLSAgICBib29sIG1fZmFpbGVkOwotICAgIE1hcmtlZEFyZ3VtZW50
QnVmZmVyIG1fZ2NCdWZmZXI7Ci19OworICAgIFZNJiB2bSgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9sZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7CisgICAgfQogCi0jaWYgRU5BQkxF
KFdFQl9DUllQVE8pCi1zdGF0aWMgYm9vbCB3cmFwQ3J5cHRvS2V5KEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgVmVjdG9yPHVp
bnQ4X3Q+JiB3cmFwcGVkS2V5KQotewotICAgIGF1dG8gY29udGV4dCA9IGV4ZWN1dGlvbkNvbnRl
eHQobGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIGNvbnRleHQgJiYgY29udGV4dC0+
d3JhcENyeXB0b0tleShrZXksIHdyYXBwZWRLZXkpOwotfQorICAgIGJvb2wgaXNET01HbG9iYWxP
YmplY3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGV4aWNhbEdsb2JhbE9iamVj
dC5pbmhlcml0czxKU0RPTUdsb2JhbE9iamVjdD4odm0oKSk7CisgICAgfQogCi1zdGF0aWMgYm9v
bCB1bndyYXBDcnlwdG9LZXkoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgd3JhcHBlZEtleSwgVmVjdG9yPHVpbnQ4X3Q+JiBrZXkpCi17
Ci0gICAgYXV0byBjb250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dChsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKLSAgICByZXR1cm4gY29udGV4dCAmJiBjb250ZXh0LT51bndyYXBDcnlwdG9LZXkod3JhcHBl
ZEtleSwga2V5KTsKLX0KLSNlbmRpZgorICAgIEpTRE9NR2xvYmFsT2JqZWN0JiBsZXhpY2FsRE9N
R2xvYmFsT2JqZWN0KCkKKyAgICB7CisgICAgICAgIHJldHVybiAqanNDYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4oJm1fbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgfQorCisgICAgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogZXhlY3V0aW9uQ29udGV4dCgpCisgICAgeworICAgICAgICByZXR1cm4g
aXNET01HbG9iYWxPYmplY3QoKSA/IFdlYkNvcmU6OmV4ZWN1dGlvbkNvbnRleHQobGV4aWNhbERP
TUdsb2JhbE9iamVjdCgpKSA6IG51bGxwdHI7CisgICAgfQorCisgICAgSlNHbG9iYWxPYmplY3Qm
IG1fbGV4aWNhbEdsb2JhbE9iamVjdDsKKyAgICBib29sIG1fZmFpbGVkIHsgZmFsc2UgfTsKKyAg
ICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBtX2djQnVmZmVyOworfTsKIAogI2lmIEFTU1VNRV9MSVRU
TEVfRU5ESUFOCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIHZvaWQgd3JpdGVMaXR0bGVF
bmRpYW4oVmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIsIFQgdmFsdWUpCkBAIC02MTcsNyArNjI3LDcg
QEAgdGVtcGxhdGUgPD4gYm9vbCB3cml0ZUxpdHRsZUVuZGlhbjx1aW50OF90PihWZWN0b3I8dWlu
dDhfdD4mIGJ1ZmZlciwgY29uc3QgdWludDgKIAogY2xhc3MgQ2xvbmVTZXJpYWxpemVyIDogQ2xv
bmVCYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgU2VyaWFsaXphdGlvblJldHVybkNvZGUgc2Vy
aWFsaXplKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywgVmVjdG9yPFJlZlB0
cjxKU0M6OkFycmF5QnVmZmVyPj4mIGFycmF5QnVmZmVycywgY29uc3QgVmVjdG9yPFJlZlB0cjxJ
bWFnZUJpdG1hcD4+JiBpbWFnZUJpdG1hcHMsCisgICAgc3RhdGljIFNlcmlhbGl6YXRpb25SZXR1
cm5Db2RlIHNlcmlhbGl6ZShKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+JiBtZXNzYWdlUG9ydHMsIFZl
Y3RvcjxSZWZQdHI8QXJyYXlCdWZmZXI+PiYgYXJyYXlCdWZmZXJzLCBjb25zdCBWZWN0b3I8UmVm
UHRyPEltYWdlQml0bWFwPj4mIGltYWdlQml0bWFwcywKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NB
TlZBU19JTl9XT1JLRVJTKQogICAgICAgICAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxPZmZzY3Jl
ZW5DYW52YXM+PiYgb2Zmc2NyZWVuQ2FudmFzZXMsCiAjZW5kaWYKQEAgLTY2NCw3ICs2NzQsNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHR5cGVkZWYgSGFzaE1hcDxKU09iamVjdCosIHVpbnQz
Ml90PiBPYmplY3RQb29sOwogCi0gICAgQ2xvbmVTZXJpYWxpemVyKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQ
b3J0cywgVmVjdG9yPFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPj4mIGFycmF5QnVmZmVycywgY29u
c3QgVmVjdG9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+JiBpbWFnZUJpdG1hcHMsCisgICAgQ2xvbmVT
ZXJpYWxpemVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBWZWN0b3I8UmVm
UHRyPE1lc3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZl
cj4+JiBhcnJheUJ1ZmZlcnMsIGNvbnN0IFZlY3RvcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiYgaW1h
Z2VCaXRtYXBzLAogI2lmIEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTX0lOX1dPUktFUlMpCiAgICAg
ICAgICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPE9mZnNjcmVlbkNhbnZhcz4+JiBvZmZzY3JlZW5D
YW52YXNlcywKICNlbmRpZgpAQCAtNjc2LDE1ICs2ODYsMTUgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIFdhc21NZW1vcnlIYW5kbGVBcnJheSYgd2FzbU1lbW9yeUhhbmRsZXMsCiAjZW5kaWYKICAg
ICAgICAgVmVjdG9yPEJsb2JVUkxIYW5kbGU+JiBibG9iSGFuZGxlcywgVmVjdG9yPHVpbnQ4X3Q+
JiBvdXQsIFNlcmlhbGl6YXRpb25Db250ZXh0IGNvbnRleHQsIEFycmF5QnVmZmVyQ29udGVudHNB
cnJheSYgc2hhcmVkQnVmZmVycykKLSAgICAgICAgOiBDbG9uZUJhc2UobGV4aWNhbEdsb2JhbE9i
amVjdCkKLSAgICAgICAgLCBtX2J1ZmZlcihvdXQpCi0gICAgICAgICwgbV9ibG9iSGFuZGxlcyhi
bG9iSGFuZGxlcykKLSAgICAgICAgLCBtX2VtcHR5SWRlbnRpZmllcihJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCksIGVtcHR5U3RyaW5nKCkpKQotICAgICAg
ICAsIG1fY29udGV4dChjb250ZXh0KQotICAgICAgICAsIG1fc2hhcmVkQnVmZmVycyhzaGFyZWRC
dWZmZXJzKQorICAgICAgICAgICAgOiBDbG9uZUJhc2UobGV4aWNhbEdsb2JhbE9iamVjdCkKKyAg
ICAgICAgICAgICwgbV9idWZmZXIob3V0KQorICAgICAgICAgICAgLCBtX2Jsb2JIYW5kbGVzKGJs
b2JIYW5kbGVzKQorICAgICAgICAgICAgLCBtX2VtcHR5SWRlbnRpZmllcihJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKGxleGljYWxHbG9iYWxPYmplY3Qudm0oKSwgZW1wdHlTdHJpbmcoKSkpCisgICAg
ICAgICAgICAsIG1fY29udGV4dChjb250ZXh0KQorICAgICAgICAgICAgLCBtX3NoYXJlZEJ1ZmZl
cnMoc2hhcmVkQnVmZmVycykKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgICAgICwgbV93
YXNtTW9kdWxlcyh3YXNtTW9kdWxlcykKLSAgICAgICAgLCBtX3dhc21NZW1vcnlIYW5kbGVzKHdh
c21NZW1vcnlIYW5kbGVzKQorICAgICAgICAgICAgLCBtX3dhc21Nb2R1bGVzKHdhc21Nb2R1bGVz
KQorICAgICAgICAgICAgLCBtX3dhc21NZW1vcnlIYW5kbGVzKHdhc21NZW1vcnlIYW5kbGVzKQog
I2VuZGlmCiAgICAgewogICAgICAgICB3cml0ZShDdXJyZW50VmVyc2lvbik7CkBAIC02OTksNTcg
KzcwOSwxNyBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgfQogCi0gICAgdGVtcGxhdGUgPGNsYXNz
IFQ+Ci0gICAgdm9pZCBmaWxsVHJhbnNmZXJNYXAoY29uc3QgVmVjdG9yPFJlZlB0cjxUPj4mIGlu
cHV0LCBPYmplY3RQb29sJiByZXN1bHQpCi0gICAgewotICAgICAgICBpZiAoaW5wdXQuaXNFbXB0
eSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obV9sZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbnB1dC5zaXplKCk7IGkrKykg
ewotICAgICAgICAgICAgSlNDOjpKU1ZhbHVlIHZhbHVlID0gdG9KUyhtX2xleGljYWxHbG9iYWxP
YmplY3QsIGdsb2JhbE9iamVjdCwgaW5wdXRbaV0uZ2V0KCkpOwotICAgICAgICAgICAgSlNDOjpK
U09iamVjdCogb2JqID0gdmFsdWUuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgICBpZiAob2JqICYm
ICFyZXN1bHQuY29udGFpbnMob2JqKSkKLSAgICAgICAgICAgICAgICByZXN1bHQuYWRkKG9iaiwg
aSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gICAgdm9pZCBm
aWxsVHJhbnNmZXJNYXAoY29uc3QgVmVjdG9yPFJlZjxUPj4mIGlucHV0LCBPYmplY3RQb29sJiBy
ZXN1bHQpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4gdm9pZCBmaWxsVHJhbnNm
ZXJNYXAoY29uc3QgVmVjdG9yVHlwZSYgaW5wdXQsIE9iamVjdFBvb2wmIHJlc3VsdCkKICAgICB7
Ci0gICAgICAgIGlmIChpbnB1dC5pc0VtcHR5KCkpCisgICAgICAgIGlmICghaXNET01HbG9iYWxP
YmplY3QoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KG1fbGV4aWNhbEdsb2Jh
bE9iamVjdCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5wdXQuc2l6ZSgpOyBp
KyspIHsKLSAgICAgICAgICAgIEpTQzo6SlNWYWx1ZSB2YWx1ZSA9IHRvSlMobV9sZXhpY2FsR2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGlucHV0W2ldLmdldCgpKTsKLSAgICAgICAgICAgIEpT
Qzo6SlNPYmplY3QqIG9iaiA9IHZhbHVlLmdldE9iamVjdCgpOwotICAgICAgICAgICAgaWYgKG9i
aiAmJiAhcmVzdWx0LmNvbnRhaW5zKG9iaikpCi0gICAgICAgICAgICAgICAgcmVzdWx0LmFkZChv
YmosIGkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IGlucHV0LnNpemUoKTsg
aSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgaWYgKGF1dG8qIG9iamVjdCA9IHRvSlMobGV4
aWNhbERPTUdsb2JhbE9iamVjdCgpLCBsZXhpY2FsRE9NR2xvYmFsT2JqZWN0KCksIGlucHV0W2ld
LmdldCgpKS5nZXRPYmplY3QoKTsgb2JqZWN0ICYmICFyZXN1bHQuY29udGFpbnMob2JqZWN0KSkK
KyAgICAgICAgICAgICAgICByZXN1bHQuYWRkKG9iamVjdCwgaSk7CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBzZXJpYWxpemUoSlNWYWx1ZSBpbik7Ci0K
LSAgICBib29sIGlzQXJyYXkoVk0mIHZtLCBKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
aWYgKCF2YWx1ZS5pc09iamVjdCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOwotICAgICAgICByZXR1cm4gb2Jq
ZWN0LT5pbmhlcml0czxKU0FycmF5Pih2bSk7Ci0gICAgfQotCi0gICAgYm9vbCBpc01hcChWTSYg
dm0sIEpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBh
c09iamVjdCh2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBvYmplY3QtPmluaGVyaXRzPEpTTWFwPih2
bSk7Ci0gICAgfQotICAgIGJvb2wgaXNTZXQoVk0mIHZtLCBKU1ZhbHVlIHZhbHVlKQotICAgIHsK
LSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOwotICAgICAgICBy
ZXR1cm4gb2JqZWN0LT5pbmhlcml0czxKU1NldD4odm0pOwotICAgIH0KKyAgICBTZXJpYWxpemF0
aW9uUmV0dXJuQ29kZSBzZXJpYWxpemUoSlNWYWx1ZSk7CiAKICAgICBib29sIGNoZWNrRm9yRHVw
bGljYXRlKEpTT2JqZWN0KiBvYmplY3QpCiAgICAgewpAQCAtODIzLDExICs3OTMsMTEgQEAgcHJp
dmF0ZToKICAgICAgICAgd3JpdGUoVGVybWluYXRvclRhZyk7CiAgICAgfQogCi0gICAgSlNWYWx1
ZSBnZXRQcm9wZXJ0eShWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSkKKyAgICBKU1ZhbHVlIGdldFByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3Qs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKICAgICB7CiAgICAgICAgIFByb3BlcnR5
U2xvdCBzbG90KG9iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldCk7
Ci0gICAgICAgIGlmIChvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlTbG90
KG9iamVjdCwgbV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQotICAg
ICAgICAgICAgcmV0dXJuIHNsb3QuZ2V0VmFsdWUobV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUpOworICAgICAgICBpZiAob2JqZWN0LT5tZXRob2RUYWJsZSh2bSgpKS0+Z2V0T3du
UHJvcGVydHlTbG90KG9iamVjdCwgJm1fbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
LCBzbG90KSkKKyAgICAgICAgICAgIHJldHVybiBzbG90LmdldFZhbHVlKCZtX2xleGljYWxHbG9i
YWxPYmplY3QsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAg
fQogCkBAIC05NTIsNTEgKzkyMiw0NyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogCi0g
ICAgSlNDOjpKU1ZhbHVlIHRvSlNBcnJheUJ1ZmZlcihBcnJheUJ1ZmZlciYgYXJyYXlCdWZmZXIp
CisgICAgSlNWYWx1ZSB0b0pTQXJyYXlCdWZmZXIoQXJyYXlCdWZmZXImIGFycmF5QnVmZmVyKQog
ICAgIHsKLSAgICAgICAgYXV0byYgdm0gPSBtX2xleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0g
ICAgICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IG1fbGV4aWNhbEdsb2JhbE9iamVjdDsKLSAgICAg
ICAgaWYgKGdsb2JhbE9iamVjdC0+aW5oZXJpdHM8SlNET01HbG9iYWxPYmplY3Q+KHZtKSkKLSAg
ICAgICAgICAgIHJldHVybiB0b0pTKGdsb2JhbE9iamVjdCwganNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oZ2xvYmFsT2JqZWN0KSwgJmFycmF5QnVmZmVyKTsKLQorICAgICAgICBpZiAoaXNET01H
bG9iYWxPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiB0b0pTKGxleGljYWxET01HbG9iYWxP
YmplY3QoKSwgbGV4aWNhbERPTUdsb2JhbE9iamVjdCgpLCAmYXJyYXlCdWZmZXIpOwogICAgICAg
ICBpZiAoYXV0byogYnVmZmVyID0gYXJyYXlCdWZmZXIubV93cmFwcGVyLmdldCgpKQogICAgICAg
ICAgICAgcmV0dXJuIGJ1ZmZlcjsKLQotICAgICAgICByZXR1cm4gSlNDOjpKU0FycmF5QnVmZmVy
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoYXJyYXlCdWZm
ZXIuc2hhcmluZ01vZGUoKSksICZhcnJheUJ1ZmZlcik7CisgICAgICAgIGF1dG8qIHN0cnVjdHVy
ZSA9IG1fbGV4aWNhbEdsb2JhbE9iamVjdC5hcnJheUJ1ZmZlclN0cnVjdHVyZShhcnJheUJ1ZmZl
ci5zaGFyaW5nTW9kZSgpKTsKKyAgICAgICAgcmV0dXJuIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSh2
bSgpLCBzdHJ1Y3R1cmUsICZhcnJheUJ1ZmZlcik7CiAgICAgfQogCiAgICAgYm9vbCBkdW1wQXJy
YXlCdWZmZXJWaWV3KEpTT2JqZWN0KiBvYmosIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlJiBjb2Rl
KQogICAgIHsKLSAgICAgICAgVk0mIHZtID0gbV9sZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgICAgICB3cml0ZShBcnJheUJ1ZmZlclZpZXdUYWcpOwotICAgICAgICBpZiAob2JqLT5pbmhl
cml0czxKU0RhdGFWaWV3Pih2bSkpCisgICAgICAgIGlmIChvYmotPmluaGVyaXRzPEpTRGF0YVZp
ZXc+KHZtKCkpKQogICAgICAgICAgICAgd3JpdGUoRGF0YVZpZXdUYWcpOwotICAgICAgICBlbHNl
IGlmIChvYmotPmluaGVyaXRzPEpTVWludDhDbGFtcGVkQXJyYXk+KHZtKSkKKyAgICAgICAgZWxz
ZSBpZiAob2JqLT5pbmhlcml0czxKU1VpbnQ4Q2xhbXBlZEFycmF5Pih2bSgpKSkKICAgICAgICAg
ICAgIHdyaXRlKFVpbnQ4Q2xhbXBlZEFycmF5VGFnKTsKLSAgICAgICAgZWxzZSBpZiAob2JqLT5p
bmhlcml0czxKU0ludDhBcnJheT4odm0pKQorICAgICAgICBlbHNlIGlmIChvYmotPmluaGVyaXRz
PEpTSW50OEFycmF5Pih2bSgpKSkKICAgICAgICAgICAgIHdyaXRlKEludDhBcnJheVRhZyk7Ci0g
ICAgICAgIGVsc2UgaWYgKG9iai0+aW5oZXJpdHM8SlNVaW50OEFycmF5Pih2bSkpCisgICAgICAg
IGVsc2UgaWYgKG9iai0+aW5oZXJpdHM8SlNVaW50OEFycmF5Pih2bSgpKSkKICAgICAgICAgICAg
IHdyaXRlKFVpbnQ4QXJyYXlUYWcpOwotICAgICAgICBlbHNlIGlmIChvYmotPmluaGVyaXRzPEpT
SW50MTZBcnJheT4odm0pKQorICAgICAgICBlbHNlIGlmIChvYmotPmluaGVyaXRzPEpTSW50MTZB
cnJheT4odm0oKSkpCiAgICAgICAgICAgICB3cml0ZShJbnQxNkFycmF5VGFnKTsKLSAgICAgICAg
ZWxzZSBpZiAob2JqLT5pbmhlcml0czxKU1VpbnQxNkFycmF5Pih2bSkpCisgICAgICAgIGVsc2Ug
aWYgKG9iai0+aW5oZXJpdHM8SlNVaW50MTZBcnJheT4odm0oKSkpCiAgICAgICAgICAgICB3cml0
ZShVaW50MTZBcnJheVRhZyk7Ci0gICAgICAgIGVsc2UgaWYgKG9iai0+aW5oZXJpdHM8SlNJbnQz
MkFycmF5Pih2bSkpCisgICAgICAgIGVsc2UgaWYgKG9iai0+aW5oZXJpdHM8SlNJbnQzMkFycmF5
Pih2bSgpKSkKICAgICAgICAgICAgIHdyaXRlKEludDMyQXJyYXlUYWcpOwotICAgICAgICBlbHNl
IGlmIChvYmotPmluaGVyaXRzPEpTVWludDMyQXJyYXk+KHZtKSkKKyAgICAgICAgZWxzZSBpZiAo
b2JqLT5pbmhlcml0czxKU1VpbnQzMkFycmF5Pih2bSgpKSkKICAgICAgICAgICAgIHdyaXRlKFVp
bnQzMkFycmF5VGFnKTsKLSAgICAgICAgZWxzZSBpZiAob2JqLT5pbmhlcml0czxKU0Zsb2F0MzJB
cnJheT4odm0pKQorICAgICAgICBlbHNlIGlmIChvYmotPmluaGVyaXRzPEpTRmxvYXQzMkFycmF5
Pih2bSgpKSkKICAgICAgICAgICAgIHdyaXRlKEZsb2F0MzJBcnJheVRhZyk7Ci0gICAgICAgIGVs
c2UgaWYgKG9iai0+aW5oZXJpdHM8SlNGbG9hdDY0QXJyYXk+KHZtKSkKKyAgICAgICAgZWxzZSBp
ZiAob2JqLT5pbmhlcml0czxKU0Zsb2F0NjRBcnJheT4odm0oKSkpCiAgICAgICAgICAgICB3cml0
ZShGbG9hdDY0QXJyYXlUYWcpOwotICAgICAgICBlbHNlIGlmIChvYmotPmluaGVyaXRzPEpTQmln
SW50NjRBcnJheT4odm0pKQorICAgICAgICBlbHNlIGlmIChvYmotPmluaGVyaXRzPEpTQmlnSW50
NjRBcnJheT4odm0oKSkpCiAgICAgICAgICAgICB3cml0ZShCaWdJbnQ2NEFycmF5VGFnKTsKLSAg
ICAgICAgZWxzZSBpZiAob2JqLT5pbmhlcml0czxKU0JpZ1VpbnQ2NEFycmF5Pih2bSkpCisgICAg
ICAgIGVsc2UgaWYgKG9iai0+aW5oZXJpdHM8SlNCaWdVaW50NjRBcnJheT4odm0oKSkpCiAgICAg
ICAgICAgICB3cml0ZShCaWdVaW50NjRBcnJheVRhZyk7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBhcnJh
eUJ1ZmZlclZpZXcgPSB0b1Bvc3NpYmx5U2hhcmVkQXJyYXlCdWZmZXJWaWV3KHZtLCBvYmopOwor
ICAgICAgICBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBhcnJheUJ1ZmZlclZpZXcgPSB0b1Bvc3Np
Ymx5U2hhcmVkQXJyYXlCdWZmZXJWaWV3KHZtKCksIG9iaik7CiAgICAgICAgIHVpbnQ2NF90IGJ5
dGVPZmZzZXQgPSBhcnJheUJ1ZmZlclZpZXctPmJ5dGVPZmZzZXQoKTsKICAgICAgICAgd3JpdGUo
Ynl0ZU9mZnNldCk7CiAgICAgICAgIHVpbnQ2NF90IGJ5dGVMZW5ndGggPSBhcnJheUJ1ZmZlclZp
ZXctPmJ5dGVMZW5ndGgoKTsKQEAgLTEwMjAsOCArOTg2LDcgQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgZHVtcERPTVBvaW50KEpTT2JqZWN0KiBvYmopCiAgICAgewotICAgICAgICBWTSYgdm0gPSBt
X2xleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgICAgIGlmIChvYmotPmluaGVyaXRzPEpT
RE9NUG9pbnQ+KHZtKSkKKyAgICAgICAgaWYgKG9iai0+aW5oZXJpdHM8SlNET01Qb2ludD4odm0o
KSkpCiAgICAgICAgICAgICB3cml0ZShET01Qb2ludFRhZyk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIHdyaXRlKERPTVBvaW50UmVhZE9ubHlUYWcpOwpAQCAtMTAzMSw4ICs5OTYsNyBAQCBw
cml2YXRlOgogCiAgICAgdm9pZCBkdW1wRE9NUmVjdChKU09iamVjdCogb2JqKQogICAgIHsKLSAg
ICAgICAgVk0mIHZtID0gbV9sZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwotICAgICAgICBpZiAo
b2JqLT5pbmhlcml0czxKU0RPTVJlY3Q+KHZtKSkKKyAgICAgICAgaWYgKG9iai0+aW5oZXJpdHM8
SlNET01SZWN0Pih2bSgpKSkKICAgICAgICAgICAgIHdyaXRlKERPTVJlY3RUYWcpOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICB3cml0ZShET01SZWN0UmVhZE9ubHlUYWcpOwpAQCAtMTA0Niw4
ICsxMDEwLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZHVtcERPTU1hdHJpeChKU09iamVjdCog
b2JqKQogICAgIHsKLSAgICAgICAgVk0mIHZtID0gbV9sZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgp
OwotICAgICAgICBpZiAob2JqLT5pbmhlcml0czxKU0RPTU1hdHJpeD4odm0pKQorICAgICAgICBp
ZiAob2JqLT5pbmhlcml0czxKU0RPTU1hdHJpeD4odm0oKSkpCiAgICAgICAgICAgICB3cml0ZShE
T01NYXRyaXhUYWcpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB3cml0ZShET01NYXRyaXhS
ZWFkT25seVRhZyk7CkBAIC0xMTcxLDcgKzExMzQsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBk
dW1wRE9NRXhjZXB0aW9uKEpTT2JqZWN0KiBvYmosIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlJiBj
b2RlKQogICAgIHsKLSAgICAgICAgaWYgKGF1dG8qIGV4Y2VwdGlvbiA9IEpTRE9NRXhjZXB0aW9u
Ojp0b1dyYXBwZWQobV9sZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpLCBvYmopKSB7CisgICAgICAg
IGlmIChhdXRvKiBleGNlcHRpb24gPSBKU0RPTUV4Y2VwdGlvbjo6dG9XcmFwcGVkKHZtKCksIG9i
aikpIHsKICAgICAgICAgICAgIHdyaXRlKERPTUV4Y2VwdGlvblRhZyk7CiAgICAgICAgICAgICB3
cml0ZShleGNlcHRpb24tPm1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB3cml0ZShleGNlcHRpb24t
Pm5hbWUoKSk7CkBAIC0xMTkwLDcgKzExNTMsNyBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlQo
dmFsdWUuaXNDZWxsKCkpOwogCiAgICAgICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAg
ICAgICAgICBkdW1wU3RyaW5nKGFzU3RyaW5nKHZhbHVlKS0+dmFsdWUobV9sZXhpY2FsR2xvYmFs
T2JqZWN0KSk7CisgICAgICAgICAgICBkdW1wU3RyaW5nKGFzU3RyaW5nKHZhbHVlKS0+dmFsdWUo
Jm1fbGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIH0KIApAQCAtMTIwNSwzOCArMTE2OCwzNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICBWTSYgdm0gPSBtX2xleGljYWxHbG9iYWxP
YmplY3QtPnZtKCk7Ci0gICAgICAgIGlmIChpc0FycmF5KHZtLCB2YWx1ZSkpCisgICAgICAgIGlm
ICh2YWx1ZS5pbmhlcml0czxKU0FycmF5Pih2bSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgICAgICBpZiAodmFsdWUuaXNPYmplY3QoKSkgewogICAgICAgICAgICAgYXV0byog
b2JqID0gYXNPYmplY3QodmFsdWUpOwotICAgICAgICAgICAgaWYgKGF1dG8qIGRhdGVPYmplY3Qg
PSBqc0R5bmFtaWNDYXN0PERhdGVJbnN0YW5jZSo+KHZtLCBvYmopKSB7CisgICAgICAgICAgICBp
ZiAoYXV0byogZGF0ZU9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8RGF0ZUluc3RhbmNlKj4odm0oKSwg
b2JqKSkgewogICAgICAgICAgICAgICAgIHdyaXRlKERhdGVUYWcpOwogICAgICAgICAgICAgICAg
IHdyaXRlKGRhdGVPYmplY3QtPmludGVybmFsTnVtYmVyKCkpOwogICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGF1dG8qIGJvb2xlYW5P
YmplY3QgPSBqc0R5bmFtaWNDYXN0PEJvb2xlYW5PYmplY3QqPih2bSwgb2JqKSkgeworICAgICAg
ICAgICAgaWYgKGF1dG8qIGJvb2xlYW5PYmplY3QgPSBqc0R5bmFtaWNDYXN0PEJvb2xlYW5PYmpl
Y3QqPih2bSgpLCBvYmopKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFzdGFydE9iamVjdEludGVy
bmFsKGJvb2xlYW5PYmplY3QpKSAvLyBoYW5kbGUgZHVwbGljYXRlcwogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB3cml0ZShib29sZWFuT2JqZWN0LT5p
bnRlcm5hbFZhbHVlKCkudG9Cb29sZWFuKG1fbGV4aWNhbEdsb2JhbE9iamVjdCkgPyBUcnVlT2Jq
ZWN0VGFnIDogRmFsc2VPYmplY3RUYWcpOworICAgICAgICAgICAgICAgIHdyaXRlKGJvb2xlYW5P
YmplY3QtPmludGVybmFsVmFsdWUoKS50b0Jvb2xlYW4oJm1fbGV4aWNhbEdsb2JhbE9iamVjdCkg
PyBUcnVlT2JqZWN0VGFnIDogRmFsc2VPYmplY3RUYWcpOwogICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGF1dG8qIHN0cmluZ09iamVj
dCA9IGpzRHluYW1pY0Nhc3Q8U3RyaW5nT2JqZWN0Kj4odm0sIG9iaikpIHsKKyAgICAgICAgICAg
IGlmIChhdXRvKiBzdHJpbmdPYmplY3QgPSBqc0R5bmFtaWNDYXN0PFN0cmluZ09iamVjdCo+KHZt
KCksIG9iaikpIHsKICAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0T2JqZWN0SW50ZXJuYWwoc3Ry
aW5nT2JqZWN0KSkgLy8gaGFuZGxlIGR1cGxpY2F0ZXMKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHN0ciA9IGFzU3RyaW5nKHN0cmluZ09i
amVjdC0+aW50ZXJuYWxWYWx1ZSgpKS0+dmFsdWUobV9sZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAg
ICAgICAgICAgICAgICBTdHJpbmcgc3RyID0gYXNTdHJpbmcoc3RyaW5nT2JqZWN0LT5pbnRlcm5h
bFZhbHVlKCkpLT52YWx1ZSgmbV9sZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICAgICAgICAgICAg
ICBkdW1wU3RyaW5nT2JqZWN0KHN0cik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYXV0byogbnVtYmVyT2JqZWN0ID0ganNEeW5h
bWljQ2FzdDxOdW1iZXJPYmplY3QqPih2bSwgb2JqKSkgeworICAgICAgICAgICAgaWYgKGF1dG8q
IG51bWJlck9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8TnVtYmVyT2JqZWN0Kj4odm0oKSwgb2JqKSkg
ewogICAgICAgICAgICAgICAgIGlmICghc3RhcnRPYmplY3RJbnRlcm5hbChudW1iZXJPYmplY3Qp
KSAvLyBoYW5kbGUgZHVwbGljYXRlcwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgICAgICAgICB3cml0ZShOdW1iZXJPYmplY3RUYWcpOwogICAgICAgICAgICAgICAg
IHdyaXRlKG51bWJlck9iamVjdC0+aW50ZXJuYWxWYWx1ZSgpLmFzTnVtYmVyKCkpOwogICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGF1
dG8qIGJpZ0ludE9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8QmlnSW50T2JqZWN0Kj4odm0sIG9iaikp
IHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBiaWdJbnRPYmplY3QgPSBqc0R5bmFtaWNDYXN0PEJp
Z0ludE9iamVjdCo+KHZtKCksIG9iaikpIHsKICAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0T2Jq
ZWN0SW50ZXJuYWwoYmlnSW50T2JqZWN0KSkgLy8gaGFuZGxlIGR1cGxpY2F0ZXMKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBiaWdJbnRW
YWx1ZSA9IGJpZ0ludE9iamVjdC0+aW50ZXJuYWxWYWx1ZSgpOwpAQCAtMTI0NSwxOSArMTIwNywx
OSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGR1bXBCaWdJbnREYXRhKGJpZ0ludFZhbHVl
KTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChhdXRvKiBmaWxlID0gSlNGaWxlOjp0b1dyYXBwZWQodm0sIG9iaikpIHsKKyAgICAg
ICAgICAgIGlmIChhdXRvKiBmaWxlID0gSlNGaWxlOjp0b1dyYXBwZWQodm0oKSwgb2JqKSkgewog
ICAgICAgICAgICAgICAgIHdyaXRlKEZpbGVUYWcpOwogICAgICAgICAgICAgICAgIHdyaXRlKCpm
aWxlKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChhdXRvKiBsaXN0ID0gSlNGaWxlTGlzdDo6dG9XcmFwcGVkKHZtLCBvYmopKSB7
CisgICAgICAgICAgICBpZiAoYXV0byogbGlzdCA9IEpTRmlsZUxpc3Q6OnRvV3JhcHBlZCh2bSgp
LCBvYmopKSB7CiAgICAgICAgICAgICAgICAgd3JpdGUoRmlsZUxpc3RUYWcpOwogICAgICAgICAg
ICAgICAgIHdyaXRlKGxpc3QtPmxlbmd0aCgpKTsKICAgICAgICAgICAgICAgICBmb3IgKGF1dG8m
IGZpbGUgOiBsaXN0LT5maWxlcygpKQogICAgICAgICAgICAgICAgICAgICB3cml0ZShmaWxlLmdl
dCgpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChhdXRvKiBibG9iID0gSlNCbG9iOjp0b1dyYXBwZWQodm0sIG9iaikpIHsKKyAg
ICAgICAgICAgIGlmIChhdXRvKiBibG9iID0gSlNCbG9iOjp0b1dyYXBwZWQodm0oKSwgb2JqKSkg
ewogICAgICAgICAgICAgICAgIHdyaXRlKEJsb2JUYWcpOwogICAgICAgICAgICAgICAgIG1fYmxv
YkhhbmRsZXMuYXBwZW5kKGJsb2ItPmhhbmRsZSgpKTsKICAgICAgICAgICAgICAgICB3cml0ZShi
bG9iLT51cmwoKS5zdHJpbmcoKSk7CkBAIC0xMjY3LDcgKzEyMjksNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIHdyaXRlKHNpemUpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGF1dG8qIGRhdGEgPSBKU0ltYWdlRGF0YTo6
dG9XcmFwcGVkKHZtLCBvYmopKSB7CisgICAgICAgICAgICBpZiAoYXV0byogZGF0YSA9IEpTSW1h
Z2VEYXRhOjp0b1dyYXBwZWQodm0oKSwgb2JqKSkgewogICAgICAgICAgICAgICAgIHdyaXRlKElt
YWdlRGF0YVRhZyk7CiAgICAgICAgICAgICAgICAgd3JpdGUoZGF0YS0+d2lkdGgoKSk7CiAgICAg
ICAgICAgICAgICAgd3JpdGUoZGF0YS0+aGVpZ2h0KCkpOwpAQCAtMTI4MSwxMyArMTI0MywxMyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHdyaXRlKGRhdGEtPmNvbG9yU3BhY2UoKSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAoYXV0byogcmVnRXhwID0ganNEeW5hbWljQ2FzdDxSZWdFeHBPYmplY3QqPih2bSwgb2JqKSkg
eworICAgICAgICAgICAgaWYgKGF1dG8qIHJlZ0V4cCA9IGpzRHluYW1pY0Nhc3Q8UmVnRXhwT2Jq
ZWN0Kj4odm0oKSwgb2JqKSkgewogICAgICAgICAgICAgICAgIHdyaXRlKFJlZ0V4cFRhZyk7CiAg
ICAgICAgICAgICAgICAgd3JpdGUocmVnRXhwLT5yZWdFeHAoKS0+cGF0dGVybigpKTsKLSAgICAg
ICAgICAgICAgICB3cml0ZShTdHJpbmcoSlNDOjpZYXJyOjpmbGFnc1N0cmluZyhyZWdFeHAtPnJl
Z0V4cCgpLT5mbGFncygpKS5kYXRhKCkpKTsKKyAgICAgICAgICAgICAgICB3cml0ZShTdHJpbmco
WWFycjo6ZmxhZ3NTdHJpbmcocmVnRXhwLT5yZWdFeHAoKS0+ZmxhZ3MoKSkuZGF0YSgpKSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAob2JqLT5pbmhlcml0czxKU01lc3NhZ2VQb3J0Pih2bSkpIHsKKyAgICAgICAgICAgIGlmIChv
YmotPmluaGVyaXRzPEpTTWVzc2FnZVBvcnQ+KHZtKCkpKSB7CiAgICAgICAgICAgICAgICAgYXV0
byBpbmRleCA9IG1fdHJhbnNmZXJyZWRNZXNzYWdlUG9ydHMuZmluZChvYmopOwogICAgICAgICAg
ICAgICAgIGlmIChpbmRleCAhPSBtX3RyYW5zZmVycmVkTWVzc2FnZVBvcnRzLmVuZCgpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIHdyaXRlKE1lc3NhZ2VQb3J0UmVmZXJlbmNlVGFnKTsKQEAgLTEy
OTgsNyArMTI2MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6
YXRpb25SZXR1cm5Db2RlOjpWYWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYXV0byogYXJyYXlCdWZmZXIg
PSB0b1Bvc3NpYmx5U2hhcmVkQXJyYXlCdWZmZXIodm0sIG9iaikpIHsKKyAgICAgICAgICAgIGlm
IChhdXRvKiBhcnJheUJ1ZmZlciA9IHRvUG9zc2libHlTaGFyZWRBcnJheUJ1ZmZlcih2bSgpLCBv
YmopKSB7CiAgICAgICAgICAgICAgICAgaWYgKGFycmF5QnVmZmVyLT5pc0RldGFjaGVkKCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpWYWxp
ZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTMyOSw3
ICsxMjkxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB3cml0ZShzdGF0aWNfY2FzdDxj
b25zdCB1aW50OF90Kj4oYXJyYXlCdWZmZXItPmRhdGEoKSksIGJ5dGVMZW5ndGgpOwogICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG9i
ai0+aW5oZXJpdHM8SlNBcnJheUJ1ZmZlclZpZXc+KHZtKSkgeworICAgICAgICAgICAgaWYgKG9i
ai0+aW5oZXJpdHM8SlNBcnJheUJ1ZmZlclZpZXc+KHZtKCkpKSB7CiAgICAgICAgICAgICAgICAg
aWYgKGNoZWNrRm9yRHVwbGljYXRlKG9iaikpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IGR1bXBBcnJheUJ1ZmZlclZpZXco
b2JqLCBjb2RlKTsKQEAgLTEzMzcsMTIgKzEyOTksMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICByZXR1cm4gc3VjY2VzczsKICAgICAgICAgICAgIH0KICNpZiBFTkFCTEUoV0VCX0NSWVBU
TykKLSAgICAgICAgICAgIGlmIChhdXRvKiBrZXkgPSBKU0NyeXB0b0tleTo6dG9XcmFwcGVkKHZt
LCBvYmopKSB7CisgICAgICAgICAgICBpZiAoYXV0byoga2V5ID0gSlNDcnlwdG9LZXk6OnRvV3Jh
cHBlZCh2bSgpLCBvYmopKSB7CiAgICAgICAgICAgICAgICAgd3JpdGUoQ3J5cHRvS2V5VGFnKTsK
ICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gc2VyaWFsaXplZEtleTsKICAgICAgICAg
ICAgICAgICBWZWN0b3I8QmxvYlVSTEhhbmRsZT4gZHVtbXlCbG9iSGFuZGxlczsKICAgICAgICAg
ICAgICAgICBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4gZHVtbXlNZXNzYWdlUG9ydHM7Ci0g
ICAgICAgICAgICAgICAgVmVjdG9yPFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPj4gZHVtbXlBcnJh
eUJ1ZmZlcnM7CisgICAgICAgICAgICAgICAgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZlcj4+IGR1
bW15QXJyYXlCdWZmZXJzOwogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICAgICAgICAgICAg
ICBXYXNtTW9kdWxlQXJyYXkgZHVtbXlNb2R1bGVzOwogICAgICAgICAgICAgICAgIFdhc21NZW1v
cnlIYW5kbGVBcnJheSBkdW1teU1lbW9yeUhhbmRsZXM7CkBAIC0xMzYyLDE0ICsxMzI0LDE3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGR1bW15QmxvYkhhbmRsZXMsIHNlcmlhbGl6
ZWRLZXksIFNlcmlhbGl6YXRpb25Db250ZXh0OjpEZWZhdWx0LCBkdW1teVNoYXJlZEJ1ZmZlcnMp
OwogICAgICAgICAgICAgICAgIHJhd0tleVNlcmlhbGl6ZXIud3JpdGUoa2V5KTsKICAgICAgICAg
ICAgICAgICBWZWN0b3I8dWludDhfdD4gd3JhcHBlZEtleTsKLSAgICAgICAgICAgICAgICBpZiAo
IXdyYXBDcnlwdG9LZXkobV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBzZXJpYWxpemVkS2V5LCB3cmFw
cGVkS2V5KSkKKyAgICAgICAgICAgICAgICBhdXRvKiBjb250ZXh0ID0gZXhlY3V0aW9uQ29udGV4
dCgpOworICAgICAgICAgICAgICAgIGlmICghY29udGV4dCkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+d3JhcENyeXB0b0tl
eShzZXJpYWxpemVkS2V5LCB3cmFwcGVkS2V5KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgICAgIHdyaXRlKHdyYXBwZWRLZXkpOwogICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogI2VuZGlmCiAjaWYgRU5BQkxFKFdFQl9S
VEMpCi0gICAgICAgICAgICBpZiAoYXV0byogcnRjQ2VydGlmaWNhdGUgPSBKU1JUQ0NlcnRpZmlj
YXRlOjp0b1dyYXBwZWQodm0sIG9iaikpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBydGNDZXJ0
aWZpY2F0ZSA9IEpTUlRDQ2VydGlmaWNhdGU6OnRvV3JhcHBlZCh2bSgpLCBvYmopKSB7CiAgICAg
ICAgICAgICAgICAgd3JpdGUoUlRDQ2VydGlmaWNhdGVUYWcpOwogICAgICAgICAgICAgICAgIHdy
aXRlKHJ0Y0NlcnRpZmljYXRlLT5leHBpcmVzKCkpOwogICAgICAgICAgICAgICAgIHdyaXRlKHJ0
Y0NlcnRpZmljYXRlLT5wZW1DZXJ0aWZpY2F0ZSgpKTsKQEAgLTEzODQsNyArMTM0OSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICB9CiAjZW5kaWYKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0g
ICAgICAgICAgICBpZiAoSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlID0ganNEeW5hbWljQ2Fz
dDxKU1dlYkFzc2VtYmx5TW9kdWxlKj4odm0sIG9iaikpIHsKKyAgICAgICAgICAgIGlmIChKU1dl
YkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlNb2R1
bGUqPih2bSgpLCBvYmopKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fY29udGV4dCAhPSBTZXJp
YWxpemF0aW9uQ29udGV4dDo6V29ya2VyUG9zdE1lc3NhZ2UgJiYgbV9jb250ZXh0ICE9IFNlcmlh
bGl6YXRpb25Db250ZXh0OjpXaW5kb3dQb3N0TWVzc2FnZSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCkBAIC0xMzk0LDggKzEzNTksOCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIHdyaXRlKGluZGV4KTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmIChKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkgPSBq
c0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlNZW1vcnkqPih2bSwgb2JqKSkgewotICAgICAgICAg
ICAgICAgIGlmIChtZW1vcnktPm1lbW9yeSgpLnNoYXJpbmdNb2RlKCkgIT0gSlNDOjpXYXNtOjpN
ZW1vcnlTaGFyaW5nTW9kZTo6U2hhcmVkKSB7CisgICAgICAgICAgICBpZiAoSlNXZWJBc3NlbWJs
eU1lbW9yeSogbWVtb3J5ID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5TWVtb3J5Kj4odm0o
KSwgb2JqKSkgeworICAgICAgICAgICAgICAgIGlmIChtZW1vcnktPm1lbW9yeSgpLnNoYXJpbmdN
b2RlKCkgIT0gV2FzbTo6TWVtb3J5U2hhcmluZ01vZGU6OlNoYXJlZCkgewogICAgICAgICAgICAg
ICAgICAgICBjb2RlID0gU2VyaWFsaXphdGlvblJldHVybkNvZGU6OkRhdGFDbG9uZUVycm9yOwog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CkBAIC0x
NDEwLDM5ICsxMzc1LDM5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICB9CiAjZW5kaWYKLSAgICAgICAgICAgIGlmIChvYmotPmluaGVyaXRzPEpT
RE9NUG9pbnRSZWFkT25seT4odm0pKSB7CisgICAgICAgICAgICBpZiAob2JqLT5pbmhlcml0czxK
U0RPTVBvaW50UmVhZE9ubHk+KHZtKCkpKSB7CiAgICAgICAgICAgICAgICAgZHVtcERPTVBvaW50
KG9iaik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAob2JqLT5pbmhlcml0czxKU0RPTVJlY3RSZWFkT25seT4odm0pKSB7CisgICAg
ICAgICAgICBpZiAob2JqLT5pbmhlcml0czxKU0RPTVJlY3RSZWFkT25seT4odm0oKSkpIHsKICAg
ICAgICAgICAgICAgICBkdW1wRE9NUmVjdChvYmopOwogICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG9iai0+aW5oZXJpdHM8SlNET01N
YXRyaXhSZWFkT25seT4odm0pKSB7CisgICAgICAgICAgICBpZiAob2JqLT5pbmhlcml0czxKU0RP
TU1hdHJpeFJlYWRPbmx5Pih2bSgpKSkgewogICAgICAgICAgICAgICAgIGR1bXBET01NYXRyaXgo
b2JqKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChvYmotPmluaGVyaXRzPEpTRE9NUXVhZD4odm0pKSB7CisgICAgICAgICAgICBp
ZiAob2JqLT5pbmhlcml0czxKU0RPTVF1YWQ+KHZtKCkpKSB7CiAgICAgICAgICAgICAgICAgZHVt
cERPTVF1YWQob2JqKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGlmIChvYmotPmluaGVyaXRzKHZtLCBKU0ltYWdlQml0bWFwOjppbmZv
KCkpKSB7CisgICAgICAgICAgICBpZiAob2JqLT5pbmhlcml0cyh2bSgpLCBKU0ltYWdlQml0bWFw
OjppbmZvKCkpKSB7CiAgICAgICAgICAgICAgICAgZHVtcEltYWdlQml0bWFwKG9iaiwgY29kZSk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAjaWYgRU5BQkxF
KE9GRlNDUkVFTl9DQU5WQVNfSU5fV09SS0VSUykKLSAgICAgICAgICAgIGlmIChvYmotPmluaGVy
aXRzKHZtLCBKU09mZnNjcmVlbkNhbnZhczo6aW5mbygpKSkgeworICAgICAgICAgICAgaWYgKG9i
ai0+aW5oZXJpdHModm0oKSwgSlNPZmZzY3JlZW5DYW52YXM6OmluZm8oKSkpIHsKICAgICAgICAg
ICAgICAgICBkdW1wT2Zmc2NyZWVuQ2FudmFzKG9iaiwgY29kZSk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAjZW5kaWYKICNpZiBFTkFCTEUoV0VCX1JUQykK
LSAgICAgICAgICAgIGlmIChvYmotPmluaGVyaXRzKHZtLCBKU1JUQ0RhdGFDaGFubmVsOjppbmZv
KCkpKSB7CisgICAgICAgICAgICBpZiAob2JqLT5pbmhlcml0cyh2bSgpLCBKU1JUQ0RhdGFDaGFu
bmVsOjppbmZvKCkpKSB7CiAgICAgICAgICAgICAgICAgZHVtcFJUQ0RhdGFDaGFubmVsKG9iaiwg
Y29kZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAjZW5k
aWYKLSAgICAgICAgICAgIGlmIChvYmotPmluaGVyaXRzKHZtLCBKU0RPTUV4Y2VwdGlvbjo6aW5m
bygpKSkgeworICAgICAgICAgICAgaWYgKG9iai0+aW5oZXJpdHModm0oKSwgSlNET01FeGNlcHRp
b246OmluZm8oKSkpIHsKICAgICAgICAgICAgICAgICBkdW1wRE9NRXhjZXB0aW9uKG9iaiwgY29k
ZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CkBAIC0xNTg2
LDcgKzE1NTEsNyBAQCBwcml2YXRlOgogICAgICAgICBpZiAoc3RyLmlzTnVsbCgpKQogICAgICAg
ICAgICAgd3JpdGUobV9lbXB0eUlkZW50aWZpZXIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICB3cml0ZShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKG1fbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0o
KSwgc3RyKSk7CisgICAgICAgICAgICB3cml0ZShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtKCks
IHN0cikpOwogICAgIH0KIAogICAgIHZvaWQgd3JpdGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2
ZWN0b3IpCkBAIC0xODk0LDcgKzE4NTksNiBAQCBwcml2YXRlOgogCiBTZXJpYWxpemF0aW9uUmV0
dXJuQ29kZSBDbG9uZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShKU1ZhbHVlIGluKQogewotICAgIFZN
JiB2bSA9IG1fbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBWZWN0b3I8dWludDMyX3Qs
IDE2PiBpbmRleFN0YWNrOwogICAgIFZlY3Rvcjx1aW50MzJfdCwgMTY+IGxlbmd0aFN0YWNrOwog
ICAgIFZlY3RvcjxQcm9wZXJ0eU5hbWVBcnJheSwgMTY+IHByb3BlcnR5U3RhY2s7CkBAIC0xOTA1
LDEyICsxODY5LDEyIEBAIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlIENsb25lU2VyaWFsaXplcjo6
c2VyaWFsaXplKEpTVmFsdWUgaW4pCiAgICAgVmVjdG9yPFdhbGtlclN0YXRlLCAxNj4gc3RhdGVT
dGFjazsKICAgICBXYWxrZXJTdGF0ZSBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gU3RhdGVVbmtub3du
OwogICAgIEpTVmFsdWUgaW5WYWx1ZSA9IGluOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSgp
KTsKICAgICB3aGlsZSAoMSkgewogICAgICAgICBzd2l0Y2ggKGxleGljYWxHbG9iYWxPYmplY3Qp
IHsKICAgICAgICAgICAgIGFycmF5U3RhcnRTdGF0ZToKICAgICAgICAgICAgIGNhc2UgQXJyYXlT
dGFydFN0YXRlOiB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGlzQXJyYXkodm0sIGluVmFsdWUp
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaW5WYWx1ZS5pbmhlcml0czxKU0FycmF5Pih2bSgp
KSk7CiAgICAgICAgICAgICAgICAgaWYgKGlucHV0T2JqZWN0U3RhY2suc2l6ZSgpID4gbWF4aW11
bUZpbHRlclJlY3Vyc2lvbikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNlcmlhbGl6YXRp
b25SZXR1cm5Db2RlOjpTdGFja092ZXJmbG93RXJyb3I7CiAKQEAgLTE5MzEsOCArMTg5NSw4IEBA
IFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlIENsb25lU2VyaWFsaXplcjo6c2VyaWFsaXplKEpTVmFs
dWUgaW4pCiAgICAgICAgICAgICAgICAgICAgIGluZGV4U3RhY2sucmVtb3ZlTGFzdCgpOwogICAg
ICAgICAgICAgICAgICAgICBsZW5ndGhTdGFjay5yZW1vdmVMYXN0KCk7CiAKLSAgICAgICAgICAg
ICAgICAgICAgcHJvcGVydHlTdGFjay5hcHBlbmQoUHJvcGVydHlOYW1lQXJyYXkodm0sIFByb3Bl
cnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGFycmF5LT5nZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMobV9sZXhp
Y2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eVN0YWNrLmxhc3QoKSwgRG9udEVudW1Qcm9wZXJ0aWVz
TW9kZTo6RXhjbHVkZSk7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RhY2suYXBwZW5k
KFByb3BlcnR5TmFtZUFycmF5KHZtKCksIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZh
dGVTeW1ib2xNb2RlOjpFeGNsdWRlKSk7CisgICAgICAgICAgICAgICAgICAgIGFycmF5LT5nZXRP
d25Ob25JbmRleFByb3BlcnR5TmFtZXMoJm1fbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlT
dGFjay5sYXN0KCksIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpFeGlzdGluZ0V4Y2Vw
dGlvbkVycm9yOwogICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlTdGFjay5sYXN0KCku
c2l6ZSgpKSB7CkBAIC0xOTQ2LDcgKzE5MTAsNyBAQCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBD
bG9uZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShKU1ZhbHVlIGluKQogICAgICAgICAgICAgICAgICAg
ICBpbnB1dE9iamVjdFN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGluVmFsdWUgPSBhcnJheS0+
Z2V0RGlyZWN0SW5kZXgobV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCk7CisgICAgICAgICAg
ICAgICAgaW5WYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmbV9sZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBpbmRleCk7CiAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNlcmlhbGl6YXRpb25SZXR1cm5Db2Rl
OjpFeGlzdGluZ0V4Y2VwdGlvbkVycm9yOwogICAgICAgICAgICAgICAgIGlmICghaW5WYWx1ZSkg
ewpAQCAtMTk4MSwxMiArMTk0NSwxMiBAQCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBDbG9uZVNl
cmlhbGl6ZXI6OnNlcmlhbGl6ZShKU1ZhbHVlIGluKQogICAgICAgICAgICAgICAgIC8vIG9iamVj
dHMgaGF2ZSBiZWVuIGhhbmRsZWQuIElmIHdlIHJlYWNoIHRoaXMgcG9pbnQgYW5kCiAgICAgICAg
ICAgICAgICAgLy8gdGhlIGlucHV0IGlzIG5vdCBhbiBPYmplY3Qgb2JqZWN0IHRoZW4gd2Ugc2hv
dWxkIHRocm93CiAgICAgICAgICAgICAgICAgLy8gYSBEYXRhQ2xvbmVFcnJvci4KLSAgICAgICAg
ICAgICAgICBpZiAoaW5PYmplY3QtPmNsYXNzSW5mbyh2bSkgIT0gSlNGaW5hbE9iamVjdDo6aW5m
bygpKQorICAgICAgICAgICAgICAgIGlmIChpbk9iamVjdC0+Y2xhc3NJbmZvKHZtKCkpICE9IEpT
RmluYWxPYmplY3Q6OmluZm8oKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNlcmlhbGl6
YXRpb25SZXR1cm5Db2RlOjpEYXRhQ2xvbmVFcnJvcjsKICAgICAgICAgICAgICAgICBpbnB1dE9i
amVjdFN0YWNrLmFwcGVuZChpbk9iamVjdCk7CiAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5h
cHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgcHJvcGVydHlTdGFjay5hcHBlbmQoUHJvcGVydHlO
YW1lQXJyYXkodm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2Rl
OjpFeGNsdWRlKSk7Ci0gICAgICAgICAgICAgICAgaW5PYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+
Z2V0T3duUHJvcGVydHlOYW1lcyhpbk9iamVjdCwgbV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eVN0YWNrLmxhc3QoKSwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSk7CisgICAg
ICAgICAgICAgICAgcHJvcGVydHlTdGFjay5hcHBlbmQoUHJvcGVydHlOYW1lQXJyYXkodm0oKSwg
UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpKTsK
KyAgICAgICAgICAgICAgICBpbk9iamVjdC0+bWV0aG9kVGFibGUodm0oKSktPmdldE93blByb3Bl
cnR5TmFtZXMoaW5PYmplY3QsICZtX2xleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5U3RhY2su
bGFzdCgpLCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKTsKICAgICAgICAgICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gU2VyaWFsaXphdGlvblJldHVybkNvZGU6OkV4aXN0aW5nRXhjZXB0aW9uRXJyb3I7CiAg
ICAgICAgICAgICB9CkBAIC0yMDAzLDcgKzE5NjcsNyBAQCBTZXJpYWxpemF0aW9uUmV0dXJuQ29k
ZSBDbG9uZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShKU1ZhbHVlIGluKQogICAgICAgICAgICAgICAg
ICAgICBwcm9wZXJ0eVN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGluVmFsdWUgPSBnZXRQcm9w
ZXJ0eSh2bSwgb2JqZWN0LCBwcm9wZXJ0aWVzW2luZGV4XSk7CisgICAgICAgICAgICAgICAgaW5W
YWx1ZSA9IGdldFByb3BlcnR5KG9iamVjdCwgcHJvcGVydGllc1tpbmRleF0pOwogICAgICAgICAg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZTo6RXhpc3RpbmdFeGNlcHRpb25FcnJv
cjsKIApAQCAtMjA0MCw3ICsyMDA0LDcgQEAgU2VyaWFsaXphdGlvblJldHVybkNvZGUgQ2xvbmVT
ZXJpYWxpemVyOjpzZXJpYWxpemUoSlNWYWx1ZSBpbikKICAgICAgICAgICAgICAgICBKU01hcCog
aW5NYXAgPSBqc0Nhc3Q8SlNNYXAqPihpblZhbHVlKTsKICAgICAgICAgICAgICAgICBpZiAoIXN0
YXJ0TWFwKGluTWFwKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgSlNNYXBJdGVyYXRvciogaXRlcmF0b3IgPSBKU01hcEl0ZXJhdG9yOjpjcmVhdGUodm0sIG1f
bGV4aWNhbEdsb2JhbE9iamVjdC0+bWFwSXRlcmF0b3JTdHJ1Y3R1cmUoKSwgaW5NYXAsIEl0ZXJh
dGlvbktpbmQ6OkVudHJpZXMpOworICAgICAgICAgICAgICAgIEpTTWFwSXRlcmF0b3IqIGl0ZXJh
dG9yID0gSlNNYXBJdGVyYXRvcjo6Y3JlYXRlKHZtKCksIG1fbGV4aWNhbEdsb2JhbE9iamVjdC5t
YXBJdGVyYXRvclN0cnVjdHVyZSgpLCBpbk1hcCwgSXRlcmF0aW9uS2luZDo6RW50cmllcyk7CiAg
ICAgICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmRXaXRoQ3Jhc2hPbk92ZXJmbG93KGluTWFw
KTsKICAgICAgICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVuZFdpdGhDcmFzaE9uT3ZlcmZsb3co
aXRlcmF0b3IpOwogICAgICAgICAgICAgICAgIG1hcEl0ZXJhdG9yU3RhY2suYXBwZW5kKGl0ZXJh
dG9yKTsKQEAgLTIwNTEsMTIgKzIwMTUsMTIgQEAgU2VyaWFsaXphdGlvblJldHVybkNvZGUgQ2xv
bmVTZXJpYWxpemVyOjpzZXJpYWxpemUoSlNWYWx1ZSBpbikKICAgICAgICAgICAgIGNhc2UgTWFw
RGF0YVN0YXJ0VmlzaXRFbnRyeTogewogICAgICAgICAgICAgICAgIEpTTWFwSXRlcmF0b3IqIGl0
ZXJhdG9yID0gbWFwSXRlcmF0b3JTdGFjay5sYXN0KCk7CiAgICAgICAgICAgICAgICAgSlNWYWx1
ZSBrZXksIHZhbHVlOwotICAgICAgICAgICAgICAgIGlmICghaXRlcmF0b3ItPm5leHRLZXlWYWx1
ZShtX2xleGljYWxHbG9iYWxPYmplY3QsIGtleSwgdmFsdWUpKSB7CisgICAgICAgICAgICAgICAg
aWYgKCFpdGVyYXRvci0+bmV4dEtleVZhbHVlKCZtX2xleGljYWxHbG9iYWxPYmplY3QsIGtleSwg
dmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1hcEl0ZXJhdG9yU3RhY2sucmVtb3ZlTGFz
dCgpOwogICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gaW5wdXRPYmplY3RT
dGFjay5sYXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpT
TWFwKj4odm0sIG9iamVjdCkpOwotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0YWNrLmFw
cGVuZChQcm9wZXJ0eU5hbWVBcnJheSh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJp
dmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpKTsKLSAgICAgICAgICAgICAgICAgICAgb2JqZWN0LT5t
ZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBtX2xleGljYWxHbG9i
YWxPYmplY3QsIHByb3BlcnR5U3RhY2subGFzdCgpLCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpF
eGNsdWRlKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGpzRHluYW1pY0Nhc3Q8SlNNYXAq
Pih2bSgpLCBvYmplY3QpKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdGFjay5hcHBl
bmQoUHJvcGVydHlOYW1lQXJyYXkodm0oKSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJp
dmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0LT5t
ZXRob2RUYWJsZSh2bSgpKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsICZtX2xleGljYWxH
bG9iYWxPYmplY3QsIHByb3BlcnR5U3RhY2subGFzdCgpLCBEb250RW51bVByb3BlcnRpZXNNb2Rl
OjpFeGNsdWRlKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTZXJpYWxpemF0aW9uUmV0
dXJuQ29kZTo6RXhpc3RpbmdFeGNlcHRpb25FcnJvcjsKICAgICAgICAgICAgICAgICAgICAgd3Jp
dGUoTm9uTWFwUHJvcGVydGllc1RhZyk7CkBAIC0yMDg2LDcgKzIwNTAsNyBAQCBTZXJpYWxpemF0
aW9uUmV0dXJuQ29kZSBDbG9uZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShKU1ZhbHVlIGluKQogICAg
ICAgICAgICAgICAgIEpTU2V0KiBpblNldCA9IGpzQ2FzdDxKU1NldCo+KGluVmFsdWUpOwogICAg
ICAgICAgICAgICAgIGlmICghc3RhcnRTZXQoaW5TZXQpKQogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICBKU1NldEl0ZXJhdG9yKiBpdGVyYXRvciA9IEpTU2V0SXRl
cmF0b3I6OmNyZWF0ZSh2bSwgbV9sZXhpY2FsR2xvYmFsT2JqZWN0LT5zZXRJdGVyYXRvclN0cnVj
dHVyZSgpLCBpblNldCwgSXRlcmF0aW9uS2luZDo6S2V5cyk7CisgICAgICAgICAgICAgICAgSlNT
ZXRJdGVyYXRvciogaXRlcmF0b3IgPSBKU1NldEl0ZXJhdG9yOjpjcmVhdGUodm0oKSwgbV9sZXhp
Y2FsR2xvYmFsT2JqZWN0LnNldEl0ZXJhdG9yU3RydWN0dXJlKCksIGluU2V0LCBJdGVyYXRpb25L
aW5kOjpLZXlzKTsKICAgICAgICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVuZFdpdGhDcmFzaE9u
T3ZlcmZsb3coaW5TZXQpOwogICAgICAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5kV2l0aENy
YXNoT25PdmVyZmxvdyhpdGVyYXRvcik7CiAgICAgICAgICAgICAgICAgc2V0SXRlcmF0b3JTdGFj
ay5hcHBlbmQoaXRlcmF0b3IpOwpAQCAtMjA5NywxMiArMjA2MSwxMiBAQCBTZXJpYWxpemF0aW9u
UmV0dXJuQ29kZSBDbG9uZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShKU1ZhbHVlIGluKQogICAgICAg
ICAgICAgY2FzZSBTZXREYXRhU3RhcnRWaXNpdEVudHJ5OiB7CiAgICAgICAgICAgICAgICAgSlNT
ZXRJdGVyYXRvciogaXRlcmF0b3IgPSBzZXRJdGVyYXRvclN0YWNrLmxhc3QoKTsKICAgICAgICAg
ICAgICAgICBKU1ZhbHVlIGtleTsKLSAgICAgICAgICAgICAgICBpZiAoIWl0ZXJhdG9yLT5uZXh0
KG1fbGV4aWNhbEdsb2JhbE9iamVjdCwga2V5KSkgeworICAgICAgICAgICAgICAgIGlmICghaXRl
cmF0b3ItPm5leHQoJm1fbGV4aWNhbEdsb2JhbE9iamVjdCwga2V5KSkgewogICAgICAgICAgICAg
ICAgICAgICBzZXRJdGVyYXRvclN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICAg
ICAgSlNPYmplY3QqIG9iamVjdCA9IGlucHV0T2JqZWN0U3RhY2subGFzdCgpOwotICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxKU1NldCo+KHZtLCBvYmplY3QpKTsKLSAg
ICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdGFjay5hcHBlbmQoUHJvcGVydHlOYW1lQXJyYXko
dm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRl
KSk7Ci0gICAgICAgICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Q
cm9wZXJ0eU5hbWVzKG9iamVjdCwgbV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eVN0YWNr
Lmxhc3QoKSwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSk7CisgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTU2V0Kj4odm0oKSwgb2JqZWN0KSk7CisgICAg
ICAgICAgICAgICAgICAgIHByb3BlcnR5U3RhY2suYXBwZW5kKFByb3BlcnR5TmFtZUFycmF5KHZt
KCksIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRl
KSk7CisgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0oKSktPmdldE93
blByb3BlcnR5TmFtZXMob2JqZWN0LCAmbV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eVN0
YWNrLmxhc3QoKSwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gU2VyaWFsaXphdGlvblJldHVybkNvZGU6OkV4aXN0aW5nRXhjZXB0
aW9uRXJyb3I7CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlKE5vblNldFByb3BlcnRpZXNUYWcp
OwpAQCAtMjEyNiwxMSArMjA5MCwxMSBAQCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBDbG9uZVNl
cmlhbGl6ZXI6OnNlcmlhbGl6ZShKU1ZhbHVlIGluKQogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSh2bSwg
aW5WYWx1ZSkpCisgICAgICAgICAgICAgICAgaWYgKGluVmFsdWUuaW5oZXJpdHM8SlNBcnJheT4o
dm0oKSkpCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gYXJyYXlTdGFydFN0YXRlOwotICAgICAg
ICAgICAgICAgIGlmIChpc01hcCh2bSwgaW5WYWx1ZSkpCisgICAgICAgICAgICAgICAgaWYgKGlu
VmFsdWUuaW5oZXJpdHM8SlNNYXA+KHZtKCkpKQogICAgICAgICAgICAgICAgICAgICBnb3RvIG1h
cFN0YXJ0U3RhdGU7Ci0gICAgICAgICAgICAgICAgaWYgKGlzU2V0KHZtLCBpblZhbHVlKSkKKyAg
ICAgICAgICAgICAgICBpZiAoaW5WYWx1ZS5pbmhlcml0czxKU1NldD4odm0oKSkpCiAgICAgICAg
ICAgICAgICAgICAgIGdvdG8gc2V0U3RhcnRTdGF0ZTsKICAgICAgICAgICAgICAgICBnb3RvIG9i
amVjdFN0YXJ0U3RhdGU7CiAgICAgICAgICAgICB9CkBAIC0yMTcyLDcgKzIxMzYsNyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBzdHI7CiAgICAgfQogCi0gICAgc3RhdGljIERlc2VyaWFsaXph
dGlvblJlc3VsdCBkZXNlcmlhbGl6ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0cjxNZXNz
YWdlUG9ydD4+JiBtZXNzYWdlUG9ydHMsIFZlY3RvcjxzdGQ6Om9wdGlvbmFsPEltYWdlQml0bWFw
QmFja2luZz4+JiYgYmFja2luZ1N0b3JlcworICAgIHN0YXRpYyBEZXNlcmlhbGl6YXRpb25SZXN1
bHQgZGVzZXJpYWxpemUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+
PiYgbWVzc2FnZVBvcnRzLCBWZWN0b3I8c3RkOjpvcHRpb25hbDxJbWFnZUJpdG1hcEJhY2tpbmc+
PiYmIGJhY2tpbmdTdG9yZXMKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBU19JTl9XT1JLRVJT
KQogICAgICAgICAsIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RGV0YWNoZWRPZmZzY3JlZW5DYW52
YXM+PiYmIGRldGFjaGVkT2Zmc2NyZWVuQ2FudmFzZXMKICNlbmRpZgpAQCAtMjIxMiwxMCArMjE3
NiwxMCBAQCBwcml2YXRlOgogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBKU1ZhbHVl
IGpzU3RyaW5nKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0KQorICAgICAgICBK
U1ZhbHVlIGpzU3RyaW5nKFZNJiB2bSkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2pz
U3RyaW5nKQotICAgICAgICAgICAgICAgIG1fanNTdHJpbmcgPSBKU0M6OmpzU3RyaW5nKGxleGlj
YWxHbG9iYWxPYmplY3QtPnZtKCksIG1fc3RyaW5nKTsKKyAgICAgICAgICAgICAgICBtX2pzU3Ry
aW5nID0gSlNDOjpqc1N0cmluZyh2bSwgbV9zdHJpbmcpOwogICAgICAgICAgICAgcmV0dXJuIG1f
anNTdHJpbmc7CiAgICAgICAgIH0KICAgICAgICAgY29uc3QgU3RyaW5nJiBzdHJpbmcoKSB7IHJl
dHVybiBtX3N0cmluZzsgfQpAQCAtMjI0NSw3ICsyMjA5LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
c2l6ZV90IG1faW5kZXg7CiAgICAgfTsKIAotICAgIENsb25lRGVzZXJpYWxpemVyKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBjb25zdCBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywgQXJyYXlC
dWZmZXJDb250ZW50c0FycmF5KiBhcnJheUJ1ZmZlckNvbnRlbnRzLCBWZWN0b3I8c3RkOjpvcHRp
b25hbDxJbWFnZUJpdG1hcEJhY2tpbmc+PiYmIGJhY2tpbmdTdG9yZXMsIGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYgYnVmZmVyCisgICAgQ2xvbmVEZXNlcmlhbGl6ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYgbWVzc2FnZVBvcnRzLCBBcnJheUJ1ZmZlckNvbnRl
bnRzQXJyYXkqIGFycmF5QnVmZmVyQ29udGVudHMsIFZlY3RvcjxzdGQ6Om9wdGlvbmFsPEltYWdl
Qml0bWFwQmFja2luZz4+JiYgYmFja2luZ1N0b3JlcywgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBi
dWZmZXIKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBU19JTl9XT1JLRVJTKQogICAgICAgICAs
IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RGV0YWNoZWRPZmZzY3JlZW5DYW52YXM+PiYmIGRldGFj
aGVkT2Zmc2NyZWVuQ2FudmFzZXMgPSB7IH0KICNlbmRpZgpAQCAtMjI1NiwxMSArMjIyMCw5IEBA
IHByaXZhdGU6CiAgICAgICAgICwgV2FzbU1vZHVsZUFycmF5KiB3YXNtTW9kdWxlcyA9IG51bGxw
dHIKICAgICAgICAgLCBXYXNtTWVtb3J5SGFuZGxlQXJyYXkqIHdhc21NZW1vcnlIYW5kbGVzID0g
bnVsbHB0cgogI2VuZGlmCi0gICAgICAgICkKKyAgICApCiAgICAgICAgIDogQ2xvbmVCYXNlKGxl
eGljYWxHbG9iYWxPYmplY3QpCiAgICAgICAgICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0
KQotICAgICAgICAsIG1faXNET01HbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0LT5pbmhlcml0czxK
U0RPTUdsb2JhbE9iamVjdD4oZ2xvYmFsT2JqZWN0LT52bSgpKSkKLSAgICAgICAgLCBtX2NhbkNy
ZWF0ZURPTU9iamVjdChtX2lzRE9NR2xvYmFsT2JqZWN0ICYmICFnbG9iYWxPYmplY3QtPmluaGVy
aXRzPEpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdD4oZ2xvYmFsT2JqZWN0LT52bSgpKSkK
ICAgICAgICAgLCBtX3B0cihidWZmZXIuZGF0YSgpKQogICAgICAgICAsIG1fZW5kKGJ1ZmZlci5k
YXRhKCkgKyBidWZmZXIuc2l6ZSgpKQogICAgICAgICAsIG1fdmVyc2lvbigweEZGRkZGRkZGKQpA
QCAtMjI4Niw3ICsyMjQ4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fdmVyc2lvbiA9IDB4
RkZGRkZGRkY7CiAgICAgfQogCi0gICAgQ2xvbmVEZXNlcmlhbGl6ZXIoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0
IFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYgbWVzc2FnZVBvcnRzLCBBcnJheUJ1ZmZlckNv
bnRlbnRzQXJyYXkqIGFycmF5QnVmZmVyQ29udGVudHMsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
YnVmZmVyLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+IGJsb2JGaWxlUGF0aHMsIEFycmF5QnVmZmVyQ29udGVudHNBcnJheSogc2hhcmVkQnVmZmVy
cywgVmVjdG9yPHN0ZDo6b3B0aW9uYWw8SW1hZ2VCaXRtYXBCYWNraW5nPj4mJiBiYWNraW5nU3Rv
cmVzCisgICAgQ2xvbmVEZXNlcmlhbGl6ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8
TWVzc2FnZVBvcnQ+PiYgbWVzc2FnZVBvcnRzLCBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkqIGFy
cmF5QnVmZmVyQ29udGVudHMsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+IGJsb2JGaWxlUGF0
aHMsIEFycmF5QnVmZmVyQ29udGVudHNBcnJheSogc2hhcmVkQnVmZmVycywgVmVjdG9yPHN0ZDo6
b3B0aW9uYWw8SW1hZ2VCaXRtYXBCYWNraW5nPj4mJiBiYWNraW5nU3RvcmVzCiAjaWYgRU5BQkxF
KE9GRlNDUkVFTl9DQU5WQVNfSU5fV09SS0VSUykKICAgICAgICAgLCBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPERldGFjaGVkT2Zmc2NyZWVuQ2FudmFzPj4mJiBkZXRhY2hlZE9mZnNjcmVlbkNhbnZh
c2VzCiAjZW5kaWYKQEAgLTIyOTcsMTEgKzIyNTksOSBAQCBwcml2YXRlOgogICAgICAgICAsIFdh
c21Nb2R1bGVBcnJheSogd2FzbU1vZHVsZXMKICAgICAgICAgLCBXYXNtTWVtb3J5SGFuZGxlQXJy
YXkqIHdhc21NZW1vcnlIYW5kbGVzCiAjZW5kaWYKLSAgICAgICAgKQorICAgICkKICAgICAgICAg
OiBDbG9uZUJhc2UobGV4aWNhbEdsb2JhbE9iamVjdCkKICAgICAgICAgLCBtX2dsb2JhbE9iamVj
dChnbG9iYWxPYmplY3QpCi0gICAgICAgICwgbV9pc0RPTUdsb2JhbE9iamVjdChnbG9iYWxPYmpl
Y3QtPmluaGVyaXRzPEpTRE9NR2xvYmFsT2JqZWN0PihnbG9iYWxPYmplY3QtPnZtKCkpKQotICAg
ICAgICAsIG1fY2FuQ3JlYXRlRE9NT2JqZWN0KG1faXNET01HbG9iYWxPYmplY3QgJiYgIWdsb2Jh
bE9iamVjdC0+aW5oZXJpdHM8SlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0PihnbG9iYWxP
YmplY3QtPnZtKCkpKQogICAgICAgICAsIG1fcHRyKGJ1ZmZlci5kYXRhKCkpCiAgICAgICAgICwg
bV9lbmQoYnVmZmVyLmRhdGEoKSArIGJ1ZmZlci5zaXplKCkpCiAgICAgICAgICwgbV92ZXJzaW9u
KDB4RkZGRkZGRkYpCkBAIC0yNTI1LDEyICsyNDg1LDEyIEBAIHByaXZhdGU6CiAKICAgICB2b2lk
IHB1dFByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZh
bHVlKQogICAgIHsKLSAgICAgICAgb2JqZWN0LT5wdXREaXJlY3RJbmRleChtX2xleGljYWxHbG9i
YWxPYmplY3QsIGluZGV4LCB2YWx1ZSk7CisgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0SW5kZXgo
Jm1fbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHZhbHVlKTsKICAgICB9CiAKICAgICB2b2lk
IHB1dFByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
LCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgb2JqZWN0LT5wdXREaXJlY3RNYXlCZUlu
ZGV4KG1fbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHksIHZhbHVlKTsKKyAgICAgICAgb2Jq
ZWN0LT5wdXREaXJlY3RNYXlCZUluZGV4KCZtX2xleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5
LCB2YWx1ZSk7CiAgICAgfQogCiAgICAgYm9vbCByZWFkRmlsZShSZWZQdHI8RmlsZT4mIGZpbGUp
CkBAIC0yNTYxLDEwICsyNTIxLDExIEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChmaWxlUGF0aC5p
c0VtcHR5KCkpCiAgICAgICAgICAgICBmaWxlUGF0aCA9IHBhdGgtPnN0cmluZygpOwogCi0gICAg
ICAgIGlmICghbV9jYW5DcmVhdGVET01PYmplY3QpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgYXV0byogY29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYg
KCFjb250ZXh0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGZpbGUgPSBG
aWxlOjpkZXNlcmlhbGl6ZShleGVjdXRpb25Db250ZXh0KG1fbGV4aWNhbEdsb2JhbE9iamVjdCks
IGZpbGVQYXRoLCBVUkwgeyB1cmwtPnN0cmluZygpIH0sIHR5cGUtPnN0cmluZygpLCBuYW1lLT5z
dHJpbmcoKSwgb3B0aW9uYWxMYXN0TW9kaWZpZWQpOworICAgICAgICBmaWxlID0gRmlsZTo6ZGVz
ZXJpYWxpemUoY29udGV4dCwgZmlsZVBhdGgsIFVSTCB7IHVybC0+c3RyaW5nKCkgfSwgdHlwZS0+
c3RyaW5nKCksIG5hbWUtPnN0cmluZygpLCBvcHRpb25hbExhc3RNb2RpZmllZCk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMjU5MCw3NyArMjU1MSw4OSBAQCBwcml2YXRlOgog
ICAgICAgICByZXR1cm4gcmVhZEFycmF5QnVmZmVySW1wbDx1aW50NjRfdD4oYXJyYXlCdWZmZXIp
OwogICAgIH0KIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMZW5ndGhUeXBlPgotICAgIGJvb2wg
cmVhZEFycmF5QnVmZmVyVmlld0ltcGwoVk0mIHZtLCBKU1ZhbHVlJiBhcnJheUJ1ZmZlclZpZXcp
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGVuZ3RoVHlwZT4gSlNWYWx1ZSByZWFkQXJyYXlCdWZm
ZXJWaWV3SW1wbCgpCiAgICAgewogICAgICAgICBBcnJheUJ1ZmZlclZpZXdTdWJ0YWcgYXJyYXlC
dWZmZXJWaWV3U3VidGFnOwogICAgICAgICBpZiAoIXJlYWRBcnJheUJ1ZmZlclZpZXdTdWJ0YWco
YXJyYXlCdWZmZXJWaWV3U3VidGFnKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIExlbmd0aFR5cGUgYnl0ZU9mZnNldDsKICAgICAg
ICAgaWYgKCFyZWFkKGJ5dGVPZmZzZXQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgTGVuZ3RoVHlwZSBieXRlTGVuZ3RoOwogICAg
ICAgICBpZiAoIXJlYWQoYnl0ZUxlbmd0aCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIEpTT2JqZWN0KiBhcnJheUJ1ZmZlck9iaiA9IGFzT2JqZWN0KHJlYWRUZXJtaW5hbCgp
KTsKLSAgICAgICAgaWYgKCFhcnJheUJ1ZmZlck9iaiB8fCAhYXJyYXlCdWZmZXJPYmotPmluaGVy
aXRzPEpTQXJyYXlCdWZmZXI+KHZtKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIHJldHVybiB7IH07CisgICAgICAgIGF1dG8gdGVybWluYWwgPSByZWFkVGVybWluYWwo
KTsKKyAgICAgICAgaWYgKCF0ZXJtaW5hbCkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAg
ICAgIGF1dG8qIGFycmF5QnVmZmVyT2JqID0gdGVybWluYWwuZ2V0T2JqZWN0KCk7CisgICAgICAg
IGlmICghYXJyYXlCdWZmZXJPYmogfHwgIWFycmF5QnVmZmVyT2JqLT5pbmhlcml0czxKU0FycmF5
QnVmZmVyPih2bSgpKSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CiAKICAgICAgICAgdW5zaWdu
ZWQgZWxlbWVudFNpemUgPSB0eXBlZEFycmF5RWxlbWVudFNpemUoYXJyYXlCdWZmZXJWaWV3U3Vi
dGFnKTsKICAgICAgICAgaWYgKCFlbGVtZW50U2l6ZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIExlbmd0aFR5cGUgbGVuZ3RoID0g
Ynl0ZUxlbmd0aCAvIGVsZW1lbnRTaXplOwogICAgICAgICBpZiAobGVuZ3RoICogZWxlbWVudFNp
emUgIT0gYnl0ZUxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IHJldHVybiB7IH07CiAKLSAgICAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlciA9
IHRvUG9zc2libHlTaGFyZWRBcnJheUJ1ZmZlcih2bSwgYXJyYXlCdWZmZXJPYmopOworICAgICAg
ICBSZWZQdHI8QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyID0gdG9Qb3NzaWJseVNoYXJlZEFycmF5
QnVmZmVyKHZtKCksIGFycmF5QnVmZmVyT2JqKTsKICAgICAgICAgc3dpdGNoIChhcnJheUJ1ZmZl
clZpZXdTdWJ0YWcpIHsKICAgICAgICAgY2FzZSBEYXRhVmlld1RhZzoKLSAgICAgICAgICAgIGFy
cmF5QnVmZmVyVmlldyA9IHRvSlMobV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBtX2dsb2JhbE9iamVj
dCwgRGF0YVZpZXc6OmNyZWF0ZShXVEZNb3ZlKGFycmF5QnVmZmVyKSwgYnl0ZU9mZnNldCwgbGVu
Z3RoKS5nZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVy
biBjcmVhdGVEYXRhVmlldyhXVEZNb3ZlKGFycmF5QnVmZmVyKSwgYnl0ZU9mZnNldCwgbGVuZ3Ro
KTsKICAgICAgICAgY2FzZSBJbnQ4QXJyYXlUYWc6Ci0gICAgICAgICAgICBhcnJheUJ1ZmZlclZp
ZXcgPSB0b0pTKG1fbGV4aWNhbEdsb2JhbE9iamVjdCwgbV9nbG9iYWxPYmplY3QsIEludDhBcnJh
eTo6dHJ5Q3JlYXRlKFdURk1vdmUoYXJyYXlCdWZmZXIpLCBieXRlT2Zmc2V0LCBsZW5ndGgpLmdl
dCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGNyZWF0
ZUFycmF5QnVmZmVyVmlldzxJbnQ4QXJyYXk+KFdURk1vdmUoYXJyYXlCdWZmZXIpLCBieXRlT2Zm
c2V0LCBsZW5ndGgpOwogICAgICAgICBjYXNlIFVpbnQ4QXJyYXlUYWc6Ci0gICAgICAgICAgICBh
cnJheUJ1ZmZlclZpZXcgPSB0b0pTKG1fbGV4aWNhbEdsb2JhbE9iamVjdCwgbV9nbG9iYWxPYmpl
Y3QsIFVpbnQ4QXJyYXk6OnRyeUNyZWF0ZShXVEZNb3ZlKGFycmF5QnVmZmVyKSwgYnl0ZU9mZnNl
dCwgbGVuZ3RoKS5nZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IHJldHVybiBjcmVhdGVBcnJheUJ1ZmZlclZpZXc8VWludDhBcnJheT4oV1RGTW92ZShhcnJheUJ1
ZmZlciksIGJ5dGVPZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgIGNhc2UgVWludDhDbGFtcGVkQXJy
YXlUYWc6Ci0gICAgICAgICAgICBhcnJheUJ1ZmZlclZpZXcgPSB0b0pTKG1fbGV4aWNhbEdsb2Jh
bE9iamVjdCwgbV9nbG9iYWxPYmplY3QsIFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGUoV1RG
TW92ZShhcnJheUJ1ZmZlciksIGJ5dGVPZmZzZXQsIGxlbmd0aCkuZ2V0KCkpOwotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlQXJyYXlCdWZmZXJWaWV3
PFVpbnQ4Q2xhbXBlZEFycmF5PihXVEZNb3ZlKGFycmF5QnVmZmVyKSwgYnl0ZU9mZnNldCwgbGVu
Z3RoKTsKICAgICAgICAgY2FzZSBJbnQxNkFycmF5VGFnOgotICAgICAgICAgICAgYXJyYXlCdWZm
ZXJWaWV3ID0gdG9KUyhtX2xleGljYWxHbG9iYWxPYmplY3QsIG1fZ2xvYmFsT2JqZWN0LCBJbnQx
NkFycmF5Ojp0cnlDcmVhdGUoV1RGTW92ZShhcnJheUJ1ZmZlciksIGJ5dGVPZmZzZXQsIGxlbmd0
aCkuZ2V0KCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4g
Y3JlYXRlQXJyYXlCdWZmZXJWaWV3PEludDE2QXJyYXk+KFdURk1vdmUoYXJyYXlCdWZmZXIpLCBi
eXRlT2Zmc2V0LCBsZW5ndGgpOwogICAgICAgICBjYXNlIFVpbnQxNkFycmF5VGFnOgotICAgICAg
ICAgICAgYXJyYXlCdWZmZXJWaWV3ID0gdG9KUyhtX2xleGljYWxHbG9iYWxPYmplY3QsIG1fZ2xv
YmFsT2JqZWN0LCBVaW50MTZBcnJheTo6dHJ5Q3JlYXRlKFdURk1vdmUoYXJyYXlCdWZmZXIpLCBi
eXRlT2Zmc2V0LCBsZW5ndGgpLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgcmV0dXJuIGNyZWF0ZUFycmF5QnVmZmVyVmlldzxVaW50MTZBcnJheT4oV1RGTW92
ZShhcnJheUJ1ZmZlciksIGJ5dGVPZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgIGNhc2UgSW50MzJB
cnJheVRhZzoKLSAgICAgICAgICAgIGFycmF5QnVmZmVyVmlldyA9IHRvSlMobV9sZXhpY2FsR2xv
YmFsT2JqZWN0LCBtX2dsb2JhbE9iamVjdCwgSW50MzJBcnJheTo6dHJ5Q3JlYXRlKFdURk1vdmUo
YXJyYXlCdWZmZXIpLCBieXRlT2Zmc2V0LCBsZW5ndGgpLmdldCgpKTsKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUFycmF5QnVmZmVyVmlldzxJbnQz
MkFycmF5PihXVEZNb3ZlKGFycmF5QnVmZmVyKSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKICAgICAg
ICAgY2FzZSBVaW50MzJBcnJheVRhZzoKLSAgICAgICAgICAgIGFycmF5QnVmZmVyVmlldyA9IHRv
SlMobV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBtX2dsb2JhbE9iamVjdCwgVWludDMyQXJyYXk6OnRy
eUNyZWF0ZShXVEZNb3ZlKGFycmF5QnVmZmVyKSwgYnl0ZU9mZnNldCwgbGVuZ3RoKS5nZXQoKSk7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVBcnJh
eUJ1ZmZlclZpZXc8VWludDMyQXJyYXk+KFdURk1vdmUoYXJyYXlCdWZmZXIpLCBieXRlT2Zmc2V0
LCBsZW5ndGgpOwogICAgICAgICBjYXNlIEZsb2F0MzJBcnJheVRhZzoKLSAgICAgICAgICAgIGFy
cmF5QnVmZmVyVmlldyA9IHRvSlMobV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBtX2dsb2JhbE9iamVj
dCwgRmxvYXQzMkFycmF5Ojp0cnlDcmVhdGUoV1RGTW92ZShhcnJheUJ1ZmZlciksIGJ5dGVPZmZz
ZXQsIGxlbmd0aCkuZ2V0KCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICByZXR1cm4gY3JlYXRlQXJyYXlCdWZmZXJWaWV3PEZsb2F0MzJBcnJheT4oV1RGTW92ZShhcnJh
eUJ1ZmZlciksIGJ5dGVPZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgIGNhc2UgRmxvYXQ2NEFycmF5
VGFnOgotICAgICAgICAgICAgYXJyYXlCdWZmZXJWaWV3ID0gdG9KUyhtX2xleGljYWxHbG9iYWxP
YmplY3QsIG1fZ2xvYmFsT2JqZWN0LCBGbG9hdDY0QXJyYXk6OnRyeUNyZWF0ZShXVEZNb3ZlKGFy
cmF5QnVmZmVyKSwgYnl0ZU9mZnNldCwgbGVuZ3RoKS5nZXQoKSk7Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVBcnJheUJ1ZmZlclZpZXc8RmxvYXQ2
NEFycmF5PihXVEZNb3ZlKGFycmF5QnVmZmVyKSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKICAgICAg
ICAgY2FzZSBCaWdJbnQ2NEFycmF5VGFnOgotICAgICAgICAgICAgYXJyYXlCdWZmZXJWaWV3ID0g
dG9KUyhtX2xleGljYWxHbG9iYWxPYmplY3QsIG1fZ2xvYmFsT2JqZWN0LCBCaWdJbnQ2NEFycmF5
Ojp0cnlDcmVhdGUoV1RGTW92ZShhcnJheUJ1ZmZlciksIGJ5dGVPZmZzZXQsIGxlbmd0aCkuZ2V0
KCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRl
QXJyYXlCdWZmZXJWaWV3PEJpZ0ludDY0QXJyYXk+KFdURk1vdmUoYXJyYXlCdWZmZXIpLCBieXRl
T2Zmc2V0LCBsZW5ndGgpOwogICAgICAgICBjYXNlIEJpZ1VpbnQ2NEFycmF5VGFnOgotICAgICAg
ICAgICAgYXJyYXlCdWZmZXJWaWV3ID0gdG9KUyhtX2xleGljYWxHbG9iYWxPYmplY3QsIG1fZ2xv
YmFsT2JqZWN0LCBCaWdVaW50NjRBcnJheTo6dHJ5Q3JlYXRlKFdURk1vdmUoYXJyYXlCdWZmZXIp
LCBieXRlT2Zmc2V0LCBsZW5ndGgpLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUFycmF5QnVmZmVyVmlldzxCaWdVaW50NjRBcnJheT4o
V1RGTW92ZShhcnJheUJ1ZmZlciksIGJ5dGVPZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4geyB9Owog
ICAgICAgICB9CiAgICAgfQogCi0gICAgYm9vbCByZWFkQXJyYXlCdWZmZXJWaWV3KFZNJiB2bSwg
SlNWYWx1ZSYgYXJyYXlCdWZmZXJWaWV3KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIExlbmd0aFR5
cGU+IEpTVmFsdWUgY3JlYXRlRGF0YVZpZXcoUmVmUHRyPEFycmF5QnVmZmVyPiYmIGJ1ZmZlciwg
TGVuZ3RoVHlwZSBvZmZzZXQsIExlbmd0aFR5cGUgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgaWYg
KCFidWZmZXIpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICBhdXRvIHZpZXcgPSBE
YXRhVmlldzo6Y3JlYXRlKFdURk1vdmUoYnVmZmVyKSwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAg
ICBpZiAoaXNET01HbG9iYWxPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiB3cmFwKHZpZXcu
Z2V0KCkpOworICAgICAgICByZXR1cm4gdmlldy0+d3JhcCgmbV9sZXhpY2FsR2xvYmFsT2JqZWN0
LCAmbV9nbG9iYWxPYmplY3QpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdD
bGFzcywgdHlwZW5hbWUgTGVuZ3RoVHlwZT4gSlNWYWx1ZSBjcmVhdGVBcnJheUJ1ZmZlclZpZXco
UmVmUHRyPEFycmF5QnVmZmVyPiYmIGJ1ZmZlciwgTGVuZ3RoVHlwZSBvZmZzZXQsIExlbmd0aFR5
cGUgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgaWYgKCFidWZmZXIpCisgICAgICAgICAgICByZXR1
cm4geyB9OworICAgICAgICBhdXRvIHZpZXcgPSBWaWV3Q2xhc3M6OnRyeUNyZWF0ZShXVEZNb3Zl
KGJ1ZmZlciksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAgaWYgKCF2aWV3KQorICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICAgICAgaWYgKGlzRE9NR2xvYmFsT2JqZWN0KCkpCisgICAgICAg
ICAgICByZXR1cm4gd3JhcCh2aWV3LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIHZpZXctPndyYXAo
Jm1fbGV4aWNhbEdsb2JhbE9iamVjdCwgJm1fZ2xvYmFsT2JqZWN0KTsKKyAgICB9CisKKyAgICBK
U1ZhbHVlIHJlYWRBcnJheUJ1ZmZlclZpZXcoKQogICAgIHsKICAgICAgICAgaWYgKG1fdmVyc2lv
biA8IDEwKQotICAgICAgICAgICAgcmV0dXJuIHJlYWRBcnJheUJ1ZmZlclZpZXdJbXBsPHVpbnQz
Ml90Pih2bSwgYXJyYXlCdWZmZXJWaWV3KTsKLSAgICAgICAgcmV0dXJuIHJlYWRBcnJheUJ1ZmZl
clZpZXdJbXBsPHVpbnQ2NF90Pih2bSwgYXJyYXlCdWZmZXJWaWV3KTsKKyAgICAgICAgICAgIHJl
dHVybiByZWFkQXJyYXlCdWZmZXJWaWV3SW1wbDx1aW50MzJfdD4oKTsKKyAgICAgICAgcmV0dXJu
IHJlYWRBcnJheUJ1ZmZlclZpZXdJbXBsPHVpbnQ2NF90PigpOwogICAgIH0KIAogICAgIGJvb2wg
cmVhZChWZWN0b3I8dWludDhfdD4mIHJlc3VsdCkKQEAgLTMwMjgsMjUgKzMwMDEsMjUgQEAgcHJp
dmF0ZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYm9vbCByZWFkQ3J5cHRv
S2V5KEpTVmFsdWUmIGNyeXB0b0tleSkKKyAgICBKU1ZhbHVlIHJlYWRDcnlwdG9LZXkoKQogICAg
IHsKICAgICAgICAgdWludDMyX3Qga2V5Rm9ybWF0VmVyc2lvbjsKICAgICAgICAgaWYgKCFyZWFk
KGtleUZvcm1hdFZlcnNpb24pIHx8IGtleUZvcm1hdFZlcnNpb24gPiBjdXJyZW50S2V5Rm9ybWF0
VmVyc2lvbikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiB7
IH07CiAKICAgICAgICAgaW50MzJfdCBleHRyYWN0YWJsZTsKICAgICAgICAgaWYgKCFyZWFkKGV4
dHJhY3RhYmxlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVy
biB7IH07CiAKICAgICAgICAgdWludDMyX3QgdXNhZ2VzQ291bnQ7CiAgICAgICAgIGlmICghcmVh
ZCh1c2FnZXNDb3VudCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBy
ZXR1cm4geyB9OwogCiAgICAgICAgIENyeXB0b0tleVVzYWdlQml0bWFwIHVzYWdlcyA9IDA7CiAg
ICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCB1c2FnZXNDb3VudDsgKytpKSB7CiAgICAg
ICAgICAgICBDcnlwdG9LZXlVc2FnZVRhZyB1c2FnZTsKICAgICAgICAgICAgIGlmICghcmVhZCh1
c2FnZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgICAgICAgICBzd2l0Y2ggKHVzYWdlKSB7CiAgICAgICAgICAgICBjYXNl
IENyeXB0b0tleVVzYWdlVGFnOjpFbmNyeXB0OgogICAgICAgICAgICAgICAgIHVzYWdlcyB8PSBD
cnlwdG9LZXlVc2FnZUVuY3J5cHQ7CkBAIC0zMDc3LDM5ICszMDUwLDUwIEBAIHByaXZhdGU6CiAK
ICAgICAgICAgQ3J5cHRvS2V5Q2xhc3NTdWJ0YWcgY3J5cHRvS2V5Q2xhc3M7CiAgICAgICAgIGlm
ICghcmVhZChjcnlwdG9LZXlDbGFzcykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICByZXR1cm4geyB9OwogICAgICAgICBSZWZQdHI8Q3J5cHRvS2V5PiByZXN1bHQ7CiAg
ICAgICAgIHN3aXRjaCAoY3J5cHRvS2V5Q2xhc3MpIHsKICAgICAgICAgY2FzZSBDcnlwdG9LZXlD
bGFzc1N1YnRhZzo6SE1BQzoKICAgICAgICAgICAgIGlmICghcmVhZEhNQUNLZXkoZXh0cmFjdGFi
bGUsIHVzYWdlcywgcmVzdWx0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IENyeXB0b0tleUNsYXNzU3VidGFnOjpBRVM6CiAgICAgICAgICAgICBpZiAoIXJlYWRBRVNLZXko
ZXh0cmFjdGFibGUsIHVzYWdlcywgcmVzdWx0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIENyeXB0b0tleUNsYXNzU3VidGFnOjpSU0E6CiAgICAgICAgICAgICBpZiAoIXJl
YWRSU0FLZXkoZXh0cmFjdGFibGUsIHVzYWdlcywgcmVzdWx0KSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIENyeXB0b0tleUNsYXNzU3VidGFnOjpFQzoKICAgICAgICAgICAg
IGlmICghcmVhZEVDS2V5KGV4dHJhY3RhYmxlLCB1c2FnZXMsIHJlc3VsdCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBDcnlwdG9LZXlDbGFzc1N1YnRhZzo6UmF3OgogICAg
ICAgICAgICAgaWYgKCFyZWFkUmF3S2V5KHVzYWdlcywgcmVzdWx0KSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNyeXB0b0tleSA9IGdldEpTVmFsdWUocmVzdWx0
LmdldCgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB3cmFwKHJlc3Vs
dC5nZXQoKSk7CiAgICAgfQogI2VuZGlmCiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPgotICAgIEpT
VmFsdWUgZ2V0SlNWYWx1ZShUJiYgbmF0aXZlT2JqKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IEpTVmFsdWUgd3JhcChUJiYgd3JhcHBlZCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKG1f
bGV4aWNhbEdsb2JhbE9iamVjdCwganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obV9nbG9iYWxP
YmplY3QpLCBzdGQ6OmZvcndhcmQ8VD4obmF0aXZlT2JqKSk7CisgICAgICAgIGlmICghaXNET01H
bG9iYWxPYmplY3QoKSkgeworICAgICAgICAgICAgZmFpbCgpOworICAgICAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9KUyhsZXhpY2FsRE9NR2xvYmFsT2Jq
ZWN0KCksICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbV9nbG9iYWxPYmplY3QpLCBzdGQ6
OmZvcndhcmQ8VD4od3JhcHBlZCkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IEpTVmFsdWUgd3JhcE5ld2x5Q3JlYXRlZChUJiYgd3JhcHBlZCkKKyAgICB7CisgICAgICAgIGlm
ICghaXNET01HbG9iYWxPYmplY3QoKSkgeworICAgICAgICAgICAgZmFpbCgpOworICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRl
ZChsZXhpY2FsRE9NR2xvYmFsT2JqZWN0KCksICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigm
bV9nbG9iYWxPYmplY3QpLCBzdGQ6OmZvcndhcmQ8VD4od3JhcHBlZCkpOwogICAgIH0KIAogICAg
IHRlbXBsYXRlPGNsYXNzIFQ+CkBAIC0zMTI4LDcgKzMxMTIsNyBAQCBwcml2YXRlOgogICAgICAg
ICBpZiAoIXJlYWQodykpCiAgICAgICAgICAgICByZXR1cm4geyB9OwogCi0gICAgICAgIHJldHVy
biB0b0pTTmV3bHlDcmVhdGVkKG1fbGV4aWNhbEdsb2JhbE9iamVjdCwganNDYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4obV9nbG9iYWxPYmplY3QpLCBUOjpjcmVhdGUoeCwgeSwgeiwgdykpOworICAg
ICAgICByZXR1cm4gd3JhcE5ld2x5Q3JlYXRlZChUOjpjcmVhdGUoeCwgeSwgeiwgdykpOwogICAg
IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIFQ+CkBAIC0zMTU5LDcgKzMxNDMsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIHJldHVybiB7IH07CiAKICAgICAgICAgICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IG1hdHJpeChtMTEsIG0xMiwgbTIxLCBtMjIsIG00MSwgbTQyKTsKLSAgICAgICAg
ICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKG1fbGV4aWNhbEdsb2JhbE9iamVjdCwganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4obV9nbG9iYWxPYmplY3QpLCBUOjpjcmVhdGUoV1RGTW92ZSht
YXRyaXgpLCBET01NYXRyaXhSZWFkT25seTo6SXMyRDo6WWVzKSk7CisgICAgICAgICAgICByZXR1
cm4gd3JhcE5ld2x5Q3JlYXRlZChUOjpjcmVhdGUoV1RGTW92ZShtYXRyaXgpLCBET01NYXRyaXhS
ZWFkT25seTo6SXMyRDo6WWVzKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBkb3Vi
bGUgbTExOwogICAgICAgICAgICAgaWYgKCFyZWFkKG0xMSkpCkBAIC0zMjExLDcgKzMxOTUsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiB7IH07CiAKICAgICAgICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeChtMTEsIG0xMiwgbTEzLCBtMTQsIG0yMSwgbTIyLCBt
MjMsIG0yNCwgbTMxLCBtMzIsIG0zMywgbTM0LCBtNDEsIG00MiwgbTQzLCBtNDQpOwotICAgICAg
ICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQobV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihtX2dsb2JhbE9iamVjdCksIFQ6OmNyZWF0ZShXVEZNb3Zl
KG1hdHJpeCksIERPTU1hdHJpeFJlYWRPbmx5OjpJczJEOjpObykpOworICAgICAgICAgICAgcmV0
dXJuIHdyYXBOZXdseUNyZWF0ZWQoVDo6Y3JlYXRlKFdURk1vdmUobWF0cml4KSwgRE9NTWF0cml4
UmVhZE9ubHk6OklzMkQ6Ok5vKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMyMzEsNyArMzIx
NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGlmICghcmVhZChoZWlnaHQpKQogICAgICAgICAgICAg
cmV0dXJuIHsgfTsKIAotICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChtX2xleGljYWxH
bG9iYWxPYmplY3QsIGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KG1fZ2xvYmFsT2JqZWN0KSwg
VDo6Y3JlYXRlKHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgcmV0dXJuIHdyYXBOZXds
eUNyZWF0ZWQoVDo6Y3JlYXRlKHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKICAgICB9CiAKICAgICBz
dGQ6Om9wdGlvbmFsPERPTVBvaW50SW5pdD4gcmVhZERPTVBvaW50SW5pdCgpCkBAIC0zMjY0LDcg
KzMyNDgsNyBAQCBwcml2YXRlOgogICAgICAgICBpZiAoIXA0KQogICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWUoKTsKIAotICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChtX2xleGljYWxH
bG9iYWxPYmplY3QsIGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KG1fZ2xvYmFsT2JqZWN0KSwg
RE9NUXVhZDo6Y3JlYXRlKHAxLnZhbHVlKCksIHAyLnZhbHVlKCksIHAzLnZhbHVlKCksIHA0LnZh
bHVlKCkpKTsKKyAgICAgICAgcmV0dXJuIHdyYXBOZXdseUNyZWF0ZWQoRE9NUXVhZDo6Y3JlYXRl
KHAxLnZhbHVlKCksIHAyLnZhbHVlKCksIHAzLnZhbHVlKCksIHA0LnZhbHVlKCkpKTsKICAgICB9
CiAKICAgICBKU1ZhbHVlIHJlYWRUcmFuc2ZlcnJlZEltYWdlQml0bWFwKCkKQEAgLTMyNzksOCAr
MzI2Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIGlmICghbV9pbWFnZUJpdG1hcHNbaW5kZXhdKQog
ICAgICAgICAgICAgbV9pbWFnZUJpdG1hcHNbaW5kZXhdID0gSW1hZ2VCaXRtYXA6OmNyZWF0ZShX
VEZNb3ZlKG1fYmFja2luZ1N0b3Jlcy5hdChpbmRleCkpKTsKIAotICAgICAgICBhdXRvIGJpdG1h
cCA9IG1faW1hZ2VCaXRtYXBzW2luZGV4XS5nZXQoKTsKLSAgICAgICAgcmV0dXJuIGdldEpTVmFs
dWUoYml0bWFwKTsKKyAgICAgICAgcmV0dXJuIHdyYXAobV9pbWFnZUJpdG1hcHNbaW5kZXhdLmdl
dCgpKTsKICAgICB9CiAKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBU19JTl9XT1JLRVJTKQpA
QCAtMzI5MywxMSArMzI3NiwxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWUoKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghbV9vZmZzY3JlZW5DYW52YXNlc1tpbmRl
eF0pCi0gICAgICAgICAgICBtX29mZnNjcmVlbkNhbnZhc2VzW2luZGV4XSA9IE9mZnNjcmVlbkNh
bnZhczo6Y3JlYXRlKCpleGVjdXRpb25Db250ZXh0KG1fbGV4aWNhbEdsb2JhbE9iamVjdCksIFdU
Rk1vdmUobV9kZXRhY2hlZE9mZnNjcmVlbkNhbnZhc2VzLmF0KGluZGV4KSkpOwotCi0gICAgICAg
IGF1dG8gb2Zmc2NyZWVuQ2FudmFzID0gbV9vZmZzY3JlZW5DYW52YXNlc1tpbmRleF0uZ2V0KCk7
Ci0gICAgICAgIHJldHVybiBnZXRKU1ZhbHVlKG9mZnNjcmVlbkNhbnZhcyk7CisgICAgICAgIGF1
dG8mIGNhbnZhcyA9IG1fb2Zmc2NyZWVuQ2FudmFzZXNbaW5kZXhdOworICAgICAgICBpZiAoIWNh
bnZhcykgeworICAgICAgICAgICAgYXV0byogY29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQoKTsK
KyAgICAgICAgICAgIGlmICghY29udGV4dCkgeworICAgICAgICAgICAgICAgIGZhaWwoKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2Fu
dmFzID0gT2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGUoKmNvbnRleHQsIFdURk1vdmUobV9kZXRhY2hl
ZE9mZnNjcmVlbkNhbnZhc2VzLmF0KGluZGV4KSkpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB3cmFwKGNhbnZhcy5nZXQoKSk7CiAgICAgfQogI2VuZGlmCiAKQEAgLTMzNDAsMTEgKzMzMjgs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgZmluZ2VycHJpbnRzLnVuY2hlY2tlZEFwcGVuZChS
VENDZXJ0aWZpY2F0ZTo6RHRsc0ZpbmdlcnByaW50IHsgYWxnb3JpdGhtLT5zdHJpbmcoKSwgdmFs
dWUtPnN0cmluZygpIH0pOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFtX2NhbkNyZWF0ZURP
TU9iamVjdCkKLSAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RFbXB0eU9iamVjdChtX2xleGlj
YWxHbG9iYWxPYmplY3QsIG1fZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSk7Ci0KLSAg
ICAgICAgYXV0byBydGNDZXJ0aWZpY2F0ZSA9IFJUQ0NlcnRpZmljYXRlOjpjcmVhdGUoU2VjdXJp
dHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcob3JpZ2luLT5zdHJpbmcoKSksIGV4cGlyZXMsIFdU
Rk1vdmUoZmluZ2VycHJpbnRzKSwgY2VydGlmaWNhdGUtPnRha2VTdHJpbmcoKSwga2V5ZWRNYXRl
cmlhbC0+dGFrZVN0cmluZygpKTsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQobV9s
ZXhpY2FsR2xvYmFsT2JqZWN0LCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihtX2dsb2JhbE9i
amVjdCksIFdURk1vdmUocnRjQ2VydGlmaWNhdGUpKTsKKyAgICAgICAgcmV0dXJuIHdyYXBOZXds
eUNyZWF0ZWQoUlRDQ2VydGlmaWNhdGU6OmNyZWF0ZShTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJv
bVN0cmluZyhvcmlnaW4tPnN0cmluZygpKSwgZXhwaXJlcywgV1RGTW92ZShmaW5nZXJwcmludHMp
LCBjZXJ0aWZpY2F0ZS0+dGFrZVN0cmluZygpLCBrZXllZE1hdGVyaWFsLT50YWtlU3RyaW5nKCkp
KTsKICAgICB9CiAKICAgICBKU1ZhbHVlIHJlYWRSVENEYXRhQ2hhbm5lbCgpCkBAIC0zMzU2LDEy
ICszMzQwLDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAg
ICAgICB9CiAKKyAgICAgICAgYXV0byYgY2hhbm5lbCA9IG1fcnRjRGF0YUNoYW5uZWxzW2luZGV4
XTsKICAgICAgICAgaWYgKCFtX3J0Y0RhdGFDaGFubmVsc1tpbmRleF0pIHsKICAgICAgICAgICAg
IGF1dG8gZGV0YWNoZWRDaGFubmVsID0gV1RGTW92ZShtX2RldGFjaGVkUlRDRGF0YUNoYW5uZWxz
LmF0KGluZGV4KSk7Ci0gICAgICAgICAgICBtX3J0Y0RhdGFDaGFubmVsc1tpbmRleF0gPSBSVENE
YXRhQ2hhbm5lbDo6Y3JlYXRlKCpleGVjdXRpb25Db250ZXh0KG1fbGV4aWNhbEdsb2JhbE9iamVj
dCksIGRldGFjaGVkQ2hhbm5lbC0+aWRlbnRpZmllciwgV1RGTW92ZShkZXRhY2hlZENoYW5uZWwt
PmxhYmVsKSwgV1RGTW92ZShkZXRhY2hlZENoYW5uZWwtPm9wdGlvbnMpLCBkZXRhY2hlZENoYW5u
ZWwtPnN0YXRlKTsKKyAgICAgICAgICAgIGF1dG8qIGNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0
KCk7CisgICAgICAgICAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICBmYWlsKCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGNoYW5uZWwgPSBSVENEYXRhQ2hhbm5lbDo6Y3JlYXRlKCpjb250ZXh0LCBkZXRhY2hlZENoYW5u
ZWwtPmlkZW50aWZpZXIsIFdURk1vdmUoZGV0YWNoZWRDaGFubmVsLT5sYWJlbCksIFdURk1vdmUo
ZGV0YWNoZWRDaGFubmVsLT5vcHRpb25zKSwgZGV0YWNoZWRDaGFubmVsLT5zdGF0ZSk7CiAgICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShtX3J0Y0RhdGFDaGFubmVsc1tpbmRl
eF0uZ2V0KCkpOworICAgICAgICByZXR1cm4gd3JhcChjaGFubmVsLmdldCgpKTsKICAgICB9CiAj
ZW5kaWYKIApAQCAtMzM4Myw3ICszMzcyLDEzIEBAIHByaXZhdGU6CiAgICAgICAgIGF1dG8gaW1h
Z2VEYXRhU2l6ZSA9IGxvZ2ljYWxTaXplOwogICAgICAgICBpbWFnZURhdGFTaXplLnNjYWxlKHJl
c29sdXRpb25TY2FsZSk7CiAKLSAgICAgICAgYXV0byBidWZmZXIgPSBJbWFnZUJpdG1hcDo6Y3Jl
YXRlSW1hZ2VCdWZmZXIoKmV4ZWN1dGlvbkNvbnRleHQobV9sZXhpY2FsR2xvYmFsT2JqZWN0KSwg
bG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIGNvbG9yU3BhY2UsIHJl
c29sdXRpb25TY2FsZSk7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0
KCk7CisgICAgICAgIGlmICghY29udGV4dCkgeworICAgICAgICAgICAgZmFpbCgpOworICAgICAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gYnVmZmVyID0gSW1h
Z2VCaXRtYXA6OmNyZWF0ZUltYWdlQnVmZmVyKCpjb250ZXh0LCBsb2dpY2FsU2l6ZSwgUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgY29sb3JTcGFjZSwgcmVzb2x1dGlvblNjYWxlKTsKICAg
ICAgICAgaWYgKCFidWZmZXIpIHsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlKCk7CkBAIC0zMzk4LDggKzMzOTMsNyBAQCBwcml2YXRlOgogCiAgICAgICAg
IGJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIoV1RGTW92ZSgqcGl4ZWxCdWZmZXIpLCB7IEludFBvaW50
Ojp6ZXJvKCksIGxvZ2ljYWxTaXplIH0pOwogCi0gICAgICAgIGF1dG8gYml0bWFwID0gSW1hZ2VC
aXRtYXA6OmNyZWF0ZShJbWFnZUJpdG1hcEJhY2tpbmcoV1RGTW92ZShidWZmZXIpLCBPcHRpb25T
ZXQ8U2VyaWFsaXphdGlvblN0YXRlPjo6ZnJvbVJhdyhzZXJpYWxpemF0aW9uU3RhdGUpKSk7Ci0g
ICAgICAgIHJldHVybiBnZXRKU1ZhbHVlKGJpdG1hcCk7CisgICAgICAgIHJldHVybiB3cmFwKElt
YWdlQml0bWFwOjpjcmVhdGUoSW1hZ2VCaXRtYXBCYWNraW5nKFdURk1vdmUoYnVmZmVyKSwgT3B0
aW9uU2V0PFNlcmlhbGl6YXRpb25TdGF0ZT46OmZyb21SYXcoc2VyaWFsaXphdGlvblN0YXRlKSkp
KTsKICAgICB9CiAKICAgICBKU1ZhbHVlIHJlYWRET01FeGNlcHRpb24oKQpAQCAtMzQxMCw4ICsz
NDA0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgQ2FjaGVkU3RyaW5nUmVmIG5hbWU7CiAgICAgICAg
IGlmICghcmVhZFN0cmluZ0RhdGEobmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgp
OwotICAgICAgICBhdXRvIGV4Y2VwdGlvbiA9IERPTUV4Y2VwdGlvbjo6Y3JlYXRlKG1lc3NhZ2Ut
PnN0cmluZygpLCBuYW1lLT5zdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiBnZXRKU1ZhbHVlKGV4
Y2VwdGlvbik7CisgICAgICAgIHJldHVybiB3cmFwKERPTUV4Y2VwdGlvbjo6Y3JlYXRlKG1lc3Nh
Z2UtPnN0cmluZygpLCBuYW1lLT5zdHJpbmcoKSkpOwogICAgIH0KIAogICAgIEpTVmFsdWUgcmVh
ZEJpZ0ludCgpCkBAIC0zNDI3LDcgKzM0MjAsNyBAQCBwcml2YXRlOgogI2lmIFVTRShCSUdJTlQz
MikKICAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKDApOwogI2Vsc2UKLSAgICAgICAgICAg
IEpTQmlnSW50KiBiaWdJbnQgPSBKU0JpZ0ludDo6dHJ5Q3JlYXRlWmVybyhtX2xleGljYWxHbG9i
YWxPYmplY3QtPnZtKCkpOworICAgICAgICAgICAgSlNCaWdJbnQqIGJpZ0ludCA9IEpTQmlnSW50
Ojp0cnlDcmVhdGVaZXJvKHZtKCkpOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFiaWdJbnQp
KSB7CiAgICAgICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlKCk7CkBAIC0zNDUxLDE0ICszNDQ0LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBqc0JpZ0ludDMyKHN0YXRpY19jYXN0PGludDMyX3Q+KGRpZ2l0NjQpKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIEFTU0VSVChkaWdpdDY0ICE9IDApOwotICAgICAgICAg
ICAgSlNCaWdJbnQqIGJpZ0ludCA9IEpTQmlnSW50Ojp0cnlDcmVhdGVXaXRoTGVuZ3RoKG1fbGV4
aWNhbEdsb2JhbE9iamVjdC0+dm0oKSwgMSk7CisgICAgICAgICAgICBKU0JpZ0ludCogYmlnSW50
ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5ndGgodm0oKSwgMSk7CiAgICAgICAgICAgICBp
ZiAoIWJpZ0ludCkgewogICAgICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYmlnSW50LT5zZXRE
aWdpdCgwLCBkaWdpdDY0KTsKICAgICAgICAgICAgIGJpZ0ludC0+c2V0U2lnbihzaWduKTsKLSAg
ICAgICAgICAgIGJpZ0ludCA9IGJpZ0ludC0+dHJ5UmlnaHRUcmltKG1fbGV4aWNhbEdsb2JhbE9i
amVjdC0+dm0oKSk7CisgICAgICAgICAgICBiaWdJbnQgPSBiaWdJbnQtPnRyeVJpZ2h0VHJpbSh2
bSgpKTsKICAgICAgICAgICAgIGlmICghYmlnSW50KSB7CiAgICAgICAgICAgICAgICAgZmFpbCgp
OwogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CkBAIC0zNDY5LDcgKzM0NjIsNyBA
QCBwcml2YXRlOgogI2VuZGlmCiAgICAgICAgIEpTQmlnSW50KiBiaWdJbnQgPSBudWxscHRyOwog
ICAgICAgICBpZiBjb25zdGV4cHIgKHNpemVvZihKU0JpZ0ludDo6RGlnaXQpID09IHNpemVvZih1
aW50NjRfdCkpIHsKLSAgICAgICAgICAgIGJpZ0ludCA9IEpTQmlnSW50Ojp0cnlDcmVhdGVXaXRo
TGVuZ3RoKG1fbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSwgbGVuZ3RoSW5VaW50NjQpOworICAg
ICAgICAgICAgYmlnSW50ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5ndGgodm0oKSwgbGVu
Z3RoSW5VaW50NjQpOwogICAgICAgICAgICAgaWYgKCFiaWdJbnQpIHsKICAgICAgICAgICAgICAg
ICBmYWlsKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKQEAgLTM0ODIsNyAr
MzQ3NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBBU1NFUlQoc2l6ZW9mKEpTQmlnSW50OjpEaWdpdCkgPT0gc2l6ZW9mKHVpbnQzMl90
KSk7Ci0gICAgICAgICAgICBiaWdJbnQgPSBKU0JpZ0ludDo6dHJ5Q3JlYXRlV2l0aExlbmd0aCht
X2xleGljYWxHbG9iYWxPYmplY3QtPnZtKCksIGxlbmd0aEluVWludDY0ICogMik7CisgICAgICAg
ICAgICBiaWdJbnQgPSBKU0JpZ0ludDo6dHJ5Q3JlYXRlV2l0aExlbmd0aCh2bSgpLCBsZW5ndGhJ
blVpbnQ2NCAqIDIpOwogICAgICAgICAgICAgaWYgKCFiaWdJbnQpIHsKICAgICAgICAgICAgICAg
ICBmYWlsKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKQEAgLTM0OTYsNyAr
MzQ4OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgYmln
SW50LT5zZXRTaWduKHNpZ24pOwotICAgICAgICBiaWdJbnQgPSBiaWdJbnQtPnRyeVJpZ2h0VHJp
bShtX2xleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOworICAgICAgICBiaWdJbnQgPSBiaWdJbnQt
PnRyeVJpZ2h0VHJpbSh2bSgpKTsKICAgICAgICAgaWYgKCFiaWdJbnQpIHsKICAgICAgICAgICAg
IGZhaWwoKTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CkBAIC0zNTI4LDE0ICszNTIx
LDE0IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgVHJ1ZVRhZzoKICAgICAgICAgICAgIHJldHVy
biBqc0Jvb2xlYW4odHJ1ZSk7CiAgICAgICAgIGNhc2UgRmFsc2VPYmplY3RUYWc6IHsKLSAgICAg
ICAgICAgIEJvb2xlYW5PYmplY3QqIG9iaiA9IEJvb2xlYW5PYmplY3Q6OmNyZWF0ZShtX2xleGlj
YWxHbG9iYWxPYmplY3QtPnZtKCksIG1fZ2xvYmFsT2JqZWN0LT5ib29sZWFuT2JqZWN0U3RydWN0
dXJlKCkpOwotICAgICAgICAgICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKG1fbGV4aWNhbEdsb2Jh
bE9iamVjdC0+dm0oKSwganNCb29sZWFuKGZhbHNlKSk7CisgICAgICAgICAgICBCb29sZWFuT2Jq
ZWN0KiBvYmogPSBCb29sZWFuT2JqZWN0OjpjcmVhdGUodm0oKSwgbV9nbG9iYWxPYmplY3QuYm9v
bGVhbk9iamVjdFN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIG9iai0+c2V0SW50ZXJuYWxWYWx1
ZSh2bSgpLCBqc0Jvb2xlYW4oZmFsc2UpKTsKICAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5k
V2l0aENyYXNoT25PdmVyZmxvdyhvYmopOwogICAgICAgICAgICAgcmV0dXJuIG9iajsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIFRydWVPYmplY3RUYWc6IHsKLSAgICAgICAgICAgIEJvb2xlYW5P
YmplY3QqIG9iaiA9IEJvb2xlYW5PYmplY3Q6OmNyZWF0ZShtX2xleGljYWxHbG9iYWxPYmplY3Qt
PnZtKCksIG1fZ2xvYmFsT2JqZWN0LT5ib29sZWFuT2JqZWN0U3RydWN0dXJlKCkpOwotICAgICAg
ICAgICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKG1fbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSwg
anNCb29sZWFuKHRydWUpKTsKKyAgICAgICAgICAgIEJvb2xlYW5PYmplY3QqIG9iaiA9IEJvb2xl
YW5PYmplY3Q6OmNyZWF0ZSh2bSgpLCBtX2dsb2JhbE9iamVjdC5ib29sZWFuT2JqZWN0U3RydWN0
dXJlKCkpOworICAgICAgICAgICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKHZtKCksIGpzQm9vbGVh
bih0cnVlKSk7CiAgICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVuZFdpdGhDcmFzaE9uT3ZlcmZs
b3cob2JqKTsKICAgICAgICAgICAgIHJldHVybiBvYmo7CiAgICAgICAgIH0KQEAgLTM1NTEsNDkg
KzM1NDQsNDMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGRvdWJsZSBkOwogICAgICAgICAgICAg
aWYgKCFyZWFkKGQpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0gICAgICAg
ICAgICBOdW1iZXJPYmplY3QqIG9iaiA9IGNvbnN0cnVjdE51bWJlcihtX2dsb2JhbE9iamVjdCwg
anNOdW1iZXIoZCkpOwotICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmRXaXRoQ3Jhc2hPbk92
ZXJmbG93KG9iaik7Ci0gICAgICAgICAgICByZXR1cm4gb2JqOworICAgICAgICAgICAgYXV0byog
b2JqZWN0ID0gY29uc3RydWN0TnVtYmVyKCZtX2dsb2JhbE9iamVjdCwganNOdW1iZXIoZCkpOwor
ICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmRXaXRoQ3Jhc2hPbk92ZXJmbG93KG9iamVjdCk7
CisgICAgICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQmln
SW50T2JqZWN0VGFnOiB7CiAgICAgICAgICAgICBKU1ZhbHVlIGJpZ0ludCA9IHJlYWRCaWdJbnQo
KTsKICAgICAgICAgICAgIGlmICghYmlnSW50KQogICAgICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlKCk7CiAgICAgICAgICAgICBBU1NFUlQoYmlnSW50LmlzQmlnSW50KCkpOwotICAgICAgICAg
ICAgQmlnSW50T2JqZWN0KiBvYmogPSBCaWdJbnRPYmplY3Q6OmNyZWF0ZShtX2xleGljYWxHbG9i
YWxPYmplY3QtPnZtKCksIG1fZ2xvYmFsT2JqZWN0LCBiaWdJbnQpOwotICAgICAgICAgICAgbV9n
Y0J1ZmZlci5hcHBlbmRXaXRoQ3Jhc2hPbk92ZXJmbG93KG9iaik7Ci0gICAgICAgICAgICByZXR1
cm4gb2JqOworICAgICAgICAgICAgYXV0byogb2JqZWN0ID0gQmlnSW50T2JqZWN0OjpjcmVhdGUo
dm0oKSwgJm1fZ2xvYmFsT2JqZWN0LCBiaWdJbnQpOworICAgICAgICAgICAgbV9nY0J1ZmZlci5h
cHBlbmRXaXRoQ3Jhc2hPbk92ZXJmbG93KG9iamVjdCk7CisgICAgICAgICAgICByZXR1cm4gb2Jq
ZWN0OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRGF0ZVRhZzogewogICAgICAgICAgICAgZG91
YmxlIGQ7CiAgICAgICAgICAgICBpZiAoIXJlYWQoZCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWUoKTsKLSAgICAgICAgICAgIHJldHVybiBEYXRlSW5zdGFuY2U6OmNyZWF0ZShtX2xl
eGljYWxHbG9iYWxPYmplY3QtPnZtKCksIG1fZ2xvYmFsT2JqZWN0LT5kYXRlU3RydWN0dXJlKCks
IGQpOworICAgICAgICAgICAgcmV0dXJuIERhdGVJbnN0YW5jZTo6Y3JlYXRlKHZtKCksIG1fZ2xv
YmFsT2JqZWN0LmRhdGVTdHJ1Y3R1cmUoKSwgZCk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBG
aWxlVGFnOiB7CiAgICAgICAgICAgICBSZWZQdHI8RmlsZT4gZmlsZTsKICAgICAgICAgICAgIGlm
ICghcmVhZEZpbGUoZmlsZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAg
ICAgICAgICAgIGlmICghbV9jYW5DcmVhdGVET01PYmplY3QpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGpzTnVsbCgpOwotICAgICAgICAgICAgcmV0dXJuIHRvSlMobV9sZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihtX2dsb2JhbE9iamVjdCksIGZpbGUuZ2V0
KCkpOworICAgICAgICAgICAgcmV0dXJuIHdyYXAoZmlsZS5nZXQoKSk7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBGaWxlTGlzdFRhZzogewogICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0g
MDsKICAgICAgICAgICAgIGlmICghcmVhZChsZW5ndGgpKQogICAgICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlKCk7Ci0gICAgICAgICAgICBBU1NFUlQobV9nbG9iYWxPYmplY3QtPmluaGVyaXRz
PEpTRE9NR2xvYmFsT2JqZWN0PihtX2dsb2JhbE9iamVjdC0+dm0oKSkpOwogICAgICAgICAgICAg
VmVjdG9yPFJlZjxGaWxlPj4gZmlsZXM7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICBSZWZQdHI8RmlsZT4gZmlsZTsK
ICAgICAgICAgICAgICAgICBpZiAoIXJlYWRGaWxlKGZpbGUpKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZSgpOwotICAgICAgICAgICAgICAgIGlmIChtX2NhbkNyZWF0ZURPTU9i
amVjdCkKLSAgICAgICAgICAgICAgICAgICAgZmlsZXMuYXBwZW5kKGZpbGUucmVsZWFzZU5vbk51
bGwoKSk7CisgICAgICAgICAgICAgICAgZmlsZXMuYXBwZW5kKGZpbGUucmVsZWFzZU5vbk51bGwo
KSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIW1fY2FuQ3JlYXRlRE9NT2JqZWN0
KQotICAgICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKLSAgICAgICAgICAgIHJldHVybiBn
ZXRKU1ZhbHVlKEZpbGVMaXN0OjpjcmVhdGUoV1RGTW92ZShmaWxlcykpLmdldCgpKTsKKyAgICAg
ICAgICAgIHJldHVybiB3cmFwKEZpbGVMaXN0OjpjcmVhdGUoV1RGTW92ZShmaWxlcykpLmdldCgp
KTsKICAgICAgICAgfQogICAgICAgICBjYXNlIEltYWdlRGF0YVRhZzogewogICAgICAgICAgICAg
dWludDMyX3Qgd2lkdGg7CkBAIC0zNjIzLDkgKzM2MTAsNiBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlm
ICghbV9pc0RPTUdsb2JhbE9iamVjdCkKLSAgICAgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7
Ci0KICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGVVbmluaXRpYWxp
emVkKHdpZHRoLCBoZWlnaHQsIHJlc3VsdENvbG9yU3BhY2UpOwogICAgICAgICAgICAgaWYgKHJl
c3VsdC5oYXNFeGNlcHRpb24oKSkgewogICAgICAgICAgICAgICAgIGZhaWwoKTsKQEAgLTM2MzUs
NyArMzYxOSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbWVtY3B5KHJlc3VsdC5yZXR1
cm5WYWx1ZSgpLT5kYXRhKCkuZGF0YSgpLCBidWZmZXJTdGFydCwgbGVuZ3RoKTsKICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXN1bHQucmV0dXJuVmFsdWUoKS0+ZGF0YSgpLnpl
cm9GaWxsKCk7Ci0gICAgICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShyZXN1bHQucmVsZWFzZVJl
dHVyblZhbHVlKCkpOworICAgICAgICAgICAgcmV0dXJuIHdyYXAocmVzdWx0LnJlbGVhc2VSZXR1
cm5WYWx1ZSgpKTsKICAgICAgICAgfQogICAgICAgICBjYXNlIEJsb2JUYWc6IHsKICAgICAgICAg
ICAgIENhY2hlZFN0cmluZ1JlZiB1cmw7CkBAIC0zNjQ3LDMxICszNjMxLDI4IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICB1aW50NjRfdCBzaXplID0gMDsKICAgICAgICAgICAgIGlmICghcmVhZChz
aXplKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwotICAgICAgICAgICAgaWYg
KCFtX2NhbkNyZWF0ZURPTU9iamVjdCkKLSAgICAgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7
Ci0gICAgICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShCbG9iOjpkZXNlcmlhbGl6ZShleGVjdXRp
b25Db250ZXh0KG1fbGV4aWNhbEdsb2JhbE9iamVjdCksIFVSTCB7IHVybC0+c3RyaW5nKCkgfSwg
dHlwZS0+c3RyaW5nKCksIHNpemUsIGJsb2JGaWxlUGF0aEZvckJsb2JVUkwodXJsLT5zdHJpbmco
KSkpLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVCbG9iKHVybC0+c3RyaW5nKCks
IHR5cGUsIHNpemUpOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgU3RyaW5nVGFnOiB7CiAgICAg
ICAgICAgICBDYWNoZWRTdHJpbmdSZWYgY2FjaGVkU3RyaW5nOwogICAgICAgICAgICAgaWYgKCFy
ZWFkU3RyaW5nRGF0YShjYWNoZWRTdHJpbmcpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlKCk7Ci0gICAgICAgICAgICByZXR1cm4gY2FjaGVkU3RyaW5nLT5qc1N0cmluZyhtX2xleGlj
YWxHbG9iYWxPYmplY3QpOworICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFN0cmluZy0+anNTdHJp
bmcodm0oKSk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBFbXB0eVN0cmluZ1RhZzoKLSAgICAg
ICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKG1fbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7
CisgICAgICAgICAgICByZXR1cm4ganNFbXB0eVN0cmluZyh2bSgpKTsKICAgICAgICAgY2FzZSBT
dHJpbmdPYmplY3RUYWc6IHsKICAgICAgICAgICAgIENhY2hlZFN0cmluZ1JlZiBjYWNoZWRTdHJp
bmc7CiAgICAgICAgICAgICBpZiAoIXJlYWRTdHJpbmdEYXRhKGNhY2hlZFN0cmluZykpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAgICAgICAgICAgIFN0cmluZ09iamVjdCog
b2JqID0gY29uc3RydWN0U3RyaW5nKG1fbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSwgbV9nbG9i
YWxPYmplY3QsIGNhY2hlZFN0cmluZy0+anNTdHJpbmcobV9sZXhpY2FsR2xvYmFsT2JqZWN0KSk7
Ci0gICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVuZFdpdGhDcmFzaE9uT3ZlcmZsb3cob2JqKTsK
LSAgICAgICAgICAgIHJldHVybiBvYmo7CisgICAgICAgICAgICBhdXRvKiBvYmplY3QgPSBjb25z
dHJ1Y3RTdHJpbmcodm0oKSwgJm1fZ2xvYmFsT2JqZWN0LCBjYWNoZWRTdHJpbmctPmpzU3RyaW5n
KHZtKCkpKTsKKyAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5kV2l0aENyYXNoT25PdmVyZmxv
dyhvYmplY3QpOworICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIEVtcHR5U3RyaW5nT2JqZWN0VGFnOiB7Ci0gICAgICAgICAgICBWTSYgdm0gPSBtX2xl
eGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgICAgICAgICBTdHJpbmdPYmplY3QqIG9iaiA9
IGNvbnN0cnVjdFN0cmluZyh2bSwgbV9nbG9iYWxPYmplY3QsIGpzRW1wdHlTdHJpbmcodm0pKTsK
LSAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5kV2l0aENyYXNoT25PdmVyZmxvdyhvYmopOwot
ICAgICAgICAgICAgcmV0dXJuIG9iajsKKyAgICAgICAgICAgIGF1dG8qIG9iamVjdCA9IGNvbnN0
cnVjdFN0cmluZyh2bSgpLCAmbV9nbG9iYWxPYmplY3QsIGpzRW1wdHlTdHJpbmcodm0oKSkpOwor
ICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmRXaXRoQ3Jhc2hPbk92ZXJmbG93KG9iamVjdCk7
CisgICAgICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgUmVn
RXhwVGFnOiB7CiAgICAgICAgICAgICBDYWNoZWRTdHJpbmdSZWYgcGF0dGVybjsKQEAgLTM2ODIs
OSArMzY2Myw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsK
ICAgICAgICAgICAgIGF1dG8gcmVGbGFncyA9IFlhcnI6OnBhcnNlRmxhZ3MoZmxhZ3MtPnN0cmlu
ZygpKTsKICAgICAgICAgICAgIEFTU0VSVChyZUZsYWdzLmhhc192YWx1ZSgpKTsKLSAgICAgICAg
ICAgIFZNJiB2bSA9IG1fbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICAgICAgICAgIFJl
Z0V4cCogcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUodm0sIHBhdHRlcm4tPnN0cmluZygpLCByZUZs
YWdzLnZhbHVlKCkpOwotICAgICAgICAgICAgcmV0dXJuIFJlZ0V4cE9iamVjdDo6Y3JlYXRlKHZt
LCBtX2dsb2JhbE9iamVjdC0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cCk7CisgICAgICAgICAg
ICBSZWdFeHAqIHJlZ0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKHZtKCksIHBhdHRlcm4tPnN0cmluZygp
LCByZUZsYWdzLnZhbHVlKCkpOworICAgICAgICAgICAgcmV0dXJuIFJlZ0V4cE9iamVjdDo6Y3Jl
YXRlKHZtKCksIG1fZ2xvYmFsT2JqZWN0LnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHApOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgT2JqZWN0UmVmZXJlbmNlVGFnOiB7CiAgICAgICAgICAgICB1
bnNpZ25lZCBpbmRleCA9IDA7CkBAIC0zNzAxLDcgKzM2ODEsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGdldEpTVmFsdWUobV9tZXNzYWdlUG9ydHNb
aW5kZXhdLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybiB3cmFwKG1fbWVzc2FnZVBvcnRzW2lu
ZGV4XS5nZXQoKSk7CiAgICAgICAgIH0KICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgICAg
IGNhc2UgV2FzbU1vZHVsZVRhZzogewpAQCAtMzcxMSw4ICszNjkxLDggQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKG1fbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJl
c3VsdCA9IEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3R1YihtX2xleGljYWxHbG9i
YWxPYmplY3QtPnZtKCksIG1fbGV4aWNhbEdsb2JhbE9iamVjdCwgbV9nbG9iYWxPYmplY3QtPndl
YkFzc2VtYmx5TW9kdWxlU3RydWN0dXJlKCksIG1fd2FzbU1vZHVsZXMtPmF0KGluZGV4KSk7Cisg
ICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSgpKTsKKyAgICAg
ICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3R1Yih2
bSgpLCAmbV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBtX2dsb2JhbE9iamVjdC53ZWJBc3NlbWJseU1v
ZHVsZVN0cnVjdHVyZSgpLCBtX3dhc21Nb2R1bGVzLT5hdChpbmRleCkpOwogICAgICAgICAgICAg
Ly8gU2luY2Ugd2UgYXJlIGNsb25pbmcgYSBKU1dlYkFzc2VtYmx5TW9kdWxlLCBpdCdzIGltcG9z
c2libGUgZm9yIHRoYXQKICAgICAgICAgICAgIC8vIG1vZHVsZSB0byBub3QgaGF2ZSBiZWVuIGEg
dmFsaWQgbW9kdWxlLiBUaGVyZWZvcmUsIGNyZWF0ZVN0dWIgc2hvdWxkCiAgICAgICAgICAgICAv
LyBub3QgdGhyb3cuCkBAIC0zNzMyLDkgKzM3MTIsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIGZhaWwoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgYXV0byYgdm0gPSBtX2xleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgICAgICAgICBhdXRvJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgICAgICBKU1dlYkFzc2VtYmx5
TWVtb3J5KiByZXN1bHQgPSBKU0M6OkpTV2ViQXNzZW1ibHlNZW1vcnk6OnRyeUNyZWF0ZShtX2xl
eGljYWxHbG9iYWxPYmplY3QsIHZtLCBtX2dsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlNZW1vcnlT
dHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KiByZXN1bHQgPSBK
U1dlYkFzc2VtYmx5TWVtb3J5Ojp0cnlDcmVhdGUoJm1fbGV4aWNhbEdsb2JhbE9iamVjdCwgdm0s
IG1fZ2xvYmFsT2JqZWN0LndlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCkpOwogICAgICAgICAg
ICAgLy8gU2luY2Ugd2UgYXJlIGNsb25pbmcgYSBKU1dlYkFzc2VtYmx5TWVtb3J5LCBpdCdzIGlt
cG9zc2libGUgZm9yIHRoYXQKICAgICAgICAgICAgIC8vIG1vZHVsZSB0byBub3QgaGF2ZSBiZWVu
IGEgdmFsaWQgbW9kdWxlLiBUaGVyZWZvcmUsIGNyZWF0ZVN0dWIgc2hvdWxkCiAgICAgICAgICAg
ICAvLyBub3QgdGhyb3cuCkBAIC0zNzU0LDE0ICszNzM0LDE0IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgZmFpbCgpOwogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fZ2xvYmFsT2Jq
ZWN0LT5hcnJheUJ1ZmZlclN0cnVjdHVyZShhcnJheUJ1ZmZlci0+c2hhcmluZ01vZGUoKSk7Cisg
ICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fZ2xvYmFsT2JqZWN0LmFycmF5QnVm
ZmVyU3RydWN0dXJlKGFycmF5QnVmZmVyLT5zaGFyaW5nTW9kZSgpKTsKICAgICAgICAgICAgIC8v
IEEgY3JhenkgUnVudGltZUZsYWdzIG1pc21hdGNoIGNvdWxkIG1lYW4gdGhhdCB3ZSBhcmUgbm90
IGVxdWlwcGVkIHRvIGhhbmRsZSBzaGFyZWQKICAgICAgICAgICAgIC8vIGFycmF5IGJ1ZmZlcnMg
d2hpbGUgdGhlIHNlbmRlciBpcy4gSW4gdGhhdCBjYXNlLCB3ZSB3b3VsZCBzZWUgYSBudWxsIHN0
cnVjdHVyZSBoZXJlLgogICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUpIHsKICAgICAgICAgICAg
ICAgICBmYWlsKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRl
KG1fbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSwgc3RydWN0dXJlLCBXVEZNb3ZlKGFycmF5QnVm
ZmVyKSk7CisgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQXJyYXlCdWZmZXI6OmNyZWF0
ZSh2bSgpLCBzdHJ1Y3R1cmUsIFdURk1vdmUoYXJyYXlCdWZmZXIpKTsKICAgICAgICAgICAgIG1f
Z2NCdWZmZXIuYXBwZW5kV2l0aENyYXNoT25PdmVyZmxvdyhyZXN1bHQpOwogICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQpAQCAtMzc3Niw3ICszNzU2LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIGlmICghbV9hcnJheUJ1ZmZlcnNbaW5kZXhdKQogICAgICAgICAgICAgICAg
IG1fYXJyYXlCdWZmZXJzW2luZGV4XSA9IEFycmF5QnVmZmVyOjpjcmVhdGUoV1RGTW92ZShtX2Fy
cmF5QnVmZmVyQ29udGVudHMtPmF0KGluZGV4KSkpOwogCi0gICAgICAgICAgICByZXR1cm4gZ2V0
SlNWYWx1ZShtX2FycmF5QnVmZmVyc1tpbmRleF0uZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJu
IHdyYXAobV9hcnJheUJ1ZmZlcnNbaW5kZXhdLmdldCgpKTsKICAgICAgICAgfQogICAgICAgICBj
YXNlIFNoYXJlZEFycmF5QnVmZmVyVGFnOiB7CiAgICAgICAgICAgICB1aW50MzJfdCBpbmRleCA9
IFVJTlRfTUFYOwpAQCAtMzc4OCwxMyArMzc2OCwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3NoYXJlZEJ1ZmZlcnMtPmF0KGluZGV4KSk7
CiAgICAgICAgICAgICBhdXRvIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUoV1RGTW92ZSht
X3NoYXJlZEJ1ZmZlcnMtPmF0KGluZGV4KSkpOwotICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQg
PSBnZXRKU1ZhbHVlKGJ1ZmZlci5nZXQoKSk7CisgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9
IHdyYXAoYnVmZmVyLmdldCgpKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAg
ICAgICAgIHJldHVybiB7IH07CiAgICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVuZFdpdGhDcmFz
aE9uT3ZlcmZsb3cocmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBBcnJheUJ1ZmZlclZpZXdUYWc6IHsKLSAgICAgICAgICAgIEpTVmFs
dWUgYXJyYXlCdWZmZXJWaWV3OwotICAgICAgICAgICAgaWYgKCFyZWFkQXJyYXlCdWZmZXJWaWV3
KG1fbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSwgYXJyYXlCdWZmZXJWaWV3KSkgeworICAgICAg
ICAgICAgYXV0byBhcnJheUJ1ZmZlclZpZXcgPSByZWFkQXJyYXlCdWZmZXJWaWV3KCk7CisgICAg
ICAgICAgICBpZiAoIWFycmF5QnVmZmVyVmlldykgewogICAgICAgICAgICAgICAgIGZhaWwoKTsK
ICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICAgICAgfQpAQCAtMzgw
OCwxNSArMzc5MCwyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGZhaWwoKTsKICAgICAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAg
YXV0byogY29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgICAgIGlmICghY29u
dGV4dCkgeworICAgICAgICAgICAgICAgIGZhaWwoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
eyB9OworICAgICAgICAgICAgfQogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHNlcmlhbGl6
ZWRLZXk7Ci0gICAgICAgICAgICBpZiAoIXVud3JhcENyeXB0b0tleShtX2xleGljYWxHbG9iYWxP
YmplY3QsIHdyYXBwZWRLZXksIHNlcmlhbGl6ZWRLZXkpKSB7CisgICAgICAgICAgICBpZiAoIWNv
bnRleHQtPnVud3JhcENyeXB0b0tleSh3cmFwcGVkS2V5LCBzZXJpYWxpemVkS2V5KSkgewogICAg
ICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgSlNWYWx1ZSBjcnlwdG9LZXk7CiAgICAgICAgICAg
ICBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4gZHVtbXlNZXNzYWdlUG9ydHM7CiAgICAgICAg
ICAgICBDbG9uZURlc2VyaWFsaXplciByYXdLZXlEZXNlcmlhbGl6ZXIobV9sZXhpY2FsR2xvYmFs
T2JqZWN0LCBtX2dsb2JhbE9iamVjdCwgZHVtbXlNZXNzYWdlUG9ydHMsIG51bGxwdHIsIHsgfSwg
c2VyaWFsaXplZEtleSk7Ci0gICAgICAgICAgICBpZiAoIXJhd0tleURlc2VyaWFsaXplci5yZWFk
Q3J5cHRvS2V5KGNyeXB0b0tleSkpIHsKKyAgICAgICAgICAgIGF1dG8gY3J5cHRvS2V5ID0gcmF3
S2V5RGVzZXJpYWxpemVyLnJlYWRDcnlwdG9LZXkoKTsKKyAgICAgICAgICAgIGlmICghY3J5cHRv
S2V5KSB7CiAgICAgICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlKCk7CiAgICAgICAgICAgICB9CkBAIC0zODczLDE2ICszODYwLDI3IEBAIHByaXZhdGU6
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBKU0dsb2JhbE9iamVjdCogbV9n
bG9iYWxPYmplY3Q7Ci0gICAgYm9vbCBtX2lzRE9NR2xvYmFsT2JqZWN0OwotICAgIGJvb2wgbV9j
YW5DcmVhdGVET01PYmplY3Q7CisgICAgSlNWYWx1ZSBjcmVhdGVCbG9iKGNvbnN0IFN0cmluZyYg
bG9jYXRpb24sIENhY2hlZFN0cmluZ1JlZiB0eXBlLCB1aW50NjRfdCBzaXplKQorICAgIHsKKyAg
ICAgICAgLy8gSW4gRE9NIGNvbnRleHQsIG1ha2UgYSBibG9iIGFuZCB3cmFwIHdpdGggYSBET00g
V3JhcHBlci4KKyAgICAgICAgaWYgKGlzRE9NR2xvYmFsT2JqZWN0KCkpCisgICAgICAgICAgICBy
ZXR1cm4gd3JhcChCbG9iOjpkZXNlcmlhbGl6ZShleGVjdXRpb25Db250ZXh0KCksIFVSTCB7IGxv
Y2F0aW9uIH0sIHR5cGUtPnN0cmluZygpLCBzaXplLCBibG9iRmlsZVBhdGhGb3JCbG9iVVJMKGxv
Y2F0aW9uKSkpOworCisgICAgICAgIC8vIEluIG5vbi1ET00gY29udGV4dCwgbWFrZSBhbiBvYmpl
Y3Qgd2l0aCB0aGUgdHdvIG1ldGFkYXRhIHByb3BlcnRpZXMgaW5zdGVhZC4KKyAgICAgICAgYXV0
byYgb2JqZWN0ID0gKmNvbnN0cnVjdEVtcHR5T2JqZWN0KCZtX2xleGljYWxHbG9iYWxPYmplY3Qp
OworICAgICAgICBvYmplY3QucHV0RGlyZWN0KHZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0oKSwgInNpemUiKSwganNOdW1iZXIoc2l6ZSkpOworICAgICAgICBvYmplY3QucHV0RGlyZWN0
KHZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0oKSwgInR5cGUiKSwgdHlwZS0+anNTdHJp
bmcodm0oKSkpOworICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIH0KKworICAgIEpTR2xvYmFs
T2JqZWN0JiBtX2dsb2JhbE9iamVjdDsKICAgICBjb25zdCB1aW50OF90KiBtX3B0cjsKICAgICBj
b25zdCB1aW50OF90KiBtX2VuZDsKICAgICB1bnNpZ25lZCBtX3ZlcnNpb247CiAgICAgVmVjdG9y
PENhY2hlZFN0cmluZz4gbV9jb25zdGFudFBvb2w7CiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxN
ZXNzYWdlUG9ydD4+JiBtX21lc3NhZ2VQb3J0czsKICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzQXJy
YXkqIG1fYXJyYXlCdWZmZXJDb250ZW50czsKLSAgICBWZWN0b3I8UmVmUHRyPEpTQzo6QXJyYXlC
dWZmZXI+PiBtX2FycmF5QnVmZmVyczsKKyAgICBWZWN0b3I8UmVmUHRyPEFycmF5QnVmZmVyPj4g
bV9hcnJheUJ1ZmZlcnM7CiAgICAgVmVjdG9yPFN0cmluZz4gbV9ibG9iVVJMczsKICAgICBWZWN0
b3I8U3RyaW5nPiBtX2Jsb2JGaWxlUGF0aHM7CiAgICAgQXJyYXlCdWZmZXJDb250ZW50c0FycmF5
KiBtX3NoYXJlZEJ1ZmZlcnM7CkBAIC0zOTE1LDggKzM5MTMsNyBAQCBwcml2YXRlOgogCiBEZXNl
cmlhbGl6YXRpb25SZXN1bHQgQ2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplKCkKIHsKLSAg
ICBWTSYgdm0gPSBtX2xleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKCkpOwogCiAgICAgVmVjdG9yPHVpbnQzMl90LCAxNj4gaW5kZXhTdGFjazsKICAg
ICBWZWN0b3I8SWRlbnRpZmllciwgMTY+IHByb3BlcnR5TmFtZVN0YWNrOwpAQCAtMzkzNyw3ICsz
OTM0LDcgQEAgRGVzZXJpYWxpemF0aW9uUmVzdWx0IENsb25lRGVzZXJpYWxpemVyOjpkZXNlcmlh
bGl6ZSgpCiAgICAgICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICAgICAgICAgIGdvdG8gZXJy
b3I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBKU0FycmF5KiBvdXRBcnJheSA9IGNvbnN0
cnVjdEVtcHR5QXJyYXkobV9nbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEpTQzo6QXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZSo+KG51bGxwdHIpLCBsZW5ndGgpOworICAgICAgICAgICAgSlNBcnJheSog
b3V0QXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KCZtX2dsb2JhbE9iamVjdCwgc3RhdGljX2Nh
c3Q8QXJyYXlBbGxvY2F0aW9uUHJvZmlsZSo+KG51bGxwdHIpLCBsZW5ndGgpOwogICAgICAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICBnb3Rv
IGVycm9yOwogICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmRXaXRoQ3Jhc2hPbk92ZXJmbG93
KG91dEFycmF5KTsKQEAgLTM5ODAsNyArMzk3Nyw3IEBAIERlc2VyaWFsaXphdGlvblJlc3VsdCBD
bG9uZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxpemUoKQogICAgICAgICBjYXNlIE9iamVjdFN0YXJ0
U3RhdGU6IHsKICAgICAgICAgICAgIGlmIChvdXRwdXRPYmplY3RTdGFjay5zaXplKCkgPiBtYXhp
bXVtRmlsdGVyUmVjdXJzaW9uKQogICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFp
cihKU1ZhbHVlKCksIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpTdGFja092ZXJmbG93RXJyb3Ip
OwotICAgICAgICAgICAgSlNPYmplY3QqIG91dE9iamVjdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0
KG1fbGV4aWNhbEdsb2JhbE9iamVjdCwgbV9nbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgp
KTsKKyAgICAgICAgICAgIGF1dG8qIG91dE9iamVjdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZt
X2xleGljYWxHbG9iYWxPYmplY3QsIG1fZ2xvYmFsT2JqZWN0Lm9iamVjdFByb3RvdHlwZSgpKTsK
ICAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5kV2l0aENyYXNoT25PdmVyZmxvdyhvdXRPYmpl
Y3QpOwogICAgICAgICAgICAgb3V0cHV0T2JqZWN0U3RhY2suYXBwZW5kKG91dE9iamVjdCk7CiAg
ICAgICAgIH0KQEAgLTQwMDAsMTEgKzM5OTcsMTEgQEAgRGVzZXJpYWxpemF0aW9uUmVzdWx0IENs
b25lRGVzZXJpYWxpemVyOjpkZXNlcmlhbGl6ZSgpCiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIGlmIChKU1ZhbHVlIHRlcm1pbmFsID0gcmVhZFRlcm1pbmFsKCkpIHsKLSAgICAgICAgICAg
ICAgICBwdXRQcm9wZXJ0eShvdXRwdXRPYmplY3RTdGFjay5sYXN0KCksIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sIGNhY2hlZFN0cmluZy0+c3RyaW5nKCkpLCB0ZXJtaW5hbCk7CisgICAgICAg
ICAgICAgICAgcHV0UHJvcGVydHkob3V0cHV0T2JqZWN0U3RhY2subGFzdCgpLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtKCksIGNhY2hlZFN0cmluZy0+c3RyaW5nKCkpLCB0ZXJtaW5hbCk7CiAg
ICAgICAgICAgICAgICAgZ290byBvYmplY3RTdGFydFZpc2l0TWVtYmVyOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgc3RhdGVTdGFjay5hcHBlbmQoT2JqZWN0RW5kVmlzaXRNZW1iZXIpOwot
ICAgICAgICAgICAgcHJvcGVydHlOYW1lU3RhY2suYXBwZW5kKElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sIGNhY2hlZFN0cmluZy0+c3RyaW5nKCkpKTsKKyAgICAgICAgICAgIHByb3BlcnR5TmFt
ZVN0YWNrLmFwcGVuZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtKCksIGNhY2hlZFN0cmluZy0+
c3RyaW5nKCkpKTsKICAgICAgICAgICAgIGdvdG8gc3RhdGVVbmtub3duOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgT2JqZWN0RW5kVmlzaXRNZW1iZXI6IHsKQEAgLTQwMTUsNyArNDAxMiw3IEBA
IERlc2VyaWFsaXphdGlvblJlc3VsdCBDbG9uZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxpemUoKQog
ICAgICAgICBtYXBPYmplY3RTdGFydFN0YXRlOiB7CiAgICAgICAgICAgICBpZiAob3V0cHV0T2Jq
ZWN0U3RhY2suc2l6ZSgpID4gbWF4aW11bUZpbHRlclJlY3Vyc2lvbikKICAgICAgICAgICAgICAg
ICByZXR1cm4gc3RkOjptYWtlX3BhaXIoSlNWYWx1ZSgpLCBTZXJpYWxpemF0aW9uUmV0dXJuQ29k
ZTo6U3RhY2tPdmVyZmxvd0Vycm9yKTsKLSAgICAgICAgICAgIEpTTWFwKiBtYXAgPSBKU01hcDo6
Y3JlYXRlKG1fbGV4aWNhbEdsb2JhbE9iamVjdCwgbV9sZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgp
LCBtX2dsb2JhbE9iamVjdC0+bWFwU3RydWN0dXJlKCkpOworICAgICAgICAgICAgYXV0byogbWFw
ID0gSlNNYXA6OmNyZWF0ZSgmbV9sZXhpY2FsR2xvYmFsT2JqZWN0LCB2bSgpLCBtX2dsb2JhbE9i
amVjdC5tYXBTdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBtX2dj
QnVmZmVyLmFwcGVuZFdpdGhDcmFzaE9uT3ZlcmZsb3cobWFwKTsKQEAgLTQwMzgsNyArNDAzNSw3
IEBAIERlc2VyaWFsaXphdGlvblJlc3VsdCBDbG9uZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxpemUo
KQogICAgICAgICAgICAgZ290byBzdGF0ZVVua25vd247CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBNYXBEYXRhRW5kVmlzaXRWYWx1ZTogewotICAgICAgICAgICAgbWFwU3RhY2subGFzdCgpLT5z
ZXQobV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBtYXBLZXlTdGFjay5sYXN0KCksIG91dFZhbHVlKTsK
KyAgICAgICAgICAgIG1hcFN0YWNrLmxhc3QoKS0+c2V0KCZtX2xleGljYWxHbG9iYWxPYmplY3Qs
IG1hcEtleVN0YWNrLmxhc3QoKSwgb3V0VmFsdWUpOwogICAgICAgICAgICAgbWFwS2V5U3RhY2su
cmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgZ290byBtYXBEYXRhU3RhcnRWaXNpdEVudHJ5Owog
ICAgICAgICB9CkBAIC00MDQ2LDcgKzQwNDMsNyBAQCBEZXNlcmlhbGl6YXRpb25SZXN1bHQgQ2xv
bmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplKCkKICAgICAgICAgc2V0T2JqZWN0U3RhcnRTdGF0
ZTogewogICAgICAgICAgICAgaWYgKG91dHB1dE9iamVjdFN0YWNrLnNpemUoKSA+IG1heGltdW1G
aWx0ZXJSZWN1cnNpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKEpT
VmFsdWUoKSwgU2VyaWFsaXphdGlvblJldHVybkNvZGU6OlN0YWNrT3ZlcmZsb3dFcnJvcik7Ci0g
ICAgICAgICAgICBKU1NldCogc2V0ID0gSlNTZXQ6OmNyZWF0ZShtX2xleGljYWxHbG9iYWxPYmpl
Y3QsIG1fbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSwgbV9nbG9iYWxPYmplY3QtPnNldFN0cnVj
dHVyZSgpKTsKKyAgICAgICAgICAgIGF1dG8qIHNldCA9IEpTU2V0OjpjcmVhdGUoJm1fbGV4aWNh
bEdsb2JhbE9iamVjdCwgdm0oKSwgbV9nbG9iYWxPYmplY3Quc2V0U3RydWN0dXJlKCkpOwogICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAg
ICBnb3RvIGVycm9yOwogICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmRXaXRoQ3Jhc2hPbk92
ZXJmbG93KHNldCk7CkBAIC00MDY1LDcgKzQwNjIsNyBAQCBEZXNlcmlhbGl6YXRpb25SZXN1bHQg
Q2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplKCkKICAgICAgICAgfQogICAgICAgICBjYXNl
IFNldERhdGFFbmRWaXNpdEtleTogewogICAgICAgICAgICAgSlNTZXQqIHNldCA9IHNldFN0YWNr
Lmxhc3QoKTsKLSAgICAgICAgICAgIHNldC0+YWRkKG1fbGV4aWNhbEdsb2JhbE9iamVjdCwgb3V0
VmFsdWUpOworICAgICAgICAgICAgc2V0LT5hZGQoJm1fbGV4aWNhbEdsb2JhbE9iamVjdCwgb3V0
VmFsdWUpOwogICAgICAgICAgICAgZ290byBzZXREYXRhU3RhcnRWaXNpdEVudHJ5OwogICAgICAg
ICB9CiAKQEAgLTQwNzUsNiArNDA3Miw4IEBAIERlc2VyaWFsaXphdGlvblJlc3VsdCBDbG9uZURl
c2VyaWFsaXplcjo6ZGVzZXJpYWxpemUoKQogICAgICAgICAgICAgICAgIG91dFZhbHVlID0gdGVy
bWluYWw7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAobV9mYWlsZWQpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAg
IFNlcmlhbGl6YXRpb25UYWcgdGFnID0gcmVhZFRhZygpOwogICAgICAgICAgICAgaWYgKHRhZyA9
PSBBcnJheVRhZykKICAgICAgICAgICAgICAgICBnb3RvIGFycmF5U3RhcnRTdGF0ZTsKQEAgLTQx
OTMsMTQgKzQxOTIsMTQgQEAgc2l6ZV90IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y29tcHV0ZU1l
bW9yeUNvc3QoKSBjb25zdAogICAgIHJldHVybiBjb3N0OwogfQogCi1zdGF0aWMgRXhjZXB0aW9u
T3I8c3RkOjp1bmlxdWVfcHRyPEFycmF5QnVmZmVyQ29udGVudHNBcnJheT4+IHRyYW5zZmVyQXJy
YXlCdWZmZXJzKFZNJiB2bSwgY29uc3QgVmVjdG9yPFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPj4m
IGFycmF5QnVmZmVycykKK3N0YXRpYyBFeGNlcHRpb25PcjxzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlC
dWZmZXJDb250ZW50c0FycmF5Pj4gdHJhbnNmZXJBcnJheUJ1ZmZlcnMoVk0mIHZtLCBjb25zdCBW
ZWN0b3I8UmVmUHRyPEFycmF5QnVmZmVyPj4mIGFycmF5QnVmZmVycykKIHsKICAgICBpZiAoYXJy
YXlCdWZmZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBhdXRv
IGNvbnRlbnRzID0gbWFrZVVuaXF1ZTxBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+KGFycmF5QnVm
ZmVycy5zaXplKCkpOwogCi0gICAgSGFzaFNldDxKU0M6OkFycmF5QnVmZmVyKj4gdmlzaXRlZDsK
KyAgICBIYXNoU2V0PEFycmF5QnVmZmVyKj4gdmlzaXRlZDsKICAgICBmb3IgKHNpemVfdCBhcnJh
eUJ1ZmZlckluZGV4ID0gMDsgYXJyYXlCdWZmZXJJbmRleCA8IGFycmF5QnVmZmVycy5zaXplKCk7
IGFycmF5QnVmZmVySW5kZXgrKykgewogICAgICAgICBpZiAodmlzaXRlZC5jb250YWlucyhhcnJh
eUJ1ZmZlcnNbYXJyYXlCdWZmZXJJbmRleF0uZ2V0KCkpKQogICAgICAgICAgICAgY29udGludWU7
CkBAIC00MzAzLDcgKzQzMDIsNyBAQCBzdGF0aWMgYm9vbCBjYW5EZXRhY2hSVENEYXRhQ2hhbm5l
bHMoY29uc3QgVmVjdG9yPFJlZjxSVENEYXRhQ2hhbm5lbD4+JiBjaGFubmVscwogfQogI2VuZGlm
CiAKLVJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
Y3JlYXRlKEpTQzo6SlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlIHRocm93RXhjZXB0aW9ucywgU2VyaWFsaXphdGlv
bkNvbnRleHQgc2VyaWFsaXphdGlvbkNvbnRleHQpCitSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShKU0dsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlIHRocm93RXhjZXB0
aW9ucywgU2VyaWFsaXphdGlvbkNvbnRleHQgc2VyaWFsaXphdGlvbkNvbnRleHQpCiB7CiAgICAg
VmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+IGR1bW15UG9ydHM7CiAgICAgYXV0byByZXN1bHQg
PSBjcmVhdGUoZ2xvYmFsT2JqZWN0LCB2YWx1ZSwgeyB9LCBkdW1teVBvcnRzLCB0aHJvd0V4Y2Vw
dGlvbnMsIHNlcmlhbGl6YXRpb25Db250ZXh0KTsKQEAgLTQzMTIsMTUgKzQzMTEsMTUgQEAgUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUo
SlNDOjpKU0dsb2JhbE9iamVjdCYKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1
ZSgpOwogfQogCi1FeGNlcHRpb25PcjxSZWY8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4gU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoSlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVmVjdG9yPEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+PiYmIHRyYW5zZmVy
TGlzdCwgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+JiBtZXNzYWdlUG9ydHMsIFNlcmlhbGl6
YXRpb25Db250ZXh0IHNlcmlhbGl6YXRpb25Db250ZXh0KQorRXhjZXB0aW9uT3I8UmVmPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKEpTR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFZlY3RvcjxTdHJvbmc8SlNPYmpl
Y3Q+PiYmIHRyYW5zZmVyTGlzdCwgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+JiBtZXNzYWdl
UG9ydHMsIFNlcmlhbGl6YXRpb25Db250ZXh0IHNlcmlhbGl6YXRpb25Db250ZXh0KQogewogICAg
IHJldHVybiBjcmVhdGUoZ2xvYmFsT2JqZWN0LCB2YWx1ZSwgV1RGTW92ZSh0cmFuc2Zlckxpc3Qp
LCBtZXNzYWdlUG9ydHMsIFNlcmlhbGl6YXRpb25FcnJvck1vZGU6Ok5vblRocm93aW5nLCBzZXJp
YWxpemF0aW9uQ29udGV4dCk7CiB9CiAKLUV4Y2VwdGlvbk9yPFJlZjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+PiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVmVjdG9yPEpTQzo6U3Ryb25nPEpTQzo6
SlNPYmplY3Q+PiYmIHRyYW5zZmVyTGlzdCwgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+JiBt
ZXNzYWdlUG9ydHMsIFNlcmlhbGl6YXRpb25FcnJvck1vZGUgdGhyb3dFeGNlcHRpb25zLCBTZXJp
YWxpemF0aW9uQ29udGV4dCBjb250ZXh0KQorRXhjZXB0aW9uT3I8UmVmPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBWZWN0b3I8U3Ryb25nPEpTT2JqZWN0
Pj4mJiB0cmFuc2Zlckxpc3QsIFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYgbWVzc2FnZVBv
cnRzLCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlIHRocm93RXhjZXB0aW9ucywgU2VyaWFsaXphdGlv
bkNvbnRleHQgY29udGV4dCkKIHsKICAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZt
KCk7Ci0gICAgVmVjdG9yPFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPj4gYXJyYXlCdWZmZXJzOwor
ICAgIFZlY3RvcjxSZWZQdHI8QXJyYXlCdWZmZXI+PiBhcnJheUJ1ZmZlcnM7CiAgICAgVmVjdG9y
PFJlZlB0cjxJbWFnZUJpdG1hcD4+IGltYWdlQml0bWFwczsKICNpZiBFTkFCTEUoT0ZGU0NSRUVO
X0NBTlZBU19JTl9XT1JLRVJTKQogICAgIFZlY3RvcjxSZWZQdHI8T2Zmc2NyZWVuQ2FudmFzPj4g
b2Zmc2NyZWVuQ2FudmFzZXM7CkBAIC00MzI4LDcgKzQzMjcsNyBAQCBFeGNlcHRpb25PcjxSZWY8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoSlNH
bG9iYWxPYgogI2lmIEVOQUJMRShXRUJfUlRDKQogICAgIFZlY3RvcjxSZWY8UlRDRGF0YUNoYW5u
ZWw+PiBkYXRhQ2hhbm5lbHM7CiAjZW5kaWYKLSAgICBIYXNoU2V0PEpTQzo6SlNPYmplY3QqPiB1
bmlxdWVUcmFuc2ZlcmFibGVzOworICAgIEhhc2hTZXQ8SlNPYmplY3QqPiB1bmlxdWVUcmFuc2Zl
cmFibGVzOwogICAgIGZvciAoYXV0byYgdHJhbnNmZXJhYmxlIDogdHJhbnNmZXJMaXN0KSB7CiAg
ICAgICAgIGlmICghdW5pcXVlVHJhbnNmZXJhYmxlcy5hZGQodHJhbnNmZXJhYmxlLmdldCgpKS5p
c05ld0VudHJ5KQogICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IERhdGFDbG9uZUVycm9y
LCAiRHVwbGljYXRlIHRyYW5zZmVyYWJsZSBmb3Igc3RydWN0dXJlZCBjbG9uZSJfcyB9OwpAQCAt
NDM5Myw3ICs0MzkyLDcgQEAgRXhjZXB0aW9uT3I8UmVmPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4+
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKEpTR2xvYmFsT2IKICAgICBXYXNtTWVtb3J5
SGFuZGxlQXJyYXkgd2FzbU1lbW9yeUhhbmRsZXM7CiAjZW5kaWYKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8QXJyYXlCdWZmZXJDb250ZW50c0FycmF5PiBzaGFyZWRCdWZmZXJzID0gbWFrZVVuaXF1ZTxB
cnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+KCk7Ci0gICAgYXV0byBjb2RlID0gQ2xvbmVTZXJpYWxp
emVyOjpzZXJpYWxpemUoJmxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBtZXNzYWdlUG9ydHMs
IGFycmF5QnVmZmVycywgaW1hZ2VCaXRtYXBzLAorICAgIGF1dG8gY29kZSA9IENsb25lU2VyaWFs
aXplcjo6c2VyaWFsaXplKGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBtZXNzYWdlUG9ydHMs
IGFycmF5QnVmZmVycywgaW1hZ2VCaXRtYXBzLAogI2lmIEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFT
X0lOX1dPUktFUlMpCiAgICAgICAgIG9mZnNjcmVlbkNhbnZhc2VzLAogI2VuZGlmCkBAIC00NDEy
LDcgKzQ0MTEsNyBAQCBFeGNlcHRpb25PcjxSZWY8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4gU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoSlNHbG9iYWxPYgogICAgIGlmIChjb2RlICE9IFNl
cmlhbGl6YXRpb25SZXR1cm5Db2RlOjpTdWNjZXNzZnVsbHlDb21wbGV0ZWQpCiAgICAgICAgIHJl
dHVybiBleGNlcHRpb25Gb3JTZXJpYWxpemF0aW9uRmFpbHVyZShjb2RlKTsKIAotICAgIGF1dG8g
YXJyYXlCdWZmZXJDb250ZW50c0FycmF5ID0gdHJhbnNmZXJBcnJheUJ1ZmZlcnModm0sIGFycmF5
QnVmZmVycyk7CisgICAgYXV0byBhcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkgPSB0cmFuc2ZlckFy
cmF5QnVmZmVycyhsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCksIGFycmF5QnVmZmVycyk7CiAgICAg
aWYgKGFycmF5QnVmZmVyQ29udGVudHNBcnJheS5oYXNFeGNlcHRpb24oKSkKICAgICAgICAgcmV0
dXJuIGFycmF5QnVmZmVyQ29udGVudHNBcnJheS5yZWxlYXNlRXhjZXB0aW9uKCk7CiAKQEAgLTQ0
MjMsNiArNDQyMiw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+PiBT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShKU0dsb2JhbE9iCiAgICAgZm9yIChhdXRvIG9m
ZnNjcmVlbkNhbnZhcyA6IG9mZnNjcmVlbkNhbnZhc2VzKQogICAgICAgICBkZXRhY2hlZENhbnZh
c2VzLmFwcGVuZChvZmZzY3JlZW5DYW52YXMtPmRldGFjaCgpKTsKICNlbmRpZgorCiAjaWYgRU5B
QkxFKFdFQl9SVEMpCiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxEZXRhY2hlZFJUQ0RhdGFD
aGFubmVsPj4gZGV0YWNoZWRSVENEYXRhQ2hhbm5lbHM7CiAgICAgZm9yIChhdXRvJiBjaGFubmVs
IDogZGF0YUNoYW5uZWxzKQpAQCAtNDQ1MywxNiArNDQ1MywxNiBAQCBSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShTdHJpbmdWaWV3IHN0
cmluZykKIAogUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGUoSlNDb250ZXh0UmVmIG9yaWdpbkNvbnRleHQsIEpTVmFsdWVSZWYgYXBpVmFs
dWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCA9IHRvSlMob3JpZ2luQ29udGV4dCk7Ci0gICAgVk0mIHZtID0gbGV4aWNh
bEdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvJiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gKnRv
SlMob3JpZ2luQ29udGV4dCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC52bSgp
OwogICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X0NBVENIX1NDT1BFKHZtKTsKIAotICAgIEpTVmFsdWUgdmFsdWUgPSB0b0pTKGxleGljYWxHbG9i
YWxPYmplY3QsIGFwaVZhbHVlKTsKLSAgICBhdXRvIHNlcmlhbGl6ZWRWYWx1ZSA9IFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAg
SlNWYWx1ZSB2YWx1ZSA9IHRvSlMoJmxleGljYWxHbG9iYWxPYmplY3QsIGFwaVZhbHVlKTsKKyAg
ICBhdXRvIHNlcmlhbGl6ZWRWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGxl
eGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKSB7CiAgICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9u
ID0gdG9SZWYobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUuZXhjZXB0aW9uKCktPnZhbHVlKCkp
OworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBz
Y29wZS5leGNlcHRpb24oKS0+dmFsdWUoKSk7CiAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9u
KCk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTQ0ODIsMTQgKzQ0ODIsMTIg
QEAgSlNWYWx1ZSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LAogCiBKU1ZhbHVlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6ZGVzZXJpYWxpemUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+
PiYgbWVzc2FnZVBvcnRzLCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlIHRocm93RXhjZXB0aW9ucykK
IHsKLSAgICBWZWN0b3I8U3RyaW5nPiBkdW1teUJsb2JzOwotICAgIFZlY3RvcjxTdHJpbmc+IGR1
bW15UGF0aHM7Ci0gICAgcmV0dXJuIGRlc2VyaWFsaXplKGxleGljYWxHbG9iYWxPYmplY3QsIGds
b2JhbE9iamVjdCwgbWVzc2FnZVBvcnRzLCBkdW1teUJsb2JzLCBkdW1teVBhdGhzLCB0aHJvd0V4
Y2VwdGlvbnMpOworICAgIHJldHVybiBkZXNlcmlhbGl6ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCBn
bG9iYWxPYmplY3QsIG1lc3NhZ2VQb3J0cywgeyB9LCB7IH0sIHRocm93RXhjZXB0aW9ucyk7CiB9
CiAKIEpTVmFsdWUgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Y29uc3QgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+JiBtZXNzYWdlUG9ydHMsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBibG9iVVJMcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JGaWxlUGF0
aHMsIFNlcmlhbGl6YXRpb25FcnJvck1vZGUgdGhyb3dFeGNlcHRpb25zKQogewotICAgIERlc2Vy
aWFsaXphdGlvblJlc3VsdCByZXN1bHQgPSBDbG9uZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxpemUo
JmxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgbWVzc2FnZVBvcnRzLCBXVEZNb3Zl
KG1fYmFja2luZ1N0b3JlcykKKyAgICBhdXRvIHJlc3VsdCA9IENsb25lRGVzZXJpYWxpemVyOjpk
ZXNlcmlhbGl6ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCAqZ2xvYmFsT2JqZWN0LCBtZXNzYWdlUG9y
dHMsIFdURk1vdmUobV9iYWNraW5nU3RvcmVzKQogI2lmIEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFT
X0lOX1dPUktFUlMpCiAgICAgICAgICwgV1RGTW92ZShtX2RldGFjaGVkT2Zmc2NyZWVuQ2FudmFz
ZXMpCiAjZW5kaWYKQEAgLTQ1MDksMjAgKzQ1MDcsMjAgQEAgSlNWYWx1ZSBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmRlc2VyaWFsaXplKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LAogCiBKU1ZhbHVlUmVmIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUoSlNDb250
ZXh0UmVmIGRlc3RpbmF0aW9uQ29udGV4dCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAg
IEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gdG9KUyhkZXN0aW5hdGlvbkNv
bnRleHQpOwotICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0
byYgbGV4aWNhbEdsb2JhbE9iamVjdCA9ICp0b0pTKGRlc3RpbmF0aW9uQ29udGV4dCk7CisgICAg
Vk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2Nr
ZXIodm0pOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAotICAg
IEpTVmFsdWUgdmFsdWUgPSBkZXNlcmlhbGl6ZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgbGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IGRlc2VyaWFsaXplKGxleGljYWxH
bG9iYWxPYmplY3QsICZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAq
ZXhjZXB0aW9uID0gdG9SZWYobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUuZXhjZXB0aW9uKCkt
PnZhbHVlKCkpOworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKCZsZXhpY2FsR2xvYmFs
T2JqZWN0LCBzY29wZS5leGNlcHRpb24oKS0+dmFsdWUoKSk7CiAgICAgICAgIHNjb3BlLmNsZWFy
RXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBBU1NFUlQo
dmFsdWUpOwotICAgIHJldHVybiB0b1JlZihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7Cisg
ICAgcmV0dXJuIHRvUmVmKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiB9CiAKIFJlZjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERh
dGEuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5j
cHAKaW5kZXggYWY4YjkwMjZiM2U0YWUzYjYwYmQ4NGVmN2I5MmZkZDA0NmU4ODZjMi4uYjcwYmMz
ZGU5YWRiYTE0NDE4NjUwOWYwMDBiNTEzM2Y0NDkwZTAwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAKQEAgLTM1LDcgKzM1LDYg
QEAKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93UHJvcGVy
dGllcy5oIgogI2luY2x1ZGUgIkpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaCIKLSNpbmNs
dWRlICJKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU1BhaW50
V29ya2xldEdsb2JhbFNjb3BlLmgiCiAjaW5jbHVkZSAiSlNSZW1vdGVET01XaW5kb3cuaCIKICNp
bmNsdWRlICJKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5oIgpAQCAtODAsNyArNzksNiBAQCBK
U0hlYXBEYXRhOjpKU0hlYXBEYXRhKEhlYXAmIGhlYXApCiAjaWYgRU5BQkxFKFdFQl9BVURJTykK
ICAgICAsIG1faGVhcENlbGxUeXBlRm9ySlNBdWRpb1dvcmtsZXRHbG9iYWxTY29wZShKU0M6Oklz
b0hlYXBDZWxsVHlwZTo6QXJnczxKU0F1ZGlvV29ya2xldEdsb2JhbFNjb3BlPigpKQogI2VuZGlm
Ci0gICAgLCBtX2hlYXBDZWxsVHlwZUZvckpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdChK
U0M6Oklzb0hlYXBDZWxsVHlwZTo6QXJnczxKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3Q+
KCkpCiAgICAgLCBtX2RvbUJ1aWx0aW5Db25zdHJ1Y3RvclNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNl
KQogICAgICwgbV9kb21Db25zdHJ1Y3RvclNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhl
YXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNET01Db25zdHJ1Y3RvckJhc2UpCiAgICAgLCBtX2RvbU5h
bWVzcGFjZU9iamVjdFNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBD
ZWxsVHlwZSwgSlNET01PYmplY3QpCkBAIC04OSw3ICs4Nyw2IEBAIEpTSGVhcERhdGE6OkpTSGVh
cERhdGEoSGVhcCYgaGVhcCkKICAgICAsIG1fcnVudGltZU1ldGhvZFNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgUnVudGltZU1ldGhvZCkgLy8gSGFz
aDoweGY3MGM0YTg1CiAgICAgLCBtX3J1bnRpbWVPYmplY3RTcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBtX3J1bnRpbWVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTQzo6QmluZGluZ3M6OlJ1bnRp
bWVPYmplY3QpCiAgICAgLCBtX3dpbmRvd1Byb3h5U3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgbV93aW5kb3dQcm94eUhlYXBDZWxsVHlwZSwgSlNXaW5kb3dQcm94eSkKLSAgICAsIG1faWRi
U2VyaWFsaXphdGlvblNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIG1faGVhcENlbGxUeXBl
Rm9ySlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0LCBKU0lEQlNlcmlhbGl6YXRpb25HbG9i
YWxPYmplY3QpCiAgICAgLCBtX3N1YnNwYWNlcyhtYWtlVW5pcXVlPEV4dGVuZGVkRE9NSXNvU3Vi
c3BhY2VzPigpKQogewogfQpAQCAtMTIxLDcgKzExOCw2IEBAIEpTVk1DbGllbnREYXRhOjpKU1ZN
Q2xpZW50RGF0YShWTSYgdm0pCiAgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQobV9ydW50
aW1lTWV0aG9kU3BhY2UpCiAgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQobV9ydW50aW1l
T2JqZWN0U3BhY2UpCiAgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQobV93aW5kb3dQcm94
eVNwYWNlKQotICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKG1faWRiU2VyaWFsaXphdGlv
blNwYWNlKQogICAgICwgbV9jbGllbnRTdWJzcGFjZXMobWFrZVVuaXF1ZTxFeHRlbmRlZERPTUNs
aWVudElzb1N1YnNwYWNlcz4oKSkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1dlYkNvcmVKU0NsaWVudERhdGEuaAppbmRleCAxZmE1MzUxYzU1MmY5YTk2NThhMDUzN2Zi
YTI4ZGY4NGY3YzM4ZmJjLi44YTAwNGJiZGQyYzkzYzExMzFiY2IzY2I4ZjZjNzI1MDU0NDFjMmQy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnRE
YXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0
YS5oCkBAIC03OCw3ICs3OCw2IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoV0VCX0FVRElPKQogICAg
IEpTQzo6SXNvSGVhcENlbGxUeXBlIG1faGVhcENlbGxUeXBlRm9ySlNBdWRpb1dvcmtsZXRHbG9i
YWxTY29wZTsKICNlbmRpZgotICAgIEpTQzo6SXNvSGVhcENlbGxUeXBlIG1faGVhcENlbGxUeXBl
Rm9ySlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0OwogCiBwcml2YXRlOgogICAgIEpTQzo6
SXNvU3Vic3BhY2UgbV9kb21CdWlsdGluQ29uc3RydWN0b3JTcGFjZTsKQEAgLTg5LDcgKzg4LDYg
QEAgcHJpdmF0ZToKICAgICBKU0M6Oklzb1N1YnNwYWNlIG1fcnVudGltZU1ldGhvZFNwYWNlOwog
ICAgIEpTQzo6SXNvU3Vic3BhY2UgbV9ydW50aW1lT2JqZWN0U3BhY2U7CiAgICAgSlNDOjpJc29T
dWJzcGFjZSBtX3dpbmRvd1Byb3h5U3BhY2U7Ci0gICAgSlNDOjpJc29TdWJzcGFjZSBtX2lkYlNl
cmlhbGl6YXRpb25TcGFjZTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHRlbmRlZERPTUlzb1N1
YnNwYWNlcz4gbV9zdWJzcGFjZXM7CiAgICAgVmVjdG9yPEpTQzo6SXNvU3Vic3BhY2UqPiBtX291
dHB1dENvbnN0cmFpbnRTcGFjZXM7CkBAIC0xMzYsNyArMTM0LDYgQEAgcHVibGljOgogICAgIEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBydW50aW1lTWV0aG9kU3BhY2UoKSB7IHJldHVybiBt
X3J1bnRpbWVNZXRob2RTcGFjZTsgfQogICAgIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBy
dW50aW1lT2JqZWN0U3BhY2UoKSB7IHJldHVybiBtX3J1bnRpbWVPYmplY3RTcGFjZTsgfQogICAg
IEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlJiB3aW5kb3dQcm94eVNwYWNlKCkgeyByZXR1cm4g
bV93aW5kb3dQcm94eVNwYWNlOyB9Ci0gICAgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIGlk
YlNlcmlhbGl6YXRpb25TcGFjZSgpIHsgcmV0dXJuIG1faWRiU2VyaWFsaXphdGlvblNwYWNlOyB9
CiAKICAgICBFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcyYgY2xpZW50U3Vic3BhY2VzKCkg
eyByZXR1cm4gKm1fY2xpZW50U3Vic3BhY2VzLmdldCgpOyB9CiAKQEAgLTE1Niw3ICsxNTMsNiBA
QCBwcml2YXRlOgogICAgIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlIG1fcnVudGltZU1ldGhv
ZFNwYWNlOwogICAgIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlIG1fcnVudGltZU9iamVjdFNw
YWNlOwogICAgIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlIG1fd2luZG93UHJveHlTcGFjZTsK
LSAgICBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSBtX2lkYlNlcmlhbGl6YXRpb25TcGFjZTsK
IAogICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcz4gbV9j
bGllbnRTdWJzcGFjZXM7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VtcHR5
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0VtcHR5U2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWM3MmVm
OWM5NmMyN2I1Mzg0YzYxMzFjN2Y5OWFhY2UxOGM4NDJkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbXB0eVNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlICJFdmVudExvb3AuaCIKLSNpbmNsdWRlICJNaWNyb3Rhc2tzLmgiCi0jaW5jbHVkZSAi
UmVmZXJyZXJQb2xpY3kuaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0j
aW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLQotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBFbXB0eVNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxFbXB0eVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+
LCBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxFbXB0eVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IGNyZWF0ZShKU0M6OlZNJiB2bSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEVtcHR5U2NyaXB0RXhlY3V0aW9uQ29udGV4
dCh2bSkpOwotICAgIH0KLQotICAgIGJvb2wgaXNTZWN1cmVDb250ZXh0KCkgY29uc3QgZmluYWwg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIGlzSlNFeGVjdXRpb25Gb3JiaWRkZW4oKSBjb25z
dCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIEV2ZW50TG9vcFRhc2tHcm91cCYgZXZlbnRM
b29wKCkgZmluYWwKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICByZXR1cm4gKm1fZXZlbnRMb29wVGFza0dyb3VwOwotICAgIH0KLSAgICBjb25zdCBVUkwmIHVy
bCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fdXJsOyB9Ci0gICAgVVJMIGNvbXBsZXRlVVJMKGNv
bnN0IFN0cmluZyYsIEZvcmNlVVRGOCA9IEZvcmNlVVRGODo6Tm8pIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIHsgfTsgfTsKLSAgICBTdHJpbmcgdXNlckFnZW50KGNvbnN0IFVSTCYpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIGVtcHR5U3RyaW5nKCk7IH0KLSAgICBSZWZlcnJlclBvbGljeSByZWZlcnJlclBv
bGljeSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFJlZmVycmVyUG9saWN5OjpFbXB0eVN0cmluZzsg
fQotCi0gICAgdm9pZCBkaXNhYmxlRXZhbChjb25zdCBTdHJpbmcmKSBmaW5hbCB7IH07Ci0gICAg
dm9pZCBkaXNhYmxlV2ViQXNzZW1ibHkoY29uc3QgU3RyaW5nJikgZmluYWwgeyB9OwotCi0gICAg
SURCQ2xpZW50OjpJREJDb25uZWN0aW9uUHJveHkqIGlkYkNvbm5lY3Rpb25Qcm94eSgpIGZpbmFs
IHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICBTb2NrZXRQcm92aWRlciogc29ja2V0UHJvdmlkZXIo
KSBmaW5hbCB7IHJldHVybiBudWxscHRyOyB9Ci0KLSAgICB2b2lkIGFkZENvbnNvbGVNZXNzYWdl
KHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6OkNvbnNvbGVNZXNzYWdlPiYmKSBmaW5hbCB7IH0K
LSAgICB2b2lkIGFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwg
Y29uc3QgU3RyaW5nJiwgdW5zaWduZWQgbG9uZykgZmluYWwgeyB9OwotCi0gICAgU2VjdXJpdHlP
cmlnaW4mIHRvcE9yaWdpbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fb3JpZ2luLmdldCgpOyB9
OwotCi0gICAgdm9pZCBwb3N0VGFzayhUYXNrJiYpIGZpbmFsIHsgQVNTRVJUX05PVF9SRUFDSEVE
KCk7IH0KLSAgICBFdmVudFRhcmdldCogZXJyb3JFdmVudFRhcmdldCgpIGZpbmFsIHsgcmV0dXJu
IG51bGxwdHI7IH07Ci0KLSNpZiBFTkFCTEUoV0VCX0NSWVBUTykKLSAgICBib29sIHdyYXBDcnlw
dG9LZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgVmVjdG9yPHVpbnQ4X3Q+JikgZmluYWwgeyBy
ZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIHVud3JhcENyeXB0b0tleShjb25zdCBWZWN0b3I8dWlu
dDhfdD4mLCBWZWN0b3I8dWludDhfdD4mKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotI2VuZGlm
Ci0KLSAgICBKU0M6OlZNJiB2bSgpIGZpbmFsIHsgcmV0dXJuIG1fdm07IH0KLQotICAgIHVzaW5n
IFJlZkNvdW50ZWQ6OnJlZjsKLSAgICB1c2luZyBSZWZDb3VudGVkOjpkZXJlZjsKLQotcHJpdmF0
ZToKLSAgICBFbXB0eVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoSlNDOjpWTSYgdm0pCi0gICAgICAg
IDogbV92bSh2bSkKLSAgICAgICAgLCBtX29yaWdpbihTZWN1cml0eU9yaWdpbjo6Y3JlYXRlVW5p
cXVlKCkpCi0gICAgICAgICwgbV9ldmVudExvb3AoRW1wdHlFdmVudExvb3A6OmNyZWF0ZSh2bSkp
Ci0gICAgICAgICwgbV9ldmVudExvb3BUYXNrR3JvdXAobWFrZVVuaXF1ZTxFdmVudExvb3BUYXNr
R3JvdXA+KG1fZXZlbnRMb29wKSkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBhZGRNZXNzYWdl
KE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiwgdW5zaWduZWQsIHVuc2lnbmVkLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+
JiYsIEpTQzo6SlNHbG9iYWxPYmplY3QqID0gbnVsbHB0ciwgdW5zaWduZWQgbG9uZyA9IDApIGZp
bmFsIHsgfQotICAgIHZvaWQgbG9nRXhjZXB0aW9uVG9Db25zb2xlKGNvbnN0IFN0cmluZyYsIGNv
bnN0IFN0cmluZyYsIGludCwgaW50LCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+
JiYpIGZpbmFsIHsgfTsKLSAgICB2b2lkIHJlZlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBmaW5h
bCB7IHJlZigpOyB9OwotICAgIHZvaWQgZGVyZWZTY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgZmlu
YWwgeyBkZXJlZigpOyB9OwotCi0gICAgY29uc3QgU2V0dGluZ3M6OlZhbHVlcyYgc2V0dGluZ3NW
YWx1ZXMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3NldHRpbmdzVmFsdWVzOyB9Ci0KLSNpZiBF
TkFCTEUoTk9USUZJQ0FUSU9OUykKLSAgICBOb3RpZmljYXRpb25DbGllbnQqIG5vdGlmaWNhdGlv
bkNsaWVudCgpIGZpbmFsIHsgcmV0dXJuIG51bGxwdHI7IH0KLSNlbmRpZgotCi0gICAgY2xhc3Mg
RW1wdHlFdmVudExvb3AgZmluYWwgOiBwdWJsaWMgRXZlbnRMb29wIHsKLSAgICBwdWJsaWM6Ci0g
ICAgICAgIHN0YXRpYyBSZWY8RW1wdHlFdmVudExvb3A+IGNyZWF0ZShKU0M6OlZNJiB2bSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRW1wdHlFdmVudExvb3Ao
dm0pKTsKLSAgICAgICAgfQotCi0gICAgICAgIE1pY3JvdGFza1F1ZXVlJiBtaWNyb3Rhc2tRdWV1
ZSgpIGZpbmFsIHsgcmV0dXJuIG1fcXVldWU7IH07Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBl
eHBsaWNpdCBFbXB0eUV2ZW50TG9vcChKU0M6OlZNJiB2bSkKLSAgICAgICAgICAgIDogbV9xdWV1
ZShNaWNyb3Rhc2tRdWV1ZSh2bSkpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHZv
aWQgc2NoZWR1bGVUb1J1bigpIGZpbmFsIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICAg
ICAgYm9vbCBpc0NvbnRleHRUaHJlYWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0K
LSAgICAgICAgTWljcm90YXNrUXVldWUgbV9xdWV1ZTsKLSAgICB9OwotCi0gICAgUmVmPEpTQzo6
Vk0+IG1fdm07Ci0gICAgUmVmPFNlY3VyaXR5T3JpZ2luPiBtX29yaWdpbjsKLSAgICBVUkwgbV91
cmw7Ci0gICAgUmVmPEVtcHR5RXZlbnRMb29wPiBtX2V2ZW50TG9vcDsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8RXZlbnRMb29wVGFza0dyb3VwPiBtX2V2ZW50TG9vcFRhc2tHcm91cDsKLSAgICBTZXR0
aW5nczo6VmFsdWVzIG1fc2V0dGluZ3NWYWx1ZXM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>