<?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>226162</bug_id>
          
          <creation_ts>2021-05-23 23:10:04 -0700</creation_ts>
          <short_desc>Putting HashMap in a heap block hurts memory use, speed, code size (part 1)</short_desc>
          <delta_ts>2025-07-21 20:34:26 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>Other</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>226068</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>berto</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>graouts</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jamesr</cc>
    
    <cc>japhet</cc>
    
    <cc>jfernandez</cc>
    
    <cc>jsbell</cc>
    
    <cc>kangil.han</cc>
    
    <cc>keith_miller</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>macpherson</cc>
    
    <cc>mark.lam</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>msaboff</cc>
    
    <cc>pdr</cc>
    
    <cc>rego</cc>
    
    <cc>saam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>svillar</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1763034</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-23 23:10:04 -0700</bug_when>
    <thetext>Putting HashMap in a heap block hurts memory use, speed, and code size. We should stop doing that. This bug  will cover removing *most* cases where we do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763035</commentid>
    <comment_count>1</comment_count>
      <attachid>429504</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-23 23:17:02 -0700</bug_when>
    <thetext>Created attachment 429504
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763036</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2021-05-23 23:18:05 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See https://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763038</commentid>
    <comment_count>3</comment_count>
      <attachid>429506</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-23 23:31:18 -0700</bug_when>
    <thetext>Created attachment 429506
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765328</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-30 23:11:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/78675956&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2129648</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2025-07-12 20:48:12 -0700</bug_when>
    <thetext>Pull request: https://github.com/WebKit/WebKit/pull/47945</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2131785</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2025-07-21 20:34:20 -0700</bug_when>
    <thetext>Committed 297725@main (0c95ee27a86e): &lt;https://commits.webkit.org/297725@main&gt;

Reviewed commits have been landed. Closing PR #47945 and removing active labels.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429504</attachid>
            <date>2021-05-23 23:17:02 -0700</date>
            <delta_ts>2021-05-23 23:36:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226162-20210523231701.patch</filename>
            <type>text/plain</type>
            <size>261869</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3OTQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
YmE4NmE0M2RlYmJlOTRhOGMyNWUwOGVhYjlhNjNhNThhZDFmNGM0Li4xNWY0Y2Q4Y2I3Mzc3Y2I2
OTcyMTk4MWFlMTNkZGVjOTIzYWQwOTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MyBAQAorMjAyMS0wNS0yMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUHV0dGluZyBIYXNoTWFwIGluIGEgaGVhcCBibG9jayBodXJ0cyBtZW1vcnkgdXNl
LCBzcGVlZCwgY29kZSBzaXplCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMjYxNjIKKworICAgICAgICBIYXNoTWFwLCBIYXNoU2V0LCBIYXNoQ291bnRl
ZFNldCwgTGlzdEhhc2hTZXQsIGFuZCBXZWFrSGFzaFNldCBhbGwKKyAgICAgICAgY29udGFpbiBv
bmx5IGEgc2luZ2xlIHBvaW50ZXIgaW4gcHJvZHVjdGlvbiBidWlsZHMuIFB1dHRpbmcgb25lIGlu
dG8KKyAgICAgICAgYSBibG9jayBvbiB0aGUgaGVhcCBjb3N0cyBtZW1vcnkgKHRoZSBoZWFwIGJs
b2NrKSwgc3BlZWQgYW5kIGNvZGUgc2l6ZQorICAgICAgICAoY2hhc2luZyBvbmUgbW9yZSBwb2lu
dGVyLCBhZGRpdGlvbmFsIG51bGwgY2hlY2tzKS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9KU0NsYXNzUmVmLmNwcDoKKyAgICAgICAgKE9w
YXF1ZUpTQ2xhc3M6Ok9wYXF1ZUpTQ2xhc3MpOiBVcGRhdGUgc28gbV9zdGF0aWNWYWx1ZXMgYW5k
CisgICAgICAgIG1fc3RhdGljRnVuY3Rpb25zIGFyZSBubyBsb25nZXIgdXNpbmcgdW5pcXVlX3B0
ci4KKyAgICAgICAgKE9wYXF1ZUpTQ2xhc3M6On5PcGFxdWVKU0NsYXNzKTogRGl0dG8uCisgICAg
ICAgIChPcGFxdWVKU0NsYXNzQ29udGV4dERhdGE6Ok9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSk6
IERpdHRvLgorICAgICAgICAoT3BhcXVlSlNDbGFzczo6c3RhdGljVmFsdWVzKTogRGl0dG8uCisg
ICAgICAgIChPcGFxdWVKU0NsYXNzOjpzdGF0aWNGdW5jdGlvbnMpOiBEaXR0by4KKyAgICAgICAg
KiBBUEkvSlNDbGFzc1JlZi5oOiBEaXR0by4KKworICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhl
YXAuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkluZGV4ZWRBYnN0cmFjdEhlYXA6OmF0U2xvdyk6
IFVwZGF0ZSBzbyBtX2xhcmdlSW5kaWNlcworICAgICAgICBpcyBubyBsb25nZXIgdXNpbmcgdW5p
cXVlX3B0ci4KKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFwLmg6IERpdHRvLgorCisgICAg
ICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6cHJvdGVjdGVkT2JqZWN0
VHlwZUNvdW50cyk6IFVwZGF0ZSB0byBub3QgcmV0dXJuCisgICAgICAgIGEgdW5pcXVlX3B0ci4K
KyAgICAgICAgKEpTQzo6SGVhcDo6b2JqZWN0VHlwZUNvdW50cyk6IERpdHRvLgorICAgICAgICAo
SlNDOjpIZWFwOjphZGRDb3JlQ29uc3RyYWludHMpOiBVcGRhdGUgc2luY2UgbV9tYXJrTGlzdFNl
dCBpcworICAgICAgICBubyBsb25nZXIgYSB1bmlxdWVfcHRyLgorICAgICAgICAqIGhlYXAvSGVh
cC5oOiBEaXR0by4KKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVzLmg6IERpdHRvLgorCisgICAg
ICAgICogaGVhcC9IZWFwVXRpbC5oOgorICAgICAgICAoSlNDOjpIZWFwVXRpbDo6aXNQb2ludGVy
R0NPYmplY3RKU0NlbGwpOiBSZW1vdmVkIGNoZWNrIHRvIHNlZQorICAgICAgICBpZiBhIHNldCBp
cyBlbXB0eSBiZWZvcmUgY2FsbGluZyBjb250YWlucyBvbiBpdC4gVGhhdCdzIHVubmVlZGVkCisg
ICAgICAgIGV4dHJhIGNvZGUuCisKKyAgICAgICAgKiBoZWFwL01hcmtlZFNwYWNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmVuYWJsZVByZWNpc2VBbGxvY2F0aW9uVHJhY2tpbmcp
OiBVcGRhdGUgc2luY2UKKyAgICAgICAgbV9wcmVjaXNlQWxsb2NhdGlvblNldCBpcyBub3cgdXNp
bmcgT3B0aW9uYWwgaW5zdGVhZCBvZiB1bmlxdWVfcHRyLgorICAgICAgICAqIGhlYXAvTWFya2Vk
U3BhY2UuaDogRGl0dG8uCisKKyAgICAgICAgKiBydW50aW1lL0V2YWxFeGVjdXRhYmxlLmNwcDoK
KyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBs
KTogVXBkYXRlIHNpbmNlCisgICAgICAgIG1fdGVtcGxhdGVPYmplY3RNYXAgaXMgbm8gbG9uZ2Vy
IGEgdW5pcXVlX3B0ci4KKyAgICAgICAgKiBydW50aW1lL0V2YWxFeGVjdXRhYmxlLmg6IERpdHRv
LgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpT
Qzo6RnVuY3Rpb25FeGVjdXRhYmxlOjplbnN1cmVUZW1wbGF0ZU9iamVjdE1hcCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwpOiBE
aXR0by4KKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oOiBEaXR0by4KKyAg
ICAgICAgKiBydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpT
Qzo6TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OmVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRy
ZW5JbXBsKTogRGl0dG8uCisgICAgICAgICogcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJs
ZS5oOiBEaXR0by4KKyAgICAgICAgKiBydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcDoKKyAg
ICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5J
bXBsKTogRGl0dG8uCisgICAgICAgICogcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oOiBEaXR0
by4KKyAgICAgICAgKiBydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlND
OjpTY3JpcHRFeGVjdXRhYmxlOjpjcmVhdGVUZW1wbGF0ZU9iamVjdCk6IENhbGwgdGhlIG5ldwor
ICAgICAgICB0ZW1wbGF0ZU9iamVjdE1hcCBpbnN0ZWFkIG9mIGVuc3VyZVRlbXBsYXRlT2JqZWN0
TWFwLgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjplbnN1cmVUZW1wbGF0ZU9iamVj
dE1hcEltcGwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjp0ZW1w
bGF0ZU9iamVjdE1hcCk6IFJlbmFtZWQgZnJvbQorICAgICAgICBlbnN1cmVUZW1wbGF0ZU9iamVj
dE1hcCBhbmQgZ290IHJpZCBvZiB0aGUgVk0gYXJndW1lbnQuCisgICAgICAgICogcnVudGltZS9T
Y3JpcHRFeGVjdXRhYmxlLmg6IERpdHRvLgorCiAyMDIxLTA1LTIzICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBDaGVja2VkTG9jayB0aGUgZGVmYXVsdCBM
b2NrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggMDhkOGFlNWMwY2NmYmU3NmM4NGI4ZWY4OGRmODFlMmQ0YWVhZTIy
OS4uY2EwMGQ1ZDMxMDU5MzkyN2U4OWI5OGQzYmM5ZGI3YjYwOTExYmVhMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDM0NCBAQAorMjAyMS0wNS0yMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5j
b20+CisKKyAgICAgICAgUHV0dGluZyBIYXNoTWFwIGluIGEgaGVhcCBibG9jayBodXJ0cyBtZW1v
cnkgdXNlLCBzcGVlZCwgY29kZSBzaXplCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjYxNjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlCYWNraW5n
U3RvcmVUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9y
eUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZUNsZWFyZWQpOgorICAgICAgICBT
dG9wIHVzaW5nIHVuaXF1ZV9wdHIgaW4gbV9vcmlnaW5hbFZhbHVlcyBhbmQgbV9jbGVhcmVkS2V5
VmFsdWVNYXBzIGFuZAorICAgICAgICB0byB0cmFuc2ZlciBvd25lcnNoaXAgb2YgYSBLZXlWYWx1
ZU1hcC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5QmFja2luZ1N0b3JlVHJh
bnNhY3Rpb246OnJlY29yZFZhbHVlQ2hhbmdlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbjo6YWJvcnQpOiBEaXR0by4K
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24uaDogRGl0dG8uCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
TWVtb3J5T2JqZWN0U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1v
cnlPYmplY3RTdG9yZTo6Y29udGFpbnNSZWNvcmQpOiBTdG9wIHVzaW5nCisgICAgICAgIHVuaXF1
ZV9wdHIgZm9yIG1fa2V5VmFsdWVTdG9yZS4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
TWVtb3J5T2JqZWN0U3RvcmU6OnJlcGxhY2VLZXlWYWx1ZVN0b3JlKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeU9iamVjdFN0b3JlOjpkZWxldGVSZWNvcmQpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5T2JqZWN0U3RvcmU6OmFk
ZFJlY29yZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlPYmpl
Y3RTdG9yZTo6cG9wdWxhdGVJbmRleFdpdGhFeGlzdGluZ1JlY29yZHMpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5T2JqZWN0U3RvcmU6OmNvdW50Rm9yS2V5UmFu
Z2UgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5T2Jq
ZWN0U3RvcmU6OnZhbHVlRm9yS2V5IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6Ok1lbW9yeU9iamVjdFN0b3JlOjp2YWx1ZUZvcktleVJhbmdlIGNvbnN0KTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeU9iamVjdFN0b3JlOjpsb3dl
c3RLZXlXaXRoUmVjb3JkSW5SYW5nZSBjb25zdCk6IERpdHRvLgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5oOiBEaXR0by4KKworICAgICAgICAq
IE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlVHJhY2tlcjo6b3BlbkRhdGFiYXNlcyk6IFN0b3AgdXNpbmcgdW5pcXVlX3B0
ciBmb3IKKyAgICAgICAgbV9vcGVuRGF0YWJhc2VNYXAsIG1fYmVpbmdDcmVhdGVkLCBhbmQgbV9i
ZWluZ0RlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmFkZE9wZW5E
YXRhYmFzZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpyZW1v
dmVPcGVuRGF0YWJhc2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tl
cjo6cmVjb3JkQ3JlYXRpbmdEYXRhYmFzZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGF0
YWJhc2VUcmFja2VyOjpkb25lQ3JlYXRpbmdEYXRhYmFzZSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YWJhc2VUcmFja2VyOjpjcmVhdGluZ0RhdGFiYXNlKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnJlY29yZERlbGV0aW5nRGF0YWJhc2UpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6ZG9uZURlbGV0aW5nRGF0YWJh
c2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6aXNEZWxldGlu
Z0RhdGFiYXNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmNh
bkRlbGV0ZU9yaWdpbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2Vy
OjpkZWxldGVEYXRhYmFzZUZpbGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
VHJhY2tlcjo6cmVtb3ZlRGVsZXRlZE9wZW5lZERhdGFiYXNlcyk6IERpdHRvLgorICAgICAgICAq
IE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmg6IERpdHRvLgorCisgICAgICAg
ICogYmluZGluZ3MvanMvV2luZG93UHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2luZG93
UHJveHk6OldpbmRvd1Byb3h5KTogU3RvcCB1c2luZyBVbmlxdWVSZWYgZm9yCisgICAgICAgIG1f
anNXaW5kb3dQcm94aWVzLgorICAgICAgICAoV2ViQ29yZTo6V2luZG93UHJveHk6On5XaW5kb3dQ
cm94eSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2luZG93UHJveHk6OmRldGFjaEZyb21G
cmFtZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2luZG93UHJveHk6OmRlc3Ryb3lKU1dp
bmRvd1Byb3h5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dQcm94eTo6Y3JlYXRl
SlNXaW5kb3dQcm94eSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2luZG93UHJveHk6Ompz
V2luZG93UHJveGllc0FzVmVjdG9yIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpX
aW5kb3dQcm94eTo6Y2xlYXJKU1dpbmRvd1Byb3hpZXNOb3RNYXRjaGluZ0RPTVdpbmRvdyk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6V2luZG93UHJveHk6OnNldERPTVdpbmRvdyk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6V2luZG93UHJveHk6OmF0dGFjaERlYnVnZ2VyKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dQcm94eTo6anNXaW5kb3dQcm94aWVzIGNvbnN0KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dQcm94eTo6cmVsZWFzZUpTV2luZG93UHJv
eGllcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2luZG93UHJveHk6OnNldEpTV2luZG93
UHJveGllcyk6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dpbmRvd1Byb3h5Lmg6IERp
dHRvLgorCisgICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjb3VudGVyVG9DU1NWYWx1ZSk6IFVzZSBhIHJlZmVyZW5jZSBpbnN0
ZWFkIG9mIGEgcG9pbnRlcgorICAgICAgICBmb3IgY291bnRlckRpcmVjdGl2ZXMuCisKKyAgICAg
ICAgKiBjc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6d3JhcEZvckRlcHJlY2F0ZWRD
U1NPTSk6CisgICAgICAgIFN0b3AgdXNpbmcgdW5pcXVlX3B0ciBmb3IgbV9jc3NvbVZhbHVlV3Jh
cHBlcnMuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uOjpk
aWRNdXRhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OklubGluZUNTU1N0eWxlRGVjbGFy
YXRpb246OmRpZE11dGF0ZSk6IERpdHRvLgorICAgICAgICAqIGNzcy9Qcm9wZXJ0eVNldENTU1N0
eWxlRGVjbGFyYXRpb24uaDogRGl0dG8uCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmJ1aWxkQWNjZXNzS2V5Q2FjaGUpOiBVc2UgT3B0
aW9uYWwgaW5zdGVhZCBvZgorICAgICAgICB1bmlxdWVfcHRyIGZvciBtX2FjY2Vzc0tleUNhY2hl
LgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmludmFsaWRhdGVBY2Nlc3NLZXlDYWNoZVNs
b3dDYXNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6d2lsbEJlUmVtb3Zl
ZEZyb21GcmFtZSk6IFN0b3AgdXNpbmcgdW5pcXVlX3B0cgorICAgICAgICBmb3IgbV90b3VjaEV2
ZW50VGFyZ2V0cyBhbmQgbV93aGVlbEV2ZW50VGFyZ2V0cy4KKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpyZW1vdmVBbGxFdmVudExpc3RlbmVycyk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OndoZWVsRXZlbnRIYW5kbGVyc0NoYW5nZWQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjpkaWRBZGRXaGVlbEV2ZW50SGFuZGxlcik6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRpZFJlbW92ZVdoZWVsRXZlbnRIYW5kbGVyKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6d2hlZWxFdmVudEhhbmRsZXJDb3VudCBj
b25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRpZEFkZFRvdWNoRXZl
bnRIYW5kbGVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZGlkUmVtb3Zl
VG91Y2hFdmVudEhhbmRsZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpk
aWRSZW1vdmVFdmVudFRhcmdldE5vZGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50Ojp0b3VjaEV2ZW50SGFuZGxlckNvdW50IGNvbnN0KTogRGl0dG8uCisgICAgICAgICogZG9t
L0RvY3VtZW50Lmg6IERpdHRvLgorCisgICAgICAgICogZG9tL0lkVGFyZ2V0T2JzZXJ2ZXJSZWdp
c3RyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJZFRhcmdldE9ic2VydmVyUmVnaXN0cnk6OmFk
ZE9ic2VydmVyKTogU3RvcCB1c2luZworICAgICAgICB1bmlxdWVfcHRyIGZvciB0aGUgdmFsdWVz
IGluIG1fcmVnaXN0cnkuCisgICAgICAgIChXZWJDb3JlOjpJZFRhcmdldE9ic2VydmVyUmVnaXN0
cnk6OnJlbW92ZU9ic2VydmVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJZFRhcmdldE9i
c2VydmVyUmVnaXN0cnk6Om5vdGlmeU9ic2VydmVyc0ludGVybmFsKTogRGl0dG8uCisgICAgICAg
ICogZG9tL0lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5oOiBEaXR0by4KKworICAgICAgICAqIGRv
bS9NdXRhdGlvbk9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2
ZXI6OmRlbGl2ZXIpOiBTdG9wIHVzaW5nIHVuaXF1ZV9wdHIgZm9yCisgICAgICAgIHRoZSByZXR1
cm4gdmFsdWUgb2YgdGFrZVRyYW5zaWVudFJlZ2lzdHJhdGlvbnMuCisgICAgICAgICogZG9tL011
dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRp
b25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6b2JzZXJ2ZWRTdWJ0cmVlTm9kZVdpbGxEZXRhY2gpOgor
ICAgICAgICBTdG9wIHVzaW5nIHVuaXF1ZV9wdHIgZm9yIG1fdHJhbnNpZW50UmVnaXN0cmF0aW9u
Tm9kZXMuCisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uOjp0
YWtlVHJhbnNpZW50UmVnaXN0cmF0aW9ucyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TXV0
YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMgY29u
c3QpOiBEaXR0by4KKyAgICAgICAgKiBkb20vTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbi5o
OiBEaXR0by4KKworICAgICAgICAqIGh0bWwvRm9ybUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Rm9ybUNvbnRyb2xsZXI6OmNyZWF0ZVNhdmVkRm9ybVN0YXRlTWFwKTogU3RvcCB1
c2luZworICAgICAgICB1bmlxdWVfcHRyIGZvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgZnVu
Y3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpGb3JtQ29udHJvbGxlcjo6Zm9ybUVsZW1lbnRzU3Rh
dGUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKiBodG1sL0Zvcm1Db250cm9sbGVyLmg6IERpdHRv
LgorCisgICAgICAgICogbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50TG9hZGVyOjp0cnlMb2FkaW5nU3Vic3RpdHV0ZURhdGEpOiBVcGRhdGUgc2lu
Y2UKKyAgICAgICAgc2NoZWR1bGVkUnVuTG9vcFBhaXJzIG5vdyByZXR1cm5zIGEgcmVmZXJlbmNl
LgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZUxvYWRlcjo6bG9hZERhdGFVUkwpOiBEaXR0by4KKworICAgICAgICAqIGxvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNo
ZWRSZXNvdXJjZUxvYWRlcjo6ZG9jdW1lbnREaWRGaW5pc2hMb2FkRXZlbnQpOiBTdG9wCisgICAg
ICAgIHVzaW5nIHVuaXF1ZV9wdHIgZm9yIG1fcHJlbG9hZHMuCisgICAgICAgIChXZWJDb3JlOjpD
YWNoZWRSZXNvdXJjZUxvYWRlcjo6cHJlbG9hZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
Q2FjaGVkUmVzb3VyY2VMb2FkZXI6Ondhcm5VbnVzZWRQcmVsb2Fkcyk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OmlzUHJlbG9hZGVkIGNvbnN0KTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Y2xlYXJQcmVsb2Fk
cyk6IERpdHRvLgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5o
OiBEaXR0by4KKworICAgICAgICAqIGxvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6c2Vzc2lvblJlc291cmNlTWFwKTogU3RvcCB1c2lu
ZyB1bmlxdWVfcHRyCisgICAgICAgIGZvciB0aGUgdmFsdWVzIGluIG1fYWxsUmVzb3VyY2VzIGFu
ZCBtX3Nlc3Npb25SZXNvdXJjZXMuCisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6ZW5z
dXJlU2Vzc2lvblJlc291cmNlTWFwKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlD
YWNoZTo6cmVzb3VyY2VGb3JSZXF1ZXN0SW1wbCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
TWVtb3J5Q2FjaGU6OmZvckVhY2hSZXNvdXJjZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
TWVtb3J5Q2FjaGU6OmZvckVhY2hTZXNzaW9uUmVzb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6Ok1lbW9yeUNhY2hlOjpwcnVuZURlYWRSZXNvdXJjZXNUb1NpemUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpscnVMaXN0Rm9yKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6cmVtb3ZlUmVzb3VyY2VzV2l0aE9yaWdpbik6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OmdldE9yaWdpbnNXaXRoQ2FjaGUpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpvcmlnaW5zV2l0aENhY2hlIGNv
bnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6cmVtb3ZlUmVxdWVz
dEZyb21TZXNzaW9uQ2FjaGVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNo
ZTo6Z2V0U3RhdGlzdGljcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6
OnNldERpc2FibGVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6ZHVt
cExSVUxpc3RzIGNvbnN0KTogRGl0dG8uCisgICAgICAgICogbG9hZGVyL2NhY2hlL01lbW9yeUNh
Y2hlLmg6IERpdHRvLgorCisgICAgICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpzZXRJc1Zpc2libGVBbmRBY3RpdmVJbnRl
cm5hbCk6IFVwZGF0ZQorICAgICAgICBzaW5jZSBzY3JvbGxhYmxlQXJlYXMgcmV0dXJucyBhIHJl
ZmVyZW5jZS4KKworICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lVmlldzo6ZGlkRGVzdHJveVJlbmRlclRyZWUpOiBTdG9wIHVzaW5nCisgICAgICAg
IHVuaXF1ZV9wdHIgZm9yIG1fZW1iZWRkZWRPYmplY3RzVG9VcGRhdGUsIG1fdmlld3BvcnRDb25z
dHJhaW5lZE9iamVjdHMsCisgICAgICAgIGFuZCBtX3Nsb3dSZXBhaW50T2JqZWN0cy4KKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6aW52YWxpZGF0ZVNjcm9sbGJhcnNGb3JBbGxTY3JvbGxh
YmxlQXJlYXMpOiBTdG9wCisgICAgICAgIHVzaW5nIHVuaXF1ZV9wdHIgZm9yIG1fc2Nyb2xsYWJs
ZUFyZWFzLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjphZGRFbWJlZGRlZE9iamVjdFRv
VXBkYXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnJlbW92ZUVtYmVk
ZGVkT2JqZWN0VG9VcGRhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6
YWRkU2xvd1JlcGFpbnRPYmplY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmll
dzo6cmVtb3ZlU2xvd1JlcGFpbnRPYmplY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lVmlldzo6YWRkVmlld3BvcnRDb25zdHJhaW5lZE9iamVjdCk6IERpdHRvLiBBbHNvIGdvdAor
ICAgICAgICByaWQgb2YgdW5uZWNlc3NhcnkgZG91YmxlIGhhc2hpbmcuCisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVZpZXc6OnJlbW92ZVZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3QpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2Nyb2xsQ29udGVudHNGYXN0UGF0aCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpyZXBhaW50U2xvd1JlcGFpbnRPYmpl
Y3RzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNldFZpZXdwb3J0Q29u
c3RyYWluZWRPYmplY3RzTmVlZExheW91dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVWaWV3Ojp1cGRhdGVFbWJlZGRlZE9iamVjdHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lVmlldzo6YWRqdXN0U2Nyb2xsU3RlcEZvckZpeGVkQ29udGVudCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojpub3RpZnlQYWdlVGhhdENvbnRlbnRBcmVh
V2lsbFBhaW50IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmFk
ZFNjcm9sbGFibGVBcmVhKTogRGl0dG8uIEFsc28gdGFrZSBhIHJlZmVyZW5jZS4KKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lVmlldzo6cmVtb3ZlU2Nyb2xsYWJsZUFyZWEpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6Y29udGFpbnNTY3JvbGxhYmxlQXJlYSBjb25zdCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjphZGRDaGlsZCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpyZW1vdmVDaGlsZCk6IERpdHRvLgorICAgICAgICAq
IHBhZ2UvRnJhbWVWaWV3Lmg6IERpdHRvLgorCisgICAgICAgICogcGFnZS9NZW1vcnlSZWxlYXNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxvZ01lbW9yeVN0YXRpc3RpY3NBdFRpbWVPZkRlYXRo
KTogVXBkYXRlZCBzaW5jZQorICAgICAgICBvYmplY3RUeXBlQ291bnRzIG5vIGxvbmdlciByZXR1
cm5zIGEgdW5pcXVlX3B0ci4KKworICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQYWdlOjpsb2NrQWxsT3ZlcmxheVNjcm9sbGJhcnNUb0hpZGRlbik6IFVwZGF0ZWQg
c2luY2UKKyAgICAgICAgc2Nyb2xsYWJsZUFyZWFzIG5vdyByZXR1cm5zIGEgcmVmZXJlbmNlIGlu
c3RlYWQgb2YgYSBwb2ludGVyLgorCisgICAgICAgICogcGFnZS9QYWdlLmg6IFN0b3AgdXNpbmcg
dW5pcXVlX3B0ciBmb3IgbV9zY2hlZHVsZWRSdW5Mb29wUGFpcnMuCisKKyAgICAgICAgKiBwYWdl
L1BlcmZvcm1hbmNlTG9nZ2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQZXJmb3JtYW5jZUxv
Z2dpbmc6OmphdmFTY3JpcHRPYmplY3RDb3VudHMpOiBVcGRhdGVkCisgICAgICAgIHNpbmNlIG9i
amVjdFR5cGVDb3VudHMgbm8gbG9uZ2VyIHJldHVybnMgYSB1bmlxdWVfcHRyLgorCisgICAgICAg
ICogcGFnZS9QcmludENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJpbnRDb250ZXh0
OjplbmQpOiBVc2UgT3B0aW9uYWwgaW5zdGVhZCBvZiB1bmlxdWVfcHRyCisgICAgICAgIGZvciBt
X2xpbmtlZERlc3RpbmF0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OlByaW50Q29udGV4dDo6b3V0
cHV0TGlua2VkRGVzdGluYXRpb25zKTogRGl0dG8uCisgICAgICAgICogcGFnZS9QcmludENvbnRl
eHQuaDogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL21hYy9QYWdlTWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6UGFnZTo6YWRkU2NoZWR1bGVQYWlyKTogU3RvcCB1c2luZyB1bmlxdWVfcHRyIGZv
cgorICAgICAgICBtX3NjaGVkdWxlZFJ1bkxvb3BQYWlycy4KKyAgICAgICAgKFdlYkNvcmU6OlBh
Z2U6OnJlbW92ZVNjaGVkdWxlUGFpcik6IERpdHRvLgorCisgICAgICAgICogcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OmFic29sdXRlRXZlbnRUcmFja2luZ1JlZ2lvbnNGb3JGcmFtZSBjb25zdCk6
CisgICAgICAgIFVwZGF0ZWQgc2luY2Ugc2Nyb2xsYWJsZUFyZWFzIHJldHVybnMgYSByZWZlcmVu
Y2UuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6aGFzVmlzaWJsZVNs
b3dSZXBhaW50Vmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMgY29uc3QpOgorICAgICAgICBVcGRh
dGVkIHNpbmNlIHZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzIHJldHVybnMgYSByZWZlcmVuY2Uu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1ldHJpY3NNYXAuaDogU3RvcCB1
c2luZyB1bmlxdWVfcHRyCisgICAgICAgIGZvciBtX3BhZ2VzLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg6IFN0b3AgdXNpbmcK
KyAgICAgICAgdW5pcXVlX3B0ciBmb3IgbV9uYW1lSGFzaE1hcEZvclNoYWRlcnMuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxl
U2hhZGVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6bWFwcGVkU3ltYm9sTmFtZSk6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9OZXR3b3JraW5nQ29udGV4dC5oOiBVcGRhdGVkIHNjaGVkdWxlZFJ1bkxvb3BQYWlycworICAg
ICAgICB0byByZXR1cm4gYSBjb25zdCBwb2ludGVyIHRvIHRoZSBzZXQuCisKKyAgICAgICAgKiBy
ZW5kZXJpbmcvR3JpZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmlkOjpzZXRBdXRvUmVwZWF0
RW1wdHlDb2x1bW5zKTogU3RvcCB1c2luZyBhIHVuaXF1ZV9wdHIKKyAgICAgICAgZm9yIG1fYXV0
b1JlcGVhdEVtcHR5Q29sdW1ucy4KKyAgICAgICAgKFdlYkNvcmU6OkdyaWQ6OnNldEF1dG9SZXBl
YXRFbXB0eVJvd3MpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkdyaWQ6Omhhc0F1dG9SZXBl
YXRFbXB0eVRyYWNrcyBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R3JpZDo6aXNF
bXB0eUF1dG9SZXBlYXRUcmFjayBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R3Jp
ZDo6YXV0b1JlcGVhdEVtcHR5VHJhY2tzIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpHcmlkOjpzZXROZWVkc0l0ZW1zUGxhY2VtZW50KTogRGl0dG8uCisgICAgICAgICogcmVuZGVy
aW5nL0dyaWQuaDogRGl0dG8uCisKKyAgICAgICAgKiByZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5n
QWxnb3JpdGhtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRUcmFja1NpemluZ0FsZ29yaXRo
bTo6Y29tcHV0ZUZsZXhGYWN0b3JVbml0U2l6ZSBjb25zdCk6CisgICAgICAgIFN0b3AgdXNpbmcg
dW5pcXVlX3B0ciBmb3IgdGhlIGFydWdtZW50IHRvIHRoaXMgZnVuY3Rpb24uCisgICAgICAgICog
cmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5oOiBEaXR0by4KKworICAgICAgICAq
IHJlbmRlcmluZy9IaXRUZXN0TG9jYXRpb24uY3BwOiBEZWxldGVkIHRoZSBkZWZhdWx0IGNvbnN0
cnVjdG9yLAorICAgICAgICBjb3B5IGNvbnN0cnVjdG9yLCBkZXN0cnVjdG9yLCBhbmQgYXNzaWdu
bWVudCBvcGVyYXRvci4KKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdExvY2F0aW9uLmg6IFVz
ZSB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3IKKyAgICAgICAgdGhlIGRlZmF1bHQgY29u
c3RydWN0b3IsIGNvcHkgY29uc3RydWN0b3IsIGRlc3RydWN0b3IsIGFuZAorICAgICAgICBhc3Np
Z25tZW50IG9wZXJhdG9yLgorCisgICAgICAgICogcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kVG9Ob2RlU2V0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQpOiBEZWxldGVkIHRoZSBjb3B5
CisgICAgICAgIGNvbnN0cnVjdG9yLiBXZSBjYW4gdXNlIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0
aW9uIG5vdyB0aGF0IHdlCisgICAgICAgIHN0b3BwZWQgdXNpbmcgdW5pcXVlX3B0ciBmb3IgbV9s
aXN0QmFzZWRUZXN0UmVzdWx0LgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6b3Bl
cmF0b3I9KTogRGVsZXRlZC4gRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0
OjphZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0Q29tbW9uKToKKyAgICAgICAgRmFjdG9yZWQg
b3V0IGEgaGVscGVyIGZ1bmN0aW9uIHNvIHRoZXJlIGlzIGxlc3MgdGVtcGxhdGUgY29kZS4KKyAg
ICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OmFwcGVuZCk6IFNpbXBsaWZpZWQgdXNpbmcg
YSBtb2Rlcm4gZm9yCisgICAgICAgIGxsbG9vcAorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJl
c3VsdDo6bGlzdEJhc2VkVGVzdFJlc3VsdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpIaXRUZXN0UmVzdWx0OjptdXRhYmxlTGlzdEJhc2VkVGVzdFJlc3VsdCk6IERlbGV0ZWQu
CisgICAgICAgICogcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaDogRGl0dG8uCisKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDogVXBkYXRlIHRvIHVzZSBjb25zdCBwb2ludGVycyB3
aGVuIGV4cG9zaW5nCisgICAgICAgIHNldHMgc28gdGhleSBjYW4gYmUgaXRlcmF0ZWQuIFRoaXMg
d2lsbCBoZWxwIGZvciBwb3NzaWJsZSBmdXR1cmUKKyAgICAgICAgcmVmYWN0b3JpbmcgdG8gbm90
IHN0b3JlIHRoZXNlIHNldHMgaW4gc2VwYXJhdGUgYmxvY2tzIG9uIHRoZSBoZWFwLgorCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGxh
bkNvdW50ZXIpOiBVcGRhdGVkIHNpbmNlIGNvdW50ZXJEaXJlY3RpdmVzIGlzIGEgcmVmZXJlbmNl
LgorICAgICAgICAoV2ViQ29yZTo6bWFrZUNvdW50ZXJOb2RlKTogU3RvcCB1c2luZyB1bmlxdWVf
cHRyIGluIGNvdW50ZXJNYXBzLgorICAgICAgICAoV2ViQ29yZTo6ZGVzdHJveUNvdW50ZXJOb2Rl
V2l0aG91dE1hcFJlbW92YWwpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvdW50
ZXI6OmRlc3Ryb3lDb3VudGVyTm9kZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVyTm9kZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
dXBkYXRlQ291bnRlcnMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvdW50ZXI6
OnJlbmRlcmVyU3R5bGVDaGFuZ2VkU2xvd0Nhc2UpOiBEaXR0by4KKyAgICAgICAgKHNob3dDb3Vu
dGVyUmVuZGVyZXJUcmVlKTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckNvdW50
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvdW50ZXI6OnJlbmRlcmVyU3R5bGVDaGFu
Z2VkKTogRGl0dG8uCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRlZEZsb3cu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhZ21lbnRlZEZsb3c6OmludmFsaWRhdGVG
cmFnbWVudHMpOiBTdG9wIHVzaW5nCisgICAgICAgIHVuaXF1ZS1QdHIgZm9yIG1fbGluZVRvRnJh
Z21lbnRNYXAuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFnbWVudGVkRmxvdzo6cmVtb3Zl
TGluZUZyYWdtZW50SW5mbyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhZ21l
bnRlZEZsb3c6OmNoZWNrTGluZXNDb25zaXN0ZW5jeSBjb25zdCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRnJhZ21lbnRlZEZsb3c6OmNsZWFyTGluZXNUb0ZyYWdtZW50TWFwKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFnbWVudGVkRmxvdzo6Y29udGFpbmlu
Z0ZyYWdtZW50TWFwKTogTW92ZWQgdGhpcworICAgICAgICB0byB0aGUgaGVhZGVyIHNpbmNlIGl0
J3Mgbm93IHRyaXZpYWwuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50ZWRGbG93
Lmg6IERpdHRvLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6Z3V0dGVyc1NpemUgY29uc3QpOiBTdG9wIHVzaW5nIHVu
aXF1ZV9wdHIKKyAgICAgICAgZm9yIE9yZGVyZWRUcmFja0luZGV4U2V0LgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyR3JpZDo6Y29tcHV0ZUVtcHR5VHJhY2tzRm9yQXV0b1JlcGVhdCBjb25zdCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6dHJhY2tTaXplc0ZvckNvbXB1
dGVkU3R5bGUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnBv
cHVsYXRlR3JpZFBvc2l0aW9uc0ZvckRpcmVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyR3JpZDo6bm9uQ29sbGFwc2VkVHJhY2tzIGNvbnN0KTogRGl0dG8uCisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckdyaWQuaDogRGl0dG8uCisKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Q29tcG9zaXRvcjo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnMpOiBVcGRhdGUKKyAgICAgICAgc2lu
Y2Ugdmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMgaXMgYSByZWZlcmVuY2UuCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVN5bmNocm9ub3VzU2Nyb2xsaW5n
Tm9kZXMpOgorICAgICAgICBVcGRhdGUgc2luY2Ugc2xvd1JlcGFpbnRPYmplY3RzIGlzIGEgcmVm
ZXJlbmNlLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2xlYXIp
OiBQYXNzIHJlZmVyZW5jZSB0bworICAgICAgICBjb250YWlucy9hZGQvcmVtb3ZlU2Nyb2xsYWJs
ZUFyZWEuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRh
dGVTY3JvbGxhYmxlQXJlYVNldCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJM
aXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OlJlbmRlckxpc3RC
b3gpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OndpbGxCZURlc3Ry
b3llZCk6IERpdHRvLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxv
dy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3c6OlJlbmRlck11
bHRpQ29sdW1uRmxvdyk6IE1vdmUgZGF0YQorICAgICAgICBtZW1iZXIgaW5pdGlhbGl6YXRpb24g
dG8gdGhlIGNsYXNzIGRlZmluaXRpb24uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNv
bHVtbkZsb3c6OmZpbmRDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIgY29uc3QpOgorICAgICAgICBT
dG9wIHVzaW5nIHVuaXF1ZV9wdHIgZm9yIG1fc3Bhbm5lck1hcC4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93Lmg6IERpdHRvLgorCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNl
Y3Rpb246OnJlbGF5b3V0Q2VsbElmRmxleGVkKTogVXBkYXRlZAorICAgICAgICBzaW5jZSBwZXJj
ZW50SGVpZ2h0RGVzY2VuZGFudHMgcmV0dXJucyBhIGNvbnN0IHBvaW50ZXIuCisKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndpZGdldFJl
bmRlcmVyTWFwKTogVXNlIE5ldmVyRGVzdHJveWVkIGluc3RlYWQgb2YKKyAgICAgICAgcHV0dGlu
ZyB0aGUgbWFwIG9uIHRoZSBoZWFwLgorCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpjaGFuZ2VSZXF1aXJl
c0xheW91dCBjb25zdCk6IFN0b3AgdXNpbmcKKyAgICAgICAgdW5pcXVlX3B0ciBmb3IgY291bnRl
ckRpcmVjdGl2ZXMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6YWRkQ3VzdG9tUGFp
bnRXYXRjaFByb3BlcnR5KTogU3RvcCB1c2luZworICAgICAgICB1bmlxdWVfcHRyIGZvciBjdXN0
b21QYWludFdhdGNoZWRQcm9wZXJ0aWVzLgorICAgICAgICAoV2ViQ29yZTo6Y2hhbmdlZEN1c3Rv
bVBhaW50V2F0Y2hlZFByb3BlcnR5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
dHlsZTo6Y291bnRlckRpcmVjdGl2ZXMgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclN0eWxlOjphY2Nlc3NDb3VudGVyRGlyZWN0aXZlcyk6IERpdHRvLgorICAgICAgICAq
IHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJp
bmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjpTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjpvcGVy
YXRvcj09IGNvbnN0KTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFy
ZU5vbkluaGVyaXRlZERhdGEuaDogRGl0dG8uCisKKyAgICAgICAgKiBzdHlsZS9TdHlsZVNjb3Bl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpTY29wZTo6dXBkYXRlQWN0aXZlU3R5bGVT
aGVldHMpOiBVc2UgT3B0aW9uYWwgaW5zdGVhZAorICAgICAgICBvZiB1bmlxdWVfcHRyIGZvciBt
X3dlYWtDb3B5T2ZBY3RpdmVTdHlsZVNoZWV0TGlzdEZvckZhc3RMb29rdXAuCisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6U2NvcGU6OmFjdGl2ZVN0eWxlU2hlZXRzQ29udGFpbnMgY29uc3QpOiBE
SXR0by4KKyAgICAgICAgKiBzdHlsZS9TdHlsZVNjb3BlLmg6IERpdHRvLgorCisgICAgICAgICog
dGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpudW1i
ZXJPZlNjcm9sbGFibGVBcmVhcyk6IFVwZGF0ZSBzaW5jZQorICAgICAgICBzY3JvbGxhYmxlQXJl
YXMgcmV0dXJucyBhIHJlZmVyZW5jZS4KKwogMjAyMS0wNS0yMyAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgQ2hlY2tlZExvY2sgdGhlIGRlZmF1bHQgTG9j
awpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwppbmRleCA0OTBmZjE2NWUxOTcxNDA1NTUxOGJhMzJjNWMyNGYyN2VkZGVmYTAyLi4z
MjY0MTIwNGVlYTQzNDdmOTYyMTg5NzllNzlkY2YyYTkxYjVjYTAzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDUxIEBACisyMDIxLTA1LTIzICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKwor
ICAgICAgICBQdXR0aW5nIEhhc2hNYXAgaW4gYSBoZWFwIGJsb2NrIGh1cnRzIG1lbW9yeSB1c2Us
IHNwZWVkLCBjb2RlIHNpemUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyNjE2MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWRTY2hlZHVsZXIuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrTG9hZFNjaGVkdWxlcjo6c2V0UmVzb3VyY2VMb2FkU2NoZWR1
bGluZ01vZGUpOiBTdG9wIHVzaW5nCisgICAgICAgIHVuaXF1ZV9wdHIgaW4gbV9wYWdlQ29udGV4
dHMuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtMb2FkU2NoZWR1bGVyOjpjb250ZXh0Rm9yTG9h
ZCk6IERpdHRvLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkU2NoZWR1bGVy
Lmg6IERpdHRvLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvUHJlZmV0Y2hDYWNo
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlByZWZldGNoQ2FjaGU6OmNsZWFyKTogU3RvcCB1c2lu
ZyB1bmlxdWVfcHRyIGluIG1fc2Vzc2lvblByZWZldGNoZXMuCisgICAgICAgIChXZWJLaXQ6OlBy
ZWZldGNoQ2FjaGU6OnRha2UpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6UHJlZmV0Y2hDYWNo
ZTo6c3RvcmUpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6UHJlZmV0Y2hDYWNoZTo6c3RvcmVS
ZWRpcmVjdCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpQcmVmZXRjaENhY2hlOjpjbGVhckV4
cGlyZWRFbnRyaWVzKTogRGl0dG8uCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvUHJl
ZmV0Y2hDYWNoZS5oOiBEaXR0by4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL0NvY29hL1dLV2ViUHJvY2Vzc1BsdWdJbkhpdFRlc3RSZXN1bHQubW06CisgICAgICAg
IEFkZGVkIGFuIGluY2x1ZGUgbmVlZGVkIGJlY2F1c2Ugb2YgY2hhbmdlcyB0byBIaXRUZXN0UmVz
dWx0LgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2dsaWIvV2ViS2l0
V2ViSGl0VGVzdFJlc3VsdC5jcHA6IERpdHRvLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVn
aW5zL1BERi9QREZQbHVnaW4ubW06CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6dXBkYXRl
U2Nyb2xsYmFycyk6IFVzZSByZWZlcmVuY2VzIHdoZW4gY2FsbGluZworICAgICAgICBhZGQvcmVt
b3ZlU2Nyb2xsYWJsZUFyZWEuCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6d2lsbERldGFj
aFJlbmRlcmVyKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6ZGVzdHJveSk6
IERpdHRvLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQYXN0ZWJv
YXJkT3ZlcnJpZGVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZE92ZXJyaWRl
czo6YWRkT3ZlcnJpZGUpOiBTdG9wIHVzaW5nIHVuaXF1ZV9wdHIgZm9yCisgICAgICAgIG1fb3Zl
cnJpZGVzTWFwLgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpyZW1v
dmVPdmVycmlkZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkT3ZlcnJp
ZGVzOjpvdmVycmlkZGVuVHlwZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVi
b2FyZE92ZXJyaWRlczo6Z2V0RGF0YUZvck92ZXJyaWRlIGNvbnN0KTogRGl0dG8uCisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmg6IERp
dHRvLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRnJhbWVO
ZXR3b3JraW5nQ29udGV4dC5oOiBVcGRhdGUKKyAgICAgICAgc2NoZWR1bGVkUnVuTG9vcFBhaXJz
IHRvIHJldHVybiBhIGNvbnN0IHBvaW50ZXIuIEFsc28gbWFya2VkIGV2ZXJ5dGhpbmcgZmluYWwK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5ldHdvcmtp
bmdDb250ZXh0Lm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0
OjpzY2hlZHVsZWRSdW5Mb29wUGFpcnMgY29uc3QpOiBEaXR0by4KKworICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6cGFnZUNvbnRhaW5z
QW55SG9yaXpvbnRhbFNjcm9sbGJhcnMpOiBVcGRhdGVkIHNpbmNlIHNjcm9sbGFibGVBcmVhcwor
ICAgICAgICByZXR1cm5zIGEgcmVmZXJlbmNlLgorCiAyMDIxLTA1LTIzICBDaHJpcyBEdW1leiAg
PGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBDaGVja2VkTG9jayB0aGUgZGVmYXVs
dCBMb2NrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggNmY2YmI3MzM4MmNkMmU1N2M3
ZDk0ZTdkMTE4MGRhMzFlOTQ3YjkyOC4uYmM5NzFlY2Y2OTY2ZmIzZjNmOWViYmM3NzlhNWZiMjQx
MWQzZjZiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisy
MDIxLTA1LTIxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBQdXR0
aW5nIEhhc2hNYXAgaW4gYSBoZWFwIGJsb2NrIGh1cnRzIG1lbW9yeSB1c2UsIHNwZWVkLCBjb2Rl
IHNpemUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
NjE2MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
SGlzdG9yeS9XZWJIaXN0b3J5Lm1tOiBVc2UgY29uc3RleHByIGZvciBzb21lIGZpbGUtbG9jYWwg
Y29uc3RhbnRzLgorICAgICAgICBNYXJrIHRoZSBjb25zdHJ1Y3RvciBvZiBXZWJIaXN0b3J5V3Jp
dGVyIGV4cGxpY2l0LiBVc2UgYSByZWZlcmVuY2UKKyAgICAgICAgZm9yIHRoZSBhcmd1bWVudCB0
byBXZWJIaXN0b3J5V3JpdGVyLiBTdG9yZSBkYXRlIGtleXMgYXMKKyAgICAgICAgV2ViSGlzdG9y
eURhdGVLZXkgaW5zdGVhZCBvZiBuYXJyb3dpbmcgdG8gaW50LgorICAgICAgICAoLVtXZWJIaXN0
b3J5UHJpdmF0ZSBpbml0XSk6IFN0b3AgdXNpbmcgdW5pcXVlX3B0ciBmb3IgX2VudHJpZXNCeURh
dGUuCisgICAgICAgICgtW1dlYkhpc3RvcnlQcml2YXRlIGZpbmRLZXk6Zm9yRGF5Ol0pOiBEaXR0
by4KKyAgICAgICAgKC1bV2ViSGlzdG9yeVByaXZhdGUgaW5zZXJ0SXRlbTpmb3JEYXRlS2V5Ol0p
OiBEaXR0by4KKyAgICAgICAgKC1bV2ViSGlzdG9yeVByaXZhdGUgcmVtb3ZlSXRlbUZyb21EYXRl
Q2FjaGVzOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViSGlzdG9yeVByaXZhdGUgYWRkSXRlbVRv
RGF0ZUNhY2hlczpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhpc3RvcnlQcml2YXRlIHJlYnVp
bGRIaXN0b3J5QnlEYXlJZk5lZWRlZDpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhpc3RvcnlQ
cml2YXRlIHJlbW92ZUFsbEl0ZW1zXSk6IERpdHRvLgorICAgICAgICAoLVtXZWJIaXN0b3J5UHJp
dmF0ZSBvcmRlcmVkTGFzdFZpc2l0ZWREYXlzXSk6IERpdHRvLgorICAgICAgICAoLVtXZWJIaXN0
b3J5UHJpdmF0ZSBvcmRlcmVkSXRlbXNMYXN0VmlzaXRlZE9uRGF5Ol0pOiBEaXR0by4KKyAgICAg
ICAgKC1bV2ViSGlzdG9yeVByaXZhdGUgZGF0YV0pOiBEaXR0by4gQWxzbyByZW1vdmVkIGFuIGlu
Y29ycmVjdCBicmlkZ2luZworICAgICAgICBjYXN0IGNvbWJpbmVkIHdpdGggcmV0YWluUHRyL2F1
dG9yZWxlYXNlIGFuZCB1c2VkIGJyaWRnaW5nQXV0b3JlbGVhc2UgaW5zdGVhZC4KKyAgICAgICAg
KFdlYkhpc3RvcnlXcml0ZXI6OldlYkhpc3RvcnlXcml0ZXIpOiBVcGRhdGVkLgorICAgICAgICAo
V2ViSGlzdG9yeVdyaXRlcjo6d3JpdGVIaXN0b3J5SXRlbXMpOiBEaXR0by4KKworICAgICAgICAq
IE1pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW06CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNz
IGphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzXSk6IFVwZGF0ZWQKKyAgICAgICAg
c2luY2UgcHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cyBubyBsb25nZXIgcmV0dXJucyBhIHVuaXF1
ZV9wdHIuCisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRPYmplY3RUeXBl
Q291bnRzXSk6IERpdHRvLCBmb3IKKyAgICAgICAgb2JqZWN0VHlwZUNvdW50cy4KKworICAgICAg
ICAqIE1pc2MvV2ViRWxlbWVudERpY3Rpb25hcnkubW06IEFkZGVkIGFuIGluY2x1ZGUgbm93IG5l
ZWRlZCBiZWNhdXNlIG9mCisgICAgICAgIGNoYW5nZXMgdG8gSGl0VGVzdFJlc3VsdC5oLgorCisg
ICAgICAgICogUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcuaDogU3RvcCB1c2luZyB1bmlx
dWVfcHRyIGZvciB0aW1lcnMuCisgICAgICAgICogUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZp
ZXcubW06CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBzdG9wVGltZXJzXSk6IERp
dHRvLgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgc3RhcnRUaW1lcnNdKTogRGl0
dG8uCisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBzY2hlZHVsZVRpbWVyV2l0aElu
dGVydmFsOnJlcGVhdDp0aW1lckZ1bmM6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJOZXRzY2Fw
ZVBsdWdpblZpZXcgdW5zY2hlZHVsZVRpbWVyOl0pOiBEaXR0by4KKworICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaDogVXBkYXRlIHNjaGVkdWxlZFJ1
bkxvb3BQYWlycworICAgICAgICB0byByZXR1cm4gYSBjb25zdCBwb2ludGVyLiBBbHNvIG1hcmtl
ZCBldmVyeXRoaW5nIGZpbmFsLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTmV0
d29ya2luZ0NvbnRleHQubW06CisgICAgICAgIChXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Ojpz
Y2hlZHVsZWRSdW5Mb29wUGFpcnMgY29uc3QpOiBEaXR0by4KKworICAgICAgICAqIFdlYlZpZXcv
V2ViSFRNTFZpZXcubW06CisgICAgICAgIChjcmVhdGVTZWxlY3RvckV4Y2VwdGlvbk1hcCk6IERl
bGV0ZWQuCisgICAgICAgIChjb21tYW5kTmFtZUZvclNlbGVjdG9yKTogVXNlIFNvcnRlZEFycmF5
TWFwIGZvciB0aGUgbGlzdCBvZiBzZWxlY3RvcnMKKyAgICAgICAgd2l0aGUgc3BlY2lhbCBuYW1l
cywgcmF0aGVyIHRoYW4gdXNpbmcgYSBIYXNoTWFwIG9uIHRoZSBoZWFwLgorCiAyMDIxLTA1LTIz
ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBDb252ZXJ0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSBmcm9tIGFuIGVudW0gdG8gY2xhc3Mgd3JhcHBpbmcgYSBwbGF0Zm9y
bSBjb2xvciBzcGFjZSAoQ0dDb2xvclNwYWNlUmVmIGZvciBDRyBwb3J0cywgZXRjLikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvd2luL0NoYW5nZUxvZwppbmRleCA3MGEyMTViMzU1YzU2ZTA3OGU3ZjVhZGEwMmNkYjdi
ZjE4YzliNDg3Li4xZWU1MzA4OWM2YzA4OTNhMDQ3NmEzODFiYWFmMzIzYTJiMmFlMzMxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjEtMDUtMjMgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFB1dHRpbmcgSGFzaE1hcCBp
biBhIGhlYXAgYmxvY2sgaHVydHMgbWVtb3J5IHVzZSwgc3BlZWQsIGNvZGUgc2l6ZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MTYyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3RhdGlz
dGljcy5jcHA6CisgICAgICAgIChXZWJDb3JlU3RhdGlzdGljczo6amF2YVNjcmlwdFByb3RlY3Rl
ZE9iamVjdFR5cGVDb3VudHMpOiBTdG9wIHVzaW5nCisgICAgICAgIHVuaXF1ZV9wdHIgZm9yIHBy
b3RlY3RlZE9iamVjdFR5cGVDb3VudHMuCisgICAgICAgIChXZWJDb3JlU3RhdGlzdGljczo6amF2
YVNjcmlwdE9iamVjdFR5cGVDb3VudHMpOiBEaXR0by4KKworICAgICAgICAqIFdlYlZpZXcuY3Bw
OgorICAgICAgICAoV2ViVmlldzo6cmVnaXN0ZXJFbWJlZGRlZFZpZXdNSU1FVHlwZSk6IFN0b3Ag
dXNpbmcgdW5pcXVlX3B0ciBmb3IKKyAgICAgICAgbV9lbWJlZGRlZFZpZXdNSU1FVHlwZXMuCisg
ICAgICAgIChXZWJWaWV3OjpzaG91bGRVc2VFbWJlZGRlZFZpZXcgY29uc3QpOiBEaXR0by4KKyAg
ICAgICAgKiBXZWJWaWV3Lmg6IERpdHRvLgorCiAyMDIxLTA1LTIyICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgUmVwbGFjZSBMb2NrSG9sZGVyIHdpdGggTG9ja2Vy
IGluIGxvY2FsIHZhcmlhYmxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NsYXNzUmVmLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5j
cHAKaW5kZXggMzc0MjUxYzJmMDg5ZDY0ZjA4ODdjOTZkNDlmMTg3YjFkNzBjMThlYi4uNTIxZDhj
NTg1MzBjMmM0NjM3NTQwZjcxNzc5N2E2N2MyY2VjODA3NiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ2xhc3NSZWYuY3BwCkBAIC01NCwyMSArNTQsMTkgQEAgT3BhcXVlSlNDbGFzczo6
T3BhcXVlSlNDbGFzcyhjb25zdCBKU0NsYXNzRGVmaW5pdGlvbiogZGVmaW5pdGlvbiwgT3BhcXVl
SlNDbGFzcyoKICAgICBKU0M6OmluaXRpYWxpemUoKTsKIAogICAgIGlmIChjb25zdCBKU1N0YXRp
Y1ZhbHVlKiBzdGF0aWNWYWx1ZSA9IGRlZmluaXRpb24tPnN0YXRpY1ZhbHVlcykgewotICAgICAg
ICBtX3N0YXRpY1ZhbHVlcyA9IG1ha2VVbmlxdWU8T3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1Rh
YmxlPigpOwogICAgICAgICB3aGlsZSAoc3RhdGljVmFsdWUtPm5hbWUpIHsKICAgICAgICAgICAg
IFN0cmluZyB2YWx1ZU5hbWUgPSBTdHJpbmc6OmZyb21VVEY4KHN0YXRpY1ZhbHVlLT5uYW1lKTsK
ICAgICAgICAgICAgIGlmICghdmFsdWVOYW1lLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIG1f
c3RhdGljVmFsdWVzLT5zZXQodmFsdWVOYW1lLmltcGwoKSwgbWFrZVVuaXF1ZTxTdGF0aWNWYWx1
ZUVudHJ5PihzdGF0aWNWYWx1ZS0+Z2V0UHJvcGVydHksIHN0YXRpY1ZhbHVlLT5zZXRQcm9wZXJ0
eSwgc3RhdGljVmFsdWUtPmF0dHJpYnV0ZXMsIHZhbHVlTmFtZSkpOworICAgICAgICAgICAgICAg
IG1fc3RhdGljVmFsdWVzLmFkZCh2YWx1ZU5hbWUuaW1wbCgpLCBtYWtlVW5pcXVlPFN0YXRpY1Zh
bHVlRW50cnk+KHN0YXRpY1ZhbHVlLT5nZXRQcm9wZXJ0eSwgc3RhdGljVmFsdWUtPnNldFByb3Bl
cnR5LCBzdGF0aWNWYWx1ZS0+YXR0cmlidXRlcywgdmFsdWVOYW1lKSk7CiAgICAgICAgICAgICAr
K3N0YXRpY1ZhbHVlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKGNvbnN0IEpTU3RhdGlj
RnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9uID0gZGVmaW5pdGlvbi0+c3RhdGljRnVuY3Rpb25zKSB7
Ci0gICAgICAgIG1fc3RhdGljRnVuY3Rpb25zID0gbWFrZVVuaXF1ZTxPcGFxdWVKU0NsYXNzU3Rh
dGljRnVuY3Rpb25zVGFibGU+KCk7CiAgICAgICAgIHdoaWxlIChzdGF0aWNGdW5jdGlvbi0+bmFt
ZSkgewogICAgICAgICAgICAgU3RyaW5nIGZ1bmN0aW9uTmFtZSA9IFN0cmluZzo6ZnJvbVVURjgo
c3RhdGljRnVuY3Rpb24tPm5hbWUpOwogICAgICAgICAgICAgaWYgKCFmdW5jdGlvbk5hbWUuaXNO
dWxsKCkpCi0gICAgICAgICAgICAgICAgbV9zdGF0aWNGdW5jdGlvbnMtPnNldChmdW5jdGlvbk5h
bWUuaW1wbCgpLCBtYWtlVW5pcXVlPFN0YXRpY0Z1bmN0aW9uRW50cnk+KHN0YXRpY0Z1bmN0aW9u
LT5jYWxsQXNGdW5jdGlvbiwgc3RhdGljRnVuY3Rpb24tPmF0dHJpYnV0ZXMpKTsKKyAgICAgICAg
ICAgICAgICBtX3N0YXRpY0Z1bmN0aW9ucy5hZGQoZnVuY3Rpb25OYW1lLmltcGwoKSwgbWFrZVVu
aXF1ZTxTdGF0aWNGdW5jdGlvbkVudHJ5PihzdGF0aWNGdW5jdGlvbi0+Y2FsbEFzRnVuY3Rpb24s
IHN0YXRpY0Z1bmN0aW9uLT5hdHRyaWJ1dGVzKSk7CiAgICAgICAgICAgICArK3N0YXRpY0Z1bmN0
aW9uOwogICAgICAgICB9CiAgICAgfQpAQCAtODIsMTggKzgwLDExIEBAIE9wYXF1ZUpTQ2xhc3M6
On5PcGFxdWVKU0NsYXNzKCkKICAgICAvLyBUaGUgZW1wdHkgc3RyaW5nIGlzIHNoYXJlZCBhY3Jv
c3MgdGhyZWFkcyAmIGlzIGFuIGlkZW50aWZpZXIsIGluIGFsbCBvdGhlciBjYXNlcyB3ZSBzaG91
bGQgaGF2ZSBkb25lIGEgZGVlcCBjb3B5IGluIGNsYXNzTmFtZSgpLCBiZWxvdy4gCiAgICAgQVNT
RVJUKCFtX2NsYXNzTmFtZS5sZW5ndGgoKSB8fCAhbV9jbGFzc05hbWUuaW1wbCgpLT5pc0F0b20o
KSk7CiAKLSNpZm5kZWYgTkRFQlVHCi0gICAgaWYgKG1fc3RhdGljVmFsdWVzKSB7Ci0gICAgICAg
IE9wYXF1ZUpTQ2xhc3NTdGF0aWNWYWx1ZXNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9z
dGF0aWNWYWx1ZXMtPmVuZCgpOwotICAgICAgICBmb3IgKE9wYXF1ZUpTQ2xhc3NTdGF0aWNWYWx1
ZXNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0YXRpY1ZhbHVlcy0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICAgICAgQVNTRVJUKCFpdC0+a2V5LT5pc0F0b20oKSk7Ci0g
ICAgfQotCi0gICAgaWYgKG1fc3RhdGljRnVuY3Rpb25zKSB7Ci0gICAgICAgIE9wYXF1ZUpTQ2xh
c3NTdGF0aWNGdW5jdGlvbnNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zdGF0aWNGdW5j
dGlvbnMtPmVuZCgpOwotICAgICAgICBmb3IgKE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNU
YWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0YXRpY0Z1bmN0aW9ucy0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICAgICAgQVNTRVJUKCFpdC0+a2V5LT5pc0F0b20oKSk7Ci0g
ICAgfQorI2lmIEFTU0VSVF9FTkFCTEVECisgICAgZm9yIChhdXRvJiBrZXkgOiBtX3N0YXRpY1Zh
bHVlcy5rZXlzKCkpCisgICAgICAgIEFTU0VSVCgha2V5LT5pc0F0b20oKSk7CisgICAgZm9yIChh
dXRvJiBrZXkgOiBtX3N0YXRpY0Z1bmN0aW9ucy5rZXlzKCkpCisgICAgICAgIEFTU0VSVCgha2V5
LT5pc0F0b20oKSk7CiAjZW5kaWYKICAgICAKICAgICBpZiAocHJvdG90eXBlQ2xhc3MpCkBAIC0x
MjIsMjMgKzExMywxNCBAQCBSZWY8T3BhcXVlSlNDbGFzcz4gT3BhcXVlSlNDbGFzczo6Y3JlYXRl
KGNvbnN0IEpTQ2xhc3NEZWZpbml0aW9uKiBjbGllbnREZWZpbml0aQogT3BhcXVlSlNDbGFzc0Nv
bnRleHREYXRhOjpPcGFxdWVKU0NsYXNzQ29udGV4dERhdGEoSlNDOjpWTSYsIE9wYXF1ZUpTQ2xh
c3MqIGpzQ2xhc3MpCiAgICAgOiBtX2NsYXNzKGpzQ2xhc3MpCiB7Ci0gICAgaWYgKGpzQ2xhc3Mt
Pm1fc3RhdGljVmFsdWVzKSB7Ci0gICAgICAgIHN0YXRpY1ZhbHVlcyA9IG1ha2VVbmlxdWU8T3Bh
cXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlPigpOwotICAgICAgICBPcGFxdWVKU0NsYXNzU3Rh
dGljVmFsdWVzVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGpzQ2xhc3MtPm1fc3RhdGljVmFs
dWVzLT5lbmQoKTsKLSAgICAgICAgZm9yIChPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVzVGFibGU6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0ganNDbGFzcy0+bV9zdGF0aWNWYWx1ZXMtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgQVNTRVJUKCFpdC0+a2V5LT5pc0F0b20oKSk7
Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWVOYW1lID0gaXQtPmtleS0+aXNvbGF0ZWRDb3B5KCk7
Ci0gICAgICAgICAgICBzdGF0aWNWYWx1ZXMtPmFkZCh2YWx1ZU5hbWUuaW1wbCgpLCBtYWtlVW5p
cXVlPFN0YXRpY1ZhbHVlRW50cnk+KGl0LT52YWx1ZS0+Z2V0UHJvcGVydHksIGl0LT52YWx1ZS0+
c2V0UHJvcGVydHksIGl0LT52YWx1ZS0+YXR0cmlidXRlcywgdmFsdWVOYW1lKSk7Ci0gICAgICAg
IH0KKyAgICBmb3IgKGF1dG8mIHN0YXRpY1ZhbHVlIDoganNDbGFzcy0+bV9zdGF0aWNWYWx1ZXMp
IHsKKyAgICAgICAgQVNTRVJUKCFzdGF0aWNWYWx1ZS5rZXktPmlzQXRvbSgpKTsKKyAgICAgICAg
U3RyaW5nIHZhbHVlTmFtZSA9IHN0YXRpY1ZhbHVlLmtleS0+aXNvbGF0ZWRDb3B5KCk7CisgICAg
ICAgIHN0YXRpY1ZhbHVlcy5zZXQodmFsdWVOYW1lLmltcGwoKSwgbWFrZVVuaXF1ZTxTdGF0aWNW
YWx1ZUVudHJ5PihzdGF0aWNWYWx1ZS52YWx1ZS0+Z2V0UHJvcGVydHksIHN0YXRpY1ZhbHVlLnZh
bHVlLT5zZXRQcm9wZXJ0eSwgc3RhdGljVmFsdWUudmFsdWUtPmF0dHJpYnV0ZXMsIHZhbHVlTmFt
ZSkpOwogICAgIH0KLQotICAgIGlmIChqc0NsYXNzLT5tX3N0YXRpY0Z1bmN0aW9ucykgewotICAg
ICAgICBzdGF0aWNGdW5jdGlvbnMgPSBtYWtlVW5pcXVlPE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5j
dGlvbnNUYWJsZT4oKTsKLSAgICAgICAgT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxl
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBqc0NsYXNzLT5tX3N0YXRpY0Z1bmN0aW9ucy0+ZW5kKCk7
Ci0gICAgICAgIGZvciAoT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxlOjpjb25zdF9p
dGVyYXRvciBpdCA9IGpzQ2xhc3MtPm1fc3RhdGljRnVuY3Rpb25zLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEFTU0VSVCghaXQtPmtleS0+aXNBdG9tKCkpOwotICAg
ICAgICAgICAgc3RhdGljRnVuY3Rpb25zLT5hZGQoaXQtPmtleS0+aXNvbGF0ZWRDb3B5KCksIG1h
a2VVbmlxdWU8U3RhdGljRnVuY3Rpb25FbnRyeT4oaXQtPnZhbHVlLT5jYWxsQXNGdW5jdGlvbiwg
aXQtPnZhbHVlLT5hdHRyaWJ1dGVzKSk7Ci0gICAgICAgIH0KKyAgICBmb3IgKGF1dG8mIHN0YXRp
Y0Z1bmN0aW9uIDoganNDbGFzcy0+bV9zdGF0aWNGdW5jdGlvbnMpIHsKKyAgICAgICAgQVNTRVJU
KCFzdGF0aWNGdW5jdGlvbi5rZXktPmlzQXRvbSgpKTsKKyAgICAgICAgc3RhdGljRnVuY3Rpb25z
LnNldChzdGF0aWNGdW5jdGlvbi5rZXktPmlzb2xhdGVkQ29weSgpLCBtYWtlVW5pcXVlPFN0YXRp
Y0Z1bmN0aW9uRW50cnk+KHN0YXRpY0Z1bmN0aW9uLnZhbHVlLT5jYWxsQXNGdW5jdGlvbiwgc3Rh
dGljRnVuY3Rpb24udmFsdWUtPmF0dHJpYnV0ZXMpKTsKICAgICB9CiB9CiAKQEAgLTE1OCwxMiAr
MTQwLDEyIEBAIFN0cmluZyBPcGFxdWVKU0NsYXNzOjpjbGFzc05hbWUoKQogCiBPcGFxdWVKU0Ns
YXNzU3RhdGljVmFsdWVzVGFibGUqIE9wYXF1ZUpTQ2xhc3M6OnN0YXRpY1ZhbHVlcyhKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgcmV0dXJuIGNvbnRleHREYXRhKGds
b2JhbE9iamVjdCkuc3RhdGljVmFsdWVzLmdldCgpOworICAgIHJldHVybiAmY29udGV4dERhdGEo
Z2xvYmFsT2JqZWN0KS5zdGF0aWNWYWx1ZXM7CiB9CiAKIE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5j
dGlvbnNUYWJsZSogT3BhcXVlSlNDbGFzczo6c3RhdGljRnVuY3Rpb25zKEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICByZXR1cm4gY29udGV4dERhdGEoZ2xvYmFsT2Jq
ZWN0KS5zdGF0aWNGdW5jdGlvbnMuZ2V0KCk7CisgICAgcmV0dXJuICZjb250ZXh0RGF0YShnbG9i
YWxPYmplY3QpLnN0YXRpY0Z1bmN0aW9uczsKIH0KIAogSlNPYmplY3QqIE9wYXF1ZUpTQ2xhc3M6
OnByb3RvdHlwZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ2xhc3NSZWYuaAppbmRleCBhYTliNWRmNjFjMGIzYzg5MWU4NzNlNzQ1NTcyMGI3
ODlkY2MzMDA4Li5mZWQ0YmExOTg1NDY1YzdhYjQxOTYzNWQ2NGE3MWQ4ZDU5YmY5ZTZkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuaApAQCAtODIsOCArODIsOCBAQCBwdWJs
aWM6CiAgICAgLy8gNC4gV2hlbiBpdCBpcyB1c2VkLCB0aGUgb2xkIGNvbnRleHQgZGF0YSBpcyBm
b3VuZCBpbiBWTSBhbmQgdXNlZC4KICAgICBSZWZQdHI8T3BhcXVlSlNDbGFzcz4gbV9jbGFzczsK
IAotICAgIHN0ZDo6dW5pcXVlX3B0cjxPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVzVGFibGU+IHN0
YXRpY1ZhbHVlczsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0
aW9uc1RhYmxlPiBzdGF0aWNGdW5jdGlvbnM7CisgICAgT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVl
c1RhYmxlIHN0YXRpY1ZhbHVlczsKKyAgICBPcGFxdWVKU0NsYXNzU3RhdGljRnVuY3Rpb25zVGFi
bGUgc3RhdGljRnVuY3Rpb25zOwogICAgIEpTQzo6V2VhazxKU0M6OkpTT2JqZWN0PiBjYWNoZWRQ
cm90b3R5cGU7CiB9OwogCkBAIC0xMjMsOCArMTIzLDggQEAgcHJpdmF0ZToKIAogICAgIC8vIFN0
cmluZ3MgaW4gdGhlc2UgZGF0YSBtZW1iZXJzIHNob3VsZCBub3QgYmUgcHV0IGludG8gYW55IEF0
b21TdHJpbmdUYWJsZS4KICAgICBTdHJpbmcgbV9jbGFzc05hbWU7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPE9wYXF1ZUpTQ2xhc3NTdGF0aWNWYWx1ZXNUYWJsZT4gbV9zdGF0aWNWYWx1ZXM7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZT4gbV9zdGF0
aWNGdW5jdGlvbnM7CisgICAgT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlIG1fc3RhdGlj
VmFsdWVzOworICAgIE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZSBtX3N0YXRpY0Z1
bmN0aW9uczsKIH07CiAKICNlbmRpZiAvLyBKU0NsYXNzUmVmX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwLmNwcAppbmRleCAxNTMzNzFlZjc5MjI5MmNmY2U1
MzMzOTgzZTU5N2FmZGM1YzhmZGU5Li5jMmRlYWU0M2NiMjQ0YmM3NTA3YTg3Y2I3N2VkZTFjNTkx
N2M4NTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0
SGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAu
Y3BwCkBAIC0xNTQsMTAgKzE1NCw3IEBAIGNvbnN0IEFic3RyYWN0SGVhcCYgSW5kZXhlZEFic3Ry
YWN0SGVhcDo6YXRTbG93KHB0cmRpZmZfdCBpbmRleCkKIHsKICAgICBBU1NFUlQoc3RhdGljX2Nh
c3Q8c2l6ZV90PihpbmRleCkgPj0gbV9zbWFsbEluZGljZXMuc2l6ZSgpKTsKICAgICAKLSAgICBp
ZiAoVU5MSUtFTFkoIW1fbGFyZ2VJbmRpY2VzKSkKLSAgICAgICAgbV9sYXJnZUluZGljZXMgPSBt
YWtlVW5pcXVlPE1hcFR5cGU+KCk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QWJzdHJhY3RIZWFw
PiYgZmllbGQgPSBtX2xhcmdlSW5kaWNlcy0+YWRkKGluZGV4LCBudWxscHRyKS5pdGVyYXRvci0+
dmFsdWU7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFic3RyYWN0SGVhcD4mIGZpZWxkID0gbV9sYXJn
ZUluZGljZXMuYWRkKGluZGV4LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFm
aWVsZCkgewogICAgICAgICBmaWVsZCA9IG1ha2VVbmlxdWU8QWJzdHJhY3RIZWFwPigpOwogICAg
ICAgICBpbml0aWFsaXplKCpmaWVsZCwgaW5kZXgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQWJzdHJhY3RIZWFwLmgKaW5kZXggNjU4ZTJjZmM1ZWNlODIzNDk3NmI2MzRkZThlMzdm
MjBkNmYwZmM4OS4uODc3ZWRmMjZhOGJkZDU3YTJkMDk0OTM3YmIxNzEzZmVhMmExYmQ0MiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcC5oCkBAIC0xNjAsNyAr
MTYwLDcgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIHR5cGVkZWYgSGFzaE1hcDxwdHJkaWZmX3Qs
IHN0ZDo6dW5pcXVlX3B0cjxBYnN0cmFjdEhlYXA+LCBXVEY6OkludEhhc2g8cHRyZGlmZl90Piwg
V2l0aG91dFplcm9Pck9uZUhhc2hUcmFpdHM+IE1hcFR5cGU7CiAgICAgCi0gICAgc3RkOjp1bmlx
dWVfcHRyPE1hcFR5cGU+IG1fbGFyZ2VJbmRpY2VzOworICAgIE1hcFR5cGUgbV9sYXJnZUluZGlj
ZXM7CiAgICAgVmVjdG9yPENTdHJpbmcsIDE2PiBtX2xhcmdlSW5kZXhOYW1lczsKIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKaW5kZXggODYxYTQwMmU1MGQwYmNjMGZlYWU2MDMw
NDdjZjM1YzJlY2RjNGRlNy4uY2UxNmE2Y2U5Y2JkOWVjMmIxMjI4ZDAxY2I0NDQ1NzNmNGViNjBi
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKQEAgLTg4MCwyNSArODgwLDI1IEBA
IHNpemVfdCBIZWFwOjpwcm90ZWN0ZWRPYmplY3RDb3VudCgpCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotc3RkOjp1bmlxdWVfcHRyPFR5cGVDb3VudFNldD4gSGVhcDo6cHJvdGVjdGVkT2JqZWN0
VHlwZUNvdW50cygpCitUeXBlQ291bnRTZXQgSGVhcDo6cHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50
cygpCiB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVDb3VudFNldD4gcmVzdWx0ID0gbWFrZVVu
aXF1ZTxUeXBlQ291bnRTZXQ+KCk7CisgICAgVHlwZUNvdW50U2V0IHJlc3VsdDsKICAgICBmb3JF
YWNoUHJvdGVjdGVkQ2VsbCgKICAgICAgICAgWyZdIChKU0NlbGwqIGNlbGwpIHsKLSAgICAgICAg
ICAgIHJlY29yZFR5cGUodm0oKSwgKnJlc3VsdCwgY2VsbCk7CisgICAgICAgICAgICByZWNvcmRU
eXBlKHZtKCksIHJlc3VsdCwgY2VsbCk7CiAgICAgICAgIH0pOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxUeXBlQ291bnRTZXQ+IEhlYXA6Om9iamVjdFR5cGVDb3Vu
dHMoKQorVHlwZUNvdW50U2V0IEhlYXA6Om9iamVjdFR5cGVDb3VudHMoKQogewotICAgIHN0ZDo6
dW5pcXVlX3B0cjxUeXBlQ291bnRTZXQ+IHJlc3VsdCA9IG1ha2VVbmlxdWU8VHlwZUNvdW50U2V0
PigpOworICAgIFR5cGVDb3VudFNldCByZXN1bHQ7CiAgICAgSGVhcEl0ZXJhdGlvblNjb3BlIGl0
ZXJhdGlvblNjb3BlKCp0aGlzKTsKICAgICBtX29iamVjdFNwYWNlLmZvckVhY2hMaXZlQ2VsbCgK
ICAgICAgICAgaXRlcmF0aW9uU2NvcGUsCiAgICAgICAgIFsmXSAoSGVhcENlbGwqIGNlbGwsIEhl
YXBDZWxsOjpLaW5kIGtpbmQpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CiAgICAgICAgICAgICBpZiAo
aXNKU0NlbGxLaW5kKGtpbmQpKQotICAgICAgICAgICAgICAgIHJlY29yZFR5cGUodm0oKSwgKnJl
c3VsdCwgc3RhdGljX2Nhc3Q8SlNDZWxsKj4oY2VsbCkpOworICAgICAgICAgICAgICAgIHJlY29y
ZFR5cGUodm0oKSwgcmVzdWx0LCBzdGF0aWNfY2FzdDxKU0NlbGwqPihjZWxsKSk7CiAgICAgICAg
ICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKICAgICAgICAgfSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKQEAgLTI4MTEsOSArMjgxMSw5IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNv
bnN0cmFpbnRzKCkKICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJl
ZChwYWlyLmtleSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChtX21hcmtMaXN0U2V0ICYmIG1fbWFya0xpc3RTZXQtPnNpemUoKSkgeworICAgICAgICAgICAg
aWYgKCFtX21hcmtMaXN0U2V0LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIFNldFJvb3RN
YXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uOjpDb25zZXJ2
YXRpdmVTY2FuKTsKLSAgICAgICAgICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xp
c3RzKHZpc2l0b3IsICptX21hcmtMaXN0U2V0KTsKKyAgICAgICAgICAgICAgICBNYXJrZWRBcmd1
bWVudEJ1ZmZlcjo6bWFya0xpc3RzKHZpc2l0b3IsIG1fbWFya0xpc3RTZXQpOwogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKaW5kZXggNjhk
OTA3NGZkZjNkOGVhOGY0ODdiMDY0ODdiODBkN2EyYjFiODAzMS4uNTUzN2RkNTUyMzhlMGQ3OGEw
MzQ0YjU0YTQzMGFiYjdiNjFlZGUyMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaApAQCAt
MjQzLDEwICsyNDMsMTAgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBn
bG9iYWxPYmplY3RDb3VudCgpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBwcm90ZWN0
ZWRPYmplY3RDb3VudCgpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBwcm90ZWN0ZWRH
bG9iYWxPYmplY3RDb3VudCgpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0ZDo6dW5pcXVlX3B0
cjxUeXBlQ291bnRTZXQ+IHByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoKTsKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGQ6OnVuaXF1ZV9wdHI8VHlwZUNvdW50U2V0PiBvYmplY3RUeXBlQ291bnRz
KCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgVHlwZUNvdW50U2V0IHByb3RlY3RlZE9iamVjdFR5
cGVDb3VudHMoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBUeXBlQ291bnRTZXQgb2JqZWN0VHlw
ZUNvdW50cygpOwogCi0gICAgSGFzaFNldDxNYXJrZWRBcmd1bWVudEJ1ZmZlcio+JiBtYXJrTGlz
dFNldCgpOworICAgIEhhc2hTZXQ8TWFya2VkQXJndW1lbnRCdWZmZXIqPiYgbWFya0xpc3RTZXQo
KSB7IHJldHVybiBtX21hcmtMaXN0U2V0OyB9CiAgICAgdm9pZCBhZGRNYXJrZWRKU1ZhbHVlUmVm
QXJyYXkoTWFya2VkSlNWYWx1ZVJlZkFycmF5Kik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoUHJvdGVjdGVkQ2VsbChjb25zdCBGdW5jdG9yJik7CkBA
IC02MzIsNyArNjMyLDcgQEAgcHJpdmF0ZToKICAgICBIYXNoU2V0PGNvbnN0IEpTQ2VsbCo+IG1f
Y29weWluZ1JlbWVtYmVyZWRTZXQ7CiAKICAgICBQcm90ZWN0Q291bnRTZXQgbV9wcm90ZWN0ZWRW
YWx1ZXM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEhhc2hTZXQ8TWFya2VkQXJndW1lbnRCdWZmZXIq
Pj4gbV9tYXJrTGlzdFNldDsKKyAgICBIYXNoU2V0PE1hcmtlZEFyZ3VtZW50QnVmZmVyKj4gbV9t
YXJrTGlzdFNldDsKICAgICBTZW50aW5lbExpbmtlZExpc3Q8TWFya2VkSlNWYWx1ZVJlZkFycmF5
LCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxNYXJrZWRKU1ZhbHVlUmVmQXJyYXk+PiBtX21hcmtlZEpT
VmFsdWVSZWZBcnJheXM7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFjaGluZVRocmVhZHM+IG1f
bWFjaGluZVRocmVhZHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaApp
bmRleCA0ZDNhOThiMjZhODcwODA3MDgyNzg4YTlhOWQyMTlkYjAyNTZlODNiLi4xMmYxYzU2OWUx
MzJhMDBlNGFmOGM1Yjc1MjA0ZWQxNjBjMTc5YmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXBJbmxpbmVzLmgKQEAgLTIxNiwxMyArMjE2LDYgQEAgaW5saW5lIHZvaWQgSGVhcDo6
ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQogICAgIH0KIH0KIAotaW5saW5l
IEhhc2hTZXQ8TWFya2VkQXJndW1lbnRCdWZmZXIqPiYgSGVhcDo6bWFya0xpc3RTZXQoKQotewot
ICAgIGlmICghbV9tYXJrTGlzdFNldCkKLSAgICAgICAgbV9tYXJrTGlzdFNldCA9IG1ha2VVbmlx
dWU8SGFzaFNldDxNYXJrZWRBcmd1bWVudEJ1ZmZlcio+PigpOwotICAgIHJldHVybiAqbV9tYXJr
TGlzdFNldDsKLX0KLQogaW5saW5lIHZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0
ZWQoc2l6ZV90IHNpemUpCiB7CiAgICAgaWYgKHNpemUgPiBtaW5FeHRyYU1lbW9yeSkgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVXRpbC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcFV0aWwuaAppbmRleCBkNmFhYzNlNDBiOTBmYTY3ZmMwNjUz
MmNlZWIwZmJkNmI2M2EwOGZiLi5lMDNmODgzY2FkZjkzMTQ4MGMxMWQyNDljMzBmOWQwY2VjYmM5
NGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVXRpbC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBVdGlsLmgKQEAgLTE0MCw4ICsxNDAs
NiBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChwb2ludGVyLT5pc1ByZWNpc2VBbGxvY2F0aW9uKCkp
IHsKICAgICAgICAgICAgIGF1dG8qIHNldCA9IGhlYXAub2JqZWN0U3BhY2UoKS5wcmVjaXNlQWxs
b2NhdGlvblNldCgpOwogICAgICAgICAgICAgQVNTRVJUKHNldCk7Ci0gICAgICAgICAgICBpZiAo
c2V0LT5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgcmV0dXJuIHNldC0+Y29udGFpbnMocG9pbnRlcik7CiAgICAgICAgIH0KICAgICAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAppbmRleCBjODIzZDllOTRkYjZm
MjUwMjdlMmYyYjZiY2RkMzgxMzUxM2Y3ZjAzLi43ZWM2MWMwNzc4YzY0M2EwNTI2ZDQ5NTdiN2I5
N2I4OGU3NDI1MjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRTcGFjZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2Uu
Y3BwCkBAIC0yNjgsNyArMjY4LDcgQEAgdm9pZCBNYXJrZWRTcGFjZTo6cHJlcGFyZUZvckFsbG9j
YXRpb24oKQogCiB2b2lkIE1hcmtlZFNwYWNlOjplbmFibGVQcmVjaXNlQWxsb2NhdGlvblRyYWNr
aW5nKCkKIHsKLSAgICBtX3ByZWNpc2VBbGxvY2F0aW9uU2V0ID0gbWFrZVVuaXF1ZTxIYXNoU2V0
PEhlYXBDZWxsKj4+KCk7CisgICAgbV9wcmVjaXNlQWxsb2NhdGlvblNldCA9IEhhc2hTZXQ8SGVh
cENlbGwqPiB7IH07CiAgICAgZm9yIChhdXRvKiBhbGxvY2F0aW9uIDogbV9wcmVjaXNlQWxsb2Nh
dGlvbnMpCiAgICAgICAgIG1fcHJlY2lzZUFsbG9jYXRpb25TZXQtPmFkZChhbGxvY2F0aW9uLT5j
ZWxsKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
U3BhY2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKaW5kZXgg
MjY4Yjk3MGE1OThiNDI1YjlmY2UzNjdkYjJlYmFlYTcxZWJjYzMxYi4uMTEyNDA1YzFmMGQ4ZGMw
ZjI2NTEwM2IyMGI3NmUxNGRjMGU5MzYxOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkU3BhY2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRTcGFjZS5oCkBAIC0xNTYsNyArMTU2LDcgQEAgcHVibGljOgogICAgIGNvbnN0IFZlY3Rv
cjxQcmVjaXNlQWxsb2NhdGlvbio+JiBwcmVjaXNlQWxsb2NhdGlvbnMoKSBjb25zdCB7IHJldHVy
biBtX3ByZWNpc2VBbGxvY2F0aW9uczsgfQogICAgIHVuc2lnbmVkIHByZWNpc2VBbGxvY2F0aW9u
c051cnNlcnlPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3ByZWNpc2VBbGxvY2F0aW9uc051cnNl
cnlPZmZzZXQ7IH0KICAgICB1bnNpZ25lZCBwcmVjaXNlQWxsb2NhdGlvbnNPZmZzZXRGb3JUaGlz
Q29sbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcHJlY2lzZUFsbG9jYXRpb25zT2Zmc2V0Rm9y
VGhpc0NvbGxlY3Rpb247IH0KLSAgICBIYXNoU2V0PEhlYXBDZWxsKj4qIHByZWNpc2VBbGxvY2F0
aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9wcmVjaXNlQWxsb2NhdGlvblNldC5nZXQoKTsgfQor
ICAgIEhhc2hTZXQ8SGVhcENlbGwqPiogcHJlY2lzZUFsbG9jYXRpb25TZXQoKSB7IHJldHVybiBt
X3ByZWNpc2VBbGxvY2F0aW9uU2V0ID8gJiptX3ByZWNpc2VBbGxvY2F0aW9uU2V0IDogbnVsbHB0
cjsgfQogCiAgICAgdm9pZCBlbmFibGVQcmVjaXNlQWxsb2NhdGlvblRyYWNraW5nKCk7CiAgICAg
CkBAIC0yMDAsNyArMjAwLDcgQEAgcHJpdmF0ZToKIAogICAgIFZlY3RvcjxTdWJzcGFjZSo+IG1f
c3Vic3BhY2VzOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEhhc2hTZXQ8SGVhcENlbGwqPj4gbV9w
cmVjaXNlQWxsb2NhdGlvblNldDsKKyAgICBPcHRpb25hbDxIYXNoU2V0PEhlYXBDZWxsKj4+IG1f
cHJlY2lzZUFsbG9jYXRpb25TZXQ7CiAgICAgVmVjdG9yPFByZWNpc2VBbGxvY2F0aW9uKj4gbV9w
cmVjaXNlQWxsb2NhdGlvbnM7CiAgICAgdW5zaWduZWQgbV9wcmVjaXNlQWxsb2NhdGlvbnNOdXJz
ZXJ5T2Zmc2V0IHsgMCB9OwogICAgIHVuc2lnbmVkIG1fcHJlY2lzZUFsbG9jYXRpb25zT2Zmc2V0
Rm9yVGhpc0NvbGxlY3Rpb24geyAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FdmFsRXhlY3V0YWJsZS5jcHAKaW5kZXggMWIyZjRmNTJhYjdiZmNlMzQwYjNjMzk1Mjll
MTgwNTcyY2QxNjQ0My4uOTU3NjFjMTMyNzhhMDRlMGEyZGY5YTM0M2FiMjhkOTY5MjE0ZGNiNyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmNw
cApAQCAtNDUsMTEgKzQ1LDYgQEAgdm9pZCBFdmFsRXhlY3V0YWJsZTo6ZGVzdHJveShKU0NlbGwq
IGNlbGwpCiAgICAgc3RhdGljX2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihjZWxsKS0+RXZhbEV4ZWN1
dGFibGU6On5FdmFsRXhlY3V0YWJsZSgpOwogfQogCi1hdXRvIEV2YWxFeGVjdXRhYmxlOjplbnN1
cmVUZW1wbGF0ZU9iamVjdE1hcChWTSYpIC0+IFRlbXBsYXRlT2JqZWN0TWFwJgotewotICAgIHJl
dHVybiBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcEltcGwobV90ZW1wbGF0ZU9iamVjdE1hcCk7Ci19
Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CiB2b2lkIEV2YWxFeGVjdXRhYmxlOjp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CkBAIC01OCwx
MCArNTMsMTAgQEAgdm9pZCBFdmFsRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV91bmxpbmtl
ZEV2YWxDb2RlQmxvY2spOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZXZhbENv
ZGVCbG9jayk7Ci0gICAgaWYgKFRlbXBsYXRlT2JqZWN0TWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5t
X3RlbXBsYXRlT2JqZWN0TWFwLmdldCgpKSB7CisgICAgaWYgKCF0aGlzT2JqZWN0LT5tX3RlbXBs
YXRlT2JqZWN0TWFwLmlzRW1wdHkoKSkgewogICAgICAgICBMb2NrZXIgbG9ja2VyIHsgdGhpc09i
amVjdC0+Y2VsbExvY2soKSB9OwotICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogKm1hcCkKLSAg
ICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKGVudHJ5LnZhbHVlKTsKKyAgICAgICAgZm9yIChhdXRv
JiB2YWx1ZSA6IHRoaXNPYmplY3QtPm1fdGVtcGxhdGVPYmplY3RNYXAudmFsdWVzKCkpCisgICAg
ICAgICAgICB2aXNpdG9yLmFwcGVuZCh2YWx1ZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaAppbmRleCAwNjk1ODZmMjE0ZTQz
MzYzZDI0NzJiNDMzMzA1YTRhMWQ4YjBkNWU1Li4zZjNhYWUwYzU2YWU2NGNkODMzODczZGY0OTg4
MDAxYTlmYzE0MTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
dmFsRXhlY3V0YWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxF
eGVjdXRhYmxlLmgKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgogICAgIGJvb2wgYWxsb3dEaXJl
Y3RFdmFsQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkRXZhbENvZGVCbG9jay0+YWxs
b3dEaXJlY3RFdmFsQ2FjaGUoKTsgfQogICAgIE5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyIG5l
ZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8TmVl
ZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXI+KG1fbmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIpOyB9
CiAgICAgUHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQgcHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxQcml2YXRlQnJhbmRSZXF1aXJlbWVudD4obV9wcml2
YXRlQnJhbmRSZXF1aXJlbWVudCk7IH0KLSAgICBUZW1wbGF0ZU9iamVjdE1hcCYgZW5zdXJlVGVt
cGxhdGVPYmplY3RNYXAoVk0mKTsKKyAgICBUZW1wbGF0ZU9iamVjdE1hcCYgdGVtcGxhdGVPYmpl
Y3RNYXAoKSB7IHJldHVybiBtX3RlbXBsYXRlT2JqZWN0TWFwOyB9CiAKIHByb3RlY3RlZDoKICAg
ICBmcmllbmQgY2xhc3MgRXhlY3V0YWJsZUJhc2U7CkBAIC04NCw3ICs4NCw3IEBAIHByb3RlY3Rl
ZDoKIAogICAgIFdyaXRlQmFycmllcjxFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlPiBtX2V2YWxD
b2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkRXZhbENvZGVCbG9jaz4gbV91bmxp
bmtlZEV2YWxDb2RlQmxvY2s7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFRlbXBsYXRlT2JqZWN0TWFw
PiBtX3RlbXBsYXRlT2JqZWN0TWFwOworICAgIFRlbXBsYXRlT2JqZWN0TWFwIG1fdGVtcGxhdGVP
YmplY3RNYXA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCmluZGV4IDE4NmZiMjRm
YWJhMGM0NmNlYmUwMjdlYTU2YzA3MmE3NWM5Y2FjYjguLmQyNTY3MWU0YWM5MWU1OTNjNWM3NDU2
N2JhMGFmM2Y2NTcyNWI5NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcApAQCAtNzksMTAgKzc5LDEwIEBAIHZvaWQgRnVu
Y3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV91bmxpbmtlZEV4ZWN1
dGFibGUpOwogICAgIGlmIChSYXJlRGF0YSogcmFyZURhdGEgPSB0aGlzT2JqZWN0LT5tX3JhcmVE
YXRhLmdldCgpKSB7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHJhcmVEYXRhLT5tX2NhY2hlZFBv
bHlQcm90b1N0cnVjdHVyZSk7Ci0gICAgICAgIGlmIChUZW1wbGF0ZU9iamVjdE1hcCogbWFwID0g
cmFyZURhdGEtPm1fdGVtcGxhdGVPYmplY3RNYXAuZ2V0KCkpIHsKKyAgICAgICAgaWYgKCFyYXJl
RGF0YS0+bV90ZW1wbGF0ZU9iamVjdE1hcC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIExvY2tl
ciBsb2NrZXIgeyB0aGlzT2JqZWN0LT5jZWxsTG9jaygpIH07Ci0gICAgICAgICAgICBmb3IgKGF1
dG8mIGVudHJ5IDogKm1hcCkKLSAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZChlbnRyeS52
YWx1ZSk7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHZhbHVlIDogcmFyZURhdGEtPm1fdGVtcGxh
dGVPYmplY3RNYXAudmFsdWVzKCkpCisgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQodmFs
dWUpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTI3LDEwICsxMjcsOSBAQCB2b2lkIEZ1bmN0
aW9uRXhlY3V0YWJsZTo6b3ZlcnJpZGVJbmZvKGNvbnN0IEZ1bmN0aW9uT3ZlcnJpZGVJbmZvJiBv
dmVycmlkZUluZm8pCiAgICAgcmFyZURhdGEubV90eXBlUHJvZmlsaW5nRW5kT2Zmc2V0ID0gb3Zl
cnJpZGVJbmZvLnR5cGVQcm9maWxpbmdFbmRPZmZzZXQ7CiB9CiAKLWF1dG8gRnVuY3Rpb25FeGVj
dXRhYmxlOjplbnN1cmVUZW1wbGF0ZU9iamVjdE1hcChWTSYpIC0+IFRlbXBsYXRlT2JqZWN0TWFw
JgorYXV0byBGdW5jdGlvbkV4ZWN1dGFibGU6OnRlbXBsYXRlT2JqZWN0TWFwKCkgLT4gVGVtcGxh
dGVPYmplY3RNYXAmCiB7Ci0gICAgUmFyZURhdGEmIHJhcmVEYXRhID0gZW5zdXJlUmFyZURhdGEo
KTsKLSAgICByZXR1cm4gZW5zdXJlVGVtcGxhdGVPYmplY3RNYXBJbXBsKHJhcmVEYXRhLm1fdGVt
cGxhdGVPYmplY3RNYXApOworICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLm1fdGVtcGxhdGVP
YmplY3RNYXA7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAppbmRleCBiYWRjYjc4NTBmYjZm
OTM2NTU2Y2U0OWMyNjE2MDJjNTk1OWQ0ZmRhLi5mMjY0NWExNDVjMTc4ZTc0MjhkODBkZmUzZTQx
NDhkNWYxZGEzMjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9G
dW5jdGlvbkV4ZWN1dGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9G
dW5jdGlvbkV4ZWN1dGFibGUuaApAQCAtMjgxLDcgKzI4MSw3IEBAIHB1YmxpYzoKIAogICAgIFNj
cmlwdEV4ZWN1dGFibGUqIHRvcExldmVsRXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdG9w
TGV2ZWxFeGVjdXRhYmxlLmdldCgpOyB9CiAKLSAgICBUZW1wbGF0ZU9iamVjdE1hcCYgZW5zdXJl
VGVtcGxhdGVPYmplY3RNYXAoVk0mKTsKKyAgICBUZW1wbGF0ZU9iamVjdE1hcCYgdGVtcGxhdGVP
YmplY3RNYXAoKTsKIAogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKIApA
QCAtMzAyLDcgKzMwMiw3IEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVy
c1N0YXJ0T2Zmc2V0IHsgMCB9OwogICAgICAgICB1bnNpZ25lZCBtX3R5cGVQcm9maWxpbmdTdGFy
dE9mZnNldCB7IFVJTlRfTUFYIH07CiAgICAgICAgIHVuc2lnbmVkIG1fdHlwZVByb2ZpbGluZ0Vu
ZE9mZnNldCB7IFVJTlRfTUFYIH07Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxUZW1wbGF0ZU9i
amVjdE1hcD4gbV90ZW1wbGF0ZU9iamVjdE1hcDsKKyAgICAgICAgVGVtcGxhdGVPYmplY3RNYXAg
bV90ZW1wbGF0ZU9iamVjdE1hcDsKICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9j
YWNoZWRQb2x5UHJvdG9TdHJ1Y3R1cmU7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCmluZGV4
IGRlZjA3M2MwNTBiMGRlYzgwMzUzMjAzNTRlZTJjYzA2YzZmNGM0NzguLjZkZjBjMWFlY2RkZjcy
MzlmNzRhNDVhYmE0YjQzYzNjZjBkMTcwMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAKQEAgLTc0LDEx
ICs3NCw2IEBAIHZvaWQgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OmRlc3Ryb3koSlNDZWxsKiBj
ZWxsKQogICAgIHN0YXRpY19jYXN0PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4oY2VsbCktPk1v
ZHVsZVByb2dyYW1FeGVjdXRhYmxlOjp+TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUoKTsKIH0KIAot
YXV0byBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6ZW5zdXJlVGVtcGxhdGVPYmplY3RNYXAoVk0m
KSAtPiBUZW1wbGF0ZU9iamVjdE1hcCYKLXsKLSAgICByZXR1cm4gZW5zdXJlVGVtcGxhdGVPYmpl
Y3RNYXBJbXBsKG1fdGVtcGxhdGVPYmplY3RNYXApOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgogdm9pZCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewpAQCAtODgsMTAgKzgzLDEwIEBAIHZv
aWQgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Vu
bGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlKTsKICAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX21vZHVsZVByb2dyYW1Db2RlQmxvY2spOwotICAgIGlmIChUZW1wbGF0
ZU9iamVjdE1hcCogbWFwID0gdGhpc09iamVjdC0+bV90ZW1wbGF0ZU9iamVjdE1hcC5nZXQoKSkg
eworICAgIGlmICghdGhpc09iamVjdC0+bV90ZW1wbGF0ZU9iamVjdE1hcC5pc0VtcHR5KCkpIHsK
ICAgICAgICAgTG9ja2VyIGxvY2tlciB7IHRoaXNPYmplY3QtPmNlbGxMb2NrKCkgfTsKLSAgICAg
ICAgZm9yIChhdXRvJiBlbnRyeSA6ICptYXApCi0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZChl
bnRyeS52YWx1ZSk7CisgICAgICAgIGZvciAoYXV0byYgdmFsdWUgOiB0aGlzT2JqZWN0LT5tX3Rl
bXBsYXRlT2JqZWN0TWFwLnZhbHVlcygpKQorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQodmFs
dWUpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgKaW5kZXggOTYzNDc5MDQ0MDZmZWYyZDljM2Rm
NWU3MDA1YThiNDFjODcxOTNjNy4uZTI5ZTg5YWMwNDQ1NzAzMjAyZjlkMTRmM2UzN2U2YTQ0NGM4
NzA0MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1
bGVQcm9ncmFtRXhlY3V0YWJsZS5oCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKIAogICAgIFN5
bWJvbFRhYmxlKiBtb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlKCkgeyByZXR1cm4gbV9tb2R1
bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlLmdldCgpOyB9CiAKLSAgICBUZW1wbGF0ZU9iamVjdE1h
cCYgZW5zdXJlVGVtcGxhdGVPYmplY3RNYXAoVk0mKTsKKyAgICBUZW1wbGF0ZU9iamVjdE1hcCYg
dGVtcGxhdGVPYmplY3RNYXAoKSB7IHJldHVybiBtX3RlbXBsYXRlT2JqZWN0TWFwOyB9CiAKIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwpAQCAtODEsNyArODEsNyBA
QCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2s+IG1fdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOwogICAgIFdyaXRlQmFycmllcjxT
eW1ib2xUYWJsZT4gbV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlOwogICAgIFdyaXRlQmFy
cmllcjxFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlPiBtX21vZHVsZVByb2dyYW1Db2RlQmxvY2s7
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFRlbXBsYXRlT2JqZWN0TWFwPiBtX3RlbXBsYXRlT2JqZWN0
TWFwOworICAgIFRlbXBsYXRlT2JqZWN0TWFwIG1fdGVtcGxhdGVPYmplY3RNYXA7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb2dyYW1FeGVjdXRhYmxlLmNwcAppbmRleCBlYWJmYTg1YWNhMzdlZjBhYTdjN2RmODk1ZWFl
NDE3MzlkMTU0OTBlLi42ZDdmNmU1Y2FkZGY4MWM5ZDMyMmE4NWQ0ZjcyMTVkZTQ4ZTQzN2FmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJs
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFi
bGUuY3BwCkBAIC0yMDUsMTEgKzIwNSw2IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6
aW5pdGlhbGl6ZUdsb2JhbFByb3BlcnRpZXMoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCoKICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAotYXV0byBQcm9ncmFtRXhlY3V0YWJsZTo6ZW5zdXJlVGVtcGxh
dGVPYmplY3RNYXAoVk0mKSAtPiBUZW1wbGF0ZU9iamVjdE1hcCYKLXsKLSAgICByZXR1cm4gZW5z
dXJlVGVtcGxhdGVPYmplY3RNYXBJbXBsKG1fdGVtcGxhdGVPYmplY3RNYXApOwotfQotCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgogdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewpAQCAtMjE4LDEwICsy
MTMsMTAgQEAgdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV91bmxpbmtl
ZFByb2dyYW1Db2RlQmxvY2spOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJv
Z3JhbUNvZGVCbG9jayk7Ci0gICAgaWYgKFRlbXBsYXRlT2JqZWN0TWFwKiBtYXAgPSB0aGlzT2Jq
ZWN0LT5tX3RlbXBsYXRlT2JqZWN0TWFwLmdldCgpKSB7CisgICAgaWYgKCF0aGlzT2JqZWN0LT5t
X3RlbXBsYXRlT2JqZWN0TWFwLmlzRW1wdHkoKSkgewogICAgICAgICBMb2NrZXIgbG9ja2VyIHsg
dGhpc09iamVjdC0+Y2VsbExvY2soKSB9OwotICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogKm1h
cCkKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKGVudHJ5LnZhbHVlKTsKKyAgICAgICAgZm9y
IChhdXRvJiB2YWx1ZSA6IHRoaXNPYmplY3QtPm1fdGVtcGxhdGVPYmplY3RNYXAudmFsdWVzKCkp
CisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCh2YWx1ZSk7CiAgICAgfQogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuaAppbmRleCA3
ZjVhMTEzM2IzZjMxNTViYjY1OWZkZDQ4Y2M3YzM1MjVlNWRjM2JkLi5iNDYzNWIyZWE0Y2Q3YTA5
MjZjYjcwMDZkZDEyM2Q5NzE5MmQ0ZGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgKQEAgLTcxLDcgKzcxLDcgQEAgcHVibGljOgog
ICAgICAgICAKICAgICBERUNMQVJFX0lORk87CiAKLSAgICBUZW1wbGF0ZU9iamVjdE1hcCYgZW5z
dXJlVGVtcGxhdGVPYmplY3RNYXAoVk0mKTsKKyAgICBUZW1wbGF0ZU9iamVjdE1hcCYgdGVtcGxh
dGVPYmplY3RNYXAoKSB7IHJldHVybiBtX3RlbXBsYXRlT2JqZWN0TWFwOyB9CiAKIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwpAQCAtODMsNyArODMsNyBAQCBwcml2
YXRlOgogCiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4gbV91bmxp
bmtlZFByb2dyYW1Db2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPEV4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2U+IG1fcHJvZ3JhbUNvZGVCbG9jazsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VGVtcGxh
dGVPYmplY3RNYXA+IG1fdGVtcGxhdGVPYmplY3RNYXA7CisgICAgVGVtcGxhdGVPYmplY3RNYXAg
bV90ZW1wbGF0ZU9iamVjdE1hcDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAppbmRleCAy
NzA2NTVlOWMzMTA5ZTEyZGM1M2YzODJiYzM0YzI0ODhiYTIzY2IxLi5lZjE4M2RhMmQwNjMwZTlk
ZTA1Mjg2YTYxMTQ5OTMwNWU1OGU5N2YzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcApAQCAtNDUyLDcgKzQ1Miw3IEBAIEpTQXJy
YXkqIFNjcmlwdEV4ZWN1dGFibGU6OmNyZWF0ZVRlbXBsYXRlT2JqZWN0KEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIFRlbXBsYXRlT2Jq
ZWN0TWFwJiB0ZW1wbGF0ZU9iamVjdE1hcCA9IGVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwKHZtKTsK
KyAgICBUZW1wbGF0ZU9iamVjdE1hcCYgdGVtcGxhdGVPYmplY3RNYXAgPSB0aGlzLT50ZW1wbGF0
ZU9iamVjdE1hcCgpOwogICAgIFRlbXBsYXRlT2JqZWN0TWFwOjpBZGRSZXN1bHQgcmVzdWx0Owog
ICAgIHsKICAgICAgICAgTG9ja2VyIGxvY2tlciB7IGNlbGxMb2NrKCkgfTsKQEAgLTQ2NiwyOSAr
NDY2LDE5IEBAIEpTQXJyYXkqIFNjcmlwdEV4ZWN1dGFibGU6OmNyZWF0ZVRlbXBsYXRlT2JqZWN0
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTCiAgICAgcmV0dXJuIHRlbXBsYXRlT2Jq
ZWN0OwogfQogCi1hdXRvIFNjcmlwdEV4ZWN1dGFibGU6OmVuc3VyZVRlbXBsYXRlT2JqZWN0TWFw
SW1wbChzdGQ6OnVuaXF1ZV9wdHI8VGVtcGxhdGVPYmplY3RNYXA+JiBkZXN0KSAtPiBUZW1wbGF0
ZU9iamVjdE1hcCYKLXsKLSAgICBpZiAoZGVzdCkKLSAgICAgICAgcmV0dXJuICpkZXN0OwotICAg
IGF1dG8gcmVzdWx0ID0gbWFrZVVuaXF1ZTxUZW1wbGF0ZU9iamVjdE1hcD4oKTsKLSAgICBXVEY6
OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgIGRlc3QgPSBXVEZNb3ZlKHJlc3VsdCk7Ci0gICAgcmV0
dXJuICpkZXN0OwotfQotCi1hdXRvIFNjcmlwdEV4ZWN1dGFibGU6OmVuc3VyZVRlbXBsYXRlT2Jq
ZWN0TWFwKFZNJiB2bSkgLT4gVGVtcGxhdGVPYmplY3RNYXAmCithdXRvIFNjcmlwdEV4ZWN1dGFi
bGU6OnRlbXBsYXRlT2JqZWN0TWFwKCkgLT4gVGVtcGxhdGVPYmplY3RNYXAmCiB7CiAgICAgc3dp
dGNoICh0eXBlKCkpIHsKICAgICBjYXNlIEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGU6Ci0gICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0aGlzKS0+ZW5zdXJlVGVt
cGxhdGVPYmplY3RNYXAodm0pOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnVuY3Rpb25F
eGVjdXRhYmxlKj4odGhpcyktPnRlbXBsYXRlT2JqZWN0TWFwKCk7CiAgICAgY2FzZSBFdmFsRXhl
Y3V0YWJsZVR5cGU6Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxFdmFsRXhlY3V0YWJsZSo+
KHRoaXMpLT5lbnN1cmVUZW1wbGF0ZU9iamVjdE1hcCh2bSk7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxFdmFsRXhlY3V0YWJsZSo+KHRoaXMpLT50ZW1wbGF0ZU9iamVjdE1hcCgpOwogICAg
IGNhc2UgUHJvZ3JhbUV4ZWN1dGFibGVUeXBlOgotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
UHJvZ3JhbUV4ZWN1dGFibGUqPih0aGlzKS0+ZW5zdXJlVGVtcGxhdGVPYmplY3RNYXAodm0pOwor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPih0aGlzKS0+dGVt
cGxhdGVPYmplY3RNYXAoKTsKICAgICBjYXNlIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlVHlwZToK
ICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlQodHlwZSgpID09IE1vZHVsZVByb2dyYW1FeGVj
dXRhYmxlVHlwZSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxNb2R1bGVQcm9ncmFtRXhl
Y3V0YWJsZSo+KHRoaXMpLT5lbnN1cmVUZW1wbGF0ZU9iamVjdE1hcCh2bSk7CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpLT50ZW1wbGF0
ZU9iamVjdE1hcCgpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5oCmluZGV4IGQwZjFmY2RkZGE3MTk5MTg1ZTgzZjQxOGVk
YzJkZGE3MDkwZjhkNWQuLjdhMTk2NzNlNTc2Y2ZjMDdkNjg5YWRjYzk4NjdhYzUzNWVkZDM5Mjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFi
bGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxl
LmgKQEAgLTEyNSw3ICsxMjUsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBoYXNDbGVhcmFibGVD
b2RlKFZNJikgY29uc3Q7CiAKLSAgICBUZW1wbGF0ZU9iamVjdE1hcCYgZW5zdXJlVGVtcGxhdGVP
YmplY3RNYXAoVk0mKTsKKyAgICBUZW1wbGF0ZU9iamVjdE1hcCYgdGVtcGxhdGVPYmplY3RNYXAo
KTsKIAogcHJvdGVjdGVkOgogICAgIFNjcmlwdEV4ZWN1dGFibGUoU3RydWN0dXJlKiwgVk0mLCBj
b25zdCBTb3VyY2VDb2RlJiwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCwgRGVyaXZlZENvbnRleHRU
eXBlLCBib29sIGlzSW5BcnJvd0Z1bmN0aW9uQ29udGV4dCwgYm9vbCBpc0luc2lkZU9yZGluYXJ5
RnVuY3Rpb24sIEV2YWxDb250ZXh0VHlwZSwgSW50cmluc2ljKTsKQEAgLTEzNiw4ICsxMzYsNiBA
QCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgPSBoYXNDYXB0dXJl
ZFZhcmlhYmxlczsKICAgICB9CiAKLSAgICBzdGF0aWMgVGVtcGxhdGVPYmplY3RNYXAmIGVuc3Vy
ZVRlbXBsYXRlT2JqZWN0TWFwSW1wbChzdGQ6OnVuaXF1ZV9wdHI8VGVtcGxhdGVPYmplY3RNYXA+
JiBkZXN0KTsKLQogICAgIFNvdXJjZUNvZGUgbV9zb3VyY2U7CiAgICAgSW50cmluc2ljIG1faW50
cmluc2ljIHsgTm9JbnRyaW5zaWMgfTsKICAgICBib29sIG1fZGlkVHJ5VG9FbnRlckluTG9vcCB7
IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLmNw
cAppbmRleCA4ZDk1N2FmNjk4NjY3NGM4NDRhMmM1NDA3MTc3N2Y1OWY2OTI2Y2YyLi40NDI5Mzgx
MTZmYTZhODE2MWEyNmEwMTg5YTk3NTBmY2EwMDQ2MDE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1v
cnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbi5jcHAKQEAgLTEzMiwxOCArMTMyLDE2IEBAIHZvaWQg
TWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlRGVsZXRlZChSZWY8TWVt
b3J5T2JqZWN0U3RvcmU+JiYKICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFdU
Rk1vdmUob2JqZWN0U3RvcmUpOwogfQogCi12b2lkIE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uOjpvYmplY3RTdG9yZUNsZWFyZWQoTWVtb3J5T2JqZWN0U3RvcmUmIG9iamVjdFN0b3JlLCBz
dGQ6OnVuaXF1ZV9wdHI8S2V5VmFsdWVNYXA+JiYga2V5VmFsdWVNYXAsIHN0ZDo6dW5pcXVlX3B0
cjxJREJLZXlEYXRhU2V0PiYmIG9yZGVyZWRLZXlzKQordm9pZCBNZW1vcnlCYWNraW5nU3RvcmVU
cmFuc2FjdGlvbjo6b2JqZWN0U3RvcmVDbGVhcmVkKE1lbW9yeU9iamVjdFN0b3JlJiBvYmplY3RT
dG9yZSwgS2V5VmFsdWVNYXAmJiBrZXlWYWx1ZU1hcCwgc3RkOjp1bmlxdWVfcHRyPElEQktleURh
dGFTZXQ+JiYgb3JkZXJlZEtleXMpCiB7CiAgICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVzLmNvbnRh
aW5zKCZvYmplY3RTdG9yZSkpOwogCi0gICAgYXV0byBhZGRSZXN1bHQgPSBtX2NsZWFyZWRLZXlW
YWx1ZU1hcHMuYWRkKCZvYmplY3RTdG9yZSwgbnVsbHB0cik7CisgICAgYXV0byBhZGRSZXN1bHQg
PSBtX2NsZWFyZWRLZXlWYWx1ZU1hcHMuYWRkKCZvYmplY3RTdG9yZSwgV1RGTW92ZShrZXlWYWx1
ZU1hcCkpOwogCiAgICAgLy8gSWYgdGhpcyBvYmplY3Qgc3RvcmUgaGFzIGFscmVhZHkgYmVlbiBj
bGVhcmVkIGR1cmluZyB0aGlzIHRyYW5zYWN0aW9uLCB3ZSBzaG91bGRuJ3QgcmVtZW1iZXIgdGhp
cyBjbGVhcmluZy4KICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICByZXR1
cm47CiAKLSAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gV1RGTW92ZShrZXlWYWx1ZU1h
cCk7Ci0KICAgICBBU1NFUlQoIW1fY2xlYXJlZE9yZGVyZWRLZXlzLmNvbnRhaW5zKCZvYmplY3RT
dG9yZSkpOwogICAgIG1fY2xlYXJlZE9yZGVyZWRLZXlzLmFkZCgmb2JqZWN0U3RvcmUsIFdURk1v
dmUob3JkZXJlZEtleXMpKTsKIH0KQEAgLTE5MSwxNyArMTg5LDggQEAgdm9pZCBNZW1vcnlCYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbjo6cmVjb3JkVmFsdWVDaGFuZ2VkKE1lbW9yeU9iamVjdFN0b3Jl
JiBvYmplY3QKICAgICBpZiAobV9jbGVhcmVkS2V5VmFsdWVNYXBzLmNvbnRhaW5zKCZvYmplY3RT
dG9yZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gb3JpZ2luYWxBZGRSZXN1bHQgPSBt
X29yaWdpbmFsVmFsdWVzLmFkZCgmb2JqZWN0U3RvcmUsIG51bGxwdHIpOwotICAgIGlmIChvcmln
aW5hbEFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBvcmlnaW5hbEFkZFJlc3VsdC5pdGVy
YXRvci0+dmFsdWUgPSBtYWtlVW5pcXVlPEtleVZhbHVlTWFwPigpOwotCi0gICAgYXV0byogbWFw
ID0gb3JpZ2luYWxBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwotCi0gICAgYXV0byBh
ZGRSZXN1bHQgPSBtYXAtPmFkZChrZXksIFRocmVhZFNhZmVEYXRhQnVmZmVyKCkpOwotICAgIGlm
ICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICh2YWx1
ZSkKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fb3JpZ2luYWxWYWx1ZXMuYWRkKCZvYmplY3RTdG9y
ZSwgS2V5VmFsdWVNYXAgeyB9KS5pdGVyYXRvci0+dmFsdWUuYWRkKGtleSwgVGhyZWFkU2FmZURh
dGFCdWZmZXIgeyB9KTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkgJiYgdmFsdWUpCiAg
ICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSAqdmFsdWU7CiB9CiAKQEAgLTI0Niwx
NiArMjM1LDEyIEBAIHZvaWQgTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb246OmFib3J0KCkK
ICAgICAgICAgb2JqZWN0U3RvcmUtPnNldEtleUdlbmVyYXRvclZhbHVlKG1fb3JpZ2luYWxLZXlH
ZW5lcmF0b3JzLmdldChvYmplY3RTdG9yZS5nZXQoKSkpOwogCiAgICAgICAgIGF1dG8gY2xlYXJl
ZEtleVZhbHVlTWFwID0gbV9jbGVhcmVkS2V5VmFsdWVNYXBzLnRha2Uob2JqZWN0U3RvcmUuZ2V0
KCkpOwotICAgICAgICBpZiAoY2xlYXJlZEtleVZhbHVlTWFwKSB7CisgICAgICAgIGlmICghY2xl
YXJlZEtleVZhbHVlTWFwLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgQVNTRVJUKG1fY2xlYXJl
ZE9yZGVyZWRLZXlzLmNvbnRhaW5zKG9iamVjdFN0b3JlLmdldCgpKSk7CiAgICAgICAgICAgICBv
YmplY3RTdG9yZS0+cmVwbGFjZUtleVZhbHVlU3RvcmUoV1RGTW92ZShjbGVhcmVkS2V5VmFsdWVN
YXApLCBtX2NsZWFyZWRPcmRlcmVkS2V5cy50YWtlKG9iamVjdFN0b3JlLmdldCgpKSk7CiAgICAg
ICAgIH0KIAotICAgICAgICBhdXRvIGtleVZhbHVlTWFwID0gbV9vcmlnaW5hbFZhbHVlcy50YWtl
KG9iamVjdFN0b3JlLmdldCgpKTsKLSAgICAgICAgaWYgKCFrZXlWYWx1ZU1hcCkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiAqa2V5VmFs
dWVNYXApIHsKKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fb3JpZ2luYWxWYWx1ZXMudGFr
ZShvYmplY3RTdG9yZS5nZXQoKSkpIHsKICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5kZWxldGVS
ZWNvcmQoZW50cnkua2V5KTsKICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5hZGRSZWNvcmQoKnRo
aXMsIGVudHJ5LmtleSwgeyBlbnRyeS52YWx1ZSB9KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
TWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uaAppbmRleCAyYzBhYTI3ZDgzNGY2ZjkzNTBl
YzZjMDA3ZjllZTcxYWRiN2EwNGE1Li41MDczNzc0N2RhM2UxNDc1YzllNjRkNDk0YmVjYjcyZDVi
OTZiYmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uaApA
QCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCByZWNvcmRWYWx1ZUNoYW5n
ZWQoTWVtb3J5T2JqZWN0U3RvcmUmLCBjb25zdCBJREJLZXlEYXRhJiwgVGhyZWFkU2FmZURhdGFC
dWZmZXIqKTsKICAgICB2b2lkIG9iamVjdFN0b3JlRGVsZXRlZChSZWY8TWVtb3J5T2JqZWN0U3Rv
cmU+JiYpOwotICAgIHZvaWQgb2JqZWN0U3RvcmVDbGVhcmVkKE1lbW9yeU9iamVjdFN0b3JlJiwg
c3RkOjp1bmlxdWVfcHRyPEtleVZhbHVlTWFwPiYmLCBzdGQ6OnVuaXF1ZV9wdHI8SURCS2V5RGF0
YVNldD4mJik7CisgICAgdm9pZCBvYmplY3RTdG9yZUNsZWFyZWQoTWVtb3J5T2JqZWN0U3RvcmUm
LCBLZXlWYWx1ZU1hcCYmLCBzdGQ6OnVuaXF1ZV9wdHI8SURCS2V5RGF0YVNldD4mJik7CiAgICAg
dm9pZCBvYmplY3RTdG9yZVJlbmFtZWQoTWVtb3J5T2JqZWN0U3RvcmUmLCBjb25zdCBTdHJpbmcm
IG9sZE5hbWUpOwogICAgIHZvaWQgaW5kZXhSZW5hbWVkKE1lbW9yeUluZGV4JiwgY29uc3QgU3Ry
aW5nJiBvbGROYW1lKTsKICAgICB2b2lkIGluZGV4Q2xlYXJlZChNZW1vcnlJbmRleCYsIHN0ZDo6
dW5pcXVlX3B0cjxJbmRleFZhbHVlU3RvcmU+JiYpOwpAQCAtOTIsOCArOTIsOCBAQCBwcml2YXRl
OgogICAgIEhhc2hNYXA8TWVtb3J5T2JqZWN0U3RvcmUqLCB1aW50NjRfdD4gbV9vcmlnaW5hbEtl
eUdlbmVyYXRvcnM7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxNZW1vcnlPYmplY3RTdG9y
ZT4+IG1fZGVsZXRlZE9iamVjdFN0b3JlczsKICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPE1l
bW9yeUluZGV4Pj4gbV9kZWxldGVkSW5kZXhlczsKLSAgICBIYXNoTWFwPE1lbW9yeU9iamVjdFN0
b3JlKiwgc3RkOjp1bmlxdWVfcHRyPEtleVZhbHVlTWFwPj4gbV9vcmlnaW5hbFZhbHVlczsKLSAg
ICBIYXNoTWFwPE1lbW9yeU9iamVjdFN0b3JlKiwgc3RkOjp1bmlxdWVfcHRyPEtleVZhbHVlTWFw
Pj4gbV9jbGVhcmVkS2V5VmFsdWVNYXBzOworICAgIEhhc2hNYXA8TWVtb3J5T2JqZWN0U3RvcmUq
LCBLZXlWYWx1ZU1hcD4gbV9vcmlnaW5hbFZhbHVlczsKKyAgICBIYXNoTWFwPE1lbW9yeU9iamVj
dFN0b3JlKiwgS2V5VmFsdWVNYXA+IG1fY2xlYXJlZEtleVZhbHVlTWFwczsKICAgICBIYXNoTWFw
PE1lbW9yeU9iamVjdFN0b3JlKiwgc3RkOjp1bmlxdWVfcHRyPElEQktleURhdGFTZXQ+PiBtX2Ns
ZWFyZWRPcmRlcmVkS2V5czsKICAgICBIYXNoTWFwPE1lbW9yeU9iamVjdFN0b3JlKiwgU3RyaW5n
PiBtX29yaWdpbmFsT2JqZWN0U3RvcmVOYW1lczsKICAgICBIYXNoTWFwPE1lbW9yeUluZGV4Kiwg
U3RyaW5nPiBtX29yaWdpbmFsSW5kZXhOYW1lczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuY3BwCmlu
ZGV4IDAzYzMxMWRmZjdiMmMyNDM0OWQyN2NhODYzNDdlYzlkYmZkZTdlOWIuLjMwNzM0ZmQ0ZDlm
ZDE1MjUzNTgyMGUxZjI5YmEyMTNhNjUyZDAzY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeU9iamVjdFN0b3JlLmNw
cApAQCAtMTcwLDEwICsxNzAsNyBAQCB2b2lkIE1lbW9yeU9iamVjdFN0b3JlOjpkZWxldGVBbGxJ
bmRleGVzKE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uJiB0cmFuc2FjdAogCiBib29sIE1l
bW9yeU9iamVjdFN0b3JlOjpjb250YWluc1JlY29yZChjb25zdCBJREJLZXlEYXRhJiBrZXkpCiB7
Ci0gICAgaWYgKCFtX2tleVZhbHVlU3RvcmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IHJldHVybiBtX2tleVZhbHVlU3RvcmUtPmNvbnRhaW5zKGtleSk7CisgICAgcmV0dXJuIG1fa2V5
VmFsdWVTdG9yZS5jb250YWlucyhrZXkpOwogfQogCiB2b2lkIE1lbW9yeU9iamVjdFN0b3JlOjpj
bGVhcigpCkBAIC0xODksNyArMTg2LDcgQEAgdm9pZCBNZW1vcnlPYmplY3RTdG9yZTo6Y2xlYXIo
KQogICAgICAgICBjdXJzb3ItPm9iamVjdFN0b3JlQ2xlYXJlZCgpOwogfQogCi12b2lkIE1lbW9y
eU9iamVjdFN0b3JlOjpyZXBsYWNlS2V5VmFsdWVTdG9yZShzdGQ6OnVuaXF1ZV9wdHI8S2V5VmFs
dWVNYXA+JiYgc3RvcmUsIHN0ZDo6dW5pcXVlX3B0cjxJREJLZXlEYXRhU2V0PiYmIG9yZGVyZWRL
ZXlzKQordm9pZCBNZW1vcnlPYmplY3RTdG9yZTo6cmVwbGFjZUtleVZhbHVlU3RvcmUoS2V5VmFs
dWVNYXAmJiBzdG9yZSwgc3RkOjp1bmlxdWVfcHRyPElEQktleURhdGFTZXQ+JiYgb3JkZXJlZEtl
eXMpCiB7CiAgICAgQVNTRVJUKG1fd3JpdGVUcmFuc2FjdGlvbik7CiAgICAgQVNTRVJUKG1fd3Jp
dGVUcmFuc2FjdGlvbi0+aXNBYm9ydGluZygpKTsKQEAgLTIwMiwyMyArMTk5LDE0IEBAIHZvaWQg
TWVtb3J5T2JqZWN0U3RvcmU6OmRlbGV0ZVJlY29yZChjb25zdCBJREJLZXlEYXRhJiBrZXkpCiB7
CiAgICAgTE9HKEluZGV4ZWREQiwgIk1lbW9yeU9iamVjdFN0b3JlOjpkZWxldGVSZWNvcmQiKTsK
IAotICAgIEFTU0VSVChtX3dyaXRlVHJhbnNhY3Rpb24pOwotCi0gICAgaWYgKCFtX2tleVZhbHVl
U3RvcmUpIHsKLSAgICAgICAgbV93cml0ZVRyYW5zYWN0aW9uLT5yZWNvcmRWYWx1ZUNoYW5nZWQo
KnRoaXMsIGtleSwgbnVsbHB0cik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NF
UlQobV9vcmRlcmVkS2V5cyk7Ci0KLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9rZXlWYWx1ZVN0b3Jl
LT5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yID09IG1fa2V5VmFsdWVTdG9yZS0+ZW5kKCkp
IHsKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9rZXlWYWx1ZVN0b3JlLmZpbmQoa2V5KTsKKyAgICBp
ZiAoaXRlcmF0b3IgPT0gbV9rZXlWYWx1ZVN0b3JlLmVuZCgpKSB7CiAgICAgICAgIG1fd3JpdGVU
cmFuc2FjdGlvbi0+cmVjb3JkVmFsdWVDaGFuZ2VkKCp0aGlzLCBrZXksIG51bGxwdHIpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgbV93cml0ZVRyYW5zYWN0aW9uLT5yZWNvcmRWYWx1
ZUNoYW5nZWQoKnRoaXMsIGtleSwgJml0ZXJhdG9yLT52YWx1ZSk7Ci0gICAgbV9rZXlWYWx1ZVN0
b3JlLT5yZW1vdmUoaXRlcmF0b3IpOworICAgIG1fa2V5VmFsdWVTdG9yZS5yZW1vdmUoaXRlcmF0
b3IpOwogICAgIG1fb3JkZXJlZEtleXMtPmVyYXNlKGtleSk7CiAKICAgICB1cGRhdGVJbmRleGVz
Rm9yRGVsZXRlUmVjb3JkKGtleSk7CkBAIC0yNjEsMTYgKzI0OSwxMyBAQCBJREJFcnJvciBNZW1v
cnlPYmplY3RTdG9yZTo6YWRkUmVjb3JkKE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uJiB0
cmFuc2FjdGlvbgogCiAgICAgQVNTRVJUKG1fd3JpdGVUcmFuc2FjdGlvbik7CiAgICAgQVNTRVJU
X1VOVVNFRCh0cmFuc2FjdGlvbiwgbV93cml0ZVRyYW5zYWN0aW9uID09ICZ0cmFuc2FjdGlvbik7
Ci0gICAgQVNTRVJUKCFtX2tleVZhbHVlU3RvcmUgfHwgIW1fa2V5VmFsdWVTdG9yZS0+Y29udGFp
bnMoa2V5RGF0YSkpOworICAgIEFTU0VSVCghbV9rZXlWYWx1ZVN0b3JlLmNvbnRhaW5zKGtleURh
dGEpKTsKICAgICBBU1NFUlQoIW1fb3JkZXJlZEtleXMgfHwgbV9vcmRlcmVkS2V5cy0+ZmluZChr
ZXlEYXRhKSA9PSBtX29yZGVyZWRLZXlzLT5lbmQoKSk7CiAKLSAgICBpZiAoIW1fa2V5VmFsdWVT
dG9yZSkgewotICAgICAgICBBU1NFUlQoIW1fb3JkZXJlZEtleXMpOwotICAgICAgICBtX2tleVZh
bHVlU3RvcmUgPSBtYWtlVW5pcXVlPEtleVZhbHVlTWFwPigpOworICAgIGlmICghbV9vcmRlcmVk
S2V5cykKICAgICAgICAgbV9vcmRlcmVkS2V5cyA9IG1ha2VVbmlxdWVXaXRob3V0RmFzdE1hbGxv
Y0NoZWNrPElEQktleURhdGFTZXQ+KCk7Ci0gICAgfQogCi0gICAgYXV0byBtYXBSZXN1bHQgPSBt
X2tleVZhbHVlU3RvcmUtPnNldChrZXlEYXRhLCB2YWx1ZS5kYXRhKCkpOworICAgIGF1dG8gbWFw
UmVzdWx0ID0gbV9rZXlWYWx1ZVN0b3JlLnNldChrZXlEYXRhLCB2YWx1ZS5kYXRhKCkpOwogICAg
IEFTU0VSVChtYXBSZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgYXV0byBsaXN0UmVzdWx0ID0gbV9v
cmRlcmVkS2V5cy0+aW5zZXJ0KGtleURhdGEpOwogICAgIEFTU0VSVChsaXN0UmVzdWx0LnNlY29u
ZCk7CkBAIC0yNzgsNyArMjYzLDcgQEAgSURCRXJyb3IgTWVtb3J5T2JqZWN0U3RvcmU6OmFkZFJl
Y29yZChNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24KICAgICAvLyBJ
ZiB0aGVyZSB3YXMgYW4gZXJyb3IgaW5kZXhpbmcgdGhpcyBhZGRpdGlvbiwgdGhlbiByZXZlcnQg
aXQuCiAgICAgYXV0byBlcnJvciA9IHVwZGF0ZUluZGV4ZXNGb3JQdXRSZWNvcmQoa2V5RGF0YSwg
aW5kZXhLZXlzKTsKICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgIG1fa2V5VmFs
dWVTdG9yZS0+cmVtb3ZlKG1hcFJlc3VsdC5pdGVyYXRvcik7CisgICAgICAgIG1fa2V5VmFsdWVT
dG9yZS5yZW1vdmUobWFwUmVzdWx0Lml0ZXJhdG9yKTsKICAgICAgICAgbV9vcmRlcmVkS2V5cy0+
ZXJhc2UobGlzdFJlc3VsdC5maXJzdCk7CiAgICAgfSBlbHNlCiAgICAgICAgIHVwZGF0ZUN1cnNv
cnNGb3JQdXRSZWNvcmQobGlzdFJlc3VsdC5maXJzdCk7CkBAIC0zMzUsMTIgKzMyMCw5IEBAIElE
QkVycm9yIE1lbW9yeU9iamVjdFN0b3JlOjp1cGRhdGVJbmRleGVzRm9yUHV0UmVjb3JkKGNvbnN0
IElEQktleURhdGEmIGtleSwgY29uCiAKIElEQkVycm9yIE1lbW9yeU9iamVjdFN0b3JlOjpwb3B1
bGF0ZUluZGV4V2l0aEV4aXN0aW5nUmVjb3JkcyhNZW1vcnlJbmRleCYgaW5kZXgpCiB7Ci0gICAg
aWYgKCFtX2tleVZhbHVlU3RvcmUpCi0gICAgICAgIHJldHVybiBJREJFcnJvciB7IH07Ci0KICAg
ICBKU0xvY2tIb2xkZXIgbG9ja2VyKG1fc2VyaWFsaXphdGlvbkNvbnRleHQtPnZtKCkpOwogCi0g
ICAgZm9yIChjb25zdCBhdXRvJiBpdGVyYXRvciA6ICptX2tleVZhbHVlU3RvcmUpIHsKKyAgICBm
b3IgKGNvbnN0IGF1dG8mIGl0ZXJhdG9yIDogbV9rZXlWYWx1ZVN0b3JlKSB7CiAgICAgICAgIGF1
dG8ganNWYWx1ZSA9IGRlc2VyaWFsaXplSURCVmFsdWVUb0pTVmFsdWUobV9zZXJpYWxpemF0aW9u
Q29udGV4dC0+Z2xvYmFsT2JqZWN0KCksIGl0ZXJhdG9yLnZhbHVlKTsKICAgICAgICAgaWYgKGpz
VmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgICAgIHJldHVybiBJREJFcnJvciB7
IH07CkBAIC0zNjksNyArMzUxLDcgQEAgdWludDY0X3QgTWVtb3J5T2JqZWN0U3RvcmU6OmNvdW50
Rm9yS2V5UmFuZ2UodWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBJREIKICAgICAgICAg
cmV0dXJuIGluZGV4LT5jb3VudEZvcktleVJhbmdlKGluUmFuZ2UpOwogICAgIH0KIAotICAgIGlm
ICghbV9rZXlWYWx1ZVN0b3JlKQorICAgIGlmIChtX2tleVZhbHVlU3RvcmUuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gMDsKIAogICAgIHVpbnQ2NF90IGNvdW50ID0gMDsKQEAgLTM4OSwxMCAr
MzcxLDcgQEAgdWludDY0X3QgTWVtb3J5T2JqZWN0U3RvcmU6OmNvdW50Rm9yS2V5UmFuZ2UodWlu
dDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBJREIKIAogVGhyZWFkU2FmZURhdGFCdWZmZXIg
TWVtb3J5T2JqZWN0U3RvcmU6OnZhbHVlRm9yS2V5KGNvbnN0IElEQktleURhdGEmIGtleSkgY29u
c3QKIHsKLSAgICBpZiAoIW1fa2V5VmFsdWVTdG9yZSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQot
ICAgIHJldHVybiBtX2tleVZhbHVlU3RvcmUtPmdldChrZXkpOworICAgIHJldHVybiBtX2tleVZh
bHVlU3RvcmUuZ2V0KGtleSk7CiB9CiAKIFRocmVhZFNhZmVEYXRhQnVmZmVyIE1lbW9yeU9iamVj
dFN0b3JlOjp2YWx1ZUZvcktleVJhbmdlKGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VE
YXRhKSBjb25zdApAQCAtNDAzLDggKzM4Miw3IEBAIFRocmVhZFNhZmVEYXRhQnVmZmVyIE1lbW9y
eU9iamVjdFN0b3JlOjp2YWx1ZUZvcktleVJhbmdlKGNvbnN0IElEQktleVJhbmdlRGF0YSYKICAg
ICBpZiAoa2V5LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gVGhyZWFkU2FmZURhdGFCdWZmZXIo
KTsKIAotICAgIEFTU0VSVChtX2tleVZhbHVlU3RvcmUpOwotICAgIHJldHVybiBtX2tleVZhbHVl
U3RvcmUtPmdldChrZXkpOworICAgIHJldHVybiBtX2tleVZhbHVlU3RvcmUuZ2V0KGtleSk7CiB9
CiAKIHZvaWQgTWVtb3J5T2JqZWN0U3RvcmU6OmdldEFsbFJlY29yZHMoY29uc3QgSURCS2V5UmFu
Z2VEYXRhJiBrZXlSYW5nZURhdGEsIE9wdGlvbmFsPHVpbnQzMl90PiBjb3VudCwgSW5kZXhlZERC
OjpHZXRBbGxUeXBlIHR5cGUsIElEQkdldEFsbFJlc3VsdCYgcmVzdWx0KSBjb25zdApAQCAtNDQ1
LDEwICs0MjMsMTAgQEAgSURCR2V0UmVzdWx0IE1lbW9yeU9iamVjdFN0b3JlOjppbmRleFZhbHVl
Rm9yS2V5UmFuZ2UodWludDY0X3QgaW5kZXhJZGVudGlmaWVyLAogCiBJREJLZXlEYXRhIE1lbW9y
eU9iamVjdFN0b3JlOjpsb3dlc3RLZXlXaXRoUmVjb3JkSW5SYW5nZShjb25zdCBJREJLZXlSYW5n
ZURhdGEmIGtleVJhbmdlRGF0YSkgY29uc3QKIHsKLSAgICBpZiAoIW1fa2V5VmFsdWVTdG9yZSkK
KyAgICBpZiAobV9rZXlWYWx1ZVN0b3JlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHsgfTsK
IAotICAgIGlmIChrZXlSYW5nZURhdGEuaXNFeGFjdGx5T25lS2V5KCkgJiYgbV9rZXlWYWx1ZVN0
b3JlLT5jb250YWlucyhrZXlSYW5nZURhdGEubG93ZXJLZXkpKQorICAgIGlmIChrZXlSYW5nZURh
dGEuaXNFeGFjdGx5T25lS2V5KCkgJiYgbV9rZXlWYWx1ZVN0b3JlLmNvbnRhaW5zKGtleVJhbmdl
RGF0YS5sb3dlcktleSkpCiAgICAgICAgIHJldHVybiBrZXlSYW5nZURhdGEubG93ZXJLZXk7CiAK
ICAgICBBU1NFUlQobV9vcmRlcmVkS2V5cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5oCmluZGV4IDQz
NDk5ZDViY2JlYzYyNmFkMTFjNDU4MmI2YWI2NjRkYTI2ZGQwMTguLjQzYTUzZWU5NmZiNzY1NTgy
ZDUyYmNhYWU5ZDdlZDIzYzAwNTkzNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5oCkBAIC04NSw3
ICs4NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEtleUdlbmVyYXRvclZhbHVlKHVpbnQ2NF90
IHZhbHVlKSB7IG1fa2V5R2VuZXJhdG9yVmFsdWUgPSB2YWx1ZTsgfQogCiAgICAgdm9pZCBjbGVh
cigpOwotICAgIHZvaWQgcmVwbGFjZUtleVZhbHVlU3RvcmUoc3RkOjp1bmlxdWVfcHRyPEtleVZh
bHVlTWFwPiYmLCBzdGQ6OnVuaXF1ZV9wdHI8SURCS2V5RGF0YVNldD4mJik7CisgICAgdm9pZCBy
ZXBsYWNlS2V5VmFsdWVTdG9yZShLZXlWYWx1ZU1hcCYmLCBzdGQ6OnVuaXF1ZV9wdHI8SURCS2V5
RGF0YVNldD4mJik7CiAKICAgICBUaHJlYWRTYWZlRGF0YUJ1ZmZlciB2YWx1ZUZvcktleShjb25z
dCBJREJLZXlEYXRhJikgY29uc3Q7CiAgICAgVGhyZWFkU2FmZURhdGFCdWZmZXIgdmFsdWVGb3JL
ZXlSYW5nZShjb25zdCBJREJLZXlSYW5nZURhdGEmKSBjb25zdDsKQEAgLTEyNiw3ICsxMjYsNyBA
QCBwcml2YXRlOgogICAgIE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKiBtX3dyaXRlVHJh
bnNhY3Rpb24geyBudWxscHRyIH07CiAgICAgdWludDY0X3QgbV9rZXlHZW5lcmF0b3JWYWx1ZSB7
IDEgfTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxLZXlWYWx1ZU1hcD4gbV9rZXlWYWx1ZVN0b3Jl
OworICAgIEtleVZhbHVlTWFwIG1fa2V5VmFsdWVTdG9yZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
SURCS2V5RGF0YVNldD4gbV9vcmRlcmVkS2V5czsKIAogICAgIHZvaWQgdW5yZWdpc3RlckluZGV4
KE1lbW9yeUluZGV4Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAKaW5kZXggYTlmMjgwYjljNTlmNDhiZGIyOGRhNzMw
MTUzNzY0M2U5NGRkNjU2MC4uMjIyMjEyNjdkMjU5Y2NkNmYxZTk2YWNmYTM4YzVhOTI2ZjUwNDZi
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZVRyYWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VUcmFja2VyLmNwcApAQCAtNTI5LDEyICs1MjksMTAgQEAgVmVjdG9yPFJlZjxEYXRhYmFz
ZT4+IERhdGFiYXNlVHJhY2tlcjo6b3BlbkRhdGFiYXNlcygpCiAgICAgewogICAgICAgICBMb2Nr
ZXIgb3BlbkRhdGFiYXNlTWFwTG9jayB7IG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQgfTsKIAotICAg
ICAgICBpZiAobV9vcGVuRGF0YWJhc2VNYXApIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgbmFt
ZU1hcCA6IG1fb3BlbkRhdGFiYXNlTWFwLT52YWx1ZXMoKSkgewotICAgICAgICAgICAgICAgIGZv
ciAoYXV0byYgc2V0IDogbmFtZU1hcC0+dmFsdWVzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
Zm9yIChhdXRvJiBkYXRhYmFzZSA6ICpzZXQpCi0gICAgICAgICAgICAgICAgICAgICAgICBvcGVu
RGF0YWJhc2VzLmFwcGVuZCgqZGF0YWJhc2UpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
Zm9yIChhdXRvJiBuYW1lTWFwIDogbV9vcGVuRGF0YWJhc2VNYXAudmFsdWVzKCkpIHsKKyAgICAg
ICAgICAgIGZvciAoYXV0byYgc2V0IDogbmFtZU1hcC52YWx1ZXMoKSkgeworICAgICAgICAgICAg
ICAgIGZvciAoYXV0byYgZGF0YWJhc2UgOiBzZXQpCisgICAgICAgICAgICAgICAgICAgIG9wZW5E
YXRhYmFzZXMuYXBwZW5kKCpkYXRhYmFzZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9CkBAIC01NDUsMjUgKzU0MywxNCBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6YWRkT3BlbkRh
dGFiYXNlKERhdGFiYXNlJiBkYXRhYmFzZSkKIHsKICAgICBMb2NrZXIgb3BlbkRhdGFiYXNlTWFw
TG9jayB7IG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQgfTsKIAotICAgIGlmICghbV9vcGVuRGF0YWJh
c2VNYXApCi0gICAgICAgIG1fb3BlbkRhdGFiYXNlTWFwID0gbWFrZVVuaXF1ZTxEYXRhYmFzZU9y
aWdpbk1hcD4oKTsKLQogICAgIGF1dG8gb3JpZ2luID0gZGF0YWJhc2Uuc2VjdXJpdHlPcmlnaW4o
KTsKIAotICAgIGF1dG8qIG5hbWVNYXAgPSBtX29wZW5EYXRhYmFzZU1hcC0+Z2V0KG9yaWdpbik7
Ci0gICAgaWYgKCFuYW1lTWFwKSB7Ci0gICAgICAgIG5hbWVNYXAgPSBuZXcgRGF0YWJhc2VOYW1l
TWFwOwotICAgICAgICBtX29wZW5EYXRhYmFzZU1hcC0+YWRkKG9yaWdpbi5pc29sYXRlZENvcHko
KSwgbmFtZU1hcCk7Ci0gICAgfQorICAgIC8vIFdlIHVzZSBmaW5kIGJlZm9yZSBhZGQgaGVyZSB0
byBhdm9pZCBtYWtpbmcgYW4gaXNvbGF0ZWQgY29weSBvZiB0aGUgb3JpZ2luIGV2ZXJ5IHRpbWUu
CisgICAgYXV0byBpdGVyYXRvciA9IG1fb3BlbkRhdGFiYXNlTWFwLmZpbmQob3JpZ2luKTsKKyAg
ICBpZiAoaXRlcmF0b3IgPT0gbV9vcGVuRGF0YWJhc2VNYXAuZW5kKCkpCisgICAgICAgIGl0ZXJh
dG9yID0gbV9vcGVuRGF0YWJhc2VNYXAuYWRkKG9yaWdpbi5pc29sYXRlZENvcHkoKSwgRGF0YWJh
c2VOYW1lTWFwIHsgfSkuaXRlcmF0b3I7CiAKLSAgICBTdHJpbmcgbmFtZSA9IGRhdGFiYXNlLnN0
cmluZ0lkZW50aWZpZXJJc29sYXRlZENvcHkoKTsKLSAgICBhdXRvKiBkYXRhYmFzZVNldCA9IG5h
bWVNYXAtPmdldChuYW1lKTsKLSAgICBpZiAoIWRhdGFiYXNlU2V0KSB7Ci0gICAgICAgIGRhdGFi
YXNlU2V0ID0gbmV3IERhdGFiYXNlU2V0OwotICAgICAgICBuYW1lTWFwLT5zZXQobmFtZS5pc29s
YXRlZENvcHkoKSwgZGF0YWJhc2VTZXQpOwotICAgIH0KLQotICAgIGRhdGFiYXNlU2V0LT5hZGQo
JmRhdGFiYXNlKTsKKyAgICBpdGVyYXRvci0+dmFsdWUuYWRkKGRhdGFiYXNlLnN0cmluZ0lkZW50
aWZpZXJJc29sYXRlZENvcHkoKSwgRGF0YWJhc2VTZXQgeyB9KS5pdGVyYXRvci0+dmFsdWUuYWRk
KCZkYXRhYmFzZSk7CiAKICAgICBMT0coU3RvcmFnZUFQSSwgIkFkZGVkIG9wZW4gRGF0YWJhc2Ug
JXMgKCVwKVxuIiwgZGF0YWJhc2Uuc3RyaW5nSWRlbnRpZmllcklzb2xhdGVkQ29weSgpLnV0Zjgo
KS5kYXRhKCksICZkYXRhYmFzZSk7CiB9CkBAIC01NzIsMzkgKzU1OSwzMCBAQCB2b2lkIERhdGFi
YXNlVHJhY2tlcjo6cmVtb3ZlT3BlbkRhdGFiYXNlKERhdGFiYXNlJiBkYXRhYmFzZSkKIHsKICAg
ICBMb2NrZXIgb3BlbkRhdGFiYXNlTWFwTG9jayB7IG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQgfTsK
IAotICAgIGlmICghbV9vcGVuRGF0YWJhc2VNYXApIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBEYXRhYmFzZU5hbWVNYXAqIG5h
bWVNYXAgPSBtX29wZW5EYXRhYmFzZU1hcC0+Z2V0KGRhdGFiYXNlLnNlY3VyaXR5T3JpZ2luKCkp
OwotICAgIGlmICghbmFtZU1hcCkgeworICAgIGF1dG8gaXRlcmF0b3IgPSBtX29wZW5EYXRhYmFz
ZU1hcC5maW5kKGRhdGFiYXNlLnNlY3VyaXR5T3JpZ2luKCkpOworICAgIGlmIChpdGVyYXRvciA9
PSBtX29wZW5EYXRhYmFzZU1hcC5lbmQoKSkgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFN0cmluZyBuYW1lID0gZGF0YWJhc2Uu
c3RyaW5nSWRlbnRpZmllcklzb2xhdGVkQ29weSgpOwotICAgIGF1dG8qIGRhdGFiYXNlU2V0ID0g
bmFtZU1hcC0+Z2V0KG5hbWUpOwotICAgIGlmICghZGF0YWJhc2VTZXQpIHsKKyAgICBhdXRvIGlu
bmVySXRlcmF0b3IgPSBpdGVyYXRvci0+dmFsdWUuZmluZChkYXRhYmFzZS5zdHJpbmdJZGVudGlm
aWVySXNvbGF0ZWRDb3B5KCkpOworICAgIGlmIChpbm5lckl0ZXJhdG9yID09IGl0ZXJhdG9yLT52
YWx1ZS5lbmQoKSkgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGRhdGFiYXNlU2V0LT5yZW1vdmUoJmRhdGFiYXNlKTsKKyAgICBp
bm5lckl0ZXJhdG9yLT52YWx1ZS5yZW1vdmUoJmRhdGFiYXNlKTsKIAogICAgIExPRyhTdG9yYWdl
QVBJLCAiUmVtb3ZlZCBvcGVuIERhdGFiYXNlICVzICglcClcbiIsIGRhdGFiYXNlLnN0cmluZ0lk
ZW50aWZpZXJJc29sYXRlZENvcHkoKS51dGY4KCkuZGF0YSgpLCAmZGF0YWJhc2UpOwogCi0gICAg
aWYgKCFkYXRhYmFzZVNldC0+aXNFbXB0eSgpKQorICAgIGlmICghaW5uZXJJdGVyYXRvci0+dmFs
dWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBuYW1lTWFwLT5yZW1vdmUobmFt
ZSk7Ci0gICAgZGVsZXRlIGRhdGFiYXNlU2V0OwotCi0gICAgaWYgKCFuYW1lTWFwLT5pc0VtcHR5
KCkpCisgICAgaXRlcmF0b3ItPnZhbHVlLnJlbW92ZShpbm5lckl0ZXJhdG9yKTsKKyAgICBpZiAo
IWl0ZXJhdG9yLT52YWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fb3Bl
bkRhdGFiYXNlTWFwLT5yZW1vdmUoZGF0YWJhc2Uuc2VjdXJpdHlPcmlnaW4oKSk7Ci0gICAgZGVs
ZXRlIG5hbWVNYXA7CisgICAgbV9vcGVuRGF0YWJhc2VNYXAucmVtb3ZlKGl0ZXJhdG9yKTsKIH0K
IAogUmVmUHRyPE9yaWdpbkxvY2s+IERhdGFiYXNlVHJhY2tlcjo6b3JpZ2luTG9ja0Zvcihjb25z
dCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbikKQEAgLTk1NSwxNCArOTMzLDExIEBAIHZvaWQg
RGF0YWJhc2VUcmFja2VyOjpyZWNvcmRDcmVhdGluZ0RhdGFiYXNlKGNvbnN0IFNlY3VyaXR5T3Jp
Z2luRGF0YSYgb3JpZ2luLCBjCiB7CiAgICAgQVNTRVJUKG1fZGF0YWJhc2VHdWFyZC5pc0hlbGQo
KSk7CiAKLSAgICAvLyBXZSBkb24ndCB1c2UgSGFzaE1hcDo6ZW5zdXJlIGhlcmUgdG8gYXZvaWQg
bWFraW5nIGFuIGlzb2xhdGVkIGNvcHkgb2YgdGhlIG9yaWdpbiBldmVyeSB0aW1lLgotICAgIGF1
dG8qIG5hbWVTZXQgPSBtX2JlaW5nQ3JlYXRlZC5nZXQob3JpZ2luKTsKLSAgICBpZiAoIW5hbWVT
ZXQpIHsKLSAgICAgICAgYXV0byBvd25lZFNldCA9IG1ha2VVbmlxdWU8SGFzaENvdW50ZWRTZXQ8
U3RyaW5nPj4oKTsKLSAgICAgICAgbmFtZVNldCA9IG93bmVkU2V0LmdldCgpOwotICAgICAgICBt
X2JlaW5nQ3JlYXRlZC5hZGQob3JpZ2luLmlzb2xhdGVkQ29weSgpLCBXVEZNb3ZlKG93bmVkU2V0
KSk7Ci0gICAgfQotICAgIG5hbWVTZXQtPmFkZChuYW1lLmlzb2xhdGVkQ29weSgpKTsKKyAgICAv
LyBXZSB1c2UgZmluZCBiZWZvcmUgYWRkIGhlcmUgdG8gYXZvaWQgbWFraW5nIGFuIGlzb2xhdGVk
IGNvcHkgb2YgdGhlIG9yaWdpbiBldmVyeSB0aW1lLgorICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Jl
aW5nQ3JlYXRlZC5maW5kKG9yaWdpbik7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fYmVpbmdDcmVh
dGVkLmVuZCgpKQorICAgICAgICBpdGVyYXRvciA9IG1fYmVpbmdDcmVhdGVkLmFkZChvcmlnaW4u
aXNvbGF0ZWRDb3B5KCksIEhhc2hDb3VudGVkU2V0PFN0cmluZz4geyB9KS5pdGVyYXRvcjsKKyAg
ICBpdGVyYXRvci0+dmFsdWUuYWRkKG5hbWUuaXNvbGF0ZWRDb3B5KCkpOwogfQogCiB2b2lkIERh
dGFiYXNlVHJhY2tlcjo6ZG9uZUNyZWF0aW5nRGF0YWJhc2UoY29uc3QgU2VjdXJpdHlPcmlnaW5E
YXRhJiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSkKQEAgLTk3NSw3ICs5NTAsNyBAQCB2b2lk
IERhdGFiYXNlVHJhY2tlcjo6ZG9uZUNyZWF0aW5nRGF0YWJhc2UoY29uc3QgU2VjdXJpdHlPcmln
aW5EYXRhJiBvcmlnaW4sIGNvbgogICAgIGlmIChpdGVyYXRvciA9PSBtX2JlaW5nQ3JlYXRlZC5l
bmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byYgY291bnRlZFNldCA9ICppdGVyYXRv
ci0+dmFsdWU7CisgICAgYXV0byYgY291bnRlZFNldCA9IGl0ZXJhdG9yLT52YWx1ZTsKICAgICBB
U1NFUlQoY291bnRlZFNldC5jb250YWlucyhuYW1lKSk7CiAKICAgICBpZiAoY291bnRlZFNldC5y
ZW1vdmUobmFtZSkgJiYgY291bnRlZFNldC5pc0VtcHR5KCkpCkBAIC05ODcsNyArOTYyLDcgQEAg
Ym9vbCBEYXRhYmFzZVRyYWNrZXI6OmNyZWF0aW5nRGF0YWJhc2UoY29uc3QgU2VjdXJpdHlPcmln
aW5EYXRhJiBvcmlnaW4sIGNvbnN0IFMKICAgICBBU1NFUlQobV9kYXRhYmFzZUd1YXJkLmlzSGVs
ZCgpKTsKIAogICAgIGF1dG8gaXRlcmF0b3IgPSBtX2JlaW5nQ3JlYXRlZC5maW5kKG9yaWdpbik7
Ci0gICAgcmV0dXJuIGl0ZXJhdG9yICE9IG1fYmVpbmdDcmVhdGVkLmVuZCgpICYmIGl0ZXJhdG9y
LT52YWx1ZS0+Y29udGFpbnMobmFtZSk7CisgICAgcmV0dXJuIGl0ZXJhdG9yICE9IG1fYmVpbmdD
cmVhdGVkLmVuZCgpICYmIGl0ZXJhdG9yLT52YWx1ZS5jb250YWlucyhuYW1lKTsKIH0KIAogYm9v
bCBEYXRhYmFzZVRyYWNrZXI6OmNhbkRlbGV0ZURhdGFiYXNlKGNvbnN0IFNlY3VyaXR5T3JpZ2lu
RGF0YSYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUpCkBAIC0xMDAxLDE1ICs5NzYsMTIgQEAg
dm9pZCBEYXRhYmFzZVRyYWNrZXI6OnJlY29yZERlbGV0aW5nRGF0YWJhc2UoY29uc3QgU2VjdXJp
dHlPcmlnaW5EYXRhJiBvcmlnaW4sIGMKICAgICBBU1NFUlQobV9kYXRhYmFzZUd1YXJkLmlzSGVs
ZCgpKTsKICAgICBBU1NFUlQoY2FuRGVsZXRlRGF0YWJhc2Uob3JpZ2luLCBuYW1lKSk7CiAKLSAg
ICAvLyBXZSBkb24ndCB1c2UgSGFzaE1hcDo6ZW5zdXJlIGhlcmUgdG8gYXZvaWQgbWFraW5nIGFu
IGlzb2xhdGVkIGNvcHkgb2YgdGhlIG9yaWdpbiBldmVyeSB0aW1lLgotICAgIGF1dG8qIG5hbWVT
ZXQgPSBtX2JlaW5nRGVsZXRlZC5nZXQob3JpZ2luKTsKLSAgICBpZiAoIW5hbWVTZXQpIHsKLSAg
ICAgICAgYXV0byBvd25lZFNldCA9IG1ha2VVbmlxdWU8SGFzaFNldDxTdHJpbmc+PigpOwotICAg
ICAgICBuYW1lU2V0ID0gb3duZWRTZXQuZ2V0KCk7Ci0gICAgICAgIG1fYmVpbmdEZWxldGVkLmFk
ZChvcmlnaW4uaXNvbGF0ZWRDb3B5KCksIFdURk1vdmUob3duZWRTZXQpKTsKLSAgICB9Ci0gICAg
QVNTRVJUKCFuYW1lU2V0LT5jb250YWlucyhuYW1lKSk7Ci0gICAgbmFtZVNldC0+YWRkKG5hbWUu
aXNvbGF0ZWRDb3B5KCkpOworICAgIC8vIFdlIHVzZSBmaW5kIGJlZm9yZSBhZGQgaGVyZSB0byBh
dm9pZCBtYWtpbmcgYW4gaXNvbGF0ZWQgY29weSBvZiB0aGUgb3JpZ2luIGV2ZXJ5IHRpbWUuCisg
ICAgYXV0byBpdGVyYXRvciA9IG1fYmVpbmdEZWxldGVkLmZpbmQob3JpZ2luKTsKKyAgICBpZiAo
aXRlcmF0b3IgPT0gbV9iZWluZ0RlbGV0ZWQuZW5kKCkpCisgICAgICAgIGl0ZXJhdG9yID0gbV9i
ZWluZ0RlbGV0ZWQuYWRkKG9yaWdpbi5pc29sYXRlZENvcHkoKSwgSGFzaFNldDxTdHJpbmc+IHsg
fSkuaXRlcmF0b3I7CisgICAgQVNTRVJUKCFpdGVyYXRvci0+dmFsdWUuY29udGFpbnMobmFtZSkp
OworICAgIGl0ZXJhdG9yLT52YWx1ZS5hZGQobmFtZS5pc29sYXRlZENvcHkoKSk7CiB9CiAKIHZv
aWQgRGF0YWJhc2VUcmFja2VyOjpkb25lRGVsZXRpbmdEYXRhYmFzZShjb25zdCBTZWN1cml0eU9y
aWdpbkRhdGEmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lKQpAQCAtMTAyMSwyMyArOTkzLDIz
IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpkb25lRGVsZXRpbmdEYXRhYmFzZShjb25zdCBTZWN1
cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgY29uCiAgICAgaWYgKGl0ZXJhdG9yID09IG1fYmVpbmdE
ZWxldGVkLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQoaXRlcmF0b3ItPnZh
bHVlLT5jb250YWlucyhuYW1lKSk7Ci0gICAgaXRlcmF0b3ItPnZhbHVlLT5yZW1vdmUobmFtZSk7
Ci0gICAgaWYgKGl0ZXJhdG9yLT52YWx1ZS0+aXNFbXB0eSgpKQorICAgIEFTU0VSVChpdGVyYXRv
ci0+dmFsdWUuY29udGFpbnMobmFtZSkpOworICAgIGl0ZXJhdG9yLT52YWx1ZS5yZW1vdmUobmFt
ZSk7CisgICAgaWYgKGl0ZXJhdG9yLT52YWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgIG1fYmVpbmdE
ZWxldGVkLnJlbW92ZShpdGVyYXRvcik7CiB9CiAKIGJvb2wgRGF0YWJhc2VUcmFja2VyOjppc0Rl
bGV0aW5nRGF0YWJhc2UoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4sIGNvbnN0IFN0
cmluZyYgbmFtZSkKIHsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUd1YXJkLmlzSGVsZCgpKTsKLSAg
ICBhdXRvKiBuYW1lU2V0ID0gbV9iZWluZ0RlbGV0ZWQuZ2V0KG9yaWdpbik7Ci0gICAgcmV0dXJu
IG5hbWVTZXQgJiYgbmFtZVNldC0+Y29udGFpbnMobmFtZSk7CisgICAgQVNTRVJUKCFtX2RhdGFi
YXNlR3VhcmQuaXNIZWxkKCkpOworICAgIGF1dG8gaXRlcmF0b3IgPSBtX2JlaW5nRGVsZXRlZC5m
aW5kKG9yaWdpbik7CisgICAgcmV0dXJuIGl0ZXJhdG9yICE9IG1fYmVpbmdEZWxldGVkLmVuZCgp
ICYmIGl0ZXJhdG9yLT52YWx1ZS5jb250YWlucyhuYW1lKTsKIH0KIAogYm9vbCBEYXRhYmFzZVRy
YWNrZXI6OmNhbkRlbGV0ZU9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbikK
IHsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUd1YXJkLmlzSGVsZCgpKTsKLSAgICByZXR1cm4gIShp
c0RlbGV0aW5nT3JpZ2luKG9yaWdpbikgfHwgbV9iZWluZ0NyZWF0ZWQuZ2V0KG9yaWdpbikpOwor
ICAgIEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLmlzSGVsZCgpKTsKKyAgICByZXR1cm4gIShpc0Rl
bGV0aW5nT3JpZ2luKG9yaWdpbikgfHwgbV9iZWluZ0NyZWF0ZWQuY29udGFpbnMob3JpZ2luKSk7
CiB9CiAKIGJvb2wgRGF0YWJhc2VUcmFja2VyOjppc0RlbGV0aW5nT3JpZ2luKGNvbnN0IFNlY3Vy
aXR5T3JpZ2luRGF0YSYgb3JpZ2luKQpAQCAtMTEzMywxMiArMTEwNSwxMCBAQCBib29sIERhdGFi
YXNlVHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2VGaWxlKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYg
b3JpZ2luLCBjb25zdAogICAgIC8vIGR1cmluZyB0aGUgc3luY2hyb25vdXMgRGF0YWJhc2VUaHJl
YWQgY2FsbCBpdCB0cmlnZ2Vycy4KICAgICB7CiAgICAgICAgIExvY2tlciBvcGVuRGF0YWJhc2VN
YXBMb2NrIHsgbV9vcGVuRGF0YWJhc2VNYXBHdWFyZCB9OwotICAgICAgICBpZiAobV9vcGVuRGF0
YWJhc2VNYXApIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBuYW1lTWFwID0gbV9vcGVuRGF0YWJh
c2VNYXAtPmdldChvcmlnaW4pKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8qIGRhdGFiYXNl
U2V0ID0gbmFtZU1hcC0+Z2V0KG5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoYXV0
byYgZGF0YWJhc2UgOiAqZGF0YWJhc2VTZXQpCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWxl
dGVkRGF0YWJhc2VzLmFwcGVuZCgqZGF0YWJhc2UpOwotICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBtX29wZW5EYXRhYmFzZU1hcC5maW5kKG9yaWdpbik7IGl0
ZXJhdG9yICE9IG1fb3BlbkRhdGFiYXNlTWFwLmJlZ2luKCkpIHsKKyAgICAgICAgICAgIGlmIChh
dXRvIGlubmVySXRlcmF0b3IgPSBpdGVyYXRvci0+dmFsdWUuZmluZChuYW1lKTsgaW5uZXJJdGVy
YXRvciAhPSBpdGVyYXRvci0+dmFsdWUuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGF1
dG8mIGRhdGFiYXNlIDogaW5uZXJJdGVyYXRvci0+dmFsdWUpCisgICAgICAgICAgICAgICAgICAg
IGRlbGV0ZWREYXRhYmFzZXMuYXBwZW5kKCpkYXRhYmFzZSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CkBAIC0xMTkxLDQ4ICsxMTYxLDQ2IEBAIHZvaWQgRGF0YWJhc2VUcmFja2Vy
OjpyZW1vdmVEZWxldGVkT3BlbmVkRGF0YWJhc2VzKCkgV1RGX0lHTk9SRVNfVEhSRUFEX1NBRkVU
WV9BCiAgICAgLy8gZHVyaW5nIHRoZSBzeW5jaHJvbm91cyBEYXRhYmFzZVRocmVhZCBjYWxsIGl0
IHRyaWdnZXJzLgogICAgIHsKICAgICAgICAgTG9ja2VyIG9wZW5EYXRhYmFzZU1hcExvY2sgeyBt
X29wZW5EYXRhYmFzZU1hcEd1YXJkIH07Ci0gICAgICAgIGlmIChtX29wZW5EYXRhYmFzZU1hcCkg
ewotICAgICAgICAgICAgZm9yIChhdXRvJiBvcGVuRGF0YWJhc2UgOiAqbV9vcGVuRGF0YWJhc2VN
YXApIHsKLSAgICAgICAgICAgICAgICBhdXRvJiBvcmlnaW4gPSBvcGVuRGF0YWJhc2Uua2V5Owot
ICAgICAgICAgICAgICAgIERhdGFiYXNlTmFtZU1hcCogZGF0YWJhc2VOYW1lTWFwID0gb3BlbkRh
dGFiYXNlLnZhbHVlOwotICAgICAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGRlbGV0ZWREYXRh
YmFzZU5hbWVzRm9yVGhpc09yaWdpbjsKLQotICAgICAgICAgICAgICAgIC8vIExvb3AgdGhyb3Vn
aCBhbGwgb3BlbmVkIGRhdGFiYXNlcyBpbiB0aGlzIG9yaWdpbi4gIEdldCB0aGUgY3VycmVudCBk
YXRhYmFzZSBmaWxlIHBhdGggb2YgZWFjaCBkYXRhYmFzZSBhbmQgc2VlIGlmCi0gICAgICAgICAg
ICAgICAgLy8gaXQgc3RpbGwgbWF0Y2hlcyB0aGUgcGF0aCBzdG9yZWQgaW4gdGhlIG9wZW5lZCBk
YXRhYmFzZSBvYmplY3QuCi0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiBkYXRhYmFzZXMgOiAq
ZGF0YWJhc2VOYW1lTWFwKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBkYXRhYmFzZU5h
bWUgPSBkYXRhYmFzZXMua2V5OwotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGF0YWJhc2VG
aWxlTmFtZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8gc3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcGF0aCBGUk9NIERhdGFiYXNlcyBXSEVSRSBv
cmlnaW49PyBBTkQgbmFtZT0/OyJfcykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRl
bWVudC0+YmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwgZGF0YWJhc2VOYW1lKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9X
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFiYXNlRmlsZU5hbWUgPSBzdGF0ZW1l
bnQtPmNvbHVtblRleHQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgZm91bmREZWxldGVkRGF0YWJhc2UgPSBm
YWxzZTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBkYiA6ICpkYXRhYmFzZXMudmFs
dWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBkb25lIGlmIHRoaXMgZGF0
YWJhc2UgaGFzIGFscmVhZHkgYmVlbiBtYXJrZWQgYXMgZGVsZXRlZC4KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChkYi0+ZGVsZXRlZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyBJZiB0aGlzIGRhdGFiYXNlIGhhcyBiZWVuIGRlbGV0ZWQgb3IgaWYgaXRzIGRhdGFi
YXNlIGZpbGUgbm8gbG9uZ2VyIG1hdGNoZXMgdGhlIGN1cnJlbnQgdmVyc2lvbiwgdGhpcyBkYXRh
YmFzZSBpcyBubyBsb25nZXIgdmFsaWQgYW5kIGl0IHNob3VsZCBiZSBtYXJrZWQgYXMgZGVsZXRl
ZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhYmFzZUZpbGVOYW1lLmlzTnVsbCgp
IHx8IGRhdGFiYXNlRmlsZU5hbWUgIT0gRmlsZVN5c3RlbTo6cGF0aEZpbGVOYW1lKGRiLT5maWxl
TmFtZUlzb2xhdGVkQ29weSgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0
ZWREYXRhYmFzZXMuYXBwZW5kKGRiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Vu
ZERlbGV0ZWREYXRhYmFzZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgIGZvciAoYXV0byYgb3BlbkRhdGFiYXNlIDogbV9vcGVuRGF0YWJhc2VNYXApIHsKKyAgICAg
ICAgICAgIGF1dG8mIG9yaWdpbiA9IG9wZW5EYXRhYmFzZS5rZXk7CisgICAgICAgICAgICBhdXRv
JiBkYXRhYmFzZU5hbWVNYXAgPSBvcGVuRGF0YWJhc2UudmFsdWU7CisgICAgICAgICAgICBWZWN0
b3I8U3RyaW5nPiBkZWxldGVkRGF0YWJhc2VOYW1lc0ZvclRoaXNPcmlnaW47CisKKyAgICAgICAg
ICAgIC8vIExvb3AgdGhyb3VnaCBhbGwgb3BlbmVkIGRhdGFiYXNlcyBpbiB0aGlzIG9yaWdpbi4g
R2V0IHRoZSBjdXJyZW50IGRhdGFiYXNlIGZpbGUgcGF0aCBvZiBlYWNoIGRhdGFiYXNlIGFuZCBz
ZWUgaWYKKyAgICAgICAgICAgIC8vIGl0IHN0aWxsIG1hdGNoZXMgdGhlIHBhdGggc3RvcmVkIGlu
IHRoZSBvcGVuZWQgZGF0YWJhc2Ugb2JqZWN0LgorICAgICAgICAgICAgZm9yIChhdXRvJiBkYXRh
YmFzZXMgOiBkYXRhYmFzZU5hbWVNYXApIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZGF0YWJh
c2VOYW1lID0gZGF0YWJhc2VzLmtleTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZGF0YWJhc2VG
aWxlTmFtZTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBwYXRoIEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdp
bj0/IEFORCBuYW1lPT87Il9zKSkgeworICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQtPmJp
bmRUZXh0KDEsIC5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgICAgICAgICAgICAgICAgIHN0
YXRlbWVudC0+YmluZFRleHQoMiwgZGF0YWJhc2VOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhYmFzZUZpbGVOYW1lID0gc3RhdGVtZW50LT5jb2x1bW5UZXh0KDApOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJvb2wgZm91bmREZWxldGVkRGF0YWJhc2Ug
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGRiIDogZGF0YWJhc2VzLnZhbHVl
KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBkb25lIGlmIHRoaXMgZGF0YWJhc2Ug
aGFzIGFscmVhZHkgYmVlbiBtYXJrZWQgYXMgZGVsZXRlZC4KKyAgICAgICAgICAgICAgICAgICAg
aWYgKGRiLT5kZWxldGVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGRhdGFiYXNlIGhhcyBiZWVuIGRlbGV0ZWQg
b3IgaWYgaXRzIGRhdGFiYXNlIGZpbGUgbm8gbG9uZ2VyIG1hdGNoZXMgdGhlIGN1cnJlbnQgdmVy
c2lvbiwgdGhpcyBkYXRhYmFzZSBpcyBubyBsb25nZXIgdmFsaWQgYW5kIGl0IHNob3VsZCBiZSBt
YXJrZWQgYXMgZGVsZXRlZC4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFiYXNlRmlsZU5h
bWUuaXNOdWxsKCkgfHwgZGF0YWJhc2VGaWxlTmFtZSAhPSBGaWxlU3lzdGVtOjpwYXRoRmlsZU5h
bWUoZGItPmZpbGVOYW1lSXNvbGF0ZWRDb3B5KCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBkZWxldGVkRGF0YWJhc2VzLmFwcGVuZChkYik7CisgICAgICAgICAgICAgICAgICAgICAgICBm
b3VuZERlbGV0ZWREYXRhYmFzZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBkYXRhYmFzZSBu
byBsb25nZXIgZXhpc3RzLCB3ZSBzaG91bGQgcmVtZW1iZXIgdG8gc2VuZCB0aGF0IGluZm9ybWF0
aW9uIHRvIHRoZSBjbGllbnQgbGF0ZXIuCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX2NsaWVu
dCAmJiBmb3VuZERlbGV0ZWREYXRhYmFzZSAmJiBkYXRhYmFzZUZpbGVOYW1lLmlzTnVsbCgpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlZERhdGFiYXNlTmFtZXNGb3JUaGlzT3JpZ2lu
LmFwcGVuZChkYXRhYmFzZU5hbWUpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBpZiAoIWRlbGV0ZWREYXRhYmFzZU5hbWVzRm9yVGhpc09yaWdp
bi5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZWREYXRhYmFzZU5hbWVzLmFw
cGVuZCh7IG9yaWdpbiwgV1RGTW92ZShkZWxldGVkRGF0YWJhc2VOYW1lc0ZvclRoaXNPcmlnaW4p
IH0pOworCisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGRhdGFiYXNlIG5vIGxvbmdlciBleGlz
dHMsIHdlIHNob3VsZCByZW1lbWJlciB0byBzZW5kIHRoYXQgaW5mb3JtYXRpb24gdG8gdGhlIGNs
aWVudCBsYXRlci4KKyAgICAgICAgICAgICAgICBpZiAobV9jbGllbnQgJiYgZm91bmREZWxldGVk
RGF0YWJhc2UgJiYgZGF0YWJhc2VGaWxlTmFtZS5pc051bGwoKSkKKyAgICAgICAgICAgICAgICAg
ICAgZGVsZXRlZERhdGFiYXNlTmFtZXNGb3JUaGlzT3JpZ2luLmFwcGVuZChkYXRhYmFzZU5hbWUp
OwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWRlbGV0ZWREYXRhYmFzZU5hbWVz
Rm9yVGhpc09yaWdpbi5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgZGVsZXRlZERhdGFiYXNl
TmFtZXMuYXBwZW5kKHsgb3JpZ2luLCBXVEZNb3ZlKGRlbGV0ZWREYXRhYmFzZU5hbWVzRm9yVGhp
c09yaWdpbikgfSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBmb3IgKGF1dG8mIGRl
bGV0ZWREYXRhYmFzZSA6IGRlbGV0ZWREYXRhYmFzZXMpCiAgICAgICAgIGRlbGV0ZWREYXRhYmFz
ZS0+bWFya0FzRGVsZXRlZEFuZENsb3NlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5oCmluZGV4IGJkY2Y2ZDA3ZGQ4YTMz
NjVkYzRhZmViOTQzZmNiOGI1YWNlOTRmNmUuLjE4M2FjYjJhNGY3NGY2ZjgzNmQ1MTAzNjgwNzY2
MjIxODViYzE1ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2VUcmFja2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZVRyYWNrZXIuaApAQCAtMTU5LDExICsxNTksMTEgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGRlbGV0ZU9yaWdpbkxvY2tGb3IoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJikgV1RG
X1JFUVVJUkVTX0xPQ0sobV9kYXRhYmFzZUd1YXJkKTsKIAogICAgIHVzaW5nIERhdGFiYXNlU2V0
ID0gSGFzaFNldDxEYXRhYmFzZSo+OwotICAgIHVzaW5nIERhdGFiYXNlTmFtZU1hcCA9IEhhc2hN
YXA8U3RyaW5nLCBEYXRhYmFzZVNldCo+OwotICAgIHVzaW5nIERhdGFiYXNlT3JpZ2luTWFwID0g
SGFzaE1hcDxTZWN1cml0eU9yaWdpbkRhdGEsIERhdGFiYXNlTmFtZU1hcCo+OworICAgIHVzaW5n
IERhdGFiYXNlTmFtZU1hcCA9IEhhc2hNYXA8U3RyaW5nLCBEYXRhYmFzZVNldD47CisgICAgdXNp
bmcgRGF0YWJhc2VPcmlnaW5NYXAgPSBIYXNoTWFwPFNlY3VyaXR5T3JpZ2luRGF0YSwgRGF0YWJh
c2VOYW1lTWFwPjsKIAogICAgIENoZWNrZWRMb2NrIG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQ7Ci0g
ICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8RGF0YWJhc2VPcmlnaW5NYXA+IG1fb3BlbkRhdGFi
YXNlTWFwIFdURl9HVUFSREVEX0JZX0xPQ0sobV9vcGVuRGF0YWJhc2VNYXBHdWFyZCk7CisgICAg
bXV0YWJsZSBEYXRhYmFzZU9yaWdpbk1hcCBtX29wZW5EYXRhYmFzZU1hcCBXVEZfR1VBUkRFRF9C
WV9MT0NLKG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQpOwogCiAgICAgLy8gVGhpcyBsb2NrIHByb3Rl
Y3RzIG1fZGF0YWJhc2UsIG1fb3JpZ2luTG9ja01hcCwgbV9kYXRhYmFzZURpcmVjdG9yeVBhdGgs
IG1fb3JpZ2luc0JlaW5nRGVsZXRlZCwgbV9iZWluZ0NyZWF0ZWQsIGFuZCBtX2JlaW5nRGVsZXRl
ZC4KICAgICBDaGVja2VkTG9jayBtX2RhdGFiYXNlR3VhcmQ7CkBAIC0xNzYsOCArMTc2LDggQEAg
cHJpdmF0ZToKIAogICAgIERhdGFiYXNlTWFuYWdlckNsaWVudCogbV9jbGllbnQgeyBudWxscHRy
IH07CiAKLSAgICBIYXNoTWFwPFNlY3VyaXR5T3JpZ2luRGF0YSwgc3RkOjp1bmlxdWVfcHRyPEhh
c2hDb3VudGVkU2V0PFN0cmluZz4+PiBtX2JlaW5nQ3JlYXRlZCBXVEZfR1VBUkRFRF9CWV9MT0NL
KG1fZGF0YWJhc2VHdWFyZCk7Ci0gICAgSGFzaE1hcDxTZWN1cml0eU9yaWdpbkRhdGEsIHN0ZDo6
dW5pcXVlX3B0cjxIYXNoU2V0PFN0cmluZz4+PiBtX2JlaW5nRGVsZXRlZCBXVEZfR1VBUkRFRF9C
WV9MT0NLKG1fZGF0YWJhc2VHdWFyZCk7CisgICAgSGFzaE1hcDxTZWN1cml0eU9yaWdpbkRhdGEs
IEhhc2hDb3VudGVkU2V0PFN0cmluZz4+IG1fYmVpbmdDcmVhdGVkIFdURl9HVUFSREVEX0JZX0xP
Q0sobV9kYXRhYmFzZUd1YXJkKTsKKyAgICBIYXNoTWFwPFNlY3VyaXR5T3JpZ2luRGF0YSwgSGFz
aFNldDxTdHJpbmc+PiBtX2JlaW5nRGVsZXRlZCBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fZGF0YWJh
c2VHdWFyZCk7CiAgICAgSGFzaFNldDxTZWN1cml0eU9yaWdpbkRhdGE+IG1fb3JpZ2luc0JlaW5n
RGVsZXRlZCBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fZGF0YWJhc2VHdWFyZCk7CiAgICAgYm9vbCBp
c0RlbGV0aW5nRGF0YWJhc2VPck9yaWdpbkZvcihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmLCBj
b25zdCBTdHJpbmcmIG5hbWUpIFdURl9SRVFVSVJFU19MT0NLKG1fZGF0YWJhc2VHdWFyZCk7CiAg
ICAgdm9pZCByZWNvcmRDcmVhdGluZ0RhdGFiYXNlKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYs
IGNvbnN0IFN0cmluZyYgbmFtZSkgV1RGX1JFUVVJUkVTX0xPQ0sobV9kYXRhYmFzZUd1YXJkKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dpbmRvd1Byb3h5LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dpbmRvd1Byb3h5LmNwcAppbmRleCA1YzFkZjNm
YjhkNDQ4YmJiMGM2YTFjYTAzYzZiZjM5N2I4YmM2NmMxLi5iMzEzMGI3NzQ2MWM4NWNmOWU4YjRm
NDJjZDgwZDgzMjE0OTAyZTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9XaW5kb3dQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2luZG93
UHJveHkuY3BwCkBAIC01NCwxNCArNTQsMTMgQEAgc3RhdGljIHZvaWQgY29sbGVjdEdhcmJhZ2VB
ZnRlcldpbmRvd1Byb3h5RGVzdHJ1Y3Rpb24oKQogCiBXaW5kb3dQcm94eTo6V2luZG93UHJveHko
QWJzdHJhY3RGcmFtZSYgZnJhbWUpCiAgICAgOiBtX2ZyYW1lKG1ha2VXZWFrUHRyKGZyYW1lKSkK
LSAgICAsIG1fanNXaW5kb3dQcm94aWVzKG1ha2VVbmlxdWVSZWY8UHJveHlNYXA+KCkpCiB7CiB9
CiAKIFdpbmRvd1Byb3h5Ojp+V2luZG93UHJveHkoKQogewogICAgIEFTU0VSVCghbV9mcmFtZSk7
Ci0gICAgQVNTRVJUKG1fanNXaW5kb3dQcm94aWVzLT5pc0VtcHR5KCkpOworICAgIEFTU0VSVCht
X2pzV2luZG93UHJveGllcy5pc0VtcHR5KCkpOwogfQogCiBBYnN0cmFjdEZyYW1lKiBXaW5kb3dQ
cm94eTo6ZnJhbWUoKSBjb25zdApAQCAtNzYsOSArNzUsOSBAQCB2b2lkIFdpbmRvd1Byb3h5Ojpk
ZXRhY2hGcm9tRnJhbWUoKQogICAgIG1fZnJhbWUgPSBudWxscHRyOwogCiAgICAgLy8gSXQncyBs
aWtlbHkgdGhhdCBkZXN0cm95aW5nIHdpbmRvd1Byb3hpZXMgd2lsbCBjcmVhdGUgYSBsb3Qgb2Yg
Z2FyYmFnZS4KLSAgICBpZiAoIW1fanNXaW5kb3dQcm94aWVzLT5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgd2hpbGUgKCFtX2pzV2luZG93UHJveGllcy0+aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBh
dXRvIGl0ID0gbV9qc1dpbmRvd1Byb3hpZXMtPmJlZ2luKCk7CisgICAgaWYgKCFtX2pzV2luZG93
UHJveGllcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgd2hpbGUgKCFtX2pzV2luZG93UHJveGllcy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGF1dG8gaXQgPSBtX2pzV2luZG93UHJveGllcy5iZWdp
bigpOwogICAgICAgICAgICAgaXQtPnZhbHVlLT53aW5kb3coKS0+c2V0Q29uc29sZUNsaWVudChu
dWxscHRyKTsKICAgICAgICAgICAgIGRlc3Ryb3lKU1dpbmRvd1Byb3h5KCppdC0+a2V5KTsKICAg
ICAgICAgfQpAQCAtODgsOCArODcsOCBAQCB2b2lkIFdpbmRvd1Byb3h5OjpkZXRhY2hGcm9tRnJh
bWUoKQogCiB2b2lkIFdpbmRvd1Byb3h5OjpkZXN0cm95SlNXaW5kb3dQcm94eShET01XcmFwcGVy
V29ybGQmIHdvcmxkKQogewotICAgIEFTU0VSVChtX2pzV2luZG93UHJveGllcy0+Y29udGFpbnMo
JndvcmxkKSk7Ci0gICAgbV9qc1dpbmRvd1Byb3hpZXMtPnJlbW92ZSgmd29ybGQpOworICAgIEFT
U0VSVChtX2pzV2luZG93UHJveGllcy5jb250YWlucygmd29ybGQpKTsKKyAgICBtX2pzV2luZG93
UHJveGllcy5yZW1vdmUoJndvcmxkKTsKICAgICB3b3JsZC5kaWREZXN0cm95V2luZG93UHJveHko
dGhpcyk7CiB9CiAKQEAgLTk3LDIwICs5NiwyMCBAQCBKU1dpbmRvd1Byb3h5JiBXaW5kb3dQcm94
eTo6Y3JlYXRlSlNXaW5kb3dQcm94eShET01XcmFwcGVyV29ybGQmIHdvcmxkKQogewogICAgIEFT
U0VSVChtX2ZyYW1lKTsKIAotICAgIEFTU0VSVCghbV9qc1dpbmRvd1Byb3hpZXMtPmNvbnRhaW5z
KCZ3b3JsZCkpOworICAgIEFTU0VSVCghbV9qc1dpbmRvd1Byb3hpZXMuY29udGFpbnMoJndvcmxk
KSk7CiAgICAgQVNTRVJUKG1fZnJhbWUtPndpbmRvdygpKTsKIAogICAgIFZNJiB2bSA9IHdvcmxk
LnZtKCk7CiAKICAgICBTdHJvbmc8SlNXaW5kb3dQcm94eT4ganNXaW5kb3dQcm94eSh2bSwgJkpT
V2luZG93UHJveHk6OmNyZWF0ZSh2bSwgKm1fZnJhbWUtPndpbmRvdygpLCB3b3JsZCkpOwotICAg
IG1fanNXaW5kb3dQcm94aWVzLT5hZGQoJndvcmxkLCBqc1dpbmRvd1Byb3h5KTsKKyAgICBtX2pz
V2luZG93UHJveGllcy5hZGQoJndvcmxkLCBqc1dpbmRvd1Byb3h5KTsKICAgICB3b3JsZC5kaWRD
cmVhdGVXaW5kb3dQcm94eSh0aGlzKTsKICAgICByZXR1cm4gKmpzV2luZG93UHJveHkuZ2V0KCk7
CiB9CiAKIFZlY3RvcjxKU0M6OlN0cm9uZzxKU1dpbmRvd1Byb3h5Pj4gV2luZG93UHJveHk6Ompz
V2luZG93UHJveGllc0FzVmVjdG9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29weVRvVmVjdG9y
KG1fanNXaW5kb3dQcm94aWVzLT52YWx1ZXMoKSk7CisgICAgcmV0dXJuIGNvcHlUb1ZlY3Rvciht
X2pzV2luZG93UHJveGllcy52YWx1ZXMoKSk7CiB9CiAKIEpTRE9NR2xvYmFsT2JqZWN0KiBXaW5k
b3dQcm94eTo6Z2xvYmFsT2JqZWN0KERPTVdyYXBwZXJXb3JsZCYgd29ybGQpCkBAIC0xMzMsNyAr
MTMyLDcgQEAgSlNXaW5kb3dQcm94eSYgV2luZG93UHJveHk6OmNyZWF0ZUpTV2luZG93UHJveHlX
aXRoSW5pdGlhbGl6ZWRTY3JpcHQoRE9NV3JhcHBlclcKIAogdm9pZCBXaW5kb3dQcm94eTo6Y2xl
YXJKU1dpbmRvd1Byb3hpZXNOb3RNYXRjaGluZ0RPTVdpbmRvdyhBYnN0cmFjdERPTVdpbmRvdyog
bmV3RE9NV2luZG93LCBib29sIGdvaW5nSW50b0JhY2tGb3J3YXJkQ2FjaGUpCiB7Ci0gICAgaWYg
KG1fanNXaW5kb3dQcm94aWVzLT5pc0VtcHR5KCkpCisgICAgaWYgKG1fanNXaW5kb3dQcm94aWVz
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSlNMb2NrSG9sZGVyIGxvY2soY29t
bW9uVk0oKSk7CkBAIC0xNTksNyArMTU4LDcgQEAgdm9pZCBXaW5kb3dQcm94eTo6c2V0RE9NV2lu
ZG93KEFic3RyYWN0RE9NV2luZG93KiBuZXdET01XaW5kb3cpCiB7CiAgICAgQVNTRVJUKG5ld0RP
TVdpbmRvdyk7CiAKLSAgICBpZiAobV9qc1dpbmRvd1Byb3hpZXMtPmlzRW1wdHkoKSkKKyAgICBp
ZiAobV9qc1dpbmRvd1Byb3hpZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBB
U1NFUlQobV9mcmFtZSk7CkBAIC0xOTQsNyArMTkzLDcgQEAgdm9pZCBXaW5kb3dQcm94eTo6c2V0
RE9NV2luZG93KEFic3RyYWN0RE9NV2luZG93KiBuZXdET01XaW5kb3cpCiAKIHZvaWQgV2luZG93
UHJveHk6OmF0dGFjaERlYnVnZ2VyKEpTQzo6RGVidWdnZXIqIGRlYnVnZ2VyKQogewotICAgIGZv
ciAoYXV0byYgd2luZG93UHJveHkgOiBtX2pzV2luZG93UHJveGllcy0+dmFsdWVzKCkpCisgICAg
Zm9yIChhdXRvJiB3aW5kb3dQcm94eSA6IG1fanNXaW5kb3dQcm94aWVzLnZhbHVlcygpKQogICAg
ICAgICB3aW5kb3dQcm94eS0+YXR0YWNoRGVidWdnZXIoZGVidWdnZXIpOwogfQogCkBAIC0yMDUs
MTcgKzIwNCwxNyBAQCBBYnN0cmFjdERPTVdpbmRvdyogV2luZG93UHJveHk6OndpbmRvdygpIGNv
bnN0CiAKIFdpbmRvd1Byb3h5OjpQcm94eU1hcDo6VmFsdWVzQ29uc3RJdGVyYXRvclJhbmdlIFdp
bmRvd1Byb3h5Ojpqc1dpbmRvd1Byb3hpZXMoKSBjb25zdAogewotICAgIHJldHVybiBtX2pzV2lu
ZG93UHJveGllcy0+dmFsdWVzKCk7CisgICAgcmV0dXJuIG1fanNXaW5kb3dQcm94aWVzLnZhbHVl
cygpOwogfQogCiBXaW5kb3dQcm94eTo6UHJveHlNYXAgV2luZG93UHJveHk6OnJlbGVhc2VKU1dp
bmRvd1Byb3hpZXMoKQogewotICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fanNXaW5kb3dQcm94
aWVzLCBtYWtlVW5pcXVlUmVmPFByb3h5TWFwPigpKTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5n
ZShtX2pzV2luZG93UHJveGllcywgeyB9KTsKIH0KIAogdm9pZCBXaW5kb3dQcm94eTo6c2V0SlNX
aW5kb3dQcm94aWVzKFByb3h5TWFwJiYgd2luZG93UHJveGllcykKIHsKLSAgICBtX2pzV2luZG93
UHJveGllcyA9IG1ha2VVbmlxdWVSZWY8UHJveHlNYXA+KFdURk1vdmUod2luZG93UHJveGllcykp
OworICAgIG1fanNXaW5kb3dQcm94aWVzID0gV1RGTW92ZSh3aW5kb3dQcm94aWVzKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvV2luZG93UHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dpbmRvd1By
b3h5LmgKaW5kZXggMTE4MTc3YzVlNDQ3M2Y3Y2NmNzZiMTVhMGI1NWQ0YTRkMTcyMWQ2Zi4uZGIw
MzQ3NDQyZWZkNTlkMzQxOGE5OGI4N2ZhMGJhMmRjNzcyM2JlYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvV2luZG93UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9XaW5kb3dQcm94eS5oCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvU3Ryb25nLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KICNpbmNsdWRl
IDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTc0LDggKzczLDggQEAgcHVi
bGljOgogCiAgICAgSlNXaW5kb3dQcm94eSogZXhpc3RpbmdKU1dpbmRvd1Byb3h5KERPTVdyYXBw
ZXJXb3JsZCYgd29ybGQpIGNvbnN0CiAgICAgewotICAgICAgICBhdXRvIGl0ID0gbV9qc1dpbmRv
d1Byb3hpZXMtPmZpbmQoJndvcmxkKTsKLSAgICAgICAgcmV0dXJuIChpdCAhPSBtX2pzV2luZG93
UHJveGllcy0+ZW5kKCkpID8gaXQtPnZhbHVlLmdldCgpIDogbnVsbHB0cjsKKyAgICAgICAgYXV0
byBpdCA9IG1fanNXaW5kb3dQcm94aWVzLmZpbmQoJndvcmxkKTsKKyAgICAgICAgcmV0dXJuIGl0
ICE9IG1fanNXaW5kb3dQcm94aWVzLmVuZCgpID8gaXQtPnZhbHVlLmdldCgpIDogbnVsbHB0cjsK
ICAgICB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KERPTVdyYXBwZXJXb3JsZCYpOwpAQCAtOTYsNyArOTUsNyBAQCBwcml2YXRlOgogICAgIFdF
QkNPUkVfRVhQT1JUIEpTV2luZG93UHJveHkmIGNyZWF0ZUpTV2luZG93UHJveHlXaXRoSW5pdGlh
bGl6ZWRTY3JpcHQoRE9NV3JhcHBlcldvcmxkJik7CiAKICAgICBXZWFrUHRyPEFic3RyYWN0RnJh
bWU+IG1fZnJhbWU7Ci0gICAgVW5pcXVlUmVmPFByb3h5TWFwPiBtX2pzV2luZG93UHJveGllczsK
KyAgICBQcm94eU1hcCBtX2pzV2luZG93UHJveGllczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbi5jcHAKaW5kZXggYmFjNTI5ODQxMDJlYjAwNDVkYzY1MzVhZTY4ZTY4YjliNDY2OGQwMy4u
ZWMzNWM0MDIyZjUzZTgyNzNmMzU4M2QxYzY2MzBkODQyMDU3Yzg4NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKQEAgLTE3NTQs
MTMgKzE3NTQsMTMgQEAgc3RhdGljIFJlZjxDU1NWYWx1ZUxpc3Q+IGNvbnRlbnRUb0NTU1ZhbHVl
KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIAogc3RhdGljIFJlZjxDU1NWYWx1ZT4gY291bnRl
clRvQ1NTVmFsdWUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5SUQpCiB7Ci0gICAgYXV0byogbWFwID0gc3R5bGUuY291bnRlckRpcmVjdGl2ZXMoKTsKLSAg
ICBpZiAoIW1hcCkKKyAgICBhdXRvJiBtYXAgPSBzdHlsZS5jb3VudGVyRGlyZWN0aXZlcygpOwor
ICAgIGlmIChtYXAuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKIAogICAgIGF1dG8m
IGNzc1ZhbHVlUG9vbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCk7CiAgICAgYXV0byBsaXN0
ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwotICAgIGZvciAoYXV0byYg
a2V5VmFsdWUgOiAqbWFwKSB7CisgICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6IG1hcCkgewogICAg
ICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKGtleVZhbHVlLmtleSwg
Q1NTVW5pdFR5cGU6OkNTU19TVFJJTkcpKTsKICAgICAgICAgZG91YmxlIG51bWJlciA9IChwcm9w
ZXJ0eUlEID09IENTU1Byb3BlcnR5Q291bnRlckluY3JlbWVudCA/IGtleVZhbHVlLnZhbHVlLmlu
Y3JlbWVudFZhbHVlIDoga2V5VmFsdWUudmFsdWUucmVzZXRWYWx1ZSkudmFsdWVPcigwKTsKICAg
ICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShudW1iZXIsIENTU1Vu
aXRUeXBlOjpDU1NfTlVNQkVSKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUHJv
cGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9w
ZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IDA2YzEzNDg5NjAxYTgyYjI3ZTJl
YjQ3ZTM0MWM3YjQzZWJlN2IyZTcuLjdhZmRkZDk4MWE3ODRiNDY3Y2VjMjhjYzI3ODVjYTZjOTc1
ZTQ4OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxl
RGVjbGFyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0
eWxlRGVjbGFyYXRpb24uY3BwCkBAIC0zMzMsMTAgKzMzMyw3IEBAIFJlZlB0cjxEZXByZWNhdGVk
Q1NTT01WYWx1ZT4gUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjp3cmFwRm9yRGVwcmVj
YXRlZENTCiAKICAgICAvLyBUaGUgbWFwIGlzIGhlcmUgdG8gbWFpbnRhaW4gdGhlIG9iamVjdCBp
ZGVudGl0eSBvZiB0aGUgQ1NTVmFsdWVzIG92ZXIgbXVsdGlwbGUgaW52b2NhdGlvbnMuCiAgICAg
Ly8gRklYTUU6IEl0IGlzIGxpa2VseSB0aGF0IHRoZSBpZGVudGl0eSBpcyBub3QgaW1wb3J0YW50
IGZvciB3ZWIgY29tcGF0aWJpbGl0eSBhbmQgdGhpcyBjb2RlIHNob3VsZCBiZSByZW1vdmVkLgot
ICAgIGlmICghbV9jc3NvbVZhbHVlV3JhcHBlcnMpCi0gICAgICAgIG1fY3Nzb21WYWx1ZVdyYXBw
ZXJzID0gbWFrZVVuaXF1ZTxIYXNoTWFwPENTU1ZhbHVlKiwgV2Vha1B0cjxEZXByZWNhdGVkQ1NT
T01WYWx1ZT4+PigpOwotICAgIAotICAgIGF1dG8mIGNsb25lZFZhbHVlID0gbV9jc3NvbVZhbHVl
V3JhcHBlcnMtPmFkZChpbnRlcm5hbFZhbHVlLCBXZWFrUHRyPERlcHJlY2F0ZWRDU1NPTVZhbHVl
PigpKS5pdGVyYXRvci0+dmFsdWU7CisgICAgYXV0byYgY2xvbmVkVmFsdWUgPSBtX2Nzc29tVmFs
dWVXcmFwcGVycy5hZGQoaW50ZXJuYWxWYWx1ZSwgV2Vha1B0cjxEZXByZWNhdGVkQ1NTT01WYWx1
ZT4oKSkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmIChjbG9uZWRWYWx1ZSkKICAgICAgICAgcmV0
dXJuIGNsb25lZFZhbHVlLmdldCgpOwogCkBAIC00MDAsNyArMzk3LDcgQEAgdm9pZCBTdHlsZVJ1
bGVDU1NTdHlsZURlY2xhcmF0aW9uOjpkaWRNdXRhdGUoTXV0YXRpb25UeXBlIHR5cGUpCiAgICAg
QVNTRVJUKG1fcGFyZW50UnVsZS0+cGFyZW50U3R5bGVTaGVldCgpKTsKIAogICAgIGlmICh0eXBl
ID09IFByb3BlcnR5Q2hhbmdlZCkKLSAgICAgICAgbV9jc3NvbVZhbHVlV3JhcHBlcnMgPSBudWxs
cHRyOworICAgICAgICBtX2Nzc29tVmFsdWVXcmFwcGVycy5jbGVhcigpOwogCiAgICAgLy8gU3R5
bGUgc2hlZXQgbXV0YXRpb24gbmVlZHMgdG8gYmUgc2lnbmFsZWQgZXZlbiBpZiB0aGUgY2hhbmdl
IGZhaWxlZC4gd2lsbE11dGF0ZSovZGlkTXV0YXRlKiBtdXN0IHBhaXIuCiAgICAgbV9wYXJlbnRS
dWxlLT5wYXJlbnRTdHlsZVNoZWV0KCktPmRpZE11dGF0ZVJ1bGVGcm9tQ1NTU3R5bGVEZWNsYXJh
dGlvbigpOwpAQCAtNDQzLDcgKzQ0MCw3IEBAIHZvaWQgSW5saW5lQ1NTU3R5bGVEZWNsYXJhdGlv
bjo6ZGlkTXV0YXRlKE11dGF0aW9uVHlwZSB0eXBlKQogICAgIGlmICh0eXBlID09IE5vQ2hhbmdl
cykKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jc3NvbVZhbHVlV3JhcHBlcnMgPSBudWxscHRy
OworICAgIG1fY3Nzb21WYWx1ZVdyYXBwZXJzLmNsZWFyKCk7CiAKICAgICBpZiAoIW1fcGFyZW50
RWxlbWVudCkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1By
b3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5oCmluZGV4IDYyYThmOTg5YThmYTJjMWVjMGNk
MmZlZjE3ODJiMmIxZTM3M2RhN2QuLjU3OTU5YTMyNzkwNDljMmJlNzIwNzI0ZWUzMzExNmFiZTAy
Mzc2NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxl
RGVjbGFyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVydHlTZXRDU1NTdHls
ZURlY2xhcmF0aW9uLmgKQEAgLTU5LDcgKzU5LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwg
Q1NTUGFyc2VyQ29udGV4dCBjc3NQYXJzZXJDb250ZXh0KCkgY29uc3Q7CiAKICAgICBNdXRhYmxl
U3R5bGVQcm9wZXJ0aWVzKiBtX3Byb3BlcnR5U2V0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxIYXNo
TWFwPENTU1ZhbHVlKiwgV2Vha1B0cjxEZXByZWNhdGVkQ1NTT01WYWx1ZT4+PiBtX2Nzc29tVmFs
dWVXcmFwcGVyczsKKyAgICBIYXNoTWFwPENTU1ZhbHVlKiwgV2Vha1B0cjxEZXByZWNhdGVkQ1NT
T01WYWx1ZT4+IG1fY3Nzb21WYWx1ZVdyYXBwZXJzOwogCiBwcml2YXRlOgogICAgIHZvaWQgcmVm
KCkgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCAwNDdiZWRiZDM1NDM3MzQ4
OTlkMmI4OWMwZWQ5YzBkMmJhNTYwODcwLi4yNjYxMDI2NzQ3YzU1ZDc1M2MwM2QxYzI1NjJmY2Fl
MTYzNGIzMTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTg4Nyw3ICs4ODcsNyBAQCBF
bGVtZW50KiBEb2N1bWVudDo6ZWxlbWVudEZvckFjY2Vzc0tleShjb25zdCBTdHJpbmcmIGtleSkK
IAogdm9pZCBEb2N1bWVudDo6YnVpbGRBY2Nlc3NLZXlDYWNoZSgpCiB7Ci0gICAgbV9hY2Nlc3NL
ZXlDYWNoZSA9IG1ha2VVbmlxdWU8SGFzaE1hcDxTdHJpbmcsIEVsZW1lbnQqLCBBU0NJSUNhc2VJ
bnNlbnNpdGl2ZUhhc2g+PihbdGhpc10geworICAgIG1fYWNjZXNzS2V5Q2FjaGUgPSBbdGhpc10g
ewogICAgICAgICBIYXNoTWFwPFN0cmluZywgRWxlbWVudCosIEFTQ0lJQ2FzZUluc2Vuc2l0aXZl
SGFzaD4gbWFwOwogICAgICAgICBmb3IgKGF1dG8mIG5vZGUgOiBjb21wb3NlZFRyZWVEZXNjZW5k
YW50cygqdGhpcykpIHsKICAgICAgICAgICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpCkBAIC04
OTksMTIgKzg5OSwxMiBAQCB2b2lkIERvY3VtZW50OjpidWlsZEFjY2Vzc0tleUNhY2hlKCkKICAg
ICAgICAgICAgIG1hcC5hZGQoa2V5LCAmZWxlbWVudCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuIG1hcDsKLSAgICB9KCkpOworICAgIH0oKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6aW52YWxp
ZGF0ZUFjY2Vzc0tleUNhY2hlU2xvd0Nhc2UoKQogewotICAgIG1fYWNjZXNzS2V5Q2FjaGUgPSBu
dWxscHRyOworICAgIG1fYWNjZXNzS2V5Q2FjaGUgPSBXVEY6Om51bGxvcHQ7CiB9CiAKIEV4Y2Vw
dGlvbk9yPFNlbGVjdG9yUXVlcnkmPiBEb2N1bWVudDo6c2VsZWN0b3JRdWVyeUZvclN0cmluZyhj
b25zdCBTdHJpbmcmIHNlbGVjdG9yU3RyaW5nKQpAQCAtMjYzMSwxMSArMjYzMSwxMSBAQCB2b2lk
IERvY3VtZW50Ojp3aWxsQmVSZW1vdmVkRnJvbUZyYW1lKCkKICAgICBjb21tb25UZWFyZG93bigp
OwogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICBpZiAobV90b3VjaEV2ZW50VGFyZ2V0
cyAmJiBtX3RvdWNoRXZlbnRUYXJnZXRzLT5zaXplKCkgJiYgcGFyZW50RG9jdW1lbnQoKSkKKyAg
ICBpZiAoIW1fdG91Y2hFdmVudFRhcmdldHMuaXNFbXB0eSgpICYmIHBhcmVudERvY3VtZW50KCkp
CiAgICAgICAgIHBhcmVudERvY3VtZW50KCktPmRpZFJlbW92ZUV2ZW50VGFyZ2V0Tm9kZSgqdGhp
cyk7CiAjZW5kaWYKIAotICAgIGlmIChtX3doZWVsRXZlbnRUYXJnZXRzICYmIG1fd2hlZWxFdmVu
dFRhcmdldHMtPnNpemUoKSAmJiBwYXJlbnREb2N1bWVudCgpKQorICAgIGlmICghbV93aGVlbEV2
ZW50VGFyZ2V0cy5pc0VtcHR5KCkgJiYgcGFyZW50RG9jdW1lbnQoKSkKICAgICAgICAgcGFyZW50
RG9jdW1lbnQoKS0+ZGlkUmVtb3ZlRXZlbnRUYXJnZXROb2RlKCp0aGlzKTsKIAogICAgIGlmICht
X21lZGlhUXVlcnlNYXRjaGVyKQpAQCAtMjY4Nyw5ICsyNjg3LDkgQEAgdm9pZCBEb2N1bWVudDo6
cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKQogICAgICAgICBub2RlLT5yZW1vdmVBbGxFdmVudExp
c3RlbmVycygpOwogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICBtX3RvdWNoRXZlbnRU
YXJnZXRzID0gbnVsbHB0cjsKKyAgICBtX3RvdWNoRXZlbnRUYXJnZXRzLmNsZWFyKCk7CiAjZW5k
aWYKLSAgICBtX3doZWVsRXZlbnRUYXJnZXRzID0gbnVsbHB0cjsKKyAgICBtX3doZWVsRXZlbnRU
YXJnZXRzLmNsZWFyKCk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnN1c3BlbmREZXZpY2VNb3Rpb25B
bmRPcmllbnRhdGlvblVwZGF0ZXMoKQpAQCAtNjgxOCwxNiArNjgxOCwxMyBAQCB2b2lkIERvY3Vt
ZW50Ojp3aGVlbEV2ZW50SGFuZGxlcnNDaGFuZ2VkKE5vZGUqIG5vZGUpCiAgICAgVU5VU0VEX1BB
UkFNKG5vZGUpOwogI2VuZGlmCiAKLSAgICBib29sIGhhdmVIYW5kbGVycyA9IG1fd2hlZWxFdmVu
dFRhcmdldHMgJiYgIW1fd2hlZWxFdmVudFRhcmdldHMtPmlzRW1wdHkoKTsKKyAgICBib29sIGhh
dmVIYW5kbGVycyA9ICFtX3doZWVsRXZlbnRUYXJnZXRzLmlzRW1wdHkoKTsKICAgICBwYWdlLT5j
aHJvbWUoKS5jbGllbnQoKS53aGVlbEV2ZW50SGFuZGxlcnNDaGFuZ2VkKGhhdmVIYW5kbGVycyk7
CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OmRpZEFkZFdoZWVsRXZlbnRIYW5kbGVyKE5vZGUmIG5vZGUp
CiB7Ci0gICAgaWYgKCFtX3doZWVsRXZlbnRUYXJnZXRzKQotICAgICAgICBtX3doZWVsRXZlbnRU
YXJnZXRzID0gbWFrZVVuaXF1ZTxFdmVudFRhcmdldFNldD4oKTsKLQotICAgIG1fd2hlZWxFdmVu
dFRhcmdldHMtPmFkZCgmbm9kZSk7CisgICAgbV93aGVlbEV2ZW50VGFyZ2V0cy5hZGQoJm5vZGUp
OwogICAgIHdoZWVsRXZlbnRIYW5kbGVyc0NoYW5nZWQoJm5vZGUpOwogCiAgICAgaWYgKEZyYW1l
KiBmcmFtZSA9IHRoaXMtPmZyYW1lKCkpCkBAIC02ODU2LDQyICs2ODUzLDI3IEBAIHN0YXRpYyBi
b29sIHJlbW92ZUhhbmRsZXJGcm9tU2V0KEV2ZW50VGFyZ2V0U2V0JiBoYW5kbGVyU2V0LCBOb2Rl
JiBub2RlLCBFdmVudEhhCiAKIHZvaWQgRG9jdW1lbnQ6OmRpZFJlbW92ZVdoZWVsRXZlbnRIYW5k
bGVyKE5vZGUmIG5vZGUsIEV2ZW50SGFuZGxlclJlbW92YWwgcmVtb3ZhbCkKIHsKLSAgICBpZiAo
IW1fd2hlZWxFdmVudFRhcmdldHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVtb3Zl
SGFuZGxlckZyb21TZXQoKm1fd2hlZWxFdmVudFRhcmdldHMsIG5vZGUsIHJlbW92YWwpKQorICAg
IGlmICghcmVtb3ZlSGFuZGxlckZyb21TZXQobV93aGVlbEV2ZW50VGFyZ2V0cywgbm9kZSwgcmVt
b3ZhbCkpCiAgICAgICAgIHJldHVybjsKLQogICAgIHdoZWVsRXZlbnRIYW5kbGVyc0NoYW5nZWQo
Jm5vZGUpOwotCiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCkpCiAgICAgICAg
IERlYnVnUGFnZU92ZXJsYXlzOjpkaWRDaGFuZ2VFdmVudEhhbmRsZXJzKCpmcmFtZSk7CiB9CiAK
IHVuc2lnbmVkIERvY3VtZW50Ojp3aGVlbEV2ZW50SGFuZGxlckNvdW50KCkgY29uc3QKIHsKLSAg
ICBpZiAoIW1fd2hlZWxFdmVudFRhcmdldHMpCi0gICAgICAgIHJldHVybiAwOwotCiAgICAgdW5z
aWduZWQgY291bnQgPSAwOwotICAgIGZvciAoYXV0byYgaGFuZGxlciA6ICptX3doZWVsRXZlbnRU
YXJnZXRzKQorICAgIGZvciAoYXV0byYgaGFuZGxlciA6IG1fd2hlZWxFdmVudFRhcmdldHMpCiAg
ICAgICAgIGNvdW50ICs9IGhhbmRsZXIudmFsdWU7Ci0KICAgICByZXR1cm4gY291bnQ7CiB9CiAK
IHZvaWQgRG9jdW1lbnQ6OmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKE5vZGUmIGhhbmRsZXIpCiB7
CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICBpZiAoIW1fdG91Y2hFdmVudFRhcmdldHMp
Ci0gICAgICAgIG1fdG91Y2hFdmVudFRhcmdldHMgPSBtYWtlVW5pcXVlPEV2ZW50VGFyZ2V0U2V0
PigpOwotCi0gICAgbV90b3VjaEV2ZW50VGFyZ2V0cy0+YWRkKCZoYW5kbGVyKTsKLQotICAgIGlm
IChEb2N1bWVudCogcGFyZW50ID0gcGFyZW50RG9jdW1lbnQoKSkgeworICAgIG1fdG91Y2hFdmVu
dFRhcmdldHMuYWRkKCZoYW5kbGVyKTsKKyAgICBpZiAoYXV0byBwYXJlbnQgPSBwYXJlbnREb2N1
bWVudCgpKQogICAgICAgICBwYXJlbnQtPmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKCp0aGlzKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGhhbmRsZXIp
OwogI2VuZGlmCkBAIC02OTAwLDEyICs2ODgyLDkgQEAgdm9pZCBEb2N1bWVudDo6ZGlkQWRkVG91
Y2hFdmVudEhhbmRsZXIoTm9kZSYgaGFuZGxlcikKIHZvaWQgRG9jdW1lbnQ6OmRpZFJlbW92ZVRv
dWNoRXZlbnRIYW5kbGVyKE5vZGUmIGhhbmRsZXIsIEV2ZW50SGFuZGxlclJlbW92YWwgcmVtb3Zh
bCkKIHsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIGlmICghbV90b3VjaEV2ZW50VGFy
Z2V0cykKKyAgICBpZiAoIXJlbW92ZUhhbmRsZXJGcm9tU2V0KG1fdG91Y2hFdmVudFRhcmdldHMs
IGhhbmRsZXIsIHJlbW92YWwpKQogICAgICAgICByZXR1cm47Ci0KLSAgICByZW1vdmVIYW5kbGVy
RnJvbVNldCgqbV90b3VjaEV2ZW50VGFyZ2V0cywgaGFuZGxlciwgcmVtb3ZhbCk7Ci0KLSAgICBp
ZiAoRG9jdW1lbnQqIHBhcmVudCA9IHBhcmVudERvY3VtZW50KCkpCisgICAgaWYgKGF1dG8gcGFy
ZW50ID0gcGFyZW50RG9jdW1lbnQoKSkKICAgICAgICAgcGFyZW50LT5kaWRSZW1vdmVUb3VjaEV2
ZW50SGFuZGxlcigqdGhpcyk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShoYW5kbGVyKTsKQEAg
LTY5MTYsMzAgKzY4OTUsMjEgQEAgdm9pZCBEb2N1bWVudDo6ZGlkUmVtb3ZlVG91Y2hFdmVudEhh
bmRsZXIoTm9kZSYgaGFuZGxlciwgRXZlbnRIYW5kbGVyUmVtb3ZhbCByZW0KIHZvaWQgRG9jdW1l
bnQ6OmRpZFJlbW92ZUV2ZW50VGFyZ2V0Tm9kZShOb2RlJiBoYW5kbGVyKQogewogI2lmIEVOQUJM
RShUT1VDSF9FVkVOVFMpCi0gICAgaWYgKG1fdG91Y2hFdmVudFRhcmdldHMpIHsKLSAgICAgICAg
bV90b3VjaEV2ZW50VGFyZ2V0cy0+cmVtb3ZlQWxsKCZoYW5kbGVyKTsKLSAgICAgICAgaWYgKCgm
aGFuZGxlciA9PSB0aGlzIHx8IG1fdG91Y2hFdmVudFRhcmdldHMtPmlzRW1wdHkoKSkgJiYgcGFy
ZW50RG9jdW1lbnQoKSkKLSAgICAgICAgICAgIHBhcmVudERvY3VtZW50KCktPmRpZFJlbW92ZUV2
ZW50VGFyZ2V0Tm9kZSgqdGhpcyk7Ci0gICAgfQorICAgIG1fdG91Y2hFdmVudFRhcmdldHMucmVt
b3ZlQWxsKCZoYW5kbGVyKTsKKyAgICBpZiAoKCZoYW5kbGVyID09IHRoaXMgfHwgbV90b3VjaEV2
ZW50VGFyZ2V0cy5pc0VtcHR5KCkpICYmIHBhcmVudERvY3VtZW50KCkpCisgICAgICAgIHBhcmVu
dERvY3VtZW50KCktPmRpZFJlbW92ZUV2ZW50VGFyZ2V0Tm9kZSgqdGhpcyk7CiAjZW5kaWYKLQot
ICAgIGlmIChtX3doZWVsRXZlbnRUYXJnZXRzKSB7Ci0gICAgICAgIG1fd2hlZWxFdmVudFRhcmdl
dHMtPnJlbW92ZUFsbCgmaGFuZGxlcik7Ci0gICAgICAgIGlmICgoJmhhbmRsZXIgPT0gdGhpcyB8
fCBtX3doZWVsRXZlbnRUYXJnZXRzLT5pc0VtcHR5KCkpICYmIHBhcmVudERvY3VtZW50KCkpCi0g
ICAgICAgICAgICBwYXJlbnREb2N1bWVudCgpLT5kaWRSZW1vdmVFdmVudFRhcmdldE5vZGUoKnRo
aXMpOwotICAgIH0KKyAgICBtX3doZWVsRXZlbnRUYXJnZXRzLnJlbW92ZUFsbCgmaGFuZGxlcik7
CisgICAgaWYgKCgmaGFuZGxlciA9PSB0aGlzIHx8IG1fd2hlZWxFdmVudFRhcmdldHMuaXNFbXB0
eSgpKSAmJiBwYXJlbnREb2N1bWVudCgpKQorICAgICAgICBwYXJlbnREb2N1bWVudCgpLT5kaWRS
ZW1vdmVFdmVudFRhcmdldE5vZGUoKnRoaXMpOwogfQogCiB1bnNpZ25lZCBEb2N1bWVudDo6dG91
Y2hFdmVudEhhbmRsZXJDb3VudCgpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykK
LSAgICBpZiAoIW1fdG91Y2hFdmVudFRhcmdldHMpCi0gICAgICAgIHJldHVybiAwOwotCiAgICAg
dW5zaWduZWQgY291bnQgPSAwOwotICAgIGZvciAoYXV0byYgaGFuZGxlciA6ICptX3RvdWNoRXZl
bnRUYXJnZXRzKQorICAgIGZvciAoYXV0byYgaGFuZGxlciA6IG1fdG91Y2hFdmVudFRhcmdldHMp
CiAgICAgICAgIGNvdW50ICs9IGhhbmRsZXIudmFsdWU7Ci0KICAgICByZXR1cm4gY291bnQ7CiAj
ZWxzZQogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCA4NGZkMjFhNjZkNzhh
NGY0Mjg2N2YxZjRkMDU0NGI0NjY5ODUzMjA3Li5jY2VhNGExOTEwZDU5NmU1YjE4ZTU0NmRlMjlk
MzhhZDlkNmYwYTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtMTI0Myw4ICsxMjQzLDggQEAg
cHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVkIHN0eWxlUmVjYWxjQ291bnQoKSBj
b25zdDsKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgYm9vbCBoYXNUb3VjaEV2ZW50
SGFuZGxlcnMoKSBjb25zdCB7IHJldHVybiBtX3RvdWNoRXZlbnRUYXJnZXRzLmdldCgpID8gbV90
b3VjaEV2ZW50VGFyZ2V0cy0+c2l6ZSgpIDogZmFsc2U7IH0KLSAgICBib29sIHRvdWNoRXZlbnRU
YXJnZXRzQ29udGFpbihOb2RlJiBub2RlKSBjb25zdCB7IHJldHVybiBtX3RvdWNoRXZlbnRUYXJn
ZXRzID8gbV90b3VjaEV2ZW50VGFyZ2V0cy0+Y29udGFpbnMoJm5vZGUpIDogZmFsc2U7IH0KKyAg
ICBib29sIGhhc1RvdWNoRXZlbnRIYW5kbGVycygpIGNvbnN0IHsgcmV0dXJuICFtX3RvdWNoRXZl
bnRUYXJnZXRzLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgdG91Y2hFdmVudFRhcmdldHNDb250YWlu
KE5vZGUmIG5vZGUpIGNvbnN0IHsgcmV0dXJuIG1fdG91Y2hFdmVudFRhcmdldHMuY29udGFpbnMo
Jm5vZGUpOyB9CiAjZWxzZQogICAgIGJvb2wgaGFzVG91Y2hFdmVudEhhbmRsZXJzKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICAgICBib29sIHRvdWNoRXZlbnRUYXJnZXRzQ29udGFpbihOb2Rl
JikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTEyNjksMTQgKzEyNjksMTQgQEAgcHVibGlj
OgogICAgIGNvbnN0IEV2ZW50VGFyZ2V0U2V0KiB0b3VjaEV2ZW50VGFyZ2V0cygpIGNvbnN0CiAg
ICAgewogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgICAgIHJldHVybiBtX3RvdWNoRXZl
bnRUYXJnZXRzLmdldCgpOworICAgICAgICByZXR1cm4gJm1fdG91Y2hFdmVudFRhcmdldHM7CiAj
ZWxzZQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICNlbmRpZgogICAgIH0KIAotICAgIGJvb2wg
aGFzV2hlZWxFdmVudEhhbmRsZXJzKCkgY29uc3QgeyByZXR1cm4gbV93aGVlbEV2ZW50VGFyZ2V0
cy5nZXQoKSA/IG1fd2hlZWxFdmVudFRhcmdldHMtPnNpemUoKSA6IGZhbHNlOyB9Ci0gICAgY29u
c3QgRXZlbnRUYXJnZXRTZXQqIHdoZWVsRXZlbnRUYXJnZXRzKCkgY29uc3QgeyByZXR1cm4gbV93
aGVlbEV2ZW50VGFyZ2V0cy5nZXQoKTsgfQorICAgIGJvb2wgaGFzV2hlZWxFdmVudEhhbmRsZXJz
KCkgY29uc3QgeyByZXR1cm4gIW1fd2hlZWxFdmVudFRhcmdldHMuaXNFbXB0eSgpOyB9CisgICAg
Y29uc3QgRXZlbnRUYXJnZXRTZXQqIHdoZWVsRXZlbnRUYXJnZXRzKCkgY29uc3QgeyByZXR1cm4g
Jm1fd2hlZWxFdmVudFRhcmdldHM7IH0KIAogICAgIHVzaW5nIFJlZ2lvbkZpeGVkUGFpciA9IHN0
ZDo6cGFpcjxSZWdpb24sIGJvb2w+OwogICAgIFJlZ2lvbkZpeGVkUGFpciBhYnNvbHV0ZUV2ZW50
UmVnaW9uRm9yTm9kZShOb2RlJik7CkBAIC0xODgyLDcgKzE4ODIsNyBAQCBwcml2YXRlOgogCiAg
ICAgSGFzaFNldDxWaXNpYmlsaXR5Q2hhbmdlQ2xpZW50Kj4gbV92aXNpYmlsaXR5U3RhdGVDYWxs
YmFja0NsaWVudHM7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SGFzaE1hcDxTdHJpbmcsIEVsZW1l
bnQqLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+PiBtX2FjY2Vzc0tleUNhY2hlOworICAgIE9w
dGlvbmFsPEhhc2hNYXA8U3RyaW5nLCBFbGVtZW50KiwgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNo
Pj4gbV9hY2Nlc3NLZXlDYWNoZTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb25zdGFudFByb3Bl
cnR5TWFwPiBtX2NvbnN0YW50UHJvcGVydHlNYXA7CiAKQEAgLTE5MjMsNyArMTkyMyw3IEBAIHBy
aXZhdGU6CiAgICAgUmVmUHRyPE1lZGlhUXVlcnlNYXRjaGVyPiBtX21lZGlhUXVlcnlNYXRjaGVy
OwogICAgIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgc3RkOjp1bmlxdWVfcHRyPEV2
ZW50VGFyZ2V0U2V0PiBtX3RvdWNoRXZlbnRUYXJnZXRzOworICAgIEV2ZW50VGFyZ2V0U2V0IG1f
dG91Y2hFdmVudFRhcmdldHM7CiAjZW5kaWYKICNpZiBFTkFCTEUoVE9VQ0hfQUNUSU9OX1JFR0lP
TlMpCiAgICAgYm9vbCBtX21heUhhdmVFbGVtZW50c1dpdGhOb25BdXRvVG91Y2hBY3Rpb24geyBm
YWxzZSB9OwpAQCAtMTkzNCw3ICsxOTM0LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9tYXlI
YXZlUmVuZGVyZWRTVkdGb3JlaWduT2JqZWN0cyB7IGZhbHNlIH07CiAKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8RXZlbnRUYXJnZXRTZXQ+IG1fd2hlZWxFdmVudFRhcmdldHM7CisgICAgRXZlbnRUYXJn
ZXRTZXQgbV93aGVlbEV2ZW50VGFyZ2V0czsKIAogICAgIE1vbm90b25pY1RpbWUgbV9sYXN0SGFu
ZGxlZFVzZXJHZXN0dXJlVGltZXN0YW1wOwogICAgIE1vbm90b25pY1RpbWUgbV91c2VyQWN0aXZh
dGVkTWVkaWFGaW5pc2hlZFBsYXlpbmdUaW1lc3RhbXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9JZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuY3BwCmluZGV4IDk0MGVmY2FlZDgzMDkxYzI1ODNm
YTllMzM2ZWYzZDc4YzU0YWEzZGMuLmZjYjMwZDU0Y2E4OTQ4NzJiMTI0MjkyNjM1YmQ3NjJmOTk0
ZjQ2MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9JZFRhcmdldE9ic2VydmVyUmVn
aXN0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9JZFRhcmdldE9ic2VydmVyUmVnaXN0
cnkuY3BwCkBAIC0zNCwzNSArMzQsMzIgQEAgdm9pZCBJZFRhcmdldE9ic2VydmVyUmVnaXN0cnk6
OmFkZE9ic2VydmVyKGNvbnN0IEF0b21TdHJpbmcmIGlkLCBJZFRhcmdldE9ic2VydmUKIHsKICAg
ICBpZiAoaWQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgSWRUb09ic2Vy
dmVyU2V0TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9yZWdpc3RyeS5hZGQoaWQuaW1wbCgpLCBu
dWxscHRyKTsKLSAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJlc3VsdC5pdGVy
YXRvci0+dmFsdWUgPSBtYWtlVW5pcXVlPE9ic2VydmVyU2V0PigpOwotCi0gICAgcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZS0+YWRkKG9ic2VydmVyKTsKKyAgICBtX3JlZ2lzdHJ5LmFkZChpZC5pbXBs
KCksIE9ic2VydmVyU2V0IHsgfSkuaXRlcmF0b3ItPnZhbHVlLmFkZChvYnNlcnZlcik7CiB9CiAK
IHZvaWQgSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5OjpyZW1vdmVPYnNlcnZlcihjb25zdCBBdG9t
U3RyaW5nJiBpZCwgSWRUYXJnZXRPYnNlcnZlciogb2JzZXJ2ZXIpCiB7Ci0gICAgaWYgKGlkLmlz
RW1wdHkoKSB8fCBtX3JlZ2lzdHJ5LmlzRW1wdHkoKSkKKyAgICBpZiAoaWQuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47Ci0KLSAgICBJZFRvT2JzZXJ2ZXJTZXRNYXA6Oml0ZXJhdG9yIGl0ZXIg
PSBtX3JlZ2lzdHJ5LmZpbmQoaWQuaW1wbCgpKTsKLQotICAgIE9ic2VydmVyU2V0KiBzZXQgPSBp
dGVyLT52YWx1ZS5nZXQoKTsKLSAgICBzZXQtPnJlbW92ZShvYnNlcnZlcik7Ci0gICAgaWYgKHNl
dC0+aXNFbXB0eSgpICYmIHNldCAhPSBtX25vdGlmeWluZ09ic2VydmVyc0luU2V0KQotICAgICAg
ICBtX3JlZ2lzdHJ5LnJlbW92ZShpdGVyKTsKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9yZWdpc3Ry
eS5maW5kKGlkLmltcGwoKSk7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fcmVnaXN0cnkuZW5kKCkp
IHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgYXV0byYgc2V0ID0gaXRlcmF0b3ItPnZhbHVlOworICAgIHNldC5yZW1vdmUob2JzZXJ2
ZXIpOworICAgIGlmIChzZXQuaXNFbXB0eSgpICYmICZzZXQgIT0gbV9ub3RpZnlpbmdPYnNlcnZl
cnNJblNldCkKKyAgICAgICAgbV9yZWdpc3RyeS5yZW1vdmUoaXRlcmF0b3IpOwogfQogCiB2b2lk
IElkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeTo6bm90aWZ5T2JzZXJ2ZXJzSW50ZXJuYWwoY29uc3Qg
QXRvbVN0cmluZ0ltcGwmIGlkKQogewotICAgIEFTU0VSVCghbV9yZWdpc3RyeS5pc0VtcHR5KCkp
OwotCi0gICAgbV9ub3RpZnlpbmdPYnNlcnZlcnNJblNldCA9IG1fcmVnaXN0cnkuZ2V0KCZpZCk7
Ci0gICAgaWYgKCFtX25vdGlmeWluZ09ic2VydmVyc0luU2V0KQorICAgIGF1dG8gaXRlcmF0b3Ig
PSBtX3JlZ2lzdHJ5LmZpbmQoJmlkKTsKKyAgICBpZiAoaXRlcmF0b3IgPT0gbV9yZWdpc3RyeS5l
bmQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgbV9ub3RpZnlpbmdPYnNlcnZlcnNJblNldCA9
ICZpdGVyYXRvci0+dmFsdWU7CisKICAgICBmb3IgKGF1dG8mIG9ic2VydmVyIDogY29weVRvVmVj
dG9yKCptX25vdGlmeWluZ09ic2VydmVyc0luU2V0KSkgewogICAgICAgICBpZiAobV9ub3RpZnlp
bmdPYnNlcnZlcnNJblNldC0+Y29udGFpbnMob2JzZXJ2ZXIpKQogICAgICAgICAgICAgb2JzZXJ2
ZXItPmlkVGFyZ2V0Q2hhbmdlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0lk
VGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0lkVGFyZ2V0T2Jz
ZXJ2ZXJSZWdpc3RyeS5oCmluZGV4IGExZTYzYWNlMTNmMzAzM2M0MzFhODg5ZjdhNmQyMGQ1OWFh
N2NmMmEuLmJlNWEzZTU2MTVlYWY5YTljMjM5ODc1YTk2YjYxN2ZkMGFlMDE0NzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9JZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5LmgKQEAgLTQ5LDggKzQ5
LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbW92ZU9ic2VydmVyKGNvbnN0IEF0b21TdHJpbmcm
IGlkLCBJZFRhcmdldE9ic2VydmVyKik7CiAgICAgdm9pZCBub3RpZnlPYnNlcnZlcnNJbnRlcm5h
bChjb25zdCBBdG9tU3RyaW5nSW1wbCYgaWQpOwogCi0gICAgdHlwZWRlZiBIYXNoU2V0PElkVGFy
Z2V0T2JzZXJ2ZXIqPiBPYnNlcnZlclNldDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgQXRv
bVN0cmluZ0ltcGwqLCBzdGQ6OnVuaXF1ZV9wdHI8T2JzZXJ2ZXJTZXQ+PiBJZFRvT2JzZXJ2ZXJT
ZXRNYXA7CisgICAgdXNpbmcgT2JzZXJ2ZXJTZXQgPSBIYXNoU2V0PElkVGFyZ2V0T2JzZXJ2ZXIq
PjsKKyAgICB1c2luZyBJZFRvT2JzZXJ2ZXJTZXRNYXAgPSBIYXNoTWFwPGNvbnN0IEF0b21TdHJp
bmdJbXBsKiwgT2JzZXJ2ZXJTZXQ+OwogICAgIElkVG9PYnNlcnZlclNldE1hcCBtX3JlZ2lzdHJ5
OwogICAgIE9ic2VydmVyU2V0KiBtX25vdGlmeWluZ09ic2VydmVyc0luU2V0IHsgbnVsbHB0ciB9
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyLmNwcAppbmRleCA4YjNhMjVm
OTVjOWY5YmM0YTYxNzllYzJiMDE1OGJhNmY4OTk4OTAyLi42MTM3MzFmNjhmZDQ0M2RjNWZhM2M2
YzY2NGE3ODRhMmViMzI2N2NiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRp
b25PYnNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXIu
Y3BwCkBAIC0xOTAsNyArMTkwLDcgQEAgdm9pZCBNdXRhdGlvbk9ic2VydmVyOjpkZWxpdmVyKCkK
ICAgICAvLyBDYWxsaW5nIHRha2VUcmFuc2llbnRSZWdpc3RyYXRpb25zKCkgY2FuIG1vZGlmeSBt
X3JlZ2lzdHJhdGlvbnMsIHNvIGl0J3MgbmVjZXNzYXJ5CiAgICAgLy8gdG8gbWFrZSBhIGNvcHkg
b2YgdGhlIHRyYW5zaWVudCByZWdpc3RyYXRpb25zIGJlZm9yZSBvcGVyYXRpbmcgb24gdGhlbS4K
ICAgICBWZWN0b3I8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbiosIDE+IHRyYW5zaWVudFJl
Z2lzdHJhdGlvbnM7Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxIYXNoU2V0PEdDUmVhY2hh
YmxlUmVmPE5vZGU+Pj4sIDE+IG5vZGVzVG9LZWVwQWxpdmU7CisgICAgVmVjdG9yPEhhc2hTZXQ8
R0NSZWFjaGFibGVSZWY8Tm9kZT4+LCAxPiBub2Rlc1RvS2VlcEFsaXZlOwogICAgIEhhc2hTZXQ8
R0NSZWFjaGFibGVSZWY8Tm9kZT4+IHBlbmRpbmdUYXJnZXRzOwogICAgIHBlbmRpbmdUYXJnZXRz
LnN3YXAobV9wZW5kaW5nVGFyZ2V0cyk7CiAgICAgZm9yIChhdXRvKiByZWdpc3RyYXRpb24gOiBt
X3JlZ2lzdHJhdGlvbnMpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlv
bk9ic2VydmVyUmVnaXN0cmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9i
c2VydmVyUmVnaXN0cmF0aW9uLmNwcAppbmRleCBjNmYxZmIxNWRmZjhkNWViZmYyZjVjNWI3Yjdl
ZGUzYWUzZDBlYjc5Li44OTRlNDZjOGU1NDFiYzY5ZjM4NjhkZTAwNzgyNzJjODFkMWYyNTEzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRp
b24uY3BwCkBAIC02OCwzMSArNjgsMjcgQEAgdm9pZCBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0
aW9uOjpvYnNlcnZlZFN1YnRyZWVOb2RlV2lsbERldGFjaChOb2RlJiBub2RlKQogICAgIG5vZGUu
cmVnaXN0ZXJUcmFuc2llbnRNdXRhdGlvbk9ic2VydmVyKCp0aGlzKTsKICAgICBtX29ic2VydmVy
LT5zZXRIYXNUcmFuc2llbnRSZWdpc3RyYXRpb24obm9kZS5kb2N1bWVudCgpKTsKIAotICAgIGlm
ICghbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2RlcykgewotICAgICAgICBtX3RyYW5zaWVudFJl
Z2lzdHJhdGlvbk5vZGVzID0gbWFrZVVuaXF1ZTxIYXNoU2V0PEdDUmVhY2hhYmxlUmVmPE5vZGU+
Pj4oKTsKLQorICAgIGlmIChtX3RyYW5zaWVudFJlZ2lzdHJhdGlvbk5vZGVzLmlzRW1wdHkoKSkg
ewogICAgICAgICBBU1NFUlQoIW1fbm9kZUtlcHRBbGl2ZSk7CiAgICAgICAgIG1fbm9kZUtlcHRB
bGl2ZSA9ICZtX25vZGU7IC8vIEJhbGFuY2VkIGluIHRha2VUcmFuc2llbnRSZWdpc3RyYXRpb25z
LgogICAgIH0KLSAgICBtX3RyYW5zaWVudFJlZ2lzdHJhdGlvbk5vZGVzLT5hZGQobm9kZSk7Cisg
ICAgbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2Rlcy5hZGQobm9kZSk7CiB9CiAKLXN0ZDo6dW5p
cXVlX3B0cjxIYXNoU2V0PEdDUmVhY2hhYmxlUmVmPE5vZGU+Pj4gTXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJhdGlvbjo6dGFrZVRyYW5zaWVudFJlZ2lzdHJhdGlvbnMoKQorSGFzaFNldDxHQ1JlYWNo
YWJsZVJlZjxOb2RlPj4gTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6dGFrZVRyYW5zaWVu
dFJlZ2lzdHJhdGlvbnMoKQogewotICAgIGlmICghbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2Rl
cykgeworICAgIGlmIChtX3RyYW5zaWVudFJlZ2lzdHJhdGlvbk5vZGVzLmlzRW1wdHkoKSkgewog
ICAgICAgICBBU1NFUlQoIW1fbm9kZUtlcHRBbGl2ZSk7Ci0gICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIGZvciAoYXV0byYgbm9kZSA6ICpt
X3RyYW5zaWVudFJlZ2lzdHJhdGlvbk5vZGVzKQorICAgIGZvciAoYXV0byYgbm9kZSA6IG1fdHJh
bnNpZW50UmVnaXN0cmF0aW9uTm9kZXMpCiAgICAgICAgIG5vZGUtPnVucmVnaXN0ZXJUcmFuc2ll
bnRNdXRhdGlvbk9ic2VydmVyKCp0aGlzKTsKIAotICAgIGF1dG8gcmV0dXJuVmFsdWUgPSBXVEZN
b3ZlKG1fdHJhbnNpZW50UmVnaXN0cmF0aW9uTm9kZXMpOwotCiAgICAgQVNTRVJUKG1fbm9kZUtl
cHRBbGl2ZSk7CiAgICAgbV9ub2RlS2VwdEFsaXZlID0gbnVsbHB0cjsgLy8gQmFsYW5jZWQgaW4g
b2JzZXJ2ZVN1YnRyZWVOb2RlV2lsbERldGFjaC4KIAotICAgIHJldHVybiByZXR1cm5WYWx1ZTsK
KyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX3RyYW5zaWVudFJlZ2lzdHJhdGlvbk5vZGVzLCB7
IH0pOwogfQogCiBib29sIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246OnNob3VsZFJlY2Vp
dmVNdXRhdGlvbkZyb20oTm9kZSYgbm9kZSwgTXV0YXRpb25PYnNlcnZlcjo6TXV0YXRpb25UeXBl
IHR5cGUsIGNvbnN0IFF1YWxpZmllZE5hbWUqIGF0dHJpYnV0ZU5hbWUpIGNvbnN0CkBAIC0xMTgs
MTAgKzExNCw3IEBAIGJvb2wgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpBYnN0cmFjdFNsb3RWCiAgICAgaWYgKHZpc2l0b3IuY29u
dGFpbnNPcGFxdWVSb290KHJvb3QobV9ub2RlKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0g
ICAgaWYgKCFtX3RyYW5zaWVudFJlZ2lzdHJhdGlvbk5vZGVzKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBmb3IgKGF1dG8mIG5vZGUgOiAqbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2Rl
cykgeworICAgIGZvciAoYXV0byYgbm9kZSA6IG1fdHJhbnNpZW50UmVnaXN0cmF0aW9uTm9kZXMp
IHsKICAgICAgICAgaWYgKHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3Qobm9kZSkpKQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9NdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uLmgKaW5kZXggNzUzZGJmN2FkMzg5MGYwNzNl
YzBlYTZhZTZiZDdiMTU2YmQ5NDRjNC4uYzQ4NWRlOWJhNGU3Y2U4YjdlMGJkZDAyN2NkOTZmYzgz
NDM2MmE2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJS
ZWdpc3RyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJhdGlvbi5oCkBAIC01Miw4ICs1Miw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVzZXRP
YnNlcnZhdGlvbihNdXRhdGlvbk9ic2VydmVyT3B0aW9ucywgY29uc3QgSGFzaFNldDxBdG9tU3Ry
aW5nPiYgYXR0cmlidXRlRmlsdGVyKTsKICAgICB2b2lkIG9ic2VydmVkU3VidHJlZU5vZGVXaWxs
RGV0YWNoKE5vZGUmKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SGFzaFNldDxHQ1JlYWNoYWJsZVJl
ZjxOb2RlPj4+IHRha2VUcmFuc2llbnRSZWdpc3RyYXRpb25zKCk7Ci0gICAgYm9vbCBoYXNUcmFu
c2llbnRSZWdpc3RyYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2llbnRSZWdpc3RyYXRp
b25Ob2RlcyAmJiAhbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2Rlcy0+aXNFbXB0eSgpOyB9Cisg
ICAgSGFzaFNldDxHQ1JlYWNoYWJsZVJlZjxOb2RlPj4gdGFrZVRyYW5zaWVudFJlZ2lzdHJhdGlv
bnMoKTsKKyAgICBib29sIGhhc1RyYW5zaWVudFJlZ2lzdHJhdGlvbnMoKSBjb25zdCB7IHJldHVy
biAhbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2Rlcy5pc0VtcHR5KCk7IH0KIAogICAgIGJvb2wg
c2hvdWxkUmVjZWl2ZU11dGF0aW9uRnJvbShOb2RlJiwgTXV0YXRpb25PYnNlcnZlcjo6TXV0YXRp
b25UeXBlLCBjb25zdCBRdWFsaWZpZWROYW1lKiBhdHRyaWJ1dGVOYW1lKSBjb25zdDsKICAgICBi
b29sIGlzU3VidHJlZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3B0aW9ucyAmIE11dGF0aW9uT2JzZXJ2
ZXI6OlN1YnRyZWU7IH0KQEAgLTY5LDcgKzY5LDcgQEAgcHJpdmF0ZToKICAgICBSZWY8TXV0YXRp
b25PYnNlcnZlcj4gbV9vYnNlcnZlcjsKICAgICBOb2RlJiBtX25vZGU7CiAgICAgUmVmUHRyPE5v
ZGU+IG1fbm9kZUtlcHRBbGl2ZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SGFzaFNldDxHQ1JlYWNo
YWJsZVJlZjxOb2RlPj4+IG1fdHJhbnNpZW50UmVnaXN0cmF0aW9uTm9kZXM7CisgICAgSGFzaFNl
dDxHQ1JlYWNoYWJsZVJlZjxOb2RlPj4gbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2RlczsKICAg
ICBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyBtX29wdGlvbnM7CiAgICAgSGFzaFNldDxBdG9tU3Ry
aW5nPiBtX2F0dHJpYnV0ZUZpbHRlcjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0Zvcm1Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xs
ZXIuY3BwCmluZGV4IDZhNDRkNzI3MjZhOTg3NTg0MjY5MTRmOWM3NzNjMTFmZDViNzA4YmMuLjc5
OTRhNGQ4NDg5YWYyMjhmOWUzOWU2NzZlOGNjMTdhMDg4Yjc5ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvRm9ybUNvbnRyb2xsZXIuY3BwCkBAIC0zNjMsMjggKzM2MywyNyBAQCBzdGF0aWMgU3RyaW5n
IGZvcm1TdGF0ZVNpZ25hdHVyZSgpCiAgICAgcmV0dXJuIHNpZ25hdHVyZTsKIH0KIAotc3RkOjp1
bmlxdWVfcHRyPEZvcm1Db250cm9sbGVyOjpTYXZlZEZvcm1TdGF0ZU1hcD4gRm9ybUNvbnRyb2xs
ZXI6OmNyZWF0ZVNhdmVkRm9ybVN0YXRlTWFwKGNvbnN0IEZvcm1FbGVtZW50TGlzdEhhc2hTZXQm
IGNvbnRyb2xMaXN0KQorYXV0byBGb3JtQ29udHJvbGxlcjo6Y3JlYXRlU2F2ZWRGb3JtU3RhdGVN
YXAoY29uc3QgRm9ybUVsZW1lbnRMaXN0SGFzaFNldCYgY29udHJvbExpc3QpIC0+IFNhdmVkRm9y
bVN0YXRlTWFwCiB7CisgICAgU2F2ZWRGb3JtU3RhdGVNYXAgbWFwOwogICAgIEZvcm1LZXlHZW5l
cmF0b3Iga2V5R2VuZXJhdG9yOwotICAgIGF1dG8gc3RhdGVNYXAgPSBtYWtlVW5pcXVlPFNhdmVk
Rm9ybVN0YXRlTWFwPigpOwogICAgIGZvciAoYXV0byYgY29udHJvbCA6IGNvbnRyb2xMaXN0KSB7
CiAgICAgICAgIGlmICghY29udHJvbC0+c2hvdWxkU2F2ZUFuZFJlc3RvcmVGb3JtQ29udHJvbFN0
YXRlKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYXV0byYgZm9ybVN0YXRlID0g
c3RhdGVNYXAtPmFkZChrZXlHZW5lcmF0b3IuZm9ybUtleSgqY29udHJvbCkuaW1wbCgpLCBudWxs
cHRyKS5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgIGF1dG8mIGZvcm1TdGF0ZSA9IG1hcC5hZGQo
a2V5R2VuZXJhdG9yLmZvcm1LZXkoKmNvbnRyb2wpLmltcGwoKSwgbnVsbHB0cikuaXRlcmF0b3It
PnZhbHVlOwogICAgICAgICBpZiAoIWZvcm1TdGF0ZSkKICAgICAgICAgICAgIGZvcm1TdGF0ZSA9
IG1ha2VVbmlxdWU8U2F2ZWRGb3JtU3RhdGU+KCk7CiAgICAgICAgIGZvcm1TdGF0ZS0+YXBwZW5k
Q29udHJvbFN0YXRlKGNvbnRyb2wtPm5hbWUoKSwgY29udHJvbC0+dHlwZSgpLCBjb250cm9sLT5z
YXZlRm9ybUNvbnRyb2xTdGF0ZSgpKTsKICAgICB9Ci0gICAgcmV0dXJuIHN0YXRlTWFwOworICAg
IHJldHVybiBtYXA7CiB9CiAKIFZlY3RvcjxTdHJpbmc+IEZvcm1Db250cm9sbGVyOjpmb3JtRWxl
bWVudHNTdGF0ZSgpIGNvbnN0CiB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFNhdmVkRm9ybVN0YXRl
TWFwPiBzdGF0ZU1hcCA9IGNyZWF0ZVNhdmVkRm9ybVN0YXRlTWFwKG1fZm9ybUVsZW1lbnRzV2l0
aFN0YXRlKTsKICAgICBWZWN0b3I8U3RyaW5nPiBzdGF0ZVZlY3RvcjsKICAgICBzdGF0ZVZlY3Rv
ci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fZm9ybUVsZW1lbnRzV2l0aFN0YXRlLnNpemUoKSAq
IDQpOwogICAgIHN0YXRlVmVjdG9yLmFwcGVuZChmb3JtU3RhdGVTaWduYXR1cmUoKSk7Ci0gICAg
Zm9yIChhdXRvJiBzdGF0ZSA6ICpzdGF0ZU1hcCkgeworICAgIGZvciAoYXV0byYgc3RhdGUgOiBj
cmVhdGVTYXZlZEZvcm1TdGF0ZU1hcChtX2Zvcm1FbGVtZW50c1dpdGhTdGF0ZSkpIHsKICAgICAg
ICAgc3RhdGVWZWN0b3IuYXBwZW5kKHN0YXRlLmtleS5nZXQoKSk7CiAgICAgICAgIHN0YXRlLnZh
bHVlLT5zZXJpYWxpemVUbyhzdGF0ZVZlY3Rvcik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9Gb3JtQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3Jt
Q29udHJvbGxlci5oCmluZGV4IGExMzUyZjU4NmJlZmFhMWY2YjA3MTJiOTBlYmZkZmFiZjNjMGFj
ODYuLjE4N2I2NjNhNzUwYmJjZjMyMWM0YjJkMTBmNDhkNGRjYWNmMzgxYjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0Zvcm1Db250cm9sbGVyLmgKQEAgLTU4LDEwICs1OCwxMCBAQCBwdWJsaWM6CiAgICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHJlZmVyZW5jZWRGaWxlUGF0aHMo
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHN0YXRlVmVjdG9yKTsKIAogcHJpdmF0ZToKLSAgICB0eXBl
ZGVmIExpc3RIYXNoU2V0PFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlPj4g
Rm9ybUVsZW1lbnRMaXN0SGFzaFNldDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPEF0b21T
dHJpbmdJbXBsPiwgc3RkOjp1bmlxdWVfcHRyPFNhdmVkRm9ybVN0YXRlPj4gU2F2ZWRGb3JtU3Rh
dGVNYXA7CisgICAgdXNpbmcgRm9ybUVsZW1lbnRMaXN0SGFzaFNldCA9IExpc3RIYXNoU2V0PFJl
ZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlPj47CisgICAgdXNpbmcgU2F2ZWRG
b3JtU3RhdGVNYXAgPSBIYXNoTWFwPFJlZlB0cjxBdG9tU3RyaW5nSW1wbD4sIHN0ZDo6dW5pcXVl
X3B0cjxTYXZlZEZvcm1TdGF0ZT4+OwogCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTYXZl
ZEZvcm1TdGF0ZU1hcD4gY3JlYXRlU2F2ZWRGb3JtU3RhdGVNYXAoY29uc3QgRm9ybUVsZW1lbnRM
aXN0SGFzaFNldCYpOworICAgIHN0YXRpYyBTYXZlZEZvcm1TdGF0ZU1hcCBjcmVhdGVTYXZlZEZv
cm1TdGF0ZU1hcChjb25zdCBGb3JtRWxlbWVudExpc3RIYXNoU2V0Jik7CiAgICAgRm9ybUNvbnRy
b2xTdGF0ZSB0YWtlU3RhdGVGb3JGb3JtRWxlbWVudChjb25zdCBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50V2l0aFN0YXRlJik7CiAgICAgc3RhdGljIHZvaWQgZm9ybVN0YXRlc0Zyb21TdGF0ZVZlY3Rv
cihjb25zdCBWZWN0b3I8U3RyaW5nPiYsIFNhdmVkRm9ybVN0YXRlTWFwJik7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCmluZGV4IDRjNjdiNjM4MjNmZjZhNDk3YTYx
MmQ2ZDYzYWU0NWE2ZDhkYjBhMDUuLmI3NTcxOWJjNjFkN2ZlM2QyYzZmMzMyYmY2ZjYxZjdlNTVk
ZTAyZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcApAQCAtNzYy
LDcgKzc2Miw3IEBAIGJvb2wgRG9jdW1lbnRMb2FkZXI6OnRyeUxvYWRpbmdTdWJzdGl0dXRlRGF0
YSgpCiAgICAgICAgIH07CiAKICNpZiBVU0UoQ09DT0FfRVZFTlRfTE9PUCkKLSAgICAgICAgUnVu
TG9vcDo6ZGlzcGF0Y2goKm1fZnJhbWUtPnBhZ2UoKS0+c2NoZWR1bGVkUnVuTG9vcFBhaXJzKCks
IFdURk1vdmUobG9hZERhdGEpKTsKKyAgICAgICAgUnVuTG9vcDo6ZGlzcGF0Y2gobV9mcmFtZS0+
cGFnZSgpLT5zY2hlZHVsZWRSdW5Mb29wUGFpcnMoKSwgV1RGTW92ZShsb2FkRGF0YSkpOwogI2Vs
c2UKICAgICAgICAgUnVuTG9vcDo6Y3VycmVudCgpLmRpc3BhdGNoKFdURk1vdmUobG9hZERhdGEp
KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9h
ZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAKaW5kZXgg
NzU4NTgzZGFhNWQ2MjJhMTljODllNGM3ZDZlMTc4ODBlOGU3NzExMi4uYzA1MDc0NTgyM2ZlMmY5
MmI1Y2RiMmM3OTMyMmE0YjQyMmU3NTdlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3Vy
Y2VMb2FkZXIuY3BwCkBAIC0yNzEsNyArMjcxLDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRlcjo6bG9h
ZERhdGFVUkwoKQogICAgIERhdGFVUkxEZWNvZGVyOjpTY2hlZHVsZUNvbnRleHQgc2NoZWR1bGVD
b250ZXh0OwogI2lmIFVTRShDT0NPQV9FVkVOVF9MT09QKQogICAgIGlmIChhdXRvIHBhZ2UgPSBt
X2ZyYW1lLT5wYWdlKCkpCi0gICAgICAgIHNjaGVkdWxlQ29udGV4dC5zY2hlZHVsZWRQYWlycyA9
ICpwYWdlLT5zY2hlZHVsZWRSdW5Mb29wUGFpcnMoKTsKKyAgICAgICAgc2NoZWR1bGVDb250ZXh0
LnNjaGVkdWxlZFBhaXJzID0gcGFnZS0+c2NoZWR1bGVkUnVuTG9vcFBhaXJzKCk7CiAjZW5kaWYK
ICAgICBhdXRvIG1vZGUgPSBEYXRhVVJMRGVjb2Rlcjo6TW9kZTo6TGVnYWN5OwogICAgIGlmICht
X3JlcXVlc3QucmVxdWVzdGVyKCkgPT0gUmVzb3VyY2VSZXF1ZXN0OjpSZXF1ZXN0ZXI6OkZldGNo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNl
TG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxv
YWRlci5jcHAKaW5kZXggMjZmZmRiZmJjOWQxMzY4Y2ZiYjFhNDk0ZjdmNmU2YWNlNTQwNTY5ZC4u
YzA2M2MzMjU2YzliYzk5YWNjY2MzYTc2MWIzZTNjYTg4Zjk5NjM4YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCkBAIC0x
MDgxLDcgKzEwODEsNyBAQCB2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpkb2N1bWVudERpZEZp
bmlzaExvYWRFdmVudCgpCiAKICAgICAvLyBJZiBtX3ByZWxvYWRzIGlzIG5vdCBlbXB0eSBoZXJl
LCBpdCdzIGZ1bGwgb2YgbGluayBwcmVsb2FkcywKICAgICAvLyBhcyBzcGVjdWxhdGl2ZSBwcmVs
b2FkcyB3ZXJlIGNsZWFyZWQgYXQgRENMLgotICAgIGlmIChtX3ByZWxvYWRzICYmIG1fcHJlbG9h
ZHMtPnNpemUoKSAmJiAhbV91bnVzZWRQcmVsb2Fkc1RpbWVyLmlzQWN0aXZlKCkpCisgICAgaWYg
KCFtX3ByZWxvYWRzLmlzRW1wdHkoKSAmJiAhbV91bnVzZWRQcmVsb2Fkc1RpbWVyLmlzQWN0aXZl
KCkpCiAgICAgICAgIG1fdW51c2VkUHJlbG9hZHNUaW1lci5zdGFydE9uZVNob3QodW51c2VkUHJl
bG9hZFRpbWVvdXQpOwogfQogCkBAIC0xNTA0LDI1ICsxNTA0LDIxIEBAIFJlc291cmNlRXJyb3JP
cjxDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4+IENhY2hlZFJlc291cmNlTG9h
ZGVyOjpwcmVsCiAgICAgICAgIHJlcXVlc3Quc2V0Q2hhcnNldChtX2RvY3VtZW50LT5jaGFyc2V0
KCkpOwogCiAgICAgYXV0byByZXNvdXJjZSA9IHJlcXVlc3RSZXNvdXJjZSh0eXBlLCBXVEZNb3Zl
KHJlcXVlc3QpLCBGb3JQcmVsb2FkOjpZZXMpOwotICAgIGlmIChyZXNvdXJjZSAmJiAoIW1fcHJl
bG9hZHMgfHwgIW1fcHJlbG9hZHMtPmNvbnRhaW5zKHJlc291cmNlLnZhbHVlKCkuZ2V0KCkpKSkg
eworICAgIGlmIChyZXNvdXJjZSAmJiAhbV9wcmVsb2Fkcy5jb250YWlucyhyZXNvdXJjZS52YWx1
ZSgpLmdldCgpKSkgewogICAgICAgICBhdXRvIHJlc291cmNlVmFsdWUgPSByZXNvdXJjZS52YWx1
ZSgpOwogICAgICAgICAvLyBGb250cyBuZWVkIHNwZWNpYWwgdHJlYXRtZW50IHNpbmNlIGp1c3Qg
Y3JlYXRpbmcgdGhlIHJlc291cmNlIGRvZXNuJ3QgdHJpZ2dlciBhIGxvYWQuCiAgICAgICAgIGlm
ICh0eXBlID09IENhY2hlZFJlc291cmNlOjpUeXBlOjpGb250UmVzb3VyY2UpCiAgICAgICAgICAg
ICBkb3duY2FzdDxDYWNoZWRGb250PihyZXNvdXJjZVZhbHVlLmdldCgpKS0+YmVnaW5Mb2FkSWZO
ZWVkZWQoKnRoaXMpOwogICAgICAgICByZXNvdXJjZVZhbHVlLT5pbmNyZWFzZVByZWxvYWRDb3Vu
dCgpOwogCi0gICAgICAgIGlmICghbV9wcmVsb2FkcykKLSAgICAgICAgICAgIG1fcHJlbG9hZHMg
PSBtYWtlVW5pcXVlPExpc3RIYXNoU2V0PENhY2hlZFJlc291cmNlKj4+KCk7Ci0gICAgICAgIG1f
cHJlbG9hZHMtPmFkZChyZXNvdXJjZVZhbHVlLmdldCgpKTsKKyAgICAgICAgbV9wcmVsb2Fkcy5h
ZGQocmVzb3VyY2VWYWx1ZS5nZXQoKSk7CiAgICAgfQogICAgIHJldHVybiByZXNvdXJjZTsKIH0K
IAogdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6d2FyblVudXNlZFByZWxvYWRzKCkKIHsKLSAg
ICBpZiAoIW1fcHJlbG9hZHMpCi0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKGNvbnN0IGF1dG8m
IHJlc291cmNlIDogKm1fcHJlbG9hZHMpIHsKKyAgICBmb3IgKGF1dG8qIHJlc291cmNlIDogbV9w
cmVsb2FkcykgewogICAgICAgICBpZiAocmVzb3VyY2UgJiYgcmVzb3VyY2UtPmlzTGlua1ByZWxv
YWQoKSAmJiByZXNvdXJjZS0+cHJlbG9hZFJlc3VsdCgpID09IENhY2hlZFJlc291cmNlOjpQcmVs
b2FkUmVzdWx0OjpQcmVsb2FkTm90UmVmZXJlbmNlZCAmJiBkb2N1bWVudCgpKSB7CiAgICAgICAg
ICAgICBkb2N1bWVudCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpPdGhlciwg
TWVzc2FnZUxldmVsOjpXYXJuaW5nLAogICAgICAgICAgICAgICAgICJUaGUgcmVzb3VyY2UgIiAr
IHJlc291cmNlLT51cmwoKS5zdHJpbmcoKSArCkBAIC0xNTM0LDI4ICsxNTMwLDIwIEBAIHZvaWQg
Q2FjaGVkUmVzb3VyY2VMb2FkZXI6Ondhcm5VbnVzZWRQcmVsb2FkcygpCiBib29sIENhY2hlZFJl
c291cmNlTG9hZGVyOjppc1ByZWxvYWRlZChjb25zdCBTdHJpbmcmIHVybFN0cmluZykgY29uc3QK
IHsKICAgICBjb25zdCBVUkwmIHVybCA9IG1fZG9jdW1lbnQtPmNvbXBsZXRlVVJMKHVybFN0cmlu
Zyk7Ci0KLSAgICBpZiAobV9wcmVsb2FkcykgewotICAgICAgICBmb3IgKGF1dG8mIHJlc291cmNl
IDogKm1fcHJlbG9hZHMpIHsKLSAgICAgICAgICAgIGlmIChyZXNvdXJjZS0+dXJsKCkgPT0gdXJs
KQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9CisgICAgZm9yIChhdXRv
JiByZXNvdXJjZSA6IG1fcHJlbG9hZHMpIHsKKyAgICAgICAgaWYgKHJlc291cmNlLT51cmwoKSA9
PSB1cmwpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCiB2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpjbGVhclByZWxvYWRzKENsZWFyUHJl
bG9hZHNNb2RlIG1vZGUpCiB7Ci0gICAgaWYgKCFtX3ByZWxvYWRzKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TGlzdEhhc2hTZXQ8Q2FjaGVkUmVzb3VyY2UqPj4gcmVt
YWluaW5nTGlua1ByZWxvYWRzOwotICAgIGZvciAoYXV0byogcmVzb3VyY2UgOiAqbV9wcmVsb2Fk
cykgeworICAgIExpc3RIYXNoU2V0PENhY2hlZFJlc291cmNlKj4gcmVtYWluaW5nTGlua1ByZWxv
YWRzOworICAgIGZvciAoYXV0byogcmVzb3VyY2UgOiBtX3ByZWxvYWRzKSB7CiAgICAgICAgIEFT
U0VSVChyZXNvdXJjZSk7CiAgICAgICAgIGlmIChtb2RlID09IENsZWFyUHJlbG9hZHNNb2RlOjpD
bGVhclNwZWN1bGF0aXZlUHJlbG9hZHMgJiYgcmVzb3VyY2UtPmlzTGlua1ByZWxvYWQoKSkgewot
ICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdMaW5rUHJlbG9hZHMpCi0gICAgICAgICAgICAgICAg
cmVtYWluaW5nTGlua1ByZWxvYWRzID0gbWFrZVVuaXF1ZTxMaXN0SGFzaFNldDxDYWNoZWRSZXNv
dXJjZSo+PigpOwotICAgICAgICAgICAgcmVtYWluaW5nTGlua1ByZWxvYWRzLT5hZGQocmVzb3Vy
Y2UpOworICAgICAgICAgICAgcmVtYWluaW5nTGlua1ByZWxvYWRzLmFkZChyZXNvdXJjZSk7CiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICByZXNvdXJjZS0+ZGVjcmVh
c2VQcmVsb2FkQ291bnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJlc291cmNlTG9hZGVyLmgKaW5kZXggZTQ1YzA5NTkzMTFkNjU2YWYyNzEzMjE5NTMwNjZm
M2U0YmQ1MzRjOS4uNDkxOTBmN2Y1ZDgyYmJkMDk2YTViYjJlOGY5ZGQzNzczNTExNTEzOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVy
LmgKQEAgLTIwOSw3ICsyMDksNyBAQCBwcml2YXRlOgogCiAgICAgaW50IG1fcmVxdWVzdENvdW50
IHsgMCB9OwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPExpc3RIYXNoU2V0PENhY2hlZFJlc291cmNl
Kj4+IG1fcHJlbG9hZHM7CisgICAgTGlzdEhhc2hTZXQ8Q2FjaGVkUmVzb3VyY2UqPiBtX3ByZWxv
YWRzOwogICAgIFRpbWVyIG1fdW51c2VkUHJlbG9hZHNUaW1lcjsKIAogICAgIFRpbWVyIG1fZ2Fy
YmFnZUNvbGxlY3REb2N1bWVudFJlc291cmNlc1RpbWVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAKaW5kZXggOTViNTJhYTNhZDI5MTdmZWI4ZTM1MWFlMTE4
NTYyZjRjYzM3MTU1Ny4uOWNmNjI4ZTk5OTJjOGU0YTI1ZWI4ZWRkNzgxNWQ5NWNlNjFmYzQzOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwCkBAIC03NSwx
OSArNzUsMTcgQEAgTWVtb3J5Q2FjaGU6Ok1lbW9yeUNhY2hlKCkKICAgICB9KTsKIH0KIAotYXV0
byBNZW1vcnlDYWNoZTo6c2Vzc2lvblJlc291cmNlTWFwKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCkgY29uc3QgLT4gQ2FjaGVkUmVzb3VyY2VNYXAqCithdXRvIE1lbW9yeUNhY2hlOjpzZXNzaW9u
UmVzb3VyY2VNYXAoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKSAtPiBDYWNoZWRSZXNvdXJjZU1h
cCoKIHsKICAgICBBU1NFUlQoc2Vzc2lvbklELmlzVmFsaWQoKSk7Ci0gICAgcmV0dXJuIG1fc2Vz
c2lvblJlc291cmNlcy5nZXQoc2Vzc2lvbklEKTsKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9zZXNz
aW9uUmVzb3VyY2VzLmZpbmQoc2Vzc2lvbklEKTsKKyAgICByZXR1cm4gaXRlcmF0b3IgPT0gbV9z
ZXNzaW9uUmVzb3VyY2VzLmVuZCgpID8gbnVsbHB0ciA6ICZpdGVyYXRvci0+dmFsdWU7CiB9CiAK
IGF1dG8gTWVtb3J5Q2FjaGU6OmVuc3VyZVNlc3Npb25SZXNvdXJjZU1hcChQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQpIC0+IENhY2hlZFJlc291cmNlTWFwJgogewogICAgIEFTU0VSVChzZXNzaW9u
SUQuaXNWYWxpZCgpKTsKLSAgICBhdXRvJiBtYXAgPSBtX3Nlc3Npb25SZXNvdXJjZXMuYWRkKHNl
c3Npb25JRCwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwotICAgIGlmICghbWFwKQotICAgICAg
ICBtYXAgPSBtYWtlVW5pcXVlPENhY2hlZFJlc291cmNlTWFwPigpOwotICAgIHJldHVybiAqbWFw
OworICAgIHJldHVybiBtX3Nlc3Npb25SZXNvdXJjZXMuYWRkKHNlc3Npb25JRCwgQ2FjaGVkUmVz
b3VyY2VNYXAgeyB9KS5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIGJvb2wgTWVtb3J5Q2FjaGU6OnNo
b3VsZFJlbW92ZUZyYWdtZW50SWRlbnRpZmllcihjb25zdCBVUkwmIG9yaWdpbmFsVVJMKQpAQCAt
MTgwLDcgKzE3OCw3IEBAIENhY2hlZFJlc291cmNlKiBNZW1vcnlDYWNoZTo6cmVzb3VyY2VGb3JS
ZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwKICAgICByZXR1cm4gcmVzb3Vy
Y2VGb3JSZXF1ZXN0SW1wbChyZXF1ZXN0LCAqcmVzb3VyY2VzKTsKIH0KIAotQ2FjaGVkUmVzb3Vy
Y2UqIE1lbW9yeUNhY2hlOjpyZXNvdXJjZUZvclJlcXVlc3RJbXBsKGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgQ2FjaGVkUmVzb3VyY2VNYXAmIHJlc291cmNlcykKK0NhY2hlZFJlc291
cmNlKiBNZW1vcnlDYWNoZTo6cmVzb3VyY2VGb3JSZXF1ZXN0SW1wbChjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIGNvbnN0IENhY2hlZFJlc291cmNlTWFwJiByZXNvdXJjZXMpCiB7CiAg
ICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOwogICAgIFVSTCB1cmwgPSByZW1vdmVGcmFn
bWVudElkZW50aWZpZXJJZk5lZWRlZChyZXF1ZXN0LnVybCgpKTsKQEAgLTIxOCw3ICsyMTYsNyBA
QCB2b2lkIE1lbW9yeUNhY2hlOjpwcnVuZUxpdmVSZXNvdXJjZXMoYm9vbCBzaG91bGREZXN0cm95
RGVjb2RlZERhdGFGb3JBbGxMaXZlUmVzbwogdm9pZCBNZW1vcnlDYWNoZTo6Zm9yRWFjaFJlc291
cmNlKGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChDYWNoZWRSZXNvdXJjZSYpPiYgZnVuY3Rpb24p
CiB7CiAgICAgZm9yIChhdXRvJiB1bnByb3RlY3RlZExSVUxpc3QgOiBtX2FsbFJlc291cmNlcykg
ewotICAgICAgICBmb3IgKGF1dG8mIHJlc291cmNlIDogY29weVRvVmVjdG9yKCp1bnByb3RlY3Rl
ZExSVUxpc3QpKQorICAgICAgICBmb3IgKGF1dG8mIHJlc291cmNlIDogY29weVRvVmVjdG9yKHVu
cHJvdGVjdGVkTFJVTGlzdCkpCiAgICAgICAgICAgICBmdW5jdGlvbigqcmVzb3VyY2UpOwogICAg
IH0KIH0KQEAgLTIyOSw3ICsyMjcsNyBAQCB2b2lkIE1lbW9yeUNhY2hlOjpmb3JFYWNoU2Vzc2lv
blJlc291cmNlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgV1RGOjpGdQogICAgIGlm
IChpdCA9PSBtX3Nlc3Npb25SZXNvdXJjZXMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGZvciAoYXV0byYgcmVzb3VyY2UgOiBjb3B5VG9WZWN0b3IoaXQtPnZhbHVlLT52YWx1ZXMoKSkp
CisgICAgZm9yIChhdXRvJiByZXNvdXJjZSA6IGNvcHlUb1ZlY3RvcihpdC0+dmFsdWUudmFsdWVz
KCkpKQogICAgICAgICBmdW5jdGlvbigqcmVzb3VyY2UpOwogfQogCkBAIC0zMjYsNyArMzI0LDcg
QEAgdm9pZCBNZW1vcnlDYWNoZTo6cHJ1bmVEZWFkUmVzb3VyY2VzVG9TaXplKHVuc2lnbmVkIHRh
cmdldFNpemUpCiAgICAgZm9yIChpbnQgaSA9IG1fYWxsUmVzb3VyY2VzLnNpemUoKSAtIDE7IGkg
Pj0gMDsgaS0tKSB7CiAgICAgICAgIC8vIE1ha2UgYSBjb3B5IG9mIHRoZSBMUlVMaXN0IGZpcnN0
IChhbmQgcmVmIHRoZSByZXNvdXJjZXMpIGFzIGNhbGxpbmcKICAgICAgICAgLy8gZGVzdHJveURl
Y29kZWREYXRhKCkgY2FuIGFsdGVyIHRoZSBMUlVMaXN0LgotICAgICAgICBhdXRvIGxydUxpc3Qg
PSBjb3B5VG9WZWN0b3IoKm1fYWxsUmVzb3VyY2VzW2ldKTsKKyAgICAgICAgYXV0byBscnVMaXN0
ID0gY29weVRvVmVjdG9yKG1fYWxsUmVzb3VyY2VzW2ldKTsKIAogICAgICAgICBMT0coUmVzb3Vy
Y2VMb2FkaW5nLCAiIGxydSBsaXN0IChzaXplICVsdSkgLSBmbHVzaGluZyBzdGFnZSIsIGxydUxp
c3Quc2l6ZSgpKTsKIApAQCAtMzY5LDcgKzM2Nyw3IEBAIHZvaWQgTWVtb3J5Q2FjaGU6OnBydW5l
RGVhZFJlc291cmNlc1RvU2l6ZSh1bnNpZ25lZCB0YXJnZXRTaXplKQogICAgICAgICAgICAgCiAg
ICAgICAgIC8vIFNocmluayB0aGUgdmVjdG9yIGJhY2sgZG93biBzbyB3ZSBkb24ndCB3YXN0ZSB0
aW1lIGluc3BlY3RpbmcKICAgICAgICAgLy8gZW1wdHkgTFJVIGxpc3RzIG9uIGZ1dHVyZSBwcnVu
ZXMuCi0gICAgICAgIGlmICghbV9hbGxSZXNvdXJjZXNbaV0tPmlzRW1wdHkoKSkKKyAgICAgICAg
aWYgKCFtX2FsbFJlc291cmNlc1tpXS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjYW5TaHJpbmtM
UlVMaXN0cyA9IGZhbHNlOwogICAgICAgICBlbHNlIGlmIChjYW5TaHJpbmtMUlVMaXN0cykKICAg
ICAgICAgICAgIG1fYWxsUmVzb3VyY2VzLnNocmluayhpKTsKQEAgLTQyNiwxMSArNDI0LDkgQEAg
YXV0byBNZW1vcnlDYWNoZTo6bHJ1TGlzdEZvcihDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpIC0+
IExSVUxpc3QmCiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICByZXNvdXJjZS5tX2xydUluZGV4ID0g
cXVldWVJbmRleDsKICNlbmRpZgotCi0gICAgbV9hbGxSZXNvdXJjZXMucmVzZXJ2ZUNhcGFjaXR5
KHF1ZXVlSW5kZXggKyAxKTsKLSAgICB3aGlsZSAobV9hbGxSZXNvdXJjZXMuc2l6ZSgpIDw9IHF1
ZXVlSW5kZXgpCi0gICAgICAgIG1fYWxsUmVzb3VyY2VzLnVuY2hlY2tlZEFwcGVuZChtYWtlVW5p
cXVlPExSVUxpc3Q+KCkpOwotICAgIHJldHVybiAqbV9hbGxSZXNvdXJjZXNbcXVldWVJbmRleF07
CisgICAgaWYgKG1fYWxsUmVzb3VyY2VzLnNpemUoKSA8PSBxdWV1ZUluZGV4KQorICAgICAgICBt
X2FsbFJlc291cmNlcy5ncm93KHF1ZXVlSW5kZXggKyAxKTsKKyAgICByZXR1cm4gbV9hbGxSZXNv
dXJjZXNbcXVldWVJbmRleF07CiB9CiAKIHZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZUZyb21MUlVM
aXN0KENhY2hlZFJlc291cmNlJiByZXNvdXJjZSkKQEAgLTQ4Niw3ICs0ODIsNyBAQCB2b2lkIE1l
bW9yeUNhY2hlOjpyZW1vdmVSZXNvdXJjZXNXaXRoT3JpZ2luKFNlY3VyaXR5T3JpZ2luJiBvcmln
aW4pCiAKICAgICBWZWN0b3I8Q2FjaGVkUmVzb3VyY2UqPiByZXNvdXJjZXNXaXRoT3JpZ2luOwog
ICAgIGZvciAoYXV0byYgcmVzb3VyY2VzIDogbV9zZXNzaW9uUmVzb3VyY2VzLnZhbHVlcygpKSB7
Ci0gICAgICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiAqcmVzb3VyY2VzKSB7CisgICAgICAgIGZv
ciAoYXV0byYga2V5VmFsdWUgOiByZXNvdXJjZXMpIHsKICAgICAgICAgICAgIGF1dG8mIHJlc291
cmNlID0gKmtleVZhbHVlLnZhbHVlOwogICAgICAgICAgICAgYXV0byYgcGFydGl0aW9uTmFtZSA9
IGtleVZhbHVlLmtleS5zZWNvbmQ7CiAgICAgICAgICAgICBpZiAocGFydGl0aW9uTmFtZSA9PSBv
cmlnaW5QYXJ0aXRpb24pIHsKQEAgLTUzMyw3ICs1MjksNyBAQCB2b2lkIE1lbW9yeUNhY2hlOjpy
ZW1vdmVSZXNvdXJjZXNXaXRoT3JpZ2lucyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0
IEhhcwogdm9pZCBNZW1vcnlDYWNoZTo6Z2V0T3JpZ2luc1dpdGhDYWNoZShTZWN1cml0eU9yaWdp
blNldCYgb3JpZ2lucykKIHsKICAgICBmb3IgKGF1dG8mIHJlc291cmNlcyA6IG1fc2Vzc2lvblJl
c291cmNlcy52YWx1ZXMoKSkgewotICAgICAgICBmb3IgKGF1dG8mIGtleVZhbHVlIDogKnJlc291
cmNlcykgeworICAgICAgICBmb3IgKGF1dG8mIGtleVZhbHVlIDogcmVzb3VyY2VzKSB7CiAgICAg
ICAgICAgICBhdXRvJiByZXNvdXJjZSA9ICprZXlWYWx1ZS52YWx1ZTsKICAgICAgICAgICAgIGF1
dG8mIHBhcnRpdGlvbk5hbWUgPSBrZXlWYWx1ZS5rZXkuc2Vjb25kOwogICAgICAgICAgICAgaWYg
KCFwYXJ0aXRpb25OYW1lLmlzRW1wdHkoKSkKQEAgLTU1MCw3ICs1NDYsNyBAQCBIYXNoU2V0PFJl
ZlB0cjxTZWN1cml0eU9yaWdpbj4+IE1lbW9yeUNhY2hlOjpvcmlnaW5zV2l0aENhY2hlKFBBTDo6
U2Vzc2lvbklEIHNlcwogCiAgICAgYXV0byBpdCA9IG1fc2Vzc2lvblJlc291cmNlcy5maW5kKHNl
c3Npb25JRCk7CiAgICAgaWYgKGl0ICE9IG1fc2Vzc2lvblJlc291cmNlcy5lbmQoKSkgewotICAg
ICAgICBmb3IgKGF1dG8mIGtleVZhbHVlIDogKml0LT52YWx1ZSkgeworICAgICAgICBmb3IgKGF1
dG8mIGtleVZhbHVlIDogaXQtPnZhbHVlKSB7CiAgICAgICAgICAgICBhdXRvJiByZXNvdXJjZSA9
ICprZXlWYWx1ZS52YWx1ZTsKICAgICAgICAgICAgIGF1dG8mIHBhcnRpdGlvbk5hbWUgPSBrZXlW
YWx1ZS5rZXkuc2Vjb25kOwogICAgICAgICAgICAgaWYgKCFwYXJ0aXRpb25OYW1lLmlzRW1wdHko
KSkKQEAgLTYwOSw3ICs2MDUsNyBAQCB2b2lkIE1lbW9yeUNhY2hlOjpyZW1vdmVSZXF1ZXN0RnJv
bVNlc3Npb25DYWNoZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dAogCiAgICAgYXV0
byYgbWVtb3J5Q2FjaGUgPSBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCk7CiAgICAgZm9yIChhdXRv
JiByZXNvdXJjZXMgOiBtZW1vcnlDYWNoZS5tX3Nlc3Npb25SZXNvdXJjZXMpIHsKLSAgICAgICAg
aWYgKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IG1lbW9yeUNhY2hlLnJlc291cmNlRm9yUmVx
dWVzdEltcGwocmVxdWVzdCwgKnJlc291cmNlcy52YWx1ZSkpCisgICAgICAgIGlmIChDYWNoZWRS
ZXNvdXJjZSogcmVzb3VyY2UgPSBtZW1vcnlDYWNoZS5yZXNvdXJjZUZvclJlcXVlc3RJbXBsKHJl
cXVlc3QsIHJlc291cmNlcy52YWx1ZSkpCiAgICAgICAgICAgICBtZW1vcnlDYWNoZS5yZW1vdmUo
KnJlc291cmNlKTsKICAgICB9CiB9CkBAIC02MjcsNyArNjIzLDcgQEAgTWVtb3J5Q2FjaGU6OlN0
YXRpc3RpY3MgTWVtb3J5Q2FjaGU6OmdldFN0YXRpc3RpY3MoKQogICAgIFN0YXRpc3RpY3Mgc3Rh
dHM7CiAKICAgICBmb3IgKGF1dG8mIHJlc291cmNlcyA6IG1fc2Vzc2lvblJlc291cmNlcy52YWx1
ZXMoKSkgewotICAgICAgICBmb3IgKGF1dG8qIHJlc291cmNlIDogcmVzb3VyY2VzLT52YWx1ZXMo
KSkgeworICAgICAgICBmb3IgKGF1dG8qIHJlc291cmNlIDogcmVzb3VyY2VzLnZhbHVlcygpKSB7
CiAgICAgICAgICAgICBzd2l0Y2ggKHJlc291cmNlLT50eXBlKCkpIHsKICAgICAgICAgICAgIGNh
c2UgQ2FjaGVkUmVzb3VyY2U6OlR5cGU6OkltYWdlUmVzb3VyY2U6CiAgICAgICAgICAgICAgICAg
c3RhdHMuaW1hZ2VzLmFkZFJlc291cmNlKCpyZXNvdXJjZSk7CkBAIC02NjIsNyArNjU4LDcgQEAg
dm9pZCBNZW1vcnlDYWNoZTo6c2V0RGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgd2hpbGUgKCFtX3Nlc3Npb25SZXNvdXJjZXMuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIGF1dG8mIHJlc291cmNlcyA9ICptX3Nlc3Npb25SZXNvdXJjZXMuYmVnaW4oKS0+dmFsdWU7
CisgICAgICAgIGF1dG8mIHJlc291cmNlcyA9IG1fc2Vzc2lvblJlc291cmNlcy5iZWdpbigpLT52
YWx1ZTsKICAgICAgICAgQVNTRVJUKCFyZXNvdXJjZXMuaXNFbXB0eSgpKTsKICAgICAgICAgcmVt
b3ZlKCpyZXNvdXJjZXMuYmVnaW4oKS0+dmFsdWUpOwogICAgIH0KQEAgLTc0Niw3ICs3NDIsNyBA
QCB2b2lkIE1lbW9yeUNhY2hlOjpkdW1wTFJVTGlzdHMoYm9vbCBpbmNsdWRlTGl2ZSkgY29uc3QK
ICAgICBpbnQgc2l6ZSA9IG1fYWxsUmVzb3VyY2VzLnNpemUoKTsKICAgICBmb3IgKGludCBpID0g
c2l6ZSAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgIFdURkxvZ0Fsd2F5cygiXG5MaXN0ICVk
OlxuIiwgaSk7Ci0gICAgICAgIGZvciAoYXV0byogcmVzb3VyY2UgOiAqbV9hbGxSZXNvdXJjZXNb
aV0pIHsKKyAgICAgICAgZm9yIChhdXRvKiByZXNvdXJjZSA6IG1fYWxsUmVzb3VyY2VzW2ldKSB7
CiAgICAgICAgICAgICBpZiAoaW5jbHVkZUxpdmUgfHwgIXJlc291cmNlLT5oYXNDbGllbnRzKCkp
CiAgICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCIgICVwICUuMjU1cyAlLjFmSywgJS4xZkss
IGFjY2Vzc2VzOiAldSwgY2xpZW50czogJWRcbiIsIHJlc291cmNlLCByZXNvdXJjZS0+dXJsKCku
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgcmVzb3VyY2UtPmRlY29kZWRTaXplKCkgLyAxMDI0LjBm
LCAocmVzb3VyY2UtPmVuY29kZWRTaXplKCkgKyByZXNvdXJjZS0+b3ZlcmhlYWRTaXplKCkpIC8g
MTAyNC4wZiwgcmVzb3VyY2UtPmFjY2Vzc0NvdW50KCksIHJlc291cmNlLT5udW1iZXJPZkNsaWVu
dHMoKSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9NZW1vcnlDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hl
LmgKaW5kZXggNTc0NDdmZjFhZjA0NmM2NDhlODRkOTc2YWJmMDA2MTBiZjAwMjhkYi4uYjBhN2I5
NTcxYWNkODZhZmJiZWVkMjUwZDVlM2RkYjJkYjE2NzkxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL01lbW9yeUNhY2hlLmgKQEAgLTE1MCw3ICsxNTAsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCByZXNvdXJjZUFjY2Vzc2VkKENhY2hlZFJlc291cmNlJik7CiAgICAgYm9vbCBpbkxpdmVE
ZWNvZGVkUmVzb3VyY2VzTGlzdChDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpIGNvbnN0IHsgcmV0
dXJuIG1fbGl2ZURlY29kZWRSZXNvdXJjZXMuY29udGFpbnMoJnJlc291cmNlKTsgfQogCi0gICAg
dHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxTZWN1cml0eU9yaWdpbj4+IFNlY3VyaXR5T3JpZ2luU2V0
OworICAgIHVzaW5nIFNlY3VyaXR5T3JpZ2luU2V0ID0gSGFzaFNldDxSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+PjsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVJlc291cmNlc1dpdGhPcmln
aW4oU2VjdXJpdHlPcmlnaW4mKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVJlc291
cmNlc1dpdGhPcmlnaW5zKFBBTDo6U2Vzc2lvbklELCBjb25zdCBIYXNoU2V0PFJlZlB0cjxTZWN1
cml0eU9yaWdpbj4+Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRPcmlnaW5zV2l0aENh
Y2hlKFNlY3VyaXR5T3JpZ2luU2V0JiBvcmlnaW5zKTsKQEAgLTE2NSwxMSArMTY1LDExIEBAIHB1
YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBydW5lTGl2ZVJlc291cmNlc1RvU2l6ZSh1
bnNpZ25lZCB0YXJnZXRTaXplLCBib29sIHNob3VsZERlc3Ryb3lEZWNvZGVkRGF0YUZvckFsbExp
dmVSZXNvdXJjZXMgPSBmYWxzZSk7CiAKIHByaXZhdGU6Ci0gICAgdHlwZWRlZiBIYXNoTWFwPHN0
ZDo6cGFpcjxVUkwsIFN0cmluZyAvKiBwYXJ0aXRpb25OYW1lICovPiwgQ2FjaGVkUmVzb3VyY2Uq
PiBDYWNoZWRSZXNvdXJjZU1hcDsKLSAgICB0eXBlZGVmIExpc3RIYXNoU2V0PENhY2hlZFJlc291
cmNlKj4gTFJVTGlzdDsKKyAgICB1c2luZyBDYWNoZWRSZXNvdXJjZU1hcCA9IEhhc2hNYXA8c3Rk
OjpwYWlyPFVSTCwgU3RyaW5nIC8qIHBhcnRpdGlvbk5hbWUgKi8+LCBDYWNoZWRSZXNvdXJjZSo+
OworICAgIHVzaW5nIExSVUxpc3QgPSBMaXN0SGFzaFNldDxDYWNoZWRSZXNvdXJjZSo+OwogCiAg
ICAgTWVtb3J5Q2FjaGUoKTsKLSAgICB+TWVtb3J5Q2FjaGUoKTsgLy8gTm90IGltcGxlbWVudGVk
IHRvIG1ha2Ugc3VyZSBub2JvZHkgYWNjaWRlbnRhbGx5IGNhbGxzIGRlbGV0ZSAtLSBXZWJDb3Jl
IGRvZXMgbm90IGRlbGV0ZSBzaW5nbGV0b25zLgorICAgIH5NZW1vcnlDYWNoZSgpID0gZGVsZXRl
OwogCiAgICAgTFJVTGlzdCYgbHJ1TGlzdEZvcihDYWNoZWRSZXNvdXJjZSYpOwogCkBAIC0xODAs
MTAgKzE4MCwxMCBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIGRlYWRDYXBhY2l0eSgpIGNvbnN0
OwogICAgIGJvb2wgbmVlZHNQcnVuaW5nKCkgY29uc3Q7CiAKLSAgICBDYWNoZWRSZXNvdXJjZSog
cmVzb3VyY2VGb3JSZXF1ZXN0SW1wbChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBDYWNoZWRSZXNv
dXJjZU1hcCYpOworICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZUZvclJlcXVlc3RJbXBsKGNv
bnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IENhY2hlZFJlc291cmNlTWFwJik7CiAKICAgICBD
YWNoZWRSZXNvdXJjZU1hcCYgZW5zdXJlU2Vzc2lvblJlc291cmNlTWFwKFBBTDo6U2Vzc2lvbklE
KTsKLSAgICBDYWNoZWRSZXNvdXJjZU1hcCogc2Vzc2lvblJlc291cmNlTWFwKFBBTDo6U2Vzc2lv
bklEKSBjb25zdDsKKyAgICBDYWNoZWRSZXNvdXJjZU1hcCogc2Vzc2lvblJlc291cmNlTWFwKFBB
TDo6U2Vzc2lvbklEKTsKIAogICAgIGJvb2wgbV9kaXNhYmxlZCB7IGZhbHNlIH07CiAgICAgYm9v
bCBtX2luUHJ1bmVSZXNvdXJjZXMgeyBmYWxzZSB9OwpAQCAtMTk5LDE0ICsxOTksMTQgQEAgcHJp
dmF0ZToKICAgICAvLyBTaXplLWFkanVzdGVkIGFuZCBwb3B1bGFyaXR5LWF3YXJlIExSVSBsaXN0
IGNvbGxlY3Rpb24gZm9yIGNhY2hlIG9iamVjdHMuICBUaGlzIGNvbGxlY3Rpb24gY2FuIGhvbGQK
ICAgICAvLyBtb3JlIHJlc291cmNlcyB0aGFuIHRoZSBjYWNoZWQgcmVzb3VyY2UgbWFwLCBzaW5j
ZSBpdCBjYW4gYWxzbyBob2xkICJzdGFsZSIgbXVsdGlwbGUgdmVyc2lvbnMgb2Ygb2JqZWN0cyB0
aGF0IGFyZQogICAgIC8vIHdhaXRpbmcgdG8gZGllIHdoZW4gdGhlIGNsaWVudHMgcmVmZXJlbmNp
bmcgdGhlbSBnbyBhd2F5LgotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TFJVTGlzdD4sIDMy
PiBtX2FsbFJlc291cmNlczsKKyAgICBWZWN0b3I8TFJVTGlzdCwgMzI+IG1fYWxsUmVzb3VyY2Vz
OwogICAgIAogICAgIC8vIExpc3QganVzdCBmb3IgbGl2ZSByZXNvdXJjZXMgd2l0aCBkZWNvZGVk
IGRhdGEuICBBY2Nlc3MgdG8gdGhpcyBsaXN0IGlzIGJhc2VkIG9mZiBvZiBwYWludGluZyB0aGUg
cmVzb3VyY2UuCiAgICAgTFJVTGlzdCBtX2xpdmVEZWNvZGVkUmVzb3VyY2VzOwogICAgIAogICAg
IC8vIEEgVVJMLWJhc2VkIG1hcCBvZiBhbGwgcmVzb3VyY2VzIHRoYXQgYXJlIGluIHRoZSBjYWNo
ZSAoaW5jbHVkaW5nIHRoZSBmcmVzaGVzdCB2ZXJzaW9uIG9mIG9iamVjdHMgdGhhdCBhcmUgY3Vy
cmVudGx5IGJlaW5nIAogICAgIC8vIHJlZmVyZW5jZWQgYnkgYSBXZWIgcGFnZSkuCi0gICAgdHlw
ZWRlZiBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkUmVzb3Vy
Y2VNYXA+PiBTZXNzaW9uQ2FjaGVkUmVzb3VyY2VNYXA7CisgICAgdXNpbmcgU2Vzc2lvbkNhY2hl
ZFJlc291cmNlTWFwID0gSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgQ2FjaGVkUmVzb3VyY2VNYXA+
OwogICAgIFNlc3Npb25DYWNoZWRSZXNvdXJjZU1hcCBtX3Nlc3Npb25SZXNvdXJjZXM7CiAKICAg
ICBUaW1lciBtX3BydW5lVGltZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zv
Y3VzQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5j
cHAKaW5kZXggYmZiYmFkZWE3MmUxNGM5YmM3NjA3ZWFlOWUzZTAzZjk1MDlmMmJkNy4uOWNlMjYz
NDUyNjlkMzUzMGU0NDA3MmZiNDJhMmU2MDQ1YThhY2NmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Rm9jdXNDb250cm9sbGVyLmNwcApAQCAtOTQyLDExICs5NDIsNyBAQCB2b2lkIEZvY3VzQ29udHJv
bGxlcjo6c2V0SXNWaXNpYmxlQW5kQWN0aXZlSW50ZXJuYWwoYm9vbCBjb250ZW50SXNWaXNpYmxl
KQogICAgICAgICBpZiAoIWZyYW1lVmlldykKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAg
ICAgIGNvbnN0IEhhc2hTZXQ8U2Nyb2xsYWJsZUFyZWEqPiogc2Nyb2xsYWJsZUFyZWFzID0gZnJh
bWVWaWV3LT5zY3JvbGxhYmxlQXJlYXMoKTsKLSAgICAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYXMp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBmb3IgKGF1dG8mIHNjcm9sbGFibGVB
cmVhIDogKnNjcm9sbGFibGVBcmVhcykgeworICAgICAgICBmb3IgKGF1dG8mIHNjcm9sbGFibGVB
cmVhIDogZnJhbWVWaWV3LT5zY3JvbGxhYmxlQXJlYXMoKSkgewogICAgICAgICAgICAgQVNTRVJU
KHNjcm9sbGFibGVBcmVhLT5zY3JvbGxiYXJzQ2FuQmVBY3RpdmUoKSB8fCBtX3BhZ2Uuc2hvdWxk
U3VwcHJlc3NTY3JvbGxiYXJBbmltYXRpb25zKCkpOwogCiAgICAgICAgICAgICBjb250ZW50QXJl
YURpZFNob3dPckhpZGUoc2Nyb2xsYWJsZUFyZWEsIGNvbnRlbnRJc1Zpc2libGUpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IDY1ODNjMzY5ZmRhMWMwNmQ5NDM3NWNjZGMyM2ZjOGI3
MjIzMGJmNWEuLmE5Mzk3NWU2NGQyNmQwN2FmMDFmYWRjOTBkNGExMGU1YTk1NWM4OWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTU3MywxMCArNTczLDEwIEBAIHZvaWQgRnJhbWVW
aWV3OjpkaWREZXN0cm95UmVuZGVyVHJlZSgpCiAKICAgICAvLyBJZiB0aGUgcmVuZGVyIHRyZWUg
aXMgZGVzdHJveWVkIGJlbG93IEZyYW1lVmlldzo6dXBkYXRlRW1iZWRkZWRPYmplY3RzKCksIHRo
ZXJlIHdpbGwgc3RpbGwgYmUgYSBudWxsIHNlbnRpbmVsIGluIHRoZSBzZXQuCiAgICAgLy8gRXZl
cnl0aGluZyBlbHNlIHNob3VsZCBoYXZlIHJlbW92ZWQgaXRzZWxmIGFzIHRoZSB0cmVlIHdhcyBm
ZWxsZWQuCi0gICAgQVNTRVJUKCFtX2VtYmVkZGVkT2JqZWN0c1RvVXBkYXRlIHx8IG1fZW1iZWRk
ZWRPYmplY3RzVG9VcGRhdGUtPmlzRW1wdHkoKSB8fCAobV9lbWJlZGRlZE9iamVjdHNUb1VwZGF0
ZS0+c2l6ZSgpID09IDEgJiYgbV9lbWJlZGRlZE9iamVjdHNUb1VwZGF0ZS0+Zmlyc3QoKSA9PSBu
dWxscHRyKSk7CisgICAgQVNTRVJUKG1fZW1iZWRkZWRPYmplY3RzVG9VcGRhdGUuaXNFbXB0eSgp
IHx8IChtX2VtYmVkZGVkT2JqZWN0c1RvVXBkYXRlLnNpemUoKSA9PSAxICYmIG1fZW1iZWRkZWRP
YmplY3RzVG9VcGRhdGUuZmlyc3QoKSA9PSBudWxscHRyKSk7CiAKLSAgICBBU1NFUlQoIW1fdmll
d3BvcnRDb25zdHJhaW5lZE9iamVjdHMgfHwgbV92aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cy0+
Y29tcHV0ZXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIW1fc2xvd1JlcGFpbnRPYmplY3RzIHx8IG1f
c2xvd1JlcGFpbnRPYmplY3RzLT5jb21wdXRlc0VtcHR5KCkpOworICAgIEFTU0VSVChtX3ZpZXdw
b3J0Q29uc3RyYWluZWRPYmplY3RzLmNvbXB1dGVzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1fc2xv
d1JlcGFpbnRPYmplY3RzLmNvbXB1dGVzRW1wdHkoKSk7CiB9CiAKIHZvaWQgRnJhbWVWaWV3Ojpz
ZXRDb250ZW50c1NpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKQEAgLTgxOCwxMCArODE4LDcgQEAg
dm9pZCBGcmFtZVZpZXc6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJMYXlvdXQoKQogCiB2
b2lkIEZyYW1lVmlldzo6aW52YWxpZGF0ZVNjcm9sbGJhcnNGb3JBbGxTY3JvbGxhYmxlQXJlYXMo
KQogewotICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYXMpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGZvciAoYXV0byogc2Nyb2xsYWJsZUFyZWEgOiAqbV9zY3JvbGxhYmxlQXJlYXMpCisgICAgZm9y
IChhdXRvKiBzY3JvbGxhYmxlQXJlYSA6IG1fc2Nyb2xsYWJsZUFyZWFzKQogICAgICAgICBzY3Jv
bGxhYmxlQXJlYS0+aW52YWxpZGF0ZVNjcm9sbGJhcnMoKTsKIH0KIApAQCAtMTM0MiwyMiArMTMz
OSwxNiBAQCBSZW5kZXJCb3gqIEZyYW1lVmlldzo6ZW1iZWRkZWRDb250ZW50Qm94KCkgY29uc3QK
IAogdm9pZCBGcmFtZVZpZXc6OmFkZEVtYmVkZGVkT2JqZWN0VG9VcGRhdGUoUmVuZGVyRW1iZWRk
ZWRPYmplY3QmIGVtYmVkZGVkT2JqZWN0KQogewotICAgIGlmICghbV9lbWJlZGRlZE9iamVjdHNU
b1VwZGF0ZSkKLSAgICAgICAgbV9lbWJlZGRlZE9iamVjdHNUb1VwZGF0ZSA9IG1ha2VVbmlxdWU8
TGlzdEhhc2hTZXQ8UmVuZGVyRW1iZWRkZWRPYmplY3QqPj4oKTsKLQogICAgIGF1dG8mIGVsZW1l
bnQgPSBlbWJlZGRlZE9iamVjdC5mcmFtZU93bmVyRWxlbWVudCgpOwogICAgIGlmIChpczxIVE1M
UGx1Z0luSW1hZ2VFbGVtZW50PihlbGVtZW50KSkKICAgICAgICAgZG93bmNhc3Q8SFRNTFBsdWdJ
bkltYWdlRWxlbWVudD4oZWxlbWVudCkuc2V0TmVlZHNXaWRnZXRVcGRhdGUodHJ1ZSk7CiAKLSAg
ICBtX2VtYmVkZGVkT2JqZWN0c1RvVXBkYXRlLT5hZGQoJmVtYmVkZGVkT2JqZWN0KTsKKyAgICBt
X2VtYmVkZGVkT2JqZWN0c1RvVXBkYXRlLmFkZCgmZW1iZWRkZWRPYmplY3QpOwogfQogCiB2b2lk
IEZyYW1lVmlldzo6cmVtb3ZlRW1iZWRkZWRPYmplY3RUb1VwZGF0ZShSZW5kZXJFbWJlZGRlZE9i
amVjdCYgZW1iZWRkZWRPYmplY3QpCiB7Ci0gICAgaWYgKCFtX2VtYmVkZGVkT2JqZWN0c1RvVXBk
YXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2VtYmVkZGVkT2JqZWN0c1RvVXBkYXRlLT5y
ZW1vdmUoJmVtYmVkZGVkT2JqZWN0KTsKKyAgICBtX2VtYmVkZGVkT2JqZWN0c1RvVXBkYXRlLnJl
bW92ZSgmZW1iZWRkZWRPYmplY3QpOwogfQogCiB2b2lkIEZyYW1lVmlldzo6c2V0TWVkaWFUeXBl
KGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlKQpAQCAtMTUxMSwxMSArMTUwMiw3IEBAIHZvaWQgRnJh
bWVWaWV3OjphZGRTbG93UmVwYWludE9iamVjdChSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKIHsK
ICAgICBib29sIGhhZFNsb3dSZXBhaW50T2JqZWN0cyA9IGhhc1Nsb3dSZXBhaW50T2JqZWN0cygp
OwogCi0gICAgaWYgKCFtX3Nsb3dSZXBhaW50T2JqZWN0cykKLSAgICAgICAgbV9zbG93UmVwYWlu
dE9iamVjdHMgPSBtYWtlVW5pcXVlPFdlYWtIYXNoU2V0PFJlbmRlckVsZW1lbnQ+PigpOwotCi0g
ICAgYXV0byBhZGRSZXN1bHQgPSBtX3Nsb3dSZXBhaW50T2JqZWN0cy0+YWRkKHJlbmRlcmVyKTsK
LSAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICBpZiAobV9zbG93UmVwYWludE9i
amVjdHMuYWRkKHJlbmRlcmVyKS5pc05ld0VudHJ5KSB7CiAgICAgICAgIGlmIChhdXRvIGxheWVy
ID0gcmVuZGVyZXIuZW5jbG9zaW5nTGF5ZXIoKSkKICAgICAgICAgICAgIGxheWVyLT5zZXROZWVk
c1Njcm9sbGluZ1RyZWVVcGRhdGUoKTsKICAgICAKQEAgLTE1MzEsMTAgKzE1MTgsNyBAQCB2b2lk
IEZyYW1lVmlldzo6YWRkU2xvd1JlcGFpbnRPYmplY3QoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIp
CiAKIHZvaWQgRnJhbWVWaWV3OjpyZW1vdmVTbG93UmVwYWludE9iamVjdChSZW5kZXJFbGVtZW50
JiByZW5kZXJlcikKIHsKLSAgICBpZiAoIW1fc2xvd1JlcGFpbnRPYmplY3RzKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBib29sIHJlbW92ZWQgPSBtX3Nsb3dSZXBhaW50T2JqZWN0cy0+cmVtb3Zl
KHJlbmRlcmVyKTsKKyAgICBib29sIHJlbW92ZWQgPSBtX3Nsb3dSZXBhaW50T2JqZWN0cy5yZW1v
dmUocmVuZGVyZXIpOwogICAgIGlmIChyZW1vdmVkKSB7CiAgICAgICAgIGlmIChhdXRvIGxheWVy
ID0gcmVuZGVyZXIuZW5jbG9zaW5nTGF5ZXIoKSkKICAgICAgICAgICAgIGxheWVyLT5zZXROZWVk
c1Njcm9sbGluZ1RyZWVVcGRhdGUoKTsKQEAgLTE1NDMsMjAgKzE1MjcsMTYgQEAgdm9pZCBGcmFt
ZVZpZXc6OnJlbW92ZVNsb3dSZXBhaW50T2JqZWN0KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKQog
ICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNsb3dSZXBhaW50T2JqZWN0c0RpZENo
YW5nZSgqdGhpcyk7CiAgICAgfQogCi0gICAgaWYgKCFtX3Nsb3dSZXBhaW50T2JqZWN0cy0+Y29t
cHV0ZXNFbXB0eSgpKQorICAgIGlmICghbV9zbG93UmVwYWludE9iamVjdHMuY29tcHV0ZXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Nsb3dSZXBhaW50T2JqZWN0cyA9IG51bGxw
dHI7CisgICAgbV9zbG93UmVwYWludE9iamVjdHMuY2xlYXIoKTsKICAgICB1cGRhdGVDYW5CbGl0
T25TY3JvbGxSZWN1cnNpdmVseSgpOwogfQogCiB2b2lkIEZyYW1lVmlldzo6YWRkVmlld3BvcnRD
b25zdHJhaW5lZE9iamVjdChSZW5kZXJMYXllck1vZGVsT2JqZWN0JiBvYmplY3QpCiB7Ci0gICAg
aWYgKCFtX3ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzKQotICAgICAgICBtX3ZpZXdwb3J0Q29u
c3RyYWluZWRPYmplY3RzID0gbWFrZVVuaXF1ZTxXZWFrSGFzaFNldDxSZW5kZXJMYXllck1vZGVs
T2JqZWN0Pj4oKTsKLQotICAgIGlmICghbV92aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cy0+Y29u
dGFpbnMob2JqZWN0KSkgewotICAgICAgICBtX3ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzLT5h
ZGQob2JqZWN0KTsKKyAgICBpZiAobV92aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cy5hZGQob2Jq
ZWN0KS5pc05ld0VudHJ5KSB7CiAgICAgICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKQogICAgICAg
ICAgICAgdXBkYXRlQ2FuQmxpdE9uU2Nyb2xsUmVjdXJzaXZlbHkoKTsKIApAQCAtMTU2Nyw3ICsx
NTQ3LDcgQEAgdm9pZCBGcmFtZVZpZXc6OmFkZFZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3QoUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdCYgb2JqZWN0KQogCiB2b2lkIEZyYW1lVmlldzo6cmVtb3ZlVmll
d3BvcnRDb25zdHJhaW5lZE9iamVjdChSZW5kZXJMYXllck1vZGVsT2JqZWN0JiBvYmplY3QpCiB7
Ci0gICAgaWYgKG1fdmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMgJiYgbV92aWV3cG9ydENvbnN0
cmFpbmVkT2JqZWN0cy0+cmVtb3ZlKG9iamVjdCkpIHsKKyAgICBpZiAobV92aWV3cG9ydENvbnN0
cmFpbmVkT2JqZWN0cy5yZW1vdmUob2JqZWN0KSkgewogICAgICAgICBpZiAoYXV0byBzY3JvbGxp
bmdDb29yZGluYXRvciA9IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCiAgICAgICAgICAg
ICBzY3JvbGxpbmdDb29yZGluYXRvci0+ZnJhbWVWaWV3Rml4ZWRPYmplY3RzRGlkQ2hhbmdlKCp0
aGlzKTsKIApAQCAtMjEwMiw3ICsyMDgyLDcgQEAgT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlv
bnM+IEZyYW1lVmlldzo6c3R5bGVDb2xvck9wdGlvbnMoKSBjb25zdAogCiBib29sIEZyYW1lVmll
dzo6c2Nyb2xsQ29udGVudHNGYXN0UGF0aChjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgY29u
c3QgSW50UmVjdCYgcmVjdFRvU2Nyb2xsLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKIHsKLSAg
ICBpZiAoIW1fdmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMgfHwgbV92aWV3cG9ydENvbnN0cmFp
bmVkT2JqZWN0cy0+Y29tcHV0ZXNFbXB0eSgpKSB7CisgICAgaWYgKG1fdmlld3BvcnRDb25zdHJh
aW5lZE9iamVjdHMuY29tcHV0ZXNFbXB0eSgpKSB7CiAgICAgICAgIGZyYW1lKCkucGFnZSgpLT5j
aHJvbWUoKS5zY3JvbGwoc2Nyb2xsRGVsdGEsIHJlY3RUb1Njcm9sbCwgY2xpcFJlY3QpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0yMTExLDcgKzIwOTEsNyBAQCBib29sIEZyYW1l
Vmlldzo6c2Nyb2xsQ29udGVudHNGYXN0UGF0aChjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwg
Y29uc3QgSW50UmVjdAogCiAgICAgLy8gR2V0IHRoZSByZWN0cyBvZiB0aGUgZml4ZWQgb2JqZWN0
cyB2aXNpYmxlIGluIHRoZSByZWN0VG9TY3JvbGwKICAgICBSZWdpb24gcmVnaW9uVG9VcGRhdGU7
Ci0gICAgZm9yIChhdXRvJiByZW5kZXJlciA6ICptX3ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3Rz
KSB7CisgICAgZm9yIChhdXRvJiByZW5kZXJlciA6IG1fdmlld3BvcnRDb25zdHJhaW5lZE9iamVj
dHMpIHsKICAgICAgICAgaWYgKCFyZW5kZXJlci5zdHlsZSgpLmhhc1ZpZXdwb3J0Q29uc3RyYWlu
ZWRQb3NpdGlvbigpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChyZW5kZXJl
ci5pc0NvbXBvc2l0ZWQoKSkKQEAgLTIxODEsMTIgKzIxNjEsOSBAQCB2b2lkIEZyYW1lVmlldzo6
c2Nyb2xsQ29udGVudHNTbG93UGF0aChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KQogCiB2b2lk
IEZyYW1lVmlldzo6cmVwYWludFNsb3dSZXBhaW50T2JqZWN0cygpCiB7Ci0gICAgaWYgKCFtX3Ns
b3dSZXBhaW50T2JqZWN0cykKLSAgICAgICAgcmV0dXJuOwotCiAgICAgLy8gUmVuZGVyZXJzIHdp
dGggZml4ZWQgYmFja2dyb3VuZHMgbWF5IGJlIGluIGNvbXBvc2l0aW5nIGxheWVycywgc28gd2Ug
bmVlZCB0byBleHBsaWNpdGx5CiAgICAgLy8gcmVwYWludCB0aGVtIGFmdGVyIHNjcm9sbGluZy4K
LSAgICBmb3IgKGF1dG8mIHJlbmRlcmVyIDogKm1fc2xvd1JlcGFpbnRPYmplY3RzKQorICAgIGZv
ciAoYXV0byYgcmVuZGVyZXIgOiBtX3Nsb3dSZXBhaW50T2JqZWN0cykKICAgICAgICAgcmVuZGVy
ZXIucmVwYWludFNsb3dSZXBhaW50T2JqZWN0KCk7CiB9CiAKQEAgLTI0NjgsNyArMjQ0NSw3IEBA
IHZvaWQgRnJhbWVWaWV3OjpzZXRWaWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0c05lZWRMYXlvdXQo
KQogICAgIGlmICghaGFzVmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgZm9yIChhdXRvJiByZW5kZXJlciA6ICptX3ZpZXdwb3J0Q29uc3RyYWluZWRP
YmplY3RzKSB7CisgICAgZm9yIChhdXRvJiByZW5kZXJlciA6IG1fdmlld3BvcnRDb25zdHJhaW5l
ZE9iamVjdHMpIHsKICAgICAgICAgcmVuZGVyZXIuc2V0TmVlZHNMYXlvdXQoKTsKICAgICAgICAg
aWYgKHJlbmRlcmVyLmhhc0xheWVyKCkpIHsKICAgICAgICAgICAgIGF1dG8qIGxheWVyID0gZG93
bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KHJlbmRlcmVyKS5sYXllcigpOwpAQCAtMzI1OSwy
MyArMzIzNiwyMyBAQCB2b2lkIEZyYW1lVmlldzo6dXBkYXRlRW1iZWRkZWRPYmplY3QoUmVuZGVy
RW1iZWRkZWRPYmplY3QmIGVtYmVkZGVkT2JqZWN0KQogYm9vbCBGcmFtZVZpZXc6OnVwZGF0ZUVt
YmVkZGVkT2JqZWN0cygpCiB7CiAgICAgU2V0Rm9yU2NvcGU8Ym9vbD4gaW5VcGRhdGVFbWJlZGRl
ZE9iamVjdHMobV9pblVwZGF0ZUVtYmVkZGVkT2JqZWN0cywgdHJ1ZSk7Ci0gICAgaWYgKGxheW91
dENvbnRleHQoKS5pc0xheW91dE5lc3RlZCgpIHx8ICFtX2VtYmVkZGVkT2JqZWN0c1RvVXBkYXRl
IHx8IG1fZW1iZWRkZWRPYmplY3RzVG9VcGRhdGUtPmlzRW1wdHkoKSkKKyAgICBpZiAobGF5b3V0
Q29udGV4dCgpLmlzTGF5b3V0TmVzdGVkKCkgfHwgbV9lbWJlZGRlZE9iamVjdHNUb1VwZGF0ZS5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgV2lkZ2V0SGllcmFyY2h5VXBk
YXRlc1N1c3BlbnNpb25TY29wZSBzdXNwZW5kV2lkZ2V0SGllcmFyY2h5VXBkYXRlczsKIAogICAg
IC8vIEluc2VydCBhIG1hcmtlciBmb3Igd2hlcmUgd2Ugc2hvdWxkIHN0b3AuCi0gICAgQVNTRVJU
KCFtX2VtYmVkZGVkT2JqZWN0c1RvVXBkYXRlLT5jb250YWlucyhudWxscHRyKSk7Ci0gICAgbV9l
bWJlZGRlZE9iamVjdHNUb1VwZGF0ZS0+YWRkKG51bGxwdHIpOworICAgIEFTU0VSVCghbV9lbWJl
ZGRlZE9iamVjdHNUb1VwZGF0ZS5jb250YWlucyhudWxscHRyKSk7CisgICAgbV9lbWJlZGRlZE9i
amVjdHNUb1VwZGF0ZS5hZGQobnVsbHB0cik7CiAKLSAgICB3aGlsZSAoIW1fZW1iZWRkZWRPYmpl
Y3RzVG9VcGRhdGUtPmlzRW1wdHkoKSkgewotICAgICAgICBhdXRvIGVtYmVkZGVkT2JqZWN0ID0g
bV9lbWJlZGRlZE9iamVjdHNUb1VwZGF0ZS0+dGFrZUZpcnN0KCk7CisgICAgd2hpbGUgKCFtX2Vt
YmVkZGVkT2JqZWN0c1RvVXBkYXRlLmlzRW1wdHkoKSkgeworICAgICAgICBhdXRvIGVtYmVkZGVk
T2JqZWN0ID0gbV9lbWJlZGRlZE9iamVjdHNUb1VwZGF0ZS50YWtlRmlyc3QoKTsKICAgICAgICAg
aWYgKCFlbWJlZGRlZE9iamVjdCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB1cGRhdGVF
bWJlZGRlZE9iamVjdCgqZW1iZWRkZWRPYmplY3QpOwogICAgIH0KIAotICAgIHJldHVybiBtX2Vt
YmVkZGVkT2JqZWN0c1RvVXBkYXRlLT5pc0VtcHR5KCk7CisgICAgcmV0dXJuIG1fZW1iZWRkZWRP
YmplY3RzVG9VcGRhdGUuaXNFbXB0eSgpOwogfQogCiB2b2lkIEZyYW1lVmlldzo6dXBkYXRlRW1i
ZWRkZWRPYmplY3RzVGltZXJGaXJlZCgpCkBAIC0zNzgyLDcgKzM3NTksNyBAQCBmbG9hdCBGcmFt
ZVZpZXc6OmFkanVzdFNjcm9sbFN0ZXBGb3JGaXhlZENvbnRlbnQoZmxvYXQgc3RlcCwgU2Nyb2xs
YmFyT3JpZW50YXRpbwogICAgIGlmIChncmFudWxhcml0eSAhPSBTY3JvbGxCeVBhZ2UgfHwgb3Jp
ZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKICAgICAgICAgcmV0dXJuIHN0ZXA7CiAK
LSAgICBUcmFja2VkUmVuZGVyZXJMaXN0SGFzaFNldCogcG9zaXRpb25lZE9iamVjdHMgPSBudWxs
cHRyOworICAgIGNvbnN0IFRyYWNrZWRSZW5kZXJlckxpc3RIYXNoU2V0KiBwb3NpdGlvbmVkT2Jq
ZWN0cyA9IG51bGxwdHI7CiAgICAgaWYgKFJlbmRlclZpZXcqIHJvb3QgPSBmcmFtZSgpLmNvbnRl
bnRSZW5kZXJlcigpKSB7CiAgICAgICAgIGlmICghcm9vdC0+aGFzUG9zaXRpb25lZE9iamVjdHMo
KSkKICAgICAgICAgICAgIHJldHVybiBzdGVwOwpAQCAtMzk0NSwxMSArMzkyMiwxMSBAQCB2b2lk
IEZyYW1lVmlldzo6dXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoKQogICAgICAgICByZXR1cm47CiAK
ICAgICBpZiAoIWlzU2Nyb2xsYWJsZSgpKSB7Ci0gICAgICAgIHBhcmVudEZyYW1lVmlldy0+cmVt
b3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisgICAgICAgIHBhcmVudEZyYW1lVmlldy0+cmVtb3Zl
U2Nyb2xsYWJsZUFyZWEoKnRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcGFy
ZW50RnJhbWVWaWV3LT5hZGRTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKyAgICBwYXJlbnRGcmFtZVZp
ZXctPmFkZFNjcm9sbGFibGVBcmVhKCp0aGlzKTsKIH0KIAogYm9vbCBGcmFtZVZpZXc6OnNob3Vs
ZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QKQEAgLTM5NzYsMTAgKzM5NTMsNyBAQCB2
b2lkIEZyYW1lVmlldzo6bm90aWZ5UGFnZVRoYXRDb250ZW50QXJlYVdpbGxQYWludCgpIGNvbnN0
CiAKICAgICBjb250ZW50QXJlYVdpbGxQYWludCgpOwogCi0gICAgaWYgKCFtX3Njcm9sbGFibGVB
cmVhcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChhdXRvJiBzY3JvbGxhYmxlQXJlYSA6
ICptX3Njcm9sbGFibGVBcmVhcykKKyAgICBmb3IgKGF1dG8mIHNjcm9sbGFibGVBcmVhIDogbV9z
Y3JvbGxhYmxlQXJlYXMpCiAgICAgICAgIHNjcm9sbGFibGVBcmVhLT5jb250ZW50QXJlYVdpbGxQ
YWludCgpOwogfQogCkBAIC01MDgwLDEyICs1MDU0LDkgQEAgU3RyaW5nIEZyYW1lVmlldzo6dHJh
Y2tlZFJlcGFpbnRSZWN0c0FzVGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIHRzLnJlbGVhc2UoKTsK
IH0KIAotYm9vbCBGcmFtZVZpZXc6OmFkZFNjcm9sbGFibGVBcmVhKFNjcm9sbGFibGVBcmVhKiBz
Y3JvbGxhYmxlQXJlYSkKK2Jvb2wgRnJhbWVWaWV3OjphZGRTY3JvbGxhYmxlQXJlYShTY3JvbGxh
YmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCiB7Ci0gICAgaWYgKCFtX3Njcm9sbGFibGVBcmVhcykK
LSAgICAgICAgbV9zY3JvbGxhYmxlQXJlYXMgPSBtYWtlVW5pcXVlPFNjcm9sbGFibGVBcmVhU2V0
PigpOwotICAgIAotICAgIGlmIChtX3Njcm9sbGFibGVBcmVhcy0+YWRkKHNjcm9sbGFibGVBcmVh
KS5pc05ld0VudHJ5KSB7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWFzLmFkZCgmc2Nyb2xsYWJs
ZUFyZWEpLmlzTmV3RW50cnkpIHsKICAgICAgICAgc2Nyb2xsYWJsZUFyZWFTZXRDaGFuZ2VkKCk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTUwOTMsMTggKzUwNjQsMTggQEAgYm9v
bCBGcmFtZVZpZXc6OmFkZFNjcm9sbGFibGVBcmVhKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxl
QXJlYSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgRnJhbWVWaWV3OjpyZW1vdmVTY3Jv
bGxhYmxlQXJlYShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCitib29sIEZyYW1lVmll
dzo6cmVtb3ZlU2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQog
ewotICAgIGlmIChtX3Njcm9sbGFibGVBcmVhcyAmJiBtX3Njcm9sbGFibGVBcmVhcy0+cmVtb3Zl
KHNjcm9sbGFibGVBcmVhKSkgeworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhcy5yZW1vdmUoJnNj
cm9sbGFibGVBcmVhKSkgewogICAgICAgICBzY3JvbGxhYmxlQXJlYVNldENoYW5nZWQoKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBG
cmFtZVZpZXc6OmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFi
bGVBcmVhKSBjb25zdAorYm9vbCBGcmFtZVZpZXc6OmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEoU2Ny
b2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKSBjb25zdAogewotICAgIHJldHVybiBtX3Njcm9s
bGFibGVBcmVhcyAmJiBtX3Njcm9sbGFibGVBcmVhcy0+Y29udGFpbnMoc2Nyb2xsYWJsZUFyZWEp
OworICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhcy5jb250YWlucygmc2Nyb2xsYWJsZUFyZWEp
OwogfQogCiB2b2lkIEZyYW1lVmlldzo6c2Nyb2xsYWJsZUFyZWFTZXRDaGFuZ2VkKCkKQEAgLTUx
MjQsNyArNTA5NSw3IEBAIHZvaWQgRnJhbWVWaWV3OjphZGRDaGlsZChXaWRnZXQmIHdpZGdldCkK
ICAgICBpZiAoaXM8RnJhbWVWaWV3Pih3aWRnZXQpKSB7CiAgICAgICAgIGF1dG8mIGNoaWxkRnJh
bWVWaWV3ID0gZG93bmNhc3Q8RnJhbWVWaWV3Pih3aWRnZXQpOwogICAgICAgICBpZiAoY2hpbGRG
cmFtZVZpZXcuaXNTY3JvbGxhYmxlKCkpCi0gICAgICAgICAgICBhZGRTY3JvbGxhYmxlQXJlYSgm
Y2hpbGRGcmFtZVZpZXcpOworICAgICAgICAgICAgYWRkU2Nyb2xsYWJsZUFyZWEoY2hpbGRGcmFt
ZVZpZXcpOwogICAgIH0KIAogICAgIFNjcm9sbFZpZXc6OmFkZENoaWxkKHdpZGdldCk7CkBAIC01
MTMzLDcgKzUxMDQsNyBAQCB2b2lkIEZyYW1lVmlldzo6YWRkQ2hpbGQoV2lkZ2V0JiB3aWRnZXQp
CiB2b2lkIEZyYW1lVmlldzo6cmVtb3ZlQ2hpbGQoV2lkZ2V0JiB3aWRnZXQpCiB7CiAgICAgaWYg
KGlzPEZyYW1lVmlldz4od2lkZ2V0KSkKLSAgICAgICAgcmVtb3ZlU2Nyb2xsYWJsZUFyZWEoJmRv
d25jYXN0PEZyYW1lVmlldz4od2lkZ2V0KSk7CisgICAgICAgIHJlbW92ZVNjcm9sbGFibGVBcmVh
KGRvd25jYXN0PEZyYW1lVmlldz4od2lkZ2V0KSk7CiAKICAgICBTY3JvbGxWaWV3OjpyZW1vdmVD
aGlsZCh3aWRnZXQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKaW5kZXggOWVkMWM3MjNlOTlj
MmEyY2E2MTljYzg4NWVlMmFjYTU2NjZmOWEwZi4uYWJmZTdhYzMwMmRlNmFlYTk1ZDk4ZGE1M2Zm
MDc0OGZmYTliNjNlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCkBAIC0zMDUsMTUgKzMwNSwx
NSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZFNsb3dSZXBhaW50T2JqZWN0KFJlbmRlckVsZW1l
bnQmKTsKICAgICB2b2lkIHJlbW92ZVNsb3dSZXBhaW50T2JqZWN0KFJlbmRlckVsZW1lbnQmKTsK
LSAgICBib29sIGhhc1Nsb3dSZXBhaW50T2JqZWN0KGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRl
cmVyKSBjb25zdCB7IHJldHVybiBtX3Nsb3dSZXBhaW50T2JqZWN0cyAmJiBtX3Nsb3dSZXBhaW50
T2JqZWN0cy0+Y29udGFpbnMocmVuZGVyZXIpOyB9Ci0gICAgYm9vbCBoYXNTbG93UmVwYWludE9i
amVjdHMoKSBjb25zdCB7IHJldHVybiBtX3Nsb3dSZXBhaW50T2JqZWN0cyAmJiAhbV9zbG93UmVw
YWludE9iamVjdHMtPmNvbXB1dGVzRW1wdHkoKTsgfQotICAgIFdlYWtIYXNoU2V0PFJlbmRlckVs
ZW1lbnQ+KiBzbG93UmVwYWludE9iamVjdHMoKSBjb25zdCB7IHJldHVybiBtX3Nsb3dSZXBhaW50
T2JqZWN0cy5nZXQoKTsgfQorICAgIGJvb2wgaGFzU2xvd1JlcGFpbnRPYmplY3QoY29uc3QgUmVu
ZGVyRWxlbWVudCYgcmVuZGVyZXIpIGNvbnN0IHsgcmV0dXJuIG1fc2xvd1JlcGFpbnRPYmplY3Rz
LmNvbnRhaW5zKHJlbmRlcmVyKTsgfQorICAgIGJvb2wgaGFzU2xvd1JlcGFpbnRPYmplY3RzKCkg
Y29uc3QgeyByZXR1cm4gIW1fc2xvd1JlcGFpbnRPYmplY3RzLmNvbXB1dGVzRW1wdHkoKTsgfQor
ICAgIGNvbnN0IFdlYWtIYXNoU2V0PFJlbmRlckVsZW1lbnQ+JiBzbG93UmVwYWludE9iamVjdHMo
KSBjb25zdCB7IHJldHVybiBtX3Nsb3dSZXBhaW50T2JqZWN0czsgfQogCiAgICAgLy8gSW5jbHVk
ZXMgZml4ZWQtIGFuZCBzdGlja3ktcG9zaXRpb24gb2JqZWN0cy4KICAgICB2b2lkIGFkZFZpZXdw
b3J0Q29uc3RyYWluZWRPYmplY3QoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYpOwogICAgIHZvaWQg
cmVtb3ZlVmlld3BvcnRDb25zdHJhaW5lZE9iamVjdChSZW5kZXJMYXllck1vZGVsT2JqZWN0Jik7
Ci0gICAgY29uc3QgV2Vha0hhc2hTZXQ8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4qIHZpZXdwb3J0
Q29uc3RyYWluZWRPYmplY3RzKCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydENvbnN0cmFpbmVk
T2JqZWN0cy5nZXQoKTsgfQotICAgIGJvb2wgaGFzVmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMo
KSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzICYmICFtX3ZpZXdw
b3J0Q29uc3RyYWluZWRPYmplY3RzLT5jb21wdXRlc0VtcHR5KCk7IH0KKyAgICBjb25zdCBXZWFr
SGFzaFNldDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PiYgdmlld3BvcnRDb25zdHJhaW5lZE9iamVj
dHMoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzOyB9CisgICAg
Ym9vbCBoYXNWaWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cygpIGNvbnN0IHsgcmV0dXJuICFtX3Zp
ZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzLmNvbXB1dGVzRW1wdHkoKTsgfQogICAgIAogICAgIGZs
b2F0IGZyYW1lU2NhbGVGYWN0b3IoKSBjb25zdDsKIApAQCAtNTUzLDEzICs1NTMsMTMgQEAgcHVi
bGljOgogICAgIGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiB0cmFja2VkUmVwYWludFJlY3RzKCkg
Y29uc3QgeyByZXR1cm4gbV90cmFja2VkUmVwYWludFJlY3RzOyB9CiAgICAgU3RyaW5nIHRyYWNr
ZWRSZXBhaW50UmVjdHNBc1RleHQoKSBjb25zdDsKIAotICAgIHR5cGVkZWYgSGFzaFNldDxTY3Jv
bGxhYmxlQXJlYSo+IFNjcm9sbGFibGVBcmVhU2V0OwogICAgIC8vIFJldHVybnMgd2hldGhlciB0
aGUgc2Nyb2xsYWJsZSBhcmVhIGhhcyBqdXN0IGJlZW4gbmV3bHkgYWRkZWQuCi0gICAgV0VCQ09S
RV9FWFBPUlQgYm9vbCBhZGRTY3JvbGxhYmxlQXJlYShTY3JvbGxhYmxlQXJlYSopOworICAgIFdF
QkNPUkVfRVhQT1JUIGJvb2wgYWRkU2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEmKTsKICAg
ICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIHNjcm9sbGFibGUgYXJlYSBoYXMganVzdCBiZWVuIHJl
bW92ZWQuCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCByZW1vdmVTY3JvbGxhYmxlQXJlYShTY3Jv
bGxhYmxlQXJlYSopOwotICAgIGJvb2wgY29udGFpbnNTY3JvbGxhYmxlQXJlYShTY3JvbGxhYmxl
QXJlYSopIGNvbnN0OwotICAgIGNvbnN0IFNjcm9sbGFibGVBcmVhU2V0KiBzY3JvbGxhYmxlQXJl
YXMoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGVBcmVhcy5nZXQoKTsgfQorICAgIFdFQkNP
UkVfRVhQT1JUIGJvb2wgcmVtb3ZlU2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEmKTsKKyAg
ICBib29sIGNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEmKSBjb25zdDsKKyAg
ICB1c2luZyBTY3JvbGxhYmxlQXJlYVNldCA9IEhhc2hTZXQ8U2Nyb2xsYWJsZUFyZWEqPjsKKyAg
ICBjb25zdCBTY3JvbGxhYmxlQXJlYVNldCYgc2Nyb2xsYWJsZUFyZWFzKCkgY29uc3QgeyByZXR1
cm4gbV9zY3JvbGxhYmxlQXJlYXM7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkQ2hp
bGQoV2lkZ2V0JikgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVDaGlsZChX
aWRnZXQmKSBmaW5hbDsKQEAgLTg2Niw4ICs4NjYsOCBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAg
ICBIYXNoU2V0PFdpZGdldCo+IG1fd2lkZ2V0c0luUmVuZGVyVHJlZTsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8TGlzdEhhc2hTZXQ8UmVuZGVyRW1iZWRkZWRPYmplY3QqPj4gbV9lbWJlZGRlZE9iamVj
dHNUb1VwZGF0ZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2Vha0hhc2hTZXQ8UmVuZGVyRWxlbWVu
dD4+IG1fc2xvd1JlcGFpbnRPYmplY3RzOworICAgIExpc3RIYXNoU2V0PFJlbmRlckVtYmVkZGVk
T2JqZWN0Kj4gbV9lbWJlZGRlZE9iamVjdHNUb1VwZGF0ZTsKKyAgICBXZWFrSGFzaFNldDxSZW5k
ZXJFbGVtZW50PiBtX3Nsb3dSZXBhaW50T2JqZWN0czsKIAogICAgIFJlZlB0cjxDb250YWluZXJO
b2RlPiBtX21haW50YWluU2Nyb2xsUG9zaXRpb25BbmNob3I7CiAgICAgUmVmUHRyPE5vZGU+IG1f
bm9kZVRvRHJhdzsKQEAgLTkyNyw4ICs5MjcsOCBAQCBwcml2YXRlOgogICAgIC8vIFRoZSBpbnRy
aW5zaWMgY29udGVudCBzaXplIGRlY2lkZWQgYnkgYXV0b3NpemluZy4KICAgICBJbnRTaXplIG1f
YXV0b1NpemVDb250ZW50U2l6ZTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxhYmxlQXJl
YVNldD4gbV9zY3JvbGxhYmxlQXJlYXM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYWtIYXNoU2V0
PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+PiBtX3ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzOwor
ICAgIFNjcm9sbGFibGVBcmVhU2V0IG1fc2Nyb2xsYWJsZUFyZWFzOworICAgIFdlYWtIYXNoU2V0
PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+IG1fdmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHM7CiAK
ICAgICBPcHRpb25TZXQ8TGF5b3V0TWlsZXN0b25lPiBtX21pbGVzdG9uZXNQZW5kaW5nUGFpbnQ7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVtb3J5UmVsZWFzZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL01lbW9yeVJlbGVhc2UuY3BwCmluZGV4IDZkZTZjMGUyNjMzMzJi
ZTFkNjcwZTFhNjlhZmUzYzg2N2I0ZjMwOTcuLjljYjBiYTRmZGIxMGM3NmRiNjQxNzQ5MzU0MjU2
Y2RjZmU0ZDBmOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVtb3J5UmVsZWFz
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9NZW1vcnlSZWxlYXNlLmNwcApAQCAtMjE3
LDggKzIxNyw3IEBAIHZvaWQgbG9nTWVtb3J5U3RhdGlzdGljc0F0VGltZU9mRGVhdGgoKQogICAg
IFJFTEVBU0VfTE9HKE1lbW9yeVByZXNzdXJlLCAiUGFnZSBjb3VudDogJXUiLCBwYWdlQ291bnQo
KSk7CiAgICAgUkVMRUFTRV9MT0coTWVtb3J5UHJlc3N1cmUsICJEb2N1bWVudCBjb3VudDogJXUi
LCBEb2N1bWVudDo6YWxsRG9jdW1lbnRzKCkuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0xPRyhNZW1v
cnlQcmVzc3VyZSwgIkxpdmUgSmF2YVNjcmlwdCBvYmplY3RzOiIpOwotICAgIGF1dG8gdHlwZUNv
dW50cyA9IHZtLmhlYXAub2JqZWN0VHlwZUNvdW50cygpOwotICAgIGZvciAoYXV0byYgaXQgOiAq
dHlwZUNvdW50cykKKyAgICBmb3IgKGF1dG8mIGl0IDogdm0uaGVhcC5vYmplY3RUeXBlQ291bnRz
KCkpCiAgICAgICAgIFJFTEVBU0VfTE9HKE1lbW9yeVByZXNzdXJlLCAiICAlczogJWQiLCBpdC5r
ZXksIGl0LnZhbHVlKTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKaW5kZXggNjFkZDg2MDU4
ZTdhMWU3MjMwZWRkNjc4NmNlODRlMTQzNGZjY2RiZS4uYzgwZmUxMGQ0NmJmYzQyYmM0MjY3NjBj
ODI3Mzg5YTYyYTliZjJjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC0xMzQ1LDIwICsxMzQ1LDE0
IEBAIHZvaWQgUGFnZTo6bG9ja0FsbE92ZXJsYXlTY3JvbGxiYXJzVG9IaWRkZW4oYm9vbCBsb2Nr
T3ZlcmxheVNjcm9sbGJhcnMpCiAKICAgICB2aWV3LT5sb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRl
VG9IaWRkZW4obG9ja092ZXJsYXlTY3JvbGxiYXJzKTsKICAgICAKLSAgICBmb3IgKEZyYW1lKiBm
cmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJz
ZU5leHQoKSkgewotICAgICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGZyYW1lLT52aWV3KCk7
Ci0gICAgICAgIGlmICghZnJhbWVWaWV3KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgY29uc3QgSGFzaFNldDxTY3JvbGxhYmxlQXJlYSo+KiBzY3JvbGxhYmxlQXJlYXMgPSBmcmFt
ZVZpZXctPnNjcm9sbGFibGVBcmVhcygpOwotICAgICAgICBpZiAoIXNjcm9sbGFibGVBcmVhcykK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGZvciAoYXV0byYgc2Nyb2xsYWJsZUFy
ZWEgOiAqc2Nyb2xsYWJsZUFyZWFzKQotICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEtPmxvY2tP
dmVybGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbihsb2NrT3ZlcmxheVNjcm9sbGJhcnMpOworICAg
IGZvciAoYXV0byBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRy
ZWUoKS50cmF2ZXJzZU5leHQoKSkgeworICAgICAgICBpZiAoYXV0byBmcmFtZVZpZXcgPSBmcmFt
ZS0+dmlldygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHNjcm9sbGFibGVBcmVhIDogZnJh
bWVWaWV3LT5zY3JvbGxhYmxlQXJlYXMoKSkKKyAgICAgICAgICAgICAgICBzY3JvbGxhYmxlQXJl
YS0+bG9ja092ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVuKGxvY2tPdmVybGF5U2Nyb2xsYmFy
cyk7CisgICAgICAgIH0KICAgICB9CiB9Ci0gICAgCisKIHZvaWQgUGFnZTo6c2V0VmVydGljYWxT
Y3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHkgZWxhc3RpY2l0eSkKIHsKICAgICBpZiAo
bV92ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkgPT0gZWxhc3RpY2l0eSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKaW5k
ZXggOTE3YTFhZDc2OWQ5NGNiMGVjMzUxNjljMWRmMDkwZDc2OTU0YTM5Mi4uY2IyYjE1NWZiZTIx
MWNlMTlmMmZjMDI0YTc0OTIyMzc5OTJkNTA0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgpAQCAtMzc0LDkgKzM3NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlh
bGl6ZSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkU2NoZWR1bGVQYWlyKFJlZjxTY2hl
ZHVsZVBhaXI+JiYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlU2NoZWR1bGVQYWly
KFJlZjxTY2hlZHVsZVBhaXI+JiYpOwotICAgIFNjaGVkdWxlUGFpckhhc2hTZXQqIHNjaGVkdWxl
ZFJ1bkxvb3BQYWlycygpIHsgcmV0dXJuIG1fc2NoZWR1bGVkUnVuTG9vcFBhaXJzLmdldCgpOyB9
Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2NoZWR1bGVQYWlySGFzaFNldD4gbV9zY2hlZHVsZWRS
dW5Mb29wUGFpcnM7CisgICAgY29uc3QgU2NoZWR1bGVQYWlySGFzaFNldCYgc2NoZWR1bGVkUnVu
TG9vcFBhaXJzKCkgY29uc3QgeyByZXR1cm4gbV9zY2hlZHVsZWRSdW5Mb29wUGFpcnM7IH0KICNl
bmRpZgogCiAgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0
aW9uKCkgY29uc3Q7CkBAIC0xMTc0LDYgKzExNzIsMTAgQEAgcHJpdmF0ZToKIAogICAgIGNvbnN0
IGJvb2wgbV9odHRwc1VwZ3JhZGVFbmFibGVkIHsgdHJ1ZSB9OwogICAgIG11dGFibGUgTWVkaWFT
ZXNzaW9uR3JvdXBJZGVudGlmaWVyIG1fbWVkaWFTZXNzaW9uR3JvdXBJZGVudGlmaWVyOworCisj
aWYgUExBVEZPUk0oQ09DT0EpCisgICAgU2NoZWR1bGVQYWlySGFzaFNldCBtX3NjaGVkdWxlZFJ1
bkxvb3BQYWlyczsKKyNlbmRpZgogfTsKIAogaW5saW5lIFBhZ2VHcm91cCYgUGFnZTo6Z3JvdXAo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZUxvZ2dpbmcuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZUxvZ2dpbmcuY3BwCmluZGV4IGM2ODQ5
NDVhODBlMDQwYTY3ZjQxMzAyODc0MjA2NzE4MTc0Y2RmZDAuLjM4M2RkNTU0ZmIzOWY3NWU3ZDFl
MGY1NzNhNGRmMmViOTIwNjEyMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGVy
Zm9ybWFuY2VMb2dnaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNl
TG9nZ2luZy5jcHAKQEAgLTgwLDcgKzgwLDcgQEAgSGFzaE1hcDxjb25zdCBjaGFyKiwgc2l6ZV90
PiBQZXJmb3JtYW5jZUxvZ2dpbmc6Om1lbW9yeVVzYWdlU3RhdGlzdGljcyhTaG91bGRJbmMKIAog
SGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+IFBlcmZvcm1hbmNlTG9nZ2luZzo6amF2YVNjcmlw
dE9iamVjdENvdW50cygpCiB7Ci0gICAgcmV0dXJuIFdURk1vdmUoKmNvbW1vblZNKCkuaGVhcC5v
YmplY3RUeXBlQ291bnRzKCkpOworICAgIHJldHVybiBjb21tb25WTSgpLmhlYXAub2JqZWN0VHlw
ZUNvdW50cygpOwogfQogCiBQZXJmb3JtYW5jZUxvZ2dpbmc6OlBlcmZvcm1hbmNlTG9nZ2luZyhQ
YWdlJiBwYWdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QcmludENvbnRleHQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QcmludENvbnRleHQuY3BwCmluZGV4IDBjOTYzMmUy
ZmYzYTQ5YTBmMjYzZWJmYmYzOWYxZjg3MDliYjJmMDMuLjNjZWYzMzczMWNkZWQzZjZjNGFiOWZh
MDJjZjMyZDdhODUxZTc5NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUHJpbnRD
b250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5jcHAKQEAg
LTI3Myw3ICsyNzMsNyBAQCB2b2lkIFByaW50Q29udGV4dDo6ZW5kKCkKICAgICBBU1NFUlQobV9p
c1ByaW50aW5nKTsKICAgICBtX2lzUHJpbnRpbmcgPSBmYWxzZTsKICAgICBmcmFtZS5zZXRQcmlu
dGluZyhmYWxzZSwgRmxvYXRTaXplKCksIEZsb2F0U2l6ZSgpLCAwLCBBZGp1c3RWaWV3U2l6ZSk7
Ci0gICAgbV9saW5rZWREZXN0aW5hdGlvbnMgPSBudWxscHRyOworICAgIG1fbGlua2VkRGVzdGlu
YXRpb25zID0gV1RGOjpudWxsb3B0OwogfQogCiBzdGF0aWMgaW5saW5lIFJlbmRlckJveE1vZGVs
T2JqZWN0KiBlbmNsb3NpbmdCb3hNb2RlbE9iamVjdChSZW5kZXJFbGVtZW50KiByZW5kZXJlcikK
QEAgLTMyNywxMiArMzI3LDEyIEBAIHZvaWQgUHJpbnRDb250ZXh0OjpvdXRwdXRMaW5rZWREZXN0
aW5hdGlvbnMoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIERvCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmICghbV9saW5rZWREZXN0aW5hdGlvbnMpIHsKLSAgICAgICAgbV9saW5r
ZWREZXN0aW5hdGlvbnMgPSBtYWtlVW5pcXVlPEhhc2hNYXA8U3RyaW5nLCBSZWY8RWxlbWVudD4+
PigpOworICAgICAgICBtX2xpbmtlZERlc3RpbmF0aW9ucyA9IEhhc2hNYXA8U3RyaW5nLCBSZWY8
RWxlbWVudD4+KCk7CiAgICAgICAgIGNvbGxlY3RMaW5rZWREZXN0aW5hdGlvbnMoZG9jdW1lbnQp
OwogICAgIH0KIAotICAgIGZvciAoY29uc3QgYXV0byYgaXQgOiAqbV9saW5rZWREZXN0aW5hdGlv
bnMpIHsKLSAgICAgICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSBpdC52YWx1ZS0+cmVuZGVy
ZXIoKTsKKyAgICBmb3IgKGF1dG8mIGRlc3RpbmF0aW9uIDogKm1fbGlua2VkRGVzdGluYXRpb25z
KSB7CisgICAgICAgIGF1dG8gcmVuZGVyZXIgPSBkZXN0aW5hdGlvbi52YWx1ZS0+cmVuZGVyZXIo
KTsKICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0z
NDIsNyArMzQyLDcgQEAgdm9pZCBQcmludENvbnRleHQ6Om91dHB1dExpbmtlZERlc3RpbmF0aW9u
cyhHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgRG8KICAgICAgICAgaWYgKCFwYWdl
UmVjdC5jb250YWlucyhyb3VuZGVkSW50UG9pbnQocG9pbnQpKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5hZGREZXN0aW5hdGlvbkF0UG9pbnQoaXQu
a2V5LCBwb2ludCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5hZGREZXN0aW5hdGlvbkF0UG9p
bnQoZGVzdGluYXRpb24ua2V5LCBwb2ludCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Qcmlu
dENvbnRleHQuaAppbmRleCAxODI3YTEzZGRjMWI1ZTIxYTI1ZWY1ZjQ3Y2YwZWU2Yjg4NTAxZmFk
Li4wYmFkY2E5NmQwOGFkNDdkODM4YjdjMDhjNWE3ZDk4Y2JjZmRmNjIxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUHJpbnRDb250ZXh0LmgKQEAgLTExMCw3ICsxMTAsNyBAQCBwcml2YXRlOgogICAgIC8vIFVz
ZWQgdG8gcHJldmVudCBtaXN1c2VzIG9mIGJlZ2luKCkgYW5kIGVuZCgpIChlLmcuLCBjYWxsIGVu
ZCB3aXRob3V0IGJlZ2luKS4KICAgICBib29sIG1faXNQcmludGluZyB7IGZhbHNlIH07CiAKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SGFzaE1hcDxTdHJpbmcsIFJlZjxFbGVtZW50Pj4+IG1fbGlua2Vk
RGVzdGluYXRpb25zOworICAgIE9wdGlvbmFsPEhhc2hNYXA8U3RyaW5nLCBSZWY8RWxlbWVudD4+
PiBtX2xpbmtlZERlc3RpbmF0aW9uczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1BhZ2VNYWMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL21hYy9QYWdlTWFjLm1tCmluZGV4IDc4ZmVjM2U2OTE1NTdjMTY3YWNhOGY3OGQx
MzljMzUzYWM2MDViZTMuLjE0NWU2NGU1MGViMjY4ZjNlZGNjYmJmZThjMmQxZjdkNGVhZTc3ZjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1BhZ2VNYWMubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9tYWMvUGFnZU1hYy5tbQpAQCAtODgsMTUgKzg4LDEzIEBAIHZvaWQg
UGFnZTo6cGxhdGZvcm1Jbml0aWFsaXplKCkKIAogdm9pZCBQYWdlOjphZGRTY2hlZHVsZVBhaXIo
UmVmPFNjaGVkdWxlUGFpcj4mJiBwYWlyKQogewotICAgIGlmICghbV9zY2hlZHVsZWRSdW5Mb29w
UGFpcnMpCi0gICAgICAgIG1fc2NoZWR1bGVkUnVuTG9vcFBhaXJzID0gbWFrZVVuaXF1ZTxTY2hl
ZHVsZVBhaXJIYXNoU2V0PigpOwotICAgIG1fc2NoZWR1bGVkUnVuTG9vcFBhaXJzLT5hZGQocGFp
ci5wdHIoKSk7Ci0KLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX21haW5GcmFtZS5nZXQoKTsg
ZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBp
ZiAoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gZnJhbWUtPmxvYWRlcigpLmRvY3Vt
ZW50TG9hZGVyKCkpCi0gICAgICAgICAgICBkb2N1bWVudExvYWRlci0+c2NoZWR1bGUocGFpcik7
Ci0gICAgICAgIGlmIChEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBmcmFtZS0+bG9h
ZGVyKCkucHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcigpKQotICAgICAgICAgICAgZG9jdW1lbnRM
b2FkZXItPnNjaGVkdWxlKHBhaXIpOworICAgIG1fc2NoZWR1bGVkUnVuTG9vcFBhaXJzLmFkZChw
YWlyLnB0cigpKTsKKworICAgIGZvciAoYXV0byBmcmFtZSA9IG1fbWFpbkZyYW1lLnB0cigpOyBm
cmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7CisgICAgICAgIGlm
IChhdXRvIGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpKQorICAgICAg
ICAgICAgbG9hZGVyLT5zY2hlZHVsZShwYWlyKTsKKyAgICAgICAgaWYgKGF1dG8gbG9hZGVyID0g
ZnJhbWUtPmxvYWRlcigpLnByb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIoKSkKKyAgICAgICAgICAg
IGxvYWRlci0+c2NoZWR1bGUocGFpcik7CiAgICAgfQogCiAgICAgLy8gRklYTUU6IG1ha2UgU2hh
cmVkVGltZXJNYWMgdXNlIHRoZXNlIFNjaGVkdWxlUGFpcnMuCkBAIC0xMDQsMTcgKzEwMiwxMyBA
QCB2b2lkIFBhZ2U6OmFkZFNjaGVkdWxlUGFpcihSZWY8U2NoZWR1bGVQYWlyPiYmIHBhaXIpCiAK
IHZvaWQgUGFnZTo6cmVtb3ZlU2NoZWR1bGVQYWlyKFJlZjxTY2hlZHVsZVBhaXI+JiYgcGFpcikK
IHsKLSAgICBBU1NFUlQobV9zY2hlZHVsZWRSdW5Mb29wUGFpcnMpOwotICAgIGlmICghbV9zY2hl
ZHVsZWRSdW5Mb29wUGFpcnMpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2NoZWR1bGVkUnVu
TG9vcFBhaXJzLT5yZW1vdmUocGFpci5wdHIoKSk7CisgICAgbV9zY2hlZHVsZWRSdW5Mb29wUGFp
cnMucmVtb3ZlKHBhaXIucHRyKCkpOwogCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9tYWlu
RnJhbWUuZ2V0KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkp
IHsKLSAgICAgICAgaWYgKERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGZyYW1lLT5s
b2FkZXIoKS5kb2N1bWVudExvYWRlcigpKQotICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXItPnVu
c2NoZWR1bGUocGFpcik7Ci0gICAgICAgIGlmIChEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2Fk
ZXIgPSBmcmFtZS0+bG9hZGVyKCkucHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcigpKQotICAgICAg
ICAgICAgZG9jdW1lbnRMb2FkZXItPnVuc2NoZWR1bGUocGFpcik7CisgICAgZm9yIChhdXRvIGZy
YW1lID0gbV9tYWluRnJhbWUucHRyKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJh
dmVyc2VOZXh0KCkpIHsKKyAgICAgICAgaWYgKGF1dG8gbG9hZGVyID0gZnJhbWUtPmxvYWRlcigp
LmRvY3VtZW50TG9hZGVyKCkpCisgICAgICAgICAgICBsb2FkZXItPnVuc2NoZWR1bGUocGFpcik7
CisgICAgICAgIGlmIChhdXRvIGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS5wcm92aXNpb25hbERv
Y3VtZW50TG9hZGVyKCkpCisgICAgICAgICAgICBsb2FkZXItPnVuc2NoZWR1bGUocGFpcik7CiAg
ICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdDb29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdDb29yZGluYXRvci5jcHAKaW5kZXggOWI2MjlkMGU1OTMxODliZDkzZDU5ZmU3MzA2N2E4
NGU5Nzc1MzM4MC4uN2YyYmIzYTQ1MTU0MzUwYWRjODBhNDExNGFiOGQ2Zjc5MmY5MmU0MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yLmNwcApAQCAtMTIzLDE5ICsxMjMsMTcgQEAgRXZlbnRUcmFja2luZ1JlZ2lvbnMgU2Ny
b2xsaW5nQ29vcmRpbmF0b3I6OmFic29sdXRlRXZlbnRUcmFja2luZ1JlZ2lvbnNGb3JGcmFtZSgK
ICAgICAvLyBGSVhNRTogc2hvdWxkIEFTU0VSVCghZnJhbWVWaWV3LT5uZWVkc0xheW91dCgpKSBo
ZXJlLCBidXQgbmVlZCB0byBmaXggRGVidWdQYWdlT3ZlcmxheXMKICAgICAvLyB0byBub3QgYXNr
IGZvciByZWdpb25zIGF0IGJhZCB0aW1lcy4KIAotICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlQXJl
YXMgPSBmcmFtZVZpZXctPnNjcm9sbGFibGVBcmVhcygpKSB7Ci0gICAgICAgIGZvciAoYXV0byYg
c2Nyb2xsYWJsZUFyZWEgOiAqc2Nyb2xsYWJsZUFyZWFzKSB7Ci0gICAgICAgICAgICAvLyBDb21w
b3NpdGVkIHNjcm9sbGFibGUgYXJlYXMgY2FuIGJlIHNjcm9sbGVkIG9mZiB0aGUgbWFpbiB0aHJl
YWQuCi0gICAgICAgICAgICBpZiAoc2Nyb2xsYWJsZUFyZWEtPnVzZXNBc3luY1Njcm9sbGluZygp
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBib29sIGlzSW5zaWRl
Rml4ZWQ7Ci0gICAgICAgICAgICBJbnRSZWN0IGJveCA9IHNjcm9sbGFibGVBcmVhLT5zY3JvbGxh
YmxlQXJlYUJvdW5kaW5nQm94KCZpc0luc2lkZUZpeGVkKTsKLSAgICAgICAgICAgIGlmIChpc0lu
c2lkZUZpeGVkKQotICAgICAgICAgICAgICAgIGJveCA9IEludFJlY3QoZnJhbWVWaWV3LT5maXhl
ZFNjcm9sbGFibGVBcmVhQm91bmRzSW5mbGF0ZWRGb3JTY3JvbGxpbmcoTGF5b3V0UmVjdChib3gp
KSk7Ci0KLSAgICAgICAgICAgIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uLnVuaXRlKGJveCk7Ci0g
ICAgICAgIH0KKyAgICBmb3IgKGF1dG8mIHNjcm9sbGFibGVBcmVhIDogZnJhbWVWaWV3LT5zY3Jv
bGxhYmxlQXJlYXMoKSkgeworICAgICAgICAvLyBDb21wb3NpdGVkIHNjcm9sbGFibGUgYXJlYXMg
Y2FuIGJlIHNjcm9sbGVkIG9mZiB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgIGlmIChzY3JvbGxh
YmxlQXJlYS0+dXNlc0FzeW5jU2Nyb2xsaW5nKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBib29sIGlzSW5zaWRlRml4ZWQ7CisgICAgICAgIEludFJlY3QgYm94ID0gc2Nyb2xs
YWJsZUFyZWEtPnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goJmlzSW5zaWRlRml4ZWQpOworICAg
ICAgICBpZiAoaXNJbnNpZGVGaXhlZCkKKyAgICAgICAgICAgIGJveCA9IEludFJlY3QoZnJhbWVW
aWV3LT5maXhlZFNjcm9sbGFibGVBcmVhQm91bmRzSW5mbGF0ZWRGb3JTY3JvbGxpbmcoTGF5b3V0
UmVjdChib3gpKSk7CisKKyAgICAgICAgbm9uRmFzdFNjcm9sbGFibGVSZWdpb24udW5pdGUoYm94
KTsKICAgICB9CiAKICAgICBmb3IgKGF1dG8mIHdpZGdldCA6IGZyYW1lVmlldy0+d2lkZ2V0c0lu
UmVuZGVyVHJlZSgpKSB7CkBAIC0yOTgsMTEgKzI5Niw3IEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZShGcmFtZVZpZXcmIGZyYW1lVmlldykK
IAogYm9vbCBTY3JvbGxpbmdDb29yZGluYXRvcjo6aGFzVmlzaWJsZVNsb3dSZXBhaW50Vmlld3Bv
cnRDb25zdHJhaW5lZE9iamVjdHMoY29uc3QgRnJhbWVWaWV3JiBmcmFtZVZpZXcpIGNvbnN0CiB7
Ci0gICAgYXV0byogdmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMgPSBmcmFtZVZpZXcudmlld3Bv
cnRDb25zdHJhaW5lZE9iamVjdHMoKTsKLSAgICBpZiAoIXZpZXdwb3J0Q29uc3RyYWluZWRPYmpl
Y3RzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3IgKGF1dG8mIHZpZXdwb3J0Q29u
c3RyYWluZWRPYmplY3QgOiAqdmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMpIHsKKyAgICBmb3Ig
KGF1dG8mIHZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3QgOiBmcmFtZVZpZXcudmlld3BvcnRDb25z
dHJhaW5lZE9iamVjdHMoKSkgewogICAgICAgICBpZiAoIWlzPFJlbmRlckJveE1vZGVsT2JqZWN0
Pih2aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0KSB8fCAhdmlld3BvcnRDb25zdHJhaW5lZE9iamVj
dC5oYXNMYXllcigpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGF1dG8mIGxh
eWVyID0gKmRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0Pih2aWV3cG9ydENvbnN0cmFpbmVk
T2JqZWN0KS5sYXllcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR2x5cGhNZXRyaWNzTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HbHlwaE1ldHJpY3NNYXAuaAppbmRleCA3OWUyZjUzODhjNDZlNTg5MjMwMTYxYzQ3NDUyNTQx
OTI0N2U4MmFiLi5hNGRhOTNkZTZiZmU2ODk3MGU1MzlkNDM2ZWQ2ZWM1MmM2OGVlOTcxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1ldHJpY3NNYXAu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1ldHJpY3NNYXAu
aApAQCAtMTAyLDcgKzEwMiw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1fZmlsbGVkUHJpbWFy
eVBhZ2UgeyBmYWxzZSB9OwogICAgIEdseXBoTWV0cmljc1BhZ2UgbV9wcmltYXJ5UGFnZTsgLy8g
V2Ugb3B0aW1pemUgZm9yIHRoZSBwYWdlIHRoYXQgY29udGFpbnMgZ2x5cGggaW5kaWNlcyAwLTI1
NS4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SGFzaE1hcDxpbnQsIHN0ZDo6dW5pcXVlX3B0cjxHbHlw
aE1ldHJpY3NQYWdlPj4+IG1fcGFnZXM7CisgICAgSGFzaE1hcDxpbnQsIHN0ZDo6dW5pcXVlX3B0
cjxHbHlwaE1ldHJpY3NQYWdlPj4gbV9wYWdlczsKIH07CiAKIHRlbXBsYXRlPD4gaW5saW5lIGZs
b2F0IEdseXBoTWV0cmljc01hcDxmbG9hdD46OnVua25vd25NZXRyaWNzKCkKQEAgLTEyOSwxMyAr
MTI5LDkgQEAgdGVtcGxhdGU8Y2xhc3MgVD4gdHlwZW5hbWUgR2x5cGhNZXRyaWNzTWFwPFQ+OjpH
bHlwaE1ldHJpY3NQYWdlJiBHbHlwaE1ldHJpY3NNYXAKICAgICAgICAgcmV0dXJuIG1fcHJpbWFy
eVBhZ2U7CiAgICAgfQogCi0gICAgaWYgKCFtX3BhZ2VzKQotICAgICAgICBtX3BhZ2VzID0gbWFr
ZVVuaXF1ZTxIYXNoTWFwPGludCwgc3RkOjp1bmlxdWVfcHRyPEdseXBoTWV0cmljc1BhZ2U+Pj4o
KTsKLQotICAgIGF1dG8mIHBhZ2UgPSBtX3BhZ2VzLT5lbnN1cmUocGFnZU51bWJlciwgW10gewor
ICAgIHJldHVybiAqbV9wYWdlcy5lbnN1cmUocGFnZU51bWJlciwgW10gewogICAgICAgICByZXR1
cm4gbWFrZVVuaXF1ZTxHbHlwaE1ldHJpY3NQYWdlPih1bmtub3duTWV0cmljcygpKTsKICAgICB9
KS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgcmV0dXJuICpwYWdlOwogfQogICAgIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaAppbmRleCBkOGMx
NmMyMDMxYjgyMTA2MGFiYzQ2MGZiNDM3NWI4NWRjOTFhYjQ0Li4xYmNlOTcyMGU3YmVlNWMyM2U4
MjdjN2QwZmUxZjkzZjNlOGRjZDY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wu
aApAQCAtNjQ3LDcgKzY0Nyw3IEBAIHByaXZhdGU6CiAgICAgT3B0aW9uYWw8U3RyaW5nPiBtYXBw
ZWRTeW1ib2xJblNoYWRlclNvdXJjZU1hcChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgQU5HTEVT
aGFkZXJTeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogICAgIE9wdGlvbmFsPFN0cmlu
Zz4gb3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRl
ciwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogCi0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFNoYWRlck5hbWVIYXNoPiBuYW1lSGFzaE1hcEZvclNoYWRlcnM7CisgICAg
U2hhZGVyTmFtZUhhc2ggbV9uYW1lSGFzaE1hcEZvclNoYWRlcnM7CiAjZW5kaWYgLy8gIVVTRShB
TkdMRSkKIAogI2lmIFVTRShBTkdMRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xDb21tb24uY3BwCmluZGV4IDgwYjlmNWU2Nzc0NmZlNDVmODJmMDZmMWEwN2FlYjliZDU4
YzNiNTEuLjE4ZGM4OWYyYWYxZDU1YjI1MWY5YzA5NWM4OWJmMWRkZmY0ZTUxNGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcApAQCAtNTQ0LDkgKzU0
NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZv
cm1HTE9iamVjdCBzaGFkZXIpCiAgICAgU2hIYXNoRnVuY3Rpb242NCBwcmV2aW91c0hhc2hGdW5j
dGlvbiA9IEFOR0xFUmVzb3VyY2VzLkhhc2hGdW5jdGlvbjsKICAgICBBTkdMRVJlc291cmNlcy5I
YXNoRnVuY3Rpb24gPSBuYW1lSGFzaEZvclNoYWRlcjsKIAotICAgIGlmICghbmFtZUhhc2hNYXBG
b3JTaGFkZXJzKQotICAgICAgICBuYW1lSGFzaE1hcEZvclNoYWRlcnMgPSBtYWtlVW5pcXVlPFNo
YWRlck5hbWVIYXNoPigpOwotICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihuYW1l
SGFzaE1hcEZvclNoYWRlcnMuZ2V0KCkpOworICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNo
YWRlcigmbV9uYW1lSGFzaE1hcEZvclNoYWRlcnMpOwogICAgIG1fY29tcGlsZXIuc2V0UmVzb3Vy
Y2VzKEFOR0xFUmVzb3VyY2VzKTsKIAogICAgIFN0cmluZyB0cmFuc2xhdGVkU2hhZGVyU291cmNl
ID0gbV9leHRlbnNpb25zLT5nZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoc2hhZGVyKTsK
QEAgLTk1Nyw5ICs5NTUsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBl
ZFN5bWJvbE5hbWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBBTkdMRQogICAgIGlmIChzeW1i
b2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUgJiYgIW5hbWUuaXNFbXB0eSgp
KSB7CiAgICAgICAgIC8vIEF0dHJpYnV0ZXMgYXJlIGEgc3BlY2lhbCBjYXNlOiB0aGV5IG1heSBi
ZSByZXF1ZXN0ZWQgYmVmb3JlIGFueSBzaGFkZXJzIGhhdmUgYmVlbiBjb21waWxlZCwKICAgICAg
ICAgLy8gYW5kIGFyZW4ndCBldmVuIHJlcXVpcmVkIHRvIGJlIHVzZWQgaW4gYW55IHNoYWRlciBw
cm9ncmFtLgotICAgICAgICBpZiAoIW5hbWVIYXNoTWFwRm9yU2hhZGVycykKLSAgICAgICAgICAg
IG5hbWVIYXNoTWFwRm9yU2hhZGVycyA9IG1ha2VVbmlxdWU8U2hhZGVyTmFtZUhhc2g+KCk7Ci0g
ICAgICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihuYW1lSGFzaE1hcEZvclNoYWRl
cnMuZ2V0KCkpOworICAgICAgICBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIoJm1fbmFt
ZUhhc2hNYXBGb3JTaGFkZXJzKTsKIAogICAgICAgICBhdXRvIGdlbmVyYXRlZE5hbWUgPSBnZW5l
cmF0ZUhhc2hlZE5hbWUobmFtZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvTmV0d29ya2luZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvTmV0d29ya2luZ0NvbnRleHQuaAppbmRleCAzM2EyMTc0YTk5YjE3YmIxNmI4NTcx
NTdlMTdiOGNmMmViNjFlYjlkLi5iMDBlMDNkZmZiNjk5NTUwMjRjY2U2ZTIwYjBkNmJkMTE4MWQ0
NmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtp
bmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3Jr
aW5nQ29udGV4dC5oCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKIAogI2lmIFBMQVRGT1JNKENP
Q09BKQogICAgIHZpcnR1YWwgYm9vbCBsb2NhbEZpbGVDb250ZW50U25pZmZpbmdFbmFibGVkKCkg
Y29uc3QgPSAwOyAvLyBGSVhNRTogUmVjb25jaWxlIHdpdGggUmVzb3VyY2VIYW5kbGU6OmZvcmNl
Q29udGVudFNuaWZmaW5nKCkuCi0gICAgdmlydHVhbCBTY2hlZHVsZVBhaXJIYXNoU2V0KiBzY2hl
ZHVsZWRSdW5Mb29wUGFpcnMoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBjb25z
dCBTY2hlZHVsZVBhaXJIYXNoU2V0KiBzY2hlZHVsZWRSdW5Mb29wUGFpcnMoKSBjb25zdCB7IHJl
dHVybiAwOyB9CiAgICAgdmlydHVhbCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBzb3VyY2VBcHBsaWNh
dGlvbkF1ZGl0RGF0YSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFJlc291cmNlRXJyb3IgYmxv
Y2tlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpIGNvbnN0ID0gMDsKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0dyaWQuY3BwCmluZGV4IDkxZDlmYjAwYjM4MzZiMWI1NzdmYjFmMDg1NWZl
NDNhZjgxMmE1ZmQuLjM3MTIxNzUxNTFhZDY2YTllYzU3NGUwNWUwNGU3MDY5ODJlNDIzYmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvR3JpZC5jcHAKQEAgLTEwOSwzMyArMTA5LDMzIEBAIHVuc2lnbmVk
IEdyaWQ6OmF1dG9SZXBlYXRUcmFja3MoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlv
bikgY29uc3QKICAgICByZXR1cm4gZGlyZWN0aW9uID09IEZvclJvd3MgPyBtX2F1dG9SZXBlYXRS
b3dzIDogbV9hdXRvUmVwZWF0Q29sdW1uczsKIH0KIAotdm9pZCBHcmlkOjpzZXRBdXRvUmVwZWF0
RW1wdHlDb2x1bW5zKHN0ZDo6dW5pcXVlX3B0cjxPcmRlcmVkVHJhY2tJbmRleFNldD4gYXV0b1Jl
cGVhdEVtcHR5Q29sdW1ucykKK3ZvaWQgR3JpZDo6c2V0QXV0b1JlcGVhdEVtcHR5Q29sdW1ucyhP
cmRlcmVkVHJhY2tJbmRleFNldCYmIGF1dG9SZXBlYXRFbXB0eUNvbHVtbnMpCiB7Ci0gICAgQVNT
RVJUKCFhdXRvUmVwZWF0RW1wdHlDb2x1bW5zIHx8IChhdXRvUmVwZWF0RW1wdHlDb2x1bW5zLT5z
aXplKCkgPD0gbV9hdXRvUmVwZWF0Q29sdW1ucykpOworICAgIEFTU0VSVChhdXRvUmVwZWF0RW1w
dHlDb2x1bW5zLnNpemUoKSA8PSBtX2F1dG9SZXBlYXRDb2x1bW5zKTsKICAgICBtX2F1dG9SZXBl
YXRFbXB0eUNvbHVtbnMgPSBXVEZNb3ZlKGF1dG9SZXBlYXRFbXB0eUNvbHVtbnMpOwogfQogCi12
b2lkIEdyaWQ6OnNldEF1dG9SZXBlYXRFbXB0eVJvd3Moc3RkOjp1bmlxdWVfcHRyPE9yZGVyZWRU
cmFja0luZGV4U2V0PiBhdXRvUmVwZWF0RW1wdHlSb3dzKQordm9pZCBHcmlkOjpzZXRBdXRvUmVw
ZWF0RW1wdHlSb3dzKE9yZGVyZWRUcmFja0luZGV4U2V0JiYgYXV0b1JlcGVhdEVtcHR5Um93cykK
IHsKLSAgICBBU1NFUlQoIWF1dG9SZXBlYXRFbXB0eVJvd3MgfHwgKGF1dG9SZXBlYXRFbXB0eVJv
d3MtPnNpemUoKSA8PSBtX2F1dG9SZXBlYXRSb3dzKSk7CisgICAgQVNTRVJUKGF1dG9SZXBlYXRF
bXB0eVJvd3Muc2l6ZSgpIDw9IG1fYXV0b1JlcGVhdFJvd3MpOwogICAgIG1fYXV0b1JlcGVhdEVt
cHR5Um93cyA9IFdURk1vdmUoYXV0b1JlcGVhdEVtcHR5Um93cyk7CiB9CiAKIGJvb2wgR3JpZDo6
aGFzQXV0b1JlcGVhdEVtcHR5VHJhY2tzKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rp
b24pIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zID8gISFtX2F1
dG9SZXBlYXRFbXB0eUNvbHVtbnMgOiAhIW1fYXV0b1JlcGVhdEVtcHR5Um93czsKKyAgICByZXR1
cm4gZGlyZWN0aW9uID09IEZvckNvbHVtbnMgPyAhbV9hdXRvUmVwZWF0RW1wdHlDb2x1bW5zLmlz
RW1wdHkoKSA6ICFtX2F1dG9SZXBlYXRFbXB0eVJvd3MuaXNFbXB0eSgpOwogfQogCiBib29sIEdy
aWQ6OmlzRW1wdHlBdXRvUmVwZWF0VHJhY2soR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVj
dGlvbiwgdW5zaWduZWQgbGluZSkgY29uc3QKIHsKICAgICBBU1NFUlQoaGFzQXV0b1JlcGVhdEVt
cHR5VHJhY2tzKGRpcmVjdGlvbikpOwotICAgIHJldHVybiBhdXRvUmVwZWF0RW1wdHlUcmFja3Mo
ZGlyZWN0aW9uKS0+Y29udGFpbnMobGluZSk7CisgICAgcmV0dXJuIGF1dG9SZXBlYXRFbXB0eVRy
YWNrcyhkaXJlY3Rpb24pLmNvbnRhaW5zKGxpbmUpOwogfQogCi1PcmRlcmVkVHJhY2tJbmRleFNl
dCogR3JpZDo6YXV0b1JlcGVhdEVtcHR5VHJhY2tzKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBk
aXJlY3Rpb24pIGNvbnN0Citjb25zdCBPcmRlcmVkVHJhY2tJbmRleFNldCYgR3JpZDo6YXV0b1Jl
cGVhdEVtcHR5VHJhY2tzKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0
CiB7CiAgICAgQVNTRVJUKGhhc0F1dG9SZXBlYXRFbXB0eVRyYWNrcyhkaXJlY3Rpb24pKTsKLSAg
ICByZXR1cm4gZGlyZWN0aW9uID09IEZvckNvbHVtbnMgPyBtX2F1dG9SZXBlYXRFbXB0eUNvbHVt
bnMuZ2V0KCkgOiBtX2F1dG9SZXBlYXRFbXB0eVJvd3MuZ2V0KCk7CisgICAgcmV0dXJuIGRpcmVj
dGlvbiA9PSBGb3JDb2x1bW5zID8gbV9hdXRvUmVwZWF0RW1wdHlDb2x1bW5zIDogbV9hdXRvUmVw
ZWF0RW1wdHlSb3dzOwogfQogCiBHcmlkU3BhbiBHcmlkOjpncmlkSXRlbVNwYW4oY29uc3QgUmVu
ZGVyQm94JiBncmlkSXRlbSwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikgY29u
c3QKQEAgLTE1Nyw4ICsxNTcsOCBAQCB2b2lkIEdyaWQ6OnNldE5lZWRzSXRlbXNQbGFjZW1lbnQo
Ym9vbCBuZWVkc0l0ZW1zUGxhY2VtZW50KQogICAgIG1fZ3JpZEl0ZW1BcmVhLmNsZWFyKCk7CiAg
ICAgbV9leHBsaWNpdFJvd1N0YXJ0ID0gMDsKICAgICBtX2V4cGxpY2l0Q29sdW1uU3RhcnQgPSAw
OwotICAgIG1fYXV0b1JlcGVhdEVtcHR5Q29sdW1ucyA9IG51bGxwdHI7Ci0gICAgbV9hdXRvUmVw
ZWF0RW1wdHlSb3dzID0gbnVsbHB0cjsKKyAgICBtX2F1dG9SZXBlYXRFbXB0eUNvbHVtbnMuY2xl
YXIoKTsKKyAgICBtX2F1dG9SZXBlYXRFbXB0eVJvd3MuY2xlYXIoKTsKICAgICBtX2F1dG9SZXBl
YXRDb2x1bW5zID0gMDsKICAgICBtX2F1dG9SZXBlYXRSb3dzID0gMDsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvR3JpZC5oCmluZGV4IDcyY2FkZjY4ZWY0ZDMyNjZjZTFmOGNlZWJkYzlhNDlkZjJiYzgxMWIu
LmFkMjgwNDEyNzMyOTAxYjNjMjJlNzIyN2ZhMTdhMDRhZjZjODk2N2EgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0dyaWQuaApAQCAtNjcsMTQgKzY3LDE0IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBhdXRv
UmVwZWF0VHJhY2tzKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbikgY29uc3Q7CiAgICAgdm9pZCBz
ZXRBdXRvUmVwZWF0VHJhY2tzKHVuc2lnbmVkIGF1dG9SZXBlYXRSb3dzLCB1bnNpZ25lZCBhdXRv
UmVwZWF0Q29sdW1ucyk7CiAKLSAgICB2b2lkIHNldEF1dG9SZXBlYXRFbXB0eUNvbHVtbnMoc3Rk
Ojp1bmlxdWVfcHRyPE9yZGVyZWRUcmFja0luZGV4U2V0Pik7Ci0gICAgdm9pZCBzZXRBdXRvUmVw
ZWF0RW1wdHlSb3dzKHN0ZDo6dW5pcXVlX3B0cjxPcmRlcmVkVHJhY2tJbmRleFNldD4pOworICAg
IHZvaWQgc2V0QXV0b1JlcGVhdEVtcHR5Q29sdW1ucyhPcmRlcmVkVHJhY2tJbmRleFNldCYmKTsK
KyAgICB2b2lkIHNldEF1dG9SZXBlYXRFbXB0eVJvd3MoT3JkZXJlZFRyYWNrSW5kZXhTZXQmJik7
CiAKICAgICB1bnNpZ25lZCBhdXRvUmVwZWF0RW1wdHlUcmFja3NDb3VudChHcmlkVHJhY2tTaXpp
bmdEaXJlY3Rpb24pIGNvbnN0OwogICAgIGJvb2wgaGFzQXV0b1JlcGVhdEVtcHR5VHJhY2tzKEdy
aWRUcmFja1NpemluZ0RpcmVjdGlvbikgY29uc3Q7CiAgICAgYm9vbCBpc0VtcHR5QXV0b1JlcGVh
dFRyYWNrKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiwgdW5zaWduZWQpIGNvbnN0OwogCi0gICAg
T3JkZXJlZFRyYWNrSW5kZXhTZXQqIGF1dG9SZXBlYXRFbXB0eVRyYWNrcyhHcmlkVHJhY2tTaXpp
bmdEaXJlY3Rpb24pIGNvbnN0OworICAgIGNvbnN0IE9yZGVyZWRUcmFja0luZGV4U2V0JiBhdXRv
UmVwZWF0RW1wdHlUcmFja3MoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uKSBjb25zdDsKIAogICAg
IE9yZGVySXRlcmF0b3ImIG9yZGVySXRlcmF0b3IoKSB7IHJldHVybiBtX29yZGVySXRlcmF0b3I7
IH0KIApAQCAtOTgsOCArOTgsOCBAQCBwcml2YXRlOgogCiAgICAgSGFzaE1hcDxjb25zdCBSZW5k
ZXJCb3gqLCBHcmlkQXJlYT4gbV9ncmlkSXRlbUFyZWE7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
T3JkZXJlZFRyYWNrSW5kZXhTZXQ+IG1fYXV0b1JlcGVhdEVtcHR5Q29sdW1uczsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8T3JkZXJlZFRyYWNrSW5kZXhTZXQ+IG1fYXV0b1JlcGVhdEVtcHR5Um93czsK
KyAgICBPcmRlcmVkVHJhY2tJbmRleFNldCBtX2F1dG9SZXBlYXRFbXB0eUNvbHVtbnM7CisgICAg
T3JkZXJlZFRyYWNrSW5kZXhTZXQgbV9hdXRvUmVwZWF0RW1wdHlSb3dzOwogfTsKIAogY2xhc3Mg
R3JpZEl0ZXJhdG9yIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Hcmlk
VHJhY2tTaXppbmdBbGdvcml0aG0uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRU
cmFja1NpemluZ0FsZ29yaXRobS5jcHAKaW5kZXggYTI3MGRiOGJkNmY4NGNkNzkwZGFmMjExNzY2
OGY1ZWMyZGQyNjZmZS4uYzA5NzE5N2E4N2ViM2I5YTAyMWFlMzk2Y2MwZWNiYWUwOTY0ZmIwNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29y
aXRobS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0Fs
Z29yaXRobS5jcHAKQEAgLTY2MSw3ICs2NjEsNyBAQCBHcmlkVHJhY2tTaXplIEdyaWRUcmFja1Np
emluZ0FsZ29yaXRobTo6Y2FsY3VsYXRlR3JpZFRyYWNrU2l6ZShHcmlkVHJhY2tTaXppbmdEaQog
ICAgIHJldHVybiBHcmlkVHJhY2tTaXplKG1pblRyYWNrQnJlYWR0aCwgbWF4VHJhY2tCcmVhZHRo
KTsKIH0KIAotZG91YmxlIEdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6Y29tcHV0ZUZsZXhGYWN0
b3JVbml0U2l6ZShjb25zdCBWZWN0b3I8R3JpZFRyYWNrPiYgdHJhY2tzLCBkb3VibGUgZmxleEZh
Y3RvclN1bSwgTGF5b3V0VW5pdCYgbGVmdE92ZXJTcGFjZSwgY29uc3QgVmVjdG9yPHVuc2lnbmVk
LCA4PiYgZmxleGlibGVUcmFja3NJbmRleGVzLCBzdGQ6OnVuaXF1ZV9wdHI8VHJhY2tJbmRleFNl
dD4gdHJhY2tzVG9UcmVhdEFzSW5mbGV4aWJsZSkgY29uc3QKK2RvdWJsZSBHcmlkVHJhY2tTaXpp
bmdBbGdvcml0aG06OmNvbXB1dGVGbGV4RmFjdG9yVW5pdFNpemUoY29uc3QgVmVjdG9yPEdyaWRU
cmFjaz4mIHRyYWNrcywgZG91YmxlIGZsZXhGYWN0b3JTdW0sIExheW91dFVuaXQmIGxlZnRPdmVy
U3BhY2UsIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZCwgOD4mIGZsZXhpYmxlVHJhY2tzSW5kZXhlcywg
VHJhY2tJbmRleFNldCYmIHRyYWNrc1RvVHJlYXRBc0luZmxleGlibGUpIGNvbnN0CiB7CiAgICAg
Ly8gV2Ugd2FudCB0byBhdm9pZCB0aGUgZWZmZWN0IG9mIGZsZXggZmFjdG9ycyBzdW0gYmVsb3cg
MSBtYWtpbmcgdGhlIGZhY3RvciB1bml0IHNpemUgdG8gZ3JvdyBleHBvbmVudGlhbGx5LgogICAg
IGRvdWJsZSBoeXBvdGhldGljYWxGYWN0b3JVbml0U2l6ZSA9IGxlZnRPdmVyU3BhY2UgLyBzdGQ6
Om1heDxkb3VibGU+KDEsIGZsZXhGYWN0b3JTdW0pOwpAQCAtNjY5LDcgKzY2OSw3IEBAIGRvdWJs
ZSBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OmNvbXB1dGVGbGV4RmFjdG9yVW5pdFNpemUoY29u
c3QgVmVjdG9yPEdyaWRUcmFjCiAgICAgLy8gcHJvZHVjdCBvZiB0aGUgaHlwb3RoZXRpY2FsICJm
bGV4IGZhY3RvciB1bml0IiBhbmQgYW55IGZsZXhpYmxlIHRyYWNrJ3MgImZsZXggZmFjdG9yIiBt
dXN0IGJlIGdyYXRlciB0aGFuIHN1Y2ggdHJhY2sncyAiYmFzZSBzaXplIi4KICAgICBib29sIHZh
bGlkRmxleEZhY3RvclVuaXQgPSB0cnVlOwogICAgIGZvciAoYXV0byBpbmRleCA6IGZsZXhpYmxl
VHJhY2tzSW5kZXhlcykgewotICAgICAgICBpZiAodHJhY2tzVG9UcmVhdEFzSW5mbGV4aWJsZSAm
JiB0cmFja3NUb1RyZWF0QXNJbmZsZXhpYmxlLT5jb250YWlucyhpbmRleCkpCisgICAgICAgIGlm
ICh0cmFja3NUb1RyZWF0QXNJbmZsZXhpYmxlLmNvbnRhaW5zKGluZGV4KSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICBMYXlvdXRVbml0IGJhc2VTaXplID0gdHJhY2tzW2luZGV4XS5i
YXNlU2l6ZSgpOwogICAgICAgICBkb3VibGUgZmxleEZhY3RvciA9IHRyYWNrc1tpbmRleF0uY2Fj
aGVkVHJhY2tTaXplKCkubWF4VHJhY2tCcmVhZHRoKCkuZmxleCgpOwpAQCAtNjc3LDkgKzY3Nyw3
IEBAIGRvdWJsZSBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OmNvbXB1dGVGbGV4RmFjdG9yVW5p
dFNpemUoY29uc3QgVmVjdG9yPEdyaWRUcmFjCiAgICAgICAgIGlmIChiYXNlU2l6ZSA+IGh5cG90
aGV0aWNhbEZhY3RvclVuaXRTaXplICogZmxleEZhY3RvcikgewogICAgICAgICAgICAgbGVmdE92
ZXJTcGFjZSAtPSBiYXNlU2l6ZTsKICAgICAgICAgICAgIGZsZXhGYWN0b3JTdW0gLT0gZmxleEZh
Y3RvcjsKLSAgICAgICAgICAgIGlmICghdHJhY2tzVG9UcmVhdEFzSW5mbGV4aWJsZSkKLSAgICAg
ICAgICAgICAgICB0cmFja3NUb1RyZWF0QXNJbmZsZXhpYmxlID0gbWFrZVVuaXF1ZTxUcmFja0lu
ZGV4U2V0PigpOwotICAgICAgICAgICAgdHJhY2tzVG9UcmVhdEFzSW5mbGV4aWJsZS0+YWRkKGlu
ZGV4KTsKKyAgICAgICAgICAgIHRyYWNrc1RvVHJlYXRBc0luZmxleGlibGUuYWRkKGluZGV4KTsK
ICAgICAgICAgICAgIHZhbGlkRmxleEZhY3RvclVuaXQgPSBmYWxzZTsKICAgICAgICAgfQogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkVHJhY2tTaXppbmdB
bGdvcml0aG0uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkVHJhY2tTaXppbmdBbGdv
cml0aG0uaAppbmRleCA2Yjc5N2VhODc4NTQwOWRkZWIxOGEwNTlmNDE2MGQ1NWQ2NWQ1OGZmLi43
N2Y5MGU1YjQ4NWZlMDdhYzkyZGZkZWFjNzA4MDI4YzliNzEyNjYxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5oCkBAIC0xNzEs
NyArMTcxLDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIEhlbHBlciBtZXRob2RzIGZvciBzdGVwIDQu
IFN0cmVjaCBmbGV4aWJsZSB0cmFja3MuCiAgICAgdHlwZWRlZiBIYXNoU2V0PHVuc2lnbmVkLCBE
ZWZhdWx0SGFzaDx1bnNpZ25lZD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8
dW5zaWduZWQ+PiBUcmFja0luZGV4U2V0OwotICAgIGRvdWJsZSBjb21wdXRlRmxleEZhY3RvclVu
aXRTaXplKGNvbnN0IFZlY3RvcjxHcmlkVHJhY2s+JiB0cmFja3MsIGRvdWJsZSBmbGV4RmFjdG9y
U3VtLCBMYXlvdXRVbml0JiBsZWZ0T3ZlclNwYWNlLCBjb25zdCBWZWN0b3I8dW5zaWduZWQsIDg+
JiBmbGV4aWJsZVRyYWNrc0luZGV4ZXMsIHN0ZDo6dW5pcXVlX3B0cjxUcmFja0luZGV4U2V0PiB0
cmFja3NUb1RyZWF0QXNJbmZsZXhpYmxlID0gbnVsbHB0cikgY29uc3Q7CisgICAgZG91YmxlIGNv
bXB1dGVGbGV4RmFjdG9yVW5pdFNpemUoY29uc3QgVmVjdG9yPEdyaWRUcmFjaz4mIHRyYWNrcywg
ZG91YmxlIGZsZXhGYWN0b3JTdW0sIExheW91dFVuaXQmIGxlZnRPdmVyU3BhY2UsIGNvbnN0IFZl
Y3Rvcjx1bnNpZ25lZCwgOD4mIGZsZXhpYmxlVHJhY2tzSW5kZXhlcywgVHJhY2tJbmRleFNldCYm
IHRyYWNrc1RvVHJlYXRBc0luZmxleGlibGUgPSB7IH0pIGNvbnN0OwogICAgIHZvaWQgY29tcHV0
ZUZsZXhTaXplZFRyYWNrc0dyb3d0aChkb3VibGUgZmxleEZyYWN0aW9uLCBWZWN0b3I8TGF5b3V0
VW5pdD4mIGluY3JlbWVudHMsIExheW91dFVuaXQmIHRvdGFsR3Jvd3RoKSBjb25zdDsKICAgICBk
b3VibGUgZmluZEZyVW5pdFNpemUoY29uc3QgR3JpZFNwYW4mIHRyYWNrc1NwYW4sIExheW91dFVu
aXQgbGVmdE92ZXJTcGFjZSkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9IaXRUZXN0TG9jYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hp
dFRlc3RMb2NhdGlvbi5jcHAKaW5kZXggMTYxZjIyOTVlMTgzOTQ1ZDZhOTg2OGNkNGJkNWNhZjc1
YWIzMzEwMi4uN2FmZDUxZjJhZDYyZDdhOGE0Zjc0YTRkN2U5MDA2MmY5ZDJkOTY4NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RMb2NhdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RMb2NhdGlvbi5jcHAKQEAgLTI0LDggKzI0
LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1IaXRUZXN0TG9jYXRpb246OkhpdFRlc3RM
b2NhdGlvbigpID0gZGVmYXVsdDsKLQogSGl0VGVzdExvY2F0aW9uOjpIaXRUZXN0TG9jYXRpb24o
Y29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KQogICAgIDogbV9wb2ludChwb2ludCkKICAgICAsIG1f
Ym91bmRpbmdCb3gocmVjdEZvclBvaW50KHBvaW50LCAwLCAwLCAwLCAwKSkKQEAgLTc4LDMwICs3
Niw2IEBAIEhpdFRlc3RMb2NhdGlvbjo6SGl0VGVzdExvY2F0aW9uKGNvbnN0IEhpdFRlc3RMb2Nh
dGlvbiYgb3RoZXIsIGNvbnN0IExheW91dFNpemUmCiAgICAgbW92ZShvZmZzZXQpOwogfQogCi1I
aXRUZXN0TG9jYXRpb246OkhpdFRlc3RMb2NhdGlvbihjb25zdCBIaXRUZXN0TG9jYXRpb24mIG90
aGVyKQotICAgIDogbV9wb2ludChvdGhlci5tX3BvaW50KQotICAgICwgbV9ib3VuZGluZ0JveChv
dGhlci5tX2JvdW5kaW5nQm94KQotICAgICwgbV90cmFuc2Zvcm1lZFBvaW50KG90aGVyLm1fdHJh
bnNmb3JtZWRQb2ludCkKLSAgICAsIG1fdHJhbnNmb3JtZWRSZWN0KG90aGVyLm1fdHJhbnNmb3Jt
ZWRSZWN0KQotICAgICwgbV9pc1JlY3RCYXNlZChvdGhlci5tX2lzUmVjdEJhc2VkKQotICAgICwg
bV9pc1JlY3RpbGluZWFyKG90aGVyLm1faXNSZWN0aWxpbmVhcikKLXsKLX0KLQotSGl0VGVzdExv
Y2F0aW9uOjp+SGl0VGVzdExvY2F0aW9uKCkgPSBkZWZhdWx0OwotCi1IaXRUZXN0TG9jYXRpb24m
IEhpdFRlc3RMb2NhdGlvbjo6b3BlcmF0b3I9KGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgb3RoZXIp
Ci17Ci0gICAgbV9wb2ludCA9IG90aGVyLm1fcG9pbnQ7Ci0gICAgbV9ib3VuZGluZ0JveCA9IG90
aGVyLm1fYm91bmRpbmdCb3g7Ci0gICAgbV90cmFuc2Zvcm1lZFBvaW50ID0gb3RoZXIubV90cmFu
c2Zvcm1lZFBvaW50OwotICAgIG1fdHJhbnNmb3JtZWRSZWN0ID0gb3RoZXIubV90cmFuc2Zvcm1l
ZFJlY3Q7Ci0gICAgbV9pc1JlY3RCYXNlZCA9IG90aGVyLm1faXNSZWN0QmFzZWQ7Ci0gICAgbV9p
c1JlY3RpbGluZWFyID0gb3RoZXIubV9pc1JlY3RpbGluZWFyOwotCi0gICAgcmV0dXJuICp0aGlz
OwotfQotCiB2b2lkIEhpdFRlc3RMb2NhdGlvbjo6bW92ZShjb25zdCBMYXlvdXRTaXplJiBvZmZz
ZXQpCiB7CiAgICAgbV9wb2ludC5tb3ZlKG9mZnNldCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSGl0VGVzdExvY2F0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSGl0VGVzdExvY2F0aW9uLmgKaW5kZXggMDIzMDM1ZjRiOWE1YzMzNTIyMDcxOWQ0NTFmYzA0
NTU1N2ZlZTAzOC4uMDU4NmQ0NTA3YzVjMGFiYWVhZWUyNzEyNzE2NzUyNzJkNzVhNWM4MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RMb2NhdGlvbi5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0TG9jYXRpb24uaApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChD
KSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0
IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKQEAgLTI3LDcgKzI3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBIaXRUZXN0TG9jYXRpb24gewogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIEhpdFRlc3RM
b2NhdGlvbigpOworICAgIEhpdFRlc3RMb2NhdGlvbigpID0gZGVmYXVsdDsKICAgICBIaXRUZXN0
TG9jYXRpb24oY29uc3QgTGF5b3V0UG9pbnQmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBIaXRUZXN0
TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYpOwogICAgIEhpdFRlc3RMb2NhdGlvbihjb25zdCBG
bG9hdFBvaW50JiwgY29uc3QgRmxvYXRRdWFkJik7CkBAIC0zNyw5ICszNyw2IEBAIHB1YmxpYzoK
IAogICAgIC8vIE1ha2UgYSBjb3B5IHRoZSBIaXRUZXN0TG9jYXRpb24gaW4gYSBuZXcgcmVnaW9u
IGJ5IGFwcGx5aW5nIGdpdmVuIG9mZnNldCB0byBpbnRlcm5hbCBwb2ludCBhbmQgYXJlYS4KICAg
ICBIaXRUZXN0TG9jYXRpb24oY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgY29uc3QgTGF5b3V0U2l6
ZSYgb2Zmc2V0KTsKLSAgICBXRUJDT1JFX0VYUE9SVCBIaXRUZXN0TG9jYXRpb24oY29uc3QgSGl0
VGVzdExvY2F0aW9uJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgfkhpdFRlc3RMb2NhdGlvbigpOwot
ICAgIEhpdFRlc3RMb2NhdGlvbiYgb3BlcmF0b3I9KGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYpOwog
CiAgICAgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9wb2ludDsg
fQogICAgIEludFBvaW50IHJvdW5kZWRQb2ludCgpIGNvbnN0IHsgcmV0dXJuIHJvdW5kZWRJbnRQ
b2ludChtX3BvaW50KTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hp
dFRlc3RSZXN1bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQu
Y3BwCmluZGV4IDkwZDA3NWY4OWQwNTBjMDM1NDdiNWJlMzZhOTY5OTQ2M2ExMzFjNTMuLjViZmJl
NTM2Y2FhOTIzZTBlZmZiZTBjMjM1NTY5NTE4ZjYwMmI0ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKQEAgLTU1LDEyICs1NSw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotc3RhdGljIGlubGluZSB2
b2lkIGFwcGVuZFRvTm9kZVNldChjb25zdCBIaXRUZXN0UmVzdWx0OjpOb2RlU2V0JiBzb3VyY2Us
IEhpdFRlc3RSZXN1bHQ6Ok5vZGVTZXQmIGRlc3RpbmF0aW9uKQotewotICAgIGZvciAoYXV0byYg
bm9kZSA6IHNvdXJjZSkKLSAgICAgICAgZGVzdGluYXRpb24uYWRkKG5vZGUuY29weVJlZigpKTsK
LX0KLQogSGl0VGVzdFJlc3VsdDo6SGl0VGVzdFJlc3VsdCgpID0gZGVmYXVsdDsKIAogSGl0VGVz
dFJlc3VsdDo6SGl0VGVzdFJlc3VsdChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCkBAIC04Nyw0
NSArODEsOCBAQCBIaXRUZXN0UmVzdWx0OjpIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RMb2Nh
dGlvbiYgb3RoZXIpCiB7CiB9CiAKLUhpdFRlc3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQoY29uc3Qg
SGl0VGVzdFJlc3VsdCYgb3RoZXIpCi0gICAgOiBtX2hpdFRlc3RMb2NhdGlvbihvdGhlci5tX2hp
dFRlc3RMb2NhdGlvbikKLSAgICAsIG1faW5uZXJOb2RlKG90aGVyLmlubmVyTm9kZSgpKQotICAg
ICwgbV9pbm5lck5vblNoYXJlZE5vZGUob3RoZXIuaW5uZXJOb25TaGFyZWROb2RlKCkpCi0gICAg
LCBtX3BvaW50SW5Jbm5lck5vZGVGcmFtZShvdGhlci5tX3BvaW50SW5Jbm5lck5vZGVGcmFtZSkK
LSAgICAsIG1fbG9jYWxQb2ludChvdGhlci5sb2NhbFBvaW50KCkpCi0gICAgLCBtX2lubmVyVVJM
RWxlbWVudChvdGhlci5VUkxFbGVtZW50KCkpCi0gICAgLCBtX3Njcm9sbGJhcihvdGhlci5zY3Jv
bGxiYXIoKSkKLSAgICAsIG1faXNPdmVyV2lkZ2V0KG90aGVyLmlzT3ZlcldpZGdldCgpKQotewot
ICAgIC8vIE9ubHkgY29weSB0aGUgTm9kZVNldCBpbiBjYXNlIG9mIGxpc3QgaGl0IHRlc3QuCi0g
ICAgaWYgKG90aGVyLm1fbGlzdEJhc2VkVGVzdFJlc3VsdCkgewotICAgICAgICBtX2xpc3RCYXNl
ZFRlc3RSZXN1bHQgPSBtYWtlVW5pcXVlPE5vZGVTZXQ+KCk7Ci0gICAgICAgIGFwcGVuZFRvTm9k
ZVNldCgqb3RoZXIubV9saXN0QmFzZWRUZXN0UmVzdWx0LCAqbV9saXN0QmFzZWRUZXN0UmVzdWx0
KTsKLSAgICB9Ci19Ci0KIEhpdFRlc3RSZXN1bHQ6On5IaXRUZXN0UmVzdWx0KCkgPSBkZWZhdWx0
OwogCi1IaXRUZXN0UmVzdWx0JiBIaXRUZXN0UmVzdWx0OjpvcGVyYXRvcj0oY29uc3QgSGl0VGVz
dFJlc3VsdCYgb3RoZXIpCi17Ci0gICAgbV9oaXRUZXN0TG9jYXRpb24gPSBvdGhlci5tX2hpdFRl
c3RMb2NhdGlvbjsKLSAgICBtX2lubmVyTm9kZSA9IG90aGVyLmlubmVyTm9kZSgpOwotICAgIG1f
aW5uZXJOb25TaGFyZWROb2RlID0gb3RoZXIuaW5uZXJOb25TaGFyZWROb2RlKCk7Ci0gICAgbV9w
b2ludEluSW5uZXJOb2RlRnJhbWUgPSBvdGhlci5tX3BvaW50SW5Jbm5lck5vZGVGcmFtZTsKLSAg
ICBtX2xvY2FsUG9pbnQgPSBvdGhlci5sb2NhbFBvaW50KCk7Ci0gICAgbV9pbm5lclVSTEVsZW1l
bnQgPSBvdGhlci5VUkxFbGVtZW50KCk7Ci0gICAgbV9zY3JvbGxiYXIgPSBvdGhlci5zY3JvbGxi
YXIoKTsKLSAgICBtX2lzT3ZlcldpZGdldCA9IG90aGVyLmlzT3ZlcldpZGdldCgpOwotCi0gICAg
Ly8gT25seSBjb3B5IHRoZSBOb2RlU2V0IGluIGNhc2Ugb2YgbGlzdCBoaXQgdGVzdC4KLSAgICBp
ZiAob3RoZXIubV9saXN0QmFzZWRUZXN0UmVzdWx0KSB7Ci0gICAgICAgIG1fbGlzdEJhc2VkVGVz
dFJlc3VsdCA9IG1ha2VVbmlxdWU8Tm9kZVNldD4oKTsKLSAgICAgICAgYXBwZW5kVG9Ob2RlU2V0
KCpvdGhlci5tX2xpc3RCYXNlZFRlc3RSZXN1bHQsICptX2xpc3RCYXNlZFRlc3RSZXN1bHQpOwot
ICAgIH0KLQotICAgIHJldHVybiAqdGhpczsKLX0KLQogc3RhdGljIE5vZGUqIG1vdmVPdXRPZlVz
ZXJBZ2VudFNoYWRvd1RyZWUoTm9kZSYgbm9kZSkKIHsKICAgICBpZiAobm9kZS5pc0luU2hhZG93
VHJlZSgpKSB7CkBAIC02NDQsOCArNjAxLDcgQEAgYm9vbCBIaXRUZXN0UmVzdWx0Ojppc0NvbnRl
bnRFZGl0YWJsZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1faW5uZXJOb25TaGFyZWROb2RlLT5oYXNF
ZGl0YWJsZVN0eWxlKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFJlY3RUeXBlPgotaW5saW5l
IEhpdFRlc3RQcm9ncmVzcyBIaXRUZXN0UmVzdWx0OjphZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVz
dWx0Q29tbW9uKE5vZGUqIG5vZGUsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBjb25z
dCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IFJlY3RUeXBlJiBy
ZWN0KQoraW5saW5lIE9wdGlvbmFsPEhpdFRlc3RQcm9ncmVzcz4gSGl0VGVzdFJlc3VsdDo6YWRk
Tm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdENvbW1vbihOb2RlKiBub2RlLCBjb25zdCBIaXRUZXN0
UmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICAvLyBJZiBpdCBpcyBub3QgYSBsaXN0LWJhc2VkIGhp
dCB0ZXN0LCB0aGlzIG1ldGhvZCBoYXMgdG8gYmUgbm8tb3AuCiAgICAgaWYgKCFyZXF1ZXN0LnJl
c3VsdElzRWxlbWVudExpc3QoKSkgewpAQCAtNjYwLDEzICs2MTYsMTkgQEAgaW5saW5lIEhpdFRl
c3RQcm9ncmVzcyBIaXRUZXN0UmVzdWx0OjphZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0Q29t
bW9uKE5vZGUqIG4KICAgICAgICAgfHwgKHJlcXVlc3QuZGlzYWxsb3dzVXNlckFnZW50U2hhZG93
Q29udGVudEV4Y2VwdEZvckltYWdlT3ZlcmxheXMoKSAmJiAhSFRNTEVsZW1lbnQ6OmlzSW5zaWRl
SW1hZ2VPdmVybGF5KCpub2RlKSAmJiBub2RlLT5pc0luVXNlckFnZW50U2hhZG93VHJlZSgpKSkK
ICAgICAgICAgbm9kZSA9IG5vZGUtPmRvY3VtZW50KCkuYW5jZXN0b3JOb2RlSW5UaGlzU2NvcGUo
bm9kZSk7CiAKLSAgICBtdXRhYmxlTGlzdEJhc2VkVGVzdFJlc3VsdCgpLmFkZCgqbm9kZSk7Cisg
ICAgbV9saXN0QmFzZWRUZXN0UmVzdWx0LmFkZCgqbm9kZSk7CiAKICAgICBpZiAocmVxdWVzdC5p
bmNsdWRlc0FsbEVsZW1lbnRzVW5kZXJQb2ludCgpKQogICAgICAgICByZXR1cm4gSGl0VGVzdFBy
b2dyZXNzOjpDb250aW51ZTsKIAotICAgIGJvb2wgcmVnaW9uRmlsbGVkID0gcmVjdC5jb250YWlu
cyhsb2NhdGlvbkluQ29udGFpbmVyLmJvdW5kaW5nQm94KCkpOwotICAgIHJldHVybiByZWdpb25G
aWxsZWQgPyBIaXRUZXN0UHJvZ3Jlc3M6OlN0b3AgOiBIaXRUZXN0UHJvZ3Jlc3M6OkNvbnRpbnVl
OworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJlY3RU
eXBlPiBpbmxpbmUgSGl0VGVzdFByb2dyZXNzIEhpdFRlc3RSZXN1bHQ6OmFkZE5vZGVUb0xpc3RC
YXNlZFRlc3RSZXN1bHRDb21tb24oTm9kZSogbm9kZSwgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3Qg
UmVjdFR5cGUmIHJlY3QpCit7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gYWRkTm9kZVRvTGlzdEJh
c2VkVGVzdFJlc3VsdENvbW1vbihub2RlLCByZXF1ZXN0KSkKKyAgICAgICAgcmV0dXJuICpyZXN1
bHQ7CisgICAgcmV0dXJuIHJlY3QuY29udGFpbnMobG9jYXRpb25JbkNvbnRhaW5lci5ib3VuZGlu
Z0JveCgpKSA/IEhpdFRlc3RQcm9ncmVzczo6U3RvcCA6IEhpdFRlc3RQcm9ncmVzczo6Q29udGlu
dWU7CiB9CiAKIEhpdFRlc3RQcm9ncmVzcyBIaXRUZXN0UmVzdWx0OjphZGROb2RlVG9MaXN0QmFz
ZWRUZXN0UmVzdWx0KE5vZGUqIG5vZGUsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBj
b25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFJl
Y3QmIHJlY3QpCkBAIC02OTMsMjIgKzY1NSw4IEBAIHZvaWQgSGl0VGVzdFJlc3VsdDo6YXBwZW5k
KGNvbnN0IEhpdFRlc3RSZXN1bHQmIG90aGVyLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxCiAg
ICAgICAgIG1faXNPdmVyV2lkZ2V0ID0gb3RoZXIuaXNPdmVyV2lkZ2V0KCk7CiAgICAgfQogCi0g
ICAgaWYgKG90aGVyLm1fbGlzdEJhc2VkVGVzdFJlc3VsdCkKLSAgICAgICAgYXBwZW5kVG9Ob2Rl
U2V0KCpvdGhlci5tX2xpc3RCYXNlZFRlc3RSZXN1bHQsIG11dGFibGVMaXN0QmFzZWRUZXN0UmVz
dWx0KCkpOwotfQotCi1jb25zdCBIaXRUZXN0UmVzdWx0OjpOb2RlU2V0JiBIaXRUZXN0UmVzdWx0
OjpsaXN0QmFzZWRUZXN0UmVzdWx0KCkgY29uc3QKLXsKLSAgICBpZiAoIW1fbGlzdEJhc2VkVGVz
dFJlc3VsdCkKLSAgICAgICAgbV9saXN0QmFzZWRUZXN0UmVzdWx0ID0gbWFrZVVuaXF1ZTxOb2Rl
U2V0PigpOwotICAgIHJldHVybiAqbV9saXN0QmFzZWRUZXN0UmVzdWx0OwotfQotCi1IaXRUZXN0
UmVzdWx0OjpOb2RlU2V0JiBIaXRUZXN0UmVzdWx0OjptdXRhYmxlTGlzdEJhc2VkVGVzdFJlc3Vs
dCgpCi17Ci0gICAgaWYgKCFtX2xpc3RCYXNlZFRlc3RSZXN1bHQpCi0gICAgICAgIG1fbGlzdEJh
c2VkVGVzdFJlc3VsdCA9IG1ha2VVbmlxdWU8Tm9kZVNldD4oKTsKLSAgICByZXR1cm4gKm1fbGlz
dEJhc2VkVGVzdFJlc3VsdDsKKyAgICBmb3IgKGF1dG8mIG5vZGUgOiBvdGhlci5tX2xpc3RCYXNl
ZFRlc3RSZXN1bHQpCisgICAgICAgIG1fbGlzdEJhc2VkVGVzdFJlc3VsdC5hZGQobm9kZSk7CiB9
CiAKIFZlY3RvcjxTdHJpbmc+IEhpdFRlc3RSZXN1bHQ6OmRpY3RhdGlvbkFsdGVybmF0aXZlcygp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3Vs
dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAppbmRleCA1ZWM5
MmJmMTFkMGM5MmQyMTA2Mjk3YmNmNDhkZTM3ZGM4NjM0MGY5Li4zN2QxZmZiYjYxMWQzNGRkODU0
NWM3NThmMmZjYzlhODk1MDM3MjdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSGl0VGVzdFJlc3VsdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0
UmVzdWx0LmgKQEAgLTQ0LDE2ICs0NCwxMSBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9S
VCBIaXRUZXN0UmVzdWx0KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgSGl0VGVzdFJl
c3VsdChjb25zdCBMYXlvdXRQb2ludCYpOwotCiAgICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQg
SGl0VGVzdFJlc3VsdChjb25zdCBMYXlvdXRSZWN0Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgSGl0
VGVzdFJlc3VsdChjb25zdCBMYXlvdXRQb2ludCYgY2VudGVyUG9pbnQsIHVuc2lnbmVkIHRvcFBh
ZGRpbmcsIHVuc2lnbmVkIHJpZ2h0UGFkZGluZywgdW5zaWduZWQgYm90dG9tUGFkZGluZywgdW5z
aWduZWQgbGVmdFBhZGRpbmcpOwotCiAgICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgSGl0VGVz
dFJlc3VsdChjb25zdCBIaXRUZXN0TG9jYXRpb24mKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBIaXRU
ZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB+SGl0
VGVzdFJlc3VsdCgpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgSGl0VGVzdFJlc3VsdCYgb3BlcmF0
b3I9KGNvbnN0IEhpdFRlc3RSZXN1bHQmKTsKLQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
SW5uZXJOb2RlKE5vZGUqKTsKICAgICBOb2RlKiBpbm5lck5vZGUoKSBjb25zdCB7IHJldHVybiBt
X2lubmVyTm9kZS5nZXQoKTsgfQogCkBAIC03Myw3ICs2OCw2IEBAIHB1YmxpYzoKIAogICAgIFdF
QkNPUkVfRVhQT1JUIFN0cmluZyBsaW5rU3VnZ2VzdGVkRmlsZW5hbWUoKSBjb25zdDsKIAotICAg
IC8vIEZvcndhcmRlZCBmcm9tIEhpdFRlc3RMb2NhdGlvbgogICAgIGJvb2wgaXNSZWN0QmFzZWRU
ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9oaXRUZXN0TG9jYXRpb24uaXNSZWN0QmFzZWRUZXN0KCk7
IH0KIAogICAgIC8vIFRoZSBoaXQtdGVzdGVkIHBvaW50IGluIHRoZSBjb29yZGluYXRlcyBvZiB0
aGUgbWFpbiBmcmFtZS4KQEAgLTEzNiwxMCArMTMwLDcgQEAgcHVibGljOgogICAgIEhpdFRlc3RQ
cm9ncmVzcyBhZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0KE5vZGUqLCBjb25zdCBIaXRUZXN0
UmVxdWVzdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3Qg
RmxvYXRSZWN0Jik7CiAgICAgdm9pZCBhcHBlbmQoY29uc3QgSGl0VGVzdFJlc3VsdCYsIGNvbnN0
IEhpdFRlc3RSZXF1ZXN0Jik7CiAKLSAgICAvLyBJZiBtX2xpc3RCYXNlZFRlc3RSZXN1bHQgaXMg
MCB0aGVuIHNldCBpdCB0byBhIG5ldyBOb2RlU2V0LiBSZXR1cm4gKm1fbGlzdEJhc2VkVGVzdFJl
c3VsdC4gTGF6eSBhbGxvY2F0aW9uIG1ha2VzCi0gICAgLy8gc2Vuc2UgYmVjYXVzZSB0aGUgTm9k
ZVNldCBpcyBzZWxkb20gbmVjZXNzYXJ5LCBhbmQgaXQncyBzb21ld2hhdCBleHBlbnNpdmUgdG8g
YWxsb2NhdGUgYW5kIGluaXRpYWxpemUuIFRoaXMgbWV0aG9kIGRvZXMKLSAgICAvLyB0aGUgc2Ft
ZSB0aGluZyBhcyBtdXRhYmxlTGlzdEJhc2VkVGVzdFJlc3VsdCgpLCBidXQgaGVyZSB0aGUgcmV0
dXJuIHZhbHVlIGlzIGNvbnN0LgotICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IE5vZGVTZXQmIGxp
c3RCYXNlZFRlc3RSZXN1bHQoKSBjb25zdDsKKyAgICBjb25zdCBOb2RlU2V0JiBsaXN0QmFzZWRU
ZXN0UmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9saXN0QmFzZWRUZXN0UmVzdWx0OyB9CiAKICAg
ICBWZWN0b3I8U3RyaW5nPiBkaWN0YXRpb25BbHRlcm5hdGl2ZXMoKSBjb25zdDsKIApAQCAtMTQ3
LDggKzEzOCw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBFbGVtZW50KiB0YXJnZXRF
bGVtZW50KCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgTm9kZVNldCYgbXV0YWJsZUxpc3RCYXNl
ZFRlc3RSZXN1bHQoKTsgLy8gU2VlIGFib3ZlLgotCisgICAgT3B0aW9uYWw8SGl0VGVzdFByb2dy
ZXNzPiBhZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0Q29tbW9uKE5vZGUqLCBjb25zdCBIaXRU
ZXN0UmVxdWVzdCYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFJlY3RUeXBlPiBIaXRUZXN0UHJv
Z3Jlc3MgYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdENvbW1vbihOb2RlKiwgY29uc3QgSGl0
VGVzdFJlcXVlc3QmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBjb25zdCBSZWN0VHlwZSYpOwog
CiAgICAgUmVmUHRyPE5vZGU+IG5vZGVGb3JJbWFnZURhdGEoKSBjb25zdDsKQEAgLTE1Niw2ICsx
NDYsNyBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShWSURFTykKICAgICBIVE1MTWVkaWFFbGVtZW50
KiBtZWRpYUVsZW1lbnQoKSBjb25zdDsKICNlbmRpZgorCiAgICAgSGl0VGVzdExvY2F0aW9uIG1f
aGl0VGVzdExvY2F0aW9uOwogCiAgICAgUmVmUHRyPE5vZGU+IG1faW5uZXJOb2RlOwpAQCAtMTY3
LDcgKzE1OCw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFNjcm9sbGJhcj4gbV9zY3JvbGxiYXI7
CiAgICAgYm9vbCBtX2lzT3ZlcldpZGdldCB7IGZhbHNlIH07IC8vIFJldHVybnMgdHJ1ZSBpZiB3
ZSBhcmUgb3ZlciBhIHdpZGdldCAoYW5kIG5vdCBpbiB0aGUgYm9yZGVyL3BhZGRpbmcgYXJlYSBv
ZiBhIFJlbmRlcldpZGdldCBmb3IgZXhhbXBsZSkuCiAKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVl
X3B0cjxOb2RlU2V0PiBtX2xpc3RCYXNlZFRlc3RSZXN1bHQ7CisgICAgTm9kZVNldCBtX2xpc3RC
YXNlZFRlc3RSZXN1bHQ7CiB9OwogCiBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgZGlzcGxheVN0cmlu
Zyhjb25zdCBTdHJpbmcmLCBjb25zdCBOb2RlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcAppbmRleCA3ZmZmZTZiYzBiYTJmMzViM2ExNTkzOGVlNWU5ZDVlZDQxMTAy
ZWQ1Li40NTQ0ZDdmMzA0Y2ZmOGM1OWI4NjJmNDhlMzlmNTBmOGJhNjY2NjE5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTczOSw3ICs3MzksNyBAQCB2b2lk
IFJlbmRlckJsb2NrOjphZGRPdmVyZmxvd0Zyb21CbG9ja0NoaWxkcmVuKCkKIAogdm9pZCBSZW5k
ZXJCbG9jazo6YWRkT3ZlcmZsb3dGcm9tUG9zaXRpb25lZE9iamVjdHMoKQogewotICAgIFRyYWNr
ZWRSZW5kZXJlckxpc3RIYXNoU2V0KiBwb3NpdGlvbmVkRGVzY2VuZGFudHMgPSBwb3NpdGlvbmVk
T2JqZWN0cygpOworICAgIGF1dG8gcG9zaXRpb25lZERlc2NlbmRhbnRzID0gcG9zaXRpb25lZE9i
amVjdHMoKTsKICAgICBpZiAoIXBvc2l0aW9uZWREZXNjZW5kYW50cykKICAgICAgICAgcmV0dXJu
OwogCkBAIC0xMDgwLDcgKzEwODAsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRQb3NpdGlv
bmVkT2JqZWN0KFJlbmRlckJveCYgciwgYm9vbCByZWxheW91dENoaWxkcmVuLCBibwogCiB2b2lk
IFJlbmRlckJsb2NrOjpsYXlvdXRQb3NpdGlvbmVkT2JqZWN0cyhib29sIHJlbGF5b3V0Q2hpbGRy
ZW4sIGJvb2wgZml4ZWRQb3NpdGlvbk9iamVjdHNPbmx5KQogewotICAgIFRyYWNrZWRSZW5kZXJl
ckxpc3RIYXNoU2V0KiBwb3NpdGlvbmVkRGVzY2VuZGFudHMgPSBwb3NpdGlvbmVkT2JqZWN0cygp
OworICAgIGF1dG8gcG9zaXRpb25lZERlc2NlbmRhbnRzID0gcG9zaXRpb25lZE9iamVjdHMoKTsK
ICAgICBpZiAoIXBvc2l0aW9uZWREZXNjZW5kYW50cykKICAgICAgICAgcmV0dXJuOwogICAgIApA
QCAtMTA5Miw3ICsxMDkyLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UG9zaXRpb25lZE9i
amVjdHMoYm9vbCByZWxheW91dENoaWxkcmVuLCBib29sIGZpeGVkUG9zaXQKIAogdm9pZCBSZW5k
ZXJCbG9jazo6bWFya1Bvc2l0aW9uZWRPYmplY3RzRm9yTGF5b3V0KCkKIHsKLSAgICBUcmFja2Vk
UmVuZGVyZXJMaXN0SGFzaFNldCogcG9zaXRpb25lZERlc2NlbmRhbnRzID0gcG9zaXRpb25lZE9i
amVjdHMoKTsKKyAgICBhdXRvIHBvc2l0aW9uZWREZXNjZW5kYW50cyA9IHBvc2l0aW9uZWRPYmpl
Y3RzKCk7CiAgICAgaWYgKCFwb3NpdGlvbmVkRGVzY2VuZGFudHMpCiAgICAgICAgIHJldHVybjsK
IApAQCAtMTUxOCw3ICsxNTE4LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRTZWxlY3Rpb24o
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE8KICNlbmRpZgog
fQogCi1zdGF0aWMgdm9pZCBjbGlwT3V0UG9zaXRpb25lZE9iamVjdHMoY29uc3QgUGFpbnRJbmZv
KiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBvZmZzZXQsIFRyYWNrZWRSZW5kZXJlckxp
c3RIYXNoU2V0KiBwb3NpdGlvbmVkT2JqZWN0cykKK3N0YXRpYyB2b2lkIGNsaXBPdXRQb3NpdGlv
bmVkT2JqZWN0cyhjb25zdCBQYWludEluZm8qIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQm
IG9mZnNldCwgY29uc3QgVHJhY2tlZFJlbmRlcmVyTGlzdEhhc2hTZXQqIHBvc2l0aW9uZWRPYmpl
Y3RzKQogewogICAgIGlmICghcG9zaXRpb25lZE9iamVjdHMpCiAgICAgICAgIHJldHVybjsKQEAg
LTE3ODMsNyArMTc4Myw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmxvZ2ljYWxSaWdodFNl
bGVjdGlvbk9mZnNldChSZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBMYXlvCiAgICAgcmV0dXJuIGxv
Z2ljYWxSaWdodDsKIH0KIAotVHJhY2tlZFJlbmRlcmVyTGlzdEhhc2hTZXQqIFJlbmRlckJsb2Nr
Ojpwb3NpdGlvbmVkT2JqZWN0cygpIGNvbnN0Citjb25zdCBUcmFja2VkUmVuZGVyZXJMaXN0SGFz
aFNldCogUmVuZGVyQmxvY2s6OnBvc2l0aW9uZWRPYmplY3RzKCkgY29uc3QKIHsKICAgICByZXR1
cm4gcG9zaXRpb25lZERlc2NlbmRhbnRzTWFwKCkucG9zaXRpb25lZFJlbmRlcmVycygqdGhpcyk7
CiB9CkBAIC0xODU4LDcgKzE4NTgsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVQZXJjZW50
SGVpZ2h0RGVzY2VuZGFudChSZW5kZXJCb3gmIGRlc2NlbmRhbnQpCiAgICAgcmVtb3ZlRnJvbVRy
YWNrZWRSZW5kZXJlck1hcHMoZGVzY2VuZGFudCk7CiB9CiAKLVRyYWNrZWRSZW5kZXJlckxpc3RI
YXNoU2V0KiBSZW5kZXJCbG9jazo6cGVyY2VudEhlaWdodERlc2NlbmRhbnRzKCkgY29uc3QKK2Nv
bnN0IFRyYWNrZWRSZW5kZXJlckxpc3RIYXNoU2V0KiBSZW5kZXJCbG9jazo6cGVyY2VudEhlaWdo
dERlc2NlbmRhbnRzKCkgY29uc3QKIHsKICAgICByZXR1cm4gcGVyY2VudEhlaWdodERlc2NlbmRh
bnRzTWFwID8gcGVyY2VudEhlaWdodERlc2NlbmRhbnRzTWFwLT5nZXQodGhpcykgOiBudWxscHRy
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAppbmRleCBlZmMwMTU0ZGI4
Njg3OWRmMzM3MGFmOTczZjYyOWUwNGY4NWI2ODYxLi4yYzMxY2U5MWE0YTdkODUzM2Q5NGE3MjY4
YTc0ODE0ZjMxNzRhZTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaApA
QCAtODAsMTkgKzgwLDE5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCByZW1vdmVQb3NpdGlv
bmVkT2JqZWN0KGNvbnN0IFJlbmRlckJveCYpOwogICAgIHZvaWQgcmVtb3ZlUG9zaXRpb25lZE9i
amVjdHMoY29uc3QgUmVuZGVyQmxvY2sqLCBDb250YWluaW5nQmxvY2tTdGF0ZSA9IFNhbWVDb250
YWluaW5nQmxvY2spOwogCi0gICAgVHJhY2tlZFJlbmRlcmVyTGlzdEhhc2hTZXQqIHBvc2l0aW9u
ZWRPYmplY3RzKCkgY29uc3Q7CisgICAgY29uc3QgVHJhY2tlZFJlbmRlcmVyTGlzdEhhc2hTZXQq
IHBvc2l0aW9uZWRPYmplY3RzKCkgY29uc3Q7CiAgICAgYm9vbCBoYXNQb3NpdGlvbmVkT2JqZWN0
cygpIGNvbnN0CiAgICAgewotICAgICAgICBUcmFja2VkUmVuZGVyZXJMaXN0SGFzaFNldCogb2Jq
ZWN0cyA9IHBvc2l0aW9uZWRPYmplY3RzKCk7CisgICAgICAgIGF1dG8gb2JqZWN0cyA9IHBvc2l0
aW9uZWRPYmplY3RzKCk7CiAgICAgICAgIHJldHVybiBvYmplY3RzICYmICFvYmplY3RzLT5pc0Vt
cHR5KCk7CiAgICAgfQogCiAgICAgdm9pZCBhZGRQZXJjZW50SGVpZ2h0RGVzY2VuZGFudChSZW5k
ZXJCb3gmKTsKICAgICBzdGF0aWMgdm9pZCByZW1vdmVQZXJjZW50SGVpZ2h0RGVzY2VuZGFudChS
ZW5kZXJCb3gmKTsKLSAgICBUcmFja2VkUmVuZGVyZXJMaXN0SGFzaFNldCogcGVyY2VudEhlaWdo
dERlc2NlbmRhbnRzKCkgY29uc3Q7CisgICAgY29uc3QgVHJhY2tlZFJlbmRlcmVyTGlzdEhhc2hT
ZXQqIHBlcmNlbnRIZWlnaHREZXNjZW5kYW50cygpIGNvbnN0OwogICAgIGJvb2wgaGFzUGVyY2Vu
dEhlaWdodERlc2NlbmRhbnRzKCkgY29uc3QKICAgICB7Ci0gICAgICAgIFRyYWNrZWRSZW5kZXJl
ckxpc3RIYXNoU2V0KiBvYmplY3RzID0gcGVyY2VudEhlaWdodERlc2NlbmRhbnRzKCk7CisgICAg
ICAgIGF1dG8gb2JqZWN0cyA9IHBlcmNlbnRIZWlnaHREZXNjZW5kYW50cygpOwogICAgICAgICBy
ZXR1cm4gb2JqZWN0cyAmJiAhb2JqZWN0cy0+aXNFbXB0eSgpOwogICAgIH0KICAgICBzdGF0aWMg
Ym9vbCBoYXNQZXJjZW50SGVpZ2h0Q29udGFpbmVyTWFwKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKaW5kZXggNDM2OTlmZWFkOWY2NWM1OTcyYmZkZDQyOWM3
N2FlYTEwMTZhNjk5MC4uMzM5MzRiOTI3NDU2OTlhM2RkMmZlNTMyY2I2NDY2NjhlNzc1MzJmNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcApAQCAtNDcsNyAr
NDcsNyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogV1RGX01BS0VfSVNPX0FMTE9DQVRF
RF9JTVBMKFJlbmRlckNvdW50ZXIpOwogCiB1c2luZyBDb3VudGVyTWFwID0gSGFzaE1hcDxBdG9t
U3RyaW5nLCBSZWY8Q291bnRlck5vZGU+PjsKLXVzaW5nIENvdW50ZXJNYXBzID0gSGFzaE1hcDxj
b25zdCBSZW5kZXJFbGVtZW50Kiwgc3RkOjp1bmlxdWVfcHRyPENvdW50ZXJNYXA+PjsKK3VzaW5n
IENvdW50ZXJNYXBzID0gSGFzaE1hcDxjb25zdCBSZW5kZXJFbGVtZW50KiwgQ291bnRlck1hcD47
CiAKIHN0YXRpYyBDb3VudGVyTm9kZSogbWFrZUNvdW50ZXJOb2RlKFJlbmRlckVsZW1lbnQmLCBj
b25zdCBBdG9tU3RyaW5nJiBpZGVudGlmaWVyLCBib29sIGFsd2F5c0NyZWF0ZUNvdW50ZXIpOwog
CkBAIC0xNzMsMTAgKzE3Myw3IEBAIHN0YXRpYyBPcHRpb25hbDxDb3VudGVyUGxhbj4gcGxhbkNv
dW50ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEF0b21TdHJpCiAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7IC8vIENvdW50ZXJzIGFyZSBmb3JiaWRkZW4gZnJvbSBhbGwgb3Ro
ZXIgcHNldWRvIGVsZW1lbnRzLgogICAgIH0KIAotICAgIENvdW50ZXJEaXJlY3RpdmVzIGRpcmVj
dGl2ZXM7Ci0KLSAgICBpZiAoYXV0byBtYXAgPSBzdHlsZS5jb3VudGVyRGlyZWN0aXZlcygpKQot
ICAgICAgICBkaXJlY3RpdmVzID0gbWFwLT5nZXQoaWRlbnRpZmllcik7CisgICAgYXV0byBkaXJl
Y3RpdmVzID0gc3R5bGUuY291bnRlckRpcmVjdGl2ZXMoKS5nZXQoaWRlbnRpZmllcik7CiAKICAg
ICBpZiAoaWRlbnRpZmllciA9PSAibGlzdC1pdGVtIikgewogICAgICAgICBhdXRvIGl0ZW1EaXJl
Y3RpdmVzID0gbGlzdEl0ZW1Db3VudGVyRGlyZWN0aXZlcyhyZW5kZXJlcik7CkBAIC0zMTYsNyAr
MzEzLDcgQEAgc3RhdGljIENvdW50ZXJOb2RlKiBtYWtlQ291bnRlck5vZGUoUmVuZGVyRWxlbWVu
dCYgcmVuZGVyZXIsIGNvbnN0IEF0b21TdHJpbmcmIGkKIHsKICAgICBpZiAocmVuZGVyZXIuaGFz
Q291bnRlck5vZGVNYXAoKSkgewogICAgICAgICBBU1NFUlQoY291bnRlck1hcHMoKS5jb250YWlu
cygmcmVuZGVyZXIpKTsKLSAgICAgICAgaWYgKGF1dG8qIG5vZGUgPSBjb3VudGVyTWFwcygpLmZp
bmQoJnJlbmRlcmVyKS0+dmFsdWUtPmdldChpZGVudGlmaWVyKSkKKyAgICAgICAgaWYgKGF1dG8q
IG5vZGUgPSBjb3VudGVyTWFwcygpLmZpbmQoJnJlbmRlcmVyKS0+dmFsdWUuZ2V0KGlkZW50aWZp
ZXIpKQogICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCkBAIC0zMzIsNyArMzI5LDcg
QEAgc3RhdGljIENvdW50ZXJOb2RlKiBtYWtlQ291bnRlck5vZGUoUmVuZGVyRWxlbWVudCYgcmVu
ZGVyZXIsIGNvbnN0IEF0b21TdHJpbmcmIGkKICAgICBpZiAocGxhY2UucGFyZW50KQogICAgICAg
ICBwbGFjZS5wYXJlbnQtPmluc2VydEFmdGVyKG5ld05vZGUsIHBsYWNlLnByZXZpb3VzU2libGlu
Zy5nZXQoKSwgaWRlbnRpZmllcik7CiAKLSAgICBtYXBzLmFkZCgmcmVuZGVyZXIsIG1ha2VVbmlx
dWU8Q291bnRlck1hcD4oKSkuaXRlcmF0b3ItPnZhbHVlLT5hZGQoaWRlbnRpZmllciwgbmV3Tm9k
ZS5jb3B5UmVmKCkpOworICAgIG1hcHMuYWRkKCZyZW5kZXJlciwgQ291bnRlck1hcCB7IH0pLml0
ZXJhdG9yLT52YWx1ZS5hZGQoaWRlbnRpZmllciwgbmV3Tm9kZSk7CiAgICAgcmVuZGVyZXIuc2V0
SGFzQ291bnRlck5vZGVNYXAodHJ1ZSk7CiAKICAgICBpZiAobmV3Tm9kZS0+cGFyZW50KCkpCkBA
IC0zNDYsNyArMzQzLDcgQEAgc3RhdGljIENvdW50ZXJOb2RlKiBtYWtlQ291bnRlck5vZGUoUmVu
ZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEF0b21TdHJpbmcmIGkKICAgICAgICAgc2tpcERl
c2NlbmRhbnRzID0gZmFsc2U7CiAgICAgICAgIGlmICghY3VycmVudFJlbmRlcmVyLT5oYXNDb3Vu
dGVyTm9kZU1hcCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGF1dG8qIGN1cnJl
bnRDb3VudGVyID0gbWFwcy5maW5kKGN1cnJlbnRSZW5kZXJlciktPnZhbHVlLT5nZXQoaWRlbnRp
Zmllcik7CisgICAgICAgIGF1dG8qIGN1cnJlbnRDb3VudGVyID0gbWFwcy5maW5kKGN1cnJlbnRS
ZW5kZXJlciktPnZhbHVlLmdldChpZGVudGlmaWVyKTsKICAgICAgICAgaWYgKCFjdXJyZW50Q291
bnRlcikKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBza2lwRGVzY2VuZGFudHMgPSB0
cnVlOwpAQCAtNDU0LDggKzQ1MSw4IEBAIHN0YXRpYyB2b2lkIGRlc3Ryb3lDb3VudGVyTm9kZVdp
dGhvdXRNYXBSZW1vdmFsKGNvbnN0IEF0b21TdHJpbmcmIGlkZW50aWZpZXIsIENvCiAgICAgZm9y
IChSZWZQdHI8Q291bnRlck5vZGU+IGNoaWxkID0gbm9kZS5sYXN0RGVzY2VuZGFudCgpOyBjaGls
ZCAmJiBjaGlsZCAhPSAmbm9kZTsgY2hpbGQgPSBXVEZNb3ZlKHByZXZpb3VzKSkgewogICAgICAg
ICBwcmV2aW91cyA9IGNoaWxkLT5wcmV2aW91c0luUHJlT3JkZXIoKTsKICAgICAgICAgY2hpbGQt
PnBhcmVudCgpLT5yZW1vdmVDaGlsZCgqY2hpbGQpOwotICAgICAgICBBU1NFUlQoY291bnRlck1h
cHMoKS5maW5kKCZjaGlsZC0+b3duZXIoKSktPnZhbHVlLT5nZXQoaWRlbnRpZmllcikgPT0gY2hp
bGQpOwotICAgICAgICBjb3VudGVyTWFwcygpLmZpbmQoJmNoaWxkLT5vd25lcigpKS0+dmFsdWUt
PnJlbW92ZShpZGVudGlmaWVyKTsKKyAgICAgICAgQVNTRVJUKGNvdW50ZXJNYXBzKCkuZmluZCgm
Y2hpbGQtPm93bmVyKCkpLT52YWx1ZS5nZXQoaWRlbnRpZmllcikgPT0gY2hpbGQpOworICAgICAg
ICBjb3VudGVyTWFwcygpLmZpbmQoJmNoaWxkLT5vd25lcigpKS0+dmFsdWUucmVtb3ZlKGlkZW50
aWZpZXIpOwogICAgIH0KICAgICBpZiAoYXV0byogcGFyZW50ID0gbm9kZS5wYXJlbnQoKSkKICAg
ICAgICAgcGFyZW50LT5yZW1vdmVDaGlsZChub2RlKTsKQEAgLTQ2NCwxMCArNDYxLDggQEAgc3Rh
dGljIHZvaWQgZGVzdHJveUNvdW50ZXJOb2RlV2l0aG91dE1hcFJlbW92YWwoY29uc3QgQXRvbVN0
cmluZyYgaWRlbnRpZmllciwgQ28KIHZvaWQgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJO
b2RlcyhSZW5kZXJFbGVtZW50JiBvd25lcikKIHsKICAgICBBU1NFUlQob3duZXIuaGFzQ291bnRl
ck5vZGVNYXAoKSk7Ci0gICAgYXV0byYgbWFwcyA9IGNvdW50ZXJNYXBzKCk7Ci0gICAgQVNTRVJU
KG1hcHMuY29udGFpbnMoJm93bmVyKSk7Ci0gICAgYXV0byBjb3VudGVyTWFwID0gbWFwcy50YWtl
KCZvd25lcik7Ci0gICAgZm9yIChhdXRvJiBjb3VudGVyTWFwRW50cnkgOiAqY291bnRlck1hcCkK
KyAgICBBU1NFUlQoY291bnRlck1hcHMoKS5jb250YWlucygmb3duZXIpKTsKKyAgICBmb3IgKGF1
dG8mIGNvdW50ZXJNYXBFbnRyeSA6IGNvdW50ZXJNYXBzKCkudGFrZSgmb3duZXIpKQogICAgICAg
ICBkZXN0cm95Q291bnRlck5vZGVXaXRob3V0TWFwUmVtb3ZhbChjb3VudGVyTWFwRW50cnkua2V5
LCBjb3VudGVyTWFwRW50cnkudmFsdWUpOwogICAgIG93bmVyLnNldEhhc0NvdW50ZXJOb2RlTWFw
KGZhbHNlKTsKIH0KQEAgLTQ3Nyw3ICs0NzIsNyBAQCB2b2lkIFJlbmRlckNvdW50ZXI6OmRlc3Ry
b3lDb3VudGVyTm9kZShSZW5kZXJFbGVtZW50JiBvd25lciwgY29uc3QgQXRvbVN0cmluZyYgaQog
ICAgIGF1dG8gbWFwID0gY291bnRlck1hcHMoKS5maW5kKCZvd25lcik7CiAgICAgaWYgKG1hcCA9
PSBjb3VudGVyTWFwcygpLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgYXV0byBub2RlID0g
bWFwLT52YWx1ZS0+dGFrZShpZGVudGlmaWVyKTsKKyAgICBhdXRvIG5vZGUgPSBtYXAtPnZhbHVl
LnRha2UoaWRlbnRpZmllcik7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm47CiAgICAg
ZGVzdHJveUNvdW50ZXJOb2RlV2l0aG91dE1hcFJlbW92YWwoaWRlbnRpZmllciwgKm5vZGUpOwpA
QCAtNTA5LDI0ICs1MDQsMjIgQEAgdm9pZCBSZW5kZXJDb3VudGVyOjpyZW5kZXJlclJlbW92ZWRG
cm9tVHJlZShSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKIAogc3RhdGljIHZvaWQgdXBkYXRlQ291
bnRlcnMoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCiB7Ci0gICAgYXV0byogZGlyZWN0aXZlTWFw
ID0gcmVuZGVyZXIuc3R5bGUoKS5jb3VudGVyRGlyZWN0aXZlcygpOwotICAgIGlmICghZGlyZWN0
aXZlTWFwKQotICAgICAgICByZXR1cm47CisgICAgYXV0byYgZGlyZWN0aXZlTWFwID0gcmVuZGVy
ZXIuc3R5bGUoKS5jb3VudGVyRGlyZWN0aXZlcygpOwogICAgIGlmICghcmVuZGVyZXIuaGFzQ291
bnRlck5vZGVNYXAoKSkgewotICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGRpcmVjdGl2ZU1hcC0+
a2V5cygpKQorICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGRpcmVjdGl2ZU1hcC5rZXlzKCkpCiAg
ICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIGtleSwgZmFsc2UpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIEFTU0VSVChjb3VudGVyTWFwcygpLmNvbnRhaW5zKCZyZW5k
ZXJlcikpOwotICAgIGF1dG8qIGNvdW50ZXJNYXAgPSBjb3VudGVyTWFwcygpLmZpbmQoJnJlbmRl
cmVyKS0+dmFsdWUuZ2V0KCk7Ci0gICAgZm9yIChhdXRvJiBrZXkgOiBkaXJlY3RpdmVNYXAtPmtl
eXMoKSkgewotICAgICAgICBSZWZQdHI8Q291bnRlck5vZGU+IG5vZGUgPSBjb3VudGVyTWFwLT5n
ZXQoa2V5KTsKKyAgICBhdXRvJiBjb3VudGVyTWFwID0gY291bnRlck1hcHMoKS5maW5kKCZyZW5k
ZXJlciktPnZhbHVlOworICAgIGZvciAoYXV0byYga2V5IDogZGlyZWN0aXZlTWFwLmtleXMoKSkg
eworICAgICAgICBSZWZQdHI8Q291bnRlck5vZGU+IG5vZGUgPSBjb3VudGVyTWFwLmdldChrZXkp
OwogICAgICAgICBpZiAoIW5vZGUpIHsKICAgICAgICAgICAgIG1ha2VDb3VudGVyTm9kZShyZW5k
ZXJlciwga2V5LCBmYWxzZSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAg
ICAgICBhdXRvIHBsYWNlID0gZmluZFBsYWNlRm9yQ291bnRlcihyZW5kZXJlciwga2V5LCBub2Rl
LT5oYXNSZXNldFR5cGUoKSk7Ci0gICAgICAgIGlmIChub2RlICE9IGNvdW50ZXJNYXAtPmdldChr
ZXkpKQorICAgICAgICBpZiAobm9kZSAhPSBjb3VudGVyTWFwLmdldChrZXkpKQogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIENvdW50ZXJOb2RlKiBwYXJlbnQgPSBub2RlLT5wYXJlbnQo
KTsKICAgICAgICAgaWYgKHBsYWNlLnBhcmVudCA9PSBwYXJlbnQgJiYgcGxhY2UucHJldmlvdXNT
aWJsaW5nID09IG5vZGUtPnByZXZpb3VzU2libGluZygpKQpAQCAtNTYxLDM5ICs1NTQsMjUgQEAg
dm9pZCBSZW5kZXJDb3VudGVyOjpyZW5kZXJlclN0eWxlQ2hhbmdlZFNsb3dDYXNlKFJlbmRlckVs
ZW1lbnQmIHJlbmRlcmVyLCBjb25zdAogICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC0+cmVu
ZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOyAvLyBjYW5ub3QgaGF2ZSBnZW5lcmF0ZWQgY29udGVu
dCBvciBpZiBpdCBjYW4gaGF2ZSwgaXQgd2lsbCBiZSBoYW5kbGVkIGR1cmluZyBhdHRhY2hpbmcK
IAotICAgIGNvbnN0IENvdW50ZXJEaXJlY3RpdmVNYXAqIG9sZENvdW50ZXJEaXJlY3RpdmVzOwot
ICAgIGlmIChvbGRTdHlsZSAmJiAob2xkQ291bnRlckRpcmVjdGl2ZXMgPSBvbGRTdHlsZS0+Y291
bnRlckRpcmVjdGl2ZXMoKSkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ld0NvdW50ZXJEaXJlY3Rp
dmVzID0gbmV3U3R5bGUuY291bnRlckRpcmVjdGl2ZXMoKSkgewotICAgICAgICAgICAgZm9yIChh
dXRvJiBrZXlWYWx1ZSA6ICpuZXdDb3VudGVyRGlyZWN0aXZlcykgewotICAgICAgICAgICAgICAg
IGF1dG8gZXhpc3RpbmdFbnRyeSA9IG9sZENvdW50ZXJEaXJlY3RpdmVzLT5maW5kKGtleVZhbHVl
LmtleSk7Ci0gICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nRW50cnkgIT0gb2xkQ291bnRlckRp
cmVjdGl2ZXMtPmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ0VudHJ5
LT52YWx1ZSA9PSBrZXlWYWx1ZS52YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgICAgICAgICBSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRlck5v
ZGUocmVuZGVyZXIsIGtleVZhbHVlLmtleSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIC8vIFdlIG11c3QgY3JlYXRlIHRoaXMgbm9kZSBoZXJlLCBiZWNhdXNlIHRoZSBjaGFu
Z2VkIG5vZGUgbWF5IGJlIGEgbm9kZSB3aXRoIG5vIGRpc3BsYXkgc3VjaCBhcwotICAgICAgICAg
ICAgICAgIC8vIGFzIHRob3NlIGNyZWF0ZWQgYnkgdGhlIGluY3JlbWVudCBvciByZXNldCBkaXJl
Y3RpdmVzIGFuZCB0aGUgcmUtbGF5b3V0IHRoYXQgd2lsbCBoYXBwZW4gd2lsbAotICAgICAgICAg
ICAgICAgIC8vIG5vdCBjYXRjaCB0aGUgY2hhbmdlIGlmIHRoZSBub2RlIGhhZCBubyBjaGlsZHJl
bi4KLSAgICAgICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIGtleVZhbHVlLmtl
eSwgZmFsc2UpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gRGVzdHJveWluZyBvbGQg
Y291bnRlcnMgdGhhdCBkbyBub3QgZXhpc3QgaW4gdGhlIG5ldyBjb3VudGVyRGlyZWN0aXZlIG1h
cC4KLSAgICAgICAgICAgIGZvciAoYXV0byYga2V5IDogb2xkQ291bnRlckRpcmVjdGl2ZXMtPmtl
eXMoKSkgewotICAgICAgICAgICAgICAgIGlmICghbmV3Q291bnRlckRpcmVjdGl2ZXMtPmNvbnRh
aW5zKGtleSkpCi0gICAgICAgICAgICAgICAgICAgIFJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3Vu
dGVyTm9kZShyZW5kZXJlciwga2V5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGlmIChyZW5kZXJlci5oYXNDb3VudGVyTm9kZU1hcCgpKQotICAgICAgICAg
ICAgICAgIFJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVyTm9kZXMocmVuZGVyZXIpOwotICAg
ICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ld0NvdW50ZXJEaXJlY3Rp
dmVzID0gbmV3U3R5bGUuY291bnRlckRpcmVjdGl2ZXMoKSkgewotICAgICAgICAgICAgZm9yIChh
dXRvJiBrZXkgOiBuZXdDb3VudGVyRGlyZWN0aXZlcy0+a2V5cygpKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gV2UgbXVzdCBjcmVhdGUgdGhpcyBub2RlIGhlcmUsIGJlY2F1c2UgdGhlIGFkZGVkIG5v
ZGUgbWF5IGJlIGEgbm9kZSB3aXRoIG5vIGRpc3BsYXkgc3VjaCBhcwotICAgICAgICAgICAgICAg
IC8vIGFzIHRob3NlIGNyZWF0ZWQgYnkgdGhlIGluY3JlbWVudCBvciByZXNldCBkaXJlY3RpdmVz
IGFuZCB0aGUgcmUtbGF5b3V0IHRoYXQgd2lsbCBoYXBwZW4gd2lsbAotICAgICAgICAgICAgICAg
IC8vIG5vdCBjYXRjaCB0aGUgY2hhbmdlIGlmIHRoZSBub2RlIGhhZCBubyBjaGlsZHJlbi4KLSAg
ICAgICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIGtleSwgZmFsc2UpOwotICAg
ICAgICAgICAgfQorICAgIENvdW50ZXJEaXJlY3RpdmVNYXAgZW1wdHlNYXA7CisgICAgYXV0byYg
b2xkQ291bnRlckRpcmVjdGl2ZXMgPSBvbGRTdHlsZSA/IG9sZFN0eWxlLT5jb3VudGVyRGlyZWN0
aXZlcygpIDogZW1wdHlNYXA7CisgICAgYXV0byYgbmV3Q291bnRlckRpcmVjdGl2ZXMgPSBuZXdT
dHlsZS5jb3VudGVyRGlyZWN0aXZlcygpOworICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiBuZXdD
b3VudGVyRGlyZWN0aXZlcykgeworICAgICAgICBhdXRvIGV4aXN0aW5nRW50cnkgPSBvbGRDb3Vu
dGVyRGlyZWN0aXZlcy5maW5kKGtleVZhbHVlLmtleSk7CisgICAgICAgIGlmIChleGlzdGluZ0Vu
dHJ5ICE9IG9sZENvdW50ZXJEaXJlY3RpdmVzLmVuZCgpKSB7CisgICAgICAgICAgICBpZiAoZXhp
c3RpbmdFbnRyeS0+dmFsdWUgPT0ga2V5VmFsdWUudmFsdWUpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICBSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRlck5vZGUocmVu
ZGVyZXIsIGtleVZhbHVlLmtleSk7CiAgICAgICAgIH0KKyAgICAgICAgLy8gV2UgbXVzdCBjcmVh
dGUgdGhpcyBub2RlIGhlcmUsIGJlY2F1c2UgdGhlIGNoYW5nZWQgbm9kZSBtYXkgYmUgYSBub2Rl
IHdpdGggbm8gZGlzcGxheSBzdWNoIGFzCisgICAgICAgIC8vIGFzIHRob3NlIGNyZWF0ZWQgYnkg
dGhlIGluY3JlbWVudCBvciByZXNldCBkaXJlY3RpdmVzIGFuZCB0aGUgcmUtbGF5b3V0IHRoYXQg
d2lsbCBoYXBwZW4gd2lsbAorICAgICAgICAvLyBub3QgY2F0Y2ggdGhlIGNoYW5nZSBpZiB0aGUg
bm9kZSBoYWQgbm8gY2hpbGRyZW4uCisgICAgICAgIG1ha2VDb3VudGVyTm9kZShyZW5kZXJlciwg
a2V5VmFsdWUua2V5LCBmYWxzZSk7CisgICAgfQorICAgIC8vIERlc3Ryb3kgb2xkIGNvdW50ZXJz
IHRoYXQgZG8gbm90IGV4aXN0IGluIHRoZSBuZXcgbWFwLgorICAgIGZvciAoYXV0byYga2V5IDog
b2xkQ291bnRlckRpcmVjdGl2ZXMua2V5cygpKSB7CisgICAgICAgIGlmICghbmV3Q291bnRlckRp
cmVjdGl2ZXMuY29udGFpbnMoa2V5KSkKKyAgICAgICAgICAgIFJlbmRlckNvdW50ZXI6OmRlc3Ry
b3lDb3VudGVyTm9kZShyZW5kZXJlciwga2V5KTsKICAgICB9CiB9CiAKQEAgLTYxOSw3ICs1OTgs
NyBAQCB2b2lkIHNob3dDb3VudGVyUmVuZGVyZXJUcmVlKGNvbnN0IFdlYkNvcmU6OlJlbmRlck9i
amVjdCogcmVuZGVyZXIsIGNvbnN0IGNoYXIqCiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXAg
TjolcCBQOiVwIFBTOiVwIE5TOiVwIEM6JXBcbiIsCiAgICAgICAgICAgICBjdXJyZW50LCBjdXJy
ZW50LT5ub2RlKCksIGN1cnJlbnQtPnBhcmVudCgpLCBjdXJyZW50LT5wcmV2aW91c1NpYmxpbmco
KSwKICAgICAgICAgICAgIGN1cnJlbnQtPm5leHRTaWJsaW5nKCksIGRvd25jYXN0PFdlYkNvcmU6
OlJlbmRlckVsZW1lbnQ+KCpjdXJyZW50KS5oYXNDb3VudGVyTm9kZU1hcCgpID8KLSAgICAgICAg
ICAgIGNvdW50ZXJOYW1lID8gV2ViQ29yZTo6Y291bnRlck1hcHMoKS5maW5kKGRvd25jYXN0PFdl
YkNvcmU6OlJlbmRlckVsZW1lbnQ+KGN1cnJlbnQpKS0+dmFsdWUtPmdldChpZGVudGlmaWVyKSA6
IChXZWJDb3JlOjpDb3VudGVyTm9kZSopMSA6IChXZWJDb3JlOjpDb3VudGVyTm9kZSopMCk7Cisg
ICAgICAgICAgICBjb3VudGVyTmFtZSA/IFdlYkNvcmU6OmNvdW50ZXJNYXBzKCkuZmluZChkb3du
Y2FzdDxXZWJDb3JlOjpSZW5kZXJFbGVtZW50PihjdXJyZW50KSktPnZhbHVlLmdldChpZGVudGlm
aWVyKSA6IChXZWJDb3JlOjpDb3VudGVyTm9kZSopMSA6IChXZWJDb3JlOjpDb3VudGVyTm9kZSop
MCk7CiAgICAgfQogICAgIGZmbHVzaChzdGRlcnIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJDb3VudGVyLmgKaW5kZXggYjUzNTY2M2FmYzgxNDQ4OWEyODExNTI2MTNhOTY0YjEz
MjM4NDE1ZC4uMjhmMGQ3ODZmZTM3ZDUyYTg1NDhhZTQxYmZmMzRhNzFmZjIyMTIxNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5oCkBAIC02MSw3ICs2MSw3IEBAIHBy
aXZhdGU6CiAKIGlubGluZSB2b2lkIFJlbmRlckNvdW50ZXI6OnJlbmRlcmVyU3R5bGVDaGFuZ2Vk
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUsIGNv
bnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSkKIHsKLSAgICBpZiAoKCFvbGRTdHlsZSB8fCAhb2xk
U3R5bGUtPmNvdW50ZXJEaXJlY3RpdmVzKCkpICYmICFuZXdTdHlsZS5jb3VudGVyRGlyZWN0aXZl
cygpKQorICAgIGlmICgoIW9sZFN0eWxlIHx8IG9sZFN0eWxlLT5jb3VudGVyRGlyZWN0aXZlcygp
LmlzRW1wdHkoKSkgJiYgbmV3U3R5bGUuY291bnRlckRpcmVjdGl2ZXMoKS5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIHJlbmRlcmVyU3R5bGVDaGFuZ2VkU2xvd0Nhc2UocmVuZGVy
ZXIsIG9sZFN0eWxlLCBuZXdTdHlsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRnJhZ21lbnRlZEZsb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZyYWdtZW50ZWRGbG93LmNwcAppbmRleCA0MmRjMTkyMDUzYmZlN2Y5ZmQzNzMwYTUx
NDgyNjkyMmJmZTVmN2QwLi43ODUxM2UxNzA4OTNlYzY2ZmVlNjM2YzQ0NjVkNzU1NTlhMWVkMjJl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRlZEZs
b3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFnbWVudGVkRmxv
dy5jcHAKQEAgLTk1LDggKzk1LDcgQEAgdm9pZCBSZW5kZXJGcmFnbWVudGVkRmxvdzo6aW52YWxp
ZGF0ZUZyYWdtZW50cyhNYXJraW5nQmVoYXZpb3IgbWFya2luZ1BhcmVudHMpCiAgICAgbV9mcmFn
bWVudFJhbmdlTWFwLmNsZWFyKCk7CiAgICAgbV9icmVha0JlZm9yZVRvRnJhZ21lbnRNYXAuY2xl
YXIoKTsKICAgICBtX2JyZWFrQWZ0ZXJUb0ZyYWdtZW50TWFwLmNsZWFyKCk7Ci0gICAgaWYgKG1f
bGluZVRvRnJhZ21lbnRNYXApCi0gICAgICAgIG1fbGluZVRvRnJhZ21lbnRNYXAtPmNsZWFyKCk7
CisgICAgbV9saW5lVG9GcmFnbWVudE1hcC5jbGVhcigpOwogICAgIHNldE5lZWRzTGF5b3V0KG1h
cmtpbmdQYXJlbnRzKTsKIAogICAgIG1fZnJhZ21lbnRzSW52YWxpZGF0ZWQgPSB0cnVlOwpAQCAt
NDUwLDExICs0NDksOCBAQCB2b2lkIFJlbmRlckZyYWdtZW50ZWRGbG93OjpyZW1vdmVSZW5kZXJC
b3hGcmFnbWVudEluZm8oUmVuZGVyQm94JiBib3gpCiAKIHZvaWQgUmVuZGVyRnJhZ21lbnRlZEZs
b3c6OnJlbW92ZUxpbmVGcmFnbWVudEluZm8oY29uc3QgUmVuZGVyQmxvY2tGbG93JiBibG9ja0Zs
b3cpCiB7Ci0gICAgaWYgKCFtX2xpbmVUb0ZyYWdtZW50TWFwKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBmb3IgKGF1dG8qIGN1cnIgPSBibG9ja0Zsb3cuZmlyc3RSb290Qm94KCk7IGN1cnI7IGN1
cnIgPSBjdXJyLT5uZXh0Um9vdEJveCgpKQotICAgICAgICBtX2xpbmVUb0ZyYWdtZW50TWFwLT5y
ZW1vdmUoY3Vycik7CisgICAgZm9yIChhdXRvKiBib3ggPSBibG9ja0Zsb3cuZmlyc3RSb290Qm94
KCk7IGJveDsgYm94ID0gYm94LT5uZXh0Um9vdEJveCgpKQorICAgICAgICBtX2xpbmVUb0ZyYWdt
ZW50TWFwLnJlbW92ZShib3gpOwogCiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oY2hlY2tMaW5lc0NvbnNpc3RlbmN5KGJsb2NrRmxvdykpOwogfQpAQCAtNzYwLDEwICs3NTYs
NyBAQCBib29sIFJlbmRlckZyYWdtZW50ZWRGbG93OjpvYmplY3RJbkZsb3dGcmFnbWVudChjb25z
dCBSZW5kZXJPYmplY3QqIG9iamVjdCwgY29ucwogI2lmICFBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTl9ESVNBQkxFRAogYm9vbCBSZW5kZXJGcmFnbWVudGVkRmxvdzo6Y2hlY2tMaW5l
c0NvbnNpc3RlbmN5KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgcmVtb3ZlZEJsb2NrKSBjb25zdAog
ewotICAgIGlmICghbV9saW5lVG9GcmFnbWVudE1hcCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBmb3IgKGF1dG8mIGxpbmVQYWlyIDogKm1fbGluZVRvRnJhZ21lbnRNYXAuZ2V0KCkpIHsK
KyAgICBmb3IgKGF1dG8mIGxpbmVQYWlyIDogbV9saW5lVG9GcmFnbWVudE1hcCkgewogICAgICAg
ICBjb25zdCBSb290SW5saW5lQm94KiBsaW5lID0gbGluZVBhaXIua2V5OwogICAgICAgICBSZW5k
ZXJGcmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQgPSBsaW5lUGFpci52YWx1ZTsKICAgICAgICAg
aWYgKCZsaW5lLT5ibG9ja0Zsb3coKSA9PSAmcmVtb3ZlZEJsb2NrKQpAQCAtNzgwLDggKzc3Myw3
IEBAIGJvb2wgUmVuZGVyRnJhZ21lbnRlZEZsb3c6OmNoZWNrTGluZXNDb25zaXN0ZW5jeShjb25z
dCBSZW5kZXJCbG9ja0Zsb3cmIHJlbW92ZWRCCiAKIHZvaWQgUmVuZGVyRnJhZ21lbnRlZEZsb3c6
OmNsZWFyTGluZXNUb0ZyYWdtZW50TWFwKCkKIHsKLSAgICBpZiAobV9saW5lVG9GcmFnbWVudE1h
cCkKLSAgICAgICAgbV9saW5lVG9GcmFnbWVudE1hcC0+Y2xlYXIoKTsKKyAgICBtX2xpbmVUb0Zy
YWdtZW50TWFwLmNsZWFyKCk7CiB9CiAKIHZvaWQgUmVuZGVyRnJhZ21lbnRlZEZsb3c6OmRlbGV0
ZUxpbmVzKCkKQEAgLTExMzEsMTMgKzExMjMsNCBAQCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciog
UmVuZGVyRnJhZ21lbnRlZEZsb3c6OmN1cnJlbnRGcmFnbWVudCgpIGNvbnN0CiAgICAgcmV0dXJu
IG1fY3VycmVudEZyYWdtZW50TWFpbnRhaW5lciA/ICZtX2N1cnJlbnRGcmFnbWVudE1haW50YWlu
ZXItPmZyYWdtZW50KCkgOiBudWxscHRyOwogfQogCi1Db250YWluaW5nRnJhZ21lbnRNYXAmIFJl
bmRlckZyYWdtZW50ZWRGbG93Ojpjb250YWluaW5nRnJhZ21lbnRNYXAoKQotewotICAgIGlmICgh
bV9saW5lVG9GcmFnbWVudE1hcCkKLSAgICAgICAgbV9saW5lVG9GcmFnbWVudE1hcCA9IG1ha2VV
bmlxdWU8Q29udGFpbmluZ0ZyYWdtZW50TWFwPigpOwotCi0gICAgcmV0dXJuICptX2xpbmVUb0Zy
YWdtZW50TWFwLmdldCgpOwotfQotCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFnbWVudGVkRmxvdy5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50ZWRGbG93LmgKaW5kZXggYjczYmUy
YjFiMGU0ODI3ZWRhZTYwMjdhYTZlMzVmY2IxNzFkNjM2MS4uMDNiYjE3YjdkMGE0MWU0OWU0MGJi
YjJjMjdlMjkzYjQyZmY5NzdjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZyYWdtZW50ZWRGbG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZyYWdtZW50ZWRGbG93LmgKQEAgLTE2OSw3ICsxNjksNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRDdXJyZW50RnJhZ21lbnRNYWludGFpbmVyKEN1cnJlbnRSZW5kZXJGcmFnbWVudENvbnRh
aW5lck1haW50YWluZXIqIGN1cnJlbnRGcmFnbWVudE1haW50YWluZXIpIHsgbV9jdXJyZW50RnJh
Z21lbnRNYWludGFpbmVyID0gY3VycmVudEZyYWdtZW50TWFpbnRhaW5lcjsgfQogICAgIFJlbmRl
ckZyYWdtZW50Q29udGFpbmVyKiBjdXJyZW50RnJhZ21lbnQoKSBjb25zdDsKIAotICAgIENvbnRh
aW5pbmdGcmFnbWVudE1hcCYgY29udGFpbmluZ0ZyYWdtZW50TWFwKCk7CisgICAgQ29udGFpbmlu
Z0ZyYWdtZW50TWFwJiBjb250YWluaW5nRnJhZ21lbnRNYXAoKSB7IHJldHVybiBtX2xpbmVUb0Zy
YWdtZW50TWFwOyB9CiAKICAgICBib29sIGNhY2hlZEVuY2xvc2luZ0ZyYWdtZW50ZWRGbG93TmVl
ZHNVcGRhdGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogCkBAIC0yMzYsNyAr
MjM2LDcgQEAgcHJvdGVjdGVkOgogICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyTGlzdCBtX2Zy
YWdtZW50TGlzdDsKIAogICAgIC8vIE1hcCBhIGxpbmUgdG8gaXRzIGNvbnRhaW5pbmcgZnJhZ21l
bnQuCi0gICAgc3RkOjp1bmlxdWVfcHRyPENvbnRhaW5pbmdGcmFnbWVudE1hcD4gbV9saW5lVG9G
cmFnbWVudE1hcDsKKyAgICBDb250YWluaW5nRnJhZ21lbnRNYXAgbV9saW5lVG9GcmFnbWVudE1h
cDsKIAogICAgIC8vIE1hcCBhIGJveCB0byB0aGUgbGlzdCBvZiBmcmFnbWVudHMgaW4gd2hpY2gg
dGhlIGJveCBpcyByZW5kZXJlZC4KICAgICB1c2luZyBSZW5kZXJGcmFnbWVudENvbnRhaW5lclJh
bmdlTWFwID0gSGFzaE1hcDxjb25zdCBSZW5kZXJCb3gqLCBSZW5kZXJGcmFnbWVudENvbnRhaW5l
clJhbmdlPjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlk
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcAppbmRleCA2NmJl
ZWRkMjExZGIwMzZjNGIwMzkzYWQyZTY2NTY1YzcwZmY0YWU4Li43MzcxNmQyOWQxY2QwYWFlMmI0
NWQ4ZGZiMDU3Njc0N2FkYzUxMDM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyR3JpZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdy
aWQuY3BwCkBAIC0zNzIsNyArMzcyLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJHcmlkOjpndXR0ZXJz
U2l6ZShjb25zdCBHcmlkJiBncmlkLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGkKICAgICBz
aXplX3Qgbm9uRW1wdHlUcmFja3NCZWZvcmVTdGFydExpbmUgPSAwOwogICAgIGlmIChzdGFydExp
bmUgJiYgZ3JpZC5pc0VtcHR5QXV0b1JlcGVhdFRyYWNrKGRpcmVjdGlvbiwgc3RhcnRMaW5lKSkg
ewogICAgICAgICBub25FbXB0eVRyYWNrc0JlZm9yZVN0YXJ0TGluZSA9IHN0YXJ0TGluZTsKLSAg
ICAgICAgYXV0byBiZWdpbiA9IGdyaWQuYXV0b1JlcGVhdEVtcHR5VHJhY2tzKGRpcmVjdGlvbikt
PmJlZ2luKCk7CisgICAgICAgIGF1dG8gYmVnaW4gPSBncmlkLmF1dG9SZXBlYXRFbXB0eVRyYWNr
cyhkaXJlY3Rpb24pLmJlZ2luKCk7CiAgICAgICAgIGZvciAoYXV0byBpdCA9IGJlZ2luOyAqaXQg
IT0gc3RhcnRMaW5lOyArK2l0KSB7CiAgICAgICAgICAgICBBU1NFUlQobm9uRW1wdHlUcmFja3NC
ZWZvcmVTdGFydExpbmUpOwogICAgICAgICAgICAgLS1ub25FbXB0eVRyYWNrc0JlZm9yZVN0YXJ0
TGluZTsKQEAgLTM4NSw4ICszODUsOCBAQCBMYXlvdXRVbml0IFJlbmRlckdyaWQ6Omd1dHRlcnNT
aXplKGNvbnN0IEdyaWQmIGdyaWQsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaQogICAgIC8v
IGNvbGxhcHNlZCB0cmFjay4gSWYgd2UgZmluZCBhIG5vbiBjb2xsYXBzZWQgdHJhY2sgd2UgbmVl
ZCB0byBhZGQgdGhhdCBnYXAuCiAgICAgaWYgKGdyaWQuaXNFbXB0eUF1dG9SZXBlYXRUcmFjayhk
aXJlY3Rpb24sIGVuZExpbmUgLSAxKSkgewogICAgICAgICB1bnNpZ25lZCBub25FbXB0eVRyYWNr
c0FmdGVyRW5kTGluZSA9IGdyaWQubnVtVHJhY2tzKGRpcmVjdGlvbikgLSBlbmRMaW5lOwotICAg
ICAgICBhdXRvIGN1cnJlbnRFbXB0eVRyYWNrID0gZ3JpZC5hdXRvUmVwZWF0RW1wdHlUcmFja3Mo
ZGlyZWN0aW9uKS0+ZmluZChlbmRMaW5lIC0gMSk7Ci0gICAgICAgIGF1dG8gZW5kRW1wdHlUcmFj
ayA9IGdyaWQuYXV0b1JlcGVhdEVtcHR5VHJhY2tzKGRpcmVjdGlvbiktPmVuZCgpOworICAgICAg
ICBhdXRvIGN1cnJlbnRFbXB0eVRyYWNrID0gZ3JpZC5hdXRvUmVwZWF0RW1wdHlUcmFja3MoZGly
ZWN0aW9uKS5maW5kKGVuZExpbmUgLSAxKTsKKyAgICAgICAgYXV0byBlbmRFbXB0eVRyYWNrID0g
Z3JpZC5hdXRvUmVwZWF0RW1wdHlUcmFja3MoZGlyZWN0aW9uKS5lbmQoKTsKICAgICAgICAgLy8g
SGFzaFNldCBpdGVyYXRvcnMgZG8gbm90IGltcGxlbWVudCBvcGVyYXRvci0gc28gd2UgaGF2ZSB0
byBtYW51YWxseSBpdGVyYXRlIHRvIGtub3cgdGhlIG51bWJlciBvZiByZW1haW5pbmcgZW1wdHkg
dHJhY2tzLgogICAgICAgICBmb3IgKGF1dG8gaXQgPSArK2N1cnJlbnRFbXB0eVRyYWNrOyBpdCAh
PSBlbmRFbXB0eVRyYWNrOyArK2l0KSB7CiAgICAgICAgICAgICBBU1NFUlQobm9uRW1wdHlUcmFj
a3NBZnRlckVuZExpbmUgPj0gMSk7CkBAIC01NDIsMzAgKzU0MiwyNiBAQCB1bnNpZ25lZCBSZW5k
ZXJHcmlkOjpjb21wdXRlQXV0b1JlcGVhdFRyYWNrc0NvdW50KEdyaWRUcmFja1NpemluZ0RpcmVj
dGlvbiBkaXJlYwogfQogCiAKLXN0ZDo6dW5pcXVlX3B0cjxPcmRlcmVkVHJhY2tJbmRleFNldD4g
UmVuZGVyR3JpZDo6Y29tcHV0ZUVtcHR5VHJhY2tzRm9yQXV0b1JlcGVhdChHcmlkJiBncmlkLCBH
cmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKSBjb25zdAorT3JkZXJlZFRyYWNrSW5k
ZXhTZXQgUmVuZGVyR3JpZDo6Y29tcHV0ZUVtcHR5VHJhY2tzRm9yQXV0b1JlcGVhdChHcmlkJiBn
cmlkLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKSBjb25zdAogewogICAgIGJv
b2wgaXNSb3dBeGlzID0gZGlyZWN0aW9uID09IEZvckNvbHVtbnM7CiAgICAgaWYgKChpc1Jvd0F4
aXMgJiYgc3R5bGUoKS5ncmlkQXV0b1JlcGVhdENvbHVtbnNUeXBlKCkgIT0gQXV0b1JlcGVhdFR5
cGU6OkZpdCkKICAgICAgICAgfHwgKCFpc1Jvd0F4aXMgJiYgc3R5bGUoKS5ncmlkQXV0b1JlcGVh
dFJvd3NUeXBlKCkgIT0gQXV0b1JlcGVhdFR5cGU6OkZpdCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPE9yZGVyZWRU
cmFja0luZGV4U2V0PiBlbXB0eVRyYWNrSW5kZXhlczsKKyAgICBPcmRlcmVkVHJhY2tJbmRleFNl
dCBlbXB0eVRyYWNrSW5kZXhlczsKICAgICB1bnNpZ25lZCBpbnNlcnRpb25Qb2ludCA9IGlzUm93
QXhpcyA/IHN0eWxlKCkuZ3JpZEF1dG9SZXBlYXRDb2x1bW5zSW5zZXJ0aW9uUG9pbnQoKSA6IHN0
eWxlKCkuZ3JpZEF1dG9SZXBlYXRSb3dzSW5zZXJ0aW9uUG9pbnQoKTsKICAgICB1bnNpZ25lZCBm
aXJzdEF1dG9SZXBlYXRUcmFjayA9IGluc2VydGlvblBvaW50ICsgZ3JpZC5leHBsaWNpdEdyaWRT
dGFydChkaXJlY3Rpb24pOwogICAgIHVuc2lnbmVkIGxhc3RBdXRvUmVwZWF0VHJhY2sgPSBmaXJz
dEF1dG9SZXBlYXRUcmFjayArIGdyaWQuYXV0b1JlcGVhdFRyYWNrcyhkaXJlY3Rpb24pOwogCiAg
ICAgaWYgKCFncmlkLmhhc0dyaWRJdGVtcygpIHx8IHNob3VsZEFwcGx5U2l6ZUNvbnRhaW5tZW50
KCp0aGlzKSkgewotICAgICAgICBlbXB0eVRyYWNrSW5kZXhlcyA9IG1ha2VVbmlxdWU8T3JkZXJl
ZFRyYWNrSW5kZXhTZXQ+KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgdHJhY2tJbmRleCA9IGZp
cnN0QXV0b1JlcGVhdFRyYWNrOyB0cmFja0luZGV4IDwgbGFzdEF1dG9SZXBlYXRUcmFjazsgKyt0
cmFja0luZGV4KQotICAgICAgICAgICAgZW1wdHlUcmFja0luZGV4ZXMtPmFkZCh0cmFja0luZGV4
KTsKKyAgICAgICAgICAgIGVtcHR5VHJhY2tJbmRleGVzLmFkZCh0cmFja0luZGV4KTsKICAgICB9
IGVsc2UgewogICAgICAgICBmb3IgKHVuc2lnbmVkIHRyYWNrSW5kZXggPSBmaXJzdEF1dG9SZXBl
YXRUcmFjazsgdHJhY2tJbmRleCA8IGxhc3RBdXRvUmVwZWF0VHJhY2s7ICsrdHJhY2tJbmRleCkg
ewogICAgICAgICAgICAgR3JpZEl0ZXJhdG9yIGl0ZXJhdG9yKGdyaWQsIGRpcmVjdGlvbiwgdHJh
Y2tJbmRleCk7Ci0gICAgICAgICAgICBpZiAoIWl0ZXJhdG9yLm5leHRHcmlkSXRlbSgpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFlbXB0eVRyYWNrSW5kZXhlcykKLSAgICAgICAgICAgICAgICAg
ICAgZW1wdHlUcmFja0luZGV4ZXMgPSBtYWtlVW5pcXVlPE9yZGVyZWRUcmFja0luZGV4U2V0Pigp
OwotICAgICAgICAgICAgICAgIGVtcHR5VHJhY2tJbmRleGVzLT5hZGQodHJhY2tJbmRleCk7Ci0g
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWl0ZXJhdG9yLm5leHRHcmlkSXRlbSgpKQor
ICAgICAgICAgICAgICAgIGVtcHR5VHJhY2tJbmRleGVzLmFkZCh0cmFja0luZGV4KTsKICAgICAg
ICAgfQogICAgIH0KICAgICByZXR1cm4gZW1wdHlUcmFja0luZGV4ZXM7CkBAIC04ODUsNyArODgx
LDcgQEAgVmVjdG9yPExheW91dFVuaXQ+IFJlbmRlckdyaWQ6OnRyYWNrU2l6ZXNGb3JDb21wdXRl
ZFN0eWxlKEdyaWRUcmFja1NpemluZ0RpcmVjdGkKICAgICBpZiAoIWhhc0NvbGxhcHNlZFRyYWNr
cykKICAgICAgICAgcmV0dXJuIHRyYWNrczsKIAotICAgIHNpemVfdCByZW1haW5pbmdFbXB0eVRy
YWNrcyA9IG1fZ3JpZC5hdXRvUmVwZWF0RW1wdHlUcmFja3MoZGlyZWN0aW9uKS0+c2l6ZSgpOwor
ICAgIHNpemVfdCByZW1haW5pbmdFbXB0eVRyYWNrcyA9IG1fZ3JpZC5hdXRvUmVwZWF0RW1wdHlU
cmFja3MoZGlyZWN0aW9uKS5zaXplKCk7CiAgICAgc2l6ZV90IGxhc3RMaW5lID0gdHJhY2tzLnNp
emUoKTsKICAgICBnYXAgPSBncmlkR2FwKGRpcmVjdGlvbik7CiAgICAgZm9yIChzaXplX3QgaSA9
IDE7IGkgPCBsYXN0TGluZTsgKytpKSB7CkBAIC0xMDM5LDcgKzEwMzUsNyBAQCB2b2lkIFJlbmRl
ckdyaWQ6OnBvcHVsYXRlR3JpZFBvc2l0aW9uc0ZvckRpcmVjdGlvbihHcmlkVHJhY2tTaXppbmdE
aXJlY3Rpb24gZGlyZQogICAgIHVuc2lnbmVkIG51bWJlck9mTGluZXMgPSBudW1iZXJPZlRyYWNr
cyArIDE7CiAgICAgdW5zaWduZWQgbGFzdExpbmUgPSBudW1iZXJPZkxpbmVzIC0gMTsKICAgICBi
b29sIGhhc0NvbGxhcHNlZFRyYWNrcyA9IG1fZ3JpZC5oYXNBdXRvUmVwZWF0RW1wdHlUcmFja3Mo
ZGlyZWN0aW9uKTsKLSAgICBzaXplX3QgbnVtYmVyT2ZDb2xsYXBzZWRUcmFja3MgPSBoYXNDb2xs
YXBzZWRUcmFja3MgPyBtX2dyaWQuYXV0b1JlcGVhdEVtcHR5VHJhY2tzKGRpcmVjdGlvbiktPnNp
emUoKSA6IDA7CisgICAgc2l6ZV90IG51bWJlck9mQ29sbGFwc2VkVHJhY2tzID0gaGFzQ29sbGFw
c2VkVHJhY2tzID8gbV9ncmlkLmF1dG9SZXBlYXRFbXB0eVRyYWNrcyhkaXJlY3Rpb24pLnNpemUo
KSA6IDA7CiAgICAgY29uc3QgYXV0byYgb2Zmc2V0ID0gZGlyZWN0aW9uID09IEZvckNvbHVtbnMg
PyBtX29mZnNldEJldHdlZW5Db2x1bW5zIDogbV9vZmZzZXRCZXR3ZWVuUm93czsKICAgICBhdXRv
JiBwb3NpdGlvbnMgPSBpc1Jvd0F4aXMgPyBtX2NvbHVtblBvc2l0aW9ucyA6IG1fcm93UG9zaXRp
b25zOwogICAgIHBvc2l0aW9ucy5yZXNpemUobnVtYmVyT2ZMaW5lcyk7CkBAIC0xODI1LDcgKzE4
MjEsNyBAQCB1bnNpZ25lZCBSZW5kZXJHcmlkOjpub25Db2xsYXBzZWRUcmFja3MoR3JpZFRyYWNr
U2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikgY29ucwogICAgIGF1dG8mIHRyYWNrcyA9IG1fdHJh
Y2tTaXppbmdBbGdvcml0aG0udHJhY2tzKGRpcmVjdGlvbik7CiAgICAgc2l6ZV90IG51bWJlck9m
VHJhY2tzID0gdHJhY2tzLnNpemUoKTsKICAgICBib29sIGhhc0NvbGxhcHNlZFRyYWNrcyA9IG1f
Z3JpZC5oYXNBdXRvUmVwZWF0RW1wdHlUcmFja3MoZGlyZWN0aW9uKTsKLSAgICBzaXplX3QgbnVt
YmVyT2ZDb2xsYXBzZWRUcmFja3MgPSBoYXNDb2xsYXBzZWRUcmFja3MgPyBtX2dyaWQuYXV0b1Jl
cGVhdEVtcHR5VHJhY2tzKGRpcmVjdGlvbiktPnNpemUoKSA6IDA7CisgICAgc2l6ZV90IG51bWJl
ck9mQ29sbGFwc2VkVHJhY2tzID0gaGFzQ29sbGFwc2VkVHJhY2tzID8gbV9ncmlkLmF1dG9SZXBl
YXRFbXB0eVRyYWNrcyhkaXJlY3Rpb24pLnNpemUoKSA6IDA7CiAgICAgcmV0dXJuIG51bWJlck9m
VHJhY2tzIC0gbnVtYmVyT2ZDb2xsYXBzZWRUcmFja3M7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyR3JpZC5oCmluZGV4IGVmYjEwNjQzM2I0NzM1MGYxYjMxOWM4M2YwNmFmNGQ0ZjIw
ZWFjODkuLjVkYWQyMmE4OTBjYTA0YjRkOWViYzM1NzZlMzViYjM4ZGU1ZWFiODIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuaApAQCAtMTA1LDcgKzEwNSw3IEBAIHByaXZhdGU6
CiAKICAgICB1bnNpZ25lZCBjbGFtcEF1dG9SZXBlYXRUcmFja3MoR3JpZFRyYWNrU2l6aW5nRGly
ZWN0aW9uLCB1bnNpZ25lZCBhdXRvUmVwZWF0VHJhY2tzKSBjb25zdDsKIAotICAgIHN0ZDo6dW5p
cXVlX3B0cjxPcmRlcmVkVHJhY2tJbmRleFNldD4gY29tcHV0ZUVtcHR5VHJhY2tzRm9yQXV0b1Jl
cGVhdChHcmlkJiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uKSBjb25zdDsKKyAgICBPcmRlcmVk
VHJhY2tJbmRleFNldCBjb21wdXRlRW1wdHlUcmFja3NGb3JBdXRvUmVwZWF0KEdyaWQmLCBHcmlk
VHJhY2tTaXppbmdEaXJlY3Rpb24pIGNvbnN0OwogCiAgICAgdm9pZCBwZXJmb3JtR3JpZEl0ZW1z
UHJlTGF5b3V0KGNvbnN0IEdyaWRUcmFja1NpemluZ0FsZ29yaXRobSYpIGNvbnN0OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCmlu
ZGV4IDRlNzc4NDU5OTIzMTQyYTg5NmE5OTdlYjdlY2JjOTViYjhiZThkOGUuLmJjZTBlYTMzYjJm
ODhiN2M3MDdjZTAwOTJkNDM1YTRhMDRiZGIxYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCkBAIC03OTIsMTEgKzc5Miw5IEBA
IGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21w
b3NpdGluZ1VwZGF0ZVR5cGUgdXBkYXRlCiAgICAgaWYgKHVwZGF0ZVR5cGUgPT0gQ29tcG9zaXRp
bmdVcGRhdGVUeXBlOjpPblNjcm9sbCB8fCB1cGRhdGVUeXBlID09IENvbXBvc2l0aW5nVXBkYXRl
VHlwZTo6T25Db21wb3NpdGVkU2Nyb2xsKSB7CiAgICAgICAgIC8vIFdlIG9ubHkgZ2V0IGhlcmUg
aWYgd2UgZGlkbid0IHNjcm9sbCBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZCwgc28gdGhpcyB1cGRh
dGUgbmVlZHMgdG8gcmUtcG9zaXRpb24gdmlld3BvcnQtY29uc3RyYWluZWQgbGF5ZXJzLgogICAg
ICAgICBpZiAobV9yZW5kZXJWaWV3LnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zv
ckZpeGVkUG9zaXRpb25FbmFibGVkKCkgJiYgaXNQYWdlU2Nyb2xsKSB7Ci0gICAgICAgICAgICBp
ZiAoYXV0byogdmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMgPSBtX3JlbmRlclZpZXcuZnJhbWVW
aWV3KCkudmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMoKSkgewotICAgICAgICAgICAgICAgIGZv
ciAoYXV0byYgcmVuZGVyZXIgOiAqdmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGF1dG8qIGxheWVyID0gcmVuZGVyZXIubGF5ZXIoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGxheWVyLT5zZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRh
dGUoKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGF1dG8mIHJlbmRlcmVy
IDogbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLnZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzKCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogbGF5ZXIgPSByZW5kZXJlci5sYXllcigpKQor
ICAgICAgICAgICAgICAgICAgICBsYXllci0+c2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBk
YXRlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtNDg4NCwxMiArNDg4Miw2IEBA
IHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTeW5jaHJvbm91c1Njcm9sbGluZ05v
ZGVzKCkKICAgICAgICAgfQogICAgIH07CiAgICAgCi0gICAgYXV0byBzbG93UmVwYWludE9iamVj
dHMgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuc2xvd1JlcGFpbnRPYmplY3RzKCk7Ci0gICAg
aWYgKCFzbG93UmVwYWludE9iamVjdHMpIHsKLSAgICAgICAgY2xlYXJTeW5jaHJvbm91c1JlYXNv
bnNPbk5vZGVzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBhdXRvIHJlbGV2YW50
U2Nyb2xsaW5nU2NvcGUgPSBbXShjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBS
ZW5kZXJMYXllciYgbGF5ZXIpIHsKICAgICAgICAgaWYgKCZsYXllci5yZW5kZXJlcigpID09ICZy
ZW5kZXJlcikKICAgICAgICAgICAgIHJldHVybiBsYXllci5ib3hTY3JvbGxpbmdTY29wZSgpOwpA
QCAtNDg5OCw3ICs0ODkwLDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVN5
bmNocm9ub3VzU2Nyb2xsaW5nTm9kZXMoKQogCiAgICAgYXV0byByb290U2Nyb2xsaW5nU2NvcGUg
PSBtX3JlbmRlclZpZXcubGF5ZXIoKS0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOwogCi0gICAg
Zm9yIChhdXRvJiByZW5kZXJlciA6ICpzbG93UmVwYWludE9iamVjdHMpIHsKKyAgICBmb3IgKGF1
dG8mIHJlbmRlcmVyIDogbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLnNsb3dSZXBhaW50T2JqZWN0
cygpKSB7CiAgICAgICAgIGF1dG8gbGF5ZXIgPSByZW5kZXJlci5lbmNsb3NpbmdMYXllcigpOwog
ICAgICAgICBpZiAoIWxheWVyKQogICAgICAgICAgICAgY29udGludWU7CkBAIC00OTE0LDcgKzQ5
MDYsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU3luY2hyb25vdXNTY3Jv
bGxpbmdOb2RlcygpCiAgICAgICAgICAgICBub2Rlc1RvQ2xlYXIucmVtb3ZlKGVuY2xvc2luZ1Nj
cm9sbGluZ05vZGVJRCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBjbGVhclN5bmNo
cm9ub3VzUmVhc29uc09uTm9kZXMoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwCmluZGV4IGRlMmJjZTUxZmE5
YjhkMTFhMGU0OWU5MWY0ZmE5ZmQxZDUwNTg1ODMuLmQ2NWY5ZmQzYWYxNmExM2M0OTNhYjVmMGYw
MzAzNTExMDg3NDEzOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHAKQEAgLTgyLDEwICs4MiwxMCBAQCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjp+UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSgpCiB2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNsZWFyKCkKIHsKICAgICBhdXRvJiByZW5kZXJlciA9
IG1fbGF5ZXIucmVuZGVyZXIoKTsKLSAgICBBU1NFUlQobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFy
ZWEgPT0gcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpLmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEo
dGhpcykpOworICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSByZW5kZXJl
ci52aWV3KCkuZnJhbWVWaWV3KCkuY29udGFpbnNTY3JvbGxhYmxlQXJlYSgqdGhpcykpOwogCiAg
ICAgaWYgKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKQotICAgICAgICByZW5kZXJlci52aWV3
KCkuZnJhbWVWaWV3KCkucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisgICAgICAgIHJlbmRl
cmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5yZW1vdmVTY3JvbGxhYmxlQXJlYSgqdGhpcyk7CiAKICNp
ZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKICAgICB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlz
dGVuZXJGb3JTY3JvbGxpbmcoKTsKQEAgLTE1OTgsMTUgKzE1OTgsMTUgQEAgdm9pZCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhhc092ZXJm
bG93KQogICAgIGJvb2wgaXNTY3JvbGxhYmxlID0gaGFzT3ZlcmZsb3cgJiYgaXNWaXNpYmxlVG9I
aXRUZXN0OwogICAgIGJvb2wgYWRkZWRPclJlbW92ZWQgPSBmYWxzZTsKIAotICAgIEFTU0VSVCht
X3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSBmcmFtZVZpZXcuY29udGFpbnNTY3JvbGxhYmxl
QXJlYSh0aGlzKSk7CisgICAgQVNTRVJUKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID09IGZy
YW1lVmlldy5jb250YWluc1Njcm9sbGFibGVBcmVhKCp0aGlzKSk7CiAKICAgICBpZiAoaXNTY3Jv
bGxhYmxlKSB7CiAgICAgICAgIGlmICghbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpIHsKLSAg
ICAgICAgICAgIGFkZGVkT3JSZW1vdmVkID0gZnJhbWVWaWV3LmFkZFNjcm9sbGFibGVBcmVhKHRo
aXMpOworICAgICAgICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcuYWRkU2Nyb2xsYWJs
ZUFyZWEoKnRoaXMpOwogICAgICAgICAgICAgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPSB0
cnVlOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJl
YSkgewotICAgICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5yZW1vdmVTY3JvbGxhYmxl
QXJlYSh0aGlzKTsKKyAgICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcucmVtb3ZlU2Ny
b2xsYWJsZUFyZWEoKnRoaXMpOwogICAgICAgICBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9
IGZhbHNlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3gu
Y3BwCmluZGV4IDlkYWQ1MTcxMDc4ZmM2MjNlZDhjYjFhZjBhYzY0Y2JjYTQzZWM5OTMuLmI1MjJk
ZjMyMDQyZjExOWNhZmZiNTE5ZDUzNDAxNjg5NGRkOWRmYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKQEAgLTk2LDcgKzk2LDcgQEAgUmVuZGVyTGlzdEJv
eDo6UmVuZGVyTGlzdEJveChIVE1MU2VsZWN0RWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUm
JiBzdHlsZSkKICAgICAsIG1fb3B0aW9uc1dpZHRoKDApCiAgICAgLCBtX2luZGV4T2Zmc2V0KDAp
CiB7Ci0gICAgdmlldygpLmZyYW1lVmlldygpLmFkZFNjcm9sbGFibGVBcmVhKHRoaXMpOworICAg
IHZpZXcoKS5mcmFtZVZpZXcoKS5hZGRTY3JvbGxhYmxlQXJlYSgqdGhpcyk7CiB9CiAKIFJlbmRl
ckxpc3RCb3g6On5SZW5kZXJMaXN0Qm94KCkKQEAgLTEwNyw3ICsxMDcsNyBAQCBSZW5kZXJMaXN0
Qm94Ojp+UmVuZGVyTGlzdEJveCgpCiB2b2lkIFJlbmRlckxpc3RCb3g6OndpbGxCZURlc3Ryb3ll
ZCgpCiB7CiAgICAgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIoZmFsc2UpOwotICAgIHZpZXcoKS5m
cmFtZVZpZXcoKS5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKyAgICB2aWV3KCkuZnJhbWVW
aWV3KCkucmVtb3ZlU2Nyb2xsYWJsZUFyZWEoKnRoaXMpOwogICAgIFJlbmRlckJsb2NrRmxvdzo6
d2lsbEJlRGVzdHJveWVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck11bHRpQ29sdW1uRmxvdy5jcHAKaW5kZXggYmRiZTRhNzE0ZDBjNmM3YTYzZGNjYzgz
NTcyYmIxZjg3MDhlNmEwZC4uOTA0Y2E0MWRmYzIxZDVmMmI4NGZiODVmZmQxMzIyN2ViODMwZWMw
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1u
Rmxvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1u
Rmxvdy5jcHAKQEAgLTQyLDE2ICs0Miw2IEBAIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChS
ZW5kZXJNdWx0aUNvbHVtbkZsb3cpOwogCiBSZW5kZXJNdWx0aUNvbHVtbkZsb3c6OlJlbmRlck11
bHRpQ29sdW1uRmxvdyhEb2N1bWVudCYgZG9jdW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5bGUpCiAg
ICAgOiBSZW5kZXJGcmFnbWVudGVkRmxvdyhkb2N1bWVudCwgV1RGTW92ZShzdHlsZSkpCi0gICAg
LCBtX3NwYW5uZXJNYXAobWFrZVVuaXF1ZTxTcGFubmVyTWFwPigpKQotICAgICwgbV9sYXN0U2V0
V29ya2VkT24obnVsbHB0cikKLSAgICAsIG1fY29sdW1uQ291bnQoMSkKLSAgICAsIG1fY29sdW1u
V2lkdGgoMCkKLSAgICAsIG1fY29sdW1uSGVpZ2h0QXZhaWxhYmxlKDApCi0gICAgLCBtX2luTGF5
b3V0KGZhbHNlKQotICAgICwgbV9pbkJhbGFuY2luZ1Bhc3MoZmFsc2UpCi0gICAgLCBtX25lZWRz
SGVpZ2h0c1JlY2FsY3VsYXRpb24oZmFsc2UpCi0gICAgLCBtX3Byb2dyZXNzaW9uSXNJbmxpbmUo
ZmFsc2UpCi0gICAgLCBtX3Byb2dyZXNzaW9uSXNSZXZlcnNlZChmYWxzZSkKIHsKICAgICBzZXRG
cmFnbWVudGVkRmxvd1N0YXRlKEluc2lkZUluRnJhZ21lbnRlZEZsb3cpOwogfQpAQCAtMTExLDcg
KzEwMSw3IEBAIFJlbmRlckJveCogUmVuZGVyTXVsdGlDb2x1bW5GbG93OjpwcmV2aW91c0NvbHVt
blNldE9yU3Bhbm5lclNpYmxpbmdPZihjb25zdCBSZW5kCiAKIFJlbmRlck11bHRpQ29sdW1uU3Bh
bm5lclBsYWNlaG9sZGVyKiBSZW5kZXJNdWx0aUNvbHVtbkZsb3c6OmZpbmRDb2x1bW5TcGFubmVy
UGxhY2Vob2xkZXIoUmVuZGVyQm94KiBzcGFubmVyKSBjb25zdAogewotICAgIHJldHVybiBtX3Nw
YW5uZXJNYXAtPmdldChzcGFubmVyKS5nZXQoKTsKKyAgICByZXR1cm4gbV9zcGFubmVyTWFwLmdl
dChzcGFubmVyKS5nZXQoKTsKIH0KIAogdm9pZCBSZW5kZXJNdWx0aUNvbHVtbkZsb3c6OmxheW91
dCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1
bW5GbG93LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93
LmgKaW5kZXggZWI2ZjA4ODc5NDU4NWU4MjU1ZGI3YzBjODU4OGQwMmRjMWE1ZWY5Ni4uODY3OGFk
NjJjYmM5ZmVlOTg3YjNmNTBlYjM4ZTRkNzQwNzJhNGJkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxvdy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3cuaApAQCAtNDQsNyArNDQsNyBAQCBw
dWJsaWM6CiAgICAgUmVuZGVyTXVsdGlDb2x1bW5TZXQqIGZpcnN0TXVsdGlDb2x1bW5TZXQoKSBj
b25zdDsKICAgICBSZW5kZXJNdWx0aUNvbHVtblNldCogbGFzdE11bHRpQ29sdW1uU2V0KCkgY29u
c3Q7CiAgICAgUmVuZGVyQm94KiBmaXJzdENvbHVtblNldE9yU3Bhbm5lcigpIGNvbnN0OwotICAg
IGJvb2wgaGFzQ29sdW1uU3Bhbm5lcigpIGNvbnN0IHsgcmV0dXJuICFtX3NwYW5uZXJNYXAtPmlz
RW1wdHkoKTsgfQorICAgIGJvb2wgaGFzQ29sdW1uU3Bhbm5lcigpIGNvbnN0IHsgcmV0dXJuICFt
X3NwYW5uZXJNYXAuaXNFbXB0eSgpOyB9CiAgICAgc3RhdGljIFJlbmRlckJveCogbmV4dENvbHVt
blNldE9yU3Bhbm5lclNpYmxpbmdPZihjb25zdCBSZW5kZXJCb3gqKTsKICAgICBzdGF0aWMgUmVu
ZGVyQm94KiBwcmV2aW91c0NvbHVtblNldE9yU3Bhbm5lclNpYmxpbmdPZihjb25zdCBSZW5kZXJC
b3gqKTsKIApAQCAtOTYsNyArOTYsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzaG91bGRDaGVja0Nv
bHVtbkJyZWFrcygpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPFJlbmRl
ckJveCosIFdlYWtQdHI8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXI+PiBTcGFu
bmVyTWFwOwotICAgIFNwYW5uZXJNYXAmIHNwYW5uZXJNYXAoKSB7IHJldHVybiAqbV9zcGFubmVy
TWFwOyB9CisgICAgU3Bhbm5lck1hcCYgc3Bhbm5lck1hcCgpIHsgcmV0dXJuIG1fc3Bhbm5lck1h
cDsgfQogCiBwcml2YXRlOgogICAgIGJvb2wgaXNSZW5kZXJNdWx0aUNvbHVtbkZsb3coKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CkBAIC0xMTUsMjMgKzExNSwyMyBAQCBwcml2YXRl
OgogICAgIGJvb2wgaXNQYWdlTG9naWNhbEhlaWdodEtub3duKCkgY29uc3Qgb3ZlcnJpZGU7CiAK
IHByaXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFNwYW5uZXJNYXA+IG1fc3Bhbm5lck1hcDsK
KyAgICBTcGFubmVyTWFwIG1fc3Bhbm5lck1hcDsKIAogICAgIC8vIFRoZSBsYXN0IHNldCB3ZSB3
b3JrZWQgb24uIEl0J3Mgbm90IHRvIGJlIHVzZWQgYXMgdGhlICJjdXJyZW50IHNldCIuIFRoZSBj
b25jZXB0IG9mIGEKICAgICAvLyAiY3VycmVudCBzZXQiIGlzIGRpZmZpY3VsdCwgc2luY2UgbGF5
b3V0IG1heSBqdW1wIGJhY2sgYW5kIGZvcnRoIGluIHRoZSB0cmVlLCBkdWUgdG8gd3JvbmcKICAg
ICAvLyB0b3AgbG9jYXRpb24gZXN0aW1hdGVzIChkdWUgdG8gZS5nLiBtYXJnaW4gY29sbGFwc2lu
ZyksIGFuZCBwb3NzaWJseSBmb3Igb3RoZXIgcmVhc29ucy4KLSAgICBSZW5kZXJNdWx0aUNvbHVt
blNldCogbV9sYXN0U2V0V29ya2VkT247CisgICAgUmVuZGVyTXVsdGlDb2x1bW5TZXQqIG1fbGFz
dFNldFdvcmtlZE9uIHsgbnVsbHB0ciB9OwogCi0gICAgdW5zaWduZWQgbV9jb2x1bW5Db3VudDsg
Ly8gVGhlIGRlZmF1bHQgY29sdW1uIGNvdW50L3dpZHRoIHRoYXQgYXJlIGJhc2VkIG9mZiBvdXIg
Y29udGFpbmluZyBibG9jayB3aWR0aC4gVGhlc2UgdmFsdWVzIHJlcHJlc2VudCBvbmx5IHRoZSBk
ZWZhdWx0LAorICAgIHVuc2lnbmVkIG1fY29sdW1uQ291bnQgeyAxIH07IC8vIFRoZSBkZWZhdWx0
IGNvbHVtbiBjb3VudC93aWR0aCB0aGF0IGFyZSBiYXNlZCBvZmYgb3VyIGNvbnRhaW5pbmcgYmxv
Y2sgd2lkdGguIFRoZXNlIHZhbHVlcyByZXByZXNlbnQgb25seSB0aGUgZGVmYXVsdCwKICAgICBM
YXlvdXRVbml0IG1fY29sdW1uV2lkdGg7IC8vIEEgbXVsdGktY29sdW1uIGJsb2NrIHRoYXQgaXMg
c3BsaXQgYWNyb3NzIHZhcmlhYmxlIHdpZHRoIHBhZ2VzIG9yIGZyYWdtZW50cyB3aWxsIGhhdmUg
ZGlmZmVyZW50IGNvbHVtbiBjb3VudHMgYW5kIHdpZHRocyBpbiBlYWNoLiBUaGVzZSB2YWx1ZXMg
d2lsbCBiZSBjYWNoZWQgKGV2ZW50dWFsbHkpIGZvciBtdWx0aS1jb2x1bW4gYmxvY2tzLgogCiAg
ICAgTGF5b3V0VW5pdCBtX2NvbHVtbkhlaWdodEF2YWlsYWJsZTsgLy8gVG90YWwgaGVpZ2h0IGF2
YWlsYWJsZSB0byBjb2x1bW5zLCBvciAwIGlmIGF1dG8uCi0gICAgYm9vbCBtX2luTGF5b3V0OyAv
LyBTZXQgd2hpbGUgd2UncmUgbGF5aW5nIG91dCB0aGUgZmxvdyB0aHJlYWQsIGR1cmluZyB3aGlj
aCBjb2x1bSBzZXQgaGVpZ2h0cyBhcmUgdW5rbm93bi4KLSAgICBib29sIG1faW5CYWxhbmNpbmdQ
YXNzOyAvLyBHdWFyZCB0byBhdm9pZCByZS1lbnRlcmluZyBjb2x1bW4gYmFsYW5jaW5nLgotICAg
IGJvb2wgbV9uZWVkc0hlaWdodHNSZWNhbGN1bGF0aW9uOworICAgIGJvb2wgbV9pbkxheW91dCB7
IGZhbHNlIH07IC8vIFNldCB3aGlsZSB3ZSdyZSBsYXlpbmcgb3V0IHRoZSBmbG93IHRocmVhZCwg
ZHVyaW5nIHdoaWNoIGNvbHVtIHNldCBoZWlnaHRzIGFyZSB1bmtub3duLgorICAgIGJvb2wgbV9p
bkJhbGFuY2luZ1Bhc3MgeyBmYWxzZSB9OyAvLyBHdWFyZCB0byBhdm9pZCByZS1lbnRlcmluZyBj
b2x1bW4gYmFsYW5jaW5nLgorICAgIGJvb2wgbV9uZWVkc0hlaWdodHNSZWNhbGN1bGF0aW9uIHsg
ZmFsc2UgfTsKICAgICAKLSAgICBib29sIG1fcHJvZ3Jlc3Npb25Jc0lubGluZTsKLSAgICBib29s
IG1fcHJvZ3Jlc3Npb25Jc1JldmVyc2VkOworICAgIGJvb2wgbV9wcm9ncmVzc2lvbklzSW5saW5l
IHsgZmFsc2UgfTsKKyAgICBib29sIG1fcHJvZ3Jlc3Npb25Jc1JldmVyc2VkIHsgZmFsc2UgfTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKaW5kZXggY2I0NjQxZWZmZDFjNjMyYWIxOWY5MTU5
NTI4ZWI5N2RlMDk3ODEyYi4uY2M0MWM4MDM5ZDZiOGFmMjIwMDE0NmU3ODJlMmEwZTY2MmE3Yzlm
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5j
cHAKQEAgLTUwNSw3ICs1MDUsNyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cmVsYXlvdXRD
ZWxsSWZGbGV4ZWQoUmVuZGVyVGFibGVDZWxsJiBjZWxsLCBpbnQgcm93SW5kZQogICAgIH0KIAog
ICAgIGlmICghY2VsbENoaWxkcmVuRmxleCkgewotICAgICAgICBpZiAoVHJhY2tlZFJlbmRlcmVy
TGlzdEhhc2hTZXQqIHBlcmNlbnRIZWlnaHREZXNjZW5kYW50cyA9IGNlbGwucGVyY2VudEhlaWdo
dERlc2NlbmRhbnRzKCkpIHsKKyAgICAgICAgaWYgKGF1dG8gcGVyY2VudEhlaWdodERlc2NlbmRh
bnRzID0gY2VsbC5wZXJjZW50SGVpZ2h0RGVzY2VuZGFudHMoKSkgewogICAgICAgICAgICAgZm9y
IChhdXRvKiBkZXNjZW5kYW50IDogKnBlcmNlbnRIZWlnaHREZXNjZW5kYW50cykgewogICAgICAg
ICAgICAgICAgIGlmIChmbGV4QWxsQ2hpbGRyZW4gfHwgc2hvdWxkRmxleENlbGxDaGlsZChjZWxs
LCAqZGVzY2VuZGFudCkpIHsKICAgICAgICAgICAgICAgICAgICAgY2VsbENoaWxkcmVuRmxleCA9
IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCmluZGV4IGFm
MDQxOWNmNmM0OTI1ZDFjOTQ0NzI3M2E3MTA1ZDFjNGI5ODVhMTcuLmI0MzAyZDYzZGU4NDcwNGE0
YzIwODhhZTg3ODM0MzJlZTQzY2U1NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJXaWRnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJXaWRnZXQuY3BwCkBAIC00Myw4ICs0Myw4IEBAIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1Q
TChSZW5kZXJXaWRnZXQpOwogCiBzdGF0aWMgSGFzaE1hcDxjb25zdCBXaWRnZXQqLCBSZW5kZXJX
aWRnZXQqPiYgd2lkZ2V0UmVuZGVyZXJNYXAoKQogewotICAgIHN0YXRpYyBIYXNoTWFwPGNvbnN0
IFdpZGdldCosIFJlbmRlcldpZGdldCo+KiBzdGF0aWNXaWRnZXRSZW5kZXJlck1hcCA9IG5ldyBI
YXNoTWFwPGNvbnN0IFdpZGdldCosIFJlbmRlcldpZGdldCo+OwotICAgIHJldHVybiAqc3RhdGlj
V2lkZ2V0UmVuZGVyZXJNYXA7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8Y29u
c3QgV2lkZ2V0KiwgUmVuZGVyV2lkZ2V0Kj4+IHN0YXRpY1dpZGdldFJlbmRlcmVyTWFwOworICAg
IHJldHVybiBzdGF0aWNXaWRnZXRSZW5kZXJlck1hcDsKIH0KIAogdW5zaWduZWQgV2lkZ2V0SGll
cmFyY2h5VXBkYXRlc1N1c3BlbnNpb25TY29wZTo6c193aWRnZXRIaWVyYXJjaHlVcGRhdGVTdXNw
ZW5kQ291bnQgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1JlbmRlclN0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5jcHAKaW5kZXggYzQyMTNlNzgwYmUxMDcxZDI1MmU3YWEyZjk4NTc0M2RlMzc2MDY5Zi4u
MTQ0MGQzYzdmNmZkOTE2ZDRiMDcwNDg0MGExMmQ1MTRiYjk5NDRkMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCkBAIC05MTcsNyArOTE3LDcg
QEAgYm9vbCBSZW5kZXJTdHlsZTo6Y2hhbmdlUmVxdWlyZXNMYXlvdXQoY29uc3QgUmVuZGVyU3R5
bGUmIG90aGVyLCBPcHRpb25TZXQ8U3R5bGUKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAv
LyBJZiB0aGUgY291bnRlciBkaXJlY3RpdmVzIGNoYW5nZSwgdHJpZ2dlciBhIHJlbGF5b3V0IHRv
IHJlLWNhbGN1bGF0ZSBjb3VudGVyIHZhbHVlcyBhbmQgcmVidWlsZCB0aGUgY291bnRlciBub2Rl
IHRyZWUuCi0gICAgaWYgKCFhcmVQb2ludGluZ1RvRXF1YWxEYXRhKG1fcmFyZU5vbkluaGVyaXRl
ZERhdGEtPmNvdW50ZXJEaXJlY3RpdmVzLCBvdGhlci5tX3JhcmVOb25Jbmhlcml0ZWREYXRhLT5j
b3VudGVyRGlyZWN0aXZlcykpCisgICAgaWYgKG1fcmFyZU5vbkluaGVyaXRlZERhdGEtPmNvdW50
ZXJEaXJlY3RpdmVzICE9IG90aGVyLm1fcmFyZU5vbkluaGVyaXRlZERhdGEtPmNvdW50ZXJEaXJl
Y3RpdmVzKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmICgodmlzaWJpbGl0eSgpID09
IFZpc2liaWxpdHk6OkNvbGxhcHNlKSAhPSAob3RoZXIudmlzaWJpbGl0eSgpID09IFZpc2liaWxp
dHk6OkNvbGxhcHNlKSkKQEAgLTEwNjQsMjggKzEwNjQsMjMgQEAgc3RhdGljIGJvb2wgcmFyZUlu
aGVyaXRlZERhdGFDaGFuZ2VSZXF1aXJlc1JlcGFpbnQoY29uc3QgU3R5bGVSYXJlSW5oZXJpdGVk
RGF0YSYKIH0KIAogI2lmIEVOQUJMRShDU1NfUEFJTlRJTkdfQVBJKQorCiB2b2lkIFJlbmRlclN0
eWxlOjphZGRDdXN0b21QYWludFdhdGNoUHJvcGVydHkoY29uc3QgU3RyaW5nJiBuYW1lKQogewot
ICAgIGF1dG8mIGRhdGEgPSBtX3JhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpOwotICAgIGlm
ICghZGF0YS5jdXN0b21QYWludFdhdGNoZWRQcm9wZXJ0aWVzKQotICAgICAgICBkYXRhLmN1c3Rv
bVBhaW50V2F0Y2hlZFByb3BlcnRpZXMgPSBtYWtlVW5pcXVlPEhhc2hTZXQ8U3RyaW5nPj4oKTsK
LSAgICBkYXRhLmN1c3RvbVBhaW50V2F0Y2hlZFByb3BlcnRpZXMtPmFkZChuYW1lKTsKKyAgICBt
X3JhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLmN1c3RvbVBhaW50V2F0Y2hlZFByb3BlcnRp
ZXMuYWRkKG5hbWUpOwogfQogCiBpbmxpbmUgc3RhdGljIGJvb2wgY2hhbmdlZEN1c3RvbVBhaW50
V2F0Y2hlZFByb3BlcnR5KGNvbnN0IFJlbmRlclN0eWxlJiBhLCBjb25zdCBTdHlsZVJhcmVOb25J
bmhlcml0ZWREYXRhJiBhRGF0YSwgY29uc3QgUmVuZGVyU3R5bGUmIGIsIGNvbnN0IFN0eWxlUmFy
ZU5vbkluaGVyaXRlZERhdGEmIGJEYXRhKQogewotICAgIGF1dG8qIHByb3BlcnRpZXNBID0gYURh
dGEuY3VzdG9tUGFpbnRXYXRjaGVkUHJvcGVydGllcy5nZXQoKTsKLSAgICBhdXRvKiBwcm9wZXJ0
aWVzQiA9IGJEYXRhLmN1c3RvbVBhaW50V2F0Y2hlZFByb3BlcnRpZXMuZ2V0KCk7CisgICAgYXV0
byYgcHJvcGVydGllc0EgPSBhRGF0YS5jdXN0b21QYWludFdhdGNoZWRQcm9wZXJ0aWVzOworICAg
IGF1dG8mIHByb3BlcnRpZXNCID0gYkRhdGEuY3VzdG9tUGFpbnRXYXRjaGVkUHJvcGVydGllczsK
IAotICAgIGlmIChVTkxJS0VMWShwcm9wZXJ0aWVzQSB8fCBwcm9wZXJ0aWVzQikpIHsKKyAgICBp
ZiAoVU5MSUtFTFkoIXByb3BlcnRpZXNBLmlzRW1wdHkoKSB8fCAhcHJvcGVydGllc0IuaXNFbXB0
eSgpKSkgewogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBuZWVkIHRvIHVzZSBDb21w
dXRlZFN0eWxlRXh0cmFjdG9yIGhlcmUuCiAgICAgICAgIENvbXB1dGVkU3R5bGVFeHRyYWN0b3Ig
ZXh0cmFjdG9yKChFbGVtZW50KikgbnVsbHB0cik7CiAKLSAgICAgICAgZm9yIChhdXRvKiB3YXRj
aFByb3BlcnRpZXNNYXAgOiB7IHByb3BlcnRpZXNBLCBwcm9wZXJ0aWVzQiB9KSB7Ci0gICAgICAg
ICAgICBpZiAoIXdhdGNoUHJvcGVydGllc01hcCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICAgICAgZm9yIChhdXRvJiBuYW1lIDogKndhdGNoUHJvcGVydGllc01hcCkgewor
ICAgICAgICBmb3IgKGF1dG8mIHdhdGNoUHJvcGVydGllc01hcCA6IHsgcHJvcGVydGllc0EsIHBy
b3BlcnRpZXNCIH0pIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgbmFtZSA6IHdhdGNoUHJvcGVy
dGllc01hcCkgewogICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWVBOwogICAg
ICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWVCOwogICAgICAgICAgICAgICAgIGlm
IChpc0N1c3RvbVByb3BlcnR5TmFtZShuYW1lKSkgewpAQCAtMTExNSw2ICsxMTEwLDcgQEAgaW5s
aW5lIHN0YXRpYyBib29sIGNoYW5nZWRDdXN0b21QYWludFdhdGNoZWRQcm9wZXJ0eShjb25zdCBS
ZW5kZXJTdHlsZSYgYSwgY29uc3QKIAogICAgIHJldHVybiBmYWxzZTsKIH0KKwogI2VuZGlmCiAK
IGJvb2wgUmVuZGVyU3R5bGU6OmNoYW5nZVJlcXVpcmVzUmVwYWludChjb25zdCBSZW5kZXJTdHls
ZSYgb3RoZXIsIE9wdGlvblNldDxTdHlsZURpZmZlcmVuY2VDb250ZXh0U2Vuc2l0aXZlUHJvcGVy
dHk+JiBjaGFuZ2VkQ29udGV4dFNlbnNpdGl2ZVByb3BlcnRpZXMpIGNvbnN0CkBAIC0xNTg1LDE3
ICsxNTgxLDE0IEBAIGJvb2wgUmVuZGVyU3R5bGU6Omhhc0VudGlyZWx5Rml4ZWRCYWNrZ3JvdW5k
KCkgY29uc3QKICAgICByZXR1cm4gYWxsTGF5ZXJzQXJlRml4ZWQoYmFja2dyb3VuZExheWVycygp
KTsKIH0KIAotY29uc3QgQ291bnRlckRpcmVjdGl2ZU1hcCogUmVuZGVyU3R5bGU6OmNvdW50ZXJE
aXJlY3RpdmVzKCkgY29uc3QKK2NvbnN0IENvdW50ZXJEaXJlY3RpdmVNYXAmIFJlbmRlclN0eWxl
Ojpjb3VudGVyRGlyZWN0aXZlcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcmFyZU5vbkluaGVy
aXRlZERhdGEtPmNvdW50ZXJEaXJlY3RpdmVzLmdldCgpOworICAgIHJldHVybiBtX3JhcmVOb25J
bmhlcml0ZWREYXRhLT5jb3VudGVyRGlyZWN0aXZlczsKIH0KIAogQ291bnRlckRpcmVjdGl2ZU1h
cCYgUmVuZGVyU3R5bGU6OmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCkKIHsKLSAgICBhdXRvJiBt
YXAgPSBtX3JhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLmNvdW50ZXJEaXJlY3RpdmVzOwot
ICAgIGlmICghbWFwKQotICAgICAgICBtYXAgPSBtYWtlVW5pcXVlPENvdW50ZXJEaXJlY3RpdmVN
YXA+KCk7Ci0gICAgcmV0dXJuICptYXA7CisgICAgcmV0dXJuIG1fcmFyZU5vbkluaGVyaXRlZERh
dGEuYWNjZXNzKCkuY291bnRlckRpcmVjdGl2ZXM7CiB9CiAKIGNvbnN0IEF0b21TdHJpbmcmIFJl
bmRlclN0eWxlOjpoeXBoZW5TdHJpbmcoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvUmVuZGVyU3R5bGUuaAppbmRleCA3Yzg3Y2IxM2JhZTJlYmJjNjUxZTIyODljOGZj
NzZkYjc2NTdhNTFlLi5kMGMwZjRhNTM3ODZjNmNiMDJjYjE1MzIxMWIxNjZiNzA4ODFlYTg4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaApAQCAtMTQ3
Miw3ICsxNDcyLDcgQEAgcHVibGljOgogICAgIGJvb2wgaGFzQXR0ckNvbnRlbnQoKSBjb25zdCB7
IHJldHVybiBtX3JhcmVOb25Jbmhlcml0ZWREYXRhLT5oYXNBdHRyQ29udGVudDsgfQogICAgIHZv
aWQgc2V0SGFzQXR0ckNvbnRlbnQoKTsKIAotICAgIGNvbnN0IENvdW50ZXJEaXJlY3RpdmVNYXAq
IGNvdW50ZXJEaXJlY3RpdmVzKCkgY29uc3Q7CisgICAgY29uc3QgQ291bnRlckRpcmVjdGl2ZU1h
cCYgY291bnRlckRpcmVjdGl2ZXMoKSBjb25zdDsKICAgICBDb3VudGVyRGlyZWN0aXZlTWFwJiBh
Y2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOwogCiAgICAgUXVvdGVzRGF0YSogcXVvdGVzKCkgY29u
c3QgeyByZXR1cm4gbV9yYXJlSW5oZXJpdGVkRGF0YS0+cXVvdGVzLmdldCgpOyB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVk
RGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5o
ZXJpdGVkRGF0YS5jcHAKaW5kZXggODlkMTAyZTJjZjk5YTU5OTBhNzRjZTY5ZTMyNWQ0OWQ2ZjBm
YzJiMC4uNjMzZjk2ODBlZmY1MzEyZjY4NmQzY2I1MDBiN2U1ODliOWFkMGY4NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERh
dGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25J
bmhlcml0ZWREYXRhLmNwcApAQCAtMTQ4LDcgKzE0OCw3IEBAIGlubGluZSBTdHlsZVJhcmVOb25J
bmhlcml0ZWREYXRhOjpTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhKGNvbnN0IFN0eWxlUmFyZU5v
bkluCiAgICAgLCBvdmVyc2Nyb2xsQmVoYXZpb3JYKG8ub3ZlcnNjcm9sbEJlaGF2aW9yWCkKICAg
ICAsIG92ZXJzY3JvbGxCZWhhdmlvclkoby5vdmVyc2Nyb2xsQmVoYXZpb3JZKQogICAgICwgY29u
dGVudChvLmNvbnRlbnQgPyBvLmNvbnRlbnQtPmNsb25lKCkgOiBudWxscHRyKQotICAgICwgY291
bnRlckRpcmVjdGl2ZXMoby5jb3VudGVyRGlyZWN0aXZlcyA/IG1ha2VVbmlxdWU8Q291bnRlckRp
cmVjdGl2ZU1hcD4oKm8uY291bnRlckRpcmVjdGl2ZXMpIDogbnVsbHB0cikKKyAgICAsIGNvdW50
ZXJEaXJlY3RpdmVzKG8uY291bnRlckRpcmVjdGl2ZXMpCiAgICAgLCBhbHRUZXh0KG8uYWx0VGV4
dCkKICAgICAsIGJveFNoYWRvdyhvLmJveFNoYWRvdyA/IG1ha2VVbmlxdWU8U2hhZG93RGF0YT4o
Km8uYm94U2hhZG93KSA6IG51bGxwdHIpCiAgICAgLCB3aWxsQ2hhbmdlKG8ud2lsbENoYW5nZSkK
QEAgLTE3OSw3ICsxNzksNyBAQCBpbmxpbmUgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YTo6U3R5
bGVSYXJlTm9uSW5oZXJpdGVkRGF0YShjb25zdCBTdHlsZVJhcmVOb25JbgogICAgICwganVzdGlm
eUl0ZW1zKG8uanVzdGlmeUl0ZW1zKQogICAgICwganVzdGlmeVNlbGYoby5qdXN0aWZ5U2VsZikK
ICAgICAsIGN1c3RvbVByb3BlcnRpZXMoby5jdXN0b21Qcm9wZXJ0aWVzKQotICAgICwgY3VzdG9t
UGFpbnRXYXRjaGVkUHJvcGVydGllcyhvLmN1c3RvbVBhaW50V2F0Y2hlZFByb3BlcnRpZXMgPyBt
YWtlVW5pcXVlPEhhc2hTZXQ8U3RyaW5nPj4oKm8uY3VzdG9tUGFpbnRXYXRjaGVkUHJvcGVydGll
cykgOiBudWxscHRyKQorICAgICwgY3VzdG9tUGFpbnRXYXRjaGVkUHJvcGVydGllcyhvLmN1c3Rv
bVBhaW50V2F0Y2hlZFByb3BlcnRpZXMpCiAgICAgLCByb3RhdGUoby5yb3RhdGUpCiAgICAgLCBz
Y2FsZShvLnNjYWxlKQogICAgICwgdHJhbnNsYXRlKG8udHJhbnNsYXRlKQpAQCAtMjU2LDcgKzI1
Niw3IEBAIGJvb2wgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YTo6b3BlcmF0b3I9PShjb25zdCBT
dHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhJiBvKSBjCiAgICAgICAgICYmIG92ZXJzY3JvbGxCZWhh
dmlvclggPT0gby5vdmVyc2Nyb2xsQmVoYXZpb3JYCiAgICAgICAgICYmIG92ZXJzY3JvbGxCZWhh
dmlvclkgPT0gby5vdmVyc2Nyb2xsQmVoYXZpb3JZCiAgICAgICAgICYmIGNvbnRlbnREYXRhRXF1
aXZhbGVudChvKQotICAgICAgICAmJiBhcmVQb2ludGluZ1RvRXF1YWxEYXRhKGNvdW50ZXJEaXJl
Y3RpdmVzLCBvLmNvdW50ZXJEaXJlY3RpdmVzKQorICAgICAgICAmJiBjb3VudGVyRGlyZWN0aXZl
cyA9PSBvLmNvdW50ZXJEaXJlY3RpdmVzCiAgICAgICAgICYmIGFsdFRleHQgPT0gby5hbHRUZXh0
CiAgICAgICAgICYmIGFyZVBvaW50aW5nVG9FcXVhbERhdGEoYm94U2hhZG93LCBvLmJveFNoYWRv
dykKICAgICAgICAgJiYgYXJlUG9pbnRpbmdUb0VxdWFsRGF0YSh3aWxsQ2hhbmdlLCBvLndpbGxD
aGFuZ2UpCkBAIC0yODcsOCArMjg3LDcgQEAgYm9vbCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRh
OjpvcGVyYXRvcj09KGNvbnN0IFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEmIG8pIGMKICAgICAg
ICAgJiYganVzdGlmeUl0ZW1zID09IG8uanVzdGlmeUl0ZW1zCiAgICAgICAgICYmIGp1c3RpZnlT
ZWxmID09IG8uanVzdGlmeVNlbGYKICAgICAgICAgJiYgY3VzdG9tUHJvcGVydGllcyA9PSBvLmN1
c3RvbVByb3BlcnRpZXMKLSAgICAgICAgJiYgKChjdXN0b21QYWludFdhdGNoZWRQcm9wZXJ0aWVz
ICYmIG8uY3VzdG9tUGFpbnRXYXRjaGVkUHJvcGVydGllcyAmJiAqY3VzdG9tUGFpbnRXYXRjaGVk
UHJvcGVydGllcyA9PSAqby5jdXN0b21QYWludFdhdGNoZWRQcm9wZXJ0aWVzKQotICAgICAgICAg
ICAgfHwgKCFjdXN0b21QYWludFdhdGNoZWRQcm9wZXJ0aWVzICYmICFvLmN1c3RvbVBhaW50V2F0
Y2hlZFByb3BlcnRpZXMpKQorICAgICAgICAmJiBjdXN0b21QYWludFdhdGNoZWRQcm9wZXJ0aWVz
ID09IG8uY3VzdG9tUGFpbnRXYXRjaGVkUHJvcGVydGllcwogICAgICAgICAmJiBwYWdlU2l6ZVR5
cGUgPT0gby5wYWdlU2l6ZVR5cGUKICAgICAgICAgJiYgdHJhbnNmb3JtU3R5bGUzRCA9PSBvLnRy
YW5zZm9ybVN0eWxlM0QKICAgICAgICAgJiYgYmFja2ZhY2VWaXNpYmlsaXR5ID09IG8uYmFja2Zh
Y2VWaXNpYmlsaXR5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuaAppbmRleCA3N2JhYjk1MDgzN2M3NDk4YjEx
MWJmOTY4ZGEyNGFmOGFiYmUxYjFhLi45MjQ0MmFjOTAxYjE1YmUxMzY1YTRmMWM1ZTM4MjE1Mzk5
OTY4M2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVS
YXJlTm9uSW5oZXJpdGVkRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmgKQEAgLTE0NSw3ICsxNDUsNyBAQCBwdWJsaWM6
CiAgICAgdW5zaWduZWQgb3ZlcnNjcm9sbEJlaGF2aW9yWSA6IDI7IC8vIE92ZXJzY3JvbGxCZWhh
dmlvcgogCiAgICAgc3RkOjp1bmlxdWVfcHRyPENvbnRlbnREYXRhPiBjb250ZW50OwotICAgIHN0
ZDo6dW5pcXVlX3B0cjxDb3VudGVyRGlyZWN0aXZlTWFwPiBjb3VudGVyRGlyZWN0aXZlczsKKyAg
ICBDb3VudGVyRGlyZWN0aXZlTWFwIGNvdW50ZXJEaXJlY3RpdmVzOwogICAgIFN0cmluZyBhbHRU
ZXh0OwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJveFNoYWRvdzsgLy8gRm9y
IGJveC1zaGFkb3cgZGVjb3JhdGlvbnMuCkBAIC0xODgsNyArMTg4LDcgQEAgcHVibGljOgogICAg
IFN0eWxlU2VsZkFsaWdubWVudERhdGEganVzdGlmeVNlbGY7CiAKICAgICBEYXRhUmVmPFN0eWxl
Q3VzdG9tUHJvcGVydHlEYXRhPiBjdXN0b21Qcm9wZXJ0aWVzOwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxIYXNoU2V0PFN0cmluZz4+IGN1c3RvbVBhaW50V2F0Y2hlZFByb3BlcnRpZXM7CisgICAgSGFz
aFNldDxTdHJpbmc+IGN1c3RvbVBhaW50V2F0Y2hlZFByb3BlcnRpZXM7CiAKICAgICBSZWZQdHI8
Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uPiByb3RhdGU7CiAgICAgUmVmUHRyPFNjYWxlVHJhbnNm
b3JtT3BlcmF0aW9uPiBzY2FsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlU2NvcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZS5jcHAKaW5kZXgg
YmFmY2ViODBmOWNkM2EyNzMxZDQyNzA4ZmNmYjE1MmM0ZTJjM2E2Zi4uZTU4NjRkNGJkOGMxYzNm
Y2RkYTNhN2YzMmM2NDdiMTBiZjAwOWE3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVTY29wZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZS5j
cHAKQEAgLTQ5MSw3ICs0OTEsNyBAQCB2b2lkIFNjb3BlOjp1cGRhdGVBY3RpdmVTdHlsZVNoZWV0
cyhVcGRhdGVUeXBlIHVwZGF0ZVR5cGUpCiAKICAgICB1cGRhdGVSZXNvbHZlcihhY3RpdmVDU1NT
dHlsZVNoZWV0cywgc3R5bGVTaGVldENoYW5nZS5yZXNvbHZlclVwZGF0ZVR5cGUpOwogCi0gICAg
bV93ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0TG9va3VwID0gbnVsbHB0cjsK
KyAgICBtX3dlYWtDb3B5T2ZBY3RpdmVTdHlsZVNoZWV0TGlzdEZvckZhc3RMb29rdXAgPSBXVEY6
Om51bGxvcHQ7CiAgICAgbV9hY3RpdmVTdHlsZVNoZWV0cy5zd2FwKGFjdGl2ZUNTU1N0eWxlU2hl
ZXRzKTsKICAgICBtX3N0eWxlU2hlZXRzRm9yU3R5bGVTaGVldExpc3Quc3dhcChhY3RpdmVTdHls
ZVNoZWV0cyk7CiAKQEAgLTU3NCw3ICs1NzQsNyBAQCBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0
eWxlU2hlZXQ+PiBTY29wZTo6YWN0aXZlU3R5bGVTaGVldHNGb3JJbnNwZWN0b3IoKQogYm9vbCBT
Y29wZTo6YWN0aXZlU3R5bGVTaGVldHNDb250YWlucyhjb25zdCBDU1NTdHlsZVNoZWV0KiBzaGVl
dCkgY29uc3QKIHsKICAgICBpZiAoIW1fd2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hlZXRMaXN0Rm9y
RmFzdExvb2t1cCkgewotICAgICAgICBtX3dlYWtDb3B5T2ZBY3RpdmVTdHlsZVNoZWV0TGlzdEZv
ckZhc3RMb29rdXAgPSBtYWtlVW5pcXVlPEhhc2hTZXQ8Y29uc3QgQ1NTU3R5bGVTaGVldCo+Pigp
OworICAgICAgICBtX3dlYWtDb3B5T2ZBY3RpdmVTdHlsZVNoZWV0TGlzdEZvckZhc3RMb29rdXAg
PSBIYXNoU2V0PGNvbnN0IENTU1N0eWxlU2hlZXQqPiB7IH07CiAgICAgICAgIGZvciAoYXV0byYg
YWN0aXZlU3R5bGVTaGVldCA6IG1fYWN0aXZlU3R5bGVTaGVldHMpCiAgICAgICAgICAgICBtX3dl
YWtDb3B5T2ZBY3RpdmVTdHlsZVNoZWV0TGlzdEZvckZhc3RMb29rdXAtPmFkZChhY3RpdmVTdHls
ZVNoZWV0LmdldCgpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9T
dHlsZVNjb3BlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlLmgKaW5kZXggYmE3
NjcyZGQwODQwN2Y0ZDVkYjg1ZjNhNDI2N2NjZDQ2MjAyMDZhMC4uMjcxYmEwMWI0OGJlMWJmNTZi
MzEwMzk4MzNiNWU2MjM3MGYwZDg2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUv
U3R5bGVTY29wZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGUuaApAQCAt
MTY4LDcgKzE2OCw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0Pj4g
bV9zdHlsZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0OwogICAgIFZlY3RvcjxSZWZQdHI8Q1NTU3R5
bGVTaGVldD4+IG1fYWN0aXZlU3R5bGVTaGVldHM7CiAKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVl
X3B0cjxIYXNoU2V0PGNvbnN0IENTU1N0eWxlU2hlZXQqPj4gbV93ZWFrQ29weU9mQWN0aXZlU3R5
bGVTaGVldExpc3RGb3JGYXN0TG9va3VwOworICAgIG11dGFibGUgT3B0aW9uYWw8SGFzaFNldDxj
b25zdCBDU1NTdHlsZVNoZWV0Kj4+IG1fd2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hlZXRMaXN0Rm9y
RmFzdExvb2t1cDsKIAogICAgIC8vIFRyYWNrIHRoZSBjdXJyZW50bHkgbG9hZGluZyB0b3AtbGV2
ZWwgc3R5bGVzaGVldHMgbmVlZGVkIGZvciByZW5kZXJpbmcuCiAgICAgLy8gU2hlZXRzIGxvYWRl
ZCB1c2luZyB0aGUgQGltcG9ydCBkaXJlY3RpdmUgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGlzIGNv
dW50LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDQyMmNlNTVkODE1MjY4
ZWFjNjdmYjIwNWVmZGIyMjVkYTA1YThlZWYuLmJhNjY1ZjNhY2I3ODMzNjM4NmU5NDEzNTY3NDhk
MzZlMjZlZDQ5NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTI3NjMs
MTIgKzI3NjMsMTEgQEAgdW5zaWduZWQgSW50ZXJuYWxzOjpudW1iZXJPZlNjcm9sbGFibGVBcmVh
cygpCiAKICAgICB1bnNpZ25lZCBjb3VudCA9IDA7CiAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1l
bnQtPmZyYW1lKCk7Ci0gICAgaWYgKGZyYW1lLT52aWV3KCktPnNjcm9sbGFibGVBcmVhcygpKQot
ICAgICAgICBjb3VudCArPSBmcmFtZS0+dmlldygpLT5zY3JvbGxhYmxlQXJlYXMoKS0+c2l6ZSgp
OwotCisgICAgaWYgKGZyYW1lLT52aWV3KCkpCisgICAgICAgIGNvdW50ICs9IGZyYW1lLT52aWV3
KCktPnNjcm9sbGFibGVBcmVhcygpLnNpemUoKTsKICAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IGZy
YW1lLT50cmVlKCkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLm5l
eHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGNoaWxkLT52aWV3KCkgJiYgY2hpbGQtPnZpZXco
KS0+c2Nyb2xsYWJsZUFyZWFzKCkpCi0gICAgICAgICAgICBjb3VudCArPSBjaGlsZC0+dmlldygp
LT5zY3JvbGxhYmxlQXJlYXMoKS0+c2l6ZSgpOworICAgICAgICBpZiAoY2hpbGQtPnZpZXcoKSkK
KyAgICAgICAgICAgIGNvdW50ICs9IGNoaWxkLT52aWV3KCktPnNjcm9sbGFibGVBcmVhcygpLnNp
emUoKTsKICAgICB9CiAKICAgICByZXR1cm4gY291bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkU2NoZWR1bGVyLmNwcCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWRTY2hlZHVsZXIuY3BwCmluZGV4IDFlNDgwZjU0
YTJhZTY5NzMxZTc1MzYzN2JmMDhkMzAxNDIzYzcyZWYuLmNiNjM0MzljZjI0ZTNhYmYxZjJkMzk5
MjkxNTVhMGZmYmJjMTE5M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya0xvYWRTY2hlZHVsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya0xvYWRTY2hlZHVsZXIuY3BwCkBAIC0xMzcsOSArMTM3LDcgQEAgdm9pZCBO
ZXR3b3JrTG9hZFNjaGVkdWxlcjo6c2V0UmVzb3VyY2VMb2FkU2NoZWR1bGluZ01vZGUoV2ViQ29y
ZTo6UGFnZUlkZW50aWZpZXIKIHsKICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICBjYXNlIFdlYkNv
cmU6OkxvYWRTY2hlZHVsaW5nTW9kZTo6UHJpb3JpdGl6ZWQ6Ci0gICAgICAgIG1fcGFnZUNvbnRl
eHRzLmVuc3VyZShwYWdlSWRlbnRpZmllciwgWyZdIHsKLSAgICAgICAgICAgIHJldHVybiBtYWtl
VW5pcXVlPFBhZ2VDb250ZXh0PigpOwotICAgICAgICB9KTsKKyAgICAgICAgbV9wYWdlQ29udGV4
dHMuYWRkKHBhZ2VJZGVudGlmaWVyLCBQYWdlQ29udGV4dCB7IH0pOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIFdlYkNvcmU6OkxvYWRTY2hlZHVsaW5nTW9kZTo6RGlyZWN0OgogICAgICAgICBt
X3BhZ2VDb250ZXh0cy5yZW1vdmUocGFnZUlkZW50aWZpZXIpOwpAQCAtMTY1LDEyICsxNjMsMTIg
QEAgYXV0byBOZXR3b3JrTG9hZFNjaGVkdWxlcjo6Y29udGV4dEZvckxvYWQoY29uc3QgTmV0d29y
a0xvYWQmIGxvYWQpIC0+IEhvc3RDb250ZXgKICAgICBpZiAoIWxvYWQudXJsKCkucHJvdG9jb2xJ
c0luSFRUUEZhbWlseSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8qIHBh
Z2VDb250ZXh0ID0gbV9wYWdlQ29udGV4dHMuZ2V0KGxvYWQucGFyYW1ldGVycygpLndlYlBhZ2VJ
RCk7Ci0gICAgaWYgKCFwYWdlQ29udGV4dCkKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9wYWdlQ29u
dGV4dHMuZmluZChsb2FkLnBhcmFtZXRlcnMoKS53ZWJQYWdlSUQpOworICAgIGlmIChpdGVyYXRv
ciA9PSBtX3BhZ2VDb250ZXh0cy5lbmQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAg
ICBhdXRvIGhvc3QgPSBsb2FkLnVybCgpLmhvc3QoKS50b1N0cmluZygpOwotICAgIHJldHVybiBw
YWdlQ29udGV4dC0+ZW5zdXJlKGhvc3QsIFsmXSB7CisgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1
ZS5lbnN1cmUoaG9zdCwgWyZdIHsKICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8SG9zdENvbnRl
eHQ+KCk7CiAgICAgfSkuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZFNjaGVkdWxlci5oIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZFNjaGVkdWxlci5oCmluZGV4IDI5OWM4
MWFjMzI4OWY4OWY3NTRhNmM2ZDE5MzMxOTc4YzJiMjY3OTIuLjE4YmI0YWE0YjY1NTJlYjMxYTUw
ZTNjNTRjYTY2NzBiYTk5Njc2MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya0xvYWRTY2hlZHVsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtMb2FkU2NoZWR1bGVyLmgKQEAgLTUyLDcgKzUyLDcgQEAgcHJpdmF0ZToK
ICAgICBIb3N0Q29udGV4dCogY29udGV4dEZvckxvYWQoY29uc3QgTmV0d29ya0xvYWQmKTsKIAog
ICAgIHVzaW5nIFBhZ2VDb250ZXh0ID0gSGFzaE1hcDxTdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxI
b3N0Q29udGV4dD4+OwotICAgIEhhc2hNYXA8V2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIHN0ZDo6
dW5pcXVlX3B0cjxQYWdlQ29udGV4dD4+IG1fcGFnZUNvbnRleHRzOworICAgIEhhc2hNYXA8V2Vi
Q29yZTo6UGFnZUlkZW50aWZpZXIsIFBhZ2VDb250ZXh0PiBtX3BhZ2VDb250ZXh0czsKIH07CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvUHJlZmV0
Y2hDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL1ByZWZldGNo
Q2FjaGUuY3BwCmluZGV4IDVlMmUwMmUyZmJhMGI0YTBjMDNiNWQzZTY2Yjk3ZjdiY2NjNzk1OGIu
LjY3Zjg5YThjZmZhNzA0MGZhNjhlNzcxZmRlNjg0NWM0N2RhYTM4ODAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvUHJlZmV0Y2hDYWNoZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9QcmVmZXRjaENhY2hlLmNwcApAQCAt
NTMsNDUgKzUzLDM5IEBAIHZvaWQgUHJlZmV0Y2hDYWNoZTo6Y2xlYXIoKQogewogICAgIG1fZXhw
aXJhdGlvblRpbWVyLnN0b3AoKTsKICAgICBtX3Nlc3Npb25FeHBpcmF0aW9uTGlzdC5jbGVhcigp
OwotICAgIGlmIChtX3Nlc3Npb25QcmVmZXRjaGVzKQotICAgICAgICBtX3Nlc3Npb25QcmVmZXRj
aGVzLT5jbGVhcigpOworICAgIG1fc2Vzc2lvblByZWZldGNoZXMuY2xlYXIoKTsKIH0KIAogc3Rk
Ojp1bmlxdWVfcHRyPFByZWZldGNoQ2FjaGU6OkVudHJ5PiBQcmVmZXRjaENhY2hlOjp0YWtlKGNv
bnN0IFVSTCYgdXJsKQogewotICAgIGF1dG8qIHJlc291cmNlcyA9IG1fc2Vzc2lvblByZWZldGNo
ZXMuZ2V0KCk7Ci0gICAgaWYgKCFyZXNvdXJjZXMpCisgICAgaWYgKG1fc2Vzc2lvblByZWZldGNo
ZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBtX3Nlc3Npb25FeHBp
cmF0aW9uTGlzdC5yZW1vdmVBbGxNYXRjaGluZyhbJnVybF0gKGNvbnN0IGF1dG8mIHR1cGxlKSB7
CiAgICAgICAgIHJldHVybiBzdGQ6OmdldDwwPih0dXBsZSkgPT0gdXJsOwogICAgIH0pOwotICAg
IGF1dG8gZW50cnkgPSByZXNvdXJjZXMtPnRha2UodXJsKTsKKyAgICBhdXRvIGVudHJ5ID0gbV9z
ZXNzaW9uUHJlZmV0Y2hlcy50YWtlKHVybCk7CiAgICAgQVNTRVJUKCFlbnRyeSB8fCAhZW50cnkt
PnJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6VmFyeSku
Y29udGFpbnMoIkNvb2tpZSIpKTsKICAgICByZXR1cm4gZW50cnk7CiB9CiAKIHN0YXRpYyBjb25z
dCBTZWNvbmRzIGV4cGlyYXRpb25UaW1lb3V0IHsgNV9zIH07CiAKLXZvaWQgUHJlZmV0Y2hDYWNo
ZTo6c3RvcmUoY29uc3QgVVJMJiByZXF1ZXN0VXJsLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
JiYgcmVzcG9uc2UsIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYgYnVmZmVyKQordm9p
ZCBQcmVmZXRjaENhY2hlOjpzdG9yZShjb25zdCBVUkwmIHJlcXVlc3RVUkwsIFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2UmJiByZXNwb25zZSwgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4m
JiBidWZmZXIpCiB7Ci0gICAgaWYgKCFtX3Nlc3Npb25QcmVmZXRjaGVzKQotICAgICAgICBtX3Nl
c3Npb25QcmVmZXRjaGVzID0gbWFrZVVuaXF1ZTxQcmVmZXRjaEVudHJpZXNNYXA+KCk7Ci0gICAg
YXV0byBhZGRSZXN1bHQgPSBtX3Nlc3Npb25QcmVmZXRjaGVzLT5hZGQocmVxdWVzdFVybCwgbWFr
ZVVuaXF1ZTxQcmVmZXRjaENhY2hlOjpFbnRyeT4oV1RGTW92ZShyZXNwb25zZSksIFdURk1vdmUo
YnVmZmVyKSkpOworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9zZXNzaW9uUHJlZmV0Y2hlcy5hZGQo
cmVxdWVzdFVSTCwgbWFrZVVuaXF1ZTxQcmVmZXRjaENhY2hlOjpFbnRyeT4oV1RGTW92ZShyZXNw
b25zZSksIFdURk1vdmUoYnVmZmVyKSkpOwogICAgIC8vIExpbWl0IHByZWZldGNoZXMgZm9yIHNh
bWUgdXJsIHRvIDEuCiAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgcmV0
dXJuOwotICAgIG1fc2Vzc2lvbkV4cGlyYXRpb25MaXN0LmFwcGVuZChzdGQ6Om1ha2VfdHVwbGUo
cmVxdWVzdFVybCwgV2FsbFRpbWU6Om5vdygpKSk7CisgICAgbV9zZXNzaW9uRXhwaXJhdGlvbkxp
c3QuYXBwZW5kKHN0ZDo6bWFrZV90dXBsZShyZXF1ZXN0VVJMLCBXYWxsVGltZTo6bm93KCkpKTsK
ICAgICBpZiAoIW1fZXhwaXJhdGlvblRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fZXhwaXJh
dGlvblRpbWVyLnN0YXJ0T25lU2hvdChleHBpcmF0aW9uVGltZW91dCk7CiB9CiAKLXZvaWQgUHJl
ZmV0Y2hDYWNoZTo6c3RvcmVSZWRpcmVjdChjb25zdCBVUkwmIHJlcXVlc3RVcmwsIFdlYkNvcmU6
OlJlc291cmNlUmVzcG9uc2UmJiByZWRpcmVjdFJlc3BvbnNlLCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmJiByZWRpcmVjdFJlcXVlc3QpCit2b2lkIFByZWZldGNoQ2FjaGU6OnN0b3JlUmVkaXJl
Y3QoY29uc3QgVVJMJiByZXF1ZXN0VVJMLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYgcmVk
aXJlY3RSZXNwb25zZSwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgcmVkaXJlY3RSZXF1ZXN0
KQogewotICAgIGlmICghbV9zZXNzaW9uUHJlZmV0Y2hlcykKLSAgICAgICAgbV9zZXNzaW9uUHJl
ZmV0Y2hlcyA9IG1ha2VVbmlxdWU8UHJlZmV0Y2hFbnRyaWVzTWFwPigpOwogICAgIHJlZGlyZWN0
UmVxdWVzdC5jbGVhclB1cnBvc2UoKTsKLSAgICBtX3Nlc3Npb25QcmVmZXRjaGVzLT5zZXQocmVx
dWVzdFVybCwgbWFrZVVuaXF1ZTxQcmVmZXRjaENhY2hlOjpFbnRyeT4oV1RGTW92ZShyZWRpcmVj
dFJlc3BvbnNlKSwgV1RGTW92ZShyZWRpcmVjdFJlcXVlc3QpKSk7Ci0gICAgbV9zZXNzaW9uRXhw
aXJhdGlvbkxpc3QuYXBwZW5kKHN0ZDo6bWFrZV90dXBsZShyZXF1ZXN0VXJsLCBXYWxsVGltZTo6
bm93KCkpKTsKKyAgICBtX3Nlc3Npb25QcmVmZXRjaGVzLnNldChyZXF1ZXN0VVJMLCBtYWtlVW5p
cXVlPFByZWZldGNoQ2FjaGU6OkVudHJ5PihXVEZNb3ZlKHJlZGlyZWN0UmVzcG9uc2UpLCBXVEZN
b3ZlKHJlZGlyZWN0UmVxdWVzdCkpKTsKKyAgICBtX3Nlc3Npb25FeHBpcmF0aW9uTGlzdC5hcHBl
bmQoc3RkOjptYWtlX3R1cGxlKHJlcXVlc3RVUkwsIFdhbGxUaW1lOjpub3coKSkpOwogICAgIGlm
ICghbV9leHBpcmF0aW9uVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV9leHBpcmF0aW9uVGlt
ZXIuc3RhcnRPbmVTaG90KGV4cGlyYXRpb25UaW1lb3V0KTsKIH0KQEAgLTEwMCwxMyArOTQsMTEg
QEAgdm9pZCBQcmVmZXRjaENhY2hlOjpjbGVhckV4cGlyZWRFbnRyaWVzKCkKIHsKICAgICBhdXRv
IHRpbWVvdXQgPSBXYWxsVGltZTo6bm93KCk7CiAgICAgd2hpbGUgKCFtX3Nlc3Npb25FeHBpcmF0
aW9uTGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgYXV0byBbcmVxdWVzdFVybCwgdGltZXN0YW1w
XSA9IG1fc2Vzc2lvbkV4cGlyYXRpb25MaXN0LmZpcnN0KCk7Ci0gICAgICAgIGF1dG8qIHJlc291
cmNlcyA9IG1fc2Vzc2lvblByZWZldGNoZXMuZ2V0KCk7Ci0gICAgICAgIEFTU0VSVChyZXNvdXJj
ZXMpOwotICAgICAgICBBU1NFUlQocmVzb3VyY2VzLT5jb250YWlucyhyZXF1ZXN0VXJsKSk7Cisg
ICAgICAgIGF1dG8gW3JlcXVlc3RVUkwsIHRpbWVzdGFtcF0gPSBtX3Nlc3Npb25FeHBpcmF0aW9u
TGlzdC5maXJzdCgpOworICAgICAgICBBU1NFUlQobV9zZXNzaW9uUHJlZmV0Y2hlcy5jb250YWlu
cyhyZXF1ZXN0VVJMKSk7CiAgICAgICAgIGF1dG8gZWxhcHNlZCA9IHRpbWVvdXQgLSB0aW1lc3Rh
bXA7CiAgICAgICAgIGlmIChlbGFwc2VkID4gZXhwaXJhdGlvblRpbWVvdXQpIHsKLSAgICAgICAg
ICAgIHJlc291cmNlcy0+cmVtb3ZlKHJlcXVlc3RVcmwpOworICAgICAgICAgICAgbV9zZXNzaW9u
UHJlZmV0Y2hlcy5yZW1vdmUocmVxdWVzdFVSTCk7CiAgICAgICAgICAgICBtX3Nlc3Npb25FeHBp
cmF0aW9uTGlzdC5yZW1vdmVGaXJzdCgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
bV9leHBpcmF0aW9uVGltZXIuc3RhcnRPbmVTaG90KGV4cGlyYXRpb25UaW1lb3V0IC0gZWxhcHNl
ZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL1ByZWZl
dGNoQ2FjaGUuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvUHJlZmV0Y2hD
YWNoZS5oCmluZGV4IGEyNTE1MjBiMzFlYWM5MjFjMjJkMzExNTFkNmQyMzFhMWJlZDEzOGMuLjY0
Mjc2NTdhMmI0NWUxZDg0NjQzMzQzNGM3MzM5NjkyZmEyN2Y5NzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvUHJlZmV0Y2hDYWNoZS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvUHJlZmV0Y2hDYWNoZS5oCkBAIC02NSw3ICs2
NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbGVhckV4cGlyZWRFbnRyaWVzKCk7CiAKICAgICB1
c2luZyBQcmVmZXRjaEVudHJpZXNNYXAgPSBIYXNoTWFwPFVSTCwgc3RkOjp1bmlxdWVfcHRyPEVu
dHJ5Pj47Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFByZWZldGNoRW50cmllc01hcD4gbV9zZXNzaW9u
UHJlZmV0Y2hlczsKKyAgICBQcmVmZXRjaEVudHJpZXNNYXAgbV9zZXNzaW9uUHJlZmV0Y2hlczsK
IAogICAgIHVzaW5nIFNlc3Npb25QcmVmZXRjaEV4cGlyYXRpb25MaXN0ID0gRGVxdWU8c3RkOjp0
dXBsZTxVUkwsIFdhbGxUaW1lPj47CiAgICAgU2Vzc2lvblByZWZldGNoRXhwaXJhdGlvbkxpc3Qg
bV9zZXNzaW9uRXhwaXJhdGlvbkxpc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL0NvY29hL1dLV2ViUHJvY2Vzc1BsdWdJbkhpdFRlc3RS
ZXN1bHQubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL0Nv
Y29hL1dLV2ViUHJvY2Vzc1BsdWdJbkhpdFRlc3RSZXN1bHQubW0KaW5kZXggOTBhMTNjODU1MDM3
ZTcxNjJhMjFlNWMzOThlOWNhMTVmYWY1OTQ2OC4uZDc1ZGUyZGNhNzUyOTgxNWUyYjdmYmQ4ZWRm
OGI3Yjk5MzdkOGY3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9Db2NvYS9XS1dlYlByb2Nlc3NQbHVnSW5IaXRUZXN0UmVzdWx0Lm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvQ29jb2EvV0tX
ZWJQcm9jZXNzUGx1Z0luSGl0VGVzdFJlc3VsdC5tbQpAQCAtMjcsNiArMjcsNyBAQAogI2ltcG9y
dCAiV0tXZWJQcm9jZXNzUGx1Z0luSGl0VGVzdFJlc3VsdEludGVybmFsLmgiCiAKICNpbXBvcnQg
IldLV2ViUHJvY2Vzc1BsdWdJbk5vZGVIYW5kbGVJbnRlcm5hbC5oIgorI2ltcG9ydCA8V2ViQ29y
ZS9TY3JvbGxiYXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZU9iakNFeHRyYXMuaD4KIAog
QGltcGxlbWVudGF0aW9uIFdLV2ViUHJvY2Vzc1BsdWdJbkhpdFRlc3RSZXN1bHQgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9nbGliL1dl
YktpdFdlYkhpdFRlc3RSZXN1bHQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9nbGliL1dlYktpdFdlYkhpdFRlc3RSZXN1bHQuY3BwCmluZGV4IDIzZGUy
YmE3NDA1YWY3M2I2NzFjYWNkMGQxYTBlZGI0MDBkYTUzZDguLmQ0MzM4YjEwZWVmZWQ1MjJjN2Qx
NWQ5ZTMyNjQ2NmE4M2QyODRmOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ2xpYi9XZWJLaXRXZWJIaXRUZXN0UmVzdWx0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2dsaWIvV2ViS2l0
V2ViSGl0VGVzdFJlc3VsdC5jcHAKQEAgLTIzLDYgKzIzLDggQEAKICNpbmNsdWRlICJJbmplY3Rl
ZEJ1bmRsZUhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5o
IgogI2luY2x1ZGUgIldlYktpdFdlYkhpdFRlc3RSZXN1bHRQcml2YXRlLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9FbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxiYXIuaD4KICNpbmNs
dWRlIDxnbGliL2dpMThuLWxpYi5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KICNp
bmNsdWRlIDx3dGYvZ2xpYi9XVEZHVHlwZS5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KaW5kZXggMDRhNDBkZjAyZTQ3NDQ4ZjViOThj
ODlkZjQ4NWI3MDZmMGJlMDM3Yy4uMGUwN2E5MDA2YWU0MmI2MDFjOWY3YzIyMTNiNjYzODRiYmVj
Mzg1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BE
RlBsdWdpbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERG
UGx1Z2luLm1tCkBAIC0xMzEzLDkgKzEzMTMsOSBAQCB2b2lkIFBERlBsdWdpbjo6dXBkYXRlU2Ny
b2xsYmFycygpCiAgICAgYm9vbCBoYXNTY3JvbGxiYXJzID0gbV9ob3Jpem9udGFsU2Nyb2xsYmFy
IHx8IG1fdmVydGljYWxTY3JvbGxiYXI7CiAgICAgaWYgKGhhZFNjcm9sbGJhcnMgIT0gaGFzU2Ny
b2xsYmFycykgewogICAgICAgICBpZiAoaGFzU2Nyb2xsYmFycykKLSAgICAgICAgICAgIGZyYW1l
Vmlldy0+YWRkU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisgICAgICAgICAgICBmcmFtZVZpZXctPmFk
ZFNjcm9sbGFibGVBcmVhKCp0aGlzKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgZnJhbWVW
aWV3LT5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKyAgICAgICAgICAgIGZyYW1lVmlldy0+
cmVtb3ZlU2Nyb2xsYWJsZUFyZWEoKnRoaXMpOwogCiAgICAgICAgIGZyYW1lVmlldy0+c2V0TmVl
ZHNMYXlvdXRBZnRlclZpZXdDb25maWd1cmF0aW9uQ2hhbmdlKCk7CiAgICAgfQpAQCAtMTg5MSw3
ICsxODkxLDcgQEAgdm9pZCBQREZQbHVnaW46OndpbGxEZXRhY2hSZW5kZXJlcigpCiAgICAgaWYg
KCFtX2ZyYW1lIHx8ICFtX2ZyYW1lLT5jb3JlRnJhbWUoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IGlmIChhdXRvKiBmcmFtZVZpZXcgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+dmlldygpKQotICAg
ICAgICBmcmFtZVZpZXctPnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworICAgICAgICBmcmFt
ZVZpZXctPnJlbW92ZVNjcm9sbGFibGVBcmVhKCp0aGlzKTsKIH0KIAogdm9pZCBQREZQbHVnaW46
OmRlc3Ryb3koKQpAQCAtMTkxMiw3ICsxOTEyLDcgQEAgdm9pZCBQREZQbHVnaW46OmRlc3Ryb3ko
KQogICAgIG1fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpLmRlbGVnYXRlID0gMDsKIAogICAgIGlm
IChhdXRvKiBmcmFtZVZpZXcgPSBtX2ZyYW1lICYmIG1fZnJhbWUtPmNvcmVGcmFtZSgpID8gbV9m
cmFtZS0+Y29yZUZyYW1lKCktPnZpZXcoKSA6IG51bGxwdHIpCi0gICAgICAgIGZyYW1lVmlldy0+
cmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisgICAgICAgIGZyYW1lVmlldy0+cmVtb3ZlU2Ny
b2xsYWJsZUFyZWEoKnRoaXMpOwogCiAgICAgbV9hY3RpdmVBbm5vdGF0aW9uID0gbnVsbHB0cjsK
ICAgICBtX2Fubm90YXRpb25Db250YWluZXIgPSBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMu
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9h
cmRPdmVycmlkZXMuY3BwCmluZGV4IDY5ZjBhZTgyNzk1MDdiNzI5NjVmNjVjMjE2ODczYzQ4MWFk
ZjRkNjAuLmViNjk0NmU2Nzk3M2Q4NTdiYWMyZGU3ODlmMWZmMWFjY2FiNTU0ZDkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQYXN0ZWJvYXJk
T3ZlcnJpZGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViUGFzdGVib2FyZE92ZXJyaWRlcy5jcHAKQEAgLTQyLDE0ICs0Miw3IEBAIFdlYlBhc3Rl
Ym9hcmRPdmVycmlkZXM6OldlYlBhc3RlYm9hcmRPdmVycmlkZXMoKQogCiB2b2lkIFdlYlBhc3Rl
Ym9hcmRPdmVycmlkZXM6OmFkZE92ZXJyaWRlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUs
IGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQogewotICAg
IGF1dG8gYWRkUmVzdWx0ID0gbV9vdmVycmlkZXNNYXAuYWRkKHBhc3RlYm9hcmROYW1lLCBudWxs
cHRyKTsKLQotICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8SGFzaE1hcDxTdHJpbmcsIFZlY3Rvcjx1aW50OF90Pj4+IHR5cGVNYXAgPSBtYWtl
VW5pcXVlPEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8dWludDhfdD4+PigpOwotICAgICAgICBhZGRS
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gV1RGTW92ZSh0eXBlTWFwKTsKLSAgICB9Ci0KLSAgICBh
ZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5zZXQodHlwZSwgZGF0YSk7CisgICAgbV9vdmVycmlk
ZXNNYXAuYWRkKHBhc3RlYm9hcmROYW1lLCBIYXNoTWFwPFN0cmluZywgVmVjdG9yPHVpbnQ4X3Q+
PiB7IH0pLml0ZXJhdG9yLT52YWx1ZS5zZXQodHlwZSwgZGF0YSk7CiB9CiAKIHZvaWQgV2ViUGFz
dGVib2FyZE92ZXJyaWRlczo6cmVtb3ZlT3ZlcnJpZGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSwgY29uc3QgU3RyaW5nJiB0eXBlKQpAQCAtNTgsMjkgKzUxLDIwIEBAIHZvaWQgV2ViUGFz
dGVib2FyZE92ZXJyaWRlczo6cmVtb3ZlT3ZlcnJpZGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSwgY29uc3QKICAgICBpZiAoaXQgPT0gbV9vdmVycmlkZXNNYXAuZW5kKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEFTU0VSVChpdC0+dmFsdWUpOwotCi0gICAgaXQtPnZhbHVlLT5yZW1v
dmUodHlwZSk7CisgICAgaXQtPnZhbHVlLnJlbW92ZSh0eXBlKTsKIAogICAgIC8vIElmIHRoaXMg
d2FzIHRoZSBsYXN0IG92ZXJyaWRlIGZvciB0aGlzIHBhc3RlYm9hcmQsIHJlbW92ZSBpdHMgcmVj
b3JkIGNvbXBsZXRlbHkuCi0gICAgaWYgKGl0LT52YWx1ZS0+aXNFbXB0eSgpKQorICAgIGlmIChp
dC0+dmFsdWUuaXNFbXB0eSgpKQogICAgICAgICBtX292ZXJyaWRlc01hcC5yZW1vdmUoaXQpOwog
fQogCiBWZWN0b3I8U3RyaW5nPiBXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpvdmVycmlkZGVuVHlw
ZXMoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKLSAgICBWZWN0b3I8U3RyaW5nPiBy
ZXN1bHQ7Ci0KICAgICBhdXRvIGl0ID0gbV9vdmVycmlkZXNNYXAuZmluZChwYXN0ZWJvYXJkTmFt
ZSk7CiAgICAgaWYgKGl0ID09IG1fb3ZlcnJpZGVzTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4g
cmVzdWx0OwotCi0gICAgQVNTRVJUKGl0LT52YWx1ZSk7Ci0KLSAgICBmb3IgKFN0cmluZyYgdHlw
ZSA6IGl0LT52YWx1ZS0+a2V5cygpKQotICAgICAgICByZXN1bHQuYXBwZW5kKHR5cGUpOworICAg
ICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gY29weVRv
VmVjdG9yKGl0LT52YWx1ZS5rZXlzKCkpOwogfQogCiBib29sIFdlYlBhc3RlYm9hcmRPdmVycmlk
ZXM6OmdldERhdGFGb3JPdmVycmlkZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25z
dCBTdHJpbmcmIHR5cGUsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkgY29uc3QKQEAgLTg5LDggKzcz
LDggQEAgYm9vbCBXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpnZXREYXRhRm9yT3ZlcnJpZGUoY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY28KICAgICBpZiAocGFzdGVib2FyZEl0ZXJhdG9y
ID09IG1fb3ZlcnJpZGVzTWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBh
dXRvIHR5cGVJdGVyYXRvciA9IHBhc3RlYm9hcmRJdGVyYXRvci0+dmFsdWUtPmZpbmQodHlwZSk7
Ci0gICAgaWYgKHR5cGVJdGVyYXRvciA9PSBwYXN0ZWJvYXJkSXRlcmF0b3ItPnZhbHVlLT5lbmQo
KSkKKyAgICBhdXRvIHR5cGVJdGVyYXRvciA9IHBhc3RlYm9hcmRJdGVyYXRvci0+dmFsdWUuZmlu
ZCh0eXBlKTsKKyAgICBpZiAodHlwZUl0ZXJhdG9yID09IHBhc3RlYm9hcmRJdGVyYXRvci0+dmFs
dWUuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGRhdGEgPSB0eXBlSXRlcmF0
b3ItPnZhbHVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmgKaW5kZXggZWMwOTMzZTUx
MjVlNzk2MDQ0Y2I4MmMzOGIyNGM1YjIyZWRlYjZjNy4uNTg4M2U1ODA0OTVhNTRmZGEwM2Q2ZTQ0
Njc5MDMzY2Y3NWFlYzEwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGFzdGVib2FyZE92ZXJyaWRlcy5oCkBAIC01
MCw3ICs1MCw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBUaGUgbV9vdmVycmlkZXNNYXAgbWFwcyBz
dHJpbmcgcGFzdGVib2FyZCBuYW1lcyB0byBwYXN0ZWJvYXJkIGVudHJpZXMuCiAgICAgLy8gRWFj
aCBwYXN0ZWJvYXJkIGVudHJ5IGlzIGEgbWFwIG9mIGEgc3RyaW5nIHR5cGUgdG8gYSBkYXRhIGJ1
ZmZlci4KLSAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPEhhc2hNYXA8U3RyaW5n
LCBWZWN0b3I8dWludDhfdD4+Pj4gbV9vdmVycmlkZXNNYXA7CisgICAgSGFzaE1hcDxTdHJpbmcs
IEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8dWludDhfdD4+PiBtX292ZXJyaWRlc01hcDsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmggYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkZyYW1lTmV0d29ya2lu
Z0NvbnRleHQuaAppbmRleCA5YmY1ODdmZTA2ZDE2NTMyZjdiNDdmOGZjYTMyOTVlYjMxZDczNDUy
Li43NjVkNTVmMjRhMTZlMWIzMDU2ZWNlYmZjMWFkZGEwODQzZGNlMmI3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkZyYW1lTmV0d29y
a2luZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvbWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaApAQCAtMzIsNyArMzIsNyBAQCBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogc3RydWN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOwogCi1j
bGFzcyBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0IDogcHVibGljIFdlYkNvcmU6OkZyYW1lTmV0
d29ya2luZ0NvbnRleHQgeworY2xhc3MgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dCBmaW5hbCA6
IHB1YmxpYyBXZWJDb3JlOjpGcmFtZU5ldHdvcmtpbmdDb250ZXh0IHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgUmVmPFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ+IGNyZWF0ZShXZWJGcmFtZSogZnJh
bWUpCiAgICAgewpAQCAtNTAsMTIgKzUwLDEyIEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAot
ICAgIGJvb2wgbG9jYWxGaWxlQ29udGVudFNuaWZmaW5nRW5hYmxlZCgpIGNvbnN0IG92ZXJyaWRl
OwotICAgIFNjaGVkdWxlUGFpckhhc2hTZXQqIHNjaGVkdWxlZFJ1bkxvb3BQYWlycygpIGNvbnN0
IG92ZXJyaWRlOwotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHNvdXJjZUFwcGxpY2F0aW9uQXVk
aXREYXRhKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIHNvdXJjZUFwcGxpY2F0aW9uSWRl
bnRpZmllcigpIGNvbnN0IG92ZXJyaWRlOwotICAgIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgYmxv
Y2tlZEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpIGNvbnN0IG92ZXJyaWRl
OwotICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogc3RvcmFnZVNlc3Npb24oKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgYm9vbCBsb2NhbEZpbGVDb250
ZW50U25pZmZpbmdFbmFibGVkKCkgY29uc3QgZmluYWw7CisgICAgY29uc3QgU2NoZWR1bGVQYWly
SGFzaFNldCogc2NoZWR1bGVkUnVuTG9vcFBhaXJzKCkgY29uc3QgZmluYWw7CisgICAgUmV0YWlu
UHRyPENGRGF0YVJlZj4gc291cmNlQXBwbGljYXRpb25BdWRpdERhdGEoKSBjb25zdCBmaW5hbDsK
KyAgICBTdHJpbmcgc291cmNlQXBwbGljYXRpb25JZGVudGlmaWVyKCkgY29uc3QgZmluYWw7Cisg
ICAgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBibG9ja2VkRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JikgY29uc3QgZmluYWw7CisgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uKiBzdG9yYWdlU2Vzc2lvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG51bGxwdHI7IH0K
IH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9tYWMvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbSBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbQpp
bmRleCBmZDJjOTI3OGMzNWE1ZDZjYzc2NTZkOWFmMDZhYmQ5OGEwMzI0MmExLi4xZWJmZjg1OTk3
ZTBjYjFiY2M3ZDNlMDRiMjI5YzFkZjYwODJmMzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQu
bW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJG
cmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1tCkBAIC00NywxMSArNDcsMTEgQEAgYm9vbCBXZWJGcmFt
ZU5ldHdvcmtpbmdDb250ZXh0Ojpsb2NhbEZpbGVDb250ZW50U25pZmZpbmdFbmFibGVkKCkgY29u
c3QKICAgICByZXR1cm4gZnJhbWUoKSAmJiBmcmFtZSgpLT5zZXR0aW5ncygpLmxvY2FsRmlsZUNv
bnRlbnRTbmlmZmluZ0VuYWJsZWQoKTsKIH0KIAotU2NoZWR1bGVQYWlySGFzaFNldCogV2ViRnJh
bWVOZXR3b3JraW5nQ29udGV4dDo6c2NoZWR1bGVkUnVuTG9vcFBhaXJzKCkgY29uc3QKK2NvbnN0
IFNjaGVkdWxlUGFpckhhc2hTZXQqIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnNjaGVkdWxl
ZFJ1bkxvb3BQYWlycygpIGNvbnN0CiB7CiAgICAgaWYgKCFmcmFtZSgpIHx8ICFmcmFtZSgpLT5w
YWdlKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBmcmFtZSgpLT5wYWdl
KCktPnNjaGVkdWxlZFJ1bkxvb3BQYWlycygpOworICAgIHJldHVybiAmZnJhbWUoKS0+cGFnZSgp
LT5zY2hlZHVsZWRSdW5Mb29wUGFpcnMoKTsKIH0KIAogUmV0YWluUHRyPENGRGF0YVJlZj4gV2Vi
RnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c291cmNlQXBwbGljYXRpb25BdWRpdERhdGEoKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCBj
M2NiOGI3ODQ1NjgwZDE2ZGYxYTY3MThlNjZmNDc4ZTllOTg4YjU2Li5hNmFhM2NmM2M4YmUyYjkx
M2VkOGUzZDcyYzZiODE1YWViNWVmZjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtNTU5MiwxMiArNTU5Miw3IEBAIHN0YXRpYyBib29sIHBh
Z2VDb250YWluc0FueUhvcml6b250YWxTY3JvbGxiYXJzKEZyYW1lKiBtYWluRnJhbWUpCiAgICAg
ICAgIGlmICghZnJhbWVWaWV3KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgY29u
c3QgSGFzaFNldDxTY3JvbGxhYmxlQXJlYSo+KiBzY3JvbGxhYmxlQXJlYXMgPSBmcmFtZVZpZXct
PnNjcm9sbGFibGVBcmVhcygpOwotICAgICAgICBpZiAoIXNjcm9sbGFibGVBcmVhcykKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGZvciAoSGFzaFNldDxTY3JvbGxhYmxlQXJlYSo+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IHNjcm9sbGFibGVBcmVhcy0+YmVnaW4oKSwgZW5kID0gc2Ny
b2xsYWJsZUFyZWFzLT5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBTY3Jv
bGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEgPSAqaXQ7CisgICAgICAgIGZvciAoYXV0byogc2Ny
b2xsYWJsZUFyZWEgOiBmcmFtZVZpZXctPnNjcm9sbGFibGVBcmVhcygpKSB7CiAgICAgICAgICAg
ICBpZiAoIXNjcm9sbGFibGVBcmVhLT5zY3JvbGxiYXJzQ2FuQmVBY3RpdmUoKSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
SGlzdG9yeS9XZWJIaXN0b3J5Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvSGlzdG9yeS9X
ZWJIaXN0b3J5Lm1tCmluZGV4IGYwNDZhMTkzMDliZTJmNGIyM2Y2OWNjN2EwYmQzNzVjMWM1N2Qx
OGEuLjc0OWRlMjkxOWZlODMxMGQzNDE4MzM1MTM2MjJlZTRkZjAzNWQzMTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeS5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9IaXN0b3J5L1dlYkhpc3RvcnkubW0KQEAgLTQxLDggKzQxLDYg
QEAKICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVRocmVhZE1lc3NhZ2UuaD4KICNlbmRpZgogCi11
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQogdHlwZWRlZiBpbnQ2NF90IFdlYkhpc3RvcnlEYXRl
S2V5OwogdHlwZWRlZiBIYXNoTWFwPFdlYkhpc3RvcnlEYXRlS2V5LCBSZXRhaW5QdHI8TlNNdXRh
YmxlQXJyYXk+PiBEYXRlVG9FbnRyaWVzTWFwOwogCkBAIC02MCwyMCArNTgsMjAgQEAgc3RhdGlj
IFJldGFpblB0cjxXZWJIaXN0b3J5PiYgc2hhcmVkSGlzdG9yeSgpCiAgICAgcmV0dXJuIF9zaGFy
ZWRIaXN0b3J5OwogfQogCi1OU1N0cmluZyAqRmlsZVZlcnNpb25LZXkgPSBAIldlYkhpc3RvcnlG
aWxlVmVyc2lvbiI7Ci1OU1N0cmluZyAqRGF0ZXNBcnJheUtleSA9IEAiV2ViSGlzdG9yeURhdGVz
IjsKK2NvbnN0ZXhwciBOU1N0cmluZyAqRmlsZVZlcnNpb25LZXkgPSBAIldlYkhpc3RvcnlGaWxl
VmVyc2lvbiI7Citjb25zdGV4cHIgTlNTdHJpbmcgKkRhdGVzQXJyYXlLZXkgPSBAIldlYkhpc3Rv
cnlEYXRlcyI7CiAKLSNkZWZpbmUgY3VycmVudEZpbGVWZXJzaW9uIDEKK2NvbnN0ZXhwciBpbnQg
Y3VycmVudEZpbGVWZXJzaW9uID0gMTsKIAogY2xhc3MgV2ViSGlzdG9yeVdyaXRlciA6IHB1Ymxp
YyBIaXN0b3J5UHJvcGVydHlMaXN0V3JpdGVyIHsKIHB1YmxpYzoKLSAgICBXZWJIaXN0b3J5V3Jp
dGVyKERhdGVUb0VudHJpZXNNYXAqKTsKKyAgICBleHBsaWNpdCBXZWJIaXN0b3J5V3JpdGVyKERh
dGVUb0VudHJpZXNNYXAmKTsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVIaXN0
b3J5SXRlbXMoQmluYXJ5UHJvcGVydHlMaXN0T2JqZWN0U3RyZWFtJik7CiAKLSAgICBEYXRlVG9F
bnRyaWVzTWFwKiBtX2VudHJpZXNCeURhdGU7Ci0gICAgVmVjdG9yPGludD4gbV9kYXRlS2V5czsK
KyAgICBEYXRlVG9FbnRyaWVzTWFwJiBtX2VudHJpZXNCeURhdGU7CisgICAgVmVjdG9yPFdlYkhp
c3RvcnlEYXRlS2V5PiBtX2RhdGVLZXlzOwogfTsKIAogQGludGVyZmFjZSBXZWJIaXN0b3J5ICgp
CkBAIC04Myw3ICs4MSw3IEBAIEBlbmQKIEBpbnRlcmZhY2UgV2ViSGlzdG9yeVByaXZhdGUgOiBO
U09iamVjdCB7CiBAcHJpdmF0ZQogICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBf
ZW50cmllc0J5VVJMOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxEYXRlVG9FbnRyaWVzTWFwPiBfZW50
cmllc0J5RGF0ZTsKKyAgICBEYXRlVG9FbnRyaWVzTWFwIF9lbnRyaWVzQnlEYXRlOwogICAgIFJl
dGFpblB0cjxOU011dGFibGVBcnJheT4gX29yZGVyZWRMYXN0VmlzaXRlZERheXM7CiAgICAgQk9P
TCBpdGVtTGltaXRTZXQ7CiAgICAgaW50IGl0ZW1MaW1pdDsKQEAgLTEzNSw4ICsxMzMsNiBAQCAt
IChpZClpbml0CiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCiAgICAgX2VudHJpZXNCeVVSTCA9
IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7Ci0gICAgX2VudHJp
ZXNCeURhdGUgPSBtYWtlVW5pcXVlPERhdGVUb0VudHJpZXNNYXA+KCk7Ci0KICAgICByZXR1cm4g
c2VsZjsKIH0KIApAQCAtMTc5LDE1ICsxNzUsMTUgQEAgLSAoQk9PTClmaW5kS2V5OihXZWJIaXN0
b3J5RGF0ZUtleSopa2V5IGZvckRheTooTlNUaW1lSW50ZXJ2YWwpZGF0ZQogewogICAgIEFTU0VS
VF9BUkcoa2V5LCBrZXkpOwogICAgICprZXkgPSBkYXRlS2V5KGRhdGUpOwotICAgIHJldHVybiBf
ZW50cmllc0J5RGF0ZS0+Y29udGFpbnMoKmtleSk7CisgICAgcmV0dXJuIF9lbnRyaWVzQnlEYXRl
LmNvbnRhaW5zKCprZXkpOwogfQogCiAtICh2b2lkKWluc2VydEl0ZW06KFdlYkhpc3RvcnlJdGVt
ICopZW50cnkgZm9yRGF0ZUtleTooV2ViSGlzdG9yeURhdGVLZXkpZGF0ZUtleQogewogICAgIEFT
U0VSVF9BUkcoZW50cnksIGVudHJ5ICE9IG5pbCk7Ci0gICAgQVNTRVJUKF9lbnRyaWVzQnlEYXRl
LT5jb250YWlucyhkYXRlS2V5KSk7CisgICAgQVNTRVJUKF9lbnRyaWVzQnlEYXRlLmNvbnRhaW5z
KGRhdGVLZXkpKTsKIAotICAgIE5TTXV0YWJsZUFycmF5ICplbnRyaWVzRm9yRGF0ZSA9IF9lbnRy
aWVzQnlEYXRlLT5nZXQoZGF0ZUtleSkuZ2V0KCk7CisgICAgTlNNdXRhYmxlQXJyYXkgKmVudHJp
ZXNGb3JEYXRlID0gX2VudHJpZXNCeURhdGUuZ2V0KGRhdGVLZXkpLmdldCgpOwogICAgIE5TVGlt
ZUludGVydmFsIGVudHJ5RGF0ZSA9IFtlbnRyeSBsYXN0VmlzaXRlZFRpbWVJbnRlcnZhbF07CiAK
ICAgICB1bnNpZ25lZCBjb3VudCA9IFtlbnRyaWVzRm9yRGF0ZSBjb3VudF07CkBAIC0yMjYsMTMg
KzIyMiwxMyBAQCAtIChCT09MKXJlbW92ZUl0ZW1Gcm9tRGF0ZUNhY2hlczooV2ViSGlzdG9yeUl0
ZW0gKillbnRyeQogICAgIGlmICghZm91bmREYXRlKQogICAgICAgICByZXR1cm4gTk87CiAKLSAg
ICBEYXRlVG9FbnRyaWVzTWFwOjppdGVyYXRvciBpdCA9IF9lbnRyaWVzQnlEYXRlLT5maW5kKGRh
dGVLZXkpOworICAgIGF1dG8gaXQgPSBfZW50cmllc0J5RGF0ZS5maW5kKGRhdGVLZXkpOwogICAg
IE5TTXV0YWJsZUFycmF5ICplbnRyaWVzRm9yRGF0ZSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICBb
ZW50cmllc0ZvckRhdGUgcmVtb3ZlT2JqZWN0SWRlbnRpY2FsVG86ZW50cnldOwogICAgIAogICAg
IC8vIHJlbW92ZSB0aGlzIGRhdGUgZW50aXJlbHkgaWYgdGhlcmUgYXJlIG5vIG90aGVyIGVudHJp
ZXMgb24gaXQKICAgICBpZiAoW2VudHJpZXNGb3JEYXRlIGNvdW50XSA9PSAwKSB7Ci0gICAgICAg
IF9lbnRyaWVzQnlEYXRlLT5yZW1vdmUoaXQpOworICAgICAgICBfZW50cmllc0J5RGF0ZS5yZW1v
dmUoaXQpOwogICAgICAgICAvLyBDbGVhciBfb3JkZXJlZExhc3RWaXNpdGVkRGF5cyBzbyBpdCB3
aWxsIGJlIHJlZ2VuZXJhdGVkIHdoZW4gbmV4dCByZXF1ZXN0ZWQuCiAgICAgICAgIF9vcmRlcmVk
TGFzdFZpc2l0ZWREYXlzID0gbmlsOwogICAgIH0KQEAgLTI3MCw3ICsyNjYsNyBAQCAtICh2b2lk
KWFkZEl0ZW1Ub0RhdGVDYWNoZXM6KFdlYkhpc3RvcnlJdGVtICopZW50cnkKICAgICBlbHNlIHsK
ICAgICAgICAgLy8gbm8gb3RoZXIgZW50cmllcyBleGlzdCBmb3IgdGhpcyBkYXRlCiAgICAgICAg
IGF1dG8gZW50cmllcyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhP
YmplY3RzOiZlbnRyeSBjb3VudDoxXSk7Ci0gICAgICAgIF9lbnRyaWVzQnlEYXRlLT5zZXQoZGF0
ZUtleSwgZW50cmllcy5nZXQoKSk7CisgICAgICAgIF9lbnRyaWVzQnlEYXRlLnNldChkYXRlS2V5
LCBlbnRyaWVzLmdldCgpKTsKICAgICAgICAgLy8gQ2xlYXIgX29yZGVyZWRMYXN0VmlzaXRlZERh
eXMgc28gaXQgd2lsbCBiZSByZWdlbmVyYXRlZCB3aGVuIG5leHQgcmVxdWVzdGVkLgogICAgICAg
ICBfb3JkZXJlZExhc3RWaXNpdGVkRGF5cyA9IG5pbDsKICAgICB9CkBAIC0zNDYsOCArMzQyLDgg
QEAgLSAodm9pZClyZWJ1aWxkSGlzdG9yeUJ5RGF5SWZOZWVkZWQ6KFdlYkhpc3RvcnkgKil3ZWJI
aXN0b3J5CiB7CiAgICAgLy8gV2UgY2xlYXIgYWxsIHRoZSB2YWx1ZXMgdG8gcHJlc2VudCBhIGNv
bnNpc3RlbnQgc3RhdGUgd2hlbiBzZW5kaW5nIHRoZSBub3RpZmljYXRpb25zLgogICAgIC8vIFdl
IGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIGVudHJpZXMgZm9yIHJlYnVpbGRpbmcgdGhlIGhpc3Rv
cnkgYWZ0ZXIgdGhlIG5vdGlmaWNhdGlvbi4KLSAgICBhdXRvIGVudHJ5QXJyYXlzID0gY29weVRv
VmVjdG9yKF9lbnRyaWVzQnlEYXRlLT52YWx1ZXMoKSk7Ci0gICAgX2VudHJpZXNCeURhdGUtPmNs
ZWFyKCk7CisgICAgYXV0byBlbnRyeUFycmF5cyA9IGNvcHlUb1ZlY3RvcihfZW50cmllc0J5RGF0
ZS52YWx1ZXMoKSk7CisgICAgX2VudHJpZXNCeURhdGUuY2xlYXIoKTsKICAgICAKICAgICBhdXRv
IGVudHJpZXNCeVVSTCA9IHN0ZDo6ZXhjaGFuZ2UoX2VudHJpZXNCeVVSTCwgbmlsKTsKICAgICAK
QEAgLTM5NSwxMCArMzkxLDEwIEBAIC0gKEJPT0wpcmVtb3ZlSXRlbXM6KE5TQXJyYXkgKillbnRy
aWVzCiAKIC0gKEJPT0wpcmVtb3ZlQWxsSXRlbXMKIHsKLSAgICBpZiAoX2VudHJpZXNCeURhdGUt
PmlzRW1wdHkoKSkKKyAgICBpZiAoX2VudHJpZXNCeURhdGUuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gTk87CiAKLSAgICBfZW50cmllc0J5RGF0ZS0+Y2xlYXIoKTsKKyAgICBfZW50cmllc0J5
RGF0ZS5jbGVhcigpOwogICAgIFtfZW50cmllc0J5VVJMIHJlbW92ZUFsbE9iamVjdHNdOwogCiAg
ICAgLy8gQ2xlYXIgX29yZGVyZWRMYXN0VmlzaXRlZERheXMgc28gaXQgd2lsbCBiZSByZWdlbmVy
YXRlZCB3aGVuIG5leHQgcmVxdWVzdGVkLgpAQCAtNDI4LDEyICs0MjQsNyBAQCBBTExPV19ERVBS
RUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgogLSAoTlNBcnJheSAqKW9yZGVyZWRMYXN0VmlzaXRl
ZERheXMKIHsKICAgICBpZiAoIV9vcmRlcmVkTGFzdFZpc2l0ZWREYXlzKSB7Ci0gICAgICAgIFZl
Y3RvcjxpbnQ+IGRheXNBc1RpbWVJbnRlcnZhbHM7Ci0gICAgICAgIGRheXNBc1RpbWVJbnRlcnZh
bHMucmVzZXJ2ZUNhcGFjaXR5KF9lbnRyaWVzQnlEYXRlLT5zaXplKCkpOwotICAgICAgICBEYXRl
VG9FbnRyaWVzTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBfZW50cmllc0J5RGF0ZS0+ZW5kKCk7
Ci0gICAgICAgIGZvciAoRGF0ZVRvRW50cmllc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBfZW50
cmllc0J5RGF0ZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgZGF5c0Fz
VGltZUludGVydmFscy5hcHBlbmQoaXQtPmtleSk7Ci0KKyAgICAgICAgYXV0byBkYXlzQXNUaW1l
SW50ZXJ2YWxzID0gY29weVRvVmVjdG9yKF9lbnRyaWVzQnlEYXRlLmtleXMoKSk7CiAgICAgICAg
IHN0ZDo6c29ydChkYXlzQXNUaW1lSW50ZXJ2YWxzLmJlZ2luKCksIGRheXNBc1RpbWVJbnRlcnZh
bHMuZW5kKCkpOwogICAgICAgICBzaXplX3QgY291bnQgPSBkYXlzQXNUaW1lSW50ZXJ2YWxzLnNp
emUoKTsKICAgICAgICAgX29yZGVyZWRMYXN0VmlzaXRlZERheXMgPSBhZG9wdE5TKFtbTlNNdXRh
YmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6Y291bnRdKTsKQEAgLTQ1MSw3ICs0NDIs
NyBAQCAtIChOU0FycmF5ICopb3JkZXJlZEl0ZW1zTGFzdFZpc2l0ZWRPbkRheTooTlNDYWxlbmRh
ckRhdGUgKilkYXRlCiAgICAgV2ViSGlzdG9yeURhdGVLZXkgZGF0ZUtleTsKICAgICBpZiAoIVtz
ZWxmIGZpbmRLZXk6JmRhdGVLZXkgZm9yRGF5OltkYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJl
bmNlRGF0ZV1dKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBfZW50cmllc0J5RGF0
ZS0+Z2V0KGRhdGVLZXkpLmdldCgpOworICAgIHJldHVybiBfZW50cmllc0J5RGF0ZS5nZXQoZGF0
ZUtleSkuZ2V0KCk7CiB9CiAKIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORApAQCAt
NjE0LDE2ICs2MDUsMTYgQEAgLSAoQk9PTClsb2FkRnJvbVVSTDooTlNVUkwgKilVUkwgY29sbGVj
dERpc2NhcmRlZEl0ZW1zSW50bzooTlNNdXRhYmxlQXJyYXkgKilkaXMKIAogLSAoTlNEYXRhICop
ZGF0YQogewotICAgIGlmIChfZW50cmllc0J5RGF0ZS0+aXNFbXB0eSgpKSB7CisgICAgaWYgKF9l
bnRyaWVzQnlEYXRlLmlzRW1wdHkoKSkgewogICAgICAgICBzdGF0aWMgTlNEYXRhICplbXB0eUhp
c3RvcnlEYXRhID0gW1tOU0RhdGEgYWxsb2NdIGluaXRdOwogICAgICAgICByZXR1cm4gZW1wdHlI
aXN0b3J5RGF0YTsKICAgICB9CiAKICAgICAvLyBJZ25vcmVzIHRoZSBkYXRlIGFuZCBpdGVtIGNv
dW50IGxpbWl0czsgdGhlc2UgYXJlIHJlc3BlY3RlZCB3aGVuIGxvYWRpbmcgaW5zdGVhZCBvZiB3
aGVuIHNhdmluZywgc28KICAgICAvLyB0aGF0IGNsaWVudHMgY2FuIGxlYXJuIG9mIGRpc2NhcmRl
ZCBpdGVtcyBieSBsaXN0ZW5pbmcgdG8gV2ViSGlzdG9yeUl0ZW1zRGlzY2FyZGVkV2hpbGVMb2Fk
aW5nTm90aWZpY2F0aW9uLgotICAgIFdlYkhpc3RvcnlXcml0ZXIgd3JpdGVyKF9lbnRyaWVzQnlE
YXRlLmdldCgpKTsKKyAgICBXZWJIaXN0b3J5V3JpdGVyIHdyaXRlcihfZW50cmllc0J5RGF0ZSk7
CiAgICAgd3JpdGVyLndyaXRlUHJvcGVydHlMaXN0KCk7Ci0gICAgcmV0dXJuIHJldGFpblB0cigo
TlNEYXRhICopd3JpdGVyLnJlbGVhc2VEYXRhKCkuZ2V0KCkpLmF1dG9yZWxlYXNlKCk7CisgICAg
cmV0dXJuIHdyaXRlci5yZWxlYXNlRGF0YSgpLmJyaWRnaW5nQXV0b3JlbGVhc2UoKTsKIH0KIAog
LSAoQk9PTClzYXZlVG9VUkw6KE5TVVJMICopVVJMIGVycm9yOihOU0Vycm9yICoqKWVycm9yCkBA
IC04NTEsNyArODQyLDcgQEAgLSAodm9pZClfdmlzaXRlZFVSTDooTlNVUkwgKil1cmwgd2l0aFRp
dGxlOihOU1N0cmluZyAqKXRpdGxlIG1ldGhvZDooTlNTdHJpbmcgKikKIHsKICAgICBXZWJIaXN0
b3J5SXRlbSAqZW50cnkgPSBbX2hpc3RvcnlQcml2YXRlIHZpc2l0ZWRVUkw6dXJsIHdpdGhUaXRs
ZTp0aXRsZV07CiAKLSAgICBIaXN0b3J5SXRlbSogaXRlbSA9IGNvcmUoZW50cnkpOworICAgIGF1
dG8gaXRlbSA9IGNvcmUoZW50cnkpOwogICAgIGl0ZW0tPnNldExhc3RWaXNpdFdhc0ZhaWx1cmUo
d2FzRmFpbHVyZSk7CiAKICAgICBlbnRyeS0+X3ByaXZhdGUtPl9yZWRpcmVjdFVSTHMgPSBudWxs
cHRyOwpAQCAtODY1LDIwICs4NTYsMTcgQEAgLSAodm9pZClfYWRkVmlzaXRlZExpbmtzVG9WaXNp
dGVkTGlua1N0b3JlOihXZWJWaXNpdGVkTGlua1N0b3JlICYpdmlzaXRlZExpbmtTdG8KIH0KIEBl
bmQKIAotV2ViSGlzdG9yeVdyaXRlcjo6V2ViSGlzdG9yeVdyaXRlcihEYXRlVG9FbnRyaWVzTWFw
KiBlbnRyaWVzQnlEYXRlKQotICAgIDogbV9lbnRyaWVzQnlEYXRlKGVudHJpZXNCeURhdGUpCitX
ZWJIaXN0b3J5V3JpdGVyOjpXZWJIaXN0b3J5V3JpdGVyKERhdGVUb0VudHJpZXNNYXAmIGVudHJp
ZXNCeURhdGUpCisgICAgOiBtX2VudHJpZXNCeURhdGUgeyBlbnRyaWVzQnlEYXRlIH0KKyAgICAs
IG1fZGF0ZUtleXMgeyBjb3B5VG9WZWN0b3IobV9lbnRyaWVzQnlEYXRlLmtleXMoKSkgfQogewot
ICAgIG1fZGF0ZUtleXMucmVzZXJ2ZUNhcGFjaXR5KG1fZW50cmllc0J5RGF0ZS0+c2l6ZSgpKTsK
LSAgICBEYXRlVG9FbnRyaWVzTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2VudHJpZXNCeURh
dGUtPmVuZCgpOwotICAgIGZvciAoRGF0ZVRvRW50cmllc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX2VudHJpZXNCeURhdGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgbV9k
YXRlS2V5cy5hcHBlbmQoaXQtPmtleSk7CiAgICAgc3RkOjpzb3J0KG1fZGF0ZUtleXMuYmVnaW4o
KSwgbV9kYXRlS2V5cy5lbmQoKSk7CiB9CiAKIHZvaWQgV2ViSGlzdG9yeVdyaXRlcjo6d3JpdGVI
aXN0b3J5SXRlbXMoQmluYXJ5UHJvcGVydHlMaXN0T2JqZWN0U3RyZWFtJiBzdHJlYW0pCiB7CiAg
ICAgZm9yIChpbnQgZGF0ZUluZGV4ID0gbV9kYXRlS2V5cy5zaXplKCkgLSAxOyBkYXRlSW5kZXgg
Pj0gMDsgZGF0ZUluZGV4LS0pIHsKLSAgICAgICAgTlNBcnJheSAqZW50cmllcyA9IG1fZW50cmll
c0J5RGF0ZS0+Z2V0KG1fZGF0ZUtleXNbZGF0ZUluZGV4XSkuZ2V0KCk7CisgICAgICAgIE5TQXJy
YXkgKmVudHJpZXMgPSBtX2VudHJpZXNCeURhdGUuZ2V0KG1fZGF0ZUtleXNbZGF0ZUluZGV4XSku
Z2V0KCk7CiAgICAgICAgIE5TVUludGVnZXIgZW50cnlDb3VudCA9IFtlbnRyaWVzIGNvdW50XTsK
ICAgICAgICAgZm9yIChOU1VJbnRlZ2VyIGVudHJ5SW5kZXggPSAwOyBlbnRyeUluZGV4IDwgZW50
cnlDb3VudDsgKytlbnRyeUluZGV4KQogICAgICAgICAgICAgd3JpdGVIaXN0b3J5SXRlbShzdHJl
YW0sIFtlbnRyaWVzIG9iamVjdEF0SW5kZXg6ZW50cnlJbmRleF0pOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbSBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KaW5kZXggZDU0MWM0YzA0
ZjJkNzVkMDZiZWUwODBlYmNmZTY2YjBhNDVmYmVmNi4uYzg1NzNiMGQwOThjMjA1MDAyZWEzYzQ3
YWJlNDhlNjUxZGVjMmU2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlz
Yy9XZWJDb3JlU3RhdGlzdGljcy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNj
L1dlYkNvcmVTdGF0aXN0aWNzLm1tCkBAIC05NCwxMyArOTQsMTMgQEAgc3RhdGljIFJldGFpblB0
cjxOU0NvdW50ZWRTZXQ+IGNyZWF0ZU5TQ291bnRlZFNldChjb25zdCBIYXNoQ291bnRlZFNldDxj
b25zdCBjaGEKICsgKE5TQ291bnRlZFNldCAqKWphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RUeXBl
Q291bnRzCiB7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7Ci0gICAgcmV0dXJu
IGNyZWF0ZU5TQ291bnRlZFNldCgqY29tbW9uVk0oKS5oZWFwLnByb3RlY3RlZE9iamVjdFR5cGVD
b3VudHMoKSkuYXV0b3JlbGVhc2UoKTsKKyAgICByZXR1cm4gY3JlYXRlTlNDb3VudGVkU2V0KGNv
bW1vblZNKCkuaGVhcC5wcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCkpLmF1dG9yZWxlYXNlKCk7
CiB9CiAKICsgKE5TQ291bnRlZFNldCAqKWphdmFTY3JpcHRPYmplY3RUeXBlQ291bnRzCiB7CiAg
ICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7Ci0gICAgcmV0dXJuIGNyZWF0ZU5TQ291
bnRlZFNldCgqY29tbW9uVk0oKS5oZWFwLm9iamVjdFR5cGVDb3VudHMoKSkuYXV0b3JlbGVhc2Uo
KTsKKyAgICByZXR1cm4gY3JlYXRlTlNDb3VudGVkU2V0KGNvbW1vblZNKCkuaGVhcC5vYmplY3RU
eXBlQ291bnRzKCkpLmF1dG9yZWxlYXNlKCk7CiB9CiAKICsgKHZvaWQpZ2FyYmFnZUNvbGxlY3RK
YXZhU2NyaXB0T2JqZWN0cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlz
Yy9XZWJFbGVtZW50RGljdGlvbmFyeS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2Mv
V2ViRWxlbWVudERpY3Rpb25hcnkubW0KaW5kZXggYWViNGQ4ZjE2ZmRkYjAyNTUxMDhiMmEwMGVi
OWY2NzIxNWYxNzY0Mi4uNzk2ZmM4ZTE4YmI0ZmFkNjQzYzEwZjI0NWQ1MzU0ZjUxOGI3YWI5OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJFbGVtZW50RGljdGlv
bmFyeS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYkVsZW1lbnREaWN0
aW9uYXJ5Lm1tCkBAIC00MSw2ICs0MSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0hpdFRlc3RSZXN1bHQuaD4KICNpbXBvcnQgPFdlYkNvcmUvSW1hZ2Uu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsYmFyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNv
cmVKSVRPcGVyYXRpb25zLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVPYmpDRXh0cmFzLmg+
CiAjaW1wb3J0IDxXZWJLaXRMZWdhY3kvRE9NQ29yZS5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcuaCBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3LmgKaW5kZXggM2Fi
OTE0MmE5MzU0MTkwZjg1NzZmYjliMTQ4ZWUwZDk1MTZlMDVhMC4uZWNjMDA1MTkwN2Q2NGY0Y2Ji
YTVmMTQ0NTE5NTkxZmEzNGNlNWIwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5oCkBAIC03Nyw3ICs3Nyw3IEBA
IHR5cGVkZWYgdW5pb24gUGx1Z2luUG9ydCB7CiAgICAgQk9PTCBzaG91bGRTdG9wU29vbjsKIAog
ICAgIHVpbnQzMl90IGN1cnJlbnRUaW1lcklEOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxIYXNoTWFw
PHVpbnQzMl90LCBzdGQ6OnVuaXF1ZV9wdHI8UGx1Z2luVGltZXI+Pj4gdGltZXJzOworICAgIEhh
c2hNYXA8dWludDMyX3QsIHN0ZDo6dW5pcXVlX3B0cjxQbHVnaW5UaW1lcj4+IHRpbWVyczsKIAog
ICAgIHVuc2lnbmVkIHBsdWdpbkZ1bmN0aW9uQ2FsbERlcHRoOwogICAgIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW0g
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5t
bQppbmRleCA4ZmZmMjQ1ZTE2OGQzNGFkYmVkYjAyZDQ3NDhmOWNiODcxMTA3N2I2Li43MWNkMWY2
YzYyMzI3ODIyOGI0YWRlN2JhOGRiOGE1MGRhZTUxMDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQpAQCAt
Mzk4LDExICszOTgsOCBAQCAtICh2b2lkKXN0b3BUaW1lcnMKICAgICBpZiAoX2V2ZW50SGFuZGxl
cikKICAgICAgICAgX2V2ZW50SGFuZGxlci0+c3RvcFRpbWVycygpOwogICAgIAotICAgIGlmICgh
dGltZXJzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGF1dG8mIGl0OiB0aW1lcnMtPnZh
bHVlcygpKQotICAgICAgICBpdC0+c3RvcCgpOworICAgIGZvciAoYXV0byYgdGltZXIgOiB0aW1l
cnMudmFsdWVzKCkpCisgICAgICAgIHRpbWVyLT5zdG9wKCk7CiB9CiAKIC0gKHZvaWQpc3RhcnRU
aW1lcnMKQEAgLTQxMywxMiArNDEwLDkgQEAgLSAodm9pZClzdGFydFRpbWVycwogICAgIC8vIHNl
bmQgbnVsbCBldmVudHMgYXQgYSByZWR1Y2VkIHJhdGUuCiAgICAgX2V2ZW50SGFuZGxlci0+c3Rh
cnRUaW1lcnMoX2lzQ29tcGxldGVseU9ic2N1cmVkKTsKICAgICAKLSAgICBpZiAoIXRpbWVycykK
LSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGZvciAoYXV0byYgaXQ6IHRpbWVycy0+dmFsdWVz
KCkpIHsKLSAgICAgICAgQVNTRVJUKCFpdC0+aXNBY3RpdmUoKSk7Ci0gICAgICAgIGl0LT5zdGFy
dChfaXNDb21wbGV0ZWx5T2JzY3VyZWQpOworICAgIGZvciAoYXV0byYgdGltZXIgOiB0aW1lcnMu
dmFsdWVzKCkpIHsKKyAgICAgICAgQVNTRVJUKCF0aW1lci0+aXNBY3RpdmUoKSk7CisgICAgICAg
IHRpbWVyLT5zdGFydChfaXNDb21wbGV0ZWx5T2JzY3VyZWQpOwogICAgIH0gICAgCiB9CiAKQEAg
LTE2NDcsMTQgKzE2NDEsMTEgQEAgLSAodWludDMyX3Qpc2NoZWR1bGVUaW1lcldpdGhJbnRlcnZh
bDoodWludDMyX3QpaW50ZXJ2YWwgcmVwZWF0OihOUEJvb2wpcmVwZWF0IHQKICAgICBpZiAoIXRp
bWVyRnVuYykKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgaWYgKCF0aW1lcnMpCi0gICAg
ICAgIHRpbWVycyA9IG1ha2VVbmlxdWU8SGFzaE1hcDx1aW50MzJfdCwgc3RkOjp1bmlxdWVfcHRy
PFBsdWdpblRpbWVyPj4+KCk7Ci0KICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGx1Z2luVGltZXI+KiBz
bG90ID0gbnVsbHB0cjsKICAgICB1aW50MzJfdCB0aW1lcklEOwotICAgIGRvCisgICAgZG8gewog
ICAgICAgICB0aW1lcklEID0gKytjdXJyZW50VGltZXJJRDsKLSAgICB3aGlsZSAoIXRpbWVycy0+
aXNWYWxpZEtleSh0aW1lcklEKSB8fCAqKHNsb3QgPSAmdGltZXJzLT5hZGQodGltZXJJRCwgbnVs
bHB0cikuaXRlcmF0b3ItPnZhbHVlKSk7CisgICAgfSB3aGlsZSAoIXRpbWVycy5pc1ZhbGlkS2V5
KHRpbWVySUQpIHx8ICooc2xvdCA9ICZ0aW1lcnMuYWRkKHRpbWVySUQsIG51bGxwdHIpLml0ZXJh
dG9yLT52YWx1ZSkpOwogCiAgICAgYXV0byB0aW1lciA9IG1ha2VVbmlxdWU8UGx1Z2luVGltZXI+
KHBsdWdpbiwgdGltZXJJRCwgaW50ZXJ2YWwsIHJlcGVhdCwgdGltZXJGdW5jKTsKIApAQCAtMTY2
OCwxMCArMTY1OSw3IEBAIC0gKHVpbnQzMl90KXNjaGVkdWxlVGltZXJXaXRoSW50ZXJ2YWw6KHVp
bnQzMl90KWludGVydmFsIHJlcGVhdDooTlBCb29sKXJlcGVhdCB0CiAKIC0gKHZvaWQpdW5zY2hl
ZHVsZVRpbWVyOih1aW50MzJfdCl0aW1lcklECiB7Ci0gICAgaWYgKCF0aW1lcnMpCi0gICAgICAg
IHJldHVybjsKLSAgICAKLSAgICB0aW1lcnMtPnJlbW92ZSh0aW1lcklEKTsKKyAgICB0aW1lcnMu
cmVtb3ZlKHRpbWVySUQpOwogfQogCiAtIChOUEVycm9yKXBvcFVwQ29udGV4dE1lbnU6KE5QTWVu
dSAqKW1lbnUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaAppbmRleCA2NjhiOTMy
NjIwYThlMGQxMzY4ZWU3YjBkMGUzYzFiMzMwMDUzM2M1Li4yYTcxM2I5ZGJmNzIyYWZmNWU2YTgz
Y2E2OTNjM2UzMGY2Y2Q4MjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5o
CkBAIC0yNyw3ICsyNyw3IEBACiAKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTmV0d29ya2luZ0Nv
bnRleHQuaD4KIAotY2xhc3MgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dCA6IHB1YmxpYyBXZWJD
b3JlOjpGcmFtZU5ldHdvcmtpbmdDb250ZXh0IHsKK2NsYXNzIFdlYkZyYW1lTmV0d29ya2luZ0Nv
bnRleHQgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6RnJhbWVOZXR3b3JraW5nQ29udGV4dCB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIFJlZjxXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0PiBjcmVhdGUo
V2ViQ29yZTo6RnJhbWUqIGZyYW1lKQogICAgIHsKQEAgLTM4LDE2ICszOCwxNSBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveVByaXZhdGVCcm93c2luZ1Nlc3Npb24oKTsKIAogcHJp
dmF0ZToKLQogICAgIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQoV2ViQ29yZTo6RnJhbWUqIGZy
YW1lKQogICAgICAgICA6IFdlYkNvcmU6OkZyYW1lTmV0d29ya2luZ0NvbnRleHQoZnJhbWUpCiAg
ICAgewogICAgIH0KIAotICAgIGJvb2wgbG9jYWxGaWxlQ29udGVudFNuaWZmaW5nRW5hYmxlZCgp
IGNvbnN0IG92ZXJyaWRlOwotICAgIFNjaGVkdWxlUGFpckhhc2hTZXQqIHNjaGVkdWxlZFJ1bkxv
b3BQYWlycygpIGNvbnN0IG92ZXJyaWRlOwotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHNvdXJj
ZUFwcGxpY2F0aW9uQXVkaXREYXRhKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIHNvdXJj
ZUFwcGxpY2F0aW9uSWRlbnRpZmllcigpIGNvbnN0IG92ZXJyaWRlOwotICAgIFdlYkNvcmU6OlJl
c291cmNlRXJyb3IgYmxvY2tlZEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYp
IGNvbnN0IG92ZXJyaWRlOwotICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogc3Rv
cmFnZVNlc3Npb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGxvY2FsRmlsZUNvbnRlbnRT
bmlmZmluZ0VuYWJsZWQoKSBjb25zdCBmaW5hbDsKKyAgICBjb25zdCBTY2hlZHVsZVBhaXJIYXNo
U2V0KiBzY2hlZHVsZWRSdW5Mb29wUGFpcnMoKSBjb25zdCBmaW5hbDsKKyAgICBSZXRhaW5QdHI8
Q0ZEYXRhUmVmPiBzb3VyY2VBcHBsaWNhdGlvbkF1ZGl0RGF0YSgpIGNvbnN0IGZpbmFsOworICAg
IFN0cmluZyBzb3VyY2VBcHBsaWNhdGlvbklkZW50aWZpZXIoKSBjb25zdCBmaW5hbDsKKyAgICBX
ZWJDb3JlOjpSZXNvdXJjZUVycm9yIGJsb2NrZWRFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmKSBjb25zdCBmaW5hbDsKKyAgICBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Np
b24qIHN0b3JhZ2VTZXNzaW9uKCkgY29uc3QgZmluYWw7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4
dC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTmV0
d29ya2luZ0NvbnRleHQubW0KaW5kZXggMGEwNmVhM2Y5NzY3N2RmNTMxNGRhMTA3MDA3ZjJhNWIw
ZDA3ZmZmNy4uNmJhMGJiYWM0ZjEyMTg1NDU3NTM4YTAzZTI3ZmQ0MTBjZDk0OWIzMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVOZXR3
b3JraW5nQ29udGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1tCkBAIC02MiwxMSArNjIsMTEgQEAgYm9v
bCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Ojpsb2NhbEZpbGVDb250ZW50U25pZmZpbmdFbmFi
bGVkKCkgY29uc3QKICAgICByZXR1cm4gZnJhbWUoKSAmJiBmcmFtZSgpLT5zZXR0aW5ncygpLmxv
Y2FsRmlsZUNvbnRlbnRTbmlmZmluZ0VuYWJsZWQoKTsKIH0KIAotU2NoZWR1bGVQYWlySGFzaFNl
dCogV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c2NoZWR1bGVkUnVuTG9vcFBhaXJzKCkgY29u
c3QKK2NvbnN0IFNjaGVkdWxlUGFpckhhc2hTZXQqIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6
OnNjaGVkdWxlZFJ1bkxvb3BQYWlycygpIGNvbnN0CiB7CiAgICAgaWYgKCFmcmFtZSgpIHx8ICFm
cmFtZSgpLT5wYWdlKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBmcmFt
ZSgpLT5wYWdlKCktPnNjaGVkdWxlZFJ1bkxvb3BQYWlycygpOworICAgIHJldHVybiAmZnJhbWUo
KS0+cGFnZSgpLT5zY2hlZHVsZWRSdW5Mb29wUGFpcnMoKTsKIH0KIAogUmV0YWluUHRyPENGRGF0
YVJlZj4gV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c291cmNlQXBwbGljYXRpb25BdWRpdERh
dGEoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJIVE1MVmlldy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZp
ZXcubW0KaW5kZXggNjFkNmY0ZTg2NTk0ZGNhYjdlNjE3OTA3MDRiNzA5ZWY1Y2NjMmJlMC4uM2Nj
MzkyYjAxYjRkZTQ1NmNmMWQ3MWY0MWY5M2RlMjJmZjRkMTlhNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCkBAIC0xNTAsNiArMTUwLDcgQEAK
ICNpbXBvcnQgPHd0Zi9OYWtlZFB0ci5oPgogI2ltcG9ydCA8d3RmL09iakNSdW50aW1lRXh0cmFz
Lmg+CiAjaW1wb3J0IDx3dGYvUnVuTG9vcC5oPgorI2ltcG9ydCA8d3RmL1NvcnRlZEFycmF5TWFw
Lmg+CiAjaW1wb3J0IDx3dGYvU3lzdGVtVHJhY2luZy5oPgogI2ltcG9ydCA8d3RmL1dlYWtPYmpD
UHRyLmg+CiAjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KQEAgLTI2NDIsMzcgKzI2
NDMsMjYgQEAgLSAoQk9PTCljYWxsRGVsZWdhdGVEb0NvbW1hbmRCeVNlbGVjdG9ySWZOZWVkZWQ6
KFNFTClzZWxlY3RvcgogICAgIHJldHVybiBbW3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndh
cmRlcl0gd2ViVmlldzp3ZWJWaWV3IGRvQ29tbWFuZEJ5U2VsZWN0b3I6c2VsZWN0b3JdOwogfQog
Ci10eXBlZGVmIEhhc2hNYXA8U0VMLCBTdHJpbmc+IFNlbGVjdG9yTmFtZU1hcDsKLQotLy8gTWFw
IHNlbGVjdG9ycyBpbnRvIEVkaXRvciBjb21tYW5kIG5hbWVzLgotLy8gVGhpcyBpcyBub3QgbmVl
ZGVkIGZvciBhbnkgc2VsZWN0b3JzIHRoYXQgaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIHRoZSBFZGl0
b3IgY29tbWFuZC4KLXN0YXRpYyBjb25zdCBTZWxlY3Rvck5hbWVNYXAqIGNyZWF0ZVNlbGVjdG9y
RXhjZXB0aW9uTWFwKCkKLXsKLSAgICBTZWxlY3Rvck5hbWVNYXAqIG1hcCA9IG5ldyBIYXNoTWFw
PFNFTCwgU3RyaW5nPjsKLQotICAgIG1hcC0+YWRkKEBzZWxlY3RvcihpbnNlcnROZXdsaW5lSWdu
b3JpbmdGaWVsZEVkaXRvcjopLCAiSW5zZXJ0TmV3bGluZSIpOwotICAgIG1hcC0+YWRkKEBzZWxl
Y3RvcihpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3I6KSwgIkluc2VydE5ld2xpbmUiKTsKLSAgICBt
YXAtPmFkZChAc2VsZWN0b3IoaW5zZXJ0VGFiSWdub3JpbmdGaWVsZEVkaXRvcjopLCAiSW5zZXJ0
VGFiIik7Ci0gICAgbWFwLT5hZGQoQHNlbGVjdG9yKHBhZ2VEb3duOiksICJNb3ZlUGFnZURvd24i
KTsKLSAgICBtYXAtPmFkZChAc2VsZWN0b3IocGFnZURvd25BbmRNb2RpZnlTZWxlY3Rpb246KSwg
Ik1vdmVQYWdlRG93bkFuZE1vZGlmeVNlbGVjdGlvbiIpOwotICAgIG1hcC0+YWRkKEBzZWxlY3Rv
cihwYWdlVXA6KSwgIk1vdmVQYWdlVXAiKTsKLSAgICBtYXAtPmFkZChAc2VsZWN0b3IocGFnZVVw
QW5kTW9kaWZ5U2VsZWN0aW9uOiksICJNb3ZlUGFnZVVwQW5kTW9kaWZ5U2VsZWN0aW9uIik7Ci0K
LSAgICByZXR1cm4gbWFwOwotfQotCiBzdGF0aWMgU3RyaW5nIGNvbW1hbmROYW1lRm9yU2VsZWN0
b3IoU0VMIHNlbGVjdG9yKQogeworICAgIGNvbnN0IGNoYXIqIHNlbGVjdG9yTmFtZSA9IHNlbF9n
ZXROYW1lKHNlbGVjdG9yKTsKKwogICAgIC8vIENoZWNrIHRoZSBleGNlcHRpb24gbWFwIGZpcnN0
LgotICAgIHN0YXRpYyBjb25zdCBTZWxlY3Rvck5hbWVNYXAqIGV4Y2VwdGlvbk1hcCA9IGNyZWF0
ZVNlbGVjdG9yRXhjZXB0aW9uTWFwKCk7Ci0gICAgU2VsZWN0b3JOYW1lTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IGV4Y2VwdGlvbk1hcC0+ZmluZChzZWxlY3Rvcik7Ci0gICAgaWYgKGl0ICE9IGV4
Y2VwdGlvbk1hcC0+ZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+dmFsdWU7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBzdGQ6OnBhaXI8Q29tcGFyYWJsZUFTQ0lJTGl0ZXJhbCwgQVNDSUlMaXRlcmFs
PiBleGNlcHRpb25BcnJheVtdID0geworICAgICAgICB7ICJpbnNlcnROZXdsaW5lSWdub3JpbmdG
aWVsZEVkaXRvcjoiLCAiSW5zZXJ0TmV3bGluZSJfcyB9LAorICAgICAgICB7ICJpbnNlcnRQYXJh
Z3JhcGhTZXBhcmF0b3I6IiwgIkluc2VydE5ld2xpbmUiX3MgfSwKKyAgICAgICAgeyAiaW5zZXJ0
VGFiSWdub3JpbmdGaWVsZEVkaXRvcjoiLCAiSW5zZXJ0VGFiIl9zIH0sCisgICAgICAgIHsgInBh
Z2VEb3duOiIsICJNb3ZlUGFnZURvd24iX3MgfSwKKyAgICAgICAgeyAicGFnZURvd25BbmRNb2Rp
ZnlTZWxlY3Rpb246IiwgIk1vdmVQYWdlRG93bkFuZE1vZGlmeVNlbGVjdGlvbiJfcyB9LAorICAg
ICAgICB7ICJwYWdlVXA6IiwgIk1vdmVQYWdlVXAiX3MgfSwKKyAgICAgICAgeyAicGFnZVVwQW5k
TW9kaWZ5U2VsZWN0aW9uOiIsICJNb3ZlUGFnZVVwQW5kTW9kaWZ5U2VsZWN0aW9uIl9zIH0sCisg
ICAgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIFNvcnRlZEFycmF5TWFwIGV4Y2VwdGlvbk1hcCB7
IGV4Y2VwdGlvbkFycmF5IH07CisgICAgaWYgKGF1dG8gY29tbWFuZE5hbWUgPSBleGNlcHRpb25N
YXAudHJ5R2V0KHNlbGVjdG9yTmFtZSkpCisgICAgICAgIHJldHVybiAqY29tbWFuZE5hbWU7CiAK
ICAgICAvLyBSZW1vdmUgdGhlIHRyYWlsaW5nIGNvbG9uLgotICAgIC8vIE5vIG5lZWQgdG8gY2Fw
aXRhbGl6ZSB0aGUgY29tbWFuZCBuYW1lIHNpbmNlIEVkaXRvciBjb21tYW5kIG5hbWVzIGFyZQot
ICAgIC8vIG5vdCBjYXNlIHNlbnNpdGl2ZS4KLSAgICBjb25zdCBjaGFyKiBzZWxlY3Rvck5hbWUg
PSBzZWxfZ2V0TmFtZShzZWxlY3Rvcik7CisgICAgLy8gTm8gbmVlZCB0byBjYXBpdGFsaXplIHRo
ZSBjb21tYW5kIG5hbWUgc2luY2UgRWRpdG9yIGNvbW1hbmQgbmFtZXMgYXJlIG5vdCBjYXNlIHNl
bnNpdGl2ZS4KICAgICBzaXplX3Qgc2VsZWN0b3JOYW1lTGVuZ3RoID0gc3RybGVuKHNlbGVjdG9y
TmFtZSk7CiAgICAgaWYgKHNlbGVjdG9yTmFtZUxlbmd0aCA8IDIgfHwgc2VsZWN0b3JOYW1lW3Nl
bGVjdG9yTmFtZUxlbmd0aCAtIDFdICE9ICc6JykKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViQ29yZVN0YXRpc3RpY3MuY3Bw
IGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViQ29yZVN0YXRpc3RpY3MuY3BwCmluZGV4IDlj
OTZhNjdlOWQwYzFmOTA0NDJmMGI0MGM0NDgyNmI1YzU2YjVhMzMuLjk3ZGE0N2MwYzg4NzMyZDU1
ODE0ZWUxYzEzMjVkMGI5ODUyYjhjMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
d2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9X
ZWJDb3JlU3RhdGlzdGljcy5jcHAKQEAgLTE0NCwxMiArMTQ0LDkgQEAgSFJFU1VMVCBXZWJDb3Jl
U3RhdGlzdGljczo6amF2YVNjcmlwdFByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoX0NPTV9PdXRw
dHJfb3B0XwogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwogCiAgICAgSlNMb2NrSG9sZGVyIGxv
Y2soY29tbW9uVk0oKSk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVDb3VudFNldD4ganNPYmpl
Y3RUeXBlTmFtZXMoY29tbW9uVk0oKS5oZWFwLnByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoKSk7
Ci0gICAgdHlwZWRlZiBUeXBlQ291bnRTZXQ6OmNvbnN0X2l0ZXJhdG9yIEl0ZXJhdG9yOwotICAg
IEl0ZXJhdG9yIGVuZCA9IGpzT2JqZWN0VHlwZU5hbWVzLT5lbmQoKTsKICAgICBIYXNoTWFwPFN0
cmluZywgaW50PiB0eXBlQ291bnRNYXA7Ci0gICAgZm9yIChJdGVyYXRvciBjdXJyZW50ID0ganNP
YmplY3RUeXBlTmFtZXMtPmJlZ2luKCk7IGN1cnJlbnQgIT0gZW5kOyArK2N1cnJlbnQpCi0gICAg
ICAgIHR5cGVDb3VudE1hcC5zZXQoY3VycmVudC0+a2V5LCBjdXJyZW50LT52YWx1ZSk7CisgICAg
Zm9yIChhdXRvJiBlbnRyeSA6IGNvbW1vblZNKCkuaGVhcC5wcm90ZWN0ZWRPYmplY3RUeXBlQ291
bnRzKCkpCisgICAgICAgIHR5cGVDb3VudE1hcC5hZGQoZW50cnkua2V5LCBlbnRyeS52YWx1ZSk7
CiAKICAgICBDT01QdHI8SVByb3BlcnR5QmFnMj4gcmVzdWx0cyhBZG9wdENPTSwgQ09NUHJvcGVy
dHlCYWc8aW50Pjo6Y3JlYXRlSW5zdGFuY2UodHlwZUNvdW50TWFwKSk7CiAgICAgcmVzdWx0cy5j
b3B5UmVmVG8odHlwZU5hbWVzQW5kQ291bnRzKTsKQEAgLTE2MiwxMiArMTU5LDkgQEAgSFJFU1VM
VCBXZWJDb3JlU3RhdGlzdGljczo6amF2YVNjcmlwdE9iamVjdFR5cGVDb3VudHMoX0NPTV9PdXRw
dHJfb3B0XyBJUHJvcGVydHkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAogICAgIEpTTG9j
a0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlQ291bnRT
ZXQ+IGpzT2JqZWN0VHlwZU5hbWVzKGNvbW1vblZNKCkuaGVhcC5vYmplY3RUeXBlQ291bnRzKCkp
OwotICAgIHR5cGVkZWYgVHlwZUNvdW50U2V0Ojpjb25zdF9pdGVyYXRvciBJdGVyYXRvcjsKLSAg
ICBJdGVyYXRvciBlbmQgPSBqc09iamVjdFR5cGVOYW1lcy0+ZW5kKCk7CiAgICAgSGFzaE1hcDxT
dHJpbmcsIGludD4gdHlwZUNvdW50TWFwOwotICAgIGZvciAoSXRlcmF0b3IgY3VycmVudCA9IGpz
T2JqZWN0VHlwZU5hbWVzLT5iZWdpbigpOyBjdXJyZW50ICE9IGVuZDsgKytjdXJyZW50KQotICAg
ICAgICB0eXBlQ291bnRNYXAuc2V0KGN1cnJlbnQtPmtleSwgY3VycmVudC0+dmFsdWUpOworICAg
IGZvciAoYXV0byYgZW50cnkgOiBjb21tb25WTSgpLmhlYXAub2JqZWN0VHlwZUNvdW50cygpKQor
ICAgICAgICB0eXBlQ291bnRNYXAuYWRkKGVudHJ5LmtleSwgZW50cnkudmFsdWUpOwogCiAgICAg
Q09NUHRyPElQcm9wZXJ0eUJhZzI+IHJlc3VsdHMoQWRvcHRDT00sIENPTVByb3BlcnR5QmFnPGlu
dD46OmNyZWF0ZUluc3RhbmNlKHR5cGVDb3VudE1hcCkpOwogICAgIHJlc3VsdHMuY29weVJlZlRv
KHR5cGVOYW1lc0FuZENvdW50cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCmluZGV4
IDAwYTAyMmQ0YzEzODk0YjZhYjQwYjcwMjBjYTlmYjU2MzNlODM2ZDcuLjM2OGNiMDczYTQyNjYz
YzQ3NDAwYzY2OTJlMTk3Nzc1MmFlNTE0YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvd2luL1dlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcu
Y3BwCkBAIC02ODU4LDIyICs2ODU4LDE2IEBAIEhSRVNVTFQgV2ViVmlldzo6cmVnaXN0ZXJFbWJl
ZGRlZFZpZXdNSU1FVHlwZShfSW5fIEJTVFIgbWltZVR5cGUpCiAgICAgaWYgKCFtaW1lVHlwZSkK
ICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgIGlmICghbV9lbWJlZGRlZFZpZXdNSU1F
VHlwZXMpCi0gICAgICAgIG1fZW1iZWRkZWRWaWV3TUlNRVR5cGVzID0gbWFrZVVuaXF1ZTxIYXNo
U2V0PFN0cmluZz4+KCk7Ci0KLSAgICBtX2VtYmVkZGVkVmlld01JTUVUeXBlcy0+YWRkKHRvU3Ry
aW5nKG1pbWVUeXBlKSk7CisgICAgbV9lbWJlZGRlZFZpZXdNSU1FVHlwZXMuYWRkKHRvU3RyaW5n
KG1pbWVUeXBlKSk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKIGJvb2wgV2ViVmlldzo6c2hvdWxk
VXNlRW1iZWRkZWRWaWV3KGNvbnN0IFdURjo6U3RyaW5nJiBtaW1lVHlwZSkgY29uc3QKIHsKLSAg
ICBpZiAoIW1fZW1iZWRkZWRWaWV3TUlNRVR5cGVzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
ICAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICByZXR1cm4gbV9lbWJlZGRlZFZpZXdNSU1FVHlwZXMtPmNvbnRhaW5zKG1pbWVUeXBlKTsKKyAg
ICByZXR1cm4gbV9lbWJlZGRlZFZpZXdNSU1FVHlwZXMuY29udGFpbnMobWltZVR5cGUpOwogfQog
CiBib29sIFdlYlZpZXc6Om9uR2V0T2JqZWN0KFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0s
IExSRVNVTFQmIGxSZXN1bHQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L3dpbi9XZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmgKaW5kZXgg
Yzk5YjgyN2U1YzBkNTRlOGJlYjhkYjM1Nzc0MzgwZjc1ODM1ZmI1YS4uNzM0MTc3ZTk4NzExNTRm
YzRhNjYzNzRjMTdmOWJmNmEzYjVkMWEwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS93aW4vV2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuaApA
QCAtNjg2LDcgKzY4Niw3IEBAIHByb3RlY3RlZDoKIAogICAgIEhXTkQgbV90b3BMZXZlbFBhcmVu
dCB7IG51bGxwdHIgfTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxIYXNoU2V0PFdURjo6U3RyaW5n
Pj4gbV9lbWJlZGRlZFZpZXdNSU1FVHlwZXM7CisgICAgSGFzaFNldDxXVEY6OlN0cmluZz4gbV9l
bWJlZGRlZFZpZXdNSU1FVHlwZXM7CiAKICAgICAvL1ZhcmlhYmxlcyBuZWVkZWQgdG8gc3RvcmUg
Z2VzdHVyZSBpbmZvcm1hdGlvbgogICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBtX2dlc3R1cmVU
YXJnZXROb2RlOwo=
</data>
<flag name="commit-queue"
          id="450705"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429506</attachid>
            <date>2021-05-23 23:31:18 -0700</date>
            <delta_ts>2021-05-24 08:11:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226162-20210523233117.patch</filename>
            <type>text/plain</type>
            <size>261875</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3OTQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
YmE4NmE0M2RlYmJlOTRhOGMyNWUwOGVhYjlhNjNhNThhZDFmNGM0Li4xNWY0Y2Q4Y2I3Mzc3Y2I2
OTcyMTk4MWFlMTNkZGVjOTIzYWQwOTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MyBAQAorMjAyMS0wNS0yMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUHV0dGluZyBIYXNoTWFwIGluIGEgaGVhcCBibG9jayBodXJ0cyBtZW1vcnkgdXNl
LCBzcGVlZCwgY29kZSBzaXplCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMjYxNjIKKworICAgICAgICBIYXNoTWFwLCBIYXNoU2V0LCBIYXNoQ291bnRl
ZFNldCwgTGlzdEhhc2hTZXQsIGFuZCBXZWFrSGFzaFNldCBhbGwKKyAgICAgICAgY29udGFpbiBv
bmx5IGEgc2luZ2xlIHBvaW50ZXIgaW4gcHJvZHVjdGlvbiBidWlsZHMuIFB1dHRpbmcgb25lIGlu
dG8KKyAgICAgICAgYSBibG9jayBvbiB0aGUgaGVhcCBjb3N0cyBtZW1vcnkgKHRoZSBoZWFwIGJs
b2NrKSwgc3BlZWQgYW5kIGNvZGUgc2l6ZQorICAgICAgICAoY2hhc2luZyBvbmUgbW9yZSBwb2lu
dGVyLCBhZGRpdGlvbmFsIG51bGwgY2hlY2tzKS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9KU0NsYXNzUmVmLmNwcDoKKyAgICAgICAgKE9w
YXF1ZUpTQ2xhc3M6Ok9wYXF1ZUpTQ2xhc3MpOiBVcGRhdGUgc28gbV9zdGF0aWNWYWx1ZXMgYW5k
CisgICAgICAgIG1fc3RhdGljRnVuY3Rpb25zIGFyZSBubyBsb25nZXIgdXNpbmcgdW5pcXVlX3B0
ci4KKyAgICAgICAgKE9wYXF1ZUpTQ2xhc3M6On5PcGFxdWVKU0NsYXNzKTogRGl0dG8uCisgICAg
ICAgIChPcGFxdWVKU0NsYXNzQ29udGV4dERhdGE6Ok9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSk6
IERpdHRvLgorICAgICAgICAoT3BhcXVlSlNDbGFzczo6c3RhdGljVmFsdWVzKTogRGl0dG8uCisg
ICAgICAgIChPcGFxdWVKU0NsYXNzOjpzdGF0aWNGdW5jdGlvbnMpOiBEaXR0by4KKyAgICAgICAg
KiBBUEkvSlNDbGFzc1JlZi5oOiBEaXR0by4KKworICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhl
YXAuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkluZGV4ZWRBYnN0cmFjdEhlYXA6OmF0U2xvdyk6
IFVwZGF0ZSBzbyBtX2xhcmdlSW5kaWNlcworICAgICAgICBpcyBubyBsb25nZXIgdXNpbmcgdW5p
cXVlX3B0ci4KKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFwLmg6IERpdHRvLgorCisgICAg
ICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6cHJvdGVjdGVkT2JqZWN0
VHlwZUNvdW50cyk6IFVwZGF0ZSB0byBub3QgcmV0dXJuCisgICAgICAgIGEgdW5pcXVlX3B0ci4K
KyAgICAgICAgKEpTQzo6SGVhcDo6b2JqZWN0VHlwZUNvdW50cyk6IERpdHRvLgorICAgICAgICAo
SlNDOjpIZWFwOjphZGRDb3JlQ29uc3RyYWludHMpOiBVcGRhdGUgc2luY2UgbV9tYXJrTGlzdFNl
dCBpcworICAgICAgICBubyBsb25nZXIgYSB1bmlxdWVfcHRyLgorICAgICAgICAqIGhlYXAvSGVh
cC5oOiBEaXR0by4KKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVzLmg6IERpdHRvLgorCisgICAg
ICAgICogaGVhcC9IZWFwVXRpbC5oOgorICAgICAgICAoSlNDOjpIZWFwVXRpbDo6aXNQb2ludGVy
R0NPYmplY3RKU0NlbGwpOiBSZW1vdmVkIGNoZWNrIHRvIHNlZQorICAgICAgICBpZiBhIHNldCBp
cyBlbXB0eSBiZWZvcmUgY2FsbGluZyBjb250YWlucyBvbiBpdC4gVGhhdCdzIHVubmVlZGVkCisg
ICAgICAgIGV4dHJhIGNvZGUuCisKKyAgICAgICAgKiBoZWFwL01hcmtlZFNwYWNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmVuYWJsZVByZWNpc2VBbGxvY2F0aW9uVHJhY2tpbmcp
OiBVcGRhdGUgc2luY2UKKyAgICAgICAgbV9wcmVjaXNlQWxsb2NhdGlvblNldCBpcyBub3cgdXNp
bmcgT3B0aW9uYWwgaW5zdGVhZCBvZiB1bmlxdWVfcHRyLgorICAgICAgICAqIGhlYXAvTWFya2Vk
U3BhY2UuaDogRGl0dG8uCisKKyAgICAgICAgKiBydW50aW1lL0V2YWxFeGVjdXRhYmxlLmNwcDoK
KyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBs
KTogVXBkYXRlIHNpbmNlCisgICAgICAgIG1fdGVtcGxhdGVPYmplY3RNYXAgaXMgbm8gbG9uZ2Vy
IGEgdW5pcXVlX3B0ci4KKyAgICAgICAgKiBydW50aW1lL0V2YWxFeGVjdXRhYmxlLmg6IERpdHRv
LgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpT
Qzo6RnVuY3Rpb25FeGVjdXRhYmxlOjplbnN1cmVUZW1wbGF0ZU9iamVjdE1hcCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwpOiBE
aXR0by4KKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oOiBEaXR0by4KKyAg
ICAgICAgKiBydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpT
Qzo6TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OmVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRy
ZW5JbXBsKTogRGl0dG8uCisgICAgICAgICogcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJs
ZS5oOiBEaXR0by4KKyAgICAgICAgKiBydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcDoKKyAg
ICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5J
bXBsKTogRGl0dG8uCisgICAgICAgICogcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oOiBEaXR0
by4KKyAgICAgICAgKiBydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlND
OjpTY3JpcHRFeGVjdXRhYmxlOjpjcmVhdGVUZW1wbGF0ZU9iamVjdCk6IENhbGwgdGhlIG5ldwor
ICAgICAgICB0ZW1wbGF0ZU9iamVjdE1hcCBpbnN0ZWFkIG9mIGVuc3VyZVRlbXBsYXRlT2JqZWN0
TWFwLgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjplbnN1cmVUZW1wbGF0ZU9iamVj
dE1hcEltcGwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjp0ZW1w
bGF0ZU9iamVjdE1hcCk6IFJlbmFtZWQgZnJvbQorICAgICAgICBlbnN1cmVUZW1wbGF0ZU9iamVj
dE1hcCBhbmQgZ290IHJpZCBvZiB0aGUgVk0gYXJndW1lbnQuCisgICAgICAgICogcnVudGltZS9T
Y3JpcHRFeGVjdXRhYmxlLmg6IERpdHRvLgorCiAyMDIxLTA1LTIzICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBDaGVja2VkTG9jayB0aGUgZGVmYXVsdCBM
b2NrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggMDhkOGFlNWMwY2NmYmU3NmM4NGI4ZWY4OGRmODFlMmQ0YWVhZTIy
OS4uY2EwMGQ1ZDMxMDU5MzkyN2U4OWI5OGQzYmM5ZGI3YjYwOTExYmVhMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDM0NCBAQAorMjAyMS0wNS0yMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5j
b20+CisKKyAgICAgICAgUHV0dGluZyBIYXNoTWFwIGluIGEgaGVhcCBibG9jayBodXJ0cyBtZW1v
cnkgdXNlLCBzcGVlZCwgY29kZSBzaXplCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjYxNjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlCYWNraW5n
U3RvcmVUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9y
eUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZUNsZWFyZWQpOgorICAgICAgICBT
dG9wIHVzaW5nIHVuaXF1ZV9wdHIgaW4gbV9vcmlnaW5hbFZhbHVlcyBhbmQgbV9jbGVhcmVkS2V5
VmFsdWVNYXBzIGFuZAorICAgICAgICB0byB0cmFuc2ZlciBvd25lcnNoaXAgb2YgYSBLZXlWYWx1
ZU1hcC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5QmFja2luZ1N0b3JlVHJh
bnNhY3Rpb246OnJlY29yZFZhbHVlQ2hhbmdlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbjo6YWJvcnQpOiBEaXR0by4K
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24uaDogRGl0dG8uCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
TWVtb3J5T2JqZWN0U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1v
cnlPYmplY3RTdG9yZTo6Y29udGFpbnNSZWNvcmQpOiBTdG9wIHVzaW5nCisgICAgICAgIHVuaXF1
ZV9wdHIgZm9yIG1fa2V5VmFsdWVTdG9yZS4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
TWVtb3J5T2JqZWN0U3RvcmU6OnJlcGxhY2VLZXlWYWx1ZVN0b3JlKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeU9iamVjdFN0b3JlOjpkZWxldGVSZWNvcmQpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5T2JqZWN0U3RvcmU6OmFk
ZFJlY29yZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlPYmpl
Y3RTdG9yZTo6cG9wdWxhdGVJbmRleFdpdGhFeGlzdGluZ1JlY29yZHMpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5T2JqZWN0U3RvcmU6OmNvdW50Rm9yS2V5UmFu
Z2UgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5T2Jq
ZWN0U3RvcmU6OnZhbHVlRm9yS2V5IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6Ok1lbW9yeU9iamVjdFN0b3JlOjp2YWx1ZUZvcktleVJhbmdlIGNvbnN0KTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeU9iamVjdFN0b3JlOjpsb3dl
c3RLZXlXaXRoUmVjb3JkSW5SYW5nZSBjb25zdCk6IERpdHRvLgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5oOiBEaXR0by4KKworICAgICAgICAq
IE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlVHJhY2tlcjo6b3BlbkRhdGFiYXNlcyk6IFN0b3AgdXNpbmcgdW5pcXVlX3B0
ciBmb3IKKyAgICAgICAgbV9vcGVuRGF0YWJhc2VNYXAsIG1fYmVpbmdDcmVhdGVkLCBhbmQgbV9i
ZWluZ0RlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmFkZE9wZW5E
YXRhYmFzZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpyZW1v
dmVPcGVuRGF0YWJhc2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tl
cjo6cmVjb3JkQ3JlYXRpbmdEYXRhYmFzZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGF0
YWJhc2VUcmFja2VyOjpkb25lQ3JlYXRpbmdEYXRhYmFzZSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YWJhc2VUcmFja2VyOjpjcmVhdGluZ0RhdGFiYXNlKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnJlY29yZERlbGV0aW5nRGF0YWJhc2UpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6ZG9uZURlbGV0aW5nRGF0YWJh
c2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6aXNEZWxldGlu
Z0RhdGFiYXNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmNh
bkRlbGV0ZU9yaWdpbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2Vy
OjpkZWxldGVEYXRhYmFzZUZpbGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
VHJhY2tlcjo6cmVtb3ZlRGVsZXRlZE9wZW5lZERhdGFiYXNlcyk6IERpdHRvLgorICAgICAgICAq
IE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmg6IERpdHRvLgorCisgICAgICAg
ICogYmluZGluZ3MvanMvV2luZG93UHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2luZG93
UHJveHk6OldpbmRvd1Byb3h5KTogU3RvcCB1c2luZyBVbmlxdWVSZWYgZm9yCisgICAgICAgIG1f
anNXaW5kb3dQcm94aWVzLgorICAgICAgICAoV2ViQ29yZTo6V2luZG93UHJveHk6On5XaW5kb3dQ
cm94eSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2luZG93UHJveHk6OmRldGFjaEZyb21G
cmFtZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2luZG93UHJveHk6OmRlc3Ryb3lKU1dp
bmRvd1Byb3h5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dQcm94eTo6Y3JlYXRl
SlNXaW5kb3dQcm94eSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2luZG93UHJveHk6Ompz
V2luZG93UHJveGllc0FzVmVjdG9yIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpX
aW5kb3dQcm94eTo6Y2xlYXJKU1dpbmRvd1Byb3hpZXNOb3RNYXRjaGluZ0RPTVdpbmRvdyk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6V2luZG93UHJveHk6OnNldERPTVdpbmRvdyk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6V2luZG93UHJveHk6OmF0dGFjaERlYnVnZ2VyKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dQcm94eTo6anNXaW5kb3dQcm94aWVzIGNvbnN0KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dQcm94eTo6cmVsZWFzZUpTV2luZG93UHJv
eGllcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2luZG93UHJveHk6OnNldEpTV2luZG93
UHJveGllcyk6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dpbmRvd1Byb3h5Lmg6IERp
dHRvLgorCisgICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjb3VudGVyVG9DU1NWYWx1ZSk6IFVzZSBhIHJlZmVyZW5jZSBpbnN0
ZWFkIG9mIGEgcG9pbnRlcgorICAgICAgICBmb3IgY291bnRlckRpcmVjdGl2ZXMuCisKKyAgICAg
ICAgKiBjc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6d3JhcEZvckRlcHJlY2F0ZWRD
U1NPTSk6CisgICAgICAgIFN0b3AgdXNpbmcgdW5pcXVlX3B0ciBmb3IgbV9jc3NvbVZhbHVlV3Jh
cHBlcnMuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uOjpk
aWRNdXRhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OklubGluZUNTU1N0eWxlRGVjbGFy
YXRpb246OmRpZE11dGF0ZSk6IERpdHRvLgorICAgICAgICAqIGNzcy9Qcm9wZXJ0eVNldENTU1N0
eWxlRGVjbGFyYXRpb24uaDogRGl0dG8uCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmJ1aWxkQWNjZXNzS2V5Q2FjaGUpOiBVc2UgT3B0
aW9uYWwgaW5zdGVhZCBvZgorICAgICAgICB1bmlxdWVfcHRyIGZvciBtX2FjY2Vzc0tleUNhY2hl
LgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmludmFsaWRhdGVBY2Nlc3NLZXlDYWNoZVNs
b3dDYXNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6d2lsbEJlUmVtb3Zl
ZEZyb21GcmFtZSk6IFN0b3AgdXNpbmcgdW5pcXVlX3B0cgorICAgICAgICBmb3IgbV90b3VjaEV2
ZW50VGFyZ2V0cyBhbmQgbV93aGVlbEV2ZW50VGFyZ2V0cy4KKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpyZW1vdmVBbGxFdmVudExpc3RlbmVycyk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OndoZWVsRXZlbnRIYW5kbGVyc0NoYW5nZWQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjpkaWRBZGRXaGVlbEV2ZW50SGFuZGxlcik6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRpZFJlbW92ZVdoZWVsRXZlbnRIYW5kbGVyKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6d2hlZWxFdmVudEhhbmRsZXJDb3VudCBj
b25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRpZEFkZFRvdWNoRXZl
bnRIYW5kbGVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZGlkUmVtb3Zl
VG91Y2hFdmVudEhhbmRsZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpk
aWRSZW1vdmVFdmVudFRhcmdldE5vZGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50Ojp0b3VjaEV2ZW50SGFuZGxlckNvdW50IGNvbnN0KTogRGl0dG8uCisgICAgICAgICogZG9t
L0RvY3VtZW50Lmg6IERpdHRvLgorCisgICAgICAgICogZG9tL0lkVGFyZ2V0T2JzZXJ2ZXJSZWdp
c3RyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJZFRhcmdldE9ic2VydmVyUmVnaXN0cnk6OmFk
ZE9ic2VydmVyKTogU3RvcCB1c2luZworICAgICAgICB1bmlxdWVfcHRyIGZvciB0aGUgdmFsdWVz
IGluIG1fcmVnaXN0cnkuCisgICAgICAgIChXZWJDb3JlOjpJZFRhcmdldE9ic2VydmVyUmVnaXN0
cnk6OnJlbW92ZU9ic2VydmVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJZFRhcmdldE9i
c2VydmVyUmVnaXN0cnk6Om5vdGlmeU9ic2VydmVyc0ludGVybmFsKTogRGl0dG8uCisgICAgICAg
ICogZG9tL0lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5oOiBEaXR0by4KKworICAgICAgICAqIGRv
bS9NdXRhdGlvbk9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2
ZXI6OmRlbGl2ZXIpOiBTdG9wIHVzaW5nIHVuaXF1ZV9wdHIgZm9yCisgICAgICAgIHRoZSByZXR1
cm4gdmFsdWUgb2YgdGFrZVRyYW5zaWVudFJlZ2lzdHJhdGlvbnMuCisgICAgICAgICogZG9tL011
dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRp
b25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6b2JzZXJ2ZWRTdWJ0cmVlTm9kZVdpbGxEZXRhY2gpOgor
ICAgICAgICBTdG9wIHVzaW5nIHVuaXF1ZV9wdHIgZm9yIG1fdHJhbnNpZW50UmVnaXN0cmF0aW9u
Tm9kZXMuCisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uOjp0
YWtlVHJhbnNpZW50UmVnaXN0cmF0aW9ucyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TXV0
YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMgY29u
c3QpOiBEaXR0by4KKyAgICAgICAgKiBkb20vTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbi5o
OiBEaXR0by4KKworICAgICAgICAqIGh0bWwvRm9ybUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Rm9ybUNvbnRyb2xsZXI6OmNyZWF0ZVNhdmVkRm9ybVN0YXRlTWFwKTogU3RvcCB1
c2luZworICAgICAgICB1bmlxdWVfcHRyIGZvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgZnVu
Y3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpGb3JtQ29udHJvbGxlcjo6Zm9ybUVsZW1lbnRzU3Rh
dGUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKiBodG1sL0Zvcm1Db250cm9sbGVyLmg6IERpdHRv
LgorCisgICAgICAgICogbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50TG9hZGVyOjp0cnlMb2FkaW5nU3Vic3RpdHV0ZURhdGEpOiBVcGRhdGUgc2lu
Y2UKKyAgICAgICAgc2NoZWR1bGVkUnVuTG9vcFBhaXJzIG5vdyByZXR1cm5zIGEgcmVmZXJlbmNl
LgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZUxvYWRlcjo6bG9hZERhdGFVUkwpOiBEaXR0by4KKworICAgICAgICAqIGxvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNo
ZWRSZXNvdXJjZUxvYWRlcjo6ZG9jdW1lbnREaWRGaW5pc2hMb2FkRXZlbnQpOiBTdG9wCisgICAg
ICAgIHVzaW5nIHVuaXF1ZV9wdHIgZm9yIG1fcHJlbG9hZHMuCisgICAgICAgIChXZWJDb3JlOjpD
YWNoZWRSZXNvdXJjZUxvYWRlcjo6cHJlbG9hZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
Q2FjaGVkUmVzb3VyY2VMb2FkZXI6Ondhcm5VbnVzZWRQcmVsb2Fkcyk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OmlzUHJlbG9hZGVkIGNvbnN0KTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Y2xlYXJQcmVsb2Fk
cyk6IERpdHRvLgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5o
OiBEaXR0by4KKworICAgICAgICAqIGxvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6c2Vzc2lvblJlc291cmNlTWFwKTogU3RvcCB1c2lu
ZyB1bmlxdWVfcHRyCisgICAgICAgIGZvciB0aGUgdmFsdWVzIGluIG1fYWxsUmVzb3VyY2VzIGFu
ZCBtX3Nlc3Npb25SZXNvdXJjZXMuCisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6ZW5z
dXJlU2Vzc2lvblJlc291cmNlTWFwKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlD
YWNoZTo6cmVzb3VyY2VGb3JSZXF1ZXN0SW1wbCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
TWVtb3J5Q2FjaGU6OmZvckVhY2hSZXNvdXJjZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
TWVtb3J5Q2FjaGU6OmZvckVhY2hTZXNzaW9uUmVzb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6Ok1lbW9yeUNhY2hlOjpwcnVuZURlYWRSZXNvdXJjZXNUb1NpemUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpscnVMaXN0Rm9yKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6cmVtb3ZlUmVzb3VyY2VzV2l0aE9yaWdpbik6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OmdldE9yaWdpbnNXaXRoQ2FjaGUpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpvcmlnaW5zV2l0aENhY2hlIGNv
bnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6cmVtb3ZlUmVxdWVz
dEZyb21TZXNzaW9uQ2FjaGVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNo
ZTo6Z2V0U3RhdGlzdGljcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6
OnNldERpc2FibGVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6ZHVt
cExSVUxpc3RzIGNvbnN0KTogRGl0dG8uCisgICAgICAgICogbG9hZGVyL2NhY2hlL01lbW9yeUNh
Y2hlLmg6IERpdHRvLgorCisgICAgICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpzZXRJc1Zpc2libGVBbmRBY3RpdmVJbnRl
cm5hbCk6IFVwZGF0ZQorICAgICAgICBzaW5jZSBzY3JvbGxhYmxlQXJlYXMgcmV0dXJucyBhIHJl
ZmVyZW5jZS4KKworICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lVmlldzo6ZGlkRGVzdHJveVJlbmRlclRyZWUpOiBTdG9wIHVzaW5nCisgICAgICAg
IHVuaXF1ZV9wdHIgZm9yIG1fZW1iZWRkZWRPYmplY3RzVG9VcGRhdGUsIG1fdmlld3BvcnRDb25z
dHJhaW5lZE9iamVjdHMsCisgICAgICAgIGFuZCBtX3Nsb3dSZXBhaW50T2JqZWN0cy4KKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6aW52YWxpZGF0ZVNjcm9sbGJhcnNGb3JBbGxTY3JvbGxh
YmxlQXJlYXMpOiBTdG9wCisgICAgICAgIHVzaW5nIHVuaXF1ZV9wdHIgZm9yIG1fc2Nyb2xsYWJs
ZUFyZWFzLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjphZGRFbWJlZGRlZE9iamVjdFRv
VXBkYXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnJlbW92ZUVtYmVk
ZGVkT2JqZWN0VG9VcGRhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6
YWRkU2xvd1JlcGFpbnRPYmplY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmll
dzo6cmVtb3ZlU2xvd1JlcGFpbnRPYmplY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lVmlldzo6YWRkVmlld3BvcnRDb25zdHJhaW5lZE9iamVjdCk6IERpdHRvLiBBbHNvIGdvdAor
ICAgICAgICByaWQgb2YgdW5uZWNlc3NhcnkgZG91YmxlIGhhc2hpbmcuCisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVZpZXc6OnJlbW92ZVZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3QpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2Nyb2xsQ29udGVudHNGYXN0UGF0aCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpyZXBhaW50U2xvd1JlcGFpbnRPYmpl
Y3RzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNldFZpZXdwb3J0Q29u
c3RyYWluZWRPYmplY3RzTmVlZExheW91dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVWaWV3Ojp1cGRhdGVFbWJlZGRlZE9iamVjdHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lVmlldzo6YWRqdXN0U2Nyb2xsU3RlcEZvckZpeGVkQ29udGVudCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojpub3RpZnlQYWdlVGhhdENvbnRlbnRBcmVh
V2lsbFBhaW50IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmFk
ZFNjcm9sbGFibGVBcmVhKTogRGl0dG8uIEFsc28gdGFrZSBhIHJlZmVyZW5jZS4KKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lVmlldzo6cmVtb3ZlU2Nyb2xsYWJsZUFyZWEpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6Y29udGFpbnNTY3JvbGxhYmxlQXJlYSBjb25zdCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjphZGRDaGlsZCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpyZW1vdmVDaGlsZCk6IERpdHRvLgorICAgICAgICAq
IHBhZ2UvRnJhbWVWaWV3Lmg6IERpdHRvLgorCisgICAgICAgICogcGFnZS9NZW1vcnlSZWxlYXNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxvZ01lbW9yeVN0YXRpc3RpY3NBdFRpbWVPZkRlYXRo
KTogVXBkYXRlZCBzaW5jZQorICAgICAgICBvYmplY3RUeXBlQ291bnRzIG5vIGxvbmdlciByZXR1
cm5zIGEgdW5pcXVlX3B0ci4KKworICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQYWdlOjpsb2NrQWxsT3ZlcmxheVNjcm9sbGJhcnNUb0hpZGRlbik6IFVwZGF0ZWQg
c2luY2UKKyAgICAgICAgc2Nyb2xsYWJsZUFyZWFzIG5vdyByZXR1cm5zIGEgcmVmZXJlbmNlIGlu
c3RlYWQgb2YgYSBwb2ludGVyLgorCisgICAgICAgICogcGFnZS9QYWdlLmg6IFN0b3AgdXNpbmcg
dW5pcXVlX3B0ciBmb3IgbV9zY2hlZHVsZWRSdW5Mb29wUGFpcnMuCisKKyAgICAgICAgKiBwYWdl
L1BlcmZvcm1hbmNlTG9nZ2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQZXJmb3JtYW5jZUxv
Z2dpbmc6OmphdmFTY3JpcHRPYmplY3RDb3VudHMpOiBVcGRhdGVkCisgICAgICAgIHNpbmNlIG9i
amVjdFR5cGVDb3VudHMgbm8gbG9uZ2VyIHJldHVybnMgYSB1bmlxdWVfcHRyLgorCisgICAgICAg
ICogcGFnZS9QcmludENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJpbnRDb250ZXh0
OjplbmQpOiBVc2UgT3B0aW9uYWwgaW5zdGVhZCBvZiB1bmlxdWVfcHRyCisgICAgICAgIGZvciBt
X2xpbmtlZERlc3RpbmF0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OlByaW50Q29udGV4dDo6b3V0
cHV0TGlua2VkRGVzdGluYXRpb25zKTogRGl0dG8uCisgICAgICAgICogcGFnZS9QcmludENvbnRl
eHQuaDogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL21hYy9QYWdlTWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6UGFnZTo6YWRkU2NoZWR1bGVQYWlyKTogU3RvcCB1c2luZyB1bmlxdWVfcHRyIGZv
cgorICAgICAgICBtX3NjaGVkdWxlZFJ1bkxvb3BQYWlycy4KKyAgICAgICAgKFdlYkNvcmU6OlBh
Z2U6OnJlbW92ZVNjaGVkdWxlUGFpcik6IERpdHRvLgorCisgICAgICAgICogcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OmFic29sdXRlRXZlbnRUcmFja2luZ1JlZ2lvbnNGb3JGcmFtZSBjb25zdCk6
CisgICAgICAgIFVwZGF0ZWQgc2luY2Ugc2Nyb2xsYWJsZUFyZWFzIHJldHVybnMgYSByZWZlcmVu
Y2UuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6aGFzVmlzaWJsZVNs
b3dSZXBhaW50Vmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMgY29uc3QpOgorICAgICAgICBVcGRh
dGVkIHNpbmNlIHZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzIHJldHVybnMgYSByZWZlcmVuY2Uu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1ldHJpY3NNYXAuaDogU3RvcCB1
c2luZyB1bmlxdWVfcHRyCisgICAgICAgIGZvciBtX3BhZ2VzLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg6IFN0b3AgdXNpbmcK
KyAgICAgICAgdW5pcXVlX3B0ciBmb3IgbV9uYW1lSGFzaE1hcEZvclNoYWRlcnMuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxl
U2hhZGVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6bWFwcGVkU3ltYm9sTmFtZSk6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9OZXR3b3JraW5nQ29udGV4dC5oOiBVcGRhdGVkIHNjaGVkdWxlZFJ1bkxvb3BQYWlycworICAg
ICAgICB0byByZXR1cm4gYSBjb25zdCBwb2ludGVyIHRvIHRoZSBzZXQuCisKKyAgICAgICAgKiBy
ZW5kZXJpbmcvR3JpZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmlkOjpzZXRBdXRvUmVwZWF0
RW1wdHlDb2x1bW5zKTogU3RvcCB1c2luZyBhIHVuaXF1ZV9wdHIKKyAgICAgICAgZm9yIG1fYXV0
b1JlcGVhdEVtcHR5Q29sdW1ucy4KKyAgICAgICAgKFdlYkNvcmU6OkdyaWQ6OnNldEF1dG9SZXBl
YXRFbXB0eVJvd3MpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkdyaWQ6Omhhc0F1dG9SZXBl
YXRFbXB0eVRyYWNrcyBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R3JpZDo6aXNF
bXB0eUF1dG9SZXBlYXRUcmFjayBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R3Jp
ZDo6YXV0b1JlcGVhdEVtcHR5VHJhY2tzIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpHcmlkOjpzZXROZWVkc0l0ZW1zUGxhY2VtZW50KTogRGl0dG8uCisgICAgICAgICogcmVuZGVy
aW5nL0dyaWQuaDogRGl0dG8uCisKKyAgICAgICAgKiByZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5n
QWxnb3JpdGhtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRUcmFja1NpemluZ0FsZ29yaXRo
bTo6Y29tcHV0ZUZsZXhGYWN0b3JVbml0U2l6ZSBjb25zdCk6CisgICAgICAgIFN0b3AgdXNpbmcg
dW5pcXVlX3B0ciBmb3IgdGhlIGFydWdtZW50IHRvIHRoaXMgZnVuY3Rpb24uCisgICAgICAgICog
cmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5oOiBEaXR0by4KKworICAgICAgICAq
IHJlbmRlcmluZy9IaXRUZXN0TG9jYXRpb24uY3BwOiBEZWxldGVkIHRoZSBkZWZhdWx0IGNvbnN0
cnVjdG9yLAorICAgICAgICBjb3B5IGNvbnN0cnVjdG9yLCBkZXN0cnVjdG9yLCBhbmQgYXNzaWdu
bWVudCBvcGVyYXRvci4KKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdExvY2F0aW9uLmg6IFVz
ZSB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3IKKyAgICAgICAgdGhlIGRlZmF1bHQgY29u
c3RydWN0b3IsIGNvcHkgY29uc3RydWN0b3IsIGRlc3RydWN0b3IsIGFuZAorICAgICAgICBhc3Np
Z25tZW50IG9wZXJhdG9yLgorCisgICAgICAgICogcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kVG9Ob2RlU2V0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQpOiBEZWxldGVkIHRoZSBjb3B5
CisgICAgICAgIGNvbnN0cnVjdG9yLiBXZSBjYW4gdXNlIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0
aW9uIG5vdyB0aGF0IHdlCisgICAgICAgIHN0b3BwZWQgdXNpbmcgdW5pcXVlX3B0ciBmb3IgbV9s
aXN0QmFzZWRUZXN0UmVzdWx0LgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6b3Bl
cmF0b3I9KTogRGVsZXRlZC4gRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0
OjphZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0Q29tbW9uKToKKyAgICAgICAgRmFjdG9yZWQg
b3V0IGEgaGVscGVyIGZ1bmN0aW9uIHNvIHRoZXJlIGlzIGxlc3MgdGVtcGxhdGUgY29kZS4KKyAg
ICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OmFwcGVuZCk6IFNpbXBsaWZpZWQgdXNpbmcg
YSBtb2Rlcm4gZm9yCisgICAgICAgIGxsbG9vcAorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJl
c3VsdDo6bGlzdEJhc2VkVGVzdFJlc3VsdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpIaXRUZXN0UmVzdWx0OjptdXRhYmxlTGlzdEJhc2VkVGVzdFJlc3VsdCk6IERlbGV0ZWQu
CisgICAgICAgICogcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaDogRGl0dG8uCisKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDogVXBkYXRlIHRvIHVzZSBjb25zdCBwb2ludGVycyB3
aGVuIGV4cG9zaW5nCisgICAgICAgIHNldHMgc28gdGhleSBjYW4gYmUgaXRlcmF0ZWQuIFRoaXMg
d2lsbCBoZWxwIGZvciBwb3NzaWJsZSBmdXR1cmUKKyAgICAgICAgcmVmYWN0b3JpbmcgdG8gbm90
IHN0b3JlIHRoZXNlIHNldHMgaW4gc2VwYXJhdGUgYmxvY2tzIG9uIHRoZSBoZWFwLgorCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGxh
bkNvdW50ZXIpOiBVcGRhdGVkIHNpbmNlIGNvdW50ZXJEaXJlY3RpdmVzIGlzIGEgcmVmZXJlbmNl
LgorICAgICAgICAoV2ViQ29yZTo6bWFrZUNvdW50ZXJOb2RlKTogU3RvcCB1c2luZyB1bmlxdWVf
cHRyIGluIGNvdW50ZXJNYXBzLgorICAgICAgICAoV2ViQ29yZTo6ZGVzdHJveUNvdW50ZXJOb2Rl
V2l0aG91dE1hcFJlbW92YWwpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvdW50
ZXI6OmRlc3Ryb3lDb3VudGVyTm9kZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVyTm9kZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
dXBkYXRlQ291bnRlcnMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvdW50ZXI6
OnJlbmRlcmVyU3R5bGVDaGFuZ2VkU2xvd0Nhc2UpOiBEaXR0by4KKyAgICAgICAgKHNob3dDb3Vu
dGVyUmVuZGVyZXJUcmVlKTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckNvdW50
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvdW50ZXI6OnJlbmRlcmVyU3R5bGVDaGFu
Z2VkKTogRGl0dG8uCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRlZEZsb3cu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhZ21lbnRlZEZsb3c6OmludmFsaWRhdGVG
cmFnbWVudHMpOiBTdG9wIHVzaW5nCisgICAgICAgIHVuaXF1ZS1QdHIgZm9yIG1fbGluZVRvRnJh
Z21lbnRNYXAuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFnbWVudGVkRmxvdzo6cmVtb3Zl
TGluZUZyYWdtZW50SW5mbyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhZ21l
bnRlZEZsb3c6OmNoZWNrTGluZXNDb25zaXN0ZW5jeSBjb25zdCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRnJhZ21lbnRlZEZsb3c6OmNsZWFyTGluZXNUb0ZyYWdtZW50TWFwKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFnbWVudGVkRmxvdzo6Y29udGFpbmlu
Z0ZyYWdtZW50TWFwKTogTW92ZWQgdGhpcworICAgICAgICB0byB0aGUgaGVhZGVyIHNpbmNlIGl0
J3Mgbm93IHRyaXZpYWwuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50ZWRGbG93
Lmg6IERpdHRvLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6Z3V0dGVyc1NpemUgY29uc3QpOiBTdG9wIHVzaW5nIHVu
aXF1ZV9wdHIKKyAgICAgICAgZm9yIE9yZGVyZWRUcmFja0luZGV4U2V0LgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyR3JpZDo6Y29tcHV0ZUVtcHR5VHJhY2tzRm9yQXV0b1JlcGVhdCBjb25zdCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6dHJhY2tTaXplc0ZvckNvbXB1
dGVkU3R5bGUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnBv
cHVsYXRlR3JpZFBvc2l0aW9uc0ZvckRpcmVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyR3JpZDo6bm9uQ29sbGFwc2VkVHJhY2tzIGNvbnN0KTogRGl0dG8uCisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckdyaWQuaDogRGl0dG8uCisKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Q29tcG9zaXRvcjo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnMpOiBVcGRhdGUKKyAgICAgICAgc2lu
Y2Ugdmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMgaXMgYSByZWZlcmVuY2UuCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVN5bmNocm9ub3VzU2Nyb2xsaW5n
Tm9kZXMpOgorICAgICAgICBVcGRhdGUgc2luY2Ugc2xvd1JlcGFpbnRPYmplY3RzIGlzIGEgcmVm
ZXJlbmNlLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2xlYXIp
OiBQYXNzIHJlZmVyZW5jZSB0bworICAgICAgICBjb250YWlucy9hZGQvcmVtb3ZlU2Nyb2xsYWJs
ZUFyZWEuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRh
dGVTY3JvbGxhYmxlQXJlYVNldCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJM
aXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OlJlbmRlckxpc3RC
b3gpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OndpbGxCZURlc3Ry
b3llZCk6IERpdHRvLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxv
dy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3c6OlJlbmRlck11
bHRpQ29sdW1uRmxvdyk6IE1vdmUgZGF0YQorICAgICAgICBtZW1iZXIgaW5pdGlhbGl6YXRpb24g
dG8gdGhlIGNsYXNzIGRlZmluaXRpb24uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNv
bHVtbkZsb3c6OmZpbmRDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIgY29uc3QpOgorICAgICAgICBT
dG9wIHVzaW5nIHVuaXF1ZV9wdHIgZm9yIG1fc3Bhbm5lck1hcC4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93Lmg6IERpdHRvLgorCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNl
Y3Rpb246OnJlbGF5b3V0Q2VsbElmRmxleGVkKTogVXBkYXRlZAorICAgICAgICBzaW5jZSBwZXJj
ZW50SGVpZ2h0RGVzY2VuZGFudHMgcmV0dXJucyBhIGNvbnN0IHBvaW50ZXIuCisKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndpZGdldFJl
bmRlcmVyTWFwKTogVXNlIE5ldmVyRGVzdHJveWVkIGluc3RlYWQgb2YKKyAgICAgICAgcHV0dGlu
ZyB0aGUgbWFwIG9uIHRoZSBoZWFwLgorCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpjaGFuZ2VSZXF1aXJl
c0xheW91dCBjb25zdCk6IFN0b3AgdXNpbmcKKyAgICAgICAgdW5pcXVlX3B0ciBmb3IgY291bnRl
ckRpcmVjdGl2ZXMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6YWRkQ3VzdG9tUGFp
bnRXYXRjaFByb3BlcnR5KTogU3RvcCB1c2luZworICAgICAgICB1bmlxdWVfcHRyIGZvciBjdXN0
b21QYWludFdhdGNoZWRQcm9wZXJ0aWVzLgorICAgICAgICAoV2ViQ29yZTo6Y2hhbmdlZEN1c3Rv
bVBhaW50V2F0Y2hlZFByb3BlcnR5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
dHlsZTo6Y291bnRlckRpcmVjdGl2ZXMgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclN0eWxlOjphY2Nlc3NDb3VudGVyRGlyZWN0aXZlcyk6IERpdHRvLgorICAgICAgICAq
IHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJp
bmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjpTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjpvcGVy
YXRvcj09IGNvbnN0KTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFy
ZU5vbkluaGVyaXRlZERhdGEuaDogRGl0dG8uCisKKyAgICAgICAgKiBzdHlsZS9TdHlsZVNjb3Bl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpTY29wZTo6dXBkYXRlQWN0aXZlU3R5bGVT
aGVldHMpOiBVc2UgT3B0aW9uYWwgaW5zdGVhZAorICAgICAgICBvZiB1bmlxdWVfcHRyIGZvciBt
X3dlYWtDb3B5T2ZBY3RpdmVTdHlsZVNoZWV0TGlzdEZvckZhc3RMb29rdXAuCisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6U2NvcGU6OmFjdGl2ZVN0eWxlU2hlZXRzQ29udGFpbnMgY29uc3QpOiBE
SXR0by4KKyAgICAgICAgKiBzdHlsZS9TdHlsZVNjb3BlLmg6IERpdHRvLgorCisgICAgICAgICog
dGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpudW1i
ZXJPZlNjcm9sbGFibGVBcmVhcyk6IFVwZGF0ZSBzaW5jZQorICAgICAgICBzY3JvbGxhYmxlQXJl
YXMgcmV0dXJucyBhIHJlZmVyZW5jZS4KKwogMjAyMS0wNS0yMyAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgQ2hlY2tlZExvY2sgdGhlIGRlZmF1bHQgTG9j
awpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwppbmRleCA0OTBmZjE2NWUxOTcxNDA1NTUxOGJhMzJjNWMyNGYyN2VkZGVmYTAyLi4z
MjY0MTIwNGVlYTQzNDdmOTYyMTg5NzllNzlkY2YyYTkxYjVjYTAzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDUxIEBACisyMDIxLTA1LTIzICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKwor
ICAgICAgICBQdXR0aW5nIEhhc2hNYXAgaW4gYSBoZWFwIGJsb2NrIGh1cnRzIG1lbW9yeSB1c2Us
IHNwZWVkLCBjb2RlIHNpemUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyNjE2MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWRTY2hlZHVsZXIuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrTG9hZFNjaGVkdWxlcjo6c2V0UmVzb3VyY2VMb2FkU2NoZWR1
bGluZ01vZGUpOiBTdG9wIHVzaW5nCisgICAgICAgIHVuaXF1ZV9wdHIgaW4gbV9wYWdlQ29udGV4
dHMuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtMb2FkU2NoZWR1bGVyOjpjb250ZXh0Rm9yTG9h
ZCk6IERpdHRvLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkU2NoZWR1bGVy
Lmg6IERpdHRvLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvUHJlZmV0Y2hDYWNo
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlByZWZldGNoQ2FjaGU6OmNsZWFyKTogU3RvcCB1c2lu
ZyB1bmlxdWVfcHRyIGluIG1fc2Vzc2lvblByZWZldGNoZXMuCisgICAgICAgIChXZWJLaXQ6OlBy
ZWZldGNoQ2FjaGU6OnRha2UpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6UHJlZmV0Y2hDYWNo
ZTo6c3RvcmUpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6UHJlZmV0Y2hDYWNoZTo6c3RvcmVS
ZWRpcmVjdCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpQcmVmZXRjaENhY2hlOjpjbGVhckV4
cGlyZWRFbnRyaWVzKTogRGl0dG8uCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvUHJl
ZmV0Y2hDYWNoZS5oOiBEaXR0by4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL0NvY29hL1dLV2ViUHJvY2Vzc1BsdWdJbkhpdFRlc3RSZXN1bHQubW06CisgICAgICAg
IEFkZGVkIGFuIGluY2x1ZGUgbmVlZGVkIGJlY2F1c2Ugb2YgY2hhbmdlcyB0byBIaXRUZXN0UmVz
dWx0LgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2dsaWIvV2ViS2l0
V2ViSGl0VGVzdFJlc3VsdC5jcHA6IERpdHRvLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVn
aW5zL1BERi9QREZQbHVnaW4ubW06CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6dXBkYXRl
U2Nyb2xsYmFycyk6IFVzZSByZWZlcmVuY2VzIHdoZW4gY2FsbGluZworICAgICAgICBhZGQvcmVt
b3ZlU2Nyb2xsYWJsZUFyZWEuCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6d2lsbERldGFj
aFJlbmRlcmVyKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6ZGVzdHJveSk6
IERpdHRvLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQYXN0ZWJv
YXJkT3ZlcnJpZGVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZE92ZXJyaWRl
czo6YWRkT3ZlcnJpZGUpOiBTdG9wIHVzaW5nIHVuaXF1ZV9wdHIgZm9yCisgICAgICAgIG1fb3Zl
cnJpZGVzTWFwLgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpyZW1v
dmVPdmVycmlkZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkT3ZlcnJp
ZGVzOjpvdmVycmlkZGVuVHlwZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVi
b2FyZE92ZXJyaWRlczo6Z2V0RGF0YUZvck92ZXJyaWRlIGNvbnN0KTogRGl0dG8uCisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmg6IERp
dHRvLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRnJhbWVO
ZXR3b3JraW5nQ29udGV4dC5oOiBVcGRhdGUKKyAgICAgICAgc2NoZWR1bGVkUnVuTG9vcFBhaXJz
IHRvIHJldHVybiBhIGNvbnN0IHBvaW50ZXIuIEFsc28gbWFya2VkIGV2ZXJ5dGhpbmcgZmluYWwK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5ldHdvcmtp
bmdDb250ZXh0Lm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0
OjpzY2hlZHVsZWRSdW5Mb29wUGFpcnMgY29uc3QpOiBEaXR0by4KKworICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6cGFnZUNvbnRhaW5z
QW55SG9yaXpvbnRhbFNjcm9sbGJhcnMpOiBVcGRhdGVkIHNpbmNlIHNjcm9sbGFibGVBcmVhcwor
ICAgICAgICByZXR1cm5zIGEgcmVmZXJlbmNlLgorCiAyMDIxLTA1LTIzICBDaHJpcyBEdW1leiAg
PGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBDaGVja2VkTG9jayB0aGUgZGVmYXVs
dCBMb2NrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggNmY2YmI3MzM4MmNkMmU1N2M3
ZDk0ZTdkMTE4MGRhMzFlOTQ3YjkyOC4uYmM5NzFlY2Y2OTY2ZmIzZjNmOWViYmM3NzlhNWZiMjQx
MWQzZjZiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisy
MDIxLTA1LTIxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBQdXR0
aW5nIEhhc2hNYXAgaW4gYSBoZWFwIGJsb2NrIGh1cnRzIG1lbW9yeSB1c2UsIHNwZWVkLCBjb2Rl
IHNpemUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
NjE2MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
SGlzdG9yeS9XZWJIaXN0b3J5Lm1tOiBVc2UgY29uc3RleHByIGZvciBzb21lIGZpbGUtbG9jYWwg
Y29uc3RhbnRzLgorICAgICAgICBNYXJrIHRoZSBjb25zdHJ1Y3RvciBvZiBXZWJIaXN0b3J5V3Jp
dGVyIGV4cGxpY2l0LiBVc2UgYSByZWZlcmVuY2UKKyAgICAgICAgZm9yIHRoZSBhcmd1bWVudCB0
byBXZWJIaXN0b3J5V3JpdGVyLiBTdG9yZSBkYXRlIGtleXMgYXMKKyAgICAgICAgV2ViSGlzdG9y
eURhdGVLZXkgaW5zdGVhZCBvZiBuYXJyb3dpbmcgdG8gaW50LgorICAgICAgICAoLVtXZWJIaXN0
b3J5UHJpdmF0ZSBpbml0XSk6IFN0b3AgdXNpbmcgdW5pcXVlX3B0ciBmb3IgX2VudHJpZXNCeURh
dGUuCisgICAgICAgICgtW1dlYkhpc3RvcnlQcml2YXRlIGZpbmRLZXk6Zm9yRGF5Ol0pOiBEaXR0
by4KKyAgICAgICAgKC1bV2ViSGlzdG9yeVByaXZhdGUgaW5zZXJ0SXRlbTpmb3JEYXRlS2V5Ol0p
OiBEaXR0by4KKyAgICAgICAgKC1bV2ViSGlzdG9yeVByaXZhdGUgcmVtb3ZlSXRlbUZyb21EYXRl
Q2FjaGVzOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViSGlzdG9yeVByaXZhdGUgYWRkSXRlbVRv
RGF0ZUNhY2hlczpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhpc3RvcnlQcml2YXRlIHJlYnVp
bGRIaXN0b3J5QnlEYXlJZk5lZWRlZDpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhpc3RvcnlQ
cml2YXRlIHJlbW92ZUFsbEl0ZW1zXSk6IERpdHRvLgorICAgICAgICAoLVtXZWJIaXN0b3J5UHJp
dmF0ZSBvcmRlcmVkTGFzdFZpc2l0ZWREYXlzXSk6IERpdHRvLgorICAgICAgICAoLVtXZWJIaXN0
b3J5UHJpdmF0ZSBvcmRlcmVkSXRlbXNMYXN0VmlzaXRlZE9uRGF5Ol0pOiBEaXR0by4KKyAgICAg
ICAgKC1bV2ViSGlzdG9yeVByaXZhdGUgZGF0YV0pOiBEaXR0by4gQWxzbyByZW1vdmVkIGFuIGlu
Y29ycmVjdCBicmlkZ2luZworICAgICAgICBjYXN0IGNvbWJpbmVkIHdpdGggcmV0YWluUHRyL2F1
dG9yZWxlYXNlIGFuZCB1c2VkIGJyaWRnaW5nQXV0b3JlbGVhc2UgaW5zdGVhZC4KKyAgICAgICAg
KFdlYkhpc3RvcnlXcml0ZXI6OldlYkhpc3RvcnlXcml0ZXIpOiBVcGRhdGVkLgorICAgICAgICAo
V2ViSGlzdG9yeVdyaXRlcjo6d3JpdGVIaXN0b3J5SXRlbXMpOiBEaXR0by4KKworICAgICAgICAq
IE1pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW06CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNz
IGphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzXSk6IFVwZGF0ZWQKKyAgICAgICAg
c2luY2UgcHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cyBubyBsb25nZXIgcmV0dXJucyBhIHVuaXF1
ZV9wdHIuCisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRPYmplY3RUeXBl
Q291bnRzXSk6IERpdHRvLCBmb3IKKyAgICAgICAgb2JqZWN0VHlwZUNvdW50cy4KKworICAgICAg
ICAqIE1pc2MvV2ViRWxlbWVudERpY3Rpb25hcnkubW06IEFkZGVkIGFuIGluY2x1ZGUgbm93IG5l
ZWRlZCBiZWNhdXNlIG9mCisgICAgICAgIGNoYW5nZXMgdG8gSGl0VGVzdFJlc3VsdC5oLgorCisg
ICAgICAgICogUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcuaDogU3RvcCB1c2luZyB1bmlx
dWVfcHRyIGZvciB0aW1lcnMuCisgICAgICAgICogUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZp
ZXcubW06CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBzdG9wVGltZXJzXSk6IERp
dHRvLgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgc3RhcnRUaW1lcnNdKTogRGl0
dG8uCisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBzY2hlZHVsZVRpbWVyV2l0aElu
dGVydmFsOnJlcGVhdDp0aW1lckZ1bmM6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJOZXRzY2Fw
ZVBsdWdpblZpZXcgdW5zY2hlZHVsZVRpbWVyOl0pOiBEaXR0by4KKworICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaDogVXBkYXRlIHNjaGVkdWxlZFJ1
bkxvb3BQYWlycworICAgICAgICB0byByZXR1cm4gYSBjb25zdCBwb2ludGVyLiBBbHNvIG1hcmtl
ZCBldmVyeXRoaW5nIGZpbmFsLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTmV0
d29ya2luZ0NvbnRleHQubW06CisgICAgICAgIChXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Ojpz
Y2hlZHVsZWRSdW5Mb29wUGFpcnMgY29uc3QpOiBEaXR0by4KKworICAgICAgICAqIFdlYlZpZXcv
V2ViSFRNTFZpZXcubW06CisgICAgICAgIChjcmVhdGVTZWxlY3RvckV4Y2VwdGlvbk1hcCk6IERl
bGV0ZWQuCisgICAgICAgIChjb21tYW5kTmFtZUZvclNlbGVjdG9yKTogVXNlIFNvcnRlZEFycmF5
TWFwIGZvciB0aGUgbGlzdCBvZiBzZWxlY3RvcnMKKyAgICAgICAgd2l0aGUgc3BlY2lhbCBuYW1l
cywgcmF0aGVyIHRoYW4gdXNpbmcgYSBIYXNoTWFwIG9uIHRoZSBoZWFwLgorCiAyMDIxLTA1LTIz
ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBDb252ZXJ0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSBmcm9tIGFuIGVudW0gdG8gY2xhc3Mgd3JhcHBpbmcgYSBwbGF0Zm9y
bSBjb2xvciBzcGFjZSAoQ0dDb2xvclNwYWNlUmVmIGZvciBDRyBwb3J0cywgZXRjLikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvd2luL0NoYW5nZUxvZwppbmRleCA3MGEyMTViMzU1YzU2ZTA3OGU3ZjVhZGEwMmNkYjdi
ZjE4YzliNDg3Li4xZWU1MzA4OWM2YzA4OTNhMDQ3NmEzODFiYWFmMzIzYTJiMmFlMzMxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjEtMDUtMjMgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFB1dHRpbmcgSGFzaE1hcCBp
biBhIGhlYXAgYmxvY2sgaHVydHMgbWVtb3J5IHVzZSwgc3BlZWQsIGNvZGUgc2l6ZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MTYyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3RhdGlz
dGljcy5jcHA6CisgICAgICAgIChXZWJDb3JlU3RhdGlzdGljczo6amF2YVNjcmlwdFByb3RlY3Rl
ZE9iamVjdFR5cGVDb3VudHMpOiBTdG9wIHVzaW5nCisgICAgICAgIHVuaXF1ZV9wdHIgZm9yIHBy
b3RlY3RlZE9iamVjdFR5cGVDb3VudHMuCisgICAgICAgIChXZWJDb3JlU3RhdGlzdGljczo6amF2
YVNjcmlwdE9iamVjdFR5cGVDb3VudHMpOiBEaXR0by4KKworICAgICAgICAqIFdlYlZpZXcuY3Bw
OgorICAgICAgICAoV2ViVmlldzo6cmVnaXN0ZXJFbWJlZGRlZFZpZXdNSU1FVHlwZSk6IFN0b3Ag
dXNpbmcgdW5pcXVlX3B0ciBmb3IKKyAgICAgICAgbV9lbWJlZGRlZFZpZXdNSU1FVHlwZXMuCisg
ICAgICAgIChXZWJWaWV3OjpzaG91bGRVc2VFbWJlZGRlZFZpZXcgY29uc3QpOiBEaXR0by4KKyAg
ICAgICAgKiBXZWJWaWV3Lmg6IERpdHRvLgorCiAyMDIxLTA1LTIyICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgUmVwbGFjZSBMb2NrSG9sZGVyIHdpdGggTG9ja2Vy
IGluIGxvY2FsIHZhcmlhYmxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NsYXNzUmVmLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5j
cHAKaW5kZXggMzc0MjUxYzJmMDg5ZDY0ZjA4ODdjOTZkNDlmMTg3YjFkNzBjMThlYi4uNTIxZDhj
NTg1MzBjMmM0NjM3NTQwZjcxNzc5N2E2N2MyY2VjODA3NiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ2xhc3NSZWYuY3BwCkBAIC01NCwyMSArNTQsMTkgQEAgT3BhcXVlSlNDbGFzczo6
T3BhcXVlSlNDbGFzcyhjb25zdCBKU0NsYXNzRGVmaW5pdGlvbiogZGVmaW5pdGlvbiwgT3BhcXVl
SlNDbGFzcyoKICAgICBKU0M6OmluaXRpYWxpemUoKTsKIAogICAgIGlmIChjb25zdCBKU1N0YXRp
Y1ZhbHVlKiBzdGF0aWNWYWx1ZSA9IGRlZmluaXRpb24tPnN0YXRpY1ZhbHVlcykgewotICAgICAg
ICBtX3N0YXRpY1ZhbHVlcyA9IG1ha2VVbmlxdWU8T3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1Rh
YmxlPigpOwogICAgICAgICB3aGlsZSAoc3RhdGljVmFsdWUtPm5hbWUpIHsKICAgICAgICAgICAg
IFN0cmluZyB2YWx1ZU5hbWUgPSBTdHJpbmc6OmZyb21VVEY4KHN0YXRpY1ZhbHVlLT5uYW1lKTsK
ICAgICAgICAgICAgIGlmICghdmFsdWVOYW1lLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIG1f
c3RhdGljVmFsdWVzLT5zZXQodmFsdWVOYW1lLmltcGwoKSwgbWFrZVVuaXF1ZTxTdGF0aWNWYWx1
ZUVudHJ5PihzdGF0aWNWYWx1ZS0+Z2V0UHJvcGVydHksIHN0YXRpY1ZhbHVlLT5zZXRQcm9wZXJ0
eSwgc3RhdGljVmFsdWUtPmF0dHJpYnV0ZXMsIHZhbHVlTmFtZSkpOworICAgICAgICAgICAgICAg
IG1fc3RhdGljVmFsdWVzLmFkZCh2YWx1ZU5hbWUuaW1wbCgpLCBtYWtlVW5pcXVlPFN0YXRpY1Zh
bHVlRW50cnk+KHN0YXRpY1ZhbHVlLT5nZXRQcm9wZXJ0eSwgc3RhdGljVmFsdWUtPnNldFByb3Bl
cnR5LCBzdGF0aWNWYWx1ZS0+YXR0cmlidXRlcywgdmFsdWVOYW1lKSk7CiAgICAgICAgICAgICAr
K3N0YXRpY1ZhbHVlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKGNvbnN0IEpTU3RhdGlj
RnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9uID0gZGVmaW5pdGlvbi0+c3RhdGljRnVuY3Rpb25zKSB7
Ci0gICAgICAgIG1fc3RhdGljRnVuY3Rpb25zID0gbWFrZVVuaXF1ZTxPcGFxdWVKU0NsYXNzU3Rh
dGljRnVuY3Rpb25zVGFibGU+KCk7CiAgICAgICAgIHdoaWxlIChzdGF0aWNGdW5jdGlvbi0+bmFt
ZSkgewogICAgICAgICAgICAgU3RyaW5nIGZ1bmN0aW9uTmFtZSA9IFN0cmluZzo6ZnJvbVVURjgo
c3RhdGljRnVuY3Rpb24tPm5hbWUpOwogICAgICAgICAgICAgaWYgKCFmdW5jdGlvbk5hbWUuaXNO
dWxsKCkpCi0gICAgICAgICAgICAgICAgbV9zdGF0aWNGdW5jdGlvbnMtPnNldChmdW5jdGlvbk5h
bWUuaW1wbCgpLCBtYWtlVW5pcXVlPFN0YXRpY0Z1bmN0aW9uRW50cnk+KHN0YXRpY0Z1bmN0aW9u
LT5jYWxsQXNGdW5jdGlvbiwgc3RhdGljRnVuY3Rpb24tPmF0dHJpYnV0ZXMpKTsKKyAgICAgICAg
ICAgICAgICBtX3N0YXRpY0Z1bmN0aW9ucy5hZGQoZnVuY3Rpb25OYW1lLmltcGwoKSwgbWFrZVVu
aXF1ZTxTdGF0aWNGdW5jdGlvbkVudHJ5PihzdGF0aWNGdW5jdGlvbi0+Y2FsbEFzRnVuY3Rpb24s
IHN0YXRpY0Z1bmN0aW9uLT5hdHRyaWJ1dGVzKSk7CiAgICAgICAgICAgICArK3N0YXRpY0Z1bmN0
aW9uOwogICAgICAgICB9CiAgICAgfQpAQCAtODIsMTggKzgwLDExIEBAIE9wYXF1ZUpTQ2xhc3M6
On5PcGFxdWVKU0NsYXNzKCkKICAgICAvLyBUaGUgZW1wdHkgc3RyaW5nIGlzIHNoYXJlZCBhY3Jv
c3MgdGhyZWFkcyAmIGlzIGFuIGlkZW50aWZpZXIsIGluIGFsbCBvdGhlciBjYXNlcyB3ZSBzaG91
bGQgaGF2ZSBkb25lIGEgZGVlcCBjb3B5IGluIGNsYXNzTmFtZSgpLCBiZWxvdy4gCiAgICAgQVNT
RVJUKCFtX2NsYXNzTmFtZS5sZW5ndGgoKSB8fCAhbV9jbGFzc05hbWUuaW1wbCgpLT5pc0F0b20o
KSk7CiAKLSNpZm5kZWYgTkRFQlVHCi0gICAgaWYgKG1fc3RhdGljVmFsdWVzKSB7Ci0gICAgICAg
IE9wYXF1ZUpTQ2xhc3NTdGF0aWNWYWx1ZXNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9z
dGF0aWNWYWx1ZXMtPmVuZCgpOwotICAgICAgICBmb3IgKE9wYXF1ZUpTQ2xhc3NTdGF0aWNWYWx1
ZXNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0YXRpY1ZhbHVlcy0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICAgICAgQVNTRVJUKCFpdC0+a2V5LT5pc0F0b20oKSk7Ci0g
ICAgfQotCi0gICAgaWYgKG1fc3RhdGljRnVuY3Rpb25zKSB7Ci0gICAgICAgIE9wYXF1ZUpTQ2xh
c3NTdGF0aWNGdW5jdGlvbnNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zdGF0aWNGdW5j
dGlvbnMtPmVuZCgpOwotICAgICAgICBmb3IgKE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNU
YWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0YXRpY0Z1bmN0aW9ucy0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICAgICAgQVNTRVJUKCFpdC0+a2V5LT5pc0F0b20oKSk7Ci0g
ICAgfQorI2lmIEFTU0VSVF9FTkFCTEVECisgICAgZm9yIChhdXRvJiBrZXkgOiBtX3N0YXRpY1Zh
bHVlcy5rZXlzKCkpCisgICAgICAgIEFTU0VSVCgha2V5LT5pc0F0b20oKSk7CisgICAgZm9yIChh
dXRvJiBrZXkgOiBtX3N0YXRpY0Z1bmN0aW9ucy5rZXlzKCkpCisgICAgICAgIEFTU0VSVCgha2V5
LT5pc0F0b20oKSk7CiAjZW5kaWYKICAgICAKICAgICBpZiAocHJvdG90eXBlQ2xhc3MpCkBAIC0x
MjIsMjMgKzExMywxNCBAQCBSZWY8T3BhcXVlSlNDbGFzcz4gT3BhcXVlSlNDbGFzczo6Y3JlYXRl
KGNvbnN0IEpTQ2xhc3NEZWZpbml0aW9uKiBjbGllbnREZWZpbml0aQogT3BhcXVlSlNDbGFzc0Nv
bnRleHREYXRhOjpPcGFxdWVKU0NsYXNzQ29udGV4dERhdGEoSlNDOjpWTSYsIE9wYXF1ZUpTQ2xh
c3MqIGpzQ2xhc3MpCiAgICAgOiBtX2NsYXNzKGpzQ2xhc3MpCiB7Ci0gICAgaWYgKGpzQ2xhc3Mt
Pm1fc3RhdGljVmFsdWVzKSB7Ci0gICAgICAgIHN0YXRpY1ZhbHVlcyA9IG1ha2VVbmlxdWU8T3Bh
cXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlPigpOwotICAgICAgICBPcGFxdWVKU0NsYXNzU3Rh
dGljVmFsdWVzVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGpzQ2xhc3MtPm1fc3RhdGljVmFs
dWVzLT5lbmQoKTsKLSAgICAgICAgZm9yIChPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVzVGFibGU6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0ganNDbGFzcy0+bV9zdGF0aWNWYWx1ZXMtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgQVNTRVJUKCFpdC0+a2V5LT5pc0F0b20oKSk7
Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWVOYW1lID0gaXQtPmtleS0+aXNvbGF0ZWRDb3B5KCk7
Ci0gICAgICAgICAgICBzdGF0aWNWYWx1ZXMtPmFkZCh2YWx1ZU5hbWUuaW1wbCgpLCBtYWtlVW5p
cXVlPFN0YXRpY1ZhbHVlRW50cnk+KGl0LT52YWx1ZS0+Z2V0UHJvcGVydHksIGl0LT52YWx1ZS0+
c2V0UHJvcGVydHksIGl0LT52YWx1ZS0+YXR0cmlidXRlcywgdmFsdWVOYW1lKSk7Ci0gICAgICAg
IH0KKyAgICBmb3IgKGF1dG8mIHN0YXRpY1ZhbHVlIDoganNDbGFzcy0+bV9zdGF0aWNWYWx1ZXMp
IHsKKyAgICAgICAgQVNTRVJUKCFzdGF0aWNWYWx1ZS5rZXktPmlzQXRvbSgpKTsKKyAgICAgICAg
U3RyaW5nIHZhbHVlTmFtZSA9IHN0YXRpY1ZhbHVlLmtleS0+aXNvbGF0ZWRDb3B5KCk7CisgICAg
ICAgIHN0YXRpY1ZhbHVlcy5zZXQodmFsdWVOYW1lLmltcGwoKSwgbWFrZVVuaXF1ZTxTdGF0aWNW
YWx1ZUVudHJ5PihzdGF0aWNWYWx1ZS52YWx1ZS0+Z2V0UHJvcGVydHksIHN0YXRpY1ZhbHVlLnZh
bHVlLT5zZXRQcm9wZXJ0eSwgc3RhdGljVmFsdWUudmFsdWUtPmF0dHJpYnV0ZXMsIHZhbHVlTmFt
ZSkpOwogICAgIH0KLQotICAgIGlmIChqc0NsYXNzLT5tX3N0YXRpY0Z1bmN0aW9ucykgewotICAg
ICAgICBzdGF0aWNGdW5jdGlvbnMgPSBtYWtlVW5pcXVlPE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5j
dGlvbnNUYWJsZT4oKTsKLSAgICAgICAgT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxl
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBqc0NsYXNzLT5tX3N0YXRpY0Z1bmN0aW9ucy0+ZW5kKCk7
Ci0gICAgICAgIGZvciAoT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxlOjpjb25zdF9p
dGVyYXRvciBpdCA9IGpzQ2xhc3MtPm1fc3RhdGljRnVuY3Rpb25zLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEFTU0VSVCghaXQtPmtleS0+aXNBdG9tKCkpOwotICAg
ICAgICAgICAgc3RhdGljRnVuY3Rpb25zLT5hZGQoaXQtPmtleS0+aXNvbGF0ZWRDb3B5KCksIG1h
a2VVbmlxdWU8U3RhdGljRnVuY3Rpb25FbnRyeT4oaXQtPnZhbHVlLT5jYWxsQXNGdW5jdGlvbiwg
aXQtPnZhbHVlLT5hdHRyaWJ1dGVzKSk7Ci0gICAgICAgIH0KKyAgICBmb3IgKGF1dG8mIHN0YXRp
Y0Z1bmN0aW9uIDoganNDbGFzcy0+bV9zdGF0aWNGdW5jdGlvbnMpIHsKKyAgICAgICAgQVNTRVJU
KCFzdGF0aWNGdW5jdGlvbi5rZXktPmlzQXRvbSgpKTsKKyAgICAgICAgc3RhdGljRnVuY3Rpb25z
LnNldChzdGF0aWNGdW5jdGlvbi5rZXktPmlzb2xhdGVkQ29weSgpLCBtYWtlVW5pcXVlPFN0YXRp
Y0Z1bmN0aW9uRW50cnk+KHN0YXRpY0Z1bmN0aW9uLnZhbHVlLT5jYWxsQXNGdW5jdGlvbiwgc3Rh
dGljRnVuY3Rpb24udmFsdWUtPmF0dHJpYnV0ZXMpKTsKICAgICB9CiB9CiAKQEAgLTE1OCwxMiAr
MTQwLDEyIEBAIFN0cmluZyBPcGFxdWVKU0NsYXNzOjpjbGFzc05hbWUoKQogCiBPcGFxdWVKU0Ns
YXNzU3RhdGljVmFsdWVzVGFibGUqIE9wYXF1ZUpTQ2xhc3M6OnN0YXRpY1ZhbHVlcyhKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgcmV0dXJuIGNvbnRleHREYXRhKGds
b2JhbE9iamVjdCkuc3RhdGljVmFsdWVzLmdldCgpOworICAgIHJldHVybiAmY29udGV4dERhdGEo
Z2xvYmFsT2JqZWN0KS5zdGF0aWNWYWx1ZXM7CiB9CiAKIE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5j
dGlvbnNUYWJsZSogT3BhcXVlSlNDbGFzczo6c3RhdGljRnVuY3Rpb25zKEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICByZXR1cm4gY29udGV4dERhdGEoZ2xvYmFsT2Jq
ZWN0KS5zdGF0aWNGdW5jdGlvbnMuZ2V0KCk7CisgICAgcmV0dXJuICZjb250ZXh0RGF0YShnbG9i
YWxPYmplY3QpLnN0YXRpY0Z1bmN0aW9uczsKIH0KIAogSlNPYmplY3QqIE9wYXF1ZUpTQ2xhc3M6
OnByb3RvdHlwZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ2xhc3NSZWYuaAppbmRleCBhYTliNWRmNjFjMGIzYzg5MWU4NzNlNzQ1NTcyMGI3
ODlkY2MzMDA4Li5mZWQ0YmExOTg1NDY1YzdhYjQxOTYzNWQ2NGE3MWQ4ZDU5YmY5ZTZkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuaApAQCAtODIsOCArODIsOCBAQCBwdWJs
aWM6CiAgICAgLy8gNC4gV2hlbiBpdCBpcyB1c2VkLCB0aGUgb2xkIGNvbnRleHQgZGF0YSBpcyBm
b3VuZCBpbiBWTSBhbmQgdXNlZC4KICAgICBSZWZQdHI8T3BhcXVlSlNDbGFzcz4gbV9jbGFzczsK
IAotICAgIHN0ZDo6dW5pcXVlX3B0cjxPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVzVGFibGU+IHN0
YXRpY1ZhbHVlczsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0
aW9uc1RhYmxlPiBzdGF0aWNGdW5jdGlvbnM7CisgICAgT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVl
c1RhYmxlIHN0YXRpY1ZhbHVlczsKKyAgICBPcGFxdWVKU0NsYXNzU3RhdGljRnVuY3Rpb25zVGFi
bGUgc3RhdGljRnVuY3Rpb25zOwogICAgIEpTQzo6V2VhazxKU0M6OkpTT2JqZWN0PiBjYWNoZWRQ
cm90b3R5cGU7CiB9OwogCkBAIC0xMjMsOCArMTIzLDggQEAgcHJpdmF0ZToKIAogICAgIC8vIFN0
cmluZ3MgaW4gdGhlc2UgZGF0YSBtZW1iZXJzIHNob3VsZCBub3QgYmUgcHV0IGludG8gYW55IEF0
b21TdHJpbmdUYWJsZS4KICAgICBTdHJpbmcgbV9jbGFzc05hbWU7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPE9wYXF1ZUpTQ2xhc3NTdGF0aWNWYWx1ZXNUYWJsZT4gbV9zdGF0aWNWYWx1ZXM7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZT4gbV9zdGF0
aWNGdW5jdGlvbnM7CisgICAgT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlIG1fc3RhdGlj
VmFsdWVzOworICAgIE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZSBtX3N0YXRpY0Z1
bmN0aW9uczsKIH07CiAKICNlbmRpZiAvLyBKU0NsYXNzUmVmX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwLmNwcAppbmRleCAxNTMzNzFlZjc5MjI5MmNmY2U1
MzMzOTgzZTU5N2FmZGM1YzhmZGU5Li5jMmRlYWU0M2NiMjQ0YmM3NTA3YTg3Y2I3N2VkZTFjNTkx
N2M4NTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0
SGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAu
Y3BwCkBAIC0xNTQsMTAgKzE1NCw3IEBAIGNvbnN0IEFic3RyYWN0SGVhcCYgSW5kZXhlZEFic3Ry
YWN0SGVhcDo6YXRTbG93KHB0cmRpZmZfdCBpbmRleCkKIHsKICAgICBBU1NFUlQoc3RhdGljX2Nh
c3Q8c2l6ZV90PihpbmRleCkgPj0gbV9zbWFsbEluZGljZXMuc2l6ZSgpKTsKICAgICAKLSAgICBp
ZiAoVU5MSUtFTFkoIW1fbGFyZ2VJbmRpY2VzKSkKLSAgICAgICAgbV9sYXJnZUluZGljZXMgPSBt
YWtlVW5pcXVlPE1hcFR5cGU+KCk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QWJzdHJhY3RIZWFw
PiYgZmllbGQgPSBtX2xhcmdlSW5kaWNlcy0+YWRkKGluZGV4LCBudWxscHRyKS5pdGVyYXRvci0+
dmFsdWU7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFic3RyYWN0SGVhcD4mIGZpZWxkID0gbV9sYXJn
ZUluZGljZXMuYWRkKGluZGV4LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFm
aWVsZCkgewogICAgICAgICBmaWVsZCA9IG1ha2VVbmlxdWU8QWJzdHJhY3RIZWFwPigpOwogICAg
ICAgICBpbml0aWFsaXplKCpmaWVsZCwgaW5kZXgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQWJzdHJhY3RIZWFwLmgKaW5kZXggNjU4ZTJjZmM1ZWNlODIzNDk3NmI2MzRkZThlMzdm
MjBkNmYwZmM4OS4uODc3ZWRmMjZhOGJkZDU3YTJkMDk0OTM3YmIxNzEzZmVhMmExYmQ0MiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcC5oCkBAIC0xNjAsNyAr
MTYwLDcgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIHR5cGVkZWYgSGFzaE1hcDxwdHJkaWZmX3Qs
IHN0ZDo6dW5pcXVlX3B0cjxBYnN0cmFjdEhlYXA+LCBXVEY6OkludEhhc2g8cHRyZGlmZl90Piwg
V2l0aG91dFplcm9Pck9uZUhhc2hUcmFpdHM+IE1hcFR5cGU7CiAgICAgCi0gICAgc3RkOjp1bmlx
dWVfcHRyPE1hcFR5cGU+IG1fbGFyZ2VJbmRpY2VzOworICAgIE1hcFR5cGUgbV9sYXJnZUluZGlj
ZXM7CiAgICAgVmVjdG9yPENTdHJpbmcsIDE2PiBtX2xhcmdlSW5kZXhOYW1lczsKIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKaW5kZXggODYxYTQwMmU1MGQwYmNjMGZlYWU2MDMw
NDdjZjM1YzJlY2RjNGRlNy4uY2UxNmE2Y2U5Y2JkOWVjMmIxMjI4ZDAxY2I0NDQ1NzNmNGViNjBi
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKQEAgLTg4MCwyNSArODgwLDI1IEBA
IHNpemVfdCBIZWFwOjpwcm90ZWN0ZWRPYmplY3RDb3VudCgpCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotc3RkOjp1bmlxdWVfcHRyPFR5cGVDb3VudFNldD4gSGVhcDo6cHJvdGVjdGVkT2JqZWN0
VHlwZUNvdW50cygpCitUeXBlQ291bnRTZXQgSGVhcDo6cHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50
cygpCiB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVDb3VudFNldD4gcmVzdWx0ID0gbWFrZVVu
aXF1ZTxUeXBlQ291bnRTZXQ+KCk7CisgICAgVHlwZUNvdW50U2V0IHJlc3VsdDsKICAgICBmb3JF
YWNoUHJvdGVjdGVkQ2VsbCgKICAgICAgICAgWyZdIChKU0NlbGwqIGNlbGwpIHsKLSAgICAgICAg
ICAgIHJlY29yZFR5cGUodm0oKSwgKnJlc3VsdCwgY2VsbCk7CisgICAgICAgICAgICByZWNvcmRU
eXBlKHZtKCksIHJlc3VsdCwgY2VsbCk7CiAgICAgICAgIH0pOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxUeXBlQ291bnRTZXQ+IEhlYXA6Om9iamVjdFR5cGVDb3Vu
dHMoKQorVHlwZUNvdW50U2V0IEhlYXA6Om9iamVjdFR5cGVDb3VudHMoKQogewotICAgIHN0ZDo6
dW5pcXVlX3B0cjxUeXBlQ291bnRTZXQ+IHJlc3VsdCA9IG1ha2VVbmlxdWU8VHlwZUNvdW50U2V0
PigpOworICAgIFR5cGVDb3VudFNldCByZXN1bHQ7CiAgICAgSGVhcEl0ZXJhdGlvblNjb3BlIGl0
ZXJhdGlvblNjb3BlKCp0aGlzKTsKICAgICBtX29iamVjdFNwYWNlLmZvckVhY2hMaXZlQ2VsbCgK
ICAgICAgICAgaXRlcmF0aW9uU2NvcGUsCiAgICAgICAgIFsmXSAoSGVhcENlbGwqIGNlbGwsIEhl
YXBDZWxsOjpLaW5kIGtpbmQpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CiAgICAgICAgICAgICBpZiAo
aXNKU0NlbGxLaW5kKGtpbmQpKQotICAgICAgICAgICAgICAgIHJlY29yZFR5cGUodm0oKSwgKnJl
c3VsdCwgc3RhdGljX2Nhc3Q8SlNDZWxsKj4oY2VsbCkpOworICAgICAgICAgICAgICAgIHJlY29y
ZFR5cGUodm0oKSwgcmVzdWx0LCBzdGF0aWNfY2FzdDxKU0NlbGwqPihjZWxsKSk7CiAgICAgICAg
ICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKICAgICAgICAgfSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKQEAgLTI4MTEsOSArMjgxMSw5IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNv
bnN0cmFpbnRzKCkKICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJl
ZChwYWlyLmtleSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChtX21hcmtMaXN0U2V0ICYmIG1fbWFya0xpc3RTZXQtPnNpemUoKSkgeworICAgICAgICAgICAg
aWYgKCFtX21hcmtMaXN0U2V0LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIFNldFJvb3RN
YXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3IsIFJvb3RNYXJrUmVhc29uOjpDb25zZXJ2
YXRpdmVTY2FuKTsKLSAgICAgICAgICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xp
c3RzKHZpc2l0b3IsICptX21hcmtMaXN0U2V0KTsKKyAgICAgICAgICAgICAgICBNYXJrZWRBcmd1
bWVudEJ1ZmZlcjo6bWFya0xpc3RzKHZpc2l0b3IsIG1fbWFya0xpc3RTZXQpOwogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKaW5kZXggNjhk
OTA3NGZkZjNkOGVhOGY0ODdiMDY0ODdiODBkN2EyYjFiODAzMS4uNTUzN2RkNTUyMzhlMGQ3OGEw
MzQ0YjU0YTQzMGFiYjdiNjFlZGUyMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaApAQCAt
MjQzLDEwICsyNDMsMTAgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBn
bG9iYWxPYmplY3RDb3VudCgpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBwcm90ZWN0
ZWRPYmplY3RDb3VudCgpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBwcm90ZWN0ZWRH
bG9iYWxPYmplY3RDb3VudCgpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0ZDo6dW5pcXVlX3B0
cjxUeXBlQ291bnRTZXQ+IHByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoKTsKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGQ6OnVuaXF1ZV9wdHI8VHlwZUNvdW50U2V0PiBvYmplY3RUeXBlQ291bnRz
KCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgVHlwZUNvdW50U2V0IHByb3RlY3RlZE9iamVjdFR5
cGVDb3VudHMoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBUeXBlQ291bnRTZXQgb2JqZWN0VHlw
ZUNvdW50cygpOwogCi0gICAgSGFzaFNldDxNYXJrZWRBcmd1bWVudEJ1ZmZlcio+JiBtYXJrTGlz
dFNldCgpOworICAgIEhhc2hTZXQ8TWFya2VkQXJndW1lbnRCdWZmZXIqPiYgbWFya0xpc3RTZXQo
KSB7IHJldHVybiBtX21hcmtMaXN0U2V0OyB9CiAgICAgdm9pZCBhZGRNYXJrZWRKU1ZhbHVlUmVm
QXJyYXkoTWFya2VkSlNWYWx1ZVJlZkFycmF5Kik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoUHJvdGVjdGVkQ2VsbChjb25zdCBGdW5jdG9yJik7CkBA
IC02MzIsNyArNjMyLDcgQEAgcHJpdmF0ZToKICAgICBIYXNoU2V0PGNvbnN0IEpTQ2VsbCo+IG1f
Y29weWluZ1JlbWVtYmVyZWRTZXQ7CiAKICAgICBQcm90ZWN0Q291bnRTZXQgbV9wcm90ZWN0ZWRW
YWx1ZXM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEhhc2hTZXQ8TWFya2VkQXJndW1lbnRCdWZmZXIq
Pj4gbV9tYXJrTGlzdFNldDsKKyAgICBIYXNoU2V0PE1hcmtlZEFyZ3VtZW50QnVmZmVyKj4gbV9t
YXJrTGlzdFNldDsKICAgICBTZW50aW5lbExpbmtlZExpc3Q8TWFya2VkSlNWYWx1ZVJlZkFycmF5
LCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxNYXJrZWRKU1ZhbHVlUmVmQXJyYXk+PiBtX21hcmtlZEpT
VmFsdWVSZWZBcnJheXM7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFjaGluZVRocmVhZHM+IG1f
bWFjaGluZVRocmVhZHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaApp
bmRleCA0ZDNhOThiMjZhODcwODA3MDgyNzg4YTlhOWQyMTlkYjAyNTZlODNiLi4xMmYxYzU2OWUx
MzJhMDBlNGFmOGM1Yjc1MjA0ZWQxNjBjMTc5YmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXBJbmxpbmVzLmgKQEAgLTIxNiwxMyArMjE2LDYgQEAgaW5saW5lIHZvaWQgSGVhcDo6
ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQogICAgIH0KIH0KIAotaW5saW5l
IEhhc2hTZXQ8TWFya2VkQXJndW1lbnRCdWZmZXIqPiYgSGVhcDo6bWFya0xpc3RTZXQoKQotewot
ICAgIGlmICghbV9tYXJrTGlzdFNldCkKLSAgICAgICAgbV9tYXJrTGlzdFNldCA9IG1ha2VVbmlx
dWU8SGFzaFNldDxNYXJrZWRBcmd1bWVudEJ1ZmZlcio+PigpOwotICAgIHJldHVybiAqbV9tYXJr
TGlzdFNldDsKLX0KLQogaW5saW5lIHZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0
ZWQoc2l6ZV90IHNpemUpCiB7CiAgICAgaWYgKHNpemUgPiBtaW5FeHRyYU1lbW9yeSkgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVXRpbC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcFV0aWwuaAppbmRleCBkNmFhYzNlNDBiOTBmYTY3ZmMwNjUz
MmNlZWIwZmJkNmI2M2EwOGZiLi5lMDNmODgzY2FkZjkzMTQ4MGMxMWQyNDljMzBmOWQwY2VjYmM5
NGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVXRpbC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBVdGlsLmgKQEAgLTE0MCw4ICsxNDAs
NiBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChwb2ludGVyLT5pc1ByZWNpc2VBbGxvY2F0aW9uKCkp
IHsKICAgICAgICAgICAgIGF1dG8qIHNldCA9IGhlYXAub2JqZWN0U3BhY2UoKS5wcmVjaXNlQWxs
b2NhdGlvblNldCgpOwogICAgICAgICAgICAgQVNTRVJUKHNldCk7Ci0gICAgICAgICAgICBpZiAo
c2V0LT5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgcmV0dXJuIHNldC0+Y29udGFpbnMocG9pbnRlcik7CiAgICAgICAgIH0KICAgICAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAppbmRleCBjODIzZDllOTRkYjZm
MjUwMjdlMmYyYjZiY2RkMzgxMzUxM2Y3ZjAzLi43ZWM2MWMwNzc4YzY0M2EwNTI2ZDQ5NTdiN2I5
N2I4OGU3NDI1MjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRTcGFjZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2Uu
Y3BwCkBAIC0yNjgsNyArMjY4LDcgQEAgdm9pZCBNYXJrZWRTcGFjZTo6cHJlcGFyZUZvckFsbG9j
YXRpb24oKQogCiB2b2lkIE1hcmtlZFNwYWNlOjplbmFibGVQcmVjaXNlQWxsb2NhdGlvblRyYWNr
aW5nKCkKIHsKLSAgICBtX3ByZWNpc2VBbGxvY2F0aW9uU2V0ID0gbWFrZVVuaXF1ZTxIYXNoU2V0
PEhlYXBDZWxsKj4+KCk7CisgICAgbV9wcmVjaXNlQWxsb2NhdGlvblNldCA9IEhhc2hTZXQ8SGVh
cENlbGwqPiB7IH07CiAgICAgZm9yIChhdXRvKiBhbGxvY2F0aW9uIDogbV9wcmVjaXNlQWxsb2Nh
dGlvbnMpCiAgICAgICAgIG1fcHJlY2lzZUFsbG9jYXRpb25TZXQtPmFkZChhbGxvY2F0aW9uLT5j
ZWxsKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
U3BhY2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKaW5kZXgg
MjY4Yjk3MGE1OThiNDI1YjlmY2UzNjdkYjJlYmFlYTcxZWJjYzMxYi4uMTEyNDA1YzFmMGQ4ZGMw
ZjI2NTEwM2IyMGI3NmUxNGRjMGU5MzYxOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkU3BhY2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRTcGFjZS5oCkBAIC0xNTYsNyArMTU2LDcgQEAgcHVibGljOgogICAgIGNvbnN0IFZlY3Rv
cjxQcmVjaXNlQWxsb2NhdGlvbio+JiBwcmVjaXNlQWxsb2NhdGlvbnMoKSBjb25zdCB7IHJldHVy
biBtX3ByZWNpc2VBbGxvY2F0aW9uczsgfQogICAgIHVuc2lnbmVkIHByZWNpc2VBbGxvY2F0aW9u
c051cnNlcnlPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3ByZWNpc2VBbGxvY2F0aW9uc051cnNl
cnlPZmZzZXQ7IH0KICAgICB1bnNpZ25lZCBwcmVjaXNlQWxsb2NhdGlvbnNPZmZzZXRGb3JUaGlz
Q29sbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcHJlY2lzZUFsbG9jYXRpb25zT2Zmc2V0Rm9y
VGhpc0NvbGxlY3Rpb247IH0KLSAgICBIYXNoU2V0PEhlYXBDZWxsKj4qIHByZWNpc2VBbGxvY2F0
aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9wcmVjaXNlQWxsb2NhdGlvblNldC5nZXQoKTsgfQor
ICAgIEhhc2hTZXQ8SGVhcENlbGwqPiogcHJlY2lzZUFsbG9jYXRpb25TZXQoKSB7IHJldHVybiBt
X3ByZWNpc2VBbGxvY2F0aW9uU2V0ID8gJiptX3ByZWNpc2VBbGxvY2F0aW9uU2V0IDogbnVsbHB0
cjsgfQogCiAgICAgdm9pZCBlbmFibGVQcmVjaXNlQWxsb2NhdGlvblRyYWNraW5nKCk7CiAgICAg
CkBAIC0yMDAsNyArMjAwLDcgQEAgcHJpdmF0ZToKIAogICAgIFZlY3RvcjxTdWJzcGFjZSo+IG1f
c3Vic3BhY2VzOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEhhc2hTZXQ8SGVhcENlbGwqPj4gbV9w
cmVjaXNlQWxsb2NhdGlvblNldDsKKyAgICBPcHRpb25hbDxIYXNoU2V0PEhlYXBDZWxsKj4+IG1f
cHJlY2lzZUFsbG9jYXRpb25TZXQ7CiAgICAgVmVjdG9yPFByZWNpc2VBbGxvY2F0aW9uKj4gbV9w
cmVjaXNlQWxsb2NhdGlvbnM7CiAgICAgdW5zaWduZWQgbV9wcmVjaXNlQWxsb2NhdGlvbnNOdXJz
ZXJ5T2Zmc2V0IHsgMCB9OwogICAgIHVuc2lnbmVkIG1fcHJlY2lzZUFsbG9jYXRpb25zT2Zmc2V0
Rm9yVGhpc0NvbGxlY3Rpb24geyAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FdmFsRXhlY3V0YWJsZS5jcHAKaW5kZXggMWIyZjRmNTJhYjdiZmNlMzQwYjNjMzk1Mjll
MTgwNTcyY2QxNjQ0My4uOTU3NjFjMTMyNzhhMDRlMGEyZGY5YTM0M2FiMjhkOTY5MjE0ZGNiNyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmNw
cApAQCAtNDUsMTEgKzQ1LDYgQEAgdm9pZCBFdmFsRXhlY3V0YWJsZTo6ZGVzdHJveShKU0NlbGwq
IGNlbGwpCiAgICAgc3RhdGljX2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihjZWxsKS0+RXZhbEV4ZWN1
dGFibGU6On5FdmFsRXhlY3V0YWJsZSgpOwogfQogCi1hdXRvIEV2YWxFeGVjdXRhYmxlOjplbnN1
cmVUZW1wbGF0ZU9iamVjdE1hcChWTSYpIC0+IFRlbXBsYXRlT2JqZWN0TWFwJgotewotICAgIHJl
dHVybiBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcEltcGwobV90ZW1wbGF0ZU9iamVjdE1hcCk7Ci19
Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CiB2b2lkIEV2YWxFeGVjdXRhYmxlOjp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CkBAIC01OCwx
MCArNTMsMTAgQEAgdm9pZCBFdmFsRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV91bmxpbmtl
ZEV2YWxDb2RlQmxvY2spOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZXZhbENv
ZGVCbG9jayk7Ci0gICAgaWYgKFRlbXBsYXRlT2JqZWN0TWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5t
X3RlbXBsYXRlT2JqZWN0TWFwLmdldCgpKSB7CisgICAgaWYgKCF0aGlzT2JqZWN0LT5tX3RlbXBs
YXRlT2JqZWN0TWFwLmlzRW1wdHkoKSkgewogICAgICAgICBMb2NrZXIgbG9ja2VyIHsgdGhpc09i
amVjdC0+Y2VsbExvY2soKSB9OwotICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogKm1hcCkKLSAg
ICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKGVudHJ5LnZhbHVlKTsKKyAgICAgICAgZm9yIChhdXRv
JiB2YWx1ZSA6IHRoaXNPYmplY3QtPm1fdGVtcGxhdGVPYmplY3RNYXAudmFsdWVzKCkpCisgICAg
ICAgICAgICB2aXNpdG9yLmFwcGVuZCh2YWx1ZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaAppbmRleCAwNjk1ODZmMjE0ZTQz
MzYzZDI0NzJiNDMzMzA1YTRhMWQ4YjBkNWU1Li4zZjNhYWUwYzU2YWU2NGNkODMzODczZGY0OTg4
MDAxYTlmYzE0MTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
dmFsRXhlY3V0YWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxF
eGVjdXRhYmxlLmgKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgogICAgIGJvb2wgYWxsb3dEaXJl
Y3RFdmFsQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkRXZhbENvZGVCbG9jay0+YWxs
b3dEaXJlY3RFdmFsQ2FjaGUoKTsgfQogICAgIE5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyIG5l
ZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8TmVl
ZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXI+KG1fbmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIpOyB9
CiAgICAgUHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQgcHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxQcml2YXRlQnJhbmRSZXF1aXJlbWVudD4obV9wcml2
YXRlQnJhbmRSZXF1aXJlbWVudCk7IH0KLSAgICBUZW1wbGF0ZU9iamVjdE1hcCYgZW5zdXJlVGVt
cGxhdGVPYmplY3RNYXAoVk0mKTsKKyAgICBUZW1wbGF0ZU9iamVjdE1hcCYgdGVtcGxhdGVPYmpl
Y3RNYXAoKSB7IHJldHVybiBtX3RlbXBsYXRlT2JqZWN0TWFwOyB9CiAKIHByb3RlY3RlZDoKICAg
ICBmcmllbmQgY2xhc3MgRXhlY3V0YWJsZUJhc2U7CkBAIC04NCw3ICs4NCw3IEBAIHByb3RlY3Rl
ZDoKIAogICAgIFdyaXRlQmFycmllcjxFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlPiBtX2V2YWxD
b2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkRXZhbENvZGVCbG9jaz4gbV91bmxp
bmtlZEV2YWxDb2RlQmxvY2s7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFRlbXBsYXRlT2JqZWN0TWFw
PiBtX3RlbXBsYXRlT2JqZWN0TWFwOworICAgIFRlbXBsYXRlT2JqZWN0TWFwIG1fdGVtcGxhdGVP
YmplY3RNYXA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCmluZGV4IDE4NmZiMjRm
YWJhMGM0NmNlYmUwMjdlYTU2YzA3MmE3NWM5Y2FjYjguLmQyNTY3MWU0YWM5MWU1OTNjNWM3NDU2
N2JhMGFmM2Y2NTcyNWI5NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcApAQCAtNzksMTAgKzc5LDEwIEBAIHZvaWQgRnVu
Y3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3Im
IHZpc2l0b3IpCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV91bmxpbmtlZEV4ZWN1
dGFibGUpOwogICAgIGlmIChSYXJlRGF0YSogcmFyZURhdGEgPSB0aGlzT2JqZWN0LT5tX3JhcmVE
YXRhLmdldCgpKSB7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHJhcmVEYXRhLT5tX2NhY2hlZFBv
bHlQcm90b1N0cnVjdHVyZSk7Ci0gICAgICAgIGlmIChUZW1wbGF0ZU9iamVjdE1hcCogbWFwID0g
cmFyZURhdGEtPm1fdGVtcGxhdGVPYmplY3RNYXAuZ2V0KCkpIHsKKyAgICAgICAgaWYgKCFyYXJl
RGF0YS0+bV90ZW1wbGF0ZU9iamVjdE1hcC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIExvY2tl
ciBsb2NrZXIgeyB0aGlzT2JqZWN0LT5jZWxsTG9jaygpIH07Ci0gICAgICAgICAgICBmb3IgKGF1
dG8mIGVudHJ5IDogKm1hcCkKLSAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZChlbnRyeS52
YWx1ZSk7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHZhbHVlIDogcmFyZURhdGEtPm1fdGVtcGxh
dGVPYmplY3RNYXAudmFsdWVzKCkpCisgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQodmFs
dWUpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTI3LDEwICsxMjcsOSBAQCB2b2lkIEZ1bmN0
aW9uRXhlY3V0YWJsZTo6b3ZlcnJpZGVJbmZvKGNvbnN0IEZ1bmN0aW9uT3ZlcnJpZGVJbmZvJiBv
dmVycmlkZUluZm8pCiAgICAgcmFyZURhdGEubV90eXBlUHJvZmlsaW5nRW5kT2Zmc2V0ID0gb3Zl
cnJpZGVJbmZvLnR5cGVQcm9maWxpbmdFbmRPZmZzZXQ7CiB9CiAKLWF1dG8gRnVuY3Rpb25FeGVj
dXRhYmxlOjplbnN1cmVUZW1wbGF0ZU9iamVjdE1hcChWTSYpIC0+IFRlbXBsYXRlT2JqZWN0TWFw
JgorYXV0byBGdW5jdGlvbkV4ZWN1dGFibGU6OnRlbXBsYXRlT2JqZWN0TWFwKCkgLT4gVGVtcGxh
dGVPYmplY3RNYXAmCiB7Ci0gICAgUmFyZURhdGEmIHJhcmVEYXRhID0gZW5zdXJlUmFyZURhdGEo
KTsKLSAgICByZXR1cm4gZW5zdXJlVGVtcGxhdGVPYmplY3RNYXBJbXBsKHJhcmVEYXRhLm1fdGVt
cGxhdGVPYmplY3RNYXApOworICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLm1fdGVtcGxhdGVP
YmplY3RNYXA7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAppbmRleCBiYWRjYjc4NTBmYjZm
OTM2NTU2Y2U0OWMyNjE2MDJjNTk1OWQ0ZmRhLi5mMjY0NWExNDVjMTc4ZTc0MjhkODBkZmUzZTQx
NDhkNWYxZGEzMjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9G
dW5jdGlvbkV4ZWN1dGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9G
dW5jdGlvbkV4ZWN1dGFibGUuaApAQCAtMjgxLDcgKzI4MSw3IEBAIHB1YmxpYzoKIAogICAgIFNj
cmlwdEV4ZWN1dGFibGUqIHRvcExldmVsRXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdG9w
TGV2ZWxFeGVjdXRhYmxlLmdldCgpOyB9CiAKLSAgICBUZW1wbGF0ZU9iamVjdE1hcCYgZW5zdXJl
VGVtcGxhdGVPYmplY3RNYXAoVk0mKTsKKyAgICBUZW1wbGF0ZU9iamVjdE1hcCYgdGVtcGxhdGVP
YmplY3RNYXAoKTsKIAogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKIApA
QCAtMzAyLDcgKzMwMiw3IEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVy
c1N0YXJ0T2Zmc2V0IHsgMCB9OwogICAgICAgICB1bnNpZ25lZCBtX3R5cGVQcm9maWxpbmdTdGFy
dE9mZnNldCB7IFVJTlRfTUFYIH07CiAgICAgICAgIHVuc2lnbmVkIG1fdHlwZVByb2ZpbGluZ0Vu
ZE9mZnNldCB7IFVJTlRfTUFYIH07Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxUZW1wbGF0ZU9i
amVjdE1hcD4gbV90ZW1wbGF0ZU9iamVjdE1hcDsKKyAgICAgICAgVGVtcGxhdGVPYmplY3RNYXAg
bV90ZW1wbGF0ZU9iamVjdE1hcDsKICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9j
YWNoZWRQb2x5UHJvdG9TdHJ1Y3R1cmU7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCmluZGV4
IGRlZjA3M2MwNTBiMGRlYzgwMzUzMjAzNTRlZTJjYzA2YzZmNGM0NzguLjZkZjBjMWFlY2RkZjcy
MzlmNzRhNDVhYmE0YjQzYzNjZjBkMTcwMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAKQEAgLTc0LDEx
ICs3NCw2IEBAIHZvaWQgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OmRlc3Ryb3koSlNDZWxsKiBj
ZWxsKQogICAgIHN0YXRpY19jYXN0PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4oY2VsbCktPk1v
ZHVsZVByb2dyYW1FeGVjdXRhYmxlOjp+TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUoKTsKIH0KIAot
YXV0byBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6ZW5zdXJlVGVtcGxhdGVPYmplY3RNYXAoVk0m
KSAtPiBUZW1wbGF0ZU9iamVjdE1hcCYKLXsKLSAgICByZXR1cm4gZW5zdXJlVGVtcGxhdGVPYmpl
Y3RNYXBJbXBsKG1fdGVtcGxhdGVPYmplY3RNYXApOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgogdm9pZCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwo
SlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewpAQCAtODgsMTAgKzgzLDEwIEBAIHZv
aWQgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2Vs
bCwgVmlzaXRvciYgdmlzaXRvcikKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Vu
bGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlKTsKICAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX21vZHVsZVByb2dyYW1Db2RlQmxvY2spOwotICAgIGlmIChUZW1wbGF0
ZU9iamVjdE1hcCogbWFwID0gdGhpc09iamVjdC0+bV90ZW1wbGF0ZU9iamVjdE1hcC5nZXQoKSkg
eworICAgIGlmICghdGhpc09iamVjdC0+bV90ZW1wbGF0ZU9iamVjdE1hcC5pc0VtcHR5KCkpIHsK
ICAgICAgICAgTG9ja2VyIGxvY2tlciB7IHRoaXNPYmplY3QtPmNlbGxMb2NrKCkgfTsKLSAgICAg
ICAgZm9yIChhdXRvJiBlbnRyeSA6ICptYXApCi0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZChl
bnRyeS52YWx1ZSk7CisgICAgICAgIGZvciAoYXV0byYgdmFsdWUgOiB0aGlzT2JqZWN0LT5tX3Rl
bXBsYXRlT2JqZWN0TWFwLnZhbHVlcygpKQorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQodmFs
dWUpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgKaW5kZXggOTYzNDc5MDQ0MDZmZWYyZDljM2Rm
NWU3MDA1YThiNDFjODcxOTNjNy4uZTI5ZTg5YWMwNDQ1NzAzMjAyZjlkMTRmM2UzN2U2YTQ0NGM4
NzA0MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1
bGVQcm9ncmFtRXhlY3V0YWJsZS5oCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKIAogICAgIFN5
bWJvbFRhYmxlKiBtb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlKCkgeyByZXR1cm4gbV9tb2R1
bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlLmdldCgpOyB9CiAKLSAgICBUZW1wbGF0ZU9iamVjdE1h
cCYgZW5zdXJlVGVtcGxhdGVPYmplY3RNYXAoVk0mKTsKKyAgICBUZW1wbGF0ZU9iamVjdE1hcCYg
dGVtcGxhdGVPYmplY3RNYXAoKSB7IHJldHVybiBtX3RlbXBsYXRlT2JqZWN0TWFwOyB9CiAKIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwpAQCAtODEsNyArODEsNyBA
QCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2s+IG1fdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOwogICAgIFdyaXRlQmFycmllcjxT
eW1ib2xUYWJsZT4gbV9tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlOwogICAgIFdyaXRlQmFy
cmllcjxFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlPiBtX21vZHVsZVByb2dyYW1Db2RlQmxvY2s7
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFRlbXBsYXRlT2JqZWN0TWFwPiBtX3RlbXBsYXRlT2JqZWN0
TWFwOworICAgIFRlbXBsYXRlT2JqZWN0TWFwIG1fdGVtcGxhdGVPYmplY3RNYXA7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb2dyYW1FeGVjdXRhYmxlLmNwcAppbmRleCBlYWJmYTg1YWNhMzdlZjBhYTdjN2RmODk1ZWFl
NDE3MzlkMTU0OTBlLi42ZDdmNmU1Y2FkZGY4MWM5ZDMyMmE4NWQ0ZjcyMTVkZTQ4ZTQzN2FmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJs
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFi
bGUuY3BwCkBAIC0yMDUsMTEgKzIwNSw2IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6
aW5pdGlhbGl6ZUdsb2JhbFByb3BlcnRpZXMoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCoKICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAotYXV0byBQcm9ncmFtRXhlY3V0YWJsZTo6ZW5zdXJlVGVtcGxh
dGVPYmplY3RNYXAoVk0mKSAtPiBUZW1wbGF0ZU9iamVjdE1hcCYKLXsKLSAgICByZXR1cm4gZW5z
dXJlVGVtcGxhdGVPYmplY3RNYXBJbXBsKG1fdGVtcGxhdGVPYmplY3RNYXApOwotfQotCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgogdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewpAQCAtMjE4LDEwICsy
MTMsMTAgQEAgdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV91bmxpbmtl
ZFByb2dyYW1Db2RlQmxvY2spOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJv
Z3JhbUNvZGVCbG9jayk7Ci0gICAgaWYgKFRlbXBsYXRlT2JqZWN0TWFwKiBtYXAgPSB0aGlzT2Jq
ZWN0LT5tX3RlbXBsYXRlT2JqZWN0TWFwLmdldCgpKSB7CisgICAgaWYgKCF0aGlzT2JqZWN0LT5t
X3RlbXBsYXRlT2JqZWN0TWFwLmlzRW1wdHkoKSkgewogICAgICAgICBMb2NrZXIgbG9ja2VyIHsg
dGhpc09iamVjdC0+Y2VsbExvY2soKSB9OwotICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogKm1h
cCkKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKGVudHJ5LnZhbHVlKTsKKyAgICAgICAgZm9y
IChhdXRvJiB2YWx1ZSA6IHRoaXNPYmplY3QtPm1fdGVtcGxhdGVPYmplY3RNYXAudmFsdWVzKCkp
CisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCh2YWx1ZSk7CiAgICAgfQogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuaAppbmRleCA3
ZjVhMTEzM2IzZjMxNTViYjY1OWZkZDQ4Y2M3YzM1MjVlNWRjM2JkLi5iNDYzNWIyZWE0Y2Q3YTA5
MjZjYjcwMDZkZDEyM2Q5NzE5MmQ0ZGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgKQEAgLTcxLDcgKzcxLDcgQEAgcHVibGljOgog
ICAgICAgICAKICAgICBERUNMQVJFX0lORk87CiAKLSAgICBUZW1wbGF0ZU9iamVjdE1hcCYgZW5z
dXJlVGVtcGxhdGVPYmplY3RNYXAoVk0mKTsKKyAgICBUZW1wbGF0ZU9iamVjdE1hcCYgdGVtcGxh
dGVPYmplY3RNYXAoKSB7IHJldHVybiBtX3RlbXBsYXRlT2JqZWN0TWFwOyB9CiAKIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwpAQCAtODMsNyArODMsNyBAQCBwcml2
YXRlOgogCiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4gbV91bmxp
bmtlZFByb2dyYW1Db2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPEV4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2U+IG1fcHJvZ3JhbUNvZGVCbG9jazsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VGVtcGxh
dGVPYmplY3RNYXA+IG1fdGVtcGxhdGVPYmplY3RNYXA7CisgICAgVGVtcGxhdGVPYmplY3RNYXAg
bV90ZW1wbGF0ZU9iamVjdE1hcDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAppbmRleCAy
NzA2NTVlOWMzMTA5ZTEyZGM1M2YzODJiYzM0YzI0ODhiYTIzY2IxLi5lZjE4M2RhMmQwNjMwZTlk
ZTA1Mjg2YTYxMTQ5OTMwNWU1OGU5N2YzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcApAQCAtNDUyLDcgKzQ1Miw3IEBAIEpTQXJy
YXkqIFNjcmlwdEV4ZWN1dGFibGU6OmNyZWF0ZVRlbXBsYXRlT2JqZWN0KEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIFRlbXBsYXRlT2Jq
ZWN0TWFwJiB0ZW1wbGF0ZU9iamVjdE1hcCA9IGVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwKHZtKTsK
KyAgICBUZW1wbGF0ZU9iamVjdE1hcCYgdGVtcGxhdGVPYmplY3RNYXAgPSB0aGlzLT50ZW1wbGF0
ZU9iamVjdE1hcCgpOwogICAgIFRlbXBsYXRlT2JqZWN0TWFwOjpBZGRSZXN1bHQgcmVzdWx0Owog
ICAgIHsKICAgICAgICAgTG9ja2VyIGxvY2tlciB7IGNlbGxMb2NrKCkgfTsKQEAgLTQ2NiwyOSAr
NDY2LDE5IEBAIEpTQXJyYXkqIFNjcmlwdEV4ZWN1dGFibGU6OmNyZWF0ZVRlbXBsYXRlT2JqZWN0
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTCiAgICAgcmV0dXJuIHRlbXBsYXRlT2Jq
ZWN0OwogfQogCi1hdXRvIFNjcmlwdEV4ZWN1dGFibGU6OmVuc3VyZVRlbXBsYXRlT2JqZWN0TWFw
SW1wbChzdGQ6OnVuaXF1ZV9wdHI8VGVtcGxhdGVPYmplY3RNYXA+JiBkZXN0KSAtPiBUZW1wbGF0
ZU9iamVjdE1hcCYKLXsKLSAgICBpZiAoZGVzdCkKLSAgICAgICAgcmV0dXJuICpkZXN0OwotICAg
IGF1dG8gcmVzdWx0ID0gbWFrZVVuaXF1ZTxUZW1wbGF0ZU9iamVjdE1hcD4oKTsKLSAgICBXVEY6
OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgIGRlc3QgPSBXVEZNb3ZlKHJlc3VsdCk7Ci0gICAgcmV0
dXJuICpkZXN0OwotfQotCi1hdXRvIFNjcmlwdEV4ZWN1dGFibGU6OmVuc3VyZVRlbXBsYXRlT2Jq
ZWN0TWFwKFZNJiB2bSkgLT4gVGVtcGxhdGVPYmplY3RNYXAmCithdXRvIFNjcmlwdEV4ZWN1dGFi
bGU6OnRlbXBsYXRlT2JqZWN0TWFwKCkgLT4gVGVtcGxhdGVPYmplY3RNYXAmCiB7CiAgICAgc3dp
dGNoICh0eXBlKCkpIHsKICAgICBjYXNlIEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGU6Ci0gICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0aGlzKS0+ZW5zdXJlVGVt
cGxhdGVPYmplY3RNYXAodm0pOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnVuY3Rpb25F
eGVjdXRhYmxlKj4odGhpcyktPnRlbXBsYXRlT2JqZWN0TWFwKCk7CiAgICAgY2FzZSBFdmFsRXhl
Y3V0YWJsZVR5cGU6Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxFdmFsRXhlY3V0YWJsZSo+
KHRoaXMpLT5lbnN1cmVUZW1wbGF0ZU9iamVjdE1hcCh2bSk7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxFdmFsRXhlY3V0YWJsZSo+KHRoaXMpLT50ZW1wbGF0ZU9iamVjdE1hcCgpOwogICAg
IGNhc2UgUHJvZ3JhbUV4ZWN1dGFibGVUeXBlOgotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
UHJvZ3JhbUV4ZWN1dGFibGUqPih0aGlzKS0+ZW5zdXJlVGVtcGxhdGVPYmplY3RNYXAodm0pOwor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPih0aGlzKS0+dGVt
cGxhdGVPYmplY3RNYXAoKTsKICAgICBjYXNlIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlVHlwZToK
ICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlQodHlwZSgpID09IE1vZHVsZVByb2dyYW1FeGVj
dXRhYmxlVHlwZSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxNb2R1bGVQcm9ncmFtRXhl
Y3V0YWJsZSo+KHRoaXMpLT5lbnN1cmVUZW1wbGF0ZU9iamVjdE1hcCh2bSk7CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpLT50ZW1wbGF0
ZU9iamVjdE1hcCgpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5oCmluZGV4IGQwZjFmY2RkZGE3MTk5MTg1ZTgzZjQxOGVk
YzJkZGE3MDkwZjhkNWQuLjdhMTk2NzNlNTc2Y2ZjMDdkNjg5YWRjYzk4NjdhYzUzNWVkZDM5Mjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFi
bGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxl
LmgKQEAgLTEyNSw3ICsxMjUsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBoYXNDbGVhcmFibGVD
b2RlKFZNJikgY29uc3Q7CiAKLSAgICBUZW1wbGF0ZU9iamVjdE1hcCYgZW5zdXJlVGVtcGxhdGVP
YmplY3RNYXAoVk0mKTsKKyAgICBUZW1wbGF0ZU9iamVjdE1hcCYgdGVtcGxhdGVPYmplY3RNYXAo
KTsKIAogcHJvdGVjdGVkOgogICAgIFNjcmlwdEV4ZWN1dGFibGUoU3RydWN0dXJlKiwgVk0mLCBj
b25zdCBTb3VyY2VDb2RlJiwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCwgRGVyaXZlZENvbnRleHRU
eXBlLCBib29sIGlzSW5BcnJvd0Z1bmN0aW9uQ29udGV4dCwgYm9vbCBpc0luc2lkZU9yZGluYXJ5
RnVuY3Rpb24sIEV2YWxDb250ZXh0VHlwZSwgSW50cmluc2ljKTsKQEAgLTEzNiw4ICsxMzYsNiBA
QCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgPSBoYXNDYXB0dXJl
ZFZhcmlhYmxlczsKICAgICB9CiAKLSAgICBzdGF0aWMgVGVtcGxhdGVPYmplY3RNYXAmIGVuc3Vy
ZVRlbXBsYXRlT2JqZWN0TWFwSW1wbChzdGQ6OnVuaXF1ZV9wdHI8VGVtcGxhdGVPYmplY3RNYXA+
JiBkZXN0KTsKLQogICAgIFNvdXJjZUNvZGUgbV9zb3VyY2U7CiAgICAgSW50cmluc2ljIG1faW50
cmluc2ljIHsgTm9JbnRyaW5zaWMgfTsKICAgICBib29sIG1fZGlkVHJ5VG9FbnRlckluTG9vcCB7
IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLmNw
cAppbmRleCA4ZDk1N2FmNjk4NjY3NGM4NDRhMmM1NDA3MTc3N2Y1OWY2OTI2Y2YyLi40NDI5Mzgx
MTZmYTZhODE2MWEyNmEwMTg5YTk3NTBmY2EwMDQ2MDE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1v
cnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbi5jcHAKQEAgLTEzMiwxOCArMTMyLDE2IEBAIHZvaWQg
TWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlRGVsZXRlZChSZWY8TWVt
b3J5T2JqZWN0U3RvcmU+JiYKICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFdU
Rk1vdmUob2JqZWN0U3RvcmUpOwogfQogCi12b2lkIE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uOjpvYmplY3RTdG9yZUNsZWFyZWQoTWVtb3J5T2JqZWN0U3RvcmUmIG9iamVjdFN0b3JlLCBz
dGQ6OnVuaXF1ZV9wdHI8S2V5VmFsdWVNYXA+JiYga2V5VmFsdWVNYXAsIHN0ZDo6dW5pcXVlX3B0
cjxJREJLZXlEYXRhU2V0PiYmIG9yZGVyZWRLZXlzKQordm9pZCBNZW1vcnlCYWNraW5nU3RvcmVU
cmFuc2FjdGlvbjo6b2JqZWN0U3RvcmVDbGVhcmVkKE1lbW9yeU9iamVjdFN0b3JlJiBvYmplY3RT
dG9yZSwgS2V5VmFsdWVNYXAmJiBrZXlWYWx1ZU1hcCwgc3RkOjp1bmlxdWVfcHRyPElEQktleURh
dGFTZXQ+JiYgb3JkZXJlZEtleXMpCiB7CiAgICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVzLmNvbnRh
aW5zKCZvYmplY3RTdG9yZSkpOwogCi0gICAgYXV0byBhZGRSZXN1bHQgPSBtX2NsZWFyZWRLZXlW
YWx1ZU1hcHMuYWRkKCZvYmplY3RTdG9yZSwgbnVsbHB0cik7CisgICAgYXV0byBhZGRSZXN1bHQg
PSBtX2NsZWFyZWRLZXlWYWx1ZU1hcHMuYWRkKCZvYmplY3RTdG9yZSwgV1RGTW92ZShrZXlWYWx1
ZU1hcCkpOwogCiAgICAgLy8gSWYgdGhpcyBvYmplY3Qgc3RvcmUgaGFzIGFscmVhZHkgYmVlbiBj
bGVhcmVkIGR1cmluZyB0aGlzIHRyYW5zYWN0aW9uLCB3ZSBzaG91bGRuJ3QgcmVtZW1iZXIgdGhp
cyBjbGVhcmluZy4KICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICByZXR1
cm47CiAKLSAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gV1RGTW92ZShrZXlWYWx1ZU1h
cCk7Ci0KICAgICBBU1NFUlQoIW1fY2xlYXJlZE9yZGVyZWRLZXlzLmNvbnRhaW5zKCZvYmplY3RT
dG9yZSkpOwogICAgIG1fY2xlYXJlZE9yZGVyZWRLZXlzLmFkZCgmb2JqZWN0U3RvcmUsIFdURk1v
dmUob3JkZXJlZEtleXMpKTsKIH0KQEAgLTE5MSwxNyArMTg5LDggQEAgdm9pZCBNZW1vcnlCYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbjo6cmVjb3JkVmFsdWVDaGFuZ2VkKE1lbW9yeU9iamVjdFN0b3Jl
JiBvYmplY3QKICAgICBpZiAobV9jbGVhcmVkS2V5VmFsdWVNYXBzLmNvbnRhaW5zKCZvYmplY3RT
dG9yZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gb3JpZ2luYWxBZGRSZXN1bHQgPSBt
X29yaWdpbmFsVmFsdWVzLmFkZCgmb2JqZWN0U3RvcmUsIG51bGxwdHIpOwotICAgIGlmIChvcmln
aW5hbEFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBvcmlnaW5hbEFkZFJlc3VsdC5pdGVy
YXRvci0+dmFsdWUgPSBtYWtlVW5pcXVlPEtleVZhbHVlTWFwPigpOwotCi0gICAgYXV0byogbWFw
ID0gb3JpZ2luYWxBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwotCi0gICAgYXV0byBh
ZGRSZXN1bHQgPSBtYXAtPmFkZChrZXksIFRocmVhZFNhZmVEYXRhQnVmZmVyKCkpOwotICAgIGlm
ICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICh2YWx1
ZSkKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fb3JpZ2luYWxWYWx1ZXMuYWRkKCZvYmplY3RTdG9y
ZSwgS2V5VmFsdWVNYXAgeyB9KS5pdGVyYXRvci0+dmFsdWUuYWRkKGtleSwgVGhyZWFkU2FmZURh
dGFCdWZmZXIgeyB9KTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkgJiYgdmFsdWUpCiAg
ICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSAqdmFsdWU7CiB9CiAKQEAgLTI0Niwx
NiArMjM1LDEyIEBAIHZvaWQgTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb246OmFib3J0KCkK
ICAgICAgICAgb2JqZWN0U3RvcmUtPnNldEtleUdlbmVyYXRvclZhbHVlKG1fb3JpZ2luYWxLZXlH
ZW5lcmF0b3JzLmdldChvYmplY3RTdG9yZS5nZXQoKSkpOwogCiAgICAgICAgIGF1dG8gY2xlYXJl
ZEtleVZhbHVlTWFwID0gbV9jbGVhcmVkS2V5VmFsdWVNYXBzLnRha2Uob2JqZWN0U3RvcmUuZ2V0
KCkpOwotICAgICAgICBpZiAoY2xlYXJlZEtleVZhbHVlTWFwKSB7CisgICAgICAgIGlmICghY2xl
YXJlZEtleVZhbHVlTWFwLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgQVNTRVJUKG1fY2xlYXJl
ZE9yZGVyZWRLZXlzLmNvbnRhaW5zKG9iamVjdFN0b3JlLmdldCgpKSk7CiAgICAgICAgICAgICBv
YmplY3RTdG9yZS0+cmVwbGFjZUtleVZhbHVlU3RvcmUoV1RGTW92ZShjbGVhcmVkS2V5VmFsdWVN
YXApLCBtX2NsZWFyZWRPcmRlcmVkS2V5cy50YWtlKG9iamVjdFN0b3JlLmdldCgpKSk7CiAgICAg
ICAgIH0KIAotICAgICAgICBhdXRvIGtleVZhbHVlTWFwID0gbV9vcmlnaW5hbFZhbHVlcy50YWtl
KG9iamVjdFN0b3JlLmdldCgpKTsKLSAgICAgICAgaWYgKCFrZXlWYWx1ZU1hcCkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiAqa2V5VmFs
dWVNYXApIHsKKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fb3JpZ2luYWxWYWx1ZXMudGFr
ZShvYmplY3RTdG9yZS5nZXQoKSkpIHsKICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5kZWxldGVS
ZWNvcmQoZW50cnkua2V5KTsKICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5hZGRSZWNvcmQoKnRo
aXMsIGVudHJ5LmtleSwgeyBlbnRyeS52YWx1ZSB9KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
TWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uaAppbmRleCAyYzBhYTI3ZDgzNGY2ZjkzNTBl
YzZjMDA3ZjllZTcxYWRiN2EwNGE1Li41MDczNzc0N2RhM2UxNDc1YzllNjRkNDk0YmVjYjcyZDVi
OTZiYmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uaApA
QCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCByZWNvcmRWYWx1ZUNoYW5n
ZWQoTWVtb3J5T2JqZWN0U3RvcmUmLCBjb25zdCBJREJLZXlEYXRhJiwgVGhyZWFkU2FmZURhdGFC
dWZmZXIqKTsKICAgICB2b2lkIG9iamVjdFN0b3JlRGVsZXRlZChSZWY8TWVtb3J5T2JqZWN0U3Rv
cmU+JiYpOwotICAgIHZvaWQgb2JqZWN0U3RvcmVDbGVhcmVkKE1lbW9yeU9iamVjdFN0b3JlJiwg
c3RkOjp1bmlxdWVfcHRyPEtleVZhbHVlTWFwPiYmLCBzdGQ6OnVuaXF1ZV9wdHI8SURCS2V5RGF0
YVNldD4mJik7CisgICAgdm9pZCBvYmplY3RTdG9yZUNsZWFyZWQoTWVtb3J5T2JqZWN0U3RvcmUm
LCBLZXlWYWx1ZU1hcCYmLCBzdGQ6OnVuaXF1ZV9wdHI8SURCS2V5RGF0YVNldD4mJik7CiAgICAg
dm9pZCBvYmplY3RTdG9yZVJlbmFtZWQoTWVtb3J5T2JqZWN0U3RvcmUmLCBjb25zdCBTdHJpbmcm
IG9sZE5hbWUpOwogICAgIHZvaWQgaW5kZXhSZW5hbWVkKE1lbW9yeUluZGV4JiwgY29uc3QgU3Ry
aW5nJiBvbGROYW1lKTsKICAgICB2b2lkIGluZGV4Q2xlYXJlZChNZW1vcnlJbmRleCYsIHN0ZDo6
dW5pcXVlX3B0cjxJbmRleFZhbHVlU3RvcmU+JiYpOwpAQCAtOTIsOCArOTIsOCBAQCBwcml2YXRl
OgogICAgIEhhc2hNYXA8TWVtb3J5T2JqZWN0U3RvcmUqLCB1aW50NjRfdD4gbV9vcmlnaW5hbEtl
eUdlbmVyYXRvcnM7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxNZW1vcnlPYmplY3RTdG9y
ZT4+IG1fZGVsZXRlZE9iamVjdFN0b3JlczsKICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPE1l
bW9yeUluZGV4Pj4gbV9kZWxldGVkSW5kZXhlczsKLSAgICBIYXNoTWFwPE1lbW9yeU9iamVjdFN0
b3JlKiwgc3RkOjp1bmlxdWVfcHRyPEtleVZhbHVlTWFwPj4gbV9vcmlnaW5hbFZhbHVlczsKLSAg
ICBIYXNoTWFwPE1lbW9yeU9iamVjdFN0b3JlKiwgc3RkOjp1bmlxdWVfcHRyPEtleVZhbHVlTWFw
Pj4gbV9jbGVhcmVkS2V5VmFsdWVNYXBzOworICAgIEhhc2hNYXA8TWVtb3J5T2JqZWN0U3RvcmUq
LCBLZXlWYWx1ZU1hcD4gbV9vcmlnaW5hbFZhbHVlczsKKyAgICBIYXNoTWFwPE1lbW9yeU9iamVj
dFN0b3JlKiwgS2V5VmFsdWVNYXA+IG1fY2xlYXJlZEtleVZhbHVlTWFwczsKICAgICBIYXNoTWFw
PE1lbW9yeU9iamVjdFN0b3JlKiwgc3RkOjp1bmlxdWVfcHRyPElEQktleURhdGFTZXQ+PiBtX2Ns
ZWFyZWRPcmRlcmVkS2V5czsKICAgICBIYXNoTWFwPE1lbW9yeU9iamVjdFN0b3JlKiwgU3RyaW5n
PiBtX29yaWdpbmFsT2JqZWN0U3RvcmVOYW1lczsKICAgICBIYXNoTWFwPE1lbW9yeUluZGV4Kiwg
U3RyaW5nPiBtX29yaWdpbmFsSW5kZXhOYW1lczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuY3BwCmlu
ZGV4IDAzYzMxMWRmZjdiMmMyNDM0OWQyN2NhODYzNDdlYzlkYmZkZTdlOWIuLjMwNzM0ZmQ0ZDlm
ZDE1MjUzNTgyMGUxZjI5YmEyMTNhNjUyZDAzY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeU9iamVjdFN0b3JlLmNw
cApAQCAtMTcwLDEwICsxNzAsNyBAQCB2b2lkIE1lbW9yeU9iamVjdFN0b3JlOjpkZWxldGVBbGxJ
bmRleGVzKE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uJiB0cmFuc2FjdAogCiBib29sIE1l
bW9yeU9iamVjdFN0b3JlOjpjb250YWluc1JlY29yZChjb25zdCBJREJLZXlEYXRhJiBrZXkpCiB7
Ci0gICAgaWYgKCFtX2tleVZhbHVlU3RvcmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IHJldHVybiBtX2tleVZhbHVlU3RvcmUtPmNvbnRhaW5zKGtleSk7CisgICAgcmV0dXJuIG1fa2V5
VmFsdWVTdG9yZS5jb250YWlucyhrZXkpOwogfQogCiB2b2lkIE1lbW9yeU9iamVjdFN0b3JlOjpj
bGVhcigpCkBAIC0xODksNyArMTg2LDcgQEAgdm9pZCBNZW1vcnlPYmplY3RTdG9yZTo6Y2xlYXIo
KQogICAgICAgICBjdXJzb3ItPm9iamVjdFN0b3JlQ2xlYXJlZCgpOwogfQogCi12b2lkIE1lbW9y
eU9iamVjdFN0b3JlOjpyZXBsYWNlS2V5VmFsdWVTdG9yZShzdGQ6OnVuaXF1ZV9wdHI8S2V5VmFs
dWVNYXA+JiYgc3RvcmUsIHN0ZDo6dW5pcXVlX3B0cjxJREJLZXlEYXRhU2V0PiYmIG9yZGVyZWRL
ZXlzKQordm9pZCBNZW1vcnlPYmplY3RTdG9yZTo6cmVwbGFjZUtleVZhbHVlU3RvcmUoS2V5VmFs
dWVNYXAmJiBzdG9yZSwgc3RkOjp1bmlxdWVfcHRyPElEQktleURhdGFTZXQ+JiYgb3JkZXJlZEtl
eXMpCiB7CiAgICAgQVNTRVJUKG1fd3JpdGVUcmFuc2FjdGlvbik7CiAgICAgQVNTRVJUKG1fd3Jp
dGVUcmFuc2FjdGlvbi0+aXNBYm9ydGluZygpKTsKQEAgLTIwMiwyMyArMTk5LDE0IEBAIHZvaWQg
TWVtb3J5T2JqZWN0U3RvcmU6OmRlbGV0ZVJlY29yZChjb25zdCBJREJLZXlEYXRhJiBrZXkpCiB7
CiAgICAgTE9HKEluZGV4ZWREQiwgIk1lbW9yeU9iamVjdFN0b3JlOjpkZWxldGVSZWNvcmQiKTsK
IAotICAgIEFTU0VSVChtX3dyaXRlVHJhbnNhY3Rpb24pOwotCi0gICAgaWYgKCFtX2tleVZhbHVl
U3RvcmUpIHsKLSAgICAgICAgbV93cml0ZVRyYW5zYWN0aW9uLT5yZWNvcmRWYWx1ZUNoYW5nZWQo
KnRoaXMsIGtleSwgbnVsbHB0cik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NF
UlQobV9vcmRlcmVkS2V5cyk7Ci0KLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9rZXlWYWx1ZVN0b3Jl
LT5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yID09IG1fa2V5VmFsdWVTdG9yZS0+ZW5kKCkp
IHsKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9rZXlWYWx1ZVN0b3JlLmZpbmQoa2V5KTsKKyAgICBp
ZiAoaXRlcmF0b3IgPT0gbV9rZXlWYWx1ZVN0b3JlLmVuZCgpKSB7CiAgICAgICAgIG1fd3JpdGVU
cmFuc2FjdGlvbi0+cmVjb3JkVmFsdWVDaGFuZ2VkKCp0aGlzLCBrZXksIG51bGxwdHIpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgbV93cml0ZVRyYW5zYWN0aW9uLT5yZWNvcmRWYWx1
ZUNoYW5nZWQoKnRoaXMsIGtleSwgJml0ZXJhdG9yLT52YWx1ZSk7Ci0gICAgbV9rZXlWYWx1ZVN0
b3JlLT5yZW1vdmUoaXRlcmF0b3IpOworICAgIG1fa2V5VmFsdWVTdG9yZS5yZW1vdmUoaXRlcmF0
b3IpOwogICAgIG1fb3JkZXJlZEtleXMtPmVyYXNlKGtleSk7CiAKICAgICB1cGRhdGVJbmRleGVz
Rm9yRGVsZXRlUmVjb3JkKGtleSk7CkBAIC0yNjEsMTYgKzI0OSwxMyBAQCBJREJFcnJvciBNZW1v
cnlPYmplY3RTdG9yZTo6YWRkUmVjb3JkKE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uJiB0
cmFuc2FjdGlvbgogCiAgICAgQVNTRVJUKG1fd3JpdGVUcmFuc2FjdGlvbik7CiAgICAgQVNTRVJU
X1VOVVNFRCh0cmFuc2FjdGlvbiwgbV93cml0ZVRyYW5zYWN0aW9uID09ICZ0cmFuc2FjdGlvbik7
Ci0gICAgQVNTRVJUKCFtX2tleVZhbHVlU3RvcmUgfHwgIW1fa2V5VmFsdWVTdG9yZS0+Y29udGFp
bnMoa2V5RGF0YSkpOworICAgIEFTU0VSVCghbV9rZXlWYWx1ZVN0b3JlLmNvbnRhaW5zKGtleURh
dGEpKTsKICAgICBBU1NFUlQoIW1fb3JkZXJlZEtleXMgfHwgbV9vcmRlcmVkS2V5cy0+ZmluZChr
ZXlEYXRhKSA9PSBtX29yZGVyZWRLZXlzLT5lbmQoKSk7CiAKLSAgICBpZiAoIW1fa2V5VmFsdWVT
dG9yZSkgewotICAgICAgICBBU1NFUlQoIW1fb3JkZXJlZEtleXMpOwotICAgICAgICBtX2tleVZh
bHVlU3RvcmUgPSBtYWtlVW5pcXVlPEtleVZhbHVlTWFwPigpOworICAgIGlmICghbV9vcmRlcmVk
S2V5cykKICAgICAgICAgbV9vcmRlcmVkS2V5cyA9IG1ha2VVbmlxdWVXaXRob3V0RmFzdE1hbGxv
Y0NoZWNrPElEQktleURhdGFTZXQ+KCk7Ci0gICAgfQogCi0gICAgYXV0byBtYXBSZXN1bHQgPSBt
X2tleVZhbHVlU3RvcmUtPnNldChrZXlEYXRhLCB2YWx1ZS5kYXRhKCkpOworICAgIGF1dG8gbWFw
UmVzdWx0ID0gbV9rZXlWYWx1ZVN0b3JlLnNldChrZXlEYXRhLCB2YWx1ZS5kYXRhKCkpOwogICAg
IEFTU0VSVChtYXBSZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgYXV0byBsaXN0UmVzdWx0ID0gbV9v
cmRlcmVkS2V5cy0+aW5zZXJ0KGtleURhdGEpOwogICAgIEFTU0VSVChsaXN0UmVzdWx0LnNlY29u
ZCk7CkBAIC0yNzgsNyArMjYzLDcgQEAgSURCRXJyb3IgTWVtb3J5T2JqZWN0U3RvcmU6OmFkZFJl
Y29yZChNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24KICAgICAvLyBJ
ZiB0aGVyZSB3YXMgYW4gZXJyb3IgaW5kZXhpbmcgdGhpcyBhZGRpdGlvbiwgdGhlbiByZXZlcnQg
aXQuCiAgICAgYXV0byBlcnJvciA9IHVwZGF0ZUluZGV4ZXNGb3JQdXRSZWNvcmQoa2V5RGF0YSwg
aW5kZXhLZXlzKTsKICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgIG1fa2V5VmFs
dWVTdG9yZS0+cmVtb3ZlKG1hcFJlc3VsdC5pdGVyYXRvcik7CisgICAgICAgIG1fa2V5VmFsdWVT
dG9yZS5yZW1vdmUobWFwUmVzdWx0Lml0ZXJhdG9yKTsKICAgICAgICAgbV9vcmRlcmVkS2V5cy0+
ZXJhc2UobGlzdFJlc3VsdC5maXJzdCk7CiAgICAgfSBlbHNlCiAgICAgICAgIHVwZGF0ZUN1cnNv
cnNGb3JQdXRSZWNvcmQobGlzdFJlc3VsdC5maXJzdCk7CkBAIC0zMzUsMTIgKzMyMCw5IEBAIElE
QkVycm9yIE1lbW9yeU9iamVjdFN0b3JlOjp1cGRhdGVJbmRleGVzRm9yUHV0UmVjb3JkKGNvbnN0
IElEQktleURhdGEmIGtleSwgY29uCiAKIElEQkVycm9yIE1lbW9yeU9iamVjdFN0b3JlOjpwb3B1
bGF0ZUluZGV4V2l0aEV4aXN0aW5nUmVjb3JkcyhNZW1vcnlJbmRleCYgaW5kZXgpCiB7Ci0gICAg
aWYgKCFtX2tleVZhbHVlU3RvcmUpCi0gICAgICAgIHJldHVybiBJREJFcnJvciB7IH07Ci0KICAg
ICBKU0xvY2tIb2xkZXIgbG9ja2VyKG1fc2VyaWFsaXphdGlvbkNvbnRleHQtPnZtKCkpOwogCi0g
ICAgZm9yIChjb25zdCBhdXRvJiBpdGVyYXRvciA6ICptX2tleVZhbHVlU3RvcmUpIHsKKyAgICBm
b3IgKGNvbnN0IGF1dG8mIGl0ZXJhdG9yIDogbV9rZXlWYWx1ZVN0b3JlKSB7CiAgICAgICAgIGF1
dG8ganNWYWx1ZSA9IGRlc2VyaWFsaXplSURCVmFsdWVUb0pTVmFsdWUobV9zZXJpYWxpemF0aW9u
Q29udGV4dC0+Z2xvYmFsT2JqZWN0KCksIGl0ZXJhdG9yLnZhbHVlKTsKICAgICAgICAgaWYgKGpz
VmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgICAgIHJldHVybiBJREJFcnJvciB7
IH07CkBAIC0zNjksNyArMzUxLDcgQEAgdWludDY0X3QgTWVtb3J5T2JqZWN0U3RvcmU6OmNvdW50
Rm9yS2V5UmFuZ2UodWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBJREIKICAgICAgICAg
cmV0dXJuIGluZGV4LT5jb3VudEZvcktleVJhbmdlKGluUmFuZ2UpOwogICAgIH0KIAotICAgIGlm
ICghbV9rZXlWYWx1ZVN0b3JlKQorICAgIGlmIChtX2tleVZhbHVlU3RvcmUuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gMDsKIAogICAgIHVpbnQ2NF90IGNvdW50ID0gMDsKQEAgLTM4OSwxMCAr
MzcxLDcgQEAgdWludDY0X3QgTWVtb3J5T2JqZWN0U3RvcmU6OmNvdW50Rm9yS2V5UmFuZ2UodWlu
dDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBJREIKIAogVGhyZWFkU2FmZURhdGFCdWZmZXIg
TWVtb3J5T2JqZWN0U3RvcmU6OnZhbHVlRm9yS2V5KGNvbnN0IElEQktleURhdGEmIGtleSkgY29u
c3QKIHsKLSAgICBpZiAoIW1fa2V5VmFsdWVTdG9yZSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQot
ICAgIHJldHVybiBtX2tleVZhbHVlU3RvcmUtPmdldChrZXkpOworICAgIHJldHVybiBtX2tleVZh
bHVlU3RvcmUuZ2V0KGtleSk7CiB9CiAKIFRocmVhZFNhZmVEYXRhQnVmZmVyIE1lbW9yeU9iamVj
dFN0b3JlOjp2YWx1ZUZvcktleVJhbmdlKGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VE
YXRhKSBjb25zdApAQCAtNDAzLDggKzM4Miw3IEBAIFRocmVhZFNhZmVEYXRhQnVmZmVyIE1lbW9y
eU9iamVjdFN0b3JlOjp2YWx1ZUZvcktleVJhbmdlKGNvbnN0IElEQktleVJhbmdlRGF0YSYKICAg
ICBpZiAoa2V5LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gVGhyZWFkU2FmZURhdGFCdWZmZXIo
KTsKIAotICAgIEFTU0VSVChtX2tleVZhbHVlU3RvcmUpOwotICAgIHJldHVybiBtX2tleVZhbHVl
U3RvcmUtPmdldChrZXkpOworICAgIHJldHVybiBtX2tleVZhbHVlU3RvcmUuZ2V0KGtleSk7CiB9
CiAKIHZvaWQgTWVtb3J5T2JqZWN0U3RvcmU6OmdldEFsbFJlY29yZHMoY29uc3QgSURCS2V5UmFu
Z2VEYXRhJiBrZXlSYW5nZURhdGEsIE9wdGlvbmFsPHVpbnQzMl90PiBjb3VudCwgSW5kZXhlZERC
OjpHZXRBbGxUeXBlIHR5cGUsIElEQkdldEFsbFJlc3VsdCYgcmVzdWx0KSBjb25zdApAQCAtNDQ1
LDEwICs0MjMsMTAgQEAgSURCR2V0UmVzdWx0IE1lbW9yeU9iamVjdFN0b3JlOjppbmRleFZhbHVl
Rm9yS2V5UmFuZ2UodWludDY0X3QgaW5kZXhJZGVudGlmaWVyLAogCiBJREJLZXlEYXRhIE1lbW9y
eU9iamVjdFN0b3JlOjpsb3dlc3RLZXlXaXRoUmVjb3JkSW5SYW5nZShjb25zdCBJREJLZXlSYW5n
ZURhdGEmIGtleVJhbmdlRGF0YSkgY29uc3QKIHsKLSAgICBpZiAoIW1fa2V5VmFsdWVTdG9yZSkK
KyAgICBpZiAobV9rZXlWYWx1ZVN0b3JlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHsgfTsK
IAotICAgIGlmIChrZXlSYW5nZURhdGEuaXNFeGFjdGx5T25lS2V5KCkgJiYgbV9rZXlWYWx1ZVN0
b3JlLT5jb250YWlucyhrZXlSYW5nZURhdGEubG93ZXJLZXkpKQorICAgIGlmIChrZXlSYW5nZURh
dGEuaXNFeGFjdGx5T25lS2V5KCkgJiYgbV9rZXlWYWx1ZVN0b3JlLmNvbnRhaW5zKGtleVJhbmdl
RGF0YS5sb3dlcktleSkpCiAgICAgICAgIHJldHVybiBrZXlSYW5nZURhdGEubG93ZXJLZXk7CiAK
ICAgICBBU1NFUlQobV9vcmRlcmVkS2V5cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5oCmluZGV4IDQz
NDk5ZDViY2JlYzYyNmFkMTFjNDU4MmI2YWI2NjRkYTI2ZGQwMTguLjQzYTUzZWU5NmZiNzY1NTgy
ZDUyYmNhYWU5ZDdlZDIzYzAwNTkzNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5oCkBAIC04NSw3
ICs4NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEtleUdlbmVyYXRvclZhbHVlKHVpbnQ2NF90
IHZhbHVlKSB7IG1fa2V5R2VuZXJhdG9yVmFsdWUgPSB2YWx1ZTsgfQogCiAgICAgdm9pZCBjbGVh
cigpOwotICAgIHZvaWQgcmVwbGFjZUtleVZhbHVlU3RvcmUoc3RkOjp1bmlxdWVfcHRyPEtleVZh
bHVlTWFwPiYmLCBzdGQ6OnVuaXF1ZV9wdHI8SURCS2V5RGF0YVNldD4mJik7CisgICAgdm9pZCBy
ZXBsYWNlS2V5VmFsdWVTdG9yZShLZXlWYWx1ZU1hcCYmLCBzdGQ6OnVuaXF1ZV9wdHI8SURCS2V5
RGF0YVNldD4mJik7CiAKICAgICBUaHJlYWRTYWZlRGF0YUJ1ZmZlciB2YWx1ZUZvcktleShjb25z
dCBJREJLZXlEYXRhJikgY29uc3Q7CiAgICAgVGhyZWFkU2FmZURhdGFCdWZmZXIgdmFsdWVGb3JL
ZXlSYW5nZShjb25zdCBJREJLZXlSYW5nZURhdGEmKSBjb25zdDsKQEAgLTEyNiw3ICsxMjYsNyBA
QCBwcml2YXRlOgogICAgIE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKiBtX3dyaXRlVHJh
bnNhY3Rpb24geyBudWxscHRyIH07CiAgICAgdWludDY0X3QgbV9rZXlHZW5lcmF0b3JWYWx1ZSB7
IDEgfTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxLZXlWYWx1ZU1hcD4gbV9rZXlWYWx1ZVN0b3Jl
OworICAgIEtleVZhbHVlTWFwIG1fa2V5VmFsdWVTdG9yZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
SURCS2V5RGF0YVNldD4gbV9vcmRlcmVkS2V5czsKIAogICAgIHZvaWQgdW5yZWdpc3RlckluZGV4
KE1lbW9yeUluZGV4Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAKaW5kZXggYTlmMjgwYjljNTlmNDhiZGIyOGRhNzMw
MTUzNzY0M2U5NGRkNjU2MC4uNTdkZTIxZTdlZmEyODlhZTBkNGNkZGRiOWJiOTFhNzkzNTIxOGFi
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZVRyYWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VUcmFja2VyLmNwcApAQCAtNTI5LDEyICs1MjksMTAgQEAgVmVjdG9yPFJlZjxEYXRhYmFz
ZT4+IERhdGFiYXNlVHJhY2tlcjo6b3BlbkRhdGFiYXNlcygpCiAgICAgewogICAgICAgICBMb2Nr
ZXIgb3BlbkRhdGFiYXNlTWFwTG9jayB7IG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQgfTsKIAotICAg
ICAgICBpZiAobV9vcGVuRGF0YWJhc2VNYXApIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgbmFt
ZU1hcCA6IG1fb3BlbkRhdGFiYXNlTWFwLT52YWx1ZXMoKSkgewotICAgICAgICAgICAgICAgIGZv
ciAoYXV0byYgc2V0IDogbmFtZU1hcC0+dmFsdWVzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
Zm9yIChhdXRvJiBkYXRhYmFzZSA6ICpzZXQpCi0gICAgICAgICAgICAgICAgICAgICAgICBvcGVu
RGF0YWJhc2VzLmFwcGVuZCgqZGF0YWJhc2UpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
Zm9yIChhdXRvJiBuYW1lTWFwIDogbV9vcGVuRGF0YWJhc2VNYXAudmFsdWVzKCkpIHsKKyAgICAg
ICAgICAgIGZvciAoYXV0byYgc2V0IDogbmFtZU1hcC52YWx1ZXMoKSkgeworICAgICAgICAgICAg
ICAgIGZvciAoYXV0byYgZGF0YWJhc2UgOiBzZXQpCisgICAgICAgICAgICAgICAgICAgIG9wZW5E
YXRhYmFzZXMuYXBwZW5kKCpkYXRhYmFzZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9CkBAIC01NDUsMjUgKzU0MywxNCBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6YWRkT3BlbkRh
dGFiYXNlKERhdGFiYXNlJiBkYXRhYmFzZSkKIHsKICAgICBMb2NrZXIgb3BlbkRhdGFiYXNlTWFw
TG9jayB7IG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQgfTsKIAotICAgIGlmICghbV9vcGVuRGF0YWJh
c2VNYXApCi0gICAgICAgIG1fb3BlbkRhdGFiYXNlTWFwID0gbWFrZVVuaXF1ZTxEYXRhYmFzZU9y
aWdpbk1hcD4oKTsKLQogICAgIGF1dG8gb3JpZ2luID0gZGF0YWJhc2Uuc2VjdXJpdHlPcmlnaW4o
KTsKIAotICAgIGF1dG8qIG5hbWVNYXAgPSBtX29wZW5EYXRhYmFzZU1hcC0+Z2V0KG9yaWdpbik7
Ci0gICAgaWYgKCFuYW1lTWFwKSB7Ci0gICAgICAgIG5hbWVNYXAgPSBuZXcgRGF0YWJhc2VOYW1l
TWFwOwotICAgICAgICBtX29wZW5EYXRhYmFzZU1hcC0+YWRkKG9yaWdpbi5pc29sYXRlZENvcHko
KSwgbmFtZU1hcCk7Ci0gICAgfQorICAgIC8vIFdlIHVzZSBmaW5kIGJlZm9yZSBhZGQgaGVyZSB0
byBhdm9pZCBtYWtpbmcgYW4gaXNvbGF0ZWQgY29weSBvZiB0aGUgb3JpZ2luIGV2ZXJ5IHRpbWUu
CisgICAgYXV0byBpdGVyYXRvciA9IG1fb3BlbkRhdGFiYXNlTWFwLmZpbmQob3JpZ2luKTsKKyAg
ICBpZiAoaXRlcmF0b3IgPT0gbV9vcGVuRGF0YWJhc2VNYXAuZW5kKCkpCisgICAgICAgIGl0ZXJh
dG9yID0gbV9vcGVuRGF0YWJhc2VNYXAuYWRkKG9yaWdpbi5pc29sYXRlZENvcHkoKSwgRGF0YWJh
c2VOYW1lTWFwIHsgfSkuaXRlcmF0b3I7CiAKLSAgICBTdHJpbmcgbmFtZSA9IGRhdGFiYXNlLnN0
cmluZ0lkZW50aWZpZXJJc29sYXRlZENvcHkoKTsKLSAgICBhdXRvKiBkYXRhYmFzZVNldCA9IG5h
bWVNYXAtPmdldChuYW1lKTsKLSAgICBpZiAoIWRhdGFiYXNlU2V0KSB7Ci0gICAgICAgIGRhdGFi
YXNlU2V0ID0gbmV3IERhdGFiYXNlU2V0OwotICAgICAgICBuYW1lTWFwLT5zZXQobmFtZS5pc29s
YXRlZENvcHkoKSwgZGF0YWJhc2VTZXQpOwotICAgIH0KLQotICAgIGRhdGFiYXNlU2V0LT5hZGQo
JmRhdGFiYXNlKTsKKyAgICBpdGVyYXRvci0+dmFsdWUuYWRkKGRhdGFiYXNlLnN0cmluZ0lkZW50
aWZpZXJJc29sYXRlZENvcHkoKSwgRGF0YWJhc2VTZXQgeyB9KS5pdGVyYXRvci0+dmFsdWUuYWRk
KCZkYXRhYmFzZSk7CiAKICAgICBMT0coU3RvcmFnZUFQSSwgIkFkZGVkIG9wZW4gRGF0YWJhc2Ug
JXMgKCVwKVxuIiwgZGF0YWJhc2Uuc3RyaW5nSWRlbnRpZmllcklzb2xhdGVkQ29weSgpLnV0Zjgo
KS5kYXRhKCksICZkYXRhYmFzZSk7CiB9CkBAIC01NzIsMzkgKzU1OSwzMCBAQCB2b2lkIERhdGFi
YXNlVHJhY2tlcjo6cmVtb3ZlT3BlbkRhdGFiYXNlKERhdGFiYXNlJiBkYXRhYmFzZSkKIHsKICAg
ICBMb2NrZXIgb3BlbkRhdGFiYXNlTWFwTG9jayB7IG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQgfTsK
IAotICAgIGlmICghbV9vcGVuRGF0YWJhc2VNYXApIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBEYXRhYmFzZU5hbWVNYXAqIG5h
bWVNYXAgPSBtX29wZW5EYXRhYmFzZU1hcC0+Z2V0KGRhdGFiYXNlLnNlY3VyaXR5T3JpZ2luKCkp
OwotICAgIGlmICghbmFtZU1hcCkgeworICAgIGF1dG8gaXRlcmF0b3IgPSBtX29wZW5EYXRhYmFz
ZU1hcC5maW5kKGRhdGFiYXNlLnNlY3VyaXR5T3JpZ2luKCkpOworICAgIGlmIChpdGVyYXRvciA9
PSBtX29wZW5EYXRhYmFzZU1hcC5lbmQoKSkgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFN0cmluZyBuYW1lID0gZGF0YWJhc2Uu
c3RyaW5nSWRlbnRpZmllcklzb2xhdGVkQ29weSgpOwotICAgIGF1dG8qIGRhdGFiYXNlU2V0ID0g
bmFtZU1hcC0+Z2V0KG5hbWUpOwotICAgIGlmICghZGF0YWJhc2VTZXQpIHsKKyAgICBhdXRvIGlu
bmVySXRlcmF0b3IgPSBpdGVyYXRvci0+dmFsdWUuZmluZChkYXRhYmFzZS5zdHJpbmdJZGVudGlm
aWVySXNvbGF0ZWRDb3B5KCkpOworICAgIGlmIChpbm5lckl0ZXJhdG9yID09IGl0ZXJhdG9yLT52
YWx1ZS5lbmQoKSkgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGRhdGFiYXNlU2V0LT5yZW1vdmUoJmRhdGFiYXNlKTsKKyAgICBp
bm5lckl0ZXJhdG9yLT52YWx1ZS5yZW1vdmUoJmRhdGFiYXNlKTsKIAogICAgIExPRyhTdG9yYWdl
QVBJLCAiUmVtb3ZlZCBvcGVuIERhdGFiYXNlICVzICglcClcbiIsIGRhdGFiYXNlLnN0cmluZ0lk
ZW50aWZpZXJJc29sYXRlZENvcHkoKS51dGY4KCkuZGF0YSgpLCAmZGF0YWJhc2UpOwogCi0gICAg
aWYgKCFkYXRhYmFzZVNldC0+aXNFbXB0eSgpKQorICAgIGlmICghaW5uZXJJdGVyYXRvci0+dmFs
dWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBuYW1lTWFwLT5yZW1vdmUobmFt
ZSk7Ci0gICAgZGVsZXRlIGRhdGFiYXNlU2V0OwotCi0gICAgaWYgKCFuYW1lTWFwLT5pc0VtcHR5
KCkpCisgICAgaXRlcmF0b3ItPnZhbHVlLnJlbW92ZShpbm5lckl0ZXJhdG9yKTsKKyAgICBpZiAo
IWl0ZXJhdG9yLT52YWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fb3Bl
bkRhdGFiYXNlTWFwLT5yZW1vdmUoZGF0YWJhc2Uuc2VjdXJpdHlPcmlnaW4oKSk7Ci0gICAgZGVs
ZXRlIG5hbWVNYXA7CisgICAgbV9vcGVuRGF0YWJhc2VNYXAucmVtb3ZlKGl0ZXJhdG9yKTsKIH0K
IAogUmVmUHRyPE9yaWdpbkxvY2s+IERhdGFiYXNlVHJhY2tlcjo6b3JpZ2luTG9ja0Zvcihjb25z
dCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbikKQEAgLTk1NSwxNCArOTMzLDExIEBAIHZvaWQg
RGF0YWJhc2VUcmFja2VyOjpyZWNvcmRDcmVhdGluZ0RhdGFiYXNlKGNvbnN0IFNlY3VyaXR5T3Jp
Z2luRGF0YSYgb3JpZ2luLCBjCiB7CiAgICAgQVNTRVJUKG1fZGF0YWJhc2VHdWFyZC5pc0hlbGQo
KSk7CiAKLSAgICAvLyBXZSBkb24ndCB1c2UgSGFzaE1hcDo6ZW5zdXJlIGhlcmUgdG8gYXZvaWQg
bWFraW5nIGFuIGlzb2xhdGVkIGNvcHkgb2YgdGhlIG9yaWdpbiBldmVyeSB0aW1lLgotICAgIGF1
dG8qIG5hbWVTZXQgPSBtX2JlaW5nQ3JlYXRlZC5nZXQob3JpZ2luKTsKLSAgICBpZiAoIW5hbWVT
ZXQpIHsKLSAgICAgICAgYXV0byBvd25lZFNldCA9IG1ha2VVbmlxdWU8SGFzaENvdW50ZWRTZXQ8
U3RyaW5nPj4oKTsKLSAgICAgICAgbmFtZVNldCA9IG93bmVkU2V0LmdldCgpOwotICAgICAgICBt
X2JlaW5nQ3JlYXRlZC5hZGQob3JpZ2luLmlzb2xhdGVkQ29weSgpLCBXVEZNb3ZlKG93bmVkU2V0
KSk7Ci0gICAgfQotICAgIG5hbWVTZXQtPmFkZChuYW1lLmlzb2xhdGVkQ29weSgpKTsKKyAgICAv
LyBXZSB1c2UgZmluZCBiZWZvcmUgYWRkIGhlcmUgdG8gYXZvaWQgbWFraW5nIGFuIGlzb2xhdGVk
IGNvcHkgb2YgdGhlIG9yaWdpbiBldmVyeSB0aW1lLgorICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Jl
aW5nQ3JlYXRlZC5maW5kKG9yaWdpbik7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fYmVpbmdDcmVh
dGVkLmVuZCgpKQorICAgICAgICBpdGVyYXRvciA9IG1fYmVpbmdDcmVhdGVkLmFkZChvcmlnaW4u
aXNvbGF0ZWRDb3B5KCksIEhhc2hDb3VudGVkU2V0PFN0cmluZz4geyB9KS5pdGVyYXRvcjsKKyAg
ICBpdGVyYXRvci0+dmFsdWUuYWRkKG5hbWUuaXNvbGF0ZWRDb3B5KCkpOwogfQogCiB2b2lkIERh
dGFiYXNlVHJhY2tlcjo6ZG9uZUNyZWF0aW5nRGF0YWJhc2UoY29uc3QgU2VjdXJpdHlPcmlnaW5E
YXRhJiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSkKQEAgLTk3NSw3ICs5NTAsNyBAQCB2b2lk
IERhdGFiYXNlVHJhY2tlcjo6ZG9uZUNyZWF0aW5nRGF0YWJhc2UoY29uc3QgU2VjdXJpdHlPcmln
aW5EYXRhJiBvcmlnaW4sIGNvbgogICAgIGlmIChpdGVyYXRvciA9PSBtX2JlaW5nQ3JlYXRlZC5l
bmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byYgY291bnRlZFNldCA9ICppdGVyYXRv
ci0+dmFsdWU7CisgICAgYXV0byYgY291bnRlZFNldCA9IGl0ZXJhdG9yLT52YWx1ZTsKICAgICBB
U1NFUlQoY291bnRlZFNldC5jb250YWlucyhuYW1lKSk7CiAKICAgICBpZiAoY291bnRlZFNldC5y
ZW1vdmUobmFtZSkgJiYgY291bnRlZFNldC5pc0VtcHR5KCkpCkBAIC05ODcsNyArOTYyLDcgQEAg
Ym9vbCBEYXRhYmFzZVRyYWNrZXI6OmNyZWF0aW5nRGF0YWJhc2UoY29uc3QgU2VjdXJpdHlPcmln
aW5EYXRhJiBvcmlnaW4sIGNvbnN0IFMKICAgICBBU1NFUlQobV9kYXRhYmFzZUd1YXJkLmlzSGVs
ZCgpKTsKIAogICAgIGF1dG8gaXRlcmF0b3IgPSBtX2JlaW5nQ3JlYXRlZC5maW5kKG9yaWdpbik7
Ci0gICAgcmV0dXJuIGl0ZXJhdG9yICE9IG1fYmVpbmdDcmVhdGVkLmVuZCgpICYmIGl0ZXJhdG9y
LT52YWx1ZS0+Y29udGFpbnMobmFtZSk7CisgICAgcmV0dXJuIGl0ZXJhdG9yICE9IG1fYmVpbmdD
cmVhdGVkLmVuZCgpICYmIGl0ZXJhdG9yLT52YWx1ZS5jb250YWlucyhuYW1lKTsKIH0KIAogYm9v
bCBEYXRhYmFzZVRyYWNrZXI6OmNhbkRlbGV0ZURhdGFiYXNlKGNvbnN0IFNlY3VyaXR5T3JpZ2lu
RGF0YSYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUpCkBAIC0xMDAxLDE1ICs5NzYsMTIgQEAg
dm9pZCBEYXRhYmFzZVRyYWNrZXI6OnJlY29yZERlbGV0aW5nRGF0YWJhc2UoY29uc3QgU2VjdXJp
dHlPcmlnaW5EYXRhJiBvcmlnaW4sIGMKICAgICBBU1NFUlQobV9kYXRhYmFzZUd1YXJkLmlzSGVs
ZCgpKTsKICAgICBBU1NFUlQoY2FuRGVsZXRlRGF0YWJhc2Uob3JpZ2luLCBuYW1lKSk7CiAKLSAg
ICAvLyBXZSBkb24ndCB1c2UgSGFzaE1hcDo6ZW5zdXJlIGhlcmUgdG8gYXZvaWQgbWFraW5nIGFu
IGlzb2xhdGVkIGNvcHkgb2YgdGhlIG9yaWdpbiBldmVyeSB0aW1lLgotICAgIGF1dG8qIG5hbWVT
ZXQgPSBtX2JlaW5nRGVsZXRlZC5nZXQob3JpZ2luKTsKLSAgICBpZiAoIW5hbWVTZXQpIHsKLSAg
ICAgICAgYXV0byBvd25lZFNldCA9IG1ha2VVbmlxdWU8SGFzaFNldDxTdHJpbmc+PigpOwotICAg
ICAgICBuYW1lU2V0ID0gb3duZWRTZXQuZ2V0KCk7Ci0gICAgICAgIG1fYmVpbmdEZWxldGVkLmFk
ZChvcmlnaW4uaXNvbGF0ZWRDb3B5KCksIFdURk1vdmUob3duZWRTZXQpKTsKLSAgICB9Ci0gICAg
QVNTRVJUKCFuYW1lU2V0LT5jb250YWlucyhuYW1lKSk7Ci0gICAgbmFtZVNldC0+YWRkKG5hbWUu
aXNvbGF0ZWRDb3B5KCkpOworICAgIC8vIFdlIHVzZSBmaW5kIGJlZm9yZSBhZGQgaGVyZSB0byBh
dm9pZCBtYWtpbmcgYW4gaXNvbGF0ZWQgY29weSBvZiB0aGUgb3JpZ2luIGV2ZXJ5IHRpbWUuCisg
ICAgYXV0byBpdGVyYXRvciA9IG1fYmVpbmdEZWxldGVkLmZpbmQob3JpZ2luKTsKKyAgICBpZiAo
aXRlcmF0b3IgPT0gbV9iZWluZ0RlbGV0ZWQuZW5kKCkpCisgICAgICAgIGl0ZXJhdG9yID0gbV9i
ZWluZ0RlbGV0ZWQuYWRkKG9yaWdpbi5pc29sYXRlZENvcHkoKSwgSGFzaFNldDxTdHJpbmc+IHsg
fSkuaXRlcmF0b3I7CisgICAgQVNTRVJUKCFpdGVyYXRvci0+dmFsdWUuY29udGFpbnMobmFtZSkp
OworICAgIGl0ZXJhdG9yLT52YWx1ZS5hZGQobmFtZS5pc29sYXRlZENvcHkoKSk7CiB9CiAKIHZv
aWQgRGF0YWJhc2VUcmFja2VyOjpkb25lRGVsZXRpbmdEYXRhYmFzZShjb25zdCBTZWN1cml0eU9y
aWdpbkRhdGEmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lKQpAQCAtMTAyMSwyMyArOTkzLDIz
IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpkb25lRGVsZXRpbmdEYXRhYmFzZShjb25zdCBTZWN1
cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgY29uCiAgICAgaWYgKGl0ZXJhdG9yID09IG1fYmVpbmdE
ZWxldGVkLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQoaXRlcmF0b3ItPnZh
bHVlLT5jb250YWlucyhuYW1lKSk7Ci0gICAgaXRlcmF0b3ItPnZhbHVlLT5yZW1vdmUobmFtZSk7
Ci0gICAgaWYgKGl0ZXJhdG9yLT52YWx1ZS0+aXNFbXB0eSgpKQorICAgIEFTU0VSVChpdGVyYXRv
ci0+dmFsdWUuY29udGFpbnMobmFtZSkpOworICAgIGl0ZXJhdG9yLT52YWx1ZS5yZW1vdmUobmFt
ZSk7CisgICAgaWYgKGl0ZXJhdG9yLT52YWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgIG1fYmVpbmdE
ZWxldGVkLnJlbW92ZShpdGVyYXRvcik7CiB9CiAKIGJvb2wgRGF0YWJhc2VUcmFja2VyOjppc0Rl
bGV0aW5nRGF0YWJhc2UoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4sIGNvbnN0IFN0
cmluZyYgbmFtZSkKIHsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUd1YXJkLmlzSGVsZCgpKTsKLSAg
ICBhdXRvKiBuYW1lU2V0ID0gbV9iZWluZ0RlbGV0ZWQuZ2V0KG9yaWdpbik7Ci0gICAgcmV0dXJu
IG5hbWVTZXQgJiYgbmFtZVNldC0+Y29udGFpbnMobmFtZSk7CisgICAgQVNTRVJUKCFtX2RhdGFi
YXNlR3VhcmQuaXNIZWxkKCkpOworICAgIGF1dG8gaXRlcmF0b3IgPSBtX2JlaW5nRGVsZXRlZC5m
aW5kKG9yaWdpbik7CisgICAgcmV0dXJuIGl0ZXJhdG9yICE9IG1fYmVpbmdEZWxldGVkLmVuZCgp
ICYmIGl0ZXJhdG9yLT52YWx1ZS5jb250YWlucyhuYW1lKTsKIH0KIAogYm9vbCBEYXRhYmFzZVRy
YWNrZXI6OmNhbkRlbGV0ZU9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbikK
IHsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUd1YXJkLmlzSGVsZCgpKTsKLSAgICByZXR1cm4gIShp
c0RlbGV0aW5nT3JpZ2luKG9yaWdpbikgfHwgbV9iZWluZ0NyZWF0ZWQuZ2V0KG9yaWdpbikpOwor
ICAgIEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLmlzSGVsZCgpKTsKKyAgICByZXR1cm4gIShpc0Rl
bGV0aW5nT3JpZ2luKG9yaWdpbikgfHwgbV9iZWluZ0NyZWF0ZWQuY29udGFpbnMob3JpZ2luKSk7
CiB9CiAKIGJvb2wgRGF0YWJhc2VUcmFja2VyOjppc0RlbGV0aW5nT3JpZ2luKGNvbnN0IFNlY3Vy
aXR5T3JpZ2luRGF0YSYgb3JpZ2luKQpAQCAtMTEzMywxMiArMTEwNSwxMCBAQCBib29sIERhdGFi
YXNlVHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2VGaWxlKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYg
b3JpZ2luLCBjb25zdAogICAgIC8vIGR1cmluZyB0aGUgc3luY2hyb25vdXMgRGF0YWJhc2VUaHJl
YWQgY2FsbCBpdCB0cmlnZ2Vycy4KICAgICB7CiAgICAgICAgIExvY2tlciBvcGVuRGF0YWJhc2VN
YXBMb2NrIHsgbV9vcGVuRGF0YWJhc2VNYXBHdWFyZCB9OwotICAgICAgICBpZiAobV9vcGVuRGF0
YWJhc2VNYXApIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBuYW1lTWFwID0gbV9vcGVuRGF0YWJh
c2VNYXAtPmdldChvcmlnaW4pKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8qIGRhdGFiYXNl
U2V0ID0gbmFtZU1hcC0+Z2V0KG5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoYXV0
byYgZGF0YWJhc2UgOiAqZGF0YWJhc2VTZXQpCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWxl
dGVkRGF0YWJhc2VzLmFwcGVuZCgqZGF0YWJhc2UpOwotICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBtX29wZW5EYXRhYmFzZU1hcC5maW5kKG9yaWdpbik7IGl0
ZXJhdG9yICE9IG1fb3BlbkRhdGFiYXNlTWFwLmJlZ2luKCkpIHsKKyAgICAgICAgICAgIGlmIChh
dXRvIGlubmVySXRlcmF0b3IgPSBpdGVyYXRvci0+dmFsdWUuZmluZChuYW1lKTsgaW5uZXJJdGVy
YXRvciAhPSBpdGVyYXRvci0+dmFsdWUuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGF1
dG8mIGRhdGFiYXNlIDogaW5uZXJJdGVyYXRvci0+dmFsdWUpCisgICAgICAgICAgICAgICAgICAg
IGRlbGV0ZWREYXRhYmFzZXMuYXBwZW5kKCpkYXRhYmFzZSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CkBAIC0xMTkxLDQ4ICsxMTYxLDQ2IEBAIHZvaWQgRGF0YWJhc2VUcmFja2Vy
OjpyZW1vdmVEZWxldGVkT3BlbmVkRGF0YWJhc2VzKCkgV1RGX0lHTk9SRVNfVEhSRUFEX1NBRkVU
WV9BCiAgICAgLy8gZHVyaW5nIHRoZSBzeW5jaHJvbm91cyBEYXRhYmFzZVRocmVhZCBjYWxsIGl0
IHRyaWdnZXJzLgogICAgIHsKICAgICAgICAgTG9ja2VyIG9wZW5EYXRhYmFzZU1hcExvY2sgeyBt
X29wZW5EYXRhYmFzZU1hcEd1YXJkIH07Ci0gICAgICAgIGlmIChtX29wZW5EYXRhYmFzZU1hcCkg
ewotICAgICAgICAgICAgZm9yIChhdXRvJiBvcGVuRGF0YWJhc2UgOiAqbV9vcGVuRGF0YWJhc2VN
YXApIHsKLSAgICAgICAgICAgICAgICBhdXRvJiBvcmlnaW4gPSBvcGVuRGF0YWJhc2Uua2V5Owot
ICAgICAgICAgICAgICAgIERhdGFiYXNlTmFtZU1hcCogZGF0YWJhc2VOYW1lTWFwID0gb3BlbkRh
dGFiYXNlLnZhbHVlOwotICAgICAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGRlbGV0ZWREYXRh
YmFzZU5hbWVzRm9yVGhpc09yaWdpbjsKLQotICAgICAgICAgICAgICAgIC8vIExvb3AgdGhyb3Vn
aCBhbGwgb3BlbmVkIGRhdGFiYXNlcyBpbiB0aGlzIG9yaWdpbi4gIEdldCB0aGUgY3VycmVudCBk
YXRhYmFzZSBmaWxlIHBhdGggb2YgZWFjaCBkYXRhYmFzZSBhbmQgc2VlIGlmCi0gICAgICAgICAg
ICAgICAgLy8gaXQgc3RpbGwgbWF0Y2hlcyB0aGUgcGF0aCBzdG9yZWQgaW4gdGhlIG9wZW5lZCBk
YXRhYmFzZSBvYmplY3QuCi0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiBkYXRhYmFzZXMgOiAq
ZGF0YWJhc2VOYW1lTWFwKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBkYXRhYmFzZU5h
bWUgPSBkYXRhYmFzZXMua2V5OwotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGF0YWJhc2VG
aWxlTmFtZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8gc3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcGF0aCBGUk9NIERhdGFiYXNlcyBXSEVSRSBv
cmlnaW49PyBBTkQgbmFtZT0/OyJfcykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRl
bWVudC0+YmluZFRleHQoMSwgb3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwgZGF0YWJhc2VOYW1lKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9X
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFiYXNlRmlsZU5hbWUgPSBzdGF0ZW1l
bnQtPmNvbHVtblRleHQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgZm91bmREZWxldGVkRGF0YWJhc2UgPSBm
YWxzZTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBkYiA6ICpkYXRhYmFzZXMudmFs
dWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBkb25lIGlmIHRoaXMgZGF0
YWJhc2UgaGFzIGFscmVhZHkgYmVlbiBtYXJrZWQgYXMgZGVsZXRlZC4KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChkYi0+ZGVsZXRlZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyBJZiB0aGlzIGRhdGFiYXNlIGhhcyBiZWVuIGRlbGV0ZWQgb3IgaWYgaXRzIGRhdGFi
YXNlIGZpbGUgbm8gbG9uZ2VyIG1hdGNoZXMgdGhlIGN1cnJlbnQgdmVyc2lvbiwgdGhpcyBkYXRh
YmFzZSBpcyBubyBsb25nZXIgdmFsaWQgYW5kIGl0IHNob3VsZCBiZSBtYXJrZWQgYXMgZGVsZXRl
ZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhYmFzZUZpbGVOYW1lLmlzTnVsbCgp
IHx8IGRhdGFiYXNlRmlsZU5hbWUgIT0gRmlsZVN5c3RlbTo6cGF0aEZpbGVOYW1lKGRiLT5maWxl
TmFtZUlzb2xhdGVkQ29weSgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0
ZWREYXRhYmFzZXMuYXBwZW5kKGRiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Vu
ZERlbGV0ZWREYXRhYmFzZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgIGZvciAoYXV0byYgb3BlbkRhdGFiYXNlIDogbV9vcGVuRGF0YWJhc2VNYXApIHsKKyAgICAg
ICAgICAgIGF1dG8mIG9yaWdpbiA9IG9wZW5EYXRhYmFzZS5rZXk7CisgICAgICAgICAgICBhdXRv
JiBkYXRhYmFzZU5hbWVNYXAgPSBvcGVuRGF0YWJhc2UudmFsdWU7CisgICAgICAgICAgICBWZWN0
b3I8U3RyaW5nPiBkZWxldGVkRGF0YWJhc2VOYW1lc0ZvclRoaXNPcmlnaW47CisKKyAgICAgICAg
ICAgIC8vIExvb3AgdGhyb3VnaCBhbGwgb3BlbmVkIGRhdGFiYXNlcyBpbiB0aGlzIG9yaWdpbi4g
R2V0IHRoZSBjdXJyZW50IGRhdGFiYXNlIGZpbGUgcGF0aCBvZiBlYWNoIGRhdGFiYXNlIGFuZCBz
ZWUgaWYKKyAgICAgICAgICAgIC8vIGl0IHN0aWxsIG1hdGNoZXMgdGhlIHBhdGggc3RvcmVkIGlu
IHRoZSBvcGVuZWQgZGF0YWJhc2Ugb2JqZWN0LgorICAgICAgICAgICAgZm9yIChhdXRvJiBkYXRh
YmFzZXMgOiBkYXRhYmFzZU5hbWVNYXApIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZGF0YWJh
c2VOYW1lID0gZGF0YWJhc2VzLmtleTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZGF0YWJhc2VG
aWxlTmFtZTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBwYXRoIEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdp
bj0/IEFORCBuYW1lPT87Il9zKSkgeworICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQtPmJp
bmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSk7CisgICAgICAgICAgICAgICAg
ICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwgZGF0YWJhc2VOYW1lKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhYmFzZUZpbGVOYW1lID0gc3RhdGVtZW50LT5jb2x1bW5UZXh0KDApOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJvb2wgZm91bmREZWxldGVkRGF0
YWJhc2UgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGRiIDogZGF0YWJhc2Vz
LnZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBkb25lIGlmIHRoaXMgZGF0
YWJhc2UgaGFzIGFscmVhZHkgYmVlbiBtYXJrZWQgYXMgZGVsZXRlZC4KKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGRiLT5kZWxldGVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGRhdGFiYXNlIGhhcyBiZWVuIGRl
bGV0ZWQgb3IgaWYgaXRzIGRhdGFiYXNlIGZpbGUgbm8gbG9uZ2VyIG1hdGNoZXMgdGhlIGN1cnJl
bnQgdmVyc2lvbiwgdGhpcyBkYXRhYmFzZSBpcyBubyBsb25nZXIgdmFsaWQgYW5kIGl0IHNob3Vs
ZCBiZSBtYXJrZWQgYXMgZGVsZXRlZC4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFiYXNl
RmlsZU5hbWUuaXNOdWxsKCkgfHwgZGF0YWJhc2VGaWxlTmFtZSAhPSBGaWxlU3lzdGVtOjpwYXRo
RmlsZU5hbWUoZGItPmZpbGVOYW1lSXNvbGF0ZWRDb3B5KCkpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBkZWxldGVkRGF0YWJhc2VzLmFwcGVuZChkYik7CisgICAgICAgICAgICAgICAgICAg
ICAgICBmb3VuZERlbGV0ZWREYXRhYmFzZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBkYXRh
YmFzZSBubyBsb25nZXIgZXhpc3RzLCB3ZSBzaG91bGQgcmVtZW1iZXIgdG8gc2VuZCB0aGF0IGlu
Zm9ybWF0aW9uIHRvIHRoZSBjbGllbnQgbGF0ZXIuCi0gICAgICAgICAgICAgICAgICAgIGlmICht
X2NsaWVudCAmJiBmb3VuZERlbGV0ZWREYXRhYmFzZSAmJiBkYXRhYmFzZUZpbGVOYW1lLmlzTnVs
bCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlZERhdGFiYXNlTmFtZXNGb3JUaGlz
T3JpZ2luLmFwcGVuZChkYXRhYmFzZU5hbWUpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIWRlbGV0ZWREYXRhYmFzZU5hbWVzRm9yVGhp
c09yaWdpbi5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZWREYXRhYmFzZU5h
bWVzLmFwcGVuZCh7IG9yaWdpbiwgV1RGTW92ZShkZWxldGVkRGF0YWJhc2VOYW1lc0ZvclRoaXNP
cmlnaW4pIH0pOworCisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGRhdGFiYXNlIG5vIGxvbmdl
ciBleGlzdHMsIHdlIHNob3VsZCByZW1lbWJlciB0byBzZW5kIHRoYXQgaW5mb3JtYXRpb24gdG8g
dGhlIGNsaWVudCBsYXRlci4KKyAgICAgICAgICAgICAgICBpZiAobV9jbGllbnQgJiYgZm91bmRE
ZWxldGVkRGF0YWJhc2UgJiYgZGF0YWJhc2VGaWxlTmFtZS5pc051bGwoKSkKKyAgICAgICAgICAg
ICAgICAgICAgZGVsZXRlZERhdGFiYXNlTmFtZXNGb3JUaGlzT3JpZ2luLmFwcGVuZChkYXRhYmFz
ZU5hbWUpOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWRlbGV0ZWREYXRhYmFz
ZU5hbWVzRm9yVGhpc09yaWdpbi5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgZGVsZXRlZERh
dGFiYXNlTmFtZXMuYXBwZW5kKHsgb3JpZ2luLCBXVEZNb3ZlKGRlbGV0ZWREYXRhYmFzZU5hbWVz
Rm9yVGhpc09yaWdpbikgfSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBmb3IgKGF1
dG8mIGRlbGV0ZWREYXRhYmFzZSA6IGRlbGV0ZWREYXRhYmFzZXMpCiAgICAgICAgIGRlbGV0ZWRE
YXRhYmFzZS0+bWFya0FzRGVsZXRlZEFuZENsb3NlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5oCmluZGV4IGJkY2Y2ZDA3
ZGQ4YTMzNjVkYzRhZmViOTQzZmNiOGI1YWNlOTRmNmUuLjE4M2FjYjJhNGY3NGY2ZjgzNmQ1MTAz
NjgwNzY2MjIxODViYzE1ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuaApAQCAtMTU5LDExICsxNTksMTEgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGRlbGV0ZU9yaWdpbkxvY2tGb3IoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRh
JikgV1RGX1JFUVVJUkVTX0xPQ0sobV9kYXRhYmFzZUd1YXJkKTsKIAogICAgIHVzaW5nIERhdGFi
YXNlU2V0ID0gSGFzaFNldDxEYXRhYmFzZSo+OwotICAgIHVzaW5nIERhdGFiYXNlTmFtZU1hcCA9
IEhhc2hNYXA8U3RyaW5nLCBEYXRhYmFzZVNldCo+OwotICAgIHVzaW5nIERhdGFiYXNlT3JpZ2lu
TWFwID0gSGFzaE1hcDxTZWN1cml0eU9yaWdpbkRhdGEsIERhdGFiYXNlTmFtZU1hcCo+OworICAg
IHVzaW5nIERhdGFiYXNlTmFtZU1hcCA9IEhhc2hNYXA8U3RyaW5nLCBEYXRhYmFzZVNldD47Cisg
ICAgdXNpbmcgRGF0YWJhc2VPcmlnaW5NYXAgPSBIYXNoTWFwPFNlY3VyaXR5T3JpZ2luRGF0YSwg
RGF0YWJhc2VOYW1lTWFwPjsKIAogICAgIENoZWNrZWRMb2NrIG1fb3BlbkRhdGFiYXNlTWFwR3Vh
cmQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8RGF0YWJhc2VPcmlnaW5NYXA+IG1fb3Bl
bkRhdGFiYXNlTWFwIFdURl9HVUFSREVEX0JZX0xPQ0sobV9vcGVuRGF0YWJhc2VNYXBHdWFyZCk7
CisgICAgbXV0YWJsZSBEYXRhYmFzZU9yaWdpbk1hcCBtX29wZW5EYXRhYmFzZU1hcCBXVEZfR1VB
UkRFRF9CWV9MT0NLKG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQpOwogCiAgICAgLy8gVGhpcyBsb2Nr
IHByb3RlY3RzIG1fZGF0YWJhc2UsIG1fb3JpZ2luTG9ja01hcCwgbV9kYXRhYmFzZURpcmVjdG9y
eVBhdGgsIG1fb3JpZ2luc0JlaW5nRGVsZXRlZCwgbV9iZWluZ0NyZWF0ZWQsIGFuZCBtX2JlaW5n
RGVsZXRlZC4KICAgICBDaGVja2VkTG9jayBtX2RhdGFiYXNlR3VhcmQ7CkBAIC0xNzYsOCArMTc2
LDggQEAgcHJpdmF0ZToKIAogICAgIERhdGFiYXNlTWFuYWdlckNsaWVudCogbV9jbGllbnQgeyBu
dWxscHRyIH07CiAKLSAgICBIYXNoTWFwPFNlY3VyaXR5T3JpZ2luRGF0YSwgc3RkOjp1bmlxdWVf
cHRyPEhhc2hDb3VudGVkU2V0PFN0cmluZz4+PiBtX2JlaW5nQ3JlYXRlZCBXVEZfR1VBUkRFRF9C
WV9MT0NLKG1fZGF0YWJhc2VHdWFyZCk7Ci0gICAgSGFzaE1hcDxTZWN1cml0eU9yaWdpbkRhdGEs
IHN0ZDo6dW5pcXVlX3B0cjxIYXNoU2V0PFN0cmluZz4+PiBtX2JlaW5nRGVsZXRlZCBXVEZfR1VB
UkRFRF9CWV9MT0NLKG1fZGF0YWJhc2VHdWFyZCk7CisgICAgSGFzaE1hcDxTZWN1cml0eU9yaWdp
bkRhdGEsIEhhc2hDb3VudGVkU2V0PFN0cmluZz4+IG1fYmVpbmdDcmVhdGVkIFdURl9HVUFSREVE
X0JZX0xPQ0sobV9kYXRhYmFzZUd1YXJkKTsKKyAgICBIYXNoTWFwPFNlY3VyaXR5T3JpZ2luRGF0
YSwgSGFzaFNldDxTdHJpbmc+PiBtX2JlaW5nRGVsZXRlZCBXVEZfR1VBUkRFRF9CWV9MT0NLKG1f
ZGF0YWJhc2VHdWFyZCk7CiAgICAgSGFzaFNldDxTZWN1cml0eU9yaWdpbkRhdGE+IG1fb3JpZ2lu
c0JlaW5nRGVsZXRlZCBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fZGF0YWJhc2VHdWFyZCk7CiAgICAg
Ym9vbCBpc0RlbGV0aW5nRGF0YWJhc2VPck9yaWdpbkZvcihjb25zdCBTZWN1cml0eU9yaWdpbkRh
dGEmLCBjb25zdCBTdHJpbmcmIG5hbWUpIFdURl9SRVFVSVJFU19MT0NLKG1fZGF0YWJhc2VHdWFy
ZCk7CiAgICAgdm9pZCByZWNvcmRDcmVhdGluZ0RhdGFiYXNlKGNvbnN0IFNlY3VyaXR5T3JpZ2lu
RGF0YSYsIGNvbnN0IFN0cmluZyYgbmFtZSkgV1RGX1JFUVVJUkVTX0xPQ0sobV9kYXRhYmFzZUd1
YXJkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dpbmRvd1Byb3h5
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dpbmRvd1Byb3h5LmNwcAppbmRleCA1
YzFkZjNmYjhkNDQ4YmJiMGM2YTFjYTAzYzZiZjM5N2I4YmM2NmMxLi5iMzEzMGI3NzQ2MWM4NWNm
OWU4YjRmNDJjZDgwZDgzMjE0OTAyZTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9XaW5kb3dQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
V2luZG93UHJveHkuY3BwCkBAIC01NCwxNCArNTQsMTMgQEAgc3RhdGljIHZvaWQgY29sbGVjdEdh
cmJhZ2VBZnRlcldpbmRvd1Byb3h5RGVzdHJ1Y3Rpb24oKQogCiBXaW5kb3dQcm94eTo6V2luZG93
UHJveHkoQWJzdHJhY3RGcmFtZSYgZnJhbWUpCiAgICAgOiBtX2ZyYW1lKG1ha2VXZWFrUHRyKGZy
YW1lKSkKLSAgICAsIG1fanNXaW5kb3dQcm94aWVzKG1ha2VVbmlxdWVSZWY8UHJveHlNYXA+KCkp
CiB7CiB9CiAKIFdpbmRvd1Byb3h5Ojp+V2luZG93UHJveHkoKQogewogICAgIEFTU0VSVCghbV9m
cmFtZSk7Ci0gICAgQVNTRVJUKG1fanNXaW5kb3dQcm94aWVzLT5pc0VtcHR5KCkpOworICAgIEFT
U0VSVChtX2pzV2luZG93UHJveGllcy5pc0VtcHR5KCkpOwogfQogCiBBYnN0cmFjdEZyYW1lKiBX
aW5kb3dQcm94eTo6ZnJhbWUoKSBjb25zdApAQCAtNzYsOSArNzUsOSBAQCB2b2lkIFdpbmRvd1By
b3h5OjpkZXRhY2hGcm9tRnJhbWUoKQogICAgIG1fZnJhbWUgPSBudWxscHRyOwogCiAgICAgLy8g
SXQncyBsaWtlbHkgdGhhdCBkZXN0cm95aW5nIHdpbmRvd1Byb3hpZXMgd2lsbCBjcmVhdGUgYSBs
b3Qgb2YgZ2FyYmFnZS4KLSAgICBpZiAoIW1fanNXaW5kb3dQcm94aWVzLT5pc0VtcHR5KCkpIHsK
LSAgICAgICAgd2hpbGUgKCFtX2pzV2luZG93UHJveGllcy0+aXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICBhdXRvIGl0ID0gbV9qc1dpbmRvd1Byb3hpZXMtPmJlZ2luKCk7CisgICAgaWYgKCFtX2pz
V2luZG93UHJveGllcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgd2hpbGUgKCFtX2pzV2luZG93UHJv
eGllcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGF1dG8gaXQgPSBtX2pzV2luZG93UHJveGll
cy5iZWdpbigpOwogICAgICAgICAgICAgaXQtPnZhbHVlLT53aW5kb3coKS0+c2V0Q29uc29sZUNs
aWVudChudWxscHRyKTsKICAgICAgICAgICAgIGRlc3Ryb3lKU1dpbmRvd1Byb3h5KCppdC0+a2V5
KTsKICAgICAgICAgfQpAQCAtODgsOCArODcsOCBAQCB2b2lkIFdpbmRvd1Byb3h5OjpkZXRhY2hG
cm9tRnJhbWUoKQogCiB2b2lkIFdpbmRvd1Byb3h5OjpkZXN0cm95SlNXaW5kb3dQcm94eShET01X
cmFwcGVyV29ybGQmIHdvcmxkKQogewotICAgIEFTU0VSVChtX2pzV2luZG93UHJveGllcy0+Y29u
dGFpbnMoJndvcmxkKSk7Ci0gICAgbV9qc1dpbmRvd1Byb3hpZXMtPnJlbW92ZSgmd29ybGQpOwor
ICAgIEFTU0VSVChtX2pzV2luZG93UHJveGllcy5jb250YWlucygmd29ybGQpKTsKKyAgICBtX2pz
V2luZG93UHJveGllcy5yZW1vdmUoJndvcmxkKTsKICAgICB3b3JsZC5kaWREZXN0cm95V2luZG93
UHJveHkodGhpcyk7CiB9CiAKQEAgLTk3LDIwICs5NiwyMCBAQCBKU1dpbmRvd1Byb3h5JiBXaW5k
b3dQcm94eTo6Y3JlYXRlSlNXaW5kb3dQcm94eShET01XcmFwcGVyV29ybGQmIHdvcmxkKQogewog
ICAgIEFTU0VSVChtX2ZyYW1lKTsKIAotICAgIEFTU0VSVCghbV9qc1dpbmRvd1Byb3hpZXMtPmNv
bnRhaW5zKCZ3b3JsZCkpOworICAgIEFTU0VSVCghbV9qc1dpbmRvd1Byb3hpZXMuY29udGFpbnMo
JndvcmxkKSk7CiAgICAgQVNTRVJUKG1fZnJhbWUtPndpbmRvdygpKTsKIAogICAgIFZNJiB2bSA9
IHdvcmxkLnZtKCk7CiAKICAgICBTdHJvbmc8SlNXaW5kb3dQcm94eT4ganNXaW5kb3dQcm94eSh2
bSwgJkpTV2luZG93UHJveHk6OmNyZWF0ZSh2bSwgKm1fZnJhbWUtPndpbmRvdygpLCB3b3JsZCkp
OwotICAgIG1fanNXaW5kb3dQcm94aWVzLT5hZGQoJndvcmxkLCBqc1dpbmRvd1Byb3h5KTsKKyAg
ICBtX2pzV2luZG93UHJveGllcy5hZGQoJndvcmxkLCBqc1dpbmRvd1Byb3h5KTsKICAgICB3b3Js
ZC5kaWRDcmVhdGVXaW5kb3dQcm94eSh0aGlzKTsKICAgICByZXR1cm4gKmpzV2luZG93UHJveHku
Z2V0KCk7CiB9CiAKIFZlY3RvcjxKU0M6OlN0cm9uZzxKU1dpbmRvd1Byb3h5Pj4gV2luZG93UHJv
eHk6OmpzV2luZG93UHJveGllc0FzVmVjdG9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29weVRv
VmVjdG9yKG1fanNXaW5kb3dQcm94aWVzLT52YWx1ZXMoKSk7CisgICAgcmV0dXJuIGNvcHlUb1Zl
Y3RvcihtX2pzV2luZG93UHJveGllcy52YWx1ZXMoKSk7CiB9CiAKIEpTRE9NR2xvYmFsT2JqZWN0
KiBXaW5kb3dQcm94eTo6Z2xvYmFsT2JqZWN0KERPTVdyYXBwZXJXb3JsZCYgd29ybGQpCkBAIC0x
MzMsNyArMTMyLDcgQEAgSlNXaW5kb3dQcm94eSYgV2luZG93UHJveHk6OmNyZWF0ZUpTV2luZG93
UHJveHlXaXRoSW5pdGlhbGl6ZWRTY3JpcHQoRE9NV3JhcHBlclcKIAogdm9pZCBXaW5kb3dQcm94
eTo6Y2xlYXJKU1dpbmRvd1Byb3hpZXNOb3RNYXRjaGluZ0RPTVdpbmRvdyhBYnN0cmFjdERPTVdp
bmRvdyogbmV3RE9NV2luZG93LCBib29sIGdvaW5nSW50b0JhY2tGb3J3YXJkQ2FjaGUpCiB7Ci0g
ICAgaWYgKG1fanNXaW5kb3dQcm94aWVzLT5pc0VtcHR5KCkpCisgICAgaWYgKG1fanNXaW5kb3dQ
cm94aWVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSlNMb2NrSG9sZGVyIGxv
Y2soY29tbW9uVk0oKSk7CkBAIC0xNTksNyArMTU4LDcgQEAgdm9pZCBXaW5kb3dQcm94eTo6c2V0
RE9NV2luZG93KEFic3RyYWN0RE9NV2luZG93KiBuZXdET01XaW5kb3cpCiB7CiAgICAgQVNTRVJU
KG5ld0RPTVdpbmRvdyk7CiAKLSAgICBpZiAobV9qc1dpbmRvd1Byb3hpZXMtPmlzRW1wdHkoKSkK
KyAgICBpZiAobV9qc1dpbmRvd1Byb3hpZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBBU1NFUlQobV9mcmFtZSk7CkBAIC0xOTQsNyArMTkzLDcgQEAgdm9pZCBXaW5kb3dQcm94
eTo6c2V0RE9NV2luZG93KEFic3RyYWN0RE9NV2luZG93KiBuZXdET01XaW5kb3cpCiAKIHZvaWQg
V2luZG93UHJveHk6OmF0dGFjaERlYnVnZ2VyKEpTQzo6RGVidWdnZXIqIGRlYnVnZ2VyKQogewot
ICAgIGZvciAoYXV0byYgd2luZG93UHJveHkgOiBtX2pzV2luZG93UHJveGllcy0+dmFsdWVzKCkp
CisgICAgZm9yIChhdXRvJiB3aW5kb3dQcm94eSA6IG1fanNXaW5kb3dQcm94aWVzLnZhbHVlcygp
KQogICAgICAgICB3aW5kb3dQcm94eS0+YXR0YWNoRGVidWdnZXIoZGVidWdnZXIpOwogfQogCkBA
IC0yMDUsMTcgKzIwNCwxNyBAQCBBYnN0cmFjdERPTVdpbmRvdyogV2luZG93UHJveHk6OndpbmRv
dygpIGNvbnN0CiAKIFdpbmRvd1Byb3h5OjpQcm94eU1hcDo6VmFsdWVzQ29uc3RJdGVyYXRvclJh
bmdlIFdpbmRvd1Byb3h5Ojpqc1dpbmRvd1Byb3hpZXMoKSBjb25zdAogewotICAgIHJldHVybiBt
X2pzV2luZG93UHJveGllcy0+dmFsdWVzKCk7CisgICAgcmV0dXJuIG1fanNXaW5kb3dQcm94aWVz
LnZhbHVlcygpOwogfQogCiBXaW5kb3dQcm94eTo6UHJveHlNYXAgV2luZG93UHJveHk6OnJlbGVh
c2VKU1dpbmRvd1Byb3hpZXMoKQogewotICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fanNXaW5k
b3dQcm94aWVzLCBtYWtlVW5pcXVlUmVmPFByb3h5TWFwPigpKTsKKyAgICByZXR1cm4gc3RkOjpl
eGNoYW5nZShtX2pzV2luZG93UHJveGllcywgeyB9KTsKIH0KIAogdm9pZCBXaW5kb3dQcm94eTo6
c2V0SlNXaW5kb3dQcm94aWVzKFByb3h5TWFwJiYgd2luZG93UHJveGllcykKIHsKLSAgICBtX2pz
V2luZG93UHJveGllcyA9IG1ha2VVbmlxdWVSZWY8UHJveHlNYXA+KFdURk1vdmUod2luZG93UHJv
eGllcykpOworICAgIG1fanNXaW5kb3dQcm94aWVzID0gV1RGTW92ZSh3aW5kb3dQcm94aWVzKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvV2luZG93UHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dp
bmRvd1Byb3h5LmgKaW5kZXggMTE4MTc3YzVlNDQ3M2Y3Y2NmNzZiMTVhMGI1NWQ0YTRkMTcyMWQ2
Zi4uZGIwMzQ3NDQyZWZkNTlkMzQxOGE5OGI4N2ZhMGJhMmRjNzcyM2JlYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2luZG93UHJveHkuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9XaW5kb3dQcm94eS5oCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvU3Ryb25nLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KICNp
bmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTc0LDggKzczLDgg
QEAgcHVibGljOgogCiAgICAgSlNXaW5kb3dQcm94eSogZXhpc3RpbmdKU1dpbmRvd1Byb3h5KERP
TVdyYXBwZXJXb3JsZCYgd29ybGQpIGNvbnN0CiAgICAgewotICAgICAgICBhdXRvIGl0ID0gbV9q
c1dpbmRvd1Byb3hpZXMtPmZpbmQoJndvcmxkKTsKLSAgICAgICAgcmV0dXJuIChpdCAhPSBtX2pz
V2luZG93UHJveGllcy0+ZW5kKCkpID8gaXQtPnZhbHVlLmdldCgpIDogbnVsbHB0cjsKKyAgICAg
ICAgYXV0byBpdCA9IG1fanNXaW5kb3dQcm94aWVzLmZpbmQoJndvcmxkKTsKKyAgICAgICAgcmV0
dXJuIGl0ICE9IG1fanNXaW5kb3dQcm94aWVzLmVuZCgpID8gaXQtPnZhbHVlLmdldCgpIDogbnVs
bHB0cjsKICAgICB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KERPTVdyYXBwZXJXb3JsZCYpOwpAQCAtOTYsNyArOTUsNyBAQCBwcml2YXRlOgog
ICAgIFdFQkNPUkVfRVhQT1JUIEpTV2luZG93UHJveHkmIGNyZWF0ZUpTV2luZG93UHJveHlXaXRo
SW5pdGlhbGl6ZWRTY3JpcHQoRE9NV3JhcHBlcldvcmxkJik7CiAKICAgICBXZWFrUHRyPEFic3Ry
YWN0RnJhbWU+IG1fZnJhbWU7Ci0gICAgVW5pcXVlUmVmPFByb3h5TWFwPiBtX2pzV2luZG93UHJv
eGllczsKKyAgICBQcm94eU1hcCBtX2pzV2luZG93UHJveGllczsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbi5jcHAKaW5kZXggYmFjNTI5ODQxMDJlYjAwNDVkYzY1MzVhZTY4ZTY4YjliNDY2
OGQwMy4uZWMzNWM0MDIyZjUzZTgyNzNmMzU4M2QxYzY2MzBkODQyMDU3Yzg4NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKQEAg
LTE3NTQsMTMgKzE3NTQsMTMgQEAgc3RhdGljIFJlZjxDU1NWYWx1ZUxpc3Q+IGNvbnRlbnRUb0NT
U1ZhbHVlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIAogc3RhdGljIFJlZjxDU1NWYWx1ZT4g
Y291bnRlclRvQ1NTVmFsdWUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SUQpCiB7Ci0gICAgYXV0byogbWFwID0gc3R5bGUuY291bnRlckRpcmVjdGl2ZXMo
KTsKLSAgICBpZiAoIW1hcCkKKyAgICBhdXRvJiBtYXAgPSBzdHlsZS5jb3VudGVyRGlyZWN0aXZl
cygpOworICAgIGlmIChtYXAuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKIAogICAg
IGF1dG8mIGNzc1ZhbHVlUG9vbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCk7CiAgICAgYXV0
byBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwotICAgIGZvciAo
YXV0byYga2V5VmFsdWUgOiAqbWFwKSB7CisgICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6IG1hcCkg
ewogICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKGtleVZhbHVl
LmtleSwgQ1NTVW5pdFR5cGU6OkNTU19TVFJJTkcpKTsKICAgICAgICAgZG91YmxlIG51bWJlciA9
IChwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5Q291bnRlckluY3JlbWVudCA/IGtleVZhbHVlLnZh
bHVlLmluY3JlbWVudFZhbHVlIDoga2V5VmFsdWUudmFsdWUucmVzZXRWYWx1ZSkudmFsdWVPcigw
KTsKICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShudW1iZXIs
IENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IDA2YzEzNDg5NjAxYTgy
YjI3ZTJlYjQ3ZTM0MWM3YjQzZWJlN2IyZTcuLjdhZmRkZDk4MWE3ODRiNDY3Y2VjMjhjYzI3ODVj
YTZjOTc1ZTQ4OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENT
U1N0eWxlRGVjbGFyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNl
dENTU1N0eWxlRGVjbGFyYXRpb24uY3BwCkBAIC0zMzMsMTAgKzMzMyw3IEBAIFJlZlB0cjxEZXBy
ZWNhdGVkQ1NTT01WYWx1ZT4gUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjp3cmFwRm9y
RGVwcmVjYXRlZENTCiAKICAgICAvLyBUaGUgbWFwIGlzIGhlcmUgdG8gbWFpbnRhaW4gdGhlIG9i
amVjdCBpZGVudGl0eSBvZiB0aGUgQ1NTVmFsdWVzIG92ZXIgbXVsdGlwbGUgaW52b2NhdGlvbnMu
CiAgICAgLy8gRklYTUU6IEl0IGlzIGxpa2VseSB0aGF0IHRoZSBpZGVudGl0eSBpcyBub3QgaW1w
b3J0YW50IGZvciB3ZWIgY29tcGF0aWJpbGl0eSBhbmQgdGhpcyBjb2RlIHNob3VsZCBiZSByZW1v
dmVkLgotICAgIGlmICghbV9jc3NvbVZhbHVlV3JhcHBlcnMpCi0gICAgICAgIG1fY3Nzb21WYWx1
ZVdyYXBwZXJzID0gbWFrZVVuaXF1ZTxIYXNoTWFwPENTU1ZhbHVlKiwgV2Vha1B0cjxEZXByZWNh
dGVkQ1NTT01WYWx1ZT4+PigpOwotICAgIAotICAgIGF1dG8mIGNsb25lZFZhbHVlID0gbV9jc3Nv
bVZhbHVlV3JhcHBlcnMtPmFkZChpbnRlcm5hbFZhbHVlLCBXZWFrUHRyPERlcHJlY2F0ZWRDU1NP
TVZhbHVlPigpKS5pdGVyYXRvci0+dmFsdWU7CisgICAgYXV0byYgY2xvbmVkVmFsdWUgPSBtX2Nz
c29tVmFsdWVXcmFwcGVycy5hZGQoaW50ZXJuYWxWYWx1ZSwgV2Vha1B0cjxEZXByZWNhdGVkQ1NT
T01WYWx1ZT4oKSkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmIChjbG9uZWRWYWx1ZSkKICAgICAg
ICAgcmV0dXJuIGNsb25lZFZhbHVlLmdldCgpOwogCkBAIC00MDAsNyArMzk3LDcgQEAgdm9pZCBT
dHlsZVJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uOjpkaWRNdXRhdGUoTXV0YXRpb25UeXBlIHR5cGUp
CiAgICAgQVNTRVJUKG1fcGFyZW50UnVsZS0+cGFyZW50U3R5bGVTaGVldCgpKTsKIAogICAgIGlm
ICh0eXBlID09IFByb3BlcnR5Q2hhbmdlZCkKLSAgICAgICAgbV9jc3NvbVZhbHVlV3JhcHBlcnMg
PSBudWxscHRyOworICAgICAgICBtX2Nzc29tVmFsdWVXcmFwcGVycy5jbGVhcigpOwogCiAgICAg
Ly8gU3R5bGUgc2hlZXQgbXV0YXRpb24gbmVlZHMgdG8gYmUgc2lnbmFsZWQgZXZlbiBpZiB0aGUg
Y2hhbmdlIGZhaWxlZC4gd2lsbE11dGF0ZSovZGlkTXV0YXRlKiBtdXN0IHBhaXIuCiAgICAgbV9w
YXJlbnRSdWxlLT5wYXJlbnRTdHlsZVNoZWV0KCktPmRpZE11dGF0ZVJ1bGVGcm9tQ1NTU3R5bGVE
ZWNsYXJhdGlvbigpOwpAQCAtNDQzLDcgKzQ0MCw3IEBAIHZvaWQgSW5saW5lQ1NTU3R5bGVEZWNs
YXJhdGlvbjo6ZGlkTXV0YXRlKE11dGF0aW9uVHlwZSB0eXBlKQogICAgIGlmICh0eXBlID09IE5v
Q2hhbmdlcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jc3NvbVZhbHVlV3JhcHBlcnMgPSBu
dWxscHRyOworICAgIG1fY3Nzb21WYWx1ZVdyYXBwZXJzLmNsZWFyKCk7CiAKICAgICBpZiAoIW1f
cGFyZW50RWxlbWVudCkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUv
Y3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5oCmluZGV4IDYyYThmOTg5YThmYTJj
MWVjMGNkMmZlZjE3ODJiMmIxZTM3M2RhN2QuLjU3OTU5YTMyNzkwNDljMmJlNzIwNzI0ZWUzMzEx
NmFiZTAyMzc2NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENT
U1N0eWxlRGVjbGFyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVydHlTZXRD
U1NTdHlsZURlY2xhcmF0aW9uLmgKQEAgLTU5LDcgKzU5LDcgQEAgcHJvdGVjdGVkOgogICAgIHZp
cnR1YWwgQ1NTUGFyc2VyQ29udGV4dCBjc3NQYXJzZXJDb250ZXh0KCkgY29uc3Q7CiAKICAgICBN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBtX3Byb3BlcnR5U2V0OwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxIYXNoTWFwPENTU1ZhbHVlKiwgV2Vha1B0cjxEZXByZWNhdGVkQ1NTT01WYWx1ZT4+PiBtX2Nz
c29tVmFsdWVXcmFwcGVyczsKKyAgICBIYXNoTWFwPENTU1ZhbHVlKiwgV2Vha1B0cjxEZXByZWNh
dGVkQ1NTT01WYWx1ZT4+IG1fY3Nzb21WYWx1ZVdyYXBwZXJzOwogCiBwcml2YXRlOgogICAgIHZv
aWQgcmVmKCkgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCAwNDdiZWRiZDM1
NDM3MzQ4OTlkMmI4OWMwZWQ5YzBkMmJhNTYwODcwLi4yNjYxMDI2NzQ3YzU1ZDc1M2MwM2QxYzI1
NjJmY2FlMTYzNGIzMTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTg4Nyw3ICs4ODcs
NyBAQCBFbGVtZW50KiBEb2N1bWVudDo6ZWxlbWVudEZvckFjY2Vzc0tleShjb25zdCBTdHJpbmcm
IGtleSkKIAogdm9pZCBEb2N1bWVudDo6YnVpbGRBY2Nlc3NLZXlDYWNoZSgpCiB7Ci0gICAgbV9h
Y2Nlc3NLZXlDYWNoZSA9IG1ha2VVbmlxdWU8SGFzaE1hcDxTdHJpbmcsIEVsZW1lbnQqLCBBU0NJ
SUNhc2VJbnNlbnNpdGl2ZUhhc2g+PihbdGhpc10geworICAgIG1fYWNjZXNzS2V5Q2FjaGUgPSBb
dGhpc10gewogICAgICAgICBIYXNoTWFwPFN0cmluZywgRWxlbWVudCosIEFTQ0lJQ2FzZUluc2Vu
c2l0aXZlSGFzaD4gbWFwOwogICAgICAgICBmb3IgKGF1dG8mIG5vZGUgOiBjb21wb3NlZFRyZWVE
ZXNjZW5kYW50cygqdGhpcykpIHsKICAgICAgICAgICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkp
CkBAIC04OTksMTIgKzg5OSwxMiBAQCB2b2lkIERvY3VtZW50OjpidWlsZEFjY2Vzc0tleUNhY2hl
KCkKICAgICAgICAgICAgIG1hcC5hZGQoa2V5LCAmZWxlbWVudCk7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIG1hcDsKLSAgICB9KCkpOworICAgIH0oKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6
aW52YWxpZGF0ZUFjY2Vzc0tleUNhY2hlU2xvd0Nhc2UoKQogewotICAgIG1fYWNjZXNzS2V5Q2Fj
aGUgPSBudWxscHRyOworICAgIG1fYWNjZXNzS2V5Q2FjaGUgPSBXVEY6Om51bGxvcHQ7CiB9CiAK
IEV4Y2VwdGlvbk9yPFNlbGVjdG9yUXVlcnkmPiBEb2N1bWVudDo6c2VsZWN0b3JRdWVyeUZvclN0
cmluZyhjb25zdCBTdHJpbmcmIHNlbGVjdG9yU3RyaW5nKQpAQCAtMjYzMSwxMSArMjYzMSwxMSBA
QCB2b2lkIERvY3VtZW50Ojp3aWxsQmVSZW1vdmVkRnJvbUZyYW1lKCkKICAgICBjb21tb25UZWFy
ZG93bigpOwogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICBpZiAobV90b3VjaEV2ZW50
VGFyZ2V0cyAmJiBtX3RvdWNoRXZlbnRUYXJnZXRzLT5zaXplKCkgJiYgcGFyZW50RG9jdW1lbnQo
KSkKKyAgICBpZiAoIW1fdG91Y2hFdmVudFRhcmdldHMuaXNFbXB0eSgpICYmIHBhcmVudERvY3Vt
ZW50KCkpCiAgICAgICAgIHBhcmVudERvY3VtZW50KCktPmRpZFJlbW92ZUV2ZW50VGFyZ2V0Tm9k
ZSgqdGhpcyk7CiAjZW5kaWYKIAotICAgIGlmIChtX3doZWVsRXZlbnRUYXJnZXRzICYmIG1fd2hl
ZWxFdmVudFRhcmdldHMtPnNpemUoKSAmJiBwYXJlbnREb2N1bWVudCgpKQorICAgIGlmICghbV93
aGVlbEV2ZW50VGFyZ2V0cy5pc0VtcHR5KCkgJiYgcGFyZW50RG9jdW1lbnQoKSkKICAgICAgICAg
cGFyZW50RG9jdW1lbnQoKS0+ZGlkUmVtb3ZlRXZlbnRUYXJnZXROb2RlKCp0aGlzKTsKIAogICAg
IGlmIChtX21lZGlhUXVlcnlNYXRjaGVyKQpAQCAtMjY4Nyw5ICsyNjg3LDkgQEAgdm9pZCBEb2N1
bWVudDo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKQogICAgICAgICBub2RlLT5yZW1vdmVBbGxF
dmVudExpc3RlbmVycygpOwogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICBtX3RvdWNo
RXZlbnRUYXJnZXRzID0gbnVsbHB0cjsKKyAgICBtX3RvdWNoRXZlbnRUYXJnZXRzLmNsZWFyKCk7
CiAjZW5kaWYKLSAgICBtX3doZWVsRXZlbnRUYXJnZXRzID0gbnVsbHB0cjsKKyAgICBtX3doZWVs
RXZlbnRUYXJnZXRzLmNsZWFyKCk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnN1c3BlbmREZXZpY2VN
b3Rpb25BbmRPcmllbnRhdGlvblVwZGF0ZXMoKQpAQCAtNjgxOCwxNiArNjgxOCwxMyBAQCB2b2lk
IERvY3VtZW50Ojp3aGVlbEV2ZW50SGFuZGxlcnNDaGFuZ2VkKE5vZGUqIG5vZGUpCiAgICAgVU5V
U0VEX1BBUkFNKG5vZGUpOwogI2VuZGlmCiAKLSAgICBib29sIGhhdmVIYW5kbGVycyA9IG1fd2hl
ZWxFdmVudFRhcmdldHMgJiYgIW1fd2hlZWxFdmVudFRhcmdldHMtPmlzRW1wdHkoKTsKKyAgICBi
b29sIGhhdmVIYW5kbGVycyA9ICFtX3doZWVsRXZlbnRUYXJnZXRzLmlzRW1wdHkoKTsKICAgICBw
YWdlLT5jaHJvbWUoKS5jbGllbnQoKS53aGVlbEV2ZW50SGFuZGxlcnNDaGFuZ2VkKGhhdmVIYW5k
bGVycyk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OmRpZEFkZFdoZWVsRXZlbnRIYW5kbGVyKE5vZGUm
IG5vZGUpCiB7Ci0gICAgaWYgKCFtX3doZWVsRXZlbnRUYXJnZXRzKQotICAgICAgICBtX3doZWVs
RXZlbnRUYXJnZXRzID0gbWFrZVVuaXF1ZTxFdmVudFRhcmdldFNldD4oKTsKLQotICAgIG1fd2hl
ZWxFdmVudFRhcmdldHMtPmFkZCgmbm9kZSk7CisgICAgbV93aGVlbEV2ZW50VGFyZ2V0cy5hZGQo
Jm5vZGUpOwogICAgIHdoZWVsRXZlbnRIYW5kbGVyc0NoYW5nZWQoJm5vZGUpOwogCiAgICAgaWYg
KEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCkpCkBAIC02ODU2LDQyICs2ODUzLDI3IEBAIHN0
YXRpYyBib29sIHJlbW92ZUhhbmRsZXJGcm9tU2V0KEV2ZW50VGFyZ2V0U2V0JiBoYW5kbGVyU2V0
LCBOb2RlJiBub2RlLCBFdmVudEhhCiAKIHZvaWQgRG9jdW1lbnQ6OmRpZFJlbW92ZVdoZWVsRXZl
bnRIYW5kbGVyKE5vZGUmIG5vZGUsIEV2ZW50SGFuZGxlclJlbW92YWwgcmVtb3ZhbCkKIHsKLSAg
ICBpZiAoIW1fd2hlZWxFdmVudFRhcmdldHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgh
cmVtb3ZlSGFuZGxlckZyb21TZXQoKm1fd2hlZWxFdmVudFRhcmdldHMsIG5vZGUsIHJlbW92YWwp
KQorICAgIGlmICghcmVtb3ZlSGFuZGxlckZyb21TZXQobV93aGVlbEV2ZW50VGFyZ2V0cywgbm9k
ZSwgcmVtb3ZhbCkpCiAgICAgICAgIHJldHVybjsKLQogICAgIHdoZWVsRXZlbnRIYW5kbGVyc0No
YW5nZWQoJm5vZGUpOwotCiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCkpCiAg
ICAgICAgIERlYnVnUGFnZU92ZXJsYXlzOjpkaWRDaGFuZ2VFdmVudEhhbmRsZXJzKCpmcmFtZSk7
CiB9CiAKIHVuc2lnbmVkIERvY3VtZW50Ojp3aGVlbEV2ZW50SGFuZGxlckNvdW50KCkgY29uc3QK
IHsKLSAgICBpZiAoIW1fd2hlZWxFdmVudFRhcmdldHMpCi0gICAgICAgIHJldHVybiAwOwotCiAg
ICAgdW5zaWduZWQgY291bnQgPSAwOwotICAgIGZvciAoYXV0byYgaGFuZGxlciA6ICptX3doZWVs
RXZlbnRUYXJnZXRzKQorICAgIGZvciAoYXV0byYgaGFuZGxlciA6IG1fd2hlZWxFdmVudFRhcmdl
dHMpCiAgICAgICAgIGNvdW50ICs9IGhhbmRsZXIudmFsdWU7Ci0KICAgICByZXR1cm4gY291bnQ7
CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKE5vZGUmIGhhbmRs
ZXIpCiB7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICBpZiAoIW1fdG91Y2hFdmVudFRh
cmdldHMpCi0gICAgICAgIG1fdG91Y2hFdmVudFRhcmdldHMgPSBtYWtlVW5pcXVlPEV2ZW50VGFy
Z2V0U2V0PigpOwotCi0gICAgbV90b3VjaEV2ZW50VGFyZ2V0cy0+YWRkKCZoYW5kbGVyKTsKLQot
ICAgIGlmIChEb2N1bWVudCogcGFyZW50ID0gcGFyZW50RG9jdW1lbnQoKSkgeworICAgIG1fdG91
Y2hFdmVudFRhcmdldHMuYWRkKCZoYW5kbGVyKTsKKyAgICBpZiAoYXV0byBwYXJlbnQgPSBwYXJl
bnREb2N1bWVudCgpKQogICAgICAgICBwYXJlbnQtPmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKCp0
aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGhh
bmRsZXIpOwogI2VuZGlmCkBAIC02OTAwLDEyICs2ODgyLDkgQEAgdm9pZCBEb2N1bWVudDo6ZGlk
QWRkVG91Y2hFdmVudEhhbmRsZXIoTm9kZSYgaGFuZGxlcikKIHZvaWQgRG9jdW1lbnQ6OmRpZFJl
bW92ZVRvdWNoRXZlbnRIYW5kbGVyKE5vZGUmIGhhbmRsZXIsIEV2ZW50SGFuZGxlclJlbW92YWwg
cmVtb3ZhbCkKIHsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIGlmICghbV90b3VjaEV2
ZW50VGFyZ2V0cykKKyAgICBpZiAoIXJlbW92ZUhhbmRsZXJGcm9tU2V0KG1fdG91Y2hFdmVudFRh
cmdldHMsIGhhbmRsZXIsIHJlbW92YWwpKQogICAgICAgICByZXR1cm47Ci0KLSAgICByZW1vdmVI
YW5kbGVyRnJvbVNldCgqbV90b3VjaEV2ZW50VGFyZ2V0cywgaGFuZGxlciwgcmVtb3ZhbCk7Ci0K
LSAgICBpZiAoRG9jdW1lbnQqIHBhcmVudCA9IHBhcmVudERvY3VtZW50KCkpCisgICAgaWYgKGF1
dG8gcGFyZW50ID0gcGFyZW50RG9jdW1lbnQoKSkKICAgICAgICAgcGFyZW50LT5kaWRSZW1vdmVU
b3VjaEV2ZW50SGFuZGxlcigqdGhpcyk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShoYW5kbGVy
KTsKQEAgLTY5MTYsMzAgKzY4OTUsMjEgQEAgdm9pZCBEb2N1bWVudDo6ZGlkUmVtb3ZlVG91Y2hF
dmVudEhhbmRsZXIoTm9kZSYgaGFuZGxlciwgRXZlbnRIYW5kbGVyUmVtb3ZhbCByZW0KIHZvaWQg
RG9jdW1lbnQ6OmRpZFJlbW92ZUV2ZW50VGFyZ2V0Tm9kZShOb2RlJiBoYW5kbGVyKQogewogI2lm
IEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgaWYgKG1fdG91Y2hFdmVudFRhcmdldHMpIHsKLSAg
ICAgICAgbV90b3VjaEV2ZW50VGFyZ2V0cy0+cmVtb3ZlQWxsKCZoYW5kbGVyKTsKLSAgICAgICAg
aWYgKCgmaGFuZGxlciA9PSB0aGlzIHx8IG1fdG91Y2hFdmVudFRhcmdldHMtPmlzRW1wdHkoKSkg
JiYgcGFyZW50RG9jdW1lbnQoKSkKLSAgICAgICAgICAgIHBhcmVudERvY3VtZW50KCktPmRpZFJl
bW92ZUV2ZW50VGFyZ2V0Tm9kZSgqdGhpcyk7Ci0gICAgfQorICAgIG1fdG91Y2hFdmVudFRhcmdl
dHMucmVtb3ZlQWxsKCZoYW5kbGVyKTsKKyAgICBpZiAoKCZoYW5kbGVyID09IHRoaXMgfHwgbV90
b3VjaEV2ZW50VGFyZ2V0cy5pc0VtcHR5KCkpICYmIHBhcmVudERvY3VtZW50KCkpCisgICAgICAg
IHBhcmVudERvY3VtZW50KCktPmRpZFJlbW92ZUV2ZW50VGFyZ2V0Tm9kZSgqdGhpcyk7CiAjZW5k
aWYKLQotICAgIGlmIChtX3doZWVsRXZlbnRUYXJnZXRzKSB7Ci0gICAgICAgIG1fd2hlZWxFdmVu
dFRhcmdldHMtPnJlbW92ZUFsbCgmaGFuZGxlcik7Ci0gICAgICAgIGlmICgoJmhhbmRsZXIgPT0g
dGhpcyB8fCBtX3doZWVsRXZlbnRUYXJnZXRzLT5pc0VtcHR5KCkpICYmIHBhcmVudERvY3VtZW50
KCkpCi0gICAgICAgICAgICBwYXJlbnREb2N1bWVudCgpLT5kaWRSZW1vdmVFdmVudFRhcmdldE5v
ZGUoKnRoaXMpOwotICAgIH0KKyAgICBtX3doZWVsRXZlbnRUYXJnZXRzLnJlbW92ZUFsbCgmaGFu
ZGxlcik7CisgICAgaWYgKCgmaGFuZGxlciA9PSB0aGlzIHx8IG1fd2hlZWxFdmVudFRhcmdldHMu
aXNFbXB0eSgpKSAmJiBwYXJlbnREb2N1bWVudCgpKQorICAgICAgICBwYXJlbnREb2N1bWVudCgp
LT5kaWRSZW1vdmVFdmVudFRhcmdldE5vZGUoKnRoaXMpOwogfQogCiB1bnNpZ25lZCBEb2N1bWVu
dDo6dG91Y2hFdmVudEhhbmRsZXJDb3VudCgpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFRPVUNIX0VW
RU5UUykKLSAgICBpZiAoIW1fdG91Y2hFdmVudFRhcmdldHMpCi0gICAgICAgIHJldHVybiAwOwot
CiAgICAgdW5zaWduZWQgY291bnQgPSAwOwotICAgIGZvciAoYXV0byYgaGFuZGxlciA6ICptX3Rv
dWNoRXZlbnRUYXJnZXRzKQorICAgIGZvciAoYXV0byYgaGFuZGxlciA6IG1fdG91Y2hFdmVudFRh
cmdldHMpCiAgICAgICAgIGNvdW50ICs9IGhhbmRsZXIudmFsdWU7Ci0KICAgICByZXR1cm4gY291
bnQ7CiAjZWxzZQogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCA4NGZkMjFh
NjZkNzhhNGY0Mjg2N2YxZjRkMDU0NGI0NjY5ODUzMjA3Li5jY2VhNGExOTEwZDU5NmU1YjE4ZTU0
NmRlMjlkMzhhZDlkNmYwYTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtMTI0Myw4ICsxMjQz
LDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVkIHN0eWxlUmVjYWxjQ291
bnQoKSBjb25zdDsKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgYm9vbCBoYXNUb3Vj
aEV2ZW50SGFuZGxlcnMoKSBjb25zdCB7IHJldHVybiBtX3RvdWNoRXZlbnRUYXJnZXRzLmdldCgp
ID8gbV90b3VjaEV2ZW50VGFyZ2V0cy0+c2l6ZSgpIDogZmFsc2U7IH0KLSAgICBib29sIHRvdWNo
RXZlbnRUYXJnZXRzQ29udGFpbihOb2RlJiBub2RlKSBjb25zdCB7IHJldHVybiBtX3RvdWNoRXZl
bnRUYXJnZXRzID8gbV90b3VjaEV2ZW50VGFyZ2V0cy0+Y29udGFpbnMoJm5vZGUpIDogZmFsc2U7
IH0KKyAgICBib29sIGhhc1RvdWNoRXZlbnRIYW5kbGVycygpIGNvbnN0IHsgcmV0dXJuICFtX3Rv
dWNoRXZlbnRUYXJnZXRzLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgdG91Y2hFdmVudFRhcmdldHND
b250YWluKE5vZGUmIG5vZGUpIGNvbnN0IHsgcmV0dXJuIG1fdG91Y2hFdmVudFRhcmdldHMuY29u
dGFpbnMoJm5vZGUpOyB9CiAjZWxzZQogICAgIGJvb2wgaGFzVG91Y2hFdmVudEhhbmRsZXJzKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICBib29sIHRvdWNoRXZlbnRUYXJnZXRzQ29udGFp
bihOb2RlJikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTEyNjksMTQgKzEyNjksMTQgQEAg
cHVibGljOgogICAgIGNvbnN0IEV2ZW50VGFyZ2V0U2V0KiB0b3VjaEV2ZW50VGFyZ2V0cygpIGNv
bnN0CiAgICAgewogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgICAgIHJldHVybiBtX3Rv
dWNoRXZlbnRUYXJnZXRzLmdldCgpOworICAgICAgICByZXR1cm4gJm1fdG91Y2hFdmVudFRhcmdl
dHM7CiAjZWxzZQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICNlbmRpZgogICAgIH0KIAotICAg
IGJvb2wgaGFzV2hlZWxFdmVudEhhbmRsZXJzKCkgY29uc3QgeyByZXR1cm4gbV93aGVlbEV2ZW50
VGFyZ2V0cy5nZXQoKSA/IG1fd2hlZWxFdmVudFRhcmdldHMtPnNpemUoKSA6IGZhbHNlOyB9Ci0g
ICAgY29uc3QgRXZlbnRUYXJnZXRTZXQqIHdoZWVsRXZlbnRUYXJnZXRzKCkgY29uc3QgeyByZXR1
cm4gbV93aGVlbEV2ZW50VGFyZ2V0cy5nZXQoKTsgfQorICAgIGJvb2wgaGFzV2hlZWxFdmVudEhh
bmRsZXJzKCkgY29uc3QgeyByZXR1cm4gIW1fd2hlZWxFdmVudFRhcmdldHMuaXNFbXB0eSgpOyB9
CisgICAgY29uc3QgRXZlbnRUYXJnZXRTZXQqIHdoZWVsRXZlbnRUYXJnZXRzKCkgY29uc3QgeyBy
ZXR1cm4gJm1fd2hlZWxFdmVudFRhcmdldHM7IH0KIAogICAgIHVzaW5nIFJlZ2lvbkZpeGVkUGFp
ciA9IHN0ZDo6cGFpcjxSZWdpb24sIGJvb2w+OwogICAgIFJlZ2lvbkZpeGVkUGFpciBhYnNvbHV0
ZUV2ZW50UmVnaW9uRm9yTm9kZShOb2RlJik7CkBAIC0xODgyLDcgKzE4ODIsNyBAQCBwcml2YXRl
OgogCiAgICAgSGFzaFNldDxWaXNpYmlsaXR5Q2hhbmdlQ2xpZW50Kj4gbV92aXNpYmlsaXR5U3Rh
dGVDYWxsYmFja0NsaWVudHM7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SGFzaE1hcDxTdHJpbmcs
IEVsZW1lbnQqLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+PiBtX2FjY2Vzc0tleUNhY2hlOwor
ICAgIE9wdGlvbmFsPEhhc2hNYXA8U3RyaW5nLCBFbGVtZW50KiwgQVNDSUlDYXNlSW5zZW5zaXRp
dmVIYXNoPj4gbV9hY2Nlc3NLZXlDYWNoZTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb25zdGFu
dFByb3BlcnR5TWFwPiBtX2NvbnN0YW50UHJvcGVydHlNYXA7CiAKQEAgLTE5MjMsNyArMTkyMyw3
IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPE1lZGlhUXVlcnlNYXRjaGVyPiBtX21lZGlhUXVlcnlN
YXRjaGVyOwogICAgIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgc3RkOjp1bmlxdWVf
cHRyPEV2ZW50VGFyZ2V0U2V0PiBtX3RvdWNoRXZlbnRUYXJnZXRzOworICAgIEV2ZW50VGFyZ2V0
U2V0IG1fdG91Y2hFdmVudFRhcmdldHM7CiAjZW5kaWYKICNpZiBFTkFCTEUoVE9VQ0hfQUNUSU9O
X1JFR0lPTlMpCiAgICAgYm9vbCBtX21heUhhdmVFbGVtZW50c1dpdGhOb25BdXRvVG91Y2hBY3Rp
b24geyBmYWxzZSB9OwpAQCAtMTkzNCw3ICsxOTM0LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wg
bV9tYXlIYXZlUmVuZGVyZWRTVkdGb3JlaWduT2JqZWN0cyB7IGZhbHNlIH07CiAKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8RXZlbnRUYXJnZXRTZXQ+IG1fd2hlZWxFdmVudFRhcmdldHM7CisgICAgRXZl
bnRUYXJnZXRTZXQgbV93aGVlbEV2ZW50VGFyZ2V0czsKIAogICAgIE1vbm90b25pY1RpbWUgbV9s
YXN0SGFuZGxlZFVzZXJHZXN0dXJlVGltZXN0YW1wOwogICAgIE1vbm90b25pY1RpbWUgbV91c2Vy
QWN0aXZhdGVkTWVkaWFGaW5pc2hlZFBsYXlpbmdUaW1lc3RhbXA7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9JZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuY3BwCmluZGV4IDk0MGVmY2FlZDgzMDkx
YzI1ODNmYTllMzM2ZWYzZDc4YzU0YWEzZGMuLmZjYjMwZDU0Y2E4OTQ4NzJiMTI0MjkyNjM1YmQ3
NjJmOTk0ZjQ2MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9JZFRhcmdldE9ic2Vy
dmVyUmVnaXN0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9JZFRhcmdldE9ic2VydmVy
UmVnaXN0cnkuY3BwCkBAIC0zNCwzNSArMzQsMzIgQEAgdm9pZCBJZFRhcmdldE9ic2VydmVyUmVn
aXN0cnk6OmFkZE9ic2VydmVyKGNvbnN0IEF0b21TdHJpbmcmIGlkLCBJZFRhcmdldE9ic2VydmUK
IHsKICAgICBpZiAoaWQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgSWRU
b09ic2VydmVyU2V0TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9yZWdpc3RyeS5hZGQoaWQuaW1w
bCgpLCBudWxscHRyKTsKLSAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgPSBtYWtlVW5pcXVlPE9ic2VydmVyU2V0PigpOwotCi0gICAgcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZS0+YWRkKG9ic2VydmVyKTsKKyAgICBtX3JlZ2lzdHJ5LmFkZChp
ZC5pbXBsKCksIE9ic2VydmVyU2V0IHsgfSkuaXRlcmF0b3ItPnZhbHVlLmFkZChvYnNlcnZlcik7
CiB9CiAKIHZvaWQgSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5OjpyZW1vdmVPYnNlcnZlcihjb25z
dCBBdG9tU3RyaW5nJiBpZCwgSWRUYXJnZXRPYnNlcnZlciogb2JzZXJ2ZXIpCiB7Ci0gICAgaWYg
KGlkLmlzRW1wdHkoKSB8fCBtX3JlZ2lzdHJ5LmlzRW1wdHkoKSkKKyAgICBpZiAoaWQuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47Ci0KLSAgICBJZFRvT2JzZXJ2ZXJTZXRNYXA6Oml0ZXJhdG9y
IGl0ZXIgPSBtX3JlZ2lzdHJ5LmZpbmQoaWQuaW1wbCgpKTsKLQotICAgIE9ic2VydmVyU2V0KiBz
ZXQgPSBpdGVyLT52YWx1ZS5nZXQoKTsKLSAgICBzZXQtPnJlbW92ZShvYnNlcnZlcik7Ci0gICAg
aWYgKHNldC0+aXNFbXB0eSgpICYmIHNldCAhPSBtX25vdGlmeWluZ09ic2VydmVyc0luU2V0KQot
ICAgICAgICBtX3JlZ2lzdHJ5LnJlbW92ZShpdGVyKTsKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9y
ZWdpc3RyeS5maW5kKGlkLmltcGwoKSk7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fcmVnaXN0cnku
ZW5kKCkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgYXV0byYgc2V0ID0gaXRlcmF0b3ItPnZhbHVlOworICAgIHNldC5yZW1vdmUo
b2JzZXJ2ZXIpOworICAgIGlmIChzZXQuaXNFbXB0eSgpICYmICZzZXQgIT0gbV9ub3RpZnlpbmdP
YnNlcnZlcnNJblNldCkKKyAgICAgICAgbV9yZWdpc3RyeS5yZW1vdmUoaXRlcmF0b3IpOwogfQog
CiB2b2lkIElkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeTo6bm90aWZ5T2JzZXJ2ZXJzSW50ZXJuYWwo
Y29uc3QgQXRvbVN0cmluZ0ltcGwmIGlkKQogewotICAgIEFTU0VSVCghbV9yZWdpc3RyeS5pc0Vt
cHR5KCkpOwotCi0gICAgbV9ub3RpZnlpbmdPYnNlcnZlcnNJblNldCA9IG1fcmVnaXN0cnkuZ2V0
KCZpZCk7Ci0gICAgaWYgKCFtX25vdGlmeWluZ09ic2VydmVyc0luU2V0KQorICAgIGF1dG8gaXRl
cmF0b3IgPSBtX3JlZ2lzdHJ5LmZpbmQoJmlkKTsKKyAgICBpZiAoaXRlcmF0b3IgPT0gbV9yZWdp
c3RyeS5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgbV9ub3RpZnlpbmdPYnNlcnZlcnNJ
blNldCA9ICZpdGVyYXRvci0+dmFsdWU7CisKICAgICBmb3IgKGF1dG8mIG9ic2VydmVyIDogY29w
eVRvVmVjdG9yKCptX25vdGlmeWluZ09ic2VydmVyc0luU2V0KSkgewogICAgICAgICBpZiAobV9u
b3RpZnlpbmdPYnNlcnZlcnNJblNldC0+Y29udGFpbnMob2JzZXJ2ZXIpKQogICAgICAgICAgICAg
b2JzZXJ2ZXItPmlkVGFyZ2V0Q2hhbmdlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0lkVGFy
Z2V0T2JzZXJ2ZXJSZWdpc3RyeS5oCmluZGV4IGExZTYzYWNlMTNmMzAzM2M0MzFhODg5ZjdhNmQy
MGQ1OWFhN2NmMmEuLmJlNWEzZTU2MTVlYWY5YTljMjM5ODc1YTk2YjYxN2ZkMGFlMDE0NzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9JZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5LmgKQEAgLTQ5
LDggKzQ5LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbW92ZU9ic2VydmVyKGNvbnN0IEF0b21T
dHJpbmcmIGlkLCBJZFRhcmdldE9ic2VydmVyKik7CiAgICAgdm9pZCBub3RpZnlPYnNlcnZlcnNJ
bnRlcm5hbChjb25zdCBBdG9tU3RyaW5nSW1wbCYgaWQpOwogCi0gICAgdHlwZWRlZiBIYXNoU2V0
PElkVGFyZ2V0T2JzZXJ2ZXIqPiBPYnNlcnZlclNldDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8Y29u
c3QgQXRvbVN0cmluZ0ltcGwqLCBzdGQ6OnVuaXF1ZV9wdHI8T2JzZXJ2ZXJTZXQ+PiBJZFRvT2Jz
ZXJ2ZXJTZXRNYXA7CisgICAgdXNpbmcgT2JzZXJ2ZXJTZXQgPSBIYXNoU2V0PElkVGFyZ2V0T2Jz
ZXJ2ZXIqPjsKKyAgICB1c2luZyBJZFRvT2JzZXJ2ZXJTZXRNYXAgPSBIYXNoTWFwPGNvbnN0IEF0
b21TdHJpbmdJbXBsKiwgT2JzZXJ2ZXJTZXQ+OwogICAgIElkVG9PYnNlcnZlclNldE1hcCBtX3Jl
Z2lzdHJ5OwogICAgIE9ic2VydmVyU2V0KiBtX25vdGlmeWluZ09ic2VydmVyc0luU2V0IHsgbnVs
bHB0ciB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2Vy
dmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyLmNwcAppbmRleCA4
YjNhMjVmOTVjOWY5YmM0YTYxNzllYzJiMDE1OGJhNmY4OTk4OTAyLi42MTM3MzFmNjhmZDQ0M2Rj
NWZhM2M2YzY2NGE3ODRhMmViMzI2N2NiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
TXV0YXRpb25PYnNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2Jz
ZXJ2ZXIuY3BwCkBAIC0xOTAsNyArMTkwLDcgQEAgdm9pZCBNdXRhdGlvbk9ic2VydmVyOjpkZWxp
dmVyKCkKICAgICAvLyBDYWxsaW5nIHRha2VUcmFuc2llbnRSZWdpc3RyYXRpb25zKCkgY2FuIG1v
ZGlmeSBtX3JlZ2lzdHJhdGlvbnMsIHNvIGl0J3MgbmVjZXNzYXJ5CiAgICAgLy8gdG8gbWFrZSBh
IGNvcHkgb2YgdGhlIHRyYW5zaWVudCByZWdpc3RyYXRpb25zIGJlZm9yZSBvcGVyYXRpbmcgb24g
dGhlbS4KICAgICBWZWN0b3I8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbiosIDE+IHRyYW5z
aWVudFJlZ2lzdHJhdGlvbnM7Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxIYXNoU2V0PEdD
UmVhY2hhYmxlUmVmPE5vZGU+Pj4sIDE+IG5vZGVzVG9LZWVwQWxpdmU7CisgICAgVmVjdG9yPEhh
c2hTZXQ8R0NSZWFjaGFibGVSZWY8Tm9kZT4+LCAxPiBub2Rlc1RvS2VlcEFsaXZlOwogICAgIEhh
c2hTZXQ8R0NSZWFjaGFibGVSZWY8Tm9kZT4+IHBlbmRpbmdUYXJnZXRzOwogICAgIHBlbmRpbmdU
YXJnZXRzLnN3YXAobV9wZW5kaW5nVGFyZ2V0cyk7CiAgICAgZm9yIChhdXRvKiByZWdpc3RyYXRp
b24gOiBtX3JlZ2lzdHJhdGlvbnMpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9N
dXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRh
dGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uLmNwcAppbmRleCBjNmYxZmIxNWRmZjhkNWViZmYyZjVj
NWI3YjdlZGUzYWUzZDBlYjc5Li44OTRlNDZjOGU1NDFiYzY5ZjM4NjhkZTAwNzgyNzJjODFkMWYy
NTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlclJlZ2lz
dHJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJSZWdp
c3RyYXRpb24uY3BwCkBAIC02OCwzMSArNjgsMjcgQEAgdm9pZCBNdXRhdGlvbk9ic2VydmVyUmVn
aXN0cmF0aW9uOjpvYnNlcnZlZFN1YnRyZWVOb2RlV2lsbERldGFjaChOb2RlJiBub2RlKQogICAg
IG5vZGUucmVnaXN0ZXJUcmFuc2llbnRNdXRhdGlvbk9ic2VydmVyKCp0aGlzKTsKICAgICBtX29i
c2VydmVyLT5zZXRIYXNUcmFuc2llbnRSZWdpc3RyYXRpb24obm9kZS5kb2N1bWVudCgpKTsKIAot
ICAgIGlmICghbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2RlcykgewotICAgICAgICBtX3RyYW5z
aWVudFJlZ2lzdHJhdGlvbk5vZGVzID0gbWFrZVVuaXF1ZTxIYXNoU2V0PEdDUmVhY2hhYmxlUmVm
PE5vZGU+Pj4oKTsKLQorICAgIGlmIChtX3RyYW5zaWVudFJlZ2lzdHJhdGlvbk5vZGVzLmlzRW1w
dHkoKSkgewogICAgICAgICBBU1NFUlQoIW1fbm9kZUtlcHRBbGl2ZSk7CiAgICAgICAgIG1fbm9k
ZUtlcHRBbGl2ZSA9ICZtX25vZGU7IC8vIEJhbGFuY2VkIGluIHRha2VUcmFuc2llbnRSZWdpc3Ry
YXRpb25zLgogICAgIH0KLSAgICBtX3RyYW5zaWVudFJlZ2lzdHJhdGlvbk5vZGVzLT5hZGQobm9k
ZSk7CisgICAgbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2Rlcy5hZGQobm9kZSk7CiB9CiAKLXN0
ZDo6dW5pcXVlX3B0cjxIYXNoU2V0PEdDUmVhY2hhYmxlUmVmPE5vZGU+Pj4gTXV0YXRpb25PYnNl
cnZlclJlZ2lzdHJhdGlvbjo6dGFrZVRyYW5zaWVudFJlZ2lzdHJhdGlvbnMoKQorSGFzaFNldDxH
Q1JlYWNoYWJsZVJlZjxOb2RlPj4gTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6dGFrZVRy
YW5zaWVudFJlZ2lzdHJhdGlvbnMoKQogewotICAgIGlmICghbV90cmFuc2llbnRSZWdpc3RyYXRp
b25Ob2RlcykgeworICAgIGlmIChtX3RyYW5zaWVudFJlZ2lzdHJhdGlvbk5vZGVzLmlzRW1wdHko
KSkgewogICAgICAgICBBU1NFUlQoIW1fbm9kZUtlcHRBbGl2ZSk7Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIGZvciAoYXV0byYgbm9k
ZSA6ICptX3RyYW5zaWVudFJlZ2lzdHJhdGlvbk5vZGVzKQorICAgIGZvciAoYXV0byYgbm9kZSA6
IG1fdHJhbnNpZW50UmVnaXN0cmF0aW9uTm9kZXMpCiAgICAgICAgIG5vZGUtPnVucmVnaXN0ZXJU
cmFuc2llbnRNdXRhdGlvbk9ic2VydmVyKCp0aGlzKTsKIAotICAgIGF1dG8gcmV0dXJuVmFsdWUg
PSBXVEZNb3ZlKG1fdHJhbnNpZW50UmVnaXN0cmF0aW9uTm9kZXMpOwotCiAgICAgQVNTRVJUKG1f
bm9kZUtlcHRBbGl2ZSk7CiAgICAgbV9ub2RlS2VwdEFsaXZlID0gbnVsbHB0cjsgLy8gQmFsYW5j
ZWQgaW4gb2JzZXJ2ZVN1YnRyZWVOb2RlV2lsbERldGFjaC4KIAotICAgIHJldHVybiByZXR1cm5W
YWx1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX3RyYW5zaWVudFJlZ2lzdHJhdGlvbk5v
ZGVzLCB7IH0pOwogfQogCiBib29sIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246OnNob3Vs
ZFJlY2VpdmVNdXRhdGlvbkZyb20oTm9kZSYgbm9kZSwgTXV0YXRpb25PYnNlcnZlcjo6TXV0YXRp
b25UeXBlIHR5cGUsIGNvbnN0IFF1YWxpZmllZE5hbWUqIGF0dHJpYnV0ZU5hbWUpIGNvbnN0CkBA
IC0xMTgsMTAgKzExNCw3IEBAIGJvb2wgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6aXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpBYnN0cmFjdFNsb3RWCiAgICAgaWYgKHZpc2l0
b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3QobV9ub2RlKSkpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCi0gICAgaWYgKCFtX3RyYW5zaWVudFJlZ2lzdHJhdGlvbk5vZGVzKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBmb3IgKGF1dG8mIG5vZGUgOiAqbV90cmFuc2llbnRSZWdpc3RyYXRp
b25Ob2RlcykgeworICAgIGZvciAoYXV0byYgbm9kZSA6IG1fdHJhbnNpZW50UmVnaXN0cmF0aW9u
Tm9kZXMpIHsKICAgICAgICAgaWYgKHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3Qobm9k
ZSkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uLmgKaW5kZXggNzUzZGJmN2FkMzg5
MGYwNzNlYzBlYTZhZTZiZDdiMTU2YmQ5NDRjNC4uYzQ4NWRlOWJhNGU3Y2U4YjdlMGJkZDAyN2Nk
OTZmYzgzNDM2MmE2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2Jz
ZXJ2ZXJSZWdpc3RyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNl
cnZlclJlZ2lzdHJhdGlvbi5oCkBAIC01Miw4ICs1Miw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
cmVzZXRPYnNlcnZhdGlvbihNdXRhdGlvbk9ic2VydmVyT3B0aW9ucywgY29uc3QgSGFzaFNldDxB
dG9tU3RyaW5nPiYgYXR0cmlidXRlRmlsdGVyKTsKICAgICB2b2lkIG9ic2VydmVkU3VidHJlZU5v
ZGVXaWxsRGV0YWNoKE5vZGUmKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SGFzaFNldDxHQ1JlYWNo
YWJsZVJlZjxOb2RlPj4+IHRha2VUcmFuc2llbnRSZWdpc3RyYXRpb25zKCk7Ci0gICAgYm9vbCBo
YXNUcmFuc2llbnRSZWdpc3RyYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2llbnRSZWdp
c3RyYXRpb25Ob2RlcyAmJiAhbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2Rlcy0+aXNFbXB0eSgp
OyB9CisgICAgSGFzaFNldDxHQ1JlYWNoYWJsZVJlZjxOb2RlPj4gdGFrZVRyYW5zaWVudFJlZ2lz
dHJhdGlvbnMoKTsKKyAgICBib29sIGhhc1RyYW5zaWVudFJlZ2lzdHJhdGlvbnMoKSBjb25zdCB7
IHJldHVybiAhbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2Rlcy5pc0VtcHR5KCk7IH0KIAogICAg
IGJvb2wgc2hvdWxkUmVjZWl2ZU11dGF0aW9uRnJvbShOb2RlJiwgTXV0YXRpb25PYnNlcnZlcjo6
TXV0YXRpb25UeXBlLCBjb25zdCBRdWFsaWZpZWROYW1lKiBhdHRyaWJ1dGVOYW1lKSBjb25zdDsK
ICAgICBib29sIGlzU3VidHJlZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3B0aW9ucyAmIE11dGF0aW9u
T2JzZXJ2ZXI6OlN1YnRyZWU7IH0KQEAgLTY5LDcgKzY5LDcgQEAgcHJpdmF0ZToKICAgICBSZWY8
TXV0YXRpb25PYnNlcnZlcj4gbV9vYnNlcnZlcjsKICAgICBOb2RlJiBtX25vZGU7CiAgICAgUmVm
UHRyPE5vZGU+IG1fbm9kZUtlcHRBbGl2ZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SGFzaFNldDxH
Q1JlYWNoYWJsZVJlZjxOb2RlPj4+IG1fdHJhbnNpZW50UmVnaXN0cmF0aW9uTm9kZXM7CisgICAg
SGFzaFNldDxHQ1JlYWNoYWJsZVJlZjxOb2RlPj4gbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2Rl
czsKICAgICBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyBtX29wdGlvbnM7CiAgICAgSGFzaFNldDxB
dG9tU3RyaW5nPiBtX2F0dHJpYnV0ZUZpbHRlcjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0Zvcm1Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNv
bnRyb2xsZXIuY3BwCmluZGV4IDZhNDRkNzI3MjZhOTg3NTg0MjY5MTRmOWM3NzNjMTFmZDViNzA4
YmMuLjc5OTRhNGQ4NDg5YWYyMjhmOWUzOWU2NzZlOGNjMTdhMDg4Yjc5ZGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIuY3BwCkBAIC0zNjMsMjggKzM2MywyNyBAQCBzdGF0aWMg
U3RyaW5nIGZvcm1TdGF0ZVNpZ25hdHVyZSgpCiAgICAgcmV0dXJuIHNpZ25hdHVyZTsKIH0KIAot
c3RkOjp1bmlxdWVfcHRyPEZvcm1Db250cm9sbGVyOjpTYXZlZEZvcm1TdGF0ZU1hcD4gRm9ybUNv
bnRyb2xsZXI6OmNyZWF0ZVNhdmVkRm9ybVN0YXRlTWFwKGNvbnN0IEZvcm1FbGVtZW50TGlzdEhh
c2hTZXQmIGNvbnRyb2xMaXN0KQorYXV0byBGb3JtQ29udHJvbGxlcjo6Y3JlYXRlU2F2ZWRGb3Jt
U3RhdGVNYXAoY29uc3QgRm9ybUVsZW1lbnRMaXN0SGFzaFNldCYgY29udHJvbExpc3QpIC0+IFNh
dmVkRm9ybVN0YXRlTWFwCiB7CisgICAgU2F2ZWRGb3JtU3RhdGVNYXAgbWFwOwogICAgIEZvcm1L
ZXlHZW5lcmF0b3Iga2V5R2VuZXJhdG9yOwotICAgIGF1dG8gc3RhdGVNYXAgPSBtYWtlVW5pcXVl
PFNhdmVkRm9ybVN0YXRlTWFwPigpOwogICAgIGZvciAoYXV0byYgY29udHJvbCA6IGNvbnRyb2xM
aXN0KSB7CiAgICAgICAgIGlmICghY29udHJvbC0+c2hvdWxkU2F2ZUFuZFJlc3RvcmVGb3JtQ29u
dHJvbFN0YXRlKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYXV0byYgZm9ybVN0
YXRlID0gc3RhdGVNYXAtPmFkZChrZXlHZW5lcmF0b3IuZm9ybUtleSgqY29udHJvbCkuaW1wbCgp
LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgIGF1dG8mIGZvcm1TdGF0ZSA9IG1h
cC5hZGQoa2V5R2VuZXJhdG9yLmZvcm1LZXkoKmNvbnRyb2wpLmltcGwoKSwgbnVsbHB0cikuaXRl
cmF0b3ItPnZhbHVlOwogICAgICAgICBpZiAoIWZvcm1TdGF0ZSkKICAgICAgICAgICAgIGZvcm1T
dGF0ZSA9IG1ha2VVbmlxdWU8U2F2ZWRGb3JtU3RhdGU+KCk7CiAgICAgICAgIGZvcm1TdGF0ZS0+
YXBwZW5kQ29udHJvbFN0YXRlKGNvbnRyb2wtPm5hbWUoKSwgY29udHJvbC0+dHlwZSgpLCBjb250
cm9sLT5zYXZlRm9ybUNvbnRyb2xTdGF0ZSgpKTsKICAgICB9Ci0gICAgcmV0dXJuIHN0YXRlTWFw
OworICAgIHJldHVybiBtYXA7CiB9CiAKIFZlY3RvcjxTdHJpbmc+IEZvcm1Db250cm9sbGVyOjpm
b3JtRWxlbWVudHNTdGF0ZSgpIGNvbnN0CiB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFNhdmVkRm9y
bVN0YXRlTWFwPiBzdGF0ZU1hcCA9IGNyZWF0ZVNhdmVkRm9ybVN0YXRlTWFwKG1fZm9ybUVsZW1l
bnRzV2l0aFN0YXRlKTsKICAgICBWZWN0b3I8U3RyaW5nPiBzdGF0ZVZlY3RvcjsKICAgICBzdGF0
ZVZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fZm9ybUVsZW1lbnRzV2l0aFN0YXRlLnNp
emUoKSAqIDQpOwogICAgIHN0YXRlVmVjdG9yLmFwcGVuZChmb3JtU3RhdGVTaWduYXR1cmUoKSk7
Ci0gICAgZm9yIChhdXRvJiBzdGF0ZSA6ICpzdGF0ZU1hcCkgeworICAgIGZvciAoYXV0byYgc3Rh
dGUgOiBjcmVhdGVTYXZlZEZvcm1TdGF0ZU1hcChtX2Zvcm1FbGVtZW50c1dpdGhTdGF0ZSkpIHsK
ICAgICAgICAgc3RhdGVWZWN0b3IuYXBwZW5kKHN0YXRlLmtleS5nZXQoKSk7CiAgICAgICAgIHN0
YXRlLnZhbHVlLT5zZXJpYWxpemVUbyhzdGF0ZVZlY3Rvcik7CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9Gb3JtQ29udHJvbGxlci5oCmluZGV4IGExMzUyZjU4NmJlZmFhMWY2YjA3MTJiOTBlYmZkZmFi
ZjNjMGFjODYuLjE4N2I2NjNhNzUwYmJjZjMyMWM0YjJkMTBmNDhkNGRjYWNmMzgxYjggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0Zvcm1Db250cm9sbGVyLmgKQEAgLTU4LDEwICs1OCwxMCBAQCBwdWJsaWM6
CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHJlZmVyZW5jZWRGaWxl
UGF0aHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHN0YXRlVmVjdG9yKTsKIAogcHJpdmF0ZToKLSAg
ICB0eXBlZGVmIExpc3RIYXNoU2V0PFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0
YXRlPj4gRm9ybUVsZW1lbnRMaXN0SGFzaFNldDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRy
PEF0b21TdHJpbmdJbXBsPiwgc3RkOjp1bmlxdWVfcHRyPFNhdmVkRm9ybVN0YXRlPj4gU2F2ZWRG
b3JtU3RhdGVNYXA7CisgICAgdXNpbmcgRm9ybUVsZW1lbnRMaXN0SGFzaFNldCA9IExpc3RIYXNo
U2V0PFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlPj47CisgICAgdXNpbmcg
U2F2ZWRGb3JtU3RhdGVNYXAgPSBIYXNoTWFwPFJlZlB0cjxBdG9tU3RyaW5nSW1wbD4sIHN0ZDo6
dW5pcXVlX3B0cjxTYXZlZEZvcm1TdGF0ZT4+OwogCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxTYXZlZEZvcm1TdGF0ZU1hcD4gY3JlYXRlU2F2ZWRGb3JtU3RhdGVNYXAoY29uc3QgRm9ybUVs
ZW1lbnRMaXN0SGFzaFNldCYpOworICAgIHN0YXRpYyBTYXZlZEZvcm1TdGF0ZU1hcCBjcmVhdGVT
YXZlZEZvcm1TdGF0ZU1hcChjb25zdCBGb3JtRWxlbWVudExpc3RIYXNoU2V0Jik7CiAgICAgRm9y
bUNvbnRyb2xTdGF0ZSB0YWtlU3RhdGVGb3JGb3JtRWxlbWVudChjb25zdCBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50V2l0aFN0YXRlJik7CiAgICAgc3RhdGljIHZvaWQgZm9ybVN0YXRlc0Zyb21TdGF0
ZVZlY3Rvcihjb25zdCBWZWN0b3I8U3RyaW5nPiYsIFNhdmVkRm9ybVN0YXRlTWFwJik7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCmluZGV4IDRjNjdiNjM4MjNmZjZh
NDk3YTYxMmQ2ZDYzYWU0NWE2ZDhkYjBhMDUuLmI3NTcxOWJjNjFkN2ZlM2QyYzZmMzMyYmY2ZjYx
ZjdlNTVkZTAyZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExv
YWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcApA
QCAtNzYyLDcgKzc2Miw3IEBAIGJvb2wgRG9jdW1lbnRMb2FkZXI6OnRyeUxvYWRpbmdTdWJzdGl0
dXRlRGF0YSgpCiAgICAgICAgIH07CiAKICNpZiBVU0UoQ09DT0FfRVZFTlRfTE9PUCkKLSAgICAg
ICAgUnVuTG9vcDo6ZGlzcGF0Y2goKm1fZnJhbWUtPnBhZ2UoKS0+c2NoZWR1bGVkUnVuTG9vcFBh
aXJzKCksIFdURk1vdmUobG9hZERhdGEpKTsKKyAgICAgICAgUnVuTG9vcDo6ZGlzcGF0Y2gobV9m
cmFtZS0+cGFnZSgpLT5zY2hlZHVsZWRSdW5Mb29wUGFpcnMoKSwgV1RGTW92ZShsb2FkRGF0YSkp
OwogI2Vsc2UKICAgICAgICAgUnVuTG9vcDo6Y3VycmVudCgpLmRpc3BhdGNoKFdURk1vdmUobG9h
ZERhdGEpKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291
cmNlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAK
aW5kZXggNzU4NTgzZGFhNWQ2MjJhMTljODllNGM3ZDZlMTc4ODBlOGU3NzExMi4uYzA1MDc0NTgy
M2ZlMmY5MmI1Y2RiMmM3OTMyMmE0YjQyMmU3NTdlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
UmVzb3VyY2VMb2FkZXIuY3BwCkBAIC0yNzEsNyArMjcxLDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRl
cjo6bG9hZERhdGFVUkwoKQogICAgIERhdGFVUkxEZWNvZGVyOjpTY2hlZHVsZUNvbnRleHQgc2No
ZWR1bGVDb250ZXh0OwogI2lmIFVTRShDT0NPQV9FVkVOVF9MT09QKQogICAgIGlmIChhdXRvIHBh
Z2UgPSBtX2ZyYW1lLT5wYWdlKCkpCi0gICAgICAgIHNjaGVkdWxlQ29udGV4dC5zY2hlZHVsZWRQ
YWlycyA9ICpwYWdlLT5zY2hlZHVsZWRSdW5Mb29wUGFpcnMoKTsKKyAgICAgICAgc2NoZWR1bGVD
b250ZXh0LnNjaGVkdWxlZFBhaXJzID0gcGFnZS0+c2NoZWR1bGVkUnVuTG9vcFBhaXJzKCk7CiAj
ZW5kaWYKICAgICBhdXRvIG1vZGUgPSBEYXRhVVJMRGVjb2Rlcjo6TW9kZTo6TGVnYWN5OwogICAg
IGlmIChtX3JlcXVlc3QucmVxdWVzdGVyKCkgPT0gUmVzb3VyY2VSZXF1ZXN0OjpSZXF1ZXN0ZXI6
OkZldGNoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJl
c291cmNlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNv
dXJjZUxvYWRlci5jcHAKaW5kZXggMjZmZmRiZmJjOWQxMzY4Y2ZiYjFhNDk0ZjdmNmU2YWNlNTQw
NTY5ZC4uYzA2M2MzMjU2YzliYzk5YWNjY2MzYTc2MWIzZTNjYTg4Zjk5NjM4YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3Bw
CkBAIC0xMDgxLDcgKzEwODEsNyBAQCB2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpkb2N1bWVu
dERpZEZpbmlzaExvYWRFdmVudCgpCiAKICAgICAvLyBJZiBtX3ByZWxvYWRzIGlzIG5vdCBlbXB0
eSBoZXJlLCBpdCdzIGZ1bGwgb2YgbGluayBwcmVsb2FkcywKICAgICAvLyBhcyBzcGVjdWxhdGl2
ZSBwcmVsb2FkcyB3ZXJlIGNsZWFyZWQgYXQgRENMLgotICAgIGlmIChtX3ByZWxvYWRzICYmIG1f
cHJlbG9hZHMtPnNpemUoKSAmJiAhbV91bnVzZWRQcmVsb2Fkc1RpbWVyLmlzQWN0aXZlKCkpCisg
ICAgaWYgKCFtX3ByZWxvYWRzLmlzRW1wdHkoKSAmJiAhbV91bnVzZWRQcmVsb2Fkc1RpbWVyLmlz
QWN0aXZlKCkpCiAgICAgICAgIG1fdW51c2VkUHJlbG9hZHNUaW1lci5zdGFydE9uZVNob3QodW51
c2VkUHJlbG9hZFRpbWVvdXQpOwogfQogCkBAIC0xNTA0LDI1ICsxNTA0LDIxIEBAIFJlc291cmNl
RXJyb3JPcjxDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4+IENhY2hlZFJlc291
cmNlTG9hZGVyOjpwcmVsCiAgICAgICAgIHJlcXVlc3Quc2V0Q2hhcnNldChtX2RvY3VtZW50LT5j
aGFyc2V0KCkpOwogCiAgICAgYXV0byByZXNvdXJjZSA9IHJlcXVlc3RSZXNvdXJjZSh0eXBlLCBX
VEZNb3ZlKHJlcXVlc3QpLCBGb3JQcmVsb2FkOjpZZXMpOwotICAgIGlmIChyZXNvdXJjZSAmJiAo
IW1fcHJlbG9hZHMgfHwgIW1fcHJlbG9hZHMtPmNvbnRhaW5zKHJlc291cmNlLnZhbHVlKCkuZ2V0
KCkpKSkgeworICAgIGlmIChyZXNvdXJjZSAmJiAhbV9wcmVsb2Fkcy5jb250YWlucyhyZXNvdXJj
ZS52YWx1ZSgpLmdldCgpKSkgewogICAgICAgICBhdXRvIHJlc291cmNlVmFsdWUgPSByZXNvdXJj
ZS52YWx1ZSgpOwogICAgICAgICAvLyBGb250cyBuZWVkIHNwZWNpYWwgdHJlYXRtZW50IHNpbmNl
IGp1c3QgY3JlYXRpbmcgdGhlIHJlc291cmNlIGRvZXNuJ3QgdHJpZ2dlciBhIGxvYWQuCiAgICAg
ICAgIGlmICh0eXBlID09IENhY2hlZFJlc291cmNlOjpUeXBlOjpGb250UmVzb3VyY2UpCiAgICAg
ICAgICAgICBkb3duY2FzdDxDYWNoZWRGb250PihyZXNvdXJjZVZhbHVlLmdldCgpKS0+YmVnaW5M
b2FkSWZOZWVkZWQoKnRoaXMpOwogICAgICAgICByZXNvdXJjZVZhbHVlLT5pbmNyZWFzZVByZWxv
YWRDb3VudCgpOwogCi0gICAgICAgIGlmICghbV9wcmVsb2FkcykKLSAgICAgICAgICAgIG1fcHJl
bG9hZHMgPSBtYWtlVW5pcXVlPExpc3RIYXNoU2V0PENhY2hlZFJlc291cmNlKj4+KCk7Ci0gICAg
ICAgIG1fcHJlbG9hZHMtPmFkZChyZXNvdXJjZVZhbHVlLmdldCgpKTsKKyAgICAgICAgbV9wcmVs
b2Fkcy5hZGQocmVzb3VyY2VWYWx1ZS5nZXQoKSk7CiAgICAgfQogICAgIHJldHVybiByZXNvdXJj
ZTsKIH0KIAogdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6d2FyblVudXNlZFByZWxvYWRzKCkK
IHsKLSAgICBpZiAoIW1fcHJlbG9hZHMpCi0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKGNvbnN0
IGF1dG8mIHJlc291cmNlIDogKm1fcHJlbG9hZHMpIHsKKyAgICBmb3IgKGF1dG8qIHJlc291cmNl
IDogbV9wcmVsb2FkcykgewogICAgICAgICBpZiAocmVzb3VyY2UgJiYgcmVzb3VyY2UtPmlzTGlu
a1ByZWxvYWQoKSAmJiByZXNvdXJjZS0+cHJlbG9hZFJlc3VsdCgpID09IENhY2hlZFJlc291cmNl
OjpQcmVsb2FkUmVzdWx0OjpQcmVsb2FkTm90UmVmZXJlbmNlZCAmJiBkb2N1bWVudCgpKSB7CiAg
ICAgICAgICAgICBkb2N1bWVudCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpP
dGhlciwgTWVzc2FnZUxldmVsOjpXYXJuaW5nLAogICAgICAgICAgICAgICAgICJUaGUgcmVzb3Vy
Y2UgIiArIHJlc291cmNlLT51cmwoKS5zdHJpbmcoKSArCkBAIC0xNTM0LDI4ICsxNTMwLDIwIEBA
IHZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6Ondhcm5VbnVzZWRQcmVsb2FkcygpCiBib29sIENh
Y2hlZFJlc291cmNlTG9hZGVyOjppc1ByZWxvYWRlZChjb25zdCBTdHJpbmcmIHVybFN0cmluZykg
Y29uc3QKIHsKICAgICBjb25zdCBVUkwmIHVybCA9IG1fZG9jdW1lbnQtPmNvbXBsZXRlVVJMKHVy
bFN0cmluZyk7Ci0KLSAgICBpZiAobV9wcmVsb2FkcykgewotICAgICAgICBmb3IgKGF1dG8mIHJl
c291cmNlIDogKm1fcHJlbG9hZHMpIHsKLSAgICAgICAgICAgIGlmIChyZXNvdXJjZS0+dXJsKCkg
PT0gdXJsKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9CisgICAgZm9y
IChhdXRvJiByZXNvdXJjZSA6IG1fcHJlbG9hZHMpIHsKKyAgICAgICAgaWYgKHJlc291cmNlLT51
cmwoKSA9PSB1cmwpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCiB2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpjbGVhclByZWxvYWRzKENs
ZWFyUHJlbG9hZHNNb2RlIG1vZGUpCiB7Ci0gICAgaWYgKCFtX3ByZWxvYWRzKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TGlzdEhhc2hTZXQ8Q2FjaGVkUmVzb3VyY2Uq
Pj4gcmVtYWluaW5nTGlua1ByZWxvYWRzOwotICAgIGZvciAoYXV0byogcmVzb3VyY2UgOiAqbV9w
cmVsb2FkcykgeworICAgIExpc3RIYXNoU2V0PENhY2hlZFJlc291cmNlKj4gcmVtYWluaW5nTGlu
a1ByZWxvYWRzOworICAgIGZvciAoYXV0byogcmVzb3VyY2UgOiBtX3ByZWxvYWRzKSB7CiAgICAg
ICAgIEFTU0VSVChyZXNvdXJjZSk7CiAgICAgICAgIGlmIChtb2RlID09IENsZWFyUHJlbG9hZHNN
b2RlOjpDbGVhclNwZWN1bGF0aXZlUHJlbG9hZHMgJiYgcmVzb3VyY2UtPmlzTGlua1ByZWxvYWQo
KSkgewotICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdMaW5rUHJlbG9hZHMpCi0gICAgICAgICAg
ICAgICAgcmVtYWluaW5nTGlua1ByZWxvYWRzID0gbWFrZVVuaXF1ZTxMaXN0SGFzaFNldDxDYWNo
ZWRSZXNvdXJjZSo+PigpOwotICAgICAgICAgICAgcmVtYWluaW5nTGlua1ByZWxvYWRzLT5hZGQo
cmVzb3VyY2UpOworICAgICAgICAgICAgcmVtYWluaW5nTGlua1ByZWxvYWRzLmFkZChyZXNvdXJj
ZSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICByZXNvdXJjZS0+
ZGVjcmVhc2VQcmVsb2FkQ291bnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmgKaW5kZXggZTQ1YzA5NTkzMTFkNjU2YWYyNzEzMjE5
NTMwNjZmM2U0YmQ1MzRjOS4uNDkxOTBmN2Y1ZDgyYmJkMDk2YTViYjJlOGY5ZGQzNzczNTExNTEz
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNl
TG9hZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNl
TG9hZGVyLmgKQEAgLTIwOSw3ICsyMDksNyBAQCBwcml2YXRlOgogCiAgICAgaW50IG1fcmVxdWVz
dENvdW50IHsgMCB9OwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPExpc3RIYXNoU2V0PENhY2hlZFJl
c291cmNlKj4+IG1fcHJlbG9hZHM7CisgICAgTGlzdEhhc2hTZXQ8Q2FjaGVkUmVzb3VyY2UqPiBt
X3ByZWxvYWRzOwogICAgIFRpbWVyIG1fdW51c2VkUHJlbG9hZHNUaW1lcjsKIAogICAgIFRpbWVy
IG1fZ2FyYmFnZUNvbGxlY3REb2N1bWVudFJlc291cmNlc1RpbWVyOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAKaW5kZXggOTViNTJhYTNhZDI5MTdmZWI4ZTM1
MWFlMTE4NTYyZjRjYzM3MTU1Ny4uOWNmNjI4ZTk5OTJjOGU0YTI1ZWI4ZWRkNzgxNWQ5NWNlNjFm
YzQzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwCkBA
IC03NSwxOSArNzUsMTcgQEAgTWVtb3J5Q2FjaGU6Ok1lbW9yeUNhY2hlKCkKICAgICB9KTsKIH0K
IAotYXV0byBNZW1vcnlDYWNoZTo6c2Vzc2lvblJlc291cmNlTWFwKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCkgY29uc3QgLT4gQ2FjaGVkUmVzb3VyY2VNYXAqCithdXRvIE1lbW9yeUNhY2hlOjpz
ZXNzaW9uUmVzb3VyY2VNYXAoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKSAtPiBDYWNoZWRSZXNv
dXJjZU1hcCoKIHsKICAgICBBU1NFUlQoc2Vzc2lvbklELmlzVmFsaWQoKSk7Ci0gICAgcmV0dXJu
IG1fc2Vzc2lvblJlc291cmNlcy5nZXQoc2Vzc2lvbklEKTsKKyAgICBhdXRvIGl0ZXJhdG9yID0g
bV9zZXNzaW9uUmVzb3VyY2VzLmZpbmQoc2Vzc2lvbklEKTsKKyAgICByZXR1cm4gaXRlcmF0b3Ig
PT0gbV9zZXNzaW9uUmVzb3VyY2VzLmVuZCgpID8gbnVsbHB0ciA6ICZpdGVyYXRvci0+dmFsdWU7
CiB9CiAKIGF1dG8gTWVtb3J5Q2FjaGU6OmVuc3VyZVNlc3Npb25SZXNvdXJjZU1hcChQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQpIC0+IENhY2hlZFJlc291cmNlTWFwJgogewogICAgIEFTU0VSVChz
ZXNzaW9uSUQuaXNWYWxpZCgpKTsKLSAgICBhdXRvJiBtYXAgPSBtX3Nlc3Npb25SZXNvdXJjZXMu
YWRkKHNlc3Npb25JRCwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwotICAgIGlmICghbWFwKQot
ICAgICAgICBtYXAgPSBtYWtlVW5pcXVlPENhY2hlZFJlc291cmNlTWFwPigpOwotICAgIHJldHVy
biAqbWFwOworICAgIHJldHVybiBtX3Nlc3Npb25SZXNvdXJjZXMuYWRkKHNlc3Npb25JRCwgQ2Fj
aGVkUmVzb3VyY2VNYXAgeyB9KS5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIGJvb2wgTWVtb3J5Q2Fj
aGU6OnNob3VsZFJlbW92ZUZyYWdtZW50SWRlbnRpZmllcihjb25zdCBVUkwmIG9yaWdpbmFsVVJM
KQpAQCAtMTgwLDcgKzE3OCw3IEBAIENhY2hlZFJlc291cmNlKiBNZW1vcnlDYWNoZTo6cmVzb3Vy
Y2VGb3JSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwKICAgICByZXR1cm4g
cmVzb3VyY2VGb3JSZXF1ZXN0SW1wbChyZXF1ZXN0LCAqcmVzb3VyY2VzKTsKIH0KIAotQ2FjaGVk
UmVzb3VyY2UqIE1lbW9yeUNhY2hlOjpyZXNvdXJjZUZvclJlcXVlc3RJbXBsKGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgQ2FjaGVkUmVzb3VyY2VNYXAmIHJlc291cmNlcykKK0NhY2hl
ZFJlc291cmNlKiBNZW1vcnlDYWNoZTo6cmVzb3VyY2VGb3JSZXF1ZXN0SW1wbChjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IENhY2hlZFJlc291cmNlTWFwJiByZXNvdXJjZXMp
CiB7CiAgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOwogICAgIFVSTCB1cmwgPSByZW1v
dmVGcmFnbWVudElkZW50aWZpZXJJZk5lZWRlZChyZXF1ZXN0LnVybCgpKTsKQEAgLTIxOCw3ICsy
MTYsNyBAQCB2b2lkIE1lbW9yeUNhY2hlOjpwcnVuZUxpdmVSZXNvdXJjZXMoYm9vbCBzaG91bGRE
ZXN0cm95RGVjb2RlZERhdGFGb3JBbGxMaXZlUmVzbwogdm9pZCBNZW1vcnlDYWNoZTo6Zm9yRWFj
aFJlc291cmNlKGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChDYWNoZWRSZXNvdXJjZSYpPiYgZnVu
Y3Rpb24pCiB7CiAgICAgZm9yIChhdXRvJiB1bnByb3RlY3RlZExSVUxpc3QgOiBtX2FsbFJlc291
cmNlcykgewotICAgICAgICBmb3IgKGF1dG8mIHJlc291cmNlIDogY29weVRvVmVjdG9yKCp1bnBy
b3RlY3RlZExSVUxpc3QpKQorICAgICAgICBmb3IgKGF1dG8mIHJlc291cmNlIDogY29weVRvVmVj
dG9yKHVucHJvdGVjdGVkTFJVTGlzdCkpCiAgICAgICAgICAgICBmdW5jdGlvbigqcmVzb3VyY2Up
OwogICAgIH0KIH0KQEAgLTIyOSw3ICsyMjcsNyBAQCB2b2lkIE1lbW9yeUNhY2hlOjpmb3JFYWNo
U2Vzc2lvblJlc291cmNlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgV1RGOjpGdQog
ICAgIGlmIChpdCA9PSBtX3Nlc3Npb25SZXNvdXJjZXMuZW5kKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGZvciAoYXV0byYgcmVzb3VyY2UgOiBjb3B5VG9WZWN0b3IoaXQtPnZhbHVlLT52YWx1
ZXMoKSkpCisgICAgZm9yIChhdXRvJiByZXNvdXJjZSA6IGNvcHlUb1ZlY3RvcihpdC0+dmFsdWUu
dmFsdWVzKCkpKQogICAgICAgICBmdW5jdGlvbigqcmVzb3VyY2UpOwogfQogCkBAIC0zMjYsNyAr
MzI0LDcgQEAgdm9pZCBNZW1vcnlDYWNoZTo6cHJ1bmVEZWFkUmVzb3VyY2VzVG9TaXplKHVuc2ln
bmVkIHRhcmdldFNpemUpCiAgICAgZm9yIChpbnQgaSA9IG1fYWxsUmVzb3VyY2VzLnNpemUoKSAt
IDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgIC8vIE1ha2UgYSBjb3B5IG9mIHRoZSBMUlVMaXN0
IGZpcnN0IChhbmQgcmVmIHRoZSByZXNvdXJjZXMpIGFzIGNhbGxpbmcKICAgICAgICAgLy8gZGVz
dHJveURlY29kZWREYXRhKCkgY2FuIGFsdGVyIHRoZSBMUlVMaXN0LgotICAgICAgICBhdXRvIGxy
dUxpc3QgPSBjb3B5VG9WZWN0b3IoKm1fYWxsUmVzb3VyY2VzW2ldKTsKKyAgICAgICAgYXV0byBs
cnVMaXN0ID0gY29weVRvVmVjdG9yKG1fYWxsUmVzb3VyY2VzW2ldKTsKIAogICAgICAgICBMT0co
UmVzb3VyY2VMb2FkaW5nLCAiIGxydSBsaXN0IChzaXplICVsdSkgLSBmbHVzaGluZyBzdGFnZSIs
IGxydUxpc3Quc2l6ZSgpKTsKIApAQCAtMzY5LDcgKzM2Nyw3IEBAIHZvaWQgTWVtb3J5Q2FjaGU6
OnBydW5lRGVhZFJlc291cmNlc1RvU2l6ZSh1bnNpZ25lZCB0YXJnZXRTaXplKQogICAgICAgICAg
ICAgCiAgICAgICAgIC8vIFNocmluayB0aGUgdmVjdG9yIGJhY2sgZG93biBzbyB3ZSBkb24ndCB3
YXN0ZSB0aW1lIGluc3BlY3RpbmcKICAgICAgICAgLy8gZW1wdHkgTFJVIGxpc3RzIG9uIGZ1dHVy
ZSBwcnVuZXMuCi0gICAgICAgIGlmICghbV9hbGxSZXNvdXJjZXNbaV0tPmlzRW1wdHkoKSkKKyAg
ICAgICAgaWYgKCFtX2FsbFJlc291cmNlc1tpXS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjYW5T
aHJpbmtMUlVMaXN0cyA9IGZhbHNlOwogICAgICAgICBlbHNlIGlmIChjYW5TaHJpbmtMUlVMaXN0
cykKICAgICAgICAgICAgIG1fYWxsUmVzb3VyY2VzLnNocmluayhpKTsKQEAgLTQyNiwxMSArNDI0
LDkgQEAgYXV0byBNZW1vcnlDYWNoZTo6bHJ1TGlzdEZvcihDYWNoZWRSZXNvdXJjZSYgcmVzb3Vy
Y2UpIC0+IExSVUxpc3QmCiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICByZXNvdXJjZS5tX2xydUlu
ZGV4ID0gcXVldWVJbmRleDsKICNlbmRpZgotCi0gICAgbV9hbGxSZXNvdXJjZXMucmVzZXJ2ZUNh
cGFjaXR5KHF1ZXVlSW5kZXggKyAxKTsKLSAgICB3aGlsZSAobV9hbGxSZXNvdXJjZXMuc2l6ZSgp
IDw9IHF1ZXVlSW5kZXgpCi0gICAgICAgIG1fYWxsUmVzb3VyY2VzLnVuY2hlY2tlZEFwcGVuZCht
YWtlVW5pcXVlPExSVUxpc3Q+KCkpOwotICAgIHJldHVybiAqbV9hbGxSZXNvdXJjZXNbcXVldWVJ
bmRleF07CisgICAgaWYgKG1fYWxsUmVzb3VyY2VzLnNpemUoKSA8PSBxdWV1ZUluZGV4KQorICAg
ICAgICBtX2FsbFJlc291cmNlcy5ncm93KHF1ZXVlSW5kZXggKyAxKTsKKyAgICByZXR1cm4gbV9h
bGxSZXNvdXJjZXNbcXVldWVJbmRleF07CiB9CiAKIHZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZUZy
b21MUlVMaXN0KENhY2hlZFJlc291cmNlJiByZXNvdXJjZSkKQEAgLTQ4Niw3ICs0ODIsNyBAQCB2
b2lkIE1lbW9yeUNhY2hlOjpyZW1vdmVSZXNvdXJjZXNXaXRoT3JpZ2luKFNlY3VyaXR5T3JpZ2lu
JiBvcmlnaW4pCiAKICAgICBWZWN0b3I8Q2FjaGVkUmVzb3VyY2UqPiByZXNvdXJjZXNXaXRoT3Jp
Z2luOwogICAgIGZvciAoYXV0byYgcmVzb3VyY2VzIDogbV9zZXNzaW9uUmVzb3VyY2VzLnZhbHVl
cygpKSB7Ci0gICAgICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiAqcmVzb3VyY2VzKSB7CisgICAg
ICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiByZXNvdXJjZXMpIHsKICAgICAgICAgICAgIGF1dG8m
IHJlc291cmNlID0gKmtleVZhbHVlLnZhbHVlOwogICAgICAgICAgICAgYXV0byYgcGFydGl0aW9u
TmFtZSA9IGtleVZhbHVlLmtleS5zZWNvbmQ7CiAgICAgICAgICAgICBpZiAocGFydGl0aW9uTmFt
ZSA9PSBvcmlnaW5QYXJ0aXRpb24pIHsKQEAgLTUzMyw3ICs1MjksNyBAQCB2b2lkIE1lbW9yeUNh
Y2hlOjpyZW1vdmVSZXNvdXJjZXNXaXRoT3JpZ2lucyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQs
IGNvbnN0IEhhcwogdm9pZCBNZW1vcnlDYWNoZTo6Z2V0T3JpZ2luc1dpdGhDYWNoZShTZWN1cml0
eU9yaWdpblNldCYgb3JpZ2lucykKIHsKICAgICBmb3IgKGF1dG8mIHJlc291cmNlcyA6IG1fc2Vz
c2lvblJlc291cmNlcy52YWx1ZXMoKSkgewotICAgICAgICBmb3IgKGF1dG8mIGtleVZhbHVlIDog
KnJlc291cmNlcykgeworICAgICAgICBmb3IgKGF1dG8mIGtleVZhbHVlIDogcmVzb3VyY2VzKSB7
CiAgICAgICAgICAgICBhdXRvJiByZXNvdXJjZSA9ICprZXlWYWx1ZS52YWx1ZTsKICAgICAgICAg
ICAgIGF1dG8mIHBhcnRpdGlvbk5hbWUgPSBrZXlWYWx1ZS5rZXkuc2Vjb25kOwogICAgICAgICAg
ICAgaWYgKCFwYXJ0aXRpb25OYW1lLmlzRW1wdHkoKSkKQEAgLTU1MCw3ICs1NDYsNyBAQCBIYXNo
U2V0PFJlZlB0cjxTZWN1cml0eU9yaWdpbj4+IE1lbW9yeUNhY2hlOjpvcmlnaW5zV2l0aENhY2hl
KFBBTDo6U2Vzc2lvbklEIHNlcwogCiAgICAgYXV0byBpdCA9IG1fc2Vzc2lvblJlc291cmNlcy5m
aW5kKHNlc3Npb25JRCk7CiAgICAgaWYgKGl0ICE9IG1fc2Vzc2lvblJlc291cmNlcy5lbmQoKSkg
ewotICAgICAgICBmb3IgKGF1dG8mIGtleVZhbHVlIDogKml0LT52YWx1ZSkgeworICAgICAgICBm
b3IgKGF1dG8mIGtleVZhbHVlIDogaXQtPnZhbHVlKSB7CiAgICAgICAgICAgICBhdXRvJiByZXNv
dXJjZSA9ICprZXlWYWx1ZS52YWx1ZTsKICAgICAgICAgICAgIGF1dG8mIHBhcnRpdGlvbk5hbWUg
PSBrZXlWYWx1ZS5rZXkuc2Vjb25kOwogICAgICAgICAgICAgaWYgKCFwYXJ0aXRpb25OYW1lLmlz
RW1wdHkoKSkKQEAgLTYwOSw3ICs2MDUsNyBAQCB2b2lkIE1lbW9yeUNhY2hlOjpyZW1vdmVSZXF1
ZXN0RnJvbVNlc3Npb25DYWNoZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dAogCiAg
ICAgYXV0byYgbWVtb3J5Q2FjaGUgPSBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCk7CiAgICAgZm9y
IChhdXRvJiByZXNvdXJjZXMgOiBtZW1vcnlDYWNoZS5tX3Nlc3Npb25SZXNvdXJjZXMpIHsKLSAg
ICAgICAgaWYgKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IG1lbW9yeUNhY2hlLnJlc291cmNl
Rm9yUmVxdWVzdEltcGwocmVxdWVzdCwgKnJlc291cmNlcy52YWx1ZSkpCisgICAgICAgIGlmIChD
YWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBtZW1vcnlDYWNoZS5yZXNvdXJjZUZvclJlcXVlc3RJ
bXBsKHJlcXVlc3QsIHJlc291cmNlcy52YWx1ZSkpCiAgICAgICAgICAgICBtZW1vcnlDYWNoZS5y
ZW1vdmUoKnJlc291cmNlKTsKICAgICB9CiB9CkBAIC02MjcsNyArNjIzLDcgQEAgTWVtb3J5Q2Fj
aGU6OlN0YXRpc3RpY3MgTWVtb3J5Q2FjaGU6OmdldFN0YXRpc3RpY3MoKQogICAgIFN0YXRpc3Rp
Y3Mgc3RhdHM7CiAKICAgICBmb3IgKGF1dG8mIHJlc291cmNlcyA6IG1fc2Vzc2lvblJlc291cmNl
cy52YWx1ZXMoKSkgewotICAgICAgICBmb3IgKGF1dG8qIHJlc291cmNlIDogcmVzb3VyY2VzLT52
YWx1ZXMoKSkgeworICAgICAgICBmb3IgKGF1dG8qIHJlc291cmNlIDogcmVzb3VyY2VzLnZhbHVl
cygpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKHJlc291cmNlLT50eXBlKCkpIHsKICAgICAgICAg
ICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlR5cGU6OkltYWdlUmVzb3VyY2U6CiAgICAgICAgICAg
ICAgICAgc3RhdHMuaW1hZ2VzLmFkZFJlc291cmNlKCpyZXNvdXJjZSk7CkBAIC02NjIsNyArNjU4
LDcgQEAgdm9pZCBNZW1vcnlDYWNoZTo6c2V0RGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgd2hpbGUgKCFtX3Nlc3Npb25SZXNvdXJjZXMuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGF1dG8mIHJlc291cmNlcyA9ICptX3Nlc3Npb25SZXNvdXJjZXMuYmVnaW4oKS0+
dmFsdWU7CisgICAgICAgIGF1dG8mIHJlc291cmNlcyA9IG1fc2Vzc2lvblJlc291cmNlcy5iZWdp
bigpLT52YWx1ZTsKICAgICAgICAgQVNTRVJUKCFyZXNvdXJjZXMuaXNFbXB0eSgpKTsKICAgICAg
ICAgcmVtb3ZlKCpyZXNvdXJjZXMuYmVnaW4oKS0+dmFsdWUpOwogICAgIH0KQEAgLTc0Niw3ICs3
NDIsNyBAQCB2b2lkIE1lbW9yeUNhY2hlOjpkdW1wTFJVTGlzdHMoYm9vbCBpbmNsdWRlTGl2ZSkg
Y29uc3QKICAgICBpbnQgc2l6ZSA9IG1fYWxsUmVzb3VyY2VzLnNpemUoKTsKICAgICBmb3IgKGlu
dCBpID0gc2l6ZSAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgIFdURkxvZ0Fsd2F5cygiXG5M
aXN0ICVkOlxuIiwgaSk7Ci0gICAgICAgIGZvciAoYXV0byogcmVzb3VyY2UgOiAqbV9hbGxSZXNv
dXJjZXNbaV0pIHsKKyAgICAgICAgZm9yIChhdXRvKiByZXNvdXJjZSA6IG1fYWxsUmVzb3VyY2Vz
W2ldKSB7CiAgICAgICAgICAgICBpZiAoaW5jbHVkZUxpdmUgfHwgIXJlc291cmNlLT5oYXNDbGll
bnRzKCkpCiAgICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCIgICVwICUuMjU1cyAlLjFmSywg
JS4xZkssIGFjY2Vzc2VzOiAldSwgY2xpZW50czogJWRcbiIsIHJlc291cmNlLCByZXNvdXJjZS0+
dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgcmVzb3VyY2UtPmRlY29kZWRTaXplKCkgLyAx
MDI0LjBmLCAocmVzb3VyY2UtPmVuY29kZWRTaXplKCkgKyByZXNvdXJjZS0+b3ZlcmhlYWRTaXpl
KCkpIC8gMTAyNC4wZiwgcmVzb3VyY2UtPmFjY2Vzc0NvdW50KCksIHJlc291cmNlLT5udW1iZXJP
ZkNsaWVudHMoKSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9NZW1vcnlDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9y
eUNhY2hlLmgKaW5kZXggNTc0NDdmZjFhZjA0NmM2NDhlODRkOTc2YWJmMDA2MTBiZjAwMjhkYi4u
YjBhN2I5NTcxYWNkODZhZmJiZWVkMjUwZDVlM2RkYjJkYjE2NzkxNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmgKQEAgLTE1MCw3ICsxNTAsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCByZXNvdXJjZUFjY2Vzc2VkKENhY2hlZFJlc291cmNlJik7CiAgICAgYm9vbCBp
bkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdChDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpIGNvbnN0
IHsgcmV0dXJuIG1fbGl2ZURlY29kZWRSZXNvdXJjZXMuY29udGFpbnMoJnJlc291cmNlKTsgfQog
Ci0gICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxTZWN1cml0eU9yaWdpbj4+IFNlY3VyaXR5T3Jp
Z2luU2V0OworICAgIHVzaW5nIFNlY3VyaXR5T3JpZ2luU2V0ID0gSGFzaFNldDxSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+PjsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVJlc291cmNlc1dp
dGhPcmlnaW4oU2VjdXJpdHlPcmlnaW4mKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92
ZVJlc291cmNlc1dpdGhPcmlnaW5zKFBBTDo6U2Vzc2lvbklELCBjb25zdCBIYXNoU2V0PFJlZlB0
cjxTZWN1cml0eU9yaWdpbj4+Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRPcmlnaW5z
V2l0aENhY2hlKFNlY3VyaXR5T3JpZ2luU2V0JiBvcmlnaW5zKTsKQEAgLTE2NSwxMSArMTY1LDEx
IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBydW5lTGl2ZVJlc291cmNlc1Rv
U2l6ZSh1bnNpZ25lZCB0YXJnZXRTaXplLCBib29sIHNob3VsZERlc3Ryb3lEZWNvZGVkRGF0YUZv
ckFsbExpdmVSZXNvdXJjZXMgPSBmYWxzZSk7CiAKIHByaXZhdGU6Ci0gICAgdHlwZWRlZiBIYXNo
TWFwPHN0ZDo6cGFpcjxVUkwsIFN0cmluZyAvKiBwYXJ0aXRpb25OYW1lICovPiwgQ2FjaGVkUmVz
b3VyY2UqPiBDYWNoZWRSZXNvdXJjZU1hcDsKLSAgICB0eXBlZGVmIExpc3RIYXNoU2V0PENhY2hl
ZFJlc291cmNlKj4gTFJVTGlzdDsKKyAgICB1c2luZyBDYWNoZWRSZXNvdXJjZU1hcCA9IEhhc2hN
YXA8c3RkOjpwYWlyPFVSTCwgU3RyaW5nIC8qIHBhcnRpdGlvbk5hbWUgKi8+LCBDYWNoZWRSZXNv
dXJjZSo+OworICAgIHVzaW5nIExSVUxpc3QgPSBMaXN0SGFzaFNldDxDYWNoZWRSZXNvdXJjZSo+
OwogCiAgICAgTWVtb3J5Q2FjaGUoKTsKLSAgICB+TWVtb3J5Q2FjaGUoKTsgLy8gTm90IGltcGxl
bWVudGVkIHRvIG1ha2Ugc3VyZSBub2JvZHkgYWNjaWRlbnRhbGx5IGNhbGxzIGRlbGV0ZSAtLSBX
ZWJDb3JlIGRvZXMgbm90IGRlbGV0ZSBzaW5nbGV0b25zLgorICAgIH5NZW1vcnlDYWNoZSgpID0g
ZGVsZXRlOwogCiAgICAgTFJVTGlzdCYgbHJ1TGlzdEZvcihDYWNoZWRSZXNvdXJjZSYpOwogCkBA
IC0xODAsMTAgKzE4MCwxMCBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIGRlYWRDYXBhY2l0eSgp
IGNvbnN0OwogICAgIGJvb2wgbmVlZHNQcnVuaW5nKCkgY29uc3Q7CiAKLSAgICBDYWNoZWRSZXNv
dXJjZSogcmVzb3VyY2VGb3JSZXF1ZXN0SW1wbChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBDYWNo
ZWRSZXNvdXJjZU1hcCYpOworICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZUZvclJlcXVlc3RJ
bXBsKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IENhY2hlZFJlc291cmNlTWFwJik7CiAK
ICAgICBDYWNoZWRSZXNvdXJjZU1hcCYgZW5zdXJlU2Vzc2lvblJlc291cmNlTWFwKFBBTDo6U2Vz
c2lvbklEKTsKLSAgICBDYWNoZWRSZXNvdXJjZU1hcCogc2Vzc2lvblJlc291cmNlTWFwKFBBTDo6
U2Vzc2lvbklEKSBjb25zdDsKKyAgICBDYWNoZWRSZXNvdXJjZU1hcCogc2Vzc2lvblJlc291cmNl
TWFwKFBBTDo6U2Vzc2lvbklEKTsKIAogICAgIGJvb2wgbV9kaXNhYmxlZCB7IGZhbHNlIH07CiAg
ICAgYm9vbCBtX2luUHJ1bmVSZXNvdXJjZXMgeyBmYWxzZSB9OwpAQCAtMTk5LDE0ICsxOTksMTQg
QEAgcHJpdmF0ZToKICAgICAvLyBTaXplLWFkanVzdGVkIGFuZCBwb3B1bGFyaXR5LWF3YXJlIExS
VSBsaXN0IGNvbGxlY3Rpb24gZm9yIGNhY2hlIG9iamVjdHMuICBUaGlzIGNvbGxlY3Rpb24gY2Fu
IGhvbGQKICAgICAvLyBtb3JlIHJlc291cmNlcyB0aGFuIHRoZSBjYWNoZWQgcmVzb3VyY2UgbWFw
LCBzaW5jZSBpdCBjYW4gYWxzbyBob2xkICJzdGFsZSIgbXVsdGlwbGUgdmVyc2lvbnMgb2Ygb2Jq
ZWN0cyB0aGF0IGFyZQogICAgIC8vIHdhaXRpbmcgdG8gZGllIHdoZW4gdGhlIGNsaWVudHMgcmVm
ZXJlbmNpbmcgdGhlbSBnbyBhd2F5LgotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TFJVTGlz
dD4sIDMyPiBtX2FsbFJlc291cmNlczsKKyAgICBWZWN0b3I8TFJVTGlzdCwgMzI+IG1fYWxsUmVz
b3VyY2VzOwogICAgIAogICAgIC8vIExpc3QganVzdCBmb3IgbGl2ZSByZXNvdXJjZXMgd2l0aCBk
ZWNvZGVkIGRhdGEuICBBY2Nlc3MgdG8gdGhpcyBsaXN0IGlzIGJhc2VkIG9mZiBvZiBwYWludGlu
ZyB0aGUgcmVzb3VyY2UuCiAgICAgTFJVTGlzdCBtX2xpdmVEZWNvZGVkUmVzb3VyY2VzOwogICAg
IAogICAgIC8vIEEgVVJMLWJhc2VkIG1hcCBvZiBhbGwgcmVzb3VyY2VzIHRoYXQgYXJlIGluIHRo
ZSBjYWNoZSAoaW5jbHVkaW5nIHRoZSBmcmVzaGVzdCB2ZXJzaW9uIG9mIG9iamVjdHMgdGhhdCBh
cmUgY3VycmVudGx5IGJlaW5nIAogICAgIC8vIHJlZmVyZW5jZWQgYnkgYSBXZWIgcGFnZSkuCi0g
ICAgdHlwZWRlZiBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVk
UmVzb3VyY2VNYXA+PiBTZXNzaW9uQ2FjaGVkUmVzb3VyY2VNYXA7CisgICAgdXNpbmcgU2Vzc2lv
bkNhY2hlZFJlc291cmNlTWFwID0gSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgQ2FjaGVkUmVzb3Vy
Y2VNYXA+OwogICAgIFNlc3Npb25DYWNoZWRSZXNvdXJjZU1hcCBtX3Nlc3Npb25SZXNvdXJjZXM7
CiAKICAgICBUaW1lciBtX3BydW5lVGltZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZvY3VzQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJv
bGxlci5jcHAKaW5kZXggYmZiYmFkZWE3MmUxNGM5YmM3NjA3ZWFlOWUzZTAzZjk1MDlmMmJkNy4u
OWNlMjYzNDUyNjlkMzUzMGU0NDA3MmZiNDJhMmU2MDQ1YThhY2NmNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcApAQCAtOTQyLDExICs5NDIsNyBAQCB2b2lkIEZvY3Vz
Q29udHJvbGxlcjo6c2V0SXNWaXNpYmxlQW5kQWN0aXZlSW50ZXJuYWwoYm9vbCBjb250ZW50SXNW
aXNpYmxlKQogICAgICAgICBpZiAoIWZyYW1lVmlldykKICAgICAgICAgICAgIGNvbnRpbnVlOwog
Ci0gICAgICAgIGNvbnN0IEhhc2hTZXQ8U2Nyb2xsYWJsZUFyZWEqPiogc2Nyb2xsYWJsZUFyZWFz
ID0gZnJhbWVWaWV3LT5zY3JvbGxhYmxlQXJlYXMoKTsKLSAgICAgICAgaWYgKCFzY3JvbGxhYmxl
QXJlYXMpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBmb3IgKGF1dG8mIHNjcm9s
bGFibGVBcmVhIDogKnNjcm9sbGFibGVBcmVhcykgeworICAgICAgICBmb3IgKGF1dG8mIHNjcm9s
bGFibGVBcmVhIDogZnJhbWVWaWV3LT5zY3JvbGxhYmxlQXJlYXMoKSkgewogICAgICAgICAgICAg
QVNTRVJUKHNjcm9sbGFibGVBcmVhLT5zY3JvbGxiYXJzQ2FuQmVBY3RpdmUoKSB8fCBtX3BhZ2Uu
c2hvdWxkU3VwcHJlc3NTY3JvbGxiYXJBbmltYXRpb25zKCkpOwogCiAgICAgICAgICAgICBjb250
ZW50QXJlYURpZFNob3dPckhpZGUoc2Nyb2xsYWJsZUFyZWEsIGNvbnRlbnRJc1Zpc2libGUpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IDY1ODNjMzY5ZmRhMWMwNmQ5NDM3NWNjZGMy
M2ZjOGI3MjIzMGJmNWEuLmE5Mzk3NWU2NGQyNmQwN2FmMDFmYWRjOTBkNGExMGU1YTk1NWM4OWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTU3MywxMCArNTczLDEwIEBAIHZvaWQg
RnJhbWVWaWV3OjpkaWREZXN0cm95UmVuZGVyVHJlZSgpCiAKICAgICAvLyBJZiB0aGUgcmVuZGVy
IHRyZWUgaXMgZGVzdHJveWVkIGJlbG93IEZyYW1lVmlldzo6dXBkYXRlRW1iZWRkZWRPYmplY3Rz
KCksIHRoZXJlIHdpbGwgc3RpbGwgYmUgYSBudWxsIHNlbnRpbmVsIGluIHRoZSBzZXQuCiAgICAg
Ly8gRXZlcnl0aGluZyBlbHNlIHNob3VsZCBoYXZlIHJlbW92ZWQgaXRzZWxmIGFzIHRoZSB0cmVl
IHdhcyBmZWxsZWQuCi0gICAgQVNTRVJUKCFtX2VtYmVkZGVkT2JqZWN0c1RvVXBkYXRlIHx8IG1f
ZW1iZWRkZWRPYmplY3RzVG9VcGRhdGUtPmlzRW1wdHkoKSB8fCAobV9lbWJlZGRlZE9iamVjdHNU
b1VwZGF0ZS0+c2l6ZSgpID09IDEgJiYgbV9lbWJlZGRlZE9iamVjdHNUb1VwZGF0ZS0+Zmlyc3Qo
KSA9PSBudWxscHRyKSk7CisgICAgQVNTRVJUKG1fZW1iZWRkZWRPYmplY3RzVG9VcGRhdGUuaXNF
bXB0eSgpIHx8IChtX2VtYmVkZGVkT2JqZWN0c1RvVXBkYXRlLnNpemUoKSA9PSAxICYmIG1fZW1i
ZWRkZWRPYmplY3RzVG9VcGRhdGUuZmlyc3QoKSA9PSBudWxscHRyKSk7CiAKLSAgICBBU1NFUlQo
IW1fdmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMgfHwgbV92aWV3cG9ydENvbnN0cmFpbmVkT2Jq
ZWN0cy0+Y29tcHV0ZXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIW1fc2xvd1JlcGFpbnRPYmplY3Rz
IHx8IG1fc2xvd1JlcGFpbnRPYmplY3RzLT5jb21wdXRlc0VtcHR5KCkpOworICAgIEFTU0VSVCht
X3ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzLmNvbXB1dGVzRW1wdHkoKSk7CisgICAgQVNTRVJU
KG1fc2xvd1JlcGFpbnRPYmplY3RzLmNvbXB1dGVzRW1wdHkoKSk7CiB9CiAKIHZvaWQgRnJhbWVW
aWV3OjpzZXRDb250ZW50c1NpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKQEAgLTgxOCwxMCArODE4
LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJMYXlvdXQo
KQogCiB2b2lkIEZyYW1lVmlldzo6aW52YWxpZGF0ZVNjcm9sbGJhcnNGb3JBbGxTY3JvbGxhYmxl
QXJlYXMoKQogewotICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYXMpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGZvciAoYXV0byogc2Nyb2xsYWJsZUFyZWEgOiAqbV9zY3JvbGxhYmxlQXJlYXMpCisg
ICAgZm9yIChhdXRvKiBzY3JvbGxhYmxlQXJlYSA6IG1fc2Nyb2xsYWJsZUFyZWFzKQogICAgICAg
ICBzY3JvbGxhYmxlQXJlYS0+aW52YWxpZGF0ZVNjcm9sbGJhcnMoKTsKIH0KIApAQCAtMTM0Miwy
MiArMTMzOSwxNiBAQCBSZW5kZXJCb3gqIEZyYW1lVmlldzo6ZW1iZWRkZWRDb250ZW50Qm94KCkg
Y29uc3QKIAogdm9pZCBGcmFtZVZpZXc6OmFkZEVtYmVkZGVkT2JqZWN0VG9VcGRhdGUoUmVuZGVy
RW1iZWRkZWRPYmplY3QmIGVtYmVkZGVkT2JqZWN0KQogewotICAgIGlmICghbV9lbWJlZGRlZE9i
amVjdHNUb1VwZGF0ZSkKLSAgICAgICAgbV9lbWJlZGRlZE9iamVjdHNUb1VwZGF0ZSA9IG1ha2VV
bmlxdWU8TGlzdEhhc2hTZXQ8UmVuZGVyRW1iZWRkZWRPYmplY3QqPj4oKTsKLQogICAgIGF1dG8m
IGVsZW1lbnQgPSBlbWJlZGRlZE9iamVjdC5mcmFtZU93bmVyRWxlbWVudCgpOwogICAgIGlmIChp
czxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50PihlbGVtZW50KSkKICAgICAgICAgZG93bmNhc3Q8SFRN
TFBsdWdJbkltYWdlRWxlbWVudD4oZWxlbWVudCkuc2V0TmVlZHNXaWRnZXRVcGRhdGUodHJ1ZSk7
CiAKLSAgICBtX2VtYmVkZGVkT2JqZWN0c1RvVXBkYXRlLT5hZGQoJmVtYmVkZGVkT2JqZWN0KTsK
KyAgICBtX2VtYmVkZGVkT2JqZWN0c1RvVXBkYXRlLmFkZCgmZW1iZWRkZWRPYmplY3QpOwogfQog
CiB2b2lkIEZyYW1lVmlldzo6cmVtb3ZlRW1iZWRkZWRPYmplY3RUb1VwZGF0ZShSZW5kZXJFbWJl
ZGRlZE9iamVjdCYgZW1iZWRkZWRPYmplY3QpCiB7Ci0gICAgaWYgKCFtX2VtYmVkZGVkT2JqZWN0
c1RvVXBkYXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2VtYmVkZGVkT2JqZWN0c1RvVXBk
YXRlLT5yZW1vdmUoJmVtYmVkZGVkT2JqZWN0KTsKKyAgICBtX2VtYmVkZGVkT2JqZWN0c1RvVXBk
YXRlLnJlbW92ZSgmZW1iZWRkZWRPYmplY3QpOwogfQogCiB2b2lkIEZyYW1lVmlldzo6c2V0TWVk
aWFUeXBlKGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlKQpAQCAtMTUxMSwxMSArMTUwMiw3IEBAIHZv
aWQgRnJhbWVWaWV3OjphZGRTbG93UmVwYWludE9iamVjdChSZW5kZXJFbGVtZW50JiByZW5kZXJl
cikKIHsKICAgICBib29sIGhhZFNsb3dSZXBhaW50T2JqZWN0cyA9IGhhc1Nsb3dSZXBhaW50T2Jq
ZWN0cygpOwogCi0gICAgaWYgKCFtX3Nsb3dSZXBhaW50T2JqZWN0cykKLSAgICAgICAgbV9zbG93
UmVwYWludE9iamVjdHMgPSBtYWtlVW5pcXVlPFdlYWtIYXNoU2V0PFJlbmRlckVsZW1lbnQ+Pigp
OwotCi0gICAgYXV0byBhZGRSZXN1bHQgPSBtX3Nsb3dSZXBhaW50T2JqZWN0cy0+YWRkKHJlbmRl
cmVyKTsKLSAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICBpZiAobV9zbG93UmVw
YWludE9iamVjdHMuYWRkKHJlbmRlcmVyKS5pc05ld0VudHJ5KSB7CiAgICAgICAgIGlmIChhdXRv
IGxheWVyID0gcmVuZGVyZXIuZW5jbG9zaW5nTGF5ZXIoKSkKICAgICAgICAgICAgIGxheWVyLT5z
ZXROZWVkc1Njcm9sbGluZ1RyZWVVcGRhdGUoKTsKICAgICAKQEAgLTE1MzEsMTAgKzE1MTgsNyBA
QCB2b2lkIEZyYW1lVmlldzo6YWRkU2xvd1JlcGFpbnRPYmplY3QoUmVuZGVyRWxlbWVudCYgcmVu
ZGVyZXIpCiAKIHZvaWQgRnJhbWVWaWV3OjpyZW1vdmVTbG93UmVwYWludE9iamVjdChSZW5kZXJF
bGVtZW50JiByZW5kZXJlcikKIHsKLSAgICBpZiAoIW1fc2xvd1JlcGFpbnRPYmplY3RzKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBib29sIHJlbW92ZWQgPSBtX3Nsb3dSZXBhaW50T2JqZWN0cy0+
cmVtb3ZlKHJlbmRlcmVyKTsKKyAgICBib29sIHJlbW92ZWQgPSBtX3Nsb3dSZXBhaW50T2JqZWN0
cy5yZW1vdmUocmVuZGVyZXIpOwogICAgIGlmIChyZW1vdmVkKSB7CiAgICAgICAgIGlmIChhdXRv
IGxheWVyID0gcmVuZGVyZXIuZW5jbG9zaW5nTGF5ZXIoKSkKICAgICAgICAgICAgIGxheWVyLT5z
ZXROZWVkc1Njcm9sbGluZ1RyZWVVcGRhdGUoKTsKQEAgLTE1NDMsMjAgKzE1MjcsMTYgQEAgdm9p
ZCBGcmFtZVZpZXc6OnJlbW92ZVNsb3dSZXBhaW50T2JqZWN0KFJlbmRlckVsZW1lbnQmIHJlbmRl
cmVyKQogICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNsb3dSZXBhaW50T2JqZWN0
c0RpZENoYW5nZSgqdGhpcyk7CiAgICAgfQogCi0gICAgaWYgKCFtX3Nsb3dSZXBhaW50T2JqZWN0
cy0+Y29tcHV0ZXNFbXB0eSgpKQorICAgIGlmICghbV9zbG93UmVwYWludE9iamVjdHMuY29tcHV0
ZXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Nsb3dSZXBhaW50T2JqZWN0cyA9
IG51bGxwdHI7CisgICAgbV9zbG93UmVwYWludE9iamVjdHMuY2xlYXIoKTsKICAgICB1cGRhdGVD
YW5CbGl0T25TY3JvbGxSZWN1cnNpdmVseSgpOwogfQogCiB2b2lkIEZyYW1lVmlldzo6YWRkVmll
d3BvcnRDb25zdHJhaW5lZE9iamVjdChSZW5kZXJMYXllck1vZGVsT2JqZWN0JiBvYmplY3QpCiB7
Ci0gICAgaWYgKCFtX3ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzKQotICAgICAgICBtX3ZpZXdw
b3J0Q29uc3RyYWluZWRPYmplY3RzID0gbWFrZVVuaXF1ZTxXZWFrSGFzaFNldDxSZW5kZXJMYXll
ck1vZGVsT2JqZWN0Pj4oKTsKLQotICAgIGlmICghbV92aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0
cy0+Y29udGFpbnMob2JqZWN0KSkgewotICAgICAgICBtX3ZpZXdwb3J0Q29uc3RyYWluZWRPYmpl
Y3RzLT5hZGQob2JqZWN0KTsKKyAgICBpZiAobV92aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cy5h
ZGQob2JqZWN0KS5pc05ld0VudHJ5KSB7CiAgICAgICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKQog
ICAgICAgICAgICAgdXBkYXRlQ2FuQmxpdE9uU2Nyb2xsUmVjdXJzaXZlbHkoKTsKIApAQCAtMTU2
Nyw3ICsxNTQ3LDcgQEAgdm9pZCBGcmFtZVZpZXc6OmFkZFZpZXdwb3J0Q29uc3RyYWluZWRPYmpl
Y3QoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgb2JqZWN0KQogCiB2b2lkIEZyYW1lVmlldzo6cmVt
b3ZlVmlld3BvcnRDb25zdHJhaW5lZE9iamVjdChSZW5kZXJMYXllck1vZGVsT2JqZWN0JiBvYmpl
Y3QpCiB7Ci0gICAgaWYgKG1fdmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMgJiYgbV92aWV3cG9y
dENvbnN0cmFpbmVkT2JqZWN0cy0+cmVtb3ZlKG9iamVjdCkpIHsKKyAgICBpZiAobV92aWV3cG9y
dENvbnN0cmFpbmVkT2JqZWN0cy5yZW1vdmUob2JqZWN0KSkgewogICAgICAgICBpZiAoYXV0byBz
Y3JvbGxpbmdDb29yZGluYXRvciA9IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCiAgICAg
ICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+ZnJhbWVWaWV3Rml4ZWRPYmplY3RzRGlkQ2hh
bmdlKCp0aGlzKTsKIApAQCAtMjEwMiw3ICsyMDgyLDcgQEAgT3B0aW9uU2V0PFN0eWxlQ29sb3I6
Ok9wdGlvbnM+IEZyYW1lVmlldzo6c3R5bGVDb2xvck9wdGlvbnMoKSBjb25zdAogCiBib29sIEZy
YW1lVmlldzo6c2Nyb2xsQ29udGVudHNGYXN0UGF0aChjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0
YSwgY29uc3QgSW50UmVjdCYgcmVjdFRvU2Nyb2xsLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkK
IHsKLSAgICBpZiAoIW1fdmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMgfHwgbV92aWV3cG9ydENv
bnN0cmFpbmVkT2JqZWN0cy0+Y29tcHV0ZXNFbXB0eSgpKSB7CisgICAgaWYgKG1fdmlld3BvcnRD
b25zdHJhaW5lZE9iamVjdHMuY29tcHV0ZXNFbXB0eSgpKSB7CiAgICAgICAgIGZyYW1lKCkucGFn
ZSgpLT5jaHJvbWUoKS5zY3JvbGwoc2Nyb2xsRGVsdGEsIHJlY3RUb1Njcm9sbCwgY2xpcFJlY3Qp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0yMTExLDcgKzIwOTEsNyBAQCBib29s
IEZyYW1lVmlldzo6c2Nyb2xsQ29udGVudHNGYXN0UGF0aChjb25zdCBJbnRTaXplJiBzY3JvbGxE
ZWx0YSwgY29uc3QgSW50UmVjdAogCiAgICAgLy8gR2V0IHRoZSByZWN0cyBvZiB0aGUgZml4ZWQg
b2JqZWN0cyB2aXNpYmxlIGluIHRoZSByZWN0VG9TY3JvbGwKICAgICBSZWdpb24gcmVnaW9uVG9V
cGRhdGU7Ci0gICAgZm9yIChhdXRvJiByZW5kZXJlciA6ICptX3ZpZXdwb3J0Q29uc3RyYWluZWRP
YmplY3RzKSB7CisgICAgZm9yIChhdXRvJiByZW5kZXJlciA6IG1fdmlld3BvcnRDb25zdHJhaW5l
ZE9iamVjdHMpIHsKICAgICAgICAgaWYgKCFyZW5kZXJlci5zdHlsZSgpLmhhc1ZpZXdwb3J0Q29u
c3RyYWluZWRQb3NpdGlvbigpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChy
ZW5kZXJlci5pc0NvbXBvc2l0ZWQoKSkKQEAgLTIxODEsMTIgKzIxNjEsOSBAQCB2b2lkIEZyYW1l
Vmlldzo6c2Nyb2xsQ29udGVudHNTbG93UGF0aChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KQog
CiB2b2lkIEZyYW1lVmlldzo6cmVwYWludFNsb3dSZXBhaW50T2JqZWN0cygpCiB7Ci0gICAgaWYg
KCFtX3Nsb3dSZXBhaW50T2JqZWN0cykKLSAgICAgICAgcmV0dXJuOwotCiAgICAgLy8gUmVuZGVy
ZXJzIHdpdGggZml4ZWQgYmFja2dyb3VuZHMgbWF5IGJlIGluIGNvbXBvc2l0aW5nIGxheWVycywg
c28gd2UgbmVlZCB0byBleHBsaWNpdGx5CiAgICAgLy8gcmVwYWludCB0aGVtIGFmdGVyIHNjcm9s
bGluZy4KLSAgICBmb3IgKGF1dG8mIHJlbmRlcmVyIDogKm1fc2xvd1JlcGFpbnRPYmplY3RzKQor
ICAgIGZvciAoYXV0byYgcmVuZGVyZXIgOiBtX3Nsb3dSZXBhaW50T2JqZWN0cykKICAgICAgICAg
cmVuZGVyZXIucmVwYWludFNsb3dSZXBhaW50T2JqZWN0KCk7CiB9CiAKQEAgLTI0NjgsNyArMjQ0
NSw3IEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRWaWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0c05lZWRM
YXlvdXQoKQogICAgIGlmICghaGFzVmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgZm9yIChhdXRvJiByZW5kZXJlciA6ICptX3ZpZXdwb3J0Q29uc3Ry
YWluZWRPYmplY3RzKSB7CisgICAgZm9yIChhdXRvJiByZW5kZXJlciA6IG1fdmlld3BvcnRDb25z
dHJhaW5lZE9iamVjdHMpIHsKICAgICAgICAgcmVuZGVyZXIuc2V0TmVlZHNMYXlvdXQoKTsKICAg
ICAgICAgaWYgKHJlbmRlcmVyLmhhc0xheWVyKCkpIHsKICAgICAgICAgICAgIGF1dG8qIGxheWVy
ID0gZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KHJlbmRlcmVyKS5sYXllcigpOwpAQCAt
MzI1OSwyMyArMzIzNiwyMyBAQCB2b2lkIEZyYW1lVmlldzo6dXBkYXRlRW1iZWRkZWRPYmplY3Qo
UmVuZGVyRW1iZWRkZWRPYmplY3QmIGVtYmVkZGVkT2JqZWN0KQogYm9vbCBGcmFtZVZpZXc6OnVw
ZGF0ZUVtYmVkZGVkT2JqZWN0cygpCiB7CiAgICAgU2V0Rm9yU2NvcGU8Ym9vbD4gaW5VcGRhdGVF
bWJlZGRlZE9iamVjdHMobV9pblVwZGF0ZUVtYmVkZGVkT2JqZWN0cywgdHJ1ZSk7Ci0gICAgaWYg
KGxheW91dENvbnRleHQoKS5pc0xheW91dE5lc3RlZCgpIHx8ICFtX2VtYmVkZGVkT2JqZWN0c1Rv
VXBkYXRlIHx8IG1fZW1iZWRkZWRPYmplY3RzVG9VcGRhdGUtPmlzRW1wdHkoKSkKKyAgICBpZiAo
bGF5b3V0Q29udGV4dCgpLmlzTGF5b3V0TmVzdGVkKCkgfHwgbV9lbWJlZGRlZE9iamVjdHNUb1Vw
ZGF0ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgV2lkZ2V0SGllcmFy
Y2h5VXBkYXRlc1N1c3BlbnNpb25TY29wZSBzdXNwZW5kV2lkZ2V0SGllcmFyY2h5VXBkYXRlczsK
IAogICAgIC8vIEluc2VydCBhIG1hcmtlciBmb3Igd2hlcmUgd2Ugc2hvdWxkIHN0b3AuCi0gICAg
QVNTRVJUKCFtX2VtYmVkZGVkT2JqZWN0c1RvVXBkYXRlLT5jb250YWlucyhudWxscHRyKSk7Ci0g
ICAgbV9lbWJlZGRlZE9iamVjdHNUb1VwZGF0ZS0+YWRkKG51bGxwdHIpOworICAgIEFTU0VSVCgh
bV9lbWJlZGRlZE9iamVjdHNUb1VwZGF0ZS5jb250YWlucyhudWxscHRyKSk7CisgICAgbV9lbWJl
ZGRlZE9iamVjdHNUb1VwZGF0ZS5hZGQobnVsbHB0cik7CiAKLSAgICB3aGlsZSAoIW1fZW1iZWRk
ZWRPYmplY3RzVG9VcGRhdGUtPmlzRW1wdHkoKSkgewotICAgICAgICBhdXRvIGVtYmVkZGVkT2Jq
ZWN0ID0gbV9lbWJlZGRlZE9iamVjdHNUb1VwZGF0ZS0+dGFrZUZpcnN0KCk7CisgICAgd2hpbGUg
KCFtX2VtYmVkZGVkT2JqZWN0c1RvVXBkYXRlLmlzRW1wdHkoKSkgeworICAgICAgICBhdXRvIGVt
YmVkZGVkT2JqZWN0ID0gbV9lbWJlZGRlZE9iamVjdHNUb1VwZGF0ZS50YWtlRmlyc3QoKTsKICAg
ICAgICAgaWYgKCFlbWJlZGRlZE9iamVjdCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB1
cGRhdGVFbWJlZGRlZE9iamVjdCgqZW1iZWRkZWRPYmplY3QpOwogICAgIH0KIAotICAgIHJldHVy
biBtX2VtYmVkZGVkT2JqZWN0c1RvVXBkYXRlLT5pc0VtcHR5KCk7CisgICAgcmV0dXJuIG1fZW1i
ZWRkZWRPYmplY3RzVG9VcGRhdGUuaXNFbXB0eSgpOwogfQogCiB2b2lkIEZyYW1lVmlldzo6dXBk
YXRlRW1iZWRkZWRPYmplY3RzVGltZXJGaXJlZCgpCkBAIC0zNzgyLDcgKzM3NTksNyBAQCBmbG9h
dCBGcmFtZVZpZXc6OmFkanVzdFNjcm9sbFN0ZXBGb3JGaXhlZENvbnRlbnQoZmxvYXQgc3RlcCwg
U2Nyb2xsYmFyT3JpZW50YXRpbwogICAgIGlmIChncmFudWxhcml0eSAhPSBTY3JvbGxCeVBhZ2Ug
fHwgb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKICAgICAgICAgcmV0dXJuIHN0
ZXA7CiAKLSAgICBUcmFja2VkUmVuZGVyZXJMaXN0SGFzaFNldCogcG9zaXRpb25lZE9iamVjdHMg
PSBudWxscHRyOworICAgIGNvbnN0IFRyYWNrZWRSZW5kZXJlckxpc3RIYXNoU2V0KiBwb3NpdGlv
bmVkT2JqZWN0cyA9IG51bGxwdHI7CiAgICAgaWYgKFJlbmRlclZpZXcqIHJvb3QgPSBmcmFtZSgp
LmNvbnRlbnRSZW5kZXJlcigpKSB7CiAgICAgICAgIGlmICghcm9vdC0+aGFzUG9zaXRpb25lZE9i
amVjdHMoKSkKICAgICAgICAgICAgIHJldHVybiBzdGVwOwpAQCAtMzk0NSwxMSArMzkyMiwxMSBA
QCB2b2lkIEZyYW1lVmlldzo6dXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoKQogICAgICAgICByZXR1
cm47CiAKICAgICBpZiAoIWlzU2Nyb2xsYWJsZSgpKSB7Ci0gICAgICAgIHBhcmVudEZyYW1lVmll
dy0+cmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisgICAgICAgIHBhcmVudEZyYW1lVmlldy0+
cmVtb3ZlU2Nyb2xsYWJsZUFyZWEoKnRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgcGFyZW50RnJhbWVWaWV3LT5hZGRTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKyAgICBwYXJlbnRG
cmFtZVZpZXctPmFkZFNjcm9sbGFibGVBcmVhKCp0aGlzKTsKIH0KIAogYm9vbCBGcmFtZVZpZXc6
OnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QKQEAgLTM5NzYsMTAgKzM5NTMs
NyBAQCB2b2lkIEZyYW1lVmlldzo6bm90aWZ5UGFnZVRoYXRDb250ZW50QXJlYVdpbGxQYWludCgp
IGNvbnN0CiAKICAgICBjb250ZW50QXJlYVdpbGxQYWludCgpOwogCi0gICAgaWYgKCFtX3Njcm9s
bGFibGVBcmVhcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChhdXRvJiBzY3JvbGxhYmxl
QXJlYSA6ICptX3Njcm9sbGFibGVBcmVhcykKKyAgICBmb3IgKGF1dG8mIHNjcm9sbGFibGVBcmVh
IDogbV9zY3JvbGxhYmxlQXJlYXMpCiAgICAgICAgIHNjcm9sbGFibGVBcmVhLT5jb250ZW50QXJl
YVdpbGxQYWludCgpOwogfQogCkBAIC01MDgwLDEyICs1MDU0LDkgQEAgU3RyaW5nIEZyYW1lVmll
dzo6dHJhY2tlZFJlcGFpbnRSZWN0c0FzVGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIHRzLnJlbGVh
c2UoKTsKIH0KIAotYm9vbCBGcmFtZVZpZXc6OmFkZFNjcm9sbGFibGVBcmVhKFNjcm9sbGFibGVB
cmVhKiBzY3JvbGxhYmxlQXJlYSkKK2Jvb2wgRnJhbWVWaWV3OjphZGRTY3JvbGxhYmxlQXJlYShT
Y3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCiB7Ci0gICAgaWYgKCFtX3Njcm9sbGFibGVB
cmVhcykKLSAgICAgICAgbV9zY3JvbGxhYmxlQXJlYXMgPSBtYWtlVW5pcXVlPFNjcm9sbGFibGVB
cmVhU2V0PigpOwotICAgIAotICAgIGlmIChtX3Njcm9sbGFibGVBcmVhcy0+YWRkKHNjcm9sbGFi
bGVBcmVhKS5pc05ld0VudHJ5KSB7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWFzLmFkZCgmc2Ny
b2xsYWJsZUFyZWEpLmlzTmV3RW50cnkpIHsKICAgICAgICAgc2Nyb2xsYWJsZUFyZWFTZXRDaGFu
Z2VkKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTUwOTMsMTggKzUwNjQsMTgg
QEAgYm9vbCBGcmFtZVZpZXc6OmFkZFNjcm9sbGFibGVBcmVhKFNjcm9sbGFibGVBcmVhKiBzY3Jv
bGxhYmxlQXJlYSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgRnJhbWVWaWV3OjpyZW1v
dmVTY3JvbGxhYmxlQXJlYShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCitib29sIEZy
YW1lVmlldzo6cmVtb3ZlU2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVB
cmVhKQogewotICAgIGlmIChtX3Njcm9sbGFibGVBcmVhcyAmJiBtX3Njcm9sbGFibGVBcmVhcy0+
cmVtb3ZlKHNjcm9sbGFibGVBcmVhKSkgeworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhcy5yZW1v
dmUoJnNjcm9sbGFibGVBcmVhKSkgewogICAgICAgICBzY3JvbGxhYmxlQXJlYVNldENoYW5nZWQo
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
Ym9vbCBGcmFtZVZpZXc6OmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEqIHNj
cm9sbGFibGVBcmVhKSBjb25zdAorYm9vbCBGcmFtZVZpZXc6OmNvbnRhaW5zU2Nyb2xsYWJsZUFy
ZWEoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKSBjb25zdAogewotICAgIHJldHVybiBt
X3Njcm9sbGFibGVBcmVhcyAmJiBtX3Njcm9sbGFibGVBcmVhcy0+Y29udGFpbnMoc2Nyb2xsYWJs
ZUFyZWEpOworICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhcy5jb250YWlucygmc2Nyb2xsYWJs
ZUFyZWEpOwogfQogCiB2b2lkIEZyYW1lVmlldzo6c2Nyb2xsYWJsZUFyZWFTZXRDaGFuZ2VkKCkK
QEAgLTUxMjQsNyArNTA5NSw3IEBAIHZvaWQgRnJhbWVWaWV3OjphZGRDaGlsZChXaWRnZXQmIHdp
ZGdldCkKICAgICBpZiAoaXM8RnJhbWVWaWV3Pih3aWRnZXQpKSB7CiAgICAgICAgIGF1dG8mIGNo
aWxkRnJhbWVWaWV3ID0gZG93bmNhc3Q8RnJhbWVWaWV3Pih3aWRnZXQpOwogICAgICAgICBpZiAo
Y2hpbGRGcmFtZVZpZXcuaXNTY3JvbGxhYmxlKCkpCi0gICAgICAgICAgICBhZGRTY3JvbGxhYmxl
QXJlYSgmY2hpbGRGcmFtZVZpZXcpOworICAgICAgICAgICAgYWRkU2Nyb2xsYWJsZUFyZWEoY2hp
bGRGcmFtZVZpZXcpOwogICAgIH0KIAogICAgIFNjcm9sbFZpZXc6OmFkZENoaWxkKHdpZGdldCk7
CkBAIC01MTMzLDcgKzUxMDQsNyBAQCB2b2lkIEZyYW1lVmlldzo6YWRkQ2hpbGQoV2lkZ2V0JiB3
aWRnZXQpCiB2b2lkIEZyYW1lVmlldzo6cmVtb3ZlQ2hpbGQoV2lkZ2V0JiB3aWRnZXQpCiB7CiAg
ICAgaWYgKGlzPEZyYW1lVmlldz4od2lkZ2V0KSkKLSAgICAgICAgcmVtb3ZlU2Nyb2xsYWJsZUFy
ZWEoJmRvd25jYXN0PEZyYW1lVmlldz4od2lkZ2V0KSk7CisgICAgICAgIHJlbW92ZVNjcm9sbGFi
bGVBcmVhKGRvd25jYXN0PEZyYW1lVmlldz4od2lkZ2V0KSk7CiAKICAgICBTY3JvbGxWaWV3Ojpy
ZW1vdmVDaGlsZCh3aWRnZXQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKaW5kZXggOWVkMWM3
MjNlOTljMmEyY2E2MTljYzg4NWVlMmFjYTU2NjZmOWEwZi4uYWJmZTdhYzMwMmRlNmFlYTk1ZDk4
ZGE1M2ZmMDc0OGZmYTliNjNlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCkBAIC0zMDUsMTUg
KzMwNSwxNSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZFNsb3dSZXBhaW50T2JqZWN0KFJlbmRl
ckVsZW1lbnQmKTsKICAgICB2b2lkIHJlbW92ZVNsb3dSZXBhaW50T2JqZWN0KFJlbmRlckVsZW1l
bnQmKTsKLSAgICBib29sIGhhc1Nsb3dSZXBhaW50T2JqZWN0KGNvbnN0IFJlbmRlckVsZW1lbnQm
IHJlbmRlcmVyKSBjb25zdCB7IHJldHVybiBtX3Nsb3dSZXBhaW50T2JqZWN0cyAmJiBtX3Nsb3dS
ZXBhaW50T2JqZWN0cy0+Y29udGFpbnMocmVuZGVyZXIpOyB9Ci0gICAgYm9vbCBoYXNTbG93UmVw
YWludE9iamVjdHMoKSBjb25zdCB7IHJldHVybiBtX3Nsb3dSZXBhaW50T2JqZWN0cyAmJiAhbV9z
bG93UmVwYWludE9iamVjdHMtPmNvbXB1dGVzRW1wdHkoKTsgfQotICAgIFdlYWtIYXNoU2V0PFJl
bmRlckVsZW1lbnQ+KiBzbG93UmVwYWludE9iamVjdHMoKSBjb25zdCB7IHJldHVybiBtX3Nsb3dS
ZXBhaW50T2JqZWN0cy5nZXQoKTsgfQorICAgIGJvb2wgaGFzU2xvd1JlcGFpbnRPYmplY3QoY29u
c3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpIGNvbnN0IHsgcmV0dXJuIG1fc2xvd1JlcGFpbnRP
YmplY3RzLmNvbnRhaW5zKHJlbmRlcmVyKTsgfQorICAgIGJvb2wgaGFzU2xvd1JlcGFpbnRPYmpl
Y3RzKCkgY29uc3QgeyByZXR1cm4gIW1fc2xvd1JlcGFpbnRPYmplY3RzLmNvbXB1dGVzRW1wdHko
KTsgfQorICAgIGNvbnN0IFdlYWtIYXNoU2V0PFJlbmRlckVsZW1lbnQ+JiBzbG93UmVwYWludE9i
amVjdHMoKSBjb25zdCB7IHJldHVybiBtX3Nsb3dSZXBhaW50T2JqZWN0czsgfQogCiAgICAgLy8g
SW5jbHVkZXMgZml4ZWQtIGFuZCBzdGlja3ktcG9zaXRpb24gb2JqZWN0cy4KICAgICB2b2lkIGFk
ZFZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3QoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYpOwogICAg
IHZvaWQgcmVtb3ZlVmlld3BvcnRDb25zdHJhaW5lZE9iamVjdChSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0Jik7Ci0gICAgY29uc3QgV2Vha0hhc2hTZXQ8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4qIHZp
ZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzKCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydENvbnN0
cmFpbmVkT2JqZWN0cy5nZXQoKTsgfQotICAgIGJvb2wgaGFzVmlld3BvcnRDb25zdHJhaW5lZE9i
amVjdHMoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzICYmICFt
X3ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzLT5jb21wdXRlc0VtcHR5KCk7IH0KKyAgICBjb25z
dCBXZWFrSGFzaFNldDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PiYgdmlld3BvcnRDb25zdHJhaW5l
ZE9iamVjdHMoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzOyB9
CisgICAgYm9vbCBoYXNWaWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cygpIGNvbnN0IHsgcmV0dXJu
ICFtX3ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzLmNvbXB1dGVzRW1wdHkoKTsgfQogICAgIAog
ICAgIGZsb2F0IGZyYW1lU2NhbGVGYWN0b3IoKSBjb25zdDsKIApAQCAtNTUzLDEzICs1NTMsMTMg
QEAgcHVibGljOgogICAgIGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiB0cmFja2VkUmVwYWludFJl
Y3RzKCkgY29uc3QgeyByZXR1cm4gbV90cmFja2VkUmVwYWludFJlY3RzOyB9CiAgICAgU3RyaW5n
IHRyYWNrZWRSZXBhaW50UmVjdHNBc1RleHQoKSBjb25zdDsKIAotICAgIHR5cGVkZWYgSGFzaFNl
dDxTY3JvbGxhYmxlQXJlYSo+IFNjcm9sbGFibGVBcmVhU2V0OwogICAgIC8vIFJldHVybnMgd2hl
dGhlciB0aGUgc2Nyb2xsYWJsZSBhcmVhIGhhcyBqdXN0IGJlZW4gbmV3bHkgYWRkZWQuCi0gICAg
V0VCQ09SRV9FWFBPUlQgYm9vbCBhZGRTY3JvbGxhYmxlQXJlYShTY3JvbGxhYmxlQXJlYSopOwor
ICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgYWRkU2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEm
KTsKICAgICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIHNjcm9sbGFibGUgYXJlYSBoYXMganVzdCBi
ZWVuIHJlbW92ZWQuCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCByZW1vdmVTY3JvbGxhYmxlQXJl
YShTY3JvbGxhYmxlQXJlYSopOwotICAgIGJvb2wgY29udGFpbnNTY3JvbGxhYmxlQXJlYShTY3Jv
bGxhYmxlQXJlYSopIGNvbnN0OwotICAgIGNvbnN0IFNjcm9sbGFibGVBcmVhU2V0KiBzY3JvbGxh
YmxlQXJlYXMoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGVBcmVhcy5nZXQoKTsgfQorICAg
IFdFQkNPUkVfRVhQT1JUIGJvb2wgcmVtb3ZlU2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEm
KTsKKyAgICBib29sIGNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEmKSBjb25z
dDsKKyAgICB1c2luZyBTY3JvbGxhYmxlQXJlYVNldCA9IEhhc2hTZXQ8U2Nyb2xsYWJsZUFyZWEq
PjsKKyAgICBjb25zdCBTY3JvbGxhYmxlQXJlYVNldCYgc2Nyb2xsYWJsZUFyZWFzKCkgY29uc3Qg
eyByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYXM7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
YWRkQ2hpbGQoV2lkZ2V0JikgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVD
aGlsZChXaWRnZXQmKSBmaW5hbDsKQEAgLTg2Niw4ICs4NjYsOCBAQCBwcml2YXRlOgogI2VuZGlm
CiAKICAgICBIYXNoU2V0PFdpZGdldCo+IG1fd2lkZ2V0c0luUmVuZGVyVHJlZTsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8TGlzdEhhc2hTZXQ8UmVuZGVyRW1iZWRkZWRPYmplY3QqPj4gbV9lbWJlZGRl
ZE9iamVjdHNUb1VwZGF0ZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2Vha0hhc2hTZXQ8UmVuZGVy
RWxlbWVudD4+IG1fc2xvd1JlcGFpbnRPYmplY3RzOworICAgIExpc3RIYXNoU2V0PFJlbmRlckVt
YmVkZGVkT2JqZWN0Kj4gbV9lbWJlZGRlZE9iamVjdHNUb1VwZGF0ZTsKKyAgICBXZWFrSGFzaFNl
dDxSZW5kZXJFbGVtZW50PiBtX3Nsb3dSZXBhaW50T2JqZWN0czsKIAogICAgIFJlZlB0cjxDb250
YWluZXJOb2RlPiBtX21haW50YWluU2Nyb2xsUG9zaXRpb25BbmNob3I7CiAgICAgUmVmUHRyPE5v
ZGU+IG1fbm9kZVRvRHJhdzsKQEAgLTkyNyw4ICs5MjcsOCBAQCBwcml2YXRlOgogICAgIC8vIFRo
ZSBpbnRyaW5zaWMgY29udGVudCBzaXplIGRlY2lkZWQgYnkgYXV0b3NpemluZy4KICAgICBJbnRT
aXplIG1fYXV0b1NpemVDb250ZW50U2l6ZTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxh
YmxlQXJlYVNldD4gbV9zY3JvbGxhYmxlQXJlYXM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYWtI
YXNoU2V0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+PiBtX3ZpZXdwb3J0Q29uc3RyYWluZWRPYmpl
Y3RzOworICAgIFNjcm9sbGFibGVBcmVhU2V0IG1fc2Nyb2xsYWJsZUFyZWFzOworICAgIFdlYWtI
YXNoU2V0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+IG1fdmlld3BvcnRDb25zdHJhaW5lZE9iamVj
dHM7CiAKICAgICBPcHRpb25TZXQ8TGF5b3V0TWlsZXN0b25lPiBtX21pbGVzdG9uZXNQZW5kaW5n
UGFpbnQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVtb3J5UmVsZWFzZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lbW9yeVJlbGVhc2UuY3BwCmluZGV4IDZkZTZjMGUy
NjMzMzJiZTFkNjcwZTFhNjlhZmUzYzg2N2I0ZjMwOTcuLjljYjBiYTRmZGIxMGM3NmRiNjQxNzQ5
MzU0MjU2Y2RjZmU0ZDBmOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVtb3J5
UmVsZWFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9NZW1vcnlSZWxlYXNlLmNwcApA
QCAtMjE3LDggKzIxNyw3IEBAIHZvaWQgbG9nTWVtb3J5U3RhdGlzdGljc0F0VGltZU9mRGVhdGgo
KQogICAgIFJFTEVBU0VfTE9HKE1lbW9yeVByZXNzdXJlLCAiUGFnZSBjb3VudDogJXUiLCBwYWdl
Q291bnQoKSk7CiAgICAgUkVMRUFTRV9MT0coTWVtb3J5UHJlc3N1cmUsICJEb2N1bWVudCBjb3Vu
dDogJXUiLCBEb2N1bWVudDo6YWxsRG9jdW1lbnRzKCkuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0xP
RyhNZW1vcnlQcmVzc3VyZSwgIkxpdmUgSmF2YVNjcmlwdCBvYmplY3RzOiIpOwotICAgIGF1dG8g
dHlwZUNvdW50cyA9IHZtLmhlYXAub2JqZWN0VHlwZUNvdW50cygpOwotICAgIGZvciAoYXV0byYg
aXQgOiAqdHlwZUNvdW50cykKKyAgICBmb3IgKGF1dG8mIGl0IDogdm0uaGVhcC5vYmplY3RUeXBl
Q291bnRzKCkpCiAgICAgICAgIFJFTEVBU0VfTE9HKE1lbW9yeVByZXNzdXJlLCAiICAlczogJWQi
LCBpdC5rZXksIGl0LnZhbHVlKTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKaW5kZXggNjFk
ZDg2MDU4ZTdhMWU3MjMwZWRkNjc4NmNlODRlMTQzNGZjY2RiZS4uYzgwZmUxMGQ0NmJmYzQyYmM0
MjY3NjBjODI3Mzg5YTYyYTliZjJjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC0xMzQ1LDIwICsx
MzQ1LDE0IEBAIHZvaWQgUGFnZTo6bG9ja0FsbE92ZXJsYXlTY3JvbGxiYXJzVG9IaWRkZW4oYm9v
bCBsb2NrT3ZlcmxheVNjcm9sbGJhcnMpCiAKICAgICB2aWV3LT5sb2NrT3ZlcmxheVNjcm9sbGJh
clN0YXRlVG9IaWRkZW4obG9ja092ZXJsYXlTY3JvbGxiYXJzKTsKICAgICAKLSAgICBmb3IgKEZy
YW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50
cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGZyYW1lLT52
aWV3KCk7Ci0gICAgICAgIGlmICghZnJhbWVWaWV3KQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgY29uc3QgSGFzaFNldDxTY3JvbGxhYmxlQXJlYSo+KiBzY3JvbGxhYmxlQXJlYXMg
PSBmcmFtZVZpZXctPnNjcm9sbGFibGVBcmVhcygpOwotICAgICAgICBpZiAoIXNjcm9sbGFibGVB
cmVhcykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGZvciAoYXV0byYgc2Nyb2xs
YWJsZUFyZWEgOiAqc2Nyb2xsYWJsZUFyZWFzKQotICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEt
PmxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbihsb2NrT3ZlcmxheVNjcm9sbGJhcnMp
OworICAgIGZvciAoYXV0byBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJh
bWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgeworICAgICAgICBpZiAoYXV0byBmcmFtZVZpZXcg
PSBmcmFtZS0+dmlldygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHNjcm9sbGFibGVBcmVh
IDogZnJhbWVWaWV3LT5zY3JvbGxhYmxlQXJlYXMoKSkKKyAgICAgICAgICAgICAgICBzY3JvbGxh
YmxlQXJlYS0+bG9ja092ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVuKGxvY2tPdmVybGF5U2Ny
b2xsYmFycyk7CisgICAgICAgIH0KICAgICB9CiB9Ci0gICAgCisKIHZvaWQgUGFnZTo6c2V0VmVy
dGljYWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHkgZWxhc3RpY2l0eSkKIHsKICAg
ICBpZiAobV92ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkgPT0gZWxhc3RpY2l0eSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmgKaW5kZXggOTE3YTFhZDc2OWQ5NGNiMGVjMzUxNjljMWRmMDkwZDc2OTU0YTM5Mi4uY2IyYjE1
NWZiZTIxMWNlMTlmMmZjMDI0YTc0OTIyMzc5OTJkNTA0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgpAQCAtMzc0LDkgKzM3NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHBsYXRmb3Jt
SW5pdGlhbGl6ZSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkU2NoZWR1bGVQYWlyKFJl
ZjxTY2hlZHVsZVBhaXI+JiYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlU2NoZWR1
bGVQYWlyKFJlZjxTY2hlZHVsZVBhaXI+JiYpOwotICAgIFNjaGVkdWxlUGFpckhhc2hTZXQqIHNj
aGVkdWxlZFJ1bkxvb3BQYWlycygpIHsgcmV0dXJuIG1fc2NoZWR1bGVkUnVuTG9vcFBhaXJzLmdl
dCgpOyB9Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2NoZWR1bGVQYWlySGFzaFNldD4gbV9zY2hl
ZHVsZWRSdW5Mb29wUGFpcnM7CisgICAgY29uc3QgU2NoZWR1bGVQYWlySGFzaFNldCYgc2NoZWR1
bGVkUnVuTG9vcFBhaXJzKCkgY29uc3QgeyByZXR1cm4gbV9zY2hlZHVsZWRSdW5Mb29wUGFpcnM7
IH0KICNlbmRpZgogCiAgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uKCkgY29uc3Q7CkBAIC0xMTc0LDYgKzExNzIsMTAgQEAgcHJpdmF0ZToKIAogICAg
IGNvbnN0IGJvb2wgbV9odHRwc1VwZ3JhZGVFbmFibGVkIHsgdHJ1ZSB9OwogICAgIG11dGFibGUg
TWVkaWFTZXNzaW9uR3JvdXBJZGVudGlmaWVyIG1fbWVkaWFTZXNzaW9uR3JvdXBJZGVudGlmaWVy
OworCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgU2NoZWR1bGVQYWlySGFzaFNldCBtX3NjaGVk
dWxlZFJ1bkxvb3BQYWlyczsKKyNlbmRpZgogfTsKIAogaW5saW5lIFBhZ2VHcm91cCYgUGFnZTo6
Z3JvdXAoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZUxvZ2dp
bmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZUxvZ2dpbmcuY3BwCmluZGV4
IGM2ODQ5NDVhODBlMDQwYTY3ZjQxMzAyODc0MjA2NzE4MTc0Y2RmZDAuLjM4M2RkNTU0ZmIzOWY3
NWU3ZDFlMGY1NzNhNGRmMmViOTIwNjEyMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGVyZm9ybWFuY2VMb2dnaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZv
cm1hbmNlTG9nZ2luZy5jcHAKQEAgLTgwLDcgKzgwLDcgQEAgSGFzaE1hcDxjb25zdCBjaGFyKiwg
c2l6ZV90PiBQZXJmb3JtYW5jZUxvZ2dpbmc6Om1lbW9yeVVzYWdlU3RhdGlzdGljcyhTaG91bGRJ
bmMKIAogSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+IFBlcmZvcm1hbmNlTG9nZ2luZzo6amF2
YVNjcmlwdE9iamVjdENvdW50cygpCiB7Ci0gICAgcmV0dXJuIFdURk1vdmUoKmNvbW1vblZNKCku
aGVhcC5vYmplY3RUeXBlQ291bnRzKCkpOworICAgIHJldHVybiBjb21tb25WTSgpLmhlYXAub2Jq
ZWN0VHlwZUNvdW50cygpOwogfQogCiBQZXJmb3JtYW5jZUxvZ2dpbmc6OlBlcmZvcm1hbmNlTG9n
Z2luZyhQYWdlJiBwYWdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QcmludENv
bnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QcmludENvbnRleHQuY3BwCmluZGV4IDBj
OTYzMmUyZmYzYTQ5YTBmMjYzZWJmYmYzOWYxZjg3MDliYjJmMDMuLjNjZWYzMzczMWNkZWQzZjZj
NGFiOWZhMDJjZjMyZDdhODUxZTc5NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UHJpbnRDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5j
cHAKQEAgLTI3Myw3ICsyNzMsNyBAQCB2b2lkIFByaW50Q29udGV4dDo6ZW5kKCkKICAgICBBU1NF
UlQobV9pc1ByaW50aW5nKTsKICAgICBtX2lzUHJpbnRpbmcgPSBmYWxzZTsKICAgICBmcmFtZS5z
ZXRQcmludGluZyhmYWxzZSwgRmxvYXRTaXplKCksIEZsb2F0U2l6ZSgpLCAwLCBBZGp1c3RWaWV3
U2l6ZSk7Ci0gICAgbV9saW5rZWREZXN0aW5hdGlvbnMgPSBudWxscHRyOworICAgIG1fbGlua2Vk
RGVzdGluYXRpb25zID0gV1RGOjpudWxsb3B0OwogfQogCiBzdGF0aWMgaW5saW5lIFJlbmRlckJv
eE1vZGVsT2JqZWN0KiBlbmNsb3NpbmdCb3hNb2RlbE9iamVjdChSZW5kZXJFbGVtZW50KiByZW5k
ZXJlcikKQEAgLTMyNywxMiArMzI3LDEyIEBAIHZvaWQgUHJpbnRDb250ZXh0OjpvdXRwdXRMaW5r
ZWREZXN0aW5hdGlvbnMoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIERvCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGlmICghbV9saW5rZWREZXN0aW5hdGlvbnMpIHsKLSAgICAgICAg
bV9saW5rZWREZXN0aW5hdGlvbnMgPSBtYWtlVW5pcXVlPEhhc2hNYXA8U3RyaW5nLCBSZWY8RWxl
bWVudD4+PigpOworICAgICAgICBtX2xpbmtlZERlc3RpbmF0aW9ucyA9IEhhc2hNYXA8U3RyaW5n
LCBSZWY8RWxlbWVudD4+KCk7CiAgICAgICAgIGNvbGxlY3RMaW5rZWREZXN0aW5hdGlvbnMoZG9j
dW1lbnQpOwogICAgIH0KIAotICAgIGZvciAoY29uc3QgYXV0byYgaXQgOiAqbV9saW5rZWREZXN0
aW5hdGlvbnMpIHsKLSAgICAgICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSBpdC52YWx1ZS0+
cmVuZGVyZXIoKTsKKyAgICBmb3IgKGF1dG8mIGRlc3RpbmF0aW9uIDogKm1fbGlua2VkRGVzdGlu
YXRpb25zKSB7CisgICAgICAgIGF1dG8gcmVuZGVyZXIgPSBkZXN0aW5hdGlvbi52YWx1ZS0+cmVu
ZGVyZXIoKTsKICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAgIGNvbnRpbnVlOwog
CkBAIC0zNDIsNyArMzQyLDcgQEAgdm9pZCBQcmludENvbnRleHQ6Om91dHB1dExpbmtlZERlc3Rp
bmF0aW9ucyhHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgRG8KICAgICAgICAgaWYg
KCFwYWdlUmVjdC5jb250YWlucyhyb3VuZGVkSW50UG9pbnQocG9pbnQpKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5hZGREZXN0aW5hdGlvbkF0UG9p
bnQoaXQua2V5LCBwb2ludCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5hZGREZXN0aW5hdGlv
bkF0UG9pbnQoZGVzdGluYXRpb24ua2V5LCBwb2ludCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9QcmludENvbnRleHQuaAppbmRleCAxODI3YTEzZGRjMWI1ZTIxYTI1ZWY1ZjQ3Y2YwZWU2Yjg4
NTAxZmFkLi4wYmFkY2E5NmQwOGFkNDdkODM4YjdjMDhjNWE3ZDk4Y2JjZmRmNjIxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUHJpbnRDb250ZXh0LmgKQEAgLTExMCw3ICsxMTAsNyBAQCBwcml2YXRlOgogICAg
IC8vIFVzZWQgdG8gcHJldmVudCBtaXN1c2VzIG9mIGJlZ2luKCkgYW5kIGVuZCgpIChlLmcuLCBj
YWxsIGVuZCB3aXRob3V0IGJlZ2luKS4KICAgICBib29sIG1faXNQcmludGluZyB7IGZhbHNlIH07
CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SGFzaE1hcDxTdHJpbmcsIFJlZjxFbGVtZW50Pj4+IG1f
bGlua2VkRGVzdGluYXRpb25zOworICAgIE9wdGlvbmFsPEhhc2hNYXA8U3RyaW5nLCBSZWY8RWxl
bWVudD4+PiBtX2xpbmtlZERlc3RpbmF0aW9uczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1BhZ2VNYWMubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL21hYy9QYWdlTWFjLm1tCmluZGV4IDc4ZmVjM2U2OTE1NTdjMTY3YWNh
OGY3OGQxMzljMzUzYWM2MDViZTMuLjE0NWU2NGU1MGViMjY4ZjNlZGNjYmJmZThjMmQxZjdkNGVh
ZTc3ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1BhZ2VNYWMubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvUGFnZU1hYy5tbQpAQCAtODgsMTUgKzg4LDEzIEBA
IHZvaWQgUGFnZTo6cGxhdGZvcm1Jbml0aWFsaXplKCkKIAogdm9pZCBQYWdlOjphZGRTY2hlZHVs
ZVBhaXIoUmVmPFNjaGVkdWxlUGFpcj4mJiBwYWlyKQogewotICAgIGlmICghbV9zY2hlZHVsZWRS
dW5Mb29wUGFpcnMpCi0gICAgICAgIG1fc2NoZWR1bGVkUnVuTG9vcFBhaXJzID0gbWFrZVVuaXF1
ZTxTY2hlZHVsZVBhaXJIYXNoU2V0PigpOwotICAgIG1fc2NoZWR1bGVkUnVuTG9vcFBhaXJzLT5h
ZGQocGFpci5wdHIoKSk7Ci0KLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX21haW5GcmFtZS5n
ZXQoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAg
ICAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gZnJhbWUtPmxvYWRlcigp
LmRvY3VtZW50TG9hZGVyKCkpCi0gICAgICAgICAgICBkb2N1bWVudExvYWRlci0+c2NoZWR1bGUo
cGFpcik7Ci0gICAgICAgIGlmIChEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBmcmFt
ZS0+bG9hZGVyKCkucHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcigpKQotICAgICAgICAgICAgZG9j
dW1lbnRMb2FkZXItPnNjaGVkdWxlKHBhaXIpOworICAgIG1fc2NoZWR1bGVkUnVuTG9vcFBhaXJz
LmFkZChwYWlyLnB0cigpKTsKKworICAgIGZvciAoYXV0byBmcmFtZSA9IG1fbWFpbkZyYW1lLnB0
cigpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7CisgICAg
ICAgIGlmIChhdXRvIGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpKQor
ICAgICAgICAgICAgbG9hZGVyLT5zY2hlZHVsZShwYWlyKTsKKyAgICAgICAgaWYgKGF1dG8gbG9h
ZGVyID0gZnJhbWUtPmxvYWRlcigpLnByb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIoKSkKKyAgICAg
ICAgICAgIGxvYWRlci0+c2NoZWR1bGUocGFpcik7CiAgICAgfQogCiAgICAgLy8gRklYTUU6IG1h
a2UgU2hhcmVkVGltZXJNYWMgdXNlIHRoZXNlIFNjaGVkdWxlUGFpcnMuCkBAIC0xMDQsMTcgKzEw
MiwxMyBAQCB2b2lkIFBhZ2U6OmFkZFNjaGVkdWxlUGFpcihSZWY8U2NoZWR1bGVQYWlyPiYmIHBh
aXIpCiAKIHZvaWQgUGFnZTo6cmVtb3ZlU2NoZWR1bGVQYWlyKFJlZjxTY2hlZHVsZVBhaXI+JiYg
cGFpcikKIHsKLSAgICBBU1NFUlQobV9zY2hlZHVsZWRSdW5Mb29wUGFpcnMpOwotICAgIGlmICgh
bV9zY2hlZHVsZWRSdW5Mb29wUGFpcnMpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2NoZWR1
bGVkUnVuTG9vcFBhaXJzLT5yZW1vdmUocGFpci5wdHIoKSk7CisgICAgbV9zY2hlZHVsZWRSdW5M
b29wUGFpcnMucmVtb3ZlKHBhaXIucHRyKCkpOwogCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAm
bV9tYWluRnJhbWUuZ2V0KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VO
ZXh0KCkpIHsKLSAgICAgICAgaWYgKERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGZy
YW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpKQotICAgICAgICAgICAgZG9jdW1lbnRMb2Fk
ZXItPnVuc2NoZWR1bGUocGFpcik7Ci0gICAgICAgIGlmIChEb2N1bWVudExvYWRlciogZG9jdW1l
bnRMb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCkucHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcigpKQot
ICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXItPnVuc2NoZWR1bGUocGFpcik7CisgICAgZm9yIChh
dXRvIGZyYW1lID0gbV9tYWluRnJhbWUucHRyKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVl
KCkudHJhdmVyc2VOZXh0KCkpIHsKKyAgICAgICAgaWYgKGF1dG8gbG9hZGVyID0gZnJhbWUtPmxv
YWRlcigpLmRvY3VtZW50TG9hZGVyKCkpCisgICAgICAgICAgICBsb2FkZXItPnVuc2NoZWR1bGUo
cGFpcik7CisgICAgICAgIGlmIChhdXRvIGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS5wcm92aXNp
b25hbERvY3VtZW50TG9hZGVyKCkpCisgICAgICAgICAgICBsb2FkZXItPnVuc2NoZWR1bGUocGFp
cik7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAKaW5kZXggOWI2MjlkMGU1OTMxODliZDkzZDU5ZmU3
MzA2N2E4NGU5Nzc1MzM4MC4uN2YyYmIzYTQ1MTU0MzUwYWRjODBhNDExNGFiOGQ2Zjc5MmY5MmU0
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29v
cmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yLmNwcApAQCAtMTIzLDE5ICsxMjMsMTcgQEAgRXZlbnRUcmFja2luZ1JlZ2lv
bnMgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmFic29sdXRlRXZlbnRUcmFja2luZ1JlZ2lvbnNGb3JG
cmFtZSgKICAgICAvLyBGSVhNRTogc2hvdWxkIEFTU0VSVCghZnJhbWVWaWV3LT5uZWVkc0xheW91
dCgpKSBoZXJlLCBidXQgbmVlZCB0byBmaXggRGVidWdQYWdlT3ZlcmxheXMKICAgICAvLyB0byBu
b3QgYXNrIGZvciByZWdpb25zIGF0IGJhZCB0aW1lcy4KIAotICAgIGlmIChhdXRvKiBzY3JvbGxh
YmxlQXJlYXMgPSBmcmFtZVZpZXctPnNjcm9sbGFibGVBcmVhcygpKSB7Ci0gICAgICAgIGZvciAo
YXV0byYgc2Nyb2xsYWJsZUFyZWEgOiAqc2Nyb2xsYWJsZUFyZWFzKSB7Ci0gICAgICAgICAgICAv
LyBDb21wb3NpdGVkIHNjcm9sbGFibGUgYXJlYXMgY2FuIGJlIHNjcm9sbGVkIG9mZiB0aGUgbWFp
biB0aHJlYWQuCi0gICAgICAgICAgICBpZiAoc2Nyb2xsYWJsZUFyZWEtPnVzZXNBc3luY1Njcm9s
bGluZygpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBib29sIGlz
SW5zaWRlRml4ZWQ7Ci0gICAgICAgICAgICBJbnRSZWN0IGJveCA9IHNjcm9sbGFibGVBcmVhLT5z
Y3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KCZpc0luc2lkZUZpeGVkKTsKLSAgICAgICAgICAgIGlm
IChpc0luc2lkZUZpeGVkKQotICAgICAgICAgICAgICAgIGJveCA9IEludFJlY3QoZnJhbWVWaWV3
LT5maXhlZFNjcm9sbGFibGVBcmVhQm91bmRzSW5mbGF0ZWRGb3JTY3JvbGxpbmcoTGF5b3V0UmVj
dChib3gpKSk7Ci0KLSAgICAgICAgICAgIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uLnVuaXRlKGJv
eCk7Ci0gICAgICAgIH0KKyAgICBmb3IgKGF1dG8mIHNjcm9sbGFibGVBcmVhIDogZnJhbWVWaWV3
LT5zY3JvbGxhYmxlQXJlYXMoKSkgeworICAgICAgICAvLyBDb21wb3NpdGVkIHNjcm9sbGFibGUg
YXJlYXMgY2FuIGJlIHNjcm9sbGVkIG9mZiB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgIGlmIChz
Y3JvbGxhYmxlQXJlYS0+dXNlc0FzeW5jU2Nyb2xsaW5nKCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBib29sIGlzSW5zaWRlRml4ZWQ7CisgICAgICAgIEludFJlY3QgYm94ID0g
c2Nyb2xsYWJsZUFyZWEtPnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goJmlzSW5zaWRlRml4ZWQp
OworICAgICAgICBpZiAoaXNJbnNpZGVGaXhlZCkKKyAgICAgICAgICAgIGJveCA9IEludFJlY3Qo
ZnJhbWVWaWV3LT5maXhlZFNjcm9sbGFibGVBcmVhQm91bmRzSW5mbGF0ZWRGb3JTY3JvbGxpbmco
TGF5b3V0UmVjdChib3gpKSk7CisKKyAgICAgICAgbm9uRmFzdFNjcm9sbGFibGVSZWdpb24udW5p
dGUoYm94KTsKICAgICB9CiAKICAgICBmb3IgKGF1dG8mIHdpZGdldCA6IGZyYW1lVmlldy0+d2lk
Z2V0c0luUmVuZGVyVHJlZSgpKSB7CkBAIC0yOTgsMTEgKzI5Niw3IEBAIHZvaWQgU2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZShGcmFtZVZpZXcmIGZyYW1l
VmlldykKIAogYm9vbCBTY3JvbGxpbmdDb29yZGluYXRvcjo6aGFzVmlzaWJsZVNsb3dSZXBhaW50
Vmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMoY29uc3QgRnJhbWVWaWV3JiBmcmFtZVZpZXcpIGNv
bnN0CiB7Ci0gICAgYXV0byogdmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMgPSBmcmFtZVZpZXcu
dmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMoKTsKLSAgICBpZiAoIXZpZXdwb3J0Q29uc3RyYWlu
ZWRPYmplY3RzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3IgKGF1dG8mIHZpZXdw
b3J0Q29uc3RyYWluZWRPYmplY3QgOiAqdmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMpIHsKKyAg
ICBmb3IgKGF1dG8mIHZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3QgOiBmcmFtZVZpZXcudmlld3Bv
cnRDb25zdHJhaW5lZE9iamVjdHMoKSkgewogICAgICAgICBpZiAoIWlzPFJlbmRlckJveE1vZGVs
T2JqZWN0Pih2aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0KSB8fCAhdmlld3BvcnRDb25zdHJhaW5l
ZE9iamVjdC5oYXNMYXllcigpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGF1
dG8mIGxheWVyID0gKmRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0Pih2aWV3cG9ydENvbnN0
cmFpbmVkT2JqZWN0KS5sYXllcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR2x5cGhNZXRyaWNzTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HbHlwaE1ldHJpY3NNYXAuaAppbmRleCA3OWUyZjUzODhjNDZlNTg5MjMwMTYxYzQ3
NDUyNTQxOTI0N2U4MmFiLi5hNGRhOTNkZTZiZmU2ODk3MGU1MzlkNDM2ZWQ2ZWM1MmM2OGVlOTcx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1ldHJp
Y3NNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1ldHJp
Y3NNYXAuaApAQCAtMTAyLDcgKzEwMiw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1fZmlsbGVk
UHJpbWFyeVBhZ2UgeyBmYWxzZSB9OwogICAgIEdseXBoTWV0cmljc1BhZ2UgbV9wcmltYXJ5UGFn
ZTsgLy8gV2Ugb3B0aW1pemUgZm9yIHRoZSBwYWdlIHRoYXQgY29udGFpbnMgZ2x5cGggaW5kaWNl
cyAwLTI1NS4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SGFzaE1hcDxpbnQsIHN0ZDo6dW5pcXVlX3B0
cjxHbHlwaE1ldHJpY3NQYWdlPj4+IG1fcGFnZXM7CisgICAgSGFzaE1hcDxpbnQsIHN0ZDo6dW5p
cXVlX3B0cjxHbHlwaE1ldHJpY3NQYWdlPj4gbV9wYWdlczsKIH07CiAKIHRlbXBsYXRlPD4gaW5s
aW5lIGZsb2F0IEdseXBoTWV0cmljc01hcDxmbG9hdD46OnVua25vd25NZXRyaWNzKCkKQEAgLTEy
OSwxMyArMTI5LDkgQEAgdGVtcGxhdGU8Y2xhc3MgVD4gdHlwZW5hbWUgR2x5cGhNZXRyaWNzTWFw
PFQ+OjpHbHlwaE1ldHJpY3NQYWdlJiBHbHlwaE1ldHJpY3NNYXAKICAgICAgICAgcmV0dXJuIG1f
cHJpbWFyeVBhZ2U7CiAgICAgfQogCi0gICAgaWYgKCFtX3BhZ2VzKQotICAgICAgICBtX3BhZ2Vz
ID0gbWFrZVVuaXF1ZTxIYXNoTWFwPGludCwgc3RkOjp1bmlxdWVfcHRyPEdseXBoTWV0cmljc1Bh
Z2U+Pj4oKTsKLQotICAgIGF1dG8mIHBhZ2UgPSBtX3BhZ2VzLT5lbnN1cmUocGFnZU51bWJlciwg
W10geworICAgIHJldHVybiAqbV9wYWdlcy5lbnN1cmUocGFnZU51bWJlciwgW10gewogICAgICAg
ICByZXR1cm4gbWFrZVVuaXF1ZTxHbHlwaE1ldHJpY3NQYWdlPih1bmtub3duTWV0cmljcygpKTsK
ICAgICB9KS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgcmV0dXJuICpwYWdlOwogfQogICAgIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaAppbmRl
eCBkOGMxNmMyMDMxYjgyMTA2MGFiYzQ2MGZiNDM3NWI4NWRjOTFhYjQ0Li4xYmNlOTcyMGU3YmVl
NWMyM2U4MjdjN2QwZmUxZjkzZjNlOGRjZDY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wuaApAQCAtNjQ3LDcgKzY0Nyw3IEBAIHByaXZhdGU6CiAgICAgT3B0aW9uYWw8U3RyaW5n
PiBtYXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1hcChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwg
QU5HTEVTaGFkZXJTeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogICAgIE9wdGlvbmFs
PFN0cmluZz4gb3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlciwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRlck5hbWVIYXNoPiBuYW1lSGFzaE1hcEZvclNoYWRlcnM7
CisgICAgU2hhZGVyTmFtZUhhc2ggbV9uYW1lSGFzaE1hcEZvclNoYWRlcnM7CiAjZW5kaWYgLy8g
IVVTRShBTkdMRSkKIAogI2lmIFVTRShBTkdMRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xDb21tb24uY3BwCmluZGV4IDgwYjlmNWU2Nzc0NmZlNDVmODJmMDZmMWEwN2Fl
YjliZDU4YzNiNTEuLjE4ZGM4OWYyYWYxZDU1YjI1MWY5YzA5NWM4OWJmMWRkZmY0ZTUxNGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcApAQCAtNTQ0
LDkgKzU0NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIo
UGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiAgICAgU2hIYXNoRnVuY3Rpb242NCBwcmV2aW91c0hh
c2hGdW5jdGlvbiA9IEFOR0xFUmVzb3VyY2VzLkhhc2hGdW5jdGlvbjsKICAgICBBTkdMRVJlc291
cmNlcy5IYXNoRnVuY3Rpb24gPSBuYW1lSGFzaEZvclNoYWRlcjsKIAotICAgIGlmICghbmFtZUhh
c2hNYXBGb3JTaGFkZXJzKQotICAgICAgICBuYW1lSGFzaE1hcEZvclNoYWRlcnMgPSBtYWtlVW5p
cXVlPFNoYWRlck5hbWVIYXNoPigpOwotICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRl
cihuYW1lSGFzaE1hcEZvclNoYWRlcnMuZ2V0KCkpOworICAgIHNldEN1cnJlbnROYW1lSGFzaE1h
cEZvclNoYWRlcigmbV9uYW1lSGFzaE1hcEZvclNoYWRlcnMpOwogICAgIG1fY29tcGlsZXIuc2V0
UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKIAogICAgIFN0cmluZyB0cmFuc2xhdGVkU2hhZGVy
U291cmNlID0gbV9leHRlbnNpb25zLT5nZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoc2hh
ZGVyKTsKQEAgLTk1Nyw5ICs5NTUsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
Om1hcHBlZFN5bWJvbE5hbWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBBTkdMRQogICAgIGlm
IChzeW1ib2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUgJiYgIW5hbWUuaXNF
bXB0eSgpKSB7CiAgICAgICAgIC8vIEF0dHJpYnV0ZXMgYXJlIGEgc3BlY2lhbCBjYXNlOiB0aGV5
IG1heSBiZSByZXF1ZXN0ZWQgYmVmb3JlIGFueSBzaGFkZXJzIGhhdmUgYmVlbiBjb21waWxlZCwK
ICAgICAgICAgLy8gYW5kIGFyZW4ndCBldmVuIHJlcXVpcmVkIHRvIGJlIHVzZWQgaW4gYW55IHNo
YWRlciBwcm9ncmFtLgotICAgICAgICBpZiAoIW5hbWVIYXNoTWFwRm9yU2hhZGVycykKLSAgICAg
ICAgICAgIG5hbWVIYXNoTWFwRm9yU2hhZGVycyA9IG1ha2VVbmlxdWU8U2hhZGVyTmFtZUhhc2g+
KCk7Ci0gICAgICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihuYW1lSGFzaE1hcEZv
clNoYWRlcnMuZ2V0KCkpOworICAgICAgICBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIo
Jm1fbmFtZUhhc2hNYXBGb3JTaGFkZXJzKTsKIAogICAgICAgICBhdXRvIGdlbmVyYXRlZE5hbWUg
PSBnZW5lcmF0ZUhhc2hlZE5hbWUobmFtZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya2luZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvTmV0d29ya2luZ0NvbnRleHQuaAppbmRleCAzM2EyMTc0YTk5YjE3YmIx
NmI4NTcxNTdlMTdiOGNmMmViNjFlYjlkLi5iMDBlMDNkZmZiNjk5NTUwMjRjY2U2ZTIwYjBkNmJk
MTE4MWQ0NmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05l
dHdvcmtpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9O
ZXR3b3JraW5nQ29udGV4dC5oCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKIAogI2lmIFBMQVRG
T1JNKENPQ09BKQogICAgIHZpcnR1YWwgYm9vbCBsb2NhbEZpbGVDb250ZW50U25pZmZpbmdFbmFi
bGVkKCkgY29uc3QgPSAwOyAvLyBGSVhNRTogUmVjb25jaWxlIHdpdGggUmVzb3VyY2VIYW5kbGU6
OmZvcmNlQ29udGVudFNuaWZmaW5nKCkuCi0gICAgdmlydHVhbCBTY2hlZHVsZVBhaXJIYXNoU2V0
KiBzY2hlZHVsZWRSdW5Mb29wUGFpcnMoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVh
bCBjb25zdCBTY2hlZHVsZVBhaXJIYXNoU2V0KiBzY2hlZHVsZWRSdW5Mb29wUGFpcnMoKSBjb25z
dCB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBzb3VyY2VB
cHBsaWNhdGlvbkF1ZGl0RGF0YSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFJlc291cmNlRXJy
b3IgYmxvY2tlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpIGNvbnN0ID0gMDsKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0dyaWQuY3BwCmluZGV4IDkxZDlmYjAwYjM4MzZiMWI1NzdmYjFm
MDg1NWZlNDNhZjgxMmE1ZmQuLjM3MTIxNzUxNTFhZDY2YTllYzU3NGUwNWUwNGU3MDY5ODJlNDIz
YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZC5jcHAKQEAgLTEwOSwzMyArMTA5LDMzIEBAIHVu
c2lnbmVkIEdyaWQ6OmF1dG9SZXBlYXRUcmFja3MoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRp
cmVjdGlvbikgY29uc3QKICAgICByZXR1cm4gZGlyZWN0aW9uID09IEZvclJvd3MgPyBtX2F1dG9S
ZXBlYXRSb3dzIDogbV9hdXRvUmVwZWF0Q29sdW1uczsKIH0KIAotdm9pZCBHcmlkOjpzZXRBdXRv
UmVwZWF0RW1wdHlDb2x1bW5zKHN0ZDo6dW5pcXVlX3B0cjxPcmRlcmVkVHJhY2tJbmRleFNldD4g
YXV0b1JlcGVhdEVtcHR5Q29sdW1ucykKK3ZvaWQgR3JpZDo6c2V0QXV0b1JlcGVhdEVtcHR5Q29s
dW1ucyhPcmRlcmVkVHJhY2tJbmRleFNldCYmIGF1dG9SZXBlYXRFbXB0eUNvbHVtbnMpCiB7Ci0g
ICAgQVNTRVJUKCFhdXRvUmVwZWF0RW1wdHlDb2x1bW5zIHx8IChhdXRvUmVwZWF0RW1wdHlDb2x1
bW5zLT5zaXplKCkgPD0gbV9hdXRvUmVwZWF0Q29sdW1ucykpOworICAgIEFTU0VSVChhdXRvUmVw
ZWF0RW1wdHlDb2x1bW5zLnNpemUoKSA8PSBtX2F1dG9SZXBlYXRDb2x1bW5zKTsKICAgICBtX2F1
dG9SZXBlYXRFbXB0eUNvbHVtbnMgPSBXVEZNb3ZlKGF1dG9SZXBlYXRFbXB0eUNvbHVtbnMpOwog
fQogCi12b2lkIEdyaWQ6OnNldEF1dG9SZXBlYXRFbXB0eVJvd3Moc3RkOjp1bmlxdWVfcHRyPE9y
ZGVyZWRUcmFja0luZGV4U2V0PiBhdXRvUmVwZWF0RW1wdHlSb3dzKQordm9pZCBHcmlkOjpzZXRB
dXRvUmVwZWF0RW1wdHlSb3dzKE9yZGVyZWRUcmFja0luZGV4U2V0JiYgYXV0b1JlcGVhdEVtcHR5
Um93cykKIHsKLSAgICBBU1NFUlQoIWF1dG9SZXBlYXRFbXB0eVJvd3MgfHwgKGF1dG9SZXBlYXRF
bXB0eVJvd3MtPnNpemUoKSA8PSBtX2F1dG9SZXBlYXRSb3dzKSk7CisgICAgQVNTRVJUKGF1dG9S
ZXBlYXRFbXB0eVJvd3Muc2l6ZSgpIDw9IG1fYXV0b1JlcGVhdFJvd3MpOwogICAgIG1fYXV0b1Jl
cGVhdEVtcHR5Um93cyA9IFdURk1vdmUoYXV0b1JlcGVhdEVtcHR5Um93cyk7CiB9CiAKIGJvb2wg
R3JpZDo6aGFzQXV0b1JlcGVhdEVtcHR5VHJhY2tzKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBk
aXJlY3Rpb24pIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zID8g
ISFtX2F1dG9SZXBlYXRFbXB0eUNvbHVtbnMgOiAhIW1fYXV0b1JlcGVhdEVtcHR5Um93czsKKyAg
ICByZXR1cm4gZGlyZWN0aW9uID09IEZvckNvbHVtbnMgPyAhbV9hdXRvUmVwZWF0RW1wdHlDb2x1
bW5zLmlzRW1wdHkoKSA6ICFtX2F1dG9SZXBlYXRFbXB0eVJvd3MuaXNFbXB0eSgpOwogfQogCiBi
b29sIEdyaWQ6OmlzRW1wdHlBdXRvUmVwZWF0VHJhY2soR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9u
IGRpcmVjdGlvbiwgdW5zaWduZWQgbGluZSkgY29uc3QKIHsKICAgICBBU1NFUlQoaGFzQXV0b1Jl
cGVhdEVtcHR5VHJhY2tzKGRpcmVjdGlvbikpOwotICAgIHJldHVybiBhdXRvUmVwZWF0RW1wdHlU
cmFja3MoZGlyZWN0aW9uKS0+Y29udGFpbnMobGluZSk7CisgICAgcmV0dXJuIGF1dG9SZXBlYXRF
bXB0eVRyYWNrcyhkaXJlY3Rpb24pLmNvbnRhaW5zKGxpbmUpOwogfQogCi1PcmRlcmVkVHJhY2tJ
bmRleFNldCogR3JpZDo6YXV0b1JlcGVhdEVtcHR5VHJhY2tzKEdyaWRUcmFja1NpemluZ0RpcmVj
dGlvbiBkaXJlY3Rpb24pIGNvbnN0Citjb25zdCBPcmRlcmVkVHJhY2tJbmRleFNldCYgR3JpZDo6
YXV0b1JlcGVhdEVtcHR5VHJhY2tzKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24p
IGNvbnN0CiB7CiAgICAgQVNTRVJUKGhhc0F1dG9SZXBlYXRFbXB0eVRyYWNrcyhkaXJlY3Rpb24p
KTsKLSAgICByZXR1cm4gZGlyZWN0aW9uID09IEZvckNvbHVtbnMgPyBtX2F1dG9SZXBlYXRFbXB0
eUNvbHVtbnMuZ2V0KCkgOiBtX2F1dG9SZXBlYXRFbXB0eVJvd3MuZ2V0KCk7CisgICAgcmV0dXJu
IGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zID8gbV9hdXRvUmVwZWF0RW1wdHlDb2x1bW5zIDogbV9h
dXRvUmVwZWF0RW1wdHlSb3dzOwogfQogCiBHcmlkU3BhbiBHcmlkOjpncmlkSXRlbVNwYW4oY29u
c3QgUmVuZGVyQm94JiBncmlkSXRlbSwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlv
bikgY29uc3QKQEAgLTE1Nyw4ICsxNTcsOCBAQCB2b2lkIEdyaWQ6OnNldE5lZWRzSXRlbXNQbGFj
ZW1lbnQoYm9vbCBuZWVkc0l0ZW1zUGxhY2VtZW50KQogICAgIG1fZ3JpZEl0ZW1BcmVhLmNsZWFy
KCk7CiAgICAgbV9leHBsaWNpdFJvd1N0YXJ0ID0gMDsKICAgICBtX2V4cGxpY2l0Q29sdW1uU3Rh
cnQgPSAwOwotICAgIG1fYXV0b1JlcGVhdEVtcHR5Q29sdW1ucyA9IG51bGxwdHI7Ci0gICAgbV9h
dXRvUmVwZWF0RW1wdHlSb3dzID0gbnVsbHB0cjsKKyAgICBtX2F1dG9SZXBlYXRFbXB0eUNvbHVt
bnMuY2xlYXIoKTsKKyAgICBtX2F1dG9SZXBlYXRFbXB0eVJvd3MuY2xlYXIoKTsKICAgICBtX2F1
dG9SZXBlYXRDb2x1bW5zID0gMDsKICAgICBtX2F1dG9SZXBlYXRSb3dzID0gMDsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvR3JpZC5oCmluZGV4IDcyY2FkZjY4ZWY0ZDMyNjZjZTFmOGNlZWJkYzlhNDlkZjJi
YzgxMWIuLmFkMjgwNDEyNzMyOTAxYjNjMjJlNzIyN2ZhMTdhMDRhZjZjODk2N2EgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0dyaWQuaApAQCAtNjcsMTQgKzY3LDE0IEBAIHB1YmxpYzoKICAgICB1bnNpZ25l
ZCBhdXRvUmVwZWF0VHJhY2tzKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbikgY29uc3Q7CiAgICAg
dm9pZCBzZXRBdXRvUmVwZWF0VHJhY2tzKHVuc2lnbmVkIGF1dG9SZXBlYXRSb3dzLCB1bnNpZ25l
ZCBhdXRvUmVwZWF0Q29sdW1ucyk7CiAKLSAgICB2b2lkIHNldEF1dG9SZXBlYXRFbXB0eUNvbHVt
bnMoc3RkOjp1bmlxdWVfcHRyPE9yZGVyZWRUcmFja0luZGV4U2V0Pik7Ci0gICAgdm9pZCBzZXRB
dXRvUmVwZWF0RW1wdHlSb3dzKHN0ZDo6dW5pcXVlX3B0cjxPcmRlcmVkVHJhY2tJbmRleFNldD4p
OworICAgIHZvaWQgc2V0QXV0b1JlcGVhdEVtcHR5Q29sdW1ucyhPcmRlcmVkVHJhY2tJbmRleFNl
dCYmKTsKKyAgICB2b2lkIHNldEF1dG9SZXBlYXRFbXB0eVJvd3MoT3JkZXJlZFRyYWNrSW5kZXhT
ZXQmJik7CiAKICAgICB1bnNpZ25lZCBhdXRvUmVwZWF0RW1wdHlUcmFja3NDb3VudChHcmlkVHJh
Y2tTaXppbmdEaXJlY3Rpb24pIGNvbnN0OwogICAgIGJvb2wgaGFzQXV0b1JlcGVhdEVtcHR5VHJh
Y2tzKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbikgY29uc3Q7CiAgICAgYm9vbCBpc0VtcHR5QXV0
b1JlcGVhdFRyYWNrKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiwgdW5zaWduZWQpIGNvbnN0Owog
Ci0gICAgT3JkZXJlZFRyYWNrSW5kZXhTZXQqIGF1dG9SZXBlYXRFbXB0eVRyYWNrcyhHcmlkVHJh
Y2tTaXppbmdEaXJlY3Rpb24pIGNvbnN0OworICAgIGNvbnN0IE9yZGVyZWRUcmFja0luZGV4U2V0
JiBhdXRvUmVwZWF0RW1wdHlUcmFja3MoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uKSBjb25zdDsK
IAogICAgIE9yZGVySXRlcmF0b3ImIG9yZGVySXRlcmF0b3IoKSB7IHJldHVybiBtX29yZGVySXRl
cmF0b3I7IH0KIApAQCAtOTgsOCArOTgsOCBAQCBwcml2YXRlOgogCiAgICAgSGFzaE1hcDxjb25z
dCBSZW5kZXJCb3gqLCBHcmlkQXJlYT4gbV9ncmlkSXRlbUFyZWE7CiAKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8T3JkZXJlZFRyYWNrSW5kZXhTZXQ+IG1fYXV0b1JlcGVhdEVtcHR5Q29sdW1uczsKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8T3JkZXJlZFRyYWNrSW5kZXhTZXQ+IG1fYXV0b1JlcGVhdEVtcHR5
Um93czsKKyAgICBPcmRlcmVkVHJhY2tJbmRleFNldCBtX2F1dG9SZXBlYXRFbXB0eUNvbHVtbnM7
CisgICAgT3JkZXJlZFRyYWNrSW5kZXhTZXQgbV9hdXRvUmVwZWF0RW1wdHlSb3dzOwogfTsKIAog
Y2xhc3MgR3JpZEl0ZXJhdG9yIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9HcmlkVHJhY2tTaXppbmdBbGdvcml0aG0uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5jcHAKaW5kZXggYTI3MGRiOGJkNmY4NGNkNzkwZGFm
MjExNzY2OGY1ZWMyZGQyNjZmZS4uYzA5NzE5N2E4N2ViM2I5YTAyMWFlMzk2Y2MwZWNiYWUwOTY0
ZmIwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1Npemlu
Z0FsZ29yaXRobS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1Np
emluZ0FsZ29yaXRobS5jcHAKQEAgLTY2MSw3ICs2NjEsNyBAQCBHcmlkVHJhY2tTaXplIEdyaWRU
cmFja1NpemluZ0FsZ29yaXRobTo6Y2FsY3VsYXRlR3JpZFRyYWNrU2l6ZShHcmlkVHJhY2tTaXpp
bmdEaQogICAgIHJldHVybiBHcmlkVHJhY2tTaXplKG1pblRyYWNrQnJlYWR0aCwgbWF4VHJhY2tC
cmVhZHRoKTsKIH0KIAotZG91YmxlIEdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6Y29tcHV0ZUZs
ZXhGYWN0b3JVbml0U2l6ZShjb25zdCBWZWN0b3I8R3JpZFRyYWNrPiYgdHJhY2tzLCBkb3VibGUg
ZmxleEZhY3RvclN1bSwgTGF5b3V0VW5pdCYgbGVmdE92ZXJTcGFjZSwgY29uc3QgVmVjdG9yPHVu
c2lnbmVkLCA4PiYgZmxleGlibGVUcmFja3NJbmRleGVzLCBzdGQ6OnVuaXF1ZV9wdHI8VHJhY2tJ
bmRleFNldD4gdHJhY2tzVG9UcmVhdEFzSW5mbGV4aWJsZSkgY29uc3QKK2RvdWJsZSBHcmlkVHJh
Y2tTaXppbmdBbGdvcml0aG06OmNvbXB1dGVGbGV4RmFjdG9yVW5pdFNpemUoY29uc3QgVmVjdG9y
PEdyaWRUcmFjaz4mIHRyYWNrcywgZG91YmxlIGZsZXhGYWN0b3JTdW0sIExheW91dFVuaXQmIGxl
ZnRPdmVyU3BhY2UsIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZCwgOD4mIGZsZXhpYmxlVHJhY2tzSW5k
ZXhlcywgVHJhY2tJbmRleFNldCYmIHRyYWNrc1RvVHJlYXRBc0luZmxleGlibGUpIGNvbnN0CiB7
CiAgICAgLy8gV2Ugd2FudCB0byBhdm9pZCB0aGUgZWZmZWN0IG9mIGZsZXggZmFjdG9ycyBzdW0g
YmVsb3cgMSBtYWtpbmcgdGhlIGZhY3RvciB1bml0IHNpemUgdG8gZ3JvdyBleHBvbmVudGlhbGx5
LgogICAgIGRvdWJsZSBoeXBvdGhldGljYWxGYWN0b3JVbml0U2l6ZSA9IGxlZnRPdmVyU3BhY2Ug
LyBzdGQ6Om1heDxkb3VibGU+KDEsIGZsZXhGYWN0b3JTdW0pOwpAQCAtNjY5LDcgKzY2OSw3IEBA
IGRvdWJsZSBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OmNvbXB1dGVGbGV4RmFjdG9yVW5pdFNp
emUoY29uc3QgVmVjdG9yPEdyaWRUcmFjCiAgICAgLy8gcHJvZHVjdCBvZiB0aGUgaHlwb3RoZXRp
Y2FsICJmbGV4IGZhY3RvciB1bml0IiBhbmQgYW55IGZsZXhpYmxlIHRyYWNrJ3MgImZsZXggZmFj
dG9yIiBtdXN0IGJlIGdyYXRlciB0aGFuIHN1Y2ggdHJhY2sncyAiYmFzZSBzaXplIi4KICAgICBi
b29sIHZhbGlkRmxleEZhY3RvclVuaXQgPSB0cnVlOwogICAgIGZvciAoYXV0byBpbmRleCA6IGZs
ZXhpYmxlVHJhY2tzSW5kZXhlcykgewotICAgICAgICBpZiAodHJhY2tzVG9UcmVhdEFzSW5mbGV4
aWJsZSAmJiB0cmFja3NUb1RyZWF0QXNJbmZsZXhpYmxlLT5jb250YWlucyhpbmRleCkpCisgICAg
ICAgIGlmICh0cmFja3NUb1RyZWF0QXNJbmZsZXhpYmxlLmNvbnRhaW5zKGluZGV4KSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBMYXlvdXRVbml0IGJhc2VTaXplID0gdHJhY2tzW2lu
ZGV4XS5iYXNlU2l6ZSgpOwogICAgICAgICBkb3VibGUgZmxleEZhY3RvciA9IHRyYWNrc1tpbmRl
eF0uY2FjaGVkVHJhY2tTaXplKCkubWF4VHJhY2tCcmVhZHRoKCkuZmxleCgpOwpAQCAtNjc3LDkg
KzY3Nyw3IEBAIGRvdWJsZSBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OmNvbXB1dGVGbGV4RmFj
dG9yVW5pdFNpemUoY29uc3QgVmVjdG9yPEdyaWRUcmFjCiAgICAgICAgIGlmIChiYXNlU2l6ZSA+
IGh5cG90aGV0aWNhbEZhY3RvclVuaXRTaXplICogZmxleEZhY3RvcikgewogICAgICAgICAgICAg
bGVmdE92ZXJTcGFjZSAtPSBiYXNlU2l6ZTsKICAgICAgICAgICAgIGZsZXhGYWN0b3JTdW0gLT0g
ZmxleEZhY3RvcjsKLSAgICAgICAgICAgIGlmICghdHJhY2tzVG9UcmVhdEFzSW5mbGV4aWJsZSkK
LSAgICAgICAgICAgICAgICB0cmFja3NUb1RyZWF0QXNJbmZsZXhpYmxlID0gbWFrZVVuaXF1ZTxU
cmFja0luZGV4U2V0PigpOwotICAgICAgICAgICAgdHJhY2tzVG9UcmVhdEFzSW5mbGV4aWJsZS0+
YWRkKGluZGV4KTsKKyAgICAgICAgICAgIHRyYWNrc1RvVHJlYXRBc0luZmxleGlibGUuYWRkKGlu
ZGV4KTsKICAgICAgICAgICAgIHZhbGlkRmxleEZhY3RvclVuaXQgPSBmYWxzZTsKICAgICAgICAg
fQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkVHJhY2tT
aXppbmdBbGdvcml0aG0uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkVHJhY2tTaXpp
bmdBbGdvcml0aG0uaAppbmRleCA2Yjc5N2VhODc4NTQwOWRkZWIxOGEwNTlmNDE2MGQ1NWQ2NWQ1
OGZmLi43N2Y5MGU1YjQ4NWZlMDdhYzkyZGZkZWFjNzA4MDI4YzliNzEyNjYxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5oCkBA
IC0xNzEsNyArMTcxLDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIEhlbHBlciBtZXRob2RzIGZvciBz
dGVwIDQuIFN0cmVjaCBmbGV4aWJsZSB0cmFja3MuCiAgICAgdHlwZWRlZiBIYXNoU2V0PHVuc2ln
bmVkLCBEZWZhdWx0SGFzaDx1bnNpZ25lZD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hU
cmFpdHM8dW5zaWduZWQ+PiBUcmFja0luZGV4U2V0OwotICAgIGRvdWJsZSBjb21wdXRlRmxleEZh
Y3RvclVuaXRTaXplKGNvbnN0IFZlY3RvcjxHcmlkVHJhY2s+JiB0cmFja3MsIGRvdWJsZSBmbGV4
RmFjdG9yU3VtLCBMYXlvdXRVbml0JiBsZWZ0T3ZlclNwYWNlLCBjb25zdCBWZWN0b3I8dW5zaWdu
ZWQsIDg+JiBmbGV4aWJsZVRyYWNrc0luZGV4ZXMsIHN0ZDo6dW5pcXVlX3B0cjxUcmFja0luZGV4
U2V0PiB0cmFja3NUb1RyZWF0QXNJbmZsZXhpYmxlID0gbnVsbHB0cikgY29uc3Q7CisgICAgZG91
YmxlIGNvbXB1dGVGbGV4RmFjdG9yVW5pdFNpemUoY29uc3QgVmVjdG9yPEdyaWRUcmFjaz4mIHRy
YWNrcywgZG91YmxlIGZsZXhGYWN0b3JTdW0sIExheW91dFVuaXQmIGxlZnRPdmVyU3BhY2UsIGNv
bnN0IFZlY3Rvcjx1bnNpZ25lZCwgOD4mIGZsZXhpYmxlVHJhY2tzSW5kZXhlcywgVHJhY2tJbmRl
eFNldCYmIHRyYWNrc1RvVHJlYXRBc0luZmxleGlibGUgPSB7IH0pIGNvbnN0OwogICAgIHZvaWQg
Y29tcHV0ZUZsZXhTaXplZFRyYWNrc0dyb3d0aChkb3VibGUgZmxleEZyYWN0aW9uLCBWZWN0b3I8
TGF5b3V0VW5pdD4mIGluY3JlbWVudHMsIExheW91dFVuaXQmIHRvdGFsR3Jvd3RoKSBjb25zdDsK
ICAgICBkb3VibGUgZmluZEZyVW5pdFNpemUoY29uc3QgR3JpZFNwYW4mIHRyYWNrc1NwYW4sIExh
eW91dFVuaXQgbGVmdE92ZXJTcGFjZSkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9IaXRUZXN0TG9jYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0hpdFRlc3RMb2NhdGlvbi5jcHAKaW5kZXggMTYxZjIyOTVlMTgzOTQ1ZDZhOTg2OGNkNGJk
NWNhZjc1YWIzMzEwMi4uN2FmZDUxZjJhZDYyZDdhOGE0Zjc0YTRkN2U5MDA2MmY5ZDJkOTY4NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RMb2NhdGlvbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RMb2NhdGlvbi5jcHAKQEAgLTI0
LDggKzI0LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1IaXRUZXN0TG9jYXRpb246Okhp
dFRlc3RMb2NhdGlvbigpID0gZGVmYXVsdDsKLQogSGl0VGVzdExvY2F0aW9uOjpIaXRUZXN0TG9j
YXRpb24oY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KQogICAgIDogbV9wb2ludChwb2ludCkKICAg
ICAsIG1fYm91bmRpbmdCb3gocmVjdEZvclBvaW50KHBvaW50LCAwLCAwLCAwLCAwKSkKQEAgLTc4
LDMwICs3Niw2IEBAIEhpdFRlc3RMb2NhdGlvbjo6SGl0VGVzdExvY2F0aW9uKGNvbnN0IEhpdFRl
c3RMb2NhdGlvbiYgb3RoZXIsIGNvbnN0IExheW91dFNpemUmCiAgICAgbW92ZShvZmZzZXQpOwog
fQogCi1IaXRUZXN0TG9jYXRpb246OkhpdFRlc3RMb2NhdGlvbihjb25zdCBIaXRUZXN0TG9jYXRp
b24mIG90aGVyKQotICAgIDogbV9wb2ludChvdGhlci5tX3BvaW50KQotICAgICwgbV9ib3VuZGlu
Z0JveChvdGhlci5tX2JvdW5kaW5nQm94KQotICAgICwgbV90cmFuc2Zvcm1lZFBvaW50KG90aGVy
Lm1fdHJhbnNmb3JtZWRQb2ludCkKLSAgICAsIG1fdHJhbnNmb3JtZWRSZWN0KG90aGVyLm1fdHJh
bnNmb3JtZWRSZWN0KQotICAgICwgbV9pc1JlY3RCYXNlZChvdGhlci5tX2lzUmVjdEJhc2VkKQot
ICAgICwgbV9pc1JlY3RpbGluZWFyKG90aGVyLm1faXNSZWN0aWxpbmVhcikKLXsKLX0KLQotSGl0
VGVzdExvY2F0aW9uOjp+SGl0VGVzdExvY2F0aW9uKCkgPSBkZWZhdWx0OwotCi1IaXRUZXN0TG9j
YXRpb24mIEhpdFRlc3RMb2NhdGlvbjo6b3BlcmF0b3I9KGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYg
b3RoZXIpCi17Ci0gICAgbV9wb2ludCA9IG90aGVyLm1fcG9pbnQ7Ci0gICAgbV9ib3VuZGluZ0Jv
eCA9IG90aGVyLm1fYm91bmRpbmdCb3g7Ci0gICAgbV90cmFuc2Zvcm1lZFBvaW50ID0gb3RoZXIu
bV90cmFuc2Zvcm1lZFBvaW50OwotICAgIG1fdHJhbnNmb3JtZWRSZWN0ID0gb3RoZXIubV90cmFu
c2Zvcm1lZFJlY3Q7Ci0gICAgbV9pc1JlY3RCYXNlZCA9IG90aGVyLm1faXNSZWN0QmFzZWQ7Ci0g
ICAgbV9pc1JlY3RpbGluZWFyID0gb3RoZXIubV9pc1JlY3RpbGluZWFyOwotCi0gICAgcmV0dXJu
ICp0aGlzOwotfQotCiB2b2lkIEhpdFRlc3RMb2NhdGlvbjo6bW92ZShjb25zdCBMYXlvdXRTaXpl
JiBvZmZzZXQpCiB7CiAgICAgbV9wb2ludC5tb3ZlKG9mZnNldCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdExvY2F0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSGl0VGVzdExvY2F0aW9uLmgKaW5kZXggMDIzMDM1ZjRiOWE1YzMzNTIyMDcxOWQ0
NTFmYzA0NTU1N2ZlZTAzOC4uMDU4NmQ0NTA3YzVjMGFiYWVhZWUyNzEyNzE2NzUyNzJkNzVhNWM4
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RMb2NhdGlvbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0TG9jYXRpb24uaApAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgSW5jLgorICogQ29weXJp
Z2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI3LDcgKzI3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBIaXRUZXN0TG9jYXRpb24gewogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIEhp
dFRlc3RMb2NhdGlvbigpOworICAgIEhpdFRlc3RMb2NhdGlvbigpID0gZGVmYXVsdDsKICAgICBI
aXRUZXN0TG9jYXRpb24oY29uc3QgTGF5b3V0UG9pbnQmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBI
aXRUZXN0TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYpOwogICAgIEhpdFRlc3RMb2NhdGlvbihj
b25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRRdWFkJik7CkBAIC0zNyw5ICszNyw2IEBAIHB1
YmxpYzoKIAogICAgIC8vIE1ha2UgYSBjb3B5IHRoZSBIaXRUZXN0TG9jYXRpb24gaW4gYSBuZXcg
cmVnaW9uIGJ5IGFwcGx5aW5nIGdpdmVuIG9mZnNldCB0byBpbnRlcm5hbCBwb2ludCBhbmQgYXJl
YS4KICAgICBIaXRUZXN0TG9jYXRpb24oY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgY29uc3QgTGF5
b3V0U2l6ZSYgb2Zmc2V0KTsKLSAgICBXRUJDT1JFX0VYUE9SVCBIaXRUZXN0TG9jYXRpb24oY29u
c3QgSGl0VGVzdExvY2F0aW9uJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgfkhpdFRlc3RMb2NhdGlv
bigpOwotICAgIEhpdFRlc3RMb2NhdGlvbiYgb3BlcmF0b3I9KGNvbnN0IEhpdFRlc3RMb2NhdGlv
biYpOwogCiAgICAgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9w
b2ludDsgfQogICAgIEludFBvaW50IHJvdW5kZWRQb2ludCgpIGNvbnN0IHsgcmV0dXJuIHJvdW5k
ZWRJbnRQb2ludChtX3BvaW50KTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0hpdFRlc3RSZXN1bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RS
ZXN1bHQuY3BwCmluZGV4IDkwZDA3NWY4OWQwNTBjMDM1NDdiNWJlMzZhOTY5OTQ2M2ExMzFjNTMu
LjViZmJlNTM2Y2FhOTIzZTBlZmZiZTBjMjM1NTY5NTE4ZjYwMmI0ZDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKQEAgLTU1LDEyICs1NSw2IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotc3RhdGljIGlu
bGluZSB2b2lkIGFwcGVuZFRvTm9kZVNldChjb25zdCBIaXRUZXN0UmVzdWx0OjpOb2RlU2V0JiBz
b3VyY2UsIEhpdFRlc3RSZXN1bHQ6Ok5vZGVTZXQmIGRlc3RpbmF0aW9uKQotewotICAgIGZvciAo
YXV0byYgbm9kZSA6IHNvdXJjZSkKLSAgICAgICAgZGVzdGluYXRpb24uYWRkKG5vZGUuY29weVJl
ZigpKTsKLX0KLQogSGl0VGVzdFJlc3VsdDo6SGl0VGVzdFJlc3VsdCgpID0gZGVmYXVsdDsKIAog
SGl0VGVzdFJlc3VsdDo6SGl0VGVzdFJlc3VsdChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCkBA
IC04Nyw0NSArODEsOCBAQCBIaXRUZXN0UmVzdWx0OjpIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRl
c3RMb2NhdGlvbiYgb3RoZXIpCiB7CiB9CiAKLUhpdFRlc3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQo
Y29uc3QgSGl0VGVzdFJlc3VsdCYgb3RoZXIpCi0gICAgOiBtX2hpdFRlc3RMb2NhdGlvbihvdGhl
ci5tX2hpdFRlc3RMb2NhdGlvbikKLSAgICAsIG1faW5uZXJOb2RlKG90aGVyLmlubmVyTm9kZSgp
KQotICAgICwgbV9pbm5lck5vblNoYXJlZE5vZGUob3RoZXIuaW5uZXJOb25TaGFyZWROb2RlKCkp
Ci0gICAgLCBtX3BvaW50SW5Jbm5lck5vZGVGcmFtZShvdGhlci5tX3BvaW50SW5Jbm5lck5vZGVG
cmFtZSkKLSAgICAsIG1fbG9jYWxQb2ludChvdGhlci5sb2NhbFBvaW50KCkpCi0gICAgLCBtX2lu
bmVyVVJMRWxlbWVudChvdGhlci5VUkxFbGVtZW50KCkpCi0gICAgLCBtX3Njcm9sbGJhcihvdGhl
ci5zY3JvbGxiYXIoKSkKLSAgICAsIG1faXNPdmVyV2lkZ2V0KG90aGVyLmlzT3ZlcldpZGdldCgp
KQotewotICAgIC8vIE9ubHkgY29weSB0aGUgTm9kZVNldCBpbiBjYXNlIG9mIGxpc3QgaGl0IHRl
c3QuCi0gICAgaWYgKG90aGVyLm1fbGlzdEJhc2VkVGVzdFJlc3VsdCkgewotICAgICAgICBtX2xp
c3RCYXNlZFRlc3RSZXN1bHQgPSBtYWtlVW5pcXVlPE5vZGVTZXQ+KCk7Ci0gICAgICAgIGFwcGVu
ZFRvTm9kZVNldCgqb3RoZXIubV9saXN0QmFzZWRUZXN0UmVzdWx0LCAqbV9saXN0QmFzZWRUZXN0
UmVzdWx0KTsKLSAgICB9Ci19Ci0KIEhpdFRlc3RSZXN1bHQ6On5IaXRUZXN0UmVzdWx0KCkgPSBk
ZWZhdWx0OwogCi1IaXRUZXN0UmVzdWx0JiBIaXRUZXN0UmVzdWx0OjpvcGVyYXRvcj0oY29uc3Qg
SGl0VGVzdFJlc3VsdCYgb3RoZXIpCi17Ci0gICAgbV9oaXRUZXN0TG9jYXRpb24gPSBvdGhlci5t
X2hpdFRlc3RMb2NhdGlvbjsKLSAgICBtX2lubmVyTm9kZSA9IG90aGVyLmlubmVyTm9kZSgpOwot
ICAgIG1faW5uZXJOb25TaGFyZWROb2RlID0gb3RoZXIuaW5uZXJOb25TaGFyZWROb2RlKCk7Ci0g
ICAgbV9wb2ludEluSW5uZXJOb2RlRnJhbWUgPSBvdGhlci5tX3BvaW50SW5Jbm5lck5vZGVGcmFt
ZTsKLSAgICBtX2xvY2FsUG9pbnQgPSBvdGhlci5sb2NhbFBvaW50KCk7Ci0gICAgbV9pbm5lclVS
TEVsZW1lbnQgPSBvdGhlci5VUkxFbGVtZW50KCk7Ci0gICAgbV9zY3JvbGxiYXIgPSBvdGhlci5z
Y3JvbGxiYXIoKTsKLSAgICBtX2lzT3ZlcldpZGdldCA9IG90aGVyLmlzT3ZlcldpZGdldCgpOwot
Ci0gICAgLy8gT25seSBjb3B5IHRoZSBOb2RlU2V0IGluIGNhc2Ugb2YgbGlzdCBoaXQgdGVzdC4K
LSAgICBpZiAob3RoZXIubV9saXN0QmFzZWRUZXN0UmVzdWx0KSB7Ci0gICAgICAgIG1fbGlzdEJh
c2VkVGVzdFJlc3VsdCA9IG1ha2VVbmlxdWU8Tm9kZVNldD4oKTsKLSAgICAgICAgYXBwZW5kVG9O
b2RlU2V0KCpvdGhlci5tX2xpc3RCYXNlZFRlc3RSZXN1bHQsICptX2xpc3RCYXNlZFRlc3RSZXN1
bHQpOwotICAgIH0KLQotICAgIHJldHVybiAqdGhpczsKLX0KLQogc3RhdGljIE5vZGUqIG1vdmVP
dXRPZlVzZXJBZ2VudFNoYWRvd1RyZWUoTm9kZSYgbm9kZSkKIHsKICAgICBpZiAobm9kZS5pc0lu
U2hhZG93VHJlZSgpKSB7CkBAIC02NDQsOCArNjAxLDcgQEAgYm9vbCBIaXRUZXN0UmVzdWx0Ojpp
c0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1faW5uZXJOb25TaGFyZWROb2Rl
LT5oYXNFZGl0YWJsZVN0eWxlKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFJlY3RUeXBlPgot
aW5saW5lIEhpdFRlc3RQcm9ncmVzcyBIaXRUZXN0UmVzdWx0OjphZGROb2RlVG9MaXN0QmFzZWRU
ZXN0UmVzdWx0Q29tbW9uKE5vZGUqIG5vZGUsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IFJlY3RU
eXBlJiByZWN0KQoraW5saW5lIE9wdGlvbmFsPEhpdFRlc3RQcm9ncmVzcz4gSGl0VGVzdFJlc3Vs
dDo6YWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdENvbW1vbihOb2RlKiBub2RlLCBjb25zdCBI
aXRUZXN0UmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICAvLyBJZiBpdCBpcyBub3QgYSBsaXN0LWJh
c2VkIGhpdCB0ZXN0LCB0aGlzIG1ldGhvZCBoYXMgdG8gYmUgbm8tb3AuCiAgICAgaWYgKCFyZXF1
ZXN0LnJlc3VsdElzRWxlbWVudExpc3QoKSkgewpAQCAtNjYwLDEzICs2MTYsMTkgQEAgaW5saW5l
IEhpdFRlc3RQcm9ncmVzcyBIaXRUZXN0UmVzdWx0OjphZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVz
dWx0Q29tbW9uKE5vZGUqIG4KICAgICAgICAgfHwgKHJlcXVlc3QuZGlzYWxsb3dzVXNlckFnZW50
U2hhZG93Q29udGVudEV4Y2VwdEZvckltYWdlT3ZlcmxheXMoKSAmJiAhSFRNTEVsZW1lbnQ6Omlz
SW5zaWRlSW1hZ2VPdmVybGF5KCpub2RlKSAmJiBub2RlLT5pc0luVXNlckFnZW50U2hhZG93VHJl
ZSgpKSkKICAgICAgICAgbm9kZSA9IG5vZGUtPmRvY3VtZW50KCkuYW5jZXN0b3JOb2RlSW5UaGlz
U2NvcGUobm9kZSk7CiAKLSAgICBtdXRhYmxlTGlzdEJhc2VkVGVzdFJlc3VsdCgpLmFkZCgqbm9k
ZSk7CisgICAgbV9saXN0QmFzZWRUZXN0UmVzdWx0LmFkZCgqbm9kZSk7CiAKICAgICBpZiAocmVx
dWVzdC5pbmNsdWRlc0FsbEVsZW1lbnRzVW5kZXJQb2ludCgpKQogICAgICAgICByZXR1cm4gSGl0
VGVzdFByb2dyZXNzOjpDb250aW51ZTsKIAotICAgIGJvb2wgcmVnaW9uRmlsbGVkID0gcmVjdC5j
b250YWlucyhsb2NhdGlvbkluQ29udGFpbmVyLmJvdW5kaW5nQm94KCkpOwotICAgIHJldHVybiBy
ZWdpb25GaWxsZWQgPyBIaXRUZXN0UHJvZ3Jlc3M6OlN0b3AgOiBIaXRUZXN0UHJvZ3Jlc3M6OkNv
bnRpbnVlOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFJlY3RUeXBlPiBpbmxpbmUgSGl0VGVzdFByb2dyZXNzIEhpdFRlc3RSZXN1bHQ6OmFkZE5vZGVU
b0xpc3RCYXNlZFRlc3RSZXN1bHRDb21tb24oTm9kZSogbm9kZSwgY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwg
Y29uc3QgUmVjdFR5cGUmIHJlY3QpCit7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gYWRkTm9kZVRv
TGlzdEJhc2VkVGVzdFJlc3VsdENvbW1vbihub2RlLCByZXF1ZXN0KSkKKyAgICAgICAgcmV0dXJu
ICpyZXN1bHQ7CisgICAgcmV0dXJuIHJlY3QuY29udGFpbnMobG9jYXRpb25JbkNvbnRhaW5lci5i
b3VuZGluZ0JveCgpKSA/IEhpdFRlc3RQcm9ncmVzczo6U3RvcCA6IEhpdFRlc3RQcm9ncmVzczo6
Q29udGludWU7CiB9CiAKIEhpdFRlc3RQcm9ncmVzcyBIaXRUZXN0UmVzdWx0OjphZGROb2RlVG9M
aXN0QmFzZWRUZXN0UmVzdWx0KE5vZGUqIG5vZGUsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExh
eW91dFJlY3QmIHJlY3QpCkBAIC02OTMsMjIgKzY1NSw4IEBAIHZvaWQgSGl0VGVzdFJlc3VsdDo6
YXBwZW5kKGNvbnN0IEhpdFRlc3RSZXN1bHQmIG90aGVyLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYg
cmVxCiAgICAgICAgIG1faXNPdmVyV2lkZ2V0ID0gb3RoZXIuaXNPdmVyV2lkZ2V0KCk7CiAgICAg
fQogCi0gICAgaWYgKG90aGVyLm1fbGlzdEJhc2VkVGVzdFJlc3VsdCkKLSAgICAgICAgYXBwZW5k
VG9Ob2RlU2V0KCpvdGhlci5tX2xpc3RCYXNlZFRlc3RSZXN1bHQsIG11dGFibGVMaXN0QmFzZWRU
ZXN0UmVzdWx0KCkpOwotfQotCi1jb25zdCBIaXRUZXN0UmVzdWx0OjpOb2RlU2V0JiBIaXRUZXN0
UmVzdWx0OjpsaXN0QmFzZWRUZXN0UmVzdWx0KCkgY29uc3QKLXsKLSAgICBpZiAoIW1fbGlzdEJh
c2VkVGVzdFJlc3VsdCkKLSAgICAgICAgbV9saXN0QmFzZWRUZXN0UmVzdWx0ID0gbWFrZVVuaXF1
ZTxOb2RlU2V0PigpOwotICAgIHJldHVybiAqbV9saXN0QmFzZWRUZXN0UmVzdWx0OwotfQotCi1I
aXRUZXN0UmVzdWx0OjpOb2RlU2V0JiBIaXRUZXN0UmVzdWx0OjptdXRhYmxlTGlzdEJhc2VkVGVz
dFJlc3VsdCgpCi17Ci0gICAgaWYgKCFtX2xpc3RCYXNlZFRlc3RSZXN1bHQpCi0gICAgICAgIG1f
bGlzdEJhc2VkVGVzdFJlc3VsdCA9IG1ha2VVbmlxdWU8Tm9kZVNldD4oKTsKLSAgICByZXR1cm4g
Km1fbGlzdEJhc2VkVGVzdFJlc3VsdDsKKyAgICBmb3IgKGF1dG8mIG5vZGUgOiBvdGhlci5tX2xp
c3RCYXNlZFRlc3RSZXN1bHQpCisgICAgICAgIG1fbGlzdEJhc2VkVGVzdFJlc3VsdC5hZGQobm9k
ZSk7CiB9CiAKIFZlY3RvcjxTdHJpbmc+IEhpdFRlc3RSZXN1bHQ6OmRpY3RhdGlvbkFsdGVybmF0
aXZlcygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVz
dFJlc3VsdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAppbmRl
eCA1ZWM5MmJmMTFkMGM5MmQyMTA2Mjk3YmNmNDhkZTM3ZGM4NjM0MGY5Li4zN2QxZmZiYjYxMWQz
NGRkODU0NWM3NThmMmZjYzlhODk1MDM3MjdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9I
aXRUZXN0UmVzdWx0LmgKQEAgLTQ0LDE2ICs0NCwxMSBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JF
X0VYUE9SVCBIaXRUZXN0UmVzdWx0KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgSGl0
VGVzdFJlc3VsdChjb25zdCBMYXlvdXRQb2ludCYpOwotCiAgICAgV0VCQ09SRV9FWFBPUlQgZXhw
bGljaXQgSGl0VGVzdFJlc3VsdChjb25zdCBMYXlvdXRSZWN0Jik7CiAgICAgV0VCQ09SRV9FWFBP
UlQgSGl0VGVzdFJlc3VsdChjb25zdCBMYXlvdXRQb2ludCYgY2VudGVyUG9pbnQsIHVuc2lnbmVk
IHRvcFBhZGRpbmcsIHVuc2lnbmVkIHJpZ2h0UGFkZGluZywgdW5zaWduZWQgYm90dG9tUGFkZGlu
ZywgdW5zaWduZWQgbGVmdFBhZGRpbmcpOwotCiAgICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQg
SGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0TG9jYXRpb24mKTsKLSAgICBXRUJDT1JFX0VYUE9S
VCBIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmKTsKICAgICBXRUJDT1JFX0VYUE9S
VCB+SGl0VGVzdFJlc3VsdCgpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgSGl0VGVzdFJlc3VsdCYg
b3BlcmF0b3I9KGNvbnN0IEhpdFRlc3RSZXN1bHQmKTsKLQogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgc2V0SW5uZXJOb2RlKE5vZGUqKTsKICAgICBOb2RlKiBpbm5lck5vZGUoKSBjb25zdCB7IHJl
dHVybiBtX2lubmVyTm9kZS5nZXQoKTsgfQogCkBAIC03Myw3ICs2OCw2IEBAIHB1YmxpYzoKIAog
ICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBsaW5rU3VnZ2VzdGVkRmlsZW5hbWUoKSBjb25zdDsK
IAotICAgIC8vIEZvcndhcmRlZCBmcm9tIEhpdFRlc3RMb2NhdGlvbgogICAgIGJvb2wgaXNSZWN0
QmFzZWRUZXN0KCkgY29uc3QgeyByZXR1cm4gbV9oaXRUZXN0TG9jYXRpb24uaXNSZWN0QmFzZWRU
ZXN0KCk7IH0KIAogICAgIC8vIFRoZSBoaXQtdGVzdGVkIHBvaW50IGluIHRoZSBjb29yZGluYXRl
cyBvZiB0aGUgbWFpbiBmcmFtZS4KQEAgLTEzNiwxMCArMTMwLDcgQEAgcHVibGljOgogICAgIEhp
dFRlc3RQcm9ncmVzcyBhZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0KE5vZGUqLCBjb25zdCBI
aXRUZXN0UmVxdWVzdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgcG9pbnRJbkNvbnRhaW5lciwg
Y29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdm9pZCBhcHBlbmQoY29uc3QgSGl0VGVzdFJlc3VsdCYs
IGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jik7CiAKLSAgICAvLyBJZiBtX2xpc3RCYXNlZFRlc3RSZXN1
bHQgaXMgMCB0aGVuIHNldCBpdCB0byBhIG5ldyBOb2RlU2V0LiBSZXR1cm4gKm1fbGlzdEJhc2Vk
VGVzdFJlc3VsdC4gTGF6eSBhbGxvY2F0aW9uIG1ha2VzCi0gICAgLy8gc2Vuc2UgYmVjYXVzZSB0
aGUgTm9kZVNldCBpcyBzZWxkb20gbmVjZXNzYXJ5LCBhbmQgaXQncyBzb21ld2hhdCBleHBlbnNp
dmUgdG8gYWxsb2NhdGUgYW5kIGluaXRpYWxpemUuIFRoaXMgbWV0aG9kIGRvZXMKLSAgICAvLyB0
aGUgc2FtZSB0aGluZyBhcyBtdXRhYmxlTGlzdEJhc2VkVGVzdFJlc3VsdCgpLCBidXQgaGVyZSB0
aGUgcmV0dXJuIHZhbHVlIGlzIGNvbnN0LgotICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IE5vZGVT
ZXQmIGxpc3RCYXNlZFRlc3RSZXN1bHQoKSBjb25zdDsKKyAgICBjb25zdCBOb2RlU2V0JiBsaXN0
QmFzZWRUZXN0UmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9saXN0QmFzZWRUZXN0UmVzdWx0OyB9
CiAKICAgICBWZWN0b3I8U3RyaW5nPiBkaWN0YXRpb25BbHRlcm5hdGl2ZXMoKSBjb25zdDsKIApA
QCAtMTQ3LDggKzEzOCw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBFbGVtZW50KiB0
YXJnZXRFbGVtZW50KCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgTm9kZVNldCYgbXV0YWJsZUxp
c3RCYXNlZFRlc3RSZXN1bHQoKTsgLy8gU2VlIGFib3ZlLgotCisgICAgT3B0aW9uYWw8SGl0VGVz
dFByb2dyZXNzPiBhZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0Q29tbW9uKE5vZGUqLCBjb25z
dCBIaXRUZXN0UmVxdWVzdCYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFJlY3RUeXBlPiBIaXRU
ZXN0UHJvZ3Jlc3MgYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdENvbW1vbihOb2RlKiwgY29u
c3QgSGl0VGVzdFJlcXVlc3QmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBjb25zdCBSZWN0VHlw
ZSYpOwogCiAgICAgUmVmUHRyPE5vZGU+IG5vZGVGb3JJbWFnZURhdGEoKSBjb25zdDsKQEAgLTE1
Niw2ICsxNDYsNyBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShWSURFTykKICAgICBIVE1MTWVkaWFF
bGVtZW50KiBtZWRpYUVsZW1lbnQoKSBjb25zdDsKICNlbmRpZgorCiAgICAgSGl0VGVzdExvY2F0
aW9uIG1faGl0VGVzdExvY2F0aW9uOwogCiAgICAgUmVmUHRyPE5vZGU+IG1faW5uZXJOb2RlOwpA
QCAtMTY3LDcgKzE1OCw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFNjcm9sbGJhcj4gbV9zY3Jv
bGxiYXI7CiAgICAgYm9vbCBtX2lzT3ZlcldpZGdldCB7IGZhbHNlIH07IC8vIFJldHVybnMgdHJ1
ZSBpZiB3ZSBhcmUgb3ZlciBhIHdpZGdldCAoYW5kIG5vdCBpbiB0aGUgYm9yZGVyL3BhZGRpbmcg
YXJlYSBvZiBhIFJlbmRlcldpZGdldCBmb3IgZXhhbXBsZSkuCiAKLSAgICBtdXRhYmxlIHN0ZDo6
dW5pcXVlX3B0cjxOb2RlU2V0PiBtX2xpc3RCYXNlZFRlc3RSZXN1bHQ7CisgICAgTm9kZVNldCBt
X2xpc3RCYXNlZFRlc3RSZXN1bHQ7CiB9OwogCiBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgZGlzcGxh
eVN0cmluZyhjb25zdCBTdHJpbmcmLCBjb25zdCBOb2RlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCA3ZmZmZTZiYzBiYTJmMzViM2ExNTkzOGVlNWU5ZDVl
ZDQxMTAyZWQ1Li40NTQ0ZDdmMzA0Y2ZmOGM1OWI4NjJmNDhlMzlmNTBmOGJhNjY2NjE5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTczOSw3ICs3MzksNyBA
QCB2b2lkIFJlbmRlckJsb2NrOjphZGRPdmVyZmxvd0Zyb21CbG9ja0NoaWxkcmVuKCkKIAogdm9p
ZCBSZW5kZXJCbG9jazo6YWRkT3ZlcmZsb3dGcm9tUG9zaXRpb25lZE9iamVjdHMoKQogewotICAg
IFRyYWNrZWRSZW5kZXJlckxpc3RIYXNoU2V0KiBwb3NpdGlvbmVkRGVzY2VuZGFudHMgPSBwb3Np
dGlvbmVkT2JqZWN0cygpOworICAgIGF1dG8gcG9zaXRpb25lZERlc2NlbmRhbnRzID0gcG9zaXRp
b25lZE9iamVjdHMoKTsKICAgICBpZiAoIXBvc2l0aW9uZWREZXNjZW5kYW50cykKICAgICAgICAg
cmV0dXJuOwogCkBAIC0xMDgwLDcgKzEwODAsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRQ
b3NpdGlvbmVkT2JqZWN0KFJlbmRlckJveCYgciwgYm9vbCByZWxheW91dENoaWxkcmVuLCBibwog
CiB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRQb3NpdGlvbmVkT2JqZWN0cyhib29sIHJlbGF5b3V0
Q2hpbGRyZW4sIGJvb2wgZml4ZWRQb3NpdGlvbk9iamVjdHNPbmx5KQogewotICAgIFRyYWNrZWRS
ZW5kZXJlckxpc3RIYXNoU2V0KiBwb3NpdGlvbmVkRGVzY2VuZGFudHMgPSBwb3NpdGlvbmVkT2Jq
ZWN0cygpOworICAgIGF1dG8gcG9zaXRpb25lZERlc2NlbmRhbnRzID0gcG9zaXRpb25lZE9iamVj
dHMoKTsKICAgICBpZiAoIXBvc2l0aW9uZWREZXNjZW5kYW50cykKICAgICAgICAgcmV0dXJuOwog
ICAgIApAQCAtMTA5Miw3ICsxMDkyLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UG9zaXRp
b25lZE9iamVjdHMoYm9vbCByZWxheW91dENoaWxkcmVuLCBib29sIGZpeGVkUG9zaXQKIAogdm9p
ZCBSZW5kZXJCbG9jazo6bWFya1Bvc2l0aW9uZWRPYmplY3RzRm9yTGF5b3V0KCkKIHsKLSAgICBU
cmFja2VkUmVuZGVyZXJMaXN0SGFzaFNldCogcG9zaXRpb25lZERlc2NlbmRhbnRzID0gcG9zaXRp
b25lZE9iamVjdHMoKTsKKyAgICBhdXRvIHBvc2l0aW9uZWREZXNjZW5kYW50cyA9IHBvc2l0aW9u
ZWRPYmplY3RzKCk7CiAgICAgaWYgKCFwb3NpdGlvbmVkRGVzY2VuZGFudHMpCiAgICAgICAgIHJl
dHVybjsKIApAQCAtMTUxOCw3ICsxNTE4LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRTZWxl
Y3Rpb24oUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE8KICNl
bmRpZgogfQogCi1zdGF0aWMgdm9pZCBjbGlwT3V0UG9zaXRpb25lZE9iamVjdHMoY29uc3QgUGFp
bnRJbmZvKiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBvZmZzZXQsIFRyYWNrZWRSZW5k
ZXJlckxpc3RIYXNoU2V0KiBwb3NpdGlvbmVkT2JqZWN0cykKK3N0YXRpYyB2b2lkIGNsaXBPdXRQ
b3NpdGlvbmVkT2JqZWN0cyhjb25zdCBQYWludEluZm8qIHBhaW50SW5mbywgY29uc3QgTGF5b3V0
UG9pbnQmIG9mZnNldCwgY29uc3QgVHJhY2tlZFJlbmRlcmVyTGlzdEhhc2hTZXQqIHBvc2l0aW9u
ZWRPYmplY3RzKQogewogICAgIGlmICghcG9zaXRpb25lZE9iamVjdHMpCiAgICAgICAgIHJldHVy
bjsKQEAgLTE3ODMsNyArMTc4Myw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmxvZ2ljYWxS
aWdodFNlbGVjdGlvbk9mZnNldChSZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBMYXlvCiAgICAgcmV0
dXJuIGxvZ2ljYWxSaWdodDsKIH0KIAotVHJhY2tlZFJlbmRlcmVyTGlzdEhhc2hTZXQqIFJlbmRl
ckJsb2NrOjpwb3NpdGlvbmVkT2JqZWN0cygpIGNvbnN0Citjb25zdCBUcmFja2VkUmVuZGVyZXJM
aXN0SGFzaFNldCogUmVuZGVyQmxvY2s6OnBvc2l0aW9uZWRPYmplY3RzKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gcG9zaXRpb25lZERlc2NlbmRhbnRzTWFwKCkucG9zaXRpb25lZFJlbmRlcmVycygq
dGhpcyk7CiB9CkBAIC0xODU4LDcgKzE4NTgsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVQ
ZXJjZW50SGVpZ2h0RGVzY2VuZGFudChSZW5kZXJCb3gmIGRlc2NlbmRhbnQpCiAgICAgcmVtb3Zl
RnJvbVRyYWNrZWRSZW5kZXJlck1hcHMoZGVzY2VuZGFudCk7CiB9CiAKLVRyYWNrZWRSZW5kZXJl
ckxpc3RIYXNoU2V0KiBSZW5kZXJCbG9jazo6cGVyY2VudEhlaWdodERlc2NlbmRhbnRzKCkgY29u
c3QKK2NvbnN0IFRyYWNrZWRSZW5kZXJlckxpc3RIYXNoU2V0KiBSZW5kZXJCbG9jazo6cGVyY2Vu
dEhlaWdodERlc2NlbmRhbnRzKCkgY29uc3QKIHsKICAgICByZXR1cm4gcGVyY2VudEhlaWdodERl
c2NlbmRhbnRzTWFwID8gcGVyY2VudEhlaWdodERlc2NlbmRhbnRzTWFwLT5nZXQodGhpcykgOiBu
dWxscHRyOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAppbmRleCBlZmMw
MTU0ZGI4Njg3OWRmMzM3MGFmOTczZjYyOWUwNGY4NWI2ODYxLi4yYzMxY2U5MWE0YTdkODUzM2Q5
NGE3MjY4YTc0ODE0ZjMxNzRhZTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suaApAQCAtODAsMTkgKzgwLDE5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCByZW1vdmVQ
b3NpdGlvbmVkT2JqZWN0KGNvbnN0IFJlbmRlckJveCYpOwogICAgIHZvaWQgcmVtb3ZlUG9zaXRp
b25lZE9iamVjdHMoY29uc3QgUmVuZGVyQmxvY2sqLCBDb250YWluaW5nQmxvY2tTdGF0ZSA9IFNh
bWVDb250YWluaW5nQmxvY2spOwogCi0gICAgVHJhY2tlZFJlbmRlcmVyTGlzdEhhc2hTZXQqIHBv
c2l0aW9uZWRPYmplY3RzKCkgY29uc3Q7CisgICAgY29uc3QgVHJhY2tlZFJlbmRlcmVyTGlzdEhh
c2hTZXQqIHBvc2l0aW9uZWRPYmplY3RzKCkgY29uc3Q7CiAgICAgYm9vbCBoYXNQb3NpdGlvbmVk
T2JqZWN0cygpIGNvbnN0CiAgICAgewotICAgICAgICBUcmFja2VkUmVuZGVyZXJMaXN0SGFzaFNl
dCogb2JqZWN0cyA9IHBvc2l0aW9uZWRPYmplY3RzKCk7CisgICAgICAgIGF1dG8gb2JqZWN0cyA9
IHBvc2l0aW9uZWRPYmplY3RzKCk7CiAgICAgICAgIHJldHVybiBvYmplY3RzICYmICFvYmplY3Rz
LT5pc0VtcHR5KCk7CiAgICAgfQogCiAgICAgdm9pZCBhZGRQZXJjZW50SGVpZ2h0RGVzY2VuZGFu
dChSZW5kZXJCb3gmKTsKICAgICBzdGF0aWMgdm9pZCByZW1vdmVQZXJjZW50SGVpZ2h0RGVzY2Vu
ZGFudChSZW5kZXJCb3gmKTsKLSAgICBUcmFja2VkUmVuZGVyZXJMaXN0SGFzaFNldCogcGVyY2Vu
dEhlaWdodERlc2NlbmRhbnRzKCkgY29uc3Q7CisgICAgY29uc3QgVHJhY2tlZFJlbmRlcmVyTGlz
dEhhc2hTZXQqIHBlcmNlbnRIZWlnaHREZXNjZW5kYW50cygpIGNvbnN0OwogICAgIGJvb2wgaGFz
UGVyY2VudEhlaWdodERlc2NlbmRhbnRzKCkgY29uc3QKICAgICB7Ci0gICAgICAgIFRyYWNrZWRS
ZW5kZXJlckxpc3RIYXNoU2V0KiBvYmplY3RzID0gcGVyY2VudEhlaWdodERlc2NlbmRhbnRzKCk7
CisgICAgICAgIGF1dG8gb2JqZWN0cyA9IHBlcmNlbnRIZWlnaHREZXNjZW5kYW50cygpOwogICAg
ICAgICByZXR1cm4gb2JqZWN0cyAmJiAhb2JqZWN0cy0+aXNFbXB0eSgpOwogICAgIH0KICAgICBz
dGF0aWMgYm9vbCBoYXNQZXJjZW50SGVpZ2h0Q29udGFpbmVyTWFwKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKaW5kZXggNDM2OTlmZWFkOWY2NWM1OTcyYmZk
ZDQyOWM3N2FlYTEwMTZhNjk5MC4uMzM5MzRiOTI3NDU2OTlhM2RkMmZlNTMyY2I2NDY2NjhlNzc1
MzJmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcApAQCAt
NDcsNyArNDcsNyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9JTVBMKFJlbmRlckNvdW50ZXIpOwogCiB1c2luZyBDb3VudGVyTWFwID0gSGFzaE1h
cDxBdG9tU3RyaW5nLCBSZWY8Q291bnRlck5vZGU+PjsKLXVzaW5nIENvdW50ZXJNYXBzID0gSGFz
aE1hcDxjb25zdCBSZW5kZXJFbGVtZW50Kiwgc3RkOjp1bmlxdWVfcHRyPENvdW50ZXJNYXA+PjsK
K3VzaW5nIENvdW50ZXJNYXBzID0gSGFzaE1hcDxjb25zdCBSZW5kZXJFbGVtZW50KiwgQ291bnRl
ck1hcD47CiAKIHN0YXRpYyBDb3VudGVyTm9kZSogbWFrZUNvdW50ZXJOb2RlKFJlbmRlckVsZW1l
bnQmLCBjb25zdCBBdG9tU3RyaW5nJiBpZGVudGlmaWVyLCBib29sIGFsd2F5c0NyZWF0ZUNvdW50
ZXIpOwogCkBAIC0xNzMsMTAgKzE3Myw3IEBAIHN0YXRpYyBPcHRpb25hbDxDb3VudGVyUGxhbj4g
cGxhbkNvdW50ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEF0b21TdHJpCiAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7IC8vIENvdW50ZXJzIGFyZSBmb3JiaWRkZW4gZnJvbSBh
bGwgb3RoZXIgcHNldWRvIGVsZW1lbnRzLgogICAgIH0KIAotICAgIENvdW50ZXJEaXJlY3RpdmVz
IGRpcmVjdGl2ZXM7Ci0KLSAgICBpZiAoYXV0byBtYXAgPSBzdHlsZS5jb3VudGVyRGlyZWN0aXZl
cygpKQotICAgICAgICBkaXJlY3RpdmVzID0gbWFwLT5nZXQoaWRlbnRpZmllcik7CisgICAgYXV0
byBkaXJlY3RpdmVzID0gc3R5bGUuY291bnRlckRpcmVjdGl2ZXMoKS5nZXQoaWRlbnRpZmllcik7
CiAKICAgICBpZiAoaWRlbnRpZmllciA9PSAibGlzdC1pdGVtIikgewogICAgICAgICBhdXRvIGl0
ZW1EaXJlY3RpdmVzID0gbGlzdEl0ZW1Db3VudGVyRGlyZWN0aXZlcyhyZW5kZXJlcik7CkBAIC0z
MTYsNyArMzEzLDcgQEAgc3RhdGljIENvdW50ZXJOb2RlKiBtYWtlQ291bnRlck5vZGUoUmVuZGVy
RWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEF0b21TdHJpbmcmIGkKIHsKICAgICBpZiAocmVuZGVy
ZXIuaGFzQ291bnRlck5vZGVNYXAoKSkgewogICAgICAgICBBU1NFUlQoY291bnRlck1hcHMoKS5j
b250YWlucygmcmVuZGVyZXIpKTsKLSAgICAgICAgaWYgKGF1dG8qIG5vZGUgPSBjb3VudGVyTWFw
cygpLmZpbmQoJnJlbmRlcmVyKS0+dmFsdWUtPmdldChpZGVudGlmaWVyKSkKKyAgICAgICAgaWYg
KGF1dG8qIG5vZGUgPSBjb3VudGVyTWFwcygpLmZpbmQoJnJlbmRlcmVyKS0+dmFsdWUuZ2V0KGlk
ZW50aWZpZXIpKQogICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCkBAIC0zMzIsNyAr
MzI5LDcgQEAgc3RhdGljIENvdW50ZXJOb2RlKiBtYWtlQ291bnRlck5vZGUoUmVuZGVyRWxlbWVu
dCYgcmVuZGVyZXIsIGNvbnN0IEF0b21TdHJpbmcmIGkKICAgICBpZiAocGxhY2UucGFyZW50KQog
ICAgICAgICBwbGFjZS5wYXJlbnQtPmluc2VydEFmdGVyKG5ld05vZGUsIHBsYWNlLnByZXZpb3Vz
U2libGluZy5nZXQoKSwgaWRlbnRpZmllcik7CiAKLSAgICBtYXBzLmFkZCgmcmVuZGVyZXIsIG1h
a2VVbmlxdWU8Q291bnRlck1hcD4oKSkuaXRlcmF0b3ItPnZhbHVlLT5hZGQoaWRlbnRpZmllciwg
bmV3Tm9kZS5jb3B5UmVmKCkpOworICAgIG1hcHMuYWRkKCZyZW5kZXJlciwgQ291bnRlck1hcCB7
IH0pLml0ZXJhdG9yLT52YWx1ZS5hZGQoaWRlbnRpZmllciwgbmV3Tm9kZSk7CiAgICAgcmVuZGVy
ZXIuc2V0SGFzQ291bnRlck5vZGVNYXAodHJ1ZSk7CiAKICAgICBpZiAobmV3Tm9kZS0+cGFyZW50
KCkpCkBAIC0zNDYsNyArMzQzLDcgQEAgc3RhdGljIENvdW50ZXJOb2RlKiBtYWtlQ291bnRlck5v
ZGUoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEF0b21TdHJpbmcmIGkKICAgICAgICAg
c2tpcERlc2NlbmRhbnRzID0gZmFsc2U7CiAgICAgICAgIGlmICghY3VycmVudFJlbmRlcmVyLT5o
YXNDb3VudGVyTm9kZU1hcCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGF1dG8q
IGN1cnJlbnRDb3VudGVyID0gbWFwcy5maW5kKGN1cnJlbnRSZW5kZXJlciktPnZhbHVlLT5nZXQo
aWRlbnRpZmllcik7CisgICAgICAgIGF1dG8qIGN1cnJlbnRDb3VudGVyID0gbWFwcy5maW5kKGN1
cnJlbnRSZW5kZXJlciktPnZhbHVlLmdldChpZGVudGlmaWVyKTsKICAgICAgICAgaWYgKCFjdXJy
ZW50Q291bnRlcikKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBza2lwRGVzY2VuZGFu
dHMgPSB0cnVlOwpAQCAtNDU0LDggKzQ1MSw4IEBAIHN0YXRpYyB2b2lkIGRlc3Ryb3lDb3VudGVy
Tm9kZVdpdGhvdXRNYXBSZW1vdmFsKGNvbnN0IEF0b21TdHJpbmcmIGlkZW50aWZpZXIsIENvCiAg
ICAgZm9yIChSZWZQdHI8Q291bnRlck5vZGU+IGNoaWxkID0gbm9kZS5sYXN0RGVzY2VuZGFudCgp
OyBjaGlsZCAmJiBjaGlsZCAhPSAmbm9kZTsgY2hpbGQgPSBXVEZNb3ZlKHByZXZpb3VzKSkgewog
ICAgICAgICBwcmV2aW91cyA9IGNoaWxkLT5wcmV2aW91c0luUHJlT3JkZXIoKTsKICAgICAgICAg
Y2hpbGQtPnBhcmVudCgpLT5yZW1vdmVDaGlsZCgqY2hpbGQpOwotICAgICAgICBBU1NFUlQoY291
bnRlck1hcHMoKS5maW5kKCZjaGlsZC0+b3duZXIoKSktPnZhbHVlLT5nZXQoaWRlbnRpZmllcikg
PT0gY2hpbGQpOwotICAgICAgICBjb3VudGVyTWFwcygpLmZpbmQoJmNoaWxkLT5vd25lcigpKS0+
dmFsdWUtPnJlbW92ZShpZGVudGlmaWVyKTsKKyAgICAgICAgQVNTRVJUKGNvdW50ZXJNYXBzKCku
ZmluZCgmY2hpbGQtPm93bmVyKCkpLT52YWx1ZS5nZXQoaWRlbnRpZmllcikgPT0gY2hpbGQpOwor
ICAgICAgICBjb3VudGVyTWFwcygpLmZpbmQoJmNoaWxkLT5vd25lcigpKS0+dmFsdWUucmVtb3Zl
KGlkZW50aWZpZXIpOwogICAgIH0KICAgICBpZiAoYXV0byogcGFyZW50ID0gbm9kZS5wYXJlbnQo
KSkKICAgICAgICAgcGFyZW50LT5yZW1vdmVDaGlsZChub2RlKTsKQEAgLTQ2NCwxMCArNDYxLDgg
QEAgc3RhdGljIHZvaWQgZGVzdHJveUNvdW50ZXJOb2RlV2l0aG91dE1hcFJlbW92YWwoY29uc3Qg
QXRvbVN0cmluZyYgaWRlbnRpZmllciwgQ28KIHZvaWQgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNv
dW50ZXJOb2RlcyhSZW5kZXJFbGVtZW50JiBvd25lcikKIHsKICAgICBBU1NFUlQob3duZXIuaGFz
Q291bnRlck5vZGVNYXAoKSk7Ci0gICAgYXV0byYgbWFwcyA9IGNvdW50ZXJNYXBzKCk7Ci0gICAg
QVNTRVJUKG1hcHMuY29udGFpbnMoJm93bmVyKSk7Ci0gICAgYXV0byBjb3VudGVyTWFwID0gbWFw
cy50YWtlKCZvd25lcik7Ci0gICAgZm9yIChhdXRvJiBjb3VudGVyTWFwRW50cnkgOiAqY291bnRl
ck1hcCkKKyAgICBBU1NFUlQoY291bnRlck1hcHMoKS5jb250YWlucygmb3duZXIpKTsKKyAgICBm
b3IgKGF1dG8mIGNvdW50ZXJNYXBFbnRyeSA6IGNvdW50ZXJNYXBzKCkudGFrZSgmb3duZXIpKQog
ICAgICAgICBkZXN0cm95Q291bnRlck5vZGVXaXRob3V0TWFwUmVtb3ZhbChjb3VudGVyTWFwRW50
cnkua2V5LCBjb3VudGVyTWFwRW50cnkudmFsdWUpOwogICAgIG93bmVyLnNldEhhc0NvdW50ZXJO
b2RlTWFwKGZhbHNlKTsKIH0KQEAgLTQ3Nyw3ICs0NzIsNyBAQCB2b2lkIFJlbmRlckNvdW50ZXI6
OmRlc3Ryb3lDb3VudGVyTm9kZShSZW5kZXJFbGVtZW50JiBvd25lciwgY29uc3QgQXRvbVN0cmlu
ZyYgaQogICAgIGF1dG8gbWFwID0gY291bnRlck1hcHMoKS5maW5kKCZvd25lcik7CiAgICAgaWYg
KG1hcCA9PSBjb3VudGVyTWFwcygpLmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgYXV0byBu
b2RlID0gbWFwLT52YWx1ZS0+dGFrZShpZGVudGlmaWVyKTsKKyAgICBhdXRvIG5vZGUgPSBtYXAt
PnZhbHVlLnRha2UoaWRlbnRpZmllcik7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm47
CiAgICAgZGVzdHJveUNvdW50ZXJOb2RlV2l0aG91dE1hcFJlbW92YWwoaWRlbnRpZmllciwgKm5v
ZGUpOwpAQCAtNTA5LDI0ICs1MDQsMjIgQEAgdm9pZCBSZW5kZXJDb3VudGVyOjpyZW5kZXJlclJl
bW92ZWRGcm9tVHJlZShSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKIAogc3RhdGljIHZvaWQgdXBk
YXRlQ291bnRlcnMoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCiB7Ci0gICAgYXV0byogZGlyZWN0
aXZlTWFwID0gcmVuZGVyZXIuc3R5bGUoKS5jb3VudGVyRGlyZWN0aXZlcygpOwotICAgIGlmICgh
ZGlyZWN0aXZlTWFwKQotICAgICAgICByZXR1cm47CisgICAgYXV0byYgZGlyZWN0aXZlTWFwID0g
cmVuZGVyZXIuc3R5bGUoKS5jb3VudGVyRGlyZWN0aXZlcygpOwogICAgIGlmICghcmVuZGVyZXIu
aGFzQ291bnRlck5vZGVNYXAoKSkgewotICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGRpcmVjdGl2
ZU1hcC0+a2V5cygpKQorICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGRpcmVjdGl2ZU1hcC5rZXlz
KCkpCiAgICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIGtleSwgZmFsc2UpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEFTU0VSVChjb3VudGVyTWFwcygpLmNvbnRhaW5z
KCZyZW5kZXJlcikpOwotICAgIGF1dG8qIGNvdW50ZXJNYXAgPSBjb3VudGVyTWFwcygpLmZpbmQo
JnJlbmRlcmVyKS0+dmFsdWUuZ2V0KCk7Ci0gICAgZm9yIChhdXRvJiBrZXkgOiBkaXJlY3RpdmVN
YXAtPmtleXMoKSkgewotICAgICAgICBSZWZQdHI8Q291bnRlck5vZGU+IG5vZGUgPSBjb3VudGVy
TWFwLT5nZXQoa2V5KTsKKyAgICBhdXRvJiBjb3VudGVyTWFwID0gY291bnRlck1hcHMoKS5maW5k
KCZyZW5kZXJlciktPnZhbHVlOworICAgIGZvciAoYXV0byYga2V5IDogZGlyZWN0aXZlTWFwLmtl
eXMoKSkgeworICAgICAgICBSZWZQdHI8Q291bnRlck5vZGU+IG5vZGUgPSBjb3VudGVyTWFwLmdl
dChrZXkpOwogICAgICAgICBpZiAoIW5vZGUpIHsKICAgICAgICAgICAgIG1ha2VDb3VudGVyTm9k
ZShyZW5kZXJlciwga2V5LCBmYWxzZSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQogICAgICAgICBhdXRvIHBsYWNlID0gZmluZFBsYWNlRm9yQ291bnRlcihyZW5kZXJlciwga2V5
LCBub2RlLT5oYXNSZXNldFR5cGUoKSk7Ci0gICAgICAgIGlmIChub2RlICE9IGNvdW50ZXJNYXAt
PmdldChrZXkpKQorICAgICAgICBpZiAobm9kZSAhPSBjb3VudGVyTWFwLmdldChrZXkpKQogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIENvdW50ZXJOb2RlKiBwYXJlbnQgPSBub2RlLT5w
YXJlbnQoKTsKICAgICAgICAgaWYgKHBsYWNlLnBhcmVudCA9PSBwYXJlbnQgJiYgcGxhY2UucHJl
dmlvdXNTaWJsaW5nID09IG5vZGUtPnByZXZpb3VzU2libGluZygpKQpAQCAtNTYxLDM5ICs1NTQs
MjUgQEAgdm9pZCBSZW5kZXJDb3VudGVyOjpyZW5kZXJlclN0eWxlQ2hhbmdlZFNsb3dDYXNlKFJl
bmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdAogICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVu
dC0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOyAvLyBjYW5ub3QgaGF2ZSBnZW5lcmF0ZWQg
Y29udGVudCBvciBpZiBpdCBjYW4gaGF2ZSwgaXQgd2lsbCBiZSBoYW5kbGVkIGR1cmluZyBhdHRh
Y2hpbmcKIAotICAgIGNvbnN0IENvdW50ZXJEaXJlY3RpdmVNYXAqIG9sZENvdW50ZXJEaXJlY3Rp
dmVzOwotICAgIGlmIChvbGRTdHlsZSAmJiAob2xkQ291bnRlckRpcmVjdGl2ZXMgPSBvbGRTdHls
ZS0+Y291bnRlckRpcmVjdGl2ZXMoKSkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ld0NvdW50ZXJE
aXJlY3RpdmVzID0gbmV3U3R5bGUuY291bnRlckRpcmVjdGl2ZXMoKSkgewotICAgICAgICAgICAg
Zm9yIChhdXRvJiBrZXlWYWx1ZSA6ICpuZXdDb3VudGVyRGlyZWN0aXZlcykgewotICAgICAgICAg
ICAgICAgIGF1dG8gZXhpc3RpbmdFbnRyeSA9IG9sZENvdW50ZXJEaXJlY3RpdmVzLT5maW5kKGtl
eVZhbHVlLmtleSk7Ci0gICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nRW50cnkgIT0gb2xkQ291
bnRlckRpcmVjdGl2ZXMtPmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChleGlzdGlu
Z0VudHJ5LT52YWx1ZSA9PSBrZXlWYWx1ZS52YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291
bnRlck5vZGUocmVuZGVyZXIsIGtleVZhbHVlLmtleSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIC8vIFdlIG11c3QgY3JlYXRlIHRoaXMgbm9kZSBoZXJlLCBiZWNhdXNlIHRo
ZSBjaGFuZ2VkIG5vZGUgbWF5IGJlIGEgbm9kZSB3aXRoIG5vIGRpc3BsYXkgc3VjaCBhcwotICAg
ICAgICAgICAgICAgIC8vIGFzIHRob3NlIGNyZWF0ZWQgYnkgdGhlIGluY3JlbWVudCBvciByZXNl
dCBkaXJlY3RpdmVzIGFuZCB0aGUgcmUtbGF5b3V0IHRoYXQgd2lsbCBoYXBwZW4gd2lsbAotICAg
ICAgICAgICAgICAgIC8vIG5vdCBjYXRjaCB0aGUgY2hhbmdlIGlmIHRoZSBub2RlIGhhZCBubyBj
aGlsZHJlbi4KLSAgICAgICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIGtleVZh
bHVlLmtleSwgZmFsc2UpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gRGVzdHJveWlu
ZyBvbGQgY291bnRlcnMgdGhhdCBkbyBub3QgZXhpc3QgaW4gdGhlIG5ldyBjb3VudGVyRGlyZWN0
aXZlIG1hcC4KLSAgICAgICAgICAgIGZvciAoYXV0byYga2V5IDogb2xkQ291bnRlckRpcmVjdGl2
ZXMtPmtleXMoKSkgewotICAgICAgICAgICAgICAgIGlmICghbmV3Q291bnRlckRpcmVjdGl2ZXMt
PmNvbnRhaW5zKGtleSkpCi0gICAgICAgICAgICAgICAgICAgIFJlbmRlckNvdW50ZXI6OmRlc3Ry
b3lDb3VudGVyTm9kZShyZW5kZXJlciwga2V5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGlmIChyZW5kZXJlci5oYXNDb3VudGVyTm9kZU1hcCgpKQotICAg
ICAgICAgICAgICAgIFJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVyTm9kZXMocmVuZGVyZXIp
OwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ld0NvdW50ZXJE
aXJlY3RpdmVzID0gbmV3U3R5bGUuY291bnRlckRpcmVjdGl2ZXMoKSkgewotICAgICAgICAgICAg
Zm9yIChhdXRvJiBrZXkgOiBuZXdDb3VudGVyRGlyZWN0aXZlcy0+a2V5cygpKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gV2UgbXVzdCBjcmVhdGUgdGhpcyBub2RlIGhlcmUsIGJlY2F1c2UgdGhlIGFk
ZGVkIG5vZGUgbWF5IGJlIGEgbm9kZSB3aXRoIG5vIGRpc3BsYXkgc3VjaCBhcwotICAgICAgICAg
ICAgICAgIC8vIGFzIHRob3NlIGNyZWF0ZWQgYnkgdGhlIGluY3JlbWVudCBvciByZXNldCBkaXJl
Y3RpdmVzIGFuZCB0aGUgcmUtbGF5b3V0IHRoYXQgd2lsbCBoYXBwZW4gd2lsbAotICAgICAgICAg
ICAgICAgIC8vIG5vdCBjYXRjaCB0aGUgY2hhbmdlIGlmIHRoZSBub2RlIGhhZCBubyBjaGlsZHJl
bi4KLSAgICAgICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIGtleSwgZmFsc2Up
OwotICAgICAgICAgICAgfQorICAgIENvdW50ZXJEaXJlY3RpdmVNYXAgZW1wdHlNYXA7CisgICAg
YXV0byYgb2xkQ291bnRlckRpcmVjdGl2ZXMgPSBvbGRTdHlsZSA/IG9sZFN0eWxlLT5jb3VudGVy
RGlyZWN0aXZlcygpIDogZW1wdHlNYXA7CisgICAgYXV0byYgbmV3Q291bnRlckRpcmVjdGl2ZXMg
PSBuZXdTdHlsZS5jb3VudGVyRGlyZWN0aXZlcygpOworICAgIGZvciAoYXV0byYga2V5VmFsdWUg
OiBuZXdDb3VudGVyRGlyZWN0aXZlcykgeworICAgICAgICBhdXRvIGV4aXN0aW5nRW50cnkgPSBv
bGRDb3VudGVyRGlyZWN0aXZlcy5maW5kKGtleVZhbHVlLmtleSk7CisgICAgICAgIGlmIChleGlz
dGluZ0VudHJ5ICE9IG9sZENvdW50ZXJEaXJlY3RpdmVzLmVuZCgpKSB7CisgICAgICAgICAgICBp
ZiAoZXhpc3RpbmdFbnRyeS0+dmFsdWUgPT0ga2V5VmFsdWUudmFsdWUpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRlck5v
ZGUocmVuZGVyZXIsIGtleVZhbHVlLmtleSk7CiAgICAgICAgIH0KKyAgICAgICAgLy8gV2UgbXVz
dCBjcmVhdGUgdGhpcyBub2RlIGhlcmUsIGJlY2F1c2UgdGhlIGNoYW5nZWQgbm9kZSBtYXkgYmUg
YSBub2RlIHdpdGggbm8gZGlzcGxheSBzdWNoIGFzCisgICAgICAgIC8vIGFzIHRob3NlIGNyZWF0
ZWQgYnkgdGhlIGluY3JlbWVudCBvciByZXNldCBkaXJlY3RpdmVzIGFuZCB0aGUgcmUtbGF5b3V0
IHRoYXQgd2lsbCBoYXBwZW4gd2lsbAorICAgICAgICAvLyBub3QgY2F0Y2ggdGhlIGNoYW5nZSBp
ZiB0aGUgbm9kZSBoYWQgbm8gY2hpbGRyZW4uCisgICAgICAgIG1ha2VDb3VudGVyTm9kZShyZW5k
ZXJlciwga2V5VmFsdWUua2V5LCBmYWxzZSk7CisgICAgfQorICAgIC8vIERlc3Ryb3kgb2xkIGNv
dW50ZXJzIHRoYXQgZG8gbm90IGV4aXN0IGluIHRoZSBuZXcgbWFwLgorICAgIGZvciAoYXV0byYg
a2V5IDogb2xkQ291bnRlckRpcmVjdGl2ZXMua2V5cygpKSB7CisgICAgICAgIGlmICghbmV3Q291
bnRlckRpcmVjdGl2ZXMuY29udGFpbnMoa2V5KSkKKyAgICAgICAgICAgIFJlbmRlckNvdW50ZXI6
OmRlc3Ryb3lDb3VudGVyTm9kZShyZW5kZXJlciwga2V5KTsKICAgICB9CiB9CiAKQEAgLTYxOSw3
ICs1OTgsNyBAQCB2b2lkIHNob3dDb3VudGVyUmVuZGVyZXJUcmVlKGNvbnN0IFdlYkNvcmU6OlJl
bmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IGNoYXIqCiAgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiJXAgTjolcCBQOiVwIFBTOiVwIE5TOiVwIEM6JXBcbiIsCiAgICAgICAgICAgICBjdXJyZW50
LCBjdXJyZW50LT5ub2RlKCksIGN1cnJlbnQtPnBhcmVudCgpLCBjdXJyZW50LT5wcmV2aW91c1Np
YmxpbmcoKSwKICAgICAgICAgICAgIGN1cnJlbnQtPm5leHRTaWJsaW5nKCksIGRvd25jYXN0PFdl
YkNvcmU6OlJlbmRlckVsZW1lbnQ+KCpjdXJyZW50KS5oYXNDb3VudGVyTm9kZU1hcCgpID8KLSAg
ICAgICAgICAgIGNvdW50ZXJOYW1lID8gV2ViQ29yZTo6Y291bnRlck1hcHMoKS5maW5kKGRvd25j
YXN0PFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ+KGN1cnJlbnQpKS0+dmFsdWUtPmdldChpZGVudGlm
aWVyKSA6IChXZWJDb3JlOjpDb3VudGVyTm9kZSopMSA6IChXZWJDb3JlOjpDb3VudGVyTm9kZSop
MCk7CisgICAgICAgICAgICBjb3VudGVyTmFtZSA/IFdlYkNvcmU6OmNvdW50ZXJNYXBzKCkuZmlu
ZChkb3duY2FzdDxXZWJDb3JlOjpSZW5kZXJFbGVtZW50PihjdXJyZW50KSktPnZhbHVlLmdldChp
ZGVudGlmaWVyKSA6IChXZWJDb3JlOjpDb3VudGVyTm9kZSopMSA6IChXZWJDb3JlOjpDb3VudGVy
Tm9kZSopMCk7CiAgICAgfQogICAgIGZmbHVzaChzdGRlcnIpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJDb3VudGVyLmgKaW5kZXggYjUzNTY2M2FmYzgxNDQ4OWEyODExNTI2MTNh
OTY0YjEzMjM4NDE1ZC4uMjhmMGQ3ODZmZTM3ZDUyYTg1NDhhZTQxYmZmMzRhNzFmZjIyMTIxNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5oCkBAIC02MSw3ICs2MSw3
IEBAIHByaXZhdGU6CiAKIGlubGluZSB2b2lkIFJlbmRlckNvdW50ZXI6OnJlbmRlcmVyU3R5bGVD
aGFuZ2VkKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5
bGUsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSkKIHsKLSAgICBpZiAoKCFvbGRTdHlsZSB8
fCAhb2xkU3R5bGUtPmNvdW50ZXJEaXJlY3RpdmVzKCkpICYmICFuZXdTdHlsZS5jb3VudGVyRGly
ZWN0aXZlcygpKQorICAgIGlmICgoIW9sZFN0eWxlIHx8IG9sZFN0eWxlLT5jb3VudGVyRGlyZWN0
aXZlcygpLmlzRW1wdHkoKSkgJiYgbmV3U3R5bGUuY291bnRlckRpcmVjdGl2ZXMoKS5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHJlbmRlcmVyU3R5bGVDaGFuZ2VkU2xvd0Nhc2Uo
cmVuZGVyZXIsIG9sZFN0eWxlLCBuZXdTdHlsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRlZEZsb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZyYWdtZW50ZWRGbG93LmNwcAppbmRleCA0MmRjMTkyMDUzYmZlN2Y5ZmQz
NzMwYTUxNDgyNjkyMmJmZTVmN2QwLi43ODUxM2UxNzA4OTNlYzY2ZmVlNjM2YzQ0NjVkNzU1NTlh
MWVkMjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21l
bnRlZEZsb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFnbWVu
dGVkRmxvdy5jcHAKQEAgLTk1LDggKzk1LDcgQEAgdm9pZCBSZW5kZXJGcmFnbWVudGVkRmxvdzo6
aW52YWxpZGF0ZUZyYWdtZW50cyhNYXJraW5nQmVoYXZpb3IgbWFya2luZ1BhcmVudHMpCiAgICAg
bV9mcmFnbWVudFJhbmdlTWFwLmNsZWFyKCk7CiAgICAgbV9icmVha0JlZm9yZVRvRnJhZ21lbnRN
YXAuY2xlYXIoKTsKICAgICBtX2JyZWFrQWZ0ZXJUb0ZyYWdtZW50TWFwLmNsZWFyKCk7Ci0gICAg
aWYgKG1fbGluZVRvRnJhZ21lbnRNYXApCi0gICAgICAgIG1fbGluZVRvRnJhZ21lbnRNYXAtPmNs
ZWFyKCk7CisgICAgbV9saW5lVG9GcmFnbWVudE1hcC5jbGVhcigpOwogICAgIHNldE5lZWRzTGF5
b3V0KG1hcmtpbmdQYXJlbnRzKTsKIAogICAgIG1fZnJhZ21lbnRzSW52YWxpZGF0ZWQgPSB0cnVl
OwpAQCAtNDUwLDExICs0NDksOCBAQCB2b2lkIFJlbmRlckZyYWdtZW50ZWRGbG93OjpyZW1vdmVS
ZW5kZXJCb3hGcmFnbWVudEluZm8oUmVuZGVyQm94JiBib3gpCiAKIHZvaWQgUmVuZGVyRnJhZ21l
bnRlZEZsb3c6OnJlbW92ZUxpbmVGcmFnbWVudEluZm8oY29uc3QgUmVuZGVyQmxvY2tGbG93JiBi
bG9ja0Zsb3cpCiB7Ci0gICAgaWYgKCFtX2xpbmVUb0ZyYWdtZW50TWFwKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBmb3IgKGF1dG8qIGN1cnIgPSBibG9ja0Zsb3cuZmlyc3RSb290Qm94KCk7IGN1
cnI7IGN1cnIgPSBjdXJyLT5uZXh0Um9vdEJveCgpKQotICAgICAgICBtX2xpbmVUb0ZyYWdtZW50
TWFwLT5yZW1vdmUoY3Vycik7CisgICAgZm9yIChhdXRvKiBib3ggPSBibG9ja0Zsb3cuZmlyc3RS
b290Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0Um9vdEJveCgpKQorICAgICAgICBtX2xpbmVU
b0ZyYWdtZW50TWFwLnJlbW92ZShib3gpOwogCiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT04oY2hlY2tMaW5lc0NvbnNpc3RlbmN5KGJsb2NrRmxvdykpOwogfQpAQCAtNzYwLDEw
ICs3NTYsNyBAQCBib29sIFJlbmRlckZyYWdtZW50ZWRGbG93OjpvYmplY3RJbkZsb3dGcmFnbWVu
dChjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgY29ucwogI2lmICFBU1NFUlRfV0lUSF9TRUNV
UklUWV9JTVBMSUNBVElPTl9ESVNBQkxFRAogYm9vbCBSZW5kZXJGcmFnbWVudGVkRmxvdzo6Y2hl
Y2tMaW5lc0NvbnNpc3RlbmN5KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgcmVtb3ZlZEJsb2NrKSBj
b25zdAogewotICAgIGlmICghbV9saW5lVG9GcmFnbWVudE1hcCkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICBmb3IgKGF1dG8mIGxpbmVQYWlyIDogKm1fbGluZVRvRnJhZ21lbnRNYXAuZ2V0
KCkpIHsKKyAgICBmb3IgKGF1dG8mIGxpbmVQYWlyIDogbV9saW5lVG9GcmFnbWVudE1hcCkgewog
ICAgICAgICBjb25zdCBSb290SW5saW5lQm94KiBsaW5lID0gbGluZVBhaXIua2V5OwogICAgICAg
ICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQgPSBsaW5lUGFpci52YWx1ZTsKICAg
ICAgICAgaWYgKCZsaW5lLT5ibG9ja0Zsb3coKSA9PSAmcmVtb3ZlZEJsb2NrKQpAQCAtNzgwLDgg
Kzc3Myw3IEBAIGJvb2wgUmVuZGVyRnJhZ21lbnRlZEZsb3c6OmNoZWNrTGluZXNDb25zaXN0ZW5j
eShjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIHJlbW92ZWRCCiAKIHZvaWQgUmVuZGVyRnJhZ21lbnRl
ZEZsb3c6OmNsZWFyTGluZXNUb0ZyYWdtZW50TWFwKCkKIHsKLSAgICBpZiAobV9saW5lVG9GcmFn
bWVudE1hcCkKLSAgICAgICAgbV9saW5lVG9GcmFnbWVudE1hcC0+Y2xlYXIoKTsKKyAgICBtX2xp
bmVUb0ZyYWdtZW50TWFwLmNsZWFyKCk7CiB9CiAKIHZvaWQgUmVuZGVyRnJhZ21lbnRlZEZsb3c6
OmRlbGV0ZUxpbmVzKCkKQEAgLTExMzEsMTMgKzExMjMsNCBAQCBSZW5kZXJGcmFnbWVudENvbnRh
aW5lciogUmVuZGVyRnJhZ21lbnRlZEZsb3c6OmN1cnJlbnRGcmFnbWVudCgpIGNvbnN0CiAgICAg
cmV0dXJuIG1fY3VycmVudEZyYWdtZW50TWFpbnRhaW5lciA/ICZtX2N1cnJlbnRGcmFnbWVudE1h
aW50YWluZXItPmZyYWdtZW50KCkgOiBudWxscHRyOwogfQogCi1Db250YWluaW5nRnJhZ21lbnRN
YXAmIFJlbmRlckZyYWdtZW50ZWRGbG93Ojpjb250YWluaW5nRnJhZ21lbnRNYXAoKQotewotICAg
IGlmICghbV9saW5lVG9GcmFnbWVudE1hcCkKLSAgICAgICAgbV9saW5lVG9GcmFnbWVudE1hcCA9
IG1ha2VVbmlxdWU8Q29udGFpbmluZ0ZyYWdtZW50TWFwPigpOwotCi0gICAgcmV0dXJuICptX2xp
bmVUb0ZyYWdtZW50TWFwLmdldCgpOwotfQotCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFnbWVudGVkRmxvdy5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50ZWRGbG93LmgKaW5kZXgg
YjczYmUyYjFiMGU0ODI3ZWRhZTYwMjdhYTZlMzVmY2IxNzFkNjM2MS4uMDNiYjE3YjdkMGE0MWU0
OWU0MGJiYjJjMjdlMjkzYjQyZmY5NzdjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZyYWdtZW50ZWRGbG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZyYWdtZW50ZWRGbG93LmgKQEAgLTE2OSw3ICsxNjksNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRDdXJyZW50RnJhZ21lbnRNYWludGFpbmVyKEN1cnJlbnRSZW5kZXJGcmFnbWVu
dENvbnRhaW5lck1haW50YWluZXIqIGN1cnJlbnRGcmFnbWVudE1haW50YWluZXIpIHsgbV9jdXJy
ZW50RnJhZ21lbnRNYWludGFpbmVyID0gY3VycmVudEZyYWdtZW50TWFpbnRhaW5lcjsgfQogICAg
IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBjdXJyZW50RnJhZ21lbnQoKSBjb25zdDsKIAotICAg
IENvbnRhaW5pbmdGcmFnbWVudE1hcCYgY29udGFpbmluZ0ZyYWdtZW50TWFwKCk7CisgICAgQ29u
dGFpbmluZ0ZyYWdtZW50TWFwJiBjb250YWluaW5nRnJhZ21lbnRNYXAoKSB7IHJldHVybiBtX2xp
bmVUb0ZyYWdtZW50TWFwOyB9CiAKICAgICBib29sIGNhY2hlZEVuY2xvc2luZ0ZyYWdtZW50ZWRG
bG93TmVlZHNVcGRhdGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogCkBAIC0y
MzYsNyArMjM2LDcgQEAgcHJvdGVjdGVkOgogICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyTGlz
dCBtX2ZyYWdtZW50TGlzdDsKIAogICAgIC8vIE1hcCBhIGxpbmUgdG8gaXRzIGNvbnRhaW5pbmcg
ZnJhZ21lbnQuCi0gICAgc3RkOjp1bmlxdWVfcHRyPENvbnRhaW5pbmdGcmFnbWVudE1hcD4gbV9s
aW5lVG9GcmFnbWVudE1hcDsKKyAgICBDb250YWluaW5nRnJhZ21lbnRNYXAgbV9saW5lVG9GcmFn
bWVudE1hcDsKIAogICAgIC8vIE1hcCBhIGJveCB0byB0aGUgbGlzdCBvZiBmcmFnbWVudHMgaW4g
d2hpY2ggdGhlIGJveCBpcyByZW5kZXJlZC4KICAgICB1c2luZyBSZW5kZXJGcmFnbWVudENvbnRh
aW5lclJhbmdlTWFwID0gSGFzaE1hcDxjb25zdCBSZW5kZXJCb3gqLCBSZW5kZXJGcmFnbWVudENv
bnRhaW5lclJhbmdlPjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJHcmlkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcAppbmRl
eCA2NmJlZWRkMjExZGIwMzZjNGIwMzkzYWQyZTY2NTY1YzcwZmY0YWU4Li43MzcxNmQyOWQxY2Qw
YWFlMmI0NWQ4ZGZiMDU3Njc0N2FkYzUxMDM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckdyaWQuY3BwCkBAIC0zNzIsNyArMzcyLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJHcmlkOjpn
dXR0ZXJzU2l6ZShjb25zdCBHcmlkJiBncmlkLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGkK
ICAgICBzaXplX3Qgbm9uRW1wdHlUcmFja3NCZWZvcmVTdGFydExpbmUgPSAwOwogICAgIGlmIChz
dGFydExpbmUgJiYgZ3JpZC5pc0VtcHR5QXV0b1JlcGVhdFRyYWNrKGRpcmVjdGlvbiwgc3RhcnRM
aW5lKSkgewogICAgICAgICBub25FbXB0eVRyYWNrc0JlZm9yZVN0YXJ0TGluZSA9IHN0YXJ0TGlu
ZTsKLSAgICAgICAgYXV0byBiZWdpbiA9IGdyaWQuYXV0b1JlcGVhdEVtcHR5VHJhY2tzKGRpcmVj
dGlvbiktPmJlZ2luKCk7CisgICAgICAgIGF1dG8gYmVnaW4gPSBncmlkLmF1dG9SZXBlYXRFbXB0
eVRyYWNrcyhkaXJlY3Rpb24pLmJlZ2luKCk7CiAgICAgICAgIGZvciAoYXV0byBpdCA9IGJlZ2lu
OyAqaXQgIT0gc3RhcnRMaW5lOyArK2l0KSB7CiAgICAgICAgICAgICBBU1NFUlQobm9uRW1wdHlU
cmFja3NCZWZvcmVTdGFydExpbmUpOwogICAgICAgICAgICAgLS1ub25FbXB0eVRyYWNrc0JlZm9y
ZVN0YXJ0TGluZTsKQEAgLTM4NSw4ICszODUsOCBAQCBMYXlvdXRVbml0IFJlbmRlckdyaWQ6Omd1
dHRlcnNTaXplKGNvbnN0IEdyaWQmIGdyaWQsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaQog
ICAgIC8vIGNvbGxhcHNlZCB0cmFjay4gSWYgd2UgZmluZCBhIG5vbiBjb2xsYXBzZWQgdHJhY2sg
d2UgbmVlZCB0byBhZGQgdGhhdCBnYXAuCiAgICAgaWYgKGdyaWQuaXNFbXB0eUF1dG9SZXBlYXRU
cmFjayhkaXJlY3Rpb24sIGVuZExpbmUgLSAxKSkgewogICAgICAgICB1bnNpZ25lZCBub25FbXB0
eVRyYWNrc0FmdGVyRW5kTGluZSA9IGdyaWQubnVtVHJhY2tzKGRpcmVjdGlvbikgLSBlbmRMaW5l
OwotICAgICAgICBhdXRvIGN1cnJlbnRFbXB0eVRyYWNrID0gZ3JpZC5hdXRvUmVwZWF0RW1wdHlU
cmFja3MoZGlyZWN0aW9uKS0+ZmluZChlbmRMaW5lIC0gMSk7Ci0gICAgICAgIGF1dG8gZW5kRW1w
dHlUcmFjayA9IGdyaWQuYXV0b1JlcGVhdEVtcHR5VHJhY2tzKGRpcmVjdGlvbiktPmVuZCgpOwor
ICAgICAgICBhdXRvIGN1cnJlbnRFbXB0eVRyYWNrID0gZ3JpZC5hdXRvUmVwZWF0RW1wdHlUcmFj
a3MoZGlyZWN0aW9uKS5maW5kKGVuZExpbmUgLSAxKTsKKyAgICAgICAgYXV0byBlbmRFbXB0eVRy
YWNrID0gZ3JpZC5hdXRvUmVwZWF0RW1wdHlUcmFja3MoZGlyZWN0aW9uKS5lbmQoKTsKICAgICAg
ICAgLy8gSGFzaFNldCBpdGVyYXRvcnMgZG8gbm90IGltcGxlbWVudCBvcGVyYXRvci0gc28gd2Ug
aGF2ZSB0byBtYW51YWxseSBpdGVyYXRlIHRvIGtub3cgdGhlIG51bWJlciBvZiByZW1haW5pbmcg
ZW1wdHkgdHJhY2tzLgogICAgICAgICBmb3IgKGF1dG8gaXQgPSArK2N1cnJlbnRFbXB0eVRyYWNr
OyBpdCAhPSBlbmRFbXB0eVRyYWNrOyArK2l0KSB7CiAgICAgICAgICAgICBBU1NFUlQobm9uRW1w
dHlUcmFja3NBZnRlckVuZExpbmUgPj0gMSk7CkBAIC01NDIsMzAgKzU0MiwyNiBAQCB1bnNpZ25l
ZCBSZW5kZXJHcmlkOjpjb21wdXRlQXV0b1JlcGVhdFRyYWNrc0NvdW50KEdyaWRUcmFja1Npemlu
Z0RpcmVjdGlvbiBkaXJlYwogfQogCiAKLXN0ZDo6dW5pcXVlX3B0cjxPcmRlcmVkVHJhY2tJbmRl
eFNldD4gUmVuZGVyR3JpZDo6Y29tcHV0ZUVtcHR5VHJhY2tzRm9yQXV0b1JlcGVhdChHcmlkJiBn
cmlkLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKSBjb25zdAorT3JkZXJlZFRy
YWNrSW5kZXhTZXQgUmVuZGVyR3JpZDo6Y29tcHV0ZUVtcHR5VHJhY2tzRm9yQXV0b1JlcGVhdChH
cmlkJiBncmlkLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKSBjb25zdAogewog
ICAgIGJvb2wgaXNSb3dBeGlzID0gZGlyZWN0aW9uID09IEZvckNvbHVtbnM7CiAgICAgaWYgKChp
c1Jvd0F4aXMgJiYgc3R5bGUoKS5ncmlkQXV0b1JlcGVhdENvbHVtbnNUeXBlKCkgIT0gQXV0b1Jl
cGVhdFR5cGU6OkZpdCkKICAgICAgICAgfHwgKCFpc1Jvd0F4aXMgJiYgc3R5bGUoKS5ncmlkQXV0
b1JlcGVhdFJvd3NUeXBlKCkgIT0gQXV0b1JlcGVhdFR5cGU6OkZpdCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPE9y
ZGVyZWRUcmFja0luZGV4U2V0PiBlbXB0eVRyYWNrSW5kZXhlczsKKyAgICBPcmRlcmVkVHJhY2tJ
bmRleFNldCBlbXB0eVRyYWNrSW5kZXhlczsKICAgICB1bnNpZ25lZCBpbnNlcnRpb25Qb2ludCA9
IGlzUm93QXhpcyA/IHN0eWxlKCkuZ3JpZEF1dG9SZXBlYXRDb2x1bW5zSW5zZXJ0aW9uUG9pbnQo
KSA6IHN0eWxlKCkuZ3JpZEF1dG9SZXBlYXRSb3dzSW5zZXJ0aW9uUG9pbnQoKTsKICAgICB1bnNp
Z25lZCBmaXJzdEF1dG9SZXBlYXRUcmFjayA9IGluc2VydGlvblBvaW50ICsgZ3JpZC5leHBsaWNp
dEdyaWRTdGFydChkaXJlY3Rpb24pOwogICAgIHVuc2lnbmVkIGxhc3RBdXRvUmVwZWF0VHJhY2sg
PSBmaXJzdEF1dG9SZXBlYXRUcmFjayArIGdyaWQuYXV0b1JlcGVhdFRyYWNrcyhkaXJlY3Rpb24p
OwogCiAgICAgaWYgKCFncmlkLmhhc0dyaWRJdGVtcygpIHx8IHNob3VsZEFwcGx5U2l6ZUNvbnRh
aW5tZW50KCp0aGlzKSkgewotICAgICAgICBlbXB0eVRyYWNrSW5kZXhlcyA9IG1ha2VVbmlxdWU8
T3JkZXJlZFRyYWNrSW5kZXhTZXQ+KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgdHJhY2tJbmRl
eCA9IGZpcnN0QXV0b1JlcGVhdFRyYWNrOyB0cmFja0luZGV4IDwgbGFzdEF1dG9SZXBlYXRUcmFj
azsgKyt0cmFja0luZGV4KQotICAgICAgICAgICAgZW1wdHlUcmFja0luZGV4ZXMtPmFkZCh0cmFj
a0luZGV4KTsKKyAgICAgICAgICAgIGVtcHR5VHJhY2tJbmRleGVzLmFkZCh0cmFja0luZGV4KTsK
ICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKHVuc2lnbmVkIHRyYWNrSW5kZXggPSBmaXJzdEF1
dG9SZXBlYXRUcmFjazsgdHJhY2tJbmRleCA8IGxhc3RBdXRvUmVwZWF0VHJhY2s7ICsrdHJhY2tJ
bmRleCkgewogICAgICAgICAgICAgR3JpZEl0ZXJhdG9yIGl0ZXJhdG9yKGdyaWQsIGRpcmVjdGlv
biwgdHJhY2tJbmRleCk7Ci0gICAgICAgICAgICBpZiAoIWl0ZXJhdG9yLm5leHRHcmlkSXRlbSgp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFlbXB0eVRyYWNrSW5kZXhlcykKLSAgICAgICAgICAg
ICAgICAgICAgZW1wdHlUcmFja0luZGV4ZXMgPSBtYWtlVW5pcXVlPE9yZGVyZWRUcmFja0luZGV4
U2V0PigpOwotICAgICAgICAgICAgICAgIGVtcHR5VHJhY2tJbmRleGVzLT5hZGQodHJhY2tJbmRl
eCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWl0ZXJhdG9yLm5leHRHcmlkSXRl
bSgpKQorICAgICAgICAgICAgICAgIGVtcHR5VHJhY2tJbmRleGVzLmFkZCh0cmFja0luZGV4KTsK
ICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gZW1wdHlUcmFja0luZGV4ZXM7CkBAIC04ODUs
NyArODgxLDcgQEAgVmVjdG9yPExheW91dFVuaXQ+IFJlbmRlckdyaWQ6OnRyYWNrU2l6ZXNGb3JD
b21wdXRlZFN0eWxlKEdyaWRUcmFja1NpemluZ0RpcmVjdGkKICAgICBpZiAoIWhhc0NvbGxhcHNl
ZFRyYWNrcykKICAgICAgICAgcmV0dXJuIHRyYWNrczsKIAotICAgIHNpemVfdCByZW1haW5pbmdF
bXB0eVRyYWNrcyA9IG1fZ3JpZC5hdXRvUmVwZWF0RW1wdHlUcmFja3MoZGlyZWN0aW9uKS0+c2l6
ZSgpOworICAgIHNpemVfdCByZW1haW5pbmdFbXB0eVRyYWNrcyA9IG1fZ3JpZC5hdXRvUmVwZWF0
RW1wdHlUcmFja3MoZGlyZWN0aW9uKS5zaXplKCk7CiAgICAgc2l6ZV90IGxhc3RMaW5lID0gdHJh
Y2tzLnNpemUoKTsKICAgICBnYXAgPSBncmlkR2FwKGRpcmVjdGlvbik7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDE7IGkgPCBsYXN0TGluZTsgKytpKSB7CkBAIC0xMDM5LDcgKzEwMzUsNyBAQCB2b2lk
IFJlbmRlckdyaWQ6OnBvcHVsYXRlR3JpZFBvc2l0aW9uc0ZvckRpcmVjdGlvbihHcmlkVHJhY2tT
aXppbmdEaXJlY3Rpb24gZGlyZQogICAgIHVuc2lnbmVkIG51bWJlck9mTGluZXMgPSBudW1iZXJP
ZlRyYWNrcyArIDE7CiAgICAgdW5zaWduZWQgbGFzdExpbmUgPSBudW1iZXJPZkxpbmVzIC0gMTsK
ICAgICBib29sIGhhc0NvbGxhcHNlZFRyYWNrcyA9IG1fZ3JpZC5oYXNBdXRvUmVwZWF0RW1wdHlU
cmFja3MoZGlyZWN0aW9uKTsKLSAgICBzaXplX3QgbnVtYmVyT2ZDb2xsYXBzZWRUcmFja3MgPSBo
YXNDb2xsYXBzZWRUcmFja3MgPyBtX2dyaWQuYXV0b1JlcGVhdEVtcHR5VHJhY2tzKGRpcmVjdGlv
biktPnNpemUoKSA6IDA7CisgICAgc2l6ZV90IG51bWJlck9mQ29sbGFwc2VkVHJhY2tzID0gaGFz
Q29sbGFwc2VkVHJhY2tzID8gbV9ncmlkLmF1dG9SZXBlYXRFbXB0eVRyYWNrcyhkaXJlY3Rpb24p
LnNpemUoKSA6IDA7CiAgICAgY29uc3QgYXV0byYgb2Zmc2V0ID0gZGlyZWN0aW9uID09IEZvckNv
bHVtbnMgPyBtX29mZnNldEJldHdlZW5Db2x1bW5zIDogbV9vZmZzZXRCZXR3ZWVuUm93czsKICAg
ICBhdXRvJiBwb3NpdGlvbnMgPSBpc1Jvd0F4aXMgPyBtX2NvbHVtblBvc2l0aW9ucyA6IG1fcm93
UG9zaXRpb25zOwogICAgIHBvc2l0aW9ucy5yZXNpemUobnVtYmVyT2ZMaW5lcyk7CkBAIC0xODI1
LDcgKzE4MjEsNyBAQCB1bnNpZ25lZCBSZW5kZXJHcmlkOjpub25Db2xsYXBzZWRUcmFja3MoR3Jp
ZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikgY29ucwogICAgIGF1dG8mIHRyYWNrcyA9
IG1fdHJhY2tTaXppbmdBbGdvcml0aG0udHJhY2tzKGRpcmVjdGlvbik7CiAgICAgc2l6ZV90IG51
bWJlck9mVHJhY2tzID0gdHJhY2tzLnNpemUoKTsKICAgICBib29sIGhhc0NvbGxhcHNlZFRyYWNr
cyA9IG1fZ3JpZC5oYXNBdXRvUmVwZWF0RW1wdHlUcmFja3MoZGlyZWN0aW9uKTsKLSAgICBzaXpl
X3QgbnVtYmVyT2ZDb2xsYXBzZWRUcmFja3MgPSBoYXNDb2xsYXBzZWRUcmFja3MgPyBtX2dyaWQu
YXV0b1JlcGVhdEVtcHR5VHJhY2tzKGRpcmVjdGlvbiktPnNpemUoKSA6IDA7CisgICAgc2l6ZV90
IG51bWJlck9mQ29sbGFwc2VkVHJhY2tzID0gaGFzQ29sbGFwc2VkVHJhY2tzID8gbV9ncmlkLmF1
dG9SZXBlYXRFbXB0eVRyYWNrcyhkaXJlY3Rpb24pLnNpemUoKSA6IDA7CiAgICAgcmV0dXJuIG51
bWJlck9mVHJhY2tzIC0gbnVtYmVyT2ZDb2xsYXBzZWRUcmFja3M7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyR3JpZC5oCmluZGV4IGVmYjEwNjQzM2I0NzM1MGYxYjMxOWM4M2YwNmFm
NGQ0ZjIwZWFjODkuLjVkYWQyMmE4OTBjYTA0YjRkOWViYzM1NzZlMzViYjM4ZGU1ZWFiODIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuaApAQCAtMTA1LDcgKzEwNSw3IEBAIHBy
aXZhdGU6CiAKICAgICB1bnNpZ25lZCBjbGFtcEF1dG9SZXBlYXRUcmFja3MoR3JpZFRyYWNrU2l6
aW5nRGlyZWN0aW9uLCB1bnNpZ25lZCBhdXRvUmVwZWF0VHJhY2tzKSBjb25zdDsKIAotICAgIHN0
ZDo6dW5pcXVlX3B0cjxPcmRlcmVkVHJhY2tJbmRleFNldD4gY29tcHV0ZUVtcHR5VHJhY2tzRm9y
QXV0b1JlcGVhdChHcmlkJiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uKSBjb25zdDsKKyAgICBP
cmRlcmVkVHJhY2tJbmRleFNldCBjb21wdXRlRW1wdHlUcmFja3NGb3JBdXRvUmVwZWF0KEdyaWQm
LCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24pIGNvbnN0OwogCiAgICAgdm9pZCBwZXJmb3JtR3Jp
ZEl0ZW1zUHJlTGF5b3V0KGNvbnN0IEdyaWRUcmFja1NpemluZ0FsZ29yaXRobSYpIGNvbnN0Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3Iu
Y3BwCmluZGV4IDRlNzc4NDU5OTIzMTQyYTg5NmE5OTdlYjdlY2JjOTViYjhiZThkOGUuLmJjZTBl
YTMzYjJmODhiN2M3MDdjZTAwOTJkNDM1YTRhMDRiZGIxYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCkBAIC03OTIsMTEgKzc5
Miw5IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDb21wb3NpdGluZ0xheWVy
cyhDb21wb3NpdGluZ1VwZGF0ZVR5cGUgdXBkYXRlCiAgICAgaWYgKHVwZGF0ZVR5cGUgPT0gQ29t
cG9zaXRpbmdVcGRhdGVUeXBlOjpPblNjcm9sbCB8fCB1cGRhdGVUeXBlID09IENvbXBvc2l0aW5n
VXBkYXRlVHlwZTo6T25Db21wb3NpdGVkU2Nyb2xsKSB7CiAgICAgICAgIC8vIFdlIG9ubHkgZ2V0
IGhlcmUgaWYgd2UgZGlkbid0IHNjcm9sbCBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZCwgc28gdGhp
cyB1cGRhdGUgbmVlZHMgdG8gcmUtcG9zaXRpb24gdmlld3BvcnQtY29uc3RyYWluZWQgbGF5ZXJz
LgogICAgICAgICBpZiAobV9yZW5kZXJWaWV3LnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKCkgJiYgaXNQYWdlU2Nyb2xsKSB7Ci0gICAgICAg
ICAgICBpZiAoYXV0byogdmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMgPSBtX3JlbmRlclZpZXcu
ZnJhbWVWaWV3KCkudmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMoKSkgewotICAgICAgICAgICAg
ICAgIGZvciAoYXV0byYgcmVuZGVyZXIgOiAqdmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGxheWVyID0gcmVuZGVyZXIubGF5ZXIoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLT5zZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0
cnlVcGRhdGUoKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGF1dG8mIHJl
bmRlcmVyIDogbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLnZpZXdwb3J0Q29uc3RyYWluZWRPYmpl
Y3RzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogbGF5ZXIgPSByZW5kZXJlci5sYXll
cigpKQorICAgICAgICAgICAgICAgICAgICBsYXllci0+c2V0TmVlZHNDb21wb3NpdGluZ0dlb21l
dHJ5VXBkYXRlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtNDg4NCwxMiArNDg4
Miw2IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTeW5jaHJvbm91c1Njcm9s
bGluZ05vZGVzKCkKICAgICAgICAgfQogICAgIH07CiAgICAgCi0gICAgYXV0byBzbG93UmVwYWlu
dE9iamVjdHMgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuc2xvd1JlcGFpbnRPYmplY3RzKCk7
Ci0gICAgaWYgKCFzbG93UmVwYWludE9iamVjdHMpIHsKLSAgICAgICAgY2xlYXJTeW5jaHJvbm91
c1JlYXNvbnNPbk5vZGVzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBhdXRvIHJl
bGV2YW50U2Nyb2xsaW5nU2NvcGUgPSBbXShjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBj
b25zdCBSZW5kZXJMYXllciYgbGF5ZXIpIHsKICAgICAgICAgaWYgKCZsYXllci5yZW5kZXJlcigp
ID09ICZyZW5kZXJlcikKICAgICAgICAgICAgIHJldHVybiBsYXllci5ib3hTY3JvbGxpbmdTY29w
ZSgpOwpAQCAtNDg5OCw3ICs0ODkwLDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVw
ZGF0ZVN5bmNocm9ub3VzU2Nyb2xsaW5nTm9kZXMoKQogCiAgICAgYXV0byByb290U2Nyb2xsaW5n
U2NvcGUgPSBtX3JlbmRlclZpZXcubGF5ZXIoKS0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOwog
Ci0gICAgZm9yIChhdXRvJiByZW5kZXJlciA6ICpzbG93UmVwYWludE9iamVjdHMpIHsKKyAgICBm
b3IgKGF1dG8mIHJlbmRlcmVyIDogbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLnNsb3dSZXBhaW50
T2JqZWN0cygpKSB7CiAgICAgICAgIGF1dG8gbGF5ZXIgPSByZW5kZXJlci5lbmNsb3NpbmdMYXll
cigpOwogICAgICAgICBpZiAoIWxheWVyKQogICAgICAgICAgICAgY29udGludWU7CkBAIC00OTE0
LDcgKzQ5MDYsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU3luY2hyb25v
dXNTY3JvbGxpbmdOb2RlcygpCiAgICAgICAgICAgICBub2Rlc1RvQ2xlYXIucmVtb3ZlKGVuY2xv
c2luZ1Njcm9sbGluZ05vZGVJRCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBjbGVh
clN5bmNocm9ub3VzUmVhc29uc09uTm9kZXMoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwCmluZGV4IGRlMmJj
ZTUxZmE5YjhkMTFhMGU0OWU5MWY0ZmE5ZmQxZDUwNTg1ODMuLmQ2NWY5ZmQzYWYxNmExM2M0OTNh
YjVmMGYwMzAzNTExMDg3NDEzOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHAKQEAgLTgyLDEwICs4MiwxMCBAQCBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp+UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSgpCiB2
b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNsZWFyKCkKIHsKICAgICBhdXRvJiByZW5k
ZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKLSAgICBBU1NFUlQobV9yZWdpc3RlcmVkU2Nyb2xs
YWJsZUFyZWEgPT0gcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpLmNvbnRhaW5zU2Nyb2xsYWJs
ZUFyZWEodGhpcykpOworICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSBy
ZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkuY29udGFpbnNTY3JvbGxhYmxlQXJlYSgqdGhpcykp
OwogCiAgICAgaWYgKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKQotICAgICAgICByZW5kZXJl
ci52aWV3KCkuZnJhbWVWaWV3KCkucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisgICAgICAg
IHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5yZW1vdmVTY3JvbGxhYmxlQXJlYSgqdGhpcyk7
CiAKICNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKICAgICB1bnJlZ2lzdGVyQXNUb3VjaEV2
ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKQEAgLTE1OTgsMTUgKzE1OTgsMTUgQEAgdm9pZCBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhh
c092ZXJmbG93KQogICAgIGJvb2wgaXNTY3JvbGxhYmxlID0gaGFzT3ZlcmZsb3cgJiYgaXNWaXNp
YmxlVG9IaXRUZXN0OwogICAgIGJvb2wgYWRkZWRPclJlbW92ZWQgPSBmYWxzZTsKIAotICAgIEFT
U0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSBmcmFtZVZpZXcuY29udGFpbnNTY3Jv
bGxhYmxlQXJlYSh0aGlzKSk7CisgICAgQVNTRVJUKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVh
ID09IGZyYW1lVmlldy5jb250YWluc1Njcm9sbGFibGVBcmVhKCp0aGlzKSk7CiAKICAgICBpZiAo
aXNTY3JvbGxhYmxlKSB7CiAgICAgICAgIGlmICghbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEp
IHsKLSAgICAgICAgICAgIGFkZGVkT3JSZW1vdmVkID0gZnJhbWVWaWV3LmFkZFNjcm9sbGFibGVB
cmVhKHRoaXMpOworICAgICAgICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcuYWRkU2Ny
b2xsYWJsZUFyZWEoKnRoaXMpOwogICAgICAgICAgICAgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFy
ZWEgPSB0cnVlOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChtX3JlZ2lzdGVyZWRTY3JvbGxh
YmxlQXJlYSkgewotICAgICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5yZW1vdmVTY3Jv
bGxhYmxlQXJlYSh0aGlzKTsKKyAgICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcucmVt
b3ZlU2Nyb2xsYWJsZUFyZWEoKnRoaXMpOwogICAgICAgICBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxl
QXJlYSA9IGZhbHNlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpc3RCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
c3RCb3guY3BwCmluZGV4IDlkYWQ1MTcxMDc4ZmM2MjNlZDhjYjFhZjBhYzY0Y2JjYTQzZWM5OTMu
LmI1MjJkZjMyMDQyZjExOWNhZmZiNTE5ZDUzNDAxNjg5NGRkOWRmYWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKQEAgLTk2LDcgKzk2LDcgQEAgUmVuZGVy
TGlzdEJveDo6UmVuZGVyTGlzdEJveChIVE1MU2VsZWN0RWxlbWVudCYgZWxlbWVudCwgUmVuZGVy
U3R5bGUmJiBzdHlsZSkKICAgICAsIG1fb3B0aW9uc1dpZHRoKDApCiAgICAgLCBtX2luZGV4T2Zm
c2V0KDApCiB7Ci0gICAgdmlldygpLmZyYW1lVmlldygpLmFkZFNjcm9sbGFibGVBcmVhKHRoaXMp
OworICAgIHZpZXcoKS5mcmFtZVZpZXcoKS5hZGRTY3JvbGxhYmxlQXJlYSgqdGhpcyk7CiB9CiAK
IFJlbmRlckxpc3RCb3g6On5SZW5kZXJMaXN0Qm94KCkKQEAgLTEwNyw3ICsxMDcsNyBAQCBSZW5k
ZXJMaXN0Qm94Ojp+UmVuZGVyTGlzdEJveCgpCiB2b2lkIFJlbmRlckxpc3RCb3g6OndpbGxCZURl
c3Ryb3llZCgpCiB7CiAgICAgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIoZmFsc2UpOwotICAgIHZp
ZXcoKS5mcmFtZVZpZXcoKS5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKyAgICB2aWV3KCku
ZnJhbWVWaWV3KCkucmVtb3ZlU2Nyb2xsYWJsZUFyZWEoKnRoaXMpOwogICAgIFJlbmRlckJsb2Nr
Rmxvdzo6d2lsbEJlRGVzdHJveWVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxvdy5jcHAKaW5kZXggYmRiZTRhNzE0ZDBjNmM3YTYz
ZGNjYzgzNTcyYmIxZjg3MDhlNmEwZC4uOTA0Y2E0MWRmYzIxZDVmMmI4NGZiODVmZmQxMzIyN2Vi
ODMwZWMwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRp
Q29sdW1uRmxvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRp
Q29sdW1uRmxvdy5jcHAKQEAgLTQyLDE2ICs0Miw2IEBAIFdURl9NQUtFX0lTT19BTExPQ0FURURf
SU1QTChSZW5kZXJNdWx0aUNvbHVtbkZsb3cpOwogCiBSZW5kZXJNdWx0aUNvbHVtbkZsb3c6OlJl
bmRlck11bHRpQ29sdW1uRmxvdyhEb2N1bWVudCYgZG9jdW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5
bGUpCiAgICAgOiBSZW5kZXJGcmFnbWVudGVkRmxvdyhkb2N1bWVudCwgV1RGTW92ZShzdHlsZSkp
Ci0gICAgLCBtX3NwYW5uZXJNYXAobWFrZVVuaXF1ZTxTcGFubmVyTWFwPigpKQotICAgICwgbV9s
YXN0U2V0V29ya2VkT24obnVsbHB0cikKLSAgICAsIG1fY29sdW1uQ291bnQoMSkKLSAgICAsIG1f
Y29sdW1uV2lkdGgoMCkKLSAgICAsIG1fY29sdW1uSGVpZ2h0QXZhaWxhYmxlKDApCi0gICAgLCBt
X2luTGF5b3V0KGZhbHNlKQotICAgICwgbV9pbkJhbGFuY2luZ1Bhc3MoZmFsc2UpCi0gICAgLCBt
X25lZWRzSGVpZ2h0c1JlY2FsY3VsYXRpb24oZmFsc2UpCi0gICAgLCBtX3Byb2dyZXNzaW9uSXNJ
bmxpbmUoZmFsc2UpCi0gICAgLCBtX3Byb2dyZXNzaW9uSXNSZXZlcnNlZChmYWxzZSkKIHsKICAg
ICBzZXRGcmFnbWVudGVkRmxvd1N0YXRlKEluc2lkZUluRnJhZ21lbnRlZEZsb3cpOwogfQpAQCAt
MTExLDcgKzEwMSw3IEBAIFJlbmRlckJveCogUmVuZGVyTXVsdGlDb2x1bW5GbG93OjpwcmV2aW91
c0NvbHVtblNldE9yU3Bhbm5lclNpYmxpbmdPZihjb25zdCBSZW5kCiAKIFJlbmRlck11bHRpQ29s
dW1uU3Bhbm5lclBsYWNlaG9sZGVyKiBSZW5kZXJNdWx0aUNvbHVtbkZsb3c6OmZpbmRDb2x1bW5T
cGFubmVyUGxhY2Vob2xkZXIoUmVuZGVyQm94KiBzcGFubmVyKSBjb25zdAogewotICAgIHJldHVy
biBtX3NwYW5uZXJNYXAtPmdldChzcGFubmVyKS5nZXQoKTsKKyAgICByZXR1cm4gbV9zcGFubmVy
TWFwLmdldChzcGFubmVyKS5nZXQoKTsKIH0KIAogdm9pZCBSZW5kZXJNdWx0aUNvbHVtbkZsb3c6
OmxheW91dCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVs
dGlDb2x1bW5GbG93LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1
bW5GbG93LmgKaW5kZXggZWI2ZjA4ODc5NDU4NWU4MjU1ZGI3YzBjODU4OGQwMmRjMWE1ZWY5Ni4u
ODY3OGFkNjJjYmM5ZmVlOTg3YjNmNTBlYjM4ZTRkNzQwNzJhNGJkNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxvdy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3cuaApAQCAtNDQsNyArNDQs
NyBAQCBwdWJsaWM6CiAgICAgUmVuZGVyTXVsdGlDb2x1bW5TZXQqIGZpcnN0TXVsdGlDb2x1bW5T
ZXQoKSBjb25zdDsKICAgICBSZW5kZXJNdWx0aUNvbHVtblNldCogbGFzdE11bHRpQ29sdW1uU2V0
KCkgY29uc3Q7CiAgICAgUmVuZGVyQm94KiBmaXJzdENvbHVtblNldE9yU3Bhbm5lcigpIGNvbnN0
OwotICAgIGJvb2wgaGFzQ29sdW1uU3Bhbm5lcigpIGNvbnN0IHsgcmV0dXJuICFtX3NwYW5uZXJN
YXAtPmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaGFzQ29sdW1uU3Bhbm5lcigpIGNvbnN0IHsgcmV0
dXJuICFtX3NwYW5uZXJNYXAuaXNFbXB0eSgpOyB9CiAgICAgc3RhdGljIFJlbmRlckJveCogbmV4
dENvbHVtblNldE9yU3Bhbm5lclNpYmxpbmdPZihjb25zdCBSZW5kZXJCb3gqKTsKICAgICBzdGF0
aWMgUmVuZGVyQm94KiBwcmV2aW91c0NvbHVtblNldE9yU3Bhbm5lclNpYmxpbmdPZihjb25zdCBS
ZW5kZXJCb3gqKTsKIApAQCAtOTYsNyArOTYsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzaG91bGRD
aGVja0NvbHVtbkJyZWFrcygpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdHlwZWRlZiBIYXNoTWFw
PFJlbmRlckJveCosIFdlYWtQdHI8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXI+
PiBTcGFubmVyTWFwOwotICAgIFNwYW5uZXJNYXAmIHNwYW5uZXJNYXAoKSB7IHJldHVybiAqbV9z
cGFubmVyTWFwOyB9CisgICAgU3Bhbm5lck1hcCYgc3Bhbm5lck1hcCgpIHsgcmV0dXJuIG1fc3Bh
bm5lck1hcDsgfQogCiBwcml2YXRlOgogICAgIGJvb2wgaXNSZW5kZXJNdWx0aUNvbHVtbkZsb3co
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CkBAIC0xMTUsMjMgKzExNSwyMyBAQCBw
cml2YXRlOgogICAgIGJvb2wgaXNQYWdlTG9naWNhbEhlaWdodEtub3duKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAKIHByaXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFNwYW5uZXJNYXA+IG1fc3Bhbm5l
ck1hcDsKKyAgICBTcGFubmVyTWFwIG1fc3Bhbm5lck1hcDsKIAogICAgIC8vIFRoZSBsYXN0IHNl
dCB3ZSB3b3JrZWQgb24uIEl0J3Mgbm90IHRvIGJlIHVzZWQgYXMgdGhlICJjdXJyZW50IHNldCIu
IFRoZSBjb25jZXB0IG9mIGEKICAgICAvLyAiY3VycmVudCBzZXQiIGlzIGRpZmZpY3VsdCwgc2lu
Y2UgbGF5b3V0IG1heSBqdW1wIGJhY2sgYW5kIGZvcnRoIGluIHRoZSB0cmVlLCBkdWUgdG8gd3Jv
bmcKICAgICAvLyB0b3AgbG9jYXRpb24gZXN0aW1hdGVzIChkdWUgdG8gZS5nLiBtYXJnaW4gY29s
bGFwc2luZyksIGFuZCBwb3NzaWJseSBmb3Igb3RoZXIgcmVhc29ucy4KLSAgICBSZW5kZXJNdWx0
aUNvbHVtblNldCogbV9sYXN0U2V0V29ya2VkT247CisgICAgUmVuZGVyTXVsdGlDb2x1bW5TZXQq
IG1fbGFzdFNldFdvcmtlZE9uIHsgbnVsbHB0ciB9OwogCi0gICAgdW5zaWduZWQgbV9jb2x1bW5D
b3VudDsgLy8gVGhlIGRlZmF1bHQgY29sdW1uIGNvdW50L3dpZHRoIHRoYXQgYXJlIGJhc2VkIG9m
ZiBvdXIgY29udGFpbmluZyBibG9jayB3aWR0aC4gVGhlc2UgdmFsdWVzIHJlcHJlc2VudCBvbmx5
IHRoZSBkZWZhdWx0LAorICAgIHVuc2lnbmVkIG1fY29sdW1uQ291bnQgeyAxIH07IC8vIFRoZSBk
ZWZhdWx0IGNvbHVtbiBjb3VudC93aWR0aCB0aGF0IGFyZSBiYXNlZCBvZmYgb3VyIGNvbnRhaW5p
bmcgYmxvY2sgd2lkdGguIFRoZXNlIHZhbHVlcyByZXByZXNlbnQgb25seSB0aGUgZGVmYXVsdCwK
ICAgICBMYXlvdXRVbml0IG1fY29sdW1uV2lkdGg7IC8vIEEgbXVsdGktY29sdW1uIGJsb2NrIHRo
YXQgaXMgc3BsaXQgYWNyb3NzIHZhcmlhYmxlIHdpZHRoIHBhZ2VzIG9yIGZyYWdtZW50cyB3aWxs
IGhhdmUgZGlmZmVyZW50IGNvbHVtbiBjb3VudHMgYW5kIHdpZHRocyBpbiBlYWNoLiBUaGVzZSB2
YWx1ZXMgd2lsbCBiZSBjYWNoZWQgKGV2ZW50dWFsbHkpIGZvciBtdWx0aS1jb2x1bW4gYmxvY2tz
LgogCiAgICAgTGF5b3V0VW5pdCBtX2NvbHVtbkhlaWdodEF2YWlsYWJsZTsgLy8gVG90YWwgaGVp
Z2h0IGF2YWlsYWJsZSB0byBjb2x1bW5zLCBvciAwIGlmIGF1dG8uCi0gICAgYm9vbCBtX2luTGF5
b3V0OyAvLyBTZXQgd2hpbGUgd2UncmUgbGF5aW5nIG91dCB0aGUgZmxvdyB0aHJlYWQsIGR1cmlu
ZyB3aGljaCBjb2x1bSBzZXQgaGVpZ2h0cyBhcmUgdW5rbm93bi4KLSAgICBib29sIG1faW5CYWxh
bmNpbmdQYXNzOyAvLyBHdWFyZCB0byBhdm9pZCByZS1lbnRlcmluZyBjb2x1bW4gYmFsYW5jaW5n
LgotICAgIGJvb2wgbV9uZWVkc0hlaWdodHNSZWNhbGN1bGF0aW9uOworICAgIGJvb2wgbV9pbkxh
eW91dCB7IGZhbHNlIH07IC8vIFNldCB3aGlsZSB3ZSdyZSBsYXlpbmcgb3V0IHRoZSBmbG93IHRo
cmVhZCwgZHVyaW5nIHdoaWNoIGNvbHVtIHNldCBoZWlnaHRzIGFyZSB1bmtub3duLgorICAgIGJv
b2wgbV9pbkJhbGFuY2luZ1Bhc3MgeyBmYWxzZSB9OyAvLyBHdWFyZCB0byBhdm9pZCByZS1lbnRl
cmluZyBjb2x1bW4gYmFsYW5jaW5nLgorICAgIGJvb2wgbV9uZWVkc0hlaWdodHNSZWNhbGN1bGF0
aW9uIHsgZmFsc2UgfTsKICAgICAKLSAgICBib29sIG1fcHJvZ3Jlc3Npb25Jc0lubGluZTsKLSAg
ICBib29sIG1fcHJvZ3Jlc3Npb25Jc1JldmVyc2VkOworICAgIGJvb2wgbV9wcm9ncmVzc2lvbklz
SW5saW5lIHsgZmFsc2UgfTsKKyAgICBib29sIG1fcHJvZ3Jlc3Npb25Jc1JldmVyc2VkIHsgZmFs
c2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKaW5kZXggY2I0NjQxZWZmZDFjNjMyYWIx
OWY5MTU5NTI4ZWI5N2RlMDk3ODEyYi4uY2M0MWM4MDM5ZDZiOGFmMjIwMDE0NmU3ODJlMmEwZTY2
MmE3YzlmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
U2VjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2Vj
dGlvbi5jcHAKQEAgLTUwNSw3ICs1MDUsNyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cmVs
YXlvdXRDZWxsSWZGbGV4ZWQoUmVuZGVyVGFibGVDZWxsJiBjZWxsLCBpbnQgcm93SW5kZQogICAg
IH0KIAogICAgIGlmICghY2VsbENoaWxkcmVuRmxleCkgewotICAgICAgICBpZiAoVHJhY2tlZFJl
bmRlcmVyTGlzdEhhc2hTZXQqIHBlcmNlbnRIZWlnaHREZXNjZW5kYW50cyA9IGNlbGwucGVyY2Vu
dEhlaWdodERlc2NlbmRhbnRzKCkpIHsKKyAgICAgICAgaWYgKGF1dG8gcGVyY2VudEhlaWdodERl
c2NlbmRhbnRzID0gY2VsbC5wZXJjZW50SGVpZ2h0RGVzY2VuZGFudHMoKSkgewogICAgICAgICAg
ICAgZm9yIChhdXRvKiBkZXNjZW5kYW50IDogKnBlcmNlbnRIZWlnaHREZXNjZW5kYW50cykgewog
ICAgICAgICAgICAgICAgIGlmIChmbGV4QWxsQ2hpbGRyZW4gfHwgc2hvdWxkRmxleENlbGxDaGls
ZChjZWxsLCAqZGVzY2VuZGFudCkpIHsKICAgICAgICAgICAgICAgICAgICAgY2VsbENoaWxkcmVu
RmxleCA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
V2lkZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCmlu
ZGV4IGFmMDQxOWNmNmM0OTI1ZDFjOTQ0NzI3M2E3MTA1ZDFjNGI5ODVhMTcuLmI0MzAyZDYzZGU4
NDcwNGE0YzIwODhhZTg3ODM0MzJlZTQzY2U1NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJXaWRnZXQuY3BwCkBAIC00Myw4ICs0Myw4IEBAIFdURl9NQUtFX0lTT19BTExPQ0FU
RURfSU1QTChSZW5kZXJXaWRnZXQpOwogCiBzdGF0aWMgSGFzaE1hcDxjb25zdCBXaWRnZXQqLCBS
ZW5kZXJXaWRnZXQqPiYgd2lkZ2V0UmVuZGVyZXJNYXAoKQogewotICAgIHN0YXRpYyBIYXNoTWFw
PGNvbnN0IFdpZGdldCosIFJlbmRlcldpZGdldCo+KiBzdGF0aWNXaWRnZXRSZW5kZXJlck1hcCA9
IG5ldyBIYXNoTWFwPGNvbnN0IFdpZGdldCosIFJlbmRlcldpZGdldCo+OwotICAgIHJldHVybiAq
c3RhdGljV2lkZ2V0UmVuZGVyZXJNYXA7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hN
YXA8Y29uc3QgV2lkZ2V0KiwgUmVuZGVyV2lkZ2V0Kj4+IHN0YXRpY1dpZGdldFJlbmRlcmVyTWFw
OworICAgIHJldHVybiBzdGF0aWNXaWRnZXRSZW5kZXJlck1hcDsKIH0KIAogdW5zaWduZWQgV2lk
Z2V0SGllcmFyY2h5VXBkYXRlc1N1c3BlbnNpb25TY29wZTo6c193aWRnZXRIaWVyYXJjaHlVcGRh
dGVTdXNwZW5kQ291bnQgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1JlbmRlclN0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9S
ZW5kZXJTdHlsZS5jcHAKaW5kZXggYzQyMTNlNzgwYmUxMDcxZDI1MmU3YWEyZjk4NTc0M2RlMzc2
MDY5Zi4uMTQ0MGQzYzdmNmZkOTE2ZDRiMDcwNDg0MGExMmQ1MTRiYjk5NDRkMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCkBAIC05MTcsNyAr
OTE3LDcgQEAgYm9vbCBSZW5kZXJTdHlsZTo6Y2hhbmdlUmVxdWlyZXNMYXlvdXQoY29uc3QgUmVu
ZGVyU3R5bGUmIG90aGVyLCBPcHRpb25TZXQ8U3R5bGUKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICAvLyBJZiB0aGUgY291bnRlciBkaXJlY3RpdmVzIGNoYW5nZSwgdHJpZ2dlciBhIHJlbGF5
b3V0IHRvIHJlLWNhbGN1bGF0ZSBjb3VudGVyIHZhbHVlcyBhbmQgcmVidWlsZCB0aGUgY291bnRl
ciBub2RlIHRyZWUuCi0gICAgaWYgKCFhcmVQb2ludGluZ1RvRXF1YWxEYXRhKG1fcmFyZU5vbklu
aGVyaXRlZERhdGEtPmNvdW50ZXJEaXJlY3RpdmVzLCBvdGhlci5tX3JhcmVOb25Jbmhlcml0ZWRE
YXRhLT5jb3VudGVyRGlyZWN0aXZlcykpCisgICAgaWYgKG1fcmFyZU5vbkluaGVyaXRlZERhdGEt
PmNvdW50ZXJEaXJlY3RpdmVzICE9IG90aGVyLm1fcmFyZU5vbkluaGVyaXRlZERhdGEtPmNvdW50
ZXJEaXJlY3RpdmVzKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmICgodmlzaWJpbGl0
eSgpID09IFZpc2liaWxpdHk6OkNvbGxhcHNlKSAhPSAob3RoZXIudmlzaWJpbGl0eSgpID09IFZp
c2liaWxpdHk6OkNvbGxhcHNlKSkKQEAgLTEwNjQsMjggKzEwNjQsMjMgQEAgc3RhdGljIGJvb2wg
cmFyZUluaGVyaXRlZERhdGFDaGFuZ2VSZXF1aXJlc1JlcGFpbnQoY29uc3QgU3R5bGVSYXJlSW5o
ZXJpdGVkRGF0YSYKIH0KIAogI2lmIEVOQUJMRShDU1NfUEFJTlRJTkdfQVBJKQorCiB2b2lkIFJl
bmRlclN0eWxlOjphZGRDdXN0b21QYWludFdhdGNoUHJvcGVydHkoY29uc3QgU3RyaW5nJiBuYW1l
KQogewotICAgIGF1dG8mIGRhdGEgPSBtX3JhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpOwot
ICAgIGlmICghZGF0YS5jdXN0b21QYWludFdhdGNoZWRQcm9wZXJ0aWVzKQotICAgICAgICBkYXRh
LmN1c3RvbVBhaW50V2F0Y2hlZFByb3BlcnRpZXMgPSBtYWtlVW5pcXVlPEhhc2hTZXQ8U3RyaW5n
Pj4oKTsKLSAgICBkYXRhLmN1c3RvbVBhaW50V2F0Y2hlZFByb3BlcnRpZXMtPmFkZChuYW1lKTsK
KyAgICBtX3JhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLmN1c3RvbVBhaW50V2F0Y2hlZFBy
b3BlcnRpZXMuYWRkKG5hbWUpOwogfQogCiBpbmxpbmUgc3RhdGljIGJvb2wgY2hhbmdlZEN1c3Rv
bVBhaW50V2F0Y2hlZFByb3BlcnR5KGNvbnN0IFJlbmRlclN0eWxlJiBhLCBjb25zdCBTdHlsZVJh
cmVOb25Jbmhlcml0ZWREYXRhJiBhRGF0YSwgY29uc3QgUmVuZGVyU3R5bGUmIGIsIGNvbnN0IFN0
eWxlUmFyZU5vbkluaGVyaXRlZERhdGEmIGJEYXRhKQogewotICAgIGF1dG8qIHByb3BlcnRpZXNB
ID0gYURhdGEuY3VzdG9tUGFpbnRXYXRjaGVkUHJvcGVydGllcy5nZXQoKTsKLSAgICBhdXRvKiBw
cm9wZXJ0aWVzQiA9IGJEYXRhLmN1c3RvbVBhaW50V2F0Y2hlZFByb3BlcnRpZXMuZ2V0KCk7Cisg
ICAgYXV0byYgcHJvcGVydGllc0EgPSBhRGF0YS5jdXN0b21QYWludFdhdGNoZWRQcm9wZXJ0aWVz
OworICAgIGF1dG8mIHByb3BlcnRpZXNCID0gYkRhdGEuY3VzdG9tUGFpbnRXYXRjaGVkUHJvcGVy
dGllczsKIAotICAgIGlmIChVTkxJS0VMWShwcm9wZXJ0aWVzQSB8fCBwcm9wZXJ0aWVzQikpIHsK
KyAgICBpZiAoVU5MSUtFTFkoIXByb3BlcnRpZXNBLmlzRW1wdHkoKSB8fCAhcHJvcGVydGllc0Iu
aXNFbXB0eSgpKSkgewogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBuZWVkIHRvIHVz
ZSBDb21wdXRlZFN0eWxlRXh0cmFjdG9yIGhlcmUuCiAgICAgICAgIENvbXB1dGVkU3R5bGVFeHRy
YWN0b3IgZXh0cmFjdG9yKChFbGVtZW50KikgbnVsbHB0cik7CiAKLSAgICAgICAgZm9yIChhdXRv
KiB3YXRjaFByb3BlcnRpZXNNYXAgOiB7IHByb3BlcnRpZXNBLCBwcm9wZXJ0aWVzQiB9KSB7Ci0g
ICAgICAgICAgICBpZiAoIXdhdGNoUHJvcGVydGllc01hcCkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICAgICAgZm9yIChhdXRvJiBuYW1lIDogKndhdGNoUHJvcGVydGllc01h
cCkgeworICAgICAgICBmb3IgKGF1dG8mIHdhdGNoUHJvcGVydGllc01hcCA6IHsgcHJvcGVydGll
c0EsIHByb3BlcnRpZXNCIH0pIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgbmFtZSA6IHdhdGNo
UHJvcGVydGllc01hcCkgewogICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWVB
OwogICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWVCOwogICAgICAgICAgICAg
ICAgIGlmIChpc0N1c3RvbVByb3BlcnR5TmFtZShuYW1lKSkgewpAQCAtMTExNSw2ICsxMTEwLDcg
QEAgaW5saW5lIHN0YXRpYyBib29sIGNoYW5nZWRDdXN0b21QYWludFdhdGNoZWRQcm9wZXJ0eShj
b25zdCBSZW5kZXJTdHlsZSYgYSwgY29uc3QKIAogICAgIHJldHVybiBmYWxzZTsKIH0KKwogI2Vu
ZGlmCiAKIGJvb2wgUmVuZGVyU3R5bGU6OmNoYW5nZVJlcXVpcmVzUmVwYWludChjb25zdCBSZW5k
ZXJTdHlsZSYgb3RoZXIsIE9wdGlvblNldDxTdHlsZURpZmZlcmVuY2VDb250ZXh0U2Vuc2l0aXZl
UHJvcGVydHk+JiBjaGFuZ2VkQ29udGV4dFNlbnNpdGl2ZVByb3BlcnRpZXMpIGNvbnN0CkBAIC0x
NTg1LDE3ICsxNTgxLDE0IEBAIGJvb2wgUmVuZGVyU3R5bGU6Omhhc0VudGlyZWx5Rml4ZWRCYWNr
Z3JvdW5kKCkgY29uc3QKICAgICByZXR1cm4gYWxsTGF5ZXJzQXJlRml4ZWQoYmFja2dyb3VuZExh
eWVycygpKTsKIH0KIAotY29uc3QgQ291bnRlckRpcmVjdGl2ZU1hcCogUmVuZGVyU3R5bGU6OmNv
dW50ZXJEaXJlY3RpdmVzKCkgY29uc3QKK2NvbnN0IENvdW50ZXJEaXJlY3RpdmVNYXAmIFJlbmRl
clN0eWxlOjpjb3VudGVyRGlyZWN0aXZlcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcmFyZU5v
bkluaGVyaXRlZERhdGEtPmNvdW50ZXJEaXJlY3RpdmVzLmdldCgpOworICAgIHJldHVybiBtX3Jh
cmVOb25Jbmhlcml0ZWREYXRhLT5jb3VudGVyRGlyZWN0aXZlczsKIH0KIAogQ291bnRlckRpcmVj
dGl2ZU1hcCYgUmVuZGVyU3R5bGU6OmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCkKIHsKLSAgICBh
dXRvJiBtYXAgPSBtX3JhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLmNvdW50ZXJEaXJlY3Rp
dmVzOwotICAgIGlmICghbWFwKQotICAgICAgICBtYXAgPSBtYWtlVW5pcXVlPENvdW50ZXJEaXJl
Y3RpdmVNYXA+KCk7Ci0gICAgcmV0dXJuICptYXA7CisgICAgcmV0dXJuIG1fcmFyZU5vbkluaGVy
aXRlZERhdGEuYWNjZXNzKCkuY291bnRlckRpcmVjdGl2ZXM7CiB9CiAKIGNvbnN0IEF0b21TdHJp
bmcmIFJlbmRlclN0eWxlOjpoeXBoZW5TdHJpbmcoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAppbmRleCA3Yzg3Y2IxM2JhZTJlYmJjNjUxZTIy
ODljOGZjNzZkYjc2NTdhNTFlLi5kMGMwZjRhNTM3ODZjNmNiMDJjYjE1MzIxMWIxNjZiNzA4ODFl
YTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaApA
QCAtMTQ3Miw3ICsxNDcyLDcgQEAgcHVibGljOgogICAgIGJvb2wgaGFzQXR0ckNvbnRlbnQoKSBj
b25zdCB7IHJldHVybiBtX3JhcmVOb25Jbmhlcml0ZWREYXRhLT5oYXNBdHRyQ29udGVudDsgfQog
ICAgIHZvaWQgc2V0SGFzQXR0ckNvbnRlbnQoKTsKIAotICAgIGNvbnN0IENvdW50ZXJEaXJlY3Rp
dmVNYXAqIGNvdW50ZXJEaXJlY3RpdmVzKCkgY29uc3Q7CisgICAgY29uc3QgQ291bnRlckRpcmVj
dGl2ZU1hcCYgY291bnRlckRpcmVjdGl2ZXMoKSBjb25zdDsKICAgICBDb3VudGVyRGlyZWN0aXZl
TWFwJiBhY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOwogCiAgICAgUXVvdGVzRGF0YSogcXVvdGVz
KCkgY29uc3QgeyByZXR1cm4gbV9yYXJlSW5oZXJpdGVkRGF0YS0+cXVvdGVzLmdldCgpOyB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5o
ZXJpdGVkRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJl
Tm9uSW5oZXJpdGVkRGF0YS5jcHAKaW5kZXggODlkMTAyZTJjZjk5YTU5OTBhNzRjZTY5ZTMyNWQ0
OWQ2ZjBmYzJiMC4uNjMzZjk2ODBlZmY1MzEyZjY4NmQzY2I1MDBiN2U1ODliOWFkMGY4NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVy
aXRlZERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJh
cmVOb25Jbmhlcml0ZWREYXRhLmNwcApAQCAtMTQ4LDcgKzE0OCw3IEBAIGlubGluZSBTdHlsZVJh
cmVOb25Jbmhlcml0ZWREYXRhOjpTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhKGNvbnN0IFN0eWxl
UmFyZU5vbkluCiAgICAgLCBvdmVyc2Nyb2xsQmVoYXZpb3JYKG8ub3ZlcnNjcm9sbEJlaGF2aW9y
WCkKICAgICAsIG92ZXJzY3JvbGxCZWhhdmlvclkoby5vdmVyc2Nyb2xsQmVoYXZpb3JZKQogICAg
ICwgY29udGVudChvLmNvbnRlbnQgPyBvLmNvbnRlbnQtPmNsb25lKCkgOiBudWxscHRyKQotICAg
ICwgY291bnRlckRpcmVjdGl2ZXMoby5jb3VudGVyRGlyZWN0aXZlcyA/IG1ha2VVbmlxdWU8Q291
bnRlckRpcmVjdGl2ZU1hcD4oKm8uY291bnRlckRpcmVjdGl2ZXMpIDogbnVsbHB0cikKKyAgICAs
IGNvdW50ZXJEaXJlY3RpdmVzKG8uY291bnRlckRpcmVjdGl2ZXMpCiAgICAgLCBhbHRUZXh0KG8u
YWx0VGV4dCkKICAgICAsIGJveFNoYWRvdyhvLmJveFNoYWRvdyA/IG1ha2VVbmlxdWU8U2hhZG93
RGF0YT4oKm8uYm94U2hhZG93KSA6IG51bGxwdHIpCiAgICAgLCB3aWxsQ2hhbmdlKG8ud2lsbENo
YW5nZSkKQEAgLTE3OSw3ICsxNzksNyBAQCBpbmxpbmUgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0
YTo6U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YShjb25zdCBTdHlsZVJhcmVOb25JbgogICAgICwg
anVzdGlmeUl0ZW1zKG8uanVzdGlmeUl0ZW1zKQogICAgICwganVzdGlmeVNlbGYoby5qdXN0aWZ5
U2VsZikKICAgICAsIGN1c3RvbVByb3BlcnRpZXMoby5jdXN0b21Qcm9wZXJ0aWVzKQotICAgICwg
Y3VzdG9tUGFpbnRXYXRjaGVkUHJvcGVydGllcyhvLmN1c3RvbVBhaW50V2F0Y2hlZFByb3BlcnRp
ZXMgPyBtYWtlVW5pcXVlPEhhc2hTZXQ8U3RyaW5nPj4oKm8uY3VzdG9tUGFpbnRXYXRjaGVkUHJv
cGVydGllcykgOiBudWxscHRyKQorICAgICwgY3VzdG9tUGFpbnRXYXRjaGVkUHJvcGVydGllcyhv
LmN1c3RvbVBhaW50V2F0Y2hlZFByb3BlcnRpZXMpCiAgICAgLCByb3RhdGUoby5yb3RhdGUpCiAg
ICAgLCBzY2FsZShvLnNjYWxlKQogICAgICwgdHJhbnNsYXRlKG8udHJhbnNsYXRlKQpAQCAtMjU2
LDcgKzI1Niw3IEBAIGJvb2wgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YTo6b3BlcmF0b3I9PShj
b25zdCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhJiBvKSBjCiAgICAgICAgICYmIG92ZXJzY3Jv
bGxCZWhhdmlvclggPT0gby5vdmVyc2Nyb2xsQmVoYXZpb3JYCiAgICAgICAgICYmIG92ZXJzY3Jv
bGxCZWhhdmlvclkgPT0gby5vdmVyc2Nyb2xsQmVoYXZpb3JZCiAgICAgICAgICYmIGNvbnRlbnRE
YXRhRXF1aXZhbGVudChvKQotICAgICAgICAmJiBhcmVQb2ludGluZ1RvRXF1YWxEYXRhKGNvdW50
ZXJEaXJlY3RpdmVzLCBvLmNvdW50ZXJEaXJlY3RpdmVzKQorICAgICAgICAmJiBjb3VudGVyRGly
ZWN0aXZlcyA9PSBvLmNvdW50ZXJEaXJlY3RpdmVzCiAgICAgICAgICYmIGFsdFRleHQgPT0gby5h
bHRUZXh0CiAgICAgICAgICYmIGFyZVBvaW50aW5nVG9FcXVhbERhdGEoYm94U2hhZG93LCBvLmJv
eFNoYWRvdykKICAgICAgICAgJiYgYXJlUG9pbnRpbmdUb0VxdWFsRGF0YSh3aWxsQ2hhbmdlLCBv
LndpbGxDaGFuZ2UpCkBAIC0yODcsOCArMjg3LDcgQEAgYm9vbCBTdHlsZVJhcmVOb25Jbmhlcml0
ZWREYXRhOjpvcGVyYXRvcj09KGNvbnN0IFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEmIG8pIGMK
ICAgICAgICAgJiYganVzdGlmeUl0ZW1zID09IG8uanVzdGlmeUl0ZW1zCiAgICAgICAgICYmIGp1
c3RpZnlTZWxmID09IG8uanVzdGlmeVNlbGYKICAgICAgICAgJiYgY3VzdG9tUHJvcGVydGllcyA9
PSBvLmN1c3RvbVByb3BlcnRpZXMKLSAgICAgICAgJiYgKChjdXN0b21QYWludFdhdGNoZWRQcm9w
ZXJ0aWVzICYmIG8uY3VzdG9tUGFpbnRXYXRjaGVkUHJvcGVydGllcyAmJiAqY3VzdG9tUGFpbnRX
YXRjaGVkUHJvcGVydGllcyA9PSAqby5jdXN0b21QYWludFdhdGNoZWRQcm9wZXJ0aWVzKQotICAg
ICAgICAgICAgfHwgKCFjdXN0b21QYWludFdhdGNoZWRQcm9wZXJ0aWVzICYmICFvLmN1c3RvbVBh
aW50V2F0Y2hlZFByb3BlcnRpZXMpKQorICAgICAgICAmJiBjdXN0b21QYWludFdhdGNoZWRQcm9w
ZXJ0aWVzID09IG8uY3VzdG9tUGFpbnRXYXRjaGVkUHJvcGVydGllcwogICAgICAgICAmJiBwYWdl
U2l6ZVR5cGUgPT0gby5wYWdlU2l6ZVR5cGUKICAgICAgICAgJiYgdHJhbnNmb3JtU3R5bGUzRCA9
PSBvLnRyYW5zZm9ybVN0eWxlM0QKICAgICAgICAgJiYgYmFja2ZhY2VWaXNpYmlsaXR5ID09IG8u
YmFja2ZhY2VWaXNpYmlsaXR5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuaAppbmRleCA3N2JhYjk1MDgzN2M3
NDk4YjExMWJmOTY4ZGEyNGFmOGFiYmUxYjFhLi45MjQ0MmFjOTAxYjE1YmUxMzY1YTRmMWM1ZTM4
MjE1Mzk5OTY4M2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmgKQEAgLTE0NSw3ICsxNDUsNyBAQCBw
dWJsaWM6CiAgICAgdW5zaWduZWQgb3ZlcnNjcm9sbEJlaGF2aW9yWSA6IDI7IC8vIE92ZXJzY3Jv
bGxCZWhhdmlvcgogCiAgICAgc3RkOjp1bmlxdWVfcHRyPENvbnRlbnREYXRhPiBjb250ZW50Owot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDb3VudGVyRGlyZWN0aXZlTWFwPiBjb3VudGVyRGlyZWN0aXZl
czsKKyAgICBDb3VudGVyRGlyZWN0aXZlTWFwIGNvdW50ZXJEaXJlY3RpdmVzOwogICAgIFN0cmlu
ZyBhbHRUZXh0OwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJveFNoYWRvdzsg
Ly8gRm9yIGJveC1zaGFkb3cgZGVjb3JhdGlvbnMuCkBAIC0xODgsNyArMTg4LDcgQEAgcHVibGlj
OgogICAgIFN0eWxlU2VsZkFsaWdubWVudERhdGEganVzdGlmeVNlbGY7CiAKICAgICBEYXRhUmVm
PFN0eWxlQ3VzdG9tUHJvcGVydHlEYXRhPiBjdXN0b21Qcm9wZXJ0aWVzOwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxIYXNoU2V0PFN0cmluZz4+IGN1c3RvbVBhaW50V2F0Y2hlZFByb3BlcnRpZXM7Cisg
ICAgSGFzaFNldDxTdHJpbmc+IGN1c3RvbVBhaW50V2F0Y2hlZFByb3BlcnRpZXM7CiAKICAgICBS
ZWZQdHI8Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uPiByb3RhdGU7CiAgICAgUmVmUHRyPFNjYWxl
VHJhbnNmb3JtT3BlcmF0aW9uPiBzY2FsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0
eWxlL1N0eWxlU2NvcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZS5jcHAK
aW5kZXggYmFmY2ViODBmOWNkM2EyNzMxZDQyNzA4ZmNmYjE1MmM0ZTJjM2E2Zi4uZTU4NjRkNGJk
OGMxYzNmY2RkYTNhN2YzMmM2NDdiMTBiZjAwOWE3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVTY29wZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVT
Y29wZS5jcHAKQEAgLTQ5MSw3ICs0OTEsNyBAQCB2b2lkIFNjb3BlOjp1cGRhdGVBY3RpdmVTdHls
ZVNoZWV0cyhVcGRhdGVUeXBlIHVwZGF0ZVR5cGUpCiAKICAgICB1cGRhdGVSZXNvbHZlcihhY3Rp
dmVDU1NTdHlsZVNoZWV0cywgc3R5bGVTaGVldENoYW5nZS5yZXNvbHZlclVwZGF0ZVR5cGUpOwog
Ci0gICAgbV93ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0TG9va3VwID0gbnVs
bHB0cjsKKyAgICBtX3dlYWtDb3B5T2ZBY3RpdmVTdHlsZVNoZWV0TGlzdEZvckZhc3RMb29rdXAg
PSBXVEY6Om51bGxvcHQ7CiAgICAgbV9hY3RpdmVTdHlsZVNoZWV0cy5zd2FwKGFjdGl2ZUNTU1N0
eWxlU2hlZXRzKTsKICAgICBtX3N0eWxlU2hlZXRzRm9yU3R5bGVTaGVldExpc3Quc3dhcChhY3Rp
dmVTdHlsZVNoZWV0cyk7CiAKQEAgLTU3NCw3ICs1NzQsNyBAQCBjb25zdCBWZWN0b3I8UmVmUHRy
PENTU1N0eWxlU2hlZXQ+PiBTY29wZTo6YWN0aXZlU3R5bGVTaGVldHNGb3JJbnNwZWN0b3IoKQog
Ym9vbCBTY29wZTo6YWN0aXZlU3R5bGVTaGVldHNDb250YWlucyhjb25zdCBDU1NTdHlsZVNoZWV0
KiBzaGVldCkgY29uc3QKIHsKICAgICBpZiAoIW1fd2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hlZXRM
aXN0Rm9yRmFzdExvb2t1cCkgewotICAgICAgICBtX3dlYWtDb3B5T2ZBY3RpdmVTdHlsZVNoZWV0
TGlzdEZvckZhc3RMb29rdXAgPSBtYWtlVW5pcXVlPEhhc2hTZXQ8Y29uc3QgQ1NTU3R5bGVTaGVl
dCo+PigpOworICAgICAgICBtX3dlYWtDb3B5T2ZBY3RpdmVTdHlsZVNoZWV0TGlzdEZvckZhc3RM
b29rdXAgPSBIYXNoU2V0PGNvbnN0IENTU1N0eWxlU2hlZXQqPiB7IH07CiAgICAgICAgIGZvciAo
YXV0byYgYWN0aXZlU3R5bGVTaGVldCA6IG1fYWN0aXZlU3R5bGVTaGVldHMpCiAgICAgICAgICAg
ICBtX3dlYWtDb3B5T2ZBY3RpdmVTdHlsZVNoZWV0TGlzdEZvckZhc3RMb29rdXAtPmFkZChhY3Rp
dmVTdHlsZVNoZWV0LmdldCgpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dHlsZS9TdHlsZVNjb3BlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlLmgKaW5k
ZXggYmE3NjcyZGQwODQwN2Y0ZDVkYjg1ZjNhNDI2N2NjZDQ2MjAyMDZhMC4uMjcxYmEwMWI0OGJl
MWJmNTZiMzEwMzk4MzNiNWU2MjM3MGYwZDg2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3R5bGUvU3R5bGVTY29wZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGUu
aApAQCAtMTY4LDcgKzE2OCw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFJlZlB0cjxTdHlsZVNo
ZWV0Pj4gbV9zdHlsZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0OwogICAgIFZlY3RvcjxSZWZQdHI8
Q1NTU3R5bGVTaGVldD4+IG1fYWN0aXZlU3R5bGVTaGVldHM7CiAKLSAgICBtdXRhYmxlIHN0ZDo6
dW5pcXVlX3B0cjxIYXNoU2V0PGNvbnN0IENTU1N0eWxlU2hlZXQqPj4gbV93ZWFrQ29weU9mQWN0
aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0TG9va3VwOworICAgIG11dGFibGUgT3B0aW9uYWw8SGFz
aFNldDxjb25zdCBDU1NTdHlsZVNoZWV0Kj4+IG1fd2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hlZXRM
aXN0Rm9yRmFzdExvb2t1cDsKIAogICAgIC8vIFRyYWNrIHRoZSBjdXJyZW50bHkgbG9hZGluZyB0
b3AtbGV2ZWwgc3R5bGVzaGVldHMgbmVlZGVkIGZvciByZW5kZXJpbmcuCiAgICAgLy8gU2hlZXRz
IGxvYWRlZCB1c2luZyB0aGUgQGltcG9ydCBkaXJlY3RpdmUgYXJlIG5vdCBpbmNsdWRlZCBpbiB0
aGlzIGNvdW50LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDQyMmNlNTVk
ODE1MjY4ZWFjNjdmYjIwNWVmZGIyMjVkYTA1YThlZWYuLmJhNjY1ZjNhY2I3ODMzNjM4NmU5NDEz
NTY3NDhkMzZlMjZlZDQ5NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAg
LTI3NjMsMTIgKzI3NjMsMTEgQEAgdW5zaWduZWQgSW50ZXJuYWxzOjpudW1iZXJPZlNjcm9sbGFi
bGVBcmVhcygpCiAKICAgICB1bnNpZ25lZCBjb3VudCA9IDA7CiAgICAgRnJhbWUqIGZyYW1lID0g
ZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgaWYgKGZyYW1lLT52aWV3KCktPnNjcm9sbGFibGVBcmVh
cygpKQotICAgICAgICBjb3VudCArPSBmcmFtZS0+dmlldygpLT5zY3JvbGxhYmxlQXJlYXMoKS0+
c2l6ZSgpOwotCisgICAgaWYgKGZyYW1lLT52aWV3KCkpCisgICAgICAgIGNvdW50ICs9IGZyYW1l
LT52aWV3KCktPnNjcm9sbGFibGVBcmVhcygpLnNpemUoKTsKICAgICBmb3IgKEZyYW1lKiBjaGls
ZCA9IGZyYW1lLT50cmVlKCkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJl
ZSgpLm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGNoaWxkLT52aWV3KCkgJiYgY2hpbGQt
PnZpZXcoKS0+c2Nyb2xsYWJsZUFyZWFzKCkpCi0gICAgICAgICAgICBjb3VudCArPSBjaGlsZC0+
dmlldygpLT5zY3JvbGxhYmxlQXJlYXMoKS0+c2l6ZSgpOworICAgICAgICBpZiAoY2hpbGQtPnZp
ZXcoKSkKKyAgICAgICAgICAgIGNvdW50ICs9IGNoaWxkLT52aWV3KCktPnNjcm9sbGFibGVBcmVh
cygpLnNpemUoKTsKICAgICB9CiAKICAgICByZXR1cm4gY291bnQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkU2NoZWR1bGVyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWRTY2hlZHVsZXIuY3BwCmluZGV4IDFl
NDgwZjU0YTJhZTY5NzMxZTc1MzYzN2JmMDhkMzAxNDIzYzcyZWYuLmNiNjM0MzljZjI0ZTNhYmYx
ZjJkMzk5MjkxNTVhMGZmYmJjMTE5M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0xvYWRTY2hlZHVsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0xvYWRTY2hlZHVsZXIuY3BwCkBAIC0xMzcsOSArMTM3LDcgQEAg
dm9pZCBOZXR3b3JrTG9hZFNjaGVkdWxlcjo6c2V0UmVzb3VyY2VMb2FkU2NoZWR1bGluZ01vZGUo
V2ViQ29yZTo6UGFnZUlkZW50aWZpZXIKIHsKICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICBjYXNl
IFdlYkNvcmU6OkxvYWRTY2hlZHVsaW5nTW9kZTo6UHJpb3JpdGl6ZWQ6Ci0gICAgICAgIG1fcGFn
ZUNvbnRleHRzLmVuc3VyZShwYWdlSWRlbnRpZmllciwgWyZdIHsKLSAgICAgICAgICAgIHJldHVy
biBtYWtlVW5pcXVlPFBhZ2VDb250ZXh0PigpOwotICAgICAgICB9KTsKKyAgICAgICAgbV9wYWdl
Q29udGV4dHMuYWRkKHBhZ2VJZGVudGlmaWVyLCBQYWdlQ29udGV4dCB7IH0pOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIFdlYkNvcmU6OkxvYWRTY2hlZHVsaW5nTW9kZTo6RGlyZWN0OgogICAg
ICAgICBtX3BhZ2VDb250ZXh0cy5yZW1vdmUocGFnZUlkZW50aWZpZXIpOwpAQCAtMTY1LDEyICsx
NjMsMTIgQEAgYXV0byBOZXR3b3JrTG9hZFNjaGVkdWxlcjo6Y29udGV4dEZvckxvYWQoY29uc3Qg
TmV0d29ya0xvYWQmIGxvYWQpIC0+IEhvc3RDb250ZXgKICAgICBpZiAoIWxvYWQudXJsKCkucHJv
dG9jb2xJc0luSFRUUEZhbWlseSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1
dG8qIHBhZ2VDb250ZXh0ID0gbV9wYWdlQ29udGV4dHMuZ2V0KGxvYWQucGFyYW1ldGVycygpLndl
YlBhZ2VJRCk7Ci0gICAgaWYgKCFwYWdlQ29udGV4dCkKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9w
YWdlQ29udGV4dHMuZmluZChsb2FkLnBhcmFtZXRlcnMoKS53ZWJQYWdlSUQpOworICAgIGlmIChp
dGVyYXRvciA9PSBtX3BhZ2VDb250ZXh0cy5lbmQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICBhdXRvIGhvc3QgPSBsb2FkLnVybCgpLmhvc3QoKS50b1N0cmluZygpOwotICAgIHJl
dHVybiBwYWdlQ29udGV4dC0+ZW5zdXJlKGhvc3QsIFsmXSB7CisgICAgcmV0dXJuIGl0ZXJhdG9y
LT52YWx1ZS5lbnN1cmUoaG9zdCwgWyZdIHsKICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8SG9z
dENvbnRleHQ+KCk7CiAgICAgfSkuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZFNjaGVkdWxlci5oIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZFNjaGVkdWxlci5oCmluZGV4
IDI5OWM4MWFjMzI4OWY4OWY3NTRhNmM2ZDE5MzMxOTc4YzJiMjY3OTIuLjE4YmI0YWE0YjY1NTJl
YjMxYTUwZTNjNTRjYTY2NzBiYTk5Njc2MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0xvYWRTY2hlZHVsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkU2NoZWR1bGVyLmgKQEAgLTUyLDcgKzUyLDcgQEAgcHJp
dmF0ZToKICAgICBIb3N0Q29udGV4dCogY29udGV4dEZvckxvYWQoY29uc3QgTmV0d29ya0xvYWQm
KTsKIAogICAgIHVzaW5nIFBhZ2VDb250ZXh0ID0gSGFzaE1hcDxTdHJpbmcsIHN0ZDo6dW5pcXVl
X3B0cjxIb3N0Q29udGV4dD4+OwotICAgIEhhc2hNYXA8V2ViQ29yZTo6UGFnZUlkZW50aWZpZXIs
IHN0ZDo6dW5pcXVlX3B0cjxQYWdlQ29udGV4dD4+IG1fcGFnZUNvbnRleHRzOworICAgIEhhc2hN
YXA8V2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIFBhZ2VDb250ZXh0PiBtX3BhZ2VDb250ZXh0czsK
IH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
UHJlZmV0Y2hDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL1By
ZWZldGNoQ2FjaGUuY3BwCmluZGV4IDVlMmUwMmUyZmJhMGI0YTBjMDNiNWQzZTY2Yjk3ZjdiY2Nj
Nzk1OGIuLjY3Zjg5YThjZmZhNzA0MGZhNjhlNzcxZmRlNjg0NWM0N2RhYTM4ODAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvUHJlZmV0Y2hDYWNoZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9QcmVmZXRjaENhY2hlLmNw
cApAQCAtNTMsNDUgKzUzLDM5IEBAIHZvaWQgUHJlZmV0Y2hDYWNoZTo6Y2xlYXIoKQogewogICAg
IG1fZXhwaXJhdGlvblRpbWVyLnN0b3AoKTsKICAgICBtX3Nlc3Npb25FeHBpcmF0aW9uTGlzdC5j
bGVhcigpOwotICAgIGlmIChtX3Nlc3Npb25QcmVmZXRjaGVzKQotICAgICAgICBtX3Nlc3Npb25Q
cmVmZXRjaGVzLT5jbGVhcigpOworICAgIG1fc2Vzc2lvblByZWZldGNoZXMuY2xlYXIoKTsKIH0K
IAogc3RkOjp1bmlxdWVfcHRyPFByZWZldGNoQ2FjaGU6OkVudHJ5PiBQcmVmZXRjaENhY2hlOjp0
YWtlKGNvbnN0IFVSTCYgdXJsKQogewotICAgIGF1dG8qIHJlc291cmNlcyA9IG1fc2Vzc2lvblBy
ZWZldGNoZXMuZ2V0KCk7Ci0gICAgaWYgKCFyZXNvdXJjZXMpCisgICAgaWYgKG1fc2Vzc2lvblBy
ZWZldGNoZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBtX3Nlc3Np
b25FeHBpcmF0aW9uTGlzdC5yZW1vdmVBbGxNYXRjaGluZyhbJnVybF0gKGNvbnN0IGF1dG8mIHR1
cGxlKSB7CiAgICAgICAgIHJldHVybiBzdGQ6OmdldDwwPih0dXBsZSkgPT0gdXJsOwogICAgIH0p
OwotICAgIGF1dG8gZW50cnkgPSByZXNvdXJjZXMtPnRha2UodXJsKTsKKyAgICBhdXRvIGVudHJ5
ID0gbV9zZXNzaW9uUHJlZmV0Y2hlcy50YWtlKHVybCk7CiAgICAgQVNTRVJUKCFlbnRyeSB8fCAh
ZW50cnktPnJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6
VmFyeSkuY29udGFpbnMoIkNvb2tpZSIpKTsKICAgICByZXR1cm4gZW50cnk7CiB9CiAKIHN0YXRp
YyBjb25zdCBTZWNvbmRzIGV4cGlyYXRpb25UaW1lb3V0IHsgNV9zIH07CiAKLXZvaWQgUHJlZmV0
Y2hDYWNoZTo6c3RvcmUoY29uc3QgVVJMJiByZXF1ZXN0VXJsLCBXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlJiYgcmVzcG9uc2UsIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYgYnVmZmVy
KQordm9pZCBQcmVmZXRjaENhY2hlOjpzdG9yZShjb25zdCBVUkwmIHJlcXVlc3RVUkwsIFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2UmJiByZXNwb25zZSwgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1
ZmZlcj4mJiBidWZmZXIpCiB7Ci0gICAgaWYgKCFtX3Nlc3Npb25QcmVmZXRjaGVzKQotICAgICAg
ICBtX3Nlc3Npb25QcmVmZXRjaGVzID0gbWFrZVVuaXF1ZTxQcmVmZXRjaEVudHJpZXNNYXA+KCk7
Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX3Nlc3Npb25QcmVmZXRjaGVzLT5hZGQocmVxdWVzdFVy
bCwgbWFrZVVuaXF1ZTxQcmVmZXRjaENhY2hlOjpFbnRyeT4oV1RGTW92ZShyZXNwb25zZSksIFdU
Rk1vdmUoYnVmZmVyKSkpOworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9zZXNzaW9uUHJlZmV0Y2hl
cy5hZGQocmVxdWVzdFVSTCwgbWFrZVVuaXF1ZTxQcmVmZXRjaENhY2hlOjpFbnRyeT4oV1RGTW92
ZShyZXNwb25zZSksIFdURk1vdmUoYnVmZmVyKSkpOwogICAgIC8vIExpbWl0IHByZWZldGNoZXMg
Zm9yIHNhbWUgdXJsIHRvIDEuCiAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKICAgICAg
ICAgcmV0dXJuOwotICAgIG1fc2Vzc2lvbkV4cGlyYXRpb25MaXN0LmFwcGVuZChzdGQ6Om1ha2Vf
dHVwbGUocmVxdWVzdFVybCwgV2FsbFRpbWU6Om5vdygpKSk7CisgICAgbV9zZXNzaW9uRXhwaXJh
dGlvbkxpc3QuYXBwZW5kKHN0ZDo6bWFrZV90dXBsZShyZXF1ZXN0VVJMLCBXYWxsVGltZTo6bm93
KCkpKTsKICAgICBpZiAoIW1fZXhwaXJhdGlvblRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1f
ZXhwaXJhdGlvblRpbWVyLnN0YXJ0T25lU2hvdChleHBpcmF0aW9uVGltZW91dCk7CiB9CiAKLXZv
aWQgUHJlZmV0Y2hDYWNoZTo6c3RvcmVSZWRpcmVjdChjb25zdCBVUkwmIHJlcXVlc3RVcmwsIFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiByZWRpcmVjdFJlc3BvbnNlLCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmJiByZWRpcmVjdFJlcXVlc3QpCit2b2lkIFByZWZldGNoQ2FjaGU6OnN0b3Jl
UmVkaXJlY3QoY29uc3QgVVJMJiByZXF1ZXN0VVJMLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
JiYgcmVkaXJlY3RSZXNwb25zZSwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgcmVkaXJlY3RS
ZXF1ZXN0KQogewotICAgIGlmICghbV9zZXNzaW9uUHJlZmV0Y2hlcykKLSAgICAgICAgbV9zZXNz
aW9uUHJlZmV0Y2hlcyA9IG1ha2VVbmlxdWU8UHJlZmV0Y2hFbnRyaWVzTWFwPigpOwogICAgIHJl
ZGlyZWN0UmVxdWVzdC5jbGVhclB1cnBvc2UoKTsKLSAgICBtX3Nlc3Npb25QcmVmZXRjaGVzLT5z
ZXQocmVxdWVzdFVybCwgbWFrZVVuaXF1ZTxQcmVmZXRjaENhY2hlOjpFbnRyeT4oV1RGTW92ZShy
ZWRpcmVjdFJlc3BvbnNlKSwgV1RGTW92ZShyZWRpcmVjdFJlcXVlc3QpKSk7Ci0gICAgbV9zZXNz
aW9uRXhwaXJhdGlvbkxpc3QuYXBwZW5kKHN0ZDo6bWFrZV90dXBsZShyZXF1ZXN0VXJsLCBXYWxs
VGltZTo6bm93KCkpKTsKKyAgICBtX3Nlc3Npb25QcmVmZXRjaGVzLnNldChyZXF1ZXN0VVJMLCBt
YWtlVW5pcXVlPFByZWZldGNoQ2FjaGU6OkVudHJ5PihXVEZNb3ZlKHJlZGlyZWN0UmVzcG9uc2Up
LCBXVEZNb3ZlKHJlZGlyZWN0UmVxdWVzdCkpKTsKKyAgICBtX3Nlc3Npb25FeHBpcmF0aW9uTGlz
dC5hcHBlbmQoc3RkOjptYWtlX3R1cGxlKHJlcXVlc3RVUkwsIFdhbGxUaW1lOjpub3coKSkpOwog
ICAgIGlmICghbV9leHBpcmF0aW9uVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV9leHBpcmF0
aW9uVGltZXIuc3RhcnRPbmVTaG90KGV4cGlyYXRpb25UaW1lb3V0KTsKIH0KQEAgLTEwMCwxMyAr
OTQsMTEgQEAgdm9pZCBQcmVmZXRjaENhY2hlOjpjbGVhckV4cGlyZWRFbnRyaWVzKCkKIHsKICAg
ICBhdXRvIHRpbWVvdXQgPSBXYWxsVGltZTo6bm93KCk7CiAgICAgd2hpbGUgKCFtX3Nlc3Npb25F
eHBpcmF0aW9uTGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgYXV0byBbcmVxdWVzdFVybCwgdGlt
ZXN0YW1wXSA9IG1fc2Vzc2lvbkV4cGlyYXRpb25MaXN0LmZpcnN0KCk7Ci0gICAgICAgIGF1dG8q
IHJlc291cmNlcyA9IG1fc2Vzc2lvblByZWZldGNoZXMuZ2V0KCk7Ci0gICAgICAgIEFTU0VSVChy
ZXNvdXJjZXMpOwotICAgICAgICBBU1NFUlQocmVzb3VyY2VzLT5jb250YWlucyhyZXF1ZXN0VXJs
KSk7CisgICAgICAgIGF1dG8gW3JlcXVlc3RVUkwsIHRpbWVzdGFtcF0gPSBtX3Nlc3Npb25FeHBp
cmF0aW9uTGlzdC5maXJzdCgpOworICAgICAgICBBU1NFUlQobV9zZXNzaW9uUHJlZmV0Y2hlcy5j
b250YWlucyhyZXF1ZXN0VVJMKSk7CiAgICAgICAgIGF1dG8gZWxhcHNlZCA9IHRpbWVvdXQgLSB0
aW1lc3RhbXA7CiAgICAgICAgIGlmIChlbGFwc2VkID4gZXhwaXJhdGlvblRpbWVvdXQpIHsKLSAg
ICAgICAgICAgIHJlc291cmNlcy0+cmVtb3ZlKHJlcXVlc3RVcmwpOworICAgICAgICAgICAgbV9z
ZXNzaW9uUHJlZmV0Y2hlcy5yZW1vdmUocmVxdWVzdFVSTCk7CiAgICAgICAgICAgICBtX3Nlc3Np
b25FeHBpcmF0aW9uTGlzdC5yZW1vdmVGaXJzdCgpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgbV9leHBpcmF0aW9uVGltZXIuc3RhcnRPbmVTaG90KGV4cGlyYXRpb25UaW1lb3V0IC0g
ZWxhcHNlZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L1ByZWZldGNoQ2FjaGUuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvUHJl
ZmV0Y2hDYWNoZS5oCmluZGV4IGEyNTE1MjBiMzFlYWM5MjFjMjJkMzExNTFkNmQyMzFhMWJlZDEz
OGMuLjY0Mjc2NTdhMmI0NWUxZDg0NjQzMzQzNGM3MzM5NjkyZmEyN2Y5NzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvUHJlZmV0Y2hDYWNoZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvUHJlZmV0Y2hDYWNoZS5oCkBAIC02
NSw3ICs2NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbGVhckV4cGlyZWRFbnRyaWVzKCk7CiAK
ICAgICB1c2luZyBQcmVmZXRjaEVudHJpZXNNYXAgPSBIYXNoTWFwPFVSTCwgc3RkOjp1bmlxdWVf
cHRyPEVudHJ5Pj47Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFByZWZldGNoRW50cmllc01hcD4gbV9z
ZXNzaW9uUHJlZmV0Y2hlczsKKyAgICBQcmVmZXRjaEVudHJpZXNNYXAgbV9zZXNzaW9uUHJlZmV0
Y2hlczsKIAogICAgIHVzaW5nIFNlc3Npb25QcmVmZXRjaEV4cGlyYXRpb25MaXN0ID0gRGVxdWU8
c3RkOjp0dXBsZTxVUkwsIFdhbGxUaW1lPj47CiAgICAgU2Vzc2lvblByZWZldGNoRXhwaXJhdGlv
bkxpc3QgbV9zZXNzaW9uRXhwaXJhdGlvbkxpc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL0NvY29hL1dLV2ViUHJvY2Vzc1BsdWdJbkhp
dFRlc3RSZXN1bHQubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL0NvY29hL1dLV2ViUHJvY2Vzc1BsdWdJbkhpdFRlc3RSZXN1bHQubW0KaW5kZXggOTBhMTNj
ODU1MDM3ZTcxNjJhMjFlNWMzOThlOWNhMTVmYWY1OTQ2OC4uZDc1ZGUyZGNhNzUyOTgxNWUyYjdm
YmQ4ZWRmOGI3Yjk5MzdkOGY3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9Db2NvYS9XS1dlYlByb2Nlc3NQbHVnSW5IaXRUZXN0UmVzdWx0
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvQ29j
b2EvV0tXZWJQcm9jZXNzUGx1Z0luSGl0VGVzdFJlc3VsdC5tbQpAQCAtMjcsNiArMjcsNyBAQAog
I2ltcG9ydCAiV0tXZWJQcm9jZXNzUGx1Z0luSGl0VGVzdFJlc3VsdEludGVybmFsLmgiCiAKICNp
bXBvcnQgIldLV2ViUHJvY2Vzc1BsdWdJbk5vZGVIYW5kbGVJbnRlcm5hbC5oIgorI2ltcG9ydCA8
V2ViQ29yZS9TY3JvbGxiYXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZU9iakNFeHRyYXMu
aD4KIAogQGltcGxlbWVudGF0aW9uIFdLV2ViUHJvY2Vzc1BsdWdJbkhpdFRlc3RSZXN1bHQgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
bGliL1dlYktpdFdlYkhpdFRlc3RSZXN1bHQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9nbGliL1dlYktpdFdlYkhpdFRlc3RSZXN1bHQuY3BwCmluZGV4
IDIzZGUyYmE3NDA1YWY3M2I2NzFjYWNkMGQxYTBlZGI0MDBkYTUzZDguLmQ0MzM4YjEwZWVmZWQ1
MjJjN2QxNWQ5ZTMyNjQ2NmE4M2QyODRmOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ2xpYi9XZWJLaXRXZWJIaXRUZXN0UmVzdWx0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2dsaWIv
V2ViS2l0V2ViSGl0VGVzdFJlc3VsdC5jcHAKQEAgLTIzLDYgKzIzLDggQEAKICNpbmNsdWRlICJJ
bmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJp
dmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFdlYkhpdFRlc3RSZXN1bHRQcml2YXRlLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9FbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxiYXIuaD4K
ICNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9XVEZHVHlwZS5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbSBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KaW5kZXggMDRhNDBkZjAyZTQ3NDQ4
ZjViOThjODlkZjQ4NWI3MDZmMGJlMDM3Yy4uMGUwN2E5MDA2YWU0MmI2MDFjOWY3YzIyMTNiNjYz
ODRiYmVjMzg1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMv
UERGL1BERlBsdWdpbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9Q
REYvUERGUGx1Z2luLm1tCkBAIC0xMzEzLDkgKzEzMTMsOSBAQCB2b2lkIFBERlBsdWdpbjo6dXBk
YXRlU2Nyb2xsYmFycygpCiAgICAgYm9vbCBoYXNTY3JvbGxiYXJzID0gbV9ob3Jpem9udGFsU2Ny
b2xsYmFyIHx8IG1fdmVydGljYWxTY3JvbGxiYXI7CiAgICAgaWYgKGhhZFNjcm9sbGJhcnMgIT0g
aGFzU2Nyb2xsYmFycykgewogICAgICAgICBpZiAoaGFzU2Nyb2xsYmFycykKLSAgICAgICAgICAg
IGZyYW1lVmlldy0+YWRkU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisgICAgICAgICAgICBmcmFtZVZp
ZXctPmFkZFNjcm9sbGFibGVBcmVhKCp0aGlzKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ZnJhbWVWaWV3LT5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKyAgICAgICAgICAgIGZyYW1l
Vmlldy0+cmVtb3ZlU2Nyb2xsYWJsZUFyZWEoKnRoaXMpOwogCiAgICAgICAgIGZyYW1lVmlldy0+
c2V0TmVlZHNMYXlvdXRBZnRlclZpZXdDb25maWd1cmF0aW9uQ2hhbmdlKCk7CiAgICAgfQpAQCAt
MTg5MSw3ICsxODkxLDcgQEAgdm9pZCBQREZQbHVnaW46OndpbGxEZXRhY2hSZW5kZXJlcigpCiAg
ICAgaWYgKCFtX2ZyYW1lIHx8ICFtX2ZyYW1lLT5jb3JlRnJhbWUoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIGlmIChhdXRvKiBmcmFtZVZpZXcgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+dmlldygp
KQotICAgICAgICBmcmFtZVZpZXctPnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworICAgICAg
ICBmcmFtZVZpZXctPnJlbW92ZVNjcm9sbGFibGVBcmVhKCp0aGlzKTsKIH0KIAogdm9pZCBQREZQ
bHVnaW46OmRlc3Ryb3koKQpAQCAtMTkxMiw3ICsxOTEyLDcgQEAgdm9pZCBQREZQbHVnaW46OmRl
c3Ryb3koKQogICAgIG1fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpLmRlbGVnYXRlID0gMDsKIAog
ICAgIGlmIChhdXRvKiBmcmFtZVZpZXcgPSBtX2ZyYW1lICYmIG1fZnJhbWUtPmNvcmVGcmFtZSgp
ID8gbV9mcmFtZS0+Y29yZUZyYW1lKCktPnZpZXcoKSA6IG51bGxwdHIpCi0gICAgICAgIGZyYW1l
Vmlldy0+cmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisgICAgICAgIGZyYW1lVmlldy0+cmVt
b3ZlU2Nyb2xsYWJsZUFyZWEoKnRoaXMpOwogCiAgICAgbV9hY3RpdmVBbm5vdGF0aW9uID0gbnVs
bHB0cjsKICAgICBtX2Fubm90YXRpb25Db250YWluZXIgPSBudWxscHRyOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVy
cmlkZXMuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBh
c3RlYm9hcmRPdmVycmlkZXMuY3BwCmluZGV4IDY5ZjBhZTgyNzk1MDdiNzI5NjVmNjVjMjE2ODcz
YzQ4MWFkZjRkNjAuLmViNjk0NmU2Nzk3M2Q4NTdiYWMyZGU3ODlmMWZmMWFjY2FiNTU0ZDkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQYXN0
ZWJvYXJkT3ZlcnJpZGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViUGFzdGVib2FyZE92ZXJyaWRlcy5jcHAKQEAgLTQyLDE0ICs0Miw3IEBAIFdl
YlBhc3RlYm9hcmRPdmVycmlkZXM6OldlYlBhc3RlYm9hcmRPdmVycmlkZXMoKQogCiB2b2lkIFdl
YlBhc3RlYm9hcmRPdmVycmlkZXM6OmFkZE92ZXJyaWRlKGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZE5hbWUsIGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQog
ewotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9vdmVycmlkZXNNYXAuYWRkKHBhc3RlYm9hcmROYW1l
LCBudWxscHRyKTsKLQotICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8SGFzaE1hcDxTdHJpbmcsIFZlY3Rvcjx1aW50OF90Pj4+IHR5cGVNYXAg
PSBtYWtlVW5pcXVlPEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8dWludDhfdD4+PigpOwotICAgICAg
ICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gV1RGTW92ZSh0eXBlTWFwKTsKLSAgICB9Ci0K
LSAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5zZXQodHlwZSwgZGF0YSk7CisgICAgbV9v
dmVycmlkZXNNYXAuYWRkKHBhc3RlYm9hcmROYW1lLCBIYXNoTWFwPFN0cmluZywgVmVjdG9yPHVp
bnQ4X3Q+PiB7IH0pLml0ZXJhdG9yLT52YWx1ZS5zZXQodHlwZSwgZGF0YSk7CiB9CiAKIHZvaWQg
V2ViUGFzdGVib2FyZE92ZXJyaWRlczo6cmVtb3ZlT3ZlcnJpZGUoY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiB0eXBlKQpAQCAtNTgsMjkgKzUxLDIwIEBAIHZvaWQg
V2ViUGFzdGVib2FyZE92ZXJyaWRlczo6cmVtb3ZlT3ZlcnJpZGUoY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkTmFtZSwgY29uc3QKICAgICBpZiAoaXQgPT0gbV9vdmVycmlkZXNNYXAuZW5kKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChpdC0+dmFsdWUpOwotCi0gICAgaXQtPnZhbHVl
LT5yZW1vdmUodHlwZSk7CisgICAgaXQtPnZhbHVlLnJlbW92ZSh0eXBlKTsKIAogICAgIC8vIElm
IHRoaXMgd2FzIHRoZSBsYXN0IG92ZXJyaWRlIGZvciB0aGlzIHBhc3RlYm9hcmQsIHJlbW92ZSBp
dHMgcmVjb3JkIGNvbXBsZXRlbHkuCi0gICAgaWYgKGl0LT52YWx1ZS0+aXNFbXB0eSgpKQorICAg
IGlmIChpdC0+dmFsdWUuaXNFbXB0eSgpKQogICAgICAgICBtX292ZXJyaWRlc01hcC5yZW1vdmUo
aXQpOwogfQogCiBWZWN0b3I8U3RyaW5nPiBXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpvdmVycmlk
ZGVuVHlwZXMoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKLSAgICBWZWN0b3I8U3Ry
aW5nPiByZXN1bHQ7Ci0KICAgICBhdXRvIGl0ID0gbV9vdmVycmlkZXNNYXAuZmluZChwYXN0ZWJv
YXJkTmFtZSk7CiAgICAgaWYgKGl0ID09IG1fb3ZlcnJpZGVzTWFwLmVuZCgpKQotICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotCi0gICAgQVNTRVJUKGl0LT52YWx1ZSk7Ci0KLSAgICBmb3IgKFN0cmlu
ZyYgdHlwZSA6IGl0LT52YWx1ZS0+a2V5cygpKQotICAgICAgICByZXN1bHQuYXBwZW5kKHR5cGUp
OworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4g
Y29weVRvVmVjdG9yKGl0LT52YWx1ZS5rZXlzKCkpOwogfQogCiBib29sIFdlYlBhc3RlYm9hcmRP
dmVycmlkZXM6OmdldERhdGFGb3JPdmVycmlkZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
LCBjb25zdCBTdHJpbmcmIHR5cGUsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkgY29uc3QKQEAgLTg5
LDggKzczLDggQEAgYm9vbCBXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpnZXREYXRhRm9yT3ZlcnJp
ZGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY28KICAgICBpZiAocGFzdGVib2FyZEl0
ZXJhdG9yID09IG1fb3ZlcnJpZGVzTWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBhdXRvIHR5cGVJdGVyYXRvciA9IHBhc3RlYm9hcmRJdGVyYXRvci0+dmFsdWUtPmZpbmQo
dHlwZSk7Ci0gICAgaWYgKHR5cGVJdGVyYXRvciA9PSBwYXN0ZWJvYXJkSXRlcmF0b3ItPnZhbHVl
LT5lbmQoKSkKKyAgICBhdXRvIHR5cGVJdGVyYXRvciA9IHBhc3RlYm9hcmRJdGVyYXRvci0+dmFs
dWUuZmluZCh0eXBlKTsKKyAgICBpZiAodHlwZUl0ZXJhdG9yID09IHBhc3RlYm9hcmRJdGVyYXRv
ci0+dmFsdWUuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGRhdGEgPSB0eXBl
SXRlcmF0b3ItPnZhbHVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMuaCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmgKaW5kZXggZWMw
OTMzZTUxMjVlNzk2MDQ0Y2I4MmMzOGIyNGM1YjIyZWRlYjZjNy4uNTg4M2U1ODA0OTVhNTRmZGEw
M2Q2ZTQ0Njc5MDMzY2Y3NWFlYzEwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGFzdGVib2FyZE92ZXJyaWRlcy5o
CkBAIC01MCw3ICs1MCw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBUaGUgbV9vdmVycmlkZXNNYXAg
bWFwcyBzdHJpbmcgcGFzdGVib2FyZCBuYW1lcyB0byBwYXN0ZWJvYXJkIGVudHJpZXMuCiAgICAg
Ly8gRWFjaCBwYXN0ZWJvYXJkIGVudHJ5IGlzIGEgbWFwIG9mIGEgc3RyaW5nIHR5cGUgdG8gYSBk
YXRhIGJ1ZmZlci4KLSAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPEhhc2hNYXA8
U3RyaW5nLCBWZWN0b3I8dWludDhfdD4+Pj4gbV9vdmVycmlkZXNNYXA7CisgICAgSGFzaE1hcDxT
dHJpbmcsIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8dWludDhfdD4+PiBtX292ZXJyaWRlc01hcDsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Lmgg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkZyYW1lTmV0
d29ya2luZ0NvbnRleHQuaAppbmRleCA5YmY1ODdmZTA2ZDE2NTMyZjdiNDdmOGZjYTMyOTVlYjMx
ZDczNDUyLi43NjVkNTVmMjRhMTZlMWIzMDU2ZWNlYmZjMWFkZGEwODQzZGNlMmI3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkZyYW1l
TmV0d29ya2luZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvbWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaApAQCAtMzIsNyArMzIsNyBA
QCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogc3RydWN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
OwogCi1jbGFzcyBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0IDogcHVibGljIFdlYkNvcmU6OkZy
YW1lTmV0d29ya2luZ0NvbnRleHQgeworY2xhc3MgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dCBm
aW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpGcmFtZU5ldHdvcmtpbmdDb250ZXh0IHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUmVmPFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ+IGNyZWF0ZShXZWJGcmFt
ZSogZnJhbWUpCiAgICAgewpAQCAtNTAsMTIgKzUwLDEyIEBAIHByaXZhdGU6CiAgICAgewogICAg
IH0KIAotICAgIGJvb2wgbG9jYWxGaWxlQ29udGVudFNuaWZmaW5nRW5hYmxlZCgpIGNvbnN0IG92
ZXJyaWRlOwotICAgIFNjaGVkdWxlUGFpckhhc2hTZXQqIHNjaGVkdWxlZFJ1bkxvb3BQYWlycygp
IGNvbnN0IG92ZXJyaWRlOwotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHNvdXJjZUFwcGxpY2F0
aW9uQXVkaXREYXRhKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIHNvdXJjZUFwcGxpY2F0
aW9uSWRlbnRpZmllcigpIGNvbnN0IG92ZXJyaWRlOwotICAgIFdlYkNvcmU6OlJlc291cmNlRXJy
b3IgYmxvY2tlZEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpIGNvbnN0IG92
ZXJyaWRlOwotICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogc3RvcmFnZVNlc3Np
b24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgYm9vbCBsb2NhbEZp
bGVDb250ZW50U25pZmZpbmdFbmFibGVkKCkgY29uc3QgZmluYWw7CisgICAgY29uc3QgU2NoZWR1
bGVQYWlySGFzaFNldCogc2NoZWR1bGVkUnVuTG9vcFBhaXJzKCkgY29uc3QgZmluYWw7CisgICAg
UmV0YWluUHRyPENGRGF0YVJlZj4gc291cmNlQXBwbGljYXRpb25BdWRpdERhdGEoKSBjb25zdCBm
aW5hbDsKKyAgICBTdHJpbmcgc291cmNlQXBwbGljYXRpb25JZGVudGlmaWVyKCkgY29uc3QgZmlu
YWw7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBibG9ja2VkRXJyb3IoY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JikgY29uc3QgZmluYWw7CisgICAgV2ViQ29yZTo6TmV0d29ya1N0
b3JhZ2VTZXNzaW9uKiBzdG9yYWdlU2Vzc2lvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG51bGxw
dHI7IH0KIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9tYWMvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbSBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4
dC5tbQppbmRleCBmZDJjOTI3OGMzNWE1ZDZjYzc2NTZkOWFmMDZhYmQ5OGEwMzI0MmExLi4xZWJm
Zjg1OTk3ZTBjYjFiY2M3ZDNlMDRiMjI5YzFkZjYwODJmMzhkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkZyYW1lTmV0d29ya2luZ0Nv
bnRleHQubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21h
Yy9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1tCkBAIC00NywxMSArNDcsMTEgQEAgYm9vbCBX
ZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Ojpsb2NhbEZpbGVDb250ZW50U25pZmZpbmdFbmFibGVk
KCkgY29uc3QKICAgICByZXR1cm4gZnJhbWUoKSAmJiBmcmFtZSgpLT5zZXR0aW5ncygpLmxvY2Fs
RmlsZUNvbnRlbnRTbmlmZmluZ0VuYWJsZWQoKTsKIH0KIAotU2NoZWR1bGVQYWlySGFzaFNldCog
V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c2NoZWR1bGVkUnVuTG9vcFBhaXJzKCkgY29uc3QK
K2NvbnN0IFNjaGVkdWxlUGFpckhhc2hTZXQqIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnNj
aGVkdWxlZFJ1bkxvb3BQYWlycygpIGNvbnN0CiB7CiAgICAgaWYgKCFmcmFtZSgpIHx8ICFmcmFt
ZSgpLT5wYWdlKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBmcmFtZSgp
LT5wYWdlKCktPnNjaGVkdWxlZFJ1bkxvb3BQYWlycygpOworICAgIHJldHVybiAmZnJhbWUoKS0+
cGFnZSgpLT5zY2hlZHVsZWRSdW5Mb29wUGFpcnMoKTsKIH0KIAogUmV0YWluUHRyPENGRGF0YVJl
Zj4gV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c291cmNlQXBwbGljYXRpb25BdWRpdERhdGEo
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApp
bmRleCBjM2NiOGI3ODQ1NjgwZDE2ZGYxYTY3MThlNjZmNDc4ZTllOTg4YjU2Li5hNmFhM2NmM2M4
YmUyYjkxM2VkOGUzZDcyYzZiODE1YWViNWVmZjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtNTU5MiwxMiArNTU5Miw3IEBAIHN0YXRpYyBi
b29sIHBhZ2VDb250YWluc0FueUhvcml6b250YWxTY3JvbGxiYXJzKEZyYW1lKiBtYWluRnJhbWUp
CiAgICAgICAgIGlmICghZnJhbWVWaWV3KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAg
ICAgY29uc3QgSGFzaFNldDxTY3JvbGxhYmxlQXJlYSo+KiBzY3JvbGxhYmxlQXJlYXMgPSBmcmFt
ZVZpZXctPnNjcm9sbGFibGVBcmVhcygpOwotICAgICAgICBpZiAoIXNjcm9sbGFibGVBcmVhcykK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGZvciAoSGFzaFNldDxTY3JvbGxhYmxl
QXJlYSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHNjcm9sbGFibGVBcmVhcy0+YmVnaW4oKSwgZW5k
ID0gc2Nyb2xsYWJsZUFyZWFzLT5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAg
ICBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEgPSAqaXQ7CisgICAgICAgIGZvciAoYXV0
byogc2Nyb2xsYWJsZUFyZWEgOiBmcmFtZVZpZXctPnNjcm9sbGFibGVBcmVhcygpKSB7CiAgICAg
ICAgICAgICBpZiAoIXNjcm9sbGFibGVBcmVhLT5zY3JvbGxiYXJzQ2FuQmVBY3RpdmUoKSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvSGlz
dG9yeS9XZWJIaXN0b3J5Lm1tCmluZGV4IGYwNDZhMTkzMDliZTJmNGIyM2Y2OWNjN2EwYmQzNzVj
MWM1N2QxOGEuLjc0OWRlMjkxOWZlODMxMGQzNDE4MzM1MTM2MjJlZTRkZjAzNWQzMTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeS5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9IaXN0b3J5L1dlYkhpc3RvcnkubW0KQEAgLTQxLDgg
KzQxLDYgQEAKICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVRocmVhZE1lc3NhZ2UuaD4KICNlbmRp
ZgogCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQogdHlwZWRlZiBpbnQ2NF90IFdlYkhpc3Rv
cnlEYXRlS2V5OwogdHlwZWRlZiBIYXNoTWFwPFdlYkhpc3RvcnlEYXRlS2V5LCBSZXRhaW5QdHI8
TlNNdXRhYmxlQXJyYXk+PiBEYXRlVG9FbnRyaWVzTWFwOwogCkBAIC02MCwyMCArNTgsMjAgQEAg
c3RhdGljIFJldGFpblB0cjxXZWJIaXN0b3J5PiYgc2hhcmVkSGlzdG9yeSgpCiAgICAgcmV0dXJu
IF9zaGFyZWRIaXN0b3J5OwogfQogCi1OU1N0cmluZyAqRmlsZVZlcnNpb25LZXkgPSBAIldlYkhp
c3RvcnlGaWxlVmVyc2lvbiI7Ci1OU1N0cmluZyAqRGF0ZXNBcnJheUtleSA9IEAiV2ViSGlzdG9y
eURhdGVzIjsKK2NvbnN0ZXhwciBOU1N0cmluZyAqRmlsZVZlcnNpb25LZXkgPSBAIldlYkhpc3Rv
cnlGaWxlVmVyc2lvbiI7Citjb25zdGV4cHIgTlNTdHJpbmcgKkRhdGVzQXJyYXlLZXkgPSBAIldl
Ykhpc3RvcnlEYXRlcyI7CiAKLSNkZWZpbmUgY3VycmVudEZpbGVWZXJzaW9uIDEKK2NvbnN0ZXhw
ciBpbnQgY3VycmVudEZpbGVWZXJzaW9uID0gMTsKIAogY2xhc3MgV2ViSGlzdG9yeVdyaXRlciA6
IHB1YmxpYyBIaXN0b3J5UHJvcGVydHlMaXN0V3JpdGVyIHsKIHB1YmxpYzoKLSAgICBXZWJIaXN0
b3J5V3JpdGVyKERhdGVUb0VudHJpZXNNYXAqKTsKKyAgICBleHBsaWNpdCBXZWJIaXN0b3J5V3Jp
dGVyKERhdGVUb0VudHJpZXNNYXAmKTsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgd3Jp
dGVIaXN0b3J5SXRlbXMoQmluYXJ5UHJvcGVydHlMaXN0T2JqZWN0U3RyZWFtJik7CiAKLSAgICBE
YXRlVG9FbnRyaWVzTWFwKiBtX2VudHJpZXNCeURhdGU7Ci0gICAgVmVjdG9yPGludD4gbV9kYXRl
S2V5czsKKyAgICBEYXRlVG9FbnRyaWVzTWFwJiBtX2VudHJpZXNCeURhdGU7CisgICAgVmVjdG9y
PFdlYkhpc3RvcnlEYXRlS2V5PiBtX2RhdGVLZXlzOwogfTsKIAogQGludGVyZmFjZSBXZWJIaXN0
b3J5ICgpCkBAIC04Myw3ICs4MSw3IEBAIEBlbmQKIEBpbnRlcmZhY2UgV2ViSGlzdG9yeVByaXZh
dGUgOiBOU09iamVjdCB7CiBAcHJpdmF0ZQogICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9u
YXJ5PiBfZW50cmllc0J5VVJMOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxEYXRlVG9FbnRyaWVzTWFw
PiBfZW50cmllc0J5RGF0ZTsKKyAgICBEYXRlVG9FbnRyaWVzTWFwIF9lbnRyaWVzQnlEYXRlOwog
ICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gX29yZGVyZWRMYXN0VmlzaXRlZERheXM7CiAg
ICAgQk9PTCBpdGVtTGltaXRTZXQ7CiAgICAgaW50IGl0ZW1MaW1pdDsKQEAgLTEzNSw4ICsxMzMs
NiBAQCAtIChpZClpbml0CiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCiAgICAgX2VudHJpZXNC
eVVSTCA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7Ci0gICAg
X2VudHJpZXNCeURhdGUgPSBtYWtlVW5pcXVlPERhdGVUb0VudHJpZXNNYXA+KCk7Ci0KICAgICBy
ZXR1cm4gc2VsZjsKIH0KIApAQCAtMTc5LDE1ICsxNzUsMTUgQEAgLSAoQk9PTClmaW5kS2V5OihX
ZWJIaXN0b3J5RGF0ZUtleSopa2V5IGZvckRheTooTlNUaW1lSW50ZXJ2YWwpZGF0ZQogewogICAg
IEFTU0VSVF9BUkcoa2V5LCBrZXkpOwogICAgICprZXkgPSBkYXRlS2V5KGRhdGUpOwotICAgIHJl
dHVybiBfZW50cmllc0J5RGF0ZS0+Y29udGFpbnMoKmtleSk7CisgICAgcmV0dXJuIF9lbnRyaWVz
QnlEYXRlLmNvbnRhaW5zKCprZXkpOwogfQogCiAtICh2b2lkKWluc2VydEl0ZW06KFdlYkhpc3Rv
cnlJdGVtICopZW50cnkgZm9yRGF0ZUtleTooV2ViSGlzdG9yeURhdGVLZXkpZGF0ZUtleQogewog
ICAgIEFTU0VSVF9BUkcoZW50cnksIGVudHJ5ICE9IG5pbCk7Ci0gICAgQVNTRVJUKF9lbnRyaWVz
QnlEYXRlLT5jb250YWlucyhkYXRlS2V5KSk7CisgICAgQVNTRVJUKF9lbnRyaWVzQnlEYXRlLmNv
bnRhaW5zKGRhdGVLZXkpKTsKIAotICAgIE5TTXV0YWJsZUFycmF5ICplbnRyaWVzRm9yRGF0ZSA9
IF9lbnRyaWVzQnlEYXRlLT5nZXQoZGF0ZUtleSkuZ2V0KCk7CisgICAgTlNNdXRhYmxlQXJyYXkg
KmVudHJpZXNGb3JEYXRlID0gX2VudHJpZXNCeURhdGUuZ2V0KGRhdGVLZXkpLmdldCgpOwogICAg
IE5TVGltZUludGVydmFsIGVudHJ5RGF0ZSA9IFtlbnRyeSBsYXN0VmlzaXRlZFRpbWVJbnRlcnZh
bF07CiAKICAgICB1bnNpZ25lZCBjb3VudCA9IFtlbnRyaWVzRm9yRGF0ZSBjb3VudF07CkBAIC0y
MjYsMTMgKzIyMiwxMyBAQCAtIChCT09MKXJlbW92ZUl0ZW1Gcm9tRGF0ZUNhY2hlczooV2ViSGlz
dG9yeUl0ZW0gKillbnRyeQogICAgIGlmICghZm91bmREYXRlKQogICAgICAgICByZXR1cm4gTk87
CiAKLSAgICBEYXRlVG9FbnRyaWVzTWFwOjppdGVyYXRvciBpdCA9IF9lbnRyaWVzQnlEYXRlLT5m
aW5kKGRhdGVLZXkpOworICAgIGF1dG8gaXQgPSBfZW50cmllc0J5RGF0ZS5maW5kKGRhdGVLZXkp
OwogICAgIE5TTXV0YWJsZUFycmF5ICplbnRyaWVzRm9yRGF0ZSA9IGl0LT52YWx1ZS5nZXQoKTsK
ICAgICBbZW50cmllc0ZvckRhdGUgcmVtb3ZlT2JqZWN0SWRlbnRpY2FsVG86ZW50cnldOwogICAg
IAogICAgIC8vIHJlbW92ZSB0aGlzIGRhdGUgZW50aXJlbHkgaWYgdGhlcmUgYXJlIG5vIG90aGVy
IGVudHJpZXMgb24gaXQKICAgICBpZiAoW2VudHJpZXNGb3JEYXRlIGNvdW50XSA9PSAwKSB7Ci0g
ICAgICAgIF9lbnRyaWVzQnlEYXRlLT5yZW1vdmUoaXQpOworICAgICAgICBfZW50cmllc0J5RGF0
ZS5yZW1vdmUoaXQpOwogICAgICAgICAvLyBDbGVhciBfb3JkZXJlZExhc3RWaXNpdGVkRGF5cyBz
byBpdCB3aWxsIGJlIHJlZ2VuZXJhdGVkIHdoZW4gbmV4dCByZXF1ZXN0ZWQuCiAgICAgICAgIF9v
cmRlcmVkTGFzdFZpc2l0ZWREYXlzID0gbmlsOwogICAgIH0KQEAgLTI3MCw3ICsyNjYsNyBAQCAt
ICh2b2lkKWFkZEl0ZW1Ub0RhdGVDYWNoZXM6KFdlYkhpc3RvcnlJdGVtICopZW50cnkKICAgICBl
bHNlIHsKICAgICAgICAgLy8gbm8gb3RoZXIgZW50cmllcyBleGlzdCBmb3IgdGhpcyBkYXRlCiAg
ICAgICAgIGF1dG8gZW50cmllcyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5p
dFdpdGhPYmplY3RzOiZlbnRyeSBjb3VudDoxXSk7Ci0gICAgICAgIF9lbnRyaWVzQnlEYXRlLT5z
ZXQoZGF0ZUtleSwgZW50cmllcy5nZXQoKSk7CisgICAgICAgIF9lbnRyaWVzQnlEYXRlLnNldChk
YXRlS2V5LCBlbnRyaWVzLmdldCgpKTsKICAgICAgICAgLy8gQ2xlYXIgX29yZGVyZWRMYXN0Vmlz
aXRlZERheXMgc28gaXQgd2lsbCBiZSByZWdlbmVyYXRlZCB3aGVuIG5leHQgcmVxdWVzdGVkLgog
ICAgICAgICBfb3JkZXJlZExhc3RWaXNpdGVkRGF5cyA9IG5pbDsKICAgICB9CkBAIC0zNDYsOCAr
MzQyLDggQEAgLSAodm9pZClyZWJ1aWxkSGlzdG9yeUJ5RGF5SWZOZWVkZWQ6KFdlYkhpc3Rvcnkg
Kil3ZWJIaXN0b3J5CiB7CiAgICAgLy8gV2UgY2xlYXIgYWxsIHRoZSB2YWx1ZXMgdG8gcHJlc2Vu
dCBhIGNvbnNpc3RlbnQgc3RhdGUgd2hlbiBzZW5kaW5nIHRoZSBub3RpZmljYXRpb25zLgogICAg
IC8vIFdlIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIGVudHJpZXMgZm9yIHJlYnVpbGRpbmcgdGhl
IGhpc3RvcnkgYWZ0ZXIgdGhlIG5vdGlmaWNhdGlvbi4KLSAgICBhdXRvIGVudHJ5QXJyYXlzID0g
Y29weVRvVmVjdG9yKF9lbnRyaWVzQnlEYXRlLT52YWx1ZXMoKSk7Ci0gICAgX2VudHJpZXNCeURh
dGUtPmNsZWFyKCk7CisgICAgYXV0byBlbnRyeUFycmF5cyA9IGNvcHlUb1ZlY3RvcihfZW50cmll
c0J5RGF0ZS52YWx1ZXMoKSk7CisgICAgX2VudHJpZXNCeURhdGUuY2xlYXIoKTsKICAgICAKICAg
ICBhdXRvIGVudHJpZXNCeVVSTCA9IHN0ZDo6ZXhjaGFuZ2UoX2VudHJpZXNCeVVSTCwgbmlsKTsK
ICAgICAKQEAgLTM5NSwxMCArMzkxLDEwIEBAIC0gKEJPT0wpcmVtb3ZlSXRlbXM6KE5TQXJyYXkg
KillbnRyaWVzCiAKIC0gKEJPT0wpcmVtb3ZlQWxsSXRlbXMKIHsKLSAgICBpZiAoX2VudHJpZXNC
eURhdGUtPmlzRW1wdHkoKSkKKyAgICBpZiAoX2VudHJpZXNCeURhdGUuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gTk87CiAKLSAgICBfZW50cmllc0J5RGF0ZS0+Y2xlYXIoKTsKKyAgICBfZW50
cmllc0J5RGF0ZS5jbGVhcigpOwogICAgIFtfZW50cmllc0J5VVJMIHJlbW92ZUFsbE9iamVjdHNd
OwogCiAgICAgLy8gQ2xlYXIgX29yZGVyZWRMYXN0VmlzaXRlZERheXMgc28gaXQgd2lsbCBiZSBy
ZWdlbmVyYXRlZCB3aGVuIG5leHQgcmVxdWVzdGVkLgpAQCAtNDI4LDEyICs0MjQsNyBAQCBBTExP
V19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgogLSAoTlNBcnJheSAqKW9yZGVyZWRMYXN0
VmlzaXRlZERheXMKIHsKICAgICBpZiAoIV9vcmRlcmVkTGFzdFZpc2l0ZWREYXlzKSB7Ci0gICAg
ICAgIFZlY3RvcjxpbnQ+IGRheXNBc1RpbWVJbnRlcnZhbHM7Ci0gICAgICAgIGRheXNBc1RpbWVJ
bnRlcnZhbHMucmVzZXJ2ZUNhcGFjaXR5KF9lbnRyaWVzQnlEYXRlLT5zaXplKCkpOwotICAgICAg
ICBEYXRlVG9FbnRyaWVzTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBfZW50cmllc0J5RGF0ZS0+
ZW5kKCk7Ci0gICAgICAgIGZvciAoRGF0ZVRvRW50cmllc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBfZW50cmllc0J5RGF0ZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAg
ZGF5c0FzVGltZUludGVydmFscy5hcHBlbmQoaXQtPmtleSk7Ci0KKyAgICAgICAgYXV0byBkYXlz
QXNUaW1lSW50ZXJ2YWxzID0gY29weVRvVmVjdG9yKF9lbnRyaWVzQnlEYXRlLmtleXMoKSk7CiAg
ICAgICAgIHN0ZDo6c29ydChkYXlzQXNUaW1lSW50ZXJ2YWxzLmJlZ2luKCksIGRheXNBc1RpbWVJ
bnRlcnZhbHMuZW5kKCkpOwogICAgICAgICBzaXplX3QgY291bnQgPSBkYXlzQXNUaW1lSW50ZXJ2
YWxzLnNpemUoKTsKICAgICAgICAgX29yZGVyZWRMYXN0VmlzaXRlZERheXMgPSBhZG9wdE5TKFtb
TlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6Y291bnRdKTsKQEAgLTQ1MSw3
ICs0NDIsNyBAQCAtIChOU0FycmF5ICopb3JkZXJlZEl0ZW1zTGFzdFZpc2l0ZWRPbkRheTooTlND
YWxlbmRhckRhdGUgKilkYXRlCiAgICAgV2ViSGlzdG9yeURhdGVLZXkgZGF0ZUtleTsKICAgICBp
ZiAoIVtzZWxmIGZpbmRLZXk6JmRhdGVLZXkgZm9yRGF5OltkYXRlIHRpbWVJbnRlcnZhbFNpbmNl
UmVmZXJlbmNlRGF0ZV1dKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBfZW50cmll
c0J5RGF0ZS0+Z2V0KGRhdGVLZXkpLmdldCgpOworICAgIHJldHVybiBfZW50cmllc0J5RGF0ZS5n
ZXQoZGF0ZUtleSkuZ2V0KCk7CiB9CiAKIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VO
RApAQCAtNjE0LDE2ICs2MDUsMTYgQEAgLSAoQk9PTClsb2FkRnJvbVVSTDooTlNVUkwgKilVUkwg
Y29sbGVjdERpc2NhcmRlZEl0ZW1zSW50bzooTlNNdXRhYmxlQXJyYXkgKilkaXMKIAogLSAoTlNE
YXRhICopZGF0YQogewotICAgIGlmIChfZW50cmllc0J5RGF0ZS0+aXNFbXB0eSgpKSB7CisgICAg
aWYgKF9lbnRyaWVzQnlEYXRlLmlzRW1wdHkoKSkgewogICAgICAgICBzdGF0aWMgTlNEYXRhICpl
bXB0eUhpc3RvcnlEYXRhID0gW1tOU0RhdGEgYWxsb2NdIGluaXRdOwogICAgICAgICByZXR1cm4g
ZW1wdHlIaXN0b3J5RGF0YTsKICAgICB9CiAKICAgICAvLyBJZ25vcmVzIHRoZSBkYXRlIGFuZCBp
dGVtIGNvdW50IGxpbWl0czsgdGhlc2UgYXJlIHJlc3BlY3RlZCB3aGVuIGxvYWRpbmcgaW5zdGVh
ZCBvZiB3aGVuIHNhdmluZywgc28KICAgICAvLyB0aGF0IGNsaWVudHMgY2FuIGxlYXJuIG9mIGRp
c2NhcmRlZCBpdGVtcyBieSBsaXN0ZW5pbmcgdG8gV2ViSGlzdG9yeUl0ZW1zRGlzY2FyZGVkV2hp
bGVMb2FkaW5nTm90aWZpY2F0aW9uLgotICAgIFdlYkhpc3RvcnlXcml0ZXIgd3JpdGVyKF9lbnRy
aWVzQnlEYXRlLmdldCgpKTsKKyAgICBXZWJIaXN0b3J5V3JpdGVyIHdyaXRlcihfZW50cmllc0J5
RGF0ZSk7CiAgICAgd3JpdGVyLndyaXRlUHJvcGVydHlMaXN0KCk7Ci0gICAgcmV0dXJuIHJldGFp
blB0cigoTlNEYXRhICopd3JpdGVyLnJlbGVhc2VEYXRhKCkuZ2V0KCkpLmF1dG9yZWxlYXNlKCk7
CisgICAgcmV0dXJuIHdyaXRlci5yZWxlYXNlRGF0YSgpLmJyaWRnaW5nQXV0b3JlbGVhc2UoKTsK
IH0KIAogLSAoQk9PTClzYXZlVG9VUkw6KE5TVVJMICopVVJMIGVycm9yOihOU0Vycm9yICoqKWVy
cm9yCkBAIC04NTEsNyArODQyLDcgQEAgLSAodm9pZClfdmlzaXRlZFVSTDooTlNVUkwgKil1cmwg
d2l0aFRpdGxlOihOU1N0cmluZyAqKXRpdGxlIG1ldGhvZDooTlNTdHJpbmcgKikKIHsKICAgICBX
ZWJIaXN0b3J5SXRlbSAqZW50cnkgPSBbX2hpc3RvcnlQcml2YXRlIHZpc2l0ZWRVUkw6dXJsIHdp
dGhUaXRsZTp0aXRsZV07CiAKLSAgICBIaXN0b3J5SXRlbSogaXRlbSA9IGNvcmUoZW50cnkpOwor
ICAgIGF1dG8gaXRlbSA9IGNvcmUoZW50cnkpOwogICAgIGl0ZW0tPnNldExhc3RWaXNpdFdhc0Zh
aWx1cmUod2FzRmFpbHVyZSk7CiAKICAgICBlbnRyeS0+X3ByaXZhdGUtPl9yZWRpcmVjdFVSTHMg
PSBudWxscHRyOwpAQCAtODY1LDIwICs4NTYsMTcgQEAgLSAodm9pZClfYWRkVmlzaXRlZExpbmtz
VG9WaXNpdGVkTGlua1N0b3JlOihXZWJWaXNpdGVkTGlua1N0b3JlICYpdmlzaXRlZExpbmtTdG8K
IH0KIEBlbmQKIAotV2ViSGlzdG9yeVdyaXRlcjo6V2ViSGlzdG9yeVdyaXRlcihEYXRlVG9FbnRy
aWVzTWFwKiBlbnRyaWVzQnlEYXRlKQotICAgIDogbV9lbnRyaWVzQnlEYXRlKGVudHJpZXNCeURh
dGUpCitXZWJIaXN0b3J5V3JpdGVyOjpXZWJIaXN0b3J5V3JpdGVyKERhdGVUb0VudHJpZXNNYXAm
IGVudHJpZXNCeURhdGUpCisgICAgOiBtX2VudHJpZXNCeURhdGUgeyBlbnRyaWVzQnlEYXRlIH0K
KyAgICAsIG1fZGF0ZUtleXMgeyBjb3B5VG9WZWN0b3IobV9lbnRyaWVzQnlEYXRlLmtleXMoKSkg
fQogewotICAgIG1fZGF0ZUtleXMucmVzZXJ2ZUNhcGFjaXR5KG1fZW50cmllc0J5RGF0ZS0+c2l6
ZSgpKTsKLSAgICBEYXRlVG9FbnRyaWVzTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2VudHJp
ZXNCeURhdGUtPmVuZCgpOwotICAgIGZvciAoRGF0ZVRvRW50cmllc01hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX2VudHJpZXNCeURhdGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgbV9kYXRlS2V5cy5hcHBlbmQoaXQtPmtleSk7CiAgICAgc3RkOjpzb3J0KG1fZGF0ZUtleXMu
YmVnaW4oKSwgbV9kYXRlS2V5cy5lbmQoKSk7CiB9CiAKIHZvaWQgV2ViSGlzdG9yeVdyaXRlcjo6
d3JpdGVIaXN0b3J5SXRlbXMoQmluYXJ5UHJvcGVydHlMaXN0T2JqZWN0U3RyZWFtJiBzdHJlYW0p
CiB7CiAgICAgZm9yIChpbnQgZGF0ZUluZGV4ID0gbV9kYXRlS2V5cy5zaXplKCkgLSAxOyBkYXRl
SW5kZXggPj0gMDsgZGF0ZUluZGV4LS0pIHsKLSAgICAgICAgTlNBcnJheSAqZW50cmllcyA9IG1f
ZW50cmllc0J5RGF0ZS0+Z2V0KG1fZGF0ZUtleXNbZGF0ZUluZGV4XSkuZ2V0KCk7CisgICAgICAg
IE5TQXJyYXkgKmVudHJpZXMgPSBtX2VudHJpZXNCeURhdGUuZ2V0KG1fZGF0ZUtleXNbZGF0ZUlu
ZGV4XSkuZ2V0KCk7CiAgICAgICAgIE5TVUludGVnZXIgZW50cnlDb3VudCA9IFtlbnRyaWVzIGNv
dW50XTsKICAgICAgICAgZm9yIChOU1VJbnRlZ2VyIGVudHJ5SW5kZXggPSAwOyBlbnRyeUluZGV4
IDwgZW50cnlDb3VudDsgKytlbnRyeUluZGV4KQogICAgICAgICAgICAgd3JpdGVIaXN0b3J5SXRl
bShzdHJlYW0sIFtlbnRyaWVzIG9iamVjdEF0SW5kZXg6ZW50cnlJbmRleF0pOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbSBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KaW5kZXggZDU0
MWM0YzA0ZjJkNzVkMDZiZWUwODBlYmNmZTY2YjBhNDVmYmVmNi4uYzg1NzNiMGQwOThjMjA1MDAy
ZWEzYzQ3YWJlNDhlNjUxZGVjMmU2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCkBAIC05NCwxMyArOTQsMTMgQEAgc3RhdGljIFJl
dGFpblB0cjxOU0NvdW50ZWRTZXQ+IGNyZWF0ZU5TQ291bnRlZFNldChjb25zdCBIYXNoQ291bnRl
ZFNldDxjb25zdCBjaGEKICsgKE5TQ291bnRlZFNldCAqKWphdmFTY3JpcHRQcm90ZWN0ZWRPYmpl
Y3RUeXBlQ291bnRzCiB7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7Ci0gICAg
cmV0dXJuIGNyZWF0ZU5TQ291bnRlZFNldCgqY29tbW9uVk0oKS5oZWFwLnByb3RlY3RlZE9iamVj
dFR5cGVDb3VudHMoKSkuYXV0b3JlbGVhc2UoKTsKKyAgICByZXR1cm4gY3JlYXRlTlNDb3VudGVk
U2V0KGNvbW1vblZNKCkuaGVhcC5wcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCkpLmF1dG9yZWxl
YXNlKCk7CiB9CiAKICsgKE5TQ291bnRlZFNldCAqKWphdmFTY3JpcHRPYmplY3RUeXBlQ291bnRz
CiB7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7Ci0gICAgcmV0dXJuIGNyZWF0
ZU5TQ291bnRlZFNldCgqY29tbW9uVk0oKS5oZWFwLm9iamVjdFR5cGVDb3VudHMoKSkuYXV0b3Jl
bGVhc2UoKTsKKyAgICByZXR1cm4gY3JlYXRlTlNDb3VudGVkU2V0KGNvbW1vblZNKCkuaGVhcC5v
YmplY3RUeXBlQ291bnRzKCkpLmF1dG9yZWxlYXNlKCk7CiB9CiAKICsgKHZvaWQpZ2FyYmFnZUNv
bGxlY3RKYXZhU2NyaXB0T2JqZWN0cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvTWlzYy9XZWJFbGVtZW50RGljdGlvbmFyeS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L01pc2MvV2ViRWxlbWVudERpY3Rpb25hcnkubW0KaW5kZXggYWViNGQ4ZjE2ZmRkYjAyNTUxMDhi
MmEwMGViOWY2NzIxNWYxNzY0Mi4uNzk2ZmM4ZTE4YmI0ZmFkNjQzYzEwZjI0NWQ1MzU0ZjUxOGI3
YWI5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJFbGVtZW50
RGljdGlvbmFyeS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYkVsZW1l
bnREaWN0aW9uYXJ5Lm1tCkBAIC00MSw2ICs0MSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1l
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hpdFRlc3RSZXN1bHQuaD4KICNpbXBvcnQgPFdlYkNvcmUv
SW1hZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsYmFyLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L1dlYkNvcmVKSVRPcGVyYXRpb25zLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVPYmpDRXh0
cmFzLmg+CiAjaW1wb3J0IDxXZWJLaXRMZWdhY3kvRE9NQ29yZS5oPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcuaCBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3LmgKaW5k
ZXggM2FiOTE0MmE5MzU0MTkwZjg1NzZmYjliMTQ4ZWUwZDk1MTZlMDVhMC4uZWNjMDA1MTkwN2Q2
NGY0Y2JiYTVmMTQ0NTE5NTkxZmEzNGNlNWIwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5oCkBAIC03Nyw3ICs3
Nyw3IEBAIHR5cGVkZWYgdW5pb24gUGx1Z2luUG9ydCB7CiAgICAgQk9PTCBzaG91bGRTdG9wU29v
bjsKIAogICAgIHVpbnQzMl90IGN1cnJlbnRUaW1lcklEOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxI
YXNoTWFwPHVpbnQzMl90LCBzdGQ6OnVuaXF1ZV9wdHI8UGx1Z2luVGltZXI+Pj4gdGltZXJzOwor
ICAgIEhhc2hNYXA8dWludDMyX3QsIHN0ZDo6dW5pcXVlX3B0cjxQbHVnaW5UaW1lcj4+IHRpbWVy
czsKIAogICAgIHVuc2lnbmVkIHBsdWdpbkZ1bmN0aW9uQ2FsbERlcHRoOwogICAgIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZp
ZXcubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2lu
Vmlldy5tbQppbmRleCA4ZmZmMjQ1ZTE2OGQzNGFkYmVkYjAyZDQ3NDhmOWNiODcxMTA3N2I2Li43
MWNkMWY2YzYyMzI3ODIyOGI0YWRlN2JhOGRiOGE1MGRhZTUxMDExIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5t
bQpAQCAtMzk4LDExICszOTgsOCBAQCAtICh2b2lkKXN0b3BUaW1lcnMKICAgICBpZiAoX2V2ZW50
SGFuZGxlcikKICAgICAgICAgX2V2ZW50SGFuZGxlci0+c3RvcFRpbWVycygpOwogICAgIAotICAg
IGlmICghdGltZXJzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGF1dG8mIGl0OiB0aW1l
cnMtPnZhbHVlcygpKQotICAgICAgICBpdC0+c3RvcCgpOworICAgIGZvciAoYXV0byYgdGltZXIg
OiB0aW1lcnMudmFsdWVzKCkpCisgICAgICAgIHRpbWVyLT5zdG9wKCk7CiB9CiAKIC0gKHZvaWQp
c3RhcnRUaW1lcnMKQEAgLTQxMywxMiArNDEwLDkgQEAgLSAodm9pZClzdGFydFRpbWVycwogICAg
IC8vIHNlbmQgbnVsbCBldmVudHMgYXQgYSByZWR1Y2VkIHJhdGUuCiAgICAgX2V2ZW50SGFuZGxl
ci0+c3RhcnRUaW1lcnMoX2lzQ29tcGxldGVseU9ic2N1cmVkKTsKICAgICAKLSAgICBpZiAoIXRp
bWVycykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGZvciAoYXV0byYgaXQ6IHRpbWVycy0+
dmFsdWVzKCkpIHsKLSAgICAgICAgQVNTRVJUKCFpdC0+aXNBY3RpdmUoKSk7Ci0gICAgICAgIGl0
LT5zdGFydChfaXNDb21wbGV0ZWx5T2JzY3VyZWQpOworICAgIGZvciAoYXV0byYgdGltZXIgOiB0
aW1lcnMudmFsdWVzKCkpIHsKKyAgICAgICAgQVNTRVJUKCF0aW1lci0+aXNBY3RpdmUoKSk7Cisg
ICAgICAgIHRpbWVyLT5zdGFydChfaXNDb21wbGV0ZWx5T2JzY3VyZWQpOwogICAgIH0gICAgCiB9
CiAKQEAgLTE2NDcsMTQgKzE2NDEsMTEgQEAgLSAodWludDMyX3Qpc2NoZWR1bGVUaW1lcldpdGhJ
bnRlcnZhbDoodWludDMyX3QpaW50ZXJ2YWwgcmVwZWF0OihOUEJvb2wpcmVwZWF0IHQKICAgICBp
ZiAoIXRpbWVyRnVuYykKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgaWYgKCF0aW1lcnMp
Ci0gICAgICAgIHRpbWVycyA9IG1ha2VVbmlxdWU8SGFzaE1hcDx1aW50MzJfdCwgc3RkOjp1bmlx
dWVfcHRyPFBsdWdpblRpbWVyPj4+KCk7Ci0KICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGx1Z2luVGlt
ZXI+KiBzbG90ID0gbnVsbHB0cjsKICAgICB1aW50MzJfdCB0aW1lcklEOwotICAgIGRvCisgICAg
ZG8gewogICAgICAgICB0aW1lcklEID0gKytjdXJyZW50VGltZXJJRDsKLSAgICB3aGlsZSAoIXRp
bWVycy0+aXNWYWxpZEtleSh0aW1lcklEKSB8fCAqKHNsb3QgPSAmdGltZXJzLT5hZGQodGltZXJJ
RCwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlKSk7CisgICAgfSB3aGlsZSAoIXRpbWVycy5pc1Zh
bGlkS2V5KHRpbWVySUQpIHx8ICooc2xvdCA9ICZ0aW1lcnMuYWRkKHRpbWVySUQsIG51bGxwdHIp
Lml0ZXJhdG9yLT52YWx1ZSkpOwogCiAgICAgYXV0byB0aW1lciA9IG1ha2VVbmlxdWU8UGx1Z2lu
VGltZXI+KHBsdWdpbiwgdGltZXJJRCwgaW50ZXJ2YWwsIHJlcGVhdCwgdGltZXJGdW5jKTsKIApA
QCAtMTY2OCwxMCArMTY1OSw3IEBAIC0gKHVpbnQzMl90KXNjaGVkdWxlVGltZXJXaXRoSW50ZXJ2
YWw6KHVpbnQzMl90KWludGVydmFsIHJlcGVhdDooTlBCb29sKXJlcGVhdCB0CiAKIC0gKHZvaWQp
dW5zY2hlZHVsZVRpbWVyOih1aW50MzJfdCl0aW1lcklECiB7Ci0gICAgaWYgKCF0aW1lcnMpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICB0aW1lcnMtPnJlbW92ZSh0aW1lcklEKTsKKyAgICB0
aW1lcnMucmVtb3ZlKHRpbWVySUQpOwogfQogCiAtIChOUEVycm9yKXBvcFVwQ29udGV4dE1lbnU6
KE5QTWVudSAqKW1lbnUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaAppbmRleCA2
NjhiOTMyNjIwYThlMGQxMzY4ZWU3YjBkMGUzYzFiMzMwMDUzM2M1Li4yYTcxM2I5ZGJmNzIyYWZm
NWU2YTgzY2E2OTNjM2UzMGY2Y2Q4MjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgKKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVOZXR3b3JraW5nQ29u
dGV4dC5oCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTmV0d29y
a2luZ0NvbnRleHQuaD4KIAotY2xhc3MgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dCA6IHB1Ymxp
YyBXZWJDb3JlOjpGcmFtZU5ldHdvcmtpbmdDb250ZXh0IHsKK2NsYXNzIFdlYkZyYW1lTmV0d29y
a2luZ0NvbnRleHQgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6RnJhbWVOZXR3b3JraW5nQ29udGV4
dCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0PiBj
cmVhdGUoV2ViQ29yZTo6RnJhbWUqIGZyYW1lKQogICAgIHsKQEAgLTM4LDE2ICszOCwxNSBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveVByaXZhdGVCcm93c2luZ1Nlc3Npb24oKTsK
IAogcHJpdmF0ZToKLQogICAgIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQoV2ViQ29yZTo6RnJh
bWUqIGZyYW1lKQogICAgICAgICA6IFdlYkNvcmU6OkZyYW1lTmV0d29ya2luZ0NvbnRleHQoZnJh
bWUpCiAgICAgewogICAgIH0KIAotICAgIGJvb2wgbG9jYWxGaWxlQ29udGVudFNuaWZmaW5nRW5h
YmxlZCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFNjaGVkdWxlUGFpckhhc2hTZXQqIHNjaGVkdWxl
ZFJ1bkxvb3BQYWlycygpIGNvbnN0IG92ZXJyaWRlOwotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+
IHNvdXJjZUFwcGxpY2F0aW9uQXVkaXREYXRhKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgU3RyaW5n
IHNvdXJjZUFwcGxpY2F0aW9uSWRlbnRpZmllcigpIGNvbnN0IG92ZXJyaWRlOwotICAgIFdlYkNv
cmU6OlJlc291cmNlRXJyb3IgYmxvY2tlZEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lv
biogc3RvcmFnZVNlc3Npb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGxvY2FsRmlsZUNv
bnRlbnRTbmlmZmluZ0VuYWJsZWQoKSBjb25zdCBmaW5hbDsKKyAgICBjb25zdCBTY2hlZHVsZVBh
aXJIYXNoU2V0KiBzY2hlZHVsZWRSdW5Mb29wUGFpcnMoKSBjb25zdCBmaW5hbDsKKyAgICBSZXRh
aW5QdHI8Q0ZEYXRhUmVmPiBzb3VyY2VBcHBsaWNhdGlvbkF1ZGl0RGF0YSgpIGNvbnN0IGZpbmFs
OworICAgIFN0cmluZyBzb3VyY2VBcHBsaWNhdGlvbklkZW50aWZpZXIoKSBjb25zdCBmaW5hbDsK
KyAgICBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGJsb2NrZWRFcnJvcihjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmKSBjb25zdCBmaW5hbDsKKyAgICBXZWJDb3JlOjpOZXR3b3JrU3RvcmFn
ZVNlc3Npb24qIHN0b3JhZ2VTZXNzaW9uKCkgY29uc3QgZmluYWw7CiB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVOZXR3b3JraW5n
Q29udGV4dC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZy
YW1lTmV0d29ya2luZ0NvbnRleHQubW0KaW5kZXggMGEwNmVhM2Y5NzY3N2RmNTMxNGRhMTA3MDA3
ZjJhNWIwZDA3ZmZmNy4uNmJhMGJiYWM0ZjEyMTg1NDU3NTM4YTAzZTI3ZmQ0MTBjZDk0OWIzMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJh
bWVOZXR3b3JraW5nQ29udGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1tCkBAIC02MiwxMSArNjIsMTEg
QEAgYm9vbCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Ojpsb2NhbEZpbGVDb250ZW50U25pZmZp
bmdFbmFibGVkKCkgY29uc3QKICAgICByZXR1cm4gZnJhbWUoKSAmJiBmcmFtZSgpLT5zZXR0aW5n
cygpLmxvY2FsRmlsZUNvbnRlbnRTbmlmZmluZ0VuYWJsZWQoKTsKIH0KIAotU2NoZWR1bGVQYWly
SGFzaFNldCogV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c2NoZWR1bGVkUnVuTG9vcFBhaXJz
KCkgY29uc3QKK2NvbnN0IFNjaGVkdWxlUGFpckhhc2hTZXQqIFdlYkZyYW1lTmV0d29ya2luZ0Nv
bnRleHQ6OnNjaGVkdWxlZFJ1bkxvb3BQYWlycygpIGNvbnN0CiB7CiAgICAgaWYgKCFmcmFtZSgp
IHx8ICFmcmFtZSgpLT5wYWdlKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVy
biBmcmFtZSgpLT5wYWdlKCktPnNjaGVkdWxlZFJ1bkxvb3BQYWlycygpOworICAgIHJldHVybiAm
ZnJhbWUoKS0+cGFnZSgpLT5zY2hlZHVsZWRSdW5Mb29wUGFpcnMoKTsKIH0KIAogUmV0YWluUHRy
PENGRGF0YVJlZj4gV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c291cmNlQXBwbGljYXRpb25B
dWRpdERhdGEoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJIVE1MVmlldy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2Vi
SFRNTFZpZXcubW0KaW5kZXggNjFkNmY0ZTg2NTk0ZGNhYjdlNjE3OTA3MDRiNzA5ZWY1Y2NjMmJl
MC4uM2NjMzkyYjAxYjRkZTQ1NmNmMWQ3MWY0MWY5M2RlMjJmZjRkMTlhNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCkBAIC0xNTAsNiArMTUw
LDcgQEAKICNpbXBvcnQgPHd0Zi9OYWtlZFB0ci5oPgogI2ltcG9ydCA8d3RmL09iakNSdW50aW1l
RXh0cmFzLmg+CiAjaW1wb3J0IDx3dGYvUnVuTG9vcC5oPgorI2ltcG9ydCA8d3RmL1NvcnRlZEFy
cmF5TWFwLmg+CiAjaW1wb3J0IDx3dGYvU3lzdGVtVHJhY2luZy5oPgogI2ltcG9ydCA8d3RmL1dl
YWtPYmpDUHRyLmg+CiAjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KQEAgLTI2NDIs
MzcgKzI2NDMsMjYgQEAgLSAoQk9PTCljYWxsRGVsZWdhdGVEb0NvbW1hbmRCeVNlbGVjdG9ySWZO
ZWVkZWQ6KFNFTClzZWxlY3RvcgogICAgIHJldHVybiBbW3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0
ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IGRvQ29tbWFuZEJ5U2VsZWN0b3I6c2VsZWN0b3Jd
OwogfQogCi10eXBlZGVmIEhhc2hNYXA8U0VMLCBTdHJpbmc+IFNlbGVjdG9yTmFtZU1hcDsKLQot
Ly8gTWFwIHNlbGVjdG9ycyBpbnRvIEVkaXRvciBjb21tYW5kIG5hbWVzLgotLy8gVGhpcyBpcyBu
b3QgbmVlZGVkIGZvciBhbnkgc2VsZWN0b3JzIHRoYXQgaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIHRo
ZSBFZGl0b3IgY29tbWFuZC4KLXN0YXRpYyBjb25zdCBTZWxlY3Rvck5hbWVNYXAqIGNyZWF0ZVNl
bGVjdG9yRXhjZXB0aW9uTWFwKCkKLXsKLSAgICBTZWxlY3Rvck5hbWVNYXAqIG1hcCA9IG5ldyBI
YXNoTWFwPFNFTCwgU3RyaW5nPjsKLQotICAgIG1hcC0+YWRkKEBzZWxlY3RvcihpbnNlcnROZXds
aW5lSWdub3JpbmdGaWVsZEVkaXRvcjopLCAiSW5zZXJ0TmV3bGluZSIpOwotICAgIG1hcC0+YWRk
KEBzZWxlY3RvcihpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3I6KSwgIkluc2VydE5ld2xpbmUiKTsK
LSAgICBtYXAtPmFkZChAc2VsZWN0b3IoaW5zZXJ0VGFiSWdub3JpbmdGaWVsZEVkaXRvcjopLCAi
SW5zZXJ0VGFiIik7Ci0gICAgbWFwLT5hZGQoQHNlbGVjdG9yKHBhZ2VEb3duOiksICJNb3ZlUGFn
ZURvd24iKTsKLSAgICBtYXAtPmFkZChAc2VsZWN0b3IocGFnZURvd25BbmRNb2RpZnlTZWxlY3Rp
b246KSwgIk1vdmVQYWdlRG93bkFuZE1vZGlmeVNlbGVjdGlvbiIpOwotICAgIG1hcC0+YWRkKEBz
ZWxlY3RvcihwYWdlVXA6KSwgIk1vdmVQYWdlVXAiKTsKLSAgICBtYXAtPmFkZChAc2VsZWN0b3Io
cGFnZVVwQW5kTW9kaWZ5U2VsZWN0aW9uOiksICJNb3ZlUGFnZVVwQW5kTW9kaWZ5U2VsZWN0aW9u
Iik7Ci0KLSAgICByZXR1cm4gbWFwOwotfQotCiBzdGF0aWMgU3RyaW5nIGNvbW1hbmROYW1lRm9y
U2VsZWN0b3IoU0VMIHNlbGVjdG9yKQogeworICAgIGNvbnN0IGNoYXIqIHNlbGVjdG9yTmFtZSA9
IHNlbF9nZXROYW1lKHNlbGVjdG9yKTsKKwogICAgIC8vIENoZWNrIHRoZSBleGNlcHRpb24gbWFw
IGZpcnN0LgotICAgIHN0YXRpYyBjb25zdCBTZWxlY3Rvck5hbWVNYXAqIGV4Y2VwdGlvbk1hcCA9
IGNyZWF0ZVNlbGVjdG9yRXhjZXB0aW9uTWFwKCk7Ci0gICAgU2VsZWN0b3JOYW1lTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IGV4Y2VwdGlvbk1hcC0+ZmluZChzZWxlY3Rvcik7Ci0gICAgaWYgKGl0
ICE9IGV4Y2VwdGlvbk1hcC0+ZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+dmFsdWU7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBzdGQ6OnBhaXI8Q29tcGFyYWJsZUFTQ0lJTGl0ZXJhbCwgQVNDSUlM
aXRlcmFsPiBleGNlcHRpb25BcnJheVtdID0geworICAgICAgICB7ICJpbnNlcnROZXdsaW5lSWdu
b3JpbmdGaWVsZEVkaXRvcjoiLCAiSW5zZXJ0TmV3bGluZSJfcyB9LAorICAgICAgICB7ICJpbnNl
cnRQYXJhZ3JhcGhTZXBhcmF0b3I6IiwgIkluc2VydE5ld2xpbmUiX3MgfSwKKyAgICAgICAgeyAi
aW5zZXJ0VGFiSWdub3JpbmdGaWVsZEVkaXRvcjoiLCAiSW5zZXJ0VGFiIl9zIH0sCisgICAgICAg
IHsgInBhZ2VEb3duOiIsICJNb3ZlUGFnZURvd24iX3MgfSwKKyAgICAgICAgeyAicGFnZURvd25B
bmRNb2RpZnlTZWxlY3Rpb246IiwgIk1vdmVQYWdlRG93bkFuZE1vZGlmeVNlbGVjdGlvbiJfcyB9
LAorICAgICAgICB7ICJwYWdlVXA6IiwgIk1vdmVQYWdlVXAiX3MgfSwKKyAgICAgICAgeyAicGFn
ZVVwQW5kTW9kaWZ5U2VsZWN0aW9uOiIsICJNb3ZlUGFnZVVwQW5kTW9kaWZ5U2VsZWN0aW9uIl9z
IH0sCisgICAgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIFNvcnRlZEFycmF5TWFwIGV4Y2VwdGlv
bk1hcCB7IGV4Y2VwdGlvbkFycmF5IH07CisgICAgaWYgKGF1dG8gY29tbWFuZE5hbWUgPSBleGNl
cHRpb25NYXAudHJ5R2V0KHNlbGVjdG9yTmFtZSkpCisgICAgICAgIHJldHVybiAqY29tbWFuZE5h
bWU7CiAKICAgICAvLyBSZW1vdmUgdGhlIHRyYWlsaW5nIGNvbG9uLgotICAgIC8vIE5vIG5lZWQg
dG8gY2FwaXRhbGl6ZSB0aGUgY29tbWFuZCBuYW1lIHNpbmNlIEVkaXRvciBjb21tYW5kIG5hbWVz
IGFyZQotICAgIC8vIG5vdCBjYXNlIHNlbnNpdGl2ZS4KLSAgICBjb25zdCBjaGFyKiBzZWxlY3Rv
ck5hbWUgPSBzZWxfZ2V0TmFtZShzZWxlY3Rvcik7CisgICAgLy8gTm8gbmVlZCB0byBjYXBpdGFs
aXplIHRoZSBjb21tYW5kIG5hbWUgc2luY2UgRWRpdG9yIGNvbW1hbmQgbmFtZXMgYXJlIG5vdCBj
YXNlIHNlbnNpdGl2ZS4KICAgICBzaXplX3Qgc2VsZWN0b3JOYW1lTGVuZ3RoID0gc3RybGVuKHNl
bGVjdG9yTmFtZSk7CiAgICAgaWYgKHNlbGVjdG9yTmFtZUxlbmd0aCA8IDIgfHwgc2VsZWN0b3JO
YW1lW3NlbGVjdG9yTmFtZUxlbmd0aCAtIDFdICE9ICc6JykKICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViQ29yZVN0YXRpc3Rp
Y3MuY3BwIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViQ29yZVN0YXRpc3RpY3MuY3BwCmlu
ZGV4IDljOTZhNjdlOWQwYzFmOTA0NDJmMGI0MGM0NDgyNmI1YzU2YjVhMzMuLjk3ZGE0N2MwYzg4
NzMyZDU1ODE0ZWUxYzEzMjVkMGI5ODUyYjhjMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L3dpbi9XZWJDb3JlU3RhdGlzdGljcy5jcHAKQEAgLTE0NCwxMiArMTQ0LDkgQEAgSFJFU1VMVCBX
ZWJDb3JlU3RhdGlzdGljczo6amF2YVNjcmlwdFByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoX0NP
TV9PdXRwdHJfb3B0XwogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwogCiAgICAgSlNMb2NrSG9s
ZGVyIGxvY2soY29tbW9uVk0oKSk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVDb3VudFNldD4g
anNPYmplY3RUeXBlTmFtZXMoY29tbW9uVk0oKS5oZWFwLnByb3RlY3RlZE9iamVjdFR5cGVDb3Vu
dHMoKSk7Ci0gICAgdHlwZWRlZiBUeXBlQ291bnRTZXQ6OmNvbnN0X2l0ZXJhdG9yIEl0ZXJhdG9y
OwotICAgIEl0ZXJhdG9yIGVuZCA9IGpzT2JqZWN0VHlwZU5hbWVzLT5lbmQoKTsKICAgICBIYXNo
TWFwPFN0cmluZywgaW50PiB0eXBlQ291bnRNYXA7Ci0gICAgZm9yIChJdGVyYXRvciBjdXJyZW50
ID0ganNPYmplY3RUeXBlTmFtZXMtPmJlZ2luKCk7IGN1cnJlbnQgIT0gZW5kOyArK2N1cnJlbnQp
Ci0gICAgICAgIHR5cGVDb3VudE1hcC5zZXQoY3VycmVudC0+a2V5LCBjdXJyZW50LT52YWx1ZSk7
CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IGNvbW1vblZNKCkuaGVhcC5wcm90ZWN0ZWRPYmplY3RU
eXBlQ291bnRzKCkpCisgICAgICAgIHR5cGVDb3VudE1hcC5hZGQoZW50cnkua2V5LCBlbnRyeS52
YWx1ZSk7CiAKICAgICBDT01QdHI8SVByb3BlcnR5QmFnMj4gcmVzdWx0cyhBZG9wdENPTSwgQ09N
UHJvcGVydHlCYWc8aW50Pjo6Y3JlYXRlSW5zdGFuY2UodHlwZUNvdW50TWFwKSk7CiAgICAgcmVz
dWx0cy5jb3B5UmVmVG8odHlwZU5hbWVzQW5kQ291bnRzKTsKQEAgLTE2MiwxMiArMTU5LDkgQEAg
SFJFU1VMVCBXZWJDb3JlU3RhdGlzdGljczo6amF2YVNjcmlwdE9iamVjdFR5cGVDb3VudHMoX0NP
TV9PdXRwdHJfb3B0XyBJUHJvcGVydHkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAogICAg
IEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBl
Q291bnRTZXQ+IGpzT2JqZWN0VHlwZU5hbWVzKGNvbW1vblZNKCkuaGVhcC5vYmplY3RUeXBlQ291
bnRzKCkpOwotICAgIHR5cGVkZWYgVHlwZUNvdW50U2V0Ojpjb25zdF9pdGVyYXRvciBJdGVyYXRv
cjsKLSAgICBJdGVyYXRvciBlbmQgPSBqc09iamVjdFR5cGVOYW1lcy0+ZW5kKCk7CiAgICAgSGFz
aE1hcDxTdHJpbmcsIGludD4gdHlwZUNvdW50TWFwOwotICAgIGZvciAoSXRlcmF0b3IgY3VycmVu
dCA9IGpzT2JqZWN0VHlwZU5hbWVzLT5iZWdpbigpOyBjdXJyZW50ICE9IGVuZDsgKytjdXJyZW50
KQotICAgICAgICB0eXBlQ291bnRNYXAuc2V0KGN1cnJlbnQtPmtleSwgY3VycmVudC0+dmFsdWUp
OworICAgIGZvciAoYXV0byYgZW50cnkgOiBjb21tb25WTSgpLmhlYXAub2JqZWN0VHlwZUNvdW50
cygpKQorICAgICAgICB0eXBlQ291bnRNYXAuYWRkKGVudHJ5LmtleSwgZW50cnkudmFsdWUpOwog
CiAgICAgQ09NUHRyPElQcm9wZXJ0eUJhZzI+IHJlc3VsdHMoQWRvcHRDT00sIENPTVByb3BlcnR5
QmFnPGludD46OmNyZWF0ZUluc3RhbmNlKHR5cGVDb3VudE1hcCkpOwogICAgIHJlc3VsdHMuY29w
eVJlZlRvKHR5cGVOYW1lc0FuZENvdW50cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L3dpbi9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3Bw
CmluZGV4IDAwYTAyMmQ0YzEzODk0YjZhYjQwYjcwMjBjYTlmYjU2MzNlODM2ZDcuLjM2OGNiMDcz
YTQyNjYzYzQ3NDAwYzY2OTJlMTk3Nzc1MmFlNTE0YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dl
YlZpZXcuY3BwCkBAIC02ODU4LDIyICs2ODU4LDE2IEBAIEhSRVNVTFQgV2ViVmlldzo6cmVnaXN0
ZXJFbWJlZGRlZFZpZXdNSU1FVHlwZShfSW5fIEJTVFIgbWltZVR5cGUpCiAgICAgaWYgKCFtaW1l
VHlwZSkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgIGlmICghbV9lbWJlZGRlZFZp
ZXdNSU1FVHlwZXMpCi0gICAgICAgIG1fZW1iZWRkZWRWaWV3TUlNRVR5cGVzID0gbWFrZVVuaXF1
ZTxIYXNoU2V0PFN0cmluZz4+KCk7Ci0KLSAgICBtX2VtYmVkZGVkVmlld01JTUVUeXBlcy0+YWRk
KHRvU3RyaW5nKG1pbWVUeXBlKSk7CisgICAgbV9lbWJlZGRlZFZpZXdNSU1FVHlwZXMuYWRkKHRv
U3RyaW5nKG1pbWVUeXBlKSk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKIGJvb2wgV2ViVmlldzo6
c2hvdWxkVXNlRW1iZWRkZWRWaWV3KGNvbnN0IFdURjo6U3RyaW5nJiBtaW1lVHlwZSkgY29uc3QK
IHsKLSAgICBpZiAoIW1fZW1iZWRkZWRWaWV3TUlNRVR5cGVzKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KICAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICByZXR1cm4gbV9lbWJlZGRlZFZpZXdNSU1FVHlwZXMtPmNvbnRhaW5zKG1pbWVUeXBl
KTsKKyAgICByZXR1cm4gbV9lbWJlZGRlZFZpZXdNSU1FVHlwZXMuY29udGFpbnMobWltZVR5cGUp
OwogfQogCiBib29sIFdlYlZpZXc6Om9uR2V0T2JqZWN0KFdQQVJBTSB3UGFyYW0sIExQQVJBTSBs
UGFyYW0sIExSRVNVTFQmIGxSZXN1bHQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L3dpbi9XZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmgK
aW5kZXggYzk5YjgyN2U1YzBkNTRlOGJlYjhkYjM1Nzc0MzgwZjc1ODM1ZmI1YS4uNzM0MTc3ZTk4
NzExNTRmYzRhNjYzNzRjMTdmOWJmNmEzYjVkMWEwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS93aW4vV2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZp
ZXcuaApAQCAtNjg2LDcgKzY4Niw3IEBAIHByb3RlY3RlZDoKIAogICAgIEhXTkQgbV90b3BMZXZl
bFBhcmVudCB7IG51bGxwdHIgfTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxIYXNoU2V0PFdURjo6
U3RyaW5nPj4gbV9lbWJlZGRlZFZpZXdNSU1FVHlwZXM7CisgICAgSGFzaFNldDxXVEY6OlN0cmlu
Zz4gbV9lbWJlZGRlZFZpZXdNSU1FVHlwZXM7CiAKICAgICAvL1ZhcmlhYmxlcyBuZWVkZWQgdG8g
c3RvcmUgZ2VzdHVyZSBpbmZvcm1hdGlvbgogICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBtX2dl
c3R1cmVUYXJnZXROb2RlOwo=
</data>
<flag name="commit-queue"
          id="450714"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>