<?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>149378</bug_id>
          
          <creation_ts>2015-09-19 18:02:37 -0700</creation_ts>
          <short_desc>[CallWith=ScriptState] should pass ExecState to the implementation by reference</short_desc>
          <delta_ts>2015-09-20 09:41:24 -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>Bindings</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1127452</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-09-19 18:02:37 -0700</bug_when>
    <thetext>[CallWith=ScriptState] should pass ExecState to the implementation by reference instead of pointer, as it is expected to be non-null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127453</commentid>
    <comment_count>1</comment_count>
      <attachid>261594</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-09-19 18:06:52 -0700</bug_when>
    <thetext>Created attachment 261594
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127476</commentid>
    <comment_count>2</comment_count>
      <attachid>261602</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-09-19 22:11:38 -0700</bug_when>
    <thetext>Created attachment 261602
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127503</commentid>
    <comment_count>3</comment_count>
      <attachid>261602</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-09-20 09:07:36 -0700</bug_when>
    <thetext>Comment on attachment 261602
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127506</commentid>
    <comment_count>4</comment_count>
      <attachid>261602</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-09-20 09:41:18 -0700</bug_when>
    <thetext>Comment on attachment 261602
Patch

Clearing flags on attachment: 261602

Committed r190028: &lt;http://trac.webkit.org/changeset/190028&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127507</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-09-20 09:41:24 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261594</attachid>
            <date>2015-09-19 18:06:52 -0700</date>
            <delta_ts>2015-09-19 22:11:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149378-20150919180637.patch</filename>
            <type>text/plain</type>
            <size>591234</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkwMDE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDI5ZDEzYzZjMTc3NThl
MDJiZmNlZmQ0ODQwNGY3YjViZDhiMjUxZS4uYjhmNWI3ODVkMGQ5M2FhOWUxZDBlYzA2Y2JmMjBj
ZDYyMTA3MTk2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDU1IEBACiAyMDE1LTA5LTE5ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdFN0
YXRlXSBzaG91bGQgcGFzcyBFeGVjU3RhdGUgdG8gdGhlIGltcGxlbWVudGF0aW9uIGJ5IHJlZmVy
ZW5jZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5
Mzc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0Nh
bGxXaXRoPVNjcmlwdFN0YXRlXSBzaG91bGQgcGFzcyBFeGVjU3RhdGUgdG8gdGhlIGltcGxlbWVu
dGF0aW9uIGJ5CisgICAgICAgIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIHBvaW50ZXIsIGFzIGl0IGlz
IGV4cGVjdGVkIHRvIGJlIG5vbi1udWxsLgorCisgICAgICAgIEFsc28gcmVuYW1lIHRoZSBFeGVj
U3RhdGUgdmFyaWFibGVzIGZyb20gJ2V4ZWMnIHRvICdzdGF0ZScgaW4gdGhlCisgICAgICAgIGJp
bmRpbmdzIGFzIHRoaXMgaXMgdGhlIHByZWZlcnJlZCBuYW1pbmcgY29udmVudGlvbi4KKworICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
bGVnYWN5L0xlZ2FjeUN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lDdXJzb3I6
OnVwZGF0ZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUN1cnNv
ci5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lPYmplY3RTdG9y
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lPYmplY3RTdG9yZTo6YWRkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxlZ2FjeU9iamVjdFN0b3JlOjpwdXQpOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lPYmplY3RTdG9yZS5oOgorICAgICAgICAqIE1vZHVsZXMv
bWVkaWFzdHJlYW0vQ2FwYWJpbGl0eVJhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcmlw
dFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhcGFiaWxpdHlSYW5nZTo6bWluKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhcGFiaWxpdHlSYW5nZTo6bWF4KToKKyAgICAgICAgKiBNb2R1bGVzL21l
ZGlhc3RyZWFtL0NhcGFiaWxpdHlSYW5nZS5oOgorICAgICAgICAqIE1vZHVsZXMvc3RyZWFtcy9S
ZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlU3Ry
ZWFtQ29udHJvbGxlcjo6ZXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW1D
b250cm9sbGVyOjplbnF1ZXVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlRXZlbnRMaXN0ZW5lckNhbGwpOgorICAgICAg
ICAoR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eVNsb3RCb2R5KToKKyAgICAgICAgKEdlbmVyYXRlSGVh
ZGVyKToKKyAgICAgICAgKEdlbmVyYXRlT3ZlcmxvYWRlZEZ1bmN0aW9uKToKKyAgICAgICAgKEdl
dEluZGV4ZWRHZXR0ZXJFeHByZXNzaW9uKToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRp
b24pOgorICAgICAgICAoR2VuZXJhdGVGdW5jdGlvbkNhc3RlZFRoaXMpOgorICAgICAgICAoR2Vu
ZXJhdGVDYWxsV2l0aCk6CisgICAgICAgIChHZW5lcmF0ZUFyZ3VtZW50c0NvdW50Q2hlY2spOgor
ICAgICAgICAoR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2spOgorICAgICAgICAoR2VuZXJhdGVSZXR1
cm5QYXJhbWV0ZXJzKToKKyAgICAgICAgKEdlbmVyYXRlQ2FsbGJhY2tIZWFkZXIpOgorICAgICAg
ICAoR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlSW1w
bGVtZW50YXRpb25GdW5jdGlvbkNhbGwpOgorICAgICAgICAoSlNWYWx1ZVRvTmF0aXZlKToKKyAg
ICAgICAgKE5hdGl2ZVRvSlNWYWx1ZSk6CisgICAgICAgIChHZW5lcmF0ZU92ZXJsb2FkZWRDb25z
dHJ1Y3RvckRlZmluaXRpb24pOgorICAgICAgICAoR2VuZXJhdGVDb25zdHJ1Y3RvckRlZmluaXRp
b24pOgorCisyMDE1LTA5LTE5ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKICAg
ICAgICAgR2V0IHJpZCBvZiBtb3N0IGN1c3RvbSBiaW5kaW5ncyBmb3IgTG9jYXRpb24uaWRsCiAg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDkzNzAKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaAppbmRleCAyNDE0
NGRiZGUxZjFmZWFhMGU4ZDBhYmNlNzAwMzg3NWVkOWEzY2I4Li5jNmRlMzY4MTM0OTU4NGE5MDg0
YTJlMDEzNGI5ZjgyMDU1ZjI3NTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJDdXJzb3IuaApAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBj
b25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgdmFsdWUoKSBjb25zdCA9IDA7CiAgICAgdmly
dHVhbCBJREJBbnkqIHNvdXJjZSgpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiB1cGRhdGUoSlNDOjpFeGVjU3RhdGUqLCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IHVwZGF0ZShKU0M6OkV4ZWNTdGF0ZSYsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwg
RXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYWR2YW5jZSh1bnNpZ25lZCBs
b25nLCBFeGNlcHRpb25Db2RlJikgPSAwOwogICAgIC8vIEZJWE1FOiBUcnkgdG8gbW9kaWZ5IHRo
ZSBjb2RlIGdlbmVyYXRvciBzbyB0aGlzIG92ZXJsb2FkIGlzIHVubmVlZGVkLgogICAgIHZpcnR1
YWwgdm9pZCBjb250aW51ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRp
b25Db2RlJikgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlLmgKaW5kZXggMjg2NjUwNGRlOTg0YzQwYTQwYzI0NjIzNzYyNDNhMmRhZmE0
YTc3NS4uOWQ5MDA2NDA2ZjNjYjY5YTA1NjZlNjZmZDc2NGNiMzYyYzE4ODViYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCkBAIC02
OCw4ICs2OCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b24+IHRyYW5zYWN0aW9uKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBhdXRvSW5jcmVt
ZW50KCkgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGFk
ZChKU0M6OkV4ZWNTdGF0ZSosIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwgRXhjZXB0aW9uQ29k
ZSYpID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gcHV0KEpTQzo6RXhl
Y1N0YXRlKiwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBFeGNlcHRpb25Db2RlJikgPSAwOwor
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBhZGQoSlNDOjpFeGVjU3RhdGUmLCBE
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVh
bCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChKU0M6OkV4ZWNTdGF0ZSYsIERlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlJiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXhjZXB0
aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1
cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEV4
Y2VwdGlvbkNvZGUmKSA9IDA7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9w
ZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlw
dFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CkBAIC03OCw4ICs3OCw4IEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBnZXQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlv
bkNvZGUmKSA9IDA7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGdldChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEV4Y2VwdGlvbkNv
ZGUmKSA9IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGFkZChKU0M6OkV4
ZWNTdGF0ZSosIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwgY29uc3QgRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gcHV0KEpTQzo6RXhlY1N0YXRlKiwgRGVwcmVjYXRlZDo6U2NyaXB0VmFs
dWUmLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJikg
PSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBhZGQoSlNDOjpFeGVjU3Rh
dGUmLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IHB1dChKU0M6OkV4ZWNTdGF0ZSYsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwg
Y29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYpID0gMDsK
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBFeGNlcHRpb25Db2Rl
JikgPSAwOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBkZWxldGVGdW5jdGlv
bihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUm
IGtleSwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVx
dWVzdD4gY2xlYXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVn
YWN5Q3Vyc29yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9M
ZWdhY3lDdXJzb3IuY3BwCmluZGV4IGY1NTc3MWYxMWFmNWVlMzJkZjMzYjEyYWJiZjllYmZkNzhj
Y2E2MTIuLjg1YmRjNDQ4MTM4M2VmODVkNmFlN2E2ZTQwNWNiMzFlY2JhMjZiY2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lDdXJzb3Iu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lD
dXJzb3IuY3BwCkBAIC05Niw3ICs5Niw3IEBAIElEQkFueSogTGVnYWN5Q3Vyc29yOjpzb3VyY2Uo
KSBjb25zdAogICAgIHJldHVybiBtX3NvdXJjZS5nZXQoKTsKIH0KIAotUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBMZWdhY3lDdXJzb3I6OnVwZGF0ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IExlZ2FjeUN1cnNvcjo6dXBkYXRlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAg
ICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeUN1cnNvcjo6dXBkYXRlIik7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lDdXJzb3IuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lDdXJzb3IuaApp
bmRleCBlMWRiYjMyZDI0MjhiMjJmOWE5ZjBmMjgzYTIxOWY3ZWNiY2ZjMTEzLi43ZTNhOTEwNDY0
ZTI0NGU4MzlmODE3YTM3MDhjNTJhYmE2YWNiMjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5Q3Vyc29yLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUN1cnNvci5oCkBAIC02Miw3ICs2
Miw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgdmFsdWUo
KSBjb25zdDsKICAgICBJREJBbnkqIHNvdXJjZSgpIGNvbnN0OwogCi0gICAgUGFzc1JlZlB0cjxJ
REJSZXF1ZXN0PiB1cGRhdGUoSlNDOjpFeGVjU3RhdGUqLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHVwZGF0ZShK
U0M6OkV4ZWNTdGF0ZSYsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwgRXhjZXB0aW9uQ29kZSYp
OwogICAgIHZvaWQgYWR2YW5jZSh1bnNpZ25lZCBsb25nLCBFeGNlcHRpb25Db2RlJik7CiAgICAg
Ly8gRklYTUU6IFRyeSB0byBtb2RpZnkgdGhlIGNvZGUgZ2VuZXJhdG9yIHNvIHRoaXMgb3Zlcmxv
YWQgaXMgdW5uZWVkZWQuCiAgICAgdm9pZCBjb250aW51ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJiBlYykgeyBjb250aW51ZUZ1bmN0aW9uKHN0YXRpY19j
YXN0PElEQktleSo+KG51bGxwdHIpLCBlYyk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lPYmplY3RTdG9yZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T2JqZWN0U3RvcmUuY3BwCmlu
ZGV4IDEwZmUxNjY0NjM4MWNmNDFjNTJjNTBiZDdlODQ5ZWY1MzEwOTRkMjkuLmU1YWY2MGY3ZmVh
YjNmNTNiZGMyOGYzYzMzN2MwMDY1MGJkYWU4NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lPYmplY3RTdG9yZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeU9iamVjdFN0b3JlLmNw
cApAQCAtOTYsMzkgKzk2LDM5IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5T2JqZWN0
U3RvcmU6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjCiAgICAgcmV0dXJu
IGdldChjb250ZXh0LCBrZXlSYW5nZS5yZWxlYXNlKCksIGVjKTsKIH0KIAotUGFzc1JlZlB0cjxJ
REJSZXF1ZXN0PiBMZWdhY3lPYmplY3RTdG9yZTo6YWRkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gTGVn
YWN5T2JqZWN0U3RvcmU6OmFkZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lPYmplY3RTdG9y
ZTo6YWRkIik7CiAgICAgcmV0dXJuIHB1dChJREJEYXRhYmFzZUJhY2tlbmQ6OkFkZE9ubHksIExl
Z2FjeUFueTo6Y3JlYXRlKHRoaXMpLCBzdGF0ZSwgdmFsdWUsIGtleSwgZWMpOwogfQogCi1QYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IExlZ2FjeU9iamVjdFN0b3JlOjphZGQoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVj
KQorUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lPYmplY3RTdG9yZTo6YWRkKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeU9iamVjdFN0b3JlOjphZGQi
KTsKICAgICByZXR1cm4gcHV0KElEQkRhdGFiYXNlQmFja2VuZDo6QWRkT25seSwgTGVnYWN5QW55
OjpjcmVhdGUodGhpcyksIHN0YXRlLCB2YWx1ZSwgc3RhdGljX2Nhc3Q8SURCS2V5Kj4obnVsbHB0
ciksIGVjKTsKIH0KIAotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lPYmplY3RTdG9yZTo6
cHV0KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVl
LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJiBlYykK
K1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5T2JqZWN0U3RvcmU6OnB1dChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgTE9HKFN0
b3JhZ2VBUEksICJMZWdhY3lPYmplY3RTdG9yZTo6cHV0Iik7CiAgICAgcmV0dXJuIHB1dChJREJE
YXRhYmFzZUJhY2tlbmQ6OkFkZE9yVXBkYXRlLCBMZWdhY3lBbnk6OmNyZWF0ZSh0aGlzKSwgc3Rh
dGUsIHZhbHVlLCBrZXksIGVjKTsKIH0KIAotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lP
YmplY3RTdG9yZTo6cHV0KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4g
TGVnYWN5T2JqZWN0U3RvcmU6OnB1dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIERlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgTE9HKFN0b3Jh
Z2VBUEksICJMZWdhY3lPYmplY3RTdG9yZTo6cHV0Iik7CiAgICAgcmV0dXJuIHB1dChJREJEYXRh
YmFzZUJhY2tlbmQ6OkFkZE9yVXBkYXRlLCBMZWdhY3lBbnk6OmNyZWF0ZSh0aGlzKSwgc3RhdGUs
IHZhbHVlLCBzdGF0aWNfY2FzdDxJREJLZXkqPihudWxscHRyKSwgZWMpOwogfQogCi1QYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IExlZ2FjeU9iamVjdFN0b3JlOjpwdXQoSURCRGF0YWJhc2VCYWNrZW5k
OjpQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8TGVnYWN5QW55PiBzb3VyY2UsIEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBEZXBy
ZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5VmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lPYmplY3RTdG9yZTo6cHV0KElEQkRhdGFiYXNlQmFja2Vu
ZDo6UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPExlZ2FjeUFueT4gc291cmNlLCBKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleVZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAg
ICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4
dEZyb21FeGVjU3RhdGUoc3RhdGUpOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0RnJvbUV4ZWNTdGF0ZSgmc3RhdGUpOwogICAgIERP
TVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoY29udGV4dCk7CiAgICAgUmVmUHRyPElEQktleT4g
a2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0YXRlLCBrZXlWYWx1ZSk7CiAgICAg
cmV0dXJuIHB1dChwdXRNb2RlLCBzb3VyY2UsIHN0YXRlLCB2YWx1ZSwga2V5LnJlbGVhc2UoKSwg
ZWMpOwogfQogCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IExlZ2FjeU9iamVjdFN0b3JlOjpwdXQo
SURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8TGVnYWN5QW55
PiBzb3VyY2UsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUm
IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBFeGNlcHRpb25Db2RlJiBlYykKK1Bh
c3NSZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5T2JqZWN0U3RvcmU6OnB1dChJREJEYXRhYmFzZUJh
Y2tlbmQ6OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxMZWdhY3lBbnk+IHNvdXJjZSwgSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgdmFsdWUsIFBhc3NS
ZWZQdHI8SURCS2V5PiBwcnBLZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFJlZlB0cjxJ
REJLZXk+IGtleSA9IHBycEtleTsKICAgICBpZiAobV9kZWxldGVkKSB7CkBAIC0xNDQsOCArMTQ0
LDggQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lPYmplY3RTdG9yZTo6cHV0KElEQkRh
dGFiYXNlQmFja2VuZDo6UHV0TW9kZSBwdXRNb2QKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQogCi0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVl
ID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoc3RhdGUsIHZhbHVlLmpzVmFsdWUoKSwg
bnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICBS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSBTZXJpYWxpemVk
U2NyaXB0VmFsdWU6OmNyZWF0ZSgmc3RhdGUsIHZhbHVlLmpzVmFsdWUoKSwgbnVsbHB0ciwgbnVs
bHB0cik7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAogICAgIGlmIChzZXJpYWxpemVkVmFsdWUtPmhhc0Jsb2JVUkxzKCkpIHsKQEAgLTE1
OCw3ICsxNTgsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IExlZ2FjeU9iamVjdFN0b3JlOjpw
dXQoSURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlIHB1dE1vZAogICAgIGNvbnN0IGJvb2wgdXNl
c0luTGluZUtleXMgPSAha2V5UGF0aC5pc051bGwoKTsKICAgICBjb25zdCBib29sIGhhc0tleUdl
bmVyYXRvciA9IGF1dG9JbmNyZW1lbnQoKTsKIAotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0RnJvbUV4ZWNTdGF0ZShzdGF0ZSk7Cisg
ICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRGcm9tRXhlY1N0YXRlKCZzdGF0ZSk7CiAgICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0
ZShjb250ZXh0KTsKIAogICAgIGlmIChwdXRNb2RlICE9IElEQkRhdGFiYXNlQmFja2VuZDo6Q3Vy
c29yVXBkYXRlICYmIHVzZXNJbkxpbmVLZXlzICYmIGtleSkgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeU9iamVjdFN0b3JlLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T2JqZWN0U3RvcmUu
aAppbmRleCAyOTFhZWI1ZTA0OWU3MzhmZWNlMzliMzhlZDNlZjExYmM5MzBmZDRiLi4yOTExYTBk
NzAzYWRhOTMxYjA4NzM0MzRhOTUxN2ExYjhhMzAzZDQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T2JqZWN0U3RvcmUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T2JqZWN0U3RvcmUu
aApAQCAtNjgsOCArNjgsOCBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bj4gdHJhbnNhY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uOyB9CiAgICAgYm9v
bCBhdXRvSW5jcmVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YS5hdXRvSW5jcmVtZW50
OyB9CiAKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGFkZChKU0M6OkV4ZWNTdGF0ZSosIERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gcHV0KEpTQzo6RXhlY1N0YXRlKiwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUm
LCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBhZGQoSlNDOjpF
eGVjU3RhdGUmLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChKU0M6OkV4ZWNTdGF0ZSYsIERlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlJiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXhjZXB0aW9uQ29kZSYpOwog
ICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNv
bnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmKTsKQEAgLTc5
LDEwICs3OSwxMCBAQCBwdWJsaWM6CiAKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGdldChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtl
eSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZ2V0KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gYWRkKEpTQzo6RXhlY1N0YXRlKiwgRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoSlNDOjpF
eGVjU3RhdGUqLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIGNvbnN0IERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IHB1dChJREJEYXRhYmFzZUJhY2tlbmQ6OlB1dE1vZGUsIFBhc3NSZWZQdHI8TGVnYWN5QW55
PiwgSlNDOjpFeGVjU3RhdGUqLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIFBhc3NSZWZQdHI8
SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gcHV0
KElEQkRhdGFiYXNlQmFja2VuZDo6UHV0TW9kZSwgUGFzc1JlZlB0cjxMZWdhY3lBbnk+IHNvdXJj
ZSwgSlNDOjpFeGVjU3RhdGUqLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIGNvbnN0IERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IGFkZChKU0M6OkV4ZWNTdGF0ZSYsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
JiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gcHV0KEpTQzo6RXhlY1N0YXRlJiwgRGVwcmVjYXRl
ZDo6U2NyaXB0VmFsdWUmLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNl
cHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoSURCRGF0YWJhc2VC
YWNrZW5kOjpQdXRNb2RlLCBQYXNzUmVmUHRyPExlZ2FjeUFueT4sIEpTQzo6RXhlY1N0YXRlJiwg
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChJREJEYXRhYmFzZUJhY2tlbmQ6
OlB1dE1vZGUsIFBhc3NSZWZQdHI8TGVnYWN5QW55PiBzb3VyY2UsIEpTQzo6RXhlY1N0YXRlJiwg
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYg
a2V5LCBFeGNlcHRpb25Db2RlJik7CiAKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGRlbGV0
ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdl
PiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZGVsZXRlRnVu
Y3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vQ2FwYWJpbGl0eVJhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vQ2FwYWJpbGl0eVJhbmdlLmNwcAppbmRleCA2MTRlNGM2ZmQyNTg5
Y2U0Y2FiZGYyNmY5YmQxMDJlNTg5YTE3ZjJmLi40MmE4NWVmNmNiZTBhMjBmZGRkMzRjMTdjMWUw
MTcxZTdlZjZiYzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL0NhcGFiaWxpdHlSYW5nZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9DYXBhYmlsaXR5UmFuZ2UuY3BwCkBAIC01MCw3ICs1MCw3IEBAIENhcGFiaWxpdHlS
YW5nZTo6Q2FwYWJpbGl0eVJhbmdlKGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXR5
UmFuZ2UmIHJhbmdlCiB7CiB9CiAKLXN0YXRpYyBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBzY3Jp
cHRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmls
aXR5UmFuZ2U6OlZhbHVlVW5pb24mIHZhbHVlLCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0
eVJhbmdlOjpUeXBlIHR5cGUpCitzdGF0aWMgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgc2NyaXB0
VmFsdWUoRXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxp
dHlSYW5nZTo6VmFsdWVVbmlvbiYgdmFsdWUsIFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXR5
UmFuZ2U6OlR5cGUgdHlwZSkKIHsKICAgICAvLyBOT1RFOiB0aGUgc3BlYyBzYXlzOgogICAgIC8v
ICAgICAgLi4uIGFuIGltcGxlbWVudGF0aW9uIHNob3VsZCBtYWtlIGEgcmVhc29uYWJsZSBhdHRl
bXB0IHRvIHRyYW5zbGF0ZSBhbmQgc2NhbGUgdGhlIGhhcmR3YXJlJ3Mgc2V0dGluZwpAQCAtNjMs
MjggKzYzLDI4IEBAIHN0YXRpYyBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBzY3JpcHRWYWx1ZShF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFJlYWx0aW1lTWVkaWFTCiAgICAgCiAgICAgc3dpdGNoICh0
eXBlKSB7CiAgICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0eVJhbmdlOjpGbG9h
dDoKLSAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKGV4ZWMtPnZtKCksIEpT
VmFsdWUodmFsdWUuYXNGbG9hdCkpOworICAgICAgICByZXR1cm4gRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUoc3RhdGUudm0oKSwgSlNWYWx1ZSh2YWx1ZS5hc0Zsb2F0KSk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdHlSYW5nZTo6VUxvbmc6Ci0g
ICAgICAgIHJldHVybiBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZShleGVjLT52bSgpLCBKU1ZhbHVl
KHZhbHVlLmFzVUxvbmcpKTsKKyAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
KHN0YXRlLnZtKCksIEpTVmFsdWUodmFsdWUuYXNVTG9uZykpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXR5UmFuZ2U6OlVuZGVmaW5lZDoKLSAg
ICAgICAgcmV0dXJuIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKGV4ZWMtPnZtKCksIGpzVW5kZWZp
bmVkKCkpOworICAgICAgICByZXR1cm4gRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUoc3RhdGUudm0o
KSwganNVbmRlZmluZWQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZShleGVjLT52
bSgpLCBqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4gRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUo
c3RhdGUudm0oKSwganNVbmRlZmluZWQoKSk7CiB9CiAKLURlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
IENhcGFiaWxpdHlSYW5nZTo6bWluKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0RlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlIENhcGFiaWxpdHlSYW5nZTo6bWluKEV4ZWNTdGF0ZSYgc3RhdGUpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIHNjcmlwdFZhbHVlKGV4ZWMsIG1fcmFuZ2VJbmZvLm1pbigpLCBtX3Jh
bmdlSW5mby50eXBlKCkpOworICAgIHJldHVybiBzY3JpcHRWYWx1ZShzdGF0ZSwgbV9yYW5nZUlu
Zm8ubWluKCksIG1fcmFuZ2VJbmZvLnR5cGUoKSk7CiB9CiAKLURlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlIENhcGFiaWxpdHlSYW5nZTo6bWF4KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0RlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlIENhcGFiaWxpdHlSYW5nZTo6bWF4KEV4ZWNTdGF0ZSYgc3RhdGUpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIHNjcmlwdFZhbHVlKGV4ZWMsIG1fcmFuZ2VJbmZvLm1heCgpLCBt
X3JhbmdlSW5mby50eXBlKCkpOworICAgIHJldHVybiBzY3JpcHRWYWx1ZShzdGF0ZSwgbV9yYW5n
ZUluZm8ubWF4KCksIG1fcmFuZ2VJbmZvLnR5cGUoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vQ2Fw
YWJpbGl0eVJhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL0NhcGFi
aWxpdHlSYW5nZS5oCmluZGV4IDdkOGJiYTNiZTBjMjE0NDUyN2Y5MTgxM2I5OTRhMTBjMGQ0NThl
NjIuLmMwNDE0ODViMTc1NDFmODJlN2Y5ZGEwNjcyNDcxNjAyODJiZTM4ZDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vQ2FwYWJpbGl0eVJhbmdlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9DYXBhYmlsaXR5UmFuZ2UuaApA
QCAtNDMsOCArNDMsOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgUmVmPENhcGFiaWxpdHlSYW5n
ZT4gY3JlYXRlKGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXR5UmFuZ2UmKTsKIAot
ICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1pbihKU0M6OkV4ZWNTdGF0ZSopIGNvbnN0Owot
ICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1heChKU0M6OkV4ZWNTdGF0ZSopIGNvbnN0Owor
ICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1pbihKU0M6OkV4ZWNTdGF0ZSYpIGNvbnN0Owor
ICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1heChKU0M6OkV4ZWNTdGF0ZSYpIGNvbnN0Owog
ICAgIGJvb2wgc3VwcG9ydGVkKCkgY29uc3QgeyByZXR1cm4gbV9yYW5nZUluZm8uc3VwcG9ydGVk
KCk7IH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3Ry
ZWFtcy9SZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
c3RyZWFtcy9SZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIuaAppbmRleCBhNGMzYmVjYmIxZDc3ZDM4
YzhlOTNjODRmNDg2MzM5ZWY3NGUzZTZmLi5hYTdhYjNjNmNmMjVlMmVhYjc3ZGI2MTJiNzBkZDdk
NTM4M2NiZTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVh
ZGFibGVTdHJlYW1Db250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJl
YW1zL1JlYWRhYmxlU3RyZWFtQ29udHJvbGxlci5oCkBAIC00OCw5ICs0OCw5IEBAIHB1YmxpYzoK
IAogICAgIFJlYWRhYmxlSlNTdHJlYW0mIHN0cmVhbSgpIHsgcmV0dXJuIG1fc3RyZWFtOyB9CiAK
LSAgICB2b2lkIGVycm9yKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBFeGNlcHRpb25Db2RlJiBlYykgeyBtX3N0cmVhbS5lcnJvcigqc3RhdGUsIHZhbHVlLCBlYyk7
IH0KKyAgICB2b2lkIGVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBtX3N0cmVhbS5lcnJvcihzdGF0ZSwgdmFsdWUsIGVj
KTsgfQogCi0gICAgdm9pZCBlbnF1ZXVlKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKSB7IG1fc3RyZWFtLmVucXVldWUoKnN0YXRlLCB2YWx1ZSk7IH0KKyAgICB2b2lk
IGVucXVldWUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgbV9z
dHJlYW0uZW5xdWV1ZShzdGF0ZSwgdmFsdWUpOyB9CiAKICAgICB2b2lkIHJlZigpIHsgbV9zdHJl
YW0ucmVmKCk7IH0KICAgICB2b2lkIGRlcmVmKCkgeyBtX3N0cmVhbS5kZXJlZigpOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCmlu
ZGV4IGFkYzhkMmU0NTUzYjI1YjZkZGVlNTg2OGE5N2Q1NTg1M2E1Yjk3NGQuLmZiM2RiZTM5Njhk
NzVjZWI3NzA1YmU2ZmMxYTRhMTNlMjBlYjI5ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCkBAIC0xNjYsMTAgKzE2NiwxMCBA
QCBzdWIgR2VuZXJhdGVFdmVudExpc3RlbmVyQ2FsbAogICAgIG15IEBHZW5lcmF0ZUV2ZW50TGlz
dGVuZXJJbXBsID0gKCk7CiAKICAgICBwdXNoKEBHZW5lcmF0ZUV2ZW50TGlzdGVuZXJJbXBsLCA8
PEVORCk7Ci0gICAgSlNWYWx1ZSBsaXN0ZW5lciA9IGV4ZWMtPmFyZ3VtZW50KDEpOworICAgIEpT
VmFsdWUgbGlzdGVuZXIgPSBzdGF0ZS0+YXJndW1lbnQoMSk7CiAgICAgaWYgKFVOTElLRUxZKCFs
aXN0ZW5lci5pc09iamVjdCgpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKLSAgICBpbXBsLiR7ZnVuY3Rpb25OYW1lfUV2ZW50TGlzdGVuZXIoZXhlYy0+
YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnRvQXRvbWljU3RyaW5nKGV4ZWMpLCBjcmVhdGVK
U0V2ZW50TGlzdGVuZXJGb3Ikc3VmZml4KCpleGVjLCAqYXNPYmplY3QobGlzdGVuZXIpLCAqY2Fz
dGVkVGhpcykkcGFzc1JlZlB0ckhhbmRsaW5nLCBleGVjLT5hcmd1bWVudCgyKS50b0Jvb2xlYW4o
ZXhlYykpOworICAgIGltcGwuJHtmdW5jdGlvbk5hbWV9RXZlbnRMaXN0ZW5lcihzdGF0ZS0+YXJn
dW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0F0b21pY1N0cmluZyhzdGF0ZSksIGNyZWF0ZUpT
RXZlbnRMaXN0ZW5lckZvciRzdWZmaXgoKnN0YXRlLCAqYXNPYmplY3QobGlzdGVuZXIpLCAqY2Fz
dGVkVGhpcykkcGFzc1JlZlB0ckhhbmRsaW5nLCBzdGF0ZS0+YXJndW1lbnQoMikudG9Cb29sZWFu
KHN0YXRlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIEVO
RAogICAgIHJldHVybiBAR2VuZXJhdGVFdmVudExpc3RlbmVySW1wbDsKQEAgLTM5MiwxMiArMzky
LDEyIEBAIHN1YiBHZW5lcmF0ZUdldE93blByb3BlcnR5U2xvdEJvZHkKICAgICBteSAkb3duUHJv
cGVydHlDaGVjayA9IHN1YiB7CiAgICAgICAgIGlmICgkaGFzQXR0cmlidXRlcykgewogICAgICAg
ICAgICAgaWYgKCRpbmxpbmVkKSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVy
dHlTbG90SW1wbCwgIiAgICBpZiAoJHtuYW1lc3BhY2VNYXliZX1nZXRTdGF0aWNWYWx1ZVNsb3Q8
JGNsYXNzTmFtZSwgQmFzZT4oZXhlYywgKmluZm8oKS0+c3RhdGljUHJvcEhhc2hUYWJsZSwgdGhp
c09iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KSlcbiIpOworICAgICAgICAgICAgICAgIHB1c2go
QGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAgaWYgKCR7bmFtZXNwYWNlTWF5YmV9Z2V0U3Rh
dGljVmFsdWVTbG90PCRjbGFzc05hbWUsIEJhc2U+KHN0YXRlLCAqaW5mbygpLT5zdGF0aWNQcm9w
SGFzaFRhYmxlLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKVxuIik7CiAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdElt
cGwsICIgICAgaWYgKCR7bmFtZXNwYWNlTWF5YmV9Z2V0U3RhdGljVmFsdWVTbG90PCRjbGFzc05h
bWUsIEJhc2U+KGV4ZWMsICR7Y2xhc3NOYW1lfVRhYmxlLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5h
bWUsIHNsb3QpKVxuIik7CisgICAgICAgICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90
SW1wbCwgIiAgICBpZiAoJHtuYW1lc3BhY2VNYXliZX1nZXRTdGF0aWNWYWx1ZVNsb3Q8JGNsYXNz
TmFtZSwgQmFzZT4oc3RhdGUsICR7Y2xhc3NOYW1lfVRhYmxlLCB0aGlzT2JqZWN0LCBwcm9wZXJ0
eU5hbWUsIHNsb3QpKVxuIik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgIGlmIChCYXNlOjpnZXRP
d25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSlcbiIp
OworICAgICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICBpZiAoQmFz
ZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNs
b3QpKVxuIik7CiAgICAgICAgIH0KICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1w
bCwgIiAgICAgICAgcmV0dXJuIHRydWU7XG4iKTsKICAgICB9OwpAQCAtNDA3LDcgKzQwNyw3IEBA
IHN1YiBHZW5lcmF0ZUdldE93blByb3BlcnR5U2xvdEJvZHkKICAgICAjIGh0dHBzOi8vaGV5Y2Ft
LmdpdGh1Yi5pby93ZWJpZGwvI2Rmbi1uYW1lZC1wcm9wZXJ0aWVzLW9iamVjdAogICAgIG15ICRw
cm90b3R5cGVDaGVjayA9IHN1YiB7CiAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdElt
cGwsICIgICAgJHtuYW1lc3BhY2VNYXliZX1KU1ZhbHVlIHByb3RvID0gdGhpc09iamVjdC0+cHJv
dG90eXBlKCk7XG4iKTsKLSAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAg
ICBpZiAocHJvdG8uaXNPYmplY3QoKSAmJiBqc0Nhc3Q8JHtuYW1lc3BhY2VNYXliZX1KU09iamVj
dCo+KHByb3RvKS0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSlcbiIpOworICAgICAg
ICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgIGlmIChwcm90by5pc09iamVjdCgp
ICYmIGpzQ2FzdDwke25hbWVzcGFjZU1heWJlfUpTT2JqZWN0Kj4ocHJvdG8pLT5oYXNQcm9wZXJ0
eShzdGF0ZSwgcHJvcGVydHlOYW1lKSlcbiIpOwogICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0
eVNsb3RJbXBsLCAiICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiIpOwogICAgIH07CiAKQEAgLTQ0
Myw3ICs0NDMsNyBAQCBzdWIgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eVNsb3RCb2R5CiAgICAgICAg
ICMgVGhpcyBjb25kaXRpb24gaXMgdG8gbWFrZSBzdXJlIHdlIHVzZSB0aGUgc3ViY2xhc3MnIG5h
bWVkIGdldHRlciBpbnN0ZWFkIG9mIHRoZSBiYXNlIGNsYXNzIG9uZSB3aGVuIHBvc3NpYmxlLgog
ICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgIGlmICh0aGlzT2JqZWN0
LT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpIHtcbiIpOwogICAgICAgICBwdXNoKEBnZXRPd25Qcm9w
ZXJ0eVNsb3RJbXBsLCAiICAgICAgICBKU1ZhbHVlIHZhbHVlO1xuIik7Ci0gICAgICAgIHB1c2go
QGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAgICAgIGlmICh0aGlzT2JqZWN0LT5uYW1lR2V0
dGVyKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUpKSB7XG4iKTsKKyAgICAgICAgcHVzaChAZ2V0
T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICAgICAgaWYgKHRoaXNPYmplY3QtPm5hbWVHZXR0ZXIo
c3RhdGUsIHByb3BlcnR5TmFtZSwgdmFsdWUpKSB7XG4iKTsKICAgICAgICAgcHVzaChAZ2V0T3du
UHJvcGVydHlTbG90SW1wbCwgIiAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwg
UmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0sIHZhbHVlKTtcbiIpOwogICAgICAgICBw
dXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4i
KTsKICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICAgICAgfVxuIik7
CkBAIC00NTYsNyArNDU2LDcgQEAgc3ViIEdlbmVyYXRlR2V0T3duUHJvcGVydHlTbG90Qm9keQog
ICAgIH0KIAogICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0
b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yIn0pIHsKLSAgICAgICAgcHVzaChAZ2V0
T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICBpZiAodGhpc09iamVjdC0+Z2V0T3duUHJvcGVydHlT
bG90RGVsZWdhdGUoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSlcbiIpOworICAgICAgICBwdXNo
KEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgIGlmICh0aGlzT2JqZWN0LT5nZXRPd25Qcm9w
ZXJ0eVNsb3REZWxlZ2F0ZShzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KSlcbiIpOwogICAgICAg
ICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIp
OwogICAgIH0KIApAQCAtMTIwNSw3ICsxMjA1LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAkZXhwb3J0TGFi
ZWwuIkpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3Qq
LCAkaW1wbFR5cGUqKTtcbiIpOwogICAgICAgICB9Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICJpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsICRpbXBsVHlwZSYgaW1wbCkgeyByZXR1cm4gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsICZpbXBsKTsgfVxuIik7CisgICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICJpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCAkaW1wbFR5cGUmIGltcGwpIHsgcmV0
dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgJmltcGwpOyB9XG4iKTsKIAogICAgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpF
eGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosICRpbXBsVHlwZSopO1xuIik7CiAgICAgfQpA
QCAtMTQ5NCwxMCArMTQ5NCwxMCBAQCBzdWIgR2VuZXJhdGVPdmVybG9hZGVkRnVuY3Rpb24KICAg
ICAjIEZJWE1FOiBJbXBsZW1lbnQgc3VwcG9ydCBmb3Igb3ZlcmxvYWRlZCBmdW5jdGlvbnMgd2l0
aCB2YXJpYWRpYyBhcmd1bWVudHMuCiAgICAgbXkgJGxlbmd0aE9mTG9uZ2VzdE92ZXJsb2FkZWRG
dW5jdGlvblBhcmFtZXRlckxpc3QgPSBMZW5ndGhPZkxvbmdlc3RGdW5jdGlvblBhcmFtZXRlckxp
c3QoJGZ1bmN0aW9uLT57b3ZlcmxvYWRzfSk7CiAKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtmdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogZXhl
YylcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCAke2Z1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0ZSlcbiIpOwogICAgIHB1c2goQGlt
cGxDb250ZW50LCA8PEVORCk7CiB7Ci0gICAgc2l6ZV90IGFyZ3NDb3VudCA9IHN0ZDo6bWluPHNp
emVfdD4oJGxlbmd0aE9mTG9uZ2VzdE92ZXJsb2FkZWRGdW5jdGlvblBhcmFtZXRlckxpc3QsIGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSk7CisgICAgc2l6ZV90IGFyZ3NDb3VudCA9IHN0ZDo6bWluPHNp
emVfdD4oJGxlbmd0aE9mTG9uZ2VzdE92ZXJsb2FkZWRGdW5jdGlvblBhcmFtZXRlckxpc3QsIHN0
YXRlLT5hcmd1bWVudENvdW50KCkpOwogRU5ECiAKICAgICBteSAlZmV0Y2hlZEFyZ3VtZW50cyA9
ICgpOwpAQCAtMTUwOSw3ICsxNTA5LDcgQEAgRU5ECiAKICAgICAgICAgZm9yZWFjaCBteSAkcGFy
YW1ldGVySW5kZXggKEBuZWVkZWRBcmd1bWVudHMpIHsKICAgICAgICAgICAgIG5leHQgaWYgZXhp
c3RzICRmZXRjaGVkQXJndW1lbnRzeyRwYXJhbWV0ZXJJbmRleH07Ci0gICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIGFyZyRwYXJhbWV0ZXJJbmRleChleGVjLT5hcmd1
bWVudCgkcGFyYW1ldGVySW5kZXgpKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgSlNWYWx1ZSBhcmckcGFyYW1ldGVySW5kZXgoc3RhdGUtPmFyZ3VtZW50KCRwYXJh
bWV0ZXJJbmRleCkpO1xuIik7CiAgICAgICAgICAgICAkZmV0Y2hlZEFyZ3VtZW50c3skcGFyYW1l
dGVySW5kZXh9ID0gMTsKICAgICAgICAgfQogCkBAIC0xNTE3LDE2ICsxNTE3LDE2IEBAIEVORAog
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikg
aWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IGlmICgkcGFyYW1ldGVyc0NoZWNrKVxuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICByZXR1cm4gJHtmdW5jdGlvbk5hbWV9JG92ZXJsb2FkLT57b3ZlcmxvYWRJbmRleH0o
ZXhlYyk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiAk
e2Z1bmN0aW9uTmFtZX0kb3ZlcmxvYWQtPntvdmVybG9hZEluZGV4fShzdGF0ZSk7XG4iKTsKICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIjZW5kaWZcblxuIikgaWYgJGNvbmRpdGlvbmFsU3Ry
aW5nOwogCiAgICAgfQogICAgIGlmICgkbGVhc3ROdW1NYW5kYXRvcnlQYXJhbXMgPj0gMSkgewog
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoYXJnc0NvdW50IDwgJGxlYXN0TnVt
TWFuZGF0b3J5UGFyYW1zKVxuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KGV4ZWMpKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUp
KTtcbiIpOwogICAgIH0KICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwotICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0
YXRlKTsKIH0KIAogRU5ECkBAIC0xNzAzLDkgKzE3MDMsOSBAQCBzdWIgR2V0SW5kZXhlZEdldHRl
ckV4cHJlc3Npb24KIHsKICAgICBteSAkaW5kZXhlZEdldHRlckZ1bmN0aW9uID0gc2hpZnQ7CiAg
ICAgaWYgKCRpbmRleGVkR2V0dGVyRnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSBlcSAiRE9NU3Ry
aW5nIikgewotICAgICAgICByZXR1cm4gImpzU3RyaW5nT3JVbmRlZmluZWQoZXhlYywgdGhpc09i
amVjdC0+aW1wbCgpLml0ZW0oaW5kZXgpKSI7CisgICAgICAgIHJldHVybiAianNTdHJpbmdPclVu
ZGVmaW5lZChzdGF0ZSwgdGhpc09iamVjdC0+aW1wbCgpLml0ZW0oaW5kZXgpKSI7CiAgICAgfQot
ICAgIHJldHVybiAidG9KUyhleGVjLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgdGhpc09i
amVjdC0+aW1wbCgpLml0ZW0oaW5kZXgpKSI7CisgICAgcmV0dXJuICJ0b0pTKHN0YXRlLCB0aGlz
T2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgdGhpc09iamVjdC0+aW1wbCgpLml0ZW0oaW5kZXgpKSI7
CiB9CiAKIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCkBAIC0yMDIxLDIwICsyMDIxLDIwIEBA
IHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgaWYgKFByb3RvdHlwZU92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCgkaW50ZXJmYWNlKSkgewogICAgICAgICBteSAkbnVtUHJvdG90eXBl
QXR0cmlidXRlcyA9IFByb3RvdHlwZUF0dHJpYnV0ZUNvdW50KCRpbnRlcmZhY2UpOwogICAgICAg
ICBpZiAoSXNET01HbG9iYWxPYmplY3QoJGludGVyZmFjZSkpIHsKLSAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiYm9vbCAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OmdldE93blByb3BlcnR5
U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOworICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJib29sICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlTbG90
KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBVTlVTRURfUEFSQU0odm0pO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfVByb3RvdHlw
ZSo+KG9iamVjdCk7XG4iKTsKIAogICAgICAgICAgICAgaWYgKCRudW1Db25zdGFudHMgZXEgMCAm
JiAkbnVtRnVuY3Rpb25zIGVxIDAgJiYgJG51bVByb3RvdHlwZUF0dHJpYnV0ZXMgZXEgMCkgewot
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBCYXNlOjpnZXRP
d25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTtcbiIp
OyAgICAgICAgCisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJu
IEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1l
LCBzbG90KTtcbiIpOyAgICAgICAgCiAgICAgICAgICAgICB9IGVsc2lmICgkbnVtQ29uc3RhbnRz
IGVxIDAgJiYgJG51bVByb3RvdHlwZUF0dHJpYnV0ZXMgZXEgMCkgewotICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SlNP
YmplY3Q+KGV4ZWMsICR7Y2xhc3NOYW1lfVByb3RvdHlwZVRhYmxlLCB0aGlzT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxKU09iamVjdD4oc3RhdGUsICR7Y2xh
c3NOYW1lfVByb3RvdHlwZVRhYmxlLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpO1xu
Iik7CiAgICAgICAgICAgICB9IGVsc2lmICgkbnVtRnVuY3Rpb25zIGVxIDAgJiYgJG51bVByb3Rv
dHlwZUF0dHJpYnV0ZXMgZXEgMCkgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8JHtjbGFzc05hbWV9UHJvdG90eXBlLCBK
U09iamVjdD4oZXhlYywgJHtjbGFzc05hbWV9UHJvdG90eXBlVGFibGUsIHRoaXNPYmplY3QsIHBy
b3BlcnR5TmFtZSwgc2xvdCk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PCR7Y2xhc3NOYW1lfVByb3RvdHlwZSwg
SlNPYmplY3Q+KHN0YXRlLCAke2NsYXNzTmFtZX1Qcm90b3R5cGVUYWJsZSwgdGhpc09iamVjdCwg
cHJvcGVydHlOYW1lLCBzbG90KTtcbiIpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gZ2V0U3RhdGljUHJvcGVydHlT
bG90PCR7Y2xhc3NOYW1lfVByb3RvdHlwZSwgSlNPYmplY3Q+KGV4ZWMsICR7Y2xhc3NOYW1lfVBy
b3RvdHlwZVRhYmxlLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpO1xuIik7CisgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIGdldFN0YXRpY1Byb3Bl
cnR5U2xvdDwke2NsYXNzTmFtZX1Qcm90b3R5cGUsIEpTT2JqZWN0PihzdGF0ZSwgJHtjbGFzc05h
bWV9UHJvdG90eXBlVGFibGUsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7XG4iKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsK
ICAgICAgICAgfSBlbHNpZiAoJG51bUNvbnN0YW50cyA+IDAgfHwgJG51bUZ1bmN0aW9ucyA+IDAg
fHwgJG51bVByb3RvdHlwZUF0dHJpYnV0ZXMgPiAwKSB7CkBAIC0yMDY2LDEyICsyMDY2LDEyIEBA
IHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgfQogCiAgICAgaWYgKCRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbU5hbWVkR2V0dGVyT25Qcm90b3R5cGUifSkg
ewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9UHJvdG90eXBl
OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOworICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9UHJvdG90eXBlOjpwdXQoSlND
ZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpXG4iKTsKICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX1Qcm90b3R5cGUqPihjZWxsKTtcbiIp
OwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAodGhpc09iamVjdC0+cHV0RGVs
ZWdhdGUoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpXG4iKTsKKyAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgaWYgKHRoaXNPYmplY3QtPnB1dERlbGVnYXRlKHN0YXRlLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSlcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAgICAgcmV0dXJuO1xuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTtc
biIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBCYXNlOjpwdXQodGhpc09iamVj
dCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpO1xuIik7CiAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAifVxuXG4iKTsKICAgICB9CiAKQEAgLTIxNTIsNyArMjE1Miw3IEBAIHN1
YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgIyBBdHRyaWJ1dGVzCiAgICAgaWYgKCRoYXNH
ZXR0ZXIpIHsKICAgICAgICAgaWYgKCEkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
Q3VzdG9tR2V0T3duUHJvcGVydHlTbG90In0pIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiYm9vbCAke2NsYXNzTmFtZX06OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYgc2xvdClcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJib29sICR7
Y2xhc3NOYW1lfTo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdClc
biIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFz
c05hbWV9Kj4ob2JqZWN0KTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpO1xuIik7CkBA
IC0yMTYzLDcgKzIxNjMsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICBp
ZiAoJGluZGV4ZWRHZXR0ZXJGdW5jdGlvbiB8fCAkbmFtZWRHZXR0ZXJGdW5jdGlvbgogICAgICAg
ICAgICAgICAgIHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21OYW1l
ZEdldHRlciJ9CiAgICAgICAgICAgICAgICAgfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvciJ9KSB7Ci0gICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wgJHtjbGFzc05hbWV9OjpnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOworICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJib29sICR7Y2xhc3NOYW1lfTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVy
dHlTbG90JiBzbG90KVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIp
OwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byogdGhpc09iamVjdCA9
IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihvYmplY3QpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7XG4iKTsKQEAgLTIxNzUsNyArMjE3NSw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0
aW9uCiAgICAgICAgICAgICAgICAgaWYgKCRnZW5lcmF0ZWRQcm9wZXJ0eU5hbWUpIHsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IElkZW50
aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9t
KHN0YXRlLCBpbmRleCk7XG4iKTsKICAgICAgICAgICAgICAgICAkZ2VuZXJhdGVkUHJvcGVydHlO
YW1lID0gMTsKICAgICAgICAgICAgIH07CiAKQEAgLTIyMDIsNyArMjIwMiw3IEBAIHN1YiBHZW5l
cmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgIyBUaGlzIGNvbmRpdGlvbiBpcyB0
byBtYWtlIHN1cmUgd2UgdXNlIHRoZSBzdWJjbGFzcycgbmFtZWQgZ2V0dGVyIGluc3RlYWQgb2Yg
dGhlIGJhc2UgY2xhc3Mgb25lIHdoZW4gcG9zc2libGUuCiAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgaWYgKHRoaXNPYmplY3QtPmNsYXNzSW5mbygpID09IGluZm8oKSkg
e1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIEpTVmFs
dWUgdmFsdWU7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAg
ICAgaWYgKHRoaXNPYmplY3QtPm5hbWVHZXR0ZXIoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSkp
IHtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBpZiAo
dGhpc09iamVjdC0+bmFtZUdldHRlcihzdGF0ZSwgcHJvcGVydHlOYW1lLCB2YWx1ZSkpIHtcbiIp
OwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAgc2xvdC5z
ZXRWYWx1ZSh0aGlzT2JqZWN0LCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSwgdmFs
dWUpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICB9XG4iKTsKQEAgLTIyMTIsMTEgKzIyMTIsMTEgQEAgc3ViIEdlbmVyYXRlSW1wbGVt
ZW50YXRpb24KIAogICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3IifSkgewogICAgICAg
ICAgICAgICAgICYkcHJvcGVydHlOYW1lR2VuZXJhdGlvbigpOwotICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIGlmICh0aGlzT2JqZWN0LT5nZXRPd25Qcm9wZXJ0eVNsb3RE
ZWxlZ2F0ZShleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKVxuIik7CisgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKHRoaXNPYmplY3QtPmdldE93blByb3BlcnR5U2xv
dERlbGVnYXRlKHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKVxuIik7CiAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBCYXNl
OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGluZGV4LCBzbG90
KTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEJhc2U6
OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVjdCwgc3RhdGUsIGluZGV4LCBzbG90
KTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogICAgICAg
ICB9CiAKQEAgLTIyMzUsMTAgKzIyMzUsMTAgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24K
ICAgICAgICAgICAgIG15ICRhdHRyaWJ1dGVDb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2VuZXJh
dG9yLT5HZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSk7CiAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNpZiAke2F0dHJpYnV0ZUNvbmRpdGlvbmFs
U3RyaW5nfVxuIikgaWYgJGF0dHJpYnV0ZUNvbmRpdGlvbmFsU3RyaW5nOwogCi0gICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIkVuY29kZWRKU1ZhbHVlICR7Z2V0RnVuY3Rpb25OYW1lfShF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
RW5jb2RlZEpTVmFsdWUgJHtnZXRGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2Jq
ZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpXG4i
KTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAKLSAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTShleGVjKTtcbiIpOworICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTtcbiIpOwog
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNl
KTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFN
KHRoaXNWYWx1ZSk7XG4iKTsKICAgICAgICAgICAgIGlmICghJGF0dHJpYnV0ZS0+aXNTdGF0aWMg
fHwgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlID1+IC9Db25zdHJ1Y3RvciQvKSB7CkBAIC0y
MjQ5LDE0ICsyMjQ5LDE0IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAg
ICAgICAgICAgIGlmIChJbnRlcmZhY2VSZXF1aXJlc0F0dHJpYnV0ZXNPbkluc3RhbmNlRm9yQ29t
cGF0aWJpbGl0eSgkaW50ZXJmYWNlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9KiBjYXN0ZWRUaGlzT2JqZWN0ID0gIiAuIEdl
dENhc3RpbmdIZWxwZXJGb3JUaGlzT2JqZWN0KCRpbnRlcmZhY2UpIC4gIihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpc09iamVjdCkpXG4iKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXBvcnREZXBy
ZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsIFwiJGludGVyZmFjZU5hbWVcIiwgXCIkbmFtZVwiKTtc
biIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAg
IHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqc3RhdGUsIFwiJGludGVyZmFjZU5hbWVcIiwg
XCIkbmFtZVwiKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHtj
bGFzc05hbWV9KiBjYXN0ZWRUaGlzID0gIiAuIEdldENhc3RpbmdIZWxwZXJGb3JUaGlzT2JqZWN0
KCRpbnRlcmZhY2UpIC4gIihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7XG4iKTsKICAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkge1xuIik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDwke2NsYXNzTmFtZX1Qcm90b3R5cGUqPihzbG90QmFz
ZSkpXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAg
ICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCBcIiRpbnRlcmZh
Y2VOYW1lXCIsIFwiJG5hbWVcIik7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywgXCIk
aW50ZXJmYWNlTmFtZVwiLCBcIiRuYW1lXCIpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0
ZXJFcnJvcigqc3RhdGUsIFwiJGludGVyZmFjZU5hbWVcIiwgXCIkbmFtZVwiKTtcbiIpOworICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRocm93
R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgXCIkaW50ZXJmYWNlTmFtZVwiLCBcIiRuYW1lXCIpO1xu
Iik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTIyOTMsNyArMjI5Myw3IEBAIHN1
YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkNoZWNrU2VjdXJpdHkifSAmJgogICAgICAgICAgICAgICAgICEk
YXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJEb05vdENoZWNrU2Vj
dXJpdHkifSAmJgogICAgICAgICAgICAgICAgICEkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJEb05vdENoZWNrU2VjdXJpdHlPbkdldHRlciJ9KSB7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNo
b3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coZXhlYywgY2FzdGVkVGhpcy0+aW1wbCgpKSlcbiIp
OworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghQmluZGluZ1Nl
Y3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KHN0YXRlLCBjYXN0ZWRUaGlzLT5p
bXBsKCkpKVxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKICAgICAgICAgICAg
IH0KIApAQCAtMjMwMyw3ICsyMzAzLDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAg
ICAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPHd0Zi9OZXZlckRlc3Ryb3llZC5oPiIs
ICJXRUJfUkVQTEFZIik7CiAKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNp
ZiBFTkFCTEUoV0VCX1JFUExBWSlcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGUtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIElucHV0
Q3Vyc29yJiBjdXJzb3IgPSBnbG9iYWxPYmplY3QtPmlucHV0Q3Vyc29yKCk7XG4iKTsKIAogICAg
ICAgICAgICAgICAgIG15ICRuYXRpdmVUeXBlID0gR2V0TmF0aXZlVHlwZSgkdHlwZSk7CkBAIC0y
MzE0LDcgKzIzMTQsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAkbWVtb2l6ZWRUeXBlIG1lbW9pemVkUmVz
dWx0ID0gY2FzdGVkVGhpcy0+aW1wbCgpLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCIgLiBqb2lu
KCIsICIsIEBhcmd1bWVudHMpIC4gIik7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAgICAgY3Vyc29yLmFwcGVuZElucHV0PE1lbW9pemVkRE9NUmVzdWx0PCRt
ZW1vaXplZFR5cGU+PihiaW5kaW5nTmFtZS5nZXQoKS5zdHJpbmcoKSwgbWVtb2l6ZWRSZXN1bHQs
ICRleGNlcHRpb25Db2RlKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0
ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlTmFtZSwgIm1lbW9pemVkUmVzdWx0IiwgImNhc3Rl
ZFRoaXMiKSAuICI7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTtcbiIpIGlmICRnZXR0ZXJFeGNlcHRpb25z
OworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBzZXRET01FeGNl
cHRpb24oc3RhdGUsIGVjKTtcbiIpIGlmICRnZXR0ZXJFeGNlcHRpb25zOwogICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4i
KTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7CkBAIC0yMzI0LDcg
KzIzMjQsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICAgICBpZiAoaW5wdXQgJiYgaW5wdXQtPmNvbnZlcnRUbzwk
bWVtb2l6ZWRUeXBlPihtZW1vaXplZFJlc3VsdCkpIHtcbiIpOwogICAgICAgICAgICAgICAgICMg
RklYTUU6IHRoZSBnZW5lcmF0ZWQgY29kZSBzaG91bGQgcmVwb3J0IGFuIGVycm9yIGlmIGFuIGlu
cHV0IGNhbm5vdCBiZSBmZXRjaGVkIG9yIGNvbnZlcnRlZC4KICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRv
SlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2VOYW1lLCAibWVtb2l6
ZWRSZXN1bHQiLCAiY2FzdGVkVGhpcyIpIC4gIjtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGlucHV0LT5l
eGNlcHRpb25Db2RlKCkpO1xuIikgaWYgJGdldHRlckV4Y2VwdGlvbnM7CisgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUs
IGlucHV0LT5leGNlcHRpb25Db2RlKCkpO1xuIikgaWYgJGdldHRlckV4Y2VwdGlvbnM7CiAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAgICAgfVxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgfVxuIik7CkBAIC0yMzMyLDE3ICsyMzMyLDE3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0
aW9uCiAgICAgICAgICAgICB9ICMgYXR0cmlidXRlIE5vbmRldGVybWluaXN0aWMKIAogICAgICAg
ICAgICAgaWYgKEhhc0N1c3RvbUdldHRlcigkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVk
QXR0cmlidXRlcykpIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1l
KGV4ZWMpKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+JGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUo
c3RhdGUpKTtcbiIpOwogICAgICAgICAgICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2hlY2tTZWN1cml0eUZvck5vZGUifSkgewogICAgICAg
ICAgICAgICAgICRpbXBsSW5jbHVkZXN7IkpTRE9NQmluZGluZy5oIn0gPSAxOwogICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5p
bXBsKCk7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKGV4ZWMsIGltcGwuIiAu
ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSAuICIoKSkgPyAiIC4gTmF0aXZlVG9KU1ZhbHVl
KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZU5hbWUsICJpbXBsLiRpbXBsR2V0
dGVyRnVuY3Rpb25OYW1lKCkiLCAiY2FzdGVkVGhpcyIpIC4gIiA6IGpzTnVsbCgpKTtcbiIpOwor
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoc2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoc3RhdGUsIGltcGwuIiAuICRhdHRyaWJ1dGUt
PnNpZ25hdHVyZS0+bmFtZSAuICIoKSkgPyAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUt
PnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZU5hbWUsICJpbXBsLiRpbXBsR2V0dGVyRnVuY3Rpb25O
YW1lKCkiLCAiY2FzdGVkVGhpcyIpIC4gIiA6IGpzTnVsbCgpKTtcbiIpOwogICAgICAgICAgICAg
fSBlbHNpZiAoJHR5cGUgZXEgIkV2ZW50SGFuZGxlciIpIHsKICAgICAgICAgICAgICAgICBteSAk
Z2V0dGVyID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiV2lu
ZG93RXZlbnRIYW5kbGVyIn0gPyAid2luZG93RXZlbnRIYW5kbGVyQXR0cmlidXRlIgogICAgICAg
ICAgICAgICAgICAgICA6ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkRvY3VtZW50RXZlbnRIYW5kbGVyIn0gPyAiZG9jdW1lbnRFdmVudEhhbmRsZXJBdHRyaWJ1
dGUiCiAgICAgICAgICAgICAgICAgICAgIDogImV2ZW50SGFuZGxlckF0dHJpYnV0ZSI7CiAgICAg
ICAgICAgICAgICAgbXkgJGV2ZW50TmFtZSA9IEV2ZW50SGFuZGxlckF0dHJpYnV0ZUV2ZW50TmFt
ZSgkYXR0cmlidXRlKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBV
TlVTRURfUEFSQU0oZXhlYyk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBVTlVTRURfUEFSQU0oc3RhdGUpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSgkZ2V0dGVyKGNhc3RlZFRo
aXMtPmltcGwoKSwgJGV2ZW50TmFtZSkpO1xuIik7CiAgICAgICAgICAgICB9IGVsc2lmICgkYXR0
cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgPX4gL0NvbnN0cnVjdG9yJC8pIHsKICAgICAgICAgICAg
ICAgICBteSAkY29uc3RydWN0b3JUeXBlID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlOwpA
QCAtMjM1MiwxMCArMjM1MiwxMCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAg
ICAgICAgICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IikgewogICAgICAgICAg
ICAgICAgICAgICBteSAkbmFtZWQgPSAoJGNvbnN0cnVjdG9yVHlwZSA9fiAvTmFtZWQkLykgPyAi
TmFtZWQiIDogIiI7CiAgICAgICAgICAgICAgICAgICAgICRjb25zdHJ1Y3RvclR5cGUgPX4gcy9O
YW1lZCQvLzsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKUyIgLiAkY29uc3RydWN0b3JUeXBlIC4gIjo6Z2V0JHtuYW1l
ZH1Db25zdHJ1Y3RvcihleGVjLT52bSgpLCBjYXN0ZWRUaGlzKSk7XG4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
UyIgLiAkY29uc3RydWN0b3JUeXBlIC4gIjo6Z2V0JHtuYW1lZH1Db25zdHJ1Y3RvcihzdGF0ZS0+
dm0oKSwgY2FzdGVkVGhpcykpO1xuIik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTIiAuICRjb25zdHJ1Y3RvclR5cGUg
LiAiLmgiLCAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25k
aXRpb25hbCJ9KTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKUyIgLiAkY29uc3RydWN0b3JUeXBlIC4gIjo6Z2V0Q29u
c3RydWN0b3IoZXhlYy0+dm0oKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpKTtcbiIpOwor
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTIiAuICRjb25zdHJ1Y3RvclR5cGUgLiAiOjpnZXRDb25zdHJ1Y3RvcihzdGF0
ZS0+dm0oKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpKTtcbiIpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0gZWxzaWYgKCEkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJHZXR0ZXJSYWlzZXNFeGNlcHRpb24ifSkgewogICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGJvb2wgaXNOdWxsID0gZmFsc2U7XG4iKSBpZiAk
aXNOdWxsYWJsZTsKQEAgLTIzOTksNyArMjM5OSw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0
aW9uCiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7XG4iKSBpZiAhJGF0dHJpYnV0ZS0+aXNTdGF0aWM7CiAg
ICAgICAgICAgICAgICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNTVkdBbmltYXRlZFR5cGUo
JHR5cGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBSZWZQdHI8JHR5cGU+IG9iaiA9ICRqc1R5cGU7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgb2JqLmdldCgpKTtcbiIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pT
KHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgb2JqLmdldCgpKTtcbiIpOwogICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSAkanNUeXBlO1xuIik7CiAgICAgICAg
ICAgICAgICAgICAgIH0KQEAgLTI0MTAsNyArMjQxMCw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVu
dGF0aW9uCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBjYXN0ZWRUaGlzLT5tXyIgLiAkYXR0
cmlidXRlLT5zaWduYXR1cmUtPm5hbWUgLiAiLnNldChleGVjLT52bSgpLCBjYXN0ZWRUaGlzLCBy
ZXN1bHQpO1xuIikgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkNhY2hlZEF0dHJpYnV0ZSJ9KTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBjYXN0ZWRUaGlzLT5tXyIgLiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUgLiAi
LnNldChzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcywgcmVzdWx0KTtcbiIpIGlmICgkYXR0cmlidXRl
LT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWNoZWRBdHRyaWJ1dGUifSk7CiAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpO1xuIik7CiAKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0yNDI5LDcgKzI0
MjksNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFs
dWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlTmFtZSwgImltcGwuJGltcGxH
ZXR0ZXJGdW5jdGlvbk5hbWUoIiAuIGpvaW4oIiwgIiwgQGFyZ3VtZW50cykgLiAiKSIsICJjYXN0
ZWRUaGlzIikgLiAiO1xuIik7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTtcbiIpOwor
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHNldERPTUV4Y2VwdGlvbihz
dGF0ZSwgZWMpO1xuIik7CiAKICAgICAgICAgICAgICAgICBpZiAoJGlzTnVsbGFibGUpIHsKICAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKGlzTnVsbClcbiIp
OwpAQCAtMjQ1MCwzMyArMjQ1MCwzMyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAg
ICAgICAgICAgbXkgJGNvbnN0cnVjdG9yRnVuY3Rpb25OYW1lID0gImpzIiAuICRpbnRlcmZhY2VO
YW1lIC4gIkNvbnN0cnVjdG9yIjsKIAogICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Qcm94eVRvSlNPYmplY3QifSkgewotICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiRW5jb2RlZEpTVmFsdWUgJHtjb25zdHJ1Y3RvckZ1bmN0
aW9uTmFtZX0oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKVxuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJFbmNvZGVkSlNWYWx1ZSAke2NvbnN0cnVjdG9yRnVuY3Rpb25OYW1lfShFeGVjU3RhdGUq
IHN0YXRlLCBKU09iamVjdCosIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KVxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAke2NsYXNzTmFtZX0qIGRvbU9iamVj
dCA9IHRvJHtjbGFzc05hbWV9KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTtcbiIpOwogICAg
ICAgICAgICAgfSBlbHNpZiAoQ29uc3RydWN0b3JTaG91bGRCZU9uSW5zdGFuY2UoJGludGVyZmFj
ZSkpIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkVuY29kZWRKU1ZhbHVl
ICR7Y29uc3RydWN0b3JGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSlcbiIpOworICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiRW5jb2RlZEpTVmFsdWUgJHtjb25zdHJ1Y3RvckZ1bmN0
aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSlcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAie1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHtj
bGFzc05hbWV9KiBkb21PYmplY3QgPSAiIC4gR2V0Q2FzdGluZ0hlbHBlckZvclRoaXNPYmplY3Qo
JGludGVyZmFjZSkgLiAiKEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTtcbiIpOwogICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkVuY29k
ZWRKU1ZhbHVlICR7Y29uc3RydWN0b3JGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSlcbiIpOworICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiRW5jb2RlZEpTVmFsdWUgJHtjb25zdHJ1
Y3RvckZ1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSlcbiIpOwogICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgJHtjbGFzc05hbWV9UHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNDYXN0PCR7
Y2xhc3NOYW1lfVByb3RvdHlwZSo+KGJhc2VWYWx1ZSk7XG4iKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghZG9tT2JqZWN0KVxuIik7Ci0g
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZXhlYyk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSk7XG4iKTsKIAogICAgICAgICAgICAgaWYg
KCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDaGVja1NlY3VyaXR5In0pIHsKICAg
ICAgICAgICAgICAgICBkaWUgaWYgIUNvbnN0cnVjdG9yU2hvdWxkQmVPbkluc3RhbmNlKCRpbnRl
cmZhY2UpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghQmlu
ZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGV4ZWMsIGRvbU9iamVj
dC0+aW1wbCgpKSlcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KHN0YXRl
LCBkb21PYmplY3QtPmltcGwoKSkpXG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIp
OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoISRpbnRlcmZhY2UtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJOb0ludGVyZmFjZU9iamVjdCJ9KSB7Ci0gICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSgke2NsYXNzTmFtZX06
OmdldENvbnN0cnVjdG9yKGV4ZWMtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTtc
biIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoJHtjbGFzc05hbWV9OjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9t
T2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpO1xuIik7CiAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgY29uc3RydWN0b3Ig
PSAke2NsYXNzTmFtZX1Db25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMtPnZtKCksICR7Y2xhc3NOYW1l
fUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgZG9tT2JqZWN0LT5nbG9i
YWxPYmplY3QoKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkp
LCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7
XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIGNv
bnN0cnVjdG9yID0gJHtjbGFzc05hbWV9Q29uc3RydWN0b3I6OmNyZWF0ZShzdGF0ZS0+dm0oKSwg
JHtjbGFzc05hbWV9Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShzdGF0ZS0+dm0oKSwgZG9t
T2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+b2JqZWN0
UHJvdG90eXBlKCkpLCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihkb21PYmplY3QtPmdsb2Jh
bE9iamVjdCgpKSk7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAvLyBTaGFkb3dpbmcgY29uc3RydWN0b3IgcHJvcGVydHkgdG8gZW5zdXJlIHJldXNpbmcgdGhl
IHNhbWUgY29uc3RydWN0b3Igb2JqZWN0XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBkb21PYmplY3QtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGNvbnN0cnVjdG9yLCBEb250RW51bSB8IFJlYWRPbmx5
KTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGRvbU9iamVj
dC0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVj
dG9yLCBjb25zdHJ1Y3RvciwgRG9udEVudW0gfCBSZWFkT25seSk7XG4iKTsKICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0
cnVjdG9yKTtcbiIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJ9XG5cbiIpOwpAQCAtMjQ4NSw3ICsyNDg1LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50
YXRpb24KICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZXBs
YWNlYWJsZUNvbnN0cnVjdG9yIn0pIHsKICAgICAgICAgICAgIG15ICRjb25zdHJ1Y3RvckZ1bmN0
aW9uTmFtZSA9ICJzZXRKUyIgLiAkaW50ZXJmYWNlTmFtZSAuICJDb25zdHJ1Y3RvciI7CiAKLSAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NvbnN0cnVjdG9yRnVuY3Rpb25O
YW1lfShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAidm9pZCAke2NvbnN0cnVjdG9yRnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIHN0
YXRlLCBKU09iamVjdCosIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIp
OwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOyIpOwogICAgICAgICAgICAgaWYgKCRpbnRlcmZh
Y2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Qcm94eVRvSlNPYmplY3QifSkgewpAQCAt
MjQ5NCwxNCArMjQ5NCwxNCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICR7Y2xhc3NOYW1lfSogY2FzdGVkVGhpcyA9
ICIgLiBHZXRDYXN0aW5nSGVscGVyRm9yVGhpc09iamVjdCgkaW50ZXJmYWNlKSAuICIoSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpO1xuIik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7XG4iKTsK
LSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgdGhy
b3dWTVR5cGVFcnJvcihzdGF0ZSk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICAgICByZXR1cm47XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIH1cbiIpOwogICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJDaGVja1NlY3VyaXR5In0pIHsKICAgICAgICAgICAgICAgICBpZiAoJGludGVyZmFjZU5h
bWUgZXEgIkRPTVdpbmRvdyIpIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5k
b3coZXhlYywgY2FzdGVkVGhpcy0+aW1wbCgpKSlcbiIpOworICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dB
Y2Nlc3NUb0RPTVdpbmRvdyhzdGF0ZSwgY2FzdGVkVGhpcy0+aW1wbCgpKSlcbiIpOwogICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIGlmICghc2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKGV4ZWMsIGNhc3RlZFRoaXMtPmlt
cGwoKS5mcmFtZSgpKSlcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBpZiAoIXNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShzdGF0ZSwgY2FzdGVkVGhpcy0+
aW1wbCgpLmZyYW1lKCkpKVxuIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm47XG4iKTsKICAgICAgICAgICAgIH0K
QEAgLTI1MDksNyArMjUwOSw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25z
dHJ1Y3RvclxuIik7CiAKICAgICAgICAgICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2lu
ZG93IikgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGNhc3RlZFRo
aXMtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0
b3IsIHZhbHVlKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IGNhc3RlZFRoaXMtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMo
KS5jb25zdHJ1Y3RvciwgdmFsdWUpO1xuIik7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgIGRpZSAiTm8gd2F5IHRvIGhhbmRsZSBpbnRlcmZhY2Ugd2l0aCBSZXBsYWNlYWJs
ZUNvbnN0cnVjdG9yIGV4dGVuZGVkIGF0dHJpYnV0ZTogJGludGVyZmFjZU5hbWUiOwogICAgICAg
ICAgICAgfQpAQCAtMjUyMSw0NSArMjUyMSw0NSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlv
bgogCiAgICAgaWYgKCRoYXNDdXN0b21TZXR0ZXIpIHsKICAgICAgICAgaWYgKCEkaW50ZXJmYWNl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tUHV0RnVuY3Rpb24ifSkgewotICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6cHV0KEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
c3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYgc2xvdClcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4i
KTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8JHtjbGFzc05hbWV9Kj4oY2VsbCk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTtcbiIpOwogICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJDdXN0b21JbmRleGVkU2V0dGVyIn0pIHsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChw
cm9wZXJ0eU5hbWUpKSB7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAgICAgdGhpc09iamVjdC0+aW5kZXhTZXR0ZXIoZXhlYywgaW5kZXgudmFsdWUoKSwgdmFs
dWUpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHRo
aXNPYmplY3QtPmluZGV4U2V0dGVyKHN0YXRlLCBpbmRleC52YWx1ZSgpLCB2YWx1ZSk7XG4iKTsK
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuO1xuIik7
CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgfVxuIik7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkN1c3RvbU5hbWVkU2V0dGVyIn0pIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBpZiAodGhpc09iamVjdC0+cHV0RGVsZWdhdGUoZXhlYywgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgc2xvdCkpXG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBpZiAodGhpc09iamVjdC0+cHV0RGVsZWdhdGUoc3RhdGUsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IHNsb3QpKVxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAg
IHJldHVybjtcbiIpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1
ZSwgc2xvdCk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEJhc2U6
OnB1dCh0aGlzT2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7XG4iKTsK
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKIAogICAgICAgICAgICAg
aWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21JbmRleGVkU2V0dGVy
In0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVkU2V0dGVy
In0pIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05h
bWV9OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBp
bmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdylcbiIpOworICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnB1dEJ5SW5kZXgoSlND
ZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1
ZSwgYm9vbCBzaG91bGRUaHJvdylcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAie1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOwogICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTtcbiIpOwogCiAgICAgICAgICAgICAgICAgaWYgKCRpbnRl
cmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21JbmRleGVkU2V0dGVyIn0pIHsKICAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKGluZGV4IDw9IE1B
WF9BUlJBWV9JTkRFWCkge1xuIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICAgICB0aGlzT2JqZWN0LT5pbmRleFNldHRlcihleGVjLCBpbmRleCwgdmFsdWUp
O1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICB0
aGlzT2JqZWN0LT5pbmRleFNldHRlcihzdGF0ZSwgaW5kZXgsIHZhbHVlKTtcbiIpOwogICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuO1xuIik7CiAg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwogICAgICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiQ3VzdG9tTmFtZWRTZXR0ZXIifSkgewotICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IElkZW50aWZp
ZXI6OmZyb20oZXhlYywgaW5kZXgpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJv
bShzdGF0ZSwgaW5kZXgpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRoaXNPYmplY3QsIHNob3VsZFRocm93KTtc
biIpOwotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAodGhp
c09iamVjdC0+cHV0RGVsZWdhdGUoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpXG4i
KTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKHRoaXNP
YmplY3QtPnB1dERlbGVnYXRlKHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSlcbiIp
OwogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJu
O1xuIik7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgQmFzZTo6cHV0QnlJbmRleChjZWxsLCBleGVjLCBpbmRleCwgdmFsdWUsIHNo
b3VsZFRocm93KTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IEJhc2U6OnB1dEJ5SW5kZXgoY2VsbCwgc3RhdGUsIGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhyb3cp
O1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CkBAIC0yNTc2LDcgKzI1NzYsNyBAQCBzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgbXkgJGF0dHJpYnV0ZUNvbmRpdGlvbmFsU3RyaW5n
ID0gJGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2lmICR7YXR0cmli
dXRlQ29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkYXR0cmlidXRlQ29uZGl0aW9uYWxTdHJpbmc7
CiAKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke3B1dEZ1bmN0aW9uTmFt
ZX0oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUi
KTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke3B1dEZ1bmN0aW9uTmFt
ZX0oRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVl
Iik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiB0aGlzVmFsdWUiKSBpZiAhJGF0
dHJpYnV0ZS0+aXNTdGF0aWM7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIntcbiIpOwpAQCAtMjU5MSw0NiArMjU5MSw0NiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1l
bnRhdGlvbgogICAgICAgICAgICAgICAgICAgICBpZiAoSW50ZXJmYWNlUmVxdWlyZXNBdHRyaWJ1
dGVzT25JbnN0YW5jZUZvckNvbXBhdGliaWxpdHkoJGludGVyZmFjZSkpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICR7Y2xhc3NOYW1lfSogY2FzdGVk
VGhpc09iamVjdCA9ICIgLiBHZXRDYXN0aW5nSGVscGVyRm9yVGhpc09iamVjdCgkaW50ZXJmYWNl
KSAuICIoSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpO1xuIik7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXNP
YmplY3QpKVxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpleGVjLCBcIiRpbnRlcmZhY2VO
YW1lXCIsIFwiJG5hbWVcIik7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKnN0YXRlLCBc
IiRpbnRlcmZhY2VOYW1lXCIsIFwiJG5hbWVcIik7XG4iKTsKICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFSQU0oZXhlYyk7XG4iKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICR7Y2xhc3NOYW1l
fSogY2FzdGVkVGhpcyA9ICIgLiBHZXRDYXN0aW5nSGVscGVyRm9yVGhpc09iamVjdCgkaW50ZXJm
YWNlKSAuICIoSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpO1xuIik7CiAgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHtcbiIpOwogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAg
aWYgKGpzRHluYW1pY0Nhc3Q8JHtjbGFzc05hbWV9UHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpKVxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpleGVjLCBcIiRpbnRl
cmZhY2VOYW1lXCIsIFwiJG5hbWVcIik7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKnN0
YXRlLCBcIiRpbnRlcmZhY2VOYW1lXCIsIFwiJG5hbWVcIik7XG4iKTsKICAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGVsc2VcbiIpOwotICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVy
cm9yKCpleGVjLCBcIiRpbnRlcmZhY2VOYW1lXCIsIFwiJG5hbWVcIik7XG4iKTsKKyAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICAgICB0aHJvd1NldHRlclR5
cGVFcnJvcigqc3RhdGUsIFwiJGludGVyZmFjZU5hbWVcIiwgXCIkbmFtZVwiKTtcbiIpOwogICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuO1xuIik7
CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICgkaW50ZXJmYWNl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2hlY2tTZWN1cml0eSJ9ICYmICEkYXR0cmlidXRlLT5z
aWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJEb05vdENoZWNrU2VjdXJpdHkifSkgewog
ICAgICAgICAgICAgICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IikgewotICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIUJpbmRpbmdTZWN1
cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhleGVjLCBjYXN0ZWRUaGlzLT5pbXBs
KCkpKVxuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlm
ICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KHN0YXRlLCBj
YXN0ZWRUaGlzLT5pbXBsKCkpKVxuIik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFzaG91bGRBbGxvd0Fj
Y2Vzc1RvRnJhbWUoZXhlYywgY2FzdGVkVGhpcy0+aW1wbCgpLmZyYW1lKCkpKVxuIik7CisgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghc2hvdWxkQWxsb3dB
Y2Nlc3NUb0ZyYW1lKHN0YXRlLCBjYXN0ZWRUaGlzLT5pbXBsKCkuZnJhbWUoKSkpXG4iKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIHJldHVybjtcbiIpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoSGFzQ3Vz
dG9tU2V0dGVyKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKSkgewot
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGNhc3RlZFRoaXMtPnNldCRp
bXBsU2V0dGVyRnVuY3Rpb25OYW1lKGV4ZWMsIHZhbHVlKTtcbiIpOworICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIGNhc3RlZFRoaXMtPnNldCRpbXBsU2V0dGVyRnVuY3Rp
b25OYW1lKHN0YXRlLCB2YWx1ZSk7XG4iKTsKICAgICAgICAgICAgIH0gZWxzaWYgKCR0eXBlIGVx
ICJFdmVudEhhbmRsZXIiKSB7CiAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siSlNFdmVu
dExpc3RlbmVyLmgifSA9IDE7CiAgICAgICAgICAgICAgICAgbXkgJGV2ZW50TmFtZSA9IEV2ZW50
SGFuZGxlckF0dHJpYnV0ZUV2ZW50TmFtZSgkYXR0cmlidXRlKTsKICAgICAgICAgICAgICAgICAj
IEZJWE1FOiBGaW5kIGEgd2F5IHRvIGRvIHRoaXMgc3BlY2lhbCBjYXNlIHdpdGhvdXQgaGFyZGNv
ZGluZyB0aGUgY2xhc3MgYW5kIGF0dHJpYnV0ZSBuYW1lcyBoZXJlLgogICAgICAgICAgICAgICAg
IGlmICgoKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSBvciAoJGludGVyZmFjZU5hbWUg
ZXEgIldvcmtlckdsb2JhbFNjb3BlIikpIGFuZCAkbmFtZSBlcSAib25lcnJvciIpIHsKICAgICAg
ICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siSlNFcnJvckhhbmRsZXIuaCJ9ID0gMTsKLSAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgY2FzdGVkVGhpcy0+aW1w
bCgpLnNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoJGV2ZW50TmFtZSwgY3JlYXRlSlNFcnJvckhh
bmRsZXIoZXhlYywgdmFsdWUsIGNhc3RlZFRoaXMpKTtcbiIpOworICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBjYXN0ZWRUaGlzLT5pbXBsKCkuc2V0QXR0cmlidXRl
RXZlbnRMaXN0ZW5lcigkZXZlbnROYW1lLCBjcmVhdGVKU0Vycm9ySGFuZGxlcihzdGF0ZSwgdmFs
dWUsIGNhc3RlZFRoaXMpKTtcbiIpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IkpTRXZlbnRMaXN0ZW5lci5oIn0gPSAxOwogICAg
ICAgICAgICAgICAgICAgICBteSAkc2V0dGVyID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiV2luZG93RXZlbnRIYW5kbGVyIn0gPyAic2V0V2luZG93RXZlbnRI
YW5kbGVyQXR0cmlidXRlIgogICAgICAgICAgICAgICAgICAgICAgICAgOiAkYXR0cmlidXRlLT5z
aWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJEb2N1bWVudEV2ZW50SGFuZGxlciJ9ID8g
InNldERvY3VtZW50RXZlbnRIYW5kbGVyQXR0cmlidXRlIgogICAgICAgICAgICAgICAgICAgICAg
ICAgOiAic2V0RXZlbnRIYW5kbGVyQXR0cmlidXRlIjsKLSAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgJHNldHRlcigqZXhlYywgKmNhc3RlZFRoaXMsIGNhc3RlZFRo
aXMtPmltcGwoKSwgJGV2ZW50TmFtZSwgdmFsdWUpO1xuIik7CisgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICRzZXR0ZXIoKnN0YXRlLCAqY2FzdGVkVGhpcywgY2Fz
dGVkVGhpcy0+aW1wbCgpLCAkZXZlbnROYW1lLCB2YWx1ZSk7XG4iKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9IGVsc2lmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgPX4g
L0NvbnN0cnVjdG9yJC8pIHsKICAgICAgICAgICAgICAgICBteSAkY29uc3RydWN0b3JUeXBlID0g
JGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlOwpAQCAtMjY0MiwxMCArMjY0MiwxMCBAQCBzdWIg
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICBBZGRUb0ltcGxJbmNs
dWRlcygiSlMiIC4gJGNvbnN0cnVjdG9yVHlwZSAuICIuaCIsICRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbmRpdGlvbmFsIn0pOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAvLyBTaGFkb3dpbmcg
YSBidWlsdC1pbiBjb25zdHJ1Y3Rvci5cbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIGNhc3RlZFRoaXMtPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKGV4ZWMsIFwiJG5hbWVcIiksIHZhbHVlKTtcbiIpOworICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGNhc3RlZFRoaXMtPnB1dERpcmVjdChzdGF0ZS0+
dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgXCIkbmFtZVwiKSwgdmFsdWUpO1xu
Iik7CiAgICAgICAgICAgICB9IGVsc2lmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJSZXBsYWNlYWJsZSJ9KSB7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gb2JqZWN0LlxuIik7Ci0gICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgY2FzdGVkVGhpcy0+cHV0RGlyZWN0
KGV4ZWMtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgXCIkbmFtZVwiKSwgdmFs
dWUpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgY2FzdGVk
VGhpcy0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRl
LCBcIiRuYW1lXCIpLCB2YWx1ZSk7XG4iKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgaWYgKCEkYXR0cmlidXRlLT5pc1N0YXRpYykgewogICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgp
O1xuIik7CkBAIC0yNjYzLDE0ICsyNjYzLDE0IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9u
CiAgICAgICAgICAgICAgICAgICAgIG15ICRhcmdUeXBlID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJl
LT50eXBlOwogICAgICAgICAgICAgICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzV3JhcHBl
clR5cGUoJGFyZ1R5cGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBpZiAoVU5MSUtFTFkoIXZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkgJiYgIXZh
bHVlLmluaGVyaXRzKEpTJHthcmdUeXBlfTo6aW5mbygpKSkpIHtcbiIpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHRocm93QXR0cmlidXRlVHlw
ZUVycm9yKCpleGVjLCBcIiRpbnRlcmZhY2VOYW1lXCIsIFwiJG5hbWVcIiwgXCIkYXJnVHlwZVwi
KTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIHRocm93QXR0cmlidXRlVHlwZUVycm9yKCpzdGF0ZSwgXCIkaW50ZXJmYWNlTmFtZVwiLCBc
IiRuYW1lXCIsIFwiJGFyZ1R5cGVcIik7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm47XG4iKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH07XG4iKTsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICIgLiBHZXROYXRpdmVUeXBlRnJvbVNpZ25hdHVyZSgkYXR0cmlidXRlLT5zaWdu
YXR1cmUpIC4gIiBuYXRpdmVWYWx1ZSA9ICIgLiBKU1ZhbHVlVG9OYXRpdmUoJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlLCAidmFsdWUiLCAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJDb25kaXRpb25hbCJ9KSAuICI7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKVxuIik7
CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpXG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgcmV0dXJuO1xuIik7CiAKICAgICAgICAgICAgICAgICBpZiAoJGNvZGVH
ZW5lcmF0b3ItPklzRW51bVR5cGUoJHR5cGUpKSB7CkBAIC0yNjg1LDcgKzI2ODUsNyBAQCBzdWIg
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogCiAgICAgICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUt
PnNpZ25hdHVyZS0+dHlwZSBlcSAiZG91YmxlIiBvciAkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5
cGUgZXEgImZsb2F0IikgewogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBpZiAoIXN0ZDo6aXNmaW5pdGUobmF0aXZlVmFsdWUpKSB7XG4iKTsKLSAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVj
LCBUeXBlRXJyb3IpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIFR5cGVFcnJvcik7XG4iKTsKICAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybjtcbiIpOwog
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKICAgICAg
ICAgICAgICAgICB9CkBAIC0yNjkzLDcgKzI2OTMsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRh
dGlvbgogICAgICAgICAgICAgICAgIGlmICgkc3ZnUHJvcGVydHlPckxpc3RQcm9wZXJ0eVR5cGUp
IHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCRzdmdQcm9wZXJ0eVR5cGUpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChpbXBsLmlzUmVhZE9u
bHkoKSkge1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VS
Uik7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
ICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUik7
XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAg
ICByZXR1cm47XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIH1cbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siRXhj
ZXB0aW9uQ29kZS5oIn0gPSAxOwpAQCAtMjcwNSw3ICsyNzA1LDcgQEAgc3ViIEdlbmVyYXRlSW1w
bGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIHBvZEltcGwuc2V0JGltcGxTZXR0ZXJGdW5jdGlvbk5hbWUobmF0aXZlVmFsdWUiKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiLCBlYyIpIGlmICRzZXR0
ZXJSYWlzZXNFeGNlcHRpb247CiAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIik7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7XG4iKSBpZiAkc2V0dGVyUmFpc2VzRXhj
ZXB0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
c2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7XG4iKSBpZiAkc2V0dGVyUmFpc2VzRXhjZXB0aW9u
OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmICgkc3ZnUHJv
cGVydHlUeXBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHNldHRlclJhaXNlc0V4
Y2VwdGlvbikgewpAQCAtMjczOCw3ICsyNzM4LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRp
b24KIAogICAgICAgICAgICAgICAgICAgICBwdXNoKEBhcmd1bWVudHMsICJlYyIpIGlmICRzZXR0
ZXJSYWlzZXNFeGNlcHRpb247CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICR7ZnVuY3Rpb25OYW1lfSgiIC4gam9pbigiLCAiLCBAYXJndW1lbnRzKSAuICIpO1xu
Iik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHNldERPTUV4
Y2VwdGlvbihleGVjLCBlYyk7XG4iKSBpZiAkc2V0dGVyUmFpc2VzRXhjZXB0aW9uOworICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBzZXRET01FeGNlcHRpb24oc3Rh
dGUsIGVjKTtcbiIpIGlmICRzZXR0ZXJSYWlzZXNFeGNlcHRpb247CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogCkBAIC0yNzQ5LDEzICsyNzQ5LDEzIEBAIHN1YiBHZW5lcmF0ZUlt
cGxlbWVudGF0aW9uCiAgICAgfQogCiAgICAgaWYgKCRpbmRleGVkR2V0dGVyRnVuY3Rpb24gJiYg
ISRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21FbnVtZXJhdGVQcm9wZXJ0
eSJ9KSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06Omdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpXG4iKTsK
KyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6Z2V0T3duUHJv
cGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5h
bWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpXG4iKTsKICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihvYmplY3QpO1xu
Iik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHRoaXNPYmplY3QtPmltcGwoKS5s
ZW5ndGgoKTsgaSA8IGNvdW50OyArK2kpXG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpO1xu
Iik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEJhc2U6OmdldE93blByb3BlcnR5
TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7XG4iKTsKKyAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZp
ZXI6OmZyb20oc3RhdGUsIGkpKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5h
bWVzLCBtb2RlKTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAg
ICAgfQogCkBAIC0yODE3LDE2ICsyODE3LDE2IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9u
CiAgICAgICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTRE9NUHJvbWlzZS5oIik7CiAK
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInN0YXRpYyBpbmxpbmUgRW5jb2Rl
ZEpTVmFsdWUgJHtmdW5jdGlvbk5hbWV9UHJvbWlzZShFeGVjU3RhdGUqLCBKU1Byb21pc2VEZWZl
cnJlZCopO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7ZnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIGV4ZWMpXG4i
KTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgJHtmdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogc3RhdGUpXG4iKTsKICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogCi0gICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsUHJvbWlz
ZUZ1bmN0aW9uKCpleGVjLCAke2Z1bmN0aW9uTmFtZX1Qcm9taXNlKSk7XG4iKTsKKyAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNh
bGxQcm9taXNlRnVuY3Rpb24oKnN0YXRlLCAke2Z1bmN0aW9uTmFtZX1Qcm9taXNlKSk7XG4iKTsK
IAogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuIik7Ci0gICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbnN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUg
JHtmdW5jdGlvbk5hbWV9UHJvbWlzZShFeGVjU3RhdGUqIGV4ZWMsIEpTUHJvbWlzZURlZmVycmVk
KiBwcm9taXNlRGVmZXJyZWQpXG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIlxuc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSAke2Z1bmN0aW9uTmFtZX1Qcm9taXNl
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQpXG4i
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke2Z1bmN0aW9u
TmFtZX0oRXhlY1N0YXRlKiBleGVjKVxuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7ZnVuY3Rpb25OYW1lfShFeGVj
U3RhdGUqIHN0YXRlKVxuIik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAie1xuIik7CkBAIC0yODM2LDcgKzI4MzYsNyBAQCBzdWIgR2VuZXJhdGVJbXBs
ZW1lbnRhdGlvbgogICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+aXNTdGF0aWMpIHsKICAgICAg
ICAgICAgICAgICBpZiAoJGlzQ3VzdG9tKSB7CiAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRl
QXJndW1lbnRzQ291bnRDaGVjayhcQGltcGxDb250ZW50LCAkZnVuY3Rpb24sICRpbnRlcmZhY2Up
OwotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKCR7Y2xhc3NOYW1lfTo6IiAuICRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFt
ZSAuICIoZXhlYykpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoJHtjbGFzc05hbWV9OjoiIC4gJGZ1bmN0aW9u
SW1wbGVtZW50YXRpb25OYW1lIC4gIihzdGF0ZSkpO1xuIik7CiAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGVBcmd1bWVudHNDb3VudENoZWNrKFxA
aW1wbENvbnRlbnQsICRmdW5jdGlvbiwgJGludGVyZmFjZSk7CiAKQEAgLTI4NTEsMTcgKzI4NTEs
MTcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KIAogICAgICAgICAgICAgICAgIGlmICgk
aW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2hlY2tTZWN1cml0eSJ9IGFuZAogICAg
ICAgICAgICAgICAgICAgICAhJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJEb05vdENoZWNrU2VjdXJpdHkifSkgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NU
b0RPTVdpbmRvdyhleGVjLCBjYXN0ZWRUaGlzLT5pbXBsKCkpKVxuIik7CisgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91
bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KHN0YXRlLCBjYXN0ZWRUaGlzLT5pbXBsKCkpKVxuIik7
CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CiAgICAgICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICAgICAgaWYgKCRpc0N1c3RvbSkgewotICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMt
PiIgLiAkZnVuY3Rpb25JbXBsZW1lbnRhdGlvbk5hbWUgLiAiKGV4ZWMpKTtcbiIpOworICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGNhc3RlZFRoaXMtPiIgLiAkZnVuY3Rpb25JbXBsZW1lbnRhdGlvbk5hbWUgLiAiKHN0YXRl
KSk7XG4iKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpO1xu
Iik7CiAgICAgICAgICAgICAgICAgICAgIGlmICgkc3ZnUHJvcGVydHlUeXBlKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoaW1wbC5pc1JlYWRP
bmx5KCkpIHtcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9F
UlIpO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIp
O1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgfVxuIik7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkc3ZnUHJvcGVydHlUeXBlJiBw
b2RJbXBsID0gaW1wbC5wcm9wZXJ0eVJlZmVyZW5jZSgpO1xuIik7CkBAIC0yODc5LDcgKzI4Nzks
NyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7XG4iKSBpZiAkcmFp
c2VzRXhjZXB0aW9uOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGZ1bmN0aW9uLT5z
aWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDaGVja1NlY3VyaXR5Rm9yTm9kZSJ9KSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYg
KCFzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShleGVjLCBpbXBsLiIgLiAkZnVuY3Rpb24tPnNpZ25h
dHVyZS0+bmFtZSAuICIoIiAuICgkcmFpc2VzRXhjZXB0aW9uID8gImVjIiA6ICIiKSAuIikpKVxu
Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
aWYgKCFzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShzdGF0ZSwgaW1wbC4iIC4gJGZ1bmN0aW9uLT5z
aWduYXR1cmUtPm5hbWUgLiAiKCIgLiAoJHJhaXNlc0V4Y2VwdGlvbiA/ICJlYyIgOiAiIikgLiIp
KSlcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTtcbiIpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IkpTRE9NQmluZGluZy5oIn0gPSAxOwog
ICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMzE1MCwxOSArMzE1MCwxOSBAQCBzdWIgR2Vu
ZXJhdGVGdW5jdGlvbkNhc3RlZFRoaXMKICAgICBteSAkY2xhc3NOYW1lID0gc2hpZnQ7CiAgICAg
bXkgJGZ1bmN0aW9uID0gc2hpZnQ7CiAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJDdXN0b21Qcm94eVRvSlNPYmplY3QifSkgewotICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAkY2xhc3NOYW1lKiBjYXN0ZWRUaGlzID0gdG8ke2NsYXNzTmFtZX0oZXhlYy0+
dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIE5vdFN0cmljdE1vZGUpKTtcbiIpOworICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAkY2xhc3NOYW1lKiBjYXN0ZWRUaGlzID0gdG8ke2NsYXNz
TmFtZX0oc3RhdGUtPnRoaXNWYWx1ZSgpLnRvVGhpcyhzdGF0ZSwgTm90U3RyaWN0TW9kZSkpO1xu
Iik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpXG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGV4ZWMpO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSk7XG4iKTsKICAgICB9IGVsc2lm
ICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiV29ya2VyR2xvYmFsU2NvcGUifSkg
ewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkY2xhc3NOYW1lKiBjYXN0ZWRUaGlz
ID0gdG8ke2NsYXNzTmFtZX0oZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIE5vdFN0cmlj
dE1vZGUpKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkY2xhc3NOYW1l
KiBjYXN0ZWRUaGlzID0gdG8ke2NsYXNzTmFtZX0oc3RhdGUtPnRoaXNWYWx1ZSgpLnRvVGhpcyhz
dGF0ZSwgTm90U3RyaWN0TW9kZSkpO1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpXG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpO1xuIik7CisgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihz
dGF0ZSk7XG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpO1xuIik7CisgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1
ZSgpO1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRjbGFzc05hbWUqIGNh
c3RlZFRoaXMgPSAiIC4gR2V0Q2FzdGluZ0hlbHBlckZvclRoaXNPYmplY3QoJGludGVyZmFjZSkg
LiAiKHRoaXNWYWx1ZSk7XG4iKTsKICAgICAgICAgbXkgJGRvbUZ1bmN0aW9uTmFtZSA9ICRmdW5j
dGlvbi0+c2lnbmF0dXJlLT5uYW1lOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKVxuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCBcIiRpbnRlcmZhY2VO
YW1lXCIsIFwiJGRvbUZ1bmN0aW9uTmFtZVwiKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsIFwiJGludGVy
ZmFjZU5hbWVcIiwgXCIkZG9tRnVuY3Rpb25OYW1lXCIpO1xuIik7CiAgICAgfQogCiAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlz
LCAke2NsYXNzTmFtZX06OmluZm8oKSk7XG4iKTsKQEAgLTMxNzcsMjEgKzMxNzcsMjEgQEAgc3Vi
IEdlbmVyYXRlQ2FsbFdpdGgKICAgICBteSAkZnVuY3Rpb24gPSBzaGlmdDsKIAogICAgIG15IEBj
YWxsV2l0aEFyZ3M7Ci0gICAgcHVzaChAY2FsbFdpdGhBcmdzLCAiZXhlYyIpIGlmICRjb2RlR2Vu
ZXJhdG9yLT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRhaW5zKCRjYWxsV2l0aCwgIlNjcmlwdFN0YXRl
Iik7CisgICAgcHVzaChAY2FsbFdpdGhBcmdzLCAiKnN0YXRlIikgaWYgJGNvZGVHZW5lcmF0b3It
PkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGNhbGxXaXRoLCAiU2NyaXB0U3RhdGUiKTsKICAg
ICBpZiAoJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGNhbGxXaXRo
LCAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dCIpKSB7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICBhdXRvKiBzY3JpcHRDb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpO1xu
Iik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvKiBzY3JpcHRDb250ZXh0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTtcbiIpOwogICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgaWYgKCFzY3JpcHRDb250ZXh0KVxuIik7CiAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICAgICAgcmV0dXJuIiAuICgkcmV0dXJuVmFsdWUgPyAiICIgLiAkcmV0dXJu
VmFsdWUgOiAiIikgLiAiO1xuIik7CiAgICAgICAgIHB1c2goQGNhbGxXaXRoQXJncywgInNjcmlw
dENvbnRleHQiKTsKICAgICB9CiAgICAgaWYgKCRmdW5jdGlvbiBhbmQgJGNvZGVHZW5lcmF0b3It
PkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGNhbGxXaXRoLCAiU2NyaXB0QXJndW1lbnRzIikp
IHsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFJlZlB0cjxJbnNwZWN0b3I6OlNj
cmlwdEFyZ3VtZW50cz4gc2NyaXB0QXJndW1lbnRzKEluc3BlY3Rvcjo6Y3JlYXRlU2NyaXB0QXJn
dW1lbnRzKGV4ZWMsICIgLiBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30gLiAiKSk7XG4iKTsKKyAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFy
Z3VtZW50cz4gc2NyaXB0QXJndW1lbnRzKEluc3BlY3Rvcjo6Y3JlYXRlU2NyaXB0QXJndW1lbnRz
KHN0YXRlLCAiIC4gQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9IC4gIikpO1xuIik7CiAgICAgICAg
ICRpbXBsSW5jbHVkZXN7IjxpbnNwZWN0b3IvU2NyaXB0QXJndW1lbnRzLmg+In0gPSAxOwogICAg
ICAgICAkaW1wbEluY2x1ZGVzeyI8aW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuaD4i
fSA9IDE7CiAgICAgICAgIHB1c2goQGNhbGxXaXRoQXJncywgInNjcmlwdEFyZ3VtZW50cy5yZWxl
YXNlKCkiKTsKICAgICB9Ci0gICAgcHVzaChAY2FsbFdpdGhBcmdzLCAiYWN0aXZlRE9NV2luZG93
KGV4ZWMpIikgaWYgJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGNh
bGxXaXRoLCAiQWN0aXZlV2luZG93Iik7Ci0gICAgcHVzaChAY2FsbFdpdGhBcmdzLCAiZmlyc3RE
T01XaW5kb3coZXhlYykiKSBpZiAkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250
YWlucygkY2FsbFdpdGgsICJGaXJzdFdpbmRvdyIpOworICAgIHB1c2goQGNhbGxXaXRoQXJncywg
ImFjdGl2ZURPTVdpbmRvdyhzdGF0ZSkiKSBpZiAkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRy
aWJ1dGVDb250YWlucygkY2FsbFdpdGgsICJBY3RpdmVXaW5kb3ciKTsKKyAgICBwdXNoKEBjYWxs
V2l0aEFyZ3MsICJmaXJzdERPTVdpbmRvdyhzdGF0ZSkiKSBpZiAkY29kZUdlbmVyYXRvci0+RXh0
ZW5kZWRBdHRyaWJ1dGVDb250YWlucygkY2FsbFdpdGgsICJGaXJzdFdpbmRvdyIpOwogCiAgICAg
cmV0dXJuIEBjYWxsV2l0aEFyZ3M7CiB9CkBAIC0zMjEyLDggKzMyMTIsOCBAQCBzdWIgR2VuZXJh
dGVBcmd1bWVudHNDb3VudENoZWNrCiAgICAgfQogICAgIGlmICgkbnVtTWFuZGF0b3J5UGFyYW1z
ID49IDEpCiAgICAgewotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKFVOTElL
RUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8ICRudW1NYW5kYXRvcnlQYXJhbXMpKVxuIik7Ci0g
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7XG4iKTsKKyAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpIDwgJG51bU1hbmRhdG9yeVBhcmFtcykpXG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihzdGF0ZSkpO1xuIik7CiAgICAgfQogfQogCkBAIC0zMjcwLDcgKzMyNzAs
NyBAQCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKICAgICAgICAgaWYgKCRvcHRpb25hbCAm
JiAhJGRlZmF1bHRBdHRyaWJ1dGUgJiYgJGFyZ1R5cGUgbmUgIkRpY3Rpb25hcnkiICYmICEkY29k
ZUdlbmVyYXRvci0+SXNDYWxsYmFja0ludGVyZmFjZSgkcGFyYW1ldGVyLT50eXBlKSkgewogICAg
ICAgICAgICAgIyBHZW5lcmF0ZSBlYXJseSBjYWxsIGlmIHRoZXJlIGFyZSBlbm91Z2ggcGFyYW1l
dGVycy4KICAgICAgICAgICAgIGlmICghJGhhc09wdGlvbmFsQXJndW1lbnRzKSB7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiXG4gICAgc2l6ZV90IGFyZ3NDb3VudCA9IGV4
ZWMtPmFyZ3VtZW50Q291bnQoKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIlxuICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGF0ZS0+YXJndW1lbnRDb3VudCgpO1xu
Iik7CiAgICAgICAgICAgICAgICAgJGhhc09wdGlvbmFsQXJndW1lbnRzID0gMTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoYXJnc0NvdW50
IDw9ICRhcmdzSW5kZXgpIHtcbiIpOwpAQCAtMzI4NiwxMCArMzI4NiwxMCBAQCBzdWIgR2VuZXJh
dGVQYXJhbWV0ZXJzQ2hlY2sKIAogICAgICAgICBpZiAoJGFyZ1R5cGUgZXEgIlhQYXRoTlNSZXNv
bHZlciIpIHsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBSZWZQdHI8WFBh
dGhOU1Jlc29sdmVyPiBjdXN0b21SZXNvbHZlcjtcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIFhQYXRoTlNSZXNvbHZlciogcmVzb2x2ZXIgPSBKU1hQYXRoTlNSZXNv
bHZlcjo6dG9XcmFwcGVkKGV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpKTtcbiIpOworICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFhQYXRoTlNSZXNvbHZlciogcmVzb2x2ZXIg
PSBKU1hQYXRoTlNSZXNvbHZlcjo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgkYXJnc0luZGV4
KSk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoIXJlc29s
dmVyKSB7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgY3Vz
dG9tUmVzb2x2ZXIgPSBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6Y3JlYXRlKGV4ZWMsIGV4ZWMt
PmFyZ3VtZW50KCRhcmdzSW5kZXgpKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKVxuIik7Cisg
ICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIGN1c3RvbVJlc29sdmVyID0g
SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6OmNyZWF0ZShzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KCRh
cmdzSW5kZXgpKTtcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSlcbiIpOwogICAgICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
ICAgICByZXNvbHZlciA9IGN1c3RvbVJlc29sdmVyLmdldCgpO1xuIik7CiAgICAgICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgfVxuIik7CkBAIC0zMjk4LDM5ICszMjk4LDM5IEBAIHN1
YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siJGNh
bGxiYWNrQ2xhc3NOYW1lLmgifSA9IDE7CiAgICAgICAgICAgICBpZiAoJG9wdGlvbmFsKSB7CiAg
ICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFJlZlB0cjwkYXJnVHlwZT4g
JG5hbWU7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYg
KCFleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7XG4iKTsK
KyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKCFzdGF0ZS0+YXJn
dW1lbnQoJGFyZ3NJbmRleCkuaXNVbmRlZmluZWRPck51bGwoKSkge1xuIik7CiAgICAgICAgICAg
ICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc0Z1bmN0aW9uT25seUNhbGxiYWNrSW50ZXJmYWNl
KCRwYXJhbWV0ZXItPnR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICAgICAgaWYgKCFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgkYXJnc0luZGV4KS5p
c0Z1bmN0aW9uKCkpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgICAgICBpZiAoIXN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgkYXJnc0luZGV4KS5pc0Z1
bmN0aW9uKCkpXG4iKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIGlmICghZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoJGFyZ3NJbmRleCkuaXNPYmplY3QoKSlcbiIpOworICAgICAgICAgICAgICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIGlmICghc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KCRhcmdzSW5kZXgpLmlzT2JqZWN0KCkpXG4iKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICAgICAgcmV0dXJuIHRocm93QXJn
dW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpleGVjLCAkYXJnc0luZGV4LCBcIiRuYW1lXCIsIFwi
JGludGVyZmFjZU5hbWVcIiwgJHF1b3RlZEZ1bmN0aW9uTmFtZSk7XG4iKTsKKyAgICAgICAgICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVu
dE11c3RCZUZ1bmN0aW9uRXJyb3IoKnN0YXRlLCAkYXJnc0luZGV4LCBcIiRuYW1lXCIsIFwiJGlu
dGVyZmFjZU5hbWVcIiwgJHF1b3RlZEZ1bmN0aW9uTmFtZSk7XG4iKTsKICAgICAgICAgICAgICAg
ICBpZiAoJGZ1bmN0aW9uLT5pc1N0YXRpYykgewogICAgICAgICAgICAgICAgICAgICBBZGRUb0lt
cGxJbmNsdWRlcygiQ2FsbGJhY2tGdW5jdGlvbi5oIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgJG5hbWUgPSBjcmVhdGVGdW5jdGlvbk9ubHlDYWxs
YmFjazwke2NhbGxiYWNrQ2xhc3NOYW1lfT4oZXhlYywganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSwgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQo
JGFyZ3NJbmRleCkpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICAgICAgJG5hbWUgPSBjcmVhdGVGdW5jdGlvbk9ubHlDYWxsYmFjazwke2NhbGxiYWNr
Q2xhc3NOYW1lfT4oc3RhdGUsIGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCkpLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoJGFyZ3NJbmRleCkp
O1xuIik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgICAgICAkbmFtZSA9ICR7Y2FsbGJhY2tDbGFzc05hbWV9Ojpj
cmVhdGUoYXNPYmplY3QoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoJGFyZ3NJbmRleCkpLCBjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgICAgICAkbmFtZSA9ICR7Y2FsbGJhY2tDbGFzc05hbWV9OjpjcmVh
dGUoYXNPYmplY3Qoc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KCRhcmdzSW5kZXgpKSwgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCkpO1xuIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB9XG4iKTsKICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc0Z1bmN0aW9uT25seUNh
bGxiYWNrSW50ZXJmYWNlKCRwYXJhbWV0ZXItPnR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgp
LmlzRnVuY3Rpb24oKSlcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgaWYgKCFzdGF0ZS0+YXJndW1lbnQoJGFyZ3NJbmRleCkuaXNGdW5jdGlvbigpKVxu
Iik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIGlmICghZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkuaXNPYmpl
Y3QoKSlcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
aWYgKCFzdGF0ZS0+YXJndW1lbnQoJGFyZ3NJbmRleCkuaXNPYmplY3QoKSlcbiIpOwogICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAg
IHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcigqZXhlYywgJGFyZ3NJbmRl
eCwgXCIkbmFtZVwiLCBcIiRpbnRlcmZhY2VOYW1lXCIsICRxdW90ZWRGdW5jdGlvbk5hbWUpO1xu
Iik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4g
dGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IoKnN0YXRlLCAkYXJnc0luZGV4LCBcIiRu
YW1lXCIsIFwiJGludGVyZmFjZU5hbWVcIiwgJHF1b3RlZEZ1bmN0aW9uTmFtZSk7XG4iKTsKICAg
ICAgICAgICAgICAgICBpZiAoJGZ1bmN0aW9uLT5pc1N0YXRpYykgewogICAgICAgICAgICAgICAg
ICAgICBBZGRUb0ltcGxJbmNsdWRlcygiQ2FsbGJhY2tGdW5jdGlvbi5oIik7Ci0gICAgICAgICAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBSZWZQdHI8JGFyZ1R5cGU+ICRuYW1l
ID0gY3JlYXRlRnVuY3Rpb25Pbmx5Q2FsbGJhY2s8JHtjYWxsYmFja0NsYXNzTmFtZX0+KGV4ZWMs
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSks
IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KCRhcmdzSW5kZXgpKTtcbiIpOworICAgICAgICAgICAg
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgUmVmUHRyPCRhcmdUeXBlPiAkbmFtZSA9
IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPCR7Y2FsbGJhY2tDbGFzc05hbWV9PihzdGF0ZSwg
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSks
IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgkYXJnc0luZGV4KSk7XG4iKTsKICAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgUmVmUHRyPCRhcmdUeXBlPiAkbmFtZSA9ICR7Y2FsbGJhY2tDbGFzc05hbWV9OjpjcmVhdGUo
YXNPYmplY3QoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoJGFyZ3NJbmRleCkpLCBjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIFJlZlB0cjwkYXJnVHlwZT4gJG5hbWUgPSAke2NhbGxiYWNrQ2xhc3NOYW1l
fTo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgkYXJnc0luZGV4KSks
IGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTtcbiIpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KICAgICAgICAgfSBlbHNpZiAoJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkNsYW1wIn0pIHsKICAgICAgICAgICAgIG15ICRuYXRpdmVWYWx1ZSA9ICIke25hbWV9
TmF0aXZlVmFsdWUiOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICRhcmdU
eXBlICRuYW1lID0gMDtcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IGRvdWJsZSAkbmF0aXZlVmFsdWUgPSBleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KS50b051bWJl
cihleGVjKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChV
TkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICBkb3VibGUgJG5hdGl2ZVZhbHVlID0gc3RhdGUtPmFyZ3VtZW50KCRh
cmdzSW5kZXgpLnRvTnVtYmVyKHN0YXRlKTtcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKVxuIik7CiAg
ICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7XG5cbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIGlmICghc3RkOjppc25hbigkbmF0aXZlVmFsdWUpKVxuIik7CiAgICAgICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgICRuYW1lID0gY2xhbXBUbzwkYXJnVHlwZT4o
JG5hdGl2ZVZhbHVlKTtcblxuIik7CkBAIC0zMzQ0LDI3ICszMzQ0LDI3IEBAIHN1YiBHZW5lcmF0
ZVBhcmFtZXRlcnNDaGVjawogCiAgICAgICAgICAgICBpZiAoIUlzTmF0aXZlVHlwZSgkYXJnVHlw
ZSkpIHsKICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgVmVjdG9yPCRu
YXRpdmVFbGVtZW50VHlwZT4gJG5hbWU7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgZm9yICh1bnNpZ25lZCBpID0gJGFyZ3NJbmRleCwgY291bnQgPSBleGVj
LT5hcmd1bWVudENvdW50KCk7IGkgPCBjb3VudDsgKytpKSB7XG4iKTsKLSAgICAgICAgICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIGlmICghZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoaSkuaW5oZXJpdHMoSlMke2FyZ1R5cGV9OjppbmZvKCkpKVxuIik7Ci0gICAgICAgICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRU
eXBlRXJyb3IoKmV4ZWMsIGksIFwiJG5hbWVcIiwgXCIkaW50ZXJmYWNlTmFtZVwiLCAkcXVvdGVk
RnVuY3Rpb25OYW1lLCBcIiRhcmdUeXBlXCIpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgICAgICAkbmFtZS5hcHBlbmQoSlMke2FyZ1R5cGV9Ojp0b1dyYXBw
ZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoaSkpKTtcbiIpOworICAgICAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICBmb3IgKHVuc2lnbmVkIGkgPSAkYXJnc0luZGV4LCBjb3Vu
dCA9IHN0YXRlLT5hcmd1bWVudENvdW50KCk7IGkgPCBjb3VudDsgKytpKSB7XG4iKTsKKyAgICAg
ICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIGlmICghc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KGkpLmluaGVyaXRzKEpTJHthcmdUeXBlfTo6aW5mbygpKSlcbiIpOworICAg
ICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgICAgIHJldHVybiB0aHJv
d0FyZ3VtZW50VHlwZUVycm9yKCpzdGF0ZSwgaSwgXCIkbmFtZVwiLCBcIiRpbnRlcmZhY2VOYW1l
XCIsICRxdW90ZWRGdW5jdGlvbk5hbWUsIFwiJGFyZ1R5cGVcIik7XG4iKTsKKyAgICAgICAgICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgICRuYW1lLmFwcGVuZChKUyR7YXJnVHlw
ZX06OnRvV3JhcHBlZChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoaSkpKTtcbiIpOwogICAgICAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB9XG4iKQogICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgVmVjdG9yPCRu
YXRpdmVFbGVtZW50VHlwZT4gJG5hbWUgPSB0b05hdGl2ZUFyZ3VtZW50czwkbmF0aXZlRWxlbWVu
dFR5cGU+KGV4ZWMsICRhcmdzSW5kZXgpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIFZlY3RvcjwkbmF0aXZlRWxlbWVudFR5cGU+ICRuYW1lID0gdG9OYXRp
dmVBcmd1bWVudHM8JG5hdGl2ZUVsZW1lbnRUeXBlPihzdGF0ZSwgJGFyZ3NJbmRleCk7XG4iKTsK
ICAgICAgICAgICAgICAgICAjIENoZWNrIGlmIHRoZSB0eXBlIGNvbnZlcnNpb24gc3VjY2VlZGVk
LgotICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoVU5MSUtFTFko
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpKVxuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKVxuIik7CiAg
ICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAg
fSBlbHNpZiAoJGNvZGVHZW5lcmF0b3ItPklzRW51bVR5cGUoJGFyZ1R5cGUpKSB7CiAgICAgICAg
ICAgICAkaW1wbEluY2x1ZGVzeyI8cnVudGltZS9FcnJvci5oPiJ9ID0gMTsKIAotICAgICAgICAg
ICAgbXkgJGFyZ1ZhbHVlID0gImV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpIjsKKyAgICAgICAg
ICAgIG15ICRhcmdWYWx1ZSA9ICJzdGF0ZS0+YXJndW1lbnQoJGFyZ3NJbmRleCkiOwogICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIC8vIEtlZXAgcG9pbnRlciB0byB0aGUgSlNT
dHJpbmcgaW4gYSBsb2NhbCBzbyB3ZSBkb24ndCBuZWVkIHRvIHJlZiB0aGUgU3RyaW5nLlxuIik7
Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byogJHtuYW1lfVN0cmlu
ZyA9ICR7YXJnVmFsdWV9LnRvU3RyaW5nKGV4ZWMpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSlcbiIp
OworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8qICR7bmFtZX1TdHJp
bmcgPSAke2FyZ1ZhbHVlfS50b1N0cmluZyhzdGF0ZSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSlc
biIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgYXV0byYgJG5hbWUgPSAke25hbWV9U3RyaW5nLT52YWx1ZShleGVjKTtc
biIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8mICRuYW1lID0g
JHtuYW1lfVN0cmluZy0+dmFsdWUoc3RhdGUpO1xuIik7CiAKICAgICAgICAgICAgIG15IEBlbnVt
VmFsdWVzID0gJGNvZGVHZW5lcmF0b3ItPlZhbGlkRW51bVZhbHVlcygkYXJnVHlwZSk7CiAgICAg
ICAgICAgICBteSBAZW51bUNoZWNrcyA9ICgpOwpAQCAtMzM3OCw3ICszMzc4LDcgQEAgc3ViIEdl
bmVyYXRlUGFyYW1ldGVyc0NoZWNrCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgcHVzaCAoQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoIiAuIGpvaW4oIiAmJiAi
LCBAZW51bUNoZWNrcykgLiAiKVxuIik7Ci0gICAgICAgICAgICBwdXNoIChAJG91dHB1dEFycmF5
LCAiICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUVudW1FcnJvcigqZXhlYywgJGFy
Z3NJbmRleCwgXCIkbmFtZVwiLCBcIiRpbnRlcmZhY2VOYW1lXCIsICRxdW90ZWRGdW5jdGlvbk5h
bWUsIFwiJGVudW1zXCIpO1xuIik7CisgICAgICAgICAgICBwdXNoIChAJG91dHB1dEFycmF5LCAi
ICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUVudW1FcnJvcigqc3RhdGUsICRhcmdz
SW5kZXgsIFwiJG5hbWVcIiwgXCIkaW50ZXJmYWNlTmFtZVwiLCAkcXVvdGVkRnVuY3Rpb25OYW1l
LCBcIiRlbnVtc1wiKTtcbiIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIyBJZiB0
aGUgIlN0cmljdFR5cGVDaGVja2luZyIgZXh0ZW5kZWQgYXR0cmlidXRlIGlzIHByZXNlbnQsIGFu
ZCB0aGUgYXJndW1lbnQncyB0eXBlIGlzIGFuCiAgICAgICAgICAgICAjIGludGVyZmFjZSB0eXBl
LCB0aGVuIGlmIHRoZSBpbmNvbWluZyB2YWx1ZSBkb2VzIG5vdCBpbXBsZW1lbnQgdGhhdCBpbnRl
cmZhY2UsIGEgVHlwZUVycm9yCkBAIC0zMzg4LDQ4ICszMzg4LDQ4IEBAIHN1YiBHZW5lcmF0ZVBh
cmFtZXRlcnNDaGVjawogICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiU3RyaWN0VHlwZUNoZWNraW5nIn0pIHsKICAgICAgICAgICAgICAg
ICAkaW1wbEluY2x1ZGVzeyI8cnVudGltZS9FcnJvci5oPiJ9ID0gMTsKIAotICAgICAgICAgICAg
ICAgIG15ICRhcmdWYWx1ZSA9ICJleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KSI7CisgICAgICAg
ICAgICAgICAgbXkgJGFyZ1ZhbHVlID0gInN0YXRlLT5hcmd1bWVudCgkYXJnc0luZGV4KSI7CiAg
ICAgICAgICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1dyYXBwZXJUeXBlKCRhcmdUeXBl
KSkgewogICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKCEk
e2FyZ1ZhbHVlfS5pc1VuZGVmaW5lZE9yTnVsbCgpICYmICEke2FyZ1ZhbHVlfS5pbmhlcml0cyhK
UyR7YXJnVHlwZX06OmluZm8oKSkpXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJvcigqZXhlYywg
JGFyZ3NJbmRleCwgXCIkbmFtZVwiLCBcIiRpbnRlcmZhY2VOYW1lXCIsICRxdW90ZWRGdW5jdGlv
bk5hbWUsIFwiJGFyZ1R5cGVcIik7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJvcigqc3RhdGUs
ICRhcmdzSW5kZXgsIFwiJG5hbWVcIiwgXCIkaW50ZXJmYWNlTmFtZVwiLCAkcXVvdGVkRnVuY3Rp
b25OYW1lLCBcIiRhcmdUeXBlXCIpO1xuIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICBpZiAoJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IlJlcXVpcmVzRXhpc3RpbmdBdG9taWNTdHJpbmcifSkgewogICAgICAgICAgICAgICAgICMgRklY
TUU6IFRoaXMgY291bGQgYmUgbWFkZSBzbGlnaHRseSBtb3JlIGVmZmljaWVudCBpZiB3ZSBhZGRl
ZCBhbiBBdG9taWNTdHJpbmcoUmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+JiYpIGNvbnN0cnVjdG9y
IGFuZCByZW1vdmVkIHRoZSBjYWxsIHRvIGdldCgpIGhlcmUuCi0gICAgICAgICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIEF0b21pY1N0cmluZyAkbmFtZSA9IGV4ZWMtPmFyZ3VtZW50
KCRhcmdzSW5kZXgpLnRvU3RyaW5nKGV4ZWMpLT50b0V4aXN0aW5nQXRvbWljU3RyaW5nKGV4ZWMp
LmdldCgpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEF0
b21pY1N0cmluZyAkbmFtZSA9IHN0YXRlLT5hcmd1bWVudCgkYXJnc0luZGV4KS50b1N0cmluZyhz
dGF0ZSktPnRvRXhpc3RpbmdBdG9taWNTdHJpbmcoc3RhdGUpLmdldCgpO1xuIik7CiAgICAgICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmICgkbmFtZS5pc051bGwoKSlcbiIp
OwogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bGwoKSk7XG4iKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgbXkgJG91dGVyOwogICAgICAgICAgICAgICAgIG15ICRpbm5lcjsKICAgICAg
ICAgICAgICAgICBpZiAoJG9wdGlvbmFsICYmICRkZWZhdWx0QXR0cmlidXRlICYmICRkZWZhdWx0
QXR0cmlidXRlIGVxICJOdWxsU3RyaW5nIikgewotICAgICAgICAgICAgICAgICAgICAkb3V0ZXIg
PSAiZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkuaXNVbmRlZmluZWQoKSA/IFN0cmluZygpIDog
IjsKLSAgICAgICAgICAgICAgICAgICAgJGlubmVyID0gImV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KCRhcmdzSW5kZXgpIjsKKyAgICAgICAgICAgICAgICAgICAgJG91dGVyID0gInN0YXRlLT5hcmd1
bWVudCgkYXJnc0luZGV4KS5pc1VuZGVmaW5lZCgpID8gU3RyaW5nKCkgOiAiOworICAgICAgICAg
ICAgICAgICAgICAkaW5uZXIgPSAic3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KCRhcmdzSW5kZXgp
IjsKICAgICAgICAgICAgICAgICB9IGVsc2lmICgkb3B0aW9uYWwgJiYgJHBhcmFtZXRlci0+ZGVm
YXVsdCkgewotICAgICAgICAgICAgICAgICAgICAkb3V0ZXIgPSAiZXhlYy0+YXJndW1lbnQoJGFy
Z3NJbmRleCkuaXNVbmRlZmluZWQoKSA/ICIgLiAkcGFyYW1ldGVyLT5kZWZhdWx0ICAuICIgOiAi
OwotICAgICAgICAgICAgICAgICAgICAkaW5uZXIgPSAiZXhlYy0+dW5jaGVja2VkQXJndW1lbnQo
JGFyZ3NJbmRleCkiOworICAgICAgICAgICAgICAgICAgICAkb3V0ZXIgPSAic3RhdGUtPmFyZ3Vt
ZW50KCRhcmdzSW5kZXgpLmlzVW5kZWZpbmVkKCkgPyAiIC4gJHBhcmFtZXRlci0+ZGVmYXVsdCAg
LiAiIDogIjsKKyAgICAgICAgICAgICAgICAgICAgJGlubmVyID0gInN0YXRlLT51bmNoZWNrZWRB
cmd1bWVudCgkYXJnc0luZGV4KSI7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgJG91dGVyID0gIiI7Ci0gICAgICAgICAgICAgICAgICAgICRpbm5lciA9ICJl
eGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KSI7CisgICAgICAgICAgICAgICAgICAgICRpbm5lciA9
ICJzdGF0ZS0+YXJndW1lbnQoJGFyZ3NJbmRleCkiOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgIiAuIEdldE5hdGl2ZVR5cGVGcm9t
U2lnbmF0dXJlKCRwYXJhbWV0ZXIpIC4gIiAkbmFtZSA9ICRvdXRlciIgLiBKU1ZhbHVlVG9OYXRp
dmUoJHBhcmFtZXRlciwgJGlubmVyLCAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkNvbmRpdGlvbmFsIn0pIC4gIjtcbiIpOwogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICAjIENoZWNrIGlmIHRoZSB0eXBlIGNvbnZlcnNpb24gc3VjY2VlZGVkLgotICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNl
cHRpb24oKSkpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSlcbiIpOwogICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpO1xuIik7CiAKICAgICAgICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNTVkdUeXBlTmVl
ZGluZ1RlYXJPZmYoJGFyZ1R5cGUpIGFuZCBub3QgJGludGVyZmFjZU5hbWUgPX4gL0xpc3QkLykg
ewogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoISRuYW1lKSB7
XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7XG4iKTsKKyAgICAgICAgICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgVFlQ
RV9NSVNNQVRDSF9FUlIpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CiAg
ICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIH1cbiIpOwogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICBpZiAoJHBhcmFtZXRlci0+dHlwZSBlcSAiZG91YmxlIiBvciAk
cGFyYW1ldGVyLT50eXBlIGVxICJmbG9hdCIpIHsKICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgaWYgKCFzdGQ6OmlzZmluaXRlKCRuYW1lKSkge1xuIik7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBzZXRET01FeGNlcHRpb24oZXhl
YywgVHlwZUVycm9yKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBUeXBlRXJyb3IpO1xuIik7CiAgICAgICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIH1cbiIpOwogICAgICAgICAgICAgfQpAQCAtMzQ1NSw3ICszNDU1LDcgQEAgc3Vi
IEdlbmVyYXRlUmV0dXJuUGFyYW1ldGVycwogICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0OwogICAg
IG15IEBhcmd1bWVudHM7CiAKLSAgICBwdXNoKEBhcmd1bWVudHMsICJEZWZlcnJlZFdyYXBwZXIo
ZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCkiKSBpZiBJ
c1JldHVybmluZ1Byb21pc2UoJGZ1bmN0aW9uKTsKKyAgICBwdXNoKEBhcmd1bWVudHMsICJEZWZl
cnJlZFdyYXBwZXIoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVm
ZXJyZWQpIikgaWYgSXNSZXR1cm5pbmdQcm9taXNlKCRmdW5jdGlvbik7CiAgICAgcHVzaChAYXJn
dW1lbnRzLCAiZWMiKSBpZiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IlJhaXNlc0V4Y2VwdGlvbiJ9OwogICAgIHJldHVybiBAYXJndW1lbnRzOwogfQpAQCAtMzUz
Nyw3ICszNTM3LDcgQEAgc3ViIEdlbmVyYXRlQ2FsbGJhY2tIZWFkZXIKIAogICAgICMgdG9KUygp
LgogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgJGludGVyZmFjZU5hbWUqKTtcbiIpOwotICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICJpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsICRpbnRlcmZhY2VOYW1l
JiBpbXBsKSB7IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgJmltcGwpOyB9XG5cbiIp
OworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCAkaW50
ZXJmYWNlTmFtZSYgaW1wbCkgeyByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAmaW1w
bCk7IH1cblxuIik7CiAKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAifSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZVxuXG4iKTsKICAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRv
ci0+R2VuZXJhdGVDb25kaXRpb25hbFN0cmluZygkaW50ZXJmYWNlKTsKQEAgLTM2NzcsNyArMzY3
Nyw3IEBAIHN1YiBHZW5lcmF0ZUNhbGxiYWNrSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcblxuIik7CiAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBSZWY8JGNsYXNzTmFtZT4gcHJvdGVjdCgqdGhpcyk7
XG5cbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNMb2NrSG9sZGVy
IGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+dm0oKSk7XG5cbiIpOwotICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBFeGVjU3RhdGUqIHN0YXRlID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RXhlYygpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBNYXJrZWRB
cmd1bWVudEJ1ZmZlciBhcmdzO1xuIik7CiAKICAgICAgICAgICAgIGZvcmVhY2ggbXkgJHBhcmFt
IChAcGFyYW1zKSB7CkBAIC0zNjg3LDE0ICszNjg3LDE0IEBAIHN1YiBHZW5lcmF0ZUNhbGxiYWNr
SW1wbGVtZW50YXRpb24KIAogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiAgICBO
YWtlZFB0cjxFeGNlcHRpb24+IHJldHVybmVkRXhjZXB0aW9uO1xuIik7CiAKLSAgICAgICAgICAg
IG15ICRwcm9wZXJ0eVRvTG9va3VwID0gIklkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgXCIk
e2Z1bmN0aW9uTmFtZX1cIikiOworICAgICAgICAgICAgbXkgJHByb3BlcnR5VG9Mb29rdXAgPSAi
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgXCIke2Z1bmN0aW9uTmFtZX1cIikiOwogICAg
ICAgICAgICAgbXkgJGludm9rZU1ldGhvZCA9ICJKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBl
OjpGdW5jdGlvbk9yT2JqZWN0IjsKICAgICAgICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+RXh0
ZW5kZWRBdHRyaWJ1dGVDb250YWlucygkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
Q2FsbGJhY2sifSwgIkZ1bmN0aW9uT25seSIpKSB7CiAgICAgICAgICAgICAgICAgIyBGb3IgY2Fs
bGJhY2sgZnVuY3Rpb25zLCBkbyBub3QgbG9vayB1cCBjYWxsYWJsZSBwcm9wZXJ0eSBvbiB0aGUg
dXNlciBvYmplY3QuCiAgICAgICAgICAgICAgICAgIyBodHRwczovL2hleWNhbS5naXRodWIuaW8v
d2ViaWRsLyNlcy1jYWxsYmFjay1mdW5jdGlvbgogICAgICAgICAgICAgICAgICRpbnZva2VNZXRo
b2QgPSAiSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6RnVuY3Rpb24iOwogICAgICAgICAg
ICAgICAgICRwcm9wZXJ0eVRvTG9va3VwID0gIklkZW50aWZpZXIoKSI7Ci0gICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKGV4ZWMpO1xuIik7ICAgIAor
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7XG4iKTsgICAgCiAgICAgICAgICAgICB9IGVsc2lmICgkbnVtRnVuY3Rpb25zID4gMSkgewog
ICAgICAgICAgICAgICAgICMgVGhlIGNhbGxiYWNrIGludGVyZmFjZSBoYXMgbW9yZSB0aGFuIG9u
ZSBvcGVyYXRpb24gc28gd2Ugc2hvdWxkIG5vdCBjYWxsIHRoZSB1c2VyIG9iamVjdCBhcyBhIGZ1
bmN0aW9uLgogICAgICAgICAgICAgICAgICMgaW5zdGVhZCwgd2Ugc2hvdWxkIGxvb2sgZm9yIGEg
cHJvcGVydHkgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBvcGVyYXRpb24gb24gdGhlIHVzZXIg
b2JqZWN0LgpAQCAtMzcwNiw3ICszNzA2LDcgQEAgc3ViIEdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1l
bnRhdGlvbgogICAgICAgICAgICAgIyBGSVhNRTogV2UgY3VycmVudGx5IGp1c3QgcmVwb3J0IHRo
ZSBleGNlcHRpb24uIFdlIHNob3VsZCBwcm9iYWJseSBhZGQgYW4gZXh0ZW5kZWQgYXR0cmlidXRl
IHRvIGluZGljYXRlIHdoZW4KICAgICAgICAgICAgICMgd2Ugd2FudCB0aGUgZXhjZXB0aW9uIHRv
IGJlIHJldGhyb3duIGluc3RlYWQuCiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBpZiAocmV0dXJuZWRFeGNlcHRpb24pXG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICAgICByZXBvcnRFeGNlcHRpb24oZXhlYywgcmV0dXJuZWRFeGNlcHRpb24pO1xu
Iik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmVwb3J0RXhjZXB0
aW9uKHN0YXRlLCByZXR1cm5lZEV4Y2VwdGlvbik7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIHJldHVybiAhcmV0dXJuZWRFeGNlcHRpb247XG4iKTsKICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuIik7CiAgICAgICAgIH0KQEAgLTM3NDQsMTggKzM3
NDQsMTggQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb25GdW5jdGlvbkNhbGwoKQogICAgICAg
ICBpZiAoJG5vbmRldGVybWluaXN0aWMpIHsKICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVz
KCI8cmVwbGF5L0lucHV0Q3Vyc29yLmg+IiwgIldFQl9SRVBMQVkiKTsKICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiI2lmIEVOQUJMRShXRUJfUkVQTEFZKVxuIik7Ci0gICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICJJbnB1dEN1cnNvciYgY3Vyc29yID0gZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5pbnB1dEN1cnNvcigpO1xuIik7CisgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICJJbnB1dEN1cnNvciYgY3Vyc29yID0gc3Rh
dGUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+aW5wdXRDdXJzb3IoKTtcbiIpOwogICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAiaWYgKCFjdXJzb3IuaXNSZXBsYXlpbmco
KSkge1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICIgICAg
JGZ1bmN0aW9uU3RyaW5nO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGlu
ZGVudCAuICIgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTtcbiIpIGlmICRyYWlzZXNFeGNl
cHRpb247CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICIgICAgc2V0
RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7XG4iKSBpZiAkcmFpc2VzRXhjZXB0aW9uOwogICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAifVxuIik7CiAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiNlbHNlXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAkaW5kZW50IC4gIiRmdW5jdGlvblN0cmluZztcbiIpOwotICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICRpbmRlbnQgLiAic2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTtcbiIpIGlm
ICRyYWlzZXNFeGNlcHRpb247CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVu
dCAuICJzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTtcbiIpIGlmICRyYWlzZXNFeGNlcHRpb247
CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNlbmRpZlxuIik7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICIkZnVuY3Rp
b25TdHJpbmc7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4g
InNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7XG4iKSBpZiAkcmFpc2VzRXhjZXB0aW9uOworICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAic2V0RE9NRXhjZXB0aW9uKHN0
YXRlLCBlYyk7XG4iKSBpZiAkcmFpc2VzRXhjZXB0aW9uOwogICAgICAgICB9CiAKICAgICAgICAg
aWYgKCRzdmdQcm9wZXJ0eVR5cGUgYW5kICEkZnVuY3Rpb24tPmlzU3RhdGljKSB7CkBAIC0zNzgw
LDcgKzM3ODAsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbCgpCiAg
ICAgICAgICAgICBteSAkYmluZGluZ05hbWUgPSAkaW50ZXJmYWNlTmFtZSAuICIuIiAuICRmdW5j
dGlvbi0+c2lnbmF0dXJlLT5uYW1lOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRp
bmRlbnQgLiAiSlNWYWx1ZSByZXN1bHQ7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiI2lmIEVOQUJMRShXRUJfUkVQTEFZKVxuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgJGluZGVudCAuICJJbnB1dEN1cnNvciYgY3Vyc29yID0gZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5pbnB1dEN1cnNvcigpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgJGluZGVudCAuICJJbnB1dEN1cnNvciYgY3Vyc29yID0gc3RhdGUtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+aW5wdXRDdXJzb3IoKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICRpbmRlbnQgLiAic3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21pY1N0
cmluZz4gYmluZGluZ05hbWUoXCIkYmluZGluZ05hbWVcIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5k
ZW50IC4gImlmIChjdXJzb3IuaXNDYXB0dXJpbmcoKSkge1xuIik7CiAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgJGluZGVudCAuICIgICAgJG5hdGl2ZVR5cGUgbWVtb2l6ZWRSZXN1bHQg
PSAkZnVuY3Rpb25TdHJpbmc7XG4iKTsKQEAgLTM4MDQsMTAgKzM4MDQsMTAgQEAgc3ViIEdlbmVy
YXRlSW1wbGVtZW50YXRpb25GdW5jdGlvbkNhbGwoKQogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAiSlNWYWx1ZSByZXN1bHQgPSAiIC4g
TmF0aXZlVG9KU1ZhbHVlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAxLCAkaW50ZXJmYWNlTmFtZSwg
JGZ1bmN0aW9uU3RyaW5nLCAkdGhpc09iamVjdCkgLiAiO1xuIik7CiAgICAgICAgIH0KLSAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIgLiAkaW5kZW50IC4gInNldERPTUV4Y2VwdGlvbihl
eGVjLCBlYyk7XG4iKSBpZiAkcmFpc2VzRXhjZXB0aW9uOworICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIlxuIiAuICRpbmRlbnQgLiAic2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7XG4iKSBp
ZiAkcmFpc2VzRXhjZXB0aW9uOwogCiAgICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+RXh0ZW5k
ZWRBdHRyaWJ1dGVDb250YWlucygkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkNhbGxXaXRoIn0sICJTY3JpcHRTdGF0ZSIpKSB7Ci0gICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgJGluZGVudCAuICJpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
KVxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICJpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSlcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICRpbmRlbnQgLiAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7XG4iKTsKICAgICAgICAgfQogCkBAIC0zOTQ4LDYxICszOTQ4LDYxIEBAIHN1YiBKU1Zh
bHVlVG9OYXRpdmUKIAogICAgIG15ICR0eXBlID0gJHNpZ25hdHVyZS0+dHlwZTsKIAotICAgIHJl
dHVybiAiJHZhbHVlLnRvQm9vbGVhbihleGVjKSIgaWYgJHR5cGUgZXEgImJvb2xlYW4iOwotICAg
IHJldHVybiAiJHZhbHVlLnRvTnVtYmVyKGV4ZWMpIiBpZiAkdHlwZSBlcSAiZG91YmxlIiBvciAk
dHlwZSBlcSAidW5yZXN0cmljdGVkIGRvdWJsZSIgOwotICAgIHJldHVybiAiJHZhbHVlLnRvRmxv
YXQoZXhlYykiIGlmICR0eXBlIGVxICJmbG9hdCIgb3IgJHR5cGUgZXEgInVucmVzdHJpY3RlZCBm
bG9hdCIgOworICAgIHJldHVybiAiJHZhbHVlLnRvQm9vbGVhbihzdGF0ZSkiIGlmICR0eXBlIGVx
ICJib29sZWFuIjsKKyAgICByZXR1cm4gIiR2YWx1ZS50b051bWJlcihzdGF0ZSkiIGlmICR0eXBl
IGVxICJkb3VibGUiIG9yICR0eXBlIGVxICJ1bnJlc3RyaWN0ZWQgZG91YmxlIiA7CisgICAgcmV0
dXJuICIkdmFsdWUudG9GbG9hdChzdGF0ZSkiIGlmICR0eXBlIGVxICJmbG9hdCIgb3IgJHR5cGUg
ZXEgInVucmVzdHJpY3RlZCBmbG9hdCIgOwogCiAgICAgbXkgJGludENvbnZlcnNpb24gPSAkc2ln
bmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRW5mb3JjZVJhbmdlIn0gPyAiRW5mb3JjZVJh
bmdlIiA6ICJOb3JtYWxDb252ZXJzaW9uIjsKLSAgICByZXR1cm4gInRvSW50OChleGVjLCAkdmFs
dWUsICRpbnRDb252ZXJzaW9uKSIgaWYgJHR5cGUgZXEgImJ5dGUiOwotICAgIHJldHVybiAidG9V
SW50OChleGVjLCAkdmFsdWUsICRpbnRDb252ZXJzaW9uKSIgaWYgJHR5cGUgZXEgIm9jdGV0IjsK
LSAgICByZXR1cm4gInRvSW50MTYoZXhlYywgJHZhbHVlLCAkaW50Q29udmVyc2lvbikiIGlmICR0
eXBlIGVxICJzaG9ydCI7Ci0gICAgcmV0dXJuICJ0b1VJbnQxNihleGVjLCAkdmFsdWUsICRpbnRD
b252ZXJzaW9uKSIgaWYgJHR5cGUgZXEgInVuc2lnbmVkIHNob3J0IjsKLSAgICByZXR1cm4gInRv
SW50MzIoZXhlYywgJHZhbHVlLCAkaW50Q29udmVyc2lvbikiIGlmICR0eXBlIGVxICJsb25nIjsK
LSAgICByZXR1cm4gInRvVUludDMyKGV4ZWMsICR2YWx1ZSwgJGludENvbnZlcnNpb24pIiBpZiAk
dHlwZSBlcSAidW5zaWduZWQgbG9uZyI7Ci0gICAgcmV0dXJuICJ0b0ludDY0KGV4ZWMsICR2YWx1
ZSwgJGludENvbnZlcnNpb24pIiBpZiAkdHlwZSBlcSAibG9uZyBsb25nIjsKLSAgICByZXR1cm4g
InRvVUludDY0KGV4ZWMsICR2YWx1ZSwgJGludENvbnZlcnNpb24pIiBpZiAkdHlwZSBlcSAidW5z
aWduZWQgbG9uZyBsb25nIjsKKyAgICByZXR1cm4gInRvSW50OChzdGF0ZSwgJHZhbHVlLCAkaW50
Q29udmVyc2lvbikiIGlmICR0eXBlIGVxICJieXRlIjsKKyAgICByZXR1cm4gInRvVUludDgoc3Rh
dGUsICR2YWx1ZSwgJGludENvbnZlcnNpb24pIiBpZiAkdHlwZSBlcSAib2N0ZXQiOworICAgIHJl
dHVybiAidG9JbnQxNihzdGF0ZSwgJHZhbHVlLCAkaW50Q29udmVyc2lvbikiIGlmICR0eXBlIGVx
ICJzaG9ydCI7CisgICAgcmV0dXJuICJ0b1VJbnQxNihzdGF0ZSwgJHZhbHVlLCAkaW50Q29udmVy
c2lvbikiIGlmICR0eXBlIGVxICJ1bnNpZ25lZCBzaG9ydCI7CisgICAgcmV0dXJuICJ0b0ludDMy
KHN0YXRlLCAkdmFsdWUsICRpbnRDb252ZXJzaW9uKSIgaWYgJHR5cGUgZXEgImxvbmciOworICAg
IHJldHVybiAidG9VSW50MzIoc3RhdGUsICR2YWx1ZSwgJGludENvbnZlcnNpb24pIiBpZiAkdHlw
ZSBlcSAidW5zaWduZWQgbG9uZyI7CisgICAgcmV0dXJuICJ0b0ludDY0KHN0YXRlLCAkdmFsdWUs
ICRpbnRDb252ZXJzaW9uKSIgaWYgJHR5cGUgZXEgImxvbmcgbG9uZyI7CisgICAgcmV0dXJuICJ0
b1VJbnQ2NChzdGF0ZSwgJHZhbHVlLCAkaW50Q29udmVyc2lvbikiIGlmICR0eXBlIGVxICJ1bnNp
Z25lZCBsb25nIGxvbmciOwogCi0gICAgcmV0dXJuICJ2YWx1ZVRvRGF0ZShleGVjLCAkdmFsdWUp
IiBpZiAkdHlwZSBlcSAiRGF0ZSI7CisgICAgcmV0dXJuICJ2YWx1ZVRvRGF0ZShzdGF0ZSwgJHZh
bHVlKSIgaWYgJHR5cGUgZXEgIkRhdGUiOwogCiAgICAgaWYgKCR0eXBlIGVxICJET01TdHJpbmci
KSB7CiAgICAgICAgICMgRklYTUU6IFRoaXMgaW1wbGVtZW50cyBbVHJlYXROdWxsQXM9TnVsbFN0
cmluZ10gYW5kIFtUcmVhdFVuZGVmaW5lZEFzPU51bGxTdHJpbmddLAogICAgICAgICAjIGJ1dCB0
aGUgV2ViIElETCBzcGVjIHJlcXVpcmVzIFtUcmVhdE51bGxBcz1FbXB0eVN0cmluZ10gYW5kIFtU
cmVhdFVuZGVmaW5lZEFzPUVtcHR5U3RyaW5nXS4KICAgICAgICAgaWYgKCgkc2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiVHJlYXROdWxsQXMifSBhbmQgJHNpZ25hdHVyZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IlRyZWF0TnVsbEFzIn0gZXEgIk51bGxTdHJpbmciKSBhbmQgKCRzaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJUcmVhdFVuZGVmaW5lZEFzIn0gYW5kICRzaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJUcmVhdFVuZGVmaW5lZEFzIn0gZXEgIk51bGxT
dHJpbmciKSkgewotICAgICAgICAgICAgcmV0dXJuICJ2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5l
ZE9yTnVsbENoZWNrKGV4ZWMsICR2YWx1ZSkiCisgICAgICAgICAgICByZXR1cm4gInZhbHVlVG9T
dHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soc3RhdGUsICR2YWx1ZSkiCiAgICAgICAgIH0K
ICAgICAgICAgaWYgKCgkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVHJlYXROdWxs
QXMifSBhbmQgJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlRyZWF0TnVsbEFzIn0g
ZXEgIk51bGxTdHJpbmciKSBvciAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmVm
bGVjdCJ9KSB7Ci0gICAgICAgICAgICByZXR1cm4gInZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNr
KGV4ZWMsICR2YWx1ZSkiCisgICAgICAgICAgICByZXR1cm4gInZhbHVlVG9TdHJpbmdXaXRoTnVs
bENoZWNrKHN0YXRlLCAkdmFsdWUpIgogICAgICAgICB9CiAgICAgICAgIGlmICgkc2lnbmF0dXJl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQXRvbWljU3RyaW5nIn0pIHsKLSAgICAgICAgICAgIHJl
dHVybiAiJHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT50b0F0b21pY1N0cmluZyhleGVjKSI7CisgICAg
ICAgICAgICByZXR1cm4gIiR2YWx1ZS50b1N0cmluZyhzdGF0ZSktPnRvQXRvbWljU3RyaW5nKHN0
YXRlKSI7CiAgICAgICAgIH0KICAgICAgICAgIyBGSVhNRTogQWRkIHRoZSBjYXNlIGZvciAnaWYg
KCRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJUcmVhdFVuZGVmaW5lZEFzIn0gYW5k
ICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJUcmVhdFVuZGVmaW5lZEFzIn0gZXEg
Ik51bGxTdHJpbmciKSknLgotICAgICAgICByZXR1cm4gIiR2YWx1ZS50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYykiOworICAgICAgICByZXR1cm4gIiR2YWx1ZS50b1N0cmluZyhzdGF0ZSktPnZh
bHVlKHN0YXRlKSI7CiAgICAgfQogCiAgICAgaWYgKCR0eXBlIGVxICJhbnkiKSB7CiAgICAgICAg
IEFkZFRvSW1wbEluY2x1ZGVzKCI8YmluZGluZ3MvU2NyaXB0VmFsdWUuaD4iKTsKLSAgICAgICAg
cmV0dXJuICJ7IGV4ZWMtPnZtKCksICR2YWx1ZSB9IjsKKyAgICAgICAgcmV0dXJuICJ7IHN0YXRl
LT52bSgpLCAkdmFsdWUgfSI7CiAgICAgfQogCiAgICAgaWYgKCR0eXBlIGVxICJOb2RlRmlsdGVy
IikgewogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlMkdHlwZS5oIiwgJGNvbmRpdGlvbmFs
KTsKLSAgICAgICAgcmV0dXJuICJKUyR7dHlwZX06OnRvV3JhcHBlZChleGVjLT52bSgpLCAkdmFs
dWUpIjsKKyAgICAgICAgcmV0dXJuICJKUyR7dHlwZX06OnRvV3JhcHBlZChzdGF0ZS0+dm0oKSwg
JHZhbHVlKSI7CiAgICAgfQogCiAgICAgaWYgKCR0eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFs
dWUiKSB7CiAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJTZXJpYWxpemVkU2NyaXB0VmFsdWUu
aCIsICRjb25kaXRpb25hbCk7Ci0gICAgICAgIHJldHVybiAiU2VyaWFsaXplZFNjcmlwdFZhbHVl
OjpjcmVhdGUoZXhlYywgJHZhbHVlLCAwLCAwKSI7CisgICAgICAgIHJldHVybiAiU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpjcmVhdGUoc3RhdGUsICR2YWx1ZSwgMCwgMCkiOwogICAgIH0KIAogICAg
IGlmICgkdHlwZSBlcSAiRGljdGlvbmFyeSIpIHsKICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMo
IkRpY3Rpb25hcnkuaCIsICRjb25kaXRpb25hbCk7Ci0gICAgICAgIHJldHVybiAieyBleGVjLCAk
dmFsdWUgfSI7CisgICAgICAgIHJldHVybiAieyBzdGF0ZSwgJHZhbHVlIH0iOwogICAgIH0KIAog
ICAgIGlmICgkdHlwZSBlcSAiRE9NU3RyaW5nTGlzdCIgKSB7CiAgICAgICAgIEFkZFRvSW1wbElu
Y2x1ZGVzKCJKU0RPTVN0cmluZ0xpc3QuaCIsICRjb25kaXRpb25hbCk7Ci0gICAgICAgIHJldHVy
biAidG9ET01TdHJpbmdMaXN0KGV4ZWMsICR2YWx1ZSkiOworICAgICAgICByZXR1cm4gInRvRE9N
U3RyaW5nTGlzdChzdGF0ZSwgJHZhbHVlKSI7CiAgICAgfQogICAgIAogICAgIGlmICgkY29kZUdl
bmVyYXRvci0+SXNUeXBlZEFycmF5VHlwZSgkdHlwZSkpIHsKQEAgLTQwMTksMTMgKzQwMTksMTMg
QEAgc3ViIEpTVmFsdWVUb05hdGl2ZQogICAgIGlmICgkYXJyYXlPclNlcXVlbmNlVHlwZSkgewog
ICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzUmVmUHRyVHlwZSgkYXJyYXlPclNlcXVlbmNl
VHlwZSkpIHsKICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKUyR7YXJyYXlPclNlcXVl
bmNlVHlwZX0uaCIpOwotICAgICAgICAgICAgcmV0dXJuICIodG9SZWZQdHJOYXRpdmVBcnJheTwk
e2FycmF5T3JTZXF1ZW5jZVR5cGV9LCBKUyR7YXJyYXlPclNlcXVlbmNlVHlwZX0+KGV4ZWMsICR2
YWx1ZSwgJkpTJHthcnJheU9yU2VxdWVuY2VUeXBlfTo6dG9XcmFwcGVkKSkiOworICAgICAgICAg
ICAgcmV0dXJuICIodG9SZWZQdHJOYXRpdmVBcnJheTwke2FycmF5T3JTZXF1ZW5jZVR5cGV9LCBK
UyR7YXJyYXlPclNlcXVlbmNlVHlwZX0+KHN0YXRlLCAkdmFsdWUsICZKUyR7YXJyYXlPclNlcXVl
bmNlVHlwZX06OnRvV3JhcHBlZCkpIjsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gInRvTmF0
aXZlQXJyYXk8IiAuIEdldE5hdGl2ZVZlY3RvcklubmVyVHlwZSgkYXJyYXlPclNlcXVlbmNlVHlw
ZSkgLiAiPihleGVjLCAkdmFsdWUpIjsKKyAgICAgICAgcmV0dXJuICJ0b05hdGl2ZUFycmF5PCIg
LiBHZXROYXRpdmVWZWN0b3JJbm5lclR5cGUoJGFycmF5T3JTZXF1ZW5jZVR5cGUpIC4gIj4oc3Rh
dGUsICR2YWx1ZSkiOwogICAgIH0KIAogICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNFbnVtVHlw
ZSgkdHlwZSkpIHsKLSAgICAgICAgcmV0dXJuICIkdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpIjsKKyAgICAgICAgcmV0dXJuICIkdmFsdWUudG9TdHJpbmcoc3RhdGUpLT52YWx1ZShz
dGF0ZSkiOwogICAgIH0KIAogICAgICMgRGVmYXVsdCwgYXNzdW1lIGF1dG9nZW5lcmF0ZWQgdHlw
ZSBjb252ZXJzaW9uIHJvdXRpbmVzCkBAIC00MDUwLDEyICs0MDUwLDEyIEBAIHN1YiBOYXRpdmVU
b0pTVmFsdWUKICAgICBpZiAoJHR5cGUgZXEgIkRhdGUiKSB7CiAgICAgICAgIG15ICRjb252ID0g
JHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlRyZWF0UmV0dXJuZWROYU5EYXRlQXMi
fTsKICAgICAgICAgaWYgKGRlZmluZWQgJGNvbnYpIHsKLSAgICAgICAgICAgIHJldHVybiAianNE
YXRlT3JOdWxsKGV4ZWMsICR2YWx1ZSkiIGlmICRjb252IGVxICJOdWxsIjsKLSAgICAgICAgICAg
IHJldHVybiAianNEYXRlT3JOYU4oZXhlYywgJHZhbHVlKSIgaWYgJGNvbnYgZXEgIk5hTiI7Cisg
ICAgICAgICAgICByZXR1cm4gImpzRGF0ZU9yTnVsbChzdGF0ZSwgJHZhbHVlKSIgaWYgJGNvbnYg
ZXEgIk51bGwiOworICAgICAgICAgICAgcmV0dXJuICJqc0RhdGVPck5hTihzdGF0ZSwgJHZhbHVl
KSIgaWYgJGNvbnYgZXEgIk5hTiI7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGRpZSAiVW5r
bm93biB2YWx1ZSBmb3IgVHJlYXRSZXR1cm5lZE5hTkRhdGVBcyBleHRlbmRlZCBhdHRyaWJ1dGUi
OwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiAianNEYXRlT3JOdWxsKGV4ZWMsICR2YWx1ZSki
OworICAgICAgICByZXR1cm4gImpzRGF0ZU9yTnVsbChzdGF0ZSwgJHZhbHVlKSI7CiAgICAgfQog
CiAgICAgaWYgKCRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZWZsZWN0In0gYW5k
ICgkdHlwZSBlcSAidW5zaWduZWQgbG9uZyIgb3IgJHR5cGUgZXEgInVuc2lnbmVkIHNob3J0Iikp
IHsKQEAgLTQwNjksMjAgKzQwNjksMjAgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogCiAgICAgaWYg
KCRjb2RlR2VuZXJhdG9yLT5Jc0VudW1UeXBlKCR0eXBlKSkgewogICAgICAgICBBZGRUb0ltcGxJ
bmNsdWRlcygiPHJ1bnRpbWUvSlNTdHJpbmcuaD4iLCAkY29uZGl0aW9uYWwpOwotICAgICAgICBy
ZXR1cm4gImpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsICR2YWx1ZSkiOworICAgICAgICByZXR1cm4g
ImpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCAkdmFsdWUpIjsKICAgICB9CiAKICAgICBpZiAoJGNv
ZGVHZW5lcmF0b3ItPklzU3RyaW5nVHlwZSgkdHlwZSkpIHsKICAgICAgICAgQWRkVG9JbXBsSW5j
bHVkZXMoIlVSTC5oIiwgJGNvbmRpdGlvbmFsKTsKICAgICAgICAgbXkgJGNvbnYgPSAkc2lnbmF0
dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcyJ9Owog
ICAgICAgICBpZiAoZGVmaW5lZCAkY29udikgewotICAgICAgICAgICAgcmV0dXJuICJqc1N0cmlu
Z09yTnVsbChleGVjLCAkdmFsdWUpIiBpZiAkY29udiBlcSAiTnVsbCI7Ci0gICAgICAgICAgICBy
ZXR1cm4gImpzU3RyaW5nT3JVbmRlZmluZWQoZXhlYywgJHZhbHVlKSIgaWYgJGNvbnYgZXEgIlVu
ZGVmaW5lZCI7CisgICAgICAgICAgICByZXR1cm4gImpzU3RyaW5nT3JOdWxsKHN0YXRlLCAkdmFs
dWUpIiBpZiAkY29udiBlcSAiTnVsbCI7CisgICAgICAgICAgICByZXR1cm4gImpzU3RyaW5nT3JV
bmRlZmluZWQoc3RhdGUsICR2YWx1ZSkiIGlmICRjb252IGVxICJVbmRlZmluZWQiOwogCiAgICAg
ICAgICAgICBkaWUgIlVua25vd24gdmFsdWUgZm9yIFRyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXMg
ZXh0ZW5kZWQgYXR0cmlidXRlIjsKICAgICAgICAgfQogICAgICAgICBBZGRUb0ltcGxJbmNsdWRl
cygiPHJ1bnRpbWUvSlNTdHJpbmcuaD4iLCAkY29uZGl0aW9uYWwpOwotICAgICAgICByZXR1cm4g
ImpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsICR2YWx1ZSkiOworICAgICAgICByZXR1cm4gImpzU3Ry
aW5nV2l0aENhY2hlKHN0YXRlLCAkdmFsdWUpIjsKICAgICB9CiAgICAgCiAgICAgbXkgJGdsb2Jh
bE9iamVjdDsKQEAgLTQxMTMsNyArNDExMyw3IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAgICAg
ICAgfQogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPHJ1bnRpbWUvSlNBcnJheS5oPiIsICRj
b25kaXRpb25hbCk7CiAKLSAgICAgICAgcmV0dXJuICJqc0FycmF5KGV4ZWMsICR0aGlzVmFsdWUt
Pmdsb2JhbE9iamVjdCgpLCAkdmFsdWUpIjsKKyAgICAgICAgcmV0dXJuICJqc0FycmF5KHN0YXRl
LCAkdGhpc1ZhbHVlLT5nbG9iYWxPYmplY3QoKSwgJHZhbHVlKSI7CiAgICAgfQogCiAgICAgaWYg
KCR0eXBlIGVxICJhbnkiKSB7CkBAIC00MTI0LDcgKzQxMjQsNyBAQCBzdWIgTmF0aXZlVG9KU1Zh
bHVlCiAgICAgICAgIH0KICAgICB9IGVsc2lmICgkdHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZh
bHVlIiBvciAkdHlwZSBlcSAiYW55IikgewogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmgiLCAkY29uZGl0aW9uYWwpOwotICAgICAgICByZXR1cm4gIiR2
YWx1ZSA/ICR2YWx1ZS0+ZGVzZXJpYWxpemUoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCksIDApIDoganNOdWxsKCkiOworICAgICAgICByZXR1cm4gIiR2YWx1ZSA/ICR2YWx1ZS0+ZGVz
ZXJpYWxpemUoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCAwKSA6IGpzTnVsbCgp
IjsKICAgICB9IGVsc2lmICgkY29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlwZSgkdHlwZSkp
IHsKICAgICAgICAgIyBEbyBub3RoaW5nIC0gYWxsIGhlYWRlcnMgYXJlIGFscmVhZHkgaW5jbHVk
ZWQuCiAgICAgfSBlbHNlIHsKQEAgLTQxMzYsNyArNDEzNiw3IEBAIHN1YiBOYXRpdmVUb0pTVmFs
dWUKICAgICByZXR1cm4gJHZhbHVlIGlmICRjb2RlR2VuZXJhdG9yLT5Jc1NWR0FuaW1hdGVkVHlw
ZSgkdHlwZSk7CiAKICAgICBpZiAoJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5l
d09iamVjdCJ9KSB7Ci0gICAgICAgIHJldHVybiAidG9KU05ld2x5Q3JlYXRlZChleGVjLCAkZ2xv
YmFsT2JqZWN0LCBXVEY6OmdldFB0cigkdmFsdWUpKSI7CisgICAgICAgIHJldHVybiAidG9KU05l
d2x5Q3JlYXRlZChzdGF0ZSwgJGdsb2JhbE9iamVjdCwgV1RGOjpnZXRQdHIoJHZhbHVlKSkiOwog
ICAgIH0KIAogICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNTVkdBbmltYXRlZFR5cGUoJGludGVy
ZmFjZU5hbWUpIG9yICRpbnRlcmZhY2VOYW1lIGVxICJTVkdWaWV3U3BlYyIpIHsKQEAgLTQxNjgs
OSArNDE2OCw5IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAgICAgICAgfQogICAgIH0KICAgICBp
ZiAoJGdsb2JhbE9iamVjdCkgewotICAgICAgICByZXR1cm4gInRvSlMoZXhlYywgJGdsb2JhbE9i
amVjdCwgV1RGOjpnZXRQdHIoJHZhbHVlKSkiOworICAgICAgICByZXR1cm4gInRvSlMoc3RhdGUs
ICRnbG9iYWxPYmplY3QsIFdURjo6Z2V0UHRyKCR2YWx1ZSkpIjsKICAgICB9IGVsc2UgewotICAg
ICAgICByZXR1cm4gInRvSlMoZXhlYywganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpKSwgV1RGOjpnZXRQdHIoJHZhbHVlKSkiOworICAgICAgICBy
ZXR1cm4gInRvSlMoc3RhdGUsIGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCkpLCBXVEY6OmdldFB0cigkdmFsdWUpKSI7CiAgICAgfQogfQogCkBA
IC00NjE0LDkgKzQ2MTQsOSBAQCBzdWIgR2VuZXJhdGVPdmVybG9hZGVkQ29uc3RydWN0b3JEZWZp
bml0aW9uCiAgICAgbXkgJGxlbmd0aE9mTG9uZ2VzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvclBhcmFt
ZXRlckxpc3QgPSBMZW5ndGhPZkxvbmdlc3RGdW5jdGlvblBhcmFtZXRlckxpc3QoJGludGVyZmFj
ZS0+Y29uc3RydWN0b3JzKTsKIAogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgPDxFTkQpOwotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke2Z1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBleGVj
KQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke2Z1bmN0aW9uTmFtZX0oRXhlY1N0YXRl
KiBzdGF0ZSkKIHsKLSAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RkOjptaW48c2l6ZV90PigkbGVu
Z3RoT2ZMb25nZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yUGFyYW1ldGVyTGlzdCwgZXhlYy0+YXJn
dW1lbnRDb3VudCgpKTsKKyAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RkOjptaW48c2l6ZV90Pigk
bGVuZ3RoT2ZMb25nZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yUGFyYW1ldGVyTGlzdCwgc3RhdGUt
PmFyZ3VtZW50Q291bnQoKSk7CiBFTkQKIAogICAgIG15ICVmZXRjaGVkQXJndW1lbnRzID0gKCk7
CkBAIC00NjI5LDIwICs0NjI5LDIwIEBAIEVORAogCiAgICAgICAgIGZvcmVhY2ggbXkgJHBhcmFt
ZXRlckluZGV4IChAbmVlZGVkQXJndW1lbnRzKSB7CiAgICAgICAgICAgICBuZXh0IGlmIGV4aXN0
cyAkZmV0Y2hlZEFyZ3VtZW50c3skcGFyYW1ldGVySW5kZXh9OwotICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIEpTVmFsdWUgYXJnJHBhcmFtZXRlckluZGV4KGV4ZWMtPmFyZ3Vt
ZW50KCRwYXJhbWV0ZXJJbmRleCkpO1xuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgSlNWYWx1ZSBhcmckcGFyYW1ldGVySW5kZXgoc3RhdGUtPmFyZ3VtZW50KCRwYXJh
bWV0ZXJJbmRleCkpO1xuIik7CiAgICAgICAgICAgICAkZmV0Y2hlZEFyZ3VtZW50c3skcGFyYW1l
dGVySW5kZXh9ID0gMTsKICAgICAgICAgfQogCiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICBpZiAoJHBhcmFtZXRlcnNDaGVjaylcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgICAgIHJldHVybiAke2Z1bmN0aW9uTmFtZX0kb3ZlcmxvYWQtPntvdmVybG9hZGVk
SW5kZXh9KGV4ZWMpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAg
cmV0dXJuICR7ZnVuY3Rpb25OYW1lfSRvdmVybG9hZC0+e292ZXJsb2FkZWRJbmRleH0oc3RhdGUp
O1xuIik7CiAgICAgfQogCiAgICAgaWYgKCRsZWFzdE51bU1hbmRhdG9yeVBhcmFtcyA+PSAxKSB7
CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoYXJnc0NvdW50IDwgJGxlYXN0
TnVtTWFuZGF0b3J5UGFyYW1zKVxuIik7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihleGVjKSk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihz
dGF0ZSkpO1xuIik7CiAgICAgfQogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgPDxFTkQpOwotICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKHN0YXRlKTsKIH0KIAogRU5ECkBAIC00NjY3LDMwICs0NjY3LDMwIEBAIHN1YiBHZW5lcmF0
ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbgogICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siPHJ1bnRp
bWUvRXJyb3IuaD4ifSA9IDE7CiAKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgPDxF
TkQpOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke2NvbnN0cnVjdG9yQ2xhc3NOYW1l
fTo6Y29uc3RydWN0JHtjbGFzc05hbWV9KEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OmNvbnN0cnVjdCR7Y2xhc3NO
YW1lfShFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIGF1dG8qIGpzQ29uc3RydWN0b3IgPSBqc0Nh
c3Q8JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX0qPihleGVjLT5jYWxsZWUoKSk7CisgICAgYXV0byog
anNDb25zdHJ1Y3RvciA9IGpzQ2FzdDwke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfSo+KHN0YXRlLT5j
YWxsZWUoKSk7CiAKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBleGVjdXRpb25Db250ZXh0
ID0ganNDb25zdHJ1Y3Rvci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIGlmICghZXhl
Y3V0aW9uQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVS
ZWZlcmVuY2VFcnJvcihleGVjLCAiQ29uc3RydWN0b3IgYXNzb2NpYXRlZCBleGVjdXRpb24gY29u
dGV4dCBpcyB1bmF2YWlsYWJsZSIpKTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzdGF0
ZXV0aW9uQ29udGV4dCA9IGpzQ29uc3RydWN0b3ItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsK
KyAgICBpZiAoIXN0YXRldXRpb25Db250ZXh0KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KHN0YXRlLCBjcmVhdGVSZWZlcmVuY2VFcnJvcihzdGF0ZSwgIkNvbnN0cnVjdG9yIGFzc29jaWF0
ZWQgc3RhdGV1dGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxlIikpOwogCi0gICAgaWYgKFVOTElL
RUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwog
Ci0gICAgQXRvbWljU3RyaW5nIGV2ZW50VHlwZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5n
KGV4ZWMpLT50b0F0b21pY1N0cmluZyhleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIEF0b21pY1N0cmluZyBldmVudFR5cGUgPSBzdGF0ZS0+YXJndW1l
bnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0F0b21pY1N0cmluZyhzdGF0ZSk7CisgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAke2ludGVyZmFjZU5hbWV9SW5pdCBldmVudElu
aXQ7CiAKLSAgICBKU1ZhbHVlIGluaXRpYWxpemVyVmFsdWUgPSBleGVjLT5hcmd1bWVudCgxKTsK
KyAgICBKU1ZhbHVlIGluaXRpYWxpemVyVmFsdWUgPSBzdGF0ZS0+YXJndW1lbnQoMSk7CiAgICAg
aWYgKCFpbml0aWFsaXplclZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgICAgLy8g
R2l2ZW4gdGhlIGFib3ZlIHRlc3QsIHRoaXMgd2lsbCBhbHdheXMgeWllbGQgYW4gb2JqZWN0Lgot
ICAgICAgICBKU09iamVjdCogaW5pdGlhbGl6ZXJPYmplY3QgPSBpbml0aWFsaXplclZhbHVlLnRv
T2JqZWN0KGV4ZWMpOworICAgICAgICBKU09iamVjdCogaW5pdGlhbGl6ZXJPYmplY3QgPSBpbml0
aWFsaXplclZhbHVlLnRvT2JqZWN0KHN0YXRlKTsKIAogICAgICAgICAvLyBDcmVhdGUgdGhlIGRp
Y3Rpb25hcnkgd3JhcHBlciBmcm9tIHRoZSBpbml0aWFsaXplciBvYmplY3QuCi0gICAgICAgIEpT
RGljdGlvbmFyeSBkaWN0aW9uYXJ5KGV4ZWMsIGluaXRpYWxpemVyT2JqZWN0KTsKKyAgICAgICAg
SlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnkoc3RhdGUsIGluaXRpYWxpemVyT2JqZWN0KTsKIAogICAg
ICAgICAvLyBBdHRlbXB0IHRvIGZpbGwgaW4gdGhlIEV2ZW50SW5pdC4KICAgICAgICAgaWYgKCFm
aWxsJHtpbnRlcmZhY2VOYW1lfUluaXQoZXZlbnRJbml0LCBkaWN0aW9uYXJ5KSkKQEAgLTQ2OTgs
NyArNDY5OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtjb25zdHJ1Y3RvckNs
YXNzTmFtZX06OmNvbnN0cnVjdCR7Y2xhc3NOYW1lfShFeGVjCiAgICAgfQogCiAgICAgUmVmUHRy
PCR7aW50ZXJmYWNlTmFtZX0+IGV2ZW50ID0gJHtpbnRlcmZhY2VOYW1lfTo6Y3JlYXRlKGV2ZW50
VHlwZSwgZXZlbnRJbml0KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlMoZXhlYywg
anNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksIGV2ZW50LmdldCgpKSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0b0pTKHN0YXRlLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3Qo
KSwgZXZlbnQuZ2V0KCkpKTsKIH0KIAogYm9vbCBmaWxsJHtpbnRlcmZhY2VOYW1lfUluaXQoJHtp
bnRlcmZhY2VOYW1lfUluaXQmIGV2ZW50SW5pdCwgSlNEaWN0aW9uYXJ5JiBkaWN0aW9uYXJ5KQpA
QCAtNDczNyw5ICs0NzM3LDkgQEAgRU5ECiAgICAgICAgICAgICAgICAgJG92ZXJsb2FkZWRJbmRl
eFN0cmluZyAuPSAkZnVuY3Rpb24tPntvdmVybG9hZGVkSW5kZXh9OwogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMICR7Y29uc3RydWN0b3JDbGFzc05hbWV9Ojpjb25zdHJ1Y3Qke2NsYXNzTmFtZX0ke292
ZXJsb2FkZWRJbmRleFN0cmluZ30oRXhlY1N0YXRlKiBleGVjKVxuIik7CisgICAgICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICJFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7Y29uc3Ry
dWN0b3JDbGFzc05hbWV9Ojpjb25zdHJ1Y3Qke2NsYXNzTmFtZX0ke292ZXJsb2FkZWRJbmRleFN0
cmluZ30oRXhlY1N0YXRlKiBzdGF0ZSlcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAie1xuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byog
Y2FzdGVkVGhpcyA9IGpzQ2FzdDwke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfSo+KGV4ZWMtPmNhbGxl
ZSgpKTtcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8qIGNh
c3RlZFRoaXMgPSBqc0Nhc3Q8JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX0qPihzdGF0ZS0+Y2FsbGVl
KCkpO1xuIik7CiAKICAgICAgICAgICAgIG15IEBjb25zdHJ1Y3RvckFyZ0xpc3Q7CiAKQEAgLTQ3
NTgsMjAgKzQ3NTgsMjAgQEAgRU5ECiAgICAgICAgICAgICBteSAoJGR1bW15LCAkcGFyYW1JbmRl
eCkgPSBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjaygkb3V0cHV0QXJyYXksICRmdW5jdGlvbiwgJGlu
dGVyZmFjZSwgJG51bVBhcmFtZXRlcnMsICRpbnRlcmZhY2VOYW1lLCAiY29uc3RydWN0b3JDYWxs
YmFjayIsIHVuZGVmLCB1bmRlZiwgdW5kZWYpOwogCiAgICAgICAgICAgICBpZiAoJGNvZGVHZW5l
cmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkNvbnN0cnVjdG9yQ2FsbFdpdGgifSwgIlNjcmlwdFN0YXRlIikpIHsKLSAgICAg
ICAgICAgICAgICBwdXNoKEBjb25zdHJ1Y3RvckFyZ0xpc3QsICIqZXhlYyIpOworICAgICAgICAg
ICAgICAgIHB1c2goQGNvbnN0cnVjdG9yQXJnTGlzdCwgIipzdGF0ZSIpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRh
aW5zKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25zdHJ1Y3RvckNhbGxXaXRo
In0sICJTY3JpcHRFeGVjdXRpb25Db250ZXh0IikpIHsKICAgICAgICAgICAgICAgICBwdXNoKEBj
b25zdHJ1Y3RvckFyZ0xpc3QsICIqY29udGV4dCIpOwogICAgICAgICAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gY2FzdGVk
VGhpcy0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIGlmICghY29udGV4dClcbiIpOwotICAgICAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIHRocm93Q29uc3RydWN0b3JEb2N1
bWVudFVuYXZhaWxhYmxlRXJyb3IoKmV4ZWMsIFwiJHtpbnRlcmZhY2VOYW1lfVwiKTtcbiIpOwor
ICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIHRocm93
Q29uc3RydWN0b3JEb2N1bWVudFVuYXZhaWxhYmxlRXJyb3IoKnN0YXRlLCBcIiR7aW50ZXJmYWNl
TmFtZX1cIik7XG4iKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICgkY29kZUdlbmVy
YXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlucygkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ29uc3RydWN0b3JDYWxsV2l0aCJ9LCAiRG9jdW1lbnQiKSkgewogICAgICAgICAg
ICAgICAgICRpbXBsSW5jbHVkZXN7IkRvY3VtZW50LmgifSA9IDE7CiAgICAgICAgICAgICAgICAg
cHVzaChAY29uc3RydWN0b3JBcmdMaXN0LCAiZG9jdW1lbnQiKTsKICAgICAgICAgICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9
IGNhc3RlZFRoaXMtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTtcbiIpOwogICAgICAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoIWNvbnRleHQpXG4iKTsKLSAgICAgICAg
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiB0aHJvd0NvbnN0cnVj
dG9yRG9jdW1lbnRVbmF2YWlsYWJsZUVycm9yKCpleGVjLCBcIiR7aW50ZXJmYWNlTmFtZX1cIik7
XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVy
biB0aHJvd0NvbnN0cnVjdG9yRG9jdW1lbnRVbmF2YWlsYWJsZUVycm9yKCpzdGF0ZSwgXCIke2lu
dGVyZmFjZU5hbWV9XCIpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTtcbiIp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCRnZW5lcmF0aW5nTmFtZWRDb25zdHJ1
Y3RvcikgewpAQCAtNDc5NywxNyArNDc5NywxNyBAQCBFTkQKIAogICAgICAgICAgICAgaWYgKCRp
bnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25zdHJ1Y3RvclJhaXNlc0V4Y2VwdGlv
biJ9KSB7CiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChlYykg
e1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgZWMpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTtcbiIpOwogICAgICAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKCkpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIH1cbiIpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoJGNvZGVHZW5l
cmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkNvbnN0cnVjdG9yQ2FsbFdpdGgifSwgIlNjcmlwdFN0YXRlIikpIHsKLSAgICAg
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChVTkxJS0VMWShleGVjLT5o
YWRFeGNlcHRpb24oKSkpXG4iKTsKKyAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKVxuIik7CiAgICAgICAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0
b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBvYmplY3QuZ2V0KCkpKSk7XG4i
KTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGFzT2JqZWN0KHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBv
YmplY3QuZ2V0KCkpKSk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn1c
blxuIik7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3Bw
CmluZGV4IDUxMTVmN2FiY2NhMzE0NDdhNGI4NmMzZTViMzExZmM3YjE3NWQ0MDUuLjU3OWE2NGUw
NTJmOWE3ZGU0M2VmNjYwYzliMzZlYTJlN2NlOGFjZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVE
T01PYmplY3QuY3BwCkBAIC0xNjYsMjIgKzE2NiwyMiBAQCBKU1Rlc3RBY3RpdmVET01PYmplY3Q6
On5KU1Rlc3RBY3RpdmVET01PYmplY3QoKQogICAgIHJlbGVhc2VJbXBsKCk7CiB9CiAKLWJvb2wg
SlNUZXN0QWN0aXZlRE9NT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCitib29sIEpTVGVzdEFjdGl2ZURPTU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90
KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTVGVzdEFjdGl2ZURPTU9iamVjdCo+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIGlmIChnZXRTdGF0aWNWYWx1ZVNs
b3Q8SlNUZXN0QWN0aXZlRE9NT2JqZWN0LCBCYXNlPihleGVjLCBKU1Rlc3RBY3RpdmVET01PYmpl
Y3RUYWJsZSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KSkKKyAgICBpZiAoZ2V0U3Rh
dGljVmFsdWVTbG90PEpTVGVzdEFjdGl2ZURPTU9iamVjdCwgQmFzZT4oc3RhdGUsIEpTVGVzdEFj
dGl2ZURPTU9iamVjdFRhYmxlLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IGpzVGVzdEFjdGl2ZURPTU9iamVjdEV4Y2l0aW5nQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RFeGNpdGluZ0F0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0
aGlzVmFsdWUpOwogICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0QWN0aXZlRE9N
T2JqZWN0Kj4oc2xvdEJhc2UpOwotICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxv
d0FjY2Vzc1RvRE9NV2luZG93KGV4ZWMsIGNhc3RlZFRoaXMtPmltcGwoKSkpCisgICAgaWYgKCFC
aW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coc3RhdGUsIGNhc3Rl
ZFRoaXMtPmltcGwoKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuZXhjaXRpbmdBdHRyKCkpOwpAQCAtMTg5LDE0ICsxODks
MTQgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0RXhjaXRpbmdBdHRyKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3QKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVj
dCosIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIEpTVGVz
dEFjdGl2ZURPTU9iamVjdCogZG9tT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RBY3RpdmVE
T01PYmplY3QqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKCFkb21PYmpl
Y3QpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIGlmICghQmlu
ZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGV4ZWMsIGRvbU9iamVj
dC0+aW1wbCgpKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUpOworICAg
IGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KHN0YXRl
LCBkb21PYmplY3QtPmltcGwoKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RBY3RpdmVET01P
YmplY3Q6OmdldENvbnN0cnVjdG9yKGV4ZWMtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0
KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdEFjdGl2ZURPTU9iamVjdDo6
Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsK
IH0KIAogSlNWYWx1ZSBKU1Rlc3RBY3RpdmVET01PYmplY3Q6OmdldENvbnN0cnVjdG9yKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKQEAgLTIwNCwzNyArMjA0LDM3IEBAIEpT
VmFsdWUgSlNUZXN0QWN0aXZlRE9NT2JqZWN0OjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplCiAgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVz
dEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yPih2bSwganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25FeGNpdGluZ0Z1bmN0aW9uKEV4ZWNT
dGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0QWN0aXZlRE9N
T2JqZWN0UHJvdG90eXBlRnVuY3Rpb25FeGNpdGluZ0Z1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUp
CiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RBY3RpdmVET01P
YmplY3QqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEFjdGl2ZURPTU9iamVjdCo+
KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0
dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RBY3RpdmVET01PYmplY3QiLCAiZXhj
aXRpbmdGdW5jdGlvbiIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0
ZSwgIlRlc3RBY3RpdmVET01PYmplY3QiLCAiZXhjaXRpbmdGdW5jdGlvbiIpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0QWN0aXZlRE9NT2JqZWN0Ojpp
bmZvKCkpOwotICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9N
V2luZG93KGV4ZWMsIGNhc3RlZFRoaXMtPmltcGwoKSkpCisgICAgaWYgKCFCaW5kaW5nU2VjdXJp
dHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coc3RhdGUsIGNhc3RlZFRoaXMtPmltcGwo
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+
YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIE5vZGUqIG5leHRDaGls
ZCA9IEpTTm9kZTo6dG9XcmFwcGVkKGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtF
TFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CisgICAgTm9kZSogbmV4dENoaWxkID0g
SlNOb2RlOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmV4Y2l0aW5nRnVuY3Rpb24obmV4dENoaWxkKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZUZ1bmN0aW9u
UG9zdE1lc3NhZ2UoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlvblBvc3RNZXNzYWdlKEV4ZWNT
dGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUo
KTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rl
c3RBY3RpdmVET01PYmplY3QqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEFjdGl2
ZURPTU9iamVjdCo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkK
LSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RBY3RpdmVET01P
YmplY3QiLCAicG9zdE1lc3NhZ2UiKTsKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJv
cigqc3RhdGUsICJUZXN0QWN0aXZlRE9NT2JqZWN0IiwgInBvc3RNZXNzYWdlIik7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RBY3RpdmVET01PYmplY3Q6
OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBpZiAo
VU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAg
IFN0cmluZyBtZXNzYWdlID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsK
KyAgICBTdHJpbmcgbWVzc2FnZSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSkt
PnZhbHVlKHN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBs
LnBvc3RNZXNzYWdlKG1lc3NhZ2UpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmgKaW5kZXggYmNhMGEzMDg4ODQ3
MDUwMGZhZjc5ZTM2N2IwYmVkZWI5ZTNkZjdlMi4uM2U2ZDQ2Njk2NTViNmM5ZmMzMzE1MDI5YTQ1
MmZlYTNlYWZhNTFhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuaApAQCAtODMsNyAr
ODMsNyBAQCBpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFw
cGVyV29ybGQmLCBUZXN0QWN0aXZlRE9NT2JqZWN0KgogfQogCiBKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdEFjdGl2ZURPTU9iamVjdCop
OwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0QWN0aXZlRE9NT2JqZWN0JiBpbXBsKSB7IHJl
dHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgJmltcGwpOyB9CitpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBUZXN0QWN0aXZlRE9NT2JqZWN0JiBpbXBsKSB7IHJldHVybiB0b0pTKHN0YXRlLCBn
bG9iYWxPYmplY3QsICZpbXBsKTsgfQogSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlND
OjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RBY3RpdmVET01PYmplY3QqKTsK
IAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Q2FsbGJhY2suY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdENhbGxiYWNrLmNwcAppbmRleCA5MTg5YjI1OWNiN2I2NjY4Yzg5NmFiZGQ5NWU4
NjI4ODA3YjRhYmJjLi40ODZmYTk0ZWUwZTkwOWQyN2I5N2M3OGY2NDZmMjg0NzhhY2VlYjMzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Q2FsbGJhY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDYWxsYmFjay5jcHAKQEAgLTEyNiwxMyArMTI2LDEzIEBAIGJvb2wgSlNUZXN0Q2Fs
bGJhY2s6OmNhbGxiYWNrV2l0aE5vUGFyYW0oKQogCiAgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9k
YXRhLT5nbG9iYWxPYmplY3QoKS0+dm0oKSk7CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2Rh
dGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAgRXhlY1N0YXRlKiBzdGF0ZSA9
IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBhcmdzOwogCiAgICAgTmFrZWRQdHI8RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlv
bjsKLSAgICBtX2RhdGEtPmludm9rZUNhbGxiYWNrKGFyZ3MsIEpTQ2FsbGJhY2tEYXRhOjpDYWxs
YmFja1R5cGU6Ok9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiY2FsbGJhY2tX
aXRoTm9QYXJhbSIpLCByZXR1cm5lZEV4Y2VwdGlvbik7CisgICAgbV9kYXRhLT5pbnZva2VDYWxs
YmFjayhhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpPYmplY3QsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoc3RhdGUsICJjYWxsYmFja1dpdGhOb1BhcmFtIiksIHJldHVybmVkRXhj
ZXB0aW9uKTsKICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pCi0gICAgICAgIHJlcG9ydEV4Y2Vw
dGlvbihleGVjLCByZXR1cm5lZEV4Y2VwdGlvbik7CisgICAgICAgIHJlcG9ydEV4Y2VwdGlvbihz
dGF0ZSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgIHJldHVybiAhcmV0dXJuZWRFeGNlcHRpb247
CiB9CiAKQEAgLTE0NSwxNCArMTQ1LDE0IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNr
V2l0aEFycmF5UGFyYW0oUmVmUHRyPEZsb2F0MzJBcnJheT4gYXJyYXlQYXJhbSkKIAogICAgIEpT
TG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPnZtKCkpOwogCi0gICAgRXhl
Y1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAg
IEV4ZWNTdGF0ZSogc3RhdGUgPSBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7
CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKLSAgICBhcmdzLmFwcGVuZCh0b0pTKGV4
ZWMsIG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGFycmF5UGFyYW0pKSk7Cisg
ICAgYXJncy5hcHBlbmQodG9KUyhzdGF0ZSwgbV9kYXRhLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpn
ZXRQdHIoYXJyYXlQYXJhbSkpKTsKIAogICAgIE5ha2VkUHRyPEV4Y2VwdGlvbj4gcmV0dXJuZWRF
eGNlcHRpb247Ci0gICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdzLCBKU0NhbGxiYWNrRGF0
YTo6Q2FsbGJhY2tUeXBlOjpPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImNh
bGxiYWNrV2l0aEFycmF5UGFyYW0iKSwgcmV0dXJuZWRFeGNlcHRpb24pOworICAgIG1fZGF0YS0+
aW52b2tlQ2FsbGJhY2soYXJncywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCAiY2FsbGJhY2tXaXRoQXJyYXlQYXJhbSIp
LCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKQotICAgICAg
ICByZXBvcnRFeGNlcHRpb24oZXhlYywgcmV0dXJuZWRFeGNlcHRpb24pOworICAgICAgICByZXBv
cnRFeGNlcHRpb24oc3RhdGUsIHJldHVybmVkRXhjZXB0aW9uKTsKICAgICByZXR1cm4gIXJldHVy
bmVkRXhjZXB0aW9uOwogfQogCkBAIC0xNjUsMTUgKzE2NSwxNSBAQCBib29sIEpTVGVzdENhbGxi
YWNrOjpjYWxsYmFja1dpdGhTZXJpYWxpemVkU2NyaXB0VmFsdWVQYXJhbShQYXNzUmVmUHRyPFNl
cmlhbGl6ZQogCiAgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+
dm0oKSk7CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5n
bG9iYWxFeGVjKCk7CisgICAgRXhlY1N0YXRlKiBzdGF0ZSA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwotICAgIGFy
Z3MuYXBwZW5kKHNyelBhcmFtID8gc3J6UGFyYW0tPmRlc2VyaWFsaXplKGV4ZWMsIGNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpLCAwKSA6IGpzTnVsbCgpKTsKLSAgICBhcmdzLmFwcGVuZChqc1N0
cmluZ1dpdGhDYWNoZShleGVjLCBzdHJBcmcpKTsKKyAgICBhcmdzLmFwcGVuZChzcnpQYXJhbSA/
IHNyelBhcmFtLT5kZXNlcmlhbGl6ZShzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IDApIDoganNOdWxsKCkpOworICAgIGFyZ3MuYXBwZW5kKGpzU3RyaW5nV2l0aENhY2hlKHN0YXRl
LCBzdHJBcmcpKTsKIAogICAgIE5ha2VkUHRyPEV4Y2VwdGlvbj4gcmV0dXJuZWRFeGNlcHRpb247
Ci0gICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJh
Y2tUeXBlOjpPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImNhbGxiYWNrV2l0
aFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZVBhcmFtIiksIHJldHVybmVkRXhjZXB0aW9uKTsKKyAgICBt
X2RhdGEtPmludm9rZUNhbGxiYWNrKGFyZ3MsIEpTQ2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6
Ok9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgImNhbGxiYWNrV2l0aFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZVBhcmFtIiksIHJldHVybmVkRXhjZXB0aW9uKTsKICAgICBpZiAocmV0
dXJuZWRFeGNlcHRpb24pCi0gICAgICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCByZXR1cm5lZEV4
Y2VwdGlvbik7CisgICAgICAgIHJlcG9ydEV4Y2VwdGlvbihzdGF0ZSwgcmV0dXJuZWRFeGNlcHRp
b24pOwogICAgIHJldHVybiAhcmV0dXJuZWRFeGNlcHRpb247CiB9CiAKQEAgLTE4NiwxNCArMTg2
LDE0IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aFN0cmluZ0xpc3QoUGFzc1Jl
ZlB0cjxET01TdHJpbmdMaXN0PiBsaXN0UGFyYW0pCiAKICAgICBKU0xvY2tIb2xkZXIgbG9jayht
X2RhdGEtPmdsb2JhbE9iamVjdCgpLT52bSgpKTsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1f
ZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBFeGVjU3RhdGUqIHN0YXRl
ID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyIGFyZ3M7Ci0gICAgYXJncy5hcHBlbmQodG9KUyhleGVjLCBtX2RhdGEtPmdsb2Jh
bE9iamVjdCgpLCBXVEY6OmdldFB0cihsaXN0UGFyYW0pKSk7CisgICAgYXJncy5hcHBlbmQodG9K
UyhzdGF0ZSwgbV9kYXRhLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIobGlzdFBhcmFtKSkp
OwogCiAgICAgTmFrZWRQdHI8RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsKLSAgICBtX2Rh
dGEtPmludm9rZUNhbGxiYWNrKGFyZ3MsIEpTQ2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6Ok9i
amVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiY2FsbGJhY2tXaXRoU3RyaW5nTGlz
dCIpLCByZXR1cm5lZEV4Y2VwdGlvbik7CisgICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdz
LCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpPYmplY3QsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoc3RhdGUsICJjYWxsYmFja1dpdGhTdHJpbmdMaXN0IiksIHJldHVybmVkRXhjZXB0aW9u
KTsKICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pCi0gICAgICAgIHJlcG9ydEV4Y2VwdGlvbihl
eGVjLCByZXR1cm5lZEV4Y2VwdGlvbik7CisgICAgICAgIHJlcG9ydEV4Y2VwdGlvbihzdGF0ZSwg
cmV0dXJuZWRFeGNlcHRpb24pOwogICAgIHJldHVybiAhcmV0dXJuZWRFeGNlcHRpb247CiB9CiAK
QEAgLTIwNiwxNCArMjA2LDE0IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aEJv
b2xlYW4oYm9vbCBib29sUGFyYW0pCiAKICAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmds
b2JhbE9iamVjdCgpLT52bSgpKTsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xv
YmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBFeGVjU3RhdGUqIHN0YXRlID0gbV9kYXRh
LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVy
IGFyZ3M7CiAgICAgYXJncy5hcHBlbmQoanNCb29sZWFuKGJvb2xQYXJhbSkpOwogCiAgICAgTmFr
ZWRQdHI8RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsKLSAgICBtX2RhdGEtPmludm9rZUNh
bGxiYWNrKGFyZ3MsIEpTQ2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6Ok9iamVjdCwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyhleGVjLCAiY2FsbGJhY2tXaXRoQm9vbGVhbiIpLCByZXR1cm5lZEV4
Y2VwdGlvbik7CisgICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdzLCBKU0NhbGxiYWNrRGF0
YTo6Q2FsbGJhY2tUeXBlOjpPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoc3RhdGUsICJj
YWxsYmFja1dpdGhCb29sZWFuIiksIHJldHVybmVkRXhjZXB0aW9uKTsKICAgICBpZiAocmV0dXJu
ZWRFeGNlcHRpb24pCi0gICAgICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCByZXR1cm5lZEV4Y2Vw
dGlvbik7CisgICAgICAgIHJlcG9ydEV4Y2VwdGlvbihzdGF0ZSwgcmV0dXJuZWRFeGNlcHRpb24p
OwogICAgIHJldHVybiAhcmV0dXJuZWRFeGNlcHRpb247CiB9CiAKQEAgLTIyNiwxNSArMjI2LDE1
IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrUmVxdWlyZXNUaGlzVG9QYXNzKGludCBs
b25nUGFyYW0sIFRlc3ROb2RlKiB0ZXN0Tm9kCiAKICAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2Rh
dGEtPmdsb2JhbE9iamVjdCgpLT52bSgpKTsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0
YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBFeGVjU3RhdGUqIHN0YXRlID0g
bV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3VtZW50
QnVmZmVyIGFyZ3M7CiAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIobG9uZ1BhcmFtKSk7Ci0gICAg
YXJncy5hcHBlbmQodG9KUyhleGVjLCBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0
cih0ZXN0Tm9kZVBhcmFtKSkpOworICAgIGFyZ3MuYXBwZW5kKHRvSlMoc3RhdGUsIG1fZGF0YS0+
Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKHRlc3ROb2RlUGFyYW0pKSk7CiAKICAgICBOYWtl
ZFB0cjxFeGNlcHRpb24+IHJldHVybmVkRXhjZXB0aW9uOwotICAgIG1fZGF0YS0+aW52b2tlQ2Fs
bGJhY2soYXJncywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0LCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJjYWxsYmFja1JlcXVpcmVzVGhpc1RvUGFzcyIpLCByZXR1
cm5lZEV4Y2VwdGlvbik7CisgICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdzLCBKU0NhbGxi
YWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoc3Rh
dGUsICJjYWxsYmFja1JlcXVpcmVzVGhpc1RvUGFzcyIpLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAg
ICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKQotICAgICAgICByZXBvcnRFeGNlcHRpb24oZXhlYywg
cmV0dXJuZWRFeGNlcHRpb24pOworICAgICAgICByZXBvcnRFeGNlcHRpb24oc3RhdGUsIHJldHVy
bmVkRXhjZXB0aW9uKTsKICAgICByZXR1cm4gIXJldHVybmVkRXhjZXB0aW9uOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2Fs
bGJhY2suaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RD
YWxsYmFjay5oCmluZGV4IDAyYTVmNzRmOTNiOGRlZjRkODU1MWJkNWEyZjVmNDRjYzMwNjgwOWMu
LjViNTQ0YjBlNWMyZGVhZGZiYTgyZmIzMzEyN2I3ZmViYmU2Mjg3MTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFj
ay5oCkBAIC02MCw3ICs2MCw3IEBAIHByaXZhdGU6CiB9OwogCiBKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdENhbGxiYWNrKik7Ci1pbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RDYWxsYmFjayYgaW1wbCkgeyByZXR1cm4gdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QsICZpbXBsKTsgfQoraW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdENh
bGxiYWNrJiBpbXBsKSB7IHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICZpbXBsKTsg
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFja0Z1bmN0aW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFja0Z1bmN0
aW9uLmNwcAppbmRleCAxYjE0NGE3MWQzOTgwODIyNTcwZGY4MGU1NmFmNWVhZjc2M2IyMjNmLi4x
YTMzYTRkOTRhODBkOGY2NzE3N2ViZjI2NTk0YzEyOTFmMDg1NDliIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2tGdW5jdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dENhbGxiYWNrRnVuY3Rpb24uY3BwCkBAIC03MSwxNCArNzEsMTQgQEAgYm9vbCBKU1Rlc3RDYWxs
YmFja0Z1bmN0aW9uOjpjYWxsYmFja1dpdGhOb1BhcmFtKCkKIAogICAgIEpTTG9ja0hvbGRlciBs
b2NrKG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPnZtKCkpOwogCi0gICAgRXhlY1N0YXRlKiBleGVj
ID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgIEV4ZWNTdGF0ZSog
c3RhdGUgPSBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgTWFya2Vk
QXJndW1lbnRCdWZmZXIgYXJnczsKIAogICAgIE5ha2VkUHRyPEV4Y2VwdGlvbj4gcmV0dXJuZWRF
eGNlcHRpb247Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2Fs
bGJhY2tUeXBlOjpGdW5jdGlvbiwgSWRlbnRpZmllcigpLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAg
ICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKQotICAgICAgICByZXBvcnRFeGNlcHRpb24oZXhlYywg
cmV0dXJuZWRFeGNlcHRpb24pOworICAgICAgICByZXBvcnRFeGNlcHRpb24oc3RhdGUsIHJldHVy
bmVkRXhjZXB0aW9uKTsKICAgICByZXR1cm4gIXJldHVybmVkRXhjZXB0aW9uOwogfQogCkBAIC05
MSwxNSArOTEsMTUgQEAgYm9vbCBKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uOjpjYWxsYmFja1dpdGhB
cnJheVBhcmFtKFJlZlB0cjxGbG9hdDMyQXJyYXk+IGFycmF5UGEKIAogICAgIEpTTG9ja0hvbGRl
ciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPnZtKCkpOwogCi0gICAgRXhlY1N0YXRlKiBl
eGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgIEV4ZWNTdGF0
ZSogc3RhdGUgPSBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgTWFy
a2VkQXJndW1lbnRCdWZmZXIgYXJnczsKLSAgICBhcmdzLmFwcGVuZCh0b0pTKGV4ZWMsIG1fZGF0
YS0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGFycmF5UGFyYW0pKSk7CisgICAgYXJncy5h
cHBlbmQodG9KUyhzdGF0ZSwgbV9kYXRhLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoYXJy
YXlQYXJhbSkpKTsKIAogICAgIE5ha2VkUHRyPEV4Y2VwdGlvbj4gcmV0dXJuZWRFeGNlcHRpb247
Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
bV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBl
OjpGdW5jdGlvbiwgSWRlbnRpZmllcigpLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgaWYgKHJl
dHVybmVkRXhjZXB0aW9uKQotICAgICAgICByZXBvcnRFeGNlcHRpb24oZXhlYywgcmV0dXJuZWRF
eGNlcHRpb24pOworICAgICAgICByZXBvcnRFeGNlcHRpb24oc3RhdGUsIHJldHVybmVkRXhjZXB0
aW9uKTsKICAgICByZXR1cm4gIXJldHVybmVkRXhjZXB0aW9uOwogfQogCkBAIC0xMTIsMTYgKzEx
MiwxNiBAQCBib29sIEpTVGVzdENhbGxiYWNrRnVuY3Rpb246OmNhbGxiYWNrV2l0aFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZVBhcmFtKFBhc3NSZWZQdHI8UwogCiAgICAgSlNMb2NrSG9sZGVyIGxvY2so
bV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+dm0oKSk7CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBt
X2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAgRXhlY1N0YXRlKiBzdGF0
ZSA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1
bWVudEJ1ZmZlciBhcmdzOwotICAgIGFyZ3MuYXBwZW5kKHNyelBhcmFtID8gc3J6UGFyYW0tPmRl
c2VyaWFsaXplKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCAwKSA6IGpzTnVsbCgp
KTsKLSAgICBhcmdzLmFwcGVuZChqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBzdHJBcmcpKTsKKyAg
ICBhcmdzLmFwcGVuZChzcnpQYXJhbSA/IHNyelBhcmFtLT5kZXNlcmlhbGl6ZShzdGF0ZSwgY2Fz
dGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxsKCkpOworICAgIGFyZ3MuYXBwZW5k
KGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBzdHJBcmcpKTsKIAogICAgIE5ha2VkUHRyPEV4Y2Vw
dGlvbj4gcmV0dXJuZWRFeGNlcHRpb247Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdzLCBKU0Nh
bGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpGdW5jdGlvbiwgSWRlbnRpZmllcigpLCByZXR1cm5l
ZEV4Y2VwdGlvbik7CiAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKQotICAgICAgICByZXBvcnRF
eGNlcHRpb24oZXhlYywgcmV0dXJuZWRFeGNlcHRpb24pOworICAgICAgICByZXBvcnRFeGNlcHRp
b24oc3RhdGUsIHJldHVybmVkRXhjZXB0aW9uKTsKICAgICByZXR1cm4gIXJldHVybmVkRXhjZXB0
aW9uOwogfQogCkBAIC0xMzQsMTUgKzEzNCwxNSBAQCBib29sIEpTVGVzdENhbGxiYWNrRnVuY3Rp
b246OmNhbGxiYWNrV2l0aFN0cmluZ0xpc3QoUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBsaQog
CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+dm0oKSk7CiAK
LSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCk7CisgICAgRXhlY1N0YXRlKiBzdGF0ZSA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwotICAgIGFyZ3MuYXBwZW5k
KHRvSlMoZXhlYywgbV9kYXRhLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIobGlzdFBhcmFt
KSkpOworICAgIGFyZ3MuYXBwZW5kKHRvSlMoc3RhdGUsIG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCks
IFdURjo6Z2V0UHRyKGxpc3RQYXJhbSkpKTsKIAogICAgIE5ha2VkUHRyPEV4Y2VwdGlvbj4gcmV0
dXJuZWRFeGNlcHRpb247Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdzLCBKU0NhbGxiYWNrRGF0
YTo6Q2FsbGJhY2tUeXBlOjpGdW5jdGlvbiwgSWRlbnRpZmllcigpLCByZXR1cm5lZEV4Y2VwdGlv
bik7CiAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKQotICAgICAgICByZXBvcnRFeGNlcHRpb24o
ZXhlYywgcmV0dXJuZWRFeGNlcHRpb24pOworICAgICAgICByZXBvcnRFeGNlcHRpb24oc3RhdGUs
IHJldHVybmVkRXhjZXB0aW9uKTsKICAgICByZXR1cm4gIXJldHVybmVkRXhjZXB0aW9uOwogfQog
CkBAIC0xNTUsMTUgKzE1NSwxNSBAQCBib29sIEpTVGVzdENhbGxiYWNrRnVuY3Rpb246OmNhbGxi
YWNrV2l0aEJvb2xlYW4oYm9vbCBib29sUGFyYW0pCiAKICAgICBKU0xvY2tIb2xkZXIgbG9jayht
X2RhdGEtPmdsb2JhbE9iamVjdCgpLT52bSgpKTsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1f
ZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBFeGVjU3RhdGUqIHN0YXRl
ID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyIGFyZ3M7CiAgICAgYXJncy5hcHBlbmQoanNCb29sZWFuKGJvb2xQYXJhbSkpOwog
CiAgICAgTmFrZWRQdHI8RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsKLSAgICBVTlVTRURf
UEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBtX2RhdGEtPmludm9r
ZUNhbGxiYWNrKGFyZ3MsIEpTQ2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6OkZ1bmN0aW9uLCBJ
ZGVudGlmaWVyKCksIHJldHVybmVkRXhjZXB0aW9uKTsKICAgICBpZiAocmV0dXJuZWRFeGNlcHRp
b24pCi0gICAgICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCByZXR1cm5lZEV4Y2VwdGlvbik7Cisg
ICAgICAgIHJlcG9ydEV4Y2VwdGlvbihzdGF0ZSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgIHJl
dHVybiAhcmV0dXJuZWRFeGNlcHRpb247CiB9CiAKQEAgLTE3NiwxNiArMTc2LDE2IEBAIGJvb2wg
SlNUZXN0Q2FsbGJhY2tGdW5jdGlvbjo6Y2FsbGJhY2tSZXF1aXJlc1RoaXNUb1Bhc3MoaW50IGxv
bmdQYXJhbSwgVGVzdE5vZGUqCiAKICAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2Jh
bE9iamVjdCgpLT52bSgpKTsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFs
T2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBFeGVjU3RhdGUqIHN0YXRlID0gbV9kYXRhLT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFy
Z3M7CiAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIobG9uZ1BhcmFtKSk7Ci0gICAgYXJncy5hcHBl
bmQodG9KUyhleGVjLCBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cih0ZXN0Tm9k
ZVBhcmFtKSkpOworICAgIGFyZ3MuYXBwZW5kKHRvSlMoc3RhdGUsIG1fZGF0YS0+Z2xvYmFsT2Jq
ZWN0KCksIFdURjo6Z2V0UHRyKHRlc3ROb2RlUGFyYW0pKSk7CiAKICAgICBOYWtlZFB0cjxFeGNl
cHRpb24+IHJldHVybmVkRXhjZXB0aW9uOwotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIG1fZGF0YS0+aW52b2tlQ2FsbGJhY2soYXJncywgSlND
YWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6RnVuY3Rpb24sIElkZW50aWZpZXIoKSwgcmV0dXJu
ZWRFeGNlcHRpb24pOwogICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvbikKLSAgICAgICAgcmVwb3J0
RXhjZXB0aW9uKGV4ZWMsIHJldHVybmVkRXhjZXB0aW9uKTsKKyAgICAgICAgcmVwb3J0RXhjZXB0
aW9uKHN0YXRlLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgcmV0dXJuICFyZXR1cm5lZEV4Y2Vw
dGlvbjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdENhbGxiYWNrRnVuY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFja0Z1bmN0aW9uLmgKaW5kZXggMTM0MjU3ZGE1
ZTBhOWRjMzdmZmEyMTlmODI4OTAxNTVlZTQ2ZjE3ZS4uOWNjMzRkMTMzMDdkNWM2ODQ1OWRlOTc4
MTcwYzkzMGMwOGRlN2E5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrRnVuY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbi5oCkBAIC01
OSw3ICs1OSw3IEBAIHByaXZhdGU6CiB9OwogCiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdENhbGxiYWNrRnVuY3Rpb24qKTsKLWlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgVGVzdENhbGxiYWNrRnVuY3Rpb24mIGltcGwpIHsgcmV0dXJuIHRv
SlMoZXhlYywgZ2xvYmFsT2JqZWN0LCAmaW1wbCk7IH0KK2lubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFRlc3RDYWxsYmFja0Z1bmN0aW9uJiBpbXBsKSB7IHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxP
YmplY3QsICZpbXBsKTsgfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21Db25z
dHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VP
YmplY3QuY3BwCmluZGV4IDA2Y2E5OTZhNzQ3MWUxM2U0YmZlN2I2NzZlZDZhMDY3Y2EwYjg5MTYu
LjkwMGUzZWEwNGEwYjJiYzhhYmFiYzU3YWVmOTZiZmZiNTMzYzlmMzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21Db25zdHJ1
Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNl
T2JqZWN0LmNwcApAQCAtMTQ2LDE0ICsxNDYsMTQgQEAgSlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JX
aXRoTm9JbnRlcmZhY2VPYmplY3Q6On5KU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGUK
ICAgICByZWxlYXNlSW1wbCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDdXN0b21Db25z
dHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29k
ZWRKU1ZhbHVlIGpzVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Q29u
c3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBKU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhO
b0ludGVyZmFjZU9iamVjdFByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdFByb3RvdHlwZSo+KGJhc2VW
YWx1ZSk7CiAgICAgaWYgKCFkb21PYmplY3QpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMpOwotICAgIEpTVmFsdWUgY29uc3RydWN0b3IgPSBKU1Rlc3RDdXN0b21Db25zdHJ1
Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdENvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYy0+dm0oKSwg
SlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3RDb25zdHJ1Y3Rvcjo6
Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCksIGRv
bU9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKSwganNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSk7CisgICAgSlNWYWx1ZSBjb25zdHJ1Y3RvciA9IEpT
VGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Q29uc3RydWN0b3I6OmNy
ZWF0ZShzdGF0ZS0+dm0oKSwgSlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VP
YmplY3RDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKHN0YXRlLT52bSgpLCBkb21PYmplY3Qt
Pmdsb2JhbE9iamVjdCgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5
cGUoKSksIGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0
KCkpKTsKICAgICAvLyBTaGFkb3dpbmcgY29uc3RydWN0b3IgcHJvcGVydHkgdG8gZW5zdXJlIHJl
dXNpbmcgdGhlIHNhbWUgY29uc3RydWN0b3Igb2JqZWN0Ci0gICAgZG9tT2JqZWN0LT5wdXREaXJl
Y3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBjb25zdHJ1
Y3RvciwgRG9udEVudW0gfCBSZWFkT25seSk7CisgICAgZG9tT2JqZWN0LT5wdXREaXJlY3Qoc3Rh
dGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGNvbnN0cnVjdG9y
LCBEb250RW51bSB8IFJlYWRPbmx5KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0
cnVjdG9yKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tQ29u
c3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QuaAppbmRleCA5NTdkYjZjNDY0OWU0OTkyOWJk
NTE3OWU0ODViZThiNmRhNjRmYmVkLi42MjJmODY2NjUwNDI2YWQwZGQ3MjA1MmJiMmFkMDcwNWQ3
OWE0MWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tQ29uc3Ry
dWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QuaApAQCAtNzksNyArNzksNyBAQCBpbmxpbmUgSlND
OjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmLCBUZXN0Q3Vz
dG9tQ29uc3RydWN0bwogfQogCiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpT
RE9NR2xvYmFsT2JqZWN0KiwgVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2Jq
ZWN0Kik7Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhO
b0ludGVyZmFjZU9iamVjdCYgaW1wbCkgeyByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3Qs
ICZpbXBsKTsgfQoraW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdEN1c3RvbUNvbnN0cnVjdG9y
V2l0aE5vSW50ZXJmYWNlT2JqZWN0JiBpbXBsKSB7IHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxP
YmplY3QsICZpbXBsKTsgfQogSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVj
U3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0lu
dGVyZmFjZU9iamVjdCopOwogCiAvLyBDdXN0b20gY29uc3RydWN0b3IKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdl
dHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCmluZGV4IDlmM2NlNGUyMjU1NjMyZjlmMmYyOTYzYjI5YWZk
YWFiMjliNjc0ZGEuLmM5YmUxYmNiMDZjNTI4MTI5Njk5OGQ3NmMwOWVjZjFlOWRkYWYyZDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RD
dXN0b21OYW1lZEdldHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcApAQCAtMTYwLDE5ICsxNjAsMTkg
QEAgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6On5KU1Rlc3RDdXN0b21OYW1lZEdldHRlcigpCiAg
ICAgcmVsZWFzZUltcGwoKTsKIH0KIAotYm9vbCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6Z2V0
T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU1Rlc3RDdXN0
b21OYW1lZEdldHRlcjo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdEN1c3RvbU5hbWVkR2V0
dGVyKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7Ci0gICAgaWYgKGdldFN0YXRpY1ZhbHVlU2xvdDxKU1Rlc3RDdXN0b21OYW1lZEdl
dHRlciwgQmFzZT4oZXhlYywgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJUYWJsZSwgdGhpc09iamVj
dCwgcHJvcGVydHlOYW1lLCBzbG90KSkKKyAgICBpZiAoZ2V0U3RhdGljVmFsdWVTbG90PEpTVGVz
dEN1c3RvbU5hbWVkR2V0dGVyLCBCYXNlPihzdGF0ZSwgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJU
YWJsZSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgSlNWYWx1ZSBwcm90byA9IHRoaXNPYmplY3QtPnByb3RvdHlwZSgpOwotICAgIGlm
IChwcm90by5pc09iamVjdCgpICYmIGpzQ2FzdDxKU09iamVjdCo+KHByb3RvKS0+aGFzUHJvcGVy
dHkoZXhlYywgcHJvcGVydHlOYW1lKSkKKyAgICBpZiAocHJvdG8uaXNPYmplY3QoKSAmJiBqc0Nh
c3Q8SlNPYmplY3QqPihwcm90byktPmhhc1Byb3BlcnR5KHN0YXRlLCBwcm9wZXJ0eU5hbWUpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAodGhpc09iamVjdC0+Y2xhc3NJbmZvKCkg
PT0gaW5mbygpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWU7Ci0gICAgICAgIGlmICh0aGlzT2Jq
ZWN0LT5uYW1lR2V0dGVyKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUpKSB7CisgICAgICAgIGlm
ICh0aGlzT2JqZWN0LT5uYW1lR2V0dGVyKHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKSkgewog
ICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBSZWFkT25seSB8IERvbnREZWxl
dGUgfCBEb250RW51bSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KQEAgLTE4MCwyNyArMTgwLDI3IEBAIGJvb2wgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6Omdl
dE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1ib29sIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXI6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyKj4ob2JqZWN0KTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAg
SWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KTsK
KyAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGlu
ZGV4KTsKICAgICBpZiAodGhpc09iamVjdC0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKSB7CiAgICAg
ICAgIEpTVmFsdWUgdmFsdWU7Ci0gICAgICAgIGlmICh0aGlzT2JqZWN0LT5uYW1lR2V0dGVyKGV4
ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUpKSB7CisgICAgICAgIGlmICh0aGlzT2JqZWN0LT5uYW1l
R2V0dGVyKHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKSkgewogICAgICAgICAgICAgc2xvdC5z
ZXRWYWx1ZSh0aGlzT2JqZWN0LCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSwgdmFs
dWUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0
dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaW5k
ZXgsIHNsb3QpOworICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRo
aXNPYmplY3QsIHN0YXRlLCBpbmRleCwgc2xvdCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVz
dEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCos
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUg
anNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU09i
amVjdCosIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIEpT
VGVzdEN1c3RvbU5hbWVkR2V0dGVyKiBkb21PYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEN1
c3RvbU5hbWVkR2V0dGVyKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmICgh
ZG9tT2JqZWN0KQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpnZXRDb25zdHJ1
Y3RvcihleGVjLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9t
T2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOwogfQogCiBKU1ZhbHVlIEpTVGVzdEN1c3RvbU5hbWVk
R2V0dGVyOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCkBAIC0yMDgsMTggKzIwOCwxOCBAQCBKU1ZhbHVlIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVy
OjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgIHJl
dHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9y
Pih2bSwganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5
cGVGdW5jdGlvbkFub3RoZXJGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlRnVuY3Rpb25B
bm90aGVyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRo
aXNWYWx1ZSgpOwogICAgIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiBjYXN0ZWRUaGlzID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3RDdXN0b21OYW1lZEdldHRlcio+KHRoaXNWYWx1ZSk7CiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJv
cigqZXhlYywgIlRlc3RDdXN0b21OYW1lZEdldHRlciIsICJhbm90aGVyRnVuY3Rpb24iKTsKKyAg
ICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXIiLCAiYW5vdGhlckZ1bmN0aW9uIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
UyhjYXN0ZWRUaGlzLCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6aW5mbygpKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgU3RyaW5nIHN0ciA9IGV4ZWMt
PmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtF
TFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CisgICAgU3RyaW5nIHN0ciA9IHN0YXRl
LT5hcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRlKTsKKyAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmFub3RoZXJGdW5jdGlvbihzdHIpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0
b21OYW1lZEdldHRlci5oCmluZGV4IDAxY2QzM2FhNWMyNTA5MGE3M2Q3YmM1NTU5OTNkMzE4NmVj
YjQzODkuLjY1YTMzZGJmYjljZDI4OWVhODNkNmMyNTRhMTQ0YWQ0YWVjMGJkZGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21O
YW1lZEdldHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5oCkBAIC04Niw3ICs4Niw3IEBAIGlubGluZSBKU0M6
OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYsIFRlc3RDdXN0
b21OYW1lZEdldHRlCiB9CiAKIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNE
T01HbG9iYWxPYmplY3QqLCBUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqKTsKLWlubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgVGVzdEN1c3RvbU5hbWVkR2V0dGVyJiBpbXBsKSB7IHJldHVybiB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCwgJmltcGwpOyB9CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXImIGltcGwpIHsgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwg
JmltcGwpOyB9CiBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSos
IEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdEN1c3RvbU5hbWVkR2V0dGVyKik7CiAKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50
Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCmluZGV4IDJiMDQ2NDQyNDZmZDQxNWVkMzZiODE1
NTdkNzFjN2Q2MDU5MmQ2M2MuLmFjMzQ4MmZjNTg2ZDdhYTA2NWYwYjk0MTRhZGY4MWNhOWE3YmZi
MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKQEAgLTg4LDMwICs4OCwz
MCBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1
Y3REYXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpDb25zdHJ1Y3REYXRhJik7CiB9OwogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6
Y29uc3RydWN0SlNUZXN0RXZlbnRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6
Y29uc3RydWN0SlNUZXN0RXZlbnRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlKQogewotICAg
IGF1dG8qIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0
cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIGF1dG8qIGpzQ29uc3RydWN0b3IgPSBqc0Nh
c3Q8SlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKj4oc3RhdGUtPmNhbGxlZSgpKTsK
IAotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGV4ZWN1dGlvbkNvbnRleHQgPSBqc0NvbnN0
cnVjdG9yLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgaWYgKCFleGVjdXRpb25Db250
ZXh0KQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJlZmVyZW5jZUVy
cm9yKGV4ZWMsICJDb25zdHJ1Y3RvciBhc3NvY2lhdGVkIGV4ZWN1dGlvbiBjb250ZXh0IGlzIHVu
YXZhaWxhYmxlIikpOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHN0YXRldXRpb25Db250
ZXh0ID0ganNDb25zdHJ1Y3Rvci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlmICgh
c3RhdGV1dGlvbkNvbnRleHQpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNy
ZWF0ZVJlZmVyZW5jZUVycm9yKHN0YXRlLCAiQ29uc3RydWN0b3IgYXNzb2NpYXRlZCBzdGF0ZXV0
aW9uIGNvbnRleHQgaXMgdW5hdmFpbGFibGUiKSk7CiAKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+
YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
c3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAKLSAgICBBdG9t
aWNTdHJpbmcgZXZlbnRUeXBlID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnRv
QXRvbWljU3RyaW5nKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgQXRvbWljU3RyaW5nIGV2ZW50VHlwZSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1N0
cmluZyhzdGF0ZSktPnRvQXRvbWljU3RyaW5nKHN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIAogICAgIFRlc3RFdmVudENvbnN0cnVjdG9ySW5pdCBldmVudEluaXQ7CiAK
LSAgICBKU1ZhbHVlIGluaXRpYWxpemVyVmFsdWUgPSBleGVjLT5hcmd1bWVudCgxKTsKKyAgICBK
U1ZhbHVlIGluaXRpYWxpemVyVmFsdWUgPSBzdGF0ZS0+YXJndW1lbnQoMSk7CiAgICAgaWYgKCFp
bml0aWFsaXplclZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgICAgLy8gR2l2ZW4g
dGhlIGFib3ZlIHRlc3QsIHRoaXMgd2lsbCBhbHdheXMgeWllbGQgYW4gb2JqZWN0LgotICAgICAg
ICBKU09iamVjdCogaW5pdGlhbGl6ZXJPYmplY3QgPSBpbml0aWFsaXplclZhbHVlLnRvT2JqZWN0
KGV4ZWMpOworICAgICAgICBKU09iamVjdCogaW5pdGlhbGl6ZXJPYmplY3QgPSBpbml0aWFsaXpl
clZhbHVlLnRvT2JqZWN0KHN0YXRlKTsKIAogICAgICAgICAvLyBDcmVhdGUgdGhlIGRpY3Rpb25h
cnkgd3JhcHBlciBmcm9tIHRoZSBpbml0aWFsaXplciBvYmplY3QuCi0gICAgICAgIEpTRGljdGlv
bmFyeSBkaWN0aW9uYXJ5KGV4ZWMsIGluaXRpYWxpemVyT2JqZWN0KTsKKyAgICAgICAgSlNEaWN0
aW9uYXJ5IGRpY3Rpb25hcnkoc3RhdGUsIGluaXRpYWxpemVyT2JqZWN0KTsKIAogICAgICAgICAv
LyBBdHRlbXB0IHRvIGZpbGwgaW4gdGhlIEV2ZW50SW5pdC4KICAgICAgICAgaWYgKCFmaWxsVGVz
dEV2ZW50Q29uc3RydWN0b3JJbml0KGV2ZW50SW5pdCwgZGljdGlvbmFyeSkpCkBAIC0xMTksNyAr
MTE5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RFdmVudENvbnN0cnVj
dG9yQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTVGVzdEUKICAgICB9CiAKICAgICBSZWZQdHI8VGVz
dEV2ZW50Q29uc3RydWN0b3I+IGV2ZW50ID0gVGVzdEV2ZW50Q29uc3RydWN0b3I6OmNyZWF0ZShl
dmVudFR5cGUsIGV2ZW50SW5pdCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTKGV4
ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBldmVudC5nZXQoKSkpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUyhzdGF0ZSwganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2Jq
ZWN0KCksIGV2ZW50LmdldCgpKSk7CiB9CiAKIGJvb2wgZmlsbFRlc3RFdmVudENvbnN0cnVjdG9y
SW5pdChUZXN0RXZlbnRDb25zdHJ1Y3RvckluaXQmIGV2ZW50SW5pdCwgSlNEaWN0aW9uYXJ5JiBk
aWN0aW9uYXJ5KQpAQCAtMTk3LDQ2ICsxOTcsNDYgQEAgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6
fkpTVGVzdEV2ZW50Q29uc3RydWN0b3IoKQogICAgIHJlbGVhc2VJbXBsKCk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMShFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjEoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlz
VmFsdWUpOwogICAgIEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqIGNhc3RlZFRoaXMgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5h
bWljQ2FzdDxKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlKj4oc2xvdEJhc2UpKQotICAg
ICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RF
dmVudENvbnN0cnVjdG9yIiwgImF0dHIxIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5
cGVFcnJvcigqZXhlYywgIlRlc3RFdmVudENvbnN0cnVjdG9yIiwgImF0dHIxIik7CisgICAgICAg
ICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RFdmVu
dENvbnN0cnVjdG9yIiwgImF0dHIxIik7CisgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVF
cnJvcigqc3RhdGUsICJUZXN0RXZlbnRDb25zdHJ1Y3RvciIsICJhdHRyMSIpOwogICAgIH0KICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgaW1wbC5hdHRyMSgpKTsKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmF0dHIxKCkpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVu
dENvbnN0cnVjdG9yQXR0cjIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNU
ZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90
QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5V
U0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RF
dmVudENvbnN0cnVjdG9yKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RFdmVudENv
bnN0cnVjdG9yKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0RXZlbnRD
b25zdHJ1Y3RvclByb3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBv
cnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0RXZlbnRDb25zdHJ1Y3RvciIsICJh
dHRyMiIpOwotICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0
RXZlbnRDb25zdHJ1Y3RvciIsICJhdHRyMiIpOworICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERl
cHJlY2F0ZWRHZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0RXZlbnRDb25zdHJ1Y3RvciIsICJhdHRy
MiIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdEV2
ZW50Q29uc3RydWN0b3IiLCAiYXR0cjIiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPmltcGwoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKGV4
ZWMsIGltcGwuYXR0cjIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNo
ZShzdGF0ZSwgaW1wbC5hdHRyMigpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CiB9CiAKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUs
IFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZVZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5
cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3Rv
dHlwZSo+KGJhc2VWYWx1ZSk7CiAgICAgaWYgKCFkb21PYmplY3QpCi0gICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0
RXZlbnRDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0b3IoZXhlYy0+dm0oKSwgZG9tT2JqZWN0LT5n
bG9iYWxPYmplY3QoKSkpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjpnZXRD
b25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOwogfQog
CiBKU1ZhbHVlIEpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rv
ci5oCmluZGV4IDg1YjMyNzIxMjQ5NjA0ZmE0MWMxZmIzZWNlMWU3MDI1OTc4ZWJlNGIuLjc0NzFl
MDQ3Njg5ZWI3YzY0Y2JiMjUwYzU0YzBkNjAwZTIzN2Q2YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50
Q29uc3RydWN0b3IuaApAQCAtODIsNyArODIsNyBAQCBpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3du
ZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmLCBUZXN0RXZlbnRDb25zdHJ1Y3Rvcgog
fQogCiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0
KiwgVGVzdEV2ZW50Q29uc3RydWN0b3IqKTsKLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdEV2
ZW50Q29uc3RydWN0b3ImIGltcGwpIHsgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCAm
aW1wbCk7IH0KK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RFdmVudENvbnN0cnVjdG9yJiBp
bXBsKSB7IHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICZpbXBsKTsgfQogSlNDOjpK
U1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVj
dCosIFRlc3RFdmVudENvbnN0cnVjdG9yKik7CiAKIGJvb2wgZmlsbFRlc3RFdmVudENvbnN0cnVj
dG9ySW5pdChUZXN0RXZlbnRDb25zdHJ1Y3RvckluaXQmLCBKU0RpY3Rpb25hcnkmKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVu
dFRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RXZlbnRUYXJnZXQuY3BwCmluZGV4IGUwYjBmZjJkNzU0MjNjNzY2MTA2MjJkMDg1NzM5YTgx
NWRkNjg5ZTAuLjEzNmFhYzkxMzM3ZTJkMGNiMzQ5MGI0MTIzYzQ2ZWEwZmQ4N2U2ZTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVu
dFRhcmdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEV2ZW50VGFyZ2V0LmNwcApAQCAtMTcyLDcgKzE3Miw3IEBAIEpTVGVzdEV2ZW50VGFy
Z2V0Ojp+SlNUZXN0RXZlbnRUYXJnZXQoKQogICAgIHJlbGVhc2VJbXBsKCk7CiB9CiAKLWJvb2wg
SlNUZXN0RXZlbnRUYXJnZXQ6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYg
c2xvdCkKK2Jvb2wgSlNUZXN0RXZlbnRUYXJnZXQ6OmdldE93blByb3BlcnR5U2xvdChKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rl
c3RFdmVudFRhcmdldCo+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTgwLDE4ICsxODAsMTggQEAgYm9vbCBKU1Rlc3RFdmVu
dFRhcmdldDo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgUHIKICAgICBpZiAob3B0aW9uYWxJbmRleCAmJiBvcHRpb25hbEluZGV4LnZhbHVlKCkg
PCB0aGlzT2JqZWN0LT5pbXBsKCkubGVuZ3RoKCkpIHsKICAgICAgICAgdW5zaWduZWQgaW5kZXgg
PSBvcHRpb25hbEluZGV4LnZhbHVlKCk7CiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSBE
b250RGVsZXRlIHwgUmVhZE9ubHk7Ci0gICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwg
YXR0cmlidXRlcywgdG9KUyhleGVjLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgdGhpc09i
amVjdC0+aW1wbCgpLml0ZW0oaW5kZXgpKSk7CisgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09i
amVjdCwgYXR0cmlidXRlcywgdG9KUyhzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCks
IHRoaXNPYmplY3QtPmltcGwoKS5pdGVtKGluZGV4KSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9Ci0gICAgaWYgKGdldFN0YXRpY1ZhbHVlU2xvdDxKU1Rlc3RFdmVudFRhcmdldCwgQmFz
ZT4oZXhlYywgSlNUZXN0RXZlbnRUYXJnZXRUYWJsZSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1l
LCBzbG90KSkKKyAgICBpZiAoZ2V0U3RhdGljVmFsdWVTbG90PEpTVGVzdEV2ZW50VGFyZ2V0LCBC
YXNlPihzdGF0ZSwgSlNUZXN0RXZlbnRUYXJnZXRUYWJsZSwgdGhpc09iamVjdCwgcHJvcGVydHlO
YW1lLCBzbG90KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgSlNWYWx1ZSBwcm90byA9IHRo
aXNPYmplY3QtPnByb3RvdHlwZSgpOwotICAgIGlmIChwcm90by5pc09iamVjdCgpICYmIGpzQ2Fz
dDxKU09iamVjdCo+KHByb3RvKS0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkKKyAg
ICBpZiAocHJvdG8uaXNPYmplY3QoKSAmJiBqc0Nhc3Q8SlNPYmplY3QqPihwcm90byktPmhhc1By
b3BlcnR5KHN0YXRlLCBwcm9wZXJ0eU5hbWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBpZiAodGhpc09iamVjdC0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKSB7CiAgICAgICAgIEpTVmFs
dWUgdmFsdWU7Ci0gICAgICAgIGlmICh0aGlzT2JqZWN0LT5uYW1lR2V0dGVyKGV4ZWMsIHByb3Bl
cnR5TmFtZSwgdmFsdWUpKSB7CisgICAgICAgIGlmICh0aGlzT2JqZWN0LT5uYW1lR2V0dGVyKHN0
YXRlLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKSkgewogICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0
aGlzT2JqZWN0LCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSwgdmFsdWUpOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTE5OSw0MSArMTk5LDQxIEBAIGJv
b2wgSlNUZXN0RXZlbnRUYXJnZXQ6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEpTVGVz
dEV2ZW50VGFyZ2V0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jv
b2wgSlNUZXN0RXZlbnRUYXJnZXQ6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdEV2ZW50VGFyZ2V0
Kj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CiAgICAgaWYgKGluZGV4IDwgdGhpc09iamVjdC0+aW1wbCgpLmxlbmd0aCgpKSB7CiAg
ICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSBEb250RGVsZXRlIHwgUmVhZE9ubHk7Ci0gICAg
ICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgYXR0cmlidXRlcywgdG9KUyhleGVjLCB0aGlz
T2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgdGhpc09iamVjdC0+aW1wbCgpLml0ZW0oaW5kZXgpKSk7
CisgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgYXR0cmlidXRlcywgdG9KUyhzdGF0
ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIHRoaXNPYmplY3QtPmltcGwoKS5pdGVtKGlu
ZGV4KSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgSWRlbnRpZmllciBwcm9w
ZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KTsKKyAgICBJZGVudGlmaWVy
IHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKICAgICBpZiAo
dGhpc09iamVjdC0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFs
dWU7Ci0gICAgICAgIGlmICh0aGlzT2JqZWN0LT5uYW1lR2V0dGVyKGV4ZWMsIHByb3BlcnR5TmFt
ZSwgdmFsdWUpKSB7CisgICAgICAgIGlmICh0aGlzT2JqZWN0LT5uYW1lR2V0dGVyKHN0YXRlLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlKSkgewogICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2Jq
ZWN0LCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSwgdmFsdWUpOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIEJhc2U6OmdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaW5kZXgsIHNsb3QpOworICAg
IHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXNPYmplY3QsIHN0YXRl
LCBpbmRleCwgc2xvdCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50VGFyZ2V0Q29u
c3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0RXZlbnRUYXJnZXRDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCosIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIEpTVGVzdEV2ZW50VGFyZ2V0KiBkb21PYmplY3Qg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdEV2ZW50VGFyZ2V0Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwogICAgIGlmICghZG9tT2JqZWN0KQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihleGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdEV2ZW50VGFyZ2V0
OjpnZXRDb25zdHJ1Y3RvcihleGVjLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7
CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVGVzdEV2ZW50VGFyZ2V0OjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0o
KSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOwogfQogCi12b2lkIEpTVGVzdEV2ZW50VGFy
Z2V0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2Rl
KQordm9pZCBKU1Rlc3RFdmVudFRhcmdldDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU1Rlc3RFdmVudFRhcmdldCo+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGNvdW50
ID0gdGhpc09iamVjdC0+aW1wbCgpLmxlbmd0aCgpOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAg
cHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7Ci0gICAgQmFzZTo6
Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2Rl
KTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaSkp
OworICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgc3RhdGUsIHByb3Bl
cnR5TmFtZXMsIG1vZGUpOwogfQogCiBKU1ZhbHVlIEpTVGVzdEV2ZW50VGFyZ2V0OjpnZXRDb25z
dHJ1Y3RvcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCkBAIC0yNDEsNzAg
KzI0MSw3MCBAQCBKU1ZhbHVlIEpTVGVzdEV2ZW50VGFyZ2V0OjpnZXRDb25zdHJ1Y3RvcihWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgcmV0dXJuIGdldERPTUNvbnN0
cnVjdG9yPEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3I+KHZtLCBqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uSXRlbShFeGVjU3RhdGUqIGV4
ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEV2ZW50VGFyZ2V0UHJvdG90
eXBlRnVuY3Rpb25JdGVtKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50
aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RFdmVudFRhcmdldCogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0RXZlbnRUYXJnZXQqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJU
ZXN0RXZlbnRUYXJnZXQiLCAiaXRlbSIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVy
cm9yKCpzdGF0ZSwgIlRlc3RFdmVudFRhcmdldCIsICJpdGVtIik7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RFdmVudFRhcmdldDo6aW5mbygpKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGlmIChVTkxJS0VMWShleGVj
LT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVj
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgdW5zaWduZWQgaW5k
ZXggPSB0b1VJbnQzMihleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7
Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOworICAgIHVu
c2lnbmVkIGluZGV4ID0gdG9VSW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFs
Q29udmVyc2lvbik7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgSlNWYWx1
ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6Omdl
dFB0cihpbXBsLml0ZW0oaW5kZXgpKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRl
LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC5pdGVtKGluZGV4
KSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uQWRk
RXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25BZGRFdmVudExpc3RlbmVyKEV4
ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFs
dWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBK
U1Rlc3RFdmVudFRhcmdldCogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0RXZlbnRU
YXJnZXQqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAg
ICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0RXZlbnRUYXJnZXQiLCAi
YWRkRXZlbnRMaXN0ZW5lciIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RFdmVudFRhcmdldCIsICJhZGRFdmVudExpc3RlbmVyIik7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RFdmVudFRhcmdldDo6aW5mbygp
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIEpTVmFsdWUgbGlz
dGVuZXIgPSBleGVjLT5hcmd1bWVudCgxKTsKKyAgICBKU1ZhbHVlIGxpc3RlbmVyID0gc3RhdGUt
PmFyZ3VtZW50KDEpOwogICAgIGlmIChVTkxJS0VMWSghbGlzdGVuZXIuaXNPYmplY3QoKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgaW1wbC5h
ZGRFdmVudExpc3RlbmVyKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT50b0F0b21p
Y1N0cmluZyhleGVjKSwgY3JlYXRlSlNFdmVudExpc3RlbmVyRm9yQWRkKCpleGVjLCAqYXNPYmpl
Y3QobGlzdGVuZXIpLCAqY2FzdGVkVGhpcyksIGV4ZWMtPmFyZ3VtZW50KDIpLnRvQm9vbGVhbihl
eGVjKSk7CisgICAgaW1wbC5hZGRFdmVudExpc3RlbmVyKHN0YXRlLT5hcmd1bWVudCgwKS50b1N0
cmluZyhzdGF0ZSktPnRvQXRvbWljU3RyaW5nKHN0YXRlKSwgY3JlYXRlSlNFdmVudExpc3RlbmVy
Rm9yQWRkKCpzdGF0ZSwgKmFzT2JqZWN0KGxpc3RlbmVyKSwgKmNhc3RlZFRoaXMpLCBzdGF0ZS0+
YXJndW1lbnQoMikudG9Cb29sZWFuKHN0YXRlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uUmVtb3ZlRXZlbnRMaXN0ZW5lcihFeGVjU3Rh
dGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEV2ZW50VGFyZ2V0
UHJvdG90eXBlRnVuY3Rpb25SZW1vdmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7
Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RFdmVudFRhcmdldCog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0RXZlbnRUYXJnZXQqPih0aGlzVmFsdWUp
OwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1Ro
aXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0RXZlbnRUYXJnZXQiLCAicmVtb3ZlRXZlbnRMaXN0ZW5l
ciIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RFdmVu
dFRhcmdldCIsICJyZW1vdmVFdmVudExpc3RlbmVyIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RFdmVudFRhcmdldDo6aW5mbygpKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIEpTVmFsdWUgbGlzdGVuZXIgPSBleGVj
LT5hcmd1bWVudCgxKTsKKyAgICBKU1ZhbHVlIGxpc3RlbmVyID0gc3RhdGUtPmFyZ3VtZW50KDEp
OwogICAgIGlmIChVTkxJS0VMWSghbGlzdGVuZXIuaXNPYmplY3QoKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgaW1wbC5yZW1vdmVFdmVudExp
c3RlbmVyKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT50b0F0b21pY1N0cmluZyhl
eGVjKSwgY3JlYXRlSlNFdmVudExpc3RlbmVyRm9yUmVtb3ZlKCpleGVjLCAqYXNPYmplY3QobGlz
dGVuZXIpLCAqY2FzdGVkVGhpcykucHRyKCksIGV4ZWMtPmFyZ3VtZW50KDIpLnRvQm9vbGVhbihl
eGVjKSk7CisgICAgaW1wbC5yZW1vdmVFdmVudExpc3RlbmVyKHN0YXRlLT5hcmd1bWVudCgwKS50
b1N0cmluZyhzdGF0ZSktPnRvQXRvbWljU3RyaW5nKHN0YXRlKSwgY3JlYXRlSlNFdmVudExpc3Rl
bmVyRm9yUmVtb3ZlKCpzdGF0ZSwgKmFzT2JqZWN0KGxpc3RlbmVyKSwgKmNhc3RlZFRoaXMpLnB0
cigpLCBzdGF0ZS0+YXJndW1lbnQoMikudG9Cb29sZWFuKHN0YXRlKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uRGlzcGF0Y2hFdmVudChF
eGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEV2ZW50
VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25EaXNwYXRjaEV2ZW50KEV4ZWNTdGF0ZSogc3RhdGUpCiB7
Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RFdmVudFRhcmdldCog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0RXZlbnRUYXJnZXQqPih0aGlzVmFsdWUp
OwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1Ro
aXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0RXZlbnRUYXJnZXQiLCAiZGlzcGF0Y2hFdmVudCIpOwor
ICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RFdmVudFRhcmdl
dCIsICJkaXNwYXRjaEV2ZW50Iik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0
ZWRUaGlzLCBKU1Rlc3RFdmVudFRhcmdldDo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+aW1wbCgpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihleGVjKSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
LSAgICBFdmVudCogZXZ0ID0gSlNFdmVudDo6dG9XcmFwcGVkKGV4ZWMtPmFyZ3VtZW50KDApKTsK
LSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIEV2ZW50KiBldnQg
PSBKU0V2ZW50Ojp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9vbGVhbihpbXBsLmRp
c3BhdGNoRXZlbnQoZXZ0LCBlYykpOwogCi0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsK
KyAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmgKaW5kZXggZGE3NWEzODMyNWUw
NTVhYjhhYzIyMGYwYmZjMTJkYmZjZDgxYjViMS4uMmVkYjY0Y2FjYmRhYzczZDFiOGYxM2E3MTRk
MzQ1NDVkNTQyYjg2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmgKQEAgLTkwLDcgKzkwLDcgQEAg
aW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxk
JiwgVGVzdEV2ZW50VGFyZ2V0KikKIH0KIAogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RFdmVudFRhcmdldCopOwotaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBUZXN0RXZlbnRUYXJnZXQmIGltcGwpIHsgcmV0dXJuIHRvSlMoZXhlYywgZ2xv
YmFsT2JqZWN0LCAmaW1wbCk7IH0KK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RFdmVudFRh
cmdldCYgaW1wbCkgeyByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAmaW1wbCk7IH0K
IEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9i
YWxPYmplY3QqLCBUZXN0RXZlbnRUYXJnZXQqKTsKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCmlu
ZGV4IDkxNDdmNjgzY2ZiOTc3YjM2ZmFhZTMzODZkYmU3MmFhODlmZTkwYjQuLmYwZWIwMDQzMmUw
MjRlMjJiYTM5NGNlMzM4N2YxMjA5M2NhZjY1YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCkBA
IC0xNTYsMzMgKzE1NiwzMyBAQCBKU1Rlc3RFeGNlcHRpb246On5KU1Rlc3RFeGNlcHRpb24oKQog
ICAgIHJlbGVhc2VJbXBsKCk7CiB9CiAKLWJvb2wgSlNUZXN0RXhjZXB0aW9uOjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTVGVzdEV4Y2VwdGlvbjo6
Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdEV4Y2VwdGlvbio+KG9iamVjdCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIGlmIChnZXRT
dGF0aWNWYWx1ZVNsb3Q8SlNUZXN0RXhjZXB0aW9uLCBCYXNlPihleGVjLCBKU1Rlc3RFeGNlcHRp
b25UYWJsZSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KSkKKyAgICBpZiAoZ2V0U3Rh
dGljVmFsdWVTbG90PEpTVGVzdEV4Y2VwdGlvbiwgQmFzZT4oc3RhdGUsIEpTVGVzdEV4Y2VwdGlv
blRhYmxlLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEV4Y2Vw
dGlvbk5hbWUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0RXhjZXB0
aW9uTmFtZShFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsK
KyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2Fz
dDxKU1Rlc3RFeGNlcHRpb24qPihzbG90QmFzZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPmltcGwoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMs
IGltcGwubmFtZSgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0
YXRlLCBpbXBsLm5hbWUoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwog
fQogCiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFt
ZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTT2JqZWN0KiBiYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7CiAgICAgSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZSo+KGJhc2VWYWx1ZSk7CiAgICAgaWYgKCFkb21P
YmplY3QpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0RXhjZXB0aW9uOjpnZXRDb25zdHJ1Y3RvcihleGVjLT52
bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKHN0YXRlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdEV4Y2Vw
dGlvbjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0
KCkpKTsKIH0KIAogSlNWYWx1ZSBKU1Rlc3RFeGNlcHRpb246OmdldENvbnN0cnVjdG9yKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uaAppbmRleCBi
ZTRmMDA0MzllZTE4ZGQ1MzNiYzVjZmVlM2MzZGU3ZjVlOTUzMmE3Li42NzJmMzM4OTBlYzE1OWY5
NmUyODkxYzUzNzQ1YjQyOTk2YjcyYTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5oCkBAIC04NCw3ICs4
NCw3IEBAIGlubGluZSBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBw
ZXJXb3JsZCYsIFRlc3RFeGNlcHRpb24qKQogfQogCiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdEV4Y2VwdGlvbiopOwotaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBUZXN0RXhjZXB0aW9uJiBpbXBsKSB7IHJldHVybiB0b0pTKGV4ZWMsIGds
b2JhbE9iamVjdCwgJmltcGwpOyB9CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0RXhjZXB0
aW9uJiBpbXBsKSB7IHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICZpbXBsKTsgfQog
SlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2Jh
bE9iamVjdCosIFRlc3RFeGNlcHRpb24qKTsKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJ
c1JlYWNoYWJsZS5jcHAKaW5kZXggMzg4OTVkYTQ3MDdmMzg1Mzc0NmVmNGEwZDdkMjIzYWVlNDJl
MmI4YS4uZGJhODk0M2YwYmFjZTQyNDQyNWMwNjJiN2ViNGZmYTgwNmQ4ZjgyNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcApAQCAtMTM5LDEyICsxMzksMTIgQEAg
SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6fkpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUoKQog
ICAgIHJlbGVhc2VJbXBsKCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEdlbmVyYXRlSXNS
ZWFjaGFibGVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlVmFsdWUs
IEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJh
c2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBKU1Rlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGUqPihiYXNlVmFsdWUpOwogICAgIGlmICghZG9t
T2JqZWN0KQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU6OmdldENvbnN0cnVj
dG9yKGV4ZWMtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRv
bU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAogSlNWYWx1ZSBKU1Rlc3RHZW5lcmF0ZUlz
UmVhY2hhYmxlOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuaAppbmRleCAzZmNmMDll
ZTNmZTljZjUxYzM3M2I0ZjQ2MTIwNTJkOGQ2NTQ2NGZiLi5mMmIwMzNlOTNmZTI4NzczNThjMDQx
YWI5YTgwNjkxNWZmY2JhMDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
LmgKQEAgLTgwLDcgKzgwLDcgQEAgaW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVy
T3duZXIoRE9NV3JhcHBlcldvcmxkJiwgVGVzdEdlbmVyYXRlSXNSZWFjaGEKIH0KIAogSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlKik7Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RHZW5lcmF0ZUlz
UmVhY2hhYmxlJiBpbXBsKSB7IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgJmltcGwp
OyB9CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSYgaW1w
bCkgeyByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAmaW1wbCk7IH0KIEpTQzo6SlNW
YWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3Qq
LCBUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSopOwogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKaW5k
ZXggNjBmOTZkZTE4MjcxMTgxMzNlYmYxNWYyZDIyMzdiNjFmYjkzMzEzOC4uYThjMTVlNjAwM2Zk
NDI3NTFhZWI1ZDc0N2E2ZjZkN2YxOTI2NTY0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKQEAg
LTI2NSwyNyArMjY1LDI3IEBAIENPTVBJTEVfQVNTRVJUKDEgPT0gVGVzdFN1cHBsZW1lbnRhbDo6
U1VQUExFTUVOVEFMQ09OU1RBTlQxLCBUZXN0SW50ZXJmYWNlRW51bVNVCiBDT01QSUxFX0FTU0VS
VCgyID09IFRlc3RTdXBwbGVtZW50YWw6OkNPTlNUX0lNUEwsIFRlc3RJbnRlcmZhY2VFbnVtQ09O
U1RfSU1QTElzV3JvbmdVc2VEb05vdENoZWNrQ29uc3RhbnRzKTsKICNlbmRpZgogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yOjpjb25zdHJ1
Y3RKU1Rlc3RJbnRlcmZhY2UoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0SW50ZXJm
YWNlKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxK
U1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKLSAgICBpZiAoVU5M
SUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIGF1
dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IqPihzdGF0
ZS0+Y2FsbGVlKCkpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwg
MSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgU3Ry
aW5nIHN0cjEgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7
Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBTdHJpbmcgc3Ry
MSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRlKTsKKyAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBTdHJpbmcgc3RyMiA9IGV4ZWMtPmFy
Z3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFko
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIFN0cmluZyBzdHIyID0gc3RhdGUtPmFyZ3VtZW50
KDEpLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUpOworICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBjYXN0ZWRU
aGlzLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQotICAgICAg
ICByZXR1cm4gdGhyb3dDb25zdHJ1Y3RvckRvY3VtZW50VW5hdmFpbGFibGVFcnJvcigqZXhlYywg
IlRlc3RJbnRlcmZhY2UiKTsKKyAgICAgICAgcmV0dXJuIHRocm93Q29uc3RydWN0b3JEb2N1bWVu
dFVuYXZhaWxhYmxlRXJyb3IoKnN0YXRlLCAiVGVzdEludGVyZmFjZSIpOwogICAgIFJlZlB0cjxU
ZXN0SW50ZXJmYWNlPiBvYmplY3QgPSBUZXN0SW50ZXJmYWNlOjpjcmVhdGUoKmNvbnRleHQsIHN0
cjEsIHN0cjIsIGVjKTsKICAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICB9Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShhc09iamVjdCh0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LCBvYmplY3QuZ2V0KCkpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0
b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgb2JqZWN0LmdldCgpKSkpOwog
fQogCiBjb25zdCBDbGFzc0luZm8gSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I6OnNfaW5mbyA9
IHsgIlRlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IpIH07CkBAIC00MzcsMTkgKzQz
NywxOSBAQCBKU1Rlc3RJbnRlcmZhY2U6On5KU1Rlc3RJbnRlcmZhY2UoKQogICAgIHJlbGVhc2VJ
bXBsKCk7CiB9CiAKLWJvb2wgSlNUZXN0SW50ZXJmYWNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTVGVzdEludGVyZmFjZTo6Z2V0T3duUHJvcGVy
dHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTVGVzdEludGVyZmFjZSo+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIGlmIChnZXRTdGF0aWNWYWx1ZVNs
b3Q8SlNUZXN0SW50ZXJmYWNlLCBCYXNlPihleGVjLCBKU1Rlc3RJbnRlcmZhY2VUYWJsZSwgdGhp
c09iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KSkKKyAgICBpZiAoZ2V0U3RhdGljVmFsdWVTbG90
PEpTVGVzdEludGVyZmFjZSwgQmFzZT4oc3RhdGUsIEpTVGVzdEludGVyZmFjZVRhYmxlLCB0aGlz
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25k
aXRpb24yMykKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVt
ZW50c1N0YXRpY1JlYWRPbmx5QXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFz
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNSZWFkT25seUF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNF
RF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoVGVzdElu
dGVyZmFjZTo6aW1wbGVtZW50c1N0YXRpY1JlYWRPbmx5QXR0cigpKTsKQEAgLTQ1OSw5MCArNDU5
LDkwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50
c1N0YXRpY1JlYWRPbmx5QXR0cihFeGVjU3RhdGUqCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25k
aXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotRW5jb2RlZEpTVmFsdWUganNUZXN0SW50
ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0
aWNBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5n
V2l0aENhY2hlKGV4ZWMsIFRlc3RJbnRlcmZhY2U6OmltcGxlbWVudHNTdGF0aWNBdHRyKCkpOwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIFRlc3RJbnRlcmZh
Y2U6OmltcGxlbWVudHNTdGF0aWNBdHRyKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJM
RShDb25kaXRpb24yMykKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNT
dHIxKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUlt
cGxlbWVudHNTdHIxKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4
ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNl
KTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RJbnRlcmZhY2UqIGNh
c3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZSo+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAg
IGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZVByb3RvdHlwZSo+KHNsb3RCYXNlKSkK
LSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJU
ZXN0SW50ZXJmYWNlIiwgImltcGxlbWVudHNTdHIxIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dl
dHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RJbnRlcmZhY2UiLCAiaW1wbGVtZW50c1N0cjEiKTsK
KyAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAi
VGVzdEludGVyZmFjZSIsICJpbXBsZW1lbnRzU3RyMSIpOworICAgICAgICByZXR1cm4gdGhyb3dH
ZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdEludGVyZmFjZSIsICJpbXBsZW1lbnRzU3RyMSIp
OwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgaW1wbC5pbXBsZW1lbnRzU3RyMSgp
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmlt
cGxlbWVudHNTdHIxKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0K
IAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24y
MykKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVT
RURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFt
aWNDYXN0PEpTVGVzdEludGVyZmFjZVByb3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAg
IHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0SW50ZXJmYWNl
IiwgImltcGxlbWVudHNTdHIyIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJv
cigqZXhlYywgIlRlc3RJbnRlcmZhY2UiLCAiaW1wbGVtZW50c1N0cjIiKTsKKyAgICAgICAgICAg
IHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdEludGVyZmFj
ZSIsICJpbXBsZW1lbnRzU3RyMiIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJy
b3IoKnN0YXRlLCAiVGVzdEludGVyZmFjZSIsICJpbXBsZW1lbnRzU3RyMiIpOwogICAgIH0KICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgaW1wbC5pbXBsZW1lbnRzU3RyMigpKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmltcGxlbWVudHNTdHIy
KCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKLUVuY29kZWRK
U1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIzKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
K0VuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIzKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhp
c1ZhbHVlKTsKICAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdEludGVyZmFjZSo+
KHNsb3RCYXNlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmltcGxl
bWVudHNTdHIzKGV4ZWMpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMt
PmltcGxlbWVudHNTdHIzKHN0YXRlKSk7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRp
dGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRl
cmZhY2VJbXBsZW1lbnRzTm9kZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZShFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCog
c2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAg
IFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNU
ZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2Uq
PihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2VQcm90b3R5
cGUqPihzbG90QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRl
ckVycm9yKCpleGVjLCAiVGVzdEludGVyZmFjZSIsICJpbXBsZW1lbnRzTm9kZSIpOwotICAgICAg
ICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0SW50ZXJmYWNlIiwgImlt
cGxlbWVudHNOb2RlIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRl
ckVycm9yKCpzdGF0ZSwgIlRlc3RJbnRlcmZhY2UiLCAiaW1wbGVtZW50c05vZGUiKTsKKyAgICAg
ICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RJbnRlcmZhY2UiLCAi
aW1wbGVtZW50c05vZGUiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmlt
cGwoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFs
T2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwuaW1wbGVtZW50c05vZGUoKSkpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6
Z2V0UHRyKGltcGwuaW1wbGVtZW50c05vZGUoKSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVO
QUJMRShDb25kaXRpb24xMikKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVj
dG9yU3VwcGxlbWVudGFsU3RhdGljUmVhZE9ubHlBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0Vu
Y29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGlj
UmVhZE9ubHlBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4
ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNl
KTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
TnVtYmVyKFRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbFN0YXRpY1JlYWRPbmx5QXR0cigp
KTsKQEAgLTU1MiwxMjEgKzU1MiwxMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNl
Q29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNSZWFkT25seUF0dHIoRXhlY1N0YXQKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi1FbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0
dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29u
c3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0
KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0g
ICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIFRlc3RTdXBwbGVtZW50YWw6
OnN1cHBsZW1lbnRhbFN0YXRpY0F0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmlu
Z1dpdGhDYWNoZShzdGF0ZSwgVGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RhdGljQXR0
cigpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKICNlbmRpZgog
CiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi1FbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIxKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjEoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJB
TSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0SW50ZXJmYWNlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8
SlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlKj4oc2xvdEJhc2UpKQotICAgICAgICAgICAgcmV0dXJu
IHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RJbnRlcmZhY2UiLCAic3Vw
cGxlbWVudGFsU3RyMSIpOwotICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4
ZWMsICJUZXN0SW50ZXJmYWNlIiwgInN1cHBsZW1lbnRhbFN0cjEiKTsKKyAgICAgICAgICAgIHJl
dHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdEludGVyZmFjZSIs
ICJzdXBwbGVtZW50YWxTdHIxIik7CisgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJv
cigqc3RhdGUsICJUZXN0SW50ZXJmYWNlIiwgInN1cHBsZW1lbnRhbFN0cjEiKTsKICAgICB9CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIFRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbFN0
cjEoJmltcGwpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRl
LCBUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdHIxKCZpbXBsKSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25k
aXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotRW5jb2RlZEpTVmFsdWUganNUZXN0SW50
ZXJmYWNlU3VwcGxlbWVudGFsU3RyMihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFz
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2Jq
ZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAg
ICBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVy
ZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZVBy
b3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVk
R2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0SW50ZXJmYWNlIiwgInN1cHBsZW1lbnRhbFN0cjIiKTsK
LSAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdEludGVyZmFj
ZSIsICJzdXBwbGVtZW50YWxTdHIyIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVj
YXRlZEdldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsU3Ry
MiIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdElu
dGVyZmFjZSIsICJzdXBwbGVtZW50YWxTdHIyIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNo
ZShleGVjLCBUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdHIyKCZpbXBsKSk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgVGVzdFN1cHBsZW1lbnRh
bDo6c3VwcGxlbWVudGFsU3RyMigmaW1wbCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJM
RShDb25kaXRpb24xMikKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRh
bFN0cjMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNl
U3VwcGxlbWVudGFsU3RyMyhFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJB
TShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90
QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgYXV0byogY2FzdGVkVGhp
cyA9IGpzQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihzbG90QmFzZSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShjYXN0ZWRUaGlzLT5zdXBwbGVtZW50YWxTdHIzKGV4ZWMpKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPnN1cHBsZW1lbnRhbFN0cjMoc3RhdGUpKTsK
IH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRp
b24xMikKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGUoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVu
dGFsTm9kZShFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsK
KyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRU
aGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAo
anNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAg
ICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdElu
dGVyZmFjZSIsICJzdXBwbGVtZW50YWxOb2RlIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRl
clR5cGVFcnJvcigqZXhlYywgIlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsTm9kZSIpOwor
ICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqc3RhdGUsICJU
ZXN0SW50ZXJmYWNlIiwgInN1cHBsZW1lbnRhbE5vZGUiKTsKKyAgICAgICAgcmV0dXJuIHRocm93
R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsTm9k
ZSIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIEpT
VmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RG
OjpnZXRQdHIoVGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTm9kZSgmaW1wbCkpKTsKKyAg
ICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LCBXVEY6OmdldFB0cihUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxOb2RlKCZpbXBsKSkp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAogI2VuZGlmCiAKLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29k
ZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
T2JqZWN0KiBiYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAg
SlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dEludGVyZmFjZVByb3RvdHlwZSo+KGJhc2VWYWx1ZSk7CiAgICAgaWYgKCFkb21PYmplY3QpCi0g
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNUZXN0SW50ZXJmYWNlOjpnZXRDb25zdHJ1Y3RvcihleGVjLT52bSgpLCBkb21P
YmplY3QtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KHN0YXRlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdEludGVyZmFjZTo6Z2V0
Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0K
IAotdm9pZCBKU1Rlc3RJbnRlcmZhY2U6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlT
bG90JiBzbG90KQordm9pZCBKU1Rlc3RJbnRlcmZhY2U6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
VGVzdEludGVyZmFjZSo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKLSAgICBpZiAodGhpc09iamVjdC0+cHV0RGVsZWdhdGUoZXhlYywg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpCisgICAgaWYgKHRoaXNPYmplY3QtPnB1dERlbGVn
YXRlKHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSkKICAgICAgICAgcmV0dXJuOwot
ICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90
KTsKKyAgICBCYXNlOjpwdXQodGhpc09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IHNsb3QpOwogfQogCi12b2lkIEpTVGVzdEludGVyZmFjZTo6cHV0QnlJbmRleChKU0NlbGwqIGNl
bGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wg
c2hvdWxkVGhyb3cpCit2b2lkIEpTVGVzdEludGVyZmFjZTo6cHV0QnlJbmRleChKU0NlbGwqIGNl
bGwsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBib29s
IHNob3VsZFRocm93KQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0SW50
ZXJmYWNlKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwotICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJv
bShleGVjLCBpbmRleCk7CisgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVy
Ojpmcm9tKHN0YXRlLCBpbmRleCk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QodGhpc09iamVj
dCwgc2hvdWxkVGhyb3cpOwotICAgIGlmICh0aGlzT2JqZWN0LT5wdXREZWxlZ2F0ZShleGVjLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSkKKyAgICBpZiAodGhpc09iamVjdC0+cHV0RGVsZWdh
dGUoc3RhdGUsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKQogICAgICAgICByZXR1cm47Ci0g
ICAgQmFzZTo6cHV0QnlJbmRleChjZWxsLCBleGVjLCBpbmRleCwgdmFsdWUsIHNob3VsZFRocm93
KTsKKyAgICBCYXNlOjpwdXRCeUluZGV4KGNlbGwsIHN0YXRlLCBpbmRleCwgdmFsdWUsIHNob3Vs
ZFRocm93KTsKIH0KIAogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlv
bjIzKQotdm9pZCBzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNB
dHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIHNldEpTVGVzdEludGVyZmFjZUNv
bnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3Qq
IGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
CiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwog
ICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKLSAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2
YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1N0cmlu
ZyhzdGF0ZSktPnZhbHVlKHN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIFRlc3RJbnRlcmZhY2U6OnNldEltcGxlbWVu
dHNTdGF0aWNBdHRyKG5hdGl2ZVZhbHVlKTsKIH0KQEAgLTY3NCwyMSArNjc0LDIxIEBAIHZvaWQg
c2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljQXR0cihFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0CiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwg
RU5BQkxFKENvbmRpdGlvbjIzKQotdm9pZCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3Ry
MihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0SW50
ZXJmYWNlSW1wbGVtZW50c1N0cjIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
ICAgICBVTlVTRURfUEFSQU0oYmFzZU9iamVjdCk7CiAgICAgSlNUZXN0SW50ZXJmYWNlKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBp
ZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSkpCi0gICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3Io
KmV4ZWMsICJUZXN0SW50ZXJmYWNlIiwgImltcGxlbWVudHNTdHIyIik7CisgICAgICAgICAgICBy
ZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdEludGVyZmFjZSIsICJpbXBs
ZW1lbnRzU3RyMiIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvd1NldHRlclR5cGVF
cnJvcigqZXhlYywgIlRlc3RJbnRlcmZhY2UiLCAiaW1wbGVtZW50c1N0cjIiKTsKKyAgICAgICAg
ICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RJbnRlcmZhY2UiLCAiaW1wbGVt
ZW50c1N0cjIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+aW1wbCgpOwotICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKHN0YXRlKS0+dmFs
dWUoc3RhdGUpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRJbXBsZW1lbnRzU3RyMihuYXRpdmVWYWx1ZSk7CiB9
CkBAIC02OTYsMzUgKzY5NiwzNSBAQCB2b2lkIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNT
dHIyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuYwogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKLXZvaWQgc2V0
SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
YmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCit2b2lkIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIzKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGJhc2VPYmplY3Qp
OwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBq
c0Nhc3Q8SlNUZXN0SW50ZXJmYWNlKj4oYmFzZU9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
aXNWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwotICAgIGNhc3RlZFRoaXMtPnNldElt
cGxlbWVudHNTdHIzKGV4ZWMsIHZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAg
IGNhc3RlZFRoaXMtPnNldEltcGxlbWVudHNTdHIzKHN0YXRlLCB2YWx1ZSk7CiB9CiAKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCi12b2lk
IHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQordm9pZCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZShFeGVj
U3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2Jq
ZWN0KTsKICAgICBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdEludGVyZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdElu
dGVyZmFjZVByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKSkKLSAgICAgICAg
ICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RJbnRlcmZhY2UiLCAi
aW1wbGVtZW50c05vZGUiKTsKKyAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJv
cigqc3RhdGUsICJUZXN0SW50ZXJmYWNlIiwgImltcGxlbWVudHNOb2RlIik7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdEludGVyZmFj
ZSIsICJpbXBsZW1lbnRzTm9kZSIpOworICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3Io
KnN0YXRlLCAiVGVzdEludGVyZmFjZSIsICJpbXBsZW1lbnRzTm9kZSIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgTm9k
ZSogbmF0aXZlVmFsdWUgPSBKU05vZGU6OnRvV3JhcHBlZCh2YWx1ZSk7Ci0gICAgaWYgKFVOTElL
RUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0SW1wbGVtZW50c05vZGUo
bmF0aXZlVmFsdWUpOwogfQpAQCAtNzMyLDEyICs3MzIsMTIgQEAgdm9pZCBzZXRKU1Rlc3RJbnRl
cmZhY2VJbXBsZW1lbnRzTm9kZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0
LCBFbmMKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMTIpCi12b2lkIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3Rh
dGljQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBzZXRKU1Rlc3RJbnRlcmZh
Y2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNP
YmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKLSAgICBTdHJpbmcgbmF0aXZlVmFs
dWUgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZ
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2YWx1ZS50
b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIFRlc3RTdXBwbGVtZW50YWw6OnNl
dFN1cHBsZW1lbnRhbFN0YXRpY0F0dHIobmF0aXZlVmFsdWUpOwogfQpAQCAtNzQ1LDIxICs3NDUs
MjEgQEAgdm9pZCBzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRp
Y0F0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamUKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRp
dGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi12b2lkIHNldEpTVGVzdEludGVyZmFjZVN1
cHBsZW1lbnRhbFN0cjIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lk
IHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNP
YmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oYmFzZU9iamVjdCk7CiAgICAgSlNUZXN0
SW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUq
PihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSkpCi0gICAgICAgICAgICByZXBvcnREZXByZWNh
dGVkU2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0SW50ZXJmYWNlIiwgInN1cHBsZW1lbnRhbFN0cjIi
KTsKKyAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0
SW50ZXJmYWNlIiwgInN1cHBsZW1lbnRhbFN0cjIiKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0SW50ZXJmYWNlIiwgInN1cHBsZW1l
bnRhbFN0cjIiKTsKKyAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRl
c3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsU3RyMiIpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgU3RyaW5nIG5hdGl2
ZVZhbHVlID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJ
S0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFs
dWUudG9TdHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBUZXN0U3VwcGxlbWVudGFs
OjpzZXRTdXBwbGVtZW50YWxTdHIyKCZpbXBsLCBuYXRpdmVWYWx1ZSk7CiB9CkBAIC03NjcsMzUg
Kzc2NywzNSBAQCB2b2lkIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjIoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRQogI2VuZGlmCiAKICNpZiBFTkFCTEUo
Q29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLXZvaWQgc2V0SlNUZXN0SW50ZXJm
YWNlU3VwcGxlbWVudGFsU3RyMyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
K3ZvaWQgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMyhFeGVjU3RhdGUqIHN0YXRl
LCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBV
TlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpT
VGVzdEludGVyZmFjZSo+KGJhc2VPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUp
OwotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKLSAgICBjYXN0ZWRUaGlzLT5zZXRTdXBwbGVtZW50
YWxTdHIzKGV4ZWMsIHZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIGNhc3Rl
ZFRoaXMtPnNldFN1cHBsZW1lbnRhbFN0cjMoc3RhdGUsIHZhbHVlKTsKIH0KIAogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLXZvaWQgc2V0
SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZShFeGVj
U3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2Jq
ZWN0KTsKICAgICBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdEludGVyZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdElu
dGVyZmFjZVByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKSkKLSAgICAgICAg
ICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RJbnRlcmZhY2UiLCAi
c3VwcGxlbWVudGFsTm9kZSIpOworICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVy
cm9yKCpzdGF0ZSwgIlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsTm9kZSIpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RJbnRl
cmZhY2UiLCAic3VwcGxlbWVudGFsTm9kZSIpOworICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBl
RXJyb3IoKnN0YXRlLCAiVGVzdEludGVyZmFjZSIsICJzdXBwbGVtZW50YWxOb2RlIik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsK
ICAgICBOb2RlKiBuYXRpdmVWYWx1ZSA9IEpTTm9kZTo6dG9XcmFwcGVkKHZhbHVlKTsKLSAgICBp
ZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgVGVzdFN1cHBsZW1lbnRh
bDo6c2V0U3VwcGxlbWVudGFsTm9kZSgmaW1wbCwgbmF0aXZlVmFsdWUpOwogfQpAQCAtODA4LDEy
ICs4MDgsMTIgQEAgSlNWYWx1ZSBKU1Rlc3RJbnRlcmZhY2U6OmdldENvbnN0cnVjdG9yKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIH0KIAogI2lmIEVOQUJMRShDb25kaXRp
b24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRob2QxKEV4ZWNT
dGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNl
UHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRzTWV0aG9kMShFeGVjU3RhdGUqIHN0YXRlKQogewot
ICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0
aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0SW50ZXJmYWNlKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPih0aGlzVmFsdWUpOwogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBl
RXJyb3IoKmV4ZWMsICJUZXN0SW50ZXJmYWNlIiwgImltcGxlbWVudHNNZXRob2QxIik7CisgICAg
ICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdEludGVyZmFjZSIsICJp
bXBsZW1lbnRzTWV0aG9kMSIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVk
VGhpcywgSlNUZXN0SW50ZXJmYWNlOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT5pbXBsKCk7CiAgICAgaW1wbC5pbXBsZW1lbnRzTWV0aG9kMSgpOwpAQCAtODIzLDQ5ICs4
MjMsNDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VQcm90
b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRob2QxKEUKICNlbmRpZgogCiAjaWYgRU5BQkxFKENv
bmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDIo
RXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRl
cmZhY2VQcm90b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRob2QyKEV4ZWNTdGF0ZSogc3RhdGUp
CiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RJbnRlcmZhY2Uq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZSo+KHRoaXNWYWx1ZSk7
CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhp
c1R5cGVFcnJvcigqZXhlYywgIlRlc3RJbnRlcmZhY2UiLCAiaW1wbGVtZW50c01ldGhvZDIiKTsK
KyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0SW50ZXJmYWNl
IiwgImltcGxlbWVudHNNZXRob2QyIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhj
YXN0ZWRUaGlzLCBKU1Rlc3RJbnRlcmZhY2U6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPmltcGwoKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgp
IDwgMikpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRD
b3VudCgpIDwgMikpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgYXV0byogc2NyaXB0Q29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAg
ICBhdXRvKiBzY3JpcHRDb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUt
PmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBp
ZiAoIXNjcmlwdENvbnRleHQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7Ci0gICAgU3RyaW5nIHN0ckFyZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIFN0cmluZyBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9TdHJpbmcoc3Rh
dGUpLT52YWx1ZShzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAg
VGVzdE9iaiogb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoZXhlYy0+YXJndW1lbnQoMSkp
OwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgVGVzdE9iaiog
b2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDEpKTsKKyAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhl
YywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwuaW1wbGVtZW50
c01ldGhvZDIoc2NyaXB0Q29udGV4dCwgc3RyQXJnLCBvYmpBcmcsIGVjKSkpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6
Z2V0UHRyKGltcGwuaW1wbGVtZW50c01ldGhvZDIoc2NyaXB0Q29udGV4dCwgc3RyQXJnLCBvYmpB
cmcsIGVjKSkpOwogCi0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBzZXRET01F
eGNlcHRpb24oc3RhdGUsIGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMjMpCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZVByb3Rv
dHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDMoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkltcGxl
bWVudHNNZXRob2QzKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlz
VmFsdWUoKTsKICAgICBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdEludGVyZmFjZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RJbnRl
cmZhY2UiLCAiaW1wbGVtZW50c01ldGhvZDMiKTsKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5
cGVFcnJvcigqc3RhdGUsICJUZXN0SW50ZXJmYWNlIiwgImltcGxlbWVudHNNZXRob2QzIik7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RJbnRlcmZhY2U6
OmluZm8oKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5pbXBsZW1l
bnRzTWV0aG9kMyhleGVjKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlz
LT5pbXBsZW1lbnRzTWV0aG9kMyhzdGF0ZSkpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShD
b25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckZ1bmN0aW9uSW1wbGVtZW50c01ldGhv
ZDQoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJ
bnRlcmZhY2VDb25zdHJ1Y3RvckZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDQoRXhlY1N0YXRlKiBz
dGF0ZSkKIHsKICAgICBUZXN0SW50ZXJmYWNlOjppbXBsZW1lbnRzTWV0aG9kNCgpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC04NzQsMTIgKzg3NCwxMiBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9y
RnVuY3Rpb25JbXBsZW1lbnRzTWV0aG9kNAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9u
MTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2QxKEV4ZWNT
dGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNl
UHJvdG90eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2QxKEV4ZWNTdGF0ZSogc3RhdGUpCiB7
Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RJbnRlcmZhY2UqIGNh
c3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZSo+KHRoaXNWYWx1ZSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5
cGVFcnJvcigqZXhlYywgIlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsTWV0aG9kMSIpOwor
ICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RJbnRlcmZhY2Ui
LCAic3VwcGxlbWVudGFsTWV0aG9kMSIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
Y2FzdGVkVGhpcywgSlNUZXN0SW50ZXJmYWNlOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgVGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTWV0
aG9kMSgmaW1wbCk7CkBAIC04ODksNDkgKzg4OSw0OSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9k
MQogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24x
MikKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlUHJvdG90eXBl
RnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2QyKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBwbGVt
ZW50YWxNZXRob2QyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlz
VmFsdWUoKTsKICAgICBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdEludGVyZmFjZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RJbnRl
cmZhY2UiLCAic3VwcGxlbWVudGFsTWV0aG9kMiIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlz
VHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsTWV0aG9kMiIp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0SW50ZXJm
YWNlOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAg
aWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQotICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsK
KyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQorICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihz
dGF0ZSkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGF1dG8qIHNjcmlwdENvbnRl
eHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgYXV0byogc2NyaXB0Q29udGV4dCA9
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFzY3JpcHRDb250ZXh0KQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIFN0cmluZyBz
dHJBcmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0g
ICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBTdHJpbmcgc3RyQXJn
ID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUpOworICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIFRlc3RPYmoqIG9iakFyZyA9IEpTVGVz
dE9iajo6dG9XcmFwcGVkKGV4ZWMtPmFyZ3VtZW50KDEpKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIFRlc3RPYmoqIG9iakFyZyA9IEpTVGVzdE9iajo6dG9X
cmFwcGVkKHN0YXRlLT5hcmd1bWVudCgxKSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpLCBXVEY6OmdldFB0cihUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxNZXRob2Qy
KCZpbXBsLCBzY3JpcHRDb250ZXh0LCBzdHJBcmcsIG9iakFyZywgZWMpKSk7CisgICAgSlNWYWx1
ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpn
ZXRQdHIoVGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTWV0aG9kMigmaW1wbCwgc2NyaXB0
Q29udGV4dCwgc3RyQXJnLCBvYmpBcmcsIGVjKSkpOwogCi0gICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlv
bjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kMyhFeGVj
U3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFj
ZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kMyhFeGVjU3RhdGUqIHN0YXRlKQog
ewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0SW50ZXJmYWNlKiBj
YXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPih0aGlzVmFsdWUpOwog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNU
eXBlRXJyb3IoKmV4ZWMsICJUZXN0SW50ZXJmYWNlIiwgInN1cHBsZW1lbnRhbE1ldGhvZDMiKTsK
KyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0SW50ZXJmYWNl
IiwgInN1cHBsZW1lbnRhbE1ldGhvZDMiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KGNhc3RlZFRoaXMsIEpTVGVzdEludGVyZmFjZTo6aW5mbygpKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPnN1cHBsZW1lbnRhbE1ldGhvZDMoZXhlYykpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+c3VwcGxlbWVudGFsTWV0aG9kMyhzdGF0
ZSkpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENv
bmRpdGlvbjEyKQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VD
b25zdHJ1Y3RvckZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kNChFeGVjU3RhdGUqIGV4ZWMpCitF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yRnVu
Y3Rpb25TdXBwbGVtZW50YWxNZXRob2Q0KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVGVzdFN1
cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTWV0aG9kNCgpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmgKaW5kZXggMWVmZDc1MmQ4NjQ0
NjFmNGQzZmFmZjI0N2MyZjhiNzQ5MzU4MjFkNC4uNDdmMDc4MjkxZmM3ZTMyMGMwZDhiOGY0YzA0
ZjZkY2EyM2ZhZWQyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuaApAQCAtMTEwLDcgKzExMCw3IEBAIGlu
bGluZSBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYs
IFRlc3RJbnRlcmZhY2UqKQogfQogCiBXRUJDT1JFX0VYUE9SVCBKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdEludGVyZmFjZSopOwotaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0SW50ZXJmYWNlJiBpbXBsKSB7IHJldHVybiB0b0pTKGV4
ZWMsIGdsb2JhbE9iamVjdCwgJmltcGwpOyB9CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0
SW50ZXJmYWNlJiBpbXBsKSB7IHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICZpbXBs
KTsgfQogSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RP
TUdsb2JhbE9iamVjdCosIFRlc3RJbnRlcmZhY2UqKTsKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKaW5kZXggOTYyNGFjNzgwNDMxNzc0Nzc3YzBjOTEx
NGVhNzRiNjcyMDgwZDNiNy4uMjE2MWY4N2U0ODVmMjQwOTZkMTE1MmFjNTU1MzA3MmE5YjFiMjYz
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcApAQCAt
MTQ3LDEyICsxNDcsMTIgQEAgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6fkpTVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXIoKQogICAgIHJlbGVhc2VJbXBsKCk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIGpzVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBiYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3Io
RXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKICAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBl
KiBkb21PYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQ
cm90b3R5cGUqPihiYXNlVmFsdWUpOwogICAgIGlmICghZG9tT2JqZWN0KQotICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmdldENvbnN0cnVjdG9yKGV4ZWMtPnZtKCksIGRv
bU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3Ioc3RhdGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFs
T2JqZWN0KCkpKTsKIH0KIAogSlNWYWx1ZSBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpn
ZXRDb25zdHJ1Y3RvcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCkBAIC0x
NjAsMTkgKzE2MCwxOSBAQCBKU1ZhbHVlIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6Omdl
dENvbnN0cnVjdG9yKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsbwogICAgIHJldHVybiBnZXRE
T01Db25zdHJ1Y3RvcjxKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3I+KHZt
LCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90
eXBlRnVuY3Rpb25NZXRob2QoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2QoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRo
aXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwog
ICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqPih0aGlzVmFsdWUpOwogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3Io
KmV4ZWMsICJUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciIsICJtZXRob2QiKTsKKyAgICAgICAg
cmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lciIsICJtZXRob2QiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRo
aXMsIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmluZm8oKSk7CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIGlmICghZXhlYy0+YXJndW1lbnQoMCku
aXNGdW5jdGlvbigpKQotICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9u
RXJyb3IoKmV4ZWMsIDAsICJsaXN0ZW5lciIsICJUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciIs
ICJtZXRob2QiKTsKLSAgICBSZWZQdHI8TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4gbGlzdGVuZXIg
PSBKU01lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCgwKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKKyAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOworICAg
IGlmICghc3RhdGUtPmFyZ3VtZW50KDApLmlzRnVuY3Rpb24oKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpzdGF0ZSwgMCwgImxpc3RlbmVyIiwgIlRl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyIiwgIm1ldGhvZCIpOworICAgIFJlZlB0cjxNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyPiBsaXN0ZW5lciA9IEpTTWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6Y3Jl
YXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSksIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpKTsKICAgICBpbXBsLm1ldGhvZChsaXN0ZW5lcik7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lci5oCmluZGV4IGYyMDY1MjJhNGYyY2JkYzk4ZWM3ZDI3N2ExMGQwM2Y3
MWQ3ZmZhNzkuLmFmZWY1ZDExYTdiNDhhNGZiNTA0NDRmOTdhZTcwOWYzZTIyNGRhN2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaApAQCAtODAsNyArODAsNyBA
QCBpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29y
bGQmLCBUZXN0TWVkaWFRdWVyeUxpc3RMaQogfQogCiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIq
KTsKLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXImIGlt
cGwpIHsgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCAmaW1wbCk7IH0KK2lubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyJiBpbXBsKSB7IHJldHVy
biB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICZpbXBsKTsgfQogSlNDOjpKU1ZhbHVlIHRvSlNO
ZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyKik7CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3Iu
Y3BwCmluZGV4IDQ2MDdlZTkxMmU1MDdmM2NkN2IzODI5MDJhYTJiZDg5N2U2OWU0YmUuLmE2MzBm
MTljNGZiMjBkOTNiNjM1ZWE0YmNhZGMwNjIzOGYyZWRmYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRDb25zdHJ1Y3Rvci5jcHAKQEAgLTEyMywyNyArMTIzLDI3IEBAIHZvaWQgSlNUZXN0TmFtZWRD
b25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTRE9NR2xvYmFs
T2JqZWN0CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVt
YmVyKDApLCBSZWFkT25seSB8IERvbnRFbnVtKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0
SlNUZXN0TmFtZWRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yOjpjb25z
dHJ1Y3RKU1Rlc3ROYW1lZENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgYXV0
byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1
Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nh
c3Q8SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3IqPihzdGF0ZS0+Y2FsbGVl
KCkpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKHN0YXRlKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgU3RyaW5nIHN0cjEg
PSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYg
KFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBTdHJpbmcgc3RyMSA9IHN0YXRl
LT5hcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRlKTsKKyAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBTdHJpbmcgc3RyMiA9IGV4ZWMtPmFyZ3VtZW50KDEp
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIFN0cmluZyBzdHIyID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvU3Ry
aW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwotICAgIFN0cmluZyBzdHIzID0gZXhlYy0+YXJndW1lbnQoMikuaXNVbmRlZmluZWQoKSA/IFN0
cmluZygpIDogZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMikudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgU3Ry
aW5nIHN0cjMgPSBzdGF0ZS0+YXJndW1lbnQoMikuaXNVbmRlZmluZWQoKSA/IFN0cmluZygpIDog
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUp
OworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFJlZlB0cjxUZXN0TmFtZWRD
b25zdHJ1Y3Rvcj4gb2JqZWN0ID0gVGVzdE5hbWVkQ29uc3RydWN0b3I6OmNyZWF0ZUZvckpTQ29u
c3RydWN0b3IoKmNhc3RlZFRoaXMtPmRvY3VtZW50KCksIHN0cjEsIHN0cjIsIHN0cjMsIGVjKTsK
ICAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAg
ICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKTsKICAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09i
amVjdCh0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBvYmplY3QuZ2V0KCkp
KSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKHN0YXRlLCBjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgb2JqZWN0LmdldCgpKSkpOwogfQogCiBjb25zdCBDbGFz
c0luZm8gSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsg
IkF1ZGlvQ29uc3RydWN0b3IiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yKSB9OwpAQCAtMjEyLDEyICsy
MTIsMTIgQEAgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6fkpTVGVzdE5hbWVkQ29uc3RydWN0b3Io
KQogICAgIHJlbGVhc2VJbXBsKCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkQ29u
c3RydWN0b3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlVmFsdWUs
IEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1l
ZENvbnN0cnVjdG9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBKU1Rlc3ROYW1lZENv
bnN0cnVjdG9yUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE5hbWVk
Q29uc3RydWN0b3JQcm90b3R5cGUqPihiYXNlVmFsdWUpOwogICAgIGlmICghZG9tT2JqZWN0KQot
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVGVzdE5hbWVkQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdG9yKGV4ZWMtPnZt
KCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3Ioc3RhdGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0TmFtZWRD
b25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFs
T2JqZWN0KCkpKTsKIH0KIAogSlNWYWx1ZSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpnZXRDb25z
dHJ1Y3RvcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25z
dHJ1Y3Rvci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkQ29uc3RydWN0b3IuaAppbmRleCA2NWJmYmYwZTg1YjU5NzM0MzNlZjgyZmRhNmE2NzZi
YzU1ZDAzNjQ0Li5iZTgxNmMyNDFkNzFkZjNiN2MxZDZhZmNiZGU5OTllYWE3Y2NhOTEwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRDb25zdHJ1Y3Rvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmgKQEAgLTgxLDcgKzgxLDcgQEAgaW5saW5lIEpT
Qzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiwgVGVzdE5h
bWVkQ29uc3RydWN0b3IKIH0KIAogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBK
U0RPTUdsb2JhbE9iamVjdCosIFRlc3ROYW1lZENvbnN0cnVjdG9yKik7Ci1pbmxpbmUgSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFRlc3ROYW1lZENvbnN0cnVjdG9yJiBpbXBsKSB7IHJldHVybiB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCwgJmltcGwpOyB9CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0TmFt
ZWRDb25zdHJ1Y3RvciYgaW1wbCkgeyByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAm
aW1wbCk7IH0KIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwg
SlNET01HbG9iYWxPYmplY3QqLCBUZXN0TmFtZWRDb25zdHJ1Y3RvciopOwogCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNw
cAppbmRleCA1Y2QyM2Y4YWY3MWRmNDdkOGIwMTJiODMwMzcxMzE2ZGM3MDU1MzQwLi42YjNmOTFk
MmEzMzcwNDc4NThjMmI5MzBlOWUzZjE1MTVmMjUxZWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCkBAIC04NCwx
MSArODQsMTEgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0
Q29uc3RydWN0RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0RGF0YSYpOwogfTsKIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3ROb2RlQ29uc3RydWN0b3I6OmNvbnN0
cnVjdEpTVGVzdE5vZGUoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBKU1Rlc3ROb2RlQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTVGVzdE5vZGUoRXhlY1N0YXRl
KiBzdGF0ZSkKIHsKLSAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE5vZGVDb25z
dHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0
PEpTVGVzdE5vZGVDb25zdHJ1Y3Rvcio+KHN0YXRlLT5jYWxsZWUoKSk7CiAgICAgUmVmUHRyPFRl
c3ROb2RlPiBvYmplY3QgPSBUZXN0Tm9kZTo6Y3JlYXRlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShhc09iamVjdCh0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBv
YmplY3QuZ2V0KCkpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pT
KHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgb2JqZWN0LmdldCgpKSkpOwogfQog
CiBjb25zdCBDbGFzc0luZm8gSlNUZXN0Tm9kZUNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0
Tm9kZUNvbnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U1Rlc3ROb2RlQ29uc3RydWN0b3IpIH07CkBAIC0xNDUsMTIgKzE0NSwxMiBAQCBKU09iamVjdCog
SlNUZXN0Tm9kZTo6Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKICAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE5vZGU+KHZtLCBnbG9iYWxP
YmplY3QpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlQ29uc3RydWN0b3IoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogYmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlO
YW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9kZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTT2JqZWN0KiBiYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
CiAgICAgSlNUZXN0Tm9kZVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3ROb2RlUHJvdG90eXBlKj4oYmFzZVZhbHVlKTsKICAgICBpZiAoIWRvbU9iamVjdCkKLSAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1Rlc3ROb2RlOjpnZXRDb25zdHJ1Y3RvcihleGVjLT52bSgpLCBkb21PYmplY3QtPmds
b2JhbE9iamVjdCgpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE5vZGU6OmdldENvbnN0cnVjdG9yKHN0
YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKIEpTVmFsdWUgSlNU
ZXN0Tm9kZTo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5vbmRldGVybWluaXN0aWMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuY3BwCmluZGV4IDYzYTY1MzUxOTA5
YjA5ZTgxMjM2YmRjYTJkNjE1ZmI5YjBhOTkyMjIuLjk1YTc4ODg1YWM0ODdkNDU3ZDViYjYxYWY4
ZTBhYjBlZThhZWM1YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5jcHAKQEAg
LTE2OCwxOSArMTY4LDE5IEBAIEpTVGVzdE5vbmRldGVybWluaXN0aWM6On5KU1Rlc3ROb25kZXRl
cm1pbmlzdGljKCkKICAgICByZWxlYXNlSW1wbCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rl
c3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0cihFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJt
aW5pc3RpY1JlYWRvbmx5QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2Us
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9Q
QVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShz
bG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0Tm9uZGV0
ZXJtaW5pc3RpYyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5p
c3RpYyo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE5vbmRldGVybWlu
aXN0aWNQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVw
cmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdE5vbmRldGVybWluaXN0aWMiLCAibm9uZGV0
ZXJtaW5pc3RpY1JlYWRvbmx5QXR0ciIpOwotICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBl
RXJyb3IoKmV4ZWMsICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25kZXRlcm1pbmlzdGljUmVh
ZG9ubHlBdHRyIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVy
cm9yKCpzdGF0ZSwgIlRlc3ROb25kZXRlcm1pbmlzdGljIiwgIm5vbmRldGVybWluaXN0aWNSZWFk
b25seUF0dHIiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwg
IlRlc3ROb25kZXRlcm1pbmlzdGljIiwgIm5vbmRldGVybWluaXN0aWNSZWFkb25seUF0dHIiKTsK
ICAgICB9CiAjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKICAgICBJbnB1
dEN1cnNvciYgY3Vyc29yID0gZ2xvYmFsT2JqZWN0LT5pbnB1dEN1cnNvcigpOwogICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxjb25zdCBBdG9taWNTdHJpbmc+IGJpbmRpbmdOYW1lKCJUZXN0Tm9u
ZGV0ZXJtaW5pc3RpYy5ub25kZXRlcm1pbmlzdGljUmVhZG9ubHlBdHRyIiwgQXRvbWljU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgaWYgKGN1cnNvci5pc0NhcHR1cmluZygpKSB7
CkBAIC0yMDUsMjUgKzIwNSwyNSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlz
dGljTm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0cihFeGVjU3RhdGUqIGV4ZQogfQogCiAKLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljV3JpdGVh
YmxlQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRl
cm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUp
OwogICAgIEpTVGVzdE5vbmRldGVybWluaXN0aWMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdE5vbmRldGVybWluaXN0aWMqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2Fz
dDxKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlKj4oc2xvdEJhc2UpKQotICAgICAgICAg
ICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqZXhlYywgIlRlc3ROb25kZXRl
cm1pbmlzdGljIiwgIm5vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyIik7Ci0gICAgICAgIHJl
dHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3ROb25kZXRlcm1pbmlzdGljIiwg
Im5vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyIik7CisgICAgICAgICAgICByZXR1cm4gcmVw
b3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpzdGF0ZSwgIlRlc3ROb25kZXRlcm1pbmlzdGljIiwg
Im5vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyIik7CisgICAgICAgIHJldHVybiB0aHJvd0dl
dHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25kZXRlcm1p
bmlzdGljV3JpdGVhYmxlQXR0ciIpOwogICAgIH0KICNpZiBFTkFCTEUoV0VCX1JFUExBWSkKLSAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0ZS0+bGV4aWNhbEds
b2JhbE9iamVjdCgpOwogICAgIElucHV0Q3Vyc29yJiBjdXJzb3IgPSBnbG9iYWxPYmplY3QtPmlu
cHV0Q3Vyc29yKCk7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21pY1N0cmlu
Zz4gYmluZGluZ05hbWUoIlRlc3ROb25kZXRlcm1pbmlzdGljLm5vbmRldGVybWluaXN0aWNXcml0
ZWFibGVBdHRyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgaWYg
KGN1cnNvci5pc0NhcHR1cmluZygpKSB7CiAgICAgICAgIFN0cmluZyBtZW1vaXplZFJlc3VsdCA9
IGNhc3RlZFRoaXMtPmltcGwoKS5ub25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0cigpOwogICAg
ICAgICBjdXJzb3IuYXBwZW5kSW5wdXQ8TWVtb2l6ZWRET01SZXN1bHQ8U3RyaW5nPj4oYmluZGlu
Z05hbWUuZ2V0KCkuc3RyaW5nKCksIG1lbW9pemVkUmVzdWx0LCAwKTsKLSAgICAgICAgSlNWYWx1
ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBtZW1vaXplZFJlc3VsdCk7CisgICAg
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIG1lbW9pemVkUmVz
dWx0KTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KIApA
QCAtMjMxLDM2ICsyMzEsMzYgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3Rp
Y05vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyKEV4ZWNTdGF0ZSogZXgKICAgICAgICAgU3Ry
aW5nIG1lbW9pemVkUmVzdWx0OwogICAgICAgICBNZW1vaXplZERPTVJlc3VsdEJhc2UqIGlucHV0
ID0gY3Vyc29yLmZldGNoSW5wdXQ8TWVtb2l6ZWRET01SZXN1bHRCYXNlPigpOwogICAgICAgICBp
ZiAoaW5wdXQgJiYgaW5wdXQtPmNvbnZlcnRUbzxTdHJpbmc+KG1lbW9pemVkUmVzdWx0KSkgewot
ICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBtZW1v
aXplZFJlc3VsdCk7CisgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENh
Y2hlKHN0YXRlLCBtZW1vaXplZFJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRo
Q2FjaGUoZXhlYywgaW1wbC5ub25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0cigpKTsKKyAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLm5vbmRldGVybWlu
aXN0aWNXcml0ZWFibGVBdHRyKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJt
aW5pc3RpY0V4Y2VwdGlvbkF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2Us
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUg
anNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFS
QU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiBjYXN0ZWRUaGlzID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3ROb25kZXRlcm1pbmlzdGljKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYg
KGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZSo+KHNsb3RCYXNl
KSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMs
ICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0ciIp
OwotICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0Tm9uZGV0
ZXJtaW5pc3RpYyIsICJub25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0ciIpOworICAgICAgICAg
ICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0Tm9uZGV0
ZXJtaW5pc3RpYyIsICJub25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0ciIpOworICAgICAgICBy
ZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE5vbmRldGVybWluaXN0aWMi
LCAibm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIiKTsKICAgICB9CiAjaWYgRU5BQkxFKFdF
Ql9SRVBMQVkpCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3Rh
dGUtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKICAgICBJbnB1dEN1cnNvciYgY3Vyc29yID0gZ2xv
YmFsT2JqZWN0LT5pbnB1dEN1cnNvcigpOwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25z
dCBBdG9taWNTdHJpbmc+IGJpbmRpbmdOYW1lKCJUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5ub25kZXRl
cm1pbmlzdGljRXhjZXB0aW9uQXR0ciIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpOwogICAgIGlmIChjdXJzb3IuaXNDYXB0dXJpbmcoKSkgewogICAgICAgICBTdHJpbmcgbWVt
b2l6ZWRSZXN1bHQgPSBjYXN0ZWRUaGlzLT5pbXBsKCkubm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlv
bkF0dHIoKTsKICAgICAgICAgY3Vyc29yLmFwcGVuZElucHV0PE1lbW9pemVkRE9NUmVzdWx0PFN0
cmluZz4+KGJpbmRpbmdOYW1lLmdldCgpLnN0cmluZygpLCBtZW1vaXplZFJlc3VsdCwgMCk7Ci0g
ICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgbWVtb2l6ZWRS
ZXN1bHQpOworICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRl
LCBtZW1vaXplZFJlc3VsdCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKICAgICB9CiAKQEAgLTI2OCwzOCArMjY4LDM4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5v
bmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0cihFeGVjU3RhdGUqIGV4
CiAgICAgICAgIFN0cmluZyBtZW1vaXplZFJlc3VsdDsKICAgICAgICAgTWVtb2l6ZWRET01SZXN1
bHRCYXNlKiBpbnB1dCA9IGN1cnNvci5mZXRjaElucHV0PE1lbW9pemVkRE9NUmVzdWx0QmFzZT4o
KTsKICAgICAgICAgaWYgKGlucHV0ICYmIGlucHV0LT5jb252ZXJ0VG88U3RyaW5nPihtZW1vaXpl
ZFJlc3VsdCkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2Fj
aGUoZXhlYywgbWVtb2l6ZWRSZXN1bHQpOworICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOwogICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGltcGwubm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0
dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1w
bC5ub25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0cigpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5p
c3RpY05vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGlj
R2V0dGVyRXhjZXB0aW9uQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2Us
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9Q
QVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShz
bG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0Tm9uZGV0
ZXJtaW5pc3RpYyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5p
c3RpYyo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE5vbmRldGVybWlu
aXN0aWNQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVw
cmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdE5vbmRldGVybWluaXN0aWMiLCAibm9uZGV0
ZXJtaW5pc3RpY0dldHRlckV4Y2VwdGlvbkF0dHIiKTsKLSAgICAgICAgcmV0dXJuIHRocm93R2V0
dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE5vbmRldGVybWluaXN0aWMiLCAibm9uZGV0ZXJtaW5p
c3RpY0dldHRlckV4Y2VwdGlvbkF0dHIiKTsKKyAgICAgICAgICAgIHJldHVybiByZXBvcnREZXBy
ZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE5vbmRldGVybWluaXN0aWMiLCAibm9uZGV0
ZXJtaW5pc3RpY0dldHRlckV4Y2VwdGlvbkF0dHIiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0
dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3ROb25kZXRlcm1pbmlzdGljIiwgIm5vbmRldGVybWlu
aXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyIik7CiAgICAgfQogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwogI2lmIEVOQUJMRShXRUJfUkVQTEFZKQotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAgSW5wdXRD
dXJzb3ImIGN1cnNvciA9IGdsb2JhbE9iamVjdC0+aW5wdXRDdXJzb3IoKTsKICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbWljU3RyaW5nPiBiaW5kaW5nTmFtZSgiVGVzdE5vbmRl
dGVybWluaXN0aWMubm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2VwdGlvbkF0dHIiLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICBpZiAoY3Vyc29yLmlzQ2FwdHVyaW5n
KCkpIHsKICAgICAgICAgU3RyaW5nIG1lbW9pemVkUmVzdWx0ID0gY2FzdGVkVGhpcy0+aW1wbCgp
Lm5vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyKGVjKTsKICAgICAgICAgY3Vyc29y
LmFwcGVuZElucHV0PE1lbW9pemVkRE9NUmVzdWx0PFN0cmluZz4+KGJpbmRpbmdOYW1lLmdldCgp
LnN0cmluZygpLCBtZW1vaXplZFJlc3VsdCwgZWMpOwotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIG1lbW9pemVkUmVzdWx0KTsKLSAgICAgICAgc2V0RE9N
RXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dp
dGhDYWNoZShzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOworICAgICAgICBzZXRET01FeGNlcHRpb24o
c3RhdGUsIGVjKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAg
IH0KIApAQCAtMzA3LDM4ICszMDcsMzggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJt
aW5pc3RpY05vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyKEV4ZWNTdGEKICAgICAg
ICAgU3RyaW5nIG1lbW9pemVkUmVzdWx0OwogICAgICAgICBNZW1vaXplZERPTVJlc3VsdEJhc2Uq
IGlucHV0ID0gY3Vyc29yLmZldGNoSW5wdXQ8TWVtb2l6ZWRET01SZXN1bHRCYXNlPigpOwogICAg
ICAgICBpZiAoaW5wdXQgJiYgaW5wdXQtPmNvbnZlcnRUbzxTdHJpbmc+KG1lbW9pemVkUmVzdWx0
KSkgewotICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShleGVj
LCBtZW1vaXplZFJlc3VsdCk7Ci0gICAgICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgaW5w
dXQtPmV4Y2VwdGlvbkNvZGUoKSk7CisgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3Ry
aW5nV2l0aENhY2hlKHN0YXRlLCBtZW1vaXplZFJlc3VsdCk7CisgICAgICAgICAgICBzZXRET01F
eGNlcHRpb24oc3RhdGUsIGlucHV0LT5leGNlcHRpb25Db2RlKCkpOwogICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGltcGwubm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2Vw
dGlvbkF0dHIoZWMpKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwubm9uZGV0ZXJtaW5pc3Rp
Y0dldHRlckV4Y2VwdGlvbkF0dHIoZWMpKTsKKyAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVj
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIAotRW5jb2RlZEpT
VmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRp
b25BdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVy
bWluaXN0aWNOb25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNW
YWx1ZSk7CiAgICAgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFt
aWNDYXN0PEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAg
ICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdE5v
bmRldGVybWluaXN0aWMiLCAibm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIiKTsK
LSAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE5vbmRldGVy
bWluaXN0aWMiLCAibm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIiKTsKKyAgICAg
ICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE5v
bmRldGVybWluaXN0aWMiLCAibm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIiKTsK
KyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3ROb25kZXRl
cm1pbmlzdGljIiwgIm5vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyIik7CiAgICAg
fQogI2lmIEVOQUJMRShXRUJfUkVQTEFZKQotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAgSW5wdXRDdXJz
b3ImIGN1cnNvciA9IGdsb2JhbE9iamVjdC0+aW5wdXRDdXJzb3IoKTsKICAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbWljU3RyaW5nPiBiaW5kaW5nTmFtZSgiVGVzdE5vbmRldGVy
bWluaXN0aWMubm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIiLCBBdG9taWNTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICBpZiAoY3Vyc29yLmlzQ2FwdHVyaW5nKCkp
IHsKICAgICAgICAgU3RyaW5nIG1lbW9pemVkUmVzdWx0ID0gY2FzdGVkVGhpcy0+aW1wbCgpLm5v
bmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyKCk7CiAgICAgICAgIGN1cnNvci5hcHBl
bmRJbnB1dDxNZW1vaXplZERPTVJlc3VsdDxTdHJpbmc+PihiaW5kaW5nTmFtZS5nZXQoKS5zdHJp
bmcoKSwgbWVtb2l6ZWRSZXN1bHQsIDApOwotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3Ry
aW5nV2l0aENhY2hlKGV4ZWMsIG1lbW9pemVkUmVzdWx0KTsKKyAgICAgICAgSlNWYWx1ZSByZXN1
bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOwogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiAgICAgfQogCkBAIC0zNDYsMTA0ICszNDYs
MTA0IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlz
dGljU2V0dGVyRXhjZXB0aW9uQXR0cihFeGVjU3RhCiAgICAgICAgIFN0cmluZyBtZW1vaXplZFJl
c3VsdDsKICAgICAgICAgTWVtb2l6ZWRET01SZXN1bHRCYXNlKiBpbnB1dCA9IGN1cnNvci5mZXRj
aElucHV0PE1lbW9pemVkRE9NUmVzdWx0QmFzZT4oKTsKICAgICAgICAgaWYgKGlucHV0ICYmIGlu
cHV0LT5jb252ZXJ0VG88U3RyaW5nPihtZW1vaXplZFJlc3VsdCkpIHsKLSAgICAgICAgICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgbWVtb2l6ZWRSZXN1bHQpOwor
ICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgbWVt
b2l6ZWRSZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PmltcGwoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGlt
cGwubm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIoKSk7CisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5ub25kZXRlcm1pbmlzdGljU2V0
dGVyRXhjZXB0aW9uQXR0cigpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CiB9CiAKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewogICAgIEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGUq
IGRvbU9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlw
ZSo+KGJhc2VWYWx1ZSk7CiAgICAgaWYgKCFkb21PYmplY3QpCi0gICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0Tm9u
ZGV0ZXJtaW5pc3RpYzo6Z2V0Q29uc3RydWN0b3IoZXhlYy0+dm0oKSwgZG9tT2JqZWN0LT5nbG9i
YWxPYmplY3QoKSkpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3ROb25kZXRlcm1pbmlzdGljOjpnZXRDb25z
dHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOwogfQogCi12
b2lkIHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0
cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0Tm9u
ZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGJhc2VPYmplY3QpOwogICAg
IEpTVGVzdE5vbmRldGVybWluaXN0aWMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dE5vbmRldGVybWluaXN0aWMqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rl
c3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
KQotICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpleGVjLCAiVGVzdE5v
bmRldGVybWluaXN0aWMiLCAibm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIiKTsKKyAgICAg
ICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0Tm9uZGV0ZXJt
aW5pc3RpYyIsICJub25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0ciIpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3ROb25kZXRlcm1p
bmlzdGljIiwgIm5vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyIik7CisgICAgICAgICAgICB0
aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25k
ZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0ciIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgU3RyaW5nIG5hdGl2ZVZhbHVl
ID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShl
eGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9T
dHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldE5vbmRldGVybWluaXN0
aWNXcml0ZWFibGVBdHRyKG5hdGl2ZVZhbHVlKTsKIH0KIAogCi12b2lkIHNldEpTVGVzdE5vbmRl
dGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0cihFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRl
dGVybWluaXN0aWNFeGNlcHRpb25BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNl
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGJhc2VPYmplY3QpOwogICAgIEpTVGVzdE5vbmRldGVybWlu
aXN0aWMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE5vbmRldGVybWluaXN0aWMq
PihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3ROb25kZXRlcm1pbmlzdGlj
UHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpKQotICAgICAgICAgICAgcmVw
b3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpleGVjLCAiVGVzdE5vbmRldGVybWluaXN0aWMiLCAi
bm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIiKTsKKyAgICAgICAgICAgIHJlcG9ydERlcHJl
Y2F0ZWRTZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25kZXRl
cm1pbmlzdGljRXhjZXB0aW9uQXR0ciIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJv
d1NldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3ROb25kZXRlcm1pbmlzdGljIiwgIm5vbmRldGVy
bWluaXN0aWNFeGNlcHRpb25BdHRyIik7CisgICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJv
cigqc3RhdGUsICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25kZXRlcm1pbmlzdGljRXhjZXB0
aW9uQXR0ciIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT5pbXBsKCk7Ci0gICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9TdHJpbmcoc3RhdGUpLT52YWx1
ZShzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybjsKICAgICBpbXBsLnNldE5vbmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRyKG5h
dGl2ZVZhbHVlKTsKIH0KIAogCi12b2lkIHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRl
cm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBi
YXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNH
ZXR0ZXJFeGNlcHRpb25BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
IHsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGJhc2VPYmplY3QpOwogICAgIEpTVGVzdE5vbmRldGVybWluaXN0aWMq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE5vbmRldGVybWluaXN0aWMqPihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkg
ewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90
eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpKQotICAgICAgICAgICAgcmVwb3J0RGVw
cmVjYXRlZFNldHRlckVycm9yKCpleGVjLCAiVGVzdE5vbmRldGVybWluaXN0aWMiLCAibm9uZGV0
ZXJtaW5pc3RpY0dldHRlckV4Y2VwdGlvbkF0dHIiKTsKKyAgICAgICAgICAgIHJlcG9ydERlcHJl
Y2F0ZWRTZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25kZXRl
cm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0ciIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICB0aHJvd1NldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3ROb25kZXRlcm1pbmlzdGljIiwgIm5v
bmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyIik7CisgICAgICAgICAgICB0aHJvd1Nl
dHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25kZXRlcm1p
bmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0ciIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgU3RyaW5nIG5hdGl2ZVZhbHVl
ID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShl
eGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9T
dHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldE5vbmRldGVybWluaXN0
aWNHZXR0ZXJFeGNlcHRpb25BdHRyKG5hdGl2ZVZhbHVlKTsKIH0KIAogCi12b2lkIHNldEpTVGVz
dE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0cihFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0Tm9uZGV0ZXJt
aW5pc3RpY05vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGJhc2VPYmplY3QpOwogICAg
IEpTVGVzdE5vbmRldGVybWluaXN0aWMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dE5vbmRldGVybWluaXN0aWMqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rl
c3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
KQotICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpleGVjLCAiVGVzdE5v
bmRldGVybWluaXN0aWMiLCAibm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIiKTsK
KyAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0Tm9u
ZGV0ZXJtaW5pc3RpYyIsICJub25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0ciIpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqZXhlYywgIlRl
c3ROb25kZXRlcm1pbmlzdGljIiwgIm5vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRy
Iik7CisgICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0Tm9uZGV0
ZXJtaW5pc3RpYyIsICJub25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0ciIpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7
CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFs
dWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9TdHJpbmco
c3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldE5vbmRldGVybWluaXN0aWNTZXR0
ZXJFeGNlcHRpb25BdHRyKG5hdGl2ZVZhbHVlLCBlYyk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKIH0KIAogCkBAIC00NTIs
MTcgKzQ1MiwxNyBAQCBKU1ZhbHVlIEpTVGVzdE5vbmRldGVybWluaXN0aWM6OmdldENvbnN0cnVj
dG9yKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iagogICAgIHJldHVybiBnZXRET01D
b25zdHJ1Y3RvcjxKU1Rlc3ROb25kZXRlcm1pbmlzdGljQ29uc3RydWN0b3I+KHZtLCBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlRnVuY3Rpb25Ob25k
ZXRlcm1pbmlzdGljWmVyb0FyZ0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZUZ1bmN0aW9u
Tm9uZGV0ZXJtaW5pc3RpY1plcm9BcmdGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlKQogewotICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+KHRoaXNW
YWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRo
cm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3ROb25kZXRlcm1pbmlzdGljIiwgIm5vbmRldGVy
bWluaXN0aWNaZXJvQXJnRnVuY3Rpb24iKTsKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVF
cnJvcigqc3RhdGUsICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25kZXRlcm1pbmlzdGljWmVy
b0FyZ0Z1bmN0aW9uIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlz
LCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT5pbXBsKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQ7CiAjaWYgRU5BQkxFKFdFQl9SRVBM
QVkpCi0gICAgSW5wdXRDdXJzb3ImIGN1cnNvciA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+aW5wdXRDdXJzb3IoKTsKKyAgICBJbnB1dEN1cnNvciYgY3Vyc29yID0gc3RhdGUtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+aW5wdXRDdXJzb3IoKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8Y29uc3QgQXRvbWljU3RyaW5nPiBiaW5kaW5nTmFtZSgiVGVzdE5vbmRldGVybWluaXN0aWMu
bm9uZGV0ZXJtaW5pc3RpY1plcm9BcmdGdW5jdGlvbiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwogICAgIGlmIChjdXJzb3IuaXNDYXB0dXJpbmcoKSkgewogICAgICAgICBi
b29sIG1lbW9pemVkUmVzdWx0ID0gaW1wbC5ub25kZXRlcm1pbmlzdGljWmVyb0FyZ0Z1bmN0aW9u
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuaAppbmRleCA3MjEyMTkwZDVmMjc4Y2Ux
OWJkNDUyMzJmZjNmZDUyZTJlMTFmOTU3Li42ODE2YTVhMTNjMTc3NGY4ODExZmU1YzhmMjVkNDBh
ZjU1Y2NhODUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmgKQEAgLTgwLDcgKzgw
LDcgQEAgaW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBl
cldvcmxkJiwgVGVzdE5vbmRldGVybWluaXN0aWMKIH0KIAogSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3ROb25kZXRlcm1pbmlzdGljKik7
Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3ROb25kZXRlcm1pbmlzdGljJiBpbXBsKSB7IHJl
dHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgJmltcGwpOyB9CitpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBUZXN0Tm9uZGV0ZXJtaW5pc3RpYyYgaW1wbCkgeyByZXR1cm4gdG9KUyhzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCAmaW1wbCk7IH0KIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpT
Qzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0Tm9uZGV0ZXJtaW5pc3RpYyop
OwogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE9iai5jcHAKaW5kZXggYTU2ZTMyYmEyZmRiZTk4NDVlY2MzYTE1YjI3NzE5YWM5Mjgz
MGM1YS4uYTlmMzk1YjA0YTNiYjBjMzRjNzM1NmE2MWUxY2U2ZDZjMWJjYmVlZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5j
cHAKQEAgLTQ1OCwxOSArNDU4LDE5IEBAIENPTVBJTEVfQVNTRVJUKDB4MWFiYyA9PSBUZXN0T2Jq
OjpDT05TVF9WQUxVRV8xNCwgVGVzdE9iakVudW1DT05TVF9WQUxVRV8xNElzV3JvCiBDT01QSUxF
X0FTU0VSVCgxNSA9PSBUZXN0T2JqOjpDT05TVF9JTVBMLCBUZXN0T2JqRW51bUNPTlNUX0lNUExJ
c1dyb25nVXNlRG9Ob3RDaGVja0NvbnN0YW50cyk7CiBDT01QSUxFX0FTU0VSVCgwID09IFRlc3RP
Ymo6OnJlYWRvbmx5LCBUZXN0T2JqRW51bXJlYWRvbmx5SXNXcm9uZ1VzZURvTm90Q2hlY2tDb25z
dGFudHMpOwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdE9iakNvbnN0cnVj
dG9yOjpjb25zdHJ1Y3RKU1Rlc3RPYmooRXhlY1N0YXRlKiBleGVjKQotewotICAgIGF1dG8qIGNh
c3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqQ29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSk7
Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQotICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4
ZWMpKTsKLSAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpCi0gICAgICAgIHJl
dHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcigqZXhlYywgMCwgInRlc3RDYWxs
YmFjayIsICJUZXN0T2JqIiwgbnVsbHB0cik7Ci0gICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4gdGVz
dENhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhc09iamVjdChleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCgwKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKLSAgICBpZiAoIWV4
ZWMtPmFyZ3VtZW50KDEpLmlzRnVuY3Rpb24oKSkKLSAgICAgICAgcmV0dXJuIHRocm93QXJndW1l
bnRNdXN0QmVGdW5jdGlvbkVycm9yKCpleGVjLCAxLCAidGVzdENhbGxiYWNrRnVuY3Rpb24iLCAi
VGVzdE9iaiIsIG51bGxwdHIpOwotICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2tGdW5jdGlvbj4gdGVz
dENhbGxiYWNrRnVuY3Rpb24gPSBKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGUoYXNPYmpl
Y3QoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSk7CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdE9iakNvbnN0cnVjdG9yOjpj
b25zdHJ1Y3RKU1Rlc3RPYmooRXhlY1N0YXRlKiBzdGF0ZSkKK3sKKyAgICBhdXRvKiBjYXN0ZWRU
aGlzID0ganNDYXN0PEpTVGVzdE9iakNvbnN0cnVjdG9yKj4oc3RhdGUtPmNhbGxlZSgpKTsKKyAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQorICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0
ZSkpOworICAgIGlmICghc3RhdGUtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpCisgICAgICAgIHJl
dHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcigqc3RhdGUsIDAsICJ0ZXN0Q2Fs
bGJhY2siLCAiVGVzdE9iaiIsIG51bGxwdHIpOworICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2s+IHRl
c3RDYWxsYmFjayA9IEpTVGVzdENhbGxiYWNrOjpjcmVhdGUoYXNPYmplY3Qoc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpOworICAgIGlmICgh
c3RhdGUtPmFyZ3VtZW50KDEpLmlzRnVuY3Rpb24oKSkKKyAgICAgICAgcmV0dXJuIHRocm93QXJn
dW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpzdGF0ZSwgMSwgInRlc3RDYWxsYmFja0Z1bmN0aW9u
IiwgIlRlc3RPYmoiLCBudWxscHRyKTsKKyAgICBSZWZQdHI8VGVzdENhbGxiYWNrRnVuY3Rpb24+
IHRlc3RDYWxsYmFja0Z1bmN0aW9uID0gSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKGFz
T2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpKTsKICAgICBSZWZQdHI8VGVzdE9iaj4gb2JqZWN0ID0gVGVzdE9iajo6Y3JlYXRlKHRl
c3RDYWxsYmFjaywgdGVzdENhbGxiYWNrRnVuY3Rpb24pOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgb2Jq
ZWN0LmdldCgpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhz
dGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIG9iamVjdC5nZXQoKSkpKTsKIH0KIAog
Y29uc3QgQ2xhc3NJbmZvIEpTVGVzdE9iakNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0T2Jq
ZWN0Q29uc3RydWN0b3IiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpT
VGVzdE9iakNvbnN0cnVjdG9yKSB9OwpAQCAtNzE5LDI1ICs3MTksMjUgQEAgSlNUZXN0T2JqOjp+
SlNUZXN0T2JqKCkKICAgICByZWxlYXNlSW1wbCgpOwogfQogCi1ib29sIEpTVGVzdE9iajo6Z2V0
T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU1Rlc3RPYmo6
OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihvYmplY3QpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBpZiAoZ2V0U3RhdGlj
VmFsdWVTbG90PEpTVGVzdE9iaiwgQmFzZT4oZXhlYywgSlNUZXN0T2JqVGFibGUsIHRoaXNPYmpl
Y3QsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgaWYgKGdldFN0YXRpY1ZhbHVlU2xvdDxKU1Rl
c3RPYmosIEJhc2U+KHN0YXRlLCBKU1Rlc3RPYmpUYWJsZSwgdGhpc09iamVjdCwgcHJvcGVydHlO
YW1lLCBzbG90KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seUxvbmdBdHRyKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5TG9uZ0F0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0
aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90
eXBlKj4oc2xvdEJhc2UpKQotICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0
ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAicmVhZE9ubHlMb25nQXR0ciIpOwotICAgICAgICBy
ZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInJlYWRPbmx5TG9u
Z0F0dHIiKTsKKyAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3Io
KnN0YXRlLCAiVGVzdE9iaiIsICJyZWFkT25seUxvbmdBdHRyIik7CisgICAgICAgIHJldHVybiB0
aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlYWRPbmx5TG9uZ0F0dHIi
KTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwucmVhZE9ubHlMb25nQXR0cigpKTsKQEAgLTc0NSw0
MyArNzQ1LDQzIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5TG9uZ0F0dHIoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuCiB9CiAKIAotRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUmVhZE9ubHlTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBK
U09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7
CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90
QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpl
eGVjLCAiVGVzdE9iaiIsICJyZWFkT25seVN0cmluZ0F0dHIiKTsKLSAgICAgICAgcmV0dXJuIHRo
cm93R2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJyZWFkT25seVN0cmluZ0F0dHIi
KTsKKyAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRl
LCAiVGVzdE9iaiIsICJyZWFkT25seVN0cmluZ0F0dHIiKTsKKyAgICAgICAgcmV0dXJuIHRocm93
R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVhZE9ubHlTdHJpbmdBdHRyIik7
CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgSlNWYWx1
ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBpbXBsLnJlYWRPbmx5U3RyaW5nQXR0
cigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBs
LnJlYWRPbmx5U3RyaW5nQXR0cigpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CiB9CiAKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlUZXN0T2JqQXR0cihF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVRlc3RP
YmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0
PEpTVGVzdE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBv
cnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInJlYWRPbmx5VGVzdE9i
akF0dHIiKTsKLSAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVz
dE9iaiIsICJyZWFkT25seVRlc3RPYmpBdHRyIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0
RGVwcmVjYXRlZEdldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVhZE9ubHlUZXN0T2Jq
QXR0ciIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVz
dE9iaiIsICJyZWFkT25seVRlc3RPYmpBdHRyIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLnJlYWRPbmx5VGVzdE9iakF0
dHIoKSkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwucmVhZE9ubHlUZXN0T2JqQXR0cigpKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiAKLUVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljUmVhZE9ubHlMb25nQXR0cihFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1JlYWRPbmx5
TG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1i
ZXIoVGVzdE9iajo6c3RhdGljUmVhZE9ubHlMb25nQXR0cigpKTsKQEAgLTc4OSwyOSArNzg5LDI5
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljUmVhZE9ubHlMb25n
QXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqCiB9CiAKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
aXNWYWx1ZSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBU
ZXN0T2JqOjpzdGF0aWNTdHJpbmdBdHRyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJp
bmdXaXRoQ2FjaGUoc3RhdGUsIFRlc3RPYmo6OnN0YXRpY1N0cmluZ0F0dHIoKSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iakNvbnN0cnVjdG9yVGVzdFN1Yk9iaihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90
QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclRlc3RTdWJPYmooRXhlY1N0YXRlKiBzdGF0ZSwgSlNP
YmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwog
ICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oc2xvdEJhc2UpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U3ViT2JqOjpnZXRDb25zdHJ1Y3RvcihleGVj
LT52bSgpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSkpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNUZXN0U3ViT2JqOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpU
ZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
K0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAg
IFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8
SlNUZXN0T2JqKj4oc2xvdEJhc2UpOwpAQCAtODIwLDM3ICs4MjAsMzcgQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIGV4ZWMsIEoKICAgICBTZXR0aW5ncyYgc2V0dGluZ3MgPSBjYXN0ZWRUaGlzLT5pbXBsKCku
ZnJhbWUoKS0+c2V0dGluZ3MoKTsKICAgICBpZiAoIXNldHRpbmdzLnRlc3RTZXR0aW5nRW5hYmxl
ZCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U3ViT2JqOjpnZXRDb25zdHJ1Y3RvcihleGVj
LT52bSgpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSkpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNUZXN0U3ViT2JqOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpF
bnVtQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpFbnVt
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxK
U1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gcmVwb3J0
RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJlbnVtQXR0ciIpOwotICAg
ICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgImVudW1B
dHRyIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpz
dGF0ZSwgIlRlc3RPYmoiLCAiZW51bUF0dHIiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVy
VHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiZW51bUF0dHIiKTsKICAgICB9CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3Ry
aW5nV2l0aENhY2hlKGV4ZWMsIGltcGwuZW51bUF0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5lbnVtQXR0cigpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
Qnl0ZUF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQnl0
ZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAg
IFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8
SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJhc2UpKQotICAgICAgICAgICAgcmV0dXJuIHJlcG9y
dERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAiYnl0ZUF0dHIiKTsKLSAg
ICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJieXRl
QXR0ciIpOworICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigq
c3RhdGUsICJUZXN0T2JqIiwgImJ5dGVBdHRyIik7CisgICAgICAgIHJldHVybiB0aHJvd0dldHRl
clR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImJ5dGVBdHRyIik7CiAgICAgfQogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051
bWJlcihpbXBsLmJ5dGVBdHRyKCkpOwpAQCAtODU4LDE2ICs4NTgsMTYgQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqQnl0ZUF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2Us
IEVuY29kZWRKU1YKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpPY3RldEF0dHIoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqT2N0ZXRBdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFS
QU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialBy
b3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVk
R2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm9jdGV0QXR0ciIpOwotICAgICAgICByZXR1
cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm9jdGV0QXR0ciIpOwor
ICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqc3RhdGUsICJU
ZXN0T2JqIiwgIm9jdGV0QXR0ciIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJy
b3IoKnN0YXRlLCAiVGVzdE9iaiIsICJvY3RldEF0dHIiKTsKICAgICB9CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGlt
cGwub2N0ZXRBdHRyKCkpOwpAQCAtODc1LDE2ICs4NzUsMTYgQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqT2N0ZXRBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNv
ZGVkSlMKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTaG9ydEF0dHIoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU2hvcnRBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhp
c1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlw
ZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVy
RXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInNob3J0QXR0ciIpOwotICAgICAgICByZXR1cm4gdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInNob3J0QXR0ciIpOworICAgICAg
ICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2Jq
IiwgInNob3J0QXR0ciIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0
YXRlLCAiVGVzdE9iaiIsICJzaG9ydEF0dHIiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPmltcGwoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuc2hv
cnRBdHRyKCkpOwpAQCAtODkyLDE2ICs4OTIsMTYgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
U2hvcnRBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlMK
IH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0cihFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RP
YmpQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVj
YXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJ1bnNpZ25lZFNob3J0QXR0ciIpOwot
ICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInVu
c2lnbmVkU2hvcnRBdHRyIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdl
dHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAidW5zaWduZWRTaG9ydEF0dHIiKTsKKyAgICAg
ICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAidW5zaWdu
ZWRTaG9ydEF0dHIiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwo
KTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwudW5zaWduZWRTaG9ydEF0dHIo
KSk7CkBAIC05MDksMTYgKzkwOSwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25l
ZFNob3J0QXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRQogfQogCiAK
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakxvbmdBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0Vu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iakxvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0
KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0g
ICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAg
ICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkK
LSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJU
ZXN0T2JqIiwgImxvbmdBdHRyIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJv
cigqZXhlYywgIlRlc3RPYmoiLCAibG9uZ0F0dHIiKTsKKyAgICAgICAgICAgIHJldHVybiByZXBv
cnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJsb25nQXR0ciIpOwor
ICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJs
b25nQXR0ciIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwog
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5sb25nQXR0cigpKTsKQEAgLTkyNiwx
NiArOTI2LDE2IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakxvbmdBdHRyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWCiB9CiAKIAotRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RC
YXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iakxvbmdMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xv
dEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVO
VVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9Q
QVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAg
ICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAg
ICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdE9i
aiIsICJsb25nTG9uZ0F0dHIiKTsKLSAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9y
KCpleGVjLCAiVGVzdE9iaiIsICJsb25nTG9uZ0F0dHIiKTsKKyAgICAgICAgICAgIHJldHVybiBy
ZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJsb25nTG9uZ0F0
dHIiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RP
YmoiLCAibG9uZ0xvbmdBdHRyIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT5pbXBsKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmxvbmdMb25nQXR0
cigpKTsKQEAgLTk0MywxNiArOTQzLDE2IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakxvbmdM
b25nQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlCiB9CiAK
IAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHIoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNF
RF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqUHJvdG90eXBlKj4oc2xvdEJhc2UpKQotICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJl
Y2F0ZWRHZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAidW5zaWduZWRMb25nTG9uZ0F0dHIi
KTsKLSAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIs
ICJ1bnNpZ25lZExvbmdMb25nQXR0ciIpOworICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJl
Y2F0ZWRHZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInVuc2lnbmVkTG9uZ0xvbmdBdHRy
Iik7CisgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2Jq
IiwgInVuc2lnbmVkTG9uZ0xvbmdBdHRyIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT5pbXBsKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLnVuc2ln
bmVkTG9uZ0xvbmdBdHRyKCkpOwpAQCAtOTYwLDY3ICs5NjAsNjcgQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
c2xvdEJhc2UKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJB
TSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8
SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJv
dG90eXBlKj4oc2xvdEJhc2UpKQotICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRH
ZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAic3RyaW5nQXR0ciIpOwotICAgICAgICByZXR1
cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInN0cmluZ0F0dHIiKTsK
KyAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAi
VGVzdE9iaiIsICJzdHJpbmdBdHRyIik7CisgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVF
cnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInN0cmluZ0F0dHIiKTsKICAgICB9CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5n
V2l0aENhY2hlKGV4ZWMsIGltcGwuc3RyaW5nQXR0cigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnN0cmluZ0F0dHIoKSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4
ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNl
KTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFt
aWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVy
biByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInRlc3RPYmpB
dHRyIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RP
YmoiLCAidGVzdE9iakF0dHIiKTsKKyAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVk
R2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ0ZXN0T2JqQXR0ciIpOworICAgICAgICBy
ZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ0ZXN0T2JqQXR0
ciIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIEpT
VmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RG
OjpnZXRQdHIoaW1wbC50ZXN0T2JqQXR0cigpKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pT
KHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC50ZXN0
T2JqQXR0cigpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiAK
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQor
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqWE1MT2JqQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU09i
amVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAg
ICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkg
ewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFz
ZSkpCi0gICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVj
LCAiVGVzdE9iaiIsICJYTUxPYmpBdHRyIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5
cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAiWE1MT2JqQXR0ciIpOworICAgICAgICAgICAgcmV0
dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIlhNTE9i
akF0dHIiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRl
c3RPYmoiLCAiWE1MT2JqQXR0ciIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+aW1wbCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC54bWxPYmpBdHRyKCkpKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6
OmdldFB0cihpbXBsLnhtbE9iakF0dHIoKSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDcmVhdGUoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ3JlYXRlKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1Zh
bHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9i
aio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+
KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJy
b3IoKmV4ZWMsICJUZXN0T2JqIiwgImNyZWF0ZSIpOwotICAgICAgICByZXR1cm4gdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgImNyZWF0ZSIpOworICAgICAgICAgICAgcmV0
dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImNyZWF0
ZSIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9i
aiIsICJjcmVhdGUiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwo
KTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9vbGVhbihpbXBsLmlzQ3JlYXRlKCkpOwpAQCAt
MTAyOCwzMyArMTAyOCwzMyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDcmVhdGUoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbAogfQogCiAKLUVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
aXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5
cGUqPihzbG90QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRl
ckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRTdHJpbmdBdHRyIik7Ci0gICAgICAg
IHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAicmVmbGVjdGVk
U3RyaW5nQXR0ciIpOworICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJF
cnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZFN0cmluZ0F0dHIiKTsKKyAgICAgICAg
cmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVmbGVjdGVk
U3RyaW5nQXR0ciIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgp
OwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgaW1wbC5mYXN0
R2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0ckF0dHIp
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmZh
c3RHZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRzdHJpbmdhdHRyQXR0
cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAogCi1FbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3Rv
dHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0
dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInJlZmxlY3RlZEludGVncmFsQXR0ciIpOwotICAg
ICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInJlZmxl
Y3RlZEludGVncmFsQXR0ciIpOworICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRH
ZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZEludGVncmFsQXR0ciIpOwor
ICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJy
ZWZsZWN0ZWRJbnRlZ3JhbEF0dHIiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPmltcGwoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuZ2V0SW50ZWdy
YWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRpbnRlZ3JhbGF0dHJBdHRy
KSk7CkBAIC0xMDYyLDE2ICsxMDYyLDE2IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxl
Y3RlZEludGVncmFsQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzCiB9CiAK
IAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVW5z
aWduZWRJbnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0oc2xv
dEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpz
RHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJhc2UpKQotICAgICAgICAgICAg
cmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAicmVm
bGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIiKTsKLSAgICAgICAgcmV0dXJuIHRocm93R2V0dGVy
VHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0
ciIpOworICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqc3Rh
dGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyIik7CisgICAgICAg
IHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlZmxlY3Rl
ZFVuc2lnbmVkSW50ZWdyYWxBdHRyIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT5pbXBsKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihzdGQ6Om1heCgwLCBp
bXBsLmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdW5z
aWduZWRpbnRlZ3JhbGF0dHJBdHRyKSkpOwpAQCAtMTA3OSwxNiArMTA3OSwxNiBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0cihFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KgogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3Rl
ZEJvb2xlYW5BdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alJlZmxlY3RlZEJvb2xlYW5BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFz
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VE
X1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlm
IChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAg
ICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwg
InJlZmxlY3RlZEJvb2xlYW5BdHRyIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVF
cnJvcigqZXhlYywgIlRlc3RPYmoiLCAicmVmbGVjdGVkQm9vbGVhbkF0dHIiKTsKKyAgICAgICAg
ICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIs
ICJyZWZsZWN0ZWRCb29sZWFuQXR0ciIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBl
RXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRCb29sZWFuQXR0ciIpOwogICAgIH0K
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNCb29sZWFuKGltcGwuZmFzdEhhc0F0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJl
ZmxlY3RlZGJvb2xlYW5hdHRyQXR0cikpOwpAQCAtMTA5Niw1MCArMTA5Niw1MCBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiBzbG90QmFzZQogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3Rl
ZFVSTEF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVm
bGVjdGVkVVJMQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShl
eGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFz
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5h
bWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAgICAgICAgICByZXR1
cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJyZWZsZWN0
ZWRVUkxBdHRyIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywg
IlRlc3RPYmoiLCAicmVmbGVjdGVkVVJMQXR0ciIpOworICAgICAgICAgICAgcmV0dXJuIHJlcG9y
dERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZFVSTEF0
dHIiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RP
YmoiLCAicmVmbGVjdGVkVVJMQXR0ciIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+aW1wbCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoZXhl
YywgaW1wbC5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1cmxh
dHRyQXR0cikpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUs
IGltcGwuZ2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXJsYXR0
ckF0dHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIAotRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3Rv
dHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0
dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInJlZmxlY3RlZFN0cmluZ0F0dHIiKTsKLSAgICAg
ICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJyZWZsZWN0
ZWRTdHJpbmdBdHRyIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRl
ckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVmbGVjdGVkU3RyaW5nQXR0ciIpOworICAgICAg
ICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZWZsZWN0
ZWRTdHJpbmdBdHRyIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBs
KCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBpbXBsLmZh
c3RHZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50U3RyaW5nQXR0
ckF0dHIpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBp
bXBsLmZhc3RHZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50U3Ry
aW5nQXR0ckF0dHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAK
IAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3Rv
bUludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShl
eGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFz
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5h
bWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAgICAgICAgICByZXR1
cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJyZWZsZWN0
ZWRDdXN0b21JbnRlZ3JhbEF0dHIiKTsKLSAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVy
cm9yKCpleGVjLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHIiKTsKKyAg
ICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVz
dE9iaiIsICJyZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHIiKTsKKyAgICAgICAgcmV0dXJuIHRo
cm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVmbGVjdGVkQ3VzdG9tSW50
ZWdyYWxBdHRyIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7
CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmdldEludGVncmFsQXR0cmlidXRl
KFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0ckF0dHIpKTsKQEAg
LTExNDcsMTYgKzExNDcsMTYgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3Vz
dG9tSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHMKIH0KIAogCi1FbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0cihFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFu
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxK
U1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gcmVwb3J0
RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRDdXN0b21C
b29sZWFuQXR0ciIpOwotICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMs
ICJUZXN0T2JqIiwgInJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyIik7CisgICAgICAgICAgICBy
ZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVm
bGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHIiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlw
ZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHIiKTsK
ICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzQm9vbGVhbihpbXBsLmZhc3RIYXNBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5h
bWVzOjpjdXN0b21Db250ZW50Qm9vbGVhbkF0dHJBdHRyKSk7CkBAIC0xMTY0LDY5ICsxMTY0LDY5
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsCiB9CiAKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90
QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
T2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsK
ICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KHNsb3RC
YXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4
ZWMsICJUZXN0T2JqIiwgInJlZmxlY3RlZEN1c3RvbVVSTEF0dHIiKTsKLSAgICAgICAgcmV0dXJu
IHRocm93R2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRDdXN0b21V
UkxBdHRyIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9y
KCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVmbGVjdGVkQ3VzdG9tVVJMQXR0ciIpOworICAgICAgICBy
ZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRD
dXN0b21VUkxBdHRyIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBs
KCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBpbXBsLmdl
dFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRVUkxBdHRyQXR0
cikpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwu
Z2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFVSTEF0dHJB
dHRyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiAKLUVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialR5cGVkQXJyYXlBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0Vu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialR5cGVkQXJyYXlBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
T2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsK
ICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KHNsb3RC
YXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4
ZWMsICJUZXN0T2JqIiwgInR5cGVkQXJyYXlBdHRyIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dl
dHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAidHlwZWRBcnJheUF0dHIiKTsKKyAgICAg
ICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9i
aiIsICJ0eXBlZEFycmF5QXR0ciIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJy
b3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ0eXBlZEFycmF5QXR0ciIpOwogICAgIH0KICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhl
eGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC50eXBlZEFy
cmF5QXR0cigpKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC50eXBlZEFycmF5QXR0cigpKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiAKLUVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iakF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0Vu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhp
c1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlw
ZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVy
RXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgImF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uIik7Ci0gICAg
ICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAiYXR0cldp
dGhHZXR0ZXJFeGNlcHRpb24iKTsKKyAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVk
R2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJhdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIp
OworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIs
ICJhdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOwogICAgIH0KICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNOdW1iZXIoaW1wbC5hdHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYykpOwotICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBl
Yyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiAKLUVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFS
QU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialBy
b3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVk
R2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgImF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uIik7
Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAi
YXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iKTsKKyAgICAgICAgICAgIHJldHVybiByZXBvcnREZXBy
ZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJhdHRyV2l0aFNldHRlckV4Y2Vw
dGlvbiIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVz
dE9iaiIsICJhdHRyV2l0aFNldHRlckV4Y2VwdGlvbiIpOwogICAgIH0KICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1w
bC5hdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpKTsKQEAgLTEyMzQsMjcwICsxMjM0LDI3MCBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBzbG90QgogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0
cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNs
b3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhp
c1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlw
ZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVy
RXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uIik7
Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAi
c3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24iKTsKKyAgICAgICAgICAgIHJldHVybiByZXBv
cnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJzdHJpbmdBdHRyV2l0
aEdldHRlckV4Y2VwdGlvbiIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3Io
KnN0YXRlLCAiVGVzdE9iaiIsICJzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOwogICAg
IH0KICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+aW1wbCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywg
aW1wbC5zdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYykpOwotICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBlYyk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShz
dGF0ZSwgaW1wbC5zdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYykpOworICAgIHNldERP
TUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aFNldHRlckV4
Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJp
bmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xv
dEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVO
VVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9Q
QVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAg
ICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAg
ICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdE9i
aiIsICJzdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbiIpOwotICAgICAgICByZXR1cm4gdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInN0cmluZ0F0dHJXaXRoU2V0dGVy
RXhjZXB0aW9uIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVy
cm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAic3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iKTsK
KyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAi
c3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENh
Y2hlKGV4ZWMsIGltcGwuc3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKSk7CisgICAgSlNW
YWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5zdHJpbmdBdHRyV2l0
aFNldHRlckV4Y2VwdGlvbigpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CiB9CiAKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaWN0VHlwZUNoZWNraW5nQXR0cmli
dXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmljdFR5
cGVDaGVja2luZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2Us
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9Q
QVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShz
bG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAo
anNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAgICAgICAg
ICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJz
dHJpY3RUeXBlQ2hlY2tpbmdBdHRyaWJ1dGUiKTsKLSAgICAgICAgcmV0dXJuIHRocm93R2V0dGVy
VHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJzdHJpY3RUeXBlQ2hlY2tpbmdBdHRyaWJ1dGUi
KTsKKyAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRl
LCAiVGVzdE9iaiIsICJzdHJpY3RUeXBlQ2hlY2tpbmdBdHRyaWJ1dGUiKTsKKyAgICAgICAgcmV0
dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAic3RyaWN0VHlwZUNo
ZWNraW5nQXR0cmlidXRlIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5p
bXBsKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLnN0cmljdFR5cGVDaGVja2luZ0F0dHJpYnV0ZSgp
KSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC5zdHJpY3RUeXBlQ2hlY2tpbmdBdHRyaWJ1dGUoKSkp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAogCi1FbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpDdXN0b21BdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RC
YXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iakN1c3RvbUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RC
YXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVT
RURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIGF1dG8qIGNh
c3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oc2xvdEJhc2UpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+Y3VzdG9tQXR0cihleGVjKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5jdXN0b21BdHRyKHN0YXRlKSk7CiB9CiAKIAotRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqT25mb28oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xv
dEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqT25mb28oRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURf
UEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0o
c2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYg
KGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJhc2UpKQotICAgICAgICAg
ICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAi
b25mb28iKTsKLSAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVz
dE9iaiIsICJvbmZvbyIpOworICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0
ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm9uZm9vIik7CisgICAgICAgIHJldHVybiB0aHJv
d0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm9uZm9vIik7CiAgICAgfQotICAg
IFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoZXZlbnRIYW5kbGVyQXR0cmlidXRlKGNhc3RlZFRoaXMtPmltcGwo
KSwgZXZlbnROYW1lcygpLmZvb0V2ZW50KSk7CiB9CiAKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNs
b3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRl
LCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1
ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoq
PihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihz
bG90QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9y
KCpleGVjLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUiKTsKLSAgICAgICAg
cmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0
U3RhdGVBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0
dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUiKTsK
KyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAi
d2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT5pbXBsKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLndpdGhT
Y3JpcHRTdGF0ZUF0dHJpYnV0ZShleGVjKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJl
cihpbXBsLndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZSgqc3RhdGUpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0
aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQor
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRy
aWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAg
IFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8
SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJhc2UpKQotICAgICAgICAgICAgcmV0dXJuIHJlcG9y
dERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAid2l0aENhbGxXaXRoQW5k
U2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUiKTsKLSAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlw
ZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJ3aXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0
dHJpYnV0ZSIpOworICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJv
cigqc3RhdGUsICJUZXN0T2JqIiwgIndpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmli
dXRlIik7CisgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0
T2JqIiwgIndpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlIik7CiAgICAgfQog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQg
PSBqc051bWJlcihpbXBsLndpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlKGV4
ZWMpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwud2l0aENhbGxXaXRoQW5k
U2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUoKnN0YXRlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOwogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QXR0cmlidXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RC
YXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3Rv
dHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0
dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0
cmlidXRlIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRl
c3RPYmoiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUiKTsKKyAgICAgICAg
ICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIs
ICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSIpOworICAgICAgICByZXR1cm4g
dGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dEF0dHJpYnV0ZSIpOwogICAgIH0KLSAgICBhdXRvKiBzY3JpcHRDb250ZXh0ID0g
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGF1dG8qIHNjcmlwdENvbnRleHQgPSBqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghc2NyaXB0Q29udGV4dCkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC53aXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dEF0dHJpYnV0ZShzY3JpcHRDb250ZXh0KSkpOworICAgIEpTVmFsdWUgcmVzdWx0
ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGlt
cGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoc2NyaXB0Q29udGV4dCkpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIAotRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJh
aXNlcyhFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxK
U1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gcmVwb3J0
RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0U3RhdGVB
dHRyaWJ1dGVSYWlzZXMiKTsKLSAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpl
eGVjLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMiKTsKKyAgICAg
ICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9i
aiIsICJ3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMiKTsKKyAgICAgICAgcmV0dXJuIHRo
cm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlwdFN0YXRlQXR0
cmlidXRlUmFpc2VzIik7CiAgICAgfQogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pT
KGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLndpdGhT
Y3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhleGVjLCBlYykpKTsKLSAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgZWMpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwud2l0aFNjcmlwdFN0YXRlQXR0cmli
dXRlUmFpc2VzKCpzdGF0ZSwgZWMpKSk7CisgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiAKLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBz
bG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAg
VU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAg
ICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAg
ICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0
T2JqIiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzIik7Ci0gICAg
ICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAid2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMiKTsKKyAgICAgICAgICAgIHJldHVy
biByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyIpOworICAgICAgICByZXR1cm4gdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEF0dHJpYnV0ZVJhaXNlcyIpOwogICAgIH0KICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKLSAgICBhdXRvKiBzY3JpcHRDb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwor
ICAgIGF1dG8qIHNjcmlwdENvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0
ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAg
IGlmICghc2NyaXB0Q29udGV4dCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIEpT
VmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RG
OjpnZXRQdHIoaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyhz
Y3JpcHRDb250ZXh0LCBlYykpKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IFdURjo6Z2V0UHRyKGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlz
ZXMoc2NyaXB0Q29udGV4dCwgZWMpKSk7CisgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiAKLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRy
aWJ1dGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0
YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNW
YWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RP
YmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUq
PihzbG90QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVy
cm9yKCpleGVjLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlw
dFN0YXRlQXR0cmlidXRlIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigq
ZXhlYywgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0
ZUF0dHJpYnV0ZSIpOworICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJF
cnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2Ny
aXB0U3RhdGVBdHRyaWJ1dGUiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9y
KCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRT
dGF0ZUF0dHJpYnV0ZSIpOwogICAgIH0KLSAgICBhdXRvKiBzY3JpcHRDb250ZXh0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGF1dG8qIHNjcmlwdENvbnRleHQgPSBqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghc2NyaXB0Q29udGV4dCkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+aW1wbCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKGV4ZWMsIHNjcmlwdENvbnRleHQpKSk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
V1RGOjpnZXRQdHIoaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRl
QXR0cmlidXRlKCpzdGF0ZSwgc2NyaXB0Q29udGV4dCkpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2Jq
ZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7
CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KHNsb3RCYXNl
KSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMs
ICJUZXN0T2JqIiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRy
aWJ1dGVSYWlzZXMiKTsKLSAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpleGVj
LCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0
cmlidXRlUmFpc2VzIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRl
ckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRT
Y3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJU
eXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFu
ZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzIik7CiAgICAgfQogICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwotICAgIGF1dG8qIHNjcmlwdENvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7CisgICAgYXV0byogc2NyaXB0Q29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CiAgICAgaWYgKCFzY3JpcHRDb250ZXh0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0g
ICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LCBXVEY6OmdldFB0cihpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3Rh
dGVBdHRyaWJ1dGVSYWlzZXMoZXhlYywgc2NyaXB0Q29udGV4dCwgZWMpKSk7Ci0gICAgc2V0RE9N
RXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLndpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoKnN0YXRlLCBzY3JpcHRD
b250ZXh0LCBlYykpKTsKKyAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRy
aWJ1dGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nh
c3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2Jq
UHJvdG90eXBlKj4oc2xvdEJhc2UpKQotICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0
ZWRHZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUiKTsKLSAgICAgICAgcmV0dXJuIHRo
cm93R2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZSIpOworICAgICAgICAgICAg
cmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIndp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRl
Iik7CisgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2Jq
IiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0
cmlidXRlIik7CiAgICAgfQotICAgIGF1dG8qIHNjcmlwdENvbnRleHQgPSBqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CisgICAgYXV0byogc2NyaXB0Q29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CiAgICAgaWYgKCFzY3JpcHRDb250ZXh0KQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5p
bXBsKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5k
U2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKGV4ZWMsIHNjcmlwdENvbnRleHQpKSk7Cisg
ICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSwgV1RGOjpnZXRQdHIoaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0
YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZSgqc3RhdGUsIHNjcmlwdENvbnRleHQpKSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENh
bGxTdGFja0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJB
TShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90
QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAgICAgICAgICBy
ZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJ3aXRo
U2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlIik7Ci0gICAgICAgIHJldHVybiB0
aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEFyZ3VtZW50
c0FuZENhbGxTdGFja0F0dHJpYnV0ZSIpOworICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJl
Y2F0ZWRHZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRBcmd1bWVudHNB
bmRDYWxsU3RhY2tBdHRyaWJ1dGUiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0
dHJpYnV0ZSIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwot
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSwgV1RGOjpnZXRQdHIoaW1wbC53aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmli
dXRlKCkpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxs
U3RhY2tBdHRyaWJ1dGUoKSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
IH0KIAogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpD
b25kaXRpb25hbEF0dHIxKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iakNvbmRpdGlvbmFsQXR0cjEoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURf
UEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0o
c2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYg
KGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJhc2UpKQotICAgICAgICAg
ICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAi
Y29uZGl0aW9uYWxBdHRyMSIpOwotICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3Io
KmV4ZWMsICJUZXN0T2JqIiwgImNvbmRpdGlvbmFsQXR0cjEiKTsKKyAgICAgICAgICAgIHJldHVy
biByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJjb25kaXRp
b25hbEF0dHIxIik7CisgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUs
ICJUZXN0T2JqIiwgImNvbmRpdGlvbmFsQXR0cjEiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwu
Y29uZGl0aW9uYWxBdHRyMSgpKTsKQEAgLTE1MDcsMTYgKzE1MDcsMTYgQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBz
bG90QmFzZSwgRW4KICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShD
b25kaXRpb24yKQotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMihFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVT
RURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVz
dE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXBy
ZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgImNvbmRpdGlvbmFsQXR0cjIiKTsK
LSAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJj
b25kaXRpb25hbEF0dHIyIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdl
dHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiY29uZGl0aW9uYWxBdHRyMiIpOworICAgICAg
ICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJjb25kaXRp
b25hbEF0dHIyIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7
CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmNvbmRpdGlvbmFsQXR0cjIoKSk7
CkBAIC0xNTI2LDE2ICsxNTI2LDE2IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlv
bmFsQXR0cjIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuCiAjZW5kaWYK
IAogI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLUVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMyhFeGVjU3RhdGUqIHN0YXRlLCBK
U09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7
CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90
QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpl
eGVjLCAiVGVzdE9iaiIsICJjb25kaXRpb25hbEF0dHIzIik7Ci0gICAgICAgIHJldHVybiB0aHJv
d0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAiY29uZGl0aW9uYWxBdHRyMyIpOwor
ICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqc3RhdGUsICJU
ZXN0T2JqIiwgImNvbmRpdGlvbmFsQXR0cjMiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVy
VHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiY29uZGl0aW9uYWxBdHRyMyIpOwogICAgIH0K
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNOdW1iZXIoaW1wbC5jb25kaXRpb25hbEF0dHIzKCkpOwpAQCAtMTU0NSw5MSArMTU0NSw5
MSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbgogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0
aW9uMSkKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25h
bEF0dHI0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0oc2xv
dEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIGF1dG8qIGNhc3RlZFRo
aXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oc2xvdEJhc2UpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNUZXN0T2JqZWN0QTo6Z2V0Q29uc3RydWN0b3IoZXhlYy0+dm0oKSwgY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE9i
amVjdEE6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSkpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUo
Q29uZGl0aW9uMikKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25k
aXRpb25hbEF0dHI1Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RC
YXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVT
RURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIGF1dG8qIGNh
c3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oc2xvdEJhc2UpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNUZXN0T2JqZWN0Qjo6Z2V0Q29uc3RydWN0b3IoZXhlYy0+dm0oKSwgY2Fz
dGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
VGVzdE9iamVjdEI6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSkpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBF
TkFCTEUoQ29uZGl0aW9uMikKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0
cjZDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3Qq
IHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIGF1
dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oc2xvdEJhc2UpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0T2JqZWN0Qzo6Z2V0Q29uc3RydWN0b3IoZXhlYy0+dm0o
KSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTVGVzdE9iamVjdEM6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSkpOwogfQogCiAjZW5kaWYKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqQ2FjaGVkQXR0cmlidXRlMShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUxKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90
QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5V
U0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAg
IGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAgICAg
ICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2Jq
IiwgImNhY2hlZEF0dHJpYnV0ZTEiKTsKLSAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVy
cm9yKCpleGVjLCAiVGVzdE9iaiIsICJjYWNoZWRBdHRyaWJ1dGUxIik7CisgICAgICAgICAgICBy
ZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiY2Fj
aGVkQXR0cmlidXRlMSIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0
YXRlLCAiVGVzdE9iaiIsICJjYWNoZWRBdHRyaWJ1dGUxIik7CiAgICAgfQogICAgIGlmIChKU1Zh
bHVlIGNhY2hlZFZhbHVlID0gY2FzdGVkVGhpcy0+bV9jYWNoZWRBdHRyaWJ1dGUxLmdldCgpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhY2hlZFZhbHVlKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gKGltcGwuY2Fj
aGVkQXR0cmlidXRlMSgpLmhhc05vVmFsdWUoKSA/IGpzTnVsbCgpIDogaW1wbC5jYWNoZWRBdHRy
aWJ1dGUxKCkuanNWYWx1ZSgpKTsKLSAgICBjYXN0ZWRUaGlzLT5tX2NhY2hlZEF0dHJpYnV0ZTEu
c2V0KGV4ZWMtPnZtKCksIGNhc3RlZFRoaXMsIHJlc3VsdCk7CisgICAgY2FzdGVkVGhpcy0+bV9j
YWNoZWRBdHRyaWJ1dGUxLnNldChzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcywgcmVzdWx0KTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIAotRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90
QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0
KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0g
ICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAg
ICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkK
LSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJU
ZXN0T2JqIiwgImNhY2hlZEF0dHJpYnV0ZTIiKTsKLSAgICAgICAgcmV0dXJuIHRocm93R2V0dGVy
VHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJjYWNoZWRBdHRyaWJ1dGUyIik7CisgICAgICAg
ICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoi
LCAiY2FjaGVkQXR0cmlidXRlMiIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJy
b3IoKnN0YXRlLCAiVGVzdE9iaiIsICJjYWNoZWRBdHRyaWJ1dGUyIik7CiAgICAgfQogICAgIGlm
IChKU1ZhbHVlIGNhY2hlZFZhbHVlID0gY2FzdGVkVGhpcy0+bV9jYWNoZWRBdHRyaWJ1dGUyLmdl
dCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhY2hlZFZhbHVlKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gKGlt
cGwuY2FjaGVkQXR0cmlidXRlMigpLmhhc05vVmFsdWUoKSA/IGpzTnVsbCgpIDogaW1wbC5jYWNo
ZWRBdHRyaWJ1dGUyKCkuanNWYWx1ZSgpKTsKLSAgICBjYXN0ZWRUaGlzLT5tX2NhY2hlZEF0dHJp
YnV0ZTIuc2V0KGV4ZWMtPnZtKCksIGNhc3RlZFRoaXMsIHJlc3VsdCk7CisgICAgY2FzdGVkVGhp
cy0+bV9jYWNoZWRBdHRyaWJ1dGUyLnNldChzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcywgcmVzdWx0
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIAotRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqQW55QXR0cmlidXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNs
b3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakFueUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCog
c2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAg
IFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAg
ICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpCi0g
ICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVz
dE9iaiIsICJhbnlBdHRyaWJ1dGUiKTsKLSAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVy
cm9yKCpleGVjLCAiVGVzdE9iaiIsICJhbnlBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIHJldHVy
biByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJhbnlBdHRy
aWJ1dGUiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRl
c3RPYmoiLCAiYW55QXR0cmlidXRlIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT5pbXBsKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSAoaW1wbC5hbnlBdHRyaWJ1dGUoKS5o
YXNOb1ZhbHVlKCkgPyBqc051bGwoKSA6IGltcGwuYW55QXR0cmlidXRlKCkuanNWYWx1ZSgpKTsK
QEAgLTE2MzcsNjEgKzE2MzcsNjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQW55QXR0cmli
dXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGUKIH0KIAogCi1F
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb250ZW50RG9jdW1lbnQoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29udGVudERvY3VtZW50KEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1Zh
bHVlKTsKICAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KHNsb3RCYXNl
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoc2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoZXhlYywgaW1wbC5jb250ZW50RG9j
dW1lbnQoKSkgPyB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6Omdl
dFB0cihpbXBsLmNvbnRlbnREb2N1bWVudCgpKSkgOiBqc051bGwoKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShzdGF0ZSwgaW1wbC5jb250ZW50
RG9jdW1lbnQoKSkgPyB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RG
OjpnZXRQdHIoaW1wbC5jb250ZW50RG9jdW1lbnQoKSkpIDoganNOdWxsKCkpOwogfQogCiAKLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iak11dGFibGVQb2ludChFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpNdXRhYmxlUG9pbnQoRXhlY1N0YXRlKiBzdGF0ZSwgSlNP
YmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwog
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJh
c2UpKQotICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqZXhl
YywgIlRlc3RPYmoiLCAibXV0YWJsZVBvaW50Iik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRl
clR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAibXV0YWJsZVBvaW50Iik7CisgICAgICAgICAg
ICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAi
bXV0YWJsZVBvaW50Iik7CisgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3Rh
dGUsICJUZXN0T2JqIiwgIm11dGFibGVQb2ludCIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoU1ZHU3RhdGljUHJvcGVydHlUZWFy
T2ZmPFRlc3RPYmosIFNWR1BvaW50Pjo6Y3JlYXRlKGltcGwsIGltcGwubXV0YWJsZVBvaW50KCks
ICZUZXN0T2JqOjp1cGRhdGVNdXRhYmxlUG9pbnQpKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0
b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoU1ZHU3Rh
dGljUHJvcGVydHlUZWFyT2ZmPFRlc3RPYmosIFNWR1BvaW50Pjo6Y3JlYXRlKGltcGwsIGltcGwu
bXV0YWJsZVBvaW50KCksICZUZXN0T2JqOjp1cGRhdGVNdXRhYmxlUG9pbnQpKSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iakltbXV0YWJsZVBvaW50KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpz
VGVzdE9iakltbXV0YWJsZVBvaW50KEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFz
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VE
X1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlm
IChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAg
ICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwg
ImltbXV0YWJsZVBvaW50Iik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigq
ZXhlYywgIlRlc3RPYmoiLCAiaW1tdXRhYmxlUG9pbnQiKTsKKyAgICAgICAgICAgIHJldHVybiBy
ZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJpbW11dGFibGVQ
b2ludCIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVz
dE9iaiIsICJpbW11dGFibGVQb2ludCIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+aW1wbCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoU1ZHUHJvcGVydHlUZWFyT2ZmPFNWR1BvaW50
Pjo6Y3JlYXRlKGltcGwuaW1tdXRhYmxlUG9pbnQoKSkpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9
IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihTVkdQ
cm9wZXJ0eVRlYXJPZmY8U1ZHUG9pbnQ+OjpjcmVhdGUoaW1wbC5pbW11dGFibGVQb2ludCgpKSkp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAogCi1FbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpTdHJhd2JlcnJ5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RC
YXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialN0cmF3YmVycnkoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RC
YXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVT
RURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAg
aWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJhc2UpKQotICAgICAg
ICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoi
LCAic3RyYXdiZXJyeSIpOwotICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4
ZWMsICJUZXN0T2JqIiwgInN0cmF3YmVycnkiKTsKKyAgICAgICAgICAgIHJldHVybiByZXBvcnRE
ZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJzdHJhd2JlcnJ5Iik7Cisg
ICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInN0
cmF3YmVycnkiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsK
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuYmx1ZWJlcnJ5KCkpOwpAQCAtMTY5
OSwxNiArMTY5OSwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJhd2JlcnJ5KEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSgogfQogCiAKLUVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialN0cmljdEZsb2F0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNs
b3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialN0cmljdEZsb2F0KEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBz
bG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAg
VU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAg
ICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAg
ICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0
T2JqIiwgInN0cmljdEZsb2F0Iik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJv
cigqZXhlYywgIlRlc3RPYmoiLCAic3RyaWN0RmxvYXQiKTsKKyAgICAgICAgICAgIHJldHVybiBy
ZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJzdHJpY3RGbG9h
dCIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9i
aiIsICJzdHJpY3RGbG9hdCIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
aW1wbCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5zdHJpY3RGbG9hdCgp
KTsKQEAgLTE3MTYsMTYgKzE3MTYsMTYgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaWN0
RmxvYXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWQKIH0KIAog
Ci1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpEZXNjcmlwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpEZXNjcmlwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBK
U09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7
CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90
QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpl
eGVjLCAiVGVzdE9iaiIsICJkZXNjcmlwdGlvbiIpOwotICAgICAgICByZXR1cm4gdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgImRlc2NyaXB0aW9uIik7CisgICAgICAgICAg
ICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAi
ZGVzY3JpcHRpb24iKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0
ZSwgIlRlc3RPYmoiLCAiZGVzY3JpcHRpb24iKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPmltcGwoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuZGVz
Y3JpcHRpb24oKSk7CkBAIC0xNzMzLDE2ICsxNzMzLDE2IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iakRlc2NyaXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNv
ZGVkCiB9CiAKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqSWQoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqSWQoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3Qq
IHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpT
VGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAg
ICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJhc2UpKQot
ICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqZXhlYywgIlRl
c3RPYmoiLCAiaWQiKTsKLSAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpleGVj
LCAiVGVzdE9iaiIsICJpZCIpOworICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRH
ZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImlkIik7CisgICAgICAgIHJldHVybiB0aHJv
d0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImlkIik7CiAgICAgfQogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051
bWJlcihpbXBsLmlkKCkpOwpAQCAtMTc1MCwzMyArMTc1MCwzMyBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpJZChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpT
VmFsdWUgdAogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakhhc2goRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqSGFzaChFeGVjU3RhdGUqIHN0YXRlLCBK
U09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7
CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90
QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpl
eGVjLCAiVGVzdE9iaiIsICJoYXNoIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVF
cnJvcigqZXhlYywgIlRlc3RPYmoiLCAiaGFzaCIpOworICAgICAgICAgICAgcmV0dXJuIHJlcG9y
dERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImhhc2giKTsKKyAgICAg
ICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiaGFzaCIp
OwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgaW1wbC5oYXNoKCkpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuaGFzaCgpKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIAotRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
c2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUp
OwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xv
dEJhc2UpKQotICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigq
ZXhlYywgIlRlc3RPYmoiLCAicmVwbGFjZWFibGVBdHRyaWJ1dGUiKTsKLSAgICAgICAgcmV0dXJu
IHRocm93R2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJyZXBsYWNlYWJsZUF0dHJp
YnV0ZSIpOworICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigq
c3RhdGUsICJUZXN0T2JqIiwgInJlcGxhY2VhYmxlQXR0cmlidXRlIik7CisgICAgICAgIHJldHVy
biB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlcGxhY2VhYmxlQXR0
cmlidXRlIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLnJlcGxhY2VhYmxlQXR0cmlidXRlKCkp
OwpAQCAtMTc4NCwxNiArMTc4NCwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZXBsYWNl
YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZQogfQogCiAK
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlRG91YmxlQXR0cmlidXRlKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlRG91YmxlQXR0cmli
dXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBV
TlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpT
VGVzdE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnRE
ZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm51bGxhYmxlRG91YmxlQXR0
cmlidXRlIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRl
c3RPYmoiLCAibnVsbGFibGVEb3VibGVBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIHJldHVybiBy
ZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJudWxsYWJsZURv
dWJsZUF0dHJpYnV0ZSIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0
YXRlLCAiVGVzdE9iaiIsICJudWxsYWJsZURvdWJsZUF0dHJpYnV0ZSIpOwogICAgIH0KICAgICBi
b29sIGlzTnVsbCA9IGZhbHNlOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7
CkBAIC0xODA0LDE2ICsxODA0LDE2IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxl
RG91YmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCCiB9CiAKIAot
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVMb25nQXR0cmlidXRlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlTG9uZ0F0dHJpYnV0ZShF
eGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RP
YmpQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVj
YXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJudWxsYWJsZUxvbmdBdHRyaWJ1dGUi
KTsKLSAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIs
ICJudWxsYWJsZUxvbmdBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIHJldHVybiByZXBvcnREZXBy
ZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJudWxsYWJsZUxvbmdBdHRyaWJ1
dGUiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RP
YmoiLCAibnVsbGFibGVMb25nQXR0cmlidXRlIik7CiAgICAgfQogICAgIGJvb2wgaXNOdWxsID0g
ZmFsc2U7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKQEAgLTE4MjQsMTYg
KzE4MjQsMTYgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVMb25nQXR0cmlidXRl
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXMKIH0KIAogCi1FbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpOdWxsYWJsZUJvb2xlYW5BdHRyaWJ1dGUoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQor
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVCb29sZWFuQXR0cmlidXRlKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3Rv
dHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0
dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZSIpOwot
ICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm51
bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZSIpOworICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJl
Y2F0ZWRHZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm51bGxhYmxlQm9vbGVhbkF0dHJp
YnV0ZSIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVz
dE9iaiIsICJudWxsYWJsZUJvb2xlYW5BdHRyaWJ1dGUiKTsKICAgICB9CiAgICAgYm9vbCBpc051
bGwgPSBmYWxzZTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwpAQCAtMTg0
NCwzNiArMTg0NCwzNiBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUJvb2xlYW5B
dHRyaWJ1dGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdAogfQogCiAKLUVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nQXR0cmlidXRlKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nQXR0cmlidXRlKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFS
QU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialBy
b3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVk
R2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm51bGxhYmxlU3RyaW5nQXR0cmlidXRlIik7
Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAi
bnVsbGFibGVTdHJpbmdBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIHJldHVybiByZXBvcnREZXBy
ZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJudWxsYWJsZVN0cmluZ0F0dHJp
YnV0ZSIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVz
dE9iaiIsICJudWxsYWJsZVN0cmluZ0F0dHJpYnV0ZSIpOwogICAgIH0KICAgICBib29sIGlzTnVs
bCA9IGZhbHNlOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgSlNW
YWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBpbXBsLm51bGxhYmxlU3RyaW5n
QXR0cmlidXRlKGlzTnVsbCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2Fj
aGUoc3RhdGUsIGltcGwubnVsbGFibGVTdHJpbmdBdHRyaWJ1dGUoaXNOdWxsKSk7CiAgICAgaWYg
KGlzTnVsbCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
K0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURf
UEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9i
alByb3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNh
dGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm51bGxhYmxlTG9uZ1NldHRhYmxlQXR0
cmlidXRlIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRl
c3RPYmoiLCAibnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIHJl
dHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJudWxs
YWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJU
eXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJudWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0
ZSIpOwogICAgIH0KICAgICBib29sIGlzTnVsbCA9IGZhbHNlOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT5pbXBsKCk7CkBAIC0xODg0LDEwOSArMTg4NCwxMDkgQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCoKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmlu
Z1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxh
YmxlU3RyaW5nVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0o
ZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJh
c2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVk
VGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJhc2UpKQotICAgICAgICAgICAgcmV0
dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAibnVsbGFi
bGVTdHJpbmdWYWx1ZSIpOwotICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4
ZWMsICJUZXN0T2JqIiwgIm51bGxhYmxlU3RyaW5nVmFsdWUiKTsKKyAgICAgICAgICAgIHJldHVy
biByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJudWxsYWJs
ZVN0cmluZ1ZhbHVlIik7CisgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3Rh
dGUsICJUZXN0T2JqIiwgIm51bGxhYmxlU3RyaW5nVmFsdWUiKTsKICAgICB9CiAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CiAgICAgYm9vbCBpc051bGwgPSBmYWxzZTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1w
bC5udWxsYWJsZVN0cmluZ1ZhbHVlKGlzTnVsbCwgZWMpKTsKLSAgICBzZXRET01FeGNlcHRpb24o
ZXhlYywgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwogICAgIGlmIChpc051
bGwpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpBdHRyaWJ1dGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMp
OworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWND
YXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiBy
ZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgImF0dHJpYnV0ZSIp
OwotICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwg
ImF0dHJpYnV0ZSIpOworICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJF
cnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImF0dHJpYnV0ZSIpOworICAgICAgICByZXR1cm4gdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJhdHRyaWJ1dGUiKTsKICAgICB9
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGltcGwuYXR0cmlidXRlKCkpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuYXR0cmlidXRlKCkpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAogCi1FbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZShFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlw
ZShFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVw
cmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJhdHRyaWJ1dGVXaXRoUmVzZXJ2
ZWRFbnVtVHlwZSIpOwotICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMs
ICJUZXN0T2JqIiwgImF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlIik7CisgICAgICAgICAg
ICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAi
YXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0
dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiYXR0cmlidXRlV2l0aFJlc2VydmVkRW51
bVR5cGUiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGltcGwuYXR0cmlidXRl
V2l0aFJlc2VydmVkRW51bVR5cGUoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dp
dGhDYWNoZShzdGF0ZSwgaW1wbC5hdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZSgpKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIAotRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZVZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBKU1Rlc3RPYmpQcm90b3R5cGUqIGRvbU9i
amVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oYmFzZVZhbHVlKTsKICAg
ICBpZiAoIWRvbU9iamVjdCkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RPYmo6OmdldENvbnN0cnVjdG9yKGV4
ZWMtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3Ioc3RhdGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0
T2JqOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3Qo
KSkpOwogfQogCi12b2lkIHNldEpTVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0cihF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBzZXRKU1Rlc3RPYmpDb25zdHJ1Y3RvclN0
YXRpY1N0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJB
TShiYXNlT2JqZWN0KTsKLSAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1N0cmluZyhzdGF0ZSktPnZhbHVl
KHN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIFRlc3RPYmo6OnNldFN0YXRpY1N0cmluZ0F0dHIobmF0aXZlVmFsdWUp
OwogfQogCiAKLXZvaWQgc2V0SlNUZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNU
ZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0
YXRlLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAg
ICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0
PEpTVGVzdE9iaio+KGJhc2VPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwot
ICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIC8v
IFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgotICAgIGNhc3RlZFRoaXMtPnB1dERp
cmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJUZXN0U3ViT2Jq
RW5hYmxlZEJ5U2V0dGluZyIpLCB2YWx1ZSk7CisgICAgY2FzdGVkVGhpcy0+cHV0RGlyZWN0KHN0
YXRlLT52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCAiVGVzdFN1Yk9iakVuYWJs
ZWRCeVNldHRpbmciKSwgdmFsdWUpOwogfQogCiAKLXZvaWQgc2V0SlNUZXN0T2JqRW51bUF0dHIo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIHNldEpTVGVzdE9iakVu
dW1BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKGJhc2VPYmplY3QpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nh
c3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2Jq
UHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpKQotICAgICAgICAgICAgcmVw
b3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJlbnVtQXR0ciIpOwor
ICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoi
LCAiZW51bUF0dHIiKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBl
RXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgImVudW1BdHRyIik7CisgICAgICAgICAgICB0aHJvd1Nl
dHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImVudW1BdHRyIik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBT
dHJpbmcgbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0g
ICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBTdHJpbmcgbmF0aXZl
VmFsdWUgPSB2YWx1ZS50b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRlKTsKKyAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChu
YXRpdmVWYWx1ZSAhPSAiIiAmJiBuYXRpdmVWYWx1ZSAhPSAiRW51bVZhbHVlMSIgJiYgbmF0aXZl
VmFsdWUgIT0gIkVudW1WYWx1ZTIiICYmIG5hdGl2ZVZhbHVlICE9ICJFbnVtVmFsdWUzIikKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTk5NCw3NzMgKzE5OTQsNzczIEBAIHZvaWQgc2V0SlNUZXN0T2Jq
RW51bUF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpT
VmFsdWUKIH0KIAogCi12b2lkIHNldEpTVGVzdE9iakJ5dGVBdHRyKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBzZXRKU1Rlc3RPYmpCeXRlQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsK
ICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0
ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAiYnl0ZUF0dHIiKTsKKyAgICAgICAgICAgIHJlcG9y
dERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImJ5dGVBdHRyIik7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVz
dE9iaiIsICJieXRlQXR0ciIpOworICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0
YXRlLCAiVGVzdE9iaiIsICJieXRlQXR0ciIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaW50OF90IG5hdGl2ZVZhbHVl
ID0gdG9JbnQ4KGV4ZWMsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtF
TFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGludDhfdCBuYXRpdmVWYWx1ZSA9IHRvSW50
OChzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRCeXRlQXR0
cihuYXRpdmVWYWx1ZSk7CiB9CiAKIAotdm9pZCBzZXRKU1Rlc3RPYmpPY3RldEF0dHIoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIHNldEpTVGVzdE9iak9jdGV0QXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShi
YXNlT2JqZWN0KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3Rv
dHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKSkKLSAgICAgICAgICAgIHJlcG9ydERl
cHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAib2N0ZXRBdHRyIik7CisgICAg
ICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJv
Y3RldEF0dHIiKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJy
b3IoKmV4ZWMsICJUZXN0T2JqIiwgIm9jdGV0QXR0ciIpOworICAgICAgICAgICAgdGhyb3dTZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJvY3RldEF0dHIiKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIHVp
bnQ4X3QgbmF0aXZlVmFsdWUgPSB0b1VJbnQ4KGV4ZWMsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9u
KTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIHVpbnQ4X3Qg
bmF0aXZlVmFsdWUgPSB0b1VJbnQ4KHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Cisg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsK
ICAgICBpbXBsLnNldE9jdGV0QXR0cihuYXRpdmVWYWx1ZSk7CiB9CiAKIAotdm9pZCBzZXRKU1Rl
c3RPYmpTaG9ydEF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lk
IHNldEpTVGVzdE9ialNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZU9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFt
aWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKSkK
LSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoi
LCAic2hvcnRBdHRyIik7CisgICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3Io
KnN0YXRlLCAiVGVzdE9iaiIsICJzaG9ydEF0dHIiKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInNob3J0QXR0ciIpOwor
ICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJzaG9y
dEF0dHIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+aW1wbCgpOwotICAgIGludDE2X3QgbmF0aXZlVmFsdWUgPSB0b0ludDE2KGV4ZWMsIHZh
bHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGludDE2X3QgbmF0aXZlVmFsdWUgPSB0b0ludDE2KHN0YXRlLCB2YWx1ZSwg
Tm9ybWFsQ29udmVyc2lvbik7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldFNob3J0QXR0cihuYXRpdmVWYWx1ZSk7
CiB9CiAKIAotdm9pZCBzZXRKU1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0cihFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0T2JqVW5zaWduZWRTaG9ydEF0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0o
YmFzZU9iamVjdCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90
b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSkpCi0gICAgICAgICAgICByZXBvcnRE
ZXByZWNhdGVkU2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInVuc2lnbmVkU2hvcnRBdHRy
Iik7CisgICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVz
dE9iaiIsICJ1bnNpZ25lZFNob3J0QXR0ciIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0
aHJvd1NldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAidW5zaWduZWRTaG9ydEF0dHIi
KTsKKyAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAi
dW5zaWduZWRTaG9ydEF0dHIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIHVpbnQxNl90IG5hdGl2ZVZhbHVlID0gdG9V
SW50MTYoZXhlYywgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShl
eGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgdWludDE2X3QgbmF0aXZlVmFsdWUgPSB0b1VJbnQx
NihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRVbnNpZ25l
ZFNob3J0QXR0cihuYXRpdmVWYWx1ZSk7CiB9CiAKIAotdm9pZCBzZXRKU1Rlc3RPYmpMb25nQXR0
cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0T2Jq
TG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURf
UEFSQU0oYmFzZU9iamVjdCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RP
YmpQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSkpCi0gICAgICAgICAgICBy
ZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgImxvbmdBdHRyIik7
CisgICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9i
aiIsICJsb25nQXR0ciIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvd1NldHRlclR5
cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAibG9uZ0F0dHIiKTsKKyAgICAgICAgICAgIHRocm93
U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibG9uZ0F0dHIiKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAg
IGludCBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoZXhlYywgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24p
OwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaW50IG5hdGl2
ZVZhbHVlID0gdG9JbnQzMihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAg
aW1wbC5zZXRMb25nQXR0cihuYXRpdmVWYWx1ZSk7CiB9CiAKIAotdm9pZCBzZXRKU1Rlc3RPYmpM
b25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIHNl
dEpTVGVzdE9iakxvbmdMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZU9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFt
aWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKSkK
LSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoi
LCAibG9uZ0xvbmdBdHRyIik7CisgICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJy
b3IoKnN0YXRlLCAiVGVzdE9iaiIsICJsb25nTG9uZ0F0dHIiKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgImxvbmdMb25n
QXR0ciIpOworICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9i
aiIsICJsb25nTG9uZ0F0dHIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGxvbmcgbG9uZyBuYXRpdmVWYWx1ZSA9IHRv
SW50NjQoZXhlYywgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShl
eGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgbG9uZyBsb25nIG5hdGl2ZVZhbHVlID0gdG9JbnQ2
NChzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRMb25nTG9u
Z0F0dHIobmF0aXZlVmFsdWUpOwogfQogCiAKLXZvaWQgc2V0SlNUZXN0T2JqVW5zaWduZWRMb25n
TG9uZ0F0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIHNldEpT
VGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBi
YXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGJhc2VPYmplY3QpOwogICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpz
RHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpKQotICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpleGVjLCAiVGVz
dE9iaiIsICJ1bnNpZ25lZExvbmdMb25nQXR0ciIpOworICAgICAgICAgICAgcmVwb3J0RGVwcmVj
YXRlZFNldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAidW5zaWduZWRMb25nTG9uZ0F0dHIi
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKmV4ZWMs
ICJUZXN0T2JqIiwgInVuc2lnbmVkTG9uZ0xvbmdBdHRyIik7CisgICAgICAgICAgICB0aHJvd1Nl
dHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInVuc2lnbmVkTG9uZ0xvbmdBdHRyIik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmlt
cGwoKTsKLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgbmF0aXZlVmFsdWUgPSB0b1VJbnQ2NChleGVj
LCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbmF0aXZlVmFsdWUgPSB0b1VJbnQ2
NChzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRVbnNpZ25l
ZExvbmdMb25nQXR0cihuYXRpdmVWYWx1ZSk7CiB9CiAKIAotdm9pZCBzZXRKU1Rlc3RPYmpTdHJp
bmdBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBzZXRKU1Rl
c3RPYmpTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsK
ICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKGJhc2VPYmplY3QpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8
SlNUZXN0T2JqUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpKQotICAgICAg
ICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJzdHJp
bmdBdHRyIik7CisgICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKnN0YXRl
LCAiVGVzdE9iaiIsICJzdHJpbmdBdHRyIik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRo
cm93U2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJzdHJpbmdBdHRyIik7CisgICAg
ICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInN0cmluZ0F0
dHIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+aW1wbCgpOwotICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3Rh
dGUpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm47CiAgICAgaW1wbC5zZXRTdHJpbmdBdHRyKG5hdGl2ZVZhbHVlKTsKIH0KIAogCi12b2lk
IHNldEpTVGVzdE9ialRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQordm9pZCBzZXRKU1Rlc3RPYmpUZXN0T2JqQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU09i
amVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAg
IGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhl
YywgIlRlc3RPYmoiLCAidGVzdE9iakF0dHIiKTsKKyAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0
ZWRTZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInRlc3RPYmpBdHRyIik7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIs
ICJ0ZXN0T2JqQXR0ciIpOworICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRl
LCAiVGVzdE9iaiIsICJ0ZXN0T2JqQXR0ciIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgVGVzdE9iaiogbmF0aXZlVmFs
dWUgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0VGVzdE9iakF0dHIobmF0aXZlVmFsdWUp
OwogfQogCiAKLXZvaWQgc2V0SlNUZXN0T2JqWE1MT2JqQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0T2JqWE1MT2JqQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsK
ICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0
ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAiWE1MT2JqQXR0ciIpOworICAgICAgICAgICAgcmVw
b3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiWE1MT2JqQXR0ciIp
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqZXhlYywg
IlRlc3RPYmoiLCAiWE1MT2JqQXR0ciIpOworICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJy
b3IoKnN0YXRlLCAiVGVzdE9iaiIsICJYTUxPYmpBdHRyIik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBUZXN0T2JqKiBu
YXRpdmVWYWx1ZSA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHZhbHVlKTsKLSAgICBpZiAoVU5MSUtF
TFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRYTUxPYmpBdHRyKG5hdGl2
ZVZhbHVlKTsKIH0KIAogCi12b2lkIHNldEpTVGVzdE9iakNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0T2JqQ3JlYXRlKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGJhc2VPYmplY3QpOwog
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpKQotICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRl
ckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJjcmVhdGUiKTsKKyAgICAgICAgICAgIHJlcG9ydERl
cHJlY2F0ZWRTZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImNyZWF0ZSIpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoi
LCAiY3JlYXRlIik7CisgICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJU
ZXN0T2JqIiwgImNyZWF0ZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgYm9vbCBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRv
Qm9vbGVhbihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIGJvb2wgbmF0aXZlVmFsdWUgPSB2YWx1ZS50b0Jvb2xlYW4oc3RhdGUpOworICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1w
bC5zZXRDcmVhdGUobmF0aXZlVmFsdWUpOwogfQogCiAKLXZvaWQgc2V0SlNUZXN0T2JqUmVmbGVj
dGVkU3RyaW5nQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQg
c2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVj
dCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlm
IChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywg
IlRlc3RPYmoiLCAicmVmbGVjdGVkU3RyaW5nQXR0ciIpOworICAgICAgICAgICAgcmVwb3J0RGVw
cmVjYXRlZFNldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVmbGVjdGVkU3RyaW5nQXR0
ciIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqZXhl
YywgIlRlc3RPYmoiLCAicmVmbGVjdGVkU3RyaW5nQXR0ciIpOworICAgICAgICAgICAgdGhyb3dT
ZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRTdHJpbmdBdHRyIik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmlt
cGwoKTsKLSAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVj
ayhleGVjLCB2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhzdGF0
ZSwgdmFsdWUpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0ckF0dHIsIG5hdGl2ZVZhbHVl
KTsKIH0KIAogCi12b2lkIHNldEpTVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0cihFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0T2JqUmVmbGVjdGVk
SW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKGJhc2VPYmplY3QpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpKQotICAgICAgICAg
ICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJyZWZsZWN0
ZWRJbnRlZ3JhbEF0dHIiKTsKKyAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJv
cigqc3RhdGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZEludGVncmFsQXR0ciIpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAi
cmVmbGVjdGVkSW50ZWdyYWxBdHRyIik7CisgICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJv
cigqc3RhdGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZEludGVncmFsQXR0ciIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAg
aW50IG5hdGl2ZVZhbHVlID0gdG9JbnQzMihleGVjLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7
Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpbnQgbmF0aXZl
VmFsdWUgPSB0b0ludDMyKHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBp
bXBsLnNldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkaW50
ZWdyYWxhdHRyQXR0ciwgbmF0aXZlVmFsdWUpOwogfQogCiAKLXZvaWQgc2V0SlNUZXN0T2JqUmVm
bGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFz
ZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCit2b2lkIHNldEpTVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGJhc2VP
YmplY3QpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBl
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpKQotICAgICAgICAgICAgcmVwb3J0RGVwcmVj
YXRlZFNldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRVbnNpZ25lZEludGVn
cmFsQXR0ciIpOworICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpzdGF0
ZSwgIlRlc3RPYmoiLCAicmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIiKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwg
InJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyIik7CisgICAgICAgICAgICB0aHJvd1NldHRl
clR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxB
dHRyIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPmltcGwoKTsKLSAgICB1bnNpZ25lZCBuYXRpdmVWYWx1ZSA9IHRvVUludDMyKGV4ZWMsIHZh
bHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIHVuc2lnbmVkIG5hdGl2ZVZhbHVlID0gdG9VSW50MzIoc3RhdGUsIHZhbHVl
LCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0VW5zaWduZWRJbnRlZ3JhbEF0dHJp
YnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVuc2lnbmVkaW50ZWdyYWxhdHRyQXR0
ciwgbmF0aXZlVmFsdWUpOwogfQogCiAKLXZvaWQgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQm9vbGVh
bkF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIHNldEpTVGVz
dE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNl
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGJhc2VPYmplY3QpOwogICAgIEpTVGVzdE9iaiogY2FzdGVk
VGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
KQotICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpleGVjLCAiVGVzdE9i
aiIsICJyZWZsZWN0ZWRCb29sZWFuQXR0ciIpOworICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRl
ZFNldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVmbGVjdGVkQm9vbGVhbkF0dHIiKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJU
ZXN0T2JqIiwgInJlZmxlY3RlZEJvb2xlYW5BdHRyIik7CisgICAgICAgICAgICB0aHJvd1NldHRl
clR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZEJvb2xlYW5BdHRyIik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwo
KTsKLSAgICBib29sIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9Cb29sZWFuKGV4ZWMpOwotICAgIGlm
IChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgYm9vbCBuYXRpdmVWYWx1ZSA9
IHZhbHVlLnRvQm9vbGVhbihzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldEJvb2xlYW5BdHRyaWJ1dGUo
V2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIsIG5hdGl2ZVZhbHVl
KTsKIH0KIAogCi12b2lkIHNldEpTVGVzdE9ialJlZmxlY3RlZFVSTEF0dHIoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIHNldEpTVGVzdE9ialJlZmxlY3RlZFVSTEF0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0o
YmFzZU9iamVjdCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90
b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSkpCi0gICAgICAgICAgICByZXBvcnRE
ZXByZWNhdGVkU2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInJlZmxlY3RlZFVSTEF0dHIi
KTsKKyAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0
T2JqIiwgInJlZmxlY3RlZFVSTEF0dHIiKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhy
b3dTZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInJlZmxlY3RlZFVSTEF0dHIiKTsK
KyAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVm
bGVjdGVkVVJMQXR0ciIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWVUb1N0
cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgdmFsdWUpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWVUb1N0cmluZ1dp
dGhOdWxsQ2hlY2soc3RhdGUsIHZhbHVlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0QXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVybGF0dHJBdHRy
LCBuYXRpdmVWYWx1ZSk7CiB9CiAKIAotdm9pZCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdB
dHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBzZXRKU1Rlc3RP
YmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNlT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGJhc2VPYmplY3QpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpKQot
ICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIs
ICJyZWZsZWN0ZWRTdHJpbmdBdHRyIik7CisgICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0
dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRTdHJpbmdBdHRyIik7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9i
aiIsICJyZWZsZWN0ZWRTdHJpbmdBdHRyIik7CisgICAgICAgICAgICB0aHJvd1NldHRlclR5cGVF
cnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZFN0cmluZ0F0dHIiKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAg
IFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZh
bHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIFN0cmlu
ZyBuYXRpdmVWYWx1ZSA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKHN0YXRlLCB2YWx1ZSk7
CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
bjsKICAgICBpbXBsLnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6
SFRNTE5hbWVzOjpjdXN0b21Db250ZW50U3RyaW5nQXR0ckF0dHIsIG5hdGl2ZVZhbHVlKTsKIH0K
IAogCi12b2lkIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0cihFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0T2JqUmVmbGVjdGVk
Q3VzdG9tSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
IHsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGJhc2VPYmplY3QpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nh
c3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpKQotICAg
ICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJy
ZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHIiKTsKKyAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0
ZWRTZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZEN1c3RvbUludGVncmFs
QXR0ciIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigq
ZXhlYywgIlRlc3RPYmoiLCAicmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyIik7CisgICAgICAg
ICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZEN1
c3RvbUludGVncmFsQXR0ciIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaW50IG5hdGl2ZVZhbHVlID0gdG9JbnQzMihl
eGVjLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpbnQgbmF0aXZlVmFsdWUgPSB0b0ludDMyKHN0YXRlLCB2YWx1
ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldEludGVncmFsQXR0cmlidXRlKFdl
YkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0ckF0dHIsIG5hdGl2ZVZh
bHVlKTsKIH0KIAogCi12b2lkIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRy
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBzZXRKU1Rlc3RPYmpS
ZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFz
ZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5
bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RP
YmoiLCAicmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHIiKTsKKyAgICAgICAgICAgIHJlcG9ydERl
cHJlY2F0ZWRTZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZEN1c3RvbUJv
b2xlYW5BdHRyIik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVy
cm9yKCpleGVjLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0ciIpOworICAg
ICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZWZsZWN0
ZWRDdXN0b21Cb29sZWFuQXR0ciIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgYm9vbCBuYXRpdmVWYWx1ZSA9IHZhbHVl
LnRvQm9vbGVhbihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIGJvb2wgbmF0aXZlVmFsdWUgPSB2YWx1ZS50b0Jvb2xlYW4oc3RhdGUpOworICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAg
aW1wbC5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVu
dEJvb2xlYW5BdHRyQXR0ciwgbmF0aXZlVmFsdWUpOwogfQogCiAKLXZvaWQgc2V0SlNUZXN0T2Jq
UmVmbGVjdGVkQ3VzdG9tVVJMQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK3ZvaWQgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7
CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJF
cnJvcigqZXhlYywgIlRlc3RPYmoiLCAicmVmbGVjdGVkQ3VzdG9tVVJMQXR0ciIpOworICAgICAg
ICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVm
bGVjdGVkQ3VzdG9tVVJMQXR0ciIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvd1Nl
dHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAicmVmbGVjdGVkQ3VzdG9tVVJMQXR0ciIp
OworICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJy
ZWZsZWN0ZWRDdXN0b21VUkxBdHRyIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2
YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCB2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZ
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2YWx1ZVRv
U3RyaW5nV2l0aE51bGxDaGVjayhzdGF0ZSwgdmFsdWUpOworICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRBdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVu
dFVSTEF0dHJBdHRyLCBuYXRpdmVWYWx1ZSk7CiB9CiAKIAotdm9pZCBzZXRKU1Rlc3RPYmpUeXBl
ZEFycmF5QXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0
SlNUZXN0T2JqVHlwZWRBcnJheUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKICAgICBVTlVTRURfUEFSQU0oYmFzZU9iamVjdCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5h
bWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSkp
Ci0gICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2Jq
IiwgInR5cGVkQXJyYXlBdHRyIik7CisgICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVy
RXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ0eXBlZEFycmF5QXR0ciIpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAidHlw
ZWRBcnJheUF0dHIiKTsKKyAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwg
IlRlc3RPYmoiLCAidHlwZWRBcnJheUF0dHIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIFJlZlB0cjxGbG9hdDMyQXJy
YXk+IG5hdGl2ZVZhbHVlID0gdG9GbG9hdDMyQXJyYXkodmFsdWUpOwotICAgIGlmIChVTkxJS0VM
WShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldFR5cGVkQXJyYXlBdHRyKG5h
dGl2ZVZhbHVlLmdldCgpKTsKIH0KIAogCi12b2lkIHNldEpTVGVzdE9iakF0dHJXaXRoR2V0dGVy
RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBzZXRK
U1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVj
dCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlm
IChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywg
IlRlc3RPYmoiLCAiYXR0cldpdGhHZXR0ZXJFeGNlcHRpb24iKTsKKyAgICAgICAgICAgIHJlcG9y
dERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImF0dHJXaXRoR2V0dGVy
RXhjZXB0aW9uIik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVy
cm9yKCpleGVjLCAiVGVzdE9iaiIsICJhdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOworICAgICAg
ICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJhdHRyV2l0aEdl
dHRlckV4Y2VwdGlvbiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaW50IG5hdGl2ZVZhbHVlID0gdG9JbnQzMihleGVj
LCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpbnQgbmF0aXZlVmFsdWUgPSB0b0ludDMyKHN0YXRlLCB2YWx1ZSwg
Tm9ybWFsQ29udmVyc2lvbik7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldEF0dHJXaXRoR2V0dGVyRXhjZXB0aW9u
KG5hdGl2ZVZhbHVlKTsKIH0KIAogCi12b2lkIHNldEpTVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhj
ZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBzZXRKU1Rl
c3RPYmpBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCog
YmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChq
c0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywgIlRl
c3RPYmoiLCAiYXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iKTsKKyAgICAgICAgICAgIHJlcG9ydERl
cHJlY2F0ZWRTZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImF0dHJXaXRoU2V0dGVyRXhj
ZXB0aW9uIik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9y
KCpleGVjLCAiVGVzdE9iaiIsICJhdHRyV2l0aFNldHRlckV4Y2VwdGlvbiIpOworICAgICAgICAg
ICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJhdHRyV2l0aFNldHRl
ckV4Y2VwdGlvbiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW50IG5h
dGl2ZVZhbHVlID0gdG9JbnQzMihleGVjLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAg
aWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpbnQgbmF0aXZlVmFsdWUg
PSB0b0ludDMyKHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNl
dEF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKG5hdGl2ZVZhbHVlLCBlYyk7Ci0gICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKIH0KIAog
Ci12b2lkIHNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRy
V2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZU9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
CiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwog
ICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWND
YXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKSkKLSAg
ICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAi
c3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24iKTsKKyAgICAgICAgICAgIHJlcG9ydERlcHJl
Y2F0ZWRTZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInN0cmluZ0F0dHJXaXRoR2V0dGVy
RXhjZXB0aW9uIik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVy
cm9yKCpleGVjLCAiVGVzdE9iaiIsICJzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOwor
ICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJzdHJp
bmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgU3RyaW5nIG5hdGl2ZVZhbHVl
ID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShl
eGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9T
dHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldFN0cmluZ0F0dHJXaXRo
R2V0dGVyRXhjZXB0aW9uKG5hdGl2ZVZhbHVlKTsKIH0KIAogCi12b2lkIHNldEpTVGVzdE9ialN0
cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJh
c2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQordm9pZCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihF
eGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNl
T2JqZWN0KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlw
ZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJl
Y2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAic3RyaW5nQXR0cldpdGhTZXR0ZXJF
eGNlcHRpb24iKTsKKyAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqc3Rh
dGUsICJUZXN0T2JqIiwgInN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uIik7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIs
ICJzdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbiIpOworICAgICAgICAgICAgdGhyb3dTZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJzdHJpbmdBdHRyV2l0aFNldHRlckV4Y2Vw
dGlvbiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT5pbXBsKCk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgU3RyaW5nIG5hdGl2
ZVZhbHVlID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJ
S0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFs
dWUudG9TdHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldFN0cmluZ0F0
dHJXaXRoU2V0dGVyRXhjZXB0aW9uKG5hdGl2ZVZhbHVlLCBlYyk7Ci0gICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKIH0KIAogCi12
b2lkIHNldEpTVGVzdE9ialN0cmljdFR5cGVDaGVja2luZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0T2JqU3RyaWN0VHlwZUNoZWNr
aW5nQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKGJhc2VPYmplY3QpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpKQotICAgICAgICAg
ICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJzdHJpY3RU
eXBlQ2hlY2tpbmdBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0
ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInN0cmljdFR5cGVDaGVja2luZ0F0dHJpYnV0ZSIp
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqZXhlYywg
IlRlc3RPYmoiLCAic3RyaWN0VHlwZUNoZWNraW5nQXR0cmlidXRlIik7CisgICAgICAgICAgICB0
aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInN0cmljdFR5cGVDaGVja2lu
Z0F0dHJpYnV0ZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgaWYgKFVOTElLRUxZKCF2YWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpICYmICF2YWx1ZS5pbmhlcml0cyhKU1Rlc3RPYmo6OmluZm8oKSkpKSB7Ci0gICAgICAg
IHRocm93QXR0cmlidXRlVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJzdHJpY3RUeXBlQ2hl
Y2tpbmdBdHRyaWJ1dGUiLCAiVGVzdE9iaiIpOworICAgICAgICB0aHJvd0F0dHJpYnV0ZVR5cGVF
cnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInN0cmljdFR5cGVDaGVja2luZ0F0dHJpYnV0ZSIsICJU
ZXN0T2JqIik7CiAgICAgICAgIHJldHVybjsKICAgICB9OwogICAgIFRlc3RPYmoqIG5hdGl2ZVZh
bHVlID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQodmFsdWUpOwotICAgIGlmIChVTkxJS0VMWShleGVj
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldFN0cmljdFR5cGVDaGVja2luZ0F0dHJp
YnV0ZShuYXRpdmVWYWx1ZSk7CiB9CiAKIAotdm9pZCBzZXRKU1Rlc3RPYmpDdXN0b21BdHRyKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBzZXRKU1Rlc3RPYmpDdXN0
b21BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKGJhc2VPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIGF1dG8q
IGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oYmFzZU9iamVjdCk7CiAgICAgVU5VU0VE
X1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwotICAgIGNhc3RlZFRo
aXMtPnNldEN1c3RvbUF0dHIoZXhlYywgdmFsdWUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgY2FzdGVkVGhpcy0+c2V0Q3VzdG9tQXR0cihzdGF0ZSwgdmFsdWUpOwogfQogCiAKLXZv
aWQgc2V0SlNUZXN0T2JqT25mb28oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Cit2b2lkIHNldEpTVGVzdE9iak9uZm9vKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNl
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGJhc2VPYmplY3QpOwogICAgIEpTVGVzdE9iaiogY2FzdGVk
VGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
KQotICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpleGVjLCAiVGVzdE9i
aiIsICJvbmZvbyIpOworICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpz
dGF0ZSwgIlRlc3RPYmoiLCAib25mb28iKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhy
b3dTZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm9uZm9vIik7CisgICAgICAgICAg
ICB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm9uZm9vIik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgc2V0RXZlbnRIYW5kbGVyQXR0cmlidXRlKCpleGVjLCAq
Y2FzdGVkVGhpcywgY2FzdGVkVGhpcy0+aW1wbCgpLCBldmVudE5hbWVzKCkuZm9vRXZlbnQsIHZh
bHVlKTsKKyAgICBzZXRFdmVudEhhbmRsZXJBdHRyaWJ1dGUoKnN0YXRlLCAqY2FzdGVkVGhpcywg
Y2FzdGVkVGhpcy0+aW1wbCgpLCBldmVudE5hbWVzKCkuZm9vRXZlbnQsIHZhbHVlKTsKIH0KIAog
Ci12b2lkIHNldEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdFN0YXRl
QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGJhc2VPYmplY3QpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpKQotICAgICAgICAgICAg
cmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0
U3RhdGVBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJv
cigqc3RhdGUsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZSIpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoi
LCAid2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlIik7CisgICAgICAgICAgICB0aHJvd1NldHRlclR5
cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZSIpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBs
KCk7Ci0gICAgaW50IG5hdGl2ZVZhbHVlID0gdG9JbnQzMihleGVjLCB2YWx1ZSwgTm9ybWFsQ29u
dmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
bnQgbmF0aXZlVmFsdWUgPSB0b0ludDMyKHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7
CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBpbXBsLnNldFdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZShleGVjLCBuYXRpdmVWYWx1
ZSk7CisgICAgaW1wbC5zZXRXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUoKnN0YXRlLCBuYXRpdmVW
YWx1ZSk7CiB9CiAKIAotdm9pZCBzZXRKU1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxs
V2l0aEF0dHJpYnV0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQg
c2V0SlNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oYmFzZU9iamVj
dCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoq
PihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSkpCi0gICAgICAgICAgICByZXBvcnREZXByZWNhdGVk
U2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIndpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxX
aXRoQXR0cmlidXRlIik7CisgICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3Io
KnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0
ZSIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqZXhl
YywgIlRlc3RPYmoiLCAid2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUiKTsK
KyAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0
aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUiKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGludCBuYXRp
dmVWYWx1ZSA9IHRvSW50MzIoZXhlYywgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlm
IChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaW50IG5hdGl2ZVZhbHVlID0g
dG9JbnQzMihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47Ci0gICAgaW1wbC5zZXRX
aXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZShleGVjLCBhY3RpdmVET01XaW5k
b3coZXhlYyksIGZpcnN0RE9NV2luZG93KGV4ZWMpLCBuYXRpdmVWYWx1ZSk7CisgICAgaW1wbC5z
ZXRXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZSgqc3RhdGUsIGFjdGl2ZURP
TVdpbmRvdyhzdGF0ZSksIGZpcnN0RE9NV2luZG93KHN0YXRlKSwgbmF0aXZlVmFsdWUpOwogfQog
CiAKLXZvaWQgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIHNldEpTVGVzdE9ialdp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2Jq
ZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGJhc2VPYmplY3QpOwogICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAg
aWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpKQotICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpleGVj
LCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSIpOworICAg
ICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAi
d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUiKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIndpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlIik7CisgICAgICAgICAgICB0aHJvd1NldHRlclR5
cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0
cmlidXRlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPmltcGwoKTsKICAgICBUZXN0T2JqKiBuYXRpdmVWYWx1ZSA9IEpTVGVzdE9iajo6dG9X
cmFwcGVkKHZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47
Ci0gICAgYXV0byogc2NyaXB0Q29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAg
ICBhdXRvKiBzY3JpcHRDb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUt
PmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBp
ZiAoIXNjcmlwdENvbnRleHQpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldFdpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKHNjcmlwdENvbnRleHQsIG5hdGl2ZVZhbHVlKTsK
IH0KIAogCi12b2lkIHNldEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0T2JqV2l0
aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBi
YXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGJhc2VPYmplY3QpOwogICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpz
RHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpKQotICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpleGVjLCAiVGVz
dE9iaiIsICJ3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMiKTsKKyAgICAgICAgICAgIHJl
cG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRT
dGF0ZUF0dHJpYnV0ZVJhaXNlcyIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvd1Nl
dHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAid2l0aFNjcmlwdFN0YXRlQXR0cmlidXRl
UmFpc2VzIik7CisgICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0
T2JqIiwgIndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgVGVzdE9i
aiogbmF0aXZlVmFsdWUgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7Ci0gICAgaWYgKFVO
TElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwotICAgIGltcGwuc2V0V2l0aFNjcmlwdFN0
YXRlQXR0cmlidXRlUmFpc2VzKGV4ZWMsIG5hdGl2ZVZhbHVlKTsKKyAgICBpbXBsLnNldFdpdGhT
Y3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcygqc3RhdGUsIG5hdGl2ZVZhbHVlKTsKIH0KIAogCi12
b2lkIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2Vz
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBzZXRKU1Rlc3RPYmpX
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyhFeGVjU3RhdGUqIHN0YXRl
LCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAg
ICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJv
cigqZXhlYywgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVS
YWlzZXMiKTsKKyAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqc3RhdGUs
ICJUZXN0T2JqIiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzIik7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpleGVjLCAi
VGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyIpOwor
ICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgVGVzdE9i
aiogbmF0aXZlVmFsdWUgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7Ci0gICAgaWYgKFVO
TElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8qIHNjcmlwdENvbnRleHQg
PSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgYXV0byogc2NyaXB0Q29udGV4dCA9IGpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFzY3JpcHRDb250ZXh0KQogICAgICAg
ICByZXR1cm47CiAgICAgaW1wbC5zZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0
ZVJhaXNlcyhzY3JpcHRDb250ZXh0LCBuYXRpdmVWYWx1ZSk7CiB9CiAKIAotdm9pZCBzZXRKU1Rl
c3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBzZXRKU1Rlc3RPYmpXaXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGJhc2VPYmplY3QpOwog
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpKQotICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRl
ckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNj
cmlwdFN0YXRlQXR0cmlidXRlIik7CisgICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVy
RXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNj
cmlwdFN0YXRlQXR0cmlidXRlIik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93U2V0
dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlIik7CisgICAgICAgICAgICB0aHJvd1NldHRlclR5cGVF
cnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2Ny
aXB0U3RhdGVBdHRyaWJ1dGUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIFRlc3RPYmoqIG5hdGl2ZVZhbHVlID0gSlNU
ZXN0T2JqOjp0b1dyYXBwZWQodmFsdWUpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBhdXRvKiBzY3JpcHRDb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOworICAgIGF1dG8qIHNjcmlwdENvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpOwogICAgIGlmICghc2NyaXB0Q29udGV4dCkKICAgICAgICAgcmV0dXJuOwotICAgIGltcGwu
c2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZShleGVj
LCBzY3JpcHRDb250ZXh0LCBuYXRpdmVWYWx1ZSk7CisgICAgaW1wbC5zZXRXaXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKCpzdGF0ZSwgc2NyaXB0Q29udGV4
dCwgbmF0aXZlVmFsdWUpOwogfQogCiAKLXZvaWQgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhFeGVjU3RhdGUqIHN0YXRlLCBK
U09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAg
ICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigq
ZXhlYywgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0
ZUF0dHJpYnV0ZVJhaXNlcyIpOworICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVy
cm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3Jp
cHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJv
d1NldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyIpOworICAgICAgICAgICAgdGhyb3dT
ZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzIik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBUZXN0T2JqKiBu
YXRpdmVWYWx1ZSA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHZhbHVlKTsKLSAgICBpZiAoVU5MSUtF
TFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47Ci0gICAgYXV0byogc2NyaXB0Q29udGV4dCA9IGpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBhdXRvKiBzY3JpcHRDb250ZXh0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIXNjcmlwdENvbnRleHQpCiAgICAgICAgIHJl
dHVybjsKLSAgICBpbXBsLnNldFdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3Rh
dGVBdHRyaWJ1dGVSYWlzZXMoZXhlYywgc2NyaXB0Q29udGV4dCwgbmF0aXZlVmFsdWUpOworICAg
IGltcGwuc2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0
ZVJhaXNlcygqc3RhdGUsIHNjcmlwdENvbnRleHQsIG5hdGl2ZVZhbHVlKTsKIH0KIAogCi12b2lk
IHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRo
U3BhY2VzQXR0cmlidXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9p
ZCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0
aFNwYWNlc0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZU9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7
CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAg
IFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0
PEpTVGVzdE9ialByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKSkKLSAgICAg
ICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAid2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUi
KTsKKyAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0
T2JqIiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2Vz
QXR0cmlidXRlIik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVy
cm9yKCpleGVjLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlw
dFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZSIpOworICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBl
RXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNj
cmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgVGVzdE9iaiogbmF0aXZl
VmFsdWUgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8qIHNjcmlwdENvbnRleHQgPSBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CisgICAgYXV0byogc2NyaXB0Q29udGV4dCA9IGpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFzY3JpcHRDb250ZXh0KQogICAgICAgICByZXR1cm47
Ci0gICAgaW1wbC5zZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0
aFNwYWNlc0F0dHJpYnV0ZShleGVjLCBzY3JpcHRDb250ZXh0LCBuYXRpdmVWYWx1ZSk7CisgICAg
aW1wbC5zZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNl
c0F0dHJpYnV0ZSgqc3RhdGUsIHNjcmlwdENvbnRleHQsIG5hdGl2ZVZhbHVlKTsKIH0KIAogCi12
b2lkIHNldEpTVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIHNldEpTVGVzdE9ialdp
dGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oYmFzZU9iamVjdCk7CiAgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAg
ICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSkpCi0gICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3Io
KmV4ZWMsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1
dGUiKTsKKyAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqc3RhdGUsICJU
ZXN0T2JqIiwgIndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUiKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0
T2JqIiwgIndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUiKTsKKyAgICAg
ICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlw
dEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZSIpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgVGVzdE9iaiogbmF0
aXZlVmFsdWUgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZ
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0V2l0aFNjcmlwdEFyZ3VtZW50
c0FuZENhbGxTdGFja0F0dHJpYnV0ZShuYXRpdmVWYWx1ZSk7CiB9CiAKIAogI2lmIEVOQUJMRShD
b25kaXRpb24xKQotdm9pZCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0
dHIxKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGJhc2VPYmplY3QpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8
SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJv
dG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpKQotICAgICAgICAgICAgcmVwb3J0
RGVwcmVjYXRlZFNldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJjb25kaXRpb25hbEF0dHIx
Iik7CisgICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVz
dE9iaiIsICJjb25kaXRpb25hbEF0dHIxIik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRo
cm93U2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJjb25kaXRpb25hbEF0dHIxIik7
CisgICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImNv
bmRpdGlvbmFsQXR0cjEiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGludCBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoZXhl
YywgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaW50IG5hdGl2ZVZhbHVlID0gdG9JbnQzMihzdGF0ZSwgdmFsdWUs
IE5vcm1hbENvbnZlcnNpb24pOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRDb25kaXRpb25hbEF0dHIxKG5hdGl2
ZVZhbHVlKTsKIH0KQEAgLTI3NjgsMjEgKzI3NjgsMjEgQEAgdm9pZCBzZXRKU1Rlc3RPYmpDb25k
aXRpb25hbEF0dHIxKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29k
ZWQKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24y
KQotdm9pZCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQordm9pZCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGJhc2VPYmpl
Y3QpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2Jq
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpKQotICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRl
ZFNldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJjb25kaXRpb25hbEF0dHIyIik7CisgICAg
ICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJj
b25kaXRpb25hbEF0dHIyIik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93U2V0dGVy
VHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJjb25kaXRpb25hbEF0dHIyIik7CisgICAgICAg
ICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImNvbmRpdGlvbmFs
QXR0cjIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+aW1wbCgpOwotICAgIGludCBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoZXhlYywgdmFsdWUs
IE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaW50IG5hdGl2ZVZhbHVlID0gdG9JbnQzMihzdGF0ZSwgdmFsdWUsIE5vcm1hbENv
bnZlcnNpb24pOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRDb25kaXRpb25hbEF0dHIyKG5hdGl2ZVZhbHVlKTsK
IH0KQEAgLTI3OTAsMjEgKzI3OTAsMjEgQEAgdm9pZCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0
dHIyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWQKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotdm9pZCBz
ZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJh
c2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQordm9pZCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGJhc2VPYmplY3QpOwogICAg
IEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
ICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpKQotICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVy
cm9yKCpleGVjLCAiVGVzdE9iaiIsICJjb25kaXRpb25hbEF0dHIzIik7CisgICAgICAgICAgICBy
ZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJjb25kaXRpb25h
bEF0dHIzIik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9y
KCpleGVjLCAiVGVzdE9iaiIsICJjb25kaXRpb25hbEF0dHIzIik7CisgICAgICAgICAgICB0aHJv
d1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImNvbmRpdGlvbmFsQXR0cjMiKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1w
bCgpOwotICAgIGludCBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoZXhlYywgdmFsdWUsIE5vcm1hbENv
bnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
aW50IG5hdGl2ZVZhbHVlID0gdG9JbnQzMihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24p
OworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm47CiAgICAgaW1wbC5zZXRDb25kaXRpb25hbEF0dHIzKG5hdGl2ZVZhbHVlKTsKIH0KQEAgLTI4
MTIsMjQyICsyODEyLDI0MiBAQCB2b2lkIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjMoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZAogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoQ29uZGl0aW9uMSkKLXZvaWQgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBzZXRK
U1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNP
YmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oYmFzZU9iamVjdCk7CiAgICAgVU5VU0VE
X1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RP
YmoqPihiYXNlT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBVTlVT
RURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICAvLyBTaGFkb3dp
bmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICBjYXN0ZWRUaGlzLT5wdXREaXJlY3QoZXhl
Yy0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiY29uZGl0aW9uYWxBdHRyNCIp
LCB2YWx1ZSk7CisgICAgY2FzdGVkVGhpcy0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHN0YXRlLCAiY29uZGl0aW9uYWxBdHRyNCIpLCB2YWx1ZSk7CiB9CiAK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQot
dm9pZCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0
cjVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVO
VVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAg
ICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KGJhc2VPYmplY3QpOwogICAg
IFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVj
dG9yLgotICAgIGNhc3RlZFRoaXMtPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKGV4ZWMsICJjb25kaXRpb25hbEF0dHI1IiksIHZhbHVlKTsKKyAgICBjYXN0ZWRU
aGlzLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoc3RhdGUs
ICJjb25kaXRpb25hbEF0dHI1IiksIHZhbHVlKTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUo
Q29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi12b2lkIHNldEpTVGVzdE9iakNvbmRp
dGlvbmFsQXR0cjZDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK3ZvaWQgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGJhc2VPYmplY3Qp
OwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBq
c0Nhc3Q8SlNUZXN0T2JqKj4oYmFzZU9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1
ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgY2FzdGVkVGhpcy0+
cHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImNvbmRp
dGlvbmFsQXR0cjYiKSwgdmFsdWUpOworICAgIGNhc3RlZFRoaXMtPnB1dERpcmVjdChzdGF0ZS0+
dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgImNvbmRpdGlvbmFsQXR0cjYiKSwg
dmFsdWUpOwogfQogCiAjZW5kaWYKIAotdm9pZCBzZXRKU1Rlc3RPYmpBbnlBdHRyaWJ1dGUoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIHNldEpTVGVzdE9iakFueUF0
dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9Q
QVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9i
alByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKSkKLSAgICAgICAgICAgIHJl
cG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAiYW55QXR0cmlidXRl
Iik7CisgICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVz
dE9iaiIsICJhbnlBdHRyaWJ1dGUiKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhyb3dT
ZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgImFueUF0dHJpYnV0ZSIpOworICAgICAg
ICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJhbnlBdHRyaWJ1
dGUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+aW1wbCgpOwotICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG5hdGl2ZVZhbHVlID0geyBl
eGVjLT52bSgpLCB2YWx1ZSB9OwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgbmF0aXZlVmFsdWUgPSB7IHN0YXRlLT52
bSgpLCB2YWx1ZSB9OworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRBbnlBdHRyaWJ1dGUobmF0aXZlVmFsdWUpOwog
fQogCiAKLXZvaWQgc2V0SlNUZXN0T2JqTXV0YWJsZVBvaW50KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQordm9pZCBzZXRKU1Rlc3RPYmpNdXRhYmxlUG9pbnQoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oYmFzZU9iamVjdCk7
CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSkpCi0gICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0
dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm11dGFibGVQb2ludCIpOworICAgICAgICAgICAg
cmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibXV0YWJsZVBv
aW50Iik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpl
eGVjLCAiVGVzdE9iaiIsICJtdXRhYmxlUG9pbnQiKTsKKyAgICAgICAgICAgIHRocm93U2V0dGVy
VHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibXV0YWJsZVBvaW50Iik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBT
VkdQcm9wZXJ0eVRlYXJPZmY8U1ZHUG9pbnQ+KiBuYXRpdmVWYWx1ZSA9IEpTU1ZHUG9pbnQ6OnRv
V3JhcHBlZCh2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
OwogICAgIGltcGwuc2V0TXV0YWJsZVBvaW50KG5hdGl2ZVZhbHVlKTsKIH0KIAogCi12b2lkIHNl
dEpTVGVzdE9iakltbXV0YWJsZVBvaW50KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQordm9pZCBzZXRKU1Rlc3RPYmpJbW11dGFibGVQb2ludChFeGVjU3RhdGUqIHN0YXRlLCBK
U09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAg
ICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigq
ZXhlYywgIlRlc3RPYmoiLCAiaW1tdXRhYmxlUG9pbnQiKTsKKyAgICAgICAgICAgIHJlcG9ydERl
cHJlY2F0ZWRTZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImltbXV0YWJsZVBvaW50Iik7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpleGVjLCAi
VGVzdE9iaiIsICJpbW11dGFibGVQb2ludCIpOworICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBl
RXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJpbW11dGFibGVQb2ludCIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgU1ZH
UHJvcGVydHlUZWFyT2ZmPFNWR1BvaW50PiogbmF0aXZlVmFsdWUgPSBKU1NWR1BvaW50Ojp0b1dy
YXBwZWQodmFsdWUpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsK
ICAgICBpbXBsLnNldEltbXV0YWJsZVBvaW50KG5hdGl2ZVZhbHVlKTsKIH0KIAogCi12b2lkIHNl
dEpTVGVzdE9ialN0cmF3YmVycnkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Cit2b2lkIHNldEpTVGVzdE9ialN0cmF3YmVycnkoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3Qq
IGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oYmFzZU9iamVjdCk7CiAgICAgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAo
anNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSkpCi0gICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKmV4ZWMsICJU
ZXN0T2JqIiwgInN0cmF3YmVycnkiKTsKKyAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0
ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInN0cmF3YmVycnkiKTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInN0cmF3
YmVycnkiKTsKKyAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RP
YmoiLCAic3RyYXdiZXJyeSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaW50IG5hdGl2ZVZhbHVlID0gdG9JbnQzMihl
eGVjLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpbnQgbmF0aXZlVmFsdWUgPSB0b0ludDMyKHN0YXRlLCB2YWx1
ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldEJsdWViZXJyeShuYXRpdmVWYWx1
ZSk7CiB9CiAKIAotdm9pZCBzZXRKU1Rlc3RPYmpTdHJpY3RGbG9hdChFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0T2JqU3RyaWN0RmxvYXQoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oYmFzZU9iamVj
dCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoq
PihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSkpCi0gICAgICAgICAgICByZXBvcnREZXByZWNhdGVk
U2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInN0cmljdEZsb2F0Iik7CisgICAgICAgICAg
ICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJzdHJpY3RG
bG9hdCIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigq
ZXhlYywgIlRlc3RPYmoiLCAic3RyaWN0RmxvYXQiKTsKKyAgICAgICAgICAgIHRocm93U2V0dGVy
VHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAic3RyaWN0RmxvYXQiKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGZs
b2F0IG5hdGl2ZVZhbHVlID0gdmFsdWUudG9GbG9hdChleGVjKTsKLSAgICBpZiAoVU5MSUtFTFko
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGZsb2F0IG5hdGl2ZVZhbHVlID0gdmFsdWUudG9G
bG9hdChzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldFN0cmljdEZsb2F0KG5hdGl2ZVZhbHVlKTsKIH0K
IAogCi12b2lkIHNldEpTVGVzdE9iaklkKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQordm9pZCBzZXRKU1Rlc3RPYmpJZChFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFz
ZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5
bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RP
YmoiLCAiaWQiKTsKKyAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqc3Rh
dGUsICJUZXN0T2JqIiwgImlkIik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93U2V0
dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJpZCIpOworICAgICAgICAgICAgdGhyb3dT
ZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJpZCIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaW50IG5h
dGl2ZVZhbHVlID0gdG9JbnQzMihleGVjLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAg
aWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpbnQgbmF0aXZlVmFsdWUg
PSB0b0ludDMyKHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNl
dElkKG5hdGl2ZVZhbHVlKTsKIH0KIAogCi12b2lkIHNldEpTVGVzdE9ialJlcGxhY2VhYmxlQXR0
cmlidXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBzZXRKU1Rl
c3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFz
ZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5
bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RP
YmoiLCAicmVwbGFjZWFibGVBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0
ZWRTZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlcGxhY2VhYmxlQXR0cmlidXRlIik7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpleGVjLCAi
VGVzdE9iaiIsICJyZXBsYWNlYWJsZUF0dHJpYnV0ZSIpOworICAgICAgICAgICAgdGhyb3dTZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZXBsYWNlYWJsZUF0dHJpYnV0ZSIpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIG9iamVj
dC4KLSAgICBjYXN0ZWRUaGlzLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyhleGVjLCAicmVwbGFjZWFibGVBdHRyaWJ1dGUiKSwgdmFsdWUpOworICAgIGNhc3Rl
ZFRoaXMtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0
ZSwgInJlcGxhY2VhYmxlQXR0cmlidXRlIiksIHZhbHVlKTsKIH0KIAogCi12b2lkIHNldEpTVGVz
dE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQordm9pZCBzZXRKU1Rlc3RPYmpOdWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJp
YnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJB
TShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialBy
b3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKSkKLSAgICAgICAgICAgIHJlcG9y
dERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAibnVsbGFibGVMb25nU2V0
dGFibGVBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJv
cigqc3RhdGUsICJUZXN0T2JqIiwgIm51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlIik7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVz
dE9iaiIsICJudWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOworICAgICAgICAgICAgdGhy
b3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJudWxsYWJsZUxvbmdTZXR0YWJs
ZUF0dHJpYnV0ZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaW50IG5hdGl2ZVZhbHVlID0gdG9JbnQzMihleGVjLCB2
YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpbnQgbmF0aXZlVmFsdWUgPSB0b0ludDMyKHN0YXRlLCB2YWx1ZSwgTm9y
bWFsQ29udmVyc2lvbik7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldE51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmli
dXRlKG5hdGl2ZVZhbHVlKTsKIH0KIAogCi12b2lkIHNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5n
VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIHNldEpTVGVz
dE9iak51bGxhYmxlU3RyaW5nVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKICAgICBVTlVTRURfUEFSQU0oYmFzZU9iamVjdCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5h
bWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSkp
Ci0gICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2Jq
IiwgIm51bGxhYmxlU3RyaW5nVmFsdWUiKTsKKyAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRT
ZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm51bGxhYmxlU3RyaW5nVmFsdWUiKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0
T2JqIiwgIm51bGxhYmxlU3RyaW5nVmFsdWUiKTsKKyAgICAgICAgICAgIHRocm93U2V0dGVyVHlw
ZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibnVsbGFibGVTdHJpbmdWYWx1ZSIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0g
ICAgaW50IG5hdGl2ZVZhbHVlID0gdG9JbnQzMihleGVjLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lv
bik7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpbnQgbmF0
aXZlVmFsdWUgPSB0b0ludDMyKHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAg
ICBpbXBsLnNldE51bGxhYmxlU3RyaW5nVmFsdWUobmF0aXZlVmFsdWUpOwogfQogCiAKLXZvaWQg
c2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNl
cnZlZEVudW1UeXBlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKGJhc2VPYmplY3QpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpKQotICAgICAgICAg
ICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJhdHRyaWJ1
dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZSIpOworICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNl
dHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiYXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5
cGUiKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKmV4
ZWMsICJUZXN0T2JqIiwgImF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlIik7CisgICAgICAg
ICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImF0dHJpYnV0ZVdp
dGhSZXNlcnZlZEVudW1UeXBlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2YWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1N0cmluZyhz
dGF0ZSktPnZhbHVlKHN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChuYXRpdmVWYWx1ZSAhPSAiIiAmJiBuYXRp
dmVWYWx1ZSAhPSAiT3B0aW9uYWxWYWx1ZTEiICYmIG5hdGl2ZVZhbHVlICE9ICJPcHRpb25hbFZh
bHVlMiIgJiYgbmF0aXZlVmFsdWUgIT0gIk9wdGlvbmFsVmFsdWUzIikKICAgICAgICAgcmV0dXJu
OwpAQCAtMzA2MCw4MzIgKzMwNjAsODMyIEBAIEpTVmFsdWUgSlNUZXN0T2JqOjpnZXRDb25zdHJ1
Y3RvcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgcmV0dXJuIGdl
dERPTUNvbnN0cnVjdG9yPEpTVGVzdE9iakNvbnN0cnVjdG9yPih2bSwganNDYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kKEV4ZWNTdGF0ZSogZXhl
YykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25Wb2lkTWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlz
VmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dE9iaio+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAg
ICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAidm9pZE1ldGhv
ZCIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoi
LCAidm9pZE1ldGhvZCIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhp
cywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBs
KCk7CiAgICAgaW1wbC52b2lkTWV0aG9kKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2RXaXRoQXJncyhFeGVjU3RhdGUqIGV4ZWMpCitF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9p
ZE1ldGhvZFdpdGhBcmdzKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50
aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdE9iaio+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAg
ICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAidm9pZE1l
dGhvZFdpdGhBcmdzIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRl
LCAiVGVzdE9iaiIsICJ2b2lkTWV0aG9kV2l0aEFyZ3MiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENv
dW50KCkgPCAzKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgaW50IGxvbmdBcmcgPSB0b0ludDMyKGV4
ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtF
TFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMykpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CisgICAgaW50IGxvbmdBcmcgPSB0b0lu
dDMyKHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOworICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIFN0cmluZyBzdHJBcmcgPSBleGVjLT5hcmd1
bWVudCgxKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBTdHJpbmcgc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50
KDEpLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUpOworICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwotICAgIFRlc3RPYmoqIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKGV4
ZWMtPmFyZ3VtZW50KDIpKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIFRlc3RPYmoqIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1
bWVudCgyKSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC52b2lk
TWV0aG9kV2l0aEFyZ3MobG9uZ0FyZywgc3RyQXJnLCBvYmpBcmcpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25CeXRlTWV0aG9kKEV4ZWNTdGF0ZSogZXhl
YykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25CeXRlTWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlz
VmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dE9iaio+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAg
ICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAiYnl0ZU1ldGhv
ZCIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoi
LCAiYnl0ZU1ldGhvZCIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhp
cywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBs
KCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmJ5dGVNZXRob2QoKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnl0ZU1ldGhvZFdpdGhBcmdz
KEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25CeXRlTWV0aG9kV2l0aEFyZ3MoRXhlY1N0YXRlKiBzdGF0ZSkKIHsK
LSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVj
LCAiVGVzdE9iaiIsICJieXRlTWV0aG9kV2l0aEFyZ3MiKTsKKyAgICAgICAgcmV0dXJuIHRocm93
VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImJ5dGVNZXRob2RXaXRoQXJncyIpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZv
KCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaWYgKFVOTElL
RUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBpbnQ4
X3QgYnl0ZUFyZyA9IHRvSW50OChleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVy
c2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQorICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwor
ICAgIGludDhfdCBieXRlQXJnID0gdG9JbnQ4KHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5v
cm1hbENvbnZlcnNpb24pOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIFN0
cmluZyBzdHJBcmcgPSBleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
Yyk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBTdHJpbmcg
c3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUp
OworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIFRlc3RPYmoqIG9iakFyZyA9
IEpTVGVzdE9iajo6dG9XcmFwcGVkKGV4ZWMtPmFyZ3VtZW50KDIpKTsKLSAgICBpZiAoVU5MSUtF
TFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIFRlc3RPYmoqIG9iakFyZyA9IEpTVGVzdE9i
ajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgyKSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmJ5dGVNZXRob2RX
aXRoQXJncyhieXRlQXJnLCBzdHJBcmcsIG9iakFyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk9jdGV0TWV0aG9kKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PY3RldE1ldGhv
ZChFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhp
c1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAg
ICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlz
VmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0
aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm9jdGV0TWV0aG9kIik7CisgICAg
ICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJvY3RldE1l
dGhvZCIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0
T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLm9jdGV0TWV0aG9kKCkpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9jdGV0TWV0aG9kV2l0aEFyZ3MoRXhlY1N0
YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk9jdGV0TWV0aG9kV2l0aEFyZ3MoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVz
dE9iaiIsICJvY3RldE1ldGhvZFdpdGhBcmdzIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNU
eXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJvY3RldE1ldGhvZFdpdGhBcmdzIik7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBpZiAoVU5MSUtFTFko
ZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMykpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
ZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIHVpbnQ4X3Qg
b2N0ZXRBcmcgPSB0b1VJbnQ4KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJz
aW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCisgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Cisg
ICAgdWludDhfdCBvY3RldEFyZyA9IHRvVUludDgoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwg
Tm9ybWFsQ29udmVyc2lvbik7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAg
U3RyaW5nIHN0ckFyZyA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIFN0cmlu
ZyBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9TdHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0
ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgVGVzdE9iaiogb2JqQXJn
ID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoZXhlYy0+YXJndW1lbnQoMikpOwotICAgIGlmIChVTkxJ
S0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgVGVzdE9iaiogb2JqQXJnID0gSlNUZXN0
T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDIpKTsKKyAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwub2N0ZXRNZXRo
b2RXaXRoQXJncyhvY3RldEFyZywgc3RyQXJnLCBvYmpBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Mb25nTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Mb25nTWV0
aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50
aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsK
ICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRo
aXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJu
IHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAibG9uZ01ldGhvZCIpOworICAg
ICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibG9uZ01l
dGhvZCIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0
T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmxvbmdNZXRob2QoKSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTG9uZ01ldGhvZFdpdGhBcmdzKEV4ZWNTdGF0
ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25Mb25nTWV0aG9kV2l0aEFyZ3MoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVl
ID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE9i
aiIsICJsb25nTWV0aG9kV2l0aEFyZ3MiKTsKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVF
cnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImxvbmdNZXRob2RXaXRoQXJncyIpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA8IDMpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBpbnQgbG9uZ0FyZyA9
IHRvSW50MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAg
IGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5hcmd1bWVudENvdW50KCkgPCAzKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihz
dGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAgICBpbnQgbG9u
Z0FyZyA9IHRvSW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lv
bik7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgU3RyaW5nIHN0ckFyZyA9
IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAo
VU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIFN0cmluZyBzdHJBcmcgPSBzdGF0
ZS0+YXJndW1lbnQoMSkudG9TdHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgVGVzdE9iaiogb2JqQXJnID0gSlNUZXN0T2JqOjp0
b1dyYXBwZWQoZXhlYy0+YXJndW1lbnQoMikpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgVGVzdE9iaiogb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQo
c3RhdGUtPmFyZ3VtZW50KDIpKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwubG9uZ01ldGhvZFdpdGhBcmdzKGxvbmdB
cmcsIHN0ckFyZywgb2JqQXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT2JqTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PYmpNZXRob2QoRXhlY1N0YXRlKiBzdGF0
ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9y
KCpleGVjLCAiVGVzdE9iaiIsICJvYmpNZXRob2QiKTsKKyAgICAgICAgcmV0dXJuIHRocm93VGhp
c1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm9iak1ldGhvZCIpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pT
KGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLm9iak1l
dGhvZCgpKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC5vYmpNZXRob2QoKSkpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZFdpdGhBcmdzKEV4ZWNTdGF0
ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PYmpNZXRob2RXaXRoQXJncyhFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFs
dWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2Jq
IiwgIm9iak1ldGhvZFdpdGhBcmdzIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJy
b3IoKnN0YXRlLCAiVGVzdE9iaiIsICJvYmpNZXRob2RXaXRoQXJncyIpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA8IDMpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBpbnQgbG9uZ0FyZyA9IHRv
SW50MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlm
IChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAzKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAgICBpbnQgbG9uZ0Fy
ZyA9IHRvSW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7
CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgU3RyaW5nIHN0ckFyZyA9IGV4
ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5M
SUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIFN0cmluZyBzdHJBcmcgPSBzdGF0ZS0+
YXJndW1lbnQoMSkudG9TdHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgVGVzdE9iaiogb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dy
YXBwZWQoZXhlYy0+YXJndW1lbnQoMikpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgVGVzdE9iaiogb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoc3Rh
dGUtPmFyZ3VtZW50KDIpKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdU
Rjo6Z2V0UHRyKGltcGwub2JqTWV0aG9kV2l0aEFyZ3MobG9uZ0FyZywgc3RyQXJnLCBvYmpBcmcp
KSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC5vYmpNZXRob2RXaXRoQXJncyhsb25nQXJnLCBzdHJB
cmcsIG9iakFyZykpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoU2VxdWVuY2VBcmcoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhTZXF1ZW5jZUFy
ZyhFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhp
c1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAg
ICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlz
VmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0
aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm1ldGhvZFdpdGhTZXF1ZW5jZUFy
ZyIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoi
LCAibWV0aG9kV2l0aFNlcXVlbmNlQXJnIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
UyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPmltcGwoKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwg
MSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IoZXhlYykpOwotICAgIFZlY3RvcjxSZWZQdHI8U2NyaXB0UHJvZmlsZT4+IHNl
cXVlbmNlQXJnID0gKHRvUmVmUHRyTmF0aXZlQXJyYXk8U2NyaXB0UHJvZmlsZSwgSlNTY3JpcHRQ
cm9maWxlPihleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgJkpTU2NyaXB0UHJvZmlsZTo6dG9XcmFw
cGVkKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwor
ICAgIFZlY3RvcjxSZWZQdHI8U2NyaXB0UHJvZmlsZT4+IHNlcXVlbmNlQXJnID0gKHRvUmVmUHRy
TmF0aXZlQXJyYXk8U2NyaXB0UHJvZmlsZSwgSlNTY3JpcHRQcm9maWxlPihzdGF0ZSwgc3RhdGUt
PmFyZ3VtZW50KDApLCAmSlNTY3JpcHRQcm9maWxlOjp0b1dyYXBwZWQpKTsKKyAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhTZXF1ZW5jZUFyZyhzZXF1
ZW5jZUFyZyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFJldHVybmluZ1NlcXVlbmNlKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RSZXR1cm5pbmdT
ZXF1ZW5jZShFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhl
Yy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVl
KCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoq
Pih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJl
dHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm1ldGhvZFJldHVybmlu
Z1NlcXVlbmNlIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAi
VGVzdE9iaiIsICJtZXRob2RSZXR1cm5pbmdTZXF1ZW5jZSIpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBpbnQgbG9uZ0FyZyA9IHRvSW50MzIo
ZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJ
S0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAgICBpbnQgbG9uZ0FyZyA9IHRv
SW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc0FycmF5
KGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLm1ldGhvZFJldHVybmluZ1Nl
cXVlbmNlKGxvbmdBcmcpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXkoc3RhdGUsIGNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLm1ldGhvZFJldHVybmluZ1NlcXVlbmNlKGxv
bmdBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoRW51bUFyZyhFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEVudW1BcmcoRXhlY1N0YXRlKiBz
dGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVy
cm9yKCpleGVjLCAiVGVzdE9iaiIsICJtZXRob2RXaXRoRW51bUFyZyIpOworICAgICAgICByZXR1
cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aEVudW1B
cmciKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9i
ajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGlm
IChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Cisg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3Rh
dGUpKTsKICAgICAvLyBLZWVwIHBvaW50ZXIgdG8gdGhlIEpTU3RyaW5nIGluIGEgbG9jYWwgc28g
d2UgZG9uJ3QgbmVlZCB0byByZWYgdGhlIFN0cmluZy4KLSAgICBhdXRvKiBlbnVtQXJnU3RyaW5n
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBhdXRvKiBlbnVtQXJnU3RyaW5nID0gc3RhdGUtPmFy
Z3VtZW50KDApLnRvU3RyaW5nKHN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKLSAgICBhdXRvJiBlbnVtQXJnID0gZW51bUFyZ1N0cmluZy0+dmFsdWUoZXhlYyk7CisgICAg
YXV0byYgZW51bUFyZyA9IGVudW1BcmdTdHJpbmctPnZhbHVlKHN0YXRlKTsKICAgICBpZiAoZW51
bUFyZyAhPSAiIiAmJiBlbnVtQXJnICE9ICJFbnVtVmFsdWUxIiAmJiBlbnVtQXJnICE9ICJFbnVt
VmFsdWUyIiAmJiBlbnVtQXJnICE9ICJFbnVtVmFsdWUzIikKLSAgICAgICAgcmV0dXJuIHRocm93
QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoKmV4ZWMsIDAsICJlbnVtQXJnIiwgIlRlc3RPYmoiLCAi
bWV0aG9kV2l0aEVudW1BcmciLCAiXCJcIiwgXCJFbnVtVmFsdWUxXCIsIFwiRW51bVZhbHVlMlwi
LCBcIkVudW1WYWx1ZTNcIiIpOworICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUVu
dW1FcnJvcigqc3RhdGUsIDAsICJlbnVtQXJnIiwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aEVudW1B
cmciLCAiXCJcIiwgXCJFbnVtVmFsdWUxXCIsIFwiRW51bVZhbHVlMlwiLCBcIkVudW1WYWx1ZTNc
IiIpOwogICAgIGltcGwubWV0aG9kV2l0aEVudW1BcmcoZW51bUFyZyk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFy
Z3NBbmRUaHJvd3MoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRU
aHJvd3MoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMt
PnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgp
OwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4o
dGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1
cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJtZXRob2RUaGF0UmVxdWly
ZXNBbGxBcmdzQW5kVGhyb3dzIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3Io
KnN0YXRlLCAiVGVzdE9iaiIsICJtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzIik7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6Omlu
Zm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBpZiAoVU5M
SUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMikpCi0gICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCisgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7
CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgU3RyaW5nIHN0ckFyZyA9IGV4ZWMtPmFy
Z3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFko
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIFN0cmluZyBzdHJBcmcgPSBzdGF0ZS0+YXJndW1l
bnQoMCkudG9TdHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7Ci0gICAgVGVzdE9iaiogb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQo
ZXhlYy0+YXJndW1lbnQoMSkpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgVGVzdE9iaiogb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFy
Z3VtZW50KDEpKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0
UHRyKGltcGwubWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyhzdHJBcmcsIG9iakFy
ZywgZWMpKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC5tZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdz
QW5kVGhyb3dzKHN0ckFyZywgb2JqQXJnLCBlYykpKTsKIAotICAgIHNldERPTUV4Y2VwdGlvbihl
eGVjLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlKEV4ZWNTdGF0ZSogZXhl
YykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25TZXJpYWxpemVkVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUt
PnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8
SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQot
ICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJzZXJp
YWxpemVkVmFsdWUiKTsKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUs
ICJUZXN0T2JqIiwgInNlcmlhbGl6ZWRWYWx1ZSIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBzZXJpYWxpemVkQXJnID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgZXhl
Yy0+YXJndW1lbnQoMCksIDAsIDApOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3Ioc3RhdGUpKTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxp
emVkQXJnID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoc3RhdGUsIHN0YXRlLT5hcmd1
bWVudCgwKSwgMCwgMCk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1w
bC5zZXJpYWxpemVkVmFsdWUoc2VyaWFsaXplZEFyZyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9wdGlvbnNPYmplY3QoRXhlY1N0YXRlKiBleGVjKQor
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9w
dGlvbnNPYmplY3QoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNW
YWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAg
ICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJvcHRpb25zT2Jq
ZWN0Iik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9i
aiIsICJvcHRpb25zT2JqZWN0Iik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0
ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PmltcGwoKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0g
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IoZXhlYykpOwotICAgIERpY3Rpb25hcnkgb28gPSB7IGV4ZWMsIGV4ZWMtPmFyZ3VtZW50
KDApIH07Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwor
ICAgIERpY3Rpb25hcnkgb28gPSB7IHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkgfTsKKyAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBEaWN0aW9uYXJ5IG9vbyA9IHsgZXhlYywg
ZXhlYy0+YXJndW1lbnQoMSkgfTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIERpY3Rpb25hcnkgb29vID0geyBzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEpIH07
CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5vcHRpb25zT2JqZWN0
KG9vLCBvb28pOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9u
KEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlz
VmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNW
YWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRo
cm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAibWV0aG9kV2l0aEV4Y2VwdGlvbiIp
OworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAi
bWV0aG9kV2l0aEV4Y2VwdGlvbiIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2Fz
dGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT5pbXBsKCk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaW1wbC5tZXRob2RXaXRo
RXhjZXB0aW9uKGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHNldERP
TUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2QoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZChF
eGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1Zh
bHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFs
dWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJv
d1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgImN1c3RvbU1ldGhvZCIpOworICAgICAg
ICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiY3VzdG9tTWV0
aG9kIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RP
Ymo6OmluZm8oKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5jdXN0
b21NZXRob2QoZXhlYykpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+
Y3VzdG9tTWV0aG9kKHN0YXRlKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2RXaXRoQXJncyhFeGVjU3RhdGUq
IGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uQ3VzdG9tTWV0aG9kV2l0aEFyZ3MoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVl
ID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE9i
aiIsICJjdXN0b21NZXRob2RXaXRoQXJncyIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlw
ZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiY3VzdG9tTWV0aG9kV2l0aEFyZ3MiKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmN1c3RvbU1ldGhvZFdpdGhB
cmdzKGV4ZWMpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmN1c3Rv
bU1ldGhvZFdpdGhBcmdzKHN0YXRlKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BZGRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSog
ZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25BZGRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0
aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0
YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAi
YWRkRXZlbnRMaXN0ZW5lciIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RPYmoiLCAiYWRkRXZlbnRMaXN0ZW5lciIpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgSlNWYWx1ZSBsaXN0ZW5lciA9IGV4ZWMtPmFy
Z3VtZW50KDEpOworICAgIEpTVmFsdWUgbGlzdGVuZXIgPSBzdGF0ZS0+YXJndW1lbnQoMSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFsaXN0ZW5lci5pc09iamVjdCgpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBpbXBsLmFkZEV2ZW50TGlzdGVuZXIo
ZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnRvQXRvbWljU3RyaW5nKGV4ZWMpLCBj
cmVhdGVKU0V2ZW50TGlzdGVuZXJGb3JBZGQoKmV4ZWMsICphc09iamVjdChsaXN0ZW5lciksICpj
YXN0ZWRUaGlzKSwgZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBpbXBs
LmFkZEV2ZW50TGlzdGVuZXIoc3RhdGUtPmFyZ3VtZW50KDApLnRvU3RyaW5nKHN0YXRlKS0+dG9B
dG9taWNTdHJpbmcoc3RhdGUpLCBjcmVhdGVKU0V2ZW50TGlzdGVuZXJGb3JBZGQoKnN0YXRlLCAq
YXNPYmplY3QobGlzdGVuZXIpLCAqY2FzdGVkVGhpcyksIHN0YXRlLT5hcmd1bWVudCgyKS50b0Jv
b2xlYW4oc3RhdGUpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uUmVtb3ZlRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUmVtb3ZlRXZlbnRMaXN0
ZW5lcihFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+
dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7
CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0
aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVy
biB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInJlbW92ZUV2ZW50TGlzdGVu
ZXIiKTsKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2Jq
IiwgInJlbW92ZUV2ZW50TGlzdGVuZXIiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+aW1wbCgpOwotICAgIEpTVmFsdWUgbGlzdGVuZXIgPSBleGVjLT5hcmd1bWVudCgxKTsK
KyAgICBKU1ZhbHVlIGxpc3RlbmVyID0gc3RhdGUtPmFyZ3VtZW50KDEpOwogICAgIGlmIChVTkxJ
S0VMWSghbGlzdGVuZXIuaXNPYmplY3QoKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgaW1wbC5yZW1vdmVFdmVudExpc3RlbmVyKGV4ZWMtPmFy
Z3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT50b0F0b21pY1N0cmluZyhleGVjKSwgY3JlYXRlSlNF
dmVudExpc3RlbmVyRm9yUmVtb3ZlKCpleGVjLCAqYXNPYmplY3QobGlzdGVuZXIpLCAqY2FzdGVk
VGhpcykucHRyKCksIGV4ZWMtPmFyZ3VtZW50KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAgaW1w
bC5yZW1vdmVFdmVudExpc3RlbmVyKHN0YXRlLT5hcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSkt
PnRvQXRvbWljU3RyaW5nKHN0YXRlKSwgY3JlYXRlSlNFdmVudExpc3RlbmVyRm9yUmVtb3ZlKCpz
dGF0ZSwgKmFzT2JqZWN0KGxpc3RlbmVyKSwgKmNhc3RlZFRoaXMpLnB0cigpLCBzdGF0ZS0+YXJn
dW1lbnQoMikudG9Cb29sZWFuKHN0YXRlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZVZvaWQoRXhlY1N0YXRlKiBleGVjKQor
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldp
dGhTY3JpcHRTdGF0ZVZvaWQoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUt
PnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8
SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQot
ICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJ3aXRo
U2NyaXB0U3RhdGVWb2lkIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0
YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0U3RhdGVWb2lkIik7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBpbXBsLndpdGhTY3JpcHRTdGF0ZVZvaWQo
ZXhlYyk7CisgICAgaW1wbC53aXRoU2NyaXB0U3RhdGVWb2lkKCpzdGF0ZSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZU9iaihF
eGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlT2JqKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0g
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywg
IlRlc3RPYmoiLCAid2l0aFNjcmlwdFN0YXRlT2JqIik7CisgICAgICAgIHJldHVybiB0aHJvd1Ro
aXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0U3RhdGVPYmoiKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygp
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIEpTVmFsdWUgcmVz
dWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIo
aW1wbC53aXRoU2NyaXB0U3RhdGVPYmooZXhlYykpKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwud2l0aFNjcmlwdFN0YXRlT2Jq
KCpzdGF0ZSkpKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9u
KEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9uKEV4ZWNTdGF0ZSog
c3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAg
ICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7CiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVF
cnJvcigqZXhlYywgIlRlc3RPYmoiLCAid2l0aFNjcmlwdFN0YXRlVm9pZEV4Y2VwdGlvbiIpOwor
ICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0
aFNjcmlwdFN0YXRlVm9pZEV4Y2VwdGlvbiIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT5pbXBsKCk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW1wbC53aXRo
U2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24o
ZXhlYywgZWMpOworICAgIGltcGwud2l0aFNjcmlwdFN0YXRlVm9pZEV4Y2VwdGlvbigqc3RhdGUs
IGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9u
KEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oRXhlY1N0YXRlKiBz
dGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVy
cm9yKCpleGVjLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24iKTsKKyAg
ICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIndpdGhT
Y3JpcHRTdGF0ZU9iakV4Y2VwdGlvbiIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
Y2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT5pbXBsKCk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgSlNWYWx1ZSByZXN1
bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihp
bXBsLndpdGhTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbihleGVjLCBlYykpKTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6Omdl
dFB0cihpbXBsLndpdGhTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbigqc3RhdGUsIGVjKSkpOwogCi0g
ICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOworICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0KEV4ZWNTdGF0ZSogZXhlYykKK0VuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dChFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhp
c1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0
ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
Ci0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIndp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0Iik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBl
RXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCIpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZv
KCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgYXV0byogc2Ny
aXB0Q29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBhdXRvKiBzY3JpcHRD
b250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxP
YmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIXNjcmlwdENvbnRl
eHQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
aW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dChzY3JpcHRDb250ZXh0KTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBbmRTY3JpcHRTdGF0ZShFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBbmRTY3JpcHRTdGF0ZShFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBz
dGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwg
IndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGUiKTsKKyAgICAgICAgcmV0
dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGUiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+aW1wbCgpOwotICAgIGF1dG8qIHNjcmlwdENvbnRleHQgPSBqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CisgICAgYXV0byogc2NyaXB0Q29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CiAgICAgaWYgKCFzY3JpcHRDb250ZXh0KQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBbmRTY3JpcHRTdGF0ZShleGVjLCBzY3JpcHRDb250ZXh0KTsKKyAgICBpbXBsLndpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGUoKnN0YXRlLCBzY3JpcHRDb250ZXh0
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbihFeGVjU3RhdGUq
IGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZU9iakV4Y2VwdGlv
bihFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhp
c1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAg
ICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlz
VmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0
aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24iKTsKKyAgICAgICAgcmV0dXJuIHRocm93
VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QW5kU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24iKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGF1dG8q
IHNjcmlwdENvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgYXV0byogc2Ny
aXB0Q29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFzY3JpcHRD
b250ZXh0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwot
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSwgV1RGOjpnZXRQdHIoaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0
YXRlT2JqRXhjZXB0aW9uKGV4ZWMsIHNjcmlwdENvbnRleHQsIGVjKSkpOworICAgIEpTVmFsdWUg
cmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0
UHRyKGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZU9iakV4Y2Vw
dGlvbigqc3RhdGUsIHNjcmlwdENvbnRleHQsIGVjKSkpOwogCi0gICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzKEV4ZWNTdGF0ZSogZXhlYykK
K0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25X
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlcyhFeGVjU3Rh
dGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7
CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNU
eXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5k
U2NyaXB0U3RhdGVXaXRoU3BhY2VzIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJy
b3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlw
dFN0YXRlV2l0aFNwYWNlcyIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVk
VGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5p
bXBsKCk7Ci0gICAgYXV0byogc2NyaXB0Q29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKKyAgICBhdXRvKiBzY3JpcHRDb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
c3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsK
ICAgICBpZiAoIXNjcmlwdENvbnRleHQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzKGV4ZWMsIHNjcmlwdENvbnRleHQpKSk7Ci0g
ICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihp
bXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzKCpz
dGF0ZSwgc2NyaXB0Q29udGV4dCkpKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0QXJndW1l
bnRzQW5kQ2FsbFN0YWNrKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2Fs
bFN0YWNrKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVj
LT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUo
KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+
KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0
dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEFyZ3Vt
ZW50c0FuZENhbGxTdGFjayIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFjayIpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6U2NyaXB0QXJndW1lbnRzPiBzY3JpcHRBcmd1bWVudHMoSW5zcGVjdG9yOjpjcmVhdGVT
Y3JpcHRBcmd1bWVudHMoZXhlYywgMCkpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFy
Z3VtZW50cz4gc2NyaXB0QXJndW1lbnRzKEluc3BlY3Rvcjo6Y3JlYXRlU2NyaXB0QXJndW1lbnRz
KHN0YXRlLCAwKSk7CiAgICAgaW1wbC53aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrKHNj
cmlwdEFyZ3VtZW50cy5yZWxlYXNlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmcoRXhlY1N0YXRlKiBleGVjKQor
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhPcHRpb25hbEFyZyhFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhp
c1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0
ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
Ci0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm1l
dGhvZFdpdGhPcHRpb25hbEFyZyIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9y
KCpzdGF0ZSwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aE9wdGlvbmFsQXJnIik7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKIAotICAgIHNpemVfdCBhcmdzQ291bnQg
PSBleGVjLT5hcmd1bWVudENvdW50KCk7CisgICAgc2l6ZV90IGFyZ3NDb3VudCA9IHN0YXRlLT5h
cmd1bWVudENvdW50KCk7CiAgICAgaWYgKGFyZ3NDb3VudCA8PSAwKSB7CiAgICAgICAgIGltcGwu
bWV0aG9kV2l0aE9wdGlvbmFsQXJnKCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgfQogCi0gICAgaW50IG9wdCA9IHRvSW50MzIoZXhlYywgZXhl
Yy0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShleGVj
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaW50IG9wdCA9IHRvSW50MzIoc3RhdGUsIHN0YXRlLT5h
cmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxBcmcob3B0KTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXJn
QW5kRGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmdBbmRE
ZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNW
YWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAg
ICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJtZXRob2RXaXRo
T3B0aW9uYWxBcmdBbmREZWZhdWx0VmFsdWUiKTsKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5
cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm1ldGhvZFdpdGhPcHRpb25hbEFyZ0FuZERlZmF1
bHRWYWx1ZSIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNU
ZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAK
LSAgICBzaXplX3QgYXJnc0NvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOworICAgIHNpemVf
dCBhcmdzQ291bnQgPSBzdGF0ZS0+YXJndW1lbnRDb3VudCgpOwogICAgIGlmIChhcmdzQ291bnQg
PD0gMCkgewogICAgICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbEFyZ0FuZERlZmF1bHRWYWx1
ZSgpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IH0KIAotICAgIGludCBvcHQgPSBleGVjLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gNjY2
IDogdG9JbnQzMihleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgTm9ybWFsQ29udmVy
c2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpbnQg
b3B0ID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyA2NjYgOiB0b0ludDMyKHN0
YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOworICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFs
QXJnQW5kRGVmYXVsdFZhbHVlKG9wdCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnKEV4
ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyhFeGVj
U3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVl
KCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUp
OwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1Ro
aXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0Fu
ZE9wdGlvbmFsQXJnIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRl
LCAiVGVzdE9iaiIsICJtZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyIpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZv
KCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaWYgKFVOTElL
RUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBpbnQg
bm9uT3B0ID0gdG9JbnQzMihleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lv
bik7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOworICAg
IGludCBub25PcHQgPSB0b0ludDMyKHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENv
bnZlcnNpb24pOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCi0gICAgc2l6ZV90
IGFyZ3NDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKKyAgICBzaXplX3QgYXJnc0NvdW50
ID0gc3RhdGUtPmFyZ3VtZW50Q291bnQoKTsKICAgICBpZiAoYXJnc0NvdW50IDw9IDEpIHsKICAg
ICAgICAgaW1wbC5tZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyhub25PcHQp
OwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0K
IAotICAgIGludCBvcHQgPSB0b0ludDMyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEpLCBOb3JtYWxD
b252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGludCBvcHQgPSB0b0ludDMyKHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMSksIE5vcm1hbENvbnZl
cnNpb24pOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9k
V2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcobm9uT3B0LCBvcHQpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9u
YWxBcmdBbmRUd29PcHRpb25hbEFyZ3MoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRp
b25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyhFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFs
dWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2Jq
IiwgIm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyIpOworICAgICAg
ICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibWV0aG9kV2l0
aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzIik7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIGludCBub25PcHQgPSB0b0ludDMyKGV4
ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtF
TFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CisgICAgaW50IG5vbk9wdCA9IHRvSW50
MzIoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKLSAgICBzaXplX3QgYXJnc0NvdW50ID0gZXhlYy0+
YXJndW1lbnRDb3VudCgpOworICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGF0ZS0+YXJndW1lbnRD
b3VudCgpOwogICAgIGlmIChhcmdzQ291bnQgPD0gMSkgewogICAgICAgICBpbXBsLm1ldGhvZFdp
dGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyhub25PcHQpOwogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIAotICAgIGludCBvcHQx
ID0gdG9JbnQzMihleGVjLCBleGVjLT5hcmd1bWVudCgxKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0g
ICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpbnQgb3B0MSA9IHRv
SW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgxKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaWYgKGFyZ3NDb3VudCA8PSAyKSB7CiAg
ICAgICAgIGltcGwubWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzKG5v
bk9wdCwgb3B0MSk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgfQogCi0gICAgaW50IG9wdDIgPSB0b0ludDMyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50
KDIpLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGludCBvcHQyID0gdG9JbnQzMihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDIp
LCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBpbXBsLm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyhub25PcHQs
IG9wdDEsIG9wdDIpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmcoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhP
cHRpb25hbFN0cmluZyhFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVl
ID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhp
c1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmoqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAg
ICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm1ldGhvZFdp
dGhPcHRpb25hbFN0cmluZyIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nIik7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKIAotICAgIHNpemVfdCBhcmdzQ291bnQg
PSBleGVjLT5hcmd1bWVudENvdW50KCk7CisgICAgc2l6ZV90IGFyZ3NDb3VudCA9IHN0YXRlLT5h
cmd1bWVudENvdW50KCk7CiAgICAgaWYgKGFyZ3NDb3VudCA8PSAwKSB7CiAgICAgICAgIGltcGwu
bWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nKCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCi0gICAgU3RyaW5nIHN0ciA9IGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIFN0cmluZyBzdHIgPSBzdGF0ZS0+YXJndW1lbnQoMCku
dG9TdHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmcoc3RyKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFs
U3RyaW5nQW5kRGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxT
dHJpbmdBbmREZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3Rh
dGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nh
c3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJt
ZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdBbmREZWZhdWx0VmFsdWUiKTsKKyAgICAgICAgcmV0dXJu
IHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm1ldGhvZFdpdGhPcHRpb25h
bFN0cmluZ0FuZERlZmF1bHRWYWx1ZSIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
Y2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT5pbXBsKCk7CiAKLSAgICBzaXplX3QgYXJnc0NvdW50ID0gZXhlYy0+YXJndW1lbnRDb3Vu
dCgpOworICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGF0ZS0+YXJndW1lbnRDb3VudCgpOwogICAg
IGlmIChhcmdzQ291bnQgPD0gMCkgewogICAgICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFN0
cmluZ0FuZERlZmF1bHRWYWx1ZSgpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIH0KIAotICAgIFN0cmluZyBzdHIgPSBleGVjLT5hcmd1bWVudCgw
KS5pc1VuZGVmaW5lZCgpID8gImZvbyIgOiBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBTdHJpbmcgc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVk
KCkgPyAiZm9vIiA6IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSkt
PnZhbHVlKHN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBs
Lm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0FuZERlZmF1bHRWYWx1ZShzdHIpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxT
dHJpbmdJc1VuZGVmaW5lZChFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5n
SXNVbmRlZmluZWQoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNW
YWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAg
ICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJtZXRob2RXaXRo
T3B0aW9uYWxTdHJpbmdJc1VuZGVmaW5lZCIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlw
ZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNVbmRl
ZmluZWQiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVz
dE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAg
IFN0cmluZyBzdHIgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
Yyk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBTdHJpbmcg
c3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUpOwor
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlv
bmFsU3RyaW5nSXNVbmRlZmluZWQoc3RyKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNOdWxsU3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc051bGxTdHJpbmcoRXhlY1N0
YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgp
OworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlz
VHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJtZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc051
bGxTdHJpbmciKTsKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJU
ZXN0T2JqIiwgIm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzTnVsbFN0cmluZyIpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgU3RyaW5nIHN0ciA9IGV4
ZWMtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6IGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtF
TFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIFN0cmluZyBzdHIgPSBzdGF0ZS0+YXJndW1l
bnQoMCkuaXNVbmRlZmluZWQoKSA/IFN0cmluZygpIDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUpOworICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNOdWxsU3RyaW5n
KHN0cik7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhDYWxsYmFja0FyZyhFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQXJn
KEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlz
VmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNW
YWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRo
cm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAibWV0aG9kV2l0aENhbGxiYWNrQXJn
Iik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIs
ICJtZXRob2RXaXRoQ2FsbGJhY2tBcmciKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+aW1wbCgpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihleGVjKSk7Ci0gICAgaWYgKCFleGVjLT5hcmd1bWVudCgwKS5pc09iamVjdCgp
KQotICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IoKmV4ZWMs
IDAsICJjYWxsYmFjayIsICJUZXN0T2JqIiwgIm1ldGhvZFdpdGhDYWxsYmFja0FyZyIpOwotICAg
IFJlZlB0cjxUZXN0Q2FsbGJhY2s+IGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2s6OmNyZWF0ZShh
c09iamVjdChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQor
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihzdGF0ZSkpOworICAgIGlmICghc3RhdGUtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkp
CisgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcigqc3RhdGUs
IDAsICJjYWxsYmFjayIsICJUZXN0T2JqIiwgIm1ldGhvZFdpdGhDYWxsYmFja0FyZyIpOworICAg
IFJlZlB0cjxUZXN0Q2FsbGJhY2s+IGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2s6OmNyZWF0ZShh
c09iamVjdChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoQ2FsbGJhY2tBcmcoY2FsbGJhY2spOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9u
Q2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZyhFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbkNh
bGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmcoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
c3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIs
ICJtZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZyIpOworICAgICAgICByZXR1
cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aE5vbkNh
bGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmciKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+aW1wbCgpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50KCkgPCAy
KSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihleGVjKSk7Ci0gICAgaW50IG5vbkNhbGxiYWNrID0gdG9JbnQzMihleGVjLCBl
eGVjLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291
bnQoKSA8IDIpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOworICAgIGludCBub25DYWxsYmFjayA9IHRvSW50
MzIoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgaWYgKCFleGVjLT5hcmd1bWVudCgxKS5pc09i
amVjdCgpKQotICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3Io
KmV4ZWMsIDEsICJjYWxsYmFjayIsICJUZXN0T2JqIiwgIm1ldGhvZFdpdGhOb25DYWxsYmFja0Fy
Z0FuZENhbGxiYWNrQXJnIik7Ci0gICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4gY2FsbGJhY2sgPSBK
U1Rlc3RDYWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEp
KSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpOworICAgIGlmICghc3RhdGUtPmFyZ3VtZW50
KDEpLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rp
b25FcnJvcigqc3RhdGUsIDEsICJjYWxsYmFjayIsICJUZXN0T2JqIiwgIm1ldGhvZFdpdGhOb25D
YWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnIik7CisgICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4gY2Fs
bGJhY2sgPSBKU1Rlc3RDYWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRB
cmd1bWVudCgxKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKICAgICBpbXBsLm1ldGhv
ZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnKG5vbkNhbGxiYWNrLCBjYWxsYmFjayk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJh
Y2tBbmRPcHRpb25hbEFyZyhFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+
dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0g
ICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm1ldGhv
ZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNU
eXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJtZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25h
bEFyZyIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0
T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAg
UmVmUHRyPFRlc3RDYWxsYmFjaz4gY2FsbGJhY2s7Ci0gICAgaWYgKCFleGVjLT5hcmd1bWVudCgw
KS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgIGlmICghZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMCkuaXNPYmplY3QoKSkKLSAgICAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVz
dEJlRnVuY3Rpb25FcnJvcigqZXhlYywgMCwgImNhbGxiYWNrIiwgIlRlc3RPYmoiLCAibWV0aG9k
V2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmciKTsKLSAgICAgICAgY2FsbGJhY2sgPSBKU1Rlc3RD
YWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKSwgY2Fz
dGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpOworICAgIGlmICghc3RhdGUtPmFyZ3VtZW50KDApLmlz
VW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgaWYgKCFzdGF0ZS0+dW5jaGVja2VkQXJndW1l
bnQoMCkuaXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJl
RnVuY3Rpb25FcnJvcigqc3RhdGUsIDAsICJjYWxsYmFjayIsICJUZXN0T2JqIiwgIm1ldGhvZFdp
dGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnIik7CisgICAgICAgIGNhbGxiYWNrID0gSlNUZXN0Q2Fs
bGJhY2s6OmNyZWF0ZShhc09iamVjdChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpLCBjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7CiAgICAgfQogICAgIGltcGwubWV0aG9kV2l0aENhbGxi
YWNrQW5kT3B0aW9uYWxBcmcoY2FsbGJhY2spOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFyZyhFeGVjU3Rh
dGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BcmcoRXhlY1N0YXRlKiBzdGF0ZSkK
IHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFs
dWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVk
VGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpl
eGVjLCAiVGVzdE9iaiIsICJtZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFyZyIpOworICAgICAg
ICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibWV0aG9kV2l0
aENhbGxiYWNrRnVuY3Rpb25BcmciKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNh
c3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+aW1wbCgpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
LSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihleGVjKSk7Ci0gICAgaWYgKCFleGVjLT5hcmd1bWVudCgwKS5pc0Z1bmN0aW9uKCkp
Ci0gICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcigqZXhlYywg
MCwgImNhbGxiYWNrIiwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25Bcmci
KTsKLSAgICBSZWZQdHI8VGVzdENhbGxiYWNrRnVuY3Rpb24+IGNhbGxiYWNrID0gSlNUZXN0Q2Fs
bGJhY2tGdW5jdGlvbjo6Y3JlYXRlKGFzT2JqZWN0KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
KSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CisgICAgaWYgKCFzdGF0ZS0+
YXJndW1lbnQoMCkuaXNGdW5jdGlvbigpKQorICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11
c3RCZUZ1bmN0aW9uRXJyb3IoKnN0YXRlLCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iaiIsICJtZXRo
b2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFyZyIpOworICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2tGdW5j
dGlvbj4gY2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGUoYXNPYmplY3Qo
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkp
OwogICAgIGltcGwubWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BcmcoY2FsbGJhY2spOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9u
Q2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJnKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJnKEV4ZWNTdGF0ZSogc3RhdGUp
CiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigq
ZXhlYywgIlRlc3RPYmoiLCAibWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tGdW5j
dGlvbkFyZyIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRl
c3RPYmoiLCAibWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tGdW5jdGlvbkFyZyIp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjpp
bmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaWYgKFVO
TElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQotICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBp
bnQgbm9uQ2FsbGJhY2sgPSB0b0ludDMyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBOb3JtYWxD
b252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCisgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRl
KSk7CisgICAgaW50IG5vbkNhbGxiYWNrID0gdG9JbnQzMihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50
KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
LSAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDEpLmlzRnVuY3Rpb24oKSkKLSAgICAgICAgcmV0dXJu
IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpleGVjLCAxLCAiY2FsbGJhY2siLCAi
VGVzdE9iaiIsICJtZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJn
Iik7Ci0gICAgUmVmUHRyPFRlc3RDYWxsYmFja0Z1bmN0aW9uPiBjYWxsYmFjayA9IEpTVGVzdENh
bGxiYWNrRnVuY3Rpb246OmNyZWF0ZShhc09iamVjdChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgx
KSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKKyAgICBpZiAoIXN0YXRlLT5hcmd1bWVu
dCgxKS5pc0Z1bmN0aW9uKCkpCisgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRnVu
Y3Rpb25FcnJvcigqc3RhdGUsIDEsICJjYWxsYmFjayIsICJUZXN0T2JqIiwgIm1ldGhvZFdpdGhO
b25DYWxsYmFja0FyZ0FuZENhbGxiYWNrRnVuY3Rpb25BcmciKTsKKyAgICBSZWZQdHI8VGVzdENh
bGxiYWNrRnVuY3Rpb24+IGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRl
KGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSksIGNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNr
RnVuY3Rpb25Bcmcobm9uQ2FsbGJhY2ssIGNhbGxiYWNrKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BbmRP
cHRpb25hbEFyZyhFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BbmRP
cHRpb25hbEFyZyhFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
ZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1Zh
bHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RP
YmoqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAg
IHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm1ldGhvZFdpdGhD
YWxsYmFja0Z1bmN0aW9uQW5kT3B0aW9uYWxBcmciKTsKKyAgICAgICAgcmV0dXJuIHRocm93VGhp
c1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9u
QW5kT3B0aW9uYWxBcmciKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRo
aXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1w
bCgpOwogICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2tGdW5jdGlvbj4gY2FsbGJhY2s7Ci0gICAgaWYg
KCFleGVjLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgIGlmICgh
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNGdW5jdGlvbigpKQotICAgICAgICAgICAgcmV0
dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpleGVjLCAwLCAiY2FsbGJhY2si
LCAiVGVzdE9iaiIsICJtZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFuZE9wdGlvbmFsQXJnIik7
Ci0gICAgICAgIGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKGFzT2Jq
ZWN0KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCkpOworICAgIGlmICghc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsK
KyAgICAgICAgaWYgKCFzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNGdW5jdGlvbigpKQor
ICAgICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpzdGF0
ZSwgMCwgImNhbGxiYWNrIiwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25B
bmRPcHRpb25hbEFyZyIpOworICAgICAgICBjYWxsYmFjayA9IEpTVGVzdENhbGxiYWNrRnVuY3Rp
b246OmNyZWF0ZShhc09iamVjdChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpLCBjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSk7CiAgICAgfQogICAgIGltcGwubWV0aG9kV2l0aENhbGxiYWNr
RnVuY3Rpb25BbmRPcHRpb25hbEFyZyhjYWxsYmFjayk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uU3RhdGljTWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0
aW9uYWxBcmcoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uU3RhdGljTWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0
aW9uYWxBcmcoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiBj
YWxsYmFjazsKLSAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkp
IHsKLSAgICAgICAgaWYgKCFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc09iamVjdCgpKQot
ICAgICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpleGVj
LCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iaiIsICJzdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBbmRP
cHRpb25hbEFyZyIpOwotICAgICAgICBjYWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxi
YWNrPEpTVGVzdENhbGxiYWNrPihleGVjLCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Cisg
ICAgaWYgKCFzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgICAg
ICBpZiAoIXN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc09iamVjdCgpKQorICAgICAgICAg
ICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpzdGF0ZSwgMCwgImNh
bGxiYWNrIiwgIlRlc3RPYmoiLCAic3RhdGljTWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxB
cmciKTsKKyAgICAgICAgY2FsbGJhY2sgPSBjcmVhdGVGdW5jdGlvbk9ubHlDYWxsYmFjazxKU1Rl
c3RDYWxsYmFjaz4oc3RhdGUsIGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCkpLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIH0K
ICAgICBUZXN0T2JqOjpzdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyhjYWxs
YmFjayk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9u
U3RhdGljTWV0aG9kV2l0aENhbGxiYWNrQXJnKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvblN0YXRpY01ldGhv
ZFdpdGhDYWxsYmFja0FyZyhFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIGlmIChVTkxJS0VMWShl
eGVjLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgaWYgKCFleGVj
LT5hcmd1bWVudCgwKS5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11
c3RCZUZ1bmN0aW9uRXJyb3IoKmV4ZWMsIDAsICJjYWxsYmFjayIsICJUZXN0T2JqIiwgInN0YXRp
Y01ldGhvZFdpdGhDYWxsYmFja0FyZyIpOwotICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2s+IGNhbGxi
YWNrID0gY3JlYXRlRnVuY3Rpb25Pbmx5Q2FsbGJhY2s8SlNUZXN0Q2FsbGJhY2s+KGV4ZWMsIGpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOworICAgIGlmICghc3RhdGUtPmFyZ3Vt
ZW50KDApLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRnVu
Y3Rpb25FcnJvcigqc3RhdGUsIDAsICJjYWxsYmFjayIsICJUZXN0T2JqIiwgInN0YXRpY01ldGhv
ZFdpdGhDYWxsYmFja0FyZyIpOworICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2s+IGNhbGxiYWNrID0g
Y3JlYXRlRnVuY3Rpb25Pbmx5Q2FsbGJhY2s8SlNUZXN0Q2FsbGJhY2s+KHN0YXRlLCBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSwgc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBUZXN0T2JqOjpzdGF0aWNNZXRob2RXaXRoQ2Fs
bGJhY2tBcmcoY2FsbGJhY2spOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiB9CiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE1ldGhvZDEoRXhl
Y1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kMShFeGVjU3RhdGUqIHN0YXRlKQogewotICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJU
ZXN0T2JqIiwgImNvbmRpdGlvbmFsTWV0aG9kMSIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlz
VHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiY29uZGl0aW9uYWxNZXRob2QxIik7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGltcGwuY29uZGl0aW9uYWxNZXRob2QxKCkpOwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuY29uZGl0
aW9uYWxNZXRob2QxKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0K
IAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIp
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
Q29uZGl0aW9uYWxNZXRob2QyKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE1ldGhvZDIoRXhl
Y1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1
ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpT
VGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVl
KTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dU
aGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJjb25kaXRpb25hbE1ldGhvZDIiKTsKKyAg
ICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImNvbmRp
dGlvbmFsTWV0aG9kMiIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhp
cywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBs
KCk7CiAgICAgaW1wbC5jb25kaXRpb25hbE1ldGhvZDIoKTsKQEAgLTM4OTUsMTIgKzM4OTUsMTIg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkNvbmRpdGlvbmFsTWV0aG9kMihFeGVjU3QKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlv
bjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kMyhFeGVjU3RhdGUqIGV4
ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQ29uZGl0aW9uYWxNZXRob2QzKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0
aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0
YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAi
Y29uZGl0aW9uYWxNZXRob2QzIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3Io
KnN0YXRlLCAiVGVzdE9iaiIsICJjb25kaXRpb25hbE1ldGhvZDMiKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIGltcGwuY29uZGl0aW9uYWxNZXRob2Qz
KCk7CkBAIC0zOTA5LDM2MiArMzkwOSwzNjIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kMyhFeGVjU3QKIAog
I2VuZGlmCiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEoRXhlY1N0YXRlKiBleGVjKQorc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25P
dmVybG9hZGVkTWV0aG9kMShFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+
dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0g
ICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm92ZXJs
b2FkZWRNZXRob2QiKTsKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUs
ICJUZXN0T2JqIiwgIm92ZXJsb2FkZWRNZXRob2QiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50
KCkgPCAyKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgVGVzdE9iaiogb2JqQXJnID0gSlNUZXN0T2Jq
Ojp0b1dyYXBwZWQoZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkg
PCAyKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAgICBUZXN0T2JqKiBvYmpBcmcgPSBKU1Rlc3RPYmo6
OnRvV3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoMCkpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwotICAgIFN0cmluZyBzdHJBcmcgPSBleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBTdHJpbmcgc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKHN0YXRl
KS0+dmFsdWUoc3RhdGUpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlt
cGwub3ZlcmxvYWRlZE1ldGhvZChvYmpBcmcsIHN0ckFyZyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMihFeGVj
U3RhdGUqIGV4ZWMpCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7
Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhl
YywgIlRlc3RPYmoiLCAib3ZlcmxvYWRlZE1ldGhvZCIpOworICAgICAgICByZXR1cm4gdGhyb3dU
aGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAib3ZlcmxvYWRlZE1ldGhvZCIpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaWYgKFVOTElLRUxZ
KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBUZXN0T2Jq
KiBvYmpBcmcgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAg
aWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOworICAgIFRlc3RPYmoq
IG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgwKSk7CisgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKLSAgICBzaXplX3QgYXJnc0NvdW50ID0gZXhl
Yy0+YXJndW1lbnRDb3VudCgpOworICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGF0ZS0+YXJndW1l
bnRDb3VudCgpOwogICAgIGlmIChhcmdzQ291bnQgPD0gMSkgewogICAgICAgICBpbXBsLm92ZXJs
b2FkZWRNZXRob2Qob2JqQXJnKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICB9CiAKLSAgICBpbnQgbG9uZ0FyZyA9IHRvSW50MzIoZXhlYywgZXhl
Yy0+YXJndW1lbnQoMSksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShleGVj
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaW50IGxvbmdBcmcgPSB0b0ludDMyKHN0YXRlLCBzdGF0
ZS0+YXJndW1lbnQoMSksIE5vcm1hbENvbnZlcnNpb24pOworICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChvYmpBcmcsIGxvbmdBcmcpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLXN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zl
cmxvYWRlZE1ldGhvZDMoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMyhF
eGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1Zh
bHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFs
dWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJv
d1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm92ZXJsb2FkZWRNZXRob2QiKTsKKyAg
ICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm92ZXJs
b2FkZWRNZXRob2QiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMs
IEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgp
OwotICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihl
eGVjKSk7Ci0gICAgU3RyaW5nIHN0ckFyZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KHN0YXRlKSk7CisgICAgU3RyaW5nIHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1N0cmlu
ZyhzdGF0ZSktPnZhbHVlKHN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2Qoc3RyQXJnKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q0KEV4ZWNT
dGF0ZSogZXhlYykKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDQoRXhlY1N0YXRlKiBzdGF0ZSkKIHsK
LSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVj
LCAiVGVzdE9iaiIsICJvdmVybG9hZGVkTWV0aG9kIik7CisgICAgICAgIHJldHVybiB0aHJvd1Ro
aXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJvdmVybG9hZGVkTWV0aG9kIik7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBpZiAoVU5MSUtFTFko
ZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
ZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIGludCBsb25n
QXJnID0gdG9JbnQzMihleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7
Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOworICAgIGlu
dCBsb25nQXJnID0gdG9JbnQzMihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252
ZXJzaW9uKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm92ZXJs
b2FkZWRNZXRob2QobG9uZ0FyZyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNShFeGVjU3RhdGUqIGV4ZWMpCitz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2Q1KEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0
aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0
YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAi
b3ZlcmxvYWRlZE1ldGhvZCIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RPYmoiLCAib3ZlcmxvYWRlZE1ldGhvZCIpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDAp
LmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25F
cnJvcigqZXhlYywgMCwgImNhbGxiYWNrIiwgIlRlc3RPYmoiLCAib3ZlcmxvYWRlZE1ldGhvZCIp
OwotICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2s+IGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2s6OmNy
ZWF0ZShhc09iamVjdChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSksIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihzdGF0ZSkpOworICAgIGlmICghc3RhdGUtPmFyZ3VtZW50KDApLmlzT2Jq
ZWN0KCkpCisgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcigq
c3RhdGUsIDAsICJjYWxsYmFjayIsICJUZXN0T2JqIiwgIm92ZXJsb2FkZWRNZXRob2QiKTsKKyAg
ICBSZWZQdHI8VGVzdENhbGxiYWNrPiBjYWxsYmFjayA9IEpTVGVzdENhbGxiYWNrOjpjcmVhdGUo
YXNPYmplY3Qoc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKSwgY2FzdGVkVGhpcy0+Z2xvYmFs
T2JqZWN0KCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChjYWxsYmFjayk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kNihFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q2KEV4ZWNTdGF0
ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsK
KyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5
cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAib3ZlcmxvYWRlZE1ldGhvZCIpOworICAgICAgICBy
ZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAib3ZlcmxvYWRlZE1l
dGhvZCIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0
T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAg
aWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsK
LSAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gbGlzdEFyZyA9IHRvRE9NU3RyaW5nTGlzdChleGVj
LCBleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihzdGF0ZSkpOworICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBsaXN0QXJnID0gdG9ET01T
dHJpbmdMaXN0KHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOworICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChsaXN0QXJnKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1zdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2Fk
ZWRNZXRob2Q3KEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDcoRXhlY1N0
YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgp
OworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlz
VHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJvdmVybG9hZGVkTWV0aG9kIik7CisgICAgICAg
IHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJvdmVybG9hZGVk
TWV0aG9kIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rl
c3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAg
ICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykp
OwotICAgIFZlY3RvcjxTdHJpbmc+IGFycmF5QXJnID0gdG9OYXRpdmVBcnJheTxTdHJpbmc+KGV4
ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKHN0YXRlKSk7CisgICAgVmVjdG9yPFN0cmluZz4gYXJyYXlBcmcgPSB0b05hdGl2ZUFy
cmF5PFN0cmluZz4oc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7CisgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKGFycmF5QXJnKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1zdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2Q4KEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDgoRXhl
Y1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1
ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpT
VGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVl
KTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dU
aGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJvdmVybG9hZGVkTWV0aG9kIik7CisgICAg
ICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJvdmVybG9h
ZGVkTWV0aG9kIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBK
U1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsK
LSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhl
YykpOwotICAgIFRlc3RPYmoqIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKGV4ZWMtPmFy
Z3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRl
KSk7CisgICAgVGVzdE9iaiogb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFy
Z3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm92
ZXJsb2FkZWRNZXRob2Qob2JqQXJnKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q5KEV4ZWNTdGF0ZSogZXhlYykK
K3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDkoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
c3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIs
ICJvdmVybG9hZGVkTWV0aG9kIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3Io
KnN0YXRlLCAiVGVzdE9iaiIsICJvdmVybG9hZGVkTWV0aG9kIik7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIFZlY3RvcjxTdHJpbmc+IGFycmF5
QXJnID0gdG9OYXRpdmVBcnJheTxTdHJpbmc+KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAg
ICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
c3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CisgICAgVmVjdG9y
PFN0cmluZz4gYXJyYXlBcmcgPSB0b05hdGl2ZUFycmF5PFN0cmluZz4oc3RhdGUsIHN0YXRlLT5h
cmd1bWVudCgwKSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5v
dmVybG9hZGVkTWV0aG9kKGFycmF5QXJnKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMChFeGVjU3RhdGUqIGV4
ZWMpCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMChFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0
T2JqIiwgIm92ZXJsb2FkZWRNZXRob2QiKTsKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVF
cnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm92ZXJsb2FkZWRNZXRob2QiKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgVmVjdG9yPHVuc2lnbmVk
PiBhcnJheUFyZyA9IHRvTmF0aXZlQXJyYXk8dW5zaWduZWQ+KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50
KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Cisg
ICAgVmVjdG9yPHVuc2lnbmVkPiBhcnJheUFyZyA9IHRvTmF0aXZlQXJyYXk8dW5zaWduZWQ+KHN0
YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChhcnJheUFyZyk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTEo
RXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTEoRXhlY1N0YXRlKiBzdGF0
ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9y
KCpleGVjLCAiVGVzdE9iaiIsICJvdmVybG9hZGVkTWV0aG9kIik7CisgICAgICAgIHJldHVybiB0
aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJvdmVybG9hZGVkTWV0aG9kIik7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6Omlu
Zm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBpZiAoVU5M
SUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIFN0
cmluZyBzdHJBcmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
Yyk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOworICAg
IFN0cmluZyBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT52YWx1
ZShzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5vdmVy
bG9hZGVkTWV0aG9kKHN0ckFyZyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTIoRXhlY1N0YXRlKiBleGVjKQor
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZGVkTWV0aG9kMTIoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
c3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIs
ICJvdmVybG9hZGVkTWV0aG9kIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3Io
KnN0YXRlLCAiVGVzdE9iaiIsICJvdmVybG9hZGVkTWV0aG9kIik7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBWZWN0b3I8QmxvYio+IGJsb2JBcmdzOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGNvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOyBp
IDwgY291bnQ7ICsraSkgewotICAgICAgICBpZiAoIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkp
LmluaGVyaXRzKEpTQmxvYjo6aW5mbygpKSkKLSAgICAgICAgICAgIHJldHVybiB0aHJvd0FyZ3Vt
ZW50VHlwZUVycm9yKCpleGVjLCBpLCAiYmxvYkFyZ3MiLCAiVGVzdE9iaiIsICJvdmVybG9hZGVk
TWV0aG9kIiwgIkJsb2IiKTsKLSAgICAgICAgYmxvYkFyZ3MuYXBwZW5kKEpTQmxvYjo6dG9XcmFw
cGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MCwgY291bnQgPSBzdGF0ZS0+YXJndW1lbnRDb3VudCgpOyBpIDwgY291bnQ7ICsraSkgeworICAg
ICAgICBpZiAoIXN0YXRlLT51bmNoZWNrZWRBcmd1bWVudChpKS5pbmhlcml0cyhKU0Jsb2I6Omlu
Zm8oKSkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJvcigqc3RhdGUs
IGksICJibG9iQXJncyIsICJUZXN0T2JqIiwgIm92ZXJsb2FkZWRNZXRob2QiLCAiQmxvYiIpOwor
ICAgICAgICBibG9iQXJncy5hcHBlbmQoSlNCbG9iOjp0b1dyYXBwZWQoc3RhdGUtPnVuY2hlY2tl
ZEFyZ3VtZW50KGkpKSk7CiAgICAgfQogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChibG9iQXJn
cyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2QoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QoRXhlY1N0YXRlKiBz
dGF0ZSkKIHsKLSAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RkOjptaW48c2l6ZV90PigyLCBleGVj
LT5hcmd1bWVudENvdW50KCkpOwotICAgIEpTVmFsdWUgYXJnMChleGVjLT5hcmd1bWVudCgwKSk7
Ci0gICAgSlNWYWx1ZSBhcmcxKGV4ZWMtPmFyZ3VtZW50KDEpKTsKKyAgICBzaXplX3QgYXJnc0Nv
dW50ID0gc3RkOjptaW48c2l6ZV90PigyLCBzdGF0ZS0+YXJndW1lbnRDb3VudCgpKTsKKyAgICBK
U1ZhbHVlIGFyZzAoc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBKU1ZhbHVlIGFyZzEoc3RhdGUt
PmFyZ3VtZW50KDEpKTsKICAgICBpZiAoKGFyZ3NDb3VudCA9PSAyICYmIChhcmcwLmlzTnVsbCgp
IHx8IChhcmcwLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoYXJnMCktPmluaGVyaXRzKEpTVGVzdE9i
ajo6aW5mbygpKSkpICYmIChhcmcxLmlzVW5kZWZpbmVkT3JOdWxsKCkgfHwgYXJnMS5pc1N0cmlu
ZygpIHx8IGFyZzEuaXNPYmplY3QoKSkpKQotICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMShleGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEoc3RhdGUpOwogICAgIGlmICgo
YXJnc0NvdW50ID09IDEgJiYgKGFyZzAuaXNOdWxsKCkgfHwgKGFyZzAuaXNPYmplY3QoKSAmJiBh
c09iamVjdChhcmcwKS0+aW5oZXJpdHMoSlNUZXN0T2JqOjppbmZvKCkpKSkpIHx8IChhcmdzQ291
bnQgPT0gMiAmJiAoYXJnMC5pc051bGwoKSB8fCAoYXJnMC5pc09iamVjdCgpICYmIGFzT2JqZWN0
KGFyZzApLT5pbmhlcml0cyhKU1Rlc3RPYmo6OmluZm8oKSkpKSkpCi0gICAgICAgIHJldHVybiBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QyKGV4ZWMpOworICAgICAg
ICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMihzdGF0
ZSk7CiAgICAgaWYgKChhcmdzQ291bnQgPT0gMSAmJiAoYXJnMC5pc1VuZGVmaW5lZE9yTnVsbCgp
IHx8IGFyZzAuaXNTdHJpbmcoKSB8fCBhcmcwLmlzT2JqZWN0KCkpKSkKLSAgICAgICAgcmV0dXJu
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDMoZXhlYyk7CisgICAg
ICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QzKHN0
YXRlKTsKICAgICBpZiAoYXJnc0NvdW50ID09IDEpCi0gICAgICAgIHJldHVybiBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q0KGV4ZWMpOworICAgICAgICByZXR1cm4g
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNChzdGF0ZSk7CiAgICAg
aWYgKChhcmdzQ291bnQgPT0gMSAmJiAoYXJnMC5pc051bGwoKSB8fCBhcmcwLmlzT2JqZWN0KCkp
KSkKLSAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1l
dGhvZDUoZXhlYyk7CisgICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2Q1KHN0YXRlKTsKICAgICBpZiAoKGFyZ3NDb3VudCA9PSAxICYmIChhcmcw
LmlzTnVsbCgpIHx8IChhcmcwLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoYXJnMCktPmluaGVyaXRz
KEpTRE9NU3RyaW5nTGlzdDo6aW5mbygpKSkpKSkKLSAgICAgICAgcmV0dXJuIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDYoZXhlYyk7CisgICAgICAgIHJldHVybiBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q2KHN0YXRlKTsKICAgICBp
ZiAoKGFyZ3NDb3VudCA9PSAxICYmIChhcmcwLmlzTnVsbCgpIHx8IChhcmcwLmlzT2JqZWN0KCkg
JiYgaXNKU0FycmF5KGFyZzApKSkpKQotICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNyhleGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDcoc3RhdGUpOwogICAgIGlmICgoYXJn
c0NvdW50ID09IDEgJiYgKChhcmcwLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoYXJnMCktPmluaGVy
aXRzKEpTVGVzdE9iajo6aW5mbygpKSkpKSkKLSAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDgoZXhlYyk7CisgICAgICAgIHJldHVybiBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q4KHN0YXRlKTsKICAgICBpZiAo
KGFyZ3NDb3VudCA9PSAxICYmICgoYXJnMC5pc09iamVjdCgpICYmIGlzSlNBcnJheShhcmcwKSkp
KSkKLSAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1l
dGhvZDkoZXhlYyk7CisgICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2Q5KHN0YXRlKTsKICAgICBpZiAoKGFyZ3NDb3VudCA9PSAxICYmICgoYXJn
MC5pc09iamVjdCgpICYmIGlzSlNBcnJheShhcmcwKSkpKSkKLSAgICAgICAgcmV0dXJuIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEwKGV4ZWMpOworICAgICAgICBy
ZXR1cm4ganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTAoc3RhdGUp
OwogICAgIGlmIChhcmdzQ291bnQgPT0gMSkKLSAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDExKGV4ZWMpOworICAgICAgICByZXR1cm4ganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTEoc3RhdGUpOwogICAgIGlm
ICgpCi0gICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2QxMihleGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T3ZlcmxvYWRlZE1ldGhvZDEyKHN0YXRlKTsKICAgICBpZiAoYXJnc0NvdW50IDwgMSkKLSAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihleGVjKSk7Ci0gICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CisgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7CisgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUpOwogfQogCi1zdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIxKEV4ZWNTdGF0ZSogZXhlYykKK3N0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlcjEoRXhlY1N0YXRlKiBzdGF0
ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9y
KCpleGVjLCAiVGVzdE9iaiIsICJvdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVy
Iik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIs
ICJvdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyIik7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIFRlc3RPYmoqIG9iakFyZzEg
PSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElL
RUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOworICAgIFRlc3RPYmoqIG9iakFyZzEg
PSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoMCkpOworICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogCi0gICAgc2l6ZV90IGFyZ3NDb3VudCA9IGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKTsKKyAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RhdGUtPmFyZ3VtZW50Q291bnQo
KTsKICAgICBpZiAoYXJnc0NvdW50IDw9IDEpIHsKICAgICAgICAgaW1wbC5vdmVybG9hZGVkTWV0
aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyKG9iakFyZzEpOwogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIAotICAgIFRlc3RPYmoqIG9iakFyZzIg
PSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChleGVjLT5hcmd1bWVudCgxKSk7Ci0gICAgaWYgKFVOTElL
RUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBUZXN0T2JqKiBvYmpBcmcyID0gSlNUZXN0
T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDEpKTsKKyAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0
ZXIob2JqQXJnMSwgb2JqQXJnMik7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVy
MihFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJh
bWV0ZXIyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVj
LT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUo
KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+
KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0
dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAib3ZlcmxvYWRlZE1ldGhv
ZFdpdGhPcHRpb25hbFBhcmFtZXRlciIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVy
cm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAib3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFt
ZXRlciIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0
T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAg
aWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsK
LSAgICBUZXN0T2JqKiBvYmpBcmcgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChleGVjLT5hcmd1bWVu
dCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwor
ICAgIFRlc3RPYmoqIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVu
dCgwKSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKLSAgICBzaXplX3QgYXJn
c0NvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOworICAgIHNpemVfdCBhcmdzQ291bnQgPSBz
dGF0ZS0+YXJndW1lbnRDb3VudCgpOwogICAgIGlmIChhcmdzQ291bnQgPD0gMSkgewogICAgICAg
ICBpbXBsLm92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIob2JqQXJnKTsKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKLSAg
ICBpbnQgbG9uZ0FyZyA9IHRvSW50MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMSksIE5vcm1hbENv
bnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
aW50IGxvbmdBcmcgPSB0b0ludDMyKHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMSksIE5vcm1hbENv
bnZlcnNpb24pOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwub3Zl
cmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlcihvYmpBcmcsIGxvbmdBcmcpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0
aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9k
V2l0aE9wdGlvbmFsUGFyYW1ldGVyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgc2l6ZV90IGFy
Z3NDb3VudCA9IHN0ZDo6bWluPHNpemVfdD4oMiwgZXhlYy0+YXJndW1lbnRDb3VudCgpKTsKLSAg
ICBKU1ZhbHVlIGFyZzAoZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIEpTVmFsdWUgYXJnMShleGVj
LT5hcmd1bWVudCgxKSk7CisgICAgc2l6ZV90IGFyZ3NDb3VudCA9IHN0ZDo6bWluPHNpemVfdD4o
Miwgc3RhdGUtPmFyZ3VtZW50Q291bnQoKSk7CisgICAgSlNWYWx1ZSBhcmcwKHN0YXRlLT5hcmd1
bWVudCgwKSk7CisgICAgSlNWYWx1ZSBhcmcxKHN0YXRlLT5hcmd1bWVudCgxKSk7CiAgICAgaWYg
KChhcmdzQ291bnQgPT0gMSAmJiAoYXJnMC5pc051bGwoKSB8fCAoYXJnMC5pc09iamVjdCgpICYm
IGFzT2JqZWN0KGFyZzApLT5pbmhlcml0cyhKU1Rlc3RPYmo6OmluZm8oKSkpKSkgfHwgKGFyZ3ND
b3VudCA9PSAyICYmIChhcmcwLmlzTnVsbCgpIHx8IChhcmcwLmlzT2JqZWN0KCkgJiYgYXNPYmpl
Y3QoYXJnMCktPmluaGVyaXRzKEpTVGVzdE9iajo6aW5mbygpKSkpICYmIChhcmcxLmlzVW5kZWZp
bmVkKCkgfHwgYXJnMS5pc051bGwoKSB8fCAoYXJnMS5pc09iamVjdCgpICYmIGFzT2JqZWN0KGFy
ZzEpLT5pbmhlcml0cyhKU1Rlc3RPYmo6OmluZm8oKSkpKSkpCi0gICAgICAgIHJldHVybiBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0
ZXIxKGV4ZWMpOworICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVy
bG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyMShzdGF0ZSk7CiAgICAgaWYgKChhcmdz
Q291bnQgPT0gMSAmJiAoYXJnMC5pc051bGwoKSB8fCAoYXJnMC5pc09iamVjdCgpICYmIGFzT2Jq
ZWN0KGFyZzApLT5pbmhlcml0cyhKU1Rlc3RPYmo6OmluZm8oKSkpKSkgfHwgKGFyZ3NDb3VudCA9
PSAyICYmIChhcmcwLmlzTnVsbCgpIHx8IChhcmcwLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoYXJn
MCktPmluaGVyaXRzKEpTVGVzdE9iajo6aW5mbygpKSkpKSkKLSAgICAgICAgcmV0dXJuIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRl
cjIoZXhlYyk7CisgICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIyKHN0YXRlKTsKICAgICBpZiAoYXJnc0Nv
dW50IDwgMSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yyk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKHN0YXRlKSk7CisgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9y
RnVuY3Rpb25DbGFzc01ldGhvZChFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25DbGFzc01ldGhvZChFeGVjU3Rh
dGUqIHN0YXRlKQogewogICAgIFRlc3RPYmo6OmNsYXNzTWV0aG9kKCk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoT3B0aW9u
YWwoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpDb25zdHJ1Y3RvckZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoT3B0aW9uYWwoRXhlY1N0YXRlKiBz
dGF0ZSkKIHsKIAotICAgIHNpemVfdCBhcmdzQ291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7
CisgICAgc2l6ZV90IGFyZ3NDb3VudCA9IHN0YXRlLT5hcmd1bWVudENvdW50KCk7CiAgICAgaWYg
KGFyZ3NDb3VudCA8PSAwKSB7CiAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoVGVz
dE9iajo6Y2xhc3NNZXRob2RXaXRoT3B0aW9uYWwoKSk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKICAgICB9CiAKLSAgICBpbnQgYXJnID0gdG9JbnQzMihleGVjLCBl
eGVjLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpbnQgYXJnID0gdG9JbnQzMihzdGF0ZSwgc3RhdGUt
PmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKFRlc3RPYmo6OmNsYXNzTWV0
aG9kV2l0aE9wdGlvbmFsKGFyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3Rv
ckZ1bmN0aW9uQ2xhc3NNZXRob2QyKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkNsYXNzTWV0aG9kMihFeGVj
U3RhdGUqIHN0YXRlKQogewotICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RP
Ymo6OmNsYXNzTWV0aG9kMihleGVjKSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTVGVzdE9iajo6Y2xhc3NNZXRob2QyKHN0YXRlKSk7CiB9CiAKICNpZiBFTkFCTEUoQ29u
ZGl0aW9uMSkKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNv
bnN0cnVjdG9yRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTEoRXhlY1N0YXRlKiBleGVjKQorc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2QxMShFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIGlmIChVTkxJ
S0VMWShleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgaW50
IGFyZyA9IHRvSW50MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24p
OwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAgICBp
bnQgYXJnID0gdG9JbnQzMihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJz
aW9uKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBUZXN0T2JqOjpvdmVy
bG9hZGVkTWV0aG9kMShhcmcpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CkBAIC00MjczLDEyICs0MjczLDEyIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kCiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xKQotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Qx
MihFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEyKEV4ZWNTdGF0ZSog
c3RhdGUpCiB7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQot
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGV4ZWMpKTsKLSAgICBTdHJpbmcgdHlwZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKHN0YXRlKSk7CisgICAgU3RyaW5nIHR5cGUgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9T
dHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgVGVzdE9iajo6b3ZlcmxvYWRlZE1ldGhvZDEodHlwZSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTQyODYsNDYgKzQyODYsNDYgQEAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2QKIAogI2VuZGlmCiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxKEV4ZWNT
dGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3Ry
dWN0b3JGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAg
c2l6ZV90IGFyZ3NDb3VudCA9IHN0ZDo6bWluPHNpemVfdD4oMSwgZXhlYy0+YXJndW1lbnRDb3Vu
dCgpKTsKKyAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RkOjptaW48c2l6ZV90PigxLCBzdGF0ZS0+
YXJndW1lbnRDb3VudCgpKTsKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKICAgICBpZiAoYXJnc0Nv
dW50ID09IDEpCi0gICAgICAgIHJldHVybiBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uT3Zl
cmxvYWRlZE1ldGhvZDExKGV4ZWMpOworICAgICAgICByZXR1cm4ganNUZXN0T2JqQ29uc3RydWN0
b3JGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMShzdGF0ZSk7CiAjZW5kaWYKIAotICAgIEpTVmFs
dWUgYXJnMChleGVjLT5hcmd1bWVudCgwKSk7CisgICAgSlNWYWx1ZSBhcmcwKHN0YXRlLT5hcmd1
bWVudCgwKSk7CiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpCiAgICAgaWYgKChhcmdzQ291bnQgPT0g
MSAmJiAoYXJnMC5pc1VuZGVmaW5lZE9yTnVsbCgpIHx8IGFyZzAuaXNTdHJpbmcoKSB8fCBhcmcw
LmlzT2JqZWN0KCkpKSkKLSAgICAgICAgcmV0dXJuIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rp
b25PdmVybG9hZGVkTWV0aG9kMTIoZXhlYyk7CisgICAgICAgIHJldHVybiBqc1Rlc3RPYmpDb25z
dHJ1Y3RvckZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEyKHN0YXRlKTsKICNlbmRpZgogCiAgICAg
aWYgKGFyZ3NDb3VudCA8IDEpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKHN0YXRlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aENsYW1wKEV4ZWNTdGF0ZSogZXhlYykKK0Vu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFz
c01ldGhvZFdpdGhDbGFtcChFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+
dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0g
ICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgImNsYXNz
TWV0aG9kV2l0aENsYW1wIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0
YXRlLCAiVGVzdE9iaiIsICJjbGFzc01ldGhvZFdpdGhDbGFtcCIpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA8IDIpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmFyZ3VtZW50Q291bnQoKSA8IDIpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIHVuc2lnbmVkIHNo
b3J0IG9iakFyZ3NTaG9ydCA9IDA7Ci0gICAgZG91YmxlIG9iakFyZ3NTaG9ydE5hdGl2ZVZhbHVl
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBkb3VibGUgb2JqQXJnc1Nob3J0TmF0aXZlVmFsdWUg
PSBzdGF0ZS0+YXJndW1lbnQoMCkudG9OdW1iZXIoc3RhdGUpOworICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogCiAgICAgaWYgKCFzdGQ6OmlzbmFuKG9iakFyZ3NTaG9ydE5hdGl2ZVZh
bHVlKSkKICAgICAgICAgb2JqQXJnc1Nob3J0ID0gY2xhbXBUbzx1bnNpZ25lZCBzaG9ydD4ob2Jq
QXJnc1Nob3J0TmF0aXZlVmFsdWUpOwogCiAgICAgdW5zaWduZWQgbG9uZyBvYmpBcmdzTG9uZyA9
IDA7Ci0gICAgZG91YmxlIG9iakFyZ3NMb25nTmF0aXZlVmFsdWUgPSBleGVjLT5hcmd1bWVudCgx
KS50b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIGRvdWJsZSBvYmpBcmdzTG9uZ05hdGl2ZVZhbHVlID0gc3RhdGUtPmFyZ3VtZW50KDEp
LnRvTnVtYmVyKHN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAg
IGlmICghc3RkOjppc25hbihvYmpBcmdzTG9uZ05hdGl2ZVZhbHVlKSkKQEAgLTQzMzUsNDczICs0
MzM1LDQ3MyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoQ2xhbXAoRXhlYwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVW5zaWduZWRMb25nU2VxdWVuY2Uo
RXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVbnNpZ25lZExvbmdTZXF1ZW5jZShFeGVjU3RhdGUq
IHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7Cisg
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBl
RXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm1ldGhvZFdpdGhVbnNpZ25lZExvbmdTZXF1ZW5jZSIp
OworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAi
bWV0aG9kV2l0aFVuc2lnbmVkTG9uZ1NlcXVlbmNlIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIFZlY3Rvcjx1bnNpZ25lZD4gdW5zaWduZWRM
b25nU2VxdWVuY2UgPSB0b05hdGl2ZUFycmF5PHVuc2lnbmVkPihleGVjLCBleGVjLT5hcmd1bWVu
dCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwor
ICAgIFZlY3Rvcjx1bnNpZ25lZD4gdW5zaWduZWRMb25nU2VxdWVuY2UgPSB0b05hdGl2ZUFycmF5
PHVuc2lnbmVkPihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhVbnNpZ25lZExvbmdTZXF1ZW5jZSh1
bnNpZ25lZExvbmdTZXF1ZW5jZSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblN0cmluZ0FycmF5RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQorRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblN0cmluZ0Fy
cmF5RnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNW
YWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAg
ICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJzdHJpbmdBcnJh
eUZ1bmN0aW9uIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAi
VGVzdE9iaiIsICJzdHJpbmdBcnJheUZ1bmN0aW9uIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgVmVjdG9yPFN0cmluZz4gdmFsdWVzID0gdG9OYXRpdmVBcnJheTxTdHJpbmc+KGV4
ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIFZlY3RvcjxTdHJpbmc+IHZhbHVlcyA9IHRvTmF0aXZlQXJyYXk8U3RyaW5n
PihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXkoZXhlYywgY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCksIGltcGwuc3RyaW5nQXJyYXlGdW5jdGlvbih2YWx1ZXMsIGVjKSk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc0FycmF5KHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSwgaW1wbC5zdHJpbmdBcnJheUZ1bmN0aW9uKHZhbHVlcywgZWMpKTsKIAotICAgIHNldERPTUV4
Y2VwdGlvbihleGVjLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRG9tU3RyaW5nTGlzdEZ1bmN0aW9u
KEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25Eb21TdHJpbmdMaXN0RnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSkK
IHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFs
dWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVk
VGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpl
eGVjLCAiVGVzdE9iaiIsICJkb21TdHJpbmdMaXN0RnVuY3Rpb24iKTsKKyAgICAgICAgcmV0dXJu
IHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImRvbVN0cmluZ0xpc3RGdW5j
dGlvbiIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0
T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAg
aWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsK
KyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihz
dGF0ZSkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFJlZlB0cjxET01TdHJpbmdM
aXN0PiB2YWx1ZXMgPSB0b0RPTVN0cmluZ0xpc3QoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwot
ICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgUmVmUHRyPERPTVN0
cmluZ0xpc3Q+IHZhbHVlcyA9IHRvRE9NU3RyaW5nTGlzdChzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50
KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBKU1ZhbHVlIHJlc3Vs
dCA9IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGlt
cGwuZG9tU3RyaW5nTGlzdEZ1bmN0aW9uKHZhbHVlcywgZWMpKSk7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIo
aW1wbC5kb21TdHJpbmdMaXN0RnVuY3Rpb24odmFsdWVzLCBlYykpKTsKIAotICAgIHNldERPTUV4
Y2VwdGlvbihleGVjLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEFuZFdpdGhvdXRO
dWxsYWJsZVNlcXVlbmNlKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQW5kV2l0aG91dE51bGxh
YmxlU2VxdWVuY2UoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNW
YWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAg
ICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJtZXRob2RXaXRo
QW5kV2l0aG91dE51bGxhYmxlU2VxdWVuY2UiKTsKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5
cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm1ldGhvZFdpdGhBbmRXaXRob3V0TnVsbGFibGVT
ZXF1ZW5jZSIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNU
ZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0g
ICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQotICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMp
KTsKLSAgICBWZWN0b3I8dW5zaWduZWQ+IGFycmF5QXJnID0gdG9OYXRpdmVBcnJheTx1bnNpZ25l
ZD4oZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAy
KSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAgICBWZWN0b3I8dW5zaWduZWQ+IGFycmF5QXJnID0gdG9O
YXRpdmVBcnJheTx1bnNpZ25lZD4oc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7CisgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgVmVjdG9yPHVuc2lnbmVkPiBudWxsYWJsZUFy
cmF5QXJnID0gdG9OYXRpdmVBcnJheTx1bnNpZ25lZD4oZXhlYywgZXhlYy0+YXJndW1lbnQoMSkp
OwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgVmVjdG9yPHVu
c2lnbmVkPiBudWxsYWJsZUFycmF5QXJnID0gdG9OYXRpdmVBcnJheTx1bnNpZ25lZD4oc3RhdGUs
IHN0YXRlLT5hcmd1bWVudCgxKSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgaW1wbC5tZXRob2RXaXRoQW5kV2l0aG91dE51bGxhYmxlU2VxdWVuY2UoYXJyYXlBcmcsIG51
bGxhYmxlQXJyYXlBcmcpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoQW5kV2l0aG91dE51bGxhYmxlU2VxdWVuY2UyKEV4ZWNTdGF0ZSog
ZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoQW5kV2l0aG91dE51bGxhYmxlU2VxdWVuY2UyKEV4ZWNTdGF0ZSogc3Rh
dGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7CiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJv
cigqZXhlYywgIlRlc3RPYmoiLCAibWV0aG9kV2l0aEFuZFdpdGhvdXROdWxsYWJsZVNlcXVlbmNl
MiIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoi
LCAibWV0aG9kV2l0aEFuZFdpdGhvdXROdWxsYWJsZVNlcXVlbmNlMiIpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA8IDIpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBWZWN0b3I8dW5zaWduZWQ+
IGFycmF5QXJnID0gdG9OYXRpdmVBcnJheTx1bnNpZ25lZD4oZXhlYywgZXhlYy0+YXJndW1lbnQo
MCkpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAyKSkKKyAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAg
ICBWZWN0b3I8dW5zaWduZWQ+IGFycmF5QXJnID0gdG9OYXRpdmVBcnJheTx1bnNpZ25lZD4oc3Rh
dGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
Ci0gICAgVmVjdG9yPHVuc2lnbmVkPiBudWxsYWJsZUFycmF5QXJnID0gdG9OYXRpdmVBcnJheTx1
bnNpZ25lZD4oZXhlYywgZXhlYy0+YXJndW1lbnQoMSkpOwotICAgIGlmIChVTkxJS0VMWShleGVj
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgVmVjdG9yPHVuc2lnbmVkPiBudWxsYWJsZUFycmF5QXJn
ID0gdG9OYXRpdmVBcnJheTx1bnNpZ25lZD4oc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgxKSk7Cisg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoQW5kV2l0
aG91dE51bGxhYmxlU2VxdWVuY2UyKGFycmF5QXJnLCBudWxsYWJsZUFycmF5QXJnKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uR2V0U1ZHRG9jdW1lbnQo
RXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkdldFNWR0RvY3VtZW50KEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRl
c3RPYmoiLCAiZ2V0U1ZHRG9jdW1lbnQiKTsKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVF
cnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImdldFNWR0RvY3VtZW50Iik7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
LSAgICBpZiAoIXNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKGV4ZWMsIGltcGwuZ2V0U1ZHRG9jdW1l
bnQoZWMpKSkKKyAgICBpZiAoIXNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKHN0YXRlLCBpbXBsLmdl
dFNWR0RvY3VtZW50KGVjKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxs
KCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC5nZXRTVkdEb2N1bWVudChlYykpKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6
OmdldFB0cihpbXBsLmdldFNWR0RvY3VtZW50KGVjKSkpOwogCi0gICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0MShFeGVjU3RhdGUqIGV4ZWMpCitF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29u
dmVydDEoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMt
PnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgp
OwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4o
dGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1
cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJjb252ZXJ0MSIpOworICAg
ICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiY29udmVy
dDEiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9i
ajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGlm
IChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0g
ICAgVGVzdE5vZGUqIHZhbHVlID0gSlNUZXN0Tm9kZTo6dG9XcmFwcGVkKGV4ZWMtPmFyZ3VtZW50
KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Cisg
ICAgVGVzdE5vZGUqIHZhbHVlID0gSlNUZXN0Tm9kZTo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVu
dCgwKSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5jb252ZXJ0
MSh2YWx1ZSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkNvbnZlcnQyKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0MihFeGVjU3RhdGUqIHN0YXRlKQogewot
ICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0
aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMs
ICJUZXN0T2JqIiwgImNvbnZlcnQyIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJy
b3IoKnN0YXRlLCAiVGVzdE9iaiIsICJjb252ZXJ0MiIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291
bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBUZXN0Tm9kZSogdmFsdWUgPSBKU1Rlc3RO
b2RlOjp0b1dyYXBwZWQoZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShleGVj
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAgICBUZXN0Tm9kZSogdmFsdWUgPSBKU1Rlc3RO
b2RlOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBpbXBsLmNvbnZlcnQyKHZhbHVlKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDQoRXhlY1N0YXRlKiBleGVjKQor
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNv
bnZlcnQ0KEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVj
LT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUo
KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+
KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0
dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAiY29udmVydDQiKTsKKyAg
ICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImNvbnZl
cnQ0Iik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RP
Ymo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBp
ZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwot
ICAgIFRlc3ROb2RlKiB2YWx1ZSA9IEpTVGVzdE5vZGU6OnRvV3JhcHBlZChleGVjLT5hcmd1bWVu
dCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwor
ICAgIFRlc3ROb2RlKiB2YWx1ZSA9IEpTVGVzdE5vZGU6OnRvV3JhcHBlZChzdGF0ZS0+YXJndW1l
bnQoMCkpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuY29udmVy
dDQodmFsdWUpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25Db252ZXJ0NShFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDUoRXhlY1N0YXRlKiBzdGF0ZSkKIHsK
LSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVj
LCAiVGVzdE9iaiIsICJjb252ZXJ0NSIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVy
cm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiY29udmVydDUiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgVGVzdE5vZGUqIHZhbHVlID0gSlNUZXN0
Tm9kZTo6dG9XcmFwcGVkKGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CisgICAgVGVzdE5vZGUqIHZhbHVlID0gSlNUZXN0
Tm9kZTo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgwKSk7CisgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgaW1wbC5jb252ZXJ0NSh2YWx1ZSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk11dGFibGVQb2ludEZ1bmN0aW9uKEV4ZWNT
dGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NdXRhYmxlUG9pbnRGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlKQogewotICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJU
ZXN0T2JqIiwgIm11dGFibGVQb2ludEZ1bmN0aW9uIik7CisgICAgICAgIHJldHVybiB0aHJvd1Ro
aXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJtdXRhYmxlUG9pbnRGdW5jdGlvbiIpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZv
KCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgSlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0
cihTVkdQcm9wZXJ0eVRlYXJPZmY8U1ZHUG9pbnQ+OjpjcmVhdGUoaW1wbC5tdXRhYmxlUG9pbnRG
dW5jdGlvbigpKSkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKFNWR1Byb3BlcnR5VGVhck9mZjxTVkdQb2lu
dD46OmNyZWF0ZShpbXBsLm11dGFibGVQb2ludEZ1bmN0aW9uKCkpKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uSW1tdXRhYmxlUG9pbnRGdW5jdGlvbihFeGVjU3Rh
dGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uSW1tdXRhYmxlUG9pbnRGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlKQogewotICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJU
ZXN0T2JqIiwgImltbXV0YWJsZVBvaW50RnVuY3Rpb24iKTsKKyAgICAgICAgcmV0dXJuIHRocm93
VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImltbXV0YWJsZVBvaW50RnVuY3Rpb24i
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6
aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpn
ZXRQdHIoU1ZHUHJvcGVydHlUZWFyT2ZmPFNWR1BvaW50Pjo6Y3JlYXRlKGltcGwuaW1tdXRhYmxl
UG9pbnRGdW5jdGlvbigpKSkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2Fz
dGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKFNWR1Byb3BlcnR5VGVhck9mZjxT
VkdQb2ludD46OmNyZWF0ZShpbXBsLmltbXV0YWJsZVBvaW50RnVuY3Rpb24oKSkpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcmFuZ2UoRXhlY1N0YXRlKiBleGVj
KQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk9yYW5nZShFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhl
Yy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVl
KCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoq
Pih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJl
dHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm9yYW5nZSIpOworICAg
ICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAib3Jhbmdl
Iik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6
OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBpbXBs
LmJhbmFuYSgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25TdHJpY3RGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU3RyaWN0RnVuY3Rpb24oRXhlY1N0YXRl
KiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwor
ICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlw
ZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJzdHJpY3RGdW5jdGlvbiIpOworICAgICAgICByZXR1
cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAic3RyaWN0RnVuY3Rpb24i
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6
aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGlmIChV
TkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50KCkgPCAzKSkKLSAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAzKSkKKyAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUp
KTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBTdHJpbmcgc3RyID0gZXhlYy0+YXJn
dW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShl
eGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgU3RyaW5nIHN0ciA9IHN0YXRlLT5hcmd1bWVudCgw
KS50b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKLSAgICBmbG9hdCBhID0gZXhlYy0+YXJndW1lbnQoMSkudG9GbG9hdChleGVjKTsK
LSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGZsb2F0IGEgPSBz
dGF0ZS0+YXJndW1lbnQoMSkudG9GbG9hdChzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7Ci0gICAgaW50IGIgPSB0b0ludDMyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIpLCBO
b3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIGludCBiID0gdG9JbnQzMihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDIpLCBOb3JtYWxD
b252ZXJzaW9uKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0
UHRyKGltcGwuc3RyaWN0RnVuY3Rpb24oc3RyLCBhLCBiLCBlYykpKTsKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0
cihpbXBsLnN0cmljdEZ1bmN0aW9uKHN0ciwgYSwgYiwgZWMpKSk7CiAKLSAgICBzZXRET01FeGNl
cHRpb24oZXhlYywgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblN0cmljdEZ1bmN0aW9uV2l0aFNlcXVl
bmNlKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25TdHJpY3RGdW5jdGlvbldpdGhTZXF1ZW5jZShFeGVjU3RhdGUq
IHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7Cisg
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBl
RXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInN0cmljdEZ1bmN0aW9uV2l0aFNlcXVlbmNlIik7Cisg
ICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJzdHJp
Y3RGdW5jdGlvbldpdGhTZXF1ZW5jZSIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
Y2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT5pbXBsKCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIp
KQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQo
KSA8IDIpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
IGlmICghZXhlYy0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSAmJiAhZXhlYy0+YXJn
dW1lbnQoMCkuaW5oZXJpdHMoSlNUZXN0T2JqOjppbmZvKCkpKQotICAgICAgICByZXR1cm4gdGhy
b3dBcmd1bWVudFR5cGVFcnJvcigqZXhlYywgMCwgIm9iakFyZyIsICJUZXN0T2JqIiwgInN0cmlj
dEZ1bmN0aW9uV2l0aFNlcXVlbmNlIiwgIlRlc3RPYmoiKTsKLSAgICBUZXN0T2JqKiBvYmpBcmcg
PSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElL
RUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoIXN0YXRlLT5hcmd1bWVudCgwKS5p
c1VuZGVmaW5lZE9yTnVsbCgpICYmICFzdGF0ZS0+YXJndW1lbnQoMCkuaW5oZXJpdHMoSlNUZXN0
T2JqOjppbmZvKCkpKQorICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJvcigqc3Rh
dGUsIDAsICJvYmpBcmciLCAiVGVzdE9iaiIsICJzdHJpY3RGdW5jdGlvbldpdGhTZXF1ZW5jZSIs
ICJUZXN0T2JqIik7CisgICAgVGVzdE9iaiogb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQo
c3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAg
ICBWZWN0b3I8dW5zaWduZWQ+IGEgPSB0b05hdGl2ZUFycmF5PHVuc2lnbmVkPihleGVjLCBleGVj
LT5hcmd1bWVudCgxKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBWZWN0b3I8dW5zaWduZWQ+IGEgPSB0b05hdGl2ZUFycmF5PHVuc2lnbmVkPihzdGF0ZSwg
c3RhdGUtPmFyZ3VtZW50KDEpKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IFdURjo6Z2V0UHRyKGltcGwuc3RyaWN0RnVuY3Rpb25XaXRoU2VxdWVuY2Uob2JqQXJnLCBhLCBl
YykpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLnN0cmljdEZ1bmN0aW9uV2l0aFNlcXVlbmNlKG9i
akFyZywgYSwgZWMpKSk7CiAKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHNl
dERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblN0cmljdEZ1bmN0aW9uV2l0aEFycmF5KEV4ZWNTdGF0ZSogZXhlYykKK0VuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TdHJpY3RG
dW5jdGlvbldpdGhBcnJheShFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+
dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0g
ICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInN0cmlj
dEZ1bmN0aW9uV2l0aEFycmF5Iik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3Io
KnN0YXRlLCAiVGVzdE9iaiIsICJzdHJpY3RGdW5jdGlvbldpdGhBcnJheSIpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA8IDIpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwotICAgIGlmICghZXhlYy0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWRP
ck51bGwoKSAmJiAhZXhlYy0+YXJndW1lbnQoMCkuaW5oZXJpdHMoSlNUZXN0T2JqOjppbmZvKCkp
KQotICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJvcigqZXhlYywgMCwgIm9iakFy
ZyIsICJUZXN0T2JqIiwgInN0cmljdEZ1bmN0aW9uV2l0aEFycmF5IiwgIlRlc3RPYmoiKTsKLSAg
ICBUZXN0T2JqKiBvYmpBcmcgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChleGVjLT5hcmd1bWVudCgw
KSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoIXN0
YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpICYmICFzdGF0ZS0+YXJndW1lbnQo
MCkuaW5oZXJpdHMoSlNUZXN0T2JqOjppbmZvKCkpKQorICAgICAgICByZXR1cm4gdGhyb3dBcmd1
bWVudFR5cGVFcnJvcigqc3RhdGUsIDAsICJvYmpBcmciLCAiVGVzdE9iaiIsICJzdHJpY3RGdW5j
dGlvbldpdGhBcnJheSIsICJUZXN0T2JqIik7CisgICAgVGVzdE9iaiogb2JqQXJnID0gSlNUZXN0
T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKLSAgICBWZWN0b3I8aW50PiBhcnJheSA9IHRvTmF0aXZlQXJyYXk8aW50Pihl
eGVjLCBleGVjLT5hcmd1bWVudCgxKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBWZWN0b3I8aW50PiBhcnJheSA9IHRvTmF0aXZlQXJyYXk8aW50PihzdGF0
ZSwgc3RhdGUtPmFyZ3VtZW50KDEpKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
LSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCksIFdURjo6Z2V0UHRyKGltcGwuc3RyaWN0RnVuY3Rpb25XaXRoQXJyYXkob2JqQXJnLCBhcnJh
eSwgZWMpKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC5zdHJpY3RGdW5jdGlvbldpdGhBcnJheShv
YmpBcmcsIGFycmF5LCBlYykpKTsKIAotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Cisg
ICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNTdHJpbmdNZXRob2QoRXhlY1N0YXRlKiBleGVjKQorRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlh
ZGljU3RyaW5nTWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50
aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdE9iaio+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAg
ICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAidmFyaWFk
aWNTdHJpbmdNZXRob2QiKTsKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3Rh
dGUsICJUZXN0T2JqIiwgInZhcmlhZGljU3RyaW5nTWV0aG9kIik7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIFN0cmluZyBoZWFkID0gZXhlYy0+
YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VM
WShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAgICBTdHJpbmcgaGVhZCA9IHN0YXRl
LT5hcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRlKTsKKyAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBWZWN0b3I8U3RyaW5nPiB0YWlsID0gdG9OYXRpdmVB
cmd1bWVudHM8U3RyaW5nPihleGVjLCAxKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgIFZlY3RvcjxTdHJpbmc+IHRhaWwgPSB0b05hdGl2ZUFyZ3VtZW50czxT
dHJpbmc+KHN0YXRlLCAxKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBp
bXBsLnZhcmlhZGljU3RyaW5nTWV0aG9kKGhlYWQsIHRhaWwpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY0RvdWJsZU1ldGhvZChFeGVjU3Rh
dGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uVmFyaWFkaWNEb3VibGVNZXRob2QoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVz
dE9iaiIsICJ2YXJpYWRpY0RvdWJsZU1ldGhvZCIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlz
VHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAidmFyaWFkaWNEb3VibGVNZXRob2QiKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygp
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGlmIChVTkxJS0VM
WShleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgZG91Ymxl
IGhlYWQgPSBleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtF
TFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CisgICAgZG91YmxlIGhlYWQgPSBzdGF0
ZS0+YXJndW1lbnQoMCkudG9OdW1iZXIoc3RhdGUpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwotICAgIFZlY3Rvcjxkb3VibGU+IHRhaWwgPSB0b05hdGl2ZUFyZ3VtZW50czxkb3Vi
bGU+KGV4ZWMsIDEpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgVmVjdG9yPGRvdWJsZT4gdGFpbCA9IHRvTmF0aXZlQXJndW1lbnRzPGRvdWJsZT4oc3RhdGUs
IDEpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwudmFyaWFkaWNE
b3VibGVNZXRob2QoaGVhZCwgdGFpbCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblZhcmlhZGljTm9kZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMpCitFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFk
aWNOb2RlTWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlz
VmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dE9iaio+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAg
ICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAidmFyaWFkaWNO
b2RlTWV0aG9kIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAi
VGVzdE9iaiIsICJ2YXJpYWRpY05vZGVNZXRob2QiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgTm9kZSogaGVhZCA9IEpTTm9kZTo6dG9XcmFw
cGVkKGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKHN0YXRlKSk7CisgICAgTm9kZSogaGVhZCA9IEpTTm9kZTo6dG9XcmFwcGVkKHN0YXRl
LT5hcmd1bWVudCgwKSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgVmVj
dG9yPE5vZGUqPiB0YWlsOwotICAgIGZvciAodW5zaWduZWQgaSA9IDEsIGNvdW50ID0gZXhlYy0+
YXJndW1lbnRDb3VudCgpOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBpZiAoIWV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KGkpLmluaGVyaXRzKEpTTm9kZTo6aW5mbygpKSkKLSAgICAgICAgICAg
IHJldHVybiB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKCpleGVjLCBpLCAidGFpbCIsICJUZXN0T2Jq
IiwgInZhcmlhZGljTm9kZU1ldGhvZCIsICJOb2RlIik7Ci0gICAgICAgIHRhaWwuYXBwZW5kKEpT
Tm9kZTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpKSk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMSwgY291bnQgPSBzdGF0ZS0+YXJndW1lbnRDb3VudCgpOyBpIDwgY291bnQ7
ICsraSkgeworICAgICAgICBpZiAoIXN0YXRlLT51bmNoZWNrZWRBcmd1bWVudChpKS5pbmhlcml0
cyhKU05vZGU6OmluZm8oKSkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVF
cnJvcigqc3RhdGUsIGksICJ0YWlsIiwgIlRlc3RPYmoiLCAidmFyaWFkaWNOb2RlTWV0aG9kIiwg
Ik5vZGUiKTsKKyAgICAgICAgdGFpbC5hcHBlbmQoSlNOb2RlOjp0b1dyYXBwZWQoc3RhdGUtPnVu
Y2hlY2tlZEFyZ3VtZW50KGkpKSk7CiAgICAgfQogICAgIGltcGwudmFyaWFkaWNOb2RlTWV0aG9k
KGhlYWQsIHRhaWwpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25BbnkoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkFueShFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0
T2JqIiwgImFueSIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwg
IlRlc3RPYmoiLCAiYW55Iik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRU
aGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmlt
cGwoKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMikpCi0gICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IoZXhlYykpOwotICAgIGZsb2F0IGEgPSBleGVjLT5hcmd1bWVudCgwKS50b0Zsb2F0KGV4ZWMp
OwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAyKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAgICBm
bG9hdCBhID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvRmxvYXQoc3RhdGUpOworICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGludCBiID0gdG9JbnQzMihleGVjLCBleGVjLT5hcmd1
bWVudCgxKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpbnQgYiA9IHRvSW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgx
KSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgaW1wbC5hbnkoYSwgYik7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIH0KIAogc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25Qcm9taXNlKEV4ZWNTdGF0ZSosIEpTUHJvbWlz
ZURlZmVycmVkKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21p
c2VGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoY2FsbFByb21pc2VGdW5jdGlvbigqZXhlYywganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25U
ZXN0UHJvbWlzZUZ1bmN0aW9uUHJvbWlzZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
Y2FsbFByb21pc2VGdW5jdGlvbigqc3RhdGUsIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVz
dFByb21pc2VGdW5jdGlvblByb21pc2UpKTsKIH0KIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25Qcm9taXNl
KEV4ZWNTdGF0ZSogZXhlYywgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCkKK3N0
YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0
UHJvbWlzZUZ1bmN0aW9uUHJvbWlzZShFeGVjU3RhdGUqIHN0YXRlLCBKU1Byb21pc2VEZWZlcnJl
ZCogcHJvbWlzZURlZmVycmVkKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhp
c1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAg
ICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlz
VmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0
aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInRlc3RQcm9taXNlRnVuY3Rpb24i
KTsKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwg
InRlc3RQcm9taXNlRnVuY3Rpb24iKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNh
c3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+aW1wbCgpOwotICAgIGltcGwudGVzdFByb21pc2VGdW5jdGlvbihEZWZlcnJlZFdyYXBwZXIo
ZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCkpOworICAg
IGltcGwudGVzdFByb21pc2VGdW5jdGlvbihEZWZlcnJlZFdyYXBwZXIoc3RhdGUsIGNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCiBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhGbG9h
dEFyZ3VtZW50UHJvbWlzZShFeGVjU3RhdGUqLCBKU1Byb21pc2VEZWZlcnJlZCopOwotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9t
aXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1bWVudChFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VG
dW5jdGlvbldpdGhGbG9hdEFyZ3VtZW50KEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShjYWxsUHJvbWlzZUZ1bmN0aW9uKCpleGVjLCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1bWVudFByb21pc2Up
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGxQcm9taXNlRnVuY3Rpb24oKnN0YXRl
LCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRmxvYXRB
cmd1bWVudFByb21pc2UpKTsKIH0KIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1bWVu
dFByb21pc2UoRXhlY1N0YXRlKiBleGVjLCBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVy
cmVkKQorc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1bWVudFByb21pc2UoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCkKIHsKLSAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVl
ID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE9i
aiIsICJ0ZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEZsb2F0QXJndW1lbnQiKTsKKyAgICAgICAgcmV0
dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInRlc3RQcm9taXNlRnVu
Y3Rpb25XaXRoRmxvYXRBcmd1bWVudCIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
Y2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT5pbXBsKCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBmbG9hdCBhID0gZXhlYy0+YXJndW1lbnQoMCkudG9GbG9h
dChleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7
CisgICAgZmxvYXQgYSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b0Zsb2F0KHN0YXRlKTsKKyAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUoYSkpIHsK
LSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFR5cGVFcnJvcik7CisgICAgICAgIHNldERP
TUV4Y2VwdGlvbihzdGF0ZSwgVHlwZUVycm9yKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9Ci0gICAgaW1wbC50ZXN0UHJvbWlzZUZ1bmN0aW9u
V2l0aEZsb2F0QXJndW1lbnQoYSwgRGVmZXJyZWRXcmFwcGVyKGV4ZWMsIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpKTsKKyAgICBpbXBsLnRlc3RQcm9taXNlRnVu
Y3Rpb25XaXRoRmxvYXRBcmd1bWVudChhLCBEZWZlcnJlZFdyYXBwZXIoc3RhdGUsIGNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCiBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhFeGNl
cHRpb25Qcm9taXNlKEV4ZWNTdGF0ZSosIEpTUHJvbWlzZURlZmVycmVkKik7Ci1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VG
dW5jdGlvbldpdGhFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25X
aXRoRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShjYWxsUHJvbWlzZUZ1bmN0aW9uKCpleGVjLCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
blRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uUHJvbWlzZSkpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoY2FsbFByb21pc2VGdW5jdGlvbigqc3RhdGUsIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb25Qcm9taXNlKSk7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvblByb21pc2UoRXhlY1N0YXRlKiBleGVj
LCBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkKQorc3RhdGljIGlubGluZSBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25X
aXRoRXhjZXB0aW9uUHJvbWlzZShFeGVjU3RhdGUqIHN0YXRlLCBKU1Byb21pc2VEZWZlcnJlZCog
cHJvbWlzZURlZmVycmVkKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1Zh
bHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFs
dWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJv
d1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInRlc3RQcm9taXNlRnVuY3Rpb25XaXRo
RXhjZXB0aW9uIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAi
VGVzdE9iaiIsICJ0ZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvbiIpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgaW1wbC50ZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvbihEZWZlcnJlZFdy
YXBwZXIoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCks
IGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIGltcGwudGVzdFByb21p
c2VGdW5jdGlvbldpdGhFeGNlcHRpb24oRGVmZXJyZWRXcmFwcGVyKHN0YXRlLCBjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKSwgZWMpOworICAgIHNldERPTUV4Y2Vw
dGlvbihzdGF0ZSwgZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50QXJndW1lbnRQcm9taXNl
KEV4ZWNTdGF0ZSosIEpTUHJvbWlzZURlZmVycmVkKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhP
cHRpb25hbEludEFyZ3VtZW50KEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0
aE9wdGlvbmFsSW50QXJndW1lbnQoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGNhbGxQcm9taXNlRnVuY3Rpb24oKmV4ZWMsIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRpb25hbEludEFyZ3VtZW50UHJvbWlz
ZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbFByb21pc2VGdW5jdGlvbigqc3Rh
dGUsIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRp
b25hbEludEFyZ3VtZW50UHJvbWlzZSkpOwogfQogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRp
b25hbEludEFyZ3VtZW50UHJvbWlzZShFeGVjU3RhdGUqIGV4ZWMsIEpTUHJvbWlzZURlZmVycmVk
KiBwcm9taXNlRGVmZXJyZWQpCitzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRpb25hbEludEFyZ3Vt
ZW50UHJvbWlzZShFeGVjU3RhdGUqIHN0YXRlLCBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURl
ZmVycmVkKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7Cisg
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBl
RXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInRlc3RQcm9taXNlRnVuY3Rpb25XaXRoT3B0aW9uYWxJ
bnRBcmd1bWVudCIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwg
IlRlc3RPYmoiLCAidGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRpb25hbEludEFyZ3VtZW50Iik7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6Omlu
Zm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKIAotICAgIHNpemVf
dCBhcmdzQ291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7CisgICAgc2l6ZV90IGFyZ3NDb3Vu
dCA9IHN0YXRlLT5hcmd1bWVudENvdW50KCk7CiAgICAgaWYgKGFyZ3NDb3VudCA8PSAwKSB7Ci0g
ICAgICAgIGltcGwudGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRpb25hbEludEFyZ3VtZW50KERl
ZmVycmVkV3JhcHBlcihleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgcHJvbWlzZURl
ZmVycmVkKSk7CisgICAgICAgIGltcGwudGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRpb25hbElu
dEFyZ3VtZW50KERlZmVycmVkV3JhcHBlcihzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCksIHByb21pc2VEZWZlcnJlZCkpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIH0KIAotICAgIGludCBhID0gdG9JbnQzMihleGVjLCBleGVjLT5h
cmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpbnQgYSA9IHRvSW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1bWVu
dCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
Ci0gICAgaW1wbC50ZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50QXJndW1lbnQoYSwg
RGVmZXJyZWRXcmFwcGVyKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBwcm9taXNl
RGVmZXJyZWQpKTsKKyAgICBpbXBsLnRlc3RQcm9taXNlRnVuY3Rpb25XaXRoT3B0aW9uYWxJbnRB
cmd1bWVudChhLCBEZWZlcnJlZFdyYXBwZXIoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpLCBwcm9taXNlRGVmZXJyZWQpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T2JqLmgKaW5kZXggMGJjN2ZjNmExMmJiZDI4NDU3Yzg2YWVjNDljM2Rk
ZWZlMDYzMTQwMC4uMzU0NjMxMWI0YjVmZGZkMWJlODgwNzJlYTJkOTZiYmJmZmY2ODRlOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9i
ai5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
YmouaApAQCAtOTYsNyArOTYsNyBAQCBpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBw
ZXJPd25lcihET01XcmFwcGVyV29ybGQmLCBUZXN0T2JqKikKIH0KIAogSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RPYmoqKTsKLWlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgVGVzdE9iaiYgaW1wbCkgeyByZXR1cm4gdG9KUyhleGVjLCBnbG9i
YWxPYmplY3QsICZpbXBsKTsgfQoraW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE9iaiYgaW1w
bCkgeyByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAmaW1wbCk7IH0KIEpTQzo6SlNW
YWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3Qq
LCBUZXN0T2JqKik7CiAKIC8vIEZ1bmN0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnMuY3BwCmluZGV4IGQzOTkwMzZiYzQxYWVlNzY4MWQ3NzVkYmFkYTdhNjhj
NDc4NjQ3NDIuLjM4YzNmN2RmYWY3MmIzNGQ1YzEzNjZmNDc0NDdjYjI0NjE5NWExZjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAKQEAgLTkwLDgxICs5
MCw4MSBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25z
dHJ1Y3REYXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpDb25zdHJ1Y3REYXRhJik7CiB9OwogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25z
dHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczEoRXhlY1N0YXRl
KiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnMxKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSk7
Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4
ZWMpKTsKLSAgICBBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIgPSB0b0FycmF5QnVmZmVyKGV4ZWMt
PmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
c0NvbnN0cnVjdG9yKj4oc3RhdGUtPmNhbGxlZSgpKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOworICAgIEFycmF5QnVmZmVy
KiBhcnJheUJ1ZmZlciA9IHRvQXJyYXlCdWZmZXIoc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBSZWZQdHI8VGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnM+IG9iamVjdCA9IFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpjcmVhdGUoYXJy
YXlCdWZmZXIpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhleGVj
LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgb2JqZWN0LmdldCgpKSkpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFs
T2JqZWN0KCksIG9iamVjdC5nZXQoKSkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMyKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9y
Ojpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMihFeGVjU3RhdGUqIHN0YXRl
KQogewotICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yc0NvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOwotICAgIGlmIChVTkxJS0VMWShl
eGVjLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgUmVmUHRyPEFy
cmF5QnVmZmVyVmlldz4gYXJyYXlCdWZmZXJWaWV3ID0gdG9BcnJheUJ1ZmZlclZpZXcoZXhlYy0+
YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
Q29uc3RydWN0b3IqPihzdGF0ZS0+Y2FsbGVlKCkpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CisgICAgUmVmUHRyPEFycmF5
QnVmZmVyVmlldz4gYXJyYXlCdWZmZXJWaWV3ID0gdG9BcnJheUJ1ZmZlclZpZXcoc3RhdGUtPmFy
Z3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBSZWZQdHI8
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+IG9iamVjdCA9IFRlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzOjpjcmVhdGUoYXJyYXlCdWZmZXJWaWV3KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGFzT2JqZWN0KHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIG9iamVj
dC5nZXQoKSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzT2JqZWN0KHRvSlMoc3Rh
dGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBvYmplY3QuZ2V0KCkpKSk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0Nv
bnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMyhFeGVjU3Rh
dGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yczMoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0
PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgp
KTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
ZXhlYykpOwotICAgIEJsb2IqIGJsb2IgPSBKU0Jsb2I6OnRvV3JhcHBlZChleGVjLT5hcmd1bWVu
dCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBhdXRv
KiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1
Y3Rvcio+KHN0YXRlLT5jYWxsZWUoKSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAgICBCbG9iKiBibG9iID0gSlNCbG9i
Ojp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBSZWZQdHI8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+IG9iamVjdCA9
IFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpjcmVhdGUoYmxvYik7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpLCBvYmplY3QuZ2V0KCkpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVj
dCh0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgb2JqZWN0LmdldCgpKSkp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
czQoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnM0KEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgYXV0byogY2FzdGVkVGhp
cyA9IGpzQ2FzdDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IqPihleGVj
LT5jYWxsZWUoKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBTdHJpbmcgc3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCku
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IqPihzdGF0ZS0+Y2FsbGVlKCkpOworICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Cisg
ICAgU3RyaW5nIHN0cmluZyA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnZh
bHVlKHN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBSZWZQdHI8
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+IG9iamVjdCA9IFRlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzOjpjcmVhdGUoc3RyaW5nKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzT2Jq
ZWN0KHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIG9iamVjdC5nZXQoKSkp
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzT2JqZWN0KHRvSlMoc3RhdGUsIGNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBvYmplY3QuZ2V0KCkpKSk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9y
Ojpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzNShFeGVjU3RhdGUqIGV4ZWMp
CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnNDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczUoRXhl
Y1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKLSAgICBW
ZWN0b3I8aW50PiBsb25nQXJncyA9IHRvTmF0aXZlQXJndW1lbnRzPGludD4oZXhlYywgMCk7Ci0g
ICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBhdXRvKiBjYXN0ZWRU
aGlzID0ganNDYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcio+KHN0
YXRlLT5jYWxsZWUoKSk7CisgICAgVmVjdG9yPGludD4gbG9uZ0FyZ3MgPSB0b05hdGl2ZUFyZ3Vt
ZW50czxpbnQ+KHN0YXRlLCAwKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBSZWZQdHI8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+IG9iamVjdCA9IFRlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzOjpjcmVhdGUobG9uZ0FyZ3MpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgb2Jq
ZWN0LmdldCgpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhz
dGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIG9iamVjdC5nZXQoKSkpKTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
Q29uc3RydWN0b3I6OmNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMoRXhlY1N0
YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnMoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RkOjpt
aW48c2l6ZV90PigxLCBleGVjLT5hcmd1bWVudENvdW50KCkpOwotICAgIEpTVmFsdWUgYXJnMChl
eGVjLT5hcmd1bWVudCgwKSk7CisgICAgc2l6ZV90IGFyZ3NDb3VudCA9IHN0ZDo6bWluPHNpemVf
dD4oMSwgc3RhdGUtPmFyZ3VtZW50Q291bnQoKSk7CisgICAgSlNWYWx1ZSBhcmcwKHN0YXRlLT5h
cmd1bWVudCgwKSk7CiAgICAgaWYgKChhcmdzQ291bnQgPT0gMSAmJiAoKGFyZzAuaXNPYmplY3Qo
KSAmJiBhc09iamVjdChhcmcwKS0+aW5oZXJpdHMoSlNBcnJheUJ1ZmZlcjo6aW5mbygpKSkpKSkK
LSAgICAgICAgcmV0dXJuIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6
Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczEoZXhlYyk7CisgICAgICAgIHJl
dHVybiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMxKHN0YXRlKTsKICAgICBpZiAoKGFyZ3NDb3VudCA9
PSAxICYmICgoYXJnMC5pc09iamVjdCgpICYmIGFzT2JqZWN0KGFyZzApLT5pbmhlcml0cyhKU0Fy
cmF5QnVmZmVyVmlldzo6aW5mbygpKSkpKSkKLSAgICAgICAgcmV0dXJuIEpTVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yczIoZXhlYyk7CisgICAgICAgIHJldHVybiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMyKHN0
YXRlKTsKICAgICBpZiAoKGFyZ3NDb3VudCA9PSAxICYmICgoYXJnMC5pc09iamVjdCgpICYmIGFz
T2JqZWN0KGFyZzApLT5pbmhlcml0cyhKU0Jsb2I6OmluZm8oKSkpKSkpCi0gICAgICAgIHJldHVy
biBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMzKGV4ZWMpOworICAgICAgICByZXR1cm4gSlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzMyhzdGF0ZSk7CiAgICAgaWYgKGFyZ3NDb3VudCA9PSAxKQotICAgICAgICBy
ZXR1cm4gSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3RK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzNChleGVjKTsKKyAgICAgICAgcmV0dXJuIEpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yczQoc3RhdGUpOwogICAgIGlmICgpCi0gICAgICAgIHJldHVybiBKU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnM1KGV4ZWMpOworICAgICAgICByZXR1cm4gSlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzNShzdGF0ZSk7CiAgICAgaWYgKGFyZ3NDb3VudCA8IDEpCi0gICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwot
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOworICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlKTsKIH0KIAogY29uc3QgQ2xhc3NJbmZvIEpT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKSB9
OwpAQCAtMjMzLDEyICsyMzMsMTIgQEAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6fkpT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMoKQogICAgIHJlbGVhc2VJbXBsKCk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJv
dG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnNQcm90b3R5cGUqPihiYXNlVmFsdWUpOwogICAgIGlmICghZG9tT2JqZWN0KQotICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmdldENvbnN0cnVjdG9yKGV4ZWMtPnZt
KCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3Ioc3RhdGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yczo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+
Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAogSlNWYWx1ZSBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaAppbmRleCBjYjM3OGRk
NTc5OTQyODA5M2YxZmZiZTJkMDg3ZmVmMjI3YjAxZDY4Li5mZmFmMWZiNGY4YjdhOTE4OTQ5ZmQw
ZTg3NTkyOWM0ZjQ3ZTU5YWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzLmgKQEAgLTgwLDcgKzgwLDcgQEAgaW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3
cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiwgVGVzdE92ZXJsb2FkZWRDb25zdHIKIH0KIAog
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKik7Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzJiBpbXBsKSB7IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCwgJmltcGwpOyB9CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9ycyYgaW1wbCkgeyByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAmaW1w
bCk7IH0KIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNE
T01HbG9iYWxPYmplY3QqLCBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyopOwogCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVy
cmlkZUJ1aWx0aW5zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmNwcAppbmRleCA1OTMyZjIwZWFlZDdmNWU5ODQxZDVm
ZWI5NWJiMWI4ODQ4NGI4NTlhLi44NWYwNmEwZTNhYjhjOTlhNDc3MDI0YzZhYzYyMzk5MDk3NTc3
YzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuY3BwCkBAIC0xNjIsNDMgKzE2
Miw0MyBAQCBKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zOjp+SlNUZXN0T3ZlcnJpZGVCdWlsdGlucygp
CiAgICAgcmVsZWFzZUltcGwoKTsKIH0KIAotYm9vbCBKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTVGVzdE92
ZXJyaWRlQnVpbHRpbnM6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RPdmVycmlkZUJ1aWx0
aW5zKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CiAgICAgaWYgKHRoaXNPYmplY3QtPmNsYXNzSW5mbygpID09IGluZm8oKSkgewog
ICAgICAgICBKU1ZhbHVlIHZhbHVlOwotICAgICAgICBpZiAodGhpc09iamVjdC0+bmFtZUdldHRl
cihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKSkgeworICAgICAgICBpZiAodGhpc09iamVjdC0+
bmFtZUdldHRlcihzdGF0ZSwgcHJvcGVydHlOYW1lLCB2YWx1ZSkpIHsKICAgICAgICAgICAgIHNs
b3Quc2V0VmFsdWUodGhpc09iamVjdCwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0s
IHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQotICAg
IGlmIChnZXRTdGF0aWNWYWx1ZVNsb3Q8SlNUZXN0T3ZlcnJpZGVCdWlsdGlucywgQmFzZT4oZXhl
YywgSlNUZXN0T3ZlcnJpZGVCdWlsdGluc1RhYmxlLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IHNsb3QpKQorICAgIGlmIChnZXRTdGF0aWNWYWx1ZVNsb3Q8SlNUZXN0T3ZlcnJpZGVCdWlsdGlu
cywgQmFzZT4oc3RhdGUsIEpTVGVzdE92ZXJyaWRlQnVpbHRpbnNUYWJsZSwgdGhpc09iamVjdCwg
cHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1ib29sIEpTVGVzdE92ZXJyaWRlQnVpbHRpbnM6OmdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRl
eCwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zOjpnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUs
IHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zKj4ob2JqZWN0KTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgSWRlbnRpZmll
ciBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KTsKKyAgICBJZGVu
dGlmaWVyIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKICAg
ICBpZiAodGhpc09iamVjdC0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKSB7CiAgICAgICAgIEpTVmFs
dWUgdmFsdWU7Ci0gICAgICAgIGlmICh0aGlzT2JqZWN0LT5uYW1lR2V0dGVyKGV4ZWMsIHByb3Bl
cnR5TmFtZSwgdmFsdWUpKSB7CisgICAgICAgIGlmICh0aGlzT2JqZWN0LT5uYW1lR2V0dGVyKHN0
YXRlLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKSkgewogICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0
aGlzT2JqZWN0LCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSwgdmFsdWUpOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIEJhc2U6
OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaW5kZXgsIHNsb3Qp
OworICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXNPYmplY3Qs
IHN0YXRlLCBpbmRleCwgc2xvdCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE92ZXJyaWRl
QnVpbHRpbnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPdmVy
cmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBKU1Rlc3RPdmVycmlk
ZUJ1aWx0aW5zKiBkb21PYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE92ZXJyaWRlQnVpbHRp
bnMqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKCFkb21PYmplY3QpCi0g
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNUZXN0T3ZlcnJpZGVCdWlsdGluczo6Z2V0Q29uc3RydWN0b3IoZXhlYy0+dm0o
KSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihzdGF0ZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RPdmVycmlk
ZUJ1aWx0aW5zOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxP
YmplY3QoKSkpOwogfQogCiBKU1ZhbHVlIEpTVGVzdE92ZXJyaWRlQnVpbHRpbnM6OmdldENvbnN0
cnVjdG9yKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKQEAgLTIwNiwxOCAr
MjA2LDE4IEBAIEpTVmFsdWUgSlNUZXN0T3ZlcnJpZGVCdWlsdGluczo6Z2V0Q29uc3RydWN0b3Io
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqCiAgICAgcmV0dXJuIGdldERPTUNvbnN0
cnVjdG9yPEpTVGVzdE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3Rvcj4odm0sIGpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGVGdW5jdGlvbk5hbWVkSXRl
bShFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE92
ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGVGdW5jdGlvbk5hbWVkSXRlbShFeGVjU3RhdGUqIHN0YXRl
KQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T3ZlcnJpZGVC
dWlsdGlucyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T3ZlcnJpZGVCdWlsdGlu
cyo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAg
cmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RPdmVycmlkZUJ1aWx0aW5zIiwg
Im5hbWVkSXRlbSIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwg
IlRlc3RPdmVycmlkZUJ1aWx0aW5zIiwgIm5hbWVkSXRlbSIpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T3ZlcnJpZGVCdWlsdGluczo6aW5mbygpKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIFN0cmluZyBuYW1lID0g
ZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChV
TkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgU3RyaW5nIG5hbWUgPSBzdGF0ZS0+
YXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLm5hbWVkSXRlbShuYW1lKSkp
OworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2Jq
ZWN0KCksIFdURjo6Z2V0UHRyKGltcGwubmFtZWRJdGVtKG5hbWUpKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5oIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMu
aAppbmRleCBiZjc2OTIwZGRlYWNlZWZiODk3NGMyZDA5NDMyZTlkMGZhMzYyYmM4Li45MjA2ZmVj
MmI3MWZmYjA4NjQ3MjhlYmExZDRkOGZkNzlmNGFmNmVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVycmlk
ZUJ1aWx0aW5zLmgKQEAgLTg2LDcgKzg2LDcgQEAgaW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVy
KiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiwgVGVzdE92ZXJyaWRlQnVpbHRpbnMKIH0K
IAogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCos
IFRlc3RPdmVycmlkZUJ1aWx0aW5zKik7Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RPdmVy
cmlkZUJ1aWx0aW5zJiBpbXBsKSB7IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgJmlt
cGwpOyB9CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0T3ZlcnJpZGVCdWlsdGlucyYgaW1w
bCkgeyByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAmaW1wbCk7IH0KIEpTQzo6SlNW
YWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3Qq
LCBUZXN0T3ZlcnJpZGVCdWlsdGlucyopOwogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKaW5kZXggZWIzMDU1OGNkN2YxYThm
MGI3ZmE4MTM4NWE4NWIyYzUxNTJhNTVlOC4uM2YyOGI3NjkzZWNiMTA5NGNjZjVhNmE2OTVkMDJl
M2NhYTI4NzFiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZS5jcHAKQEAgLTE1OCwxNDAgKzE1OCwxNDAgQEAgSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjp+SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlKCkKICAgICByZWxlYXNlSW1wbCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZShF
eGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAgICAg
ICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSIsICJ2YWx1ZSIpOwotICAgICAgICByZXR1cm4gdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlIiwgInZhbHVlIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRl
ckVycm9yKCpzdGF0ZSwgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UiLCAidmFs
dWUiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UiLCAidmFsdWUiKTsKICAgICB9CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwu
dmFsdWUoKSA/IGltcGwudmFsdWUoKS0+ZGVzZXJpYWxpemUoZXhlYywgY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCksIDApIDoganNOdWxsKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLnZh
bHVlKCkgPyBpbXBsLnZhbHVlKCktPmRlc2VyaWFsaXplKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSwgMCkgOiBqc051bGwoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CiB9CiAKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlUmVhZG9ubHlWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFz
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VSZWFkb25seVZhbHVlKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFS
QU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAg
IHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlIiwgInJlYWRvbmx5VmFsdWUiKTsKLSAgICAgICAgcmV0dXJu
IHRocm93R2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZSIsICJyZWFkb25seVZhbHVlIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVw
cmVjYXRlZEdldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UiLCAicmVhZG9ubHlWYWx1ZSIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBl
RXJyb3IoKnN0YXRlLCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSIsICJyZWFk
b25seVZhbHVlIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLnJlYWRvbmx5VmFsdWUoKSA/IGltcGwucmVhZG9u
bHlWYWx1ZSgpLT5kZXNlcmlhbGl6ZShleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
MCkgOiBqc051bGwoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwucmVhZG9ubHlWYWx1ZSgp
ID8gaW1wbC5yZWFkb25seVZhbHVlKCktPmRlc2VyaWFsaXplKHN0YXRlLCBjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgMCkgOiBqc051bGwoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CiB9CiAKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJh
c2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFs
dWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWUoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJB
TSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlKj4oc2xvdEJhc2UpKQotICAgICAgICAgICAg
cmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UiLCAiY2FjaGVkVmFsdWUiKTsKLSAgICAgICAgcmV0dXJuIHRo
cm93R2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZSIsICJjYWNoZWRWYWx1ZSIpOworICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0
ZWRHZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
IiwgImNhY2hlZFZhbHVlIik7CisgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigq
c3RhdGUsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIiwgImNhY2hlZFZhbHVl
Iik7CiAgICAgfQogICAgIGlmIChKU1ZhbHVlIGNhY2hlZFZhbHVlID0gY2FzdGVkVGhpcy0+bV9j
YWNoZWRWYWx1ZS5nZXQoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWNoZWRW
YWx1ZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IGltcGwuY2FjaGVkVmFsdWUoKSA/IGltcGwuY2FjaGVkVmFsdWUoKS0+ZGVzZXJp
YWxpemUoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxsKCk7Ci0g
ICAgY2FzdGVkVGhpcy0+bV9jYWNoZWRWYWx1ZS5zZXQoZXhlYy0+dm0oKSwgY2FzdGVkVGhpcywg
cmVzdWx0KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwuY2FjaGVkVmFsdWUoKSA/IGltcGwu
Y2FjaGVkVmFsdWUoKS0+ZGVzZXJpYWxpemUoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpLCAwKSA6IGpzTnVsbCgpOworICAgIGNhc3RlZFRoaXMtPm1fY2FjaGVkVmFsdWUuc2V0KHN0
YXRlLT52bSgpLCBjYXN0ZWRUaGlzLCByZXN1bHQpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VQb3J0cyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQb3J0cyhFeGVjU3RhdGUqIHN0YXRl
LCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1
ZSk7CiAgICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gcmVw
b3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZSIsICJwb3J0cyIpOwotICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJy
b3IoKmV4ZWMsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIiwgInBvcnRzIik7
CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpzdGF0ZSwg
IlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UiLCAicG9ydHMiKTsKKyAgICAgICAg
cmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UiLCAicG9ydHMiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPmltcGwoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXkoZXhlYywgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwucG9ydHMoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc0FycmF5KHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5wb3J0cygp
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIAotRW5jb2RlZEpT
VmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkUmVhZG9ubHlW
YWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRSZWFkb25seVZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVl
KTsKICAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSo+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZVByb3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBv
cnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlIiwgImNhY2hlZFJlYWRvbmx5VmFsdWUiKTsKLSAgICAgICAgcmV0dXJuIHRocm93
R2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZSIsICJjYWNoZWRSZWFkb25seVZhbHVlIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVw
cmVjYXRlZEdldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UiLCAiY2FjaGVkUmVhZG9ubHlWYWx1ZSIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSIs
ICJjYWNoZWRSZWFkb25seVZhbHVlIik7CiAgICAgfQogICAgIGlmIChKU1ZhbHVlIGNhY2hlZFZh
bHVlID0gY2FzdGVkVGhpcy0+bV9jYWNoZWRSZWFkb25seVZhbHVlLmdldCgpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhY2hlZFZhbHVlKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+aW1wbCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbC5jYWNoZWRSZWFkb25s
eVZhbHVlKCkgPyBpbXBsLmNhY2hlZFJlYWRvbmx5VmFsdWUoKS0+ZGVzZXJpYWxpemUoZXhlYywg
Y2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxsKCk7Ci0gICAgY2FzdGVkVGhp
cy0+bV9jYWNoZWRSZWFkb25seVZhbHVlLnNldChleGVjLT52bSgpLCBjYXN0ZWRUaGlzLCByZXN1
bHQpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbC5jYWNoZWRSZWFkb25seVZhbHVlKCkgPyBp
bXBsLmNhY2hlZFJlYWRvbmx5VmFsdWUoKS0+ZGVzZXJpYWxpemUoc3RhdGUsIGNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCAwKSA6IGpzTnVsbCgpOworICAgIGNhc3RlZFRoaXMtPm1fY2FjaGVk
UmVhZG9ubHlWYWx1ZS5zZXQoc3RhdGUtPnZtKCksIGNhc3RlZFRoaXMsIHJlc3VsdCk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpz
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSkK
K0VuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNlVmFsdWUsIEVuY29kZWRKU1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSo+KGJhc2VWYWx1ZSk7CiAgICAgaWYgKCFk
b21PYmplY3QpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
OjpnZXRDb25zdHJ1Y3RvcihleGVjLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7
CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6Z2V0Q29u
c3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAot
dm9pZCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKICAgICBVTlVTRURfUEFSQU0oYmFzZU9iamVjdCk7CiAgICAgSlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWlj
Q2FzdDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUqPihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSkpCi0gICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0
dGVyRXJyb3IoKmV4ZWMsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIiwgInZh
bHVlIik7CisgICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKnN0YXRlLCAi
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSIsICJ2YWx1ZSIpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UiLCAidmFsdWUiKTsKKyAgICAgICAgICAgIHRocm93U2V0
dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Ui
LCAidmFsdWUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+aW1wbCgpOwotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG5hdGl2
ZVZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgdmFsdWUsIDAsIDAp
OwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbmF0aXZlVmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OmNyZWF0ZShzdGF0ZSwgdmFsdWUsIDAsIDApOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRWYWx1ZShuYXRpdmVW
YWx1ZSk7CiB9CiAKIAotdm9pZCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2VDYWNoZWRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQg
c2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWUoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oYmFzZU9iamVj
dCk7CiAgICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSkpCi0gICAg
ICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlIiwgImNhY2hlZFZhbHVlIik7CisgICAgICAgICAgICByZXBv
cnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZSIsICJjYWNoZWRWYWx1ZSIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0
aHJvd1NldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UiLCAiY2FjaGVkVmFsdWUiKTsKKyAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9y
KCpzdGF0ZSwgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UiLCAiY2FjaGVkVmFs
dWUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+aW1wbCgpOwotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG5hdGl2ZVZhbHVl
ID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgdmFsdWUsIDAsIDApOwotICAg
IGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gbmF0aXZlVmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0
ZShzdGF0ZSwgdmFsdWUsIDAsIDApOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRDYWNoZWRWYWx1ZShuYXRpdmVW
YWx1ZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlLmgKaW5kZXggYWU0NDU4ZTg4ZjFiODc5NDQzOTY1YWFmOGI1ZmI2NzM4OGRjNDIz
NC4uYTUxYTYwOTUzYzM0MDVhMjJjMjNhOTEyNGNhOThiYWY0NTI0YTI2MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaApAQCAtODYs
NyArODYsNyBAQCBpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01X
cmFwcGVyV29ybGQmLCBUZXN0U2VyaWFsaXplZFNjcmlwdAogfQogCiBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZSopOwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlJiBpbXBsKSB7IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCwgJmltcGwpOyB9CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlJiBpbXBsKSB7IHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmpl
Y3QsICZpbXBsKTsgfQogSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3Rh
dGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UqKTsKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAppbmRleCBkNmI2NDJiOTRlYjNkNjBiOTYyZjhl
ZGNjZGQ5MmNhYmE3YjRkMzFkLi45NzhjYWRjYzIxMDhkM2ZlYzM0MjA4OGVhN2MwZjYxNzhkN2Qw
MGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0VHlwZWRlZnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAKQEAgLTE0MywxOSArMTQzLDE5IEBAIHN0YXRpYyBj
b25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yVGFibGVWYWx1ZXNb
XSA9CiAgICAgeyAiVGVzdFN1Yk9iaiIsIERvbnREZWxldGUgfCBSZWFkT25seSwgTm9JbnRyaW5z
aWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihq
c1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yVGVzdFN1Yk9iaiksIChpbnRwdHJfdCkgc3RhdGljX2Nh
c3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KDApIH0gfSwKIH07CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0
SlNUZXN0VHlwZWRlZnMoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1Rlc3RUeXBlZGVmcyhF
eGVjU3RhdGUqIHN0YXRlKQogewotICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0
VHlwZWRlZnNDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKLSAgICBpZiAoVU5MSUtFTFko
ZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMikpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
ZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIFN0cmluZyBo
ZWxsbyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAg
ICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGF1dG8qIGNhc3RlZFRo
aXMgPSBqc0Nhc3Q8SlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rvcio+KHN0YXRlLT5jYWxsZWUoKSk7
CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAyKSkKKyAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
c3RhdGUpKTsKKyAgICBTdHJpbmcgaGVsbG8gPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9TdHJpbmco
c3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0g
ICAgaWYgKCFleGVjLT5hcmd1bWVudCgxKS5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gdGhy
b3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IoKmV4ZWMsIDEsICJ0ZXN0Q2FsbGJhY2siLCAi
VGVzdFR5cGVkZWZzIiwgbnVsbHB0cik7Ci0gICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4gdGVzdENh
bGxiYWNrID0gSlNUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhc09iamVjdChleGVjLT51bmNoZWNrZWRB
cmd1bWVudCgxKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKKyAgICBpZiAoIXN0YXRl
LT5hcmd1bWVudCgxKS5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11
c3RCZUZ1bmN0aW9uRXJyb3IoKnN0YXRlLCAxLCAidGVzdENhbGxiYWNrIiwgIlRlc3RUeXBlZGVm
cyIsIG51bGxwdHIpOworICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2s+IHRlc3RDYWxsYmFjayA9IEpT
VGVzdENhbGxiYWNrOjpjcmVhdGUoYXNPYmplY3Qoc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEp
KSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpOwogICAgIFJlZlB0cjxUZXN0VHlwZWRlZnM+
IG9iamVjdCA9IFRlc3RUeXBlZGVmczo6Y3JlYXRlKGhlbGxvLCB0ZXN0Q2FsbGJhY2spOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgb2JqZWN0LmdldCgpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoYXNPYmplY3QodG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIG9iamVj
dC5nZXQoKSkpKTsKIH0KIAogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0
b3I6OnNfaW5mbyA9IHsgIlRlc3RUeXBlZGVmc0NvbnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5mbywg
MCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKSB9OwpAQCAt
MjQxLDI1ICsyNDEsMjUgQEAgSlNUZXN0VHlwZWRlZnM6On5KU1Rlc3RUeXBlZGVmcygpCiAgICAg
cmVsZWFzZUltcGwoKTsKIH0KIAotYm9vbCBKU1Rlc3RUeXBlZGVmczo6Z2V0T3duUHJvcGVydHlT
bG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU1Rlc3RUeXBlZGVmczo6Z2V0T3du
UHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTVGVzdFR5cGVkZWZzKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgaWYgKGdldFN0YXRpY1Zh
bHVlU2xvdDxKU1Rlc3RUeXBlZGVmcywgQmFzZT4oZXhlYywgSlNUZXN0VHlwZWRlZnNUYWJsZSwg
dGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KSkKKyAgICBpZiAoZ2V0U3RhdGljVmFsdWVT
bG90PEpTVGVzdFR5cGVkZWZzLCBCYXNlPihzdGF0ZSwgSlNUZXN0VHlwZWRlZnNUYWJsZSwgdGhp
c09iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Vuc2lnbmVk
TG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFR5
cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNs
b3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBV
TlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURf
UEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVz
dFR5cGVkZWZzKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RUeXBlZGVmcyo+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlKj4o
c2xvdEJhc2UpKQotICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJv
cigqZXhlYywgIlRlc3RUeXBlZGVmcyIsICJ1bnNpZ25lZExvbmdMb25nQXR0ciIpOwotICAgICAg
ICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0VHlwZWRlZnMiLCAidW5z
aWduZWRMb25nTG9uZ0F0dHIiKTsKKyAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVk
R2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdFR5cGVkZWZzIiwgInVuc2lnbmVkTG9uZ0xvbmdBdHRy
Iik7CisgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0VHlw
ZWRlZnMiLCAidW5zaWduZWRMb25nTG9uZ0F0dHIiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwu
dW5zaWduZWRMb25nTG9uZ0F0dHIoKSk7CkBAIC0yNjcsNjIgKzI2Nyw2MiBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIHNsbwogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzSW1tdXRh
YmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RC
YXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1Zh
bHVlIGpzVGVzdFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nh
c3Q8SlNUZXN0VHlwZWRlZnMqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rl
c3RUeXBlZGVmc1Byb3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBv
cnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0VHlwZWRlZnMiLCAiaW1tdXRhYmxl
U2VyaWFsaXplZFNjcmlwdFZhbHVlIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVF
cnJvcigqZXhlYywgIlRlc3RUeXBlZGVmcyIsICJpbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFs
dWUiKTsKKyAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0
YXRlLCAiVGVzdFR5cGVkZWZzIiwgImltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIpOwor
ICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdFR5cGVkZWZz
IiwgImltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIpOwogICAgIH0KICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbC5pbW11
dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUoKSA/IGltcGwuaW1tdXRhYmxlU2VyaWFsaXplZFNj
cmlwdFZhbHVlKCktPmRlc2VyaWFsaXplKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LCAwKSA6IGpzTnVsbCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbC5pbW11dGFibGVTZXJp
YWxpemVkU2NyaXB0VmFsdWUoKSA/IGltcGwuaW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVl
KCktPmRlc2VyaWFsaXplKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgMCkgOiBq
c051bGwoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIAotRW5j
b2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvclRlc3RTdWJPYmooRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvclRlc3RT
dWJPYmooRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAg
IFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8
SlNUZXN0VHlwZWRlZnMqPihzbG90QmFzZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1Rlc3RTdWJPYmo6OmdldENvbnN0cnVjdG9yKGV4ZWMtPnZtKCksIGNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RTdWJPYmo6Omdl
dENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSkpOwog
fQogCiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRp
b24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRy
V2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2Us
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9Q
QVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShz
bG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0VHlwZWRl
ZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzKj4oSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAg
ICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnNQcm90b3R5cGUqPihzbG90QmFz
ZSkpCi0gICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVj
LCAiVGVzdFR5cGVkZWZzIiwgImF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uIik7Ci0gICAgICAgIHJl
dHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RUeXBlZGVmcyIsICJhdHRyV2l0
aEdldHRlckV4Y2VwdGlvbiIpOworICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRH
ZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0VHlwZWRlZnMiLCAiYXR0cldpdGhHZXR0ZXJFeGNlcHRp
b24iKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RU
eXBlZGVmcyIsICJhdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOwogICAgIH0KICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5hdHRyV2l0aEdldHRlckV4Y2VwdGlvbihl
YykpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9u
KHN0YXRlLCBlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiAK
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRyV2l0aFNl
dHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShl
eGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFz
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0VHlwZWRlZnMqIGNh
c3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzKj4oSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAg
aWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnNQcm90b3R5cGUqPihzbG90QmFzZSkpCi0g
ICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVz
dFR5cGVkZWZzIiwgImF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uIik7Ci0gICAgICAgIHJldHVybiB0
aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RUeXBlZGVmcyIsICJhdHRyV2l0aFNldHRl
ckV4Y2VwdGlvbiIpOworICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJF
cnJvcigqc3RhdGUsICJUZXN0VHlwZWRlZnMiLCAiYXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iKTsK
KyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RUeXBlZGVm
cyIsICJhdHRyV2l0aFNldHRlckV4Y2VwdGlvbiIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5h
dHRyV2l0aFNldHRlckV4Y2VwdGlvbigpKTsKQEAgLTMzMCwxNzEgKzMzMCwxNzEgQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KgogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzU3Ry
aW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xv
dEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpT
VmFsdWUganNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3Rh
dGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdFR5cGVkZWZzKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0VHlwZWRlZnNQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gcmVw
b3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdFR5cGVkZWZzIiwgInN0cmluZ0F0
dHJXaXRoR2V0dGVyRXhjZXB0aW9uIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVF
cnJvcigqZXhlYywgIlRlc3RUeXBlZGVmcyIsICJzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlv
biIpOworICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqc3Rh
dGUsICJUZXN0VHlwZWRlZnMiLCAic3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24iKTsKKyAg
ICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RUeXBlZGVmcyIs
ICJzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOwogICAgIH0KICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgaW1wbC5zdHJpbmdBdHRyV2l0
aEdldHRlckV4Y2VwdGlvbihlYykpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Cisg
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5zdHJpbmdB
dHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYykpOworICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwg
ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAogCi1FbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldp
dGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0oc2xv
dEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdFR5cGVkZWZz
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RUeXBlZGVmcyo+KEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAg
ICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlKj4oc2xvdEJhc2Up
KQotICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqZXhlYywg
IlRlc3RUeXBlZGVmcyIsICJzdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbiIpOwotICAgICAg
ICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0VHlwZWRlZnMiLCAic3Ry
aW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iKTsKKyAgICAgICAgICAgIHJldHVybiByZXBvcnRE
ZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdFR5cGVkZWZzIiwgInN0cmluZ0F0dHJX
aXRoU2V0dGVyRXhjZXB0aW9uIik7CisgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJv
cigqc3RhdGUsICJUZXN0VHlwZWRlZnMiLCAic3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24i
KTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGltcGwuc3RyaW5nQXR0cldpdGhT
ZXR0ZXJFeGNlcHRpb24oKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNo
ZShzdGF0ZSwgaW1wbC5zdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0
VHlwZWRlZnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlVmFsdWUs
IEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBl
ZGVmc0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNlVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgSlNUZXN0VHlwZWRlZnNQcm90b3R5
cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnNQcm90b3R5cGUqPihi
YXNlVmFsdWUpOwogICAgIGlmICghZG9tT2JqZWN0KQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihleGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFR5cGVkZWZz
OjpnZXRDb25zdHJ1Y3RvcihleGVjLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7
CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVGVzdFR5cGVkZWZzOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwg
ZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOwogfQogCi12b2lkIHNldEpTVGVzdFR5cGVkZWZz
VW5zaWduZWRMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Cit2b2lkIHNldEpTVGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oYmFzZU9iamVjdCk7CiAg
ICAgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVk
ZWZzKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnNQcm90
b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSkpCi0gICAgICAgICAgICByZXBvcnRE
ZXByZWNhdGVkU2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0VHlwZWRlZnMiLCAidW5zaWduZWRMb25n
TG9uZ0F0dHIiKTsKKyAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqc3Rh
dGUsICJUZXN0VHlwZWRlZnMiLCAidW5zaWduZWRMb25nTG9uZ0F0dHIiKTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0VHlwZWRlZnMi
LCAidW5zaWduZWRMb25nTG9uZ0F0dHIiKTsKKyAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgIlRlc3RUeXBlZGVmcyIsICJ1bnNpZ25lZExvbmdMb25nQXR0ciIpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7
Ci0gICAgdW5zaWduZWQgbG9uZyBsb25nIG5hdGl2ZVZhbHVlID0gdG9VSW50NjQoZXhlYywgdmFs
dWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgdW5zaWduZWQgbG9uZyBsb25nIG5hdGl2ZVZhbHVlID0gdG9VSW50NjQoc3Rh
dGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0VW5zaWduZWRMb25n
TG9uZ0F0dHIobmF0aXZlVmFsdWUpOwogfQogCiAKLXZvaWQgc2V0SlNUZXN0VHlwZWRlZnNJbW11
dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFz
ZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCit2b2lkIHNldEpTVGVzdFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZh
bHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGJhc2VPYmplY3QpOwogICAgIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RUeXBlZGVmcyo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpT
VGVzdFR5cGVkZWZzUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpKQotICAg
ICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpleGVjLCAiVGVzdFR5cGVkZWZz
IiwgImltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIpOworICAgICAgICAgICAgcmVwb3J0
RGVwcmVjYXRlZFNldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RUeXBlZGVmcyIsICJpbW11dGFibGVT
ZXJpYWxpemVkU2NyaXB0VmFsdWUiKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhyb3dT
ZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0VHlwZWRlZnMiLCAiaW1tdXRhYmxlU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlIik7CisgICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUs
ICJUZXN0VHlwZWRlZnMiLCAiaW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlIik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsK
LSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBuYXRpdmVWYWx1ZSA9IFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIHZhbHVlLCAwLCAwKTsKLSAgICBpZiAoVU5MSUtF
TFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IG5hdGl2ZVZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoc3RhdGUsIHZh
bHVlLCAwLCAwKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0SW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVl
KG5hdGl2ZVZhbHVlKTsKIH0KIAogCi12b2lkIHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0
ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIHNl
dEpTVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwg
SlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oYmFzZU9iamVjdCk7CiAgICAgSlNU
ZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnNQcm90b3R5cGUq
PihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSkpCi0gICAgICAgICAgICByZXBvcnREZXByZWNh
dGVkU2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0VHlwZWRlZnMiLCAiYXR0cldpdGhHZXR0ZXJFeGNl
cHRpb24iKTsKKyAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqc3RhdGUs
ICJUZXN0VHlwZWRlZnMiLCAiYXR0cldpdGhHZXR0ZXJFeGNlcHRpb24iKTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0VHlwZWRlZnMi
LCAiYXR0cldpdGhHZXR0ZXJFeGNlcHRpb24iKTsKKyAgICAgICAgICAgIHRocm93U2V0dGVyVHlw
ZUVycm9yKCpzdGF0ZSwgIlRlc3RUeXBlZGVmcyIsICJhdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5p
bXBsKCk7Ci0gICAgaW50IG5hdGl2ZVZhbHVlID0gdG9JbnQzMihleGVjLCB2YWx1ZSwgTm9ybWFs
Q29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpbnQgbmF0aXZlVmFsdWUgPSB0b0ludDMyKHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lv
bik7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybjsKICAgICBpbXBsLnNldEF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKG5hdGl2ZVZhbHVlKTsK
IH0KIAogCi12b2lkIHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIHNldEpTVGVzdFR5cGVkZWZz
QXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKICAgICBVTlVTRURfUEFSQU0oYmFzZU9iamVjdCk7CiAgICAgSlNUZXN0VHlwZWRlZnMqIGNh
c3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzKj4oSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAg
aWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnNQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSkpCi0gICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3Io
KmV4ZWMsICJUZXN0VHlwZWRlZnMiLCAiYXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iKTsKKyAgICAg
ICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0VHlwZWRlZnMi
LCAiYXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
dGhyb3dTZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0VHlwZWRlZnMiLCAiYXR0cldpdGhTZXR0
ZXJFeGNlcHRpb24iKTsKKyAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwg
IlRlc3RUeXBlZGVmcyIsICJhdHRyV2l0aFNldHRlckV4Y2VwdGlvbiIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW50IG5hdGl2ZVZhbHVlID0gdG9JbnQzMihleGVjLCB2
YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpbnQgbmF0aXZlVmFsdWUgPSB0b0ludDMyKHN0YXRlLCB2YWx1ZSwgTm9y
bWFsQ29udmVyc2lvbik7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldEF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKG5h
dGl2ZVZhbHVlLCBlYyk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBzZXRE
T01FeGNlcHRpb24oc3RhdGUsIGVjKTsKIH0KIAogCi12b2lkIHNldEpTVGVzdFR5cGVkZWZzU3Ry
aW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFz
ZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCit2b2lkIHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRp
b24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0o
YmFzZU9iamVjdCk7CiAgICAgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdFR5cGVkZWZzKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0VHlwZWRlZnNQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSkpCi0gICAg
ICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0VHlwZWRlZnMi
LCAic3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24iKTsKKyAgICAgICAgICAgIHJlcG9ydERl
cHJlY2F0ZWRTZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0VHlwZWRlZnMiLCAic3RyaW5nQXR0cldp
dGhHZXR0ZXJFeGNlcHRpb24iKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhyb3dTZXR0
ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0VHlwZWRlZnMiLCAic3RyaW5nQXR0cldpdGhHZXR0ZXJF
eGNlcHRpb24iKTsKKyAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRl
c3RUeXBlZGVmcyIsICJzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAg
U3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgU3RyaW5nIG5hdGl2
ZVZhbHVlID0gdmFsdWUudG9TdHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBs
LnNldFN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKG5hdGl2ZVZhbHVlKTsKIH0KIAogCi12
b2lkIHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIHNldEpTVGVzdFR5cGVkZWZzU3Ry
aW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJh
c2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKICAgICBVTlVTRURfUEFSQU0oYmFzZU9iamVjdCk7CiAgICAgSlNUZXN0VHlwZWRlZnMq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzKj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAg
ICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnNQcm90b3R5cGUqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSkpCi0gICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJy
b3IoKmV4ZWMsICJUZXN0VHlwZWRlZnMiLCAic3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24i
KTsKKyAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0
VHlwZWRlZnMiLCAic3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iKTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0VHlwZWRlZnMi
LCAic3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iKTsKKyAgICAgICAgICAgIHRocm93U2V0
dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RUeXBlZGVmcyIsICJzdHJpbmdBdHRyV2l0aFNldHRl
ckV4Y2VwdGlvbiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgU3RyaW5n
IG5hdGl2ZVZhbHVlID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlm
IChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgU3RyaW5nIG5hdGl2ZVZhbHVl
ID0gdmFsdWUudG9TdHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldFN0
cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKG5hdGl2ZVZhbHVlLCBlYyk7Ci0gICAgc2V0RE9N
RXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKIH0K
IAogCkBAIC01MDMsMTMxICs1MDMsMTMxIEBAIEpTVmFsdWUgSlNUZXN0VHlwZWRlZnM6OmdldENv
bnN0cnVjdG9yKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICByZXR1
cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rvcj4odm0sIGpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jKEV4ZWNT
dGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQ
cm90b3R5cGVGdW5jdGlvbkZ1bmMoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3Rh
dGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RUeXBlZGVmcyo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRl
c3RUeXBlZGVmcyIsICJmdW5jIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3Io
KnN0YXRlLCAiVGVzdFR5cGVkZWZzIiwgImZ1bmMiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdFR5cGVkZWZzOjppbmZvKCkpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAKLSAgICBzaXplX3QgYXJnc0NvdW50ID0gZXhlYy0+
YXJndW1lbnRDb3VudCgpOworICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGF0ZS0+YXJndW1lbnRD
b3VudCgpOwogICAgIGlmIChhcmdzQ291bnQgPD0gMCkgewogICAgICAgICBpbXBsLmZ1bmMoKTsK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAK
LSAgICBWZWN0b3I8aW50PiB4ID0gdG9OYXRpdmVBcnJheTxpbnQ+KGV4ZWMsIGV4ZWMtPmFyZ3Vt
ZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIFZl
Y3RvcjxpbnQ+IHggPSB0b05hdGl2ZUFycmF5PGludD4oc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgw
KSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5mdW5jKHgpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblNldFNo
YWRvdyhFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TZXRTaGFkb3coRXhlY1N0YXRlKiBzdGF0ZSkKIHsK
LSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdFR5cGVkZWZzKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RUeXBlZGVmcyo+KHRoaXNWYWx1ZSk7CiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVF
cnJvcigqZXhlYywgIlRlc3RUeXBlZGVmcyIsICJzZXRTaGFkb3ciKTsKKyAgICAgICAgcmV0dXJu
IHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0VHlwZWRlZnMiLCAic2V0U2hhZG93Iik7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RUeXBlZGVm
czo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGlm
IChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50KCkgPCAzKSkKLSAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0g
ICAgZmxvYXQgd2lkdGggPSBleGVjLT5hcmd1bWVudCgwKS50b0Zsb2F0KGV4ZWMpOwotICAgIGlm
IChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAzKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAgICBmbG9hdCB3aWR0
aCA9IHN0YXRlLT5hcmd1bWVudCgwKS50b0Zsb2F0KHN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKLSAgICBmbG9hdCBoZWlnaHQgPSBleGVjLT5hcmd1bWVudCgxKS50b0Zs
b2F0KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
ZmxvYXQgaGVpZ2h0ID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvRmxvYXQoc3RhdGUpOworICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGZsb2F0IGJsdXIgPSBleGVjLT5hcmd1bWVu
dCgyKS50b0Zsb2F0KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgZmxvYXQgYmx1ciA9IHN0YXRlLT5hcmd1bWVudCgyKS50b0Zsb2F0KHN0YXRlKTsK
KyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAotICAgIHNpemVfdCBhcmdzQ291bnQg
PSBleGVjLT5hcmd1bWVudENvdW50KCk7CisgICAgc2l6ZV90IGFyZ3NDb3VudCA9IHN0YXRlLT5h
cmd1bWVudENvdW50KCk7CiAgICAgaWYgKGFyZ3NDb3VudCA8PSAzKSB7CiAgICAgICAgIGltcGwu
c2V0U2hhZG93KHdpZHRoLCBoZWlnaHQsIGJsdXIpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIAotICAgIFN0cmluZyBjb2xvciA9IGV4ZWMt
PmFyZ3VtZW50KDMpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtF
TFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIFN0cmluZyBjb2xvciA9IHN0YXRlLT5hcmd1
bWVudCgzKS50b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBpZiAoYXJnc0NvdW50IDw9IDQpIHsKICAgICAgICAgaW1wbC5z
ZXRTaGFkb3cod2lkdGgsIGhlaWdodCwgYmx1ciwgY29sb3IpOwogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIAotICAgIGZsb2F0IGFscGhhID0g
ZXhlYy0+YXJndW1lbnQoNCkudG9GbG9hdChleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIGZsb2F0IGFscGhhID0gc3RhdGUtPmFyZ3VtZW50KDQpLnRv
RmxvYXQoc3RhdGUpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwu
c2V0U2hhZG93KHdpZHRoLCBoZWlnaHQsIGJsdXIsIGNvbG9yLCBhbHBoYSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFNlcXVl
bmNlQXJnKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhTZXF1ZW5jZUFyZyhFeGVjU3Rh
dGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7
CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0
VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzKj4odGhp
c1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4g
dGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdFR5cGVkZWZzIiwgIm1ldGhvZFdpdGhTZXF1
ZW5jZUFyZyIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRl
c3RUeXBlZGVmcyIsICJtZXRob2RXaXRoU2VxdWVuY2VBcmciKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdFR5cGVkZWZzOjppbmZvKCkpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBWZWN0b3I8UmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4+IHNlcXVlbmNlQXJnID0gKHRvUmVmUHRyTmF0aXZlQXJyYXk8
U2VyaWFsaXplZFNjcmlwdFZhbHVlLCBKU1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4oZXhlYywgZXhl
Yy0+YXJndW1lbnQoMCksICZKU1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dG9XcmFwcGVkKSk7Ci0g
ICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOworICAgIFZlY3Rv
cjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4gc2VxdWVuY2VBcmcgPSAodG9SZWZQdHJO
YXRpdmVBcnJheTxTZXJpYWxpemVkU2NyaXB0VmFsdWUsIEpTU2VyaWFsaXplZFNjcmlwdFZhbHVl
PihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCAmSlNTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnRv
V3JhcHBlZCkpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNOdW1iZXIoaW1wbC5tZXRob2RXaXRoU2VxdWVuY2VBcmcoc2VxdWVuY2VBcmcp
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxl
QXJyYXlBcmcoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVBcnJheUFyZyhFeGVjU3RhdGUq
IHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7Cisg
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0VHlw
ZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzKj4odGhpc1Zh
bHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhy
b3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdFR5cGVkZWZzIiwgIm51bGxhYmxlQXJyYXlBcmci
KTsKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0VHlwZWRl
ZnMiLCAibnVsbGFibGVBcnJheUFyZyIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
Y2FzdGVkVGhpcywgSlNUZXN0VHlwZWRlZnM6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPmltcGwoKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgp
IDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIFZlY3RvcjxTdHJpbmc+IGFycmF5QXJnID0gdG9O
YXRpdmVBcnJheTxTdHJpbmc+KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5M
SUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CisgICAgVmVjdG9yPFN0cmluZz4g
YXJyYXlBcmcgPSB0b05hdGl2ZUFycmF5PFN0cmluZz4oc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgw
KSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5udWxsYWJsZUFy
cmF5QXJnKGFycmF5QXJnKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJv
dG90eXBlRnVuY3Rpb25GdW5jV2l0aENsYW1wKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkZ1bmNXaXRo
Q2xhbXAoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMt
PnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgp
OwogICAgIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RU
eXBlZGVmcyo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAg
ICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RUeXBlZGVmcyIsICJm
dW5jV2l0aENsYW1wIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRl
LCAiVGVzdFR5cGVkZWZzIiwgImZ1bmNXaXRoQ2xhbXAiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdFR5cGVkZWZzOjppbmZvKCkpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIHVuc2lnbmVkIGxv
bmcgbG9uZyBhcmcxID0gMDsKLSAgICBkb3VibGUgYXJnMU5hdGl2ZVZhbHVlID0gZXhlYy0+YXJn
dW1lbnQoMCkudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBkb3VibGUgYXJnMU5hdGl2ZVZhbHVlID0gc3RhdGUtPmFyZ3VtZW50KDAp
LnRvTnVtYmVyKHN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAg
IGlmICghc3RkOjppc25hbihhcmcxTmF0aXZlVmFsdWUpKQogICAgICAgICBhcmcxID0gY2xhbXBU
bzx1bnNpZ25lZCBsb25nIGxvbmc+KGFyZzFOYXRpdmVWYWx1ZSk7CiAKIAotICAgIHNpemVfdCBh
cmdzQ291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7CisgICAgc2l6ZV90IGFyZ3NDb3VudCA9
IHN0YXRlLT5hcmd1bWVudENvdW50KCk7CiAgICAgaWYgKGFyZ3NDb3VudCA8PSAxKSB7CiAgICAg
ICAgIGltcGwuZnVuY1dpdGhDbGFtcChhcmcxKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgYXJn
MiA9IDA7Ci0gICAgZG91YmxlIGFyZzJOYXRpdmVWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRv
TnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgZG91YmxlIGFyZzJOYXRpdmVWYWx1ZSA9IHN0YXRlLT5hcmd1bWVudCgxKS50b051bWJlcihz
dGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBpZiAoIXN0ZDo6
aXNuYW4oYXJnMk5hdGl2ZVZhbHVlKSkKQEAgLTYzNyw4NiArNjM3LDg2IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkZ1bmNXaXRo
Q2xhbXAoRXhlY1N0CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlw
ZUZ1bmN0aW9uSW1tdXRhYmxlUG9pbnRGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25JbW11
dGFibGVQb2ludEZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRl
LT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0
VHlwZWRlZnMiLCAiaW1tdXRhYmxlUG9pbnRGdW5jdGlvbiIpOworICAgICAgICByZXR1cm4gdGhy
b3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RUeXBlZGVmcyIsICJpbW11dGFibGVQb2ludEZ1
bmN0aW9uIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rl
c3RUeXBlZGVmczo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgp
OwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgV1RGOjpnZXRQdHIoU1ZHUHJvcGVydHlUZWFyT2ZmPFNWR1BvaW50Pjo6Y3JlYXRlKGlt
cGwuaW1tdXRhYmxlUG9pbnRGdW5jdGlvbigpKSkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9K
UyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKFNWR1Byb3Bl
cnR5VGVhck9mZjxTVkdQb2ludD46OmNyZWF0ZShpbXBsLmltbXV0YWJsZVBvaW50RnVuY3Rpb24o
KSkpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmlu
Z0FycmF5RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5nQXJyYXlGdW5jdGlvbihF
eGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1Zh
bHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAg
SlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZz
Kj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICBy
ZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdFR5cGVkZWZzIiwgInN0cmluZ0Fy
cmF5RnVuY3Rpb24iKTsKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUs
ICJUZXN0VHlwZWRlZnMiLCAic3RyaW5nQXJyYXlGdW5jdGlvbiIpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0VHlwZWRlZnM6OmluZm8oKSk7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+
YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
c3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7Ci0gICAgVmVjdG9yPFN0cmluZz4gdmFsdWVzID0gdG9OYXRpdmVBcnJh
eTxTdHJpbmc+KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIFZlY3RvcjxTdHJpbmc+IHZhbHVlcyA9IHRvTmF0aXZl
QXJyYXk8U3RyaW5nPihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXkoZXhlYywgY2Fz
dGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwuc3RyaW5nQXJyYXlGdW5jdGlvbih2YWx1ZXMs
IGVjKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0FycmF5KHN0YXRlLCBjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgaW1wbC5zdHJpbmdBcnJheUZ1bmN0aW9uKHZhbHVlcywgZWMpKTsKIAot
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRl
LCBlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TdHJp
bmdBcnJheUZ1bmN0aW9uMihFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TdHJpbmdBcnJheUZ1bmN0aW9u
MihFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhp
c1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAg
ICAgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVk
ZWZzKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAg
ICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdFR5cGVkZWZzIiwgInN0cmlu
Z0FycmF5RnVuY3Rpb24yIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0
YXRlLCAiVGVzdFR5cGVkZWZzIiwgInN0cmluZ0FycmF5RnVuY3Rpb24yIik7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RUeXBlZGVmczo6aW5mbygpKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGlmIChVTkxJS0VMWShl
eGVjLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBWZWN0b3I8U3RyaW5nPiB2YWx1ZXMgPSB0b05hdGl2
ZUFycmF5PFN0cmluZz4oZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VM
WShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgVmVjdG9yPFN0cmluZz4gdmFsdWVzID0gdG9O
YXRpdmVBcnJheTxTdHJpbmc+KHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOworICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNBcnJheShleGVj
LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5zdHJpbmdBcnJheUZ1bmN0aW9uMih2
YWx1ZXMsIGVjKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0FycmF5KHN0YXRlLCBjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5zdHJpbmdBcnJheUZ1bmN0aW9uMih2YWx1ZXMsIGVj
KSk7CiAKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHNldERPTUV4Y2VwdGlv
bihzdGF0ZSwgZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0
aW9uQ2FsbFdpdGhTZXF1ZW5jZVRoYXRSZXF1aXJlc0luY2x1ZGUoRXhlY1N0YXRlKiBleGVjKQor
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0
aW9uQ2FsbFdpdGhTZXF1ZW5jZVRoYXRSZXF1aXJlc0luY2x1ZGUoRXhlY1N0YXRlKiBzdGF0ZSkK
IHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFs
dWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdFR5cGVkZWZzKiBj
YXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RUeXBlZGVmcyo+KHRoaXNWYWx1ZSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5
cGVFcnJvcigqZXhlYywgIlRlc3RUeXBlZGVmcyIsICJjYWxsV2l0aFNlcXVlbmNlVGhhdFJlcXVp
cmVzSW5jbHVkZSIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwg
IlRlc3RUeXBlZGVmcyIsICJjYWxsV2l0aFNlcXVlbmNlVGhhdFJlcXVpcmVzSW5jbHVkZSIpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0VHlwZWRlZnM6
OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBpZiAo
VU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAg
IFZlY3RvcjxSZWZQdHI8VGVzdEV2ZW50VGFyZ2V0Pj4gc2VxdWVuY2VBcmcgPSAodG9SZWZQdHJO
YXRpdmVBcnJheTxUZXN0RXZlbnRUYXJnZXQsIEpTVGVzdEV2ZW50VGFyZ2V0PihleGVjLCBleGVj
LT5hcmd1bWVudCgwKSwgJkpTVGVzdEV2ZW50VGFyZ2V0Ojp0b1dyYXBwZWQpKTsKLSAgICBpZiAo
VU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CisgICAgVmVjdG9yPFJlZlB0
cjxUZXN0RXZlbnRUYXJnZXQ+PiBzZXF1ZW5jZUFyZyA9ICh0b1JlZlB0ck5hdGl2ZUFycmF5PFRl
c3RFdmVudFRhcmdldCwgSlNUZXN0RXZlbnRUYXJnZXQ+KHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQo
MCksICZKU1Rlc3RFdmVudFRhcmdldDo6dG9XcmFwcGVkKSk7CisgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oaW1wbC5jYWxsV2l0
aFNlcXVlbmNlVGhhdFJlcXVpcmVzSW5jbHVkZShzZXF1ZW5jZUFyZykpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvbihFeGVj
U3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZz
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCiB7
Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RUeXBlZGVmcyogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPih0aGlzVmFsdWUpOwogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBl
RXJyb3IoKmV4ZWMsICJUZXN0VHlwZWRlZnMiLCAibWV0aG9kV2l0aEV4Y2VwdGlvbiIpOworICAg
ICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RUeXBlZGVmcyIsICJt
ZXRob2RXaXRoRXhjZXB0aW9uIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0
ZWRUaGlzLCBKU1Rlc3RUeXBlZGVmczo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+aW1wbCgpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGltcGwubWV0aG9k
V2l0aEV4Y2VwdGlvbihlYyk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBz
ZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5oCmluZGV4IDdjM2I1YzQ2MGU3ZWFjYTFh
OGY3NDRiYWFkMzUyMDgwNzljM2Q3ZDUuLmRkMTQ5YTc1MDkyNWU1ZjEzMzk4NTMwODk3ODQzMDQw
NDI3NWU4YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RUeXBlZGVmcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5oCkBAIC04Myw3ICs4Myw3IEBAIGlubGluZSBKU0M6
OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYsIFRlc3RUeXBl
ZGVmcyopCiB9CiAKIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9i
YWxPYmplY3QqLCBUZXN0VHlwZWRlZnMqKTsKLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdFR5
cGVkZWZzJiBpbXBsKSB7IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgJmltcGwpOyB9
CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0VHlwZWRlZnMmIGltcGwpIHsgcmV0dXJuIHRv
SlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgJmltcGwpOyB9CiBKU0M6OkpTVmFsdWUgdG9KU05ld2x5
Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdFR5cGVkZWZz
Kik7CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTYXR0cmlidXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU2F0dHJpYnV0ZS5jcHAKaW5kZXggZGZjODNlZjU3OGQyZDNlYzY1MDg5ZDI4NWFhYWFj
ZTNhZGNiNzc5YS4uNGM2NzRmOTQ5NWZkOTRlZTJkYTdmMzI4Zjg5NjQyNWIzMTlmZTA5YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0cmli
dXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNh
dHRyaWJ1dGUuY3BwCkBAIC0xNDMsMjkgKzE0MywyOSBAQCBKU2F0dHJpYnV0ZTo6fkpTYXR0cmli
dXRlKCkKICAgICByZWxlYXNlSW1wbCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc2F0dHJpYnV0
ZVJlYWRvbmx5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzYXR0cmlidXRl
UmVhZG9ubHkoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTYXR0cmlidXRlKiBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljQ2FzdDxKU2F0dHJpYnV0ZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFt
aWNDYXN0PEpTYXR0cmlidXRlUHJvdG90eXBlKj4oc2xvdEJhc2UpKQotICAgICAgICAgICAgcmV0
dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqZXhlYywgImF0dHJpYnV0ZSIsICJyZWFk
b25seSIpOwotICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJhdHRy
aWJ1dGUiLCAicmVhZG9ubHkiKTsKKyAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVk
R2V0dGVyRXJyb3IoKnN0YXRlLCAiYXR0cmlidXRlIiwgInJlYWRvbmx5Iik7CisgICAgICAgIHJl
dHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJhdHRyaWJ1dGUiLCAicmVhZG9ubHki
KTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGltcGwucmVhZG9ubHkoKSk7Cisg
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5yZWFkb25s
eSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIAotRW5jb2Rl
ZEpTVmFsdWUganNhdHRyaWJ1dGVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiBiYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1
ZSBqc2F0dHJpYnV0ZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNl
VmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgSlNhdHRyaWJ1dGVQ
cm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNhdHRyaWJ1dGVQcm90b3R5cGUq
PihiYXNlVmFsdWUpOwogICAgIGlmICghZG9tT2JqZWN0KQotICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihleGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTYXR0cmlidXRl
OjpnZXRDb25zdHJ1Y3RvcihleGVjLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7
CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTYXR0cmlidXRlOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9t
T2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOwogfQogCiBKU1ZhbHVlIEpTYXR0cmlidXRlOjpnZXRD
b25zdHJ1Y3RvcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNhdHRyaWJ1dGUu
aCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5o
CmluZGV4IDYxNWU5MGEyZjE2YzA2NDVlZDNkN2VkYjc4MzZhOGY0NTNiZjlkN2EuLjMwZDJmY2I0
NDUwYWIxMjU5ZWIwOTdhNzllY2UyY2U5ZTI4NWNiYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5oCkBAIC04MSw3ICs4
MSw3IEBAIGlubGluZSBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBw
ZXJXb3JsZCYsIGF0dHJpYnV0ZSopCiB9CiAKIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBhdHRyaWJ1dGUqKTsKLWlubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgYXR0cmlidXRlJiBpbXBsKSB7IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwg
JmltcGwpOyB9CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBhdHRyaWJ1dGUmIGltcGwpIHsgcmV0
dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgJmltcGwpOyB9CiBKU0M6OkpTVmFsdWUgdG9K
U05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgYXR0cmli
dXRlKik7CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTcmVhZG9ubHkuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTcmVhZG9ubHkuY3BwCmluZGV4IGYxODdiYjgwNmJiNGJhMTljMzA0ODUwMTE0NjVm
NWZhMWRiYjFjMzIuLjZiMzQ2MGM0OTQyZmQ5YTA0MGNkMzI0NWEwYjgwNjc5ZjI0MzYwNzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU3JlYWRv
bmx5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNy
ZWFkb25seS5jcHAKQEAgLTEzOSwxMiArMTM5LDEyIEBAIEpTcmVhZG9ubHk6On5KU3JlYWRvbmx5
KCkKICAgICByZWxlYXNlSW1wbCgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc3JlYWRvbmx5Q29u
c3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZVZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNyZWFkb25seUNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CiAgICAgSlNyZWFkb25seVByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNE
eW5hbWljQ2FzdDxKU3JlYWRvbmx5UHJvdG90eXBlKj4oYmFzZVZhbHVlKTsKICAgICBpZiAoIWRv
bU9iamVjdCkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU3JlYWRvbmx5OjpnZXRDb25zdHJ1Y3RvcihleGVjLT52bSgp
LCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKHN0YXRlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTcmVhZG9ubHk6Omdl
dENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7CiB9
CiAKIEpTVmFsdWUgSlNyZWFkb25seTo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTcmVhZG9ubHkuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU3JlYWRvbmx5LmgKaW5kZXggZWMyM2EyZTkzNGQwOWVmNWZhMWQ0OTEx
MDAyOGQyYWVhMWE0MmFkNC4uY2UzY2RmMDdmYmMwNTQ1OWUxNTUwMjk2MDQyM2ZlNDI3ZmM2ZjE1
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
cmVhZG9ubHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNyZWFkb25seS5oCkBAIC04MCw3ICs4MCw3IEBAIGlubGluZSBKU0M6OldlYWtIYW5kbGVPd25l
ciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYsIHJlYWRvbmx5KikKIH0KIAogSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIHJlYWRvbmx5
Kik7Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHJlYWRvbmx5JiBpbXBsKSB7IHJldHVybiB0b0pT
KGV4ZWMsIGdsb2JhbE9iamVjdCwgJmltcGwpOyB9CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBy
ZWFkb25seSYgaW1wbCkgeyByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAmaW1wbCk7
IH0KIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01H
bG9iYWxPYmplY3QqLCByZWFkb25seSopOwogCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261602</attachid>
            <date>2015-09-19 22:11:38 -0700</date>
            <delta_ts>2015-09-20 09:41:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149378-20150919221122.patch</filename>
            <type>text/plain</type>
            <size>598622</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkwMDIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGNjYjM1N2NiYTUxMWNk
YThhYzFkMjM5YmM2Mzk3Mjc0YjYyMTk0Yy4uY2Y3NmZkYTZkNzY2MTliM2RmNzM1MGMzZWM0NDdh
MDlmNzlkZDExZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDU1IEBACiAyMDE1LTA5LTE5ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdFN0
YXRlXSBzaG91bGQgcGFzcyBFeGVjU3RhdGUgdG8gdGhlIGltcGxlbWVudGF0aW9uIGJ5IHJlZmVy
ZW5jZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5
Mzc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0Nh
bGxXaXRoPVNjcmlwdFN0YXRlXSBzaG91bGQgcGFzcyBFeGVjU3RhdGUgdG8gdGhlIGltcGxlbWVu
dGF0aW9uIGJ5CisgICAgICAgIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIHBvaW50ZXIsIGFzIGl0IGlz
IGV4cGVjdGVkIHRvIGJlIG5vbi1udWxsLgorCisgICAgICAgIEFsc28gcmVuYW1lIHRoZSBFeGVj
U3RhdGUgdmFyaWFibGVzIGZyb20gJ2V4ZWMnIHRvICdzdGF0ZScgaW4gdGhlCisgICAgICAgIGJp
bmRpbmdzIGFzIHRoaXMgaXMgdGhlIHByZWZlcnJlZCBuYW1pbmcgY29udmVudGlvbi4KKworICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
bGVnYWN5L0xlZ2FjeUN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lDdXJzb3I6
OnVwZGF0ZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUN1cnNv
ci5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lPYmplY3RTdG9y
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lPYmplY3RTdG9yZTo6YWRkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxlZ2FjeU9iamVjdFN0b3JlOjpwdXQpOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lPYmplY3RTdG9yZS5oOgorICAgICAgICAqIE1vZHVsZXMv
bWVkaWFzdHJlYW0vQ2FwYWJpbGl0eVJhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcmlw
dFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhcGFiaWxpdHlSYW5nZTo6bWluKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhcGFiaWxpdHlSYW5nZTo6bWF4KToKKyAgICAgICAgKiBNb2R1bGVzL21l
ZGlhc3RyZWFtL0NhcGFiaWxpdHlSYW5nZS5oOgorICAgICAgICAqIE1vZHVsZXMvc3RyZWFtcy9S
ZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlU3Ry
ZWFtQ29udHJvbGxlcjo6ZXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW1D
b250cm9sbGVyOjplbnF1ZXVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlRXZlbnRMaXN0ZW5lckNhbGwpOgorICAgICAg
ICAoR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eVNsb3RCb2R5KToKKyAgICAgICAgKEdlbmVyYXRlSGVh
ZGVyKToKKyAgICAgICAgKEdlbmVyYXRlT3ZlcmxvYWRlZEZ1bmN0aW9uKToKKyAgICAgICAgKEdl
dEluZGV4ZWRHZXR0ZXJFeHByZXNzaW9uKToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRp
b24pOgorICAgICAgICAoR2VuZXJhdGVGdW5jdGlvbkNhc3RlZFRoaXMpOgorICAgICAgICAoR2Vu
ZXJhdGVDYWxsV2l0aCk6CisgICAgICAgIChHZW5lcmF0ZUFyZ3VtZW50c0NvdW50Q2hlY2spOgor
ICAgICAgICAoR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2spOgorICAgICAgICAoR2VuZXJhdGVSZXR1
cm5QYXJhbWV0ZXJzKToKKyAgICAgICAgKEdlbmVyYXRlQ2FsbGJhY2tIZWFkZXIpOgorICAgICAg
ICAoR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlSW1w
bGVtZW50YXRpb25GdW5jdGlvbkNhbGwpOgorICAgICAgICAoSlNWYWx1ZVRvTmF0aXZlKToKKyAg
ICAgICAgKE5hdGl2ZVRvSlNWYWx1ZSk6CisgICAgICAgIChHZW5lcmF0ZU92ZXJsb2FkZWRDb25z
dHJ1Y3RvckRlZmluaXRpb24pOgorICAgICAgICAoR2VuZXJhdGVDb25zdHJ1Y3RvckRlZmluaXRp
b24pOgorCisyMDE1LTA5LTE5ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKICAg
ICAgICAgW1dlYiBJRExdIEFkZCBzdXBwb3J0IGZvciBbUHV0Rm9yd2FyZHM9WFhYXSBJREwgZXh0
ZW5kZWQgYXR0cmlidXRlCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDkzNzYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ3Vyc29yLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJD
dXJzb3IuaAppbmRleCAyNDE0NGRiZGUxZjFmZWFhMGU4ZDBhYmNlNzAwMzg3NWVkOWEzY2I4Li5j
NmRlMzY4MTM0OTU4NGE5MDg0YTJlMDEzNGI5ZjgyMDU1ZjI3NTRhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaApAQCAtNjYsNyArNjYsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgdmFsdWUoKSBj
b25zdCA9IDA7CiAgICAgdmlydHVhbCBJREJBbnkqIHNvdXJjZSgpIGNvbnN0ID0gMDsKIAotICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiB1cGRhdGUoSlNDOjpFeGVjU3RhdGUqLCBE
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVh
bCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHVwZGF0ZShKU0M6OkV4ZWNTdGF0ZSYsIERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlJiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
YWR2YW5jZSh1bnNpZ25lZCBsb25nLCBFeGNlcHRpb25Db2RlJikgPSAwOwogICAgIC8vIEZJWE1F
OiBUcnkgdG8gbW9kaWZ5IHRoZSBjb2RlIGdlbmVyYXRvciBzbyB0aGlzIG92ZXJsb2FkIGlzIHVu
bmVlZGVkLgogICAgIHZpcnR1YWwgdm9pZCBjb250aW51ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJikgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKaW5kZXggMjg2NjUwNGRlOTg0YzQwYTQw
YzI0NjIzNzYyNDNhMmRhZmE0YTc3NS4uOWQ5MDA2NDA2ZjNjYjY5YTA1NjZlNjZmZDc2NGNiMzYy
YzE4ODViYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZS5oCkBAIC02OCw4ICs2OCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKCkgY29uc3QgPSAwOwogICAgIHZpcnR1
YWwgYm9vbCBhdXRvSW5jcmVtZW50KCkgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IGFkZChKU0M6OkV4ZWNTdGF0ZSosIERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlJiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVx
dWVzdD4gcHV0KEpTQzo6RXhlY1N0YXRlKiwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBFeGNl
cHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBhZGQo
SlNDOjpFeGVjU3RhdGUmLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIEV4Y2VwdGlvbkNvZGUm
KSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChKU0M6OkV4ZWNT
dGF0ZSYsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAgICAgdmlydHVhbCBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CkBAIC03
OCw4ICs3OCw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IGdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IGFkZChKU0M6OkV4ZWNTdGF0ZSosIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwgY29u
c3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gcHV0KEpTQzo6RXhlY1N0YXRlKiwgRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5
LCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBhZGQoSlNDOjpFeGVjU3RhdGUmLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIGNvbnN0IERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChKU0M6OkV4ZWNTdGF0ZSYsIERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlJiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhj
ZXB0aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZGVs
ZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+LCBFeGNlcHRpb25Db2RlJikgPSAwOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJSZXF1
ZXN0PiBkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gY2xlYXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV4
Y2VwdGlvbkNvZGUmKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZWdhY3kvTGVnYWN5Q3Vyc29yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lDdXJzb3IuY3BwCmluZGV4IGY1NTc3MWYxMWFmNWVlMzJk
ZjMzYjEyYWJiZjllYmZkNzhjY2E2MTIuLjg1YmRjNDQ4MTM4M2VmODVkNmFlN2E2ZTQwNWNiMzFl
Y2JhMjZiY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xl
Z2FjeS9MZWdhY3lDdXJzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2xlZ2FjeS9MZWdhY3lDdXJzb3IuY3BwCkBAIC05Niw3ICs5Niw3IEBAIElEQkFueSogTGVn
YWN5Q3Vyc29yOjpzb3VyY2UoKSBjb25zdAogICAgIHJldHVybiBtX3NvdXJjZS5nZXQoKTsKIH0K
IAotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lDdXJzb3I6OnVwZGF0ZShKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IExlZ2FjeUN1cnNvcjo6dXBkYXRlKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeUN1cnNvcjo6dXBkYXRl
Iik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2Fj
eS9MZWdhY3lDdXJzb3IuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2Fj
eS9MZWdhY3lDdXJzb3IuaAppbmRleCBlMWRiYjMyZDI0MjhiMjJmOWE5ZjBmMjgzYTIxOWY3ZWNi
Y2ZjMTEzLi43ZTNhOTEwNDY0ZTI0NGU4MzlmODE3YTM3MDhjNTJhYmE2YWNiMjY5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5Q3Vyc29y
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUN1
cnNvci5oCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZSYgdmFsdWUoKSBjb25zdDsKICAgICBJREJBbnkqIHNvdXJjZSgpIGNvbnN0Owog
Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiB1cGRhdGUoSlNDOjpFeGVjU3RhdGUqLCBEZXBy
ZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IHVwZGF0ZShKU0M6OkV4ZWNTdGF0ZSYsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
JiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgYWR2YW5jZSh1bnNpZ25lZCBsb25nLCBFeGNl
cHRpb25Db2RlJik7CiAgICAgLy8gRklYTUU6IFRyeSB0byBtb2RpZnkgdGhlIGNvZGUgZ2VuZXJh
dG9yIHNvIHRoaXMgb3ZlcmxvYWQgaXMgdW5uZWVkZWQuCiAgICAgdm9pZCBjb250aW51ZUZ1bmN0
aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJiBlYykgeyBjb250aW51
ZUZ1bmN0aW9uKHN0YXRpY19jYXN0PElEQktleSo+KG51bGxwdHIpLCBlYyk7IH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lPYmplY3RT
dG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5
T2JqZWN0U3RvcmUuY3BwCmluZGV4IDEwZmUxNjY0NjM4MWNmNDFjNTJjNTBiZDdlODQ5ZWY1MzEw
OTRkMjkuLmU1YWY2MGY3ZmVhYjNmNTNiZGMyOGYzYzMzN2MwMDY1MGJkYWU4NjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lPYmplY3RT
dG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xl
Z2FjeU9iamVjdFN0b3JlLmNwcApAQCAtOTYsMzkgKzk2LDM5IEBAIFBhc3NSZWZQdHI8SURCUmVx
dWVzdD4gTGVnYWN5T2JqZWN0U3RvcmU6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBjCiAgICAgcmV0dXJuIGdldChjb250ZXh0LCBrZXlSYW5nZS5yZWxlYXNlKCksIGVjKTsK
IH0KIAotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lPYmplY3RTdG9yZTo6YWRkKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBE
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gTGVnYWN5T2JqZWN0U3RvcmU6OmFkZChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgTE9HKFN0b3JhZ2VBUEks
ICJMZWdhY3lPYmplY3RTdG9yZTo6YWRkIik7CiAgICAgcmV0dXJuIHB1dChJREJEYXRhYmFzZUJh
Y2tlbmQ6OkFkZE9ubHksIExlZ2FjeUFueTo6Y3JlYXRlKHRoaXMpLCBzdGF0ZSwgdmFsdWUsIGtl
eSwgZWMpOwogfQogCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IExlZ2FjeU9iamVjdFN0b3JlOjph
ZGQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgdmFsdWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lPYmplY3RT
dG9yZTo6YWRkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUm
IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2Fj
eU9iamVjdFN0b3JlOjphZGQiKTsKICAgICByZXR1cm4gcHV0KElEQkRhdGFiYXNlQmFja2VuZDo6
QWRkT25seSwgTGVnYWN5QW55OjpjcmVhdGUodGhpcyksIHN0YXRlLCB2YWx1ZSwgc3RhdGljX2Nh
c3Q8SURCS2V5Kj4obnVsbHB0ciksIGVjKTsKIH0KIAotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBM
ZWdhY3lPYmplY3RTdG9yZTo6cHV0KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRGVwcmVjYXRlZDo6
U2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBF
eGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5T2JqZWN0U3Rv
cmU6OnB1dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2
YWx1ZSwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lPYmplY3RTdG9yZTo6cHV0Iik7CiAg
ICAgcmV0dXJuIHB1dChJREJEYXRhYmFzZUJhY2tlbmQ6OkFkZE9yVXBkYXRlLCBMZWdhY3lBbnk6
OmNyZWF0ZSh0aGlzKSwgc3RhdGUsIHZhbHVlLCBrZXksIGVjKTsKIH0KIAotUGFzc1JlZlB0cjxJ
REJSZXF1ZXN0PiBMZWdhY3lPYmplY3RTdG9yZTo6cHV0KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5T2JqZWN0U3RvcmU6OnB1dChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CiAgICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lPYmplY3RTdG9yZTo6cHV0Iik7CiAgICAg
cmV0dXJuIHB1dChJREJEYXRhYmFzZUJhY2tlbmQ6OkFkZE9yVXBkYXRlLCBMZWdhY3lBbnk6OmNy
ZWF0ZSh0aGlzKSwgc3RhdGUsIHZhbHVlLCBzdGF0aWNfY2FzdDxJREJLZXkqPihudWxscHRyKSwg
ZWMpOwogfQogCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IExlZ2FjeU9iamVjdFN0b3JlOjpwdXQo
SURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8TGVnYWN5QW55
PiBzb3VyY2UsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUm
IHZhbHVlLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5VmFsdWUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lPYmplY3RTdG9yZTo6cHV0
KElEQkRhdGFiYXNlQmFja2VuZDo6UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPExlZ2FjeUFu
eT4gc291cmNlLCBKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
JiB2YWx1ZSwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleVZhbHVlLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEZyb21FeGVjU3RhdGUoc3RhdGUpOworICAgIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0RnJvbUV4ZWNTdGF0
ZSgmc3RhdGUpOwogICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoY29udGV4dCk7CiAg
ICAgUmVmUHRyPElEQktleT4ga2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0YXRl
LCBrZXlWYWx1ZSk7CiAgICAgcmV0dXJuIHB1dChwdXRNb2RlLCBzb3VyY2UsIHN0YXRlLCB2YWx1
ZSwga2V5LnJlbGVhc2UoKSwgZWMpOwogfQogCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IExlZ2Fj
eU9iamVjdFN0b3JlOjpwdXQoSURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlIHB1dE1vZGUsIFBh
c3NSZWZQdHI8TGVnYWN5QW55PiBzb3VyY2UsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBFeGNl
cHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5T2JqZWN0U3RvcmU6
OnB1dChJREJEYXRhYmFzZUJhY2tlbmQ6OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxMZWdh
Y3lBbnk+IHNvdXJjZSwgSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYgdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewogICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKICAgICBpZiAobV9kZWxldGVk
KSB7CkBAIC0xNDQsOCArMTQ0LDggQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lPYmpl
Y3RTdG9yZTo6cHV0KElEQkRhdGFiYXNlQmFja2VuZDo6UHV0TW9kZSBwdXRNb2QKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gc2VyaWFsaXplZFZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoc3RhdGUs
IHZhbHVlLmpzVmFsdWUoKSwgbnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgaWYgKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVk
VmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSgmc3RhdGUsIHZhbHVlLmpzVmFs
dWUoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmIChzZXJpYWxpemVkVmFsdWUtPmhhc0Js
b2JVUkxzKCkpIHsKQEAgLTE1OCw3ICsxNTgsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IExl
Z2FjeU9iamVjdFN0b3JlOjpwdXQoSURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlIHB1dE1vZAog
ICAgIGNvbnN0IGJvb2wgdXNlc0luTGluZUtleXMgPSAha2V5UGF0aC5pc051bGwoKTsKICAgICBj
b25zdCBib29sIGhhc0tleUdlbmVyYXRvciA9IGF1dG9JbmNyZW1lbnQoKTsKIAotICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0RnJvbUV4
ZWNTdGF0ZShzdGF0ZSk7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRGcm9tRXhlY1N0YXRlKCZzdGF0ZSk7CiAgICAgRE9NUmVxdWVz
dFN0YXRlIHJlcXVlc3RTdGF0ZShjb250ZXh0KTsKIAogICAgIGlmIChwdXRNb2RlICE9IElEQkRh
dGFiYXNlQmFja2VuZDo6Q3Vyc29yVXBkYXRlICYmIHVzZXNJbkxpbmVLZXlzICYmIGtleSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2Fj
eU9iamVjdFN0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kv
TGVnYWN5T2JqZWN0U3RvcmUuaAppbmRleCAyOTFhZWI1ZTA0OWU3MzhmZWNlMzliMzhlZDNlZjEx
YmM5MzBmZDRiLi4yOTExYTBkNzAzYWRhOTMxYjA4NzM0MzRhOTUxN2ExYjhhMzAzZDQyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T2Jq
ZWN0U3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kv
TGVnYWN5T2JqZWN0U3RvcmUuaApAQCAtNjgsOCArNjgsOCBAQCBwdWJsaWM6CiAgICAgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3RyYW5z
YWN0aW9uOyB9CiAgICAgYm9vbCBhdXRvSW5jcmVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9tZXRh
ZGF0YS5hdXRvSW5jcmVtZW50OyB9CiAKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGFkZChK
U0M6OkV4ZWNTdGF0ZSosIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gcHV0KEpTQzo6RXhlY1N0YXRlKiwgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmLCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBhZGQoSlNDOjpFeGVjU3RhdGUmLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChKU0M6OkV4ZWNT
dGF0ZSYsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
RXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEV4Y2VwdGlv
bkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2Vw
dGlvbkNvZGUmKTsKQEAgLTc5LDEwICs3OSwxMCBAQCBwdWJsaWM6CiAKICAgICBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IGdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgRGVwcmVjYXRl
ZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJh
bmdlPiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gYWRkKEpT
Qzo6RXhlY1N0YXRlKiwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBjb25zdCBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBwdXQoSlNDOjpFeGVjU3RhdGUqLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIGNv
bnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQ
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChJREJEYXRhYmFzZUJhY2tlbmQ6OlB1dE1vZGUsIFBh
c3NSZWZQdHI8TGVnYWN5QW55PiwgSlNDOjpFeGVjU3RhdGUqLCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYsIFBhc3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gcHV0KElEQkRhdGFiYXNlQmFja2VuZDo6UHV0TW9kZSwgUGFzc1JlZlB0
cjxMZWdhY3lBbnk+IHNvdXJjZSwgSlNDOjpFeGVjU3RhdGUqLCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGFkZChKU0M6OkV4ZWNTdGF0ZSYsIERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlJiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwg
RXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gcHV0KEpTQzo6RXhl
Y1N0YXRlJiwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBjb25zdCBEZXByZWNhdGVkOjpTY3Jp
cHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBwdXQoSURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlLCBQYXNzUmVmUHRyPExlZ2FjeUFueT4s
IEpTQzo6RXhlY1N0YXRlJiwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBQYXNzUmVmUHRyPElE
QktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChJ
REJEYXRhYmFzZUJhY2tlbmQ6OlB1dE1vZGUsIFBhc3NSZWZQdHI8TGVnYWN5QW55PiBzb3VyY2Us
IEpTQzo6RXhlY1N0YXRlJiwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBjb25zdCBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJik7CiAKICAgICBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IGRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vQ2FwYWJpbGl0eVJhbmdlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vQ2FwYWJpbGl0eVJhbmdlLmNwcApp
bmRleCA2MTRlNGM2ZmQyNTg5Y2U0Y2FiZGYyNmY5YmQxMDJlNTg5YTE3ZjJmLi40MmE4NWVmNmNi
ZTBhMjBmZGRkMzRjMTdjMWUwMTcxZTdlZjZiYzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL0NhcGFiaWxpdHlSYW5nZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9DYXBhYmlsaXR5UmFuZ2UuY3BwCkBAIC01MCw3ICs1
MCw3IEBAIENhcGFiaWxpdHlSYW5nZTo6Q2FwYWJpbGl0eVJhbmdlKGNvbnN0IFJlYWx0aW1lTWVk
aWFTb3VyY2VDYXBhYmlsaXR5UmFuZ2UmIHJhbmdlCiB7CiB9CiAKLXN0YXRpYyBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSBzY3JpcHRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFJlYWx0aW1l
TWVkaWFTb3VyY2VDYXBhYmlsaXR5UmFuZ2U6OlZhbHVlVW5pb24mIHZhbHVlLCBSZWFsdGltZU1l
ZGlhU291cmNlQ2FwYWJpbGl0eVJhbmdlOjpUeXBlIHR5cGUpCitzdGF0aWMgRGVwcmVjYXRlZDo6
U2NyaXB0VmFsdWUgc2NyaXB0VmFsdWUoRXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgUmVhbHRpbWVN
ZWRpYVNvdXJjZUNhcGFiaWxpdHlSYW5nZTo6VmFsdWVVbmlvbiYgdmFsdWUsIFJlYWx0aW1lTWVk
aWFTb3VyY2VDYXBhYmlsaXR5UmFuZ2U6OlR5cGUgdHlwZSkKIHsKICAgICAvLyBOT1RFOiB0aGUg
c3BlYyBzYXlzOgogICAgIC8vICAgICAgLi4uIGFuIGltcGxlbWVudGF0aW9uIHNob3VsZCBtYWtl
IGEgcmVhc29uYWJsZSBhdHRlbXB0IHRvIHRyYW5zbGF0ZSBhbmQgc2NhbGUgdGhlIGhhcmR3YXJl
J3Mgc2V0dGluZwpAQCAtNjMsMjggKzYzLDI4IEBAIHN0YXRpYyBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSBzY3JpcHRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFJlYWx0aW1lTWVkaWFTCiAg
ICAgCiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlQ2Fw
YWJpbGl0eVJhbmdlOjpGbG9hdDoKLSAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlKGV4ZWMtPnZtKCksIEpTVmFsdWUodmFsdWUuYXNGbG9hdCkpOworICAgICAgICByZXR1cm4g
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUoc3RhdGUudm0oKSwgSlNWYWx1ZSh2YWx1ZS5hc0Zsb2F0
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxp
dHlSYW5nZTo6VUxvbmc6Ci0gICAgICAgIHJldHVybiBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZShl
eGVjLT52bSgpLCBKU1ZhbHVlKHZhbHVlLmFzVUxvbmcpKTsKKyAgICAgICAgcmV0dXJuIERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlKHN0YXRlLnZtKCksIEpTVmFsdWUodmFsdWUuYXNVTG9uZykpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXR5UmFu
Z2U6OlVuZGVmaW5lZDoKLSAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKGV4
ZWMtPnZtKCksIGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4gRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUoc3RhdGUudm0oKSwganNVbmRlZmluZWQoKSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZShleGVjLT52bSgpLCBqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4gRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUoc3RhdGUudm0oKSwganNVbmRlZmluZWQoKSk7CiB9CiAKLURlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlIENhcGFiaWxpdHlSYW5nZTo6bWluKEV4ZWNTdGF0ZSogZXhlYykg
Y29uc3QKK0RlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIENhcGFiaWxpdHlSYW5nZTo6bWluKEV4ZWNT
dGF0ZSYgc3RhdGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHNjcmlwdFZhbHVlKGV4ZWMsIG1fcmFu
Z2VJbmZvLm1pbigpLCBtX3JhbmdlSW5mby50eXBlKCkpOworICAgIHJldHVybiBzY3JpcHRWYWx1
ZShzdGF0ZSwgbV9yYW5nZUluZm8ubWluKCksIG1fcmFuZ2VJbmZvLnR5cGUoKSk7CiB9CiAKLURl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIENhcGFiaWxpdHlSYW5nZTo6bWF4KEV4ZWNTdGF0ZSogZXhl
YykgY29uc3QKK0RlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIENhcGFiaWxpdHlSYW5nZTo6bWF4KEV4
ZWNTdGF0ZSYgc3RhdGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHNjcmlwdFZhbHVlKGV4ZWMsIG1f
cmFuZ2VJbmZvLm1heCgpLCBtX3JhbmdlSW5mby50eXBlKCkpOworICAgIHJldHVybiBzY3JpcHRW
YWx1ZShzdGF0ZSwgbV9yYW5nZUluZm8ubWF4KCksIG1fcmFuZ2VJbmZvLnR5cGUoKSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vQ2FwYWJpbGl0eVJhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL0NhcGFiaWxpdHlSYW5nZS5oCmluZGV4IDdkOGJiYTNiZTBjMjE0NDUyN2Y5
MTgxM2I5OTRhMTBjMGQ0NThlNjIuLmMwNDE0ODViMTc1NDFmODJlN2Y5ZGEwNjcyNDcxNjAyODJi
ZTM4ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vQ2Fw
YWJpbGl0eVJhbmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9D
YXBhYmlsaXR5UmFuZ2UuaApAQCAtNDMsOCArNDMsOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMg
UmVmPENhcGFiaWxpdHlSYW5nZT4gY3JlYXRlKGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBh
YmlsaXR5UmFuZ2UmKTsKIAotICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1pbihKU0M6OkV4
ZWNTdGF0ZSopIGNvbnN0OwotICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1heChKU0M6OkV4
ZWNTdGF0ZSopIGNvbnN0OworICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1pbihKU0M6OkV4
ZWNTdGF0ZSYpIGNvbnN0OworICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1heChKU0M6OkV4
ZWNTdGF0ZSYpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydGVkKCkgY29uc3QgeyByZXR1cm4gbV9y
YW5nZUluZm8uc3VwcG9ydGVkKCk7IH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIuaAppbmRl
eCBhNGMzYmVjYmIxZDc3ZDM4YzhlOTNjODRmNDg2MzM5ZWY3NGUzZTZmLi5hYTdhYjNjNmNmMjVl
MmVhYjc3ZGI2MTJiNzBkZDdkNTM4M2NiZTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW1Db250cm9sbGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtQ29udHJvbGxlci5oCkBAIC00OCw5
ICs0OCw5IEBAIHB1YmxpYzoKIAogICAgIFJlYWRhYmxlSlNTdHJlYW0mIHN0cmVhbSgpIHsgcmV0
dXJuIG1fc3RyZWFtOyB9CiAKLSAgICB2b2lkIGVycm9yKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBtX3N0cmVhbS5lcnJvcigq
c3RhdGUsIHZhbHVlLCBlYyk7IH0KKyAgICB2b2lkIGVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBtX3N0cmVhbS5lcnJv
cihzdGF0ZSwgdmFsdWUsIGVjKTsgfQogCi0gICAgdm9pZCBlbnF1ZXVlKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IG1fc3RyZWFtLmVucXVldWUoKnN0YXRlLCB2
YWx1ZSk7IH0KKyAgICB2b2lkIGVucXVldWUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpIHsgbV9zdHJlYW0uZW5xdWV1ZShzdGF0ZSwgdmFsdWUpOyB9CiAKICAgICB2
b2lkIHJlZigpIHsgbV9zdHJlYW0ucmVmKCk7IH0KICAgICB2b2lkIGRlcmVmKCkgeyBtX3N0cmVh
bS5kZXJlZigpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JKUy5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtCmluZGV4IDNlZjM1ZDExNjBmZTEzMGMzY2Q1NWNlMDMxMTRjYTIzNjc3
MDExZWUuLjg0NjlkZWM3OWI3MTE5NGRiMTNlNjllMjBiNjgzMzc0NmQ5OGFkYjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCkBA
IC0xNjYsMTAgKzE2NiwxMCBAQCBzdWIgR2VuZXJhdGVFdmVudExpc3RlbmVyQ2FsbAogICAgIG15
IEBHZW5lcmF0ZUV2ZW50TGlzdGVuZXJJbXBsID0gKCk7CiAKICAgICBwdXNoKEBHZW5lcmF0ZUV2
ZW50TGlzdGVuZXJJbXBsLCA8PEVORCk7Ci0gICAgSlNWYWx1ZSBsaXN0ZW5lciA9IGV4ZWMtPmFy
Z3VtZW50KDEpOworICAgIEpTVmFsdWUgbGlzdGVuZXIgPSBzdGF0ZS0+YXJndW1lbnQoMSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFsaXN0ZW5lci5pc09iamVjdCgpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBpbXBsLiR7ZnVuY3Rpb25OYW1lfUV2
ZW50TGlzdGVuZXIoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnRvQXRvbWljU3Ry
aW5nKGV4ZWMpLCBjcmVhdGVKU0V2ZW50TGlzdGVuZXJGb3Ikc3VmZml4KCpleGVjLCAqYXNPYmpl
Y3QobGlzdGVuZXIpLCAqY2FzdGVkVGhpcykkcGFzc1JlZlB0ckhhbmRsaW5nLCBleGVjLT5hcmd1
bWVudCgyKS50b0Jvb2xlYW4oZXhlYykpOworICAgIGltcGwuJHtmdW5jdGlvbk5hbWV9RXZlbnRM
aXN0ZW5lcihzdGF0ZS0+YXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0F0b21pY1N0cmlu
ZyhzdGF0ZSksIGNyZWF0ZUpTRXZlbnRMaXN0ZW5lckZvciRzdWZmaXgoKnN0YXRlLCAqYXNPYmpl
Y3QobGlzdGVuZXIpLCAqY2FzdGVkVGhpcykkcGFzc1JlZlB0ckhhbmRsaW5nLCBzdGF0ZS0+YXJn
dW1lbnQoMikudG9Cb29sZWFuKHN0YXRlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIEVORAogICAgIHJldHVybiBAR2VuZXJhdGVFdmVudExpc3RlbmVySW1w
bDsKQEAgLTM5MiwxMiArMzkyLDEyIEBAIHN1YiBHZW5lcmF0ZUdldE93blByb3BlcnR5U2xvdEJv
ZHkKICAgICBteSAkb3duUHJvcGVydHlDaGVjayA9IHN1YiB7CiAgICAgICAgIGlmICgkaGFzQXR0
cmlidXRlcykgewogICAgICAgICAgICAgaWYgKCRpbmxpbmVkKSB7Ci0gICAgICAgICAgICAgICAg
cHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICBpZiAoJHtuYW1lc3BhY2VNYXliZX1n
ZXRTdGF0aWNWYWx1ZVNsb3Q8JGNsYXNzTmFtZSwgQmFzZT4oZXhlYywgKmluZm8oKS0+c3RhdGlj
UHJvcEhhc2hUYWJsZSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KSlcbiIpOworICAg
ICAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAgaWYgKCR7bmFt
ZXNwYWNlTWF5YmV9Z2V0U3RhdGljVmFsdWVTbG90PCRjbGFzc05hbWUsIEJhc2U+KHN0YXRlLCAq
aW5mbygpLT5zdGF0aWNQcm9wSGFzaFRhYmxlLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNs
b3QpKVxuIik7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHB1c2goQGdl
dE93blByb3BlcnR5U2xvdEltcGwsICIgICAgaWYgKCR7bmFtZXNwYWNlTWF5YmV9Z2V0U3RhdGlj
VmFsdWVTbG90PCRjbGFzc05hbWUsIEJhc2U+KGV4ZWMsICR7Y2xhc3NOYW1lfVRhYmxlLCB0aGlz
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKVxuIik7CisgICAgICAgICAgICAgICAgcHVzaChA
Z2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICBpZiAoJHtuYW1lc3BhY2VNYXliZX1nZXRTdGF0
aWNWYWx1ZVNsb3Q8JGNsYXNzTmFtZSwgQmFzZT4oc3RhdGUsICR7Y2xhc3NOYW1lfVRhYmxlLCB0
aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKVxuIik7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAi
ICAgIGlmIChCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lLCBzbG90KSlcbiIpOworICAgICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90
SW1wbCwgIiAgICBpZiAoQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIHN0YXRl
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKVxuIik7CiAgICAgICAgIH0KICAgICAgICAgcHVzaChAZ2V0
T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICAgICAgcmV0dXJuIHRydWU7XG4iKTsKICAgICB9OwpA
QCAtNDA3LDcgKzQwNyw3IEBAIHN1YiBHZW5lcmF0ZUdldE93blByb3BlcnR5U2xvdEJvZHkKICAg
ICAjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2Rmbi1uYW1lZC1wcm9wZXJ0aWVz
LW9iamVjdAogICAgIG15ICRwcm90b3R5cGVDaGVjayA9IHN1YiB7CiAgICAgICAgIHB1c2goQGdl
dE93blByb3BlcnR5U2xvdEltcGwsICIgICAgJHtuYW1lc3BhY2VNYXliZX1KU1ZhbHVlIHByb3Rv
ID0gdGhpc09iamVjdC0+cHJvdG90eXBlKCk7XG4iKTsKLSAgICAgICAgcHVzaChAZ2V0T3duUHJv
cGVydHlTbG90SW1wbCwgIiAgICBpZiAocHJvdG8uaXNPYmplY3QoKSAmJiBqc0Nhc3Q8JHtuYW1l
c3BhY2VNYXliZX1KU09iamVjdCo+KHByb3RvKS0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlO
YW1lKSlcbiIpOworICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgIGlm
IChwcm90by5pc09iamVjdCgpICYmIGpzQ2FzdDwke25hbWVzcGFjZU1heWJlfUpTT2JqZWN0Kj4o
cHJvdG8pLT5oYXNQcm9wZXJ0eShzdGF0ZSwgcHJvcGVydHlOYW1lKSlcbiIpOwogICAgICAgICBw
dXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiIp
OwogICAgIH07CiAKQEAgLTQ0Myw3ICs0NDMsNyBAQCBzdWIgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0
eVNsb3RCb2R5CiAgICAgICAgICMgVGhpcyBjb25kaXRpb24gaXMgdG8gbWFrZSBzdXJlIHdlIHVz
ZSB0aGUgc3ViY2xhc3MnIG5hbWVkIGdldHRlciBpbnN0ZWFkIG9mIHRoZSBiYXNlIGNsYXNzIG9u
ZSB3aGVuIHBvc3NpYmxlLgogICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAi
ICAgIGlmICh0aGlzT2JqZWN0LT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpIHtcbiIpOwogICAgICAg
ICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgICAgICBKU1ZhbHVlIHZhbHVlO1xu
Iik7Ci0gICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAgICAgIGlmICh0
aGlzT2JqZWN0LT5uYW1lR2V0dGVyKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUpKSB7XG4iKTsK
KyAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICAgICAgaWYgKHRoaXNP
YmplY3QtPm5hbWVHZXR0ZXIoc3RhdGUsIHByb3BlcnR5TmFtZSwgdmFsdWUpKSB7XG4iKTsKICAg
ICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICAgICAgICAgIHNsb3Quc2V0
VmFsdWUodGhpc09iamVjdCwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0sIHZhbHVl
KTtcbiIpOwogICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgICAgICAg
ICAgcmV0dXJuIHRydWU7XG4iKTsKICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1w
bCwgIiAgICAgICAgfVxuIik7CkBAIC00NTYsNyArNDU2LDcgQEAgc3ViIEdlbmVyYXRlR2V0T3du
UHJvcGVydHlTbG90Qm9keQogICAgIH0KIAogICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yIn0pIHsK
LSAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICBpZiAodGhpc09iamVj
dC0+Z2V0T3duUHJvcGVydHlTbG90RGVsZWdhdGUoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSlc
biIpOworICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgIGlmICh0aGlz
T2JqZWN0LT5nZXRPd25Qcm9wZXJ0eVNsb3REZWxlZ2F0ZShzdGF0ZSwgcHJvcGVydHlOYW1lLCBz
bG90KSlcbiIpOwogICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgICAg
ICByZXR1cm4gdHJ1ZTtcbiIpOwogICAgIH0KIApAQCAtMTIwNSw3ICsxMjA1LDcgQEAgc3ViIEdl
bmVyYXRlSGVhZGVyCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAkZXhwb3J0TGFiZWwuIkpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwg
SlNET01HbG9iYWxPYmplY3QqLCAkaW1wbFR5cGUqKTtcbiIpOwogICAgICAgICB9Ci0gICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICJpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsICRpbXBsVHlwZSYg
aW1wbCkgeyByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsICZpbXBsKTsgfVxuIik7Cisg
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCAkaW1w
bFR5cGUmIGltcGwpIHsgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgJmltcGwpOyB9
XG4iKTsKIAogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiSlNDOjpKU1ZhbHVlIHRvSlNO
ZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosICRpbXBsVHlw
ZSopO1xuIik7CiAgICAgfQpAQCAtMTQ5NCwxMCArMTQ5NCwxMCBAQCBzdWIgR2VuZXJhdGVPdmVy
bG9hZGVkRnVuY3Rpb24KICAgICAjIEZJWE1FOiBJbXBsZW1lbnQgc3VwcG9ydCBmb3Igb3Zlcmxv
YWRlZCBmdW5jdGlvbnMgd2l0aCB2YXJpYWRpYyBhcmd1bWVudHMuCiAgICAgbXkgJGxlbmd0aE9m
TG9uZ2VzdE92ZXJsb2FkZWRGdW5jdGlvblBhcmFtZXRlckxpc3QgPSBMZW5ndGhPZkxvbmdlc3RG
dW5jdGlvblBhcmFtZXRlckxpc3QoJGZ1bmN0aW9uLT57b3ZlcmxvYWRzfSk7CiAKLSAgICBwdXNo
KEBpbXBsQ29udGVudCwgIkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtmdW5jdGlvbk5h
bWV9KEV4ZWNTdGF0ZSogZXhlYylcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke2Z1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0ZSlc
biIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CiB7Ci0gICAgc2l6ZV90IGFyZ3ND
b3VudCA9IHN0ZDo6bWluPHNpemVfdD4oJGxlbmd0aE9mTG9uZ2VzdE92ZXJsb2FkZWRGdW5jdGlv
blBhcmFtZXRlckxpc3QsIGV4ZWMtPmFyZ3VtZW50Q291bnQoKSk7CisgICAgc2l6ZV90IGFyZ3ND
b3VudCA9IHN0ZDo6bWluPHNpemVfdD4oJGxlbmd0aE9mTG9uZ2VzdE92ZXJsb2FkZWRGdW5jdGlv
blBhcmFtZXRlckxpc3QsIHN0YXRlLT5hcmd1bWVudENvdW50KCkpOwogRU5ECiAKICAgICBteSAl
ZmV0Y2hlZEFyZ3VtZW50cyA9ICgpOwpAQCAtMTUwOSw3ICsxNTA5LDcgQEAgRU5ECiAKICAgICAg
ICAgZm9yZWFjaCBteSAkcGFyYW1ldGVySW5kZXggKEBuZWVkZWRBcmd1bWVudHMpIHsKICAgICAg
ICAgICAgIG5leHQgaWYgZXhpc3RzICRmZXRjaGVkQXJndW1lbnRzeyRwYXJhbWV0ZXJJbmRleH07
Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIGFyZyRwYXJhbWV0
ZXJJbmRleChleGVjLT5hcmd1bWVudCgkcGFyYW1ldGVySW5kZXgpKTtcbiIpOworICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSBhcmckcGFyYW1ldGVySW5kZXgoc3Rh
dGUtPmFyZ3VtZW50KCRwYXJhbWV0ZXJJbmRleCkpO1xuIik7CiAgICAgICAgICAgICAkZmV0Y2hl
ZEFyZ3VtZW50c3skcGFyYW1ldGVySW5kZXh9ID0gMTsKICAgICAgICAgfQogCkBAIC0xNTE3LDE2
ICsxNTE3LDE2IEBAIEVORAogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNpZiAke2NvbmRp
dGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogCiAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIGlmICgkcGFyYW1ldGVyc0NoZWNrKVxuIik7Ci0gICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gJHtmdW5jdGlvbk5hbWV9JG92ZXJsb2Fk
LT57b3ZlcmxvYWRJbmRleH0oZXhlYyk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgICAgIHJldHVybiAke2Z1bmN0aW9uTmFtZX0kb3ZlcmxvYWQtPntvdmVybG9hZEluZGV4
fShzdGF0ZSk7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIjZW5kaWZcblxuIikg
aWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogCiAgICAgfQogICAgIGlmICgkbGVhc3ROdW1NYW5kYXRv
cnlQYXJhbXMgPj0gMSkgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoYXJn
c0NvdW50IDwgJGxlYXN0TnVtTWFuZGF0b3J5UGFyYW1zKVxuIik7Ci0gICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3Ioc3RhdGUpKTtcbiIpOwogICAgIH0KICAgICBwdXNoKEBpbXBsQ29udGVudCwg
PDxFTkQpOwotICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOworICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKHN0YXRlKTsKIH0KIAogRU5ECkBAIC0xNzAzLDkgKzE3MDMsOSBAQCBz
dWIgR2V0SW5kZXhlZEdldHRlckV4cHJlc3Npb24KIHsKICAgICBteSAkaW5kZXhlZEdldHRlckZ1
bmN0aW9uID0gc2hpZnQ7CiAgICAgaWYgKCRpbmRleGVkR2V0dGVyRnVuY3Rpb24tPnNpZ25hdHVy
ZS0+dHlwZSBlcSAiRE9NU3RyaW5nIikgewotICAgICAgICByZXR1cm4gImpzU3RyaW5nT3JVbmRl
ZmluZWQoZXhlYywgdGhpc09iamVjdC0+aW1wbCgpLml0ZW0oaW5kZXgpKSI7CisgICAgICAgIHJl
dHVybiAianNTdHJpbmdPclVuZGVmaW5lZChzdGF0ZSwgdGhpc09iamVjdC0+aW1wbCgpLml0ZW0o
aW5kZXgpKSI7CiAgICAgfQotICAgIHJldHVybiAidG9KUyhleGVjLCB0aGlzT2JqZWN0LT5nbG9i
YWxPYmplY3QoKSwgdGhpc09iamVjdC0+aW1wbCgpLml0ZW0oaW5kZXgpKSI7CisgICAgcmV0dXJu
ICJ0b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgdGhpc09iamVjdC0+aW1w
bCgpLml0ZW0oaW5kZXgpKSI7CiB9CiAKIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCkBAIC0y
MDIxLDIwICsyMDIxLDIwIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgaWYgKFBy
b3RvdHlwZU92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCgkaW50ZXJmYWNlKSkgewogICAgICAg
ICBteSAkbnVtUHJvdG90eXBlQXR0cmlidXRlcyA9IFByb3RvdHlwZUF0dHJpYnV0ZUNvdW50KCRp
bnRlcmZhY2UpOwogICAgICAgICBpZiAoSXNET01HbG9iYWxPYmplY3QoJGludGVyZmFjZSkpIHsK
LSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiYm9vbCAke2NsYXNzTmFtZX1Qcm90b3R5
cGU6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOworICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJib29sICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6
Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOwogICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7XG4iKTsKKyAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpO1xuIik7CiAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFSQU0odm0pO1xuIik7CiAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7
Y2xhc3NOYW1lfVByb3RvdHlwZSo+KG9iamVjdCk7XG4iKTsKIAogICAgICAgICAgICAgaWYgKCRu
dW1Db25zdGFudHMgZXEgMCAmJiAkbnVtRnVuY3Rpb25zIGVxIDAgJiYgJG51bVByb3RvdHlwZUF0
dHJpYnV0ZXMgZXEgMCkgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lLCBzbG90KTtcbiIpOyAgICAgICAgCisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBz
dGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KTtcbiIpOyAgICAgICAgCiAgICAgICAgICAgICB9IGVs
c2lmICgkbnVtQ29uc3RhbnRzIGVxIDAgJiYgJG51bVByb3RvdHlwZUF0dHJpYnV0ZXMgZXEgMCkg
ewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBnZXRTdGF0
aWNGdW5jdGlvblNsb3Q8SlNPYmplY3Q+KGV4ZWMsICR7Y2xhc3NOYW1lfVByb3RvdHlwZVRhYmxl
LCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpO1xuIik7CisgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxKU09i
amVjdD4oc3RhdGUsICR7Y2xhc3NOYW1lfVByb3RvdHlwZVRhYmxlLCB0aGlzT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpO1xuIik7CiAgICAgICAgICAgICB9IGVsc2lmICgkbnVtRnVuY3Rpb25z
IGVxIDAgJiYgJG51bVByb3RvdHlwZUF0dHJpYnV0ZXMgZXEgMCkgewotICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8JHtjbGFz
c05hbWV9UHJvdG90eXBlLCBKU09iamVjdD4oZXhlYywgJHtjbGFzc05hbWV9UHJvdG90eXBlVGFi
bGUsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7XG4iKTsKKyAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PCR7Y2xh
c3NOYW1lfVByb3RvdHlwZSwgSlNPYmplY3Q+KHN0YXRlLCAke2NsYXNzTmFtZX1Qcm90b3R5cGVU
YWJsZSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTtcbiIpOwogICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4g
Z2V0U3RhdGljUHJvcGVydHlTbG90PCR7Y2xhc3NOYW1lfVByb3RvdHlwZSwgSlNPYmplY3Q+KGV4
ZWMsICR7Y2xhc3NOYW1lfVByb3RvdHlwZVRhYmxlLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IHNsb3QpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0
dXJuIGdldFN0YXRpY1Byb3BlcnR5U2xvdDwke2NsYXNzTmFtZX1Qcm90b3R5cGUsIEpTT2JqZWN0
PihzdGF0ZSwgJHtjbGFzc05hbWV9UHJvdG90eXBlVGFibGUsIHRoaXNPYmplY3QsIHByb3BlcnR5
TmFtZSwgc2xvdCk7XG4iKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAifVxuXG4iKTsKICAgICAgICAgfSBlbHNpZiAoJG51bUNvbnN0YW50cyA+IDAgfHwg
JG51bUZ1bmN0aW9ucyA+IDAgfHwgJG51bVByb3RvdHlwZUF0dHJpYnV0ZXMgPiAwKSB7CkBAIC0y
MDY2LDEyICsyMDY2LDEyIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgfQogCiAg
ICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbU5hbWVkR2V0
dGVyT25Qcm90b3R5cGUifSkgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtj
bGFzc05hbWV9UHJvdG90eXBlOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYg
c2xvdClcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9
UHJvdG90eXBlOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpXG4i
KTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX1Qcm90
b3R5cGUqPihjZWxsKTtcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAo
dGhpc09iamVjdC0+cHV0RGVsZWdhdGUoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkp
XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKHRoaXNPYmplY3QtPnB1
dERlbGVnYXRlKHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSlcbiIpOwogICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuO1xuIik7Ci0gICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBzbG90KTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBC
YXNlOjpwdXQodGhpc09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpO1xu
Iik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKICAgICB9CiAKQEAgLTIx
NTIsNyArMjE1Miw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgIyBBdHRyaWJ1
dGVzCiAgICAgaWYgKCRoYXNHZXR0ZXIpIHsKICAgICAgICAgaWYgKCEkaW50ZXJmYWNlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90In0pIHsKLSAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiYm9vbCAke2NsYXNzTmFtZX06OmdldE93blByb3BlcnR5
U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOworICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJib29sICR7Y2xhc3NOYW1lfTo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYgc2xvdClcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7
XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9Kj4ob2JqZWN0KTtcbiIpOwogICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpO1xuIik7CkBAIC0yMTYzLDcgKzIxNjMsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1l
bnRhdGlvbgogICAgICAgICBpZiAoJGluZGV4ZWRHZXR0ZXJGdW5jdGlvbiB8fCAkbmFtZWRHZXR0
ZXJGdW5jdGlvbgogICAgICAgICAgICAgICAgIHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJDdXN0b21OYW1lZEdldHRlciJ9CiAgICAgICAgICAgICAgICAgfHwgJGludGVyZmFj
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVz
Y3JpcHRvciJ9KSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wgJHtjbGFz
c05hbWV9OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOworICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJib29sICR7Y2xhc3NOYW1lfTo6Z2V0T3duUHJv
cGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNp
Z25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KVxuIik7CiAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihvYmplY3QpO1xuIik7CiAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XG4iKTsKQEAgLTIxNzUsNyArMjE3NSw3IEBAIHN1YiBH
ZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgaWYgKCRnZW5lcmF0ZWRQcm9w
ZXJ0eU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBJZGVudGlmaWVyIHBy
b3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpO1xuIik7CisgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUg
PSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7XG4iKTsKICAgICAgICAgICAgICAgICAk
Z2VuZXJhdGVkUHJvcGVydHlOYW1lID0gMTsKICAgICAgICAgICAgIH07CiAKQEAgLTIyMDIsNyAr
MjIwMiw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgIyBU
aGlzIGNvbmRpdGlvbiBpcyB0byBtYWtlIHN1cmUgd2UgdXNlIHRoZSBzdWJjbGFzcycgbmFtZWQg
Z2V0dGVyIGluc3RlYWQgb2YgdGhlIGJhc2UgY2xhc3Mgb25lIHdoZW4gcG9zc2libGUuCiAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKHRoaXNPYmplY3QtPmNsYXNz
SW5mbygpID09IGluZm8oKSkge1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgICAgIEpTVmFsdWUgdmFsdWU7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAgICAgaWYgKHRoaXNPYmplY3QtPm5hbWVHZXR0ZXIoZXhlYywgcHJv
cGVydHlOYW1lLCB2YWx1ZSkpIHtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICAgICBpZiAodGhpc09iamVjdC0+bmFtZUdldHRlcihzdGF0ZSwgcHJvcGVydHlO
YW1lLCB2YWx1ZSkpIHtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBSZWFkT25seSB8IERvbnREZWxl
dGUgfCBEb250RW51bSwgdmFsdWUpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiIpOwogICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICAgICB9XG4iKTsKQEAgLTIyMTIsMTEgKzIyMTIsMTEgQEAg
c3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KIAogICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2Ny
aXB0b3IifSkgewogICAgICAgICAgICAgICAgICYkcHJvcGVydHlOYW1lR2VuZXJhdGlvbigpOwot
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICh0aGlzT2JqZWN0LT5n
ZXRPd25Qcm9wZXJ0eVNsb3REZWxlZ2F0ZShleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKVxuIik7
CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKHRoaXNPYmplY3Qt
PmdldE93blByb3BlcnR5U2xvdERlbGVnYXRlKHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKVxu
Iik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiB0
cnVlO1xuIik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXNPYmplY3Qs
IGV4ZWMsIGluZGV4LCBzbG90KTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVjdCwg
c3RhdGUsIGluZGV4LCBzbG90KTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ9XG5cbiIpOwogICAgICAgICB9CiAKQEAgLTIyMzUsMTAgKzIyMzUsMTAgQEAgc3ViIEdlbmVy
YXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIG15ICRhdHRyaWJ1dGVDb25kaXRpb25hbFN0
cmluZyA9ICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRhdHRyaWJ1
dGUtPnNpZ25hdHVyZSk7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNpZiAke2F0
dHJpYnV0ZUNvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGF0dHJpYnV0ZUNvbmRpdGlvbmFsU3Ry
aW5nOwogCi0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkVuY29kZWRKU1ZhbHVlICR7
Z2V0RnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpXG4iKTsKKyAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiRW5jb2RlZEpTVmFsdWUgJHtnZXRGdW5jdGlvbk5hbWV9KEV4ZWNT
dGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xu
Iik7CiAKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTShl
eGVjKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5V
U0VEX1BBUkFNKHNsb3RCYXNlKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7XG4iKTsKICAgICAgICAgICAgIGlmICghJGF0
dHJpYnV0ZS0+aXNTdGF0aWMgfHwgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlID1+IC9Db25z
dHJ1Y3RvciQvKSB7CkBAIC0yMjQ5LDE0ICsyMjQ5LDE0IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVu
dGF0aW9uCiAgICAgICAgICAgICAgICAgICAgIGlmIChJbnRlcmZhY2VSZXF1aXJlc0F0dHJpYnV0
ZXNPbkluc3RhbmNlRm9yQ29tcGF0aWJpbGl0eSgkaW50ZXJmYWNlKSkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9KiBjYXN0ZWRU
aGlzT2JqZWN0ID0gIiAuIEdldENhc3RpbmdIZWxwZXJGb3JUaGlzT2JqZWN0KCRpbnRlcmZhY2Up
IC4gIihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7XG4iKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpc09i
amVjdCkpXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsIFwiJGludGVyZmFjZU5h
bWVcIiwgXCIkbmFtZVwiKTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqc3RhdGUsIFwi
JGludGVyZmFjZU5hbWVcIiwgXCIkbmFtZVwiKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9KiBjYXN0ZWRUaGlzID0gIiAuIEdldENhc3RpbmdI
ZWxwZXJGb3JUaGlzT2JqZWN0KCRpbnRlcmZhY2UpIC4gIihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkge1xuIik7CiAgICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDwke2NsYXNzTmFtZX1Q
cm90b3R5cGUqPihzbG90QmFzZSkpXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9y
KCpleGVjLCBcIiRpbnRlcmZhY2VOYW1lXCIsIFwiJG5hbWVcIik7XG4iKTsKLSAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5
cGVFcnJvcigqZXhlYywgXCIkaW50ZXJmYWNlTmFtZVwiLCBcIiRuYW1lXCIpO1xuIik7CisgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAgcmV0dXJuIHJl
cG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqc3RhdGUsIFwiJGludGVyZmFjZU5hbWVcIiwgXCIk
bmFtZVwiKTtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgXCIkaW50ZXJmYWNlTmFt
ZVwiLCBcIiRuYW1lXCIpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIH1cbiIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTIy
OTMsNyArMjI5Myw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICBp
ZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNoZWNrU2VjdXJpdHkifSAmJgog
ICAgICAgICAgICAgICAgICEkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJEb05vdENoZWNrU2VjdXJpdHkifSAmJgogICAgICAgICAgICAgICAgICEkYXR0cmlidXRl
LT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJEb05vdENoZWNrU2VjdXJpdHlPbkdl
dHRlciJ9KSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFC
aW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coZXhlYywgY2FzdGVk
VGhpcy0+aW1wbCgpKSlcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KHN0
YXRlLCBjYXN0ZWRUaGlzLT5pbXBsKCkpKVxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
XG4iKTsKICAgICAgICAgICAgIH0KIApAQCAtMjMwMyw3ICsyMzAzLDcgQEAgc3ViIEdlbmVyYXRl
SW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPiIsICJXRUJfUkVQTEFZIik7CiAKICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiNpZiBFTkFCTEUoV0VCX1JFUExBWSlcbiIpOwotICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGUt
PmxleGljYWxHbG9iYWxPYmplY3QoKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIElucHV0Q3Vyc29yJiBjdXJzb3IgPSBnbG9iYWxPYmplY3QtPmlucHV0Q3Vy
c29yKCk7XG4iKTsKIAogICAgICAgICAgICAgICAgIG15ICRuYXRpdmVUeXBlID0gR2V0TmF0aXZl
VHlwZSgkdHlwZSk7CkBAIC0yMzE0LDcgKzIzMTQsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRh
dGlvbgogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAkbWVtb2l6
ZWRUeXBlIG1lbW9pemVkUmVzdWx0ID0gY2FzdGVkVGhpcy0+aW1wbCgpLiRpbXBsR2V0dGVyRnVu
Y3Rpb25OYW1lKCIgLiBqb2luKCIsICIsIEBhcmd1bWVudHMpIC4gIik7XG4iKTsKICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgY3Vyc29yLmFwcGVuZElucHV0PE1l
bW9pemVkRE9NUmVzdWx0PCRtZW1vaXplZFR5cGU+PihiaW5kaW5nTmFtZS5nZXQoKS5zdHJpbmco
KSwgbWVtb2l6ZWRSZXN1bHQsICRleGNlcHRpb25Db2RlKTtcbiIpOwogICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9ICIgLiBOYXRpdmVU
b0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlTmFtZSwgIm1lbW9p
emVkUmVzdWx0IiwgImNhc3RlZFRoaXMiKSAuICI7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTtcbiIpIGlm
ICRnZXR0ZXJFeGNlcHRpb25zOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTtcbiIpIGlmICRnZXR0ZXJFeGNlcHRp
b25zOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICB9XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IlxuIik7CkBAIC0yMzI0LDcgKzIzMjQsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgog
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBpZiAoaW5wdXQgJiYg
aW5wdXQtPmNvbnZlcnRUbzwkbWVtb2l6ZWRUeXBlPihtZW1vaXplZFJlc3VsdCkpIHtcbiIpOwog
ICAgICAgICAgICAgICAgICMgRklYTUU6IHRoZSBnZW5lcmF0ZWQgY29kZSBzaG91bGQgcmVwb3J0
IGFuIGVycm9yIGlmIGFuIGlucHV0IGNhbm5vdCBiZSBmZXRjaGVkIG9yIGNvbnZlcnRlZC4KICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIEpTVmFsdWUgcmVz
dWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRl
cmZhY2VOYW1lLCAibWVtb2l6ZWRSZXN1bHQiLCAiY2FzdGVkVGhpcyIpIC4gIjtcbiIpOwotICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIGlucHV0LT5leGNlcHRpb25Db2RlKCkpO1xuIikgaWYgJGdldHRlckV4Y2VwdGlv
bnM7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICAgICBzZXRE
T01FeGNlcHRpb24oc3RhdGUsIGlucHV0LT5leGNlcHRpb25Db2RlKCkpO1xuIikgaWYgJGdldHRl
ckV4Y2VwdGlvbnM7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7XG4iKTsKICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgfVxuIik7CiAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgfVxuIik7CkBAIC0yMzMyLDE3ICsyMzMyLDE3IEBAIHN1YiBH
ZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICB9ICMgYXR0cmlidXRlIE5vbmRldGVy
bWluaXN0aWMKIAogICAgICAgICAgICAgaWYgKEhhc0N1c3RvbUdldHRlcigkYXR0cmlidXRlLT5z
aWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcykpIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPiRpbXBs
R2V0dGVyRnVuY3Rpb25OYW1lKGV4ZWMpKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+JGltcGxH
ZXR0ZXJGdW5jdGlvbk5hbWUoc3RhdGUpKTtcbiIpOwogICAgICAgICAgICAgfSBlbHNpZiAoJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2hlY2tTZWN1cml0eUZv
ck5vZGUifSkgewogICAgICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IkpTRE9NQmluZGluZy5o
In0gPSAxOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNob3VsZEFsbG93QWNjZXNzVG9O
b2RlKGV4ZWMsIGltcGwuIiAuICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSAuICIoKSkgPyAi
IC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZU5h
bWUsICJpbXBsLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCkiLCAiY2FzdGVkVGhpcyIpIC4gIiA6
IGpzTnVsbCgpKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoc3RhdGUsIGlt
cGwuIiAuICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSAuICIoKSkgPyAiIC4gTmF0aXZlVG9K
U1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZU5hbWUsICJpbXBsLiRp
bXBsR2V0dGVyRnVuY3Rpb25OYW1lKCkiLCAiY2FzdGVkVGhpcyIpIC4gIiA6IGpzTnVsbCgpKTtc
biIpOwogICAgICAgICAgICAgfSBlbHNpZiAoJHR5cGUgZXEgIkV2ZW50SGFuZGxlciIpIHsKICAg
ICAgICAgICAgICAgICBteSAkZ2V0dGVyID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiV2luZG93RXZlbnRIYW5kbGVyIn0gPyAid2luZG93RXZlbnRIYW5kbGVy
QXR0cmlidXRlIgogICAgICAgICAgICAgICAgICAgICA6ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkRvY3VtZW50RXZlbnRIYW5kbGVyIn0gPyAiZG9jdW1lbnRF
dmVudEhhbmRsZXJBdHRyaWJ1dGUiCiAgICAgICAgICAgICAgICAgICAgIDogImV2ZW50SGFuZGxl
ckF0dHJpYnV0ZSI7CiAgICAgICAgICAgICAgICAgbXkgJGV2ZW50TmFtZSA9IEV2ZW50SGFuZGxl
ckF0dHJpYnV0ZUV2ZW50TmFtZSgkYXR0cmlidXRlKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFSQU0oZXhlYyk7XG4iKTsKKyAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFSQU0oc3RhdGUpO1xuIik7CiAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSgkZ2V0dGVyKGNhc3RlZFRoaXMtPmltcGwoKSwgJGV2ZW50TmFtZSkpO1xuIik7CiAgICAgICAg
ICAgICB9IGVsc2lmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgPX4gL0NvbnN0cnVjdG9y
JC8pIHsKICAgICAgICAgICAgICAgICBteSAkY29uc3RydWN0b3JUeXBlID0gJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlLT50eXBlOwpAQCAtMjM1MiwxMCArMjM1MiwxMCBAQCBzdWIgR2VuZXJhdGVJbXBs
ZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2lu
ZG93IikgewogICAgICAgICAgICAgICAgICAgICBteSAkbmFtZWQgPSAoJGNvbnN0cnVjdG9yVHlw
ZSA9fiAvTmFtZWQkLykgPyAiTmFtZWQiIDogIiI7CiAgICAgICAgICAgICAgICAgICAgICRjb25z
dHJ1Y3RvclR5cGUgPX4gcy9OYW1lZCQvLzsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKUyIgLiAkY29uc3RydWN0b3JU
eXBlIC4gIjo6Z2V0JHtuYW1lZH1Db25zdHJ1Y3RvcihleGVjLT52bSgpLCBjYXN0ZWRUaGlzKSk7
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKUyIgLiAkY29uc3RydWN0b3JUeXBlIC4gIjo6Z2V0JHtuYW1lZH1D
b25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcykpO1xuIik7CiAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTIiAu
ICRjb25zdHJ1Y3RvclR5cGUgLiAiLmgiLCAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJDb25kaXRpb25hbCJ9KTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKUyIgLiAkY29uc3RydWN0
b3JUeXBlIC4gIjo6Z2V0Q29uc3RydWN0b3IoZXhlYy0+dm0oKSwgY2FzdGVkVGhpcy0+Z2xvYmFs
T2JqZWN0KCkpKTtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTIiAuICRjb25zdHJ1Y3RvclR5cGUgLiAiOjpn
ZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpKTtc
biIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzaWYgKCEkYXR0cmlidXRl
LT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJHZXR0ZXJSYWlzZXNFeGNlcHRpb24i
fSkgewogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGJvb2wgaXNOdWxs
ID0gZmFsc2U7XG4iKSBpZiAkaXNOdWxsYWJsZTsKQEAgLTIzOTksNyArMjM5OSw3IEBAIHN1YiBH
ZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7XG4iKSBpZiAhJGF0dHJp
YnV0ZS0+aXNTdGF0aWM7CiAgICAgICAgICAgICAgICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+
SXNTVkdBbmltYXRlZFR5cGUoJHR5cGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBSZWZQdHI8JHR5cGU+IG9iaiA9ICRqc1R5cGU7XG4iKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgcmVz
dWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgb2JqLmdldCgpKTtc
biIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNW
YWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgb2Jq
LmdldCgpKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSAkanNU
eXBlO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTI0MTAsNyArMjQxMCw3IEBAIHN1
YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBjYXN0
ZWRUaGlzLT5tXyIgLiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUgLiAiLnNldChleGVjLT52
bSgpLCBjYXN0ZWRUaGlzLCByZXN1bHQpO1xuIikgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhY2hlZEF0dHJpYnV0ZSJ9KTsKKyAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBjYXN0ZWRUaGlzLT5tXyIgLiAkYXR0cmlidXRlLT5z
aWduYXR1cmUtPm5hbWUgLiAiLnNldChzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcywgcmVzdWx0KTtc
biIpIGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWNo
ZWRBdHRyaWJ1dGUifSk7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpO1xuIik7CiAKICAgICAgICAgICAgIH0gZWxz
ZSB7CkBAIC0yNDI5LDcgKzI0MjksNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHJlc3VsdCA9
ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNl
TmFtZSwgImltcGwuJGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoIiAuIGpvaW4oIiwgIiwgQGFyZ3Vt
ZW50cykgLiAiKSIsICJjYXN0ZWRUaGlzIikgLiAiO1xuIik7CiAgICAgICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIGVjKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpO1xuIik7CiAKICAgICAgICAgICAgICAgICBpZiAo
JGlzTnVsbGFibGUpIHsKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgaWYgKGlzTnVsbClcbiIpOwpAQCAtMjQ1MCwzMyArMjQ1MCwzMyBAQCBzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgbXkgJGNvbnN0cnVjdG9yRnVuY3Rpb25OYW1lID0g
ImpzIiAuICRpbnRlcmZhY2VOYW1lIC4gIkNvbnN0cnVjdG9yIjsKIAogICAgICAgICAgICAgaWYg
KCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Qcm94eVRvSlNPYmplY3Qi
fSkgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiRW5jb2RlZEpTVmFsdWUg
JHtjb25zdHJ1Y3RvckZ1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKVxuIik7CisgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJFbmNvZGVkSlNWYWx1ZSAke2NvbnN0cnVjdG9yRnVuY3Rp
b25OYW1lfShFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCosIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKVxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJ7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAke2Ns
YXNzTmFtZX0qIGRvbU9iamVjdCA9IHRvJHtjbGFzc05hbWV9KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTtcbiIpOwogICAgICAgICAgICAgfSBlbHNpZiAoQ29uc3RydWN0b3JTaG91bGRCZU9u
SW5zdGFuY2UoJGludGVyZmFjZSkpIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIkVuY29kZWRKU1ZhbHVlICR7Y29uc3RydWN0b3JGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSlc
biIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiRW5jb2RlZEpTVmFsdWUg
JHtjb25zdHJ1Y3RvckZ1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSlcbiIpOwogICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9KiBkb21PYmplY3QgPSAiIC4gR2V0Q2FzdGluZ0hl
bHBlckZvclRoaXNPYmplY3QoJGludGVyZmFjZSkgLiAiKEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTtcbiIpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIkVuY29kZWRKU1ZhbHVlICR7Y29uc3RydWN0b3JGdW5jdGlvbk5hbWV9KEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3Bl
cnR5TmFtZSlcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiRW5jb2Rl
ZEpTVmFsdWUgJHtjb25zdHJ1Y3RvckZ1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0ZSwgSlNP
YmplY3QqIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSlcbiIpOwogICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9UHJvdG90eXBlKiBkb21PYmplY3Qg
PSBqc0R5bmFtaWNDYXN0PCR7Y2xhc3NOYW1lfVByb3RvdHlwZSo+KGJhc2VWYWx1ZSk7XG4iKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICgh
ZG9tT2JqZWN0KVxuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSk7XG4iKTsK
IAogICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDaGVj
a1NlY3VyaXR5In0pIHsKICAgICAgICAgICAgICAgICBkaWUgaWYgIUNvbnN0cnVjdG9yU2hvdWxk
QmVPbkluc3RhbmNlKCRpbnRlcmZhY2UpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2lu
ZG93KGV4ZWMsIGRvbU9iamVjdC0+aW1wbCgpKSlcbiIpOworICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vz
c1RvRE9NV2luZG93KHN0YXRlLCBkb21PYmplY3QtPmltcGwoKSkpXG4iKTsKICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTtcbiIpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoISRp
bnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOb0ludGVyZmFjZU9iamVjdCJ9KSB7Ci0g
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSgke2NsYXNzTmFtZX06OmdldENvbnN0cnVjdG9yKGV4ZWMtPnZtKCksIGRvbU9iamVjdC0+
Z2xvYmFsT2JqZWN0KCkpKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoJHtjbGFzc05hbWV9OjpnZXRDb25zdHJ1Y3Rv
cihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpO1xuIik7CiAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpT
VmFsdWUgY29uc3RydWN0b3IgPSAke2NsYXNzTmFtZX1Db25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMt
PnZtKCksICR7Y2xhc3NOYW1lfUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0o
KSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+
b2JqZWN0UHJvdG90eXBlKCkpLCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihkb21PYmplY3Qt
Pmdsb2JhbE9iamVjdCgpKSk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBKU1ZhbHVlIGNvbnN0cnVjdG9yID0gJHtjbGFzc05hbWV9Q29uc3RydWN0b3I6OmNy
ZWF0ZShzdGF0ZS0+dm0oKSwgJHtjbGFzc05hbWV9Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVy
ZShzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgZG9tT2JqZWN0LT5nbG9i
YWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpLCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
Pihkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAvLyBTaGFkb3dpbmcgY29uc3RydWN0b3IgcHJvcGVydHkgdG8g
ZW5zdXJlIHJldXNpbmcgdGhlIHNhbWUgY29uc3RydWN0b3Igb2JqZWN0XG4iKTsKLSAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBkb21PYmplY3QtPnB1dERpcmVjdChleGVj
LT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGNvbnN0cnVjdG9yLCBE
b250RW51bSB8IFJlYWRPbmx5KTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGRvbU9iamVjdC0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVy
dHlOYW1lcygpLmNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RvciwgRG9udEVudW0gfCBSZWFkT25seSk7
XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdG9yKTtcbiIpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwpAQCAtMjQ4NSw3ICsyNDg1LDcgQEAgc3Vi
IEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJSZXBsYWNlYWJsZUNvbnN0cnVjdG9yIn0pIHsKICAgICAgICAgICAgIG15
ICRjb25zdHJ1Y3RvckZ1bmN0aW9uTmFtZSA9ICJzZXRKUyIgLiAkaW50ZXJmYWNlTmFtZSAuICJD
b25zdHJ1Y3RvciI7CiAKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2Nv
bnN0cnVjdG9yRnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpXG4iKTsKKyAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NvbnN0cnVjdG9yRnVuY3Rpb25O
YW1lfShFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCosIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKVxuIik7CiAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOyIpOwogICAgICAg
ICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Qcm94eVRv
SlNPYmplY3QifSkgewpAQCAtMjQ5NCwxNCArMjQ5NCwxNCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1l
bnRhdGlvbgogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICR7Y2xhc3NO
YW1lfSogY2FzdGVkVGhpcyA9ICIgLiBHZXRDYXN0aW5nSGVscGVyRm9yVGhpc09iamVjdCgkaW50
ZXJmYWNlKSAuICIoSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpO1xuIik7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAg
ICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSk7XG4iKTsKICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm47XG4iKTsKICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwogICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDaGVja1NlY3VyaXR5In0pIHsKICAgICAgICAgICAgICAg
ICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKLSAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFs
bG93QWNjZXNzVG9ET01XaW5kb3coZXhlYywgY2FzdGVkVGhpcy0+aW1wbCgpKSlcbiIpOworICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIUJpbmRpbmdTZWN1
cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhzdGF0ZSwgY2FzdGVkVGhpcy0+aW1w
bCgpKSlcbiIpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghc2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKGV4
ZWMsIGNhc3RlZFRoaXMtPmltcGwoKS5mcmFtZSgpKSlcbiIpOworICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIXNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShz
dGF0ZSwgY2FzdGVkVGhpcy0+aW1wbCgpLmZyYW1lKCkpKVxuIik7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm47XG4i
KTsKICAgICAgICAgICAgIH0KQEAgLTI1MDksNyArMjUwOSw3IEBAIHN1YiBHZW5lcmF0ZUltcGxl
bWVudGF0aW9uCiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAvLyBTaGFkb3dp
bmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvclxuIik7CiAKICAgICAgICAgICAgIGlmICgkaW50ZXJm
YWNlTmFtZSBlcSAiRE9NV2luZG93IikgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGNhc3RlZFRoaXMtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuY29uc3RydWN0b3IsIHZhbHVlKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIGNhc3RlZFRoaXMtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3Rh
dGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgdmFsdWUpO1xuIik7CiAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGRpZSAiTm8gd2F5IHRvIGhhbmRsZSBpbnRlcmZh
Y2Ugd2l0aCBSZXBsYWNlYWJsZUNvbnN0cnVjdG9yIGV4dGVuZGVkIGF0dHJpYnV0ZTogJGludGVy
ZmFjZU5hbWUiOwogICAgICAgICAgICAgfQpAQCAtMjUyMSw0NSArMjUyMSw0NSBAQCBzdWIgR2Vu
ZXJhdGVJbXBsZW1lbnRhdGlvbgogCiAgICAgaWYgKCRoYXNDdXN0b21TZXR0ZXIpIHsKICAgICAg
ICAgaWYgKCEkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tUHV0RnVuY3Rp
b24ifSkgewotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1l
fTo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpXG4iKTsKKyAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnB1dChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOwogICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9Kj4oY2VsbCk7XG4iKTsKICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTtcbiIpOwogICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21JbmRleGVkU2V0dGVyIn0pIHsKICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGlu
ZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7XG4iKTsKLSAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgdGhpc09iamVjdC0+aW5kZXhTZXR0ZXIoZXhlYywg
aW5kZXgudmFsdWUoKSwgdmFsdWUpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgIHRoaXNPYmplY3QtPmluZGV4U2V0dGVyKHN0YXRlLCBpbmRleC52YWx1
ZSgpLCB2YWx1ZSk7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAgICAgcmV0dXJuO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgfVxuIik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVkU2V0dGVyIn0pIHsKLSAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAodGhpc09iamVjdC0+cHV0RGVsZWdhdGUoZXhl
YywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpXG4iKTsKKyAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBpZiAodGhpc09iamVjdC0+cHV0RGVsZWdhdGUoc3RhdGUsIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKVxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgICAgIHJldHVybjtcbiIpOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgc2xvdCk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4i
KTsKIAogICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJD
dXN0b21JbmRleGVkU2V0dGVyIn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkN1c3RvbU5hbWVkU2V0dGVyIn0pIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgInZvaWQgJHtjbGFzc05hbWV9OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdylc
biIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFt
ZX06OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBp
bmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdylcbiIpOwogICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihj
ZWxsKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTtcbiIpOwogCiAgICAgICAg
ICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21JbmRl
eGVkU2V0dGVyIn0pIHsKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgaWYgKGluZGV4IDw9IE1BWF9BUlJBWV9JTkRFWCkge1xuIik7Ci0gICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICB0aGlzT2JqZWN0LT5pbmRleFNldHRlcihl
eGVjLCBpbmRleCwgdmFsdWUpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICAgICB0aGlzT2JqZWN0LT5pbmRleFNldHRlcihzdGF0ZSwgaW5kZXgsIHZh
bHVlKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAg
ICAgcmV0dXJuO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIH1cbiIpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmICgkaW50
ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTmFtZWRTZXR0ZXIifSkgewotICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBJZGVudGlmaWVyIHByb3Bl
cnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpO1xuIik7CisgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1l
ID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpO1xuIik7CiAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRoaXNPYmpl
Y3QsIHNob3VsZFRocm93KTtcbiIpOwotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBpZiAodGhpc09iamVjdC0+cHV0RGVsZWdhdGUoZXhlYywgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgc2xvdCkpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgaWYgKHRoaXNPYmplY3QtPnB1dERlbGVnYXRlKHN0YXRlLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBzbG90KSlcbiIpOwogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAgICAgcmV0dXJuO1xuIik7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQmFzZTo6cHV0QnlJbmRleChjZWxsLCBleGVj
LCBpbmRleCwgdmFsdWUsIHNob3VsZFRocm93KTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIEJhc2U6OnB1dEJ5SW5kZXgoY2VsbCwgc3RhdGUsIGluZGV4LCB2
YWx1ZSwgc2hvdWxkVGhyb3cpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJ9XG5cbiIpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yNTc2LDcgKzI1NzYs
NyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgbXkgJGF0dHJpYnV0
ZUNvbmRpdGlvbmFsU3RyaW5nID0gJGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlQ29uZGl0aW9uYWxT
dHJpbmcoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiI2lmICR7YXR0cmlidXRlQ29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkYXR0cmlidXRl
Q29uZGl0aW9uYWxTdHJpbmc7CiAKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9p
ZCAke3B1dEZ1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVj
dCwgRW5jb2RlZEpTVmFsdWUiKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9p
ZCAke3B1dEZ1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiB0
aGlzVmFsdWUiKSBpZiAhJGF0dHJpYnV0ZS0+aXNTdGF0aWM7CiAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKVxuIik7CiAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwpAQCAtMjU5MSw0NiArMjU5MSw0NiBAQCBz
dWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICBpZiAoSW50ZXJm
YWNlUmVxdWlyZXNBdHRyaWJ1dGVzT25JbnN0YW5jZUZvckNvbXBhdGliaWxpdHkoJGludGVyZmFj
ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICR7
Y2xhc3NOYW1lfSogY2FzdGVkVGhpc09iamVjdCA9ICIgLiBHZXRDYXN0aW5nSGVscGVyRm9yVGhp
c09iamVjdCgkaW50ZXJmYWNlKSAuICIoSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpO1xuIik7
CiAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXNPYmplY3QpKVxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpl
eGVjLCBcIiRpbnRlcmZhY2VOYW1lXCIsIFwiJG5hbWVcIik7XG4iKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0
dGVyRXJyb3IoKnN0YXRlLCBcIiRpbnRlcmZhY2VOYW1lXCIsIFwiJG5hbWVcIik7XG4iKTsKICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpO1xuIik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFSQU0oZXhl
Yyk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICR7Y2xhc3NOYW1lfSogY2FzdGVkVGhpcyA9ICIgLiBHZXRDYXN0aW5nSGVscGVyRm9y
VGhpc09iamVjdCgkaW50ZXJmYWNlKSAuICIoSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpO1xu
Iik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpIHtcbiIpOwogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8JHtjbGFzc05hbWV9UHJvdG90eXBl
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpKVxuIik7Ci0gICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVy
cm9yKCpleGVjLCBcIiRpbnRlcmZhY2VOYW1lXCIsIFwiJG5hbWVcIik7XG4iKTsKKyAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICAgICByZXBvcnREZXByZWNh
dGVkU2V0dGVyRXJyb3IoKnN0YXRlLCBcIiRpbnRlcmZhY2VOYW1lXCIsIFwiJG5hbWVcIik7XG4i
KTsKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGVsc2Vc
biIpOwotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAg
IHRocm93U2V0dGVyVHlwZUVycm9yKCpleGVjLCBcIiRpbnRlcmZhY2VOYW1lXCIsIFwiJG5hbWVc
Iik7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAg
ICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIFwiJGludGVyZmFjZU5hbWVcIiwgXCIk
bmFtZVwiKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAgICAgcmV0dXJuO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIH1cbiIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2hlY2tTZWN1cml0eSJ9
ICYmICEkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJEb05vdENo
ZWNrU2VjdXJpdHkifSkgewogICAgICAgICAgICAgICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAi
RE9NV2luZG93IikgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhleGVj
LCBjYXN0ZWRUaGlzLT5pbXBsKCkpKVxuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1Rv
RE9NV2luZG93KHN0YXRlLCBjYXN0ZWRUaGlzLT5pbXBsKCkpKVxuIik7CiAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
aWYgKCFzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoZXhlYywgY2FzdGVkVGhpcy0+aW1wbCgpLmZy
YW1lKCkpKVxuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IGlmICghc2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKHN0YXRlLCBjYXN0ZWRUaGlzLT5pbXBsKCku
ZnJhbWUoKSkpXG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybjtcbiIpOwogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBpZiAoSGFzQ3VzdG9tU2V0dGVyKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzKSkgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IGNhc3RlZFRoaXMtPnNldCRpbXBsU2V0dGVyRnVuY3Rpb25OYW1lKGV4ZWMsIHZhbHVlKTtcbiIp
OworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGNhc3RlZFRoaXMtPnNl
dCRpbXBsU2V0dGVyRnVuY3Rpb25OYW1lKHN0YXRlLCB2YWx1ZSk7XG4iKTsKICAgICAgICAgICAg
IH0gZWxzaWYgKCR0eXBlIGVxICJFdmVudEhhbmRsZXIiKSB7CiAgICAgICAgICAgICAgICAgJGlt
cGxJbmNsdWRlc3siSlNFdmVudExpc3RlbmVyLmgifSA9IDE7CiAgICAgICAgICAgICAgICAgbXkg
JGV2ZW50TmFtZSA9IEV2ZW50SGFuZGxlckF0dHJpYnV0ZUV2ZW50TmFtZSgkYXR0cmlidXRlKTsK
ICAgICAgICAgICAgICAgICAjIEZJWE1FOiBGaW5kIGEgd2F5IHRvIGRvIHRoaXMgc3BlY2lhbCBj
YXNlIHdpdGhvdXQgaGFyZGNvZGluZyB0aGUgY2xhc3MgYW5kIGF0dHJpYnV0ZSBuYW1lcyBoZXJl
LgogICAgICAgICAgICAgICAgIGlmICgoKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSBv
ciAoJGludGVyZmFjZU5hbWUgZXEgIldvcmtlckdsb2JhbFNjb3BlIikpIGFuZCAkbmFtZSBlcSAi
b25lcnJvciIpIHsKICAgICAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siSlNFcnJvckhh
bmRsZXIuaCJ9ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgY2FzdGVkVGhpcy0+aW1wbCgpLnNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoJGV2ZW50TmFt
ZSwgY3JlYXRlSlNFcnJvckhhbmRsZXIoZXhlYywgdmFsdWUsIGNhc3RlZFRoaXMpKTtcbiIpOwor
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBjYXN0ZWRUaGlzLT5p
bXBsKCkuc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcigkZXZlbnROYW1lLCBjcmVhdGVKU0Vycm9y
SGFuZGxlcihzdGF0ZSwgdmFsdWUsIGNhc3RlZFRoaXMpKTtcbiIpOwogICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IkpTRXZlbnRMaXN0
ZW5lci5oIn0gPSAxOwogICAgICAgICAgICAgICAgICAgICBteSAkc2V0dGVyID0gJGF0dHJpYnV0
ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiV2luZG93RXZlbnRIYW5kbGVyIn0g
PyAic2V0V2luZG93RXZlbnRIYW5kbGVyQXR0cmlidXRlIgogICAgICAgICAgICAgICAgICAgICAg
ICAgOiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJEb2N1bWVu
dEV2ZW50SGFuZGxlciJ9ID8gInNldERvY3VtZW50RXZlbnRIYW5kbGVyQXR0cmlidXRlIgogICAg
ICAgICAgICAgICAgICAgICAgICAgOiAic2V0RXZlbnRIYW5kbGVyQXR0cmlidXRlIjsKLSAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHNldHRlcigqZXhlYywgKmNh
c3RlZFRoaXMsIGNhc3RlZFRoaXMtPmltcGwoKSwgJGV2ZW50TmFtZSwgdmFsdWUpO1xuIik7Cisg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRzZXR0ZXIoKnN0YXRl
LCAqY2FzdGVkVGhpcywgY2FzdGVkVGhpcy0+aW1wbCgpLCAkZXZlbnROYW1lLCB2YWx1ZSk7XG4i
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2lmICgkYXR0cmlidXRlLT5z
aWduYXR1cmUtPnR5cGUgPX4gL0NvbnN0cnVjdG9yJC8pIHsKICAgICAgICAgICAgICAgICBteSAk
Y29uc3RydWN0b3JUeXBlID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlOwpAQCAtMjY0Miwx
MCArMjY0MiwxMCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAg
ICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlMiIC4gJGNvbnN0cnVjdG9yVHlwZSAuICIuaCIsICRh
dHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbmRpdGlvbmFsIn0p
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci5cbiIpOwotICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGNhc3RlZFRoaXMtPnB1dERpcmVjdChleGVj
LT52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIFwiJG5hbWVcIiksIHZhbHVlKTtc
biIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGNhc3RlZFRoaXMt
PnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgXCIk
bmFtZVwiKSwgdmFsdWUpO1xuIik7CiAgICAgICAgICAgICB9IGVsc2lmICgkYXR0cmlidXRlLT5z
aWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZXBsYWNlYWJsZSJ9KSB7CiAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4g
b2JqZWN0LlxuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgY2Fz
dGVkVGhpcy0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhl
YywgXCIkbmFtZVwiKSwgdmFsdWUpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgY2FzdGVkVGhpcy0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHN0YXRlLCBcIiRuYW1lXCIpLCB2YWx1ZSk7XG4iKTsKICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKCEkYXR0cmlidXRlLT5pc1N0YXRpYykgewog
ICAgICAgICAgICAgICAgICAgICBteSAkcHV0Rm9yd2FyZHMgPSAkYXR0cmlidXRlLT5zaWduYXR1
cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJQdXRGb3J3YXJkcyJ9OwpAQCAtMjY3MywxNCArMjY3
MywxNCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICBt
eSAkYXJnVHlwZSA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZTsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1dyYXBwZXJUeXBlKCRhcmdUeXBlKSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKFVOTElLRUxZ
KCF2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpICYmICF2YWx1ZS5pbmhlcml0cyhKUyR7YXJnVHlw
ZX06OmluZm8oKSkpKSB7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICAgICB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcigqZXhlYywgXCIkaW50ZXJm
YWNlTmFtZVwiLCBcIiRuYW1lXCIsIFwiJGFyZ1R5cGVcIik7XG4iKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICB0aHJvd0F0dHJpYnV0ZVR5cGVF
cnJvcigqc3RhdGUsIFwiJGludGVyZmFjZU5hbWVcIiwgXCIkbmFtZVwiLCBcIiRhcmdUeXBlXCIp
O1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAg
ICAgcmV0dXJuO1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICB9O1xuIik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAiIC4gR2V0TmF0aXZl
VHlwZUZyb21TaWduYXR1cmUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlKSAuICIgbmF0aXZlVmFsdWUg
PSAiIC4gSlNWYWx1ZVRvTmF0aXZlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgInZhbHVlIiwgJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uZGl0aW9uYWwifSkg
LiAiO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKFVO
TElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSlcbiIpOworICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKVxu
Iik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybjtc
biIpOwogCiAgICAgICAgICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc0VudW1UeXBlKCR0
eXBlKSkgewpAQCAtMjY5NSw3ICsyNjk1LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24K
IAogICAgICAgICAgICAgICAgIGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgZXEgImRv
dWJsZSIgb3IgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlIGVxICJmbG9hdCIpIHsKICAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFzdGQ6OmlzZmluaXRl
KG5hdGl2ZVZhbHVlKSkge1xuIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVHlwZUVycm9yKTtcbiIpOworICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKHN0YXRlLCBUeXBlRXJyb3IpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICAgICByZXR1cm47XG4iKTsKICAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgfVxuIik7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjcwMyw3
ICsyNzAzLDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICBp
ZiAoJHN2Z1Byb3BlcnR5T3JMaXN0UHJvcGVydHlUeXBlKSB7CiAgICAgICAgICAgICAgICAgICAg
IGlmICgkc3ZnUHJvcGVydHlUeXBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBpZiAoaW1wbC5pc1JlYWRPbmx5KCkpIHtcbiIpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNldERPTUV4Y2VwdGlv
bihleGVjLCBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIpO1xuIik7CisgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgc2V0RE9NRXhjZXB0aW9uKHN0
YXRlLCBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIpO1xuIik7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuO1xuIik7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IkV4Y2VwdGlvbkNvZGUuaCJ9ID0gMTsKQEAg
LTI3MTUsNyArMjcxNSw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBwb2RJbXBsLnNldCRpbXBsU2V0
dGVyRnVuY3Rpb25OYW1lKG5hdGl2ZVZhbHVlIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiwgZWMiKSBpZiAkc2V0dGVyUmFpc2VzRXhjZXB0aW9uOwogICAg
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIpO1xuIik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBzZXRET01FeGNlcHRpb24o
ZXhlYywgZWMpO1xuIikgaWYgJHNldHRlclJhaXNlc0V4Y2VwdGlvbjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwg
ZWMpO1xuIikgaWYgJHNldHRlclJhaXNlc0V4Y2VwdGlvbjsKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICBpZiAoJHN2Z1Byb3BlcnR5VHlwZSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCRzZXR0ZXJSYWlzZXNFeGNlcHRpb24pIHsKQEAgLTI3NDgsNyAr
Mjc0OCw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAKICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAYXJndW1lbnRzLCAiZWMiKSBpZiAkc2V0dGVyUmFpc2VzRXhjZXB0aW9uOwogICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAke2Z1bmN0aW9uTmFtZX0o
IiAuIGpvaW4oIiwgIiwgQGFyZ3VtZW50cykgLiAiKTtcbiIpOwotICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpO1xuIikg
aWYgJHNldHRlclJhaXNlc0V4Y2VwdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7XG4iKSBpZiAkc2V0dGVy
UmFpc2VzRXhjZXB0aW9uOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIApAQCAt
Mjc1OSwxMyArMjc1OSwxMyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIH0KIAog
ICAgIGlmICgkaW5kZXhlZEdldHRlckZ1bmN0aW9uICYmICEkaW50ZXJmYWNlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiQ3VzdG9tRW51bWVyYXRlUHJvcGVydHkifSkgewotICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMs
IEVudW1lcmF0aW9uTW9kZSBtb2RlKVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
e1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8JHtjbGFzc05hbWV9Kj4ob2JqZWN0KTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgZm9yICh1bnNpZ25lZCBp
ID0gMCwgY291bnQgPSB0aGlzT2JqZWN0LT5pbXBsKCkubGVuZ3RoKCk7IGkgPCBjb3VudDsgKytp
KVxuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBwcm9wZXJ0eU5hbWVz
LmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTtcbiIpOwotICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZXMsIG1vZGUpO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpKSk7XG4i
KTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQmFzZTo6Z2V0T3duUHJvcGVydHlO
YW1lcyh0aGlzT2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7XG4iKTsKICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogICAgIH0KIApAQCAtMjgyNywxNiArMjgy
NywxNiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgIEFkZFRv
SW1wbEluY2x1ZGVzKCJKU0RPTVByb21pc2UuaCIpOwogCiAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlICR7ZnVuY3Rpb25OYW1l
fVByb21pc2UoRXhlY1N0YXRlKiwgSlNQcm9taXNlRGVmZXJyZWQqKTtcbiIpOwotICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAk
e2Z1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBleGVjKVxuIik7CisgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7ZnVuY3Rpb25O
YW1lfShFeGVjU3RhdGUqIHN0YXRlKVxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ7XG4iKTsKIAotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbFByb21pc2VGdW5jdGlvbigqZXhlYywgJHtmdW5j
dGlvbk5hbWV9UHJvbWlzZSkpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsUHJvbWlzZUZ1bmN0aW9uKCpzdGF0
ZSwgJHtmdW5jdGlvbk5hbWV9UHJvbWlzZSkpO1xuIik7CiAKICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIn1cbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiXG5zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlICR7ZnVuY3Rpb25OYW1lfVByb21pc2Uo
RXhlY1N0YXRlKiBleGVjLCBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkKVxuIik7
CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbnN0YXRpYyBpbmxpbmUgRW5j
b2RlZEpTVmFsdWUgJHtmdW5jdGlvbk5hbWV9UHJvbWlzZShFeGVjU3RhdGUqIHN0YXRlLCBKU1By
b21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkKVxuIik7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtmdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogZXhlYylc
biIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCAke2Z1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0ZSlcbiIpOwogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwpAQCAt
Mjg0Niw3ICsyODQ2LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAg
IGlmICgkZnVuY3Rpb24tPmlzU3RhdGljKSB7CiAgICAgICAgICAgICAgICAgaWYgKCRpc0N1c3Rv
bSkgewogICAgICAgICAgICAgICAgICAgICBHZW5lcmF0ZUFyZ3VtZW50c0NvdW50Q2hlY2soXEBp
bXBsQ29udGVudCwgJGZ1bmN0aW9uLCAkaW50ZXJmYWNlKTsKLSAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSgke2NsYXNzTmFt
ZX06OiIgLiAkZnVuY3Rpb25JbXBsZW1lbnRhdGlvbk5hbWUgLiAiKGV4ZWMpKTtcbiIpOworICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKCR7Y2xhc3NOYW1lfTo6IiAuICRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZSAuICIo
c3RhdGUpKTtcbiIpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgIEdlbmVyYXRlQXJndW1lbnRzQ291bnRDaGVjayhcQGltcGxDb250ZW50LCAkZnVuY3Rpb24s
ICRpbnRlcmZhY2UpOwogCkBAIC0yODYxLDE3ICsyODYxLDE3IEBAIHN1YiBHZW5lcmF0ZUltcGxl
bWVudGF0aW9uCiAKICAgICAgICAgICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkNoZWNrU2VjdXJpdHkifSBhbmQKICAgICAgICAgICAgICAgICAgICAgISRmdW5j
dGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRG9Ob3RDaGVja1NlY3VyaXR5
In0pIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFC
aW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coZXhlYywgY2FzdGVk
VGhpcy0+aW1wbCgpKSlcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRv
dyhzdGF0ZSwgY2FzdGVkVGhpcy0+aW1wbCgpKSlcbiIpOwogICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTtcbiIpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmICgk
aXNDdXN0b20pIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT4iIC4gJGZ1bmN0aW9uSW1wbGVtZW50
YXRpb25OYW1lIC4gIihleGVjKSk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT4iIC4gJGZ1
bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lIC4gIihzdGF0ZSkpO1xuIik7CiAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTtcbiIpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAoJHN2Z1Byb3BlcnR5VHlwZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgaWYgKGltcGwuaXNSZWFkT25seSgpKSB7XG4iKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSKTtcbiIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNldERPTUV4Y2VwdGlvbihz
dGF0ZSwgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSKTtcbiIpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIH1cbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgJHN2Z1Byb3BlcnR5VHlwZSYgcG9kSW1wbCA9IGltcGwucHJvcGVydHlS
ZWZlcmVuY2UoKTtcbiIpOwpAQCAtMjg4OSw3ICsyODg5LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVt
ZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwO1xuIikgaWYgJHJhaXNlc0V4Y2VwdGlvbjsKIAogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ2hlY2tTZWN1cml0eUZvck5vZGUifSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghc2hvdWxkQWxsb3dBY2Nlc3NUb05v
ZGUoZXhlYywgaW1wbC4iIC4gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUgLiAiKCIgLiAoJHJh
aXNlc0V4Y2VwdGlvbiA/ICJlYyIgOiAiIikgLiIpKSlcbiIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghc2hvdWxkQWxsb3dBY2Nlc3NU
b05vZGUoc3RhdGUsIGltcGwuIiAuICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lIC4gIigiIC4g
KCRyYWlzZXNFeGNlcHRpb24gPyAiZWMiIDogIiIpIC4iKSkpXG4iKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc051bGwoKSk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1w
bEluY2x1ZGVzeyJKU0RPTUJpbmRpbmcuaCJ9ID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAg
IH0KQEAgLTMxNjAsMTkgKzMxNjAsMTkgQEAgc3ViIEdlbmVyYXRlRnVuY3Rpb25DYXN0ZWRUaGlz
CiAgICAgbXkgJGNsYXNzTmFtZSA9IHNoaWZ0OwogICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0Owog
ICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tUHJveHlUb0pT
T2JqZWN0In0pIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGNsYXNzTmFtZSog
Y2FzdGVkVGhpcyA9IHRvJHtjbGFzc05hbWV9KGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVj
LCBOb3RTdHJpY3RNb2RlKSk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
JGNsYXNzTmFtZSogY2FzdGVkVGhpcyA9IHRvJHtjbGFzc05hbWV9KHN0YXRlLT50aGlzVmFsdWUo
KS50b1RoaXMoc3RhdGUsIE5vdFN0cmljdE1vZGUpKTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKVxuIik7Ci0gICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTtc
biIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3Ioc3RhdGUpO1xuIik7CiAgICAgfSBlbHNpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57Ildvcmtlckdsb2JhbFNjb3BlIn0pIHsKLSAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgJGNsYXNzTmFtZSogY2FzdGVkVGhpcyA9IHRvJHtjbGFzc05hbWV9KGV4ZWMt
PnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBOb3RTdHJpY3RNb2RlKSk7XG4iKTsKKyAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgJGNsYXNzTmFtZSogY2FzdGVkVGhpcyA9IHRvJHtjbGFz
c05hbWV9KHN0YXRlLT50aGlzVmFsdWUoKS50b1RoaXMoc3RhdGUsIE5vdFN0cmljdE1vZGUpKTtc
biIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKVxuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihleGVjKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUpO1xuIik7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBl
eGVjLT50aGlzVmFsdWUoKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTtcbiIpOwogICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAkY2xhc3NOYW1lKiBjYXN0ZWRUaGlzID0gIiAuIEdldENhc3Rp
bmdIZWxwZXJGb3JUaGlzT2JqZWN0KCRpbnRlcmZhY2UpIC4gIih0aGlzVmFsdWUpO1xuIik7CiAg
ICAgICAgIG15ICRkb21GdW5jdGlvbk5hbWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsK
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSlcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRocm93
VGhpc1R5cGVFcnJvcigqZXhlYywgXCIkaW50ZXJmYWNlTmFtZVwiLCBcIiRkb21GdW5jdGlvbk5h
bWVcIik7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiB0
aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCBcIiRpbnRlcmZhY2VOYW1lXCIsIFwiJGRvbUZ1bmN0
aW9uTmFtZVwiKTtcbiIpOwogICAgIH0KIAogICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJHtjbGFzc05hbWV9OjppbmZvKCkp
O1xuIik7CkBAIC0zMTg3LDIxICszMTg3LDIxIEBAIHN1YiBHZW5lcmF0ZUNhbGxXaXRoCiAgICAg
bXkgJGZ1bmN0aW9uID0gc2hpZnQ7CiAKICAgICBteSBAY2FsbFdpdGhBcmdzOwotICAgIHB1c2go
QGNhbGxXaXRoQXJncywgImV4ZWMiKSBpZiAkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1
dGVDb250YWlucygkY2FsbFdpdGgsICJTY3JpcHRTdGF0ZSIpOworICAgIHB1c2goQGNhbGxXaXRo
QXJncywgIipzdGF0ZSIpIGlmICRjb2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRh
aW5zKCRjYWxsV2l0aCwgIlNjcmlwdFN0YXRlIik7CiAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5F
eHRlbmRlZEF0dHJpYnV0ZUNvbnRhaW5zKCRjYWxsV2l0aCwgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQiKSkgewotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byogc2NyaXB0Q29u
dGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgYXV0byogc2NyaXB0Q29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7XG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmICghc2NyaXB0
Q29udGV4dClcbiIpOwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVy
biIgLiAoJHJldHVyblZhbHVlID8gIiAiIC4gJHJldHVyblZhbHVlIDogIiIpIC4gIjtcbiIpOwog
ICAgICAgICBwdXNoKEBjYWxsV2l0aEFyZ3MsICJzY3JpcHRDb250ZXh0Iik7CiAgICAgfQogICAg
IGlmICgkZnVuY3Rpb24gYW5kICRjb2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRh
aW5zKCRjYWxsV2l0aCwgIlNjcmlwdEFyZ3VtZW50cyIpKSB7Ci0gICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+IHNjcmlwdEFy
Z3VtZW50cyhJbnNwZWN0b3I6OmNyZWF0ZVNjcmlwdEFyZ3VtZW50cyhleGVjLCAiIC4gQHskZnVu
Y3Rpb24tPnBhcmFtZXRlcnN9IC4gIikpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+IHNjcmlwdEFyZ3VtZW50
cyhJbnNwZWN0b3I6OmNyZWF0ZVNjcmlwdEFyZ3VtZW50cyhzdGF0ZSwgIiAuIEB7JGZ1bmN0aW9u
LT5wYXJhbWV0ZXJzfSAuICIpKTtcbiIpOwogICAgICAgICAkaW1wbEluY2x1ZGVzeyI8aW5zcGVj
dG9yL1NjcmlwdEFyZ3VtZW50cy5oPiJ9ID0gMTsKICAgICAgICAgJGltcGxJbmNsdWRlc3siPGlu
c3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5Lmg+In0gPSAxOwogICAgICAgICBwdXNoKEBj
YWxsV2l0aEFyZ3MsICJzY3JpcHRBcmd1bWVudHMucmVsZWFzZSgpIik7CiAgICAgfQotICAgIHB1
c2goQGNhbGxXaXRoQXJncywgImFjdGl2ZURPTVdpbmRvdyhleGVjKSIpIGlmICRjb2RlR2VuZXJh
dG9yLT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRhaW5zKCRjYWxsV2l0aCwgIkFjdGl2ZVdpbmRvdyIp
OwotICAgIHB1c2goQGNhbGxXaXRoQXJncywgImZpcnN0RE9NV2luZG93KGV4ZWMpIikgaWYgJGNv
ZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGNhbGxXaXRoLCAiRmlyc3RX
aW5kb3ciKTsKKyAgICBwdXNoKEBjYWxsV2l0aEFyZ3MsICJhY3RpdmVET01XaW5kb3coc3RhdGUp
IikgaWYgJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGNhbGxXaXRo
LCAiQWN0aXZlV2luZG93Iik7CisgICAgcHVzaChAY2FsbFdpdGhBcmdzLCAiZmlyc3RET01XaW5k
b3coc3RhdGUpIikgaWYgJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMo
JGNhbGxXaXRoLCAiRmlyc3RXaW5kb3ciKTsKIAogICAgIHJldHVybiBAY2FsbFdpdGhBcmdzOwog
fQpAQCAtMzIyMiw4ICszMjIyLDggQEAgc3ViIEdlbmVyYXRlQXJndW1lbnRzQ291bnRDaGVjawog
ICAgIH0KICAgICBpZiAoJG51bU1hbmRhdG9yeVBhcmFtcyA+PSAxKQogICAgIHsKLSAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50
KCkgPCAkbnVtTWFuZGF0b3J5UGFyYW1zKSlcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IoZXhlYykpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8ICRudW1NYW5kYXRvcnlQYXJh
bXMpKVxuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTtc
biIpOwogICAgIH0KIH0KIApAQCAtMzI4MCw3ICszMjgwLDcgQEAgc3ViIEdlbmVyYXRlUGFyYW1l
dGVyc0NoZWNrCiAgICAgICAgIGlmICgkb3B0aW9uYWwgJiYgISRkZWZhdWx0QXR0cmlidXRlICYm
ICRhcmdUeXBlIG5lICJEaWN0aW9uYXJ5IiAmJiAhJGNvZGVHZW5lcmF0b3ItPklzQ2FsbGJhY2tJ
bnRlcmZhY2UoJHBhcmFtZXRlci0+dHlwZSkpIHsKICAgICAgICAgICAgICMgR2VuZXJhdGUgZWFy
bHkgY2FsbCBpZiB0aGVyZSBhcmUgZW5vdWdoIHBhcmFtZXRlcnMuCiAgICAgICAgICAgICBpZiAo
ISRoYXNPcHRpb25hbEFyZ3VtZW50cykgewotICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIlxuICAgIHNpemVfdCBhcmdzQ291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7XG4i
KTsKKyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJcbiAgICBzaXplX3QgYXJn
c0NvdW50ID0gc3RhdGUtPmFyZ3VtZW50Q291bnQoKTtcbiIpOwogICAgICAgICAgICAgICAgICRo
YXNPcHRpb25hbEFyZ3VtZW50cyA9IDE7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgaWYgKGFyZ3NDb3VudCA8PSAkYXJnc0luZGV4KSB7XG4iKTsK
QEAgLTMyOTYsMTAgKzMyOTYsMTAgQEAgc3ViIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrCiAKICAg
ICAgICAgaWYgKCRhcmdUeXBlIGVxICJYUGF0aE5TUmVzb2x2ZXIiKSB7CiAgICAgICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgUmVmUHRyPFhQYXRoTlNSZXNvbHZlcj4gY3VzdG9tUmVz
b2x2ZXI7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBYUGF0aE5T
UmVzb2x2ZXIqIHJlc29sdmVyID0gSlNYUGF0aE5TUmVzb2x2ZXI6OnRvV3JhcHBlZChleGVjLT5h
cmd1bWVudCgkYXJnc0luZGV4KSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICBYUGF0aE5TUmVzb2x2ZXIqIHJlc29sdmVyID0gSlNYUGF0aE5TUmVzb2x2ZXI6OnRv
V3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoJGFyZ3NJbmRleCkpO1xuIik7CiAgICAgICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKCFyZXNvbHZlcikge1xuIik7Ci0gICAgICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIGN1c3RvbVJlc29sdmVyID0gSlNDdXN0b21Y
UGF0aE5TUmVzb2x2ZXI6OmNyZWF0ZShleGVjLCBleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KSk7
XG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgaWYgKFVOTElL
RUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSlcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgICAgICBjdXN0b21SZXNvbHZlciA9IEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVy
OjpjcmVhdGUoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgkYXJnc0luZGV4KSk7XG4iKTsKKyAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpXG4iKTsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKICAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmVzb2x2ZXIgPSBjdXN0b21S
ZXNvbHZlci5nZXQoKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IH1cbiIpOwpAQCAtMzMwOCwzOSArMzMwOCwzOSBAQCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hl
Y2sKICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IiRjYWxsYmFja0NsYXNzTmFtZS5oIn0gPSAx
OwogICAgICAgICAgICAgaWYgKCRvcHRpb25hbCkgewogICAgICAgICAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICBSZWZQdHI8JGFyZ1R5cGU+ICRuYW1lO1xuIik7Ci0gICAgICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmICghZXhlYy0+YXJndW1lbnQoJGFyZ3NJ
bmRleCkuaXNVbmRlZmluZWRPck51bGwoKSkge1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIGlmICghc3RhdGUtPmFyZ3VtZW50KCRhcmdzSW5kZXgpLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpIHtcbiIpOwogICAgICAgICAgICAgICAgIGlmICgkY29kZUdlbmVyYXRv
ci0+SXNGdW5jdGlvbk9ubHlDYWxsYmFja0ludGVyZmFjZSgkcGFyYW1ldGVyLT50eXBlKSkgewot
ICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIGlmICghZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoJGFyZ3NJbmRleCkuaXNGdW5jdGlvbigpKVxuIik7CisgICAg
ICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgaWYgKCFzdGF0ZS0+
dW5jaGVja2VkQXJndW1lbnQoJGFyZ3NJbmRleCkuaXNGdW5jdGlvbigpKVxuIik7CiAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgICAgICBpZiAoIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KCRhcmdzSW5kZXgpLmlzT2Jq
ZWN0KCkpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
ICAgICBpZiAoIXN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgkYXJnc0luZGV4KS5pc09iamVjdCgp
KVxuIik7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJv
cigqZXhlYywgJGFyZ3NJbmRleCwgXCIkbmFtZVwiLCBcIiRpbnRlcmZhY2VOYW1lXCIsICRxdW90
ZWRGdW5jdGlvbk5hbWUpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpz
dGF0ZSwgJGFyZ3NJbmRleCwgXCIkbmFtZVwiLCBcIiRpbnRlcmZhY2VOYW1lXCIsICRxdW90ZWRG
dW5jdGlvbk5hbWUpO1xuIik7CiAgICAgICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+aXNTdGF0
aWMpIHsKICAgICAgICAgICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkNhbGxiYWNrRnVu
Y3Rpb24uaCIpOwotICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
ICAgICRuYW1lID0gY3JlYXRlRnVuY3Rpb25Pbmx5Q2FsbGJhY2s8JHtjYWxsYmFja0NsYXNzTmFt
ZX0+KGV4ZWMsIGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSksIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KCRhcmdzSW5kZXgpKTtcbiIpOworICAg
ICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgICRuYW1lID0gY3Jl
YXRlRnVuY3Rpb25Pbmx5Q2FsbGJhY2s8JHtjYWxsYmFja0NsYXNzTmFtZX0+KHN0YXRlLCBqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSwgc3Rh
dGUtPnVuY2hlY2tlZEFyZ3VtZW50KCRhcmdzSW5kZXgpKTtcbiIpOwogICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAg
ICAgJG5hbWUgPSAke2NhbGxiYWNrQ2xhc3NOYW1lfTo6Y3JlYXRlKGFzT2JqZWN0KGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KCRhcmdzSW5kZXgpKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkp
O1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAg
JG5hbWUgPSAke2NhbGxiYWNrQ2xhc3NOYW1lfTo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgkYXJnc0luZGV4KSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTtc
biIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgfVxuIik7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlm
ICgkY29kZUdlbmVyYXRvci0+SXNGdW5jdGlvbk9ubHlDYWxsYmFja0ludGVyZmFjZSgkcGFyYW1l
dGVyLT50eXBlKSkgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgaWYgKCFleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KS5pc0Z1bmN0aW9uKCkpXG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmICghc3RhdGUtPmFy
Z3VtZW50KCRhcmdzSW5kZXgpLmlzRnVuY3Rpb24oKSlcbiIpOwogICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAo
IWV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpLmlzT2JqZWN0KCkpXG4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmICghc3RhdGUtPmFyZ3VtZW50KCRh
cmdzSW5kZXgpLmlzT2JqZWN0KCkpXG4iKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11
c3RCZUZ1bmN0aW9uRXJyb3IoKmV4ZWMsICRhcmdzSW5kZXgsIFwiJG5hbWVcIiwgXCIkaW50ZXJm
YWNlTmFtZVwiLCAkcXVvdGVkRnVuY3Rpb25OYW1lKTtcbiIpOworICAgICAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5j
dGlvbkVycm9yKCpzdGF0ZSwgJGFyZ3NJbmRleCwgXCIkbmFtZVwiLCBcIiRpbnRlcmZhY2VOYW1l
XCIsICRxdW90ZWRGdW5jdGlvbk5hbWUpO1xuIik7CiAgICAgICAgICAgICAgICAgaWYgKCRmdW5j
dGlvbi0+aXNTdGF0aWMpIHsKICAgICAgICAgICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMo
IkNhbGxiYWNrRnVuY3Rpb24uaCIpOwotICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgUmVmUHRyPCRhcmdUeXBlPiAkbmFtZSA9IGNyZWF0ZUZ1bmN0aW9uT25seUNh
bGxiYWNrPCR7Y2FsbGJhY2tDbGFzc05hbWV9PihleGVjLCBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCBleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgkYXJnc0luZGV4KSk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIFJlZlB0cjwkYXJnVHlwZT4gJG5hbWUgPSBjcmVhdGVGdW5jdGlvbk9ubHlDYWxs
YmFjazwke2NhbGxiYWNrQ2xhc3NOYW1lfT4oc3RhdGUsIGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1l
bnQoJGFyZ3NJbmRleCkpO1xuIik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFJlZlB0cjwkYXJnVHlwZT4gJG5h
bWUgPSAke2NhbGxiYWNrQ2xhc3NOYW1lfTo6Y3JlYXRlKGFzT2JqZWN0KGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KCRhcmdzSW5kZXgpKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpO1xuIik7
CisgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBSZWZQdHI8JGFy
Z1R5cGU+ICRuYW1lID0gJHtjYWxsYmFja0NsYXNzTmFtZX06OmNyZWF0ZShhc09iamVjdChzdGF0
ZS0+dW5jaGVja2VkQXJndW1lbnQoJGFyZ3NJbmRleCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSk7XG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0g
ZWxzaWYgKCRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDbGFtcCJ9KSB7CiAgICAg
ICAgICAgICBteSAkbmF0aXZlVmFsdWUgPSAiJHtuYW1lfU5hdGl2ZVZhbHVlIjsKICAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAkYXJnVHlwZSAkbmFtZSA9IDA7XG4iKTsKLSAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBkb3VibGUgJG5hdGl2ZVZhbHVlID0g
ZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkudG9OdW1iZXIoZXhlYyk7XG4iKTsKLSAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpKVxuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgZG91Ymxl
ICRuYXRpdmVWYWx1ZSA9IHN0YXRlLT5hcmd1bWVudCgkYXJnc0luZGV4KS50b051bWJlcihzdGF0
ZSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSlcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xu
XG4iKTsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoIXN0ZDo6aXNu
YW4oJG5hdGl2ZVZhbHVlKSlcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgICAgICAkbmFtZSA9IGNsYW1wVG88JGFyZ1R5cGU+KCRuYXRpdmVWYWx1ZSk7XG5cbiIpOwpA
QCAtMzM1NCwxNSArMzM1NCwxNSBAQCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKIAogICAg
ICAgICAgICAgaWYgKCFJc05hdGl2ZVR5cGUoJGFyZ1R5cGUpKSB7CiAgICAgICAgICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIFZlY3RvcjwkbmF0aXZlRWxlbWVudFR5cGU+ICRuYW1l
O1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGZvciAodW5z
aWduZWQgaSA9ICRhcmdzSW5kZXgsIGNvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOyBpIDwg
Y291bnQ7ICsraSkge1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgICAgICBpZiAoIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLmluaGVyaXRzKEpTJHthcmdU
eXBlfTo6aW5mbygpKSlcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKCpleGVjLCBpLCBcIiRu
YW1lXCIsIFwiJGludGVyZmFjZU5hbWVcIiwgJHF1b3RlZEZ1bmN0aW9uTmFtZSwgXCIkYXJnVHlw
ZVwiKTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAg
JG5hbWUuYXBwZW5kKEpTJHthcmdUeXBlfTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KGkpKSk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
Zm9yICh1bnNpZ25lZCBpID0gJGFyZ3NJbmRleCwgY291bnQgPSBzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpOyBpIDwgY291bnQ7ICsraSkge1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgICAgICBpZiAoIXN0YXRlLT51bmNoZWNrZWRBcmd1bWVudChpKS5pbmhlcml0
cyhKUyR7YXJnVHlwZX06OmluZm8oKSkpXG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJvcigqc3Rh
dGUsIGksIFwiJG5hbWVcIiwgXCIkaW50ZXJmYWNlTmFtZVwiLCAkcXVvdGVkRnVuY3Rpb25OYW1l
LCBcIiRhcmdUeXBlXCIpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgICAgICAkbmFtZS5hcHBlbmQoSlMke2FyZ1R5cGV9Ojp0b1dyYXBwZWQoc3RhdGUtPnVu
Y2hlY2tlZEFyZ3VtZW50KGkpKSk7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgfVxuIikKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIFZlY3RvcjwkbmF0aXZlRWxlbWVudFR5cGU+ICRuYW1l
ID0gdG9OYXRpdmVBcmd1bWVudHM8JG5hdGl2ZUVsZW1lbnRUeXBlPihleGVjLCAkYXJnc0luZGV4
KTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBWZWN0b3I8
JG5hdGl2ZUVsZW1lbnRUeXBlPiAkbmFtZSA9IHRvTmF0aXZlQXJndW1lbnRzPCRuYXRpdmVFbGVt
ZW50VHlwZT4oc3RhdGUsICRhcmdzSW5kZXgpO1xuIik7CiAgICAgICAgICAgICAgICAgIyBDaGVj
ayBpZiB0aGUgdHlwZSBjb252ZXJzaW9uIHN1Y2NlZWRlZC4KLSAgICAgICAgICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSlc
biIpOworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSlcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTtcbiIpOwogICAgICAgICAgICAgfQogCkBAIC0zMzcxLDcgKzMzNzEsNyBAQCBzdWIgR2VuZXJh
dGVQYXJhbWV0ZXJzQ2hlY2sKIAogICAgICAgICAgICAgbXkgJGV4Y2VwdGlvbkNoZWNrID0gc3Vi
IHsKICAgICAgICAgICAgICAgICBteSAkaW5kZW50ID0gc2hpZnQ7Ci0gICAgICAgICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4gIiAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpKVxuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAk
aW5kZW50IC4gIiAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSlcbiIpOwog
ICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGluZGVudCAuICIgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKICAgICAgICAgICAgIH07
CiAKQEAgLTMzODksMjMgKzMzODksMjMgQEAgc3ViIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrCiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4gIiAgICBpZiAoIiAuIGpvaW4oIiAmJiAiLCBA
ZW51bUNoZWNrcykgLiAiKVxuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAkaW5kZW50IC4gIiAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3Io
KmV4ZWMsICRhcmdzSW5kZXgsIFwiJG5hbWVcIiwgXCIkaW50ZXJmYWNlTmFtZVwiLCAkcXVvdGVk
RnVuY3Rpb25OYW1lLCBcIiRlbnVtc1wiKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgJGluZGVudCAuICIgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJl
RW51bUVycm9yKCpzdGF0ZSwgJGFyZ3NJbmRleCwgXCIkbmFtZVwiLCBcIiRpbnRlcmZhY2VOYW1l
XCIsICRxdW90ZWRGdW5jdGlvbk5hbWUsIFwiJGVudW1zXCIpO1xuIik7CiAgICAgICAgICAgICB9
OwogCi0gICAgICAgICAgICBteSAkYXJnVmFsdWUgPSAiZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRl
eCkiOworICAgICAgICAgICAgbXkgJGFyZ1ZhbHVlID0gInN0YXRlLT5hcmd1bWVudCgkYXJnc0lu
ZGV4KSI7CiAgICAgICAgICAgICBpZiAoJHBhcmFtZXRlci0+aXNPcHRpb25hbCAmJiAkcGFyYW1l
dGVyLT5kZWZhdWx0KSB7CiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IFN0cmluZyAkbmFtZTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICBpZiAoJHthcmdWYWx1ZX0uaXNVbmRlZmluZWQoKSlcbiIpOwogICAgICAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgJG5hbWUgPSBBU0NJSUxpdGVyYWwoIiAuICRw
YXJhbWV0ZXItPmRlZmF1bHQgLiAiKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICBlbHNlIHtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICAgICAgJG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgkYXJnc0luZGV4
KS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgICAgICRuYW1lID0gc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KCRhcmdzSW5kZXgpLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUpO1xuIik7CiAgICAgICAg
ICAgICAgICAgJiRleGNlcHRpb25DaGVjaygiICAgICIpOwogICAgICAgICAgICAgICAgICYkZW51
bVZhbHVlQ2hlY2soIiAgICAiKTsKICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgfVxuIik7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICAvLyBLZWVwIHBvaW50ZXIgdG8gdGhlIEpTU3RyaW5nIGluIGEg
bG9jYWwgc28gd2UgZG9uJ3QgbmVlZCB0byByZWYgdGhlIFN0cmluZy5cbiIpOwotICAgICAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvKiAke25hbWV9U3RyaW5nID0gJHth
cmdWYWx1ZX0udG9TdHJpbmcoZXhlYyk7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgYXV0byYgJG5hbWUgPSAke25hbWV9U3RyaW5nLT52YWx1ZShleGVjKTtc
biIpOworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvKiAke25h
bWV9U3RyaW5nID0gJHthcmdWYWx1ZX0udG9TdHJpbmcoc3RhdGUpO1xuIik7CisgICAgICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8mICRuYW1lID0gJHtuYW1lfVN0cmlu
Zy0+dmFsdWUoc3RhdGUpO1xuIik7CiAgICAgICAgICAgICAgICAgJiRleGNlcHRpb25DaGVjaygi
Iik7CiAgICAgICAgICAgICAgICAgJiRlbnVtVmFsdWVDaGVjaygiIik7CiAgICAgICAgICAgICB9
CkBAIC0zNDE4LDQ4ICszNDE4LDQ4IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAg
ICAgICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
U3RyaWN0VHlwZUNoZWNraW5nIn0pIHsKICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyI8
cnVudGltZS9FcnJvci5oPiJ9ID0gMTsKIAotICAgICAgICAgICAgICAgIG15ICRhcmdWYWx1ZSA9
ICJleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KSI7CisgICAgICAgICAgICAgICAgbXkgJGFyZ1Zh
bHVlID0gInN0YXRlLT5hcmd1bWVudCgkYXJnc0luZGV4KSI7CiAgICAgICAgICAgICAgICAgaWYg
KCRjb2RlR2VuZXJhdG9yLT5Jc1dyYXBwZXJUeXBlKCRhcmdUeXBlKSkgewogICAgICAgICAgICAg
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKCEke2FyZ1ZhbHVlfS5pc1VuZGVm
aW5lZE9yTnVsbCgpICYmICEke2FyZ1ZhbHVlfS5pbmhlcml0cyhKUyR7YXJnVHlwZX06OmluZm8o
KSkpXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAg
ICByZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJvcigqZXhlYywgJGFyZ3NJbmRleCwgXCIkbmFt
ZVwiLCBcIiRpbnRlcmZhY2VOYW1lXCIsICRxdW90ZWRGdW5jdGlvbk5hbWUsIFwiJGFyZ1R5cGVc
Iik7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAg
ICByZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJvcigqc3RhdGUsICRhcmdzSW5kZXgsIFwiJG5h
bWVcIiwgXCIkaW50ZXJmYWNlTmFtZVwiLCAkcXVvdGVkRnVuY3Rpb25OYW1lLCBcIiRhcmdUeXBl
XCIpO1xuIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBpZiAoJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJlcXVpcmVzRXhpc3RpbmdB
dG9taWNTdHJpbmcifSkgewogICAgICAgICAgICAgICAgICMgRklYTUU6IFRoaXMgY291bGQgYmUg
bWFkZSBzbGlnaHRseSBtb3JlIGVmZmljaWVudCBpZiB3ZSBhZGRlZCBhbiBBdG9taWNTdHJpbmco
UmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+JiYpIGNvbnN0cnVjdG9yIGFuZCByZW1vdmVkIHRoZSBj
YWxsIHRvIGdldCgpIGhlcmUuCi0gICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIEF0b21pY1N0cmluZyAkbmFtZSA9IGV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpLnRvU3Ry
aW5nKGV4ZWMpLT50b0V4aXN0aW5nQXRvbWljU3RyaW5nKGV4ZWMpLmdldCgpO1xuIik7CisgICAg
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEF0b21pY1N0cmluZyAkbmFtZSA9
IHN0YXRlLT5hcmd1bWVudCgkYXJnc0luZGV4KS50b1N0cmluZyhzdGF0ZSktPnRvRXhpc3RpbmdB
dG9taWNTdHJpbmcoc3RhdGUpLmdldCgpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIGlmICgkbmFtZS5pc051bGwoKSlcbiIpOwogICAgICAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051
bGwoKSk7XG4iKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbXkgJG91
dGVyOwogICAgICAgICAgICAgICAgIG15ICRpbm5lcjsKICAgICAgICAgICAgICAgICBpZiAoJG9w
dGlvbmFsICYmICRkZWZhdWx0QXR0cmlidXRlICYmICRkZWZhdWx0QXR0cmlidXRlIGVxICJOdWxs
U3RyaW5nIikgewotICAgICAgICAgICAgICAgICAgICAkb3V0ZXIgPSAiZXhlYy0+YXJndW1lbnQo
JGFyZ3NJbmRleCkuaXNVbmRlZmluZWQoKSA/IFN0cmluZygpIDogIjsKLSAgICAgICAgICAgICAg
ICAgICAgJGlubmVyID0gImV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KCRhcmdzSW5kZXgpIjsKKyAg
ICAgICAgICAgICAgICAgICAgJG91dGVyID0gInN0YXRlLT5hcmd1bWVudCgkYXJnc0luZGV4KS5p
c1VuZGVmaW5lZCgpID8gU3RyaW5nKCkgOiAiOworICAgICAgICAgICAgICAgICAgICAkaW5uZXIg
PSAic3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KCRhcmdzSW5kZXgpIjsKICAgICAgICAgICAgICAg
ICB9IGVsc2lmICgkb3B0aW9uYWwgJiYgJHBhcmFtZXRlci0+ZGVmYXVsdCkgewotICAgICAgICAg
ICAgICAgICAgICAkb3V0ZXIgPSAiZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkuaXNVbmRlZmlu
ZWQoKSA/ICIgLiAkcGFyYW1ldGVyLT5kZWZhdWx0ICAuICIgOiAiOwotICAgICAgICAgICAgICAg
ICAgICAkaW5uZXIgPSAiZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoJGFyZ3NJbmRleCkiOworICAg
ICAgICAgICAgICAgICAgICAkb3V0ZXIgPSAic3RhdGUtPmFyZ3VtZW50KCRhcmdzSW5kZXgpLmlz
VW5kZWZpbmVkKCkgPyAiIC4gJHBhcmFtZXRlci0+ZGVmYXVsdCAgLiAiIDogIjsKKyAgICAgICAg
ICAgICAgICAgICAgJGlubmVyID0gInN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgkYXJnc0luZGV4
KSI7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgJG91dGVy
ID0gIiI7Ci0gICAgICAgICAgICAgICAgICAgICRpbm5lciA9ICJleGVjLT5hcmd1bWVudCgkYXJn
c0luZGV4KSI7CisgICAgICAgICAgICAgICAgICAgICRpbm5lciA9ICJzdGF0ZS0+YXJndW1lbnQo
JGFyZ3NJbmRleCkiOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgIiAuIEdldE5hdGl2ZVR5cGVGcm9tU2lnbmF0dXJlKCRwYXJhbWV0
ZXIpIC4gIiAkbmFtZSA9ICRvdXRlciIgLiBKU1ZhbHVlVG9OYXRpdmUoJHBhcmFtZXRlciwgJGlu
bmVyLCAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbmRpdGlv
bmFsIn0pIC4gIjtcbiIpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAjIENoZWNrIGlm
IHRoZSB0eXBlIGNvbnZlcnNpb24gc3VjY2VlZGVkLgotICAgICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpXG4iKTsKKyAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSlcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CiAKICAgICAg
ICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNTVkdUeXBlTmVlZGluZ1RlYXJPZmYoJGFyZ1R5
cGUpIGFuZCBub3QgJGludGVyZmFjZU5hbWUgPX4gL0xpc3QkLykgewogICAgICAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoISRuYW1lKSB7XG4iKTsKLSAgICAgICAgICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBU
WVBFX01JU01BVENIX0VSUik7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgVFlQRV9NSVNNQVRDSF9FUlIpO1xu
Iik7CiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIH1cbiIpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBpZiAoJHBhcmFtZXRlci0+dHlwZSBlcSAiZG91YmxlIiBvciAkcGFyYW1ldGVyLT50eXBlIGVx
ICJmbG9hdCIpIHsKICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYg
KCFzdGQ6OmlzZmluaXRlKCRuYW1lKSkge1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVHlwZUVycm9yKTtcbiIp
OworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKHN0YXRlLCBUeXBlRXJyb3IpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
O1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIH1cbiIpOwog
ICAgICAgICAgICAgfQpAQCAtMzQ4NSw3ICszNDg1LDcgQEAgc3ViIEdlbmVyYXRlUmV0dXJuUGFy
YW1ldGVycwogICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0OwogICAgIG15IEBhcmd1bWVudHM7CiAK
LSAgICBwdXNoKEBhcmd1bWVudHMsICJEZWZlcnJlZFdyYXBwZXIoZXhlYywgY2FzdGVkVGhpcy0+
Z2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCkiKSBpZiBJc1JldHVybmluZ1Byb21pc2Uo
JGZ1bmN0aW9uKTsKKyAgICBwdXNoKEBhcmd1bWVudHMsICJEZWZlcnJlZFdyYXBwZXIoc3RhdGUs
IGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpIikgaWYgSXNSZXR1
cm5pbmdQcm9taXNlKCRmdW5jdGlvbik7CiAgICAgcHVzaChAYXJndW1lbnRzLCAiZWMiKSBpZiAk
ZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJhaXNlc0V4Y2VwdGlv
biJ9OwogICAgIHJldHVybiBAYXJndW1lbnRzOwogfQpAQCAtMzU2Nyw3ICszNTY3LDcgQEAgc3Vi
IEdlbmVyYXRlQ2FsbGJhY2tIZWFkZXIKIAogICAgICMgdG9KUygpLgogICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICJKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFs
T2JqZWN0KiwgJGludGVyZmFjZU5hbWUqKTtcbiIpOwotICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICJpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsICRpbnRlcmZhY2VOYW1lJiBpbXBsKSB7IHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgJmltcGwpOyB9XG5cbiIpOworICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICJpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCAkaW50ZXJmYWNlTmFtZSYgaW1wbCkg
eyByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAmaW1wbCk7IH1cblxuIik7CiAKICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAifSAvLyBuYW1lc3BhY2UgV2ViQ29yZVxuXG4iKTsKICAg
ICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb25kaXRp
b25hbFN0cmluZygkaW50ZXJmYWNlKTsKQEAgLTM3MDcsNyArMzcwNyw3IEBAIHN1YiBHZW5lcmF0
ZUNhbGxiYWNrSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICByZXR1cm4gdHJ1ZTtcblxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBSZWY8JGNsYXNzTmFtZT4gcHJvdGVjdCgqdGhpcyk7XG5cbiIpOwogICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9i
YWxPYmplY3QoKS0+dm0oKSk7XG5cbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBFeGVjU3RhdGUq
IHN0YXRlID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpO1xuIik7CiAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdz
O1xuIik7CiAKICAgICAgICAgICAgIGZvcmVhY2ggbXkgJHBhcmFtIChAcGFyYW1zKSB7CkBAIC0z
NzE3LDE0ICszNzE3LDE0IEBAIHN1YiBHZW5lcmF0ZUNhbGxiYWNrSW1wbGVtZW50YXRpb24KIAog
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiAgICBOYWtlZFB0cjxFeGNlcHRpb24+
IHJldHVybmVkRXhjZXB0aW9uO1xuIik7CiAKLSAgICAgICAgICAgIG15ICRwcm9wZXJ0eVRvTG9v
a3VwID0gIklkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgXCIke2Z1bmN0aW9uTmFtZX1cIiki
OworICAgICAgICAgICAgbXkgJHByb3BlcnR5VG9Mb29rdXAgPSAiSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyhzdGF0ZSwgXCIke2Z1bmN0aW9uTmFtZX1cIikiOwogICAgICAgICAgICAgbXkgJGludm9r
ZU1ldGhvZCA9ICJKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpGdW5jdGlvbk9yT2JqZWN0
IjsKICAgICAgICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250
YWlucygkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbGJhY2sifSwgIkZ1bmN0
aW9uT25seSIpKSB7CiAgICAgICAgICAgICAgICAgIyBGb3IgY2FsbGJhY2sgZnVuY3Rpb25zLCBk
byBub3QgbG9vayB1cCBjYWxsYWJsZSBwcm9wZXJ0eSBvbiB0aGUgdXNlciBvYmplY3QuCiAgICAg
ICAgICAgICAgICAgIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNlcy1jYWxsYmFj
ay1mdW5jdGlvbgogICAgICAgICAgICAgICAgICRpbnZva2VNZXRob2QgPSAiSlNDYWxsYmFja0Rh
dGE6OkNhbGxiYWNrVHlwZTo6RnVuY3Rpb24iOwogICAgICAgICAgICAgICAgICRwcm9wZXJ0eVRv
TG9va3VwID0gIklkZW50aWZpZXIoKSI7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgVU5VU0VEX1BBUkFNKGV4ZWMpO1xuIik7ICAgIAorICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7XG4iKTsgICAgCiAgICAg
ICAgICAgICB9IGVsc2lmICgkbnVtRnVuY3Rpb25zID4gMSkgewogICAgICAgICAgICAgICAgICMg
VGhlIGNhbGxiYWNrIGludGVyZmFjZSBoYXMgbW9yZSB0aGFuIG9uZSBvcGVyYXRpb24gc28gd2Ug
c2hvdWxkIG5vdCBjYWxsIHRoZSB1c2VyIG9iamVjdCBhcyBhIGZ1bmN0aW9uLgogICAgICAgICAg
ICAgICAgICMgaW5zdGVhZCwgd2Ugc2hvdWxkIGxvb2sgZm9yIGEgcHJvcGVydHkgd2l0aCB0aGUg
c2FtZSBuYW1lIGFzIHRoZSBvcGVyYXRpb24gb24gdGhlIHVzZXIgb2JqZWN0LgpAQCAtMzczNiw3
ICszNzM2LDcgQEAgc3ViIEdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlvbgogICAgICAgICAg
ICAgIyBGSVhNRTogV2UgY3VycmVudGx5IGp1c3QgcmVwb3J0IHRoZSBleGNlcHRpb24uIFdlIHNo
b3VsZCBwcm9iYWJseSBhZGQgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIHRvIGluZGljYXRlIHdoZW4K
ICAgICAgICAgICAgICMgd2Ugd2FudCB0aGUgZXhjZXB0aW9uIHRvIGJlIHJldGhyb3duIGluc3Rl
YWQuCiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAocmV0dXJuZWRFeGNl
cHRpb24pXG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXBv
cnRFeGNlcHRpb24oZXhlYywgcmV0dXJuZWRFeGNlcHRpb24pO1xuIik7CisgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmVwb3J0RXhjZXB0aW9uKHN0YXRlLCByZXR1cm5l
ZEV4Y2VwdGlvbik7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJl
dHVybiAhcmV0dXJuZWRFeGNlcHRpb247XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAifVxuIik7CiAgICAgICAgIH0KQEAgLTM3NzQsMTggKzM3NzQsMTggQEAgc3ViIEdlbmVy
YXRlSW1wbGVtZW50YXRpb25GdW5jdGlvbkNhbGwoKQogICAgICAgICBpZiAoJG5vbmRldGVybWlu
aXN0aWMpIHsKICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8cmVwbGF5L0lucHV0Q3Vy
c29yLmg+IiwgIldFQl9SRVBMQVkiKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
I2lmIEVOQUJMRShXRUJfUkVQTEFZKVxuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgJGluZGVudCAuICJJbnB1dEN1cnNvciYgY3Vyc29yID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5pbnB1dEN1cnNvcigpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgJGluZGVudCAuICJJbnB1dEN1cnNvciYgY3Vyc29yID0gc3RhdGUtPmxleGljYWxHbG9iYWxP
YmplY3QoKS0+aW5wdXRDdXJzb3IoKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICRpbmRlbnQgLiAiaWYgKCFjdXJzb3IuaXNSZXBsYXlpbmcoKSkge1xuIik7CiAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICIgICAgJGZ1bmN0aW9uU3RyaW5nO1xu
Iik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICIgICAgc2V0RE9N
RXhjZXB0aW9uKGV4ZWMsIGVjKTtcbiIpIGlmICRyYWlzZXNFeGNlcHRpb247CisgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICIgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRl
LCBlYyk7XG4iKSBpZiAkcmFpc2VzRXhjZXB0aW9uOwogICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICRpbmRlbnQgLiAifVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiNlbHNlXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gIiRm
dW5jdGlvblN0cmluZztcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRl
bnQgLiAic2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTtcbiIpIGlmICRyYWlzZXNFeGNlcHRpb247
CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICJzZXRET01FeGNlcHRp
b24oc3RhdGUsIGVjKTtcbiIpIGlmICRyYWlzZXNFeGNlcHRpb247CiAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiNlbmRpZlxuIik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICIkZnVuY3Rpb25TdHJpbmc7XG4iKTsKLSAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gInNldERPTUV4Y2VwdGlvbihl
eGVjLCBlYyk7XG4iKSBpZiAkcmFpc2VzRXhjZXB0aW9uOworICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICRpbmRlbnQgLiAic2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7XG4iKSBpZiAk
cmFpc2VzRXhjZXB0aW9uOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCRzdmdQcm9wZXJ0eVR5
cGUgYW5kICEkZnVuY3Rpb24tPmlzU3RhdGljKSB7CkBAIC0zODEwLDcgKzM4MTAsNyBAQCBzdWIg
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbCgpCiAgICAgICAgICAgICBteSAkYmlu
ZGluZ05hbWUgPSAkaW50ZXJmYWNlTmFtZSAuICIuIiAuICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5u
YW1lOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAiSlNWYWx1ZSBy
ZXN1bHQ7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2lmIEVOQUJMRShX
RUJfUkVQTEFZKVxuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAu
ICJJbnB1dEN1cnNvciYgY3Vyc29yID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5pbnB1
dEN1cnNvcigpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAu
ICJJbnB1dEN1cnNvciYgY3Vyc29yID0gc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+aW5w
dXRDdXJzb3IoKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQg
LiAic3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21pY1N0cmluZz4gYmluZGluZ05hbWUo
XCIkYmluZGluZ05hbWVcIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7XG4i
KTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gImlmIChjdXJzb3Iu
aXNDYXB0dXJpbmcoKSkge1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGlu
ZGVudCAuICIgICAgJG5hdGl2ZVR5cGUgbWVtb2l6ZWRSZXN1bHQgPSAkZnVuY3Rpb25TdHJpbmc7
XG4iKTsKQEAgLTM4MzQsMTAgKzM4MzQsMTAgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb25G
dW5jdGlvbkNhbGwoKQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICRpbmRlbnQgLiAiSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRm
dW5jdGlvbi0+c2lnbmF0dXJlLCAxLCAkaW50ZXJmYWNlTmFtZSwgJGZ1bmN0aW9uU3RyaW5nLCAk
dGhpc09iamVjdCkgLiAiO1xuIik7CiAgICAgICAgIH0KLSAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJcbiIgLiAkaW5kZW50IC4gInNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7XG4iKSBpZiAk
cmFpc2VzRXhjZXB0aW9uOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIiAuICRpbmRl
bnQgLiAic2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7XG4iKSBpZiAkcmFpc2VzRXhjZXB0aW9u
OwogCiAgICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlu
cygkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxXaXRoIn0s
ICJTY3JpcHRTdGF0ZSIpKSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVu
dCAuICJpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKVxuIik7CisgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICJpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSlcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQg
LiAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKICAgICAg
ICAgfQogCkBAIC0zOTc4LDYxICszOTc4LDYxIEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKIAogICAg
IG15ICR0eXBlID0gJHNpZ25hdHVyZS0+dHlwZTsKIAotICAgIHJldHVybiAiJHZhbHVlLnRvQm9v
bGVhbihleGVjKSIgaWYgJHR5cGUgZXEgImJvb2xlYW4iOwotICAgIHJldHVybiAiJHZhbHVlLnRv
TnVtYmVyKGV4ZWMpIiBpZiAkdHlwZSBlcSAiZG91YmxlIiBvciAkdHlwZSBlcSAidW5yZXN0cmlj
dGVkIGRvdWJsZSIgOwotICAgIHJldHVybiAiJHZhbHVlLnRvRmxvYXQoZXhlYykiIGlmICR0eXBl
IGVxICJmbG9hdCIgb3IgJHR5cGUgZXEgInVucmVzdHJpY3RlZCBmbG9hdCIgOworICAgIHJldHVy
biAiJHZhbHVlLnRvQm9vbGVhbihzdGF0ZSkiIGlmICR0eXBlIGVxICJib29sZWFuIjsKKyAgICBy
ZXR1cm4gIiR2YWx1ZS50b051bWJlcihzdGF0ZSkiIGlmICR0eXBlIGVxICJkb3VibGUiIG9yICR0
eXBlIGVxICJ1bnJlc3RyaWN0ZWQgZG91YmxlIiA7CisgICAgcmV0dXJuICIkdmFsdWUudG9GbG9h
dChzdGF0ZSkiIGlmICR0eXBlIGVxICJmbG9hdCIgb3IgJHR5cGUgZXEgInVucmVzdHJpY3RlZCBm
bG9hdCIgOwogCiAgICAgbXkgJGludENvbnZlcnNpb24gPSAkc2lnbmF0dXJlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiRW5mb3JjZVJhbmdlIn0gPyAiRW5mb3JjZVJhbmdlIiA6ICJOb3JtYWxDb252
ZXJzaW9uIjsKLSAgICByZXR1cm4gInRvSW50OChleGVjLCAkdmFsdWUsICRpbnRDb252ZXJzaW9u
KSIgaWYgJHR5cGUgZXEgImJ5dGUiOwotICAgIHJldHVybiAidG9VSW50OChleGVjLCAkdmFsdWUs
ICRpbnRDb252ZXJzaW9uKSIgaWYgJHR5cGUgZXEgIm9jdGV0IjsKLSAgICByZXR1cm4gInRvSW50
MTYoZXhlYywgJHZhbHVlLCAkaW50Q29udmVyc2lvbikiIGlmICR0eXBlIGVxICJzaG9ydCI7Ci0g
ICAgcmV0dXJuICJ0b1VJbnQxNihleGVjLCAkdmFsdWUsICRpbnRDb252ZXJzaW9uKSIgaWYgJHR5
cGUgZXEgInVuc2lnbmVkIHNob3J0IjsKLSAgICByZXR1cm4gInRvSW50MzIoZXhlYywgJHZhbHVl
LCAkaW50Q29udmVyc2lvbikiIGlmICR0eXBlIGVxICJsb25nIjsKLSAgICByZXR1cm4gInRvVUlu
dDMyKGV4ZWMsICR2YWx1ZSwgJGludENvbnZlcnNpb24pIiBpZiAkdHlwZSBlcSAidW5zaWduZWQg
bG9uZyI7Ci0gICAgcmV0dXJuICJ0b0ludDY0KGV4ZWMsICR2YWx1ZSwgJGludENvbnZlcnNpb24p
IiBpZiAkdHlwZSBlcSAibG9uZyBsb25nIjsKLSAgICByZXR1cm4gInRvVUludDY0KGV4ZWMsICR2
YWx1ZSwgJGludENvbnZlcnNpb24pIiBpZiAkdHlwZSBlcSAidW5zaWduZWQgbG9uZyBsb25nIjsK
KyAgICByZXR1cm4gInRvSW50OChzdGF0ZSwgJHZhbHVlLCAkaW50Q29udmVyc2lvbikiIGlmICR0
eXBlIGVxICJieXRlIjsKKyAgICByZXR1cm4gInRvVUludDgoc3RhdGUsICR2YWx1ZSwgJGludENv
bnZlcnNpb24pIiBpZiAkdHlwZSBlcSAib2N0ZXQiOworICAgIHJldHVybiAidG9JbnQxNihzdGF0
ZSwgJHZhbHVlLCAkaW50Q29udmVyc2lvbikiIGlmICR0eXBlIGVxICJzaG9ydCI7CisgICAgcmV0
dXJuICJ0b1VJbnQxNihzdGF0ZSwgJHZhbHVlLCAkaW50Q29udmVyc2lvbikiIGlmICR0eXBlIGVx
ICJ1bnNpZ25lZCBzaG9ydCI7CisgICAgcmV0dXJuICJ0b0ludDMyKHN0YXRlLCAkdmFsdWUsICRp
bnRDb252ZXJzaW9uKSIgaWYgJHR5cGUgZXEgImxvbmciOworICAgIHJldHVybiAidG9VSW50MzIo
c3RhdGUsICR2YWx1ZSwgJGludENvbnZlcnNpb24pIiBpZiAkdHlwZSBlcSAidW5zaWduZWQgbG9u
ZyI7CisgICAgcmV0dXJuICJ0b0ludDY0KHN0YXRlLCAkdmFsdWUsICRpbnRDb252ZXJzaW9uKSIg
aWYgJHR5cGUgZXEgImxvbmcgbG9uZyI7CisgICAgcmV0dXJuICJ0b1VJbnQ2NChzdGF0ZSwgJHZh
bHVlLCAkaW50Q29udmVyc2lvbikiIGlmICR0eXBlIGVxICJ1bnNpZ25lZCBsb25nIGxvbmciOwog
Ci0gICAgcmV0dXJuICJ2YWx1ZVRvRGF0ZShleGVjLCAkdmFsdWUpIiBpZiAkdHlwZSBlcSAiRGF0
ZSI7CisgICAgcmV0dXJuICJ2YWx1ZVRvRGF0ZShzdGF0ZSwgJHZhbHVlKSIgaWYgJHR5cGUgZXEg
IkRhdGUiOwogCiAgICAgaWYgKCR0eXBlIGVxICJET01TdHJpbmciKSB7CiAgICAgICAgICMgRklY
TUU6IFRoaXMgaW1wbGVtZW50cyBbVHJlYXROdWxsQXM9TnVsbFN0cmluZ10gYW5kIFtUcmVhdFVu
ZGVmaW5lZEFzPU51bGxTdHJpbmddLAogICAgICAgICAjIGJ1dCB0aGUgV2ViIElETCBzcGVjIHJl
cXVpcmVzIFtUcmVhdE51bGxBcz1FbXB0eVN0cmluZ10gYW5kIFtUcmVhdFVuZGVmaW5lZEFzPUVt
cHR5U3RyaW5nXS4KICAgICAgICAgaWYgKCgkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiVHJlYXROdWxsQXMifSBhbmQgJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlRy
ZWF0TnVsbEFzIn0gZXEgIk51bGxTdHJpbmciKSBhbmQgKCRzaWduYXR1cmUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJUcmVhdFVuZGVmaW5lZEFzIn0gYW5kICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJUcmVhdFVuZGVmaW5lZEFzIn0gZXEgIk51bGxTdHJpbmciKSkgewotICAgICAg
ICAgICAgcmV0dXJuICJ2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMs
ICR2YWx1ZSkiCisgICAgICAgICAgICByZXR1cm4gInZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVk
T3JOdWxsQ2hlY2soc3RhdGUsICR2YWx1ZSkiCiAgICAgICAgIH0KICAgICAgICAgaWYgKCgkc2ln
bmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVHJlYXROdWxsQXMifSBhbmQgJHNpZ25hdHVy
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlRyZWF0TnVsbEFzIn0gZXEgIk51bGxTdHJpbmciKSBv
ciAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmVmbGVjdCJ9KSB7Ci0gICAgICAg
ICAgICByZXR1cm4gInZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsICR2YWx1ZSkiCisg
ICAgICAgICAgICByZXR1cm4gInZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKHN0YXRlLCAkdmFs
dWUpIgogICAgICAgICB9CiAgICAgICAgIGlmICgkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiQXRvbWljU3RyaW5nIn0pIHsKLSAgICAgICAgICAgIHJldHVybiAiJHZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLT50b0F0b21pY1N0cmluZyhleGVjKSI7CisgICAgICAgICAgICByZXR1cm4gIiR2
YWx1ZS50b1N0cmluZyhzdGF0ZSktPnRvQXRvbWljU3RyaW5nKHN0YXRlKSI7CiAgICAgICAgIH0K
ICAgICAgICAgIyBGSVhNRTogQWRkIHRoZSBjYXNlIGZvciAnaWYgKCRzaWduYXR1cmUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJUcmVhdFVuZGVmaW5lZEFzIn0gYW5kICRzaWduYXR1cmUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJUcmVhdFVuZGVmaW5lZEFzIn0gZXEgIk51bGxTdHJpbmciKSknLgot
ICAgICAgICByZXR1cm4gIiR2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykiOworICAg
ICAgICByZXR1cm4gIiR2YWx1ZS50b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRlKSI7CiAgICAg
fQogCiAgICAgaWYgKCR0eXBlIGVxICJhbnkiKSB7CiAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVz
KCI8YmluZGluZ3MvU2NyaXB0VmFsdWUuaD4iKTsKLSAgICAgICAgcmV0dXJuICJ7IGV4ZWMtPnZt
KCksICR2YWx1ZSB9IjsKKyAgICAgICAgcmV0dXJuICJ7IHN0YXRlLT52bSgpLCAkdmFsdWUgfSI7
CiAgICAgfQogCiAgICAgaWYgKCR0eXBlIGVxICJOb2RlRmlsdGVyIikgewogICAgICAgICBBZGRU
b0ltcGxJbmNsdWRlcygiSlMkdHlwZS5oIiwgJGNvbmRpdGlvbmFsKTsKLSAgICAgICAgcmV0dXJu
ICJKUyR7dHlwZX06OnRvV3JhcHBlZChleGVjLT52bSgpLCAkdmFsdWUpIjsKKyAgICAgICAgcmV0
dXJuICJKUyR7dHlwZX06OnRvV3JhcHBlZChzdGF0ZS0+dm0oKSwgJHZhbHVlKSI7CiAgICAgfQog
CiAgICAgaWYgKCR0eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiKSB7CiAgICAgICAgIEFk
ZFRvSW1wbEluY2x1ZGVzKCJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIsICRjb25kaXRpb25hbCk7
Ci0gICAgICAgIHJldHVybiAiU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgJHZh
bHVlLCAwLCAwKSI7CisgICAgICAgIHJldHVybiAiU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVh
dGUoc3RhdGUsICR2YWx1ZSwgMCwgMCkiOwogICAgIH0KIAogICAgIGlmICgkdHlwZSBlcSAiRGlj
dGlvbmFyeSIpIHsKICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkRpY3Rpb25hcnkuaCIsICRj
b25kaXRpb25hbCk7Ci0gICAgICAgIHJldHVybiAieyBleGVjLCAkdmFsdWUgfSI7CisgICAgICAg
IHJldHVybiAieyBzdGF0ZSwgJHZhbHVlIH0iOwogICAgIH0KIAogICAgIGlmICgkdHlwZSBlcSAi
RE9NU3RyaW5nTGlzdCIgKSB7CiAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKU0RPTVN0cmlu
Z0xpc3QuaCIsICRjb25kaXRpb25hbCk7Ci0gICAgICAgIHJldHVybiAidG9ET01TdHJpbmdMaXN0
KGV4ZWMsICR2YWx1ZSkiOworICAgICAgICByZXR1cm4gInRvRE9NU3RyaW5nTGlzdChzdGF0ZSwg
JHZhbHVlKSI7CiAgICAgfQogICAgIAogICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNUeXBlZEFy
cmF5VHlwZSgkdHlwZSkpIHsKQEAgLTQwNDksMTMgKzQwNDksMTMgQEAgc3ViIEpTVmFsdWVUb05h
dGl2ZQogICAgIGlmICgkYXJyYXlPclNlcXVlbmNlVHlwZSkgewogICAgICAgICBpZiAoJGNvZGVH
ZW5lcmF0b3ItPklzUmVmUHRyVHlwZSgkYXJyYXlPclNlcXVlbmNlVHlwZSkpIHsKICAgICAgICAg
ICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKUyR7YXJyYXlPclNlcXVlbmNlVHlwZX0uaCIpOwotICAg
ICAgICAgICAgcmV0dXJuICIodG9SZWZQdHJOYXRpdmVBcnJheTwke2FycmF5T3JTZXF1ZW5jZVR5
cGV9LCBKUyR7YXJyYXlPclNlcXVlbmNlVHlwZX0+KGV4ZWMsICR2YWx1ZSwgJkpTJHthcnJheU9y
U2VxdWVuY2VUeXBlfTo6dG9XcmFwcGVkKSkiOworICAgICAgICAgICAgcmV0dXJuICIodG9SZWZQ
dHJOYXRpdmVBcnJheTwke2FycmF5T3JTZXF1ZW5jZVR5cGV9LCBKUyR7YXJyYXlPclNlcXVlbmNl
VHlwZX0+KHN0YXRlLCAkdmFsdWUsICZKUyR7YXJyYXlPclNlcXVlbmNlVHlwZX06OnRvV3JhcHBl
ZCkpIjsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gInRvTmF0aXZlQXJyYXk8IiAuIEdldE5h
dGl2ZVZlY3RvcklubmVyVHlwZSgkYXJyYXlPclNlcXVlbmNlVHlwZSkgLiAiPihleGVjLCAkdmFs
dWUpIjsKKyAgICAgICAgcmV0dXJuICJ0b05hdGl2ZUFycmF5PCIgLiBHZXROYXRpdmVWZWN0b3JJ
bm5lclR5cGUoJGFycmF5T3JTZXF1ZW5jZVR5cGUpIC4gIj4oc3RhdGUsICR2YWx1ZSkiOwogICAg
IH0KIAogICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNFbnVtVHlwZSgkdHlwZSkpIHsKLSAgICAg
ICAgcmV0dXJuICIkdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpIjsKKyAgICAgICAg
cmV0dXJuICIkdmFsdWUudG9TdHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSkiOwogICAgIH0KIAog
ICAgICMgRGVmYXVsdCwgYXNzdW1lIGF1dG9nZW5lcmF0ZWQgdHlwZSBjb252ZXJzaW9uIHJvdXRp
bmVzCkBAIC00MDgwLDEyICs0MDgwLDEyIEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAgICBpZiAo
JHR5cGUgZXEgIkRhdGUiKSB7CiAgICAgICAgIG15ICRjb252ID0gJHNpZ25hdHVyZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IlRyZWF0UmV0dXJuZWROYU5EYXRlQXMifTsKICAgICAgICAgaWYgKGRl
ZmluZWQgJGNvbnYpIHsKLSAgICAgICAgICAgIHJldHVybiAianNEYXRlT3JOdWxsKGV4ZWMsICR2
YWx1ZSkiIGlmICRjb252IGVxICJOdWxsIjsKLSAgICAgICAgICAgIHJldHVybiAianNEYXRlT3JO
YU4oZXhlYywgJHZhbHVlKSIgaWYgJGNvbnYgZXEgIk5hTiI7CisgICAgICAgICAgICByZXR1cm4g
ImpzRGF0ZU9yTnVsbChzdGF0ZSwgJHZhbHVlKSIgaWYgJGNvbnYgZXEgIk51bGwiOworICAgICAg
ICAgICAgcmV0dXJuICJqc0RhdGVPck5hTihzdGF0ZSwgJHZhbHVlKSIgaWYgJGNvbnYgZXEgIk5h
TiI7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGRpZSAiVW5rbm93biB2YWx1ZSBmb3IgVHJl
YXRSZXR1cm5lZE5hTkRhdGVBcyBleHRlbmRlZCBhdHRyaWJ1dGUiOwogICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiAianNEYXRlT3JOdWxsKGV4ZWMsICR2YWx1ZSkiOworICAgICAgICByZXR1cm4g
ImpzRGF0ZU9yTnVsbChzdGF0ZSwgJHZhbHVlKSI7CiAgICAgfQogCiAgICAgaWYgKCRzaWduYXR1
cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZWZsZWN0In0gYW5kICgkdHlwZSBlcSAidW5zaWdu
ZWQgbG9uZyIgb3IgJHR5cGUgZXEgInVuc2lnbmVkIHNob3J0IikpIHsKQEAgLTQwOTksMjAgKzQw
OTksMjAgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogCiAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5J
c0VudW1UeXBlKCR0eXBlKSkgewogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPHJ1bnRpbWUv
SlNTdHJpbmcuaD4iLCAkY29uZGl0aW9uYWwpOwotICAgICAgICByZXR1cm4gImpzU3RyaW5nV2l0
aENhY2hlKGV4ZWMsICR2YWx1ZSkiOworICAgICAgICByZXR1cm4gImpzU3RyaW5nV2l0aENhY2hl
KHN0YXRlLCAkdmFsdWUpIjsKICAgICB9CiAKICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzU3Ry
aW5nVHlwZSgkdHlwZSkpIHsKICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlVSTC5oIiwgJGNv
bmRpdGlvbmFsKTsKICAgICAgICAgbXkgJGNvbnYgPSAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcyJ9OwogICAgICAgICBpZiAoZGVmaW5l
ZCAkY29udikgewotICAgICAgICAgICAgcmV0dXJuICJqc1N0cmluZ09yTnVsbChleGVjLCAkdmFs
dWUpIiBpZiAkY29udiBlcSAiTnVsbCI7Ci0gICAgICAgICAgICByZXR1cm4gImpzU3RyaW5nT3JV
bmRlZmluZWQoZXhlYywgJHZhbHVlKSIgaWYgJGNvbnYgZXEgIlVuZGVmaW5lZCI7CisgICAgICAg
ICAgICByZXR1cm4gImpzU3RyaW5nT3JOdWxsKHN0YXRlLCAkdmFsdWUpIiBpZiAkY29udiBlcSAi
TnVsbCI7CisgICAgICAgICAgICByZXR1cm4gImpzU3RyaW5nT3JVbmRlZmluZWQoc3RhdGUsICR2
YWx1ZSkiIGlmICRjb252IGVxICJVbmRlZmluZWQiOwogCiAgICAgICAgICAgICBkaWUgIlVua25v
d24gdmFsdWUgZm9yIFRyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXMgZXh0ZW5kZWQgYXR0cmlidXRl
IjsKICAgICAgICAgfQogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPHJ1bnRpbWUvSlNTdHJp
bmcuaD4iLCAkY29uZGl0aW9uYWwpOwotICAgICAgICByZXR1cm4gImpzU3RyaW5nV2l0aENhY2hl
KGV4ZWMsICR2YWx1ZSkiOworICAgICAgICByZXR1cm4gImpzU3RyaW5nV2l0aENhY2hlKHN0YXRl
LCAkdmFsdWUpIjsKICAgICB9CiAgICAgCiAgICAgbXkgJGdsb2JhbE9iamVjdDsKQEAgLTQxNDMs
NyArNDE0Myw3IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAgICAgICAgfQogICAgICAgICBBZGRU
b0ltcGxJbmNsdWRlcygiPHJ1bnRpbWUvSlNBcnJheS5oPiIsICRjb25kaXRpb25hbCk7CiAKLSAg
ICAgICAgcmV0dXJuICJqc0FycmF5KGV4ZWMsICR0aGlzVmFsdWUtPmdsb2JhbE9iamVjdCgpLCAk
dmFsdWUpIjsKKyAgICAgICAgcmV0dXJuICJqc0FycmF5KHN0YXRlLCAkdGhpc1ZhbHVlLT5nbG9i
YWxPYmplY3QoKSwgJHZhbHVlKSI7CiAgICAgfQogCiAgICAgaWYgKCR0eXBlIGVxICJhbnkiKSB7
CkBAIC00MTU0LDcgKzQxNTQsNyBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAgICAgICAgIH0KICAg
ICB9IGVsc2lmICgkdHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIiBvciAkdHlwZSBlcSAi
YW55IikgewogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmgiLCAkY29uZGl0aW9uYWwpOwotICAgICAgICByZXR1cm4gIiR2YWx1ZSA/ICR2YWx1ZS0+ZGVz
ZXJpYWxpemUoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxsKCki
OworICAgICAgICByZXR1cm4gIiR2YWx1ZSA/ICR2YWx1ZS0+ZGVzZXJpYWxpemUoc3RhdGUsIGNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCAwKSA6IGpzTnVsbCgpIjsKICAgICB9IGVsc2lmICgk
Y29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlwZSgkdHlwZSkpIHsKICAgICAgICAgIyBEbyBu
b3RoaW5nIC0gYWxsIGhlYWRlcnMgYXJlIGFscmVhZHkgaW5jbHVkZWQuCiAgICAgfSBlbHNlIHsK
QEAgLTQxNjYsNyArNDE2Niw3IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAgICByZXR1cm4gJHZh
bHVlIGlmICRjb2RlR2VuZXJhdG9yLT5Jc1NWR0FuaW1hdGVkVHlwZSgkdHlwZSk7CiAKICAgICBp
ZiAoJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5ld09iamVjdCJ9KSB7Ci0gICAg
ICAgIHJldHVybiAidG9KU05ld2x5Q3JlYXRlZChleGVjLCAkZ2xvYmFsT2JqZWN0LCBXVEY6Omdl
dFB0cigkdmFsdWUpKSI7CisgICAgICAgIHJldHVybiAidG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwg
JGdsb2JhbE9iamVjdCwgV1RGOjpnZXRQdHIoJHZhbHVlKSkiOwogICAgIH0KIAogICAgIGlmICgk
Y29kZUdlbmVyYXRvci0+SXNTVkdBbmltYXRlZFR5cGUoJGludGVyZmFjZU5hbWUpIG9yICRpbnRl
cmZhY2VOYW1lIGVxICJTVkdWaWV3U3BlYyIpIHsKQEAgLTQxOTgsOSArNDE5OCw5IEBAIHN1YiBO
YXRpdmVUb0pTVmFsdWUKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoJGdsb2JhbE9iamVjdCkg
ewotICAgICAgICByZXR1cm4gInRvSlMoZXhlYywgJGdsb2JhbE9iamVjdCwgV1RGOjpnZXRQdHIo
JHZhbHVlKSkiOworICAgICAgICByZXR1cm4gInRvSlMoc3RhdGUsICRnbG9iYWxPYmplY3QsIFdU
Rjo6Z2V0UHRyKCR2YWx1ZSkpIjsKICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gInRvSlMo
ZXhlYywganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpKSwgV1RGOjpnZXRQdHIoJHZhbHVlKSkiOworICAgICAgICByZXR1cm4gInRvSlMoc3RhdGUs
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkp
LCBXVEY6OmdldFB0cigkdmFsdWUpKSI7CiAgICAgfQogfQogCkBAIC00NjQ0LDkgKzQ2NDQsOSBA
QCBzdWIgR2VuZXJhdGVPdmVybG9hZGVkQ29uc3RydWN0b3JEZWZpbml0aW9uCiAgICAgbXkgJGxl
bmd0aE9mTG9uZ2VzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvclBhcmFtZXRlckxpc3QgPSBMZW5ndGhP
Zkxvbmdlc3RGdW5jdGlvblBhcmFtZXRlckxpc3QoJGludGVyZmFjZS0+Y29uc3RydWN0b3JzKTsK
IAogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgPDxFTkQpOwotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCAke2Z1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCAke2Z1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBz
aXplX3QgYXJnc0NvdW50ID0gc3RkOjptaW48c2l6ZV90PigkbGVuZ3RoT2ZMb25nZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yUGFyYW1ldGVyTGlzdCwgZXhlYy0+YXJndW1lbnRDb3VudCgpKTsKKyAg
ICBzaXplX3QgYXJnc0NvdW50ID0gc3RkOjptaW48c2l6ZV90PigkbGVuZ3RoT2ZMb25nZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yUGFyYW1ldGVyTGlzdCwgc3RhdGUtPmFyZ3VtZW50Q291bnQoKSk7
CiBFTkQKIAogICAgIG15ICVmZXRjaGVkQXJndW1lbnRzID0gKCk7CkBAIC00NjU5LDIwICs0NjU5
LDIwIEBAIEVORAogCiAgICAgICAgIGZvcmVhY2ggbXkgJHBhcmFtZXRlckluZGV4IChAbmVlZGVk
QXJndW1lbnRzKSB7CiAgICAgICAgICAgICBuZXh0IGlmIGV4aXN0cyAkZmV0Y2hlZEFyZ3VtZW50
c3skcGFyYW1ldGVySW5kZXh9OwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IEpTVmFsdWUgYXJnJHBhcmFtZXRlckluZGV4KGV4ZWMtPmFyZ3VtZW50KCRwYXJhbWV0ZXJJbmRl
eCkpO1xuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgSlNWYWx1ZSBh
cmckcGFyYW1ldGVySW5kZXgoc3RhdGUtPmFyZ3VtZW50KCRwYXJhbWV0ZXJJbmRleCkpO1xuIik7
CiAgICAgICAgICAgICAkZmV0Y2hlZEFyZ3VtZW50c3skcGFyYW1ldGVySW5kZXh9ID0gMTsKICAg
ICAgICAgfQogCiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoJHBhcmFtZXRl
cnNDaGVjaylcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVy
biAke2Z1bmN0aW9uTmFtZX0kb3ZlcmxvYWQtPntvdmVybG9hZGVkSW5kZXh9KGV4ZWMpO1xuIik7
CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuICR7ZnVuY3Rpb25O
YW1lfSRvdmVybG9hZC0+e292ZXJsb2FkZWRJbmRleH0oc3RhdGUpO1xuIik7CiAgICAgfQogCiAg
ICAgaWYgKCRsZWFzdE51bU1hbmRhdG9yeVBhcmFtcyA+PSAxKSB7CiAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICBpZiAoYXJnc0NvdW50IDwgJGxlYXN0TnVtTWFuZGF0b3J5UGFyYW1z
KVxuIik7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7XG4iKTsK
KyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpO1xuIik7CiAgICAg
fQogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgPDxFTkQpOwotICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMpOworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlKTsKIH0KIAog
RU5ECkBAIC00Njk3LDMwICs0Njk3LDMwIEBAIHN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVmaW5p
dGlvbgogICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siPHJ1bnRpbWUvRXJyb3IuaD4ifSA9IDE7
CiAKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgPDxFTkQpOwotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCAke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfTo6Y29uc3RydWN0JHtjbGFz
c05hbWV9KEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtj
b25zdHJ1Y3RvckNsYXNzTmFtZX06OmNvbnN0cnVjdCR7Y2xhc3NOYW1lfShFeGVjU3RhdGUqIHN0
YXRlKQogewotICAgIGF1dG8qIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8JHtjb25zdHJ1Y3RvckNs
YXNzTmFtZX0qPihleGVjLT5jYWxsZWUoKSk7CisgICAgYXV0byoganNDb25zdHJ1Y3RvciA9IGpz
Q2FzdDwke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfSo+KHN0YXRlLT5jYWxsZWUoKSk7CiAKLSAgICBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBleGVjdXRpb25Db250ZXh0ID0ganNDb25zdHJ1Y3Rvci0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIGlmICghZXhlY3V0aW9uQ29udGV4dCkKLSAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVSZWZlcmVuY2VFcnJvcihleGVj
LCAiQ29uc3RydWN0b3IgYXNzb2NpYXRlZCBleGVjdXRpb24gY29udGV4dCBpcyB1bmF2YWlsYWJs
ZSIpKTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzdGF0ZXV0aW9uQ29udGV4dCA9IGpz
Q29uc3RydWN0b3ItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoIXN0YXRldXRp
b25Db250ZXh0KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVSZWZl
cmVuY2VFcnJvcihzdGF0ZSwgIkNvbnN0cnVjdG9yIGFzc29jaWF0ZWQgc3RhdGV1dGlvbiBjb250
ZXh0IGlzIHVuYXZhaWxhYmxlIikpOwogCi0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFy
Z3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogCi0gICAgQXRvbWljU3RyaW5n
IGV2ZW50VHlwZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT50b0F0b21pY1N0
cmluZyhleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IEF0b21pY1N0cmluZyBldmVudFR5cGUgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9TdHJpbmcoc3Rh
dGUpLT50b0F0b21pY1N0cmluZyhzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAKICAgICAke2ludGVyZmFjZU5hbWV9SW5pdCBldmVudEluaXQ7CiAKLSAgICBKU1ZhbHVl
IGluaXRpYWxpemVyVmFsdWUgPSBleGVjLT5hcmd1bWVudCgxKTsKKyAgICBKU1ZhbHVlIGluaXRp
YWxpemVyVmFsdWUgPSBzdGF0ZS0+YXJndW1lbnQoMSk7CiAgICAgaWYgKCFpbml0aWFsaXplclZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgICAgLy8gR2l2ZW4gdGhlIGFib3ZlIHRl
c3QsIHRoaXMgd2lsbCBhbHdheXMgeWllbGQgYW4gb2JqZWN0LgotICAgICAgICBKU09iamVjdCog
aW5pdGlhbGl6ZXJPYmplY3QgPSBpbml0aWFsaXplclZhbHVlLnRvT2JqZWN0KGV4ZWMpOworICAg
ICAgICBKU09iamVjdCogaW5pdGlhbGl6ZXJPYmplY3QgPSBpbml0aWFsaXplclZhbHVlLnRvT2Jq
ZWN0KHN0YXRlKTsKIAogICAgICAgICAvLyBDcmVhdGUgdGhlIGRpY3Rpb25hcnkgd3JhcHBlciBm
cm9tIHRoZSBpbml0aWFsaXplciBvYmplY3QuCi0gICAgICAgIEpTRGljdGlvbmFyeSBkaWN0aW9u
YXJ5KGV4ZWMsIGluaXRpYWxpemVyT2JqZWN0KTsKKyAgICAgICAgSlNEaWN0aW9uYXJ5IGRpY3Rp
b25hcnkoc3RhdGUsIGluaXRpYWxpemVyT2JqZWN0KTsKIAogICAgICAgICAvLyBBdHRlbXB0IHRv
IGZpbGwgaW4gdGhlIEV2ZW50SW5pdC4KICAgICAgICAgaWYgKCFmaWxsJHtpbnRlcmZhY2VOYW1l
fUluaXQoZXZlbnRJbml0LCBkaWN0aW9uYXJ5KSkKQEAgLTQ3MjgsNyArNDcyOCw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OmNvbnN0cnVj
dCR7Y2xhc3NOYW1lfShFeGVjCiAgICAgfQogCiAgICAgUmVmUHRyPCR7aW50ZXJmYWNlTmFtZX0+
IGV2ZW50ID0gJHtpbnRlcmZhY2VOYW1lfTo6Y3JlYXRlKGV2ZW50VHlwZSwgZXZlbnRJbml0KTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlMoZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xv
YmFsT2JqZWN0KCksIGV2ZW50LmdldCgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
b0pTKHN0YXRlLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgZXZlbnQuZ2V0KCkpKTsK
IH0KIAogYm9vbCBmaWxsJHtpbnRlcmZhY2VOYW1lfUluaXQoJHtpbnRlcmZhY2VOYW1lfUluaXQm
IGV2ZW50SW5pdCwgSlNEaWN0aW9uYXJ5JiBkaWN0aW9uYXJ5KQpAQCAtNDc2Nyw5ICs0NzY3LDkg
QEAgRU5ECiAgICAgICAgICAgICAgICAgJG92ZXJsb2FkZWRJbmRleFN0cmluZyAuPSAkZnVuY3Rp
b24tPntvdmVybG9hZGVkSW5kZXh9OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICJFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7Y29uc3RydWN0
b3JDbGFzc05hbWV9Ojpjb25zdHJ1Y3Qke2NsYXNzTmFtZX0ke292ZXJsb2FkZWRJbmRleFN0cmlu
Z30oRXhlY1N0YXRlKiBleGVjKVxuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICJFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7Y29uc3RydWN0b3JDbGFzc05hbWV9Ojpj
b25zdHJ1Y3Qke2NsYXNzTmFtZX0ke292ZXJsb2FkZWRJbmRleFN0cmluZ30oRXhlY1N0YXRlKiBz
dGF0ZSlcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAie1xuIik7Ci0gICAg
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2Fz
dDwke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfSo+KGV4ZWMtPmNhbGxlZSgpKTtcbiIpOworICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8
JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX0qPihzdGF0ZS0+Y2FsbGVlKCkpO1xuIik7CiAKICAgICAg
ICAgICAgIG15IEBjb25zdHJ1Y3RvckFyZ0xpc3Q7CiAKQEAgLTQ3ODgsMjAgKzQ3ODgsMjAgQEAg
RU5ECiAgICAgICAgICAgICBteSAoJGR1bW15LCAkcGFyYW1JbmRleCkgPSBHZW5lcmF0ZVBhcmFt
ZXRlcnNDaGVjaygkb3V0cHV0QXJyYXksICRmdW5jdGlvbiwgJGludGVyZmFjZSwgJG51bVBhcmFt
ZXRlcnMsICRpbnRlcmZhY2VOYW1lLCAiY29uc3RydWN0b3JDYWxsYmFjayIsIHVuZGVmLCB1bmRl
ZiwgdW5kZWYpOwogCiAgICAgICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0
cmlidXRlQ29udGFpbnMoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVj
dG9yQ2FsbFdpdGgifSwgIlNjcmlwdFN0YXRlIikpIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBj
b25zdHJ1Y3RvckFyZ0xpc3QsICIqZXhlYyIpOworICAgICAgICAgICAgICAgIHB1c2goQGNvbnN0
cnVjdG9yQXJnTGlzdCwgIipzdGF0ZSIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYg
KCRjb2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRhaW5zKCRpbnRlcmZhY2UtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJDb25zdHJ1Y3RvckNhbGxXaXRoIn0sICJTY3JpcHRFeGVjdXRp
b25Db250ZXh0IikpIHsKICAgICAgICAgICAgICAgICBwdXNoKEBjb25zdHJ1Y3RvckFyZ0xpc3Qs
ICIqY29udGV4dCIpOwogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gY2FzdGVkVGhpcy0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIGlmICghY29udGV4dClcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICAgICAgcmV0dXJuIHRocm93Q29uc3RydWN0b3JEb2N1bWVudFVuYXZhaWxhYmxlRXJy
b3IoKmV4ZWMsIFwiJHtpbnRlcmZhY2VOYW1lfVwiKTtcbiIpOworICAgICAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIHRocm93Q29uc3RydWN0b3JEb2N1bWVu
dFVuYXZhaWxhYmxlRXJyb3IoKnN0YXRlLCBcIiR7aW50ZXJmYWNlTmFtZX1cIik7XG4iKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRy
aWJ1dGVDb250YWlucygkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0
b3JDYWxsV2l0aCJ9LCAiRG9jdW1lbnQiKSkgewogICAgICAgICAgICAgICAgICRpbXBsSW5jbHVk
ZXN7IkRvY3VtZW50LmgifSA9IDE7CiAgICAgICAgICAgICAgICAgcHVzaChAY29uc3RydWN0b3JB
cmdMaXN0LCAiZG9jdW1lbnQiKTsKICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IGNhc3RlZFRoaXMtPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICBpZiAoIWNvbnRleHQpXG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgICAgIHJldHVybiB0aHJvd0NvbnN0cnVjdG9yRG9jdW1lbnRVbmF2YWls
YWJsZUVycm9yKCpleGVjLCBcIiR7aW50ZXJmYWNlTmFtZX1cIik7XG4iKTsKKyAgICAgICAgICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiB0aHJvd0NvbnN0cnVjdG9y
RG9jdW1lbnRVbmF2YWlsYWJsZUVycm9yKCpzdGF0ZSwgXCIke2ludGVyZmFjZU5hbWV9XCIpO1xu
Iik7CiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8mIGRvY3Vt
ZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTtcbiIpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgaWYgKCRnZW5lcmF0aW5nTmFtZWRDb25zdHJ1Y3RvcikgewpAQCAtNDgyNywx
NyArNDgyNywxNyBAQCBFTkQKIAogICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJDb25zdHJ1Y3RvclJhaXNlc0V4Y2VwdGlvbiJ9KSB7CiAgICAgICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChlYykge1xuIik7Ci0gICAgICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywg
ZWMpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBz
ZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpO1xu
Iik7CiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIH1cbiIpOwogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0
cmlidXRlQ29udGFpbnMoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVj
dG9yQ2FsbFdpdGgifSwgIlNjcmlwdFN0YXRlIikpIHsKLSAgICAgICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpXG4i
KTsKKyAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKVxuIik7CiAgICAgICAgICAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTtcbiIpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKGV4ZWMsIGNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpLCBvYmplY3QuZ2V0KCkpKSk7XG4iKTsKKyAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzT2JqZWN0KHRv
SlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBvYmplY3QuZ2V0KCkpKSk7XG4i
KTsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn1cblxuIik7CiAgICAgICAgIH0K
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCmluZGV4IDUxMTVmN2FiY2Nh
MzE0NDdhNGI4NmMzZTViMzExZmM3YjE3NWQ0MDUuLjU3OWE2NGUwNTJmOWE3ZGU0M2VmNjYwYzli
MzZlYTJlN2NlOGFjZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCkBAIC0x
NjYsMjIgKzE2NiwyMiBAQCBKU1Rlc3RBY3RpdmVET01PYmplY3Q6On5KU1Rlc3RBY3RpdmVET01P
YmplY3QoKQogICAgIHJlbGVhc2VJbXBsKCk7CiB9CiAKLWJvb2wgSlNUZXN0QWN0aXZlRE9NT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpT
VGVzdEFjdGl2ZURPTU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYgc2xvdCkKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdEFjdGl2ZURP
TU9iamVjdCo+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwotICAgIGlmIChnZXRTdGF0aWNWYWx1ZVNsb3Q8SlNUZXN0QWN0aXZlRE9N
T2JqZWN0LCBCYXNlPihleGVjLCBKU1Rlc3RBY3RpdmVET01PYmplY3RUYWJsZSwgdGhpc09iamVj
dCwgcHJvcGVydHlOYW1lLCBzbG90KSkKKyAgICBpZiAoZ2V0U3RhdGljVmFsdWVTbG90PEpTVGVz
dEFjdGl2ZURPTU9iamVjdCwgQmFzZT4oc3RhdGUsIEpTVGVzdEFjdGl2ZURPTU9iamVjdFRhYmxl
LCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9i
amVjdEV4Y2l0aW5nQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RBY3RpdmVET01PYmplY3RFeGNpdGluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3Qq
IHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIGF1
dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0QWN0aXZlRE9NT2JqZWN0Kj4oc2xvdEJhc2Up
OwotICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93
KGV4ZWMsIGNhc3RlZFRoaXMtPmltcGwoKSkpCisgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNo
b3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coc3RhdGUsIGNhc3RlZFRoaXMtPmltcGwoKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVy
KGltcGwuZXhjaXRpbmdBdHRyKCkpOwpAQCAtMTg5LDE0ICsxODksMTQgQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0QWN0aXZlRE9NT2JqZWN0RXhjaXRpbmdBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIHNsb3QKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RD
b25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmpl
Y3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCosIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIEpTVGVzdEFjdGl2ZURPTU9iamVjdCog
ZG9tT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RBY3RpdmVET01PYmplY3QqPihKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKCFkb21PYmplY3QpCi0gICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91
bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGV4ZWMsIGRvbU9iamVjdC0+aW1wbCgpKSkKKyAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUpOworICAgIGlmICghQmluZGluZ1NlY3Vy
aXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KHN0YXRlLCBkb21PYmplY3QtPmltcGwo
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RBY3RpdmVET01PYmplY3Q6OmdldENvbnN0cnVj
dG9yKGV4ZWMtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdEFjdGl2ZURPTU9iamVjdDo6Z2V0Q29uc3RydWN0b3Ioc3Rh
dGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAogSlNWYWx1ZSBKU1Rl
c3RBY3RpdmVET01PYmplY3Q6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKQEAgLTIwNCwzNyArMjA0LDM3IEBAIEpTVmFsdWUgSlNUZXN0QWN0aXZl
RE9NT2JqZWN0OjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplCiAgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdEFjdGl2ZURPTU9iamVjdENv
bnN0cnVjdG9yPih2bSwganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0QWN0aXZlRE9NT2JqZWN0
UHJvdG90eXBlRnVuY3Rpb25FeGNpdGluZ0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVu
Y3Rpb25FeGNpdGluZ0Z1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0
aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0
YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RBY3RpdmVET01PYmplY3QqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdEFjdGl2ZURPTU9iamVjdCo+KHRoaXNWYWx1ZSk7CiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVF
cnJvcigqZXhlYywgIlRlc3RBY3RpdmVET01PYmplY3QiLCAiZXhjaXRpbmdGdW5jdGlvbiIpOwor
ICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RBY3RpdmVET01P
YmplY3QiLCAiZXhjaXRpbmdGdW5jdGlvbiIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFMoY2FzdGVkVGhpcywgSlNUZXN0QWN0aXZlRE9NT2JqZWN0OjppbmZvKCkpOwotICAgIGlmICgh
QmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGV4ZWMsIGNhc3Rl
ZFRoaXMtPmltcGwoKSkpCisgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNj
ZXNzVG9ET01XaW5kb3coc3RhdGUsIGNhc3RlZFRoaXMtPmltcGwoKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPmltcGwoKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwg
MSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IoZXhlYykpOwotICAgIE5vZGUqIG5leHRDaGlsZCA9IEpTTm9kZTo6dG9XcmFw
cGVkKGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKHN0YXRlKSk7CisgICAgTm9kZSogbmV4dENoaWxkID0gSlNOb2RlOjp0b1dyYXBwZWQo
c3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBpbXBsLmV4Y2l0aW5nRnVuY3Rpb24obmV4dENoaWxkKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZUZ1bmN0aW9uUG9zdE1lc3NhZ2UoRXhlY1N0
YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RBY3RpdmVET01P
YmplY3RQcm90b3R5cGVGdW5jdGlvblBvc3RNZXNzYWdlKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0g
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RBY3RpdmVET01PYmplY3Qq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEFjdGl2ZURPTU9iamVjdCo+KHRoaXNW
YWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRo
cm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RBY3RpdmVET01PYmplY3QiLCAicG9zdE1lc3Nh
Z2UiKTsKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0QWN0
aXZlRE9NT2JqZWN0IiwgInBvc3RNZXNzYWdlIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RBY3RpdmVET01PYmplY3Q6OmluZm8oKSk7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIFN0cmluZyBtZXNzYWdlID0g
ZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChV
TkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAgICBTdHJpbmcgbWVzc2Fn
ZSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRlKTsKKyAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLnBvc3RNZXNzYWdlKG1lc3Nh
Z2UpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZl
RE9NT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0QWN0aXZlRE9NT2JqZWN0LmgKaW5kZXggYmNhMGEzMDg4ODQ3MDUwMGZhZjc5ZTM2N2IwYmVk
ZWI5ZTNkZjdlMi4uM2U2ZDQ2Njk2NTViNmM5ZmMzMzE1MDI5YTQ1MmZlYTNlYWZhNTFhNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFj
dGl2ZURPTU9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuaApAQCAtODMsNyArODMsNyBAQCBpbmxpbmUgSlND
OjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmLCBUZXN0QWN0
aXZlRE9NT2JqZWN0KgogfQogCiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpT
RE9NR2xvYmFsT2JqZWN0KiwgVGVzdEFjdGl2ZURPTU9iamVjdCopOwotaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBUZXN0QWN0aXZlRE9NT2JqZWN0JiBpbXBsKSB7IHJldHVybiB0b0pTKGV4ZWMsIGds
b2JhbE9iamVjdCwgJmltcGwpOyB9CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0QWN0aXZl
RE9NT2JqZWN0JiBpbXBsKSB7IHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICZpbXBs
KTsgfQogSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RP
TUdsb2JhbE9iamVjdCosIFRlc3RBY3RpdmVET01PYmplY3QqKTsKIAogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNr
LmNwcAppbmRleCA5MTg5YjI1OWNiN2I2NjY4Yzg5NmFiZGQ5NWU4NjI4ODA3YjRhYmJjLi40ODZm
YTk0ZWUwZTkwOWQyN2I5N2M3OGY2NDZmMjg0NzhhY2VlYjMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5j
cHAKQEAgLTEyNiwxMyArMTI2LDEzIEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0
aE5vUGFyYW0oKQogCiAgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3Qo
KS0+dm0oKSk7CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2RhdGEtPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxFeGVjKCk7CisgICAgRXhlY1N0YXRlKiBzdGF0ZSA9IG1fZGF0YS0+Z2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogCiAg
ICAgTmFrZWRQdHI8RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsKLSAgICBtX2RhdGEtPmlu
dm9rZUNhbGxiYWNrKGFyZ3MsIEpTQ2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6Ok9iamVjdCwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiY2FsbGJhY2tXaXRoTm9QYXJhbSIpLCByZXR1
cm5lZEV4Y2VwdGlvbik7CisgICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdzLCBKU0NhbGxi
YWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoc3Rh
dGUsICJjYWxsYmFja1dpdGhOb1BhcmFtIiksIHJldHVybmVkRXhjZXB0aW9uKTsKICAgICBpZiAo
cmV0dXJuZWRFeGNlcHRpb24pCi0gICAgICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCByZXR1cm5l
ZEV4Y2VwdGlvbik7CisgICAgICAgIHJlcG9ydEV4Y2VwdGlvbihzdGF0ZSwgcmV0dXJuZWRFeGNl
cHRpb24pOwogICAgIHJldHVybiAhcmV0dXJuZWRFeGNlcHRpb247CiB9CiAKQEAgLTE0NSwxNCAr
MTQ1LDE0IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aEFycmF5UGFyYW0oUmVm
UHRyPEZsb2F0MzJBcnJheT4gYXJyYXlQYXJhbSkKIAogICAgIEpTTG9ja0hvbGRlciBsb2NrKG1f
ZGF0YS0+Z2xvYmFsT2JqZWN0KCktPnZtKCkpOwogCi0gICAgRXhlY1N0YXRlKiBleGVjID0gbV9k
YXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgIEV4ZWNTdGF0ZSogc3RhdGUg
PSBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgTWFya2VkQXJndW1l
bnRCdWZmZXIgYXJnczsKLSAgICBhcmdzLmFwcGVuZCh0b0pTKGV4ZWMsIG1fZGF0YS0+Z2xvYmFs
T2JqZWN0KCksIFdURjo6Z2V0UHRyKGFycmF5UGFyYW0pKSk7CisgICAgYXJncy5hcHBlbmQodG9K
UyhzdGF0ZSwgbV9kYXRhLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoYXJyYXlQYXJhbSkp
KTsKIAogICAgIE5ha2VkUHRyPEV4Y2VwdGlvbj4gcmV0dXJuZWRFeGNlcHRpb247Ci0gICAgbV9k
YXRhLT5pbnZva2VDYWxsYmFjayhhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpP
YmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImNhbGxiYWNrV2l0aEFycmF5UGFy
YW0iKSwgcmV0dXJuZWRFeGNlcHRpb24pOworICAgIG1fZGF0YS0+aW52b2tlQ2FsbGJhY2soYXJn
cywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHN0YXRlLCAiY2FsbGJhY2tXaXRoQXJyYXlQYXJhbSIpLCByZXR1cm5lZEV4Y2VwdGlv
bik7CiAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKQotICAgICAgICByZXBvcnRFeGNlcHRpb24o
ZXhlYywgcmV0dXJuZWRFeGNlcHRpb24pOworICAgICAgICByZXBvcnRFeGNlcHRpb24oc3RhdGUs
IHJldHVybmVkRXhjZXB0aW9uKTsKICAgICByZXR1cm4gIXJldHVybmVkRXhjZXB0aW9uOwogfQog
CkBAIC0xNjUsMTUgKzE2NSwxNSBAQCBib29sIEpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhT
ZXJpYWxpemVkU2NyaXB0VmFsdWVQYXJhbShQYXNzUmVmUHRyPFNlcmlhbGl6ZQogCiAgICAgSlNM
b2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+dm0oKSk7CiAKLSAgICBFeGVj
U3RhdGUqIGV4ZWMgPSBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAg
RXhlY1N0YXRlKiBzdGF0ZSA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsK
ICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwotICAgIGFyZ3MuYXBwZW5kKHNyelBhcmFt
ID8gc3J6UGFyYW0tPmRlc2VyaWFsaXplKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LCAwKSA6IGpzTnVsbCgpKTsKLSAgICBhcmdzLmFwcGVuZChqc1N0cmluZ1dpdGhDYWNoZShleGVj
LCBzdHJBcmcpKTsKKyAgICBhcmdzLmFwcGVuZChzcnpQYXJhbSA/IHNyelBhcmFtLT5kZXNlcmlh
bGl6ZShzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxsKCkpOwor
ICAgIGFyZ3MuYXBwZW5kKGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBzdHJBcmcpKTsKIAogICAg
IE5ha2VkUHRyPEV4Y2VwdGlvbj4gcmV0dXJuZWRFeGNlcHRpb247Ci0gICAgbV9kYXRhLT5pbnZv
a2VDYWxsYmFjayhhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpPYmplY3QsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImNhbGxiYWNrV2l0aFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZVBhcmFtIiksIHJldHVybmVkRXhjZXB0aW9uKTsKKyAgICBtX2RhdGEtPmludm9rZUNhbGxi
YWNrKGFyZ3MsIEpTQ2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6Ok9iamVjdCwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyhzdGF0ZSwgImNhbGxiYWNrV2l0aFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZVBh
cmFtIiksIHJldHVybmVkRXhjZXB0aW9uKTsKICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pCi0g
ICAgICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCByZXR1cm5lZEV4Y2VwdGlvbik7CisgICAgICAg
IHJlcG9ydEV4Y2VwdGlvbihzdGF0ZSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgIHJldHVybiAh
cmV0dXJuZWRFeGNlcHRpb247CiB9CiAKQEAgLTE4NiwxNCArMTg2LDE0IEBAIGJvb2wgSlNUZXN0
Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aFN0cmluZ0xpc3QoUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0
PiBsaXN0UGFyYW0pCiAKICAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVj
dCgpLT52bSgpKTsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBFeGVjU3RhdGUqIHN0YXRlID0gbV9kYXRhLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7Ci0g
ICAgYXJncy5hcHBlbmQodG9KUyhleGVjLCBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLCBXVEY6Omdl
dFB0cihsaXN0UGFyYW0pKSk7CisgICAgYXJncy5hcHBlbmQodG9KUyhzdGF0ZSwgbV9kYXRhLT5n
bG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIobGlzdFBhcmFtKSkpOwogCiAgICAgTmFrZWRQdHI8
RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsKLSAgICBtX2RhdGEtPmludm9rZUNhbGxiYWNr
KGFyZ3MsIEpTQ2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6Ok9iamVjdCwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyhleGVjLCAiY2FsbGJhY2tXaXRoU3RyaW5nTGlzdCIpLCByZXR1cm5lZEV4Y2Vw
dGlvbik7CisgICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdzLCBKU0NhbGxiYWNrRGF0YTo6
Q2FsbGJhY2tUeXBlOjpPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoc3RhdGUsICJjYWxs
YmFja1dpdGhTdHJpbmdMaXN0IiksIHJldHVybmVkRXhjZXB0aW9uKTsKICAgICBpZiAocmV0dXJu
ZWRFeGNlcHRpb24pCi0gICAgICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCByZXR1cm5lZEV4Y2Vw
dGlvbik7CisgICAgICAgIHJlcG9ydEV4Y2VwdGlvbihzdGF0ZSwgcmV0dXJuZWRFeGNlcHRpb24p
OwogICAgIHJldHVybiAhcmV0dXJuZWRFeGNlcHRpb247CiB9CiAKQEAgLTIwNiwxNCArMjA2LDE0
IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aEJvb2xlYW4oYm9vbCBib29sUGFy
YW0pCiAKICAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT52bSgp
KTsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bEV4ZWMoKTsKKyAgICBFeGVjU3RhdGUqIHN0YXRlID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+
Z2xvYmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAgICAgYXJncy5h
cHBlbmQoanNCb29sZWFuKGJvb2xQYXJhbSkpOwogCiAgICAgTmFrZWRQdHI8RXhjZXB0aW9uPiBy
ZXR1cm5lZEV4Y2VwdGlvbjsKLSAgICBtX2RhdGEtPmludm9rZUNhbGxiYWNrKGFyZ3MsIEpTQ2Fs
bGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6Ok9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhl
eGVjLCAiY2FsbGJhY2tXaXRoQm9vbGVhbiIpLCByZXR1cm5lZEV4Y2VwdGlvbik7CisgICAgbV9k
YXRhLT5pbnZva2VDYWxsYmFjayhhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpP
YmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoc3RhdGUsICJjYWxsYmFja1dpdGhCb29sZWFu
IiksIHJldHVybmVkRXhjZXB0aW9uKTsKICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pCi0gICAg
ICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCByZXR1cm5lZEV4Y2VwdGlvbik7CisgICAgICAgIHJl
cG9ydEV4Y2VwdGlvbihzdGF0ZSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgIHJldHVybiAhcmV0
dXJuZWRFeGNlcHRpb247CiB9CiAKQEAgLTIyNiwxNSArMjI2LDE1IEBAIGJvb2wgSlNUZXN0Q2Fs
bGJhY2s6OmNhbGxiYWNrUmVxdWlyZXNUaGlzVG9QYXNzKGludCBsb25nUGFyYW0sIFRlc3ROb2Rl
KiB0ZXN0Tm9kCiAKICAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgp
LT52bSgpKTsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbEV4ZWMoKTsKKyAgICBFeGVjU3RhdGUqIHN0YXRlID0gbV9kYXRhLT5nbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAgICAg
YXJncy5hcHBlbmQoanNOdW1iZXIobG9uZ1BhcmFtKSk7Ci0gICAgYXJncy5hcHBlbmQodG9KUyhl
eGVjLCBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cih0ZXN0Tm9kZVBhcmFtKSkp
OworICAgIGFyZ3MuYXBwZW5kKHRvSlMoc3RhdGUsIG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCksIFdU
Rjo6Z2V0UHRyKHRlc3ROb2RlUGFyYW0pKSk7CiAKICAgICBOYWtlZFB0cjxFeGNlcHRpb24+IHJl
dHVybmVkRXhjZXB0aW9uOwotICAgIG1fZGF0YS0+aW52b2tlQ2FsbGJhY2soYXJncywgSlNDYWxs
YmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4
ZWMsICJjYWxsYmFja1JlcXVpcmVzVGhpc1RvUGFzcyIpLCByZXR1cm5lZEV4Y2VwdGlvbik7Cisg
ICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tU
eXBlOjpPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoc3RhdGUsICJjYWxsYmFja1JlcXVp
cmVzVGhpc1RvUGFzcyIpLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgaWYgKHJldHVybmVkRXhj
ZXB0aW9uKQotICAgICAgICByZXBvcnRFeGNlcHRpb24oZXhlYywgcmV0dXJuZWRFeGNlcHRpb24p
OworICAgICAgICByZXBvcnRFeGNlcHRpb24oc3RhdGUsIHJldHVybmVkRXhjZXB0aW9uKTsKICAg
ICByZXR1cm4gIXJldHVybmVkRXhjZXB0aW9uOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suaCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5oCmluZGV4IDAy
YTVmNzRmOTNiOGRlZjRkODU1MWJkNWEyZjVmNDRjYzMwNjgwOWMuLjViNTQ0YjBlNWMyZGVhZGZi
YTgyZmIzMzEyN2I3ZmViYmU2Mjg3MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5oCkBAIC02MCw3ICs2MCw3
IEBAIHByaXZhdGU6CiB9OwogCiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpT
RE9NR2xvYmFsT2JqZWN0KiwgVGVzdENhbGxiYWNrKik7Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFRlc3RDYWxsYmFjayYgaW1wbCkgeyByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsICZp
bXBsKTsgfQoraW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdENhbGxiYWNrJiBpbXBsKSB7IHJl
dHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICZpbXBsKTsgfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RDYWxsYmFja0Z1bmN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFja0Z1bmN0aW9uLmNwcAppbmRleCAxYjE0
NGE3MWQzOTgwODIyNTcwZGY4MGU1NmFmNWVhZjc2M2IyMjNmLi4xYTMzYTRkOTRhODBkOGY2NzE3
N2ViZjI2NTk0YzEyOTFmMDg1NDliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrRnVuY3Rpb24u
Y3BwCkBAIC03MSwxNCArNzEsMTQgQEAgYm9vbCBKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uOjpjYWxs
YmFja1dpdGhOb1BhcmFtKCkKIAogICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFs
T2JqZWN0KCktPnZtKCkpOwogCi0gICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgIEV4ZWNTdGF0ZSogc3RhdGUgPSBtX2RhdGEtPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJn
czsKIAogICAgIE5ha2VkUHRyPEV4Y2VwdGlvbj4gcmV0dXJuZWRFeGNlcHRpb247Ci0gICAgVU5V
U0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgbV9kYXRhLT5p
bnZva2VDYWxsYmFjayhhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpGdW5jdGlv
biwgSWRlbnRpZmllcigpLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgaWYgKHJldHVybmVkRXhj
ZXB0aW9uKQotICAgICAgICByZXBvcnRFeGNlcHRpb24oZXhlYywgcmV0dXJuZWRFeGNlcHRpb24p
OworICAgICAgICByZXBvcnRFeGNlcHRpb24oc3RhdGUsIHJldHVybmVkRXhjZXB0aW9uKTsKICAg
ICByZXR1cm4gIXJldHVybmVkRXhjZXB0aW9uOwogfQogCkBAIC05MSwxNSArOTEsMTUgQEAgYm9v
bCBKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uOjpjYWxsYmFja1dpdGhBcnJheVBhcmFtKFJlZlB0cjxG
bG9hdDMyQXJyYXk+IGFycmF5UGEKIAogICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xv
YmFsT2JqZWN0KCktPnZtKCkpOwogCi0gICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9i
YWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgIEV4ZWNTdGF0ZSogc3RhdGUgPSBtX2RhdGEt
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIg
YXJnczsKLSAgICBhcmdzLmFwcGVuZCh0b0pTKGV4ZWMsIG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCks
IFdURjo6Z2V0UHRyKGFycmF5UGFyYW0pKSk7CisgICAgYXJncy5hcHBlbmQodG9KUyhzdGF0ZSwg
bV9kYXRhLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoYXJyYXlQYXJhbSkpKTsKIAogICAg
IE5ha2VkUHRyPEV4Y2VwdGlvbj4gcmV0dXJuZWRFeGNlcHRpb247Ci0gICAgVU5VU0VEX1BBUkFN
KGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgbV9kYXRhLT5pbnZva2VDYWxs
YmFjayhhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpGdW5jdGlvbiwgSWRlbnRp
ZmllcigpLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKQot
ICAgICAgICByZXBvcnRFeGNlcHRpb24oZXhlYywgcmV0dXJuZWRFeGNlcHRpb24pOworICAgICAg
ICByZXBvcnRFeGNlcHRpb24oc3RhdGUsIHJldHVybmVkRXhjZXB0aW9uKTsKICAgICByZXR1cm4g
IXJldHVybmVkRXhjZXB0aW9uOwogfQogCkBAIC0xMTIsMTYgKzExMiwxNiBAQCBib29sIEpTVGVz
dENhbGxiYWNrRnVuY3Rpb246OmNhbGxiYWNrV2l0aFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZVBhcmFt
KFBhc3NSZWZQdHI8UwogCiAgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmpl
Y3QoKS0+dm0oKSk7CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2RhdGEtPmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxFeGVjKCk7CisgICAgRXhlY1N0YXRlKiBzdGF0ZSA9IG1fZGF0YS0+Z2xvYmFs
T2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwot
ICAgIGFyZ3MuYXBwZW5kKHNyelBhcmFtID8gc3J6UGFyYW0tPmRlc2VyaWFsaXplKGV4ZWMsIGNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCAwKSA6IGpzTnVsbCgpKTsKLSAgICBhcmdzLmFwcGVu
ZChqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBzdHJBcmcpKTsKKyAgICBhcmdzLmFwcGVuZChzcnpQ
YXJhbSA/IHNyelBhcmFtLT5kZXNlcmlhbGl6ZShzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2Jq
ZWN0KCksIDApIDoganNOdWxsKCkpOworICAgIGFyZ3MuYXBwZW5kKGpzU3RyaW5nV2l0aENhY2hl
KHN0YXRlLCBzdHJBcmcpKTsKIAogICAgIE5ha2VkUHRyPEV4Y2VwdGlvbj4gcmV0dXJuZWRFeGNl
cHRpb247Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJh
Y2tUeXBlOjpGdW5jdGlvbiwgSWRlbnRpZmllcigpLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAg
aWYgKHJldHVybmVkRXhjZXB0aW9uKQotICAgICAgICByZXBvcnRFeGNlcHRpb24oZXhlYywgcmV0
dXJuZWRFeGNlcHRpb24pOworICAgICAgICByZXBvcnRFeGNlcHRpb24oc3RhdGUsIHJldHVybmVk
RXhjZXB0aW9uKTsKICAgICByZXR1cm4gIXJldHVybmVkRXhjZXB0aW9uOwogfQogCkBAIC0xMzQs
MTUgKzEzNCwxNSBAQCBib29sIEpTVGVzdENhbGxiYWNrRnVuY3Rpb246OmNhbGxiYWNrV2l0aFN0
cmluZ0xpc3QoUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBsaQogCiAgICAgSlNMb2NrSG9sZGVy
IGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+dm0oKSk7CiAKLSAgICBFeGVjU3RhdGUqIGV4
ZWMgPSBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAgRXhlY1N0YXRl
KiBzdGF0ZSA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJr
ZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwotICAgIGFyZ3MuYXBwZW5kKHRvSlMoZXhlYywgbV9kYXRh
LT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIobGlzdFBhcmFtKSkpOworICAgIGFyZ3MuYXBw
ZW5kKHRvSlMoc3RhdGUsIG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGxpc3RQ
YXJhbSkpKTsKIAogICAgIE5ha2VkUHRyPEV4Y2VwdGlvbj4gcmV0dXJuZWRFeGNlcHRpb247Ci0g
ICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgbV9k
YXRhLT5pbnZva2VDYWxsYmFjayhhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpG
dW5jdGlvbiwgSWRlbnRpZmllcigpLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgaWYgKHJldHVy
bmVkRXhjZXB0aW9uKQotICAgICAgICByZXBvcnRFeGNlcHRpb24oZXhlYywgcmV0dXJuZWRFeGNl
cHRpb24pOworICAgICAgICByZXBvcnRFeGNlcHRpb24oc3RhdGUsIHJldHVybmVkRXhjZXB0aW9u
KTsKICAgICByZXR1cm4gIXJldHVybmVkRXhjZXB0aW9uOwogfQogCkBAIC0xNTUsMTUgKzE1NSwx
NSBAQCBib29sIEpTVGVzdENhbGxiYWNrRnVuY3Rpb246OmNhbGxiYWNrV2l0aEJvb2xlYW4oYm9v
bCBib29sUGFyYW0pCiAKICAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVj
dCgpLT52bSgpKTsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBFeGVjU3RhdGUqIHN0YXRlID0gbV9kYXRhLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAg
ICAgYXJncy5hcHBlbmQoanNCb29sZWFuKGJvb2xQYXJhbSkpOwogCiAgICAgTmFrZWRQdHI8RXhj
ZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBtX2RhdGEtPmludm9rZUNhbGxiYWNrKGFyZ3MsIEpT
Q2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6OkZ1bmN0aW9uLCBJZGVudGlmaWVyKCksIHJldHVy
bmVkRXhjZXB0aW9uKTsKICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pCi0gICAgICAgIHJlcG9y
dEV4Y2VwdGlvbihleGVjLCByZXR1cm5lZEV4Y2VwdGlvbik7CisgICAgICAgIHJlcG9ydEV4Y2Vw
dGlvbihzdGF0ZSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgIHJldHVybiAhcmV0dXJuZWRFeGNl
cHRpb247CiB9CiAKQEAgLTE3NiwxNiArMTc2LDE2IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2tGdW5j
dGlvbjo6Y2FsbGJhY2tSZXF1aXJlc1RoaXNUb1Bhc3MoaW50IGxvbmdQYXJhbSwgVGVzdE5vZGUq
CiAKICAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT52bSgpKTsK
IAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4
ZWMoKTsKKyAgICBFeGVjU3RhdGUqIHN0YXRlID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAgICAgYXJncy5hcHBl
bmQoanNOdW1iZXIobG9uZ1BhcmFtKSk7Ci0gICAgYXJncy5hcHBlbmQodG9KUyhleGVjLCBtX2Rh
dGEtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cih0ZXN0Tm9kZVBhcmFtKSkpOworICAgIGFy
Z3MuYXBwZW5kKHRvSlMoc3RhdGUsIG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRy
KHRlc3ROb2RlUGFyYW0pKSk7CiAKICAgICBOYWtlZFB0cjxFeGNlcHRpb24+IHJldHVybmVkRXhj
ZXB0aW9uOwotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIG1fZGF0YS0+aW52b2tlQ2FsbGJhY2soYXJncywgSlNDYWxsYmFja0RhdGE6OkNhbGxi
YWNrVHlwZTo6RnVuY3Rpb24sIElkZW50aWZpZXIoKSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAg
IGlmIChyZXR1cm5lZEV4Y2VwdGlvbikKLSAgICAgICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMsIHJl
dHVybmVkRXhjZXB0aW9uKTsKKyAgICAgICAgcmVwb3J0RXhjZXB0aW9uKHN0YXRlLCByZXR1cm5l
ZEV4Y2VwdGlvbik7CiAgICAgcmV0dXJuICFyZXR1cm5lZEV4Y2VwdGlvbjsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxi
YWNrRnVuY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RDYWxsYmFja0Z1bmN0aW9uLmgKaW5kZXggMTM0MjU3ZGE1ZTBhOWRjMzdmZmEyMTlmODI4
OTAxNTVlZTQ2ZjE3ZS4uOWNjMzRkMTMzMDdkNWM2ODQ1OWRlOTc4MTcwYzkzMGMwOGRlN2E5YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dENhbGxiYWNrRnVuY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbi5oCkBAIC01OSw3ICs1OSw3IEBAIHByaXZh
dGU6CiB9OwogCiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFs
T2JqZWN0KiwgVGVzdENhbGxiYWNrRnVuY3Rpb24qKTsKLWlubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
VGVzdENhbGxiYWNrRnVuY3Rpb24mIGltcGwpIHsgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCAmaW1wbCk7IH0KK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RDYWxsYmFja0Z1bmN0
aW9uJiBpbXBsKSB7IHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICZpbXBsKTsgfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVy
ZmFjZU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QuY3BwCmluZGV4IDA2
Y2E5OTZhNzQ3MWUxM2U0YmZlN2I2NzZlZDZhMDY3Y2EwYjg5MTYuLjkwMGUzZWEwNGEwYjJiYzhh
YmFiYzU3YWVmOTZiZmZiNTMzYzlmMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFj
ZU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0LmNwcApAQCAtMTQ2
LDE0ICsxNDYsMTQgQEAgSlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmpl
Y3Q6On5KU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGUKICAgICByZWxlYXNlSW1wbCgp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVy
ZmFjZU9iamVjdENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEN1
c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Q29uc3RydWN0b3IoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFt
ZSkKIHsKICAgICBKU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdFBy
b3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RDdXN0b21Db25zdHJ1Y3Rv
cldpdGhOb0ludGVyZmFjZU9iamVjdFByb3RvdHlwZSo+KGJhc2VWYWx1ZSk7CiAgICAgaWYgKCFk
b21PYmplY3QpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIEpT
VmFsdWUgY29uc3RydWN0b3IgPSBKU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFj
ZU9iamVjdENvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYy0+dm0oKSwgSlNUZXN0Q3VzdG9tQ29uc3Ry
dWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3RDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCksIGRvbU9iamVjdC0+Z2xvYmFsT2Jq
ZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKSwganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZG9t
T2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihzdGF0ZSk7CisgICAgSlNWYWx1ZSBjb25zdHJ1Y3RvciA9IEpTVGVzdEN1c3RvbUNvbnN0cnVj
dG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Q29uc3RydWN0b3I6OmNyZWF0ZShzdGF0ZS0+dm0oKSwg
SlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3RDb25zdHJ1Y3Rvcjo6
Y3JlYXRlU3RydWN0dXJlKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpLCBk
b21PYmplY3QtPmdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSksIGpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKICAgICAvLyBTaGFk
b3dpbmcgY29uc3RydWN0b3IgcHJvcGVydHkgdG8gZW5zdXJlIHJldXNpbmcgdGhlIHNhbWUgY29u
c3RydWN0b3Igb2JqZWN0Ci0gICAgZG9tT2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RvciwgRG9udEVudW0gfCBS
ZWFkT25seSk7CisgICAgZG9tT2JqZWN0LT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5w
cm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGNvbnN0cnVjdG9yLCBEb250RW51bSB8IFJlYWRP
bmx5KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdG9yKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1
c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRl
cmZhY2VPYmplY3QuaAppbmRleCA5NTdkYjZjNDY0OWU0OTkyOWJkNTE3OWU0ODViZThiNmRhNjRm
YmVkLi42MjJmODY2NjUwNDI2YWQwZGQ3MjA1MmJiMmFkMDcwNWQ3OWE0MWVhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tQ29u
c3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZh
Y2VPYmplY3QuaApAQCAtNzksNyArNzksNyBAQCBpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIq
IHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmLCBUZXN0Q3VzdG9tQ29uc3RydWN0bwogfQog
CiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kiwg
VGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Kik7Ci1pbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdCYg
aW1wbCkgeyByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsICZpbXBsKTsgfQoraW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2Jq
ZWN0JiBpbXBsKSB7IHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICZpbXBsKTsgfQog
SlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2Jh
bE9iamVjdCosIFRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdCopOwog
CiAvLyBDdXN0b20gY29uc3RydWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIu
Y3BwCmluZGV4IDlmM2NlNGUyMjU1NjMyZjlmMmYyOTYzYjI5YWZkYWFiMjliNjc0ZGEuLmM5YmUx
YmNiMDZjNTI4MTI5Njk5OGQ3NmMwOWVjZjFlOWRkYWYyZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1
c3RvbU5hbWVkR2V0dGVyLmNwcApAQCAtMTYwLDE5ICsxNjAsMTkgQEAgSlNUZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXI6On5KU1Rlc3RDdXN0b21OYW1lZEdldHRlcigpCiAgICAgcmVsZWFzZUltcGwoKTsK
IH0KIAotYm9vbCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6Z2V0T3duUHJvcGVydHlTbG90KEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6Z2V0
T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBhdXRvKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyKj4ob2JqZWN0KTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgaWYg
KGdldFN0YXRpY1ZhbHVlU2xvdDxKU1Rlc3RDdXN0b21OYW1lZEdldHRlciwgQmFzZT4oZXhlYywg
SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJUYWJsZSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBz
bG90KSkKKyAgICBpZiAoZ2V0U3RhdGljVmFsdWVTbG90PEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVy
LCBCYXNlPihzdGF0ZSwgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJUYWJsZSwgdGhpc09iamVjdCwg
cHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgSlNWYWx1ZSBw
cm90byA9IHRoaXNPYmplY3QtPnByb3RvdHlwZSgpOwotICAgIGlmIChwcm90by5pc09iamVjdCgp
ICYmIGpzQ2FzdDxKU09iamVjdCo+KHByb3RvKS0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlO
YW1lKSkKKyAgICBpZiAocHJvdG8uaXNPYmplY3QoKSAmJiBqc0Nhc3Q8SlNPYmplY3QqPihwcm90
byktPmhhc1Byb3BlcnR5KHN0YXRlLCBwcm9wZXJ0eU5hbWUpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICBpZiAodGhpc09iamVjdC0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKSB7CiAgICAg
ICAgIEpTVmFsdWUgdmFsdWU7Ci0gICAgICAgIGlmICh0aGlzT2JqZWN0LT5uYW1lR2V0dGVyKGV4
ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUpKSB7CisgICAgICAgIGlmICh0aGlzT2JqZWN0LT5uYW1l
R2V0dGVyKHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKSkgewogICAgICAgICAgICAgc2xvdC5z
ZXRWYWx1ZSh0aGlzT2JqZWN0LCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSwgdmFs
dWUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTE4MCwyNyArMTgw
LDI3IEBAIGJvb2wgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OmdldE93blByb3BlcnR5U2xvdChK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1i
b29sIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5
U2xvdCYgc2xvdCkKK2Jvb2wgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OmdldE93blByb3BlcnR5
U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQg
aW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgSWRlbnRpZmllciBwcm9wZXJ0
eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KTsKKyAgICBJZGVudGlmaWVyIHBy
b3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKICAgICBpZiAodGhp
c09iamVjdC0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWU7
Ci0gICAgICAgIGlmICh0aGlzT2JqZWN0LT5uYW1lR2V0dGVyKGV4ZWMsIHByb3BlcnR5TmFtZSwg
dmFsdWUpKSB7CisgICAgICAgIGlmICh0aGlzT2JqZWN0LT5uYW1lR2V0dGVyKHN0YXRlLCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlKSkgewogICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0
LCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSwgdmFsdWUpOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIEJhc2U6OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaW5kZXgsIHNsb3QpOworICAgIHJl
dHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXNPYmplY3QsIHN0YXRlLCBp
bmRleCwgc2xvdCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEN1c3RvbU5hbWVkR2V0dGVy
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCosIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIEpTVGVzdEN1c3RvbU5hbWVkR2V0
dGVyKiBkb21PYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmICghZG9tT2JqZWN0KQotICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpnZXRDb25zdHJ1Y3RvcihleGVjLT52bSgpLCBk
b21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKHN0YXRlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdEN1c3RvbU5hbWVk
R2V0dGVyOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKSkpOwogfQogCiBKU1ZhbHVlIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpnZXRDb25zdHJ1
Y3RvcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCkBAIC0yMDgsMTggKzIw
OCwxOCBAQCBKU1ZhbHVlIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpnZXRDb25zdHJ1Y3RvcihW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgIHJldHVybiBnZXRET01Db25zdHJ1
Y3RvcjxKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yPih2bSwganNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGVGdW5jdGlvbkFub3RoZXJG
dW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlRnVuY3Rpb25Bbm90aGVyRnVuY3Rpb24oRXhl
Y1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1
ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpT
VGVzdEN1c3RvbU5hbWVkR2V0dGVyKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RD
dXN0b21OYW1lZEdldHRlcio+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RDdXN0
b21OYW1lZEdldHRlciIsICJhbm90aGVyRnVuY3Rpb24iKTsKKyAgICAgICAgcmV0dXJuIHRocm93
VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIiLCAiYW5vdGhlckZ1
bmN0aW9uIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rl
c3RDdXN0b21OYW1lZEdldHRlcjo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+aW1wbCgpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
LSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihleGVjKSk7Ci0gICAgU3RyaW5nIHN0ciA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKHN0YXRlKSk7CisgICAgU3RyaW5nIHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1N0
cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBpbXBsLmFub3RoZXJGdW5jdGlvbihzdHIpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5oCmlu
ZGV4IDAxY2QzM2FhNWMyNTA5MGE3M2Q3YmM1NTU5OTNkMzE4NmVjYjQzODkuLjY1YTMzZGJmYjlj
ZDI4OWVhODNkNmMyNTRhMTQ0YWQ0YWVjMGJkZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1l
ZEdldHRlci5oCkBAIC04Niw3ICs4Niw3IEBAIGlubGluZSBKU0M6OldlYWtIYW5kbGVPd25lciog
d3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYsIFRlc3RDdXN0b21OYW1lZEdldHRlCiB9CiAK
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqKTsKLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdEN1c3Rv
bU5hbWVkR2V0dGVyJiBpbXBsKSB7IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgJmlt
cGwpOyB9CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0Q3VzdG9tTmFtZWRHZXR0ZXImIGlt
cGwpIHsgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgJmltcGwpOyB9CiBKU0M6OkpT
VmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0
KiwgVGVzdEN1c3RvbU5hbWVkR2V0dGVyKik7CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3Ry
dWN0b3IuY3BwCmluZGV4IDJiMDQ2NDQyNDZmZDQxNWVkMzZiODE1NTdkNzFjN2Q2MDU5MmQ2M2Mu
LmFjMzQ4MmZjNTg2ZDdhYTA2NWYwYjk0MTRhZGY4MWNhOWE3YmZiMzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVj
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKQEAgLTg4LDMwICs4OCwzMCBAQCBwcm90ZWN0ZWQ6CiAg
ICAgc3RhdGljIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6SlNDZWxs
KiwgSlNDOjpDb25zdHJ1Y3REYXRhJik7CiB9OwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0RXZl
bnRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0RXZl
bnRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIGF1dG8qIGpzQ29uc3RydWN0
b3IgPSBqc0Nhc3Q8SlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKj4oZXhlYy0+Y2Fs
bGVlKCkpOworICAgIGF1dG8qIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNUZXN0RXZlbnRDb25z
dHJ1Y3RvckNvbnN0cnVjdG9yKj4oc3RhdGUtPmNhbGxlZSgpKTsKIAotICAgIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGV4ZWN1dGlvbkNvbnRleHQgPSBqc0NvbnN0cnVjdG9yLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7Ci0gICAgaWYgKCFleGVjdXRpb25Db250ZXh0KQotICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMsICJDb25zdHJ1
Y3RvciBhc3NvY2lhdGVkIGV4ZWN1dGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxlIikpOworICAg
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHN0YXRldXRpb25Db250ZXh0ID0ganNDb25zdHJ1Y3Rv
ci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlmICghc3RhdGV1dGlvbkNvbnRleHQp
CisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZVJlZmVyZW5jZUVycm9y
KHN0YXRlLCAiQ29uc3RydWN0b3IgYXNzb2NpYXRlZCBzdGF0ZXV0aW9uIGNvbnRleHQgaXMgdW5h
dmFpbGFibGUiKSk7CiAKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwg
MSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IoZXhlYykpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAKLSAgICBBdG9taWNTdHJpbmcgZXZlbnRUeXBl
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnRvQXRvbWljU3RyaW5nKGV4ZWMp
OwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgQXRvbWljU3Ry
aW5nIGV2ZW50VHlwZSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnRvQXRv
bWljU3RyaW5nKHN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAg
IFRlc3RFdmVudENvbnN0cnVjdG9ySW5pdCBldmVudEluaXQ7CiAKLSAgICBKU1ZhbHVlIGluaXRp
YWxpemVyVmFsdWUgPSBleGVjLT5hcmd1bWVudCgxKTsKKyAgICBKU1ZhbHVlIGluaXRpYWxpemVy
VmFsdWUgPSBzdGF0ZS0+YXJndW1lbnQoMSk7CiAgICAgaWYgKCFpbml0aWFsaXplclZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgICAgLy8gR2l2ZW4gdGhlIGFib3ZlIHRlc3QsIHRo
aXMgd2lsbCBhbHdheXMgeWllbGQgYW4gb2JqZWN0LgotICAgICAgICBKU09iamVjdCogaW5pdGlh
bGl6ZXJPYmplY3QgPSBpbml0aWFsaXplclZhbHVlLnRvT2JqZWN0KGV4ZWMpOworICAgICAgICBK
U09iamVjdCogaW5pdGlhbGl6ZXJPYmplY3QgPSBpbml0aWFsaXplclZhbHVlLnRvT2JqZWN0KHN0
YXRlKTsKIAogICAgICAgICAvLyBDcmVhdGUgdGhlIGRpY3Rpb25hcnkgd3JhcHBlciBmcm9tIHRo
ZSBpbml0aWFsaXplciBvYmplY3QuCi0gICAgICAgIEpTRGljdGlvbmFyeSBkaWN0aW9uYXJ5KGV4
ZWMsIGluaXRpYWxpemVyT2JqZWN0KTsKKyAgICAgICAgSlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnko
c3RhdGUsIGluaXRpYWxpemVyT2JqZWN0KTsKIAogICAgICAgICAvLyBBdHRlbXB0IHRvIGZpbGwg
aW4gdGhlIEV2ZW50SW5pdC4KICAgICAgICAgaWYgKCFmaWxsVGVzdEV2ZW50Q29uc3RydWN0b3JJ
bml0KGV2ZW50SW5pdCwgZGljdGlvbmFyeSkpCkBAIC0xMTksNyArMTE5LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmNv
bnN0cnVjdEpTVGVzdEUKICAgICB9CiAKICAgICBSZWZQdHI8VGVzdEV2ZW50Q29uc3RydWN0b3I+
IGV2ZW50ID0gVGVzdEV2ZW50Q29uc3RydWN0b3I6OmNyZWF0ZShldmVudFR5cGUsIGV2ZW50SW5p
dCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTKGV4ZWMsIGpzQ29uc3RydWN0b3It
Pmdsb2JhbE9iamVjdCgpLCBldmVudC5nZXQoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodG9KUyhzdGF0ZSwganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksIGV2ZW50LmdldCgp
KSk7CiB9CiAKIGJvb2wgZmlsbFRlc3RFdmVudENvbnN0cnVjdG9ySW5pdChUZXN0RXZlbnRDb25z
dHJ1Y3RvckluaXQmIGV2ZW50SW5pdCwgSlNEaWN0aW9uYXJ5JiBkaWN0aW9uYXJ5KQpAQCAtMTk3
LDQ2ICsxOTcsNDYgQEAgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6fkpTVGVzdEV2ZW50Q29uc3Ry
dWN0b3IoKQogICAgIHJlbGVhc2VJbXBsKCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2
ZW50Q29uc3RydWN0b3JBdHRyMShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjEoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNs
b3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBV
TlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURf
UEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVz
dEV2ZW50Q29uc3RydWN0b3IqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEV2ZW50
Q29uc3RydWN0b3IqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RFdmVu
dENvbnN0cnVjdG9yUHJvdG90eXBlKj4oc2xvdEJhc2UpKQotICAgICAgICAgICAgcmV0dXJuIHJl
cG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RFdmVudENvbnN0cnVjdG9yIiwg
ImF0dHIxIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRl
c3RFdmVudENvbnN0cnVjdG9yIiwgImF0dHIxIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0
RGVwcmVjYXRlZEdldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RFdmVudENvbnN0cnVjdG9yIiwgImF0
dHIxIik7CisgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0
RXZlbnRDb25zdHJ1Y3RvciIsICJhdHRyMSIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+aW1wbCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUo
ZXhlYywgaW1wbC5hdHRyMSgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENh
Y2hlKHN0YXRlLCBpbXBsLmF0dHIxKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjIo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3Rv
ckF0dHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yKiBj
YXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RFdmVudENvbnN0cnVjdG9yKj4oSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
ICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlw
ZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVy
RXJyb3IoKmV4ZWMsICJUZXN0RXZlbnRDb25zdHJ1Y3RvciIsICJhdHRyMiIpOwotICAgICAgICBy
ZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0RXZlbnRDb25zdHJ1Y3RvciIs
ICJhdHRyMiIpOworICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJv
cigqc3RhdGUsICJUZXN0RXZlbnRDb25zdHJ1Y3RvciIsICJhdHRyMiIpOworICAgICAgICByZXR1
cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdEV2ZW50Q29uc3RydWN0b3IiLCAi
YXR0cjIiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGltcGwuYXR0cjIoKSk7
CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5hdHRy
MigpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIAotRW5jb2Rl
ZEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSkKK0Vu
Y29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IHN0YXRlLCBKU09iamVjdCogYmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewogICAgIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZSo+KGJhc2VWYWx1ZSk7
CiAgICAgaWYgKCFkb21PYmplY3QpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4
ZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6
Z2V0Q29uc3RydWN0b3IoZXhlYy0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOwor
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+
dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOwogfQogCiBKU1ZhbHVlIEpTVGVzdEV2
ZW50Q29uc3RydWN0b3I6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oCmluZGV4IDg1YjMyNzIx
MjQ5NjA0ZmE0MWMxZmIzZWNlMWU3MDI1OTc4ZWJlNGIuLjc0NzFlMDQ3Njg5ZWI3YzY0Y2JiMjUw
YzU0YzBkNjAwZTIzN2Q2YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuaApAQCAt
ODIsNyArODIsNyBAQCBpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihE
T01XcmFwcGVyV29ybGQmLCBUZXN0RXZlbnRDb25zdHJ1Y3RvcgogfQogCiBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdEV2ZW50Q29uc3Ry
dWN0b3IqKTsKLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdEV2ZW50Q29uc3RydWN0b3ImIGlt
cGwpIHsgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCAmaW1wbCk7IH0KK2lubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFRlc3RFdmVudENvbnN0cnVjdG9yJiBpbXBsKSB7IHJldHVybiB0b0pT
KHN0YXRlLCBnbG9iYWxPYmplY3QsICZpbXBsKTsgfQogSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNy
ZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RFdmVudENvbnN0
cnVjdG9yKik7CiAKIGJvb2wgZmlsbFRlc3RFdmVudENvbnN0cnVjdG9ySW5pdChUZXN0RXZlbnRD
b25zdHJ1Y3RvckluaXQmLCBKU0RpY3Rpb25hcnkmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3Bw
CmluZGV4IGUwYjBmZjJkNzU0MjNjNzY2MTA2MjJkMDg1NzM5YTgxNWRkNjg5ZTAuLjEzNmFhYzkx
MzM3ZTJkMGNiMzQ5MGI0MTIzYzQ2ZWEwZmQ4N2U2ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0
LmNwcApAQCAtMTcyLDcgKzE3Miw3IEBAIEpTVGVzdEV2ZW50VGFyZ2V0Ojp+SlNUZXN0RXZlbnRU
YXJnZXQoKQogICAgIHJlbGVhc2VJbXBsKCk7CiB9CiAKLWJvb2wgSlNUZXN0RXZlbnRUYXJnZXQ6
OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgSlNUZXN0
RXZlbnRUYXJnZXQ6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RFdmVudFRhcmdldCo+KG9i
amVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwpAQCAtMTgwLDE4ICsxODAsMTggQEAgYm9vbCBKU1Rlc3RFdmVudFRhcmdldDo6Z2V0T3duUHJv
cGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHIKICAgICBpZiAo
b3B0aW9uYWxJbmRleCAmJiBvcHRpb25hbEluZGV4LnZhbHVlKCkgPCB0aGlzT2JqZWN0LT5pbXBs
KCkubGVuZ3RoKCkpIHsKICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBvcHRpb25hbEluZGV4LnZh
bHVlKCk7CiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSBEb250RGVsZXRlIHwgUmVhZE9u
bHk7Ci0gICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgYXR0cmlidXRlcywgdG9KUyhl
eGVjLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgdGhpc09iamVjdC0+aW1wbCgpLml0ZW0o
aW5kZXgpKSk7CisgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgYXR0cmlidXRlcywg
dG9KUyhzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIHRoaXNPYmplY3QtPmltcGwo
KS5pdGVtKGluZGV4KSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgaWYgKGdl
dFN0YXRpY1ZhbHVlU2xvdDxKU1Rlc3RFdmVudFRhcmdldCwgQmFzZT4oZXhlYywgSlNUZXN0RXZl
bnRUYXJnZXRUYWJsZSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KSkKKyAgICBpZiAo
Z2V0U3RhdGljVmFsdWVTbG90PEpTVGVzdEV2ZW50VGFyZ2V0LCBCYXNlPihzdGF0ZSwgSlNUZXN0
RXZlbnRUYXJnZXRUYWJsZSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgSlNWYWx1ZSBwcm90byA9IHRoaXNPYmplY3QtPnByb3RvdHlw
ZSgpOwotICAgIGlmIChwcm90by5pc09iamVjdCgpICYmIGpzQ2FzdDxKU09iamVjdCo+KHByb3Rv
KS0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkKKyAgICBpZiAocHJvdG8uaXNPYmpl
Y3QoKSAmJiBqc0Nhc3Q8SlNPYmplY3QqPihwcm90byktPmhhc1Byb3BlcnR5KHN0YXRlLCBwcm9w
ZXJ0eU5hbWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAodGhpc09iamVjdC0+
Y2xhc3NJbmZvKCkgPT0gaW5mbygpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWU7Ci0gICAgICAg
IGlmICh0aGlzT2JqZWN0LT5uYW1lR2V0dGVyKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUpKSB7
CisgICAgICAgIGlmICh0aGlzT2JqZWN0LT5uYW1lR2V0dGVyKHN0YXRlLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlKSkgewogICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBSZWFkT25s
eSB8IERvbnREZWxldGUgfCBEb250RW51bSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KQEAgLTE5OSw0MSArMTk5LDQxIEBAIGJvb2wgSlNUZXN0RXZlbnRUYXJn
ZXQ6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEpTVGVzdEV2ZW50VGFyZ2V0OjpnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgSlNUZXN0RXZlbnRUYXJn
ZXQ6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdEV2ZW50VGFyZ2V0Kj4ob2JqZWN0KTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgaWYgKGlu
ZGV4IDwgdGhpc09iamVjdC0+aW1wbCgpLmxlbmd0aCgpKSB7CiAgICAgICAgIHVuc2lnbmVkIGF0
dHJpYnV0ZXMgPSBEb250RGVsZXRlIHwgUmVhZE9ubHk7Ci0gICAgICAgIHNsb3Quc2V0VmFsdWUo
dGhpc09iamVjdCwgYXR0cmlidXRlcywgdG9KUyhleGVjLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKSwgdGhpc09iamVjdC0+aW1wbCgpLml0ZW0oaW5kZXgpKSk7CisgICAgICAgIHNsb3Quc2V0
VmFsdWUodGhpc09iamVjdCwgYXR0cmlidXRlcywgdG9KUyhzdGF0ZSwgdGhpc09iamVjdC0+Z2xv
YmFsT2JqZWN0KCksIHRoaXNPYmplY3QtPmltcGwoKS5pdGVtKGluZGV4KSkpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBJZGVudGlm
aWVyOjpmcm9tKGV4ZWMsIGluZGV4KTsKKyAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IElk
ZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKICAgICBpZiAodGhpc09iamVjdC0+Y2xhc3NJ
bmZvKCkgPT0gaW5mbygpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWU7Ci0gICAgICAgIGlmICh0
aGlzT2JqZWN0LT5uYW1lR2V0dGVyKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUpKSB7CisgICAg
ICAgIGlmICh0aGlzT2JqZWN0LT5uYW1lR2V0dGVyKHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
KSkgewogICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBSZWFkT25seSB8IERv
bnREZWxldGUgfCBEb250RW51bSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgodGhpc09iamVjdCwgZXhlYywgaW5kZXgsIHNsb3QpOworICAgIHJldHVybiBCYXNlOjpnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXNPYmplY3QsIHN0YXRlLCBpbmRleCwgc2xvdCk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3IoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCosIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQorRW5jb2RlZEpTVmFsdWUganNUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IHN0YXRlLCBKU09iamVjdCosIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewogICAgIEpTVGVzdEV2ZW50VGFyZ2V0KiBkb21PYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdEV2ZW50VGFyZ2V0Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmICgh
ZG9tT2JqZWN0KQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdEV2ZW50VGFyZ2V0OjpnZXRDb25zdHJ1Y3Rvcihl
eGVjLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKHN0YXRlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVz
dEV2ZW50VGFyZ2V0OjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9i
YWxPYmplY3QoKSkpOwogfQogCi12b2lkIEpTVGVzdEV2ZW50VGFyZ2V0OjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJy
YXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1Rlc3RFdmVu
dFRhcmdldDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2Rl
IG1vZGUpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RFdmVudFRhcmdl
dCo+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGNvdW50ID0gdGhpc09iamVjdC0+aW1w
bCgpLmxlbmd0aCgpOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
SWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7Ci0gICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1l
cyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICAgICAgcHJvcGVy
dHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaSkpOworICAgIEJhc2U6OmdldE93
blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwog
fQogCiBKU1ZhbHVlIEpTVGVzdEV2ZW50VGFyZ2V0OjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCkBAIC0yNDEsNzAgKzI0MSw3MCBAQCBKU1ZhbHVl
IEpTVGVzdEV2ZW50VGFyZ2V0OjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCiAgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdEV2ZW50
VGFyZ2V0Q29uc3RydWN0b3I+KHZtLCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxP
YmplY3QpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RFdmVudFRh
cmdldFByb3RvdHlwZUZ1bmN0aW9uSXRlbShFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25JdGVtKEV4
ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFs
dWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBK
U1Rlc3RFdmVudFRhcmdldCogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0RXZlbnRU
YXJnZXQqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAg
ICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0RXZlbnRUYXJnZXQiLCAi
aXRlbSIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RF
dmVudFRhcmdldCIsICJpdGVtIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0
ZWRUaGlzLCBKU1Rlc3RFdmVudFRhcmdldDo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+aW1wbCgpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgdW5zaWduZWQgaW5kZXggPSB0b1VJbnQzMihleGVj
LCBleGVjLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZ
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50
Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOworICAgIHVuc2lnbmVkIGluZGV4ID0gdG9V
SW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4
ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLml0ZW0oaW5k
ZXgpKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC5pdGVtKGluZGV4KSkpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uQWRkRXZlbnRMaXN0ZW5lcihFeGVj
U3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEV2ZW50VGFy
Z2V0UHJvdG90eXBlRnVuY3Rpb25BZGRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7
Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RFdmVudFRhcmdldCog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0RXZlbnRUYXJnZXQqPih0aGlzVmFsdWUp
OwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1Ro
aXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0RXZlbnRUYXJnZXQiLCAiYWRkRXZlbnRMaXN0ZW5lciIp
OworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RFdmVudFRh
cmdldCIsICJhZGRFdmVudExpc3RlbmVyIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
UyhjYXN0ZWRUaGlzLCBKU1Rlc3RFdmVudFRhcmdldDo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIEpTVmFsdWUgbGlzdGVuZXIgPSBleGVjLT5hcmd1
bWVudCgxKTsKKyAgICBKU1ZhbHVlIGxpc3RlbmVyID0gc3RhdGUtPmFyZ3VtZW50KDEpOwogICAg
IGlmIChVTkxJS0VMWSghbGlzdGVuZXIuaXNPYmplY3QoKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgaW1wbC5hZGRFdmVudExpc3RlbmVyKGV4
ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT50b0F0b21pY1N0cmluZyhleGVjKSwgY3Jl
YXRlSlNFdmVudExpc3RlbmVyRm9yQWRkKCpleGVjLCAqYXNPYmplY3QobGlzdGVuZXIpLCAqY2Fz
dGVkVGhpcyksIGV4ZWMtPmFyZ3VtZW50KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAgaW1wbC5h
ZGRFdmVudExpc3RlbmVyKHN0YXRlLT5hcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnRvQXRv
bWljU3RyaW5nKHN0YXRlKSwgY3JlYXRlSlNFdmVudExpc3RlbmVyRm9yQWRkKCpzdGF0ZSwgKmFz
T2JqZWN0KGxpc3RlbmVyKSwgKmNhc3RlZFRoaXMpLCBzdGF0ZS0+YXJndW1lbnQoMikudG9Cb29s
ZWFuKHN0YXRlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RFdmVudFRhcmdldFByb3Rv
dHlwZUZ1bmN0aW9uUmVtb3ZlRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25S
ZW1vdmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRl
LT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RFdmVudFRhcmdldCogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0RXZlbnRUYXJnZXQqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMs
ICJUZXN0RXZlbnRUYXJnZXQiLCAicmVtb3ZlRXZlbnRMaXN0ZW5lciIpOworICAgICAgICByZXR1
cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RFdmVudFRhcmdldCIsICJyZW1vdmVF
dmVudExpc3RlbmVyIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlz
LCBKU1Rlc3RFdmVudFRhcmdldDo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+aW1wbCgpOwotICAgIEpTVmFsdWUgbGlzdGVuZXIgPSBleGVjLT5hcmd1bWVudCgxKTsKKyAg
ICBKU1ZhbHVlIGxpc3RlbmVyID0gc3RhdGUtPmFyZ3VtZW50KDEpOwogICAgIGlmIChVTkxJS0VM
WSghbGlzdGVuZXIuaXNPYmplY3QoKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7Ci0gICAgaW1wbC5yZW1vdmVFdmVudExpc3RlbmVyKGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvU3RyaW5nKGV4ZWMpLT50b0F0b21pY1N0cmluZyhleGVjKSwgY3JlYXRlSlNFdmVu
dExpc3RlbmVyRm9yUmVtb3ZlKCpleGVjLCAqYXNPYmplY3QobGlzdGVuZXIpLCAqY2FzdGVkVGhp
cykucHRyKCksIGV4ZWMtPmFyZ3VtZW50KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAgaW1wbC5y
ZW1vdmVFdmVudExpc3RlbmVyKHN0YXRlLT5hcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnRv
QXRvbWljU3RyaW5nKHN0YXRlKSwgY3JlYXRlSlNFdmVudExpc3RlbmVyRm9yUmVtb3ZlKCpzdGF0
ZSwgKmFzT2JqZWN0KGxpc3RlbmVyKSwgKmNhc3RlZFRoaXMpLnB0cigpLCBzdGF0ZS0+YXJndW1l
bnQoMikudG9Cb29sZWFuKHN0YXRlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RFdmVu
dFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uRGlzcGF0Y2hFdmVudChFeGVjU3RhdGUqIGV4ZWMpCitF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlRnVu
Y3Rpb25EaXNwYXRjaEV2ZW50KEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRl
LT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RFdmVudFRhcmdldCogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0RXZlbnRUYXJnZXQqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMs
ICJUZXN0RXZlbnRUYXJnZXQiLCAiZGlzcGF0Y2hFdmVudCIpOworICAgICAgICByZXR1cm4gdGhy
b3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RFdmVudFRhcmdldCIsICJkaXNwYXRjaEV2ZW50
Iik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RFdmVu
dFRhcmdldDo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwot
ICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVj
KSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBFdmVudCogZXZ0ID0g
SlNFdmVudDo6dG9XcmFwcGVkKGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFko
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIEV2ZW50KiBldnQgPSBKU0V2ZW50Ojp0b1dyYXBw
ZWQoc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9vbGVhbihpbXBsLmRpc3BhdGNoRXZlbnQoZXZ0LCBl
YykpOwogCi0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBzZXRET01FeGNlcHRp
b24oc3RhdGUsIGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RFdmVudFRhcmdldC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEV2ZW50VGFyZ2V0LmgKaW5kZXggZGE3NWEzODMyNWUwNTVhYjhhYzIyMGYwYmZjMTJk
YmZjZDgxYjViMS4uMmVkYjY0Y2FjYmRhYzczZDFiOGYxM2E3MTRkMzQ1NDVkNTQyYjg2NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2
ZW50VGFyZ2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEV2ZW50VGFyZ2V0LmgKQEAgLTkwLDcgKzkwLDcgQEAgaW5saW5lIEpTQzo6V2Vha0hh
bmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiwgVGVzdEV2ZW50VGFyZ2V0
KikKIH0KIAogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9i
amVjdCosIFRlc3RFdmVudFRhcmdldCopOwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0RXZl
bnRUYXJnZXQmIGltcGwpIHsgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCAmaW1wbCk7
IH0KK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RFdmVudFRhcmdldCYgaW1wbCkgeyByZXR1
cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAmaW1wbCk7IH0KIEpTQzo6SlNWYWx1ZSB0b0pT
TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0RXZl
bnRUYXJnZXQqKTsKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCmluZGV4IDkxNDdmNjgzY2ZiOTc3
YjM2ZmFhZTMzODZkYmU3MmFhODlmZTkwYjQuLmYwZWIwMDQzMmUwMjRlMjJiYTM5NGNlMzM4N2Yx
MjA5M2NhZjY1YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCkBAIC0xNTYsMzMgKzE1NiwzMyBA
QCBKU1Rlc3RFeGNlcHRpb246On5KU1Rlc3RFeGNlcHRpb24oKQogICAgIHJlbGVhc2VJbXBsKCk7
CiB9CiAKLWJvb2wgSlNUZXN0RXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTVGVzdEV4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90
KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTVGVzdEV4Y2VwdGlvbio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIGlmIChnZXRTdGF0aWNWYWx1ZVNsb3Q8SlNU
ZXN0RXhjZXB0aW9uLCBCYXNlPihleGVjLCBKU1Rlc3RFeGNlcHRpb25UYWJsZSwgdGhpc09iamVj
dCwgcHJvcGVydHlOYW1lLCBzbG90KSkKKyAgICBpZiAoZ2V0U3RhdGljVmFsdWVTbG90PEpTVGVz
dEV4Y2VwdGlvbiwgQmFzZT4oc3RhdGUsIEpTVGVzdEV4Y2VwdGlvblRhYmxlLCB0aGlzT2JqZWN0
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEV4Y2VwdGlvbk5hbWUoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0RXhjZXB0aW9uTmFtZShFeGVjU3RhdGUq
IHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
aXNWYWx1ZSk7CiAgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RFeGNlcHRpb24q
PihzbG90QmFzZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGltcGwubmFtZSgpKTsKKyAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLm5hbWUoKSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiAKLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVl
IGpzVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBi
YXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgSlNUZXN0RXhj
ZXB0aW9uUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEV4Y2VwdGlv
blByb3RvdHlwZSo+KGJhc2VWYWx1ZSk7CiAgICAgaWYgKCFkb21PYmplY3QpCi0gICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNUZXN0RXhjZXB0aW9uOjpnZXRDb25zdHJ1Y3RvcihleGVjLT52bSgpLCBkb21PYmplY3QtPmds
b2JhbE9iamVjdCgpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdEV4Y2VwdGlvbjo6Z2V0Q29uc3RydWN0
b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAogSlNWYWx1
ZSBKU1Rlc3RFeGNlcHRpb246OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uaAppbmRleCBiZTRmMDA0MzllZTE4ZGQ1MzNi
YzVjZmVlM2MzZGU3ZjVlOTUzMmE3Li42NzJmMzM4OTBlYzE1OWY5NmUyODkxYzUzNzQ1YjQyOTk2
YjcyYTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0RXhjZXB0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5oCkBAIC04NCw3ICs4NCw3IEBAIGlubGluZSBKU0M6
OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYsIFRlc3RFeGNl
cHRpb24qKQogfQogCiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xv
YmFsT2JqZWN0KiwgVGVzdEV4Y2VwdGlvbiopOwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0
RXhjZXB0aW9uJiBpbXBsKSB7IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgJmltcGwp
OyB9CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0RXhjZXB0aW9uJiBpbXBsKSB7IHJldHVy
biB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICZpbXBsKTsgfQogSlNDOjpKU1ZhbHVlIHRvSlNO
ZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RFeGNl
cHRpb24qKTsKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAKaW5k
ZXggMzg4OTVkYTQ3MDdmMzg1Mzc0NmVmNGEwZDdkMjIzYWVlNDJlMmI4YS4uZGJhODk0M2YwYmFj
ZTQyNDQyNWMwNjJiN2ViNGZmYTgwNmQ4ZjgyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0
ZUlzUmVhY2hhYmxlLmNwcApAQCAtMTM5LDEyICsxMzksMTIgQEAgSlNUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZTo6fkpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUoKQogICAgIHJlbGVhc2VJbXBsKCk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29u
c3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJv
dG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGVQcm90b3R5cGUqPihiYXNlVmFsdWUpOwogICAgIGlmICghZG9tT2JqZWN0KQotICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU6OmdldENvbnN0cnVjdG9yKGV4ZWMtPnZtKCksIGRv
bU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3Ioc3RhdGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKIH0KIAogSlNWYWx1ZSBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjpnZXRDb25z
dHJ1Y3RvcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJ
c1JlYWNoYWJsZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuaAppbmRleCAzZmNmMDllZTNmZTljZjUxYzM3M2I0ZjQ2
MTIwNTJkOGQ2NTQ2NGZiLi5mMmIwMzNlOTNmZTI4NzczNThjMDQxYWI5YTgwNjkxNWZmY2JhMDll
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmgKQEAgLTgwLDcgKzgwLDcg
QEAgaW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldv
cmxkJiwgVGVzdEdlbmVyYXRlSXNSZWFjaGEKIH0KIAogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKik7
Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlJiBpbXBsKSB7
IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgJmltcGwpOyB9CitpbmxpbmUgSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSYgaW1wbCkgeyByZXR1cm4gdG9KUyhz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCAmaW1wbCk7IH0KIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVh
dGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZSopOwogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKaW5kZXggNjBmOTZkZTE4MjcxMTgx
MzNlYmYxNWYyZDIyMzdiNjFmYjkzMzEzOC4uYThjMTVlNjAwM2ZkNDI3NTFhZWI1ZDc0N2E2ZjZk
N2YxOTI2NTY0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKQEAgLTI2NSwyNyArMjY1LDI3IEBA
IENPTVBJTEVfQVNTRVJUKDEgPT0gVGVzdFN1cHBsZW1lbnRhbDo6U1VQUExFTUVOVEFMQ09OU1RB
TlQxLCBUZXN0SW50ZXJmYWNlRW51bVNVCiBDT01QSUxFX0FTU0VSVCgyID09IFRlc3RTdXBwbGVt
ZW50YWw6OkNPTlNUX0lNUEwsIFRlc3RJbnRlcmZhY2VFbnVtQ09OU1RfSU1QTElzV3JvbmdVc2VE
b05vdENoZWNrQ29uc3RhbnRzKTsKICNlbmRpZgogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1Rlc3RJbnRlcmZhY2Uo
RXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RJbnRl
cmZhY2VDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0SW50ZXJmYWNlKEV4ZWNTdGF0ZSogc3Rh
dGUpCiB7Ci0gICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RJbnRlcmZhY2VDb25z
dHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBq
c0Nhc3Q8SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IqPihzdGF0ZS0+Y2FsbGVlKCkpOworICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRl
KSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgU3RyaW5nIHN0cjEgPSBleGVjLT5h
cmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZ
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBTdHJpbmcgc3RyMSA9IHN0YXRlLT5hcmd1bWVu
dCgwKS50b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKLSAgICBTdHJpbmcgc3RyMiA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIFN0cmluZyBzdHIyID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKHN0YXRl
KS0+dmFsdWUoc3RhdGUpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBjYXN0ZWRUaGlzLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gdGhyb3dDb25z
dHJ1Y3RvckRvY3VtZW50VW5hdmFpbGFibGVFcnJvcigqZXhlYywgIlRlc3RJbnRlcmZhY2UiKTsK
KyAgICAgICAgcmV0dXJuIHRocm93Q29uc3RydWN0b3JEb2N1bWVudFVuYXZhaWxhYmxlRXJyb3Io
KnN0YXRlLCAiVGVzdEludGVyZmFjZSIpOwogICAgIFJlZlB0cjxUZXN0SW50ZXJmYWNlPiBvYmpl
Y3QgPSBUZXN0SW50ZXJmYWNlOjpjcmVhdGUoKmNvbnRleHQsIHN0cjEsIHN0cjIsIGVjKTsKICAg
ICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAg
c2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKTsKICAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVj
dCh0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBvYmplY3QuZ2V0KCkpKSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKHN0YXRlLCBjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgb2JqZWN0LmdldCgpKSkpOwogfQogCiBjb25zdCBDbGFzc0lu
Zm8gSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RJbnRlcmZhY2VD
b25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0
SW50ZXJmYWNlQ29uc3RydWN0b3IpIH07CkBAIC00MzcsMTkgKzQzNywxOSBAQCBKU1Rlc3RJbnRl
cmZhY2U6On5KU1Rlc3RJbnRlcmZhY2UoKQogICAgIHJlbGVhc2VJbXBsKCk7CiB9CiAKLWJvb2wg
SlNUZXN0SW50ZXJmYWNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCitib29sIEpTVGVzdEludGVyZmFjZTo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdElu
dGVyZmFjZSo+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwotICAgIGlmIChnZXRTdGF0aWNWYWx1ZVNsb3Q8SlNUZXN0SW50ZXJmYWNl
LCBCYXNlPihleGVjLCBKU1Rlc3RJbnRlcmZhY2VUYWJsZSwgdGhpc09iamVjdCwgcHJvcGVydHlO
YW1lLCBzbG90KSkKKyAgICBpZiAoZ2V0U3RhdGljVmFsdWVTbG90PEpTVGVzdEludGVyZmFjZSwg
QmFzZT4oc3RhdGUsIEpTVGVzdEludGVyZmFjZVRhYmxlLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5h
bWUsIHNsb3QpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
ICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKLUVuY29kZWRK
U1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY1JlYWRPbmx5
QXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VD
b25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNSZWFkT25seUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUp
OwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoVGVzdEludGVyZmFjZTo6aW1wbGVtZW50
c1N0YXRpY1JlYWRPbmx5QXR0cigpKTsKQEAgLTQ1OSw5MCArNDU5LDkwIEBAIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY1JlYWRPbmx5QXR0
cihFeGVjU3RhdGUqCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxF
KENvbmRpdGlvbjIzKQotRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJ
bXBsZW1lbnRzU3RhdGljQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhp
c1ZhbHVlKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIFRl
c3RJbnRlcmZhY2U6OmltcGxlbWVudHNTdGF0aWNBdHRyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIFRlc3RJbnRlcmZhY2U6OmltcGxlbWVudHNTdGF0
aWNBdHRyKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIxKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIxKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFS
QU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdEludGVyZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0
PEpTVGVzdEludGVyZmFjZVByb3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVy
biByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0SW50ZXJmYWNlIiwgImlt
cGxlbWVudHNTdHIxIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhl
YywgIlRlc3RJbnRlcmZhY2UiLCAiaW1wbGVtZW50c1N0cjEiKTsKKyAgICAgICAgICAgIHJldHVy
biByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdEludGVyZmFjZSIsICJp
bXBsZW1lbnRzU3RyMSIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0
YXRlLCAiVGVzdEludGVyZmFjZSIsICJpbXBsZW1lbnRzU3RyMSIpOwogICAgIH0KICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJp
bmdXaXRoQ2FjaGUoZXhlYywgaW1wbC5pbXBsZW1lbnRzU3RyMSgpKTsKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmltcGxlbWVudHNTdHIxKCkpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAogI2VuZGlmCiAKICNpZiBF
TkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKLUVuY29kZWRKU1ZhbHVl
IGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29k
ZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVl
KTsKICAgICBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dEludGVyZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVy
ZmFjZVByb3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXBy
ZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0SW50ZXJmYWNlIiwgImltcGxlbWVudHNTdHIy
Iik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RJbnRl
cmZhY2UiLCAiaW1wbGVtZW50c1N0cjIiKTsKKyAgICAgICAgICAgIHJldHVybiByZXBvcnREZXBy
ZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdEludGVyZmFjZSIsICJpbXBsZW1lbnRzU3Ry
MiIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdElu
dGVyZmFjZSIsICJpbXBsZW1lbnRzU3RyMiIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+aW1wbCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUo
ZXhlYywgaW1wbC5pbXBsZW1lbnRzU3RyMigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3Ry
aW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmltcGxlbWVudHNTdHIyKCkpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0
aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVy
ZmFjZUltcGxlbWVudHNTdHIzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpz
VGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBz
bG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAg
VU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBhdXRv
KiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdEludGVyZmFjZSo+KHNsb3RCYXNlKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmltcGxlbWVudHNTdHIzKGV4ZWMpKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmltcGxlbWVudHNTdHIzKHN0
YXRlKSk7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUo
Q29uZGl0aW9uMjMpCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9k
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBs
ZW1lbnRzTm9kZShFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVj
KTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0SW50ZXJmYWNlKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBp
ZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUqPihzbG90QmFzZSkpCi0g
ICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVz
dEludGVyZmFjZSIsICJpbXBsZW1lbnRzTm9kZSIpOwotICAgICAgICByZXR1cm4gdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0SW50ZXJmYWNlIiwgImltcGxlbWVudHNOb2RlIik7Cisg
ICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpzdGF0ZSwgIlRl
c3RJbnRlcmZhY2UiLCAiaW1wbGVtZW50c05vZGUiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0
dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RJbnRlcmZhY2UiLCAiaW1wbGVtZW50c05vZGUiKTsK
ICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0
UHRyKGltcGwuaW1wbGVtZW50c05vZGUoKSkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhz
dGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwuaW1wbGVt
ZW50c05vZGUoKSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAog
I2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikK
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3Rh
dGljUmVhZE9ubHlBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVz
dEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljUmVhZE9ubHlBdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFS
QU0odGhpc1ZhbHVlKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKFRlc3RTdXBwbGVt
ZW50YWw6OnN1cHBsZW1lbnRhbFN0YXRpY1JlYWRPbmx5QXR0cigpKTsKQEAgLTU1MiwxMjEgKzU1
MiwxMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVt
ZW50YWxTdGF0aWNSZWFkT25seUF0dHIoRXhlY1N0YXQKICNlbmRpZgogCiAjaWYgRU5BQkxFKENv
bmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJ
bnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0dHIoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50
YWxTdGF0aWNBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4
ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNl
KTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
U3RyaW5nV2l0aENhY2hlKGV4ZWMsIFRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbFN0YXRp
Y0F0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwg
VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RhdGljQXR0cigpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRp
dGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRl
cmZhY2VTdXBwbGVtZW50YWxTdHIxKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVl
IGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjEoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmpl
Y3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
LSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBV
TlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAg
IEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0SW50ZXJm
YWNlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0SW50ZXJmYWNlUHJv
dG90eXBlKj4oc2xvdEJhc2UpKQotICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRH
ZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsU3RyMSIpOwot
ICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0SW50ZXJmYWNl
IiwgInN1cHBsZW1lbnRhbFN0cjEiKTsKKyAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNh
dGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdEludGVyZmFjZSIsICJzdXBwbGVtZW50YWxTdHIx
Iik7CisgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0SW50
ZXJmYWNlIiwgInN1cHBsZW1lbnRhbFN0cjEiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPmltcGwoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hl
KGV4ZWMsIFRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbFN0cjEoJmltcGwpKTsKKyAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBUZXN0U3VwcGxlbWVudGFs
OjpzdXBwbGVtZW50YWxTdHIxKCZpbXBsKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjEyKQotRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFs
U3RyMihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VT
dXBwbGVtZW50YWxTdHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFN
KGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RC
YXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RJbnRlcmZhY2Uq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZSo+KEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAg
ICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZVByb3RvdHlwZSo+KHNsb3RCYXNl
KSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMs
ICJUZXN0SW50ZXJmYWNlIiwgInN1cHBsZW1lbnRhbFN0cjIiKTsKLSAgICAgICAgcmV0dXJuIHRo
cm93R2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdEludGVyZmFjZSIsICJzdXBwbGVtZW50YWxT
dHIyIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpz
dGF0ZSwgIlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsU3RyMiIpOworICAgICAgICByZXR1
cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdEludGVyZmFjZSIsICJzdXBwbGVt
ZW50YWxTdHIyIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBUZXN0U3VwcGxl
bWVudGFsOjpzdXBwbGVtZW50YWxTdHIyKCZpbXBsKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgVGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3Ry
MigmaW1wbCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjMoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMyhF
eGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RJ
bnRlcmZhY2UqPihzbG90QmFzZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRU
aGlzLT5zdXBwbGVtZW50YWxTdHIzKGV4ZWMpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGNhc3RlZFRoaXMtPnN1cHBsZW1lbnRhbFN0cjMoc3RhdGUpKTsKIH0KIAogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGUoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQor
RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZShFeGVjU3RhdGUq
IHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
aXNWYWx1ZSk7CiAgICAgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RJbnRlcmZhY2UqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rl
c3RJbnRlcmZhY2VQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gcmVw
b3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdEludGVyZmFjZSIsICJzdXBwbGVt
ZW50YWxOb2RlIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywg
IlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsTm9kZSIpOworICAgICAgICAgICAgcmV0dXJu
IHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0SW50ZXJmYWNlIiwgInN1
cHBsZW1lbnRhbE5vZGUiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsTm9kZSIpOwogICAgIH0KICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9K
UyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoVGVzdFN1cHBs
ZW1lbnRhbDo6c3VwcGxlbWVudGFsTm9kZSgmaW1wbCkpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9
IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihUZXN0
U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxOb2RlKCZpbXBsKSkpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAogI2VuZGlmCiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVz
dEludGVyZmFjZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdElu
dGVyZmFjZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNlVmFsdWUs
IEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgSlNUZXN0SW50ZXJmYWNlUHJv
dG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZVByb3RvdHlw
ZSo+KGJhc2VWYWx1ZSk7CiAgICAgaWYgKCFkb21PYmplY3QpCi0gICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0SW50
ZXJmYWNlOjpnZXRDb25zdHJ1Y3RvcihleGVjLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVj
dCgpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdEludGVyZmFjZTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUt
PnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAotdm9pZCBKU1Rlc3RJbnRl
cmZhY2U6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQordm9pZCBK
U1Rlc3RJbnRlcmZhY2U6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdEludGVyZmFjZSo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
LSAgICBpZiAodGhpc09iamVjdC0+cHV0RGVsZWdhdGUoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1
ZSwgc2xvdCkpCisgICAgaWYgKHRoaXNPYmplY3QtPnB1dERlbGVnYXRlKHN0YXRlLCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCBzbG90KSkKICAgICAgICAgcmV0dXJuOwotICAgIEJhc2U6OnB1dCh0aGlz
T2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICBCYXNlOjpwdXQo
dGhpc09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogfQogCi12b2lk
IEpTVGVzdEludGVyZmFjZTo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit2b2lk
IEpTVGVzdEludGVyZmFjZTo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogc3Rh
dGUsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogewog
ICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0SW50ZXJmYWNlKj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIElk
ZW50aWZpZXIgcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCk7Cisg
ICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRl
eCk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QodGhpc09iamVjdCwgc2hvdWxkVGhyb3cpOwot
ICAgIGlmICh0aGlzT2JqZWN0LT5wdXREZWxlZ2F0ZShleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBzbG90KSkKKyAgICBpZiAodGhpc09iamVjdC0+cHV0RGVsZWdhdGUoc3RhdGUsIHByb3BlcnR5
TmFtZSwgdmFsdWUsIHNsb3QpKQogICAgICAgICByZXR1cm47Ci0gICAgQmFzZTo6cHV0QnlJbmRl
eChjZWxsLCBleGVjLCBpbmRleCwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICBCYXNlOjpwdXRC
eUluZGV4KGNlbGwsIHN0YXRlLCBpbmRleCwgdmFsdWUsIHNob3VsZFRocm93KTsKIH0KIAogI2lm
IEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotdm9pZCBzZXRKU1Rl
c3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCit2b2lkIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50
c1N0YXRpY0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShi
YXNlT2JqZWN0KTsKLSAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0
YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuOwogICAgIFRlc3RJbnRlcmZhY2U6OnNldEltcGxlbWVudHNTdGF0aWNBdHRyKG5hdGl2
ZVZhbHVlKTsKIH0KQEAgLTY3NCwyMSArNjc0LDIxIEBAIHZvaWQgc2V0SlNUZXN0SW50ZXJmYWNl
Q29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIz
KQotdm9pZCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMihFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0
cjIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0o
YmFzZU9iamVjdCk7CiAgICAgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxK
U1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSkpCi0g
ICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0SW50ZXJm
YWNlIiwgImltcGxlbWVudHNTdHIyIik7CisgICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0
dGVyRXJyb3IoKnN0YXRlLCAiVGVzdEludGVyZmFjZSIsICJpbXBsZW1lbnRzU3RyMiIpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RJ
bnRlcmZhY2UiLCAiaW1wbGVtZW50c1N0cjIiKTsKKyAgICAgICAgICAgIHRocm93U2V0dGVyVHlw
ZUVycm9yKCpzdGF0ZSwgIlRlc3RJbnRlcmZhY2UiLCAiaW1wbGVtZW50c1N0cjIiKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwot
ICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIFN0cmluZyBu
YXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUpOworICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAg
aW1wbC5zZXRJbXBsZW1lbnRzU3RyMihuYXRpdmVWYWx1ZSk7CiB9CkBAIC02OTYsMzUgKzY5Niwz
NSBAQCB2b2lkIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuYwogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0
aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKLXZvaWQgc2V0SlNUZXN0SW50ZXJmYWNlSW1w
bGVtZW50c1N0cjMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIHNl
dEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0
KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGJhc2VPYmplY3QpOwogICAgIFVOVVNFRF9QQVJB
TSh0aGlzVmFsdWUpOwogICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0SW50ZXJm
YWNlKj4oYmFzZU9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgVU5V
U0VEX1BBUkFNKGV4ZWMpOwotICAgIGNhc3RlZFRoaXMtPnNldEltcGxlbWVudHNTdHIzKGV4ZWMs
IHZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIGNhc3RlZFRoaXMtPnNldElt
cGxlbWVudHNTdHIzKHN0YXRlLCB2YWx1ZSk7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENv
bmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCi12b2lkIHNldEpTVGVzdEludGVyZmFj
ZUltcGxlbWVudHNOb2RlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9p
ZCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZShFeGVjU3RhdGUqIHN0YXRlLCBKU09i
amVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3RJ
bnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZSo+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZVByb3RvdHlwZSo+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0
ZWRTZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RJbnRlcmZhY2UiLCAiaW1wbGVtZW50c05vZGUiKTsK
KyAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0SW50
ZXJmYWNlIiwgImltcGxlbWVudHNOb2RlIik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRo
cm93U2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdEludGVyZmFjZSIsICJpbXBsZW1lbnRzTm9k
ZSIpOworICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdEludGVy
ZmFjZSIsICJpbXBsZW1lbnRzTm9kZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgTm9kZSogbmF0aXZlVmFsdWUgPSBK
U05vZGU6OnRvV3JhcHBlZCh2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIGltcGwuc2V0SW1wbGVtZW50c05vZGUobmF0aXZlVmFsdWUpOwogfQpA
QCAtNzMyLDEyICs3MzIsMTIgQEAgdm9pZCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9k
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmMKICNlbmRpZgogCiAj
aWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi12b2lkIHNldEpT
VGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljQXR0cihFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQordm9pZCBzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBs
ZW1lbnRhbFN0YXRpY0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9Q
QVJBTShiYXNlT2JqZWN0KTsKLSAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1N0cmluZyhzdGF0ZSktPnZh
bHVlKHN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIFRlc3RTdXBwbGVtZW50YWw6OnNldFN1cHBsZW1lbnRhbFN0YXRp
Y0F0dHIobmF0aXZlVmFsdWUpOwogfQpAQCAtNzQ1LDIxICs3NDUsMjEgQEAgdm9pZCBzZXRKU1Rl
c3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0dHIoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamUKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUo
Q29uZGl0aW9uMTIpCi12b2lkIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjIoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIHNldEpTVGVzdEludGVyZmFj
ZVN1cHBsZW1lbnRhbFN0cjIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQog
ewogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAg
ICBVTlVTRURfUEFSQU0oYmFzZU9iamVjdCk7CiAgICAgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRU
aGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAo
anNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSkpCi0gICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKmV4
ZWMsICJUZXN0SW50ZXJmYWNlIiwgInN1cHBsZW1lbnRhbFN0cjIiKTsKKyAgICAgICAgICAgIHJl
cG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0SW50ZXJmYWNlIiwgInN1cHBs
ZW1lbnRhbFN0cjIiKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBl
RXJyb3IoKmV4ZWMsICJUZXN0SW50ZXJmYWNlIiwgInN1cHBsZW1lbnRhbFN0cjIiKTsKKyAgICAg
ICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RJbnRlcmZhY2UiLCAic3Vw
cGxlbWVudGFsU3RyMiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9TdHJpbmcoc3RhdGUp
LT52YWx1ZShzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybjsKICAgICBUZXN0U3VwcGxlbWVudGFsOjpzZXRTdXBwbGVtZW50YWxT
dHIyKCZpbXBsLCBuYXRpdmVWYWx1ZSk7CiB9CkBAIC03NjcsMzUgKzc2NywzNSBAQCB2b2lkIHNl
dEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogYmFzZU9iamVjdCwgRQogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVO
QUJMRShDb25kaXRpb24xMikKLXZvaWQgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3Ry
MyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0SW50
ZXJmYWNlU3VwcGxlbWVudGFsU3RyMyhFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZU9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odGhpc1Zh
bHVlKTsKICAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdEludGVyZmFjZSo+KGJh
c2VPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIFVOVVNFRF9QQVJB
TShleGVjKTsKLSAgICBjYXN0ZWRUaGlzLT5zZXRTdXBwbGVtZW50YWxTdHIzKGV4ZWMsIHZhbHVl
KTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIGNhc3RlZFRoaXMtPnNldFN1cHBsZW1l
bnRhbFN0cjMoc3RhdGUsIHZhbHVlKTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0
aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLXZvaWQgc2V0SlNUZXN0SW50ZXJmYWNlU3Vw
cGxlbWVudGFsTm9kZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQg
c2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZShFeGVjU3RhdGUqIHN0YXRlLCBKU09i
amVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3RJ
bnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZSo+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZVByb3RvdHlwZSo+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0
ZWRTZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsTm9kZSIp
OworICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RJ
bnRlcmZhY2UiLCAic3VwcGxlbWVudGFsTm9kZSIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICB0aHJvd1NldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVu
dGFsTm9kZSIpOworICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVz
dEludGVyZmFjZSIsICJzdXBwbGVtZW50YWxOb2RlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBOb2RlKiBuYXRpdmVW
YWx1ZSA9IEpTTm9kZTo6dG9XcmFwcGVkKHZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm47CiAgICAgVGVzdFN1cHBsZW1lbnRhbDo6c2V0U3VwcGxlbWVudGFs
Tm9kZSgmaW1wbCwgbmF0aXZlVmFsdWUpOwogfQpAQCAtODA4LDEyICs4MDgsMTIgQEAgSlNWYWx1
ZSBKU1Rlc3RJbnRlcmZhY2U6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKIH0KIAogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENv
bmRpdGlvbjIzKQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VQ
cm90b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRob2QxKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25J
bXBsZW1lbnRzTWV0aG9kMShFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+
dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RJbnRlcmZhY2UqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0
SW50ZXJmYWNlIiwgImltcGxlbWVudHNNZXRob2QxIik7CisgICAgICAgIHJldHVybiB0aHJvd1Ro
aXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdEludGVyZmFjZSIsICJpbXBsZW1lbnRzTWV0aG9kMSIp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0SW50ZXJm
YWNlOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAg
aW1wbC5pbXBsZW1lbnRzTWV0aG9kMSgpOwpAQCAtODIzLDQ5ICs4MjMsNDkgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkltcGxl
bWVudHNNZXRob2QxKEUKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFC
TEUoQ29uZGl0aW9uMjMpCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVy
ZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDIoRXhlY1N0YXRlKiBleGVjKQor
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5j
dGlvbkltcGxlbWVudHNNZXRob2QyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0
aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0
YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywg
IlRlc3RJbnRlcmZhY2UiLCAiaW1wbGVtZW50c01ldGhvZDIiKTsKKyAgICAgICAgcmV0dXJuIHRo
cm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0SW50ZXJmYWNlIiwgImltcGxlbWVudHNNZXRo
b2QyIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RJ
bnRlcmZhY2U6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsK
LSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMikpCi0gICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhl
YykpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCisgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKHN0YXRlKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgYXV0byogc2NyaXB0
Q29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBhdXRvKiBzY3JpcHRDb250
ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIXNjcmlwdENvbnRleHQp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgU3Ry
aW5nIHN0ckFyZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIFN0cmluZyBz
dHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7
CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgVGVzdE9iaiogb2JqQXJnID0g
SlNUZXN0T2JqOjp0b1dyYXBwZWQoZXhlYy0+YXJndW1lbnQoMSkpOwotICAgIGlmIChVTkxJS0VM
WShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgVGVzdE9iaiogb2JqQXJnID0gSlNUZXN0T2Jq
Ojp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDEpKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwuaW1wbGVtZW50c01ldGhvZDIoc2NyaXB0Q29u
dGV4dCwgc3RyQXJnLCBvYmpBcmcsIGVjKSkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhz
dGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwuaW1wbGVt
ZW50c01ldGhvZDIoc2NyaXB0Q29udGV4dCwgc3RyQXJnLCBvYmpBcmcsIGVjKSkpOwogCi0gICAg
c2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVj
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKICNlbmRpZgogCiAj
aWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVt
ZW50c01ldGhvZDMoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRob2QzKEV4ZWNT
dGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUo
KTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rl
c3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZSo+
KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0
dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RJbnRlcmZhY2UiLCAiaW1wbGVtZW50
c01ldGhvZDMiKTsKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJU
ZXN0SW50ZXJmYWNlIiwgImltcGxlbWVudHNNZXRob2QzIik7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RJbnRlcmZhY2U6OmluZm8oKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5pbXBsZW1lbnRzTWV0aG9kMyhleGVjKSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5pbXBsZW1lbnRzTWV0aG9k
MyhzdGF0ZSkpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5B
QkxFKENvbmRpdGlvbjIzKQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRl
cmZhY2VDb25zdHJ1Y3RvckZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDQoRXhlY1N0YXRlKiBleGVj
KQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rv
ckZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDQoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBUZXN0
SW50ZXJmYWNlOjppbXBsZW1lbnRzTWV0aG9kNCgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CkBAIC04NzQsMTIgKzg3NCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yRnVuY3Rpb25JbXBsZW1lbnRz
TWV0aG9kNAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25k
aXRpb24xMikKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlUHJv
dG90eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2QxKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25T
dXBwbGVtZW50YWxNZXRob2QxKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRl
LT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdEludGVyZmFjZSo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRl
c3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsTWV0aG9kMSIpOworICAgICAgICByZXR1cm4gdGhy
b3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsTWV0
aG9kMSIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0
SW50ZXJmYWNlOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7
CiAgICAgVGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTWV0aG9kMSgmaW1wbCk7CkBAIC04
ODksNDkgKzg4OSw0OSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVy
ZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kMQogI2VuZGlmCiAKICNpZiBF
TkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBwbGVtZW50
YWxNZXRob2QyKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2QyKEV4ZWNT
dGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUo
KTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rl
c3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZSo+
KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0
dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVu
dGFsTWV0aG9kMiIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwg
IlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsTWV0aG9kMiIpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0SW50ZXJmYWNlOjppbmZvKCkpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA8IDIpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwotICAgIGF1dG8qIHNjcmlwdENvbnRleHQgPSBqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CisgICAgYXV0byogc2NyaXB0Q29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CiAgICAgaWYgKCFzY3JpcHRDb250ZXh0KQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIFN0cmluZyBzdHJBcmcgPSBleGVjLT5hcmd1
bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBTdHJpbmcgc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50
KDApLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUpOworICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwotICAgIFRlc3RPYmoqIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKGV4
ZWMtPmFyZ3VtZW50KDEpKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIFRlc3RPYmoqIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1
bWVudCgxKSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgSlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0
cihUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxNZXRob2QyKCZpbXBsLCBzY3JpcHRDb250
ZXh0LCBzdHJBcmcsIG9iakFyZywgZWMpKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0
YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoVGVzdFN1cHBsZW1l
bnRhbDo6c3VwcGxlbWVudGFsTWV0aG9kMigmaW1wbCwgc2NyaXB0Q29udGV4dCwgc3RyQXJnLCBv
YmpBcmcsIGVjKSkpOwogCi0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBzZXRE
T01FeGNlcHRpb24oc3RhdGUsIGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMTIpCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZVBy
b3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kMyhFeGVjU3RhdGUqIGV4ZWMpCitFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9u
U3VwcGxlbWVudGFsTWV0aG9kMyhFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhp
c1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0
ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJU
ZXN0SW50ZXJmYWNlIiwgInN1cHBsZW1lbnRhbE1ldGhvZDMiKTsKKyAgICAgICAgcmV0dXJuIHRo
cm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0SW50ZXJmYWNlIiwgInN1cHBsZW1lbnRhbE1l
dGhvZDMiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVz
dEludGVyZmFjZTo6aW5mbygpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRo
aXMtPnN1cHBsZW1lbnRhbE1ldGhvZDMoZXhlYykpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoY2FzdGVkVGhpcy0+c3VwcGxlbWVudGFsTWV0aG9kMyhzdGF0ZSkpOwogfQogCiAjZW5kaWYK
IAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckZ1bmN0aW9u
U3VwcGxlbWVudGFsTWV0aG9kNChFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yRnVuY3Rpb25TdXBwbGVtZW50YWxN
ZXRob2Q0KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxl
bWVudGFsTWV0aG9kNCgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0SW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0SW50ZXJmYWNlLmgKaW5kZXggMWVmZDc1MmQ4NjQ0NjFmNGQzZmFmZjI0N2MyZjhi
NzQ5MzU4MjFkNC4uNDdmMDc4MjkxZmM3ZTMyMGMwZDhiOGY0YzA0ZjZkY2EyM2ZhZWQyOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdElu
dGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RJbnRlcmZhY2UuaApAQCAtMTEwLDcgKzExMCw3IEBAIGlubGluZSBKU0M6OldlYWtIYW5k
bGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYsIFRlc3RJbnRlcmZhY2UqKQog
fQogCiBXRUJDT1JFX0VYUE9SVCBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpT
RE9NR2xvYmFsT2JqZWN0KiwgVGVzdEludGVyZmFjZSopOwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBUZXN0SW50ZXJmYWNlJiBpbXBsKSB7IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwg
JmltcGwpOyB9CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0SW50ZXJmYWNlJiBpbXBsKSB7
IHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICZpbXBsKTsgfQogSlNDOjpKU1ZhbHVl
IHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRl
c3RJbnRlcmZhY2UqKTsKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lci5jcHAKaW5kZXggOTYyNGFjNzgwNDMxNzc0Nzc3YzBjOTExNGVhNzRiNjcyMDgwZDNiNy4u
MjE2MWY4N2U0ODVmMjQwOTZkMTE1MmFjNTU1MzA3MmE5YjFiMjYzZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcApAQCAtMTQ3LDEyICsxNDcsMTIgQEAg
SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6fkpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXIoKQogICAgIHJlbGVhc2VJbXBsKCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBi
YXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNPYmplY3QqIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAg
ICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUqPihiYXNlVmFs
dWUpOwogICAgIGlmICghZG9tT2JqZWN0KQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihleGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXI6OmdldENvbnN0cnVjdG9yKGV4ZWMtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6Z2V0Q29u
c3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAog
SlNWYWx1ZSBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpnZXRDb25zdHJ1Y3RvcihWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCkBAIC0xNjAsMTkgKzE2MCwxOSBAQCBK
U1ZhbHVlIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmdldENvbnN0cnVjdG9yKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsbwogICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3I+KHZtLCBqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlRnVuY3Rpb25NZXRob2Qo
RXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlRnVuY3Rpb25NZXRob2QoRXhlY1N0YXRlKiBzdGF0
ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXIqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXIqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lciIsICJtZXRob2QiKTsKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5
cGVFcnJvcigqc3RhdGUsICJUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciIsICJtZXRob2QiKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXI6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmlt
cGwoKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IoZXhlYykpOwotICAgIGlmICghZXhlYy0+YXJndW1lbnQoMCkuaXNGdW5jdGlvbigpKQotICAg
ICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IoKmV4ZWMsIDAsICJs
aXN0ZW5lciIsICJUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciIsICJtZXRob2QiKTsKLSAgICBS
ZWZQdHI8TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4gbGlzdGVuZXIgPSBKU01lZGlhUXVlcnlMaXN0
TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSksIGNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOworICAgIGlmICghc3RhdGUtPmFyZ3Vt
ZW50KDApLmlzRnVuY3Rpb24oKSkKKyAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVG
dW5jdGlvbkVycm9yKCpzdGF0ZSwgMCwgImxpc3RlbmVyIiwgIlRlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyIiwgIm1ldGhvZCIpOworICAgIFJlZlB0cjxNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiBs
aXN0ZW5lciA9IEpTTWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRl
LT51bmNoZWNrZWRBcmd1bWVudCgwKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKICAg
ICBpbXBsLm1ldGhvZChsaXN0ZW5lcik7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5o
CmluZGV4IGYyMDY1MjJhNGYyY2JkYzk4ZWM3ZDI3N2ExMGQwM2Y3MWQ3ZmZhNzkuLmFmZWY1ZDEx
YTdiNDhhNGZiNTA0NDRmOTdhZTcwOWYzZTIyNGRhN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXIuaApAQCAtODAsNyArODAsNyBAQCBpbmxpbmUgSlNDOjpXZWFr
SGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmLCBUZXN0TWVkaWFRdWVy
eUxpc3RMaQogfQogCiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xv
YmFsT2JqZWN0KiwgVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqKTsKLWlubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXImIGltcGwpIHsgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCAmaW1wbCk7IH0KK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyJiBpbXBsKSB7IHJldHVybiB0b0pTKHN0YXRlLCBnbG9i
YWxPYmplY3QsICZpbXBsKTsgfQogSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpF
eGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
Kik7CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCmluZGV4IDQ2MDdlZTkx
MmU1MDdmM2NkN2IzODI5MDJhYTJiZDg5N2U2OWU0YmUuLmE2MzBmMTljNGZiMjBkOTNiNjM1ZWE0
YmNhZGMwNjIzOGYyZWRmYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAK
QEAgLTEyMywyNyArMTIzLDI3IEBAIHZvaWQgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVj
dG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0CiAgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25seSB8
IERvbnRFbnVtKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3ROYW1l
ZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0TmFtZWRDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVz
dE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1Rlc3ROYW1lZENv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgYXV0byogY2FzdGVkVGhpcyA9IGpz
Q2FzdDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxl
ZSgpKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IoZXhlYykpOworICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRDb25z
dHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3IqPihzdGF0ZS0+Y2FsbGVlKCkpOworICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgU3RyaW5nIHN0cjEgPSBleGVjLT5hcmd1bWVudCgw
KS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBTdHJpbmcgc3RyMSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1N0
cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKLSAgICBTdHJpbmcgc3RyMiA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IFN0cmluZyBzdHIyID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUo
c3RhdGUpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIFN0cmluZyBzdHIz
ID0gZXhlYy0+YXJndW1lbnQoMikuaXNVbmRlZmluZWQoKSA/IFN0cmluZygpIDogZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMikudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChV
TkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgU3RyaW5nIHN0cjMgPSBzdGF0ZS0+
YXJndW1lbnQoMikuaXNVbmRlZmluZWQoKSA/IFN0cmluZygpIDogc3RhdGUtPnVuY2hlY2tlZEFy
Z3VtZW50KDIpLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUpOworICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIFJlZlB0cjxUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4gb2JqZWN0
ID0gVGVzdE5hbWVkQ29uc3RydWN0b3I6OmNyZWF0ZUZvckpTQ29uc3RydWN0b3IoKmNhc3RlZFRo
aXMtPmRvY3VtZW50KCksIHN0cjEsIHN0cjIsIHN0cjMsIGVjKTsKICAgICBpZiAoZWMpIHsKLSAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9u
KHN0YXRlLCBlYyk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsK
ICAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKGV4ZWMsIGNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBvYmplY3QuZ2V0KCkpKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgb2JqZWN0LmdldCgpKSkpOwogfQogCiBjb25zdCBDbGFzc0luZm8gSlNUZXN0TmFtZWRD
b25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIkF1ZGlvQ29uc3RydWN0b3Ii
LCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5hbWVkQ29uc3Ry
dWN0b3JOYW1lZENvbnN0cnVjdG9yKSB9OwpAQCAtMjEyLDEyICsyMTIsMTIgQEAgSlNUZXN0TmFt
ZWRDb25zdHJ1Y3Rvcjo6fkpTVGVzdE5hbWVkQ29uc3RydWN0b3IoKQogICAgIHJlbGVhc2VJbXBs
KCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBl
KiBkb21PYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE5hbWVkQ29uc3RydWN0b3JQcm90b3R5
cGUqPihiYXNlVmFsdWUpOwogICAgIGlmICghZG9tT2JqZWN0KQotICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE5h
bWVkQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdG9yKGV4ZWMtPnZtKCksIGRvbU9iamVjdC0+Z2xv
YmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6Z2V0Q29u
c3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAog
SlNWYWx1ZSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5oIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3Iu
aAppbmRleCA2NWJmYmYwZTg1YjU5NzM0MzNlZjgyZmRhNmE2NzZiYzU1ZDAzNjQ0Li5iZTgxNmMy
NDFkNzFkZjNiN2MxZDZhZmNiZGU5OTllYWE3Y2NhOTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENv
bnN0cnVjdG9yLmgKQEAgLTgxLDcgKzgxLDcgQEAgaW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVy
KiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiwgVGVzdE5hbWVkQ29uc3RydWN0b3IKIH0K
IAogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCos
IFRlc3ROYW1lZENvbnN0cnVjdG9yKik7Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3ROYW1l
ZENvbnN0cnVjdG9yJiBpbXBsKSB7IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgJmlt
cGwpOyB9CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0TmFtZWRDb25zdHJ1Y3RvciYgaW1w
bCkgeyByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAmaW1wbCk7IH0KIEpTQzo6SlNW
YWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3Qq
LCBUZXN0TmFtZWRDb25zdHJ1Y3RvciopOwogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAppbmRleCBmMjg3NWVmNDE0
NTQ1MmYzMzI5OTMzYTM0MTRlMzAzYjJjMGFiYzk3Li45YTYwNTA0MTQxNGRiZjcwMzRkMzg2ZTkx
NWU4NWQ2MjQ1ZTkwNGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCkBAIC04OCwxMSArODgsMTEgQEAgcHJvdGVj
dGVkOgogICAgIHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6
OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0RGF0YSYpOwogfTsKIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBKU1Rlc3ROb2RlQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTVGVzdE5vZGUoRXhl
Y1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3ROb2RlQ29u
c3RydWN0b3I6OmNvbnN0cnVjdEpTVGVzdE5vZGUoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBh
dXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE5vZGVDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNh
bGxlZSgpKTsKKyAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE5vZGVDb25zdHJ1
Y3Rvcio+KHN0YXRlLT5jYWxsZWUoKSk7CiAgICAgUmVmUHRyPFRlc3ROb2RlPiBvYmplY3QgPSBU
ZXN0Tm9kZTo6Y3JlYXRlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0
b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBvYmplY3QuZ2V0KCkpKSk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKHN0YXRlLCBjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgb2JqZWN0LmdldCgpKSkpOwogfQogCiBjb25zdCBDbGFzc0luZm8g
SlNUZXN0Tm9kZUNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0Tm9kZUNvbnN0cnVjdG9yIiwg
JkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3ROb2RlQ29uc3RydWN0
b3IpIH07CkBAIC0xNTAsNDYgKzE1MCw0NiBAQCBKU09iamVjdCogSlNUZXN0Tm9kZTo6Z2V0UHJv
dG90eXBlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICByZXR1cm4g
Z2V0RE9NUHJvdG90eXBlPEpTVGVzdE5vZGU+KHZtLCBnbG9iYWxPYmplY3QpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlTmFtZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90
QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3ROb2RlTmFtZShFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2Us
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9Q
QVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShz
bG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0Tm9kZSog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9kZSo+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlm
IChqc0R5bmFtaWNDYXN0PEpTVGVzdE5vZGVQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAgICAg
ICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdE5vZGUi
LCAibmFtZSIpOwotICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJU
ZXN0Tm9kZSIsICJuYW1lIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdl
dHRlckVycm9yKCpzdGF0ZSwgIlRlc3ROb2RlIiwgIm5hbWUiKTsKKyAgICAgICAgcmV0dXJuIHRo
cm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3ROb2RlIiwgIm5hbWUiKTsKICAgICB9CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGltcGwubmFtZSgpKTsKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLm5hbWUoKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVD
b25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlVmFsdWUsIEVuY29kZWRK
U1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlQ29uc3RydWN0
b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKICAgICBKU1Rlc3ROb2RlUHJvdG90eXBlKiBkb21PYmplY3QgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdE5vZGVQcm90b3R5cGUqPihiYXNlVmFsdWUpOwogICAgIGlmICgh
ZG9tT2JqZWN0KQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE5vZGU6OmdldENvbnN0cnVjdG9yKGV4ZWMtPnZt
KCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3Ioc3RhdGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0Tm9kZTo6
Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsK
IH0KIAotdm9pZCBzZXRKU1Rlc3ROb2RlTmFtZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBi
YXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0Tm9kZU5hbWUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmpl
Y3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oYmFzZU9iamVjdCk7CiAgICAgSlNUZXN0Tm9k
ZSogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9kZSo+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAg
IGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE5vZGVQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSkpCi0gICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKmV4
ZWMsICJUZXN0Tm9kZSIsICJuYW1lIik7CisgICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0
dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE5vZGUiLCAibmFtZSIpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3ROb2RlIiwgIm5hbWUiKTsK
KyAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3ROb2RlIiwgIm5h
bWUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+aW1wbCgpOwotICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3Rh
dGUpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm47CiAgICAgaW1wbC5zZXROYW1lKG5hdGl2ZVZhbHVlKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlz
dGljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
b25kZXRlcm1pbmlzdGljLmNwcAppbmRleCA2M2E2NTM1MTkwOWIwOWU4MTIzNmJkY2EyZDYxNWZi
OWIwYTk5MjIyLi45NWE3ODg4NWFjNDg3ZDQ1N2Q1YmI2MWFmOGUwYWIwZWU4YWVjNWM0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9u
ZGV0ZXJtaW5pc3RpYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuY3BwCkBAIC0xNjgsMTkgKzE2OCwxOSBAQCBK
U1Rlc3ROb25kZXRlcm1pbmlzdGljOjp+SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYygpCiAgICAgcmVs
ZWFzZUltcGwoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05v
bmRldGVybWluaXN0aWNSZWFkb25seUF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xv
dEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpT
VmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNSZWFkb25seUF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNF
RF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE5vbmRldGVybWluaXN0aWMqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE5vbmRldGVybWluaXN0aWMqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAg
ICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlKj4oc2xv
dEJhc2UpKQotICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigq
ZXhlYywgIlRlc3ROb25kZXRlcm1pbmlzdGljIiwgIm5vbmRldGVybWluaXN0aWNSZWFkb25seUF0
dHIiKTsKLSAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE5v
bmRldGVybWluaXN0aWMiLCAibm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0ciIpOworICAgICAg
ICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0Tm9u
ZGV0ZXJtaW5pc3RpYyIsICJub25kZXRlcm1pbmlzdGljUmVhZG9ubHlBdHRyIik7CisgICAgICAg
IHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0Tm9uZGV0ZXJtaW5pc3Rp
YyIsICJub25kZXRlcm1pbmlzdGljUmVhZG9ubHlBdHRyIik7CiAgICAgfQogI2lmIEVOQUJMRShX
RUJfUkVQTEFZKQotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0
YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAgSW5wdXRDdXJzb3ImIGN1cnNvciA9IGds
b2JhbE9iamVjdC0+aW5wdXRDdXJzb3IoKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29u
c3QgQXRvbWljU3RyaW5nPiBiaW5kaW5nTmFtZSgiVGVzdE5vbmRldGVybWluaXN0aWMubm9uZGV0
ZXJtaW5pc3RpY1JlYWRvbmx5QXR0ciIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpOwogICAgIGlmIChjdXJzb3IuaXNDYXB0dXJpbmcoKSkgewpAQCAtMjA1LDI1ICsyMDUsMjUg
QEAgRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNS
ZWFkb25seUF0dHIoRXhlY1N0YXRlKiBleGUKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RO
b25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWlu
aXN0aWNXcml0ZWFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BB
UkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNs
b3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3ROb25kZXRl
cm1pbmlzdGljKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3ROb25kZXRlcm1pbmlz
dGljKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5p
c3RpY1Byb3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXBy
ZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25kZXRl
cm1pbmlzdGljV3JpdGVhYmxlQXR0ciIpOwotICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBl
RXJyb3IoKmV4ZWMsICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25kZXRlcm1pbmlzdGljV3Jp
dGVhYmxlQXR0ciIpOworICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJF
cnJvcigqc3RhdGUsICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25kZXRlcm1pbmlzdGljV3Jp
dGVhYmxlQXR0ciIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRl
LCAiVGVzdE5vbmRldGVybWluaXN0aWMiLCAibm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIi
KTsKICAgICB9CiAjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCi0gICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKICAgICBJ
bnB1dEN1cnNvciYgY3Vyc29yID0gZ2xvYmFsT2JqZWN0LT5pbnB1dEN1cnNvcigpOwogICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBBdG9taWNTdHJpbmc+IGJpbmRpbmdOYW1lKCJUZXN0
Tm9uZGV0ZXJtaW5pc3RpYy5ub25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0ciIsIEF0b21pY1N0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgIGlmIChjdXJzb3IuaXNDYXB0dXJpbmco
KSkgewogICAgICAgICBTdHJpbmcgbWVtb2l6ZWRSZXN1bHQgPSBjYXN0ZWRUaGlzLT5pbXBsKCku
bm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIoKTsKICAgICAgICAgY3Vyc29yLmFwcGVuZElu
cHV0PE1lbW9pemVkRE9NUmVzdWx0PFN0cmluZz4+KGJpbmRpbmdOYW1lLmdldCgpLnN0cmluZygp
LCBtZW1vaXplZFJlc3VsdCwgMCk7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdX
aXRoQ2FjaGUoZXhlYywgbWVtb2l6ZWRSZXN1bHQpOworICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBtZW1vaXplZFJlc3VsdCk7CiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9CiAKQEAgLTIzMSwzNiArMjMxLDM2IEBA
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljV3Jp
dGVhYmxlQXR0cihFeGVjU3RhdGUqIGV4CiAgICAgICAgIFN0cmluZyBtZW1vaXplZFJlc3VsdDsK
ICAgICAgICAgTWVtb2l6ZWRET01SZXN1bHRCYXNlKiBpbnB1dCA9IGN1cnNvci5mZXRjaElucHV0
PE1lbW9pemVkRE9NUmVzdWx0QmFzZT4oKTsKICAgICAgICAgaWYgKGlucHV0ICYmIGlucHV0LT5j
b252ZXJ0VG88U3RyaW5nPihtZW1vaXplZFJlc3VsdCkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgbWVtb2l6ZWRSZXN1bHQpOworICAgICAg
ICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgbWVtb2l6ZWRS
ZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAg
ICAgICB9CiAgICAgfQogI2VuZGlmCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwo
KTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGltcGwubm9u
ZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0
cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5ub25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0cigp
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIAotRW5jb2RlZEpT
VmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRy
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0
aWNOb25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVj
dCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewot
ICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVO
VVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAg
SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
Tm9uZGV0ZXJtaW5pc3RpYyo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVz
dE5vbmRldGVybWluaXN0aWNQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAgICAgICAgICByZXR1
cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdE5vbmRldGVybWluaXN0
aWMiLCAibm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIiKTsKLSAgICAgICAgcmV0dXJuIHRo
cm93R2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE5vbmRldGVybWluaXN0aWMiLCAibm9uZGV0
ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIiKTsKKyAgICAgICAgICAgIHJldHVybiByZXBvcnREZXBy
ZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE5vbmRldGVybWluaXN0aWMiLCAibm9uZGV0
ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlw
ZUVycm9yKCpzdGF0ZSwgIlRlc3ROb25kZXRlcm1pbmlzdGljIiwgIm5vbmRldGVybWluaXN0aWNF
eGNlcHRpb25BdHRyIik7CiAgICAgfQogI2lmIEVOQUJMRShXRUJfUkVQTEFZKQotICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Cisg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRlLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCk7CiAgICAgSW5wdXRDdXJzb3ImIGN1cnNvciA9IGdsb2JhbE9iamVjdC0+aW5wdXRDdXJz
b3IoKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbWljU3RyaW5nPiBiaW5k
aW5nTmFtZSgiVGVzdE5vbmRldGVybWluaXN0aWMubm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0
dHIiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICBpZiAoY3Vyc29y
LmlzQ2FwdHVyaW5nKCkpIHsKICAgICAgICAgU3RyaW5nIG1lbW9pemVkUmVzdWx0ID0gY2FzdGVk
VGhpcy0+aW1wbCgpLm5vbmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRyKCk7CiAgICAgICAgIGN1
cnNvci5hcHBlbmRJbnB1dDxNZW1vaXplZERPTVJlc3VsdDxTdHJpbmc+PihiaW5kaW5nTmFtZS5n
ZXQoKS5zdHJpbmcoKSwgbWVtb2l6ZWRSZXN1bHQsIDApOwotICAgICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIG1lbW9pemVkUmVzdWx0KTsKKyAgICAgICAgSlNW
YWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOwog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiAgICAgfQogCkBAIC0yNjgs
MzggKzI2OCwzOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0
ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIoRXhlY1N0YXRlKiBleAogICAgICAgICBTdHJpbmcgbWVt
b2l6ZWRSZXN1bHQ7CiAgICAgICAgIE1lbW9pemVkRE9NUmVzdWx0QmFzZSogaW5wdXQgPSBjdXJz
b3IuZmV0Y2hJbnB1dDxNZW1vaXplZERPTVJlc3VsdEJhc2U+KCk7CiAgICAgICAgIGlmIChpbnB1
dCAmJiBpbnB1dC0+Y29udmVydFRvPFN0cmluZz4obWVtb2l6ZWRSZXN1bHQpKSB7Ci0gICAgICAg
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIG1lbW9pemVkUmVz
dWx0KTsKKyAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3Rh
dGUsIG1lbW9pemVkUmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT5pbXBsKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShl
eGVjLCBpbXBsLm5vbmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRyKCkpOworICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwubm9uZGV0ZXJtaW5pc3RpY0V4
Y2VwdGlvbkF0dHIoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQog
CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGlj
R2V0dGVyRXhjZXB0aW9uQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2VwdGlvbkF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNF
RF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE5vbmRldGVybWluaXN0aWMqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE5vbmRldGVybWluaXN0aWMqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAg
ICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlKj4oc2xv
dEJhc2UpKQotICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigq
ZXhlYywgIlRlc3ROb25kZXRlcm1pbmlzdGljIiwgIm5vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNl
cHRpb25BdHRyIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywg
IlRlc3ROb25kZXRlcm1pbmlzdGljIiwgIm5vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25B
dHRyIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpz
dGF0ZSwgIlRlc3ROb25kZXRlcm1pbmlzdGljIiwgIm5vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNl
cHRpb25BdHRyIik7CisgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUs
ICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9u
QXR0ciIpOwogICAgIH0KICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICNpZiBFTkFCTEUoV0VC
X1JFUExBWSkKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0
ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIElucHV0Q3Vyc29yJiBjdXJzb3IgPSBnbG9i
YWxPYmplY3QtPmlucHV0Q3Vyc29yKCk7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0
IEF0b21pY1N0cmluZz4gYmluZGluZ05hbWUoIlRlc3ROb25kZXRlcm1pbmlzdGljLm5vbmRldGVy
bWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CiAgICAgaWYgKGN1cnNvci5pc0NhcHR1cmluZygpKSB7CiAgICAgICAgIFN0cmlu
ZyBtZW1vaXplZFJlc3VsdCA9IGNhc3RlZFRoaXMtPmltcGwoKS5ub25kZXRlcm1pbmlzdGljR2V0
dGVyRXhjZXB0aW9uQXR0cihlYyk7CiAgICAgICAgIGN1cnNvci5hcHBlbmRJbnB1dDxNZW1vaXpl
ZERPTVJlc3VsdDxTdHJpbmc+PihiaW5kaW5nTmFtZS5nZXQoKS5zdHJpbmcoKSwgbWVtb2l6ZWRS
ZXN1bHQsIGVjKTsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShl
eGVjLCBtZW1vaXplZFJlc3VsdCk7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7
CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIG1lbW9p
emVkUmVzdWx0KTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9CiAKQEAgLTMwNywzOCArMzA3
LDM4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlz
dGljR2V0dGVyRXhjZXB0aW9uQXR0cihFeGVjU3RhCiAgICAgICAgIFN0cmluZyBtZW1vaXplZFJl
c3VsdDsKICAgICAgICAgTWVtb2l6ZWRET01SZXN1bHRCYXNlKiBpbnB1dCA9IGN1cnNvci5mZXRj
aElucHV0PE1lbW9pemVkRE9NUmVzdWx0QmFzZT4oKTsKICAgICAgICAgaWYgKGlucHV0ICYmIGlu
cHV0LT5jb252ZXJ0VG88U3RyaW5nPihtZW1vaXplZFJlc3VsdCkpIHsKLSAgICAgICAgICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgbWVtb2l6ZWRSZXN1bHQpOwot
ICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGlucHV0LT5leGNlcHRpb25Db2RlKCkp
OworICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwg
bWVtb2l6ZWRSZXN1bHQpOworICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBpbnB1
dC0+ZXhjZXB0aW9uQ29kZSgpKTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT5pbXBsKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShl
eGVjLCBpbXBsLm5vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyKGVjKSk7Ci0gICAg
c2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5n
V2l0aENhY2hlKHN0YXRlLCBpbXBsLm5vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRy
KGVjKSk7CisgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOwogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVy
bWluaXN0aWNOb25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0cihFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5p
c3RpY1NldHRlckV4Y2VwdGlvbkF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RC
YXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVT
RURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE5v
bmRldGVybWluaXN0aWMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE5vbmRldGVy
bWluaXN0aWMqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3ROb25kZXRl
cm1pbmlzdGljUHJvdG90eXBlKj4oc2xvdEJhc2UpKQotICAgICAgICAgICAgcmV0dXJuIHJlcG9y
dERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqZXhlYywgIlRlc3ROb25kZXRlcm1pbmlzdGljIiwgIm5v
bmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyIik7Ci0gICAgICAgIHJldHVybiB0aHJv
d0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3ROb25kZXRlcm1pbmlzdGljIiwgIm5vbmRldGVy
bWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0
RGVwcmVjYXRlZEdldHRlckVycm9yKCpzdGF0ZSwgIlRlc3ROb25kZXRlcm1pbmlzdGljIiwgIm5v
bmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyIik7CisgICAgICAgIHJldHVybiB0aHJv
d0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25kZXRl
cm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0ciIpOwogICAgIH0KICNpZiBFTkFCTEUoV0VCX1JF
UExBWSkKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0ZS0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIElucHV0Q3Vyc29yJiBjdXJzb3IgPSBnbG9iYWxP
YmplY3QtPmlucHV0Q3Vyc29yKCk7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0
b21pY1N0cmluZz4gYmluZGluZ05hbWUoIlRlc3ROb25kZXRlcm1pbmlzdGljLm5vbmRldGVybWlu
aXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7CiAgICAgaWYgKGN1cnNvci5pc0NhcHR1cmluZygpKSB7CiAgICAgICAgIFN0cmluZyBt
ZW1vaXplZFJlc3VsdCA9IGNhc3RlZFRoaXMtPmltcGwoKS5ub25kZXRlcm1pbmlzdGljU2V0dGVy
RXhjZXB0aW9uQXR0cigpOwogICAgICAgICBjdXJzb3IuYXBwZW5kSW5wdXQ8TWVtb2l6ZWRET01S
ZXN1bHQ8U3RyaW5nPj4oYmluZGluZ05hbWUuZ2V0KCkuc3RyaW5nKCksIG1lbW9pemVkUmVzdWx0
LCAwKTsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBt
ZW1vaXplZFJlc3VsdCk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2Fj
aGUoc3RhdGUsIG1lbW9pemVkUmVzdWx0KTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOwogICAgIH0KIApAQCAtMzQ2LDEwNCArMzQ2LDEwNCBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0
dHIoRXhlY1N0YQogICAgICAgICBTdHJpbmcgbWVtb2l6ZWRSZXN1bHQ7CiAgICAgICAgIE1lbW9p
emVkRE9NUmVzdWx0QmFzZSogaW5wdXQgPSBjdXJzb3IuZmV0Y2hJbnB1dDxNZW1vaXplZERPTVJl
c3VsdEJhc2U+KCk7CiAgICAgICAgIGlmIChpbnB1dCAmJiBpbnB1dC0+Y29udmVydFRvPFN0cmlu
Zz4obWVtb2l6ZWRSZXN1bHQpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3Ry
aW5nV2l0aENhY2hlKGV4ZWMsIG1lbW9pemVkUmVzdWx0KTsKKyAgICAgICAgICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIG1lbW9pemVkUmVzdWx0KTsKICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICAgICAgfQogICAgIH0K
ICNlbmRpZgogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgSlNWYWx1
ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBpbXBsLm5vbmRldGVybWluaXN0aWNT
ZXR0ZXJFeGNlcHRpb25BdHRyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRo
Q2FjaGUoc3RhdGUsIGltcGwubm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIoKSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiAKLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiBiYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNPYmplY3QqIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
ICAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGUqPihiYXNlVmFsdWUpOwogICAg
IGlmICghZG9tT2JqZWN0KQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE5vbmRldGVybWluaXN0aWM6OmdldENv
bnN0cnVjdG9yKGV4ZWMtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYzo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCks
IGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAotdm9pZCBzZXRKU1Rlc3ROb25kZXRl
cm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRl
cm1pbmlzdGljV3JpdGVhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZU9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3ROb25kZXRlcm1pbmlz
dGljKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3ROb25kZXRlcm1pbmlzdGljKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1By
b3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKSkKLSAgICAgICAgICAgIHJlcG9y
dERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywgIlRlc3ROb25kZXRlcm1pbmlzdGljIiwgIm5v
bmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyIik7CisgICAgICAgICAgICByZXBvcnREZXByZWNh
dGVkU2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE5vbmRldGVybWluaXN0aWMiLCAibm9uZGV0ZXJt
aW5pc3RpY1dyaXRlYWJsZUF0dHIiKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhyb3dT
ZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25kZXRlcm1p
bmlzdGljV3JpdGVhYmxlQXR0ciIpOworICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3Io
KnN0YXRlLCAiVGVzdE5vbmRldGVybWluaXN0aWMiLCAibm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJs
ZUF0dHIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+aW1wbCgpOwotICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUo
c3RhdGUpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm47CiAgICAgaW1wbC5zZXROb25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0cihuYXRp
dmVWYWx1ZSk7CiB9CiAKIAotdm9pZCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJt
aW5pc3RpY0V4Y2VwdGlvbkF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Cit2b2lkIHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljRXhjZXB0aW9u
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJB
TShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiBjYXN0ZWRUaGlzID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3ROb25kZXRlcm1pbmlzdGljKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYg
KGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZSo+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJF
cnJvcigqZXhlYywgIlRlc3ROb25kZXRlcm1pbmlzdGljIiwgIm5vbmRldGVybWluaXN0aWNFeGNl
cHRpb25BdHRyIik7CisgICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKnN0
YXRlLCAiVGVzdE5vbmRldGVybWluaXN0aWMiLCAibm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0
dHIiKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKmV4
ZWMsICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0
ciIpOworICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE5vbmRl
dGVybWluaXN0aWMiLCAibm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIiKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAg
IFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsK
LSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIFN0cmluZyBuYXRp
dmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUpOworICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1w
bC5zZXROb25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0cihuYXRpdmVWYWx1ZSk7CiB9CiAKIAot
dm9pZCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2Vw
dGlvbkF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIHNldEpT
VGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNl
T2JqZWN0KTsKICAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3ROb25kZXRlcm1pbmlzdGljKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigq
ZXhlYywgIlRlc3ROb25kZXRlcm1pbmlzdGljIiwgIm5vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNl
cHRpb25BdHRyIik7CisgICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKnN0
YXRlLCAiVGVzdE5vbmRldGVybWluaXN0aWMiLCAibm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2Vw
dGlvbkF0dHIiKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJy
b3IoKmV4ZWMsICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25kZXRlcm1pbmlzdGljR2V0dGVy
RXhjZXB0aW9uQXR0ciIpOworICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRl
LCAiVGVzdE5vbmRldGVybWluaXN0aWMiLCAibm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2VwdGlv
bkF0dHIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+aW1wbCgpOwotICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUo
c3RhdGUpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm47CiAgICAgaW1wbC5zZXROb25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0
cihuYXRpdmVWYWx1ZSk7CiB9CiAKIAotdm9pZCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9u
ZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCit2b2lkIHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlz
dGljU2V0dGVyRXhjZXB0aW9uQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZU9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3ROb25kZXRlcm1pbmlz
dGljKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3ROb25kZXRlcm1pbmlzdGljKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY1By
b3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKSkKLSAgICAgICAgICAgIHJlcG9y
dERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywgIlRlc3ROb25kZXRlcm1pbmlzdGljIiwgIm5v
bmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyIik7CisgICAgICAgICAgICByZXBvcnRE
ZXByZWNhdGVkU2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE5vbmRldGVybWluaXN0aWMiLCAibm9u
ZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIiKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIs
ICJub25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0ciIpOworICAgICAgICAgICAgdGhy
b3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE5vbmRldGVybWluaXN0aWMiLCAibm9uZGV0
ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwotICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUp
OworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm47CiAgICAgaW1wbC5zZXROb25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0cihuYXRp
dmVWYWx1ZSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgc2V0RE9N
RXhjZXB0aW9uKHN0YXRlLCBlYyk7CiB9CiAKIApAQCAtNDUyLDE3ICs0NTIsMTcgQEAgSlNWYWx1
ZSBKU1Rlc3ROb25kZXRlcm1pbmlzdGljOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmoKICAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0Tm9u
ZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yPih2bSwganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
Z2xvYmFsT2JqZWN0KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
Tm9uZGV0ZXJtaW5pc3RpY1Byb3RvdHlwZUZ1bmN0aW9uTm9uZGV0ZXJtaW5pc3RpY1plcm9BcmdG
dW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGVGdW5jdGlvbk5vbmRldGVybWluaXN0aWNaZXJv
QXJnRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNW
YWx1ZSgpOwogICAgIEpTVGVzdE5vbmRldGVybWluaXN0aWMqIGNhc3RlZFRoaXMgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdE5vbmRldGVybWluaXN0aWMqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4
ZWMsICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25kZXRlcm1pbmlzdGljWmVyb0FyZ0Z1bmN0
aW9uIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE5v
bmRldGVybWluaXN0aWMiLCAibm9uZGV0ZXJtaW5pc3RpY1plcm9BcmdGdW5jdGlvbiIpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0Tm9uZGV0ZXJtaW5p
c3RpYzo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAg
IEpTVmFsdWUgcmVzdWx0OwogI2lmIEVOQUJMRShXRUJfUkVQTEFZKQotICAgIElucHV0Q3Vyc29y
JiBjdXJzb3IgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmlucHV0Q3Vyc29yKCk7Cisg
ICAgSW5wdXRDdXJzb3ImIGN1cnNvciA9IHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmlu
cHV0Q3Vyc29yKCk7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21pY1N0cmlu
Zz4gYmluZGluZ05hbWUoIlRlc3ROb25kZXRlcm1pbmlzdGljLm5vbmRldGVybWluaXN0aWNaZXJv
QXJnRnVuY3Rpb24iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICBp
ZiAoY3Vyc29yLmlzQ2FwdHVyaW5nKCkpIHsKICAgICAgICAgYm9vbCBtZW1vaXplZFJlc3VsdCA9
IGltcGwubm9uZGV0ZXJtaW5pc3RpY1plcm9BcmdGdW5jdGlvbigpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0
aWMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25k
ZXRlcm1pbmlzdGljLmgKaW5kZXggNzIxMjE5MGQ1ZjI3OGNlMTliZDQ1MjMyZmYzZmQ1MmUyZTEx
Zjk1Ny4uNjgxNmE1YTEzYzE3NzRmODgxMWZlNWM4ZjI1ZDQwYWY1NWNjYTg1MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVy
bWluaXN0aWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5oCkBAIC04MCw3ICs4MCw3IEBAIGlubGluZSBKU0M6Oldl
YWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYsIFRlc3ROb25kZXRl
cm1pbmlzdGljCiB9CiAKIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01H
bG9iYWxPYmplY3QqLCBUZXN0Tm9uZGV0ZXJtaW5pc3RpYyopOwotaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBUZXN0Tm9uZGV0ZXJtaW5pc3RpYyYgaW1wbCkgeyByZXR1cm4gdG9KUyhleGVjLCBnbG9i
YWxPYmplY3QsICZpbXBsKTsgfQoraW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE5vbmRldGVy
bWluaXN0aWMmIGltcGwpIHsgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgJmltcGwp
OyB9CiBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9N
R2xvYmFsT2JqZWN0KiwgVGVzdE5vbmRldGVybWluaXN0aWMqKTsKIAogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCmluZGV4
IDJlYTY4OTQzNDUwYzU3MTQ1YTFiZmQ4MGE0N2RkYzc1ODUwMTQ1N2QuLjc5Zjk1M2E2MDNiYmI2
MDM0YTIyNmU1YTRlNDI0MzA0NDlhMTczOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCkBAIC00NjIsMTkgKzQ2Miwx
OSBAQCBDT01QSUxFX0FTU0VSVCgweDFhYmMgPT0gVGVzdE9iajo6Q09OU1RfVkFMVUVfMTQsIFRl
c3RPYmpFbnVtQ09OU1RfVkFMVUVfMTRJc1dybwogQ09NUElMRV9BU1NFUlQoMTUgPT0gVGVzdE9i
ajo6Q09OU1RfSU1QTCwgVGVzdE9iakVudW1DT05TVF9JTVBMSXNXcm9uZ1VzZURvTm90Q2hlY2tD
b25zdGFudHMpOwogQ09NUElMRV9BU1NFUlQoMCA9PSBUZXN0T2JqOjpyZWFkb25seSwgVGVzdE9i
akVudW1yZWFkb25seUlzV3JvbmdVc2VEb05vdENoZWNrQ29uc3RhbnRzKTsKIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0
T2JqKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpT
VGVzdE9iakNvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOwotICAgIGlmIChVTkxJS0VMWShl
eGVjLT5hcmd1bWVudENvdW50KCkgPCAyKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgaWYgKCFleGVj
LT5hcmd1bWVudCgwKS5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11
c3RCZUZ1bmN0aW9uRXJyb3IoKmV4ZWMsIDAsICJ0ZXN0Q2FsbGJhY2siLCAiVGVzdE9iaiIsIG51
bGxwdHIpOwotICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2s+IHRlc3RDYWxsYmFjayA9IEpTVGVzdENh
bGxiYWNrOjpjcmVhdGUoYXNPYmplY3QoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpLCBjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7Ci0gICAgaWYgKCFleGVjLT5hcmd1bWVudCgxKS5pc0Z1
bmN0aW9uKCkpCi0gICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJv
cigqZXhlYywgMSwgInRlc3RDYWxsYmFja0Z1bmN0aW9uIiwgIlRlc3RPYmoiLCBudWxscHRyKTsK
LSAgICBSZWZQdHI8VGVzdENhbGxiYWNrRnVuY3Rpb24+IHRlc3RDYWxsYmFja0Z1bmN0aW9uID0g
SlNUZXN0Q2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKGFzT2JqZWN0KGV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KDEpKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpOworRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0T2JqKEV4
ZWNTdGF0ZSogc3RhdGUpCit7CisgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RP
YmpDb25zdHJ1Y3Rvcio+KHN0YXRlLT5jYWxsZWUoKSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAyKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAgICBpZiAoIXN0YXRl
LT5hcmd1bWVudCgwKS5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11
c3RCZUZ1bmN0aW9uRXJyb3IoKnN0YXRlLCAwLCAidGVzdENhbGxiYWNrIiwgIlRlc3RPYmoiLCBu
dWxscHRyKTsKKyAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiB0ZXN0Q2FsbGJhY2sgPSBKU1Rlc3RD
YWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSksIGNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKKyAgICBpZiAoIXN0YXRlLT5hcmd1bWVudCgxKS5p
c0Z1bmN0aW9uKCkpCisgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25F
cnJvcigqc3RhdGUsIDEsICJ0ZXN0Q2FsbGJhY2tGdW5jdGlvbiIsICJUZXN0T2JqIiwgbnVsbHB0
cik7CisgICAgUmVmUHRyPFRlc3RDYWxsYmFja0Z1bmN0aW9uPiB0ZXN0Q2FsbGJhY2tGdW5jdGlv
biA9IEpTVGVzdENhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZShhc09iamVjdChzdGF0ZS0+dW5jaGVj
a2VkQXJndW1lbnQoMSkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7CiAgICAgUmVmUHRy
PFRlc3RPYmo+IG9iamVjdCA9IFRlc3RPYmo6OmNyZWF0ZSh0ZXN0Q2FsbGJhY2ssIHRlc3RDYWxs
YmFja0Z1bmN0aW9uKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzT2JqZWN0KHRvSlMo
ZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIG9iamVjdC5nZXQoKSkpKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzT2JqZWN0KHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCBvYmplY3QuZ2V0KCkpKSk7CiB9CiAKIGNvbnN0IENsYXNzSW5mbyBKU1Rl
c3RPYmpDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdE9iamVjdENvbnN0cnVjdG9yIiwgJkJh
c2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RPYmpDb25zdHJ1Y3Rvcikg
fTsKQEAgLTcyNSwyNSArNzI1LDI1IEBAIEpTVGVzdE9iajo6fkpTVGVzdE9iaigpCiAgICAgcmVs
ZWFzZUltcGwoKTsKIH0KIAotYm9vbCBKU1Rlc3RPYmo6OmdldE93blByb3BlcnR5U2xvdChKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgSlNUZXN0T2JqOjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNUZXN0T2JqKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7Ci0gICAgaWYgKGdldFN0YXRpY1ZhbHVlU2xvdDxKU1Rlc3RPYmos
IEJhc2U+KGV4ZWMsIEpTVGVzdE9ialRhYmxlLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNs
b3QpKQorICAgIGlmIChnZXRTdGF0aWNWYWx1ZVNsb3Q8SlNUZXN0T2JqLCBCYXNlPihzdGF0ZSwg
SlNUZXN0T2JqVGFibGUsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUmVhZE9ubHlMb25nQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFz
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpSZWFkT25seUxvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBz
bG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAg
VU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAg
ICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAg
ICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0
T2JqIiwgInJlYWRPbmx5TG9uZ0F0dHIiKTsKLSAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlw
ZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJyZWFkT25seUxvbmdBdHRyIik7CisgICAgICAgICAg
ICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAi
cmVhZE9ubHlMb25nQXR0ciIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3Io
KnN0YXRlLCAiVGVzdE9iaiIsICJyZWFkT25seUxvbmdBdHRyIik7CiAgICAgfQogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJl
cihpbXBsLnJlYWRPbmx5TG9uZ0F0dHIoKSk7CkBAIC03NTEsNDMgKzc1MSw0MyBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seUxvbmdBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIHNsb3RCYXNlLCBFbgogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5
U3RyaW5nQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpS
ZWFkT25seVN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0oc2xv
dEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpz
RHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJhc2UpKQotICAgICAgICAgICAg
cmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAicmVh
ZE9ubHlTdHJpbmdBdHRyIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigq
ZXhlYywgIlRlc3RPYmoiLCAicmVhZE9ubHlTdHJpbmdBdHRyIik7CisgICAgICAgICAgICByZXR1
cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVhZE9u
bHlTdHJpbmdBdHRyIik7CisgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3Rh
dGUsICJUZXN0T2JqIiwgInJlYWRPbmx5U3RyaW5nQXR0ciIpOwogICAgIH0KICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdX
aXRoQ2FjaGUoZXhlYywgaW1wbC5yZWFkT25seVN0cmluZ0F0dHIoKSk7CisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5yZWFkT25seVN0cmluZ0F0dHIo
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiAKLUVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5VGVzdE9iakF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQor
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlUZXN0T2JqQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNW
YWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RP
YmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUq
PihzbG90QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVy
cm9yKCpleGVjLCAiVGVzdE9iaiIsICJyZWFkT25seVRlc3RPYmpBdHRyIik7Ci0gICAgICAgIHJl
dHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAicmVhZE9ubHlUZXN0
T2JqQXR0ciIpOworICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJv
cigqc3RhdGUsICJUZXN0T2JqIiwgInJlYWRPbmx5VGVzdE9iakF0dHIiKTsKKyAgICAgICAgcmV0
dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVhZE9ubHlUZXN0
T2JqQXR0ciIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwot
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSwgV1RGOjpnZXRQdHIoaW1wbC5yZWFkT25seVRlc3RPYmpBdHRyKCkpKTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6Omdl
dFB0cihpbXBsLnJlYWRPbmx5VGVzdE9iakF0dHIoKSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3Rv
clN0YXRpY1JlYWRPbmx5TG9uZ0F0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJh
c2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNSZWFkT25seUxvbmdBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhp
c1ZhbHVlKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKFRlc3RPYmo6OnN0YXRpY1Jl
YWRPbmx5TG9uZ0F0dHIoKSk7CkBAIC03OTUsMjkgKzc5NSwyOSBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1JlYWRPbmx5TG9uZ0F0dHIoRXhlY1N0YXRlKiBleGVj
LCBKU09iagogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGlj
U3RyaW5nQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpD
b25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNs
b3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBV
TlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURf
UEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgVGVzdE9iajo6c3RhdGljU3RyaW5n
QXR0cigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBU
ZXN0T2JqOjpzdGF0aWNTdHJpbmdBdHRyKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclRlc3RT
dWJPYmooRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3Ry
dWN0b3JUZXN0U3ViT2JqKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFN
KGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RC
YXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBhdXRvKiBjYXN0ZWRUaGlz
ID0ganNDYXN0PEpTVGVzdE9iaio+KHNsb3RCYXNlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTVGVzdFN1Yk9iajo6Z2V0Q29uc3RydWN0b3IoZXhlYy0+dm0oKSwgY2FzdGVkVGhpcy0+
Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFN1Yk9i
ajo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
KSk7CiB9CiAKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNl
dHRpbmdDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1Zh
bHVlKTsKICAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KHNsb3RCYXNl
KTsKQEAgLTgyNiwzNyArODI2LDM3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialRlc3RTdWJP
YmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKCiAgICAgU2V0
dGluZ3MmIHNldHRpbmdzID0gY2FzdGVkVGhpcy0+aW1wbCgpLmZyYW1lKCktPnNldHRpbmdzKCk7
CiAgICAgaWYgKCFzZXR0aW5ncy50ZXN0U2V0dGluZ0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTVGVzdFN1Yk9iajo6Z2V0Q29uc3RydWN0b3IoZXhlYy0+dm0oKSwgY2FzdGVkVGhpcy0+
Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFN1Yk9i
ajo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
KSk7CiB9CiAKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqRW51bUF0dHIoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqRW51bUF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFs
dWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2Jq
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4o
c2xvdEJhc2UpKQotICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJv
cigqZXhlYywgIlRlc3RPYmoiLCAiZW51bUF0dHIiKTsKLSAgICAgICAgcmV0dXJuIHRocm93R2V0
dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJlbnVtQXR0ciIpOworICAgICAgICAgICAg
cmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImVu
dW1BdHRyIik7CisgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJU
ZXN0T2JqIiwgImVudW1BdHRyIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT5pbXBsKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBp
bXBsLmVudW1BdHRyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUo
c3RhdGUsIGltcGwuZW51bUF0dHIoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOwogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakJ5dGVBdHRyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakJ5dGVBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1Zh
bHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9i
aio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+
KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJy
b3IoKmV4ZWMsICJUZXN0T2JqIiwgImJ5dGVBdHRyIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dl
dHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAiYnl0ZUF0dHIiKTsKKyAgICAgICAgICAg
IHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJi
eXRlQXR0ciIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAi
VGVzdE9iaiIsICJieXRlQXR0ciIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+aW1wbCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5ieXRlQXR0cigp
KTsKQEAgLTg2NCwxNiArODY0LDE2IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakJ5dGVBdHRy
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWCiB9CiAKIAot
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqT2N0ZXRBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0Vu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iak9jdGV0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVj
dCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewot
ICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVO
VVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewog
ICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkp
Ci0gICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAi
VGVzdE9iaiIsICJvY3RldEF0dHIiKTsKLSAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVy
cm9yKCpleGVjLCAiVGVzdE9iaiIsICJvY3RldEF0dHIiKTsKKyAgICAgICAgICAgIHJldHVybiBy
ZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJvY3RldEF0dHIi
KTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoi
LCAib2N0ZXRBdHRyIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBs
KCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLm9jdGV0QXR0cigpKTsKQEAg
LTg4MSwxNiArODgxLDE2IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak9jdGV0QXR0cihFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTCiB9CiAKIAotRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqU2hvcnRBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNs
b3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xv
dEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVO
VVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9Q
QVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAg
ICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAg
ICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdE9i
aiIsICJzaG9ydEF0dHIiKTsKLSAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpl
eGVjLCAiVGVzdE9iaiIsICJzaG9ydEF0dHIiKTsKKyAgICAgICAgICAgIHJldHVybiByZXBvcnRE
ZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJzaG9ydEF0dHIiKTsKKyAg
ICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAic2hv
cnRBdHRyIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLnNob3J0QXR0cigpKTsKQEAgLTg5OCwx
NiArODk4LDE2IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialNob3J0QXR0cihFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTCiB9CiAKIAotRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
c2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNP
YmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwog
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJh
c2UpKQotICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqZXhl
YywgIlRlc3RPYmoiLCAidW5zaWduZWRTaG9ydEF0dHIiKTsKLSAgICAgICAgcmV0dXJuIHRocm93
R2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJ1bnNpZ25lZFNob3J0QXR0ciIpOwor
ICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqc3RhdGUsICJU
ZXN0T2JqIiwgInVuc2lnbmVkU2hvcnRBdHRyIik7CisgICAgICAgIHJldHVybiB0aHJvd0dldHRl
clR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInVuc2lnbmVkU2hvcnRBdHRyIik7CiAgICAg
fQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgSlNWYWx1ZSByZXN1
bHQgPSBqc051bWJlcihpbXBsLnVuc2lnbmVkU2hvcnRBdHRyKCkpOwpAQCAtOTE1LDE2ICs5MTUs
MTYgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHIoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEUKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpMb25nQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVj
KTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWlj
Q2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4g
cmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJsb25nQXR0ciIp
OwotICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwg
ImxvbmdBdHRyIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVy
cm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibG9uZ0F0dHIiKTsKKyAgICAgICAgcmV0dXJuIHRocm93
R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibG9uZ0F0dHIiKTsKICAgICB9CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzTnVtYmVyKGltcGwubG9uZ0F0dHIoKSk7CkBAIC05MzIsMTYgKzkzMiwxNiBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpMb25nQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90
QmFzZSwgRW5jb2RlZEpTVgogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakxvbmdMb25n
QXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpMb25nTG9u
Z0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAg
IFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8
SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJhc2UpKQotICAgICAgICAgICAgcmV0dXJuIHJlcG9y
dERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAibG9uZ0xvbmdBdHRyIik7
Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAi
bG9uZ0xvbmdBdHRyIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRl
ckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibG9uZ0xvbmdBdHRyIik7CisgICAgICAgIHJldHVy
biB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImxvbmdMb25nQXR0ciIp
OwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5sb25nTG9uZ0F0dHIoKSk7CkBAIC05NDksMTYgKzk0
OSwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZQogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNs
b3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
T2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsK
ICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KHNsb3RC
YXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4
ZWMsICJUZXN0T2JqIiwgInVuc2lnbmVkTG9uZ0xvbmdBdHRyIik7Ci0gICAgICAgIHJldHVybiB0
aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAidW5zaWduZWRMb25nTG9uZ0F0
dHIiKTsKKyAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0
YXRlLCAiVGVzdE9iaiIsICJ1bnNpZ25lZExvbmdMb25nQXR0ciIpOworICAgICAgICByZXR1cm4g
dGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ1bnNpZ25lZExvbmdMb25n
QXR0ciIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC51bnNpZ25lZExvbmdMb25nQXR0cigpKTsK
QEAgLTk2Niw2NyArOTY2LDY3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkTG9u
Z0xvbmdBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlCiB9CiAKIAotRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0
KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0g
ICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAg
ICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkK
LSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJU
ZXN0T2JqIiwgInN0cmluZ0F0dHIiKTsKLSAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVy
cm9yKCpleGVjLCAiVGVzdE9iaiIsICJzdHJpbmdBdHRyIik7CisgICAgICAgICAgICByZXR1cm4g
cmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAic3RyaW5nQXR0
ciIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9i
aiIsICJzdHJpbmdBdHRyIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5p
bXBsKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBpbXBs
LnN0cmluZ0F0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShz
dGF0ZSwgaW1wbC5zdHJpbmdBdHRyKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0T2JqQXR0cihFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0T2JqQXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90
b3R5cGUqPihzbG90QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdl
dHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJ0ZXN0T2JqQXR0ciIpOwotICAgICAgICByZXR1
cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInRlc3RPYmpBdHRyIik7
CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpzdGF0ZSwg
IlRlc3RPYmoiLCAidGVzdE9iakF0dHIiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlw
ZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAidGVzdE9iakF0dHIiKTsKICAgICB9CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMo
ZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwudGVzdE9i
akF0dHIoKSkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+
Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwudGVzdE9iakF0dHIoKSkpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpYTUxPYmpBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialhNTE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0o
ZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJh
c2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVk
VGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJhc2UpKQotICAgICAgICAgICAgcmV0
dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAiWE1MT2Jq
QXR0ciIpOwotICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0
T2JqIiwgIlhNTE9iakF0dHIiKTsKKyAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVk
R2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJYTUxPYmpBdHRyIik7CisgICAgICAgIHJl
dHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIlhNTE9iakF0dHIi
KTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6
Z2V0UHRyKGltcGwueG1sT2JqQXR0cigpKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0
YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC54bWxPYmpB
dHRyKCkpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIAotRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqQ3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNs
b3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakNyZWF0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJh
c2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNF
RF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJB
TShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBp
ZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAgICAg
ICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIs
ICJjcmVhdGUiKTsKLSAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpleGVjLCAi
VGVzdE9iaiIsICJjcmVhdGUiKTsKKyAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVk
R2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJjcmVhdGUiKTsKKyAgICAgICAgcmV0dXJu
IHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiY3JlYXRlIik7CiAgICAg
fQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgSlNWYWx1ZSByZXN1
bHQgPSBqc0Jvb2xlYW4oaW1wbC5pc0NyZWF0ZSgpKTsKQEAgLTEwMzQsMzMgKzEwMzQsMzMgQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IHNsb3RCYXNlLCBFbmNvZGVkSlNWYWwKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpS
ZWZsZWN0ZWRTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNs
b3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBV
TlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURf
UEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAg
ICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJhc2UpKQotICAg
ICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RP
YmoiLCAicmVmbGVjdGVkU3RyaW5nQXR0ciIpOwotICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJU
eXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInJlZmxlY3RlZFN0cmluZ0F0dHIiKTsKKyAgICAg
ICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9i
aiIsICJyZWZsZWN0ZWRTdHJpbmdBdHRyIik7CisgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5
cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZFN0cmluZ0F0dHIiKTsKICAgICB9
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGltcGwuZmFzdEdldEF0dHJpYnV0ZShXZWJDb3Jl
OjpIVE1MTmFtZXM6OnJlZmxlY3RlZHN0cmluZ2F0dHJBdHRyKSk7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5mYXN0R2V0QXR0cmlidXRlKFdlYkNv
cmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0ckF0dHIpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVm
bGVjdGVkSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCog
c2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAg
IFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAg
ICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpCi0g
ICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVz
dE9iaiIsICJyZWZsZWN0ZWRJbnRlZ3JhbEF0dHIiKTsKLSAgICAgICAgcmV0dXJuIHRocm93R2V0
dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRJbnRlZ3JhbEF0dHIiKTsK
KyAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAi
VGVzdE9iaiIsICJyZWZsZWN0ZWRJbnRlZ3JhbEF0dHIiKTsKKyAgICAgICAgcmV0dXJuIHRocm93
R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVmbGVjdGVkSW50ZWdyYWxBdHRy
Iik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgSlNW
YWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6
OkhUTUxOYW1lczo6cmVmbGVjdGVkaW50ZWdyYWxhdHRyQXR0cikpOwpAQCAtMTA2OCwxNiArMTA2
OCwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHIoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhcwogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
K0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURf
UEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9i
alByb3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNh
dGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInJlZmxlY3RlZFVuc2lnbmVkSW50ZWdy
YWxBdHRyIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRl
c3RPYmoiLCAicmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIiKTsKKyAgICAgICAgICAgIHJl
dHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZWZs
ZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ciIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJU
eXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0
ciIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoc3RkOjptYXgoMCwgaW1wbC5nZXRJbnRlZ3JhbEF0dHJp
YnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVuc2lnbmVkaW50ZWdyYWxhdHRyQXR0
cikpKTsKQEAgLTEwODUsMTYgKzEwODUsMTYgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVm
bGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCoKIH0K
IAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0cihFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVw
cmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRCb29sZWFuQXR0
ciIpOwotICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2Jq
IiwgInJlZmxlY3RlZEJvb2xlYW5BdHRyIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVw
cmVjYXRlZEdldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVmbGVjdGVkQm9vbGVhbkF0
dHIiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RP
YmoiLCAicmVmbGVjdGVkQm9vbGVhbkF0dHIiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPmltcGwoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9vbGVhbihpbXBsLmZh
c3RIYXNBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0
dHIpKTsKQEAgLTExMDIsNTAgKzExMDIsNTAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVm
bGVjdGVkQm9vbGVhbkF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UKIH0K
IAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVSTEF0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJB
TSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8
SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJv
dG90eXBlKj4oc2xvdEJhc2UpKQotICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRH
ZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAicmVmbGVjdGVkVVJMQXR0ciIpOwotICAgICAg
ICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInJlZmxlY3Rl
ZFVSTEF0dHIiKTsKKyAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJy
b3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRVUkxBdHRyIik7CisgICAgICAgIHJldHVy
biB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZFVSTEF0
dHIiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGltcGwuZ2V0VVJMQXR0cmli
dXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXJsYXR0ckF0dHIpKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmdldFVSTEF0dHJpYnV0
ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVybGF0dHJBdHRyKSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2Us
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCog
c2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAg
IFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAg
ICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpCi0g
ICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVz
dE9iaiIsICJyZWZsZWN0ZWRTdHJpbmdBdHRyIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRl
clR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAicmVmbGVjdGVkU3RyaW5nQXR0ciIpOworICAg
ICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0
T2JqIiwgInJlZmxlY3RlZFN0cmluZ0F0dHIiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVy
VHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVmbGVjdGVkU3RyaW5nQXR0ciIpOwogICAg
IH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIEpTVmFsdWUgcmVz
dWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgaW1wbC5mYXN0R2V0QXR0cmlidXRlKFdlYkNv
cmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0cmluZ0F0dHJBdHRyKSk7CisgICAgSlNWYWx1
ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5mYXN0R2V0QXR0cmlidXRl
KFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0cmluZ0F0dHJBdHRyKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJB
TSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8
SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJv
dG90eXBlKj4oc2xvdEJhc2UpKQotICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRH
ZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAicmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRy
Iik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoi
LCAicmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyIik7CisgICAgICAgICAgICByZXR1cm4gcmVw
b3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVmbGVjdGVkQ3Vz
dG9tSW50ZWdyYWxBdHRyIik7CisgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigq
c3RhdGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0ciIpOwogICAgIH0K
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNOdW1iZXIoaW1wbC5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6
OmN1c3RvbUNvbnRlbnRJbnRlZ3JhbEF0dHJBdHRyKSk7CkBAIC0xMTUzLDE2ICsxMTUzLDE2IEBA
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0cihFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzCiB9CiAKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xv
dEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFs
dWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2Jq
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4o
c2xvdEJhc2UpKQotICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJv
cigqZXhlYywgIlRlc3RPYmoiLCAicmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHIiKTsKLSAgICAg
ICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJyZWZsZWN0
ZWRDdXN0b21Cb29sZWFuQXR0ciIpOworICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0
ZWRHZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZEN1c3RvbUJvb2xlYW5B
dHRyIik7CisgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0
T2JqIiwgInJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyIik7CiAgICAgfQogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4o
aW1wbC5mYXN0SGFzQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEJv
b2xlYW5BdHRyQXR0cikpOwpAQCAtMTE3MCw2OSArMTE3MCw2OSBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiBzbAogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVS
TEF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVj
dGVkQ3VzdG9tVVJMQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJB
TShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90
QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAgICAgICAgICBy
ZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJyZWZs
ZWN0ZWRDdXN0b21VUkxBdHRyIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJv
cigqZXhlYywgIlRlc3RPYmoiLCAicmVmbGVjdGVkQ3VzdG9tVVJMQXR0ciIpOworICAgICAgICAg
ICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwg
InJlZmxlY3RlZEN1c3RvbVVSTEF0dHIiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlw
ZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVmbGVjdGVkQ3VzdG9tVVJMQXR0ciIpOwogICAg
IH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIEpTVmFsdWUgcmVz
dWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgaW1wbC5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29y
ZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50VVJMQXR0ckF0dHIpKTsKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmdldFVSTEF0dHJpYnV0ZShXZWJD
b3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRVUkxBdHRyQXR0cikpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpU
eXBlZEFycmF5QXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpUeXBlZEFycmF5QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJB
TShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90
QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAgICAgICAgICBy
ZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJ0eXBl
ZEFycmF5QXR0ciIpOwotICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMs
ICJUZXN0T2JqIiwgInR5cGVkQXJyYXlBdHRyIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0
RGVwcmVjYXRlZEdldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAidHlwZWRBcnJheUF0dHIi
KTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoi
LCAidHlwZWRBcnJheUF0dHIiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PmltcGwoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwudHlwZWRBcnJheUF0dHIoKSkpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdU
Rjo6Z2V0UHRyKGltcGwudHlwZWRBcnJheUF0dHIoKSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aEdl
dHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xv
dEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVO
VVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9Q
QVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAg
ICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAg
ICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdE9i
aiIsICJhdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOwotICAgICAgICByZXR1cm4gdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgImF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uIik7
CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpzdGF0ZSwg
IlRlc3RPYmoiLCAiYXR0cldpdGhHZXR0ZXJFeGNlcHRpb24iKTsKKyAgICAgICAgcmV0dXJuIHRo
cm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiYXR0cldpdGhHZXR0ZXJFeGNl
cHRpb24iKTsKICAgICB9CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGlt
cGwuYXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oZWMpKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhl
YywgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRy
V2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVj
dCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewot
ICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVO
VVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewog
ICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkp
Ci0gICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAi
VGVzdE9iaiIsICJhdHRyV2l0aFNldHRlckV4Y2VwdGlvbiIpOwotICAgICAgICByZXR1cm4gdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgImF0dHJXaXRoU2V0dGVyRXhjZXB0
aW9uIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpz
dGF0ZSwgIlRlc3RPYmoiLCAiYXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iKTsKKyAgICAgICAgcmV0
dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiYXR0cldpdGhTZXR0
ZXJFeGNlcHRpb24iKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwo
KTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuYXR0cldpdGhTZXR0ZXJFeGNl
cHRpb24oKSk7CkBAIC0xMjQwLDI3MCArMTI0MCwyNzAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xv
dEIKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aEdldHRlckV4
Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJp
bmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xv
dEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVO
VVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9Q
QVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAg
ICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAg
ICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdE9i
aiIsICJzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOwotICAgICAgICByZXR1cm4gdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInN0cmluZ0F0dHJXaXRoR2V0dGVy
RXhjZXB0aW9uIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVy
cm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAic3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24iKTsK
KyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAi
c3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24iKTsKICAgICB9CiAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGltcGwuc3RyaW5nQXR0cldpdGhH
ZXR0ZXJFeGNlcHRpb24oZWMpKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuc3RyaW5nQXR0
cldpdGhHZXR0ZXJFeGNlcHRpb24oZWMpKTsKKyAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVj
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIAotRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNl
cHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAg
IFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8
SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJhc2UpKQotICAgICAgICAgICAgcmV0dXJuIHJlcG9y
dERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAic3RyaW5nQXR0cldpdGhT
ZXR0ZXJFeGNlcHRpb24iKTsKLSAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpl
eGVjLCAiVGVzdE9iaiIsICJzdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbiIpOworICAgICAg
ICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2Jq
IiwgInN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uIik7CisgICAgICAgIHJldHVybiB0aHJv
d0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInN0cmluZ0F0dHJXaXRoU2V0dGVy
RXhjZXB0aW9uIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBpbXBsLnN0cmlu
Z0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJp
bmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuc3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiAKLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialN0cmljdFR5cGVDaGVja2luZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpY3RUeXBlQ2hlY2tpbmdBdHRyaWJ1dGUo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNF
RF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqUHJvdG90eXBlKj4oc2xvdEJhc2UpKQotICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJl
Y2F0ZWRHZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAic3RyaWN0VHlwZUNoZWNraW5nQXR0
cmlidXRlIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRl
c3RPYmoiLCAic3RyaWN0VHlwZUNoZWNraW5nQXR0cmlidXRlIik7CisgICAgICAgICAgICByZXR1
cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAic3RyaWN0
VHlwZUNoZWNraW5nQXR0cmlidXRlIik7CisgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVF
cnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInN0cmljdFR5cGVDaGVja2luZ0F0dHJpYnV0ZSIpOwog
ICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIEpTVmFsdWUg
cmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQ
dHIoaW1wbC5zdHJpY3RUeXBlQ2hlY2tpbmdBdHRyaWJ1dGUoKSkpOworICAgIEpTVmFsdWUgcmVz
dWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRy
KGltcGwuc3RyaWN0VHlwZUNoZWNraW5nQXR0cmlidXRlKCkpKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ3VzdG9t
QXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDdXN0b21B
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBV
TlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpT
VGVzdE9iaio+KHNsb3RCYXNlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRo
aXMtPmN1c3RvbUF0dHIoZXhlYykpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVk
VGhpcy0+Y3VzdG9tQXR0cihzdGF0ZSkpOwogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
ak9uZm9vKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak9uZm9v
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVT
RURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVz
dE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXBy
ZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm9uZm9vIik7Ci0gICAgICAgIHJl
dHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAib25mb28iKTsKKyAg
ICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVz
dE9iaiIsICJvbmZvbyIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0
YXRlLCAiVGVzdE9iaiIsICJvbmZvbyIpOwogICAgIH0KLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGV2
ZW50SGFuZGxlckF0dHJpYnV0ZShjYXN0ZWRUaGlzLT5pbXBsKCksIGV2ZW50TmFtZXMoKS5mb29F
dmVudCkpOwogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0
dHJpYnV0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRo
U2NyaXB0U3RhdGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURf
UEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0o
c2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYg
KGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJhc2UpKQotICAgICAgICAg
ICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAi
d2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5
cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAid2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlIik7Cisg
ICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpzdGF0ZSwgIlRl
c3RPYmoiLCAid2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlIik7CisgICAgICAgIHJldHVybiB0aHJv
d0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRTdGF0ZUF0dHJp
YnV0ZSIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC53aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUo
ZXhlYykpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC53aXRoU2NyaXB0U3Rh
dGVBdHRyaWJ1dGUoKnN0YXRlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OwogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNh
bGxXaXRoQXR0cmlidXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1Zh
bHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9i
aio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+
KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJy
b3IoKmV4ZWMsICJUZXN0T2JqIiwgIndpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmli
dXRlIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RP
YmoiLCAid2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUiKTsKKyAgICAgICAg
ICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIs
ICJ3aXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZSIpOworICAgICAgICByZXR1
cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoQ2FsbFdpdGhB
bmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZSIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+aW1wbCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC53aXRo
Q2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZShleGVjKSk7CisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc051bWJlcihpbXBsLndpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmli
dXRlKCpzdGF0ZSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAog
Ci1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJp
YnV0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCog
c2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAg
IFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAg
ICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpCi0g
ICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVz
dE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSIpOwotICAgICAgICBy
ZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QXR0cmlidXRlIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVw
cmVjYXRlZEdldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBdHRyaWJ1dGUiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9y
KCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUi
KTsKICAgICB9Ci0gICAgYXV0byogc2NyaXB0Q29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKKyAgICBhdXRvKiBzY3JpcHRDb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKICAgICBpZiAoIXNjcmlwdENvbnRleHQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsK
LSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCksIFdURjo6Z2V0UHRyKGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUo
c2NyaXB0Q29udGV4dCkpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLndpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXh0QXR0cmlidXRlKHNjcmlwdENvbnRleHQpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOwogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3Jp
cHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFz
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFs
dWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2Jq
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4o
c2xvdEJhc2UpKQotICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJv
cigqZXhlYywgIlRlc3RPYmoiLCAid2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzIik7Ci0g
ICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAid2l0
aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0
RGVwcmVjYXRlZEdldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlwdFN0YXRl
QXR0cmlidXRlUmFpc2VzIik7CisgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigq
c3RhdGUsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyIpOwogICAg
IH0KICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+aW1wbCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC53aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVS
YWlzZXMoZXhlYywgZWMpKSk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBK
U1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBX
VEY6OmdldFB0cihpbXBsLndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcygqc3RhdGUsIGVj
KSkpOworICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0
ZVJhaXNlcyhFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsK
KyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2Fz
dDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gcmVw
b3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyIpOwotICAgICAgICByZXR1cm4gdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QXR0cmlidXRlUmFpc2VzIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdl
dHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
dHRyaWJ1dGVSYWlzZXMiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlz
ZXMiKTsKICAgICB9CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgYXV0byogc2NyaXB0
Q29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBhdXRvKiBzY3JpcHRDb250
ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIXNjcmlwdENvbnRleHQp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMo
ZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwud2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMoc2NyaXB0Q29udGV4dCwgZWMpKSk7
Ci0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLndp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKHNjcmlwdENvbnRleHQsIGVj
KSkpOworICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RC
YXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVT
RURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAg
aWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJhc2UpKQotICAgICAg
ICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoi
LCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZSIpOwot
ICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIndp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUiKTsKKyAgICAg
ICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9i
aiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlIik7
CisgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwg
IndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUiKTsKICAg
ICB9Ci0gICAgYXV0byogc2NyaXB0Q29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsK
KyAgICBhdXRvKiBzY3JpcHRDb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3Rh
dGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAg
ICBpZiAoIXNjcmlwdENvbnRleHQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdU
Rjo6Z2V0UHRyKGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0
dHJpYnV0ZShleGVjLCBzY3JpcHRDb250ZXh0KSkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9K
UyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwud2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZSgqc3RhdGUsIHNj
cmlwdENvbnRleHQpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQog
CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5k
U2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xv
dEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0
dHJpYnV0ZVJhaXNlcyhFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShl
eGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFz
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5h
bWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAgICAgICAgICByZXR1
cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJ3aXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzIik7Ci0gICAg
ICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAid2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyIpOworICAg
ICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0
T2JqIiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVS
YWlzZXMiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRl
c3RPYmoiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0
ZVJhaXNlcyIpOwogICAgIH0KICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBhdXRvKiBz
Y3JpcHRDb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGF1dG8qIHNjcmlw
dENvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghc2NyaXB0Q29u
dGV4dCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC53
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKGV4
ZWMsIHNjcmlwdENvbnRleHQsIGVjKSkpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7
CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgV1RGOjpnZXRQdHIoaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlw
dFN0YXRlQXR0cmlidXRlUmFpc2VzKCpzdGF0ZSwgc2NyaXB0Q29udGV4dCwgZWMpKSk7CisgICAg
c2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOwogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2Jq
ZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7
CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KHNsb3RCYXNl
KSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMs
ICJUZXN0T2JqIiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRo
U3BhY2VzQXR0cmlidXRlIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigq
ZXhlYywgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0
ZVdpdGhTcGFjZXNBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNh
dGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZSIpOworICAgICAgICByZXR1cm4g
dGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZSIpOwogICAgIH0KLSAg
ICBhdXRvKiBzY3JpcHRDb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGF1
dG8qIHNjcmlwdENvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICgh
c2NyaXB0Q29udGV4dCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIEpTVmFsdWUg
cmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQ
dHIoaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNl
c0F0dHJpYnV0ZShleGVjLCBzY3JpcHRDb250ZXh0KSkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwu
d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1
dGUoKnN0YXRlLCBzY3JpcHRDb250ZXh0KSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1l
bnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RC
YXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nh
c3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2Jq
UHJvdG90eXBlKj4oc2xvdEJhc2UpKQotICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0
ZWRHZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEFyZ3VtZW50c0FuZENh
bGxTdGFja0F0dHJpYnV0ZSIpOwotICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3Io
KmV4ZWMsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1
dGUiKTsKKyAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0
YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRl
Iik7CisgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2Jq
IiwgIndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUiKTsKICAgICB9CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9
IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwu
d2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZSgpKSk7CisgICAgSlNWYWx1
ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpn
ZXRQdHIoaW1wbC53aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlKCkpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIAogI2lmIEVOQUJMRShD
b25kaXRpb24xKQotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMShFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIx
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVT
RURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVz
dE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXBy
ZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgImNvbmRpdGlvbmFsQXR0cjEiKTsK
LSAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJj
b25kaXRpb25hbEF0dHIxIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdl
dHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiY29uZGl0aW9uYWxBdHRyMSIpOworICAgICAg
ICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJjb25kaXRp
b25hbEF0dHIxIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7
CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmNvbmRpdGlvbmFsQXR0cjEoKSk7
CkBAIC0xNTEzLDE2ICsxNTEzLDE2IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlv
bmFsQXR0cjEoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuCiAjZW5kaWYK
IAogI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKLUVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMihFeGVjU3RhdGUqIHN0YXRlLCBK
U09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7
CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90
QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpl
eGVjLCAiVGVzdE9iaiIsICJjb25kaXRpb25hbEF0dHIyIik7Ci0gICAgICAgIHJldHVybiB0aHJv
d0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAiY29uZGl0aW9uYWxBdHRyMiIpOwor
ICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqc3RhdGUsICJU
ZXN0T2JqIiwgImNvbmRpdGlvbmFsQXR0cjIiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVy
VHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiY29uZGl0aW9uYWxBdHRyMiIpOwogICAgIH0K
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNOdW1iZXIoaW1wbC5jb25kaXRpb25hbEF0dHIyKCkpOwpAQCAtMTUzMiwxNiArMTUzMiwx
NiBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbgogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0
aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25k
aXRpb25hbEF0dHIzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
akNvbmRpdGlvbmFsQXR0cjMoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0oc2xv
dEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpz
RHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJhc2UpKQotICAgICAgICAgICAg
cmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAiY29u
ZGl0aW9uYWxBdHRyMyIpOwotICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4
ZWMsICJUZXN0T2JqIiwgImNvbmRpdGlvbmFsQXR0cjMiKTsKKyAgICAgICAgICAgIHJldHVybiBy
ZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJjb25kaXRpb25h
bEF0dHIzIik7CisgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJU
ZXN0T2JqIiwgImNvbmRpdGlvbmFsQXR0cjMiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPmltcGwoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuY29u
ZGl0aW9uYWxBdHRyMygpKTsKQEAgLTE1NTEsOTEgKzE1NTEsOTEgQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90
QmFzZSwgRW4KICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpCi1FbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURf
UEFSQU0odGhpc1ZhbHVlKTsKICAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9i
aio+KHNsb3RCYXNlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE9iamVjdEE6
OmdldENvbnN0cnVjdG9yKGV4ZWMtPnZtKCksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RPYmplY3RBOjpnZXRDb25zdHJ1Y3Rv
cihzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAogI2VuZGlm
CiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCi1FbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBV
TlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpT
VGVzdE9iaio+KHNsb3RCYXNlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE9i
amVjdEI6OmdldENvbnN0cnVjdG9yKGV4ZWMtPnZtKCksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RPYmplY3RCOjpnZXRDb25z
dHJ1Y3RvcihzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAog
I2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi1F
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3IoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMp
OworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganND
YXN0PEpTVGVzdE9iaio+KHNsb3RCYXNlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
VGVzdE9iamVjdEM6OmdldENvbnN0cnVjdG9yKGV4ZWMtPnZtKCksIGNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RPYmplY3RDOjpn
ZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpKTsK
IH0KIAogI2VuZGlmCiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTEo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmli
dXRlMShFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxK
U1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gcmVwb3J0
RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJjYWNoZWRBdHRyaWJ1dGUx
Iik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoi
LCAiY2FjaGVkQXR0cmlidXRlMSIpOworICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0
ZWRHZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImNhY2hlZEF0dHJpYnV0ZTEiKTsKKyAg
ICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiY2Fj
aGVkQXR0cmlidXRlMSIpOwogICAgIH0KICAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IGNh
c3RlZFRoaXMtPm1fY2FjaGVkQXR0cmlidXRlMS5nZXQoKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShjYWNoZWRWYWx1ZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmlt
cGwoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IChpbXBsLmNhY2hlZEF0dHJpYnV0ZTEoKS5oYXNO
b1ZhbHVlKCkgPyBqc051bGwoKSA6IGltcGwuY2FjaGVkQXR0cmlidXRlMSgpLmpzVmFsdWUoKSk7
Ci0gICAgY2FzdGVkVGhpcy0+bV9jYWNoZWRBdHRyaWJ1dGUxLnNldChleGVjLT52bSgpLCBjYXN0
ZWRUaGlzLCByZXN1bHQpOworICAgIGNhc3RlZFRoaXMtPm1fY2FjaGVkQXR0cmlidXRlMS5zZXQo
c3RhdGUtPnZtKCksIGNhc3RlZFRoaXMsIHJlc3VsdCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOwogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNhY2hlZEF0dHJp
YnV0ZTIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ2FjaGVk
QXR0cmlidXRlMihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVj
KTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWlj
Q2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4g
cmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJjYWNoZWRBdHRy
aWJ1dGUyIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRl
c3RPYmoiLCAiY2FjaGVkQXR0cmlidXRlMiIpOworICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERl
cHJlY2F0ZWRHZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImNhY2hlZEF0dHJpYnV0ZTIi
KTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoi
LCAiY2FjaGVkQXR0cmlidXRlMiIpOwogICAgIH0KICAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1
ZSA9IGNhc3RlZFRoaXMtPm1fY2FjaGVkQXR0cmlidXRlMi5nZXQoKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShjYWNoZWRWYWx1ZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPmltcGwoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IChpbXBsLmNhY2hlZEF0dHJpYnV0ZTIo
KS5oYXNOb1ZhbHVlKCkgPyBqc051bGwoKSA6IGltcGwuY2FjaGVkQXR0cmlidXRlMigpLmpzVmFs
dWUoKSk7Ci0gICAgY2FzdGVkVGhpcy0+bV9jYWNoZWRBdHRyaWJ1dGUyLnNldChleGVjLT52bSgp
LCBjYXN0ZWRUaGlzLCByZXN1bHQpOworICAgIGNhc3RlZFRoaXMtPm1fY2FjaGVkQXR0cmlidXRl
Mi5zZXQoc3RhdGUtPnZtKCksIGNhc3RlZFRoaXMsIHJlc3VsdCk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOwogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakFueUF0
dHJpYnV0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBbnlB
dHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nh
c3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJhc2UpKQotICAgICAgICAgICAgcmV0dXJuIHJl
cG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAiYW55QXR0cmlidXRl
Iik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoi
LCAiYW55QXR0cmlidXRlIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdl
dHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiYW55QXR0cmlidXRlIik7CisgICAgICAgIHJl
dHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImFueUF0dHJpYnV0
ZSIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIEpT
VmFsdWUgcmVzdWx0ID0gKGltcGwuYW55QXR0cmlidXRlKCkuaGFzTm9WYWx1ZSgpID8ganNOdWxs
KCkgOiBpbXBsLmFueUF0dHJpYnV0ZSgpLmpzVmFsdWUoKSk7CkBAIC0xNjQzLDYxICsxNjQzLDYx
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakFueUF0dHJpYnV0ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlCiB9CiAKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqQ29udGVudERvY3VtZW50KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpz
VGVzdE9iakNvbnRlbnREb2N1bWVudChFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJh
c2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNF
RF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJB
TShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgYXV0byogY2Fz
dGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihzbG90QmFzZSk7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNob3VsZEFs
bG93QWNjZXNzVG9Ob2RlKGV4ZWMsIGltcGwuY29udGVudERvY3VtZW50KCkpID8gdG9KUyhleGVj
LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC5jb250ZW50RG9j
dW1lbnQoKSkpIDoganNOdWxsKCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc2hvdWxk
QWxsb3dBY2Nlc3NUb05vZGUoc3RhdGUsIGltcGwuY29udGVudERvY3VtZW50KCkpID8gdG9KUyhz
dGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwuY29udGVu
dERvY3VtZW50KCkpKSA6IGpzTnVsbCgpKTsKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpNdXRhYmxlUG9pbnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqTXV0YWJsZVBvaW50KEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFN
KGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RC
YXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5
bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJl
dHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm11dGFi
bGVQb2ludCIpOwotICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJU
ZXN0T2JqIiwgIm11dGFibGVQb2ludCIpOworICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJl
Y2F0ZWRHZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm11dGFibGVQb2ludCIpOworICAg
ICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJtdXRh
YmxlUG9pbnQiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsK
LSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCksIFdURjo6Z2V0UHRyKFNWR1N0YXRpY1Byb3BlcnR5VGVhck9mZjxUZXN0T2JqLCBTVkdQb2lu
dD46OmNyZWF0ZShpbXBsLCBpbXBsLm11dGFibGVQb2ludCgpLCAmVGVzdE9iajo6dXBkYXRlTXV0
YWJsZVBvaW50KSkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKFNWR1N0YXRpY1Byb3BlcnR5VGVhck9mZjxU
ZXN0T2JqLCBTVkdQb2ludD46OmNyZWF0ZShpbXBsLCBpbXBsLm11dGFibGVQb2ludCgpLCAmVGVz
dE9iajo6dXBkYXRlTXV0YWJsZVBvaW50KSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpJbW11dGFibGVQb2ludChF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpJbW11dGFibGVQb2lu
dChFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVw
cmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJpbW11dGFibGVQb2ludCIpOwot
ICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgImlt
bXV0YWJsZVBvaW50Iik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRl
ckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiaW1tdXRhYmxlUG9pbnQiKTsKKyAgICAgICAgcmV0
dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiaW1tdXRhYmxlUG9p
bnQiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdU
Rjo6Z2V0UHRyKFNWR1Byb3BlcnR5VGVhck9mZjxTVkdQb2ludD46OmNyZWF0ZShpbXBsLmltbXV0
YWJsZVBvaW50KCkpKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoU1ZHUHJvcGVydHlUZWFyT2ZmPFNWR1Bv
aW50Pjo6Y3JlYXRlKGltcGwuaW1tdXRhYmxlUG9pbnQoKSkpKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyYXdi
ZXJyeShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJhd2Jl
cnJ5KEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBV
TlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpT
VGVzdE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnRE
ZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInN0cmF3YmVycnkiKTsKLSAg
ICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJzdHJh
d2JlcnJ5Iik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9y
KCpzdGF0ZSwgIlRlc3RPYmoiLCAic3RyYXdiZXJyeSIpOworICAgICAgICByZXR1cm4gdGhyb3dH
ZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJzdHJhd2JlcnJ5Iik7CiAgICAgfQog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc051bWJlcihpbXBsLmJsdWViZXJyeSgpKTsKQEAgLTE3MDUsMTYgKzE3MDUsMTYgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqU3RyYXdiZXJyeShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiBzbG90QmFzZSwgRW5jb2RlZEoKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJp
Y3RGbG9hdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJp
Y3RGbG9hdChFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsK
KyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2Fz
dDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gcmVw
b3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJzdHJpY3RGbG9hdCIp
OwotICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwg
InN0cmljdEZsb2F0Iik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRl
ckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAic3RyaWN0RmxvYXQiKTsKKyAgICAgICAgcmV0dXJu
IHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAic3RyaWN0RmxvYXQiKTsK
ICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuc3RyaWN0RmxvYXQoKSk7CkBAIC0xNzIyLDE2ICsxNzIy
LDE2IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmljdEZsb2F0KEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkCiB9CiAKIAotRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqRGVzY3JpcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqRGVzY3JpcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0oc2xv
dEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpz
RHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJhc2UpKQotICAgICAgICAgICAg
cmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAiZGVz
Y3JpcHRpb24iKTsKLSAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpleGVjLCAi
VGVzdE9iaiIsICJkZXNjcmlwdGlvbiIpOworICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJl
Y2F0ZWRHZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImRlc2NyaXB0aW9uIik7CisgICAg
ICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImRlc2Ny
aXB0aW9uIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmRlc2NyaXB0aW9uKCkpOwpAQCAtMTcz
OSwxNiArMTczOSwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpEZXNjcmlwdGlvbihFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZAogfQogCiAKLUVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iaklkKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpz
VGVzdE9iaklkKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMp
OworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWND
YXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiBy
ZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgImlkIik7Ci0gICAg
ICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAiaWQiKTsK
KyAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAi
VGVzdE9iaiIsICJpZCIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0
YXRlLCAiVGVzdE9iaiIsICJpZCIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+aW1wbCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5pZCgpKTsKQEAg
LTE3NTYsMzMgKzE3NTYsMzMgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqSWQoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHQKIH0KIAogCi1FbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpIYXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RC
YXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iakhhc2goRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0oc2xv
dEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpz
RHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJhc2UpKQotICAgICAgICAgICAg
cmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAiaGFz
aCIpOwotICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2Jq
IiwgImhhc2giKTsKKyAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJy
b3IoKnN0YXRlLCAiVGVzdE9iaiIsICJoYXNoIik7CisgICAgICAgIHJldHVybiB0aHJvd0dldHRl
clR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImhhc2giKTsKICAgICB9CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5n
V2l0aENhY2hlKGV4ZWMsIGltcGwuaGFzaCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3Ry
aW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmhhc2goKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOwogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlcGxhY2VhYmxl
QXR0cmlidXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJl
cGxhY2VhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BB
UkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNs
b3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChq
c0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAg
IHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInJl
cGxhY2VhYmxlQXR0cmlidXRlIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJv
cigqZXhlYywgIlRlc3RPYmoiLCAicmVwbGFjZWFibGVBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAg
IHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJy
ZXBsYWNlYWJsZUF0dHJpYnV0ZSIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJy
b3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZXBsYWNlYWJsZUF0dHJpYnV0ZSIpOwogICAgIH0KICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNOdW1iZXIoaW1wbC5yZXBsYWNlYWJsZUF0dHJpYnV0ZSgpKTsKQEAgLTE3OTAsMTYgKzE3OTAs
MTYgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGUoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpOdWxsYWJsZURvdWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBz
bG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZURvdWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRl
LCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1
ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoq
PihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihz
bG90QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9y
KCpleGVjLCAiVGVzdE9iaiIsICJudWxsYWJsZURvdWJsZUF0dHJpYnV0ZSIpOwotICAgICAgICBy
ZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm51bGxhYmxlRG91
YmxlQXR0cmlidXRlIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRl
ckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibnVsbGFibGVEb3VibGVBdHRyaWJ1dGUiKTsKKyAg
ICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibnVs
bGFibGVEb3VibGVBdHRyaWJ1dGUiKTsKICAgICB9CiAgICAgYm9vbCBpc051bGwgPSBmYWxzZTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwpAQCAtMTgxMCwxNiArMTgxMCwx
NiBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZURvdWJsZUF0dHJpYnV0ZShFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QgogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iak51bGxhYmxlTG9uZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90
QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUxvbmdBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNP
YmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwog
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xvdEJh
c2UpKQotICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqZXhl
YywgIlRlc3RPYmoiLCAibnVsbGFibGVMb25nQXR0cmlidXRlIik7Ci0gICAgICAgIHJldHVybiB0
aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAibnVsbGFibGVMb25nQXR0cmli
dXRlIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpz
dGF0ZSwgIlRlc3RPYmoiLCAibnVsbGFibGVMb25nQXR0cmlidXRlIik7CisgICAgICAgIHJldHVy
biB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm51bGxhYmxlTG9uZ0F0
dHJpYnV0ZSIpOwogICAgIH0KICAgICBib29sIGlzTnVsbCA9IGZhbHNlOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CkBAIC0xODMwLDE2ICsxODMwLDE2IEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlTG9uZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiBzbG90QmFzCiB9CiAKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVC
b29sZWFuQXR0cmlidXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iak51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCog
c2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAg
IFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAg
ICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkpCi0g
ICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVz
dE9iaiIsICJudWxsYWJsZUJvb2xlYW5BdHRyaWJ1dGUiKTsKLSAgICAgICAgcmV0dXJuIHRocm93
R2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJudWxsYWJsZUJvb2xlYW5BdHRyaWJ1
dGUiKTsKKyAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0
YXRlLCAiVGVzdE9iaiIsICJudWxsYWJsZUJvb2xlYW5BdHRyaWJ1dGUiKTsKKyAgICAgICAgcmV0
dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibnVsbGFibGVCb29s
ZWFuQXR0cmlidXRlIik7CiAgICAgfQogICAgIGJvb2wgaXNOdWxsID0gZmFsc2U7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKQEAgLTE4NTAsMzYgKzE4NTAsMzYgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVCb29sZWFuQXR0cmlidXRlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIHNsb3QKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxs
YWJsZVN0cmluZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpOdWxsYWJsZVN0cmluZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVj
dCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewot
ICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVO
VVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewog
ICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFzZSkp
Ci0gICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAi
VGVzdE9iaiIsICJudWxsYWJsZVN0cmluZ0F0dHJpYnV0ZSIpOwotICAgICAgICByZXR1cm4gdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm51bGxhYmxlU3RyaW5nQXR0cmli
dXRlIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpz
dGF0ZSwgIlRlc3RPYmoiLCAibnVsbGFibGVTdHJpbmdBdHRyaWJ1dGUiKTsKKyAgICAgICAgcmV0
dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibnVsbGFibGVTdHJp
bmdBdHRyaWJ1dGUiKTsKICAgICB9CiAgICAgYm9vbCBpc051bGwgPSBmYWxzZTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJp
bmdXaXRoQ2FjaGUoZXhlYywgaW1wbC5udWxsYWJsZVN0cmluZ0F0dHJpYnV0ZShpc051bGwpKTsK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLm51bGxh
YmxlU3RyaW5nQXR0cmlidXRlKGlzTnVsbCkpOwogICAgIGlmIChpc051bGwpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUxvbmdT
ZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpOdWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU09i
amVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAg
ICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkg
ewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihzbG90QmFz
ZSkpCi0gICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVj
LCAiVGVzdE9iaiIsICJudWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOwotICAgICAgICBy
ZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm51bGxhYmxlTG9u
Z1NldHRhYmxlQXR0cmlidXRlIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRl
ZEdldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibnVsbGFibGVMb25nU2V0dGFibGVBdHRy
aWJ1dGUiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRl
c3RPYmoiLCAibnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUiKTsKICAgICB9CiAgICAgYm9v
bCBpc051bGwgPSBmYWxzZTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwpA
QCAtMTg5MCwxMjYgKzE4OTAsMTI2IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxl
TG9uZ1NldHRhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqCiB9CiAKIAot
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZShFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFS
QU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialBy
b3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVk
R2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm51bGxhYmxlU3RyaW5nVmFsdWUiKTsKLSAg
ICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJudWxs
YWJsZVN0cmluZ1ZhbHVlIik7CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdl
dHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibnVsbGFibGVTdHJpbmdWYWx1ZSIpOworICAg
ICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJudWxs
YWJsZVN0cmluZ1ZhbHVlIik7CiAgICAgfQogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAg
IGJvb2wgaXNOdWxsID0gZmFsc2U7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwo
KTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwubnVsbGFibGVTdHJpbmdWYWx1
ZShpc051bGwsIGVjKSk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBzZXRE
T01FeGNlcHRpb24oc3RhdGUsIGVjKTsKICAgICBpZiAoaXNOdWxsKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CiB9CiAKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZShFeGVjU3RhdGUq
IHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
aXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5
cGUqPihzbG90QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRl
ckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJhdHRyaWJ1dGUiKTsKLSAgICAgICAgcmV0dXJuIHRo
cm93R2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJhdHRyaWJ1dGUiKTsKKyAgICAg
ICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9i
aiIsICJhdHRyaWJ1dGUiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RPYmoiLCAiYXR0cmlidXRlIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNo
ZShleGVjLCBpbXBsLmF0dHJpYnV0ZSgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5n
V2l0aENhY2hlKHN0YXRlLCBpbXBsLmF0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRl
V2l0aFJlc2VydmVkRW51bVR5cGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2Us
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUp
OwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oc2xv
dEJhc2UpKQotICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigq
ZXhlYywgIlRlc3RPYmoiLCAiYXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUiKTsKLSAgICAg
ICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJhdHRyaWJ1
dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZSIpOworICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJl
Y2F0ZWRHZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImF0dHJpYnV0ZVdpdGhSZXNlcnZl
ZEVudW1UeXBlIik7CisgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUs
ICJUZXN0T2JqIiwgImF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlIik7CiAgICAgfQogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBq
c1N0cmluZ1dpdGhDYWNoZShleGVjLCBpbXBsLmF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBl
KCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwu
YXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOwogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialB1dEZvcndhcmRz
QXR0cmlidXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialB1
dEZvcndhcmRzQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BB
UkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNs
b3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChq
c0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAg
IHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInB1
dEZvcndhcmRzQXR0cmlidXRlIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJv
cigqZXhlYywgIlRlc3RPYmoiLCAicHV0Rm9yd2FyZHNBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAg
IHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJw
dXRGb3J3YXJkc0F0dHJpYnV0ZSIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJy
b3IoKnN0YXRlLCAiVGVzdE9iaiIsICJwdXRGb3J3YXJkc0F0dHJpYnV0ZSIpOwogICAgIH0KICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC5w
dXRGb3J3YXJkc0F0dHJpYnV0ZSgpKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRl
LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC5wdXRGb3J3YXJk
c0F0dHJpYnV0ZSgpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQog
CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0
KiBiYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgSlNUZXN0
T2JqUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlw
ZSo+KGJhc2VWYWx1ZSk7CiAgICAgaWYgKCFkb21PYmplY3QpCi0gICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0T2Jq
OjpnZXRDb25zdHJ1Y3RvcihleGVjLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7
CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVGVzdE9iajo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9i
amVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAotdm9pZCBzZXRKU1Rlc3RPYmpDb25zdHJ1Y3Rv
clN0YXRpY1N0cmluZ0F0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNU
ZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2Jq
ZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKICAgICBVTlVTRURfUEFSQU0oYmFzZU9iamVjdCk7Ci0gICAgU3RyaW5nIG5hdGl2ZVZhbHVl
ID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShl
eGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9T
dHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBUZXN0T2JqOjpzZXRTdGF0aWNTdHJp
bmdBdHRyKG5hdGl2ZVZhbHVlKTsKIH0KIAogCi12b2lkIHNldEpTVGVzdE9ialRlc3RTdWJPYmpF
bmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFz
ZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCit2b2lkIHNldEpTVGVzdE9ialRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFS
QU0oYmFzZU9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgYXV0byog
Y2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihiYXNlT2JqZWN0KTsKICAgICBVTlVTRURf
UEFSQU0odGhpc1ZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAg
ICBjYXN0ZWRUaGlzLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
ZyhleGVjLCAiVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmciKSwgdmFsdWUpOworICAgIGNhc3Rl
ZFRoaXMtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0
ZSwgIlRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nIiksIHZhbHVlKTsKIH0KIAogCi12b2lkIHNl
dEpTVGVzdE9iakVudW1BdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQor
dm9pZCBzZXRKU1Rlc3RPYmpFbnVtQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFz
ZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5
bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RP
YmoiLCAiZW51bUF0dHIiKTsKKyAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJv
cigqc3RhdGUsICJUZXN0T2JqIiwgImVudW1BdHRyIik7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJlbnVtQXR0ciIpOwor
ICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJlbnVt
QXR0ciIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT5pbXBsKCk7Ci0gICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9TdHJpbmcoc3RhdGUpLT52YWx1ZShz
dGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybjsKICAgICBpZiAobmF0aXZlVmFsdWUgIT0gIiIgJiYgbmF0aXZlVmFsdWUgIT0gIkVu
dW1WYWx1ZTEiICYmIG5hdGl2ZVZhbHVlICE9ICJFbnVtVmFsdWUyIiAmJiBuYXRpdmVWYWx1ZSAh
PSAiRW51bVZhbHVlMyIpCiAgICAgICAgIHJldHVybjsKQEAgLTIwMTcsNzczICsyMDE3LDc3MyBA
QCB2b2lkIHNldEpTVGVzdE9iakVudW1BdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJh
c2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlCiB9CiAKIAotdm9pZCBzZXRKU1Rlc3RPYmpCeXRlQXR0
cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0T2Jq
Qnl0ZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURf
UEFSQU0oYmFzZU9iamVjdCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RP
YmpQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSkpCi0gICAgICAgICAgICBy
ZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgImJ5dGVBdHRyIik7
CisgICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9i
aiIsICJieXRlQXR0ciIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvd1NldHRlclR5
cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAiYnl0ZUF0dHIiKTsKKyAgICAgICAgICAgIHRocm93
U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiYnl0ZUF0dHIiKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAg
IGludDhfdCBuYXRpdmVWYWx1ZSA9IHRvSW50OChleGVjLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lv
bik7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpbnQ4X3Qg
bmF0aXZlVmFsdWUgPSB0b0ludDgoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIGltcGwuc2V0Qnl0ZUF0dHIobmF0aXZlVmFsdWUpOwogfQogCiAKLXZvaWQgc2V0SlNUZXN0
T2JqT2N0ZXRBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBz
ZXRKU1Rlc3RPYmpPY3RldEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
ICAgICBVTlVTRURfUEFSQU0oYmFzZU9iamVjdCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWlj
Q2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSkpCi0g
ICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwg
Im9jdGV0QXR0ciIpOworICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpz
dGF0ZSwgIlRlc3RPYmoiLCAib2N0ZXRBdHRyIik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHRocm93U2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJvY3RldEF0dHIiKTsKKyAg
ICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAib2N0ZXRB
dHRyIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPmltcGwoKTsKLSAgICB1aW50OF90IG5hdGl2ZVZhbHVlID0gdG9VSW50OChleGVjLCB2YWx1
ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICB1aW50OF90IG5hdGl2ZVZhbHVlID0gdG9VSW50OChzdGF0ZSwgdmFsdWUsIE5v
cm1hbENvbnZlcnNpb24pOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRPY3RldEF0dHIobmF0aXZlVmFsdWUpOwog
fQogCiAKLXZvaWQgc2V0SlNUZXN0T2JqU2hvcnRBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQordm9pZCBzZXRKU1Rlc3RPYmpTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oYmFzZU9iamVjdCk7CiAgICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewog
ICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSkpCi0gICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJy
b3IoKmV4ZWMsICJUZXN0T2JqIiwgInNob3J0QXR0ciIpOworICAgICAgICAgICAgcmVwb3J0RGVw
cmVjYXRlZFNldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAic2hvcnRBdHRyIik7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9i
aiIsICJzaG9ydEF0dHIiKTsKKyAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0
ZSwgIlRlc3RPYmoiLCAic2hvcnRBdHRyIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBpbnQxNl90IG5hdGl2ZVZhbHVl
ID0gdG9JbnQxNihleGVjLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElL
RUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpbnQxNl90IG5hdGl2ZVZhbHVlID0gdG9J
bnQxNihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRTaG9y
dEF0dHIobmF0aXZlVmFsdWUpOwogfQogCiAKLXZvaWQgc2V0SlNUZXN0T2JqVW5zaWduZWRTaG9y
dEF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIHNldEpTVGVz
dE9ialVuc2lnbmVkU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNlT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGJhc2VPYmplY3QpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpKQot
ICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIs
ICJ1bnNpZ25lZFNob3J0QXR0ciIpOworICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRl
ckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAidW5zaWduZWRTaG9ydEF0dHIiKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwg
InVuc2lnbmVkU2hvcnRBdHRyIik7CisgICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigq
c3RhdGUsICJUZXN0T2JqIiwgInVuc2lnbmVkU2hvcnRBdHRyIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICB1aW50MTZf
dCBuYXRpdmVWYWx1ZSA9IHRvVUludDE2KGV4ZWMsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsK
LSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIHVpbnQxNl90IG5h
dGl2ZVZhbHVlID0gdG9VSW50MTYoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIGltcGwuc2V0VW5zaWduZWRTaG9ydEF0dHIobmF0aXZlVmFsdWUpOwogfQogCiAKLXZvaWQg
c2V0SlNUZXN0T2JqTG9uZ0F0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Cit2b2lkIHNldEpTVGVzdE9iakxvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBi
YXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGJhc2VPYmplY3QpOwogICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpz
RHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpKQotICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpleGVjLCAiVGVz
dE9iaiIsICJsb25nQXR0ciIpOworICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVy
cm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibG9uZ0F0dHIiKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgImxvbmdBdHRyIik7
CisgICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImxv
bmdBdHRyIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPmltcGwoKTsKLSAgICBpbnQgbmF0aXZlVmFsdWUgPSB0b0ludDMyKGV4ZWMsIHZhbHVl
LCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIGludCBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoc3RhdGUsIHZhbHVlLCBOb3JtYWxD
b252ZXJzaW9uKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0TG9uZ0F0dHIobmF0aXZlVmFsdWUpOwogfQogCiAK
LXZvaWQgc2V0SlNUZXN0T2JqTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQordm9pZCBzZXRKU1Rlc3RPYmpMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oYmFzZU9iamVjdCk7CiAgICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewog
ICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSkpCi0gICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJy
b3IoKmV4ZWMsICJUZXN0T2JqIiwgImxvbmdMb25nQXR0ciIpOworICAgICAgICAgICAgcmVwb3J0
RGVwcmVjYXRlZFNldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibG9uZ0xvbmdBdHRyIik7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpleGVjLCAi
VGVzdE9iaiIsICJsb25nTG9uZ0F0dHIiKTsKKyAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibG9uZ0xvbmdBdHRyIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBsb25nIGxv
bmcgbmF0aXZlVmFsdWUgPSB0b0ludDY0KGV4ZWMsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsK
LSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGxvbmcgbG9uZyBu
YXRpdmVWYWx1ZSA9IHRvSW50NjQoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIGltcGwuc2V0TG9uZ0xvbmdBdHRyKG5hdGl2ZVZhbHVlKTsKIH0KIAogCi12b2lkIHNldEpT
VGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJh
c2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQordm9pZCBzZXRKU1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsK
ICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0
ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAidW5zaWduZWRMb25nTG9uZ0F0dHIiKTsKKyAgICAg
ICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInVu
c2lnbmVkTG9uZ0xvbmdBdHRyIik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93U2V0
dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJ1bnNpZ25lZExvbmdMb25nQXR0ciIpOwor
ICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ1bnNp
Z25lZExvbmdMb25nQXR0ciIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgdW5zaWduZWQgbG9uZyBsb25nIG5hdGl2ZVZh
bHVlID0gdG9VSW50NjQoZXhlYywgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChV
TkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgdW5zaWduZWQgbG9uZyBsb25nIG5h
dGl2ZVZhbHVlID0gdG9VSW50NjQoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIGltcGwuc2V0VW5zaWduZWRMb25nTG9uZ0F0dHIobmF0aXZlVmFsdWUpOwogfQogCiAKLXZv
aWQgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNl
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKK3ZvaWQgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU09i
amVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAg
IGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhl
YywgIlRlc3RPYmoiLCAic3RyaW5nQXR0ciIpOworICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRl
ZFNldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAic3RyaW5nQXR0ciIpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAi
c3RyaW5nQXR0ciIpOworICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAi
VGVzdE9iaiIsICJzdHJpbmdBdHRyIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2
YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1N0cmlu
ZyhzdGF0ZSktPnZhbHVlKHN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0U3RyaW5nQXR0cihuYXRpdmVW
YWx1ZSk7CiB9CiAKIAotdm9pZCBzZXRKU1Rlc3RPYmpUZXN0T2JqQXR0cihFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0T2JqVGVzdE9iakF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oYmFzZU9i
amVjdCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RP
YmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUq
PihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSkpCi0gICAgICAgICAgICByZXBvcnREZXByZWNh
dGVkU2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInRlc3RPYmpBdHRyIik7CisgICAgICAg
ICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ0ZXN0
T2JqQXR0ciIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJv
cigqZXhlYywgIlRlc3RPYmoiLCAidGVzdE9iakF0dHIiKTsKKyAgICAgICAgICAgIHRocm93U2V0
dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAidGVzdE9iakF0dHIiKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAg
IFRlc3RPYmoqIG5hdGl2ZVZhbHVlID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQodmFsdWUpOwotICAg
IGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldFRlc3RP
YmpBdHRyKG5hdGl2ZVZhbHVlKTsKIH0KIAogCi12b2lkIHNldEpTVGVzdE9ialhNTE9iakF0dHIo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIHNldEpTVGVzdE9ialhN
TE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURf
UEFSQU0oYmFzZU9iamVjdCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RP
YmpQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSkpCi0gICAgICAgICAgICBy
ZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIlhNTE9iakF0dHIi
KTsKKyAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0
T2JqIiwgIlhNTE9iakF0dHIiKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhyb3dTZXR0
ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIlhNTE9iakF0dHIiKTsKKyAgICAgICAgICAg
IHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiWE1MT2JqQXR0ciIpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBs
KCk7CiAgICAgVGVzdE9iaiogbmF0aXZlVmFsdWUgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZCh2YWx1
ZSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwu
c2V0WE1MT2JqQXR0cihuYXRpdmVWYWx1ZSk7CiB9CiAKIAotdm9pZCBzZXRKU1Rlc3RPYmpDcmVh
dGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIHNldEpTVGVzdE9i
akNyZWF0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9Q
QVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9i
alByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKSkKLSAgICAgICAgICAgIHJl
cG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAiY3JlYXRlIik7Cisg
ICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIs
ICJjcmVhdGUiKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJy
b3IoKmV4ZWMsICJUZXN0T2JqIiwgImNyZWF0ZSIpOworICAgICAgICAgICAgdGhyb3dTZXR0ZXJU
eXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJjcmVhdGUiKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGJvb2wgbmF0
aXZlVmFsdWUgPSB2YWx1ZS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBib29sIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9Cb29sZWFu
KHN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIGltcGwuc2V0Q3JlYXRlKG5hdGl2ZVZhbHVlKTsKIH0KIAogCi12b2lk
IHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCit2b2lkIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oYmFzZU9iamVj
dCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoq
PihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSkpCi0gICAgICAgICAgICByZXBvcnREZXByZWNhdGVk
U2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInJlZmxlY3RlZFN0cmluZ0F0dHIiKTsKKyAg
ICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwg
InJlZmxlY3RlZFN0cmluZ0F0dHIiKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhyb3dT
ZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInJlZmxlY3RlZFN0cmluZ0F0dHIiKTsK
KyAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVm
bGVjdGVkU3RyaW5nQXR0ciIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWVU
b1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgdmFsdWUpOwotICAgIGlmIChVTkxJS0VMWShleGVj
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWVUb1N0cmlu
Z1dpdGhOdWxsQ2hlY2soc3RhdGUsIHZhbHVlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0QXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHN0cmluZ2F0
dHJBdHRyLCBuYXRpdmVWYWx1ZSk7CiB9CiAKIAotdm9pZCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRJ
bnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIHNl
dEpTVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVj
dCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlm
IChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywg
IlRlc3RPYmoiLCAicmVmbGVjdGVkSW50ZWdyYWxBdHRyIik7CisgICAgICAgICAgICByZXBvcnRE
ZXByZWNhdGVkU2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRJbnRlZ3Jh
bEF0dHIiKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3Io
KmV4ZWMsICJUZXN0T2JqIiwgInJlZmxlY3RlZEludGVncmFsQXR0ciIpOworICAgICAgICAgICAg
dGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRJbnRlZ3Jh
bEF0dHIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+aW1wbCgpOwotICAgIGludCBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoZXhlYywgdmFsdWUs
IE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaW50IG5hdGl2ZVZhbHVlID0gdG9JbnQzMihzdGF0ZSwgdmFsdWUsIE5vcm1hbENv
bnZlcnNpb24pOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1M
TmFtZXM6OnJlZmxlY3RlZGludGVncmFsYXR0ckF0dHIsIG5hdGl2ZVZhbHVlKTsKIH0KIAogCi12
b2lkIHNldEpTVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVbnNp
Z25lZEludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZU9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7
CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAg
IFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0
PEpTVGVzdE9ialByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKSkKLSAgICAg
ICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAicmVm
bGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIiKTsKKyAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0
ZWRTZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZFVuc2lnbmVkSW50ZWdy
YWxBdHRyIik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9y
KCpleGVjLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ciIpOworICAg
ICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZWZsZWN0
ZWRVbnNpZ25lZEludGVncmFsQXR0ciIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgdW5zaWduZWQgbmF0aXZlVmFsdWUg
PSB0b1VJbnQzMihleGVjLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElL
RUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICB1bnNpZ25lZCBuYXRpdmVWYWx1ZSA9IHRv
VUludDMyKHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldFVu
c2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1bnNp
Z25lZGludGVncmFsYXR0ckF0dHIsIG5hdGl2ZVZhbHVlKTsKIH0KIAogCi12b2lkIHNldEpTVGVz
dE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQordm9pZCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7
CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJF
cnJvcigqZXhlYywgIlRlc3RPYmoiLCAicmVmbGVjdGVkQm9vbGVhbkF0dHIiKTsKKyAgICAgICAg
ICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlZmxl
Y3RlZEJvb2xlYW5BdHRyIik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93U2V0dGVy
VHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRCb29sZWFuQXR0ciIpOworICAg
ICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZWZsZWN0
ZWRCb29sZWFuQXR0ciIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgYm9vbCBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvQm9v
bGVhbihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGJvb2wgbmF0aXZlVmFsdWUgPSB2YWx1ZS50b0Jvb2xlYW4oc3RhdGUpOworICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5z
ZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkYm9vbGVhbmF0
dHJBdHRyLCBuYXRpdmVWYWx1ZSk7CiB9CiAKIAotdm9pZCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRV
UkxBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBzZXRKU1Rl
c3RPYmpSZWZsZWN0ZWRVUkxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNlT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGJhc2VPYmplY3QpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpKQot
ICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIs
ICJyZWZsZWN0ZWRVUkxBdHRyIik7CisgICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVy
RXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRVUkxBdHRyIik7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJy
ZWZsZWN0ZWRVUkxBdHRyIik7CisgICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqc3Rh
dGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZFVSTEF0dHIiKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIFN0cmluZyBuYXRp
dmVWYWx1ZSA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZhbHVlKTsKLSAgICBp
ZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIFN0cmluZyBuYXRpdmVWYWx1
ZSA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKHN0YXRlLCB2YWx1ZSk7CisgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBs
LnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpy
ZWZsZWN0ZWR1cmxhdHRyQXR0ciwgbmF0aXZlVmFsdWUpOwogfQogCiAKLXZvaWQgc2V0SlNUZXN0
T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK3ZvaWQgc2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAg
ICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJv
cigqZXhlYywgIlRlc3RPYmoiLCAicmVmbGVjdGVkU3RyaW5nQXR0ciIpOworICAgICAgICAgICAg
cmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVmbGVjdGVk
U3RyaW5nQXR0ciIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvd1NldHRlclR5cGVF
cnJvcigqZXhlYywgIlRlc3RPYmoiLCAicmVmbGVjdGVkU3RyaW5nQXR0ciIpOworICAgICAgICAg
ICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRTdHJp
bmdBdHRyIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPmltcGwoKTsKLSAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2YWx1ZVRvU3RyaW5nV2l0
aE51bGxDaGVjayhleGVjLCB2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxD
aGVjayhzdGF0ZSwgdmFsdWUpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0cmluZ0F0dHJBdHRy
LCBuYXRpdmVWYWx1ZSk7CiB9CiAKIAotdm9pZCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21J
bnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIHNl
dEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBK
U09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAg
ICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigq
ZXhlYywgIlRlc3RPYmoiLCAicmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyIik7CisgICAgICAg
ICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZWZs
ZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHIiKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhy
b3dTZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInJlZmxlY3RlZEN1c3RvbUludGVn
cmFsQXR0ciIpOworICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVz
dE9iaiIsICJyZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHIiKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGludCBuYXRp
dmVWYWx1ZSA9IHRvSW50MzIoZXhlYywgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlm
IChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaW50IG5hdGl2ZVZhbHVlID0g
dG9JbnQzMihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRJ
bnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRJbnRlZ3Jh
bEF0dHJBdHRyLCBuYXRpdmVWYWx1ZSk7CiB9CiAKIAotdm9pZCBzZXRKU1Rlc3RPYmpSZWZsZWN0
ZWRDdXN0b21Cb29sZWFuQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
K3ZvaWQgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oYmFzZU9iamVjdCk7CiAg
ICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkg
ewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSkpCi0gICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVy
RXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyIik7Cisg
ICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIs
ICJyZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0ciIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICB0aHJvd1NldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAicmVmbGVjdGVkQ3VzdG9t
Qm9vbGVhbkF0dHIiKTsKKyAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwg
IlRlc3RPYmoiLCAicmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHIiKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGJvb2wg
bmF0aXZlVmFsdWUgPSB2YWx1ZS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBib29sIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9Cb29s
ZWFuKHN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1M
TmFtZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFuQXR0ckF0dHIsIG5hdGl2ZVZhbHVlKTsKIH0KIAog
Ci12b2lkIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHIoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVS
TEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFS
QU0oYmFzZU9iamVjdCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQ
cm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSkpCi0gICAgICAgICAgICByZXBv
cnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInJlZmxlY3RlZEN1c3Rv
bVVSTEF0dHIiKTsKKyAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqc3Rh
dGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZEN1c3RvbVVSTEF0dHIiKTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInJlZmxl
Y3RlZEN1c3RvbVVSTEF0dHIiKTsKKyAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RPYmoiLCAicmVmbGVjdGVkQ3VzdG9tVVJMQXR0ciIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgU3Ry
aW5nIG5hdGl2ZVZhbHVlID0gdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgdmFsdWUp
OwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgU3RyaW5nIG5h
dGl2ZVZhbHVlID0gdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soc3RhdGUsIHZhbHVlKTsKKyAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIGltcGwuc2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1M
TmFtZXM6OmN1c3RvbUNvbnRlbnRVUkxBdHRyQXR0ciwgbmF0aXZlVmFsdWUpOwogfQogCiAKLXZv
aWQgc2V0SlNUZXN0T2JqVHlwZWRBcnJheUF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
YmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCit2b2lkIHNldEpTVGVzdE9ialR5cGVkQXJyYXlBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGJhc2VPYmplY3QpOwogICAg
IEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
ICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpKQotICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVy
cm9yKCpleGVjLCAiVGVzdE9iaiIsICJ0eXBlZEFycmF5QXR0ciIpOworICAgICAgICAgICAgcmVw
b3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAidHlwZWRBcnJheUF0
dHIiKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKmV4
ZWMsICJUZXN0T2JqIiwgInR5cGVkQXJyYXlBdHRyIik7CisgICAgICAgICAgICB0aHJvd1NldHRl
clR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInR5cGVkQXJyYXlBdHRyIik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAg
ICBSZWZQdHI8RmxvYXQzMkFycmF5PiBuYXRpdmVWYWx1ZSA9IHRvRmxvYXQzMkFycmF5KHZhbHVl
KTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5z
ZXRUeXBlZEFycmF5QXR0cihuYXRpdmVWYWx1ZS5nZXQoKSk7CiB9CiAKIAotdm9pZCBzZXRKU1Rl
c3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBi
YXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0T2JqQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0
YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oYmFzZU9iamVj
dCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoq
PihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSkpCi0gICAgICAgICAgICByZXBvcnREZXByZWNhdGVk
U2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgImF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uIik7
CisgICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9i
aiIsICJhdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICB0aHJvd1NldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAiYXR0cldpdGhHZXR0ZXJF
eGNlcHRpb24iKTsKKyAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRl
c3RPYmoiLCAiYXR0cldpdGhHZXR0ZXJFeGNlcHRpb24iKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGludCBuYXRpdmVW
YWx1ZSA9IHRvSW50MzIoZXhlYywgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChV
TkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaW50IG5hdGl2ZVZhbHVlID0gdG9J
bnQzMihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRBdHRy
V2l0aEdldHRlckV4Y2VwdGlvbihuYXRpdmVWYWx1ZSk7CiB9CiAKIAotdm9pZCBzZXRKU1Rlc3RP
YmpBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNl
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKK3ZvaWQgc2V0SlNUZXN0T2JqQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRl
KiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oYmFzZU9iamVjdCk7
CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSkpCi0gICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0
dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgImF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uIik7Cisg
ICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIs
ICJhdHRyV2l0aFNldHRlckV4Y2VwdGlvbiIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0
aHJvd1NldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAiYXR0cldpdGhTZXR0ZXJFeGNl
cHRpb24iKTsKKyAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RP
YmoiLCAiYXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwotICAgIGludCBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoZXhlYywgdmFsdWUsIE5vcm1h
bENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaW50IG5hdGl2ZVZhbHVlID0gdG9JbnQzMihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNp
b24pOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm47CiAgICAgaW1wbC5zZXRBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihuYXRpdmVWYWx1ZSwg
ZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9u
KHN0YXRlLCBlYyk7CiB9CiAKIAotdm9pZCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyV2l0aEdldHRl
ckV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0
SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwg
SlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oYmFzZU9iamVjdCk7CiAgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAg
ICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSkpCi0gICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3Io
KmV4ZWMsICJUZXN0T2JqIiwgInN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uIik7CisgICAg
ICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJz
dHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICB0aHJvd1NldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAic3RyaW5nQXR0cldpdGhH
ZXR0ZXJFeGNlcHRpb24iKTsKKyAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0
ZSwgIlRlc3RPYmoiLCAic3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24iKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAg
IFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsK
LSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIFN0cmluZyBuYXRp
dmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUpOworICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1w
bC5zZXRTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihuYXRpdmVWYWx1ZSk7CiB9CiAKIAot
dm9pZCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cldp
dGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQog
ewogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAg
ICBVTlVTRURfUEFSQU0oYmFzZU9iamVjdCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2Fz
dDxKU1Rlc3RPYmpQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSkpCi0gICAg
ICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInN0
cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uIik7CisgICAgICAgICAgICByZXBvcnREZXByZWNh
dGVkU2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJzdHJpbmdBdHRyV2l0aFNldHRlckV4
Y2VwdGlvbiIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJv
cigqZXhlYywgIlRlc3RPYmoiLCAic3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iKTsKKyAg
ICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAic3RyaW5n
QXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIFN0cmlu
ZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUpOworICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAg
ICAgaW1wbC5zZXRTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihuYXRpdmVWYWx1ZSwgZWMp
OwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKHN0
YXRlLCBlYyk7CiB9CiAKIAotdm9pZCBzZXRKU1Rlc3RPYmpTdHJpY3RUeXBlQ2hlY2tpbmdBdHRy
aWJ1dGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIHNldEpTVGVz
dE9ialN0cmljdFR5cGVDaGVja2luZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVj
dCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlm
IChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywg
IlRlc3RPYmoiLCAic3RyaWN0VHlwZUNoZWNraW5nQXR0cmlidXRlIik7CisgICAgICAgICAgICBy
ZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJzdHJpY3RUeXBl
Q2hlY2tpbmdBdHRyaWJ1dGUiKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhyb3dTZXR0
ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInN0cmljdFR5cGVDaGVja2luZ0F0dHJpYnV0
ZSIpOworICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIs
ICJzdHJpY3RUeXBlQ2hlY2tpbmdBdHRyaWJ1dGUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIGlmIChVTkxJS0VMWSgh
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSAmJiAhdmFsdWUuaW5oZXJpdHMoSlNUZXN0T2JqOjpp
bmZvKCkpKSkgewotICAgICAgICB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcigqZXhlYywgIlRlc3RP
YmoiLCAic3RyaWN0VHlwZUNoZWNraW5nQXR0cmlidXRlIiwgIlRlc3RPYmoiKTsKKyAgICAgICAg
dGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJzdHJpY3RUeXBlQ2hl
Y2tpbmdBdHRyaWJ1dGUiLCAiVGVzdE9iaiIpOwogICAgICAgICByZXR1cm47CiAgICAgfTsKICAg
ICBUZXN0T2JqKiBuYXRpdmVWYWx1ZSA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHZhbHVlKTsKLSAg
ICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRTdHJp
Y3RUeXBlQ2hlY2tpbmdBdHRyaWJ1dGUobmF0aXZlVmFsdWUpOwogfQogCiAKLXZvaWQgc2V0SlNU
ZXN0T2JqQ3VzdG9tQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3Zv
aWQgc2V0SlNUZXN0T2JqQ3VzdG9tQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFz
ZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odGhp
c1ZhbHVlKTsKICAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KGJhc2VP
YmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTShl
eGVjKTsKLSAgICBjYXN0ZWRUaGlzLT5zZXRDdXN0b21BdHRyKGV4ZWMsIHZhbHVlKTsKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOworICAgIGNhc3RlZFRoaXMtPnNldEN1c3RvbUF0dHIoc3RhdGUs
IHZhbHVlKTsKIH0KIAogCi12b2lkIHNldEpTVGVzdE9iak9uZm9vKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBzZXRKU1Rlc3RPYmpPbmZvbyhFeGVjU3RhdGUqIHN0
YXRlLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7
CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJF
cnJvcigqZXhlYywgIlRlc3RPYmoiLCAib25mb28iKTsKKyAgICAgICAgICAgIHJlcG9ydERlcHJl
Y2F0ZWRTZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm9uZm9vIik7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJv
bmZvbyIpOworICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9i
aiIsICJvbmZvbyIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHNldEV2ZW50SGFuZGxl
ckF0dHJpYnV0ZSgqZXhlYywgKmNhc3RlZFRoaXMsIGNhc3RlZFRoaXMtPmltcGwoKSwgZXZlbnRO
YW1lcygpLmZvb0V2ZW50LCB2YWx1ZSk7CisgICAgc2V0RXZlbnRIYW5kbGVyQXR0cmlidXRlKCpz
dGF0ZSwgKmNhc3RlZFRoaXMsIGNhc3RlZFRoaXMtPmltcGwoKSwgZXZlbnROYW1lcygpLmZvb0V2
ZW50LCB2YWx1ZSk7CiB9CiAKIAotdm9pZCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRy
aWJ1dGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIHNldEpTVGVz
dE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCog
YmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChq
c0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywgIlRl
c3RPYmoiLCAid2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlIik7CisgICAgICAgICAgICByZXBvcnRE
ZXByZWNhdGVkU2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0U3RhdGVB
dHRyaWJ1dGUiKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJy
b3IoKmV4ZWMsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZSIpOworICAgICAg
ICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0
U3RhdGVBdHRyaWJ1dGUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGludCBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoZXhl
YywgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaW50IG5hdGl2ZVZhbHVlID0gdG9JbnQzMihzdGF0ZSwgdmFsdWUs
IE5vcm1hbENvbnZlcnNpb24pOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm47Ci0gICAgaW1wbC5zZXRXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1
dGUoZXhlYywgbmF0aXZlVmFsdWUpOworICAgIGltcGwuc2V0V2l0aFNjcmlwdFN0YXRlQXR0cmli
dXRlKCpzdGF0ZSwgbmF0aXZlVmFsdWUpOwogfQogCiAKLXZvaWQgc2V0SlNUZXN0T2JqV2l0aENh
bGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCit2b2lkIHNldEpTVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxX
aXRoQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKGJhc2VPYmplY3QpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpKQotICAgICAgICAg
ICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJ3aXRoQ2Fs
bFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZSIpOworICAgICAgICAgICAgcmVwb3J0RGVw
cmVjYXRlZFNldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0aENhbGxXaXRoQW5kU2V0
dGVyQ2FsbFdpdGhBdHRyaWJ1dGUiKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhyb3dT
ZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIndpdGhDYWxsV2l0aEFuZFNldHRlckNh
bGxXaXRoQXR0cmlidXRlIik7CisgICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqc3Rh
dGUsICJUZXN0T2JqIiwgIndpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlIik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmlt
cGwoKTsKLSAgICBpbnQgbmF0aXZlVmFsdWUgPSB0b0ludDMyKGV4ZWMsIHZhbHVlLCBOb3JtYWxD
b252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGludCBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9u
KTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuOwotICAgIGltcGwuc2V0V2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUo
ZXhlYywgYWN0aXZlRE9NV2luZG93KGV4ZWMpLCBmaXJzdERPTVdpbmRvdyhleGVjKSwgbmF0aXZl
VmFsdWUpOworICAgIGltcGwuc2V0V2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1
dGUoKnN0YXRlLCBhY3RpdmVET01XaW5kb3coc3RhdGUpLCBmaXJzdERPTVdpbmRvdyhzdGF0ZSks
IG5hdGl2ZVZhbHVlKTsKIH0KIAogCi12b2lkIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXh0QXR0cmlidXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQor
dm9pZCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShFeGVj
U3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2Jq
ZWN0KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9i
aio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0
ZWRTZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigq
c3RhdGUsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlIik7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpleGVjLCAi
VGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSIpOworICAgICAg
ICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgVGVzdE9iaiogbmF0aXZlVmFs
dWUgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8qIHNjcmlwdENvbnRleHQgPSBqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7CisgICAgYXV0byogc2NyaXB0Q29udGV4dCA9IGpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CiAgICAgaWYgKCFzY3JpcHRDb250ZXh0KQogICAgICAgICByZXR1cm47CiAg
ICAgaW1wbC5zZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShzY3JpcHRDb250
ZXh0LCBuYXRpdmVWYWx1ZSk7CiB9CiAKIAotdm9pZCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3Rh
dGVBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2
b2lkIHNldEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhFeGVjU3RhdGUq
IHN0YXRlLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsK
ICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0
ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAid2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2Vz
Iik7CisgICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVz
dE9iaiIsICJ3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMiKTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIndpdGhT
Y3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyIpOworICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBl
RXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMi
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
aW1wbCgpOwogICAgIFRlc3RPYmoqIG5hdGl2ZVZhbHVlID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQo
dmFsdWUpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKLSAgICBp
bXBsLnNldFdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhleGVjLCBuYXRpdmVWYWx1ZSk7
CisgICAgaW1wbC5zZXRXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoKnN0YXRlLCBuYXRp
dmVWYWx1ZSk7CiB9CiAKIAotdm9pZCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEF0dHJpYnV0ZVJhaXNlcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
K3ZvaWQgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlz
ZXMoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0o
YmFzZU9iamVjdCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90
b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSkpCi0gICAgICAgICAgICByZXBvcnRE
ZXByZWNhdGVkU2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXh0QXR0cmlidXRlUmFpc2VzIik7CisgICAgICAgICAgICByZXBvcnREZXByZWNhdGVk
U2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEF0dHJpYnV0ZVJhaXNlcyIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvd1NldHRl
clR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
dHRyaWJ1dGVSYWlzZXMiKTsKKyAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0
ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMi
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
aW1wbCgpOwogICAgIFRlc3RPYmoqIG5hdGl2ZVZhbHVlID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQo
dmFsdWUpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKLSAgICBh
dXRvKiBzY3JpcHRDb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGF1dG8q
IHNjcmlwdENvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghc2Ny
aXB0Q29udGV4dCkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0V2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMoc2NyaXB0Q29udGV4dCwgbmF0aXZlVmFsdWUpOwog
fQogCiAKLXZvaWQgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3Jp
cHRTdGF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3Zv
aWQgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0
dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9Q
QVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9i
alByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKSkKLSAgICAgICAgICAgIHJl
cG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZSIpOworICAgICAgICAgICAgcmVw
b3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZSIpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAid2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZSIpOworICAgICAgICAg
ICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBUZXN0T2Jq
KiBuYXRpdmVWYWx1ZSA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHZhbHVlKTsKLSAgICBpZiAoVU5M
SUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47Ci0gICAgYXV0byogc2NyaXB0Q29udGV4dCA9
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBhdXRvKiBzY3JpcHRDb250ZXh0ID0ganND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIXNjcmlwdENvbnRleHQpCiAgICAgICAg
IHJldHVybjsKLSAgICBpbXBsLnNldFdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0
U3RhdGVBdHRyaWJ1dGUoZXhlYywgc2NyaXB0Q29udGV4dCwgbmF0aXZlVmFsdWUpOworICAgIGlt
cGwuc2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZSgq
c3RhdGUsIHNjcmlwdENvbnRleHQsIG5hdGl2ZVZhbHVlKTsKIH0KIAogCi12b2lkIHNldEpTVGVz
dE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlz
ZXMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIHNldEpTVGVzdE9i
aldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oYmFz
ZU9iamVjdCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5
cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSkpCi0gICAgICAgICAgICByZXBvcnREZXBy
ZWNhdGVkU2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMiKTsKKyAgICAgICAgICAgIHJlcG9y
dERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMiKTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIndp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMiKTsK
KyAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyIpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBs
KCk7CiAgICAgVGVzdE9iaiogbmF0aXZlVmFsdWUgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZCh2YWx1
ZSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8q
IHNjcmlwdENvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgYXV0byogc2Ny
aXB0Q29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFzY3JpcHRD
b250ZXh0KQogICAgICAgICByZXR1cm47Ci0gICAgaW1wbC5zZXRXaXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKGV4ZWMsIHNjcmlwdENvbnRleHQs
IG5hdGl2ZVZhbHVlKTsKKyAgICBpbXBsLnNldFdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5k
U2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoKnN0YXRlLCBzY3JpcHRDb250ZXh0LCBuYXRpdmVW
YWx1ZSk7CiB9CiAKIAotdm9pZCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNP
YmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oYmFzZU9iamVjdCk7CiAgICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAg
ICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSkpCi0gICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKmV4
ZWMsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVX
aXRoU3BhY2VzQXR0cmlidXRlIik7CisgICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVy
RXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNj
cmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZSIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICB0aHJvd1NldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUiKTsKKyAgICAgICAg
ICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUiKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwog
ICAgIFRlc3RPYmoqIG5hdGl2ZVZhbHVlID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQodmFsdWUpOwot
ICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRvKiBzY3Jp
cHRDb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGF1dG8qIHNjcmlwdENv
bnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghc2NyaXB0Q29udGV4
dCkKICAgICAgICAgcmV0dXJuOwotICAgIGltcGwuc2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoZXhlYywgc2NyaXB0Q29udGV4dCwg
bmF0aXZlVmFsdWUpOworICAgIGltcGwuc2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRT
Y3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoKnN0YXRlLCBzY3JpcHRDb250ZXh0LCBuYXRp
dmVWYWx1ZSk7CiB9CiAKIAotdm9pZCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRzQW5k
Q2FsbFN0YWNrQXR0cmlidXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQor
dm9pZCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRl
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGJh
c2VPYmplY3QpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90
eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpKQotICAgICAgICAgICAgcmVwb3J0RGVw
cmVjYXRlZFNldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0QXJndW1lbnRz
QW5kQ2FsbFN0YWNrQXR0cmlidXRlIik7CisgICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0
dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0
YWNrQXR0cmlidXRlIik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93U2V0dGVyVHlw
ZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNr
QXR0cmlidXRlIik7CisgICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJU
ZXN0T2JqIiwgIndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUiKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgp
OwogICAgIFRlc3RPYmoqIG5hdGl2ZVZhbHVlID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQodmFsdWUp
OwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNl
dFdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUobmF0aXZlVmFsdWUpOwog
fQogCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKLXZvaWQgc2V0SlNUZXN0T2JqQ29uZGl0aW9u
YWxBdHRyMShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNU
ZXN0T2JqQ29uZGl0aW9uYWxBdHRyMShFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZU9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFt
aWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKSkK
LSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoi
LCAiY29uZGl0aW9uYWxBdHRyMSIpOworICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRl
ckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiY29uZGl0aW9uYWxBdHRyMSIpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAi
Y29uZGl0aW9uYWxBdHRyMSIpOworICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0
YXRlLCAiVGVzdE9iaiIsICJjb25kaXRpb25hbEF0dHIxIik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBpbnQgbmF0aXZl
VmFsdWUgPSB0b0ludDMyKGV4ZWMsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAo
VU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGludCBuYXRpdmVWYWx1ZSA9IHRv
SW50MzIoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0Q29u
ZGl0aW9uYWxBdHRyMShuYXRpdmVWYWx1ZSk7CiB9CkBAIC0yNzkxLDIxICsyNzkxLDIxIEBAIHZv
aWQgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiBiYXNlT2JqZWN0LCBFbmNvZGVkCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xKSAm
JiBFTkFCTEUoQ29uZGl0aW9uMikKLXZvaWQgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMihF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0T2JqQ29u
ZGl0aW9uYWxBdHRyMihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVO
VVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpT
VGVzdE9ialByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKSkKLSAgICAgICAg
ICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAiY29uZGl0
aW9uYWxBdHRyMiIpOworICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpz
dGF0ZSwgIlRlc3RPYmoiLCAiY29uZGl0aW9uYWxBdHRyMiIpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAiY29uZGl0aW9u
YWxBdHRyMiIpOworICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVz
dE9iaiIsICJjb25kaXRpb25hbEF0dHIyIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBpbnQgbmF0aXZlVmFsdWUgPSB0
b0ludDMyKGV4ZWMsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFko
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGludCBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoc3Rh
dGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0Q29uZGl0aW9uYWxB
dHRyMihuYXRpdmVWYWx1ZSk7CiB9CkBAIC0yODEzLDIxICsyODEzLDIxIEBAIHZvaWQgc2V0SlNU
ZXN0T2JqQ29uZGl0aW9uYWxBdHRyMihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2Jq
ZWN0LCBFbmNvZGVkCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUo
Q29uZGl0aW9uMikKLXZvaWQgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMyhFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxB
dHRyMyhFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJB
TShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialBy
b3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKSkKLSAgICAgICAgICAgIHJlcG9y
dERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAiY29uZGl0aW9uYWxBdHRy
MyIpOworICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpzdGF0ZSwgIlRl
c3RPYmoiLCAiY29uZGl0aW9uYWxBdHRyMyIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0
aHJvd1NldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAiY29uZGl0aW9uYWxBdHRyMyIp
OworICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJj
b25kaXRpb25hbEF0dHIzIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBpbnQgbmF0aXZlVmFsdWUgPSB0b0ludDMyKGV4
ZWMsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGludCBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoc3RhdGUsIHZhbHVl
LCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0Q29uZGl0aW9uYWxBdHRyMyhuYXRp
dmVWYWx1ZSk7CiB9CkBAIC0yODM1LDI0MiArMjgzNSwyNDIgQEAgdm9pZCBzZXRKU1Rlc3RPYmpD
b25kaXRpb25hbEF0dHIzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVu
Y29kZWQKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpCi12b2lkIHNldEpTVGVzdE9i
akNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBi
YXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGJhc2VP
YmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIGF1dG8qIGNhc3RlZFRo
aXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oYmFzZU9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
aXNWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgY2FzdGVk
VGhpcy0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywg
ImNvbmRpdGlvbmFsQXR0cjQiKSwgdmFsdWUpOworICAgIGNhc3RlZFRoaXMtPnB1dERpcmVjdChz
dGF0ZS0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgImNvbmRpdGlvbmFsQXR0
cjQiKSwgdmFsdWUpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBF
TkFCTEUoQ29uZGl0aW9uMikKLXZvaWQgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBzZXRKU1Rl
c3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmpl
Y3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oYmFzZU9iamVjdCk7CiAgICAgVU5VU0VEX1BB
UkFNKHRoaXNWYWx1ZSk7CiAgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoq
PihiYXNlT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBVTlVTRURf
UEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICAvLyBTaGFkb3dpbmcg
YSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICBjYXN0ZWRUaGlzLT5wdXREaXJlY3QoZXhlYy0+
dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiY29uZGl0aW9uYWxBdHRyNSIpLCB2
YWx1ZSk7CisgICAgY2FzdGVkVGhpcy0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHN0YXRlLCAiY29uZGl0aW9uYWxBdHRyNSIpLCB2YWx1ZSk7CiB9CiAKICNl
bmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotdm9p
ZCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZD
b25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNF
RF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBh
dXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KGJhc2VPYmplY3QpOwogICAgIFVO
VVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9y
LgotICAgIGNhc3RlZFRoaXMtPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKGV4ZWMsICJjb25kaXRpb25hbEF0dHI2IiksIHZhbHVlKTsKKyAgICBjYXN0ZWRUaGlz
LT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoc3RhdGUsICJj
b25kaXRpb25hbEF0dHI2IiksIHZhbHVlKTsKIH0KIAogI2VuZGlmCiAKLXZvaWQgc2V0SlNUZXN0
T2JqQW55QXR0cmlidXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9p
ZCBzZXRKU1Rlc3RPYmpBbnlBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJh
c2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKICAgICBVTlVTRURfUEFSQU0oYmFzZU9iamVjdCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSkpCi0gICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0
T2JqIiwgImFueUF0dHJpYnV0ZSIpOworICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRl
ckVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiYW55QXR0cmlidXRlIik7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJhbnlB
dHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRl
c3RPYmoiLCAiYW55QXR0cmlidXRlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSBuYXRpdmVWYWx1ZSA9IHsgZXhlYy0+dm0oKSwgdmFsdWUgfTsKLSAgICBpZiAoVU5MSUtFTFko
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG5hdGl2
ZVZhbHVlID0geyBzdGF0ZS0+dm0oKSwgdmFsdWUgfTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0QW55QXR0cmli
dXRlKG5hdGl2ZVZhbHVlKTsKIH0KIAogCi12b2lkIHNldEpTVGVzdE9iak11dGFibGVQb2ludChF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0T2JqTXV0
YWJsZVBvaW50KEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGJhc2VPYmplY3QpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpKQotICAgICAgICAgICAg
cmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJtdXRhYmxlUG9p
bnQiKTsKKyAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqc3RhdGUsICJU
ZXN0T2JqIiwgIm11dGFibGVQb2ludCIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJv
d1NldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAibXV0YWJsZVBvaW50Iik7CisgICAg
ICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm11dGFibGVQ
b2ludCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT5pbXBsKCk7CiAgICAgU1ZHUHJvcGVydHlUZWFyT2ZmPFNWR1BvaW50PiogbmF0aXZlVmFs
dWUgPSBKU1NWR1BvaW50Ojp0b1dyYXBwZWQodmFsdWUpOwotICAgIGlmIChVTkxJS0VMWShleGVj
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNldE11dGFibGVQb2ludChuYXRpdmVWYWx1
ZSk7CiB9CiAKIAotdm9pZCBzZXRKU1Rlc3RPYmpJbW11dGFibGVQb2ludChFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0T2JqSW1tdXRhYmxlUG9pbnQo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oYmFz
ZU9iamVjdCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5
cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSkpCi0gICAgICAgICAgICByZXBvcnREZXBy
ZWNhdGVkU2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgImltbXV0YWJsZVBvaW50Iik7Cisg
ICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIs
ICJpbW11dGFibGVQb2ludCIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvd1NldHRl
clR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAiaW1tdXRhYmxlUG9pbnQiKTsKKyAgICAgICAg
ICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiaW1tdXRhYmxlUG9p
bnQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+aW1wbCgpOwogICAgIFNWR1Byb3BlcnR5VGVhck9mZjxTVkdQb2ludD4qIG5hdGl2ZVZhbHVl
ID0gSlNTVkdQb2ludDo6dG9XcmFwcGVkKHZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRJbW11dGFibGVQb2ludChuYXRpdmVWYWx1
ZSk7CiB9CiAKIAotdm9pZCBzZXRKU1Rlc3RPYmpTdHJhd2JlcnJ5KEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBzZXRKU1Rlc3RPYmpTdHJhd2JlcnJ5KEV4ZWNTdGF0
ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGJhc2VPYmplY3Qp
OwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpKQotICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNl
dHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJzdHJhd2JlcnJ5Iik7CisgICAgICAgICAgICBy
ZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJzdHJhd2JlcnJ5
Iik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpleGVj
LCAiVGVzdE9iaiIsICJzdHJhd2JlcnJ5Iik7CisgICAgICAgICAgICB0aHJvd1NldHRlclR5cGVF
cnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInN0cmF3YmVycnkiKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGludCBuYXRp
dmVWYWx1ZSA9IHRvSW50MzIoZXhlYywgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlm
IChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaW50IG5hdGl2ZVZhbHVlID0g
dG9JbnQzMihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRC
bHVlYmVycnkobmF0aXZlVmFsdWUpOwogfQogCiAKLXZvaWQgc2V0SlNUZXN0T2JqU3RyaWN0Rmxv
YXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIHNldEpTVGVzdE9i
alN0cmljdEZsb2F0KEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKGJhc2VPYmplY3QpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpKQotICAgICAgICAg
ICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJzdHJpY3RG
bG9hdCIpOworICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpzdGF0ZSwg
IlRlc3RPYmoiLCAic3RyaWN0RmxvYXQiKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhy
b3dTZXR0ZXJUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInN0cmljdEZsb2F0Iik7CisgICAg
ICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInN0cmljdEZs
b2F0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPmltcGwoKTsKLSAgICBmbG9hdCBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvRmxvYXQoZXhlYyk7
Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBmbG9hdCBuYXRp
dmVWYWx1ZSA9IHZhbHVlLnRvRmxvYXQoc3RhdGUpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXRTdHJpY3RGbG9h
dChuYXRpdmVWYWx1ZSk7CiB9CiAKIAotdm9pZCBzZXRKU1Rlc3RPYmpJZChFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0T2JqSWQoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oYmFzZU9iamVjdCk7CiAg
ICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkg
ewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSkpCi0gICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVy
RXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgImlkIik7CisgICAgICAgICAgICByZXBvcnREZXByZWNh
dGVkU2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJpZCIpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAiaWQiKTsK
KyAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiaWQi
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
aW1wbCgpOwotICAgIGludCBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoZXhlYywgdmFsdWUsIE5vcm1h
bENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaW50IG5hdGl2ZVZhbHVlID0gdG9JbnQzMihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNp
b24pOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm47CiAgICAgaW1wbC5zZXRJZChuYXRpdmVWYWx1ZSk7CiB9CiAKIAotdm9pZCBzZXRKU1Rl
c3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNl
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKK3ZvaWQgc2V0SlNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oYmFzZU9iamVjdCk7CiAg
ICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkg
ewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSkpCi0gICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVy
RXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInJlcGxhY2VhYmxlQXR0cmlidXRlIik7CisgICAgICAg
ICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZXBs
YWNlYWJsZUF0dHJpYnV0ZSIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvd1NldHRl
clR5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAicmVwbGFjZWFibGVBdHRyaWJ1dGUiKTsKKyAg
ICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVwbGFj
ZWFibGVBdHRyaWJ1dGUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAvLyBTaGFkb3dp
bmcgYSBidWlsdC1pbiBvYmplY3QuCi0gICAgY2FzdGVkVGhpcy0+cHV0RGlyZWN0KGV4ZWMtPnZt
KCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgInJlcGxhY2VhYmxlQXR0cmlidXRlIiks
IHZhbHVlKTsKKyAgICBjYXN0ZWRUaGlzLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoc3RhdGUsICJyZXBsYWNlYWJsZUF0dHJpYnV0ZSIpLCB2YWx1ZSk7CiB9
CiAKIAotdm9pZCBzZXRKU1Rlc3RPYmpOdWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0T2JqTnVsbGFi
bGVMb25nU2V0dGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKICAgICBVTlVTRURfUEFSQU0oYmFzZU9iamVjdCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5h
bWljQ2FzdDxKU1Rlc3RPYmpQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSkp
Ci0gICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0T2Jq
IiwgIm51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlIik7CisgICAgICAgICAgICByZXBvcnRE
ZXByZWNhdGVkU2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJudWxsYWJsZUxvbmdTZXR0
YWJsZUF0dHJpYnV0ZSIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvd1NldHRlclR5
cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAibnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUi
KTsKKyAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAi
bnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGludCBuYXRpdmVWYWx1
ZSA9IHRvSW50MzIoZXhlYywgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJ
S0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaW50IG5hdGl2ZVZhbHVlID0gdG9JbnQz
MihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXROdWxsYWJs
ZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZShuYXRpdmVWYWx1ZSk7CiB9CiAKIAotdm9pZCBzZXRKU1Rl
c3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQordm9pZCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGJhc2VPYmplY3QpOwogICAg
IEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
ICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90eXBlKj4oSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpKQotICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVy
cm9yKCpleGVjLCAiVGVzdE9iaiIsICJudWxsYWJsZVN0cmluZ1ZhbHVlIik7CisgICAgICAgICAg
ICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJudWxsYWJs
ZVN0cmluZ1ZhbHVlIik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93U2V0dGVyVHlw
ZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJudWxsYWJsZVN0cmluZ1ZhbHVlIik7CisgICAgICAg
ICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm51bGxhYmxlU3Ry
aW5nVmFsdWUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+aW1wbCgpOwotICAgIGludCBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoZXhlYywgdmFs
dWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaW50IG5hdGl2ZVZhbHVlID0gdG9JbnQzMihzdGF0ZSwgdmFsdWUsIE5vcm1h
bENvbnZlcnNpb24pOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm47CiAgICAgaW1wbC5zZXROdWxsYWJsZVN0cmluZ1ZhbHVlKG5hdGl2ZVZh
bHVlKTsKIH0KIAogCi12b2lkIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1U
eXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBzZXRKU1Rlc3RP
YmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZShFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVj
dCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlm
IChqc0R5bmFtaWNDYXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywg
IlRlc3RPYmoiLCAiYXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUiKTsKKyAgICAgICAgICAg
IHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImF0dHJpYnV0
ZVdpdGhSZXNlcnZlZEVudW1UeXBlIik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93
U2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJhdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRF
bnVtVHlwZSIpOworICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVz
dE9iaiIsICJhdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZSIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgU3RyaW5n
IG5hdGl2ZVZhbHVlID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlm
IChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgU3RyaW5nIG5hdGl2ZVZhbHVl
ID0gdmFsdWUudG9TdHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAobmF0aXZl
VmFsdWUgIT0gIiIgJiYgbmF0aXZlVmFsdWUgIT0gIk9wdGlvbmFsVmFsdWUxIiAmJiBuYXRpdmVW
YWx1ZSAhPSAiT3B0aW9uYWxWYWx1ZTIiICYmIG5hdGl2ZVZhbHVlICE9ICJPcHRpb25hbFZhbHVl
MyIpCiAgICAgICAgIHJldHVybjsKQEAgLTMwNzgsMjQgKzMwNzgsMjQgQEAgdm9pZCBzZXRKU1Rl
c3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiBiYXNlT2IKIH0KIAogCi12b2lkIHNldEpTVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRl
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBzZXRKU1Rlc3RPYmpQ
dXRGb3J3YXJkc0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZU9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
CiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwog
ICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWND
YXN0PEpTVGVzdE9ialByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKSkKLSAg
ICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAi
cHV0Rm9yd2FyZHNBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0
ZXJFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInB1dEZvcndhcmRzQXR0cmlidXRlIik7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdE9i
aiIsICJwdXRGb3J3YXJkc0F0dHJpYnV0ZSIpOworICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBl
RXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJwdXRGb3J3YXJkc0F0dHJpYnV0ZSIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIGF1dG8qIGZvcndhcmRlZEltcGwgPSBjYXN0ZWRUaGlzLT5p
bXBsKCkucHV0Rm9yd2FyZHNBdHRyaWJ1dGUoKTsKICAgICBpZiAoIWZvcndhcmRlZEltcGwpCiAg
ICAgICAgIHJldHVybjsKICAgICBhdXRvJiBpbXBsID0gKmZvcndhcmRlZEltcGw7Ci0gICAgU3Ry
aW5nIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAg
IGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgU3RyaW5nIG5hdGl2ZVZh
bHVlID0gdmFsdWUudG9TdHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsLnNl
dE5hbWUobmF0aXZlVmFsdWUpOwogfQpAQCAtMzEwNiw4NjEgKzMxMDYsODYxIEBAIEpTVmFsdWUg
SlNUZXN0T2JqOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCiAgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdE9iakNvbnN0cnVjdG9y
Pih2bSwganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lk
TWV0aG9kKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0g
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywg
IlRlc3RPYmoiLCAidm9pZE1ldGhvZCIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVy
cm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAidm9pZE1ldGhvZCIpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgaW1wbC52b2lkTWV0aG9kKCk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2RXaXRoQXJn
cyhFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZFdpdGhBcmdzKEV4ZWNTdGF0ZSogc3RhdGUpCiB7
Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhl
YywgIlRlc3RPYmoiLCAidm9pZE1ldGhvZFdpdGhBcmdzIik7CisgICAgICAgIHJldHVybiB0aHJv
d1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ2b2lkTWV0aG9kV2l0aEFyZ3MiKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5m
bygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGlmIChVTkxJ
S0VMWShleGVjLT5hcmd1bWVudENvdW50KCkgPCAzKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgaW50
IGxvbmdBcmcgPSB0b0ludDMyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJz
aW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCisgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Cisg
ICAgaW50IGxvbmdBcmcgPSB0b0ludDMyKHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1h
bENvbnZlcnNpb24pOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIFN0cmlu
ZyBzdHJBcmcgPSBleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7
Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBTdHJpbmcgc3Ry
QXJnID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUpOwor
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIFRlc3RPYmoqIG9iakFyZyA9IEpT
VGVzdE9iajo6dG9XcmFwcGVkKGV4ZWMtPmFyZ3VtZW50KDIpKTsKLSAgICBpZiAoVU5MSUtFTFko
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIFRlc3RPYmoqIG9iakFyZyA9IEpTVGVzdE9iajo6
dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgyKSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgaW1wbC52b2lkTWV0aG9kV2l0aEFyZ3MobG9uZ0FyZywgc3RyQXJnLCBvYmpB
cmcpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25CeXRl
TWV0aG9kKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25CeXRlTWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0g
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywg
IlRlc3RPYmoiLCAiYnl0ZU1ldGhvZCIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVy
cm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiYnl0ZU1ldGhvZCIpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihp
bXBsLmJ5dGVNZXRob2QoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwog
fQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQnl0ZU1ldGhvZFdpdGhBcmdzKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25CeXRlTWV0aG9kV2l0aEFyZ3Mo
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNW
YWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAg
IEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1Zh
bHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhy
b3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJieXRlTWV0aG9kV2l0aEFyZ3MiKTsK
KyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImJ5
dGVNZXRob2RXaXRoQXJncyIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVk
VGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5p
bXBsKCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQotICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKGV4ZWMpKTsKLSAgICBpbnQ4X3QgYnl0ZUFyZyA9IHRvSW50OChleGVjLCBleGVjLT5hcmd1
bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDMp
KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihzdGF0ZSkpOworICAgIGludDhfdCBieXRlQXJnID0gdG9JbnQ4KHN0YXRlLCBz
dGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOworICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwotICAgIFN0cmluZyBzdHJBcmcgPSBleGVjLT5hcmd1bWVudCgxKS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBTdHJpbmcgc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvU3RyaW5n
KHN0YXRlKS0+dmFsdWUoc3RhdGUpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwot
ICAgIFRlc3RPYmoqIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKGV4ZWMtPmFyZ3VtZW50
KDIpKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIFRlc3RP
YmoqIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgyKSk7Cisg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051
bWJlcihpbXBsLmJ5dGVNZXRob2RXaXRoQXJncyhieXRlQXJnLCBzdHJBcmcsIG9iakFyZykpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9jdGV0TWV0aG9kKEV4ZWNT
dGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PY3RldE1ldGhvZChFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBz
dGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwg
Im9jdGV0TWV0aG9kIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRl
LCAiVGVzdE9iaiIsICJvY3RldE1ldGhvZCIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT5pbXBsKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLm9jdGV0
TWV0aG9kKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9jdGV0
TWV0aG9kV2l0aEFyZ3MoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9jdGV0TWV0aG9kV2l0aEFyZ3MoRXhlY1N0
YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgp
OworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlz
VHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJvY3RldE1ldGhvZFdpdGhBcmdzIik7CisgICAg
ICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJvY3RldE1l
dGhvZFdpdGhBcmdzIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlz
LCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwo
KTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMykpCi0gICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
ZXhlYykpOwotICAgIHVpbnQ4X3Qgb2N0ZXRBcmcgPSB0b1VJbnQ4KGV4ZWMsIGV4ZWMtPmFyZ3Vt
ZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMykp
CisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKHN0YXRlKSk7CisgICAgdWludDhfdCBvY3RldEFyZyA9IHRvVUludDgoc3RhdGUs
IHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7Ci0gICAgU3RyaW5nIHN0ckFyZyA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgIFN0cmluZyBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9TdHJp
bmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
Ci0gICAgVGVzdE9iaiogb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoZXhlYy0+YXJndW1l
bnQoMikpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgVGVz
dE9iaiogb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDIpKTsK
KyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
TnVtYmVyKGltcGwub2N0ZXRNZXRob2RXaXRoQXJncyhvY3RldEFyZywgc3RyQXJnLCBvYmpBcmcp
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Mb25nTWV0aG9kKEV4
ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Mb25nTWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoi
LCAibG9uZ01ldGhvZCIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0
ZSwgIlRlc3RPYmoiLCAibG9uZ01ldGhvZCIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT5pbXBsKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmxvbmdN
ZXRob2QoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTG9uZ01l
dGhvZFdpdGhBcmdzKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Mb25nTWV0aG9kV2l0aEFyZ3MoRXhlY1N0YXRl
KiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwor
ICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlw
ZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJsb25nTWV0aG9kV2l0aEFyZ3MiKTsKKyAgICAgICAg
cmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImxvbmdNZXRob2RX
aXRoQXJncyIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNU
ZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0g
ICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQotICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMp
KTsKLSAgICBpbnQgbG9uZ0FyZyA9IHRvSW50MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIE5v
cm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAzKSkKKyAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
c3RhdGUpKTsKKyAgICBpbnQgbG9uZ0FyZyA9IHRvSW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1bWVu
dCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
Ci0gICAgU3RyaW5nIHN0ckFyZyA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IFN0cmluZyBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9TdHJpbmcoc3RhdGUpLT52YWx1
ZShzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgVGVzdE9iaiog
b2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoZXhlYy0+YXJndW1lbnQoMikpOwotICAgIGlm
IChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgVGVzdE9iaiogb2JqQXJnID0g
SlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDIpKTsKKyAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwubG9u
Z01ldGhvZFdpdGhBcmdzKGxvbmdBcmcsIHN0ckFyZywgb2JqQXJnKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2JqTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYykKK0Vu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PYmpN
ZXRob2QoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMt
PnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgp
OwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4o
dGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1
cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJvYmpNZXRob2QiKTsKKyAg
ICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm9iak1l
dGhvZCIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0
T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAg
SlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBX
VEY6OmdldFB0cihpbXBsLm9iak1ldGhvZCgpKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pT
KHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC5vYmpN
ZXRob2QoKSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1l
dGhvZFdpdGhBcmdzKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PYmpNZXRob2RXaXRoQXJncyhFeGVjU3RhdGUq
IHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7Cisg
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBl
RXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm9iak1ldGhvZFdpdGhBcmdzIik7CisgICAgICAgIHJl
dHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJvYmpNZXRob2RXaXRo
QXJncyIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0
T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAg
aWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQotICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsK
LSAgICBpbnQgbG9uZ0FyZyA9IHRvSW50MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIE5vcm1h
bENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAzKSkKKyAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3Rh
dGUpKTsKKyAgICBpbnQgbG9uZ0FyZyA9IHRvSW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgw
KSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0g
ICAgU3RyaW5nIHN0ckFyZyA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIFN0
cmluZyBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9TdHJpbmcoc3RhdGUpLT52YWx1ZShz
dGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgVGVzdE9iaiogb2Jq
QXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoZXhlYy0+YXJndW1lbnQoMikpOwotICAgIGlmIChV
TkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgVGVzdE9iaiogb2JqQXJnID0gSlNU
ZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDIpKTsKKyAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwub2JqTWV0aG9kV2l0aEFyZ3MobG9u
Z0FyZywgc3RyQXJnLCBvYmpBcmcpKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRl
LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC5vYmpNZXRob2RX
aXRoQXJncyhsb25nQXJnLCBzdHJBcmcsIG9iakFyZykpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoU2VxdWVuY2VBcmcoRXhlY1N0YXRlKiBleGVj
KQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhTZXF1ZW5jZUFyZyhFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBz
dGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwg
Im1ldGhvZFdpdGhTZXF1ZW5jZUFyZyIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVy
cm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aFNlcXVlbmNlQXJnIik7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhl
Yy0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhl
YywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIFZlY3RvcjxSZWZQ
dHI8U2NyaXB0UHJvZmlsZT4+IHNlcXVlbmNlQXJnID0gKHRvUmVmUHRyTmF0aXZlQXJyYXk8U2Ny
aXB0UHJvZmlsZSwgSlNTY3JpcHRQcm9maWxlPihleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgJkpT
U2NyaXB0UHJvZmlsZTo6dG9XcmFwcGVkKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihzdGF0ZSkpOworICAgIFZlY3RvcjxSZWZQdHI8U2NyaXB0UHJvZmlsZT4+IHNl
cXVlbmNlQXJnID0gKHRvUmVmUHRyTmF0aXZlQXJyYXk8U2NyaXB0UHJvZmlsZSwgSlNTY3JpcHRQ
cm9maWxlPihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCAmSlNTY3JpcHRQcm9maWxlOjp0b1dy
YXBwZWQpKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhv
ZFdpdGhTZXF1ZW5jZUFyZyhzZXF1ZW5jZUFyZyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFJldHVybmluZ1NlcXVlbmNlKEV4ZWNTdGF0ZSog
ZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RSZXR1cm5pbmdTZXF1ZW5jZShFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0
T2JqIiwgIm1ldGhvZFJldHVybmluZ1NlcXVlbmNlIik7CisgICAgICAgIHJldHVybiB0aHJvd1Ro
aXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJtZXRob2RSZXR1cm5pbmdTZXF1ZW5jZSIp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjpp
bmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaWYgKFVO
TElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBp
bnQgbG9uZ0FyZyA9IHRvSW50MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZl
cnNpb24pOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsK
KyAgICBpbnQgbG9uZ0FyZyA9IHRvSW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9y
bWFsQ29udmVyc2lvbik7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgSlNW
YWx1ZSByZXN1bHQgPSBqc0FycmF5KGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBp
bXBsLm1ldGhvZFJldHVybmluZ1NlcXVlbmNlKGxvbmdBcmcpKTsKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzQXJyYXkoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLm1ldGhv
ZFJldHVybmluZ1NlcXVlbmNlKGxvbmdBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRW51bUFyZyhFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aEVudW1BcmcoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4
ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1
ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2Jq
Kj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICBy
ZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJtZXRob2RXaXRoRW51
bUFyZyIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RP
YmoiLCAibWV0aG9kV2l0aEVudW1BcmciKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+aW1wbCgpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihleGVjKSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICAvLyBLZWVwIHBvaW50ZXIgdG8gdGhlIEpT
U3RyaW5nIGluIGEgbG9jYWwgc28gd2UgZG9uJ3QgbmVlZCB0byByZWYgdGhlIFN0cmluZy4KLSAg
ICBhdXRvKiBlbnVtQXJnU3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7
Ci0gICAgYXV0byYgZW51bUFyZyA9IGVudW1BcmdTdHJpbmctPnZhbHVlKGV4ZWMpOwotICAgIGlm
IChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgYXV0byogZW51bUFyZ1N0cmlu
ZyA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSk7CisgICAgYXV0byYgZW51bUFy
ZyA9IGVudW1BcmdTdHJpbmctPnZhbHVlKHN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBpZiAoZW51bUFyZyAhPSAiIiAmJiBlbnVtQXJnICE9ICJFbnVtVmFsdWUx
IiAmJiBlbnVtQXJnICE9ICJFbnVtVmFsdWUyIiAmJiBlbnVtQXJnICE9ICJFbnVtVmFsdWUzIikK
LSAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoKmV4ZWMsIDAsICJl
bnVtQXJnIiwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aEVudW1BcmciLCAiXCJcIiwgXCJFbnVtVmFs
dWUxXCIsIFwiRW51bVZhbHVlMlwiLCBcIkVudW1WYWx1ZTNcIiIpOworICAgICAgICByZXR1cm4g
dGhyb3dBcmd1bWVudE11c3RCZUVudW1FcnJvcigqc3RhdGUsIDAsICJlbnVtQXJnIiwgIlRlc3RP
YmoiLCAibWV0aG9kV2l0aEVudW1BcmciLCAiXCJcIiwgXCJFbnVtVmFsdWUxXCIsIFwiRW51bVZh
bHVlMlwiLCBcIkVudW1WYWx1ZTNcIiIpOwogICAgIGltcGwubWV0aG9kV2l0aEVudW1BcmcoZW51
bUFyZyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhPcHRpb25hbEVudW1BcmdBbmREZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiBleGVjKQor
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhPcHRpb25hbEVudW1BcmdBbmREZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSkK
IHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFs
dWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVk
VGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpl
eGVjLCAiVGVzdE9iaiIsICJtZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJnQW5kRGVmYXVsdFZhbHVl
Iik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIs
ICJtZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJnQW5kRGVmYXVsdFZhbHVlIik7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKIAotICAgIHNpemVfdCBhcmdzQ291bnQg
PSBleGVjLT5hcmd1bWVudENvdW50KCk7CisgICAgc2l6ZV90IGFyZ3NDb3VudCA9IHN0YXRlLT5h
cmd1bWVudENvdW50KCk7CiAgICAgaWYgKGFyZ3NDb3VudCA8PSAwKSB7CiAgICAgICAgIGltcGwu
bWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZ0FuZERlZmF1bHRWYWx1ZSgpOwogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIAogICAgIFN0cmluZyBl
bnVtQXJnOwotICAgIGlmIChleGVjLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpKQorICAgIGlm
IChzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSkKICAgICAgICAgZW51bUFyZyA9IEFT
Q0lJTGl0ZXJhbCgiRW51bVZhbHVlMSIpOwogICAgIGVsc2UgewotICAgICAgICBlbnVtQXJnID0g
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICBlbnVt
QXJnID0gc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUo
c3RhdGUpOworICAgICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAg
IGlmIChlbnVtQXJnICE9ICIiICYmIGVudW1BcmcgIT0gIkVudW1WYWx1ZTEiICYmIGVudW1Bcmcg
IT0gIkVudW1WYWx1ZTIiICYmIGVudW1BcmcgIT0gIkVudW1WYWx1ZTMiKQotICAgICAgICAgICAg
cmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoKmV4ZWMsIDAsICJlbnVtQXJnIiwg
IlRlc3RPYmoiLCAibWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZ0FuZERlZmF1bHRWYWx1ZSIsICJc
IlwiLCBcIkVudW1WYWx1ZTFcIiwgXCJFbnVtVmFsdWUyXCIsIFwiRW51bVZhbHVlM1wiIik7Cisg
ICAgICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUVudW1FcnJvcigqc3RhdGUsIDAs
ICJlbnVtQXJnIiwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZ0FuZERlZmF1
bHRWYWx1ZSIsICJcIlwiLCBcIkVudW1WYWx1ZTFcIiwgXCJFbnVtVmFsdWUyXCIsIFwiRW51bVZh
bHVlM1wiIik7CiAgICAgfQogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZ0FuZERl
ZmF1bHRWYWx1ZShlbnVtQXJnKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyhFeGVjU3RhdGUq
IGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyhFeGVjU3RhdGUqIHN0YXRl
KQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3Io
KmV4ZWMsICJUZXN0T2JqIiwgIm1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MiKTsK
KyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm1l
dGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENv
dW50KCkgPCAyKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1
bWVudENvdW50KCkgPCAyKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKLSAgICBTdHJpbmcgc3RyQXJnID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgU3RyaW5nIHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSkt
PnZhbHVlKHN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBUZXN0
T2JqKiBvYmpBcmcgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChleGVjLT5hcmd1bWVudCgxKSk7Ci0g
ICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBUZXN0T2JqKiBvYmpB
cmcgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoMSkpOworICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC5tZXRob2RUaGF0UmVx
dWlyZXNBbGxBcmdzQW5kVGhyb3dzKHN0ckFyZywgb2JqQXJnLCBlYykpKTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6Omdl
dFB0cihpbXBsLm1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3Moc3RyQXJnLCBvYmpB
cmcsIGVjKSkpOwogCi0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBzZXRET01F
eGNlcHRpb24oc3RhdGUsIGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25TZXJpYWxpemVkVmFsdWUoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZShFeGVj
U3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVl
KCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUp
OwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1Ro
aXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInNlcmlhbGl6ZWRWYWx1ZSIpOworICAgICAg
ICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAic2VyaWFsaXpl
ZFZhbHVlIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rl
c3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAg
ICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykp
OwotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRBcmcgPSBTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgMCwgMCk7
Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOworICAgIFJl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRBcmcgPSBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmNyZWF0ZShzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCAwLCAwKTsKKyAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLnNlcmlhbGl6ZWRWYWx1ZShzZXJp
YWxpemVkQXJnKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
fQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3B0aW9uc09iamVjdChFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3B0aW9uc09iamVjdChFeGVjU3RhdGUq
IHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7Cisg
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBl
RXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm9wdGlvbnNPYmplY3QiKTsKKyAgICAgICAgcmV0dXJu
IHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm9wdGlvbnNPYmplY3QiKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5m
bygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGlmIChVTkxJ
S0VMWShleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgRGlj
dGlvbmFyeSBvbyA9IHsgZXhlYywgZXhlYy0+YXJndW1lbnQoMCkgfTsKLSAgICBpZiAoVU5MSUtF
TFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CisgICAgRGljdGlvbmFyeSBvbyA9IHsg
c3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSB9OworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwotICAgIERpY3Rpb25hcnkgb29vID0geyBleGVjLCBleGVjLT5hcmd1bWVudCgxKSB9Owot
ICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgRGljdGlvbmFyeSBv
b28gPSB7IHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMSkgfTsKKyAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBpbXBsLm9wdGlvbnNPYmplY3Qob28sIG9vbyk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb24o
RXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSkKIHsK
LSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVj
LCAiVGVzdE9iaiIsICJtZXRob2RXaXRoRXhjZXB0aW9uIik7CisgICAgICAgIHJldHVybiB0aHJv
d1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJtZXRob2RXaXRoRXhjZXB0aW9uIik7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6Omlu
Zm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKICAgICBpbXBsLm1ldGhvZFdpdGhFeGNlcHRpb24oZWMpOwotICAgIHNl
dERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1l
dGhvZChFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0g
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywg
IlRlc3RPYmoiLCAiY3VzdG9tTWV0aG9kIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBl
RXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJjdXN0b21NZXRob2QiKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmN1c3RvbU1ldGhvZChleGVjKSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5jdXN0b21NZXRob2Qoc3RhdGUpKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbkN1c3RvbU1ldGhvZFdpdGhBcmdzKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2RXaXRo
QXJncyhFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+
dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7
CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0
aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVy
biB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgImN1c3RvbU1ldGhvZFdpdGhB
cmdzIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9i
aiIsICJjdXN0b21NZXRob2RXaXRoQXJncyIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoY2FzdGVkVGhpcy0+Y3VzdG9tTWV0aG9kV2l0aEFyZ3MoZXhlYykpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+Y3VzdG9tTWV0aG9kV2l0aEFyZ3Moc3RhdGUp
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkFkZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkFkZEV2ZW50TGlzdGVuZXIo
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNW
YWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAg
IEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1Zh
bHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhy
b3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJhZGRFdmVudExpc3RlbmVyIik7Cisg
ICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJhZGRF
dmVudExpc3RlbmVyIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlz
LCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwo
KTsKLSAgICBKU1ZhbHVlIGxpc3RlbmVyID0gZXhlYy0+YXJndW1lbnQoMSk7CisgICAgSlNWYWx1
ZSBsaXN0ZW5lciA9IHN0YXRlLT5hcmd1bWVudCgxKTsKICAgICBpZiAoVU5MSUtFTFkoIWxpc3Rl
bmVyLmlzT2JqZWN0KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwotICAgIGltcGwuYWRkRXZlbnRMaXN0ZW5lcihleGVjLT5hcmd1bWVudCgwKS50b1N0
cmluZyhleGVjKS0+dG9BdG9taWNTdHJpbmcoZXhlYyksIGNyZWF0ZUpTRXZlbnRMaXN0ZW5lckZv
ckFkZCgqZXhlYywgKmFzT2JqZWN0KGxpc3RlbmVyKSwgKmNhc3RlZFRoaXMpLCBleGVjLT5hcmd1
bWVudCgyKS50b0Jvb2xlYW4oZXhlYykpOworICAgIGltcGwuYWRkRXZlbnRMaXN0ZW5lcihzdGF0
ZS0+YXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0F0b21pY1N0cmluZyhzdGF0ZSksIGNy
ZWF0ZUpTRXZlbnRMaXN0ZW5lckZvckFkZCgqc3RhdGUsICphc09iamVjdChsaXN0ZW5lciksICpj
YXN0ZWRUaGlzKSwgc3RhdGUtPmFyZ3VtZW50KDIpLnRvQm9vbGVhbihzdGF0ZSkpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25SZW1vdmVFdmVudExpc3Rl
bmVyKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25SZW1vdmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogc3RhdGUp
CiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigq
ZXhlYywgIlRlc3RPYmoiLCAicmVtb3ZlRXZlbnRMaXN0ZW5lciIpOworICAgICAgICByZXR1cm4g
dGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVtb3ZlRXZlbnRMaXN0ZW5l
ciIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2Jq
OjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgSlNW
YWx1ZSBsaXN0ZW5lciA9IGV4ZWMtPmFyZ3VtZW50KDEpOworICAgIEpTVmFsdWUgbGlzdGVuZXIg
PSBzdGF0ZS0+YXJndW1lbnQoMSk7CiAgICAgaWYgKFVOTElLRUxZKCFsaXN0ZW5lci5pc09iamVj
dCgpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAg
ICBpbXBsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
YyktPnRvQXRvbWljU3RyaW5nKGV4ZWMpLCBjcmVhdGVKU0V2ZW50TGlzdGVuZXJGb3JSZW1vdmUo
KmV4ZWMsICphc09iamVjdChsaXN0ZW5lciksICpjYXN0ZWRUaGlzKS5wdHIoKSwgZXhlYy0+YXJn
dW1lbnQoMikudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBpbXBsLnJlbW92ZUV2ZW50TGlzdGVuZXIo
c3RhdGUtPmFyZ3VtZW50KDApLnRvU3RyaW5nKHN0YXRlKS0+dG9BdG9taWNTdHJpbmcoc3RhdGUp
LCBjcmVhdGVKU0V2ZW50TGlzdGVuZXJGb3JSZW1vdmUoKnN0YXRlLCAqYXNPYmplY3QobGlzdGVu
ZXIpLCAqY2FzdGVkVGhpcykucHRyKCksIHN0YXRlLT5hcmd1bWVudCgyKS50b0Jvb2xlYW4oc3Rh
dGUpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0
aFNjcmlwdFN0YXRlVm9pZChFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlVm9pZChFeGVj
U3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVl
KCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUp
OwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1Ro
aXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRTdGF0ZVZvaWQiKTsKKyAg
ICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIndpdGhT
Y3JpcHRTdGF0ZVZvaWQiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRo
aXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1w
bCgpOwotICAgIGltcGwud2l0aFNjcmlwdFN0YXRlVm9pZChleGVjKTsKKyAgICBpbXBsLndpdGhT
Y3JpcHRTdGF0ZVZvaWQoKnN0YXRlKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlT2JqKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2Ny
aXB0U3RhdGVPYmooRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNW
YWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAg
ICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0
U3RhdGVPYmoiKTsKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJU
ZXN0T2JqIiwgIndpdGhTY3JpcHRTdGF0ZU9iaiIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLndpdGhTY3JpcHRTdGF0ZU9i
aihleGVjKSkpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
SlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
V1RGOjpnZXRQdHIoaW1wbC53aXRoU2NyaXB0U3RhdGVPYmooKnN0YXRlKSkpOworICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbldpdGhTY3JpcHRTdGF0ZVZvaWRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjKQorRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhT
Y3JpcHRTdGF0ZVZvaWRFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
c3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIs
ICJ3aXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9uIik7CisgICAgICAgIHJldHVybiB0aHJvd1Ro
aXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0
aW9uIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RP
Ymo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsLndpdGhTY3JpcHRTdGF0ZVZvaWRFeGNlcHRp
b24oZXhlYywgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgaW1wbC53
aXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9uKCpzdGF0ZSwgZWMpOworICAgIHNldERPTUV4Y2Vw
dGlvbihzdGF0ZSwgZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjKQorRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhT
Y3JpcHRTdGF0ZU9iakV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBz
dGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwg
IndpdGhTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbiIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlz
VHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9u
Iik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6
OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwud2l0aFNjcmlwdFN0YXRlT2Jq
RXhjZXB0aW9uKGV4ZWMsIGVjKSkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwg
Y2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwud2l0aFNjcmlwdFN0
YXRlT2JqRXhjZXB0aW9uKCpzdGF0ZSwgZWMpKSk7CiAKLSAgICBzZXRET01FeGNlcHRpb24oZXhl
YywgZWMpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgc2V0
RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0KEV4
ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFs
dWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1
ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93
VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQiKTsKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2Jq
IiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0Iik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBhdXRvKiBzY3JpcHRDb250ZXh0ID0ganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOworICAgIGF1dG8qIHNjcmlwdENvbnRleHQgPSBqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOwogICAgIGlmICghc2NyaXB0Q29udGV4dCkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLndpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXh0KHNjcmlwdENvbnRleHQpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRl
KEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRl
KEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlz
VmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNW
YWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRo
cm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBbmRTY3JpcHRTdGF0ZSIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9y
KCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRT
dGF0ZSIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0
T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAg
YXV0byogc2NyaXB0Q29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBhdXRv
KiBzY3JpcHRDb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIXNj
cmlwdENvbnRleHQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7Ci0gICAgaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlKGV4
ZWMsIHNjcmlwdENvbnRleHQpOworICAgIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
bmRTY3JpcHRTdGF0ZSgqc3RhdGUsIHNjcmlwdENvbnRleHQpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFu
ZFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCiB7
Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhl
YywgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZU9i
akV4Y2VwdGlvbiIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwg
IlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZU9iakV4
Y2VwdGlvbiIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNU
ZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgYXV0byogc2NyaXB0Q29udGV4dCA9IGpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBhdXRvKiBzY3JpcHRDb250ZXh0ID0ganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIXNjcmlwdENvbnRleHQpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0
b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLndp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oZXhlYywg
c2NyaXB0Q29udGV4dCwgZWMpKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC53aXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uKCpzdGF0ZSwgc2NyaXB0Q29u
dGV4dCwgZWMpKSk7CiAKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgIGlmIChV
TkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRl
LCBlYyk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3Jp
cHRTdGF0ZVdpdGhTcGFjZXMoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RP
YmoiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXMi
KTsKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwg
IndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzIik7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8o
KSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBhdXRvKiBzY3Jp
cHRDb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGF1dG8qIHNjcmlwdENv
bnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghc2NyaXB0Q29udGV4
dCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdU
Rjo6Z2V0UHRyKGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdp
dGhTcGFjZXMoZXhlYywgc2NyaXB0Q29udGV4dCkpKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwud2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXMoKnN0YXRlLCBzY3JpcHRDb250ZXh0KSkp
OworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2soRXhlY1N0
YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbldpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2soRXhlY1N0YXRlKiBzdGF0
ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9y
KCpleGVjLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrIik7Cisg
ICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRo
U2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPmltcGwoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+
IHNjcmlwdEFyZ3VtZW50cyhJbnNwZWN0b3I6OmNyZWF0ZVNjcmlwdEFyZ3VtZW50cyhleGVjLCAw
KSk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiBzY3JpcHRBcmd1bWVu
dHMoSW5zcGVjdG9yOjpjcmVhdGVTY3JpcHRBcmd1bWVudHMoc3RhdGUsIDApKTsKICAgICBpbXBs
LndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2soc2NyaXB0QXJndW1lbnRzLnJlbGVhc2Uo
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhPcHRpb25hbEFyZyhFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXJnKEV4
ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFs
dWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1
ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93
VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAibWV0aG9kV2l0aE9wdGlvbmFsQXJnIik7
CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJt
ZXRob2RXaXRoT3B0aW9uYWxBcmciKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNh
c3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+aW1wbCgpOwogCi0gICAgc2l6ZV90IGFyZ3NDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQo
KTsKKyAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RhdGUtPmFyZ3VtZW50Q291bnQoKTsKICAgICBp
ZiAoYXJnc0NvdW50IDw9IDApIHsKICAgICAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxBcmco
KTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9
CiAKLSAgICBpbnQgb3B0ID0gdG9JbnQzMihleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgTm9ybWFs
Q29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpbnQgb3B0ID0gdG9JbnQzMihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252
ZXJzaW9uKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhv
ZFdpdGhPcHRpb25hbEFyZyhvcHQpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmdBbmREZWZhdWx0VmFsdWUoRXhlY1N0
YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFyZ0FuZERlZmF1bHRWYWx1ZShFeGVjU3RhdGUq
IHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7Cisg
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBl
RXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm1ldGhvZFdpdGhPcHRpb25hbEFyZ0FuZERlZmF1bHRW
YWx1ZSIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RP
YmoiLCAibWV0aG9kV2l0aE9wdGlvbmFsQXJnQW5kRGVmYXVsdFZhbHVlIik7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKIAotICAgIHNpemVfdCBhcmdzQ291bnQg
PSBleGVjLT5hcmd1bWVudENvdW50KCk7CisgICAgc2l6ZV90IGFyZ3NDb3VudCA9IHN0YXRlLT5h
cmd1bWVudENvdW50KCk7CiAgICAgaWYgKGFyZ3NDb3VudCA8PSAwKSB7CiAgICAgICAgIGltcGwu
bWV0aG9kV2l0aE9wdGlvbmFsQXJnQW5kRGVmYXVsdFZhbHVlKCk7CiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCi0gICAgaW50IG9wdCA9IGV4
ZWMtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyA2NjYgOiB0b0ludDMyKGV4ZWMsIGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtF
TFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGludCBvcHQgPSBzdGF0ZS0+YXJndW1lbnQo
MCkuaXNVbmRlZmluZWQoKSA/IDY2NiA6IHRvSW50MzIoc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRB
cmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxBcmdBbmREZWZhdWx0VmFsdWUob3B0
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcoRXhlY1N0YXRlKiBleGVjKQorRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRl
c3RPYmoiLCAibWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmciKTsKKyAgICAg
ICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm1ldGhvZFdp
dGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIGludCBub25PcHQgPSB0b0ludDMyKGV4ZWMs
IGV4ZWMtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFko
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CisgICAgaW50IG5vbk9wdCA9IHRvSW50MzIo
c3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAKLSAgICBzaXplX3QgYXJnc0NvdW50ID0gZXhlYy0+YXJn
dW1lbnRDb3VudCgpOworICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpOwogICAgIGlmIChhcmdzQ291bnQgPD0gMSkgewogICAgICAgICBpbXBsLm1ldGhvZFdpdGhO
b25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnKG5vbk9wdCk7CiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCi0gICAgaW50IG9wdCA9IHRvSW50
MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMSksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChV
TkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaW50IG9wdCA9IHRvSW50MzIoc3Rh
dGUsIHN0YXRlLT5hcmd1bWVudCgxKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRP
cHRpb25hbEFyZyhub25PcHQsIG9wdCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJn
cyhFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxB
cmdzKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50
aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsK
ICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRo
aXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJu
IHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAibWV0aG9kV2l0aE5vbk9wdGlv
bmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBl
RXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJtZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29P
cHRpb25hbEFyZ3MiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMs
IEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgp
OwotICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihl
eGVjKSk7Ci0gICAgaW50IG5vbk9wdCA9IHRvSW50MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCks
IE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKKyAgICBpbnQgbm9uT3B0ID0gdG9JbnQzMihzdGF0ZSwgc3RhdGUtPmFyZ3Vt
ZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIAotICAgIHNpemVfdCBhcmdzQ291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7CisgICAg
c2l6ZV90IGFyZ3NDb3VudCA9IHN0YXRlLT5hcmd1bWVudENvdW50KCk7CiAgICAgaWYgKGFyZ3ND
b3VudCA8PSAxKSB7CiAgICAgICAgIGltcGwubWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdv
T3B0aW9uYWxBcmdzKG5vbk9wdCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgfQogCi0gICAgaW50IG9wdDEgPSB0b0ludDMyKGV4ZWMsIGV4ZWMt
PmFyZ3VtZW50KDEpLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIGludCBvcHQxID0gdG9JbnQzMihzdGF0ZSwgc3RhdGUtPmFy
Z3VtZW50KDEpLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBpZiAoYXJnc0NvdW50IDw9IDIpIHsKICAgICAgICAgaW1wbC5tZXRob2RXaXRo
Tm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3Mobm9uT3B0LCBvcHQxKTsKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKLSAgICBpbnQg
b3B0MiA9IHRvSW50MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMiksIE5vcm1hbENvbnZlcnNpb24p
OwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaW50IG9wdDIg
PSB0b0ludDMyKHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMiksIE5vcm1hbENvbnZlcnNpb24pOwor
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE5vbk9w
dGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzKG5vbk9wdCwgb3B0MSwgb3B0Mik7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25h
bFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nKEV4ZWNTdGF0
ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsK
KyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5
cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAibWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nIik7Cisg
ICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJtZXRo
b2RXaXRoT3B0aW9uYWxTdHJpbmciKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNh
c3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+aW1wbCgpOwogCi0gICAgc2l6ZV90IGFyZ3NDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQo
KTsKKyAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RhdGUtPmFyZ3VtZW50Q291bnQoKTsKICAgICBp
ZiAoYXJnc0NvdW50IDw9IDApIHsKICAgICAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxTdHJp
bmcoKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICB9CiAKLSAgICBTdHJpbmcgc3RyID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgU3RyaW5nIHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnZhbHVl
KHN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhv
ZFdpdGhPcHRpb25hbFN0cmluZyhzdHIpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdBbmREZWZhdWx0VmFsdWUo
RXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0FuZERlZmF1bHRWYWx1ZShF
eGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1Zh
bHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFs
dWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJv
d1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm1ldGhvZFdpdGhPcHRpb25hbFN0cmlu
Z0FuZERlZmF1bHRWYWx1ZSIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nQW5kRGVmYXVsdFZhbHVl
Iik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6
OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKIAotICAgIHNp
emVfdCBhcmdzQ291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7CisgICAgc2l6ZV90IGFyZ3ND
b3VudCA9IHN0YXRlLT5hcmd1bWVudENvdW50KCk7CiAgICAgaWYgKGFyZ3NDb3VudCA8PSAwKSB7
CiAgICAgICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nQW5kRGVmYXVsdFZhbHVlKCk7
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQog
Ci0gICAgU3RyaW5nIHN0ciA9IGV4ZWMtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyAiZm9v
IiA6IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIFN0cmluZyBz
dHIgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/ICJmb28iIDogc3RhdGUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUpOworICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsU3Ry
aW5nQW5kRGVmYXVsdFZhbHVlKHN0cik7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzVW5kZWZpbmVkKEV4ZWNT
dGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc1VuZGVmaW5lZChFeGVjU3RhdGUq
IHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7Cisg
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBl
RXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzVW5kZWZp
bmVkIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9i
aiIsICJtZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc1VuZGVmaW5lZCIpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgU3RyaW5nIHN0ciA9IGV4ZWMtPmFy
Z3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFko
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIFN0cmluZyBzdHIgPSBzdGF0ZS0+YXJndW1lbnQo
MCkudG9TdHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc1VuZGVmaW5lZChz
dHIpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxTdHJpbmdJc051bGxTdHJpbmcoRXhlY1N0YXRlKiBleGVjKQorRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbFN0cmluZ0lzTnVsbFN0cmluZyhFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0
T2JqIiwgIm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzTnVsbFN0cmluZyIpOworICAgICAgICBy
ZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aE9w
dGlvbmFsU3RyaW5nSXNOdWxsU3RyaW5nIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
UyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPmltcGwoKTsKLSAgICBTdHJpbmcgc3RyID0gZXhlYy0+YXJndW1lbnQoMCkuaXNVbmRl
ZmluZWQoKSA/IFN0cmluZygpIDogZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgU3RyaW5nIHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8g
U3RyaW5nKCkgOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT52
YWx1ZShzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5t
ZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc051bGxTdHJpbmcoc3RyKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQXJnKEV4
ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tBcmcoRXhlY1N0YXRlKiBzdGF0ZSkKIHsK
LSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVj
LCAiVGVzdE9iaiIsICJtZXRob2RXaXRoQ2FsbGJhY2tBcmciKTsKKyAgICAgICAgcmV0dXJuIHRo
cm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm1ldGhvZFdpdGhDYWxsYmFja0Fy
ZyIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2Jq
OjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaWYg
KFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAg
ICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiB0aHJv
d0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcigqZXhlYywgMCwgImNhbGxiYWNrIiwgIlRlc3RP
YmoiLCAibWV0aG9kV2l0aENhbGxiYWNrQXJnIik7Ci0gICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4g
Y2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpOworICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CisgICAg
aWYgKCFzdGF0ZS0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIHRocm93
QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpzdGF0ZSwgMCwgImNhbGxiYWNrIiwgIlRlc3RP
YmoiLCAibWV0aG9kV2l0aENhbGxiYWNrQXJnIik7CisgICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4g
Y2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KHN0YXRlLT51bmNoZWNr
ZWRBcmd1bWVudCgwKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKICAgICBpbXBsLm1l
dGhvZFdpdGhDYWxsYmFja0FyZyhjYWxsYmFjayk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNr
QXJnKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Fy
ZyhFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhp
c1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAg
ICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlz
VmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0
aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm1ldGhvZFdpdGhOb25DYWxsYmFj
a0FyZ0FuZENhbGxiYWNrQXJnIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3Io
KnN0YXRlLCAiVGVzdE9iaiIsICJtZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Fy
ZyIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2Jq
OjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaWYg
KFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQotICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAg
ICBpbnQgbm9uQ2FsbGJhY2sgPSB0b0ludDMyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBOb3Jt
YWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7CisgICAgaW50IG5vbkNhbGxiYWNrID0gdG9JbnQzMihzdGF0ZSwgc3RhdGUtPmFyZ3Vt
ZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKLSAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDEpLmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVy
biB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcigqZXhlYywgMSwgImNhbGxiYWNrIiwg
IlRlc3RPYmoiLCAibWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmciKTsKLSAg
ICBSZWZQdHI8VGVzdENhbGxiYWNrPiBjYWxsYmFjayA9IEpTVGVzdENhbGxiYWNrOjpjcmVhdGUo
YXNPYmplY3QoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSk7CisgICAgaWYgKCFzdGF0ZS0+YXJndW1lbnQoMSkuaXNPYmplY3QoKSkKKyAgICAg
ICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpzdGF0ZSwgMSwgImNh
bGxiYWNrIiwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tB
cmciKTsKKyAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiBjYWxsYmFjayA9IEpTVGVzdENhbGxiYWNr
OjpjcmVhdGUoYXNPYmplY3Qoc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKSwgY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCkpOwogICAgIGltcGwubWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5k
Q2FsbGJhY2tBcmcobm9uQ2FsbGJhY2ssIGNhbGxiYWNrKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxB
cmcoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnKEV4ZWNT
dGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUo
KTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7
CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhp
c1R5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAibWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9u
YWxBcmciKTsKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0
T2JqIiwgIm1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnIik7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiBj
YWxsYmFjazsKLSAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkp
IHsKLSAgICAgICAgaWYgKCFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc09iamVjdCgpKQot
ICAgICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpleGVj
LCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iaiIsICJtZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25h
bEFyZyIpOwotICAgICAgICBjYWxsYmFjayA9IEpTVGVzdENhbGxiYWNrOjpjcmVhdGUoYXNPYmpl
Y3QoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSk7CisgICAgaWYgKCFzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkgewor
ICAgICAgICBpZiAoIXN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc09iamVjdCgpKQorICAg
ICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpzdGF0ZSwg
MCwgImNhbGxiYWNrIiwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxB
cmciKTsKKyAgICAgICAgY2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0
KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
KTsKICAgICB9CiAgICAgaW1wbC5tZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyhjYWxs
YmFjayk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQXJnKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2Fs
bGJhY2tGdW5jdGlvbkFyZyhFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+
dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0g
ICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm1ldGhv
ZFdpdGhDYWxsYmFja0Z1bmN0aW9uQXJnIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBl
RXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJtZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFyZyIp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjpp
bmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaWYgKFVO
TElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBp
ZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzRnVuY3Rpb24oKSkKLSAgICAgICAgcmV0dXJuIHRocm93
QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpleGVjLCAwLCAiY2FsbGJhY2siLCAiVGVzdE9i
aiIsICJtZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFyZyIpOwotICAgIFJlZlB0cjxUZXN0Q2Fs
bGJhY2tGdW5jdGlvbj4gY2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGUo
YXNPYmplY3QoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
KyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3Ioc3RhdGUpKTsKKyAgICBpZiAoIXN0YXRlLT5hcmd1bWVudCgwKS5pc0Z1bmN0aW9u
KCkpCisgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcigqc3Rh
dGUsIDAsICJjYWxsYmFjayIsICJUZXN0T2JqIiwgIm1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9u
QXJnIik7CisgICAgUmVmUHRyPFRlc3RDYWxsYmFja0Z1bmN0aW9uPiBjYWxsYmFjayA9IEpTVGVz
dENhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZShhc09iamVjdChzdGF0ZS0+dW5jaGVja2VkQXJndW1l
bnQoMCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRo
Q2FsbGJhY2tGdW5jdGlvbkFyZyhjYWxsYmFjayk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNr
RnVuY3Rpb25BcmcoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENh
bGxiYWNrRnVuY3Rpb25BcmcoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUt
PnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8
SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQot
ICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJtZXRo
b2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJnIik7CisgICAgICAgIHJl
dHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJtZXRob2RXaXRoTm9u
Q2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJnIik7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRD
b3VudCgpIDwgMikpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIGludCBub25DYWxsYmFjayA9IHRvSW50
MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChV
TkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5h
cmd1bWVudENvdW50KCkgPCAyKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAgICBpbnQgbm9uQ2FsbGJh
Y2sgPSB0b0ludDMyKHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24p
OworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGlmICghZXhlYy0+YXJndW1l
bnQoMSkuaXNGdW5jdGlvbigpKQotICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUZ1
bmN0aW9uRXJyb3IoKmV4ZWMsIDEsICJjYWxsYmFjayIsICJUZXN0T2JqIiwgIm1ldGhvZFdpdGhO
b25DYWxsYmFja0FyZ0FuZENhbGxiYWNrRnVuY3Rpb25BcmciKTsKLSAgICBSZWZQdHI8VGVzdENh
bGxiYWNrRnVuY3Rpb24+IGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRl
KGFzT2JqZWN0KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKSwgY2FzdGVkVGhpcy0+Z2xvYmFs
T2JqZWN0KCkpOworICAgIGlmICghc3RhdGUtPmFyZ3VtZW50KDEpLmlzRnVuY3Rpb24oKSkKKyAg
ICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpzdGF0ZSwgMSwg
ImNhbGxiYWNrIiwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJh
Y2tGdW5jdGlvbkFyZyIpOworICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2tGdW5jdGlvbj4gY2FsbGJh
Y2sgPSBKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGUoYXNPYmplY3Qoc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDEpKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpOwogICAgIGltcGwu
bWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tGdW5jdGlvbkFyZyhub25DYWxsYmFj
aywgY2FsbGJhY2spOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFuZE9wdGlvbmFsQXJnKEV4ZWNTdGF0ZSog
ZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFuZE9wdGlvbmFsQXJnKEV4ZWNTdGF0ZSog
c3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAg
ICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7CiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVF
cnJvcigqZXhlYywgIlRlc3RPYmoiLCAibWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BbmRPcHRp
b25hbEFyZyIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRl
c3RPYmoiLCAibWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BbmRPcHRpb25hbEFyZyIpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgUmVmUHRyPFRlc3RD
YWxsYmFja0Z1bmN0aW9uPiBjYWxsYmFjazsKLSAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlz
VW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgaWYgKCFleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgwKS5pc0Z1bmN0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RC
ZUZ1bmN0aW9uRXJyb3IoKmV4ZWMsIDAsICJjYWxsYmFjayIsICJUZXN0T2JqIiwgIm1ldGhvZFdp
dGhDYWxsYmFja0Z1bmN0aW9uQW5kT3B0aW9uYWxBcmciKTsKLSAgICAgICAgY2FsbGJhY2sgPSBK
U1Rlc3RDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGUoYXNPYmplY3QoZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7CisgICAgaWYgKCFzdGF0ZS0+
YXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgICAgICBpZiAoIXN0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgwKS5pc0Z1bmN0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gdGhy
b3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IoKnN0YXRlLCAwLCAiY2FsbGJhY2siLCAiVGVz
dE9iaiIsICJtZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFuZE9wdGlvbmFsQXJnIik7CisgICAg
ICAgIGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKGFzT2JqZWN0KHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsK
ICAgICB9CiAgICAgaW1wbC5tZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFuZE9wdGlvbmFsQXJn
KGNhbGxiYWNrKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
fQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVu
Y3Rpb25TdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyhFeGVjU3RhdGUqIGV4
ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVu
Y3Rpb25TdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyhFeGVjU3RhdGUqIHN0
YXRlKQogewogICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2s+IGNhbGxiYWNrOwotICAgIGlmICghZXhl
Yy0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAgICBpZiAoIWV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzT2JqZWN0KCkpCi0gICAgICAgICAgICByZXR1cm4gdGhy
b3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IoKmV4ZWMsIDAsICJjYWxsYmFjayIsICJUZXN0
T2JqIiwgInN0YXRpY01ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnIik7Ci0gICAgICAg
IGNhbGxiYWNrID0gY3JlYXRlRnVuY3Rpb25Pbmx5Q2FsbGJhY2s8SlNUZXN0Q2FsbGJhY2s+KGV4
ZWMsIGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSksIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoIXN0YXRlLT5hcmd1bWVu
dCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgIGlmICghc3RhdGUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApLmlzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVu
dE11c3RCZUZ1bmN0aW9uRXJyb3IoKnN0YXRlLCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iaiIsICJz
dGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyIpOworICAgICAgICBjYWxsYmFj
ayA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpTVGVzdENhbGxiYWNrPihzdGF0ZSwganND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgfQogICAgIFRlc3RPYmo6OnN0YXRpY01l
dGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnKGNhbGxiYWNrKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25TdGF0aWNNZXRob2RXaXRoQ2FsbGJh
Y2tBcmcoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uU3RhdGljTWV0aG9kV2l0aENhbGxiYWNrQXJnKEV4ZWNT
dGF0ZSogc3RhdGUpCiB7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0
KCkpCi0gICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcigqZXhl
YywgMCwgImNhbGxiYWNrIiwgIlRlc3RPYmoiLCAic3RhdGljTWV0aG9kV2l0aENhbGxiYWNrQXJn
Iik7Ci0gICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4gY2FsbGJhY2sgPSBjcmVhdGVGdW5jdGlvbk9u
bHlDYWxsYmFjazxKU1Rlc3RDYWxsYmFjaz4oZXhlYywganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSwgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQo
MCkpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKHN0YXRlKSk7CisgICAgaWYgKCFzdGF0ZS0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSkKKyAg
ICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpzdGF0ZSwgMCwg
ImNhbGxiYWNrIiwgIlRlc3RPYmoiLCAic3RhdGljTWV0aG9kV2l0aENhbGxiYWNrQXJnIik7Cisg
ICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4gY2FsbGJhY2sgPSBjcmVhdGVGdW5jdGlvbk9ubHlDYWxs
YmFjazxKU1Rlc3RDYWxsYmFjaz4oc3RhdGUsIGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0
YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkp
OwogICAgIFRlc3RPYmo6OnN0YXRpY01ldGhvZFdpdGhDYWxsYmFja0FyZyhjYWxsYmFjayk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAogI2lmIEVOQUJM
RShDb25kaXRpb24xKQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kMShFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9u
YWxNZXRob2QxKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBl
eGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFs
dWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9i
aio+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAg
cmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAiY29uZGl0aW9uYWxN
ZXRob2QxIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVz
dE9iaiIsICJjb25kaXRpb25hbE1ldGhvZDEiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+aW1wbCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUo
ZXhlYywgaW1wbC5jb25kaXRpb25hbE1ldGhvZDEoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5jb25kaXRpb25hbE1ldGhvZDEoKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJM
RShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE1ldGhvZDIoRXhl
Y1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kMihFeGVjU3RhdGUqIHN0YXRlKQogewotICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJU
ZXN0T2JqIiwgImNvbmRpdGlvbmFsTWV0aG9kMiIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlz
VHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiY29uZGl0aW9uYWxNZXRob2QyIik7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBpbXBsLmNvbmRpdGlv
bmFsTWV0aG9kMigpOwpAQCAtMzk3MCwxMiArMzk3MCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QyKEV4
ZWNTdAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlv
bjIpCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQ29uZGl0aW9uYWxNZXRob2QzKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE1ldGhvZDMo
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNW
YWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAg
IEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1Zh
bHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhy
b3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJjb25kaXRpb25hbE1ldGhvZDMiKTsK
KyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImNv
bmRpdGlvbmFsTWV0aG9kMyIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVk
VGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5p
bXBsKCk7CiAgICAgaW1wbC5jb25kaXRpb25hbE1ldGhvZDMoKTsKQEAgLTM5ODQsMzYyICszOTg0
LDM2MiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QzKEV4ZWNTdAogCiAjZW5kaWYKIAotc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9h
ZGVkTWV0aG9kMShFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxKEV4ZWNT
dGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUo
KTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7
CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhp
c1R5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAib3ZlcmxvYWRlZE1ldGhvZCIpOworICAgICAg
ICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAib3ZlcmxvYWRl
ZE1ldGhvZCIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNU
ZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0g
ICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQotICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMp
KTsKLSAgICBUZXN0T2JqKiBvYmpBcmcgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChleGVjLT5hcmd1
bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQorICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkp
OworICAgIFRlc3RPYmoqIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1
bWVudCgwKSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgU3RyaW5nIHN0
ckFyZyA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAg
ICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIFN0cmluZyBzdHJBcmcg
PSBzdGF0ZS0+YXJndW1lbnQoMSkudG9TdHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKG9i
akFyZywgc3RyQXJnKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QyKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zl
cmxvYWRlZE1ldGhvZDIoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRo
aXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAg
ICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJvdmVybG9h
ZGVkTWV0aG9kIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAi
VGVzdE9iaiIsICJvdmVybG9hZGVkTWV0aG9kIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPmltcGwoKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgp
IDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIFRlc3RPYmoqIG9iakFyZyA9IEpTVGVzdE9iajo6
dG9XcmFwcGVkKGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwg
MSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKHN0YXRlKSk7CisgICAgVGVzdE9iaiogb2JqQXJnID0gSlNUZXN0T2JqOjp0
b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIAotICAgIHNpemVfdCBhcmdzQ291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7Cisg
ICAgc2l6ZV90IGFyZ3NDb3VudCA9IHN0YXRlLT5hcmd1bWVudENvdW50KCk7CiAgICAgaWYgKGFy
Z3NDb3VudCA8PSAxKSB7CiAgICAgICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChvYmpBcmcpOwog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIAot
ICAgIGludCBsb25nQXJnID0gdG9JbnQzMihleGVjLCBleGVjLT5hcmd1bWVudCgxKSwgTm9ybWFs
Q29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpbnQgbG9uZ0FyZyA9IHRvSW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgxKSwgTm9ybWFs
Q29udmVyc2lvbik7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5v
dmVybG9hZGVkTWV0aG9kKG9iakFyZywgbG9uZ0FyZyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMyhFeGVjU3Rh
dGUqIGV4ZWMpCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QzKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0g
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywg
IlRlc3RPYmoiLCAib3ZlcmxvYWRlZE1ldGhvZCIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlz
VHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAib3ZlcmxvYWRlZE1ldGhvZCIpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4
ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBTdHJpbmcgc3Ry
QXJnID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAg
IGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihz
dGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAgICBTdHJpbmcg
c3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUp
OworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1l
dGhvZChzdHJBcmcpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDQoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVy
bG9hZGVkTWV0aG9kNChFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVl
ID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhp
c1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmoqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAg
ICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm92ZXJsb2Fk
ZWRNZXRob2QiKTsKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJU
ZXN0T2JqIiwgIm92ZXJsb2FkZWRNZXRob2QiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+aW1wbCgpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgaW50IGxvbmdBcmcgPSB0b0ludDMyKGV4ZWMsIGV4
ZWMtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CisgICAgaW50IGxvbmdBcmcgPSB0b0ludDMyKHN0
YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOworICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChsb25nQXJnKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1zdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2Q1KEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDUo
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNW
YWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAg
IEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1Zh
bHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhy
b3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJvdmVybG9hZGVkTWV0aG9kIik7Cisg
ICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJvdmVy
bG9hZGVkTWV0aG9kIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlz
LCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwo
KTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
ZXhlYykpOwotICAgIGlmICghZXhlYy0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSkKLSAgICAgICAg
cmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpleGVjLCAwLCAiY2FsbGJh
Y2siLCAiVGVzdE9iaiIsICJvdmVybG9hZGVkTWV0aG9kIik7Ci0gICAgUmVmUHRyPFRlc3RDYWxs
YmFjaz4gY2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpOworICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7
CisgICAgaWYgKCFzdGF0ZS0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJu
IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpzdGF0ZSwgMCwgImNhbGxiYWNrIiwg
IlRlc3RPYmoiLCAib3ZlcmxvYWRlZE1ldGhvZCIpOworICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2s+
IGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhc09iamVjdChzdGF0ZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7CiAgICAgaW1wbC5v
dmVybG9hZGVkTWV0aG9kKGNhbGxiYWNrKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q2KEV4ZWNTdGF0ZSogZXhl
YykKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDYoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVl
ID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE9i
aiIsICJvdmVybG9hZGVkTWV0aG9kIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJy
b3IoKnN0YXRlLCAiVGVzdE9iaiIsICJvdmVybG9hZGVkTWV0aG9kIik7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIFJlZlB0cjxET01TdHJpbmdM
aXN0PiBsaXN0QXJnID0gdG9ET01TdHJpbmdMaXN0KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsK
LSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CisgICAgUmVm
UHRyPERPTVN0cmluZ0xpc3Q+IGxpc3RBcmcgPSB0b0RPTVN0cmluZ0xpc3Qoc3RhdGUsIHN0YXRl
LT5hcmd1bWVudCgwKSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1w
bC5vdmVybG9hZGVkTWV0aG9kKGxpc3RBcmcpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDcoRXhlY1N0YXRlKiBl
eGVjKQorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNyhFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0
T2JqIiwgIm92ZXJsb2FkZWRNZXRob2QiKTsKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVF
cnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm92ZXJsb2FkZWRNZXRob2QiKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgVmVjdG9yPFN0cmluZz4g
YXJyYXlBcmcgPSB0b05hdGl2ZUFycmF5PFN0cmluZz4oZXhlYywgZXhlYy0+YXJndW1lbnQoMCkp
OwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAgICBW
ZWN0b3I8U3RyaW5nPiBhcnJheUFyZyA9IHRvTmF0aXZlQXJyYXk8U3RyaW5nPihzdGF0ZSwgc3Rh
dGUtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBp
bXBsLm92ZXJsb2FkZWRNZXRob2QoYXJyYXlBcmcpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDgoRXhlY1N0YXRl
KiBleGVjKQorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kOChFeGVjU3RhdGUqIHN0YXRlKQogewotICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJU
ZXN0T2JqIiwgIm92ZXJsb2FkZWRNZXRob2QiKTsKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5
cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm92ZXJsb2FkZWRNZXRob2QiKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGlmIChVTkxJS0VMWShleGVj
LT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVj
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgVGVzdE9iaiogb2Jq
QXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIGlmIChV
TkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAgICBUZXN0T2JqKiBvYmpB
cmcgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoMCkpOworICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChvYmpBcmcp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLXN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T3ZlcmxvYWRlZE1ldGhvZDkoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9k
OShFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhp
c1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAg
ICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlz
VmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0
aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm92ZXJsb2FkZWRNZXRob2QiKTsK
KyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm92
ZXJsb2FkZWRNZXRob2QiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRo
aXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1w
bCgpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihleGVjKSk7Ci0gICAgVmVjdG9yPFN0cmluZz4gYXJyYXlBcmcgPSB0b05hdGl2ZUFycmF5PFN0
cmluZz4oZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBhcnJheUFyZyA9IHRv
TmF0aXZlQXJyYXk8U3RyaW5nPihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoYXJyYXlB
cmcpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3ZlcmxvYWRlZE1ldGhvZDEwKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1l
dGhvZDEwKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVj
LT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUo
KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+
KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0
dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAib3ZlcmxvYWRlZE1ldGhv
ZCIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoi
LCAib3ZlcmxvYWRlZE1ldGhvZCIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2Fz
dGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT5pbXBsKCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQot
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGV4ZWMpKTsKLSAgICBWZWN0b3I8dW5zaWduZWQ+IGFycmF5QXJnID0gdG9OYXRpdmVB
cnJheTx1bnNpZ25lZD4oZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VM
WShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAgICBWZWN0b3I8dW5zaWduZWQ+IGFy
cmF5QXJnID0gdG9OYXRpdmVBcnJheTx1bnNpZ25lZD4oc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgw
KSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVk
TWV0aG9kKGFycmF5QXJnKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMShFeGVjU3RhdGUqIGV4ZWMpCitzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkZWRNZXRob2QxMShFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhp
c1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0
ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
Ci0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm92
ZXJsb2FkZWRNZXRob2QiKTsKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3Rh
dGUsICJUZXN0T2JqIiwgIm92ZXJsb2FkZWRNZXRob2QiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgU3RyaW5nIHN0ckFyZyA9IGV4ZWMtPmFy
Z3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFko
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CisgICAgU3RyaW5nIHN0ckFyZyA9IHN0YXRl
LT5hcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRlKTsKKyAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2Qoc3RyQXJnKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1zdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2QxMihFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Qx
MihFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhp
c1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAg
ICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlz
VmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0
aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm92ZXJsb2FkZWRNZXRob2QiKTsK
KyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm92
ZXJsb2FkZWRNZXRob2QiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRo
aXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1w
bCgpOwogICAgIFZlY3RvcjxCbG9iKj4gYmxvYkFyZ3M7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MCwgY291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAg
ICAgIGlmICghZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoaSkuaW5oZXJpdHMoSlNCbG9iOjppbmZv
KCkpKQotICAgICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRUeXBlRXJyb3IoKmV4ZWMsIGks
ICJibG9iQXJncyIsICJUZXN0T2JqIiwgIm92ZXJsb2FkZWRNZXRob2QiLCAiQmxvYiIpOwotICAg
ICAgICBibG9iQXJncy5hcHBlbmQoSlNCbG9iOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoaSkpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHN0YXRlLT5hcmd1
bWVudENvdW50KCk7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGlmICghc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KGkpLmluaGVyaXRzKEpTQmxvYjo6aW5mbygpKSkKKyAgICAgICAgICAgIHJl
dHVybiB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKCpzdGF0ZSwgaSwgImJsb2JBcmdzIiwgIlRlc3RP
YmoiLCAib3ZlcmxvYWRlZE1ldGhvZCIsICJCbG9iIik7CisgICAgICAgIGJsb2JBcmdzLmFwcGVu
ZChKU0Jsb2I6OnRvV3JhcHBlZChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoaSkpKTsKICAgICB9
CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKGJsb2JBcmdzKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZChFeGVjU3RhdGUq
IGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZChFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIHNpemVfdCBh
cmdzQ291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+KDIsIGV4ZWMtPmFyZ3VtZW50Q291bnQoKSk7Ci0g
ICAgSlNWYWx1ZSBhcmcwKGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBKU1ZhbHVlIGFyZzEoZXhl
Yy0+YXJndW1lbnQoMSkpOworICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+
KDIsIHN0YXRlLT5hcmd1bWVudENvdW50KCkpOworICAgIEpTVmFsdWUgYXJnMChzdGF0ZS0+YXJn
dW1lbnQoMCkpOworICAgIEpTVmFsdWUgYXJnMShzdGF0ZS0+YXJndW1lbnQoMSkpOwogICAgIGlm
ICgoYXJnc0NvdW50ID09IDIgJiYgKGFyZzAuaXNOdWxsKCkgfHwgKGFyZzAuaXNPYmplY3QoKSAm
JiBhc09iamVjdChhcmcwKS0+aW5oZXJpdHMoSlNUZXN0T2JqOjppbmZvKCkpKSkgJiYgKGFyZzEu
aXNVbmRlZmluZWRPck51bGwoKSB8fCBhcmcxLmlzU3RyaW5nKCkgfHwgYXJnMS5pc09iamVjdCgp
KSkpCi0gICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2QxKGV4ZWMpOworICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25P
dmVybG9hZGVkTWV0aG9kMShzdGF0ZSk7CiAgICAgaWYgKChhcmdzQ291bnQgPT0gMSAmJiAoYXJn
MC5pc051bGwoKSB8fCAoYXJnMC5pc09iamVjdCgpICYmIGFzT2JqZWN0KGFyZzApLT5pbmhlcml0
cyhKU1Rlc3RPYmo6OmluZm8oKSkpKSkgfHwgKGFyZ3NDb3VudCA9PSAyICYmIChhcmcwLmlzTnVs
bCgpIHx8IChhcmcwLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoYXJnMCktPmluaGVyaXRzKEpTVGVz
dE9iajo6aW5mbygpKSkpKSkKLSAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3ZlcmxvYWRlZE1ldGhvZDIoZXhlYyk7CisgICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QyKHN0YXRlKTsKICAgICBpZiAoKGFyZ3NDb3Vu
dCA9PSAxICYmIChhcmcwLmlzVW5kZWZpbmVkT3JOdWxsKCkgfHwgYXJnMC5pc1N0cmluZygpIHx8
IGFyZzAuaXNPYmplY3QoKSkpKQotICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZGVkTWV0aG9kMyhleGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDMoc3RhdGUpOwogICAgIGlmIChhcmdzQ291
bnQgPT0gMSkKLSAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zlcmxv
YWRlZE1ldGhvZDQoZXhlYyk7CisgICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2Q0KHN0YXRlKTsKICAgICBpZiAoKGFyZ3NDb3VudCA9PSAxICYm
IChhcmcwLmlzTnVsbCgpIHx8IGFyZzAuaXNPYmplY3QoKSkpKQotICAgICAgICByZXR1cm4ganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNShleGVjKTsKKyAgICAgICAg
cmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDUoc3RhdGUp
OwogICAgIGlmICgoYXJnc0NvdW50ID09IDEgJiYgKGFyZzAuaXNOdWxsKCkgfHwgKGFyZzAuaXNP
YmplY3QoKSAmJiBhc09iamVjdChhcmcwKS0+aW5oZXJpdHMoSlNET01TdHJpbmdMaXN0OjppbmZv
KCkpKSkpKQotICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9h
ZGVkTWV0aG9kNihleGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3ZlcmxvYWRlZE1ldGhvZDYoc3RhdGUpOwogICAgIGlmICgoYXJnc0NvdW50ID09IDEgJiYg
KGFyZzAuaXNOdWxsKCkgfHwgKGFyZzAuaXNPYmplY3QoKSAmJiBpc0pTQXJyYXkoYXJnMCkpKSkp
Ci0gICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRo
b2Q3KGV4ZWMpOworICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVy
bG9hZGVkTWV0aG9kNyhzdGF0ZSk7CiAgICAgaWYgKChhcmdzQ291bnQgPT0gMSAmJiAoKGFyZzAu
aXNPYmplY3QoKSAmJiBhc09iamVjdChhcmcwKS0+aW5oZXJpdHMoSlNUZXN0T2JqOjppbmZvKCkp
KSkpKQotICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kOChleGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T3ZlcmxvYWRlZE1ldGhvZDgoc3RhdGUpOwogICAgIGlmICgoYXJnc0NvdW50ID09IDEgJiYgKChh
cmcwLmlzT2JqZWN0KCkgJiYgaXNKU0FycmF5KGFyZzApKSkpKQotICAgICAgICByZXR1cm4ganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kOShleGVjKTsKKyAgICAgICAg
cmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDkoc3RhdGUp
OwogICAgIGlmICgoYXJnc0NvdW50ID09IDEgJiYgKChhcmcwLmlzT2JqZWN0KCkgJiYgaXNKU0Fy
cmF5KGFyZzApKSkpKQotICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25P
dmVybG9hZGVkTWV0aG9kMTAoZXhlYyk7CisgICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMChzdGF0ZSk7CiAgICAgaWYgKGFyZ3NDb3VudCA9
PSAxKQotICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kMTEoZXhlYyk7CisgICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkZWRNZXRob2QxMShzdGF0ZSk7CiAgICAgaWYgKCkKLSAgICAgICAgcmV0dXJuIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEyKGV4ZWMpOworICAgICAg
ICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTIoc3Rh
dGUpOwogICAgIGlmIChhcmdzQ291bnQgPCAxKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihzdGF0ZSk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRp
b25hbFBhcmFtZXRlcjEoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0
aE9wdGlvbmFsUGFyYW1ldGVyMShFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhp
c1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0
ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
Ci0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm92
ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIiKTsKKyAgICAgICAgcmV0dXJuIHRo
cm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm92ZXJsb2FkZWRNZXRob2RXaXRo
T3B0aW9uYWxQYXJhbWV0ZXIiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3Rl
ZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
aW1wbCgpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihleGVjKSk7Ci0gICAgVGVzdE9iaiogb2JqQXJnMSA9IEpTVGVzdE9iajo6dG9XcmFwcGVk
KGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKHN0YXRlKSk7CisgICAgVGVzdE9iaiogb2JqQXJnMSA9IEpTVGVzdE9iajo6dG9XcmFwcGVk
KHN0YXRlLT5hcmd1bWVudCgwKSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAK
LSAgICBzaXplX3QgYXJnc0NvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOworICAgIHNpemVf
dCBhcmdzQ291bnQgPSBzdGF0ZS0+YXJndW1lbnRDb3VudCgpOwogICAgIGlmIChhcmdzQ291bnQg
PD0gMSkgewogICAgICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0
ZXIob2JqQXJnMSk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgfQogCi0gICAgVGVzdE9iaiogb2JqQXJnMiA9IEpTVGVzdE9iajo6dG9XcmFwcGVk
KGV4ZWMtPmFyZ3VtZW50KDEpKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIFRlc3RPYmoqIG9iakFyZzIgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChzdGF0ZS0+
YXJndW1lbnQoMSkpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwu
b3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlcihvYmpBcmcxLCBvYmpBcmcyKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1zdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIyKEV4ZWNTdGF0ZSogZXhlYykKK3N0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlcjIoRXhlY1N0YXRlKiBzdGF0
ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9y
KCpleGVjLCAiVGVzdE9iaiIsICJvdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVy
Iik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIs
ICJvdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyIik7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIFRlc3RPYmoqIG9iakFyZyA9
IEpTVGVzdE9iajo6dG9XcmFwcGVkKGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtF
TFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CisgICAgVGVzdE9iaiogb2JqQXJnID0g
SlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIAotICAgIHNpemVfdCBhcmdzQ291bnQgPSBleGVjLT5hcmd1bWVu
dENvdW50KCk7CisgICAgc2l6ZV90IGFyZ3NDb3VudCA9IHN0YXRlLT5hcmd1bWVudENvdW50KCk7
CiAgICAgaWYgKGFyZ3NDb3VudCA8PSAxKSB7CiAgICAgICAgIGltcGwub3ZlcmxvYWRlZE1ldGhv
ZFdpdGhPcHRpb25hbFBhcmFtZXRlcihvYmpBcmcpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIAotICAgIGludCBsb25nQXJnID0gdG9JbnQz
MihleGVjLCBleGVjLT5hcmd1bWVudCgxKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVO
TElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpbnQgbG9uZ0FyZyA9IHRvSW50MzIo
c3RhdGUsIHN0YXRlLT5hcmd1bWVudCgxKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlv
bmFsUGFyYW1ldGVyKG9iakFyZywgbG9uZ0FyZyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0
ZXIoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIo
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RkOjptaW48c2l6
ZV90PigyLCBleGVjLT5hcmd1bWVudENvdW50KCkpOwotICAgIEpTVmFsdWUgYXJnMChleGVjLT5h
cmd1bWVudCgwKSk7Ci0gICAgSlNWYWx1ZSBhcmcxKGV4ZWMtPmFyZ3VtZW50KDEpKTsKKyAgICBz
aXplX3QgYXJnc0NvdW50ID0gc3RkOjptaW48c2l6ZV90PigyLCBzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpKTsKKyAgICBKU1ZhbHVlIGFyZzAoc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBKU1ZhbHVl
IGFyZzEoc3RhdGUtPmFyZ3VtZW50KDEpKTsKICAgICBpZiAoKGFyZ3NDb3VudCA9PSAxICYmIChh
cmcwLmlzTnVsbCgpIHx8IChhcmcwLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoYXJnMCktPmluaGVy
aXRzKEpTVGVzdE9iajo6aW5mbygpKSkpKSB8fCAoYXJnc0NvdW50ID09IDIgJiYgKGFyZzAuaXNO
dWxsKCkgfHwgKGFyZzAuaXNPYmplY3QoKSAmJiBhc09iamVjdChhcmcwKS0+aW5oZXJpdHMoSlNU
ZXN0T2JqOjppbmZvKCkpKSkgJiYgKGFyZzEuaXNVbmRlZmluZWQoKSB8fCBhcmcxLmlzTnVsbCgp
IHx8IChhcmcxLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoYXJnMSktPmluaGVyaXRzKEpTVGVzdE9i
ajo6aW5mbygpKSkpKSkKLSAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlcjEoZXhlYyk7CisgICAgICAgIHJl
dHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9u
YWxQYXJhbWV0ZXIxKHN0YXRlKTsKICAgICBpZiAoKGFyZ3NDb3VudCA9PSAxICYmIChhcmcwLmlz
TnVsbCgpIHx8IChhcmcwLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoYXJnMCktPmluaGVyaXRzKEpT
VGVzdE9iajo6aW5mbygpKSkpKSB8fCAoYXJnc0NvdW50ID09IDIgJiYgKGFyZzAuaXNOdWxsKCkg
fHwgKGFyZzAuaXNPYmplY3QoKSAmJiBhc09iamVjdChhcmcwKS0+aW5oZXJpdHMoSlNUZXN0T2Jq
OjppbmZvKCkpKSkpKQotICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25P
dmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyMihleGVjKTsKKyAgICAgICAgcmV0
dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25h
bFBhcmFtZXRlcjIoc3RhdGUpOwogICAgIGlmIChhcmdzQ291bnQgPCAxKQotICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMp
KTsKLSAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsK
KyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkNsYXNzTWV0aG9kKEV4
ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29u
c3RydWN0b3JGdW5jdGlvbkNsYXNzTWV0aG9kKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVGVz
dE9iajo6Y2xhc3NNZXRob2QoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0
cnVjdG9yRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhPcHRpb25hbChFeGVjU3RhdGUqIGV4ZWMpCitF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25D
bGFzc01ldGhvZFdpdGhPcHRpb25hbChFeGVjU3RhdGUqIHN0YXRlKQogewogCi0gICAgc2l6ZV90
IGFyZ3NDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKKyAgICBzaXplX3QgYXJnc0NvdW50
ID0gc3RhdGUtPmFyZ3VtZW50Q291bnQoKTsKICAgICBpZiAoYXJnc0NvdW50IDw9IDApIHsKICAg
ICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihUZXN0T2JqOjpjbGFzc01ldGhvZFdpdGhP
cHRpb25hbCgpKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAg
IH0KIAotICAgIGludCBhcmcgPSB0b0ludDMyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBOb3Jt
YWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIGludCBhcmcgPSB0b0ludDMyKHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENv
bnZlcnNpb24pOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNOdW1iZXIoVGVzdE9iajo6Y2xhc3NNZXRob2RXaXRoT3B0aW9uYWwoYXJnKSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25DbGFzc01ldGhvZDIo
RXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpD
b25zdHJ1Y3RvckZ1bmN0aW9uQ2xhc3NNZXRob2QyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAg
aWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE9iajo6Y2xhc3NNZXRob2QyKGV4ZWMp
KTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihzdGF0ZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0T2JqOjpjbGFzc01l
dGhvZDIoc3RhdGUpKTsKIH0KIAogI2lmIEVOQUJMRShDb25kaXRpb24xKQotc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2QxMShFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEx
KEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291
bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBpbnQgYXJnID0gdG9JbnQzMihleGVjLCBl
eGVjLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291
bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOworICAgIGludCBhcmcgPSB0b0ludDMyKHN0YXRl
LCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOworICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIFRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2QxKGFyZyk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTQzNDgsMTIgKzQz
NDgsMTIgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29u
c3RydWN0b3JGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QKICNlbmRpZgogCiAjaWYgRU5BQkxFKENv
bmRpdGlvbjEpCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpD
b25zdHJ1Y3RvckZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEyKEV4ZWNTdGF0ZSogZXhlYykKK3N0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVu
Y3Rpb25PdmVybG9hZGVkTWV0aG9kMTIoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBpZiAoVU5M
SUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIFN0
cmluZyB0eXBlID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
OwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAgICBT
dHJpbmcgdHlwZSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0
YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBUZXN0T2JqOjpvdmVy
bG9hZGVkTWV0aG9kMSh0eXBlKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwpAQCAtNDM2MSw0NiArNDM2MSw0NiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZAog
CiAjZW5kaWYKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1
Y3RvckZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uT3ZlcmxvYWRl
ZE1ldGhvZDEoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBzaXplX3QgYXJnc0NvdW50ID0gc3Rk
OjptaW48c2l6ZV90PigxLCBleGVjLT5hcmd1bWVudENvdW50KCkpOworICAgIHNpemVfdCBhcmdz
Q291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+KDEsIHN0YXRlLT5hcmd1bWVudENvdW50KCkpOwogI2lm
IEVOQUJMRShDb25kaXRpb24xKQogICAgIGlmIChhcmdzQ291bnQgPT0gMSkKLSAgICAgICAgcmV0
dXJuIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTEoZXhlYyk7
CisgICAgICAgIHJldHVybiBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uT3ZlcmxvYWRlZE1l
dGhvZDExKHN0YXRlKTsKICNlbmRpZgogCi0gICAgSlNWYWx1ZSBhcmcwKGV4ZWMtPmFyZ3VtZW50
KDApKTsKKyAgICBKU1ZhbHVlIGFyZzAoc3RhdGUtPmFyZ3VtZW50KDApKTsKICNpZiBFTkFCTEUo
Q29uZGl0aW9uMSkKICAgICBpZiAoKGFyZ3NDb3VudCA9PSAxICYmIChhcmcwLmlzVW5kZWZpbmVk
T3JOdWxsKCkgfHwgYXJnMC5pc1N0cmluZygpIHx8IGFyZzAuaXNPYmplY3QoKSkpKQotICAgICAg
ICByZXR1cm4ganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMihl
eGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25PdmVybG9h
ZGVkTWV0aG9kMTIoc3RhdGUpOwogI2VuZGlmCiAKICAgICBpZiAoYXJnc0NvdW50IDwgMSkKLSAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihleGVjKSk7Ci0gICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CisgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KHN0YXRlKSk7CisgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NN
ZXRob2RXaXRoQ2xhbXAoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aENsYW1wKEV4ZWNT
dGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUo
KTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7
CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhp
c1R5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAiY2xhc3NNZXRob2RXaXRoQ2xhbXAiKTsKKyAg
ICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImNsYXNz
TWV0aG9kV2l0aENsYW1wIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRU
aGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmlt
cGwoKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMikpCi0gICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IoZXhlYykpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikp
CisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgdW5zaWduZWQgc2hvcnQgb2JqQXJnc1Nob3J0ID0gMDsK
LSAgICBkb3VibGUgb2JqQXJnc1Nob3J0TmF0aXZlVmFsdWUgPSBleGVjLT5hcmd1bWVudCgwKS50
b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIGRvdWJsZSBvYmpBcmdzU2hvcnROYXRpdmVWYWx1ZSA9IHN0YXRlLT5hcmd1bWVudCgwKS50
b051bWJlcihzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBp
ZiAoIXN0ZDo6aXNuYW4ob2JqQXJnc1Nob3J0TmF0aXZlVmFsdWUpKQogICAgICAgICBvYmpBcmdz
U2hvcnQgPSBjbGFtcFRvPHVuc2lnbmVkIHNob3J0PihvYmpBcmdzU2hvcnROYXRpdmVWYWx1ZSk7
CiAKICAgICB1bnNpZ25lZCBsb25nIG9iakFyZ3NMb25nID0gMDsKLSAgICBkb3VibGUgb2JqQXJn
c0xvbmdOYXRpdmVWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvTnVtYmVyKGV4ZWMpOwotICAg
IGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgZG91YmxlIG9iakFyZ3NM
b25nTmF0aXZlVmFsdWUgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9OdW1iZXIoc3RhdGUpOworICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgaWYgKCFzdGQ6OmlzbmFuKG9iakFy
Z3NMb25nTmF0aXZlVmFsdWUpKQpAQCAtNDQxMCw0NzMgKzQ0MTAsNDczIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdp
dGhDbGFtcChFeGVjCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhVbnNpZ25lZExvbmdTZXF1ZW5jZShFeGVjU3RhdGUqIGV4ZWMpCitFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aFVuc2lnbmVkTG9uZ1NlcXVlbmNlKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoi
LCAibWV0aG9kV2l0aFVuc2lnbmVkTG9uZ1NlcXVlbmNlIik7CisgICAgICAgIHJldHVybiB0aHJv
d1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJtZXRob2RXaXRoVW5zaWduZWRMb25n
U2VxdWVuY2UiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpT
VGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwot
ICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVj
KSk7Ci0gICAgVmVjdG9yPHVuc2lnbmVkPiB1bnNpZ25lZExvbmdTZXF1ZW5jZSA9IHRvTmF0aXZl
QXJyYXk8dW5zaWduZWQ+KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtF
TFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CisgICAgVmVjdG9yPHVuc2lnbmVkPiB1
bnNpZ25lZExvbmdTZXF1ZW5jZSA9IHRvTmF0aXZlQXJyYXk8dW5zaWduZWQ+KHN0YXRlLCBzdGF0
ZS0+YXJndW1lbnQoMCkpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlt
cGwubWV0aG9kV2l0aFVuc2lnbmVkTG9uZ1NlcXVlbmNlKHVuc2lnbmVkTG9uZ1NlcXVlbmNlKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU3RyaW5nQXJy
YXlGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU3RyaW5nQXJyYXlGdW5jdGlvbihFeGVjU3RhdGUq
IHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7Cisg
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBl
RXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInN0cmluZ0FycmF5RnVuY3Rpb24iKTsKKyAgICAgICAg
cmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInN0cmluZ0FycmF5
RnVuY3Rpb24iKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpT
VGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwot
ICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVj
KSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBWZWN0b3I8U3RyaW5n
PiB2YWx1ZXMgPSB0b05hdGl2ZUFycmF5PFN0cmluZz4oZXhlYywgZXhlYy0+YXJndW1lbnQoMCkp
OwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgVmVjdG9yPFN0
cmluZz4gdmFsdWVzID0gdG9OYXRpdmVBcnJheTxTdHJpbmc+KHN0YXRlLCBzdGF0ZS0+YXJndW1l
bnQoMCkpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIEpTVmFsdWUgcmVz
dWx0ID0ganNBcnJheShleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5zdHJp
bmdBcnJheUZ1bmN0aW9uKHZhbHVlcywgZWMpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQXJy
YXkoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnN0cmluZ0FycmF5RnVu
Y3Rpb24odmFsdWVzLCBlYykpOwogCi0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAg
ICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Eb21TdHJpbmdMaXN0RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQorRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkRvbVN0
cmluZ0xpc3RGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+
dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0g
ICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgImRvbVN0
cmluZ0xpc3RGdW5jdGlvbiIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RPYmoiLCAiZG9tU3RyaW5nTGlzdEZ1bmN0aW9uIik7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3Rh
dGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHZhbHVlcyA9IHRvRE9NU3Ry
aW5nTGlzdChleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gdmFsdWVzID0gdG9E
T01TdHJpbmdMaXN0KHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOworICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC5kb21TdHJpbmdMaXN0RnVuY3Rp
b24odmFsdWVzLCBlYykpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLmRvbVN0cmluZ0xpc3RGdW5j
dGlvbih2YWx1ZXMsIGVjKSkpOwogCi0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAg
ICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQW5kV2l0aG91dE51bGxhYmxlU2VxdWVuY2UoRXhlY1N0
YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhBbmRXaXRob3V0TnVsbGFibGVTZXF1ZW5jZShFeGVjU3RhdGUq
IHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7Cisg
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBl
RXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgIm1ldGhvZFdpdGhBbmRXaXRob3V0TnVsbGFibGVTZXF1
ZW5jZSIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RP
YmoiLCAibWV0aG9kV2l0aEFuZFdpdGhvdXROdWxsYWJsZVNlcXVlbmNlIik7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+
YXJndW1lbnRDb3VudCgpIDwgMikpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIFZlY3Rvcjx1bnNpZ25l
ZD4gYXJyYXlBcmcgPSB0b05hdGl2ZUFycmF5PHVuc2lnbmVkPihleGVjLCBleGVjLT5hcmd1bWVu
dCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQorICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwor
ICAgIFZlY3Rvcjx1bnNpZ25lZD4gYXJyYXlBcmcgPSB0b05hdGl2ZUFycmF5PHVuc2lnbmVkPihz
dGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKLSAgICBWZWN0b3I8dW5zaWduZWQ+IG51bGxhYmxlQXJyYXlBcmcgPSB0b05hdGl2ZUFycmF5
PHVuc2lnbmVkPihleGVjLCBleGVjLT5hcmd1bWVudCgxKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBWZWN0b3I8dW5zaWduZWQ+IG51bGxhYmxlQXJyYXlB
cmcgPSB0b05hdGl2ZUFycmF5PHVuc2lnbmVkPihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEpKTsK
KyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhBbmRX
aXRob3V0TnVsbGFibGVTZXF1ZW5jZShhcnJheUFyZywgbnVsbGFibGVBcnJheUFyZyk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhBbmRX
aXRob3V0TnVsbGFibGVTZXF1ZW5jZTIoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhBbmRXaXRo
b3V0TnVsbGFibGVTZXF1ZW5jZTIoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3Rh
dGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nh
c3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJt
ZXRob2RXaXRoQW5kV2l0aG91dE51bGxhYmxlU2VxdWVuY2UyIik7CisgICAgICAgIHJldHVybiB0
aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJtZXRob2RXaXRoQW5kV2l0aG91
dE51bGxhYmxlU2VxdWVuY2UyIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0
ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PmltcGwoKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMikpCi0g
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IoZXhlYykpOwotICAgIFZlY3Rvcjx1bnNpZ25lZD4gYXJyYXlBcmcgPSB0b05hdGl2ZUFy
cmF5PHVuc2lnbmVkPihleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZ
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50
Q291bnQoKSA8IDIpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOworICAgIFZlY3Rvcjx1bnNpZ25lZD4gYXJy
YXlBcmcgPSB0b05hdGl2ZUFycmF5PHVuc2lnbmVkPihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDAp
KTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBWZWN0b3I8dW5zaWduZWQ+
IG51bGxhYmxlQXJyYXlBcmcgPSB0b05hdGl2ZUFycmF5PHVuc2lnbmVkPihleGVjLCBleGVjLT5h
cmd1bWVudCgxKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBWZWN0b3I8dW5zaWduZWQ+IG51bGxhYmxlQXJyYXlBcmcgPSB0b05hdGl2ZUFycmF5PHVuc2ln
bmVkPihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEpKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhBbmRXaXRob3V0TnVsbGFibGVTZXF1ZW5jZTIo
YXJyYXlBcmcsIG51bGxhYmxlQXJyYXlBcmcpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25HZXRTVkdEb2N1bWVudChFeGVjU3RhdGUqIGV4ZWMpCitFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uR2V0U1ZH
RG9jdW1lbnQoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4
ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1
ZSgpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2Jq
Kj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICBy
ZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJnZXRTVkdEb2N1bWVu
dCIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoi
LCAiZ2V0U1ZHRG9jdW1lbnQiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3Rl
ZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
aW1wbCgpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGlmICghc2hvdWxkQWxsb3dB
Y2Nlc3NUb05vZGUoZXhlYywgaW1wbC5nZXRTVkdEb2N1bWVudChlYykpKQorICAgIGlmICghc2hv
dWxkQWxsb3dBY2Nlc3NUb05vZGUoc3RhdGUsIGltcGwuZ2V0U1ZHRG9jdW1lbnQoZWMpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7Ci0gICAgSlNWYWx1ZSByZXN1
bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihp
bXBsLmdldFNWR0RvY3VtZW50KGVjKSkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0
ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwuZ2V0U1ZHRG9j
dW1lbnQoZWMpKSk7CiAKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHNldERP
TUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkNvbnZlcnQxKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0MShFeGVjU3RhdGUqIHN0YXRl
KQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3Io
KmV4ZWMsICJUZXN0T2JqIiwgImNvbnZlcnQxIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNU
eXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJjb252ZXJ0MSIpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBUZXN0Tm9kZSogdmFsdWUgPSBK
U1Rlc3ROb2RlOjp0b1dyYXBwZWQoZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VM
WShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAgICBUZXN0Tm9kZSogdmFsdWUgPSBK
U1Rlc3ROb2RlOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmNvbnZlcnQxKHZhbHVlKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDIoRXhlY1N0YXRlKiBl
eGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbkNvbnZlcnQyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlz
VmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dE9iaio+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAg
ICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAiY29udmVydDIi
KTsKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwg
ImNvbnZlcnQyIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBK
U1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsK
LSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhl
YykpOwotICAgIFRlc3ROb2RlKiB2YWx1ZSA9IEpTVGVzdE5vZGU6OnRvV3JhcHBlZChleGVjLT5h
cmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0
ZSkpOworICAgIFRlc3ROb2RlKiB2YWx1ZSA9IEpTVGVzdE5vZGU6OnRvV3JhcHBlZChzdGF0ZS0+
YXJndW1lbnQoMCkpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwu
Y29udmVydDIodmFsdWUpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25Db252ZXJ0NChFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDQoRXhlY1N0YXRlKiBzdGF0
ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9y
KCpleGVjLCAiVGVzdE9iaiIsICJjb252ZXJ0NCIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlz
VHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiY29udmVydDQiKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgVGVzdE5vZGUqIHZhbHVlID0g
SlNUZXN0Tm9kZTo6dG9XcmFwcGVkKGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtF
TFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CisgICAgVGVzdE5vZGUqIHZhbHVlID0g
SlNUZXN0Tm9kZTo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgwKSk7CisgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5jb252ZXJ0NCh2YWx1ZSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQ1KEV4ZWNTdGF0ZSog
ZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25Db252ZXJ0NShFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVl
ID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhp
c1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmoqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAg
ICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgImNvbnZlcnQ1
Iik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIs
ICJjb252ZXJ0NSIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywg
SlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7
Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4
ZWMpKTsKLSAgICBUZXN0Tm9kZSogdmFsdWUgPSBKU1Rlc3ROb2RlOjp0b1dyYXBwZWQoZXhlYy0+
YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3Rh
dGUpKTsKKyAgICBUZXN0Tm9kZSogdmFsdWUgPSBKU1Rlc3ROb2RlOjp0b1dyYXBwZWQoc3RhdGUt
PmFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBs
LmNvbnZlcnQ1KHZhbHVlKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTXV0YWJsZVBvaW50RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk11dGFibGVQb2lu
dEZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBl
eGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFs
dWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9i
aio+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAg
cmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAibXV0YWJsZVBvaW50
RnVuY3Rpb24iKTsKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJU
ZXN0T2JqIiwgIm11dGFibGVQb2ludEZ1bmN0aW9uIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2Fz
dGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKFNWR1Byb3BlcnR5VGVhck9mZjxT
VkdQb2ludD46OmNyZWF0ZShpbXBsLm11dGFibGVQb2ludEZ1bmN0aW9uKCkpKSk7CisgICAgSlNW
YWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RG
OjpnZXRQdHIoU1ZHUHJvcGVydHlUZWFyT2ZmPFNWR1BvaW50Pjo6Y3JlYXRlKGltcGwubXV0YWJs
ZVBvaW50RnVuY3Rpb24oKSkpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25JbW11dGFibGVQb2ludEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25JbW11dGFibGVQb2lu
dEZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBl
eGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFs
dWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9i
aio+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAg
cmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAiaW1tdXRhYmxlUG9p
bnRGdW5jdGlvbiIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwg
IlRlc3RPYmoiLCAiaW1tdXRhYmxlUG9pbnRGdW5jdGlvbiIpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMs
IGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihTVkdQcm9wZXJ0eVRlYXJP
ZmY8U1ZHUG9pbnQ+OjpjcmVhdGUoaW1wbC5pbW11dGFibGVQb2ludEZ1bmN0aW9uKCkpKSk7Cisg
ICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSwgV1RGOjpnZXRQdHIoU1ZHUHJvcGVydHlUZWFyT2ZmPFNWR1BvaW50Pjo6Y3JlYXRlKGltcGwu
aW1tdXRhYmxlUG9pbnRGdW5jdGlvbigpKSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk9yYW5nZShFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3JhbmdlKEV4ZWNTdGF0ZSogc3Rh
dGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7CiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJv
cigqZXhlYywgIlRlc3RPYmoiLCAib3JhbmdlIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNU
eXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJvcmFuZ2UiKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogICAgIGltcGwuYmFuYW5hKCk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblN0cmljdEZ1bmN0aW9uKEV4ZWNT
dGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25TdHJpY3RGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFs
dWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2Jq
IiwgInN0cmljdEZ1bmN0aW9uIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3Io
KnN0YXRlLCAiVGVzdE9iaiIsICJzdHJpY3RGdW5jdGlvbiIpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA8IDMpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFy
Z3VtZW50Q291bnQoKSA8IDMpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwotICAgIFN0cmluZyBzdHIgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBTdHJpbmcgc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvU3RyaW5nKHN0YXRlKS0+dmFs
dWUoc3RhdGUpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGZsb2F0IGEg
PSBleGVjLT5hcmd1bWVudCgxKS50b0Zsb2F0KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShleGVj
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgZmxvYXQgYSA9IHN0YXRlLT5hcmd1bWVudCgxKS50b0Zs
b2F0KHN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBpbnQgYiA9
IHRvSW50MzIoZXhlYywgZXhlYy0+YXJndW1lbnQoMiksIE5vcm1hbENvbnZlcnNpb24pOwotICAg
IGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaW50IGIgPSB0b0ludDMy
KHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMiksIE5vcm1hbENvbnZlcnNpb24pOworICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC5zdHJpY3RGdW5jdGlv
bihzdHIsIGEsIGIsIGVjKSkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2Fz
dGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwuc3RyaWN0RnVuY3Rpb24o
c3RyLCBhLCBiLCBlYykpKTsKIAotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAg
c2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uU3RyaWN0RnVuY3Rpb25XaXRoU2VxdWVuY2UoRXhlY1N0YXRlKiBleGVjKQor
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblN0
cmljdEZ1bmN0aW9uV2l0aFNlcXVlbmNlKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoi
LCAic3RyaWN0RnVuY3Rpb25XaXRoU2VxdWVuY2UiKTsKKyAgICAgICAgcmV0dXJuIHRocm93VGhp
c1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInN0cmljdEZ1bmN0aW9uV2l0aFNlcXVlbmNl
Iik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6
OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBpZiAo
VU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMikpCi0gICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCisgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRl
KSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaWYgKCFleGVjLT5hcmd1bWVudCgw
KS5pc1VuZGVmaW5lZE9yTnVsbCgpICYmICFleGVjLT5hcmd1bWVudCgwKS5pbmhlcml0cyhKU1Rl
c3RPYmo6OmluZm8oKSkpCi0gICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKCpl
eGVjLCAwLCAib2JqQXJnIiwgIlRlc3RPYmoiLCAic3RyaWN0RnVuY3Rpb25XaXRoU2VxdWVuY2Ui
LCAiVGVzdE9iaiIpOwotICAgIFRlc3RPYmoqIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVk
KGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmICghc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkgJiYg
IXN0YXRlLT5hcmd1bWVudCgwKS5pbmhlcml0cyhKU1Rlc3RPYmo6OmluZm8oKSkpCisgICAgICAg
IHJldHVybiB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKCpzdGF0ZSwgMCwgIm9iakFyZyIsICJUZXN0
T2JqIiwgInN0cmljdEZ1bmN0aW9uV2l0aFNlcXVlbmNlIiwgIlRlc3RPYmoiKTsKKyAgICBUZXN0
T2JqKiBvYmpBcmcgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoMCkpOwor
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIFZlY3Rvcjx1bnNpZ25lZD4gYSA9
IHRvTmF0aXZlQXJyYXk8dW5zaWduZWQ+KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEpKTsKLSAgICBp
ZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIFZlY3Rvcjx1bnNpZ25lZD4g
YSA9IHRvTmF0aXZlQXJyYXk8dW5zaWduZWQ+KHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMSkpOwor
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9K
UyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC5zdHJp
Y3RGdW5jdGlvbldpdGhTZXF1ZW5jZShvYmpBcmcsIGEsIGVjKSkpOworICAgIEpTVmFsdWUgcmVz
dWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRy
KGltcGwuc3RyaWN0RnVuY3Rpb25XaXRoU2VxdWVuY2Uob2JqQXJnLCBhLCBlYykpKTsKIAotICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBl
Yyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU3RyaWN0RnVuY3Rp
b25XaXRoQXJyYXkoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblN0cmljdEZ1bmN0aW9uV2l0aEFycmF5KEV4ZWNT
dGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUo
KTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7
CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhp
c1R5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAic3RyaWN0RnVuY3Rpb25XaXRoQXJyYXkiKTsK
KyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInN0
cmljdEZ1bmN0aW9uV2l0aEFycmF5Iik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhj
YXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPmltcGwoKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMikp
Ci0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IoZXhlYykpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgp
IDwgMikpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAg
aWYgKCFleGVjLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpICYmICFleGVjLT5hcmd1
bWVudCgwKS5pbmhlcml0cyhKU1Rlc3RPYmo6OmluZm8oKSkpCi0gICAgICAgIHJldHVybiB0aHJv
d0FyZ3VtZW50VHlwZUVycm9yKCpleGVjLCAwLCAib2JqQXJnIiwgIlRlc3RPYmoiLCAic3RyaWN0
RnVuY3Rpb25XaXRoQXJyYXkiLCAiVGVzdE9iaiIpOwotICAgIFRlc3RPYmoqIG9iakFyZyA9IEpT
VGVzdE9iajo6dG9XcmFwcGVkKGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFko
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmICghc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5k
ZWZpbmVkT3JOdWxsKCkgJiYgIXN0YXRlLT5hcmd1bWVudCgwKS5pbmhlcml0cyhKU1Rlc3RPYmo6
OmluZm8oKSkpCisgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKCpzdGF0ZSwg
MCwgIm9iakFyZyIsICJUZXN0T2JqIiwgInN0cmljdEZ1bmN0aW9uV2l0aEFycmF5IiwgIlRlc3RP
YmoiKTsKKyAgICBUZXN0T2JqKiBvYmpBcmcgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChzdGF0ZS0+
YXJndW1lbnQoMCkpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIFZlY3Rv
cjxpbnQ+IGFycmF5ID0gdG9OYXRpdmVBcnJheTxpbnQ+KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEp
KTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIFZlY3Rvcjxp
bnQ+IGFycmF5ID0gdG9OYXRpdmVBcnJheTxpbnQ+KHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMSkp
OworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC5z
dHJpY3RGdW5jdGlvbldpdGhBcnJheShvYmpBcmcsIGFycmF5LCBlYykpKTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6Omdl
dFB0cihpbXBsLnN0cmljdEZ1bmN0aW9uV2l0aEFycmF5KG9iakFyZywgYXJyYXksIGVjKSkpOwog
Ci0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oc3Rh
dGUsIGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRp
Y1N0cmluZ01ldGhvZChFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNTdHJpbmdNZXRob2QoRXhlY1N0
YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgp
OworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlz
VHlwZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJ2YXJpYWRpY1N0cmluZ01ldGhvZCIpOworICAg
ICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAidmFyaWFk
aWNTdHJpbmdNZXRob2QiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRo
aXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1w
bCgpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihleGVjKSk7Ci0gICAgU3RyaW5nIGhlYWQgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihzdGF0ZSkpOworICAgIFN0cmluZyBoZWFkID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvU3RyaW5n
KHN0YXRlKS0+dmFsdWUoc3RhdGUpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwot
ICAgIFZlY3RvcjxTdHJpbmc+IHRhaWwgPSB0b05hdGl2ZUFyZ3VtZW50czxTdHJpbmc+KGV4ZWMs
IDEpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgVmVjdG9y
PFN0cmluZz4gdGFpbCA9IHRvTmF0aXZlQXJndW1lbnRzPFN0cmluZz4oc3RhdGUsIDEpOworICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwudmFyaWFkaWNTdHJpbmdNZXRo
b2QoaGVhZCwgdGFpbCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblZhcmlhZGljRG91YmxlTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY0RvdWJs
ZU1ldGhvZChFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhl
Yy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVl
KCk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoq
Pih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJl
dHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInZhcmlhZGljRG91Ymxl
TWV0aG9kIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVz
dE9iaiIsICJ2YXJpYWRpY0RvdWJsZU1ldGhvZCIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBkb3VibGUgaGVhZCA9IGV4ZWMtPmFyZ3VtZW50
KDApLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKKyAgICBkb3VibGUgaGVhZCA9IHN0YXRlLT5hcmd1bWVudCgwKS50b051bWJl
cihzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgVmVjdG9yPGRv
dWJsZT4gdGFpbCA9IHRvTmF0aXZlQXJndW1lbnRzPGRvdWJsZT4oZXhlYywgMSk7Ci0gICAgaWYg
KFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBWZWN0b3I8ZG91YmxlPiB0YWls
ID0gdG9OYXRpdmVBcmd1bWVudHM8ZG91YmxlPihzdGF0ZSwgMSk7CisgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC52YXJpYWRpY0RvdWJsZU1ldGhvZChoZWFkLCB0YWls
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFk
aWNOb2RlTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY05vZGVNZXRob2QoRXhlY1N0YXRl
KiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwor
ICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlw
ZUVycm9yKCpleGVjLCAiVGVzdE9iaiIsICJ2YXJpYWRpY05vZGVNZXRob2QiKTsKKyAgICAgICAg
cmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInZhcmlhZGljTm9k
ZU1ldGhvZCIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNU
ZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0g
ICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMp
KTsKLSAgICBOb2RlKiBoZWFkID0gSlNOb2RlOjp0b1dyYXBwZWQoZXhlYy0+YXJndW1lbnQoMCkp
OwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAgICBO
b2RlKiBoZWFkID0gSlNOb2RlOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBWZWN0b3I8Tm9kZSo+IHRhaWw7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMSwgY291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7IGkgPCBj
b3VudDsgKytpKSB7Ci0gICAgICAgIGlmICghZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoaSkuaW5o
ZXJpdHMoSlNOb2RlOjppbmZvKCkpKQotICAgICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRU
eXBlRXJyb3IoKmV4ZWMsIGksICJ0YWlsIiwgIlRlc3RPYmoiLCAidmFyaWFkaWNOb2RlTWV0aG9k
IiwgIk5vZGUiKTsKLSAgICAgICAgdGFpbC5hcHBlbmQoSlNOb2RlOjp0b1dyYXBwZWQoZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoaSkpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxLCBjb3VudCA9
IHN0YXRlLT5hcmd1bWVudENvdW50KCk7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGlmICgh
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLmluaGVyaXRzKEpTTm9kZTo6aW5mbygpKSkKKyAg
ICAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKCpzdGF0ZSwgaSwgInRhaWwi
LCAiVGVzdE9iaiIsICJ2YXJpYWRpY05vZGVNZXRob2QiLCAiTm9kZSIpOworICAgICAgICB0YWls
LmFwcGVuZChKU05vZGU6OnRvV3JhcHBlZChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoaSkpKTsK
ICAgICB9CiAgICAgaW1wbC52YXJpYWRpY05vZGVNZXRob2QoaGVhZCwgdGFpbCk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkFueShFeGVjU3RhdGUqIGV4
ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQW55KEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVj
LT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUo
KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+
KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0
dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoiLCAiYW55Iik7CisgICAgICAg
IHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJhbnkiKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygp
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGlmIChVTkxJS0VM
WShleGVjLT5hcmd1bWVudENvdW50KCkgPCAyKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgZmxvYXQg
YSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvRmxvYXQoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291
bnQoKSA8IDIpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOworICAgIGZsb2F0IGEgPSBzdGF0ZS0+YXJndW1l
bnQoMCkudG9GbG9hdChzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0g
ICAgaW50IGIgPSB0b0ludDMyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEpLCBOb3JtYWxDb252ZXJz
aW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGludCBi
ID0gdG9JbnQzMihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEpLCBOb3JtYWxDb252ZXJzaW9uKTsK
KyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmFueShhLCBiKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCiBzdGF0aWMgaW5s
aW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VG
dW5jdGlvblByb21pc2UoRXhlY1N0YXRlKiwgSlNQcm9taXNlRGVmZXJyZWQqKTsKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlz
ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uKEV4ZWNTdGF0ZSog
c3RhdGUpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsUHJvbWlzZUZ1bmN0aW9u
KCpleGVjLCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25Qcm9t
aXNlKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsUHJvbWlzZUZ1bmN0aW9uKCpz
dGF0ZSwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uUHJvbWlz
ZSkpOwogfQogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvblByb21pc2UoRXhlY1N0YXRlKiBleGVjLCBKU1By
b21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkKQorc3RhdGljIGlubGluZSBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25Qcm9taXNl
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQpCiB7
Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhl
YywgIlRlc3RPYmoiLCAidGVzdFByb21pc2VGdW5jdGlvbiIpOworICAgICAgICByZXR1cm4gdGhy
b3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAidGVzdFByb21pc2VGdW5jdGlvbiIp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjpp
bmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaW1wbC50
ZXN0UHJvbWlzZUZ1bmN0aW9uKERlZmVycmVkV3JhcHBlcihleGVjLCBjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKSk7CisgICAgaW1wbC50ZXN0UHJvbWlzZUZ1bmN0
aW9uKERlZmVycmVkV3JhcHBlcihzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHBy
b21pc2VEZWZlcnJlZCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEZsb2F0QXJndW1lbnRQcm9taXNlKEV4ZWNT
dGF0ZSosIEpTUHJvbWlzZURlZmVycmVkKik7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhGbG9hdEFy
Z3VtZW50KEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEZsb2F0QXJndW1l
bnQoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGxQ
cm9taXNlRnVuY3Rpb24oKmV4ZWMsIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21p
c2VGdW5jdGlvbldpdGhGbG9hdEFyZ3VtZW50UHJvbWlzZSkpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoY2FsbFByb21pc2VGdW5jdGlvbigqc3RhdGUsIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhGbG9hdEFyZ3VtZW50UHJvbWlzZSkpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
VGVzdFByb21pc2VGdW5jdGlvbldpdGhGbG9hdEFyZ3VtZW50UHJvbWlzZShFeGVjU3RhdGUqIGV4
ZWMsIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQpCitzdGF0aWMgaW5saW5lIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlv
bldpdGhGbG9hdEFyZ3VtZW50UHJvbWlzZShFeGVjU3RhdGUqIHN0YXRlLCBKU1Byb21pc2VEZWZl
cnJlZCogcHJvbWlzZURlZmVycmVkKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+
dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7
CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0
aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVy
biB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMsICJUZXN0T2JqIiwgInRlc3RQcm9taXNlRnVuY3Rp
b25XaXRoRmxvYXRBcmd1bWVudCIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9y
KCpzdGF0ZSwgIlRlc3RPYmoiLCAidGVzdFByb21pc2VGdW5jdGlvbldpdGhGbG9hdEFyZ3VtZW50
Iik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6
OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBpZiAo
VU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAg
IGZsb2F0IGEgPSBleGVjLT5hcmd1bWVudCgwKS50b0Zsb2F0KGV4ZWMpOwotICAgIGlmIChVTkxJ
S0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAgICBmbG9hdCBhID0gc3RhdGUt
PmFyZ3VtZW50KDApLnRvRmxvYXQoc3RhdGUpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIGlmICghc3RkOjppc2Zpbml0ZShhKSkgewotICAgICAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgVHlwZUVycm9yKTsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBUeXBl
RXJyb3IpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIH0KLSAgICBpbXBsLnRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1bWVudChhLCBE
ZWZlcnJlZFdyYXBwZXIoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHByb21pc2VE
ZWZlcnJlZCkpOworICAgIGltcGwudGVzdFByb21pc2VGdW5jdGlvbldpdGhGbG9hdEFyZ3VtZW50
KGEsIERlZmVycmVkV3JhcHBlcihzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHBy
b21pc2VEZWZlcnJlZCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvblByb21pc2UoRXhlY1N0YXRl
KiwgSlNQcm9taXNlRGVmZXJyZWQqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvbihF
eGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb24oRXhlY1N0YXRl
KiBzdGF0ZSkKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGxQcm9taXNlRnVuY3Rp
b24oKmV4ZWMsIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldp
dGhFeGNlcHRpb25Qcm9taXNlKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsUHJv
bWlzZUZ1bmN0aW9uKCpzdGF0ZSwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlz
ZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvblByb21pc2UpKTsKIH0KIAotc3RhdGljIGlubGluZSBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25X
aXRoRXhjZXB0aW9uUHJvbWlzZShFeGVjU3RhdGUqIGV4ZWMsIEpTUHJvbWlzZURlZmVycmVkKiBw
cm9taXNlRGVmZXJyZWQpCitzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb25Qcm9taXNlKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQpCiB7Ci0g
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywg
IlRlc3RPYmoiLCAidGVzdFByb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb24iKTsKKyAgICAgICAg
cmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInRlc3RQcm9taXNl
RnVuY3Rpb25XaXRoRXhjZXB0aW9uIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhj
YXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPmltcGwoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsLnRlc3RQcm9t
aXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uKERlZmVycmVkV3JhcHBlcihleGVjLCBjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKSwgZWMpOwotICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBlYyk7CisgICAgaW1wbC50ZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlv
bihEZWZlcnJlZFdyYXBwZXIoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBwcm9t
aXNlRGVmZXJyZWQpLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAogc3RhdGljIGlubGlu
ZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVu
Y3Rpb25XaXRoT3B0aW9uYWxJbnRBcmd1bWVudFByb21pc2UoRXhlY1N0YXRlKiwgSlNQcm9taXNl
RGVmZXJyZWQqKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50QXJndW1lbnQoRXhl
Y1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoT3B0aW9uYWxJbnRBcmd1bWVudChF
eGVjU3RhdGUqIHN0YXRlKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbFByb21p
c2VGdW5jdGlvbigqZXhlYywganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1
bmN0aW9uV2l0aE9wdGlvbmFsSW50QXJndW1lbnRQcm9taXNlKSk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShjYWxsUHJvbWlzZUZ1bmN0aW9uKCpzdGF0ZSwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50QXJndW1lbnRQcm9taXNl
KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50QXJndW1lbnRQcm9taXNl
KEV4ZWNTdGF0ZSogZXhlYywgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCkKK3N0
YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0
UHJvbWlzZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50QXJndW1lbnRQcm9taXNlKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQpCiB7Ci0gICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RPYmoi
LCAidGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRpb25hbEludEFyZ3VtZW50Iik7CisgICAgICAg
IHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ0ZXN0UHJvbWlz
ZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50QXJndW1lbnQiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+aW1wbCgpOwogCi0gICAgc2l6ZV90IGFyZ3NDb3VudCA9IGV4ZWMtPmFy
Z3VtZW50Q291bnQoKTsKKyAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RhdGUtPmFyZ3VtZW50Q291
bnQoKTsKICAgICBpZiAoYXJnc0NvdW50IDw9IDApIHsKLSAgICAgICAgaW1wbC50ZXN0UHJvbWlz
ZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50QXJndW1lbnQoRGVmZXJyZWRXcmFwcGVyKGV4ZWMsIGNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpKTsKKyAgICAgICAgaW1w
bC50ZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50QXJndW1lbnQoRGVmZXJyZWRXcmFw
cGVyKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKSk7
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQog
Ci0gICAgaW50IGEgPSB0b0ludDMyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252
ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlu
dCBhID0gdG9JbnQzMihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9u
KTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBpbXBsLnRlc3RQcm9taXNl
RnVuY3Rpb25XaXRoT3B0aW9uYWxJbnRBcmd1bWVudChhLCBEZWZlcnJlZFdyYXBwZXIoZXhlYywg
Y2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCkpOworICAgIGltcGwu
dGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRpb25hbEludEFyZ3VtZW50KGEsIERlZmVycmVkV3Jh
cHBlcihzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCkp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmou
aCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaApp
bmRleCAwYmM3ZmM2YTEyYmJkMjg0NTdjODZhZWM0OWMzZGRlZmUwNjMxNDAwLi4zNTQ2MzExYjRi
NWZkZmQxYmU4ODA3MmVhMmQ5NmJiYmZmZjY4NGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCkBAIC05Niw3ICs5Niw3IEBA
IGlubGluZSBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3Js
ZCYsIFRlc3RPYmoqKQogfQogCiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpT
RE9NR2xvYmFsT2JqZWN0KiwgVGVzdE9iaiopOwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0
T2JqJiBpbXBsKSB7IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgJmltcGwpOyB9Citp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0T2JqJiBpbXBsKSB7IHJldHVybiB0b0pTKHN0YXRl
LCBnbG9iYWxPYmplY3QsICZpbXBsKTsgfQogSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQo
SlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RPYmoqKTsKIAogLy8gRnVu
Y3Rpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAKaW5k
ZXggZDM5OTAzNmJjNDFhZWU3NjgxZDc3NWRiYWRhN2E2OGM0Nzg2NDc0Mi4uMzhjM2Y3ZGZhZjcy
YjM0ZDVjMTM2NmY0NzQ0N2NiMjQ2MTk1YTFmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzLmNwcApAQCAtOTAsODEgKzkwLDgxIEBAIHByb3RlY3RlZDoKICAg
ICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwq
LCBKU0M6OkNvbnN0cnVjdERhdGEmKTsKIH07CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMShFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6
Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczEoRXhlY1N0YXRlKiBzdGF0ZSkK
IHsKLSAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnNDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhl
Yy0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhl
YywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIEFycmF5QnVmZmVy
KiBhcnJheUJ1ZmZlciA9IHRvQXJyYXlCdWZmZXIoZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIGlm
IChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgYXV0byogY2FzdGVkVGhpcyA9
IGpzQ2FzdDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IqPihzdGF0ZS0+
Y2FsbGVlKCkpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKHN0YXRlKSk7CisgICAgQXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyID0gdG9BcnJh
eUJ1ZmZlcihzdGF0ZS0+YXJndW1lbnQoMCkpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIFJlZlB0cjxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4gb2JqZWN0ID0gVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNyZWF0ZShhcnJheUJ1ZmZlcik7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpLCBvYmplY3QuZ2V0KCkpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09i
amVjdCh0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgb2JqZWN0LmdldCgp
KSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yczIoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnMyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgYXV0byogY2FzdGVk
VGhpcyA9IGpzQ2FzdDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IqPihl
eGVjLT5jYWxsZWUoKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBhcnJheUJ1
ZmZlclZpZXcgPSB0b0FycmF5QnVmZmVyVmlldyhleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYg
KFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBhdXRvKiBjYXN0ZWRUaGlzID0g
anNDYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcio+KHN0YXRlLT5j
YWxsZWUoKSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
KyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3Ioc3RhdGUpKTsKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBhcnJheUJ1ZmZl
clZpZXcgPSB0b0FycmF5QnVmZmVyVmlldyhzdGF0ZS0+YXJndW1lbnQoMCkpOworICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFJlZlB0cjxUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9ycz4gb2JqZWN0ID0gVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNyZWF0ZShhcnJheUJ1
ZmZlclZpZXcpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhleGVj
LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgb2JqZWN0LmdldCgpKSkpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFs
T2JqZWN0KCksIG9iamVjdC5nZXQoKSkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMzKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9y
Ojpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMyhFeGVjU3RhdGUqIHN0YXRl
KQogewotICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yc0NvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOwotICAgIGlmIChVTkxJS0VMWShl
eGVjLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgQmxvYiogYmxv
YiA9IEpTQmxvYjo6dG9XcmFwcGVkKGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtF
TFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKj4oc3RhdGUtPmNhbGxlZSgp
KTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihzdGF0ZSkpOworICAgIEJsb2IqIGJsb2IgPSBKU0Jsb2I6OnRvV3JhcHBlZChzdGF0ZS0+YXJn
dW1lbnQoMCkpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFJlZlB0cjxU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4gb2JqZWN0ID0gVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnM6OmNyZWF0ZShibG9iKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzT2JqZWN0
KHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIG9iamVjdC5nZXQoKSkpKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzT2JqZWN0KHRvSlMoc3RhdGUsIGNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpLCBvYmplY3QuZ2V0KCkpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yOjpj
b25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzNChFeGVjU3RhdGUqIGV4ZWMpCitF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnND
b25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczQoRXhlY1N0
YXRlKiBzdGF0ZSkKIHsKLSAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKLSAgICBpZiAo
VU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAg
IFN0cmluZyBzdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBhdXRv
KiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1
Y3Rvcio+KHN0YXRlLT5jYWxsZWUoKSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAgICBTdHJpbmcgc3RyaW5nID0gc3Rh
dGUtPmFyZ3VtZW50KDApLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUpOworICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFJlZlB0cjxUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9ycz4gb2JqZWN0ID0gVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNyZWF0ZShzdHJpbmcp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgb2JqZWN0LmdldCgpKSkpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoYXNPYmplY3QodG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IG9iamVjdC5nZXQoKSkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnM1KEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yOjpjb25zdHJ1
Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzNShFeGVjU3RhdGUqIHN0YXRlKQogewotICAg
IGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0Nv
bnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOwotICAgIFZlY3RvcjxpbnQ+IGxvbmdBcmdzID0g
dG9OYXRpdmVBcmd1bWVudHM8aW50PihleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKj4oc3RhdGUtPmNhbGxlZSgpKTsKKyAgICBW
ZWN0b3I8aW50PiBsb25nQXJncyA9IHRvTmF0aXZlQXJndW1lbnRzPGludD4oc3RhdGUsIDApOwor
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFJlZlB0cjxUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9ycz4gb2JqZWN0ID0gVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNyZWF0
ZShsb25nQXJncyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKGV4
ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBvYmplY3QuZ2V0KCkpKSk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSwgb2JqZWN0LmdldCgpKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyhFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rv
cjo6Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyhFeGVjU3RhdGUqIHN0YXRl
KQogewotICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+KDEsIGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSk7Ci0gICAgSlNWYWx1ZSBhcmcwKGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAg
ICBzaXplX3QgYXJnc0NvdW50ID0gc3RkOjptaW48c2l6ZV90PigxLCBzdGF0ZS0+YXJndW1lbnRD
b3VudCgpKTsKKyAgICBKU1ZhbHVlIGFyZzAoc3RhdGUtPmFyZ3VtZW50KDApKTsKICAgICBpZiAo
KGFyZ3NDb3VudCA9PSAxICYmICgoYXJnMC5pc09iamVjdCgpICYmIGFzT2JqZWN0KGFyZzApLT5p
bmhlcml0cyhKU0FycmF5QnVmZmVyOjppbmZvKCkpKSkpKQotICAgICAgICByZXR1cm4gSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzMShleGVjKTsKKyAgICAgICAgcmV0dXJuIEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yczEoc3RhdGUpOwogICAgIGlmICgoYXJnc0NvdW50ID09IDEgJiYgKChhcmcwLmlzT2JqZWN0
KCkgJiYgYXNPYmplY3QoYXJnMCktPmluaGVyaXRzKEpTQXJyYXlCdWZmZXJWaWV3OjppbmZvKCkp
KSkpKQotICAgICAgICByZXR1cm4gSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVj
dG9yOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMihleGVjKTsKKyAgICAg
ICAgcmV0dXJuIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6Y29uc3Ry
dWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczIoc3RhdGUpOwogICAgIGlmICgoYXJnc0Nv
dW50ID09IDEgJiYgKChhcmcwLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoYXJnMCktPmluaGVyaXRz
KEpTQmxvYjo6aW5mbygpKSkpKSkKLSAgICAgICAgcmV0dXJuIEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
czMoZXhlYyk7CisgICAgICAgIHJldHVybiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29u
c3RydWN0b3I6OmNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMzKHN0YXRlKTsK
ICAgICBpZiAoYXJnc0NvdW50ID09IDEpCi0gICAgICAgIHJldHVybiBKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnM0KGV4ZWMpOworICAgICAgICByZXR1cm4gSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
c0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzNChzdGF0
ZSk7CiAgICAgaWYgKCkKLSAgICAgICAgcmV0dXJuIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnNDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczUoZXhl
Yyk7CisgICAgICAgIHJldHVybiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0
b3I6OmNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM1KHN0YXRlKTsKICAgICBp
ZiAoYXJnc0NvdW50IDwgMSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CisgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3Ioc3RhdGUpOwogfQogCiBjb25zdCBDbGFzc0luZm8gSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yc0NvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0Nv
bnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IpIH07CkBAIC0yMzMsMTIgKzIzMywxMiBA
QCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjp+SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9ycygpCiAgICAgcmVsZWFzZUltcGwoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVl
IGpzVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRl
LCBKU09iamVjdCogYmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewog
ICAgIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZSo+KGJhc2VW
YWx1ZSk7CiAgICAgaWYgKCFkb21PYmplY3QpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yczo6Z2V0Q29uc3RydWN0b3IoZXhlYy0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxP
YmplY3QoKSkpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpnZXRD
b25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOwogfQog
CiBKU1ZhbHVlIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmdldENvbnN0cnVjdG9yKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9ycy5oCmluZGV4IGNiMzc4ZGQ1Nzk5NDI4MDkzZjFmZmJlMmQwODdm
ZWYyMjdiMDFkNjguLmZmYWYxZmI0ZjhiN2E5MTg5NDlmZDBlODc1OTI5YzRmNDdlNTlhY2EgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaApAQCAtODAsNyArODAs
NyBAQCBpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVy
V29ybGQmLCBUZXN0T3ZlcmxvYWRlZENvbnN0cgogfQogCiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnMqKTsKLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMm
IGltcGwpIHsgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCAmaW1wbCk7IH0KK2lubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzJiBpbXBsKSB7IHJl
dHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICZpbXBsKTsgfQogSlNDOjpKU1ZhbHVlIHRv
SlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzKik7CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRp
bnMuY3BwCmluZGV4IDU5MzJmMjBlYWVkN2Y1ZTk4NDFkNWZlYjk1YmIxYjg4NDg0Yjg1OWEuLjg1
ZjA2YTBlM2FiOGM5OWE0NzcwMjRjNmFjNjIzOTkwOTc1NzdjNmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5z
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T3ZlcnJpZGVCdWlsdGlucy5jcHAKQEAgLTE2Miw0MyArMTYyLDQzIEBAIEpTVGVzdE92ZXJyaWRl
QnVpbHRpbnM6On5KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zKCkKICAgICByZWxlYXNlSW1wbCgpOwog
fQogCi1ib29sIEpTVGVzdE92ZXJyaWRlQnVpbHRpbnM6OmdldE93blByb3BlcnR5U2xvdChKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgSlNUZXN0T3ZlcnJpZGVCdWlsdGluczo6Z2V0T3du
UHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTVGVzdE92ZXJyaWRlQnVpbHRpbnMqPihvYmplY3QpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBpZiAodGhp
c09iamVjdC0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWU7
Ci0gICAgICAgIGlmICh0aGlzT2JqZWN0LT5uYW1lR2V0dGVyKGV4ZWMsIHByb3BlcnR5TmFtZSwg
dmFsdWUpKSB7CisgICAgICAgIGlmICh0aGlzT2JqZWN0LT5uYW1lR2V0dGVyKHN0YXRlLCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlKSkgewogICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0
LCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSwgdmFsdWUpOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKGdldFN0YXRpY1ZhbHVlU2xv
dDxKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLCBCYXNlPihleGVjLCBKU1Rlc3RPdmVycmlkZUJ1aWx0
aW5zVGFibGUsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgaWYgKGdldFN0
YXRpY1ZhbHVlU2xvdDxKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLCBCYXNlPihzdGF0ZSwgSlNUZXN0
T3ZlcnJpZGVCdWlsdGluc1RhYmxlLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSlNUZXN0
T3ZlcnJpZGVCdWlsdGluczo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
Citib29sIEpTVGVzdE92ZXJyaWRlQnVpbHRpbnM6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgo
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE92
ZXJyaWRlQnVpbHRpbnMqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IElkZW50
aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpOworICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0g
SWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOwogICAgIGlmICh0aGlzT2JqZWN0LT5jbGFz
c0luZm8oKSA9PSBpbmZvKCkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZTsKLSAgICAgICAgaWYg
KHRoaXNPYmplY3QtPm5hbWVHZXR0ZXIoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSkpIHsKKyAg
ICAgICAgaWYgKHRoaXNPYmplY3QtPm5hbWVHZXR0ZXIoc3RhdGUsIHByb3BlcnR5TmFtZSwgdmFs
dWUpKSB7CiAgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIFJlYWRPbmx5IHwg
RG9udERlbGV0ZSB8IERvbnRFbnVtLCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleCh0aGlzT2JqZWN0LCBleGVjLCBpbmRleCwgc2xvdCk7CisgICAgcmV0dXJuIEJhc2U6Omdl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVjdCwgc3RhdGUsIGluZGV4LCBzbG90KTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCosIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQogewogICAgIEpTVGVzdE92ZXJyaWRlQnVpbHRpbnMqIGRvbU9iamVjdCA9
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T3ZlcnJpZGVCdWlsdGlucyo+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKICAgICBpZiAoIWRvbU9iamVjdCkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoZXhlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RPdmVycmlk
ZUJ1aWx0aW5zOjpnZXRDb25zdHJ1Y3RvcihleGVjLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9i
amVjdCgpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE92ZXJyaWRlQnVpbHRpbnM6OmdldENvbnN0cnVj
dG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKIEpTVmFs
dWUgSlNUZXN0T3ZlcnJpZGVCdWlsdGluczo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQpAQCAtMjA2LDE4ICsyMDYsMTggQEAgSlNWYWx1ZSBKU1Rl
c3RPdmVycmlkZUJ1aWx0aW5zOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmoKICAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0T3ZlcnJpZGVC
dWlsdGluc0NvbnN0cnVjdG9yPih2bSwganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFs
T2JqZWN0KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T3ZlcnJp
ZGVCdWlsdGluc1Byb3RvdHlwZUZ1bmN0aW9uTmFtZWRJdGVtKEV4ZWNTdGF0ZSogZXhlYykKK0Vu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T3ZlcnJpZGVCdWlsdGluc1Byb3RvdHlw
ZUZ1bmN0aW9uTmFtZWRJdGVtKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRl
LT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zKiBjYXN0ZWRUaGlzID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zKj4odGhpc1ZhbHVlKTsKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVy
cm9yKCpleGVjLCAiVGVzdE92ZXJyaWRlQnVpbHRpbnMiLCAibmFtZWRJdGVtIik7CisgICAgICAg
IHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE92ZXJyaWRlQnVpbHRpbnMi
LCAibmFtZWRJdGVtIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlz
LCBKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT5pbXBsKCk7Ci0gICAgU3RyaW5nIG5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBTdHJpbmcgbmFtZSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1N0cmluZyhz
dGF0ZSktPnZhbHVlKHN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IFdURjo6Z2V0UHRyKGltcGwubmFtZWRJdGVtKG5hbWUpKSk7CisgICAgSlNWYWx1ZSByZXN1bHQg
PSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1w
bC5uYW1lZEl0ZW0obmFtZSkpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5oCmluZGV4IGJmNzY5MjBkZGVhY2Vl
ZmI4OTc0YzJkMDk0MzJlOWQwZmEzNjJiYzguLjkyMDZmZWMyYjcxZmZiMDg2NDcyOGViYTFkNGQ4
ZmQ3OWY0YWY2ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuaApAQCAtODYsNyAr
ODYsNyBAQCBpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFw
cGVyV29ybGQmLCBUZXN0T3ZlcnJpZGVCdWlsdGlucwogfQogCiBKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE92ZXJyaWRlQnVpbHRpbnMq
KTsKLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE92ZXJyaWRlQnVpbHRpbnMmIGltcGwpIHsg
cmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCAmaW1wbCk7IH0KK2lubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFRlc3RPdmVycmlkZUJ1aWx0aW5zJiBpbXBsKSB7IHJldHVybiB0b0pTKHN0YXRl
LCBnbG9iYWxPYmplY3QsICZpbXBsKTsgfQogSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQo
SlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RPdmVycmlkZUJ1aWx0aW5z
Kik7CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlLmNwcAppbmRleCBlYjMwNTU4Y2Q3ZjFhOGYwYjdmYTgxMzg1YTg1YjJjNTE1MmE1
NWU4Li4zZjI4Yjc2OTNlY2IxMDk0Y2NmNWE2YTY5NWQwMmUzY2FhMjg3MWIyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcApA
QCAtMTU4LDE0MCArMTU4LDE0MCBAQCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2U6On5KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UoKQogICAgIHJlbGVhc2VJ
bXBsKCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZVZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2Jq
ZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAg
ICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSo+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAg
ICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZVByb3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXBy
ZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlIiwgInZhbHVlIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhl
YywgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UiLCAidmFsdWUiKTsKKyAgICAg
ICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSIsICJ2YWx1ZSIpOworICAgICAgICByZXR1cm4g
dGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZSIsICJ2YWx1ZSIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
aW1wbCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbC52YWx1ZSgpID8gaW1wbC52YWx1ZSgp
LT5kZXNlcmlhbGl6ZShleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgMCkgOiBqc051
bGwoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwudmFsdWUoKSA/IGltcGwudmFsdWUoKS0+
ZGVzZXJpYWxpemUoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCAwKSA6IGpzTnVs
bCgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAogCi1FbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VSZWFkb25seVZhbHVl
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZVJlYWRvbmx5VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3Qq
IHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpT
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAg
ICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
UHJvdG90eXBlKj4oc2xvdEJhc2UpKQotICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0
ZWRHZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Ui
LCAicmVhZG9ubHlWYWx1ZSIpOwotICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3Io
KmV4ZWMsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIiwgInJlYWRvbmx5VmFs
dWUiKTsKKyAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0
YXRlLCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSIsICJyZWFkb25seVZhbHVl
Iik7CisgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIiwgInJlYWRvbmx5VmFsdWUiKTsKICAgICB9CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9
IGltcGwucmVhZG9ubHlWYWx1ZSgpID8gaW1wbC5yZWFkb25seVZhbHVlKCktPmRlc2VyaWFsaXpl
KGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCAwKSA6IGpzTnVsbCgpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0gaW1wbC5yZWFkb25seVZhbHVlKCkgPyBpbXBsLnJlYWRvbmx5VmFsdWUo
KS0+ZGVzZXJpYWxpemUoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCAwKSA6IGpz
TnVsbCgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAogCi1FbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCog
c2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAg
IFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAg
ICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQ
cm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRl
ZEdldHRlckVycm9yKCpleGVjLCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSIs
ICJjYWNoZWRWYWx1ZSIpOwotICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4
ZWMsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIiwgImNhY2hlZFZhbHVlIik7
CisgICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpzdGF0ZSwg
IlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UiLCAiY2FjaGVkVmFsdWUiKTsKKyAg
ICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UiLCAiY2FjaGVkVmFsdWUiKTsKICAgICB9CiAgICAgaWYgKEpT
VmFsdWUgY2FjaGVkVmFsdWUgPSBjYXN0ZWRUaGlzLT5tX2NhY2hlZFZhbHVlLmdldCgpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhY2hlZFZhbHVlKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbC5jYWNoZWRW
YWx1ZSgpID8gaW1wbC5jYWNoZWRWYWx1ZSgpLT5kZXNlcmlhbGl6ZShleGVjLCBjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgMCkgOiBqc051bGwoKTsKLSAgICBjYXN0ZWRUaGlzLT5tX2NhY2hl
ZFZhbHVlLnNldChleGVjLT52bSgpLCBjYXN0ZWRUaGlzLCByZXN1bHQpOworICAgIEpTVmFsdWUg
cmVzdWx0ID0gaW1wbC5jYWNoZWRWYWx1ZSgpID8gaW1wbC5jYWNoZWRWYWx1ZSgpLT5kZXNlcmlh
bGl6ZShzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxsKCk7Cisg
ICAgY2FzdGVkVGhpcy0+bV9jYWNoZWRWYWx1ZS5zZXQoc3RhdGUtPnZtKCksIGNhc3RlZFRoaXMs
IHJlc3VsdCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiAKLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBvcnRzKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZVBvcnRzKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BB
UkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNs
b3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5
bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSo+
KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJy
b3IoKmV4ZWMsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIiwgInBvcnRzIik7
Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UiLCAicG9ydHMiKTsKKyAgICAgICAgICAgIHJldHVybiBy
ZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0YXRlLCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZSIsICJwb3J0cyIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBl
RXJyb3IoKnN0YXRlLCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSIsICJwb3J0
cyIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNBcnJheShleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
aW1wbC5wb3J0cygpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXkoc3RhdGUsIGNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnBvcnRzKCkpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRSZWFkb25seVZhbHVlKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNh
Y2hlZFJlYWRvbmx5VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNsb3RCYXNlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0oc2xv
dEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlKj4o
c2xvdEJhc2UpKQotICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJv
cigqZXhlYywgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UiLCAiY2FjaGVkUmVh
ZG9ubHlWYWx1ZSIpOwotICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKmV4ZWMs
ICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIiwgImNhY2hlZFJlYWRvbmx5VmFs
dWUiKTsKKyAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKnN0
YXRlLCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSIsICJjYWNoZWRSZWFkb25s
eVZhbHVlIik7CisgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIiwgImNhY2hlZFJlYWRvbmx5VmFsdWUi
KTsKICAgICB9CiAgICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSBjYXN0ZWRUaGlzLT5tX2Nh
Y2hlZFJlYWRvbmx5VmFsdWUuZ2V0KCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
Y2FjaGVkVmFsdWUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAg
SlNWYWx1ZSByZXN1bHQgPSBpbXBsLmNhY2hlZFJlYWRvbmx5VmFsdWUoKSA/IGltcGwuY2FjaGVk
UmVhZG9ubHlWYWx1ZSgpLT5kZXNlcmlhbGl6ZShleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgMCkgOiBqc051bGwoKTsKLSAgICBjYXN0ZWRUaGlzLT5tX2NhY2hlZFJlYWRvbmx5VmFs
dWUuc2V0KGV4ZWMtPnZtKCksIGNhc3RlZFRoaXMsIHJlc3VsdCk7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSBpbXBsLmNhY2hlZFJlYWRvbmx5VmFsdWUoKSA/IGltcGwuY2FjaGVkUmVhZG9ubHlWYWx1
ZSgpLT5kZXNlcmlhbGl6ZShzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIDApIDog
anNOdWxsKCk7CisgICAgY2FzdGVkVGhpcy0+bV9jYWNoZWRSZWFkb25seVZhbHVlLnNldChzdGF0
ZS0+dm0oKSwgY2FzdGVkVGhpcywgcmVzdWx0KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CiB9CiAKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZVZh
bHVlLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNPYmplY3QqIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
ICAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUqIGRvbU9i
amVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
UHJvdG90eXBlKj4oYmFzZVZhbHVlKTsKICAgICBpZiAoIWRvbU9iamVjdCkKLSAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmdldENvbnN0cnVjdG9yKGV4ZWMt
PnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3Ioc3RhdGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwg
ZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOwogfQogCi12b2lkIHNldEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJh
c2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQordm9pZCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1
ZShFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShi
YXNlT2JqZWN0KTsKICAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGNh
c3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UiLCAidmFsdWUiKTsKKyAgICAgICAgICAgIHJl
cG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlIiwgInZhbHVlIik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93
U2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZSIsICJ2YWx1ZSIpOworICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAi
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSIsICJ2YWx1ZSIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAg
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbmF0aXZlVmFsdWUgPSBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmNyZWF0ZShleGVjLCB2YWx1ZSwgMCwgMCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBu
YXRpdmVWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKHN0YXRlLCB2YWx1ZSwg
MCwgMCk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybjsKICAgICBpbXBsLnNldFZhbHVlKG5hdGl2ZVZhbHVlKTsKIH0KIAogCi12b2lkIHNl
dEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBzZXRKU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCog
YmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIGlmIChqc0R5
bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSo+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0
ZWRTZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Ui
LCAiY2FjaGVkVmFsdWUiKTsKKyAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJv
cigqc3RhdGUsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIiwgImNhY2hlZFZh
bHVlIik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpl
eGVjLCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSIsICJjYWNoZWRWYWx1ZSIp
OworICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSIsICJjYWNoZWRWYWx1ZSIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbmF0aXZlVmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OmNyZWF0ZShleGVjLCB2YWx1ZSwgMCwgMCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBuYXRpdmVW
YWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKHN0YXRlLCB2YWx1ZSwgMCwgMCk7
CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
bjsKICAgICBpbXBsLnNldENhY2hlZFZhbHVlKG5hdGl2ZVZhbHVlKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAppbmRleCBhZTQ0
NThlODhmMWI4Nzk0NDM5NjVhYWY4YjVmYjY3Mzg4ZGM0MjM0Li5hNTFhNjA5NTNjMzQwNWEyMmMy
M2E5MTI0Y2E5OGJhZjQ1MjRhMjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCkBAIC04Niw3ICs4Niw3IEBAIGlubGluZSBKU0M6
OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYsIFRlc3RTZXJp
YWxpemVkU2NyaXB0CiB9CiAKIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNE
T01HbG9iYWxPYmplY3QqLCBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKik7Ci1p
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Um
IGltcGwpIHsgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCAmaW1wbCk7IH0KK2lubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UmIGlt
cGwpIHsgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgJmltcGwpOyB9CiBKU0M6OkpT
VmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0
KiwgVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSopOwogCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRl
ZnMuY3BwCmluZGV4IGQ2YjY0MmI5NGViM2Q2MGI5NjJmOGVkY2NkZDkyY2FiYTdiNGQzMWQuLjk3
OGNhZGNjMjEwOGQzZmVjMzQyMDg4ZWE3YzBmNjE3OGQ3ZDAwYmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZz
LmNwcApAQCAtMTQzLDE5ICsxNDMsMTkgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpT
VGVzdFR5cGVkZWZzQ29uc3RydWN0b3JUYWJsZVZhbHVlc1tdID0KICAgICB7ICJUZXN0U3ViT2Jq
IiwgRG9udERlbGV0ZSB8IFJlYWRPbmx5LCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGlj
X2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdFR5cGVkZWZzQ29uc3RydWN0
b3JUZXN0U3ViT2JqKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1
dFZhbHVlRnVuYz4oMCkgfSB9LAogfTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBK
U1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1Rlc3RUeXBlZGVmcyhFeGVjU3Rh
dGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdFR5cGVkZWZzQ29u
c3RydWN0b3I6OmNvbnN0cnVjdEpTVGVzdFR5cGVkZWZzKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0g
ICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKj4o
ZXhlYy0+Y2FsbGVlKCkpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50KCkg
PCAyKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgU3RyaW5nIGhlbGxvID0gZXhlYy0+YXJndW1lbnQo
MCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RUeXBl
ZGVmc0NvbnN0cnVjdG9yKj4oc3RhdGUtPmNhbGxlZSgpKTsKKyAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOworICAgIFN0cmluZyBo
ZWxsbyA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRlKTsK
KyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50
KDEpLmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rp
b25FcnJvcigqZXhlYywgMSwgInRlc3RDYWxsYmFjayIsICJUZXN0VHlwZWRlZnMiLCBudWxscHRy
KTsKLSAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiB0ZXN0Q2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFj
azo6Y3JlYXRlKGFzT2JqZWN0KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKSwgY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCkpOworICAgIGlmICghc3RhdGUtPmFyZ3VtZW50KDEpLmlzT2JqZWN0
KCkpCisgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcigqc3Rh
dGUsIDEsICJ0ZXN0Q2FsbGJhY2siLCAiVGVzdFR5cGVkZWZzIiwgbnVsbHB0cik7CisgICAgUmVm
UHRyPFRlc3RDYWxsYmFjaz4gdGVzdENhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2s6OmNyZWF0ZShh
c09iamVjdChzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSk7CiAgICAgUmVmUHRyPFRlc3RUeXBlZGVmcz4gb2JqZWN0ID0gVGVzdFR5cGVkZWZz
OjpjcmVhdGUoaGVsbG8sIHRlc3RDYWxsYmFjayk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShhc09iamVjdCh0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBvYmplY3Qu
Z2V0KCkpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKHN0YXRl
LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgb2JqZWN0LmdldCgpKSkpOwogfQogCiBjb25z
dCBDbGFzc0luZm8gSlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdFR5
cGVkZWZzQ29uc3RydWN0b3IiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3IpIH07CkBAIC0yNDEsMjUgKzI0MSwyNSBAQCBKU1Rl
c3RUeXBlZGVmczo6fkpTVGVzdFR5cGVkZWZzKCkKICAgICByZWxlYXNlSW1wbCgpOwogfQogCi1i
b29sIEpTVGVzdFR5cGVkZWZzOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCitib29sIEpTVGVzdFR5cGVkZWZzOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90JiBzbG90KQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0
VHlwZWRlZnMqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKLSAgICBpZiAoZ2V0U3RhdGljVmFsdWVTbG90PEpTVGVzdFR5cGVkZWZz
LCBCYXNlPihleGVjLCBKU1Rlc3RUeXBlZGVmc1RhYmxlLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5h
bWUsIHNsb3QpKQorICAgIGlmIChnZXRTdGF0aWNWYWx1ZVNsb3Q8SlNUZXN0VHlwZWRlZnMsIEJh
c2U+KHN0YXRlLCBKU1Rlc3RUeXBlZGVmc1RhYmxlLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IHNsb3QpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0dHIoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25n
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnNQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAgICAgICAg
ICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdFR5cGVkZWZz
IiwgInVuc2lnbmVkTG9uZ0xvbmdBdHRyIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5
cGVFcnJvcigqZXhlYywgIlRlc3RUeXBlZGVmcyIsICJ1bnNpZ25lZExvbmdMb25nQXR0ciIpOwor
ICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqc3RhdGUsICJU
ZXN0VHlwZWRlZnMiLCAidW5zaWduZWRMb25nTG9uZ0F0dHIiKTsKKyAgICAgICAgcmV0dXJuIHRo
cm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RUeXBlZGVmcyIsICJ1bnNpZ25lZExvbmdM
b25nQXR0ciIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwog
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC51bnNpZ25lZExvbmdMb25nQXR0cigp
KTsKQEAgLTI2Nyw2MiArMjY3LDYyIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzVW5z
aWduZWRMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvCiB9CiAKIAot
RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNJbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFs
dWUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNJbW11
dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIHNs
b3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBV
TlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURf
UEFSQU0oc2xvdEJhc2UpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVz
dFR5cGVkZWZzKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RUeXBlZGVmcyo+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzUHJvdG90eXBlKj4o
c2xvdEJhc2UpKQotICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJv
cigqZXhlYywgIlRlc3RUeXBlZGVmcyIsICJpbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUi
KTsKLSAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdFR5cGVk
ZWZzIiwgImltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIpOworICAgICAgICAgICAgcmV0
dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqc3RhdGUsICJUZXN0VHlwZWRlZnMiLCAi
aW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlIik7CisgICAgICAgIHJldHVybiB0aHJvd0dl
dHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0VHlwZWRlZnMiLCAiaW1tdXRhYmxlU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBs
KCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLmltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSgpID8gaW1wbC5pbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUoKS0+ZGVzZXJpYWxp
emUoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxsKCk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSBpbXBsLmltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgpID8g
aW1wbC5pbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUoKS0+ZGVzZXJpYWxpemUoc3RhdGUs
IGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCAwKSA6IGpzTnVsbCgpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBl
ZGVmc0NvbnN0cnVjdG9yVGVzdFN1Yk9iaihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90
QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yVGVzdFN1Yk9iaihFeGVjU3RhdGUqIHN0YXRl
LCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1
ZSk7CiAgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RUeXBlZGVmcyo+KHNsb3RC
YXNlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFN1Yk9iajo6Z2V0Q29uc3Ry
dWN0b3IoZXhlYy0+dm0oKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFN1Yk9iajo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZt
KCksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKIAotRW5jb2RlZEpTVmFsdWUg
anNUZXN0VHlwZWRlZnNBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURf
UEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2Fz
dDxKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVy
biByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0VHlwZWRlZnMiLCAiYXR0
cldpdGhHZXR0ZXJFeGNlcHRpb24iKTsKLSAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVy
cm9yKCpleGVjLCAiVGVzdFR5cGVkZWZzIiwgImF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uIik7Cisg
ICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpzdGF0ZSwgIlRl
c3RUeXBlZGVmcyIsICJhdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOworICAgICAgICByZXR1cm4g
dGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdFR5cGVkZWZzIiwgImF0dHJXaXRoR2V0
dGVyRXhjZXB0aW9uIik7CiAgICAgfQogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051
bWJlcihpbXBsLmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKSk7Ci0gICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIAotRW5jb2RlZEpTVmFsdWUganNUZXN0
VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nh
c3Q8SlNUZXN0VHlwZWRlZnMqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rl
c3RUeXBlZGVmc1Byb3RvdHlwZSo+KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBv
cnREZXByZWNhdGVkR2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0VHlwZWRlZnMiLCAiYXR0cldpdGhT
ZXR0ZXJFeGNlcHRpb24iKTsKLSAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpl
eGVjLCAiVGVzdFR5cGVkZWZzIiwgImF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uIik7CisgICAgICAg
ICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RUeXBl
ZGVmcyIsICJhdHRyV2l0aFNldHRlckV4Y2VwdGlvbiIpOworICAgICAgICByZXR1cm4gdGhyb3dH
ZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdFR5cGVkZWZzIiwgImF0dHJXaXRoU2V0dGVyRXhj
ZXB0aW9uIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmF0dHJXaXRoU2V0dGVyRXhjZXB0aW9u
KCkpOwpAQCAtMzMwLDE3MSArMzMwLDE3MSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVm
c0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqCiB9CiAK
IAotRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2Vw
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1N0
cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBz
bG90QmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAg
VU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHNsb3RCYXNlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rl
c3RUeXBlZGVmcyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSo+
KHNsb3RCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJy
b3IoKmV4ZWMsICJUZXN0VHlwZWRlZnMiLCAic3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24i
KTsKLSAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpleGVjLCAiVGVzdFR5cGVk
ZWZzIiwgInN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uIik7CisgICAgICAgICAgICByZXR1
cm4gcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RUeXBlZGVmcyIsICJz
dHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOworICAgICAgICByZXR1cm4gdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdFR5cGVkZWZzIiwgInN0cmluZ0F0dHJXaXRoR2V0dGVy
RXhjZXB0aW9uIik7CiAgICAgfQogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmlu
Z1dpdGhDYWNoZShleGVjLCBpbXBsLnN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKSk7
Ci0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
U3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9u
KGVjKSk7CisgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOwogfQogCiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZz
U3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
c2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2Rl
ZEpTVmFsdWUganNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVj
U3RhdGUqIHN0YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdFR5cGVkZWZzKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8
SlNUZXN0VHlwZWRlZnNQcm90b3R5cGUqPihzbG90QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4g
cmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpleGVjLCAiVGVzdFR5cGVkZWZzIiwgInN0cmlu
Z0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uIik7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5
cGVFcnJvcigqZXhlYywgIlRlc3RUeXBlZGVmcyIsICJzdHJpbmdBdHRyV2l0aFNldHRlckV4Y2Vw
dGlvbiIpOworICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigq
c3RhdGUsICJUZXN0VHlwZWRlZnMiLCAic3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iKTsK
KyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RUeXBlZGVm
cyIsICJzdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbiIpOwogICAgIH0KICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdX
aXRoQ2FjaGUoZXhlYywgaW1wbC5zdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpKTsKKyAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnN0cmluZ0F0
dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3Bl
cnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQ29uc3RydWN0b3IoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKICAgICBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSo+KGJhc2VWYWx1ZSk7CiAgICAgaWYgKCFk
b21PYmplY3QpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0VHlwZWRlZnM6OmdldENvbnN0cnVjdG9yKGV4ZWMt
PnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3Ioc3RhdGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0VHlw
ZWRlZnM6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVj
dCgpKSk7CiB9CiAKLXZvaWQgc2V0SlNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0cihF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0VHlwZWRl
ZnNVbnNpZ25lZExvbmdMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZU9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3RUeXBlZGVmcyogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPihKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBp
ZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigq
ZXhlYywgIlRlc3RUeXBlZGVmcyIsICJ1bnNpZ25lZExvbmdMb25nQXR0ciIpOworICAgICAgICAg
ICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RUeXBlZGVmcyIsICJ1
bnNpZ25lZExvbmdMb25nQXR0ciIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvd1Nl
dHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RUeXBlZGVmcyIsICJ1bnNpZ25lZExvbmdMb25nQXR0
ciIpOworICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdFR5cGVk
ZWZzIiwgInVuc2lnbmVkTG9uZ0xvbmdBdHRyIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICB1bnNpZ25lZCBsb25nIGxv
bmcgbmF0aXZlVmFsdWUgPSB0b1VJbnQ2NChleGVjLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7
Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICB1bnNpZ25lZCBs
b25nIGxvbmcgbmF0aXZlVmFsdWUgPSB0b1VJbnQ2NChzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZl
cnNpb24pOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm47CiAgICAgaW1wbC5zZXRVbnNpZ25lZExvbmdMb25nQXR0cihuYXRpdmVWYWx1ZSk7
CiB9CiAKIAotdm9pZCBzZXRKU1Rlc3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0
VHlwZWRlZnNJbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNPYmplY3QqIGJhc2VPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oYmFzZU9iamVjdCk7CiAgICAgSlNU
ZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnNQcm90b3R5cGUq
PihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSkpCi0gICAgICAgICAgICByZXBvcnREZXByZWNh
dGVkU2V0dGVyRXJyb3IoKmV4ZWMsICJUZXN0VHlwZWRlZnMiLCAiaW1tdXRhYmxlU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlIik7CisgICAgICAgICAgICByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3Io
KnN0YXRlLCAiVGVzdFR5cGVkZWZzIiwgImltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIp
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqZXhlYywg
IlRlc3RUeXBlZGVmcyIsICJpbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUiKTsKKyAgICAg
ICAgICAgIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RUeXBlZGVmcyIsICJpbW11
dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIFJlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IG5hdGl2ZVZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUo
ZXhlYywgdmFsdWUsIDAsIDApOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbmF0aXZlVmFsdWUgPSBTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShzdGF0ZSwgdmFsdWUsIDAsIDApOworICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaW1w
bC5zZXRJbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUobmF0aXZlVmFsdWUpOwogfQogCiAK
LXZvaWQgc2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0
aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZU9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7
CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAg
IFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNE
eW5hbWljQ2FzdDxKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywg
IlRlc3RUeXBlZGVmcyIsICJhdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOworICAgICAgICAgICAg
cmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RUeXBlZGVmcyIsICJhdHRy
V2l0aEdldHRlckV4Y2VwdGlvbiIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvd1Nl
dHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RUeXBlZGVmcyIsICJhdHRyV2l0aEdldHRlckV4Y2Vw
dGlvbiIpOworICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdFR5
cGVkZWZzIiwgImF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uIik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBpbnQgbmF0aXZl
VmFsdWUgPSB0b0ludDMyKGV4ZWMsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAo
VU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGludCBuYXRpdmVWYWx1ZSA9IHRv
SW50MzIoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0QXR0
cldpdGhHZXR0ZXJFeGNlcHRpb24obmF0aXZlVmFsdWUpOwogfQogCiAKLXZvaWQgc2V0SlNUZXN0
VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlv
bihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShi
YXNlT2JqZWN0KTsKICAgICBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nh
c3Q8SlNUZXN0VHlwZWRlZnMqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rl
c3RUeXBlZGVmc1Byb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKSkKLSAgICAg
ICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RUeXBlZGVmcyIs
ICJhdHRyV2l0aFNldHRlckV4Y2VwdGlvbiIpOworICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRl
ZFNldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RUeXBlZGVmcyIsICJhdHRyV2l0aFNldHRlckV4Y2Vw
dGlvbiIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigq
ZXhlYywgIlRlc3RUeXBlZGVmcyIsICJhdHRyV2l0aFNldHRlckV4Y2VwdGlvbiIpOworICAgICAg
ICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdFR5cGVkZWZzIiwgImF0dHJX
aXRoU2V0dGVyRXhjZXB0aW9uIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICBpbnQgbmF0aXZlVmFsdWUgPSB0b0ludDMyKGV4ZWMsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9u
KTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGludCBuYXRp
dmVWYWx1ZSA9IHRvSW50MzIoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAg
IGltcGwuc2V0QXR0cldpdGhTZXR0ZXJFeGNlcHRpb24obmF0aXZlVmFsdWUsIGVjKTsKLSAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMp
OwogfQogCiAKLXZvaWQgc2V0SlNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2Vw
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0
VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBK
U09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShiYXNlT2JqZWN0KTsKICAgICBKU1Rl
c3RUeXBlZGVmcyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSo+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKSkKLSAgICAgICAgICAgIHJlcG9ydERlcHJlY2F0
ZWRTZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RUeXBlZGVmcyIsICJzdHJpbmdBdHRyV2l0aEdldHRl
ckV4Y2VwdGlvbiIpOworICAgICAgICAgICAgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKCpz
dGF0ZSwgIlRlc3RUeXBlZGVmcyIsICJzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvd1NldHRlclR5cGVFcnJvcigqZXhlYywgIlRl
c3RUeXBlZGVmcyIsICJzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOworICAgICAgICAg
ICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdFR5cGVkZWZzIiwgInN0cmluZ0F0
dHJXaXRoR2V0dGVyRXhjZXB0aW9uIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKLSAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2
YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1N0cmlu
ZyhzdGF0ZSktPnZhbHVlKHN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0U3RyaW5nQXR0cldpdGhHZXR0
ZXJFeGNlcHRpb24obmF0aXZlVmFsdWUpOwogfQogCiAKLXZvaWQgc2V0SlNUZXN0VHlwZWRlZnNT
dHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBi
YXNlT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKK3ZvaWQgc2V0SlNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2Vw
dGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU09iamVjdCogYmFzZU9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJB
TShiYXNlT2JqZWN0KTsKICAgICBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxK
U1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKSkKLSAg
ICAgICAgICAgIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcigqZXhlYywgIlRlc3RUeXBlZGVm
cyIsICJzdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbiIpOworICAgICAgICAgICAgcmVwb3J0
RGVwcmVjYXRlZFNldHRlckVycm9yKCpzdGF0ZSwgIlRlc3RUeXBlZGVmcyIsICJzdHJpbmdBdHRy
V2l0aFNldHRlckV4Y2VwdGlvbiIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvd1Nl
dHRlclR5cGVFcnJvcigqZXhlYywgIlRlc3RUeXBlZGVmcyIsICJzdHJpbmdBdHRyV2l0aFNldHRl
ckV4Y2VwdGlvbiIpOworICAgICAgICAgICAgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAi
VGVzdFR5cGVkZWZzIiwgInN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uIik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKTsKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2YWx1ZS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1N0cmluZyhzdGF0
ZSktPnZhbHVlKHN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuOwogICAgIGltcGwuc2V0U3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNl
cHRpb24obmF0aXZlVmFsdWUsIGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwor
ICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwogfQogCiAKQEAgLTUwMywxMzEgKzUwMywx
MzEgQEAgSlNWYWx1ZSBKU1Rlc3RUeXBlZGVmczo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxK
U1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yPih2bSwganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
Z2xvYmFsT2JqZWN0KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkZ1bmMoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuYyhF
eGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1Zh
bHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAg
SlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZz
Kj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICBy
ZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdFR5cGVkZWZzIiwgImZ1bmMiKTsK
KyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0VHlwZWRlZnMi
LCAiZnVuYyIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNU
ZXN0VHlwZWRlZnM6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwo
KTsKIAotICAgIHNpemVfdCBhcmdzQ291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7CisgICAg
c2l6ZV90IGFyZ3NDb3VudCA9IHN0YXRlLT5hcmd1bWVudENvdW50KCk7CiAgICAgaWYgKGFyZ3ND
b3VudCA8PSAwKSB7CiAgICAgICAgIGltcGwuZnVuYygpOwogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIAotICAgIFZlY3RvcjxpbnQ+IHggPSB0
b05hdGl2ZUFycmF5PGludD4oZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJ
S0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgVmVjdG9yPGludD4geCA9IHRvTmF0aXZl
QXJyYXk8aW50PihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmZ1bmMoeCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU2V0U2hhZG93KEV4ZWNTdGF0ZSogZXhlYykK
K0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5j
dGlvblNldFNoYWRvdyhFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVl
ID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhp
c1ZhbHVlKCk7CiAgICAgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdFR5cGVkZWZzKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdFR5cGVk
ZWZzIiwgInNldFNoYWRvdyIpOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RUeXBlZGVmcyIsICJzZXRTaGFkb3ciKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdFR5cGVkZWZzOjppbmZvKCkpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA8IDMpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBmbG9hdCB3aWR0aCA9IGV4ZWMt
PmFyZ3VtZW50KDApLnRvRmxvYXQoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDMp
KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihzdGF0ZSkpOworICAgIGZsb2F0IHdpZHRoID0gc3RhdGUtPmFyZ3VtZW50KDAp
LnRvRmxvYXQoc3RhdGUpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGZs
b2F0IGhlaWdodCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvRmxvYXQoZXhlYyk7Ci0gICAgaWYgKFVO
TElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBmbG9hdCBoZWlnaHQgPSBzdGF0ZS0+
YXJndW1lbnQoMSkudG9GbG9hdChzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7Ci0gICAgZmxvYXQgYmx1ciA9IGV4ZWMtPmFyZ3VtZW50KDIpLnRvRmxvYXQoZXhlYyk7Ci0g
ICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBmbG9hdCBibHVyID0g
c3RhdGUtPmFyZ3VtZW50KDIpLnRvRmxvYXQoc3RhdGUpOworICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogCi0gICAgc2l6ZV90IGFyZ3NDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQo
KTsKKyAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RhdGUtPmFyZ3VtZW50Q291bnQoKTsKICAgICBp
ZiAoYXJnc0NvdW50IDw9IDMpIHsKICAgICAgICAgaW1wbC5zZXRTaGFkb3cod2lkdGgsIGhlaWdo
dCwgYmx1cik7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgfQogCi0gICAgU3RyaW5nIGNvbG9yID0gZXhlYy0+YXJndW1lbnQoMykudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgU3RyaW5nIGNvbG9yID0gc3RhdGUtPmFyZ3VtZW50KDMpLnRvU3RyaW5nKHN0YXRl
KS0+dmFsdWUoc3RhdGUpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlm
IChhcmdzQ291bnQgPD0gNCkgewogICAgICAgICBpbXBsLnNldFNoYWRvdyh3aWR0aCwgaGVpZ2h0
LCBibHVyLCBjb2xvcik7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgfQogCi0gICAgZmxvYXQgYWxwaGEgPSBleGVjLT5hcmd1bWVudCg0KS50b0Zs
b2F0KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
ZmxvYXQgYWxwaGEgPSBzdGF0ZS0+YXJndW1lbnQoNCkudG9GbG9hdChzdGF0ZSk7CisgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5zZXRTaGFkb3cod2lkdGgsIGhlaWdo
dCwgYmx1ciwgY29sb3IsIGFscGhhKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVk
ZWZzUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoU2VxdWVuY2VBcmcoRXhlY1N0YXRlKiBleGVj
KQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aFNlcXVlbmNlQXJnKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcyA9
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4
ZWMsICJUZXN0VHlwZWRlZnMiLCAibWV0aG9kV2l0aFNlcXVlbmNlQXJnIik7CisgICAgICAgIHJl
dHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdFR5cGVkZWZzIiwgIm1ldGhvZFdp
dGhTZXF1ZW5jZUFyZyIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhp
cywgSlNUZXN0VHlwZWRlZnM6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PmltcGwoKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0g
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IoZXhlYykpOwotICAgIFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4g
c2VxdWVuY2VBcmcgPSAodG9SZWZQdHJOYXRpdmVBcnJheTxTZXJpYWxpemVkU2NyaXB0VmFsdWUs
IEpTU2VyaWFsaXplZFNjcmlwdFZhbHVlPihleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgJkpTU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjp0b1dyYXBwZWQpKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgp
IDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CisgICAgVmVjdG9yPFJlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+PiBzZXF1ZW5jZUFyZyA9ICh0b1JlZlB0ck5hdGl2ZUFycmF5PFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSwgSlNTZXJpYWxpemVkU2NyaXB0VmFsdWU+KHN0YXRlLCBzdGF0ZS0+YXJndW1l
bnQoMCksICZKU1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dG9XcmFwcGVkKSk7CisgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBs
Lm1ldGhvZFdpdGhTZXF1ZW5jZUFyZyhzZXF1ZW5jZUFyZykpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVBcnJheUFyZyhFeGVjU3RhdGUqIGV4
ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBl
RnVuY3Rpb25OdWxsYWJsZUFycmF5QXJnKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcyA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPih0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKmV4ZWMs
ICJUZXN0VHlwZWRlZnMiLCAibnVsbGFibGVBcnJheUFyZyIpOworICAgICAgICByZXR1cm4gdGhy
b3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RUeXBlZGVmcyIsICJudWxsYWJsZUFycmF5QXJn
Iik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RUeXBl
ZGVmczo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAg
IGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7
Ci0gICAgVmVjdG9yPFN0cmluZz4gYXJyYXlBcmcgPSB0b05hdGl2ZUFycmF5PFN0cmluZz4oZXhl
YywgZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3Ioc3RhdGUpKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBhcnJheUFyZyA9IHRvTmF0aXZlQXJy
YXk8U3RyaW5nPihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm51bGxhYmxlQXJyYXlBcmcoYXJyYXlBcmcpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkZ1bmNXaXRo
Q2xhbXAoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuY1dpdGhDbGFtcChFeGVjU3RhdGUqIHN0YXRl
KQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0VHlwZWRlZnMq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzKj4odGhpc1ZhbHVlKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlz
VHlwZUVycm9yKCpleGVjLCAiVGVzdFR5cGVkZWZzIiwgImZ1bmNXaXRoQ2xhbXAiKTsKKyAgICAg
ICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0VHlwZWRlZnMiLCAiZnVu
Y1dpdGhDbGFtcCIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywg
SlNUZXN0VHlwZWRlZnM6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPmlt
cGwoKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IoZXhlYykpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgdW5zaWduZWQgbG9uZyBsb25nIGFyZzEgPSAwOwotICAg
IGRvdWJsZSBhcmcxTmF0aXZlVmFsdWUgPSBleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVj
KTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGRvdWJsZSBh
cmcxTmF0aXZlVmFsdWUgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9OdW1iZXIoc3RhdGUpOworICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgaWYgKCFzdGQ6OmlzbmFuKGFyZzFO
YXRpdmVWYWx1ZSkpCiAgICAgICAgIGFyZzEgPSBjbGFtcFRvPHVuc2lnbmVkIGxvbmcgbG9uZz4o
YXJnMU5hdGl2ZVZhbHVlKTsKIAogCi0gICAgc2l6ZV90IGFyZ3NDb3VudCA9IGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKTsKKyAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RhdGUtPmFyZ3VtZW50Q291bnQo
KTsKICAgICBpZiAoYXJnc0NvdW50IDw9IDEpIHsKICAgICAgICAgaW1wbC5mdW5jV2l0aENsYW1w
KGFyZzEpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIH0KIAogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBhcmcyID0gMDsKLSAgICBkb3VibGUgYXJn
Mk5hdGl2ZVZhbHVlID0gZXhlYy0+YXJndW1lbnQoMSkudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYg
KFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBkb3VibGUgYXJnMk5hdGl2ZVZh
bHVlID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvTnVtYmVyKHN0YXRlKTsKKyAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGlmICghc3RkOjppc25hbihhcmcyTmF0aXZlVmFsdWUp
KQpAQCAtNjM3LDg2ICs2MzcsODYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuY1dpdGhDbGFtcChFeGVjU3QKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25JbW11dGFibGVQb2lu
dEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkltbXV0YWJsZVBvaW50RnVuY3Rpb24oRXhl
Y1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1
ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwogICAgIEpT
VGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RUeXBlZGVmcyo+
KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0
dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RUeXBlZGVmcyIsICJpbW11dGFibGVQ
b2ludEZ1bmN0aW9uIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRl
LCAiVGVzdFR5cGVkZWZzIiwgImltbXV0YWJsZVBvaW50RnVuY3Rpb24iKTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdFR5cGVkZWZzOjppbmZvKCkpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQg
PSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihTVkdQ
cm9wZXJ0eVRlYXJPZmY8U1ZHUG9pbnQ+OjpjcmVhdGUoaW1wbC5pbW11dGFibGVQb2ludEZ1bmN0
aW9uKCkpKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoU1ZHUHJvcGVydHlUZWFyT2ZmPFNWR1BvaW50Pjo6
Y3JlYXRlKGltcGwuaW1tdXRhYmxlUG9pbnRGdW5jdGlvbigpKSkpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5nQXJyYXlGdW5jdGlvbihFeGVjU3Rh
dGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJv
dG90eXBlRnVuY3Rpb25TdHJpbmdBcnJheUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0g
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RUeXBlZGVmcyogY2FzdGVk
VGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPih0aGlzVmFsdWUpOwogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJy
b3IoKmV4ZWMsICJUZXN0VHlwZWRlZnMiLCAic3RyaW5nQXJyYXlGdW5jdGlvbiIpOworICAgICAg
ICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RUeXBlZGVmcyIsICJzdHJp
bmdBcnJheUZ1bmN0aW9uIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRU
aGlzLCBKU1Rlc3RUeXBlZGVmczo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+aW1wbCgpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
LSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihleGVjKSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBW
ZWN0b3I8U3RyaW5nPiB2YWx1ZXMgPSB0b05hdGl2ZUFycmF5PFN0cmluZz4oZXhlYywgZXhlYy0+
YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgVmVjdG9yPFN0cmluZz4gdmFsdWVzID0gdG9OYXRpdmVBcnJheTxTdHJpbmc+KHN0YXRlLCBz
dGF0ZS0+YXJndW1lbnQoMCkpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNBcnJheShleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSwgaW1wbC5zdHJpbmdBcnJheUZ1bmN0aW9uKHZhbHVlcywgZWMpKTsKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzQXJyYXkoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnN0
cmluZ0FycmF5RnVuY3Rpb24odmFsdWVzLCBlYykpOwogCi0gICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmluZ0FycmF5RnVuY3Rpb24yKEV4ZWNT
dGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQ
cm90b3R5cGVGdW5jdGlvblN0cmluZ0FycmF5RnVuY3Rpb24yKEV4ZWNTdGF0ZSogc3RhdGUpCiB7
Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKICAgICBKU1Rlc3RUeXBlZGVmcyogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPih0aGlzVmFsdWUpOwogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBl
RXJyb3IoKmV4ZWMsICJUZXN0VHlwZWRlZnMiLCAic3RyaW5nQXJyYXlGdW5jdGlvbjIiKTsKKyAg
ICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0VHlwZWRlZnMiLCAi
c3RyaW5nQXJyYXlGdW5jdGlvbjIiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNh
c3RlZFRoaXMsIEpTVGVzdFR5cGVkZWZzOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT5pbXBsKCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291
bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgIFZlY3RvcjxTdHJpbmc+IHZhbHVlcyA9IHRvTmF0aXZlQXJyYXk8U3RyaW5nPihleGVjLCBl
eGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBWZWN0b3I8U3RyaW5nPiB2YWx1ZXMgPSB0b05hdGl2ZUFycmF5PFN0cmluZz4oc3Rh
dGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc0FycmF5KGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpLCBpbXBsLnN0cmluZ0FycmF5RnVuY3Rpb24yKHZhbHVlcywgZWMpKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzQXJyYXkoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBp
bXBsLnN0cmluZ0FycmF5RnVuY3Rpb24yKHZhbHVlcywgZWMpKTsKIAotICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25DYWxsV2l0aFNlcXVlbmNlVGhh
dFJlcXVpcmVzSW5jbHVkZShFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25DYWxsV2l0aFNlcXVlbmNlVGhh
dFJlcXVpcmVzSW5jbHVkZShFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+
dGhpc1ZhbHVlKCk7CiAgICAgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdFR5cGVkZWZzKj4odGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpleGVjLCAiVGVzdFR5
cGVkZWZzIiwgImNhbGxXaXRoU2VxdWVuY2VUaGF0UmVxdWlyZXNJbmNsdWRlIik7CisgICAgICAg
IHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdFR5cGVkZWZzIiwgImNhbGxX
aXRoU2VxdWVuY2VUaGF0UmVxdWlyZXNJbmNsdWRlIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RUeXBlZGVmczo6aW5mbygpKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgVmVjdG9yPFJlZlB0cjxUZXN0RXZl
bnRUYXJnZXQ+PiBzZXF1ZW5jZUFyZyA9ICh0b1JlZlB0ck5hdGl2ZUFycmF5PFRlc3RFdmVudFRh
cmdldCwgSlNUZXN0RXZlbnRUYXJnZXQ+KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCAmSlNUZXN0
RXZlbnRUYXJnZXQ6OnRvV3JhcHBlZCkpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
KyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3Ioc3RhdGUpKTsKKyAgICBWZWN0b3I8UmVmUHRyPFRlc3RFdmVudFRhcmdldD4+IHNl
cXVlbmNlQXJnID0gKHRvUmVmUHRyTmF0aXZlQXJyYXk8VGVzdEV2ZW50VGFyZ2V0LCBKU1Rlc3RF
dmVudFRhcmdldD4oc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgJkpTVGVzdEV2ZW50VGFyZ2V0
Ojp0b1dyYXBwZWQpKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzQm9vbGVhbihpbXBsLmNhbGxXaXRoU2VxdWVuY2VUaGF0UmVxdWlyZXNJ
bmNsdWRlKHNlcXVlbmNlQXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRo
aXNWYWx1ZSgpOwogICAgIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RUeXBlZGVmcyo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqZXhlYywgIlRlc3RUeXBl
ZGVmcyIsICJtZXRob2RXaXRoRXhjZXB0aW9uIik7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNU
eXBlRXJyb3IoKnN0YXRlLCAiVGVzdFR5cGVkZWZzIiwgIm1ldGhvZFdpdGhFeGNlcHRpb24iKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdFR5cGVkZWZz
OjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBsKCk7CiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaW1wbC5tZXRob2RXaXRoRXhjZXB0aW9uKGVjKTsKLSAg
ICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwg
ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RU
eXBlZGVmcy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFR5cGVkZWZzLmgKaW5kZXggN2MzYjVjNDYwZTdlYWNhMWE4Zjc0NGJhYWQzNTIwODA3OWMzZDdk
NS4uZGQxNDlhNzUwOTI1ZTVmMTMzOTg1MzA4OTc4NDMwNDA0Mjc1ZThiNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVk
ZWZzLmgKQEAgLTgzLDcgKzgzLDcgQEAgaW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFw
cGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiwgVGVzdFR5cGVkZWZzKikKIH0KIAogSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RUeXBlZGVm
cyopOwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0VHlwZWRlZnMmIGltcGwpIHsgcmV0dXJu
IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCAmaW1wbCk7IH0KK2lubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFRlc3RUeXBlZGVmcyYgaW1wbCkgeyByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0
LCAmaW1wbCk7IH0KIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRl
KiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0VHlwZWRlZnMqKTsKIAogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNhdHRyaWJ1dGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmNwcApp
bmRleCBkZmM4M2VmNTc4ZDJkM2VjNjUwODlkMjg1YWFhYWNlM2FkY2I3NzlhLi40YzY3NGY5NDk1
ZmQ5NGVlMmRhN2YzMjhmODk2NDI1YjMxOWZlMDljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNhdHRyaWJ1dGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5jcHAKQEAgLTE0Mywy
OSArMTQzLDI5IEBAIEpTYXR0cmlidXRlOjp+SlNhdHRyaWJ1dGUoKQogICAgIHJlbGVhc2VJbXBs
KCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzYXR0cmlidXRlUmVhZG9ubHkoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNhdHRyaWJ1dGVSZWFkb25seShFeGVjU3RhdGUqIHN0
YXRlLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNW
YWx1ZSk7CiAgICAgSlNhdHRyaWJ1dGUqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTYXR0
cmlidXRlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNhdHRyaWJ1dGVQcm90
b3R5cGUqPihzbG90QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gcmVwb3J0RGVwcmVjYXRlZEdl
dHRlckVycm9yKCpleGVjLCAiYXR0cmlidXRlIiwgInJlYWRvbmx5Iik7Ci0gICAgICAgIHJldHVy
biB0aHJvd0dldHRlclR5cGVFcnJvcigqZXhlYywgImF0dHJpYnV0ZSIsICJyZWFkb25seSIpOwor
ICAgICAgICAgICAgcmV0dXJuIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcigqc3RhdGUsICJh
dHRyaWJ1dGUiLCAicmVhZG9ubHkiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgImF0dHJpYnV0ZSIsICJyZWFkb25seSIpOwogICAgIH0KICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+aW1wbCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdX
aXRoQ2FjaGUoZXhlYywgaW1wbC5yZWFkb25seSgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
U3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnJlYWRvbmx5KCkpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAogCi1FbmNvZGVkSlNWYWx1ZSBqc2F0dHJpYnV0ZUNv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzYXR0cmlidXRlQ29uc3RydWN0
b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmplY3QqIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKICAgICBKU2F0dHJpYnV0ZVByb3RvdHlwZSogZG9tT2JqZWN0ID0g
anNEeW5hbWljQ2FzdDxKU2F0dHJpYnV0ZVByb3RvdHlwZSo+KGJhc2VWYWx1ZSk7CiAgICAgaWYg
KCFkb21PYmplY3QpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNhdHRyaWJ1dGU6OmdldENvbnN0cnVjdG9yKGV4ZWMt
PnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3Ioc3RhdGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNhdHRyaWJ1
dGU6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgp
KSk7CiB9CiAKIEpTVmFsdWUgSlNhdHRyaWJ1dGU6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5oIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmgKaW5kZXggNjE1ZTkwYTJmMTZjMDY0
NWVkM2Q3ZWRiNzgzNmE4ZjQ1M2JmOWQ3YS4uMzBkMmZjYjQ0NTBhYjEyNTllYjA5N2E3OWVjZTJj
ZTllMjg1Y2JiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTYXR0cmlidXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTYXR0cmlidXRlLmgKQEAgLTgxLDcgKzgxLDcgQEAgaW5saW5lIEpTQzo6V2Vh
a0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiwgYXR0cmlidXRlKikK
IH0KIAogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVj
dCosIGF0dHJpYnV0ZSopOwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBhdHRyaWJ1dGUmIGltcGwp
IHsgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCAmaW1wbCk7IH0KK2lubGluZSBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGF0dHJpYnV0ZSYgaW1wbCkgeyByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCAmaW1wbCk7IH0KIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhl
Y1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBhdHRyaWJ1dGUqKTsKIAogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNyZWFkb25seS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNyZWFkb25seS5jcHAK
aW5kZXggZjE4N2JiODA2YmI0YmExOWMzMDQ4NTAxMTQ2NWY1ZmExZGJiMWMzMi4uNmIzNDYwYzQ5
NDJmZDlhMDQwY2QzMjQ1YTBiODA2NzlmMjQzNjA3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTcmVhZG9ubHkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU3JlYWRvbmx5LmNwcApAQCAtMTM5LDEy
ICsxMzksMTIgQEAgSlNyZWFkb25seTo6fkpTcmVhZG9ubHkoKQogICAgIHJlbGVhc2VJbXBsKCk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzcmVhZG9ubHlDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiBiYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitF
bmNvZGVkSlNWYWx1ZSBqc3JlYWRvbmx5Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNP
YmplY3QqIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBK
U3JlYWRvbmx5UHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTcmVhZG9ubHlQ
cm90b3R5cGUqPihiYXNlVmFsdWUpOwogICAgIGlmICghZG9tT2JqZWN0KQotICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
cmVhZG9ubHk6OmdldENvbnN0cnVjdG9yKGV4ZWMtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNyZWFkb25seTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZt
KCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAogSlNWYWx1ZSBKU3JlYWRvbmx5
OjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNyZWFk
b25seS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTcmVhZG9u
bHkuaAppbmRleCBlYzIzYTJlOTM0ZDA5ZWY1ZmExZDQ5MTEwMDI4ZDJhZWExYTQyYWQ0Li5jZTNj
ZGYwN2ZiYzA1NDU5ZTE1NTAyOTYwNDIzZmU0MjdmYzZmMTU4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNyZWFkb25seS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU3JlYWRvbmx5LmgKQEAgLTgwLDcg
KzgwLDcgQEAgaW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3Jh
cHBlcldvcmxkJiwgcmVhZG9ubHkqKQogfQogCiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgcmVhZG9ubHkqKTsKLWlubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgcmVhZG9ubHkmIGltcGwpIHsgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCAm
aW1wbCk7IH0KK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHJlYWRvbmx5JiBpbXBsKSB7IHJldHVy
biB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICZpbXBsKTsgfQogSlNDOjpKU1ZhbHVlIHRvSlNO
ZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIHJlYWRvbmx5
Kik7CiAKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>