<?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>209552</bug_id>
          
          <creation_ts>2020-03-25 11:00:05 -0700</creation_ts>
          <short_desc>Use JSC::EnsureStillAliveScope RAII object in the generated bindings code</short_desc>
          <delta_ts>2020-03-25 16:42:16 -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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>209445</dependson>
    
    <dependson>209504</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>jsbell</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>philipj</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1633951</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-03-25 11:00:05 -0700</bug_when>
    <thetext>Use JSC::EnsureStillAlive RAII object in the generated bindings code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1634063</commentid>
    <comment_count>1</comment_count>
      <attachid>394547</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-03-25 14:59:12 -0700</bug_when>
    <thetext>Created attachment 394547
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1634108</commentid>
    <comment_count>2</comment_count>
      <attachid>394547</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-03-25 16:21:14 -0700</bug_when>
    <thetext>Comment on attachment 394547
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1634120</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-03-25 16:41:57 -0700</bug_when>
    <thetext>Committed r259021: &lt;https://trac.webkit.org/changeset/259021&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 394547.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1634121</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-03-25 16:42:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/60895455&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>394547</attachid>
            <date>2020-03-25 14:59:12 -0700</date>
            <delta_ts>2020-03-25 16:41:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209552-20200325145909.patch</filename>
            <type>text/plain</type>
            <size>277384</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5MDA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
