<?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>4547</bug_id>
          
          <creation_ts>2005-08-20 21:55:26 -0700</creation_ts>
          <short_desc>use int instead of long for 32-bit (to prepare for LP64 compiling)</short_desc>
          <delta_ts>2005-09-16 15:22:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Adele Peterson">adele</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>17031</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-08-20 21:55:26 -0700</bug_when>
    <thetext>I was talking to Maciej about int vs. long. We decided that 32-bit integers should consistently use &quot;int&quot; 
rather than &quot;long&quot; in our code and our APIs. That includes things called &quot;long&quot; in IDL files because &quot;long&quot; in 
IDL means 32-bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>17032</commentid>
    <comment_count>1</comment_count>
      <attachid>3485</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-08-20 22:28:43 -0700</bug_when>
    <thetext>Created attachment 3485
change a lot of longs to ints, remove some unneeded long-specific code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19780</commentid>
    <comment_count>2</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2005-09-16 15:22:18 -0700</bug_when>
    <thetext>r=me.  I&apos;m committing this with a few minor changes since the tree has changed a bit since this patch.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3485</attachid>
            <date>2005-08-20 22:28:43 -0700</date>
            <delta_ts>2005-09-16 15:21:51 -0700</delta_ts>
            <desc>change a lot of longs to ints, remove some unneeded long-specific code</desc>
            <filename>LongToIntPatch.txt</filename>
            <type>text/plain</type>
            <size>325822</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL25wYXBpLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL25wYXBpLmgsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL25w
YXBpLmgKLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL25wYXBpLmgJMTYgQXVnIDIwMDQgMDM6
NDE6NTYgLTAwMDAJMS4yCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ucGFwaS5oCTIxIEF1
ZyAyMDA1IDA1OjI2OjI2IC0wMDAwCkBAIC0xMDgsMjEgKzEwOCwxMyBAQAogdHlwZWRlZiB1bnNp
Z25lZCBzaG9ydCB1aW50MTY7CiAjZW5kaWYKICNpZm5kZWYgX1VJTlQzMgotI2lmIGRlZmluZWQo
X19hbHBoYSkKIHR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQzMjsKLSNlbHNlIC8qIF9fYWxwaGEg
Ki8KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyB1aW50MzI7Ci0jZW5kaWYgLyogX19hbHBoYSAqLwog
I2VuZGlmCiAjaWZuZGVmIF9JTlQxNgogdHlwZWRlZiBzaG9ydCBpbnQxNjsKICNlbmRpZgogI2lm
bmRlZiBfSU5UMzIKLSNpZiBkZWZpbmVkKF9fYWxwaGEpCiB0eXBlZGVmIGludCBpbnQzMjsKLSNl
bHNlIC8qIF9fYWxwaGEgKi8KLXR5cGVkZWYgbG9uZyBpbnQzMjsKLSNlbmRpZiAvKiBfX2FscGhh
ICovCiAjZW5kaWYKIAogI2lmbmRlZiBGQUxTRQpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3MvcnVudGltZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29y
ZS9iaW5kaW5ncy9ydW50aW1lLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzEKZGlmZiAtcCAt
dSAtcjEuMzEgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZS5oCi0tLSBKYXZhU2NyaXB0
Q29yZS9iaW5kaW5ncy9ydW50aW1lLmgJMTYgQXVnIDIwMDUgMDA6NDc6MjEgLTAwMDAJMS4zMQor
KysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZS5oCTIxIEF1ZyAyMDA1IDA1OjI2OjI3
IC0wMDAwCkBAIC01Myw4ICs1Myw4IEBAIHB1YmxpYzoKIGNsYXNzIENvbnN0cnVjdG9yCiB7CiBw
dWJsaWM6Ci0gICAgdmlydHVhbCBQYXJhbWV0ZXIgKnBhcmFtZXRlckF0KGxvbmcgaSkgY29uc3Qg
PSAwOwotICAgIHZpcnR1YWwgbG9uZyBudW1QYXJhbWV0ZXJzKCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgUGFyYW1ldGVyICpwYXJhbWV0ZXJBdChpbnQgaSkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgaW50IG51bVBhcmFtZXRlcnMoKSBjb25zdCA9IDA7CiAKICAgICB2aXJ0dWFsIH5Db25zdHJ1
Y3RvcigpIHt9CiB9OwpAQCAtOTcsNyArOTcsNyBAQCBjbGFzcyBNZXRob2QKIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXIgKm5hbWUoKSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFsIGxv
bmcgbnVtUGFyYW1ldGVycygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludCBudW1QYXJhbWV0
ZXJzKCkgY29uc3QgPSAwOwogICAgICAgICAKICAgICB2aXJ0dWFsIH5NZXRob2QoKSB7fQogfTsK
QEAgLTEwOSw4ICsxMDksOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCBNZXRob2RMaXN0
IG1ldGhvZHNOYW1lZChjb25zdCBjaGFyICpuYW1lLCBJbnN0YW5jZSAqaW5zdGFuY2UpIGNvbnN0
ID0gMDsKICAgICAKLSAgICB2aXJ0dWFsIENvbnN0cnVjdG9yICpjb25zdHJ1Y3RvckF0KGxvbmcg
aSkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgbG9uZyBudW1Db25zdHJ1Y3RvcnMoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBDb25zdHJ1Y3RvciAqY29uc3RydWN0b3JBdChpbnQgaSkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgaW50IG51bUNvbnN0cnVjdG9ycygpIGNvbnN0ID0gMDsKICAgICAK
ICAgICB2aXJ0dWFsIEZpZWxkICpmaWVsZE5hbWVkKGNvbnN0IGNoYXIgKm5hbWUsIEluc3RhbmNl
ICppbnN0YW5jZSkgY29uc3QgPSAwOwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9j
L2NfY2xhc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUv
YmluZGluZ3MvYy9jX2NsYXNzLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQpkaWZmIC1wIC11
IC1yMS41IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY19jbGFzcy5oCi0tLSBKYXZhU2NyaXB0
Q29yZS9iaW5kaW5ncy9jL2NfY2xhc3MuaAkxIE9jdCAyMDA0IDAwOjI0OjM5IC0wMDAwCTEuNQor
KysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX2NsYXNzLmgJMjEgQXVnIDIwMDUgMDU6MjY6
MjcgLTAwMDAKQEAgLTc3LDExICs3NywxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCBG
aWVsZCAqZmllbGROYW1lZChjb25zdCBjaGFyICpuYW1lLCBJbnN0YW5jZSAqaW5zdGFuY2UpIGNv
bnN0OwogICAgIAotICAgIHZpcnR1YWwgQ29uc3RydWN0b3IgKmNvbnN0cnVjdG9yQXQobG9uZyBp
KSBjb25zdCB7CisgICAgdmlydHVhbCBDb25zdHJ1Y3RvciAqY29uc3RydWN0b3JBdChpbnQgaSkg
Y29uc3QgewogICAgICAgICByZXR1cm4gMDsKICAgICB9OwogICAgIAotICAgIHZpcnR1YWwgbG9u
ZyBudW1Db25zdHJ1Y3RvcnMoKSBjb25zdCB7IHJldHVybiAwOyB9OworICAgIHZpcnR1YWwgaW50
IG51bUNvbnN0cnVjdG9ycygpIGNvbnN0IHsgcmV0dXJuIDA7IH07CiAgICAgICAgIAogcHJpdmF0
ZToKICAgICBOUENsYXNzICpfaXNhOwpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvYy9j
X3J1bnRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUv
YmluZGluZ3MvYy9jX3J1bnRpbWUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42CmRpZmYgLXAg
LXUgLXIxLjYgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX3J1bnRpbWUuaAotLS0gSmF2YVNj
cmlwdENvcmUvYmluZGluZ3MvYy9jX3J1bnRpbWUuaAk4IEF1ZyAyMDA1IDA0OjA3OjIzIC0wMDAw
CTEuNgorKysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX3J1bnRpbWUuaAkyMSBBdWcgMjAw
NSAwNToyNjoyNyAtMDAwMApAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmly
dHVhbCBjb25zdCBjaGFyICpuYW1lKCkgY29uc3QgeyByZXR1cm4gX05QTl9VVEY4RnJvbUlkZW50
aWZpZXIoX21ldGhvZElkZW50aWZpZXIpOyB9OwogCi0gICAgdmlydHVhbCBsb25nIG51bVBhcmFt
ZXRlcnMoKSBjb25zdCB7IHJldHVybiAwOyB9OworICAgIHZpcnR1YWwgaW50IG51bVBhcmFtZXRl
cnMoKSBjb25zdCB7IHJldHVybiAwOyB9OwogCiBwcml2YXRlOgogICAgIE5QSWRlbnRpZmllciBf
bWV0aG9kSWRlbnRpZmllcjsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2puaS9qbmlf
Y2xhc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9i
aW5kaW5ncy9qbmkvam5pX2NsYXNzLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNApkaWZm
IC1wIC11IC1yMS4xNCBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX2NsYXNzLmNwcAot
LS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvam5pL2puaV9jbGFzcy5jcHAJMTAgQXVnIDIwMDUg
MjA6NTE6MDAgLTAwMDAJMS4xNAorKysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvam5pL2puaV9j
bGFzcy5jcHAJMjEgQXVnIDIwMDUgMDU6MjY6MjcgLTAwMDAKQEAgLTQzLDEyICs0MywxMiBAQCBK
YXZhQ2xhc3M6OkphdmFDbGFzcyAoam9iamVjdCBhbkluc3RhbmNlCiAgICAgX25hbWUgPSBzdHJk
dXAgKGNsYXNzTmFtZUMpOwogICAgIHJlbGVhc2VDaGFyYWN0ZXJzRm9ySlN0cmluZyhjbGFzc05h
bWUsIGNsYXNzTmFtZUMpOwogCi0gICAgbG9uZyBpOworICAgIGludCBpOwogICAgIEpOSUVudiAq
ZW52ID0gZ2V0Sk5JRW52KCk7CiAgICAgCiAgICAgLy8gR2V0IHRoZSBmaWVsZHMKICAgICBqYXJy
YXkgZmllbGRzID0gKGphcnJheSljYWxsSk5JT2JqZWN0TWV0aG9kIChhQ2xhc3MsICJnZXRGaWVs
ZHMiLCAiKClbTGphdmEvbGFuZy9yZWZsZWN0L0ZpZWxkOyIpOwotICAgIGxvbmcgbnVtRmllbGRz
ID0gZW52LT5HZXRBcnJheUxlbmd0aCAoZmllbGRzKTsgICAgCisgICAgaW50IG51bUZpZWxkcyA9
IGVudi0+R2V0QXJyYXlMZW5ndGggKGZpZWxkcyk7ICAgIAogICAgIF9maWVsZHMgPSBDRkRpY3Rp
b25hcnlDcmVhdGVNdXRhYmxlKE5VTEwsIG51bUZpZWxkcywgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5
Q2FsbEJhY2tzLCBOVUxMKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtRmllbGRzOyBpKyspIHsK
ICAgICAgICAgam9iamVjdCBhSkZpZWxkID0gZW52LT5HZXRPYmplY3RBcnJheUVsZW1lbnQgKChq
b2JqZWN0QXJyYXkpZmllbGRzLCBpKTsKQEAgLTYxLDcgKzYxLDcgQEAgSmF2YUNsYXNzOjpKYXZh
Q2xhc3MgKGpvYmplY3QgYW5JbnN0YW5jZQogICAgIAogICAgIC8vIEdldCB0aGUgbWV0aG9kcwog
ICAgIGphcnJheSBtZXRob2RzID0gKGphcnJheSljYWxsSk5JT2JqZWN0TWV0aG9kIChhQ2xhc3Ms
ICJnZXRNZXRob2RzIiwgIigpW0xqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2Q7Iik7Ci0gICAgbG9u
ZyBudW1NZXRob2RzID0gZW52LT5HZXRBcnJheUxlbmd0aCAobWV0aG9kcyk7ICAgIAorICAgIGlu
dCBudW1NZXRob2RzID0gZW52LT5HZXRBcnJheUxlbmd0aCAobWV0aG9kcyk7ICAgIAogICAgIF9t
ZXRob2RzID0gQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShOVUxMLCBudW1NZXRob2RzLCAma0NG
VHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsIE5VTEwpOwogICAgIGZvciAoaSA9IDA7IGkgPCBu
dW1NZXRob2RzOyBpKyspIHsKICAgICAgICAgam9iamVjdCBhSk1ldGhvZCA9IGVudi0+R2V0T2Jq
ZWN0QXJyYXlFbGVtZW50ICgoam9iamVjdEFycmF5KW1ldGhvZHMsIGkpOwpJbmRleDogSmF2YVNj
cmlwdENvcmUvYmluZGluZ3Mvam5pL2puaV9jbGFzcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX2NsYXNzLmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMTAKZGlmZiAtcCAtdSAtcjEuMTAgSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3Mvam5pL2puaV9jbGFzcy5oCi0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX2Ns
YXNzLmgJMTAgQXVnIDIwMDUgMjA6NTE6MDAgLTAwMDAJMS4xMAorKysgSmF2YVNjcmlwdENvcmUv
YmluZGluZ3Mvam5pL2puaV9jbGFzcy5oCTIxIEF1ZyAyMDA1IDA1OjI2OjI3IC0wMDAwCkBAIC00
OCwxMSArNDgsMTEgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgRmllbGQgKmZpZWxkTmFt
ZWQoY29uc3QgY2hhciAqbmFtZSwgSW5zdGFuY2UgKmluc3RhbmNlKSBjb25zdDsKICAgICAKLSAg
ICB2aXJ0dWFsIENvbnN0cnVjdG9yICpjb25zdHJ1Y3RvckF0KGxvbmcgaSkgY29uc3QgeworICAg
IHZpcnR1YWwgQ29uc3RydWN0b3IgKmNvbnN0cnVjdG9yQXQoaW50IGkpIGNvbnN0IHsKICAgICAg
ICAgcmV0dXJuICZfY29uc3RydWN0b3JzW2ldOyAKICAgICB9OwogICAgIAotICAgIHZpcnR1YWwg
bG9uZyBudW1Db25zdHJ1Y3RvcnMoKSBjb25zdCB7IHJldHVybiBfbnVtQ29uc3RydWN0b3JzOyB9
OworICAgIHZpcnR1YWwgaW50IG51bUNvbnN0cnVjdG9ycygpIGNvbnN0IHsgcmV0dXJuIF9udW1D
b25zdHJ1Y3RvcnM7IH07CiAgICAgCiAgICAgYm9vbCBpc051bWJlckNsYXNzKCkgY29uc3Q7CiAg
ICAgYm9vbCBpc0Jvb2xlYW5DbGFzcygpIGNvbnN0OwpAQCAtNjcsNyArNjcsNyBAQCBwcml2YXRl
OgogICAgIENGRGljdGlvbmFyeVJlZiBfZmllbGRzOwogICAgIENGRGljdGlvbmFyeVJlZiBfbWV0
aG9kczsKICAgICBKYXZhQ29uc3RydWN0b3IgKl9jb25zdHJ1Y3RvcnM7Ci0gICAgbG9uZyBfbnVt
Q29uc3RydWN0b3JzOworICAgIGludCBfbnVtQ29uc3RydWN0b3JzOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgQmluZGluZ3MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2puaS9qbmlfaW5z
dGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9i
aW5kaW5ncy9qbmkvam5pX2luc3RhbmNlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yOQpk
aWZmIC1wIC11IC1yMS4yOSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX2luc3RhbmNl
LmNwcAotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvam5pL2puaV9pbnN0YW5jZS5jcHAJMTYg
QXVnIDIwMDUgMDA6NDc6MjIgLTAwMDAJMS4yOQorKysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mv
am5pL2puaV9pbnN0YW5jZS5jcHAJMjEgQXVnIDIwMDUgMDU6MjY6MjcgLTAwMDAKQEAgLTI2Nyw3
ICsyNjcsNyBAQCBWYWx1ZUltcCAqSmF2YUluc3RhbmNlOjppbnZva2VNZXRob2QgKEV4CiAgICAg
ICAgIGJyZWFrOwogICAgICAgICAKICAgICAgICAgY2FzZSBsb25nX3R5cGU6IHsKLSAgICAgICAg
ICAgIHJlc3VsdFZhbHVlID0gTnVtYmVyKChsb25nIGludClyZXN1bHQuaik7CisgICAgICAgICAg
ICByZXN1bHRWYWx1ZSA9IGpzTnVtYmVyKHJlc3VsdC5qKTsKICAgICAgICAgfQogICAgICAgICBi
cmVhazsKICAgICAgICAgCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX2pz
b2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUv
YmluZGluZ3Mvam5pL2puaV9qc29iamVjdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIK
ZGlmZiAtcCAtdSAtcjEuMTIgSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvam5pL2puaV9qc29iamVj
dC5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2puaS9qbmlfanNvYmplY3QuY3BwCTgg
QXVnIDIwMDUgMDQ6MDc6MjQgLTAwMDAJMS4xMgorKysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mv
am5pL2puaV9qc29iamVjdC5jcHAJMjEgQXVnIDIwMDUgMDU6MjY6MjcgLTAwMDAKQEAgLTQyNSw3
ICs0MjUsNyBAQCBWYWx1ZUltcCAqSlNPYmplY3Q6OmNvbnZlcnRKT2JqZWN0VG9WYWx1CiAgICAg
ICAgIC8vIFB1bGwgdGhlIG5hdGl2ZUpTT2JqZWN0IHZhbHVlIGZyb20gdGhlIEphdmEgaW5zdGFu
Y2UuICBUaGlzIGlzIGEKICAgICAgICAgLy8gcG9pbnRlciB0byB0aGUgT2JqZWN0SW1wLgogICAg
ICAgICBKTklFbnYgKmVudiA9IGdldEpOSUVudigpOwotICAgICAgICBqZmllbGRJRCBmaWVsZElE
ID0gZW52LT5HZXRGaWVsZElEKChqY2xhc3MpY2xhc3NPZkluc3RhbmNlLCAibmF0aXZlSlNPYmpl
Y3QiLCAibG9uZyIpOworICAgICAgICBqZmllbGRJRCBmaWVsZElEID0gZW52LT5HZXRGaWVsZElE
KChqY2xhc3MpY2xhc3NPZkluc3RhbmNlLCAibmF0aXZlSlNPYmplY3QiLCAiaW50Iik7CiAgICAg
ICAgIGlmIChmaWVsZElEID09IE5VTEwpIHsKICAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQo
KTsKICAgICAgICAgfQpAQCAtNDQ3LDcgKzQ0Nyw3IEBAIFZhbHVlSW1wICpKU09iamVjdDo6Y29u
dmVydEpPYmplY3RUb1ZhbHUKIExpc3QgSlNPYmplY3Q6Omxpc3RGcm9tSkFycmF5KGpvYmplY3RB
cnJheSBqQXJyYXkpIGNvbnN0CiB7CiAgICAgSk5JRW52ICplbnYgPSBnZXRKTklFbnYoKTsKLSAg
ICBsb25nIGksIG51bU9iamVjdHMgPSBqQXJyYXkgPyBlbnYtPkdldEFycmF5TGVuZ3RoIChqQXJy
YXkpIDogMDsKKyAgICBpbnQgaSwgbnVtT2JqZWN0cyA9IGpBcnJheSA/IGVudi0+R2V0QXJyYXlM
ZW5ndGggKGpBcnJheSkgOiAwOwogICAgIExpc3QgYUxpc3Q7CiAgICAgCiAgICAgZm9yIChpID0g
MDsgaSA8IG51bU9iamVjdHM7IGkrKykgewpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mv
am5pL2puaV9ydW50aW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNj
cmlwdENvcmUvYmluZGluZ3Mvam5pL2puaV9ydW50aW1lLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4yOApkaWZmIC1wIC11IC1yMS4yOCBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5p
X3J1bnRpbWUuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX3J1bnRpbWUu
Y3BwCTE2IEF1ZyAyMDA1IDAwOjQ3OjIyIC0wMDAwCTEuMjgKKysrIEphdmFTY3JpcHRDb3JlL2Jp
bmRpbmdzL2puaS9qbmlfcnVudGltZS5jcHAJMjEgQXVnIDIwMDUgMDU6MjY6MjggLTAwMDAKQEAg
LTI5Nyw3ICsyOTcsNyBAQCBKYXZhTWV0aG9kOjpKYXZhTWV0aG9kIChKTklFbnYgKmVudiwgam9i
CiAgICAgX21ldGhvZElEID0gMDsKICAgICAKICAgICBqY2xhc3MgbW9kaWZpZXJDbGFzcyA9IGVu
di0+RmluZENsYXNzKCJqYXZhL2xhbmcvcmVmbGVjdC9Nb2RpZmllciIpOwotICAgIGxvbmcgbW9k
aWZpZXJzID0gY2FsbEpOSUludE1ldGhvZCAoYU1ldGhvZCwgImdldE1vZGlmaWVycyIsICIoKUki
KTsKKyAgICBpbnQgbW9kaWZpZXJzID0gY2FsbEpOSUludE1ldGhvZCAoYU1ldGhvZCwgImdldE1v
ZGlmaWVycyIsICIoKUkiKTsKICAgICBfaXNTdGF0aWMgPSAoYm9vbCljYWxsSk5JU3RhdGljQm9v
bGVhbk1ldGhvZCAobW9kaWZpZXJDbGFzcywgImlzU3RhdGljIiwgIihJKVoiLCBtb2RpZmllcnMp
OwogfQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX3J1bnRpbWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvam5p
L2puaV9ydW50aW1lLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjYKZGlmZiAtcCAtdSAtcjEu
MjYgSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvam5pL2puaV9ydW50aW1lLmgKLS0tIEphdmFTY3Jp
cHRDb3JlL2JpbmRpbmdzL2puaS9qbmlfcnVudGltZS5oCTggQXVnIDIwMDUgMDQ6MDc6MjQgLTAw
MDAJMS4yNgorKysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvam5pL2puaV9ydW50aW1lLmgJMjEg
QXVnIDIwMDUgMDU6MjY6MjggLTAwMDAKQEAgLTEyNCw3ICsxMjQsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBfY29tbW9uQ29weShjb25zdCBKYXZhQ29uc3RydWN0b3IgJm90aGVyKSB7CiAgICAgICAg
IF9udW1QYXJhbWV0ZXJzID0gb3RoZXIuX251bVBhcmFtZXRlcnM7CiAgICAgICAgIF9wYXJhbWV0
ZXJzID0gbmV3IEphdmFQYXJhbWV0ZXJbX251bVBhcmFtZXRlcnNdOwotICAgICAgICBsb25nIGk7
CisgICAgICAgIGludCBpOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgX251bVBhcmFtZXRlcnM7
IGkrKykgewogICAgICAgICAgICAgX3BhcmFtZXRlcnNbaV0gPSBvdGhlci5fcGFyYW1ldGVyc1tp
XTsKICAgICAgICAgfQpAQCAtMTQ2LDEyICsxNDYsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gKnRoaXM7CiAgICAgfQogCi0gICAgdmlydHVhbCBQYXJhbWV0ZXIgKnBhcmFtZXRlckF0KGxv
bmcgaSkgY29uc3QgeyByZXR1cm4gJl9wYXJhbWV0ZXJzW2ldOyB9OwotICAgIHZpcnR1YWwgbG9u
ZyBudW1QYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gX251bVBhcmFtZXRlcnM7IH07CisgICAg
dmlydHVhbCBQYXJhbWV0ZXIgKnBhcmFtZXRlckF0KGludCBpKSBjb25zdCB7IHJldHVybiAmX3Bh
cmFtZXRlcnNbaV07IH07CisgICAgdmlydHVhbCBpbnQgbnVtUGFyYW1ldGVycygpIGNvbnN0IHsg
cmV0dXJuIF9udW1QYXJhbWV0ZXJzOyB9OwogICAgIAogcHJpdmF0ZToKICAgICBKYXZhUGFyYW1l
dGVyICpfcGFyYW1ldGVyczsKLSAgICBsb25nIF9udW1QYXJhbWV0ZXJzOworICAgIGludCBfbnVt
UGFyYW1ldGVyczsKIH07CiAKIApAQCAtMjIyLDcgKzIyMiw3IEBAIHB1YmxpYzoKIAogICAgICAg
ICBfbnVtUGFyYW1ldGVycyA9IG90aGVyLl9udW1QYXJhbWV0ZXJzOwogICAgICAgICBfcGFyYW1l
dGVycyA9IG5ldyBKYXZhUGFyYW1ldGVyW19udW1QYXJhbWV0ZXJzXTsKLSAgICAgICAgbG9uZyBp
OworICAgICAgICBpbnQgaTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IF9udW1QYXJhbWV0ZXJz
OyBpKyspIHsKICAgICAgICAgICAgIF9wYXJhbWV0ZXJzW2ldID0gb3RoZXIuX3BhcmFtZXRlcnNb
aV07CiAgICAgICAgIH0KQEAgLTI0Niw4ICsyNDYsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IGNvbnN0IGNoYXIgKm5hbWUoKSBjb25zdCB7IHJldHVybiBfbmFtZS5VVEY4U3RyaW5nKCk7IH07
CiAgICAgUnVudGltZVR5cGUgcmV0dXJuVHlwZSgpIGNvbnN0IHsgcmV0dXJuIF9yZXR1cm5UeXBl
LlVURjhTdHJpbmcoKTsgfTsKLSAgICB2aXJ0dWFsIFBhcmFtZXRlciAqcGFyYW1ldGVyQXQobG9u
ZyBpKSBjb25zdCB7IHJldHVybiAmX3BhcmFtZXRlcnNbaV07IH07Ci0gICAgdmlydHVhbCBsb25n
IG51bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBfbnVtUGFyYW1ldGVyczsgfTsKKyAgICB2
aXJ0dWFsIFBhcmFtZXRlciAqcGFyYW1ldGVyQXQoaW50IGkpIGNvbnN0IHsgcmV0dXJuICZfcGFy
YW1ldGVyc1tpXTsgfTsKKyAgICB2aXJ0dWFsIGludCBudW1QYXJhbWV0ZXJzKCkgY29uc3QgeyBy
ZXR1cm4gX251bVBhcmFtZXRlcnM7IH07CiAgICAgCiAgICAgY29uc3QgY2hhciAqc2lnbmF0dXJl
KCkgY29uc3Q7CiAgICAgSk5JVHlwZSBKTklSZXR1cm5UeXBlKCkgY29uc3Q7CkBAIC0yNTgsNyAr
MjU4LDcgQEAgcHVibGljOgogCQogcHJpdmF0ZToKICAgICBKYXZhUGFyYW1ldGVyICpfcGFyYW1l
dGVyczsKLSAgICBsb25nIF9udW1QYXJhbWV0ZXJzOworICAgIGludCBfbnVtUGFyYW1ldGVyczsK
ICAgICBKYXZhU3RyaW5nIF9uYW1lOwogICAgIG11dGFibGUgVVN0cmluZyAqX3NpZ25hdHVyZTsK
ICAgICBKYXZhU3RyaW5nIF9yZXR1cm5UeXBlOwpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjIyCmRpZmYgLXAgLXUgLXIxLjIyIEphdmFTY3JpcHRDb3JlL2JpbmRp
bmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCi0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9v
YmpjL1dlYlNjcmlwdE9iamVjdC5tbQkxNiBBdWcgMjAwNSAwMDo0NzoyMyAtMDAwMAkxLjIyCisr
KyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQkyMSBBdWcg
MjAwNSAwNToyNjoyOCAtMDAwMApAQCAtMTY5LDcgKzE2OSw3IEBAIHN0YXRpYyB2b2lkIF9kaWRF
eGVjdXRlKFdlYlNjcmlwdE9iamVjdCAKIAogc3RhdGljIExpc3QgbGlzdEZyb21OU0FycmF5KEV4
ZWNTdGF0ZSAqZXhlYywgTlNBcnJheSAqYXJyYXkpCiB7Ci0gICAgbG9uZyBpLCBudW1PYmplY3Rz
ID0gYXJyYXkgPyBbYXJyYXkgY291bnRdIDogMDsKKyAgICBpbnQgaSwgbnVtT2JqZWN0cyA9IGFy
cmF5ID8gW2FycmF5IGNvdW50XSA6IDA7CiAgICAgTGlzdCBhTGlzdDsKICAgICAKICAgICBmb3Ig
KGkgPSAwOyBpIDwgbnVtT2JqZWN0czsgaSsrKSB7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5k
aW5ncy9vYmpjL29iamNfY2xhc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2
YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX2NsYXNzLmgsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuNQpkaWZmIC1wIC11IC1yMS41IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2Jq
Y19jbGFzcy5oCi0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL29iamNfY2xhc3MuaAkx
NiBBdWcgMjAwNSAwMDo0NzoyMyAtMDAwMAkxLjUKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdz
L29iamMvb2JqY19jbGFzcy5oCTIxIEF1ZyAyMDA1IDA1OjI2OjI4IC0wMDAwCkBAIC03MCw4ICs3
MCw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgVmFsdWVJbXAgKmZhbGxiYWNrT2JqZWN0KEV4
ZWNTdGF0ZSAqZXhlYywgSW5zdGFuY2UgKmluc3RhbmNlLCBjb25zdCBJZGVudGlmaWVyICZwcm9w
ZXJ0eU5hbWUpOwogICAgIAotICAgIHZpcnR1YWwgQ29uc3RydWN0b3IgKmNvbnN0cnVjdG9yQXQo
bG9uZyBpKSBjb25zdCB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBsb25nIG51bUNvbnN0cnVj
dG9ycygpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIENvbnN0cnVjdG9yICpjb25z
dHJ1Y3RvckF0KGludCBpKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBpbnQgbnVt
Q29uc3RydWN0b3JzKCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIAogICAgIENsYXNzU3RydWN0
UHRyIGlzYSgpIHsgcmV0dXJuIF9pc2E7IH0KICAgICAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2Jp
bmRpbmdzL29iamMvb2JqY19pbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL29iamNfaW5zdGFuY2UuaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS43CmRpZmYgLXAgLXUgLXIxLjcgSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mv
b2JqYy9vYmpjX2luc3RhbmNlLmgKLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2Jq
Y19pbnN0YW5jZS5oCTggQXVnIDIwMDUgMDQ6MDc6MjYgLTAwMDAJMS43CisrKyBKYXZhU2NyaXB0
Q29yZS9iaW5kaW5ncy9vYmpjL29iamNfaW5zdGFuY2UuaAkyMSBBdWcgMjAwNSAwNToyNjoyOSAt
MDAwMApAQCAtNzYsNyArNzYsNyBAQCBwcml2YXRlOgogICAgIE9iamVjdFN0cnVjdFB0ciBfaW5z
dGFuY2U7CiAgICAgbXV0YWJsZSBPYmpjQ2xhc3MgKl9jbGFzczsKICAgICBPYmplY3RTdHJ1Y3RQ
dHIgX3Bvb2w7Ci0gICAgbG9uZyBfYmVnaW5Db3VudDsKKyAgICBpbnQgX2JlZ2luQ291bnQ7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBCaW5kaW5ncwpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3Mvb2JqYy9vYmpjX3J1bnRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2
YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX3J1bnRpbWUuaCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4xNApkaWZmIC1wIC11IC1yMS4xNCBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpj
L29iamNfcnVudGltZS5oCi0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL29iamNfcnVu
dGltZS5oCTE2IEF1ZyAyMDA1IDAwOjQ3OjIzIC0wMDAwCTEuMTQKKysrIEphdmFTY3JpcHRDb3Jl
L2JpbmRpbmdzL29iamMvb2JqY19ydW50aW1lLmgJMjEgQXVnIDIwMDUgMDU6MjY6MjkgLTAwMDAK
QEAgLTExOCw3ICsxMTgsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKm5h
bWUoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgbG9uZyBudW1QYXJhbWV0ZXJzKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBpbnQgbnVtUGFyYW1ldGVycygpIGNvbnN0OwogCiAgICAgTlNNZXRob2RTaWdu
YXR1cmUgKmdldE1ldGhvZFNpZ25hdHVyZSgpIGNvbnN0OwogICAgIApJbmRleDogSmF2YVNjcmlw
dENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX3J1bnRpbWUubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY19ydW50aW1lLm1tLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjIwCmRpZmYgLXAgLXUgLXIxLjIwIEphdmFTY3JpcHRDb3Jl
L2JpbmRpbmdzL29iamMvb2JqY19ydW50aW1lLm1tCi0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5n
cy9vYmpjL29iamNfcnVudGltZS5tbQkxNiBBdWcgMjAwNSAwMDo0NzoyMyAtMDAwMAkxLjIwCisr
KyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL29iamNfcnVudGltZS5tbQkyMSBBdWcgMjAw
NSAwNToyNjoyOSAtMDAwMApAQCAtNTEsNyArNTEsNyBAQCBjb25zdCBjaGFyICpPYmpjTWV0aG9k
OjpuYW1lKCkgY29uc3QKICAgICByZXR1cm4gKGNvbnN0IGNoYXIgKilfc2VsZWN0b3I7CiB9CiAK
LWxvbmcgT2JqY01ldGhvZDo6bnVtUGFyYW1ldGVycygpIGNvbnN0CitpbnQgT2JqY01ldGhvZDo6
bnVtUGFyYW1ldGVycygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFtnZXRNZXRob2RTaWduYXR1cmUo
KSBudW1iZXJPZkFyZ3VtZW50c10gLSAyOwogfQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2lk
ZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUv
a2pzL2lkZW50aWZpZXIuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNgpkaWZmIC1wIC11IC1y
MS4xNiBKYXZhU2NyaXB0Q29yZS9ranMvaWRlbnRpZmllci5oCi0tLSBKYXZhU2NyaXB0Q29yZS9r
anMvaWRlbnRpZmllci5oCTE5IEF1ZyAyMDA1IDIwOjI0OjE3IC0wMDAwCTEuMTYKKysrIEphdmFT
Y3JpcHRDb3JlL2tqcy9pZGVudGlmaWVyLmgJMjEgQXVnIDIwMDUgMDU6MjY6MzMgLTAwMDAKQEAg
LTUwLDcgKzUwLDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIGJvb2wgaXNOdWxsKCkgY29u
c3QgeyByZXR1cm4gX3VzdHJpbmcuaXNOdWxsKCk7IH0KICAgICAgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gX3VzdHJpbmcuaXNFbXB0eSgpOyB9CiAgICAgICAgIAotICAgICAgICB1
bnNpZ25lZCBsb25nIHRvVUxvbmcoYm9vbCAqb2spIGNvbnN0IHsgcmV0dXJuIF91c3RyaW5nLnRv
VUxvbmcob2spOyB9CiAgICAgICAgIHVpbnQzMl90IHRvVUludDMyKGJvb2wgKm9rKSBjb25zdCB7
IHJldHVybiBfdXN0cmluZy50b1VJbnQzMihvayk7IH0KICAgICAgICAgdWludDMyX3QgdG9TdHJp
Y3RVSW50MzIoYm9vbCAqb2spIGNvbnN0IHsgcmV0dXJuIF91c3RyaW5nLnRvU3RyaWN0VUludDMy
KG9rKTsgfQogICAgICAgICB1bnNpZ25lZCB0b0FycmF5SW5kZXgoYm9vbCAqb2spIGNvbnN0IHsg
cmV0dXJuIF91c3RyaW5nLnRvQXJyYXlJbmRleChvayk7IH0KSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2tqcy9pbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0
Q29yZS9ranMvaW50ZXJuYWwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNApkaWZmIC1wIC11
IC1yMS4zNCBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJuYWwuaAotLS0gSmF2YVNjcmlwdENvcmUv
a2pzL2ludGVybmFsLmgJMTQgQXVnIDIwMDUgMTY6NDE6NDcgLTAwMDAJMS4zNAorKysgSmF2YVNj
cmlwdENvcmUva2pzL2ludGVybmFsLmgJMjEgQXVnIDIwMDUgMDU6MjY6MzQgLTAwMDAKQEAgLTEx
MCw2ICsxMTAsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBmcmllbmQgVmFsdWVJbXAgKmpzTnVt
YmVyKHVuc2lnbmVkKTsKICAgICBmcmllbmQgVmFsdWVJbXAgKmpzTnVtYmVyKGxvbmcpOwogICAg
IGZyaWVuZCBWYWx1ZUltcCAqanNOdW1iZXIodW5zaWduZWQgbG9uZyk7CisgICAgZnJpZW5kIFZh
bHVlSW1wICpqc051bWJlcihsb25nIGxvbmcpOworICAgIGZyaWVuZCBWYWx1ZUltcCAqanNOdW1i
ZXIodW5zaWduZWQgbG9uZyBsb25nKTsKICAgICBmcmllbmQgVmFsdWVJbXAgKmpzTnVtYmVyKGRv
dWJsZSk7CiAgICAgZnJpZW5kIFZhbHVlSW1wICpqc051bWJlcihkb3VibGUsIGJvb2wpOwogICBw
dWJsaWM6CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfc2xvdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfc2xvdC5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQKZGlmZiAtcCAtdSAtcjEuNCBKYXZhU2NyaXB0Q29y
ZS9ranMvcHJvcGVydHlfc2xvdC5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfc2xv
dC5oCTE5IEF1ZyAyMDA1IDE2OjAxOjU1IC0wMDAwCTEuNAorKysgSmF2YVNjcmlwdENvcmUva2pz
L3Byb3BlcnR5X3Nsb3QuaAkyMSBBdWcgMjAwNSAwNToyNjozNCAtMDAwMApAQCAtNzQsNyArNzQs
NyBAQCBwdWJsaWM6CiAgICAgICAgIG1fZ2V0VmFsdWUgPSBnZXRWYWx1ZTsKICAgICB9CiAKLSAg
ICB2b2lkIHNldEN1c3RvbUluZGV4KE9iamVjdEltcCAqc2xvdEJhc2UsIHVuc2lnbmVkIGxvbmcg
aW5kZXgsIEdldFZhbHVlRnVuYyBnZXRWYWx1ZSkKKyAgICB2b2lkIHNldEN1c3RvbUluZGV4KE9i
amVjdEltcCAqc2xvdEJhc2UsIHVuc2lnbmVkIGluZGV4LCBHZXRWYWx1ZUZ1bmMgZ2V0VmFsdWUp
CiAgICAgewogICAgICAgICBhc3NlcnQoZ2V0VmFsdWUpOwogICAgICAgICBtX3Nsb3RCYXNlID0g
c2xvdEJhc2U7CkBAIC05MSw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICBPYmplY3RJbXAgKnNsb3RC
YXNlKCkgY29uc3QgeyByZXR1cm4gbV9zbG90QmFzZTsgfQogCiAgICAgY29uc3QgSGFzaEVudHJ5
ICpzdGF0aWNFbnRyeSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5zdGF0aWNFbnRyeTsgfQotICAg
IHVuc2lnbmVkIGxvbmcgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuaW5kZXg7IH0KKyAg
ICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5pbmRleDsgfQogCiBwcml2
YXRlOgogICAgIHN0YXRpYyBWYWx1ZUltcCAqdW5kZWZpbmVkR2V0dGVyKEV4ZWNTdGF0ZSAqLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CkBAIC0xMDIsNyArMTAyLDcg
QEAgcHJpdmF0ZToKICAgICB1bmlvbiB7CiAgICAgICAgIFZhbHVlSW1wICoqdmFsdWVTbG90Owog
ICAgICAgICBjb25zdCBIYXNoRW50cnkgKnN0YXRpY0VudHJ5OwotICAgICAgICB1bnNpZ25lZCBs
b25nIGluZGV4OworICAgICAgICB1bnNpZ25lZCBpbmRleDsKICAgICB9IG1fZGF0YTsKIH07CiAK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9yZWdleHBfb2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL3JlZ2V4cF9vYmplY3QuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjIyCmRpZmYgLXAgLXUgLXIxLjIyIEphdmFTY3JpcHRDb3Jl
L2tqcy9yZWdleHBfb2JqZWN0LmNwcAotLS0gSmF2YVNjcmlwdENvcmUva2pzL3JlZ2V4cF9vYmpl
Y3QuY3BwCTE2IEF1ZyAyMDA1IDAwOjQ3OjI2IC0wMDAwCTEuMjIKKysrIEphdmFTY3JpcHRDb3Jl
L2tqcy9yZWdleHBfb2JqZWN0LmNwcAkyMSBBdWcgMjAwNSAwNToyNjozNyAtMDAwMApAQCAtMjE0
LDcgKzIxNCw3IEBAIE9iamVjdEltcCAqUmVnRXhwT2JqZWN0SW1wOjphcnJheU9mTWF0Y2gKIFZh
bHVlSW1wICpSZWdFeHBPYmplY3RJbXA6OmJhY2tyZWZHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkK
IHsKICAgUmVnRXhwT2JqZWN0SW1wICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8UmVnRXhwT2JqZWN0
SW1wICo+KHNsb3Quc2xvdEJhc2UoKSk7Ci0gIHVuc2lnbmVkIGxvbmcgaSA9IHNsb3QuaW5kZXgo
KTsKKyAgdW5zaWduZWQgaSA9IHNsb3QuaW5kZXgoKTsKIAogICBpZiAoaSA8IHRoaXNPYmotPmxh
c3ROclN1YlBhdHRlcm5zICsgMSkgewogICAgIGludCAqbGFzdE92ZWN0b3IgPSB0aGlzT2JqLT5s
YXN0T3ZlY3RvcjsKQEAgLTIzMSw5ICsyMzEsOCBAQCBib29sIFJlZ0V4cE9iamVjdEltcDo6Z2V0
T3duUHJvcGVydHlTbG90CiAgIGlmIChzWzBdID09ICckJyAmJiBsYXN0T3ZlY3RvcikKICAgewog
ICAgIGJvb2wgb2s7Ci0gICAgdW5zaWduZWQgbG9uZyBpID0gcy5zdWJzdHIoMSkudG9VTG9uZygm
b2spOwotICAgIGlmIChvaykKLSAgICB7CisgICAgdW5zaWduZWQgaSA9IHMuc3Vic3RyKDEpLnRv
VUludDMyKCZvayk7CisgICAgaWYgKG9rKSB7CiAgICAgICBzbG90LnNldEN1c3RvbUluZGV4KHRo
aXMsIGksIGJhY2tyZWZHZXR0ZXIpOwogICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDog
SmF2YVNjcmlwdENvcmUva2pzL3NpbXBsZV9udW1iZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL3NpbXBsZV9udW1iZXIuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xMQpkaWZmIC1wIC11IC1yMS4xMSBKYXZhU2NyaXB0Q29yZS9ranMvc2ltcGxl
X251bWJlci5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvc2ltcGxlX251bWJlci5oCTE0IEp1bCAy
MDA1IDE4OjI3OjAzIC0wMDAwCTEuMTEKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9zaW1wbGVfbnVt
YmVyLmgJMjEgQXVnIDIwMDUgMDU6MjY6MzcgLTAwMDAKQEAgLTEsNCArMSwzIEBACi0vLyAtKi0g
Yy1iYXNpYy1vZmZzZXQ6IDIgLSotCiAvKgogICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBL
REUgbGlicmFyaWVzCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMK
QEAgLTIwLDMxICsxOSw0MyBAQAogICoKICAqLwogCi0jaWZuZGVmIF9LSlNfU0lNUExFX05VTUJF
Ul9IXwotI2RlZmluZSBfS0pTX1NJTVBMRV9OVU1CRVJfSF8KKyNpZm5kZWYgS0pTX1NJTVBMRV9O
VU1CRVJfSAorI2RlZmluZSBLSlNfU0lNUExFX05VTUJFUl9ICiAKICNpbmNsdWRlIDxtYXRoLmg+
CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKLSNkZWZpbmUgSVNfTkVHQVRJVkVfWkVSTyhudW0pIChu
dW0gPT0gMC4wICYmICFtZW1jbXAoJm51bSwgJlNpbXBsZU51bWJlcjo6bmVnWmVybywgc2l6ZW9m
KGRvdWJsZSkpKQorI2RlZmluZSBLSlNfSVNfTkVHQVRJVkVfWkVSTyhudW0pIChudW0gPT0gMC4w
ICYmICFtZW1jbXAoJm51bSwgJlNpbXBsZU51bWJlcjo6bmVnWmVybywgc2l6ZW9mKGRvdWJsZSkp
KQorI2RlZmluZSBLSlNfTUlOX01BQ1JPKGEsIGIpICgoYSkgPCAoYikgPyAoYSkgOiAoYikpCiAK
IG5hbWVzcGFjZSBLSlMgewogICAgIGNsYXNzIFZhbHVlSW1wOwogCiAgICAgY2xhc3MgU2ltcGxl
TnVtYmVyIHsKICAgICBwdWJsaWM6Ci0JZW51bSB7IHRhZyA9IDEsIHNoaWZ0ID0gMiwgbWFzayA9
ICgxIDw8IHNoaWZ0KSAtIDEsIHNpZ24gPSAxTCA8PCAoc2l6ZW9mKGxvbmcpICogOCAtIDEgKSwg
bWF4ID0gKDFMIDw8ICgoc2l6ZW9mKGxvbmcpICogOCAtIDEpIC0gc2hpZnQpKSAtIDEsIG1pbiA9
IC1tYXggLSAxLCBpbWF4ID0gKDFMIDw8ICgoc2l6ZW9mKGludCkgKiA4IC0gMSkgLSBzaGlmdCkp
IC0gMSwgaW1pbiA9IC1pbWF4IC0gMSB9OworCWVudW0geworICAgICAgICAgICAgdGFnID0gMSwK
KyAgICAgICAgICAgIHNoaWZ0ID0gMiwKKyAgICAgICAgICAgIG1hc2sgPSAoMSA8PCBzaGlmdCkg
LSAxLAorICAgICAgICAgICAgYml0cyA9IEtKU19NSU5fTUFDUk8oc2l6ZW9mKFZhbHVlSW1wICop
ICogOCAtIHNoaWZ0LCBzaXplb2YobG9uZykgKiA4KSwKKyAgICAgICAgICAgIHNpZ24gPSAxVUwg
PDwgKGJpdHMgKyBzaGlmdCAtIDEpLAorICAgICAgICAgICAgdW1heCA9IHNpZ24gPj4gMSwKKyAg
ICAgICAgICAgIHNtYXggPSBzdGF0aWNfY2FzdDxsb25nPih1bWF4KSwKKyAgICAgICAgICAgIHNt
aW4gPSBzdGF0aWNfY2FzdDxsb25nPigtdW1heCAtIDEpCisgICAgICAgIH07CiAKIAlzdGF0aWMg
aW5saW5lIGJvb2wgaXMoY29uc3QgVmFsdWVJbXAgKmltcCkgeyByZXR1cm4gKChsb25nKWltcCAm
IG1hc2spID09IHRhZzsgfQotCXN0YXRpYyBpbmxpbmUgbG9uZyB2YWx1ZShjb25zdCBWYWx1ZUlt
cCAqaW1wKSB7IHJldHVybiAoKGxvbmcpaW1wID4+IHNoaWZ0KSB8ICgoKGxvbmcpaW1wICYgc2ln
bikgPyB+bWF4IDogMCk7IH0KKwlzdGF0aWMgaW5saW5lIGxvbmcgdmFsdWUoY29uc3QgVmFsdWVJ
bXAgKmltcCkgeyByZXR1cm4gKChsb25nKWltcCA+PiBzaGlmdCkgfCAoKChsb25nKWltcCAmIHNp
Z24pID8gfnVtYXggOiAwKTsgfQogCi0Jc3RhdGljIGlubGluZSBib29sIGZpdHMoaW50IGkpIHsg
cmV0dXJuIGkgPD0gaW1heCAmJiBpID49IGltaW47IH0KLQlzdGF0aWMgaW5saW5lIGJvb2wgZml0
cyh1bnNpZ25lZCBpKSB7IHJldHVybiBpIDw9ICh1bnNpZ25lZCltYXg7IH0KLQlzdGF0aWMgaW5s
aW5lIGJvb2wgZml0cyhsb25nIGkpIHsgcmV0dXJuIGkgPD0gbWF4ICYmIGkgPj0gbWluOyB9Ci0J
c3RhdGljIGlubGluZSBib29sIGZpdHModW5zaWduZWQgbG9uZyBpKSB7IHJldHVybiBpIDw9ICh1
bnNpZ25lZCltYXg7IH0KLQlzdGF0aWMgaW5saW5lIGJvb2wgaW50ZWdlckZpdHMoZG91YmxlIGQp
IHsgcmV0dXJuICEoZCA8IG1pbiB8fCBkID4gbWF4KTsgfQotCXN0YXRpYyBpbmxpbmUgYm9vbCBm
aXRzKGRvdWJsZSBkKSB7IHJldHVybiBkID49IG1pbiAmJiBkIDw9IG1heCAmJiBkID09IChkb3Vi
bGUpKGxvbmcpZCAmJiAhSVNfTkVHQVRJVkVfWkVSTyhkKTsgfQotCXN0YXRpYyBpbmxpbmUgVmFs
dWVJbXAgKm1ha2UobG9uZyBpKSB7IHJldHVybiAoVmFsdWVJbXAgKikoKGkgPDwgc2hpZnQpIHwg
dGFnKTsgfQorCXN0YXRpYyBpbmxpbmUgYm9vbCBmaXRzKGludCBpKSB7IHJldHVybiBpIDw9IHNt
YXggJiYgaSA+PSBzbWluOyB9CisJc3RhdGljIGlubGluZSBib29sIGZpdHModW5zaWduZWQgaSkg
eyByZXR1cm4gaSA8PSB1bWF4OyB9CisJc3RhdGljIGlubGluZSBib29sIGZpdHMobG9uZyBpKSB7
IHJldHVybiBpIDw9IHNtYXggJiYgaSA+PSBzbWluOyB9CisJc3RhdGljIGlubGluZSBib29sIGZp
dHModW5zaWduZWQgbG9uZyBpKSB7IHJldHVybiBpIDw9IHVtYXg7IH0KKwlzdGF0aWMgaW5saW5l
IGJvb2wgZml0cyhsb25nIGxvbmcgaSkgeyByZXR1cm4gaSA8PSBzbWF4ICYmIGkgPj0gc21pbjsg
fQorCXN0YXRpYyBpbmxpbmUgYm9vbCBmaXRzKHVuc2lnbmVkIGxvbmcgbG9uZyBpKSB7IHJldHVy
biBpIDw9IHVtYXg7IH0KKwlzdGF0aWMgaW5saW5lIGJvb2wgaW50ZWdlckZpdHMoZG91YmxlIGQp
IHsgcmV0dXJuICEoZCA8IHNtaW4gfHwgZCA+IHNtYXgpOyB9CisJc3RhdGljIGlubGluZSBib29s
IGZpdHMoZG91YmxlIGQpIHsgcmV0dXJuIGQgPj0gc21pbiAmJiBkIDw9IHNtYXggJiYgZCA9PSAo
ZG91YmxlKShsb25nKWQgJiYgIUtKU19JU19ORUdBVElWRV9aRVJPKGQpOyB9CisJc3RhdGljIGlu
bGluZSBWYWx1ZUltcCAqbWFrZShsb25nIGkpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VmFs
dWVJbXAgKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigoaSA8PCBzaGlmdCkgfCB0YWcpKTsgfQog
CiAJc3RhdGljIGRvdWJsZSBuZWdaZXJvOwogICAgIH07CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9r
anMvc3RyaW5nX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFT
Y3JpcHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40
MwpkaWZmIC1wIC11IC1yMS40MyBKYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5jcHAK
LS0tIEphdmFTY3JpcHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0LmNwcAkxNiBBdWcgMjAwNSAwMDo0
NzoyNiAtMDAwMAkxLjQzCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5jcHAJ
MjEgQXVnIDIwMDUgMDU6MjY6MzcgLTAwMDAKQEAgLTI0Miw3ICsyNDIsNyBAQCBzdGF0aWMgaW5s
aW5lIFVTdHJpbmcgc3Vic3RpdHV0ZUJhY2tyZWZlCiAgICAgICBjb250aW51ZTsKICAgICB9CiAg
ICAgLy8gQXNzdW1lIG51bWJlciBwYXJ0IGlzIG9uZSBjaGFyIGV4YWN0bHkKLSAgICB1bnNpZ25l
ZCBsb25nIGJhY2tyZWZJbmRleCA9IHN1YnN0aXR1dGVkUmVwbGFjZW1lbnQuc3Vic3RyKGkrMSwx
KS50b1VMb25nKCZjb252ZXJ0ZWQsIGZhbHNlIC8qIHRvbGVyYXRlIGVtcHR5IHN0cmluZyAqLyk7
CisgICAgdW5zaWduZWQgYmFja3JlZkluZGV4ID0gc3Vic3RpdHV0ZWRSZXBsYWNlbWVudC5zdWJz
dHIoaSsxLDEpLnRvVUludDMyKCZjb252ZXJ0ZWQsIGZhbHNlIC8qIHRvbGVyYXRlIGVtcHR5IHN0
cmluZyAqLyk7CiAgICAgaWYgKGNvbnZlcnRlZCAmJiBiYWNrcmVmSW5kZXggPD0gKHVuc2lnbmVk
KXJlZy0+c3ViUGF0dGVybnMoKSkgewogICAgICAgaW50IGJhY2tyZWZTdGFydCA9ICgqb3ZlY3Rv
cilbMipiYWNrcmVmSW5kZXhdOwogICAgICAgaW50IGJhY2tyZWZMZW5ndGggPSAoKm92ZWN0b3Ip
WzIqYmFja3JlZkluZGV4KzFdIC0gYmFja3JlZlN0YXJ0OwpJbmRleDogSmF2YVNjcmlwdENvcmUv
a2pzL3VzdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0
Q29yZS9ranMvdXN0cmluZy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTkKZGlmZiAtcCAt
dSAtcjEuNTkgSmF2YVNjcmlwdENvcmUva2pzL3VzdHJpbmcuY3BwCi0tLSBKYXZhU2NyaXB0Q29y
ZS9ranMvdXN0cmluZy5jcHAJMTkgQXVnIDIwMDUgMjA6MjQ6MTcgLTAwMDAJMS41OQorKysgSmF2
YVNjcmlwdENvcmUva2pzL3VzdHJpbmcuY3BwCTIxIEF1ZyAyMDA1IDA1OjI2OjM4IC0wMDAwCkBA
IC00ODgsMTMgKzQ4OCwzOCBAQCBjb25zdCBVU3RyaW5nICZVU3RyaW5nOjpudWxsKCkKIAogVVN0
cmluZyBVU3RyaW5nOjpmcm9tKGludCBpKQogewotICByZXR1cm4gZnJvbSgobG9uZylpKTsKKyAg
VUNoYXIgYnVmWzEgKyBzaXplb2YoaSkgKiAzXTsKKyAgVUNoYXIgKmVuZCA9IGJ1ZiArIHNpemVv
ZihidWYpIC8gc2l6ZW9mKFVDaGFyKTsKKyAgVUNoYXIgKnAgPSBlbmQ7CisgIAorICBpZiAoaSA9
PSAwKSB7CisgICAgKi0tcCA9ICcwJzsKKyAgfSBlbHNlIGlmIChpID09IElOVF9NSU4pIHsKKyAg
ICBjaGFyIG1pbkJ1ZlsxICsgc2l6ZW9mKGkpICogM107CisgICAgc3ByaW50ZihtaW5CdWYsICIl
ZCIsIElOVF9NSU4pOworICAgIHJldHVybiBVU3RyaW5nKG1pbkJ1Zik7CisgIH0gZWxzZSB7Cisg
ICAgYm9vbCBuZWdhdGl2ZSA9IGZhbHNlOworICAgIGlmIChpIDwgMCkgeworICAgICAgbmVnYXRp
dmUgPSB0cnVlOworICAgICAgaSA9IC1pOworICAgIH0KKyAgICB3aGlsZSAoaSkgeworICAgICAg
Ki0tcCA9ICh1bnNpZ25lZCBzaG9ydCkoKGkgJSAxMCkgKyAnMCcpOworICAgICAgaSAvPSAxMDsK
KyAgICB9CisgICAgaWYgKG5lZ2F0aXZlKSB7CisgICAgICAqLS1wID0gJy0nOworICAgIH0KKyAg
fQorICAKKyAgcmV0dXJuIFVTdHJpbmcocCwgZW5kIC0gcCk7CiB9CiAKIFVTdHJpbmcgVVN0cmlu
Zzo6ZnJvbSh1bnNpZ25lZCBpbnQgdSkKIHsKLSAgVUNoYXIgYnVmWzIwXTsKLSAgVUNoYXIgKmVu
ZCA9IGJ1ZiArIDIwOworICBVQ2hhciBidWZbc2l6ZW9mKHUpICogM107CisgIFVDaGFyICplbmQg
PSBidWYgKyBzaXplb2YoYnVmKSAvIHNpemVvZihVQ2hhcik7CiAgIFVDaGFyICpwID0gZW5kOwog
ICAKICAgaWYgKHUgPT0gMCkgewpAQCAtNTExLDE0ICs1MzYsMTQgQEAgVVN0cmluZyBVU3RyaW5n
Ojpmcm9tKHVuc2lnbmVkIGludCB1KQogCiBVU3RyaW5nIFVTdHJpbmc6OmZyb20obG9uZyBsKQog
ewotICBVQ2hhciBidWZbMjBdOwotICBVQ2hhciAqZW5kID0gYnVmICsgMjA7CisgIFVDaGFyIGJ1
ZlsxICsgc2l6ZW9mKGwpICogM107CisgIFVDaGFyICplbmQgPSBidWYgKyBzaXplb2YoYnVmKSAv
IHNpemVvZihVQ2hhcik7CiAgIFVDaGFyICpwID0gZW5kOwogICAKICAgaWYgKGwgPT0gMCkgewog
ICAgICotLXAgPSAnMCc7CiAgIH0gZWxzZSBpZiAobCA9PSBMT05HX01JTikgewotICAgIGNoYXIg
bWluQnVmWzIwXTsKKyAgICBjaGFyIG1pbkJ1ZlsxICsgc2l6ZW9mKGwpICogM107CiAgICAgc3By
aW50ZihtaW5CdWYsICIlbGQiLCBMT05HX01JTik7CiAgICAgcmV0dXJuIFVTdHJpbmcobWluQnVm
KTsKICAgfSBlbHNlIHsKQEAgLTkzOCwxMiArOTYzLDEyIEBAIGRvdWJsZSBVU3RyaW5nOjp0b0Rv
dWJsZSgpIGNvbnN0CiAgIHJldHVybiB0b0RvdWJsZShmYWxzZSwgdHJ1ZSk7CiB9CiAKLXVuc2ln
bmVkIGxvbmcgVVN0cmluZzo6dG9VTG9uZyhib29sICpvaywgYm9vbCB0b2xlcmF0ZUVtcHR5U3Ry
aW5nKSBjb25zdAordWludDMyX3QgVVN0cmluZzo6dG9VSW50MzIoYm9vbCAqb2spIGNvbnN0CiB7
Ci0gIGRvdWJsZSBkID0gdG9Eb3VibGUoZmFsc2UsIHRvbGVyYXRlRW1wdHlTdHJpbmcpOworICBk
b3VibGUgZCA9IHRvRG91YmxlKCk7CiAgIGJvb2wgYiA9IHRydWU7CiAKLSAgaWYgKGlzTmFOKGQp
IHx8IGQgIT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oZCkpIHsKKyAgaWYgKGlzTmFOKGQp
IHx8IGQgIT0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGQpKSB7CiAgICAgYiA9IGZhbHNlOwogICAg
IGQgPSAwOwogICB9CkBAIC05NTEsMTcgKzk3NiwxMiBAQCB1bnNpZ25lZCBsb25nIFVTdHJpbmc6
OnRvVUxvbmcoYm9vbCAqb2ssCiAgIGlmIChvaykKICAgICAqb2sgPSBiOwogCi0gIHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihkKTsKLX0KLQotdW5zaWduZWQgbG9uZyBVU3RyaW5n
Ojp0b1VMb25nKGJvb2wgKm9rKSBjb25zdAotewotICByZXR1cm4gdG9VTG9uZyhvaywgdHJ1ZSk7
CisgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZCk7CiB9CiAKLXVpbnQzMl90IFVTdHJp
bmc6OnRvVUludDMyKGJvb2wgKm9rKSBjb25zdAordWludDMyX3QgVVN0cmluZzo6dG9VSW50MzIo
Ym9vbCAqb2ssIGJvb2wgdG9sZXJhdGVFbXB0eVN0cmluZykgY29uc3QKIHsKLSAgZG91YmxlIGQg
PSB0b0RvdWJsZSgpOworICBkb3VibGUgZCA9IHRvRG91YmxlKGZhbHNlLCB0b2xlcmF0ZUVtcHR5
U3RyaW5nKTsKICAgYm9vbCBiID0gdHJ1ZTsKIAogICBpZiAoaXNOYU4oZCkgfHwgZCAhPSBzdGF0
aWNfY2FzdDx1aW50MzJfdD4oZCkpIHsKQEAgLTEwNDYsNyArMTA2Niw3IEBAIGludCBVU3RyaW5n
OjpmaW5kKGNvbnN0IFVTdHJpbmcgJmYsIGludCAKICAgaWYgKGZzeiA9PSAwKQogICAgIHJldHVy
biBwb3M7CiAgIGNvbnN0IFVDaGFyICplbmQgPSBkYXRhKCkgKyBzeiAtIGZzejsKLSAgbG9uZyBm
c2l6ZW1pbnVzb25lID0gKGZzeiAtIDEpICogc2l6ZW9mKFVDaGFyKTsKKyAgaW50IGZzaXplbWlu
dXNvbmUgPSAoZnN6IC0gMSkgKiBzaXplb2YoVUNoYXIpOwogICBjb25zdCBVQ2hhciAqZmRhdGEg
PSBmLmRhdGEoKTsKICAgdW5zaWduZWQgc2hvcnQgZmNoYXIgPSBmZGF0YS0+dWM7CiAgICsrZmRh
dGE7CkBAIC0xMDgxLDcgKzExMDEsNyBAQCBpbnQgVVN0cmluZzo6cmZpbmQoY29uc3QgVVN0cmlu
ZyAmZiwgaW50CiAgICAgcG9zID0gc3ogLSBmc3o7CiAgIGlmIChmc3ogPT0gMCkKICAgICByZXR1
cm4gcG9zOwotICBsb25nIGZzaXplbWludXNvbmUgPSAoZnN6IC0gMSkgKiBzaXplb2YoVUNoYXIp
OworICBpbnQgZnNpemVtaW51c29uZSA9IChmc3ogLSAxKSAqIHNpemVvZihVQ2hhcik7CiAgIGNv
bnN0IFVDaGFyICpmZGF0YSA9IGYuZGF0YSgpOwogICBmb3IgKGNvbnN0IFVDaGFyICpjID0gZGF0
YSgpICsgcG9zOyBjID49IGRhdGEoKTsgYy0tKSB7CiAgICAgaWYgKCpjID09ICpmZGF0YSAmJiAh
bWVtY21wKGMgKyAxLCBmZGF0YSArIDEsIGZzaXplbWludXNvbmUpKQpJbmRleDogSmF2YVNjcmlw
dENvcmUva2pzL3VzdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNj
cmlwdENvcmUva2pzL3VzdHJpbmcuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zOApkaWZmIC1w
IC11IC1yMS4zOCBKYXZhU2NyaXB0Q29yZS9ranMvdXN0cmluZy5oCi0tLSBKYXZhU2NyaXB0Q29y
ZS9ranMvdXN0cmluZy5oCTE5IEF1ZyAyMDA1IDIwOjI0OjE3IC0wMDAwCTEuMzgKKysrIEphdmFT
Y3JpcHRDb3JlL2tqcy91c3RyaW5nLmgJMjEgQXVnIDIwMDUgMDU6MjY6MzggLTAwMDAKQEAgLTMw
Miw5ICszMDIsOSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgKi8KICAgICBzdGF0aWMgVVN0cmlu
ZyBmcm9tKHVuc2lnbmVkIGludCB1KTsKICAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGEgc3Ry
aW5nIGZyb20gYSBsb25nLgorICAgICAqIENvbnN0cnVjdHMgYSBzdHJpbmcgZnJvbSBhIGxvbmcg
aW50LgogICAgICAqLwotICAgIHN0YXRpYyBVU3RyaW5nIGZyb20obG9uZyBsKTsKKyAgICBzdGF0
aWMgVVN0cmluZyBmcm9tKGxvbmcgdSk7CiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0cyBhIHN0
cmluZyBmcm9tIGEgZG91YmxlLgogICAgICAqLwpAQCAtNDE5LDE1ICs0MTksMTQgQEAgbmFtZXNw
YWNlIEtKUyB7CiAgICAgZG91YmxlIHRvRG91YmxlKGJvb2wgdG9sZXJhdGVUcmFpbGluZ0p1bmss
IGJvb2wgdG9sZXJhdGVFbXB0eVN0cmluZykgY29uc3Q7CiAgICAgZG91YmxlIHRvRG91YmxlKGJv
b2wgdG9sZXJhdGVUcmFpbGluZ0p1bmspIGNvbnN0OwogICAgIGRvdWJsZSB0b0RvdWJsZSgpIGNv
bnN0OworCiAgICAgLyoqCi0gICAgICogQXR0ZW1wdHMgYW4gY29udmVyc2lvbiB0byBhbiB1bnNp
Z25lZCBsb25nIGludGVnZXIuIG9rIHdpbGwgYmUgc2V0CisgICAgICogQXR0ZW1wdHMgYW4gY29u
dmVyc2lvbiB0byBhIDMyLWJpdCBpbnRlZ2VyLiBvayB3aWxsIGJlIHNldAogICAgICAqIGFjY29y
ZGluZyB0byB0aGUgc3VjY2Vzcy4KLSAgICAgKiBAcGFyYW0gdG9sZXJhdGVFbXB0eVN0cmluZyBp
ZiBmYWxzZSwgdG9VTG9uZyB3aWxsIHJldHVybiBmYWxzZSBmb3IgKm9rIGZvciBhbiBlbXB0eSBz
dHJpbmcuCisgICAgICogQHBhcmFtIHRvbGVyYXRlRW1wdHlTdHJpbmcgaWYgZmFsc2UsIHRvVUlu
dDMyIHdpbGwgcmV0dXJuIGZhbHNlIGZvciAqb2sgZm9yIGFuIGVtcHR5IHN0cmluZy4KICAgICAg
Ki8KLSAgICB1bnNpZ25lZCBsb25nIHRvVUxvbmcoYm9vbCAqb2ssIGJvb2wgdG9sZXJhdGVFbXB0
eVN0cmluZykgY29uc3Q7Ci0gICAgdW5zaWduZWQgbG9uZyB0b1VMb25nKGJvb2wgKm9rID0gMCkg
Y29uc3Q7Ci0KICAgICB1aW50MzJfdCB0b1VJbnQzMihib29sICpvayA9IDApIGNvbnN0OworICAg
IHVpbnQzMl90IHRvVUludDMyKGJvb2wgKm9rLCBib29sIHRvbGVyYXRlRW1wdHlTdHJpbmcpIGNv
bnN0OwogICAgIHVpbnQzMl90IHRvU3RyaWN0VUludDMyKGJvb2wgKm9rID0gMCkgY29uc3Q7CiAK
ICAgICAvKioKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy92YWx1ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy92YWx1ZS5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMjcKZGlmZiAtcCAtdSAtcjEuMjcgSmF2YVNjcmlwdENvcmUva2pzL3Zh
bHVlLmNwcAotLS0gSmF2YVNjcmlwdENvcmUva2pzL3ZhbHVlLmNwcAk4IEF1ZyAyMDA1IDA0OjA3
OjI5IC0wMDAwCTEuMjcKKysrIEphdmFTY3JpcHRDb3JlL2tqcy92YWx1ZS5jcHAJMjEgQXVnIDIw
MDUgMDU6MjY6MzggLTAwMDAKQEAgLTIwMSw2ICsyMDEsMTYgQEAgVmFsdWVJbXAgKmpzTnVtYmVy
KHVuc2lnbmVkIGxvbmcgaSkKICAgICByZXR1cm4gU2ltcGxlTnVtYmVyOjpmaXRzKGkpID8gU2lt
cGxlTnVtYmVyOjptYWtlKGkpIDogbmV3IE51bWJlckltcChzdGF0aWNfY2FzdDxkb3VibGU+KGkp
KTsKIH0KIAorVmFsdWVJbXAgKmpzTnVtYmVyKGxvbmcgbG9uZyBpKQoreworICAgIHJldHVybiBT
aW1wbGVOdW1iZXI6OmZpdHMoaSkgPyBTaW1wbGVOdW1iZXI6Om1ha2UoaSkgOiBuZXcgTnVtYmVy
SW1wKHN0YXRpY19jYXN0PGRvdWJsZT4oaSkpOworfQorCitWYWx1ZUltcCAqanNOdW1iZXIodW5z
aWduZWQgbG9uZyBsb25nIGkpCit7CisgICAgcmV0dXJuIFNpbXBsZU51bWJlcjo6Zml0cyhpKSA/
IFNpbXBsZU51bWJlcjo6bWFrZShpKSA6IG5ldyBOdW1iZXJJbXAoc3RhdGljX2Nhc3Q8ZG91Ymxl
PihpKSk7Cit9CisKIFZhbHVlSW1wICpqc051bWJlcihkb3VibGUgZCkKIHsKICAgICByZXR1cm4g
U2ltcGxlTnVtYmVyOjpmaXRzKGQpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvdmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL3ZhbHVlLmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzMKZGlmZiAtcCAtdSAtcjEuMzMgSmF2YVNjcmlwdENv
cmUva2pzL3ZhbHVlLmgKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy92YWx1ZS5oCTggQXVnIDIwMDUg
MDQ6MDc6MjkgLTAwMDAJMS4zMworKysgSmF2YVNjcmlwdENvcmUva2pzL3ZhbHVlLmgJMjEgQXVn
IDIwMDUgMDU6MjY6MzggLTAwMDAKQEAgLTE4OSw2ICsxODksOCBAQCBWYWx1ZUltcCAqanNOdW1i
ZXIoaW50KTsKIFZhbHVlSW1wICpqc051bWJlcih1bnNpZ25lZCk7CiBWYWx1ZUltcCAqanNOdW1i
ZXIobG9uZyk7CiBWYWx1ZUltcCAqanNOdW1iZXIodW5zaWduZWQgbG9uZyk7CitWYWx1ZUltcCAq
anNOdW1iZXIobG9uZyBsb25nKTsKK1ZhbHVlSW1wICpqc051bWJlcih1bnNpZ25lZCBsb25nIGxv
bmcpOwogCiBBbGxvY2F0ZWRWYWx1ZUltcCAqanNTdHJpbmcoY29uc3QgVVN0cmluZyAmKTsgLy8g
cmV0dXJucyBlbXB0eSBzdHJpbmcgaWYgcGFzc2VkIG51bGwgc3RyaW5nCiBBbGxvY2F0ZWRWYWx1
ZUltcCAqanNTdHJpbmcoY29uc3QgY2hhciAqID0gIiIpOyAvLyByZXR1cm5zIGVtcHR5IHN0cmlu
ZyBpZiBwYXNzZWQgMApJbmRleDogV2ViQ29yZS9XZWJDb3JlLXRlc3RzLmV4cAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9XZWJDb3JlLXRlc3RzLmV4cCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4zNgpkaWZmIC1wIC11IC1yMS4zNiBXZWJDb3JlL1dlYkNvcmUtdGVzdHMu
ZXhwCi0tLSBXZWJDb3JlL1dlYkNvcmUtdGVzdHMuZXhwCTE3IEF1ZyAyMDA1IDAxOjA3OjIzIC0w
MDAwCTEuMzYKKysrIFdlYkNvcmUvV2ViQ29yZS10ZXN0cy5leHAJMjEgQXVnIDIwMDUgMDU6MjY6
NTAgLTAwMDAKQEAgLTIzOCw3ICsyMzgsNiBAQCBfX1pOSzdRU3RyaW5nNWxvd2VyRXYKIF9fWk5L
N1FTdHJpbmc1cmlnaHRFagogX19aTks3UVN0cmluZzV0b0ludEVQYmkKIF9fWk5LN1FTdHJpbmc2
aXNOdWxsRXYKLV9fWk5LN1FTdHJpbmc2dG9Mb25nRVBiaQogX19aTks3UVN0cmluZzZ0b1VJbnRF
UGJpCiBfX1pOSzdRU3RyaW5nN2NvbXBhcmVFUktTXwogX19aTks3UVN0cmluZzdmaW5kUmV2RVBL
Y2kKSW5kZXg6IFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMva2h0bWxfcGFnZWNhY2hlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMva2h0
bWxfcGFnZWNhY2hlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4y
IFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMva2h0bWxfcGFnZWNhY2hlLmgKLS0tIFdlYkNvcmUv
Rm9yd2FyZGluZ0hlYWRlcnMva2h0bWxfcGFnZWNhY2hlLmgJMjMgU2VwIDIwMDQgMDY6MjE6MjYg
LTAwMDAJMS4yCisrKyBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2todG1sX3BhZ2VjYWNoZS5o
CTIxIEF1ZyAyMDA1IDA1OjI2OjUwIC0wMDAwCkBAIC0xICswLDAgQEAKLSNpbXBvcnQgIktXUUtI
VE1MUGFnZUNhY2hlLmgiCkluZGV4OiBXZWJDb3JlL2todG1sL2todG1sX2V2ZW50cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwva2h0bWxfZXZlbnRzLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNApkaWZmIC1wIC11IC1yMS4xNCBXZWJDb3JlL2to
dG1sL2todG1sX2V2ZW50cy5jcHAKLS0tIFdlYkNvcmUva2h0bWwva2h0bWxfZXZlbnRzLmNwcAkx
MSBNYXkgMjAwNSAwMDo1ODoyNyAtMDAwMAkxLjE0CisrKyBXZWJDb3JlL2todG1sL2todG1sX2V2
ZW50cy5jcHAJMjEgQXVnIDIwMDUgMDU6Mjc6MTkgLTAwMDAKQEAgLTUyLDcgKzUyLDcgQEAgTW91
c2VFdmVudDo6fk1vdXNlRXZlbnQoKQogICBkZWxldGUgZDsKIH0KIAotbG9uZyBNb3VzZUV2ZW50
OjpvZmZzZXQoKSBjb25zdAoraW50IE1vdXNlRXZlbnQ6Om9mZnNldCgpIGNvbnN0CiB7CiAgICAg
UG9zaXRpb24gcG9zOwogICAgIGlmIChOb2RlSW1wbCAqaW5uZXIgPSBtX2lubmVyTm9kZS5nZXQo
KSkgewpJbmRleDogV2ViQ29yZS9raHRtbC9raHRtbF9ldmVudHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9raHRtbF9ldmVudHMuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS43CmRpZmYgLXAgLXUgLXIxLjcgV2ViQ29yZS9raHRtbC9raHRtbF9ldmVudHMu
aAotLS0gV2ViQ29yZS9raHRtbC9raHRtbF9ldmVudHMuaAkxMSBNYXkgMjAwNSAwMDo1ODoyNyAt
MDAwMAkxLjcKKysrIFdlYkNvcmUva2h0bWwva2h0bWxfZXZlbnRzLmgJMjEgQXVnIDIwMDUgMDU6
Mjc6MTkgLTAwMDAKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICBET006Ok5vZGVJbXBsICpp
bm5lck5vZGUoKSBjb25zdCB7IHJldHVybiBtX2lubmVyTm9kZS5nZXQoKTsgfQogCiAgIC8vIHJl
dHVybiB0aGUgb2Zmc2V0IG9mIGlubmVyTm9kZQotICBsb25nIG9mZnNldCgpIGNvbnN0OworICBp
bnQgb2Zmc2V0KCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgIFFNb3VzZUV2ZW50ICptX3Ftb3VzZUV2
ZW50OwpAQCAtMTE2LDcgKzExNiw3IEBAIGNsYXNzIE1vdXNlUmVsZWFzZUV2ZW50IDogcHVibGlj
IE1vdXNlRXYKIHB1YmxpYzoKICAgTW91c2VSZWxlYXNlRXZlbnQoIFFNb3VzZUV2ZW50ICptb3Vz
ZUV2ZW50LCBpbnQgeCwgaW50IHksCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBET006OkRP
TVN0cmluZyAmdXJsLCBjb25zdCBET006OkRPTVN0cmluZyYgdGFyZ2V0LAotCQkgICAgIERPTTo6
Tm9kZUltcGwgKmlubmVyTm9kZSwgbG9uZyA9IDAgKQorCQkgICAgIERPTTo6Tm9kZUltcGwgKmlu
bmVyTm9kZSwgaW50ID0gMCApCiAgIDogTW91c2VFdmVudCggc19zdHJNb3VzZVJlbGVhc2VFdmVu
dCwgbW91c2VFdmVudCwgeCwgeSwgdXJsLCB0YXJnZXQsIGlubmVyTm9kZSApCiAgIHt9CiAKSW5k
ZXg6IFdlYkNvcmUva2h0bWwva2h0bWxfcGFydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwva2h0bWxfcGFydC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMzM0CmRpZmYgLXAgLXUgLXIxLjMzNCBXZWJDb3JlL2todG1sL2todG1sX3BhcnQuY3BwCi0t
LSBXZWJDb3JlL2todG1sL2todG1sX3BhcnQuY3BwCTE0IEF1ZyAyMDA1IDA5OjEyOjQzIC0wMDAw
CTEuMzM0CisrKyBXZWJDb3JlL2todG1sL2todG1sX3BhcnQuY3BwCTIxIEF1ZyAyMDA1IDA1OjI3
OjIzIC0wMDAwCkBAIC0zOTgsNyArMzk4LDkgQEAgYm9vbCBLSFRNTFBhcnQ6OnJlc3RvcmVVUkwo
IGNvbnN0IEtVUkwgJgogCiAgIG1fdXJsID0gdXJsOwogCisjaWYgIUFQUExFX0NIQU5HRVMKICAg
S0hUTUxQYWdlQ2FjaGU6OnNlbGYoKS0+ZmV0Y2hEYXRhKCBkLT5tX2NhY2hlSWQsIHRoaXMsIFNM
T1Qoc2xvdFJlc3RvcmVEYXRhKGNvbnN0IFFCeXRlQXJyYXkgJikpKTsKKyNlbmRpZgogCiAgIGVt
aXQgc3RhcnRlZCggMEwgKTsKIApAQCAtNjAzLDcgKzYwNSw5IEBAIHZvaWQgS0hUTUxQYXJ0Ojpz
dG9wTG9hZGluZyhib29sIHNlbmRVbmwKICAgICAKICAgaWYgKCBkLT5tX2pvYiApCiAgIHsKKyNp
ZiAhQVBQTEVfQ0hBTkdFUwogICAgIEtIVE1MUGFnZUNhY2hlOjpzZWxmKCktPmNhbmNlbEVudHJ5
KGQtPm1fY2FjaGVJZCk7CisjZW5kaWYKICAgICBkLT5tX2pvYi0+a2lsbCgpOwogICAgIGQtPm1f
am9iID0gMDsKICAgfQpAQCAtNjI5LDcgKzYzMyw5IEBAIHZvaWQgS0hUTUxQYXJ0OjpzdG9wTG9h
ZGluZyhib29sIHNlbmRVbmwKICAgZC0+bV9iTG9hZEV2ZW50RW1pdHRlZCA9IHRydWU7IC8vIGRv
bid0IHdhbnQgdGhhdCBvbmUgZWl0aGVyCiAgIGQtPm1fY2FjaGVQb2xpY3kgPSBLSU86OkNDX1Zl
cmlmeTsgLy8gV2h5IGhlcmU/CiAKKyNpZiAhQVBQTEVfQ0hBTkdFUwogICBLSFRNTFBhZ2VDYWNo
ZTo6c2VsZigpLT5jYW5jZWxGZXRjaCh0aGlzKTsKKyNlbmRpZgogICBpZiAoIGQtPm1fZG9jICYm
IGQtPm1fZG9jLT5wYXJzaW5nKCkgKQogICB7CiAgICAga2REZWJ1ZyggNjA1MCApIDw8ICIgd2Fz
IHN0aWxsIHBhcnNpbmcuLi4gY2FsbGluZyBlbmQgIiA8PCBlbmRsOwpAQCAtMTIwMSw3ICsxMjA3
LDkgQEAgdm9pZCBLSFRNTFBhcnQ6OnJlY2VpdmVkRmlyc3REYXRhKCkKICAgICBkLT5tX2RvYy0+
ZG9jTG9hZGVyKCktPnNldENhY2hlUG9saWN5KGQtPm1fY2FjaGVQb2xpY3kpOwogICAgIGQtPm1f
d29ya2luZ1VSTCA9IEtVUkwoKTsKIAorI2lmICFBUFBMRV9DSEFOR0VTCiAgICAgZC0+bV9jYWNo
ZUlkID0gS0hUTUxQYWdlQ2FjaGU6OnNlbGYoKS0+Y3JlYXRlQ2FjaGVFbnRyeSgpOworI2VuZGlm
CiAKICAgICAvLyBXaGVuIHRoZSBmaXJzdCBkYXRhIGFycml2ZXMsIHRoZSBtZXRhZGF0YSBoYXMg
anVzdCBiZWVuIG1hZGUgYXZhaWxhYmxlCiAjaWYgQVBQTEVfQ0hBTkdFUwpAQCAtMTQ3MCw3ICsx
NDc4LDkgQEAgdm9pZCBLSFRNTFBhcnQ6OnNsb3RGaW5pc2hlZCggS0lPOjpKb2IgKgogewogICBp
ZiAoam9iLT5lcnJvcigpKQogICB7CisjaWYgIUFQUExFX0NIQU5HRVMKICAgICBLSFRNTFBhZ2VD
YWNoZTo6c2VsZigpLT5jYW5jZWxFbnRyeShkLT5tX2NhY2hlSWQpOworI2VuZGlmCiAgICAgZC0+
bV9qb2IgPSAwTDsKICNpZiAhQVBQTEVfQ0hBTkdFUwogICAgIGVtaXQgY2FuY2VsZWQoIGpvYi0+
ZXJyb3JTdHJpbmcoKSApOwpAQCAtMTQ4NCw3ICsxNDk0LDkgQEAgdm9pZCBLSFRNTFBhcnQ6OnNs
b3RGaW5pc2hlZCggS0lPOjpKb2IgKgogICB9CiAgIC8va2REZWJ1ZyggNjA1MCApIDw8ICJzbG90
RmluaXNoZWQiIDw8IGVuZGw7CiAKKyNpZiAhQVBQTEVfQ0hBTkdFUwogICBLSFRNTFBhZ2VDYWNo
ZTo6c2VsZigpLT5lbmREYXRhKGQtPm1fY2FjaGVJZCk7CisjZW5kaWYKIAogICBpZiAoIGQtPm1f
ZG9jICYmIGQtPm1fZG9jLT5kb2NMb2FkZXIoKS0+ZXhwaXJlRGF0ZSgpICYmIG1fdXJsLnByb3Rv
Y29sKCkubG93ZXIoKS5zdGFydHNXaXRoKCJodHRwIikpCiAgICAgICBLSU86Omh0dHBfdXBkYXRl
X2NhY2hlKG1fdXJsLCBmYWxzZSwgZC0+bV9kb2MtPmRvY0xvYWRlcigpLT5leHBpcmVEYXRlKCkp
OwpAQCAtMTUzNCw3ICsxNTQ2LDkgQEAgdm9pZCBLSFRNTFBhcnQ6OmJlZ2luKCBjb25zdCBLVVJM
ICZ1cmwsIAogI2VuZGlmCiAKICAgZC0+bV9iQ2xlYXJlZCA9IGZhbHNlOworI2lmICFBUFBMRV9D
SEFOR0VTCiAgIGQtPm1fY2FjaGVJZCA9IDA7CisjZW5kaWYKICAgZC0+bV9iQ29tcGxldGUgPSBm
YWxzZTsKICAgZC0+bV9iTG9hZEV2ZW50RW1pdHRlZCA9IGZhbHNlOwogICBkLT5tX2JMb2FkaW5n
TWFpblJlc291cmNlID0gdHJ1ZTsKQEAgLTI5NjgsNyArMjk4Miw3IEBAIHZvaWQgS0hUTUxQYXJ0
OjpzbG90Vmlld0ZyYW1lU291cmNlKCkKICAgS1VSTCB1cmwgPSBmcmFtZS0+dXJsKCk7CiAgIGlm
ICghKHVybC5pc0xvY2FsRmlsZSgpKSAmJiBmcmFtZS0+aW5oZXJpdHMoIktIVE1MUGFydCIpKQog
ICB7Ci0gICAgICAgbG9uZyBjYWNoZUlkID0gc3RhdGljX2Nhc3Q8S0hUTUxQYXJ0ICo+KGZyYW1l
KS0+ZC0+bV9jYWNoZUlkOworICAgICAgIGludCBjYWNoZUlkID0gc3RhdGljX2Nhc3Q8S0hUTUxQ
YXJ0ICo+KGZyYW1lKS0+ZC0+bV9jYWNoZUlkOwogCiAgICAgICAgaWYgKEtIVE1MUGFnZUNhY2hl
OjpzZWxmKCktPmlzVmFsaWQoY2FjaGVJZCkpCiAgICAgICAgewpAQCAtNTQ0OSwxMyArNTQ2Mywx
MyBAQCBRQ1N0cmluZyBLSFRNTFBhcnQ6OmRjb3BPYmplY3RJZCgpIGNvbnN0CiAgIHJldHVybiBp
ZDsKIH0KIAotI2VuZGlmCi0KIGxvbmcgS0hUTUxQYXJ0OjpjYWNoZUlkKCkgY29uc3QKIHsKICAg
cmV0dXJuIGQtPm1fY2FjaGVJZDsKIH0KIAorI2VuZGlmCisKIGJvb2wgS0hUTUxQYXJ0OjpyZXN0
b3JlZCgpIGNvbnN0CiB7CiAgIHJldHVybiBkLT5tX3Jlc3RvcmVkOwpAQCAtNTk4MCw3ICs1OTk0
LDcgQEAgdm9pZCBLSFRNTFBhcnQ6OnNlbGVjdEZyYW1lRWxlbWVudEluUGFyZQogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBDcmVhdGUgY29tcHV0ZSBwb3NpdGlvbnMgYmVmb3JlIGFuZCBhZnRl
ciB0aGUgZWxlbWVudC4KLSAgICB1bnNpZ25lZCBsb25nIG93bmVyRWxlbWVudE5vZGVJbmRleCA9
IG93bmVyRWxlbWVudC0+bm9kZUluZGV4KCk7CisgICAgdW5zaWduZWQgb3duZXJFbGVtZW50Tm9k
ZUluZGV4ID0gb3duZXJFbGVtZW50LT5ub2RlSW5kZXgoKTsKICAgICBWaXNpYmxlUG9zaXRpb24g
YmVmb3JlT3duZXJFbGVtZW50KFZpc2libGVQb3NpdGlvbihvd25lckVsZW1lbnRQYXJlbnQsIG93
bmVyRWxlbWVudE5vZGVJbmRleCwga2h0bWw6OlNFTF9ERUZBVUxUX0FGRklOSVRZKSk7CiAgICAg
VmlzaWJsZVBvc2l0aW9uIGFmdGVyT3duZXJFbGVtZW50KFZpc2libGVQb3NpdGlvbihvd25lckVs
ZW1lbnRQYXJlbnQsIG93bmVyRWxlbWVudE5vZGVJbmRleCArIDEsIGtodG1sOjpTRUxfUFJFRkVS
X1VQU1RSRUFNX0FGRklOSVRZKSk7CiAKSW5kZXg6IFdlYkNvcmUva2h0bWwva2h0bWxfcGFydC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2todG1sX3BhcnQu
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMzYKZGlmZiAtcCAtdSAtcjEuMTM2IFdlYkNvcmUv
a2h0bWwva2h0bWxfcGFydC5oCi0tLSBXZWJDb3JlL2todG1sL2todG1sX3BhcnQuaAkxNCBBdWcg
MjAwNSAwOToxMjo0MyAtMDAwMAkxLjEzNgorKysgV2ViQ29yZS9raHRtbC9raHRtbF9wYXJ0LmgJ
MjEgQXVnIDIwMDUgMDU6Mjc6MjMgLTAwMDAKQEAgLTM2MCw3ICszNjAsNyBAQCBwdWJsaWM6CiAg
IC8qKgogICAgKiBSZXR1cm5zIHdoZXRoZXIgaW1hZ2VzIGNvbnRhaW5lZCBpbiB0aGUgZG9jdW1l
bnQgYXJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5CiAgICAqIG9yIG5vdC4KLSAgICogQG5vdGUgdGhh
dCB0aGUgcmV0dXJuZWQgaW5mb3JtYXRpb24gaXMgdW5yZWxpZWFibGUgYXMgbG9uZyBhcyBubyBi
ZWdpbigpCisgICAqIEBub3RlIHRoYXQgdGhlIHJldHVybmVkIGluZm9ybWF0aW9uIGlzIHVucmVs
aWFibGUgYXMgbG9uZyBhcyBubyBiZWdpbigpCiAgICAqIHdhcyBjYWxsZWQuCiAgICAqLwogICBi
b29sIGF1dG9sb2FkSW1hZ2VzKCkgY29uc3Q7CkBAIC0xMzYxLDcgKzEzNjEsNyBAQCBwcml2YXRl
OgogI2lmIEFQUExFX0NIQU5HRVMKICBwcml2YXRlOgogI2VuZGlmCi0gIGxvbmcgY2FjaGVJZCgp
IGNvbnN0OworICBpbnQgY2FjaGVJZCgpIGNvbnN0OwogCiAgIHZvaWQgY2hlY2tFbWl0TG9hZEV2
ZW50KCk7CiAgIHZvaWQgZW1pdExvYWRFdmVudCgpOwpJbmRleDogV2ViQ29yZS9raHRtbC9raHRt
bHBhcnRfcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2to
dG1scGFydF9wLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTcKZGlmZiAtcCAtdSAtcjEuNTcg
V2ViQ29yZS9raHRtbC9raHRtbHBhcnRfcC5oCi0tLSBXZWJDb3JlL2todG1sL2todG1scGFydF9w
LmgJMSBKdW4gMjAwNSAyMzo0OTo0OSAtMDAwMAkxLjU3CisrKyBXZWJDb3JlL2todG1sL2todG1s
cGFydF9wLmgJMjEgQXVnIDIwMDUgMDU6Mjc6MjQgLTAwMDAKQEAgLTE0Niw3ICsxNDYsOSBAQCBw
dWJsaWM6CiAjaWZuZGVmIFFfV1NfUVdTCiAgICAgbV9qYXZhQ29udGV4dCA9IDA7CiAjZW5kaWYK
KyNpZiAhQVBQTEVfQ0hBTkdFUwogICAgIG1fY2FjaGVJZCA9IDA7CisjZW5kaWYKICAgICBtX2Zy
YW1lTmFtZUlkID0gMTsKIAogICAgIG1fcmVzdG9yZWQgPSBmYWxzZTsKQEAgLTIzOSw3ICsyNDEs
OSBAQCBwdWJsaWM6CiAgIGtodG1sOjpEZWNvZGVyICptX2RlY29kZXI7CiAgIFFTdHJpbmcgbV9l
bmNvZGluZzsKICAgUVN0cmluZyBtX3NoZWV0VXNlZDsKKyNpZiAhQVBQTEVfQ0FOR0VTCiAgIGxv
bmcgbV9jYWNoZUlkOworI2VuZGlmCiAgIFFTdHJpbmcgc2NoZWR1bGVkU2NyaXB0OwogICBraHRt
bDo6U2hhcmVkUHRyPERPTTo6Tm9kZUltcGw+IHNjaGVkdWxlZFNjcmlwdE5vZGU7CiAKQEAgLTM5
OSw4ICs0MDMsOCBAQCBwdWJsaWM6CiAgIFFDdXJzb3IgbV9saW5rQ3Vyc29yOwogICBRVGltZXIg
bV9zY3JvbGxUaW1lcjsKIAotICB1bnNpZ25lZCBsb25nIG1fbG9hZGVkT2JqZWN0czsKLSAgdW5z
aWduZWQgbG9uZyBtX3RvdGFsT2JqZWN0Q291bnQ7CisgIHVuc2lnbmVkIG1fbG9hZGVkT2JqZWN0
czsKKyAgdW5zaWduZWQgbV90b3RhbE9iamVjdENvdW50OwogICB1bnNpZ25lZCBpbnQgbV9qb2JQ
ZXJjZW50OwogCiAgIEtIVE1MRmluZCAqbV9maW5kRGlhbG9nOwpJbmRleDogV2ViQ29yZS9raHRt
bC9jc3MvY3NzX2Jhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9jc3MvY3NzX2Jhc2UuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNQpkaWZmIC1wIC11
IC1yMS4xNSBXZWJDb3JlL2todG1sL2Nzcy9jc3NfYmFzZS5oCi0tLSBXZWJDb3JlL2todG1sL2Nz
cy9jc3NfYmFzZS5oCTI4IEp1bCAyMDA1IDIzOjI3OjEyIC0wMDAwCTEuMTUKKysrIFdlYkNvcmUv
a2h0bWwvY3NzL2Nzc19iYXNlLmgJMjEgQXVnIDIwMDUgMDU6Mjc6MjQgLTAwMDAKQEAgLTI2MCw4
ICsyNjAsOCBAQCBuYW1lc3BhY2UgRE9NIHsKIAogCXZpcnR1YWwgflN0eWxlTGlzdEltcGwoKTsK
IAotCXVuc2lnbmVkIGxvbmcgbGVuZ3RoKCkgeyByZXR1cm4gbV9sc3RDaGlsZHJlbi0+Y291bnQo
KTsgfQotCVN0eWxlQmFzZUltcGwgKml0ZW0odW5zaWduZWQgbG9uZyBudW0pIHsgcmV0dXJuIG1f
bHN0Q2hpbGRyZW4tPmF0KG51bSk7IH0KKwl1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBtX2xz
dENoaWxkcmVuLT5jb3VudCgpOyB9CisJU3R5bGVCYXNlSW1wbCAqaXRlbSh1bnNpZ25lZCBudW0p
IHsgcmV0dXJuIG1fbHN0Q2hpbGRyZW4tPmF0KG51bSk7IH0KIAogCXZvaWQgYXBwZW5kKFN0eWxl
QmFzZUltcGwgKml0ZW0pIHsgbV9sc3RDaGlsZHJlbi0+YXBwZW5kKGl0ZW0pOyB9CiAKSW5kZXg6
IFdlYkNvcmUva2h0bWwvY3NzL2Nzc19jb21wdXRlZHN0eWxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3NzX2NvbXB1dGVkc3R5bGUuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjM0CmRpZmYgLXAgLXUgLXIxLjM0IFdlYkNvcmUva2h0bWwv
Y3NzL2Nzc19jb21wdXRlZHN0eWxlLmNwcAotLS0gV2ViQ29yZS9raHRtbC9jc3MvY3NzX2NvbXB1
dGVkc3R5bGUuY3BwCTMwIEp1bCAyMDA1IDIxOjE5OjQ1IC0wMDAwCTEuMzQKKysrIFdlYkNvcmUv
a2h0bWwvY3NzL2Nzc19jb21wdXRlZHN0eWxlLmNwcAkyMSBBdWcgMjAwNSAwNToyNzoyNSAtMDAw
MApAQCAtMTI1OSwxMiArMTI1OSwxMiBAQCB2b2lkIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlv
bkltcGw6OnNlCiAgICAgZXhjZXB0aW9uQ29kZSA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FU
SU9OX0FMTE9XRURfRVJSOwogfQogCi11bnNpZ25lZCBsb25nIENTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbkltcGw6Omxlbmd0aCgpIGNvbnN0Cit1bnNpZ25lZCBDU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb25JbXBsOjpsZW5ndGgoKSBjb25zdAogewogICAgIHJldHVybiBudW1Db21wdXRlZFBy
b3BlcnRpZXM7CiB9CiAKLURPTVN0cmluZyBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb25JbXBs
OjppdGVtKHVuc2lnbmVkIGxvbmcgaSkgY29uc3QKK0RPTVN0cmluZyBDU1NDb21wdXRlZFN0eWxl
RGVjbGFyYXRpb25JbXBsOjppdGVtKHVuc2lnbmVkIGkpIGNvbnN0CiB7CiAgICAgaWYgKGkgPj0g
bnVtQ29tcHV0ZWRQcm9wZXJ0aWVzKQogICAgICAgICByZXR1cm4gRE9NU3RyaW5nKCk7CkluZGV4
OiBXZWJDb3JlL2todG1sL2Nzcy9jc3NfY29tcHV0ZWRzdHlsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3NfY29tcHV0ZWRzdHlsZS5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjgKZGlmZiAtcCAtdSAtcjEuOCBXZWJDb3JlL2todG1sL2Nzcy9j
c3NfY29tcHV0ZWRzdHlsZS5oCi0tLSBXZWJDb3JlL2todG1sL2Nzcy9jc3NfY29tcHV0ZWRzdHls
ZS5oCTExIE1heSAyMDA1IDAwOjU4OjI3IC0wMDAwCTEuOAorKysgV2ViQ29yZS9raHRtbC9jc3Mv
Y3NzX2NvbXB1dGVkc3R5bGUuaAkyMSBBdWcgMjAwNSAwNToyNzoyNSAtMDAwMApAQCAtNDQsOCAr
NDQsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIERPTVN0cmluZyBjc3NUZXh0KCkgY29uc3Q7
CiAKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBET01TdHJpbmcgaXRlbSh1bnNpZ25lZCBsb25nIGluZGV4KSBjb25zdDsKKyAgICB2aXJ0dWFs
IHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgRE9NU3RyaW5nIGl0ZW0odW5z
aWduZWQgaW5kZXgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBDU1NWYWx1ZUltcGwgKmdldFByb3Bl
cnR5Q1NTVmFsdWUoaW50IHByb3BlcnR5SUQpIGNvbnN0OwogICAgIHZpcnR1YWwgRE9NU3RyaW5n
IGdldFByb3BlcnR5VmFsdWUoaW50IHByb3BlcnR5SUQpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9r
aHRtbC9jc3MvY3NzX3J1bGVpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC9jc3MvY3NzX3J1bGVpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4yMQpkaWZmIC1wIC11IC1yMS4yMSBXZWJDb3JlL2todG1sL2Nzcy9jc3NfcnVsZWltcGwuY3Bw
Ci0tLSBXZWJDb3JlL2todG1sL2Nzcy9jc3NfcnVsZWltcGwuY3BwCTMwIEp1bCAyMDA1IDIxOjE5
OjQ1IC0wMDAwCTEuMjEKKysrIFdlYkNvcmUva2h0bWwvY3NzL2Nzc19ydWxlaW1wbC5jcHAJMjEg
QXVnIDIwMDUgMDU6Mjc6MjUgLTAwMDAKQEAgLTI1Niw3ICsyNTYsNyBAQCBDU1NNZWRpYVJ1bGVJ
bXBsOjp+Q1NTTWVkaWFSdWxlSW1wbCgpCiAgICAgbV9sc3RDU1NSdWxlcy0+ZGVyZWYoKTsKIH0K
IAotdW5zaWduZWQgbG9uZyBDU1NNZWRpYVJ1bGVJbXBsOjphcHBlbmQoIENTU1J1bGVJbXBsICpy
dWxlICkKK3Vuc2lnbmVkIENTU01lZGlhUnVsZUltcGw6OmFwcGVuZCggQ1NTUnVsZUltcGwgKnJ1
bGUgKQogewogICAgIGlmICghcnVsZSkgewogCXJldHVybiAwOwpAQCAtMjY2LDggKzI2Niw4IEBA
IHVuc2lnbmVkIGxvbmcgQ1NTTWVkaWFSdWxlSW1wbDo6YXBwZW5kKCAKICAgICByZXR1cm4gbV9s
c3RDU1NSdWxlcy0+aW5zZXJ0UnVsZSggcnVsZSwgbV9sc3RDU1NSdWxlcy0+bGVuZ3RoKCkgKTsK
IH0KIAotdW5zaWduZWQgbG9uZyBDU1NNZWRpYVJ1bGVJbXBsOjppbnNlcnRSdWxlKCBjb25zdCBE
T01TdHJpbmcgJnJ1bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGxvbmcgaW5kZXggKQordW5zaWduZWQgQ1NTTWVkaWFSdWxlSW1wbDo6aW5z
ZXJ0UnVsZSggY29uc3QgRE9NU3RyaW5nICZydWxlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCApCiB7CiAgICAgQ1NTUGFyc2VyIHAo
IHN0cmljdFBhcnNpbmcgKTsKICAgICBDU1NSdWxlSW1wbCAqbmV3UnVsZSA9IHAucGFyc2VSdWxl
KCBwYXJlbnRTdHlsZVNoZWV0KCksIHJ1bGUgKTsKQEAgLTI5MCw4ICsyOTAsOCBAQCBET01TdHJp
bmcgQ1NTTWVkaWFSdWxlSW1wbDo6Y3NzVGV4dCgpIGNvCiAgICAgcmVzdWx0ICs9ICJ7IFxuIjsK
ICAgICAKICAgICBpZiAobV9sc3RDU1NSdWxlcykgewotICAgICAgICB1bnNpZ25lZCBsb25nIGxl
biA9IG1fbHN0Q1NTUnVsZXMtPmxlbmd0aCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGxvbmcg
aSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICB1bnNpZ25lZCBsZW4gPSBtX2xzdENTU1J1
bGVzLT5sZW5ndGgoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgaSsr
KSB7CiAgICAgICAgICAgICByZXN1bHQgKz0gIiAgIjsKICAgICAgICAgICAgIHJlc3VsdCArPSBt
X2xzdENTU1J1bGVzLT5pdGVtKGkpLT5jc3NUZXh0KCk7CiAgICAgICAgICAgICByZXN1bHQgKz0g
IlxuIjsKQEAgLTMwNyw4ICszMDcsOCBAQCBET01TdHJpbmcgQ1NTTWVkaWFSdWxlSW1wbDo6Y3Nz
VGV4dCgpIGNvCiBDU1NSdWxlTGlzdEltcGw6OkNTU1J1bGVMaXN0SW1wbChTdHlsZUxpc3RJbXBs
ICpsc3QpCiB7CiAgICAgaWYgKGxzdCkgewotICAgICAgICB1bnNpZ25lZCBsb25nIGxlbiA9IGxz
dC0+bGVuZ3RoKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgbG9uZyBpID0gMDsgaSA8IGxlbjsg
KytpKSB7CisgICAgICAgIHVuc2lnbmVkIGxlbiA9IGxzdC0+bGVuZ3RoKCk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICAgICAgICAgU3R5bGVCYXNl
SW1wbCAqc3R5bGUgPSBsc3QtPml0ZW0oaSk7CiAgICAgICAgICAgICBpZiAoc3R5bGUtPmlzUnVs
ZSgpKQogICAgICAgICAgICAgICAgIGFwcGVuZChzdGF0aWNfY2FzdDxDU1NSdWxlSW1wbCAqPihz
dHlsZSkpOwpAQCAtNDA4LDcgKzQwOCw3IEBAIHZvaWQgQ1NTU3R5bGVSdWxlSW1wbDo6c2V0RGVj
bGFyYXRpb24oIEMKICAgICB9CiB9CiAKLXZvaWQgQ1NTUnVsZUxpc3RJbXBsOjpkZWxldGVSdWxl
ICggdW5zaWduZWQgbG9uZyBpbmRleCApCit2b2lkIENTU1J1bGVMaXN0SW1wbDo6ZGVsZXRlUnVs
ZSAoIHVuc2lnbmVkIGluZGV4ICkKIHsKICAgICBDU1NSdWxlSW1wbCAqcnVsZSA9IG1fbHN0Q1NT
UnVsZXMudGFrZSggaW5kZXggKTsKICAgICBpZiggcnVsZSApCkBAIC00MjIsOCArNDIyLDggQEAg
dm9pZCBDU1NSdWxlTGlzdEltcGw6OmFwcGVuZCggQ1NTUnVsZUltcAogICAgIGluc2VydFJ1bGUo
IHJ1bGUsIG1fbHN0Q1NTUnVsZXMuY291bnQoKSApIDsKIH0KIAotdW5zaWduZWQgbG9uZyBDU1NS
dWxlTGlzdEltcGw6Omluc2VydFJ1bGUoIENTU1J1bGVJbXBsICpydWxlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW5kZXggKQordW5z
aWduZWQgQ1NTUnVsZUxpc3RJbXBsOjppbnNlcnRSdWxlKCBDU1NSdWxlSW1wbCAqcnVsZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCAp
CiB7CiAgICAgaWYoIHJ1bGUgJiYgbV9sc3RDU1NSdWxlcy5pbnNlcnQoIGluZGV4LCBydWxlICkg
KQogICAgIHsKSW5kZXg6IFdlYkNvcmUva2h0bWwvY3NzL2Nzc19ydWxlaW1wbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3NfcnVsZWltcGwuaCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNgpkaWZmIC1wIC11IC1yMS4xNiBXZWJDb3JlL2todG1s
L2Nzcy9jc3NfcnVsZWltcGwuaAotLS0gV2ViQ29yZS9raHRtbC9jc3MvY3NzX3J1bGVpbXBsLmgJ
MzAgSnVsIDIwMDUgMjE6MTk6NDUgLTAwMDAJMS4xNgorKysgV2ViQ29yZS9raHRtbC9jc3MvY3Nz
X3J1bGVpbXBsLmgJMjEgQXVnIDIwMDUgMDU6Mjc6MjUgLTAwMDAKQEAgLTE0NywxMiArMTQ3LDEy
IEBAIHB1YmxpYzoKIAogICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKIAotICAgIHVuc2lnbmVk
IGxvbmcgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sc3RDU1NSdWxlcy5jb3VudCgpOyB9Ci0g
ICAgQ1NTUnVsZUltcGwgKml0ZW0gKCB1bnNpZ25lZCBsb25nIGluZGV4ICkgeyByZXR1cm4gbV9s
c3RDU1NSdWxlcy5hdCggaW5kZXggKTsgfQorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fbHN0Q1NTUnVsZXMuY291bnQoKTsgfQorICAgIENTU1J1bGVJbXBsICppdGVtICgg
dW5zaWduZWQgaW5kZXggKSB7IHJldHVybiBtX2xzdENTU1J1bGVzLmF0KCBpbmRleCApOyB9CiAK
ICAgICAvKiBub3QgcGFydCBvZiB0aGUgRE9NICovCi0gICAgdW5zaWduZWQgbG9uZyBpbnNlcnRS
dWxlICggQ1NTUnVsZUltcGwgKnJ1bGUsIHVuc2lnbmVkIGxvbmcgaW5kZXggKTsKLSAgICB2b2lk
IGRlbGV0ZVJ1bGUgKCB1bnNpZ25lZCBsb25nIGluZGV4ICk7CisgICAgdW5zaWduZWQgaW5zZXJ0
UnVsZSAoIENTU1J1bGVJbXBsICpydWxlLCB1bnNpZ25lZCBpbmRleCApOworICAgIHZvaWQgZGVs
ZXRlUnVsZSAoIHVuc2lnbmVkIGluZGV4ICk7CiAgICAgdm9pZCBhcHBlbmQoIENTU1J1bGVJbXBs
ICpydWxlICk7CiAKIHByb3RlY3RlZDoKQEAgLTE3MiwxNCArMTcyLDE0IEBAIHB1YmxpYzoKICAg
ICBNZWRpYUxpc3RJbXBsICptZWRpYSgpIGNvbnN0IHsgcmV0dXJuIG1fbHN0TWVkaWE7IH0KICAg
ICBDU1NSdWxlTGlzdEltcGwgKmNzc1J1bGVzKCkgeyByZXR1cm4gbV9sc3RDU1NSdWxlczsgfQog
Ci0gICAgdW5zaWduZWQgbG9uZyBpbnNlcnRSdWxlICggY29uc3QgRE9NOjpET01TdHJpbmcgJnJ1
bGUsIHVuc2lnbmVkIGxvbmcgaW5kZXggKTsKLSAgICB2b2lkIGRlbGV0ZVJ1bGUgKCB1bnNpZ25l
ZCBsb25nIGluZGV4ICkgeyBtX2xzdENTU1J1bGVzLT5kZWxldGVSdWxlKCBpbmRleCApOyB9Cisg
ICAgdW5zaWduZWQgaW5zZXJ0UnVsZSAoIGNvbnN0IERPTTo6RE9NU3RyaW5nICZydWxlLCB1bnNp
Z25lZCBpbmRleCApOworICAgIHZvaWQgZGVsZXRlUnVsZSAoIHVuc2lnbmVkIGluZGV4ICkgeyBt
X2xzdENTU1J1bGVzLT5kZWxldGVSdWxlKCBpbmRleCApOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wg
aXNNZWRpYVJ1bGUoKSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBET01TdHJpbmcgY3Nz
VGV4dCgpIGNvbnN0OwogCiAgICAgLyogTm90IHBhcnQgb2YgdGhlIERPTSAqLwotICAgIHVuc2ln
bmVkIGxvbmcgYXBwZW5kKCBDU1NSdWxlSW1wbCAqcnVsZSApOworICAgIHVuc2lnbmVkIGFwcGVu
ZCggQ1NTUnVsZUltcGwgKnJ1bGUgKTsKIHByb3RlY3RlZDoKICAgICBNZWRpYUxpc3RJbXBsICpt
X2xzdE1lZGlhOwogICAgIENTU1J1bGVMaXN0SW1wbCAqbV9sc3RDU1NSdWxlczsKSW5kZXg6IFdl
YkNvcmUva2h0bWwvY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMTUKZGlmZiAtcCAtdSAtcjEuMTUgV2ViQ29yZS9raHRtbC9j
c3MvY3NzX3N0eWxlc2hlZXRpbXBsLmNwcAotLS0gV2ViQ29yZS9raHRtbC9jc3MvY3NzX3N0eWxl
c2hlZXRpbXBsLmNwcAkzMCBKdWwgMjAwNSAyMToxOTo0NSAtMDAwMAkxLjE1CisrKyBXZWJDb3Jl
L2todG1sL2Nzcy9jc3Nfc3R5bGVzaGVldGltcGwuY3BwCTIxIEF1ZyAyMDA1IDA1OjI3OjI2IC0w
MDAwCkBAIC0xNjQsNyArMTY0LDcgQEAgQ1NTUnVsZUltcGwgKkNTU1N0eWxlU2hlZXRJbXBsOjpv
d25lclJ1bAogICAgIHJldHVybiAwOwogfQogCi11bnNpZ25lZCBsb25nIENTU1N0eWxlU2hlZXRJ
bXBsOjppbnNlcnRSdWxlKCBjb25zdCBET01TdHJpbmcgJnJ1bGUsIHVuc2lnbmVkIGxvbmcgaW5k
ZXgsIGludCAmZXhjZXB0aW9uY29kZSApCit1bnNpZ25lZCBDU1NTdHlsZVNoZWV0SW1wbDo6aW5z
ZXJ0UnVsZSggY29uc3QgRE9NU3RyaW5nICZydWxlLCB1bnNpZ25lZCBpbmRleCwgaW50ICZleGNl
cHRpb25jb2RlICkKIHsKICAgICBleGNlcHRpb25jb2RlID0gMDsKICAgICBpZihpbmRleCA+IG1f
bHN0Q2hpbGRyZW4tPmNvdW50KCkpIHsKQEAgLTE4NSw3ICsxODUsNyBAQCB1bnNpZ25lZCBsb25n
IENTU1N0eWxlU2hlZXRJbXBsOjppbnNlcnRSCiAgICAgcmV0dXJuIGluZGV4OwogfQogCi11bnNp
Z25lZCBsb25nIENTU1N0eWxlU2hlZXRJbXBsOjphZGRSdWxlKCBjb25zdCBET01TdHJpbmcgJnNl
bGVjdG9yLCBjb25zdCBET01TdHJpbmcgJnN0eWxlLCBsb25nIGluZGV4LCBpbnQgJmV4Y2VwdGlv
bmNvZGUgKQordW5zaWduZWQgQ1NTU3R5bGVTaGVldEltcGw6OmFkZFJ1bGUoIGNvbnN0IERPTVN0
cmluZyAmc2VsZWN0b3IsIGNvbnN0IERPTVN0cmluZyAmc3R5bGUsIGludCBpbmRleCwgaW50ICZl
eGNlcHRpb25jb2RlICkKIHsKICAgICBpZiAoaW5kZXggPT0gLTEpCiAgICAgICAgIGluZGV4ID0g
bV9sc3RDaGlsZHJlbi0+Y291bnQoKTsKQEAgLTE5Nyw3ICsxOTcsNyBAQCBDU1NSdWxlTGlzdElt
cGwgKkNTU1N0eWxlU2hlZXRJbXBsOjpjc3NSCiAgICAgcmV0dXJuIG5ldyBDU1NSdWxlTGlzdElt
cGwodGhpcyk7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTaGVldEltcGw6OmRlbGV0ZVJ1bGUoIHVuc2ln
bmVkIGxvbmcgaW5kZXgsIGludCAmZXhjZXB0aW9uY29kZSApCit2b2lkIENTU1N0eWxlU2hlZXRJ
bXBsOjpkZWxldGVSdWxlKCB1bnNpZ25lZCBpbmRleCwgaW50ICZleGNlcHRpb25jb2RlICkKIHsK
ICAgICBleGNlcHRpb25jb2RlID0gMDsKICAgICBTdHlsZUJhc2VJbXBsICpiID0gbV9sc3RDaGls
ZHJlbi0+dGFrZShpbmRleCk7CkBAIC0zMDksMTAgKzMwOSwxMCBAQCB2b2lkIFN0eWxlU2hlZXRM
aXN0SW1wbDo6cmVtb3ZlKCBTdHlsZVNoCiAgICAgICAgIHMtPmRlcmVmKCk7CiB9CiAKLXVuc2ln
bmVkIGxvbmcgU3R5bGVTaGVldExpc3RJbXBsOjpsZW5ndGgoKSBjb25zdAordW5zaWduZWQgU3R5
bGVTaGVldExpc3RJbXBsOjpsZW5ndGgoKSBjb25zdAogewogICAgIC8vIGhhY2sgc28gaW1wbGlj
aXQgQk9EWSBzdHlsZXNoZWV0cyBkb24ndCBnZXQgY291bnRlZCBoZXJlCi0gICAgdW5zaWduZWQg
bG9uZyBsID0gMDsKKyAgICB1bnNpZ25lZCBsID0gMDsKICAgICBRUHRyTGlzdEl0ZXJhdG9yPFN0
eWxlU2hlZXRJbXBsPiBpdChzdHlsZVNoZWV0cyk7CiAgICAgZm9yICg7IGl0LmN1cnJlbnQoKTsg
KytpdCkgewogICAgICAgICBpZiAoIWl0LmN1cnJlbnQoKS0+aXNDU1NTdHlsZVNoZWV0KCkgfHwg
IXN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXRJbXBsKj4oaXQuY3VycmVudCgpKS0+aW1wbGljaXQo
KSkKQEAgLTMyMSw5ICszMjEsOSBAQCB1bnNpZ25lZCBsb25nIFN0eWxlU2hlZXRMaXN0SW1wbDo6
bGVuZ3RoCiAgICAgcmV0dXJuIGw7CiB9CiAKLVN0eWxlU2hlZXRJbXBsICpTdHlsZVNoZWV0TGlz
dEltcGw6Oml0ZW0gKCB1bnNpZ25lZCBsb25nIGluZGV4ICkKK1N0eWxlU2hlZXRJbXBsICpTdHls
ZVNoZWV0TGlzdEltcGw6Oml0ZW0gKCB1bnNpZ25lZCBpbmRleCApCiB7Ci0gICAgdW5zaWduZWQg
bG9uZyBsID0gMDsKKyAgICB1bnNpZ25lZCBsID0gMDsKICAgICBRUHRyTGlzdEl0ZXJhdG9yPFN0
eWxlU2hlZXRJbXBsPiBpdChzdHlsZVNoZWV0cyk7CiAgICAgZm9yICg7IGl0LmN1cnJlbnQoKTsg
KytpdCkgewogICAgICAgICBpZiAoIWl0LmN1cnJlbnQoKS0+aXNDU1NTdHlsZVNoZWV0KCkgfHwg
IXN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXRJbXBsKj4oaXQuY3VycmVudCgpKS0+aW1wbGljaXQo
KSkgewpJbmRleDogV2ViQ29yZS9raHRtbC9jc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc19zdHlsZXNoZWV0
aW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEyCmRpZmYgLXAgLXUgLXIxLjEyIFdlYkNv
cmUva2h0bWwvY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5oCi0tLSBXZWJDb3JlL2todG1sL2Nzcy9j
c3Nfc3R5bGVzaGVldGltcGwuaAk5IEp1bCAyMDA1IDIwOjE5OjAwIC0wMDAwCTEuMTIKKysrIFdl
YkNvcmUva2h0bWwvY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5oCTIxIEF1ZyAyMDA1IDA1OjI3OjI2
IC0wMDAwCkBAIC0xMDAsOSArMTAwLDkgQEAgcHVibGljOgogCiAgICAgQ1NTUnVsZUltcGwgKm93
bmVyUnVsZSgpIGNvbnN0OwogICAgIENTU1J1bGVMaXN0SW1wbCAqY3NzUnVsZXMoKTsKLSAgICB1
bnNpZ25lZCBsb25nIGluc2VydFJ1bGUgKCBjb25zdCBET006OkRPTVN0cmluZyAmcnVsZSwgdW5z
aWduZWQgbG9uZyBpbmRleCwgaW50ICZleGNlcHRpb25jb2RlICk7Ci0gICAgdm9pZCBkZWxldGVS
dWxlICggdW5zaWduZWQgbG9uZyBpbmRleCwgaW50ICZleGNlcHRpb25jb2RlICk7Ci0gICAgdW5z
aWduZWQgbG9uZyBhZGRSdWxlICggY29uc3QgRE9NU3RyaW5nICZzZWxlY3RvciwgY29uc3QgRE9N
U3RyaW5nICZzdHlsZSwgbG9uZyBpbmRleCwgaW50ICZleGNlcHRpb25jb2RlICk7CisgICAgdW5z
aWduZWQgaW5zZXJ0UnVsZSAoIGNvbnN0IERPTTo6RE9NU3RyaW5nICZydWxlLCB1bnNpZ25lZCBp
bmRleCwgaW50ICZleGNlcHRpb25jb2RlICk7CisgICAgdm9pZCBkZWxldGVSdWxlICggdW5zaWdu
ZWQgaW5kZXgsIGludCAmZXhjZXB0aW9uY29kZSApOworICAgIHVuc2lnbmVkIGFkZFJ1bGUgKCBj
b25zdCBET01TdHJpbmcgJnNlbGVjdG9yLCBjb25zdCBET01TdHJpbmcgJnN0eWxlLCBpbnQgaW5k
ZXgsIGludCAmZXhjZXB0aW9uY29kZSApOwogCiAgICAgdm9pZCBhZGROYW1lc3BhY2UoQ1NTUGFy
c2VyKiBwLCBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiB1
cmkpOwogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZGV0ZXJtaW5lTmFtZXNwYWNlKGNvbnN0IEF0
b21pY1N0cmluZyYgcHJlZml4KTsKQEAgLTEzMCw4ICsxMzAsOCBAQCBwdWJsaWM6CiAgICAgflN0
eWxlU2hlZXRMaXN0SW1wbCgpOwogCiAgICAgLy8gdGhlIGZvbGxvd2luZyB0d28gaWdub3JlIGlt
cGxpY2l0IHN0eWxlc2hlZXRzCi0gICAgdW5zaWduZWQgbG9uZyBsZW5ndGgoKSBjb25zdDsKLSAg
ICBTdHlsZVNoZWV0SW1wbCAqaXRlbSAoIHVuc2lnbmVkIGxvbmcgaW5kZXggKTsKKyAgICB1bnNp
Z25lZCBsZW5ndGgoKSBjb25zdDsKKyAgICBTdHlsZVNoZWV0SW1wbCAqaXRlbSAoIHVuc2lnbmVk
IGluZGV4ICk7CiAKICAgICB2b2lkIGFkZChTdHlsZVNoZWV0SW1wbCogcyk7CiAgICAgdm9pZCBy
ZW1vdmUoU3R5bGVTaGVldEltcGwqIHMpOwpAQCAtMTU3LDggKzE1Nyw4IEBAIHB1YmxpYzoKIAog
ICAgIENTU1N0eWxlU2hlZXRJbXBsICpwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3Q7CiAgICAgQ1NT
UnVsZUltcGwgKnBhcmVudFJ1bGUoKSBjb25zdDsKLSAgICB1bnNpZ25lZCBsb25nIGxlbmd0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fbHN0TWVkaWEuY291bnQoKTsgfQotICAgIERPTTo6RE9NU3RyaW5n
IGl0ZW0gKCB1bnNpZ25lZCBsb25nIGluZGV4ICkgY29uc3QgeyByZXR1cm4gbV9sc3RNZWRpYVtp
bmRleF07IH0KKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xzdE1lZGlh
LmNvdW50KCk7IH0KKyAgICBET006OkRPTVN0cmluZyBpdGVtICggdW5zaWduZWQgaW5kZXggKSBj
b25zdCB7IHJldHVybiBtX2xzdE1lZGlhW2luZGV4XTsgfQogICAgIHZvaWQgZGVsZXRlTWVkaXVt
ICggY29uc3QgRE9NOjpET01TdHJpbmcgJm9sZE1lZGl1bSApOwogICAgIHZvaWQgYXBwZW5kTWVk
aXVtICggY29uc3QgRE9NOjpET01TdHJpbmcgJm5ld01lZGl1bSApIHsgbV9sc3RNZWRpYS5hcHBl
bmQobmV3TWVkaXVtKTsgfQogCkluZGV4OiBXZWJDb3JlL2todG1sL2Nzcy9jc3NfdmFsdWVpbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3Nz
X3ZhbHVlaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNzMKZGlmZiAtcCAtdSAtcjEu
NzMgV2ViQ29yZS9raHRtbC9jc3MvY3NzX3ZhbHVlaW1wbC5jcHAKLS0tIFdlYkNvcmUva2h0bWwv
Y3NzL2Nzc192YWx1ZWltcGwuY3BwCTYgQXVnIDIwMDUgMTY6MzM6MDIgLTAwMDAJMS43MworKysg
V2ViQ29yZS9raHRtbC9jc3MvY3NzX3ZhbHVlaW1wbC5jcHAJMjEgQXVnIDIwMDUgMDU6Mjc6Mjcg
LTAwMDAKQEAgLTUwNywxMiArNTA3LDEyIEBAIHZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b25JbXBsOjpzZXQKICAgICBtdWx0aUxlbmd0aCA9IGZhbHNlOwogfQogCi11bnNpZ25lZCBsb25n
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbDo6bGVuZ3RoKCkgY29uc3QKK3Vuc2lnbmVk
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbDo6bGVuZ3RoKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbV92YWx1ZXMuY291bnQoKTsKIH0KIAotRE9NU3RyaW5nIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uSW1wbDo6aXRlbSh1bnNpZ25lZCBsb25nIGkpIGNvbnN0CitET01TdHJpbmcgQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsOjppdGVtKHVuc2lnbmVkIGkpIGNvbnN0CiB7CiAg
ICAgaWYgKGkgPj0gbV92YWx1ZXMuY291bnQoKSkKICAgICAgICByZXR1cm4gRE9NU3RyaW5nKCk7
CkluZGV4OiBXZWJDb3JlL2todG1sL2Nzcy9jc3NfdmFsdWVpbXBsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc192YWx1ZWltcGwuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS40NwpkaWZmIC1wIC11IC1yMS40NyBXZWJDb3JlL2todG1sL2Nzcy9j
c3NfdmFsdWVpbXBsLmgKLS0tIFdlYkNvcmUva2h0bWwvY3NzL2Nzc192YWx1ZWltcGwuaAkxMiBN
YXkgMjAwNSAxNzoxMToyMSAtMDAwMAkxLjQ3CisrKyBXZWJDb3JlL2todG1sL2Nzcy9jc3NfdmFs
dWVpbXBsLmgJMjEgQXVnIDIwMDUgMDU6Mjc6MjcgLTAwMDAKQEAgLTU2LDggKzU2LDggQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgRE9NU3RyaW5nIGNzc1RleHQoKSBjb25zdCA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIHNldENzc1RleHQoY29uc3QgRE9NU3RyaW5nICYsIGludCAmZXhjZXB0aW9uQ29k
ZSkgPSAwOwogCi0gICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxlbmd0aCgpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIERPTVN0cmluZyBpdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IERPTVN0cmluZyBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdCA9IDA7CiAKICAgICBDU1NWYWx1
ZUltcGwgKmdldFByb3BlcnR5Q1NTVmFsdWUoY29uc3QgRE9NU3RyaW5nICZwcm9wZXJ0eU5hbWUp
OwogICAgIERPTVN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGNvbnN0IERPTVN0cmluZyAmcHJvcGVy
dHlOYW1lKTsKQEAgLTExOSw4ICsxMTksOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5DU1NW
YWx1ZUxpc3RJbXBsKCk7CiAKLSAgICB1bnNpZ25lZCBsb25nIGxlbmd0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWVzLmNvdW50KCk7IH0KLSAgICBDU1NWYWx1ZUltcGwgKml0ZW0gKCB1bnNpZ25l
ZCBsb25nIGluZGV4ICkgeyByZXR1cm4gbV92YWx1ZXMuYXQoaW5kZXgpOyB9CisgICAgdW5zaWdu
ZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuY291bnQoKTsgfQorICAgIENTU1Zh
bHVlSW1wbCAqaXRlbSAoIHVuc2lnbmVkIGluZGV4ICkgeyByZXR1cm4gbV92YWx1ZXMuYXQoaW5k
ZXgpOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNWYWx1ZUxpc3QoKSB7IHJldHVybiB0cnVlOyB9
CiAKQEAgLTQzNCw4ICs0MzQsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBET01TdHJpbmcgY3Nz
VGV4dCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXRDc3NUZXh0KGNvbnN0IERPTVN0cmlu
ZyAmLCBpbnQgJmV4Y2VwdGlvbkNvZGUpOwogCi0gICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxl
bmd0aCgpIGNvbnN0OwotICAgIHZpcnR1YWwgRE9NU3RyaW5nIGl0ZW0odW5zaWduZWQgbG9uZyBp
bmRleCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIERPTVN0cmluZyBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKIAogICAgIHZpcnR1
YWwgQ1NTVmFsdWVJbXBsICpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25z
dDsKICAgICB2aXJ0dWFsIERPTVN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGludCBwcm9wZXJ0eUlE
KSBjb25zdDsKSW5kZXg6IFdlYkNvcmUva2h0bWwvZG9tL2Nzc19ydWxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2Nzc19ydWxlLmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuNwpkaWZmIC1wIC11IC1yMS43IFdlYkNvcmUva2h0bWwvZG9tL2Nzc19y
dWxlLmgKLS0tIFdlYkNvcmUva2h0bWwvZG9tL2Nzc19ydWxlLmgJMTEgTWF5IDIwMDUgMDA6NTg6
MjggLTAwMDAJMS43CisrKyBXZWJDb3JlL2todG1sL2RvbS9jc3NfcnVsZS5oCTIxIEF1ZyAyMDA1
IDA1OjI3OjI3IC0wMDAwCkBAIC0zNTAsNyArMzUwLDcgQEAgcHVibGljOgogICAgICAqIGFuZCBp
cyB1bnBhcnNhYmxlLgogICAgICAqCiAgICAgICovCi0gICAgdW5zaWduZWQgbG9uZyBpbnNlcnRS
dWxlICggY29uc3QgRE9NU3RyaW5nICZydWxlLCB1bnNpZ25lZCBsb25nIGluZGV4ICk7CisgICAg
dW5zaWduZWQgaW5zZXJ0UnVsZSAoIGNvbnN0IERPTVN0cmluZyAmcnVsZSwgdW5zaWduZWQgaW5k
ZXggKTsKIAogICAgIC8qKgogICAgICAqIFVzZWQgdG8gZGVsZXRlIGEgcnVsZSBmcm9tIHRoZSBt
ZWRpYSBibG9jay4KQEAgLTM2OCw3ICszNjgsNyBAQCBwdWJsaWM6CiAgICAgICogcmVhZG9ubHku
CiAgICAgICoKICAgICAgKi8KLSAgICB2b2lkIGRlbGV0ZVJ1bGUgKCB1bnNpZ25lZCBsb25nIGlu
ZGV4ICk7CisgICAgdm9pZCBkZWxldGVSdWxlICggdW5zaWduZWQgaW5kZXggKTsKIH07CiAKIApA
QCAtNTIyLDcgKzUyMiw3IEBAIHB1YmxpYzoKICAgICAgKiBsZW5ndGgtMSA8L2NvZGU+IGluY2x1
c2l2ZS4KICAgICAgKgogICAgICAqLwotICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKCkgY29uc3Q7
CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAKICAgICAvKioKICAgICAgKiBVc2VkIHRv
IHJldHJpZXZlIGEgQ1NTIHJ1bGUgYnkgb3JkaW5hbCBpbmRleC4gVGhlIG9yZGVyIGluIHRoaXMK
QEAgLTUzNiw3ICs1MzYsNyBAQCBwdWJsaWM6CiAgICAgICogaXMgbm90IGEgdmFsaWQgaW5kZXgu
CiAgICAgICoKICAgICAgKi8KLSAgICBDU1NSdWxlIGl0ZW0gKCB1bnNpZ25lZCBsb25nIGluZGV4
ICk7CisgICAgQ1NTUnVsZSBpdGVtICggdW5zaWduZWQgaW5kZXggKTsKIAogICAgIC8qKgogICAg
ICAqIEBpbnRlcm5hbApJbmRleDogV2ViQ29yZS9raHRtbC9kb20vY3NzX3N0eWxlc2hlZXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vY3NzX3N0eWxl
c2hlZXQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS45CmRpZmYgLXAgLXUgLXIxLjkgV2ViQ29y
ZS9raHRtbC9kb20vY3NzX3N0eWxlc2hlZXQuaAotLS0gV2ViQ29yZS9raHRtbC9kb20vY3NzX3N0
eWxlc2hlZXQuaAkxOCBNYXkgMjAwNSAyMToxMDoyNCAtMDAwMAkxLjkKKysrIFdlYkNvcmUva2h0
bWwvZG9tL2Nzc19zdHlsZXNoZWV0LmgJMjEgQXVnIDIwMDUgMDU6Mjc6MjggLTAwMDAKQEAgLTI5
Myw3ICsyOTMsNyBAQCBwdWJsaWM6CiAgICAgICogYW5kIGlzIHVucGFyc2FibGUuCiAgICAgICoK
ICAgICAgKi8KLSAgICB1bnNpZ25lZCBsb25nIGluc2VydFJ1bGUgKCBjb25zdCBET01TdHJpbmcg
JnJ1bGUsIHVuc2lnbmVkIGxvbmcgaW5kZXggKTsKKyAgICB1bnNpZ25lZCBpbnNlcnRSdWxlICgg
Y29uc3QgRE9NU3RyaW5nICZydWxlLCB1bnNpZ25lZCBpbmRleCApOwogCiAgICAgLyoqCiAgICAg
ICogVXNlZCB0byBkZWxldGUgYSBydWxlIGZyb20gdGhlIHN0eWxlIHNoZWV0LgpAQCAtMzExLDEw
ICszMTEsMTAgQEAgcHVibGljOgogICAgICAqIHJlYWRvbmx5LgogICAgICAqCiAgICAgICovCi0g
ICAgdm9pZCBkZWxldGVSdWxlICggdW5zaWduZWQgbG9uZyBpbmRleCApOworICAgIHZvaWQgZGVs
ZXRlUnVsZSAoIHVuc2lnbmVkIGluZGV4ICk7CiAKICAgICAvKiBNaWNyb3NvZnQgZXh0ZW5zaW9u
LiAqLwotICAgIHZvaWQgYWRkUnVsZSAoIGNvbnN0IERPTVN0cmluZyAmc2VsZWN0b3IsIGNvbnN0
IERPTVN0cmluZyAmc3R5bGUsIGxvbmcgaW5kZXggKTsKKyAgICB2b2lkIGFkZFJ1bGUgKCBjb25z
dCBET01TdHJpbmcgJnNlbGVjdG9yLCBjb25zdCBET01TdHJpbmcgJnN0eWxlLCBpbnQgaW5kZXgg
KTsKIH07CiAKIApAQCAtMzQ0LDcgKzM0NCw3IEBAIHB1YmxpYzoKICAgICAgKiBsZW5ndGgtMSA8
L2NvZGU+IGluY2x1c2l2ZS4KICAgICAgKgogICAgICAqLwotICAgIHVuc2lnbmVkIGxvbmcgbGVu
Z3RoKCkgY29uc3Q7CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAKICAgICAvKioKICAg
ICAgKiBVc2VkIHRvIHJldHJpZXZlIGEgc3R5bGUgc2hlZXQgYnkgb3JkaW5hbCBpbmRleC4KQEAg
LTM1Niw3ICszNTYsNyBAQCBwdWJsaWM6CiAgICAgICogdGhhdCBpcyBub3QgYSB2YWxpZCBpbmRl
eC4KICAgICAgKgogICAgICAqLwotICAgIFN0eWxlU2hlZXQgaXRlbSAoIHVuc2lnbmVkIGxvbmcg
aW5kZXggKTsKKyAgICBTdHlsZVNoZWV0IGl0ZW0gKCB1bnNpZ25lZCBpbmRleCApOwogCiAgICAg
LyoqCiAgICAgICogQGludGVybmFsCkBAIC00MTIsNyArNDEyLDcgQEAgcHVibGljOgogICAgIC8q
KgogICAgICAqIFRoZSBudW1iZXIgb2YgbWVkaWEgaW4gdGhlIGxpc3QuIFRoZSByYW5nZSBvZiB2
YWxpZCBtZWRpYSBpcyAwIHRvIGxlbmd0aC0xIGluY2x1c2l2ZS4KICAgICAgKi8KLSAgICB1bnNp
Z25lZCBsb25nIGxlbmd0aCgpIGNvbnN0OworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0Owog
CiAKICAgICAvKioKQEAgLTQyNCw3ICs0MjQsNyBAQCBwdWJsaWM6CiAgICAgICogQHJldHVybiBU
aGUgbWVkaXVtIGF0IHRoZSBpbmRleHRoIHBvc2l0aW9uIGluIHRoZSBNZWRpYUxpc3QsIG9yIG51
bGwgaWYKICAgICAgKiB0aGF0IGlzIG5vdCBhIHZhbGlkIGluZGV4LgogICAgICAqLwotICAgIERP
TVN0cmluZyBpdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgpIGNvbnN0OworICAgIERPTVN0cmluZyBp
dGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKIAogICAgIC8qKgogICAgICAqIERlbGV0ZXMgdGhl
IG1lZGl1bSBpbmRpY2F0ZWQgYnkgb2xkTWVkaXVtIGZyb20gdGhlIGxpc3QuCkluZGV4OiBXZWJD
b3JlL2todG1sL2RvbS9jc3NfdmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC9kb20vY3NzX3ZhbHVlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOApk
aWZmIC1wIC11IC1yMS44IFdlYkNvcmUva2h0bWwvZG9tL2Nzc192YWx1ZS5oCi0tLSBXZWJDb3Jl
L2todG1sL2RvbS9jc3NfdmFsdWUuaAkxMSBNYXkgMjAwNSAwMDo1ODoyOCAtMDAwMAkxLjgKKysr
IFdlYkNvcmUva2h0bWwvZG9tL2Nzc192YWx1ZS5oCTIxIEF1ZyAyMDA1IDA1OjI3OjI4IC0wMDAw
CkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKICAgICAgKiBkZWNsYXJhdGlvbiBibG9jay4KICAg
ICAgKgogICAgICAqLwotICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKCkgY29uc3Q7CisgICAgdW5z
aWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAKICAgICAvKioKICAgICAgKiBUaGUgQ1NTIHJ1bGUgdGhh
dCBjb250YWlucyB0aGlzIGRlY2xhcmF0aW9uIGJsb2NrLgpAQCAtMjE1LDcgKzIxNSw3IEBAIHB1
YmxpYzoKICAgICAgKiBlbXB0eSBzdHJpbmcgaWYgbm8gcHJvcGVydHkgZXhpc3RzIGF0IHRoaXMg
cG9zaXRpb24uCiAgICAgICoKICAgICAgKi8KLSAgICBET01TdHJpbmcgaXRlbSAoIHVuc2lnbmVk
IGxvbmcgaW5kZXggKTsKKyAgICBET01TdHJpbmcgaXRlbSAoIHVuc2lnbmVkIGluZGV4ICk7CiAK
ICAgICAvKioKICAgICAgKiBAaW50ZXJuYWwKQEAgLTM0Niw3ICszNDYsNyBAQCBwdWJsaWM6CiAg
ICAgICogPC9jb2RlPiBpbmNsdXNpdmUuCiAgICAgICoKICAgICAgKi8KLSAgICB1bnNpZ25lZCBs
b25nIGxlbmd0aCgpIGNvbnN0OworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwogCiAgICAg
LyoqCiAgICAgICogVXNlZCB0byByZXRyaWV2ZSBhIENTUyBydWxlIGJ5IG9yZGluYWwgaW5kZXgu
IFRoZSBvcmRlciBpbiB0aGlzCkBAIC0zNjAsNyArMzYwLDcgQEAgcHVibGljOgogICAgICAqIHRo
YXQgaXMgbm90IHZhbGlkIGluZGV4LgogICAgICAqCiAgICAgICovCi0gICAgQ1NTVmFsdWUgaXRl
bSAoIHVuc2lnbmVkIGxvbmcgaW5kZXggKTsKKyAgICBDU1NWYWx1ZSBpdGVtICggdW5zaWduZWQg
aW5kZXggKTsKIAogcHJvdGVjdGVkOgogICAgIENTU1ZhbHVlTGlzdEltcGwgKnZpbXBsOwpJbmRl
eDogV2ViQ29yZS9raHRtbC9kb20vZG9tMl9ldmVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9kb20yX2V2ZW50cy5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMjQKZGlmZiAtcCAtdSAtcjEuMjQgV2ViQ29yZS9raHRtbC9kb20vZG9tMl9l
dmVudHMuY3BwCi0tLSBXZWJDb3JlL2todG1sL2RvbS9kb20yX2V2ZW50cy5jcHAJMjQgTWF5IDIw
MDUgMjE6MTY6MjkgLTAwMDAJMS4yNAorKysgV2ViQ29yZS9raHRtbC9kb20vZG9tMl9ldmVudHMu
Y3BwCTIxIEF1ZyAyMDA1IDA1OjI3OjI4IC0wMDAwCkBAIC0zNCwxMSArMzQsMTEgQEAKIAogbmFt
ZXNwYWNlIERPTSB7CiAKLWNvbnN0IHVuc2lnbmVkIGxvbmcgS2V5Ym9hcmRFdmVudDo6RE9NX0tF
WV9MT0NBVElPTl9TVEFOREFSRDsKLWNvbnN0IHVuc2lnbmVkIGxvbmcgS2V5Ym9hcmRFdmVudDo6
RE9NX0tFWV9MT0NBVElPTl9MRUZUOwotY29uc3QgdW5zaWduZWQgbG9uZyBLZXlib2FyZEV2ZW50
OjpET01fS0VZX0xPQ0FUSU9OX1JJR0hUOwotY29uc3QgdW5zaWduZWQgbG9uZyBLZXlib2FyZEV2
ZW50OjpET01fS0VZX0xPQ0FUSU9OX05VTVBBRDsKLWNvbnN0IHVuc2lnbmVkIGxvbmcgS2V5Ym9h
cmRFdmVudDo6RE9NX0tFWV9MT0NBVElPTl9VTktOT1dOOworY29uc3QgdW5zaWduZWQgS2V5Ym9h
cmRFdmVudDo6RE9NX0tFWV9MT0NBVElPTl9TVEFOREFSRDsKK2NvbnN0IHVuc2lnbmVkIEtleWJv
YXJkRXZlbnQ6OkRPTV9LRVlfTE9DQVRJT05fTEVGVDsKK2NvbnN0IHVuc2lnbmVkIEtleWJvYXJk
RXZlbnQ6OkRPTV9LRVlfTE9DQVRJT05fUklHSFQ7Citjb25zdCB1bnNpZ25lZCBLZXlib2FyZEV2
ZW50OjpET01fS0VZX0xPQ0FUSU9OX05VTVBBRDsKK2NvbnN0IHVuc2lnbmVkIEtleWJvYXJkRXZl
bnQ6OkRPTV9LRVlfTE9DQVRJT05fVU5LTk9XTjsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IApAQCAtMjk5LDcgKzI5OSw3IEBAIEFic3RyYWN0VmlldyBVSUV2ZW50Ojp2aWV3KCkgY29uc3QK
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VUlFdmVudEltcGwqPihpbXBsKS0+dmlldygpOwogfQog
Ci1sb25nIFVJRXZlbnQ6OmRldGFpbCgpIGNvbnN0CitpbnQgVUlFdmVudDo6ZGV0YWlsKCkgY29u
c3QKIHsKICAgICBpZiAoIWltcGwpCiAJdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6
SU5WQUxJRF9TVEFURV9FUlIpOwpAQCAtMzk5LDcgKzM5OSw3IEBAIHZvaWQgVUlFdmVudDo6aW5p
dFVJRXZlbnQoY29uc3QgRE9NU3RyaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgY2FuQnViYmxlQXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBjYW5jZWxhYmxlQXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
QWJzdHJhY3RWaWV3ICZ2aWV3QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bG9uZyBkZXRhaWxBcmcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV0
YWlsQXJnKQogewogICAgIGlmICghaW1wbCkKIAl0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0
aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7CkBAIC00NDksNyArNDQ5LDcgQEAgTW91c2VFdmVudDo6
fk1vdXNlRXZlbnQoKQogewogfQogCi1sb25nIE1vdXNlRXZlbnQ6OnNjcmVlblgoKSBjb25zdAor
aW50IE1vdXNlRXZlbnQ6OnNjcmVlblgoKSBjb25zdAogewogICAgIGlmICghaW1wbCkKIAl0aHJv
dyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7CkBAIC00NTcs
NyArNDU3LDcgQEAgbG9uZyBNb3VzZUV2ZW50OjpzY3JlZW5YKCkgY29uc3QKICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8TW91c2VFdmVudEltcGwqPihpbXBsKS0+c2NyZWVuWCgpOwogfQogCi1sb25n
IE1vdXNlRXZlbnQ6OnNjcmVlblkoKSBjb25zdAoraW50IE1vdXNlRXZlbnQ6OnNjcmVlblkoKSBj
b25zdAogewogICAgIGlmICghaW1wbCkKIAl0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9u
OjpJTlZBTElEX1NUQVRFX0VSUik7CkBAIC00NjUsNyArNDY1LDcgQEAgbG9uZyBNb3VzZUV2ZW50
OjpzY3JlZW5ZKCkgY29uc3QKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TW91c2VFdmVudEltcGwq
PihpbXBsKS0+c2NyZWVuWSgpOwogfQogCi1sb25nIE1vdXNlRXZlbnQ6OmNsaWVudFgoKSBjb25z
dAoraW50IE1vdXNlRXZlbnQ6OmNsaWVudFgoKSBjb25zdAogewogICAgIGlmICghaW1wbCkKIAl0
aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7CkBAIC00
NzMsNyArNDczLDcgQEAgbG9uZyBNb3VzZUV2ZW50OjpjbGllbnRYKCkgY29uc3QKICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8TW91c2VFdmVudEltcGwqPihpbXBsKS0+Y2xpZW50WCgpOwogfQogCi1s
b25nIE1vdXNlRXZlbnQ6OmNsaWVudFkoKSBjb25zdAoraW50IE1vdXNlRXZlbnQ6OmNsaWVudFko
KSBjb25zdAogewogICAgIGlmICghaW1wbCkKIAl0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0
aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7CkBAIC01MzMsMTEgKzUzMywxMSBAQCB2b2lkIE1vdXNl
RXZlbnQ6OmluaXRNb3VzZUV2ZW50KGNvbnN0IERPCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEFic3RyYWN0VmlldyAmdmlld0FyZywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxvbmcgZGV0YWlsQXJnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbG9uZyBzY3JlZW5YQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbG9uZyBzY3JlZW5ZQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbG9uZyBjbGllbnRYQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbG9uZyBjbGllbnRZQXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGRldGFpbEFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBzY3JlZW5YQXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNj
cmVlbllBcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2xpZW50
WEFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbGllbnRZQXJn
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5QXJnLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbHRLZXlBcmcsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNoaWZ0S2V5QXJnLApAQCAtNzAz
LDcgKzcwMyw3IEBAIERPTVN0cmluZyBLZXlib2FyZEV2ZW50OjprZXlJZGVudGlmaWVyKCkKICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudEltcGwqPihpbXBsKS0+a2V5SWRlbnRp
ZmllcigpOwogfQogCi11bnNpZ25lZCBsb25nIEtleWJvYXJkRXZlbnQ6OmtleUxvY2F0aW9uKCkg
Y29uc3QKK3Vuc2lnbmVkIEtleWJvYXJkRXZlbnQ6OmtleUxvY2F0aW9uKCkgY29uc3QKIHsKICAg
ICBpZiAoIWltcGwpCiAJdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9T
VEFURV9FUlIpOwpAQCAtNzU2LDcgKzc1Niw3IEBAIHZvaWQgS2V5Ym9hcmRFdmVudDo6aW5pdEtl
eWJvYXJkRXZlbnQoY28KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGNhbmNlbGFibGVBcmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgQWJzdHJhY3RWaWV3ICZ2aWV3QXJnLCAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBET01TdHJpbmcgJmtleUlkZW50aWZpZXJBcmcsIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcga2V5TG9j
YXRpb25BcmcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGtleUxvY2F0aW9uQXJnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGN0cmxLZXlBcmcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgc2hpZnRLZXlBcmcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgYWx0S2V5QXJnLCAKSW5kZXg6IFdlYkNvcmUva2h0bWwvZG9tL2RvbTJf
ZXZlbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9t
L2RvbTJfZXZlbnRzLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTkKZGlmZiAtcCAtdSAtcjEu
MTkgV2ViQ29yZS9raHRtbC9kb20vZG9tMl9ldmVudHMuaAotLS0gV2ViQ29yZS9raHRtbC9kb20v
ZG9tMl9ldmVudHMuaAk5IEF1ZyAyMDA1IDIxOjI5OjQxIC0wMDAwCTEuMTkKKysrIFdlYkNvcmUv
a2h0bWwvZG9tL2RvbTJfZXZlbnRzLmgJMjEgQXVnIDIwMDUgMDU6Mjc6MjkgLTAwMDAKQEAgLTM2
OSw3ICszNjksNyBAQCBwdWJsaWM6CiAgICAgICogb2YgZXZlbnQuCiAgICAgICoKICAgICAgKi8K
LSAgICBsb25nIGRldGFpbCgpIGNvbnN0OworICAgIGludCBkZXRhaWwoKSBjb25zdDsKIAogICAg
IC8qKgogICAgICAqIE5vbi1zdGFuZGFyZCBleHRlbnNpb24gdG8gc3VwcG9ydCBJRS1zdHlsZSBr
ZXlDb2RlIGV2ZW50IHByb3BlcnR5LgpAQCAtNDI3LDcgKzQyNyw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWJzdHJhY3RWaWV3ICZ2aWV3QXJnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBkZXRhaWxBcmcpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGRldGFpbEFyZyk7CiAKICAgICBVSUV2ZW50KFVJRXZl
bnRJbXBsICppbXBsKTsKIH07CkBAIC00NjcsMjggKzQ2NywyOCBAQCBwdWJsaWM6CiAgICAgICog
b3JpZ2luIG9mIHRoZSBzY3JlZW4gY29vcmRpbmF0ZSBzeXN0ZW0uCiAgICAgICoKICAgICAgKi8K
LSAgICBsb25nIHNjcmVlblgoKSBjb25zdDsKKyAgICBpbnQgc2NyZWVuWCgpIGNvbnN0OwogCiAg
ICAgLyoqCiAgICAgICogVGhlIHZlcnRpY2FsIGNvb3JkaW5hdGUgYXQgd2hpY2ggdGhlIGV2ZW50
IG9jY3VycmVkIHJlbGF0aXZlIHRvIHRoZQogICAgICAqIG9yaWdpbiBvZiB0aGUgc2NyZWVuIGNv
b3JkaW5hdGUgc3lzdGVtLgogICAgICAqCiAgICAgICovCi0gICAgbG9uZyBzY3JlZW5ZKCkgY29u
c3Q7CisgICAgaW50IHNjcmVlblkoKSBjb25zdDsKIAogICAgIC8qKgogICAgICAqIFRoZSBob3Jp
em9udGFsIGNvb3JkaW5hdGUgYXQgd2hpY2ggdGhlIGV2ZW50IG9jY3VycmVkIHJlbGF0aXZlIHRv
IHRoZQogICAgICAqIERPTSBpbXBsZW1lbnRhdGlvbidzIGNsaWVudCBhcmVhLgogICAgICAqCiAg
ICAgICovCi0gICAgbG9uZyBjbGllbnRYKCkgY29uc3Q7CisgICAgaW50IGNsaWVudFgoKSBjb25z
dDsKIAogICAgIC8qKgogICAgICAqIFRoZSB2ZXJ0aWNhbCBjb29yZGluYXRlIGF0IHdoaWNoIHRo
ZSBldmVudCBvY2N1cnJlZCByZWxhdGl2ZSB0byB0aGUgRE9NCiAgICAgICogaW1wbGVtZW50YXRp
b24ncyBjbGllbnQgYXJlYS4KICAgICAgKgogICAgICAqLwotICAgIGxvbmcgY2xpZW50WSgpIGNv
bnN0OworICAgIGludCBjbGllbnRZKCkgY29uc3Q7CiAKICAgICAvKioKICAgICAgKiBVc2VkIHRv
IGluZGljYXRlIHdoZXRoZXIgdGhlICdjdHJsJyBrZXkgd2FzIGRlcHJlc3NlZCBkdXJpbmcgdGhl
IGZpcmluZwpAQCAtNTgzLDExICs1ODMsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBBYnN0cmFjdFZpZXcgJnZpZXdBcmcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRldGFpbEFyZywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2NyZWVuWEFyZywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxvbmcgc2NyZWVuWUFyZywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxvbmcgY2xpZW50WEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxvbmcgY2xpZW50WUFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBkZXRhaWxBcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgc2NyZWVuWEFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBzY3JlZW5ZQXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGNsaWVudFhBcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2xp
ZW50WUFyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3RybEtl
eUFyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWx0S2V5QXJn
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywK
QEAgLTc1NSwxMSArNzU1LDExIEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgLy8gS2V5TG9jYXRp
b25Db2RlCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgRE9NX0tFWV9MT0NBVElPTl9T
VEFOREFSRCAgICAgID0gMHgwMDsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBET01f
S0VZX0xPQ0FUSU9OX0xFRlQgICAgICAgICAgPSAweDAxOwotICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBsb25nIERPTV9LRVlfTE9DQVRJT05fUklHSFQgICAgICAgICA9IDB4MDI7Ci0gICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgRE9NX0tFWV9MT0NBVElPTl9OVU1QQUQgICAgICAgID0g
MHgwMzsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBET01fS0VZX0xPQ0FUSU9OX1VO
S05PV04gICAgICAgPSAweDA0OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBET01fS0VZX0xP
Q0FUSU9OX1NUQU5EQVJEICAgICAgPSAweDAwOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBE
T01fS0VZX0xPQ0FUSU9OX0xFRlQgICAgICAgICAgPSAweDAxOworICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBET01fS0VZX0xPQ0FUSU9OX1JJR0hUICAgICAgICAgPSAweDAyOworICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBET01fS0VZX0xPQ0FUSU9OX05VTVBBRCAgICAgICAgPSAweDAzOwor
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBET01fS0VZX0xPQ0FUSU9OX1VOS05PV04gICAgICAg
PSAweDA0OwogICAgIAogI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCiAKQEAgLTc3Myw3ICs3
NzMsNyBAQCBwdWJsaWM6CiAgICAgICogQ29udGFpbnMgYW4gaW5kaWNhdGlvbiBvZiB0aGUgbG9j
YXRpb24gb2YgdGhleSBrZXkgb24gdGhlIGRldmljZS4KICAgICAgKgogICAgICAqLwotICAgIHVu
c2lnbmVkIGxvbmcga2V5TG9jYXRpb24oKSBjb25zdDsKKyAgICB1bnNpZ25lZCBrZXlMb2NhdGlv
bigpIGNvbnN0OwogCiAgICAgLyoqCiAgICAgICogVXNlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRo
ZSAnY3RybCcga2V5IHdhcyBkZXByZXNzZWQgZHVyaW5nIHRoZSBmaXJpbmcKQEAgLTgxNyw3ICs4
MTcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2Fu
Y2VsYWJsZUFyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWJzdHJh
Y3RWaWV3ICZ2aWV3QXJnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
RE9NU3RyaW5nICZrZXlJZGVudGlmaWVyQXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgbG9uZyBrZXlMb2NhdGlvbkFyZywgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGtleUxvY2F0aW9uQXJnLCAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5QXJnLCAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgYWx0S2V5QXJnLCAKSW5kZXg6IFdlYkNvcmUva2h0bWwvZG9tL2RvbTJfcmFuZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vZG9tMl9y
YW5nZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEwCmRpZmYgLXAgLXUgLXIxLjEwIFdlYkNv
cmUva2h0bWwvZG9tL2RvbTJfcmFuZ2UuaAotLS0gV2ViQ29yZS9raHRtbC9kb20vZG9tMl9yYW5n
ZS5oCTE4IE1heSAyMDA1IDIxOjEwOjI0IC0wMDAwCTEuMTAKKysrIFdlYkNvcmUva2h0bWwvZG9t
L2RvbTJfcmFuZ2UuaAkyMSBBdWcgMjAwNSAwNToyNzoyOSAtMDAwMApAQCAtMTA2LDcgKzEwNiw3
IEBAIHB1YmxpYzoKICAgICBSYW5nZSgpOwogICAgIFJhbmdlKGNvbnN0IERvY3VtZW50IHJvb3RD
b250YWluZXIpOwogICAgIFJhbmdlKGNvbnN0IFJhbmdlICZvdGhlcik7Ci0gICAgUmFuZ2UoY29u
c3QgTm9kZSBzdGFydENvbnRhaW5lciwgY29uc3QgbG9uZyBzdGFydE9mZnNldCwgY29uc3QgTm9k
ZSBlbmRDb250YWluZXIsIGNvbnN0IGxvbmcgZW5kT2Zmc2V0KTsKKyAgICBSYW5nZShjb25zdCBO
b2RlIHN0YXJ0Q29udGFpbmVyLCBjb25zdCBpbnQgc3RhcnRPZmZzZXQsIGNvbnN0IE5vZGUgZW5k
Q29udGFpbmVyLCBjb25zdCBpbnQgZW5kT2Zmc2V0KTsKIAogICAgIFJhbmdlICYgb3BlcmF0b3Ig
PSAoY29uc3QgUmFuZ2UgJm90aGVyKTsKIApAQCAtMTIyLDcgKzEyMiw3IEBAIHB1YmxpYzoKICAg
ICAgKiBPZmZzZXQgd2l0aGluIHRoZSBzdGFydGluZyBub2RlIG9mIHRoZSByYW5nZS4KICAgICAg
KgogICAgICAqLwotICAgIGxvbmcgc3RhcnRPZmZzZXQoKSBjb25zdDsKKyAgICBpbnQgc3RhcnRP
ZmZzZXQoKSBjb25zdDsKIAogICAgIC8qKgogICAgICAqIE5vZGUgd2l0aGluIHdoaWNoIHRoZSBy
YW5nZSBlbmRzCkBAIC0xMzQsNyArMTM0LDcgQEAgcHVibGljOgogICAgICAqIE9mZnNldCB3aXRo
aW4gdGhlIGVuZGluZyBub2RlIG9mIHRoZSByYW5nZS4KICAgICAgKgogICAgICAqLwotICAgIGxv
bmcgZW5kT2Zmc2V0KCkgY29uc3Q7CisgICAgaW50IGVuZE9mZnNldCgpIGNvbnN0OwogCiAgICAg
LyoqCiAgICAgICogVFJVRSBpZiB0aGUgcmFuZ2UgaXMgY29sbGFwc2VkCkBAIC0xNzIsNyArMTcy
LDcgQEAgcHVibGljOgogICAgICAqIHNob3VsZCBhbiBleGNlcHRpb24gYmUgcmFpc2VkLgogICAg
ICAqCiAgICAgICovCi0gICAgdm9pZCBzZXRTdGFydCAoIGNvbnN0IE5vZGUgJnJlZk5vZGUsIGxv
bmcgb2Zmc2V0ICk7CisgICAgdm9pZCBzZXRTdGFydCAoIGNvbnN0IE5vZGUgJnJlZk5vZGUsIGlu
dCBvZmZzZXQgKTsKIAogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGF0dHJpYnV0ZXMgZGVzY3Jp
YmluZyB0aGUgZW5kIG9mIGEgcmFuZ2UuCkBAIC0xOTMsNyArMTkzLDcgQEAgcHVibGljOgogICAg
ICAqIE5vdGF0aW9uLCBvciBEb2N1bWVudFR5cGUgbm9kZS4KICAgICAgKgogICAgICAqLwotICAg
IHZvaWQgc2V0RW5kICggY29uc3QgTm9kZSAmcmVmTm9kZSwgbG9uZyBvZmZzZXQgKTsKKyAgICB2
b2lkIHNldEVuZCAoIGNvbnN0IE5vZGUgJnJlZk5vZGUsIGludCBvZmZzZXQgKTsKIAogICAgIC8q
KgogICAgICAqIFNldHMgdGhlIHN0YXJ0IHBvc2l0aW9uIHRvIGJlIGJlZm9yZSBhIG5vZGUKSW5k
ZXg6IFdlYkNvcmUva2h0bWwvZG9tL2RvbTJfdHJhdmVyc2FsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vZG9tMl90cmF2ZXJzYWwuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjUKZGlmZiAtcCAtdSAtcjEuNSBXZWJDb3JlL2todG1sL2RvbS9k
b20yX3RyYXZlcnNhbC5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZG9tL2RvbTJfdHJhdmVyc2FsLmNw
cAkxOCBNYXkgMjAwNSAyMToxMDoyNCAtMDAwMAkxLjUKKysrIFdlYkNvcmUva2h0bWwvZG9tL2Rv
bTJfdHJhdmVyc2FsLmNwcAkyMSBBdWcgMjAwNSAwNToyNzoyOSAtMDAwMApAQCAtMTQ0LDcgKzE0
NCw3IEBAIE5vZGUgTm9kZUl0ZXJhdG9yOjpyb290KCkgY29uc3QKICAgICByZXR1cm4gMDsKIH0K
IAotdW5zaWduZWQgbG9uZyBOb2RlSXRlcmF0b3I6OndoYXRUb1Nob3coKSBjb25zdAordW5zaWdu
ZWQgTm9kZUl0ZXJhdG9yOjp3aGF0VG9TaG93KCkgY29uc3QKIHsKICAgICBpZiAoaW1wbCkgCiAg
ICAgICAgIHJldHVybiBpbXBsLT53aGF0VG9TaG93KCk7CkBAIC0yNjUsNyArMjY1LDcgQEAgTm9k
ZSBUcmVlV2Fsa2VyOjpyb290KCkgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAotdW5zaWduZWQg
bG9uZyBUcmVlV2Fsa2VyOjp3aGF0VG9TaG93KCkgY29uc3QKK3Vuc2lnbmVkIFRyZWVXYWxrZXI6
OndoYXRUb1Nob3coKSBjb25zdAogewogICAgIGlmIChpbXBsKSAKICAgICAgICAgcmV0dXJuIGlt
cGwtPndoYXRUb1Nob3coKTsKSW5kZXg6IFdlYkNvcmUva2h0bWwvZG9tL2RvbTJfdHJhdmVyc2Fs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2RvbTJf
dHJhdmVyc2FsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQpkaWZmIC1wIC11IC1yMS41IFdl
YkNvcmUva2h0bWwvZG9tL2RvbTJfdHJhdmVyc2FsLmgKLS0tIFdlYkNvcmUva2h0bWwvZG9tL2Rv
bTJfdHJhdmVyc2FsLmgJMTEgTWF5IDIwMDUgMDA6NTg6MjggLTAwMDAJMS41CisrKyBXZWJDb3Jl
L2todG1sL2RvbS9kb20yX3RyYXZlcnNhbC5oCTIxIEF1ZyAyMDA1IDA1OjI3OjMwIC0wMDAwCkBA
IC0xOTYsNyArMTk2LDcgQEAgcHVibGljOgogICAgICogY2hpbGRyZW4gbWF5IHN0aWxsIGJlIGNv
bnNpZGVyZWQuIE5vdGUgdGhhdCB0aGlzIHNraXAgdGFrZXMgcHJlY2VkZW5jZQogICAgICogb3Zl
ciB0aGUgZmlsdGVyLCBpZiBhbnkuCiAgICAgKi8KLSAgICB1bnNpZ25lZCBsb25nIHdoYXRUb1No
b3coKSBjb25zdDsKKyAgICB1bnNpZ25lZCB3aGF0VG9TaG93KCkgY29uc3Q7CiAKICAgICAvKioK
ICAgICAgKiBUaGUgTm9kZUZpbHRlciB1c2VkIHRvIHNjcmVlbiBub2Rlcy4KQEAgLTMxOCw3ICsz
MTgsNyBAQCBwdWJsaWM6CiAgICAgICogY2hpbGRyZW4gbWF5IHN0aWxsIGJlIGNvbnNpZGVyZWQu
IE5vdGUgdGhhdCB0aGlzIHNraXAgdGFrZXMgcHJlY2VkZW5jZQogICAgICAqIG92ZXIgdGhlIGZp
bHRlciwgaWYgYW55LgogICAgICAqLwotICAgIHVuc2lnbmVkIGxvbmcgd2hhdFRvU2hvdygpIGNv
bnN0OworICAgIHVuc2lnbmVkIHdoYXRUb1Nob3coKSBjb25zdDsKIAogICAgIC8qKgogICAgICAq
IFRoZSBmaWx0ZXIgdXNlZCB0byBzY3JlZW4gbm9kZXMuCkBAIC01MzYsNyArNTM2LDcgQEAgcHVi
bGljOgogICAgICAqIEByZXR1cm4gVGhlIG5ld2x5IGNyZWF0ZWQgTm9kZUl0ZXJhdG9yIC4KICAg
ICAgKgogICAgICAqCi0gICAgTm9kZUl0ZXJhdG9yIGNyZWF0ZU5vZGVJdGVyYXRvciAoIGNvbnN0
IE5vZGUgJnJvb3QsIGxvbmcgd2hhdFRvU2hvdywKKyAgICBOb2RlSXRlcmF0b3IgY3JlYXRlTm9k
ZUl0ZXJhdG9yICggY29uc3QgTm9kZSAmcm9vdCwgaW50IHdoYXRUb1Nob3csCiAJCQkJICAgICAg
Y29uc3QgTm9kZUZpbHRlciAmZmlsdGVyLCBib29sIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMgKTsK
IAogICAgICAqKgpAQCAtNTY5LDcgKzU2OSw3IEBAIHB1YmxpYzoKICAgICAgKiBub2RlIGlzIG51
bGwuCiAgICAgICoKICAgICAgKgotICAgIFRyZWVXYWxrZXIgY3JlYXRlVHJlZVdhbGtlciAoIGNv
bnN0IE5vZGUgJnJvb3QsIGxvbmcgd2hhdFRvU2hvdywKKyAgICBUcmVlV2Fsa2VyIGNyZWF0ZVRy
ZWVXYWxrZXIgKCBjb25zdCBOb2RlICZyb290LCBpbnQgd2hhdFRvU2hvdywKIAkJCQkgIGNvbnN0
IE5vZGVGaWx0ZXIgJmZpbHRlciwgYm9vbCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzICk7CiB9Owog
Ki8KSW5kZXg6IFdlYkNvcmUva2h0bWwvZG9tL2RvbV9ub2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2RvbV9ub2RlLmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMTMKZGlmZiAtcCAtdSAtcjEuMTMgV2ViQ29yZS9raHRtbC9kb20vZG9tX25vZGUu
aAotLS0gV2ViQ29yZS9raHRtbC9kb20vZG9tX25vZGUuaAk5IEp1bCAyMDA1IDIwOjE5OjAyIC0w
MDAwCTEuMTMKKysrIFdlYkNvcmUva2h0bWwvZG9tL2RvbV9ub2RlLmgJMjEgQXVnIDIwMDUgMDU6
Mjc6MzEgLTAwMDAKQEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogICAgICAqIGluZGljZXMgaXMg
MCB0byA8Y29kZT4gbGVuZ3RoLTEgPC9jb2RlPiBpbmNsdXNpdmUuCiAgICAgICoKICAgICAgKi8K
LSAgICB1bnNpZ25lZCBsb25nIGxlbmd0aCgpIGNvbnN0OworICAgIHVuc2lnbmVkIGxlbmd0aCgp
IGNvbnN0OwogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIGEgbm9kZSBzcGVjaWZpZWQgYnkg
bmFtZS4KQEAgLTE1Miw3ICsxNTIsNyBAQCBwdWJsaWM6CiAgICAgICogbm90IGEgdmFsaWQgaW5k
ZXguCiAgICAgICoKICAgICAgKi8KLSAgICBOb2RlIGl0ZW0gKCB1bnNpZ25lZCBsb25nIGluZGV4
ICkgY29uc3Q7CisgICAgTm9kZSBpdGVtICggdW5zaWduZWQgaW5kZXggKSBjb25zdDsKIAogICAg
IC8qKgogICAgICAqIEludHJvZHVjZWQgaW4gRE9NIExldmVsIDIKQEAgLTg3Niw3ICs4NzYsNyBA
QCBwdWJsaWM6CiAgICAgLyoqCiAgICAgICogQGludGVybmFsIHJldHVybnMgdGhlIGluZGV4IG9m
IGEgbm9kZQogICAgICAqLwotICAgIHVuc2lnbmVkIGxvbmcgaW5kZXgoKSBjb25zdDsKKyAgICB1
bnNpZ25lZCBpbmRleCgpIGNvbnN0OwogICAgIFFTdHJpbmcgdG9IVE1MKCk7CiAgICAgdm9pZCBh
cHBseUNoYW5nZXMoKTsKICAgICAvKioKQEAgLTkzNSw3ICs5MzUsNyBAQCBwdWJsaWM6CiAgICAg
ICogaW5kaWNlcyBpcyAwIHRvIDxjb2RlPiBsZW5ndGgtMSA8L2NvZGU+IGluY2x1c2l2ZS4KICAg
ICAgKgogICAgICAqLwotICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKCkgY29uc3Q7CisgICAgdW5z
aWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSA8Y29k
ZT4gaW5kZXggPC9jb2RlPiB0aCBpdGVtIGluIHRoZSBjb2xsZWN0aW9uLiBJZgpAQCAtOTQ5LDcg
Kzk0OSw3IEBAIHB1YmxpYzoKICAgICAgKiBhIHZhbGlkIGluZGV4LgogICAgICAqCiAgICAgICov
Ci0gICAgTm9kZSBpdGVtICggdW5zaWduZWQgbG9uZyBpbmRleCApIGNvbnN0OworICAgIE5vZGUg
aXRlbSAoIHVuc2lnbmVkIGluZGV4ICkgY29uc3Q7CiAKICAgICAvKioKICAgICAgKiBAaW50ZXJu
YWwKQEAgLTk3Miw3ICs5NzIsNyBAQCBwcm90ZWN0ZWQ6CiAgKiBBIERPTVRpbWVTdGFtcCByZXBy
ZXNlbnRzIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy4KICAqCiAgKi8KLXR5cGVkZWYgdW5zaWdu
ZWQgbG9uZyBsb25nIERPTVRpbWVTdGFtcDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBET01UaW1l
U3RhbXA7CiAKIH0gLy9uYW1lc3BhY2UKIApJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL2tqc19j
c3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEv
a2pzX2Nzcy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzUKZGlmZiAtcCAtdSAtcjEuMzUg
V2ViQ29yZS9raHRtbC9lY21hL2tqc19jc3MuY3BwCi0tLSBXZWJDb3JlL2todG1sL2VjbWEva2pz
X2Nzcy5jcHAJMTYgQXVnIDIwMDUgMDA6NDc6NDMgLTAwMDAJMS4zNQorKysgV2ViQ29yZS9raHRt
bC9lY21hL2tqc19jc3MuY3BwCTIxIEF1ZyAyMDA1IDA1OjI3OjMyIC0wMDAwCkBAIC0xNzEsNyAr
MTcxLDcgQEAgYm9vbCBET01DU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRPd25Qcm9wZQogICB9CiAK
ICAgYm9vbCBvazsKLSAgbG9uZyB1bnNpZ25lZCBpbnQgdSA9IHByb3BlcnR5TmFtZS50b1VMb25n
KCZvayk7CisgIHVuc2lnbmVkIHUgPSBwcm9wZXJ0eU5hbWUudG9VSW50MzIoJm9rKTsKICAgaWYg
KG9rKSB7CiAgICAgc2xvdC5zZXRDdXN0b21JbmRleCh0aGlzLCB1LCBpbmRleEdldHRlcik7CiAg
ICAgcmV0dXJuIHRydWU7CkBAIC00MDQsNyArNDA0LDcgQEAgYm9vbCBET01TdHlsZVNoZWV0TGlz
dDo6Z2V0T3duUHJvcGVydHlTbAogCiAgIC8vIFJldHJpZXZlIHN0eWxlc2hlZXQgYnkgaW5kZXgK
ICAgYm9vbCBvazsKLSAgbG9uZyB1bnNpZ25lZCBpbnQgdSA9IHByb3BlcnR5TmFtZS50b1VMb25n
KCZvayk7CisgIHVuc2lnbmVkIHUgPSBwcm9wZXJ0eU5hbWUudG9VSW50MzIoJm9rKTsKICAgaWYg
KG9rICYmIHUgPCBzdHlsZVNoZWV0TGlzdC5sZW5ndGgoKSkgewogICAgIHNsb3Quc2V0Q3VzdG9t
SW5kZXgodGhpcywgdSwgaW5kZXhHZXR0ZXIpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNTI5LDcg
KzUyOSw3IEBAIGJvb2wgRE9NTWVkaWFMaXN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXgKICAgfQog
CiAgIGJvb2wgb2s7Ci0gIGxvbmcgdW5zaWduZWQgaW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9u
Zygmb2spOworICB1bnNpZ25lZCB1ID0gcHJvcGVydHlOYW1lLnRvVUludDMyKCZvayk7CiAgIGlm
IChvayAmJiB1IDwgbV9pbXBsLT5sZW5ndGgoKSkgewogICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgo
dGhpcywgdSwgaW5kZXhHZXR0ZXIpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNjM1LDcgKzYzNSw3
IEBAIFZhbHVlSW1wICpET01DU1NTdHlsZVNoZWV0UHJvdG9GdW5jOjpjYWwKICAgICAgIHN0eWxl
U2hlZXQuZGVsZXRlUnVsZShhcmdzWzBdLT50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pOwogICAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICAgIGNhc2UgRE9NQ1NTU3R5bGVTaGVldDo6QWRkUnVs
ZTogewotICAgICAgbG9uZyBpbmRleCA9IGFyZ3Muc2l6ZSgpID49IDMgPyBhcmdzWzJdLT50b0lu
dDMyKGV4ZWMpIDogLTE7CisgICAgICBpbnQgaW5kZXggPSBhcmdzLnNpemUoKSA+PSAzID8gYXJn
c1syXS0+dG9JbnQzMihleGVjKSA6IC0xOwogICAgICAgc3R5bGVTaGVldC5hZGRSdWxlKGFyZ3Nb
MF0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLCBhcmdzWzFdLT50b1N0cmluZyhleGVjKS5zdHJp
bmcoKSwgaW5kZXgsIGV4Y2VwdGlvbik7CiAgICAgICAvLyBBcyBwZXIgTWljcm9zb2Z0IGRvY3Vt
ZW50YXRpb24sIGFsd2F5cyByZXR1cm4gLTEuCiAgICAgICByZXR1cm4gTnVtYmVyKC0xKTsKQEAg
LTY5Miw3ICs2OTIsNyBAQCBib29sIERPTUNTU1J1bGVMaXN0OjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
CiAgIENTU1J1bGVMaXN0SW1wbCAmY3NzUnVsZUxpc3QgPSAqbV9pbXBsOwogCiAgIGJvb2wgb2s7
Ci0gIGxvbmcgdW5zaWduZWQgaW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOworICB1
bnNpZ25lZCB1ID0gcHJvcGVydHlOYW1lLnRvVUludDMyKCZvayk7CiAgIGlmIChvayAmJiB1IDwg
Y3NzUnVsZUxpc3QubGVuZ3RoKCkpIHsKICAgICBzbG90LnNldEN1c3RvbUluZGV4KHRoaXMsIHUs
IGluZGV4R2V0dGVyKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEyMjMsNyArMTIyMyw3IEBAIGJv
b2wgRE9NQ1NTVmFsdWVMaXN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QKICAgfQogCiAgIGJvb2wgb2s7
Ci0gIGxvbmcgdW5zaWduZWQgaW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOworICB1
bnNpZ25lZCB1ID0gcHJvcGVydHlOYW1lLnRvVUludDMyKCZvayk7CiAgIGlmIChvayAmJiB1IDwg
dmFsdWVMaXN0Lmxlbmd0aCgpKSB7CiAgICAgc2xvdC5zZXRDdXN0b21JbmRleCh0aGlzLCB1LCBp
bmRleEdldHRlcik7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBXZWJDb3JlL2todG1sL2VjbWEv
a2pzX2RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
ZWNtYS9ranNfZG9tLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44OApkaWZmIC1wIC11IC1y
MS44OCBXZWJDb3JlL2todG1sL2VjbWEva2pzX2RvbS5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWNt
YS9ranNfZG9tLmNwcAkxOSBBdWcgMjAwNSAyMzowOToxNyAtMDAwMAkxLjg4CisrKyBXZWJDb3Jl
L2todG1sL2VjbWEva2pzX2RvbS5jcHAJMjEgQXVnIDIwMDUgMDU6Mjc6MzMgLTAwMDAKQEAgLTc1
Niw3ICs3NTYsNyBAQCBib29sIERPTU5vZGVMaXN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlCiAK
ICAgLy8gYXJyYXkgaW5kZXggPwogICBib29sIG9rOwotICBsb25nIHVuc2lnbmVkIGludCBpZHgg
PSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOworICB1bnNpZ25lZCBpZHggPSBwcm9wZXJ0eU5h
bWUudG9VSW50MzIoJm9rKTsKICAgaWYgKG9rICYmIGlkeCA8IGxpc3QubGVuZ3RoKCkpIHsKICAg
ICBzbG90LnNldEN1c3RvbUluZGV4KHRoaXMsIGlkeCwgaW5kZXhHZXR0ZXIpOwogICAgIHJldHVy
biB0cnVlOwpAQCAtNzc2LDcgKzc3Niw3IEBAIFZhbHVlSW1wICpET01Ob2RlTGlzdDo6Y2FsbEFz
RnVuY3Rpb24oRXgKICAgLy8gRG8gbm90IHVzZSB0aGlzT2JqIGhlcmUuIFNlZSBIVE1MQ29sbGVj
dGlvbi4KICAgVVN0cmluZyBzID0gYXJnc1swXS0+dG9TdHJpbmcoZXhlYyk7CiAgIGJvb2wgb2s7
Ci0gIHVuc2lnbmVkIGludCB1ID0gcy50b1VMb25nKCZvayk7CisgIHVuc2lnbmVkIGludCB1ID0g
cy50b1VJbnQzMigmb2spOwogICBpZiAob2spCiAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywg
bV9pbXBsLT5pdGVtKHUpKTsKIApAQCAtMTQzOSw3ICsxNDM5LDcgQEAgYm9vbCBET01OYW1lZE5v
ZGVNYXA6OmdldE93blByb3BlcnR5U2xvdAogCiAgIC8vIGFycmF5IGluZGV4ID8KICAgYm9vbCBv
azsKLSAgbG9uZyB1bnNpZ25lZCBpbnQgaWR4ID0gcHJvcGVydHlOYW1lLnRvVUxvbmcoJm9rKTsK
KyAgdW5zaWduZWQgaWR4ID0gcHJvcGVydHlOYW1lLnRvVUludDMyKCZvayk7CiAgIGlmIChvayAm
JiBpZHggPCBtYXAubGVuZ3RoKCkpIHsKICAgICBzbG90LnNldEN1c3RvbUluZGV4KHRoaXMsIGlk
eCwgaW5kZXhHZXR0ZXIpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMTkwNiw3ICsxOTA2LDcgQEAg
Ym9vbCBET01OYW1lZE5vZGVzQ29sbGVjdGlvbjo6Z2V0T3duUHJvcAogCiAgIC8vIGFycmF5IGlu
ZGV4ID8KICAgYm9vbCBvazsKLSAgbG9uZyB1bnNpZ25lZCBpbnQgaWR4ID0gcHJvcGVydHlOYW1l
LnRvVUxvbmcoJm9rKTsKKyAgdW5zaWduZWQgaWR4ID0gcHJvcGVydHlOYW1lLnRvVUludDMyKCZv
ayk7CiAgIGlmIChvayAmJiBpZHggPCBtX25vZGVzLmNvdW50KCkpIHsKICAgICBzbG90LnNldEN1
c3RvbUluZGV4KHRoaXMsIGlkeCwgaW5kZXhHZXR0ZXIpOwogICAgIHJldHVybiB0cnVlOwpJbmRl
eDogV2ViQ29yZS9raHRtbC9lY21hL2tqc19ldmVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2V2ZW50cy5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuNTYKZGlmZiAtcCAtdSAtcjEuNTYgV2ViQ29yZS9raHRtbC9lY21hL2tqc19l
dmVudHMuY3BwCi0tLSBXZWJDb3JlL2todG1sL2VjbWEva2pzX2V2ZW50cy5jcHAJMTYgQXVnIDIw
MDUgMDA6NDc6NDQgLTAwMDAJMS41NgorKysgV2ViQ29yZS9raHRtbC9lY21hL2tqc19ldmVudHMu
Y3BwCTIxIEF1ZyAyMDA1IDA1OjI3OjM0IC0wMDAwCkBAIC00NTYsNyArNDU2LDcgQEAgVmFsdWVJ
bXAgKkRPTUV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZQogICBjYXNlIENhbmNlbGFibGU6CiAg
ICAgcmV0dXJuIEJvb2xlYW4oZXZlbnQuY2FuY2VsYWJsZSgpKTsKICAgY2FzZSBUaW1lU3RhbXA6
Ci0gICAgcmV0dXJuIE51bWJlcigobG9uZyB1bnNpZ25lZCBpbnQpZXZlbnQudGltZVN0YW1wKCkp
OyAvLyAjIyMgbG9uZyBsb25nID8KKyAgICByZXR1cm4gTnVtYmVyKGV2ZW50LnRpbWVTdGFtcCgp
KTsKICAgY2FzZSBDbGlwYm9hcmREYXRhOgogICB7CiAgICAgaWYgKGV2ZW50LmlzQ2xpcGJvYXJk
RXZlbnQoKSkgewpJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL2tqc19odG1sLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19odG1sLmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMzUKZGlmZiAtcCAtdSAtcjEuMTM1IFdlYkNvcmUva2h0
bWwvZWNtYS9ranNfaHRtbC5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfaHRtbC5jcHAJ
MTYgQXVnIDIwMDUgMDA6NDc6NDQgLTAwMDAJMS4xMzUKKysrIFdlYkNvcmUva2h0bWwvZWNtYS9r
anNfaHRtbC5jcHAJMjEgQXVnIDIwMDUgMDU6Mjc6NTAgLTAwMDAKQEAgLTEzMzIsNyArMTMzMiw3
IEBAIGJvb2wgSFRNTEVsZW1lbnQ6OmdldE93blByb3BlcnR5U2xvdChFeGUKICAgICAgICAgSFRN
TEZvcm1FbGVtZW50SW1wbCAmZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7CiAgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIHJldHJpZXZpbmcgYW4gZWxl
bWVudCAoYnkgaW5kZXggb3IgYnkgbmFtZSkKICAgICAgICAgYm9vbCBvazsKLSAgICAgICAgdWlu
dCB1ID0gcHJvcGVydHlOYW1lLnRvVUxvbmcoJm9rKTsKKyAgICAgICAgdWludCB1ID0gcHJvcGVy
dHlOYW1lLnRvVUludDMyKCZvayk7CiAgICAgICAgIGlmIChvaykgewogICAgICAgICAgICAgc2xv
dC5zZXRDdXN0b21JbmRleCh0aGlzLCB1LCBmb3JtSW5kZXhHZXR0ZXIpOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC0xMzQ2LDcgKzEzNDYsNyBAQCBib29sIEhUTUxFbGVtZW50OjpnZXRP
d25Qcm9wZXJ0eVNsb3QoRXhlCiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuaGFz
TG9jYWxOYW1lKHNlbGVjdFRhZykpIHsKICAgICAgICAgYm9vbCBvazsKLSAgICAgICAgdWludCB1
ID0gcHJvcGVydHlOYW1lLnRvVUxvbmcoJm9rKTsKKyAgICAgICAgdWludCB1ID0gcHJvcGVydHlO
YW1lLnRvVUludDMyKCZvayk7CiAgICAgICAgIGlmIChvaykgewogICAgICAgICAgICAgLy8gbm90
IHNwZWNpZmllZCBieSBET00oPykgYnV0IHN1cHBvcnRlZCBpbiBuZXRzY2FwZS9JRQogICAgICAg
ICAgICAgc2xvdC5zZXRDdXN0b21JbmRleCh0aGlzLCB1LCBzZWxlY3RJbmRleEdldHRlcik7CkBA
IC0yNTI5LDcgKzI1MjksNyBAQCB2b2lkIEtKUzo6SFRNTEVsZW1lbnQ6OnB1dChFeGVjU3RhdGUg
KmV4CiAgICAgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKHNlbGVjdFRhZykpIHsKICAgICAgICAg
SFRNTFNlbGVjdEVsZW1lbnRJbXBsICZzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxl
bWVudEltcGwgJj4oZWxlbWVudCk7CiAgICAgICAgIGJvb2wgb2s7Ci0gICAgICAgIC8qdWludCB1
ID0qLyBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOworICAgICAgICAvKnVpbnQgdSA9Ki8gcHJv
cGVydHlOYW1lLnRvVUludDMyKCZvayk7CiAgICAgICAgIGlmIChvaykgewogICAgICAgICAgICAg
T2JqZWN0SW1wICpjb2xsID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KGdldFNlbGVjdEhUTUxD
b2xsZWN0aW9uKGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS5nZXQoKSwgJnNl
bGVjdCkpOwogICAgICAgICAgICAgY29sbC0+cHV0KGV4ZWMscHJvcGVydHlOYW1lLHZhbHVlKTsK
QEAgLTMzNDMsNyArMzM0Myw3IEBAIGJvb2wgSFRNTENvbGxlY3Rpb246OmdldE93blByb3BlcnR5
U2xvdCgKIAogICAgIC8vIG5hbWUgb3IgaW5kZXggPwogICAgIGJvb2wgb2s7Ci0gICAgdW5zaWdu
ZWQgaW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOworICAgIHVuc2lnbmVkIGludCB1
ID0gcHJvcGVydHlOYW1lLnRvVUludDMyKCZvayk7CiAgICAgaWYgKG9rKSB7CiAgICAgICBzbG90
LnNldEN1c3RvbUluZGV4KHRoaXMsIHUsIGluZGV4R2V0dGVyKTsKICAgICAgIHJldHVybiB0cnVl
OwpAQCAtMzM3MSw3ICszMzcxLDcgQEAgVmFsdWVJbXAgKktKUzo6SFRNTENvbGxlY3Rpb246OmNh
bGxBc0Z1bgogICAgIC8vIHN1cHBvcnQgZm9yIGRvY3VtZW50LmFsbCg8aW5kZXg+KSBldGMuCiAg
ICAgYm9vbCBvazsKICAgICBVU3RyaW5nIHMgPSBhcmdzWzBdLT50b1N0cmluZyhleGVjKTsKLSAg
ICB1bnNpZ25lZCBpbnQgdSA9IHMudG9VTG9uZygmb2spOworICAgIHVuc2lnbmVkIGludCB1ID0g
cy50b1VJbnQzMigmb2spOwogICAgIGlmIChvaykKICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4
ZWMsIGNvbGxlY3Rpb24uaXRlbSh1KSk7CiAgICAgLy8gc3VwcG9ydCBmb3IgZG9jdW1lbnQuaW1h
Z2VzKCc8bmFtZT4nKSBldGMuCkBAIC0zMzgxLDcgKzMzODEsNyBAQCBWYWx1ZUltcCAqS0pTOjpI
VE1MQ29sbGVjdGlvbjo6Y2FsbEFzRnVuCiAgIHsKICAgICBib29sIG9rOwogICAgIFVTdHJpbmcg
cyA9IGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpOwotICAgIHVuc2lnbmVkIGludCB1ID0gYXJnc1sx
XS0+dG9TdHJpbmcoZXhlYykudG9VTG9uZygmb2spOworICAgIHVuc2lnbmVkIGludCB1ID0gYXJn
c1sxXS0+dG9TdHJpbmcoZXhlYykudG9VSW50MzIoJm9rKTsKICAgICBpZiAob2spCiAgICAgewog
ICAgICAgRE9NOjpET01TdHJpbmcgcHN0ciA9IHMuc3RyaW5nKCk7CkBAIC0zNDgxLDcgKzM0ODEs
NyBAQCB2b2lkIEtKUzo6SFRNTFNlbGVjdENvbGxlY3Rpb246OnB1dChFeGVjCiAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgbG9uZyBkaWZmID0gbV9lbGVtZW50LT5sZW5ndGgoKSAtIG5ld0xl
bjsKKyAgICBpbnQgZGlmZiA9IG1fZWxlbWVudC0+bGVuZ3RoKCkgLSBuZXdMZW47CiAKICAgICBp
ZiAoZGlmZiA8IDApIHsgLy8gYWRkIGR1bW15IGVsZW1lbnRzCiAgICAgICBkbyB7CkBAIC0zNTAy
LDcgKzM1MDIsNyBAQCB2b2lkIEtKUzo6SFRNTFNlbGVjdENvbGxlY3Rpb246OnB1dChFeGVjCiAg
IH0KICAgLy8gYW4gaW5kZXggPwogICBib29sIG9rOwotICB1bnNpZ25lZCBpbnQgdSA9IHByb3Bl
cnR5TmFtZS50b1VMb25nKCZvayk7CisgIHVuc2lnbmVkIGludCB1ID0gcHJvcGVydHlOYW1lLnRv
VUludDMyKCZvayk7CiAgIGlmICghb2spCiAgICAgcmV0dXJuOwogCkBAIC0zNTE4LDcgKzM1MTgs
NyBAQCB2b2lkIEtKUzo6SFRNTFNlbGVjdENvbGxlY3Rpb246OnB1dChFeGVjCiAgICAgcmV0dXJu
OwogCiAgIGludCBleGNlcHRpb24gPSAwOwotICBsb25nIGRpZmYgPSBsb25nKHUpIC0gbV9lbGVt
ZW50LT5sZW5ndGgoKTsKKyAgaW50IGRpZmYgPSBpbnQodSkgLSBtX2VsZW1lbnQtPmxlbmd0aCgp
OwogICBIVE1MRWxlbWVudEltcGwgKmJlZm9yZSA9IDA7CiAgIC8vIG91dCBvZiBhcnJheSBib3Vu
ZHMgPyBmaXJzdCBpbnNlcnQgZW1wdHkgZHVtbWllcwogICBpZiAoZGlmZiA+IDApIHsKSW5kZXg6
IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfbmF2aWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19uYXZpZ2F0b3IuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjM0CmRpZmYgLXAgLXUgLXIxLjM0IFdlYkNvcmUva2h0bWwvZWNtYS9r
anNfbmF2aWdhdG9yLmNwcAotLS0gV2ViQ29yZS9raHRtbC9lY21hL2tqc19uYXZpZ2F0b3IuY3Bw
CTE2IEF1ZyAyMDA1IDAwOjQ3OjQ1IC0wMDAwCTEuMzQKKysrIFdlYkNvcmUva2h0bWwvZWNtYS9r
anNfbmF2aWdhdG9yLmNwcAkyMSBBdWcgMjAwNSAwNToyNzo1MSAtMDAwMApAQCAtMzk0LDcgKzM5
NCw3IEBAIGJvb2wgUGx1Z2luczo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGEKICAgICB9IGVs
c2UgewogICAgICAgICAvLyBwbHVnaW5zWyNdCiAgICAgICAgIGJvb2wgb2s7Ci0gICAgICAgIHVu
c2lnbmVkIGludCBpID0gcHJvcGVydHlOYW1lLnRvVUxvbmcoJm9rKTsKKyAgICAgICAgdW5zaWdu
ZWQgaW50IGkgPSBwcm9wZXJ0eU5hbWUudG9VSW50MzIoJm9rKTsKICAgICAgICAgaWYgKG9rICYm
IGkgPCBwbHVnaW5zLT5jb3VudCgpKSB7CiAgICAgICAgICAgICBzbG90LnNldEN1c3RvbUluZGV4
KHRoaXMsIGksIGluZGV4R2V0dGVyKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDQ5
LDcgKzQ0OSw3IEBAIGJvb2wgTWltZVR5cGVzOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1MKICAg
ICB9IGVsc2UgewogICAgICAgICAvLyBtaW1lVHlwZXNbI10KICAgICAgICAgYm9vbCBvazsKLSAg
ICAgICAgdW5zaWduZWQgaW50IGkgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOworICAgICAg
ICB1bnNpZ25lZCBpbnQgaSA9IHByb3BlcnR5TmFtZS50b1VJbnQzMigmb2spOwogICAgICAgICBp
ZiAob2sgJiYgaSA8IG1pbWVzLT5jb3VudCgpKSB7CiAgICAgICAgICAgICBzbG90LnNldEN1c3Rv
bUluZGV4KHRoaXMsIGksIGluZGV4R2V0dGVyKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtNTIyLDcgKzUyMiw3IEBAIGJvb2wgUGx1Z2luOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0
YXQKICAgICB9IGVsc2UgewogICAgICAgICAvLyBwbHVnaW5bI10KICAgICAgICAgYm9vbCBvazsK
LSAgICAgICAgdW5zaWduZWQgaW50IGkgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOworICAg
ICAgICB1bnNpZ25lZCBpbnQgaSA9IHByb3BlcnR5TmFtZS50b1VJbnQzMigmb2spOwogICAgICAg
ICBpZiAob2sgJiYgaSA8IG1faW5mby0+bWltZXMuY291bnQoKSkgewogICAgICAgICAgICAgc2xv
dC5zZXRDdXN0b21JbmRleCh0aGlzLCBpLCBpbmRleEdldHRlcik7CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5n
L2FwcGx5X3N0eWxlX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjkKZGlmZiAt
cCAtdSAtcjEuOSBXZWJDb3JlL2todG1sL2VkaXRpbmcvYXBwbHlfc3R5bGVfY29tbWFuZC5jcHAK
LS0tIFdlYkNvcmUva2h0bWwvZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcAkzMCBKdWwg
MjAwNSAwMjozMzoxNCAtMDAwMAkxLjkKKysrIFdlYkNvcmUva2h0bWwvZWRpdGluZy9hcHBseV9z
dHlsZV9jb21tYW5kLmNwcAkyMSBBdWcgMjAwNSAwNToyNzo1NCAtMDAwMApAQCAtOTgzLDcgKzk4
Myw3IEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6Om5vZGVGdWxseVVuc2VsZWMKIGJvb2wgQXBw
bHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEF0U3RhcnRJZk5lZWRlZChjb25zdCBQb3NpdGlvbiAm
c3RhcnQsIGNvbnN0IFBvc2l0aW9uICZlbmQpCiB7CiAgICAgaWYgKHN0YXJ0Lm5vZGUoKS0+aXNU
ZXh0Tm9kZSgpICYmIHN0YXJ0Lm9mZnNldCgpID4gc3RhcnQubm9kZSgpLT5jYXJldE1pbk9mZnNl
dCgpICYmIHN0YXJ0Lm9mZnNldCgpIDwgc3RhcnQubm9kZSgpLT5jYXJldE1heE9mZnNldCgpKSB7
Ci0gICAgICAgIGxvbmcgZW5kT2Zmc2V0QWRqdXN0bWVudCA9IHN0YXJ0Lm5vZGUoKSA9PSBlbmQu
bm9kZSgpID8gc3RhcnQub2Zmc2V0KCkgOiAwOworICAgICAgICBpbnQgZW5kT2Zmc2V0QWRqdXN0
bWVudCA9IHN0YXJ0Lm5vZGUoKSA9PSBlbmQubm9kZSgpID8gc3RhcnQub2Zmc2V0KCkgOiAwOwog
ICAgICAgICBUZXh0SW1wbCAqdGV4dCA9IHN0YXRpY19jYXN0PFRleHRJbXBsICo+KHN0YXJ0Lm5v
ZGUoKSk7CiAgICAgICAgIHNwbGl0VGV4dE5vZGUodGV4dCwgc3RhcnQub2Zmc2V0KCkpOwogICAg
ICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oU2VsZWN0aW9uKFBvc2l0aW9uKHN0YXJ0Lm5vZGUoKSwg
MCksIFNFTF9ERUZBVUxUX0FGRklOSVRZLCBQb3NpdGlvbihlbmQubm9kZSgpLCBlbmQub2Zmc2V0
KCkgLSBlbmRPZmZzZXRBZGp1c3RtZW50KSwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKQEAgLTEw
MTEsNyArMTAxMSw3IEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEF0RW5kSWYK
IGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnRBdFN0YXJ0SWZOZWVkZWQo
Y29uc3QgUG9zaXRpb24gJnN0YXJ0LCBjb25zdCBQb3NpdGlvbiAmZW5kKQogewogICAgIGlmIChz
dGFydC5ub2RlKCktPmlzVGV4dE5vZGUoKSAmJiBzdGFydC5vZmZzZXQoKSA+IHN0YXJ0Lm5vZGUo
KS0+Y2FyZXRNaW5PZmZzZXQoKSAmJiBzdGFydC5vZmZzZXQoKSA8IHN0YXJ0Lm5vZGUoKS0+Y2Fy
ZXRNYXhPZmZzZXQoKSkgewotICAgICAgICBsb25nIGVuZE9mZnNldEFkanVzdG1lbnQgPSBzdGFy
dC5ub2RlKCkgPT0gZW5kLm5vZGUoKSA/IHN0YXJ0Lm9mZnNldCgpIDogMDsKKyAgICAgICAgaW50
IGVuZE9mZnNldEFkanVzdG1lbnQgPSBzdGFydC5ub2RlKCkgPT0gZW5kLm5vZGUoKSA/IHN0YXJ0
Lm9mZnNldCgpIDogMDsKICAgICAgICAgVGV4dEltcGwgKnRleHQgPSBzdGF0aWNfY2FzdDxUZXh0
SW1wbCAqPihzdGFydC5ub2RlKCkpOwogICAgICAgICBzcGxpdFRleHROb2RlQ29udGFpbmluZ0Vs
ZW1lbnQodGV4dCwgc3RhcnQub2Zmc2V0KCkpOwogCkBAIC0xMDc1LDcgKzEwNzUsNyBAQCBzdGF0
aWMgYm9vbCBhcmVJZGVudGljYWxFbGVtZW50cyhOb2RlSW1wCiBib29sIEFwcGx5U3R5bGVDb21t
YW5kOjptZXJnZVN0YXJ0V2l0aFByZXZpb3VzSWZJZGVudGljYWwoY29uc3QgUG9zaXRpb24gJnN0
YXJ0LCBjb25zdCBQb3NpdGlvbiAmZW5kKQogewogICAgIE5vZGVJbXBsICpzdGFydE5vZGUgPSBz
dGFydC5ub2RlKCk7Ci0gICAgbG9uZyBzdGFydE9mZnNldCA9IHN0YXJ0Lm9mZnNldCgpOworICAg
IGludCBzdGFydE9mZnNldCA9IHN0YXJ0Lm9mZnNldCgpOwogCiAgICAgaWYgKHN0YXJ0Lm5vZGUo
KS0+aXNBdG9taWNOb2RlKCkpIHsKICAgICAgICAgaWYgKHN0YXJ0Lm9mZnNldCgpICE9IDApCkBA
IC0xMTAzLDggKzExMDMsOCBAQCBib29sIEFwcGx5U3R5bGVDb21tYW5kOjptZXJnZVN0YXJ0V2l0
aFByCiAgICAgICAgIEFTU0VSVChzdGFydENoaWxkKTsKICAgICAgICAgbWVyZ2VJZGVudGljYWxF
bGVtZW50cyhwcmV2aW91c0VsZW1lbnQsIGVsZW1lbnQpOwogCi0gICAgICAgIGxvbmcgc3RhcnRP
ZmZzZXRBZGp1c3RtZW50ID0gc3RhcnRDaGlsZC0+bm9kZUluZGV4KCk7Ci0gICAgICAgIGxvbmcg
ZW5kT2Zmc2V0QWRqdXN0bWVudCA9IHN0YXJ0Tm9kZSA9PSBlbmQubm9kZSgpID8gc3RhcnRPZmZz
ZXRBZGp1c3RtZW50IDogMDsKKyAgICAgICAgaW50IHN0YXJ0T2Zmc2V0QWRqdXN0bWVudCA9IHN0
YXJ0Q2hpbGQtPm5vZGVJbmRleCgpOworICAgICAgICBpbnQgZW5kT2Zmc2V0QWRqdXN0bWVudCA9
IHN0YXJ0Tm9kZSA9PSBlbmQubm9kZSgpID8gc3RhcnRPZmZzZXRBZGp1c3RtZW50IDogMDsKIAog
ICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oU2VsZWN0aW9uKFBvc2l0aW9uKHN0YXJ0Tm9kZSwg
c3RhcnRPZmZzZXRBZGp1c3RtZW50KSwgU0VMX0RFRkFVTFRfQUZGSU5JVFksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24oZW5kLm5vZGUoKSwgZW5kLm9mZnNl
dCgpICsgZW5kT2Zmc2V0QWRqdXN0bWVudCksIFNFTF9ERUZBVUxUX0FGRklOSVRZKSk7IApJbmRl
eDogV2ViQ29yZS9raHRtbC9lZGl0aW5nL2JyZWFrX2Jsb2NrcXVvdGVfY29tbWFuZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9icmVha19i
bG9ja3F1b3RlX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQKZGlmZiAtcCAt
dSAtcjEuNCBXZWJDb3JlL2todG1sL2VkaXRpbmcvYnJlYWtfYmxvY2txdW90ZV9jb21tYW5kLmNw
cAotLS0gV2ViQ29yZS9raHRtbC9lZGl0aW5nL2JyZWFrX2Jsb2NrcXVvdGVfY29tbWFuZC5jcHAJ
MzAgSnVsIDIwMDUgMDI6MzM6MTQgLTAwMDAJMS40CisrKyBXZWJDb3JlL2todG1sL2VkaXRpbmcv
YnJlYWtfYmxvY2txdW90ZV9jb21tYW5kLmNwcAkyMSBBdWcgMjAwNSAwNToyNzo1NCAtMDAwMApA
QCAtOTUsNyArOTUsNyBAQCB2b2lkIEJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmRvQXBwbHkoKQog
ICAgICAgICAvLyBTcGxpdCBhdCBwb3MgaWYgaW4gdGhlIG1pZGRsZSBvZiBhIHRleHQgbm9kZS4K
ICAgICAgICAgaWYgKHN0YXJ0Tm9kZS0+aXNUZXh0Tm9kZSgpKSB7CiAgICAgICAgICAgICBUZXh0
SW1wbCAqdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0SW1wbCAqPihzdGFydE5vZGUpOwotICAg
ICAgICAgICAgYm9vbCBhdEVuZCA9ICh1bnNpZ25lZCBsb25nKXBvcy5vZmZzZXQoKSA+PSB0ZXh0
Tm9kZS0+bGVuZ3RoKCk7CisgICAgICAgICAgICBib29sIGF0RW5kID0gKHVuc2lnbmVkKXBvcy5v
ZmZzZXQoKSA+PSB0ZXh0Tm9kZS0+bGVuZ3RoKCk7CiAgICAgICAgICAgICBpZiAocG9zLm9mZnNl
dCgpID4gMCAmJiAhYXRFbmQpIHsKICAgICAgICAgICAgICAgICBzcGxpdFRleHROb2RlKHRleHRO
b2RlLCBwb3Mub2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIHBvcyA9IFBvc2l0aW9uKHN0YXJ0
Tm9kZSwgMCk7CkluZGV4OiBXZWJDb3JlL2todG1sL2VkaXRpbmcvY29tcG9zaXRlX2VkaXRfY29t
bWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRp
dGluZy9jb21wb3NpdGVfZWRpdF9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43
CmRpZmYgLXAgLXUgLXIxLjcgV2ViQ29yZS9raHRtbC9lZGl0aW5nL2NvbXBvc2l0ZV9lZGl0X2Nv
bW1hbmQuY3BwCi0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcvY29tcG9zaXRlX2VkaXRfY29tbWFu
ZC5jcHAJMzAgSnVsIDIwMDUgMDI6MzM6MTQgLTAwMDAJMS43CisrKyBXZWJDb3JlL2todG1sL2Vk
aXRpbmcvY29tcG9zaXRlX2VkaXRfY29tbWFuZC5jcHAJMjEgQXVnIDIwMDUgMDU6Mjc6NTQgLTAw
MDAKQEAgLTE0NSwxMSArMTQ1LDExIEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2Vy
dE5vZGVBZnQKICAgICB9CiB9CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydE5v
ZGVBdChOb2RlSW1wbCAqaW5zZXJ0Q2hpbGQsIE5vZGVJbXBsICpyZWZDaGlsZCwgbG9uZyBvZmZz
ZXQpCit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnROb2RlQXQoTm9kZUltcGwgKmlu
c2VydENoaWxkLCBOb2RlSW1wbCAqcmVmQ2hpbGQsIGludCBvZmZzZXQpCiB7CiAgICAgaWYgKHJl
ZkNoaWxkLT5oYXNDaGlsZE5vZGVzKCkgfHwgKHJlZkNoaWxkLT5yZW5kZXJlcigpICYmIHJlZkNo
aWxkLT5yZW5kZXJlcigpLT5pc0Jsb2NrRmxvdygpKSkgewogICAgICAgICBOb2RlSW1wbCAqY2hp
bGQgPSByZWZDaGlsZC0+Zmlyc3RDaGlsZCgpOwotICAgICAgICBmb3IgKGxvbmcgaSA9IDA7IGNo
aWxkICYmIGkgPCBvZmZzZXQ7IGkrKykKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGNoaWxkICYm
IGkgPCBvZmZzZXQ7IGkrKykKICAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5n
KCk7CiAgICAgICAgIGlmIChjaGlsZCkKICAgICAgICAgICAgIGluc2VydE5vZGVCZWZvcmUoaW5z
ZXJ0Q2hpbGQsIGNoaWxkKTsKQEAgLTIxNCw3ICsyMTQsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRD
b21tYW5kOjpyZW1vdmVOb2RlUHJlCiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoY21kKTsK
IH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6c3BsaXRUZXh0Tm9kZShUZXh0SW1wbCAq
dGV4dCwgbG9uZyBvZmZzZXQpCit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpzcGxpdFRleHRO
b2RlKFRleHRJbXBsICp0ZXh0LCBpbnQgb2Zmc2V0KQogewogICAgIEVkaXRDb21tYW5kUHRyIGNt
ZChuZXcgU3BsaXRUZXh0Tm9kZUNvbW1hbmQoZG9jdW1lbnQoKSwgdGV4dCwgb2Zmc2V0KSk7CiAg
ICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoY21kKTsKQEAgLTIzOCw3ICsyMzgsNyBAQCB2b2lk
IENvbXBvc2l0ZUVkaXRDb21tYW5kOjp3cmFwQ29udGVudHNJCiAgICAgYXBwbHlDb21tYW5kVG9D
b21wb3NpdGUoY21kKTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6c3BsaXRUZXh0
Tm9kZUNvbnRhaW5pbmdFbGVtZW50KERPTTo6VGV4dEltcGwgKnRleHQsIGxvbmcgb2Zmc2V0KQor
dm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6c3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50
KERPTTo6VGV4dEltcGwgKnRleHQsIGludCBvZmZzZXQpCiB7CiAgICAgRWRpdENvbW1hbmRQdHIg
Y21kKG5ldyBTcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kKGRvY3VtZW50KCks
IHRleHQsIG9mZnNldCkpOwogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKGNtZCk7CkBAIC0y
NTgsMTkgKzI1OCwxOSBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnB1dFRleHQoY29u
CiAgICAgaW1wbC0+aW5wdXQodGV4dCwgc2VsZWN0SW5zZXJ0ZWRUZXh0KTsKIH0KIAotdm9pZCBD
b21wb3NpdGVFZGl0Q29tbWFuZDo6aW5zZXJ0VGV4dEludG9Ob2RlKFRleHRJbXBsICpub2RlLCBs
b25nIG9mZnNldCwgY29uc3QgRE9NU3RyaW5nICZ0ZXh0KQordm9pZCBDb21wb3NpdGVFZGl0Q29t
bWFuZDo6aW5zZXJ0VGV4dEludG9Ob2RlKFRleHRJbXBsICpub2RlLCBpbnQgb2Zmc2V0LCBjb25z
dCBET01TdHJpbmcgJnRleHQpCiB7CiAgICAgRWRpdENvbW1hbmRQdHIgY21kKG5ldyBJbnNlcnRJ
bnRvVGV4dE5vZGVDb21tYW5kKGRvY3VtZW50KCksIG5vZGUsIG9mZnNldCwgdGV4dCkpOwogICAg
IGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKGNtZCk7CiB9CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENv
bW1hbmQ6OmRlbGV0ZVRleHRGcm9tTm9kZShUZXh0SW1wbCAqbm9kZSwgbG9uZyBvZmZzZXQsIGxv
bmcgY291bnQpCit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVUZXh0RnJvbU5vZGUo
VGV4dEltcGwgKm5vZGUsIGludCBvZmZzZXQsIGludCBjb3VudCkKIHsKICAgICBFZGl0Q29tbWFu
ZFB0ciBjbWQobmV3IERlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQoZG9jdW1lbnQoKSwgbm9kZSwg
b2Zmc2V0LCBjb3VudCkpOwogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKGNtZCk7CiB9CiAK
LXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VUZXh0SW5Ob2RlKFRleHRJbXBsICpu
b2RlLCBsb25nIG9mZnNldCwgbG9uZyBjb3VudCwgY29uc3QgRE9NU3RyaW5nICZyZXBsYWNlbWVu
dFRleHQpCit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZXBsYWNlVGV4dEluTm9kZShUZXh0
SW1wbCAqbm9kZSwgaW50IG9mZnNldCwgaW50IGNvdW50LCBjb25zdCBET01TdHJpbmcgJnJlcGxh
Y2VtZW50VGV4dCkKIHsKICAgICBFZGl0Q29tbWFuZFB0ciBkZWxldGVDb21tYW5kKG5ldyBEZWxl
dGVGcm9tVGV4dE5vZGVDb21tYW5kKGRvY3VtZW50KCksIG5vZGUsIG9mZnNldCwgY291bnQpKTsK
ICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShkZWxldGVDb21tYW5kKTsKQEAgLTM0MSw3ICsz
NDEsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVJbnNpZ25pCiAgICAgICAg
IHJldHVybjsgICAgCiAgICAgfQogICAgIAotICAgIGxvbmcgbGVuZ3RoID0gdGV4dE5vZGUtPmxl
bmd0aCgpOworICAgIGludCBsZW5ndGggPSB0ZXh0Tm9kZS0+bGVuZ3RoKCk7CiAgICAgaWYgKHN0
YXJ0ID49IGxlbmd0aCB8fCBlbmQgPiBsZW5ndGgpCiAgICAgICAgIHJldHVybjsKIApAQCAtMzg2
LDcgKzM4Niw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmkKICAg
ICAgICAgICAgIC8vIEFzc2VydCB0aGF0IHdlIGFyZSBub3QgZ29pbmcgdG8gZGVsZXRlIGFsbCBv
ZiB0aGUgdGV4dCBpbiB0aGUgbm9kZS4KICAgICAgICAgICAgIC8vIElmIHdlIHdlcmUsIHRoYXQg
c2hvdWxkIGhhdmUgYmVlbiBkb25lIGFib3ZlIHdpdGggdGhlIGNhbGwgdG8gCiAgICAgICAgICAg
ICAvLyByZW1vdmVOb2RlIGFuZCByZXR1cm4uCi0gICAgICAgICAgICBBU1NFUlQoc3RhcnQgPiAw
IHx8ICh1bnNpZ25lZCBsb25nKWVuZCAtIHN0YXJ0IDwgdGV4dE5vZGUtPmxlbmd0aCgpKTsKKyAg
ICAgICAgICAgIEFTU0VSVChzdGFydCA+IDAgfHwgKHVuc2lnbmVkKWVuZCAtIHN0YXJ0IDwgdGV4
dE5vZGUtPmxlbmd0aCgpKTsKICAgICAgICAgICAgIGRlbGV0ZVRleHRGcm9tTm9kZSh0ZXh0Tm9k
ZSwgc3RhcnQsIGVuZCAtIHN0YXJ0KTsKICAgICAgICAgfQogICAgICAgICBzdHItPmRlcmVmKCk7
CkluZGV4OiBXZWJDb3JlL2todG1sL2VkaXRpbmcvY29tcG9zaXRlX2VkaXRfY29tbWFuZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvY29tcG9z
aXRlX2VkaXRfY29tbWFuZC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAtcCAtdSAt
cjEuMiBXZWJDb3JlL2todG1sL2VkaXRpbmcvY29tcG9zaXRlX2VkaXRfY29tbWFuZC5oCi0tLSBX
ZWJDb3JlL2todG1sL2VkaXRpbmcvY29tcG9zaXRlX2VkaXRfY29tbWFuZC5oCTE4IEp1bCAyMDA1
IDIxOjQ0OjE3IC0wMDAwCTEuMgorKysgV2ViQ29yZS9raHRtbC9lZGl0aW5nL2NvbXBvc2l0ZV9l
ZGl0X2NvbW1hbmQuaAkyMSBBdWcgMjAwNSAwNToyNzo1NCAtMDAwMApAQCAtNTYsMTMgKzU2LDEz
IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGRlbGV0ZUtleVByZXNzZWQoKTsKICAgICB2b2lkIGRl
bGV0ZVNlbGVjdGlvbihib29sIHNtYXJ0RGVsZXRlPWZhbHNlLCBib29sIG1lcmdlQmxvY2tzQWZ0
ZXJEZWxldGU9dHJ1ZSk7CiAgICAgdm9pZCBkZWxldGVTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9u
ICZzZWxlY3Rpb24sIGJvb2wgc21hcnREZWxldGU9ZmFsc2UsIGJvb2wgbWVyZ2VCbG9ja3NBZnRl
ckRlbGV0ZT10cnVlKTsKLSAgICB2b2lkIGRlbGV0ZVRleHRGcm9tTm9kZShET006OlRleHRJbXBs
ICpub2RlLCBsb25nIG9mZnNldCwgbG9uZyBjb3VudCk7CisgICAgdm9pZCBkZWxldGVUZXh0RnJv
bU5vZGUoRE9NOjpUZXh0SW1wbCAqbm9kZSwgaW50IG9mZnNldCwgaW50IGNvdW50KTsKICAgICB2
b2lkIGlucHV0VGV4dChjb25zdCBET006OkRPTVN0cmluZyAmdGV4dCwgYm9vbCBzZWxlY3RJbnNl
cnRlZFRleHQgPSBmYWxzZSk7CiAgICAgdm9pZCBpbnNlcnROb2RlQWZ0ZXIoRE9NOjpOb2RlSW1w
bCAqaW5zZXJ0Q2hpbGQsIERPTTo6Tm9kZUltcGwgKnJlZkNoaWxkKTsKLSAgICB2b2lkIGluc2Vy
dE5vZGVBdChET006Ok5vZGVJbXBsICppbnNlcnRDaGlsZCwgRE9NOjpOb2RlSW1wbCAqcmVmQ2hp
bGQsIGxvbmcgb2Zmc2V0KTsKKyAgICB2b2lkIGluc2VydE5vZGVBdChET006Ok5vZGVJbXBsICpp
bnNlcnRDaGlsZCwgRE9NOjpOb2RlSW1wbCAqcmVmQ2hpbGQsIGludCBvZmZzZXQpOwogICAgIHZv
aWQgaW5zZXJ0Tm9kZUJlZm9yZShET006Ok5vZGVJbXBsICppbnNlcnRDaGlsZCwgRE9NOjpOb2Rl
SW1wbCAqcmVmQ2hpbGQpOwogICAgIHZvaWQgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCk7Ci0g
ICAgdm9pZCBpbnNlcnRUZXh0SW50b05vZGUoRE9NOjpUZXh0SW1wbCAqbm9kZSwgbG9uZyBvZmZz
ZXQsIGNvbnN0IERPTTo6RE9NU3RyaW5nICZ0ZXh0KTsKKyAgICB2b2lkIGluc2VydFRleHRJbnRv
Tm9kZShET006OlRleHRJbXBsICpub2RlLCBpbnQgb2Zmc2V0LCBjb25zdCBET006OkRPTVN0cmlu
ZyAmdGV4dCk7CiAgICAgdm9pZCBqb2luVGV4dE5vZGVzKERPTTo6VGV4dEltcGwgKnRleHQxLCBE
T006OlRleHRJbXBsICp0ZXh0Mik7CiAgICAgdm9pZCByZWJhbGFuY2VXaGl0ZXNwYWNlKCk7CiAg
ICAgdm9pZCByZW1vdmVDU1NQcm9wZXJ0eShET006OkNTU1N0eWxlRGVjbGFyYXRpb25JbXBsICos
IGludCBwcm9wZXJ0eSk7CkBAIC03MSwxMyArNzEsMTMgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQg
cmVtb3ZlQ2hpbGRyZW5JblJhbmdlKERPTTo6Tm9kZUltcGwgKm5vZGUsIGludCBmcm9tLCBpbnQg
dG8pOwogICAgIHZvaWQgcmVtb3ZlTm9kZShET006Ok5vZGVJbXBsICpyZW1vdmVDaGlsZCk7CiAg
ICAgdm9pZCByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKERPTTo6Tm9kZUltcGwgKm5vZGUp
OwotICAgIHZvaWQgcmVwbGFjZVRleHRJbk5vZGUoRE9NOjpUZXh0SW1wbCAqbm9kZSwgbG9uZyBv
ZmZzZXQsIGxvbmcgY291bnQsIGNvbnN0IERPTTo6RE9NU3RyaW5nICZyZXBsYWNlbWVudFRleHQp
OworICAgIHZvaWQgcmVwbGFjZVRleHRJbk5vZGUoRE9NOjpUZXh0SW1wbCAqbm9kZSwgaW50IG9m
ZnNldCwgaW50IGNvdW50LCBjb25zdCBET006OkRPTVN0cmluZyAmcmVwbGFjZW1lbnRUZXh0KTsK
ICAgICB2b2lkIHNldE5vZGVBdHRyaWJ1dGUoRE9NOjpFbGVtZW50SW1wbCAqLCBjb25zdCBET006
OlF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSwgY29uc3QgRE9NOjpET01TdHJpbmcgJik7Ci0gICAg
dm9pZCBzcGxpdFRleHROb2RlKERPTTo6VGV4dEltcGwgKnRleHQsIGxvbmcgb2Zmc2V0KTsKKyAg
ICB2b2lkIHNwbGl0VGV4dE5vZGUoRE9NOjpUZXh0SW1wbCAqdGV4dCwgaW50IG9mZnNldCk7CiAg
ICAgdm9pZCBzcGxpdEVsZW1lbnQoRE9NOjpFbGVtZW50SW1wbCAqZWxlbWVudCwgRE9NOjpOb2Rl
SW1wbCAqYXRDaGlsZCk7CiAgICAgdm9pZCBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKERPTTo6RWxl
bWVudEltcGwgKmZpcnN0LCBET006OkVsZW1lbnRJbXBsICpzZWNvbmQpOwogICAgIHZvaWQgd3Jh
cENvbnRlbnRzSW5EdW1teVNwYW4oRE9NOjpFbGVtZW50SW1wbCAqZWxlbWVudCk7Ci0gICAgdm9p
ZCBzcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnQoRE9NOjpUZXh0SW1wbCAqdGV4dCwgbG9u
ZyBvZmZzZXQpOworICAgIHZvaWQgc3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50KERPTTo6
VGV4dEltcGwgKnRleHQsIGludCBvZmZzZXQpOwogCiAgICAgdm9pZCBkZWxldGVJbnNpZ25pZmlj
YW50VGV4dChET006OlRleHRJbXBsICosIGludCBzdGFydCwgaW50IGVuZCk7CiAgICAgdm9pZCBk
ZWxldGVJbnNpZ25pZmljYW50VGV4dChjb25zdCBET006OlBvc2l0aW9uICZzdGFydCwgY29uc3Qg
RE9NOjpQb3NpdGlvbiAmZW5kKTsKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy9kZWxldGVf
ZnJvbV90ZXh0X25vZGVfY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvZWRpdGluZy9kZWxldGVfZnJvbV90ZXh0X25vZGVfY29tbWFuZC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIFdlYkNvcmUva2h0bWwv
ZWRpdGluZy9kZWxldGVfZnJvbV90ZXh0X25vZGVfY29tbWFuZC5jcHAKLS0tIFdlYkNvcmUva2h0
bWwvZWRpdGluZy9kZWxldGVfZnJvbV90ZXh0X25vZGVfY29tbWFuZC5jcHAJMTMgTWF5IDIwMDUg
MDg6Mzc6MTUgLTAwMDAJMS4xCisrKyBXZWJDb3JlL2todG1sL2VkaXRpbmcvZGVsZXRlX2Zyb21f
dGV4dF9ub2RlX2NvbW1hbmQuY3BwCTIxIEF1ZyAyMDA1IDA1OjI3OjU1IC0wMDAwCkBAIC0zOCwx
MiArMzgsMTIgQEAgdXNpbmcgRE9NOjpUZXh0SW1wbDsKIAogbmFtZXNwYWNlIGtodG1sIHsKIAot
RGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZDo6RGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZChEb2N1
bWVudEltcGwgKmRvY3VtZW50LCBUZXh0SW1wbCAqbm9kZSwgbG9uZyBvZmZzZXQsIGxvbmcgY291
bnQpCitEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kOjpEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5k
KERvY3VtZW50SW1wbCAqZG9jdW1lbnQsIFRleHRJbXBsICpub2RlLCBpbnQgb2Zmc2V0LCBpbnQg
Y291bnQpCiAgICAgOiBFZGl0Q29tbWFuZChkb2N1bWVudCksIG1fbm9kZShub2RlKSwgbV9vZmZz
ZXQob2Zmc2V0KSwgbV9jb3VudChjb3VudCkKIHsKICAgICBBU1NFUlQobV9ub2RlKTsKICAgICBB
U1NFUlQobV9vZmZzZXQgPj0gMCk7Ci0gICAgQVNTRVJUKG1fb2Zmc2V0IDwgKGxvbmcpbV9ub2Rl
LT5sZW5ndGgoKSk7CisgICAgQVNTRVJUKG1fb2Zmc2V0IDwgKGludCltX25vZGUtPmxlbmd0aCgp
KTsKICAgICBBU1NFUlQobV9jb3VudCA+PSAwKTsKICAgICAKICAgICBtX25vZGUtPnJlZigpOwpJ
bmRleDogV2ViQ29yZS9raHRtbC9lZGl0aW5nL2RlbGV0ZV9mcm9tX3RleHRfbm9kZV9jb21tYW5k
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9k
ZWxldGVfZnJvbV90ZXh0X25vZGVfY29tbWFuZC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEK
ZGlmZiAtcCAtdSAtcjEuMSBXZWJDb3JlL2todG1sL2VkaXRpbmcvZGVsZXRlX2Zyb21fdGV4dF9u
b2RlX2NvbW1hbmQuaAotLS0gV2ViQ29yZS9raHRtbC9lZGl0aW5nL2RlbGV0ZV9mcm9tX3RleHRf
bm9kZV9jb21tYW5kLmgJMTMgTWF5IDIwMDUgMDg6Mzc6MTUgLTAwMDAJMS4xCisrKyBXZWJDb3Jl
L2todG1sL2VkaXRpbmcvZGVsZXRlX2Zyb21fdGV4dF9ub2RlX2NvbW1hbmQuaAkyMSBBdWcgMjAw
NSAwNToyNzo1NSAtMDAwMApAQCAtMzksMjAgKzM5LDIwIEBAIG5hbWVzcGFjZSBraHRtbCB7CiBj
bGFzcyBEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kIDogcHVibGljIEVkaXRDb21tYW5kCiB7CiBw
dWJsaWM6Ci0gICAgRGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZChET006OkRvY3VtZW50SW1wbCAq
ZG9jdW1lbnQsIERPTTo6VGV4dEltcGwgKm5vZGUsIGxvbmcgb2Zmc2V0LCBsb25nIGNvdW50KTsK
KyAgICBEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kKERPTTo6RG9jdW1lbnRJbXBsICpkb2N1bWVu
dCwgRE9NOjpUZXh0SW1wbCAqbm9kZSwgaW50IG9mZnNldCwgaW50IGNvdW50KTsKICAgICB2aXJ0
dWFsIH5EZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kKCk7CiAJCiAgICAgdmlydHVhbCB2b2lkIGRv
QXBwbHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCk7CiAKICAgICBET006OlRleHRJ
bXBsICpub2RlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlOyB9Ci0gICAgbG9uZyBvZmZzZXQoKSBj
b25zdCB7IHJldHVybiBtX29mZnNldDsgfQotICAgIGxvbmcgY291bnQoKSBjb25zdCB7IHJldHVy
biBtX2NvdW50OyB9CisgICAgaW50IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9
CisgICAgaW50IGNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9jb3VudDsgfQogCiBwcml2YXRlOgog
ICAgIERPTTo6VGV4dEltcGwgKm1fbm9kZTsKLSAgICBsb25nIG1fb2Zmc2V0OwotICAgIGxvbmcg
bV9jb3VudDsKKyAgICBpbnQgbV9vZmZzZXQ7CisgICAgaW50IG1fY291bnQ7CiAgICAgRE9NOjpE
T01TdHJpbmcgbV90ZXh0OwogfTsKIApJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0aW5nL2luc2Vy
dF9pbnRvX3RleHRfbm9kZV9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2luc2VydF9pbnRvX3RleHRfbm9kZV9jb21tYW5kLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEgV2ViQ29yZS9raHRt
bC9lZGl0aW5nL2luc2VydF9pbnRvX3RleHRfbm9kZV9jb21tYW5kLmNwcAotLS0gV2ViQ29yZS9r
aHRtbC9lZGl0aW5nL2luc2VydF9pbnRvX3RleHRfbm9kZV9jb21tYW5kLmNwcAkxMyBNYXkgMjAw
NSAwODozNzoxNSAtMDAwMAkxLjEKKysrIFdlYkNvcmUva2h0bWwvZWRpdGluZy9pbnNlcnRfaW50
b190ZXh0X25vZGVfY29tbWFuZC5jcHAJMjEgQXVnIDIwMDUgMDU6Mjc6NTUgLTAwMDAKQEAgLTM5
LDcgKzM5LDcgQEAgdXNpbmcgRE9NOjpET01TdHJpbmc7CiAKIG5hbWVzcGFjZSBraHRtbCB7CiAK
LUluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6Okluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQoRG9j
dW1lbnRJbXBsICpkb2N1bWVudCwgVGV4dEltcGwgKm5vZGUsIGxvbmcgb2Zmc2V0LCBjb25zdCBE
T01TdHJpbmcgJnRleHQpCitJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kOjpJbnNlcnRJbnRvVGV4
dE5vZGVDb21tYW5kKERvY3VtZW50SW1wbCAqZG9jdW1lbnQsIFRleHRJbXBsICpub2RlLCBpbnQg
b2Zmc2V0LCBjb25zdCBET01TdHJpbmcgJnRleHQpCiAgICAgOiBFZGl0Q29tbWFuZChkb2N1bWVu
dCksIG1fbm9kZShub2RlKSwgbV9vZmZzZXQob2Zmc2V0KQogewogICAgIEFTU0VSVChtX25vZGUp
OwpJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0aW5nL2luc2VydF9pbnRvX3RleHRfbm9kZV9jb21t
YW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGlu
Zy9pbnNlcnRfaW50b190ZXh0X25vZGVfY29tbWFuZC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEKZGlmZiAtcCAtdSAtcjEuMSBXZWJDb3JlL2todG1sL2VkaXRpbmcvaW5zZXJ0X2ludG9fdGV4
dF9ub2RlX2NvbW1hbmQuaAotLS0gV2ViQ29yZS9raHRtbC9lZGl0aW5nL2luc2VydF9pbnRvX3Rl
eHRfbm9kZV9jb21tYW5kLmgJMTMgTWF5IDIwMDUgMDg6Mzc6MTUgLTAwMDAJMS4xCisrKyBXZWJD
b3JlL2todG1sL2VkaXRpbmcvaW5zZXJ0X2ludG9fdGV4dF9ub2RlX2NvbW1hbmQuaAkyMSBBdWcg
MjAwNSAwNToyNzo1NSAtMDAwMApAQCAtNDAsMTkgKzQwLDE5IEBAIG5hbWVzcGFjZSBraHRtbCB7
CiBjbGFzcyBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kIDogcHVibGljIEVkaXRDb21tYW5kCiB7
CiBwdWJsaWM6Ci0gICAgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZChET006OkRvY3VtZW50SW1w
bCAqZG9jdW1lbnQsIERPTTo6VGV4dEltcGwgKiwgbG9uZywgY29uc3QgRE9NOjpET01TdHJpbmcg
Jik7CisgICAgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZChET006OkRvY3VtZW50SW1wbCAqZG9j
dW1lbnQsIERPTTo6VGV4dEltcGwgKiwgaW50LCBjb25zdCBET006OkRPTVN0cmluZyAmKTsKICAg
ICB2aXJ0dWFsIH5JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kKCk7CiAJCiAgICAgdmlydHVhbCB2
b2lkIGRvQXBwbHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCk7CiAKICAgICBET006
OlRleHRJbXBsICpub2RlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlOyB9Ci0gICAgbG9uZyBvZmZz
ZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAgIGludCBvZmZzZXQoKSBjb25zdCB7
IHJldHVybiBtX29mZnNldDsgfQogICAgIERPTTo6RE9NU3RyaW5nIHRleHQoKSBjb25zdCB7IHJl
dHVybiBtX3RleHQ7IH0KIAogcHJpdmF0ZToKICAgICBET006OlRleHRJbXBsICptX25vZGU7Ci0g
ICAgbG9uZyBtX29mZnNldDsKKyAgICBpbnQgbV9vZmZzZXQ7CiAgICAgRE9NOjpET01TdHJpbmcg
bV90ZXh0OwogfTsKIApJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0aW5nL2luc2VydF9wYXJhZ3Jh
cGhfc2VwYXJhdG9yX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL2VkaXRpbmcvaW5zZXJ0X3BhcmFncmFwaF9zZXBhcmF0b3JfY29tbWFuZC5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNApkaWZmIC1wIC11IC1yMS40IFdlYkNvcmUva2h0
bWwvZWRpdGluZy9pbnNlcnRfcGFyYWdyYXBoX3NlcGFyYXRvcl9jb21tYW5kLmNwcAotLS0gV2Vi
Q29yZS9raHRtbC9lZGl0aW5nL2luc2VydF9wYXJhZ3JhcGhfc2VwYXJhdG9yX2NvbW1hbmQuY3Bw
CTMwIEp1bCAyMDA1IDAyOjMzOjE0IC0wMDAwCTEuNAorKysgV2ViQ29yZS9raHRtbC9lZGl0aW5n
L2luc2VydF9wYXJhZ3JhcGhfc2VwYXJhdG9yX2NvbW1hbmQuY3BwCTIxIEF1ZyAyMDA1IDA1OjI3
OjU4IC0wMDAwCkBAIC0yNDAsNyArMjQwLDcgQEAgdm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0
b3JDb21tYW5kOjpkbwogICAgIC8vIFNwbGl0IGF0IHBvcyBpZiBpbiB0aGUgbWlkZGxlIG9mIGEg
dGV4dCBub2RlLgogICAgIGlmIChzdGFydE5vZGUtPmlzVGV4dE5vZGUoKSkgewogICAgICAgICBU
ZXh0SW1wbCAqdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0SW1wbCAqPihzdGFydE5vZGUpOwot
ICAgICAgICBib29sIGF0RW5kID0gKHVuc2lnbmVkIGxvbmcpcG9zLm9mZnNldCgpID49IHRleHRO
b2RlLT5sZW5ndGgoKTsKKyAgICAgICAgYm9vbCBhdEVuZCA9ICh1bnNpZ25lZClwb3Mub2Zmc2V0
KCkgPj0gdGV4dE5vZGUtPmxlbmd0aCgpOwogICAgICAgICBpZiAocG9zLm9mZnNldCgpID4gMCAm
JiAhYXRFbmQpIHsKICAgICAgICAgICAgIHNwbGl0VGV4dE5vZGUodGV4dE5vZGUsIHBvcy5vZmZz
ZXQoKSk7CiAgICAgICAgICAgICBwb3MgPSBQb3NpdGlvbihzdGFydE5vZGUsIDApOwpJbmRleDog
V2ViQ29yZS9raHRtbC9lZGl0aW5nL2luc2VydF90ZXh0X2NvbW1hbmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvaW5zZXJ0X3RleHRfY29t
bWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNgpkaWZmIC1wIC11IC1yMS42IFdlYkNv
cmUva2h0bWwvZWRpdGluZy9pbnNlcnRfdGV4dF9jb21tYW5kLmNwcAotLS0gV2ViQ29yZS9raHRt
bC9lZGl0aW5nL2luc2VydF90ZXh0X2NvbW1hbmQuY3BwCTUgQXVnIDIwMDUgMTg6MjI6NDMgLTAw
MDAJMS42CisrKyBXZWJDb3JlL2todG1sL2VkaXRpbmcvaW5zZXJ0X3RleHRfY29tbWFuZC5jcHAJ
MjEgQXVnIDIwMDUgMDU6Mjc6NTggLTAwMDAKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lkIEluc2Vy
dFRleHRDb21tYW5kOjppbnB1dChjb25zdCBET01TCiAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBw
cmVwYXJlRm9yVGV4dEluc2VydGlvbihzdGFydFBvc2l0aW9uKTsKICAgICAgICAgcmVtb3ZlQmxv
Y2tQbGFjZWhvbGRlcihzdGFydFBvc2l0aW9uLm5vZGUoKS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxl
bWVudCgpKTsKICAgICAgICAgVGV4dEltcGwgKnRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dElt
cGwgKj4oc3RhcnRQb3NpdGlvbi5ub2RlKCkpOwotICAgICAgICBsb25nIG9mZnNldCA9IHN0YXJ0
UG9zaXRpb24ub2Zmc2V0KCk7CisgICAgICAgIGludCBvZmZzZXQgPSBzdGFydFBvc2l0aW9uLm9m
ZnNldCgpOwogCiAgICAgICAgIGlmICh0ZXh0ID09ICIgIikgewogICAgICAgICAgICAgaW5zZXJ0
U3BhY2UodGV4dE5vZGUsIG9mZnNldCk7CkBAIC0yNTcsNyArMjU3LDcgQEAgRE9NOjpQb3NpdGlv
biBJbnNlcnRUZXh0Q29tbWFuZDo6aW5zZXJ0VAogICAgIHJldHVybiBQb3NpdGlvbihzcGFuTm9k
ZS0+bGFzdENoaWxkKCksIHNwYW5Ob2RlLT5sYXN0Q2hpbGQoKS0+Y2FyZXRNYXhPZmZzZXQoKSk7
CiB9CiAKLXZvaWQgSW5zZXJ0VGV4dENvbW1hbmQ6Omluc2VydFNwYWNlKFRleHRJbXBsICp0ZXh0
Tm9kZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit2b2lkIEluc2VydFRleHRDb21tYW5kOjppbnNl
cnRTcGFjZShUZXh0SW1wbCAqdGV4dE5vZGUsIHVuc2lnbmVkIG9mZnNldCkKIHsKICAgICBBU1NF
UlQodGV4dE5vZGUpOwogCkBAIC0yNzgsNyArMjc4LDcgQEAgdm9pZCBJbnNlcnRUZXh0Q29tbWFu
ZDo6aW5zZXJ0U3BhY2UoVGV4dAogICAgICAgICAvLyBjaGVjayBpZiB0aGVyZSBpcyBhIHJlbmRl
cmVkIFdTIGF0IHRoZSBjYXJldAogICAgICAgICBQb3NpdGlvbiBwb3ModGV4dE5vZGUsIG9mZnNl
dCk7CiAgICAgICAgIFBvc2l0aW9uIGRvd25zdHJlYW0gPSBwb3MuZG93bnN0cmVhbSgpOwotICAg
ICAgICBpZiAoZG93bnN0cmVhbS5vZmZzZXQoKSA8IChsb25nKXRleHQubGVuZ3RoKCkgJiYgaXND
b2xsYXBzaWJsZVdoaXRlc3BhY2UodGV4dFtkb3duc3RyZWFtLm9mZnNldCgpXSkpCisgICAgICAg
IGlmIChkb3duc3RyZWFtLm9mZnNldCgpIDwgKGludCl0ZXh0Lmxlbmd0aCgpICYmIGlzQ29sbGFw
c2libGVXaGl0ZXNwYWNlKHRleHRbZG93bnN0cmVhbS5vZmZzZXQoKV0pKQogICAgICAgICAgICAg
Y291bnQtLTsgLy8gbGVhdmUgdGhpcyBXUyBpbgogICAgICAgICBpZiAoY291bnQgPiAwKQogICAg
ICAgICAgICAgZGVsZXRlVGV4dEZyb21Ob2RlKHRleHROb2RlLCBvZmZzZXQsIGNvdW50KTsKSW5k
ZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy9pbnNlcnRfdGV4dF9jb21tYW5kLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9pbnNlcnRfdGV4dF9j
b21tYW5kLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNApkaWZmIC1wIC11IC1yMS40IFdlYkNv
cmUva2h0bWwvZWRpdGluZy9pbnNlcnRfdGV4dF9jb21tYW5kLmgKLS0tIFdlYkNvcmUva2h0bWwv
ZWRpdGluZy9pbnNlcnRfdGV4dF9jb21tYW5kLmgJMjkgSnVsIDIwMDUgMjM6NDI6NDYgLTAwMDAJ
MS40CisrKyBXZWJDb3JlL2todG1sL2VkaXRpbmcvaW5zZXJ0X3RleHRfY29tbWFuZC5oCTIxIEF1
ZyAyMDA1IDA1OjI3OjU4IC0wMDAwCkBAIC00MCwxNiArNDAsMTYgQEAgcHVibGljOgogICAgIHZv
aWQgZGVsZXRlQ2hhcmFjdGVyKCk7CiAgICAgdm9pZCBpbnB1dChjb25zdCBET006OkRPTVN0cmlu
ZyAmdGV4dCwgYm9vbCBzZWxlY3RJbnNlcnRlZFRleHQgPSBmYWxzZSk7CiAgICAgCi0gICAgdW5z
aWduZWQgbG9uZyBjaGFyYWN0ZXJzQWRkZWQoKSBjb25zdCB7IHJldHVybiBtX2NoYXJhY3RlcnNB
ZGRlZDsgfQorICAgIHVuc2lnbmVkIGNoYXJhY3RlcnNBZGRlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2hhcmFjdGVyc0FkZGVkOyB9CiAgICAgCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0lu
c2VydFRleHRDb21tYW5kKCkgY29uc3Q7CiAKICAgICBET006OlBvc2l0aW9uIHByZXBhcmVGb3JU
ZXh0SW5zZXJ0aW9uKGNvbnN0IERPTTo6UG9zaXRpb24mIHBvcyk7Ci0gICAgdm9pZCBpbnNlcnRT
cGFjZShET006OlRleHRJbXBsICp0ZXh0Tm9kZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOworICAg
IHZvaWQgaW5zZXJ0U3BhY2UoRE9NOjpUZXh0SW1wbCAqdGV4dE5vZGUsIHVuc2lnbmVkIG9mZnNl
dCk7CiAgICAgRE9NOjpQb3NpdGlvbiBpbnNlcnRUYWIoRE9NOjpQb3NpdGlvbiBwb3MpOwogCi0g
ICAgdW5zaWduZWQgbG9uZyBtX2NoYXJhY3RlcnNBZGRlZDsKKyAgICB1bnNpZ25lZCBtX2NoYXJh
Y3RlcnNBZGRlZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIGtodG1sCkluZGV4OiBXZWJDb3JlL2to
dG1sL2VkaXRpbmcvam9pbl90ZXh0X25vZGVzX2NvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2pvaW5fdGV4dF9ub2Rlc19jb21tYW5k
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIFdlYkNvcmUva2h0
bWwvZWRpdGluZy9qb2luX3RleHRfbm9kZXNfY29tbWFuZC5oCi0tLSBXZWJDb3JlL2todG1sL2Vk
aXRpbmcvam9pbl90ZXh0X25vZGVzX2NvbW1hbmQuaAkyNCBNYXkgMjAwNSAwNzoyMTo0NyAtMDAw
MAkxLjEKKysrIFdlYkNvcmUva2h0bWwvZWRpdGluZy9qb2luX3RleHRfbm9kZXNfY29tbWFuZC5o
CTIxIEF1ZyAyMDA1IDA1OjI3OjU4IC0wMDAwCkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgRE9NOjpUZXh0SW1wbCAqbV90ZXh0MTsKICAgICBET006OlRleHRJbXBsICpt
X3RleHQyOwotICAgIHVuc2lnbmVkIGxvbmcgbV9vZmZzZXQ7CisgICAgdW5zaWduZWQgbV9vZmZz
ZXQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBraHRtbApJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0
aW5nL21hcmt1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvZWRpdGluZy9tYXJrdXAuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI4CmRpZmYgLXAg
LXUgLXIxLjI4IFdlYkNvcmUva2h0bWwvZWRpdGluZy9tYXJrdXAuY3BwCi0tLSBXZWJDb3JlL2to
dG1sL2VkaXRpbmcvbWFya3VwLmNwcAkzMCBKdWwgMjAwNSAwMjozMzoxNCAtMDAwMAkxLjI4Cisr
KyBXZWJDb3JlL2todG1sL2VkaXRpbmcvbWFya3VwLmNwcAkyMSBBdWcgMjAwNSAwNToyNzo1OSAt
MDAwMApAQCAtMjIwLDcgKzIyMCw3IEBAIHN0YXRpYyBRU3RyaW5nIHN0YXJ0TWFya3VwKGNvbnN0
IE5vZGVJbXAKICAgICAgICAgICAgICAgICAgICAgc3R5bGUtPmRlcmVmKCk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIE5hbWVkQXR0ck1hcEltcGwgKmF0dHJzID0gZWwtPmF0
dHJpYnV0ZXMoKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxlbmd0aCA9IGF0dHJz
LT5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhdHRycy0+bGVu
Z3RoKCk7CiAgICAgICAgICAgICAgICAgaWYgKGxlbmd0aCA9PSAwICYmIGFkZGl0aW9uYWxTdHls
ZS5sZW5ndGgoKSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSBj
YXNlIHdoZXJlIGFkZGl0aW9uYWxTdHlsZSBoYXMgaWxsZWdhbCBjaGFyYWN0ZXJzIGluIGl0LCBs
aWtlICIKICAgICAgICAgICAgICAgICAgICAgbWFya3VwICs9ICIgIiArICBzdHlsZUF0dHIubG9j
YWxOYW1lKCkuc3RyaW5nKCkgKyAiPVwiIiArIGFkZGl0aW9uYWxTdHlsZS5zdHJpbmcoKSArICJc
IiI7CkBAIC0yOTQsOCArMjk0LDggQEAgc3RhdGljIHZvaWQgY29tcGxldGVVUkxzKE5vZGVJbXBs
ICpub2RlLAogICAgICAgICBpZiAobi0+bm9kZVR5cGUoKSA9PSBOb2RlOjpFTEVNRU5UX05PREUp
IHsKICAgICAgICAgICAgIEVsZW1lbnRJbXBsICplID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwg
Kj4obik7CiAgICAgICAgICAgICBOYW1lZEF0dHJNYXBJbXBsICphdHRycyA9IGUtPmF0dHJpYnV0
ZXMoKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoID0gYXR0cnMtPmxlbmd0aCgp
OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsb25nIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGF0dHJzLT5sZW5ndGgoKTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAg
ICAgICAgIEF0dHJpYnV0ZUltcGwgKmF0dHIgPSBhdHRycy0+YXR0cmlidXRlSXRlbShpKTsKICAg
ICAgICAgICAgICAgICBpZiAoZS0+aXNVUkxBdHRyaWJ1dGUoYXR0cikpCiAgICAgICAgICAgICAg
ICAgICAgIGUtPnNldEF0dHJpYnV0ZShhdHRyLT5uYW1lKCksIEtVUkwoYmFzZVVSTCwgYXR0ci0+
dmFsdWUoKS5zdHJpbmcoKSkudXJsKCkpOwpJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0aW5nL21v
dmVfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL2VkaXRpbmcvbW92ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIFdlYkNvcmUva2h0bWwvZWRpdGluZy9t
b3ZlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAotLS0gV2ViQ29yZS9raHRtbC9lZGl0aW5nL21vdmVf
c2VsZWN0aW9uX2NvbW1hbmQuY3BwCTI0IE1heSAyMDA1IDA3OjIxOjQ3IC0wMDAwCTEuMQorKysg
V2ViQ29yZS9raHRtbC9lZGl0aW5nL21vdmVfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCTIxIEF1ZyAy
MDA1IDA1OjI3OjU5IC0wMDAwCkBAIC02NSw5ICs2NSw5IEBAIHZvaWQgTW92ZVNlbGVjdGlvbkNv
bW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAKICAgICAvLyBVcGRhdGUgdGhlIHBvc2l0aW9uIG90
aGVyd2lzZSBpdCBtYXkgYmVjb21lIGludmFsaWQgYWZ0ZXIgdGhlIHNlbGVjdGlvbiBpcyBkZWxl
dGVkLgogICAgIE5vZGVJbXBsICpwb3NpdGlvbk5vZGUgPSBtX3Bvc2l0aW9uLm5vZGUoKTsKLSAg
ICBsb25nIHBvc2l0aW9uT2Zmc2V0ID0gbV9wb3NpdGlvbi5vZmZzZXQoKTsKKyAgICBpbnQgcG9z
aXRpb25PZmZzZXQgPSBtX3Bvc2l0aW9uLm9mZnNldCgpOwogICAgIFBvc2l0aW9uIHNlbGVjdGlv
bkVuZCA9IHNlbGVjdGlvbi5lbmQoKTsKLSAgICBsb25nIHNlbGVjdGlvbkVuZE9mZnNldCA9IHNl
bGVjdGlvbkVuZC5vZmZzZXQoKTsgICAgCisgICAgaW50IHNlbGVjdGlvbkVuZE9mZnNldCA9IHNl
bGVjdGlvbkVuZC5vZmZzZXQoKTsgICAgCiAgICAgaWYgKHNlbGVjdGlvbkVuZC5ub2RlKCkgPT0g
cG9zaXRpb25Ob2RlICYmIHNlbGVjdGlvbkVuZE9mZnNldCA8IHBvc2l0aW9uT2Zmc2V0KSB7CiAg
ICAgICAgIHBvc2l0aW9uT2Zmc2V0IC09IHNlbGVjdGlvbkVuZE9mZnNldDsKICAgICAgICAgUG9z
aXRpb24gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24uc3RhcnQoKTsKSW5kZXg6IFdlYkNvcmUv
a2h0bWwvZWRpdGluZy9yZWJhbGFuY2Vfd2hpdGVzcGFjZV9jb21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3JlYmFsYW5jZV93aGl0
ZXNwYWNlX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAt
cjEuMSBXZWJDb3JlL2todG1sL2VkaXRpbmcvcmViYWxhbmNlX3doaXRlc3BhY2VfY29tbWFuZC5j
cHAKLS0tIFdlYkNvcmUva2h0bWwvZWRpdGluZy9yZWJhbGFuY2Vfd2hpdGVzcGFjZV9jb21tYW5k
LmNwcAkyNCBNYXkgMjAwNSAwNzoyMTo0NyAtMDAwMAkxLjEKKysrIFdlYkNvcmUva2h0bWwvZWRp
dGluZy9yZWJhbGFuY2Vfd2hpdGVzcGFjZV9jb21tYW5kLmNwcAkyMSBBdWcgMjAwNSAwNToyNzo1
OSAtMDAwMApAQCAtNzAsMTQgKzcwLDE0IEBAIHZvaWQgUmViYWxhbmNlV2hpdGVzcGFjZUNvbW1h
bmQ6OmRvQXBwbHkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIC8vIGZpbmQgdXBzdHJlYW0g
b2Zmc2V0Ci0gICAgbG9uZyB1cHN0cmVhbSA9IG1fcG9zaXRpb24ub2Zmc2V0KCk7CisgICAgaW50
IHVwc3RyZWFtID0gbV9wb3NpdGlvbi5vZmZzZXQoKTsKICAgICB3aGlsZSAodXBzdHJlYW0gPiAw
ICYmIGlzQ29sbGFwc2libGVXaGl0ZXNwYWNlKHRleHRbdXBzdHJlYW0gLSAxXSkgfHwgaXNOQlNQ
KHRleHRbdXBzdHJlYW0gLSAxXSkpIHsKICAgICAgICAgdXBzdHJlYW0tLTsKICAgICAgICAgbV91
cHN0cmVhbU9mZnNldCA9IHVwc3RyZWFtOwogICAgIH0KIAogICAgIC8vIGZpbmQgZG93bnN0cmVh
bSBvZmZzZXQKLSAgICBsb25nIGRvd25zdHJlYW0gPSBtX3Bvc2l0aW9uLm9mZnNldCgpOworICAg
IGludCBkb3duc3RyZWFtID0gbV9wb3NpdGlvbi5vZmZzZXQoKTsKICAgICB3aGlsZSAoKHVuc2ln
bmVkKWRvd25zdHJlYW0gPCB0ZXh0Lmxlbmd0aCgpICYmIGlzQ29sbGFwc2libGVXaGl0ZXNwYWNl
KHRleHRbZG93bnN0cmVhbV0pIHx8IGlzTkJTUCh0ZXh0W2Rvd25zdHJlYW1dKSkgewogICAgICAg
ICBkb3duc3RyZWFtKys7CiAgICAgICAgIG1fZG93bnN0cmVhbU9mZnNldCA9IGRvd25zdHJlYW07
CkBAIC04OCwxNiArODgsMTYgQEAgdm9pZCBSZWJhbGFuY2VXaGl0ZXNwYWNlQ29tbWFuZDo6ZG9B
cHBseQogICAgICAgICAKICAgICBtX3Vwc3RyZWFtT2Zmc2V0ID0gdXBzdHJlYW07CiAgICAgbV9k
b3duc3RyZWFtT2Zmc2V0ID0gZG93bnN0cmVhbTsKLSAgICBsb25nIGxlbmd0aCA9IG1fZG93bnN0
cmVhbU9mZnNldCAtIG1fdXBzdHJlYW1PZmZzZXQ7CisgICAgaW50IGxlbmd0aCA9IG1fZG93bnN0
cmVhbU9mZnNldCAtIG1fdXBzdHJlYW1PZmZzZXQ7CiAgICAgCiAgICAgbV9iZWZvcmVTdHJpbmcg
PSB0ZXh0LnN1YnN0cmluZyhtX3Vwc3RyZWFtT2Zmc2V0LCBsZW5ndGgpOwogICAgIAogICAgIC8v
IFRoZSBmb2xsb3dpbmcgbG9vcCBmaWd1cmVzIG91dCBhICJyZWJhbGFuY2VkIiB3aGl0ZXNwYWNl
IHN0cmluZyBmb3IgYW55IGxlbmd0aAogICAgIC8vIHN0cmluZywgYW5kIHRha2VzIGludG8gYWNj
b3VudCB0aGUgc3BlY2lhbCBjYXNlcyB0aGF0IG5lZWQgdG8gaGFuZGxlZCBmb3IgdGhlCiAgICAg
Ly8gc3RhcnQgYW5kIGVuZCBvZiBzdHJpbmdzIChpLmUuIGZpcnN0IGFuZCBsYXN0IGNoYXJhY3Rl
ciBtdXN0IGJlIGFuIG5ic3AuCi0gICAgbG9uZyBpID0gbV91cHN0cmVhbU9mZnNldDsKKyAgICBp
bnQgaSA9IG1fdXBzdHJlYW1PZmZzZXQ7CiAgICAgd2hpbGUgKGkgPCBtX2Rvd25zdHJlYW1PZmZz
ZXQpIHsKLSAgICAgICAgbG9uZyBhZGQgPSAobV9kb3duc3RyZWFtT2Zmc2V0IC0gaSkgJSAzOwor
ICAgICAgICBpbnQgYWRkID0gKG1fZG93bnN0cmVhbU9mZnNldCAtIGkpICUgMzsKICAgICAgICAg
c3dpdGNoIChhZGQpIHsKICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICBtX2Fm
dGVyU3RyaW5nICs9IG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKTsKSW5kZXg6IFdlYkNvcmUva2h0
bWwvZWRpdGluZy9yZWJhbGFuY2Vfd2hpdGVzcGFjZV9jb21tYW5kLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9yZWJhbGFuY2Vfd2hpdGVzcGFj
ZV9jb21tYW5kLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIFdl
YkNvcmUva2h0bWwvZWRpdGluZy9yZWJhbGFuY2Vfd2hpdGVzcGFjZV9jb21tYW5kLmgKLS0tIFdl
YkNvcmUva2h0bWwvZWRpdGluZy9yZWJhbGFuY2Vfd2hpdGVzcGFjZV9jb21tYW5kLmgJMjQgTWF5
IDIwMDUgMDc6MjE6NDcgLTAwMDAJMS4xCisrKyBXZWJDb3JlL2todG1sL2VkaXRpbmcvcmViYWxh
bmNlX3doaXRlc3BhY2VfY29tbWFuZC5oCTIxIEF1ZyAyMDA1IDA1OjI3OjU5IC0wMDAwCkBAIC00
OCw4ICs0OCw4IEBAIHByaXZhdGU6CiAgICAgRE9NOjpET01TdHJpbmcgbV9iZWZvcmVTdHJpbmc7
CiAgICAgRE9NOjpET01TdHJpbmcgbV9hZnRlclN0cmluZzsKICAgICBET006OlBvc2l0aW9uIG1f
cG9zaXRpb247Ci0gICAgbG9uZyBtX3Vwc3RyZWFtT2Zmc2V0OwotICAgIGxvbmcgbV9kb3duc3Ry
ZWFtT2Zmc2V0OworICAgIGludCBtX3Vwc3RyZWFtT2Zmc2V0OworICAgIGludCBtX2Rvd25zdHJl
YW1PZmZzZXQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBraHRtbApJbmRleDogV2ViQ29yZS9raHRt
bC9lZGl0aW5nL3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvcmVwbGFjZV9zZWxlY3Rpb25fY29t
bWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOQpkaWZmIC1wIC11IC1yMS45IFdlYkNv
cmUva2h0bWwvZWRpdGluZy9yZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAotLS0gV2ViQ29y
ZS9raHRtbC9lZGl0aW5nL3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCTMwIEp1bCAyMDA1
IDAyOjMzOjE0IC0wMDAwCTEuOQorKysgV2ViQ29yZS9raHRtbC9lZGl0aW5nL3JlcGxhY2Vfc2Vs
ZWN0aW9uX2NvbW1hbmQuY3BwCTIxIEF1ZyAyMDA1IDA1OjI4OjAwIC0wMDAwCkBAIC0xMDMzLDcg
KzEwMzMsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjppbnNlcnROb2RlCiAgICAg
dXBkYXRlTm9kZXNJbnNlcnRlZChpbnNlcnRDaGlsZCk7CiB9CiAKLXZvaWQgUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQ6Omluc2VydE5vZGVBdEFuZFVwZGF0ZU5vZGVzSW5zZXJ0ZWQoTm9kZUltcGwg
Kmluc2VydENoaWxkLCBOb2RlSW1wbCAqcmVmQ2hpbGQsIGxvbmcgb2Zmc2V0KQordm9pZCBSZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZDo6aW5zZXJ0Tm9kZUF0QW5kVXBkYXRlTm9kZXNJbnNlcnRlZChO
b2RlSW1wbCAqaW5zZXJ0Q2hpbGQsIE5vZGVJbXBsICpyZWZDaGlsZCwgaW50IG9mZnNldCkKIHsK
ICAgICBpbnNlcnROb2RlQXQoaW5zZXJ0Q2hpbGQsIHJlZkNoaWxkLCBvZmZzZXQpOwogICAgIHVw
ZGF0ZU5vZGVzSW5zZXJ0ZWQoaW5zZXJ0Q2hpbGQpOwpJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0
aW5nL3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuaCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEgV2ViQ29yZS9raHRtbC9l
ZGl0aW5nL3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuaAotLS0gV2ViQ29yZS9raHRtbC9lZGl0
aW5nL3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuaAkyNCBNYXkgMjAwNSAwNzoyMTo0NyAtMDAw
MAkxLjEKKysrIFdlYkNvcmUva2h0bWwvZWRpdGluZy9yZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5k
LmgJMjEgQXVnIDIwMDUgMDU6Mjg6MDAgLTAwMDAKQEAgLTEyNCw3ICsxMjQsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgY29tcGxldGVIVE1MUmVwbGFjZW1lbnQoY29uc3QgRE9NOjpQb3NpdGlvbiAm
bGFzdFBvc2l0aW9uVG9TZWxlY3QpOwogCiAgICAgdm9pZCBpbnNlcnROb2RlQWZ0ZXJBbmRVcGRh
dGVOb2Rlc0luc2VydGVkKERPTTo6Tm9kZUltcGwgKmluc2VydENoaWxkLCBET006Ok5vZGVJbXBs
ICpyZWZDaGlsZCk7Ci0gICAgdm9pZCBpbnNlcnROb2RlQXRBbmRVcGRhdGVOb2Rlc0luc2VydGVk
KERPTTo6Tm9kZUltcGwgKmluc2VydENoaWxkLCBET006Ok5vZGVJbXBsICpyZWZDaGlsZCwgbG9u
ZyBvZmZzZXQpOworICAgIHZvaWQgaW5zZXJ0Tm9kZUF0QW5kVXBkYXRlTm9kZXNJbnNlcnRlZChE
T006Ok5vZGVJbXBsICppbnNlcnRDaGlsZCwgRE9NOjpOb2RlSW1wbCAqcmVmQ2hpbGQsIGludCBv
ZmZzZXQpOwogICAgIHZvaWQgaW5zZXJ0Tm9kZUJlZm9yZUFuZFVwZGF0ZU5vZGVzSW5zZXJ0ZWQo
RE9NOjpOb2RlSW1wbCAqaW5zZXJ0Q2hpbGQsIERPTTo6Tm9kZUltcGwgKnJlZkNoaWxkKTsKIAog
ICAgIHZvaWQgdXBkYXRlTm9kZXNJbnNlcnRlZChET006Ok5vZGVJbXBsICopOwpJbmRleDogV2Vi
Q29yZS9raHRtbC9lZGl0aW5nL3NlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9zZWxlY3Rpb24uY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjkwCmRpZmYgLXAgLXUgLXIxLjkwIFdlYkNvcmUva2h0bWwvZWRpdGluZy9zZWxl
Y3Rpb24uY3BwCi0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcvc2VsZWN0aW9uLmNwcAk5IEp1bCAy
MDA1IDIwOjE5OjA3IC0wMDAwCTEuOTAKKysrIFdlYkNvcmUva2h0bWwvZWRpdGluZy9zZWxlY3Rp
b24uY3BwCTIxIEF1ZyAyMDA1IDA1OjI4OjAxIC0wMDAwCkBAIC0xMDE5LDE0ICsxMDE5LDE0IEBA
IHZvaWQgU2VsZWN0aW9uOjpkZWJ1Z1Bvc2l0aW9uKCkgY29uc3QKIAogICAgIGlmIChtX3N0YXJ0
ID09IG1fZW5kKSB7CiAgICAgICAgIFBvc2l0aW9uIHBvcyA9IG1fc3RhcnQ7Ci0gICAgICAgIGZw
cmludGYoc3RkZXJyLCAicG9zOiAgICAgICAgJXMgJXA6JWxkXG4iLCBwb3Mubm9kZSgpLT5ub2Rl
TmFtZSgpLnN0cmluZygpLmxhdGluMSgpLCBwb3Mubm9kZSgpLCBwb3Mub2Zmc2V0KCkpOworICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgInBvczogICAgICAgICVzICVwOiVkXG4iLCBwb3Mubm9kZSgp
LT5ub2RlTmFtZSgpLnN0cmluZygpLmxhdGluMSgpLCBwb3Mubm9kZSgpLCBwb3Mub2Zmc2V0KCkp
OwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgUG9zaXRpb24gcG9zID0gbV9zdGFydDsKLSAg
ICAgICAgZnByaW50ZihzdGRlcnIsICJzdGFydDogICAgICAlcyAlcDolbGRcbiIsIHBvcy5ub2Rl
KCktPm5vZGVOYW1lKCkuc3RyaW5nKCkubGF0aW4xKCksIHBvcy5ub2RlKCksIHBvcy5vZmZzZXQo
KSk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAic3RhcnQ6ICAgICAgJXMgJXA6JWRcbiIsIHBv
cy5ub2RlKCktPm5vZGVOYW1lKCkuc3RyaW5nKCkubGF0aW4xKCksIHBvcy5ub2RlKCksIHBvcy5v
ZmZzZXQoKSk7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS1cbiIpOwogICAgICAgICBwb3MgPSBtX2VuZDsKLSAgICAgICAgZnByaW50
ZihzdGRlcnIsICJlbmQ6ICAgICAgICAlcyAlcDolbGRcbiIsIHBvcy5ub2RlKCktPm5vZGVOYW1l
KCkuc3RyaW5nKCkubGF0aW4xKCksIHBvcy5ub2RlKCksIHBvcy5vZmZzZXQoKSk7CisgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiZW5kOiAgICAgICAgJXMgJXA6JWRcbiIsIHBvcy5ub2RlKCktPm5v
ZGVOYW1lKCkuc3RyaW5nKCkubGF0aW4xKCksIHBvcy5ub2RlKCksIHBvcy5vZmZzZXQoKSk7CiAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS1cbiIpOwogICAgIH0KICAgICAgICAgICAKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy9z
cGxpdF90ZXh0X25vZGVfY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvZWRpdGluZy9zcGxpdF90ZXh0X25vZGVfY29tbWFuZC5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIFdlYkNvcmUva2h0bWwvZWRpdGlu
Zy9zcGxpdF90ZXh0X25vZGVfY29tbWFuZC5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWRpdGluZy9z
cGxpdF90ZXh0X25vZGVfY29tbWFuZC5jcHAJMjQgTWF5IDIwMDUgMDc6MjE6NDcgLTAwMDAJMS4x
CisrKyBXZWJDb3JlL2todG1sL2VkaXRpbmcvc3BsaXRfdGV4dF9ub2RlX2NvbW1hbmQuY3BwCTIx
IEF1ZyAyMDA1IDA1OjI4OjAxIC0wMDAwCkBAIC00MCw3ICs0MCw3IEBAIHVzaW5nIERPTTo6Tm9k
ZUltcGw7CiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKLVNwbGl0VGV4dE5vZGVDb21tYW5kOjpTcGxp
dFRleHROb2RlQ29tbWFuZChEb2N1bWVudEltcGwgKmRvY3VtZW50LCBUZXh0SW1wbCAqdGV4dCwg
bG9uZyBvZmZzZXQpCitTcGxpdFRleHROb2RlQ29tbWFuZDo6U3BsaXRUZXh0Tm9kZUNvbW1hbmQo
RG9jdW1lbnRJbXBsICpkb2N1bWVudCwgVGV4dEltcGwgKnRleHQsIGludCBvZmZzZXQpCiAgICAg
OiBFZGl0Q29tbWFuZChkb2N1bWVudCksIG1fdGV4dDEoMCksIG1fdGV4dDIodGV4dCksIG1fb2Zm
c2V0KG9mZnNldCkKIHsKICAgICBBU1NFUlQobV90ZXh0Mik7CkluZGV4OiBXZWJDb3JlL2todG1s
L2VkaXRpbmcvc3BsaXRfdGV4dF9ub2RlX2NvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3NwbGl0X3RleHRfbm9kZV9jb21tYW5kLmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIFdlYkNvcmUva2h0bWwv
ZWRpdGluZy9zcGxpdF90ZXh0X25vZGVfY29tbWFuZC5oCi0tLSBXZWJDb3JlL2todG1sL2VkaXRp
bmcvc3BsaXRfdGV4dF9ub2RlX2NvbW1hbmQuaAkyNCBNYXkgMjAwNSAwNzoyMTo0NyAtMDAwMAkx
LjEKKysrIFdlYkNvcmUva2h0bWwvZWRpdGluZy9zcGxpdF90ZXh0X25vZGVfY29tbWFuZC5oCTIx
IEF1ZyAyMDA1IDA1OjI4OjAxIC0wMDAwCkBAIC0zNywxOSArMzcsMTkgQEAgbmFtZXNwYWNlIGto
dG1sIHsKIGNsYXNzIFNwbGl0VGV4dE5vZGVDb21tYW5kIDogcHVibGljIEVkaXRDb21tYW5kCiB7
CiBwdWJsaWM6Ci0gICAgU3BsaXRUZXh0Tm9kZUNvbW1hbmQoRE9NOjpEb2N1bWVudEltcGwgKiwg
RE9NOjpUZXh0SW1wbCAqLCBsb25nKTsKKyAgICBTcGxpdFRleHROb2RlQ29tbWFuZChET006OkRv
Y3VtZW50SW1wbCAqLCBET006OlRleHRJbXBsICosIGludCk7CiAgICAgdmlydHVhbCB+U3BsaXRU
ZXh0Tm9kZUNvbW1hbmQoKTsKIAkKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwogICAgIHZp
cnR1YWwgdm9pZCBkb1VuYXBwbHkoKTsKIAogICAgIERPTTo6VGV4dEltcGwgKm5vZGUoKSBjb25z
dCB7IHJldHVybiBtX3RleHQyOyB9Ci0gICAgbG9uZyBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X29mZnNldDsgfQorICAgIGludCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQog
CiBwcml2YXRlOgogICAgIERPTTo6VGV4dEltcGwgKm1fdGV4dDE7CiAgICAgRE9NOjpUZXh0SW1w
bCAqbV90ZXh0MjsKLSAgICB1bnNpZ25lZCBsb25nIG1fb2Zmc2V0OworICAgIHVuc2lnbmVkIG1f
b2Zmc2V0OwogfTsKIAogfSAvLyBuYW1lc3BhY2Uga2h0bWwKSW5kZXg6IFdlYkNvcmUva2h0bWwv
ZWRpdGluZy9zcGxpdF90ZXh0X25vZGVfY29udGFpbmluZ19lbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3NwbGl0X3RleHRfbm9k
ZV9jb250YWluaW5nX2VsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAt
cCAtdSAtcjEuMSBXZWJDb3JlL2todG1sL2VkaXRpbmcvc3BsaXRfdGV4dF9ub2RlX2NvbnRhaW5p
bmdfZWxlbWVudC5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWRpdGluZy9zcGxpdF90ZXh0X25vZGVf
Y29udGFpbmluZ19lbGVtZW50LmNwcAkyNCBNYXkgMjAwNSAxNzozNzoyMiAtMDAwMAkxLjEKKysr
IFdlYkNvcmUva2h0bWwvZWRpdGluZy9zcGxpdF90ZXh0X25vZGVfY29udGFpbmluZ19lbGVtZW50
LmNwcAkyMSBBdWcgMjAwNSAwNToyODowMiAtMDAwMApAQCAtNDIsNyArNDIsNyBAQCB1c2luZyBE
T006OkVsZW1lbnRJbXBsOwogCiBuYW1lc3BhY2Uga2h0bWwgewogCi1TcGxpdFRleHROb2RlQ29u
dGFpbmluZ0VsZW1lbnRDb21tYW5kOjpTcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21t
YW5kKERvY3VtZW50SW1wbCAqZG9jdW1lbnQsIFRleHRJbXBsICp0ZXh0LCBsb25nIG9mZnNldCkK
K1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQ6OlNwbGl0VGV4dE5vZGVDb250
YWluaW5nRWxlbWVudENvbW1hbmQoRG9jdW1lbnRJbXBsICpkb2N1bWVudCwgVGV4dEltcGwgKnRl
eHQsIGludCBvZmZzZXQpCiAgICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChkb2N1bWVudCksIG1f
dGV4dCh0ZXh0KSwgbV9vZmZzZXQob2Zmc2V0KQogewogICAgIEFTU0VSVChtX3RleHQpOwpJbmRl
eDogV2ViQ29yZS9raHRtbC9lZGl0aW5nL3NwbGl0X3RleHRfbm9kZV9jb250YWluaW5nX2VsZW1l
bnRfY29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2VkaXRpbmcvc3BsaXRfdGV4dF9ub2RlX2NvbnRhaW5pbmdfZWxlbWVudF9jb21tYW5kLmgsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIFdlYkNvcmUva2h0bWwvZWRp
dGluZy9zcGxpdF90ZXh0X25vZGVfY29udGFpbmluZ19lbGVtZW50X2NvbW1hbmQuaAotLS0gV2Vi
Q29yZS9raHRtbC9lZGl0aW5nL3NwbGl0X3RleHRfbm9kZV9jb250YWluaW5nX2VsZW1lbnRfY29t
bWFuZC5oCTI0IE1heSAyMDA1IDA3OjIxOjQ3IC0wMDAwCTEuMQorKysgV2ViQ29yZS9raHRtbC9l
ZGl0aW5nL3NwbGl0X3RleHRfbm9kZV9jb250YWluaW5nX2VsZW1lbnRfY29tbWFuZC5oCTIxIEF1
ZyAyMDA1IDA1OjI4OjAyIC0wMDAwCkBAIC0zMywxNCArMzMsMTQgQEAgbmFtZXNwYWNlIGtodG1s
IHsKIGNsYXNzIFNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQgOiBwdWJsaWMg
Q29tcG9zaXRlRWRpdENvbW1hbmQKIHsKIHB1YmxpYzoKLSAgICBTcGxpdFRleHROb2RlQ29udGFp
bmluZ0VsZW1lbnRDb21tYW5kKERPTTo6RG9jdW1lbnRJbXBsICosIERPTTo6VGV4dEltcGwgKiwg
bG9uZyk7CisgICAgU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZChET006OkRv
Y3VtZW50SW1wbCAqLCBET006OlRleHRJbXBsICosIGludCk7CiAgICAgdmlydHVhbCB+U3BsaXRU
ZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZCgpOwogCQogICAgIHZpcnR1YWwgdm9pZCBk
b0FwcGx5KCk7CiAKIHByaXZhdGU6CiAgICAgRE9NOjpUZXh0SW1wbCAqbV90ZXh0OwotICAgIGxv
bmcgbV9vZmZzZXQ7CisgICAgaW50IG1fb2Zmc2V0OwogfTsKIAogfSAvLyBuYW1lc3BhY2Uga2h0
bWwKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3Zpc2libGVf
cG9zaXRpb24uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjU0CmRpZmYgLXAgLXUgLXIxLjU0
IFdlYkNvcmUva2h0bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmNwcAotLS0gV2ViQ29yZS9r
aHRtbC9lZGl0aW5nL3Zpc2libGVfcG9zaXRpb24uY3BwCTMwIEp1bCAyMDA1IDAyOjMzOjE1IC0w
MDAwCTEuNTQKKysrIFdlYkNvcmUva2h0bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmNwcAky
MSBBdWcgMjAwNSAwNToyODowMiAtMDAwMApAQCAtNTksNyArNTksNyBAQCBWaXNpYmxlUG9zaXRp
b246OlZpc2libGVQb3NpdGlvbihjb25zdCBQCiAgICAgaW5pdChwb3MsIGFmZmluaXR5KTsKIH0K
IAotVmlzaWJsZVBvc2l0aW9uOjpWaXNpYmxlUG9zaXRpb24oTm9kZUltcGwgKm5vZGUsIGxvbmcg
b2Zmc2V0LCBFQWZmaW5pdHkgYWZmaW5pdHkpCitWaXNpYmxlUG9zaXRpb246OlZpc2libGVQb3Np
dGlvbihOb2RlSW1wbCAqbm9kZSwgaW50IG9mZnNldCwgRUFmZmluaXR5IGFmZmluaXR5KQogewog
ICAgIGluaXQoUG9zaXRpb24obm9kZSwgb2Zmc2V0KSwgYWZmaW5pdHkpOwogfQpAQCAtMjg2LDcg
KzI4Niw3IEBAIGJvb2wgVmlzaWJsZVBvc2l0aW9uOjppc0NhbmRpZGF0ZShjb25zdCAKIFBvc2l0
aW9uIFZpc2libGVQb3NpdGlvbjo6ZGVlcEVxdWl2YWxlbnQoY29uc3QgUG9zaXRpb24gJnBvcykK
IHsKICAgICBOb2RlSW1wbCAqbm9kZSA9IHBvcy5ub2RlKCk7Ci0gICAgbG9uZyBvZmZzZXQgPSBw
b3Mub2Zmc2V0KCk7CisgICAgaW50IG9mZnNldCA9IHBvcy5vZmZzZXQoKTsKIAogICAgIGlmICgh
bm9kZSkKICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CkBAIC0yOTQsNyArMjk0LDcgQEAgUG9z
aXRpb24gVmlzaWJsZVBvc2l0aW9uOjpkZWVwRXF1aXZhbGVudAogICAgIGlmIChpc0F0b21pY05v
ZGUobm9kZSkpCiAgICAgICAgIHJldHVybiBwb3M7CiAKLSAgICBpZiAob2Zmc2V0ID49IChsb25n
KW5vZGUtPmNoaWxkTm9kZUNvdW50KCkpIHsKKyAgICBpZiAob2Zmc2V0ID49IChpbnQpbm9kZS0+
Y2hpbGROb2RlQ291bnQoKSkgewogICAgICAgICBkbyB7CiAgICAgICAgICAgICBOb2RlSW1wbCAq
Y2hpbGQgPSBub2RlLT5sYXN0Q2hpbGQoKTsKICAgICAgICAgICAgIGlmICghY2hpbGQpCkBAIC0z
NDYsMTYgKzM0NiwxNiBAQCBQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OnJhbmdlQ29tcGxpYW50
CiAgICAgLy8gRklYTUU6IFRoaXMgY2xhbXBzIG91dC1vZi1yYW5nZSB2YWx1ZXMuCiAgICAgLy8g
SW5zdGVhZCB3ZSBzaG91bGQgcHJvYmFibHkgYXNzZXJ0LCBhbmQgbm90IHVzZSBzdWNoIHZhbHVl
cy4KIAotICAgIGxvbmcgb2Zmc2V0ID0gcG9zLm9mZnNldCgpOworICAgIGludCBvZmZzZXQgPSBw
b3Mub2Zmc2V0KCk7CiAgICAgaWYgKCFvZmZzZXRJbkNoYXJhY3RlcnMobm9kZS0+bm9kZVR5cGUo
KSkgJiYgaXNBdG9taWNOb2RlKG5vZGUpICYmIG9mZnNldCA+IDApCiAgICAgICAgIHJldHVybiBQ
b3NpdGlvbihub2RlLT5wYXJlbnROb2RlKCksIG5vZGUtPm5vZGVJbmRleCgpICsgMSk7CiAKLSAg
ICByZXR1cm4gUG9zaXRpb24obm9kZSwga01heCgwTCwga01pbihvZmZzZXQsIG1heE9mZnNldChu
b2RlKSkpKTsKKyAgICByZXR1cm4gUG9zaXRpb24obm9kZSwga01heCgwLCBrTWluKG9mZnNldCwg
bWF4T2Zmc2V0KG5vZGUpKSkpOwogfQogCi1sb25nIFZpc2libGVQb3NpdGlvbjo6bWF4T2Zmc2V0
KGNvbnN0IE5vZGVJbXBsICpub2RlKQoraW50IFZpc2libGVQb3NpdGlvbjo6bWF4T2Zmc2V0KGNv
bnN0IE5vZGVJbXBsICpub2RlKQogewotICAgIHJldHVybiBvZmZzZXRJbkNoYXJhY3RlcnMobm9k
ZS0+bm9kZVR5cGUoKSkgPyAobG9uZylzdGF0aWNfY2FzdDxjb25zdCBDaGFyYWN0ZXJEYXRhSW1w
bCAqPihub2RlKS0+bGVuZ3RoKCkgOiAobG9uZylub2RlLT5jaGlsZE5vZGVDb3VudCgpOworICAg
IHJldHVybiBvZmZzZXRJbkNoYXJhY3RlcnMobm9kZS0+bm9kZVR5cGUoKSkgPyAoaW50KXN0YXRp
Y19jYXN0PGNvbnN0IENoYXJhY3RlckRhdGFJbXBsICo+KG5vZGUpLT5sZW5ndGgoKSA6IChpbnQp
bm9kZS0+Y2hpbGROb2RlQ291bnQoKTsKIH0KIAogYm9vbCBWaXNpYmxlUG9zaXRpb246OmlzQXRv
bWljTm9kZShjb25zdCBOb2RlSW1wbCAqbm9kZSkKQEAgLTM3MSw3ICszNzEsNyBAQCBRQ2hhciBW
aXNpYmxlUG9zaXRpb246OmNoYXJhY3RlcigpIGNvbnN0CiAgICAgICAgIHJldHVybiBRQ2hhcigp
OwogICAgIH0KICAgICBUZXh0SW1wbCAqdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0SW1wbCAq
Pihwb3Mubm9kZSgpKTsKLSAgICBsb25nIG9mZnNldCA9IHBvcy5vZmZzZXQoKTsKKyAgICBpbnQg
b2Zmc2V0ID0gcG9zLm9mZnNldCgpOwogICAgIGlmICgodW5zaWduZWQpb2Zmc2V0ID49IHRleHRO
b2RlLT5sZW5ndGgoKSkgewogICAgICAgICByZXR1cm4gUUNoYXIoKTsKICAgICB9CkBAIC00MDEs
NyArNDAxLDcgQEAgdm9pZCBWaXNpYmxlUG9zaXRpb246OmRlYnVnUG9zaXRpb24oY29ucwogICAg
IGlmIChpc051bGwoKSkKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJQb3NpdGlvbiBbJXNdOiBu
dWxsXG4iLCBtc2cpOwogICAgIGVsc2UKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJQb3NpdGlv
biBbJXNdOiAlcyBbJXBdIGF0ICVsZFxuIiwgbXNnLCBtX2RlZXBQb3NpdGlvbi5ub2RlKCktPm5v
ZGVOYW1lKCkuc3RyaW5nKCkubGF0aW4xKCksIG1fZGVlcFBvc2l0aW9uLm5vZGUoKSwgbV9kZWVw
UG9zaXRpb24ub2Zmc2V0KCkpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlBvc2l0aW9uIFsl
c106ICVzIFslcF0gYXQgJWRcbiIsIG1zZywgbV9kZWVwUG9zaXRpb24ubm9kZSgpLT5ub2RlTmFt
ZSgpLnN0cmluZygpLmxhdGluMSgpLCBtX2RlZXBQb3NpdGlvbi5ub2RlKCksIG1fZGVlcFBvc2l0
aW9uLm9mZnNldCgpKTsKIH0KIAogI2lmbmRlZiBOREVCVUcKSW5kZXg6IFdlYkNvcmUva2h0bWwv
ZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMjkKZGlmZiAtcCAtdSAtcjEuMjkgV2ViQ29yZS9raHRtbC9lZGl0aW5nL3Zpc2li
bGVfcG9zaXRpb24uaAotLS0gV2ViQ29yZS9raHRtbC9lZGl0aW5nL3Zpc2libGVfcG9zaXRpb24u
aAkyMyBKdW4gMjAwNSAxOTo0Nzo0OSAtMDAwMAkxLjI5CisrKyBXZWJDb3JlL2todG1sL2VkaXRp
bmcvdmlzaWJsZV9wb3NpdGlvbi5oCTIxIEF1ZyAyMDA1IDA1OjI4OjAyIC0wMDAwCkBAIC00OCw3
ICs0OCw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIERPTTo6UG9zaXRpb24gUG9zaXRpb247CiAK
ICAgICBWaXNpYmxlUG9zaXRpb24oKSB7IG1fYWZmaW5pdHkgPSBWUF9ERUZBVUxUX0FGRklOSVRZ
OyB9OwotICAgIFZpc2libGVQb3NpdGlvbihOb2RlSW1wbCAqLCBsb25nIG9mZnNldCwgRUFmZmlu
aXR5KTsKKyAgICBWaXNpYmxlUG9zaXRpb24oTm9kZUltcGwgKiwgaW50IG9mZnNldCwgRUFmZmlu
aXR5KTsKICAgICBWaXNpYmxlUG9zaXRpb24oY29uc3QgUG9zaXRpb24gJiwgRUFmZmluaXR5KTsK
ICAgICBWaXNpYmxlUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uICYpOwogCkBAIC05Myw3
ICs5Myw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIFBvc2l0aW9uIGRlZXBFcXVpdmFsZW50KGNv
bnN0IFBvc2l0aW9uICYpOwogICAgIHN0YXRpYyBQb3NpdGlvbiByYW5nZUNvbXBsaWFudEVxdWl2
YWxlbnQoY29uc3QgUG9zaXRpb24gJik7CiAKLSAgICBzdGF0aWMgbG9uZyBtYXhPZmZzZXQoY29u
c3QgTm9kZUltcGwgKik7CisgICAgc3RhdGljIGludCBtYXhPZmZzZXQoY29uc3QgTm9kZUltcGwg
Kik7CiAgICAgc3RhdGljIGJvb2wgaXNBdG9taWNOb2RlKGNvbnN0IE5vZGVJbXBsICopOwogICAg
IAogICAgIHN0YXRpYyBQb3NpdGlvbiBwcmV2aW91c1Zpc2libGVQb3NpdGlvbihjb25zdCBQb3Np
dGlvbiAmKTsKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy92aXNpYmxlX3JhbmdlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy92aXNpYmxl
X3JhbmdlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMwpkaWZmIC1wIC11IC1yMS4zIFdlYkNv
cmUva2h0bWwvZWRpdGluZy92aXNpYmxlX3JhbmdlLmgKLS0tIFdlYkNvcmUva2h0bWwvZWRpdGlu
Zy92aXNpYmxlX3JhbmdlLmgJMTMgTWF5IDIwMDUgMTY6NDg6NTEgLTAwMDAJMS4zCisrKyBXZWJD
b3JlL2todG1sL2VkaXRpbmcvdmlzaWJsZV9yYW5nZS5oCTIxIEF1ZyAyMDA1IDA1OjI4OjAyIC0w
MDAwCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIERPTTo6UmFuZ2VJbXBs
IFJhbmdlSW1wbDsKIAogICAgIFZpc2libGVSYW5nZSgpIHsgfQotICAgIFZpc2libGVSYW5nZShO
b2RlSW1wbCAqc3RhcnRDb250YWluZXIsIGxvbmcgc3RhcnRPZmZzZXQsIE5vZGVJbXBsICplbmRD
b250YWluZXIsIGxvbmcgZW5kT2Zmc2V0KTsKKyAgICBWaXNpYmxlUmFuZ2UoTm9kZUltcGwgKnN0
YXJ0Q29udGFpbmVyLCBpbnQgc3RhcnRPZmZzZXQsIE5vZGVJbXBsICplbmRDb250YWluZXIsIGlu
dCBlbmRPZmZzZXQpOwogICAgIFZpc2libGVSYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJik7
CiAgICAgVmlzaWJsZVJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmLCBjb25zdCBWaXNpYmxl
UG9zaXRpb24gJik7CiAgICAgVmlzaWJsZVJhbmdlKGNvbnN0IFJhbmdlSW1wbCAqKTsKSW5kZXg6
IFdlYkNvcmUva2h0bWwvZWRpdGluZy92aXNpYmxlX3RleHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvdmlzaWJsZV90ZXh0LmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4zMwpkaWZmIC1wIC11IC1yMS4zMyBXZWJDb3JlL2todG1sL2Vk
aXRpbmcvdmlzaWJsZV90ZXh0LmNwcAotLS0gV2ViQ29yZS9raHRtbC9lZGl0aW5nL3Zpc2libGVf
dGV4dC5jcHAJMTUgQXVnIDIwMDUgMDU6MDE6NTMgLTAwMDAJMS4zMworKysgV2ViQ29yZS9raHRt
bC9lZGl0aW5nL3Zpc2libGVfdGV4dC5jcHAJMjEgQXVnIDIwMDUgMDU6Mjg6MDMgLTAwMDAKQEAg
LTU3LDEyICs1NywxMiBAQCBwdWJsaWM6CiAgICAgfkNpcmN1bGFyU2VhcmNoQnVmZmVyKCkgeyBm
cmVlKG1fYnVmZmVyKTsgfQogCiAgICAgdm9pZCBjbGVhcigpIHsgbV9jdXJzb3IgPSBtX2J1ZmZl
cjsgbV9idWZmZXJGdWxsID0gZmFsc2U7IH0KLSAgICB2b2lkIGFwcGVuZChsb25nIGxlbmd0aCwg
Y29uc3QgUUNoYXIgKmNoYXJhY3RlcnMpOworICAgIHZvaWQgYXBwZW5kKGludCBsZW5ndGgsIGNv
bnN0IFFDaGFyICpjaGFyYWN0ZXJzKTsKICAgICB2b2lkIGFwcGVuZChjb25zdCBRQ2hhciAmKTsK
IAotICAgIGxvbmcgbmVlZGVkQ2hhcmFjdGVycygpIGNvbnN0OworICAgIGludCBuZWVkZWRDaGFy
YWN0ZXJzKCkgY29uc3Q7CiAgICAgYm9vbCBpc01hdGNoKCkgY29uc3Q7Ci0gICAgbG9uZyBsZW5n
dGgoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldC5sZW5ndGgoKTsgfQorICAgIGludCBsZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX3RhcmdldC5sZW5ndGgoKTsgfQogCiBwcml2YXRlOgogICAgIFFT
dHJpbmcgbV90YXJnZXQ7CkBAIC04OSw5ICs4OSw5IEBAIFRleHRJdGVyYXRvcjo6VGV4dEl0ZXJh
dG9yKGNvbnN0IFJhbmdlSW0KIAogICAgIC8vIGdldCBhbmQgdmFsaWRhdGUgdGhlIHJhbmdlIGVu
ZHBvaW50cwogICAgIE5vZGVJbXBsICpzdGFydENvbnRhaW5lciA9IHItPnN0YXJ0Q29udGFpbmVy
KGV4Y2VwdGlvbkNvZGUpOwotICAgIGxvbmcgc3RhcnRPZmZzZXQgPSByLT5zdGFydE9mZnNldChl
eGNlcHRpb25Db2RlKTsKKyAgICBpbnQgc3RhcnRPZmZzZXQgPSByLT5zdGFydE9mZnNldChleGNl
cHRpb25Db2RlKTsKICAgICBOb2RlSW1wbCAqZW5kQ29udGFpbmVyID0gci0+ZW5kQ29udGFpbmVy
KGV4Y2VwdGlvbkNvZGUpOwotICAgIGxvbmcgZW5kT2Zmc2V0ID0gci0+ZW5kT2Zmc2V0KGV4Y2Vw
dGlvbkNvZGUpOworICAgIGludCBlbmRPZmZzZXQgPSByLT5lbmRPZmZzZXQoZXhjZXB0aW9uQ29k
ZSk7CiAgICAgaWYgKGV4Y2VwdGlvbkNvZGUgIT0gMCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0y
MjAsMTQgKzIyMCwxNCBAQCBib29sIFRleHRJdGVyYXRvcjo6aGFuZGxlVGV4dE5vZGUoKQogCiAg
ICAgLy8gaGFuZGxlIHByZS1mb3JtYXR0ZWQgdGV4dAogICAgIGlmIChyZW5kZXJlci0+c3R5bGUo
KS0+d2hpdGVTcGFjZSgpID09IGtodG1sOjpQUkUpIHsKLSAgICAgICAgbG9uZyBydW5TdGFydCA9
IG1fb2Zmc2V0OworICAgICAgICBpbnQgcnVuU3RhcnQgPSBtX29mZnNldDsKICAgICAgICAgaWYg
KG1fbGFzdFRleHROb2RlRW5kZWRXaXRoQ29sbGFwc2VkU3BhY2UpIHsKICAgICAgICAgICAgIGVt
aXRDaGFyYWN0ZXIoJyAnLCBtX25vZGUsIDAsIHJ1blN0YXJ0LCBydW5TdGFydCk7CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgbG9uZyBzdHJMZW5ndGggPSBz
dHIubGVuZ3RoKCk7Ci0gICAgICAgIGxvbmcgZW5kID0gKG1fbm9kZSA9PSBtX2VuZENvbnRhaW5l
cikgPyBtX2VuZE9mZnNldCA6IExPTkdfTUFYOwotICAgICAgICBsb25nIHJ1bkVuZCA9IGtNaW4o
c3RyTGVuZ3RoLCBlbmQpOworICAgICAgICBpbnQgc3RyTGVuZ3RoID0gc3RyLmxlbmd0aCgpOwor
ICAgICAgICBpbnQgZW5kID0gKG1fbm9kZSA9PSBtX2VuZENvbnRhaW5lcikgPyBtX2VuZE9mZnNl
dCA6IExPTkdfTUFYOworICAgICAgICBpbnQgcnVuRW5kID0ga01pbihzdHJMZW5ndGgsIGVuZCk7
CiAKICAgICAgICAgaWYgKHJ1blN0YXJ0ID49IHJ1bkVuZCkKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwpAQCAtMjY3LDExICsyNjcsMTEgQEAgdm9pZCBUZXh0SXRlcmF0b3I6OmhhbmRsZVRleHRC
b3goKQogeyAgICAKICAgICBSZW5kZXJUZXh0ICpyZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRl
clRleHQgKj4obV9ub2RlLT5yZW5kZXJlcigpKTsKICAgICBET01TdHJpbmcgc3RyID0gcmVuZGVy
ZXItPnN0cmluZygpOwotICAgIGxvbmcgc3RhcnQgPSBtX29mZnNldDsKLSAgICBsb25nIGVuZCA9
IChtX25vZGUgPT0gbV9lbmRDb250YWluZXIpID8gbV9lbmRPZmZzZXQgOiBMT05HX01BWDsKKyAg
ICBpbnQgc3RhcnQgPSBtX29mZnNldDsKKyAgICBpbnQgZW5kID0gKG1fbm9kZSA9PSBtX2VuZENv
bnRhaW5lcikgPyBtX2VuZE9mZnNldCA6IExPTkdfTUFYOwogICAgIHdoaWxlIChtX3RleHRCb3gp
IHsKLSAgICAgICAgbG9uZyB0ZXh0Qm94U3RhcnQgPSBtX3RleHRCb3gtPm1fc3RhcnQ7Ci0gICAg
ICAgIGxvbmcgcnVuU3RhcnQgPSBrTWF4KHRleHRCb3hTdGFydCwgc3RhcnQpOworICAgICAgICBp
bnQgdGV4dEJveFN0YXJ0ID0gbV90ZXh0Qm94LT5tX3N0YXJ0OworICAgICAgICBpbnQgcnVuU3Rh
cnQgPSBrTWF4KHRleHRCb3hTdGFydCwgc3RhcnQpOwogCiAgICAgICAgIC8vIENoZWNrIGZvciBj
b2xsYXBzZWQgc3BhY2UgYXQgdGhlIHN0YXJ0IG9mIHRoaXMgcnVuLgogICAgICAgICBJbmxpbmVU
ZXh0Qm94ICpmaXJzdFRleHRCb3ggPSByZW5kZXJlci0+Y29udGFpbnNSZXZlcnNlZFRleHQoKSA/
IG1fc29ydGVkVGV4dEJveGVzLmdldEZpcnN0KCkgOiByZW5kZXJlci0+Zmlyc3RUZXh0Qm94KCk7
CkBAIC0yODEsOCArMjgxLDggQEAgdm9pZCBUZXh0SXRlcmF0b3I6OmhhbmRsZVRleHRCb3goKQog
ICAgICAgICAgICAgZW1pdENoYXJhY3RlcignICcsIG1fbm9kZSwgMCwgcnVuU3RhcnQsIHJ1blN0
YXJ0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBsb25nIHRleHRC
b3hFbmQgPSB0ZXh0Qm94U3RhcnQgKyBtX3RleHRCb3gtPm1fbGVuOwotICAgICAgICBsb25nIHJ1
bkVuZCA9IGtNaW4odGV4dEJveEVuZCwgZW5kKTsKKyAgICAgICAgaW50IHRleHRCb3hFbmQgPSB0
ZXh0Qm94U3RhcnQgKyBtX3RleHRCb3gtPm1fbGVuOworICAgICAgICBpbnQgcnVuRW5kID0ga01p
bih0ZXh0Qm94RW5kLCBlbmQpOwogICAgICAgICAKICAgICAgICAgLy8gRGV0ZXJtaW5lIHdoYXQg
dGhlIG5leHQgdGV4dCBib3ggd2lsbCBiZSwgYnV0IGRvbid0IGFkdmFuY2UgeWV0CiAgICAgICAg
IElubGluZVRleHRCb3ggKm5leHRUZXh0Qm94ID0gcmVuZGVyZXItPmNvbnRhaW5zUmV2ZXJzZWRU
ZXh0KCkgPyBtX3NvcnRlZFRleHRCb3hlcy5uZXh0KCkgOiBtX3RleHRCb3gtPm5leHRUZXh0Qm94
KCk7CkBAIC0yOTUsNyArMjk1LDcgQEAgdm9pZCBUZXh0SXRlcmF0b3I6OmhhbmRsZVRleHRCb3go
KQogICAgICAgICAgICAgICAgIGVtaXRDaGFyYWN0ZXIoJyAnLCBtX25vZGUsIDAsIHJ1blN0YXJ0
LCBydW5TdGFydCArIDEpOwogICAgICAgICAgICAgICAgIG1fb2Zmc2V0ID0gcnVuU3RhcnQgKyAx
OwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBsb25nIHN1YnJ1bkVuZCA9
IHN0ci5maW5kKCdcbicsIHJ1blN0YXJ0KTsKKyAgICAgICAgICAgICAgICBpbnQgc3VicnVuRW5k
ID0gc3RyLmZpbmQoJ1xuJywgcnVuU3RhcnQpOwogICAgICAgICAgICAgICAgIGlmIChzdWJydW5F
bmQgPT0gLTEgfHwgc3VicnVuRW5kID4gcnVuRW5kKSB7CiAgICAgICAgICAgICAgICAgICAgIHN1
YnJ1bkVuZCA9IHJ1bkVuZDsKICAgICAgICAgICAgICAgICB9CkBAIC0zMjAsNyArMzIwLDcgQEAg
dm9pZCBUZXh0SXRlcmF0b3I6OmhhbmRsZVRleHRCb3goKQogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICAvLyBBZHZhbmNlIGFuZCByZXR1cm4KLSAgICAgICAgICAgIGxvbmcgbmV4dFJ1blN0
YXJ0ID0gbmV4dFRleHRCb3ggPyBuZXh0VGV4dEJveC0+bV9zdGFydCA6IHN0ci5sZW5ndGgoKTsK
KyAgICAgICAgICAgIGludCBuZXh0UnVuU3RhcnQgPSBuZXh0VGV4dEJveCA/IG5leHRUZXh0Qm94
LT5tX3N0YXJ0IDogc3RyLmxlbmd0aCgpOwogICAgICAgICAgICAgaWYgKG5leHRSdW5TdGFydCA+
IHJ1bkVuZCkgewogICAgICAgICAgICAgICAgIG1fbGFzdFRleHROb2RlRW5kZWRXaXRoQ29sbGFw
c2VkU3BhY2UgPSB0cnVlOyAvLyBjb2xsYXBzZWQgc3BhY2UgYmV0d2VlbiBydW5zIG9yIGF0IHRo
ZSBlbmQKICAgICAgICAgICAgIH0KQEAgLTQzMyw3ICs0MzMsNyBAQCB2b2lkIFRleHRJdGVyYXRv
cjo6ZXhpdE5vZGUoKQogICAgIH0KIH0KIAotdm9pZCBUZXh0SXRlcmF0b3I6OmVtaXRDaGFyYWN0
ZXIoUUNoYXIgYywgTm9kZUltcGwgKnRleHROb2RlLCBOb2RlSW1wbCAqb2Zmc2V0QmFzZU5vZGUs
IGxvbmcgdGV4dFN0YXJ0T2Zmc2V0LCBsb25nIHRleHRFbmRPZmZzZXQpCit2b2lkIFRleHRJdGVy
YXRvcjo6ZW1pdENoYXJhY3RlcihRQ2hhciBjLCBOb2RlSW1wbCAqdGV4dE5vZGUsIE5vZGVJbXBs
ICpvZmZzZXRCYXNlTm9kZSwgaW50IHRleHRTdGFydE9mZnNldCwgaW50IHRleHRFbmRPZmZzZXQp
CiB7CiAgICAgLy8gcmVtZW1iZXIgaW5mb3JtYXRpb24gd2l0aCB3aGljaCB0byBjb25zdHJ1Y3Qg
dGhlIFRleHRJdGVyYXRvcjo6cmFuZ2UoKQogICAgIC8vIE5PVEU6IHRleHROb2RlIGlzIG9mdGVu
IG5vdCBhIHRleHQgbm9kZSwgc28gdGhlIHJhbmdlIHdpbGwgc3BlY2lmeSBjaGlsZCBub2RlcyBv
ZiBwb3NpdGlvbk5vZGUKQEAgLTQ1Nyw3ICs0NTcsNyBAQCBTaGFyZWRQdHI8UmFuZ2VJbXBsPiBU
ZXh0SXRlcmF0b3I6OnJhbmdlCiAgICAgLy8gdXNlIHRoZSBjdXJyZW50IHJ1biBpbmZvcm1hdGlv
biwgaWYgd2UgaGF2ZSBpdAogICAgIGlmIChtX3Bvc2l0aW9uTm9kZSkgewogICAgICAgICBpZiAo
bV9wb3NpdGlvbk9mZnNldEJhc2VOb2RlKSB7Ci0gICAgICAgICAgICBsb25nIGluZGV4ID0gbV9w
b3NpdGlvbk9mZnNldEJhc2VOb2RlLT5ub2RlSW5kZXgoKTsKKyAgICAgICAgICAgIGludCBpbmRl
eCA9IG1fcG9zaXRpb25PZmZzZXRCYXNlTm9kZS0+bm9kZUluZGV4KCk7CiAgICAgICAgICAgICBt
X3Bvc2l0aW9uU3RhcnRPZmZzZXQgKz0gaW5kZXg7CiAgICAgICAgICAgICBtX3Bvc2l0aW9uRW5k
T2Zmc2V0ICs9IGluZGV4OwogICAgICAgICAgICAgbV9wb3NpdGlvbk9mZnNldEJhc2VOb2RlID0g
MDsKQEAgLTQ5MiwyMSArNDkyLDIxIEBAIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6
OlNpbXBsaWYKICAgICBOb2RlSW1wbCAqZW5kTm9kZSA9IHItPmVuZENvbnRhaW5lcihleGNlcHRp
b24pOwogICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgIHJldHVybjsKLSAgICBsb25nIHN0YXJ0
T2Zmc2V0ID0gci0+c3RhcnRPZmZzZXQoZXhjZXB0aW9uKTsKKyAgICBpbnQgc3RhcnRPZmZzZXQg
PSByLT5zdGFydE9mZnNldChleGNlcHRpb24pOwogICAgIGlmIChleGNlcHRpb24pCiAgICAgICAg
IHJldHVybjsKLSAgICBsb25nIGVuZE9mZnNldCA9IHItPmVuZE9mZnNldChleGNlcHRpb24pOwor
ICAgIGludCBlbmRPZmZzZXQgPSByLT5lbmRPZmZzZXQoZXhjZXB0aW9uKTsKICAgICBpZiAoZXhj
ZXB0aW9uKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIW9mZnNldEluQ2hhcmFjdGVycyhz
dGFydE5vZGUtPm5vZGVUeXBlKCkpKSB7Ci0gICAgICAgIGlmIChzdGFydE9mZnNldCA+PSAwICYm
IHN0YXJ0T2Zmc2V0IDwgc3RhdGljX2Nhc3Q8bG9uZz4oc3RhcnROb2RlLT5jaGlsZE5vZGVDb3Vu
dCgpKSkgeworICAgICAgICBpZiAoc3RhcnRPZmZzZXQgPj0gMCAmJiBzdGFydE9mZnNldCA8IHN0
YXRpY19jYXN0PGludD4oc3RhcnROb2RlLT5jaGlsZE5vZGVDb3VudCgpKSkgewogICAgICAgICAg
ICAgc3RhcnROb2RlID0gc3RhcnROb2RlLT5jaGlsZE5vZGUoc3RhcnRPZmZzZXQpOwogICAgICAg
ICAgICAgc3RhcnRPZmZzZXQgPSAwOwogICAgICAgICB9CiAgICAgfQogICAgIGlmICghb2Zmc2V0
SW5DaGFyYWN0ZXJzKGVuZE5vZGUtPm5vZGVUeXBlKCkpKSB7Ci0gICAgICAgIGlmIChlbmRPZmZz
ZXQgPiAwICYmIGVuZE9mZnNldCA8PSBzdGF0aWNfY2FzdDxsb25nPihlbmROb2RlLT5jaGlsZE5v
ZGVDb3VudCgpKSkgeworICAgICAgICBpZiAoZW5kT2Zmc2V0ID4gMCAmJiBlbmRPZmZzZXQgPD0g
c3RhdGljX2Nhc3Q8aW50PihlbmROb2RlLT5jaGlsZE5vZGVDb3VudCgpKSkgewogICAgICAgICAg
ICAgZW5kTm9kZSA9IGVuZE5vZGUtPmNoaWxkTm9kZShlbmRPZmZzZXQgLSAxKTsKICAgICAgICAg
ICAgIGVuZE9mZnNldCA9IGVuZE5vZGUtPmhhc0NoaWxkTm9kZXMoKSA/IGVuZE5vZGUtPmNoaWxk
Tm9kZUNvdW50KCkgOiBlbmROb2RlLT5tYXhPZmZzZXQoKTsKICAgICAgICAgfQpAQCAtNjM0LDcg
KzYzNCw3IEBAIGJvb2wgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6aGEKIAogYm9v
bCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpoYW5kbGVSZXBsYWNlZEVsZW1lbnQo
KQogewotICAgIGxvbmcgb2Zmc2V0ID0gbV9ub2RlLT5ub2RlSW5kZXgoKTsKKyAgICBpbnQgb2Zm
c2V0ID0gbV9ub2RlLT5ub2RlSW5kZXgoKTsKIAogICAgIG1fcG9zaXRpb25Ob2RlID0gbV9ub2Rl
LT5wYXJlbnROb2RlKCk7CiAgICAgbV9wb3NpdGlvblN0YXJ0T2Zmc2V0ID0gb2Zmc2V0OwpAQCAt
NjgxLDcgKzY4MSw3IEBAIHZvaWQgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6ZXgK
ICAgICBoYW5kbGVOb25UZXh0Tm9kZSgpOwogfQogCi12b2lkIFNpbXBsaWZpZWRCYWNrd2FyZHNU
ZXh0SXRlcmF0b3I6OmVtaXRDaGFyYWN0ZXIoUUNoYXIgYywgTm9kZUltcGwgKm5vZGUsIGxvbmcg
c3RhcnRPZmZzZXQsIGxvbmcgZW5kT2Zmc2V0KQordm9pZCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4
dEl0ZXJhdG9yOjplbWl0Q2hhcmFjdGVyKFFDaGFyIGMsIE5vZGVJbXBsICpub2RlLCBpbnQgc3Rh
cnRPZmZzZXQsIGludCBlbmRPZmZzZXQpCiB7CiAgICAgbV9zaW5nbGVDaGFyYWN0ZXJCdWZmZXIg
PSBjOwogICAgIG1fcG9zaXRpb25Ob2RlID0gbm9kZTsKQEAgLTY5NCw3ICs2OTQsNyBAQCB2b2lk
IFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmVtCiAKIHZvaWQgU2ltcGxpZmllZEJh
Y2t3YXJkc1RleHRJdGVyYXRvcjo6ZW1pdE5ld2xpbmVGb3JCUk9yVGV4dCgpCiB7Ci0gICAgbG9u
ZyBvZmZzZXQ7CisgICAgaW50IG9mZnNldDsKICAgICAKICAgICBpZiAobV9sYXN0VGV4dE5vZGUp
IHsKICAgICAgICAgb2Zmc2V0ID0gbV9sYXN0VGV4dE5vZGUtPm5vZGVJbmRleCgpOwpAQCAtNzM3
LDcgKzczNyw3IEBAIFNoYXJlZFB0cjxSYW5nZUltcGw+IENoYXJhY3Rlckl0ZXJhdG9yOjoKICAg
ICAgICAgICAgIGludCBleGNlcHRpb24gPSAwOwogICAgICAgICAgICAgTm9kZUltcGwgKm4gPSBy
LT5zdGFydENvbnRhaW5lcihleGNlcHRpb24pOwogICAgICAgICAgICAgYXNzZXJ0KG4gPT0gci0+
ZW5kQ29udGFpbmVyKGV4Y2VwdGlvbikpOwotICAgICAgICAgICAgbG9uZyBvZmZzZXQgPSByLT5z
dGFydE9mZnNldChleGNlcHRpb24pICsgbV9ydW5PZmZzZXQ7CisgICAgICAgICAgICBpbnQgb2Zm
c2V0ID0gci0+c3RhcnRPZmZzZXQoZXhjZXB0aW9uKSArIG1fcnVuT2Zmc2V0OwogICAgICAgICAg
ICAgci0+c2V0U3RhcnQobiwgb2Zmc2V0LCBleGNlcHRpb24pOwogICAgICAgICAgICAgci0+c2V0
RW5kKG4sIG9mZnNldCArIDEsIGV4Y2VwdGlvbik7CiAgICAgICAgIH0KQEAgLTc0NSwxNCArNzQ1
LDE0IEBAIFNoYXJlZFB0cjxSYW5nZUltcGw+IENoYXJhY3Rlckl0ZXJhdG9yOjoKICAgICByZXR1
cm4gcjsKIH0KIAotdm9pZCBDaGFyYWN0ZXJJdGVyYXRvcjo6YWR2YW5jZShsb25nIGNvdW50KQor
dm9pZCBDaGFyYWN0ZXJJdGVyYXRvcjo6YWR2YW5jZShpbnQgY291bnQpCiB7CiAgICAgYXNzZXJ0
KCFhdEVuZCgpKTsKIAogICAgIG1fYXRCcmVhayA9IGZhbHNlOwogCiAgICAgLy8gZWFzeSBpZiB0
aGVyZSBpcyBlbm91Z2ggbGVmdCBpbiB0aGUgY3VycmVudCBtX3RleHRJdGVyYXRvciBydW4KLSAg
ICBsb25nIHJlbWFpbmluZyA9IG1fdGV4dEl0ZXJhdG9yLmxlbmd0aCgpIC0gbV9ydW5PZmZzZXQ7
CisgICAgaW50IHJlbWFpbmluZyA9IG1fdGV4dEl0ZXJhdG9yLmxlbmd0aCgpIC0gbV9ydW5PZmZz
ZXQ7CiAgICAgaWYgKGNvdW50IDwgcmVtYWluaW5nKSB7CiAgICAgICAgIG1fcnVuT2Zmc2V0ICs9
IGNvdW50OwogICAgICAgICBtX29mZnNldCArPSBjb3VudDsKQEAgLTc2NSw3ICs3NjUsNyBAQCB2
b2lkIENoYXJhY3Rlckl0ZXJhdG9yOjphZHZhbmNlKGxvbmcgY291CiAgICAgCiAgICAgLy8gbW92
ZSB0byBhIHN1YnNlcXVlbnQgbV90ZXh0SXRlcmF0b3IgcnVuCiAgICAgZm9yIChtX3RleHRJdGVy
YXRvci5hZHZhbmNlKCk7ICFhdEVuZCgpOyBtX3RleHRJdGVyYXRvci5hZHZhbmNlKCkpIHsKLSAg
ICAgICAgbG9uZyBydW5MZW5ndGggPSBtX3RleHRJdGVyYXRvci5sZW5ndGgoKTsKKyAgICAgICAg
aW50IHJ1bkxlbmd0aCA9IG1fdGV4dEl0ZXJhdG9yLmxlbmd0aCgpOwogICAgICAgICBpZiAocnVu
TGVuZ3RoID09IDApIHsKICAgICAgICAgICAgIG1fYXRCcmVhayA9IHRydWU7CiAgICAgICAgIH0g
ZWxzZSB7CkBAIC03ODcsMTIgKzc4NywxMiBAQCB2b2lkIENoYXJhY3Rlckl0ZXJhdG9yOjphZHZh
bmNlKGxvbmcgY291CiAgICAgbV9ydW5PZmZzZXQgPSAwOwogfQogCi1RU3RyaW5nIENoYXJhY3Rl
ckl0ZXJhdG9yOjpzdHJpbmcobG9uZyBudW1DaGFycykKK1FTdHJpbmcgQ2hhcmFjdGVySXRlcmF0
b3I6OnN0cmluZyhpbnQgbnVtQ2hhcnMpCiB7CiAgICAgUVN0cmluZyByZXN1bHQ7CiAgICAgcmVz
dWx0LnJlc2VydmUobnVtQ2hhcnMpOwogICAgIHdoaWxlIChudW1DaGFycyA+IDAgJiYgIWF0RW5k
KCkpIHsKLSAgICAgICAgbG9uZyBydW5TaXplID0ga01pbihudW1DaGFycywgbGVuZ3RoKCkpOwor
ICAgICAgICBpbnQgcnVuU2l6ZSA9IGtNaW4obnVtQ2hhcnMsIGxlbmd0aCgpKTsKICAgICAgICAg
cmVzdWx0LmFwcGVuZChjaGFyYWN0ZXJzKCksIHJ1blNpemUpOwogICAgICAgICBudW1DaGFycyAt
PSBydW5TaXplOwogICAgICAgICBhZHZhbmNlKHJ1blNpemUpOwpAQCAtODc0LDcgKzg3NCw3IEBA
IHZvaWQgV29yZEF3YXJlSXRlcmF0b3I6OmFkdmFuY2UoKQogICAgIH0KIH0KIAotbG9uZyBXb3Jk
QXdhcmVJdGVyYXRvcjo6bGVuZ3RoKCkgY29uc3QKK2ludCBXb3JkQXdhcmVJdGVyYXRvcjo6bGVu
Z3RoKCkgY29uc3QKIHsKICAgICBpZiAoIW1fYnVmZmVyLmlzRW1wdHkoKSkgewogICAgICAgICBy
ZXR1cm4gbV9idWZmZXIubGVuZ3RoKCk7CkBAIC05MjgsMjAgKzkyOCwyMCBAQCB2b2lkIENpcmN1
bGFyU2VhcmNoQnVmZmVyOjphcHBlbmQoY29uc3QgCiAvLyBUaGlzIGZ1bmN0aW9uIGNhbiBvbmx5
IGJlIHVzZWQgd2hlbiB0aGUgYnVmZmVyIGlzIG5vdCB5ZXQgZnVsbCwKIC8vIGFuZCB3aGVuIHRo
ZW4gY291bnQgaXMgc21hbGwgZW5vdWdoIHRvIGZpdCBpbiB0aGUgYnVmZmVyLgogLy8gTm8gbmVl
ZCBmb3IgYSBtb3JlIGdlbmVyYWwgdmVyc2lvbiBmb3IgdGhlIHNlYXJjaCBhbGdvcml0aG0uCi12
b2lkIENpcmN1bGFyU2VhcmNoQnVmZmVyOjphcHBlbmQobG9uZyBjb3VudCwgY29uc3QgUUNoYXIg
KmNoYXJhY3RlcnMpCit2b2lkIENpcmN1bGFyU2VhcmNoQnVmZmVyOjphcHBlbmQoaW50IGNvdW50
LCBjb25zdCBRQ2hhciAqY2hhcmFjdGVycykKIHsKLSAgICBsb25nIHRhaWxTcGFjZSA9IG1fYnVm
ZmVyICsgbGVuZ3RoKCkgLSBtX2N1cnNvcjsKKyAgICBpbnQgdGFpbFNwYWNlID0gbV9idWZmZXIg
KyBsZW5ndGgoKSAtIG1fY3Vyc29yOwogCiAgICAgYXNzZXJ0KCFtX2J1ZmZlckZ1bGwpOwogICAg
IGFzc2VydChjb3VudCA8PSB0YWlsU3BhY2UpOwogCiAgICAgaWYgKG1faXNDYXNlU2Vuc2l0aXZl
KSB7Ci0gICAgICAgIGZvciAobG9uZyBpID0gMDsgaSAhPSBjb3VudDsgKytpKSB7CisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpICE9IGNvdW50OyArK2kpIHsKICAgICAgICAgICAgIFFDaGFyIGMg
PSBjaGFyYWN0ZXJzW2ldOwogICAgICAgICAgICAgbV9jdXJzb3JbaV0gPSBjLnVuaWNvZGUoKSA9
PSBub25CcmVha2luZ1NwYWNlID8gJyAnIDogYy51bmljb2RlKCk7CiAgICAgICAgIH0KICAgICB9
IGVsc2UgewotICAgICAgICBmb3IgKGxvbmcgaSA9IDA7IGkgIT0gY291bnQ7ICsraSkgeworICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSAhPSBjb3VudDsgKytpKSB7CiAgICAgICAgICAgICBRQ2hh
ciBjID0gY2hhcmFjdGVyc1tpXTsKICAgICAgICAgICAgIG1fY3Vyc29yW2ldID0gYy51bmljb2Rl
KCkgPT0gbm9uQnJlYWtpbmdTcGFjZSA/ICcgJyA6IGMubG93ZXIoKS51bmljb2RlKCk7CiAgICAg
ICAgIH0KQEAgLTk1NCw3ICs5NTQsNyBAQCB2b2lkIENpcmN1bGFyU2VhcmNoQnVmZmVyOjphcHBl
bmQobG9uZyBjCiAgICAgfQogfQogCi1sb25nIENpcmN1bGFyU2VhcmNoQnVmZmVyOjpuZWVkZWRD
aGFyYWN0ZXJzKCkgY29uc3QKK2ludCBDaXJjdWxhclNlYXJjaEJ1ZmZlcjo6bmVlZGVkQ2hhcmFj
dGVycygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fYnVmZmVyRnVsbCA/IDAgOiBtX2J1ZmZlciAr
IGxlbmd0aCgpIC0gbV9jdXJzb3I7CiB9CkBAIC05NjMsMzYgKzk2MywzNiBAQCBib29sIENpcmN1
bGFyU2VhcmNoQnVmZmVyOjppc01hdGNoKCkgY29uCiB7CiAgICAgYXNzZXJ0KG1fYnVmZmVyRnVs
bCk7CiAKLSAgICBsb25nIGhlYWRTcGFjZSA9IG1fY3Vyc29yIC0gbV9idWZmZXI7Ci0gICAgbG9u
ZyB0YWlsU3BhY2UgPSBsZW5ndGgoKSAtIGhlYWRTcGFjZTsKKyAgICBpbnQgaGVhZFNwYWNlID0g
bV9jdXJzb3IgLSBtX2J1ZmZlcjsKKyAgICBpbnQgdGFpbFNwYWNlID0gbGVuZ3RoKCkgLSBoZWFk
U3BhY2U7CiAgICAgcmV0dXJuIG1lbWNtcChtX2N1cnNvciwgbV90YXJnZXQudW5pY29kZSgpLCB0
YWlsU3BhY2UgKiBzaXplb2YoUUNoYXIpKSA9PSAwCiAgICAgICAgICYmIG1lbWNtcChtX2J1ZmZl
ciwgbV90YXJnZXQudW5pY29kZSgpICsgdGFpbFNwYWNlLCBoZWFkU3BhY2UgKiBzaXplb2YoUUNo
YXIpKSA9PSAwOwogfQogCi1sb25nIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoY29uc3QgUmFu
Z2VJbXBsICpyKQoraW50IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoY29uc3QgUmFuZ2VJbXBs
ICpyKQogewogICAgIC8vIEFsbG9jYXRlIHN0cmluZyBhdCB0aGUgcmlnaHQgc2l6ZSwgcmF0aGVy
IHRoYW4gYnVpbGRpbmcgaXQgdXAgYnkgc3VjY2Vzc2l2ZSBhcHBlbmQgY2FsbHMuCi0gICAgbG9u
ZyBsZW5ndGggPSAwOworICAgIGludCBsZW5ndGggPSAwOwogICAgIGZvciAoVGV4dEl0ZXJhdG9y
IGl0KHIpOyAhaXQuYXRFbmQoKTsgaXQuYWR2YW5jZSgpKSB7CiAgICAgICAgIGxlbmd0aCArPSBp
dC5sZW5ndGgoKTsKICAgICB9CiAgICAgcmV0dXJuIGxlbmd0aDsKIH0KIAotUmFuZ2VJbXBsICpU
ZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKERvY3VtZW50SW1wbCAqZG9j
LCBsb25nIHJhbmdlTG9jYXRpb24sIGxvbmcgcmFuZ2VMZW5ndGgpCitSYW5nZUltcGwgKlRleHRJ
dGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoRG9jdW1lbnRJbXBsICpkb2MsIGlu
dCByYW5nZUxvY2F0aW9uLCBpbnQgcmFuZ2VMZW5ndGgpCiB7CiAgICAgUmFuZ2VJbXBsICpyZXN1
bHRSYW5nZSA9IGRvYy0+Y3JlYXRlUmFuZ2UoKTsKIAotICAgIGxvbmcgZG9jVGV4dFBvc2l0aW9u
ID0gMDsKLSAgICBsb25nIHJhbmdlRW5kID0gcmFuZ2VMb2NhdGlvbiArIHJhbmdlTGVuZ3RoOwor
ICAgIGludCBkb2NUZXh0UG9zaXRpb24gPSAwOworICAgIGludCByYW5nZUVuZCA9IHJhbmdlTG9j
YXRpb24gKyByYW5nZUxlbmd0aDsKIAogICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0KHJhbmdlT2ZD
b250ZW50cyhkb2MpLmdldCgpKTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFuY2UoKSkgewotICAgICAg
ICBsb25nIGxlbiA9IGl0Lmxlbmd0aCgpOworICAgICAgICBpbnQgbGVuID0gaXQubGVuZ3RoKCk7
CiAgICAgICAgIGlmIChyYW5nZUxvY2F0aW9uID49IGRvY1RleHRQb3NpdGlvbiAmJiByYW5nZUxv
Y2F0aW9uIDw9IGRvY1RleHRQb3NpdGlvbiArIGxlbikgewogICAgICAgICAgICAgU2hhcmVkUHRy
PFJhbmdlSW1wbD4gdGV4dFJ1blJhbmdlID0gaXQucmFuZ2UoKTsKICAgICAgICAgICAgIGludCBl
eGNlcHRpb24gPSAwOwogICAgICAgICAgICAgaWYgKHRleHRSdW5SYW5nZS0+c3RhcnRDb250YWlu
ZXIoZXhjZXB0aW9uKS0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgbG9uZyBvZmZz
ZXQgPSByYW5nZUxvY2F0aW9uIC0gZG9jVGV4dFBvc2l0aW9uOworICAgICAgICAgICAgICAgIGlu
dCBvZmZzZXQgPSByYW5nZUxvY2F0aW9uIC0gZG9jVGV4dFBvc2l0aW9uOwogICAgICAgICAgICAg
ICAgIHJlc3VsdFJhbmdlLT5zZXRTdGFydCh0ZXh0UnVuUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGV4
Y2VwdGlvbiksIG9mZnNldCArIHRleHRSdW5SYW5nZS0+c3RhcnRPZmZzZXQoZXhjZXB0aW9uKSwg
ZXhjZXB0aW9uKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKHJh
bmdlTG9jYXRpb24gPT0gZG9jVGV4dFBvc2l0aW9uKSB7CkBAIC0xMDA2LDcgKzEwMDYsNyBAQCBS
YW5nZUltcGwgKlRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpCiAgICAgICAgICAgICBTaGFy
ZWRQdHI8UmFuZ2VJbXBsPiB0ZXh0UnVuUmFuZ2UgPSBpdC5yYW5nZSgpOwogICAgICAgICAgICAg
aW50IGV4Y2VwdGlvbiA9IDA7CiAgICAgICAgICAgICBpZiAodGV4dFJ1blJhbmdlLT5zdGFydENv
bnRhaW5lcihleGNlcHRpb24pLT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgICAgICAgICBsb25n
IG9mZnNldCA9IHJhbmdlRW5kIC0gZG9jVGV4dFBvc2l0aW9uOworICAgICAgICAgICAgICAgIGlu
dCBvZmZzZXQgPSByYW5nZUVuZCAtIGRvY1RleHRQb3NpdGlvbjsKICAgICAgICAgICAgICAgICBy
ZXN1bHRSYW5nZS0+c2V0RW5kKHRleHRSdW5SYW5nZS0+c3RhcnRDb250YWluZXIoZXhjZXB0aW9u
KSwgb2Zmc2V0ICsgdGV4dFJ1blJhbmdlLT5zdGFydE9mZnNldChleGNlcHRpb24pLCBleGNlcHRp
b24pOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAocmFuZ2VFbmQg
PT0gZG9jVGV4dFBvc2l0aW9uKSB7CkBAIC0xMDI4LDcgKzEwMjgsNyBAQCBSYW5nZUltcGwgKlRl
eHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpCiBRU3RyaW5nIHBsYWluVGV4dChjb25zdCBSYW5n
ZUltcGwgKnIpCiB7CiAgICAgLy8gQWxsb2NhdGUgc3RyaW5nIGF0IHRoZSByaWdodCBzaXplLCBy
YXRoZXIgdGhhbiBidWlsZGluZyBpdCB1cCBieSBzdWNjZXNzaXZlIGFwcGVuZCBjYWxscy4KLSAg
ICBsb25nIGxlbmd0aCA9IDA7CisgICAgaW50IGxlbmd0aCA9IDA7CiAgICAgZm9yIChUZXh0SXRl
cmF0b3IgaXQocik7ICFpdC5hdEVuZCgpOyBpdC5hZHZhbmNlKCkpIHsKICAgICAgICAgbGVuZ3Ro
ICs9IGl0Lmxlbmd0aCgpOwogICAgIH0KQEAgLTEwNjIsMTUgKzEwNjIsMTUgQEAgU2hhcmVkUHRy
PFJhbmdlSW1wbD4gZmluZFBsYWluVGV4dChjb25zdAogICAgICAgICBDaGFyYWN0ZXJJdGVyYXRv
ciBpdChyKTsKICAgICAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgICAgIC8vIEZpbGwgdGhlIGJ1
ZmZlci4KLSAgICAgICAgICAgIHdoaWxlIChsb25nIG5lZWRlZCA9IGJ1ZmZlci5uZWVkZWRDaGFy
YWN0ZXJzKCkpIHsKKyAgICAgICAgICAgIHdoaWxlIChpbnQgbmVlZGVkID0gYnVmZmVyLm5lZWRl
ZENoYXJhY3RlcnMoKSkgewogICAgICAgICAgICAgICAgIGlmIChpdC5hdEJyZWFrKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKGl0LmF0RW5kKCkpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGdvdG8gZG9uZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICBidWZmZXIuY2xlYXIoKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbG9u
ZyBhdmFpbGFibGUgPSBpdC5sZW5ndGgoKTsKLSAgICAgICAgICAgICAgICBsb25nIHJ1bkxlbmd0
aCA9IGtNaW4obmVlZGVkLCBhdmFpbGFibGUpOworICAgICAgICAgICAgICAgIGludCBhdmFpbGFi
bGUgPSBpdC5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBpbnQgcnVuTGVuZ3RoID0ga01pbihu
ZWVkZWQsIGF2YWlsYWJsZSk7CiAgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChydW5MZW5n
dGgsIGl0LmNoYXJhY3RlcnMoKSk7CiAgICAgICAgICAgICAgICAgaXQuYWR2YW5jZShydW5MZW5n
dGgpOwogICAgICAgICAgICAgfQpJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0aW5nL3Zpc2libGVf
dGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRp
bmcvdmlzaWJsZV90ZXh0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTYKZGlmZiAtcCAtdSAt
cjEuMTYgV2ViQ29yZS9raHRtbC9lZGl0aW5nL3Zpc2libGVfdGV4dC5oCi0tLSBXZWJDb3JlL2to
dG1sL2VkaXRpbmcvdmlzaWJsZV90ZXh0LmgJMTQgSnVsIDIwMDUgMjA6NTE6NTUgLTAwMDAJMS4x
NgorKysgV2ViQ29yZS9raHRtbC9lZGl0aW5nL3Zpc2libGVfdGV4dC5oCTIxIEF1ZyAyMDA1IDA1
OjI4OjAzIC0wMDAwCkBAIC02OCwxMyArNjgsMTMgQEAgcHVibGljOgogICAgIGJvb2wgYXRFbmQo
KSBjb25zdCB7IHJldHVybiAhbV9wb3NpdGlvbk5vZGU7IH0KICAgICB2b2lkIGFkdmFuY2UoKTsK
ICAgICAKLSAgICBsb25nIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dExlbmd0aDsgfQor
ICAgIGludCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3RleHRMZW5ndGg7IH0KICAgICBjb25z
dCBRQ2hhciAqY2hhcmFjdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dENoYXJhY3RlcnM7IH0K
ICAgICAKICAgICBTaGFyZWRQdHI8RE9NOjpSYW5nZUltcGw+IHJhbmdlKCkgY29uc3Q7CiAgICAg
IAotICAgIHN0YXRpYyBsb25nIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoY29uc3QgRE9NOjpS
YW5nZUltcGwgKnIpOwotICAgIHN0YXRpYyBET006OlJhbmdlSW1wbCAqVGV4dEl0ZXJhdG9yOjpy
YW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChET006OkRvY3VtZW50SW1wbCAqZG9jLCBsb25nIHJh
bmdlTG9jYXRpb24sIGxvbmcgcmFuZ2VMZW5ndGgpOworICAgIHN0YXRpYyBpbnQgVGV4dEl0ZXJh
dG9yOjpyYW5nZUxlbmd0aChjb25zdCBET006OlJhbmdlSW1wbCAqcik7CisgICAgc3RhdGljIERP
TTo6UmFuZ2VJbXBsICpUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKERP
TTo6RG9jdW1lbnRJbXBsICpkb2MsIGludCByYW5nZUxvY2F0aW9uLCBpbnQgcmFuZ2VMZW5ndGgp
OwogICAgIAogcHJpdmF0ZToKICAgICB2b2lkIGV4aXROb2RlKCk7CkBAIC04MiwyNyArODIsMjcg
QEAgcHJpdmF0ZToKICAgICBib29sIGhhbmRsZVJlcGxhY2VkRWxlbWVudCgpOwogICAgIGJvb2wg
aGFuZGxlTm9uVGV4dE5vZGUoKTsKICAgICB2b2lkIGhhbmRsZVRleHRCb3goKTsKLSAgICB2b2lk
IGVtaXRDaGFyYWN0ZXIoUUNoYXIsIERPTTo6Tm9kZUltcGwgKnRleHROb2RlLCBET006Ok5vZGVJ
bXBsICpvZmZzZXRCYXNlTm9kZSwgbG9uZyB0ZXh0U3RhcnRPZmZzZXQsIGxvbmcgdGV4dEVuZE9m
ZnNldCk7CisgICAgdm9pZCBlbWl0Q2hhcmFjdGVyKFFDaGFyLCBET006Ok5vZGVJbXBsICp0ZXh0
Tm9kZSwgRE9NOjpOb2RlSW1wbCAqb2Zmc2V0QmFzZU5vZGUsIGludCB0ZXh0U3RhcnRPZmZzZXQs
IGludCB0ZXh0RW5kT2Zmc2V0KTsKICAgICAKICAgICAvLyBDdXJyZW50IHBvc2l0aW9uLCBub3Qg
bmVjZXNzYXJpbHkgb2YgdGhlIHRleHQgYmVpbmcgcmV0dXJuZWQsIGJ1dCBwb3NpdGlvbgogICAg
IC8vIGFzIHdlIHdhbGsgdGhyb3VnaCB0aGUgRE9NIHRyZWUuCiAgICAgRE9NOjpOb2RlSW1wbCAq
bV9ub2RlOwotICAgIGxvbmcgbV9vZmZzZXQ7CisgICAgaW50IG1fb2Zmc2V0OwogICAgIGJvb2wg
bV9oYW5kbGVkTm9kZTsKICAgICBib29sIG1faGFuZGxlZENoaWxkcmVuOwogICAgIAogICAgIC8v
IEVuZCBvZiB0aGUgcmFuZ2UuCiAgICAgRE9NOjpOb2RlSW1wbCAqbV9lbmRDb250YWluZXI7Ci0g
ICAgbG9uZyBtX2VuZE9mZnNldDsKKyAgICBpbnQgbV9lbmRPZmZzZXQ7CiAgICAgRE9NOjpOb2Rl
SW1wbCAqbV9wYXN0RW5kTm9kZTsKICAgICAKICAgICAvLyBUaGUgY3VycmVudCB0ZXh0IGFuZCBp
dHMgcG9zaXRpb24sIGluIHRoZSBmb3JtIHRvIGJlIHJldHVybmVkIGZyb20gdGhlIGl0ZXJhdG9y
LgogICAgIERPTTo6Tm9kZUltcGwgKm1fcG9zaXRpb25Ob2RlOwogICAgIG11dGFibGUgRE9NOjpO
b2RlSW1wbCAqbV9wb3NpdGlvbk9mZnNldEJhc2VOb2RlOwotICAgIG11dGFibGUgbG9uZyBtX3Bv
c2l0aW9uU3RhcnRPZmZzZXQ7Ci0gICAgbXV0YWJsZSBsb25nIG1fcG9zaXRpb25FbmRPZmZzZXQ7
CisgICAgbXV0YWJsZSBpbnQgbV9wb3NpdGlvblN0YXJ0T2Zmc2V0OworICAgIG11dGFibGUgaW50
IG1fcG9zaXRpb25FbmRPZmZzZXQ7CiAgICAgY29uc3QgUUNoYXIgKm1fdGV4dENoYXJhY3RlcnM7
Ci0gICAgbG9uZyBtX3RleHRMZW5ndGg7CisgICAgaW50IG1fdGV4dExlbmd0aDsKICAgICAKICAg
ICAvLyBVc2VkIHdoZW4gdGhlcmUgaXMgc3RpbGwgc29tZSBwZW5kaW5nIHRleHQgZnJvbSB0aGUg
Y3VycmVudCBub2RlOyB3aGVuIHRoZXNlCiAgICAgLy8gYXJlIGZhbHNlIGFuZCAwLCB3ZSBnbyBi
YWNrIHRvIG5vcm1hbCBpdGVyYXRpbmcuCkBAIC0xMzMsNyArMTMzLDcgQEAgcHVibGljOgogICAg
IGJvb2wgYXRFbmQoKSBjb25zdCB7IHJldHVybiAhbV9wb3NpdGlvbk5vZGU7IH0KICAgICB2b2lk
IGFkdmFuY2UoKTsKICAgICAKLSAgICBsb25nIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4
dExlbmd0aDsgfQorICAgIGludCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3RleHRMZW5ndGg7
IH0KICAgICBjb25zdCBRQ2hhciAqY2hhcmFjdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dENo
YXJhY3RlcnM7IH0KICAgICAKICAgICBTaGFyZWRQdHI8RE9NOjpSYW5nZUltcGw+IHJhbmdlKCkg
Y29uc3Q7CkBAIC0xNDMsMjYgKzE0MywyNiBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFuZGxlVGV4
dE5vZGUoKTsKICAgICBib29sIGhhbmRsZVJlcGxhY2VkRWxlbWVudCgpOwogICAgIGJvb2wgaGFu
ZGxlTm9uVGV4dE5vZGUoKTsKLSAgICB2b2lkIGVtaXRDaGFyYWN0ZXIoUUNoYXIsIERPTTo6Tm9k
ZUltcGwgKk5vZGUsIGxvbmcgc3RhcnRPZmZzZXQsIGxvbmcgZW5kT2Zmc2V0KTsKKyAgICB2b2lk
IGVtaXRDaGFyYWN0ZXIoUUNoYXIsIERPTTo6Tm9kZUltcGwgKk5vZGUsIGludCBzdGFydE9mZnNl
dCwgaW50IGVuZE9mZnNldCk7CiAgICAgdm9pZCBlbWl0TmV3bGluZUZvckJST3JUZXh0KCk7CiAg
ICAgCiAgICAgLy8gQ3VycmVudCBwb3NpdGlvbiwgbm90IG5lY2Vzc2FyaWx5IG9mIHRoZSB0ZXh0
IGJlaW5nIHJldHVybmVkLCBidXQgcG9zaXRpb24KICAgICAvLyBhcyB3ZSB3YWxrIHRocm91Z2gg
dGhlIERPTSB0cmVlLgogICAgIERPTTo6Tm9kZUltcGwgKm1fbm9kZTsKLSAgICBsb25nIG1fb2Zm
c2V0OworICAgIGludCBtX29mZnNldDsKICAgICBib29sIG1faGFuZGxlZE5vZGU7CiAgICAgYm9v
bCBtX2hhbmRsZWRDaGlsZHJlbjsKICAgICAKICAgICAvLyBFbmQgb2YgdGhlIHJhbmdlLgogICAg
IERPTTo6Tm9kZUltcGwgKm1fc3RhcnROb2RlOwotICAgIGxvbmcgbV9zdGFydE9mZnNldDsKKyAg
ICBpbnQgbV9zdGFydE9mZnNldDsKICAgICAKICAgICAvLyBUaGUgY3VycmVudCB0ZXh0IGFuZCBp
dHMgcG9zaXRpb24sIGluIHRoZSBmb3JtIHRvIGJlIHJldHVybmVkIGZyb20gdGhlIGl0ZXJhdG9y
LgogICAgIERPTTo6Tm9kZUltcGwgKm1fcG9zaXRpb25Ob2RlOwotICAgIGxvbmcgbV9wb3NpdGlv
blN0YXJ0T2Zmc2V0OwotICAgIGxvbmcgbV9wb3NpdGlvbkVuZE9mZnNldDsKKyAgICBpbnQgbV9w
b3NpdGlvblN0YXJ0T2Zmc2V0OworICAgIGludCBtX3Bvc2l0aW9uRW5kT2Zmc2V0OwogICAgIGNv
bnN0IFFDaGFyICptX3RleHRDaGFyYWN0ZXJzOwotICAgIGxvbmcgbV90ZXh0TGVuZ3RoOworICAg
IGludCBtX3RleHRMZW5ndGg7CiAKICAgICAvLyBVc2VkIHRvIGRvIHRoZSB3aGl0ZXNwYWNlIGxv
Z2ljLgogICAgIERPTTo6Tm9kZUltcGwgKm1fbGFzdFRleHROb2RlOyAgICAKQEAgLTE3OSwyMSAr
MTc5LDIxIEBAIHB1YmxpYzoKICAgICBDaGFyYWN0ZXJJdGVyYXRvcigpOwogICAgIGV4cGxpY2l0
IENoYXJhY3Rlckl0ZXJhdG9yKGNvbnN0IERPTTo6UmFuZ2VJbXBsICpyKTsKICAgICAKLSAgICB2
b2lkIGFkdmFuY2UobG9uZyBudW1DaGFyYWN0ZXJzKTsKKyAgICB2b2lkIGFkdmFuY2UoaW50IG51
bUNoYXJhY3RlcnMpOwogICAgIAogICAgIGJvb2wgYXRCcmVhaygpIGNvbnN0IHsgcmV0dXJuIG1f
YXRCcmVhazsgfQogICAgIGJvb2wgYXRFbmQoKSBjb25zdCB7IHJldHVybiBtX3RleHRJdGVyYXRv
ci5hdEVuZCgpOyB9CiAgICAgCi0gICAgbG9uZyBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3Rl
eHRJdGVyYXRvci5sZW5ndGgoKSAtIG1fcnVuT2Zmc2V0OyB9CisgICAgaW50IGxlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fdGV4dEl0ZXJhdG9yLmxlbmd0aCgpIC0gbV9ydW5PZmZzZXQ7IH0KICAg
ICBjb25zdCBRQ2hhciAqY2hhcmFjdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dEl0ZXJhdG9y
LmNoYXJhY3RlcnMoKSArIG1fcnVuT2Zmc2V0OyB9Ci0gICAgUVN0cmluZyBzdHJpbmcobG9uZyBu
dW1DaGFycyk7CisgICAgUVN0cmluZyBzdHJpbmcoaW50IG51bUNoYXJzKTsKICAgICAKLSAgICBs
b25nIGNoYXJhY3Rlck9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgaW50
IGNoYXJhY3Rlck9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CiAgICAgU2hhcmVk
UHRyPERPTTo6UmFuZ2VJbXBsPiByYW5nZSgpIGNvbnN0OwogICAgICAgICAKIHByaXZhdGU6Ci0g
ICAgbG9uZyBtX29mZnNldDsKLSAgICBsb25nIG1fcnVuT2Zmc2V0OworICAgIGludCBtX29mZnNl
dDsKKyAgICBpbnQgbV9ydW5PZmZzZXQ7CiAgICAgYm9vbCBtX2F0QnJlYWs7CiAgICAgCiAgICAg
VGV4dEl0ZXJhdG9yIG1fdGV4dEl0ZXJhdG9yOwpAQCAtMjA5LDcgKzIwOSw3IEBAIHB1YmxpYzoK
ICAgICBib29sIGF0RW5kKCkgY29uc3QgeyByZXR1cm4gIW1fZGlkTG9va0FoZWFkICYmIG1fdGV4
dEl0ZXJhdG9yLmF0RW5kKCk7IH0KICAgICB2b2lkIGFkdmFuY2UoKTsKICAgICAKLSAgICBsb25n
IGxlbmd0aCgpIGNvbnN0OworICAgIGludCBsZW5ndGgoKSBjb25zdDsKICAgICBjb25zdCBRQ2hh
ciAqY2hhcmFjdGVycygpIGNvbnN0OwogICAgIAogICAgIC8vIFJhbmdlIG9mIHRoZSB0ZXh0IHdl
J3JlIGN1cnJlbnRseSByZXR1cm5pbmcKQEAgLTIxOCw3ICsyMTgsNyBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIC8vIHRleHQgZnJvbSB0aGUgcHJldmlvdXMgY2h1bmsgZnJvbSB0aGUgdGV4dEl0
ZXJhdG9yCiAgICAgY29uc3QgUUNoYXIgKm1fcHJldmlvdXNUZXh0OwotICAgIGxvbmcgbV9wcmV2
aW91c0xlbmd0aDsKKyAgICBpbnQgbV9wcmV2aW91c0xlbmd0aDsKIAogICAgIC8vIG1hbnkgY2h1
bmtzIGZyb20gdGV4dEl0ZXJhdG9yIGNvbmNhdGVuYXRlZAogICAgIFFTdHJpbmcgbV9idWZmZXI7
CkluZGV4OiBXZWJDb3JlL2todG1sL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy92aXNpYmxlX3VuaXRz
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNwpkaWZmIC1wIC11IC1yMS4zNyBXZWJDb3Jl
L2todG1sL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWRpdGlu
Zy92aXNpYmxlX3VuaXRzLmNwcAkzMCBKdWwgMjAwNSAwMjozMzoxNSAtMDAwMAkxLjM3CisrKyBX
ZWJDb3JlL2todG1sL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAJMjEgQXVnIDIwMDUgMDU6Mjg6
MDQgLTAwMDAKQEAgLTMwMiw3ICszMDIsNyBAQCBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZkxpbmUo
Y29uc3QgVmlzaWJsCiAgICAgaWYgKCFzdGFydE5vZGUpCiAgICAgICAgIHJldHVybiBWaXNpYmxl
UG9zaXRpb24oKTsKIAotICAgIGxvbmcgc3RhcnRPZmZzZXQgPSAwOworICAgIGludCBzdGFydE9m
ZnNldCA9IDA7CiAgICAgaWYgKHN0YXJ0Qm94LT5pc0lubGluZVRleHRCb3goKSkgewogICAgICAg
ICBJbmxpbmVUZXh0Qm94ICpzdGFydFRleHRCb3ggPSBzdGF0aWNfY2FzdDxJbmxpbmVUZXh0Qm94
ICo+KHN0YXJ0Qm94KTsKICAgICAgICAgc3RhcnRPZmZzZXQgPSBzdGFydFRleHRCb3gtPm1fc3Rh
cnQ7CkBAIC0zMzIsNyArMzMyLDcgQEAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mTGluZShjb25zdCBW
aXNpYmxlUAogICAgIGlmICghZW5kTm9kZSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
bigpOwogCi0gICAgbG9uZyBlbmRPZmZzZXQgPSAxOworICAgIGludCBlbmRPZmZzZXQgPSAxOwog
ICAgIGlmIChlbmROb2RlLT5oYXNUYWdOYW1lKGJyVGFnKSkgewogICAgICAgICBlbmRPZmZzZXQg
PSAwOwogICAgIH0gZWxzZSBpZiAoZW5kQm94LT5pc0lubGluZVRleHRCb3goKSkgewpAQCAtNTU1
LDcgKzU1NSw3IEBAIFZpc2libGVQb3NpdGlvbiBzdGFydE9mUGFyYWdyYXBoKGNvbnN0IFYKICAg
ICBOb2RlSW1wbCAqc3RhcnRCbG9jayA9IHN0YXJ0Tm9kZS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxl
bWVudCgpOwogCiAgICAgTm9kZUltcGwgKm5vZGUgPSBzdGFydE5vZGU7Ci0gICAgbG9uZyBvZmZz
ZXQgPSBwLm9mZnNldCgpOworICAgIGludCBvZmZzZXQgPSBwLm9mZnNldCgpOwogCiAgICAgZm9y
IChOb2RlSW1wbCAqbiA9IHN0YXJ0Tm9kZTsgbjsgbiA9IG4tPnRyYXZlcnNlUHJldmlvdXNOb2Rl
UG9zdE9yZGVyKHN0YXJ0QmxvY2spKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCAqciA9IG4tPnJl
bmRlcmVyKCk7CkBAIC01NjksMTAgKzU2OSwxMCBAQCBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlBh
cmFncmFwaChjb25zdCBWCiAgICAgICAgIGlmIChyLT5pc1RleHQoKSkgewogICAgICAgICAgICAg
aWYgKHN0eWxlLT53aGl0ZVNwYWNlKCkgPT0gUFJFKSB7CiAgICAgICAgICAgICAgICAgUUNoYXIg
KnRleHQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KHIpLT50ZXh0KCk7Ci0gICAgICAgICAg
ICAgICAgbG9uZyBpID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihyKS0+bGVuZ3RoKCk7Ci0g
ICAgICAgICAgICAgICAgbG9uZyBvID0gb2Zmc2V0OworICAgICAgICAgICAgICAgIGludCBpID0g
c3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihyKS0+bGVuZ3RoKCk7CisgICAgICAgICAgICAgICAg
aW50IG8gPSBvZmZzZXQ7CiAgICAgICAgICAgICAgICAgaWYgKG4gPT0gc3RhcnROb2RlICYmIG8g
PCBpKQotICAgICAgICAgICAgICAgICAgICBpID0ga01heCgwTCwgbyk7CisgICAgICAgICAgICAg
ICAgICAgIGkgPSBrTWF4KDAsIG8pOwogICAgICAgICAgICAgICAgIHdoaWxlICgtLWkgPj0gMCkK
ICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRbaV0gPT0gJ1xuJykKICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obiwgaSArIDEsIERPV05TVFJFQU0pOwpA
QCAtNjAwLDcgKzYwMCw3IEBAIFZpc2libGVQb3NpdGlvbiBlbmRPZlBhcmFncmFwaChjb25zdCBW
aXMKICAgICBOb2RlSW1wbCAqc3RheUluc2lkZUJsb2NrID0gaW5jbHVkZUxpbmVCcmVhayA/IDAg
OiBzdGFydEJsb2NrOwogICAgIAogICAgIE5vZGVJbXBsICpub2RlID0gc3RhcnROb2RlOwotICAg
IGxvbmcgb2Zmc2V0ID0gcC5vZmZzZXQoKTsKKyAgICBpbnQgb2Zmc2V0ID0gcC5vZmZzZXQoKTsK
IAogICAgIGZvciAoTm9kZUltcGwgKm4gPSBzdGFydE5vZGU7IG47IG4gPSBuLT50cmF2ZXJzZU5l
eHROb2RlKHN0YXlJbnNpZGVCbG9jaykpIHsKICAgICAgICAgaWYgKG4tPmlzQ29udGVudEVkaXRh
YmxlKCkgIT0gc3RhcnROb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQpAQCAtNjI2LDEzICs2MjYs
MTMgQEAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mUGFyYWdyYXBoKGNvbnN0IFZpcwogICAgICAgICBp
ZiAoci0+aXNUZXh0KCkgJiYgci0+Y2FyZXRNYXhSZW5kZXJlZE9mZnNldCgpID4gMCkgewogICAg
ICAgICAgICAgaWYgKGluY2x1ZGVMaW5lQnJlYWsgJiYgIW4tPmlzQW5jZXN0b3Ioc3RhcnRCbG9j
aykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihuLCAwLCBET1dOU1RS
RUFNKTsKLSAgICAgICAgICAgIGxvbmcgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAq
PihyKS0+bGVuZ3RoKCk7CisgICAgICAgICAgICBpbnQgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8UmVu
ZGVyVGV4dCAqPihyKS0+bGVuZ3RoKCk7CiAgICAgICAgICAgICBpZiAoc3R5bGUtPndoaXRlU3Bh
Y2UoKSA9PSBQUkUpIHsKICAgICAgICAgICAgICAgICBRQ2hhciAqdGV4dCA9IHN0YXRpY19jYXN0
PFJlbmRlclRleHQgKj4ociktPnRleHQoKTsKLSAgICAgICAgICAgICAgICBsb25nIG8gPSAwOwor
ICAgICAgICAgICAgICAgIGludCBvID0gMDsKICAgICAgICAgICAgICAgICBpZiAobiA9PSBzdGFy
dE5vZGUgJiYgb2Zmc2V0IDwgbGVuZ3RoKQogICAgICAgICAgICAgICAgICAgICBvID0gb2Zmc2V0
OwotICAgICAgICAgICAgICAgIGZvciAobG9uZyBpID0gbzsgaSA8IGxlbmd0aDsgKytpKQorICAg
ICAgICAgICAgICAgIGZvciAoaW50IGkgPSBvOyBpIDwgbGVuZ3RoOyArK2kpCiAgICAgICAgICAg
ICAgICAgICAgIGlmICh0ZXh0W2ldID09ICdcbicpCiAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uKG4sIGkgKyBpbmNsdWRlTGluZUJyZWFrLCBET1dOU1RSRUFN
KTsKICAgICAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Jsb2NraW1w
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9o
dG1sX2Jsb2NraW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjMKZGlmZiAtcCAtdSAt
cjEuMjMgV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmNwcAotLS0gV2ViQ29yZS9r
aHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmNwcAkzMCBKdWwgMjAwNSAwMjozMzoxNyAtMDAwMAkx
LjIzCisrKyBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuY3BwCTIxIEF1ZyAyMDA1
IDA1OjI4OjA0IC0wMDAwCkBAIC0yOTMsMTIgKzI5MywxMiBAQCBIVE1MUHJlRWxlbWVudEltcGw6
OkhUTUxQcmVFbGVtZW50SW1wbChjCiB7CiB9CiAKLWxvbmcgSFRNTFByZUVsZW1lbnRJbXBsOjp3
aWR0aCgpIGNvbnN0CitpbnQgSFRNTFByZUVsZW1lbnRJbXBsOjp3aWR0aCgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh3aWR0aEF0dHIpLnRvSW50KCk7CiB9CiAKLXZvaWQgSFRN
TFByZUVsZW1lbnRJbXBsOjpzZXRXaWR0aChsb25nIHdpZHRoKQordm9pZCBIVE1MUHJlRWxlbWVu
dEltcGw6OnNldFdpZHRoKGludCB3aWR0aCkKIHsKICAgICBzZXRBdHRyaWJ1dGUod2lkdGhBdHRy
LCBRU3RyaW5nOjpudW1iZXIod2lkdGgpKTsKIH0KSW5kZXg6IFdlYkNvcmUva2h0bWwvaHRtbC9o
dG1sX2Jsb2NraW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMQpkaWZm
IC1wIC11IC1yMS4xMSBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuaAotLS0gV2Vi
Q29yZS9raHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmgJMTggSnVsIDIwMDUgMjE6NDQ6MjAgLTAw
MDAJMS4xMQorKysgV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmgJMjEgQXVnIDIw
MDUgMDU6Mjg6MDQgLTAwMDAKQEAgLTEzNiw4ICsxMzYsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3Rh
dHVzUmVxdWlyZWQ7IH0KICAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0
dXJuIDU7IH0KIAotICAgIGxvbmcgd2lkdGgoKSBjb25zdDsKLSAgICB2b2lkIHNldFdpZHRoKGxv
bmcgdyk7CisgICAgaW50IHdpZHRoKCkgY29uc3Q7CisgICAgdm9pZCBzZXRXaWR0aChpbnQgdyk7
CiB9OwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkluZGV4OiBXZWJDb3JlL2todG1sL2h0bWwvaHRt
bF9mb3JtaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xODUKZGlm
ZiAtcCAtdSAtcjEuMTg1IFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNwcAotLS0g
V2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZm9ybWltcGwuY3BwCTE0IEF1ZyAyMDA1IDA4OjA3OjIy
IC0wMDAwCTEuMTg1CisrKyBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5jcHAJMjEg
QXVnIDIwMDUgMDU6Mjg6MDcgLTAwMDAKQEAgLTE3Niw3ICsxNzYsNyBAQCB2b2lkIEhUTUxGb3Jt
RWxlbWVudEltcGw6OnJlbW92ZWRGcm9tRG9jCiAgICAgSFRNTEVsZW1lbnRJbXBsOjpyZW1vdmVk
RnJvbURvY3VtZW50KCk7CiB9CiAKLWxvbmcgSFRNTEZvcm1FbGVtZW50SW1wbDo6bGVuZ3RoKCkg
Y29uc3QKK2ludCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpsZW5ndGgoKSBjb25zdAogewogICAgIGlu
dCBsZW4gPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtRWxlbWVudHMuY291
bnQoKTsgKytpKQpAQCAtMTE3OSwxMiArMTE3OSwxMiBAQCBRU3RyaW5nIEhUTUxHZW5lcmljRm9y
bUVsZW1lbnRJbXBsOjpmaW5kCiAgICAgcmV0dXJuIFFTdHJpbmc6Om51bGw7CiB9CiAKLWxvbmcg
SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw6OnRhYkluZGV4KCkgY29uc3QKK2ludCBIVE1MR2Vu
ZXJpY0Zvcm1FbGVtZW50SW1wbDo6dGFiSW5kZXgoKSBjb25zdAogewogICAgIHJldHVybiBnZXRB
dHRyaWJ1dGUodGFiaW5kZXhBdHRyKS50b0ludCgpOwogfQogCi12b2lkIEhUTUxHZW5lcmljRm9y
bUVsZW1lbnRJbXBsOjpzZXRUYWJJbmRleChsb25nIHZhbHVlKQordm9pZCBIVE1MR2VuZXJpY0Zv
cm1FbGVtZW50SW1wbDo6c2V0VGFiSW5kZXgoaW50IHZhbHVlKQogewogICAgIHNldEF0dHJpYnV0
ZSh0YWJpbmRleEF0dHIsIFFTdHJpbmc6Om51bWJlcih2YWx1ZSkpOwogfQpAQCAtMTU2OSw3ICsx
NTY5LDcgQEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50SW1wbDo6Y2FuSGF2ZVNlbGVjdAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotbG9uZyBIVE1MSW5wdXRFbGVtZW50SW1wbDo6c2VsZWN0aW9uU3Rh
cnQoKQoraW50IEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpzZWxlY3Rpb25TdGFydCgpCiB7CiAgICAg
aWYgKCFtX3JlbmRlcikgcmV0dXJuIDA7CiAgICAgCkBAIC0xNTg2LDcgKzE1ODYsNyBAQCBsb25n
IEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpzZWxlY3Rpb25TdGFyCiAgICAgcmV0dXJuIDA7CiB9CiAK
LWxvbmcgSFRNTElucHV0RWxlbWVudEltcGw6OnNlbGVjdGlvbkVuZCgpCitpbnQgSFRNTElucHV0
RWxlbWVudEltcGw6OnNlbGVjdGlvbkVuZCgpCiB7CiAgICAgaWYgKCFtX3JlbmRlcikgcmV0dXJu
IDA7CiAgICAgCkBAIC0xNjAzLDcgKzE2MDMsNyBAQCBsb25nIEhUTUxJbnB1dEVsZW1lbnRJbXBs
OjpzZWxlY3Rpb25FbmQoCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgSFRNTElucHV0RWxlbWVu
dEltcGw6OnNldFNlbGVjdGlvblN0YXJ0KGxvbmcgc3RhcnQpCit2b2lkIEhUTUxJbnB1dEVsZW1l
bnRJbXBsOjpzZXRTZWxlY3Rpb25TdGFydChpbnQgc3RhcnQpCiB7CiAgICAgaWYgKCFtX3JlbmRl
cikgcmV0dXJuOwogICAgIApAQCAtMTYyMCw3ICsxNjIwLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVt
ZW50SW1wbDo6c2V0U2VsZWN0aW9uUwogICAgIH0KIH0KIAotdm9pZCBIVE1MSW5wdXRFbGVtZW50
SW1wbDo6c2V0U2VsZWN0aW9uRW5kKGxvbmcgZW5kKQordm9pZCBIVE1MSW5wdXRFbGVtZW50SW1w
bDo6c2V0U2VsZWN0aW9uRW5kKGludCBlbmQpCiB7CiAgICAgaWYgKCFtX3JlbmRlcikgcmV0dXJu
OwogICAgIApAQCAtMTY2Nyw3ICsxNjY3LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50SW1wbDo6
c2VsZWN0KCAgKQogICAgIH0KIH0KIAotdm9pZCBIVE1MSW5wdXRFbGVtZW50SW1wbDo6c2V0U2Vs
ZWN0aW9uUmFuZ2UobG9uZyBzdGFydCwgbG9uZyBlbmQpCit2b2lkIEhUTUxJbnB1dEVsZW1lbnRJ
bXBsOjpzZXRTZWxlY3Rpb25SYW5nZShpbnQgc3RhcnQsIGludCBlbmQpCiB7CiAgICAgaWYgKCFt
X3JlbmRlcikgcmV0dXJuOwogICAgIApAQCAtMjUwMCwxMiArMjUwMCwxMiBAQCB2b2lkIEhUTUxJ
bnB1dEVsZW1lbnRJbXBsOjpzZXRBbHQoY29uc3QgCiAgICAgc2V0QXR0cmlidXRlKGFsdEF0dHIs
IHZhbHVlKTsKIH0KIAotdm9pZCBIVE1MSW5wdXRFbGVtZW50SW1wbDo6c2V0TWF4TGVuZ3RoKGxv
bmcgX21heExlbmd0aCkKK3ZvaWQgSFRNTElucHV0RWxlbWVudEltcGw6OnNldE1heExlbmd0aChp
bnQgX21heExlbmd0aCkKIHsKICAgICBzZXRBdHRyaWJ1dGUobWF4bGVuZ3RoQXR0ciwgUVN0cmlu
Zzo6bnVtYmVyKF9tYXhMZW5ndGgpKTsKIH0KIAotdm9pZCBIVE1MSW5wdXRFbGVtZW50SW1wbDo6
c2V0U2l6ZSh1bnNpZ25lZCBsb25nIF9zaXplKQordm9pZCBIVE1MSW5wdXRFbGVtZW50SW1wbDo6
c2V0U2l6ZSh1bnNpZ25lZCBfc2l6ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUoc2l6ZUF0dHIsIFFT
dHJpbmc6Om51bWJlcihfc2l6ZSkpOwogfQpAQCAtMjc1Niw3ICsyNzU2LDcgQEAgRE9NU3RyaW5n
IEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6dHlwZSgpIAogICAgIHJldHVybiAobV9tdWx0aXBsZSA/
ICJzZWxlY3QtbXVsdGlwbGUiIDogInNlbGVjdC1vbmUiKTsKIH0KIAotbG9uZyBIVE1MU2VsZWN0
RWxlbWVudEltcGw6OnNlbGVjdGVkSW5kZXgoKSBjb25zdAoraW50IEhUTUxTZWxlY3RFbGVtZW50
SW1wbDo6c2VsZWN0ZWRJbmRleCgpIGNvbnN0CiB7CiAgICAgLy8gcmV0dXJuIHRoZSBudW1iZXIg
b2YgdGhlIGZpcnN0IG9wdGlvbiBzZWxlY3RlZAogICAgIHVpbnQgbyA9IDA7CkBAIC0yNzcyLDcg
KzI3NzIsNyBAQCBsb25nIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6c2VsZWN0ZWRJbmRlCiAgICAg
cmV0dXJuIC0xOwogfQogCi12b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6c2V0U2VsZWN0ZWRJ
bmRleCggbG9uZyAgaW5kZXggKQordm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnNldFNlbGVj
dGVkSW5kZXgoIGludCAgaW5kZXggKQogewogICAgIC8vIGRlc2VsZWN0IGFsbCBvdGhlciBvcHRp
b25zIGFuZCBzZWxlY3Qgb25seSB0aGUgbmV3IG9uZQogICAgIFFNZW1BcnJheTxIVE1MR2VuZXJp
Y0Zvcm1FbGVtZW50SW1wbCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CkBAIC0yNzg4LDcgKzI3ODgs
NyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6c2V0U2VsZWN0ZWRJCiAgICAgc2V0Q2hh
bmdlZCh0cnVlKTsKIH0KIAotbG9uZyBIVE1MU2VsZWN0RWxlbWVudEltcGw6Omxlbmd0aCgpIGNv
bnN0CitpbnQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpsZW5ndGgoKSBjb25zdAogewogICAgIGlu
dCBsZW4gPSAwOwogICAgIHVpbnQgaTsKQEAgLTI4MTIsNyArMjgxMiw3IEBAIHZvaWQgSFRNTFNl
bGVjdEVsZW1lbnRJbXBsOjphZGQoIEhUTUxFbGUKICAgICAgICAgc2V0UmVjYWxjTGlzdEl0ZW1z
KCk7CiB9CiAKLXZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpyZW1vdmUoIGxvbmcgaW5kZXgg
KQordm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnJlbW92ZSggaW50IGluZGV4ICkKIHsKICAg
ICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7CiAgICAgaW50IGxpc3RJbmRleCA9IG9wdGlvblRvTGlz
dEluZGV4KGluZGV4KTsKQEAgLTMxODAsNyArMzE4MCw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1l
bnRJbXBsOjpzZXRNdWx0aXBsZSgKICAgICBzZXRBdHRyaWJ1dGUobXVsdGlwbGVBdHRyLCBtdWx0
aXBsZSA/ICIiIDogMCk7CiB9CiAKLXZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpzZXRTaXpl
KGxvbmcgc2l6ZSkKK3ZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpzZXRTaXplKGludCBzaXpl
KQogewogICAgIHNldEF0dHJpYnV0ZShzaXplQXR0ciwgUVN0cmluZzo6bnVtYmVyKHNpemUpKTsK
IH0KQEAgLTMzODAsNyArMzM4MCw3IEBAIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnRJbXBsOjpzZXRU
ZXh0KGNvbnMKICAgICBhcHBlbmRDaGlsZChuZXcgVGV4dEltcGwoZG9jUHRyKCksIHRleHQpLCBl
eGNlcHRpb24pOwogfQogCi1sb25nIEhUTUxPcHRpb25FbGVtZW50SW1wbDo6aW5kZXgoKSBjb25z
dAoraW50IEhUTUxPcHRpb25FbGVtZW50SW1wbDo6aW5kZXgoKSBjb25zdAogewogICAgIC8vIExl
dCdzIGRvIHRoaXMgZHluYW1pY2FsbHkuIE1pZ2h0IGJlIGEgYml0IHNsb3csIGJ1dCB3ZSdyZSBz
dXJlCiAgICAgLy8gd2Ugd29uJ3QgZm9yZ2V0IHRvIHVwZGF0ZSBhIG1lbWJlciB2YXJpYWJsZSBp
biBzb21lIGNhc2VzLi4uCkBAIC0zMzk4LDEwICszMzk4LDEwIEBAIGxvbmcgSFRNTE9wdGlvbkVs
ZW1lbnRJbXBsOjppbmRleCgpIGNvbnMKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBIVE1MT3B0
aW9uRWxlbWVudEltcGw6OnNldEluZGV4KGxvbmcsIGludCAmZXhjZXB0aW9uKQordm9pZCBIVE1M
T3B0aW9uRWxlbWVudEltcGw6OnNldEluZGV4KGludCwgaW50ICZleGNlcHRpb24pCiB7CiAgICAg
ZXhjZXB0aW9uID0gRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7Ci0g
ICAga2RXYXJuaW5nKCkgPDwgIlVuaW1wbGVtZW50ZWQgSFRNTE9wdGlvbkVsZW1lbnRJbXBsOjpz
ZXRJbmRleChsb25nKSBjYWxsZWQiIDw8IGVuZGw7CisgICAga2RXYXJuaW5nKCkgPDwgIlVuaW1w
bGVtZW50ZWQgSFRNTE9wdGlvbkVsZW1lbnRJbXBsOjpzZXRJbmRleChpbnQpIGNhbGxlZCIgPDwg
ZW5kbDsKICAgICAvLyAjIyMKIH0KIApAQCAtMzUwOCwyNyArMzUwOCwyNyBAQCB2b2lkIEhUTUxU
ZXh0QXJlYUVsZW1lbnRJbXBsOjpyZXN0b3JlU3RhCiAgICAgLy8gdGhlIGNsb3NlKCkgaW4gdGhl
IHJlbmRlcnRyZWUgd2lsbCB0YWtlIGNhcmUgb2YgdHJhbnNmZXJyaW5nIGRlZmF1bHR2YWx1ZSB0
byAndmFsdWUnCiB9CiAKLWxvbmcgSFRNTFRleHRBcmVhRWxlbWVudEltcGw6OnNlbGVjdGlvblN0
YXJ0KCkKK2ludCBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6c2VsZWN0aW9uU3RhcnQoKQogewog
ICAgIGlmIChtX3JlbmRlcikKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclRleHRB
cmVhICo+KG1fcmVuZGVyKS0+c2VsZWN0aW9uU3RhcnQoKTsKICAgICByZXR1cm4gMDsKIH0KIAot
bG9uZyBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6c2VsZWN0aW9uRW5kKCkKK2ludCBIVE1MVGV4
dEFyZWFFbGVtZW50SW1wbDo6c2VsZWN0aW9uRW5kKCkKIHsKICAgICBpZiAobV9yZW5kZXIpCiAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0QXJlYSAqPihtX3JlbmRlciktPnNl
bGVjdGlvbkVuZCgpOwogICAgIHJldHVybiAwOwogfQogCi12b2lkIEhUTUxUZXh0QXJlYUVsZW1l
bnRJbXBsOjpzZXRTZWxlY3Rpb25TdGFydChsb25nIHN0YXJ0KQordm9pZCBIVE1MVGV4dEFyZWFF
bGVtZW50SW1wbDo6c2V0U2VsZWN0aW9uU3RhcnQoaW50IHN0YXJ0KQogewogICAgIGlmIChtX3Jl
bmRlcikKICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dEFyZWEgKj4obV9yZW5kZXIpLT5z
ZXRTZWxlY3Rpb25TdGFydChzdGFydCk7CiB9CiAKLXZvaWQgSFRNTFRleHRBcmVhRWxlbWVudElt
cGw6OnNldFNlbGVjdGlvbkVuZChsb25nIGVuZCkKK3ZvaWQgSFRNTFRleHRBcmVhRWxlbWVudElt
cGw6OnNldFNlbGVjdGlvbkVuZChpbnQgZW5kKQogewogICAgIGlmIChtX3JlbmRlcikKICAgICAg
ICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dEFyZWEgKj4obV9yZW5kZXIpLT5zZXRTZWxlY3Rpb25F
bmQoZW5kKTsKQEAgLTM1NDAsNyArMzU0MCw3IEBAIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudElt
cGw6OnNlbGVjdCggICkKICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dEFyZWEqPihtX3Jl
bmRlciktPnNlbGVjdCgpOwogfQogCi12b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjpzZXRT
ZWxlY3Rpb25SYW5nZShsb25nIHN0YXJ0LCBsb25nIGVuZCkKK3ZvaWQgSFRNTFRleHRBcmVhRWxl
bWVudEltcGw6OnNldFNlbGVjdGlvblJhbmdlKGludCBzdGFydCwgaW50IGVuZCkKIHsKICAgICBp
ZiAobV9yZW5kZXIpCiAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRleHRBcmVhICo+KG1fcmVu
ZGVyKS0+c2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZCk7CkBAIC0zNzIxLDEyICszNzIxLDEy
IEBAIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudEltcGw6OnNldEFjY2Vzc0sKICAgICBzZXRBdHRy
aWJ1dGUoYWNjZXNza2V5QXR0ciwgdmFsdWUpOwogfQogCi12b2lkIEhUTUxUZXh0QXJlYUVsZW1l
bnRJbXBsOjpzZXRDb2xzKGxvbmcgY29scykKK3ZvaWQgSFRNTFRleHRBcmVhRWxlbWVudEltcGw6
OnNldENvbHMoaW50IGNvbHMpCiB7CiAgICAgc2V0QXR0cmlidXRlKGNvbHNBdHRyLCBRU3RyaW5n
OjpudW1iZXIoY29scykpOwogfQogCi12b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjpzZXRS
b3dzKGxvbmcgcm93cykKK3ZvaWQgSFRNTFRleHRBcmVhRWxlbWVudEltcGw6OnNldFJvd3MoaW50
IHJvd3MpCiB7CiAgICAgc2V0QXR0cmlidXRlKHJvd3NBdHRyLCBRU3RyaW5nOjpudW1iZXIocm93
cykpOwogfQpAQCAtMzc2MiwxOCArMzc2MiwxOCBAQCB2b2lkIEhUTUxJc0luZGV4RWxlbWVudElt
cGw6OnNldFByb21wdChjCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdW5zaWduZWQgbG9uZyBI
VE1MT3B0aW9uc0NvbGxlY3Rpb25JbXBsOjpsZW5ndGgoKSBjb25zdAordW5zaWduZWQgSFRNTE9w
dGlvbnNDb2xsZWN0aW9uSW1wbDo6bGVuZ3RoKCkgY29uc3QKIHsKICAgICAvLyBOb3QgeWV0IGlt
cGxlbWVudGVkLgogICAgIHJldHVybiAwOwogfQogCi12b2lkIEhUTUxPcHRpb25zQ29sbGVjdGlv
bkltcGw6OnNldExlbmd0aCh1bnNpZ25lZCBsb25nIGxlbmd0aCkKK3ZvaWQgSFRNTE9wdGlvbnND
b2xsZWN0aW9uSW1wbDo6c2V0TGVuZ3RoKHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICAvLyBOb3Qg
eWV0IGltcGxlbWVudGVkLgogfQogCi1Ob2RlSW1wbCAqSFRNTE9wdGlvbnNDb2xsZWN0aW9uSW1w
bDo6aXRlbSh1bnNpZ25lZCBsb25nIGluZGV4KSBjb25zdAorTm9kZUltcGwgKkhUTUxPcHRpb25z
Q29sbGVjdGlvbkltcGw6Oml0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgLy8gTm90
IHlldCBpbXBsZW1lbnRlZC4KICAgICByZXR1cm4gMDsKSW5kZXg6IFdlYkNvcmUva2h0bWwvaHRt
bC9odG1sX2Zvcm1pbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuODYKZGlm
ZiAtcCAtdSAtcjEuODYgV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZm9ybWltcGwuaAotLS0gV2Vi
Q29yZS9raHRtbC9odG1sL2h0bWxfZm9ybWltcGwuaAkxNCBBdWcgMjAwNSAwODowNzoyMyAtMDAw
MAkxLjg2CisrKyBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5oCTIxIEF1ZyAyMDA1
IDA1OjI4OjA3IC0wMDAwCkBAIC03Nyw3ICs3Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwogIAogICAgIFNoYXJlZFB0cjxIVE1MQ29sbGVjdGlv
bkltcGw+IGVsZW1lbnRzKCk7Ci0gICAgbG9uZyBsZW5ndGgoKSBjb25zdDsKKyAgICBpbnQgbGVu
Z3RoKCkgY29uc3Q7CiAKICAgICBET01TdHJpbmcgZW5jdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZW5jdHlwZTsgfQogICAgIHZvaWQgc2V0RW5jdHlwZShjb25zdCBET01TdHJpbmcgJik7CkBAIC0y
MjYsOCArMjI2LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2YXRlZFN1Ym1p
dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldEFjdGl2YXRl
ZFN1Ym1pdChib29sIGZsYWcpIHsgfQogCi0gICAgbG9uZyB0YWJJbmRleCgpIGNvbnN0OwotICAg
IHZvaWQgc2V0VGFiSW5kZXgobG9uZyk7CisgICAgaW50IHRhYkluZGV4KCkgY29uc3Q7CisgICAg
dm9pZCBzZXRUYWJJbmRleChpbnQpOwogCiBwcm90ZWN0ZWQ6CiAgICAgSFRNTEZvcm1FbGVtZW50
SW1wbCAqZ2V0Rm9ybSgpIGNvbnN0OwpAQCAtMzQ5LDcgKzM0OSw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICBib29sIGNoZWNrZWQoKSBjb25zdCB7IHJldHVybiBtX2NoZWNrZWQ7IH0KICAgICB2b2lk
IHNldENoZWNrZWQoYm9vbCk7Ci0gICAgbG9uZyBtYXhMZW5ndGgoKSBjb25zdCB7IHJldHVybiBt
X21heExlbjsgfQorICAgIGludCBtYXhMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX21heExlbjsg
fQogICAgIGludCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgRE9NU3RyaW5n
IHR5cGUoKSBjb25zdDsKICAgICB2b2lkIHNldFR5cGUoY29uc3QgRE9NU3RyaW5nJiB0KTsKQEAg
LTM3MiwxMyArMzcyLDEzIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgY2FuSGF2ZVNlbGVjdGlvbigp
OwogCi0gICAgbG9uZyBzZWxlY3Rpb25TdGFydCgpOwotICAgIGxvbmcgc2VsZWN0aW9uRW5kKCk7
Ci0gICAgdm9pZCBzZXRTZWxlY3Rpb25TdGFydChsb25nKTsKLSAgICB2b2lkIHNldFNlbGVjdGlv
bkVuZChsb25nKTsKKyAgICBpbnQgc2VsZWN0aW9uU3RhcnQoKTsKKyAgICBpbnQgc2VsZWN0aW9u
RW5kKCk7CisgICAgdm9pZCBzZXRTZWxlY3Rpb25TdGFydChpbnQpOworICAgIHZvaWQgc2V0U2Vs
ZWN0aW9uRW5kKGludCk7CiAKICAgICB2b2lkIHNlbGVjdCgpOwotICAgIHZvaWQgc2V0U2VsZWN0
aW9uUmFuZ2UobG9uZywgbG9uZyk7CisgICAgdm9pZCBzZXRTZWxlY3Rpb25SYW5nZShpbnQsIGlu
dCk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGNsaWNrKGJvb2wgc2VuZE1vdXNlRXZlbnRzID0g
ZmFsc2UsIGJvb2wgc2hvd1ByZXNzZWRMb29rID0gdHJ1ZSk7CiAgICAgdmlydHVhbCB2b2lkIGFj
Y2Vzc0tleUFjdGlvbihib29sIHNlbmRUb0FueUVsZW1lbnQpOwpAQCAtNDEzLDcgKzQxMyw3IEBA
IHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRl
SW1wbCAqYXR0cikgY29uc3Q7CiAKLSAgICBsb25nIG1heFJlc3VsdHMoKSBjb25zdCB7IHJldHVy
biBtX21heFJlc3VsdHM7IH0KKyAgICBpbnQgbWF4UmVzdWx0cygpIGNvbnN0IHsgcmV0dXJuIG1f
bWF4UmVzdWx0czsgfQogCiAgICAgRE9NU3RyaW5nIGRlZmF1bHRWYWx1ZSgpIGNvbnN0OwogICAg
IHZvaWQgc2V0RGVmYXVsdFZhbHVlKGNvbnN0IERPTVN0cmluZyAmKTsKQEAgLTQzMywxMiArNDMz
LDEyIEBAIHB1YmxpYzoKICAgICBET01TdHJpbmcgYWx0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRB
bHQoY29uc3QgRE9NU3RyaW5nICYpOwogCi0gICAgdm9pZCBzZXRTaXplKHVuc2lnbmVkIGxvbmcp
OworICAgIHZvaWQgc2V0U2l6ZSh1bnNpZ25lZCk7CiAKICAgICBET01TdHJpbmcgc3JjKCkgY29u
c3Q7CiAgICAgdm9pZCBzZXRTcmMoY29uc3QgRE9NU3RyaW5nICYpOwogCi0gICAgdm9pZCBzZXRN
YXhMZW5ndGgobG9uZyk7CisgICAgdm9pZCBzZXRNYXhMZW5ndGgoaW50KTsKIAogICAgIERPTVN0
cmluZyB1c2VNYXAoKSBjb25zdDsKICAgICB2b2lkIHNldFVzZU1hcChjb25zdCBET01TdHJpbmcg
Jik7CkBAIC01NTAsMjEgKzU1MCwyMSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVj
YWxjU3R5bGUoIFN0eWxlQ2hhbmdlICk7CiAKLSAgICBsb25nIHNlbGVjdGVkSW5kZXgoKSBjb25z
dDsKLSAgICB2b2lkIHNldFNlbGVjdGVkSW5kZXgoIGxvbmcgaW5kZXggKTsKKyAgICBpbnQgc2Vs
ZWN0ZWRJbmRleCgpIGNvbnN0OworICAgIHZvaWQgc2V0U2VsZWN0ZWRJbmRleCggaW50IGluZGV4
ICk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNFbnVtZXJhdGFibGUoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CiAKLSAgICBsb25nIGxlbmd0aCgpIGNvbnN0OworICAgIGludCBsZW5ndGgoKSBjb25z
dDsKIAotICAgIGxvbmcgbWluV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX21pbndpZHRoOyB9Cisg
ICAgaW50IG1pbldpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9taW53aWR0aDsgfQogCi0gICAgbG9u
ZyBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgaW50IHNpemUoKSBjb25zdCB7
IHJldHVybiBtX3NpemU7IH0KIAogICAgIGJvb2wgbXVsdGlwbGUoKSBjb25zdCB7IHJldHVybiBt
X211bHRpcGxlOyB9CiAKICAgICB2b2lkIGFkZCAoIEhUTUxFbGVtZW50SW1wbCAqZWxlbWVudCwg
SFRNTEVsZW1lbnRJbXBsICpiZWZvcmUsIGludCAmZXhjZXB0aW9uY29kZSApOwotICAgIHZvaWQg
cmVtb3ZlICggbG9uZyBpbmRleCApOworICAgIHZvaWQgcmVtb3ZlICggaW50IGluZGV4ICk7CiAg
ICAgdm9pZCBibHVyKCk7CiAgICAgdm9pZCBmb2N1cygpOwogCkBAIC02MTEsNyArNjExLDcgQEAg
cHVibGljOgogCiAgICAgdm9pZCBzZXRNdWx0aXBsZShib29sKTsKIAotICAgIHZvaWQgc2V0U2l6
ZShsb25nKTsKKyAgICB2b2lkIHNldFNpemUoaW50KTsKIAogcHJpdmF0ZToKICAgICB2b2lkIHJl
Y2FsY0xpc3RJdGVtcygpOwpAQCAtNjk0LDggKzY5NCw4IEBAIHB1YmxpYzoKICAgICBET01TdHJp
bmcgdGV4dCgpIGNvbnN0OwogICAgIHZvaWQgc2V0VGV4dChjb25zdCBET01TdHJpbmcgJiwgaW50
ICZleGNlcHRpb24pOwogCi0gICAgbG9uZyBpbmRleCgpIGNvbnN0OwotICAgIHZvaWQgc2V0SW5k
ZXgobG9uZywgaW50ICZleGNlcHRpb24pOworICAgIGludCBpbmRleCgpIGNvbnN0OworICAgIHZv
aWQgc2V0SW5kZXgoaW50LCBpbnQgJmV4Y2VwdGlvbik7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogCiAgICAgRE9NU3Ry
aW5nIHZhbHVlKCkgY29uc3Q7CkBAIC03MzgsOCArNzM4LDggQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkgeyByZXR1cm4gbmV3
Q2hpbGQtPmlzVGV4dE5vZGUoKTsgfQogCi0gICAgbG9uZyBjb2xzKCkgY29uc3QgeyByZXR1cm4g
bV9jb2xzOyB9Ci0gICAgbG9uZyByb3dzKCkgY29uc3QgeyByZXR1cm4gbV9yb3dzOyB9CisgICAg
aW50IGNvbHMoKSBjb25zdCB7IHJldHVybiBtX2NvbHM7IH0KKyAgICBpbnQgcm93cygpIGNvbnN0
IHsgcmV0dXJuIG1fcm93czsgfQogCiAgICAgV3JhcE1ldGhvZCB3cmFwKCkgY29uc3QgeyByZXR1
cm4gbV93cmFwOyB9CiAKQEAgLTc1MSwxNCArNzUxLDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IFFTdHJpbmcgc3RhdGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVzdG9yZVN0YXRlKFFTdHJpbmdM
aXN0ICYpOwogCi0gICAgbG9uZyBzZWxlY3Rpb25TdGFydCgpOwotICAgIGxvbmcgc2VsZWN0aW9u
RW5kKCk7CisgICAgaW50IHNlbGVjdGlvblN0YXJ0KCk7CisgICAgaW50IHNlbGVjdGlvbkVuZCgp
OwogCi0gICAgdm9pZCBzZXRTZWxlY3Rpb25TdGFydChsb25nKTsKLSAgICB2b2lkIHNldFNlbGVj
dGlvbkVuZChsb25nKTsKKyAgICB2b2lkIHNldFNlbGVjdGlvblN0YXJ0KGludCk7CisgICAgdm9p
ZCBzZXRTZWxlY3Rpb25FbmQoaW50KTsKIAogICAgIHZvaWQgc2VsZWN0ICggICk7Ci0gICAgdm9p
ZCBzZXRTZWxlY3Rpb25SYW5nZShsb25nLCBsb25nKTsKKyAgICB2b2lkIHNldFNlbGVjdGlvblJh
bmdlKGludCwgaW50KTsKIAogICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAq
YXR0cik7CkBAIC03ODcsOSArNzg3LDkgQEAgcHVibGljOgogICAgIERPTVN0cmluZyBhY2Nlc3NL
ZXkoKSBjb25zdDsKICAgICB2b2lkIHNldEFjY2Vzc0tleShjb25zdCBET01TdHJpbmcgJik7CiAK
LSAgICB2b2lkIHNldENvbHMobG9uZyk7CisgICAgdm9pZCBzZXRDb2xzKGludCk7CiAKLSAgICB2
b2lkIHNldFJvd3MobG9uZyk7CisgICAgdm9pZCBzZXRSb3dzKGludCk7CiAKIHByb3RlY3RlZDoK
ICAgICBpbnQgbV9yb3dzOwpAQCAtODI2LDkgKzgyNiw5IEBAIGNsYXNzIEhUTUxPcHRpb25zQ29s
bGVjdGlvbkltcGwgOiBwdWJsaWMKIHB1YmxpYzoKICAgICBIVE1MT3B0aW9uc0NvbGxlY3Rpb25J
bXBsKEhUTUxTZWxlY3RFbGVtZW50SW1wbCAqaW1wbCkgOiBtX3NlbGVjdChpbXBsKSB7IH0KIAot
ICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRMZW5ndGgodW5z
aWduZWQgbG9uZyk7Ci0gICAgTm9kZUltcGwgKml0ZW0odW5zaWduZWQgbG9uZyBpbmRleCkgY29u
c3Q7CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CisgICAgdm9pZCBzZXRMZW5ndGgodW5z
aWduZWQpOworICAgIE5vZGVJbXBsICppdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKICAgICBO
b2RlSW1wbCAqbmFtZWRJdGVtKGNvbnN0IERPTVN0cmluZyAmbmFtZSkgY29uc3Q7CiAKICAgICB2
b2lkIGRldGFjaCgpIHsgbV9zZWxlY3QgPSAwOyB9CkluZGV4OiBXZWJDb3JlL2todG1sL2h0bWwv
aHRtbF9pbWFnZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2todG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQ4
CmRpZmYgLXAgLXUgLXIxLjQ4IFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAK
LS0tIFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAJMzAgSnVsIDIwMDUgMDI6
MzM6MTcgLTAwMDAJMS40OAorKysgV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmNw
cAkyMSBBdWcgMjAwNSAwNToyODowOCAtMDAwMApAQCAtMjg4LDE2ICsyODgsMTQgQEAgdm9pZCBI
VE1MSW1hZ2VFbGVtZW50SW1wbDo6cmVtb3ZlZEZyb21EbwogICAgIEhUTUxFbGVtZW50SW1wbDo6
cmVtb3ZlZEZyb21Eb2N1bWVudCgpOwogfQogCi1sb25nIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjp3
aWR0aChib29sIGlnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cykgY29uc3QKK2ludCBIVE1MSW1hZ2VF
bGVtZW50SW1wbDo6d2lkdGgoYm9vbCBpZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMpIGNvbnN0CiB7
CiAgICAgaWYgKCFtX3JlbmRlcikgewogCS8vIGNoZWNrIHRoZSBhdHRyaWJ1dGUgZmlyc3QgZm9y
IGFuIGV4cGxpY2l0IHBpeGVsIHZhbHVlCi0JRE9NOjpET01TdHJpbmcgYXR0cldpZHRoID0gZ2V0
QXR0cmlidXRlKHdpZHRoQXR0cik7CiAJYm9vbCBvazsKLQlsb25nIHdpZHRoID0gYXR0cldpZHRo
LnN0cmluZygpLnRvTG9uZygmb2spOwotCWlmIChvaykgewotCSAgcmV0dXJuIHdpZHRoOwotCX0K
KwlpbnQgd2lkdGggPSBnZXRBdHRyaWJ1dGUod2lkdGhBdHRyKS5zdHJpbmcoKS50b0ludCgmb2sp
OworCWlmIChvaykKKyAgICAgICAgICAgIHJldHVybiB3aWR0aDsKICAgICB9CiAKICAgICBET006
OkRvY3VtZW50SW1wbCogZG9jaW1wbCA9IGdldERvY3VtZW50KCk7CkBAIC0zMTUsMTYgKzMxMywx
NCBAQCBsb25nIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjp3aWR0aChib29sIGlnCiAgICAgcmV0dXJu
IG1fcmVuZGVyLT5jb250ZW50V2lkdGgoKTsKIH0KIAotbG9uZyBIVE1MSW1hZ2VFbGVtZW50SW1w
bDo6aGVpZ2h0KGJvb2wgaWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKSBjb25zdAoraW50IEhUTUxJ
bWFnZUVsZW1lbnRJbXBsOjpoZWlnaHQoYm9vbCBpZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMpIGNv
bnN0CiB7CiAgICAgaWYgKCFtX3JlbmRlcikgewogCS8vIGNoZWNrIHRoZSBhdHRyaWJ1dGUgZmly
c3QgZm9yIGFuIGV4cGxpY2l0IHBpeGVsIHZhbHVlCi0JRE9NOjpET01TdHJpbmcgYXR0ckhlaWdo
dCA9IGdldEF0dHJpYnV0ZShoZWlnaHRBdHRyKTsKIAlib29sIG9rOwotCWxvbmcgaGVpZ2h0ID0g
YXR0ckhlaWdodC5zdHJpbmcoKS50b0xvbmcoJm9rKTsKLQlpZiAob2spIHsKLQkgIHJldHVybiBo
ZWlnaHQ7Ci0JfQorCWludCBoZWlnaHQgPSBnZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0cikuc3RyaW5n
KCkudG9JbnQoJm9rKTsKKwlpZiAob2spCisgICAgICAgICAgICByZXR1cm4gaGVpZ2h0OwogICAg
IH0KIAogICAgIERPTTo6RG9jdW1lbnRJbXBsKiBkb2NpbXBsID0gZ2V0RG9jdW1lbnQoKTsKQEAg
LTM4NSwyOSArMzgxLDI5IEBAIHZvaWQgSFRNTEltYWdlRWxlbWVudEltcGw6OnNldEFsdChjb25z
dCAKICAgICBzZXRBdHRyaWJ1dGUoYWx0QXR0ciwgdmFsdWUpOwogfQogCi1sb25nIEhUTUxJbWFn
ZUVsZW1lbnRJbXBsOjpib3JkZXIoKSBjb25zdAoraW50IEhUTUxJbWFnZUVsZW1lbnRJbXBsOjpi
b3JkZXIoKSBjb25zdAogewogICAgIC8vICMjIyByZXR1cm4gdmFsdWUgaW4gcGl4ZWxzCiAgICAg
cmV0dXJuIGdldEF0dHJpYnV0ZShib3JkZXJBdHRyKS50b0ludCgpOwogfQogCi12b2lkIEhUTUxJ
bWFnZUVsZW1lbnRJbXBsOjpzZXRCb3JkZXIobG9uZyB2YWx1ZSkKK3ZvaWQgSFRNTEltYWdlRWxl
bWVudEltcGw6OnNldEJvcmRlcihpbnQgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRlKGJvcmRl
ckF0dHIsIFFTdHJpbmc6Om51bWJlcih2YWx1ZSkpOwogfQogCi12b2lkIEhUTUxJbWFnZUVsZW1l
bnRJbXBsOjpzZXRIZWlnaHQobG9uZyB2YWx1ZSkKK3ZvaWQgSFRNTEltYWdlRWxlbWVudEltcGw6
OnNldEhlaWdodChpbnQgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRlKGhlaWdodEF0dHIsIFFT
dHJpbmc6Om51bWJlcih2YWx1ZSkpOwogfQogCi1sb25nIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjpo
c3BhY2UoKSBjb25zdAoraW50IEhUTUxJbWFnZUVsZW1lbnRJbXBsOjpoc3BhY2UoKSBjb25zdAog
ewogICAgIC8vICMjIyByZXR1cm4gYWN0dWFsIHZhbHVlCiAgICAgcmV0dXJuIGdldEF0dHJpYnV0
ZShoc3BhY2VBdHRyKS50b0ludCgpOwogfQogCi12b2lkIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjpz
ZXRIc3BhY2UobG9uZyB2YWx1ZSkKK3ZvaWQgSFRNTEltYWdlRWxlbWVudEltcGw6OnNldEhzcGFj
ZShpbnQgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRlKGhzcGFjZUF0dHIsIFFTdHJpbmc6Om51
bWJlcih2YWx1ZSkpOwogfQpAQCAtNDUyLDIzICs0NDgsMjMgQEAgdm9pZCBIVE1MSW1hZ2VFbGVt
ZW50SW1wbDo6c2V0VXNlTWFwKGNvbgogICAgIHNldEF0dHJpYnV0ZSh1c2VtYXBBdHRyLCB2YWx1
ZSk7CiB9CiAKLWxvbmcgSFRNTEltYWdlRWxlbWVudEltcGw6OnZzcGFjZSgpIGNvbnN0CitpbnQg
SFRNTEltYWdlRWxlbWVudEltcGw6OnZzcGFjZSgpIGNvbnN0CiB7CiAgICAgLy8gIyMjIHJldHVy
biBhY3R1YWwgdnNwYWNlCiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh2c3BhY2VBdHRyKS50b0lu
dCgpOwogfQogCi12b2lkIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjpzZXRWc3BhY2UobG9uZyB2YWx1
ZSkKK3ZvaWQgSFRNTEltYWdlRWxlbWVudEltcGw6OnNldFZzcGFjZShpbnQgdmFsdWUpCiB7CiAg
ICAgc2V0QXR0cmlidXRlKHZzcGFjZUF0dHIsIFFTdHJpbmc6Om51bWJlcih2YWx1ZSkpOwogfQog
Ci12b2lkIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjpzZXRXaWR0aChsb25nIHZhbHVlKQordm9pZCBI
VE1MSW1hZ2VFbGVtZW50SW1wbDo6c2V0V2lkdGgoaW50IHZhbHVlKQogewogICAgIHNldEF0dHJp
YnV0ZSh3aWR0aEF0dHIsIFFTdHJpbmc6Om51bWJlcih2YWx1ZSkpOwogfQogCi1sb25nIEhUTUxJ
bWFnZUVsZW1lbnRJbXBsOjp4KCkgY29uc3QKK2ludCBIVE1MSW1hZ2VFbGVtZW50SW1wbDo6eCgp
IGNvbnN0CiB7CiAgICAgUmVuZGVyT2JqZWN0ICpyID0gcmVuZGVyZXIoKTsKICAgICBpZiAoIXIp
CkBAIC00NzgsNyArNDc0LDcgQEAgbG9uZyBIVE1MSW1hZ2VFbGVtZW50SW1wbDo6eCgpIGNvbnN0
CiAgICAgcmV0dXJuIHg7CiB9CiAKLWxvbmcgSFRNTEltYWdlRWxlbWVudEltcGw6OnkoKSBjb25z
dAoraW50IEhUTUxJbWFnZUVsZW1lbnRJbXBsOjp5KCkgY29uc3QKIHsKICAgICBSZW5kZXJPYmpl
Y3QgKnIgPSByZW5kZXJlcigpOwogICAgIGlmICghcikKQEAgLTc0NCwxMiArNzQwLDEyIEBAIHZv
aWQgSFRNTEFyZWFFbGVtZW50SW1wbDo6c2V0U2hhcGUoY29uc3QKICAgICBzZXRBdHRyaWJ1dGUo
c2hhcGVBdHRyLCB2YWx1ZSk7CiB9CiAKLWxvbmcgSFRNTEFyZWFFbGVtZW50SW1wbDo6dGFiSW5k
ZXgoKSBjb25zdAoraW50IEhUTUxBcmVhRWxlbWVudEltcGw6OnRhYkluZGV4KCkgY29uc3QKIHsK
ICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHRhYmluZGV4QXR0cikudG9JbnQoKTsKIH0KIAotdm9p
ZCBIVE1MQXJlYUVsZW1lbnRJbXBsOjpzZXRUYWJJbmRleChsb25nIHRhYkluZGV4KQordm9pZCBI
VE1MQXJlYUVsZW1lbnRJbXBsOjpzZXRUYWJJbmRleChpbnQgdGFiSW5kZXgpCiB7CiAgICAgc2V0
QXR0cmlidXRlKHRhYmluZGV4QXR0ciwgUVN0cmluZzo6bnVtYmVyKHRhYkluZGV4KSk7CiB9Cklu
ZGV4OiBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMjQKZGlmZiAtcCAtdSAtcjEuMjQgV2ViQ29yZS9raHRtbC9odG1s
L2h0bWxfaW1hZ2VpbXBsLmgKLS0tIFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5o
CTIwIEp1bCAyMDA1IDAyOjM1OjMxIC0wMDAwCTEuMjQKKysrIFdlYkNvcmUva2h0bWwvaHRtbC9o
dG1sX2ltYWdlaW1wbC5oCTIxIEF1ZyAyMDA1IDA1OjI4OjA4IC0wMDAwCkBAIC04OSw4ICs4OSw4
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwogCi0gICAgbG9uZyB3aWR0aChi
b29sIGlnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cyA9IGZhbHNlKSBjb25zdDsKLSAgICBsb25nIGhl
aWdodChib29sIGlnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cyA9IGZhbHNlKSBjb25zdDsKKyAgICBp
bnQgd2lkdGgoYm9vbCBpZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMgPSBmYWxzZSkgY29uc3Q7Cisg
ICAgaW50IGhlaWdodChib29sIGlnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cyA9IGZhbHNlKSBjb25z
dDsKIAogICAgIGJvb2wgaXNTZXJ2ZXJNYXAoKSBjb25zdCB7IHJldHVybiAoIGlzbWFwICYmICF1
c2VtYXAubGVuZ3RoKCkgKTsgIH0KICAgICBRSW1hZ2UgY3VycmVudEltYWdlKCkgY29uc3Q7CkBA
IC0xMTQsMTMgKzExNCwxMyBAQCBwdWJsaWM6CiAgICAgRE9NU3RyaW5nIGFsdCgpIGNvbnN0Owog
ICAgIHZvaWQgc2V0QWx0KCBjb25zdCBET01TdHJpbmcgJiApOwogCi0gICAgbG9uZyBib3JkZXIo
KSBjb25zdDsKLSAgICB2b2lkIHNldEJvcmRlciggbG9uZyApOworICAgIGludCBib3JkZXIoKSBj
b25zdDsKKyAgICB2b2lkIHNldEJvcmRlciggaW50ICk7CiAKLSAgICB2b2lkIHNldEhlaWdodCgg
bG9uZyApOworICAgIHZvaWQgc2V0SGVpZ2h0KCBpbnQgKTsKIAotICAgIGxvbmcgaHNwYWNlKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRIc3BhY2UoIGxvbmcgKTsKKyAgICBpbnQgaHNwYWNlKCkgY29u
c3Q7CisgICAgdm9pZCBzZXRIc3BhY2UoIGludCApOwogCiAgICAgYm9vbCBpc01hcCgpIGNvbnN0
OwogICAgIHZvaWQgc2V0SXNNYXAoIGJvb2wgKTsKQEAgLTEzNCwxMyArMTM0LDEzIEBAIHB1Ymxp
YzoKICAgICBET01TdHJpbmcgdXNlTWFwKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRVc2VNYXAoIGNv
bnN0IERPTVN0cmluZyAmICk7CiAKLSAgICBsb25nIHZzcGFjZSgpIGNvbnN0OwotICAgIHZvaWQg
c2V0VnNwYWNlKCBsb25nICk7CisgICAgaW50IHZzcGFjZSgpIGNvbnN0OworICAgIHZvaWQgc2V0
VnNwYWNlKCBpbnQgKTsKIAotICAgIHZvaWQgc2V0V2lkdGgoIGxvbmcgKTsKKyAgICB2b2lkIHNl
dFdpZHRoKCBpbnQgKTsKIAotICAgIGxvbmcgeCgpIGNvbnN0OwotICAgIGxvbmcgeSgpIGNvbnN0
OworICAgIGludCB4KCkgY29uc3Q7CisgICAgaW50IHkoKSBjb25zdDsKIAogcHJvdGVjdGVkOgog
ICAgIEhUTUxJbWFnZUxvYWRlciBtX2ltYWdlTG9hZGVyOwpAQCAtMTkzLDggKzE5Myw4IEBAIHB1
YmxpYzoKICAgICBET01TdHJpbmcgc2hhcGUoKSBjb25zdDsKICAgICB2b2lkIHNldFNoYXBlKCBj
b25zdCBET01TdHJpbmcgJiApOwogCi0gICAgbG9uZyB0YWJJbmRleCgpIGNvbnN0OwotICAgIHZv
aWQgc2V0VGFiSW5kZXgoIGxvbmcgKTsKKyAgICBpbnQgdGFiSW5kZXgoKSBjb25zdDsKKyAgICB2
b2lkIHNldFRhYkluZGV4KCBpbnQgKTsKIAogICAgIERPTVN0cmluZyB0YXJnZXQoKSBjb25zdDsK
ICAgICB2b2lkIHNldFRhcmdldCggY29uc3QgRE9NU3RyaW5nICYgKTsKSW5kZXg6IFdlYkNvcmUv
a2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS40NgpkaWZmIC1wIC11IC1yMS40NiBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9p
bmxpbmVpbXBsLmNwcAotLS0gV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5jcHAJ
MzAgSnVsIDIwMDUgMDI6MzM6MTcgLTAwMDAJMS40NgorKysgV2ViQ29yZS9raHRtbC9odG1sL2h0
bWxfaW5saW5laW1wbC5jcHAJMjEgQXVnIDIwMDUgMDU6Mjg6MDggLTAwMDAKQEAgLTMzNCwxMiAr
MzM0LDEyIEBAIHZvaWQgSFRNTEFuY2hvckVsZW1lbnRJbXBsOjpzZXRTaGFwZShjb24KICAgICBz
ZXRBdHRyaWJ1dGUoc2hhcGVBdHRyLCB2YWx1ZSk7CiB9CiAKLWxvbmcgSFRNTEFuY2hvckVsZW1l
bnRJbXBsOjp0YWJJbmRleCgpIGNvbnN0CitpbnQgSFRNTEFuY2hvckVsZW1lbnRJbXBsOjp0YWJJ
bmRleCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh0YWJpbmRleEF0dHIpLnRv
SW50KCk7CiB9CiAKLXZvaWQgSFRNTEFuY2hvckVsZW1lbnRJbXBsOjpzZXRUYWJJbmRleChsb25n
IHRhYkluZGV4KQordm9pZCBIVE1MQW5jaG9yRWxlbWVudEltcGw6OnNldFRhYkluZGV4KGludCB0
YWJJbmRleCkKIHsKICAgICBzZXRBdHRyaWJ1dGUodGFiaW5kZXhBdHRyLCBRU3RyaW5nOjpudW1i
ZXIodGFiSW5kZXgpKTsKIH0KSW5kZXg6IFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX2lubGluZWlt
cGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0
bWxfaW5saW5laW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIxCmRpZmYgLXAgLXUgLXIx
LjIxIFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwuaAotLS0gV2ViQ29yZS9raHRt
bC9odG1sL2h0bWxfaW5saW5laW1wbC5oCTE4IEp1bCAyMDA1IDIxOjQ0OjIwIC0wMDAwCTEuMjEK
KysrIFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwuaAkyMSBBdWcgMjAwNSAwNToy
ODowOCAtMDAwMApAQCAtNzUsOCArNzUsOCBAQCBwdWJsaWM6CiAgICAgRE9NU3RyaW5nIHNoYXBl
KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRTaGFwZShjb25zdCBET01TdHJpbmcgJik7CiAKLSAgICBs
b25nIHRhYkluZGV4KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUYWJJbmRleChsb25nKTsKKyAgICBp
bnQgdGFiSW5kZXgoKSBjb25zdDsKKyAgICB2b2lkIHNldFRhYkluZGV4KGludCk7CiAKICAgICBE
T01TdHJpbmcgdGFyZ2V0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRUYXJnZXQoY29uc3QgRE9NU3Ry
aW5nICYpOwpJbmRleDogV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfbGlzdGltcGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9saXN0aW1w
bC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTMKZGlmZiAtcCAtdSAtcjEuMTMgV2ViQ29y
ZS9raHRtbC9odG1sL2h0bWxfbGlzdGltcGwuY3BwCi0tLSBXZWJDb3JlL2todG1sL2h0bWwvaHRt
bF9saXN0aW1wbC5jcHAJMzAgSnVsIDIwMDUgMDI6MzM6MTcgLTAwMDAJMS4xMworKysgV2ViQ29y
ZS9raHRtbC9odG1sL2h0bWxfbGlzdGltcGwuY3BwCTIxIEF1ZyAyMDA1IDA1OjI4OjA5IC0wMDAw
CkBAIC0xMzQsNyArMTM0LDcgQEAgdm9pZCBIVE1MT0xpc3RFbGVtZW50SW1wbDo6c2V0Q29tcGFj
dChibwogICAgIHNldEF0dHJpYnV0ZShjb21wYWN0QXR0ciwgYiA/ICIiIDogMCk7CiB9CiAKLXZv
aWQgSFRNTE9MaXN0RWxlbWVudEltcGw6OnNldFN0YXJ0KGxvbmcgc3RhcnQpCit2b2lkIEhUTUxP
TGlzdEVsZW1lbnRJbXBsOjpzZXRTdGFydChpbnQgc3RhcnQpCiB7CiAgICAgc2V0QXR0cmlidXRl
KHN0YXJ0QXR0ciwgUVN0cmluZzo6bnVtYmVyKHN0YXJ0KSk7CiB9CkBAIC0yMzUsMTIgKzIzNSwx
MiBAQCB2b2lkIEhUTUxMSUVsZW1lbnRJbXBsOjpzZXRUeXBlKGNvbnN0IERPCiAgICAgc2V0QXR0
cmlidXRlKHR5cGVBdHRyLCB2YWx1ZSk7CiB9CiAKLWxvbmcgSFRNTExJRWxlbWVudEltcGw6OnZh
bHVlKCkgY29uc3QKK2ludCBIVE1MTElFbGVtZW50SW1wbDo6dmFsdWUoKSBjb25zdAogewogICAg
IHJldHVybiBnZXRBdHRyaWJ1dGUodmFsdWVBdHRyKS50b0ludCgpOwogfQogCi12b2lkIEhUTUxM
SUVsZW1lbnRJbXBsOjpzZXRWYWx1ZShsb25nIHZhbHVlKQordm9pZCBIVE1MTElFbGVtZW50SW1w
bDo6c2V0VmFsdWUoaW50IHZhbHVlKQogewogICAgIHNldEF0dHJpYnV0ZSh2YWx1ZUF0dHIsIFFT
dHJpbmc6Om51bWJlcih2YWx1ZSkpOwogfQpJbmRleDogV2ViQ29yZS9raHRtbC9odG1sL2h0bWxf
bGlzdGltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9o
dG1sL2h0bWxfbGlzdGltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMQpkaWZmIC1wIC11
IC1yMS4xMSBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9saXN0aW1wbC5oCi0tLSBXZWJDb3JlL2to
dG1sL2h0bWwvaHRtbF9saXN0aW1wbC5oCTMwIEp1bCAyMDA1IDAyOjMzOjE3IC0wMDAwCTEuMTEK
KysrIFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX2xpc3RpbXBsLmgJMjEgQXVnIDIwMDUgMDU6Mjg6
MDkgLTAwMDAKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBtYXBU
b0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRy
eSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlSW1wbCAqKTsKIAotICAgIHZpcnR1YWwgbG9uZyBzdGFydCgpIGNvbnN0
IHsgcmV0dXJuIDE7IH0KKyAgICB2aXJ0dWFsIGludCBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIDE7
IH0KIAogICAgIGJvb2wgY29tcGFjdCgpIGNvbnN0OwogICAgIHZvaWQgc2V0Q29tcGFjdChib29s
KTsKQEAgLTEwMCw4ICsxMDAsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBjb21wYWN0KCkgY29uc3Q7
CiAgICAgdm9pZCBzZXRDb21wYWN0KGJvb2wpOwogCi0gICAgbG9uZyBzdGFydCgpIGNvbnN0IHsg
cmV0dXJuIF9zdGFydDsgfQotICAgIHZvaWQgc2V0U3RhcnQobG9uZyk7CisgICAgaW50IHN0YXJ0
KCkgY29uc3QgeyByZXR1cm4gX3N0YXJ0OyB9CisgICAgdm9pZCBzZXRTdGFydChpbnQpOwogCiAg
ICAgRE9NU3RyaW5nIHR5cGUoKSBjb25zdDsKICAgICB2b2lkIHNldFR5cGUoY29uc3QgRE9NU3Ry
aW5nICYpOwpAQCAtMTMwLDEyICsxMzAsMTIgQEAgcHVibGljOgogICAgIERPTVN0cmluZyB0eXBl
KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRUeXBlKGNvbnN0IERPTVN0cmluZyAmKTsKIAotICAgIGxv
bmcgdmFsdWUoKSBjb25zdDsKLSAgICB2b2lkIHNldFZhbHVlKGxvbmcpOworICAgIGludCB2YWx1
ZSgpIGNvbnN0OworICAgIHZvaWQgc2V0VmFsdWUoaW50KTsKIAogcHJpdmF0ZToKICAgICBib29s
IGlzVmFsdWVkOwotICAgIGxvbmcgcmVxdWVzdGVkVmFsdWU7CisgICAgaW50IHJlcXVlc3RlZFZh
bHVlOwogfTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJbmRleDogV2ViQ29yZS9raHRtbC9odG1s
L2h0bWxfbWlzY2ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2todG1sL2h0bWwvaHRtbF9taXNjaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzMK
ZGlmZiAtcCAtdSAtcjEuMzMgV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuY3BwCi0t
LSBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9taXNjaW1wbC5jcHAJMTYgQXVnIDIwMDUgMjM6NTc6
MDYgLTAwMDAJMS4zMworKysgV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuY3BwCTIx
IEF1ZyAyMDA1IDA1OjI4OjA5IC0wMDAwCkBAIC0yMjMsOSArMjIzLDkgQEAgTm9kZUltcGwgKkhU
TUxDb2xsZWN0aW9uSW1wbDo6dHJhdmVyc2VOZQogfQogCiAKLXVuc2lnbmVkIGxvbmcgSFRNTENv
bGxlY3Rpb25JbXBsOjpjYWxjTGVuZ3RoKCkgY29uc3QKK3Vuc2lnbmVkIEhUTUxDb2xsZWN0aW9u
SW1wbDo6Y2FsY0xlbmd0aCgpIGNvbnN0CiB7Ci0gICAgdW5zaWduZWQgbG9uZyBsZW4gPSAwOwor
ICAgIHVuc2lnbmVkIGxlbiA9IDA7CiAKICAgICBmb3IgKE5vZGVJbXBsICpjdXJyZW50ID0gdHJh
dmVyc2VOZXh0SXRlbShtX2Jhc2UuZ2V0KCkpOyBjdXJyZW50OyBjdXJyZW50ID0gdHJhdmVyc2VO
ZXh0SXRlbShjdXJyZW50KSkgewogICAgICAgICBsZW4rKzsKQEAgLTIzNiw3ICsyMzYsNyBAQCB1
bnNpZ25lZCBsb25nIEhUTUxDb2xsZWN0aW9uSW1wbDo6Y2FsY0xlCiAKIC8vIHNpbmNlIHRoZSBj
b2xsZWN0aW9ucyBhcmUgdG8gYmUgImxpdmUiLCB3ZSBoYXZlIHRvIGRvIHRoZQogLy8gY2FsY3Vs
YXRpb24gZXZlcnkgdGltZSBpZiBhbnl0aGluZyBoYXMgY2hhbmdlZAotdW5zaWduZWQgbG9uZyBI
VE1MQ29sbGVjdGlvbkltcGw6Omxlbmd0aCgpIGNvbnN0Cit1bnNpZ25lZCBIVE1MQ29sbGVjdGlv
bkltcGw6Omxlbmd0aCgpIGNvbnN0CiB7CiAgICAgcmVzZXRDb2xsZWN0aW9uSW5mbygpOwogICAg
IGlmICghaW5mby0+aGFzbGVuZ3RoKSB7CkBAIC0yNDYsNyArMjQ2LDcgQEAgdW5zaWduZWQgbG9u
ZyBIVE1MQ29sbGVjdGlvbkltcGw6Omxlbmd0aAogICAgIHJldHVybiBpbmZvLT5sZW5ndGg7CiB9
CiAKLU5vZGVJbXBsICpIVE1MQ29sbGVjdGlvbkltcGw6Oml0ZW0oIHVuc2lnbmVkIGxvbmcgaW5k
ZXggKSBjb25zdAorTm9kZUltcGwgKkhUTUxDb2xsZWN0aW9uSW1wbDo6aXRlbSggdW5zaWduZWQg
aW5kZXggKSBjb25zdAogewogICAgICByZXNldENvbGxlY3Rpb25JbmZvKCk7CiAgICAgIGlmIChp
bmZvLT5jdXJyZW50ICYmIGluZm8tPnBvc2l0aW9uID09IGluZGV4KSB7CkBAIC01MjQsNyArNTI0
LDcgQEAgSFRNTEZvcm1Db2xsZWN0aW9uSW1wbDo6fkhUTUxGb3JtQ29sbGVjdAogewogfQogCi11
bnNpZ25lZCBsb25nIEhUTUxGb3JtQ29sbGVjdGlvbkltcGw6OmNhbGNMZW5ndGgoKSBjb25zdAor
dW5zaWduZWQgSFRNTEZvcm1Db2xsZWN0aW9uSW1wbDo6Y2FsY0xlbmd0aCgpIGNvbnN0CiB7CiAg
ICAgUVB0clZlY3RvcjxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbD4gJmwgPSBzdGF0aWNfY2Fz
dDxIVE1MRm9ybUVsZW1lbnRJbXBsKj4obV9iYXNlLmdldCgpKS0+Zm9ybUVsZW1lbnRzOwogCkBA
IC01MzYsNyArNTM2LDcgQEAgdW5zaWduZWQgbG9uZyBIVE1MRm9ybUNvbGxlY3Rpb25JbXBsOjpj
YQogICAgIHJldHVybiBsZW47CiB9CiAKLU5vZGVJbXBsICpIVE1MRm9ybUNvbGxlY3Rpb25JbXBs
OjppdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgpIGNvbnN0CitOb2RlSW1wbCAqSFRNTEZvcm1Db2xs
ZWN0aW9uSW1wbDo6aXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKICAgICByZXNldENvbGxl
Y3Rpb25JbmZvKCk7CiAKSW5kZXg6IFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX21pc2NpbXBsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX21p
c2NpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjEKZGlmZiAtcCAtdSAtcjEuMjEgV2Vi
Q29yZS9raHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuaAotLS0gV2ViQ29yZS9raHRtbC9odG1sL2h0
bWxfbWlzY2ltcGwuaAkxNiBBdWcgMjAwNSAyMzo1NzowNyAtMDAwMAkxLjIxCisrKyBXZWJDb3Jl
L2todG1sL2h0bWwvaHRtbF9taXNjaW1wbC5oCTIxIEF1ZyAyMDA1IDA1OjI4OjA5IC0wMDAwCkBA
IC04OSw5ICs4OSw5IEBAIHB1YmxpYzoKICAgICBIVE1MQ29sbGVjdGlvbkltcGwoTm9kZUltcGwg
Kl9iYXNlLCBpbnQgX3R5cGUpOwogICAgIHZpcnR1YWwgfkhUTUxDb2xsZWN0aW9uSW1wbCgpOwog
ICAgIAotICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKCkgY29uc3Q7CisgICAgdW5zaWduZWQgbGVu
Z3RoKCkgY29uc3Q7CiAgICAgCi0gICAgdmlydHVhbCBOb2RlSW1wbCAqaXRlbSh1bnNpZ25lZCBs
b25nIGluZGV4KSBjb25zdDsKKyAgICB2aXJ0dWFsIE5vZGVJbXBsICppdGVtKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdDsKICAgICB2aXJ0dWFsIE5vZGVJbXBsICpmaXJzdEl0ZW0oKSBjb25zdDsKICAg
ICB2aXJ0dWFsIE5vZGVJbXBsICpuZXh0SXRlbSgpIGNvbnN0OwogCkBAIC0xMjIsNyArMTIyLDcg
QEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCBOb2RlSW1wbCAqdHJhdmVyc2VOZXh0SXRlbShO
b2RlSW1wbCAqc3RhcnQpIGNvbnN0OwogICAgIGJvb2wgY2hlY2tGb3JOYW1lTWF0Y2goTm9kZUlt
cGwgKm5vZGUsIGJvb2wgY2hlY2tOYW1lLCBjb25zdCBET01TdHJpbmcgJm5hbWUsIGJvb2wgY2Fz
ZVNlbnNpdGl2ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGNhbGNMZW5ndGgo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGNhbGNMZW5ndGgoKSBjb25zdDsKICAgICB2
aXJ0dWFsIHZvaWQgcmVzZXRDb2xsZWN0aW9uSW5mbygpIGNvbnN0OwogICAgIC8vIHRoZSBiYXNl
IG5vZGUsIHRoZSBjb2xsZWN0aW9uIHJlZmVycyB0bwogICAgIFNoYXJlZFB0cjxOb2RlSW1wbD4g
bV9iYXNlOwpAQCAtMTU2LDcgKzE1Niw3IEBAIHB1YmxpYzoKICAgICBIVE1MRm9ybUNvbGxlY3Rp
b25JbXBsKE5vZGVJbXBsKiBfYmFzZSk7CiAgICAgfkhUTUxGb3JtQ29sbGVjdGlvbkltcGwoKTsK
IAotICAgIHZpcnR1YWwgTm9kZUltcGwgKml0ZW0gKCB1bnNpZ25lZCBsb25nIGluZGV4ICkgY29u
c3Q7CisgICAgdmlydHVhbCBOb2RlSW1wbCAqaXRlbSAoIHVuc2lnbmVkIGluZGV4ICkgY29uc3Q7
CiAgICAgdmlydHVhbCBOb2RlSW1wbCAqZmlyc3RJdGVtKCkgY29uc3Q7CiAgICAgdmlydHVhbCBO
b2RlSW1wbCAqbmV4dEl0ZW0oKSBjb25zdDsKIApAQCAtMTY1LDcgKzE2NSw3IEBAIHB1YmxpYzoK
IAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVOYW1lQ2FjaGUoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgY2FsY0xlbmd0aCgpIGNvbnN0OworICAgIHZpcnR1
YWwgdW5zaWduZWQgY2FsY0xlbmd0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgTm9kZUltcGwgKmdl
dE5hbWVkSXRlbShOb2RlSW1wbCogY3VycmVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUsIGNvbnN0IERPTVN0cmluZyYgbmFtZSwgYm9vbCBjYXNlU2Vuc2l0aXZlKSBjb25zdDsKICAg
ICB2aXJ0dWFsIE5vZGVJbXBsICpuZXh0TmFtZWRJdGVtSW50ZXJuYWwoIGNvbnN0IERPTVN0cmlu
ZyAmbmFtZSApIGNvbnN0OwogcHJpdmF0ZToKSW5kZXg6IFdlYkNvcmUva2h0bWwvaHRtbC9odG1s
X29iamVjdGltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2h0bWwvaHRtbF9vYmplY3RpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43NApk
aWZmIC1wIC11IC1yMS43NCBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9vYmplY3RpbXBsLmNwcAot
LS0gV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5jcHAJMzAgSnVsIDIwMDUgMDI6
MzM6MTggLTAwMDAJMS43NAorKysgV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5j
cHAJMjEgQXVnIDIwMDUgMDU6Mjg6MTAgLTAwMDAKQEAgLTk2OSwxMiArOTY5LDEyIEBAIHZvaWQg
SFRNTE9iamVjdEVsZW1lbnRJbXBsOjpzZXRTdGFuZGJ5KGMKICAgICBzZXRBdHRyaWJ1dGUoc3Rh
bmRieUF0dHIsIHZhbHVlKTsKIH0KIAotbG9uZyBIVE1MT2JqZWN0RWxlbWVudEltcGw6OnRhYklu
ZGV4KCkgY29uc3QKK2ludCBIVE1MT2JqZWN0RWxlbWVudEltcGw6OnRhYkluZGV4KCkgY29uc3QK
IHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHRhYmluZGV4QXR0cikudG9JbnQoKTsKIH0KIAot
dm9pZCBIVE1MT2JqZWN0RWxlbWVudEltcGw6OnNldFRhYkluZGV4KGxvbmcgdGFiSW5kZXgpCit2
b2lkIEhUTUxPYmplY3RFbGVtZW50SW1wbDo6c2V0VGFiSW5kZXgoaW50IHRhYkluZGV4KQogewog
ICAgIHNldEF0dHJpYnV0ZSh0YWJpbmRleEF0dHIsIFFTdHJpbmc6Om51bWJlcih0YWJJbmRleCkp
OwogfQpJbmRleDogV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9vYmplY3RpbXBs
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzUKZGlmZiAtcCAtdSAtcjEuMzUgV2ViQ29yZS9r
aHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5oCi0tLSBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9v
YmplY3RpbXBsLmgJMjEgSnVsIDIwMDUgMDQ6MTA6NTMgLTAwMDAJMS4zNQorKysgV2ViQ29yZS9r
aHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5oCTIxIEF1ZyAyMDA1IDA1OjI4OjEwIC0wMDAwCkBA
IC0yMjEsOCArMjIxLDggQEAgcHVibGljOgogICAgIERPTVN0cmluZyBzdGFuZGJ5KCkgY29uc3Q7
CiAgICAgdm9pZCBzZXRTdGFuZGJ5KGNvbnN0IERPTVN0cmluZyAmKTsKIAotICAgIGxvbmcgdGFi
SW5kZXgoKSBjb25zdDsKLSAgICB2b2lkIHNldFRhYkluZGV4KGxvbmcpOworICAgIGludCB0YWJJ
bmRleCgpIGNvbnN0OworICAgIHZvaWQgc2V0VGFiSW5kZXgoaW50KTsKIAogICAgIERPTVN0cmlu
ZyB0eXBlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRUeXBlKGNvbnN0IERPTVN0cmluZyAmKTsKSW5k
ZXg6IFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuNTgKZGlmZiAtcCAtdSAtcjEuNTggV2ViQ29yZS9raHRtbC9o
dG1sL2h0bWxfdGFibGVpbXBsLmNwcAotLS0gV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfdGFibGVp
bXBsLmNwcAkzMCBKdWwgMjAwNSAwMjozMzoxOCAtMDAwMAkxLjU4CisrKyBXZWJDb3JlL2todG1s
L2h0bWwvaHRtbF90YWJsZWltcGwuY3BwCTIxIEF1ZyAyMDA1IDA1OjI4OjExIC0wMDAwCkBAIC0y
MTcsNyArMjE3LDcgQEAgdm9pZCBIVE1MVGFibGVFbGVtZW50SW1wbDo6ZGVsZXRlQ2FwdGlvbgog
ICAgIHRDYXB0aW9uID0gMDsKIH0KIAotSFRNTEVsZW1lbnRJbXBsICpIVE1MVGFibGVFbGVtZW50
SW1wbDo6aW5zZXJ0Um93KCBsb25nIGluZGV4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQorSFRNTEVs
ZW1lbnRJbXBsICpIVE1MVGFibGVFbGVtZW50SW1wbDo6aW5zZXJ0Um93KCBpbnQgaW5kZXgsIGlu
dCAmZXhjZXB0aW9uY29kZSApCiB7CiAgICAgLy8gVGhlIERPTSByZXF1aXJlcyB0aGF0IHdlIGNy
ZWF0ZSBhIHRib2R5IGlmIHRoZSB0YWJsZSBpcyBlbXB0eQogICAgIC8vIChjZiBET00yVFMgSFRN
TFRhYmxlRWxlbWVudDMxIHRlc3QpCkBAIC0yNzYsNyArMjc2LDcgQEAgSFRNTEVsZW1lbnRJbXBs
ICpIVE1MVGFibGVFbGVtZW50SW1wbDo6aQogICAgIH0KIH0KIAotdm9pZCBIVE1MVGFibGVFbGVt
ZW50SW1wbDo6ZGVsZXRlUm93KCBsb25nIGluZGV4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQordm9p
ZCBIVE1MVGFibGVFbGVtZW50SW1wbDo6ZGVsZXRlUm93KCBpbnQgaW5kZXgsIGludCAmZXhjZXB0
aW9uY29kZSApCiB7CiAgICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKiBzZWN0aW9uID0g
MEw7CiAgICAgTm9kZUltcGwgKm5vZGUgPSBmaXJzdENoaWxkKCk7CkBAIC04MDIsNyArODAyLDcg
QEAgTm9kZUltcGwgKkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbDo6YQogCiAvLyB0aGVzZSBm
dW5jdGlvbnMgYXJlIHJhdGhlciBzbG93LCBzaW5jZSB3ZSBuZWVkIHRvIGdldCB0aGUgcm93IGF0
CiAvLyB0aGUgaW5kZXguLi4gYnV0IHRoZXkgYXJlbid0IHVzZWQgZHVyaW5nIHVzdWFsIEhUTUwg
cGFyc2luZyBhbnl3YXkKLUhUTUxFbGVtZW50SW1wbCAqSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJ
bXBsOjppbnNlcnRSb3coIGxvbmcgaW5kZXgsIGludCYgZXhjZXB0aW9uY29kZSApCitIVE1MRWxl
bWVudEltcGwgKkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbDo6aW5zZXJ0Um93KCBpbnQgaW5k
ZXgsIGludCYgZXhjZXB0aW9uY29kZSApCiB7CiAgICAgSFRNTFRhYmxlUm93RWxlbWVudEltcGwg
KnIgPSAwTDsKICAgICBOb2RlTGlzdEltcGwgKmNoaWxkcmVuID0gY2hpbGROb2RlcygpOwpAQCAt
ODI5LDcgKzgyOSw3IEBAIEhUTUxFbGVtZW50SW1wbCAqSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQK
ICAgICByZXR1cm4gcjsKIH0KIAotdm9pZCBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGw6OmRl
bGV0ZVJvdyggbG9uZyBpbmRleCwgaW50ICZleGNlcHRpb25jb2RlICkKK3ZvaWQgSFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnRJbXBsOjpkZWxldGVSb3coIGludCBpbmRleCwgaW50ICZleGNlcHRpb25j
b2RlICkKIHsKICAgICBOb2RlTGlzdEltcGwgKmNoaWxkcmVuID0gY2hpbGROb2RlcygpOwogICAg
IGludCBudW1Sb3dzID0gY2hpbGRyZW4gPyAoaW50KWNoaWxkcmVuLT5sZW5ndGgoKSA6IDA7CkBA
IC05MjMsNyArOTIzLDcgQEAgTm9kZUltcGwgKkhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsOjphZGRD
aAogICAgIHJldHVybiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGw6OmFkZENoaWxkKGNoaWxkKTsK
IH0KIAotbG9uZyBIVE1MVGFibGVSb3dFbGVtZW50SW1wbDo6cm93SW5kZXgoKSBjb25zdAoraW50
IEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsOjpyb3dJbmRleCgpIGNvbnN0CiB7CiAgICAgaW50IHJJ
bmRleCA9IDA7CiAKQEAgLTk2MCw3ICs5NjAsNyBAQCBsb25nIEhUTUxUYWJsZVJvd0VsZW1lbnRJ
bXBsOjpyb3dJbmRleCgpCiAgICAgcmV0dXJuIC0xOwogfQogCi1sb25nIEhUTUxUYWJsZVJvd0Vs
ZW1lbnRJbXBsOjpzZWN0aW9uUm93SW5kZXgoKSBjb25zdAoraW50IEhUTUxUYWJsZVJvd0VsZW1l
bnRJbXBsOjpzZWN0aW9uUm93SW5kZXgoKSBjb25zdAogewogICAgIGludCBySW5kZXggPSAwOwog
ICAgIGNvbnN0IE5vZGVJbXBsICpuID0gdGhpczsKQEAgLTk3NCw3ICs5NzQsNyBAQCBsb25nIEhU
TUxUYWJsZVJvd0VsZW1lbnRJbXBsOjpzZWN0aW9uUm93CiAgICAgcmV0dXJuIHJJbmRleDsKIH0K
IAotSFRNTEVsZW1lbnRJbXBsICpIVE1MVGFibGVSb3dFbGVtZW50SW1wbDo6aW5zZXJ0Q2VsbCgg
bG9uZyBpbmRleCwgaW50ICZleGNlcHRpb25jb2RlICkKK0hUTUxFbGVtZW50SW1wbCAqSFRNTFRh
YmxlUm93RWxlbWVudEltcGw6Omluc2VydENlbGwoIGludCBpbmRleCwgaW50ICZleGNlcHRpb25j
b2RlICkKIHsKICAgICBIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgKmMgPSAwTDsKICAgICBOb2Rl
TGlzdEltcGwgKmNoaWxkcmVuID0gY2hpbGROb2RlcygpOwpAQCAtOTk5LDcgKzk5OSw3IEBAIEhU
TUxFbGVtZW50SW1wbCAqSFRNTFRhYmxlUm93RWxlbWVudEltcGwKICAgICByZXR1cm4gYzsKIH0K
IAotdm9pZCBIVE1MVGFibGVSb3dFbGVtZW50SW1wbDo6ZGVsZXRlQ2VsbCggbG9uZyBpbmRleCwg
aW50ICZleGNlcHRpb25jb2RlICkKK3ZvaWQgSFRNTFRhYmxlUm93RWxlbWVudEltcGw6OmRlbGV0
ZUNlbGwoIGludCBpbmRleCwgaW50ICZleGNlcHRpb25jb2RlICkKIHsKICAgICBOb2RlTGlzdElt
cGwgKmNoaWxkcmVuID0gY2hpbGROb2RlcygpOwogICAgIGludCBudW1DZWxscyA9IGNoaWxkcmVu
ID8gY2hpbGRyZW4tPmxlbmd0aCgpIDogMDsKQEAgLTEwODcsNyArMTA4Nyw3IEBAIEhUTUxUYWJs
ZUNlbGxFbGVtZW50SW1wbDo6fkhUTUxUYWJsZUNlbGwKIHsKIH0KIAotbG9uZyBIVE1MVGFibGVD
ZWxsRWxlbWVudEltcGw6OmNlbGxJbmRleCgpIGNvbnN0CitpbnQgSFRNTFRhYmxlQ2VsbEVsZW1l
bnRJbXBsOjpjZWxsSW5kZXgoKSBjb25zdAogewogICAgIGludCBpbmRleCA9IDA7CiAgICAgZm9y
IChjb25zdCBOb2RlSW1wbCAqIG5vZGUgPSBwcmV2aW91c1NpYmxpbmcoKTsgbm9kZTsgbm9kZSA9
IG5vZGUtPnByZXZpb3VzU2libGluZygpKSB7CkBAIC0xMjI1LDcgKzEyMjUsNyBAQCB2b2lkIEhU
TUxUYWJsZUNlbGxFbGVtZW50SW1wbDo6c2V0Q2hPZmYoCiAgICAgc2V0QXR0cmlidXRlKGNoYXJv
ZmZBdHRyLCB2YWx1ZSk7CiB9CiAKLXZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOjpzZXRD
b2xTcGFuKGxvbmcgbikKK3ZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOjpzZXRDb2xTcGFu
KGludCBuKQogewogICAgIHNldEF0dHJpYnV0ZShjb2xzcGFuQXR0ciwgUVN0cmluZzo6bnVtYmVy
KG4pKTsKIH0KQEAgLTEyNjAsNyArMTI2MCw3IEBAIHZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJ
bXBsOjpzZXROb1dyYXAKICAgICBzZXRBdHRyaWJ1dGUobm93cmFwQXR0ciwgYiA/ICIiIDogMCk7
CiB9CiAKLXZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOjpzZXRSb3dTcGFuKGxvbmcgbikK
K3ZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOjpzZXRSb3dTcGFuKGludCBuKQogewogICAg
IHNldEF0dHJpYnV0ZShyb3dzcGFuQXR0ciwgUVN0cmluZzo6bnVtYmVyKG4pKTsKIH0KQEAgLTEz
NTYsNyArMTM1Niw3IEBAIHZvaWQgSFRNTFRhYmxlQ29sRWxlbWVudEltcGw6OnNldENoT2ZmKGMK
ICAgICBzZXRBdHRyaWJ1dGUoY2hhcm9mZkF0dHIsIHZhbHVlKTsKIH0KIAotdm9pZCBIVE1MVGFi
bGVDb2xFbGVtZW50SW1wbDo6c2V0U3Bhbihsb25nIG4pCit2b2lkIEhUTUxUYWJsZUNvbEVsZW1l
bnRJbXBsOjpzZXRTcGFuKGludCBuKQogewogICAgIHNldEF0dHJpYnV0ZShzcGFuQXR0ciwgUVN0
cmluZzo6bnVtYmVyKG4pKTsKIH0KSW5kZXg6IFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX3RhYmxl
aW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwv
aHRtbF90YWJsZWltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNgpkaWZmIC1wIC11IC1y
MS4yNiBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF90YWJsZWltcGwuaAotLS0gV2ViQ29yZS9raHRt
bC9odG1sL2h0bWxfdGFibGVpbXBsLmgJMzAgSnVsIDIwMDUgMDI6MzM6MTggLTAwMDAJMS4yNgor
KysgV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmgJMjEgQXVnIDIwMDUgMDU6Mjg6
MTEgLTAwMDAKQEAgLTgzLDggKzgzLDggQEAgcHVibGljOgogICAgIHZvaWQgZGVsZXRlVEZvb3Qg
KCAgKTsKICAgICBIVE1MRWxlbWVudEltcGwgKmNyZWF0ZUNhcHRpb24gKCAgKTsKICAgICB2b2lk
IGRlbGV0ZUNhcHRpb24gKCAgKTsKLSAgICBIVE1MRWxlbWVudEltcGwgKmluc2VydFJvdyAoIGxv
bmcgaW5kZXgsIGludCAmZXhjZXB0aW9uY29kZSApOwotICAgIHZvaWQgZGVsZXRlUm93ICggbG9u
ZyBpbmRleCwgaW50ICZleGNlcHRpb25jb2RlICk7CisgICAgSFRNTEVsZW1lbnRJbXBsICppbnNl
cnRSb3cgKCBpbnQgaW5kZXgsIGludCAmZXhjZXB0aW9uY29kZSApOworICAgIHZvaWQgZGVsZXRl
Um93ICggaW50IGluZGV4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKIAogICAgIGtodG1sOjpTaGFy
ZWRQdHI8SFRNTENvbGxlY3Rpb25JbXBsPiByb3dzKCk7CiAgICAga2h0bWw6OlNoYXJlZFB0cjxI
VE1MQ29sbGVjdGlvbkltcGw+IHRCb2RpZXMoKTsKQEAgLTE3MSw4ICsxNzEsOCBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIE5vZGVJbXBsICphZGRDaGlsZChOb2RlSW1wbCAqY2hpbGQpOwogICAg
IAotICAgIEhUTUxFbGVtZW50SW1wbCAqaW5zZXJ0Um93ICggbG9uZyBpbmRleCwgaW50JiBleGNl
cHRpb25jb2RlICk7Ci0gICAgdm9pZCBkZWxldGVSb3cgKCBsb25nIGluZGV4LCBpbnQmIGV4Y2Vw
dGlvbmNvZGUgKTsKKyAgICBIVE1MRWxlbWVudEltcGwgKmluc2VydFJvdyAoIGludCBpbmRleCwg
aW50JiBleGNlcHRpb25jb2RlICk7CisgICAgdm9pZCBkZWxldGVSb3cgKCBpbnQgaW5kZXgsIGlu
dCYgZXhjZXB0aW9uY29kZSApOwogCiAgICAgaW50IG51bVJvd3MoKSBjb25zdDsKIApAQCAtMjA1
LDE1ICsyMDUsMTUgQEAgcHVibGljOgogCQogICAgIHZpcnR1YWwgTm9kZUltcGwgKmFkZENoaWxk
KE5vZGVJbXBsICpjaGlsZCk7CiAgICAgCi0gICAgbG9uZyByb3dJbmRleCgpIGNvbnN0OwotICAg
IGxvbmcgc2VjdGlvblJvd0luZGV4KCkgY29uc3Q7CisgICAgaW50IHJvd0luZGV4KCkgY29uc3Q7
CisgICAgaW50IHNlY3Rpb25Sb3dJbmRleCgpIGNvbnN0OwogCi0gICAgSFRNTEVsZW1lbnRJbXBs
ICppbnNlcnRDZWxsICggbG9uZyBpbmRleCwgaW50ICZleGNlcHRpb25jb2RlICk7Ci0gICAgdm9p
ZCBkZWxldGVDZWxsICggbG9uZyBpbmRleCwgaW50ICZleGNlcHRpb25jb2RlICk7CisgICAgSFRN
TEVsZW1lbnRJbXBsICppbnNlcnRDZWxsICggaW50IGluZGV4LCBpbnQgJmV4Y2VwdGlvbmNvZGUg
KTsKKyAgICB2b2lkIGRlbGV0ZUNlbGwgKCBpbnQgaW5kZXgsIGludCAmZXhjZXB0aW9uY29kZSAp
OwogCi0gICAgdm9pZCBzZXRSb3dJbmRleCggbG9uZyAgKTsKKyAgICB2b2lkIHNldFJvd0luZGV4
KCBpbnQgICk7CiAKLSAgICB2b2lkIHNldFNlY3Rpb25Sb3dJbmRleCggbG9uZyAgKTsKKyAgICB2
b2lkIHNldFNlY3Rpb25Sb3dJbmRleCggaW50ICApOwogCiAgICAga2h0bWw6OlNoYXJlZFB0cjxI
VE1MQ29sbGVjdGlvbkltcGw+IGNlbGxzKCk7CiAgICAgdm9pZCBzZXRDZWxscyhIVE1MQ29sbGVj
dGlvbkltcGwgKiwgaW50ICZleGNlcHRpb24pOwpAQCAtMjQ4LDcgKzI0OCw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJl
dHVybiBUYWdTdGF0dXNPcHRpb25hbDsgfQogICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkg
Y29uc3QgeyByZXR1cm4gNjsgfQogCi0gICAgbG9uZyBjZWxsSW5kZXgoKSBjb25zdDsKKyAgICBp
bnQgY2VsbEluZGV4KCkgY29uc3Q7CiAKICAgICBpbnQgY29sKCkgY29uc3QgeyByZXR1cm4gX2Nv
bDsgfQogICAgIHZvaWQgc2V0Q29sKGludCBjb2wpIHsgX2NvbCA9IGNvbDsgfQpAQCAtMjY2LDcg
KzI2Niw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUo
QXR0cmlidXRlSW1wbCAqYXR0cikgY29uc3Q7CiAKLSAgICB2b2lkIHNldENlbGxJbmRleCggbG9u
ZyAgKTsKKyAgICB2b2lkIHNldENlbGxJbmRleCggaW50ICApOwogCiAgICAgRE9NU3RyaW5nIGFi
YnIoKSBjb25zdDsKICAgICB2b2lkIHNldEFiYnIoIGNvbnN0IERPTVN0cmluZyAmICk7CkBAIC0y
ODYsNyArMjg2LDcgQEAgcHVibGljOgogICAgIERPTVN0cmluZyBjaE9mZigpIGNvbnN0OwogICAg
IHZvaWQgc2V0Q2hPZmYoIGNvbnN0IERPTVN0cmluZyAmICk7CiAKLSAgICB2b2lkIHNldENvbFNw
YW4oIGxvbmcgICk7CisgICAgdm9pZCBzZXRDb2xTcGFuKCBpbnQgICk7CiAKICAgICBET01TdHJp
bmcgaGVhZGVycygpIGNvbnN0OwogICAgIHZvaWQgc2V0SGVhZGVycyggY29uc3QgRE9NU3RyaW5n
ICYgKTsKQEAgLTI5Nyw3ICsyOTcsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBub1dyYXAoKSBjb25z
dDsKICAgICB2b2lkIHNldE5vV3JhcCggYm9vbCApOwogCi0gICAgdm9pZCBzZXRSb3dTcGFuKCBs
b25nICk7CisgICAgdm9pZCBzZXRSb3dTcGFuKCBpbnQgKTsKIAogICAgIERPTVN0cmluZyBzY29w
ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0U2NvcGUoIGNvbnN0IERPTVN0cmluZyAmICk7CkBAIC0z
MzMsNyArMzMzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBj
b25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlSW1wbCAqYXR0cik7CiAKLSAgICBsb25nIHNwYW4oKSBjb25zdCB7IHJldHVybiBfc3Bhbjsg
fQorICAgIGludCBzcGFuKCkgY29uc3QgeyByZXR1cm4gX3NwYW47IH0KIAogICAgIERPTVN0cmlu
ZyBhbGlnbigpIGNvbnN0OwogICAgIHZvaWQgc2V0QWxpZ24oIGNvbnN0IERPTVN0cmluZyAmICk7
CkBAIC0zNDQsNyArMzQ0LDcgQEAgcHVibGljOgogICAgIERPTVN0cmluZyBjaE9mZigpIGNvbnN0
OwogICAgIHZvaWQgc2V0Q2hPZmYoIGNvbnN0IERPTVN0cmluZyAmICk7CiAKLSAgICB2b2lkIHNl
dFNwYW4oIGxvbmcgICk7CisgICAgdm9pZCBzZXRTcGFuKCBpbnQgICk7CiAKICAgICBET01TdHJp
bmcgdkFsaWduKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRWQWxpZ24oIGNvbnN0IERPTVN0cmluZyAm
ICk7CkluZGV4OiBXZWJDb3JlL2todG1sL2h0bWwvaHRtbHBhcnNlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1scGFyc2VyLmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xMDMKZGlmZiAtcCAtdSAtcjEuMTAzIFdlYkNvcmUva2h0bWwv
aHRtbC9odG1scGFyc2VyLmNwcAotLS0gV2ViQ29yZS9raHRtbC9odG1sL2h0bWxwYXJzZXIuY3Bw
CTE5IEF1ZyAyMDA1IDIzOjU4OjI3IC0wMDAwCTEuMTAzCisrKyBXZWJDb3JlL2todG1sL2h0bWwv
aHRtbHBhcnNlci5jcHAJMjEgQXVnIDIwMDUgMDU6Mjg6MTIgLTAwMDAKQEAgLTM0Nyw3ICszNDcs
NyBAQCBib29sIEhUTUxQYXJzZXI6OmhhbmRsZUVycm9yKE5vZGVJbXBsKiBuCiAgICAgICAgICAg
ICAgICAgICAgIE5hbWVkQXR0ck1hcEltcGwgKm1hcCA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBs
Kj4obiktPmF0dHJpYnV0ZXModHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIE5hbWVkQXR0ck1h
cEltcGwgKmJtYXAgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KGRvYygpLT5maXJzdENoaWxk
KCkpLT5hdHRyaWJ1dGVzKGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgYm9vbCBjaGFuZ2Vk
ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9uZyBsID0gMDsg
bWFwICYmIGwgPCBtYXAtPmxlbmd0aCgpOyArK2wpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBsID0gMDsgbWFwICYmIGwgPCBtYXAtPmxlbmd0aCgpOyArK2wpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUltcGwqIGl0ID0gbWFwLT5hdHRyaWJ1dGVJdGVt
KGwpOwogICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9ICFibWFwLT5nZXRBdHRyaWJ1
dGVJdGVtKGl0LT5uYW1lKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYm1hcC0+aW5zZXJ0
QXR0cmlidXRlKGl0LT5jbG9uZShmYWxzZSkpOwpAQCAtMzg0LDcgKzM4NCw3IEBAIGJvb2wgSFRN
TFBhcnNlcjo6aGFuZGxlRXJyb3IoTm9kZUltcGwqIG4KICAgICAgICAgICAgICAgICBOYW1lZEF0
dHJNYXBJbXBsICptYXAgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KG4pLT5hdHRyaWJ1dGVz
KHRydWUpOwogICAgICAgICAgICAgICAgIE5hbWVkQXR0ck1hcEltcGwgKmJtYXAgPSBkb2MoKS0+
Ym9keSgpLT5hdHRyaWJ1dGVzKGZhbHNlKTsKICAgICAgICAgICAgICAgICBib29sIGNoYW5nZWQg
PSBmYWxzZTsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvbmcgbCA9IDA7IG1hcCAm
JiBsIDwgbWFwLT5sZW5ndGgoKTsgKytsKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBsID0gMDsgbWFwICYmIGwgPCBtYXAtPmxlbmd0aCgpOyArK2wpIHsKICAgICAgICAgICAgICAg
ICAgICAgQXR0cmlidXRlSW1wbCogaXQgPSBtYXAtPmF0dHJpYnV0ZUl0ZW0obCk7CiAgICAgICAg
ICAgICAgICAgICAgIGNoYW5nZWQgPSAhYm1hcC0+Z2V0QXR0cmlidXRlSXRlbShpdC0+bmFtZSgp
KTsKICAgICAgICAgICAgICAgICAgICAgYm1hcC0+aW5zZXJ0QXR0cmlidXRlKGl0LT5jbG9uZShm
YWxzZSkpOwpJbmRleDogV2ViQ29yZS9raHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbHRva2VuaXpl
ci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTA1CmRpZmYgLXAgLXUgLXIxLjEwNSBXZWJD
b3JlL2todG1sL2h0bWwvaHRtbHRva2VuaXplci5jcHAKLS0tIFdlYkNvcmUva2h0bWwvaHRtbC9o
dG1sdG9rZW5pemVyLmNwcAk5IEF1ZyAyMDA1IDIyOjIyOjIxIC0wMDAwCTEuMTA1CisrKyBXZWJD
b3JlL2todG1sL2h0bWwvaHRtbHRva2VuaXplci5jcHAJMjEgQXVnIDIwMDUgMDU6Mjg6MTQgLTAw
MDAKQEAgLTE4NTgsMTAgKzE4NTgsMTAgQEAgdm9pZCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9r
ZW4oKQogICAgICAgICBrZERlYnVnKCA2MDM2ICkgPDwgIlRva2VuIGlzIEZMQVQhIiA8PCBlbmRs
OwogICAgIGlmKCF0ZXh0LmlzTnVsbCgpKQogICAgICAgICBrZERlYnVnKCA2MDM2ICkgPDwgInRl
eHQ6IFwiIiA8PCB0ZXh0IDw8ICJcIiIgPDwgZW5kbDsKLSAgICB1bnNpZ25lZCBsb25nIGwgPSBj
dXJyVG9rZW4uYXR0cnMgPyBjdXJyVG9rZW4uYXR0cnMtPmxlbmd0aCgpIDogMDsKKyAgICB1bnNp
Z25lZCBsID0gY3VyclRva2VuLmF0dHJzID8gY3VyclRva2VuLmF0dHJzLT5sZW5ndGgoKSA6IDA7
CiAgICAgaWYobCkgewogICAgICAgICBrZERlYnVnKCA2MDM2ICkgPDwgIkF0dHJpYnV0ZXM6ICIg
PDwgbCA8PCBlbmRsOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgPCBsOyAr
K2kpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGw7ICsraSkgewogICAgICAg
ICAgICAgQXR0cmlidXRlSW1wbCogYyA9IGN1cnJUb2tlbi5hdHRycy0+YXR0cmlidXRlSXRlbShp
KTsKICAgICAgICAgICAgIGtkRGVidWcoIDYwMzYgKSA8PCAiICAgICIgPDwgYy0+bmFtZSgpLnN0
cmluZygpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIj1cIiIgPDwgYy0+dmFsdWUo
KS5zdHJpbmcoKSA8PCAiXCIiIDw8IGVuZGw7CkluZGV4OiBXZWJDb3JlL2todG1sL21pc2MvbG9h
ZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvbWlzYy9s
b2FkZXIuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40MApkaWZmIC1wIC11IC1yMS40MCBXZWJD
b3JlL2todG1sL21pc2MvbG9hZGVyLmgKLS0tIFdlYkNvcmUva2h0bWwvbWlzYy9sb2FkZXIuaAky
NyBNYXkgMjAwNSAyMjo1NToyNCAtMDAwMAkxLjQwCisrKyBXZWJDb3JlL2todG1sL21pc2MvbG9h
ZGVyLmgJMjEgQXVnIDIwMDUgMDU6Mjg6MTUgLTAwMDAKQEAgLTcyNyw4ICs3MjcsNiBAQCBwcm90
ZWN0ZWQ6CiAgICAgCiAgICAgICAgIHN0YXRpYyBMb2FkZXIgKm1fbG9hZGVyOwogICAgIAotICAg
ICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBzX3VsUmVmQ250OwotICAgIAogICAgICAgICBzdGF0
aWMgdm9pZCBtb3ZlVG9IZWFkT2ZMUlVMaXN0KENhY2hlZE9iamVjdCAqKTsKICAgICAKICAgICAg
ICAgc3RhdGljIExSVUxpc3QgKm1fTFJVTGlzdHM7CkluZGV4OiBXZWJDb3JlL2todG1sL3JlbmRl
cmluZy9yZW5kZXJfYmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfYmxvY2suY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjE5OApkaWZmIC1wIC11IC1yMS4xOTggV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVy
X2Jsb2NrLmNwcAotLS0gV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Jsb2NrLmNwcAkx
OSBBdWcgMjAwNSAyMzozODozOSAtMDAwMAkxLjE5OAorKysgV2ViQ29yZS9raHRtbC9yZW5kZXJp
bmcvcmVuZGVyX2Jsb2NrLmNwcAkyMSBBdWcgMjAwNSAwNToyODoxOCAtMDAwMApAQCAtMjU2NSw3
ICsyNTY1LDcgQEAgUG9zaXRpb24gUmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yUmVuZGVyZQogICAg
IGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CiAKLSAgICBsb25nIG9mZnNl
dCA9IHN0YXJ0ID8gbm9kZS0+Y2FyZXRNaW5PZmZzZXQoKSA6IG5vZGUtPmNhcmV0TWF4T2Zmc2V0
KCk7CisgICAgaW50IG9mZnNldCA9IHN0YXJ0ID8gbm9kZS0+Y2FyZXRNaW5PZmZzZXQoKSA6IG5v
ZGUtPmNhcmV0TWF4T2Zmc2V0KCk7CiAgICAgcmV0dXJuIFBvc2l0aW9uKG5vZGUsIG9mZnNldCk7
CiB9CiAKSW5kZXg6IFdlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ici5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9i
ci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjcKZGlmZiAtcCAtdSAtcjEuMjcgV2ViQ29y
ZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2JyLmNwcAotLS0gV2ViQ29yZS9raHRtbC9yZW5kZXJp
bmcvcmVuZGVyX2JyLmNwcAkxNCBGZWIgMjAwNSAxODoxOToxOCAtMDAwMAkxLjI3CisrKyBXZWJD
b3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfYnIuY3BwCTIxIEF1ZyAyMDA1IDA1OjI4OjE4IC0w
MDAwCkBAIC04NiwxNyArODYsMTcgQEAgdm9pZCBSZW5kZXJCUjo6c2V0U3R5bGUoUmVuZGVyU3R5
bGUqIF9zdAogICAgIG1fbGluZUhlaWdodCA9IC0xOwogfQogCi1sb25nIFJlbmRlckJSOjpjYXJl
dE1pbk9mZnNldCgpIGNvbnN0IAoraW50IFJlbmRlckJSOjpjYXJldE1pbk9mZnNldCgpIGNvbnN0
IAogeyAKICAgICByZXR1cm4gMDsgCiB9CiAKLWxvbmcgUmVuZGVyQlI6OmNhcmV0TWF4T2Zmc2V0
KCkgY29uc3QgCitpbnQgUmVuZGVyQlI6OmNhcmV0TWF4T2Zmc2V0KCkgY29uc3QgCiB7IAogICAg
IHJldHVybiAxOyAKIH0KIAotdW5zaWduZWQgbG9uZyBSZW5kZXJCUjo6Y2FyZXRNYXhSZW5kZXJl
ZE9mZnNldCgpIGNvbnN0Cit1bnNpZ25lZCBSZW5kZXJCUjo6Y2FyZXRNYXhSZW5kZXJlZE9mZnNl
dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIDE7CiB9CkBAIC0xMjIsNyArMTIyLDcgQEAgUVJlY3Qg
UmVuZGVyQlI6OmNhcmV0UmVjdChpbnQgb2Zmc2V0LCBFQQogICAgIHJldHVybiBRUmVjdCh4UG9z
KCkgKyBhYnN4LCB5UG9zKCkgKyBhYnN5LCAxLCBsaW5lSGVpZ2h0KGZhbHNlKSk7CiB9CiAKLUlu
bGluZUJveCAqUmVuZGVyQlI6OmlubGluZUJveChsb25nIG9mZnNldCwgRUFmZmluaXR5IGFmZmlu
aXR5KQorSW5saW5lQm94ICpSZW5kZXJCUjo6aW5saW5lQm94KGludCBvZmZzZXQsIEVBZmZpbml0
eSBhZmZpbml0eSkKIHsKICAgICByZXR1cm4gZmlyc3RUZXh0Qm94KCk7CiB9CkluZGV4OiBXZWJD
b3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfYnIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2JyLmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMzEKZGlmZiAtcCAtdSAtcjEuMzEgV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVu
ZGVyX2JyLmgKLS0tIFdlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ici5oCTI5IEp1bCAy
MDA1IDIzOjQyOjQ5IC0wMDAwCTEuMzEKKysrIFdlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRl
cl9ici5oCTIxIEF1ZyAyMDA1IDA1OjI4OjE4IC0wMDAwCkBAIC01OSwxNCArNTksMTQgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCBib29sIGlzQlIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAK
LSAgICB2aXJ0dWFsIGxvbmcgY2FyZXRNaW5PZmZzZXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGxv
bmcgY2FyZXRNYXhPZmZzZXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgY2Fy
ZXRNYXhSZW5kZXJlZE9mZnNldCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGNhcmV0TWluT2Zm
c2V0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgY2FyZXRNYXhPZmZzZXQoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGNhcmV0TWF4UmVuZGVyZWRPZmZzZXQoKSBjb25zdDsKICAgICAK
ICAgICB2aXJ0dWFsIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvckNvb3JkaW5hdGVzKGludCB4
LCBpbnQgeSk7CiAgICAgdmlydHVhbCBRUmVjdCBjYXJldFJlY3QoaW50IG9mZnNldCwgRUFmZmlu
aXR5IGFmZmluaXR5ID0gVVBTVFJFQU0sIGludCAqZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCk7
CiAKLSAgICB2aXJ0dWFsIElubGluZUJveCAqaW5saW5lQm94KGxvbmcgb2Zmc2V0LCBFQWZmaW5p
dHkgYWZmaW5pdHkgPSBVUFNUUkVBTSk7CisgICAgdmlydHVhbCBJbmxpbmVCb3ggKmlubGluZUJv
eChpbnQgb2Zmc2V0LCBFQWZmaW5pdHkgYWZmaW5pdHkgPSBVUFNUUkVBTSk7CiAgICAgCiBwcml2
YXRlOgogICAgIG11dGFibGUgc2hvcnQgbV9saW5lSGVpZ2h0OwpJbmRleDogV2ViQ29yZS9raHRt
bC9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfZm9ybS5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMTE1CmRpZmYgLXAgLXUgLXIxLjExNSBXZWJDb3JlL2todG1sL3JlbmRlcmluZy9y
ZW5kZXJfZm9ybS5jcHAKLS0tIFdlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNw
cAk4IEF1ZyAyMDA1IDIxOjExOjU5IC0wMDAwCTEuMTE1CisrKyBXZWJDb3JlL2todG1sL3JlbmRl
cmluZy9yZW5kZXJfZm9ybS5jcHAJMjEgQXVnIDIwMDUgMDU6Mjg6MTkgLTAwMDAKQEAgLTYyNyw3
ICs2MjcsNyBAQCB2b2lkIFJlbmRlckxpbmVFZGl0OjpzbG90VGV4dENoYW5nZWQoY29uCiAgICAg
ZWxlbWVudCgpLT5zZXRWYWx1ZUZyb21SZW5kZXJlcihuZXdUZXh0KTsKIH0KIAotbG9uZyBSZW5k
ZXJMaW5lRWRpdDo6c2VsZWN0aW9uU3RhcnQoKQoraW50IFJlbmRlckxpbmVFZGl0OjpzZWxlY3Rp
b25TdGFydCgpCiB7CiAgICAgS0xpbmVFZGl0ICpsaW5lRWRpdCA9IHN0YXRpY19jYXN0PEtMaW5l
RWRpdCAqPihtX3dpZGdldCk7CiAgICAgaW50IHN0YXJ0ID0gbGluZUVkaXQtPnNlbGVjdGlvblN0
YXJ0KCk7CkBAIC02MzYsNyArNjM2LDcgQEAgbG9uZyBSZW5kZXJMaW5lRWRpdDo6c2VsZWN0aW9u
U3RhcnQoKQogICAgIHJldHVybiBzdGFydDsKIH0KIAotbG9uZyBSZW5kZXJMaW5lRWRpdDo6c2Vs
ZWN0aW9uRW5kKCkKK2ludCBSZW5kZXJMaW5lRWRpdDo6c2VsZWN0aW9uRW5kKCkKIHsKICAgICBL
TGluZUVkaXQgKmxpbmVFZGl0ID0gc3RhdGljX2Nhc3Q8S0xpbmVFZGl0ICo+KG1fd2lkZ2V0KTsK
ICAgICBpbnQgc3RhcnQgPSBsaW5lRWRpdC0+c2VsZWN0aW9uU3RhcnQoKTsKQEAgLTY0NSwxNyAr
NjQ1LDE3IEBAIGxvbmcgUmVuZGVyTGluZUVkaXQ6OnNlbGVjdGlvbkVuZCgpCiAgICAgcmV0dXJu
IHN0YXJ0ICsgKGludClsaW5lRWRpdC0+c2VsZWN0ZWRUZXh0KCkubGVuZ3RoKCk7CiB9CiAKLXZv
aWQgUmVuZGVyTGluZUVkaXQ6OnNldFNlbGVjdGlvblN0YXJ0KGxvbmcgc3RhcnQpCit2b2lkIFJl
bmRlckxpbmVFZGl0OjpzZXRTZWxlY3Rpb25TdGFydChpbnQgc3RhcnQpCiB7Ci0gICAgaW50IHJl
YWxTdGFydCA9IGtNYXgoc3RhcnQsIDBMKTsKLSAgICBpbnQgbGVuZ3RoID0ga01heChzZWxlY3Rp
b25FbmQoKSAtIHJlYWxTdGFydCwgMEwpOworICAgIGludCByZWFsU3RhcnQgPSBrTWF4KHN0YXJ0
LCAwKTsKKyAgICBpbnQgbGVuZ3RoID0ga01heChzZWxlY3Rpb25FbmQoKSAtIHJlYWxTdGFydCwg
MCk7CiAgICAgc3RhdGljX2Nhc3Q8S0xpbmVFZGl0ICo+KG1fd2lkZ2V0KS0+c2V0U2VsZWN0aW9u
KHJlYWxTdGFydCwgbGVuZ3RoKTsKIH0KIAotdm9pZCBSZW5kZXJMaW5lRWRpdDo6c2V0U2VsZWN0
aW9uRW5kKGxvbmcgZW5kKQordm9pZCBSZW5kZXJMaW5lRWRpdDo6c2V0U2VsZWN0aW9uRW5kKGlu
dCBlbmQpCiB7CiAgICAgaW50IHN0YXJ0ID0gc2VsZWN0aW9uU3RhcnQoKTsKLSAgICBpbnQgcmVh
bEVuZCA9IGtNYXgoZW5kLCAwTCk7CisgICAgaW50IHJlYWxFbmQgPSBrTWF4KGVuZCwgMCk7CiAg
ICAgaW50IGxlbmd0aCA9IHJlYWxFbmQgLSBzdGFydDsKICAgICBpZiAobGVuZ3RoIDwgMCkgewog
ICAgICAgICBzdGFydCA9IHJlYWxFbmQ7CkBAIC02NjksMTAgKzY2OSwxMCBAQCB2b2lkIFJlbmRl
ckxpbmVFZGl0OjpzZWxlY3QoKQogICAgIHN0YXRpY19jYXN0PEtMaW5lRWRpdCo+KG1fd2lkZ2V0
KS0+c2VsZWN0QWxsKCk7CiB9CiAKLXZvaWQgUmVuZGVyTGluZUVkaXQ6OnNldFNlbGVjdGlvblJh
bmdlKGxvbmcgc3RhcnQsIGxvbmcgZW5kKQordm9pZCBSZW5kZXJMaW5lRWRpdDo6c2V0U2VsZWN0
aW9uUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKQogewotICAgIGludCByZWFsU3RhcnQgPSBrTWF4
KHN0YXJ0LCAwTCk7Ci0gICAgaW50IGxlbmd0aCA9IGtNYXgoZW5kIC0gcmVhbFN0YXJ0LCAwTCk7
CisgICAgaW50IHJlYWxTdGFydCA9IGtNYXgoc3RhcnQsIDApOworICAgIGludCBsZW5ndGggPSBr
TWF4KGVuZCAtIHJlYWxTdGFydCwgMCk7CiAgICAgc3RhdGljX2Nhc3Q8S0xpbmVFZGl0ICo+KG1f
d2lkZ2V0KS0+c2V0U2VsZWN0aW9uKHJlYWxTdGFydCwgbGVuZ3RoKTsKIH0KIApAQCAtMTQ3MCw3
ICsxNDcwLDcgQEAgdm9pZCBSZW5kZXJUZXh0QXJlYTo6Y2FsY01pbk1heFdpZHRoKCkKIAogICAg
IFFUZXh0RWRpdCogdyA9IHN0YXRpY19jYXN0PFFUZXh0RWRpdCo+KG1fd2lkZ2V0KTsKICNpZiBB
UFBMRV9DSEFOR0VTCi0gICAgUVNpemUgc2l6ZSh3LT5zaXplV2l0aENvbHVtbnNBbmRSb3dzKGtN
YXgoZWxlbWVudCgpLT5jb2xzKCksIDFMKSwga01heChlbGVtZW50KCktPnJvd3MoKSwgMUwpKSk7
CisgICAgUVNpemUgc2l6ZSh3LT5zaXplV2l0aENvbHVtbnNBbmRSb3dzKGtNYXgoZWxlbWVudCgp
LT5jb2xzKCksIDEpLCBrTWF4KGVsZW1lbnQoKS0+cm93cygpLCAxKSkpOwogI2Vsc2UKICAgICBj
b25zdCBRRm9udE1ldHJpY3MgJm0gPSBzdHlsZSgpLT5mb250TWV0cmljcygpOwogICAgIHctPnNl
dFRhYlN0b3BXaWR0aCg4ICogbS53aWR0aCgiICIpKTsKQEAgLTE1OTQsNyArMTU5NCw3IEBAIHZv
aWQgUmVuZGVyVGV4dEFyZWE6OnNsb3RUZXh0Q2hhbmdlZCgpCiAgICAgbV9kaXJ0eSA9IHRydWU7
CiB9CiAKLWxvbmcgUmVuZGVyVGV4dEFyZWE6OnNlbGVjdGlvblN0YXJ0KCkKK2ludCBSZW5kZXJU
ZXh0QXJlYTo6c2VsZWN0aW9uU3RhcnQoKQogewogICAgIFFUZXh0RWRpdCAqdGV4dEVkaXQgPSBz
dGF0aWNfY2FzdDxRVGV4dEVkaXQgKj4obV93aWRnZXQpOwogI2lmIEFQUExFX0NIQU5HRVMKQEAg
LTE2MDYsNyArMTYwNiw3IEBAIGxvbmcgUmVuZGVyVGV4dEFyZWE6OnNlbGVjdGlvblN0YXJ0KCkK
ICNlbmRpZgogfQogCi1sb25nIFJlbmRlclRleHRBcmVhOjpzZWxlY3Rpb25FbmQoKQoraW50IFJl
bmRlclRleHRBcmVhOjpzZWxlY3Rpb25FbmQoKQogewogICAgIFFUZXh0RWRpdCAqdGV4dEVkaXQg
PSBzdGF0aWNfY2FzdDxRVGV4dEVkaXQgKj4obV93aWRnZXQpOwogI2lmIEFQUExFX0NIQU5HRVMK
QEAgLTE2MTgsNyArMTYxOCw3IEBAIGxvbmcgUmVuZGVyVGV4dEFyZWE6OnNlbGVjdGlvbkVuZCgp
CiAjZW5kaWYKIH0KIAotdm9pZCBSZW5kZXJUZXh0QXJlYTo6c2V0U2VsZWN0aW9uU3RhcnQobG9u
ZyBzdGFydCkKK3ZvaWQgUmVuZGVyVGV4dEFyZWE6OnNldFNlbGVjdGlvblN0YXJ0KGludCBzdGFy
dCkKIHsKICAgICBRVGV4dEVkaXQgKnRleHRFZGl0ID0gc3RhdGljX2Nhc3Q8UVRleHRFZGl0ICo+
KG1fd2lkZ2V0KTsKICNpZiBBUFBMRV9DSEFOR0VTCkBAIC0xNjMwLDcgKzE2MzAsNyBAQCB2b2lk
IFJlbmRlclRleHRBcmVhOjpzZXRTZWxlY3Rpb25TdGFydChsCiAjZW5kaWYKIH0KIAotdm9pZCBS
ZW5kZXJUZXh0QXJlYTo6c2V0U2VsZWN0aW9uRW5kKGxvbmcgZW5kKQordm9pZCBSZW5kZXJUZXh0
QXJlYTo6c2V0U2VsZWN0aW9uRW5kKGludCBlbmQpCiB7CiAgICAgUVRleHRFZGl0ICp0ZXh0RWRp
dCA9IHN0YXRpY19jYXN0PFFUZXh0RWRpdCAqPihtX3dpZGdldCk7CiAjaWYgQVBQTEVfQ0hBTkdF
UwpAQCAtMTY0Nyw3ICsxNjQ3LDcgQEAgdm9pZCBSZW5kZXJUZXh0QXJlYTo6c2VsZWN0KCkKICAg
ICBzdGF0aWNfY2FzdDxRVGV4dEVkaXQgKj4obV93aWRnZXQpLT5zZWxlY3RBbGwoKTsKIH0KIAot
dm9pZCBSZW5kZXJUZXh0QXJlYTo6c2V0U2VsZWN0aW9uUmFuZ2UobG9uZyBzdGFydCwgbG9uZyBl
bmQpCit2b2lkIFJlbmRlclRleHRBcmVhOjpzZXRTZWxlY3Rpb25SYW5nZShpbnQgc3RhcnQsIGlu
dCBlbmQpCiB7CiAgICAgUVRleHRFZGl0ICp0ZXh0RWRpdCA9IHN0YXRpY19jYXN0PFFUZXh0RWRp
dCAqPihtX3dpZGdldCk7CiAjaWYgQVBQTEVfQ0hBTkdFUwpJbmRleDogV2ViQ29yZS9raHRtbC9y
ZW5kZXJpbmcvcmVuZGVyX2Zvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS41NApkaWZmIC1wIC11IC1yMS41NCBXZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfZm9y
bS5oCi0tLSBXZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfZm9ybS5oCTggQXVnIDIwMDUg
MjE6MTE6NTkgLTAwMDAJMS41NAorKysgV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zv
cm0uaAkyMSBBdWcgMjAwNSAwNToyODoyMCAtMDAwMApAQCAtMjA5LDEzICsyMDksMTMgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOwogICAgIHZpcnR1YWwg
dm9pZCBzZXRTdHlsZShSZW5kZXJTdHlsZSAqKTsKIAotICAgIGxvbmcgc2VsZWN0aW9uU3RhcnQo
KTsKLSAgICBsb25nIHNlbGVjdGlvbkVuZCgpOwotICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhcnQo
bG9uZyk7Ci0gICAgdm9pZCBzZXRTZWxlY3Rpb25FbmQobG9uZyk7CisgICAgaW50IHNlbGVjdGlv
blN0YXJ0KCk7CisgICAgaW50IHNlbGVjdGlvbkVuZCgpOworICAgIHZvaWQgc2V0U2VsZWN0aW9u
U3RhcnQoaW50KTsKKyAgICB2b2lkIHNldFNlbGVjdGlvbkVuZChpbnQpOwogICAgIAogICAgIHZv
aWQgc2VsZWN0KCk7Ci0gICAgdm9pZCBzZXRTZWxlY3Rpb25SYW5nZShsb25nLCBsb25nKTsKKyAg
ICB2b2lkIHNldFNlbGVjdGlvblJhbmdlKGludCwgaW50KTsKIAogICAgIEtMaW5lRWRpdCAqd2lk
Z2V0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8S0xpbmVFZGl0Kj4obV93aWRnZXQpOyB9
CiAgICAgRE9NOjpIVE1MSW5wdXRFbGVtZW50SW1wbCogZWxlbWVudCgpIGNvbnN0CkBAIC00MzYs
MTMgKzQzNiwxMyBAQCBwdWJsaWM6CiAKICAgICBRU3RyaW5nIHRleHQoKTsKIAotICAgIGxvbmcg
c2VsZWN0aW9uU3RhcnQoKTsKLSAgICBsb25nIHNlbGVjdGlvbkVuZCgpOwotICAgIHZvaWQgc2V0
U2VsZWN0aW9uU3RhcnQobG9uZyk7Ci0gICAgdm9pZCBzZXRTZWxlY3Rpb25FbmQobG9uZyk7Cisg
ICAgaW50IHNlbGVjdGlvblN0YXJ0KCk7CisgICAgaW50IHNlbGVjdGlvbkVuZCgpOworICAgIHZv
aWQgc2V0U2VsZWN0aW9uU3RhcnQoaW50KTsKKyAgICB2b2lkIHNldFNlbGVjdGlvbkVuZChpbnQp
OwogICAgIAogICAgIHZvaWQgc2VsZWN0KCk7Ci0gICAgdm9pZCBzZXRTZWxlY3Rpb25SYW5nZShs
b25nLCBsb25nKTsKKyAgICB2b2lkIHNldFNlbGVjdGlvblJhbmdlKGludCwgaW50KTsKICAgICAK
ICNpZiBBUFBMRV9DSEFOR0VTCiAgICAgdmlydHVhbCBib29sIGNhbkhhdmVJbnRyaW5zaWNNYXJn
aW5zKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpJbmRleDogV2ViQ29yZS9raHRtbC9yZW5kZXJp
bmcvcmVuZGVyX2ZyYW1lcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mcmFtZXMuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjczCmRpZmYgLXAgLXUgLXIxLjczIFdlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9m
cmFtZXMuY3BwCi0tLSBXZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfZnJhbWVzLmNwcAkz
MCBKdWwgMjAwNSAwMjozMzoyMyAtMDAwMAkxLjczCisrKyBXZWJDb3JlL2todG1sL3JlbmRlcmlu
Zy9yZW5kZXJfZnJhbWVzLmNwcAkyMSBBdWcgMjAwNSAwNToyODoyMCAtMDAwMApAQCAtNzU0LDcg
Kzc1NCw3IEBAIHZvaWQgUmVuZGVyUGFydE9iamVjdDo6dXBkYXRlV2lkZ2V0KCkKICAgICAgIC8v
IFR1cm4gdGhlIGF0dHJpYnV0ZXMgb2YgZWl0aGVyIHRoZSBFTUJFRCB0YWcgb3IgT0JKRUNUIHRh
ZyBpbnRvIGFycmF5cywgYnV0IGRvbid0IG92ZXJyaWRlIFBBUkFNIHZhbHVlcy4KICAgICAgIE5h
bWVkQXR0ck1hcEltcGwqIGF0dHJpYnV0ZXMgPSBlbWJlZE9yT2JqZWN0LT5hdHRyaWJ1dGVzKCk7
CiAgICAgICBpZiAoYXR0cmlidXRlcykgewotICAgICAgICAgIGZvciAodW5zaWduZWQgbG9uZyBp
ID0gMDsgaSA8IGF0dHJpYnV0ZXMtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYXR0cmlidXRlcy0+bGVuZ3RoKCk7ICsraSkgewogICAgICAgICAg
ICAgICBBdHRyaWJ1dGVJbXBsKiBpdCA9IGF0dHJpYnV0ZXMtPmF0dHJpYnV0ZUl0ZW0oaSk7CiAg
ICAgICAgICAgICAgIFFTdHJpbmcgbmFtZSA9IGl0LT5uYW1lKCkubG9jYWxOYW1lKCkuc3RyaW5n
KCk7CiAgICAgICAgICAgICAgIGlmIChlbWJlZCB8fCB1bmlxdWVQYXJhbU5hbWVzLmZpbmQobmFt
ZSkgPT0gMCkgewpAQCAtODM1LDcgKzgzNSw3IEBAIHZvaWQgUmVuZGVyUGFydE9iamVjdDo6dXBk
YXRlV2lkZ2V0KCkKICAgICAgIC8vIGFkZCBhbGwgYXR0cmlidXRlcyBzZXQgb24gdGhlIGVtYmVk
IG9iamVjdAogICAgICAgTmFtZWRBdHRyTWFwSW1wbCogYSA9IG8tPmF0dHJpYnV0ZXMoKTsKICAg
ICAgIGlmIChhKSB7Ci0gICAgICAgICAgZm9yICh1bnNpZ25lZCBsb25nIGkgPSAwOyBpIDwgYS0+
bGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhLT5s
ZW5ndGgoKTsgKytpKSB7CiAgICAgICAgICAgICAgIEF0dHJpYnV0ZUltcGwqIGl0ID0gYS0+YXR0
cmlidXRlSXRlbShpKTsKICAgICAgICAgICAgICAgcGFyYW1OYW1lcy5hcHBlbmQoaXQtPm5hbWUo
KS5sb2NhbE5hbWUoKS5zdHJpbmcoKSk7CiAgICAgICAgICAgICAgIHBhcmFtVmFsdWVzLmFwcGVu
ZChpdC0+dmFsdWUoKS5zdHJpbmcoKSk7CkluZGV4OiBXZWJDb3JlL2todG1sL3JlbmRlcmluZy9y
ZW5kZXJfbGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvcmVuZGVyaW5nL3JlbmRlcl9saW5lLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40Ngpk
aWZmIC1wIC11IC1yMS40NiBXZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfbGluZS5jcHAK
LS0tIFdlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9saW5lLmNwcAkxNSBBdWcgMjAwNSAw
NDozMTowNiAtMDAwMAkxLjQ2CisrKyBXZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfbGlu
ZS5jcHAJMjEgQXVnIDIwMDUgMDU6Mjg6MjEgLTAwMDAKQEAgLTExMiwxNyArMTEyLDE3IEBAIHZv
aWQgSW5saW5lQm94OjpzaG93VHJlZSgpIGNvbnN0CiB9CiAjZW5kaWYKIAotbG9uZyBJbmxpbmVC
b3g6OmNhcmV0TWluT2Zmc2V0KCkgY29uc3QgCitpbnQgSW5saW5lQm94OjpjYXJldE1pbk9mZnNl
dCgpIGNvbnN0IAogeyAKICAgICByZXR1cm4gMDsgCiB9CiAKLWxvbmcgSW5saW5lQm94OjpjYXJl
dE1heE9mZnNldCgpIGNvbnN0IAoraW50IElubGluZUJveDo6Y2FyZXRNYXhPZmZzZXQoKSBjb25z
dCAKIHsgCiAgICAgcmV0dXJuIDE7IAogfQogCi11bnNpZ25lZCBsb25nIElubGluZUJveDo6Y2Fy
ZXRNYXhSZW5kZXJlZE9mZnNldCgpIGNvbnN0IAordW5zaWduZWQgSW5saW5lQm94OjpjYXJldE1h
eFJlbmRlcmVkT2Zmc2V0KCkgY29uc3QgCiB7IAogICAgIHJldHVybiAxOyAKIH0KSW5kZXg6IFdl
YkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9saW5lLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9saW5lLmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMzAKZGlmZiAtcCAtdSAtcjEuMzAgV2ViQ29yZS9raHRtbC9yZW5kZXJp
bmcvcmVuZGVyX2xpbmUuaAotLS0gV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xpbmUu
aAkxNSBBdWcgMjAwNSAwNDozMTowNiAtMDAwMAkxLjMwCisrKyBXZWJDb3JlL2todG1sL3JlbmRl
cmluZy9yZW5kZXJfbGluZS5oCTIxIEF1ZyAyMDA1IDA1OjI4OjIyIC0wMDAwCkBAIC0xMzksOSAr
MTM5LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgaW50IGxlZnRPdmVyZmxvdygpIHsgcmV0dXJu
IHhQb3MoKTsgfQogICAgIHZpcnR1YWwgaW50IHJpZ2h0T3ZlcmZsb3coKSB7IHJldHVybiB4UG9z
KCkrd2lkdGgoKTsgfQogCi0gICAgdmlydHVhbCBsb25nIGNhcmV0TWluT2Zmc2V0KCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBsb25nIGNhcmV0TWF4T2Zmc2V0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1
bnNpZ25lZCBsb25nIGNhcmV0TWF4UmVuZGVyZWRPZmZzZXQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGludCBjYXJldE1pbk9mZnNldCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGNhcmV0TWF4T2Zm
c2V0KCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBjYXJldE1heFJlbmRlcmVkT2Zmc2V0
KCkgY29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGNsZWFyVHJ1bmNhdGlvbigpIHt9Owog
CkluZGV4OiBXZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfbGlzdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9saXN0
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42NgpkaWZmIC1wIC11IC1yMS42NiBXZWJDb3Jl
L2todG1sL3JlbmRlcmluZy9yZW5kZXJfbGlzdC5jcHAKLS0tIFdlYkNvcmUva2h0bWwvcmVuZGVy
aW5nL3JlbmRlcl9saXN0LmNwcAkzMCBKdWwgMjAwNSAwMjozMzoyMyAtMDAwMAkxLjY2CisrKyBX
ZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfbGlzdC5jcHAJMjEgQXVnIDIwMDUgMDU6Mjg6
MjIgLTAwMDAKQEAgLTU2Nyw3ICs1NjcsNyBAQCB2b2lkIFJlbmRlckxpc3RNYXJrZXI6OmNhbGNN
aW5NYXhXaWR0aCgpCiAgICAgY2FzZSBERUNJTUFMX0xFQURJTkdfWkVSTzoKICAgICAgICAgLy8g
IyMjIHVuc3VwcG9ydGVkLCB3ZSB1c2UgZGVjaW1hbCBpbnN0ZWFkCiAgICAgY2FzZSBMREVDSU1B
TDoKLSAgICAgICAgbV9pdGVtLnNwcmludGYoICIlbGQiLCBtX3ZhbHVlICk7CisgICAgICAgIG1f
aXRlbS5zcHJpbnRmKCAiJWQiLCBtX3ZhbHVlICk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
TE9XRVJfUk9NQU46CiAgICAgICAgIG1faXRlbSA9IHRvUm9tYW4oIG1fdmFsdWUsIGZhbHNlICk7
CkluZGV4OiBXZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfbGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfbGlzdC5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI0CmRpZmYgLXAgLXUgLXIxLjI0IFdlYkNvcmUva2h0
bWwvcmVuZGVyaW5nL3JlbmRlcl9saXN0LmgKLS0tIFdlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3Jl
bmRlcl9saXN0LmgJMjUgRmViIDIwMDUgMDA6MjU6MTIgLTAwMDAJMS4yNAorKysgV2ViQ29yZS9r
aHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xpc3QuaAkyMSBBdWcgMjAwNSAwNToyODoyMiAtMDAwMApA
QCAtNzgsNyArNzgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgUVN0cmluZyBtX2l0ZW07CiAgICAgQ2Fj
aGVkSW1hZ2UgKm1fbGlzdEltYWdlOwogICAgIFFQaXhtYXAgbV9saXN0UGl4bWFwOwotICAgIGxv
bmcgbV92YWx1ZTsKKyAgICBpbnQgbV92YWx1ZTsKICAgICBSZW5kZXJMaXN0SXRlbSogbV9saXN0
SXRlbTsKIH07CiAKQEAgLTEwMyw4ICsxMDMsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJv
b2wgaXNMaXN0SXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICAKLSAgICBsb25nIHZh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV9tYXJrZXItPm1fdmFsdWU7IH0KLSAgICB2b2lkIHNldFZh
bHVlKCBsb25nIHYgKSB7IHByZWRlZlZhbCA9IHY7IH0KKyAgICBpbnQgdmFsdWUoKSBjb25zdCB7
IHJldHVybiBtX21hcmtlci0+bV92YWx1ZTsgfQorICAgIHZvaWQgc2V0VmFsdWUoIGludCB2ICkg
eyBwcmVkZWZWYWwgPSB2OyB9CiAgICAgdm9pZCBjYWxjTGlzdFZhbHVlKCk7CiAgICAgCiAgICAg
dmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYgaSwgaW50IHhvZmYsIGludCB5b2ZmKTsKQEAg
LTEyNCw3ICsxMjQsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJvdGVjdGVkOgotICAgIGxvbmcg
aW50IHByZWRlZlZhbDsKKyAgICBpbnQgcHJlZGVmVmFsOwogICAgIFJlbmRlckxpc3RNYXJrZXIg
Km1fbWFya2VyOwogICAgIGJvb2wgX25vdEluTGlzdDsKIH07CkluZGV4OiBXZWJDb3JlL2todG1s
L3JlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX29iamVjdC5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMjA0CmRpZmYgLXAgLXUgLXIxLjIwNCBXZWJDb3JlL2todG1sL3JlbmRlcmlu
Zy9yZW5kZXJfb2JqZWN0LmNwcAotLS0gV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX29i
amVjdC5jcHAJMzAgSnVsIDIwMDUgMDI6MzM6MjMgLTAwMDAJMS4yMDQKKysrIFdlYkNvcmUva2h0
bWwvcmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuY3BwCTIxIEF1ZyAyMDA1IDA1OjI4OjI0IC0wMDAw
CkBAIC0yMzM4LDM0ICsyMzM4LDM0IEBAIGludCBSZW5kZXJPYmplY3Q6Om1heGltYWxPdXRsaW5l
U2l6ZShQYWkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyQ2FudmFzKj4oZG9jdW1lbnQo
KS0+cmVuZGVyZXIoKSktPm1heGltYWxPdXRsaW5lU2l6ZSgpOwogfQogCi1sb25nIFJlbmRlck9i
amVjdDo6Y2FyZXRNaW5PZmZzZXQoKSBjb25zdAoraW50IFJlbmRlck9iamVjdDo6Y2FyZXRNaW5P
ZmZzZXQoKSBjb25zdAogewogICAgIHJldHVybiAwOwogfQogCi1sb25nIFJlbmRlck9iamVjdDo6
Y2FyZXRNYXhPZmZzZXQoKSBjb25zdAoraW50IFJlbmRlck9iamVjdDo6Y2FyZXRNYXhPZmZzZXQo
KSBjb25zdAogewogICAgIHJldHVybiAwOwogfQogCi11bnNpZ25lZCBsb25nIFJlbmRlck9iamVj
dDo6Y2FyZXRNYXhSZW5kZXJlZE9mZnNldCgpIGNvbnN0Cit1bnNpZ25lZCBSZW5kZXJPYmplY3Q6
OmNhcmV0TWF4UmVuZGVyZWRPZmZzZXQoKSBjb25zdAogewogICAgIHJldHVybiAwOwogfQogCi1s
b25nIFJlbmRlck9iamVjdDo6cHJldmlvdXNPZmZzZXQgKGxvbmcgY3VycmVudCkgY29uc3QKK2lu
dCBSZW5kZXJPYmplY3Q6OnByZXZpb3VzT2Zmc2V0IChpbnQgY3VycmVudCkgY29uc3QKIHsKLSAg
ICBsb25nIHByZXZpb3VzT2Zmc2V0ID0gY3VycmVudCAtIDE7CisgICAgaW50IHByZXZpb3VzT2Zm
c2V0ID0gY3VycmVudCAtIDE7CiAgICAgcmV0dXJuIHByZXZpb3VzT2Zmc2V0OwogfQogCi1sb25n
IFJlbmRlck9iamVjdDo6bmV4dE9mZnNldCAobG9uZyBjdXJyZW50KSBjb25zdAoraW50IFJlbmRl
ck9iamVjdDo6bmV4dE9mZnNldCAoaW50IGN1cnJlbnQpIGNvbnN0CiB7Ci0gICAgbG9uZyBuZXh0
T2Zmc2V0ID0gY3VycmVudCArIDE7CisgICAgaW50IG5leHRPZmZzZXQgPSBjdXJyZW50ICsgMTsK
ICAgICByZXR1cm4gbmV4dE9mZnNldDsKIH0KIAotSW5saW5lQm94ICpSZW5kZXJPYmplY3Q6Omlu
bGluZUJveChsb25nIG9mZnNldCwgRUFmZmluaXR5IGFmZmluaXR5KQorSW5saW5lQm94ICpSZW5k
ZXJPYmplY3Q6OmlubGluZUJveChpbnQgb2Zmc2V0LCBFQWZmaW5pdHkgYWZmaW5pdHkpCiB7CiAg
ICAgcmV0dXJuIGlubGluZUJveFdyYXBwZXIoKTsKIH0KSW5kZXg6IFdlYkNvcmUva2h0bWwvcmVu
ZGVyaW5nL3JlbmRlcl9vYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX29iamVjdC5oLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjE1NApkaWZmIC1wIC11IC1yMS4xNTQgV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVy
X29iamVjdC5oCi0tLSBXZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmgJOSBB
dWcgMjAwNSAyMDo1ODoyNyAtMDAwMAkxLjE1NAorKysgV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcv
cmVuZGVyX29iamVjdC5oCTIxIEF1ZyAyMDA1IDA1OjI4OjI0IC0wMDAwCkBAIC0zNzcsNyArMzc3
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRJbmxpbmVCb3hXcmFwcGVyKElubGlu
ZUJveCogYik7CiAgICAgdm9pZCBkZWxldGVMaW5lQm94V3JhcHBlcigpOwogCi0gICAgdmlydHVh
bCBJbmxpbmVCb3ggKmlubGluZUJveChsb25nIG9mZnNldD0wLCBFQWZmaW5pdHkgYWZmaW5pdHkg
PSBVUFNUUkVBTSk7CisgICAgdmlydHVhbCBJbmxpbmVCb3ggKmlubGluZUJveChpbnQgb2Zmc2V0
PTAsIEVBZmZpbml0eSBhZmZpbml0eSA9IFVQU1RSRUFNKTsKICAgICAKICAgICAvLyBmb3IgZGlz
Y3Vzc2lvbiBvZiBsaW5lSGVpZ2h0IHNlZSBDU1MyIHNwZWMKICAgICB2aXJ0dWFsIHNob3J0IGxp
bmVIZWlnaHQoIGJvb2wgZmlyc3RMaW5lLCBib29sIGlzUm9vdExpbmVCb3g9ZmFsc2UgKSBjb25z
dDsKQEAgLTgzNywxMiArODM3LDEyIEBAIHB1YmxpYzoKICAgICAvLyBDb252ZW5pZW5jZSwgdG8g
YXZvaWQgcmVwZWF0aW5nIHRoZSBjb2RlIHRvIGRpZyBkb3duIHRvIGdldCB0aGlzLgogICAgIFFD
aGFyIGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSBjb25zdDsKIAotICAgIHZpcnR1YWwgbG9u
ZyBjYXJldE1pbk9mZnNldCgpIGNvbnN0OwotICAgIHZpcnR1YWwgbG9uZyBjYXJldE1heE9mZnNl
dCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBjYXJldE1heFJlbmRlcmVkT2Zm
c2V0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgY2FyZXRNaW5PZmZzZXQoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGludCBjYXJldE1heE9mZnNldCgpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWdu
ZWQgY2FyZXRNYXhSZW5kZXJlZE9mZnNldCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBsb25nIHBy
ZXZpb3VzT2Zmc2V0IChsb25nIGN1cnJlbnQpIGNvbnN0OwotICAgIHZpcnR1YWwgbG9uZyBuZXh0
T2Zmc2V0IChsb25nIGN1cnJlbnQpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHByZXZpb3VzT2Zm
c2V0IChpbnQgY3VycmVudCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgbmV4dE9mZnNldCAoaW50
IGN1cnJlbnQpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIHNldFBpeG1hcChjb25zdCBRUGl4
bWFwJiwgY29uc3QgUVJlY3QmLCBDYWNoZWRJbWFnZSAqKTsKIApJbmRleDogV2ViQ29yZS9raHRt
bC9yZW5kZXJpbmcvcmVuZGVyX3JlcGxhY2VkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX3JlcGxhY2VkLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS44MQpkaWZmIC1wIC11IC1yMS44MSBXZWJDb3JlL2todG1sL3JlbmRl
cmluZy9yZW5kZXJfcmVwbGFjZWQuY3BwCi0tLSBXZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5k
ZXJfcmVwbGFjZWQuY3BwCTI5IEp1bCAyMDA1IDIzOjQyOjUxIC0wMDAwCTEuODEKKysrIFdlYkNv
cmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9yZXBsYWNlZC5jcHAJMjEgQXVnIDIwMDUgMDU6Mjg6
MjUgLTAwMDAKQEAgLTExOCw3ICsxMTgsNyBAQCBzaG9ydCBSZW5kZXJSZXBsYWNlZDo6YmFzZWxp
bmVQb3NpdGlvbiggCiAgICAgcmV0dXJuIGhlaWdodCgpK21hcmdpblRvcCgpK21hcmdpbkJvdHRv
bSgpOwogfQogCi1sb25nIFJlbmRlclJlcGxhY2VkOjpjYXJldE1pbk9mZnNldCgpIGNvbnN0IAor
aW50IFJlbmRlclJlcGxhY2VkOjpjYXJldE1pbk9mZnNldCgpIGNvbnN0IAogeyAKICAgICByZXR1
cm4gMDsgCiB9CkBAIC0xMjcsMTIgKzEyNywxMiBAQCBsb25nIFJlbmRlclJlcGxhY2VkOjpjYXJl
dE1pbk9mZnNldCgpIGNvCiAvLyBhdCBpdHMgYmVnaW5uaW5nICgwKSwgb3IgYXQgaXRzIGVuZCAo
MSkuCiAvLyBOT1RFOiBZZXQsICJzZWxlY3QiIGVsZW1lbnRzIGNhbiBoYXZlIGFueSBudW1iZXIg
b2YgIm9wdGlvbiIgZWxlbWVudHMKIC8vIGFzIGNoaWxkcmVuLCBzbyB0aGlzICIwIG9yIDEiIGlk
ZWEgZG9lcyBub3QgcmVhbGx5IGhvbGQgdXAuCi1sb25nIFJlbmRlclJlcGxhY2VkOjpjYXJldE1h
eE9mZnNldCgpIGNvbnN0IAoraW50IFJlbmRlclJlcGxhY2VkOjpjYXJldE1heE9mZnNldCgpIGNv
bnN0IAogeyAKICAgICByZXR1cm4gMTsgCiB9CiAKLXVuc2lnbmVkIGxvbmcgUmVuZGVyUmVwbGFj
ZWQ6OmNhcmV0TWF4UmVuZGVyZWRPZmZzZXQoKSBjb25zdAordW5zaWduZWQgUmVuZGVyUmVwbGFj
ZWQ6OmNhcmV0TWF4UmVuZGVyZWRPZmZzZXQoKSBjb25zdAogewogICAgIHJldHVybiAxOyAKIH0K
SW5kZXg6IFdlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9yZXBsYWNlZC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfcmVw
bGFjZWQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMApkaWZmIC1wIC11IC1yMS4zMCBXZWJD
b3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfcmVwbGFjZWQuaAotLS0gV2ViQ29yZS9raHRtbC9y
ZW5kZXJpbmcvcmVuZGVyX3JlcGxhY2VkLmgJMTQgRmViIDIwMDUgMTg6MTk6MTggLTAwMDAJMS4z
MAorKysgV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX3JlcGxhY2VkLmgJMjEgQXVnIDIw
MDUgMDU6Mjg6MjUgLTAwMDAKQEAgLTU0LDkgKzU0LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
SW50cmluc2ljV2lkdGgoaW50IHcpIHsgIG1faW50cmluc2ljV2lkdGggPSB3OyB9CiAgICAgdm9p
ZCBzZXRJbnRyaW5zaWNIZWlnaHQoaW50IGgpIHsgbV9pbnRyaW5zaWNIZWlnaHQgPSBoOyB9CiAK
LSAgICB2aXJ0dWFsIGxvbmcgY2FyZXRNaW5PZmZzZXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGxv
bmcgY2FyZXRNYXhPZmZzZXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgY2Fy
ZXRNYXhSZW5kZXJlZE9mZnNldCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGNhcmV0TWluT2Zm
c2V0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgY2FyZXRNYXhPZmZzZXQoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGNhcmV0TWF4UmVuZGVyZWRPZmZzZXQoKSBjb25zdDsKICAgICB2
aXJ0dWFsIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvckNvb3JkaW5hdGVzKGludCB4LCBpbnQg
eSk7CiAgICAgCiAgICAgdmlydHVhbCBib29sIGNhbkJlU2VsZWN0aW9uTGVhZigpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KSW5kZXg6IFdlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl90YWJs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmlu
Zy9yZW5kZXJfdGFibGUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40NQpkaWZmIC1wIC11IC1y
MS40NSBXZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfdGFibGUuaAotLS0gV2ViQ29yZS9r
aHRtbC9yZW5kZXJpbmcvcmVuZGVyX3RhYmxlLmgJMTUgRGVjIDIwMDQgMDI6NDE6MzggLTAwMDAJ
MS40NQorKysgV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX3RhYmxlLmgJMjEgQXVnIDIw
MDUgMDU6Mjg6MjUgLTAwMDAKQEAgLTMxOSw4ICszMTksOCBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBib29sIHJlcXVpcmVzTGF5ZXIoKTsKIAogICAgIC8vICMjIyBGSVggdGhlc2UgdHdvLi4uCi0g
ICAgbG9uZyBjZWxsSW5kZXgoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0gICAgdm9pZCBzZXRDZWxs
SW5kZXgoIGxvbmcgKSB7IH0KKyAgICBpbnQgY2VsbEluZGV4KCkgY29uc3QgeyByZXR1cm4gMDsg
fQorICAgIHZvaWQgc2V0Q2VsbEluZGV4KCBpbnQgKSB7IH0KIAogICAgIGludCBjb2xTcGFuKCkg
Y29uc3QgeyByZXR1cm4gY1NwYW47IH0KICAgICB2b2lkIHNldENvbFNwYW4oaW50IGMpIHsgY1Nw
YW4gPSBjOyB9CkluZGV4OiBXZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfdGV4dC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3Jl
bmRlcl90ZXh0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xODkKZGlmZiAtcCAtdSAtcjEu
MTg5IFdlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl90ZXh0LmNwcAotLS0gV2ViQ29yZS9r
aHRtbC9yZW5kZXJpbmcvcmVuZGVyX3RleHQuY3BwCTE1IEF1ZyAyMDA1IDA0OjMxOjA2IC0wMDAw
CTEuMTg5CisrKyBXZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfdGV4dC5jcHAJMjEgQXVn
IDIwMDUgMDU6Mjg6MjYgLTAwMDAKQEAgLTU5Niw4ICs1OTYsOCBAQCB2b2lkIElubGluZVRleHRC
b3g6OnBhaW50TWFya2VyKFFQYWludGVyCiAgICAgaW50IHN0YXJ0ID0gMDsgICAgICAgICAgICAg
ICAgICAvLyBzdGFydCBvZiBsaW5lIHRvIGRyYXcsIHJlbGF0aXZlIHRvIF90eAogICAgIGludCB3
aWR0aCA9IG1fd2lkdGg7ICAgICAgICAgICAgLy8gaG93IG11Y2ggbGluZSB0byBkcmF3CiAgICAg
Ym9vbCB1c2VXaG9sZVdpZHRoID0gdHJ1ZTsKLSAgICB1bG9uZyBwYWludFN0YXJ0ID0gbV9zdGFy
dDsKLSAgICB1bG9uZyBwYWludEVuZCA9IGVuZCgpKzE7ICAgICAgLy8gZW5kIHBvaW50cyBhdCB0
aGUgbGFzdCBjaGFyLCBub3QgcGFzdCBpdAorICAgIHVuc2lnbmVkIHBhaW50U3RhcnQgPSBtX3N0
YXJ0OworICAgIHVuc2lnbmVkIHBhaW50RW5kID0gZW5kKCkrMTsgICAgICAvLyBlbmQgcG9pbnRz
IGF0IHRoZSBsYXN0IGNoYXIsIG5vdCBwYXN0IGl0CiAgICAgaWYgKHBhaW50U3RhcnQgPD0gbWFy
a2VyLnN0YXJ0T2Zmc2V0KSB7CiAgICAgICAgIHBhaW50U3RhcnQgPSBtYXJrZXIuc3RhcnRPZmZz
ZXQ7CiAgICAgICAgIHVzZVdob2xlV2lkdGggPSBmYWxzZTsKQEAgLTYwOCw3ICs2MDgsNyBAQCB2
b2lkIElubGluZVRleHRCb3g6OnBhaW50TWFya2VyKFFQYWludGVyCiAgICAgICAgIHVzZVdob2xl
V2lkdGggPSBmYWxzZTsKICAgICB9CiAgICAgaWYgKG1fdHJ1bmNhdGlvbiAhPSBjTm9UcnVuY2F0
aW9uKSB7Ci0gICAgICAgIHBhaW50RW5kID0ga01pbihwYWludEVuZCwgKHVsb25nKW1fdHJ1bmNh
dGlvbik7CisgICAgICAgIHBhaW50RW5kID0ga01pbihwYWludEVuZCwgKHVuc2lnbmVkKW1fdHJ1
bmNhdGlvbik7CiAgICAgICAgIHVzZVdob2xlV2lkdGggPSBmYWxzZTsKICAgICB9CiAgICAgaWYg
KCF1c2VXaG9sZVdpZHRoKSB7CkBAIC02NDUsMTkgKzY0NSwxOSBAQCB2b2lkIElubGluZVRleHRC
b3g6OnBhaW50TWFya2VkVGV4dFVuZGVyCiAgICAgaW50IHN0YXJ0ID0gMDsgICAgICAgICAgICAg
ICAgICAvLyBzdGFydCBvZiBsaW5lIHRvIGRyYXcsIHJlbGF0aXZlIHRvIF90eAogICAgIGludCB3
aWR0aCA9IG1fd2lkdGg7ICAgICAgICAgICAgLy8gaG93IG11Y2ggbGluZSB0byBkcmF3CiAgICAg
Ym9vbCB1c2VXaG9sZVdpZHRoID0gdHJ1ZTsKLSAgICB1bG9uZyBwYWludFN0YXJ0ID0gbV9zdGFy
dDsKLSAgICB1bG9uZyBwYWludEVuZCA9IGVuZCgpKzE7ICAgICAgLy8gZW5kIHBvaW50cyBhdCB0
aGUgbGFzdCBjaGFyLCBub3QgcGFzdCBpdAorICAgIHVuc2lnbmVkIHBhaW50U3RhcnQgPSBtX3N0
YXJ0OworICAgIHVuc2lnbmVkIHBhaW50RW5kID0gZW5kKCkrMTsgICAgICAvLyBlbmQgcG9pbnRz
IGF0IHRoZSBsYXN0IGNoYXIsIG5vdCBwYXN0IGl0CiAgICAgaWYgKHBhaW50U3RhcnQgPD0gdW5k
ZXJsaW5lLnN0YXJ0T2Zmc2V0KSB7CiAgICAgICAgIHBhaW50U3RhcnQgPSB1bmRlcmxpbmUuc3Rh
cnRPZmZzZXQ7CiAgICAgICAgIHVzZVdob2xlV2lkdGggPSBmYWxzZTsKICAgICAgICAgc3RhcnQg
PSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4obV9vYmplY3QpLT53aWR0aChtX3N0YXJ0LCBwYWlu
dFN0YXJ0IC0gbV9zdGFydCwgbV9maXJzdExpbmUpOwogICAgIH0KICAgICBpZiAocGFpbnRFbmQg
IT0gdW5kZXJsaW5lLmVuZE9mZnNldCkgeyAgICAgIC8vIGVuZCBwb2ludHMgYXQgdGhlIGxhc3Qg
Y2hhciwgbm90IHBhc3QgaXQKLSAgICAgICAgcGFpbnRFbmQgPSBrTWluKHBhaW50RW5kLCAodWxv
bmcpdW5kZXJsaW5lLmVuZE9mZnNldCk7CisgICAgICAgIHBhaW50RW5kID0ga01pbihwYWludEVu
ZCwgKHVuc2lnbmVkKXVuZGVybGluZS5lbmRPZmZzZXQpOwogICAgICAgICB1c2VXaG9sZVdpZHRo
ID0gZmFsc2U7CiAgICAgfQogICAgIGlmIChtX3RydW5jYXRpb24gIT0gY05vVHJ1bmNhdGlvbikg
ewotICAgICAgICBwYWludEVuZCA9IGtNaW4ocGFpbnRFbmQsICh1bG9uZyltX3RydW5jYXRpb24p
OworICAgICAgICBwYWludEVuZCA9IGtNaW4ocGFpbnRFbmQsICh1bnNpZ25lZCltX3RydW5jYXRp
b24pOwogICAgICAgICB1c2VXaG9sZVdpZHRoID0gZmFsc2U7CiAgICAgfQogICAgIGlmICghdXNl
V2hvbGVXaWR0aCkgewpAQCAtNjY5LDE3ICs2NjksMTcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94Ojpw
YWludE1hcmtlZFRleHRVbmRlcgogICAgIHB0LT5kcmF3TGluZUZvclRleHQoX3R4ICsgc3RhcnQs
IF90eSwgdW5kZXJsaW5lT2Zmc2V0LCB3aWR0aCk7CiB9CiAKLWxvbmcgSW5saW5lVGV4dEJveDo6
Y2FyZXRNaW5PZmZzZXQoKSBjb25zdAoraW50IElubGluZVRleHRCb3g6OmNhcmV0TWluT2Zmc2V0
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zdGFydDsKIH0KIAotbG9uZyBJbmxpbmVUZXh0Qm94
OjpjYXJldE1heE9mZnNldCgpIGNvbnN0CitpbnQgSW5saW5lVGV4dEJveDo6Y2FyZXRNYXhPZmZz
ZXQoKSBjb25zdAogewogICAgIHJldHVybiBtX3N0YXJ0ICsgbV9sZW47CiB9CiAKLXVuc2lnbmVk
IGxvbmcgSW5saW5lVGV4dEJveDo6Y2FyZXRNYXhSZW5kZXJlZE9mZnNldCgpIGNvbnN0Cit1bnNp
Z25lZCBJbmxpbmVUZXh0Qm94OjpjYXJldE1heFJlbmRlcmVkT2Zmc2V0KCkgY29uc3QKIHsKICAg
ICByZXR1cm4gbV9zdGFydCArIG1fbGVuOwogfQpAQCAtNzA3LDcgKzcwNyw3IEBAIHN0YXRpYyBV
QnJlYWtJdGVyYXRvciAqZ2V0Q2hhcmFjdGVyQnJlYWsKICAgICByZXR1cm4gaXRlcmF0b3I7CiB9
CiAKLWxvbmcgUmVuZGVyVGV4dDo6cHJldmlvdXNPZmZzZXQgKGxvbmcgY3VycmVudCkgY29uc3QK
K2ludCBSZW5kZXJUZXh0OjpwcmV2aW91c09mZnNldCAoaW50IGN1cnJlbnQpIGNvbnN0CiB7CiAg
ICAgVUJyZWFrSXRlcmF0b3IgKml0ZXJhdG9yID0gZ2V0Q2hhcmFjdGVyQnJlYWtJdGVyYXRvcihz
dHIpOwogICAgIGlmIChpdGVyYXRvcikgewpAQCAtNzE2LDcgKzcxNiw3IEBAIGxvbmcgUmVuZGVy
VGV4dDo6cHJldmlvdXNPZmZzZXQgKGxvbmcgY3UKICAgICByZXR1cm4gY3VycmVudCAtIDE7CiB9
CiAKLWxvbmcgUmVuZGVyVGV4dDo6bmV4dE9mZnNldCAobG9uZyBjdXJyZW50KSBjb25zdAoraW50
IFJlbmRlclRleHQ6Om5leHRPZmZzZXQgKGludCBjdXJyZW50KSBjb25zdAogewogICAgIFVCcmVh
a0l0ZXJhdG9yICppdGVyYXRvciA9IGdldENoYXJhY3RlckJyZWFrSXRlcmF0b3Ioc3RyKTsKICAg
ICBpZiAoaXRlcmF0b3IpIHsKQEAgLTc0OSwxMSArNzQ5LDExIEBAIGludCBJbmxpbmVUZXh0Qm94
Ojpwb3NpdGlvbkZvck9mZnNldChpbnQKIAogICAgIGludCBsZWZ0OwogICAgIGlmIChtX3JldmVy
c2VkKSB7Ci0JbG9uZyBsZW4gPSBtX3N0YXJ0ICsgbV9sZW4gLSBvZmZzZXQ7CisJaW50IGxlbiA9
IG1fc3RhcnQgKyBtX2xlbiAtIG9mZnNldDsKIAlRU3RyaW5nIHN0cmluZyh0ZXh0LT5zdHItPnMg
KyBvZmZzZXQsIGxlbik7CiAJbGVmdCA9IG1feCArIGZtLmJvdW5kaW5nUmVjdChzdHJpbmcsIHRl
eHQtPnRhYldpZHRoKCksIHRleHRQb3MoKSwgbGVuKS5yaWdodCgpOwogICAgIH0gZWxzZSB7Ci0J
bG9uZyBsZW4gPSBvZmZzZXQgLSBtX3N0YXJ0OworCWludCBsZW4gPSBvZmZzZXQgLSBtX3N0YXJ0
OwogCVFTdHJpbmcgc3RyaW5nKHRleHQtPnN0ci0+cyArIG1fc3RhcnQsIGxlbik7CiAJbGVmdCA9
IG1feCArIGZtLmJvdW5kaW5nUmVjdChzdHJpbmcsIHRleHQtPnRhYldpZHRoKCksIHRleHRQb3Mo
KSwgbGVuKS5yaWdodCgpOwogICAgIH0KQEAgLTE4MTAsNyArMTgxMCw3IEBAIGNvbnN0IEZvbnQg
KlJlbmRlclRleHQ6Omh0bWxGb250KGJvb2wgZmkKICAgICByZXR1cm4gJnN0eWxlKGZpcnN0TGlu
ZSktPmh0bWxGb250KCk7CiB9CiAKLWxvbmcgUmVuZGVyVGV4dDo6Y2FyZXRNaW5PZmZzZXQoKSBj
b25zdAoraW50IFJlbmRlclRleHQ6OmNhcmV0TWluT2Zmc2V0KCkgY29uc3QKIHsKICAgICBJbmxp
bmVUZXh0Qm94ICpib3ggPSBmaXJzdFRleHRCb3goKTsKICAgICBpZiAoIWJveCkKQEAgLTE4MjEs
NyArMTgyMSw3IEBAIGxvbmcgUmVuZGVyVGV4dDo6Y2FyZXRNaW5PZmZzZXQoKSBjb25zdAogICAg
IHJldHVybiBtaW5PZmZzZXQ7CiB9CiAKLWxvbmcgUmVuZGVyVGV4dDo6Y2FyZXRNYXhPZmZzZXQo
KSBjb25zdAoraW50IFJlbmRlclRleHQ6OmNhcmV0TWF4T2Zmc2V0KCkgY29uc3QKIHsKICAgICBJ
bmxpbmVUZXh0Qm94KiBib3ggPSBsYXN0VGV4dEJveCgpOwogICAgIGlmICghYm94KSAKQEAgLTE4
MzIsNyArMTgzMiw3IEBAIGxvbmcgUmVuZGVyVGV4dDo6Y2FyZXRNYXhPZmZzZXQoKSBjb25zdAog
ICAgIHJldHVybiBtYXhPZmZzZXQ7CiB9CiAKLXVuc2lnbmVkIGxvbmcgUmVuZGVyVGV4dDo6Y2Fy
ZXRNYXhSZW5kZXJlZE9mZnNldCgpIGNvbnN0Cit1bnNpZ25lZCBSZW5kZXJUZXh0OjpjYXJldE1h
eFJlbmRlcmVkT2Zmc2V0KCkgY29uc3QKIHsKICAgICBpbnQgbCA9IDA7CiAgICAgZm9yIChJbmxp
bmVUZXh0Qm94KiBib3ggPSBmaXJzdFRleHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0
Qm94KCkpCkBAIC0xODQwLDcgKzE4NDAsNyBAQCB1bnNpZ25lZCBsb25nIFJlbmRlclRleHQ6OmNh
cmV0TWF4UmVuZGVyCiAgICAgcmV0dXJuIGw7CiB9CiAKLUlubGluZUJveCAqUmVuZGVyVGV4dDo6
aW5saW5lQm94KGxvbmcgb2Zmc2V0LCBFQWZmaW5pdHkgYWZmaW5pdHkpCitJbmxpbmVCb3ggKlJl
bmRlclRleHQ6OmlubGluZUJveChpbnQgb2Zmc2V0LCBFQWZmaW5pdHkgYWZmaW5pdHkpCiB7CiAg
ICAgZm9yIChJbmxpbmVUZXh0Qm94ICpib3ggPSBmaXJzdFRleHRCb3goKTsgYm94OyBib3ggPSBi
b3gtPm5leHRUZXh0Qm94KCkpIHsKICAgICAgICAgaWYgKG9mZnNldCA+PSBib3gtPm1fc3RhcnQg
JiYgb2Zmc2V0IDw9IGJveC0+bV9zdGFydCArIGJveC0+bV9sZW4pIHsKSW5kZXg6IFdlYkNvcmUv
a2h0bWwvcmVuZGVyaW5nL3JlbmRlcl90ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl90ZXh0LmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuODMKZGlmZiAtcCAtdSAtcjEuODMgV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVu
ZGVyX3RleHQuaAotLS0gV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX3RleHQuaAkxNSBB
dWcgMjAwNSAwNDozMTowNyAtMDAwMAkxLjgzCisrKyBXZWJDb3JlL2todG1sL3JlbmRlcmluZy9y
ZW5kZXJfdGV4dC5oCTIxIEF1ZyAyMDA1IDA1OjI4OjI3IC0wMDAwCkBAIC0xMjcsOSArMTI3LDkg
QEAgcHVibGljOgogICAgIHZvaWQgcGFpbnRNYXJrZWRUZXh0QmFja2dyb3VuZChRUGFpbnRlciog
cCwgaW50IHR4LCBpbnQgdHksIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgRm9udCogZm9udCwg
aW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKTsKICAgICB2b2lkIHBhaW50TWFya2VyKFFQYWludGVy
KiBwLCBpbnQgX3R4LCBpbnQgX3R5LCBET006OkRvY3VtZW50TWFya2VyIG1hcmtlcik7CiAgICAg
dm9pZCBwYWludE1hcmtlZFRleHRVbmRlcmxpbmUoUVBhaW50ZXIgKnB0LCBpbnQgX3R4LCBpbnQg
X3R5LCBLV1FLSFRNTFBhcnQ6Ok1hcmtlZFRleHRVbmRlcmxpbmUgdW5kZXJsaW5lKTsKLSAgICB2
aXJ0dWFsIGxvbmcgY2FyZXRNaW5PZmZzZXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGxvbmcgY2Fy
ZXRNYXhPZmZzZXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgY2FyZXRNYXhS
ZW5kZXJlZE9mZnNldCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGNhcmV0TWluT2Zmc2V0KCkg
Y29uc3Q7CisgICAgdmlydHVhbCBpbnQgY2FyZXRNYXhPZmZzZXQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHVuc2lnbmVkIGNhcmV0TWF4UmVuZGVyZWRPZmZzZXQoKSBjb25zdDsKICAgICAKICAgICBp
bnQgdGV4dFBvcygpIGNvbnN0OwogICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbihpbnQgX3gsIGJv
b2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMgPSB0cnVlKSBjb25zdDsKQEAgLTI1Nyw3ICsyNTcsNyBA
QCBwdWJsaWM6CiAgICAgSW5saW5lVGV4dEJveCogZmlyc3RUZXh0Qm94KCkgY29uc3QgeyByZXR1
cm4gbV9maXJzdFRleHRCb3g7IH0KICAgICBJbmxpbmVUZXh0Qm94KiBsYXN0VGV4dEJveCgpIGNv
bnN0IHsgcmV0dXJuIG1fbGFzdFRleHRCb3g7IH0KICAgICAKLSAgICB2aXJ0dWFsIElubGluZUJv
eCAqaW5saW5lQm94KGxvbmcgb2Zmc2V0LCBFQWZmaW5pdHkgYWZmaW5pdHkgPSBVUFNUUkVBTSk7
CisgICAgdmlydHVhbCBJbmxpbmVCb3ggKmlubGluZUJveChpbnQgb2Zmc2V0LCBFQWZmaW5pdHkg
YWZmaW5pdHkgPSBVUFNUUkVBTSk7CiAKICNpZiBBUFBMRV9DSEFOR0VTCiAgICAgaW50IHdpZHRo
RnJvbUNhY2hlKGNvbnN0IEZvbnQgKiwgaW50IHN0YXJ0LCBpbnQgbGVuLCBpbnQgdGFiV2lkdGgs
IGludCB4cG9zKSBjb25zdDsKQEAgLTI2NiwxMiArMjY2LDEyIEBAIHB1YmxpYzoKICAgICBib29s
IGFsbEFzY2lpKCkgY29uc3Q7CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgbG9uZyBjYXJldE1pbk9m
ZnNldCgpIGNvbnN0OwotICAgIHZpcnR1YWwgbG9uZyBjYXJldE1heE9mZnNldCgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBjYXJldE1heFJlbmRlcmVkT2Zmc2V0KCkgY29uc3Q7
CisgICAgdmlydHVhbCBpbnQgY2FyZXRNaW5PZmZzZXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGlu
dCBjYXJldE1heE9mZnNldCgpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgY2FyZXRNYXhS
ZW5kZXJlZE9mZnNldCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBsb25nIHByZXZpb3VzT2Zmc2V0
IChsb25nIGN1cnJlbnQpIGNvbnN0OwotICAgIHZpcnR1YWwgbG9uZyBuZXh0T2Zmc2V0IChsb25n
IGN1cnJlbnQpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHByZXZpb3VzT2Zmc2V0IChpbnQgY3Vy
cmVudCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgbmV4dE9mZnNldCAoaW50IGN1cnJlbnQpIGNv
bnN0OwogICAgIAogICAgIGJvb2wgY29udGFpbnNSZXZlcnNlZFRleHQoKSB7IHJldHVybiBtX2Nv
bnRhaW5zUmV2ZXJzZWRUZXh0OyB9CiAgICAgCkluZGV4OiBXZWJDb3JlL2todG1sL3htbC9kb20y
X2V2ZW50c2ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL3htbC9kb20yX2V2ZW50c2ltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM1CmRp
ZmYgLXAgLXUgLXIxLjM1IFdlYkNvcmUva2h0bWwveG1sL2RvbTJfZXZlbnRzaW1wbC5jcHAKLS0t
IFdlYkNvcmUva2h0bWwveG1sL2RvbTJfZXZlbnRzaW1wbC5jcHAJOCBBdWcgMjAwNSAyMjoyOToz
OSAtMDAwMAkxLjM1CisrKyBXZWJDb3JlL2todG1sL3htbC9kb20yX2V2ZW50c2ltcGwuY3BwCTIx
IEF1ZyAyMDA1IDA1OjI4OjI3IC0wMDAwCkBAIC0xMzMsOSArMTMzLDggQEAgYm9vbCBFdmVudElt
cGw6OmNhbmNlbGFibGUoKSBjb25zdAogCiBET01UaW1lU3RhbXAgRXZlbnRJbXBsOjp0aW1lU3Rh
bXAoKQogewotICAgIFFEYXRlVGltZSBlcG9jaChRRGF0ZSgxOTcwLDEsMSksUVRpbWUoMCwwKSk7
Ci0gICAgLy8gIyMjIGtqcyBkb2VzIG5vdCB5ZXQgc3VwcG9ydCBsb25nIGxvbmcgKD8pIHNvIHRo
ZSB2YWx1ZSB3cmFwcyBhcm91bmQKLSAgICByZXR1cm4gZXBvY2guc2Vjc1RvKG1fY3JlYXRlVGlt
ZSkqMTAwMCttX2NyZWF0ZVRpbWUudGltZSgpLm1zZWMoKTsKKyAgICBRRGF0ZVRpbWUgZXBvY2go
UURhdGUoMTk3MCwgMSwgMSksIFFUaW1lKDAsIDApKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
RE9NVGltZVN0YW1wPihlcG9jaC5zZWNzVG8obV9jcmVhdGVUaW1lKSkgKiAxMDAwICsgbV9jcmVh
dGVUaW1lLnRpbWUoKS5tc2VjKCk7CiB9CiAKIHZvaWQgRXZlbnRJbXBsOjpzdG9wUHJvcGFnYXRp
b24oKQpAQCAtMzA3LDcgKzMwNiw3IEBAIFVJRXZlbnRJbXBsOjpVSUV2ZW50SW1wbCgpCiB9CiAK
IFVJRXZlbnRJbXBsOjpVSUV2ZW50SW1wbChFdmVudElkIF9pZCwgYm9vbCBjYW5CdWJibGVBcmcs
IGJvb2wgY2FuY2VsYWJsZUFyZywKLQkJQWJzdHJhY3RWaWV3SW1wbCAqdmlld0FyZywgbG9uZyBk
ZXRhaWxBcmcpCisJCUFic3RyYWN0Vmlld0ltcGwgKnZpZXdBcmcsIGludCBkZXRhaWxBcmcpCiAJ
CTogRXZlbnRJbXBsKF9pZCxjYW5CdWJibGVBcmcsY2FuY2VsYWJsZUFyZykKIHsKICAgICBtX3Zp
ZXcgPSB2aWV3QXJnOwpAQCAtMzI2LDcgKzMyNSw3IEBAIHZvaWQgVUlFdmVudEltcGw6OmluaXRV
SUV2ZW50KGNvbnN0IERPTVMKIAkJCSAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAogCQkJICAgICAg
Ym9vbCBjYW5jZWxhYmxlQXJnLAogCQkJICAgICAgQWJzdHJhY3RWaWV3SW1wbCAqdmlld0FyZywK
LQkJCSAgICAgIGxvbmcgZGV0YWlsQXJnKQorCQkJICAgICAgaW50IGRldGFpbEFyZykKIHsKICAg
ICBFdmVudEltcGw6OmluaXRFdmVudCh0eXBlQXJnLGNhbkJ1YmJsZUFyZyxjYW5jZWxhYmxlQXJn
KTsKIApAQCAtMzU0LDI3ICszNTMsMjcgQEAgaW50IFVJRXZlbnRJbXBsOjpjaGFyQ29kZSgpIGNv
bnN0CiAgICAgcmV0dXJuIDA7CiB9CiAKLWxvbmcgVUlFdmVudEltcGw6OmxheWVyWCgpIGNvbnN0
CitpbnQgVUlFdmVudEltcGw6OmxheWVyWCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIDA7CiB9CiAK
LWxvbmcgVUlFdmVudEltcGw6OmxheWVyWSgpIGNvbnN0CitpbnQgVUlFdmVudEltcGw6OmxheWVy
WSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWxvbmcgVUlFdmVudEltcGw6OnBhZ2VY
KCkgY29uc3QKK2ludCBVSUV2ZW50SW1wbDo6cGFnZVgoKSBjb25zdAogewogICAgIHJldHVybiAw
OwogfQogCi1sb25nIFVJRXZlbnRJbXBsOjpwYWdlWSgpIGNvbnN0CitpbnQgVUlFdmVudEltcGw6
OnBhZ2VZKCkgY29uc3QKIHsKICAgICByZXR1cm4gMDsKIH0KIAotbG9uZyBVSUV2ZW50SW1wbDo6
d2hpY2goKSBjb25zdAoraW50IFVJRXZlbnRJbXBsOjp3aGljaCgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIDA7CiB9CkBAIC0zOTAsMTEgKzM4OSwxMSBAQCBNb3VzZVJlbGF0ZWRFdmVudEltcGw6Ok1v
dXNlUmVsYXRlZEV2ZW50CiAJCQkgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCiAJCQkgICAgICAg
Ym9vbCBjYW5jZWxhYmxlQXJnLAogCQkJICAgICAgIEFic3RyYWN0Vmlld0ltcGwgKnZpZXdBcmcs
Ci0JCQkgICAgICAgbG9uZyBkZXRhaWxBcmcsCi0JCQkgICAgICAgbG9uZyBzY3JlZW5YQXJnLAot
CQkJICAgICAgIGxvbmcgc2NyZWVuWUFyZywKLQkJCSAgICAgICBsb25nIGNsaWVudFhBcmcsCi0J
CQkgICAgICAgbG9uZyBjbGllbnRZQXJnLAorCQkJICAgICAgIGludCBkZXRhaWxBcmcsCisJCQkg
ICAgICAgaW50IHNjcmVlblhBcmcsCisJCQkgICAgICAgaW50IHNjcmVlbllBcmcsCisJCQkgICAg
ICAgaW50IGNsaWVudFhBcmcsCisJCQkgICAgICAgaW50IGNsaWVudFlBcmcsCiAJCQkgICAgICAg
Ym9vbCBjdHJsS2V5QXJnLAogCQkJICAgICAgIGJvb2wgYWx0S2V5QXJnLAogCQkJICAgICAgIGJv
b2wgc2hpZnRLZXlBcmcsCkBAIC00NDQsMTIgKzQ0MywxMiBAQCB2b2lkIE1vdXNlUmVsYXRlZEV2
ZW50SW1wbDo6Y29tcHV0ZUxheWVyCiAgICAgfQogfQogCi1sb25nIE1vdXNlUmVsYXRlZEV2ZW50
SW1wbDo6cGFnZVgoKSBjb25zdAoraW50IE1vdXNlUmVsYXRlZEV2ZW50SW1wbDo6cGFnZVgoKSBj
b25zdAogewogICAgIHJldHVybiBtX2NsaWVudFg7CiB9CiAKLWxvbmcgTW91c2VSZWxhdGVkRXZl
bnRJbXBsOjpwYWdlWSgpIGNvbnN0CitpbnQgTW91c2VSZWxhdGVkRXZlbnRJbXBsOjpwYWdlWSgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fY2xpZW50WTsKIH0KQEAgLTQ2NywxMSArNDY2LDExIEBA
IE1vdXNlRXZlbnRJbXBsOjpNb3VzZUV2ZW50SW1wbChFdmVudElkIF8KIAkJCSAgICAgICBib29s
IGNhbkJ1YmJsZUFyZywKIAkJCSAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCiAJCQkgICAgICAg
QWJzdHJhY3RWaWV3SW1wbCAqdmlld0FyZywKLQkJCSAgICAgICBsb25nIGRldGFpbEFyZywKLQkJ
CSAgICAgICBsb25nIHNjcmVlblhBcmcsCi0JCQkgICAgICAgbG9uZyBzY3JlZW5ZQXJnLAotCQkJ
ICAgICAgIGxvbmcgY2xpZW50WEFyZywKLQkJCSAgICAgICBsb25nIGNsaWVudFlBcmcsCisJCQkg
ICAgICAgaW50IGRldGFpbEFyZywKKwkJCSAgICAgICBpbnQgc2NyZWVuWEFyZywKKwkJCSAgICAg
ICBpbnQgc2NyZWVuWUFyZywKKwkJCSAgICAgICBpbnQgY2xpZW50WEFyZywKKwkJCSAgICAgICBp
bnQgY2xpZW50WUFyZywKIAkJCSAgICAgICBib29sIGN0cmxLZXlBcmcsCiAJCQkgICAgICAgYm9v
bCBhbHRLZXlBcmcsCiAJCQkgICAgICAgYm9vbCBzaGlmdEtleUFyZywKQEAgLTUwNCwxMSArNTAz
LDExIEBAIHZvaWQgTW91c2VFdmVudEltcGw6OmluaXRNb3VzZUV2ZW50KGNvbnMKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RWaWV3SW1wbCAqdmlld0FyZywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGV0YWlsQXJnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzY3JlZW5YQXJnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzY3JlZW5ZQXJnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBjbGllbnRYQXJnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbG9uZyBjbGllbnRZQXJnLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGRldGFpbEFyZywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBzY3JlZW5YQXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IHNjcmVlbllBcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgY2xpZW50WEFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBjbGllbnRZQXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBjdHJsS2V5QXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBh
bHRLZXlBcmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNoaWZ0
S2V5QXJnLApAQCAtNTQ5LDcgKzU0OCw3IEBAIGJvb2wgTW91c2VFdmVudEltcGw6OmlzRHJhZ0V2
ZW50KCkgY29uc3QKICAgICAgICAgICAgIHx8IG1faWQgPT0gRXZlbnRJbXBsOjpEUkFHRU5EX0VW
RU5UKTsKIH0KIAotbG9uZyBNb3VzZUV2ZW50SW1wbDo6d2hpY2goKSBjb25zdAoraW50IE1vdXNl
RXZlbnRJbXBsOjp3aGljaCgpIGNvbnN0CiB7CiAgICAgLy8gRm9yIEtIVE1MLCB0aGUgcmV0dXJu
IHZhbHVlcyBmb3IgbGVmdCwgbWlkZGxlIGFuZCByaWdodCBtb3VzZSBidXR0b25zIGFyZSAwLCAx
LCAyLCByZXNwZWN0aXZlbHkuCiAgICAgLy8gRm9yIHRoZSBOZXRzY2FwZSAid2hpY2giIHByb3Bl
cnR5LCB0aGUgcmV0dXJuIHZhbHVlcyBmb3IgbGVmdCwgbWlkZGxlIGFuZCByaWdodCBtb3VzZSBi
dXR0b25zIGFyZSAxLCAyLCAzLCByZXNwZWN0aXZlbHkuIApAQCAtNjAzLDcgKzYwMiw3IEBAIEtl
eWJvYXJkRXZlbnRJbXBsOjpLZXlib2FyZEV2ZW50SW1wbChFdmUKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RWaWV3SW1wbCAqdmlld0FyZywgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRE9NU3RyaW5nICZr
ZXlJZGVudGlmaWVyQXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBsb25nIGtleUxvY2F0aW9uQXJnLCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBrZXlMb2NhdGlvbkFyZywgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5QXJnLCAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsdEtleUFyZywgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywgCkBAIC02MzEs
NyArNjMwLDcgQEAgdm9pZCBLZXlib2FyZEV2ZW50SW1wbDo6aW5pdEtleWJvYXJkRXZlbgogICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAogICAgICAgICAgICAgICAg
ICAgICAgICAgQWJzdHJhY3RWaWV3SW1wbCAqdmlld0FyZywgCiAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBET01TdHJpbmcgJmtleUlkZW50aWZpZXJBcmcsIAotICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgbG9uZyBrZXlMb2NhdGlvbkFyZywgCisgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBrZXlMb2NhdGlvbkFyZywgCiAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGN0cmxLZXlBcmcsIAogICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbHRLZXlB
cmcsIAogICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywgCkBAIC02ODgs
NyArNjg3LDcgQEAgYm9vbCBLZXlib2FyZEV2ZW50SW1wbDo6aXNLZXlib2FyZEV2ZW50KAogICAg
IHJldHVybiB0cnVlOwogfQogCi1sb25nIEtleWJvYXJkRXZlbnRJbXBsOjp3aGljaCgpIGNvbnN0
CitpbnQgS2V5Ym9hcmRFdmVudEltcGw6OndoaWNoKCkgY29uc3QKIHsKICAgICAvLyBOZXRzY2Fw
ZSdzICJ3aGljaCIgcmV0dXJucyBhIHZpcnR1YWwga2V5IGNvZGUgZm9yIGtleWRvd24gYW5kIGtl
eXVwLCBhbmQgYSBjaGFyYWN0ZXIgY29kZSBmb3Iga2V5cHJlc3MuCiAgICAgLy8gVGhhdCdzIGV4
YWN0bHkgd2hhdCBJRSdzICJrZXlDb2RlIiByZXR1cm5zLiBTbyB0aGV5IGFyZSB0aGUgc2FtZSBm
b3Iga2V5Ym9hcmQgZXZlbnRzLgpAQCAtODE0LDggKzgxMyw4IEBAIFdoZWVsRXZlbnRJbXBsOjpX
aGVlbEV2ZW50SW1wbCgpIDogbV9ob3IKIHsKIH0KIAotV2hlZWxFdmVudEltcGw6OldoZWVsRXZl
bnRJbXBsKGJvb2wgaCwgbG9uZyBkLCBBYnN0cmFjdFZpZXdJbXBsICp2LAotICAgIGxvbmcgc3gs
IGxvbmcgc3ksIGxvbmcgY3gsIGxvbmcgY3ksIGJvb2wgY3RybCwgYm9vbCBhbHQsIGJvb2wgc2hp
ZnQsIGJvb2wgbWV0YSkKK1doZWVsRXZlbnRJbXBsOjpXaGVlbEV2ZW50SW1wbChib29sIGgsIGlu
dCBkLCBBYnN0cmFjdFZpZXdJbXBsICp2LAorICAgIGludCBzeCwgaW50IHN5LCBpbnQgY3gsIGlu
dCBjeSwgYm9vbCBjdHJsLCBib29sIGFsdCwgYm9vbCBzaGlmdCwgYm9vbCBtZXRhKQogICAgIDog
TW91c2VSZWxhdGVkRXZlbnRJbXBsKGggPyBIT1JJWk9OVEFMTU9VU0VXSEVFTF9FVkVOVCA6IE1P
VVNFV0hFRUxfRVZFTlQsCiAgICAgICAgIHRydWUsIHRydWUsIHYsIDAsIHN4LCBzeSwgY3gsIGN5
LCBjdHJsLCBhbHQsIHNoaWZ0LCBtZXRhKQogICAgICwgbV9ob3Jpem9udGFsKGgpLCBtX3doZWVs
RGVsdGEoZCkKSW5kZXg6IFdlYkNvcmUva2h0bWwveG1sL2RvbTJfZXZlbnRzaW1wbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb20yX2V2ZW50c2lt
cGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yOApkaWZmIC1wIC11IC1yMS4yOCBXZWJDb3Jl
L2todG1sL3htbC9kb20yX2V2ZW50c2ltcGwuaAotLS0gV2ViQ29yZS9raHRtbC94bWwvZG9tMl9l
dmVudHNpbXBsLmgJMTAgTWF5IDIwMDUgMjE6NTk6MTQgLTAwMDAJMS4yOAorKysgV2ViQ29yZS9r
aHRtbC94bWwvZG9tMl9ldmVudHNpbXBsLmgJMjEgQXVnIDIwMDUgMDU6Mjg6MjggLTAwMDAKQEAg
LTE5NiwzMSArMTk2LDMxIEBAIHB1YmxpYzoKIAkJYm9vbCBjYW5CdWJibGVBcmcsCiAJCWJvb2wg
Y2FuY2VsYWJsZUFyZywKIAkJQWJzdHJhY3RWaWV3SW1wbCAqdmlld0FyZywKLQkJbG9uZyBkZXRh
aWxBcmcpOworCQlpbnQgZGV0YWlsQXJnKTsKICAgICB2aXJ0dWFsIH5VSUV2ZW50SW1wbCgpOwog
ICAgIEFic3RyYWN0Vmlld0ltcGwgKnZpZXcoKSBjb25zdCB7IHJldHVybiBtX3ZpZXc7IH0KLSAg
ICBsb25nIGRldGFpbCgpIGNvbnN0IHsgcmV0dXJuIG1fZGV0YWlsOyB9CisgICAgaW50IGRldGFp
bCgpIGNvbnN0IHsgcmV0dXJuIG1fZGV0YWlsOyB9CiAgICAgdm9pZCBpbml0VUlFdmVudChjb25z
dCBET01TdHJpbmcgJnR5cGVBcmcsCiAJCSAgICAgYm9vbCBjYW5CdWJibGVBcmcsCiAJCSAgICAg
Ym9vbCBjYW5jZWxhYmxlQXJnLAogCQkgICAgIEFic3RyYWN0Vmlld0ltcGwgKnZpZXdBcmcsCi0J
CSAgICAgbG9uZyBkZXRhaWxBcmcpOworCQkgICAgIGludCBkZXRhaWxBcmcpOwogICAgIHZpcnR1
YWwgYm9vbCBpc1VJRXZlbnQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgaW50IGtleUNvZGUoKSBj
b25zdDsKICAgICB2aXJ0dWFsIGludCBjaGFyQ29kZSgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBs
b25nIGxheWVyWCgpIGNvbnN0OwotICAgIHZpcnR1YWwgbG9uZyBsYXllclkoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGludCBsYXllclgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBsYXllclkoKSBj
b25zdDsKIAotICAgIHZpcnR1YWwgbG9uZyBwYWdlWCgpIGNvbnN0OwotICAgIHZpcnR1YWwgbG9u
ZyBwYWdlWSgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHBhZ2VYKCkgY29uc3Q7CisgICAgdmly
dHVhbCBpbnQgcGFnZVkoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgbG9uZyB3aGljaCgpIGNvbnN0
OworICAgIHZpcnR1YWwgaW50IHdoaWNoKCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICBBYnN0
cmFjdFZpZXdJbXBsICptX3ZpZXc7Ci0gICAgbG9uZyBtX2RldGFpbDsKKyAgICBpbnQgbV9kZXRh
aWw7CiAKIH07CiAKQEAgLTIyOCw3ICsyMjgsNyBAQCBjbGFzcyBVSUV2ZW50V2l0aEtleVN0YXRl
SW1wbCA6IHB1YmxpYyBVCiBwdWJsaWM6CiAgICAgVUlFdmVudFdpdGhLZXlTdGF0ZUltcGwoKSA6
IG1fY3RybEtleShmYWxzZSksIG1fYWx0S2V5KGZhbHNlKSwgbV9zaGlmdEtleShmYWxzZSksIG1f
bWV0YUtleShmYWxzZSkgeyB9CiAgICAgVUlFdmVudFdpdGhLZXlTdGF0ZUltcGwoRXZlbnRJZCBl
dmVudElELCBib29sIGNhbkJ1YmJsZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJnLCBBYnN0cmFjdFZp
ZXdJbXBsICp2aWV3QXJnLAotICAgICAgICBsb25nIGRldGFpbEFyZywgYm9vbCBjdHJsS2V5QXJn
LCBib29sIGFsdEtleUFyZywgYm9vbCBzaGlmdEtleUFyZywgYm9vbCBtZXRhS2V5QXJnKQorICAg
ICAgICBpbnQgZGV0YWlsQXJnLCBib29sIGN0cmxLZXlBcmcsIGJvb2wgYWx0S2V5QXJnLCBib29s
IHNoaWZ0S2V5QXJnLCBib29sIG1ldGFLZXlBcmcpCiAgICAgICAgIDogVUlFdmVudEltcGwoZXZl
bnRJRCwgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnLCB2aWV3QXJnLCBkZXRhaWxBcmcpCiAg
ICAgICAgICwgbV9jdHJsS2V5KGN0cmxLZXlBcmcpLCBtX2FsdEtleShhbHRLZXlBcmcpLCBtX3No
aWZ0S2V5KHNoaWZ0S2V5QXJnKSwgbV9tZXRhS2V5KG1ldGFLZXlBcmcpIHsgfQogCkBAIC0yNTIs
MzIgKzI1MiwzMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2Fu
QnViYmxlQXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFic3RyYWN0Vmlld0ltcGwgKnZpZXdBcmcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGV0YWlsQXJnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb25nIHNjcmVlblhBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGxv
bmcgc2NyZWVuWUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBjbGllbnRYQXJn
LAotICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGNsaWVudFlBcmcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBkZXRhaWxBcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBzY3JlZW5YQXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuWUFy
ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNsaWVudFhBcmcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBjbGllbnRZQXJnLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGN0cmxLZXlBcmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWx0S2V5
QXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNoaWZ0S2V5QXJnLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIG1ldGFLZXlBcmcpOwotICAgIGxvbmcgc2NyZWVuWCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2NyZWVuWDsgfQotICAgIGxvbmcgc2NyZWVuWSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2NyZWVuWTsgfQotICAgIGxvbmcgY2xpZW50WCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2xpZW50WDsgfQotICAgIGxvbmcgY2xpZW50WSgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50WTsg
fQotICAgIGxvbmcgbGF5ZXJYKCkgY29uc3QgeyByZXR1cm4gbV9sYXllclg7IH0KLSAgICBsb25n
IGxheWVyWSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJZOyB9Ci0gICAgdmlydHVhbCBsb25nIHBh
Z2VYKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBsb25nIHBhZ2VZKCkgY29uc3Q7CisgICAgaW50IHNj
cmVlblgoKSBjb25zdCB7IHJldHVybiBtX3NjcmVlblg7IH0KKyAgICBpbnQgc2NyZWVuWSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2NyZWVuWTsgfQorICAgIGludCBjbGllbnRYKCkgY29uc3QgeyByZXR1
cm4gbV9jbGllbnRYOyB9CisgICAgaW50IGNsaWVudFkoKSBjb25zdCB7IHJldHVybiBtX2NsaWVu
dFk7IH0KKyAgICBpbnQgbGF5ZXJYKCkgY29uc3QgeyByZXR1cm4gbV9sYXllclg7IH0KKyAgICBp
bnQgbGF5ZXJZKCkgY29uc3QgeyByZXR1cm4gbV9sYXllclk7IH0KKyAgICB2aXJ0dWFsIGludCBw
YWdlWCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHBhZ2VZKCkgY29uc3Q7CiBwcm90ZWN0ZWQ6
IC8vIGV4cG9zZSB0aGVzZSBzbyBNb3VzZUV2ZW50SW1wbDo6aW5pdE1vdXNlRXZlbnQgY2FuIHNl
dCB0aGVtCi0gICAgbG9uZyBtX3NjcmVlblg7Ci0gICAgbG9uZyBtX3NjcmVlblk7Ci0gICAgbG9u
ZyBtX2NsaWVudFg7Ci0gICAgbG9uZyBtX2NsaWVudFk7CisgICAgaW50IG1fc2NyZWVuWDsKKyAg
ICBpbnQgbV9zY3JlZW5ZOworICAgIGludCBtX2NsaWVudFg7CisgICAgaW50IG1fY2xpZW50WTsK
ICAgICB2b2lkIGNvbXB1dGVMYXllclBvcygpOwogcHJpdmF0ZToKLSAgICBsb25nIG1fbGF5ZXJY
OwotICAgIGxvbmcgbV9sYXllclk7CisgICAgaW50IG1fbGF5ZXJYOworICAgIGludCBtX2xheWVy
WTsKIH07CiAKIC8vIEludHJvZHVjZWQgaW4gRE9NIExldmVsIDIKQEAgLTI4OCwxMSArMjg4LDEx
IEBAIHB1YmxpYzoKIAkJICAgYm9vbCBjYW5CdWJibGVBcmcsCiAJCSAgIGJvb2wgY2FuY2VsYWJs
ZUFyZywKIAkJICAgQWJzdHJhY3RWaWV3SW1wbCAqdmlld0FyZywKLQkJICAgbG9uZyBkZXRhaWxB
cmcsCi0JCSAgIGxvbmcgc2NyZWVuWEFyZywKLQkJICAgbG9uZyBzY3JlZW5ZQXJnLAotCQkgICBs
b25nIGNsaWVudFhBcmcsCi0JCSAgIGxvbmcgY2xpZW50WUFyZywKKwkJICAgaW50IGRldGFpbEFy
ZywKKwkJICAgaW50IHNjcmVlblhBcmcsCisJCSAgIGludCBzY3JlZW5ZQXJnLAorCQkgICBpbnQg
Y2xpZW50WEFyZywKKwkJICAgaW50IGNsaWVudFlBcmcsCiAJCSAgIGJvb2wgY3RybEtleUFyZywK
IAkJICAgYm9vbCBhbHRLZXlBcmcsCiAJCSAgIGJvb2wgc2hpZnRLZXlBcmcsCkBAIC0zMDgsMTEg
KzMwOCwxMSBAQCBwdWJsaWM6CiAJCQlib29sIGNhbkJ1YmJsZUFyZywKIAkJCWJvb2wgY2FuY2Vs
YWJsZUFyZywKIAkJCUFic3RyYWN0Vmlld0ltcGwgKnZpZXdBcmcsCi0JCQlsb25nIGRldGFpbEFy
ZywKLQkJCWxvbmcgc2NyZWVuWEFyZywKLQkJCWxvbmcgc2NyZWVuWUFyZywKLQkJCWxvbmcgY2xp
ZW50WEFyZywKLQkJCWxvbmcgY2xpZW50WUFyZywKKwkJCWludCBkZXRhaWxBcmcsCisJCQlpbnQg
c2NyZWVuWEFyZywKKwkJCWludCBzY3JlZW5ZQXJnLAorCQkJaW50IGNsaWVudFhBcmcsCisJCQlp
bnQgY2xpZW50WUFyZywKIAkJCWJvb2wgY3RybEtleUFyZywKIAkJCWJvb2wgYWx0S2V5QXJnLAog
CQkJYm9vbCBzaGlmdEtleUFyZywKQEAgLTMyMSw3ICszMjEsNyBAQCBwdWJsaWM6CiAJCQlOb2Rl
SW1wbCAqcmVsYXRlZFRhcmdldEFyZyk7CiAgICAgdmlydHVhbCBib29sIGlzTW91c2VFdmVudCgp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0RyYWdFdmVudCgpIGNvbnN0OwotICAgIHZpcnR1
YWwgbG9uZyB3aGljaCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHdoaWNoKCkgY29uc3Q7CiBw
cml2YXRlOgogICAgIHVuc2lnbmVkIHNob3J0IG1fYnV0dG9uOwogICAgIE5vZGVJbXBsICptX3Jl
bGF0ZWRUYXJnZXQ7CkBAIC0zMzksNyArMzM5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
IGJvb2wgY2FuY2VsYWJsZUFyZywKICAgICAgICAgICAgICAgICBBYnN0cmFjdFZpZXdJbXBsICp2
aWV3QXJnLAogICAgICAgICAgICAgICAgIGNvbnN0IERPTVN0cmluZyAma2V5SWRlbnRpZmllckFy
ZywKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGtleUxvY2F0aW9uQXJnLAorICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGtleUxvY2F0aW9uQXJnLAogICAgICAgICAgICAgICAgIGJvb2wg
Y3RybEtleUFyZywKICAgICAgICAgICAgICAgICBib29sIGFsdEtleUFyZywKICAgICAgICAgICAg
ICAgICBib29sIHNoaWZ0S2V5QXJnLApAQCAtMzUyLDcgKzM1Miw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCiAgICAgICAgICAgICAgICAgQWJzdHJhY3RW
aWV3SW1wbCAqdmlld0FyZywKICAgICAgICAgICAgICAgICBjb25zdCBET01TdHJpbmcgJmtleUlk
ZW50aWZpZXJBcmcsCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBrZXlMb2NhdGlvbkFy
ZywKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBrZXlMb2NhdGlvbkFyZywKICAgICAgICAgICAg
ICAgICBib29sIGN0cmxLZXlBcmcsCiAgICAgICAgICAgICAgICAgYm9vbCBhbHRLZXlBcmcsCiAg
ICAgICAgICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywKQEAgLTM2MCw3ICszNjAsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgYm9vbCBhbHRHcmFwaEtleUFyZyk7CiAgICAgCiAgICAgRE9N
U3RyaW5nIGtleUlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2tleUlkZW50aWZpZXI7IH0K
LSAgICB1bnNpZ25lZCBsb25nIGtleUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9rZXlMb2Nh
dGlvbjsgfQorICAgIHVuc2lnbmVkIGtleUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9rZXlM
b2NhdGlvbjsgfQogICAgIAogICAgIGJvb2wgYWx0R3JhcGhLZXkoKSBjb25zdCB7IHJldHVybiBt
X2FsdEdyYXBoS2V5OyB9CiAgICAgCkBAIC0zNzAsMTIgKzM3MCwxMiBAQCBwdWJsaWM6CiAgICAg
aW50IGNoYXJDb2RlKCkgY29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCBib29sIGlzS2V5Ym9hcmRF
dmVudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgbG9uZyB3aGljaCgpIGNvbnN0OworICAgIHZpcnR1
YWwgaW50IHdoaWNoKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgUUtleUV2ZW50ICptX2tleUV2
ZW50OwogICAgIERPTVN0cmluZ0ltcGwgKm1fa2V5SWRlbnRpZmllcjsKLSAgICB1bnNpZ25lZCBs
b25nIG1fa2V5TG9jYXRpb247CisgICAgdW5zaWduZWQgbV9rZXlMb2NhdGlvbjsKICAgICBib29s
IG1fYWx0R3JhcGhLZXkgOiAxOwogfTsKIApAQCAtNDMyLDE4ICs0MzIsMTggQEAgY2xhc3MgV2hl
ZWxFdmVudEltcGwgOiBwdWJsaWMgTW91c2VSZWxhdAogewogcHVibGljOgogICAgIFdoZWVsRXZl
bnRJbXBsKCk7Ci0gICAgV2hlZWxFdmVudEltcGwoYm9vbCBob3Jpem9udGFsLCBsb25nIHdoZWVs
RGVsdGEsIEFic3RyYWN0Vmlld0ltcGwgKiwKLSAgICAgICAgICAgICAgICAgICBsb25nIHNjcmVl
blhBcmcsIGxvbmcgc2NyZWVuWUFyZywKLSAgICAgICAgICAgICAgICAgICBsb25nIGNsaWVudFhB
cmcsIGxvbmcgY2xpZW50WUFyZywKKyAgICBXaGVlbEV2ZW50SW1wbChib29sIGhvcml6b250YWws
IGludCB3aGVlbERlbHRhLCBBYnN0cmFjdFZpZXdJbXBsICosCisgICAgICAgICAgICAgICAgICAg
aW50IHNjcmVlblhBcmcsIGludCBzY3JlZW5ZQXJnLAorICAgICAgICAgICAgICAgICAgIGludCBj
bGllbnRYQXJnLCBpbnQgY2xpZW50WUFyZywKICAgICAgICAgICAgICAgICAgICBib29sIGN0cmxL
ZXlBcmcsIGJvb2wgYWx0S2V5QXJnLCBib29sIHNoaWZ0S2V5QXJnLCBib29sIG1ldGFLZXlBcmcp
OwogICAgIGJvb2wgaXNIb3Jpem9udGFsKCkgY29uc3QgeyByZXR1cm4gbV9ob3Jpem9udGFsOyB9
Ci0gICAgbG9uZyB3aGVlbERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV93aGVlbERlbHRhOyB9Cisg
ICAgaW50IHdoZWVsRGVsdGEoKSBjb25zdCB7IHJldHVybiBtX3doZWVsRGVsdGE7IH0KIAogcHJp
dmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNXaGVlbEV2ZW50KCkgY29uc3Q7CiAKICAgICBib29s
IG1faG9yaXpvbnRhbDsKLSAgICBsb25nIG1fd2hlZWxEZWx0YTsKKyAgICBpbnQgbV93aGVlbERl
bHRhOwogfTsKIAogY2xhc3MgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIgewpJbmRleDogV2ViQ29y
ZS9raHRtbC94bWwvZG9tMl9yYW5nZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL3htbC9kb20yX3JhbmdlaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuNDEKZGlmZiAtcCAtdSAtcjEuNDEgV2ViQ29yZS9raHRtbC94bWwvZG9tMl9yYW5n
ZWltcGwuY3BwCi0tLSBXZWJDb3JlL2todG1sL3htbC9kb20yX3JhbmdlaW1wbC5jcHAJOSBKdWwg
MjAwNSAyMDoxOToyMSAtMDAwMAkxLjQxCisrKyBXZWJDb3JlL2todG1sL3htbC9kb20yX3Jhbmdl
aW1wbC5jcHAJMjEgQXVnIDIwMDUgMDU6Mjg6MjggLTAwMDAKQEAgLTYwLDggKzYwLDggQEAgUmFu
Z2VJbXBsOjpSYW5nZUltcGwoRG9jdW1lbnRQdHIgKl9vd25lcgogfQogCiBSYW5nZUltcGw6OlJh
bmdlSW1wbChEb2N1bWVudFB0ciAqX293bmVyRG9jdW1lbnQsCi0gICAgICAgICAgICAgIE5vZGVJ
bXBsICpfc3RhcnRDb250YWluZXIsIGxvbmcgX3N0YXJ0T2Zmc2V0LAotICAgICAgICAgICAgICBO
b2RlSW1wbCAqX2VuZENvbnRhaW5lciwgbG9uZyBfZW5kT2Zmc2V0KQorICAgICAgICAgICAgICBO
b2RlSW1wbCAqX3N0YXJ0Q29udGFpbmVyLCBpbnQgX3N0YXJ0T2Zmc2V0LAorICAgICAgICAgICAg
ICBOb2RlSW1wbCAqX2VuZENvbnRhaW5lciwgaW50IF9lbmRPZmZzZXQpCiB7CiAgICAgbV9vd25l
ckRvY3VtZW50ID0gX293bmVyRG9jdW1lbnQ7CiAgICAgbV9vd25lckRvY3VtZW50LT5yZWYoKTsK
QEAgLTkyLDcgKzkyLDcgQEAgTm9kZUltcGwgKlJhbmdlSW1wbDo6c3RhcnRDb250YWluZXIoaW50
IAogICAgIHJldHVybiBtX3N0YXJ0Q29udGFpbmVyOwogfQogCi1sb25nIFJhbmdlSW1wbDo6c3Rh
cnRPZmZzZXQoaW50ICZleGNlcHRpb25jb2RlKSBjb25zdAoraW50IFJhbmdlSW1wbDo6c3RhcnRP
ZmZzZXQoaW50ICZleGNlcHRpb25jb2RlKSBjb25zdAogewogICAgIGlmIChtX2RldGFjaGVkKSB7
CiAgICAgICAgIGV4Y2VwdGlvbmNvZGUgPSBET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJS
OwpAQCAtMTEyLDcgKzExMiw3IEBAIE5vZGVJbXBsICpSYW5nZUltcGw6OmVuZENvbnRhaW5lcihp
bnQgJmUKICAgICByZXR1cm4gbV9lbmRDb250YWluZXI7CiB9CiAKLWxvbmcgUmFuZ2VJbXBsOjpl
bmRPZmZzZXQoaW50ICZleGNlcHRpb25jb2RlKSBjb25zdAoraW50IFJhbmdlSW1wbDo6ZW5kT2Zm
c2V0KGludCAmZXhjZXB0aW9uY29kZSkgY29uc3QKIHsKICAgICBpZiAobV9kZXRhY2hlZCkgewog
ICAgICAgICBleGNlcHRpb25jb2RlID0gRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUjsK
QEAgLTE2Myw3ICsxNjMsNyBAQCBib29sIFJhbmdlSW1wbDo6Y29sbGFwc2VkKGludCAmZXhjZXB0
aW9uCiAgICAgcmV0dXJuIChtX3N0YXJ0Q29udGFpbmVyID09IG1fZW5kQ29udGFpbmVyICYmIG1f
c3RhcnRPZmZzZXQgPT0gbV9lbmRPZmZzZXQpOwogfQogCi12b2lkIFJhbmdlSW1wbDo6c2V0U3Rh
cnQoIE5vZGVJbXBsICpyZWZOb2RlLCBsb25nIG9mZnNldCwgaW50ICZleGNlcHRpb25jb2RlICkK
K3ZvaWQgUmFuZ2VJbXBsOjpzZXRTdGFydCggTm9kZUltcGwgKnJlZk5vZGUsIGludCBvZmZzZXQs
IGludCAmZXhjZXB0aW9uY29kZSApCiB7CiAgICAgaWYgKG1fZGV0YWNoZWQpIHsKICAgICAgICAg
ZXhjZXB0aW9uY29kZSA9IERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlI7CkBAIC0yMDEs
NyArMjAxLDcgQEAgdm9pZCBSYW5nZUltcGw6OnNldFN0YXJ0KCBOb2RlSW1wbCAqcmVmTgogICAg
ICAgICBjb2xsYXBzZSh0cnVlLGV4Y2VwdGlvbmNvZGUpOwogfQogCi12b2lkIFJhbmdlSW1wbDo6
c2V0RW5kKCBOb2RlSW1wbCAqcmVmTm9kZSwgbG9uZyBvZmZzZXQsIGludCAmZXhjZXB0aW9uY29k
ZSApCit2b2lkIFJhbmdlSW1wbDo6c2V0RW5kKCBOb2RlSW1wbCAqcmVmTm9kZSwgaW50IG9mZnNl
dCwgaW50ICZleGNlcHRpb25jb2RlICkKIHsKICAgICBpZiAobV9kZXRhY2hlZCkgewogICAgICAg
ICBleGNlcHRpb25jb2RlID0gRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUjsKQEAgLTMx
NSw3ICszMTUsNyBAQCBzaG9ydCBSYW5nZUltcGw6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyggCiAg
ICAgfQogfQogCi1zaG9ydCBSYW5nZUltcGw6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyggTm9kZUlt
cGwgKmNvbnRhaW5lckEsIGxvbmcgb2Zmc2V0QSwgTm9kZUltcGwgKmNvbnRhaW5lckIsIGxvbmcg
b2Zmc2V0QiApCitzaG9ydCBSYW5nZUltcGw6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyggTm9kZUlt
cGwgKmNvbnRhaW5lckEsIGludCBvZmZzZXRBLCBOb2RlSW1wbCAqY29udGFpbmVyQiwgaW50IG9m
ZnNldEIgKQogewogICAgIC8vIHNlZSBET00yIHRyYXZlcnNhbCAmIHJhbmdlIHNlY3Rpb24gMi41
CiAKQEAgLTQ3MCw3ICs0NzAsNyBAQCBEb2N1bWVudEZyYWdtZW50SW1wbCAqUmFuZ2VJbXBsOjpw
cm9jZXNzCiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBOb2RlSW1wbCAq
biA9IG1fc3RhcnRDb250YWluZXItPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGxvbmcgaTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGk7CiAgICAgICAgICAgICBmb3IgKGkgPSAw
OyBuICYmIGkgPCBtX3N0YXJ0T2Zmc2V0OyBpKyspIC8vIHNraXAgdW50aWwgbV9zdGFydE9mZnNl
dAogICAgICAgICAgICAgICAgIG4gPSBuLT5uZXh0U2libGluZygpOwogICAgICAgICAgICAgd2hp
bGUgKG4gJiYgaSA8IG1fZW5kT2Zmc2V0KSB7IC8vIGRlbGV0ZSB1bnRpbCBtX2VuZE9mZnNldApA
QCAtNTMyLDcgKzUzMiw3IEBAIERvY3VtZW50RnJhZ21lbnRJbXBsICpSYW5nZUltcGw6OnByb2Nl
c3MKICAgICAgICAgICAgIGlmIChhY3Rpb24gPT0gRVhUUkFDVF9DT05URU5UUyB8fCBhY3Rpb24g
PT0gQ0xPTkVfQ09OVEVOVFMpCiAJCWxlZnRDb250ZW50cyA9IG1fc3RhcnRDb250YWluZXItPmNs
b25lTm9kZShmYWxzZSk7CiAgICAgICAgICAgICBOb2RlSW1wbCAqbiA9IG1fc3RhcnRDb250YWlu
ZXItPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9uZyBpID0gMDsg
biAmJiBpIDwgbV9zdGFydE9mZnNldDsgaSsrKSAvLyBza2lwIHVudGlsIG1fc3RhcnRPZmZzZXQK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IG4gJiYgaSA8IG1fc3RhcnRPZmZzZXQ7
IGkrKykgLy8gc2tpcCB1bnRpbCBtX3N0YXJ0T2Zmc2V0CiAgICAgICAgICAgICAgICAgbiA9IG4t
Pm5leHRTaWJsaW5nKCk7CiAgICAgICAgICAgICB3aGlsZSAobikgeyAvLyBwcm9jZXNzIHVudGls
IGVuZAogCQlOb2RlSW1wbCAqbmV4dCA9IG4tPm5leHRTaWJsaW5nKCk7CkBAIC01OTQsNyArNTk0
LDcgQEAgRG9jdW1lbnRGcmFnbWVudEltcGwgKlJhbmdlSW1wbDo6cHJvY2VzcwogCQlyaWdodENv
bnRlbnRzID0gbV9lbmRDb250YWluZXItPmNsb25lTm9kZShmYWxzZSk7CiAgICAgICAgICAgICBO
b2RlSW1wbCAqbiA9IG1fZW5kQ29udGFpbmVyLT5maXJzdENoaWxkKCk7CiAgICAgICAgICAgICBp
ZiAobiAmJiBtX2VuZE9mZnNldCkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9u
ZyBpID0gMDsgaSsxIDwgbV9lbmRPZmZzZXQ7IGkrKykgeyAvLyBza2lwIHRvIG1fZW5kT2Zmc2V0
CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSsxIDwgbV9lbmRPZmZzZXQ7
IGkrKykgeyAvLyBza2lwIHRvIG1fZW5kT2Zmc2V0CiAgICAgICAgICAgICAgICAgICAgIE5vZGVJ
bXBsICpuZXh0ID0gbi0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFu
ZXh0KQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC02NDEsNyArNjQxLDcgQEAg
RG9jdW1lbnRGcmFnbWVudEltcGwgKlJhbmdlSW1wbDo6cHJvY2VzcwogCiAgICAgTm9kZUltcGwg
KnByb2Nlc3NTdGFydDsgLy8gY2hpbGQgb2YgY21uUm9vb3QKICAgICBpZiAobV9zdGFydENvbnRh
aW5lciA9PSBjbW5Sb290KSB7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgaTsKKyAgICAgICAgdW5z
aWduZWQgaTsKICAgICAgICAgcHJvY2Vzc1N0YXJ0ID0gbV9zdGFydENvbnRhaW5lci0+Zmlyc3RD
aGlsZCgpOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbV9zdGFydE9mZnNldDsgaSsrKQogICAg
ICAgICAgICAgcHJvY2Vzc1N0YXJ0ID0gcHJvY2Vzc1N0YXJ0LT5uZXh0U2libGluZygpOwpAQCAt
NjU0LDcgKzY1NCw3IEBAIERvY3VtZW50RnJhZ21lbnRJbXBsICpSYW5nZUltcGw6OnByb2Nlc3MK
ICAgICB9CiAgICAgTm9kZUltcGwgKnByb2Nlc3NFbmQ7IC8vIGNoaWxkIG9mIGNtblJvb290CiAg
ICAgaWYgKG1fZW5kQ29udGFpbmVyID09IGNtblJvb3QpIHsKLSAgICAgICAgdW5zaWduZWQgbG9u
ZyBpOworICAgICAgICB1bnNpZ25lZCBpOwogICAgICAgICBwcm9jZXNzRW5kID0gbV9lbmRDb250
YWluZXItPmZpcnN0Q2hpbGQoKTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IG1fZW5kT2Zmc2V0
OyBpKyspCiAgICAgICAgICAgICBwcm9jZXNzRW5kID0gcHJvY2Vzc0VuZC0+bmV4dFNpYmxpbmco
KTsKQEAgLTkxNiwxNiArOTE2LDE2IEBAIHZvaWQgUmFuZ2VJbXBsOjpjaGVja05vZGVXT2Zmc2V0
KCBOb2RlSW0KICAgICAgICAgY2FzZSBOb2RlOjpURVhUX05PREU6CiAgICAgICAgIGNhc2UgTm9k
ZTo6Q09NTUVOVF9OT0RFOgogICAgICAgICBjYXNlIE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERToK
LSAgICAgICAgICAgIGlmICggKHVuc2lnbmVkIGxvbmcpb2Zmc2V0ID4gc3RhdGljX2Nhc3Q8Q2hh
cmFjdGVyRGF0YUltcGwqPihuKS0+bGVuZ3RoKCkgKQorICAgICAgICAgICAgaWYgKCAodW5zaWdu
ZWQpb2Zmc2V0ID4gc3RhdGljX2Nhc3Q8Q2hhcmFjdGVyRGF0YUltcGwqPihuKS0+bGVuZ3RoKCkg
KQogICAgICAgICAgICAgICAgIGV4Y2VwdGlvbmNvZGUgPSBET01FeGNlcHRpb246OklOREVYX1NJ
WkVfRVJSOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTm9kZTo6UFJPQ0VTU0lO
R19JTlNUUlVDVElPTl9OT0RFOgogICAgICAgICAgICAgLy8gIyMjIGFyZSB3ZSBzdXBwb3NlZCB0
byBjaGVjayB3aXRoIGp1c3QgZGF0YSBvciB0aGUgd2hvbGUgY29udGVudHM/Ci0gICAgICAgICAg
ICBpZiAoICh1bnNpZ25lZCBsb25nKW9mZnNldCA+IHN0YXRpY19jYXN0PFByb2Nlc3NpbmdJbnN0
cnVjdGlvbkltcGwqPihuKS0+ZGF0YSgpLmxlbmd0aCgpICkKKyAgICAgICAgICAgIGlmICggKHVu
c2lnbmVkKW9mZnNldCA+IHN0YXRpY19jYXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbkltcGwqPihu
KS0+ZGF0YSgpLmxlbmd0aCgpICkKICAgICAgICAgICAgICAgICBleGNlcHRpb25jb2RlID0gRE9N
RXhjZXB0aW9uOjpJTkRFWF9TSVpFX0VSUjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgaWYgKCAodW5zaWduZWQgbG9uZylvZmZzZXQgPiBuLT5jaGls
ZE5vZGVDb3VudCgpICkKKyAgICAgICAgICAgIGlmICggKHVuc2lnbmVkKW9mZnNldCA+IG4tPmNo
aWxkTm9kZUNvdW50KCkgKQogICAgICAgICAgICAgICAgIGV4Y2VwdGlvbmNvZGUgPSBET01FeGNl
cHRpb246OklOREVYX1NJWkVfRVJSOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDog
V2ViQ29yZS9raHRtbC94bWwvZG9tMl9yYW5nZWltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tMl9yYW5nZWltcGwuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4yNQpkaWZmIC1wIC11IC1yMS4yNSBXZWJDb3JlL2todG1sL3htbC9kb20yX3Jh
bmdlaW1wbC5oCi0tLSBXZWJDb3JlL2todG1sL3htbC9kb20yX3JhbmdlaW1wbC5oCTE4IE1heSAy
MDA1IDIxOjEwOjI0IC0wMDAwCTEuMjUKKysrIFdlYkNvcmUva2h0bWwveG1sL2RvbTJfcmFuZ2Vp
bXBsLmgJMjEgQXVnIDIwMDUgMDU6Mjg6MjkgLTAwMDAKQEAgLTQ1LDI2ICs0NSwyNiBAQCBjbGFz
cyBSYW5nZUltcGwgOiBwdWJsaWMga2h0bWw6OlNoYXJlZDxSCiBwdWJsaWM6CiAgICAgUmFuZ2VJ
bXBsKERvY3VtZW50UHRyICpfb3duZXJEb2N1bWVudCk7CiAgICAgUmFuZ2VJbXBsKERvY3VtZW50
UHRyICpfb3duZXJEb2N1bWVudCwKLSAgICAgICAgICAgICAgTm9kZUltcGwgKl9zdGFydENvbnRh
aW5lciwgbG9uZyBfc3RhcnRPZmZzZXQsCi0gICAgICAgICAgICAgIE5vZGVJbXBsICpfZW5kQ29u
dGFpbmVyLCBsb25nIF9lbmRPZmZzZXQpOworICAgICAgICAgICAgICBOb2RlSW1wbCAqX3N0YXJ0
Q29udGFpbmVyLCBpbnQgX3N0YXJ0T2Zmc2V0LAorICAgICAgICAgICAgICBOb2RlSW1wbCAqX2Vu
ZENvbnRhaW5lciwgaW50IF9lbmRPZmZzZXQpOwogCiAgICAgflJhbmdlSW1wbCgpOwogCiAgICAg
TUFJTl9USFJFQURfQUxMT0NBVEVEOwogICAgIAogICAgIE5vZGVJbXBsICpzdGFydENvbnRhaW5l
cihpbnQgJmV4Y2VwdGlvbmNvZGUpIGNvbnN0OwotICAgIGxvbmcgc3RhcnRPZmZzZXQoaW50ICZl
eGNlcHRpb25jb2RlKSBjb25zdDsKKyAgICBpbnQgc3RhcnRPZmZzZXQoaW50ICZleGNlcHRpb25j
b2RlKSBjb25zdDsKICAgICBOb2RlSW1wbCAqZW5kQ29udGFpbmVyKGludCAmZXhjZXB0aW9uY29k
ZSkgY29uc3Q7Ci0gICAgbG9uZyBlbmRPZmZzZXQoaW50ICZleGNlcHRpb25jb2RlKSBjb25zdDsK
KyAgICBpbnQgZW5kT2Zmc2V0KGludCAmZXhjZXB0aW9uY29kZSkgY29uc3Q7CiAgICAgYm9vbCBj
b2xsYXBzZWQoaW50ICZleGNlcHRpb25jb2RlKSBjb25zdDsKIAogICAgIE5vZGVJbXBsICpjb21t
b25BbmNlc3RvckNvbnRhaW5lcihpbnQgJmV4Y2VwdGlvbmNvZGUpIGNvbnN0OwogICAgIHN0YXRp
YyBOb2RlSW1wbCAqY29tbW9uQW5jZXN0b3JDb250YWluZXIoTm9kZUltcGwgKmNvbnRhaW5lckEs
IE5vZGVJbXBsICpjb250YWluZXJCKTsKLSAgICB2b2lkIHNldFN0YXJ0ICggTm9kZUltcGwgKnJl
Zk5vZGUsIGxvbmcgb2Zmc2V0LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKLSAgICB2b2lkIHNldEVu
ZCAoIE5vZGVJbXBsICpyZWZOb2RlLCBsb25nIG9mZnNldCwgaW50ICZleGNlcHRpb25jb2RlICk7
CisgICAgdm9pZCBzZXRTdGFydCAoIE5vZGVJbXBsICpyZWZOb2RlLCBpbnQgb2Zmc2V0LCBpbnQg
JmV4Y2VwdGlvbmNvZGUgKTsKKyAgICB2b2lkIHNldEVuZCAoIE5vZGVJbXBsICpyZWZOb2RlLCBp
bnQgb2Zmc2V0LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKICAgICB2b2lkIGNvbGxhcHNlICggYm9v
bCB0b1N0YXJ0LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKICAgICBzaG9ydCBjb21wYXJlQm91bmRh
cnlQb2ludHMgKCBSYW5nZTo6Q29tcGFyZUhvdyBob3csIGNvbnN0IFJhbmdlSW1wbCAqc291cmNl
UmFuZ2UsIGludCAmZXhjZXB0aW9uY29kZSApIGNvbnN0OwotICAgIHN0YXRpYyBzaG9ydCBjb21w
YXJlQm91bmRhcnlQb2ludHMgKCBOb2RlSW1wbCAqY29udGFpbmVyQSwgbG9uZyBvZmZzZXRBLCBO
b2RlSW1wbCAqY29udGFpbmVyQiwgbG9uZyBvZmZzZXRCICk7CisgICAgc3RhdGljIHNob3J0IGNv
bXBhcmVCb3VuZGFyeVBvaW50cyAoIE5vZGVJbXBsICpjb250YWluZXJBLCBpbnQgb2Zmc2V0QSwg
Tm9kZUltcGwgKmNvbnRhaW5lckIsIGludCBvZmZzZXRCICk7CiAgICAgc3RhdGljIHNob3J0IGNv
bXBhcmVCb3VuZGFyeVBvaW50cyAoIGNvbnN0IFBvc2l0aW9uICZhLCBjb25zdCBQb3NpdGlvbiAm
YiApOwogICAgIGJvb2wgYm91bmRhcnlQb2ludHNWYWxpZCAoICApIGNvbnN0OwogICAgIHZvaWQg
ZGVsZXRlQ29udGVudHMgKCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKQEAgLTExMSw5ICsxMTEsOSBA
QCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgRG9jdW1lbnRQdHIgKm1fb3duZXJEb2N1bWVudDsK
ICAgICBOb2RlSW1wbCAqbV9zdGFydENvbnRhaW5lcjsKLSAgICB1bnNpZ25lZCBsb25nIG1fc3Rh
cnRPZmZzZXQ7CisgICAgdW5zaWduZWQgbV9zdGFydE9mZnNldDsKICAgICBOb2RlSW1wbCAqbV9l
bmRDb250YWluZXI7Ci0gICAgdW5zaWduZWQgbG9uZyBtX2VuZE9mZnNldDsKKyAgICB1bnNpZ25l
ZCBtX2VuZE9mZnNldDsKICAgICBib29sIG1fZGV0YWNoZWQ7CiAKIHByaXZhdGU6CkluZGV4OiBX
ZWJDb3JlL2todG1sL3htbC9kb20yX3RyYXZlcnNhbGltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb20yX3RyYXZlcnNhbGltcGwuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjExCmRpZmYgLXAgLXUgLXIxLjExIFdlYkNvcmUva2h0bWwv
eG1sL2RvbTJfdHJhdmVyc2FsaW1wbC5jcHAKLS0tIFdlYkNvcmUva2h0bWwveG1sL2RvbTJfdHJh
dmVyc2FsaW1wbC5jcHAJOSBKdWwgMjAwNSAyMDoxOToyMSAtMDAwMAkxLjExCisrKyBXZWJDb3Jl
L2todG1sL3htbC9kb20yX3RyYXZlcnNhbGltcGwuY3BwCTIxIEF1ZyAyMDA1IDA1OjI4OjI5IC0w
MDAwCkBAIC00OSw3ICs0OSw3IEBAIHNob3J0IE5vZGVGaWx0ZXJJbXBsOjphY2NlcHROb2RlKE5v
ZGVJbXAKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAotVHJhdmVyc2FsSW1wbDo6VHJhdmVyc2FsSW1wbChOb2RlSW1w
bCAqcm9vdE5vZGUsIGxvbmcgd2hhdFRvU2hvdywgTm9kZUZpbHRlckltcGwgKm5vZGVGaWx0ZXIs
IGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcykKK1RyYXZlcnNhbEltcGw6OlRyYXZlcnNhbElt
cGwoTm9kZUltcGwgKnJvb3ROb2RlLCBpbnQgd2hhdFRvU2hvdywgTm9kZUZpbHRlckltcGwgKm5v
ZGVGaWx0ZXIsIGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcykKICAgICA6IG1fcm9vdChyb290
Tm9kZSksIG1fd2hhdFRvU2hvdyh3aGF0VG9TaG93KSwgbV9maWx0ZXIobm9kZUZpbHRlciksIG1f
ZXhwYW5kRW50aXR5UmVmZXJlbmNlcyhleHBhbmRFbnRpdHlSZWZlcmVuY2VzKQogewogICAgIGlm
IChyb290KCkpCkBAIC03OSw3ICs3OSw3IEBAIHNob3J0IFRyYXZlcnNhbEltcGw6OmFjY2VwdE5v
ZGUoTm9kZUltcGwKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTm9kZUl0ZXJhdG9ySW1wbDo6Tm9kZUl0ZXJhdG9y
SW1wbChOb2RlSW1wbCAqcm9vdE5vZGUsIGxvbmcgd2hhdFRvU2hvdywgTm9kZUZpbHRlckltcGwg
KmZpbHRlciwgYm9vbCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzKQorTm9kZUl0ZXJhdG9ySW1wbDo6
Tm9kZUl0ZXJhdG9ySW1wbChOb2RlSW1wbCAqcm9vdE5vZGUsIGludCB3aGF0VG9TaG93LCBOb2Rl
RmlsdGVySW1wbCAqZmlsdGVyLCBib29sIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMpCiAgICAgOlRy
YXZlcnNhbEltcGwocm9vdE5vZGUsIHdoYXRUb1Nob3csIGZpbHRlciwgZXhwYW5kRW50aXR5UmVm
ZXJlbmNlcyksIG1fcmVmZXJlbmNlTm9kZSgwKSwgbV9iZWZvcmVSZWZlcmVuY2VOb2RlKHRydWUp
LCBtX2RldGFjaGVkKGZhbHNlKSwgbV9kb2MoMCkKIHsKICAgICBpZiAocm9vdCgpKSB7CkBAIC0y
NTUsNyArMjU1LDcgQEAgdm9pZCBOb2RlSXRlcmF0b3JJbXBsOjpub3RpZnlCZWZvcmVOb2RlUgog
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogCi1UcmVlV2Fsa2VySW1wbDo6VHJlZVdhbGtlckltcGwoTm9kZUltcGwgKnJv
b3ROb2RlLCBsb25nIHdoYXRUb1Nob3csIE5vZGVGaWx0ZXJJbXBsICpmaWx0ZXIsIGJvb2wgZXhw
YW5kRW50aXR5UmVmZXJlbmNlcykKK1RyZWVXYWxrZXJJbXBsOjpUcmVlV2Fsa2VySW1wbChOb2Rl
SW1wbCAqcm9vdE5vZGUsIGludCB3aGF0VG9TaG93LCBOb2RlRmlsdGVySW1wbCAqZmlsdGVyLCBi
b29sIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMpCiAgICAgOiBUcmF2ZXJzYWxJbXBsKHJvb3ROb2Rl
LCB3aGF0VG9TaG93LCBmaWx0ZXIsIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMpLCBtX2N1cnJlbnQo
cm9vdE5vZGUpCiB7CiAgICAgaWYgKGN1cnJlbnROb2RlKCkpCkluZGV4OiBXZWJDb3JlL2todG1s
L3htbC9kb20yX3RyYXZlcnNhbGltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC94bWwvZG9tMl90cmF2ZXJzYWxpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMTAKZGlmZiAtcCAtdSAtcjEuMTAgV2ViQ29yZS9raHRtbC94bWwvZG9tMl90cmF2ZXJz
YWxpbXBsLmgKLS0tIFdlYkNvcmUva2h0bWwveG1sL2RvbTJfdHJhdmVyc2FsaW1wbC5oCTEwIE1h
eSAyMDA1IDIxOjU5OjE0IC0wMDAwCTEuMTAKKysrIFdlYkNvcmUva2h0bWwveG1sL2RvbTJfdHJh
dmVyc2FsaW1wbC5oCTIxIEF1ZyAyMDA1IDA1OjI4OjI5IC0wMDAwCkBAIC01NSwxMyArNTUsMTMg
QEAgcHJpdmF0ZToKIGNsYXNzIFRyYXZlcnNhbEltcGwgOiBwdWJsaWMga2h0bWw6OlNoYXJlZDxU
cmF2ZXJzYWxJbXBsPgogewogcHVibGljOgotICAgIFRyYXZlcnNhbEltcGwoTm9kZUltcGwgKiwg
bG9uZyB3aGF0VG9TaG93LCBOb2RlRmlsdGVySW1wbCAqLCBib29sIGV4cGFuZEVudGl0eVJlZmVy
ZW5jZXMpOworICAgIFRyYXZlcnNhbEltcGwoTm9kZUltcGwgKiwgaW50IHdoYXRUb1Nob3csIE5v
ZGVGaWx0ZXJJbXBsICosIGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcyk7CiAgICAgflRyYXZl
cnNhbEltcGwoKTsKIAogICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKICAgICAKICAgICBOb2Rl
SW1wbCAqcm9vdCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdDsgfQotICAgIHVuc2lnbmVkIGxvbmcg
d2hhdFRvU2hvdygpIGNvbnN0IHsgcmV0dXJuIG1fd2hhdFRvU2hvdzsgfQorICAgIHVuc2lnbmVk
IHdoYXRUb1Nob3coKSBjb25zdCB7IHJldHVybiBtX3doYXRUb1Nob3c7IH0KICAgICBOb2RlRmls
dGVySW1wbCAqZmlsdGVyKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXI7IH0KICAgICBib29sIGV4
cGFuZEVudGl0eVJlZmVyZW5jZXMoKSBjb25zdCB7IHJldHVybiBtX2V4cGFuZEVudGl0eVJlZmVy
ZW5jZXM7IH0KIApAQCAtNzIsNyArNzIsNyBAQCBwcml2YXRlOgogICAgIFRyYXZlcnNhbEltcGwg
Jm9wZXJhdG9yPShjb25zdCBUcmF2ZXJzYWxJbXBsICYpOwogICAgIAogICAgIE5vZGVJbXBsICpt
X3Jvb3Q7Ci0gICAgbG9uZyBtX3doYXRUb1Nob3c7CisgICAgaW50IG1fd2hhdFRvU2hvdzsKICAg
ICBOb2RlRmlsdGVySW1wbCAqbV9maWx0ZXI7CiAgICAgYm9vbCBtX2V4cGFuZEVudGl0eVJlZmVy
ZW5jZXM7CiB9OwpAQCAtODAsNyArODAsNyBAQCBwcml2YXRlOgogY2xhc3MgTm9kZUl0ZXJhdG9y
SW1wbCA6IHB1YmxpYyBUcmF2ZXJzYWxJbXBsCiB7CiBwdWJsaWM6Ci0gICAgTm9kZUl0ZXJhdG9y
SW1wbChOb2RlSW1wbCAqLCBsb25nIHdoYXRUb1Nob3csIE5vZGVGaWx0ZXJJbXBsICosIGJvb2wg
ZXhwYW5kRW50aXR5UmVmZXJlbmNlcyk7CisgICAgTm9kZUl0ZXJhdG9ySW1wbChOb2RlSW1wbCAq
LCBpbnQgd2hhdFRvU2hvdywgTm9kZUZpbHRlckltcGwgKiwgYm9vbCBleHBhbmRFbnRpdHlSZWZl
cmVuY2VzKTsKICAgICB+Tm9kZUl0ZXJhdG9ySW1wbCgpOwogCiAgICAgTm9kZUltcGwgKm5leHRO
b2RlKGludCAmZXhjZXB0aW9uY29kZSk7CkBAIC0xMTksNyArMTE5LDcgQEAgcHJpdmF0ZToKIGNs
YXNzIFRyZWVXYWxrZXJJbXBsIDogcHVibGljIFRyYXZlcnNhbEltcGwKIHsKIHB1YmxpYzoKLSAg
ICBUcmVlV2Fsa2VySW1wbChOb2RlSW1wbCAqLCBsb25nIHdoYXRUb1Nob3csIE5vZGVGaWx0ZXJJ
bXBsICosIGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcyk7CisgICAgVHJlZVdhbGtlckltcGwo
Tm9kZUltcGwgKiwgaW50IHdoYXRUb1Nob3csIE5vZGVGaWx0ZXJJbXBsICosIGJvb2wgZXhwYW5k
RW50aXR5UmVmZXJlbmNlcyk7CiAgICAgflRyZWVXYWxrZXJJbXBsKCk7CiAKICAgICBOb2RlSW1w
bCAqY3VycmVudE5vZGUoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnQ7IH0KSW5kZXg6IFdlYkNv
cmUva2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX2RvY2ltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjI0NgpkaWZmIC1wIC11IC1yMS4yNDYgV2ViQ29yZS9raHRtbC94bWwvZG9tX2RvY2ltcGwu
Y3BwCi0tLSBXZWJDb3JlL2todG1sL3htbC9kb21fZG9jaW1wbC5jcHAJMTkgQXVnIDIwMDUgMjM6
MDk6MTggLTAwMDAJMS4yNDYKKysrIFdlYkNvcmUva2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcAky
MSBBdWcgMjAwNSAwNToyODozMSAtMDAwMApAQCAtODYwLDcgKzg2MCw3IEBAIFJhbmdlSW1wbCAq
RG9jdW1lbnRJbXBsOjpjcmVhdGVSYW5nZSgpCiAgICAgcmV0dXJuIG5ldyBSYW5nZUltcGwoIGRv
Y1B0cigpICk7CiB9CiAKLU5vZGVJdGVyYXRvckltcGwgKkRvY3VtZW50SW1wbDo6Y3JlYXRlTm9k
ZUl0ZXJhdG9yKE5vZGVJbXBsICpyb290LCB1bnNpZ25lZCBsb25nIHdoYXRUb1Nob3csIAorTm9k
ZUl0ZXJhdG9ySW1wbCAqRG9jdW1lbnRJbXBsOjpjcmVhdGVOb2RlSXRlcmF0b3IoTm9kZUltcGwg
KnJvb3QsIHVuc2lnbmVkIHdoYXRUb1Nob3csIAogICAgIE5vZGVGaWx0ZXJJbXBsICpmaWx0ZXIs
IGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcywgaW50ICZleGNlcHRpb25jb2RlKQogewogICAg
IGlmICghcm9vdCkgewpAQCAtODcwLDcgKzg3MCw3IEBAIE5vZGVJdGVyYXRvckltcGwgKkRvY3Vt
ZW50SW1wbDo6Y3JlYXRlTm8KICAgICByZXR1cm4gbmV3IE5vZGVJdGVyYXRvckltcGwocm9vdCwg
d2hhdFRvU2hvdywgZmlsdGVyLCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzKTsKIH0KIAotVHJlZVdh
bGtlckltcGwgKkRvY3VtZW50SW1wbDo6Y3JlYXRlVHJlZVdhbGtlcihOb2RlSW1wbCAqcm9vdCwg
dW5zaWduZWQgbG9uZyB3aGF0VG9TaG93LCAKK1RyZWVXYWxrZXJJbXBsICpEb2N1bWVudEltcGw6
OmNyZWF0ZVRyZWVXYWxrZXIoTm9kZUltcGwgKnJvb3QsIHVuc2lnbmVkIHdoYXRUb1Nob3csIAog
ICAgIE5vZGVGaWx0ZXJJbXBsICpmaWx0ZXIsIGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcywg
aW50ICZleGNlcHRpb25jb2RlKQogewogICAgIGlmICghcm9vdCkgewpAQCAtMTgwMiw3ICsxODAy
LDcgQEAgdm9pZCBEb2N1bWVudEltcGw6OnByb2Nlc3NIdHRwRXF1aXYoY29ucwogICAgIGVsc2Ug
aWYoc3RyY2FzZWNtcChlcXVpdiwgImV4cGlyZXMiKSA9PSAwKQogICAgIHsKICAgICAgICAgUVN0
cmluZyBzdHIgPSBjb250ZW50LnN0cmluZygpLnN0cmlwV2hpdGVTcGFjZSgpOwotICAgICAgICB0
aW1lX3QgZXhwaXJlX2RhdGUgPSBzdHIudG9Mb25nKCk7CisgICAgICAgIHRpbWVfdCBleHBpcmVf
ZGF0ZSA9IHN0ci50b0ludCgpOwogICAgICAgICBpZiAobV9kb2NMb2FkZXIpCiAgICAgICAgICAg
ICBtX2RvY0xvYWRlci0+c2V0RXhwaXJlRGF0ZShleHBpcmVfZGF0ZSk7CiAgICAgfQpAQCAtMjg4
OCw3ICsyODg4LDcgQEAgUVZhbHVlTGlzdDxEb2N1bWVudE1hcmtlcj4gRG9jdW1lbnRJbXBsOgog
ICAgIH0KIH0KIAotdm9pZCBEb2N1bWVudEltcGw6OnJlbW92ZUFsbE1hcmtlcnMoTm9kZUltcGwg
Km5vZGUsIHVsb25nIHN0YXJ0T2Zmc2V0LCBsb25nIGxlbmd0aCkKK3ZvaWQgRG9jdW1lbnRJbXBs
OjpyZW1vdmVBbGxNYXJrZXJzKE5vZGVJbXBsICpub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwg
aW50IGxlbmd0aCkKIHsKICAgICAvLyBGSVhNRSAtIHlldCBhbm90aGVyIGNoZWF0IHRoYXQgcmVs
aWVzIG9uIHVzIG9ubHkgaGF2aW5nIG9uZSBtYXJrZXIgdHlwZQogICAgIERvY3VtZW50TWFya2Vy
IG1hcmtlciA9IHtEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcsIHN0YXJ0T2Zmc2V0LCBzdGFydE9m
ZnNldCtsZW5ndGh9OwpAQCAtMjkxNyw3ICsyOTE3LDcgQEAgdm9pZCBEb2N1bWVudEltcGw6OnJl
bW92ZUFsbE1hcmtlcnMoKQogICAgIG1fbWFya2Vycy5jbGVhcigpOwogfQogCi12b2lkIERvY3Vt
ZW50SW1wbDo6c2hpZnRNYXJrZXJzKE5vZGVJbXBsICpub2RlLCB1bG9uZyBzdGFydE9mZnNldCwg
bG9uZyBkZWx0YSkKK3ZvaWQgRG9jdW1lbnRJbXBsOjpzaGlmdE1hcmtlcnMoTm9kZUltcGwgKm5v
ZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbnQgZGVsdGEpCiB7CiAgICAgUVZhbHVlTGlzdCA8
RG9jdW1lbnRNYXJrZXI+ICptYXJrZXJzID0gbV9tYXJrZXJzLmZpbmQobm9kZSk7CiAgICAgaWYg
KCFtYXJrZXJzKQpJbmRleDogV2ViQ29yZS9raHRtbC94bWwvZG9tX2RvY2ltcGwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX2RvY2ltcGwuaCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMjEKZGlmZiAtcCAtdSAtcjEuMTIxIFdlYkNvcmUva2h0
bWwveG1sL2RvbV9kb2NpbXBsLmgKLS0tIFdlYkNvcmUva2h0bWwveG1sL2RvbV9kb2NpbXBsLmgJ
MjkgSnVsIDIwMDUgMjM6MDI6NDQgLTAwMDAJMS4xMjEKKysrIFdlYkNvcmUva2h0bWwveG1sL2Rv
bV9kb2NpbXBsLmgJMjEgQXVnIDIwMDUgMDU6Mjg6MzIgLTAwMDAKQEAgLTExNCw3ICsxMTQsNyBA
QCBuYW1lc3BhY2UgRE9NIHsKICAgICAgICAgfTsKICAgICAgICAgCiAgICAgICAgIGVudW0gTWFy
a2VyVHlwZSB0eXBlOwotICAgICAgICB1bG9uZyBzdGFydE9mZnNldCwgZW5kT2Zmc2V0OworICAg
ICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0OwogICAgICAgICAKICAgICAgICAg
Ym9vbCBvcGVyYXRvciA9PSAoY29uc3QgRG9jdW1lbnRNYXJrZXIgJm8pIGNvbnN0IHsKICAgICAg
ICAgICAgIHJldHVybiB0eXBlID09IG8udHlwZSAmJiBzdGFydE9mZnNldCA9PSBvLnN0YXJ0T2Zm
c2V0ICYmIGVuZE9mZnNldCA9PSBvLmVuZE9mZnNldDsKQEAgLTI3MywxMCArMjczLDEwIEBAIHB1
YmxpYzoKIAogICAgIFJhbmdlSW1wbCAqY3JlYXRlUmFuZ2UoKTsKIAotICAgIE5vZGVJdGVyYXRv
ckltcGwgKmNyZWF0ZU5vZGVJdGVyYXRvcihOb2RlSW1wbCAqcm9vdCwgdW5zaWduZWQgbG9uZyB3
aGF0VG9TaG93LAorICAgIE5vZGVJdGVyYXRvckltcGwgKmNyZWF0ZU5vZGVJdGVyYXRvcihOb2Rl
SW1wbCAqcm9vdCwgdW5zaWduZWQgd2hhdFRvU2hvdywKICAgICAgICAgTm9kZUZpbHRlckltcGwg
KmZpbHRlciwgYm9vbCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzLCBpbnQgJmV4Y2VwdGlvbmNvZGUp
OwogCi0gICAgVHJlZVdhbGtlckltcGwgKmNyZWF0ZVRyZWVXYWxrZXIoTm9kZUltcGwgKnJvb3Qs
IHVuc2lnbmVkIGxvbmcgd2hhdFRvU2hvdywgCisgICAgVHJlZVdhbGtlckltcGwgKmNyZWF0ZVRy
ZWVXYWxrZXIoTm9kZUltcGwgKnJvb3QsIHVuc2lnbmVkIHdoYXRUb1Nob3csIAogICAgICAgICBO
b2RlRmlsdGVySW1wbCAqZmlsdGVyLCBib29sIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMsIGludCAm
ZXhjZXB0aW9uY29kZSk7CiAKICAgICAvLyBTcGVjaWFsIHN1cHBvcnQgZm9yIGVkaXRpbmcKQEAg
LTUzNywxMCArNTM3LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZU1hcmtlcihSYW5nZUlt
cGwgKnJhbmdlLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSB0eXBlKTsKICAgICB2b2lkIGFk
ZE1hcmtlcihOb2RlSW1wbCAqbm9kZSwgRG9jdW1lbnRNYXJrZXIgbWFya2VyKTsKICAgICB2b2lk
IHJlbW92ZU1hcmtlcihOb2RlSW1wbCAqbm9kZSwgRG9jdW1lbnRNYXJrZXIgbWFya2VyKTsKLSAg
ICB2b2lkIHJlbW92ZUFsbE1hcmtlcnMoTm9kZUltcGwgKm5vZGUsIHVsb25nIHN0YXJ0T2Zmc2V0
LCBsb25nIGxlbmd0aCk7CisgICAgdm9pZCByZW1vdmVBbGxNYXJrZXJzKE5vZGVJbXBsICpub2Rl
LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGxlbmd0aCk7CiAgICAgdm9pZCByZW1vdmVBbGxN
YXJrZXJzKE5vZGVJbXBsICpub2RlKTsKICAgICB2b2lkIHJlbW92ZUFsbE1hcmtlcnMoKTsKLSAg
ICB2b2lkIHNoaWZ0TWFya2VycyhOb2RlSW1wbCAqbm9kZSwgdWxvbmcgc3RhcnRPZmZzZXQsIGxv
bmcgZGVsdGEpOworICAgIHZvaWQgc2hpZnRNYXJrZXJzKE5vZGVJbXBsICpub2RlLCB1bnNpZ25l
ZCBzdGFydE9mZnNldCwgaW50IGRlbHRhKTsKICAgICBRVmFsdWVMaXN0PERvY3VtZW50TWFya2Vy
PiBtYXJrZXJzRm9yTm9kZShOb2RlSW1wbCAqbm9kZSk7CiAgICAgCiAgICAvKioKSW5kZXg6IFdl
YkNvcmUva2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuNzMKZGlmZiAtcCAtdSAtcjEuNzMgV2ViQ29yZS9raHRtbC94bWwvZG9t
X2VsZW1lbnRpbXBsLmNwcAotLS0gV2ViQ29yZS9raHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmNw
cAkxOSBBdWcgMjAwNSAyMzowOToxOCAtMDAwMAkxLjczCisrKyBXZWJDb3JlL2todG1sL3htbC9k
b21fZWxlbWVudGltcGwuY3BwCTIxIEF1ZyAyMDA1IDA1OjI4OjMzIC0wMDAwCkBAIC02MTAsOCAr
NjEwLDggQEAgRE9NU3RyaW5nIEVsZW1lbnRJbXBsOjpvcGVuVGFnU3RhcnRUb1N0cgogICAgIE5h
bWVkQXR0ck1hcEltcGwgKmF0dHJNYXAgPSBhdHRyaWJ1dGVzKHRydWUpOwogCiAgICAgaWYgKGF0
dHJNYXApIHsKLQl1bnNpZ25lZCBsb25nIG51bUF0dHJzID0gYXR0ck1hcC0+bGVuZ3RoKCk7Ci0J
Zm9yICh1bnNpZ25lZCBsb25nIGkgPSAwOyBpIDwgbnVtQXR0cnM7IGkrKykgeworCXVuc2lnbmVk
IG51bUF0dHJzID0gYXR0ck1hcC0+bGVuZ3RoKCk7CisJZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG51bUF0dHJzOyBpKyspIHsKIAkgICAgcmVzdWx0ICs9ICIgIjsKIAogCSAgICBBdHRyaWJ1dGVJ
bXBsICphdHRyaWJ1dGUgPSBhdHRyTWFwLT5hdHRyaWJ1dGVJdGVtKGkpOwpAQCAtOTU5LDcgKzk1
OSw3IEBAIFNoYXJlZFB0cjxOb2RlSW1wbD4gTmFtZWRBdHRyTWFwSW1wbDo6cmUKICAgICByZXR1
cm4gcjsKIH0KIAotQXR0ckltcGwgKk5hbWVkQXR0ck1hcEltcGw6Oml0ZW0gKCB1bnNpZ25lZCBs
b25nIGluZGV4ICkgY29uc3QKK0F0dHJJbXBsICpOYW1lZEF0dHJNYXBJbXBsOjppdGVtICggdW5z
aWduZWQgaW5kZXggKSBjb25zdAogewogICAgIGlmIChpbmRleCA+PSBsZW4pCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtOTcyLDcgKzk3Miw3IEBAIEF0dHJJbXBsICpOYW1lZEF0dHJNYXBJbXBsOjpp
dGVtICggdW5zaWcKIAogQXR0cmlidXRlSW1wbCogTmFtZWRBdHRyTWFwSW1wbDo6Z2V0QXR0cmli
dXRlSXRlbShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAogewotICAgIGZvciAodW5z
aWduZWQgbG9uZyBpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAgIGlmIChhdHRyc1tpXS0+bmFtZSgpLm1hdGNoZXMo
bmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gYXR0cnNbaV07CiAgICAgfQpAQCAtMTA2Niw4ICsx
MDY2LDggQEAgdm9pZCBOYW1lZEF0dHJNYXBJbXBsOjphZGRBdHRyaWJ1dGUoQXR0cgogCiB2b2lk
IE5hbWVkQXR0ck1hcEltcGw6OnJlbW92ZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBu
YW1lKQogewotICAgIHVuc2lnbmVkIGxvbmcgaW5kZXggPSBsZW4rMTsKLSAgICBmb3IgKHVuc2ln
bmVkIGxvbmcgaSA9IDA7IGkgPCBsZW47ICsraSkKKyAgICB1bnNpZ25lZCBpbmRleCA9IGxlbisx
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47ICsraSkKICAgICAgICAgaWYgKGF0
dHJzW2ldLT5uYW1lKCkubWF0Y2hlcyhuYW1lKSkgewogICAgICAgICAgICAgaW5kZXggPSBpOwog
ICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBXZWJDb3JlL2todG1sL3htbC9kb21fZWxlbWVudGlt
cGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9t
X2VsZW1lbnRpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTEKZGlmZiAtcCAtdSAtcjEu
NTEgV2ViQ29yZS9raHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmgKLS0tIFdlYkNvcmUva2h0bWwv
eG1sL2RvbV9lbGVtZW50aW1wbC5oCTE5IEF1ZyAyMDA1IDIzOjA5OjE4IC0wMDAwCTEuNTEKKysr
IFdlYkNvcmUva2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5oCTIxIEF1ZyAyMDA1IDA1OjI4OjMz
IC0wMDAwCkBAIC0yOTQsMTEgKzI5NCwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTaGFyZWRQ
dHI8Tm9kZUltcGw+IHJlbW92ZU5hbWVkSXRlbShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBp
bnQgJmV4Y2VwdGlvbmNvZGUpOwogICAgIHZpcnR1YWwgU2hhcmVkUHRyPE5vZGVJbXBsPiBzZXRO
YW1lZEl0ZW0oTm9kZUltcGwqIGFyZywgaW50ICZleGNlcHRpb25jb2RlKTsKIAotICAgIHZpcnR1
YWwgQXR0ckltcGwgKml0ZW0gKCB1bnNpZ25lZCBsb25nIGluZGV4ICkgY29uc3Q7Ci0gICAgdW5z
aWduZWQgbG9uZyBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBsZW47IH0KKyAgICB2aXJ0dWFsIEF0
dHJJbXBsICppdGVtICggdW5zaWduZWQgaW5kZXggKSBjb25zdDsKKyAgICB1bnNpZ25lZCBsZW5n
dGgoKSBjb25zdCB7IHJldHVybiBsZW47IH0KIAogICAgIC8vIE90aGVyIG1ldGhvZHMgKG5vdCBw
YXJ0IG9mIERPTSkKLSAgICBBdHRyaWJ1dGVJbXBsKiBhdHRyaWJ1dGVJdGVtKHVuc2lnbmVkIGxv
bmcgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0dHJzID8gYXR0cnNbaW5kZXhdIDogMDsgfQorICAg
IEF0dHJpYnV0ZUltcGwqIGF0dHJpYnV0ZUl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIGF0dHJzID8gYXR0cnNbaW5kZXhdIDogMDsgfQogICAgIEF0dHJpYnV0ZUltcGwqIGdldEF0
dHJpYnV0ZUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3Q7CiAgICAgdmlydHVh
bCBib29sIGlzUmVhZE9ubHkoKSB7IHJldHVybiBlbGVtZW50ID8gZWxlbWVudC0+aXNSZWFkT25s
eSgpIDogZmFsc2U7IH0KIApAQCAtNDA5LDcgKzQwOSw3IEBAIHB1YmxpYzoKICAgICBib29sIG1h
cHNFcXVpdmFsZW50KGNvbnN0IE5hbWVkTWFwcGVkQXR0ck1hcEltcGwqIG90aGVyTWFwKSBjb25z
dDsKICAgICBpbnQgZGVjbENvdW50KCkgY29uc3Q7CiAKLSAgICBNYXBwZWRBdHRyaWJ1dGVJbXBs
KiBhdHRyaWJ1dGVJdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgpIGNvbnN0CisgICAgTWFwcGVkQXR0
cmlidXRlSW1wbCogYXR0cmlidXRlSXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QKICAgICB7IHJl
dHVybiBhdHRycyA/IHN0YXRpY19jYXN0PE1hcHBlZEF0dHJpYnV0ZUltcGwqPihhdHRyc1tpbmRl
eF0pIDogMDsgfQogICAgIAogcHJpdmF0ZToKSW5kZXg6IFdlYkNvcmUva2h0bWwveG1sL2RvbV9u
b2RlaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
eG1sL2RvbV9ub2RlaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTc1CmRpZmYgLXAg
LXUgLXIxLjE3NSBXZWJDb3JlL2todG1sL3htbC9kb21fbm9kZWltcGwuY3BwCi0tLSBXZWJDb3Jl
L2todG1sL3htbC9kb21fbm9kZWltcGwuY3BwCTE5IEF1ZyAyMDA1IDIzOjA5OjE4IC0wMDAwCTEu
MTc1CisrKyBXZWJDb3JlL2todG1sL3htbC9kb21fbm9kZWltcGwuY3BwCTIxIEF1ZyAyMDA1IDA1
OjI4OjM1IC0wMDAwCkBAIC03Nyw4ICs3Nyw4IEBAIHB1YmxpYzoKICAgICBUYWdOb2RlTGlzdElt
cGwoTm9kZUltcGwgKm4sIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBB
dG9taWNTdHJpbmcmIGxvY2FsTmFtZSk7CiAKICAgICAvLyBET00gbWV0aG9kcyBvdmVycmlkZGVu
IGZyb20gIHBhcmVudCBjbGFzc2VzCi0gICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxlbmd0aCgp
IGNvbnN0OwotICAgIHZpcnR1YWwgTm9kZUltcGwgKml0ZW0gKHVuc2lnbmVkIGxvbmcgaW5kZXgp
IGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CisgICAgdmlydHVh
bCBOb2RlSW1wbCAqaXRlbSAodW5zaWduZWQgaW5kZXgpIGNvbnN0OwogCiAgICAgLy8gT3RoZXIg
bWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQogCkBAIC0yNDIsOSArMjQyLDkgQEAgdm9pZCBOb2Rl
SW1wbDo6bm9ybWFsaXplICgpCiAgICAgICAgIE5hbWVkQXR0ck1hcEltcGwgKmF0dHJNYXAgPSBl
bGVtZW50LT5hdHRyaWJ1dGVzKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoYXR0ck1hcCkgewot
ICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBudW1BdHRycyA9IGF0dHJNYXAtPmxlbmd0aCgpOwor
ICAgICAgICAgICAgdW5zaWduZWQgbnVtQXR0cnMgPSBhdHRyTWFwLT5sZW5ndGgoKTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsb25nIGkgPSAwOyBpIDwgbnVtQXR0
cnM7IGkrKykgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUF0dHJz
OyBpKyspIHsKICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVJbXBsICphdHRyaWJ1dGUgPSBhdHRy
TWFwLT5hdHRyaWJ1dGVJdGVtKGkpOwogICAgICAgICAgICAgICAgIEF0dHJJbXBsICphdHRyID0g
YXR0cmlidXRlLT5hdHRySW1wbCgpOwogICAgICAgICAgICAgICAgIApAQCAtMzY5LDEwICszNjks
MTAgQEAgYm9vbCBOb2RlSW1wbDo6aXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0CiAgICAgcmV0dXJu
IGlzRm9jdXNhYmxlKCk7CiB9CiAKLXVuc2lnbmVkIGxvbmcgTm9kZUltcGw6Om5vZGVJbmRleCgp
IGNvbnN0Cit1bnNpZ25lZCBOb2RlSW1wbDo6bm9kZUluZGV4KCkgY29uc3QKIHsKICAgICBOb2Rl
SW1wbCAqX3RlbXBOb2RlID0gcHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgdW5zaWduZWQgbG9uZyBj
b3VudD0wOworICAgIHVuc2lnbmVkIGNvdW50PTA7CiAgICAgZm9yKCBjb3VudD0wOyBfdGVtcE5v
ZGU7IGNvdW50KysgKQogICAgICAgICBfdGVtcE5vZGUgPSBfdGVtcE5vZGUtPnByZXZpb3VzU2li
bGluZygpOwogICAgIHJldHVybiBjb3VudDsKQEAgLTEwMDEsMTIgKzEwMDEsMTIgQEAgdm9pZCBO
b2RlSW1wbDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudAogewogfQogCi11bnNpZ25lZCBsb25n
IE5vZGVJbXBsOjpjaGlsZE5vZGVDb3VudCgpIGNvbnN0Cit1bnNpZ25lZCBOb2RlSW1wbDo6Y2hp
bGROb2RlQ291bnQoKSBjb25zdAogewogICAgIHJldHVybiAwOwogfQogCi1Ob2RlSW1wbCAqTm9k
ZUltcGw6OmNoaWxkTm9kZSh1bnNpZ25lZCBsb25nIC8qaW5kZXgqLykKK05vZGVJbXBsICpOb2Rl
SW1wbDo6Y2hpbGROb2RlKHVuc2lnbmVkIC8qaW5kZXgqLykKIHsKICAgICByZXR1cm4gMDsKIH0K
QEAgLTE0NzYsNyArMTQ3Niw3IEBAIFJlbmRlck9iamVjdCAqTm9kZUltcGw6OmNyZWF0ZVJlbmRl
cmVyKFIKICAgICByZXR1cm4gMDsKIH0KIAotbG9uZyBOb2RlSW1wbDo6bWF4T2Zmc2V0KCkgY29u
c3QKK2ludCBOb2RlSW1wbDo6bWF4T2Zmc2V0KCkgY29uc3QKIHsKICAgICByZXR1cm4gMTsKIH0K
QEAgLTE0ODQsNyArMTQ4NCw3IEBAIGxvbmcgTm9kZUltcGw6Om1heE9mZnNldCgpIGNvbnN0CiAv
LyBGSVhNRTogU2hvdWxkbid0IHRoZXNlIGZ1bmN0aW9ucyBiZSBpbiB0aGUgZWRpdGluZyBjb2Rl
PyAgQ29kZSB0aGF0IGFza3MgcXVlc3Rpb25zIGFib3V0IEhUTUwgaW4gdGhlIGNvcmUgRE9NIGNs
YXNzCiAvLyBpcyBvYnZpb3VzbHkgbWlzcGxhY2VkLgogLy8gbWV0aG9kIGZvciBlZGl0aW5nIG1h
ZG5lc3MsIHdoaWNoIGFsbG93cyBCUiwxIGFzIGEgcG9zaXRpb24sIHRob3VnaCB0aGF0IGlzIGlu
Y29ycmVjdAotbG9uZyBOb2RlSW1wbDo6bWF4RGVlcE9mZnNldCgpIGNvbnN0CitpbnQgTm9kZUlt
cGw6Om1heERlZXBPZmZzZXQoKSBjb25zdAogewogICAgIGlmIChvZmZzZXRJbkNoYXJhY3RlcnMo
bm9kZVR5cGUoKSkpCiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBUZXh0SW1wbCo+
KHRoaXMpLT5sZW5ndGgoKTsKQEAgLTE0OTUsMjcgKzE0OTUsMjcgQEAgbG9uZyBOb2RlSW1wbDo6
bWF4RGVlcE9mZnNldCgpIGNvbnN0CiAgICAgcmV0dXJuIGNoaWxkTm9kZUNvdW50KCk7CiB9CiAK
LWxvbmcgTm9kZUltcGw6OmNhcmV0TWluT2Zmc2V0KCkgY29uc3QKK2ludCBOb2RlSW1wbDo6Y2Fy
ZXRNaW5PZmZzZXQoKSBjb25zdAogewogICAgIHJldHVybiByZW5kZXJlcigpID8gcmVuZGVyZXIo
KS0+Y2FyZXRNaW5PZmZzZXQoKSA6IDA7CiB9CiAKLWxvbmcgTm9kZUltcGw6OmNhcmV0TWF4T2Zm
c2V0KCkgY29uc3QKK2ludCBOb2RlSW1wbDo6Y2FyZXRNYXhPZmZzZXQoKSBjb25zdAogewogICAg
IHJldHVybiByZW5kZXJlcigpID8gcmVuZGVyZXIoKS0+Y2FyZXRNYXhPZmZzZXQoKSA6IDE7CiB9
CiAKLXVuc2lnbmVkIGxvbmcgTm9kZUltcGw6OmNhcmV0TWF4UmVuZGVyZWRPZmZzZXQoKSBjb25z
dAordW5zaWduZWQgTm9kZUltcGw6OmNhcmV0TWF4UmVuZGVyZWRPZmZzZXQoKSBjb25zdAogewog
ICAgIHJldHVybiByZW5kZXJlcigpID8gcmVuZGVyZXIoKS0+Y2FyZXRNYXhSZW5kZXJlZE9mZnNl
dCgpIDogMTsKIH0KIAotbG9uZyBOb2RlSW1wbDo6cHJldmlvdXNPZmZzZXQgKGxvbmcgY3VycmVu
dCkgY29uc3QKK2ludCBOb2RlSW1wbDo6cHJldmlvdXNPZmZzZXQgKGludCBjdXJyZW50KSBjb25z
dAogewogICAgIHJldHVybiByZW5kZXJlcigpID8gcmVuZGVyZXIoKS0+cHJldmlvdXNPZmZzZXQo
Y3VycmVudCkgOiBjdXJyZW50IC0gMTsKIH0KIAotbG9uZyBOb2RlSW1wbDo6bmV4dE9mZnNldCAo
bG9uZyBjdXJyZW50KSBjb25zdAoraW50IE5vZGVJbXBsOjpuZXh0T2Zmc2V0IChpbnQgY3VycmVu
dCkgY29uc3QKIHsKICAgICByZXR1cm4gcmVuZGVyZXIoKSA/IHJlbmRlcmVyKCktPm5leHRPZmZz
ZXQoY3VycmVudCkgOiBjdXJyZW50ICsgMTsKIH0KQEAgLTI0MzIsMTggKzI0MzIsMTggQEAgdm9p
ZCBDb250YWluZXJOb2RlSW1wbDo6c2V0SG92ZXJlZChib29sIAogICAgIH0KIH0KIAotdW5zaWdu
ZWQgbG9uZyBDb250YWluZXJOb2RlSW1wbDo6Y2hpbGROb2RlQ291bnQoKSBjb25zdAordW5zaWdu
ZWQgQ29udGFpbmVyTm9kZUltcGw6OmNoaWxkTm9kZUNvdW50KCkgY29uc3QKIHsKLSAgICB1bnNp
Z25lZCBsb25nIGNvdW50ID0gMDsKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7CiAgICAgTm9kZUlt
cGwgKm47CiAgICAgZm9yIChuID0gZmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNpYmxpbmco
KSkKICAgICAgICAgY291bnQrKzsKICAgICByZXR1cm4gY291bnQ7CiB9CiAKLU5vZGVJbXBsICpD
b250YWluZXJOb2RlSW1wbDo6Y2hpbGROb2RlKHVuc2lnbmVkIGxvbmcgaW5kZXgpCitOb2RlSW1w
bCAqQ29udGFpbmVyTm9kZUltcGw6OmNoaWxkTm9kZSh1bnNpZ25lZCBpbmRleCkKIHsKLSAgICB1
bnNpZ25lZCBsb25nIGk7CisgICAgdW5zaWduZWQgaTsKICAgICBOb2RlSW1wbCAqbiA9IGZpcnN0
Q2hpbGQoKTsKICAgICBmb3IgKGkgPSAwOyBuICE9IDAgJiYgaSA8IGluZGV4OyBpKyspCiAgICAg
ICAgIG4gPSBuLT5uZXh0U2libGluZygpOwpAQCAtMjUyMiw3ICsyNTIyLDcgQEAgTm9kZUxpc3RJ
bXBsOjp+Tm9kZUxpc3RJbXBsKCkKICAgICByb290Tm9kZS0+ZGVyZWYoKTsKIH0KIAotdW5zaWdu
ZWQgbG9uZyBOb2RlTGlzdEltcGw6OnJlY3Vyc2l2ZUxlbmd0aCggTm9kZUltcGwgKnN0YXJ0ICkg
Y29uc3QKK3Vuc2lnbmVkIE5vZGVMaXN0SW1wbDo6cmVjdXJzaXZlTGVuZ3RoKCBOb2RlSW1wbCAq
c3RhcnQgKSBjb25zdAogewogICAgIGlmICghc3RhcnQpCiAJc3RhcnQgPSByb290Tm9kZTsKQEAg
LTI1MzEsNyArMjUzMSw3IEBAIHVuc2lnbmVkIGxvbmcgTm9kZUxpc3RJbXBsOjpyZWN1cnNpdmVM
ZW4KICAgICAgICAgcmV0dXJuIGNhY2hlZExlbmd0aDsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBs
b25nIGxlbiA9IDA7CisgICAgdW5zaWduZWQgbGVuID0gMDsKIAogICAgIGZvcihOb2RlSW1wbCAq
biA9IHN0YXJ0LT5maXJzdENoaWxkKCk7IG4gIT0gMDsgbiA9IG4tPm5leHRTaWJsaW5nKCkpIHsK
ICAgICAgICAgaWYgKCBuLT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSApIHsKQEAg
LTI1NDksNyArMjU0OSw3IEBAIHVuc2lnbmVkIGxvbmcgTm9kZUxpc3RJbXBsOjpyZWN1cnNpdmVM
ZW4KICAgICByZXR1cm4gbGVuOwogfQogCi1Ob2RlSW1wbCAqTm9kZUxpc3RJbXBsOjpyZWN1cnNp
dmVJdGVtICggdW5zaWduZWQgbG9uZyBvZmZzZXQsIE5vZGVJbXBsICpzdGFydCkgY29uc3QKK05v
ZGVJbXBsICpOb2RlTGlzdEltcGw6OnJlY3Vyc2l2ZUl0ZW0gKCB1bnNpZ25lZCBvZmZzZXQsIE5v
ZGVJbXBsICpzdGFydCkgY29uc3QKIHsKICAgICBpbnQgcmVtYWluaW5nT2Zmc2V0ID0gb2Zmc2V0
OwogICAgIGlmICghc3RhcnQpIHsKQEAgLTI2MDEsOSArMjYwMSw5IEBAIE5vZGVJbXBsICpOb2Rl
TGlzdEltcGw6Oml0ZW1CeUlkIChjb25zdCAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0g
ICAgdW5zaWduZWQgbG9uZyBsID0gbGVuZ3RoKCk7CisgICAgdW5zaWduZWQgbCA9IGxlbmd0aCgp
OwogCi0gICAgZm9yICggdW5zaWduZWQgbG9uZyBpID0gMDsgaSA8IGw7IGkrKyApIHsKKyAgICBm
b3IgKCB1bnNpZ25lZCBpID0gMDsgaSA8IGw7IGkrKyApIHsKICAgICAgICAgTm9kZUltcGwgKm5v
ZGUgPSBpdGVtKGkpOwogICAgICAgICAKICAgICAgICAgaWYgKCBzdGF0aWNfY2FzdDxFbGVtZW50
SW1wbCAqPihub2RlKS0+Z2V0SURBdHRyaWJ1dGUoKSA9PSBlbGVtZW50SWQgKSB7CkBAIC0yNjI2
LDkgKzI2MjYsOSBAQCBDaGlsZE5vZGVMaXN0SW1wbDo6Q2hpbGROb2RlTGlzdEltcGwoIE5vCiB7
CiB9CiAKLXVuc2lnbmVkIGxvbmcgQ2hpbGROb2RlTGlzdEltcGw6Omxlbmd0aCgpIGNvbnN0Cit1
bnNpZ25lZCBDaGlsZE5vZGVMaXN0SW1wbDo6bGVuZ3RoKCkgY29uc3QKIHsKLSAgICB1bnNpZ25l
ZCBsb25nIGxlbiA9IDA7CisgICAgdW5zaWduZWQgbGVuID0gMDsKICAgICBOb2RlSW1wbCAqbjsK
ICAgICBmb3IobiA9IHJvb3ROb2RlLT5maXJzdENoaWxkKCk7IG4gIT0gMDsgbiA9IG4tPm5leHRT
aWJsaW5nKCkpCiAgICAgICAgIGxlbisrOwpAQCAtMjYzNiw3ICsyNjM2LDcgQEAgdW5zaWduZWQg
bG9uZyBDaGlsZE5vZGVMaXN0SW1wbDo6bGVuZ3RoKAogICAgIHJldHVybiBsZW47CiB9CiAKLU5v
ZGVJbXBsICpDaGlsZE5vZGVMaXN0SW1wbDo6aXRlbSAoIHVuc2lnbmVkIGxvbmcgaW5kZXggKSBj
b25zdAorTm9kZUltcGwgKkNoaWxkTm9kZUxpc3RJbXBsOjppdGVtICggdW5zaWduZWQgaW5kZXgg
KSBjb25zdAogewogICAgIHVuc2lnbmVkIGludCBwb3MgPSAwOwogICAgIE5vZGVJbXBsICpuID0g
cm9vdE5vZGUtPmZpcnN0Q2hpbGQoKTsKQEAgLTI2NjIsMTIgKzI2NjIsMTIgQEAgVGFnTm9kZUxp
c3RJbXBsOjpUYWdOb2RlTGlzdEltcGwoTm9kZUltcAogewogfQogCi11bnNpZ25lZCBsb25nIFRh
Z05vZGVMaXN0SW1wbDo6bGVuZ3RoKCkgY29uc3QKK3Vuc2lnbmVkIFRhZ05vZGVMaXN0SW1wbDo6
bGVuZ3RoKCkgY29uc3QKIHsKICAgICByZXR1cm4gcmVjdXJzaXZlTGVuZ3RoKCk7CiB9CiAKLU5v
ZGVJbXBsICpUYWdOb2RlTGlzdEltcGw6Oml0ZW0odW5zaWduZWQgbG9uZyBpbmRleCkgY29uc3QK
K05vZGVJbXBsICpUYWdOb2RlTGlzdEltcGw6Oml0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIHJlY3Vyc2l2ZUl0ZW0oaW5kZXgpOwogfQpAQCAtMjY4OCwxMiArMjY4OCwx
MiBAQCBOYW1lTm9kZUxpc3RJbXBsOjpOYW1lTm9kZUxpc3RJbXBsKE5vZGVJCiB7CiB9CiAKLXVu
c2lnbmVkIGxvbmcgTmFtZU5vZGVMaXN0SW1wbDo6bGVuZ3RoKCkgY29uc3QKK3Vuc2lnbmVkIE5h
bWVOb2RlTGlzdEltcGw6Omxlbmd0aCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHJlY3Vyc2l2ZUxl
bmd0aCgpOwogfQogCi1Ob2RlSW1wbCAqTmFtZU5vZGVMaXN0SW1wbDo6aXRlbSAoIHVuc2lnbmVk
IGxvbmcgaW5kZXggKSBjb25zdAorTm9kZUltcGwgKk5hbWVOb2RlTGlzdEltcGw6Oml0ZW0gKCB1
bnNpZ25lZCBpbmRleCApIGNvbnN0CiB7CiAgICAgcmV0dXJuIHJlY3Vyc2l2ZUl0ZW0oIGluZGV4
ICk7CiB9CkluZGV4OiBXZWJDb3JlL2todG1sL3htbC9kb21fbm9kZWltcGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX25vZGVpbXBsLmgsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuOTcKZGlmZiAtcCAtdSAtcjEuOTcgV2ViQ29yZS9raHRtbC94
bWwvZG9tX25vZGVpbXBsLmgKLS0tIFdlYkNvcmUva2h0bWwveG1sL2RvbV9ub2RlaW1wbC5oCTgg
QXVnIDIwMDUgMjE6MTI6MDEgLTAwMDAJMS45NworKysgV2ViQ29yZS9raHRtbC94bWwvZG9tX25v
ZGVpbXBsLmgJMjEgQXVnIDIwMDUgMDU6Mjg6MzkgLTAwMDAKQEAgLTI1OSw3ICsyNTksNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlY2FsY1N0eWxlKCBTdHlsZUNoYW5nZSA9IE5vQ2hh
bmdlICkge30KICAgICBTdHlsZUNoYW5nZSBkaWZmKCBraHRtbDo6UmVuZGVyU3R5bGUgKnMxLCBr
aHRtbDo6UmVuZGVyU3R5bGUgKnMyICkgY29uc3Q7CiAKLSAgICB1bnNpZ25lZCBsb25nIG5vZGVJ
bmRleCgpIGNvbnN0OworICAgIHVuc2lnbmVkIG5vZGVJbmRleCgpIGNvbnN0OwogICAgIC8vIFJl
dHVybnMgdGhlIGRvY3VtZW50IHRoYXQgdGhpcyBub2RlIGlzIGFzc29jaWF0ZWQgd2l0aC4gVGhp
cyBpcyBndWFyYW50ZWVkIHRvIGFsd2F5cyBiZSBub24tbnVsbCwgYXMgb3Bwb3NlZCB0bwogICAg
IC8vIERPTSdzIG93bmVyRG9jdW1lbnQoKSB3aGljaCBpcyBudWxsIGZvciBEb2N1bWVudCBub2Rl
cyAoYW5kIHNvbWV0aW1lcyBEb2N1bWVudFR5cGUgbm9kZXMpLgogICAgIERvY3VtZW50SW1wbCog
Z2V0RG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBkb2N1bWVudC0+ZG9jdW1lbnQoKTsgfQpAQCAt
MzA0LDggKzMwNCw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBpc1JlYWRPbmx5KCk7
CiAgICAgdmlydHVhbCBib29sIGNoaWxkVHlwZUFsbG93ZWQoIHVuc2lnbmVkIHNob3J0IC8qdHlw
ZSovICkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgY2hpbGRO
b2RlQ291bnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIE5vZGVJbXBsICpjaGlsZE5vZGUodW5zaWdu
ZWQgbG9uZyBpbmRleCk7CisgICAgdmlydHVhbCB1bnNpZ25lZCBjaGlsZE5vZGVDb3VudCgpIGNv
bnN0OworICAgIHZpcnR1YWwgTm9kZUltcGwgKmNoaWxkTm9kZSh1bnNpZ25lZCBpbmRleCk7CiAK
ICAgICAvKioKICAgICAgKiBEb2VzIGEgcHJlLW9yZGVyIHRyYXZlcnNhbCBvZiB0aGUgdHJlZSB0
byBmaW5kIHRoZSBub2RlIG5leHQgbm9kZSBhZnRlciB0aGlzIG9uZS4gVGhpcyB1c2VzIHRoZSBz
YW1lIG9yZGVyIHRoYXQKQEAgLTM1MywxNCArMzUzLDE0IEBAIHB1YmxpYzoKIAl2b2lkIGNoZWNr
QWRkQ2hpbGQoTm9kZUltcGwgKm5ld0NoaWxkLCBpbnQgJmV4Y2VwdGlvbmNvZGUpOyAgICAvLyBF
cnJvci1jaGVja2luZyB3aGVuIGFkZGluZyB2aWEgdGhlIERPTSBBUEkKIAl2aXJ0dWFsIGJvb2wg
Y2hpbGRBbGxvd2VkKE5vZGVJbXBsICpuZXdDaGlsZCk7CQkJCSAgIC8vIEVycm9yLWNoZWNraW5n
IGR1cmluZyBwYXJzaW5nIHRoYXQgY2hlY2tzIHRoZSBEVEQKIAkKLSAgICB2aXJ0dWFsIGxvbmcg
bWF4T2Zmc2V0KCkgY29uc3Q7Ci0gICAgbG9uZyBtYXhEZWVwT2Zmc2V0KCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBsb25nIGNhcmV0TWluT2Zmc2V0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBsb25nIGNh
cmV0TWF4T2Zmc2V0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGNhcmV0TWF4
UmVuZGVyZWRPZmZzZXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBtYXhPZmZzZXQoKSBjb25z
dDsKKyAgICBpbnQgbWF4RGVlcE9mZnNldCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGNhcmV0
TWluT2Zmc2V0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgY2FyZXRNYXhPZmZzZXQoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGNhcmV0TWF4UmVuZGVyZWRPZmZzZXQoKSBjb25zdDsK
IAotICAgIHZpcnR1YWwgbG9uZyBwcmV2aW91c09mZnNldCAobG9uZyBjdXJyZW50KSBjb25zdDsK
LSAgICB2aXJ0dWFsIGxvbmcgbmV4dE9mZnNldCAobG9uZyBjdXJyZW50KSBjb25zdDsKKyAgICB2
aXJ0dWFsIGludCBwcmV2aW91c09mZnNldCAoaW50IGN1cnJlbnQpIGNvbnN0OworICAgIHZpcnR1
YWwgaW50IG5leHRPZmZzZXQgKGludCBjdXJyZW50KSBjb25zdDsKICAgICAKICNpZm5kZWYgTkRF
QlVHCiAgICAgdmlydHVhbCB2b2lkIGR1bXAoUVRleHRTdHJlYW0gKnN0cmVhbSwgUVN0cmluZyBp
bmQgPSAiIikgY29uc3Q7CkBAIC01MzUsOCArNTM1LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBzZXRGb2N1cyhib29sPXRydWUpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmUoYm9v
bCBhY3RpdmUgPSB0cnVlLCBib29sIHBhdXNlID0gZmFsc2UpOwogICAgIHZpcnR1YWwgdm9pZCBz
ZXRIb3ZlcmVkKGJvb2w9dHJ1ZSk7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGNoaWxkTm9k
ZUNvdW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBOb2RlSW1wbCAqY2hpbGROb2RlKHVuc2lnbmVk
IGxvbmcgaW5kZXgpOworICAgIHZpcnR1YWwgdW5zaWduZWQgY2hpbGROb2RlQ291bnQoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIE5vZGVJbXBsICpjaGlsZE5vZGUodW5zaWduZWQgaW5kZXgpOwogCiAg
ICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lk
IHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKQEAgLTU3NCw4ICs1NzQsOCBAQCBwdWJsaWM6CiAgICAg
TUFJTl9USFJFQURfQUxMT0NBVEVEOwogCiAgICAgLy8gRE9NIG1ldGhvZHMgJiBhdHRyaWJ1dGVz
IGZvciBOb2RlTGlzdAotICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsZW5ndGgoKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBOb2RlSW1wbCAqaXRlbSAoIHVuc2lnbmVkIGxvbmcgaW5kZXggKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBOb2RlSW1wbCAqaXRlbSAoIHVuc2lnbmVkIGluZGV4ICkgY29uc3QgPSAwOwogICAg
IHZpcnR1YWwgTm9kZUltcGwgKml0ZW1CeUlkICggY29uc3QgRE9NU3RyaW5nICYgZWxlbWVudElk
ICkgY29uc3Q7CiAKICAgICAvLyBPdGhlciBtZXRob2RzIChub3QgcGFydCBvZiBET00pCkBAIC01
ODUsMTQgKzU4NSwxNCBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICAvLyBoZWxwZXIgZnVu
Y3Rpb25zIGZvciBzZWFyY2hpbmcgYWxsIEVsZW1lbnRJbXBscyBpbiBhIHRyZWUKLSAgICB1bnNp
Z25lZCBsb25nIHJlY3Vyc2l2ZUxlbmd0aChOb2RlSW1wbCAqc3RhcnQgPSAwKSBjb25zdDsKLSAg
ICBOb2RlSW1wbCAqcmVjdXJzaXZlSXRlbSAoIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBOb2RlSW1w
bCAqc3RhcnQgPSAwICkgY29uc3Q7CisgICAgdW5zaWduZWQgcmVjdXJzaXZlTGVuZ3RoKE5vZGVJ
bXBsICpzdGFydCA9IDApIGNvbnN0OworICAgIE5vZGVJbXBsICpyZWN1cnNpdmVJdGVtICggdW5z
aWduZWQgb2Zmc2V0LCBOb2RlSW1wbCAqc3RhcnQgPSAwICkgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIG5vZGVNYXRjaGVzKCBOb2RlSW1wbCAqdGVzdE5vZGUgKSBjb25zdCA9IDA7CiAKICAgICBO
b2RlSW1wbCAqcm9vdE5vZGU7CiAgICAgbXV0YWJsZSBpbnQgY2FjaGVkTGVuZ3RoOwogICAgIG11
dGFibGUgTm9kZUltcGwgKmxhc3RJdGVtOwotICAgIG11dGFibGUgdW5zaWduZWQgbG9uZyBsYXN0
SXRlbU9mZnNldDsKKyAgICBtdXRhYmxlIHVuc2lnbmVkIGxhc3RJdGVtT2Zmc2V0OwogICAgIG11
dGFibGUgYm9vbCBpc0xlbmd0aENhY2hlVmFsaWQgOiAxOwogICAgIG11dGFibGUgYm9vbCBpc0l0
ZW1DYWNoZVZhbGlkIDogMTsKIH07CkBAIC02MDQsOCArNjA0LDggQEAgcHVibGljOgogCiAgICAg
Ly8gRE9NIG1ldGhvZHMgb3ZlcnJpZGRlbiBmcm9tICBwYXJlbnQgY2xhc3NlcwogCi0gICAgdmly
dHVhbCB1bnNpZ25lZCBsb25nIGxlbmd0aCgpIGNvbnN0OwotICAgIHZpcnR1YWwgTm9kZUltcGwg
Kml0ZW0gKCB1bnNpZ25lZCBsb25nIGluZGV4ICkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25l
ZCBsZW5ndGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIE5vZGVJbXBsICppdGVtICggdW5zaWduZWQg
aW5kZXggKSBjb25zdDsKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBub2RlTWF0Y2hl
cyggTm9kZUltcGwgKnRlc3ROb2RlICkgY29uc3Q7CkBAIC02MjEsOCArNjIxLDggQEAgcHVibGlj
OgogCiAgICAgLy8gRE9NIG1ldGhvZHMgb3ZlcnJpZGRlbiBmcm9tICBwYXJlbnQgY2xhc3Nlcwog
Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxlbmd0aCgpIGNvbnN0OwotICAgIHZpcnR1YWwg
Tm9kZUltcGwgKml0ZW0gKCB1bnNpZ25lZCBsb25nIGluZGV4ICkgY29uc3Q7CisgICAgdmlydHVh
bCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIE5vZGVJbXBsICppdGVtICgg
dW5zaWduZWQgaW5kZXggKSBjb25zdDsKIAogICAgIC8vIE90aGVyIG1ldGhvZHMgKG5vdCBwYXJ0
IG9mIERPTSkKICAgICB2aXJ0dWFsIHZvaWQgcm9vdE5vZGVDaGlsZHJlbkNoYW5nZWQoKSB7fTsK
QEAgLTY1OCw4ICs2NTgsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTaGFyZWRQdHI8Tm9kZUlt
cGw+IHJlbW92ZU5hbWVkSXRlbSAoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIGludCAm
ZXhjZXB0aW9uY29kZSkgPSAwOwogICAgIHZpcnR1YWwgU2hhcmVkUHRyPE5vZGVJbXBsPiBzZXRO
YW1lZEl0ZW0gKE5vZGVJbXBsKiBhcmcsIGludCAmZXhjZXB0aW9uY29kZSkgPSAwOwogCi0gICAg
dmlydHVhbCBOb2RlSW1wbCAqaXRlbSAoIHVuc2lnbmVkIGxvbmcgaW5kZXggKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxlbmd0aCggICkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgTm9kZUltcGwgKml0ZW0gKCB1bnNpZ25lZCBpbmRleCApIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCggICkgY29uc3QgPSAwOwogCiAgICAgLy8gT3RoZXIgbWV0
aG9kcyAobm90IHBhcnQgb2YgRE9NKQogICAgIHZpcnR1YWwgYm9vbCBpc1JlYWRPbmx5KCkgeyBy
ZXR1cm4gZmFsc2U7IH0KSW5kZXg6IFdlYkNvcmUva2h0bWwveG1sL2RvbV9wb3NpdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9wb3Np
dGlvbi5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNzUKZGlmZiAtcCAtdSAtcjEuNzUgV2Vi
Q29yZS9raHRtbC94bWwvZG9tX3Bvc2l0aW9uLmNwcAotLS0gV2ViQ29yZS9raHRtbC94bWwvZG9t
X3Bvc2l0aW9uLmNwcAkxNiBBdWcgMjAwNSAyMTo1Mzo1MyAtMDAwMAkxLjc1CisrKyBXZWJDb3Jl
L2todG1sL3htbC9kb21fcG9zaXRpb24uY3BwCTIxIEF1ZyAyMDA1IDA1OjI4OjM5IC0wMDAwCkBA
IC05OCw3ICs5OCw3IEBAIHN0YXRpYyBOb2RlSW1wbCAqcHJldmlvdXNSZW5kZXJlZEVkaXRhYmwK
IH0KIAogCi1Qb3NpdGlvbjo6UG9zaXRpb24oTm9kZUltcGwgKm5vZGUsIGxvbmcgb2Zmc2V0KSAK
K1Bvc2l0aW9uOjpQb3NpdGlvbihOb2RlSW1wbCAqbm9kZSwgaW50IG9mZnNldCkgCiAgICAgOiBt
X25vZGUobm9kZSksIG1fb2Zmc2V0KG9mZnNldCkgCiB7IAogICAgIGlmIChub2RlKSB7CkBAIC0x
NjcsNyArMTY3LDcgQEAgUG9zaXRpb24gUG9zaXRpb246OnByZXZpb3VzKEVVc2luZ0NvbXBvcwog
ICAgIGlmICghbikKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIAotICAgIGxvbmcgbyA9IG9m
ZnNldCgpOworICAgIGludCBvID0gb2Zmc2V0KCk7CiAgICAgYXNzZXJ0KG8gPj0gMCk7CiAKICAg
ICBpZiAobyA+IDApIHsKQEAgLTE5Niw3ICsxOTYsNyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6bmV4
dChFVXNpbmdDb21wb3NlZENoCiAgICAgaWYgKCFuKQogICAgICAgICByZXR1cm4gKnRoaXM7CiAg
ICAgCi0gICAgbG9uZyBvID0gb2Zmc2V0KCk7CisgICAgaW50IG8gPSBvZmZzZXQoKTsKICAgICBh
c3NlcnQobyA+PSAwKTsKIAogICAgIGlmIChvIDwgbi0+bWF4RGVlcE9mZnNldCgpKSB7CkBAIC0y
MzcsNyArMjM3LDcgQEAgYm9vbCBQb3NpdGlvbjo6YXRFbmQoKSBjb25zdAogICAgIHJldHVybiBv
ZmZzZXQoKSA+PSBuLT5tYXhEZWVwT2Zmc2V0KCkgJiYgbi0+cGFyZW50KCkgPT0gMDsKIH0KIAot
bG9uZyBQb3NpdGlvbjo6cmVuZGVyZWRPZmZzZXQoKSBjb25zdAoraW50IFBvc2l0aW9uOjpyZW5k
ZXJlZE9mZnNldCgpIGNvbnN0CiB7CiAgICAgaWYgKCFub2RlKCktPmlzVGV4dE5vZGUoKSkKICAg
ICAgICAgcmV0dXJuIG9mZnNldCgpOwpAQCAtMjQ1LDExICsyNDUsMTEgQEAgbG9uZyBQb3NpdGlv
bjo6cmVuZGVyZWRPZmZzZXQoKSBjb25zdAogICAgIGlmICghbm9kZSgpLT5yZW5kZXJlcigpKQog
ICAgICAgICByZXR1cm4gb2Zmc2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgIGxvbmcg
cmVzdWx0ID0gMDsKKyAgICBpbnQgcmVzdWx0ID0gMDsKICAgICBSZW5kZXJUZXh0ICp0ZXh0UmVu
ZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KG5vZGUoKS0+cmVuZGVyZXIoKSk7CiAg
ICAgZm9yIChJbmxpbmVUZXh0Qm94ICpib3ggPSB0ZXh0UmVuZGVyZXItPmZpcnN0VGV4dEJveCgp
OyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgewotICAgICAgICBsb25nIHN0YXJ0ID0g
Ym94LT5tX3N0YXJ0OwotICAgICAgICBsb25nIGVuZCA9IGJveC0+bV9zdGFydCArIGJveC0+bV9s
ZW47CisgICAgICAgIGludCBzdGFydCA9IGJveC0+bV9zdGFydDsKKyAgICAgICAgaW50IGVuZCA9
IGJveC0+bV9zdGFydCArIGJveC0+bV9sZW47CiAgICAgICAgIGlmIChvZmZzZXQoKSA8IHN0YXJ0
KQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgaWYgKG9mZnNldCgpIDw9IGVu
ZCkgewpAQCAtNTI2LDggKzUyNiw4IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjplcXVpdmFsZW50UmFu
Z2VDb21wbGkKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IDAgPD0gY29uc3RyYWluZWRPZmZzZXQg
PD0gbnVtIGtpZHMsIG90aGVyd2lzZSB1c2luZyB0aGlzIFBvc2l0aW9uCiAgICAgLy8gaW4gRE9N
IGNhbGxzIGNhbiByZXN1bHQgaW4gZXhjZXB0aW9ucy4KLSAgICBsb25nIG1heE9mZnNldCA9IG5v
ZGUoKS0+aXNUZXh0Tm9kZSgpID8gc3RhdGljX2Nhc3Q8VGV4dEltcGwgKj4obm9kZSgpKS0+bGVu
Z3RoKCk6IG5vZGUoKS0+Y2hpbGROb2RlQ291bnQoKTsKLSAgICBsb25nIGNvbnN0cmFpbmVkT2Zm
c2V0ID0gb2Zmc2V0KCkgPD0gMCA/IDAgOiBrTWluKG1heE9mZnNldCwgb2Zmc2V0KCkpOworICAg
IGludCBtYXhPZmZzZXQgPSBub2RlKCktPmlzVGV4dE5vZGUoKSA/IHN0YXRpY19jYXN0PFRleHRJ
bXBsICo+KG5vZGUoKSktPmxlbmd0aCgpOiBub2RlKCktPmNoaWxkTm9kZUNvdW50KCk7CisgICAg
aW50IGNvbnN0cmFpbmVkT2Zmc2V0ID0gb2Zmc2V0KCkgPD0gMCA/IDAgOiBrTWluKG1heE9mZnNl
dCwgb2Zmc2V0KCkpOwogCiAgICAgaWYgKCFub2RlKCktPnBhcmVudE5vZGUoKSkKICAgICAgICAg
cmV0dXJuIFBvc2l0aW9uKG5vZGUoKSwgY29uc3RyYWluZWRPZmZzZXQpOwpAQCAtNTM5LDcgKzUz
OSw3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjplcXVpdmFsZW50UmFuZ2VDb21wbGkKICAgICBpZiAo
IXJlbmRlcmVyLT5pc1JlcGxhY2VkKCkgJiYgIXJlbmRlcmVyLT5pc0JSKCkpCiAgICAgICAgIHJl
dHVybiBQb3NpdGlvbihub2RlKCksIGNvbnN0cmFpbmVkT2Zmc2V0KTsKICAgICAKLSAgICBsb25n
IG8gPSBvZmZzZXQoKTsKKyAgICBpbnQgbyA9IG9mZnNldCgpOwogICAgIGNvbnN0IE5vZGVJbXBs
ICpuID0gbm9kZSgpOwogICAgIHdoaWxlICgobiA9IG4tPnByZXZpb3VzU2libGluZygpKSkKICAg
ICAgICAgbysrOwpAQCAtNzE2LDggKzcxNiw4IEBAIGJvb2wgUG9zaXRpb246OnJlbmRlcnNJbkRp
ZmZlcmVudFBvc2l0aW8KICAgICBpZiAocG9zLm5vZGUoKS0+aXNUZXh0Tm9kZSgpICYmICFwb3Mu
aW5SZW5kZXJlZFRleHQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbG9uZyB0aGlz
UmVuZGVyZWRPZmZzZXQgPSByZW5kZXJlZE9mZnNldCgpOwotICAgIGxvbmcgcG9zUmVuZGVyZWRP
ZmZzZXQgPSBwb3MucmVuZGVyZWRPZmZzZXQoKTsKKyAgICBpbnQgdGhpc1JlbmRlcmVkT2Zmc2V0
ID0gcmVuZGVyZWRPZmZzZXQoKTsKKyAgICBpbnQgcG9zUmVuZGVyZWRPZmZzZXQgPSBwb3MucmVu
ZGVyZWRPZmZzZXQoKTsKIAogICAgIGlmIChyZW5kZXJlciA9PSBwb3NSZW5kZXJlciAmJiB0aGlz
UmVuZGVyZWRPZmZzZXQgPT0gcG9zUmVuZGVyZWRPZmZzZXQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTc0MiwxMiArNzQyLDEyIEBAIGJvb2wgUG9zaXRpb246OnJlbmRlcnNJbkRpZmZlcmVu
dFBvc2l0aW8KICAgICB9CiAKICAgICBpZiAobmV4dFJlbmRlcmVkRWRpdGFibGUobm9kZSgpKSA9
PSBwb3Mubm9kZSgpICYmIAotICAgICAgICB0aGlzUmVuZGVyZWRPZmZzZXQgPT0gKGxvbmcpbm9k
ZSgpLT5jYXJldE1heFJlbmRlcmVkT2Zmc2V0KCkgJiYgcG9zUmVuZGVyZWRPZmZzZXQgPT0gMCkg
eworICAgICAgICB0aGlzUmVuZGVyZWRPZmZzZXQgPT0gKGludClub2RlKCktPmNhcmV0TWF4UmVu
ZGVyZWRPZmZzZXQoKSAmJiBwb3NSZW5kZXJlZE9mZnNldCA9PSAwKSB7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAgICAgCiAgICAgaWYgKHByZXZpb3VzUmVuZGVyZWRFZGl0YWJsZShu
b2RlKCkpID09IHBvcy5ub2RlKCkgJiYgCi0gICAgICAgIHRoaXNSZW5kZXJlZE9mZnNldCA9PSAw
ICYmIHBvc1JlbmRlcmVkT2Zmc2V0ID09IChsb25nKXBvcy5ub2RlKCktPmNhcmV0TWF4UmVuZGVy
ZWRPZmZzZXQoKSkgeworICAgICAgICB0aGlzUmVuZGVyZWRPZmZzZXQgPT0gMCAmJiBwb3NSZW5k
ZXJlZE9mZnNldCA9PSAoaW50KXBvcy5ub2RlKCktPmNhcmV0TWF4UmVuZGVyZWRPZmZzZXQoKSkg
ewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC03ODAsNyArNzgwLDcgQEAgUG9z
aXRpb24gUG9zaXRpb246OnRyYWlsaW5nV2hpdGVzcGFjZVBvcwogCiAgICAgaWYgKG5vZGUoKS0+
aXNUZXh0Tm9kZSgpKSB7CiAgICAgICAgIFRleHRJbXBsICp0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0
PFRleHRJbXBsICo+KG5vZGUoKSk7Ci0gICAgICAgIGlmIChvZmZzZXQoKSA8IChsb25nKXRleHRO
b2RlLT5sZW5ndGgoKSkgeworICAgICAgICBpZiAob2Zmc2V0KCkgPCAoaW50KXRleHROb2RlLT5s
ZW5ndGgoKSkgewogICAgICAgICAgICAgRE9NU3RyaW5nIHN0cmluZyA9IHN0YXRpY19jYXN0PFRl
eHRJbXBsICo+KG5vZGUoKSktPmRhdGEoKTsKICAgICAgICAgICAgIGNvbnN0IFFDaGFyICZjID0g
c3RyaW5nW29mZnNldCgpXTsKICAgICAgICAgICAgIGlmIChjb25zaWRlck5vbkNvbGxhcHNpYmxl
V2hpdGVzcGFjZSA/IChjLmlzU3BhY2UoKSB8fCBjLnVuaWNvZGUoKSA9PSAweGEwKSA6IGlzQ29s
bGFwc2libGVXaGl0ZXNwYWNlKGMpKQpAQCAtODA4LDcgKzgwOCw3IEBAIHZvaWQgUG9zaXRpb246
OmRlYnVnUG9zaXRpb24oY29uc3QgY2hhciAKICAgICBpZiAoaXNOdWxsKCkpCiAgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiUG9zaXRpb24gWyVzXTogbnVsbFxuIiwgbXNnKTsKICAgICBlbHNlCi0g
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiUG9zaXRpb24gWyVzXTogJXMgWyVwXSBhdCAlbGRcbiIs
IG1zZywgbm9kZSgpLT5ub2RlTmFtZSgpLnN0cmluZygpLmxhdGluMSgpLCBub2RlKCksIG9mZnNl
dCgpKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJQb3NpdGlvbiBbJXNdOiAlcyBbJXBdIGF0
ICVkXG4iLCBtc2csIG5vZGUoKS0+bm9kZU5hbWUoKS5zdHJpbmcoKS5sYXRpbjEoKSwgbm9kZSgp
LCBvZmZzZXQoKSk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCkluZGV4OiBXZWJDb3JlL2todG1sL3ht
bC9kb21fcG9zaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC94bWwvZG9tX3Bvc2l0aW9uLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzQKZGlmZiAt
cCAtdSAtcjEuMzQgV2ViQ29yZS9raHRtbC94bWwvZG9tX3Bvc2l0aW9uLmgKLS0tIFdlYkNvcmUv
a2h0bWwveG1sL2RvbV9wb3NpdGlvbi5oCTIxIEp1biAyMDA1IDE4OjExOjEwIC0wMDAwCTEuMzQK
KysrIFdlYkNvcmUva2h0bWwveG1sL2RvbV9wb3NpdGlvbi5oCTIxIEF1ZyAyMDA1IDA1OjI4OjM5
IC0wMDAwCkBAIC00MSw3ICs0MSw3IEBAIGNsYXNzIFBvc2l0aW9uCiB7CiBwdWJsaWM6CiAgICAg
UG9zaXRpb24oKSA6IG1fbm9kZSgwKSwgbV9vZmZzZXQoMCkgeyB9Ci0gICAgUG9zaXRpb24oTm9k
ZUltcGwgKm5vZGUsIGxvbmcgb2Zmc2V0KTsKKyAgICBQb3NpdGlvbihOb2RlSW1wbCAqbm9kZSwg
aW50IG9mZnNldCk7CiAgICAgUG9zaXRpb24oY29uc3QgUG9zaXRpb24gJik7CiAgICAgflBvc2l0
aW9uKCk7CiAKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXIoKTsKIAog
ICAgIE5vZGVJbXBsICpub2RlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlOyB9Ci0gICAgbG9uZyBv
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAgIGludCBvZmZzZXQoKSBjb25z
dCB7IHJldHVybiBtX29mZnNldDsgfQogCiAgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVy
biBtX25vZGUgPT0gMDsgfQogICAgIGJvb2wgaXNOb3ROdWxsKCkgY29uc3QgeyByZXR1cm4gbV9u
b2RlICE9IDA7IH0KQEAgLTk2LDcgKzk2LDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgCiBwcml2
YXRlOgotICAgIGxvbmcgcmVuZGVyZWRPZmZzZXQoKSBjb25zdDsKKyAgICBpbnQgcmVuZGVyZWRP
ZmZzZXQoKSBjb25zdDsKIAogICAgIGJvb2wgaW5SZW5kZXJlZFRleHQoKSBjb25zdDsKIApAQCAt
MTA0LDcgKzEwNCw3IEBAIHByaXZhdGU6CiAgICAgUG9zaXRpb24gbmV4dENoYXJhY3RlclBvc2l0
aW9uKGtodG1sOjpFQWZmaW5pdHkgYWZmaW5pdHkpIGNvbnN0OwogICAgIAogICAgIE5vZGVJbXBs
ICptX25vZGU7Ci0gICAgbG9uZyBtX29mZnNldDsKKyAgICBpbnQgbV9vZmZzZXQ7CiB9OwogCiBp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBvc2l0aW9uICZhLCBjb25zdCBQb3NpdGlvbiAm
YikKSW5kZXg6IFdlYkNvcmUva2h0bWwveG1sL2RvbV90ZXh0aW1wbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV90ZXh0aW1wbC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMjUKZGlmZiAtcCAtdSAtcjEuMjUgV2ViQ29yZS9raHRtbC94
bWwvZG9tX3RleHRpbXBsLmNwcAotLS0gV2ViQ29yZS9raHRtbC94bWwvZG9tX3RleHRpbXBsLmNw
cAkxOCBKdWwgMjAwNSAyMTo0NDoyOSAtMDAwMAkxLjI1CisrKyBXZWJDb3JlL2todG1sL3htbC9k
b21fdGV4dGltcGwuY3BwCTIxIEF1ZyAyMDA1IDA1OjI4OjM5IC0wMDAwCkBAIC03OSwxMiArNzks
MTIgQEAgdm9pZCBDaGFyYWN0ZXJEYXRhSW1wbDo6c2V0RGF0YSggY29uc3QgRAogICAgIGdldERv
Y3VtZW50KCktPnJlbW92ZUFsbE1hcmtlcnModGhpcyk7CiB9CiAKLXVuc2lnbmVkIGxvbmcgQ2hh
cmFjdGVyRGF0YUltcGw6Omxlbmd0aCgpIGNvbnN0Cit1bnNpZ25lZCBDaGFyYWN0ZXJEYXRhSW1w
bDo6bGVuZ3RoKCkgY29uc3QKIHsKICAgICByZXR1cm4gc3RyLT5sOwogfQogCi1ET01TdHJpbmcg
Q2hhcmFjdGVyRGF0YUltcGw6OnN1YnN0cmluZ0RhdGEoIGNvbnN0IHVuc2lnbmVkIGxvbmcgb2Zm
c2V0LCBjb25zdCB1bnNpZ25lZCBsb25nIGNvdW50LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQorRE9N
U3RyaW5nIENoYXJhY3RlckRhdGFJbXBsOjpzdWJzdHJpbmdEYXRhKCBjb25zdCB1bnNpZ25lZCBv
ZmZzZXQsIGNvbnN0IHVuc2lnbmVkIGNvdW50LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQogewogICAg
IGV4Y2VwdGlvbmNvZGUgPSAwOwogICAgIGNoZWNrQ2hhckRhdGFPcGVyYXRpb24ob2Zmc2V0LCBl
eGNlcHRpb25jb2RlKTsKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIENoYXJhY3RlckRhdGFJbXBs
OjphcHBlbmREYXRhKCBjb25zCiAgICAgb2xkU3RyLT5kZXJlZigpOwogfQogCi12b2lkIENoYXJh
Y3RlckRhdGFJbXBsOjppbnNlcnREYXRhKCBjb25zdCB1bnNpZ25lZCBsb25nIG9mZnNldCwgY29u
c3QgRE9NU3RyaW5nICZhcmcsIGludCAmZXhjZXB0aW9uY29kZSApCit2b2lkIENoYXJhY3RlckRh
dGFJbXBsOjppbnNlcnREYXRhKCBjb25zdCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IERPTVN0cmlu
ZyAmYXJnLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQogewogICAgIGV4Y2VwdGlvbmNvZGUgPSAwOwog
ICAgIGNoZWNrQ2hhckRhdGFPcGVyYXRpb24ob2Zmc2V0LCBleGNlcHRpb25jb2RlKTsKQEAgLTEz
Nyw3ICsxMzcsNyBAQCB2b2lkIENoYXJhY3RlckRhdGFJbXBsOjppbnNlcnREYXRhKCBjb25zCiAg
ICAgZ2V0RG9jdW1lbnQoKS0+c2hpZnRNYXJrZXJzKHRoaXMsIG9mZnNldCwgbGVuZ3RoKTsKIH0K
IAotdm9pZCBDaGFyYWN0ZXJEYXRhSW1wbDo6ZGVsZXRlRGF0YSggY29uc3QgdW5zaWduZWQgbG9u
ZyBvZmZzZXQsIGNvbnN0IHVuc2lnbmVkIGxvbmcgY291bnQsIGludCAmZXhjZXB0aW9uY29kZSAp
Cit2b2lkIENoYXJhY3RlckRhdGFJbXBsOjpkZWxldGVEYXRhKCBjb25zdCB1bnNpZ25lZCBvZmZz
ZXQsIGNvbnN0IHVuc2lnbmVkIGNvdW50LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQogewogICAgIGV4
Y2VwdGlvbmNvZGUgPSAwOwogICAgIGNoZWNrQ2hhckRhdGFPcGVyYXRpb24ob2Zmc2V0LCBleGNl
cHRpb25jb2RlKTsKQEAgLTE1OSwxNCArMTU5LDE0IEBAIHZvaWQgQ2hhcmFjdGVyRGF0YUltcGw6
OmRlbGV0ZURhdGEoIGNvbnMKICAgICBnZXREb2N1bWVudCgpLT5zaGlmdE1hcmtlcnModGhpcywg
b2Zmc2V0ICsgY291bnQsIC1jb3VudCk7CiB9CiAKLXZvaWQgQ2hhcmFjdGVyRGF0YUltcGw6OnJl
cGxhY2VEYXRhKCBjb25zdCB1bnNpZ25lZCBsb25nIG9mZnNldCwgY29uc3QgdW5zaWduZWQgbG9u
ZyBjb3VudCwgY29uc3QgRE9NU3RyaW5nICZhcmcsIGludCAmZXhjZXB0aW9uY29kZSApCit2b2lk
IENoYXJhY3RlckRhdGFJbXBsOjpyZXBsYWNlRGF0YSggY29uc3QgdW5zaWduZWQgb2Zmc2V0LCBj
b25zdCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRE9NU3RyaW5nICZhcmcsIGludCAmZXhjZXB0aW9u
Y29kZSApCiB7CiAgICAgZXhjZXB0aW9uY29kZSA9IDA7CiAgICAgY2hlY2tDaGFyRGF0YU9wZXJh
dGlvbihvZmZzZXQsIGV4Y2VwdGlvbmNvZGUpOwogICAgIGlmIChleGNlcHRpb25jb2RlKQogICAg
ICAgICByZXR1cm47CiAKLSAgICB1bnNpZ25lZCBsb25nIHJlYWxDb3VudDsKKyAgICB1bnNpZ25l
ZCByZWFsQ291bnQ7CiAgICAgaWYgKG9mZnNldCArIGNvdW50ID4gc3RyLT5sKQogICAgICAgICBy
ZWFsQ291bnQgPSBzdHItPmwtb2Zmc2V0OwogICAgIGVsc2UKQEAgLTIzMCw3ICsyMzAsNyBAQCB2
b2lkIENoYXJhY3RlckRhdGFJbXBsOjpkaXNwYXRjaE1vZGlmaWVkCiAgICAgZGlzcGF0Y2hTdWJ0
cmVlTW9kaWZpZWRFdmVudCgpOwogfQogCi12b2lkIENoYXJhY3RlckRhdGFJbXBsOjpjaGVja0No
YXJEYXRhT3BlcmF0aW9uKCBjb25zdCB1bnNpZ25lZCBsb25nIG9mZnNldCwgaW50ICZleGNlcHRp
b25jb2RlICkKK3ZvaWQgQ2hhcmFjdGVyRGF0YUltcGw6OmNoZWNrQ2hhckRhdGFPcGVyYXRpb24o
IGNvbnN0IHVuc2lnbmVkIG9mZnNldCwgaW50ICZleGNlcHRpb25jb2RlICkKIHsKICAgICBleGNl
cHRpb25jb2RlID0gMDsKIApAQCAtMjQ4LDI0ICsyNDgsMjQgQEAgdm9pZCBDaGFyYWN0ZXJEYXRh
SW1wbDo6Y2hlY2tDaGFyRGF0YU9wZQogICAgIH0KIH0KIAotbG9uZyBDaGFyYWN0ZXJEYXRhSW1w
bDo6bWF4T2Zmc2V0KCkgY29uc3QgCitpbnQgQ2hhcmFjdGVyRGF0YUltcGw6Om1heE9mZnNldCgp
IGNvbnN0IAogewotICAgIHJldHVybiAobG9uZylsZW5ndGgoKTsKKyAgICByZXR1cm4gKGludCls
ZW5ndGgoKTsKIH0KIAotbG9uZyBDaGFyYWN0ZXJEYXRhSW1wbDo6Y2FyZXRNaW5PZmZzZXQoKSBj
b25zdCAKK2ludCBDaGFyYWN0ZXJEYXRhSW1wbDo6Y2FyZXRNaW5PZmZzZXQoKSBjb25zdCAKIHsK
ICAgICBSZW5kZXJUZXh0ICpyID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihyZW5kZXJlcigp
KTsKICAgICByZXR1cm4gciAmJiByLT5pc1RleHQoKSA/IHItPmNhcmV0TWluT2Zmc2V0KCkgOiAw
OwogfQogCi1sb25nIENoYXJhY3RlckRhdGFJbXBsOjpjYXJldE1heE9mZnNldCgpIGNvbnN0IAor
aW50IENoYXJhY3RlckRhdGFJbXBsOjpjYXJldE1heE9mZnNldCgpIGNvbnN0IAogewogICAgIFJl
bmRlclRleHQgKnIgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KHJlbmRlcmVyKCkpOwotICAg
IHJldHVybiByICYmIHItPmlzVGV4dCgpID8gci0+Y2FyZXRNYXhPZmZzZXQoKSA6IChsb25nKWxl
bmd0aCgpOworICAgIHJldHVybiByICYmIHItPmlzVGV4dCgpID8gci0+Y2FyZXRNYXhPZmZzZXQo
KSA6IChpbnQpbGVuZ3RoKCk7CiB9CiAKLXVuc2lnbmVkIGxvbmcgQ2hhcmFjdGVyRGF0YUltcGw6
OmNhcmV0TWF4UmVuZGVyZWRPZmZzZXQoKSBjb25zdCAKK3Vuc2lnbmVkIENoYXJhY3RlckRhdGFJ
bXBsOjpjYXJldE1heFJlbmRlcmVkT2Zmc2V0KCkgY29uc3QgCiB7CiAgICAgUmVuZGVyVGV4dCAq
ciA9IHN0YXRpY19jYXN0PFJlbmRlclRleHQgKj4ocmVuZGVyZXIoKSk7CiAgICAgcmV0dXJuIHIg
PyByLT5jYXJldE1heFJlbmRlcmVkT2Zmc2V0KCkgOiBsZW5ndGgoKTsKQEAgLTM1MywxNyArMzUz
LDE3IEBAIFRleHRJbXBsOjp+VGV4dEltcGwoKQogewogfQogCi1UZXh0SW1wbCAqVGV4dEltcGw6
OnNwbGl0VGV4dCggY29uc3QgdW5zaWduZWQgbG9uZyBvZmZzZXQsIGludCAmZXhjZXB0aW9uY29k
ZSApCitUZXh0SW1wbCAqVGV4dEltcGw6OnNwbGl0VGV4dCggY29uc3QgdW5zaWduZWQgb2Zmc2V0
LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQogewogICAgIGV4Y2VwdGlvbmNvZGUgPSAwOwogCiAgICAg
Ly8gSU5ERVhfU0laRV9FUlI6IFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIG9mZnNldCBpcyBuZWdh
dGl2ZSBvciBncmVhdGVyIHRoYW4KICAgICAvLyB0aGUgbnVtYmVyIG9mIDE2LWJpdCB1bml0cyBp
biBkYXRhLgogCi0gICAgLy8gIyMjIHdlIGV4cGxpY2l0bHkgY2hlY2sgZm9yIGEgbmVnYXRpdmUg
bG9uZyB0aGF0IGhhcyBiZWVuIGNhc3QgdG8gYW4gdW5zaWduZWQgbG9uZworICAgIC8vICMjIyB3
ZSBleHBsaWNpdGx5IGNoZWNrIGZvciBhIG5lZ2F0aXZlIG51bWJlciB0aGF0IGhhcyBiZWVuIGNh
c3QgdG8gYW4gdW5zaWduZWQKICAgICAvLyAuLi4gdGhpcyBjYW4gaGFwcGVuIGlmIEpTIGNvZGUg
cGFzc2VzIGluIC0xIC0gd2UgbmVlZCB0byBjYXRjaCB0aGlzIGVhcmxpZXIhIChpbiB0aGUKICAg
ICAvLyBranMgYmluZGluZ3MpCi0gICAgaWYgKG9mZnNldCA+IHN0ci0+bCB8fCAobG9uZylvZmZz
ZXQgPCAwKSB7CisgICAgaWYgKG9mZnNldCA+IHN0ci0+bCB8fCAoaW50KW9mZnNldCA8IDApIHsK
ICAgICAgICAgZXhjZXB0aW9uY29kZSA9IERPTUV4Y2VwdGlvbjo6SU5ERVhfU0laRV9FUlI7CiAg
ICAgICAgIHJldHVybiAwOwogICAgIH0KSW5kZXg6IFdlYkNvcmUva2h0bWwveG1sL2RvbV90ZXh0
aW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9k
b21fdGV4dGltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNwpkaWZmIC1wIC11IC1yMS4x
NyBXZWJDb3JlL2todG1sL3htbC9kb21fdGV4dGltcGwuaAotLS0gV2ViQ29yZS9raHRtbC94bWwv
ZG9tX3RleHRpbXBsLmgJOSBKdWwgMjAwNSAyMDoxOToyMiAtMDAwMAkxLjE3CisrKyBXZWJDb3Jl
L2todG1sL3htbC9kb21fdGV4dGltcGwuaAkyMSBBdWcgMjAwNSAwNToyODozOSAtMDAwMApAQCAt
NDYsMTIgKzQ2LDEyIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgRE9NU3RyaW5nIGRhdGEoKSBj
b25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YSggY29uc3QgRE9NU3RyaW5nICZfZGF0YSwg
aW50ICZleGNlcHRpb25jb2RlICk7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxlbmd0aCAo
ICApIGNvbnN0OwotICAgIHZpcnR1YWwgRE9NU3RyaW5nIHN1YnN0cmluZ0RhdGEgKCBjb25zdCB1
bnNpZ25lZCBsb25nIG9mZnNldCwgY29uc3QgdW5zaWduZWQgbG9uZyBjb3VudCwgaW50ICZleGNl
cHRpb25jb2RlICk7CisgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGggKCAgKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIERPTVN0cmluZyBzdWJzdHJpbmdEYXRhICggY29uc3QgdW5zaWduZWQgb2Zmc2V0
LCBjb25zdCB1bnNpZ25lZCBjb3VudCwgaW50ICZleGNlcHRpb25jb2RlICk7CiAgICAgdmlydHVh
bCB2b2lkIGFwcGVuZERhdGEgKCBjb25zdCBET01TdHJpbmcgJmFyZywgaW50ICZleGNlcHRpb25j
b2RlICk7Ci0gICAgdmlydHVhbCB2b2lkIGluc2VydERhdGEgKCBjb25zdCB1bnNpZ25lZCBsb25n
IG9mZnNldCwgY29uc3QgRE9NU3RyaW5nICZhcmcsIGludCAmZXhjZXB0aW9uY29kZSApOwotICAg
IHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhICggY29uc3QgdW5zaWduZWQgbG9uZyBvZmZzZXQsIGNv
bnN0IHVuc2lnbmVkIGxvbmcgY291bnQsIGludCAmZXhjZXB0aW9uY29kZSApOwotICAgIHZpcnR1
YWwgdm9pZCByZXBsYWNlRGF0YSAoIGNvbnN0IHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBjb25zdCB1
bnNpZ25lZCBsb25nIGNvdW50LCBjb25zdCBET01TdHJpbmcgJmFyZywgaW50ICZleGNlcHRpb25j
b2RlICk7CisgICAgdmlydHVhbCB2b2lkIGluc2VydERhdGEgKCBjb25zdCB1bnNpZ25lZCBvZmZz
ZXQsIGNvbnN0IERPTVN0cmluZyAmYXJnLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGVsZXRlRGF0YSAoIGNvbnN0IHVuc2lnbmVkIG9mZnNldCwgY29uc3QgdW5zaWdu
ZWQgY291bnQsIGludCAmZXhjZXB0aW9uY29kZSApOworICAgIHZpcnR1YWwgdm9pZCByZXBsYWNl
RGF0YSAoIGNvbnN0IHVuc2lnbmVkIG9mZnNldCwgY29uc3QgdW5zaWduZWQgY291bnQsIGNvbnN0
IERPTVN0cmluZyAmYXJnLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKIAogICAgIHZpcnR1YWwgYm9v
bCBjb250YWluc09ubHlXaGl0ZXNwYWNlKCkgY29uc3Q7CiAgICAgYm9vbCBjb250YWluc09ubHlX
aGl0ZXNwYWNlKHVuc2lnbmVkIGludCBmcm9tLCB1bnNpZ25lZCBpbnQgbGVuKSBjb25zdDsKQEAg
LTY0LDEyICs2NCwxMiBAQCBwdWJsaWM6CiAgICAgLy8gT3RoZXIgbWV0aG9kcyAobm90IHBhcnQg
b2YgRE9NKQogCiAgICAgRE9NU3RyaW5nSW1wbCAqc3RyaW5nKCkgeyByZXR1cm4gc3RyOyB9Ci0g
ICAgdmlydHVhbCB2b2lkIGNoZWNrQ2hhckRhdGFPcGVyYXRpb24oIGNvbnN0IHVuc2lnbmVkIGxv
bmcgb2Zmc2V0LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2hlY2tD
aGFyRGF0YU9wZXJhdGlvbiggY29uc3QgdW5zaWduZWQgb2Zmc2V0LCBpbnQgJmV4Y2VwdGlvbmNv
ZGUgKTsKIAotICAgIHZpcnR1YWwgbG9uZyBtYXhPZmZzZXQoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGxvbmcgY2FyZXRNaW5PZmZzZXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGxvbmcgY2FyZXRNYXhP
ZmZzZXQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgY2FyZXRNYXhSZW5kZXJl
ZE9mZnNldCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IG1heE9mZnNldCgpIGNvbnN0OworICAg
IHZpcnR1YWwgaW50IGNhcmV0TWluT2Zmc2V0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgY2Fy
ZXRNYXhPZmZzZXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGNhcmV0TWF4UmVuZGVy
ZWRPZmZzZXQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKGto
dG1sOjpSZW5kZXJTdHlsZSAqKTsKICAgICAKQEAgLTExOCw3ICsxMTgsNyBAQCBwdWJsaWM6CiAK
ICAgICAvLyBET00gbWV0aG9kcyAmIGF0dHJpYnV0ZXMgZm9yIENoYXJhY3RlckRhdGEKIAotICAg
IFRleHRJbXBsICpzcGxpdFRleHQgKCBjb25zdCB1bnNpZ25lZCBsb25nIG9mZnNldCwgaW50ICZl
eGNlcHRpb25jb2RlICk7CisgICAgVGV4dEltcGwgKnNwbGl0VGV4dCAoIGNvbnN0IHVuc2lnbmVk
IG9mZnNldCwgaW50ICZleGNlcHRpb25jb2RlICk7CiAKICAgICAvLyBET00gbWV0aG9kcyBvdmVy
cmlkZGVuIGZyb20gIHBhcmVudCBjbGFzc2VzCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBsb2Nh
bE5hbWUoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUva3dxL0RPTS1DU1MubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0RPTS1DU1MubW0sdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMjMKZGlmZiAtcCAtdSAtcjEuMjMgV2ViQ29yZS9rd3EvRE9NLUNTUy5tbQotLS0g
V2ViQ29yZS9rd3EvRE9NLUNTUy5tbQkxNCBKdWwgMjAwNSAwMjoyMjoxMSAtMDAwMAkxLjIzCisr
KyBXZWJDb3JlL2t3cS9ET00tQ1NTLm1tCTIxIEF1ZyAyMDA1IDA1OjI4OjQwIC0wMDAwCkBAIC0y
MTksMTIgKzIxOSwxMiBAQCB1c2luZyBET006OlN0eWxlU2hlZXRMaXN0SW1wbDsKICAgICByZXR1
cm4gRE9NX2Nhc3Q8U3R5bGVTaGVldExpc3RJbXBsICo+KF9pbnRlcm5hbCk7CiB9CiAKLS0gKHVu
c2lnbmVkIGxvbmcpbGVuZ3RoCistICh1bnNpZ25lZClsZW5ndGgKIHsKICAgICByZXR1cm4gW3Nl
bGYgX3N0eWxlU2hlZXRMaXN0SW1wbF0tPmxlbmd0aCgpOwogfQogCi0tIChET01TdHlsZVNoZWV0
ICopaXRlbToodW5zaWduZWQgbG9uZylpbmRleAorLSAoRE9NU3R5bGVTaGVldCAqKWl0ZW06KHVu
c2lnbmVkKWluZGV4CiB7CiAgICAgcmV0dXJuIFtET01TdHlsZVNoZWV0IF9ET01TdHlsZVNoZWV0
V2l0aEltcGw6W3NlbGYgX3N0eWxlU2hlZXRMaXN0SW1wbF0tPml0ZW0oaW5kZXgpXTsKIH0KQEAg
LTI5MywxNSArMjkzLDE1IEBAIHVzaW5nIERPTTo6U3R5bGVTaGVldExpc3RJbXBsOwogICAgIHJl
dHVybiBbRE9NQ1NTUnVsZUxpc3QgX3J1bGVMaXN0V2l0aEltcGw6W3NlbGYgX0NTU1N0eWxlU2hl
ZXRJbXBsXS0+Y3NzUnVsZXMoKV07CiB9CiAKLS0gKHVuc2lnbmVkIGxvbmcpaW5zZXJ0UnVsZToo
TlNTdHJpbmcgKilydWxlIDoodW5zaWduZWQgbG9uZylpbmRleAorLSAodW5zaWduZWQpaW5zZXJ0
UnVsZTooTlNTdHJpbmcgKilydWxlIDoodW5zaWduZWQpaW5kZXgKIHsKICAgICBpbnQgZXhjZXB0
aW9uQ29kZTsKLSAgICB1bnNpZ25lZCBsb25nIHJlc3VsdCA9IFtzZWxmIF9DU1NTdHlsZVNoZWV0
SW1wbF0tPmluc2VydFJ1bGUocnVsZSwgaW5kZXgsIGV4Y2VwdGlvbkNvZGUpOworICAgIHVuc2ln
bmVkIHJlc3VsdCA9IFtzZWxmIF9DU1NTdHlsZVNoZWV0SW1wbF0tPmluc2VydFJ1bGUocnVsZSwg
aW5kZXgsIGV4Y2VwdGlvbkNvZGUpOwogICAgIHJhaXNlT25ET01FcnJvcihleGNlcHRpb25Db2Rl
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi0tICh2b2lkKWRlbGV0ZVJ1bGU6KHVuc2lnbmVk
IGxvbmcpaW5kZXgKKy0gKHZvaWQpZGVsZXRlUnVsZToodW5zaWduZWQpaW5kZXgKIHsKICAgICBp
bnQgZXhjZXB0aW9uQ29kZTsKICAgICBbc2VsZiBfQ1NTU3R5bGVTaGVldEltcGxdLT5kZWxldGVS
dWxlKGluZGV4LCBleGNlcHRpb25Db2RlKTsKQEAgLTM3MiwxMiArMzcyLDEyIEBAIHVzaW5nIERP
TTo6U3R5bGVTaGVldExpc3RJbXBsOwogICAgIFtzZWxmIF9tZWRpYUxpc3RJbXBsXS0+c2V0TWVk
aWFUZXh0KG1lZGlhVGV4dCk7CiB9CiAKLS0gKHVuc2lnbmVkIGxvbmcpbGVuZ3RoCistICh1bnNp
Z25lZClsZW5ndGgKIHsKICAgICByZXR1cm4gW3NlbGYgX21lZGlhTGlzdEltcGxdLT5sZW5ndGgo
KTsKIH0KIAotLSAoTlNTdHJpbmcgKilpdGVtOih1bnNpZ25lZCBsb25nKWluZGV4CistIChOU1N0
cmluZyAqKWl0ZW06KHVuc2lnbmVkKWluZGV4CiB7CiAgICAgcmV0dXJuIFtzZWxmIF9tZWRpYUxp
c3RJbXBsXS0+aXRlbShpbmRleCk7CiB9CkBAIC00NDYsMTIgKzQ0NiwxMiBAQCB1c2luZyBET006
OlN0eWxlU2hlZXRMaXN0SW1wbDsKICAgICByZXR1cm4gRE9NX2Nhc3Q8Q1NTUnVsZUxpc3RJbXBs
ICo+KF9pbnRlcm5hbCk7CiB9CiAKLS0gKHVuc2lnbmVkIGxvbmcpbGVuZ3RoCistICh1bnNpZ25l
ZClsZW5ndGgKIHsKICAgICByZXR1cm4gW3NlbGYgX3J1bGVMaXN0SW1wbF0tPmxlbmd0aCgpOwog
fQogCi0tIChET01DU1NSdWxlICopaXRlbToodW5zaWduZWQgbG9uZylpbmRleAorLSAoRE9NQ1NT
UnVsZSAqKWl0ZW06KHVuc2lnbmVkKWluZGV4CiB7CiAgICAgcmV0dXJuIFtET01DU1NSdWxlIF9y
dWxlV2l0aEltcGw6W3NlbGYgX3J1bGVMaXN0SW1wbF0tPml0ZW0oaW5kZXgpXTsKIH0KQEAgLTYz
NCwxMiArNjM0LDEyIEBAIHVzaW5nIERPTTo6U3R5bGVTaGVldExpc3RJbXBsOwogICAgIHJldHVy
biBbRE9NQ1NTUnVsZUxpc3QgX3J1bGVMaXN0V2l0aEltcGw6W3NlbGYgX21lZGlhUnVsZUltcGxd
LT5jc3NSdWxlcygpXTsKIH0KIAotLSAodW5zaWduZWQgbG9uZylpbnNlcnRSdWxlOihOU1N0cmlu
ZyAqKXJ1bGUgOih1bnNpZ25lZCBsb25nKWluZGV4CistICh1bnNpZ25lZClpbnNlcnRSdWxlOihO
U1N0cmluZyAqKXJ1bGUgOih1bnNpZ25lZClpbmRleAogewogICAgIHJldHVybiBbc2VsZiBfbWVk
aWFSdWxlSW1wbF0tPmluc2VydFJ1bGUocnVsZSwgaW5kZXgpOwogfQogCi0tICh2b2lkKWRlbGV0
ZVJ1bGU6KHVuc2lnbmVkIGxvbmcpaW5kZXgKKy0gKHZvaWQpZGVsZXRlUnVsZToodW5zaWduZWQp
aW5kZXgKIHsKICAgICBbc2VsZiBfbWVkaWFSdWxlSW1wbF0tPmRlbGV0ZVJ1bGUoaW5kZXgpOwog
fQpAQCAtODA5LDEyICs4MDksMTIgQEAgdXNpbmcgRE9NOjpTdHlsZVNoZWV0TGlzdEltcGw7CiAg
ICAgcmFpc2VPbkRPTUVycm9yKGV4Y2VwdGlvbkNvZGUpOwogfQogCi0tICh1bnNpZ25lZCBsb25n
KWxlbmd0aAorLSAodW5zaWduZWQpbGVuZ3RoCiB7CiAgICAgcmV0dXJuIFtzZWxmIF9zdHlsZURl
Y2xhcmF0aW9uSW1wbF0tPmxlbmd0aCgpOwogfQogCi0tIChOU1N0cmluZyAqKWl0ZW06KHVuc2ln
bmVkIGxvbmcpaW5kZXgKKy0gKE5TU3RyaW5nICopaXRlbToodW5zaWduZWQpaW5kZXgKIHsKICAg
ICByZXR1cm4gW3NlbGYgX3N0eWxlRGVjbGFyYXRpb25JbXBsXS0+aXRlbShpbmRleCk7CiB9CkBA
IC0xMDEzLDEyICsxMDEzLDEyIEBAIHVzaW5nIERPTTo6U3R5bGVTaGVldExpc3RJbXBsOwogICAg
IHJldHVybiBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3RJbXBsICo+KERPTV9jYXN0PENTU1ZhbHVl
SW1wbCAqPihfaW50ZXJuYWwpKTsKIH0KIAotLSAodW5zaWduZWQgbG9uZylsZW5ndGgKKy0gKHVu
c2lnbmVkKWxlbmd0aAogewogICAgIHJldHVybiBbc2VsZiBfdmFsdWVMaXN0SW1wbF0tPmxlbmd0
aCgpOwogfQogCi0tIChET01DU1NWYWx1ZSAqKWl0ZW06KHVuc2lnbmVkIGxvbmcpaW5kZXgKKy0g
KERPTUNTU1ZhbHVlICopaXRlbToodW5zaWduZWQpaW5kZXgKIHsKICAgICByZXR1cm4gW0RPTUNT
U1ZhbHVlIF92YWx1ZVdpdGhJbXBsOltzZWxmIF92YWx1ZUxpc3RJbXBsXS0+aXRlbShpbmRleCld
OwogfQpJbmRleDogV2ViQ29yZS9rd3EvRE9NLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2t3cS9ET00ubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDAKZGlmZiAt
cCAtdSAtcjEuNDAgV2ViQ29yZS9rd3EvRE9NLm1tCi0tLSBXZWJDb3JlL2t3cS9ET00ubW0JNCBB
dWcgMjAwNSAyMjoyMzowMCAtMDAwMAkxLjQwCisrKyBXZWJDb3JlL2t3cS9ET00ubW0JMjEgQXVn
IDIwMDUgMDU6Mjg6NDQgLTAwMDAKQEAgLTY0NCwxMiArNjQ0LDEyIEBAIHVzaW5nIGtodG1sOjpT
aGFyZWRQdHI7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotLSAoRE9NTm9kZSAqKWl0ZW06KHVu
c2lnbmVkIGxvbmcpaW5kZXgKKy0gKERPTU5vZGUgKilpdGVtOih1bnNpZ25lZClpbmRleAogewog
ICAgIHJldHVybiBbRE9NTm9kZSBfbm9kZVdpdGhJbXBsOltzZWxmIF9uYW1lZE5vZGVNYXBJbXBs
XS0+aXRlbShpbmRleCldOwogfQogCi0tICh1bnNpZ25lZCBsb25nKWxlbmd0aAorLSAodW5zaWdu
ZWQpbGVuZ3RoCiB7CiAgICAgcmV0dXJuIFtzZWxmIF9uYW1lZE5vZGVNYXBJbXBsXS0+bGVuZ3Ro
KCk7CiB9CkBAIC03NDAsMTIgKzc0MCwxMiBAQCB1c2luZyBraHRtbDo6U2hhcmVkUHRyOwogICAg
IHJldHVybiBET01fY2FzdDxOb2RlTGlzdEltcGwgKj4oX2ludGVybmFsKTsKIH0KIAotLSAoRE9N
Tm9kZSAqKWl0ZW06KHVuc2lnbmVkIGxvbmcpaW5kZXgKKy0gKERPTU5vZGUgKilpdGVtOih1bnNp
Z25lZClpbmRleAogewogICAgIHJldHVybiBbRE9NTm9kZSBfbm9kZVdpdGhJbXBsOltzZWxmIF9u
b2RlTGlzdEltcGxdLT5pdGVtKGluZGV4KV07CiB9CiAKLS0gKHVuc2lnbmVkIGxvbmcpbGVuZ3Ro
CistICh1bnNpZ25lZClsZW5ndGgKIHsKICAgICByZXR1cm4gW3NlbGYgX25vZGVMaXN0SW1wbF0t
Pmxlbmd0aCgpOwogfQpAQCAtMTEzMiwxMiArMTEzMiwxMiBAQCB1c2luZyBraHRtbDo6U2hhcmVk
UHRyOwogICAgIHJhaXNlT25ET01FcnJvcihleGNlcHRpb25Db2RlKTsKIH0KIAotLSAodW5zaWdu
ZWQgbG9uZylsZW5ndGgKKy0gKHVuc2lnbmVkKWxlbmd0aAogewogICAgIHJldHVybiBbc2VsZiBf
Y2hhcmFjdGVyRGF0YUltcGxdLT5sZW5ndGgoKTsKIH0KIAotLSAoTlNTdHJpbmcgKilzdWJzdHJp
bmdEYXRhOih1bnNpZ25lZCBsb25nKW9mZnNldCA6KHVuc2lnbmVkIGxvbmcpY291bnQKKy0gKE5T
U3RyaW5nICopc3Vic3RyaW5nRGF0YToodW5zaWduZWQpb2Zmc2V0IDoodW5zaWduZWQpY291bnQK
IHsKICAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7CiAgICAgTlNTdHJpbmcgKnJlc3VsdCA9IFtz
ZWxmIF9jaGFyYWN0ZXJEYXRhSW1wbF0tPnN1YnN0cmluZ0RhdGEob2Zmc2V0LCBjb3VudCwgZXhj
ZXB0aW9uQ29kZSk7CkBAIC0xMTU0LDcgKzExNTQsNyBAQCB1c2luZyBraHRtbDo6U2hhcmVkUHRy
OwogICAgIHJhaXNlT25ET01FcnJvcihleGNlcHRpb25Db2RlKTsKIH0KIAotLSAodm9pZClpbnNl
cnREYXRhOih1bnNpZ25lZCBsb25nKW9mZnNldCA6KE5TU3RyaW5nICopYXJnCistICh2b2lkKWlu
c2VydERhdGE6KHVuc2lnbmVkKW9mZnNldCA6KE5TU3RyaW5nICopYXJnCiB7CiAgICAgQVNTRVJU
KGFyZyk7CiAgICAgCkBAIC0xMTYzLDE0ICsxMTYzLDE0IEBAIHVzaW5nIGtodG1sOjpTaGFyZWRQ
dHI7CiAgICAgcmFpc2VPbkRPTUVycm9yKGV4Y2VwdGlvbkNvZGUpOwogfQogCi0tICh2b2lkKWRl
bGV0ZURhdGE6KHVuc2lnbmVkIGxvbmcpb2Zmc2V0IDoodW5zaWduZWQgbG9uZykgY291bnQKKy0g
KHZvaWQpZGVsZXRlRGF0YToodW5zaWduZWQpb2Zmc2V0IDoodW5zaWduZWQpIGNvdW50CiB7CiAg
ICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwogICAgIFtzZWxmIF9jaGFyYWN0ZXJEYXRhSW1wbF0t
PmRlbGV0ZURhdGEob2Zmc2V0LCBjb3VudCwgZXhjZXB0aW9uQ29kZSk7CiAgICAgcmFpc2VPbkRP
TUVycm9yKGV4Y2VwdGlvbkNvZGUpOwogfQogCi0tICh2b2lkKXJlcGxhY2VEYXRhOih1bnNpZ25l
ZCBsb25nKW9mZnNldCA6KHVuc2lnbmVkIGxvbmcpY291bnQgOihOU1N0cmluZyAqKWFyZworLSAo
dm9pZClyZXBsYWNlRGF0YToodW5zaWduZWQpb2Zmc2V0IDoodW5zaWduZWQpY291bnQgOihOU1N0
cmluZyAqKWFyZwogewogICAgIEFTU0VSVChhcmcpOwogCkBAIC0xNDMxLDcgKzE0MzEsNyBAQCB1
c2luZyBraHRtbDo6U2hhcmVkUHRyOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0SW1wbCAq
PihET01fY2FzdDxOb2RlSW1wbCAqPihfaW50ZXJuYWwpKTsKIH0KIAotLSAoRE9NVGV4dCAqKXNw
bGl0VGV4dDoodW5zaWduZWQgbG9uZylvZmZzZXQKKy0gKERPTVRleHQgKilzcGxpdFRleHQ6KHVu
c2lnbmVkKW9mZnNldAogewogICAgIGludCBleGNlcHRpb25Db2RlID0gMDsKICAgICBET01Ob2Rl
ICpyZXN1bHQgPSBbRE9NTm9kZSBfbm9kZVdpdGhJbXBsOltzZWxmIF90ZXh0SW1wbF0tPnNwbGl0
VGV4dChvZmZzZXQsIGV4Y2VwdGlvbkNvZGUpXTsKQEAgLTE2MTMsNyArMTYxMyw3IEBAIHVzaW5n
IGtodG1sOjpTaGFyZWRQdHI7CiB7CiAgICAgaWYgKCFfaW50ZXJuYWwpCiAgICAgICAgIHJldHVy
biBAIjxET01SYW5nZTogbnVsbD4iOwotICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZv
cm1hdDpAIjxET01SYW5nZTogJUAgJWxkICVAICVsZD4iLAorICAgIHJldHVybiBbTlNTdHJpbmcg
c3RyaW5nV2l0aEZvcm1hdDpAIjxET01SYW5nZTogJUAgJWQgJUAgJWQ+IiwKICAgICAgICAgW3Nl
bGYgc3RhcnRDb250YWluZXJdLCBbc2VsZiBzdGFydE9mZnNldF0sCiAgICAgICAgIFtzZWxmIGVu
ZENvbnRhaW5lcl0sIFtzZWxmIGVuZE9mZnNldF1dOwogfQpAQCAtMTYyNiwxMCArMTYyNiwxMCBA
QCB1c2luZyBraHRtbDo6U2hhcmVkUHRyOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLS0gKGxv
bmcpc3RhcnRPZmZzZXQKKy0gKGludClzdGFydE9mZnNldAogewogICAgIGludCBleGNlcHRpb25D
b2RlID0gMDsKLSAgICBsb25nIHJlc3VsdCA9IFtzZWxmIF9yYW5nZUltcGxdLT5zdGFydE9mZnNl
dChleGNlcHRpb25Db2RlKTsKKyAgICBpbnQgcmVzdWx0ID0gW3NlbGYgX3JhbmdlSW1wbF0tPnN0
YXJ0T2Zmc2V0KGV4Y2VwdGlvbkNvZGUpOwogICAgIHJhaXNlT25ET01FcnJvcihleGNlcHRpb25D
b2RlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTY0MiwxMCArMTY0MiwxMCBAQCB1c2lu
ZyBraHRtbDo6U2hhcmVkUHRyOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLS0gKGxvbmcpZW5k
T2Zmc2V0CistIChpbnQpZW5kT2Zmc2V0CiB7CiAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwot
ICAgIGxvbmcgcmVzdWx0ID0gW3NlbGYgX3JhbmdlSW1wbF0tPmVuZE9mZnNldChleGNlcHRpb25D
b2RlKTsKKyAgICBpbnQgcmVzdWx0ID0gW3NlbGYgX3JhbmdlSW1wbF0tPmVuZE9mZnNldChleGNl
cHRpb25Db2RlKTsKICAgICByYWlzZU9uRE9NRXJyb3IoZXhjZXB0aW9uQ29kZSk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KQEAgLTE2NjYsMTQgKzE2NjYsMTQgQEAgdXNpbmcga2h0bWw6OlNoYXJl
ZFB0cjsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi0tICh2b2lkKXNldFN0YXJ0OihET01Ob2Rl
ICopcmVmTm9kZSA6KGxvbmcpb2Zmc2V0CistICh2b2lkKXNldFN0YXJ0OihET01Ob2RlICopcmVm
Tm9kZSA6KGludClvZmZzZXQKIHsKICAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7CiAgICAgW3Nl
bGYgX3JhbmdlSW1wbF0tPnNldFN0YXJ0KFtyZWZOb2RlIF9ub2RlSW1wbF0sIG9mZnNldCwgZXhj
ZXB0aW9uQ29kZSk7CiAgICAgcmFpc2VPbkRPTUVycm9yKGV4Y2VwdGlvbkNvZGUpOwogfQogCi0t
ICh2b2lkKXNldEVuZDooRE9NTm9kZSAqKXJlZk5vZGUgOihsb25nKW9mZnNldAorLSAodm9pZClz
ZXRFbmQ6KERPTU5vZGUgKilyZWZOb2RlIDooaW50KW9mZnNldAogewogICAgIGludCBleGNlcHRp
b25Db2RlID0gMDsKICAgICBbc2VsZiBfcmFuZ2VJbXBsXS0+c2V0RW5kKFtyZWZOb2RlIF9ub2Rl
SW1wbF0sIG9mZnNldCwgZXhjZXB0aW9uQ29kZSk7CkBAIC0xOTQxLDcgKzE5NDEsNyBAQCB1c2lu
ZyBraHRtbDo6U2hhcmVkUHRyOwogICAgIHJldHVybiBbRE9NTm9kZSBfbm9kZVdpdGhJbXBsOltz
ZWxmIF9ub2RlSXRlcmF0b3JJbXBsXS0+cm9vdCgpXTsKIH0KIAotLSAodW5zaWduZWQgbG9uZyl3
aGF0VG9TaG93CistICh1bnNpZ25lZCl3aGF0VG9TaG93CiB7CiAgICAgcmV0dXJuIFtzZWxmIF9u
b2RlSXRlcmF0b3JJbXBsXS0+d2hhdFRvU2hvdygpOwogfQpAQCAtMjA0NSw3ICsyMDQ1LDcgQEAg
dXNpbmcga2h0bWw6OlNoYXJlZFB0cjsKICAgICByZXR1cm4gW0RPTU5vZGUgX25vZGVXaXRoSW1w
bDpbc2VsZiBfdHJlZVdhbGtlckltcGxdLT5yb290KCldOwogfQogCi0tICh1bnNpZ25lZCBsb25n
KXdoYXRUb1Nob3cKKy0gKHVuc2lnbmVkKXdoYXRUb1Nob3cKIHsKICAgICByZXR1cm4gW3NlbGYg
X3RyZWVXYWxrZXJJbXBsXS0+d2hhdFRvU2hvdygpOwogfQpAQCAtMjE3MSw3ICsyMTcxLDcgQEAg
c2hvcnQgT2JqQ05vZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZAogCiBAaW1wbGVtZW50YXRp
b24gRE9NRG9jdW1lbnQgKERPTURvY3VtZW50VHJhdmVyc2FsKQogCi0tIChET01Ob2RlSXRlcmF0
b3IgKiljcmVhdGVOb2RlSXRlcmF0b3I6KERPTU5vZGUgKilyb290IDoodW5zaWduZWQgbG9uZyl3
aGF0VG9TaG93IDooaWQgPERPTU5vZGVGaWx0ZXI+KWZpbHRlciA6KEJPT0wpZXhwYW5kRW50aXR5
UmVmZXJlbmNlcworLSAoRE9NTm9kZUl0ZXJhdG9yICopY3JlYXRlTm9kZUl0ZXJhdG9yOihET01O
b2RlICopcm9vdCA6KHVuc2lnbmVkKXdoYXRUb1Nob3cgOihpZCA8RE9NTm9kZUZpbHRlcj4pZmls
dGVyIDooQk9PTClleHBhbmRFbnRpdHlSZWZlcmVuY2VzCiB7CiAgICAgTm9kZUZpbHRlckltcGwg
KmNwcEZpbHRlciA9IDA7CiAgICAgaWYgKGZpbHRlcikgewpAQCAtMjE4Nyw3ICsyMTg3LDcgQEAg
c2hvcnQgT2JqQ05vZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZAogICAgIHJldHVybiBbRE9N
Tm9kZUl0ZXJhdG9yIF9ub2RlSXRlcmF0b3JXaXRoSW1wbDppbXBsIGZpbHRlcjpmaWx0ZXJdOwog
fQogCi0tIChET01UcmVlV2Fsa2VyICopY3JlYXRlVHJlZVdhbGtlcjooRE9NTm9kZSAqKXJvb3Qg
Oih1bnNpZ25lZCBsb25nKXdoYXRUb1Nob3cgOihpZCA8RE9NTm9kZUZpbHRlcj4pZmlsdGVyIDoo
Qk9PTClleHBhbmRFbnRpdHlSZWZlcmVuY2VzCistIChET01UcmVlV2Fsa2VyICopY3JlYXRlVHJl
ZVdhbGtlcjooRE9NTm9kZSAqKXJvb3QgOih1bnNpZ25lZCl3aGF0VG9TaG93IDooaWQgPERPTU5v
ZGVGaWx0ZXI+KWZpbHRlciA6KEJPT0wpZXhwYW5kRW50aXR5UmVmZXJlbmNlcwogewogICAgIE5v
ZGVGaWx0ZXJJbXBsICpjcHBGaWx0ZXIgPSAwOwogICAgIGlmIChmaWx0ZXIpIHsKSW5kZXg6IFdl
YkNvcmUva3dxL0RPTUNTUy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2t3cS9ET01DU1MuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40CmRpZmYgLXAgLXUgLXIxLjQg
V2ViQ29yZS9rd3EvRE9NQ1NTLmgKLS0tIFdlYkNvcmUva3dxL0RPTUNTUy5oCTExIE1heSAyMDA1
IDAwOjU4OjI4IC0wMDAwCTEuNAorKysgV2ViQ29yZS9rd3EvRE9NQ1NTLmgJMjEgQXVnIDIwMDUg
MDU6Mjg6NDQgLTAwMDAKQEAgLTQ1LDggKzQ1LDggQEAgZW51bSB7CiB9OwogCiBAaW50ZXJmYWNl
IERPTUNTU1J1bGVMaXN0IDogRE9NT2JqZWN0Ci0tICh1bnNpZ25lZCBsb25nKWxlbmd0aDsKLS0g
KERPTUNTU1J1bGUgKilpdGVtOih1bnNpZ25lZCBsb25nKWluZGV4OworLSAodW5zaWduZWQpbGVu
Z3RoOworLSAoRE9NQ1NTUnVsZSAqKWl0ZW06KHVuc2lnbmVkKWluZGV4OwogQGVuZAogCiBlbnVt
IHsKQEAgLTc3LDggKzc3LDggQEAgZW51bSB7CiBAaW50ZXJmYWNlIERPTUNTU01lZGlhUnVsZSA6
IERPTUNTU1J1bGUKIC0gKERPTU1lZGlhTGlzdCAqKW1lZGlhOwogLSAoRE9NQ1NTUnVsZUxpc3Qg
Kiljc3NSdWxlczsKLS0gKHVuc2lnbmVkIGxvbmcpaW5zZXJ0UnVsZTooTlNTdHJpbmcgKilydWxl
IDoodW5zaWduZWQgbG9uZylpbmRleDsKLS0gKHZvaWQpZGVsZXRlUnVsZToodW5zaWduZWQgbG9u
ZylpbmRleDsKKy0gKHVuc2lnbmVkKWluc2VydFJ1bGU6KE5TU3RyaW5nICopcnVsZSA6KHVuc2ln
bmVkKWluZGV4OworLSAodm9pZClkZWxldGVSdWxlOih1bnNpZ25lZClpbmRleDsKIEBlbmQKIAog
QGludGVyZmFjZSBET01DU1NGb250RmFjZVJ1bGUgOiBET01DU1NSdWxlCkBAIC0xMTIsOCArMTEy
LDggQEAgZW51bSB7CiAtIChOU1N0cmluZyAqKXJlbW92ZVByb3BlcnR5OihOU1N0cmluZyAqKXBy
b3BlcnR5TmFtZTsKIC0gKE5TU3RyaW5nICopZ2V0UHJvcGVydHlQcmlvcml0eTooTlNTdHJpbmcg
Kilwcm9wZXJ0eU5hbWU7CiAtICh2b2lkKXNldFByb3BlcnR5OihOU1N0cmluZyAqKXByb3BlcnR5
TmFtZSA6KE5TU3RyaW5nICopdmFsdWUgOihOU1N0cmluZyAqKXByaW9yaXR5OwotLSAodW5zaWdu
ZWQgbG9uZylsZW5ndGg7Ci0tIChOU1N0cmluZyAqKWl0ZW06KHVuc2lnbmVkIGxvbmcpaW5kZXg7
CistICh1bnNpZ25lZClsZW5ndGg7CistIChOU1N0cmluZyAqKWl0ZW06KHVuc2lnbmVkKWluZGV4
OwogLSAoRE9NQ1NTUnVsZSAqKXBhcmVudFJ1bGU7CiBAZW5kCiAKQEAgLTE3Myw4ICsxNzMsOCBA
QCBlbnVtIHsKIEBlbmQKIAogQGludGVyZmFjZSBET01DU1NWYWx1ZUxpc3QgOiBET01DU1NWYWx1
ZQotLSAodW5zaWduZWQgbG9uZylsZW5ndGg7Ci0tIChET01DU1NWYWx1ZSAqKWl0ZW06KHVuc2ln
bmVkIGxvbmcpaW5kZXg7CistICh1bnNpZ25lZClsZW5ndGg7CistIChET01DU1NWYWx1ZSAqKWl0
ZW06KHVuc2lnbmVkKWluZGV4OwogQGVuZAogCiBAaW50ZXJmYWNlIERPTVJHQkNvbG9yIDogRE9N
T2JqZWN0CkBAIC00NTAsOCArNDUwLDggQEAgZW51bSB7CiBAaW50ZXJmYWNlIERPTUNTU1N0eWxl
U2hlZXQgOiBET01TdHlsZVNoZWV0CiAtIChET01DU1NSdWxlICopb3duZXJSdWxlOwogLSAoRE9N
Q1NTUnVsZUxpc3QgKiljc3NSdWxlczsKLS0gKHVuc2lnbmVkIGxvbmcpaW5zZXJ0UnVsZTooTlNT
dHJpbmcgKilydWxlIDoodW5zaWduZWQgbG9uZylpbmRleDsKLS0gKHZvaWQpZGVsZXRlUnVsZToo
dW5zaWduZWQgbG9uZylpbmRleDsKKy0gKHVuc2lnbmVkKWluc2VydFJ1bGU6KE5TU3RyaW5nICop
cnVsZSA6KHVuc2lnbmVkKWluZGV4OworLSAodm9pZClkZWxldGVSdWxlOih1bnNpZ25lZClpbmRl
eDsKIEBlbmQKIAogQGludGVyZmFjZSBET01Eb2N1bWVudCAoRE9NVmlld0NTUykKSW5kZXg6IFdl
YkNvcmUva3dxL0RPTUNvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9rd3EvRE9NQ29yZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMKZGlmZiAtcCAtdSAtcjEu
MyBXZWJDb3JlL2t3cS9ET01Db3JlLmgKLS0tIFdlYkNvcmUva3dxL0RPTUNvcmUuaAkxNCBNYXkg
MjAwNCAxNzoyNzo0MyAtMDAwMAkxLjMKKysrIFdlYkNvcmUva3dxL0RPTUNvcmUuaAkyMSBBdWcg
MjAwNSAwNToyODo0NSAtMDAwMApAQCAtMTIxLDE2ICsxMjEsMTYgQEAgZW51bSB7CiBAZW5kCiAK
IEBpbnRlcmZhY2UgRE9NTm9kZUxpc3QgOiBET01PYmplY3QKLS0gKERPTU5vZGUgKilpdGVtOih1
bnNpZ25lZCBsb25nKWluZGV4OwotLSAodW5zaWduZWQgbG9uZylsZW5ndGg7CistIChET01Ob2Rl
ICopaXRlbToodW5zaWduZWQpaW5kZXg7CistICh1bnNpZ25lZClsZW5ndGg7CiBAZW5kCiAKIEBp
bnRlcmZhY2UgRE9NTmFtZWROb2RlTWFwIDogRE9NT2JqZWN0CiAtIChET01Ob2RlICopZ2V0TmFt
ZWRJdGVtOihOU1N0cmluZyAqKW5hbWU7CiAtIChET01Ob2RlICopc2V0TmFtZWRJdGVtOihET01O
b2RlICopYXJnOwogLSAoRE9NTm9kZSAqKXJlbW92ZU5hbWVkSXRlbTooTlNTdHJpbmcgKiluYW1l
OwotLSAoRE9NTm9kZSAqKWl0ZW06KHVuc2lnbmVkIGxvbmcpaW5kZXg7Ci0tICh1bnNpZ25lZCBs
b25nKWxlbmd0aDsKKy0gKERPTU5vZGUgKilpdGVtOih1bnNpZ25lZClpbmRleDsKKy0gKHVuc2ln
bmVkKWxlbmd0aDsKIC0gKERPTU5vZGUgKilnZXROYW1lZEl0ZW1OUzooTlNTdHJpbmcgKiluYW1l
c3BhY2VVUkkgOihOU1N0cmluZyAqKWxvY2FsTmFtZTsKIC0gKERPTU5vZGUgKilzZXROYW1lZEl0
ZW1OUzooRE9NTm9kZSAqKWFyZzsKIC0gKERPTU5vZGUgKilyZW1vdmVOYW1lZEl0ZW1OUzooTlNT
dHJpbmcgKiluYW1lc3BhY2VVUkkgOihOU1N0cmluZyAqKWxvY2FsTmFtZTsKQEAgLTEzOSwxMiAr
MTM5LDEyIEBAIGVudW0gewogQGludGVyZmFjZSBET01DaGFyYWN0ZXJEYXRhIDogRE9NTm9kZQog
LSAoTlNTdHJpbmcgKilkYXRhOwogLSAodm9pZClzZXREYXRhOihOU1N0cmluZyAqKWRhdGE7Ci0t
ICh1bnNpZ25lZCBsb25nKWxlbmd0aDsKLS0gKE5TU3RyaW5nICopc3Vic3RyaW5nRGF0YToodW5z
aWduZWQgbG9uZylvZmZzZXQgOih1bnNpZ25lZCBsb25nKWNvdW50OworLSAodW5zaWduZWQpbGVu
Z3RoOworLSAoTlNTdHJpbmcgKilzdWJzdHJpbmdEYXRhOih1bnNpZ25lZClvZmZzZXQgOih1bnNp
Z25lZCljb3VudDsKIC0gKHZvaWQpYXBwZW5kRGF0YTooTlNTdHJpbmcgKilhcmc7Ci0tICh2b2lk
KWluc2VydERhdGE6KHVuc2lnbmVkIGxvbmcpb2Zmc2V0IDooTlNTdHJpbmcgKilhcmc7Ci0tICh2
b2lkKWRlbGV0ZURhdGE6KHVuc2lnbmVkIGxvbmcpb2Zmc2V0IDoodW5zaWduZWQgbG9uZykgY291
bnQ7Ci0tICh2b2lkKXJlcGxhY2VEYXRhOih1bnNpZ25lZCBsb25nKW9mZnNldCA6KHVuc2lnbmVk
IGxvbmcpY291bnQgOihOU1N0cmluZyAqKWFyZzsKKy0gKHZvaWQpaW5zZXJ0RGF0YToodW5zaWdu
ZWQpb2Zmc2V0IDooTlNTdHJpbmcgKilhcmc7CistICh2b2lkKWRlbGV0ZURhdGE6KHVuc2lnbmVk
KW9mZnNldCA6KHVuc2lnbmVkKSBjb3VudDsKKy0gKHZvaWQpcmVwbGFjZURhdGE6KHVuc2lnbmVk
KW9mZnNldCA6KHVuc2lnbmVkKWNvdW50IDooTlNTdHJpbmcgKilhcmc7CiBAZW5kCiAKIEBpbnRl
cmZhY2UgRE9NQXR0ciA6IERPTU5vZGUKQEAgLTE3NSw3ICsxNzUsNyBAQCBlbnVtIHsKIEBlbmQK
IAogQGludGVyZmFjZSBET01UZXh0IDogRE9NQ2hhcmFjdGVyRGF0YQotLSAoRE9NVGV4dCAqKXNw
bGl0VGV4dDoodW5zaWduZWQgbG9uZylvZmZzZXQ7CistIChET01UZXh0ICopc3BsaXRUZXh0Oih1
bnNpZ25lZClvZmZzZXQ7CiBAZW5kCiAKIEBpbnRlcmZhY2UgRE9NQ29tbWVudCA6IERPTUNoYXJh
Y3RlckRhdGEKSW5kZXg6IFdlYkNvcmUva3dxL0RPTUV2ZW50cy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9ET01FdmVudHMuaCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS40CmRpZmYgLXAgLXUgLXIxLjQgV2ViQ29yZS9rd3EvRE9NRXZlbnRzLmgKLS0tIFdlYkNv
cmUva3dxL0RPTUV2ZW50cy5oCTE0IEp1bCAyMDA1IDAyOjIyOjExIC0wMDAwCTEuNAorKysgV2Vi
Q29yZS9rd3EvRE9NRXZlbnRzLmgJMjEgQXVnIDIwMDUgMDU6Mjg6NDUgLTAwMDAKQEAgLTY4LDIy
ICs2OCwyMiBAQCBlbnVtIHsKIAogQGludGVyZmFjZSBET01VSUV2ZW50IDogRE9NRXZlbnQKIC0g
KERPTUFic3RyYWN0VmlldyAqKXZpZXc7Ci0tIChsb25nKWRldGFpbDsKLS0gKHZvaWQpaW5pdFVJ
RXZlbnQ6KE5TU3RyaW5nICopdHlwZUFyZyA6KEJPT0wpY2FuQnViYmxlQXJnIDooQk9PTCljYW5j
ZWxhYmxlQXJnIDooRE9NQWJzdHJhY3RWaWV3ICopdmlld0FyZyA6KGxvbmcpZGV0YWlsQXJnOwor
LSAoaW50KWRldGFpbDsKKy0gKHZvaWQpaW5pdFVJRXZlbnQ6KE5TU3RyaW5nICopdHlwZUFyZyA6
KEJPT0wpY2FuQnViYmxlQXJnIDooQk9PTCljYW5jZWxhYmxlQXJnIDooRE9NQWJzdHJhY3RWaWV3
ICopdmlld0FyZyA6KGludClkZXRhaWxBcmc7CiBAZW5kCiAKIEBpbnRlcmZhY2UgRE9NTW91c2VF
dmVudCA6IERPTVVJRXZlbnQKLS0gKGxvbmcpc2NyZWVuWDsKLS0gKGxvbmcpc2NyZWVuWTsKLS0g
KGxvbmcpY2xpZW50WDsKLS0gKGxvbmcpY2xpZW50WTsKKy0gKGludClzY3JlZW5YOworLSAoaW50
KXNjcmVlblk7CistIChpbnQpY2xpZW50WDsKKy0gKGludCljbGllbnRZOwogLSAoQk9PTCljdHJs
S2V5OwogLSAoQk9PTClzaGlmdEtleTsKIC0gKEJPT0wpYWx0S2V5OwogLSAoQk9PTCltZXRhS2V5
OwogLSAodW5zaWduZWQgc2hvcnQpYnV0dG9uOwogLSAoaWQgPERPTUV2ZW50VGFyZ2V0PilyZWxh
dGVkVGFyZ2V0OwotLSAodm9pZClpbml0TW91c2VFdmVudDooTlNTdHJpbmcgKil0eXBlQXJnIDoo
Qk9PTCljYW5CdWJibGVBcmcgOihCT09MKWNhbmNlbGFibGVBcmcgOihET01BYnN0cmFjdFZpZXcg
Kil2aWV3QXJnIDoobG9uZylkZXRhaWxBcmcgOihsb25nKXNjcmVlblhBcmcgOihsb25nKXNjcmVl
bllBcmcgOihsb25nKWNsaWVudFggOihsb25nKWNsaWVudFkgOihCT09MKWN0cmxLZXlBcmcgOihC
T09MKWFsdEtleUFyZyA6KEJPT0wpc2hpZnRLZXlBcmcgOihCT09MKW1ldGFLZXlBcmcgOih1bnNp
Z25lZCBzaG9ydClidXR0b25BcmcgOihpZCA8RE9NRXZlbnRUYXJnZXQ+KXJlbGF0ZWRUYXJnZXRB
cmc7CistICh2b2lkKWluaXRNb3VzZUV2ZW50OihOU1N0cmluZyAqKXR5cGVBcmcgOihCT09MKWNh
bkJ1YmJsZUFyZyA6KEJPT0wpY2FuY2VsYWJsZUFyZyA6KERPTUFic3RyYWN0VmlldyAqKXZpZXdB
cmcgOihpbnQpZGV0YWlsQXJnIDooaW50KXNjcmVlblhBcmcgOihpbnQpc2NyZWVuWUFyZyA6KGlu
dCljbGllbnRYIDooaW50KWNsaWVudFkgOihCT09MKWN0cmxLZXlBcmcgOihCT09MKWFsdEtleUFy
ZyA6KEJPT0wpc2hpZnRLZXlBcmcgOihCT09MKW1ldGFLZXlBcmcgOih1bnNpZ25lZCBzaG9ydCli
dXR0b25BcmcgOihpZCA8RE9NRXZlbnRUYXJnZXQ+KXJlbGF0ZWRUYXJnZXRBcmc7CiBAZW5kCiAK
IGVudW0gewpJbmRleDogV2ViQ29yZS9rd3EvRE9NRXZlbnRzLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9ET01FdmVudHMubW0sdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuNQpkaWZmIC1wIC11IC1yMS41IFdlYkNvcmUva3dxL0RPTUV2ZW50cy5tbQotLS0gV2Vi
Q29yZS9rd3EvRE9NRXZlbnRzLm1tCTEwIE1heSAyMDA1IDIxOjU5OjE1IC0wMDAwCTEuNQorKysg
V2ViQ29yZS9rd3EvRE9NRXZlbnRzLm1tCTIxIEF1ZyAyMDA1IDA1OjI4OjQ1IC0wMDAwCkBAIC0x
NDUsMjIgKzE0NSwyMiBAQCBBTExPV19ET01fQ0FTVChFdmVudEltcGwpCiAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PE1vdXNlRXZlbnRJbXBsICo+KERPTV9jYXN0PEV2ZW50SW1wbCAqPihfaW50ZXJu
YWwpKTsKIH0KIAotLSAobG9uZylzY3JlZW5YCistIChpbnQpc2NyZWVuWAogewogICAgIHJldHVy
biBbc2VsZiBfbW91c2VFdmVudEltcGxdLT5zY3JlZW5YKCk7CiB9CiAKLS0gKGxvbmcpc2NyZWVu
WQorLSAoaW50KXNjcmVlblkKIHsKICAgICByZXR1cm4gW3NlbGYgX21vdXNlRXZlbnRJbXBsXS0+
c2NyZWVuWSgpOwogfQogCi0tIChsb25nKWNsaWVudFgKKy0gKGludCljbGllbnRYCiB7CiAgICAg
cmV0dXJuIFtzZWxmIF9tb3VzZUV2ZW50SW1wbF0tPmNsaWVudFgoKTsKIH0KIAotLSAobG9uZylj
bGllbnRZCistIChpbnQpY2xpZW50WQogewogICAgIHJldHVybiBbc2VsZiBfbW91c2VFdmVudElt
cGxdLT5jbGllbnRZKCk7CiB9CkBAIC0xOTUsNyArMTk1LDcgQEAgQUxMT1dfRE9NX0NBU1QoRXZl
bnRJbXBsKQogICAgIHJldHVybiBbRE9NTm9kZSBfbm9kZVdpdGhJbXBsOltzZWxmIF9tb3VzZUV2
ZW50SW1wbF0tPnJlbGF0ZWRUYXJnZXQoKV07CiB9CiAKLS0gKHZvaWQpaW5pdE1vdXNlRXZlbnQ6
KE5TU3RyaW5nICopdHlwZUFyZyA6KEJPT0wpY2FuQnViYmxlQXJnIDooQk9PTCljYW5jZWxhYmxl
QXJnIDooRE9NQWJzdHJhY3RWaWV3ICopdmlld0FyZyA6KGxvbmcpZGV0YWlsQXJnIDoobG9uZylz
Y3JlZW5YQXJnIDoobG9uZylzY3JlZW5ZQXJnIDoobG9uZyljbGllbnRYIDoobG9uZyljbGllbnRZ
IDooQk9PTCljdHJsS2V5QXJnIDooQk9PTClhbHRLZXlBcmcgOihCT09MKXNoaWZ0S2V5QXJnIDoo
Qk9PTCltZXRhS2V5QXJnIDoodW5zaWduZWQgc2hvcnQpYnV0dG9uQXJnIDooaWQgPERPTUV2ZW50
VGFyZ2V0PilyZWxhdGVkVGFyZ2V0QXJnCistICh2b2lkKWluaXRNb3VzZUV2ZW50OihOU1N0cmlu
ZyAqKXR5cGVBcmcgOihCT09MKWNhbkJ1YmJsZUFyZyA6KEJPT0wpY2FuY2VsYWJsZUFyZyA6KERP
TUFic3RyYWN0VmlldyAqKXZpZXdBcmcgOihpbnQpZGV0YWlsQXJnIDooaW50KXNjcmVlblhBcmcg
OihpbnQpc2NyZWVuWUFyZyA6KGludCljbGllbnRYIDooaW50KWNsaWVudFkgOihCT09MKWN0cmxL
ZXlBcmcgOihCT09MKWFsdEtleUFyZyA6KEJPT0wpc2hpZnRLZXlBcmcgOihCT09MKW1ldGFLZXlB
cmcgOih1bnNpZ25lZCBzaG9ydClidXR0b25BcmcgOihpZCA8RE9NRXZlbnRUYXJnZXQ+KXJlbGF0
ZWRUYXJnZXRBcmcKIHsKICAgICBET01Ob2RlICpyZWxhdGVkVGFyZ2V0ID0gcmVsYXRlZFRhcmdl
dEFyZzsKICAgICBbc2VsZiBfbW91c2VFdmVudEltcGxdLT5pbml0TW91c2VFdmVudCh0eXBlQXJn
LCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcsCkBAIC0yNTgsMTIgKzI1OCwxMiBAQCBBTExP
V19ET01fQ0FTVChFdmVudEltcGwpCiAgICAgcmV0dXJuIFtET01BYnN0cmFjdFZpZXcgX2Fic3Ry
YWN0Vmlld1dpdGhJbXBsOltzZWxmIF9VSUV2ZW50SW1wbF0tPnZpZXcoKV07CiB9CiAKLS0gKGxv
bmcpZGV0YWlsCistIChpbnQpZGV0YWlsCiB7CiAgICAgcmV0dXJuIFtzZWxmIF9VSUV2ZW50SW1w
bF0tPmRldGFpbCgpOwogfQogCi0tICh2b2lkKWluaXRVSUV2ZW50OihOU1N0cmluZyAqKXR5cGVB
cmcgOihCT09MKWNhbkJ1YmJsZUFyZyA6KEJPT0wpY2FuY2VsYWJsZUFyZyA6KERPTUFic3RyYWN0
VmlldyAqKXZpZXdBcmcgOihsb25nKWRldGFpbEFyZworLSAodm9pZClpbml0VUlFdmVudDooTlNT
dHJpbmcgKil0eXBlQXJnIDooQk9PTCljYW5CdWJibGVBcmcgOihCT09MKWNhbmNlbGFibGVBcmcg
OihET01BYnN0cmFjdFZpZXcgKil2aWV3QXJnIDooaW50KWRldGFpbEFyZwogewogICAgIFtzZWxm
IF9VSUV2ZW50SW1wbF0tPmluaXRVSUV2ZW50KHR5cGVBcmcsIGNhbkJ1YmJsZUFyZywgY2FuY2Vs
YWJsZUFyZywgW3ZpZXdBcmcgX2Fic3RyYWN0Vmlld0ltcGxdLCBkZXRhaWxBcmcpOwogfQpJbmRl
eDogV2ViQ29yZS9rd3EvRE9NRXh0ZW5zaW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2t3cS9ET01FeHRlbnNpb25zLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MTEKZGlmZiAtcCAtdSAtcjEuMTEgV2ViQ29yZS9rd3EvRE9NRXh0ZW5zaW9ucy5oCi0tLSBXZWJD
b3JlL2t3cS9ET01FeHRlbnNpb25zLmgJMSBBdWcgMjAwNSAxNjoxMjowMyAtMDAwMAkxLjExCisr
KyBXZWJDb3JlL2t3cS9ET01FeHRlbnNpb25zLmgJMjEgQXVnIDIwMDUgMDU6Mjg6NDUgLTAwMDAK
QEAgLTUwLDE2ICs1MCwxNiBAQAogQGludGVyZmFjZSBET01IVE1MRW1iZWRFbGVtZW50IDogRE9N
SFRNTEVsZW1lbnQKIC0gKE5TU3RyaW5nICopYWxpZ247CiAtICh2b2lkKXNldEFsaWduOihOU1N0
cmluZyAqKWFsaWduOwotLSAobG9uZyloZWlnaHQ7Ci0tICh2b2lkKXNldEhlaWdodDoobG9uZylo
ZWlnaHQ7CistIChpbnQpaGVpZ2h0OworLSAodm9pZClzZXRIZWlnaHQ6KGludCloZWlnaHQ7CiAt
IChOU1N0cmluZyAqKW5hbWU7CiAtICh2b2lkKXNldE5hbWU6KE5TU3RyaW5nICopbmFtZTsKIC0g
KE5TU3RyaW5nICopc3JjOwogLSAodm9pZClzZXRTcmM6KE5TU3RyaW5nICopc3JjOwogLSAoTlNT
dHJpbmcgKil0eXBlOwogLSAodm9pZClzZXRUeXBlOihOU1N0cmluZyAqKXR5cGU7Ci0tIChsb25n
KXdpZHRoOwotLSAodm9pZClzZXRXaWR0aDoobG9uZyl3aWR0aDsKKy0gKGludCl3aWR0aDsKKy0g
KHZvaWQpc2V0V2lkdGg6KGludCl3aWR0aDsKIEBlbmQKIAogQGludGVyZmFjZSBET01SR0JDb2xv
ciAoRE9NUkdCQ29sb3JFeHRlbnNpb25zKQpJbmRleDogV2ViQ29yZS9rd3EvRE9NSFRNTC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9ET01IVE1MLmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNwpkaWZmIC1wIC11IC1yMS43IFdlYkNvcmUva3dxL0RPTUhUTUwu
aAotLS0gV2ViQ29yZS9rd3EvRE9NSFRNTC5oCTE4IEp1bCAyMDA1IDIxOjQ0OjMwIC0wMDAwCTEu
NworKysgV2ViQ29yZS9rd3EvRE9NSFRNTC5oCTIxIEF1ZyAyMDA1IDA1OjI4OjQ1IC0wMDAwCkBA
IC0zMSwxNSArMzEsMTUgQEAKIEBjbGFzcyBET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudDsKIAog
QGludGVyZmFjZSBET01IVE1MQ29sbGVjdGlvbiA6IERPTU9iamVjdAotLSAodW5zaWduZWQgbG9u
ZylsZW5ndGg7Ci0tIChET01Ob2RlICopaXRlbToodW5zaWduZWQgbG9uZylpbmRleDsKKy0gKHVu
c2lnbmVkKWxlbmd0aDsKKy0gKERPTU5vZGUgKilpdGVtOih1bnNpZ25lZClpbmRleDsKIC0gKERP
TU5vZGUgKiluYW1lZEl0ZW06KE5TU3RyaW5nICopbmFtZTsKIEBlbmQKIAogQGludGVyZmFjZSBE
T01IVE1MT3B0aW9uc0NvbGxlY3Rpb24gOiBET01PYmplY3QKLS0gKHVuc2lnbmVkIGxvbmcpbGVu
Z3RoOwotLSAodm9pZClzZXRMZW5ndGg6KHVuc2lnbmVkIGxvbmcpbGVuZ3RoOwotLSAoRE9NTm9k
ZSAqKWl0ZW06KHVuc2lnbmVkIGxvbmcpaW5kZXg7CistICh1bnNpZ25lZClsZW5ndGg7CistICh2
b2lkKXNldExlbmd0aDoodW5zaWduZWQpbGVuZ3RoOworLSAoRE9NTm9kZSAqKWl0ZW06KHVuc2ln
bmVkKWluZGV4OwogLSAoRE9NTm9kZSAqKW5hbWVkSXRlbTooTlNTdHJpbmcgKiluYW1lOwogQGVu
ZAogCkBAIC0xNjUsNyArMTY1LDcgQEAKIAogQGludGVyZmFjZSBET01IVE1MRm9ybUVsZW1lbnQg
OiBET01IVE1MRWxlbWVudAogLSAoRE9NSFRNTENvbGxlY3Rpb24gKillbGVtZW50czsKLS0gKGxv
bmcpbGVuZ3RoOworLSAoaW50KWxlbmd0aDsKIC0gKE5TU3RyaW5nICopbmFtZTsKIC0gKHZvaWQp
c2V0TmFtZTooTlNTdHJpbmcgKiluYW1lOwogLSAoTlNTdHJpbmcgKilhY2NlcHRDaGFyc2V0OwpA
QCAtMTg0LDExICsxODQsMTEgQEAKIAogQGludGVyZmFjZSBET01IVE1MU2VsZWN0RWxlbWVudCA6
IERPTUhUTUxFbGVtZW50CiAtIChOU1N0cmluZyAqKXR5cGU7Ci0tIChsb25nKXNlbGVjdGVkSW5k
ZXg7Ci0tICh2b2lkKXNldFNlbGVjdGVkSW5kZXg6KGxvbmcpc2VsZWN0ZWRJbmRleDsKKy0gKGlu
dClzZWxlY3RlZEluZGV4OworLSAodm9pZClzZXRTZWxlY3RlZEluZGV4OihpbnQpc2VsZWN0ZWRJ
bmRleDsKIC0gKE5TU3RyaW5nICopdmFsdWU7CiAtICh2b2lkKXNldFZhbHVlOihOU1N0cmluZyAq
KXZhbHVlOwotLSAobG9uZylsZW5ndGg7CistIChpbnQpbGVuZ3RoOwogLSAoRE9NSFRNTEZvcm1F
bGVtZW50ICopZm9ybTsKIC0gKERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbiAqKW9wdGlvbnM7CiAt
IChCT09MKWRpc2FibGVkOwpAQCAtMTk3LDEyICsxOTcsMTIgQEAKIC0gKHZvaWQpc2V0TXVsdGlw
bGU6KEJPT0wpbXVsdGlwbGU7CiAtIChOU1N0cmluZyAqKW5hbWU7CiAtICh2b2lkKXNldE5hbWU6
KE5TU3RyaW5nICopbmFtZTsKLS0gKGxvbmcpc2l6ZTsKLS0gKHZvaWQpc2V0U2l6ZToobG9uZylz
aXplOwotLSAobG9uZyl0YWJJbmRleDsKLS0gKHZvaWQpc2V0VGFiSW5kZXg6KGxvbmcpdGFiSW5k
ZXg7CistIChpbnQpc2l6ZTsKKy0gKHZvaWQpc2V0U2l6ZTooaW50KXNpemU7CistIChpbnQpdGFi
SW5kZXg7CistICh2b2lkKXNldFRhYkluZGV4OihpbnQpdGFiSW5kZXg7CiAtICh2b2lkKWFkZDoo
RE9NSFRNTEVsZW1lbnQgKillbGVtZW50IDooRE9NSFRNTEVsZW1lbnQgKiliZWZvcmU7Ci0tICh2
b2lkKXJlbW92ZToobG9uZylpbmRleDsKKy0gKHZvaWQpcmVtb3ZlOihpbnQpaW5kZXg7CiAtICh2
b2lkKWJsdXI7CiAtICh2b2lkKWZvY3VzOwogQGVuZApAQCAtMjE5LDcgKzIxOSw3IEBACiAtIChC
T09MKWRlZmF1bHRTZWxlY3RlZDsKIC0gKHZvaWQpc2V0RGVmYXVsdFNlbGVjdGVkOihCT09MKWRl
ZmF1bHRTZWxlY3RlZDsKIC0gKE5TU3RyaW5nICopdGV4dDsKLS0gKGxvbmcpaW5kZXg7CistIChp
bnQpaW5kZXg7CiAtIChCT09MKWRpc2FibGVkOwogLSAodm9pZClzZXREaXNhYmxlZDooQk9PTClk
aXNhYmxlZDsKIC0gKE5TU3RyaW5nICopbGFiZWw7CkBAIC0yNDgsMTggKzI0OCwxOCBAQAogLSAo
dm9pZClzZXRDaGVja2VkOihCT09MKWNoZWNrZWQ7CiAtIChCT09MKWRpc2FibGVkOwogLSAodm9p
ZClzZXREaXNhYmxlZDooQk9PTClkaXNhYmxlZDsKLS0gKGxvbmcpbWF4TGVuZ3RoOwotLSAodm9p
ZClzZXRNYXhMZW5ndGg6KGxvbmcpbWF4TGVuZ3RoOworLSAoaW50KW1heExlbmd0aDsKKy0gKHZv
aWQpc2V0TWF4TGVuZ3RoOihpbnQpbWF4TGVuZ3RoOwogLSAoTlNTdHJpbmcgKiluYW1lOwogLSAo
dm9pZClzZXROYW1lOihOU1N0cmluZyAqKW5hbWU7CiAtIChCT09MKXJlYWRPbmx5OwogLSAodm9p
ZClzZXRSZWFkT25seTooQk9PTClyZWFkT25seTsKLS0gKHVuc2lnbmVkIGxvbmcpc2l6ZTsKLS0g
KHZvaWQpc2V0U2l6ZToodW5zaWduZWQgbG9uZylzaXplOworLSAodW5zaWduZWQpc2l6ZTsKKy0g
KHZvaWQpc2V0U2l6ZToodW5zaWduZWQpc2l6ZTsKIC0gKE5TU3RyaW5nICopc3JjOwogLSAodm9p
ZClzZXRTcmM6KE5TU3RyaW5nICopc3JjOwotLSAobG9uZyl0YWJJbmRleDsKLS0gKHZvaWQpc2V0
VGFiSW5kZXg6KGxvbmcpdGFiSW5kZXg7CistIChpbnQpdGFiSW5kZXg7CistICh2b2lkKXNldFRh
YkluZGV4OihpbnQpdGFiSW5kZXg7CiAtIChOU1N0cmluZyAqKXR5cGU7CiAtICh2b2lkKXNldFR5
cGU6KE5TU3RyaW5nICopdHlwZTsKIC0gKE5TU3RyaW5nICopdXNlTWFwOwpAQCAtMjc4LDE4ICsy
NzgsMTggQEAKIC0gKERPTUhUTUxGb3JtRWxlbWVudCAqKWZvcm07CiAtIChOU1N0cmluZyAqKWFj
Y2Vzc0tleTsKIC0gKHZvaWQpc2V0QWNjZXNzS2V5OihOU1N0cmluZyAqKWFjY2Vzc0tleTsKLS0g
KGxvbmcpY29sczsKLS0gKHZvaWQpc2V0Q29sczoobG9uZyljb2xzOworLSAoaW50KWNvbHM7Cist
ICh2b2lkKXNldENvbHM6KGludCljb2xzOwogLSAoQk9PTClkaXNhYmxlZDsKIC0gKHZvaWQpc2V0
RGlzYWJsZWQ6KEJPT0wpZGlzYWJsZWQ7CiAtIChOU1N0cmluZyAqKW5hbWU7CiAtICh2b2lkKXNl
dE5hbWU6KE5TU3RyaW5nICopbmFtZTsKIC0gKEJPT0wpcmVhZE9ubHk7CiAtICh2b2lkKXNldFJl
YWRPbmx5OihCT09MKXJlYWRPbmx5OwotLSAobG9uZylyb3dzOwotLSAodm9pZClzZXRSb3dzOihs
b25nKXJvd3M7Ci0tIChsb25nKXRhYkluZGV4OwotLSAodm9pZClzZXRUYWJJbmRleDoobG9uZyl0
YWJJbmRleDsKKy0gKGludClyb3dzOworLSAodm9pZClzZXRSb3dzOihpbnQpcm93czsKKy0gKGlu
dCl0YWJJbmRleDsKKy0gKHZvaWQpc2V0VGFiSW5kZXg6KGludCl0YWJJbmRleDsKIC0gKE5TU3Ry
aW5nICopdHlwZTsKIC0gKE5TU3RyaW5nICopdmFsdWU7CiAtICh2b2lkKXNldFZhbHVlOihOU1N0
cmluZyAqKXZhbHVlOwpAQCAtMzA2LDggKzMwNiw4IEBACiAtICh2b2lkKXNldERpc2FibGVkOihC
T09MKWRpc2FibGVkOwogLSAoTlNTdHJpbmcgKiluYW1lOwogLSAodm9pZClzZXROYW1lOihOU1N0
cmluZyAqKW5hbWU7Ci0tIChsb25nKXRhYkluZGV4OwotLSAodm9pZClzZXRUYWJJbmRleDoobG9u
Zyl0YWJJbmRleDsKKy0gKGludCl0YWJJbmRleDsKKy0gKHZvaWQpc2V0VGFiSW5kZXg6KGludCl0
YWJJbmRleDsKIC0gKE5TU3RyaW5nICopdHlwZTsKIC0gKE5TU3RyaW5nICopdmFsdWU7CiAtICh2
b2lkKXNldFZhbHVlOihOU1N0cmluZyAqKXZhbHVlOwpAQCAtMzQzLDggKzM0Myw4IEBACiBAaW50
ZXJmYWNlIERPTUhUTUxPTGlzdEVsZW1lbnQgOiBET01IVE1MRWxlbWVudAogLSAoQk9PTCljb21w
YWN0OwogLSAodm9pZClzZXRDb21wYWN0OihCT09MKWNvbXBhY3Q7Ci0tIChsb25nKXN0YXJ0Owot
LSAodm9pZClzZXRTdGFydDoobG9uZylzdGFydDsKKy0gKGludClzdGFydDsKKy0gKHZvaWQpc2V0
U3RhcnQ6KGludClzdGFydDsKIC0gKE5TU3RyaW5nICopdHlwZTsKIC0gKHZvaWQpc2V0VHlwZToo
TlNTdHJpbmcgKil0eXBlOwogQGVuZApAQCAtMzY3LDggKzM2Nyw4IEBACiBAaW50ZXJmYWNlIERP
TUhUTUxMSUVsZW1lbnQgOiBET01IVE1MRWxlbWVudAogLSAoTlNTdHJpbmcgKil0eXBlOwogLSAo
dm9pZClzZXRUeXBlOihOU1N0cmluZyAqKXR5cGU7Ci0tIChsb25nKXZhbHVlOwotLSAodm9pZClz
ZXRWYWx1ZToobG9uZyl2YWx1ZTsKKy0gKGludCl2YWx1ZTsKKy0gKHZvaWQpc2V0VmFsdWU6KGlu
dCl2YWx1ZTsKIEBlbmQKIAogQGludGVyZmFjZSBET01IVE1MRGl2RWxlbWVudCA6IERPTUhUTUxF
bGVtZW50CkBAIC0zOTIsOCArMzkyLDggQEAKIEBlbmQKIAogQGludGVyZmFjZSBET01IVE1MUHJl
RWxlbWVudCA6IERPTUhUTUxFbGVtZW50Ci0tIChsb25nKXdpZHRoOwotLSAodm9pZClzZXRXaWR0
aDoobG9uZyl3aWR0aDsKKy0gKGludCl3aWR0aDsKKy0gKHZvaWQpc2V0V2lkdGg6KGludCl3aWR0
aDsKIEBlbmQKIAogQGludGVyZmFjZSBET01IVE1MQlJFbGVtZW50IDogRE9NSFRNTEVsZW1lbnQK
QEAgLTQ1Niw4ICs0NTYsOCBAQAogLSAodm9pZClzZXRSZXY6KE5TU3RyaW5nICopcmV2OwogLSAo
TlNTdHJpbmcgKilzaGFwZTsKIC0gKHZvaWQpc2V0U2hhcGU6KE5TU3RyaW5nICopc2hhcGU7Ci0t
IChsb25nKXRhYkluZGV4OwotLSAodm9pZClzZXRUYWJJbmRleDoobG9uZyl0YWJJbmRleDsKKy0g
KGludCl0YWJJbmRleDsKKy0gKHZvaWQpc2V0VGFiSW5kZXg6KGludCl0YWJJbmRleDsKIC0gKE5T
U3RyaW5nICopdGFyZ2V0OwogLSAodm9pZClzZXRUYXJnZXQ6KE5TU3RyaW5nICopdGFyZ2V0Owog
LSAoTlNTdHJpbmcgKil0eXBlOwpAQCAtNDc1LDEwICs0NzUsMTAgQEAKIC0gKHZvaWQpc2V0QWx0
OihOU1N0cmluZyAqKWFsdDsKIC0gKE5TU3RyaW5nICopYm9yZGVyOwogLSAodm9pZClzZXRCb3Jk
ZXI6KE5TU3RyaW5nICopYm9yZGVyOwotLSAobG9uZyloZWlnaHQ7Ci0tICh2b2lkKXNldEhlaWdo
dDoobG9uZyloZWlnaHQ7Ci0tIChsb25nKWhzcGFjZTsKLS0gKHZvaWQpc2V0SHNwYWNlOihsb25n
KWhzcGFjZTsKKy0gKGludCloZWlnaHQ7CistICh2b2lkKXNldEhlaWdodDooaW50KWhlaWdodDsK
Ky0gKGludCloc3BhY2U7CistICh2b2lkKXNldEhzcGFjZTooaW50KWhzcGFjZTsKIC0gKEJPT0wp
aXNNYXA7CiAtICh2b2lkKXNldElzTWFwOihCT09MKWlzTWFwOwogLSAoTlNTdHJpbmcgKilsb25n
RGVzYzsKQEAgLTQ4NywxMCArNDg3LDEwIEBACiAtICh2b2lkKXNldFNyYzooTlNTdHJpbmcgKilz
cmM7CiAtIChOU1N0cmluZyAqKXVzZU1hcDsKIC0gKHZvaWQpc2V0VXNlTWFwOihOU1N0cmluZyAq
KXVzZU1hcDsKLS0gKGxvbmcpdnNwYWNlOwotLSAodm9pZClzZXRWc3BhY2U6KGxvbmcpdnNwYWNl
OwotLSAobG9uZyl3aWR0aDsKLS0gKHZvaWQpc2V0V2lkdGg6KGxvbmcpd2lkdGg7CistIChpbnQp
dnNwYWNlOworLSAodm9pZClzZXRWc3BhY2U6KGludCl2c3BhY2U7CistIChpbnQpd2lkdGg7Cist
ICh2b2lkKXNldFdpZHRoOihpbnQpd2lkdGg7CiBAZW5kCiAKIEBpbnRlcmZhY2UgRE9NSFRNTE9i
amVjdEVsZW1lbnQgOiBET01IVE1MRWxlbWVudApAQCAtNTEzLDIwICs1MTMsMjAgQEAKIC0gKHZv
aWQpc2V0RGVjbGFyZTooQk9PTClkZWNsYXJlOwogLSAoTlNTdHJpbmcgKiloZWlnaHQ7CiAtICh2
b2lkKXNldEhlaWdodDooTlNTdHJpbmcgKiloZWlnaHQ7Ci0tIChsb25nKWhzcGFjZTsKLS0gKHZv
aWQpc2V0SHNwYWNlOihsb25nKWhzcGFjZTsKKy0gKGludCloc3BhY2U7CistICh2b2lkKXNldEhz
cGFjZTooaW50KWhzcGFjZTsKIC0gKE5TU3RyaW5nICopbmFtZTsKIC0gKHZvaWQpc2V0TmFtZToo
TlNTdHJpbmcgKiluYW1lOwogLSAoTlNTdHJpbmcgKilzdGFuZGJ5OwogLSAodm9pZClzZXRTdGFu
ZGJ5OihOU1N0cmluZyAqKXN0YW5kYnk7Ci0tIChsb25nKXRhYkluZGV4OwotLSAodm9pZClzZXRU
YWJJbmRleDoobG9uZyl0YWJJbmRleDsKKy0gKGludCl0YWJJbmRleDsKKy0gKHZvaWQpc2V0VGFi
SW5kZXg6KGludCl0YWJJbmRleDsKIC0gKE5TU3RyaW5nICopdHlwZTsKIC0gKHZvaWQpc2V0VHlw
ZTooTlNTdHJpbmcgKil0eXBlOwogLSAoTlNTdHJpbmcgKil1c2VNYXA7CiAtICh2b2lkKXNldFVz
ZU1hcDooTlNTdHJpbmcgKil1c2VNYXA7Ci0tIChsb25nKXZzcGFjZTsKLS0gKHZvaWQpc2V0VnNw
YWNlOihsb25nKXZzcGFjZTsKKy0gKGludCl2c3BhY2U7CistICh2b2lkKXNldFZzcGFjZTooaW50
KXZzcGFjZTsKIC0gKE5TU3RyaW5nICopd2lkdGg7CiAtICh2b2lkKXNldFdpZHRoOihOU1N0cmlu
ZyAqKXdpZHRoOwogLSAoRE9NRG9jdW1lbnQgKiljb250ZW50RG9jdW1lbnQ7CkBAIC01NTYsMTQg
KzU1NiwxNCBAQAogLSAodm9pZClzZXRDb2RlQmFzZTooTlNTdHJpbmcgKiljb2RlQmFzZTsKIC0g
KE5TU3RyaW5nICopaGVpZ2h0OwogLSAodm9pZClzZXRIZWlnaHQ6KE5TU3RyaW5nICopaGVpZ2h0
OwotLSAobG9uZyloc3BhY2U7Ci0tICh2b2lkKXNldEhzcGFjZToobG9uZyloc3BhY2U7CistIChp
bnQpaHNwYWNlOworLSAodm9pZClzZXRIc3BhY2U6KGludCloc3BhY2U7CiAtIChOU1N0cmluZyAq
KW5hbWU7CiAtICh2b2lkKXNldE5hbWU6KE5TU3RyaW5nICopbmFtZTsKIC0gKE5TU3RyaW5nICop
b2JqZWN0OwogLSAodm9pZClzZXRPYmplY3Q6KE5TU3RyaW5nICopb2JqZWN0OwotLSAobG9uZyl2
c3BhY2U7Ci0tICh2b2lkKXNldFZzcGFjZToobG9uZyl2c3BhY2U7CistIChpbnQpdnNwYWNlOwor
LSAodm9pZClzZXRWc3BhY2U6KGludCl2c3BhY2U7CiAtIChOU1N0cmluZyAqKXdpZHRoOwogLSAo
dm9pZClzZXRXaWR0aDooTlNTdHJpbmcgKil3aWR0aDsKIEBlbmQKQEAgLTU4Nyw4ICs1ODcsOCBA
QAogLSAodm9pZClzZXROb0hyZWY6KEJPT0wpbm9IcmVmOwogLSAoTlNTdHJpbmcgKilzaGFwZTsK
IC0gKHZvaWQpc2V0U2hhcGU6KE5TU3RyaW5nICopc2hhcGU7Ci0tIChsb25nKXRhYkluZGV4Owot
LSAodm9pZClzZXRUYWJJbmRleDoobG9uZyl0YWJJbmRleDsKKy0gKGludCl0YWJJbmRleDsKKy0g
KHZvaWQpc2V0VGFiSW5kZXg6KGludCl0YWJJbmRleDsKIC0gKE5TU3RyaW5nICopdGFyZ2V0Owog
LSAodm9pZClzZXRUYXJnZXQ6KE5TU3RyaW5nICopdGFyZ2V0OwogQGVuZApAQCAtNjQ0LDggKzY0
NCw4IEBACiAtICh2b2lkKWRlbGV0ZVRGb290OwogLSAoRE9NSFRNTEVsZW1lbnQgKiljcmVhdGVD
YXB0aW9uOwogLSAodm9pZClkZWxldGVDYXB0aW9uOwotLSAoRE9NSFRNTEVsZW1lbnQgKilpbnNl
cnRSb3c6KGxvbmcpaW5kZXg7Ci0tICh2b2lkKWRlbGV0ZVJvdzoobG9uZylpbmRleDsKKy0gKERP
TUhUTUxFbGVtZW50ICopaW5zZXJ0Um93OihpbnQpaW5kZXg7CistICh2b2lkKWRlbGV0ZVJvdzoo
aW50KWluZGV4OwogQGVuZAogCiBAaW50ZXJmYWNlIERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50
IDogRE9NSFRNTEVsZW1lbnQKQEAgLTY2MCw4ICs2NjAsOCBAQAogLSAodm9pZClzZXRDaDooTlNT
dHJpbmcgKiljaDsKIC0gKE5TU3RyaW5nICopY2hPZmY7CiAtICh2b2lkKXNldENoT2ZmOihOU1N0
cmluZyAqKWNoT2ZmOwotLSAobG9uZylzcGFuOwotLSAodm9pZClzZXRTcGFuOihsb25nKXNwYW47
CistIChpbnQpc3BhbjsKKy0gKHZvaWQpc2V0U3BhbjooaW50KXNwYW47CiAtIChOU1N0cmluZyAq
KXZBbGlnbjsKIC0gKHZvaWQpc2V0VkFsaWduOihOU1N0cmluZyAqKXZBbGlnbjsKIC0gKE5TU3Ry
aW5nICopd2lkdGg7CkBAIC02NzgsMTMgKzY3OCwxMyBAQAogLSAoTlNTdHJpbmcgKil2QWxpZ247
CiAtICh2b2lkKXNldFZBbGlnbjooTlNTdHJpbmcgKil2QWxpZ247CiAtIChET01IVE1MQ29sbGVj
dGlvbiAqKXJvd3M7Ci0tIChET01IVE1MRWxlbWVudCAqKWluc2VydFJvdzoobG9uZylpbmRleDsK
LS0gKHZvaWQpZGVsZXRlUm93Oihsb25nKWluZGV4OworLSAoRE9NSFRNTEVsZW1lbnQgKilpbnNl
cnRSb3c6KGludClpbmRleDsKKy0gKHZvaWQpZGVsZXRlUm93OihpbnQpaW5kZXg7CiBAZW5kCiAK
IEBpbnRlcmZhY2UgRE9NSFRNTFRhYmxlUm93RWxlbWVudCA6IERPTUhUTUxFbGVtZW50Ci0tIChs
b25nKXJvd0luZGV4OwotLSAobG9uZylzZWN0aW9uUm93SW5kZXg7CistIChpbnQpcm93SW5kZXg7
CistIChpbnQpc2VjdGlvblJvd0luZGV4OwogLSAoRE9NSFRNTENvbGxlY3Rpb24gKiljZWxsczsK
IC0gKE5TU3RyaW5nICopYWxpZ247CiAtICh2b2lkKXNldEFsaWduOihOU1N0cmluZyAqKWFsaWdu
OwpAQCAtNjk2LDEyICs2OTYsMTIgQEAKIC0gKHZvaWQpc2V0Q2hPZmY6KE5TU3RyaW5nICopY2hP
ZmY7CiAtIChOU1N0cmluZyAqKXZBbGlnbjsKIC0gKHZvaWQpc2V0VkFsaWduOihOU1N0cmluZyAq
KXZBbGlnbjsKLS0gKERPTUhUTUxFbGVtZW50ICopaW5zZXJ0Q2VsbDoobG9uZylpbmRleDsKLS0g
KHZvaWQpZGVsZXRlQ2VsbDoobG9uZylpbmRleDsKKy0gKERPTUhUTUxFbGVtZW50ICopaW5zZXJ0
Q2VsbDooaW50KWluZGV4OworLSAodm9pZClkZWxldGVDZWxsOihpbnQpaW5kZXg7CiBAZW5kCiAK
IEBpbnRlcmZhY2UgRE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQgOiBET01IVE1MRWxlbWVudAotLSAo
bG9uZyljZWxsSW5kZXg7CistIChpbnQpY2VsbEluZGV4OwogLSAoTlNTdHJpbmcgKilhYmJyOwog
LSAodm9pZClzZXRBYmJyOihOU1N0cmluZyAqKWFiYnI7CiAtIChOU1N0cmluZyAqKWFsaWduOwpA
QCAtNzE0LDE2ICs3MTQsMTYgQEAKIC0gKHZvaWQpc2V0Q2g6KE5TU3RyaW5nICopY2g7CiAtIChO
U1N0cmluZyAqKWNoT2ZmOwogLSAodm9pZClzZXRDaE9mZjooTlNTdHJpbmcgKiljaE9mZjsKLS0g
KGxvbmcpY29sU3BhbjsKLS0gKHZvaWQpc2V0Q29sU3BhbjoobG9uZyljb2xTcGFuOworLSAoaW50
KWNvbFNwYW47CistICh2b2lkKXNldENvbFNwYW46KGludCljb2xTcGFuOwogLSAoTlNTdHJpbmcg
KiloZWFkZXJzOwogLSAodm9pZClzZXRIZWFkZXJzOihOU1N0cmluZyAqKWhlYWRlcnM7CiAtIChO
U1N0cmluZyAqKWhlaWdodDsKIC0gKHZvaWQpc2V0SGVpZ2h0OihOU1N0cmluZyAqKWhlaWdodDsK
IC0gKEJPT0wpbm9XcmFwOwogLSAodm9pZClzZXROb1dyYXA6KEJPT0wpbm9XcmFwOwotLSAobG9u
Zylyb3dTcGFuOwotLSAodm9pZClzZXRSb3dTcGFuOihsb25nKXJvd1NwYW47CistIChpbnQpcm93
U3BhbjsKKy0gKHZvaWQpc2V0Um93U3BhbjooaW50KXJvd1NwYW47CiAtIChOU1N0cmluZyAqKXNj
b3BlOwogLSAodm9pZClzZXRTY29wZTooTlNTdHJpbmcgKilzY29wZTsKIC0gKE5TU3RyaW5nICop
dkFsaWduOwpJbmRleDogV2ViQ29yZS9rd3EvRE9NSFRNTC5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvRE9NSFRNTC5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4yNgpkaWZmIC1wIC11IC1yMS4yNiBXZWJDb3JlL2t3cS9ET01IVE1MLm1tCi0tLSBXZWJDb3Jl
L2t3cS9ET01IVE1MLm1tCTE0IEF1ZyAyMDA1IDA4OjA3OjIzIC0wMDAwCTEuMjYKKysrIFdlYkNv
cmUva3dxL0RPTUhUTUwubW0JMjEgQXVnIDIwMDUgMDU6Mjg6NDcgLTAwMDAKQEAgLTE3NCwxMiAr
MTc0LDEyIEBAIHVzaW5nIERPTTo6Tm9kZUltcGw7CiAgICAgcmV0dXJuIERPTV9jYXN0PEhUTUxD
b2xsZWN0aW9uSW1wbCAqPihfaW50ZXJuYWwpOwogfQogCi0tICh1bnNpZ25lZCBsb25nKWxlbmd0
aAorLSAodW5zaWduZWQpbGVuZ3RoCiB7CiAgICAgcmV0dXJuIFtzZWxmIF9jb2xsZWN0aW9uSW1w
bF0tPmxlbmd0aCgpOwogfQogCi0tIChET01Ob2RlICopaXRlbToodW5zaWduZWQgbG9uZylpbmRl
eAorLSAoRE9NTm9kZSAqKWl0ZW06KHVuc2lnbmVkKWluZGV4CiB7CiAgICAgcmV0dXJuIFtET01O
b2RlIF9ub2RlV2l0aEltcGw6W3NlbGYgX2NvbGxlY3Rpb25JbXBsXS0+aXRlbShpbmRleCldOwog
fQpAQCAtMjY2LDE3ICsyNjYsMTcgQEAgdXNpbmcgRE9NOjpOb2RlSW1wbDsKICAgICByZXR1cm4g
RE9NX2Nhc3Q8SFRNTE9wdGlvbnNDb2xsZWN0aW9uSW1wbCAqPihfaW50ZXJuYWwpOwogfQogCi0t
ICh1bnNpZ25lZCBsb25nKWxlbmd0aAorLSAodW5zaWduZWQpbGVuZ3RoCiB7CiAgICAgcmV0dXJu
IFtzZWxmIF9vcHRpb25zQ29sbGVjdGlvbkltcGxdLT5sZW5ndGgoKTsKIH0KIAotLSAodm9pZClz
ZXRMZW5ndGg6KHVuc2lnbmVkIGxvbmcpbGVuZ3RoCistICh2b2lkKXNldExlbmd0aDoodW5zaWdu
ZWQpbGVuZ3RoCiB7CiAgICAgW3NlbGYgX29wdGlvbnNDb2xsZWN0aW9uSW1wbF0tPnNldExlbmd0
aChsZW5ndGgpOwogfQogCi0tIChET01Ob2RlICopaXRlbToodW5zaWduZWQgbG9uZylpbmRleAor
LSAoRE9NTm9kZSAqKWl0ZW06KHVuc2lnbmVkKWluZGV4CiB7CiAgICAgcmV0dXJuIFtET01Ob2Rl
IF9ub2RlV2l0aEltcGw6W3NlbGYgX29wdGlvbnNDb2xsZWN0aW9uSW1wbF0tPml0ZW0oaW5kZXgp
XTsKIH0KQEAgLTkxNiw3ICs5MTYsNyBAQCB1c2luZyBET006Ok5vZGVJbXBsOwogICAgIHJldHVy
biBbRE9NSFRNTENvbGxlY3Rpb24gX2NvbGxlY3Rpb25XaXRoSW1wbDpjb2xsZWN0aW9uXTsKIH0K
IAotLSAobG9uZylsZW5ndGgKKy0gKGludClsZW5ndGgKIHsKICAgICByZXR1cm4gW3NlbGYgX2Zv
cm1FbGVtZW50SW1wbF0tPmxlbmd0aCgpOwogfQpAQCAtMTAzOCwxMiArMTAzOCwxMiBAQCB1c2lu
ZyBET006Ok5vZGVJbXBsOwogICAgIHJldHVybiBbc2VsZiBfc2VsZWN0RWxlbWVudEltcGxdLT50
eXBlKCk7CiB9CiAKLS0gKGxvbmcpc2VsZWN0ZWRJbmRleAorLSAoaW50KXNlbGVjdGVkSW5kZXgK
IHsKICAgICByZXR1cm4gW3NlbGYgX3NlbGVjdEVsZW1lbnRJbXBsXS0+c2VsZWN0ZWRJbmRleCgp
OwogfQogCi0tICh2b2lkKXNldFNlbGVjdGVkSW5kZXg6KGxvbmcpc2VsZWN0ZWRJbmRleAorLSAo
dm9pZClzZXRTZWxlY3RlZEluZGV4OihpbnQpc2VsZWN0ZWRJbmRleAogewogICAgIFtzZWxmIF9z
ZWxlY3RFbGVtZW50SW1wbF0tPnNldFNlbGVjdGVkSW5kZXgoc2VsZWN0ZWRJbmRleCk7CiB9CkBA
IC0xMDU5LDEyICsxMDU5LDEyIEBAIHVzaW5nIERPTTo6Tm9kZUltcGw7CiAgICAgW3NlbGYgX3Nl
bGVjdEVsZW1lbnRJbXBsXS0+c2V0VmFsdWUocy5pbXBsZW1lbnRhdGlvbigpKTsKIH0KIAotLSAo
bG9uZylsZW5ndGgKKy0gKGludClsZW5ndGgKIHsKICAgICByZXR1cm4gW3NlbGYgX3NlbGVjdEVs
ZW1lbnRJbXBsXS0+bGVuZ3RoKCk7CiB9CiAKLS0gKHZvaWQpc2V0TGVuZ3RoOihsb25nKWxlbmd0
aAorLSAodm9pZClzZXRMZW5ndGg6KGludClsZW5ndGgKIHsKICAgICAvLyBGSVhNRTogTm90IHll
dCBjbGVhciB3aGF0IHRvIGRvIGFib3V0IHRoaXMgb25lLgogICAgIC8vIFRoZXJlJ3Mgc29tZSBK
YXZhU2NyaXB0LXNwZWNpZmljIGhhY2tlcnkgaW4gdGhlIEphdmFTY3JpcHQgYmluZGluZ3MgZm9y
IHRoaXMuCkBAIC0xMTExLDIyICsxMTExLDIyIEBAIHVzaW5nIERPTTo6Tm9kZUltcGw7CiAgICAg
W3NlbGYgX3NlbGVjdEVsZW1lbnRJbXBsXS0+c2V0TmFtZShuYW1lKTsKIH0KIAotLSAobG9uZylz
aXplCistIChpbnQpc2l6ZQogewogICAgIHJldHVybiBbc2VsZiBfc2VsZWN0RWxlbWVudEltcGxd
LT5zaXplKCk7CiB9CiAKLS0gKHZvaWQpc2V0U2l6ZToobG9uZylzaXplCistICh2b2lkKXNldFNp
emU6KGludClzaXplCiB7CiAgICAgW3NlbGYgX3NlbGVjdEVsZW1lbnRJbXBsXS0+c2V0U2l6ZShz
aXplKTsKIH0KIAotLSAobG9uZyl0YWJJbmRleAorLSAoaW50KXRhYkluZGV4CiB7CiAgICAgcmV0
dXJuIFtzZWxmIF9zZWxlY3RFbGVtZW50SW1wbF0tPnRhYkluZGV4KCk7CiB9CiAKLS0gKHZvaWQp
c2V0VGFiSW5kZXg6KGxvbmcpdGFiSW5kZXgKKy0gKHZvaWQpc2V0VGFiSW5kZXg6KGludCl0YWJJ
bmRleAogewogICAgIFtzZWxmIF9zZWxlY3RFbGVtZW50SW1wbF0tPnNldFRhYkluZGV4KHRhYklu
ZGV4KTsKIH0KQEAgLTExMzgsNyArMTEzOCw3IEBAIHVzaW5nIERPTTo6Tm9kZUltcGw7CiAgICAg
cmFpc2VPbkRPTUVycm9yKGV4Y2VwdGlvbkNvZGUpOwogfQogCi0tICh2b2lkKXJlbW92ZToobG9u
ZylpbmRleAorLSAodm9pZClyZW1vdmU6KGludClpbmRleAogewogICAgIFtzZWxmIF9zZWxlY3RF
bGVtZW50SW1wbF0tPnJlbW92ZShpbmRleCk7CiB9CkBAIC0xMjExLDcgKzEyMTEsNyBAQCB1c2lu
ZyBET006Ok5vZGVJbXBsOwogICAgIHJldHVybiBbc2VsZiBfb3B0aW9uRWxlbWVudEltcGxdLT50
ZXh0KCk7CiB9CiAKLS0gKGxvbmcpaW5kZXgKKy0gKGludClpbmRleAogewogICAgIHJldHVybiBb
c2VsZiBfb3B0aW9uRWxlbWVudEltcGxdLT5pbmRleCgpOwogfQpAQCAtMTM1MSwxMiArMTM1MSwx
MiBAQCB1c2luZyBET006Ok5vZGVJbXBsOwogICAgIFtzZWxmIF9pbnB1dEVsZW1lbnRJbXBsXS0+
c2V0RGlzYWJsZWQoZGlzYWJsZWQpOwogfQogCi0tIChsb25nKW1heExlbmd0aAorLSAoaW50KW1h
eExlbmd0aAogewogICAgIHJldHVybiBbc2VsZiBfaW5wdXRFbGVtZW50SW1wbF0tPm1heExlbmd0
aCgpOwogfQogCi0tICh2b2lkKXNldE1heExlbmd0aDoobG9uZyltYXhMZW5ndGgKKy0gKHZvaWQp
c2V0TWF4TGVuZ3RoOihpbnQpbWF4TGVuZ3RoCiB7CiAgICAgW3NlbGYgX2lucHV0RWxlbWVudElt
cGxdLT5zZXRNYXhMZW5ndGgobWF4TGVuZ3RoKTsKIH0KQEAgLTEzODEsMTIgKzEzODEsMTIgQEAg
dXNpbmcgRE9NOjpOb2RlSW1wbDsKICAgICBbc2VsZiBfaW5wdXRFbGVtZW50SW1wbF0tPnNldFJl
YWRPbmx5KHJlYWRPbmx5KTsKIH0KIAotLSAodW5zaWduZWQgbG9uZylzaXplCistICh1bnNpZ25l
ZClzaXplCiB7CiAgICAgcmV0dXJuIFtzZWxmIF9pbnB1dEVsZW1lbnRJbXBsXS0+c2l6ZSgpOwog
fQogCi0tICh2b2lkKXNldFNpemU6KHVuc2lnbmVkIGxvbmcpc2l6ZQorLSAodm9pZClzZXRTaXpl
Oih1bnNpZ25lZClzaXplCiB7CiAgICAgW3NlbGYgX2lucHV0RWxlbWVudEltcGxdLT5zZXRTaXpl
KHNpemUpOwogfQpAQCAtMTQwMSwxMiArMTQwMSwxMiBAQCB1c2luZyBET006Ok5vZGVJbXBsOwog
ICAgIFtzZWxmIF9pbnB1dEVsZW1lbnRJbXBsXS0+c2V0U3JjKHNyYyk7CiB9CiAKLS0gKGxvbmcp
dGFiSW5kZXgKKy0gKGludCl0YWJJbmRleAogewogICAgIHJldHVybiBbc2VsZiBfaW5wdXRFbGVt
ZW50SW1wbF0tPnRhYkluZGV4KCk7CiB9CiAKLS0gKHZvaWQpc2V0VGFiSW5kZXg6KGxvbmcpdGFi
SW5kZXgKKy0gKHZvaWQpc2V0VGFiSW5kZXg6KGludCl0YWJJbmRleAogewogICAgIFtzZWxmIF9p
bnB1dEVsZW1lbnRJbXBsXS0+c2V0VGFiSW5kZXgodGFiSW5kZXgpOwogfQpAQCAtMTQ5NSwxMiAr
MTQ5NSwxMiBAQCB1c2luZyBET006Ok5vZGVJbXBsOwogICAgIFtzZWxmIF90ZXh0QXJlYUVsZW1l
bnRJbXBsXS0+c2V0QXR0cmlidXRlKGFjY2Vzc2tleUF0dHIsIGFjY2Vzc0tleSk7CiB9CiAKLS0g
KGxvbmcpY29scworLSAoaW50KWNvbHMKIHsKICAgICByZXR1cm4gW3NlbGYgX3RleHRBcmVhRWxl
bWVudEltcGxdLT5nZXRBdHRyaWJ1dGUoY29sc0F0dHIpLnRvSW50KCk7CiB9CiAKLS0gKHZvaWQp
c2V0Q29sczoobG9uZyljb2xzCistICh2b2lkKXNldENvbHM6KGludCljb2xzCiB7CiAgICAgRE9N
U3RyaW5nIHZhbHVlKFFTdHJpbmc6Om51bWJlcihjb2xzKSk7CiAgICAgW3NlbGYgX3RleHRBcmVh
RWxlbWVudEltcGxdLT5zZXRBdHRyaWJ1dGUoY29sc0F0dHIsIHZhbHVlKTsKQEAgLTE1MzYsMjMg
KzE1MzYsMjMgQEAgdXNpbmcgRE9NOjpOb2RlSW1wbDsKICAgICBbc2VsZiBfdGV4dEFyZWFFbGVt
ZW50SW1wbF0tPnNldEF0dHJpYnV0ZShyZWFkb25seUF0dHIsIHJlYWRPbmx5ID8gIiIgOiAwKTsK
IH0KIAotLSAobG9uZylyb3dzCistIChpbnQpcm93cwogewogICAgIHJldHVybiBbc2VsZiBfdGV4
dEFyZWFFbGVtZW50SW1wbF0tPmdldEF0dHJpYnV0ZShyb3dzQXR0cikudG9JbnQoKTsKIH0KIAot
LSAodm9pZClzZXRSb3dzOihsb25nKXJvd3MKKy0gKHZvaWQpc2V0Um93czooaW50KXJvd3MKIHsK
IAlET01TdHJpbmcgdmFsdWUoUVN0cmluZzo6bnVtYmVyKHJvd3MpKTsKICAgICBbc2VsZiBfdGV4
dEFyZWFFbGVtZW50SW1wbF0tPnNldEF0dHJpYnV0ZShyb3dzQXR0ciwgdmFsdWUpOwogfQogCi0t
IChsb25nKXRhYkluZGV4CistIChpbnQpdGFiSW5kZXgKIHsKICAgICByZXR1cm4gW3NlbGYgX3Rl
eHRBcmVhRWxlbWVudEltcGxdLT50YWJJbmRleCgpOwogfQogCi0tICh2b2lkKXNldFRhYkluZGV4
Oihsb25nKXRhYkluZGV4CistICh2b2lkKXNldFRhYkluZGV4OihpbnQpdGFiSW5kZXgKIHsKICAg
ICBbc2VsZiBfdGV4dEFyZWFFbGVtZW50SW1wbF0tPnNldFRhYkluZGV4KHRhYkluZGV4KTsKIH0K
QEAgLTE2MzYsMTIgKzE2MzYsMTIgQEAgdXNpbmcgRE9NOjpOb2RlSW1wbDsKICAgICBbc2VsZiBf
YnV0dG9uRWxlbWVudEltcGxdLT5zZXROYW1lKG5hbWUpOwogfQogCi0tIChsb25nKXRhYkluZGV4
CistIChpbnQpdGFiSW5kZXgKIHsKICAgICByZXR1cm4gW3NlbGYgX2J1dHRvbkVsZW1lbnRJbXBs
XS0+dGFiSW5kZXgoKTsKIH0KIAotLSAodm9pZClzZXRUYWJJbmRleDoobG9uZyl0YWJJbmRleAor
LSAodm9pZClzZXRUYWJJbmRleDooaW50KXRhYkluZGV4CiB7CiAgICAgW3NlbGYgX2J1dHRvbkVs
ZW1lbnRJbXBsXS0+c2V0VGFiSW5kZXgodGFiSW5kZXgpOwogfQpAQCAtMTc5NCwxMiArMTc5NCwx
MiBAQCB1c2luZyBET006Ok5vZGVJbXBsOwogICAgIFtzZWxmIF9vTGlzdEVsZW1lbnRJbXBsXS0+
c2V0Q29tcGFjdChjb21wYWN0KTsKIH0KIAotLSAobG9uZylzdGFydAorLSAoaW50KXN0YXJ0CiB7
CiAgICAgcmV0dXJuIFtzZWxmIF9vTGlzdEVsZW1lbnRJbXBsXS0+Z2V0QXR0cmlidXRlKHN0YXJ0
QXR0cikudG9JbnQoKTsKIH0KIAotLSAodm9pZClzZXRTdGFydDoobG9uZylzdGFydAorLSAodm9p
ZClzZXRTdGFydDooaW50KXN0YXJ0CiB7CiAJRE9NU3RyaW5nIHZhbHVlKFFTdHJpbmc6Om51bWJl
cihzdGFydCkpOwogICAgIFtzZWxmIF9vTGlzdEVsZW1lbnRJbXBsXS0+c2V0QXR0cmlidXRlKHN0
YXJ0QXR0ciwgdmFsdWUpOwpAQCAtMTg5MSwxMiArMTg5MSwxMiBAQCB1c2luZyBET006Ok5vZGVJ
bXBsOwogICAgIFtzZWxmIF9saUVsZW1lbnRJbXBsXS0+c2V0VHlwZSh0eXBlKTsKIH0KIAotLSAo
bG9uZyl2YWx1ZQorLSAoaW50KXZhbHVlCiB7CiAgICAgcmV0dXJuIFtzZWxmIF9saUVsZW1lbnRJ
bXBsXS0+dmFsdWUoKTsKIH0KIAotLSAodm9pZClzZXRWYWx1ZToobG9uZyl2YWx1ZQorLSAodm9p
ZClzZXRWYWx1ZTooaW50KXZhbHVlCiB7CiAgICAgW3NlbGYgX2xpRWxlbWVudEltcGxdLT5zZXRW
YWx1ZSh2YWx1ZSk7CiB9CkBAIC0xOTg2LDEyICsxOTg2LDEyIEBAIHVzaW5nIERPTTo6Tm9kZUlt
cGw7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxQcmVFbGVtZW50SW1wbCAqPihET01fY2Fz
dDxOb2RlSW1wbCAqPihfaW50ZXJuYWwpKTsKIH0KIAotLSAobG9uZyl3aWR0aAorLSAoaW50KXdp
ZHRoCiB7CiAgICAgcmV0dXJuIFtzZWxmIF9wcmVFbGVtZW50SW1wbF0tPmdldEF0dHJpYnV0ZSh3
aWR0aEF0dHIpLnRvSW50KCk7CiB9CiAKLS0gKHZvaWQpc2V0V2lkdGg6KGxvbmcpd2lkdGgKKy0g
KHZvaWQpc2V0V2lkdGg6KGludCl3aWR0aAogewogICAgIERPTVN0cmluZyBzdHJpbmcoUVN0cmlu
Zzo6bnVtYmVyKHdpZHRoKSk7CiAgICAgW3NlbGYgX3ByZUVsZW1lbnRJbXBsXS0+c2V0QXR0cmli
dXRlKHdpZHRoQXR0ciwgc3RyaW5nKTsKQEAgLTIyNzEsMTIgKzIyNzEsMTIgQEAgdXNpbmcgRE9N
OjpOb2RlSW1wbDsKICAgICBbc2VsZiBfYW5jaG9yRWxlbWVudEltcGxdLT5zZXRTaGFwZShzaGFw
ZSk7CiB9CiAKLS0gKGxvbmcpdGFiSW5kZXgKKy0gKGludCl0YWJJbmRleAogewogICAgIHJldHVy
biBbc2VsZiBfYW5jaG9yRWxlbWVudEltcGxdLT50YWJJbmRleCgpOwogfQogCi0tICh2b2lkKXNl
dFRhYkluZGV4Oihsb25nKXRhYkluZGV4CistICh2b2lkKXNldFRhYkluZGV4OihpbnQpdGFiSW5k
ZXgKIHsKICAgICBbc2VsZiBfYW5jaG9yRWxlbWVudEltcGxdLT5zZXRUYWJJbmRleCh0YWJJbmRl
eCk7CiB9CkBAIC0yMzYzLDIzICsyMzYzLDIzIEBAIHVzaW5nIERPTTo6Tm9kZUltcGw7CiAgICAg
W3NlbGYgX2ltYWdlRWxlbWVudEltcGxdLT5zZXRBdHRyaWJ1dGUoYm9yZGVyQXR0ciwgYm9yZGVy
KTsKIH0KIAotLSAobG9uZyloZWlnaHQKKy0gKGludCloZWlnaHQKIHsKICAgICByZXR1cm4gW3Nl
bGYgX2ltYWdlRWxlbWVudEltcGxdLT5nZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0cikudG9JbnQoKTsK
IH0KIAotLSAodm9pZClzZXRIZWlnaHQ6KGxvbmcpaGVpZ2h0CistICh2b2lkKXNldEhlaWdodDoo
aW50KWhlaWdodAogewogICAgIERPTVN0cmluZyBzdHJpbmcoUVN0cmluZzo6bnVtYmVyKGhlaWdo
dCkpOwogICAgIFtzZWxmIF9pbWFnZUVsZW1lbnRJbXBsXS0+c2V0QXR0cmlidXRlKGhlaWdodEF0
dHIsIHN0cmluZyk7CiB9CiAKLS0gKGxvbmcpaHNwYWNlCistIChpbnQpaHNwYWNlCiB7CiAgICAg
cmV0dXJuIFtzZWxmIF9pbWFnZUVsZW1lbnRJbXBsXS0+Z2V0QXR0cmlidXRlKGhzcGFjZUF0dHIp
LnRvSW50KCk7CiB9CiAKLS0gKHZvaWQpc2V0SHNwYWNlOihsb25nKWhzcGFjZQorLSAodm9pZClz
ZXRIc3BhY2U6KGludCloc3BhY2UKIHsKICAgICBET01TdHJpbmcgc3RyaW5nKFFTdHJpbmc6Om51
bWJlcihoc3BhY2UpKTsKICAgICBbc2VsZiBfaW1hZ2VFbGVtZW50SW1wbF0tPnNldEF0dHJpYnV0
ZShoc3BhY2VBdHRyLCBzdHJpbmcpOwpAQCAtMjQyNSwyMyArMjQyNSwyMyBAQCB1c2luZyBET006
Ok5vZGVJbXBsOwogICAgIFtzZWxmIF9pbWFnZUVsZW1lbnRJbXBsXS0+c2V0QXR0cmlidXRlKHVz
ZW1hcEF0dHIsIHVzZU1hcCk7CiB9CiAKLS0gKGxvbmcpdnNwYWNlCistIChpbnQpdnNwYWNlCiB7
CiAgICAgcmV0dXJuIFtzZWxmIF9pbWFnZUVsZW1lbnRJbXBsXS0+Z2V0QXR0cmlidXRlKHZzcGFj
ZUF0dHIpLnRvSW50KCk7CiB9CiAKLS0gKHZvaWQpc2V0VnNwYWNlOihsb25nKXZzcGFjZQorLSAo
dm9pZClzZXRWc3BhY2U6KGludCl2c3BhY2UKIHsKICAgICBET01TdHJpbmcgc3RyaW5nKFFTdHJp
bmc6Om51bWJlcih2c3BhY2UpKTsKICAgICBbc2VsZiBfaW1hZ2VFbGVtZW50SW1wbF0tPnNldEF0
dHJpYnV0ZSh2c3BhY2VBdHRyLCBzdHJpbmcpOwogfQogCi0tIChsb25nKXdpZHRoCistIChpbnQp
d2lkdGgKIHsKICAgICByZXR1cm4gW3NlbGYgX2ltYWdlRWxlbWVudEltcGxdLT5nZXRBdHRyaWJ1
dGUod2lkdGhBdHRyKS50b0ludCgpOwogfQogCi0tICh2b2lkKXNldFdpZHRoOihsb25nKXdpZHRo
CistICh2b2lkKXNldFdpZHRoOihpbnQpd2lkdGgKIHsKICAgICBET01TdHJpbmcgc3RyaW5nKFFT
dHJpbmc6Om51bWJlcih3aWR0aCkpOwogICAgIFtzZWxmIF9pbWFnZUVsZW1lbnRJbXBsXS0+c2V0
QXR0cmlidXRlKHdpZHRoQXR0ciwgc3RyaW5nKTsKQEAgLTI1NTEsMTIgKzI1NTEsMTIgQEAgdXNp
bmcgRE9NOjpOb2RlSW1wbDsKICAgICBbc2VsZiBfb2JqZWN0RWxlbWVudEltcGxdLT5zZXRBdHRy
aWJ1dGUoaGVpZ2h0QXR0ciwgaGVpZ2h0KTsKIH0KIAotLSAobG9uZyloc3BhY2UKKy0gKGludClo
c3BhY2UKIHsKICAgICByZXR1cm4gW3NlbGYgX29iamVjdEVsZW1lbnRJbXBsXS0+Z2V0QXR0cmli
dXRlKGhzcGFjZUF0dHIpLnRvSW50KCk7CiB9CiAKLS0gKHZvaWQpc2V0SHNwYWNlOihsb25nKWhz
cGFjZQorLSAodm9pZClzZXRIc3BhY2U6KGludCloc3BhY2UKIHsKICAgICBET01TdHJpbmcgc3Ry
aW5nKFFTdHJpbmc6Om51bWJlcihoc3BhY2UpKTsKICAgICBbc2VsZiBfb2JqZWN0RWxlbWVudElt
cGxdLT5zZXRBdHRyaWJ1dGUoaHNwYWNlQXR0ciwgc3RyaW5nKTsKQEAgLTI1ODIsMTIgKzI1ODIs
MTIgQEAgdXNpbmcgRE9NOjpOb2RlSW1wbDsKICAgICBbc2VsZiBfb2JqZWN0RWxlbWVudEltcGxd
LT5zZXRBdHRyaWJ1dGUoc3RhbmRieUF0dHIsIHN0YW5kYnkpOwogfQogCi0tIChsb25nKXRhYklu
ZGV4CistIChpbnQpdGFiSW5kZXgKIHsKICAgICByZXR1cm4gW3NlbGYgX29iamVjdEVsZW1lbnRJ
bXBsXS0+Z2V0QXR0cmlidXRlKHRhYmluZGV4QXR0cikudG9JbnQoKTsKIH0KIAotLSAodm9pZClz
ZXRUYWJJbmRleDoobG9uZyl0YWJJbmRleAorLSAodm9pZClzZXRUYWJJbmRleDooaW50KXRhYklu
ZGV4CiB7CiAgICAgRE9NU3RyaW5nIHN0cmluZyhRU3RyaW5nOjpudW1iZXIodGFiSW5kZXgpKTsK
ICAgICBbc2VsZiBfb2JqZWN0RWxlbWVudEltcGxdLT5zZXRBdHRyaWJ1dGUodGFiaW5kZXhBdHRy
LCBzdHJpbmcpOwpAQCAtMjYxMywxMiArMjYxMywxMiBAQCB1c2luZyBET006Ok5vZGVJbXBsOwog
ICAgIFtzZWxmIF9vYmplY3RFbGVtZW50SW1wbF0tPnNldEF0dHJpYnV0ZSh1c2VtYXBBdHRyLCB1
c2VNYXApOwogfQogCi0tIChsb25nKXZzcGFjZQorLSAoaW50KXZzcGFjZQogewogICAgIHJldHVy
biBbc2VsZiBfb2JqZWN0RWxlbWVudEltcGxdLT5nZXRBdHRyaWJ1dGUodnNwYWNlQXR0cikudG9J
bnQoKTsKIH0KIAotLSAodm9pZClzZXRWc3BhY2U6KGxvbmcpdnNwYWNlCistICh2b2lkKXNldFZz
cGFjZTooaW50KXZzcGFjZQogewogICAgIERPTVN0cmluZyBzdHJpbmcoUVN0cmluZzo6bnVtYmVy
KHZzcGFjZSkpOwogICAgIFtzZWxmIF9vYmplY3RFbGVtZW50SW1wbF0tPnNldEF0dHJpYnV0ZSh2
c3BhY2VBdHRyLCBzdHJpbmcpOwpAQCAtMjc1NywxMiArMjc1NywxMiBAQCB1c2luZyBET006Ok5v
ZGVJbXBsOwogICAgIFtzZWxmIF9hcHBsZXRFbGVtZW50SW1wbF0tPnNldEF0dHJpYnV0ZShoZWln
aHRBdHRyLCBoZWlnaHQpOwogfQogCi0tIChsb25nKWhzcGFjZQorLSAoaW50KWhzcGFjZQogewog
ICAgIHJldHVybiBbc2VsZiBfYXBwbGV0RWxlbWVudEltcGxdLT5nZXRBdHRyaWJ1dGUoaHNwYWNl
QXR0cikudG9JbnQoKTsKIH0KIAotLSAodm9pZClzZXRIc3BhY2U6KGxvbmcpaHNwYWNlCistICh2
b2lkKXNldEhzcGFjZTooaW50KWhzcGFjZQogewogICAgIERPTVN0cmluZyBzdHJpbmcoUVN0cmlu
Zzo6bnVtYmVyKGhzcGFjZSkpOwogICAgIFtzZWxmIF9hcHBsZXRFbGVtZW50SW1wbF0tPnNldEF0
dHJpYnV0ZShoc3BhY2VBdHRyLCBzdHJpbmcpOwpAQCAtMjc4OCwxMiArMjc4OCwxMiBAQCB1c2lu
ZyBET006Ok5vZGVJbXBsOwogICAgIFtzZWxmIF9hcHBsZXRFbGVtZW50SW1wbF0tPnNldEF0dHJp
YnV0ZShvYmplY3RBdHRyLCBvYmplY3QpOwogfQogCi0tIChsb25nKXZzcGFjZQorLSAoaW50KXZz
cGFjZQogewogICAgIHJldHVybiBbc2VsZiBfYXBwbGV0RWxlbWVudEltcGxdLT5nZXRBdHRyaWJ1
dGUodnNwYWNlQXR0cikudG9JbnQoKTsKIH0KIAotLSAodm9pZClzZXRWc3BhY2U6KGxvbmcpdnNw
YWNlCistICh2b2lkKXNldFZzcGFjZTooaW50KXZzcGFjZQogewogICAgIERPTVN0cmluZyBzdHJp
bmcoUVN0cmluZzo6bnVtYmVyKHZzcGFjZSkpOwogICAgIFtzZWxmIF9hcHBsZXRFbGVtZW50SW1w
bF0tPnNldEF0dHJpYnV0ZSh2c3BhY2VBdHRyLCBzdHJpbmcpOwpAQCAtMjkwMywxMiArMjkwMywx
MiBAQCB1c2luZyBET006Ok5vZGVJbXBsOwogICAgIFtzZWxmIF9hcmVhRWxlbWVudEltcGxdLT5z
ZXRBdHRyaWJ1dGUoc2hhcGVBdHRyLCBzaGFwZSk7CiB9CiAKLS0gKGxvbmcpdGFiSW5kZXgKKy0g
KGludCl0YWJJbmRleAogewogICAgIHJldHVybiBbc2VsZiBfYXJlYUVsZW1lbnRJbXBsXS0+Z2V0
QXR0cmlidXRlKHRhYmluZGV4QXR0cikudG9JbnQoKTsKIH0KIAotLSAodm9pZClzZXRUYWJJbmRl
eDoobG9uZyl0YWJJbmRleAorLSAodm9pZClzZXRUYWJJbmRleDooaW50KXRhYkluZGV4CiB7CiAg
ICAgRE9NU3RyaW5nIHN0cmluZyhRU3RyaW5nOjpudW1iZXIodGFiSW5kZXgpKTsKICAgICBbc2Vs
ZiBfYXJlYUVsZW1lbnRJbXBsXS0+c2V0QXR0cmlidXRlKHRhYmluZGV4QXR0ciwgc3RyaW5nKTsK
QEAgLTMwODMsNyArMzA4Myw3IEBAIHVzaW5nIERPTTo6Tm9kZUltcGw7CiAgICAgcmV0dXJuIFtE
T01IVE1MQ29sbGVjdGlvbiBfY29sbGVjdGlvbldpdGhJbXBsOmNvbGxlY3Rpb25dOwogfQogCi0t
IChET01IVE1MRWxlbWVudCAqKWluc2VydFJvdzoobG9uZylpbmRleAorLSAoRE9NSFRNTEVsZW1l
bnQgKilpbnNlcnRSb3c6KGludClpbmRleAogewogICAgIGludCBleGNlcHRpb25jb2RlID0gMDsK
ICAgICBIVE1MRWxlbWVudEltcGwgKmltcGwgPSBbc2VsZiBfdGFibGVTZWN0aW9uRWxlbWVudElt
cGxdLT5pbnNlcnRSb3coaW5kZXgsIGV4Y2VwdGlvbmNvZGUpOwpAQCAtMzA5MSw3ICszMDkxLDcg
QEAgdXNpbmcgRE9NOjpOb2RlSW1wbDsKICAgICByZXR1cm4gW0RPTUhUTUxFbGVtZW50IF9lbGVt
ZW50V2l0aEltcGw6aW1wbF07CiB9CiAKLS0gKHZvaWQpZGVsZXRlUm93Oihsb25nKWluZGV4Cist
ICh2b2lkKWRlbGV0ZVJvdzooaW50KWluZGV4CiB7CiAgICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAw
OwogICAgIFtzZWxmIF90YWJsZVNlY3Rpb25FbGVtZW50SW1wbF0tPmRlbGV0ZVJvdyhpbmRleCwg
ZXhjZXB0aW9uY29kZSk7CkBAIC0zMjgxLDcgKzMyODEsNyBAQCB1c2luZyBET006Ok5vZGVJbXBs
OwogICAgIFtzZWxmIF90YWJsZUVsZW1lbnRJbXBsXS0+ZGVsZXRlQ2FwdGlvbigpOwogfQogCi0t
IChET01IVE1MRWxlbWVudCAqKWluc2VydFJvdzoobG9uZylpbmRleAorLSAoRE9NSFRNTEVsZW1l
bnQgKilpbnNlcnRSb3c6KGludClpbmRleAogewogICAgIGludCBleGNlcHRpb25jb2RlID0gMDsK
ICAgICBIVE1MVGFibGVFbGVtZW50SW1wbCAqaW1wbCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUVs
ZW1lbnRJbXBsICo+KFtzZWxmIF90YWJsZUVsZW1lbnRJbXBsXS0+aW5zZXJ0Um93KGluZGV4LCBl
eGNlcHRpb25jb2RlKSk7CkBAIC0zMjg5LDcgKzMyODksNyBAQCB1c2luZyBET006Ok5vZGVJbXBs
OwogICAgIHJldHVybiBbRE9NSFRNTFRhYmxlRWxlbWVudCBfdGFibGVFbGVtZW50V2l0aEltcGw6
aW1wbF07CiB9CiAKLS0gKHZvaWQpZGVsZXRlUm93Oihsb25nKWluZGV4CistICh2b2lkKWRlbGV0
ZVJvdzooaW50KWluZGV4CiB7CiAgICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAwOwogICAgIFtzZWxm
IF90YWJsZUVsZW1lbnRJbXBsXS0+ZGVsZXRlUm93KGluZGV4LCBleGNlcHRpb25jb2RlKTsKQEAg
LTMzNDksMTIgKzMzNDksMTIgQEAgdXNpbmcgRE9NOjpOb2RlSW1wbDsKICAgICBbc2VsZiBfdGFi
bGVDb2xFbGVtZW50SW1wbF0tPnNldEF0dHJpYnV0ZShjaGFyb2ZmQXR0ciwgY2hPZmYpOwogfQog
Ci0tIChsb25nKXNwYW4KKy0gKGludClzcGFuCiB7CiAgICAgcmV0dXJuIFtzZWxmIF90YWJsZUNv
bEVsZW1lbnRJbXBsXS0+Z2V0QXR0cmlidXRlKHNwYW5BdHRyKS50b0ludCgpOwogfQogCi0tICh2
b2lkKXNldFNwYW46KGxvbmcpc3BhbgorLSAodm9pZClzZXRTcGFuOihpbnQpc3BhbgogewogICAg
IERPTVN0cmluZyBzdHJpbmcoUVN0cmluZzo6bnVtYmVyKHNwYW4pKTsKICAgICBbc2VsZiBfdGFi
bGVDb2xFbGVtZW50SW1wbF0tPnNldEF0dHJpYnV0ZShzcGFuQXR0ciwgc3RyaW5nKTsKQEAgLTMz
ODksMTIgKzMzODksMTIgQEAgdXNpbmcgRE9NOjpOb2RlSW1wbDsKICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8SFRNTFRhYmxlUm93RWxlbWVudEltcGwgKj4oRE9NX2Nhc3Q8Tm9kZUltcGwgKj4oX2lu
dGVybmFsKSk7CiB9CiAKLS0gKGxvbmcpcm93SW5kZXgKKy0gKGludClyb3dJbmRleAogewogICAg
IHJldHVybiBbc2VsZiBfdGFibGVSb3dFbGVtZW50SW1wbF0tPnJvd0luZGV4KCk7CiB9CiAKLS0g
KGxvbmcpc2VjdGlvblJvd0luZGV4CistIChpbnQpc2VjdGlvblJvd0luZGV4CiB7CiAgICAgcmV0
dXJuIFtzZWxmIF90YWJsZVJvd0VsZW1lbnRJbXBsXS0+c2VjdGlvblJvd0luZGV4KCk7CiB9CkBA
IC0zNDU1LDcgKzM0NTUsNyBAQCB1c2luZyBET006Ok5vZGVJbXBsOwogICAgIFtzZWxmIF90YWJs
ZVJvd0VsZW1lbnRJbXBsXS0+c2V0QXR0cmlidXRlKHZhbGlnbkF0dHIsIHZBbGlnbik7CiB9CiAK
LS0gKERPTUhUTUxFbGVtZW50ICopaW5zZXJ0Q2VsbDoobG9uZylpbmRleAorLSAoRE9NSFRNTEVs
ZW1lbnQgKilpbnNlcnRDZWxsOihpbnQpaW5kZXgKIHsKICAgICBpbnQgZXhjZXB0aW9uY29kZSA9
IDA7CiAgICAgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsICppbXBsID0gc3RhdGljX2Nhc3Q8SFRN
TFRhYmxlQ2VsbEVsZW1lbnRJbXBsICo+KFtzZWxmIF90YWJsZVJvd0VsZW1lbnRJbXBsXS0+aW5z
ZXJ0Q2VsbChpbmRleCwgZXhjZXB0aW9uY29kZSkpOwpAQCAtMzQ2Myw3ICszNDYzLDcgQEAgdXNp
bmcgRE9NOjpOb2RlSW1wbDsKICAgICByZXR1cm4gW0RPTUhUTUxUYWJsZUNlbGxFbGVtZW50IF90
YWJsZUNlbGxFbGVtZW50V2l0aEltcGw6aW1wbF07CiB9CiAKLS0gKHZvaWQpZGVsZXRlQ2VsbDoo
bG9uZylpbmRleAorLSAodm9pZClkZWxldGVDZWxsOihpbnQpaW5kZXgKIHsKICAgICBpbnQgZXhj
ZXB0aW9uY29kZSA9IDA7CiAgICAgW3NlbGYgX3RhYmxlUm93RWxlbWVudEltcGxdLT5kZWxldGVD
ZWxsKGluZGV4LCBleGNlcHRpb25jb2RlKTsKQEAgLTM0NzQsNyArMzQ3NCw3IEBAIHVzaW5nIERP
TTo6Tm9kZUltcGw7CiAKIEBpbXBsZW1lbnRhdGlvbiBET01IVE1MVGFibGVDZWxsRWxlbWVudAog
Ci0tIChsb25nKWNlbGxJbmRleAorLSAoaW50KWNlbGxJbmRleAogewogICAgIHJldHVybiBbc2Vs
ZiBfdGFibGVDZWxsRWxlbWVudEltcGxdLT5jZWxsSW5kZXgoKTsKIH0KQEAgLTM1MzksMTIgKzM1
MzksMTIgQEAgdXNpbmcgRE9NOjpOb2RlSW1wbDsKICAgICBbc2VsZiBfdGFibGVDZWxsRWxlbWVu
dEltcGxdLT5zZXRBdHRyaWJ1dGUoY2hhcm9mZkF0dHIsIGNoT2ZmKTsKIH0KIAotLSAobG9uZylj
b2xTcGFuCistIChpbnQpY29sU3BhbgogewogICAgIHJldHVybiBbc2VsZiBfdGFibGVDZWxsRWxl
bWVudEltcGxdLT5nZXRBdHRyaWJ1dGUoY29sc3BhbkF0dHIpLnRvSW50KCk7CiB9CiAKLS0gKHZv
aWQpc2V0Q29sU3BhbjoobG9uZyljb2xTcGFuCistICh2b2lkKXNldENvbFNwYW46KGludCljb2xT
cGFuCiB7CiAgICAgRE9NU3RyaW5nIHN0cmluZyhRU3RyaW5nOjpudW1iZXIoY29sU3BhbikpOwog
ICAgIFtzZWxmIF90YWJsZUNlbGxFbGVtZW50SW1wbF0tPnNldEF0dHJpYnV0ZShjb2xzcGFuQXR0
ciwgc3RyaW5nKTsKQEAgLTM1ODAsMTIgKzM1ODAsMTIgQEAgdXNpbmcgRE9NOjpOb2RlSW1wbDsK
ICAgICBbc2VsZiBfdGFibGVDZWxsRWxlbWVudEltcGxdLT5zZXRBdHRyaWJ1dGUobm93cmFwQXR0
ciwgbm9XcmFwID8gIiIgOiAwKTsKIH0KIAotLSAobG9uZylyb3dTcGFuCistIChpbnQpcm93U3Bh
bgogewogICAgIHJldHVybiBbc2VsZiBfdGFibGVDZWxsRWxlbWVudEltcGxdLT5nZXRBdHRyaWJ1
dGUocm93c3BhbkF0dHIpLnRvSW50KCk7CiB9CiAKLS0gKHZvaWQpc2V0Um93U3BhbjoobG9uZyly
b3dTcGFuCistICh2b2lkKXNldFJvd1NwYW46KGludClyb3dTcGFuCiB7CiAgICAgRE9NU3RyaW5n
IHN0cmluZyhRU3RyaW5nOjpudW1iZXIocm93U3BhbikpOwogICAgIFtzZWxmIF90YWJsZUNlbGxF
bGVtZW50SW1wbF0tPnNldEF0dHJpYnV0ZShyb3dzcGFuQXR0ciwgc3RyaW5nKTsKQEAgLTM5MDMs
MTIgKzM5MDMsMTIgQEAgdXNpbmcgRE9NOjpOb2RlSW1wbDsKICAgICBbc2VsZiBfZW1iZWRFbGVt
ZW50SW1wbF0tPnNldEF0dHJpYnV0ZShhbGlnbkF0dHIsIGFsaWduKTsKIH0KIAotLSAobG9uZylo
ZWlnaHQKKy0gKGludCloZWlnaHQKIHsKICAgICByZXR1cm4gW3NlbGYgX2VtYmVkRWxlbWVudElt
cGxdLT5nZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0cikudG9JbnQoKTsKIH0KIAotLSAodm9pZClzZXRI
ZWlnaHQ6KGxvbmcpaGVpZ2h0CistICh2b2lkKXNldEhlaWdodDooaW50KWhlaWdodAogewogICAg
IERPTVN0cmluZyBzdHJpbmcoUVN0cmluZzo6bnVtYmVyKGhlaWdodCkpOwogICAgIFtzZWxmIF9l
bWJlZEVsZW1lbnRJbXBsXS0+c2V0QXR0cmlidXRlKGhlaWdodEF0dHIsIHN0cmluZyk7CkBAIC0z
OTQ0LDEyICszOTQ0LDEyIEBAIHVzaW5nIERPTTo6Tm9kZUltcGw7CiAgICAgW3NlbGYgX2VtYmVk
RWxlbWVudEltcGxdLT5zZXRBdHRyaWJ1dGUodHlwZUF0dHIsIHR5cGUpOwogfQogCi0tIChsb25n
KXdpZHRoCistIChpbnQpd2lkdGgKIHsKICAgICByZXR1cm4gW3NlbGYgX2VtYmVkRWxlbWVudElt
cGxdLT5nZXRBdHRyaWJ1dGUod2lkdGhBdHRyKS50b0ludCgpOwogfQogCi0tICh2b2lkKXNldFdp
ZHRoOihsb25nKXdpZHRoCistICh2b2lkKXNldFdpZHRoOihpbnQpd2lkdGgKIHsKICAgICBET01T
dHJpbmcgc3RyaW5nKFFTdHJpbmc6Om51bWJlcih3aWR0aCkpOwogICAgIFtzZWxmIF9lbWJlZEVs
ZW1lbnRJbXBsXS0+c2V0QXR0cmlidXRlKHdpZHRoQXR0ciwgc3RyaW5nKTsKSW5kZXg6IFdlYkNv
cmUva3dxL0RPTVJhbmdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a3dxL0RPTVJhbmdlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMwpkaWZmIC1wIC11IC1yMS4z
IFdlYkNvcmUva3dxL0RPTVJhbmdlLmgKLS0tIFdlYkNvcmUva3dxL0RPTVJhbmdlLmgJMTMgTWF5
IDIwMDQgMjM6MjQ6MjQgLTAwMDAJMS4zCisrKyBXZWJDb3JlL2t3cS9ET01SYW5nZS5oCTIxIEF1
ZyAyMDA1IDA1OjI4OjQ3IC0wMDAwCkBAIC00NywxMyArNDcsMTMgQEAgZW51bSB7CiAKIEBpbnRl
cmZhY2UgRE9NUmFuZ2UgOiBET01PYmplY3QKIC0gKERPTU5vZGUgKilzdGFydENvbnRhaW5lcjsK
LS0gKGxvbmcpc3RhcnRPZmZzZXQ7CistIChpbnQpc3RhcnRPZmZzZXQ7CiAtIChET01Ob2RlICop
ZW5kQ29udGFpbmVyOwotLSAobG9uZyllbmRPZmZzZXQ7CistIChpbnQpZW5kT2Zmc2V0OwogLSAo
Qk9PTCljb2xsYXBzZWQ7CiAtIChET01Ob2RlICopY29tbW9uQW5jZXN0b3JDb250YWluZXI7Ci0t
ICh2b2lkKXNldFN0YXJ0OihET01Ob2RlICopcmVmTm9kZSA6KGxvbmcpb2Zmc2V0OwotLSAodm9p
ZClzZXRFbmQ6KERPTU5vZGUgKilyZWZOb2RlIDoobG9uZylvZmZzZXQ7CistICh2b2lkKXNldFN0
YXJ0OihET01Ob2RlICopcmVmTm9kZSA6KGludClvZmZzZXQ7CistICh2b2lkKXNldEVuZDooRE9N
Tm9kZSAqKXJlZk5vZGUgOihpbnQpb2Zmc2V0OwogLSAodm9pZClzZXRTdGFydEJlZm9yZTooRE9N
Tm9kZSAqKXJlZk5vZGU7CiAtICh2b2lkKXNldFN0YXJ0QWZ0ZXI6KERPTU5vZGUgKilyZWZOb2Rl
OwogLSAodm9pZClzZXRFbmRCZWZvcmU6KERPTU5vZGUgKilyZWZOb2RlOwpJbmRleDogV2ViQ29y
ZS9rd3EvRE9NU3R5bGVzaGVldHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9rd3EvRE9NU3R5bGVzaGVldHMuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYg
LXAgLXUgLXIxLjIgV2ViQ29yZS9rd3EvRE9NU3R5bGVzaGVldHMuaAotLS0gV2ViQ29yZS9rd3Ev
RE9NU3R5bGVzaGVldHMuaAkxMyBNYXkgMjAwNCAyMzoyNDoyNCAtMDAwMAkxLjIKKysrIFdlYkNv
cmUva3dxL0RPTVN0eWxlc2hlZXRzLmgJMjEgQXVnIDIwMDUgMDU6Mjg6NDcgLTAwMDAKQEAgLTQy
LDE1ICs0MiwxNSBAQCBleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBET01FdmVudEV4Y2VwdGlvCiBA
ZW5kCiAKIEBpbnRlcmZhY2UgRE9NU3R5bGVTaGVldExpc3QgOiBET01PYmplY3QKLS0gKHVuc2ln
bmVkIGxvbmcpbGVuZ3RoOwotLSAoRE9NU3R5bGVTaGVldCAqKWl0ZW06KHVuc2lnbmVkIGxvbmcp
aW5kZXg7CistICh1bnNpZ25lZClsZW5ndGg7CistIChET01TdHlsZVNoZWV0ICopaXRlbToodW5z
aWduZWQpaW5kZXg7CiBAZW5kCiAKIEBpbnRlcmZhY2UgRE9NTWVkaWFMaXN0IDogRE9NT2JqZWN0
CiAtIChOU1N0cmluZyAqKW1lZGlhVGV4dDsKIC0gKHZvaWQpc2V0TWVkaWFUZXh0OihOU1N0cmlu
ZyAqKW1lZGlhVGV4dDsKLS0gKHVuc2lnbmVkIGxvbmcpbGVuZ3RoOwotLSAoTlNTdHJpbmcgKilp
dGVtOih1bnNpZ25lZCBsb25nKWluZGV4OworLSAodW5zaWduZWQpbGVuZ3RoOworLSAoTlNTdHJp
bmcgKilpdGVtOih1bnNpZ25lZClpbmRleDsKIC0gKHZvaWQpZGVsZXRlTWVkaXVtOihOU1N0cmlu
ZyAqKW9sZE1lZGl1bTsKIC0gKHZvaWQpYXBwZW5kTWVkaXVtOihOU1N0cmluZyAqKW5ld01lZGl1
bTsKIEBlbmQKSW5kZXg6IFdlYkNvcmUva3dxL0RPTVRyYXZlcnNhbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9ET01UcmF2ZXJzYWwuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4zCmRpZmYgLXAgLXUgLXIxLjMgV2ViQ29yZS9rd3EvRE9NVHJhdmVyc2FsLmgK
LS0tIFdlYkNvcmUva3dxL0RPTVRyYXZlcnNhbC5oCTEzIE1heSAyMDA0IDIzOjI0OjI0IC0wMDAw
CTEuMworKysgV2ViQ29yZS9rd3EvRE9NVHJhdmVyc2FsLmgJMjEgQXVnIDIwMDUgMDU6Mjg6NDcg
LTAwMDAKQEAgLTYwLDcgKzYwLDcgQEAgZW51bSB7CiAgICAgaWQgPERPTU5vZGVGaWx0ZXI+IG1f
ZmlsdGVyOwogfQogLSAoRE9NTm9kZSAqKXJvb3Q7Ci0tICh1bnNpZ25lZCBsb25nKXdoYXRUb1No
b3c7CistICh1bnNpZ25lZCl3aGF0VG9TaG93OwogLSAoaWQgPERPTU5vZGVGaWx0ZXI+KWZpbHRl
cjsKIC0gKEJPT0wpZXhwYW5kRW50aXR5UmVmZXJlbmNlczsKIC0gKERPTU5vZGUgKiluZXh0Tm9k
ZTsKQEAgLTczLDcgKzczLDcgQEAgZW51bSB7CiAgICAgaWQgPERPTU5vZGVGaWx0ZXI+IG1fZmls
dGVyOwogfQogLSAoRE9NTm9kZSAqKXJvb3Q7Ci0tICh1bnNpZ25lZCBsb25nKXdoYXRUb1Nob3c7
CistICh1bnNpZ25lZCl3aGF0VG9TaG93OwogLSAoaWQgPERPTU5vZGVGaWx0ZXI+KWZpbHRlcjsK
IC0gKEJPT0wpZXhwYW5kRW50aXR5UmVmZXJlbmNlczsKIC0gKERPTU5vZGUgKiljdXJyZW50Tm9k
ZTsKQEAgLTg4LDYgKzg4LDYgQEAgZW51bSB7CiBAZW5kCiAKIEBpbnRlcmZhY2UgRE9NRG9jdW1l
bnQgKERPTURvY3VtZW50VHJhdmVyc2FsKQotLSAoRE9NTm9kZUl0ZXJhdG9yICopY3JlYXRlTm9k
ZUl0ZXJhdG9yOihET01Ob2RlICopcm9vdCA6KHVuc2lnbmVkIGxvbmcpd2hhdFRvU2hvdyA6KGlk
IDxET01Ob2RlRmlsdGVyPilmaWx0ZXIgOihCT09MKWV4cGFuZEVudGl0eVJlZmVyZW5jZXM7Ci0t
IChET01UcmVlV2Fsa2VyICopY3JlYXRlVHJlZVdhbGtlcjooRE9NTm9kZSAqKXJvb3QgOih1bnNp
Z25lZCBsb25nKXdoYXRUb1Nob3cgOihpZCA8RE9NTm9kZUZpbHRlcj4pZmlsdGVyIDooQk9PTCll
eHBhbmRFbnRpdHlSZWZlcmVuY2VzOworLSAoRE9NTm9kZUl0ZXJhdG9yICopY3JlYXRlTm9kZUl0
ZXJhdG9yOihET01Ob2RlICopcm9vdCA6KHVuc2lnbmVkKXdoYXRUb1Nob3cgOihpZCA8RE9NTm9k
ZUZpbHRlcj4pZmlsdGVyIDooQk9PTClleHBhbmRFbnRpdHlSZWZlcmVuY2VzOworLSAoRE9NVHJl
ZVdhbGtlciAqKWNyZWF0ZVRyZWVXYWxrZXI6KERPTU5vZGUgKilyb290IDoodW5zaWduZWQpd2hh
dFRvU2hvdyA6KGlkIDxET01Ob2RlRmlsdGVyPilmaWx0ZXIgOihCT09MKWV4cGFuZEVudGl0eVJl
ZmVyZW5jZXM7CiBAZW5kCkluZGV4OiBXZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUtIVE1MUGFydC5tbSx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS42NjEKZGlmZiAtcCAtdSAtcjEuNjYxIFdlYkNvcmUva3dxL0tX
UUtIVE1MUGFydC5tbQotLS0gV2ViQ29yZS9rd3EvS1dRS0hUTUxQYXJ0Lm1tCTE3IEF1ZyAyMDA1
IDIwOjEyOjE1IC0wMDAwCTEuNjYxCisrKyBXZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQubW0JMjEg
QXVnIDIwMDUgMDU6Mjg6NTEgLTAwMDAKQEAgLTk5OCwxMiArOTk4LDEyIEBAIFFTdHJpbmcgS1dR
S0hUTUxQYXJ0OjphZHZhbmNlVG9OZXh0TWlzc3AKICAgICAvLyB3ZSBkb24ndCBnZXQgZm9pbGVk
IGJ5IGFueSB3b3JkIGJvdW5kYXJ5IHByb2JsZW1zIGF0IHRoZSBzdGFydC4gIEl0IG1lYW5zIHdl
IG1pZ2h0CiAgICAgLy8gZG8gYSB0aW55IGJpdCBtb3JlIHNlYXJjaGluZy4KICAgICBOb2RlSW1w
bCAqc2VhcmNoRW5kQWZ0ZXJXcmFwTm9kZSA9IGl0LnJhbmdlKCktPmVuZENvbnRhaW5lcihleGNl
cHRpb24pOwotICAgIGxvbmcgc2VhcmNoRW5kQWZ0ZXJXcmFwT2Zmc2V0ID0gaXQucmFuZ2UoKS0+
ZW5kT2Zmc2V0KGV4Y2VwdGlvbik7CisgICAgaW50IHNlYXJjaEVuZEFmdGVyV3JhcE9mZnNldCA9
IGl0LnJhbmdlKCktPmVuZE9mZnNldChleGNlcHRpb24pOwogCiAgICAgd2hpbGUgKDEpIHsKICAg
ICAgICAgaWYgKCFpdC5hdEVuZCgpKSB7ICAgICAgLy8gd2UgbWF5IGJlIHN0YXJ0aW5nIGF0IHRo
ZSBlbmQgb2YgdGhlIGRvYywgYW5kIGFscmVhZHkgYnkgYXRFbmQKICAgICAgICAgICAgIGNvbnN0
IFFDaGFyICpjaGFycyA9IGl0LmNoYXJhY3RlcnMoKTsKLSAgICAgICAgICAgIGxvbmcgbGVuID0g
aXQubGVuZ3RoKCk7CisgICAgICAgICAgICBpbnQgbGVuID0gaXQubGVuZ3RoKCk7CiAgICAgICAg
ICAgICBpZiAobGVuID4gMSB8fCAhY2hhcnNbMF0uaXNTcGFjZSgpKSB7CiAgICAgICAgICAgICAg
ICAgTlNTdHJpbmcgKmNodW5rID0gW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDaGFyYWN0ZXJz
Tm9Db3B5Oih1bmljaGFyICopY2hhcnMgbGVuZ3RoOmxlbiBmcmVlV2hlbkRvbmU6Tk9dOwogICAg
ICAgICAgICAgICAgIE5TUmFuZ2UgbWlzc3BlbGxpbmcgPSBbY2hlY2tlciBjaGVja1NwZWxsaW5n
T2ZTdHJpbmc6Y2h1bmsgc3RhcnRpbmdBdDowIGxhbmd1YWdlOm5pbCB3cmFwOk5PIGluU3BlbGxE
b2N1bWVudFdpdGhUYWc6W19icmlkZ2Ugc3BlbGxDaGVja2VyRG9jdW1lbnRUYWddIHdvcmRDb3Vu
dDpOVUxMXTsKQEAgLTE1ODgsNyArMTU4OCw3IEBAIHZvaWQgS1dRS0hUTUxQYXJ0OjpvcGVuVVJM
RnJvbVBhZ2VDYWNoZSgKICAgICAvLyBjb3B5IHRvIG1fd29ya2luZ1VSTCBhZnRlciBmaXhpbmcg
bV91cmwgYWJvdmUKICAgICBkLT5tX3dvcmtpbmdVUkwgPSBtX3VybDsKICAgICAgICAgCi0gICAg
ZW1pdCBzdGFydGVkKCAwTCApOworICAgIGVtaXQgc3RhcnRlZChOVUxMKTsKICAgICAKICAgICAv
LyAtLS0tLS0tLS0tLWJlZ2luLS0tLS0tLS0tLS0KICAgICBjbGVhcigpOwpAQCAtMTU5Niw3ICsx
NTk2LDYgQEAgdm9pZCBLV1FLSFRNTFBhcnQ6Om9wZW5VUkxGcm9tUGFnZUNhY2hlKAogICAgIGRv
Yy0+c2V0SW5QYWdlQ2FjaGUoTk8pOwogCiAgICAgZC0+bV9iQ2xlYXJlZCA9IGZhbHNlOwotICAg
IGQtPm1fY2FjaGVJZCA9IDA7CiAgICAgZC0+bV9iQ29tcGxldGUgPSBmYWxzZTsKICAgICBkLT5t
X2JMb2FkRXZlbnRFbWl0dGVkID0gZmFsc2U7CiAgICAgZC0+bV9yZWZlcnJlciA9IG1fdXJsLnVy
bCgpOwpAQCAtNDAzNSw3ICs0MDM0LDcgQEAgdm9pZCBLV1FLSFRNTFBhcnQ6Om1hcmtNaXNzcGVs
bGluZ3MoY29ucwogICAgIAogICAgIHdoaWxlICghaXQuYXRFbmQoKSkgeyAgICAgIC8vIHdlIG1h
eSBiZSBzdGFydGluZyBhdCB0aGUgZW5kIG9mIHRoZSBkb2MsIGFuZCBhbHJlYWR5IGJ5IGF0RW5k
CiAgICAgICAgIGNvbnN0IFFDaGFyICpjaGFycyA9IGl0LmNoYXJhY3RlcnMoKTsKLSAgICAgICAg
bG9uZyBsZW4gPSBpdC5sZW5ndGgoKTsKKyAgICAgICAgaW50IGxlbiA9IGl0Lmxlbmd0aCgpOwog
ICAgICAgICBpZiAobGVuID4gMSB8fCAhY2hhcnNbMF0uaXNTcGFjZSgpKSB7CiAgICAgICAgICAg
ICBOU1N0cmluZyAqY2h1bmsgPSBbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aENoYXJhY3RlcnNO
b0NvcHk6KHVuaWNoYXIgKiljaGFycyBsZW5ndGg6bGVuIGZyZWVXaGVuRG9uZTpOT107CiAgICAg
ICAgICAgICBpbnQgc3RhcnRJbmRleCA9IDA7CkluZGV4OiBXZWJDb3JlL2t3cS9LV1FTdHJpbmcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRU3RyaW5nLmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTE0CmRpZmYgLXAgLXUgLXIxLjExNCBXZWJDb3JlL2t3
cS9LV1FTdHJpbmcuaAotLS0gV2ViQ29yZS9rd3EvS1dRU3RyaW5nLmgJMTYgQXVnIDIwMDUgMTk6
MDM6MTkgLTAwMDAJMS4xMTQKKysrIFdlYkNvcmUva3dxL0tXUVN0cmluZy5oCTIxIEF1ZyAyMDA1
IDA1OjI4OjUxIC0wMDAwCkBAIC00NzMsMTkgKzQ3MywxMSBAQCBwdWJsaWM6CiAKICAgICBib29s
IGVuZHNXaXRoKGNvbnN0IFFTdHJpbmcgJikgY29uc3Q7CiAKLSAgICAvLyBOT1RFOiB0b1hYWFhY
IGludGVnZXIgZnVuY3Rpb25zIG9ubHkgc3VwcG9ydCBiYXNlIDEwIGFuZCBiYXNlIDE2Ci0gICAg
Ly8gTk9URTogdG9TaG9ydCwgdG9VU2hvcnQsIHRvVUxvbmcsIGFuZCB0b0RvdWJsZSBhcmUgTk9U
IHVzZWQgYnV0IGFyZSBrZXB0Ci0gICAgLy8gZm9yIGNvbXBsZXRlbmVzcwotICAgIHNob3J0IHRv
U2hvcnQoYm9vbCAqb2s9TlVMTCwgaW50IGJhc2U9MTApIGNvbnN0OwotICAgIC8vIE5PVEU6IG9r
IGFuZCBiYXNlIE5PVCB1c2VkIGZvciB0b1VTaG9ydAotICAgIHVzaG9ydCB0b1VTaG9ydChib29s
ICpvaz1OVUxMLCBpbnQgYmFzZT0xMCkgY29uc3Q7Ci0gICAgaW50IHRvSW50KGJvb2wgKm9rPU5V
TEwsIGludCBiYXNlPTEwKSBjb25zdDsKLSAgICAvLyBOT1RFOiBiYXNlIE5PVCB1c2VkIGZvciB0
b1VJbnQKLSAgICB1aW50IHRvVUludChib29sICpvaz1OVUxMLCBpbnQgYmFzZT0xMCkgY29uc3Q7
Ci0gICAgbG9uZyB0b0xvbmcoYm9vbCAqb2s9TlVMTCwgaW50IGJhc2U9MTApIGNvbnN0OwotICAg
IHVsb25nIHRvVUxvbmcoYm9vbCAqb2s9TlVMTCwgaW50IGJhc2U9MTApIGNvbnN0OwotICAgIGZs
b2F0IHRvRmxvYXQoYm9vbCAqb2s9TlVMTCkgY29uc3Q7Ci0gICAgZG91YmxlIHRvRG91YmxlKGJv
b2wgKm9rPU5VTEwpIGNvbnN0OworICAgIHNob3J0IHRvU2hvcnQoYm9vbCAqb2sgPSBOVUxMLCBp
bnQgYmFzZSA9IDEwKSBjb25zdDsKKyAgICB1c2hvcnQgdG9VU2hvcnQoYm9vbCAqb2sgPSBOVUxM
LCBpbnQgYmFzZSA9IDEwKSBjb25zdDsKKyAgICBpbnQgdG9JbnQoYm9vbCAqb2sgPSBOVUxMLCBp
bnQgYmFzZSA9IDEwKSBjb25zdDsKKyAgICB1aW50IHRvVUludChib29sICpvayA9IE5VTEwsIGlu
dCBiYXNlID0gMTApIGNvbnN0OworICAgIGRvdWJsZSB0b0RvdWJsZShib29sICpvayA9IE5VTEwp
IGNvbnN0OwogCiAgICAgc3RhdGljIFFTdHJpbmcgbnVtYmVyKGludCk7CiAgICAgc3RhdGljIFFT
dHJpbmcgbnVtYmVyKHVpbnQpOwpAQCAtNjUzLDExICs2NDUsNiBAQCBpbmxpbmUgY29uc3QgY2hh
ciAqUVN0cmluZzo6YXNjaWkoKSBjb25zCiAgICAgcmV0dXJuIGxhdGluMSgpOwogfQogCi1pbmxp
bmUgZmxvYXQgUVN0cmluZzo6dG9GbG9hdChib29sICpvaykgY29uc3QKLXsKLSAgICByZXR1cm4g
dG9Eb3VibGUob2spOwotfQotCiBpbmxpbmUgYm9vbCBRU3RyaW5nOjpvcGVyYXRvciEoKSBjb25z
dAogewogICAgIHJldHVybiBpc051bGwoKTsKSW5kZXg6IFdlYkNvcmUva3dxL0tXUVN0cmluZy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRU3RyaW5nLm1t
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEzOQpkaWZmIC1wIC11IC1yMS4xMzkgV2ViQ29yZS9r
d3EvS1dRU3RyaW5nLm1tCi0tLSBXZWJDb3JlL2t3cS9LV1FTdHJpbmcubW0JMjggSnVuIDIwMDUg
MDE6NTQ6MzUgLTAwMDAJMS4xMzkKKysrIFdlYkNvcmUva3dxL0tXUVN0cmluZy5tbQkyMSBBdWcg
MjAwNSAwNToyODo1MyAtMDAwMApAQCAtMTYyOCw0MyArMTYyOCwzNiBAQCB2b2lkIFFTdHJpbmc6
OmNvcHlMYXRpbjEoY2hhciAqYnVmZmVyLCB1CiAgICAgICAgICpidWZmZXIrKyA9ICp1YysrOwog
fQogCi0KIHNob3J0IFFTdHJpbmc6OnRvU2hvcnQoYm9vbCAqb2ssIGludCBiYXNlKSBjb25zdAog
ewotICAgIGxvbmcgdiA9IHRvTG9uZyggb2ssIGJhc2UgKTsKLSAgICBpZiAoIG9rICYmICpvayAm
JiAodiA8IC0zMjc2OCB8fCB2ID4gMzI3NjcpICkgewotCSpvayA9IEZBTFNFOwotCXYgPSAwOwor
ICAgIGludCB2ID0gdG9JbnQob2ssIGJhc2UpOworICAgIHNob3J0IHN2ID0gdjsKKyAgICBpZiAo
c3YgIT0gdikgeworICAgICAgICBpZiAob2spCisgICAgICAgICAgICAqb2sgPSBGQUxTRTsKKyAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIHJldHVybiAoc2hvcnQpdjsKKyAgICByZXR1cm4g
c3Y7CiB9CiAKIHVzaG9ydCBRU3RyaW5nOjp0b1VTaG9ydChib29sICpvaywgaW50IGJhc2UpIGNv
bnN0CiB7Ci0gICAgdWxvbmcgdiA9IHRvVUxvbmcoIG9rLCBiYXNlICk7Ci0gICAgaWYgKCBvayAm
JiAqb2sgJiYgKHYgPiA2NTUzNSkgKSB7Ci0JKm9rID0gRkFMU0U7Ci0JdiA9IDA7CisgICAgdWlu
dCB2ID0gdG9VSW50KG9rLCBiYXNlKTsKKyAgICB1c2hvcnQgc3YgPSB2OworICAgIGlmIChzdiAh
PSB2KSB7CisgICAgICAgIGlmIChvaykKKyAgICAgICAgICAgICpvayA9IEZBTFNFOworICAgICAg
ICByZXR1cm4gMDsKICAgICB9Ci0gICAgcmV0dXJuICh1c2hvcnQpdjsKKyAgICByZXR1cm4gc3Y7
CiB9CiAKIGludCBRU3RyaW5nOjp0b0ludChib29sICpvaywgaW50IGJhc2UpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIChpbnQpdG9Mb25nKCBvaywgYmFzZSApOwotfQotCi11aW50IFFTdHJpbmc6OnRv
VUludChib29sICpvaywgaW50IGJhc2UpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICh1aW50KXRvVUxv
bmcoIG9rLCBiYXNlICk7Ci19Ci0KLWxvbmcgUVN0cmluZzo6dG9Mb25nKGJvb2wgKm9rLCBpbnQg
YmFzZSkgY29uc3QKLXsKICAgICBjb25zdCBRQ2hhciAqcCA9IHVuaWNvZGUoKTsKLSAgICBsb25n
IHZhbD0wOworICAgIGludCB2YWw9MDsKICAgICBpbnQgbCA9IGRhdGFIYW5kbGVbMF0tPl9sZW5n
dGg7Ci0gICAgY29uc3QgbG9uZyBtYXhfbXVsdCA9IExPTkdfTUFYIC8gYmFzZTsKKyAgICBjb25z
dCBpbnQgbWF4X211bHQgPSBJTlRfTUFYIC8gYmFzZTsKICAgICBib29sIGlzX29rID0gRkFMU0U7
CiAgICAgaW50IG5lZyA9IDA7CiAgICAgaWYgKCAhcCApCkBAIC0xNjgwLDcgKzE2NzMsNyBAQCBs
b25nIFFTdHJpbmc6OnRvTG9uZyhib29sICpvaywgaW50IGJhc2UpCiAJcCsrOwogICAgIH0KIAot
ICAgIC8vIE5PVEU6IHRvVUxvbmcoKSBjb2RlIGlzIHNpbWlsYXIKKyAgICAvLyBOT1RFOiB0b1VJ
bnQoKSBjb2RlIGlzIHNpbWlsYXIKICAgICBpZiAoICFsIHx8ICFva19pbl9iYXNlKCpwLGJhc2Up
ICkKIAlnb3RvIGJ5ZTsKICAgICB3aGlsZSAoIGwgJiYgb2tfaW5fYmFzZSgqcCxiYXNlKSApIHsK
QEAgLTE2OTUsNyArMTY4OCw3IEBAIGxvbmcgUVN0cmluZzo6dG9Mb25nKGJvb2wgKm9rLCBpbnQg
YmFzZSkKIAkgICAgZWxzZQogCQlkdiA9IGMgLSAnQScgKyAxMDsKIAl9Ci0JaWYgKCB2YWwgPiBt
YXhfbXVsdCB8fCAodmFsID09IG1heF9tdWx0ICYmIGR2ID4gKExPTkdfTUFYICUgYmFzZSkrbmVn
KSApCisJaWYgKCB2YWwgPiBtYXhfbXVsdCB8fCAodmFsID09IG1heF9tdWx0ICYmIGR2ID4gKElO
VF9NQVggJSBiYXNlKStuZWcpICkKIAkgICAgZ290byBieWU7CiAJdmFsID0gYmFzZSp2YWwgKyBk
djsKIAlwKys7CkBAIC0xNzEyLDEyICsxNzA1LDEyIEBAIGJ5ZToKICAgICByZXR1cm4gaXNfb2sg
PyB2YWwgOiAwOwogfQogCi11bG9uZyBRU3RyaW5nOjp0b1VMb25nKGJvb2wgKm9rLCBpbnQgYmFz
ZSkgY29uc3QKK3VpbnQgUVN0cmluZzo6dG9VSW50KGJvb2wgKm9rLCBpbnQgYmFzZSkgY29uc3QK
IHsKICAgICBjb25zdCBRQ2hhciAqcCA9IHVuaWNvZGUoKTsKLSAgICB1bG9uZyB2YWw9MDsKKyAg
ICB1aW50IHZhbD0wOwogICAgIGludCBsID0gZGF0YUhhbmRsZVswXS0+X2xlbmd0aDsKLSAgICBj
b25zdCB1bG9uZyBtYXhfbXVsdCA9IFVMT05HX01BWCAvIGJhc2U7CisgICAgY29uc3QgdWludCBt
YXhfbXVsdCA9IFVJTlRfTUFYIC8gYmFzZTsKICAgICBib29sIGlzX29rID0gRkFMU0U7CiAgICAg
aWYgKCAhcCApCiAJZ290byBieWU7CkBAIC0xNzI2LDcgKzE3MTksNyBAQCB1bG9uZyBRU3RyaW5n
Ojp0b1VMb25nKGJvb2wgKm9rLCBpbnQgYmFzCiAgICAgaWYgKCAqcCA9PSAnKycgKQogCWwtLSxw
Kys7CiAKLSAgICAvLyBOT1RFOiB0b0xvbmcoKSBjb2RlIGlzIHNpbWlsYXIKKyAgICAvLyBOT1RF
OiB0b0ludCgpIGNvZGUgaXMgc2ltaWxhcgogICAgIGlmICggIWwgfHwgIW9rX2luX2Jhc2UoKnAs
YmFzZSkgKQogCWdvdG8gYnllOwogICAgIHdoaWxlICggbCAmJiBva19pbl9iYXNlKCpwLGJhc2Up
ICkgewpAQCAtMTc0MSw3ICsxNzM0LDcgQEAgdWxvbmcgUVN0cmluZzo6dG9VTG9uZyhib29sICpv
aywgaW50IGJhcwogCSAgICBlbHNlCiAJCWR2ID0gYyAtICdBJyArIDEwOwogCX0KLQlpZiAoIHZh
bCA+IG1heF9tdWx0IHx8ICh2YWwgPT0gbWF4X211bHQgJiYgZHYgPiAoVUxPTkdfTUFYICUgYmFz
ZSkpICkKKwlpZiAoIHZhbCA+IG1heF9tdWx0IHx8ICh2YWwgPT0gbWF4X211bHQgJiYgZHYgPiAo
VUlOVF9NQVggJSBiYXNlKSkgKQogCSAgICBnb3RvIGJ5ZTsKIAl2YWwgPSBiYXNlKnZhbCArIGR2
OwogCXArKzsKSW5kZXg6IFdlYkNvcmUva3dxL0tXUVRleHRFZGl0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUVRleHRFZGl0LmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMjUKZGlmZiAtcCAtdSAtcjEuMjUgV2ViQ29yZS9rd3EvS1dRVGV4dEVkaXQuaAot
LS0gV2ViQ29yZS9rd3EvS1dRVGV4dEVkaXQuaAkyNCBKdW4gMjAwNSAwNTo1MzoyOSAtMDAwMAkx
LjI1CisrKyBXZWJDb3JlL2t3cS9LV1FUZXh0RWRpdC5oCTIxIEF1ZyAyMDA1IDA1OjI4OjUzIC0w
MDAwCkBAIC03NSwxMyArNzUsMTMgQEAgY2xhc3MgUVRleHRFZGl0IDogcHVibGljIFFTY3JvbGxW
aWV3CiAKICAgICB2b2lkIHNldFdyaXRpbmdEaXJlY3Rpb24oUVBhaW50ZXI6OlRleHREaXJlY3Rp
b24pOwogCi0gICAgbG9uZyBzZWxlY3Rpb25TdGFydCgpOwotICAgIGxvbmcgc2VsZWN0aW9uRW5k
KCk7Ci0gICAgdm9pZCBzZXRTZWxlY3Rpb25TdGFydChsb25nKTsKLSAgICB2b2lkIHNldFNlbGVj
dGlvbkVuZChsb25nKTsKKyAgICBpbnQgc2VsZWN0aW9uU3RhcnQoKTsKKyAgICBpbnQgc2VsZWN0
aW9uRW5kKCk7CisgICAgdm9pZCBzZXRTZWxlY3Rpb25TdGFydChpbnQpOworICAgIHZvaWQgc2V0
U2VsZWN0aW9uRW5kKGludCk7CiAgICAgCiAgICAgdm9pZCBzZWxlY3RBbGwoKTsKLSAgICB2b2lk
IHNldFNlbGVjdGlvblJhbmdlKGxvbmcsIGxvbmcpOworICAgIHZvaWQgc2V0U2VsZWN0aW9uUmFu
Z2UoaW50LCBpbnQpOwogCiAgICAgUVNpemUgc2l6ZVdpdGhDb2x1bW5zQW5kUm93cyhpbnQgbnVt
Q29sdW1ucywgaW50IG51bVJvd3MpIGNvbnN0OwogCkluZGV4OiBXZWJDb3JlL2t3cS9LV1FUZXh0
RWRpdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRVGV4
dEVkaXQubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDkKZGlmZiAtcCAtdSAtcjEuNDkgV2Vi
Q29yZS9rd3EvS1dRVGV4dEVkaXQubW0KLS0tIFdlYkNvcmUva3dxL0tXUVRleHRFZGl0Lm1tCTE2
IEF1ZyAyMDA1IDE5OjAzOjE5IC0wMDAwCTEuNDkKKysrIFdlYkNvcmUva3dxL0tXUVRleHRFZGl0
Lm1tCTIxIEF1ZyAyMDA1IDA1OjI4OjUzIC0wMDAwCkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBR
VGV4dEVkaXQ6OnNldERpc2FibGVkKGJvb2wgZmxhZykKICAgICBLV1FfVU5CTE9DS19FWENFUFRJ
T05TOwogfQogCi1sb25nIFFUZXh0RWRpdDo6c2VsZWN0aW9uU3RhcnQoKQoraW50IFFUZXh0RWRp
dDo6c2VsZWN0aW9uU3RhcnQoKQogewogICAgIEtXUVRleHRBcmVhICp0ZXh0VmlldyA9IChLV1FU
ZXh0QXJlYSAqKWdldFZpZXcoKTsKICAgICAKQEAgLTE5Miw3ICsxOTIsNyBAQCBsb25nIFFUZXh0
RWRpdDo6c2VsZWN0aW9uU3RhcnQoKQogICAgIHJldHVybiAwOwogfQogCi1sb25nIFFUZXh0RWRp
dDo6c2VsZWN0aW9uRW5kKCkKK2ludCBRVGV4dEVkaXQ6OnNlbGVjdGlvbkVuZCgpCiB7CiAgICAg
S1dRVGV4dEFyZWEgKnRleHRWaWV3ID0gKEtXUVRleHRBcmVhICopZ2V0VmlldygpOwogICAgIApA
QCAtMjA2LDcgKzIwNiw3IEBAIGxvbmcgUVRleHRFZGl0OjpzZWxlY3Rpb25FbmQoKQogICAgIHJl
dHVybiAwOwogfQogCi12b2lkIFFUZXh0RWRpdDo6c2V0U2VsZWN0aW9uU3RhcnQobG9uZyBzdGFy
dCkKK3ZvaWQgUVRleHRFZGl0OjpzZXRTZWxlY3Rpb25TdGFydChpbnQgc3RhcnQpCiB7CiAgICAg
S1dRVGV4dEFyZWEgKnRleHRWaWV3ID0gKEtXUVRleHRBcmVhICopZ2V0VmlldygpOwogICAgIApA
QCAtMjE4LDggKzIxOCw4IEBAIHZvaWQgUVRleHRFZGl0OjpzZXRTZWxlY3Rpb25TdGFydChsb25n
IHMKICAgICB9CiAgICAgCiAgICAgLy8gY29lcmNlIHN0YXJ0IHRvIGEgdmFsaWQgdmFsdWUKLSAg
ICBsb25nIG1heExlbmd0aCA9IFtbdGV4dFZpZXcgdGV4dF0gbGVuZ3RoXTsKLSAgICBsb25nIG5l
d1N0YXJ0ID0gc3RhcnQ7CisgICAgaW50IG1heExlbmd0aCA9IFtbdGV4dFZpZXcgdGV4dF0gbGVu
Z3RoXTsKKyAgICBpbnQgbmV3U3RhcnQgPSBzdGFydDsKICAgICBpZiAobmV3U3RhcnQgPCAwKQog
ICAgICAgICBuZXdTdGFydCA9IDA7CiAgICAgaWYgKG5ld1N0YXJ0ID4gbWF4TGVuZ3RoKQpAQCAt
MjM5LDcgKzIzOSw3IEBAIHZvaWQgUVRleHRFZGl0OjpzZXRTZWxlY3Rpb25TdGFydChsb25nIHMK
ICAgICBLV1FfVU5CTE9DS19FWENFUFRJT05TOwogfQogCi12b2lkIFFUZXh0RWRpdDo6c2V0U2Vs
ZWN0aW9uRW5kKGxvbmcgZW5kKQordm9pZCBRVGV4dEVkaXQ6OnNldFNlbGVjdGlvbkVuZChpbnQg
ZW5kKQogewogICAgIEtXUVRleHRBcmVhICp0ZXh0VmlldyA9IChLV1FUZXh0QXJlYSAqKWdldFZp
ZXcoKTsKICAgICAKQEAgLTI1MSw4ICsyNTEsOCBAQCB2b2lkIFFUZXh0RWRpdDo6c2V0U2VsZWN0
aW9uRW5kKGxvbmcgZW5kCiAgICAgfQogICAgIAogICAgIC8vIGNvZXJjZSBlbmQgdG8gYSB2YWxp
ZCB2YWx1ZQotICAgIGxvbmcgbWF4TGVuZ3RoID0gW1t0ZXh0VmlldyB0ZXh0XSBsZW5ndGhdOwot
ICAgIGxvbmcgbmV3RW5kID0gZW5kOworICAgIGludCBtYXhMZW5ndGggPSBbW3RleHRWaWV3IHRl
eHRdIGxlbmd0aF07CisgICAgaW50IG5ld0VuZCA9IGVuZDsKICAgICBpZiAobmV3RW5kIDwgMCkK
ICAgICAgICAgbmV3RW5kID0gMDsKICAgICBpZiAobmV3RW5kID4gbWF4TGVuZ3RoKQpAQCAtMjkx
LDEzICsyOTEsMTMgQEAgdm9pZCBRVGV4dEVkaXQ6OnNlbGVjdEFsbCgpCiAgICAgS1dRX1VOQkxP
Q0tfRVhDRVBUSU9OUzsKIH0KIAotdm9pZCBRVGV4dEVkaXQ6OnNldFNlbGVjdGlvblJhbmdlKGxv
bmcgc3RhcnQsIGxvbmcgbGVuZ3RoKQordm9pZCBRVGV4dEVkaXQ6OnNldFNlbGVjdGlvblJhbmdl
KGludCBzdGFydCwgaW50IGxlbmd0aCkKIHsKICAgICBLV1FUZXh0QXJlYSAqdGV4dFZpZXcgPSAo
S1dRVGV4dEFyZWEgKilnZXRWaWV3KCk7CiAKICAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUzsKLSAg
ICBsb25nIG5ld1N0YXJ0ID0gc3RhcnQ7Ci0gICAgbG9uZyBuZXdMZW5ndGggPSBsZW5ndGg7Cisg
ICAgaW50IG5ld1N0YXJ0ID0gc3RhcnQ7CisgICAgaW50IG5ld0xlbmd0aCA9IGxlbmd0aDsKICAg
ICBpZiAobmV3U3RhcnQgPCAwKSB7CiAgICAgICAgIC8vIHRydW5jYXRlIHRoZSBsZW5ndGggYnkg
dGhlIG5lZ2F0aXZlIHN0YXJ0CiAgICAgICAgIG5ld0xlbmd0aCA9IGxlbmd0aCArIG5ld1N0YXJ0
OwpJbmRleDogV2ViQ29yZS9rd3EvV2ViQ29yZUJyaWRnZS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvV2ViQ29yZUJyaWRnZS5tbSx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS40MDgKZGlmZiAtcCAtdSAtcjEuNDA4IFdlYkNvcmUva3dxL1dlYkNvcmVCcmlkZ2Uu
bW0KLS0tIFdlYkNvcmUva3dxL1dlYkNvcmVCcmlkZ2UubW0JOCBBdWcgMjAwNSAwNDowNzo0NiAt
MDAwMAkxLjQwOAorKysgV2ViQ29yZS9rd3EvV2ViQ29yZUJyaWRnZS5tbQkyMSBBdWcgMjAwNSAw
NToyODo1NSAtMDAwMApAQCAtMTYyNSwxMCArMTYyNSwxMCBAQCBzdGF0aWMgSFRNTEZvcm1FbGVt
ZW50SW1wbCAqZm9ybUVsZW1lbnRGCiAgICAgaW50IGV4Y2VwdGlvbiA9IDA7CiAKICAgICBmcm9t
U3RhcnRSYW5nZS0+c2V0RW5kKHJhbmdlLT5zdGFydENvbnRhaW5lcihleGNlcHRpb24pLCByYW5n
ZS0+c3RhcnRPZmZzZXQoZXhjZXB0aW9uKSwgZXhjZXB0aW9uKTsKLSAgICBsb25nIHN0YXJ0UG9z
aXRpb24gPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKGZyb21TdGFydFJhbmdlLmdldCgpKTsK
KyAgICBpbnQgc3RhcnRQb3NpdGlvbiA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoZnJvbVN0
YXJ0UmFuZ2UuZ2V0KCkpOwogCiAgICAgZnJvbVN0YXJ0UmFuZ2UtPnNldEVuZChyYW5nZS0+ZW5k
Q29udGFpbmVyKGV4Y2VwdGlvbiksIHJhbmdlLT5lbmRPZmZzZXQoZXhjZXB0aW9uKSwgZXhjZXB0
aW9uKTsKLSAgICBsb25nIGVuZFBvc2l0aW9uID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChm
cm9tU3RhcnRSYW5nZS5nZXQoKSk7CisgICAgaW50IGVuZFBvc2l0aW9uID0gVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aChmcm9tU3RhcnRSYW5nZS5nZXQoKSk7CiAKICAgICByZXR1cm4gTlNNYWtl
UmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24gLSBzdGFydFBvc2l0aW9uKTsKIH0KSW5k
ZXg6IFdlYktpdC9QbHVnaW5zLnN1YnByb2ovbnBhcGkubQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViS2l0L1BsdWdpbnMuc3VicHJvai9ucGFwaS5tLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjE3CmRpZmYgLXAgLXUgLXIxLjE3IFdlYktpdC9QbHVnaW5zLnN1YnByb2ovbnBhcGku
bQotLS0gV2ViS2l0L1BsdWdpbnMuc3VicHJvai9ucGFwaS5tCTUgSnVuIDIwMDUgMTc6NTQ6MzUg
LTAwMDAJMS4xNworKysgV2ViS2l0L1BsdWdpbnMuc3VicHJvai9ucGFwaS5tCTIxIEF1ZyAyMDA1
IDA1OjI5OjUyIC0wMDAwCkBAIC0zNSw3ICszNSw3IEBAIFdlYkJhc2VOZXRzY2FwZVBsdWdpblZp
ZXcgKnBsdWdpblZpZXdGb3IKIAogLy8gZ2VuZXJhbCBwbHVnLWluIHRvIGJyb3dzZXIgZnVuY3Rp
b25zCiAKLXZvaWQqIE5QTl9NZW1BbGxvYyhVSW50MzIgc2l6ZSkKK3ZvaWQqIE5QTl9NZW1BbGxv
Yyh1aW50MzIgc2l6ZSkKIHsKICAgICAvL0xPRyhQbHVnaW5zLCAiTlBOX01lbUFsbG9jIik7CiAg
ICAgcmV0dXJuIG1hbGxvYyhzaXplKTsKQEAgLTQ3LDcgKzQ3LDcgQEAgdm9pZCBOUE5fTWVtRnJl
ZSh2b2lkKiBwdHIpCiAgICAgZnJlZShwdHIpOwogfQogCi1VSW50MzIgTlBOX01lbUZsdXNoKFVJ
bnQzMiBzaXplKQordWludDMyIE5QTl9NZW1GbHVzaCh1aW50MzIgc2l6ZSkKIHsKICAgICBMT0co
UGx1Z2lucywgIk5QTl9NZW1GbHVzaCIpOwogICAgIHJldHVybiBzaXplOwpAQCAtODgsMTIgKzg4
LDEyIEBAIE5QRXJyb3IgTlBOX0dldFVSTChOUFAgaW5zdGFuY2UsIGNvbnN0IGMKICAgICByZXR1
cm4gW3BsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkgZ2V0VVJMOlVSTCB0YXJnZXQ6dGFy
Z2V0XTsKIH0KIAotTlBFcnJvciBOUE5fUG9zdFVSTE5vdGlmeShOUFAgaW5zdGFuY2UsIGNvbnN0
IGNoYXIqIFVSTCwgY29uc3QgY2hhciogdGFyZ2V0LCBVSW50MzIgbGVuLCBjb25zdCBjaGFyKiBi
dWYsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhKQorTlBFcnJvciBOUE5fUG9zdFVSTE5v
dGlmeShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIFVSTCwgY29uc3QgY2hhciogdGFyZ2V0LCB1
aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRh
KQogewogICAgIHJldHVybiBbcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKSBwb3N0VVJM
Tm90aWZ5OlVSTCB0YXJnZXQ6dGFyZ2V0IGxlbjpsZW4gYnVmOmJ1ZiBmaWxlOmZpbGUgbm90aWZ5
RGF0YTpub3RpZnlEYXRhXTsKIH0KIAotTlBFcnJvciBOUE5fUG9zdFVSTChOUFAgaW5zdGFuY2Us
IGNvbnN0IGNoYXIqIFVSTCwgY29uc3QgY2hhciogdGFyZ2V0LCBVSW50MzIgbGVuLCBjb25zdCBj
aGFyKiBidWYsIE5QQm9vbCBmaWxlKQorTlBFcnJvciBOUE5fUG9zdFVSTChOUFAgaW5zdGFuY2Us
IGNvbnN0IGNoYXIqIFVSTCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBj
aGFyKiBidWYsIE5QQm9vbCBmaWxlKQogewogICAgIHJldHVybiBbcGx1Z2luVmlld0Zvckluc3Rh
bmNlKGluc3RhbmNlKSBwb3N0VVJMOlVSTCB0YXJnZXQ6dGFyZ2V0IGxlbjpsZW4gYnVmOmJ1ZiBm
aWxlOmZpbGVdOwogfQpAQCAtMTAzLDcgKzEwMyw3IEBAIE5QRXJyb3IgTlBOX05ld1N0cmVhbShO
UFAgaW5zdGFuY2UsIE5QTUkKICAgICByZXR1cm4gW3BsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0
YW5jZSkgbmV3U3RyZWFtOnR5cGUgdGFyZ2V0OnRhcmdldCBzdHJlYW06c3RyZWFtXTsKIH0KIAot
U0ludDMyCU5QTl9Xcml0ZShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIFNJbnQzMiBs
ZW4sIHZvaWQqIGJ1ZmZlcikKK2ludDMyIE5QTl9Xcml0ZShOUFAgaW5zdGFuY2UsIE5QU3RyZWFt
KiBzdHJlYW0sIGludDMyIGxlbiwgdm9pZCogYnVmZmVyKQogewogICAgIHJldHVybiBbcGx1Z2lu
Vmlld0Zvckluc3RhbmNlKGluc3RhbmNlKSB3cml0ZTpzdHJlYW0gbGVuOmxlbiBidWZmZXI6YnVm
ZmVyXTsKIH0KQEAgLTE0OCw3ICsxNDgsNyBAQCBOUEVycm9yIE5QTl9TZXRWYWx1ZShOUFAgaW5z
dGFuY2UsIE5QUFZhCiB7CiAgICAgTE9HKFBsdWdpbnMsICJOUE5fU2V0VmFsdWUiKTsKICAgICBy
ZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLX0JCit9CiAKIHZvaWQqIE5QTl9HZXRKYXZhRW52
KHZvaWQpCiB7Cg==
</data>
<flag name="review"
          id="408"
          type_id="1"
          status="+"
          setter="adele"
    />
          </attachment>
      

    </bug>

</bugzilla>