<?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>130655</bug_id>
          
          <creation_ts>2014-03-23 17:16:05 -0700</creation_ts>
          <short_desc>Convert WebHTMLConverter to C++</short_desc>
          <delta_ts>2014-03-23 23:42:31 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>993699</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-03-23 17:16:05 -0700</bug_when>
    <thetext>Convert WebHTMLConverter to C++</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993700</commentid>
    <comment_count>1</comment_count>
      <attachid>227618</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-03-23 17:21:33 -0700</bug_when>
    <thetext>Created attachment 227618
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993701</commentid>
    <comment_count>2</comment_count>
      <attachid>227618</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-03-23 18:33:03 -0700</bug_when>
    <thetext>Comment on attachment 227618
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993724</commentid>
    <comment_count>3</comment_count>
      <attachid>227618</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-03-23 23:42:28 -0700</bug_when>
    <thetext>Comment on attachment 227618
Patch

Clearing flags on attachment: 227618

Committed r166151: &lt;http://trac.webkit.org/changeset/166151&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993725</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-03-23 23:42:31 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227618</attachid>
            <date>2014-03-23 17:21:33 -0700</date>
            <delta_ts>2014-03-23 23:42:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-130655-20140323172111.patch</filename>
            <type>text/plain</type>
            <size>83466</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NjE0NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY0IEBACisyMDE0LTAzLTIzICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ29udmVydCBXZWJIVE1MQ29udmVydGVy
IHRvIEMrKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTMwNjU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
LSBNZWNoYW5pY2FsbHkgY29udmVydHMgdGhlIE9iamVjdGl2ZS1DIGNsYXNzIFdlYkhUTUxDb252
ZXJ0ZXIsIHRvIHRoZSBDKysgSFRNTENvbnZlcnRlciAobG90cyBvZiBjbGVhbnVwIHRvIGZvbGxv
dykuCisgICAgICAgIC0gUmVtb3ZlcyB1bnVzZWQgbWVtYmVycworICAgICAgICAgICAgLSBfc3Rh
bmRhcmRGb250RmFtaWx5IChuZXZlciBhc3NpZ25lZCB0bykKKyAgICAgICAgICAgIC0gX3RleHRT
aXplTXVsdGlwbGllciAoYWx3YXlzIGV4YWN0bHkgMSkKKyAgICAgICAgICAgIC0gX3dlYlZpZXdU
ZXh0U2l6ZU11bHRpcGxpZXIgKGFsd2F5cyBleGFjdGx5IDApCisgICAgICAgICAgICAtIF9kZWZh
dWx0Rm9udFNpemUgKGFsd2F5cyBleGFjdGx5IDEyLCBjaGFuZ2VkIHRvIGJlIGNvbnN0YW50KQor
ICAgICAgICAgICAgLSBfbWluaW11bUZvbnRTaXplIChhbHdheXMgZXhhY3RseSAxLCBjaGFuZ2Vk
IHRvIGJlIGNvbnN0YW50KQorICAgICAgICAgICAgLSBfY29sb3JzRm9yTm9kZXMgKG5ldmVyIGFz
c2lnbmVkIHRvKQorICAgICAgICAgICAgLSBfaW5kZXhpbmdMaW1pdCAoYWx3YXlzIGV4YWN0bHkg
MCkKKyAgICAgICAgICAgIC0gX3RodW1ibmFpbExpbWl0IChhbHdheXMgZXhhY3RseSAwKQorICAg
ICAgICAgICAgLSBfZmxhZ3MuaXNJbmRleGluZyAoYWx3YXlzIGZhbHNlKQorICAgICAgICAgICAg
LSBfZmxhZ3MuaXNUZXN0aW5nIChhbHdheXMgZmFsc2UpCisKKyAgICAgICAgKiBlZGl0aW5nL2Nv
Y29hL0hUTUxDb252ZXJ0ZXIubW06CisgICAgICAgIChIVE1MQ29udmVydGVyOjpjb252ZXJ0KToK
KyAgICAgICAgKEhUTUxDb252ZXJ0ZXI6OkhUTUxDb252ZXJ0ZXIpOgorICAgICAgICAoSFRNTENv
bnZlcnRlcjo6fkhUTUxDb252ZXJ0ZXIpOgorICAgICAgICAoZGVmYXVsdFBhcmFncmFwaFN0eWxl
KToKKyAgICAgICAgKF9jaGlsZHJlbkZvck5vZGUpOgorICAgICAgICAoSFRNTENvbnZlcnRlcjo6
X3N0cmluZ0Zvck5vZGUpOgorICAgICAgICAoSFRNTENvbnZlcnRlcjo6X2dldEZsb2F0KToKKyAg
ICAgICAgKF93ZWJLaXRCdW5kbGUpOgorICAgICAgICAoSFRNTENvbnZlcnRlcjo6X2VsZW1lbnRJ
c0Jsb2NrTGV2ZWwpOgorICAgICAgICAoSFRNTENvbnZlcnRlcjo6X2VsZW1lbnRIYXNPd25CYWNr
Z3JvdW5kQ29sb3IpOgorICAgICAgICAoSFRNTENvbnZlcnRlcjo6X2Jsb2NrTGV2ZWxFbGVtZW50
Rm9yTm9kZSk6CisgICAgICAgIChIVE1MQ29udmVydGVyOjpfY29sb3JGb3JOb2RlKToKKyAgICAg
ICAgKEhUTUxDb252ZXJ0ZXI6Ol9jb21wdXRlZEF0dHJpYnV0ZXNGb3JFbGVtZW50KToKKyAgICAg
ICAgKEhUTUxDb252ZXJ0ZXI6Ol9hdHRyaWJ1dGVzRm9yRWxlbWVudCk6CisgICAgICAgIChIVE1M
Q29udmVydGVyOjpfbmV3UGFyYWdyYXBoRm9yRWxlbWVudCk6CisgICAgICAgIChIVE1MQ29udmVy
dGVyOjpfbmV3TGluZUZvckVsZW1lbnQpOgorICAgICAgICAoSFRNTENvbnZlcnRlcjo6X25ld1Rh
YkZvckVsZW1lbnQpOgorICAgICAgICAoX1dlYk1lc3NhZ2VEb2N1bWVudENsYXNzKToKKyAgICAg
ICAgKEhUTUxDb252ZXJ0ZXI6Ol9hZGRBdHRhY2htZW50Rm9yRWxlbWVudCk6CisgICAgICAgIChI
VE1MQ29udmVydGVyOjpfYWRkUXVvdGVGb3JFbGVtZW50KToKKyAgICAgICAgKEhUTUxDb252ZXJ0
ZXI6Ol9hZGRWYWx1ZSk6CisgICAgICAgIChIVE1MQ29udmVydGVyOjpfZmlsbEluQmxvY2spOgor
ICAgICAgICAoSFRNTENvbnZlcnRlcjo6X3Byb2Nlc3NNZXRhRWxlbWVudFdpdGhOYW1lKToKKyAg
ICAgICAgKEhUTUxDb252ZXJ0ZXI6Ol9wcm9jZXNzSGVhZEVsZW1lbnQpOgorICAgICAgICAoSFRN
TENvbnZlcnRlcjo6X2VudGVyRWxlbWVudCk6CisgICAgICAgIChIVE1MQ29udmVydGVyOjpfYWRk
VGFibGVGb3JFbGVtZW50KToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXI6Ol9hZGRUYWJsZUNlbGxG
b3JFbGVtZW50KToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXI6Ol9wcm9jZXNzRWxlbWVudCk6Cisg
ICAgICAgIChIVE1MQ29udmVydGVyOjpfYWRkTWFya2Vyc1RvTGlzdCk6CisgICAgICAgIChIVE1M
Q29udmVydGVyOjpfZXhpdEVsZW1lbnQpOgorICAgICAgICAoSFRNTENvbnZlcnRlcjo6X3Byb2Nl
c3NUZXh0KToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXI6Ol90cmF2ZXJzZU5vZGUpOgorICAgICAg
ICAoSFRNTENvbnZlcnRlcjo6X3RyYXZlcnNlRm9vdGVyTm9kZSk6CisgICAgICAgIChIVE1MQ29u
dmVydGVyOjpfYWRqdXN0VHJhaWxpbmdOZXdsaW5lKToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXI6
Ol9sb2FkRnJvbURPTVJhbmdlKToKKyAgICAgICAgKGZpbGVXcmFwcGVyRm9yVVJMKToKKyAgICAg
ICAgKGZpbGVXcmFwcGVyRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjphdHRyaWJ1dGVk
U3RyaW5nRnJvbVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OmVkaXRpbmdBdHRyaWJ1dGVkU3Ry
aW5nRnJvbVJhbmdlKToKKwogMjAxNC0wMy0yMyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIE1vdmUgSFRNTENvbnZlcnRlciBmcm9tIHBsYXRmb3JtL21hYyB0byBlZGl0
aW5nL2NvY29hLgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVy
dGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENv
bnZlcnRlci5tbQkocmV2aXNpb24gMTY2MTQ3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9IVE1MQ29udmVydGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOTksNiArMzk5LDkgQEAg
LSAoQk9PTClpZ25vcmVzT3JpZW50YXRpb247CiAvLyBBZGRpdGlvbmFsIGNvbnRyb2wgVW5pY29k
ZSBjaGFyYWN0ZXJzCiBjb25zdCB1bmljaGFyIFdlYk5leHRMaW5lQ2hhcmFjdGVyID0gMHgwMDg1
OwogCitzdGF0aWMgY29uc3QgQ0dGbG9hdCBkZWZhdWx0Rm9udFNpemUgPSAxMjsKK3N0YXRpYyBj
b25zdCBDR0Zsb2F0IG1pbmltdW1Gb250U2l6ZSA9IDE7CisKIGNsYXNzIEhUTUxDb252ZXJ0ZXJD
YWNoZXMgewogcHVibGljOgogICAgIFN0cmluZyBwcm9wZXJ0eVZhbHVlRm9yTm9kZShOb2RlJiwg
Q1NTUHJvcGVydHlJRCApOwpAQCAtNDI4LDcgKzQzMSwyMCBAQCBAaW50ZXJmYWNlIE5TT2JqZWN0
KFdlYk1lc3NhZ2VEb2N1bWVudFNpCiArICh2b2lkKWRvY3VtZW50OihOU09iamVjdCAqKilvdXRE
b2N1bWVudCBhdHRhY2htZW50OihOU1RleHRBdHRhY2htZW50ICoqKW91dEF0dGFjaG1lbnQgZm9y
VVJMOihOU1VSTCAqKXVybDsKIEBlbmQKIAotQGludGVyZmFjZSBXZWJIVE1MQ29udmVydGVyIDog
TlNPYmplY3QgeworY2xhc3MgSFRNTENvbnZlcnRlciB7CitwdWJsaWM6CisgICAgSFRNTENvbnZl
cnRlcihET01SYW5nZSopOworICAgIH5IVE1MQ29udmVydGVyKCk7CisgICAgCisgICAgTlNBdHRy
aWJ1dGVkU3RyaW5nKiBjb252ZXJ0KCkKKyAgICB7CisgICAgICAgIF9sb2FkRnJvbURPTVJhbmdl
KCk7CisgICAgICAgIGlmIChfZXJyb3JDb2RlKQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICAgICAgcmV0dXJuIFtbX2F0dHJTdHIgcmV0YWluXSBhdXRvcmVsZWFzZV07CisgICAgfQorICAg
IAorcHJpdmF0ZToKICAgICBOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICpfYXR0clN0cjsKICAg
ICBOU011dGFibGVEaWN0aW9uYXJ5ICpfZG9jdW1lbnRBdHRyczsKICAgICBOU1VSTCAqX2Jhc2VV
Ukw7CkBAIC00MzYsMTIgKzQ1Miw2IEBAIEBpbnRlcmZhY2UgV2ViSFRNTENvbnZlcnRlciA6IE5T
T2JqZWN0IHsKICAgICBET01SYW5nZSAqX2RvbVJhbmdlOwogICAgIE5TTXV0YWJsZUFycmF5ICpf
ZG9tU3RhcnRBbmNlc3RvcnM7CiAgICAgV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIgKl9kYXRhU291
cmNlOwotICAgIE5TU3RyaW5nICpfc3RhbmRhcmRGb250RmFtaWx5OwotICAgIENHRmxvYXQgX3Rl
eHRTaXplTXVsdGlwbGllcjsKLSAgICBDR0Zsb2F0IF93ZWJWaWV3VGV4dFNpemVNdWx0aXBsaWVy
OwotICAgIENHRmxvYXQgX2RlZmF1bHRUYWJJbnRlcnZhbDsKLSAgICBDR0Zsb2F0IF9kZWZhdWx0
Rm9udFNpemU7Ci0gICAgQ0dGbG9hdCBfbWluaW11bUZvbnRTaXplOwogICAgIE5TTXV0YWJsZUFy
cmF5ICpfdGV4dExpc3RzOwogICAgIE5TTXV0YWJsZUFycmF5ICpfdGV4dEJsb2NrczsKICAgICBO
U011dGFibGVBcnJheSAqX3RleHRUYWJsZXM7CkBAIC00NTEsMTMgKzQ2MSwxMiBAQCBAaW50ZXJm
YWNlIFdlYkhUTUxDb252ZXJ0ZXIgOiBOU09iamVjdCB7CiAgICAgTlNNdXRhYmxlQXJyYXkgKl90
ZXh0VGFibGVSb3dzOwogICAgIE5TTXV0YWJsZUFycmF5ICpfdGV4dFRhYmxlUm93QXJyYXlzOwog
ICAgIE5TTXV0YWJsZUFycmF5ICpfdGV4dFRhYmxlUm93QmFja2dyb3VuZENvbG9yczsKLSAgICBO
U011dGFibGVEaWN0aW9uYXJ5ICpfY29sb3JzRm9yTm9kZXM7CiAgICAgTlNNdXRhYmxlRGljdGlv
bmFyeSAqX2F0dHJpYnV0ZXNGb3JFbGVtZW50czsKICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpf
Zm9udENhY2hlOwogICAgIE5TTXV0YWJsZUFycmF5ICpfd3JpdGluZ0RpcmVjdGlvbkFycmF5Owor
ICAgIAorICAgIENHRmxvYXQgX2RlZmF1bHRUYWJJbnRlcnZhbDsKICAgICBOU1VJbnRlZ2VyIF9k
b21SYW5nZVN0YXJ0SW5kZXg7Ci0gICAgTlNJbnRlZ2VyIF9pbmRleGluZ0xpbWl0OwotICAgIE5T
VUludGVnZXIgX3RodW1ibmFpbExpbWl0OwogICAgIE5TSW50ZWdlciBfZXJyb3JDb2RlOwogICAg
IE5TSW50ZWdlciBfcXVvdGVMZXZlbDsKIApAQCAtNDY3LDM1ICs0NzYsOTggQEAgQGludGVyZmFj
ZSBXZWJIVE1MQ29udmVydGVyIDogTlNPYmplY3QgewogICAgICAgICB1bnNpZ25lZCBpbnQgaXNT
b2Z0OjE7CiAgICAgICAgIHVuc2lnbmVkIGludCByZWFjaGVkU3RhcnQ6MTsKICAgICAgICAgdW5z
aWduZWQgaW50IHJlYWNoZWRFbmQ6MTsKLSAgICAgICAgdW5zaWduZWQgaW50IGlzSW5kZXhpbmc6
MTsKLSAgICAgICAgdW5zaWduZWQgaW50IGlzVGVzdGluZzoxOwogICAgICAgICB1bnNpZ25lZCBp
bnQgaGFzVHJhaWxpbmdOZXdsaW5lOjE7CiAgICAgICAgIHVuc2lnbmVkIGludCBwYWQ6MjY7CiAg
ICAgfSBfZmxhZ3M7Ci19Ci0KLSsgKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdHJp
bmdGcm9tUmFuZ2U6KFJhbmdlKilyYW5nZTsKLSNpZiAhUExBVEZPUk0oSU9TKQotKyAoTlNBdHRy
aWJ1dGVkU3RyaW5nICopZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2U6KFJhbmdlKily
YW5nZTsKLSNlbmRpZgotQGVuZAotCi1AaW50ZXJmYWNlIFdlYkhUTUxDb252ZXJ0ZXIoV2ViSFRN
TENvbnZlcnRlckludGVybmFsKQotCi0tIChpZClpbml0OwotLSAoaWQpaW5pdFdpdGhET01SYW5n
ZTooRE9NUmFuZ2UgKilkb21SYW5nZTsKLS0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0
ZWRTdHJpbmc7Ci0KLS0gKE5TU3RyaW5nICopX3N0cmluZ0Zvck5vZGU6KERPTU5vZGUgKilub2Rl
IHByb3BlcnR5OihDU1NQcm9wZXJ0eUlEKXByb3BlcnR5SWQ7Ci0tIChQbGF0Zm9ybUNvbG9yICop
X2NvbG9yRm9yTm9kZTooRE9NTm9kZSAqKW5vZGUgcHJvcGVydHk6KENTU1Byb3BlcnR5SUQpcHJv
cGVydHlJZDsKLS0gKEJPT0wpX2dldEZsb2F0OihDR0Zsb2F0ICopdmFsIGZvck5vZGU6KERPTU5v
ZGUgKilub2RlIHByb3BlcnR5OihDU1NQcm9wZXJ0eUlEKXByb3BlcnR5SWQ7CisgICAgCisgICAg
dm9pZCBfbG9hZEZyb21ET01SYW5nZSgpOworICAgIAorICAgIE5TU3RyaW5nICpfc3RyaW5nRm9y
Tm9kZShET01Ob2RlICosIENTU1Byb3BlcnR5SUQpOworICAgIFBsYXRmb3JtQ29sb3IgKl9jb2xv
ckZvck5vZGUoRE9NTm9kZSAqLCBDU1NQcm9wZXJ0eUlEKTsKKyAgICBCT09MIF9nZXRGbG9hdChD
R0Zsb2F0ICp2YWwsIERPTU5vZGUgKiwgQ1NTUHJvcGVydHlJRCk7CisKKyAgICB2b2lkIF90cmF2
ZXJzZU5vZGUoRE9NTm9kZSAqbm9kZSwgTlNJbnRlZ2VyIGRlcHRoLCBCT09MIGVtYmVkZGVkKTsK
KyAgICB2b2lkIF90cmF2ZXJzZUZvb3Rlck5vZGUoRE9NTm9kZSAqbm9kZSwgTlNJbnRlZ2VyIGRl
cHRoKTsKKyAgICAKKyAgICBOU0RpY3Rpb25hcnkgKl9jb21wdXRlZEF0dHJpYnV0ZXNGb3JFbGVt
ZW50KERPTUVsZW1lbnQgKik7CisgICAgTlNEaWN0aW9uYXJ5ICpfYXR0cmlidXRlc0ZvckVsZW1l
bnQoRE9NRWxlbWVudCAqKTsKKyAgICAKKyAgICBib29sIF9lbGVtZW50SXNCbG9ja0xldmVsKERP
TUVsZW1lbnQgKik7CisgICAgYm9vbCBfZWxlbWVudEhhc093bkJhY2tncm91bmRDb2xvcihET01F
bGVtZW50ICopOworICAgIERPTUVsZW1lbnQgKiBfYmxvY2tMZXZlbEVsZW1lbnRGb3JOb2RlKERP
TU5vZGUgKik7CisgICAgCisgICAgdm9pZCBfbmV3UGFyYWdyYXBoRm9yRWxlbWVudChET01FbGVt
ZW50ICplbGVtZW50LCBOU1N0cmluZyAqdGFnLCBCT09MIGZsYWcsIEJPT0wgc3VwcHJlc3NUcmFp
bGluZ1NwYWNlKTsKKyAgICB2b2lkIF9uZXdMaW5lRm9yRWxlbWVudChET01FbGVtZW50ICplbGVt
ZW50KTsKKyAgICB2b2lkIF9uZXdUYWJGb3JFbGVtZW50KERPTUVsZW1lbnQgKmVsZW1lbnQpOwor
ICAgIEJPT0wgX2FkZEF0dGFjaG1lbnRGb3JFbGVtZW50KERPTUVsZW1lbnQgKmVsZW1lbnQsIE5T
VVJMICp1cmwsIEJPT0wgbmVlZHNQYXJhZ3JhcGgsIEJPT0wgdXNlUGxhY2Vob2xkZXIpOworICAg
IHZvaWQgX2FkZFF1b3RlRm9yRWxlbWVudChET01FbGVtZW50ICplbGVtZW50LCBCT09MIG9wZW5p
bmcsIE5TSW50ZWdlciBsZXZlbCk7CisgICAgdm9pZCBfYWRkVmFsdWUoTlNTdHJpbmcgKnZhbHVl
LCBET01FbGVtZW50ICplbGVtZW50KTsKKyAgICB2b2lkIF9maWxsSW5CbG9jayhOU1RleHRCbG9j
ayAqYmxvY2ssIERPTUVsZW1lbnQgKmVsZW1lbnQsIFBsYXRmb3JtQ29sb3IgKmJhY2tncm91bmRD
b2xvciwgQ0dGbG9hdCBleHRyYU1hcmdpbiwgQ0dGbG9hdCBleHRyYVBhZGRpbmcsIEJPT0wgaXNU
YWJsZSk7CisgICAgdm9pZCBfcHJvY2Vzc01ldGFFbGVtZW50V2l0aE5hbWUoTlNTdHJpbmcgKm5h
bWUsIE5TU3RyaW5nICpjb250ZW50KTsKKyAgICB2b2lkIF9wcm9jZXNzSGVhZEVsZW1lbnQoRE9N
RWxlbWVudCAqZWxlbWVudCk7CisgICAgQk9PTCBfZW50ZXJFbGVtZW50KERPTUVsZW1lbnQgKmVs
ZW1lbnQsIE5TU3RyaW5nICp0YWcsIE5TU3RyaW5nICpkaXNwbGF5VmFsLCBCT09MIGVtYmVkZGVk
KTsKKyAgICB2b2lkIF9hZGRUYWJsZUZvckVsZW1lbnQoRE9NRWxlbWVudCAqdGFibGVFbGVtZW50
KTsKKyAgICB2b2lkIF9hZGRUYWJsZUNlbGxGb3JFbGVtZW50KERPTUVsZW1lbnQgKnRhYmxlQ2Vs
bEVsZW1lbnQpOworICAgIEJPT0wgX3Byb2Nlc3NFbGVtZW50KERPTUVsZW1lbnQgKmVsZW1lbnQs
IE5TU3RyaW5nICp0YWcsIE5TU3RyaW5nICpkaXNwbGF5VmFsLCBOU0ludGVnZXIgZGVwdGgpOwor
ICAgIHZvaWQgX2FkZE1hcmtlcnNUb0xpc3QoTlNUZXh0TGlzdCAqbGlzdCwgTlNSYW5nZSByYW5n
ZSk7CisgICAgdm9pZCBfZXhpdEVsZW1lbnQoRE9NRWxlbWVudCAqZWxlbWVudCwgTlNTdHJpbmcg
KnRhZywgTlNTdHJpbmcgKmRpc3BsYXlWYWwsIE5TSW50ZWdlciBkZXB0aCwgTlNVSW50ZWdlciBz
dGFydEluZGV4KTsKKyAgICB2b2lkIF9wcm9jZXNzVGV4dChET01DaGFyYWN0ZXJEYXRhICp0ZXh0
KTsKKyAgICB2b2lkIF9hZGp1c3RUcmFpbGluZ05ld2xpbmUoKTsKK307CiAKLS0gKHZvaWQpX3Ry
YXZlcnNlTm9kZTooRE9NTm9kZSAqKW5vZGUgZGVwdGg6KE5TSW50ZWdlcilkZXB0aCBlbWJlZGRl
ZDooQk9PTCllbWJlZGRlZDsKLS0gKHZvaWQpX3RyYXZlcnNlRm9vdGVyTm9kZTooRE9NTm9kZSAq
KW5vZGUgZGVwdGg6KE5TSW50ZWdlcilkZXB0aDsKK0hUTUxDb252ZXJ0ZXI6OkhUTUxDb252ZXJ0
ZXIoRE9NUmFuZ2UqIGRvbVJhbmdlKQoreworICAgIF9kb21SYW5nZSA9IFtkb21SYW5nZSByZXRh
aW5dOworICAgIF9hdHRyU3RyID0gW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBp
bml0XTsKKyAgICBfZG9jdW1lbnRBdHRycyA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10g
aW5pdF07CisgICAgX2Jhc2VVUkwgPSBuaWw7CisgICAgX2RvY3VtZW50ID0gbmlsOworICAgIF9k
b21TdGFydEFuY2VzdG9ycyA9IG5pbDsKKyAgICBfZGF0YVNvdXJjZSA9IG51bGxwdHI7CisgICAg
X3RleHRMaXN0cyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOworICAgIF90ZXh0Qmxv
Y2tzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07CisgICAgX3RleHRUYWJsZXMgPSBb
W05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKKyAgICBfdGV4dFRhYmxlRm9vdGVycyA9IFtb
TlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07CisgICAgX3RleHRUYWJsZVNwYWNpbmdz
ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07CisgICAgX3RleHRUYWJsZVBhZGRpbmdz
ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07CisgICAgX3RleHRUYWJsZVJvd3MgPSBb
W05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKKyAgICBfdGV4dFRhYmxlUm93QXJyYXlzID0g
W1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07CisgICAgX3RleHRUYWJsZVJvd0JhY2tncm91
bmRDb2xvcnMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKKyAgICBfYXR0cmlidXRl
c0ZvckVsZW1lbnRzID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKKyAgICBf
Zm9udENhY2hlID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKKyAgICBfd3Jp
dGluZ0RpcmVjdGlvbkFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07CiAKLUBl
bmQKKyAgICBfZGVmYXVsdFRhYkludGVydmFsID0gMzY7CisgICAgX2RvbVJhbmdlU3RhcnRJbmRl
eCA9IDA7CisgICAgX2Vycm9yQ29kZSA9IC0xOworICAgIF9xdW90ZUxldmVsID0gMDsKKyAgICAK
KyAgICBfZmxhZ3MuaXNTb2Z0ID0gZmFsc2U7CisgICAgX2ZsYWdzLnJlYWNoZWRTdGFydCA9IGZh
bHNlOworICAgIF9mbGFncy5yZWFjaGVkRW5kID0gZmFsc2U7CisgICAgCisgICAgX2NhY2hlcyA9
IHN0ZDo6bWFrZV91bmlxdWU8SFRNTENvbnZlcnRlckNhY2hlcz4oKTsKK30KIAotQGltcGxlbWVu
dGF0aW9uIFdlYkhUTUxDb252ZXJ0ZXIKK0hUTUxDb252ZXJ0ZXI6On5IVE1MQ29udmVydGVyKCkK
K3sKKyAgICBbX2F0dHJTdHIgcmVsZWFzZV07CisgICAgW19kb2N1bWVudEF0dHJzIHJlbGVhc2Vd
OworICAgIFtfZG9tUmFuZ2UgcmVsZWFzZV07CisgICAgW19kb21TdGFydEFuY2VzdG9ycyByZWxl
YXNlXTsKKyAgICBbX3RleHRMaXN0cyByZWxlYXNlXTsKKyAgICBbX3RleHRCbG9ja3MgcmVsZWFz
ZV07CisgICAgW190ZXh0VGFibGVzIHJlbGVhc2VdOworICAgIFtfdGV4dFRhYmxlRm9vdGVycyBy
ZWxlYXNlXTsKKyAgICBbX3RleHRUYWJsZVNwYWNpbmdzIHJlbGVhc2VdOworICAgIFtfdGV4dFRh
YmxlUGFkZGluZ3MgcmVsZWFzZV07CisgICAgW190ZXh0VGFibGVSb3dzIHJlbGVhc2VdOworICAg
IFtfdGV4dFRhYmxlUm93QXJyYXlzIHJlbGVhc2VdOworICAgIFtfdGV4dFRhYmxlUm93QmFja2dy
b3VuZENvbG9ycyByZWxlYXNlXTsKKyAgICBbX2F0dHJpYnV0ZXNGb3JFbGVtZW50cyByZWxlYXNl
XTsKKyAgICBbX2ZvbnRDYWNoZSByZWxlYXNlXTsKKyAgICBbX3dyaXRpbmdEaXJlY3Rpb25BcnJh
eSByZWxlYXNlXTsKK30KIAogI2lmICFQTEFURk9STShJT1MpCiAvLyBSZXR1cm5zIHRoZSBmb250
IHRvIGJlIHVzZWQgaWYgdGhlIE5TRm9udEF0dHJpYnV0ZU5hbWUgZG9lc24ndCBleGlzdApAQCAt
NjA0LDcgKzY3Niw3IEBAIHN0YXRpYyBQbGF0Zm9ybUZvbnQgKl9mb250Rm9yTmFtZUFuZFNpemUK
ICAgICByZXR1cm4gZm9udDsKIH0KIAotKyAoTlNQYXJhZ3JhcGhTdHlsZSAqKWRlZmF1bHRQYXJh
Z3JhcGhTdHlsZQorc3RhdGljIE5TUGFyYWdyYXBoU3R5bGUgKmRlZmF1bHRQYXJhZ3JhcGhTdHls
ZSgpCiB7CiAgICAgc3RhdGljIE5TTXV0YWJsZVBhcmFncmFwaFN0eWxlICpkZWZhdWx0UGFyYWdy
YXBoU3R5bGUgPSBuaWw7CiAgICAgaWYgKCFkZWZhdWx0UGFyYWdyYXBoU3R5bGUpIHsKQEAgLTYx
NSw3ICs2ODcsOCBAQCArIChOU1BhcmFncmFwaFN0eWxlICopZGVmYXVsdFBhcmFncmFwaFN0CiAg
ICAgcmV0dXJuIGRlZmF1bHRQYXJhZ3JhcGhTdHlsZTsKIH0KIAotLSAoTlNBcnJheSAqKV9jaGls
ZHJlbkZvck5vZGU6KERPTU5vZGUgKilub2RlCisKK3N0YXRpYyBOU0FycmF5ICpfY2hpbGRyZW5G
b3JOb2RlKERPTU5vZGUgKm5vZGUpCiB7CiAgICAgTlNNdXRhYmxlQXJyYXkgKmFycmF5ID0gW05T
TXV0YWJsZUFycmF5IGFycmF5XTsKICAgICBET01Ob2RlICpjaGlsZCA9IFtub2RlIGZpcnN0Q2hp
bGRdOwpAQCAtNzg1LDcgKzg1OCw3IEBAIFN0cmluZyBIVE1MQ29udmVydGVyQ2FjaGVzOjpwcm9w
ZXJ0eVZhbHUKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLS0gKE5TU3RyaW5nICopX3N0cmlu
Z0Zvck5vZGU6KERPTU5vZGUgKilub2RlIHByb3BlcnR5OihDU1NQcm9wZXJ0eUlEKXByb3BlcnR5
SWQKK05TU3RyaW5nICpIVE1MQ29udmVydGVyOjpfc3RyaW5nRm9yTm9kZShET01Ob2RlICpub2Rl
LCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQpCiB7CiAgICAgTm9kZSogY29yZU5vZGUgPSBjb3Jl
KG5vZGUpOwogICAgIGlmICghY29yZU5vZGUpCkBAIC04NjYsNyArOTM5LDcgQEAgYm9vbCBIVE1M
Q29udmVydGVyQ2FjaGVzOjpmbG9hdFByb3BlcnR5VgogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
LSAoQk9PTClfZ2V0RmxvYXQ6KENHRmxvYXQgKil2YWwgZm9yTm9kZTooRE9NTm9kZSAqKW5vZGUg
cHJvcGVydHk6KENTU1Byb3BlcnR5SUQpcHJvcGVydHlJZAorQk9PTCBIVE1MQ29udmVydGVyOjpf
Z2V0RmxvYXQoQ0dGbG9hdCAqdmFsLCBET01Ob2RlICpub2RlLCBDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5SWQpCiB7CiAgICAgTm9kZSogY29yZU5vZGUgPSBjb3JlKG5vZGUpOwogICAgIGlmICghY29y
ZU5vZGUpCkBAIC04NzksNiArOTUyLDggQEAgLSAoQk9PTClfZ2V0RmxvYXQ6KENHRmxvYXQgKil2
YWwgZm9yTm9kZQogICAgIHJldHVybiBZRVM7CiB9CiAKKworI2lmIFBMQVRGT1JNKElPUykKIHN0
YXRpYyBOU1N0cmluZyAqX05TRmlyc3RQYXRoRm9yRGlyZWN0b3JpZXNJbkRvbWFpbnMoTlNTZWFy
Y2hQYXRoRGlyZWN0b3J5IGRpcmVjdG9yeSwgTlNTZWFyY2hQYXRoRG9tYWluTWFzayBkb21haW5N
YXNrLCBCT09MIGV4cGFuZFRpbGRlKQogewogICAgIE5TQXJyYXkgKmFycmF5ID0gTlNTZWFyY2hQ
YXRoRm9yRGlyZWN0b3JpZXNJbkRvbWFpbnMoZGlyZWN0b3J5LCBkb21haW5NYXNrLCBleHBhbmRU
aWxkZSk7CkBAIC04OTAsMTUgKzk2NSwxNSBAQCBzdGF0aWMgTlNTdHJpbmcgKl9OU1N5c3RlbUxp
YnJhcnlQYXRoKHZvCiAgICAgcmV0dXJuIF9OU0ZpcnN0UGF0aEZvckRpcmVjdG9yaWVzSW5Eb21h
aW5zKE5TTGlicmFyeURpcmVjdG9yeSwgTlNTeXN0ZW1Eb21haW5NYXNrLCBZRVMpOwogfQogCi0t
IChOU0J1bmRsZSAqKV93ZWJLaXRCdW5kbGUKK3N0YXRpYyBOU0J1bmRsZSAqX3dlYktpdEJ1bmRs
ZSgpCiB7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IHVzZSB0aGUgV2ViQ29y
ZSBidW5kbGUgdG8gYXZvaWQgdGhlIGxheWVyaW5nIHZpb2xhdGlvbi4KICAgICBOU0J1bmRsZSAq
YnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYktp
dCJdOwogICAgIGlmICghYnVuZGxlKQogICAgICAgICBidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxl
V2l0aFBhdGg6W19OU1N5c3RlbUxpYnJhcnlQYXRoKCkgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29t
cG9uZW50OkAiRnJhbWV3b3Jrcy9XZWJLaXQuZnJhbWV3b3JrIl1dOwogICAgIHJldHVybiBidW5k
bGU7CiB9CiAKLSNpZiBQTEFURk9STShJT1MpCiBzdGF0aWMgaW5saW5lIFVJQ29sb3IgKl9wbGF0
Zm9ybUNvbG9yKENvbG9yIGNvbG9yKQogewogICAgIHJldHVybiBbZ2V0VUlDb2xvckNsYXNzKCkg
X2Rpc2FtYmlndWF0ZWRfZHVlX3RvX0NJSW1hZ2VfY29sb3JXaXRoQ0dDb2xvcjpjYWNoZWRDR0Nv
bG9yKGNvbG9yLCBXZWJDb3JlOjpDb2xvclNwYWNlRGV2aWNlUkdCKV07CkBAIC05ODQsMjMgKzEw
NTksMjMgQEAgYm9vbCBIVE1MQ29udmVydGVyQ2FjaGVzOjplbGVtZW50SGFzT3duQgogICAgIHJl
dHVybiBlbGVtZW50Lmhhc1RhZ05hbWUoaHRtbFRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKGJv
ZHlUYWcpIHx8IHByb3BlcnR5VmFsdWVGb3JOb2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5RGlzcGxh
eSkuc3RhcnRzV2l0aCgidGFibGUiKTsKIH0KIAotLSAoQk9PTClfZWxlbWVudElzQmxvY2tMZXZl
bDooRE9NRWxlbWVudCAqKWVsZW1lbnQKK2Jvb2wgSFRNTENvbnZlcnRlcjo6X2VsZW1lbnRJc0Js
b2NrTGV2ZWwoRE9NRWxlbWVudCAqZWxlbWVudCkKIHsKICAgICByZXR1cm4gZWxlbWVudCAmJiBf
Y2FjaGVzLT5pc0Jsb2NrRWxlbWVudCgqY29yZShlbGVtZW50KSk7CiB9CiAKLS0gKEJPT0wpX2Vs
ZW1lbnRIYXNPd25CYWNrZ3JvdW5kQ29sb3I6KERPTUVsZW1lbnQgKillbGVtZW50Citib29sIEhU
TUxDb252ZXJ0ZXI6Ol9lbGVtZW50SGFzT3duQmFja2dyb3VuZENvbG9yKERPTUVsZW1lbnQgKmVs
ZW1lbnQpCiB7CiAgICAgcmV0dXJuIGVsZW1lbnQgJiYgX2NhY2hlcy0+ZWxlbWVudEhhc093bkJh
Y2tncm91bmRDb2xvcigqY29yZShlbGVtZW50KSk7CiB9CiAKLS0gKERPTUVsZW1lbnQgKilfYmxv
Y2tMZXZlbEVsZW1lbnRGb3JOb2RlOihET01Ob2RlICopbm9kZQorRE9NRWxlbWVudCAqIEhUTUxD
b252ZXJ0ZXI6Ol9ibG9ja0xldmVsRWxlbWVudEZvck5vZGUoRE9NTm9kZSAqbm9kZSkKIHsKICAg
ICBET01FbGVtZW50ICplbGVtZW50ID0gKERPTUVsZW1lbnQgKilub2RlOwogICAgIHdoaWxlIChl
bGVtZW50ICYmIFtlbGVtZW50IG5vZGVUeXBlXSAhPSBET01fRUxFTUVOVF9OT0RFKQogICAgICAg
ICBlbGVtZW50ID0gKERPTUVsZW1lbnQgKilbZWxlbWVudCBwYXJlbnROb2RlXTsKLSAgICBpZiAo
ZWxlbWVudCAmJiAhW3NlbGYgX2VsZW1lbnRJc0Jsb2NrTGV2ZWw6ZWxlbWVudF0pCi0gICAgICAg
IGVsZW1lbnQgPSBbc2VsZiBfYmxvY2tMZXZlbEVsZW1lbnRGb3JOb2RlOltlbGVtZW50IHBhcmVu
dE5vZGVdXTsKKyAgICBpZiAoZWxlbWVudCAmJiAhX2VsZW1lbnRJc0Jsb2NrTGV2ZWwoZWxlbWVu
dCkpCisgICAgICAgIGVsZW1lbnQgPSBfYmxvY2tMZXZlbEVsZW1lbnRGb3JOb2RlKFtlbGVtZW50
IHBhcmVudE5vZGVdKTsKICAgICByZXR1cm4gZWxlbWVudDsKIH0KIApAQCAtMTA2Miw3ICsxMTM3
LDcgQEAgQ29sb3IgSFRNTENvbnZlcnRlckNhY2hlczo6Y29sb3JQcm9wZXJ0eQogICAgIHJldHVy
biBDb2xvcigpOwogfQogCi0tIChQbGF0Zm9ybUNvbG9yICopX2NvbG9yRm9yTm9kZTooRE9NTm9k
ZSAqKW5vZGUgcHJvcGVydHk6KENTU1Byb3BlcnR5SUQpcHJvcGVydHlJZAorUGxhdGZvcm1Db2xv
ciAqSFRNTENvbnZlcnRlcjo6X2NvbG9yRm9yTm9kZShET01Ob2RlICpub2RlLCBDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SWQpCiB7CiAgICAgTm9kZSogY29yZU5vZGUgPSBjb3JlKG5vZGUpOwogICAg
IGlmICghY29yZU5vZGUpCkBAIC0xMDc4LDM5ICsxMTUzLDM5IEBAIC0gKFBsYXRmb3JtQ29sb3Ig
KilfY29sb3JGb3JOb2RlOihET01Ob2QKIAogI2RlZmluZSBVSUZsb2F0SXNaZXJvKG51bWJlcikg
KGZhYnMobnVtYmVyIC0gMCkgPCBGTFRfRVBTSUxPTikKIAotLSAoTlNEaWN0aW9uYXJ5ICopX2Nv
bXB1dGVkQXR0cmlidXRlc0ZvckVsZW1lbnQ6KERPTUVsZW1lbnQgKillbGVtZW50CitOU0RpY3Rp
b25hcnkgKkhUTUxDb252ZXJ0ZXI6Ol9jb21wdXRlZEF0dHJpYnV0ZXNGb3JFbGVtZW50KERPTUVs
ZW1lbnQgKmVsZW1lbnQpCiB7Ci0gICAgRE9NRWxlbWVudCAqYmxvY2tFbGVtZW50ID0gW3NlbGYg
X2Jsb2NrTGV2ZWxFbGVtZW50Rm9yTm9kZTplbGVtZW50XTsKKyAgICBET01FbGVtZW50ICpibG9j
a0VsZW1lbnQgPSBfYmxvY2tMZXZlbEVsZW1lbnRGb3JOb2RlKGVsZW1lbnQpOwogICAgIE5TTXV0
YWJsZURpY3Rpb25hcnkgKmF0dHJzID0gW05TTXV0YWJsZURpY3Rpb25hcnkgZGljdGlvbmFyeV07
CiAjaWYgIVBMQVRGT1JNKElPUykKICAgICBOU0ZvbnRNYW5hZ2VyICpmb250TWFuYWdlciA9IFtO
U0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsKICNlbmRpZgotICAgIE5TU3RyaW5nICp0
ZXh0RGVjb3JhdGlvbiA9IFtzZWxmIF9zdHJpbmdGb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6Q1NT
UHJvcGVydHlUZXh0RGVjb3JhdGlvbl07Ci0gICAgTlNTdHJpbmcgKnZlcnRpY2FsQWxpZ24gPSBb
c2VsZiBfc3RyaW5nRm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkNTU1Byb3BlcnR5VmVydGljYWxB
bGlnbl07Ci0gICAgTlNTdHJpbmcgKnRleHRTaGFkb3cgPSBbc2VsZiBfc3RyaW5nRm9yTm9kZTpl
bGVtZW50IHByb3BlcnR5OkNTU1Byb3BlcnR5VGV4dFNoYWRvd107Ci0gICAgTlNTdHJpbmcgKmZv
bnRMaWdhdHVyZXMgPSBbc2VsZiBfc3RyaW5nRm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkNTU1By
b3BlcnR5V2Via2l0Rm9udFZhcmlhbnRMaWdhdHVyZXNdOwotICAgIE5TU3RyaW5nICpmb250S2Vy
bmluZyA9IFtzZWxmIF9zdHJpbmdGb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6Q1NTUHJvcGVydHlX
ZWJraXRGb250S2VybmluZ107Ci0gICAgTlNTdHJpbmcgKmxldHRlclNwYWNpbmcgPSBbc2VsZiBf
c3RyaW5nRm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkNTU1Byb3BlcnR5TGV0dGVyU3BhY2luZ107
CisgICAgTlNTdHJpbmcgKnRleHREZWNvcmF0aW9uID0gX3N0cmluZ0Zvck5vZGUoZWxlbWVudCwg
Q1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbik7CisgICAgTlNTdHJpbmcgKnZlcnRpY2FsQWxpZ24g
PSBfc3RyaW5nRm9yTm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0eVZlcnRpY2FsQWxpZ24pOworICAg
IE5TU3RyaW5nICp0ZXh0U2hhZG93ID0gX3N0cmluZ0Zvck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVy
dHlUZXh0U2hhZG93KTsKKyAgICBOU1N0cmluZyAqZm9udExpZ2F0dXJlcyA9IF9zdHJpbmdGb3JO
b2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5V2Via2l0Rm9udFZhcmlhbnRMaWdhdHVyZXMpOworICAg
IE5TU3RyaW5nICpmb250S2VybmluZyA9IF9zdHJpbmdGb3JOb2RlKGVsZW1lbnQsIENTU1Byb3Bl
cnR5V2Via2l0Rm9udEtlcm5pbmcpOworICAgIE5TU3RyaW5nICpsZXR0ZXJTcGFjaW5nID0gX3N0
cmluZ0Zvck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlMZXR0ZXJTcGFjaW5nKTsKICAgICBDR0Zs
b2F0IGZvbnRTaXplID0gMDsKICAgICBDR0Zsb2F0IGJhc2VsaW5lT2Zmc2V0ID0gMDsKICAgICBD
R0Zsb2F0IHN0cm9rZVdpZHRoID0gMC4wOwogICAgIFBsYXRmb3JtRm9udCAqZm9udCA9IG5pbDsK
ICAgICBQbGF0Zm9ybUZvbnQgKmFjdHVhbEZvbnQgPSAoUGxhdGZvcm1Gb250ICopW2VsZW1lbnQg
X2ZvbnRdOwotICAgIFBsYXRmb3JtQ29sb3IgKmZvcmVncm91bmRDb2xvciA9IFtzZWxmIF9jb2xv
ckZvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpDU1NQcm9wZXJ0eUNvbG9yXTsKLSAgICBQbGF0Zm9y
bUNvbG9yICpiYWNrZ3JvdW5kQ29sb3IgPSBbc2VsZiBfY29sb3JGb3JOb2RlOmVsZW1lbnQgcHJv
cGVydHk6Q1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3JdOwotICAgIFBsYXRmb3JtQ29sb3IgKnN0
cm9rZUNvbG9yID0gW3NlbGYgX2NvbG9yRm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkNTU1Byb3Bl
cnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yXTsKLQotICAgIGlmICghW3NlbGYgX2dldEZsb2F0OiZm
b250U2l6ZSBmb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6Q1NTUHJvcGVydHlGb250U2l6ZV0gfHwg
Zm9udFNpemUgPD0gMC4wKQotICAgICAgICBmb250U2l6ZSA9IF9kZWZhdWx0Rm9udFNpemU7Ci0g
ICAgZm9udFNpemUgKj0gX3RleHRTaXplTXVsdGlwbGllcjsKLSAgICBpZiAoZm9udFNpemUgPCBf
bWluaW11bUZvbnRTaXplKSBmb250U2l6ZSA9IF9taW5pbXVtRm9udFNpemU7CisgICAgUGxhdGZv
cm1Db2xvciAqZm9yZWdyb3VuZENvbG9yID0gX2NvbG9yRm9yTm9kZShlbGVtZW50LCBDU1NQcm9w
ZXJ0eUNvbG9yKTsKKyAgICBQbGF0Zm9ybUNvbG9yICpiYWNrZ3JvdW5kQ29sb3IgPSBfY29sb3JG
b3JOb2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsKKyAgICBQbGF0Zm9y
bUNvbG9yICpzdHJva2VDb2xvciA9IF9jb2xvckZvck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlX
ZWJraXRUZXh0U3Ryb2tlQ29sb3IpOworCisgICAgaWYgKCFfZ2V0RmxvYXQoJmZvbnRTaXplLCBl
bGVtZW50LCBDU1NQcm9wZXJ0eUZvbnRTaXplKSB8fCBmb250U2l6ZSA8PSAwLjApCisgICAgICAg
IGZvbnRTaXplID0gZGVmYXVsdEZvbnRTaXplOworICAgIGlmIChmb250U2l6ZSA8IG1pbmltdW1G
b250U2l6ZSkKKyAgICAgICAgZm9udFNpemUgPSBtaW5pbXVtRm9udFNpemU7CiAgICAgaWYgKGZh
YnMoZmxvb3IoMi4wICogZm9udFNpemUgKyAwLjUpIC8gMi4wIC0gZm9udFNpemUpIDwgMC4wNSkK
ICAgICAgICAgZm9udFNpemUgPSAoQ0dGbG9hdClmbG9vcigyLjAgKiBmb250U2l6ZSArIDAuNSkg
LyAyOwogICAgIGVsc2UgaWYgKGZhYnMoZmxvb3IoMTAuMCAqIGZvbnRTaXplICsgMC41KSAvIDEw
LjAgLSBmb250U2l6ZSkgPCAwLjAwNSkKICAgICAgICAgZm9udFNpemUgPSAoQ0dGbG9hdClmbG9v
cigxMC4wICogZm9udFNpemUgKyAwLjUpIC8gMTA7CiAKICAgICBpZiAoZm9udFNpemUgPD0gMC4w
KQotICAgICAgICBmb250U2l6ZSA9IDEyOworICAgICAgICBmb250U2l6ZSA9IGRlZmF1bHRGb250
U2l6ZTsKICAgICAKICNpZiBQTEFURk9STShJT1MpCiAgICAgaWYgKGFjdHVhbEZvbnQpCkBAIC0x
MTIwLDE0ICsxMTk1LDEyIEBAIC0gKE5TRGljdGlvbmFyeSAqKV9jb21wdXRlZEF0dHJpYnV0ZXNG
b3IKICAgICAgICAgZm9udCA9IFtmb250TWFuYWdlciBjb252ZXJ0Rm9udDphY3R1YWxGb250IHRv
U2l6ZTpmb250U2l6ZV07CiAjZW5kaWYKICAgICBpZiAoIWZvbnQpIHsKLSAgICAgICAgTlNTdHJp
bmcgKmZvbnROYW1lID0gW1tzZWxmIF9zdHJpbmdGb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6Q1NT
UHJvcGVydHlGb250RmFtaWx5XSBjYXBpdGFsaXplZFN0cmluZ107Ci0gICAgICAgIE5TU3RyaW5n
ICpmb250U3R5bGUgPSBbc2VsZiBfc3RyaW5nRm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkNTU1By
b3BlcnR5Rm9udFN0eWxlXTsKLSAgICAgICAgTlNTdHJpbmcgKmZvbnRXZWlnaHQgPSBbc2VsZiBf
c3RyaW5nRm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkNTU1Byb3BlcnR5Rm9udFdlaWdodF07Cisg
ICAgICAgIE5TU3RyaW5nICpmb250TmFtZSA9IFtfc3RyaW5nRm9yTm9kZShlbGVtZW50LCBDU1NQ
cm9wZXJ0eUZvbnRGYW1pbHkpIGNhcGl0YWxpemVkU3RyaW5nXTsKKyAgICAgICAgTlNTdHJpbmcg
KmZvbnRTdHlsZSA9IF9zdHJpbmdGb3JOb2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5Rm9udFN0eWxl
KTsKKyAgICAgICAgTlNTdHJpbmcgKmZvbnRXZWlnaHQgPSBfc3RyaW5nRm9yTm9kZShlbGVtZW50
LCBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpOwogI2lmICFQTEFURk9STShJT1MpCi0gICAgICAgIE5T
U3RyaW5nICpmb250VmFyaWFudCA9IFtzZWxmIF9zdHJpbmdGb3JOb2RlOmVsZW1lbnQgcHJvcGVy
dHk6Q1NTUHJvcGVydHlGb250VmFyaWFudF07CisgICAgICAgIE5TU3RyaW5nICpmb250VmFyaWFu
dCA9IF9zdHJpbmdGb3JOb2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5Rm9udFZhcmlhbnQpOwogI2Vu
ZGlmCi0gICAgICAgIGlmICghZm9udE5hbWUpCi0gICAgICAgICAgICBmb250TmFtZSA9IF9zdGFu
ZGFyZEZvbnRGYW1pbHk7CiAgICAgICAgIGlmIChmb250TmFtZSkKICAgICAgICAgICAgIGZvbnQg
PSBfZm9udEZvck5hbWVBbmRTaXplKGZvbnROYW1lLCBmb250U2l6ZSwgX2ZvbnRDYWNoZSk7CiAg
ICAgICAgIGlmICghZm9udCkKQEAgLTExNjcsMTQgKzEyNDAsMTQgQEAgLSAoTlNEaWN0aW9uYXJ5
ICopX2NvbXB1dGVkQXR0cmlidXRlc0ZvcgogICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OmZvbnQg
Zm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwogICAgIGlmIChmb3JlZ3JvdW5kQ29sb3IpCiAg
ICAgICAgIFthdHRycyBzZXRPYmplY3Q6Zm9yZWdyb3VuZENvbG9yIGZvcktleTpOU0ZvcmVncm91
bmRDb2xvckF0dHJpYnV0ZU5hbWVdOwotICAgIGlmIChiYWNrZ3JvdW5kQ29sb3IgJiYgIVtzZWxm
IF9lbGVtZW50SGFzT3duQmFja2dyb3VuZENvbG9yOmVsZW1lbnRdKQorICAgIGlmIChiYWNrZ3Jv
dW5kQ29sb3IgJiYgIV9lbGVtZW50SGFzT3duQmFja2dyb3VuZENvbG9yKGVsZW1lbnQpKQogICAg
ICAgICBbYXR0cnMgc2V0T2JqZWN0OmJhY2tncm91bmRDb2xvciBmb3JLZXk6TlNCYWNrZ3JvdW5k
Q29sb3JBdHRyaWJ1dGVOYW1lXTsKIAotICAgIGlmIChbc2VsZiBfZ2V0RmxvYXQ6JnN0cm9rZVdp
ZHRoIGZvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VX
aWR0aF0pIHsKKyAgICBpZiAoX2dldEZsb2F0KCZzdHJva2VXaWR0aCwgZWxlbWVudCwgQ1NTUHJv
cGVydHlXZWJraXRUZXh0U3Ryb2tlV2lkdGgpKSB7CiAgICAgICAgIGZsb2F0IHRleHRTdHJva2VX
aWR0aCA9IHN0cm9rZVdpZHRoIC8gKFtmb250IHBvaW50U2l6ZV0gKiAwLjAxKTsKICAgICAgICAg
W2F0dHJzIHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTp0ZXh0U3Ryb2tlV2lk
dGhdIGZvcktleTpOU1N0cm9rZVdpZHRoQXR0cmlidXRlTmFtZV07CiAgICAgfQotICAgIGlmKHN0
cm9rZUNvbG9yKQorICAgIGlmIChzdHJva2VDb2xvcikKICAgICAgICAgW2F0dHJzIHNldE9iamVj
dDpzdHJva2VDb2xvciBmb3JLZXk6TlNTdHJva2VDb2xvckF0dHJpYnV0ZU5hbWVdOwogICAgIGlm
IChmb250S2VybmluZyB8fCBsZXR0ZXJTcGFjaW5nKSB7CiAgICAgICAgIGlmIChbZm9udEtlcm5p
bmcgcmFuZ2VPZlN0cmluZzpAIm5vbmUiXS5sb2NhdGlvbiAhPSBOU05vdEZvdW5kKQpAQCAtMTIw
OCw3ICsxMjgxLDcgQEAgLSAoTlNEaWN0aW9uYXJ5ICopX2NvbXB1dGVkQXR0cmlidXRlc0Zvcgog
ICAgICAgICBpZiAoW3ZlcnRpY2FsQWxpZ24gcmFuZ2VPZlN0cmluZzpAInN1YiJdLmxvY2F0aW9u
ICE9IE5TTm90Rm91bmQpCiAgICAgICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OltOU051bWJlciBu
dW1iZXJXaXRoSW50ZWdlcjotMV0gZm9yS2V5Ok5TU3VwZXJzY3JpcHRBdHRyaWJ1dGVOYW1lXTsK
ICAgICB9Ci0gICAgaWYgKFtzZWxmIF9nZXRGbG9hdDomYmFzZWxpbmVPZmZzZXQgZm9yTm9kZTpl
bGVtZW50IHByb3BlcnR5OkNTU1Byb3BlcnR5VmVydGljYWxBbGlnbl0pCisgICAgaWYgKF9nZXRG
bG9hdCgmYmFzZWxpbmVPZmZzZXQsIGVsZW1lbnQsIENTU1Byb3BlcnR5VmVydGljYWxBbGlnbikp
CiAgICAgICAgIFthdHRycyBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6YmFz
ZWxpbmVPZmZzZXRdIGZvcktleTpOU0Jhc2VsaW5lT2Zmc2V0QXR0cmlidXRlTmFtZV07CiAgICAg
aWYgKHRleHRTaGFkb3cgJiYgW3RleHRTaGFkb3cgbGVuZ3RoXSA+IDQpIHsKICAgICAgICAgTlNT
aGFkb3cgKnNoYWRvdyA9IF9zaGFkb3dGb3JTaGFkb3dTdHlsZSh0ZXh0U2hhZG93KTsKQEAgLTEy
MTksMTcgKzEyOTIsMTYgQEAgLSAoTlNEaWN0aW9uYXJ5ICopX2NvbXB1dGVkQXR0cmlidXRlc0Zv
cgogICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OltOU0FycmF5IGFycmF5V2l0aEFycmF5Ol93cml0
aW5nRGlyZWN0aW9uQXJyYXldIGZvcktleTpOU1dyaXRpbmdEaXJlY3Rpb25BdHRyaWJ1dGVOYW1l
XTsKICAgICAKICAgICBpZiAoYmxvY2tFbGVtZW50KSB7Ci0gICAgICAgIE5TTXV0YWJsZVBhcmFn
cmFwaFN0eWxlICpwYXJhZ3JhcGhTdHlsZSA9IFtbW3NlbGYgY2xhc3NdIGRlZmF1bHRQYXJhZ3Jh
cGhTdHlsZV0gbXV0YWJsZUNvcHldOworICAgICAgICBOU011dGFibGVQYXJhZ3JhcGhTdHlsZSAq
cGFyYWdyYXBoU3R5bGUgPSBbZGVmYXVsdFBhcmFncmFwaFN0eWxlKCkgbXV0YWJsZUNvcHldOwog
ICAgICAgICBOU1N0cmluZyAqYmxvY2tUYWcgPSBbYmxvY2tFbGVtZW50IHRhZ05hbWVdOwogICAg
ICAgICBCT09MIGlzUGFyYWdyYXBoID0gKFtAIlAiIGlzRXF1YWxUb1N0cmluZzpibG9ja1RhZ10g
fHwgW0AiTEkiIGlzRXF1YWxUb1N0cmluZzpibG9ja1RhZ10gfHwgKFtibG9ja1RhZyBoYXNQcmVm
aXg6QCJIIl0gJiYgMiA9PSBbYmxvY2tUYWcgbGVuZ3RoXSkpOwotICAgICAgICBOU1N0cmluZyAq
dGV4dEFsaWduID0gW3NlbGYgX3N0cmluZ0Zvck5vZGU6YmxvY2tFbGVtZW50IHByb3BlcnR5OkNT
U1Byb3BlcnR5VGV4dEFsaWduXTsKLSAgICAgICAgTlNTdHJpbmcgKmRpcmVjdGlvbiA9IFtzZWxm
IF9zdHJpbmdGb3JOb2RlOmJsb2NrRWxlbWVudCBwcm9wZXJ0eTpDU1NQcm9wZXJ0eURpcmVjdGlv
bl07Ci0gICAgICAgIE5TU3RyaW5nICpoeXBoZW5hdGlvbiA9IFtzZWxmIF9zdHJpbmdGb3JOb2Rl
OmJsb2NrRWxlbWVudCBwcm9wZXJ0eTpDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbnNdOworICAgICAg
ICBOU1N0cmluZyAqdGV4dEFsaWduID0gX3N0cmluZ0Zvck5vZGUoYmxvY2tFbGVtZW50LCBDU1NQ
cm9wZXJ0eVRleHRBbGlnbik7CisgICAgICAgIE5TU3RyaW5nICpkaXJlY3Rpb24gPSBfc3RyaW5n
Rm9yTm9kZShibG9ja0VsZW1lbnQsIENTU1Byb3BlcnR5RGlyZWN0aW9uKTsKKyAgICAgICAgTlNT
dHJpbmcgKmh5cGhlbmF0aW9uID0gX3N0cmluZ0Zvck5vZGUoYmxvY2tFbGVtZW50LCBDU1NQcm9w
ZXJ0eVdlYmtpdEh5cGhlbnMpOwogICAgICAgICBDR0Zsb2F0IGxlZnRNYXJnaW4gPSAwOwogICAg
ICAgICBDR0Zsb2F0IHJpZ2h0TWFyZ2luID0gMDsKICAgICAgICAgQ0dGbG9hdCBib3R0b21NYXJn
aW4gPSAwOwogICAgICAgICBDR0Zsb2F0IHRleHRJbmRlbnQgPSAwOwotICAgICAgICBDR0Zsb2F0
IGxpbmVIZWlnaHQgPSAwOwogICAgICAgICBpZiAodGV4dEFsaWduKSB7CiAgICAgICAgICAgICAv
LyBXZWJLaXQgY2FuIHJldHVybiAta2h0bWwtbGVmdCwgLWtodG1sLXJpZ2h0LCAta2h0bWwtY2Vu
dGVyCiAgICAgICAgICAgICBpZiAoW3RleHRBbGlnbiBoYXNTdWZmaXg6QCJsZWZ0Il0pCkBAIC0x
MjU5LDE3ICsxMzMxLDE1IEBAIC0gKE5TRGljdGlvbmFyeSAqKV9jb21wdXRlZEF0dHJpYnV0ZXNG
b3IKICAgICAgICAgICAgICAgICBbcGFyYWdyYXBoU3R5bGUgc2V0SGVhZGVyTGV2ZWw6aGVhZGVy
TGV2ZWxdOwogICAgICAgICB9CiAgICAgICAgIGlmIChpc1BhcmFncmFwaCkgewotICAgICAgICAg
ICAgaWYgKFtzZWxmIF9nZXRGbG9hdDombGVmdE1hcmdpbiBmb3JOb2RlOmJsb2NrRWxlbWVudCBw
cm9wZXJ0eTpDU1NQcm9wZXJ0eU1hcmdpbkxlZnRdICYmIGxlZnRNYXJnaW4gPiAwLjApCisgICAg
ICAgICAgICBpZiAoX2dldEZsb2F0KCZsZWZ0TWFyZ2luLCBibG9ja0VsZW1lbnQsIENTU1Byb3Bl
cnR5TWFyZ2luTGVmdCkgJiYgbGVmdE1hcmdpbiA+IDAuMCkKICAgICAgICAgICAgICAgICBbcGFy
YWdyYXBoU3R5bGUgc2V0SGVhZEluZGVudDpsZWZ0TWFyZ2luXTsKLSAgICAgICAgICAgIGlmIChb
c2VsZiBfZ2V0RmxvYXQ6JnRleHRJbmRlbnQgZm9yTm9kZTpibG9ja0VsZW1lbnQgcHJvcGVydHk6
Q1NTUHJvcGVydHlUZXh0SW5kZW50XSkKKyAgICAgICAgICAgIGlmIChfZ2V0RmxvYXQoJnRleHRJ
bmRlbnQsIGJsb2NrRWxlbWVudCwgQ1NTUHJvcGVydHlUZXh0SW5kZW50KSkKICAgICAgICAgICAg
ICAgICBbcGFyYWdyYXBoU3R5bGUgc2V0Rmlyc3RMaW5lSGVhZEluZGVudDpbcGFyYWdyYXBoU3R5
bGUgaGVhZEluZGVudF0gKyB0ZXh0SW5kZW50XTsKLSAgICAgICAgICAgIGlmIChbc2VsZiBfZ2V0
RmxvYXQ6JnJpZ2h0TWFyZ2luIGZvck5vZGU6YmxvY2tFbGVtZW50IHByb3BlcnR5OkNTU1Byb3Bl
cnR5TWFyZ2luUmlnaHRdICYmIHJpZ2h0TWFyZ2luID4gMC4wKQorICAgICAgICAgICAgaWYgKF9n
ZXRGbG9hdCgmcmlnaHRNYXJnaW4sIGJsb2NrRWxlbWVudCwgQ1NTUHJvcGVydHlNYXJnaW5SaWdo
dCkgJiYgcmlnaHRNYXJnaW4gPiAwLjApCiAgICAgICAgICAgICAgICAgW3BhcmFncmFwaFN0eWxl
IHNldFRhaWxJbmRlbnQ6LXJpZ2h0TWFyZ2luXTsKLSAgICAgICAgICAgIGlmIChbc2VsZiBfZ2V0
RmxvYXQ6JmJvdHRvbU1hcmdpbiBmb3JOb2RlOmJsb2NrRWxlbWVudCBwcm9wZXJ0eTpDU1NQcm9w
ZXJ0eU1hcmdpbkJvdHRvbV0gJiYgYm90dG9tTWFyZ2luID4gMC4wKQorICAgICAgICAgICAgaWYg
KF9nZXRGbG9hdCgmYm90dG9tTWFyZ2luLCBibG9ja0VsZW1lbnQsIENTU1Byb3BlcnR5TWFyZ2lu
Qm90dG9tKSAmJiBib3R0b21NYXJnaW4gPiAwLjApCiAgICAgICAgICAgICAgICAgW3BhcmFncmFw
aFN0eWxlIHNldFBhcmFncmFwaFNwYWNpbmc6Ym90dG9tTWFyZ2luXTsKICAgICAgICAgfQotICAg
ICAgICBpZiAoX3dlYlZpZXdUZXh0U2l6ZU11bHRpcGxpZXIgPiAwLjAgJiYgW3NlbGYgX2dldEZs
b2F0OiZsaW5lSGVpZ2h0IGZvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpDU1NQcm9wZXJ0eUxpbmVI
ZWlnaHRdICYmIGxpbmVIZWlnaHQgPiAwLjApCi0gICAgICAgICAgICBbcGFyYWdyYXBoU3R5bGUg
c2V0TWluaW11bUxpbmVIZWlnaHQ6bGluZUhlaWdodCAvIF93ZWJWaWV3VGV4dFNpemVNdWx0aXBs
aWVyXTsKICAgICAgICAgaWYgKFtfdGV4dExpc3RzIGNvdW50XSA+IDApCiAgICAgICAgICAgICBb
cGFyYWdyYXBoU3R5bGUgc2V0VGV4dExpc3RzOl90ZXh0TGlzdHNdOwogICAgICAgICBpZiAoW190
ZXh0QmxvY2tzIGNvdW50XSA+IDApCkBAIC0xMjgwLDEzICsxMzUwLDEzIEBAIC0gKE5TRGljdGlv
bmFyeSAqKV9jb21wdXRlZEF0dHJpYnV0ZXNGb3IKICAgICByZXR1cm4gYXR0cnM7CiB9CiAKLS0g
KE5TRGljdGlvbmFyeSAqKV9hdHRyaWJ1dGVzRm9yRWxlbWVudDooRE9NRWxlbWVudCAqKWVsZW1l
bnQKK05TRGljdGlvbmFyeSAqSFRNTENvbnZlcnRlcjo6X2F0dHJpYnV0ZXNGb3JFbGVtZW50KERP
TUVsZW1lbnQgKmVsZW1lbnQpCiB7CiAgICAgTlNEaWN0aW9uYXJ5ICpyZXN1bHQ7CiAgICAgaWYg
KGVsZW1lbnQpIHsKICAgICAgICAgcmVzdWx0ID0gW19hdHRyaWJ1dGVzRm9yRWxlbWVudHMgb2Jq
ZWN0Rm9yS2V5OmVsZW1lbnRdOwogICAgICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICAgICAg
cmVzdWx0ID0gW3NlbGYgX2NvbXB1dGVkQXR0cmlidXRlc0ZvckVsZW1lbnQ6ZWxlbWVudF07Cisg
ICAgICAgICAgICByZXN1bHQgPSBfY29tcHV0ZWRBdHRyaWJ1dGVzRm9yRWxlbWVudChlbGVtZW50
KTsKICAgICAgICAgICAgIFtfYXR0cmlidXRlc0ZvckVsZW1lbnRzIHNldE9iamVjdDpyZXN1bHQg
Zm9yS2V5OmVsZW1lbnRdOwogICAgICAgICB9CiAgICAgfSBlbHNlCkBAIC0xMjk1LDExICsxMzY1
LDExIEBAIC0gKE5TRGljdGlvbmFyeSAqKV9hdHRyaWJ1dGVzRm9yRWxlbWVudDoKIAogfQogCi0t
ICh2b2lkKV9uZXdQYXJhZ3JhcGhGb3JFbGVtZW50OihET01FbGVtZW50ICopZWxlbWVudCB0YWc6
KE5TU3RyaW5nICopdGFnIGFsbG93RW1wdHk6KEJPT0wpZmxhZyBzdXBwcmVzc1RyYWlsaW5nU3Bh
Y2U6KEJPT0wpc3VwcHJlc3MKK3ZvaWQgSFRNTENvbnZlcnRlcjo6X25ld1BhcmFncmFwaEZvckVs
ZW1lbnQoRE9NRWxlbWVudCAqZWxlbWVudCwgTlNTdHJpbmcgKnRhZywgQk9PTCBmbGFnLCBCT09M
IHN1cHByZXNzVHJhaWxpbmdTcGFjZSkKIHsKICAgICBOU1VJbnRlZ2VyIHRleHRMZW5ndGggPSBb
X2F0dHJTdHIgbGVuZ3RoXTsKICAgICB1bmljaGFyIGxhc3RDaGFyID0gKHRleHRMZW5ndGggPiAw
KSA/IFtbX2F0dHJTdHIgc3RyaW5nXSBjaGFyYWN0ZXJBdEluZGV4OnRleHRMZW5ndGggLSAxXSA6
ICdcbic7Ci0gICAgTlNSYW5nZSByYW5nZVRvUmVwbGFjZSA9IChzdXBwcmVzcyAmJiBfZmxhZ3Mu
aXNTb2Z0ICYmIChsYXN0Q2hhciA9PSAnICcgfHwgbGFzdENoYXIgPT0gTlNMaW5lU2VwYXJhdG9y
Q2hhcmFjdGVyKSkgPyBOU01ha2VSYW5nZSh0ZXh0TGVuZ3RoIC0gMSwgMSkgOiBOU01ha2VSYW5n
ZSh0ZXh0TGVuZ3RoLCAwKTsKKyAgICBOU1JhbmdlIHJhbmdlVG9SZXBsYWNlID0gKHN1cHByZXNz
VHJhaWxpbmdTcGFjZSAmJiBfZmxhZ3MuaXNTb2Z0ICYmIChsYXN0Q2hhciA9PSAnICcgfHwgbGFz
dENoYXIgPT0gTlNMaW5lU2VwYXJhdG9yQ2hhcmFjdGVyKSkgPyBOU01ha2VSYW5nZSh0ZXh0TGVu
Z3RoIC0gMSwgMSkgOiBOU01ha2VSYW5nZSh0ZXh0TGVuZ3RoLCAwKTsKICAgICBCT09MIG5lZWRC
cmVhayA9IChmbGFnIHx8IGxhc3RDaGFyICE9ICdcbicpOwogICAgIGlmIChuZWVkQnJlYWspIHsK
ICAgICAgICAgTlNTdHJpbmcgKnN0cmluZyA9ICgoW0AiQk9EWSIgaXNFcXVhbFRvU3RyaW5nOnRh
Z10gfHwgW0AiSFRNTCIgaXNFcXVhbFRvU3RyaW5nOnRhZ10pID8gQCIiIDogQCJcbiIpOwpAQCAt
MTMwOCwxNiArMTM3OCwxNCBAQCAtICh2b2lkKV9uZXdQYXJhZ3JhcGhGb3JFbGVtZW50OihET01F
bGVtCiAgICAgICAgIGlmIChyYW5nZVRvUmVwbGFjZS5sb2NhdGlvbiA8IF9kb21SYW5nZVN0YXJ0
SW5kZXgpCiAgICAgICAgICAgICBfZG9tUmFuZ2VTdGFydEluZGV4ICs9IFtzdHJpbmcgbGVuZ3Ro
XSAtIHJhbmdlVG9SZXBsYWNlLmxlbmd0aDsKICAgICAgICAgcmFuZ2VUb1JlcGxhY2UubGVuZ3Ro
ID0gW3N0cmluZyBsZW5ndGhdOwotICAgICAgICBpZiAoIV9mbGFncy5pc0luZGV4aW5nKSB7Ci0g
ICAgICAgICAgICBOU0RpY3Rpb25hcnkgKmF0dHJzID0gW3NlbGYgX2F0dHJpYnV0ZXNGb3JFbGVt
ZW50OmVsZW1lbnRdOwotICAgICAgICAgICAgaWYgKCFfZmxhZ3MuaXNUZXN0aW5nICYmIHJhbmdl
VG9SZXBsYWNlLmxlbmd0aCA+IDApCi0gICAgICAgICAgICAgICAgW19hdHRyU3RyIHNldEF0dHJp
YnV0ZXM6YXR0cnMgcmFuZ2U6cmFuZ2VUb1JlcGxhY2VdOwotICAgICAgICB9CisgICAgICAgIE5T
RGljdGlvbmFyeSAqYXR0cnMgPSBfYXR0cmlidXRlc0ZvckVsZW1lbnQoZWxlbWVudCk7CisgICAg
ICAgIGlmIChyYW5nZVRvUmVwbGFjZS5sZW5ndGggPiAwKQorICAgICAgICAgICAgW19hdHRyU3Ry
IHNldEF0dHJpYnV0ZXM6YXR0cnMgcmFuZ2U6cmFuZ2VUb1JlcGxhY2VdOwogICAgICAgICBfZmxh
Z3MuaXNTb2Z0ID0gWUVTOwogICAgIH0KIH0KIAotLSAodm9pZClfbmV3TGluZUZvckVsZW1lbnQ6
KERPTUVsZW1lbnQgKillbGVtZW50Cit2b2lkIEhUTUxDb252ZXJ0ZXI6Ol9uZXdMaW5lRm9yRWxl
bWVudChET01FbGVtZW50ICplbGVtZW50KQogewogICAgIHVuaWNoYXIgYyA9IE5TTGluZVNlcGFy
YXRvckNoYXJhY3RlcjsKICAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IHN0cmluZyA9IGFkb3B0TlMo
W1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDaGFyYWN0ZXJzOiZjIGxlbmd0aDoxXSk7CkBAIC0x
MzI1LDE2ICsxMzkzLDE1IEBAIC0gKHZvaWQpX25ld0xpbmVGb3JFbGVtZW50OihET01FbGVtZW50
ICoKICAgICBOU1JhbmdlIHJhbmdlVG9SZXBsYWNlID0gTlNNYWtlUmFuZ2UodGV4dExlbmd0aCwg
MCk7CiAgICAgW19hdHRyU3RyIHJlcGxhY2VDaGFyYWN0ZXJzSW5SYW5nZTpyYW5nZVRvUmVwbGFj
ZSB3aXRoU3RyaW5nOnN0cmluZy5nZXQoKV07CiAgICAgcmFuZ2VUb1JlcGxhY2UubGVuZ3RoID0g
W3N0cmluZyBsZW5ndGhdOwotICAgIGlmIChyYW5nZVRvUmVwbGFjZS5sb2NhdGlvbiA8IF9kb21S
YW5nZVN0YXJ0SW5kZXgpIF9kb21SYW5nZVN0YXJ0SW5kZXggKz0gcmFuZ2VUb1JlcGxhY2UubGVu
Z3RoOwotICAgIGlmICghX2ZsYWdzLmlzSW5kZXhpbmcpIHsKLSAgICAgICAgTlNEaWN0aW9uYXJ5
ICphdHRycyA9IFtzZWxmIF9hdHRyaWJ1dGVzRm9yRWxlbWVudDplbGVtZW50XTsKLSAgICAgICAg
aWYgKCFfZmxhZ3MuaXNUZXN0aW5nICYmIHJhbmdlVG9SZXBsYWNlLmxlbmd0aCA+IDApCi0gICAg
ICAgICAgICBbX2F0dHJTdHIgc2V0QXR0cmlidXRlczphdHRycyByYW5nZTpyYW5nZVRvUmVwbGFj
ZV07Ci0gICAgfQorICAgIGlmIChyYW5nZVRvUmVwbGFjZS5sb2NhdGlvbiA8IF9kb21SYW5nZVN0
YXJ0SW5kZXgpCisgICAgICAgIF9kb21SYW5nZVN0YXJ0SW5kZXggKz0gcmFuZ2VUb1JlcGxhY2Uu
bGVuZ3RoOworICAgIE5TRGljdGlvbmFyeSAqYXR0cnMgPSBfYXR0cmlidXRlc0ZvckVsZW1lbnQo
ZWxlbWVudCk7CisgICAgaWYgKHJhbmdlVG9SZXBsYWNlLmxlbmd0aCA+IDApCisgICAgICAgIFtf
YXR0clN0ciBzZXRBdHRyaWJ1dGVzOmF0dHJzIHJhbmdlOnJhbmdlVG9SZXBsYWNlXTsKICAgICBf
ZmxhZ3MuaXNTb2Z0ID0gWUVTOwogfQogCi0tICh2b2lkKV9uZXdUYWJGb3JFbGVtZW50OihET01F
bGVtZW50ICopZWxlbWVudAordm9pZCBIVE1MQ29udmVydGVyOjpfbmV3VGFiRm9yRWxlbWVudChE
T01FbGVtZW50ICplbGVtZW50KQogewogICAgIE5TU3RyaW5nICpzdHJpbmcgPSBAIlx0IjsKICAg
ICBOU1VJbnRlZ2VyIHRleHRMZW5ndGggPSBbX2F0dHJTdHIgbGVuZ3RoXTsKQEAgLTEzNDQsMTUg
KzE0MTEsMTMgQEAgLSAodm9pZClfbmV3VGFiRm9yRWxlbWVudDooRE9NRWxlbWVudCAqKQogICAg
IHJhbmdlVG9SZXBsYWNlLmxlbmd0aCA9IFtzdHJpbmcgbGVuZ3RoXTsKICAgICBpZiAocmFuZ2VU
b1JlcGxhY2UubG9jYXRpb24gPCBfZG9tUmFuZ2VTdGFydEluZGV4KQogICAgICAgICBfZG9tUmFu
Z2VTdGFydEluZGV4ICs9IHJhbmdlVG9SZXBsYWNlLmxlbmd0aDsKLSAgICBpZiAoIV9mbGFncy5p
c0luZGV4aW5nKSB7Ci0gICAgICAgIE5TRGljdGlvbmFyeSAqYXR0cnMgPSBbc2VsZiBfYXR0cmli
dXRlc0ZvckVsZW1lbnQ6ZWxlbWVudF07Ci0gICAgICAgIGlmICghX2ZsYWdzLmlzVGVzdGluZyAm
JiByYW5nZVRvUmVwbGFjZS5sZW5ndGggPiAwKQotICAgICAgICAgICAgW19hdHRyU3RyIHNldEF0
dHJpYnV0ZXM6YXR0cnMgcmFuZ2U6cmFuZ2VUb1JlcGxhY2VdOwotICAgIH0KKyAgICBOU0RpY3Rp
b25hcnkgKmF0dHJzID0gX2F0dHJpYnV0ZXNGb3JFbGVtZW50KGVsZW1lbnQpOworICAgIGlmIChy
YW5nZVRvUmVwbGFjZS5sZW5ndGggPiAwKQorICAgICAgICBbX2F0dHJTdHIgc2V0QXR0cmlidXRl
czphdHRycyByYW5nZTpyYW5nZVRvUmVwbGFjZV07CiAgICAgX2ZsYWdzLmlzU29mdCA9IFlFUzsK
IH0KIAotLSAoQ2xhc3MpX1dlYk1lc3NhZ2VEb2N1bWVudENsYXNzCitzdGF0aWMgQ2xhc3MgX1dl
Yk1lc3NhZ2VEb2N1bWVudENsYXNzKCkKIHsKICAgICBzdGF0aWMgQ2xhc3MgX1dlYk1lc3NhZ2VE
b2N1bWVudENsYXNzID0gTmlsOwogICAgIHN0YXRpYyBCT09MIGxvb2tlZFVwQ2xhc3MgPSBOTzsK
QEAgLTEzNjYsNyArMTQzMSw3IEBAIC0gKENsYXNzKV9XZWJNZXNzYWdlRG9jdW1lbnRDbGFzcwog
ICAgIHJldHVybiBfV2ViTWVzc2FnZURvY3VtZW50Q2xhc3M7CiB9CiAKLS0gKEJPT0wpX2FkZEF0
dGFjaG1lbnRGb3JFbGVtZW50OihET01FbGVtZW50ICopZWxlbWVudCBVUkw6KE5TVVJMICopdXJs
IG5lZWRzUGFyYWdyYXBoOihCT09MKW5lZWRzUGFyYWdyYXBoIHVzZVBsYWNlaG9sZGVyOihCT09M
KWZsYWcKK0JPT0wgSFRNTENvbnZlcnRlcjo6X2FkZEF0dGFjaG1lbnRGb3JFbGVtZW50KERPTUVs
ZW1lbnQgKmVsZW1lbnQsIE5TVVJMICp1cmwsIEJPT0wgbmVlZHNQYXJhZ3JhcGgsIEJPT0wgdXNl
UGxhY2Vob2xkZXIpCiB7CiAgICAgQk9PTCByZXR2YWwgPSBOTywgbm90Rm91bmQgPSBOTzsKICAg
ICBOU0ZpbGVXcmFwcGVyICpmaWxlV3JhcHBlciA9IG5pbDsKQEAgLTEzNzQsOCArMTQzOSw2IEBA
IC0gKEJPT0wpX2FkZEF0dGFjaG1lbnRGb3JFbGVtZW50OihET01FbGUKICAgICBEb2N1bWVudExv
YWRlciAqZGF0YVNvdXJjZSA9IGZyYW1lLT5sb2FkZXIoKS5mcmFtZUhhc0xvYWRlZCgpID8gZnJh
bWUtPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkgOiAwOwogICAgIEJPT0wgaWdub3JlT3JpZW50
YXRpb24gPSBZRVM7CiAKLSAgICBpZiAoX2ZsYWdzLmlzSW5kZXhpbmcpCi0gICAgICAgIHJldHVy
biBOTzsKICAgICBpZiAoW3VybCBpc0ZpbGVVUkxdKSB7CiAgICAgICAgIE5TU3RyaW5nICpwYXRo
ID0gW1t1cmwgcGF0aF0gc3RyaW5nQnlTdGFuZGFyZGl6aW5nUGF0aF07CiAgICAgICAgIGlmIChw
YXRoKQpAQCAtMTM4Nyw3ICsxNDUwLDcgQEAgLSAoQk9PTClfYWRkQXR0YWNobWVudEZvckVsZW1l
bnQ6KERPTUVsZQogICAgICAgICAgICAgcmVzb3VyY2UgPSBkYXRhU291cmNlLT5zdWJyZXNvdXJj
ZSh1cmwpOwogCiAgICAgICAgIGNvbnN0IFN0cmluZyYgbWltZVR5cGUgPSByZXNvdXJjZS0+bWlt
ZVR5cGUoKTsKLSAgICAgICAgaWYgKGZsYWcgJiYgcmVzb3VyY2UgJiYgbWltZVR5cGUgPT0gInRl
eHQvaHRtbCIpCisgICAgICAgIGlmICh1c2VQbGFjZWhvbGRlciAmJiByZXNvdXJjZSAmJiBtaW1l
VHlwZSA9PSAidGV4dC9odG1sIikKICAgICAgICAgICAgIG5vdEZvdW5kID0gWUVTOwogICAgICAg
ICBpZiAocmVzb3VyY2UgJiYgIW5vdEZvdW5kKSB7CiAgICAgICAgICAgICBmaWxlV3JhcHBlciA9
IFtbW05TRmlsZVdyYXBwZXIgYWxsb2NdIGluaXRSZWd1bGFyRmlsZVdpdGhDb250ZW50czpyZXNv
dXJjZS0+ZGF0YSgpLT5jcmVhdGVOU0RhdGEoKS5nZXQoKV0gYXV0b3JlbGVhc2VdOwpAQCAtMTM5
NywxOCArMTQ2MCwyMiBAQCAtIChCT09MKV9hZGRBdHRhY2htZW50Rm9yRWxlbWVudDooRE9NRWxl
CiAjaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAoIWZpbGVXcmFwcGVyICYmICFub3RGb3VuZCkg
ewogICAgICAgICBmaWxlV3JhcHBlciA9IGZpbGVXcmFwcGVyRm9yVVJMKGRhdGFTb3VyY2UsIHVy
bCk7Ci0gICAgICAgIGlmIChmbGFnICYmIGZpbGVXcmFwcGVyICYmIFtbW1tmaWxlV3JhcHBlciBw
cmVmZXJyZWRGaWxlbmFtZV0gcGF0aEV4dGVuc2lvbl0gbG93ZXJjYXNlU3RyaW5nXSBoYXNQcmVm
aXg6QCJodG0iXSkgbm90Rm91bmQgPSBZRVM7Ci0gICAgICAgIGlmIChub3RGb3VuZCkgZmlsZVdy
YXBwZXIgPSBuaWw7CisgICAgICAgIGlmICh1c2VQbGFjZWhvbGRlciAmJiBmaWxlV3JhcHBlciAm
JiBbW1tbZmlsZVdyYXBwZXIgcHJlZmVycmVkRmlsZW5hbWVdIHBhdGhFeHRlbnNpb25dIGxvd2Vy
Y2FzZVN0cmluZ10gaGFzUHJlZml4OkAiaHRtIl0pCisgICAgICAgICAgICBub3RGb3VuZCA9IFlF
UzsKKyAgICAgICAgaWYgKG5vdEZvdW5kKQorICAgICAgICAgICAgZmlsZVdyYXBwZXIgPSBuaWw7
CiAgICAgfQogICAgIGlmICghZmlsZVdyYXBwZXIgJiYgIW5vdEZvdW5kKSB7CiAgICAgICAgIGZp
bGVXcmFwcGVyID0gZmlsZVdyYXBwZXJGb3JVUkwoX2RhdGFTb3VyY2UsIHVybCk7Ci0gICAgICAg
IGlmIChmbGFnICYmIGZpbGVXcmFwcGVyICYmIFtbW1tmaWxlV3JhcHBlciBwcmVmZXJyZWRGaWxl
bmFtZV0gcGF0aEV4dGVuc2lvbl0gbG93ZXJjYXNlU3RyaW5nXSBoYXNQcmVmaXg6QCJodG0iXSkg
bm90Rm91bmQgPSBZRVM7Ci0gICAgICAgIGlmIChub3RGb3VuZCkgZmlsZVdyYXBwZXIgPSBuaWw7
CisgICAgICAgIGlmICh1c2VQbGFjZWhvbGRlciAmJiBmaWxlV3JhcHBlciAmJiBbW1tbZmlsZVdy
YXBwZXIgcHJlZmVycmVkRmlsZW5hbWVdIHBhdGhFeHRlbnNpb25dIGxvd2VyY2FzZVN0cmluZ10g
aGFzUHJlZml4OkAiaHRtIl0pCisgICAgICAgICAgICBub3RGb3VuZCA9IFlFUzsKKyAgICAgICAg
aWYgKG5vdEZvdW5kKQorICAgICAgICAgICAgZmlsZVdyYXBwZXIgPSBuaWw7CiAgICAgfQogI2Vu
ZGlmCiAgICAgaWYgKCFmaWxlV3JhcHBlciAmJiAhbm90Rm91bmQgJiYgdXJsKSB7CiAgICAgICAg
IC8vIFNwZWNpYWwgaGFuZGxpbmcgZm9yIE1haWwgYXR0YWNobWVudHMsIHVudGlsIFdlYktpdCBw
cm92aWRlcyBhIHN0YW5kYXJkIHdheSB0byBnZXQgdGhlIGRhdGEuCi0gICAgICAgIENsYXNzIFdl
Yk1lc3NhZ2VEb2N1bWVudENsYXNzID0gW3NlbGYgX1dlYk1lc3NhZ2VEb2N1bWVudENsYXNzXTsK
KyAgICAgICAgQ2xhc3MgV2ViTWVzc2FnZURvY3VtZW50Q2xhc3MgPSBfV2ViTWVzc2FnZURvY3Vt
ZW50Q2xhc3MoKTsKICAgICAgICAgaWYgKFdlYk1lc3NhZ2VEb2N1bWVudENsYXNzKSB7CiAgICAg
ICAgICAgICBOU1RleHRBdHRhY2htZW50ICptaW1lVGV4dEF0dGFjaG1lbnQgPSBuaWw7CiAgICAg
ICAgICAgICBbV2ViTWVzc2FnZURvY3VtZW50Q2xhc3MgZG9jdW1lbnQ6TlVMTCBhdHRhY2htZW50
OiZtaW1lVGV4dEF0dGFjaG1lbnQgZm9yVVJMOnVybF07CkBAIC0xNDE4LDExICsxNDg1LDExIEBA
IC0gKEJPT0wpX2FkZEF0dGFjaG1lbnRGb3JFbGVtZW50OihET01FbGUKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KLSAgICBpZiAoZmlsZVdyYXBwZXIgfHwgZmxhZykgeworICAgIGlm
IChmaWxlV3JhcHBlciB8fCB1c2VQbGFjZWhvbGRlcikgewogICAgICAgICBOU1VJbnRlZ2VyIHRl
eHRMZW5ndGggPSBbX2F0dHJTdHIgbGVuZ3RoXTsKICAgICAgICAgUmV0YWluUHRyPE5TVGV4dEF0
dGFjaG1lbnQ+IGF0dGFjaG1lbnQgPSBhZG9wdE5TKFtbUGxhdGZvcm1OU1RleHRBdHRhY2htZW50
IGFsbG9jXSBpbml0V2l0aEZpbGVXcmFwcGVyOmZpbGVXcmFwcGVyXSk7CiAjaWYgUExBVEZPUk0o
SU9TKQotICAgICAgICBOU1N0cmluZyAqdkFsaWduID0gW3NlbGYgX3N0cmluZ0Zvck5vZGU6ZWxl
bWVudCBwcm9wZXJ0eTpDU1NQcm9wZXJ0eVZlcnRpY2FsQWxpZ25dOworICAgICAgICBOU1N0cmlu
ZyAqdkFsaWduID0gX3N0cmluZ0Zvck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlWZXJ0aWNhbEFs
aWduKTsKICAgICAgICAgYXR0YWNobWVudC5nZXQoKS5ib3VuZHMgPSBDR1JlY3RNYWtlKDAsIChb
dkFsaWduIGZsb2F0VmFsdWVdIC8gMTAwLikgKiBlbGVtZW50LmNsaWVudEhlaWdodCwgZWxlbWVu
dC5jbGllbnRXaWR0aCwgZWxlbWVudC5jbGllbnRIZWlnaHQpOwogI2VuZGlmCiAgICAgICAgIFJl
dGFpblB0cjxOU1N0cmluZz4gc3RyaW5nID0gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBpbml0
V2l0aEZvcm1hdDoobmVlZHNQYXJhZ3JhcGggPyBAIiVDXG4iIDogQCIlQyIpLCBzdGF0aWNfY2Fz
dDx1bmljaGFyPihOU0F0dGFjaG1lbnRDaGFyYWN0ZXIpXSk7CkBAIC0xNDM2LDcgKzE1MDMsNyBA
QCAtIChCT09MKV9hZGRBdHRhY2htZW50Rm9yRWxlbWVudDooRE9NRWxlCiAgICAgICAgIH0gZWxz
ZSB7CiAjaWYgUExBVEZPUk0oSU9TKQogICAgICAgICAgICAgW2F0dGFjaG1lbnQgcmVsZWFzZV07
Ci0gICAgICAgICAgICBOU1VSTCAqbWlzc2luZ0ltYWdlVVJMID0gW1tzZWxmIF93ZWJLaXRCdW5k
bGVdIFVSTEZvclJlc291cmNlOkAibWlzc2luZ19pbWFnZSIgd2l0aEV4dGVuc2lvbjpAInRpZmYi
XTsKKyAgICAgICAgICAgIE5TVVJMICptaXNzaW5nSW1hZ2VVUkwgPSBbX3dlYktpdEJ1bmRsZSgp
IFVSTEZvclJlc291cmNlOkAibWlzc2luZ19pbWFnZSIgd2l0aEV4dGVuc2lvbjpAInRpZmYiXTsK
ICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobWlzc2luZ0ltYWdlVVJMICE9IG5pbCwg
IlVuYWJsZSB0byBmaW5kIG1pc3NpbmdfaW1hZ2UudGlmZiEiKTsKICAgICAgICAgICAgIE5TRmls
ZVdyYXBwZXIgKm1pc3NpbmdJbWFnZUZpbGVXcmFwcGVyID0gW1tbTlNGaWxlV3JhcHBlciBhbGxv
Y10gaW5pdFdpdGhVUkw6bWlzc2luZ0ltYWdlVVJMIG9wdGlvbnM6MCBlcnJvcjpOVUxMXSBhdXRv
cmVsZWFzZV07CiAgICAgICAgICAgICBhdHRhY2htZW50ID0gW1tQbGF0Zm9ybU5TVGV4dEF0dGFj
aG1lbnQgYWxsb2NdIGluaXRXaXRoRmlsZVdyYXBwZXI6bWlzc2luZ0ltYWdlRmlsZVdyYXBwZXJd
OwpAQCAtMTQ1Miw4ICsxNTE5LDggQEAgLSAoQk9PTClfYWRkQXR0YWNobWVudEZvckVsZW1lbnQ6
KERPTUVsZQogICAgICAgICByYW5nZVRvUmVwbGFjZS5sZW5ndGggPSBbc3RyaW5nIGxlbmd0aF07
CiAgICAgICAgIGlmIChyYW5nZVRvUmVwbGFjZS5sb2NhdGlvbiA8IF9kb21SYW5nZVN0YXJ0SW5k
ZXgpCiAgICAgICAgICAgICBfZG9tUmFuZ2VTdGFydEluZGV4ICs9IHJhbmdlVG9SZXBsYWNlLmxl
bmd0aDsKLSAgICAgICAgYXR0cnMgPSBbc2VsZiBfYXR0cmlidXRlc0ZvckVsZW1lbnQ6ZWxlbWVu
dF07Ci0gICAgICAgIGlmICghX2ZsYWdzLmlzVGVzdGluZyAmJiByYW5nZVRvUmVwbGFjZS5sZW5n
dGggPiAwKSB7CisgICAgICAgIGF0dHJzID0gX2F0dHJpYnV0ZXNGb3JFbGVtZW50KGVsZW1lbnQp
OworICAgICAgICBpZiAocmFuZ2VUb1JlcGxhY2UubGVuZ3RoID4gMCkgewogICAgICAgICAgICAg
W19hdHRyU3RyIHNldEF0dHJpYnV0ZXM6YXR0cnMgcmFuZ2U6cmFuZ2VUb1JlcGxhY2VdOwogICAg
ICAgICAgICAgcmFuZ2VUb1JlcGxhY2UubGVuZ3RoID0gMTsKICAgICAgICAgICAgIFtfYXR0clN0
ciBhZGRBdHRyaWJ1dGU6TlNBdHRhY2htZW50QXR0cmlidXRlTmFtZSB2YWx1ZTphdHRhY2htZW50
LmdldCgpIHJhbmdlOnJhbmdlVG9SZXBsYWNlXTsKQEAgLTE0NjQsNyArMTUzMSw3IEBAIC0gKEJP
T0wpX2FkZEF0dGFjaG1lbnRGb3JFbGVtZW50OihET01FbGUKICAgICByZXR1cm4gcmV0dmFsOwog
fQogCi0tICh2b2lkKV9hZGRRdW90ZUZvckVsZW1lbnQ6KERPTUVsZW1lbnQgKillbGVtZW50IG9w
ZW5pbmc6KEJPT0wpb3BlbmluZyBsZXZlbDooTlNJbnRlZ2VyKWxldmVsCit2b2lkIEhUTUxDb252
ZXJ0ZXI6Ol9hZGRRdW90ZUZvckVsZW1lbnQoRE9NRWxlbWVudCAqZWxlbWVudCwgQk9PTCBvcGVu
aW5nLCBOU0ludGVnZXIgbGV2ZWwpCiB7CiAgICAgdW5pY2hhciBjID0gKChsZXZlbCAlIDIpID09
IDApID8gKG9wZW5pbmcgPyAweDIwMWMgOiAweDIwMWQpIDogKG9wZW5pbmcgPyAweDIwMTggOiAw
eDIwMTkpOwogICAgIFJldGFpblB0cjxOU1N0cmluZz4gc3RyaW5nID0gYWRvcHROUyhbW05TU3Ry
aW5nIGFsbG9jXSBpbml0V2l0aENoYXJhY3RlcnM6JmMgbGVuZ3RoOjFdKTsKQEAgLTE0NzQsMTUg
KzE1NDEsMTMgQEAgLSAodm9pZClfYWRkUXVvdGVGb3JFbGVtZW50OihET01FbGVtZW50IAogICAg
IHJhbmdlVG9SZXBsYWNlLmxlbmd0aCA9IFtzdHJpbmcgbGVuZ3RoXTsKICAgICBpZiAocmFuZ2VU
b1JlcGxhY2UubG9jYXRpb24gPCBfZG9tUmFuZ2VTdGFydEluZGV4KQogICAgICAgICBfZG9tUmFu
Z2VTdGFydEluZGV4ICs9IHJhbmdlVG9SZXBsYWNlLmxlbmd0aDsKLSAgICBpZiAoIV9mbGFncy5p
c0luZGV4aW5nKSB7Ci0gICAgICAgIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+IGF0dHJzID0gW3Nl
bGYgX2F0dHJpYnV0ZXNGb3JFbGVtZW50OmVsZW1lbnRdOwotICAgICAgICBpZiAoIV9mbGFncy5p
c1Rlc3RpbmcgJiYgcmFuZ2VUb1JlcGxhY2UubGVuZ3RoID4gMCkKLSAgICAgICAgICAgIFtfYXR0
clN0ciBzZXRBdHRyaWJ1dGVzOmF0dHJzLmdldCgpIHJhbmdlOnJhbmdlVG9SZXBsYWNlXTsKLSAg
ICB9CisgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gYXR0cnMgPSBfYXR0cmlidXRlc0ZvckVs
ZW1lbnQoZWxlbWVudCk7CisgICAgaWYgKHJhbmdlVG9SZXBsYWNlLmxlbmd0aCA+IDApCisgICAg
ICAgIFtfYXR0clN0ciBzZXRBdHRyaWJ1dGVzOmF0dHJzLmdldCgpIHJhbmdlOnJhbmdlVG9SZXBs
YWNlXTsKICAgICBfZmxhZ3MuaXNTb2Z0ID0gTk87CiB9CiAKLS0gKHZvaWQpX2FkZFZhbHVlOihO
U1N0cmluZyAqKXZhbHVlIGZvckVsZW1lbnQ6KERPTUVsZW1lbnQgKillbGVtZW50Cit2b2lkIEhU
TUxDb252ZXJ0ZXI6Ol9hZGRWYWx1ZShOU1N0cmluZyAqdmFsdWUsIERPTUVsZW1lbnQgKmVsZW1l
bnQpCiB7CiAgICAgTlNVSW50ZWdlciB0ZXh0TGVuZ3RoID0gW19hdHRyU3RyIGxlbmd0aF07CiAg
ICAgTlNVSW50ZWdlciB2YWx1ZUxlbmd0aCA9IFt2YWx1ZSBsZW5ndGhdOwpAQCAtMTQ5MiwxNiAr
MTU1NywxNCBAQCAtICh2b2lkKV9hZGRWYWx1ZTooTlNTdHJpbmcgKil2YWx1ZSBmb3JFCiAgICAg
ICAgIHJhbmdlVG9SZXBsYWNlLmxlbmd0aCA9IHZhbHVlTGVuZ3RoOwogICAgICAgICBpZiAocmFu
Z2VUb1JlcGxhY2UubG9jYXRpb24gPCBfZG9tUmFuZ2VTdGFydEluZGV4KQogICAgICAgICAgICAg
X2RvbVJhbmdlU3RhcnRJbmRleCArPSByYW5nZVRvUmVwbGFjZS5sZW5ndGg7Ci0gICAgICAgIGlm
ICghX2ZsYWdzLmlzSW5kZXhpbmcpIHsKLSAgICAgICAgICAgIFJldGFpblB0cjxOU0RpY3Rpb25h
cnk+IGF0dHJzID0gW3NlbGYgX2F0dHJpYnV0ZXNGb3JFbGVtZW50OmVsZW1lbnRdOwotICAgICAg
ICAgICAgaWYgKCFfZmxhZ3MuaXNUZXN0aW5nICYmIHJhbmdlVG9SZXBsYWNlLmxlbmd0aCA+IDAp
Ci0gICAgICAgICAgICAgICAgW19hdHRyU3RyIHNldEF0dHJpYnV0ZXM6YXR0cnMuZ2V0KCkgcmFu
Z2U6cmFuZ2VUb1JlcGxhY2VdOwotICAgICAgICB9CisgICAgICAgIFJldGFpblB0cjxOU0RpY3Rp
b25hcnk+IGF0dHJzID0gX2F0dHJpYnV0ZXNGb3JFbGVtZW50KGVsZW1lbnQpOworICAgICAgICBp
ZiAocmFuZ2VUb1JlcGxhY2UubGVuZ3RoID4gMCkKKyAgICAgICAgICAgIFtfYXR0clN0ciBzZXRB
dHRyaWJ1dGVzOmF0dHJzLmdldCgpIHJhbmdlOnJhbmdlVG9SZXBsYWNlXTsKICAgICAgICAgX2Zs
YWdzLmlzU29mdCA9IE5POwogICAgIH0KIH0KIAotLSAodm9pZClfZmlsbEluQmxvY2s6KE5TVGV4
dEJsb2NrICopYmxvY2sgZm9yRWxlbWVudDooRE9NRWxlbWVudCAqKWVsZW1lbnQgYmFja2dyb3Vu
ZENvbG9yOihQbGF0Zm9ybUNvbG9yICopYmFja2dyb3VuZENvbG9yIGV4dHJhTWFyZ2luOihDR0Zs
b2F0KWV4dHJhTWFyZ2luIGV4dHJhUGFkZGluZzooQ0dGbG9hdClleHRyYVBhZGRpbmcgaXNUYWJs
ZTooQk9PTClpc1RhYmxlCit2b2lkIEhUTUxDb252ZXJ0ZXI6Ol9maWxsSW5CbG9jayhOU1RleHRC
bG9jayAqYmxvY2ssIERPTUVsZW1lbnQgKmVsZW1lbnQsIFBsYXRmb3JtQ29sb3IgKmJhY2tncm91
bmRDb2xvciwgQ0dGbG9hdCBleHRyYU1hcmdpbiwgQ0dGbG9hdCBleHRyYVBhZGRpbmcsIEJPT0wg
aXNUYWJsZSkKIHsKICAgICBDR0Zsb2F0IHZhbCA9IDA7CiAgICAgUGxhdGZvcm1Db2xvciAqY29s
b3IgPSBuaWw7CkBAIC0xNTA5LDU3ICsxNTcyLDU5IEBAIC0gKHZvaWQpX2ZpbGxJbkJsb2NrOihO
U1RleHRCbG9jayAqKWJsb2MKICAgICBOU1N0cmluZyAqd2lkdGggPSBpc1RhYmxlQ2VsbEVsZW1l
bnQgPyBbKERPTUhUTUxUYWJsZUNlbGxFbGVtZW50ICopZWxlbWVudCB3aWR0aF0gOiBbZWxlbWVu
dCBnZXRBdHRyaWJ1dGU6QCJ3aWR0aCJdOwogCiAgICAgaWYgKCh3aWR0aCAmJiBbd2lkdGggbGVu
Z3RoXSkgfHwgIWlzVGFibGUpIHsKLSAgICAgICAgaWYgKFtzZWxmIF9nZXRGbG9hdDomdmFsIGZv
ck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpDU1NQcm9wZXJ0eVdpZHRoXSkKKyAgICAgICAgaWYgKF9n
ZXRGbG9hdCgmdmFsLCBlbGVtZW50LCBDU1NQcm9wZXJ0eVdpZHRoKSkKICAgICAgICAgICAgIFti
bG9jayBzZXRWYWx1ZTp2YWwgdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckRp
bWVuc2lvbjpOU1RleHRCbG9ja1dpZHRoXTsKICAgICB9CiAgICAgCi0gICAgaWYgKFtzZWxmIF9n
ZXRGbG9hdDomdmFsIGZvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpDU1NQcm9wZXJ0eU1pbldpZHRo
XSkKKyAgICBpZiAoX2dldEZsb2F0KCZ2YWwsIGVsZW1lbnQsIENTU1Byb3BlcnR5TWluV2lkdGgp
KQogICAgICAgICBbYmxvY2sgc2V0VmFsdWU6dmFsIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZh
bHVlVHlwZSBmb3JEaW1lbnNpb246TlNUZXh0QmxvY2tNaW5pbXVtV2lkdGhdOwotICAgIGlmIChb
c2VsZiBfZ2V0RmxvYXQ6JnZhbCBmb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6Q1NTUHJvcGVydHlN
YXhXaWR0aF0pCisgICAgaWYgKF9nZXRGbG9hdCgmdmFsLCBlbGVtZW50LCBDU1NQcm9wZXJ0eU1h
eFdpZHRoKSkKICAgICAgICAgW2Jsb2NrIHNldFZhbHVlOnZhbCB0eXBlOk5TVGV4dEJsb2NrQWJz
b2x1dGVWYWx1ZVR5cGUgZm9yRGltZW5zaW9uOk5TVGV4dEJsb2NrTWF4aW11bVdpZHRoXTsKLSAg
ICBpZiAoW3NlbGYgX2dldEZsb2F0OiZ2YWwgZm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkNTU1By
b3BlcnR5TWluSGVpZ2h0XSkKKyAgICBpZiAoX2dldEZsb2F0KCZ2YWwsIGVsZW1lbnQsIENTU1By
b3BlcnR5TWluSGVpZ2h0KSkKICAgICAgICAgW2Jsb2NrIHNldFZhbHVlOnZhbCB0eXBlOk5TVGV4
dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yRGltZW5zaW9uOk5TVGV4dEJsb2NrTWluaW11bUhl
aWdodF07Ci0gICAgaWYgKFtzZWxmIF9nZXRGbG9hdDomdmFsIGZvck5vZGU6ZWxlbWVudCBwcm9w
ZXJ0eTpDU1NQcm9wZXJ0eU1heEhlaWdodF0pCisgICAgaWYgKF9nZXRGbG9hdCgmdmFsLCBlbGVt
ZW50LCBDU1NQcm9wZXJ0eU1heEhlaWdodCkpCiAgICAgICAgIFtibG9jayBzZXRWYWx1ZTp2YWwg
dHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckRpbWVuc2lvbjpOU1RleHRCbG9j
a01heGltdW1IZWlnaHRdOwogCi0gICAgaWYgKFtzZWxmIF9nZXRGbG9hdDomdmFsIGZvck5vZGU6
ZWxlbWVudCBwcm9wZXJ0eTpDU1NQcm9wZXJ0eVBhZGRpbmdMZWZ0XSkKKyAgICBpZiAoX2dldEZs
b2F0KCZ2YWwsIGVsZW1lbnQsIENTU1Byb3BlcnR5UGFkZGluZ0xlZnQpKQogICAgICAgICBbYmxv
Y2sgc2V0V2lkdGg6dmFsICsgZXh0cmFQYWRkaW5nIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZh
bHVlVHlwZSBmb3JMYXllcjpOU1RleHRCbG9ja1BhZGRpbmcgZWRnZTpOU01pblhFZGdlXTsKLSAg
ICBlbHNlIFtibG9jayBzZXRXaWR0aDpleHRyYVBhZGRpbmcgdHlwZTpOU1RleHRCbG9ja0Fic29s
dXRlVmFsdWVUeXBlIGZvckxheWVyOk5TVGV4dEJsb2NrUGFkZGluZyBlZGdlOk5TTWluWEVkZ2Vd
OwotICAgIGlmIChbc2VsZiBfZ2V0RmxvYXQ6JnZhbCBmb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6
Q1NTUHJvcGVydHlQYWRkaW5nVG9wXSkKKyAgICBlbHNlCisgICAgICAgIFtibG9jayBzZXRXaWR0
aDpleHRyYVBhZGRpbmcgdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVy
Ok5TVGV4dEJsb2NrUGFkZGluZyBlZGdlOk5TTWluWEVkZ2VdOworICAgIGlmIChfZ2V0RmxvYXQo
JnZhbCwgZWxlbWVudCwgQ1NTUHJvcGVydHlQYWRkaW5nVG9wKSkKICAgICAgICAgW2Jsb2NrIHNl
dFdpZHRoOnZhbCArIGV4dHJhUGFkZGluZyB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5
cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tQYWRkaW5nIGVkZ2U6TlNNaW5ZRWRnZV07IGVsc2UgW2Js
b2NrIHNldFdpZHRoOmV4dHJhUGFkZGluZyB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5
cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tQYWRkaW5nIGVkZ2U6TlNNaW5ZRWRnZV07Ci0gICAgaWYg
KFtzZWxmIF9nZXRGbG9hdDomdmFsIGZvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpDU1NQcm9wZXJ0
eVBhZGRpbmdSaWdodF0pCisgICAgaWYgKF9nZXRGbG9hdCgmdmFsLCBlbGVtZW50LCBDU1NQcm9w
ZXJ0eVBhZGRpbmdSaWdodCkpCiAgICAgICAgIFtibG9jayBzZXRXaWR0aDp2YWwgKyBleHRyYVBh
ZGRpbmcgdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5TVGV4dEJs
b2NrUGFkZGluZyBlZGdlOk5TTWF4WEVkZ2VdOyBlbHNlIFtibG9jayBzZXRXaWR0aDpleHRyYVBh
ZGRpbmcgdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5TVGV4dEJs
b2NrUGFkZGluZyBlZGdlOk5TTWF4WEVkZ2VdOwotICAgIGlmIChbc2VsZiBfZ2V0RmxvYXQ6JnZh
bCBmb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6Q1NTUHJvcGVydHlQYWRkaW5nQm90dG9tXSkKKyAg
ICBpZiAoX2dldEZsb2F0KCZ2YWwsIGVsZW1lbnQsIENTU1Byb3BlcnR5UGFkZGluZ0JvdHRvbSkp
CiAgICAgICAgIFtibG9jayBzZXRXaWR0aDp2YWwgKyBleHRyYVBhZGRpbmcgdHlwZTpOU1RleHRC
bG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5TVGV4dEJsb2NrUGFkZGluZyBlZGdlOk5T
TWF4WUVkZ2VdOyBlbHNlIFtibG9jayBzZXRXaWR0aDpleHRyYVBhZGRpbmcgdHlwZTpOU1RleHRC
bG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5TVGV4dEJsb2NrUGFkZGluZyBlZGdlOk5T
TWF4WUVkZ2VdOwogICAgIAotICAgIGlmIChbc2VsZiBfZ2V0RmxvYXQ6JnZhbCBmb3JOb2RlOmVs
ZW1lbnQgcHJvcGVydHk6Q1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGhdKQorICAgIGlmIChfZ2V0
RmxvYXQoJnZhbCwgZWxlbWVudCwgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGgpKQogICAgICAg
ICBbYmxvY2sgc2V0V2lkdGg6dmFsIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBm
b3JMYXllcjpOU1RleHRCbG9ja0JvcmRlciBlZGdlOk5TTWluWEVkZ2VdOwotICAgIGlmIChbc2Vs
ZiBfZ2V0RmxvYXQ6JnZhbCBmb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6Q1NTUHJvcGVydHlCb3Jk
ZXJUb3BXaWR0aF0pCisgICAgaWYgKF9nZXRGbG9hdCgmdmFsLCBlbGVtZW50LCBDU1NQcm9wZXJ0
eUJvcmRlclRvcFdpZHRoKSkKICAgICAgICAgW2Jsb2NrIHNldFdpZHRoOnZhbCB0eXBlOk5TVGV4
dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tCb3JkZXIgZWRnZTpO
U01pbllFZGdlXTsKLSAgICBpZiAoW3NlbGYgX2dldEZsb2F0OiZ2YWwgZm9yTm9kZTplbGVtZW50
IHByb3BlcnR5OkNTU1Byb3BlcnR5Qm9yZGVyUmlnaHRXaWR0aF0pCisgICAgaWYgKF9nZXRGbG9h
dCgmdmFsLCBlbGVtZW50LCBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lkdGgpKQogICAgICAgICBb
YmxvY2sgc2V0V2lkdGg6dmFsIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JM
YXllcjpOU1RleHRCbG9ja0JvcmRlciBlZGdlOk5TTWF4WEVkZ2VdOwotICAgIGlmIChbc2VsZiBf
Z2V0RmxvYXQ6JnZhbCBmb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6Q1NTUHJvcGVydHlCb3JkZXJC
b3R0b21XaWR0aF0pCisgICAgaWYgKF9nZXRGbG9hdCgmdmFsLCBlbGVtZW50LCBDU1NQcm9wZXJ0
eUJvcmRlckJvdHRvbVdpZHRoKSkKICAgICAgICAgW2Jsb2NrIHNldFdpZHRoOnZhbCB0eXBlOk5T
VGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tCb3JkZXIgZWRn
ZTpOU01heFlFZGdlXTsKIAotICAgIGlmIChbc2VsZiBfZ2V0RmxvYXQ6JnZhbCBmb3JOb2RlOmVs
ZW1lbnQgcHJvcGVydHk6Q1NTUHJvcGVydHlNYXJnaW5MZWZ0XSkKKyAgICBpZiAoX2dldEZsb2F0
KCZ2YWwsIGVsZW1lbnQsIENTU1Byb3BlcnR5TWFyZ2luTGVmdCkpCiAgICAgICAgIFtibG9jayBz
ZXRXaWR0aDp2YWwgKyBleHRyYU1hcmdpbiB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5
cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tNYXJnaW4gZWRnZTpOU01pblhFZGdlXTsgZWxzZSBbYmxv
Y2sgc2V0V2lkdGg6ZXh0cmFNYXJnaW4gdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBl
IGZvckxheWVyOk5TVGV4dEJsb2NrTWFyZ2luIGVkZ2U6TlNNaW5YRWRnZV07Ci0gICAgaWYgKFtz
ZWxmIF9nZXRGbG9hdDomdmFsIGZvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpDU1NQcm9wZXJ0eU1h
cmdpblRvcF0pCisgICAgaWYgKF9nZXRGbG9hdCgmdmFsLCBlbGVtZW50LCBDU1NQcm9wZXJ0eU1h
cmdpblRvcCkpCiAgICAgICAgIFtibG9jayBzZXRXaWR0aDp2YWwgKyBleHRyYU1hcmdpbiB0eXBl
Ok5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tNYXJnaW4g
ZWRnZTpOU01pbllFZGdlXTsgZWxzZSBbYmxvY2sgc2V0V2lkdGg6ZXh0cmFNYXJnaW4gdHlwZTpO
U1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5TVGV4dEJsb2NrTWFyZ2luIGVk
Z2U6TlNNaW5ZRWRnZV07Ci0gICAgaWYgKFtzZWxmIF9nZXRGbG9hdDomdmFsIGZvck5vZGU6ZWxl
bWVudCBwcm9wZXJ0eTpDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0XSkKKyAgICBpZiAoX2dldEZsb2F0
KCZ2YWwsIGVsZW1lbnQsIENTU1Byb3BlcnR5TWFyZ2luUmlnaHQpKQogICAgICAgICBbYmxvY2sg
c2V0V2lkdGg6dmFsICsgZXh0cmFNYXJnaW4gdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVU
eXBlIGZvckxheWVyOk5TVGV4dEJsb2NrTWFyZ2luIGVkZ2U6TlNNYXhYRWRnZV07IGVsc2UgW2Js
b2NrIHNldFdpZHRoOmV4dHJhTWFyZ2luIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlw
ZSBmb3JMYXllcjpOU1RleHRCbG9ja01hcmdpbiBlZGdlOk5TTWF4WEVkZ2VdOwotICAgIGlmIChb
c2VsZiBfZ2V0RmxvYXQ6JnZhbCBmb3JOb2RlOmVsZW1lbnQgcHJvcGVydHk6Q1NTUHJvcGVydHlN
YXJnaW5Cb3R0b21dKQorICAgIGlmIChfZ2V0RmxvYXQoJnZhbCwgZWxlbWVudCwgQ1NTUHJvcGVy
dHlNYXJnaW5Cb3R0b20pKQogICAgICAgICBbYmxvY2sgc2V0V2lkdGg6dmFsICsgZXh0cmFNYXJn
aW4gdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5TVGV4dEJsb2Nr
TWFyZ2luIGVkZ2U6TlNNYXhZRWRnZV07IGVsc2UgW2Jsb2NrIHNldFdpZHRoOmV4dHJhTWFyZ2lu
IHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1RleHRCbG9ja01h
cmdpbiBlZGdlOk5TTWF4WUVkZ2VdOwogCi0gICAgaWYgKChjb2xvciA9IFtzZWxmIF9jb2xvckZv
ck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcl0pKQorICAg
IGlmICgoY29sb3IgPSBfY29sb3JGb3JOb2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yKSkpCiAgICAgICAgIFtibG9jayBzZXRCYWNrZ3JvdW5kQ29sb3I6Y29sb3JdOwotICAg
IGlmICghY29sb3IgJiYgYmFja2dyb3VuZENvbG9yKSBbYmxvY2sgc2V0QmFja2dyb3VuZENvbG9y
OmJhY2tncm91bmRDb2xvcl07Ci0gICAgaWYgKChjb2xvciA9IFtzZWxmIF9jb2xvckZvck5vZGU6
ZWxlbWVudCBwcm9wZXJ0eTpDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvcl0pKQorICAgIGlmICgh
Y29sb3IgJiYgYmFja2dyb3VuZENvbG9yKQorICAgICAgICBbYmxvY2sgc2V0QmFja2dyb3VuZENv
bG9yOmJhY2tncm91bmRDb2xvcl07CisgICAgaWYgKChjb2xvciA9IF9jb2xvckZvck5vZGUoZWxl
bWVudCwgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3IpKSkKICAgICAgICAgW2Jsb2NrIHNldEJv
cmRlckNvbG9yOmNvbG9yIGZvckVkZ2U6TlNNaW5YRWRnZV07Ci0gICAgaWYgKChjb2xvciA9IFtz
ZWxmIF9jb2xvckZvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpDU1NQcm9wZXJ0eUJvcmRlclRvcENv
bG9yXSkpCisgICAgaWYgKChjb2xvciA9IF9jb2xvckZvck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVy
dHlCb3JkZXJUb3BDb2xvcikpKQogICAgICAgICBbYmxvY2sgc2V0Qm9yZGVyQ29sb3I6Y29sb3Ig
Zm9yRWRnZTpOU01pbllFZGdlXTsKLSAgICBpZiAoKGNvbG9yID0gW3NlbGYgX2NvbG9yRm9yTm9k
ZTplbGVtZW50IHByb3BlcnR5OkNTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvcl0pKQorICAgIGlm
ICgoY29sb3IgPSBfY29sb3JGb3JOb2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRD
b2xvcikpKQogICAgICAgICBbYmxvY2sgc2V0Qm9yZGVyQ29sb3I6Y29sb3IgZm9yRWRnZTpOU01h
eFhFZGdlXTsKLSAgICBpZiAoKGNvbG9yID0gW3NlbGYgX2NvbG9yRm9yTm9kZTplbGVtZW50IHBy
b3BlcnR5OkNTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3JdKSkKKyAgICBpZiAoKGNvbG9yID0g
X2NvbG9yRm9yTm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNvbG9yKSkpCiAg
ICAgICAgIFtibG9jayBzZXRCb3JkZXJDb2xvcjpjb2xvciBmb3JFZGdlOk5TTWF4WUVkZ2VdOwog
fQogCkBAIC0xNjI5LDcgKzE2OTQsOCBAQCBzdGF0aWMgTlNJbnRlZ2VyIF9jb2xDb21wYXJlKGlk
IGJsb2NrMSwgCiAgICAgcmV0dXJuICgoY29sMSA8IGNvbDIpID8gTlNPcmRlcmVkQXNjZW5kaW5n
IDogKChjb2wxID09IGNvbDIpID8gTlNPcmRlcmVkU2FtZSA6IE5TT3JkZXJlZERlc2NlbmRpbmcp
KTsKIH0KIAotLSAodm9pZClfcHJvY2Vzc01ldGFFbGVtZW50V2l0aE5hbWU6KE5TU3RyaW5nICop
bmFtZSBjb250ZW50OihOU1N0cmluZyAqKWNvbnRlbnQgewordm9pZCBIVE1MQ29udmVydGVyOjpf
cHJvY2Vzc01ldGFFbGVtZW50V2l0aE5hbWUoTlNTdHJpbmcgKm5hbWUsIE5TU3RyaW5nICpjb250
ZW50KQorewogICAgIE5TU3RyaW5nICprZXkgPSBuaWw7CiAgICAgaWYgKE5TT3JkZXJlZFNhbWUg
PT0gW0AiQ29jb2FWZXJzaW9uIiBjb21wYXJlOm5hbWUgb3B0aW9uczpOU0Nhc2VJbnNlbnNpdGl2
ZVNlYXJjaF0pIHsKICAgICAgICAgQ0dGbG9hdCB2ZXJzaW9uTnVtYmVyID0gW2NvbnRlbnQgZG91
YmxlVmFsdWVdOwpAQCAtMTY5MSw5ICsxNzU3LDEwIEBAIC0gKHZvaWQpX3Byb2Nlc3NNZXRhRWxl
bWVudFdpdGhOYW1lOihOU1MKICAgICAgICAgW19kb2N1bWVudEF0dHJzIHNldE9iamVjdDpjb250
ZW50IGZvcktleTprZXldOwogfQogCi0tICh2b2lkKV9wcm9jZXNzSGVhZEVsZW1lbnQ6KERPTUVs
ZW1lbnQgKillbGVtZW50IHsKK3ZvaWQgSFRNTENvbnZlcnRlcjo6X3Byb2Nlc3NIZWFkRWxlbWVu
dChET01FbGVtZW50ICplbGVtZW50KQorewogICAgIC8vID8/PyBzaG91bGQgZ2F0aGVyIGRhdGEg
ZnJvbSBvdGhlciBzb3VyY2VzIGUuZy4gV29yZCwgYnV0IGZvciB0aGF0IHdlIHdvdWxkIG5lZWQg
dG8gYmUgYWJsZSB0byBnZXQgY29tbWVudHMgZnJvbSBET00KLSAgICBOU0FycmF5ICpjaGlsZE5v
ZGVzID0gW3NlbGYgX2NoaWxkcmVuRm9yTm9kZTplbGVtZW50XTsKKyAgICBOU0FycmF5ICpjaGls
ZE5vZGVzID0gX2NoaWxkcmVuRm9yTm9kZShlbGVtZW50KTsKICAgICBOU1VJbnRlZ2VyIGNvdW50
ID0gW2NoaWxkTm9kZXMgY291bnRdOwogICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNv
dW50OyBpKyspIHsKICAgICAgICAgRE9NTm9kZSAqbm9kZSA9IFtjaGlsZE5vZGVzIG9iamVjdEF0
SW5kZXg6aV07CkBAIC0xNzA1LDI2ICsxNzcyLDI2IEBAIC0gKHZvaWQpX3Byb2Nlc3NIZWFkRWxl
bWVudDooRE9NRWxlbWVudCAKICAgICAgICAgICAgICAgICBOU1N0cmluZyAqbmFtZSA9IFsoRE9N
SFRNTE1ldGFFbGVtZW50ICopZWxlbWVudCBuYW1lXTsKICAgICAgICAgICAgICAgICBOU1N0cmlu
ZyAqY29udGVudCA9IFsoRE9NSFRNTE1ldGFFbGVtZW50ICopZWxlbWVudCBjb250ZW50XTsKICAg
ICAgICAgICAgICAgICBpZiAobmFtZSAmJiBjb250ZW50KQotICAgICAgICAgICAgICAgICAgICBb
c2VsZiBfcHJvY2Vzc01ldGFFbGVtZW50V2l0aE5hbWU6bmFtZSBjb250ZW50OmNvbnRlbnRdOwor
ICAgICAgICAgICAgICAgICAgICBfcHJvY2Vzc01ldGFFbGVtZW50V2l0aE5hbWUobmFtZSwgY29u
dGVudCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiB9CiAKLS0gKEJPT0wpX2Vu
dGVyRWxlbWVudDooRE9NRWxlbWVudCAqKWVsZW1lbnQgdGFnOihOU1N0cmluZyAqKXRhZyBkaXNw
bGF5OihOU1N0cmluZyAqKWRpc3BsYXlWYWwgZW1iZWRkZWQ6KEJPT0wpZW1iZWRkZWQKK0JPT0wg
SFRNTENvbnZlcnRlcjo6X2VudGVyRWxlbWVudChET01FbGVtZW50ICplbGVtZW50LCBOU1N0cmlu
ZyAqdGFnLCBOU1N0cmluZyAqZGlzcGxheVZhbCwgQk9PTCBlbWJlZGRlZCkKIHsKICAgICBpZiAo
W0AiSEVBRCIgaXNFcXVhbFRvU3RyaW5nOnRhZ10gJiYgIWVtYmVkZGVkKQotICAgICAgICBbc2Vs
ZiBfcHJvY2Vzc0hlYWRFbGVtZW50OmVsZW1lbnRdOworICAgICAgICBfcHJvY2Vzc0hlYWRFbGVt
ZW50KGVsZW1lbnQpOwogICAgIGVsc2UgaWYgKCFkaXNwbGF5VmFsIHx8ICEoW0Aibm9uZSIgaXNF
cXVhbFRvU3RyaW5nOmRpc3BsYXlWYWxdIHx8IFtAInRhYmxlLWNvbHVtbiIgaXNFcXVhbFRvU3Ry
aW5nOmRpc3BsYXlWYWxdIHx8IFtAInRhYmxlLWNvbHVtbi1ncm91cCIgaXNFcXVhbFRvU3RyaW5n
OmRpc3BsYXlWYWxdKSkgewotICAgICAgICBpZiAoW3NlbGYgX2VsZW1lbnRJc0Jsb2NrTGV2ZWw6
ZWxlbWVudF0gJiYgIVtAIkJSIiBpc0VxdWFsVG9TdHJpbmc6dGFnXSAmJiAhKFtAInRhYmxlLWNl
bGwiIGlzRXF1YWxUb1N0cmluZzpkaXNwbGF5VmFsXSAmJiBbX3RleHRUYWJsZXMgY291bnRdID09
IDApIAorICAgICAgICBpZiAoX2VsZW1lbnRJc0Jsb2NrTGV2ZWwoZWxlbWVudCkgJiYgIVtAIkJS
IiBpc0VxdWFsVG9TdHJpbmc6dGFnXSAmJiAhKFtAInRhYmxlLWNlbGwiIGlzRXF1YWxUb1N0cmlu
ZzpkaXNwbGF5VmFsXSAmJiBbX3RleHRUYWJsZXMgY291bnRdID09IDApCiAgICAgICAgICAgICAm
JiAhKFtfdGV4dExpc3RzIGNvdW50XSA+IDAgJiYgW0AiYmxvY2siIGlzRXF1YWxUb1N0cmluZzpk
aXNwbGF5VmFsXSAmJiAhW0AiTEkiIGlzRXF1YWxUb1N0cmluZzp0YWddICYmICFbQCJVTCIgaXNF
cXVhbFRvU3RyaW5nOnRhZ10gJiYgIVtAIk9MIiBpc0VxdWFsVG9TdHJpbmc6dGFnXSkpCi0gICAg
ICAgICAgICBbc2VsZiBfbmV3UGFyYWdyYXBoRm9yRWxlbWVudDplbGVtZW50IHRhZzp0YWcgYWxs
b3dFbXB0eTpOTyBzdXBwcmVzc1RyYWlsaW5nU3BhY2U6WUVTXTsKKyAgICAgICAgICAgIF9uZXdQ
YXJhZ3JhcGhGb3JFbGVtZW50KGVsZW1lbnQsIHRhZywgTk8sIFlFUyk7CiAgICAgICAgIHJldHVy
biBZRVM7CiAgICAgfQogICAgIHJldHVybiBOTzsKIH0KIAotLSAodm9pZClfYWRkVGFibGVGb3JF
bGVtZW50OihET01FbGVtZW50ICopdGFibGVFbGVtZW50Cit2b2lkIEhUTUxDb252ZXJ0ZXI6Ol9h
ZGRUYWJsZUZvckVsZW1lbnQoRE9NRWxlbWVudCAqdGFibGVFbGVtZW50KQogewogICAgIFJldGFp
blB0cjxOU1RleHRUYWJsZT4gdGFibGUgPSBhZG9wdE5TKFtbUGxhdGZvcm1OU1RleHRUYWJsZSBh
bGxvY10gaW5pdF0pOwogICAgIENHRmxvYXQgY2VsbFNwYWNpbmdWYWwgPSAxOwpAQCAtMTczNCwy
NCArMTgwMSwyOCBAQCAtICh2b2lkKV9hZGRUYWJsZUZvckVsZW1lbnQ6KERPTUVsZW1lbnQgCiAg
ICAgW3RhYmxlIHNldENvbGxhcHNlc0JvcmRlcnM6Tk9dOwogICAgIFt0YWJsZSBzZXRIaWRlc0Vt
cHR5Q2VsbHM6Tk9dOwogICAgIGlmICh0YWJsZUVsZW1lbnQpIHsKLSAgICAgICAgTlNTdHJpbmcg
KmJvcmRlckNvbGxhcHNlID0gW3NlbGYgX3N0cmluZ0Zvck5vZGU6dGFibGVFbGVtZW50IHByb3Bl
cnR5OkNTU1Byb3BlcnR5Qm9yZGVyQ29sbGFwc2VdOwotICAgICAgICBOU1N0cmluZyAqZW1wdHlD
ZWxscyA9IFtzZWxmIF9zdHJpbmdGb3JOb2RlOnRhYmxlRWxlbWVudCBwcm9wZXJ0eTpDU1NQcm9w
ZXJ0eUVtcHR5Q2VsbHNdOwotICAgICAgICBOU1N0cmluZyAqdGFibGVMYXlvdXQgPSBbc2VsZiBf
c3RyaW5nRm9yTm9kZTp0YWJsZUVsZW1lbnQgcHJvcGVydHk6Q1NTUHJvcGVydHlUYWJsZUxheW91
dF07CisgICAgICAgIE5TU3RyaW5nICpib3JkZXJDb2xsYXBzZSA9IF9zdHJpbmdGb3JOb2RlKHRh
YmxlRWxlbWVudCwgQ1NTUHJvcGVydHlCb3JkZXJDb2xsYXBzZSk7CisgICAgICAgIE5TU3RyaW5n
ICplbXB0eUNlbGxzID0gX3N0cmluZ0Zvck5vZGUodGFibGVFbGVtZW50LCBDU1NQcm9wZXJ0eUVt
cHR5Q2VsbHMpOworICAgICAgICBOU1N0cmluZyAqdGFibGVMYXlvdXQgPSBfc3RyaW5nRm9yTm9k
ZSh0YWJsZUVsZW1lbnQsIENTU1Byb3BlcnR5VGFibGVMYXlvdXQpOwogICAgICAgICBpZiAoW3Rh
YmxlRWxlbWVudCByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGNlbGxTcGFjaW5nKV0pIHsK
ICAgICAgICAgICAgIE5TU3RyaW5nICpjZWxsU3BhY2luZyA9IFsoRE9NSFRNTFRhYmxlRWxlbWVu
dCAqKXRhYmxlRWxlbWVudCBjZWxsU3BhY2luZ107Ci0gICAgICAgICAgICBpZiAoY2VsbFNwYWNp
bmcgJiYgW2NlbGxTcGFjaW5nIGxlbmd0aF0gPiAwICYmICFbY2VsbFNwYWNpbmcgaGFzU3VmZml4
OkAiJSJdKSBjZWxsU3BhY2luZ1ZhbCA9IFtjZWxsU3BhY2luZyBmbG9hdFZhbHVlXTsKKyAgICAg
ICAgICAgIGlmIChjZWxsU3BhY2luZyAmJiBbY2VsbFNwYWNpbmcgbGVuZ3RoXSA+IDAgJiYgIVtj
ZWxsU3BhY2luZyBoYXNTdWZmaXg6QCIlIl0pCisgICAgICAgICAgICAgICAgY2VsbFNwYWNpbmdW
YWwgPSBbY2VsbFNwYWNpbmcgZmxvYXRWYWx1ZV07CiAgICAgICAgIH0KICAgICAgICAgaWYgKFt0
YWJsZUVsZW1lbnQgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihjZWxsUGFkZGluZyldKSB7
CiAgICAgICAgICAgICBOU1N0cmluZyAqY2VsbFBhZGRpbmcgPSBbKERPTUhUTUxUYWJsZUVsZW1l
bnQgKil0YWJsZUVsZW1lbnQgY2VsbFBhZGRpbmddOwotICAgICAgICAgICAgaWYgKGNlbGxQYWRk
aW5nICYmIFtjZWxsUGFkZGluZyBsZW5ndGhdID4gMCAmJiAhW2NlbGxQYWRkaW5nIGhhc1N1ZmZp
eDpAIiUiXSkgY2VsbFBhZGRpbmdWYWwgPSBbY2VsbFBhZGRpbmcgZmxvYXRWYWx1ZV07CisgICAg
ICAgICAgICBpZiAoY2VsbFBhZGRpbmcgJiYgW2NlbGxQYWRkaW5nIGxlbmd0aF0gPiAwICYmICFb
Y2VsbFBhZGRpbmcgaGFzU3VmZml4OkAiJSJdKQorICAgICAgICAgICAgICAgIGNlbGxQYWRkaW5n
VmFsID0gW2NlbGxQYWRkaW5nIGZsb2F0VmFsdWVdOwogICAgICAgICB9Ci0gICAgICAgIFtzZWxm
IF9maWxsSW5CbG9jazp0YWJsZS5nZXQoKSBmb3JFbGVtZW50OnRhYmxlRWxlbWVudCBiYWNrZ3Jv
dW5kQ29sb3I6bmlsIGV4dHJhTWFyZ2luOjAgZXh0cmFQYWRkaW5nOjAgaXNUYWJsZTpZRVNdOwor
ICAgICAgICBfZmlsbEluQmxvY2sodGFibGUuZ2V0KCksIHRhYmxlRWxlbWVudCwgbmlsLCAwLCAw
LCBZRVMpOwogICAgICAgICBpZiAoW0AiY29sbGFwc2UiIGlzRXF1YWxUb1N0cmluZzpib3JkZXJD
b2xsYXBzZV0pIHsKICAgICAgICAgICAgIFt0YWJsZSBzZXRDb2xsYXBzZXNCb3JkZXJzOllFU107
CiAgICAgICAgICAgICBjZWxsU3BhY2luZ1ZhbCA9IDA7CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KFtAImhpZGUiIGlzRXF1YWxUb1N0cmluZzplbXB0eUNlbGxzXSkgW3RhYmxlIHNldEhpZGVzRW1w
dHlDZWxsczpZRVNdOwotICAgICAgICBpZiAoW0AiZml4ZWQiIGlzRXF1YWxUb1N0cmluZzp0YWJs
ZUxheW91dF0pIFt0YWJsZSBzZXRMYXlvdXRBbGdvcml0aG06TlNUZXh0VGFibGVGaXhlZExheW91
dEFsZ29yaXRobV07CisgICAgICAgIGlmIChbQCJoaWRlIiBpc0VxdWFsVG9TdHJpbmc6ZW1wdHlD
ZWxsc10pCisgICAgICAgICAgICBbdGFibGUgc2V0SGlkZXNFbXB0eUNlbGxzOllFU107CisgICAg
ICAgIGlmIChbQCJmaXhlZCIgaXNFcXVhbFRvU3RyaW5nOnRhYmxlTGF5b3V0XSkKKyAgICAgICAg
ICAgIFt0YWJsZSBzZXRMYXlvdXRBbGdvcml0aG06TlNUZXh0VGFibGVGaXhlZExheW91dEFsZ29y
aXRobV07CiAgICAgfQogICAgIFtfdGV4dFRhYmxlcyBhZGRPYmplY3Q6dGFibGUuZ2V0KCldOwog
ICAgIFtfdGV4dFRhYmxlU3BhY2luZ3MgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoRG91
YmxlOmNlbGxTcGFjaW5nVmFsXV07CkBAIC0xNzYwLDcgKzE4MzEsNyBAQCAtICh2b2lkKV9hZGRU
YWJsZUZvckVsZW1lbnQ6KERPTUVsZW1lbnQgCiAgICAgW190ZXh0VGFibGVSb3dBcnJheXMgYWRk
T2JqZWN0OltOU011dGFibGVBcnJheSBhcnJheV1dOwogfQogCi0tICh2b2lkKV9hZGRUYWJsZUNl
bGxGb3JFbGVtZW50OihET01FbGVtZW50ICopdGFibGVDZWxsRWxlbWVudAordm9pZCBIVE1MQ29u
dmVydGVyOjpfYWRkVGFibGVDZWxsRm9yRWxlbWVudChET01FbGVtZW50ICp0YWJsZUNlbGxFbGVt
ZW50KQogewogICAgIE5TVGV4dFRhYmxlICp0YWJsZSA9IFtfdGV4dFRhYmxlcyBsYXN0T2JqZWN0
XTsKICAgICBOU0ludGVnZXIgcm93TnVtYmVyID0gW1tfdGV4dFRhYmxlUm93cyBsYXN0T2JqZWN0
XSBpbnRlZ2VyVmFsdWVdOwpAQCAtMTc5Miw4ICsxODYzLDggQEAgLSAodm9pZClfYWRkVGFibGVD
ZWxsRm9yRWxlbWVudDooRE9NRWxlbQogICAgIH0KICAgICBSZXRhaW5QdHI8TlNUZXh0VGFibGVC
bG9jaz4gYmxvY2sgPSBhZG9wdE5TKFtbUGxhdGZvcm1OU1RleHRUYWJsZUJsb2NrIGFsbG9jXSBp
bml0V2l0aFRhYmxlOnRhYmxlIHN0YXJ0aW5nUm93OnJvd051bWJlciByb3dTcGFuOnJvd1NwYW4g
c3RhcnRpbmdDb2x1bW46Y29sdW1uTnVtYmVyIGNvbHVtblNwYW46Y29sU3Bhbl0pOwogICAgIGlm
ICh0YWJsZUNlbGxFbGVtZW50KSB7Ci0gICAgICAgIE5TU3RyaW5nICp2ZXJ0aWNhbEFsaWduID0g
W3NlbGYgX3N0cmluZ0Zvck5vZGU6dGFibGVDZWxsRWxlbWVudCBwcm9wZXJ0eTpDU1NQcm9wZXJ0
eVZlcnRpY2FsQWxpZ25dOwotICAgICAgICBbc2VsZiBfZmlsbEluQmxvY2s6YmxvY2suZ2V0KCkg
Zm9yRWxlbWVudDp0YWJsZUNlbGxFbGVtZW50IGJhY2tncm91bmRDb2xvcjpjb2xvciBleHRyYU1h
cmdpbjpjZWxsU3BhY2luZ1ZhbCAvIDIgZXh0cmFQYWRkaW5nOjAgaXNUYWJsZTpOT107CisgICAg
ICAgIE5TU3RyaW5nICp2ZXJ0aWNhbEFsaWduID0gX3N0cmluZ0Zvck5vZGUodGFibGVDZWxsRWxl
bWVudCwgQ1NTUHJvcGVydHlWZXJ0aWNhbEFsaWduKTsKKyAgICAgICAgX2ZpbGxJbkJsb2NrKGJs
b2NrLmdldCgpLCB0YWJsZUNlbGxFbGVtZW50LCBjb2xvciwgY2VsbFNwYWNpbmdWYWwgLyAyLCAw
LCBOTyk7CiAgICAgICAgIGlmIChbQCJtaWRkbGUiIGlzRXF1YWxUb1N0cmluZzp2ZXJ0aWNhbEFs
aWduXSkKICAgICAgICAgICAgIFtibG9jayBzZXRWZXJ0aWNhbEFsaWdubWVudDpOU1RleHRCbG9j
a01pZGRsZUFsaWdubWVudF07CiAgICAgICAgIGVsc2UgaWYgKFtAImJvdHRvbSIgaXNFcXVhbFRv
U3RyaW5nOnZlcnRpY2FsQWxpZ25dKQpAQCAtMTgwOCwyMyArMTg3OSwyMyBAQCAtICh2b2lkKV9h
ZGRUYWJsZUNlbGxGb3JFbGVtZW50OihET01FbGVtCiAgICAgW3Jvd0FycmF5IHNvcnRVc2luZ0Z1
bmN0aW9uOl9jb2xDb21wYXJlIGNvbnRleHQ6TlVMTF07CiB9CiAKLS0gKEJPT0wpX3Byb2Nlc3NF
bGVtZW50OihET01FbGVtZW50ICopZWxlbWVudCB0YWc6KE5TU3RyaW5nICopdGFnIGRpc3BsYXk6
KE5TU3RyaW5nICopZGlzcGxheVZhbCBkZXB0aDooTlNJbnRlZ2VyKWRlcHRoCitCT09MIEhUTUxD
b252ZXJ0ZXI6Ol9wcm9jZXNzRWxlbWVudChET01FbGVtZW50ICplbGVtZW50LCBOU1N0cmluZyAq
dGFnLCBOU1N0cmluZyAqZGlzcGxheVZhbCwgTlNJbnRlZ2VyIGRlcHRoKQogewogICAgIEJPT0wg
cmV0dmFsID0gWUVTOwotICAgIEJPT0wgaXNCbG9ja0xldmVsID0gW3NlbGYgX2VsZW1lbnRJc0Js
b2NrTGV2ZWw6ZWxlbWVudF07CisgICAgQk9PTCBpc0Jsb2NrTGV2ZWwgPSBfZWxlbWVudElzQmxv
Y2tMZXZlbChlbGVtZW50KTsKICAgICBpZiAoaXNCbG9ja0xldmVsKQogICAgICAgICBbX3dyaXRp
bmdEaXJlY3Rpb25BcnJheSByZW1vdmVBbGxPYmplY3RzXTsKICAgICBlbHNlIHsKLSAgICAgICAg
TlNTdHJpbmcgKmJpZGkgPSBbc2VsZiBfc3RyaW5nRm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkNT
U1Byb3BlcnR5VW5pY29kZUJpZGldOworICAgICAgICBOU1N0cmluZyAqYmlkaSA9IF9zdHJpbmdG
b3JOb2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5VW5pY29kZUJpZGkpOwogICAgICAgICBpZiAoYmlk
aSAmJiBbYmlkaSBpc0VxdWFsVG9TdHJpbmc6QCJlbWJlZCJdKSB7CiAgICAgICAgICAgICBOU1VJ
bnRlZ2VyIHZhbCA9IE5TVGV4dFdyaXRpbmdEaXJlY3Rpb25FbWJlZGRpbmc7Ci0gICAgICAgICAg
ICBOU1N0cmluZyAqZGlyZWN0aW9uID0gW3NlbGYgX3N0cmluZ0Zvck5vZGU6ZWxlbWVudCBwcm9w
ZXJ0eTpDU1NQcm9wZXJ0eURpcmVjdGlvbl07CisgICAgICAgICAgICBOU1N0cmluZyAqZGlyZWN0
aW9uID0gX3N0cmluZ0Zvck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlEaXJlY3Rpb24pOwogICAg
ICAgICAgICAgaWYgKFtkaXJlY3Rpb24gaXNFcXVhbFRvU3RyaW5nOkAicnRsIl0pCiAgICAgICAg
ICAgICAgICAgdmFsIHw9IE5TV3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0OwogICAgICAgICAg
ICAgW193cml0aW5nRGlyZWN0aW9uQXJyYXkgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRo
VW5zaWduZWRJbnRlZ2VyOnZhbF1dOwogICAgICAgICB9IGVsc2UgaWYgKGJpZGkgJiYgW2JpZGkg
aXNFcXVhbFRvU3RyaW5nOkAiYmlkaS1vdmVycmlkZSJdKSB7CiAgICAgICAgICAgICBOU1VJbnRl
Z2VyIHZhbCA9IE5TVGV4dFdyaXRpbmdEaXJlY3Rpb25PdmVycmlkZTsKLSAgICAgICAgICAgIE5T
U3RyaW5nICpkaXJlY3Rpb24gPSBbc2VsZiBfc3RyaW5nRm9yTm9kZTplbGVtZW50IHByb3BlcnR5
OkNTU1Byb3BlcnR5RGlyZWN0aW9uXTsKKyAgICAgICAgICAgIE5TU3RyaW5nICpkaXJlY3Rpb24g
PSBfc3RyaW5nRm9yTm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0eURpcmVjdGlvbik7CiAgICAgICAg
ICAgICBpZiAoW2RpcmVjdGlvbiBpc0VxdWFsVG9TdHJpbmc6QCJydGwiXSkKICAgICAgICAgICAg
ICAgICB2YWwgfD0gTlNXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ7CiAgICAgICAgICAgICBb
X3dyaXRpbmdEaXJlY3Rpb25BcnJheSBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhVbnNp
Z25lZEludGVnZXI6dmFsXV07CkBAIC0xODM0LDI1ICsxOTA1LDI0IEBAIC0gKEJPT0wpX3Byb2Nl
c3NFbGVtZW50OihET01FbGVtZW50ICopZWwKICAgICAgICAgRE9NRWxlbWVudCAqdGFibGVFbGVt
ZW50ID0gZWxlbWVudDsKICAgICAgICAgaWYgKFtAInRhYmxlLXJvdy1ncm91cCIgaXNFcXVhbFRv
U3RyaW5nOmRpc3BsYXlWYWxdKSB7CiAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgc3RhcnRpbmcg
aW4gbWVkaWFzIHJlcywgdGhlIGZpcnN0IHRoaW5nIHdlIHNlZSBtYXkgYmUgdGhlIHRib2R5LCBz
byBnbyB1cCB0byB0aGUgdGFibGUKLSAgICAgICAgICAgIHRhYmxlRWxlbWVudCA9IFtzZWxmIF9i
bG9ja0xldmVsRWxlbWVudEZvck5vZGU6W2VsZW1lbnQgcGFyZW50Tm9kZV1dOwotICAgICAgICAg
ICAgaWYgKCFbQCJ0YWJsZSIgaXNFcXVhbFRvU3RyaW5nOltzZWxmIF9zdHJpbmdGb3JOb2RlOnRh
YmxlRWxlbWVudCBwcm9wZXJ0eTpDU1NQcm9wZXJ0eURpc3BsYXldXSkKKyAgICAgICAgICAgIHRh
YmxlRWxlbWVudCA9IF9ibG9ja0xldmVsRWxlbWVudEZvck5vZGUoW2VsZW1lbnQgcGFyZW50Tm9k
ZV0pOworICAgICAgICAgICAgaWYgKCFbQCJ0YWJsZSIgaXNFcXVhbFRvU3RyaW5nOl9zdHJpbmdG
b3JOb2RlKHRhYmxlRWxlbWVudCwgQ1NTUHJvcGVydHlEaXNwbGF5KV0pCiAgICAgICAgICAgICAg
ICAgdGFibGVFbGVtZW50ID0gZWxlbWVudDsKICAgICAgICAgfQogICAgICAgICB3aGlsZSAoW190
ZXh0VGFibGVzIGNvdW50XSA+IFtfdGV4dEJsb2NrcyBjb3VudF0pCi0gICAgICAgICAgICBbc2Vs
ZiBfYWRkVGFibGVDZWxsRm9yRWxlbWVudDpuaWxdOwotICAgICAgICBbc2VsZiBfYWRkVGFibGVG
b3JFbGVtZW50OnRhYmxlRWxlbWVudF07CisgICAgICAgICAgICBfYWRkVGFibGVDZWxsRm9yRWxl
bWVudChuaWwpOworICAgICAgICBfYWRkVGFibGVGb3JFbGVtZW50KHRhYmxlRWxlbWVudCk7CiAg
ICAgfSBlbHNlIGlmIChbQCJ0YWJsZS1mb290ZXItZ3JvdXAiIGlzRXF1YWxUb1N0cmluZzpkaXNw
bGF5VmFsXSAmJiBbX3RleHRUYWJsZXMgY291bnRdID4gMCkgewogICAgICAgICBbX3RleHRUYWJs
ZUZvb3RlcnMgc2V0T2JqZWN0OmVsZW1lbnQgZm9yS2V5OltOU1ZhbHVlIHZhbHVlV2l0aE5vbnJl
dGFpbmVkT2JqZWN0OltfdGV4dFRhYmxlcyBsYXN0T2JqZWN0XV1dOwogICAgICAgICByZXR2YWwg
PSBOTzsKICAgICB9IGVsc2UgaWYgKFtAInRhYmxlLXJvdyIgaXNFcXVhbFRvU3RyaW5nOmRpc3Bs
YXlWYWxdICYmIFtfdGV4dFRhYmxlcyBjb3VudF0gPiAwKSB7Ci0gICAgICAgIFBsYXRmb3JtQ29s
b3IgKmNvbG9yID0gW3NlbGYgX2NvbG9yRm9yTm9kZTplbGVtZW50IHByb3BlcnR5OkNTU1Byb3Bl
cnR5QmFja2dyb3VuZENvbG9yXTsKKyAgICAgICAgUGxhdGZvcm1Db2xvciAqY29sb3IgPSBfY29s
b3JGb3JOb2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsKICAgICAgICAg
aWYgKCFjb2xvcikgY29sb3IgPSBbUGxhdGZvcm1Db2xvckNsYXNzIGNsZWFyQ29sb3JdOwogICAg
ICAgICBbX3RleHRUYWJsZVJvd0JhY2tncm91bmRDb2xvcnMgYWRkT2JqZWN0OmNvbG9yXTsKICAg
ICB9IGVsc2UgaWYgKFtAInRhYmxlLWNlbGwiIGlzRXF1YWxUb1N0cmluZzpkaXNwbGF5VmFsXSkg
ewotICAgICAgICB3aGlsZSAoW190ZXh0VGFibGVzIGNvdW50XSA8IFtfdGV4dEJsb2NrcyBjb3Vu
dF0gKyAxKSB7Ci0gICAgICAgICAgICBbc2VsZiBfYWRkVGFibGVGb3JFbGVtZW50Om5pbF07Ci0g
ICAgICAgIH0KLSAgICAgICAgW3NlbGYgX2FkZFRhYmxlQ2VsbEZvckVsZW1lbnQ6ZWxlbWVudF07
CisgICAgICAgIHdoaWxlIChbX3RleHRUYWJsZXMgY291bnRdIDwgW190ZXh0QmxvY2tzIGNvdW50
XSArIDEpCisgICAgICAgICAgICBfYWRkVGFibGVGb3JFbGVtZW50KG5pbCk7CisgICAgICAgIF9h
ZGRUYWJsZUNlbGxGb3JFbGVtZW50KGVsZW1lbnQpOwogICAgIH0gZWxzZSBpZiAoW0AiSU1HIiBp
c0VxdWFsVG9TdHJpbmc6dGFnXSkgewogICAgICAgICBOU1N0cmluZyAqdXJsU3RyaW5nID0gW2Vs
ZW1lbnQgZ2V0QXR0cmlidXRlOkAic3JjIl07CiAgICAgICAgIGlmICh1cmxTdHJpbmcgJiYgW3Vy
bFN0cmluZyBsZW5ndGhdID4gMCkgewpAQCAtMTg2NCw3ICsxOTM0LDcgQEAgLSAoQk9PTClfcHJv
Y2Vzc0VsZW1lbnQ6KERPTUVsZW1lbnQgKillbAogICAgICAgICAgICAgQk9PTCB1c2VQbGFjZWhv
bGRlckltYWdlID0gWUVTOwogI2VuZGlmCiAgICAgICAgICAgICBpZiAodXJsKQotICAgICAgICAg
ICAgICAgIFtzZWxmIF9hZGRBdHRhY2htZW50Rm9yRWxlbWVudDplbGVtZW50IFVSTDp1cmwgbmVl
ZHNQYXJhZ3JhcGg6aXNCbG9ja0xldmVsIHVzZVBsYWNlaG9sZGVyOnVzZVBsYWNlaG9sZGVySW1h
Z2VdOworICAgICAgICAgICAgICAgIF9hZGRBdHRhY2htZW50Rm9yRWxlbWVudChlbGVtZW50LCB1
cmwsIGlzQmxvY2tMZXZlbCwgdXNlUGxhY2Vob2xkZXJJbWFnZSk7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dmFsID0gTk87CiAgICAgfSBlbHNlIGlmIChbQCJPQkpFQ1QiIGlzRXF1YWxUb1N0cmlu
Zzp0YWddKSB7CkBAIC0xODgyLDUwICsxOTUyLDUxIEBAIC0gKEJPT0wpX3Byb2Nlc3NFbGVtZW50
OihET01FbGVtZW50ICopZWwKICAgICAgICAgICAgIGlmIChiYXNlVVJMKQogICAgICAgICAgICAg
ICAgIHVybCA9IFtOU1VSTCBfd2ViX1VSTFdpdGhTdHJpbmc6W3VybFN0cmluZyBzdHJpbmdCeVRy
aW1taW5nQ2hhcmFjdGVyc0luU2V0OltOU0NoYXJhY3RlclNldCB3aGl0ZXNwYWNlQW5kTmV3bGlu
ZUNoYXJhY3RlclNldF1dIHJlbGF0aXZlVG9VUkw6YmFzZVVSTF07CiAgICAgICAgICAgICBpZiAo
IXVybCkKLSAgICAgICAgICAgICAgICB1cmwgPWNvcmUoW2VsZW1lbnQgb3duZXJEb2N1bWVudF0p
LT5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXModXJsU3RyaW5n
KSk7CisgICAgICAgICAgICAgICAgdXJsID0gY29yZShbZWxlbWVudCBvd25lckRvY3VtZW50XSkt
PmNvbXBsZXRlVVJMKHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyh1cmxTdHJpbmcp
KTsKICAgICAgICAgICAgIGlmICghdXJsKQogICAgICAgICAgICAgICAgIHVybCA9IFtOU1VSTCBf
d2ViX1VSTFdpdGhTdHJpbmc6W3VybFN0cmluZyBzdHJpbmdCeVRyaW1taW5nQ2hhcmFjdGVyc0lu
U2V0OltOU0NoYXJhY3RlclNldCB3aGl0ZXNwYWNlQW5kTmV3bGluZUNoYXJhY3RlclNldF1dIHJl
bGF0aXZlVG9VUkw6X2Jhc2VVUkxdOwogICAgICAgICAgICAgaWYgKHVybCkKLSAgICAgICAgICAg
ICAgICByZXR2YWwgPSAhW3NlbGYgX2FkZEF0dGFjaG1lbnRGb3JFbGVtZW50OmVsZW1lbnQgVVJM
OnVybCBuZWVkc1BhcmFncmFwaDppc0Jsb2NrTGV2ZWwgdXNlUGxhY2Vob2xkZXI6Tk9dOworICAg
ICAgICAgICAgICAgIHJldHZhbCA9ICFfYWRkQXR0YWNobWVudEZvckVsZW1lbnQoZWxlbWVudCwg
dXJsLCBpc0Jsb2NrTGV2ZWwsIE5PKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoW0AiRlJB
TUUiIGlzRXF1YWxUb1N0cmluZzp0YWddKSB7CiAgICAgICAgIGlmIChbZWxlbWVudCByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKGNvbnRlbnREb2N1bWVudCldKSB7CiAgICAgICAgICAgICBE
T01Eb2N1bWVudCAqY29udGVudERvY3VtZW50ID0gWyhET01IVE1MRnJhbWVFbGVtZW50ICopZWxl
bWVudCBjb250ZW50RG9jdW1lbnRdOwogICAgICAgICAgICAgaWYgKGNvbnRlbnREb2N1bWVudCkK
LSAgICAgICAgICAgICAgICBbc2VsZiBfdHJhdmVyc2VOb2RlOmNvbnRlbnREb2N1bWVudCBkZXB0
aDpkZXB0aCArIDEgZW1iZWRkZWQ6WUVTXTsKKyAgICAgICAgICAgICAgICBfdHJhdmVyc2VOb2Rl
KGNvbnRlbnREb2N1bWVudCwgZGVwdGggKyAxLCBZRVMpOwogICAgICAgICB9CiAgICAgICAgIHJl
dHZhbCA9IE5POwogICAgIH0gZWxzZSBpZiAoW0AiSUZSQU1FIiBpc0VxdWFsVG9TdHJpbmc6dGFn
XSkgewogICAgICAgICBpZiAoW2VsZW1lbnQgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihj
b250ZW50RG9jdW1lbnQpXSkgewogICAgICAgICAgICAgRE9NRG9jdW1lbnQgKmNvbnRlbnREb2N1
bWVudCA9IFsoRE9NSFRNTElGcmFtZUVsZW1lbnQgKillbGVtZW50IGNvbnRlbnREb2N1bWVudF07
CiAgICAgICAgICAgICBpZiAoY29udGVudERvY3VtZW50KSB7Ci0gICAgICAgICAgICAgICAgW3Nl
bGYgX3RyYXZlcnNlTm9kZTpjb250ZW50RG9jdW1lbnQgZGVwdGg6ZGVwdGggKyAxIGVtYmVkZGVk
OllFU107CisgICAgICAgICAgICAgICAgX3RyYXZlcnNlTm9kZShjb250ZW50RG9jdW1lbnQsIGRl
cHRoICsgMSwgWUVTKTsKICAgICAgICAgICAgICAgICByZXR2YWwgPSBOTzsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoW0AiQlIiIGlzRXF1YWxUb1N0cmluZzp0YWdd
KSB7Ci0gICAgICAgIERPTUVsZW1lbnQgKmJsb2NrRWxlbWVudCA9IFtzZWxmIF9ibG9ja0xldmVs
RWxlbWVudEZvck5vZGU6W2VsZW1lbnQgcGFyZW50Tm9kZV1dOworICAgICAgICBET01FbGVtZW50
ICpibG9ja0VsZW1lbnQgPSBfYmxvY2tMZXZlbEVsZW1lbnRGb3JOb2RlKFtlbGVtZW50IHBhcmVu
dE5vZGVdKTsKICAgICAgICAgTlNTdHJpbmcgKmJyZWFrQ2xhc3MgPSBbZWxlbWVudCBnZXRBdHRy
aWJ1dGU6QCJjbGFzcyJdLCAqYmxvY2tUYWcgPSBbYmxvY2tFbGVtZW50IHRhZ05hbWVdOwogICAg
ICAgICBCT09MIGlzRXh0cmFCcmVhayA9IFtAIkFwcGxlLWludGVyY2hhbmdlLW5ld2xpbmUiIGlz
RXF1YWxUb1N0cmluZzpicmVha0NsYXNzXSwgYmxvY2tFbGVtZW50SXNQYXJhZ3JhcGggPSAoW0Ai
UCIgaXNFcXVhbFRvU3RyaW5nOmJsb2NrVGFnXSB8fCBbQCJMSSIgaXNFcXVhbFRvU3RyaW5nOmJs
b2NrVGFnXSB8fCAoW2Jsb2NrVGFnIGhhc1ByZWZpeDpAIkgiXSAmJiAyID09IFtibG9ja1RhZyBs
ZW5ndGhdKSk7CiAgICAgICAgIGlmIChpc0V4dHJhQnJlYWspCiAgICAgICAgICAgICBfZmxhZ3Mu
aGFzVHJhaWxpbmdOZXdsaW5lID0gWUVTOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGlm
IChibG9ja0VsZW1lbnQgJiYgYmxvY2tFbGVtZW50SXNQYXJhZ3JhcGgpCi0gICAgICAgICAgICAg
ICAgW3NlbGYgX25ld0xpbmVGb3JFbGVtZW50OmVsZW1lbnRdOworICAgICAgICAgICAgICAgIF9u
ZXdMaW5lRm9yRWxlbWVudChlbGVtZW50KTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBbc2VsZiBfbmV3UGFyYWdyYXBoRm9yRWxlbWVudDplbGVtZW50IHRhZzp0YWcgYWxsb3dF
bXB0eTpZRVMgc3VwcHJlc3NUcmFpbGluZ1NwYWNlOk5PXTsKKyAgICAgICAgICAgICAgICBfbmV3
UGFyYWdyYXBoRm9yRWxlbWVudChlbGVtZW50LCB0YWcsIFlFUywgTk8pOwogICAgICAgICB9CiAg
ICAgfSBlbHNlIGlmIChbQCJVTCIgaXNFcXVhbFRvU3RyaW5nOnRhZ10pIHsKICAgICAgICAgUmV0
YWluUHRyPE5TVGV4dExpc3Q+IGxpc3Q7Ci0gICAgICAgIE5TU3RyaW5nICpsaXN0U3R5bGVUeXBl
ID0gW3NlbGYgX3N0cmluZ0Zvck5vZGU6ZWxlbWVudCBwcm9wZXJ0eTpDU1NQcm9wZXJ0eUxpc3RT
dHlsZVR5cGVdOworICAgICAgICBOU1N0cmluZyAqbGlzdFN0eWxlVHlwZSA9IF9zdHJpbmdGb3JO
b2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5TGlzdFN0eWxlVHlwZSk7CiAgICAgICAgIGlmICghbGlz
dFN0eWxlVHlwZSB8fCBbbGlzdFN0eWxlVHlwZSBsZW5ndGhdID09IDApCiAgICAgICAgICAgICBs
aXN0U3R5bGVUeXBlID0gQCJkaXNjIjsKICAgICAgICAgbGlzdCA9IGFkb3B0TlMoW1tQbGF0Zm9y
bU5TVGV4dExpc3QgYWxsb2NdIGluaXRXaXRoTWFya2VyRm9ybWF0OltOU1N0cmluZyBzdHJpbmdX
aXRoRm9ybWF0OkAieyVAfSIsIGxpc3RTdHlsZVR5cGVdIG9wdGlvbnM6MF0pOwogICAgICAgICBb
X3RleHRMaXN0cyBhZGRPYmplY3Q6bGlzdC5nZXQoKV07CiAgICAgfSBlbHNlIGlmIChbQCJPTCIg
aXNFcXVhbFRvU3RyaW5nOnRhZ10pIHsKICAgICAgICAgUmV0YWluUHRyPE5TVGV4dExpc3Q+IGxp
c3Q7Ci0gICAgICAgIE5TU3RyaW5nICpsaXN0U3R5bGVUeXBlID0gW3NlbGYgX3N0cmluZ0Zvck5v
ZGU6ZWxlbWVudCBwcm9wZXJ0eTpDU1NQcm9wZXJ0eUxpc3RTdHlsZVR5cGVdOwotICAgICAgICBp
ZiAoIWxpc3RTdHlsZVR5cGUgfHwgW2xpc3RTdHlsZVR5cGUgbGVuZ3RoXSA9PSAwKSBsaXN0U3R5
bGVUeXBlID0gQCJkZWNpbWFsIjsKKyAgICAgICAgTlNTdHJpbmcgKmxpc3RTdHlsZVR5cGUgPSBf
c3RyaW5nRm9yTm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0eUxpc3RTdHlsZVR5cGUpOworICAgICAg
ICBpZiAoIWxpc3RTdHlsZVR5cGUgfHwgW2xpc3RTdHlsZVR5cGUgbGVuZ3RoXSA9PSAwKQorICAg
ICAgICAgICAgbGlzdFN0eWxlVHlwZSA9IEAiZGVjaW1hbCI7CiAgICAgICAgIGxpc3QgPSBhZG9w
dE5TKFtbUGxhdGZvcm1OU1RleHRMaXN0IGFsbG9jXSBpbml0V2l0aE1hcmtlckZvcm1hdDpbTlNT
dHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAInslQH0uIiwgbGlzdFN0eWxlVHlwZV0gb3B0aW9uczow
XSk7CiAgICAgICAgIGlmIChbZWxlbWVudCByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHN0
YXJ0KV0pIHsKICAgICAgICAgICAgIE5TSW50ZWdlciBzdGFydGluZ0l0ZW1OdW1iZXIgPSBbKERP
TUhUTUxPTGlzdEVsZW1lbnQgKillbGVtZW50IHN0YXJ0XTsKQEAgLTE5MzMsMjMgKzIwMDQsMjUg
QEAgLSAoQk9PTClfcHJvY2Vzc0VsZW1lbnQ6KERPTUVsZW1lbnQgKillbAogICAgICAgICB9CiAg
ICAgICAgIFtfdGV4dExpc3RzIGFkZE9iamVjdDpsaXN0LmdldCgpXTsKICAgICB9IGVsc2UgaWYg
KFtAIlEiIGlzRXF1YWxUb1N0cmluZzp0YWddKSB7Ci0gICAgICAgIFtzZWxmIF9hZGRRdW90ZUZv
ckVsZW1lbnQ6ZWxlbWVudCBvcGVuaW5nOllFUyBsZXZlbDpfcXVvdGVMZXZlbCsrXTsKKyAgICAg
ICAgX2FkZFF1b3RlRm9yRWxlbWVudChlbGVtZW50LCBZRVMsIF9xdW90ZUxldmVsKyspOwogICAg
IH0gZWxzZSBpZiAoW0AiSU5QVVQiIGlzRXF1YWxUb1N0cmluZzp0YWddKSB7CiAgICAgICAgIGlm
IChbZWxlbWVudCByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHR5cGUpXSAmJiBbZWxlbWVu
dCByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHZhbHVlKV0gJiYgW0AidGV4dCIgY29tcGFy
ZTpbKERPTUhUTUxJbnB1dEVsZW1lbnQgKillbGVtZW50IHR5cGVdIG9wdGlvbnM6TlNDYXNlSW5z
ZW5zaXRpdmVTZWFyY2hdID09IE5TT3JkZXJlZFNhbWUpIHsKICAgICAgICAgICAgIE5TU3RyaW5n
ICp2YWx1ZSA9IFsoRE9NSFRNTElucHV0RWxlbWVudCAqKWVsZW1lbnQgdmFsdWVdOwotICAgICAg
ICAgICAgaWYgKHZhbHVlICYmIFt2YWx1ZSBsZW5ndGhdID4gMCkgW3NlbGYgX2FkZFZhbHVlOnZh
bHVlIGZvckVsZW1lbnQ6ZWxlbWVudF07CisgICAgICAgICAgICBpZiAodmFsdWUgJiYgW3ZhbHVl
IGxlbmd0aF0gPiAwKQorICAgICAgICAgICAgICAgIF9hZGRWYWx1ZSh2YWx1ZSwgZWxlbWVudCk7
CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKFtAIlRFWFRBUkVBIiBpc0VxdWFsVG9TdHJpbmc6
dGFnXSkgewogICAgICAgICBpZiAoW2VsZW1lbnQgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cih2YWx1ZSldKSB7CiAgICAgICAgICAgICBOU1N0cmluZyAqdmFsdWUgPSBbKERPTUhUTUxUZXh0
QXJlYUVsZW1lbnQgKillbGVtZW50IHZhbHVlXTsKLSAgICAgICAgICAgIGlmICh2YWx1ZSAmJiBb
dmFsdWUgbGVuZ3RoXSA+IDApIFtzZWxmIF9hZGRWYWx1ZTp2YWx1ZSBmb3JFbGVtZW50OmVsZW1l
bnRdOworICAgICAgICAgICAgaWYgKHZhbHVlICYmIFt2YWx1ZSBsZW5ndGhdID4gMCkKKyAgICAg
ICAgICAgICAgICBfYWRkVmFsdWUodmFsdWUsIGVsZW1lbnQpOwogICAgICAgICB9CiAgICAgICAg
IHJldHZhbCA9IE5POwogICAgIH0KICAgICByZXR1cm4gcmV0dmFsOwogfQogCi0tICh2b2lkKV9h
ZGRNYXJrZXJzVG9MaXN0OihOU1RleHRMaXN0ICopbGlzdCByYW5nZTooTlNSYW5nZSlyYW5nZQor
dm9pZCBIVE1MQ29udmVydGVyOjpfYWRkTWFya2Vyc1RvTGlzdChOU1RleHRMaXN0ICpsaXN0LCBO
U1JhbmdlIHJhbmdlKQogewogICAgIE5TSW50ZWdlciBpdGVtTnVtID0gW2xpc3Qgc3RhcnRpbmdJ
dGVtTnVtYmVyXTsKICAgICBOU1N0cmluZyAqc3RyaW5nID0gW19hdHRyU3RyIHN0cmluZ107CkBA
IC0xOTg5LDExICsyMDYyLDEwIEBAIC0gKHZvaWQpX2FkZE1hcmtlcnNUb0xpc3Q6KE5TVGV4dExp
c3QgKikKICAgICAgICAgICAgICAgICBpZiAoW1twYXJhZ3JhcGhTdHlsZSB0ZXh0TGlzdHNdIGNv
dW50XSA9PSBsaXN0SW5kZXggKyAxKSB7CiAgICAgICAgICAgICAgICAgICAgIHN0cmluZ1RvSW5z
ZXJ0ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJcdCVAXHQiLCBbbGlzdCBtYXJrZXJG
b3JJdGVtTnVtYmVyOml0ZW1OdW0rK11dOwogICAgICAgICAgICAgICAgICAgICBpbnNlcnRMZW5n
dGggPSBbc3RyaW5nVG9JbnNlcnQgbGVuZ3RoXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFf
ZmxhZ3MuaXNJbmRleGluZyAmJiAhX2ZsYWdzLmlzVGVzdGluZykKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGF0dHJzVG9JbnNlcnQgPSBbUGxhdGZvcm1OU1RleHRMaXN0IF9zdGFuZGFyZE1hcmtl
ckF0dHJpYnV0ZXNGb3JBdHRyaWJ1dGVzOltfYXR0clN0ciBhdHRyaWJ1dGVzQXRJbmRleDpwYXJh
Z3JhcGhSYW5nZS5sb2NhdGlvbiBlZmZlY3RpdmVSYW5nZTpOVUxMXV07CisgICAgICAgICAgICAg
ICAgICAgIGF0dHJzVG9JbnNlcnQgPSBbUGxhdGZvcm1OU1RleHRMaXN0IF9zdGFuZGFyZE1hcmtl
ckF0dHJpYnV0ZXNGb3JBdHRyaWJ1dGVzOltfYXR0clN0ciBhdHRyaWJ1dGVzQXRJbmRleDpwYXJh
Z3JhcGhSYW5nZS5sb2NhdGlvbiBlZmZlY3RpdmVSYW5nZTpOVUxMXV07CiAKICAgICAgICAgICAg
ICAgICAgICAgW19hdHRyU3RyIHJlcGxhY2VDaGFyYWN0ZXJzSW5SYW5nZTpOU01ha2VSYW5nZShw
YXJhZ3JhcGhSYW5nZS5sb2NhdGlvbiwgMCkgd2l0aFN0cmluZzpzdHJpbmdUb0luc2VydF07Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghX2ZsYWdzLmlzSW5kZXhpbmcgJiYgIV9mbGFncy5pc1Rl
c3RpbmcpIFtfYXR0clN0ciBzZXRBdHRyaWJ1dGVzOmF0dHJzVG9JbnNlcnQgcmFuZ2U6TlNNYWtl
UmFuZ2UocGFyYWdyYXBoUmFuZ2UubG9jYXRpb24sIGluc2VydExlbmd0aCldOworICAgICAgICAg
ICAgICAgICAgICBbX2F0dHJTdHIgc2V0QXR0cmlidXRlczphdHRyc1RvSW5zZXJ0IHJhbmdlOk5T
TWFrZVJhbmdlKHBhcmFncmFwaFJhbmdlLmxvY2F0aW9uLCBpbnNlcnRMZW5ndGgpXTsKICAgICAg
ICAgICAgICAgICAgICAgcmFuZ2UubGVuZ3RoICs9IGluc2VydExlbmd0aDsKICAgICAgICAgICAg
ICAgICAgICAgcGFyYWdyYXBoUmFuZ2UubGVuZ3RoICs9IGluc2VydExlbmd0aDsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKHBhcmFncmFwaFJhbmdlLmxvY2F0aW9uIDwgX2RvbVJhbmdlU3RhcnRJ
bmRleCkgX2RvbVJhbmdlU3RhcnRJbmRleCArPSBpbnNlcnRMZW5ndGg7CkBAIC0yMDA2LDkgKzIw
NzgsMTMgQEAgLSAodm9pZClfYWRkTWFya2Vyc1RvTGlzdDooTlNUZXh0TGlzdCAqKQogICAgICAg
ICAgICAgICAgICAgICB3aGlsZSAoKGNvdW50ID0gW1tuZXdTdHlsZSB0YWJTdG9wc10gY291bnRd
KSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIHRhYlRvUmVtb3Zl
ID0gbmlsOyAhdGFiVG9SZW1vdmUgJiYgaSA8IGNvdW50OyBpKyspIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0YWIgPSBbW25ld1N0eWxlIHRhYlN0b3BzXSBvYmplY3RBdEluZGV4Omld
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChbdGFiIGxvY2F0aW9uXSA8PSBsaXN0
TG9jYXRpb24pIHRhYlRvUmVtb3ZlID0gdGFiOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChbdGFiIGxvY2F0aW9uXSA8PSBsaXN0TG9jYXRpb24pCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRhYlRvUmVtb3ZlID0gdGFiOwogICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhYlRvUmVtb3ZlKSBbbmV3U3R5bGUgcmVt
b3ZlVGFiU3RvcDp0YWJdOyBlbHNlIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHRhYlRvUmVtb3ZlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZXdTdHlsZSByZW1v
dmVUYWJTdG9wOnRhYl07CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgdGFiID0gW1tQbGF0Zm9ybU5TVGV4dFRhYiBhbGxvY10gaW5pdFdpdGhUeXBl
Ok5TTGVmdFRhYlN0b3BUeXBlIGxvY2F0aW9uOm1hcmtlckxvY2F0aW9uXTsKICAgICAgICAgICAg
ICAgICAgICAgW25ld1N0eWxlIGFkZFRhYlN0b3A6dGFiXTsKQEAgLTIwMjAsNyArMjA5Niw3IEBA
IC0gKHZvaWQpX2FkZE1hcmtlcnNUb0xpc3Q6KE5TVGV4dExpc3QgKikKICNlbmRpZgogICAgICAg
ICAgICAgICAgICAgICBbbmV3U3R5bGUgYWRkVGFiU3RvcDp0YWJdOwogICAgICAgICAgICAgICAg
ICAgICBbdGFiIHJlbGVhc2VdOwotICAgICAgICAgICAgICAgICAgICBpZiAoIV9mbGFncy5pc0lu
ZGV4aW5nICYmICFfZmxhZ3MuaXNUZXN0aW5nKSBbX2F0dHJTdHIgYWRkQXR0cmlidXRlOk5TUGFy
YWdyYXBoU3R5bGVBdHRyaWJ1dGVOYW1lIHZhbHVlOm5ld1N0eWxlIHJhbmdlOnBhcmFncmFwaFJh
bmdlXTsKKyAgICAgICAgICAgICAgICAgICAgW19hdHRyU3RyIGFkZEF0dHJpYnV0ZTpOU1BhcmFn
cmFwaFN0eWxlQXR0cmlidXRlTmFtZSB2YWx1ZTpuZXdTdHlsZSByYW5nZTpwYXJhZ3JhcGhSYW5n
ZV07CiAgICAgICAgICAgICAgICAgICAgIFtuZXdTdHlsZSByZWxlYXNlXTsKICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlkeCA9IE5TTWF4UmFuZ2UocGFyYWdyYXBo
UmFuZ2UpOwpAQCAtMjAzMyw3ICsyMTA5LDcgQEAgLSAodm9pZClfYWRkTWFya2Vyc1RvTGlzdDoo
TlNUZXh0TGlzdCAqKQogICAgIH0KIH0KIAotLSAodm9pZClfZXhpdEVsZW1lbnQ6KERPTUVsZW1l
bnQgKillbGVtZW50IHRhZzooTlNTdHJpbmcgKil0YWcgZGlzcGxheTooTlNTdHJpbmcgKilkaXNw
bGF5VmFsIGRlcHRoOihOU0ludGVnZXIpZGVwdGggc3RhcnRJbmRleDooTlNVSW50ZWdlcilzdGFy
dEluZGV4Cit2b2lkIEhUTUxDb252ZXJ0ZXI6Ol9leGl0RWxlbWVudChET01FbGVtZW50ICplbGVt
ZW50LCBOU1N0cmluZyAqdGFnLCBOU1N0cmluZyAqZGlzcGxheVZhbCwgTlNJbnRlZ2VyIGRlcHRo
LCBOU1VJbnRlZ2VyIHN0YXJ0SW5kZXgpCiB7CiAgICAgTlNSYW5nZSByYW5nZSA9IE5TTWFrZVJh
bmdlKHN0YXJ0SW5kZXgsIFtfYXR0clN0ciBsZW5ndGhdIC0gc3RhcnRJbmRleCk7CiAgICAgaWYg
KHJhbmdlLmxlbmd0aCA+IDAgJiYgW0AiQSIgaXNFcXVhbFRvU3RyaW5nOnRhZ10pIHsKQEAgLTIw
NDUsMjEgKzIxMjEsMjAgQEAgLSAodm9pZClfZXhpdEVsZW1lbnQ6KERPTUVsZW1lbnQgKillbGVt
ZQogICAgICAgICAgICAgICAgIHVybCA9IGNvcmUoW2VsZW1lbnQgb3duZXJEb2N1bWVudF0pLT5j
b21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMoc3RyaXBwZWRTdHJp
bmcpKTsKICAgICAgICAgICAgIGlmICghdXJsKQogICAgICAgICAgICAgICAgIHVybCA9IFtOU1VS
TCBfd2ViX1VSTFdpdGhTdHJpbmc6c3RyaXBwZWRTdHJpbmcgcmVsYXRpdmVUb1VSTDpfYmFzZVVS
TF07Ci0gICAgICAgICAgICBpZiAoIV9mbGFncy5pc0luZGV4aW5nICYmICFfZmxhZ3MuaXNUZXN0
aW5nKQotICAgICAgICAgICAgICAgIFtfYXR0clN0ciBhZGRBdHRyaWJ1dGU6TlNMaW5rQXR0cmli
dXRlTmFtZSB2YWx1ZTp1cmwgPyAoaWQpdXJsIDogKGlkKXVybFN0cmluZyByYW5nZTpyYW5nZV07
CisgICAgICAgICAgICBbX2F0dHJTdHIgYWRkQXR0cmlidXRlOk5TTGlua0F0dHJpYnV0ZU5hbWUg
dmFsdWU6dXJsID8gKGlkKXVybCA6IChpZCl1cmxTdHJpbmcgcmFuZ2U6cmFuZ2VdOwogICAgICAg
ICB9CiAgICAgfQotICAgIGlmICghX2ZsYWdzLnJlYWNoZWRFbmQgJiYgW3NlbGYgX2VsZW1lbnRJ
c0Jsb2NrTGV2ZWw6ZWxlbWVudF0pIHsKKyAgICBpZiAoIV9mbGFncy5yZWFjaGVkRW5kICYmIF9l
bGVtZW50SXNCbG9ja0xldmVsKGVsZW1lbnQpKSB7CiAgICAgICAgIFtfd3JpdGluZ0RpcmVjdGlv
bkFycmF5IHJlbW92ZUFsbE9iamVjdHNdOwogICAgICAgICBpZiAoW0AidGFibGUtY2VsbCIgaXNF
cXVhbFRvU3RyaW5nOmRpc3BsYXlWYWxdICYmIFtfdGV4dEJsb2NrcyBjb3VudF0gPT0gMCkgewot
ICAgICAgICAgICAgW3NlbGYgX25ld1RhYkZvckVsZW1lbnQ6ZWxlbWVudF07CisgICAgICAgICAg
ICBfbmV3VGFiRm9yRWxlbWVudChlbGVtZW50KTsKICAgICAgICAgfSBlbHNlIGlmIChbX3RleHRM
aXN0cyBjb3VudF0gPiAwICYmIFtAImJsb2NrIiBpc0VxdWFsVG9TdHJpbmc6ZGlzcGxheVZhbF0g
JiYgIVtAIkxJIiBpc0VxdWFsVG9TdHJpbmc6dGFnXSAmJiAhW0AiVUwiIGlzRXF1YWxUb1N0cmlu
Zzp0YWddICYmICFbQCJPTCIgaXNFcXVhbFRvU3RyaW5nOnRhZ10pIHsKLSAgICAgICAgICAgIFtz
ZWxmIF9uZXdMaW5lRm9yRWxlbWVudDplbGVtZW50XTsKKyAgICAgICAgICAgIF9uZXdMaW5lRm9y
RWxlbWVudChlbGVtZW50KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFtzZWxmIF9u
ZXdQYXJhZ3JhcGhGb3JFbGVtZW50OmVsZW1lbnQgdGFnOnRhZyBhbGxvd0VtcHR5OihyYW5nZS5s
ZW5ndGggPT0gMCkgc3VwcHJlc3NUcmFpbGluZ1NwYWNlOllFU107CisgICAgICAgICAgICBfbmV3
UGFyYWdyYXBoRm9yRWxlbWVudChlbGVtZW50LCB0YWcsIChyYW5nZS5sZW5ndGggPT0gMCksIFlF
Uyk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKFtfd3JpdGluZ0RpcmVjdGlvbkFycmF5IGNv
dW50XSA+IDApIHsKLSAgICAgICAgTlNTdHJpbmcgKmJpZGkgPSBbc2VsZiBfc3RyaW5nRm9yTm9k
ZTplbGVtZW50IHByb3BlcnR5OkNTU1Byb3BlcnR5VW5pY29kZUJpZGldOworICAgICAgICBOU1N0
cmluZyAqYmlkaSA9IF9zdHJpbmdGb3JOb2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5VW5pY29kZUJp
ZGkpOwogICAgICAgICBpZiAoYmlkaSAmJiAoW2JpZGkgaXNFcXVhbFRvU3RyaW5nOkAiZW1iZWQi
XSB8fCBbYmlkaSBpc0VxdWFsVG9TdHJpbmc6QCJiaWRpLW92ZXJyaWRlIl0pKSB7CiAgICAgICAg
ICAgICBbX3dyaXRpbmdEaXJlY3Rpb25BcnJheSByZW1vdmVMYXN0T2JqZWN0XTsKICAgICAgICAg
fQpAQCAtMjA3MSw3ICsyMTQ2LDcgQEAgLSAodm9pZClfZXhpdEVsZW1lbnQ6KERPTUVsZW1lbnQg
KillbGVtZQogICAgICAgICB3aGlsZSAoW190ZXh0VGFibGVzIGNvdW50XSA8IFtfdGV4dEJsb2Nr
cyBjb3VudF0gKyAxKQogICAgICAgICAgICAgW190ZXh0QmxvY2tzIHJlbW92ZUxhc3RPYmplY3Rd
OwogICAgICAgICBpZiAoZm9vdGVyKSB7Ci0gICAgICAgICAgICBbc2VsZiBfdHJhdmVyc2VGb290
ZXJOb2RlOmZvb3RlciBkZXB0aDpkZXB0aCArIDFdOworICAgICAgICAgICAgX3RyYXZlcnNlRm9v
dGVyTm9kZShmb290ZXIsIGRlcHRoICsgMSk7CiAgICAgICAgICAgICBbX3RleHRUYWJsZUZvb3Rl
cnMgcmVtb3ZlT2JqZWN0Rm9yS2V5OmtleV07CiAgICAgICAgIH0KICAgICAgICAgW190ZXh0VGFi
bGVzIHJlbW92ZUxhc3RPYmplY3RdOwpAQCAtMjEyMywxMCArMjE5OCwxMCBAQCAtICh2b2lkKV9l
eGl0RWxlbWVudDooRE9NRWxlbWVudCAqKWVsZW1lCiAgICAgICAgIFtfdGV4dEJsb2NrcyByZW1v
dmVMYXN0T2JqZWN0XTsKICAgICB9IGVsc2UgaWYgKChbQCJVTCIgaXNFcXVhbFRvU3RyaW5nOnRh
Z10gfHwgW0AiT0wiIGlzRXF1YWxUb1N0cmluZzp0YWddKSAmJiBbX3RleHRMaXN0cyBjb3VudF0g
PiAwKSB7CiAgICAgICAgIE5TVGV4dExpc3QgKmxpc3QgPSBbX3RleHRMaXN0cyBsYXN0T2JqZWN0
XTsKLSAgICAgICAgW3NlbGYgX2FkZE1hcmtlcnNUb0xpc3Q6bGlzdCByYW5nZTpyYW5nZV07Cisg
ICAgICAgIF9hZGRNYXJrZXJzVG9MaXN0KGxpc3QsIHJhbmdlKTsKICAgICAgICAgW190ZXh0TGlz
dHMgcmVtb3ZlTGFzdE9iamVjdF07CiAgICAgfSBlbHNlIGlmIChbQCJRIiBpc0VxdWFsVG9TdHJp
bmc6dGFnXSkgewotICAgICAgICBbc2VsZiBfYWRkUXVvdGVGb3JFbGVtZW50OmVsZW1lbnQgb3Bl
bmluZzpOTyBsZXZlbDotLV9xdW90ZUxldmVsXTsKKyAgICAgICAgX2FkZFF1b3RlRm9yRWxlbWVu
dChlbGVtZW50LCBOTywgLS1fcXVvdGVMZXZlbCk7CiAgICAgfSBlbHNlIGlmIChbQCJTUEFOIiBp
c0VxdWFsVG9TdHJpbmc6dGFnXSkgewogICAgICAgICBOU1N0cmluZyAqY2xhc3NOYW1lID0gW2Vs
ZW1lbnQgZ2V0QXR0cmlidXRlOkAiY2xhc3MiXTsKICAgICAgICAgTlNNdXRhYmxlU3RyaW5nICpt
dXRhYmxlU3RyaW5nOwpAQCAtMjE2OCw3ICsyMjQzLDcgQEAgLSAodm9pZClfZXhpdEVsZW1lbnQ6
KERPTUVsZW1lbnQgKillbGVtZQogICAgIH0KIH0KIAotLSAodm9pZClfcHJvY2Vzc1RleHQ6KERP
TUNoYXJhY3RlckRhdGEgKil0ZXh0Cit2b2lkIEhUTUxDb252ZXJ0ZXI6Ol9wcm9jZXNzVGV4dChE
T01DaGFyYWN0ZXJEYXRhICp0ZXh0KQogewogICAgIE5TU3RyaW5nICppbnN0ciA9IFt0ZXh0IGRh
dGFdOwogICAgIE5TU3RyaW5nICpvdXRzdHIgPSBpbnN0cjsKQEAgLTIxODMsOCArMjI1OCw4IEBA
IC0gKHZvaWQpX3Byb2Nlc3NUZXh0OihET01DaGFyYWN0ZXJEYXRhICoKICAgICBCT09MIHN1cHBy
ZXNzTGVhZGluZ1NwYWNlID0gKChfZmxhZ3MuaXNTb2Z0ICYmIGxhc3RDaGFyID09ICcgJykgfHwg
bGFzdENoYXIgPT0gJ1xuJyB8fCBsYXN0Q2hhciA9PSAnXHInIHx8IGxhc3RDaGFyID09ICdcdCcg
fHwgbGFzdENoYXIgPT0gTlNQYXJhZ3JhcGhTZXBhcmF0b3JDaGFyYWN0ZXIgfHwgbGFzdENoYXIg
PT0gTlNMaW5lU2VwYXJhdG9yQ2hhcmFjdGVyIHx8IGxhc3RDaGFyID09IE5TRm9ybUZlZWRDaGFy
YWN0ZXIgfHwgbGFzdENoYXIgPT0gV2ViTmV4dExpbmVDaGFyYWN0ZXIpOwogICAgIE5TUmFuZ2Ug
cmFuZ2VUb1JlcGxhY2UgPSBOU01ha2VSYW5nZSh0ZXh0TGVuZ3RoLCAwKTsKICAgICBDRk11dGFi
bGVTdHJpbmdSZWYgbXV0c3RyID0gTlVMTDsKLSAgICB3aGl0ZXNwYWNlVmFsID0gW3NlbGYgX3N0
cmluZ0Zvck5vZGU6dGV4dCBwcm9wZXJ0eTpDU1NQcm9wZXJ0eVdoaXRlU3BhY2VdOwotICAgIHRy
YW5zZm9ybVZhbCA9IFtzZWxmIF9zdHJpbmdGb3JOb2RlOnRleHQgcHJvcGVydHk6Q1NTUHJvcGVy
dHlUZXh0VHJhbnNmb3JtXTsKKyAgICB3aGl0ZXNwYWNlVmFsID0gX3N0cmluZ0Zvck5vZGUodGV4
dCwgQ1NTUHJvcGVydHlXaGl0ZVNwYWNlKTsKKyAgICB0cmFuc2Zvcm1WYWwgPSBfc3RyaW5nRm9y
Tm9kZSh0ZXh0LCBDU1NQcm9wZXJ0eVRleHRUcmFuc2Zvcm0pOwogICAgIAogICAgIGlmIChfZG9t
UmFuZ2UpIHsKICAgICAgICAgaWYgKHRleHQgPT0gW19kb21SYW5nZSBzdGFydENvbnRhaW5lcl0p
IHsKQEAgLTIyNDYsMzEgKzIzMjEsMjkgQEAgLSAodm9pZClfcHJvY2Vzc1RleHQ6KERPTUNoYXJh
Y3RlckRhdGEgKgogICAgICAgICAgICAgb3V0c3RyID0gW291dHN0ciBsb3dlcmNhc2VTdHJpbmdd
OwogICAgICAgICBbX2F0dHJTdHIgcmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlOnJhbmdlVG9SZXBs
YWNlIHdpdGhTdHJpbmc6b3V0c3RyXTsKICAgICAgICAgcmFuZ2VUb1JlcGxhY2UubGVuZ3RoID0g
W291dHN0ciBsZW5ndGhdOwotICAgICAgICBpZiAoIV9mbGFncy5pc0luZGV4aW5nKSB7Ci0gICAg
ICAgICAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBhdHRyczsKLSAgICAgICAgICAgIERPTUVs
ZW1lbnQgKmVsZW1lbnQgPSAoRE9NRWxlbWVudCAqKXRleHQ7Ci0gICAgICAgICAgICB3aGlsZSAo
ZWxlbWVudCkgewotICAgICAgICAgICAgICAgIC8vIEZpbGwgYXR0cnMgZGljdGlvbmFyeSB3aXRo
IGF0dHJpYnV0ZXMgZnJvbSBwYXJlbnQgbm9kZXMsIG5vdCBvdmVyd3JpdGluZyBvbmVzIGRlZXBl
ciBpbiB0aGUgdHJlZQotICAgICAgICAgICAgICAgIGlmKFtlbGVtZW50IG5vZGVUeXBlXSA9PSBE
T01fRUxFTUVOVF9OT0RFKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJldGFpblB0cjxOU011dGFi
bGVEaWN0aW9uYXJ5PiBuZXdBdHRycyA9IGFkb3B0TlMoW1tzZWxmIF9hdHRyaWJ1dGVzRm9yRWxl
bWVudDplbGVtZW50XSBtdXRhYmxlQ29weV0pOwotICAgICAgICAgICAgICAgICAgICBpZiAoYXR0
cnMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFscmVhZHktc2V0IGF0dHJpYnV0ZXMg
KGZyb20gbG93ZXIgaW4gdGhlIHRyZWUpIG92ZXJ3cml0ZSB0aGUgaGlnaGVyIG9uZXMuCi0gICAg
ICAgICAgICAgICAgICAgICAgICBbbmV3QXR0cnMgYWRkRW50cmllc0Zyb21EaWN0aW9uYXJ5OmF0
dHJzLmdldCgpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBh
dHRycyA9IG5ld0F0dHJzOworICAgICAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBhdHRyczsK
KyAgICAgICAgRE9NRWxlbWVudCAqZWxlbWVudCA9IChET01FbGVtZW50ICopdGV4dDsKKyAgICAg
ICAgd2hpbGUgKGVsZW1lbnQpIHsKKyAgICAgICAgICAgIC8vIEZpbGwgYXR0cnMgZGljdGlvbmFy
eSB3aXRoIGF0dHJpYnV0ZXMgZnJvbSBwYXJlbnQgbm9kZXMsIG5vdCBvdmVyd3JpdGluZyBvbmVz
IGRlZXBlciBpbiB0aGUgdHJlZQorICAgICAgICAgICAgaWYoW2VsZW1lbnQgbm9kZVR5cGVdID09
IERPTV9FTEVNRU5UX05PREUpIHsKKyAgICAgICAgICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxl
RGljdGlvbmFyeT4gbmV3QXR0cnMgPSBhZG9wdE5TKFtfYXR0cmlidXRlc0ZvckVsZW1lbnQoZWxl
bWVudCkgbXV0YWJsZUNvcHldKTsKKyAgICAgICAgICAgICAgICBpZiAoYXR0cnMpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gQWxyZWFkeS1zZXQgYXR0cmlidXRlcyAoZnJvbSBsb3dlciBpbiB0
aGUgdHJlZSkgb3ZlcndyaXRlIHRoZSBoaWdoZXIgb25lcy4KKyAgICAgICAgICAgICAgICAgICAg
W25ld0F0dHJzIGFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTphdHRycy5nZXQoKV07CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsZW1lbnQgPSAoRE9NRWxlbWVudCAqKVtlbGVt
ZW50IHBhcmVudE5vZGVdOworICAgICAgICAgICAgICAgIGF0dHJzID0gbmV3QXR0cnM7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIV9mbGFncy5pc1Rlc3RpbmcgJiYgcmFuZ2VUb1Jl
cGxhY2UubGVuZ3RoID4gMCkKLSAgICAgICAgICAgICAgICBbX2F0dHJTdHIgc2V0QXR0cmlidXRl
czphdHRycy5nZXQoKSByYW5nZTpyYW5nZVRvUmVwbGFjZV07CisgICAgICAgICAgICBlbGVtZW50
ID0gKERPTUVsZW1lbnQgKilbZWxlbWVudCBwYXJlbnROb2RlXTsKICAgICAgICAgfQorICAgICAg
ICBpZiAocmFuZ2VUb1JlcGxhY2UubGVuZ3RoID4gMCkKKyAgICAgICAgICAgIFtfYXR0clN0ciBz
ZXRBdHRyaWJ1dGVzOmF0dHJzLmdldCgpIHJhbmdlOnJhbmdlVG9SZXBsYWNlXTsKICAgICAgICAg
X2ZsYWdzLmlzU29mdCA9IHdhc1NwYWNlOwogICAgIH0KICAgICBpZiAobXV0c3RyKQogICAgICAg
ICBDRlJlbGVhc2UobXV0c3RyKTsKIH0KIAotLSAodm9pZClfdHJhdmVyc2VOb2RlOihET01Ob2Rl
ICopbm9kZSBkZXB0aDooTlNJbnRlZ2VyKWRlcHRoIGVtYmVkZGVkOihCT09MKWVtYmVkZGVkCit2
b2lkIEhUTUxDb252ZXJ0ZXI6Ol90cmF2ZXJzZU5vZGUoRE9NTm9kZSAqbm9kZSwgTlNJbnRlZ2Vy
IGRlcHRoLCBCT09MIGVtYmVkZGVkKQogewogICAgIHVuc2lnbmVkIHNob3J0IG5vZGVUeXBlOwog
ICAgIE5TQXJyYXkgKmNoaWxkTm9kZXM7CkBAIC0yMjg2LDcgKzIzNTksNyBAQCAtICh2b2lkKV90
cmF2ZXJzZU5vZGU6KERPTU5vZGUgKilub2RlIGRlCiAgICAgICAgIHJldHVybjsKICAgICAKICAg
ICBub2RlVHlwZSA9IFtub2RlIG5vZGVUeXBlXTsKLSAgICBjaGlsZE5vZGVzID0gW3NlbGYgX2No
aWxkcmVuRm9yTm9kZTpub2RlXTsKKyAgICBjaGlsZE5vZGVzID0gX2NoaWxkcmVuRm9yTm9kZShu
b2RlKTsKICAgICBjb3VudCA9IFtjaGlsZE5vZGVzIGNvdW50XTsKICAgICBzdGFydE9mZnNldCA9
IDA7CiAgICAgZW5kT2Zmc2V0ID0gY291bnQ7CkBAIC0yMzA4LDQzICsyMzgxLDQzIEBAIC0gKHZv
aWQpX3RyYXZlcnNlTm9kZTooRE9NTm9kZSAqKW5vZGUgZGUKICAgICAgICAgICAgIGlmIChpc1N0
YXJ0ICYmIGkgPT0gc3RhcnRPZmZzZXQpCiAgICAgICAgICAgICAgICAgX2RvbVJhbmdlU3RhcnRJ
bmRleCA9IFtfYXR0clN0ciBsZW5ndGhdOwogICAgICAgICAgICAgaWYgKCghaXNTdGFydCB8fCBz
dGFydE9mZnNldCA8PSBpKSAmJiAoIWlzRW5kIHx8IGVuZE9mZnNldCA+IGkpKQotICAgICAgICAg
ICAgICAgIFtzZWxmIF90cmF2ZXJzZU5vZGU6W2NoaWxkTm9kZXMgb2JqZWN0QXRJbmRleDppXSBk
ZXB0aDpkZXB0aCArIDEgZW1iZWRkZWQ6ZW1iZWRkZWRdOworICAgICAgICAgICAgICAgIF90cmF2
ZXJzZU5vZGUoW2NoaWxkTm9kZXMgb2JqZWN0QXRJbmRleDppXSwgZGVwdGggKyAxLCBlbWJlZGRl
ZCk7CiAgICAgICAgICAgICBpZiAoaXNFbmQgJiYgaSArIDEgPj0gZW5kT2Zmc2V0KQogICAgICAg
ICAgICAgICAgIF9mbGFncy5yZWFjaGVkRW5kID0gWUVTOwotICAgICAgICAgICAgaWYgKF90aHVt
Ym5haWxMaW1pdCA+IDAgJiYgW19hdHRyU3RyIGxlbmd0aF0gPj0gX3RodW1ibmFpbExpbWl0KQot
ICAgICAgICAgICAgICAgIF9mbGFncy5yZWFjaGVkRW5kID0gWUVTOwogICAgICAgICAgICAgaWYg
KF9mbGFncy5yZWFjaGVkRW5kKSBicmVhazsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAobm9k
ZVR5cGUgPT0gRE9NX0VMRU1FTlRfTk9ERSkgewogICAgICAgICBET01FbGVtZW50ICplbGVtZW50
ID0gKERPTUVsZW1lbnQgKilub2RlOwotICAgICAgICBOU1N0cmluZyAqdGFnID0gW2VsZW1lbnQg
dGFnTmFtZV0sICpkaXNwbGF5VmFsID0gW3NlbGYgX3N0cmluZ0Zvck5vZGU6ZWxlbWVudCBwcm9w
ZXJ0eTpDU1NQcm9wZXJ0eURpc3BsYXldOwotICAgICAgICBpZiAoW3NlbGYgX2VudGVyRWxlbWVu
dDplbGVtZW50IHRhZzp0YWcgZGlzcGxheTpkaXNwbGF5VmFsIGVtYmVkZGVkOmVtYmVkZGVkXSkg
eworICAgICAgICBOU1N0cmluZyAqdGFnID0gW2VsZW1lbnQgdGFnTmFtZV07CisgICAgICAgIE5T
U3RyaW5nICpkaXNwbGF5VmFsID0gX3N0cmluZ0Zvck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlE
aXNwbGF5KTsKKyAgICAgICAgaWYgKF9lbnRlckVsZW1lbnQoZWxlbWVudCwgdGFnLCBkaXNwbGF5
VmFsLCBlbWJlZGRlZCkpIHsKICAgICAgICAgICAgIE5TVUludGVnZXIgc3RhcnRJbmRleCA9IFtf
YXR0clN0ciBsZW5ndGhdOwotICAgICAgICAgICAgaWYgKFtzZWxmIF9wcm9jZXNzRWxlbWVudDpl
bGVtZW50IHRhZzp0YWcgZGlzcGxheTpkaXNwbGF5VmFsIGRlcHRoOmRlcHRoXSkgeworICAgICAg
ICAgICAgaWYgKF9wcm9jZXNzRWxlbWVudChlbGVtZW50LCB0YWcsIGRpc3BsYXlWYWwsIGRlcHRo
KSkgewogICAgICAgICAgICAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyBp
KyspIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3RhcnQgJiYgaSA9PSBzdGFydE9mZnNl
dCkKICAgICAgICAgICAgICAgICAgICAgICAgIF9kb21SYW5nZVN0YXJ0SW5kZXggPSBbX2F0dHJT
dHIgbGVuZ3RoXTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCghaXNTdGFydCB8fCBzdGFydE9m
ZnNldCA8PSBpKSAmJiAoIWlzRW5kIHx8IGVuZE9mZnNldCA+IGkpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgW3NlbGYgX3RyYXZlcnNlTm9kZTpbY2hpbGROb2RlcyBvYmplY3RBdEluZGV4Omld
IGRlcHRoOmRlcHRoICsgMSBlbWJlZGRlZDplbWJlZGRlZF07CisgICAgICAgICAgICAgICAgICAg
ICAgICBfdHJhdmVyc2VOb2RlKFtjaGlsZE5vZGVzIG9iamVjdEF0SW5kZXg6aV0sIGRlcHRoICsg
MSwgZW1iZWRkZWQpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaXNFbmQgJiYgaSArIDEgPj0g
ZW5kT2Zmc2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgX2ZsYWdzLnJlYWNoZWRFbmQgPSBZ
RVM7CiAgICAgICAgICAgICAgICAgICAgIGlmIChfZmxhZ3MucmVhY2hlZEVuZCkKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBbc2VsZiBfZXhpdEVsZW1lbnQ6ZWxlbWVudCB0YWc6dGFnIGRpc3BsYXk6ZGlzcGxheVZhbCBk
ZXB0aDpkZXB0aCBzdGFydEluZGV4OnN0YXJ0SW5kZXhdOworICAgICAgICAgICAgICAgIF9leGl0
RWxlbWVudChlbGVtZW50LCB0YWcsIGRpc3BsYXlWYWwsIGRlcHRoLCBzdGFydEluZGV4KTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAobm9kZVR5cGUgPT0gRE9NX1RF
WFRfTk9ERSB8fCBub2RlVHlwZSA9PSBET01fQ0RBVEFfU0VDVElPTl9OT0RFKSB7Ci0gICAgICAg
IFtzZWxmIF9wcm9jZXNzVGV4dDooRE9NQ2hhcmFjdGVyRGF0YSAqKW5vZGVdOworICAgICAgICBf
cHJvY2Vzc1RleHQoKERPTUNoYXJhY3RlckRhdGEgKilub2RlKTsKICAgICB9CiAgICAgCi0gICAg
aWYgKGlzRW5kKSBfZmxhZ3MucmVhY2hlZEVuZCA9IFlFUzsKKyAgICBpZiAoaXNFbmQpCisgICAg
ICAgIF9mbGFncy5yZWFjaGVkRW5kID0gWUVTOwogfQogCi0tICh2b2lkKV90cmF2ZXJzZUZvb3Rl
ck5vZGU6KERPTU5vZGUgKilub2RlIGRlcHRoOihOU0ludGVnZXIpZGVwdGgKK3ZvaWQgSFRNTENv
bnZlcnRlcjo6X3RyYXZlcnNlRm9vdGVyTm9kZShET01Ob2RlICpub2RlLCBOU0ludGVnZXIgZGVw
dGgpCiB7CiAgICAgRE9NRWxlbWVudCAqZWxlbWVudCA9IChET01FbGVtZW50ICopbm9kZTsKLSAg
ICBOU0FycmF5ICpjaGlsZE5vZGVzID0gW3NlbGYgX2NoaWxkcmVuRm9yTm9kZTpub2RlXTsKKyAg
ICBOU0FycmF5ICpjaGlsZE5vZGVzID0gX2NoaWxkcmVuRm9yTm9kZShub2RlKTsKICAgICBOU1N0
cmluZyAqdGFnID0gQCJUQk9EWSIsICpkaXNwbGF5VmFsID0gQCJ0YWJsZS1yb3ctZ3JvdXAiOwog
ICAgIE5TVUludGVnZXIgY291bnQgPSBbY2hpbGROb2RlcyBjb3VudF07CiAgICAgTlNVSW50ZWdl
ciBzdGFydE9mZnNldCA9IDA7CkBAIC0yMzY3LDI3ICsyNDQwLDI3IEBAIC0gKHZvaWQpX3RyYXZl
cnNlRm9vdGVyTm9kZTooRE9NTm9kZSAqKW4KICAgICAgICAgICAgIGlzRW5kID0gWUVTOwogICAg
ICAgICB9CiAgICAgfQotICAgIGlmIChbc2VsZiBfZW50ZXJFbGVtZW50OmVsZW1lbnQgdGFnOnRh
ZyBkaXNwbGF5OmRpc3BsYXlWYWwgZW1iZWRkZWQ6WUVTXSkgeworICAgIGlmIChfZW50ZXJFbGVt
ZW50KGVsZW1lbnQsIHRhZywgZGlzcGxheVZhbCwgWUVTKSkgewogICAgICAgICBOU1VJbnRlZ2Vy
IHN0YXJ0SW5kZXggPSBbX2F0dHJTdHIgbGVuZ3RoXTsKLSAgICAgICAgaWYgKFtzZWxmIF9wcm9j
ZXNzRWxlbWVudDplbGVtZW50IHRhZzp0YWcgZGlzcGxheTpkaXNwbGF5VmFsIGRlcHRoOmRlcHRo
XSkgeworICAgICAgICBpZiAoX3Byb2Nlc3NFbGVtZW50KGVsZW1lbnQsIHRhZywgZGlzcGxheVZh
bCwgZGVwdGgpKSB7CiAgICAgICAgICAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzU3RhcnQgJiYgaSA9PSBzdGFydE9mZnNl
dCkKICAgICAgICAgICAgICAgICAgICAgX2RvbVJhbmdlU3RhcnRJbmRleCA9IFtfYXR0clN0ciBs
ZW5ndGhdOwogICAgICAgICAgICAgICAgIGlmICgoIWlzU3RhcnQgfHwgc3RhcnRPZmZzZXQgPD0g
aSkgJiYgKCFpc0VuZCB8fCBlbmRPZmZzZXQgPiBpKSkKLSAgICAgICAgICAgICAgICAgICAgW3Nl
bGYgX3RyYXZlcnNlTm9kZTpbY2hpbGROb2RlcyBvYmplY3RBdEluZGV4OmldIGRlcHRoOmRlcHRo
ICsgMSBlbWJlZGRlZDpZRVNdOworICAgICAgICAgICAgICAgICAgICBfdHJhdmVyc2VOb2RlKFtj
aGlsZE5vZGVzIG9iamVjdEF0SW5kZXg6aV0sIGRlcHRoICsgMSwgWUVTKTsKICAgICAgICAgICAg
ICAgICBpZiAoaXNFbmQgJiYgaSArIDEgPj0gZW5kT2Zmc2V0KQogICAgICAgICAgICAgICAgICAg
ICBfZmxhZ3MucmVhY2hlZEVuZCA9IFlFUzsKICAgICAgICAgICAgICAgICBpZiAoX2ZsYWdzLnJl
YWNoZWRFbmQpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgW3NlbGYgX2V4aXRFbGVtZW50OmVsZW1lbnQgdGFnOnRhZyBkaXNwbGF5OmRpc3Bs
YXlWYWwgZGVwdGg6ZGVwdGggc3RhcnRJbmRleDpzdGFydEluZGV4XTsKKyAgICAgICAgICAgIF9l
eGl0RWxlbWVudChlbGVtZW50LCB0YWcsIGRpc3BsYXlWYWwsIGRlcHRoLCBzdGFydEluZGV4KTsK
ICAgICAgICAgfQogICAgIH0KICAgICBpZiAoaXNFbmQpCiAgICAgICAgIF9mbGFncy5yZWFjaGVk
RW5kID0gWUVTOwogfQogCi0tICh2b2lkKV9hZGp1c3RUcmFpbGluZ05ld2xpbmUKK3ZvaWQgSFRN
TENvbnZlcnRlcjo6X2FkanVzdFRyYWlsaW5nTmV3bGluZSgpCiB7CiAgICAgTlNVSW50ZWdlciB0
ZXh0TGVuZ3RoID0gW19hdHRyU3RyIGxlbmd0aF07CiAgICAgdW5pY2hhciBsYXN0Q2hhciA9ICh0
ZXh0TGVuZ3RoID4gMCkgPyBbW19hdHRyU3RyIHN0cmluZ10gY2hhcmFjdGVyQXRJbmRleDp0ZXh0
TGVuZ3RoIC0gMV0gOiAwOwpAQCAtMjM5Niw3ICsyNDY5LDcgQEAgLSAodm9pZClfYWRqdXN0VHJh
aWxpbmdOZXdsaW5lCiAgICAgICAgIFtfYXR0clN0ciByZXBsYWNlQ2hhcmFjdGVyc0luUmFuZ2U6
TlNNYWtlUmFuZ2UodGV4dExlbmd0aCwgMCkgd2l0aFN0cmluZzpAIlxuIl07CiB9CiAKLS0gKHZv
aWQpX2xvYWRGcm9tRE9NUmFuZ2UKK3ZvaWQgSFRNTENvbnZlcnRlcjo6X2xvYWRGcm9tRE9NUmFu
Z2UoKQogewogICAgIGlmICgtMSA9PSBfZXJyb3JDb2RlKSB7CiAgICAgICAgIERPTU5vZGUgKmNv
bW1vbkFuY2VzdG9yQ29udGFpbmVyID0gW19kb21SYW5nZSBjb21tb25BbmNlc3RvckNvbnRhaW5l
cl07CkBAIC0yNDA5LDExOSArMjQ4Miw5NCBAQCAtICh2b2lkKV9sb2FkRnJvbURPTVJhbmdlCiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBhbmNlc3RvckNvbnRhaW5lciA9IFth
bmNlc3RvckNvbnRhaW5lciBwYXJlbnROb2RlXTsKICAgICAgICAgfQorICAgICAgICAKICAgICAg
ICAgX2RvY3VtZW50ID0gW2NvbW1vbkFuY2VzdG9yQ29udGFpbmVyIG93bmVyRG9jdW1lbnRdOwog
ICAgICAgICBfZGF0YVNvdXJjZSA9IChEb2N1bWVudExvYWRlciAqKWNvcmUoX2RvY3VtZW50KS0+
ZnJhbWUoKS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKTsKLSAgICAgICAgaWYgKF90ZXh0U2l6
ZU11bHRpcGxpZXIgPD0gMC4wKQotICAgICAgICAgICAgX3RleHRTaXplTXVsdGlwbGllciA9IDE7
Ci0gICAgICAgIGlmIChfZGVmYXVsdEZvbnRTaXplIDw9IDAuMCkKLSAgICAgICAgICAgIF9kZWZh
dWx0Rm9udFNpemUgPSAxMjsKLSAgICAgICAgaWYgKF9taW5pbXVtRm9udFNpemUgPCAxLjApCi0g
ICAgICAgICAgICBfbWluaW11bUZvbnRTaXplID0gMTsKKyAgICAgICAgCiAgICAgICAgIGlmIChf
ZG9jdW1lbnQgJiYgX2RhdGFTb3VyY2UpIHsKICAgICAgICAgICAgIF9kb21SYW5nZVN0YXJ0SW5k
ZXggPSAwOwogICAgICAgICAgICAgX2Vycm9yQ29kZSA9IDA7Ci0gICAgICAgICAgICBbc2VsZiBf
dHJhdmVyc2VOb2RlOmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyIGRlcHRoOjAgZW1iZWRkZWQ6Tk9d
OworICAgICAgICAgICAgX3RyYXZlcnNlTm9kZShjb21tb25BbmNlc3RvckNvbnRhaW5lciwgMCwg
Tk8pOwogICAgICAgICAgICAgaWYgKF9kb21SYW5nZVN0YXJ0SW5kZXggPiAwICYmIF9kb21SYW5n
ZVN0YXJ0SW5kZXggPD0gW19hdHRyU3RyIGxlbmd0aF0pCiAgICAgICAgICAgICAgICAgW19hdHRy
U3RyIGRlbGV0ZUNoYXJhY3RlcnNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIF9kb21SYW5nZVN0YXJ0
SW5kZXgpXTsKICAgICAgICAgfQogICAgIH0KIH0KIAotLSAodm9pZClkZWFsbG9jCi17Ci0gICAg
W19hdHRyU3RyIHJlbGVhc2VdOwotICAgIFtfZG9jdW1lbnRBdHRycyByZWxlYXNlXTsKLSAgICBb
X2RvbVJhbmdlIHJlbGVhc2VdOwotICAgIFtfZG9tU3RhcnRBbmNlc3RvcnMgcmVsZWFzZV07Ci0g
ICAgW19zdGFuZGFyZEZvbnRGYW1pbHkgcmVsZWFzZV07Ci0gICAgW190ZXh0TGlzdHMgcmVsZWFz
ZV07Ci0gICAgW190ZXh0QmxvY2tzIHJlbGVhc2VdOwotICAgIFtfdGV4dFRhYmxlcyByZWxlYXNl
XTsKLSAgICBbX3RleHRUYWJsZUZvb3RlcnMgcmVsZWFzZV07Ci0gICAgW190ZXh0VGFibGVTcGFj
aW5ncyByZWxlYXNlXTsKLSAgICBbX3RleHRUYWJsZVBhZGRpbmdzIHJlbGVhc2VdOwotICAgIFtf
dGV4dFRhYmxlUm93cyByZWxlYXNlXTsKLSAgICBbX3RleHRUYWJsZVJvd0FycmF5cyByZWxlYXNl
XTsKLSAgICBbX3RleHRUYWJsZVJvd0JhY2tncm91bmRDb2xvcnMgcmVsZWFzZV07Ci0gICAgW19h
dHRyaWJ1dGVzRm9yRWxlbWVudHMgcmVsZWFzZV07Ci0gICAgW19mb250Q2FjaGUgcmVsZWFzZV07
Ci0gICAgW193cml0aW5nRGlyZWN0aW9uQXJyYXkgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxs
b2NdOwotfQorI2lmICFQTEFURk9STShJT1MpCiAKLS0gKGlkKWluaXQKK3N0YXRpYyBOU0ZpbGVX
cmFwcGVyICpmaWxlV3JhcHBlckZvclVSTChEb2N1bWVudExvYWRlciAqZGF0YVNvdXJjZSwgTlNV
UkwgKlVSTCkKIHsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBfYXR0clN0ciA9IFtbTlNNdXRhYmxlQXR0cmli
dXRlZFN0cmluZyBhbGxvY10gaW5pdF07Ci0gICAgX2RvY3VtZW50QXR0cnMgPSBbW05TTXV0YWJs
ZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwotCi0gICAgX3RleHRMaXN0cyA9IFtbTlNNdXRhYmxl
QXJyYXkgYWxsb2NdIGluaXRdOwotICAgIF90ZXh0QmxvY2tzID0gW1tOU011dGFibGVBcnJheSBh
bGxvY10gaW5pdF07Ci0gICAgX3RleHRUYWJsZXMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0XTsKLSAgICBfdGV4dFRhYmxlRm9vdGVycyA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxv
Y10gaW5pdF07Ci0gICAgX3RleHRUYWJsZVNwYWNpbmdzID0gW1tOU011dGFibGVBcnJheSBhbGxv
Y10gaW5pdF07Ci0gICAgX3RleHRUYWJsZVBhZGRpbmdzID0gW1tOU011dGFibGVBcnJheSBhbGxv
Y10gaW5pdF07Ci0gICAgX3RleHRUYWJsZVJvd3MgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0XTsKLSAgICBfdGV4dFRhYmxlUm93QXJyYXlzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdF07Ci0gICAgX3RleHRUYWJsZVJvd0JhY2tncm91bmRDb2xvcnMgPSBbW05TTXV0YWJsZUFy
cmF5IGFsbG9jXSBpbml0XTsKLSAgICBfYXR0cmlidXRlc0ZvckVsZW1lbnRzID0gW1tOU011dGFi
bGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICBfZm9udENhY2hlID0gW1tOU011dGFibGVE
aWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICBfd3JpdGluZ0RpcmVjdGlvbkFycmF5ID0gW1tO
U011dGFibGVBcnJheSBhbGxvY10gaW5pdF07CisgICAgaWYgKFtVUkwgaXNGaWxlVVJMXSkKKyAg
ICAgICAgcmV0dXJuIFtbW05TRmlsZVdyYXBwZXIgYWxsb2NdIGluaXRXaXRoVVJMOltVUkwgVVJM
QnlSZXNvbHZpbmdTeW1saW5rc0luUGF0aF0gb3B0aW9uczowIGVycm9yOm51bGxwdHJdIGF1dG9y
ZWxlYXNlXTsKIAotICAgIF90ZXh0U2l6ZU11bHRpcGxpZXIgPSAxOwotICAgIF93ZWJWaWV3VGV4
dFNpemVNdWx0aXBsaWVyID0gMDsKLSAgICBfZGVmYXVsdFRhYkludGVydmFsID0gMzY7Ci0gICAg
X2RlZmF1bHRGb250U2l6ZSA9IDEyOwotICAgIF9taW5pbXVtRm9udFNpemUgPSAxOwotICAgIF9l
cnJvckNvZGUgPSAtMTsKLSAgICBfaW5kZXhpbmdMaW1pdCA9IDA7Ci0gICAgX3RodW1ibmFpbExp
bWl0ID0gMDsKKyAgICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiByZXNvdXJjZSA9IGRhdGFTb3Vy
Y2UtPnN1YnJlc291cmNlKFVSTCk7CisgICAgaWYgKHJlc291cmNlKSB7CisgICAgICAgIE5TRmls
ZVdyYXBwZXIgKndyYXBwZXIgPSBbW1tOU0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0UmVndWxhckZp
bGVXaXRoQ29udGVudHM6cmVzb3VyY2UtPmRhdGEoKS0+Y3JlYXRlTlNEYXRhKCkuZ2V0KCldIGF1
dG9yZWxlYXNlXTsKKyAgICAgICAgTlNTdHJpbmcgKmZpbGVuYW1lID0gcmVzb3VyY2UtPnJlc3Bv
bnNlKCkuc3VnZ2VzdGVkRmlsZW5hbWUoKTsKKyAgICAgICAgaWYgKCFmaWxlbmFtZSB8fCAhW2Zp
bGVuYW1lIGxlbmd0aF0pCisgICAgICAgICAgICBmaWxlbmFtZSA9IHN1Z2dlc3RlZEZpbGVuYW1l
V2l0aE1JTUVUeXBlKHJlc291cmNlLT51cmwoKSwgcmVzb3VyY2UtPm1pbWVUeXBlKCkpOworICAg
ICAgICBbd3JhcHBlciBzZXRQcmVmZXJyZWRGaWxlbmFtZTpmaWxlbmFtZV07CisgICAgICAgIHJl
dHVybiB3cmFwcGVyOworICAgIH0KICAgICAKLSAgICBfY2FjaGVzID0gc3RkOjptYWtlX3VuaXF1
ZTxIVE1MQ29udmVydGVyQ2FjaGVzPigpOworICAgIE5TTXV0YWJsZVVSTFJlcXVlc3QgKnJlcXVl
c3QgPSBbW05TTXV0YWJsZVVSTFJlcXVlc3QgYWxsb2NdIGluaXRXaXRoVVJMOlVSTF07CiAKLSAg
ICBfZmxhZ3MuaXNJbmRleGluZyA9IChfaW5kZXhpbmdMaW1pdCA+IDApOwotICAgIF9mbGFncy5p
c1Rlc3RpbmcgPSAwOworICAgIE5TQ2FjaGVkVVJMUmVzcG9uc2UgKmNhY2hlZFJlc3BvbnNlID0g
W1tOU1VSTENhY2hlIHNoYXJlZFVSTENhY2hlXSBjYWNoZWRSZXNwb25zZUZvclJlcXVlc3Q6cmVx
dWVzdF07CisgICAgW3JlcXVlc3QgcmVsZWFzZV07CisgICAgCisgICAgaWYgKGNhY2hlZFJlc3Bv
bnNlKSB7CisgICAgICAgIE5TRmlsZVdyYXBwZXIgKndyYXBwZXIgPSBbW1tOU0ZpbGVXcmFwcGVy
IGFsbG9jXSBpbml0UmVndWxhckZpbGVXaXRoQ29udGVudHM6W2NhY2hlZFJlc3BvbnNlIGRhdGFd
XSBhdXRvcmVsZWFzZV07CisgICAgICAgIFt3cmFwcGVyIHNldFByZWZlcnJlZEZpbGVuYW1lOltb
Y2FjaGVkUmVzcG9uc2UgcmVzcG9uc2VdIHN1Z2dlc3RlZEZpbGVuYW1lXV07CisgICAgICAgIHJl
dHVybiB3cmFwcGVyOworICAgIH0KICAgICAKLSAgICByZXR1cm4gc2VsZjsKKyAgICByZXR1cm4g
bmlsOwogfQogCi0tIChpZClpbml0V2l0aERPTVJhbmdlOihET01SYW5nZSAqKWRvbVJhbmdlCitz
dGF0aWMgTlNGaWxlV3JhcHBlciAqZmlsZVdyYXBwZXJGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1l
bnQpCiB7Ci0gICAgc2VsZiA9IFtzZWxmIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAg
cmV0dXJuIG5pbDsKLSAgICBfZG9tUmFuZ2UgPSBbZG9tUmFuZ2UgcmV0YWluXTsKLSAgICByZXR1
cm4gc2VsZjsKLX0KKyAgICBOU0ZpbGVXcmFwcGVyICp3cmFwcGVyID0gbmlsOworICAgIAorICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgYXR0ciA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShzcmNBdHRy
KTsKKyAgICBpZiAoIWF0dHIuaXNFbXB0eSgpKSB7CisgICAgICAgIE5TVVJMICpVUkwgPSBlbGVt
ZW50LT5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKGF0dHIpOworICAgICAgICBpZiAoRG9jdW1lbnRM
b2FkZXIqIGxvYWRlciA9IGVsZW1lbnQtPmRvY3VtZW50KCkubG9hZGVyKCkpCisgICAgICAgICAg
ICB3cmFwcGVyID0gZmlsZVdyYXBwZXJGb3JVUkwobG9hZGVyLCBVUkwpOworICAgIH0KKyAgICBp
ZiAoIXdyYXBwZXIpIHsKKyAgICAgICAgUmVuZGVySW1hZ2UqIHJlbmRlcmVyID0gdG9SZW5kZXJJ
bWFnZShlbGVtZW50LT5yZW5kZXJlcigpKTsKKyAgICAgICAgaWYgKHJlbmRlcmVyLT5jYWNoZWRJ
bWFnZSgpICYmICFyZW5kZXJlci0+Y2FjaGVkSW1hZ2UoKS0+ZXJyb3JPY2N1cnJlZCgpKSB7Cisg
ICAgICAgICAgICB3cmFwcGVyID0gW1tOU0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0UmVndWxhckZp
bGVXaXRoQ29udGVudHM6KE5TRGF0YSAqKShyZW5kZXJlci0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VG
b3JSZW5kZXJlcihyZW5kZXJlciktPmdldFRJRkZSZXByZXNlbnRhdGlvbigpKV07CisgICAgICAg
ICAgICBbd3JhcHBlciBzZXRQcmVmZXJyZWRGaWxlbmFtZTpAImltYWdlLnRpZmYiXTsKKyAgICAg
ICAgICAgIFt3cmFwcGVyIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgfQorICAgIH0KIAotLSAoTlNB
dHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN0cmluZwotewotICAgIFtzZWxmIF9sb2FkRnJv
bURPTVJhbmdlXTsKLSAgICByZXR1cm4gKCFfZXJyb3JDb2RlKSA/IFtbX2F0dHJTdHIgcmV0YWlu
XSBhdXRvcmVsZWFzZV0gOiBuaWw7CisgICAgcmV0dXJuIHdyYXBwZXI7CiB9CiAKKyNlbmRpZgog
CituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCiAvLyBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIG1v
cmUgSFRNTCBmZWF0dXJlcyB0aGFuIHRoZSBlZGl0aW5nIHZhcmlhbnQgYmVsb3csIHN1Y2ggYXMg
dGFibGVzLgotKyAoTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5n
ZTooUmFuZ2UqKXJhbmdlCitOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmdGcm9t
UmFuZ2UoUmFuZ2UmIHJhbmdlKQogewotICAgIFJldGFpblB0cjxXZWJIVE1MQ29udmVydGVyPiBj
b252ZXJ0ZXIgPSBhZG9wdE5TKFtbV2ViSFRNTENvbnZlcnRlciBhbGxvY10gaW5pdFdpdGhET01S
YW5nZTpraXQocmFuZ2UpXSk7Ci0gICAgcmV0dXJuIFtjb252ZXJ0ZXIgYXR0cmlidXRlZFN0cmlu
Z107CisgICAgSFRNTENvbnZlcnRlciBjb252ZXJ0ZXIoa2l0KCZyYW5nZSkpOworICAgIHJldHVy
biBjb252ZXJ0ZXIuY29udmVydCgpOwogfQotCisgICAgCiAjaWYgIVBMQVRGT1JNKElPUykKLQog
Ly8gVGhpcyBmdW5jdGlvbiB1c2VzIFRleHRJdGVyYXRvciwgd2hpY2ggbWFrZXMgb2Zmc2V0cyBp
biBpdHMgcmVzdWx0IGNvbXBhdGlibGUgd2l0aCBIVE1MIGVkaXRpbmcuCi0rIChOU0F0dHJpYnV0
ZWRTdHJpbmcgKillZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZTooUmFuZ2UqKXJhbmdl
CitOU0F0dHJpYnV0ZWRTdHJpbmcgKmVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKFJh
bmdlJiByYW5nZSkKIHsKICAgICBOU0ZvbnRNYW5hZ2VyICpmb250TWFuYWdlciA9IFtOU0ZvbnRN
YW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsKICAgICBOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5n
ICpzdHJpbmcgPSBbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRdOwogICAg
IE5TVUludGVnZXIgc3RyaW5nTGVuZ3RoID0gMDsKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGlj
dGlvbmFyeT4gYXR0cnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5p
dF0pOwogCi0gICAgZm9yIChUZXh0SXRlcmF0b3IgaXQocmFuZ2UpOyAhaXQuYXRFbmQoKTsgaXQu
YWR2YW5jZSgpKSB7CisgICAgZm9yIChUZXh0SXRlcmF0b3IgaXQoJnJhbmdlKTsgIWl0LmF0RW5k
KCk7IGl0LmFkdmFuY2UoKSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IGN1cnJlbnRUZXh0UmFu
Z2UgPSBpdC5yYW5nZSgpOwogICAgICAgICBOb2RlKiBzdGFydENvbnRhaW5lciA9IGN1cnJlbnRU
ZXh0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCk7CiAgICAgICAgIE5vZGUqIGVuZENvbnRhaW5lciA9
IGN1cnJlbnRUZXh0UmFuZ2UtPmVuZENvbnRhaW5lcigpOwpAQCAtMjU3MSw3OCArMjYxOSw2IEBA
ICsgKE5TQXR0cmlidXRlZFN0cmluZyAqKWVkaXRpbmdBdHRyaWJ1dGUKIAogICAgIHJldHVybiBb
c3RyaW5nIGF1dG9yZWxlYXNlXTsKIH0KLQotI2VuZGlmCi0KLUBlbmQKLQotI2lmICFQTEFURk9S
TShJT1MpCi0KLXN0YXRpYyBOU0ZpbGVXcmFwcGVyICpmaWxlV3JhcHBlckZvclVSTChEb2N1bWVu
dExvYWRlciAqZGF0YVNvdXJjZSwgTlNVUkwgKlVSTCkKLXsKLSAgICBpZiAoW1VSTCBpc0ZpbGVV
UkxdKQotICAgICAgICByZXR1cm4gW1tbTlNGaWxlV3JhcHBlciBhbGxvY10gaW5pdFdpdGhVUkw6
W1VSTCBVUkxCeVJlc29sdmluZ1N5bWxpbmtzSW5QYXRoXSBvcHRpb25zOjAgZXJyb3I6bnVsbHB0
cl0gYXV0b3JlbGVhc2VdOwotCi0gICAgUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gcmVzb3VyY2Ug
PSBkYXRhU291cmNlLT5zdWJyZXNvdXJjZShVUkwpOwotICAgIGlmIChyZXNvdXJjZSkgewotICAg
ICAgICBOU0ZpbGVXcmFwcGVyICp3cmFwcGVyID0gW1tbTlNGaWxlV3JhcHBlciBhbGxvY10gaW5p
dFJlZ3VsYXJGaWxlV2l0aENvbnRlbnRzOnJlc291cmNlLT5kYXRhKCktPmNyZWF0ZU5TRGF0YSgp
LmdldCgpXSBhdXRvcmVsZWFzZV07Ci0gICAgICAgIE5TU3RyaW5nICpmaWxlbmFtZSA9IHJlc291
cmNlLT5yZXNwb25zZSgpLnN1Z2dlc3RlZEZpbGVuYW1lKCk7Ci0gICAgICAgIGlmICghZmlsZW5h
bWUgfHwgIVtmaWxlbmFtZSBsZW5ndGhdKQotICAgICAgICAgICAgZmlsZW5hbWUgPSBzdWdnZXN0
ZWRGaWxlbmFtZVdpdGhNSU1FVHlwZShyZXNvdXJjZS0+dXJsKCksIHJlc291cmNlLT5taW1lVHlw
ZSgpKTsKLSAgICAgICAgW3dyYXBwZXIgc2V0UHJlZmVycmVkRmlsZW5hbWU6ZmlsZW5hbWVdOwot
ICAgICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICB9Ci0gICAgCi0gICAgTlNNdXRhYmxlVVJMUmVx
dWVzdCAqcmVxdWVzdCA9IFtbTlNNdXRhYmxlVVJMUmVxdWVzdCBhbGxvY10gaW5pdFdpdGhVUkw6
VVJMXTsKLQotICAgIE5TQ2FjaGVkVVJMUmVzcG9uc2UgKmNhY2hlZFJlc3BvbnNlID0gW1tOU1VS
TENhY2hlIHNoYXJlZFVSTENhY2hlXSBjYWNoZWRSZXNwb25zZUZvclJlcXVlc3Q6cmVxdWVzdF07
Ci0gICAgW3JlcXVlc3QgcmVsZWFzZV07Ci0gICAgCi0gICAgaWYgKGNhY2hlZFJlc3BvbnNlKSB7
Ci0gICAgICAgIE5TRmlsZVdyYXBwZXIgKndyYXBwZXIgPSBbW1tOU0ZpbGVXcmFwcGVyIGFsbG9j
XSBpbml0UmVndWxhckZpbGVXaXRoQ29udGVudHM6W2NhY2hlZFJlc3BvbnNlIGRhdGFdXSBhdXRv
cmVsZWFzZV07Ci0gICAgICAgIFt3cmFwcGVyIHNldFByZWZlcnJlZEZpbGVuYW1lOltbY2FjaGVk
UmVzcG9uc2UgcmVzcG9uc2VdIHN1Z2dlc3RlZEZpbGVuYW1lXV07Ci0gICAgICAgIHJldHVybiB3
cmFwcGVyOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbmlsOwotfQotCi1zdGF0aWMgTlNGaWxl
V3JhcHBlciAqZmlsZVdyYXBwZXJGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAg
TlNGaWxlV3JhcHBlciAqd3JhcHBlciA9IG5pbDsKLSAgICAKLSAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGF0dHIgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoc3JjQXR0cik7Ci0gICAgaWYgKCFhdHRy
LmlzRW1wdHkoKSkgewotICAgICAgICBOU1VSTCAqVVJMID0gZWxlbWVudC0+ZG9jdW1lbnQoKS5j
b21wbGV0ZVVSTChhdHRyKTsKLSAgICAgICAgaWYgKERvY3VtZW50TG9hZGVyKiBsb2FkZXIgPSBl
bGVtZW50LT5kb2N1bWVudCgpLmxvYWRlcigpKQotICAgICAgICAgICAgd3JhcHBlciA9IGZpbGVX
cmFwcGVyRm9yVVJMKGxvYWRlciwgVVJMKTsKLSAgICB9Ci0gICAgaWYgKCF3cmFwcGVyKSB7Ci0g
ICAgICAgIFJlbmRlckltYWdlKiByZW5kZXJlciA9IHRvUmVuZGVySW1hZ2UoZWxlbWVudC0+cmVu
ZGVyZXIoKSk7Ci0gICAgICAgIGlmIChyZW5kZXJlci0+Y2FjaGVkSW1hZ2UoKSAmJiAhcmVuZGVy
ZXItPmNhY2hlZEltYWdlKCktPmVycm9yT2NjdXJyZWQoKSkgewotICAgICAgICAgICAgd3JhcHBl
ciA9IFtbTlNGaWxlV3JhcHBlciBhbGxvY10gaW5pdFJlZ3VsYXJGaWxlV2l0aENvbnRlbnRzOihO
U0RhdGEgKikocmVuZGVyZXItPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVuZGVyZXIocmVuZGVy
ZXIpLT5nZXRUSUZGUmVwcmVzZW50YXRpb24oKSldOwotICAgICAgICAgICAgW3dyYXBwZXIgc2V0
UHJlZmVycmVkRmlsZW5hbWU6QCJpbWFnZS50aWZmIl07Ci0gICAgICAgICAgICBbd3JhcHBlciBh
dXRvcmVsZWFzZV07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gd3JhcHBlcjsKLX0K
LQotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLU5TQXR0cmlidXRlZFN0cmlu
ZyAqYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShSYW5nZSYgcmFuZ2UpCi17Ci0gICAgcmV0dXJu
IFtXZWJIVE1MQ29udmVydGVyIGF0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2U6JnJhbmdlXTsKLX0K
LSAgICAKLSNpZiAhUExBVEZPUk0oSU9TKQotTlNBdHRyaWJ1dGVkU3RyaW5nICplZGl0aW5nQXR0
cmlidXRlZFN0cmluZ0Zyb21SYW5nZShSYW5nZSYgcmFuZ2UpCi17Ci0gICAgcmV0dXJuIFtXZWJI
VE1MQ29udmVydGVyIGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlOiZyYW5nZV07Ci19
CiAjZW5kaWYKICAgICAKIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>