NWNkNzBmMTUzNjEzMGNjMTA1NmJiNTg0NGE1YzBmYTExNjYzYTdjLi4yOWFiMzI1YTc3Y2JhYTQz
ZThjNDY2MjExZGFiNjJhMzI3MjAwZWM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNSBAQAorMjAyMC0wMy0yNSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIFVzZSBKU0M6OkVuc3VyZVN0aWxsQWxpdmVTY29wZSBSQUlJIG9iamVjdCBpbiB0
aGUgZ2VuZXJhdGVkIGJpbmRpbmdzIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwOTU1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZCBtZXRob2QgdG8gRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIHRv
IHJldHJpZXZlIGl0cyBpbnRlcm5hbCBKU1ZhbHVlLgorCisgICAgICAgICogcnVudGltZS9KU0NK
U1ZhbHVlLmg6CisgICAgICAgIChKU0M6OkVuc3VyZVN0aWxsQWxpdmVTY29wZTo6dmFsdWUgY29u
c3QpOgorCiAyMDIwLTAzLTI1ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAg
ICAgICAgRXZlbnQgbGlzdGVuZXJzIHJlZ2lzdGVyZWQgd2l0aCAnb25jZScgb3B0aW9uIG1heSBn
ZXQgZ2FyYmFnZSBjb2xsZWN0ZWQgdG9vIHNvb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3MWNkODkxYzVjNWMx
YzA1NTQ4OTVhZWJmMzNiMjUxOWQ4OTExMGU5Li5kMmZkNTJlNDdjZDgyMjFlOGU1NmJjMzAyYzUx
YjgzMDRlYTRhMjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYwIEBACisyMDIwLTAzLTI1ICBD
aHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIEpTQzo6RW5zdXJl
U3RpbGxBbGl2ZVNjb3BlIFJBSUkgb2JqZWN0IGluIHRoZSBnZW5lcmF0ZWQgYmluZGluZ3MgY29k
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5NTUy
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIEpT
Qzo6RW5zdXJlU3RpbGxBbGl2ZVNjb3BlIFJBSUkgb2JqZWN0IGluIHRoZSBnZW5lcmF0ZWQgYmlu
ZGluZ3MgY29kZQorICAgICAgICBpbnN0ZWFkIG9mIGV4cGxpY2l0IGVuc3VyZVN0aWxsQWxpdmUo
KSBjYWxscy4gVGhpcyBtYWtlcyB0aGUgYmluZGluZ3MKKyAgICAgICAgZ2VuZXJhdG9yIGNvZGUg
c2ltcGxlciBhbmQgcmVzdWx0cyBpbiBuaWNlciBnZW5lcmF0ZWQgY29kZSB0b28uCisKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVy
YXRlUGFyYW1ldGVyc0NoZWNrKToKKyAgICAgICAgKEdlbmVyYXRlV3JpdGVCYXJyaWVyc0ZvckFy
Z3VtZW50cyk6CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uRnVuY3Rpb25DYWxsKToK
KyAgICAgICAgKEdlbmVyYXRlRW5zdXJlU3RpbGxBbGl2ZUNhbGxzRm9yQXJndW1lbnRzKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNNYXBMaWtlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmpzTWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uR2V0Qm9keSk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc01hcExpa2VQcm90b3R5cGVGdW5jdGlvbkhhc0JvZHkpOgorICAg
ICAgICAoV2ViQ29yZTo6anNNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25Gb3JFYWNoQm9keSk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc01hcExpa2VQcm90b3R5cGVGdW5jdGlvblNldEJvZHkpOgorICAg
ICAgICAoV2ViQ29yZTo6anNNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25EZWxldGVCb2R5KToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNSZWFkT25seU1hcExpa2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6anNSZWFkT25seU1hcExpa2VQcm90b3R5cGVGdW5jdGlvbkdldEJv
ZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNSZWFkT25seU1hcExpa2VQcm90b3R5cGVGdW5jdGlv
bkhhc0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNSZWFkT25seU1hcExpa2VQcm90b3R5cGVG
dW5jdGlvbkZvckVhY2hCb2R5KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNSZWFkT25seVNldExpa2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNSZWFkT25seVNldExp
a2VQcm90b3R5cGVGdW5jdGlvbkhhc0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNSZWFkT25s
eVNldExpa2VQcm90b3R5cGVGdW5jdGlvbkZvckVhY2hCb2R5KToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNTZXRMaWtlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmpzU2V0
TGlrZVByb3RvdHlwZUZ1bmN0aW9uSGFzQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1NldExp
a2VQcm90b3R5cGVGdW5jdGlvbkZvckVhY2hCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzU2V0
TGlrZVByb3RvdHlwZUZ1bmN0aW9uQWRkQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1NldExp
a2VQcm90b3R5cGVGdW5jdGlvbkRlbGV0ZUJvZHkpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25FeGNpdGluZ0Z1bmN0aW9uQm9k
eSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5j
dGlvblBvc3RNZXNzYWdlQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RBY3RpdmVET01P
YmplY3RQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxQm9keSk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2QyQm9keSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENh
bGxUcmFjZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0Q2FsbFRyYWNlclByb3RvdHlw
ZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbldpdGhBcmd1bWVudHNCb2R5KToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdENhbGxUcmFjZXJQcm90b3R5cGVGdW5jdGlvblRlc3RPcGVyYXRpb25XaXRoTnVs
bGFibGVBcmd1bWVudEJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0Q2FsbFRyYWNlclBy
b3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbldpdGhWYXJpYW50QXJndW1lbnRCb2R5KToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdENhbGxUcmFjZXJQcm90b3R5cGVGdW5jdGlvblRlc3RPcGVy
YXRpb25XaXRoTnVsbGFibGVWYXJpYW50QXJndW1lbnRCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdENhbGxUcmFjZXJQcm90b3R5cGVGdW5jdGlvblRlc3RPcGVyYXRpb25XaXRoT3B0aW9u
YWxWYXJpYW50QXJndW1lbnRCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdENhbGxUcmFj
ZXJQcm90b3R5cGVGdW5jdGlvblRlc3RPcGVyYXRpb25XaXRoRGVmYXVsdFZhcmlhbnRBcmd1bWVu
dEJvZHkpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RET01KSVQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRB
dHRyaWJ1dGVCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVFByb3RvdHlwZUZ1
bmN0aW9uSXRlbUJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUUHJvdG90eXBl
RnVuY3Rpb25HZXRFbGVtZW50QnlJZEJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9N
SklUUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50c0J5TmFtZUJvZHkpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkQnlTZXR0aW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdEVuYWJsZWRCeVNldHRpbmdQcm90b3R5cGVGdW5jdGlvbkVuYWJs
ZWRCeVNldHRpbmdPcGVyYXRpb25Cb2R5KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmNvbnN0cnVjdCk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25JdGVtQm9keSk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uUmVndWxh
ck9wZXJhdGlvbkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0SW5z
dGFuY2VGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24xQm9keSk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGlt
ZU9wZXJhdGlvbjJCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdENv
bnN0cnVjdG9yRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uU3RhdGljQm9keSk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxl
ZEluU3BlY2lmaWNXb3JsZEJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2Jq
ZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRJblNwZWNpZmljV29ybGRXaGVuUnVudGltZUZlYXR1
cmVFbmFibGVkQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RJbnN0
YW5jZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50aW1lRmVhdHVyZXNFbmFi
bGVkQm9keSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGVGdW5jdGlvbkluZGV4ZWRTZXR0ZXJCb2R5
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yOjpjb25zdHJ1
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25J
bXBsZW1lbnRzTWV0aG9kMkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SW50ZXJmYWNl
UHJvdG90eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2QyQm9keSk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kQm9keSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBl
RnVuY3Rpb25OYW1lZFNldHRlckJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGVGdW5jdGlvbkluZGV4ZWRTZXR0
ZXJCb2R5KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRD
b25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9y
TmFtZWRDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGVGdW5jdGlv
bk5hbWVkRGVsZXRlckJvZHkpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGVGdW5jdGlvbkdldHRlck5hbWVC
b2R5KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROYW1lZFNldHRl
cldpdGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3Rpb25OYW1lZFNldHRlckJvZHkpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVk
R2V0dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXJQcm90b3R5cGVGdW5jdGlvbk5hbWVkU2V0dGVyQm9keSk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyUHJvdG90eXBlRnVuY3Rpb25J
bmRleGVkU2V0dGVyQm9keSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlclByb3Rv
dHlwZUZ1bmN0aW9uTmFtZWRTZXR0ZXJCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5h
bWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJQcm90b3R5cGVGdW5jdGlvbkluZGV4
ZWRTZXR0ZXIxQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROYW1lZFNldHRlcldpdGhJ
bmRleGVkR2V0dGVyQW5kU2V0dGVyUHJvdG90eXBlRnVuY3Rpb25JbmRleGVkU2V0dGVyMkJvZHkp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqQ29uc3RydWN0b3I6OmNvbnN0cnVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpjYWxsSlNUZXN0T2JqMSk6CisgICAgICAgIChXZWJDb3JlOjpjYWxsSlNUZXN0
T2JqMik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVuYWJs
ZWRBdFJ1bnRpbWVPcGVyYXRpb24xQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24yQm9keSk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9w
ZXJhdGlvblN0YXRpY0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25FbmFibGVkSW5TcGVjaWZpY1dvcmxkV2hlblJ1bnRpbWVGZWF0dXJlRW5hYmxlZEJv
ZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Xb3JsZFNw
ZWNpZmljTWV0aG9kQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblZvaWRNZXRob2RXaXRoQXJnc0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25CeXRlTWV0aG9kV2l0aEFyZ3NCb2R5KToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2N0ZXRNZXRob2RXaXRoQXJnc0JvZHkp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Mb25nTWV0aG9k
V2l0aEFyZ3NCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT2JqTWV0aG9kV2l0aEFyZ3NCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEFyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdCb2R5
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aFhQYXRoTlNSZXNvbHZlclBhcmFtZXRlckJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25OdWxsYWJsZVN0cmluZ1NwZWNpYWxNZXRob2RCb2R5KToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEVudW1B
cmdCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aFN0YW5kYWxvbmVFbnVtQXJnQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmdCb2R5KToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFs
RW51bUFyZ0FuZERlZmF1bHRWYWx1ZUJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzQm9keSk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhV
U1ZTdHJpbmdBcmdCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aE51bGxhYmxlVVNWU3RyaW5nQXJnQm9keSk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJpbmdBcmdUcmVh
dGluZ051bGxBc0VtcHR5U3RyaW5nQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhCeXRlU3RyaW5nQXJnQm9keSk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOdWxsYWJsZUJ5dGVT
dHJpbmdBcmdCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aEJ5dGVTdHJpbmdBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nQm9keSk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRW
YWx1ZUJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoUmVjb3JkQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblByaXZhdGVNZXRob2RCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uUHVibGljQW5kUHJpdmF0ZU1ldGhvZEJvZHkpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BZGRFdmVudExpc3RlbmVyQm9keSk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblJlbW92ZUV2ZW50
TGlzdGVuZXJCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXJnQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFyZ0FuZERlZmF1bHRWYWx1ZUJv
ZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZ0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29P
cHRpb25hbEFyZ3NCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVTVlN0cmluZ0JvZHkp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxBdG9tU3RyaW5nQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0FuZERlZmF1bHRWYWx1ZUJvZHkp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxBdG9tU3RyaW5nQW5kRGVmYXVsdFZhbHVlQm9keSk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzTnVs
bEJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxTdHJpbmdJc1VuZGVmaW5lZEJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9tU3RyaW5nSXNO
dWxsQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzRW1wdHlTdHJpbmdCb2R5KToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVVNWU3RyaW5n
SXNFbXB0eVN0cmluZ0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9tU3RyaW5nSXNFbXB0eVN0cmluZ0JvZHkpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0
aW9uYWxEb3VibGVJc05hTkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxGbG9hdElzTmFOQm9keSk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbExvbmdM
b25nQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhPcHRpb25hbExvbmdMb25nSXNaZXJvQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xv
bmdCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZ0lzWmVyb0JvZHkpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5j
ZUJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxTZXF1ZW5jZUlzRW1wdHlCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQm9vbGVhbkJvZHkpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0
aW9uYWxCb29sZWFuSXNGYWxzZUJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBbnlCb2R5KToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsT2JqZWN0Qm9k
eSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbE51bGxhYmxlV3JhcHBlckJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBwZXJJc051
bGxCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsWFBhdGhOU1Jlc29sdmVyQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFJlY29yZEJvZHkpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0
aW9uYWxQcm9taXNlQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FyZ0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFj
a0FyZ0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZ0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFyZ0Jv
ZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJnQm9keSk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0
aW9uQW5kT3B0aW9uYWxBcmdCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbnN0
cnVjdG9yRnVuY3Rpb25TdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZ0JvZHkp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvblN0YXRpY01l
dGhvZFdpdGhDYWxsYmFja0FyZ0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMUJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMkJvZHkpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kM0Jv
ZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9h
ZGVkTWV0aG9kNEJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZGVkTWV0aG9kNUJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNkJvZHkpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kN0JvZHkpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9k
OEJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVy
bG9hZGVkTWV0aG9kOUJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTBCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDExQm9keSk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMkJvZHkp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyMUJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1l
dGVyMkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25P
dmVybG9hZGVkTWV0aG9kV2l0aERpc3Rpbmd1aXNoaW5nVW5pb24xQm9keSk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoRGlz
dGluZ3Vpc2hpbmdVbmlvbjJCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGgyRGlzdGluZ3Vpc2hpbmdVbmlvbnMxQm9k
eSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2Fk
ZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zMkJvZHkpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rp
bmd1aXNoaW5nVW5pb24xQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdVbmlvbjJCb2R5
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRX
aXRoTnVsbGFibGVVbmlvbjFCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVVbmlvbjJCb2R5KToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlv
bjFCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zl
cmxvYWRXaXRoT3B0aW9uYWxVbmlvbjJCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5ndWlzaGluZ1Bh
cmFtZXRlcjFCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5ndWlzaGluZ1BhcmFtZXRlcjJCb2R5KToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25DbGFzc01ldGhv
ZFdpdGhPcHRpb25hbEJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQ29uc3RydWN0
b3JGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMUJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMkJvZHkpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhDbGFt
cEJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFz
c01ldGhvZFdpdGhDbGFtcE9uT3B0aW9uYWxCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoRW5mb3JjZVJhbmdlQm9keSk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0
aEVuZm9yY2VSYW5nZU9uT3B0aW9uYWxCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFVuc2lnbmVkTG9uZ1NlcXVlbmNlQm9keSk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblN0cmluZ0FycmF5RnVu
Y3Rpb25Cb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
RG9tU3RyaW5nTGlzdEZ1bmN0aW9uQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk9wZXJhdGlvbldpdGhPcHRpb25hbFVuaW9uUGFyYW1ldGVyQm9keSk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhB
bmRXaXRob3V0TnVsbGFibGVTZXF1ZW5jZUJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50QnlJZEJvZHkpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0MUJvZHkpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0MkJvZHkpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0M0JvZHkpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0NEJvZHkpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY1N0cmluZ01l
dGhvZEJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25W
YXJpYWRpY0RvdWJsZU1ldGhvZEJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25WYXJpYWRpY05vZGVNZXRob2RCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNVbmlvbk1ldGhvZEJvZHkpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BbnlCb2R5KToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlv
bldpdGhGbG9hdEFyZ3VtZW50Qm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoT3B0aW9uYWxJbnRBcmd1bWVudEJv
ZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJv
bWlzZU92ZXJsb2FkZWRGdW5jdGlvbjFCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24yQm9keSk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsT3Zl
cmxvYWQxQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkNvbmRpdGlvbmFsT3ZlcmxvYWQyQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblNpbmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQxQm9keSk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNpbmdsZUNvbmRpdGlvbmFsT3Zl
cmxvYWQyQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkF0dGFjaFNoYWRvd1Jvb3RCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3BlcmF0aW9uV2l0aEV4dGVybmFsRGljdGlvbmFyeVBhcmFtZXRlckJvZHkp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25CdWZmZXJTb3Vy
Y2VQYXJhbWV0ZXJCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTGVnYWN5Q2FsbGVyTmFtZWRCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uVGVzdFJldHVyblZhbHVlT3B0aW1pemF0aW9uQm9keSk6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RSZXR1cm5WYWx1ZU9w
dGltaXphdGlvbldpdGhFeGNlcHRpb25Cb2R5KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMSk6CisgICAgICAgIChX
ZWJDb3JlOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMik6CisgICAgICAg
IChXZWJDb3JlOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMyk6CisgICAg
ICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzNCk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnNXaXRoU2VxdWVuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0SlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTEpOgorICAgICAgICAoV2ViQ29yZTo6
Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTIpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGVGdW5j
dGlvbk5hbWVkSXRlbUJvZHkpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
UHJvbWlzZVJlamVjdGlvbkV2ZW50Q29uc3RydWN0b3I6OmNvbnN0cnVjdCk6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkZ1bmN0aW9uQm9keSk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3I6OmNvbnN0cnVjdCk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuY0JvZHkpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblNldFNoYWRvd0JvZHkpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhT
ZXF1ZW5jZUFyZ0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5
cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuY2VBcmdCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TZXF1ZW5jZU9mTnVsbGFibGVzQXJnQm9keSk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFi
bGVTZXF1ZW5jZU9mTnVsbGFibGVzQXJnQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RU
eXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5jZU9mVW5pb25zQXJnQm9keSk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uVW5pb25B
cmdCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rp
b25GdW5jV2l0aENsYW1wQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1By
b3RvdHlwZUZ1bmN0aW9uRnVuY1dpdGhDbGFtcEluVHlwZWRlZkJvZHkpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmluZ1NlcXVlbmNlRnVuY3Rp
b25Cb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rp
b25TdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uMkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkNhbGxXaXRoU2VxdWVuY2VUaGF0UmVxdWlyZXNJbmNs
dWRlQm9keSk6CisKIDIwMjAtMDMtMjUgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
IAogICAgICAgICBFdmVudCBsaXN0ZW5lcnMgcmVnaXN0ZXJlZCB3aXRoICdvbmNlJyBvcHRpb24g
bWF5IGdldCBnYXJiYWdlIGNvbGxlY3RlZCB0b28gc29vbgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDSlNWYWx1ZS5oCmluZGV4IGMxZWU4NDE4NmQ5NDE5NTMyYWRiMGU3MTM4NDQ1
YjlkZjZiNWYwZjQuLmRlYjY0MDI1MzBlYjU4YmY1MGQwZDY3MGVkMTZiYzU0OGI3ZjkyNjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgKQEAgLTY2OSw2ICs2
NjksOCBAQCBwdWJsaWM6CiAgICAgICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKG1fdmFsdWUpOwog
ICAgIH0KIAorICAgIEpTVmFsdWUgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisK
IHByaXZhdGU6CiAgICAgSlNWYWx1ZSBtX3ZhbHVlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggZGM0MWU2OGMzNDNi
Y2RjZGVjOGY1NjM3ZTNjMDNhNzllNzVlNWRiMC4uODkyMDNmZGQ5NWNmNzAyYzc2YjAwNTkxZmI3
Yjc3NTQ2NmY0NzE2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0KQEAgLTU5NDIsMTIgKzU5NDIsMTIgQEAgc3ViIEdlbmVyYXRl
UGFyYW1ldGVyc0NoZWNrCiAgICAgICAgICAgICAgICAgYXNzZXJ0KCJbUmV0dXJuVmFsdWVdIGlz
IG5vdCBzdXBwb3J0ZWQgZm9yIG9wdGlvbmFsIGFyZ3VtZW50cyIpIGlmICRhcmd1bWVudC0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57UmV0dXJuVmFsdWV9OwogCiAgICAgICAgICAgICAgICAgaWYgKGRl
ZmluZWQoJGFyZ3VtZW50LT5kZWZhdWx0KSkgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICRpbmRlbnQgLiAiYXV0byBhcmd1bWVudCR7YXJndW1lbnRJbmRleH0gPSBj
YWxsRnJhbWUtPmFyZ3VtZW50KCRhcmd1bWVudEluZGV4KTtcbiIpOworICAgICAgICAgICAgICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAiRW5zdXJlU3RpbGxBbGl2ZVNjb3Bl
IGFyZ3VtZW50JHthcmd1bWVudEluZGV4fSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoJGFyZ3VtZW50
SW5kZXgpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIGlmICghV2lsbENvbnZlcnRVbmRlZmlu
ZWRUb0RlZmF1bHRQYXJhbWV0ZXJWYWx1ZSgkdHlwZSwgJGFyZ3VtZW50LT5kZWZhdWx0KSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGRlZmF1bHRWYWx1ZSA9IEdlbmVyYXRlRGVmYXVs
dFZhbHVlKCRpbnRlcmZhY2UsICRhcmd1bWVudCwgJGFyZ3VtZW50LT50eXBlLCAkYXJndW1lbnQt
PmRlZmF1bHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgJG9wdGlvbmFsQ2hlY2sgPSAiYXJn
dW1lbnQke2FyZ3VtZW50SW5kZXh9LmlzVW5kZWZpbmVkKCkgPyAkZGVmYXVsdFZhbHVlIDogIjsK
KyAgICAgICAgICAgICAgICAgICAgICAgICRvcHRpb25hbENoZWNrID0gImFyZ3VtZW50JHthcmd1
bWVudEluZGV4fS52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyAkZGVmYXVsdFZhbHVlIDogIjsKICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAkYXJndW1lbnRMb29rdXBG
b3JDb252ZXJzaW9uID0gImFyZ3VtZW50JHthcmd1bWVudEluZGV4fSIKKyAgICAgICAgICAgICAg
ICAgICAgJGFyZ3VtZW50TG9va3VwRm9yQ29udmVyc2lvbiA9ICJhcmd1bWVudCR7YXJndW1lbnRJ
bmRleH0udmFsdWUoKSIKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICBteSAkYXJndW1lbnRJRExUeXBlID0gR2V0SURMVHlwZSgkaW50ZXJmYWNlLCAkYXJndW1l
bnQtPnR5cGUpOwogCkBAIC01OTU5LDEzICs1OTU5LDEzIEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRl
cnNDaGVjawogICAgICAgICAgICAgICAgICAgICAgICAgJG5hdGl2ZVZhbHVlQ2FzdEZ1bmN0aW9u
ID0gIk9wdGlvbmFsPENvbnZlcnRlcjwkYXJndW1lbnRJRExUeXBlPjo6UmV0dXJuVHlwZT4iOwog
ICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAkaW5kZW50IC4gImF1dG8gYXJndW1lbnQke2FyZ3VtZW50SW5kZXh9ID0gY2FsbEZy
YW1lLT5hcmd1bWVudCgkYXJndW1lbnRJbmRleCk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAg
JG9wdGlvbmFsQ2hlY2sgPSAiYXJndW1lbnQke2FyZ3VtZW50SW5kZXh9LmlzVW5kZWZpbmVkKCkg
PyAkZGVmYXVsdFZhbHVlIDogIjsKLSAgICAgICAgICAgICAgICAgICAgJGFyZ3VtZW50TG9va3Vw
Rm9yQ29udmVyc2lvbiA9ICJhcmd1bWVudCR7YXJndW1lbnRJbmRleH0iOworICAgICAgICAgICAg
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAiRW5zdXJlU3RpbGxBbGl2ZVNj
b3BlIGFyZ3VtZW50JHthcmd1bWVudEluZGV4fSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoJGFyZ3Vt
ZW50SW5kZXgpO1xuIik7CisgICAgICAgICAgICAgICAgICAgICRvcHRpb25hbENoZWNrID0gImFy
Z3VtZW50JHthcmd1bWVudEluZGV4fS52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyAkZGVmYXVsdFZh
bHVlIDogIjsKKyAgICAgICAgICAgICAgICAgICAgJGFyZ3VtZW50TG9va3VwRm9yQ29udmVyc2lv
biA9ICJhcmd1bWVudCR7YXJndW1lbnRJbmRleH0udmFsdWUoKSI7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICRpbmRlbnQgLiAiYXV0byBhcmd1bWVudCR7YXJndW1lbnRJbmRleH0gPSBjYWxsRnJhbWUt
PnVuY2hlY2tlZEFyZ3VtZW50KCRhcmd1bWVudEluZGV4KTtcbiIpOwotICAgICAgICAgICAgICAg
ICRhcmd1bWVudExvb2t1cEZvckNvbnZlcnNpb24gPSAiYXJndW1lbnQke2FyZ3VtZW50SW5kZXh9
IjsKKyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAiRW5zdXJl
U3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50JHthcmd1bWVudEluZGV4fSA9IGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoJGFyZ3VtZW50SW5kZXgpO1xuIik7CisgICAgICAgICAgICAgICAgJGFy
Z3VtZW50TG9va3VwRm9yQ29udmVyc2lvbiA9ICJhcmd1bWVudCR7YXJndW1lbnRJbmRleH0udmFs
dWUoKSI7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG15ICRnbG9iYWxPYmplY3RSZWZl
cmVuY2UgPSAkb3BlcmF0aW9uLT5pc1N0YXRpYyA/ICIqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4obGV4aWNhbEdsb2JhbE9iamVjdCkiIDogIipjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSI7
CkBAIC02NDE4LDI5ICs2NDE4LDIyIEBAIHN1YiBHZW5lcmF0ZUNhbGxiYWNrSW1wbGVtZW50YXRp
b25Db250ZW50CiAgICAgcHVzaChAJGNvbnRlbnRSZWYsICJ9XG5cbiIpOwogfQogCi1zdWIgR2Vu
ZXJhdGVFbnN1cmVTdGlsbEFsaXZlQ2FsbHNGb3JBcmd1bWVudHMKK3N1YiBHZW5lcmF0ZVdyaXRl
QmFycmllcnNGb3JBcmd1bWVudHMKIHsKICAgICBteSAoJG91dHB1dEFycmF5LCAkb3BlcmF0aW9u
LCAkaW5kZW50KSA9IEBfOwogCi0gICAgbXkgJGFkZGVkU3RhdGVtZW50cyA9IDA7CiAgICAgbXkg
JGhhc1ZNID0gMDsKICAgICBteSAkYXJndW1lbnRJbmRleCA9IDA7CiAgICAgZm9yZWFjaCBteSAk
YXJndW1lbnQgKEB7JG9wZXJhdGlvbi0+YXJndW1lbnRzfSkgewotICAgICAgICBpZiAoISRhcmd1
bWVudC0+aXNWYXJpYWRpYykgewotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiXG4k
e2luZGVudH0vLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQg
b2YgdGhpcyBtZXRob2QuXG4iKSBpZiAkYXJndW1lbnRJbmRleCA9PSAwOwotICAgICAgICAgICAg
aWYgKCRhcmd1bWVudC0+dHlwZS0+bmFtZSBlcSAiRXZlbnRMaXN0ZW5lciIpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoISRoYXNWTSkgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICRpbmRlbnQgLiAiVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0
KTtcbiIpOwotICAgICAgICAgICAgICAgICAgICAkaGFzVk0gPSAxOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAidm0uaGVh
cC53cml0ZUJhcnJpZXIoJnN0YXRpY19jYXN0PEpTT2JqZWN0Jj4oKmNhc3RlZFRoaXMpLCBhcmd1
bWVudCR7YXJndW1lbnRJbmRleH0pO1xuIik7CisgICAgICAgIGlmICgkYXJndW1lbnQtPnR5cGUt
Pm5hbWUgZXEgIkV2ZW50TGlzdGVuZXIiKSB7CisgICAgICAgICAgICBpZiAoISRoYXNWTSkgewor
ICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGluZGVudCAuICJWTSYgdm0gPSBK
U0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpO1xuIik7CisgICAgICAgICAgICAgICAgJGhh
c1ZNID0gMTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
JGluZGVudCAuICJlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudCR7YXJndW1lbnRJbmRleH0p
O1xuIik7Ci0gICAgICAgICAgICAkYWRkZWRTdGF0ZW1lbnRzID0gMTsKKyAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgJGluZGVudCAuICJ2bS5oZWFwLndyaXRlQmFycmllcigmc3RhdGlj
X2Nhc3Q8SlNPYmplY3QmPigqY2FzdGVkVGhpcyksIGFyZ3VtZW50JHthcmd1bWVudEluZGV4fS52
YWx1ZSgpKTtcbiIpOwogICAgICAgICB9CiAgICAgICAgICRhcmd1bWVudEluZGV4Kys7CiAgICAg
fQotICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIlxuIikgaWYgJGFkZGVkU3RhdGVtZW50czsKIH0K
IAogc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb25GdW5jdGlvbkNhbGwKQEAgLTY0NTYsMTYgKzY0
NDksMTYgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb25GdW5jdGlvbkNhbGwKICAgICBteSAk
cmV0dXJuQXJndW1lbnROYW1lID0gR2V0T3BlcmF0aW9uUmV0dXJuZWRBcmd1bWVudE5hbWUoJG9w
ZXJhdGlvbik7CiAgICAgaWYgKCRyZXR1cm5Bcmd1bWVudE5hbWUpIHsKICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAkaW5kZW50IC4gIiRmdW5jdGlvblN0cmluZztcbiIpOwotICAgICAgICBH
ZW5lcmF0ZUVuc3VyZVN0aWxsQWxpdmVDYWxsc0ZvckFyZ3VtZW50cygkb3V0cHV0QXJyYXksICRv
cGVyYXRpb24sICRpbmRlbnQpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQg
LiAicmV0dXJuIEpTVmFsdWU6OmVuY29kZSgkcmV0dXJuQXJndW1lbnROYW1lKTtcbiIpOworICAg
ICAgICBHZW5lcmF0ZVdyaXRlQmFycmllcnNGb3JBcmd1bWVudHMoJG91dHB1dEFycmF5LCAkb3Bl
cmF0aW9uLCAkaW5kZW50KTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4g
InJldHVybiBKU1ZhbHVlOjplbmNvZGUoJHJldHVybkFyZ3VtZW50TmFtZS52YWx1ZSgpKTtcbiIp
OwogICAgIH0gZWxzaWYgKCRvcGVyYXRpb24tPnR5cGUtPm5hbWUgZXEgInZvaWQiIHx8ICgkY29k
ZUdlbmVyYXRvci0+SXNQcm9taXNlVHlwZSgkb3BlcmF0aW9uLT50eXBlKSAmJiAhJG9wZXJhdGlv
bi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57UHJvbWlzZVByb3h5fSkpIHsKICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAkaW5kZW50IC4gIiRmdW5jdGlvblN0cmluZztcbiIpOwotICAgICAgICBH
ZW5lcmF0ZUVuc3VyZVN0aWxsQWxpdmVDYWxsc0ZvckFyZ3VtZW50cygkb3V0cHV0QXJyYXksICRv
cGVyYXRpb24sICRpbmRlbnQpOworICAgICAgICBHZW5lcmF0ZVdyaXRlQmFycmllcnNGb3JBcmd1
bWVudHMoJG91dHB1dEFycmF5LCAkb3BlcmF0aW9uLCAkaW5kZW50KTsKICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAkaW5kZW50IC4gInJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7XG4iKTsKICAgICB9IGVsc2UgewogICAgICAgICBteSAkZ2xvYmFsT2JqZWN0UmVmZXJl
bmNlID0gJG9wZXJhdGlvbi0+aXNTdGF0aWMgPyAiKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGxleGljYWxHbG9iYWxPYmplY3QpIiA6ICIqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkiOwog
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAiYXV0byByZXN1bHQgPSBKU1Zh
bHVlOjplbmNvZGUoIiAuIE5hdGl2ZVRvSlNWYWx1ZVVzaW5nUG9pbnRlcnMoJG9wZXJhdGlvbiwg
JGludGVyZmFjZSwgJGZ1bmN0aW9uU3RyaW5nLCAkZ2xvYmFsT2JqZWN0UmVmZXJlbmNlKSAuICIp
O1xuIik7Ci0gICAgICAgIEdlbmVyYXRlRW5zdXJlU3RpbGxBbGl2ZUNhbGxzRm9yQXJndW1lbnRz
KCRvdXRwdXRBcnJheSwgJG9wZXJhdGlvbiwgJGluZGVudCk7CisgICAgICAgIEdlbmVyYXRlV3Jp
dGVCYXJyaWVyc0ZvckFyZ3VtZW50cygkb3V0cHV0QXJyYXksICRvcGVyYXRpb24sICRpbmRlbnQp
OwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAicmV0dXJuIHJlc3VsdDtc
biIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU01hcExpa2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTTWFwTGlrZS5jcHAKaW5kZXggNGRkZjVjN2QyZWE0Y2I3NjkyYzBlYzQ1NTMz
MGZiZDZiYWZiNWZjYS4uY2M5NDQ3ZDdhMTIzN2IwZWI0MzczMWYwYTFhMmE1MGUyMzI2MWViYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTTWFw
TGlrZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
TWFwTGlrZS5jcHAKQEAgLTIzMSwxNCArMjMxLDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc01hcExpa2VQcm90b3R5cGVGdW5jdGlvbkdldEJvZHkoSlNDOjpKU0dsb2Jh
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFt
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0byBrZXkgPSBjb252ZXJ0PElETERPTVN0
cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CisgICAgRW5zdXJlU3RpbGxB
bGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Cisg
ICAgYXV0byBrZXkgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGFyZ3VtZW50MC52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGF1dG8gcmVzdWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKHRv
SlM8SURMQW55Pihmb3J3YXJkR2V0VG9NYXBMaWtlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2Fs
bEZyYW1lLCAqY2FzdGVkVGhpcywgV1RGTW92ZShrZXkpKSkpOwotCi0gICAgLy8gTWFrZSBzdXJl
IGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAg
IGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAgICByZXR1cm4gcmVzdWx0Owog
fQogCkBAIC0yNTQsMTQgKzI1MCwxMCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25IYXNCb2R5KEpTQzo6SlNHbG9iYQogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8ga2V5ID0gY29udmVydDxJRExET01TdHJpbmc+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29w
ZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8g
a2V5ID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVu
dDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKICAgICBhdXRvIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFu
eT4oZm9yd2FyZEhhc1RvTWFwTGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwg
KmNhc3RlZFRoaXMsIFdURk1vdmUoa2V5KSkpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVu
dHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVT
dGlsbEFsaXZlSGVyZShhcmd1bWVudDApOwotCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAt
MzE5LDE0ICszMTEsMTAgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzTWFw
TGlrZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaEJvZHkoSlNDOjpKU0cKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCkpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1
bWVudCgwKTsKLSAgICBhdXRvIGNhbGxiYWNrID0gY29udmVydDxJRExBbnk+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVu
dDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gY2FsbGJhY2sg
PSBjb252ZXJ0PElETEFueT4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgp
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwogICAgIGF1dG8gcmVzdWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQW55Pihmb3J3YXJk
Rm9yRWFjaFRvTWFwTGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3Rl
ZFRoaXMsIFdURk1vdmUoY2FsbGJhY2spKSkpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50
cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0
aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0z
NDIsMTggKzMzMCwxMyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNNYXBM
aWtlUHJvdG90eXBlRnVuY3Rpb25TZXRCb2R5KEpTQzo6SlNHbG9iYQogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50
KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0KSk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApOwotICAgIGF1dG8ga2V5ID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVu
dDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8ga2V5ID0gY29u
dmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUo
KSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKLSAgICBhdXRvIGFyZ3VtZW50MSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSk7
Ci0gICAgYXV0byB2YWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgYXJndW1lbnQxKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQxID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKKyAgICBhdXRvIHZhbHVlID0gY29udmVy
dDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDEudmFsdWUoKSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
ICAgICBhdXRvIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZFNl
dFRvTWFwTGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMs
IFdURk1vdmUoa2V5KSwgV1RGTW92ZSh2YWx1ZSkpKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJn
dW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5z
dXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShh
cmd1bWVudDEpOwotCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzgzLDE0ICszNjYsMTAg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzTWFwTGlrZVByb3RvdHlwZUZ1
bmN0aW9uRGVsZXRlQm9keShKU0M6OkpTR2wKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAg
IGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBh
dXRvIGtleSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJn
dW1lbnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIGtleSA9IGNvbnZlcnQ8SURMRE9NU3Ry
aW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgYXV0byBy
ZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmREZWxldGVUb01hcExp
a2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzLCBXVEZNb3Zl
KGtleSkpKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwg
dGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1l
bnQwKTsKLQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRPbmx5TWFwTGlrZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNSZWFkT25seU1hcExpa2UuY3Bw
CmluZGV4IGEwMTg1NzcxOTY3YWZlYjdhZGExNjVhOTBjMmYwODA5ZmVmMzg1OGIuLjVjNWRmYjZh
MTk4MjNmMjIxN2Y3OGEyNDAxYmVlOTkxODcwNzVkMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRPbmx5TWFwTGlrZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUmVhZE9ubHlNYXBMaWtl
LmNwcApAQCAtMjI1LDE0ICsyMjUsMTAgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzUmVhZE9ubHlNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25HZXRCb2R5KEpTQzoKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIGtleSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2Nv
cGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRv
IGtleSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1l
bnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAgICAgYXV0byByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExB
bnk+KGZvcndhcmRHZXRUb01hcExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUs
ICpjYXN0ZWRUaGlzLCBXVEZNb3ZlKGtleSkpKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1l
bnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJl
U3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAg
LTI0OCwxNCArMjQ0LDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Jl
YWRPbmx5TWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uSGFzQm9keShKU0M6CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9i
YWxPYmplY3QpKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCk7Ci0gICAgYXV0byBrZXkgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3Vt
ZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBrZXkgPSBj
b252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1
ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogICAgIGF1dG8gcmVzdWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQW55Pihmb3J3
YXJkSGFzVG9NYXBMaWtlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVk
VGhpcywgV1RGTW92ZShrZXkpKSkpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5
IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxp
dmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0zMTMsMTQg
KzMwNSwxMCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNSZWFkT25seU1h
cExpa2VQcm90b3R5cGVGdW5jdGlvbkZvckVhY2hCb2R5KAogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
KSk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
OwotICAgIGF1dG8gY2FsbGJhY2sgPSBjb252ZXJ0PElETEFueT4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIGFyZ3VtZW50MCk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBjYWxsYmFjayA9IGNvbnZl
cnQ8SURMQW55PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAg
YXV0byByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRGb3JFYWNo
VG9NYXBMaWtlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcywg
V1RGTW92ZShjYWxsYmFjaykpKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkg
YWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2
ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRPbmx5U2V0TGlr
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNSZWFkT25s
eVNldExpa2UuY3BwCmluZGV4IGRmN2M0NjFiZjY0Y2MzNTcyYTE5YmI2MjcxZjk5NTcxMjU2NjM4
YzEuLjZiZThmYjQ2YjA2NWIwM2MxNWIxN2ZmZDY3MzIzMzM3ZDc4MDNhMGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRPbmx5U2V0TGlr
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUmVh
ZE9ubHlTZXRMaWtlLmNwcApAQCAtMjIzLDE0ICsyMjMsMTAgQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzUmVhZE9ubHlTZXRMaWtlUHJvdG90eXBlRnVuY3Rpb25IYXNCb2R5
KEpTQzoKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgaWYgKFVOTElLRUxZKGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIGtleSA9IGNvbnZlcnQ8SURM
RE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAgICBFbnN1cmVT
dGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgw
KTsKKyAgICBhdXRvIGtleSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgYXV0byByZXN1bHQgPSBKU1ZhbHVlOjplbmNv
ZGUodG9KUzxJRExBbnk+KGZvcndhcmRIYXNUb1NldExpa2UoKmxleGljYWxHbG9iYWxPYmplY3Qs
ICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzLCBXVEZNb3ZlKGtleSkpKSk7Ci0KLSAgICAvLyBNYWtl
IHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2Qu
Ci0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKQEAgLTI4OCwxNCArMjg0LDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1JlYWRPbmx5U2V0TGlrZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaEJvZHkoCiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+
dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8SURMQW55
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZl
U2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBh
dXRvIGNhbGxiYWNrID0gY29udmVydDxJRExBbnk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1
bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKICAgICBhdXRvIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZSh0b0pTPElE
TEFueT4oZm9yd2FyZEZvckVhY2hUb1NldExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxs
RnJhbWUsICpjYXN0ZWRUaGlzLCBXVEZNb3ZlKGNhbGxiYWNrKSkpKTsKLQotICAgIC8vIE1ha2Ug
c3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4K
LSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOwotCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTU2V0TGlrZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNTZXRMaWtlLmNwcAppbmRleCBjNDIzNDNlNmQyY2M3Zjg5NjNmNjRiNTJiMTFmZGU5NWE2
YmNjYWFjLi5jNTVjNGJmZTg3MDRlNWFhOTk5MWUzNmJmNmY1NDFhOWQ3Yzc1NzY0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTZXRMaWtlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTZXRMaWtl
LmNwcApAQCAtMjI5LDE0ICsyMjksMTAgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzU2V0TGlrZVByb3RvdHlwZUZ1bmN0aW9uSGFzQm9keShKU0M6OkpTR2xvYmEKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIGtleSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2Nv
cGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRv
IGtleSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1l
bnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAgICAgYXV0byByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExB
bnk+KGZvcndhcmRIYXNUb1NldExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUs
ICpjYXN0ZWRUaGlzLCBXVEZNb3ZlKGtleSkpKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1l
bnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJl
U3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAg
LTI5NCwxNCArMjkwLDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Nl
dExpa2VQcm90b3R5cGVGdW5jdGlvbkZvckVhY2hCb2R5KEpTQzo6SlNHCiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9i
YWxPYmplY3QpKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCk7Ci0gICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8SURMQW55PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1l
bnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIGNhbGxiYWNr
ID0gY29udmVydDxJRExBbnk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUo
KSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKICAgICBhdXRvIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2Fy
ZEZvckVhY2hUb1NldExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0
ZWRUaGlzLCBXVEZNb3ZlKGNhbGxiYWNrKSkpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVu
dHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVT
dGlsbEFsaXZlSGVyZShhcmd1bWVudDApOwotCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAt
MzE3LDE0ICszMDksMTAgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzU2V0
TGlrZVByb3RvdHlwZUZ1bmN0aW9uQWRkQm9keShKU0M6OkpTR2xvYmEKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCkpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1
bWVudCgwKTsKLSAgICBhdXRvIGtleSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1l
bnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIGtleSA9IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVl
KCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAgICAgYXV0byByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndh
cmRBZGRUb1NldExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRU
aGlzLCBXVEZNb3ZlKGtleSkpKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkg
YWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2
ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTM1NCwxNCAr
MzQyLDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1NldExpa2VQcm90
b3R5cGVGdW5jdGlvbkRlbGV0ZUJvZHkoSlNDOjpKU0dsCiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3Qp
KTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7
Ci0gICAgYXV0byBrZXkgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIGFyZ3VtZW50MCk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBrZXkgPSBjb252ZXJ0PElE
TERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAg
IGF1dG8gcmVzdWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQW55Pihmb3J3YXJkRGVsZXRl
VG9TZXRMaWtlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcywg
V1RGTW92ZShrZXkpKSkpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZl
IHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJl
KGFyZ3VtZW50MCk7Ci0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3Rp
dmVET01PYmplY3QuY3BwCmluZGV4IDI4MmY3MGVhZGJlZjNlNDEzYjllMjc1MGMyYWZlYjdmM2Y2
Mzk4YzUuLjMxZDcyMmJkZDBhYTYxMTBjOTdiZGU0M2UzOGMyZWNjN2ViMjE3YTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVE
T01PYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCkBAIC0yMzksMTQgKzIzOSwxMCBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBl
RnVuY3Rpb25FeGNpdGluZwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAg
IGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBh
dXRvIG5leHRDaGlsZCA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPE5vZGU+PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgYXJndW1lbnQwLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJuZXh0Q2hpbGQiLCAiVGVzdEFjdGl2ZURP
TU9iamVjdCIsICJleGNpdGluZ0Z1bmN0aW9uIiwgIk5vZGUiKTsgfSk7CisgICAgRW5zdXJlU3Rp
bGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7
CisgICAgYXV0byBuZXh0Q2hpbGQgPSBjb252ZXJ0PElETEludGVyZmFjZTxOb2RlPj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJn
dW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJuZXh0Q2hpbGQi
LCAiVGVzdEFjdGl2ZURPTU9iamVjdCIsICJleGNpdGluZ0Z1bmN0aW9uIiwgIk5vZGUiKTsgfSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
ICAgICBpbXBsLmV4Y2l0aW5nRnVuY3Rpb24oKm5leHRDaGlsZCk7Ci0KLSAgICAvLyBNYWtlIHN1
cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0g
ICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTI2MywxNCArMjU5LDEwIEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5
cGVGdW5jdGlvblBvc3RNZXNzCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0g
ICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAg
IGF1dG8gbWVzc2FnZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgYXJndW1lbnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIG1lc3NhZ2UgPSBjb252ZXJ0
PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwog
ICAgIGltcGwucG9zdE1lc3NhZ2UoV1RGTW92ZShtZXNzYWdlKSk7Ci0KLSAgICAvLyBNYWtlIHN1
cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0g
ICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTI4NiwxNCArMjc4LDEwIEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5
cGVGdW5jdGlvbk92ZXJsb2FkCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIEN1
c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrIGN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrKCpsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsK
LSAgICBhdXRvIHBhcmFtID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gcGFyYW0gPSBjb252ZXJ0
PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwog
ICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZNb3ZlKHBhcmFtKSk7Ci0KLSAgICAvLyBNYWtl
IHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2Qu
Ci0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTMwMywxOCArMjkxLDEzIEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90
b3R5cGVGdW5jdGlvbk92ZXJsb2FkCiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApOwotICAgIGF1dG8gcGFyYW0xID0gY29udmVydDxJRExJbnRlcmZhY2U8Tm9kZT4+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVu
dFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgInBhcmFtMSIsICJUZXN0
QWN0aXZlRE9NT2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2QiLCAiTm9kZSIpOyB9KTsKKyAgICBF
bnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1
bWVudCgwKTsKKyAgICBhdXRvIHBhcmFtMSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPE5vZGU+Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCksIFtdKEpTQzo6SlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhy
b3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgInBhcmFt
MSIsICJUZXN0QWN0aXZlRE9NT2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2QiLCAiTm9kZSIpOyB9
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwotICAgIGF1dG8gYXJndW1lbnQxID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsK
LSAgICBhdXRvIHBhcmFtMiA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPE5vZGU+PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgYXJndW1lbnQxLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDEsICJwYXJhbTIiLCAiVGVzdEFjdGl2ZURP
TU9iamVjdCIsICJvdmVybG9hZGVkTWV0aG9kIiwgIk5vZGUiKTsgfSk7CisgICAgRW5zdXJlU3Rp
bGxBbGl2ZVNjb3BlIGFyZ3VtZW50MSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSk7
CisgICAgYXV0byBwYXJhbTIgPSBjb252ZXJ0PElETEludGVyZmFjZTxOb2RlPj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGFyZ3VtZW50MS52YWx1ZSgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1l
bnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDEsICJwYXJhbTIiLCAiVGVz
dEFjdGl2ZURPTU9iamVjdCIsICJvdmVybG9hZGVkTWV0aG9kIiwgIk5vZGUiKTsgfSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBp
bXBsLm92ZXJsb2FkZWRNZXRob2QoKnBhcmFtMSwgKnBhcmFtMik7Ci0KLSAgICAvLyBNYWtlIHN1
cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0g
ICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKLSAgICBlbnN1cmVTdGlsbEFsaXZl
SGVyZShhcmd1bWVudDEpOwotCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdENhbGxUcmFjZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdENhbGxUcmFjZXIuY3BwCmluZGV4IDVjZjQ0YzNmMDEyOWVmNmJk
OTkwOGE2NWU1NDQ5NmYzNzcwYWE0YTIuLjdjZTYzZWZhMjkxNTA3NGIzZWVlMDYxNWYzOTE4MmRi
ODRhZjM2YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RDYWxsVHJhY2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbFRyYWNlci5jcHAKQEAgLTM5OCwyNCArMzk4LDE4IEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDYWxsVHJhY2VyUHJvdG90
eXBlRnVuY3Rpb25UZXN0T3BlcmF0aW9uCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAz
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
KSk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
OwotICAgIGF1dG8gYSA9IGNvbnZlcnQ8SURMQm9vbGVhbj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGFyZ3VtZW50MCk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxG
cmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBhID0gY29udmVydDxJRExCb29s
ZWFuPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBh
cmd1bWVudDEgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOwotICAgIGF1dG8gYiA9
IGNvbnZlcnQ8SURMRmxvYXQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDEpOworICAg
IEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDEgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFy
Z3VtZW50KDEpOworICAgIGF1dG8gYiA9IGNvbnZlcnQ8SURMRmxvYXQ+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBhcmd1bWVudDEudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIGFyZ3VtZW50MiA9IGNhbGxGcmFt
ZS0+dW5jaGVja2VkQXJndW1lbnQoMik7Ci0gICAgYXV0byBjID0gY29udmVydDxJRExET01TdHJp
bmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDIpOworICAgIEVuc3VyZVN0aWxsQWxp
dmVTY29wZSBhcmd1bWVudDIgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpOworICAg
IGF1dG8gYyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJn
dW1lbnQyLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAgICAgaWYgKFVOTElLRUxZKGltcGwuY2FsbFRyYWNpbmdBY3RpdmUo
KSkpCiAgICAgICAgIENhbGxUcmFjZXI6OnRlc3RDYWxsVHJhY2VySW50ZXJmYWNlKGltcGwsICJ0
ZXN0T3BlcmF0aW9uV2l0aEFyZ3VtZW50cyJfcywgeyBhLCBiLCBjIH0pOwogICAgIGltcGwudGVz
dE9wZXJhdGlvbldpdGhBcmd1bWVudHMoV1RGTW92ZShhKSwgV1RGTW92ZShiKSwgV1RGTW92ZShj
KSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBl
bmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsK
LSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDEpOwotICAgIGVuc3VyZVN0aWxsQWxp
dmVIZXJlKGFyZ3VtZW50Mik7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogfQogCkBAIC00MzIsMTYgKzQyNiwxMiBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlv
bgogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElL
RUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gYXJndW1lbnQw
ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIG5vZGVOdWxsYWJs
ZUFyZyA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPE5vZGU+Pj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGFyZ3VtZW50MCwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAibm9kZU51bGxhYmxlQXJnIiwgIlRl
c3RDYWxsVHJhY2VyIiwgInRlc3RPcGVyYXRpb25XaXRoTnVsbGFibGVBcmd1bWVudCIsICJOb2Rl
Iik7IH0pOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gbm9kZU51bGxhYmxlQXJnID0gY29udmVy
dDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8Tm9kZT4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
YXJndW1lbnQwLnZhbHVlKCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgIm5vZGVOdWxsYWJsZUFyZyIsICJUZXN0Q2Fs
bFRyYWNlciIsICJ0ZXN0T3BlcmF0aW9uV2l0aE51bGxhYmxlQXJndW1lbnQiLCAiTm9kZSIpOyB9
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwogICAgIGlmIChVTkxJS0VMWShpbXBsLmNhbGxUcmFjaW5nQWN0aXZlKCkpKQogICAgICAgICBD
YWxsVHJhY2VyOjp0ZXN0Q2FsbFRyYWNlckludGVyZmFjZShpbXBsLCAidGVzdE9wZXJhdGlvbldp
dGhOdWxsYWJsZUFyZ3VtZW50Il9zLCB7IG5vZGVOdWxsYWJsZUFyZyB9KTsKICAgICBpbXBsLnRl
c3RPcGVyYXRpb25XaXRoTnVsbGFibGVBcmd1bWVudChXVEZNb3ZlKG5vZGVOdWxsYWJsZUFyZykp
OwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5k
IG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0K
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC00NTgs
MTYgKzQ0OCwxMiBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q2Fs
bFRyYWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbgogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNr
ZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIHZhcmlhbnRBcmcgPSBjb252ZXJ0PElETFVuaW9uPElE
TEJvb2xlYW4sIElETEZsb2F0LCBJRExET01TdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
YXJndW1lbnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIHZhcmlhbnRBcmcgPSBjb252ZXJ0
PElETFVuaW9uPElETEJvb2xlYW4sIElETEZsb2F0LCBJRExET01TdHJpbmc+PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaWYgKFVOTElLRUxZKGltcGwuY2Fs
bFRyYWNpbmdBY3RpdmUoKSkpCiAgICAgICAgIENhbGxUcmFjZXI6OnRlc3RDYWxsVHJhY2VySW50
ZXJmYWNlKGltcGwsICJ0ZXN0T3BlcmF0aW9uV2l0aFZhcmlhbnRBcmd1bWVudCJfcywgeyB2YXJp
YW50QXJnIH0pOwogICAgIGltcGwudGVzdE9wZXJhdGlvbldpdGhWYXJpYW50QXJndW1lbnQoV1RG
TW92ZSh2YXJpYW50QXJnKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxp
dmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2ZUhl
cmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiB9CiAKQEAgLTQ4NCwxNiArNDcwLDEyIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RDYWxsVHJhY2VyUHJvdG90eXBlRnVuY3Rpb25UZXN0T3BlcmF0aW9uCiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFko
Y2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8gdmFyaWFudE51bGxhYmxl
QXJnID0gY29udmVydDxJRExOdWxsYWJsZTxJRExVbmlvbjxJRExCb29sZWFuLCBJRExGbG9hdCwg
SURMRE9NU3RyaW5nPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOworICAgIEVu
c3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApOworICAgIGF1dG8gdmFyaWFudE51bGxhYmxlQXJnID0gY29udmVydDxJRExOdWxsYWJs
ZTxJRExVbmlvbjxJRExCb29sZWFuLCBJRExGbG9hdCwgSURMRE9NU3RyaW5nPj4+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpZiAoVU5MSUtFTFkoaW1wbC5j
YWxsVHJhY2luZ0FjdGl2ZSgpKSkKICAgICAgICAgQ2FsbFRyYWNlcjo6dGVzdENhbGxUcmFjZXJJ
bnRlcmZhY2UoaW1wbCwgInRlc3RPcGVyYXRpb25XaXRoTnVsbGFibGVWYXJpYW50QXJndW1lbnQi
X3MsIHsgdmFyaWFudE51bGxhYmxlQXJnIH0pOwogICAgIGltcGwudGVzdE9wZXJhdGlvbldpdGhO
dWxsYWJsZVZhcmlhbnRBcmd1bWVudChXVEZNb3ZlKHZhcmlhbnROdWxsYWJsZUFyZykpOwotCi0g
ICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRo
aXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC01MDgsMTYgKzQ5
MCwxMiBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q2FsbFRyYWNl
clByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbgogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1
bWVudCgwKTsKLSAgICBhdXRvIHZhcmlhbnRPcHRpb25hbEFyZyA9IGFyZ3VtZW50MC5pc1VuZGVm
aW5lZCgpID8gT3B0aW9uYWw8Q29udmVydGVyPElETFVuaW9uPElETEJvb2xlYW4sIElETEZsb2F0
LCBJRExET01TdHJpbmc+Pjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRlcjxJRExV
bmlvbjxJRExCb29sZWFuLCBJRExGbG9hdCwgSURMRE9NU3RyaW5nPj46OlJldHVyblR5cGU+KGNv
bnZlcnQ8SURMVW5pb248SURMQm9vbGVhbiwgSURMRmxvYXQsIElETERPTVN0cmluZz4+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUg
YXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKKyAgICBhdXRvIHZhcmlhbnRPcHRp
b25hbEFyZyA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxDb252
ZXJ0ZXI8SURMVW5pb248SURMQm9vbGVhbiwgSURMRmxvYXQsIElETERPTVN0cmluZz4+OjpSZXR1
cm5UeXBlPigpIDogT3B0aW9uYWw8Q29udmVydGVyPElETFVuaW9uPElETEJvb2xlYW4sIElETEZs
b2F0LCBJRExET01TdHJpbmc+Pjo6UmV0dXJuVHlwZT4oY29udmVydDxJRExVbmlvbjxJRExCb29s
ZWFuLCBJRExGbG9hdCwgSURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3Vt
ZW50MC52YWx1ZSgpKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKICAgICBpZiAoVU5MSUtFTFkoaW1wbC5jYWxsVHJhY2luZ0FjdGl2ZSgp
KSkKICAgICAgICAgQ2FsbFRyYWNlcjo6dGVzdENhbGxUcmFjZXJJbnRlcmZhY2UoaW1wbCwgInRl
c3RPcGVyYXRpb25XaXRoT3B0aW9uYWxWYXJpYW50QXJndW1lbnQiX3MsIHsgdmFyaWFudE9wdGlv
bmFsQXJnIH0pOwogICAgIGltcGwudGVzdE9wZXJhdGlvbldpdGhPcHRpb25hbFZhcmlhbnRBcmd1
bWVudChXVEZNb3ZlKHZhcmlhbnRPcHRpb25hbEFyZykpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFy
Z3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVu
c3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC01MzIsMTYgKzUxMCwxMiBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1bmN0aW9u
VGVzdE9wZXJhdGlvbgogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKLSAgICBhdXRv
IHZhcmlhbnREZWZhdWx0QXJnID0gYXJndW1lbnQwLmlzVW5kZWZpbmVkKCkgPyAiIiA6IGNvbnZl
cnQ8SURMVW5pb248SURMQm9vbGVhbiwgSURMRmxvYXQsIElETERPTVN0cmluZz4+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1
bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOworICAgIGF1dG8gdmFyaWFudERlZmF1bHRB
cmcgPSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gIiIgOiBjb252ZXJ0PElETFVu
aW9uPElETEJvb2xlYW4sIElETEZsb2F0LCBJRExET01TdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaWYgKFVOTElLRUxZKGltcGwuY2FsbFRyYWNp
bmdBY3RpdmUoKSkpCiAgICAgICAgIENhbGxUcmFjZXI6OnRlc3RDYWxsVHJhY2VySW50ZXJmYWNl
KGltcGwsICJ0ZXN0T3BlcmF0aW9uV2l0aERlZmF1bHRWYXJpYW50QXJndW1lbnQiX3MsIHsgdmFy
aWFudERlZmF1bHRBcmcgfSk7CiAgICAgaW1wbC50ZXN0T3BlcmF0aW9uV2l0aERlZmF1bHRWYXJp
YW50QXJndW1lbnQoV1RGTW92ZSh2YXJpYW50RGVmYXVsdEFyZykpOwotCi0gICAgLy8gTWFrZSBz
dXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgot
ICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RE9NSklULmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RET01KSVQuY3BwCmluZGV4IDE0YTI5
NTQ4ZWIzMWMzZmFhZjRlNGJhNmNkYTQwMWQ2NGMzYzZkNGEuLmZjZTFkNjg0MmY1YzlhYTg4NTlh
Yjk2NzIxMzliODczNDQwNzgyZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RET01KSVQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RET01KSVQuY3BwCkBAIC0xMTM1LDE0ICsxMTM1
LDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRQcm90
b3R5cGVGdW5jdGlvbkdldEF0dHJpYnV0ZUJvZHkoCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0KSk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApOwotICAgIGF1dG8gbmFtZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1l
bnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIG5hbWUgPSBj
b252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1
ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogICAgIGF1dG8gcmVzdWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMTnVsbGFibGU8
SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGltcGwuZ2V0QXR0cmlidXRlKFdU
Rk1vdmUobmFtZSkpKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUg
dW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUo
YXJndW1lbnQwKTsKLQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTExNzUsMTggKzExNzEs
MTMgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFByb3Rv
dHlwZUZ1bmN0aW9uSXRlbUJvZHkoSlNDOjpKU0cKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQo
KSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxP
YmplY3QpKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1l
bnQoMCk7Ci0gICAgYXV0byB4ID0gY29udmVydDxJRExVbnNpZ25lZFNob3J0PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1l
bnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIHggPSBjb252
ZXJ0PElETFVuc2lnbmVkU2hvcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFs
dWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKLSAgICBhdXRvIGFyZ3VtZW50MSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQo
MSk7Ci0gICAgYXV0byB5ID0gY29udmVydDxJRExVbnNpZ25lZFNob3J0PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgYXJndW1lbnQxKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQx
ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKKyAgICBhdXRvIHkgPSBjb252ZXJ0
PElETFVuc2lnbmVkU2hvcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDEudmFsdWUo
KSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKICAgICBhdXRvIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETERPTVN0cmluZz4o
KmxleGljYWxHbG9iYWxPYmplY3QsIGltcGwuaXRlbShXVEZNb3ZlKHgpLCBXVEZNb3ZlKHkpKSkp
OwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5k
IG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0g
ICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQxKTsKLQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKQEAgLTEyNTAsMTQgKzEyNDEsMTAgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudEJ5SWRCb2QKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShj
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0byBlbGVtZW50SWQgPSBjb252
ZXJ0PElETFJlcXVpcmVzRXhpc3RpbmdBdG9tU3RyaW5nQWRhcHRvcjxJRExET01TdHJpbmc+Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2Nv
cGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRv
IGVsZW1lbnRJZCA9IGNvbnZlcnQ8SURMUmVxdWlyZXNFeGlzdGluZ0F0b21TdHJpbmdBZGFwdG9y
PElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
ICAgICBhdXRvIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVyZmFjZTxFbGVt
ZW50Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
aW1wbC5nZXRFbGVtZW50QnlJZChXVEZNb3ZlKGVsZW1lbnRJZCkpKSk7Ci0KLSAgICAvLyBNYWtl
IHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2Qu
Ci0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKQEAgLTEyOTAsMTQgKzEyNzcsMTAgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudHNCeU5hbWUK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VM
WShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9
IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0byBlbGVtZW50TmFtZSA9
IGNvbnZlcnQ8SURMQXRvbVN0cmluZ0FkYXB0b3I8SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGFyZ3VtZW50MCk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50
MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBlbGVtZW50TmFt
ZSA9IGNvbnZlcnQ8SURMQXRvbVN0cmluZ0FkYXB0b3I8SURMRE9NU3RyaW5nPj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGF1dG8gcmVzdWx0ID0gSlNWYWx1
ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNlPE5vZGVMaXN0Pj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5nZXRFbGVtZW50c0J5TmFtZShX
VEZNb3ZlKGVsZW1lbnROYW1lKSkpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3Rh
eSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFs
aXZlSGVyZShhcmd1bWVudDApOwotCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRC
eVNldHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEVuYWJsZWRCeVNldHRpbmcuY3BwCmluZGV4IDE3NzhhZDNkOWQzNTM3MTY4NjRhYTdiZjdl
MTk3NjFlNjJkMmQ1NDIuLmJhYmRlMTUwMWFjMTk4ZGY1YmVkNmI1YzhhNmIzZWM2YzAwM2NjNDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RFbmFibGVkQnlTZXR0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEJ5U2V0dGluZy5jcHAKQEAgLTMwNywxNCArMzA3LDEw
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFbmFibGVkQnlTZXR0
aW5nUHJvdG90eXBlRnVuY3Rpb25FbmFibGVkCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApOwotICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1
bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gdGVzdFBh
cmFtID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVu
dDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKICAgICBpbXBsLmVuYWJsZWRCeVNldHRpbmdPcGVyYXRpb24oV1RGTW92ZSh0
ZXN0UGFyYW0pKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRp
bCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1
bWVudDApOwotCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCmluZGV4IDc1ZTAwNDNiZTZjOWQ2
MTAyMDZhM2UwNjI4ODNlYzU3OWM3ZWU4NWEuLjc1YWMwYmZiZTlmY2NkMTFkOWFmNWVlZWE0NDA0
ZWIyYjM3MTFjNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKQEAgLTE3
MywxMSArMTczLDExIEBAIHRlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBK
U1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmNvbnN0CiAgICAgQVNTRVJUKGNhc3Rl
ZFRoaXMpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3Qp
KTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7
Ci0gICAgYXV0byB0eXBlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gdHlwZSA9IGNvbnZlcnQ8
SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0g
ICAgYXV0byBhcmd1bWVudDEgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpOwotICAgIGF1dG8gZXZl
bnRJbml0RGljdCA9IGNvbnZlcnQ8SURMRGljdGlvbmFyeTxUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6
SW5pdD4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDEpOworICAgIEVuc3VyZVN0aWxs
QWxpdmVTY29wZSBhcmd1bWVudDEgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpOworICAgIGF1dG8g
ZXZlbnRJbml0RGljdCA9IGNvbnZlcnQ8SURMRGljdGlvbmFyeTxUZXN0RXZlbnRDb25zdHJ1Y3Rv
cjo6SW5pdD4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDEudmFsdWUoKSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBh
dXRvIG9iamVjdCA9IFRlc3RFdmVudENvbnN0cnVjdG9yOjpjcmVhdGUoV1RGTW92ZSh0eXBlKSwg
V1RGTW92ZShldmVudEluaXREaWN0KSk7CiAgICAgYXV0byBqc1ZhbHVlID0gdG9KU05ld2x5Q3Jl
YXRlZDxJRExJbnRlcmZhY2U8VGVzdEV2ZW50Q29uc3RydWN0b3I+PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEZNb3ZlKG9iamVjdCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2
ZW50VGFyZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RFdmVudFRhcmdldC5jcHAKaW5kZXggNDc4NGQ0MzI5OTIxNzE2NmI2N2VjNTQ2MGVjOTVl
ZWU5YmZhNTYzMi4uMGI5NDQxOGIzYjJhODRkMGVjN2QyZTE3OTZmNDEwMWVkMDA3YTYwNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2
ZW50VGFyZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCkBAIC0yNTYsMTQgKzI1NiwxMCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlv
bkl0ZW1Cb2R5KEpTQwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1
dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRv
IGluZGV4ID0gY29udmVydDxJRExVbnNpZ25lZExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBh
cmd1bWVudDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJh
bWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gaW5kZXggPSBjb252ZXJ0PElETFVu
c2lnbmVkTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAg
IGF1dG8gcmVzdWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNlPE5vZGU+Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLml0
ZW0oV1RGTW92ZShpbmRleCkpKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkg
YWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2
ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmpl
Y3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEds
b2JhbE9iamVjdC5jcHAKaW5kZXggZDA0MGE1MzA4YjQ0MDEyOTRkMDBiM2YzNzFhNmUyMzY2YTI4
YzllYy4uNjA1ZmViNjE2NGFlZThmNDc3M2JkMzBlMmE1MTI5MzQzMjBjMmI1YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9i
amVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEdsb2JhbE9iamVjdC5jcHAKQEAgLTI1NjcsMTQgKzI1NjcsMTAgQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25S
ZWd1bGFyT3BlcmEKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRv
IGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0byB0
ZXN0UGFyYW0gPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFy
Z3VtZW50MCk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFt
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byB0ZXN0UGFyYW0gPSBjb252ZXJ0PElE
TERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAg
IGltcGwucmVndWxhck9wZXJhdGlvbihXVEZNb3ZlKHRlc3RQYXJhbSkpOwotCi0gICAgLy8gTWFr
ZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9k
LgotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC0yNTkwLDE0ICsyNTg2LDEwIEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0
YW5jZUZ1bmN0aW9uRW5hYmxlZEF0UnVuCiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApOwotICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxJRExET01TdHJpbmc+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29w
ZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8g
dGVzdFBhcmFtID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBh
cmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24oV1RG
TW92ZSh0ZXN0UGFyYW0pKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2
ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVy
ZShhcmd1bWVudDApOwotCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIH0KIApAQCAtMjYxMCwxNCArMjYwMiwxMCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRBdFJ1bgog
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gYXJn
dW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIHRlc3RQ
YXJhbSA9IGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7
CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCk7CisgICAgYXV0byB0ZXN0UGFyYW0gPSBjb252ZXJ0PElETExvbmc+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLmVuYWJsZWRB
dFJ1bnRpbWVPcGVyYXRpb24oV1RGTW92ZSh0ZXN0UGFyYW0pKTsKLQotICAgIC8vIE1ha2Ugc3Vy
ZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAg
ICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOwotCiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtMjY2MSwxNCArMjY0OSwxMCBAQCBzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0
b3JGdW5jdGlvbkVuYWJsZWRBdAogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBp
ZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byBh
cmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8gdGVz
dFBhcmFtID0gY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQw
KTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIHRlc3RQYXJhbSA9IGNvbnZlcnQ8SURMTG9uZz4o
KmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIFRlc3RHbG9iYWxP
YmplY3Q6OmVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb25TdGF0aWMoV1RGTW92ZSh0ZXN0UGFyYW0p
KTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVu
ZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOwot
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtMjY4
NywxNCArMjY3MSwxMCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRJblNwZQogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIHRlc3RQYXJhbSA9IGNvbnZlcnQ8SURMTG9uZz4o
KmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNj
b3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0
byB0ZXN0UGFyYW0gPSBjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1
bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLmVuYWJsZWRJblNwZWNpZmljV29ybGQoV1RGTW92ZSh0
ZXN0UGFyYW0pKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRp
bCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1
bWVudDApOwotCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0K
IApAQCAtMjcxMSwxNCArMjY5MSwxMCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRJblNwZQogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIHRlc3RQYXJhbSA9IGNvbnZlcnQ8
SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CisgICAgRW5zdXJlU3Rp
bGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7
CisgICAgYXV0byB0ZXN0UGFyYW0gPSBjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLmVuYWJsZWRJblNwZWNpZmljV29ybGRX
aGVuUnVudGltZUZlYXR1cmVFbmFibGVkKFdURk1vdmUodGVzdFBhcmFtKSk7Ci0KLSAgICAvLyBN
YWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRo
b2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTI3MzUsMTQgKzI3MTEsMTAg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdElu
c3RhbmNlRnVuY3Rpb25FbmFibGVkSW5TcGUKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QpKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQo
MCk7Ci0gICAgYXV0byB0ZXN0UGFyYW0gPSBjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAg
PSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gdGVzdFBhcmFtID0g
Y29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAgICAgaW1wbC5lbmFibGVkSW5TcGVjaWZpY1dvcmxkV2hlblJ1bnRpbWVGZWF0dXJlc0VuYWJs
ZWQoV1RGTW92ZSh0ZXN0UGFyYW0pKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3Rh
eSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFs
aXZlSGVyZShhcmd1bWVudDApOwotCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJ
ZGVudGlmaWVyLmNwcAppbmRleCAyZjI1ODhjMGEzN2VhN2Y2OGNjMjc0ZmUzNmM0ZDFmYjJiMTE0
ZGM2Li43NGMwYjRiMTBhZmFhZjg5Nzk3NDFiOTY2MTI5NmM3ZDE0MjlkMDBlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcApAQCAtMjgz
LDE4ICsyODMsMTMgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZUZ1bmMKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0byBpbmRleCA9IGNvbnZlcnQ8SURMVW5zaWduZWRMb25n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZl
U2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBh
dXRvIGluZGV4ID0gY29udmVydDxJRExVbnNpZ25lZExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIGFyZ3VtZW50MSA9IGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoMSk7Ci0gICAgYXV0byB2YWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQxKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZl
U2NvcGUgYXJndW1lbnQxID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKKyAgICBh
dXRvIHZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBh
cmd1bWVudDEudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLmluZGV4ZWRTZXR0ZXIoV1RGTW92ZShpbmRleCks
IFdURk1vdmUodmFsdWUpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2
ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVy
ZShhcmd1bWVudDApOwotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MSk7Ci0KICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRl
cmZhY2UuY3BwCmluZGV4IDg4ZmQ5MWJiNGM4MDNkYWYyYmZkMWU2ZTYwOTVlMzA0ZWNkODg3ZjYu
LjZjM2EwNjM1Y2U1ZTJhZDRmYzA2MGFmYTQ2NzI0NDA5Y2YxZjhmNzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRl
cmZhY2UuY3BwCkBAIC0yNzUsMTEgKzI3NSwxMSBAQCB0ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I6OmNvbnN0cnVjdChKUwog
ICAgIGF1dG8qIGNvbnRleHQgPSBjYXN0ZWRUaGlzLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CiAgICAgaWYgKFVOTElLRUxZKCFjb250ZXh0KSkKICAgICAgICAgcmV0dXJuIHRocm93Q29uc3Ry
dWN0b3JTY3JpcHRFeGVjdXRpb25Db250ZXh0VW5hdmFpbGFibGVFcnJvcigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgIlRlc3RJbnRlcmZhY2UiKTsKLSAgICBhdXRvIGFyZ3VtZW50
MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0byBzdHIxID0gY29u
dmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOworICAg
IEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApOworICAgIGF1dG8gc3RyMSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBhcmd1bWVudDEgPSBj
YWxsRnJhbWUtPmFyZ3VtZW50KDEpOwotICAgIGF1dG8gc3RyMiA9IGFyZ3VtZW50MS5pc1VuZGVm
aW5lZCgpID8gImRlZmF1bHRTdHJpbmciX3MgOiBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MSk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFy
Z3VtZW50MSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMSk7CisgICAgYXV0byBzdHIyID0gYXJndW1l
bnQxLnZhbHVlKCkuaXNVbmRlZmluZWQoKSA/ICJkZWZhdWx0U3RyaW5nIl9zIDogY29udmVydDxJ
RExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDEudmFsdWUoKSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAg
ICBhdXRvIG9iamVjdCA9IFRlc3RJbnRlcmZhY2U6OmNyZWF0ZSgqY29udGV4dCwgV1RGTW92ZShz
dHIxKSwgV1RGTW92ZShzdHIyKSk7CiAgICAgYXV0byBqc1ZhbHVlID0gdG9KU05ld2x5Q3JlYXRl
ZDxJRExJbnRlcmZhY2U8VGVzdEludGVyZmFjZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2Fz
dGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIFdURk1vdmUob2JqZWN0KSk7CkBA
IC05MjUsMTggKzkyNSwxMyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRzTWV0aAogICAgIGF1dG8qIGNv
bnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmIChVTkxJS0VMWSghY29udGV4dCkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgYXV0byBh
cmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8gc3Ry
QXJnID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVu
dDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gc3RyQXJnID0gY29udmVydDxJRExET01TdHJp
bmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIGFy
Z3VtZW50MSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSk7Ci0gICAgYXV0byBvYmpB
cmcgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGFyZ3VtZW50MSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHNjb3BlLCAxLCAib2JqQXJnIiwgIlRlc3RJbnRlcmZhY2UiLCAiaW1wbGVt
ZW50c01ldGhvZDIiLCAiVGVzdE9iaiIpOyB9KTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUg
YXJndW1lbnQxID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKKyAgICBhdXRvIG9i
akFyZyA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+PigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgYXJndW1lbnQxLnZhbHVlKCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMSwgIm9iakFyZyIsICJUZXN0SW50ZXJmYWNl
IiwgImltcGxlbWVudHNNZXRob2QyIiwgIlRlc3RPYmoiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBhdXRvIHJlc3VsdCA9
IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4oKmxleGljYWxHbG9i
YWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5p
bXBsZW1lbnRzTWV0aG9kMigqY29udGV4dCwgV1RGTW92ZShzdHJBcmcpLCAqb2JqQXJnKSkpOwot
Ci0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9m
IHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0gICAg
ZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQxKTsKLQogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKQEAgLTEwMjksMTggKzEwMjQsMTMgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWUKICAgICBh
dXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9i
amVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoVU5MSUtFTFkoIWNvbnRl
eHQpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAg
IGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBh
dXRvIHN0ckFyZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
YXJndW1lbnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIHN0ckFyZyA9IGNvbnZlcnQ8SURM
RE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAg
YXV0byBhcmd1bWVudDEgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOwotICAgIGF1
dG8gb2JqQXJnID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBhcmd1bWVudDEsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMSwgIm9iakFyZyIsICJUZXN0SW50ZXJmYWNlIiwg
InN1cHBsZW1lbnRhbE1ldGhvZDIiLCAiVGVzdE9iaiIpOyB9KTsKKyAgICBFbnN1cmVTdGlsbEFs
aXZlU2NvcGUgYXJndW1lbnQxID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKKyAg
ICBhdXRvIG9iakFyZyA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgYXJndW1lbnQxLnZhbHVlKCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVu
dFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMSwgIm9iakFyZyIsICJUZXN0
SW50ZXJmYWNlIiwgInN1cHBsZW1lbnRhbE1ldGhvZDIiLCAiVGVzdE9iaiIpOyB9KTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGF1
dG8gcmVzdWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Nj
b3BlLCBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxNZXRob2QyKGltcGws
ICpjb250ZXh0LCBXVEZNb3ZlKHN0ckFyZyksICpvYmpBcmcpKSk7Ci0KLSAgICAvLyBNYWtlIHN1
cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0g
ICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKLSAgICBlbnN1cmVTdGlsbEFsaXZl
SGVyZShhcmd1bWVudDEpOwotCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCmluZGV4IGZhNWI3MTgwMDkxNDBiOGZm
YzIwZGM0MmYzYjBhODlmMjUxZDNkYWQuLmY5ZDgxM2QzMDJlYzA3ZmZlZWY3OTg3ZjBkZjJhNzNj
MTViOGJhZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5j
cHAKQEAgLTE5MywxNCArMTkzLDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlRnVuY3Rpb25NCiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZy
YW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJh
bWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8gbGlzdGVuZXIgPSBjb252ZXJ0PElE
TENhbGxiYWNrRnVuY3Rpb248SlNNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGFyZ3VtZW50MCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBbXShKU0M6
OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHNjb3BlLCAwLCAibGlzdGVuZXIiLCAiVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIiLCAi
bWV0aG9kIik7IH0pOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gbGlzdGVuZXIgPSBjb252ZXJ0
PElETENhbGxiYWNrRnVuY3Rpb248SlNNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJsaXN0ZW5lciIsICJUZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lciIsICJtZXRob2QiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZChsaXN0ZW5lci5yZWxlYXNl
Tm9uTnVsbCgpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRp
bCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1
bWVudDApOwotCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllci5jcHAKaW5kZXggYzBiNGM1YmEzMzgxMzMxMGQ2MTc5YmZmOGEwYzdiOTMz
Zjk3MmMyZi4uY2VmZDg3NmEwMTM5YWYxMDYzMjRhYjMyMzZmMjJmYmRjNThlZGQ0NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXIuY3BwCkBAIC0zNTMsMTggKzM1MywxMyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90
bwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElL
RUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gYXJndW1lbnQw
ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIG5hbWUgPSBjb252
ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CisgICAg
RW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCk7CisgICAgYXV0byBuYW1lID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIGFyZ3VtZW50MSA9IGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSk7Ci0gICAgYXV0byB2YWx1ZSA9IGNvbnZlcnQ8
SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQxKTsKKyAgICBFbnN1
cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQxID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVu
dCgxKTsKKyAgICBhdXRvIHZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBhcmd1bWVudDEudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm5hbWVkU2V0dGVyKFdURk1v
dmUobmFtZSksIFdURk1vdmUodmFsdWUpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMg
c3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGls
bEFsaXZlSGVyZShhcmd1bWVudDApOwotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50
MSk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBA
IC0zODEsMTggKzM3NiwxMyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90bwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIGluZGV4ID0gY29udmVydDxJRExVbnNpZ25l
ZExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0aWxs
QWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwor
ICAgIGF1dG8gaW5kZXggPSBjb252ZXJ0PElETFVuc2lnbmVkTG9uZz4oKmxleGljYWxHbG9iYWxP
YmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gYXJndW1lbnQxID0gY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudCgxKTsKLSAgICBhdXRvIHZhbHVlID0gY29udmVydDxJRExET01T
dHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDEpOworICAgIEVuc3VyZVN0aWxs
QWxpdmVTY29wZSBhcmd1bWVudDEgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOwor
ICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIGFyZ3VtZW50MS52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwuaW5kZXhlZFNldHRlcihXVEZNb3ZlKGlu
ZGV4KSwgV1RGTW92ZSh2YWx1ZSkpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5
IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxp
dmVIZXJlKGFyZ3VtZW50MCk7Ci0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQxKTsK
LQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAppbmRleCA1ZTAyY2QyOTU4NTQ0YTBmNzM5Yjg5
MjQwYWNlMjRmMWE1YmJlY2U1Li40MTk5YmJmYjNlMDVlMDRiNDk2Yzc2Yzc5NjViNzFhYTMxYTNl
N2UyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCkBAIC0xMDgsMTQgKzEw
OCwxNCBAQCB0ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0TmFt
ZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3I6OgogICAgIEFTU0VSVChjYXN0ZWRUaGlzKTsK
ICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAg
YXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAgIGF1
dG8gc3RyMSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJn
dW1lbnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIHN0cjEgPSBjb252ZXJ0PElETERPTVN0
cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8g
YXJndW1lbnQxID0gY2FsbEZyYW1lLT5hcmd1bWVudCgxKTsKLSAgICBhdXRvIHN0cjIgPSBhcmd1
bWVudDEuaXNVbmRlZmluZWQoKSA/ICJkZWZhdWx0U3RyaW5nIl9zIDogY29udmVydDxJRExET01T
dHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDEpOworICAgIEVuc3VyZVN0aWxs
QWxpdmVTY29wZSBhcmd1bWVudDEgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpOworICAgIGF1dG8g
c3RyMiA9IGFyZ3VtZW50MS52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyAiZGVmYXVsdFN0cmluZyJf
cyA6IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQx
LnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7Ci0gICAgYXV0byBhcmd1bWVudDIgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDIpOwot
ICAgIGF1dG8gc3RyMyA9IGFyZ3VtZW50Mi5pc1VuZGVmaW5lZCgpID8gU3RyaW5nKCkgOiBjb252
ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50Mik7CisgICAg
RW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MiA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMik7
CisgICAgYXV0byBzdHIzID0gYXJndW1lbnQyLnZhbHVlKCkuaXNVbmRlZmluZWQoKSA/IFN0cmlu
ZygpIDogY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVu
dDIudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKICAgICBhdXRvIG9iamVjdCA9IFRlc3ROYW1lZENvbnN0cnVjdG9yOjpjcmVh
dGVGb3JKU0NvbnN0cnVjdG9yKFdURk1vdmUoc3RyMSksIFdURk1vdmUoc3RyMiksIFdURk1vdmUo
c3RyMykpOwogICAgIGF1dG8ganNWYWx1ZSA9IHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNl
PFRlc3ROYW1lZENvbnN0cnVjdG9yPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgV1RGTW92ZShvYmplY3QpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERl
bGV0ZXJXaXRoSWRlbnRpZmllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuY3BwCmluZGV4IDA2NDBi
MDc2YmVkOGUyM2VmNzllM2MyZjgzZmVkZmE1ODNiNWIyMTEuLjdlMDZkNzk3N2U0YjI4ZmJlYzg5
YzNhMDVkYzYwYjBiYzc5MDlhMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVs
ZXRlcldpdGhJZGVudGlmaWVyLmNwcApAQCAtMjY2LDE0ICsyNjYsMTAgQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyUHJv
dG90eXBlRnVuY3QKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRv
IGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0byBu
YW1lID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVu
dDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gbmFtZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5uYW1l
ZERlbGV0ZXIoV1RGTW92ZShuYW1lKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0
YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxB
bGl2ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVu
dGlmaWVyLmNwcAppbmRleCA1NWRmYTYwNWFkMDk1MTU2MzU3MzZmYjBjMjMzZmMxZTVmNjY3NDVk
Li5iMTkxNjEwMjgzNWNiNWRmYWMyMGQ5MDgyYWJmOTA3ODNmZTA4MGNiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJX
aXRoSWRlbnRpZmllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCkBAIC0yNDIsMTQgKzI0
MiwxMCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRHZXR0
ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZUZ1bmN0aQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCkpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1
bWVudCgwKTsKLSAgICBhdXRvIG5hbWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3Vt
ZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBuYW1lID0g
Y29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFs
dWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKICAgICBhdXRvIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETERPTVN0cmlu
Zz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGltcGwuZ2V0dGVyTmFtZShXVEZNb3ZlKG5hbWUpKSkp
OwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5k
IG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0K
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSWRlbnRpZmllci5jcHAKaW5kZXggYTczNTFjMzJmNTE3MzNjZmYyYjIyMDM2ZjMyMWVl
MGQzMjQ3YjNlYy4uNWEyNDRjOWNiZTJlMjQyNzlhMjc5MWVhMjdjNTY3MzQ5ODM1ZGMxOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcApAQCAt
MzA1LDE4ICszMDUsMTMgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGVGdW5jdGkKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0byBuYW1lID0gY29udmVydDxJRExET01TdHJpbmc+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVT
Y29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1
dG8gbmFtZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJn
dW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBhcmd1bWVudDEgPSBjYWxsRnJhbWUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDEpOwotICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MSk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3Bl
IGFyZ3VtZW50MSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSk7CisgICAgYXV0byB2
YWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1l
bnQxLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5uYW1lZFNldHRlcihXVEZNb3ZlKG5hbWUpLCBXVEZNb3Zl
KHZhbHVlKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwg
dGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1l
bnQwKTsKLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDEpOwotCiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElu
ZGV4ZWRHZXR0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCmluZGV4IGMzNGNhYjM0MWU4
ZWYzYTZkZWNjZmQyOGJlNWMwNTQxYjg5ZTY0NGUuLjg3NjVmZDhkNmY5NWEyNDVhYWM3Y2M3NjM2
OTU3ZmY4M2ZjYWQ1OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoSW5kZXhlZEdldHRlci5jcHAKQEAgLTMzMCwxOCArMzMwLDEzIEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyUHJv
dG90eXBlRnVuCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBp
ZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byBh
cmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8gbmFt
ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQw
KTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIG5hbWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4o
KmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gYXJndW1l
bnQxID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKLSAgICBhdXRvIHZhbHVlID0g
Y29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDEpOwor
ICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDEgPSBjYWxsRnJhbWUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDEpOworICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MS52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubmFtZWRTZXR0
ZXIoV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh2YWx1ZSkpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFy
Z3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVu
c3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUo
YXJndW1lbnQxKTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiB9CiAKQEAgLTM1OCwxNCArMzUzLDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyUHJvdG90eXBlRnVuCiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8gaW5kZXggPSBjb252ZXJ0PElE
TFVuc2lnbmVkTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CisgICAgRW5z
dXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1l
bnQoMCk7CisgICAgYXV0byBpbmRleCA9IGNvbnZlcnQ8SURMVW5zaWduZWRMb25nPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgYXV0byByZXN1bHQgPSBKU1Zh
bHVlOjplbmNvZGUodG9KUzxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbXBs
LmluZGV4ZWRTZXR0ZXIoV1RGTW92ZShpbmRleCkpKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJn
dW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5z
dXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVk
R2V0dGVyQW5kU2V0dGVyLmNwcAppbmRleCA4YTIyMWZhZmRhYzY0NmM3MzcyNDFmMzgzNjNkZDZl
OGZlOGM1ZTBmLi5mYTViNDViOGQ5M2VkMDY1M2ZlMzA3Mzk2NDI4MDQzMWE3MjVkMDQwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRH
ZXR0ZXJBbmRTZXR0ZXIuY3BwCkBAIC0zNTMsMTggKzM1MywxMyBAQCBzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNl
dHRlclBybwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYg
KFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gYXJn
dW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIG5hbWUg
PSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7
CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBuYW1lID0gY29udmVydDxJRExET01TdHJpbmc+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIGFyZ3VtZW50
MSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSk7Ci0gICAgYXV0byB2YWx1ZSA9IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQxKTsKKyAg
ICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQxID0gY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudCgxKTsKKyAgICBhdXRvIHZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDEudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm5hbWVkU2V0dGVy
KFdURk1vdmUobmFtZSksIFdURk1vdmUodmFsdWUpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1
bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1
cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOwotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFy
Z3VtZW50MSk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
fQogCkBAIC0zNzksMTggKzM3NCwxMyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlclBybwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gYXJndW1lbnQw
ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIGluZGV4ID0gY29u
dmVydDxJRExVbnNpZ25lZExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOwor
ICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApOworICAgIGF1dG8gaW5kZXggPSBjb252ZXJ0PElETFVuc2lnbmVkTG9uZz4o
KmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gYXJndW1l
bnQxID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKLSAgICBhdXRvIHZhbHVlID0g
Y29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDEpOwor
ICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDEgPSBjYWxsRnJhbWUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDEpOworICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MS52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwuaW5kZXhlZFNl
dHRlcihXVEZNb3ZlKGluZGV4KSwgV1RGTW92ZSh2YWx1ZSkpOwotCi0gICAgLy8gTWFrZSBzdXJl
IGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAg
IGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0gICAgZW5zdXJlU3RpbGxBbGl2ZUhl
cmUoYXJndW1lbnQxKTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiB9CiAKQEAgLTQwMCwxNCArMzkwLDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyUHJvCiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBhcmd1
bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8gaW5kZXgg
PSBjb252ZXJ0PElETFVuc2lnbmVkTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50
MCk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBpbmRleCA9IGNvbnZlcnQ8SURMVW5zaWduZWRM
b25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgYXV0byBy
ZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBpbXBsLmluZGV4ZWRTZXR0ZXIoV1RGTW92ZShpbmRleCkpKSk7Ci0KLSAgICAvLyBN
YWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRo
b2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE9iai5jcHAKaW5kZXggMTg5M2NkNDQ1NGE0ZDI0OTk2N2ZiZDk0Y2VjOTE4
OGRkZDRhMWNjOS4uNDUwYjgzNWQzZmY0MDBmZWZlZGY2YmRkOWRiYTUzMTBmNmEwMTQ4MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9i
ai5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHAKQEAgLTE5NjYsMTEgKzE5NjYsMTEgQEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdE9iakNvbnN0cnVjdG9yOjpjb25zdHJ1Y3QoSlNHbG9iYWwK
ICAgICAgICAgcmV0dXJuIHRocm93Q29uc3RydWN0b3JTY3JpcHRFeGVjdXRpb25Db250ZXh0VW5h
dmFpbGFibGVFcnJvcigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgIlRlc3RPYmpl
Y3QiKTsKICAgICBBU1NFUlQoY29udGV4dC0+aXNEb2N1bWVudCgpKTsKICAgICBhdXRvJiBkb2N1
bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7Ci0gICAgYXV0byBhcmd1bWVudDAg
PSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8gdGVzdENhbGxiYWNr
ID0gY29udmVydDxJRExDYWxsYmFja0ludGVyZmFjZTxKU1Rlc3RDYWxsYmFja0ludGVyZmFjZT4+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgInRlc3RDYWxsYmFjayIsICJUZXN0T2JqZWN0Iiwg
bnVsbHB0cik7IH0pOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gdGVzdENhbGxiYWNrID0gY29u
dmVydDxJRExDYWxsYmFja0ludGVyZmFjZTxKU1Rlc3RDYWxsYmFja0ludGVyZmFjZT4+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6
OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAidGVzdENhbGxiYWNrIiwgIlRlc3RPYmplY3Qi
LCBudWxscHRyKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIGFyZ3VtZW50MSA9IGNhbGxGcmFtZS0+dW5jaGVja2Vk
QXJndW1lbnQoMSk7Ci0gICAgYXV0byB0ZXN0Q2FsbGJhY2tGdW5jdGlvbiA9IGNvbnZlcnQ8SURM
Q2FsbGJhY2tGdW5jdGlvbjxKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uPj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIGFyZ3VtZW50MSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBbXShKU0M6OkpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
KSB7IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHNjb3BlLCAxLCAidGVzdENhbGxiYWNrRnVuY3Rpb24iLCAiVGVzdE9iamVjdCIsIG51bGxwdHIp
OyB9KTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQxID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgxKTsKKyAgICBhdXRvIHRlc3RDYWxsYmFja0Z1bmN0aW9uID0gY29u
dmVydDxJRExDYWxsYmFja0Z1bmN0aW9uPEpTVGVzdENhbGxiYWNrRnVuY3Rpb24+PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgYXJndW1lbnQxLnZhbHVlKCksICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMSwgInRlc3RDYWxsYmFja0Z1bmN0aW9uIiwgIlRlc3RP
YmplY3QiLCBudWxscHRyKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBhdXRvIG9iamVjdCA9IFRlc3RPYmo6OmNyZWF0ZShk
b2N1bWVudCwgdGVzdENhbGxiYWNrLnJlbGVhc2VOb25OdWxsKCksIHRlc3RDYWxsYmFja0Z1bmN0
aW9uLnJlbGVhc2VOb25OdWxsKCkpOwogICAgIGF1dG8ganNWYWx1ZSA9IHRvSlNOZXdseUNyZWF0
ZWQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpLCBXVEZNb3ZlKG9iamVjdCkpOwpAQCAtMjU1NywxNCArMjU1Nywx
MCBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNhbGxKU1Rlc3RPYmoxKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LAogICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nh
c3Q8SlNUZXN0T2JqKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKTsKICAgICBBU1NFUlQoY2FzdGVk
VGhpcyk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRv
IGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0byBw
YXJhbSA9IGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7
CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBwYXJhbSA9IGNvbnZlcnQ8SURMTG9uZz4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubGVnYWN5Q2FsbGVy
TmFtZWQoV1RGTW92ZShwYXJhbSkpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5
IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxp
dmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogfQogCkBAIC0yNTc2LDE0ICsyNTcyLDEwIEBAIHN0YXRpYyBpbmxpbmUgRW5jb2Rl
ZEpTVmFsdWUgY2FsbEpTVGVzdE9iajIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsCiAgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihjYWxsRnJhbWUt
PmpzQ2FsbGVlKCkpOwogICAgIEFTU0VSVChjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIHBhcmFtID0gY29udmVydDxJRExET01TdHJp
bmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0aWxsQWxp
dmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAg
IGF1dG8gcGFyYW0gPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGFyZ3VtZW50MC52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGF1dG8gcmVzdWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKHRv
SlM8SURMTG9uZz4oaW1wbC5sZWdhY3lDYWxsZXJPcGVyYXRpb25Gcm9tQmluZGluZ3MoV1RGTW92
ZShwYXJhbSkpKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50
aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJn
dW1lbnQwKTsKLQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTU2MDAsMTQgKzU1OTIsMTAg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXIKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCk7Ci0gICAgYXV0byB0ZXN0UGFyYW0gPSBjb252ZXJ0PElETERPTVN0cmluZz4o
KmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNj
b3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0
byB0ZXN0UGFyYW0gPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGFyZ3VtZW50MC52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwuZW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbihX
VEZNb3ZlKHRlc3RQYXJhbSkpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFs
aXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxpdmVI
ZXJlKGFyZ3VtZW50MCk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogfQogCkBAIC01NjIwLDE0ICs1NjA4LDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVy
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBh
cmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8gdGVz
dFBhcmFtID0gY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQw
KTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIHRlc3RQYXJhbSA9IGNvbnZlcnQ8SURMTG9uZz4o
KmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwuZW5hYmxl
ZEF0UnVudGltZU9wZXJhdGlvbihXVEZNb3ZlKHRlc3RQYXJhbSkpOwotCi0gICAgLy8gTWFrZSBz
dXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgot
ICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC01NjcxLDE0ICs1NjU1LDEwIEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0
aW9uRW5hYmxlZEF0UnVudGltZU9wCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRv
IGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0byB0
ZXN0UGFyYW0gPSBjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVu
dDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxJRExMb25n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgVGVzdE9iajo6
ZW5hYmxlZEF0UnVudGltZU9wZXJhdGlvblN0YXRpYyhXVEZNb3ZlKHRlc3RQYXJhbSkpOwotCi0g
ICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRo
aXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC01Njk3LDE0ICs1
Njc3LDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkVuYWJsZWRJblNwZWNpZmljV29yCiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0KSk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApOwotICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxJRExMb25nPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJn
dW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIHRlc3RQ
YXJhbSA9IGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52
YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwogICAgIGltcGwuZW5hYmxlZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50aW1lRmVhdHVy
ZUVuYWJsZWQoV1RGTW92ZSh0ZXN0UGFyYW0pKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVu
dHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVT
dGlsbEFsaXZlSGVyZShhcmd1bWVudDApOwotCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNTcyMSwxNCArNTY5NywxMCBAQCBzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Xb3JsZFNwZWNp
ZmljTWV0aG9kQgogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
aWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8g
YXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIHRl
c3RQYXJhbSA9IGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50
MCk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byB0ZXN0UGFyYW0gPSBjb252ZXJ0PElETExvbmc+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLndvcmxk
U3BlY2lmaWNNZXRob2QoV1RGTW92ZSh0ZXN0UGFyYW0pKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBh
cmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBl
bnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOwotCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNTgwOCwyMiArNTc4MCwxNiBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lk
TWV0aG9kV2l0aEFyZ3NCbwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAg
IGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBh
dXRvIGxvbmdBcmcgPSBjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1
bWVudDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gbG9uZ0FyZyA9IGNvbnZlcnQ8SURMTG9u
Zz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gYXJn
dW1lbnQxID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKLSAgICBhdXRvIHN0ckFy
ZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQx
KTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQxID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgxKTsKKyAgICBhdXRvIHN0ckFyZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQxLnZhbHVlKCkpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBhcmd1
bWVudDIgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpOwotICAgIGF1dG8gb2JqQXJn
ID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBh
cmd1bWVudDIsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCBzY29wZSwgMiwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgInZvaWRNZXRob2RX
aXRoQXJncyIsICJUZXN0T2JqIik7IH0pOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1
bWVudDIgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpOworICAgIGF1dG8gb2JqQXJn
ID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBh
cmd1bWVudDIudmFsdWUoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAyLCAib2JqQXJnIiwgIlRlc3RPYmplY3QiLCAidm9p
ZE1ldGhvZFdpdGhBcmdzIiwgIlRlc3RPYmoiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLnZvaWRNZXRob2RXaXRo
QXJncyhXVEZNb3ZlKGxvbmdBcmcpLCBXVEZNb3ZlKHN0ckFyZyksICpvYmpBcmcpOwotCi0gICAg
Ly8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMg
bWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0gICAgZW5zdXJl
U3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQxKTsKLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1
bWVudDIpOwotCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0K
IApAQCAtNTg1NSwyMiArNTgyMSwxNiBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25CeXRlTWV0aG9kV2l0aEFyZ3NCbwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIGJ5dGVBcmcgPSBjb252ZXJ0PElE
TEJ5dGU+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0aWxs
QWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwor
ICAgIGF1dG8gYnl0ZUFyZyA9IGNvbnZlcnQ8SURMQnl0ZT4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGFyZ3VtZW50MC52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gYXJndW1lbnQxID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgxKTsKLSAgICBhdXRvIHN0ckFyZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQxKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZl
U2NvcGUgYXJndW1lbnQxID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKKyAgICBh
dXRvIHN0ckFyZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
YXJndW1lbnQxLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBhcmd1bWVudDIgPSBjYWxsRnJhbWUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDIpOwotICAgIGF1dG8gb2JqQXJnID0gY29udmVydDxJRExJbnRlcmZhY2U8
VGVzdE9iaj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDIsIFtdKEpTQzo6SlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsg
dGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMiwgIm9i
akFyZyIsICJUZXN0T2JqZWN0IiwgImJ5dGVNZXRob2RXaXRoQXJncyIsICJUZXN0T2JqIik7IH0p
OworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDIgPSBjYWxsRnJhbWUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDIpOworICAgIGF1dG8gb2JqQXJnID0gY29udmVydDxJRExJbnRlcmZhY2U8
VGVzdE9iaj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDIudmFsdWUoKSwgW10oSlND
OjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBz
Y29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3Bl
LCAyLCAib2JqQXJnIiwgIlRlc3RPYmplY3QiLCAiYnl0ZU1ldGhvZFdpdGhBcmdzIiwgIlRlc3RP
YmoiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKICAgICBhdXRvIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEJ5dGU+
KGltcGwuYnl0ZU1ldGhvZFdpdGhBcmdzKFdURk1vdmUoYnl0ZUFyZyksIFdURk1vdmUoc3RyQXJn
KSwgKm9iakFyZykpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1
bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShh
cmd1bWVudDApOwotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MSk7Ci0gICAgZW5z
dXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQyKTsKLQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
QEAgLTU5MDIsMjIgKzU4NjIsMTYgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2N0ZXRNZXRob2RXaXRoQXJnc0IKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFt
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0byBvY3RldEFyZyA9IGNvbnZlcnQ8SURM
T2N0ZXQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0aWxs
QWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwor
ICAgIGF1dG8gb2N0ZXRBcmcgPSBjb252ZXJ0PElETE9jdGV0PigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBhcmd1bWVudDEgPSBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDEpOwotICAgIGF1dG8gc3RyQXJnID0gY29udmVydDxJRExET01TdHJp
bmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDEpOworICAgIEVuc3VyZVN0aWxsQWxp
dmVTY29wZSBhcmd1bWVudDEgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOworICAg
IGF1dG8gc3RyQXJnID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBhcmd1bWVudDEudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIGFyZ3VtZW50MiA9IGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoMik7Ci0gICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElETEludGVyZmFj
ZTxUZXN0T2JqPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MiwgW10oSlNDOjpKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkg
eyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAyLCAi
b2JqQXJnIiwgIlRlc3RPYmplY3QiLCAib2N0ZXRNZXRob2RXaXRoQXJncyIsICJUZXN0T2JqIik7
IH0pOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDIgPSBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDIpOworICAgIGF1dG8gb2JqQXJnID0gY29udmVydDxJRExJbnRlcmZh
Y2U8VGVzdE9iaj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDIudmFsdWUoKSwgW10o
SlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3Bl
JiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNj
b3BlLCAyLCAib2JqQXJnIiwgIlRlc3RPYmplY3QiLCAib2N0ZXRNZXRob2RXaXRoQXJncyIsICJU
ZXN0T2JqIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAgICAgYXV0byByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExP
Y3RldD4oaW1wbC5vY3RldE1ldGhvZFdpdGhBcmdzKFdURk1vdmUob2N0ZXRBcmcpLCBXVEZNb3Zl
KHN0ckFyZyksICpvYmpBcmcpKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkg
YWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2
ZUhlcmUoYXJndW1lbnQwKTsKLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDEpOwot
ICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50Mik7Ci0KICAgICByZXR1cm4gcmVzdWx0
OwogfQogCkBAIC01OTQ5LDIyICs1OTAzLDE2IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkxvbmdNZXRob2RXaXRoQXJnc0JvCiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFko
Y2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8gbG9uZ0FyZyA9IGNvbnZl
cnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CisgICAgRW5zdXJl
U3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQo
MCk7CisgICAgYXV0byBsb25nQXJnID0gY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBhcmd1bWVudDEgPSBjYWxsRnJhbWUt
PnVuY2hlY2tlZEFyZ3VtZW50KDEpOwotICAgIGF1dG8gc3RyQXJnID0gY29udmVydDxJRExET01T
dHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDEpOworICAgIEVuc3VyZVN0aWxs
QWxpdmVTY29wZSBhcmd1bWVudDEgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOwor
ICAgIGF1dG8gc3RyQXJnID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudDEudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIGFyZ3VtZW50MiA9IGNhbGxGcmFtZS0+
dW5jaGVja2VkQXJndW1lbnQoMik7Ci0gICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElETEludGVy
ZmFjZTxUZXN0T2JqPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MiwgW10oSlNDOjpK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAy
LCAib2JqQXJnIiwgIlRlc3RPYmplY3QiLCAibG9uZ01ldGhvZFdpdGhBcmdzIiwgIlRlc3RPYmoi
KTsgfSk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MiA9IGNhbGxGcmFtZS0+
dW5jaGVja2VkQXJndW1lbnQoMik7CisgICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElETEludGVy
ZmFjZTxUZXN0T2JqPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50Mi52YWx1ZSgpLCBb
XShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwg
c2NvcGUsIDIsICJvYmpBcmciLCAiVGVzdE9iamVjdCIsICJsb25nTWV0aG9kV2l0aEFyZ3MiLCAi
VGVzdE9iaiIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwogICAgIGF1dG8gcmVzdWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURM
TG9uZz4oaW1wbC5sb25nTWV0aG9kV2l0aEFyZ3MoV1RGTW92ZShsb25nQXJnKSwgV1RGTW92ZShz
dHJBcmcpLCAqb2JqQXJnKSkpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFs
aXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxpdmVI
ZXJlKGFyZ3VtZW50MCk7Ci0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQxKTsKLSAg
ICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDIpOwotCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIApAQCAtNTk5NiwyMiArNTk0NCwxNiBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PYmpNZXRob2RXaXRoQXJnc0JvZAogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIGxvbmdBcmcgPSBjb252ZXJ0
PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0
aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
OworICAgIGF1dG8gbG9uZ0FyZyA9IGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gYXJndW1lbnQxID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgxKTsKLSAgICBhdXRvIHN0ckFyZyA9IGNvbnZlcnQ8SURMRE9NU3Ry
aW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQxKTsKKyAgICBFbnN1cmVTdGlsbEFs
aXZlU2NvcGUgYXJndW1lbnQxID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKKyAg
ICBhdXRvIHN0ckFyZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgYXJndW1lbnQxLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBhcmd1bWVudDIgPSBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDIpOwotICAgIGF1dG8gb2JqQXJnID0gY29udmVydDxJRExJbnRlcmZh
Y2U8VGVzdE9iaj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDIsIFtdKEpTQzo6SlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUp
IHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMiwg
Im9iakFyZyIsICJUZXN0T2JqZWN0IiwgIm9iak1ldGhvZFdpdGhBcmdzIiwgIlRlc3RPYmoiKTsg
fSk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MiA9IGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoMik7CisgICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElETEludGVyZmFj
ZTxUZXN0T2JqPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50Mi52YWx1ZSgpLCBbXShK
U0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2Nv
cGUsIDIsICJvYmpBcmciLCAiVGVzdE9iamVjdCIsICJvYmpNZXRob2RXaXRoQXJncyIsICJUZXN0
T2JqIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAgICAgYXV0byByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJbnRl
cmZhY2U8VGVzdE9iaj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFs
T2JqZWN0KCksIGltcGwub2JqTWV0aG9kV2l0aEFyZ3MoV1RGTW92ZShsb25nQXJnKSwgV1RGTW92
ZShzdHJBcmcpLCAqb2JqQXJnKSkpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5
IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxp
dmVIZXJlKGFyZ3VtZW50MCk7Ci0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQxKTsK
LSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDIpOwotCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIApAQCAtNjA0MywxNCArNTk4NSwxMCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQXJnVHJlYXRpbgog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZ
KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gYXJndW1lbnQwID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIGFyZyA9IGNvbnZlcnQ8
SURMVHJlYXROdWxsQXNFbXB0eUFkYXB0b3I8SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIGFyZ3VtZW50MCk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9
IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBhcmcgPSBjb252ZXJ0
PElETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9yPElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhBcmdUcmVhdGlu
Z051bGxBc0VtcHR5U3RyaW5nKFdURk1vdmUoYXJnKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJn
dW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5z
dXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTYwNjcsMTQgKzYwMDUsMTAgQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aFhQYXRoTlNSZXMKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBh
dXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0
byByZXNvbHZlciA9IGNvbnZlcnQ8SURMWFBhdGhOU1Jlc29sdmVyPFhQYXRoTlNSZXNvbHZlcj4+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1
bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgInJlc29sdmVyIiwg
IlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aFhQYXRoTlNSZXNvbHZlclBhcmFtZXRlciIsICJYUGF0
aE5TUmVzb2x2ZXIiKTsgfSk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9
IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byByZXNvbHZlciA9IGNv
bnZlcnQ8SURMWFBhdGhOU1Jlc29sdmVyPFhQYXRoTlNSZXNvbHZlcj4+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlw
ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAicmVzb2x2ZXIiLCAiVGVzdE9i
amVjdCIsICJtZXRob2RXaXRoWFBhdGhOU1Jlc29sdmVyUGFyYW1ldGVyIiwgIlhQYXRoTlNSZXNv
bHZlciIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0aFhQYXRoTlNSZXNvbHZlclBhcmFtZXRlcigq
cmVzb2x2ZXIpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGls
IHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3Vt
ZW50MCk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQog
CkBAIC02MTIwLDE0ICs2MDU0LDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU3RyaW5nU3BlY2lhCiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZy
YW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJh
bWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8gaW5kZXggPSBjb252ZXJ0PElETFVu
c2lnbmVkTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CisgICAgRW5zdXJl
U3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQo
MCk7CisgICAgYXV0byBpbmRleCA9IGNvbnZlcnQ8SURMVW5zaWduZWRMb25nPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgYXV0byByZXN1bHQgPSBKU1ZhbHVl
OjplbmNvZGUodG9KUzxJRExOdWxsYWJsZTxJRExET01TdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgaW1wbC5udWxsYWJsZVN0cmluZ1NwZWNpYWxNZXRob2QoV1RGTW92ZShpbmRleCkpKSk7
Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQg
b2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKLQog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTYxNDQsMTQgKzYwNzQsMTAgQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aEVudW1BcmdCb2QKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBh
dXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0
byBlbnVtQXJnID0gY29udmVydDxJRExFbnVtZXJhdGlvbjxUZXN0T2JqOjpFbnVtVHlwZT4+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVu
dE11c3RCZUVudW1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgImVudW1Bcmci
LCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoRW51bUFyZyIsIGV4cGVjdGVkRW51bWVyYXRpb25W
YWx1ZXM8VGVzdE9iajo6RW51bVR5cGU+KCkpOyB9KTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2Nv
cGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRv
IGVudW1BcmcgPSBjb252ZXJ0PElETEVudW1lcmF0aW9uPFRlc3RPYmo6OkVudW1UeXBlPj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpLCBbXShKU0M6OkpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93
QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJl
bnVtQXJnIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aEVudW1BcmciLCBleHBlY3RlZEVudW1l
cmF0aW9uVmFsdWVzPFRlc3RPYmo6OkVudW1UeXBlPigpKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdp
dGhFbnVtQXJnKFdURk1vdmUoZW51bUFyZykpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50
cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0
aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogfQogCkBAIC02MTY4LDE0ICs2MDk0LDEwIEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhT
dGFuZGFsb25lCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBp
ZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byBh
cmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8gZW51
bUFyZyA9IGNvbnZlcnQ8SURMRW51bWVyYXRpb248VGVzdFN0YW5kYWxvbmVFbnVtZXJhdGlvbj4+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1
bWVudE11c3RCZUVudW1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgImVudW1B
cmciLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoU3RhbmRhbG9uZUVudW1BcmciLCBleHBlY3Rl
ZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RTdGFuZGFsb25lRW51bWVyYXRpb24+KCkpOyB9KTsKKyAg
ICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudCgwKTsKKyAgICBhdXRvIGVudW1BcmcgPSBjb252ZXJ0PElETEVudW1lcmF0aW9uPFRl
c3RTdGFuZGFsb25lRW51bWVyYXRpb24+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQw
LnZhbHVlKCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudE11c3RCZUVudW1FcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgImVudW1BcmciLCAiVGVzdE9iamVjdCIsICJtZXRo
b2RXaXRoU3RhbmRhbG9uZUVudW1BcmciLCBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RT
dGFuZGFsb25lRW51bWVyYXRpb24+KCkpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0aFN0YW5kYWxv
bmVFbnVtQXJnKFdURk1vdmUoZW51bUFyZykpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50
cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0
aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogfQogCkBAIC02MTkwLDE0ICs2MTEyLDEwIEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhP
cHRpb25hbEVuCiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0g
ICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwotICAgIGF1dG8gZW51
bUFyZyA9IGFyZ3VtZW50MC5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8Q29udmVydGVyPElETEVu
dW1lcmF0aW9uPFRlc3RPYmo6OkVudW1UeXBlPj46OlJldHVyblR5cGU+KCkgOiBPcHRpb25hbDxD
b252ZXJ0ZXI8SURMRW51bWVyYXRpb248VGVzdE9iajo6RW51bVR5cGU+Pjo6UmV0dXJuVHlwZT4o
Y29udmVydDxJRExFbnVtZXJhdGlvbjxUZXN0T2JqOjpFbnVtVHlwZT4+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBhcmd1bWVudDAsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudE11c3RCZUVudW1F
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgImVudW1BcmciLCAiVGVzdE9iamVj
dCIsICJtZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJnIiwgZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVl
czxUZXN0T2JqOjpFbnVtVHlwZT4oKSk7IH0pKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUg
YXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKKyAgICBhdXRvIGVudW1BcmcgPSBh
cmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8Q29udmVydGVyPElETEVu
dW1lcmF0aW9uPFRlc3RPYmo6OkVudW1UeXBlPj46OlJldHVyblR5cGU+KCkgOiBPcHRpb25hbDxD
b252ZXJ0ZXI8SURMRW51bWVyYXRpb248VGVzdE9iajo6RW51bVR5cGU+Pjo6UmV0dXJuVHlwZT4o
Y29udmVydDxJRExFbnVtZXJhdGlvbjxUZXN0T2JqOjpFbnVtVHlwZT4+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVz
dEJlRW51bUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiZW51bUFyZyIsICJU
ZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmciLCBleHBlY3RlZEVudW1lcmF0
aW9uVmFsdWVzPFRlc3RPYmo6OkVudW1UeXBlPigpKTsgfSkpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRo
T3B0aW9uYWxFbnVtQXJnKFdURk1vdmUoZW51bUFyZykpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFy
Z3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVu
c3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC02MjEyLDE0ICs2MTMwLDEwIEBAIHN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhPcHRpb25hbEVuCiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwotICAgIGF1
dG8gZW51bUFyZyA9IGFyZ3VtZW50MC5pc1VuZGVmaW5lZCgpID8gVGVzdE9iajo6RW51bVR5cGU6
OkVudW1WYWx1ZTEgOiBjb252ZXJ0PElETEVudW1lcmF0aW9uPFRlc3RPYmo6OkVudW1UeXBlPj4o
KmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3Vt
ZW50TXVzdEJlRW51bUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiZW51bUFy
ZyIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmdBbmREZWZhdWx0VmFs
dWUiLCBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6OkVudW1UeXBlPigpKTsgfSk7
CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1l
bnQoMCk7CisgICAgYXV0byBlbnVtQXJnID0gYXJndW1lbnQwLnZhbHVlKCkuaXNVbmRlZmluZWQo
KSA/IFRlc3RPYmo6OkVudW1UeXBlOjpFbnVtVmFsdWUxIDogY29udmVydDxJRExFbnVtZXJhdGlv
bjxUZXN0T2JqOjpFbnVtVHlwZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFs
dWUoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiZW51bUFyZyIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdp
dGhPcHRpb25hbEVudW1BcmdBbmREZWZhdWx0VmFsdWUiLCBleHBlY3RlZEVudW1lcmF0aW9uVmFs
dWVzPFRlc3RPYmo6OkVudW1UeXBlPigpKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25h
bEVudW1BcmdBbmREZWZhdWx0VmFsdWUoV1RGTW92ZShlbnVtQXJnKSk7Ci0KLSAgICAvLyBNYWtl
IHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2Qu
Ci0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTYyMzYsMTggKzYxNTAsMTMgQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWwKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDIp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3Qp
KTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7
Ci0gICAgYXV0byBzdHJBcmcgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxP
YmplY3QsIGFyZ3VtZW50MCk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9
IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBzdHJBcmcgPSBjb252
ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgp
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwotICAgIGF1dG8gYXJndW1lbnQxID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsK
LSAgICBhdXRvIG9iakFyZyA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgYXJndW1lbnQxLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBl
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDEsICJvYmpBcmciLCAiVGVzdE9iamVj
dCIsICJtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzIiwgIlRlc3RPYmoiKTsgfSk7
CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MSA9IGNhbGxGcmFtZS0+dW5jaGVj
a2VkQXJndW1lbnQoMSk7CisgICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElETEludGVyZmFjZTxU
ZXN0T2JqPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MS52YWx1ZSgpLCBbXShKU0M6
OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUs
IDEsICJvYmpBcmciLCAiVGVzdE9iamVjdCIsICJtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5k
VGhyb3dzIiwgIlRlc3RPYmoiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBhdXRvIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29k
ZSh0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5tZXRob2RUaGF0UmVxdWly
ZXNBbGxBcmdzQW5kVGhyb3dzKFdURk1vdmUoc3RyQXJnKSwgKm9iakFyZykpKTsKLQotICAgIC8v
IE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1l
dGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOwotICAgIGVuc3VyZVN0
aWxsQWxpdmVIZXJlKGFyZ3VtZW50MSk7Ci0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC02
MjY0LDE0ICs2MTczLDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJpbmdBCiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8gc3RyID0gY29udmVydDxJRExVU1ZTdHJpbmc+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVT
Y29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1
dG8gc3RyID0gY29udmVydDxJRExVU1ZTdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1
bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhVU1ZTdHJpbmdBcmcoV1RGTW92ZShz
dHIpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlz
IGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDAp
OwotCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAt
NjI4OCwxNCArNjE5MywxMCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTnVsbGFibGVVUwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIHN0ciA9IGNvbnZlcnQ8SURMTnVsbGFibGU8
SURMVVNWU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CisgICAgRW5z
dXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1l
bnQoMCk7CisgICAgYXV0byBzdHIgPSBjb252ZXJ0PElETE51bGxhYmxlPElETFVTVlN0cmluZz4+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhv
ZFdpdGhOdWxsYWJsZVVTVlN0cmluZ0FyZyhXVEZNb3ZlKHN0cikpOwotCi0gICAgLy8gTWFrZSBz
dXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgot
ICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC02MzEyLDE0ICs2MjEzLDEwIEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhVU1ZTdHJpbmdBCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7
Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwot
ICAgIGF1dG8gc3RyID0gY29udmVydDxJRExUcmVhdE51bGxBc0VtcHR5QWRhcHRvcjxJRExVU1ZT
dHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAgICBFbnN1cmVTdGls
bEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsK
KyAgICBhdXRvIHN0ciA9IGNvbnZlcnQ8SURMVHJlYXROdWxsQXNFbXB0eUFkYXB0b3I8SURMVVNW
U3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGlt
cGwubWV0aG9kV2l0aFVTVlN0cmluZ0FyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoV1RGTW92
ZShzdHIpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0
aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVu
dDApOwotCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApA
QCAtNjMzNiwxNCArNjIzMywxMCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQnl0ZVN0cmluZwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIHN0ciA9IGNvbnZlcnQ8SURMQnl0ZVN0
cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CisgICAgRW5zdXJlU3RpbGxB
bGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Cisg
ICAgYXV0byBzdHIgPSBjb252ZXJ0PElETEJ5dGVTdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhCeXRlU3RyaW5nQXJnKFdU
Rk1vdmUoc3RyKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50
aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJn
dW1lbnQwKTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9
CiAKQEAgLTYzNjAsMTQgKzYyNTMsMTAgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE51bGxhYmxlQnkKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxG
cmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0byBzdHIgPSBjb252ZXJ0PElETE51
bGxhYmxlPElETEJ5dGVTdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsK
KyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNr
ZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIHN0ciA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMQnl0
ZVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBp
bXBsLm1ldGhvZFdpdGhOdWxsYWJsZUJ5dGVTdHJpbmdBcmcoV1RGTW92ZShzdHIpKTsKLQotICAg
IC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlz
IG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOwotCiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNjM4NCwxNCArNjI3
MywxMCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoQnl0ZVN0cmluZwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCkpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1
bWVudCgwKTsKLSAgICBhdXRvIHN0ciA9IGNvbnZlcnQ8SURMVHJlYXROdWxsQXNFbXB0eUFkYXB0
b3I8SURMQnl0ZVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOworICAg
IEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApOworICAgIGF1dG8gc3RyID0gY29udmVydDxJRExUcmVhdE51bGxBc0VtcHR5QWRh
cHRvcjxJRExCeXRlU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1
ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogICAgIGltcGwubWV0aG9kV2l0aEJ5dGVTdHJpbmdBcmdUcmVhdGluZ051bGxBc0VtcHR5
U3RyaW5nKFdURk1vdmUoc3RyKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkg
YWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2
ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiB9CiAKQEAgLTY0MDgsMTQgKzYyOTMsMTAgQEAgc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlQm9k
eSgKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJ
S0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIGFyZ3VtZW50
MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0byBzZXJpYWxpemVk
QXJnID0gY29udmVydDxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CisgICAgRW5zdXJlU3RpbGxB
bGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Cisg
ICAgYXV0byBzZXJpYWxpemVkQXJnID0gY29udmVydDxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52
YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwogICAgIGltcGwuc2VyaWFsaXplZFZhbHVlKFdURk1vdmUoc2VyaWFsaXplZEFyZykp
OwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5k
IG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0K
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC02NDMy
LDE0ICs2MzEzLDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhSZWNvcmRCb2R5CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8gcmVjb3JkUGFyYW1ldGVyID0gY29udmVydDxJRExS
ZWNvcmQ8SURMRE9NU3RyaW5nLCBJRExMb25nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3Vt
ZW50MCk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+
dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byByZWNvcmRQYXJhbWV0ZXIgPSBjb252ZXJ0
PElETFJlY29yZDxJRExET01TdHJpbmcsIElETExvbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
YXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoUmVjb3JkKFdURk1vdmUocmVj
b3JkUGFyYW1ldGVyKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUg
dW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUo
YXJndW1lbnQwKTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiB9CiAKQEAgLTY1MjcsMTQgKzY0MDQsMTAgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUHJpdmF0ZU1ldGhvZEJvZHkoSlMKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShj
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0byBhcmd1bWVudCA9IGNvbnZl
cnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAgICBF
bnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1
bWVudCgwKTsKKyAgICBhdXRvIGFyZ3VtZW50ID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBhdXRvIHJlc3VsdCA9IEpT
VmFsdWU6OmVuY29kZSh0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGlt
cGwucHJpdmF0ZU1ldGhvZChXVEZNb3ZlKGFyZ3VtZW50KSkpKTsKLQotICAgIC8vIE1ha2Ugc3Vy
ZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAg
ICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOwotCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIApAQCAtNjU1MSwxNCArNjQyNCwxMCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25QdWJsaWNBbmRQcml2YXRlTWV0aAogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIGFyZ3VtZW50ID0gY29udmVy
dDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOworICAgIEVu
c3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApOworICAgIGF1dG8gYXJndW1lbnQgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGF1dG8gcmVzdWx0ID0gSlNW
YWx1ZTo6ZW5jb2RlKHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgaW1w
bC5wdWJsaWNBbmRQcml2YXRlTWV0aG9kKFdURk1vdmUoYXJndW1lbnQpKSkpOwotCi0gICAgLy8g
TWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0
aG9kLgotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAgICByZXR1cm4g
cmVzdWx0OwogfQogCkBAIC02NTc1LDI0ICs2NDQ0LDE4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkFkZEV2ZW50TGlzdGVuZXJC
b2R5CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5M
SUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byBhcmd1bWVu
dDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8gdHlwZSA9IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAg
ICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudCgwKTsKKyAgICBhdXRvIHR5cGUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gYXJndW1lbnQxID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKLSAgICBhdXRvIGxpc3RlbmVyID0gY29u
dmVydDxJRExFdmVudExpc3RlbmVyPEpTRXZlbnRMaXN0ZW5lcj4+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudDEsICpjYXN0ZWRUaGlzKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUg
YXJndW1lbnQxID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKKyAgICBhdXRvIGxp
c3RlbmVyID0gY29udmVydDxJRExFdmVudExpc3RlbmVyPEpTRXZlbnRMaXN0ZW5lcj4+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDEudmFsdWUoKSwgKmNhc3RlZFRoaXMpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0
byBhcmd1bWVudDIgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDIpOwotICAgIGF1dG8gdXNlQ2FwdHVy
ZSA9IGNvbnZlcnQ8SURMQm9vbGVhbj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50Mik7
CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MiA9IGNhbGxGcmFtZS0+YXJndW1l
bnQoMik7CisgICAgYXV0byB1c2VDYXB0dXJlID0gY29udmVydDxJRExCb29sZWFuPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgYXJndW1lbnQyLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5hZGRFdmVudExpc3Rl
bmVyKFdURk1vdmUodHlwZSksIFdURk1vdmUobGlzdGVuZXIpLCBXVEZNb3ZlKHVzZUNhcHR1cmUp
KTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVu
ZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOwog
ICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgdm0uaGVh
cC53cml0ZUJhcnJpZXIoJnN0YXRpY19jYXN0PEpTT2JqZWN0Jj4oKmNhc3RlZFRoaXMpLCBhcmd1
bWVudDEpOwotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MSk7Ci0gICAgZW5zdXJl
U3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQyKTsKLQorICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKCZz
dGF0aWNfY2FzdDxKU09iamVjdCY+KCpjYXN0ZWRUaGlzKSwgYXJndW1lbnQxLnZhbHVlKCkpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTY2MDks
MjQgKzY0NzIsMTggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uUmVtb3ZlRXZlbnRMaXN0ZW5lckIKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0byB0eXBlID0gY29udmVydDxJRExET01TdHJpbmc+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29w
ZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8g
dHlwZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1l
bnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBhcmd1bWVudDEgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFy
Z3VtZW50KDEpOwotICAgIGF1dG8gbGlzdGVuZXIgPSBjb252ZXJ0PElETEV2ZW50TGlzdGVuZXI8
SlNFdmVudExpc3RlbmVyPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MSwgKmNhc3Rl
ZFRoaXMpOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDEgPSBjYWxsRnJhbWUt
PnVuY2hlY2tlZEFyZ3VtZW50KDEpOworICAgIGF1dG8gbGlzdGVuZXIgPSBjb252ZXJ0PElETEV2
ZW50TGlzdGVuZXI8SlNFdmVudExpc3RlbmVyPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3Vt
ZW50MS52YWx1ZSgpLCAqY2FzdGVkVGhpcyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIGFyZ3VtZW50MiA9IGNhbGxGcmFt
ZS0+YXJndW1lbnQoMik7Ci0gICAgYXV0byB1c2VDYXB0dXJlID0gY29udmVydDxJRExCb29sZWFu
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQyKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZl
U2NvcGUgYXJndW1lbnQyID0gY2FsbEZyYW1lLT5hcmd1bWVudCgyKTsKKyAgICBhdXRvIHVzZUNh
cHR1cmUgPSBjb252ZXJ0PElETEJvb2xlYW4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVu
dDIudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKICAgICBpbXBsLnJlbW92ZUV2ZW50TGlzdGVuZXIoV1RGTW92ZSh0eXBlKSwg
V1RGTW92ZShsaXN0ZW5lciksIFdURk1vdmUodXNlQ2FwdHVyZSkpOwotCi0gICAgLy8gTWFrZSBz
dXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgot
ICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7CiAgICAgVk0mIHZtID0gSlNDOjpn
ZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICB2bS5oZWFwLndyaXRlQmFycmllcigmc3Rh
dGljX2Nhc3Q8SlNPYmplY3QmPigqY2FzdGVkVGhpcyksIGFyZ3VtZW50MSk7Ci0gICAgZW5zdXJl
U3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQxKTsKLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1
bWVudDIpOwotCisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoJnN0YXRpY19jYXN0PEpTT2JqZWN0
Jj4oKmNhc3RlZFRoaXMpLCBhcmd1bWVudDEudmFsdWUoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNjgyNiwxNCArNjY4MywxMCBAQCBzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxBcgogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKLSAg
ICBhdXRvIG9wdCA9IGFyZ3VtZW50MC5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8Q29udmVydGVy
PElETExvbmc+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8Q29udmVydGVyPElETExvbmc+OjpS
ZXR1cm5UeXBlPihjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVu
dDApKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5h
cmd1bWVudCgwKTsKKyAgICBhdXRvIG9wdCA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVk
KCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU+KCkgOiBPcHRpb25h
bDxDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU+KGNvbnZlcnQ8SURMTG9uZz4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhP
cHRpb25hbEFyZyhXVEZNb3ZlKG9wdCkpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBz
dGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxs
QWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogfQogCkBAIC02ODQ4LDE0ICs2NzAxLDEwIEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRp
b25hbEFyCiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAg
YXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwotICAgIGF1dG8gb3B0ID0g
YXJndW1lbnQwLmlzVW5kZWZpbmVkKCkgPyA2NjYgOiBjb252ZXJ0PElETExvbmc+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1
bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOworICAgIGF1dG8gb3B0ID0gYXJndW1lbnQw
LnZhbHVlKCkuaXNVbmRlZmluZWQoKSA/IDY2NiA6IGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlv
bmFsQXJnQW5kRGVmYXVsdFZhbHVlKFdURk1vdmUob3B0KSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUg
YXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAg
ZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTY4NzIsMTggKzY3MjEsMTMgQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE5vbk9wdGlvbmEKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAg
ICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAg
YXV0byBub25PcHQgPSBjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1
bWVudDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gbm9uT3B0ID0gY29udmVydDxJRExMb25n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBhcmd1
bWVudDEgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpOwotICAgIGF1dG8gb3B0ID0gYXJndW1lbnQx
LmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU+
KCkgOiBPcHRpb25hbDxDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU+KGNvbnZlcnQ8SURM
TG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MSkpOworICAgIEVuc3VyZVN0aWxs
QWxpdmVTY29wZSBhcmd1bWVudDEgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpOworICAgIGF1dG8g
b3B0ID0gYXJndW1lbnQxLnZhbHVlKCkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRl
cjxJRExMb25nPjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6
UmV0dXJuVHlwZT4oY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1l
bnQxLnZhbHVlKCkpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9u
YWxBcmcoV1RGTW92ZShub25PcHQpLCBXVEZNb3ZlKG9wdCkpOwotCi0gICAgLy8gTWFrZSBzdXJl
IGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAg
IGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0gICAgZW5zdXJlU3RpbGxBbGl2ZUhl
cmUoYXJndW1lbnQxKTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiB9CiAKQEAgLTY5MDAsMjIgKzY3NDQsMTYgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmEK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VM
WShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9
IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0byBub25PcHQgPSBjb252
ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOworICAgIEVuc3Vy
ZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApOworICAgIGF1dG8gbm9uT3B0ID0gY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBhcmd1bWVudDEgPSBjYWxsRnJhbWUt
PmFyZ3VtZW50KDEpOwotICAgIGF1dG8gb3B0MSA9IGFyZ3VtZW50MS5pc1VuZGVmaW5lZCgpID8g
T3B0aW9uYWw8Q29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8Q29u
dmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBhcmd1bWVudDEpKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1l
bnQxID0gY2FsbEZyYW1lLT5hcmd1bWVudCgxKTsKKyAgICBhdXRvIG9wdDEgPSBhcmd1bWVudDEu
dmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8Q29udmVydGVyPElETExvbmc+OjpSZXR1
cm5UeXBlPigpIDogT3B0aW9uYWw8Q29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlPihjb252
ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDEudmFsdWUoKSkpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0g
ICAgYXV0byBhcmd1bWVudDIgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDIpOwotICAgIGF1dG8gb3B0
MiA9IGFyZ3VtZW50Mi5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8Q29udmVydGVyPElETExvbmc+
OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8Q29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBl
Pihjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDIpKTsKKyAg
ICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQyID0gY2FsbEZyYW1lLT5hcmd1bWVudCgy
KTsKKyAgICBhdXRvIG9wdDIgPSBhcmd1bWVudDIudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gT3B0
aW9uYWw8Q29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8Q29udmVy
dGVyPElETExvbmc+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBhcmd1bWVudDIudmFsdWUoKSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoTm9uT3B0aW9u
YWxBcmdBbmRUd29PcHRpb25hbEFyZ3MoV1RGTW92ZShub25PcHQpLCBXVEZNb3ZlKG9wdDEpLCBX
VEZNb3ZlKG9wdDIpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1
bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShh
cmd1bWVudDApOwotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MSk7Ci0gICAgZW5z
dXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQyKTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTY5MzAsMTQgKzY3NjgsMTAgQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE9wdGlvbmFsU3QKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7Ci0gICAgYXV0
byBzdHIgPSBhcmd1bWVudDAuaXNVbmRlZmluZWQoKSA/IFN0cmluZygpIDogY29udmVydDxJRExE
T01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0
aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOworICAgIGF1
dG8gc3RyID0gYXJndW1lbnQwLnZhbHVlKCkuaXNVbmRlZmluZWQoKSA/IFN0cmluZygpIDogY29u
dmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUo
KSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZyhXVEZNb3ZlKHN0cikpOwotCi0g
ICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRo
aXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC02OTUyLDE0ICs2
Nzg2LDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVTCiAgICAgVU5VU0VEX1BBUkFNKGNhbGxG
cmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFy
Z3VtZW50KDApOwotICAgIGF1dG8gc3RyID0gYXJndW1lbnQwLmlzVW5kZWZpbmVkKCkgPyBTdHJp
bmcoKSA6IGNvbnZlcnQ8SURMVVNWU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1l
bnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5h
cmd1bWVudCgwKTsKKyAgICBhdXRvIHN0ciA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVk
KCkgPyBTdHJpbmcoKSA6IGNvbnZlcnQ8SURMVVNWU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxVU1ZTdHJp
bmcoV1RGTW92ZShzdHIpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2
ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVy
ZShhcmd1bWVudDApOwotCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIH0KIApAQCAtNjk3NCwxNCArNjgwNCwxMCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdAog
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gYXJn
dW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKLSAgICBhdXRvIHN0ciA9IGFyZ3VtZW50
MC5pc1VuZGVmaW5lZCgpID8gbnVsbEF0b20oKSA6IGNvbnZlcnQ8SURMQXRvbVN0cmluZ0FkYXB0
b3I8SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CisgICAg
RW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7
CisgICAgYXV0byBzdHIgPSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gbnVsbEF0
b20oKSA6IGNvbnZlcnQ8SURMQXRvbVN0cmluZ0FkYXB0b3I8SURMRE9NU3RyaW5nPj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9w
dGlvbmFsQXRvbVN0cmluZyhXVEZNb3ZlKHN0cikpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3Vt
ZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3Vy
ZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC02OTk2LDE0ICs2ODIyLDEwIEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbFN0CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwotICAgIGF1dG8g
c3RyID0gYXJndW1lbnQwLmlzVW5kZWZpbmVkKCkgPyAiZm9vIl9zIDogY29udmVydDxJRExET01T
dHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0aWxs
QWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOworICAgIGF1dG8g
c3RyID0gYXJndW1lbnQwLnZhbHVlKCkuaXNVbmRlZmluZWQoKSA/ICJmb28iX3MgOiBjb252ZXJ0
PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwog
ICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nQW5kRGVmYXVsdFZhbHVlKFdURk1vdmUo
c3RyKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhp
cyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQw
KTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAg
LTcwMTgsMTQgKzY4NDAsMTAgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXQKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNh
bGxGcmFtZS0+YXJndW1lbnQoMCk7Ci0gICAgYXV0byBzdHIgPSBhcmd1bWVudDAuaXNVbmRlZmlu
ZWQoKSA/IEF0b21TdHJpbmcoImZvbyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KSA6IGNvbnZlcnQ8SURMQXRvbVN0cmluZ0FkYXB0b3I8SURMRE9NU3RyaW5nPj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3Vt
ZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CisgICAgYXV0byBzdHIgPSBhcmd1bWVudDAu
dmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gQXRvbVN0cmluZygiZm9vIiwgQXRvbVN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpIDogY29udmVydDxJRExBdG9tU3RyaW5nQWRhcHRvcjxJRExET01T
dHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1w
bC5tZXRob2RXaXRoT3B0aW9uYWxBdG9tU3RyaW5nQW5kRGVmYXVsdFZhbHVlKFdURk1vdmUoc3Ry
KSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBl
bmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsK
LQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTcw
NDAsMTQgKzY4NTgsMTAgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3QKICAgICBVTlVTRURfUEFS
QU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxG
cmFtZS0+YXJndW1lbnQoMCk7Ci0gICAgYXV0byBzdHIgPSBhcmd1bWVudDAuaXNVbmRlZmluZWQo
KSA/IFN0cmluZygpIDogY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxs
RnJhbWUtPmFyZ3VtZW50KDApOworICAgIGF1dG8gc3RyID0gYXJndW1lbnQwLnZhbHVlKCkuaXNV
bmRlZmluZWQoKSA/IFN0cmluZygpIDogY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25h
bFN0cmluZ0lzTnVsbChXVEZNb3ZlKHN0cikpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50
cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0
aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogfQogCkBAIC03MDYyLDE0ICs2ODc2LDEwIEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhP
cHRpb25hbFN0CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0g
ICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwotICAgIGF1dG8gc3Ry
ID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAp
OworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3Vt
ZW50KDApOworICAgIGF1dG8gc3RyID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25h
bFN0cmluZ0lzVW5kZWZpbmVkKFdURk1vdmUoc3RyKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJn
dW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5z
dXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTcwODQsMTQgKzY4OTQsMTAgQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE9wdGlvbmFsQXQKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7Ci0gICAgYXV0
byBzdHIgPSBhcmd1bWVudDAuaXNVbmRlZmluZWQoKSA/IG51bGxBdG9tKCkgOiBjb252ZXJ0PElE
TEF0b21TdHJpbmdBZGFwdG9yPElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBh
cmd1bWVudDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJh
bWUtPmFyZ3VtZW50KDApOworICAgIGF1dG8gc3RyID0gYXJndW1lbnQwLnZhbHVlKCkuaXNVbmRl
ZmluZWQoKSA/IG51bGxBdG9tKCkgOiBjb252ZXJ0PElETEF0b21TdHJpbmdBZGFwdG9yPElETERP
TVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBp
bXBsLm1ldGhvZFdpdGhPcHRpb25hbEF0b21TdHJpbmdJc051bGwoV1RGTW92ZShzdHIpKTsKLQot
ICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0
aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOwotCiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNzEwNiwxNCAr
NjkxMiwxMCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdAogICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT5h
cmd1bWVudCgwKTsKLSAgICBhdXRvIHN0ciA9IGFyZ3VtZW50MC5pc1VuZGVmaW5lZCgpID8gZW1w
dHlTdHJpbmcoKSA6IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
YXJndW1lbnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZy
YW1lLT5hcmd1bWVudCgwKTsKKyAgICBhdXRvIHN0ciA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5k
ZWZpbmVkKCkgPyBlbXB0eVN0cmluZygpIDogY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRp
b25hbFN0cmluZ0lzRW1wdHlTdHJpbmcoV1RGTW92ZShzdHIpKTsKLQotICAgIC8vIE1ha2Ugc3Vy
ZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAg
ICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOwotCiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNzEyOCwxNCArNjkzMCwxMCBAQCBzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxVUwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKLSAg
ICBhdXRvIHN0ciA9IGFyZ3VtZW50MC5pc1VuZGVmaW5lZCgpID8gZW1wdHlTdHJpbmcoKSA6IGNv
bnZlcnQ8SURMVVNWU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAg
ICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgw
KTsKKyAgICBhdXRvIHN0ciA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBlbXB0
eVN0cmluZygpIDogY29udmVydDxJRExVU1ZTdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBh
cmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFVTVlN0cmluZ0lz
RW1wdHlTdHJpbmcoV1RGTW92ZShzdHIpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMg
c3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGls
bEFsaXZlSGVyZShhcmd1bWVudDApOwotCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIH0KIApAQCAtNzE1MCwxNCArNjk0OCwxMCBAQCBzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0
aW9uYWxBdAogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAg
IGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKLSAgICBhdXRvIHN0ciA9
IGFyZ3VtZW50MC5pc1VuZGVmaW5lZCgpID8gZW1wdHlBdG9tKCkgOiBjb252ZXJ0PElETEF0b21T
dHJpbmdBZGFwdG9yPElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVu
dDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFy
Z3VtZW50KDApOworICAgIGF1dG8gc3RyID0gYXJndW1lbnQwLnZhbHVlKCkuaXNVbmRlZmluZWQo
KSA/IGVtcHR5QXRvbSgpIDogY29udmVydDxJRExBdG9tU3RyaW5nQWRhcHRvcjxJRExET01TdHJp
bmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5t
ZXRob2RXaXRoT3B0aW9uYWxBdG9tU3RyaW5nSXNFbXB0eVN0cmluZyhXVEZNb3ZlKHN0cikpOwot
Ci0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9m
IHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC03MTcyLDE0
ICs2OTY2LDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbERvCiAgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUt
PmFyZ3VtZW50KDApOwotICAgIGF1dG8gbnVtYmVyID0gY29udmVydDxJRExVbnJlc3RyaWN0ZWRE
b3VibGU+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0aWxs
QWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOworICAgIGF1dG8g
bnVtYmVyID0gY29udmVydDxJRExVbnJlc3RyaWN0ZWREb3VibGU+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbERvdWJs
ZUlzTmFOKFdURk1vdmUobnVtYmVyKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0
YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxB
bGl2ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiB9CiAKQEAgLTcxOTQsMTQgKzY5ODQsMTAgQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsRmwKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBh
dXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7Ci0gICAgYXV0byBudW1iZXIg
PSBjb252ZXJ0PElETFVucmVzdHJpY3RlZEZsb2F0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJn
dW1lbnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1l
LT5hcmd1bWVudCgwKTsKKyAgICBhdXRvIG51bWJlciA9IGNvbnZlcnQ8SURMVW5yZXN0cmljdGVk
RmxvYXQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBs
Lm1ldGhvZFdpdGhPcHRpb25hbEZsb2F0SXNOYU4oV1RGTW92ZShudW1iZXIpKTsKLQotICAgIC8v
IE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1l
dGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOwotCiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNzIxNiwxNCArNzAwMiwx
MCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxMbwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVu
dCgwKTsKLSAgICBhdXRvIG51bWJlciA9IGFyZ3VtZW50MC5pc1VuZGVmaW5lZCgpID8gT3B0aW9u
YWw8Q29udmVydGVyPElETExvbmdMb25nPjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENvbnZl
cnRlcjxJRExMb25nTG9uZz46OlJldHVyblR5cGU+KGNvbnZlcnQ8SURMTG9uZ0xvbmc+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUg
YXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKKyAgICBhdXRvIG51bWJlciA9IGFy
Z3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8SURMTG9u
Z0xvbmc+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8Q29udmVydGVyPElETExvbmdMb25nPjo6
UmV0dXJuVHlwZT4oY29udmVydDxJRExMb25nTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFy
Z3VtZW50MC52YWx1ZSgpKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25nKFdU
Rk1vdmUobnVtYmVyKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUg
dW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUo
YXJndW1lbnQwKTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiB9CiAKQEAgLTcyMzgsMTQgKzcwMjAsMTAgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTG8KICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIGFyZ3Vt
ZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7Ci0gICAgYXV0byBudW1iZXIgPSBjb252ZXJ0
PElETExvbmdMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAgICBFbnN1
cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKKyAg
ICBhdXRvIG51bWJlciA9IGNvbnZlcnQ8SURMTG9uZ0xvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25n
SXNaZXJvKFdURk1vdmUobnVtYmVyKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0
YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxB
bGl2ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiB9CiAKQEAgLTcyNjAsMTQgKzcwMzgsMTAgQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsVW4KICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBh
dXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7Ci0gICAgYXV0byBudW1iZXIg
PSBhcmd1bWVudDAuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExVbnNpZ25l
ZExvbmdMb25nPjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRlcjxJRExVbnNpZ25l
ZExvbmdMb25nPjo6UmV0dXJuVHlwZT4oY29udmVydDxJRExVbnNpZ25lZExvbmdMb25nPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKSk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3Bl
IGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CisgICAgYXV0byBudW1iZXIgPSBh
cmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8Q29udmVydGVyPElETFVu
c2lnbmVkTG9uZ0xvbmc+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8Q29udmVydGVyPElETFVu
c2lnbmVkTG9uZ0xvbmc+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETFVuc2lnbmVkTG9uZ0xvbmc+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSkpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5tZXRo
b2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdMb25nKFdURk1vdmUobnVtYmVyKSk7Ci0KLSAgICAv
LyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBt
ZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTcyODIsMTQgKzcwNTYs
MTAgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVW4KICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1l
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1l
bnQoMCk7Ci0gICAgYXV0byBudW1iZXIgPSBjb252ZXJ0PElETFVuc2lnbmVkTG9uZ0xvbmc+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29w
ZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOworICAgIGF1dG8gbnVtYmVyID0g
Y29udmVydDxJRExVbnNpZ25lZExvbmdMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1l
bnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdMb25n
SXNaZXJvKFdURk1vdmUobnVtYmVyKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0
YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxB
bGl2ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiB9CiAKQEAgLTczMDQsMTQgKzcwNzQsMTAgQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsU2UKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBh
dXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7Ci0gICAgYXV0byBhcnJheSA9
IGFyZ3VtZW50MC5pc1VuZGVmaW5lZCgpID8gQ29udmVydGVyPElETFNlcXVlbmNlPElETERPTVN0
cmluZz4+OjpSZXR1cm5UeXBleyB9IDogY29udmVydDxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZl
U2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKKyAgICBhdXRvIGFycmF5
ID0gYXJndW1lbnQwLnZhbHVlKCkuaXNVbmRlZmluZWQoKSA/IENvbnZlcnRlcjxJRExTZXF1ZW5j
ZTxJRExET01TdHJpbmc+Pjo6UmV0dXJuVHlwZXsgfSA6IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURM
RE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAg
IGltcGwubWV0aG9kV2l0aE9wdGlvbmFsU2VxdWVuY2UoV1RGTW92ZShhcnJheSkpOwotCi0gICAg
Ly8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMg
bWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC03MzI2LDE0ICs3MDky
LDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFNlCiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3Vt
ZW50KDApOwotICAgIGF1dG8gYXJyYXkgPSBhcmd1bWVudDAuaXNVbmRlZmluZWQoKSA/IENvbnZl
cnRlcjxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+Pjo6UmV0dXJuVHlwZXsgfSA6IGNvbnZlcnQ8
SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50
MCk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJn
dW1lbnQoMCk7CisgICAgYXV0byBhcnJheSA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVk
KCkgPyBDb252ZXJ0ZXI8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj46OlJldHVyblR5cGV7IH0g
OiBjb252ZXJ0PElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFNlcXVlbmNl
SXNFbXB0eShXVEZNb3ZlKGFycmF5KSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0
YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxB
bGl2ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiB9CiAKQEAgLTczNDgsMTQgKzcxMTAsMTAgQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsQm8KICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBh
dXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7Ci0gICAgYXV0byBiID0gYXJn
dW1lbnQwLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8SURMQm9vbGVhbj46OlJl
dHVyblR5cGU+KCkgOiBPcHRpb25hbDxDb252ZXJ0ZXI8SURMQm9vbGVhbj46OlJldHVyblR5cGU+
KGNvbnZlcnQ8SURMQm9vbGVhbj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCkpOwor
ICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50
KDApOworICAgIGF1dG8gYiA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBPcHRp
b25hbDxDb252ZXJ0ZXI8SURMQm9vbGVhbj46OlJldHVyblR5cGU+KCkgOiBPcHRpb25hbDxDb252
ZXJ0ZXI8SURMQm9vbGVhbj46OlJldHVyblR5cGU+KGNvbnZlcnQ8SURMQm9vbGVhbj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhP
cHRpb25hbEJvb2xlYW4oV1RGTW92ZShiKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRz
IHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3Rp
bGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiB9CiAKQEAgLTczNzAsMTQgKzcxMjgsMTAgQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9w
dGlvbmFsQm8KICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAg
ICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7Ci0gICAgYXV0byBiID0g
Y29udmVydDxJRExCb29sZWFuPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAg
ICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgw
KTsKKyAgICBhdXRvIGIgPSBjb252ZXJ0PElETEJvb2xlYW4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbEJvb2xlYW5J
c0ZhbHNlKFdURk1vdmUoYikpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFs
aXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxpdmVI
ZXJlKGFyZ3VtZW50MCk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogfQogCkBAIC03MzkyLDE0ICs3MTQ2LDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFu
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBh
cmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwotICAgIGF1dG8gYSA9IGNvbnZlcnQ8
SURMQW55PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAgICBFbnN1cmVTdGls
bEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKKyAgICBhdXRv
IGEgPSBjb252ZXJ0PElETEFueT4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1
ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsQW55KFdURk1vdmUoYSkpOwotCi0gICAg
Ly8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMg
bWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC03NDE0LDE0ICs3MTY0
LDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE9iCiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3Vt
ZW50KDApOwotICAgIGF1dG8gYSA9IGFyZ3VtZW50MC5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8
Q29udmVydGVyPElETE9iamVjdD46OlJldHVyblR5cGU+KCkgOiBPcHRpb25hbDxDb252ZXJ0ZXI8
SURMT2JqZWN0Pjo6UmV0dXJuVHlwZT4oY29udmVydDxJRExPYmplY3Q+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBhcmd1bWVudDApKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQw
ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKKyAgICBhdXRvIGEgPSBhcmd1bWVudDAudmFsdWUo
KS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8Q29udmVydGVyPElETE9iamVjdD46OlJldHVyblR5
cGU+KCkgOiBPcHRpb25hbDxDb252ZXJ0ZXI8SURMT2JqZWN0Pjo6UmV0dXJuVHlwZT4oY29udmVy
dDxJRExPYmplY3Q+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSkpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAg
ICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxPYmplY3QoV1RGTW92ZShhKSk7Ci0KLSAgICAvLyBN
YWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRo
b2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTc0MzYsMTQgKzcxODIsMTAg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTnUKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQo
MCk7Ci0gICAgYXV0byBvYmogPSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0
T2JqPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAsIFtdKEpTQzo6SlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhy
b3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgIm9iaiIs
ICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhPcHRpb25hbE51bGxhYmxlV3JhcHBlciIsICJUZXN0
T2JqIik7IH0pOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJh
bWUtPmFyZ3VtZW50KDApOworICAgIGF1dG8gb2JqID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJ
bnRlcmZhY2U8VGVzdE9iaj4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVl
KCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBzY29wZSwgMCwgIm9iaiIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhPcHRpb25hbE51
bGxhYmxlV3JhcHBlciIsICJUZXN0T2JqIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9u
YWxOdWxsYWJsZVdyYXBwZXIoV1RGTW92ZShvYmopKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1
bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1
cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOwotCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNzQ1OCwxNCArNzIwMCwxMCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoT3B0aW9uYWxOdQogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKLSAgICBhdXRv
IG9iaiA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlw
ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAib2JqIiwgIlRlc3RPYmplY3Qi
LCAibWV0aG9kV2l0aE9wdGlvbmFsTnVsbGFibGVXcmFwcGVySXNOdWxsIiwgIlRlc3RPYmoiKTsg
fSk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJn
dW1lbnQoMCk7CisgICAgYXV0byBvYmogPSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFj
ZTxUZXN0T2JqPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwgW10o
SlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3Bl
JiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNj
b3BlLCAwLCAib2JqIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aE9wdGlvbmFsTnVsbGFibGVX
cmFwcGVySXNOdWxsIiwgIlRlc3RPYmoiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25h
bE51bGxhYmxlV3JhcHBlcklzTnVsbChXVEZNb3ZlKG9iaikpOwotCi0gICAgLy8gTWFrZSBzdXJl
IGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAg
IGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC03NDgwLDE0ICs3MjE4LDEwIEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhPcHRpb25hbFhQCiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwotICAg
IGF1dG8gcmVzb2x2ZXIgPSBjb252ZXJ0PElETE51bGxhYmxlPElETFhQYXRoTlNSZXNvbHZlcjxY
UGF0aE5TUmVzb2x2ZXI+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCwgW10oSlND
OjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBz
Y29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3Bl
LCAwLCAicmVzb2x2ZXIiLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoT3B0aW9uYWxYUGF0aE5T
UmVzb2x2ZXIiLCAiWFBhdGhOU1Jlc29sdmVyIik7IH0pOworICAgIEVuc3VyZVN0aWxsQWxpdmVT
Y29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOworICAgIGF1dG8gcmVzb2x2
ZXIgPSBjb252ZXJ0PElETE51bGxhYmxlPElETFhQYXRoTlNSZXNvbHZlcjxYUGF0aE5TUmVzb2x2
ZXI+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpLCBbXShKU0M6OkpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
KSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAs
ICJyZXNvbHZlciIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhPcHRpb25hbFhQYXRoTlNSZXNv
bHZlciIsICJYUGF0aE5TUmVzb2x2ZXIiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25h
bFhQYXRoTlNSZXNvbHZlcihXVEZNb3ZlKHJlc29sdmVyKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUg
YXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAg
ZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTc1MDIsMTQgKzcyMzYsMTAgQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsUmUKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7Ci0gICAg
YXV0byByZWNvcmQgPSBhcmd1bWVudDAuaXNVbmRlZmluZWQoKSA/IFdURjo6bnVsbG9wdCA6IGNv
bnZlcnQ8SURMTnVsbGFibGU8SURMUmVjb3JkPElETERPTVN0cmluZywgSURMTG9uZz4+PigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUg
YXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKKyAgICBhdXRvIHJlY29yZCA9IGFy
Z3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBXVEY6Om51bGxvcHQgOiBjb252ZXJ0PElE
TE51bGxhYmxlPElETFJlY29yZDxJRExET01TdHJpbmcsIElETExvbmc+Pj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFs
UmVjb3JkKFdURk1vdmUocmVjb3JkKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0
YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxB
bGl2ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiB9CiAKQEAgLTc1MjQsMTQgKzcyNTQsMTAgQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsUHIKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBh
dXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7Ci0gICAgYXV0byBwcm9taXNl
ID0gYXJndW1lbnQwLmlzVW5kZWZpbmVkKCkgPyBudWxscHRyIDogY29udmVydDxJRExQcm9taXNl
PElETFZvaWQ+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAgICBFbnN1cmVT
dGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKKyAgICBh
dXRvIHByb21pc2UgPSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gbnVsbHB0ciA6
IGNvbnZlcnQ8SURMUHJvbWlzZTxJRExWb2lkPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3Vt
ZW50MC52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsUHJvbWlzZShXVEZNb3Zl
KHByb21pc2UpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRp
bCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1
bWVudDApOwotCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0K
IApAQCAtNzU0OCwxNCArNzI3NCwxMCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tBcgogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIGNhbGxiYWNrID0gY29udmVydDxJ
RExDYWxsYmFja0ludGVyZmFjZTxKU1Rlc3RDYWxsYmFja0ludGVyZmFjZT4+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBhcmd1bWVudDAsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgW10oSlND
OjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBz
Y29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBzY29wZSwgMCwgImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aENhbGxi
YWNrQXJnIik7IH0pOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gY2FsbGJhY2sgPSBjb252ZXJ0
PElETENhbGxiYWNrSW50ZXJmYWNlPEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlPj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJjYWxsYmFjayIsICJUZXN0T2JqZWN0IiwgIm1ldGhv
ZFdpdGhDYWxsYmFja0FyZyIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0aENhbGxiYWNrQXJnKGNh
bGxiYWNrLnJlbGVhc2VOb25OdWxsKCkpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBz
dGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxs
QWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogfQogCkBAIC03NTcyLDE4ICs3Mjk0LDEzIEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25D
YWxsYmFjCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAo
VU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byBhcmd1
bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8gbm9uQ2Fs
bGJhY2sgPSBjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAp
OworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gbm9uQ2FsbGJhY2sgPSBjb252ZXJ0PElETExvbmc+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIGFyZ3Vt
ZW50MSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSk7Ci0gICAgYXV0byBjYWxsYmFj
ayA9IGNvbnZlcnQ8SURMQ2FsbGJhY2tJbnRlcmZhY2U8SlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2U+
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQxLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2Jq
ZWN0KCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6
VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDEsICJjYWxsYmFjayIsICJUZXN0T2JqZWN0IiwgIm1l
dGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnIik7IH0pOworICAgIEVuc3VyZVN0
aWxsQWxpdmVTY29wZSBhcmd1bWVudDEgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEp
OworICAgIGF1dG8gY2FsbGJhY2sgPSBjb252ZXJ0PElETENhbGxiYWNrSW50ZXJmYWNlPEpTVGVz
dENhbGxiYWNrSW50ZXJmYWNlPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MS52YWx1
ZSgpLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1
bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDEsICJj
YWxsYmFjayIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxi
YWNrQXJnIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFj
a0FyZyhXVEZNb3ZlKG5vbkNhbGxiYWNrKSwgY2FsbGJhY2sucmVsZWFzZU5vbk51bGwoKSk7Ci0K
LSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2Yg
dGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKLSAgICBl
bnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDEpOwotCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNzU5OCwxNCArNzMxNSwxMCBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoQ2FsbGJhY2tBbgogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKLSAgICBh
dXRvIGNhbGxiYWNrID0gY29udmVydDxJRExOdWxsYWJsZTxJRExDYWxsYmFja0ludGVyZmFjZTxK
U1Rlc3RDYWxsYmFja0ludGVyZmFjZT4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQw
LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVu
dE11c3RCZUZ1bmN0aW9uRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJjYWxs
YmFjayIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnIik7
IH0pOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFy
Z3VtZW50KDApOworICAgIGF1dG8gY2FsbGJhY2sgPSBjb252ZXJ0PElETE51bGxhYmxlPElETENh
bGxiYWNrSW50ZXJmYWNlPEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlPj4+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBb
XShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHNjb3BlLCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRo
Q2FsbGJhY2tBbmRPcHRpb25hbEFyZyIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0aENhbGxiYWNr
QW5kT3B0aW9uYWxBcmcoV1RGTW92ZShjYWxsYmFjaykpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFy
Z3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVu
c3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC03NjIyLDE0ICs3MzM1LDEwIEBAIHN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhDYWxsYmFja0Z1CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAg
YXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAgIGF1
dG8gY2FsbGJhY2sgPSBjb252ZXJ0PElETENhbGxiYWNrRnVuY3Rpb248SlNUZXN0Q2FsbGJhY2tG
dW5jdGlvbj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAsICpjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25F
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgImNhbGxiYWNrIiwgIlRlc3RPYmpl
Y3QiLCAibWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BcmciKTsgfSk7CisgICAgRW5zdXJlU3Rp
bGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7
CisgICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8SURMQ2FsbGJhY2tGdW5jdGlvbjxKU1Rlc3RD
YWxsYmFja0Z1bmN0aW9uPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgp
LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVu
dE11c3RCZUZ1bmN0aW9uRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJjYWxs
YmFjayIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQXJnIik7IH0p
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAgICAgaW1wbC5tZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFyZyhjYWxsYmFjay5yZWxlYXNl
Tm9uTnVsbCgpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRp
bCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1
bWVudDApOwotCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0K
IApAQCAtNzY0NiwxOCArNzM1NSwxMyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhYwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIG5vbkNhbGxiYWNrID0gY29udmVy
dDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAgICBFbnN1cmVT
dGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgw
KTsKKyAgICBhdXRvIG5vbkNhbGxiYWNrID0gY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBhcmd1bWVudDEgPSBjYWxsRnJh
bWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOwotICAgIGF1dG8gY2FsbGJhY2sgPSBjb252ZXJ0PElE
TENhbGxiYWNrRnVuY3Rpb248SlNUZXN0Q2FsbGJhY2tGdW5jdGlvbj4+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBhcmd1bWVudDEsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgW10oSlNDOjpK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCBzY29wZSwgMSwgImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aE5vbkNhbGxi
YWNrQXJnQW5kQ2FsbGJhY2tGdW5jdGlvbkFyZyIpOyB9KTsKKyAgICBFbnN1cmVTdGlsbEFsaXZl
U2NvcGUgYXJndW1lbnQxID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKKyAgICBh
dXRvIGNhbGxiYWNrID0gY29udmVydDxJRExDYWxsYmFja0Z1bmN0aW9uPEpTVGVzdENhbGxiYWNr
RnVuY3Rpb24+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQxLnZhbHVlKCksICpjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJl
RnVuY3Rpb25FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMSwgImNhbGxiYWNrIiwg
IlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tGdW5jdGlv
bkFyZyIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tG
dW5jdGlvbkFyZyhXVEZNb3ZlKG5vbkNhbGxiYWNrKSwgY2FsbGJhY2sucmVsZWFzZU5vbk51bGwo
KSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBl
bmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsK
LSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDEpOwotCiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNzY3MiwxNCArNzM3NiwxMCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoQ2FsbGJhY2tGdQogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsK
LSAgICBhdXRvIGNhbGxiYWNrID0gY29udmVydDxJRExOdWxsYWJsZTxJRExDYWxsYmFja0Z1bmN0
aW9uPEpTVGVzdENhbGxiYWNrRnVuY3Rpb24+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3Vt
ZW50MCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJn
dW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAi
Y2FsbGJhY2siLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFuZE9w
dGlvbmFsQXJnIik7IH0pOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBj
YWxsRnJhbWUtPmFyZ3VtZW50KDApOworICAgIGF1dG8gY2FsbGJhY2sgPSBjb252ZXJ0PElETE51
bGxhYmxlPElETENhbGxiYWNrRnVuY3Rpb248SlNUZXN0Q2FsbGJhY2tGdW5jdGlvbj4+PigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCksICpjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAi
bWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BbmRPcHRpb25hbEFyZyIpOyB9KTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwu
bWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BbmRPcHRpb25hbEFyZyhXVEZNb3ZlKGNhbGxiYWNr
KSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBl
bmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsK
LQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTc2
OTMsMTQgKzczOTMsMTAgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iakNvbnN0cnVjdG9yRnVuY3Rpb25TdGF0aWNNZXRob2RXaXRoQ2EKICAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZy
YW1lLT5hcmd1bWVudCgwKTsKLSAgICBhdXRvIGNhbGxiYWNrID0gY29udmVydDxJRExOdWxsYWJs
ZTxJRExDYWxsYmFja0ludGVyZmFjZTxKU1Rlc3RDYWxsYmFja0ludGVyZmFjZT4+PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLCAqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4
aWNhbEdsb2JhbE9iamVjdCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0
aW9uRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJjYWxsYmFjayIsICJUZXN0
T2JqZWN0IiwgInN0YXRpY01ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnIik7IH0pOwor
ICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50
KDApOworICAgIGF1dG8gY2FsbGJhY2sgPSBjb252ZXJ0PElETE51bGxhYmxlPElETENhbGxiYWNr
SW50ZXJmYWNlPEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBhcmd1bWVudDAudmFsdWUoKSwgKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxH
bG9iYWxPYmplY3QpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iamVj
dCIsICJzdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyIpOyB9KTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIFRl
c3RPYmo6OnN0YXRpY01ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnKFdURk1vdmUoY2Fs
bGJhY2spKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0
aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVu
dDApOwotCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApA
QCAtNzcxNiwxNCArNzQxMiwxMCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvblN0YXRpY01ldGhvZFdpdGhDYQogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApOwotICAgIGF1dG8gY2FsbGJhY2sgPSBjb252ZXJ0PElETENhbGxiYWNrSW50
ZXJmYWNlPEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFy
Z3VtZW50MCwgKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3Qp
LCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iamVjdCIsICJzdGF0aWNN
ZXRob2RXaXRoQ2FsbGJhY2tBcmciKTsgfSk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFy
Z3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBjYWxs
YmFjayA9IGNvbnZlcnQ8SURMQ2FsbGJhY2tJbnRlcmZhY2U8SlNUZXN0Q2FsbGJhY2tJbnRlcmZh
Y2U+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCksICpqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KSwgW10oSlNDOjpKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJv
d0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwg
MCwgImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAic3RhdGljTWV0aG9kV2l0aENhbGxiYWNrQXJn
Iik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CiAgICAgVGVzdE9iajo6c3RhdGljTWV0aG9kV2l0aENhbGxiYWNrQXJnKGNhbGxiYWNr
LnJlbGVhc2VOb25OdWxsKCkpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFs
aXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxpdmVI
ZXJlKGFyZ3VtZW50MCk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogfQogCkBAIC03NzkyLDE4ICs3NDg0LDEzIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxQm9k
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBh
cmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8gb2Jq
QXJnID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE9iaj4+PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBl
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJvYmpBcmciLCAiVGVzdE9iamVj
dCIsICJvdmVybG9hZGVkTWV0aG9kIiwgIlRlc3RPYmoiKTsgfSk7CisgICAgRW5zdXJlU3RpbGxB
bGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Cisg
ICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0T2Jq
Pj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwgW10oSlNDOjpKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkg
eyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAi
b2JqQXJnIiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRlZE1ldGhvZCIsICJUZXN0T2JqIik7IH0p
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
Ci0gICAgYXV0byBhcmd1bWVudDEgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOwot
ICAgIGF1dG8gc3RyQXJnID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudDEpOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDEgPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOworICAgIGF1dG8gc3RyQXJnID0gY29udmVy
dDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDEudmFsdWUoKSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
ICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShvYmpBcmcpLCBXVEZNb3ZlKHN0ckFy
ZykpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMg
ZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7
Ci0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQxKTsKLQogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTc4MTMsMTggKzc1MDAsMTMgQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3ZlcmxvYWRlZE1ldGhvZDJCb2QKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCk7Ci0gICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVy
ZmFjZTxUZXN0T2JqPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAsIFtdKEpTQzo6
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwg
MCwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2QiLCAiVGVzdE9iaiIp
OyB9KTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIG9iakFyZyA9IGNvbnZlcnQ8SURMTnVsbGFi
bGU8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50
MC52YWx1ZSgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgc2NvcGUsIDAsICJvYmpBcmciLCAiVGVzdE9iamVjdCIsICJvdmVybG9hZGVk
TWV0aG9kIiwgIlRlc3RPYmoiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIGFyZ3VtZW50MSA9IGNhbGxGcmFtZS0+
YXJndW1lbnQoMSk7Ci0gICAgYXV0byBsb25nQXJnID0gYXJndW1lbnQxLmlzVW5kZWZpbmVkKCkg
PyBPcHRpb25hbDxDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU+KCkgOiBPcHRpb25hbDxD
b252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU+KGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGFyZ3VtZW50MSkpOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1
bWVudDEgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpOworICAgIGF1dG8gbG9uZ0FyZyA9IGFyZ3Vt
ZW50MS52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8SURMTG9uZz46
OlJldHVyblR5cGU+KCkgOiBPcHRpb25hbDxDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU+
KGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MS52YWx1ZSgp
KSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShvYmpBcmcpLCBXVEZNb3ZlKGxv
bmdBcmcpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0
aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVu
dDApOwotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MSk7Ci0KICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC03ODM0LDE0ICs3NTE2LDEw
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk92ZXJsb2FkZWRNZXRob2QzQm9kCiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApOwotICAgIGF1dG8gc3RyQXJnID0gY29udmVydDxJRExET01TdHJpbmc+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29w
ZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8g
c3RyQXJnID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1
bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShzdHJBcmcp
KTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVu
ZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOwot
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNzg1
MSwxNCArNzUyOSwxMCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNEJvZAogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIGxvbmdBcmcgPSBjb252ZXJ0PElE
TExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0aWxs
QWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwor
ICAgIGF1dG8gbG9uZ0FyZyA9IGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGFyZ3VtZW50MC52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZNb3ZlKGxv
bmdBcmcpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0
aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVu
dDApOwotCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApA
QCAtNzg2OCwxNCArNzU0MiwxMCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNUJvZAogICAgIFVOVVNF
RF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gYXJndW1lbnQwID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIGNhbGxiYWNrID0gY29u
dmVydDxJRExDYWxsYmFja0ludGVyZmFjZTxKU1Rlc3RDYWxsYmFja0ludGVyZmFjZT4+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
W10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCBzY29wZSwgMCwgImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRl
ZE1ldGhvZCIpOyB9KTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gY29udmVy
dDxJRExDYWxsYmFja0ludGVyZmFjZTxKU1Rlc3RDYWxsYmFja0ludGVyZmFjZT4+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRo
cm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iamVjdCIsICJvdmVy
bG9hZGVkTWV0aG9kIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKGNhbGxiYWNrLnJl
bGVhc2VOb25OdWxsKCkpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZl
IHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJl
KGFyZ3VtZW50MCk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogfQogCkBAIC03ODg1LDE0ICs3NTU1LDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q2Qm9kCiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBhcmd1
bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8gbGlzdEFy
ZyA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPERPTVN0cmluZ0xpc3Q+Pj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50
VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAibGlzdEFyZyIsICJUZXN0
T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2QiLCAiRE9NU3RyaW5nTGlzdCIpOyB9KTsKKyAgICBF
bnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1
bWVudCgwKTsKKyAgICBhdXRvIGxpc3RBcmcgPSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVy
ZmFjZTxET01TdHJpbmdMaXN0Pj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFs
dWUoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxP
YmplY3QsIHNjb3BlLCAwLCAibGlzdEFyZyIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRo
b2QiLCAiRE9NU3RyaW5nTGlzdCIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZN
b3ZlKGxpc3RBcmcpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1
bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShh
cmd1bWVudDApOwotCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IH0KIApAQCAtNzkwMiwxNCArNzU2OCwxMCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kN0JvZAogICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gYXJndW1l
bnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIGFycmF5QXJn
ID0gY29udmVydDxJRExOdWxsYWJsZTxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+Pj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFy
Z3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBhcnJh
eUFyZyA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm92ZXJsb2Fk
ZWRNZXRob2QoV1RGTW92ZShhcnJheUFyZykpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50
cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0
aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogfQogCkBAIC03OTE5LDE0ICs3NTgxLDEwIEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2Q4Qm9kCiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0g
ICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAg
IGF1dG8gb2JqQXJnID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBhcmd1bWVudDAsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgIm9iakFyZyIsICJUZXN0T2JqZWN0Iiwg
Im92ZXJsb2FkZWRNZXRob2QiLCAiVGVzdE9iaiIpOyB9KTsKKyAgICBFbnN1cmVTdGlsbEFsaXZl
U2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBh
dXRvIG9iakFyZyA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5
cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgIm9iakFyZyIsICJUZXN0T2Jq
ZWN0IiwgIm92ZXJsb2FkZWRNZXRob2QiLCAiVGVzdE9iaiIpOyB9KTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwub3Zlcmxv
YWRlZE1ldGhvZCgqb2JqQXJnKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBh
bGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZl
SGVyZShhcmd1bWVudDApOwotCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIH0KIApAQCAtNzkzNiwxNCArNzU5NCwxMCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kOUJv
ZAogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8g
YXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIHdp
bmRvdyA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFdpbmRvd1Byb3h5Pj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIGFyZ3VtZW50MCwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAid2luZG93IiwgIlRlc3RPYmplY3QiLCAib3Zl
cmxvYWRlZE1ldGhvZCIsICJXaW5kb3dQcm94eSIpOyB9KTsKKyAgICBFbnN1cmVTdGlsbEFsaXZl
U2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBh
dXRvIHdpbmRvdyA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFdpbmRvd1Byb3h5Pj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1l
bnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJ3aW5kb3ciLCAiVGVz
dE9iamVjdCIsICJvdmVybG9hZGVkTWV0aG9kIiwgIldpbmRvd1Byb3h5Iik7IH0pOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1w
bC5vdmVybG9hZGVkTWV0aG9kKCp3aW5kb3cpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50
cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0
aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogfQogCkBAIC03OTUzLDE0ICs3NjA3LDEwIEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2QxMEJvCiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0g
ICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAg
IGF1dG8gYXJyYXlBcmcgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBh
cmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gYXJy
YXlBcmcgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RG
TW92ZShhcnJheUFyZykpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZl
IHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJl
KGFyZ3VtZW50MCk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogfQogCkBAIC03OTcwLDE0ICs3NjIwLDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMUJvCiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBhcmd1
bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8gYXJyYXlB
cmcgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETFVuc2lnbmVkTG9uZz4+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAg
PSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gYXJyYXlBcmcgPSBj
b252ZXJ0PElETFNlcXVlbmNlPElETFVuc2lnbmVkTG9uZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShh
cnJheUFyZykpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGls
IHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3Vt
ZW50MCk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQog
CkBAIC03OTg3LDE0ICs3NjMzLDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMkJvCiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBhcmd1bWVudDAg
PSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8gc3RyQXJnID0gY29u
dmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOworICAg
IEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApOworICAgIGF1dG8gc3RyQXJnID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRN
ZXRob2QoV1RGTW92ZShzdHJBcmcpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3Rh
eSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFs
aXZlSGVyZShhcmd1bWVudDApOwotCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIH0KIApAQCAtODA2OSwxOCArNzcxMSwxMyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9k
V2l0aAogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1
dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRv
IHN0ckFyZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJn
dW1lbnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIHN0ckFyZyA9IGNvbnZlcnQ8SURMRE9N
U3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0
byBhcmd1bWVudDEgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpOwotICAgIGF1dG8gb2JqQXJnID0g
Y29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE9iaj4+PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgYXJndW1lbnQxLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDEsICJvYmpBcmciLCAiVGVzdE9iamVjdCIsICJv
dmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyIiwgIlRlc3RPYmoiKTsgfSk7Cisg
ICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MSA9IGNhbGxGcmFtZS0+YXJndW1lbnQo
MSk7CisgICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFjZTxU
ZXN0T2JqPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDEudmFsdWUoKSwgW10oSlND
OjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBz
Y29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3Bl
LCAxLCAib2JqQXJnIiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25h
bFBhcmFtZXRlciIsICJUZXN0T2JqIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kV2l0
aE9wdGlvbmFsUGFyYW1ldGVyKFdURk1vdmUoc3RyQXJnKSwgV1RGTW92ZShvYmpBcmcpKTsKLQot
ICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0
aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOwotICAgIGVu
c3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MSk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC04MDkwLDE4ICs3NzI3LDEzIEBAIHN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2RXaXRoCiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
OwotICAgIGF1dG8gb2JqQXJnID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVz
dE9iaj4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLCBbXShKU0M6OkpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRo
cm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJvYmpB
cmciLCAiVGVzdE9iamVjdCIsICJvdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVy
IiwgIlRlc3RPYmoiKTsgfSk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9
IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBvYmpBcmcgPSBjb252
ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0T2JqPj4+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudDAudmFsdWUoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAib2JqQXJnIiwgIlRlc3RPYmplY3Qi
LCAib3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlciIsICJUZXN0T2JqIik7IH0p
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
Ci0gICAgYXV0byBhcmd1bWVudDEgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpOwotICAgIGF1dG8g
bG9uZ0FyZyA9IGFyZ3VtZW50MS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8Q29udmVydGVyPElE
TExvbmc+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8Q29udmVydGVyPElETExvbmc+OjpSZXR1
cm5UeXBlPihjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDEp
KTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQxID0gY2FsbEZyYW1lLT5hcmd1
bWVudCgxKTsKKyAgICBhdXRvIGxvbmdBcmcgPSBhcmd1bWVudDEudmFsdWUoKS5pc1VuZGVmaW5l
ZCgpID8gT3B0aW9uYWw8Q29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9u
YWw8Q29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETExvbmc+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDEudmFsdWUoKSkpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVk
TWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyKFdURk1vdmUob2JqQXJnKSwgV1RGTW92ZShsb25n
QXJnKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhp
cyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQw
KTsKLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDEpOwotCiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtODE0MywxNCArNzc3NSwxMCBA
QCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aAogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudCgwKTsKLSAgICBhdXRvIG9iamVjdE9yTm9kZSA9IGNvbnZlcnQ8SURMVW5pb248SURM
SW50ZXJmYWNlPFRlc3RPYmo+LCBJRExJbnRlcmZhY2U8VGVzdE5vZGU+Pj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGFyZ3VtZW50MCk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50
MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBvYmplY3RPck5v
ZGUgPSBjb252ZXJ0PElETFVuaW9uPElETEludGVyZmFjZTxUZXN0T2JqPiwgSURMSW50ZXJmYWNl
PFRlc3ROb2RlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAg
ICBpbXBsLm92ZXJsb2FkZWRNZXRob2RXaXRoRGlzdGluZ3Vpc2hpbmdVbmlvbihXVEZNb3ZlKG9i
amVjdE9yTm9kZSkpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVu
dGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFy
Z3VtZW50MCk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
fQogCkBAIC04MTYwLDE0ICs3Nzg4LDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoCiAgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBhcmd1bWVu
dDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8gdmFsdWUgPSBj
b252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOworICAgIEVu
c3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApOworICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2RXaXRo
RGlzdGluZ3Vpc2hpbmdVbmlvbihXVEZNb3ZlKHZhbHVlKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUg
YXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAg
ZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTgyMDMsMTQgKzc4MjcsMTAgQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zl
cmxvYWRlZE1ldGhvZFdpdGgKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQo
MCk7Ci0gICAgYXV0byBvYmplY3RPck5vZGUgPSBjb252ZXJ0PElETFVuaW9uPElETEludGVyZmFj
ZTxUZXN0T2JqPiwgSURMSW50ZXJmYWNlPFRlc3ROb2RlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gb2JqZWN0T3JOb2RlID0gY29u
dmVydDxJRExVbmlvbjxJRExJbnRlcmZhY2U8VGVzdE9iaj4sIElETEludGVyZmFjZTxUZXN0Tm9k
ZT4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5v
dmVybG9hZGVkTWV0aG9kV2l0aDJEaXN0aW5ndWlzaGluZ1VuaW9ucyhXVEZNb3ZlKG9iamVjdE9y
Tm9kZSkpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRo
aXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50
MCk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBA
IC04MjIwLDE0ICs3ODQwLDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoCiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0
PElETFVuaW9uPElETEludGVyZmFjZTxUZXN0SW50ZXJmYWNlPiwgSURMRE9NU3RyaW5nLCBJRExM
b25nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CisgICAgRW5zdXJlU3RpbGxB
bGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Cisg
ICAgYXV0byB2YWx1ZSA9IGNvbnZlcnQ8SURMVW5pb248SURMSW50ZXJmYWNlPFRlc3RJbnRlcmZh
Y2U+LCBJRExET01TdHJpbmcsIElETExvbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1l
bnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kV2l0aDJEaXN0aW5ndWlzaGlu
Z1VuaW9ucyhXVEZNb3ZlKHZhbHVlKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0
YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxB
bGl2ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiB9CiAKQEAgLTgyNjUsMTggKzc4ODEsMTMgQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZFdpdGgKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBh
dXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0
byBvYmplY3RPck5vZGUgPSBjb252ZXJ0PElETFVuaW9uPElETEludGVyZmFjZTxUZXN0T2JqPiwg
SURMSW50ZXJmYWNlPFRlc3ROb2RlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAp
OworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gb2JqZWN0T3JOb2RlID0gY29udmVydDxJRExVbmlv
bjxJRExJbnRlcmZhY2U8VGVzdE9iaj4sIElETEludGVyZmFjZTxUZXN0Tm9kZT4+PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBhcmd1bWVudDEgPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOwotICAgIGF1dG8gb2JqZWN0ID0gY29udmVy
dDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDEs
IFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dT
Y29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCBzY29wZSwgMSwgIm9iamVjdCIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2RXaXRo
Tm9uRGlzdGluZ3Vpc2hpbmdVbmlvbiIsICJUZXN0T2JqIik7IH0pOworICAgIEVuc3VyZVN0aWxs
QWxpdmVTY29wZSBhcmd1bWVudDEgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOwor
ICAgIGF1dG8gb2JqZWN0ID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBhcmd1bWVudDEudmFsdWUoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3Vt
ZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAxLCAib2JqZWN0IiwgIlRl
c3RPYmplY3QiLCAib3ZlcmxvYWRlZE1ldGhvZFdpdGhOb25EaXN0aW5ndWlzaGluZ1VuaW9uIiwg
IlRlc3RPYmoiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2RXaXRoTm9uRGlzdGluZ3Vp
c2hpbmdVbmlvbihXVEZNb3ZlKG9iamVjdE9yTm9kZSksICpvYmplY3QpOwotCi0gICAgLy8gTWFr
ZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9k
LgotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0gICAgZW5zdXJlU3RpbGxB
bGl2ZUhlcmUoYXJndW1lbnQxKTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiB9CiAKQEAgLTgyODYsMTggKzc4OTcsMTMgQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZFdpdGgKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBh
dXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0
byBvYmplY3RPck5vZGUgPSBjb252ZXJ0PElETFVuaW9uPElETEludGVyZmFjZTxUZXN0T2JqPiwg
SURMSW50ZXJmYWNlPFRlc3ROb2RlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAp
OworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gb2JqZWN0T3JOb2RlID0gY29udmVydDxJRExVbmlv
bjxJRExJbnRlcmZhY2U8VGVzdE9iaj4sIElETEludGVyZmFjZTxUZXN0Tm9kZT4+PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBhcmd1bWVudDEgPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOwotICAgIGF1dG8gbm9kZSA9IGNvbnZlcnQ8
SURMSW50ZXJmYWNlPFRlc3ROb2RlPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MSwg
W10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHNjb3BlLCAxLCAibm9kZSIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2RXaXRoTm9u
RGlzdGluZ3Vpc2hpbmdVbmlvbiIsICJUZXN0Tm9kZSIpOyB9KTsKKyAgICBFbnN1cmVTdGlsbEFs
aXZlU2NvcGUgYXJndW1lbnQxID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKKyAg
ICBhdXRvIG5vZGUgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0Tm9kZT4+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBhcmd1bWVudDEudmFsdWUoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50
VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAxLCAibm9kZSIsICJUZXN0T2Jq
ZWN0IiwgIm92ZXJsb2FkZWRNZXRob2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdVbmlvbiIsICJUZXN0
Tm9kZSIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZFdpdGhOb25EaXN0aW5ndWlzaGlu
Z1VuaW9uKFdURk1vdmUob2JqZWN0T3JOb2RlKSwgKm5vZGUpOwotCi0gICAgLy8gTWFrZSBzdXJl
IGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAg
IGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0gICAgZW5zdXJlU3RpbGxBbGl2ZUhl
cmUoYXJndW1lbnQxKTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiB9CiAKQEAgLTgzMzAsMTQgKzc5MzYsMTAgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGUK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIGFy
Z3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0byBvYmpl
Y3RPck5vZGUgPSBjb252ZXJ0PElETE51bGxhYmxlPElETFVuaW9uPElETEludGVyZmFjZTxUZXN0
T2JqPiwgSURMSW50ZXJmYWNlPFRlc3ROb2RlPj4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJn
dW1lbnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIG9iamVjdE9yTm9kZSA9IGNvbnZlcnQ8
SURMTnVsbGFibGU8SURMVW5pb248SURMSW50ZXJmYWNlPFRlc3RPYmo+LCBJRExJbnRlcmZhY2U8
VGVzdE5vZGU+Pj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAg
ICBpbXBsLm92ZXJsb2FkV2l0aE51bGxhYmxlVW5pb24oV1RGTW92ZShvYmplY3RPck5vZGUpKTsK
LQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBv
ZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOwotCiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtODM0Nywx
NCArNzk0OSwxMCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZQogICAgIFVOVVNFRF9QQVJBTShj
YWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIGluZGV4ID0gY29udmVydDxJRExMb25n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZl
U2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBh
dXRvIGluZGV4ID0gY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1l
bnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5vdmVybG9hZFdpdGhOdWxsYWJsZVVuaW9uKFdURk1vdmUo
aW5kZXgpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0
aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVu
dDApOwotCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApA
QCAtODM5MiwxNCArNzk5MCwxMCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhPcHRpb25hbAogICAgIFVOVVNF
RF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gYXJndW1lbnQwID0g
Y2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKLSAgICBhdXRvIG9iamVjdE9yTm9kZSA9IGFyZ3VtZW50
MC5pc1VuZGVmaW5lZCgpID8gdHJ1ZSA6IGNvbnZlcnQ8SURMVW5pb248SURMRE9NU3RyaW5nLCBJ
RExCb29sZWFuPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CisgICAgRW5zdXJl
U3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CisgICAg
YXV0byBvYmplY3RPck5vZGUgPSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gdHJ1
ZSA6IGNvbnZlcnQ8SURMVW5pb248SURMRE9NU3RyaW5nLCBJRExCb29sZWFuPj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwub3ZlcmxvYWRXaXRoT3B0
aW9uYWxVbmlvbihXVEZNb3ZlKG9iamVjdE9yTm9kZSkpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFy
Z3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVu
c3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC04NDA5LDE0ICs4MDAzLDEwIEBAIHN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkV2l0aE9wdGlvbmFsCiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
OwotICAgIGF1dG8gaW5kZXggPSBjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gaW5kZXggPSBjb252ZXJ0PElE
TExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBs
Lm92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24oV1RGTW92ZShpbmRleCkpOwotCi0gICAgLy8gTWFr
ZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9k
LgotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC04NDU1LDE4ICs4MDQ1LDEzIEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlCiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApOwotICAgIGF1dG8gb2JqID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZh
Y2U8VGVzdE9iaj4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLCBbXShKU0M6OkpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
KSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAs
ICJvYmoiLCAiVGVzdE9iamVjdCIsICJvdmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNo
aW5nUGFyYW1ldGVyIiwgIlRlc3RPYmoiKTsgfSk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3Bl
IGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBv
YmogPSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0T2JqPj4+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3Vt
ZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAib2JqIiwgIlRlc3RP
YmplY3QiLCAib3ZlcmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5ndWlzaGluZ1BhcmFtZXRlciIs
ICJUZXN0T2JqIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBhcmd1bWVudDEgPSBjYWxsRnJhbWUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDEpOwotICAgIGF1dG8gbm9kZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RO
b2RlPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MSwgW10oSlNDOjpKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJv
d0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAxLCAibm9kZSIs
ICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJh
bWV0ZXIiLCAiVGVzdE5vZGUiKTsgfSk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3Vt
ZW50MSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSk7CisgICAgYXV0byBub2RlID0g
Y29udmVydDxJRExJbnRlcmZhY2U8VGVzdE5vZGU+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJn
dW1lbnQxLnZhbHVlKCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMSwgIm5vZGUiLCAiVGVzdE9iamVjdCIsICJvdmVybG9h
ZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1ldGVyIiwgIlRlc3ROb2RlIik7IH0p
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAgICAgaW1wbC5vdmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1ldGVy
KFdURk1vdmUob2JqKSwgKm5vZGUpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5
IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxp
dmVIZXJlKGFyZ3VtZW50MCk7Ci0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQxKTsK
LQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTg0
NzYsMTggKzgwNjEsMTMgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGUKICAgICBVTlVTRURfUEFS
QU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxG
cmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0byBub2RlID0gY29udmVydDxJRExO
dWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE5vZGU+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFy
Z3VtZW50MCwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHNjb3BlLCAwLCAibm9kZSIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkV2l0aE51
bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIiLCAiVGVzdE5vZGUiKTsgfSk7CisgICAg
RW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCk7CisgICAgYXV0byBub2RlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZh
Y2U8VGVzdE5vZGU+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpLCBb
XShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwg
c2NvcGUsIDAsICJub2RlIiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRXaXRoTnVsbGFibGVOb25E
aXN0aW5ndWlzaGluZ1BhcmFtZXRlciIsICJUZXN0Tm9kZSIpOyB9KTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gYXJndW1l
bnQxID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKLSAgICBhdXRvIGluZGV4ID0g
Y29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQxKTsKKyAgICBF
bnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQxID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1
bWVudCgxKTsKKyAgICBhdXRvIGluZGV4ID0gY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgYXJndW1lbnQxLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5vdmVybG9hZFdpdGhOdWxsYWJs
ZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1ldGVyKFdURk1vdmUobm9kZSksIFdURk1vdmUoaW5kZXgp
KTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVu
ZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOwot
ICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MSk7Ci0KICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC04NTM0LDE0ICs4MTE0LDEwIEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0
aW9uQ2xhc3NNZXRob2RXaXRoT3B0CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7Ci0g
ICAgYXV0byBhcmcgPSBhcmd1bWVudDAuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRl
cjxJRExMb25nPjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6
UmV0dXJuVHlwZT4oY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1l
bnQwKSk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+
YXJndW1lbnQoMCk7CisgICAgYXV0byBhcmcgPSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5l
ZCgpID8gT3B0aW9uYWw8Q29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9u
YWw8Q29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETExvbmc+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSkpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgYXV0byByZXN1bHQgPSBK
U1ZhbHVlOjplbmNvZGUodG9KUzxJRExMb25nPihUZXN0T2JqOjpjbGFzc01ldGhvZFdpdGhPcHRp
b25hbChXVEZNb3ZlKGFyZykpKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkg
YWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2
ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTg1NjksMTQg
KzgxNDUsMTAgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNv
bnN0cnVjdG9yRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTEKICAgICBVTlVTRURfUEFSQU0obGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIGFyZyA9IGNvbnZlcnQ8SURMTG9uZz4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3Bl
IGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBh
cmcgPSBjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFs
dWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKICAgICBUZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kMShXVEZNb3ZlKGFyZykpOwotCi0g
ICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRo
aXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC04NTg4LDE0ICs4
MTYwLDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25z
dHJ1Y3RvckZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEyCiAgICAgVU5VU0VEX1BBUkFNKGxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0byB0eXBlID0gY29udmVydDxJRExET01TdHJpbmc+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVT
Y29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1
dG8gdHlwZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJn
dW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAgICAgVGVzdE9iajo6b3ZlcmxvYWRlZE1ldGhvZDEoV1RGTW92ZSh0
eXBlKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhp
cyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQw
KTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAg
LTg2MzksMTggKzgyMDcsMTMgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoQ2xhbXAKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+
dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0byBvYmpBcmdzU2hvcnQgPSBjb252ZXJ0PElE
TENsYW1wQWRhcHRvcjxJRExVbnNpZ25lZFNob3J0Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFy
Z3VtZW50MCk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFt
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBvYmpBcmdzU2hvcnQgPSBjb252ZXJ0
PElETENsYW1wQWRhcHRvcjxJRExVbnNpZ25lZFNob3J0Pj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGFyZ3VtZW50MC52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gYXJndW1lbnQxID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgxKTsKLSAgICBhdXRvIG9iakFyZ3NMb25nID0gY29udmVydDxJRExDbGFt
cEFkYXB0b3I8SURMVW5zaWduZWRMb25nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50
MSk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MSA9IGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoMSk7CisgICAgYXV0byBvYmpBcmdzTG9uZyA9IGNvbnZlcnQ8SURMQ2xh
bXBBZGFwdG9yPElETFVuc2lnbmVkTG9uZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVu
dDEudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKICAgICBpbXBsLmNsYXNzTWV0aG9kV2l0aENsYW1wKFdURk1vdmUob2JqQXJn
c1Nob3J0KSwgV1RGTW92ZShvYmpBcmdzTG9uZykpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3Vt
ZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3Vy
ZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJn
dW1lbnQxKTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9
CiAKQEAgLTg2NjUsMTQgKzgyMjgsMTAgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoQ2xhbXAKICAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIGFyZ3VtZW50
MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7Ci0gICAgYXV0byBvYmpBcmdzTG9uZyA9IGNvbnZl
cnQ8SURMQ2xhbXBBZGFwdG9yPElETExvbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1l
bnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5h
cmd1bWVudCgwKTsKKyAgICBhdXRvIG9iakFyZ3NMb25nID0gY29udmVydDxJRExDbGFtcEFkYXB0
b3I8SURMTG9uZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAg
ICBpbXBsLmNsYXNzTWV0aG9kV2l0aENsYW1wT25PcHRpb25hbChXVEZNb3ZlKG9iakFyZ3NMb25n
KSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBl
bmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsK
LQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTg2
ODksMTggKzgyNDgsMTMgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoRW5mb3IKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0byBvYmpBcmdzU2hvcnQgPSBjb252ZXJ0PElETEVu
Zm9yY2VSYW5nZUFkYXB0b3I8SURMVW5zaWduZWRTaG9ydD4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gb2JqQXJnc1Nob3J0ID0gY29u
dmVydDxJRExFbmZvcmNlUmFuZ2VBZGFwdG9yPElETFVuc2lnbmVkU2hvcnQ+PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBhcmd1bWVudDEgPSBjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOwotICAgIGF1dG8gb2JqQXJnc0xvbmcgPSBjb252
ZXJ0PElETEVuZm9yY2VSYW5nZUFkYXB0b3I8SURMVW5zaWduZWRMb25nPj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGFyZ3VtZW50MSk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50
MSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSk7CisgICAgYXV0byBvYmpBcmdzTG9u
ZyA9IGNvbnZlcnQ8SURMRW5mb3JjZVJhbmdlQWRhcHRvcjxJRExVbnNpZ25lZExvbmc+PigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQxLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5jbGFzc01ldGhv
ZFdpdGhFbmZvcmNlUmFuZ2UoV1RGTW92ZShvYmpBcmdzU2hvcnQpLCBXVEZNb3ZlKG9iakFyZ3NM
b25nKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhp
cyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQw
KTsKLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDEpOwotCiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtODcxNSwxNCArODI2OSwxMCBA
QCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25DbGFzc01ldGhvZFdpdGhFbmZvcgogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgw
KTsKLSAgICBhdXRvIG9iakFyZ3NMb25nID0gY29udmVydDxJRExFbmZvcmNlUmFuZ2VBZGFwdG9y
PElETExvbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAgICBFbnN1cmVT
dGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKKyAgICBh
dXRvIG9iakFyZ3NMb25nID0gY29udmVydDxJRExFbmZvcmNlUmFuZ2VBZGFwdG9yPElETExvbmc+
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5jbGFz
c01ldGhvZFdpdGhFbmZvcmNlUmFuZ2VPbk9wdGlvbmFsKFdURk1vdmUob2JqQXJnc0xvbmcpKTsK
LQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBv
ZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOwotCiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtODczOSwx
NCArODI4OSwxMCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVW5zaWduZWRMbwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNr
ZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIHVuc2lnbmVkTG9uZ1NlcXVlbmNlID0gY29udmVydDxJ
RExTZXF1ZW5jZTxJRExVbnNpZ25lZExvbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1l
bnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIHVuc2lnbmVkTG9uZ1NlcXVlbmNlID0gY29u
dmVydDxJRExTZXF1ZW5jZTxJRExVbnNpZ25lZExvbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
YXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoVW5zaWduZWRMb25nU2VxdWVu
Y2UoV1RGTW92ZSh1bnNpZ25lZExvbmdTZXF1ZW5jZSkpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFy
Z3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVu
c3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC04NzYzLDE0ICs4MzA5LDEwIEBAIHN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblN0cmlu
Z0FycmF5RnVuY3Rpb25CCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAg
YXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAgIGF1
dG8gdmFsdWVzID0gY29udmVydDxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1l
bnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIHZhbHVlcyA9
IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGFyZ3VtZW50MC52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGF1dG8gcmVzdWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKHRv
SlM8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5zdHJpbmdBcnJheUZ1bmN0
aW9uKFdURk1vdmUodmFsdWVzKSkpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3Rh
eSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFs
aXZlSGVyZShhcmd1bWVudDApOwotCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtODc4Nywx
NCArODMyOSwxMCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25Eb21TdHJpbmdMaXN0RnVuY3RpbwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNr
ZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIHZhbHVlcyA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPERP
TVN0cmluZ0xpc3Q+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLCBbXShKU0M6OkpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
KSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAs
ICJ2YWx1ZXMiLCAiVGVzdE9iamVjdCIsICJkb21TdHJpbmdMaXN0RnVuY3Rpb24iLCAiRE9NU3Ry
aW5nTGlzdCIpOyB9KTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIHZhbHVlcyA9IGNvbnZlcnQ8
SURMSW50ZXJmYWNlPERPTVN0cmluZ0xpc3Q+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1l
bnQwLnZhbHVlKCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgInZhbHVlcyIsICJUZXN0T2JqZWN0IiwgImRvbVN0cmlu
Z0xpc3RGdW5jdGlvbiIsICJET01TdHJpbmdMaXN0Iik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgYXV0byByZXN1bHQgPSBK
U1ZhbHVlOjplbmNvZGUodG9KUzxJRExJbnRlcmZhY2U8RE9NU3RyaW5nTGlzdD4+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGlt
cGwuZG9tU3RyaW5nTGlzdEZ1bmN0aW9uKCp2YWx1ZXMpKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUg
YXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAg
ZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKQEAgLTg4MDksMTQgKzgzNDcsMTAgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3BlcmF0aW9uV2l0aE9wdGlvbmEKICAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIGFyZ3VtZW50
MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7Ci0gICAgYXV0byBvcHRpb25hbFVuaW9uID0gYXJn
dW1lbnQwLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8SURMVW5pb248SURMRE9N
U3RyaW5nLCBJRExTZXF1ZW5jZTxJRExVbnJlc3RyaWN0ZWREb3VibGU+Pj46OlJldHVyblR5cGU+
KCkgOiBPcHRpb25hbDxDb252ZXJ0ZXI8SURMVW5pb248SURMRE9NU3RyaW5nLCBJRExTZXF1ZW5j
ZTxJRExVbnJlc3RyaWN0ZWREb3VibGU+Pj46OlJldHVyblR5cGU+KGNvbnZlcnQ8SURMVW5pb248
SURMRE9NU3RyaW5nLCBJRExTZXF1ZW5jZTxJRExVbnJlc3RyaWN0ZWREb3VibGU+Pj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCkpOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBh
cmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOworICAgIGF1dG8gb3B0aW9uYWxVbmlv
biA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8
SURMVW5pb248SURMRE9NU3RyaW5nLCBJRExTZXF1ZW5jZTxJRExVbnJlc3RyaWN0ZWREb3VibGU+
Pj46OlJldHVyblR5cGU+KCkgOiBPcHRpb25hbDxDb252ZXJ0ZXI8SURMVW5pb248SURMRE9NU3Ry
aW5nLCBJRExTZXF1ZW5jZTxJRExVbnJlc3RyaWN0ZWREb3VibGU+Pj46OlJldHVyblR5cGU+KGNv
bnZlcnQ8SURMVW5pb248SURMRE9NU3RyaW5nLCBJRExTZXF1ZW5jZTxJRExVbnJlc3RyaWN0ZWRE
b3VibGU+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBp
bXBsLm9wZXJhdGlvbldpdGhPcHRpb25hbFVuaW9uUGFyYW1ldGVyKFdURk1vdmUob3B0aW9uYWxV
bmlvbikpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRo
aXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50
MCk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBA
IC04ODMzLDE4ICs4MzY3LDEzIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhBbmRXaXRob3V0CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1l
LT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8gYXJyYXlBcmcgPSBjb252ZXJ0PElETFNl
cXVlbmNlPElETFVuc2lnbmVkTG9uZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAp
OworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gYXJyYXlBcmcgPSBjb252ZXJ0PElETFNlcXVlbmNl
PElETFVuc2lnbmVkTG9uZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUo
KSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKLSAgICBhdXRvIGFyZ3VtZW50MSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSk7
Ci0gICAgYXV0byBudWxsYWJsZUFycmF5QXJnID0gY29udmVydDxJRExOdWxsYWJsZTxJRExTZXF1
ZW5jZTxJRExVbnNpZ25lZExvbmc+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MSk7
CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MSA9IGNhbGxGcmFtZS0+dW5jaGVj
a2VkQXJndW1lbnQoMSk7CisgICAgYXV0byBudWxsYWJsZUFycmF5QXJnID0gY29udmVydDxJRExO
dWxsYWJsZTxJRExTZXF1ZW5jZTxJRExVbnNpZ25lZExvbmc+Pj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIGFyZ3VtZW50MS52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0aEFuZFdpdGhvdXROdWxs
YWJsZVNlcXVlbmNlKFdURk1vdmUoYXJyYXlBcmcpLCBXVEZNb3ZlKG51bGxhYmxlQXJyYXlBcmcp
KTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVu
ZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOwot
ICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MSk7Ci0KICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC04ODYxLDE0ICs4MzkwLDEwIEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkdldEVsZW1lbnRCeUlkQm9keShKCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7
Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwot
ICAgIGF1dG8gZWxlbWVudElkID0gY29udmVydDxJRExSZXF1aXJlc0V4aXN0aW5nQXRvbVN0cmlu
Z0FkYXB0b3I8SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7
CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBlbGVtZW50SWQgPSBjb252ZXJ0PElETFJlcXVpcmVz
RXhpc3RpbmdBdG9tU3RyaW5nQWRhcHRvcjxJRExET01TdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgYXV0byByZXN1bHQgPSBKU1ZhbHVlOjplbmNv
ZGUodG9KUzxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8RWxlbWVudD4+PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmdldEVsZW1lbnRCeUlk
KFdURk1vdmUoZWxlbWVudElkKSkpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3Rh
eSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFs
aXZlSGVyZShhcmd1bWVudDApOwotCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtODkwMCwx
NCArODQyNSwxMCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0MUJvZHkoSlNDOjpKUwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNr
ZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIHZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVz
dE5vZGU+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLCBbXShKU0M6OkpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRo
cm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJ2YWx1
ZSIsICJUZXN0T2JqZWN0IiwgImNvbnZlcnQxIiwgIlRlc3ROb2RlIik7IH0pOworICAgIEVuc3Vy
ZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApOworICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0Tm9kZT4+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwgW10oSlNDOjpKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJv
d0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAidmFsdWUi
LCAiVGVzdE9iamVjdCIsICJjb252ZXJ0MSIsICJUZXN0Tm9kZSIpOyB9KTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwuY29u
dmVydDEoKnZhbHVlKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1
bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShh
cmd1bWVudDApOwotCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IH0KIApAQCAtODkyNCwxNCArODQ0NSwxMCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0MkJvZHkoSlNDOjpKUwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIHZhbHVlID0gY29udmVydDxJ
RExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE5vZGU+Pj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGFyZ3VtZW50MCwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHNjb3BlLCAwLCAidmFsdWUiLCAiVGVzdE9iamVjdCIsICJjb252ZXJ0MiIs
ICJUZXN0Tm9kZSIpOyB9KTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIHZhbHVlID0gY29udmVy
dDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE5vZGU+Pj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIGFyZ3VtZW50MC52YWx1ZSgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJ2YWx1ZSIsICJUZXN0T2JqZWN0Iiwg
ImNvbnZlcnQyIiwgIlRlc3ROb2RlIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5jb252ZXJ0MihXVEZNb3ZlKHZh
bHVlKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhp
cyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQw
KTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAg
LTg5NDgsMTQgKzg0NjUsMTAgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDNCb2R5KEpTQzo6SlMKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+
dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0byB2YWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3Ry
aW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAgICBFbnN1cmVTdGlsbEFs
aXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAg
ICBhdXRvIHZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLmNvbnZlcnQzKFdURk1vdmUodmFsdWUpKTsK
LQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBv
ZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOwotCiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtODk3Miwx
NCArODQ4NSwxMCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0NEJvZHkoSlNDOjpKUwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNr
ZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIHZhbHVlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExE
T01TdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAgICBFbnN1cmVT
dGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgw
KTsKKyAgICBhdXRvIHZhbHVlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExET01TdHJpbmc+Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5jb252ZXJ0
NChXVEZNb3ZlKHZhbHVlKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxp
dmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2ZUhl
cmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiB9CiAKQEAgLTkwMjYsMTYgKzg1MzUsMTIgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNTdHJpbmdNZXRob2QK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VM
WShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9
IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0byBoZWFkID0gY29udmVy
dDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOworICAgIEVu
c3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApOworICAgIGF1dG8gaGVhZCA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgYXV0byB0YWlsID0gY29udmVydFZh
cmlhZGljQXJndW1lbnRzPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxs
RnJhbWUsIDEpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAgICAgaW1wbC52YXJpYWRpY1N0cmluZ01ldGhvZChXVEZNb3ZlKGhlYWQpLCBX
VEZNb3ZlKHRhaWwpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1
bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShh
cmd1bWVudDApOwotCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IH0KIApAQCAtOTA1MiwxNiArODU1NywxMiBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY0RvdWJsZU1ldGhvZAogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIGhlYWQgPSBjb252ZXJ0PElE
TFVucmVzdHJpY3RlZERvdWJsZT4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7Cisg
ICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCk7CisgICAgYXV0byBoZWFkID0gY29udmVydDxJRExVbnJlc3RyaWN0ZWREb3Vi
bGU+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBhdXRvIHRh
aWwgPSBjb252ZXJ0VmFyaWFkaWNBcmd1bWVudHM8SURMVW5yZXN0cmljdGVkRG91YmxlPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgMSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLnZhcmlhZGljRG91Ymxl
TWV0aG9kKFdURk1vdmUoaGVhZCksIFdURk1vdmUodGFpbCkpOwotCi0gICAgLy8gTWFrZSBzdXJl
IGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAg
IGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC05MDc4LDE2ICs4NTc5LDEyIEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZh
cmlhZGljTm9kZU1ldGhvZEJvCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0g
ICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAg
IGF1dG8gaGVhZCA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPE5vZGU+PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgYXJndW1lbnQwLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJoZWFkIiwgIlRlc3RPYmplY3QiLCAidmFyaWFk
aWNOb2RlTWV0aG9kIiwgIk5vZGUiKTsgfSk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFy
Z3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBoZWFk
ID0gY29udmVydDxJRExJbnRlcmZhY2U8Tm9kZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1
bWVudDAudmFsdWUoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiaGVhZCIsICJUZXN0T2JqZWN0IiwgInZhcmlhZGlj
Tm9kZU1ldGhvZCIsICJOb2RlIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgYXV0byB0YWlsID0gY29udmVydFZhcmlhZGlj
QXJndW1lbnRzPElETEludGVyZmFjZTxOb2RlPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxs
RnJhbWUsIDEpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAgICAgaW1wbC52YXJpYWRpY05vZGVNZXRob2QoKmhlYWQsIFdURk1vdmUodGFp
bCkpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMg
ZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7
Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC05
MTA0LDE2ICs4NjAxLDEyIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljVW5pb25NZXRob2RCCiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8gaGVhZCA9IGNvbnZlcnQ8SURMRE9NU3RyaW5n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZl
U2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBh
dXRvIGhlYWQgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFy
Z3VtZW50MC52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogICAgIGF1dG8gdGFpbCA9IGNvbnZlcnRWYXJpYWRpY0FyZ3VtZW50
czxJRExVbmlvbjxJRExJbnRlcmZhY2U8Tm9kZT4sIElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAxKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwudmFyaWFkaWNVbmlvbk1ldGhvZChX
VEZNb3ZlKGhlYWQpLCBXVEZNb3ZlKHRhaWwpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVu
dHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVT
dGlsbEFsaXZlSGVyZShhcmd1bWVudDApOwotCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtOTEzMCwxOCArODYyMywxMyBAQCBzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BbnlCb2R5KEpT
Qzo6SlNHbG9iYQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
aWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8g
YXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIGEg
PSBjb252ZXJ0PElETFVucmVzdHJpY3RlZEZsb2F0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJn
dW1lbnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIGEgPSBjb252ZXJ0PElETFVucmVzdHJp
Y3RlZEZsb2F0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAg
YXV0byBhcmd1bWVudDEgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOwotICAgIGF1
dG8gYiA9IGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MSk7
CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MSA9IGNhbGxGcmFtZS0+dW5jaGVj
a2VkQXJndW1lbnQoMSk7CisgICAgYXV0byBiID0gY29udmVydDxJRExMb25nPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgYXJndW1lbnQxLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5hbnkoV1RGTW92ZShhKSwg
V1RGTW92ZShiKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50
aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJn
dW1lbnQwKTsKLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDEpOwotCiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtOTE3MywxNCArODY2
MSwxMCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uVwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCkpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1
bWVudCgwKTsKLSAgICBhdXRvIGEgPSBjb252ZXJ0PElETEZsb2F0PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgYXJndW1lbnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIGEgPSBjb252ZXJ0PElE
TEZsb2F0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1w
bC50ZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEZsb2F0QXJndW1lbnQoV1RGTW92ZShhKSwgV1RGTW92
ZShwcm9taXNlKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50
aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJn
dW1lbnQwKTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9
CiAKQEAgLTkyMTAsMTQgKzg2OTQsMTAgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvblcKICAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIGFyZ3VtZW50
MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7Ci0gICAgYXV0byBhID0gYXJndW1lbnQwLmlzVW5k
ZWZpbmVkKCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU+KCkgOiBP
cHRpb25hbDxDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU+KGNvbnZlcnQ8SURMTG9uZz4o
KmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCkpOworICAgIEVuc3VyZVN0aWxsQWxpdmVT
Y29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOworICAgIGF1dG8gYSA9IGFy
Z3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8SURMTG9u
Zz46OlJldHVyblR5cGU+KCkgOiBPcHRpb25hbDxDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5
cGU+KGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1
ZSgpKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKICAgICBpbXBsLnRlc3RQcm9taXNlRnVuY3Rpb25XaXRoT3B0aW9uYWxJbnRBcmd1bWVu
dChXVEZNb3ZlKGEpLCBXVEZNb3ZlKHByb21pc2UpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1
bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1
cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOwotCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtOTIzMiwxNCArODcxMiwxMCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJv
bWlzZU92ZXJsb2FkZQogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsK
LSAgICBhdXRvIGEgPSBjb252ZXJ0PElETEZsb2F0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJn
dW1lbnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIGEgPSBjb252ZXJ0PElETEZsb2F0Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC50ZXN0UHJv
bWlzZU92ZXJsb2FkZWRGdW5jdGlvbihXVEZNb3ZlKGEpLCBXVEZNb3ZlKHByb21pc2UpKTsKLQot
ICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0
aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOwotCiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtOTI0OSwxNCAr
ODcyNSwxMCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZU92ZXJsb2FkZQogICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIHJlcXVlc3QgPSBjb252ZXJ0PElETEludGVy
ZmFjZTxGZXRjaFJlcXVlc3Q+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLCBbXShK
U0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2Nv
cGUsIDAsICJyZXF1ZXN0IiwgIlRlc3RPYmplY3QiLCAidGVzdFByb21pc2VPdmVybG9hZGVkRnVu
Y3Rpb24iLCAiRmV0Y2hSZXF1ZXN0Iik7IH0pOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBh
cmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gcmVx
dWVzdCA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPEZldGNoUmVxdWVzdD4+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlw
ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAicmVxdWVzdCIsICJUZXN0T2Jq
ZWN0IiwgInRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uIiwgIkZldGNoUmVxdWVzdCIpOyB9
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwogICAgIGltcGwudGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24oKnJlcXVlc3QsIFdURk1v
dmUocHJvbWlzZSkpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVu
dGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFy
Z3VtZW50MCk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
fQogCkBAIC05MzczLDE0ICs4ODQ1LDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsT3ZlcmxvYWQxCiAgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBhcmd1bWVu
dDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8gc3RyID0gY29u
dmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOworICAg
IEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApOworICAgIGF1dG8gc3RyID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLmNvbmRpdGlvbmFsT3Zl
cmxvYWQoV1RGTW92ZShzdHIpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBh
bGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZl
SGVyZShhcmd1bWVudDApOwotCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIH0KIApAQCAtOTM5MywxNCArODg2MSwxMCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE92ZXJsb2Fk
MgogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8g
YXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIGEg
PSBjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOworICAg
IEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApOworICAgIGF1dG8gYSA9IGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxP
YmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwuY29uZGl0aW9uYWxPdmVybG9hZChX
VEZNb3ZlKGEpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRp
bCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1
bWVudDApOwotCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0K
IApAQCAtOTQ0MiwxNCArODkwNiwxMCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TaW5nbGVDb25kaXRpb25hbE92ZQogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gYXJndW1lbnQw
ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIHN0ciA9IGNvbnZl
cnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAgICBF
bnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1
bWVudCgwKTsKKyAgICBhdXRvIHN0ciA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5zaW5nbGVDb25kaXRpb25h
bE92ZXJsb2FkKFdURk1vdmUoc3RyKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0
YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxB
bGl2ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiB9CiAKQEAgLTk0NjAsMTQgKzg5MjAsMTAgQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2luZ2xlQ29uZGl0aW9u
YWxPdmUKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBh
dXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0
byBhID0gY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsK
KyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNr
ZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIGEgPSBjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLnNpbmdsZUNvbmRpdGlvbmFs
T3ZlcmxvYWQoV1RGTW92ZShhKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkg
YWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2
ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiB9CiAKQEAgLTk1MDUsMTQgKzg5NjEsMTAgQEAgc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQXR0YWNoU2hhZG93Um9vdEJv
ZHkKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJ
S0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIGFyZ3VtZW50
MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0byBpbml0ID0gY29u
dmVydDxJRExEaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnk+PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgYXJndW1lbnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIGluaXQgPSBjb252ZXJ0
PElETERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLmF0dGFjaFNoYWRvd1Jvb3QoV1RGTW92ZShp
bml0KSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhp
cyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQw
KTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAg
LTk1MjksMTQgKzg5ODEsMTAgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3BlcmF0aW9uV2l0aEV4dGVybmEKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+
dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0byBkaWN0ID0gY29udmVydDxJRExEaWN0aW9u
YXJ5PERpY3Rpb25hcnlJbXBsTmFtZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAp
OworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gZGljdCA9IGNvbnZlcnQ8SURMRGljdGlvbmFyeTxE
aWN0aW9uYXJ5SW1wbE5hbWU+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVl
KCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAgICAgaW1wbC5vcGVyYXRpb25XaXRoRXh0ZXJuYWxEaWN0aW9uYXJ5UGFyYW1ldGVyKFdU
Rk1vdmUoZGljdCkpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVu
dGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFy
Z3VtZW50MCk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
fQogCkBAIC05NTUzLDE0ICs5MDAxLDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ1ZmZlclNvdXJjZVBhcmFtZXRlCiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8gZGF0YSA9IGNvbnZlcnQ8SURM
VW5pb248SURMQXJyYXlCdWZmZXJWaWV3LCBJRExBcnJheUJ1ZmZlcj4+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAg
PSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gZGF0YSA9IGNvbnZl
cnQ8SURMVW5pb248SURMQXJyYXlCdWZmZXJWaWV3LCBJRExBcnJheUJ1ZmZlcj4+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLmJ1ZmZlclNvdXJjZVBh
cmFtZXRlcihXVEZNb3ZlKGRhdGEpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3Rh
eSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFs
aXZlSGVyZShhcmd1bWVudDApOwotCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIH0KIApAQCAtOTU3NywxNCArOTAyMSwxMCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25MZWdhY3lDYWxsZXJOYW1l
ZEJvZAogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVO
TElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gYXJndW1l
bnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIHBhcmFtID0g
Y29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAgICBF
bnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1
bWVudCgwKTsKKyAgICBhdXRvIHBhcmFtID0gY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5sZWdhY3lDYWxsZXJOYW1lZChX
VEZNb3ZlKHBhcmFtKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUg
dW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUo
YXJndW1lbnQwKTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiB9CiAKQEAgLTk2MDEsMTkgKzkwNDEsMTQgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFJldHVyblZhbHVlT3B0aW0KICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShj
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0byBhID0gY29udmVydDxJRExJ
bnRlcmZhY2U8Tm9kZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAsIFtdKEpTQzo6
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwg
MCwgImEiLCAiVGVzdE9iamVjdCIsICJ0ZXN0UmV0dXJuVmFsdWVPcHRpbWl6YXRpb24iLCAiTm9k
ZSIpOyB9KTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIGEgPSBjb252ZXJ0PElETEludGVyZmFj
ZTxOb2RlPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpLCBbXShKU0M6
OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUs
IDAsICJhIiwgIlRlc3RPYmplY3QiLCAidGVzdFJldHVyblZhbHVlT3B0aW1pemF0aW9uIiwgIk5v
ZGUiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKLSAgICBhdXRvIGFyZ3VtZW50MSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1l
bnQoMSk7Ci0gICAgYXV0byBiID0gY29udmVydDxJRExJbnRlcmZhY2U8Tm9kZT4+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBhcmd1bWVudDEsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVF
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMSwgImIiLCAiVGVzdE9iamVjdCIsICJ0
ZXN0UmV0dXJuVmFsdWVPcHRpbWl6YXRpb24iLCAiTm9kZSIpOyB9KTsKKyAgICBFbnN1cmVTdGls
bEFsaXZlU2NvcGUgYXJndW1lbnQxID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsK
KyAgICBhdXRvIGIgPSBjb252ZXJ0PElETEludGVyZmFjZTxOb2RlPj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIGFyZ3VtZW50MS52YWx1ZSgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBl
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDEsICJiIiwgIlRlc3RPYmplY3QiLCAi
dGVzdFJldHVyblZhbHVlT3B0aW1pemF0aW9uIiwgIk5vZGUiKTsgfSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLnRlc3RS
ZXR1cm5WYWx1ZU9wdGltaXphdGlvbigqYSwgKmIpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFyZ3Vt
ZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVuc3Vy
ZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJn
dW1lbnQxKTsKLQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXJndW1lbnQwKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFyZ3VtZW50MC52YWx1ZSgpKTsKIH0KIAogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RSZXR1cm5W
YWx1ZU9wdGltaXphdGlvbihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCkBAIC05NjI5LDE5ICs5MDY0LDE0IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RSZXR1cm5W
YWx1ZU9wdGltCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBp
ZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byBh
cmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8gYSA9
IGNvbnZlcnQ8SURMSW50ZXJmYWNlPE5vZGU+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1l
bnQwLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRo
cm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgc2NvcGUsIDAsICJhIiwgIlRlc3RPYmplY3QiLCAidGVzdFJldHVyblZhbHVlT3B0aW1p
emF0aW9uV2l0aEV4Y2VwdGlvbiIsICJOb2RlIik7IH0pOworICAgIEVuc3VyZVN0aWxsQWxpdmVT
Y29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1
dG8gYSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPE5vZGU+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
YXJndW1lbnQwLnZhbHVlKCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgImEiLCAiVGVzdE9iamVjdCIsICJ0ZXN0UmV0
dXJuVmFsdWVPcHRpbWl6YXRpb25XaXRoRXhjZXB0aW9uIiwgIk5vZGUiKTsgfSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRv
IGFyZ3VtZW50MSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSk7Ci0gICAgYXV0byBi
ID0gY29udmVydDxJRExJbnRlcmZhY2U8Tm9kZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1
bWVudDEsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6
VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCBzY29wZSwgMSwgImIiLCAiVGVzdE9iamVjdCIsICJ0ZXN0UmV0dXJuVmFsdWVPcHRp
bWl6YXRpb25XaXRoRXhjZXB0aW9uIiwgIk5vZGUiKTsgfSk7CisgICAgRW5zdXJlU3RpbGxBbGl2
ZVNjb3BlIGFyZ3VtZW50MSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSk7CisgICAg
YXV0byBiID0gY29udmVydDxJRExJbnRlcmZhY2U8Tm9kZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBhcmd1bWVudDEudmFsdWUoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9y
KGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAxLCAiYiIsICJUZXN0T2JqZWN0IiwgInRlc3RS
ZXR1cm5WYWx1ZU9wdGltaXphdGlvbldpdGhFeGNlcHRpb24iLCAiTm9kZSIpOyB9KTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIHBy
b3BhZ2F0ZUV4Y2VwdGlvbigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC50
ZXN0UmV0dXJuVmFsdWVPcHRpbWl6YXRpb25XaXRoRXhjZXB0aW9uKCphLCAqYikpOwotCi0gICAg
Ly8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMg
bWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0gICAgZW5zdXJl
U3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQxKTsKLQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
YXJndW1lbnQwKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFyZ3VtZW50MC52YWx1ZSgp
KTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblRlc3RSZXR1cm5WYWx1ZU9wdGltaXphdGlvbldpdGhFeGNlcHRpb24oSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCmluZGV4IGM5OTZjNjQxZmUw
ZmUxN2I2ZGE5OTVlNjA1OTI1N2RmMDlkM2Y4OTkuLjM5MTkwMGM4N2Y1Yzc5YzZkNDVhYWQ3ZTUy
YWYwMWJkNDQzZmRjNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9ycy5jcHAKQEAgLTkzLDggKzkzLDggQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBj
b25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMShKU0dsb2JhbE9iamUKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvKiBjYXN0
ZWRUaGlzID0ganNDYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcio+
KGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7CiAgICAgQVNTRVJUKGNhc3RlZFRoaXMpOwotICAgIGF1
dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRv
IGFycmF5QnVmZmVyID0gY29udmVydDxJRExBcnJheUJ1ZmZlcj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIGFyZ3VtZW50MCwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiYXJyYXlCdWZmZXIiLCAiVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnMiLCBudWxscHRyLCAiQXJyYXlCdWZmZXIiKTsgfSk7CisgICAgRW5zdXJlU3Rp
bGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7
CisgICAgYXV0byBhcnJheUJ1ZmZlciA9IGNvbnZlcnQ8SURMQXJyYXlCdWZmZXI+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3Vt
ZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiYXJyYXlCdWZmZXIi
LCAiVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMiLCBudWxscHRyLCAiQXJyYXlCdWZmZXIiKTsg
fSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKICAgICBhdXRvIG9iamVjdCA9IFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpjcmVhdGUo
KmFycmF5QnVmZmVyKTsKICAgICBhdXRvIGpzVmFsdWUgPSB0b0pTTmV3bHlDcmVhdGVkPElETElu
dGVyZmFjZTxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUob2JqZWN0KSk7CkBAIC0xMDks
OCArMTA5LDggQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzMihKU0dsb2JhbE9iamUKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0
PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcio+KGNhbGxGcmFtZS0+anND
YWxsZWUoKSk7CiAgICAgQVNTRVJUKGNhc3RlZFRoaXMpOwotICAgIGF1dG8gYXJndW1lbnQwID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIGFycmF5QnVmZmVyVmll
dyA9IGNvbnZlcnQ8SURMQXJyYXlCdWZmZXJWaWV3PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJn
dW1lbnQwLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6
OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCwgc2NvcGUsIDAsICJhcnJheUJ1ZmZlclZpZXciLCAiVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnMiLCBudWxscHRyLCAiQXJyYXlCdWZmZXJWaWV3Iik7IH0pOworICAgIEVuc3VyZVN0
aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
OworICAgIGF1dG8gYXJyYXlCdWZmZXJWaWV3ID0gY29udmVydDxJRExBcnJheUJ1ZmZlclZpZXc+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwgW10oSlNDOjpKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0
aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiYXJy
YXlCdWZmZXJWaWV3IiwgIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzIiwgbnVsbHB0ciwgIkFy
cmF5QnVmZmVyVmlldyIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnM6OmNyZWF0ZShhcnJheUJ1ZmZlclZpZXcucmVsZWFzZU5vbk51bGwoKSk7CiAgICAg
YXV0byBqc1ZhbHVlID0gdG9KU05ld2x5Q3JlYXRlZDxJRExJbnRlcmZhY2U8VGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnM+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpLCBXVEZNb3ZlKG9iamVjdCkpOwpAQCAtMTI1LDggKzEyNSw4IEBAIHN0YXRpYyBp
bmxpbmUgRW5jb2RlZEpTVmFsdWUgY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
czMoSlNHbG9iYWxPYmplCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzQ29uc3RydWN0b3IqPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOwogICAgIEFTU0VS
VChjYXN0ZWRUaGlzKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCk7Ci0gICAgYXV0byBibG9iID0gY29udmVydDxJRExJbnRlcmZhY2U8QmxvYj4+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1
bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgImJsb2IiLCAiVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMiLCBudWxscHRyLCAiQmxvYiIpOyB9KTsKKyAgICBFbnN1
cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVu
dCgwKTsKKyAgICBhdXRvIGJsb2IgPSBjb252ZXJ0PElETEludGVyZmFjZTxCbG9iPj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJn
dW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJibG9iIiwgIlRl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzIiwgbnVsbHB0ciwgIkJsb2IiKTsgfSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBhdXRv
IG9iamVjdCA9IFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpjcmVhdGUoKmJsb2IpOwogICAg
IGF1dG8ganNWYWx1ZSA9IHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKTsKQEAgLTE0MSw4ICsxNDEsOCBAQCBzdGF0aWMg
aW5saW5lIEVuY29kZWRKU1ZhbHVlIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnM0KEpTR2xvYmFsT2JqZQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yc0NvbnN0cnVjdG9yKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKTsKICAgICBBU1NF
UlQoY2FzdGVkVGhpcyk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApOwotICAgIGF1dG8gc3RyaW5nID0gY29udmVydDxJRExET01TdHJpbmc+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29w
ZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8g
c3RyaW5nID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1
bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKICAgICBhdXRvIG9iamVjdCA9IFRlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzOjpjcmVhdGUoV1RGTW92ZShzdHJpbmcpKTsKICAgICBhdXRvIGpzVmFsdWUgPSB0b0pTTmV3
bHlDcmVhdGVkPElETEludGVyZmFjZTxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUob2Jq
ZWN0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yc1dpdGhTZXF1ZW5jZS5jcHAKaW5kZXggMDgyYTg0OGE3OTAwYTcyNDdkYWUwNGQ2ZWUyNzI3
M2YwY2FhZDFlNi4uZjFmOTBjOWZkNjJjYTVlZmViYjA5MDJhYjE5MWQ4ZTA1YTdkMzc2NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0
aFNlcXVlbmNlLmNwcApAQCAtOTIsOCArOTIsOCBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1Zh
bHVlIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UxKAog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8q
IGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1
ZW5jZUNvbnN0cnVjdG9yKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKTsKICAgICBBU1NFUlQoY2Fz
dGVkVGhpcyk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwot
ICAgIGF1dG8gc2VxdWVuY2VPZlN0cmluZ3MgPSBhcmd1bWVudDAuaXNVbmRlZmluZWQoKSA/IENv
bnZlcnRlcjxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+Pjo6UmV0dXJuVHlwZXsgfSA6IGNvbnZl
cnQ8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3Vt
ZW50MCk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+
YXJndW1lbnQoMCk7CisgICAgYXV0byBzZXF1ZW5jZU9mU3RyaW5ncyA9IGFyZ3VtZW50MC52YWx1
ZSgpLmlzVW5kZWZpbmVkKCkgPyBDb252ZXJ0ZXI8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj46
OlJldHVyblR5cGV7IH0gOiBjb252ZXJ0PElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBhdXRvIG9iamVjdCA9IFRl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlOjpjcmVhdGUoV1RGTW92ZShzZXF1
ZW5jZU9mU3RyaW5ncykpOwogICAgIGF1dG8ganNWYWx1ZSA9IHRvSlNOZXdseUNyZWF0ZWQ8SURM
SW50ZXJmYWNlPFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlPj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmpl
Y3QpKTsKQEAgLTEwOCw4ICsxMDgsOCBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNv
bnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UyKAogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIGNhc3Rl
ZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNv
bnN0cnVjdG9yKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKTsKICAgICBBU1NFUlQoY2FzdGVkVGhp
cyk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
OwotICAgIGF1dG8gc3RyaW5nID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAg
PSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gc3RyaW5nID0gY29u
dmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUo
KSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKICAgICBhdXRvIG9iamVjdCA9IFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVl
bmNlOjpjcmVhdGUoV1RGTW92ZShzdHJpbmcpKTsKICAgICBhdXRvIGpzVmFsdWUgPSB0b0pTTmV3
bHlDcmVhdGVkPElETEludGVyZmFjZTxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1
ZW5jZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IFdURk1vdmUob2JqZWN0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHAKaW5k
ZXggMDRlNzc0ODczYzg4N2E2NTBjMmQ1ZDI3NmJhNmVhZjRkMzJmM2I3OC4uZmEzYmE1MTczODQz
Yzc2Yzg4ZDRkMDM0Mjk1ZGY4NDk4ZjlmMTk3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVycmlkZUJ1
aWx0aW5zLmNwcApAQCAtMjQ1LDE0ICsyNDUsMTAgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGVGdW5jdGlvbk5hbWVkSXQK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VM
WShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9
IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0byBuYW1lID0gY29udmVy
dDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOworICAgIEVu
c3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApOworICAgIGF1dG8gbmFtZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgYXV0byByZXN1bHQgPSBKU1ZhbHVl
OjplbmNvZGUodG9KUzxJRExJbnRlcmZhY2U8Tm9kZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAq
Y2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwubmFtZWRJdGVtKFdURk1vdmUobmFtZSkp
KSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBl
bmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsK
LQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFByb21pc2VSZWpl
Y3Rpb25FdmVudC5jcHAKaW5kZXggNGQ4ZGU2OTdkMWFjMTlkZjJhMTdiZGMzNTRkMDA5MzMwZGQ3
YTcxOS4uM2QxMTk5ZDUzMTAyZGZhMDU5ZWZlYmY4NzZhNmRmMDY5OTUwNWI1OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFByb21pc2VS
ZWplY3Rpb25FdmVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5jcHAKQEAgLTE3NCwxMSArMTc0LDEx
IEBAIHRlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RQcm9taXNl
UmVqZWN0aW9uRXZlbnRDb25zdHJ1Y3Rvcjo6CiAgICAgQVNTRVJUKGNhc3RlZFRoaXMpOwogICAg
IGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRv
IGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0byB0
eXBlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVu
dDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gdHlwZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBhcmd1
bWVudDEgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOwotICAgIGF1dG8gZXZlbnRJ
bml0RGljdCA9IGNvbnZlcnQ8SURMRGljdGlvbmFyeTxUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50
OjpJbml0Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MSk7CisgICAgRW5zdXJlU3Rp
bGxBbGl2ZVNjb3BlIGFyZ3VtZW50MSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSk7
CisgICAgYXV0byBldmVudEluaXREaWN0ID0gY29udmVydDxJRExEaWN0aW9uYXJ5PFRlc3RQcm9t
aXNlUmVqZWN0aW9uRXZlbnQ6OkluaXQ+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQx
LnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAgICAgYXV0byBvYmplY3QgPSBUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50Ojpj
cmVhdGUoKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEZNb3ZlKHR5cGUpLCBXVEZNb3Zl
KGV2ZW50SW5pdERpY3QpKTsKICAgICBhdXRvIGpzVmFsdWUgPSB0b0pTTmV3bHlDcmVhdGVkPElE
TEludGVyZmFjZTxUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50Pj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAK
aW5kZXggOGMzYzVhNTYyNmNhNmI0MjhlZmY1MDYzNDg0MWZlYmYxMjM5ZmVlMC4uZWFiOWUwYjU4
MDQzMDE1NzQyMTI3MDE0YmQwMmExOTI1NmJkZTUwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKQEAgLTMzMiwxNCArMzMy
LDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0KSk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApOwotICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0PElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTxTZXJpYWxpemVkU2NyaXB0VmFsdWU+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQw
KTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIHZhbHVlID0gY29udmVydDxJRExTZXJpYWxpemVk
U2NyaXB0VmFsdWU8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGFyZ3VtZW50MC52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwuZnVuY3Rpb24oV1RGTW92ZSh2YWx1ZSkpOwot
Ci0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9m
IHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVk
ZWZzLmNwcAppbmRleCA5MTJiZDYyNjNlNjkzZjdlOGM1OTM3Y2RlYTRmZWRkNmQwZDA4NWE0Li4w
YWNjNWFkZTFiNTIzYmIxMWEyNGI1NGE3YmNkYjYxOWQyNzMwOWMxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVm
cy5jcHAKQEAgLTE2MiwxNCArMTYyLDE0IEBAIHRlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3QoSlNHCiAgICAg
QVNTRVJUKGNhc3RlZFRoaXMpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50
Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxH
bG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCk7Ci0gICAgYXV0byBoZWxsbyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUg
YXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIGhl
bGxvID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVu
dDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKLSAgICBhdXRvIGFyZ3VtZW50MSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMSk7Ci0gICAgYXV0byB0ZXN0Q2FsbGJhY2tGdW5jdGlvbiA9IGNvbnZlcnQ8SURMQ2Fs
bGJhY2tGdW5jdGlvbjxKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uPj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIGFyZ3VtZW50MSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBbXShKU0M6OkpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7
IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNj
b3BlLCAxLCAidGVzdENhbGxiYWNrRnVuY3Rpb24iLCAiVGVzdFR5cGVkZWZzIiwgbnVsbHB0cik7
IH0pOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDEgPSBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDEpOworICAgIGF1dG8gdGVzdENhbGxiYWNrRnVuY3Rpb24gPSBjb252
ZXJ0PElETENhbGxiYWNrRnVuY3Rpb248SlNUZXN0Q2FsbGJhY2tGdW5jdGlvbj4+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBhcmd1bWVudDEudmFsdWUoKSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRo
cm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHNjb3BlLCAxLCAidGVzdENhbGxiYWNrRnVuY3Rpb24iLCAiVGVzdFR5
cGVkZWZzIiwgbnVsbHB0cik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBhcmd1bWVudDIgPSBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDIpOwotICAgIGF1dG8gdGVzdENhbGxiYWNrSW50ZXJmYWNlID0gY29u
dmVydDxJRExDYWxsYmFja0ludGVyZmFjZTxKU1Rlc3RDYWxsYmFja0ludGVyZmFjZT4+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDIsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
W10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCBzY29wZSwgMiwgInRlc3RDYWxsYmFja0ludGVyZmFjZSIsICJUZXN0VHlwZWRl
ZnMiLCBudWxscHRyKTsgfSk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MiA9
IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMik7CisgICAgYXV0byB0ZXN0Q2FsbGJhY2tJ
bnRlcmZhY2UgPSBjb252ZXJ0PElETENhbGxiYWNrSW50ZXJmYWNlPEpTVGVzdENhbGxiYWNrSW50
ZXJmYWNlPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50Mi52YWx1ZSgpLCAqY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudE11c3RCZUZ1
bmN0aW9uRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDIsICJ0ZXN0Q2FsbGJhY2tJ
bnRlcmZhY2UiLCAiVGVzdFR5cGVkZWZzIiwgbnVsbHB0cik7IH0pOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgYXV0byBvYmplY3Qg
PSBUZXN0VHlwZWRlZnM6OmNyZWF0ZShXVEZNb3ZlKGhlbGxvKSwgdGVzdENhbGxiYWNrRnVuY3Rp
b24ucmVsZWFzZU5vbk51bGwoKSwgdGVzdENhbGxiYWNrSW50ZXJmYWNlLnJlbGVhc2VOb25OdWxs
KCkpOwogICAgIGF1dG8ganNWYWx1ZSA9IHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRl
c3RUeXBlZGVmcz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2Jq
ZWN0KCksIFdURk1vdmUob2JqZWN0KSk7CkBAIC01MTAsMTQgKzUxMCwxMCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkZ1
bmNCb2R5KEpTQzo6SgogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKLSAgICBhdXRv
IHggPSBhcmd1bWVudDAuaXNVbmRlZmluZWQoKSA/IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxJRExM
b25nPj46OlJldHVyblR5cGV7IH0gOiBjb252ZXJ0PElETFNlcXVlbmNlPElETExvbmc+PigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUg
YXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKKyAgICBhdXRvIHggPSBhcmd1bWVu
dDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gQ29udmVydGVyPElETFNlcXVlbmNlPElETExvbmc+
Pjo6UmV0dXJuVHlwZXsgfSA6IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMTG9uZz4+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLmZ1bmMoV1RGTW92ZSh4
KSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBl
bmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsK
LQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTUz
NCwzMCArNTMwLDIyIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RU
eXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU2V0U2hhZG93Qm9keShKCiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1
bWVudENvdW50KCkgPCAzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8gd2lkdGggPSBjb252ZXJ0PElETFVucmVzdHJpY3Rl
ZEZsb2F0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAgICBFbnN1cmVTdGls
bEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsK
KyAgICBhdXRvIHdpZHRoID0gY29udmVydDxJRExVbnJlc3RyaWN0ZWRGbG9hdD4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gYXJndW1lbnQxID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKLSAgICBhdXRvIGhlaWdodCA9IGNvbnZlcnQ8
SURMVW5yZXN0cmljdGVkRmxvYXQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDEpOwor
ICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDEgPSBjYWxsRnJhbWUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDEpOworICAgIGF1dG8gaGVpZ2h0ID0gY29udmVydDxJRExVbnJlc3RyaWN0ZWRG
bG9hdD4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MS52YWx1ZSgpKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8g
YXJndW1lbnQyID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgyKTsKLSAgICBhdXRvIGJs
dXIgPSBjb252ZXJ0PElETFVucmVzdHJpY3RlZEZsb2F0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
YXJndW1lbnQyKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQyID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgyKTsKKyAgICBhdXRvIGJsdXIgPSBjb252ZXJ0PElETFVu
cmVzdHJpY3RlZEZsb2F0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQyLnZhbHVlKCkp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
Ci0gICAgYXV0byBhcmd1bWVudDMgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDMpOwotICAgIGF1dG8g
Y29sb3IgPSBhcmd1bWVudDMuaXNVbmRlZmluZWQoKSA/IFN0cmluZygpIDogY29udmVydDxJRExE
T01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDMpOworICAgIEVuc3VyZVN0
aWxsQWxpdmVTY29wZSBhcmd1bWVudDMgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDMpOworICAgIGF1
dG8gY29sb3IgPSBhcmd1bWVudDMudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gU3RyaW5nKCkgOiBj
b252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50My52YWx1
ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwotICAgIGF1dG8gYXJndW1lbnQ0ID0gY2FsbEZyYW1lLT5hcmd1bWVudCg0KTsKLSAgICBh
dXRvIGFscGhhID0gYXJndW1lbnQ0LmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8
SURMVW5yZXN0cmljdGVkRmxvYXQ+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8Q29udmVydGVy
PElETFVucmVzdHJpY3RlZEZsb2F0Pjo6UmV0dXJuVHlwZT4oY29udmVydDxJRExVbnJlc3RyaWN0
ZWRGbG9hdD4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50NCkpOworICAgIEVuc3VyZVN0
aWxsQWxpdmVTY29wZSBhcmd1bWVudDQgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDQpOworICAgIGF1
dG8gYWxwaGEgPSBhcmd1bWVudDQudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8Q29u
dmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0Pjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENv
bnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OlJldHVyblR5cGU+KGNvbnZlcnQ8SURMVW5y
ZXN0cmljdGVkRmxvYXQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDQudmFsdWUoKSkp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAgICAgaW1wbC5zZXRTaGFkb3coV1RGTW92ZSh3aWR0aCksIFdURk1vdmUoaGVpZ2h0KSwgV1RG
TW92ZShibHVyKSwgV1RGTW92ZShjb2xvciksIFdURk1vdmUoYWxwaGEpKTsKLQotICAgIC8vIE1h
a2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhv
ZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDApOwotICAgIGVuc3VyZVN0aWxs
QWxpdmVIZXJlKGFyZ3VtZW50MSk7Ci0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQy
KTsKLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1bWVudDMpOwotICAgIGVuc3VyZVN0aWxs
QWxpdmVIZXJlKGFyZ3VtZW50NCk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogfQogCkBAIC01NzQsMTQgKzU2MiwxMCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhT
ZXF1ZQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVO
TElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1dG8gYXJndW1l
bnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIHNlcXVlbmNl
QXJnID0gY29udmVydDxJRExTZXF1ZW5jZTxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDApOworICAg
IEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApOworICAgIGF1dG8gc2VxdWVuY2VBcmcgPSBjb252ZXJ0PElETFNlcXVlbmNlPElE
TFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVkU2NyaXB0VmFsdWU+Pj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGF1dG8gcmVzdWx0ID0gSlNWYWx1
ZTo6ZW5jb2RlKHRvSlM8SURMVW5zaWduZWRMb25nTG9uZz4oaW1wbC5tZXRob2RXaXRoU2VxdWVu
Y2VBcmcoV1RGTW92ZShzZXF1ZW5jZUFyZykpKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1l
bnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJl
U3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAg
LTU5OCwxNCArNTgyLDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5jCiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8gc2VxdWVuY2VBcmcgPSBjb252ZXJ0PElETE51
bGxhYmxlPElETFNlcXVlbmNlPElETERPTVN0cmluZz4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
YXJndW1lbnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIHNlcXVlbmNlQXJnID0gY29udmVy
dDxJRExOdWxsYWJsZTxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+Pj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubnVsbGFibGVTZXF1ZW5jZUFyZyhX
VEZNb3ZlKHNlcXVlbmNlQXJnKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkg
YWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2
ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiB9CiAKQEAgLTYyMiwxNCArNjAyLDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU2VxdWVuY2VPZk51bGxh
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtF
TFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byBhcmd1bWVudDAg
PSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8gc2VxdWVuY2VBcmcg
PSBjb252ZXJ0PElETFNlcXVlbmNlPElETE51bGxhYmxlPElETERPTVN0cmluZz4+PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJn
dW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIHNlcXVl
bmNlQXJnID0gY29udmVydDxJRExTZXF1ZW5jZTxJRExOdWxsYWJsZTxJRExET01TdHJpbmc+Pj4o
KmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwuc2VxdWVu
Y2VPZk51bGxhYmxlc0FyZyhXVEZNb3ZlKHNlcXVlbmNlQXJnKSk7Ci0KLSAgICAvLyBNYWtlIHN1
cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0g
ICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTY0NiwxNCArNjIyLDEwIEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0
aW9uTnVsbGFibGVTZXF1ZW5jCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0g
ICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAg
IGF1dG8gc2VxdWVuY2VBcmcgPSBjb252ZXJ0PElETE51bGxhYmxlPElETFNlcXVlbmNlPElETE51
bGxhYmxlPElETERPTVN0cmluZz4+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7
CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCk7CisgICAgYXV0byBzZXF1ZW5jZUFyZyA9IGNvbnZlcnQ8SURMTnVsbGFi
bGU8SURMU2VxdWVuY2U8SURMTnVsbGFibGU8SURMRE9NU3RyaW5nPj4+PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5udWxsYWJsZVNlcXVlbmNlT2ZO
dWxsYWJsZXNBcmcoV1RGTW92ZShzZXF1ZW5jZUFyZykpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFy
Z3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVu
c3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC02NzAsMTQgKzY0MiwxMCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk51
bGxhYmxlU2VxdWVuYwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1
dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRv
IHNlcXVlbmNlQXJnID0gY29udmVydDxJRExOdWxsYWJsZTxJRExTZXF1ZW5jZTxJRExVbmlvbjxJ
RExET01TdHJpbmcsIElETFNlcXVlbmNlPElETERPTVN0cmluZz4+Pj4+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBhcmd1bWVudDApOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAg
PSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gc2VxdWVuY2VBcmcg
PSBjb252ZXJ0PElETE51bGxhYmxlPElETFNlcXVlbmNlPElETFVuaW9uPElETERPTVN0cmluZywg
SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3Vt
ZW50MC52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubnVsbGFibGVTZXF1ZW5jZU9mVW5pb25zQXJnKFdURk1v
dmUoc2VxdWVuY2VBcmcpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhcmd1bWVudHMgc3RheSBhbGl2
ZSB1bnRpbCB0aGlzIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVy
ZShhcmd1bWVudDApOwotCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIH0KIApAQCAtNjk0LDE0ICs2NjIsMTAgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25VbmlvbkFyZ0JvZHkoSlMKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShj
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0byB1bmlvbkFyZyA9IGNvbnZl
cnQ8SURMVW5pb248SURMRE9NU3RyaW5nLCBJRExMb25nPj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGFyZ3VtZW50MCk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxG
cmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byB1bmlvbkFyZyA9IGNvbnZlcnQ8
SURMVW5pb248SURMRE9NU3RyaW5nLCBJRExMb25nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFy
Z3VtZW50MC52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwudW5pb25BcmcoV1RGTW92ZSh1bmlvbkFyZykpOwot
Ci0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9m
IHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC03MTgsMTgg
KzY4MiwxMyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRl
ZnNQcm90b3R5cGVGdW5jdGlvbkZ1bmNXaXRoQ2xhbXBCbwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCkpOwotICAgIGF1dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudCgwKTsKLSAgICBhdXRvIGFyZzEgPSBjb252ZXJ0PElETENsYW1wQWRhcHRvcjxJRExV
bnNpZ25lZExvbmdMb25nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CisgICAg
RW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCk7CisgICAgYXV0byBhcmcxID0gY29udmVydDxJRExDbGFtcEFkYXB0b3I8SURMVW5z
aWduZWRMb25nTG9uZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
LSAgICBhdXRvIGFyZ3VtZW50MSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMSk7Ci0gICAgYXV0byBh
cmcyID0gYXJndW1lbnQxLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8SURMQ2xh
bXBBZGFwdG9yPElETFVuc2lnbmVkTG9uZ0xvbmc+Pjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFs
PENvbnZlcnRlcjxJRExDbGFtcEFkYXB0b3I8SURMVW5zaWduZWRMb25nTG9uZz4+OjpSZXR1cm5U
eXBlPihjb252ZXJ0PElETENsYW1wQWRhcHRvcjxJRExVbnNpZ25lZExvbmdMb25nPj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MSkpOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBh
cmd1bWVudDEgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpOworICAgIGF1dG8gYXJnMiA9IGFyZ3Vt
ZW50MS52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8SURMQ2xhbXBB
ZGFwdG9yPElETFVuc2lnbmVkTG9uZ0xvbmc+Pjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENv
bnZlcnRlcjxJRExDbGFtcEFkYXB0b3I8SURMVW5zaWduZWRMb25nTG9uZz4+OjpSZXR1cm5UeXBl
Pihjb252ZXJ0PElETENsYW1wQWRhcHRvcjxJRExVbnNpZ25lZExvbmdMb25nPj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGFyZ3VtZW50MS52YWx1ZSgpKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLmZ1bmNXaXRoQ2xhbXAo
V1RGTW92ZShhcmcxKSwgV1RGTW92ZShhcmcyKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1l
bnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJl
U3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKLSAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShhcmd1
bWVudDEpOwotCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0K
IApAQCAtNzQ2LDE0ICs3MDUsMTAgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jV2l0aENsYW1wSW4KICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKLSAgICBhdXRvIGFyZ3VtZW50MCA9IGNhbGxGcmFt
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0byBhcmcgPSBjb252ZXJ0PElETENsYW1w
QWRhcHRvcjxJRExMb25nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CisgICAg
RW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCk7CisgICAgYXV0byBhcmcgPSBjb252ZXJ0PElETENsYW1wQWRhcHRvcjxJRExMb25n
Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwuZnVu
Y1dpdGhDbGFtcEluVHlwZWRlZihXVEZNb3ZlKGFyZykpOwotCi0gICAgLy8gTWFrZSBzdXJlIGFy
Z3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9mIHRoaXMgbWV0aG9kLgotICAgIGVu
c3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC03ODUsMTQgKzc0MCwxMCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0
cmluZ1NlcXVlbmNlRgogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwotICAgIGF1
dG8gYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRv
IHZhbHVlcyA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGFyZ3VtZW50MCk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50
MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0byB2YWx1ZXMgPSBj
b252ZXJ0PElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBh
cmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKICAgICBhdXRvIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZSh0b0pT
PElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuc3RyaW5nU2VxdWVuY2VGdW5j
dGlvbihXVEZNb3ZlKHZhbHVlcykpKSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0
YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBtZXRob2QuCi0gICAgZW5zdXJlU3RpbGxB
bGl2ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTgwOSwx
NCArNzYwLDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBl
ZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5nU2VxdWVuY2VGCiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApOwotICAgIGF1dG8gdmFsdWVzID0gY29udmVydDxJRExTZXF1ZW5jZTxJRExE
T01TdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwKTsKKyAgICBFbnN1cmVT
dGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgw
KTsKKyAgICBhdXRvIHZhbHVlcyA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4o
KmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGF1dG8gcmVzdWx0
ID0gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwg
aW1wbC5zdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uMihXVEZNb3ZlKHZhbHVlcykpKSk7Ci0KLSAgICAv
LyBNYWtlIHN1cmUgYXJndW1lbnRzIHN0YXkgYWxpdmUgdW50aWwgdGhpcyBlbmQgb2YgdGhpcyBt
ZXRob2QuCi0gICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYXJndW1lbnQwKTsKLQogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKQEAgLTgzMywxNCArNzgwLDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uQ2FsbFdpdGhTZXF1
ZW5jCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5M
SUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Ci0gICAgYXV0byBhcmd1bWVu
dDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8gc2VxdWVuY2VB
cmcgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETEludGVyZmFjZTxUZXN0RXZlbnRUYXJnZXQ+Pj4o
KmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MCk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNj
b3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgYXV0
byBzZXF1ZW5jZUFyZyA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMSW50ZXJmYWNlPFRlc3RFdmVu
dFRhcmdldD4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAg
YXV0byByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExCb29sZWFuPihpbXBsLmNhbGxX
aXRoU2VxdWVuY2VUaGF0UmVxdWlyZXNJbmNsdWRlKFdURk1vdmUoc2VxdWVuY2VBcmcpKSkpOwot
Ci0gICAgLy8gTWFrZSBzdXJlIGFyZ3VtZW50cyBzdGF5IGFsaXZlIHVudGlsIHRoaXMgZW5kIG9m
IHRoaXMgbWV0aG9kLgotICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGFyZ3VtZW50MCk7Ci0KICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>