<?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>122453</bug_id>
          
          <creation_ts>2013-10-07 11:25:31 -0700</creation_ts>
          <short_desc>Transition call and construct JITStubs to CCallHelper functions</short_desc>
          <delta_ts>2013-10-09 06:28:00 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>122287</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>937140</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-10-07 11:25:31 -0700</bug_when>
    <thetext>Move the JITStubs cti_op_call_NotJSFunction, cti_op_call_eval, cti_op_construct_NotJSConstruct, cti_op_call_jitCompile and cti_op_construct_jitCompile to CCallHelper functions placing the new function in JITOperations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937146</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-10-07 11:33:29 -0700</bug_when>
    <thetext>Also move cti_vm_lazyLinkCall, cti_vm_lazyLinkConstruct and cti_vm_lazyLinkClosureCall.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937811</commentid>
    <comment_count>2</comment_count>
      <attachid>213752</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-10-08 21:59:37 -0700</bug_when>
    <thetext>Created attachment 213752
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937813</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-08 22:01:17 -0700</bug_when>
    <thetext>Attachment 213752 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/bytecode/CallLinkInfo.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JIT.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JIT.h&apos;, u&apos;Source/JavaScriptCore/jit/JITCall.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITCall32_64.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITInlines.h&apos;, u&apos;Source/JavaScriptCore/jit/JITOperations.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITOperations.h&apos;, u&apos;Source/JavaScriptCore/jit/JITStubs.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITStubs.h&apos;, u&apos;Source/JavaScriptCore/jit/ThunkGenerators.cpp&apos;, u&apos;Source/JavaScriptCore/jit/ThunkGenerators.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/jit/JITOperations.cpp:469:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/jit/JITOperations.cpp:470:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 2 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937815</commentid>
    <comment_count>4</comment_count>
      <attachid>213754</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-10-08 22:05:00 -0700</bug_when>
    <thetext>Created attachment 213754
Patch - fixed style issue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937818</commentid>
    <comment_count>5</comment_count>
      <attachid>213754</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-10-08 22:18:29 -0700</bug_when>
    <thetext>Comment on attachment 213754
Patch - fixed style issue

Red is my favorite patch color.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937899</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-10-09 06:28:00 -0700</bug_when>
    <thetext>Committed r157164: &lt;http://trac.webkit.org/changeset/157164&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213752</attachid>
            <date>2013-10-08 21:59:37 -0700</date>
            <delta_ts>2013-10-08 22:05:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>122453.patch</filename>
            <type>text/plain</type>
            <size>37909</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3MTU2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBA
CisyMDEzLTEwLTA4ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIFRyYW5zaXRpb24gY2FsbCBhbmQgY29uc3RydWN0IEpJVFN0dWJzIHRvIENDYWxsSGVscGVy
IGZ1bmN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTIyNDUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVHJhbnNpdGlvbmVkIGN0aV9vcF9jYWxsX2V2YWwgdG8gb3BlcmF0aW9uQ2FsbEV2YWwuICBN
aWdyYXRlZCBiYXNlbGluZSBKSVQgdG8gdXNlIHRoZSBzYW1lIAorICAgICAgICBjYWxsIHRodW5r
cyBhcyB0aGUgREZHLiAgRWxpbWluYXRlZCBhbGwgb2YgdGhlICJvbGRTdHlsZSIgdGh1bmtzIGFu
ZCByZWxhdGVkIGZ1bmN0aW9ucy4KKworICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5j
cHA6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6dW5saW5rKToKKyAgICAgICAgKiBqaXQv
SklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rRm9yKToKKyAgICAgICAgKEpTQzo6SklU
OjpsaW5rU2xvd0NhbGwpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklU
Q2FsbC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkpJVDo6
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZUNsb3N1cmVDYWxsKToKKyAgICAgICAgKiBqaXQvSklUQ2FsbDMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVD
YWxsRXZhbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nh
c2UpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlQ2xvc3VyZUNhbGwpOgorICAg
ICAgICAqIGppdC9KSVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6Y2FsbE9wZXJhdGlv
bldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKToKKyAgICAgICAgKiBqaXQvSklUT3Bl
cmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBq
aXQvSklUU3R1YnMuY3BwOgorICAgICAgICAqIGppdC9KSVRTdHVicy5oOgorICAgICAgICAqIGpp
dC9UaHVua0dlbmVyYXRvcnMuY3BwOgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMuaDoK
KwogMjAxMy0xMC0wOCAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAg
IENvbnZlcnQgZm9yLW9mIGl0ZXJhdGlvbiB0byBpbi1iYW5kIHNpZ25hbGxpbmcgc28gd2UgY2Fu
IHRyaXZpYWxseSBhdm9pZCB1bm5lY2Vzc2FyeSBvYmplY3QgYWxsb2NhdGlvbgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJldmlz
aW9uIDE1NzE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0lu
Zm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHZvaWQgQ2FsbExpbmtJbmZv
Ojp1bmxpbmsoVk0mIHZtLCBSZXBhdGMKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICNlbmRpZgogICAgIH0gZWxzZQotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhj
YWxsUmV0dXJuTG9jYXRpb24sIGNhbGxUeXBlID09IENvbnN0cnVjdCA/IHZtLmdldENUSVN0dWIo
b2xkU3R5bGVMaW5rQ29uc3RydWN0R2VuZXJhdG9yKS5jb2RlKCkgOiB2bS5nZXRDVElTdHViKG9s
ZFN0eWxlTGlua0NhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKGNhbGxSZXR1cm5Mb2NhdGlvbiwgY2FsbFR5cGUgPT0gQ29uc3RydWN0ID8gdm0uZ2V0
Q1RJU3R1YihsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpLmNvZGUoKSA6IHZtLmdldENUSVN0
dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKICAgICBoYXNTZWVuU2hvdWxkUmVw
YXRjaCA9IGZhbHNlOwogICAgIGNhbGxlZS5jbGVhcigpOwogICAgIHN0dWIuY2xlYXIoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE1NzE1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAyLDIzICs4
MDIsMjMgQEAgdm9pZCBKSVQ6OmxpbmtGb3IoRXhlY1N0YXRlKiBleGVjLCBKU0Z1bgogICAgICAg
ICBBU1NFUlQoY2FsbExpbmtJbmZvLT5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNhbGwKICAg
ICAgICAgICAgICAgIHx8IGNhbGxMaW5rSW5mby0+Y2FsbFR5cGUgPT0gQ2FsbExpbmtJbmZvOjpD
YWxsVmFyYXJncyk7CiAgICAgICAgIGlmIChjYWxsTGlua0luZm8tPmNhbGxUeXBlID09IENhbGxM
aW5rSW5mbzo6Q2FsbCkgewotICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExp
bmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKG9sZFN0eWxlTGlua0Ns
b3N1cmVDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOworICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKGxp
bmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZv
LT5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKG9sZFN0eWxlVmlydHVhbENhbGxH
ZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5r
SW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5r
R2VuZXJhdG9yKS5jb2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgQVNTRVJU
KGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2Fs
bExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKG9sZFN0eWxlVmly
dHVhbENvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIodmlydHVh
bENvbnN0cnVjdFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOwogfQogCiB2b2lkIEpJVDo6bGlua1Ns
b3dDYWxsKENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrLCBDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbykKIHsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2Nr
KTsKIAotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxv
Y2F0aW9uLCBjYWxsZXJDb2RlQmxvY2stPnZtKCktPmdldENUSVN0dWIob2xkU3R5bGVWaXJ0dWFs
Q2FsbEdlbmVyYXRvcikuY29kZSgpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlu
a0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgY2FsbGVyQ29kZUJsb2NrLT52bSgpLT5nZXRDVElT
dHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CiB9CiAKIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAkocmV2aXNpb24gMTU3MTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAkod29ya2luZyBjb3B5KQpAQCAtODY4LDYgKzg2OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0ciYsIGludCk7CiAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRSwgaW50KTsKICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FUCwg
aW50LCB2b2lkKik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25X
aXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihKX0pJVE9wZXJhdGlvbl9FKTsKICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFj
a09uRXhjZXB0aW9uKFZfSklUT3BlcmF0aW9uX0VDYiwgQ29kZUJsb2NrKik7CiAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4
Y2VwdGlvbihaX0pJVE9wZXJhdGlvbl9FKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMTU3MTUzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsOCAr
MjAyLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVMb2FkVmFyYXJncyhJbnN0cnVjdGlvbgogCiB2b2lk
IEpJVDo6Y29tcGlsZUNhbGxFdmFsKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKLSAgICBK
SVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfY2FsbF9ldmFsKTsgLy8gSW5pdGlhbGl6
ZXMgU2NvcGVDaGFpbjsgUmV0dXJuUEM7IENvZGVCbG9jay4KLSAgICBzdHViQ2FsbC5jYWxsKCk7
CisgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJh
dGlvbkNhbGxFdmFsKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgcmVnVDEsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOwogICAgIGVtaXRHZXRGcm9tQ2Fs
bEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZyYW1lLCBjYWxsRnJhbWVSZWdpc3Rlcik7
CiAKQEAgLTIxNyw3ICsyMTYsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2Uo
SW5zdHJ1CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogCiAgICAgZW1pdExvYWQoSlNTdGFjazo6
Q2FsbGVlLCByZWdUMSwgcmVnVDApOwotICAgIGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1
YihvbGRTdHlsZVZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOworICAgIGVtaXROYWtlZENh
bGwobV92bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOwog
CiAgICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKICAgICAKQEAgLTMwNSw4ICszMDQs
OCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlECiAKICAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotICAgIAotICAgIG1fY2Fs
bFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1
cm5Mb2NhdGlvbiA9IGVtaXROYWtlZENhbGwob3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0ID8gbV92
bS0+Z2V0Q1RJU3R1YihvbGRTdHlsZUxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKSA6IG1f
dm0tPmdldENUSVN0dWIob2xkU3R5bGVMaW5rQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKKworICAg
IG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNh
bGxSZXR1cm5Mb2NhdGlvbiA9IGVtaXROYWtlZENhbGwob3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0
ID8gbV92bS0+Z2V0Q1RJU3R1YihsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpLmNvZGUoKSA6
IG1fdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKIAogICAg
IHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7CiAgICAgZW1pdFB1dENhbGxSZXN1bHQoaW5z
dHJ1Y3Rpb24pOwpAQCAtMzM1LDcgKzMzNCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNs
b3N1cmVDYWxsKENhbGwKICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9u
UHRyKGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmso
ZG9uZSwgY2FsbExpbmtJbmZvLT5ob3RQYXRoT3RoZXIubGFiZWxBdE9mZnNldCgwKSk7Ci0gICAg
cGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbChtX3ZtLT5nZXRDVElTdHVi
KG9sZFN0eWxlVmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgIHBhdGNoQnVmZmVy
Lmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWwobV92bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2Fs
bFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKICAgICAKICAgICBSZWZQdHI8Q2xvc3VyZUNhbGxT
dHViUm91dGluZT4gc3R1YlJvdXRpbmUgPSBhZG9wdFJlZihuZXcgQ2xvc3VyZUNhbGxTdHViUm91
dGluZSgKICAgICAgICAgRklOQUxJWkVfQ09ERSgKQEAgLTM1Myw3ICszNTIsNyBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVDbG9zdXJlQ2FsbChDYWxsCiAgICAgcmVwYXRjaEJ1ZmZlci5yZXBs
YWNlV2l0aEp1bXAoCiAgICAgICAgIFJlcGF0Y2hCdWZmZXI6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRo
UGF0Y2hPblJlZ2lzdGVyKGNhbGxMaW5rSW5mby0+aG90UGF0aEJlZ2luKSwKICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgbV92bS0+Z2V0
Q1RJU3R1YihvbGRTdHlsZVZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOworICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBtX3ZtLT5n
ZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CiAgICAgCiAgICAg
Y2FsbExpbmtJbmZvLT5zdHViID0gc3R1YlJvdXRpbmUucmVsZWFzZSgpOwogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAxNTcxNTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEs
OCArMTMxLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVMb2FkVmFyYXJncyhJbnN0cnVjdGlvbgogCiB2
b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKLSAg
ICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfY2FsbF9ldmFsKTsgLy8gSW5pdGlh
bGl6ZXMgU2NvcGVDaGFpbjsgUmV0dXJuUEM7IENvZGVCbG9jay4KLSAgICBzdHViQ2FsbC5jYWxs
KCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9w
ZXJhdGlvbkNhbGxFdmFsKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2g2NChFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSkpKTsKICAgICBlbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgY2FsbEZyYW1lUmVn
aXN0ZXIpOwogCkBAIC0xNDYsNyArMTQ1LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNs
b3dDYXNlKEluc3RydQogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIAogICAgIGVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyNjQoSlNTdGFjazo6Q2FsbGVlLCByZWdUMCk7Ci0gICAgZW1pdE5ha2Vk
Q2FsbChtX3ZtLT5nZXRDVElTdHViKG9sZFN0eWxlVmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUo
KSk7CisgICAgZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1bmtH
ZW5lcmF0b3IpLmNvZGUoKSk7CiAKICAgICBzYW1wbGVDb2RlQmxvY2sobV9jb2RlQmxvY2spOwog
ICAgIApAQCAtMjMyLDggKzIzMSw4IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2Uo
T3Bjb2RlSUQKICAgICB9CiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0gICAgCi0gICAgbV9j
YWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJl
dHVybkxvY2F0aW9uID0gZW1pdE5ha2VkQ2FsbChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyBt
X3ZtLT5nZXRDVElTdHViKG9sZFN0eWxlTGlua0NvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpIDog
bV92bS0+Z2V0Q1RJU3R1YihvbGRTdHlsZUxpbmtDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOworCisg
ICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0u
Y2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5ha2VkQ2FsbChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1
Y3QgPyBtX3ZtLT5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcikuY29kZSgp
IDogbV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOwogCiAg
ICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKICAgICAKQEAgLTI2Myw3ICsyNjIsNyBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDbG9zdXJlQ2FsbChDYWxsCiAgICAgCiAgICAgcGF0
Y2hCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNz
KCkpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby0+aG90UGF0aE90
aGVyLmxhYmVsQXRPZmZzZXQoMCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxv
Y2F0aW9uTGFiZWwobV92bS0+Z2V0Q1RJU3R1YihvbGRTdHlsZVZpcnR1YWxDYWxsR2VuZXJhdG9y
KS5jb2RlKCkpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVs
KG1fdm0tPmdldENUSVN0dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CiAg
ICAgCiAgICAgUmVmUHRyPENsb3N1cmVDYWxsU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0gYWRv
cHRSZWYobmV3IENsb3N1cmVDYWxsU3R1YlJvdXRpbmUoCiAgICAgICAgIEZJTkFMSVpFX0NPREUo
CkBAIC0yODEsOCArMjgwLDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ2xvc3VyZUNhbGwo
Q2FsbAogICAgIHJlcGF0Y2hCdWZmZXIucmVwbGFjZVdpdGhKdW1wKAogICAgICAgICBSZXBhdGNo
QnVmZmVyOjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3RlcihjYWxsTGlua0luZm8t
PmhvdFBhdGhCZWdpbiksCiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5j
b2RlKCkuY29kZSgpKSk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5j
YWxsUmV0dXJuTG9jYXRpb24sIG1fdm0tPmdldENUSVN0dWIob2xkU3R5bGVWaXJ0dWFsQ2FsbEdl
bmVyYXRvcikuY29kZSgpKTsKLSAgICAKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlu
a0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgbV92bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRo
dW5rR2VuZXJhdG9yKS5jb2RlKCkpOworCiAgICAgY2FsbExpbmtJbmZvLT5zdHViID0gc3R1YlJv
dXRpbmUucmVsZWFzZSgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElu
bGluZXMuaAkocmV2aXNpb24gMTU3MTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0Myw2ICsyNDMsMTIgQEAgQUxXQVlTX0lO
TElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChvcGVyYXRpb24sIGRzdCk7CiB9CiAKK0FM
V0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uV2l0aENh
bGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oSl9KSVRPcGVyYXRpb25fRSBvcGVyYXRpb24pCit7
CisgICAgc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKKyAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvbik7Cit9CisKIEFMV0FZU19J
TkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFt
ZVJvbGxiYWNrT25FeGNlcHRpb24oVl9KSVRPcGVyYXRpb25fRUNiIG9wZXJhdGlvbiwgQ29kZUJs
b2NrKiBwb2ludGVyKQogewogICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVk
SW1tUHRyKHBvaW50ZXIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTU3MTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkhvc3RDYWxsUmV0dXJuVmFsdWUu
aCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25XcmFwcGVycy5oIgorI2luY2x1ZGUgIkpTR2xvYmFs
T2JqZWN0RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlJl
cGF0Y2guaCIKIApAQCAtMzksNiArNDAsMjIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGV4dGVybiAi
QyIgewogCisjaWYgQ09NUElMRVIoTVNWQykKK3ZvaWQgKiBfUmV0dXJuQWRkcmVzcyh2b2lkKTsK
KyNwcmFnbWEgaW50cmluc2ljKF9SZXR1cm5BZGRyZXNzKQorCisjZGVmaW5lIE9VUl9SRVRVUk5f
QUREUkVTUyBfUmV0dXJuQWRkcmVzcygpCisjZWxzZQorI2RlZmluZSBPVVJfUkVUVVJOX0FERFJF
U1MgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApCisjZW5kaWYKKworI2lmIEVOQUJMRShPUENP
REVfU0FNUExJTkcpCisjZGVmaW5lIENUSV9TQU1QTEVSIHZtLT5pbnRlcnByZXRlci0+c2FtcGxl
cigpCisjZWxzZQorI2RlZmluZSBDVElfU0FNUExFUiAwCisjZW5kaWYKKworCiB2b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uU3RhY2tDaGVjayhFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayog
Y29kZUJsb2NrKQogewogICAgIC8vIFdlIHBhc3MgaW4gb3VyIG93biBjb2RlIGJsb2NrLCBiZWNh
dXNlIHRoZSBjYWxsZnJhbWUgaGFzbid0IGJlZW4gcG9wdWxhdGVkLgpAQCAtNDQ1LDYgKzQ2Miwy
OCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZVN0CiAgICAgYmFzZS0+
cHV0RGlyZWN0KHZtLCBvZmZzZXQsIEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkpOwogfQogCitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxFdmFsKEV4ZWNTdGF0ZSogZXhl
Y0NhbGxlZSkKK3sKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZXhlY0NhbGxlZS0+Y2Fs
bGVyRnJhbWUoKTsKKyAgICBBU1NFUlQoZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJs
b2NrKCktPmNvZGVUeXBlKCkgIT0gRnVuY3Rpb25Db2RlCisgICAgICAgICAgIHx8ICFleGVjQ2Fs
bGVlLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKS0+bmVlZHNGdWxsU2NvcGVDaGFpbigpCisg
ICAgICAgICAgIHx8IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCktPnVuY2hlY2tlZFIoZXhlY0Nh
bGxlZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCktPmFjdGl2YXRpb25SZWdpc3RlcigpLm9m
ZnNldCgpKS5qc1ZhbHVlKCkpOworCisgICAgZXhlY0NhbGxlZS0+c2V0U2NvcGUoY2FsbGVyRnJh
bWUtPnNjb3BlKCkpOworICAgIGV4ZWNDYWxsZWUtPnNldFJldHVyblBDKHN0YXRpY19jYXN0PElu
c3RydWN0aW9uKj4oT1VSX1JFVFVSTl9BRERSRVNTKSk7CisgICAgZXhlY0NhbGxlZS0+c2V0Q29k
ZUJsb2NrKDApOworCisgICAgaWYgKCFpc0hvc3RGdW5jdGlvbihleGVjQ2FsbGVlLT5jYWxsZWVB
c1ZhbHVlKCksIGdsb2JhbEZ1bmNFdmFsKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpOworCisgICAgVk0qIHZtID0gJmV4ZWNDYWxsZWUtPnZtKCk7CisgICAgSlNW
YWx1ZSByZXN1bHQgPSBldmFsKGV4ZWNDYWxsZWUpOworICAgIGlmICh2bS0+ZXhjZXB0aW9uKCkp
CisgICAgICAgIHJldHVybiBFbmNvZGVkSlNWYWx1ZSgpOworICAgIAorICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKK30KKwogc3RhdGljIHZvaWQqIGhhbmRsZUhvc3RDYWxsKEV4
ZWNTdGF0ZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSBjYWxsZWUsIENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCkKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFt
ZSgpOwpAQCAtNTEzLDYgKzU1Miw3IEBAIGlubGluZSBjaGFyKiBsaW5rRm9yKEV4ZWNTdGF0ZSog
ZXhlY0NhbGwKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyOwogICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gMDsKKyAgICBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbyA9IGV4
ZWMtPmNvZGVCbG9jaygpLT5nZXRDYWxsTGlua0luZm8oZXhlY0NhbGxlZS0+cmV0dXJuUEMoKSk7
CiAgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCiAgICAgICAgIGNvZGVQdHIg
PSBleGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbCgp
OwogICAgIGVsc2UgewpAQCAtNTIzLDEyICs1NjMsMTEgQEAgaW5saW5lIGNoYXIqIGxpbmtGb3Io
RXhlY1N0YXRlKiBleGVjQ2FsbAogICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVy
YXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgICAgICB9CiAgICAgICAgIGNv
ZGVCbG9jayA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQpOwotICAgICAg
ICBpZiAoZXhlY0NhbGxlZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19j
YXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKQorICAgICAgICBpZiAoZXhl
Y0NhbGxlZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVf
dD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpIHx8IGNhbGxMaW5rSW5mby5jYWxsVHlwZSA9
PSBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzKQogICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0
aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKGtpbmQpOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5n
ZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbCgpOwogICAgIH0KLSAgICBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRDYWxsTGlu
a0luZm8oZXhlY0NhbGxlZS0+cmV0dXJuUEMoKSk7CiAgICAgaWYgKCFjYWxsTGlua0luZm8uc2Vl
bk9uY2UoKSkKICAgICAgICAgY2FsbExpbmtJbmZvLnNldFNlZW4oKTsKICAgICBlbHNlCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMTU3
MTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE5OSw2ICsxOTksNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlJZE5vblN0CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0
cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpT
Q2VsbCogYmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RG
X0lOVEVSTkFMOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdl
QW5kRmluaXNoUHV0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgU3RydWN0dXJlKiwgUHJvcGVydHlP
ZmZzZXQsIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxFdmFsKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKIGNo
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENhbGwoRXhlY1N0YXRlKikgV1RGX0lO
VEVSTkFMOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2FsbChFeGVjU3RhdGUq
KSBXVEZfSU5URVJOQUw7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJl
Q2FsbChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTU3MTUzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNDcsMjA5ICsxMTQ3LDYg
QEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oSlNPYmplY3QqLCBvcF9uZXdfZgogICAgIHJldHVybiBK
U0Z1bmN0aW9uOjpjcmVhdGUoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnZtKCksIHN0YWNrRnJhbWUu
YXJnc1swXS5mdW5jdGlvbigpLCBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+c2NvcGUoKSk7CiB9CiAK
LWlubGluZSB2b2lkKiBqaXRDb21waWxlRm9yKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIGtpbmQpCi17Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQg
YnkgY3RpX29wX2NhbGxfaml0Q29tcGlsZSgpIGFuZAotICAgIC8vIGN0aV9vcF9jb25zdHJ1Y3Rf
aml0Q29tcGlsZSgpIEpJVCBnbHVlIHRyYW1wb2xpbmVzIHRvIGNvbXBpbGUgdGhlCi0gICAgLy8g
Y2FsbGVlIGZ1bmN0aW9uIHRoYXQgd2Ugd2FudCB0byBjYWxsLiBCb3RoIGN0aSBnbHVlIHRyYW1w
b2xpbmVzIGFyZQotICAgIC8vIGNhbGxlZCBieSBKSVQnZWQgY29kZSB3aGljaCBoYXMgcHVzaGVk
IGEgZnJhbWUgYW5kIGluaXRpYWxpemVkIG1vc3Qgb2YKLSAgICAvLyB0aGUgZnJhbWUgY29udGVu
dCBleGNlcHQgZm9yIHRoZSBjb2RlQmxvY2suCi0gICAgLy8KLSAgICAvLyBOb3JtYWxseSwgdGhl
IHByb2xvZ3VlIG9mIHRoZSBjYWxsZWUgaXMgc3VwcG9zZWQgdG8gc2V0IHRoZSBmcmFtZSdzIGNi
Ci0gICAgLy8gcG9pbnRlciB0byB0aGUgY2Igb2YgdGhlIGNhbGxlZS4gQnV0IGluIHRoaXMgY2Fz
ZSwgdGhlIGNhbGxlZSBjb2RlIGRvZXMKLSAgICAvLyBub3QgZXhpc3QgeWV0IHVudGlsIGl0IGlz
IGNvbXBpbGVkIGJlbG93LiBUaGUgY29tcGlsYXRpb24gcHJvY2VzcyB3aWxsCi0gICAgLy8gYWxs
b2NhdGUgbWVtb3J5IHdoaWNoIG1heSB0cmlnZ2VyIGEgR0MuIFRoZSBHQywgaW4gdHVybiwgd2ls
bCBzY2FuIHRoZQotICAgIC8vIEpTU3RhY2ssIGFuZCB3aWxsIGV4cGVjdCB0aGUgZnJhbWUncyBj
YiB0byBlaXRoZXIgYmUgdmFsaWQgb3IgMC4gSWYKLSAgICAvLyB3ZSBkb24ndCBpbml0aWFsaXpl
IGl0LCB0aGUgR0Mgd2lsbCBiZSBhY2Nlc3NpbmcgaW52YWxpZCBtZW1vcnkgYW5kIG1heQotICAg
IC8vIGNyYXNoLgotICAgIC8vCi0gICAgLy8gSGVuY2UsIHdlIHNob3VsZCBudWxsaWZ5IGl0IGhl
cmUgYmVmb3JlIHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsYXRpb24uCi0gICAgY2FsbEZyYW1l
LT5zZXRDb2RlQmxvY2soMCk7Ci0KLSAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxK
U0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5jYWxsZWUoKSk7Ci0gICAgQVNTRVJUKCFmdW5jdGlvbi0+
aXNIb3N0RnVuY3Rpb24oKSk7Ci0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0g
ZnVuY3Rpb24tPmpzRXhlY3V0YWJsZSgpOwotICAgIEpTU2NvcGUqIGNhbGxEYXRhU2NvcGVDaGFp
biA9IGZ1bmN0aW9uLT5zY29wZSgpOwotICAgIEpTT2JqZWN0KiBlcnJvciA9IGV4ZWN1dGFibGUt
PnByZXBhcmVGb3JFeGVjdXRpb24oY2FsbEZyYW1lLCBjYWxsRGF0YVNjb3BlQ2hhaW4sIGtpbmQp
OwotICAgIGlmICghZXJyb3IpCi0gICAgICAgIHJldHVybiBmdW5jdGlvbjsKLSAgICBjYWxsRnJh
bWUtPnZtKCkudGhyb3dFeGNlcHRpb24oY2FsbEZyYW1lLCBlcnJvcik7Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLURFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQqLCBvcF9jYWxsX2ppdENvbXBpbGUpCi17
Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotCi0jaWYgIUFTU0VSVF9E
SVNBQkxFRAotICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIEFTU0VSVChzdGFja0ZyYW1lLmNh
bGxGcmFtZS0+Y2FsbGVlKCktPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKHN0YWNrRnJhbWUu
Y2FsbEZyYW1lLT5jYWxsZWUoKSwgY2FsbERhdGEpID09IENhbGxUeXBlSlMpOwotI2VuZGlmCi0g
ICAgCi0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLSAg
ICB2b2lkKiByZXN1bHQgPSBqaXRDb21waWxlRm9yKGNhbGxGcmFtZSwgQ29kZUZvckNhbGwpOwot
ICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb25Gcm9tT3BDYWxs
PHZvaWQqPihzdGFja0ZyYW1lLCBjYWxsRnJhbWUsIFNUVUJfUkVUVVJOX0FERFJFU1MpOwotCi0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCosIG9wX2Nv
bnN0cnVjdF9qaXRDb21waWxlKQotewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0Zy
YW1lKTsKLQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVj
dERhdGE7Ci0gICAgQVNTRVJUKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oc3RhY2tGcmFtZS5jYWxsRnJh
bWUtPmNhbGxlZSgpKS0+bWV0aG9kVGFibGUoKS0+Z2V0Q29uc3RydWN0RGF0YShzdGFja0ZyYW1l
LmNhbGxGcmFtZS0+Y2FsbGVlKCksIGNvbnN0cnVjdERhdGEpID09IENvbnN0cnVjdFR5cGVKUyk7
Ci0jZW5kaWYKLQotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJh
bWU7ICAgIAotICAgIHZvaWQqIHJlc3VsdCA9IGppdENvbXBpbGVGb3IoY2FsbEZyYW1lLCBDb2Rl
Rm9yQ29uc3RydWN0KTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIHRocm93RXhj
ZXB0aW9uRnJvbU9wQ2FsbDx2b2lkKj4oc3RhY2tGcmFtZSwgY2FsbEZyYW1lLCBTVFVCX1JFVFVS
Tl9BRERSRVNTKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWlubGluZSB2b2lkKiBsYXp5
TGlua0ZvcihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5k
KQotewotICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZy
YW1lLT5jYWxsZWUoKSk7Ci0gICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBjYWxsZWUt
PmV4ZWN1dGFibGUoKTsKLQotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyOwotICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gMDsKLSAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5m
byA9ICZjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpLT5nZXRDYWxsTGlua0lu
Zm8oY2FsbEZyYW1lLT5yZXR1cm5QQygpKTsKLQotICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgY2Fs
bGVkIGJ5IGN0aV92bV9sYXp5TGlua0NhbGwoKSBhbmQKLSAgICAvLyBjdGlfbGF6eUxpbmtDb25z
dHJ1Y3QgSklUIGdsdWUgdHJhbXBvbGluZXMgdG8gbGluayB0aGUgY2FsbGVlIGZ1bmN0aW9uCi0g
ICAgLy8gdGhhdCB3ZSB3YW50IHRvIGNhbGwuIEJvdGggY3RpIGdsdWUgdHJhbXBvbGluZXMgYXJl
IGNhbGxlZCBieSBKSVQnZWQKLSAgICAvLyBjb2RlIHdoaWNoIGhhcyBwdXNoZWQgYSBmcmFtZSBh
bmQgaW5pdGlhbGl6ZWQgbW9zdCBvZiB0aGUgZnJhbWUgY29udGVudAotICAgIC8vIGV4Y2VwdCBm
b3IgdGhlIGNvZGVCbG9jay4KLSAgICAvLwotICAgIC8vIE5vcm1hbGx5LCB0aGUgcHJvbG9ndWUg
b2YgdGhlIGNhbGxlZSBpcyBzdXBwb3NlZCB0byBzZXQgdGhlIGZyYW1lJ3MgY2IKLSAgICAvLyBm
aWVsZCB0byB0aGUgY2Igb2YgdGhlIGNhbGxlZS4gQnV0IGluIHRoaXMgY2FzZSwgdGhlIGNhbGxl
ZSBtYXkgbm90Ci0gICAgLy8gZXhpc3QgeWV0LCBhbmQgaWYgbm90LCBpdCB3aWxsIGJlIGdlbmVy
YXRlZCBpbiB0aGUgY29tcGlsYXRpb24gYmVsb3cuCi0gICAgLy8gVGhlIGNvbXBpbGF0aW9uIHdp
bGwgYWxsb2NhdGUgbWVtb3J5IHdoaWNoIG1heSB0cmlnZ2VyIGEgR0MuIFRoZSBHQywgaW4KLSAg
ICAvLyB0dXJuLCB3aWxsIHNjYW4gdGhlIEpTU3RhY2ssIGFuZCB3aWxsIGV4cGVjdCB0aGUgZnJh
bWUncyBjYiB0byBiZSB2YWxpZAotICAgIC8vIG9yIDAuIElmIHdlIGRvbid0IGluaXRpYWxpemUg
aXQsIHRoZSBHQyB3aWxsIGJlIGFjY2Vzc2luZyBpbnZhbGlkCi0gICAgLy8gbWVtb3J5IGFuZCBt
YXkgY3Jhc2guCi0gICAgLy8KLSAgICAvLyBIZW5jZSwgd2Ugc2hvdWxkIG51bGxpZnkgaXQgaGVy
ZSBiZWZvcmUgcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxhdGlvbi4KLSAgICBjYWxsRnJhbWUt
PnNldENvZGVCbG9jaygwKTsKLQotICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigp
KQotICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvcihraW5k
KS0+YWRkcmVzc0ZvckNhbGwoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgRnVuY3Rpb25FeGVjdXRh
YmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUq
PihleGVjdXRhYmxlKTsKLSAgICAgICAgaWYgKEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhl
Y3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihjYWxsRnJhbWUsIGNhbGxlZS0+c2NvcGUoKSwg
a2luZCkpIHsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+dm0oKS50aHJvd0V4Y2VwdGlvbihjYWxs
RnJhbWUsIGVycm9yKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAg
IGNvZGVCbG9jayA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQpOwotICAg
ICAgICBpZiAoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGlj
X2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkKLSAgICAgICAgICAgIHx8
IGNhbGxMaW5rSW5mby0+Y2FsbFR5cGUgPT0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJncykKLSAg
ICAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVX
aXRoQXJpdHlDaGVja0ZvcihraW5kKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY29kZVB0
ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS0+YWRkcmVz
c0ZvckNhbGwoKTsKLSAgICB9Ci0gICAgCi0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
Y2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKLSAgICBpZiAo
IWNhbGxMaW5rSW5mby0+c2Vlbk9uY2UoKSkKLSAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRTZWVu
KCk7Ci0gICAgZWxzZQotICAgICAgICBKSVQ6OmxpbmtGb3IoY2FsbEZyYW1lLT5jYWxsZXJGcmFt
ZSgpLCBjYWxsZWUsIGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCksIGNvZGVC
bG9jaywgY29kZVB0ciwgY2FsbExpbmtJbmZvLCAmY2FsbEZyYW1lLT52bSgpLCBraW5kKTsKLQot
ICAgIHJldHVybiBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci19Ci0KLURFRklORV9TVFVC
X0ZVTkNUSU9OKHZvaWQqLCB2bV9sYXp5TGlua0NhbGwpCi17Ci0gICAgU1RVQl9JTklUX1NUQUNL
X0ZSQU1FKHN0YWNrRnJhbWUpOwotCi0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0Zy
YW1lLmNhbGxGcmFtZTsKLSAgICB2b2lkKiByZXN1bHQgPSBsYXp5TGlua0ZvcihjYWxsRnJhbWUs
IENvZGVGb3JDYWxsKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIHRocm93RXhj
ZXB0aW9uRnJvbU9wQ2FsbDx2b2lkKj4oc3RhY2tGcmFtZSwgY2FsbEZyYW1lLCBTVFVCX1JFVFVS
Tl9BRERSRVNTKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLURFRklORV9TVFVCX0ZVTkNU
SU9OKHZvaWQqLCB2bV9sYXp5TGlua0Nsb3N1cmVDYWxsKQotewotICAgIFNUVUJfSU5JVF9TVEFD
S19GUkFNRShzdGFja0ZyYW1lKTsKLQotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tG
cmFtZS5jYWxsRnJhbWU7Ci0gICAgCi0gICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBj
YWxsRnJhbWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpOwotICAgIFZNKiB2bSA9IGNhbGxl
ckNvZGVCbG9jay0+dm0oKTsKLSAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9ICZjYWxs
ZXJDb2RlQmxvY2stPmdldENhbGxMaW5rSW5mbyhjYWxsRnJhbWUtPnJldHVyblBDKCkpOwotICAg
IEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5jYWxs
ZWUoKSk7Ci0gICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBjYWxsZWUtPmV4ZWN1dGFi
bGUoKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNhbGxlZS0+c3RydWN0dXJlKCk7Ci0g
ICAgCi0gICAgQVNTRVJUKGNhbGxMaW5rSW5mby0+Y2FsbFR5cGUgPT0gQ2FsbExpbmtJbmZvOjpD
YWxsKTsKLSAgICBBU1NFUlQoY2FsbExpbmtJbmZvLT5pc0xpbmtlZCgpKTsKLSAgICBBU1NFUlQo
Y2FsbExpbmtJbmZvLT5jYWxsZWUpOwotICAgIEFTU0VSVChjYWxsZWUgIT0gY2FsbExpbmtJbmZv
LT5jYWxsZWUuZ2V0KCkpOwotICAgIAotICAgIGJvb2wgc2hvdWxkTGluayA9IGZhbHNlOwotICAg
IENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrID0gMDsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgY29kZVB0cjsKLSAgICAKLSAgICBpZiAoZXhlY3V0YWJsZSA9PSBjYWxsTGlua0luZm8tPmNh
bGxlZS5nZXQoKS0+ZXhlY3V0YWJsZSgpCi0gICAgICAgICYmIHN0cnVjdHVyZSA9PSBjYWxsTGlu
a0luZm8tPmNhbGxlZS5nZXQoKS0+c3RydWN0dXJlKCkpIHsKLSAgICAgICAgCi0gICAgICAgIHNo
b3VsZExpbmsgPSB0cnVlOwotICAgICAgICAKLSAgICAgICAgQVNTRVJUKGV4ZWN1dGFibGUtPmhh
c0pJVENvZGVGb3JDYWxsKCkpOwotICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+Z2VuZXJh
dGVkSklUQ29kZUZvckNhbGwoKS0+YWRkcmVzc0ZvckNhbGwoKTsKLSAgICAgICAgaWYgKCFjYWxs
ZWUtPmV4ZWN1dGFibGUoKS0+aXNIb3N0RnVuY3Rpb24oKSkgewotICAgICAgICAgICAgY2FsbGVl
Q29kZUJsb2NrID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5jb2Rl
QmxvY2tGb3JDYWxsKCk7Ci0gICAgICAgICAgICBpZiAoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihjYWxsZWVDb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSkpIHsKLSAgICAgICAgICAgICAgICBzaG91bGRMaW5rID0gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVXaXRo
QXJpdHlDaGVja0ZvcihDb2RlRm9yQ2FsbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9IGVsc2UgaWYgKGNhbGxlZS0+aXNIb3N0RnVuY3Rpb24oKSkKLSAgICAgICAgY29kZVB0ciA9
IGV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCktPmFkZHJlc3NGb3JDYWxsKCk7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIE5lZWQgdG8gY2xlYXIgdGhlIGNvZGUgYmxvY2sgYmVm
b3JlIGNvbXBpbGF0aW9uLCBiZWNhdXNlIGNvbXBpbGF0aW9uIGNhbiBHQy4KLSAgICAgICAgY2Fs
bEZyYW1lLT5zZXRDb2RlQmxvY2soMCk7Ci0gICAgICAgIAotICAgICAgICBGdW5jdGlvbkV4ZWN1
dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihl
eGVjdXRhYmxlKTsKLSAgICAgICAgSlNTY29wZSogc2NvcGVDaGFpbiA9IGNhbGxlZS0+c2NvcGUo
KTsKLSAgICAgICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJl
Rm9yRXhlY3V0aW9uKGNhbGxGcmFtZSwgc2NvcGVDaGFpbiwgQ29kZUZvckNhbGwpOwotICAgICAg
ICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+dm0oKS50aHJvd0V4Y2VwdGlv
bihjYWxsRnJhbWUsIGVycm9yKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRK
SVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3IoQ29kZUZvckNhbGwpOwotICAgIH0KLSAgICAKLSAgICBp
ZiAoc2hvdWxkTGluaykgewotICAgICAgICBBU1NFUlQoY29kZVB0cik7Ci0gICAgICAgIENvbmN1
cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGNhbGxlckNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAg
SklUOjpjb21waWxlQ2xvc3VyZUNhbGwodm0sIGNhbGxMaW5rSW5mbywgY2FsbGVyQ29kZUJsb2Nr
LCBjYWxsZWVDb2RlQmxvY2ssIHN0cnVjdHVyZSwgZXhlY3V0YWJsZSwgY29kZVB0cik7Ci0gICAg
ICAgIGNhbGxMaW5rSW5mby0+aGFzU2VlbkNsb3N1cmUgPSB0cnVlOwotICAgIH0gZWxzZQotICAg
ICAgICBKSVQ6OmxpbmtTbG93Q2FsbChjYWxsZXJDb2RlQmxvY2ssIGNhbGxMaW5rSW5mbyk7Ci0K
LSAgICByZXR1cm4gY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpOwotfQotCi1ERUZJTkVfU1RV
Ql9GVU5DVElPTih2b2lkKiwgdm1fbGF6eUxpbmtDb25zdHJ1Y3QpCi17Ci0gICAgU1RVQl9JTklU
X1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotCi0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBz
dGFja0ZyYW1lLmNhbGxGcmFtZTsKLSAgICB2b2lkKiByZXN1bHQgPSBsYXp5TGlua0ZvcihjYWxs
RnJhbWUsIENvZGVGb3JDb25zdHJ1Y3QpOwotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1
cm4gdGhyb3dFeGNlcHRpb25Gcm9tT3BDYWxsPHZvaWQqPihzdGFja0ZyYW1lLCBjYWxsRnJhbWUs
IFNUVUJfUkVUVVJOX0FERFJFU1MpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogREVGSU5F
X1NUVUJfRlVOQ1RJT04oSlNPYmplY3QqLCBvcF9wdXNoX2FjdGl2YXRpb24pCiB7CiAgICAgU1RV
Ql9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwpAQCAtMTM1OSwzNiArMTE1Niw2IEBAIERF
RklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3BfcHVzaF8KICAgICByZXR1cm4gYWN0aXZh
dGlvbjsKIH0KIAotREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2NhbGxf
Tm90SlNGdW5jdGlvbikKLXsKLSAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7
Ci0KLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwotICAg
IAotICAgIEpTVmFsdWUgY2FsbGVlID0gY2FsbEZyYW1lLT5jYWxsZWVBc1ZhbHVlKCk7Ci0KLSAg
ICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRh
KGNhbGxlZSwgY2FsbERhdGEpOwotCi0gICAgQVNTRVJUKGNhbGxUeXBlICE9IENhbGxUeXBlSlMp
OwotICAgIGlmIChjYWxsVHlwZSAhPSBDYWxsVHlwZUhvc3QpIHsKLSAgICAgICAgQVNTRVJUKGNh
bGxUeXBlID09IENhbGxUeXBlTm9uZSk7Ci0gICAgICAgIEVycm9yV2l0aEV4ZWNBbmRDYWxsZWVG
dW5jdG9yIGZ1bmN0b3IgPSBFcnJvcldpdGhFeGVjQW5kQ2FsbGVlRnVuY3RvcihjcmVhdGVOb3RB
RnVuY3Rpb25FcnJvciwgY2FsbGVlKTsKLSAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uRnJv
bU9wQ2FsbDxFbmNvZGVkSlNWYWx1ZT4oc3RhY2tGcmFtZSwgY2FsbEZyYW1lLCBTVFVCX1JFVFVS
Tl9BRERSRVNTLCAmZnVuY3Rvcik7Ci0gICAgfQotCi0gICAgRW5jb2RlZEpTVmFsdWUgcmV0dXJu
VmFsdWU7Ci0gICAgewotICAgICAgICBTYW1wbGluZ1Rvb2w6OkNhbGxSZWNvcmQgY2FsbFJlY29y
ZChDVElfU0FNUExFUiwgdHJ1ZSk7Ci0gICAgICAgIHJldHVyblZhbHVlID0gY2FsbERhdGEubmF0
aXZlLmZ1bmN0aW9uKGNhbGxGcmFtZSk7Ci0gICAgfQotCi0gICAgaWYgKHN0YWNrRnJhbWUudm0t
PmV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb25Gcm9tT3BDYWxsPEVu
Y29kZWRKU1ZhbHVlPihzdGFja0ZyYW1lLCBjYWxsRnJhbWUsIFNUVUJfUkVUVVJOX0FERFJFU1Mp
OwotCi0gICAgcmV0dXJuIHJldHVyblZhbHVlOwotfQotCiBERUZJTkVfU1RVQl9GVU5DVElPTihF
bmNvZGVkSlNWYWx1ZSwgb3BfY3JlYXRlX2FyZ3VtZW50cykKIHsKICAgICBTVFVCX0lOSVRfU1RB
Q0tfRlJBTUUoc3RhY2tGcmFtZSk7CkBAIC0xNDU2LDM1ICsxMjIzLDYgQEAgREVGSU5FX1NUVUJf
RlVOQ1RJT04oSlNPYmplY3QqLCBvcF9uZXdfYQogICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShz
dGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzJdLmFycmF5QWxsb2NhdGlvblBy
b2ZpbGUoKSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5jb25zdGFudEJ1ZmZl
cihzdGFja0ZyYW1lLmFyZ3NbMF0uaW50MzIoKSksIHN0YWNrRnJhbWUuYXJnc1sxXS5pbnQzMigp
KTsKIH0KIAotREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2NvbnN0cnVj
dF9Ob3RKU0NvbnN0cnVjdCkKLXsKLSAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFt
ZSk7Ci0KLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwot
ICAgIEpTVmFsdWUgY2FsbGVlID0gY2FsbEZyYW1lLT5jYWxsZWVBc1ZhbHVlKCk7Ci0KLSAgICBD
b25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7Ci0gICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RU
eXBlID0gZ2V0Q29uc3RydWN0RGF0YShjYWxsZWUsIGNvbnN0cnVjdERhdGEpOwotCi0gICAgQVNT
RVJUKGNvbnN0cnVjdFR5cGUgIT0gQ29uc3RydWN0VHlwZUpTKTsKLSAgICBpZiAoY29uc3RydWN0
VHlwZSAhPSBDb25zdHJ1Y3RUeXBlSG9zdCkgewotICAgICAgICBBU1NFUlQoY29uc3RydWN0VHlw
ZSA9PSBDb25zdHJ1Y3RUeXBlTm9uZSk7Ci0gICAgICAgIEVycm9yV2l0aEV4ZWNBbmRDYWxsZWVG
dW5jdG9yIGZ1bmN0b3IgPSBFcnJvcldpdGhFeGVjQW5kQ2FsbGVlRnVuY3RvcihjcmVhdGVOb3RB
Q29uc3RydWN0b3JFcnJvciwgY2FsbGVlKTsKLSAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9u
RnJvbU9wQ2FsbDxFbmNvZGVkSlNWYWx1ZT4oc3RhY2tGcmFtZSwgY2FsbEZyYW1lLCBTVFVCX1JF
VFVSTl9BRERSRVNTLCAmZnVuY3Rvcik7Ci0gICAgfQotCi0gICAgRW5jb2RlZEpTVmFsdWUgcmV0
dXJuVmFsdWU7Ci0gICAgewotICAgICAgICBTYW1wbGluZ1Rvb2w6OkNhbGxSZWNvcmQgY2FsbFJl
Y29yZChDVElfU0FNUExFUiwgdHJ1ZSk7Ci0gICAgICAgIHJldHVyblZhbHVlID0gY29uc3RydWN0
RGF0YS5uYXRpdmUuZnVuY3Rpb24oY2FsbEZyYW1lKTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhY2tG
cmFtZS52bS0+ZXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbkZyb21P
cENhbGw8RW5jb2RlZEpTVmFsdWU+KHN0YWNrRnJhbWUsIGNhbGxGcmFtZSwgU1RVQl9SRVRVUk5f
QUREUkVTUyk7Ci0KLSAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci19Ci0KIHN0YXRpYyBKU1ZhbHVl
IGdldEJ5VmFsKAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGJhc2VWYWx1ZSwg
SlNWYWx1ZSBzdWJzY3JpcHQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKIHsKQEAg
LTE4OTcsMzAgKzE2MzUsNiBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihKU09iamVjdCosIG9wX25l
d19mCiAgICAgcmV0dXJuIGZ1bmM7CiB9CiAKLURFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRK
U1ZhbHVlLCBvcF9jYWxsX2V2YWwpCi17Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNr
RnJhbWUpOwotCi0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFt
ZTsKLSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgp
OwotICAgIEFTU0VSVChjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpLT5jb2Rl
VHlwZSgpICE9IEZ1bmN0aW9uQ29kZQotICAgICAgICB8fCAhY2FsbEZyYW1lLT5jYWxsZXJGcmFt
ZSgpLT5jb2RlQmxvY2soKS0+bmVlZHNGdWxsU2NvcGVDaGFpbigpCi0gICAgICAgIHx8IGNhbGxG
cmFtZS0+Y2FsbGVyRnJhbWUoKS0+dW5jaGVja2VkUihjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCkt
PmNvZGVCbG9jaygpLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKS5vZmZzZXQoKSkuanNWYWx1ZSgpKTsK
LQotICAgIGNhbGxGcmFtZS0+c2V0U2NvcGUoY2FsbGVyRnJhbWUtPnNjb3BlKCkpOwotICAgIGNh
bGxGcmFtZS0+c2V0UmV0dXJuUEMoc3RhdGljX2Nhc3Q8SW5zdHJ1Y3Rpb24qPigoU1RVQl9SRVRV
Uk5fQUREUkVTUykudmFsdWUoKSkpOwotICAgIGNhbGxGcmFtZS0+c2V0Q29kZUJsb2NrKDApOwot
Ci0gICAgaWYgKCFpc0hvc3RGdW5jdGlvbihjYWxsRnJhbWUtPmNhbGxlZUFzVmFsdWUoKSwgZ2xv
YmFsRnVuY0V2YWwpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7
Ci0KLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGV2YWwoY2FsbEZyYW1lKTsKLSAgICBpZiAoc3RhY2tG
cmFtZS52bS0+ZXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbkZyb21P
cENhbGw8RW5jb2RlZEpTVmFsdWU+KHN0YWNrRnJhbWUsIGNhbGxGcmFtZSwgU1RVQl9SRVRVUk5f
QUREUkVTUyk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci19Ci0KIERF
RklORV9TVFVCX0ZVTkNUSU9OKHZvaWQqLCBvcF90aHJvdykKIHsKICAgICBTVFVCX0lOSVRfU1RB
Q0tfRlJBTUUoc3RhY2tGcmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVi
cy5oCShyZXZpc2lvbiAxNTcxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0
dWJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzMCw5ICszMzAsNiBAQCBleHRlcm4gIkMiIHZvaWQg
Y3RpTWFzbVByb2JlVHJhbXBvbGluZSgpCiB2b2lkIHBlcmZvcm1QbGF0Zm9ybVNwZWNpZmljSklU
QXNzZXJ0aW9ucyhWTSopOwogCiBleHRlcm4gIkMiIHsKLUVuY29kZWRKU1ZhbHVlIEpJVF9TVFVC
IGN0aV9vcF9jYWxsX05vdEpTRnVuY3Rpb24oU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5U
RVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfY2FsbF9ldmFsKFNUVUJfQVJH
U19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3Rp
X29wX2NvbnN0cnVjdF9Ob3RKU0NvbnN0cnVjdChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9J
TlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9jaGVja19oYXNfaW5zdGFu
Y2UoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBK
SVRfU1RVQiBjdGlfb3BfY3JlYXRlX2FyZ3VtZW50cyhTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdU
Rl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9kZWxfYnlfaWQoU1RV
Ql9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CkBAIC0zOTIsMTUgKzM4OSwxMCBAQCB2
b2lkIEpJVF9TVFVCIGN0aV9vcF90aHJvd19zdGF0aWNfZXJyb3IoCiAjaWYgRU5BQkxFKERGR19K
SVQpCiB2b2lkIEpJVF9TVFVCIGN0aV9vcHRpbWl6ZShTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdU
Rl9JTlRFUk5BTDsKICNlbmRpZgotdm9pZCogSklUX1NUVUIgY3RpX29wX2NhbGxfaml0Q29tcGls
ZShTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKLXZvaWQqIEpJVF9TVFVCIGN0
aV9vcF9jb25zdHJ1Y3Rfaml0Q29tcGlsZShTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRF
Uk5BTDsKIHZvaWQqIEpJVF9TVFVCIGN0aV9vcF9zd2l0Y2hfY2hhcihTVFVCX0FSR1NfREVDTEFS
QVRJT04pIFdURl9JTlRFUk5BTDsKIHZvaWQqIEpJVF9TVFVCIGN0aV9vcF9zd2l0Y2hfaW1tKFNU
VUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogdm9pZCogSklUX1NUVUIgY3RpX29w
X3N3aXRjaF9zdHJpbmcoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiB2b2lk
KiBKSVRfU1RVQiBjdGlfb3BfdGhyb3coU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJO
QUw7Ci12b2lkKiBKSVRfU1RVQiBjdGlfdm1fbGF6eUxpbmtDYWxsKFNUVUJfQVJHU19ERUNMQVJB
VElPTikgV1RGX0lOVEVSTkFMOwotdm9pZCogSklUX1NUVUIgY3RpX3ZtX2xhenlMaW5rQ2xvc3Vy
ZUNhbGwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7Ci12b2lkKiBKSVRfU1RV
QiBjdGlfdm1fbGF6eUxpbmtDb25zdHJ1Y3QoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5U
RVJOQUw7CiB2b2lkKiBKSVRfU1RVQiBjdGlfdm1fdGhyb3coU1RVQl9BUkdTX0RFQ0xBUkFUSU9O
KSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsKIAogRW5jb2RlZEpTVmFsdWUgSklU
X1NUVUIgY3RpX29wX3Jlc29sdmVfc2NvcGUoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5U
RVJOQUw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRv
cnMuY3BwCShyZXZpc2lvbiAxNTcxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Ro
dW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEzNSArMzksNiBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIEpTSW50ZXJmYWNlSklUOjpDYWxsIG9sZFN0eWxlR2Vu
ZXJhdGVTbG93Q2FzZUZvcihWTSogdm0sIEpTSW50ZXJmYWNlSklUJiBqaXQpCi17Ci0gICAgaml0
LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZyYW1lLCBKU0lu
dGVyZmFjZUpJVDo6cmVnVDIpOwotICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0
cihKU1N0YWNrOjpTY29wZUNoYWluLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIsIEpTSW50ZXJmYWNl
SklUOjpyZWdUMik7Ci0gICAgaml0LmVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIoSlNJbnRl
cmZhY2VKSVQ6OnJlZ1QyLCBKU1N0YWNrOjpTY29wZUNoYWluKTsKLQotICAgIC8vIEFsc28gaW5p
dGlhbGl6ZSBSZXR1cm5QQyBhbmQgQ29kZUJsb2NrLCBsaWtlIGEgSlMgZnVuY3Rpb24gd291bGQu
Ci0gICAgaml0LnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChKU0ludGVyZmFjZUpJVDo6
cmVnVDMpOwotICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoSlNJbnRlcmZhY2VKSVQ6
OnJlZ1QzLCBKU1N0YWNrOjpSZXR1cm5QQyk7Ci0gICAgaml0LmVtaXRQdXRJbW1lZGlhdGVUb0Nh
bGxGcmFtZUhlYWRlcigwLCBKU1N0YWNrOjpDb2RlQmxvY2spOwotCi0gICAgaml0LnN0b3JlUHRy
KEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOwot
ICAgIGppdC5yZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKLSAgICBKU0ludGVyZmFjZUpJVDo6
Q2FsbCBjYWxsTm90SlNGdW5jdGlvbiA9IGppdC5jYWxsKCk7Ci0gICAgaml0LmVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZyYW1lLCBKU0ludGVyZmFjZUpJVDo6
Y2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgIGppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJl
dHVybihKU0ludGVyZmFjZUpJVDo6cmVnVDMpOwotICAgIGppdC5yZXQoKTsKLSAgICAKLSAgICBy
ZXR1cm4gY2FsbE5vdEpTRnVuY3Rpb247Ci19Ci0KLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgb2xkU3R5bGVMaW5rRm9yR2VuZXJhdG9yKFZNKiB2bSwgRnVuY3Rpb25QdHIgbGF6eUxpbmss
IEZ1bmN0aW9uUHRyIG5vdEpTRnVuY3Rpb24sIGNvbnN0IGNoYXIqIG5hbWUpCi17Ci0gICAgSlNJ
bnRlcmZhY2VKSVQgaml0KHZtKTsKLSAgICAKLSAgICBKU0ludGVyZmFjZUpJVDo6SnVtcExpc3Qg
c2xvd0Nhc2U7Ci0gICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzbG93Q2FzZS5hcHBlbmQo
aml0LmVtaXRKdW1wSWZOb3RKU0NlbGwoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKSk7Ci0gICAgc2xv
d0Nhc2UuYXBwZW5kKGppdC5lbWl0SnVtcElmTm90VHlwZShKU0ludGVyZmFjZUpJVDo6cmVnVDAs
IEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgSlNGdW5jdGlvblR5cGUpKTsKLSNlbHNlIC8vIFVTRShK
U1ZBTFVFNjQpCi0gICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihKU0ludGVyZmFjZUpJ
VDo6Tm90RXF1YWwsIEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgSlNJbnRlcmZhY2VKSVQ6OlRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwotICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuZW1p
dEp1bXBJZk5vdFR5cGUoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwLCBKU0ludGVyZmFjZUpJVDo6cmVn
VDEsIEpTRnVuY3Rpb25UeXBlKSk7Ci0jZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKLQotICAgIC8v
IEZpbmlzaCBjYW5vbmljYWwgaW5pdGlhbGl6YXRpb24gYmVmb3JlIEpTIGZ1bmN0aW9uIGNhbGwu
Ci0gICAgaml0LmxvYWRQdHIoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6
OnJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIEpTSW50ZXJmYWNlSklU
OjpyZWdUMSk7Ci0gICAgaml0LmVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIoSlNJbnRlcmZh
Y2VKSVQ6OnJlZ1QxLCBKU1N0YWNrOjpTY29wZUNoYWluKTsKLQotICAgIC8vIEFsc28gaW5pdGlh
bGl6ZSBSZXR1cm5QQyBmb3IgdXNlIGJ5IGxhenkgbGlua2luZyBhbmQgZXhjZXB0aW9ucy4KLSAg
ICBqaXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEpTSW50ZXJmYWNlSklUOjpyZWdU
Myk7Ci0gICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihKU0ludGVyZmFjZUpJVDo6cmVn
VDMsIEpTU3RhY2s6OlJldHVyblBDKTsKLSAgICAKLSAgICBqaXQuc3RvcmVQdHIoSlNJbnRlcmZh
Y2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0tPnRvcENhbGxGcmFtZSk7Ci0gICAgaml0LnJl
c3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwotICAgIEpTSW50ZXJmYWNlSklUOjpDYWxsIGNhbGxM
YXp5TGluayA9IGppdC5jYWxsKCk7Ci0gICAgaml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3Jl
UmV0dXJuKEpTSW50ZXJmYWNlSklUOjpyZWdUMyk7Ci0gICAgaml0Lmp1bXAoSlNJbnRlcmZhY2VK
SVQ6OnJlZ1QwKTsKLSAgICAKLSAgICBzbG93Q2FzZS5saW5rKCZqaXQpOwotICAgIEpTSW50ZXJm
YWNlSklUOjpDYWxsIGNhbGxOb3RKU0Z1bmN0aW9uID0gb2xkU3R5bGVHZW5lcmF0ZVNsb3dDYXNl
Rm9yKHZtLCBqaXQpOwotICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0
LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbExhenlMaW5rLCBs
YXp5TGluayk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhjYWxsTm90SlNGdW5jdGlvbiwgbm90SlNG
dW5jdGlvbik7Ci0gICAgCi0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgi
bGluayAlcyB0cmFtcG9saW5lIiwgbmFtZSkpOwotfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYg
b2xkU3R5bGVMaW5rQ2FsbEdlbmVyYXRvcihWTSogdm0pCi17Ci0gICAgcmV0dXJuIG9sZFN0eWxl
TGlua0ZvckdlbmVyYXRvcih2bSwgRnVuY3Rpb25QdHIoY3RpX3ZtX2xhenlMaW5rQ2FsbCksIEZ1
bmN0aW9uUHRyKGN0aV9vcF9jYWxsX05vdEpTRnVuY3Rpb24pLCAiY2FsbCIpOwotfQotCi1NYWNy
b0Fzc2VtYmxlckNvZGVSZWYgb2xkU3R5bGVMaW5rQ29uc3RydWN0R2VuZXJhdG9yKFZNKiB2bSkK
LXsKLSAgICByZXR1cm4gb2xkU3R5bGVMaW5rRm9yR2VuZXJhdG9yKHZtLCBGdW5jdGlvblB0cihj
dGlfdm1fbGF6eUxpbmtDb25zdHJ1Y3QpLCBGdW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0X05v
dEpTQ29uc3RydWN0KSwgImNvbnN0cnVjdCIpOwotfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYg
b2xkU3R5bGVMaW5rQ2xvc3VyZUNhbGxHZW5lcmF0b3IoVk0qIHZtKQotewotICAgIHJldHVybiBv
bGRTdHlsZUxpbmtGb3JHZW5lcmF0b3Iodm0sIEZ1bmN0aW9uUHRyKGN0aV92bV9sYXp5TGlua0Ns
b3N1cmVDYWxsKSwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbiksICJjbG9z
dXJlIGNhbGwiKTsKLX0KLQotc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvbGRTdHlsZVZp
cnR1YWxGb3JHZW5lcmF0b3IoVk0qIHZtLCBGdW5jdGlvblB0ciBjb21waWxlLCBGdW5jdGlvblB0
ciBub3RKU0Z1bmN0aW9uLCBjb25zdCBjaGFyKiBuYW1lLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IGtpbmQpCi17Ci0gICAgSlNJbnRlcmZhY2VKSVQgaml0KHZtKTsKLSAgICAKLSAgICBKU0ludGVy
ZmFjZUpJVDo6SnVtcExpc3Qgc2xvd0Nhc2U7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KSAgICAKLSAg
ICBzbG93Q2FzZS5hcHBlbmQoaml0LmVtaXRKdW1wSWZOb3RKU0NlbGwoSlNJbnRlcmZhY2VKSVQ6
OnJlZ1QwKSk7Ci0jZWxzZSAvLyBVU0UoSlNWQUxVRTY0KQotICAgIHNsb3dDYXNlLmFwcGVuZChq
aXQuYnJhbmNoMzIoSlNJbnRlcmZhY2VKSVQ6Ok5vdEVxdWFsLCBKU0ludGVyZmFjZUpJVDo6cmVn
VDEsIEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKLSNl
bmRpZiAvLyBVU0UoSlNWQUxVRTY0KQotICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuZW1pdEp1bXBJ
Zk5vdFR5cGUoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwLCBKU0ludGVyZmFjZUpJVDo6cmVnVDEsIEpT
RnVuY3Rpb25UeXBlKSk7Ci0KLSAgICAvLyBGaW5pc2ggY2Fub25pY2FsIGluaXRpYWxpemF0aW9u
IGJlZm9yZSBKUyBmdW5jdGlvbiBjYWxsLgotICAgIGppdC5sb2FkUHRyKEpTSW50ZXJmYWNlSklU
OjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjpyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29w
ZUNoYWluKCkpLCBKU0ludGVyZmFjZUpJVDo6cmVnVDEpOwotICAgIGppdC5lbWl0UHV0Q2VsbFRv
Q2FsbEZyYW1lSGVhZGVyKEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgSlNTdGFjazo6U2NvcGVDaGFp
bik7Ci0KLSAgICBqaXQubG9hZFB0cihKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFj
ZUpJVDo6cmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgpKSwgSlNJbnRlcmZh
Y2VKSVQ6OnJlZ1QyKTsKLSAgICBKU0ludGVyZmFjZUpJVDo6SnVtcCBoYXNDb2RlQmxvY2sxID0g
aml0LmJyYW5jaDMyKEpTSW50ZXJmYWNlSklUOjpHcmVhdGVyVGhhbk9yRXF1YWwsIEpTSW50ZXJm
YWNlSklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjpyZWdUMiwgRnVuY3Rpb25FeGVjdXRhYmxl
OjpvZmZzZXRPZk51bVBhcmFtZXRlcnNGb3Ioa2luZCkpLCBKU0ludGVyZmFjZUpJVDo6VHJ1c3Rl
ZEltbTMyKDApKTsKLSAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEpTSW50
ZXJmYWNlSklUOjpyZWdUMyk7Ci0gICAgaml0LnN0b3JlUHRyKEpTSW50ZXJmYWNlSklUOjpjYWxs
RnJhbWVSZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOwotICAgIGppdC5yZXN0b3JlQXJndW1l
bnRSZWZlcmVuY2UoKTsKLSAgICBKU0ludGVyZmFjZUpJVDo6Q2FsbCBjYWxsQ29tcGlsZSA9IGpp
dC5jYWxsKCk7Ci0gICAgaml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEpTSW50
ZXJmYWNlSklUOjpyZWdUMyk7Ci0gICAgaml0LmxvYWRQdHIoSlNJbnRlcmZhY2VKSVQ6OkFkZHJl
c3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUo
KSksIEpTSW50ZXJmYWNlSklUOjpyZWdUMik7Ci0KLSAgICBoYXNDb2RlQmxvY2sxLmxpbmsoJmpp
dCk7Ci0gICAgaml0LmxvYWRQdHIoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VK
SVQ6OnJlZ1QyLCBGdW5jdGlvbkV4ZWN1dGFibGU6Om9mZnNldE9mSklUQ29kZVdpdGhBcml0eUNo
ZWNrRm9yKGtpbmQpKSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKLSNpZiAhQVNTRVJUX0RJU0FC
TEVECi0gICAgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgb2sgPSBqaXQuYnJhbmNoVGVzdFB0cihKU0lu
dGVyZmFjZUpJVDo6Tm9uWmVybywgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKLSAgICBqaXQuYnJl
YWtwb2ludCgpOwotICAgIG9rLmxpbmsoJmppdCk7Ci0jZW5kaWYKLSAgICBqaXQuanVtcChKU0lu
dGVyZmFjZUpJVDo6cmVnVDApOwotICAgIAotICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7Ci0gICAg
SlNJbnRlcmZhY2VKSVQ6OkNhbGwgY2FsbE5vdEpTRnVuY3Rpb24gPSBvbGRTdHlsZUdlbmVyYXRl
U2xvd0Nhc2VGb3Iodm0sIGppdCk7Ci0gICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
dm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhjYWxsQ29t
cGlsZSwgY29tcGlsZSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhjYWxsTm90SlNGdW5jdGlvbiwg
bm90SlNGdW5jdGlvbik7Ci0gICAgCi0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZm
ZXIsICgidmlydHVhbCAlcyB0cmFtcG9saW5lIiwgbmFtZSkpOwotfQotCi1NYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgb2xkU3R5bGVWaXJ0dWFsQ2FsbEdlbmVyYXRvcihWTSogdm0pCi17Ci0gICAgcmV0
dXJuIG9sZFN0eWxlVmlydHVhbEZvckdlbmVyYXRvcih2bSwgRnVuY3Rpb25QdHIoY3RpX29wX2Nh
bGxfaml0Q29tcGlsZSksIEZ1bmN0aW9uUHRyKGN0aV9vcF9jYWxsX05vdEpTRnVuY3Rpb24pLCAi
Y2FsbCIsIENvZGVGb3JDYWxsKTsKLX0KLQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9sZFN0eWxl
VmlydHVhbENvbnN0cnVjdEdlbmVyYXRvcihWTSogdm0pCi17Ci0gICAgcmV0dXJuIG9sZFN0eWxl
VmlydHVhbEZvckdlbmVyYXRvcih2bSwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVjdF9qaXRD
b21waWxlKSwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVjdF9Ob3RKU0NvbnN0cnVjdCksICJj
b25zdHJ1Y3QiLCBDb2RlRm9yQ29uc3RydWN0KTsKLX0KLQogaW5saW5lIHZvaWQgZW1pdFBvaW50
ZXJWYWxpZGF0aW9uKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgcG9pbnRlckdQUikKIHsKICNp
ZiAhQVNTRVJUX0RJU0FCTEVECkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5r
R2VuZXJhdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1
bmtHZW5lcmF0b3JzLmgJKHJldmlzaW9uIDE1NzE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEyICszMSw2IEBA
CiAjaWYgRU5BQkxFKEpJVCkKIG5hbWVzcGFjZSBKU0MgewogCi1NYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgb2xkU3R5bGVMaW5rQ2FsbEdlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IG9sZFN0eWxlTGlua0NvbnN0cnVjdEdlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIG9sZFN0eWxlTGlua0Nsb3N1cmVDYWxsR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgb2xkU3R5bGVWaXJ0dWFsQ2FsbEdlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIG9sZFN0eWxlVmlydHVhbENvbnN0cnVjdEdlbmVyYXRvcihWTSopOwotCiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9y
KFZNKik7CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKFZN
Kik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213754</attachid>
            <date>2013-10-08 22:05:00 -0700</date>
            <delta_ts>2013-10-08 22:18:29 -0700</delta_ts>
            <desc>Patch - fixed style issue</desc>
            <filename>122453-2.patch</filename>
            <type>text/plain</type>
            <size>37903</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3MTU2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBA
CisyMDEzLTEwLTA4ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIFRyYW5zaXRpb24gY2FsbCBhbmQgY29uc3RydWN0IEpJVFN0dWJzIHRvIENDYWxsSGVscGVy
IGZ1bmN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTIyNDUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVHJhbnNpdGlvbmVkIGN0aV9vcF9jYWxsX2V2YWwgdG8gb3BlcmF0aW9uQ2FsbEV2YWwuICBN
aWdyYXRlZCBiYXNlbGluZSBKSVQgdG8gdXNlIHRoZSBzYW1lIAorICAgICAgICBjYWxsIHRodW5r
cyBhcyB0aGUgREZHLiAgRWxpbWluYXRlZCBhbGwgb2YgdGhlICJvbGRTdHlsZSIgdGh1bmtzIGFu
ZCByZWxhdGVkIGZ1bmN0aW9ucy4KKworICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5j
cHA6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6dW5saW5rKToKKyAgICAgICAgKiBqaXQv
SklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rRm9yKToKKyAgICAgICAgKEpTQzo6SklU
OjpsaW5rU2xvd0NhbGwpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklU
Q2FsbC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkpJVDo6
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZUNsb3N1cmVDYWxsKToKKyAgICAgICAgKiBqaXQvSklUQ2FsbDMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVD
YWxsRXZhbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nh
c2UpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlQ2xvc3VyZUNhbGwpOgorICAg
ICAgICAqIGppdC9KSVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6Y2FsbE9wZXJhdGlv
bldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKToKKyAgICAgICAgKiBqaXQvSklUT3Bl
cmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBq
aXQvSklUU3R1YnMuY3BwOgorICAgICAgICAqIGppdC9KSVRTdHVicy5oOgorICAgICAgICAqIGpp
dC9UaHVua0dlbmVyYXRvcnMuY3BwOgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMuaDoK
KwogMjAxMy0xMC0wOCAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAg
IENvbnZlcnQgZm9yLW9mIGl0ZXJhdGlvbiB0byBpbi1iYW5kIHNpZ25hbGxpbmcgc28gd2UgY2Fu
IHRyaXZpYWxseSBhdm9pZCB1bm5lY2Vzc2FyeSBvYmplY3QgYWxsb2NhdGlvbgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJldmlz
aW9uIDE1NzE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0lu
Zm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHZvaWQgQ2FsbExpbmtJbmZv
Ojp1bmxpbmsoVk0mIHZtLCBSZXBhdGMKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICNlbmRpZgogICAgIH0gZWxzZQotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhj
YWxsUmV0dXJuTG9jYXRpb24sIGNhbGxUeXBlID09IENvbnN0cnVjdCA/IHZtLmdldENUSVN0dWIo
b2xkU3R5bGVMaW5rQ29uc3RydWN0R2VuZXJhdG9yKS5jb2RlKCkgOiB2bS5nZXRDVElTdHViKG9s
ZFN0eWxlTGlua0NhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKGNhbGxSZXR1cm5Mb2NhdGlvbiwgY2FsbFR5cGUgPT0gQ29uc3RydWN0ID8gdm0uZ2V0
Q1RJU3R1YihsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpLmNvZGUoKSA6IHZtLmdldENUSVN0
dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKICAgICBoYXNTZWVuU2hvdWxkUmVw
YXRjaCA9IGZhbHNlOwogICAgIGNhbGxlZS5jbGVhcigpOwogICAgIHN0dWIuY2xlYXIoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE1NzE1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAyLDIzICs4
MDIsMjMgQEAgdm9pZCBKSVQ6OmxpbmtGb3IoRXhlY1N0YXRlKiBleGVjLCBKU0Z1bgogICAgICAg
ICBBU1NFUlQoY2FsbExpbmtJbmZvLT5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNhbGwKICAg
ICAgICAgICAgICAgIHx8IGNhbGxMaW5rSW5mby0+Y2FsbFR5cGUgPT0gQ2FsbExpbmtJbmZvOjpD
YWxsVmFyYXJncyk7CiAgICAgICAgIGlmIChjYWxsTGlua0luZm8tPmNhbGxUeXBlID09IENhbGxM
aW5rSW5mbzo6Q2FsbCkgewotICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExp
bmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKG9sZFN0eWxlTGlua0Ns
b3N1cmVDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOworICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKGxp
bmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZv
LT5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKG9sZFN0eWxlVmlydHVhbENhbGxH
ZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5r
SW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5r
R2VuZXJhdG9yKS5jb2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgQVNTRVJU
KGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2Fs
bExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKG9sZFN0eWxlVmly
dHVhbENvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIodmlydHVh
bENvbnN0cnVjdFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOwogfQogCiB2b2lkIEpJVDo6bGlua1Ns
b3dDYWxsKENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrLCBDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbykKIHsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2Nr
KTsKIAotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxv
Y2F0aW9uLCBjYWxsZXJDb2RlQmxvY2stPnZtKCktPmdldENUSVN0dWIob2xkU3R5bGVWaXJ0dWFs
Q2FsbEdlbmVyYXRvcikuY29kZSgpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlu
a0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgY2FsbGVyQ29kZUJsb2NrLT52bSgpLT5nZXRDVElT
dHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CiB9CiAKIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAkocmV2aXNpb24gMTU3MTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAkod29ya2luZyBjb3B5KQpAQCAtODY4LDYgKzg2OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0ciYsIGludCk7CiAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRSwgaW50KTsKICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FUCwg
aW50LCB2b2lkKik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25X
aXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihKX0pJVE9wZXJhdGlvbl9FKTsKICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFj
a09uRXhjZXB0aW9uKFZfSklUT3BlcmF0aW9uX0VDYiwgQ29kZUJsb2NrKik7CiAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4
Y2VwdGlvbihaX0pJVE9wZXJhdGlvbl9FKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMTU3MTUzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsOCAr
MjAyLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVMb2FkVmFyYXJncyhJbnN0cnVjdGlvbgogCiB2b2lk
IEpJVDo6Y29tcGlsZUNhbGxFdmFsKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKLSAgICBK
SVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfY2FsbF9ldmFsKTsgLy8gSW5pdGlhbGl6
ZXMgU2NvcGVDaGFpbjsgUmV0dXJuUEM7IENvZGVCbG9jay4KLSAgICBzdHViQ2FsbC5jYWxsKCk7
CisgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJh
dGlvbkNhbGxFdmFsKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgcmVnVDEsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOwogICAgIGVtaXRHZXRGcm9tQ2Fs
bEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZyYW1lLCBjYWxsRnJhbWVSZWdpc3Rlcik7
CiAKQEAgLTIxNyw3ICsyMTYsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2Uo
SW5zdHJ1CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogCiAgICAgZW1pdExvYWQoSlNTdGFjazo6
Q2FsbGVlLCByZWdUMSwgcmVnVDApOwotICAgIGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1
YihvbGRTdHlsZVZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOworICAgIGVtaXROYWtlZENh
bGwobV92bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOwog
CiAgICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKICAgICAKQEAgLTMwNSw4ICszMDQs
OCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlECiAKICAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotICAgIAotICAgIG1fY2Fs
bFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1
cm5Mb2NhdGlvbiA9IGVtaXROYWtlZENhbGwob3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0ID8gbV92
bS0+Z2V0Q1RJU3R1YihvbGRTdHlsZUxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKSA6IG1f
dm0tPmdldENUSVN0dWIob2xkU3R5bGVMaW5rQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKKworICAg
IG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNh
bGxSZXR1cm5Mb2NhdGlvbiA9IGVtaXROYWtlZENhbGwob3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0
ID8gbV92bS0+Z2V0Q1RJU3R1YihsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpLmNvZGUoKSA6
IG1fdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKIAogICAg
IHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7CiAgICAgZW1pdFB1dENhbGxSZXN1bHQoaW5z
dHJ1Y3Rpb24pOwpAQCAtMzM1LDcgKzMzNCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNs
b3N1cmVDYWxsKENhbGwKICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9u
UHRyKGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmso
ZG9uZSwgY2FsbExpbmtJbmZvLT5ob3RQYXRoT3RoZXIubGFiZWxBdE9mZnNldCgwKSk7Ci0gICAg
cGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbChtX3ZtLT5nZXRDVElTdHVi
KG9sZFN0eWxlVmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgIHBhdGNoQnVmZmVy
Lmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWwobV92bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2Fs
bFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKICAgICAKICAgICBSZWZQdHI8Q2xvc3VyZUNhbGxT
dHViUm91dGluZT4gc3R1YlJvdXRpbmUgPSBhZG9wdFJlZihuZXcgQ2xvc3VyZUNhbGxTdHViUm91
dGluZSgKICAgICAgICAgRklOQUxJWkVfQ09ERSgKQEAgLTM1Myw3ICszNTIsNyBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVDbG9zdXJlQ2FsbChDYWxsCiAgICAgcmVwYXRjaEJ1ZmZlci5yZXBs
YWNlV2l0aEp1bXAoCiAgICAgICAgIFJlcGF0Y2hCdWZmZXI6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRo
UGF0Y2hPblJlZ2lzdGVyKGNhbGxMaW5rSW5mby0+aG90UGF0aEJlZ2luKSwKICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgbV92bS0+Z2V0
Q1RJU3R1YihvbGRTdHlsZVZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOworICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBtX3ZtLT5n
ZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CiAgICAgCiAgICAg
Y2FsbExpbmtJbmZvLT5zdHViID0gc3R1YlJvdXRpbmUucmVsZWFzZSgpOwogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAxNTcxNTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEs
OCArMTMxLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVMb2FkVmFyYXJncyhJbnN0cnVjdGlvbgogCiB2
b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKLSAg
ICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfY2FsbF9ldmFsKTsgLy8gSW5pdGlh
bGl6ZXMgU2NvcGVDaGFpbjsgUmV0dXJuUEM7IENvZGVCbG9jay4KLSAgICBzdHViQ2FsbC5jYWxs
KCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9w
ZXJhdGlvbkNhbGxFdmFsKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2g2NChFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSkpKTsKICAgICBlbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgY2FsbEZyYW1lUmVn
aXN0ZXIpOwogCkBAIC0xNDYsNyArMTQ1LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNs
b3dDYXNlKEluc3RydQogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIAogICAgIGVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyNjQoSlNTdGFjazo6Q2FsbGVlLCByZWdUMCk7Ci0gICAgZW1pdE5ha2Vk
Q2FsbChtX3ZtLT5nZXRDVElTdHViKG9sZFN0eWxlVmlydHVhbENhbGxHZW5lcmF0b3IpLmNvZGUo
KSk7CisgICAgZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1bmtH
ZW5lcmF0b3IpLmNvZGUoKSk7CiAKICAgICBzYW1wbGVDb2RlQmxvY2sobV9jb2RlQmxvY2spOwog
ICAgIApAQCAtMjMyLDggKzIzMSw4IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2Uo
T3Bjb2RlSUQKICAgICB9CiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0gICAgCi0gICAgbV9j
YWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJl
dHVybkxvY2F0aW9uID0gZW1pdE5ha2VkQ2FsbChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyBt
X3ZtLT5nZXRDVElTdHViKG9sZFN0eWxlTGlua0NvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpIDog
bV92bS0+Z2V0Q1RJU3R1YihvbGRTdHlsZUxpbmtDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOworCisg
ICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0u
Y2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5ha2VkQ2FsbChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1
Y3QgPyBtX3ZtLT5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcikuY29kZSgp
IDogbV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOwogCiAg
ICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKICAgICAKQEAgLTI2Myw3ICsyNjIsNyBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDbG9zdXJlQ2FsbChDYWxsCiAgICAgCiAgICAgcGF0
Y2hCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNz
KCkpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby0+aG90UGF0aE90
aGVyLmxhYmVsQXRPZmZzZXQoMCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxv
Y2F0aW9uTGFiZWwobV92bS0+Z2V0Q1RJU3R1YihvbGRTdHlsZVZpcnR1YWxDYWxsR2VuZXJhdG9y
KS5jb2RlKCkpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVs
KG1fdm0tPmdldENUSVN0dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CiAg
ICAgCiAgICAgUmVmUHRyPENsb3N1cmVDYWxsU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0gYWRv
cHRSZWYobmV3IENsb3N1cmVDYWxsU3R1YlJvdXRpbmUoCiAgICAgICAgIEZJTkFMSVpFX0NPREUo
CkBAIC0yODEsOCArMjgwLDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ2xvc3VyZUNhbGwo
Q2FsbAogICAgIHJlcGF0Y2hCdWZmZXIucmVwbGFjZVdpdGhKdW1wKAogICAgICAgICBSZXBhdGNo
QnVmZmVyOjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3RlcihjYWxsTGlua0luZm8t
PmhvdFBhdGhCZWdpbiksCiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5j
b2RlKCkuY29kZSgpKSk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5j
YWxsUmV0dXJuTG9jYXRpb24sIG1fdm0tPmdldENUSVN0dWIob2xkU3R5bGVWaXJ0dWFsQ2FsbEdl
bmVyYXRvcikuY29kZSgpKTsKLSAgICAKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlu
a0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgbV92bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRo
dW5rR2VuZXJhdG9yKS5jb2RlKCkpOworCiAgICAgY2FsbExpbmtJbmZvLT5zdHViID0gc3R1YlJv
dXRpbmUucmVsZWFzZSgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElu
bGluZXMuaAkocmV2aXNpb24gMTU3MTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0Myw2ICsyNDMsMTIgQEAgQUxXQVlTX0lO
TElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChvcGVyYXRpb24sIGRzdCk7CiB9CiAKK0FM
V0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uV2l0aENh
bGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oSl9KSVRPcGVyYXRpb25fRSBvcGVyYXRpb24pCit7
CisgICAgc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKKyAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvbik7Cit9CisKIEFMV0FZU19J
TkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFt
ZVJvbGxiYWNrT25FeGNlcHRpb24oVl9KSVRPcGVyYXRpb25fRUNiIG9wZXJhdGlvbiwgQ29kZUJs
b2NrKiBwb2ludGVyKQogewogICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVk
SW1tUHRyKHBvaW50ZXIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTU3MTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkhvc3RDYWxsUmV0dXJuVmFsdWUu
aCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25XcmFwcGVycy5oIgorI2luY2x1ZGUgIkpTR2xvYmFs
T2JqZWN0RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlJl
cGF0Y2guaCIKIApAQCAtMzksNiArNDAsMjIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGV4dGVybiAi
QyIgewogCisjaWYgQ09NUElMRVIoTVNWQykKK3ZvaWQgKiBfUmV0dXJuQWRkcmVzcyh2b2lkKTsK
KyNwcmFnbWEgaW50cmluc2ljKF9SZXR1cm5BZGRyZXNzKQorCisjZGVmaW5lIE9VUl9SRVRVUk5f
QUREUkVTUyBfUmV0dXJuQWRkcmVzcygpCisjZWxzZQorI2RlZmluZSBPVVJfUkVUVVJOX0FERFJF
U1MgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApCisjZW5kaWYKKworI2lmIEVOQUJMRShPUENP
REVfU0FNUExJTkcpCisjZGVmaW5lIENUSV9TQU1QTEVSIHZtLT5pbnRlcnByZXRlci0+c2FtcGxl
cigpCisjZWxzZQorI2RlZmluZSBDVElfU0FNUExFUiAwCisjZW5kaWYKKworCiB2b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uU3RhY2tDaGVjayhFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayog
Y29kZUJsb2NrKQogewogICAgIC8vIFdlIHBhc3MgaW4gb3VyIG93biBjb2RlIGJsb2NrLCBiZWNh
dXNlIHRoZSBjYWxsZnJhbWUgaGFzbid0IGJlZW4gcG9wdWxhdGVkLgpAQCAtNDQ1LDYgKzQ2Miwy
OCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZVN0CiAgICAgYmFzZS0+
cHV0RGlyZWN0KHZtLCBvZmZzZXQsIEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkpOwogfQogCitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxFdmFsKEV4ZWNTdGF0ZSogZXhl
Y0NhbGxlZSkKK3sKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZXhlY0NhbGxlZS0+Y2Fs
bGVyRnJhbWUoKTsKKyAgICBBU1NFUlQoZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJs
b2NrKCktPmNvZGVUeXBlKCkgIT0gRnVuY3Rpb25Db2RlCisgICAgICAgIHx8ICFleGVjQ2FsbGVl
LT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKS0+bmVlZHNGdWxsU2NvcGVDaGFpbigpCisgICAg
ICAgIHx8IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCktPnVuY2hlY2tlZFIoZXhlY0NhbGxlZS0+
Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCktPmFjdGl2YXRpb25SZWdpc3RlcigpLm9mZnNldCgp
KS5qc1ZhbHVlKCkpOworCisgICAgZXhlY0NhbGxlZS0+c2V0U2NvcGUoY2FsbGVyRnJhbWUtPnNj
b3BlKCkpOworICAgIGV4ZWNDYWxsZWUtPnNldFJldHVyblBDKHN0YXRpY19jYXN0PEluc3RydWN0
aW9uKj4oT1VSX1JFVFVSTl9BRERSRVNTKSk7CisgICAgZXhlY0NhbGxlZS0+c2V0Q29kZUJsb2Nr
KDApOworCisgICAgaWYgKCFpc0hvc3RGdW5jdGlvbihleGVjQ2FsbGVlLT5jYWxsZWVBc1ZhbHVl
KCksIGdsb2JhbEZ1bmNFdmFsKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpOworCisgICAgVk0qIHZtID0gJmV4ZWNDYWxsZWUtPnZtKCk7CisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBldmFsKGV4ZWNDYWxsZWUpOworICAgIGlmICh2bS0+ZXhjZXB0aW9uKCkpCisgICAg
ICAgIHJldHVybiBFbmNvZGVkSlNWYWx1ZSgpOworICAgIAorICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKK30KKwogc3RhdGljIHZvaWQqIGhhbmRsZUhvc3RDYWxsKEV4ZWNTdGF0
ZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSBjYWxsZWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2lu
ZCkKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpOwpA
QCAtNTEzLDYgKzU1Miw3IEBAIGlubGluZSBjaGFyKiBsaW5rRm9yKEV4ZWNTdGF0ZSogZXhlY0Nh
bGwKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyOwogICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gMDsKKyAgICBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbyA9IGV4ZWMtPmNv
ZGVCbG9jaygpLT5nZXRDYWxsTGlua0luZm8oZXhlY0NhbGxlZS0+cmV0dXJuUEMoKSk7CiAgICAg
aWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCiAgICAgICAgIGNvZGVQdHIgPSBleGVj
dXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbCgpOwogICAg
IGVsc2UgewpAQCAtNTIzLDEyICs1NjMsMTEgQEAgaW5saW5lIGNoYXIqIGxpbmtGb3IoRXhlY1N0
YXRlKiBleGVjQ2FsbAogICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvciku
Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgICAgICB9CiAgICAgICAgIGNvZGVCbG9j
ayA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQpOwotICAgICAgICBpZiAo
ZXhlY0NhbGxlZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNp
emVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKQorICAgICAgICBpZiAoZXhlY0NhbGxl
ZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpIHx8IGNhbGxMaW5rSW5mby5jYWxsVHlwZSA9PSBDYWxs
TGlua0luZm86OkNhbGxWYXJhcmdzKQogICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhl
Y3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKGtpbmQpOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0
ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbCgpOwogICAgIH0KLSAgICBDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRDYWxsTGlua0luZm8o
ZXhlY0NhbGxlZS0+cmV0dXJuUEMoKSk7CiAgICAgaWYgKCFjYWxsTGlua0luZm8uc2Vlbk9uY2Uo
KSkKICAgICAgICAgY2FsbExpbmtJbmZvLnNldFNlZW4oKTsKICAgICBlbHNlCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMTU3MTUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE5OSw2ICsxOTksNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJ
ZE5vblN0CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1
aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCog
YmFzZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVS
TkFMOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdlQW5kRmlu
aXNoUHV0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQs
IEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkNhbGxFdmFsKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENhbGwoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFM
OwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2FsbChFeGVjU3RhdGUqKSBXVEZf
SU5URVJOQUw7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbChF
eGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmNwcAkocmV2aXNpb24gMTU3MTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNDcsMjA5ICsxMTQ3LDYgQEAgREVG
SU5FX1NUVUJfRlVOQ1RJT04oSlNPYmplY3QqLCBvcF9uZXdfZgogICAgIHJldHVybiBKU0Z1bmN0
aW9uOjpjcmVhdGUoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnZtKCksIHN0YWNrRnJhbWUuYXJnc1sw
XS5mdW5jdGlvbigpLCBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+c2NvcGUoKSk7CiB9CiAKLWlubGlu
ZSB2b2lkKiBqaXRDb21waWxlRm9yKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQpCi17Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgY3Rp
X29wX2NhbGxfaml0Q29tcGlsZSgpIGFuZAotICAgIC8vIGN0aV9vcF9jb25zdHJ1Y3Rfaml0Q29t
cGlsZSgpIEpJVCBnbHVlIHRyYW1wb2xpbmVzIHRvIGNvbXBpbGUgdGhlCi0gICAgLy8gY2FsbGVl
IGZ1bmN0aW9uIHRoYXQgd2Ugd2FudCB0byBjYWxsLiBCb3RoIGN0aSBnbHVlIHRyYW1wb2xpbmVz
IGFyZQotICAgIC8vIGNhbGxlZCBieSBKSVQnZWQgY29kZSB3aGljaCBoYXMgcHVzaGVkIGEgZnJh
bWUgYW5kIGluaXRpYWxpemVkIG1vc3Qgb2YKLSAgICAvLyB0aGUgZnJhbWUgY29udGVudCBleGNl
cHQgZm9yIHRoZSBjb2RlQmxvY2suCi0gICAgLy8KLSAgICAvLyBOb3JtYWxseSwgdGhlIHByb2xv
Z3VlIG9mIHRoZSBjYWxsZWUgaXMgc3VwcG9zZWQgdG8gc2V0IHRoZSBmcmFtZSdzIGNiCi0gICAg
Ly8gcG9pbnRlciB0byB0aGUgY2Igb2YgdGhlIGNhbGxlZS4gQnV0IGluIHRoaXMgY2FzZSwgdGhl
IGNhbGxlZSBjb2RlIGRvZXMKLSAgICAvLyBub3QgZXhpc3QgeWV0IHVudGlsIGl0IGlzIGNvbXBp
bGVkIGJlbG93LiBUaGUgY29tcGlsYXRpb24gcHJvY2VzcyB3aWxsCi0gICAgLy8gYWxsb2NhdGUg
bWVtb3J5IHdoaWNoIG1heSB0cmlnZ2VyIGEgR0MuIFRoZSBHQywgaW4gdHVybiwgd2lsbCBzY2Fu
IHRoZQotICAgIC8vIEpTU3RhY2ssIGFuZCB3aWxsIGV4cGVjdCB0aGUgZnJhbWUncyBjYiB0byBl
aXRoZXIgYmUgdmFsaWQgb3IgMC4gSWYKLSAgICAvLyB3ZSBkb24ndCBpbml0aWFsaXplIGl0LCB0
aGUgR0Mgd2lsbCBiZSBhY2Nlc3NpbmcgaW52YWxpZCBtZW1vcnkgYW5kIG1heQotICAgIC8vIGNy
YXNoLgotICAgIC8vCi0gICAgLy8gSGVuY2UsIHdlIHNob3VsZCBudWxsaWZ5IGl0IGhlcmUgYmVm
b3JlIHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsYXRpb24uCi0gICAgY2FsbEZyYW1lLT5zZXRD
b2RlQmxvY2soMCk7Ci0KLSAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0
aW9uKj4oY2FsbEZyYW1lLT5jYWxsZWUoKSk7Ci0gICAgQVNTRVJUKCFmdW5jdGlvbi0+aXNIb3N0
RnVuY3Rpb24oKSk7Ci0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gZnVuY3Rp
b24tPmpzRXhlY3V0YWJsZSgpOwotICAgIEpTU2NvcGUqIGNhbGxEYXRhU2NvcGVDaGFpbiA9IGZ1
bmN0aW9uLT5zY29wZSgpOwotICAgIEpTT2JqZWN0KiBlcnJvciA9IGV4ZWN1dGFibGUtPnByZXBh
cmVGb3JFeGVjdXRpb24oY2FsbEZyYW1lLCBjYWxsRGF0YVNjb3BlQ2hhaW4sIGtpbmQpOwotICAg
IGlmICghZXJyb3IpCi0gICAgICAgIHJldHVybiBmdW5jdGlvbjsKLSAgICBjYWxsRnJhbWUtPnZt
KCkudGhyb3dFeGNlcHRpb24oY2FsbEZyYW1lLCBlcnJvcik7Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LURFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQqLCBvcF9jYWxsX2ppdENvbXBpbGUpCi17Ci0gICAg
U1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotCi0jaWYgIUFTU0VSVF9ESVNBQkxF
RAotICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIEFTU0VSVChzdGFja0ZyYW1lLmNhbGxGcmFt
ZS0+Y2FsbGVlKCktPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKHN0YWNrRnJhbWUuY2FsbEZy
YW1lLT5jYWxsZWUoKSwgY2FsbERhdGEpID09IENhbGxUeXBlSlMpOwotI2VuZGlmCi0gICAgCi0g
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLSAgICB2b2lk
KiByZXN1bHQgPSBqaXRDb21waWxlRm9yKGNhbGxGcmFtZSwgQ29kZUZvckNhbGwpOwotICAgIGlm
ICghcmVzdWx0KQotICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb25Gcm9tT3BDYWxsPHZvaWQq
PihzdGFja0ZyYW1lLCBjYWxsRnJhbWUsIFNUVUJfUkVUVVJOX0FERFJFU1MpOwotCi0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCosIG9wX2NvbnN0cnVj
dF9qaXRDb21waWxlKQotewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsK
LQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7
Ci0gICAgQVNTRVJUKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNh
bGxlZSgpKS0+bWV0aG9kVGFibGUoKS0+Z2V0Q29uc3RydWN0RGF0YShzdGFja0ZyYW1lLmNhbGxG
cmFtZS0+Y2FsbGVlKCksIGNvbnN0cnVjdERhdGEpID09IENvbnN0cnVjdFR5cGVKUyk7Ci0jZW5k
aWYKLQotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7ICAg
IAotICAgIHZvaWQqIHJlc3VsdCA9IGppdENvbXBpbGVGb3IoY2FsbEZyYW1lLCBDb2RlRm9yQ29u
c3RydWN0KTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9u
RnJvbU9wQ2FsbDx2b2lkKj4oc3RhY2tGcmFtZSwgY2FsbEZyYW1lLCBTVFVCX1JFVFVSTl9BRERS
RVNTKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWlubGluZSB2b2lkKiBsYXp5TGlua0Zv
cihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotewot
ICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5j
YWxsZWUoKSk7Ci0gICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBjYWxsZWUtPmV4ZWN1
dGFibGUoKTsKLQotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyOwotICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gMDsKLSAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9ICZj
YWxsRnJhbWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpLT5nZXRDYWxsTGlua0luZm8oY2Fs
bEZyYW1lLT5yZXR1cm5QQygpKTsKLQotICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5
IGN0aV92bV9sYXp5TGlua0NhbGwoKSBhbmQKLSAgICAvLyBjdGlfbGF6eUxpbmtDb25zdHJ1Y3Qg
SklUIGdsdWUgdHJhbXBvbGluZXMgdG8gbGluayB0aGUgY2FsbGVlIGZ1bmN0aW9uCi0gICAgLy8g
dGhhdCB3ZSB3YW50IHRvIGNhbGwuIEJvdGggY3RpIGdsdWUgdHJhbXBvbGluZXMgYXJlIGNhbGxl
ZCBieSBKSVQnZWQKLSAgICAvLyBjb2RlIHdoaWNoIGhhcyBwdXNoZWQgYSBmcmFtZSBhbmQgaW5p
dGlhbGl6ZWQgbW9zdCBvZiB0aGUgZnJhbWUgY29udGVudAotICAgIC8vIGV4Y2VwdCBmb3IgdGhl
IGNvZGVCbG9jay4KLSAgICAvLwotICAgIC8vIE5vcm1hbGx5LCB0aGUgcHJvbG9ndWUgb2YgdGhl
IGNhbGxlZSBpcyBzdXBwb3NlZCB0byBzZXQgdGhlIGZyYW1lJ3MgY2IKLSAgICAvLyBmaWVsZCB0
byB0aGUgY2Igb2YgdGhlIGNhbGxlZS4gQnV0IGluIHRoaXMgY2FzZSwgdGhlIGNhbGxlZSBtYXkg
bm90Ci0gICAgLy8gZXhpc3QgeWV0LCBhbmQgaWYgbm90LCBpdCB3aWxsIGJlIGdlbmVyYXRlZCBp
biB0aGUgY29tcGlsYXRpb24gYmVsb3cuCi0gICAgLy8gVGhlIGNvbXBpbGF0aW9uIHdpbGwgYWxs
b2NhdGUgbWVtb3J5IHdoaWNoIG1heSB0cmlnZ2VyIGEgR0MuIFRoZSBHQywgaW4KLSAgICAvLyB0
dXJuLCB3aWxsIHNjYW4gdGhlIEpTU3RhY2ssIGFuZCB3aWxsIGV4cGVjdCB0aGUgZnJhbWUncyBj
YiB0byBiZSB2YWxpZAotICAgIC8vIG9yIDAuIElmIHdlIGRvbid0IGluaXRpYWxpemUgaXQsIHRo
ZSBHQyB3aWxsIGJlIGFjY2Vzc2luZyBpbnZhbGlkCi0gICAgLy8gbWVtb3J5IGFuZCBtYXkgY3Jh
c2guCi0gICAgLy8KLSAgICAvLyBIZW5jZSwgd2Ugc2hvdWxkIG51bGxpZnkgaXQgaGVyZSBiZWZv
cmUgcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxhdGlvbi4KLSAgICBjYWxsRnJhbWUtPnNldENv
ZGVCbG9jaygwKTsKLQotICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQotICAg
ICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS0+YWRk
cmVzc0ZvckNhbGwoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBm
dW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVj
dXRhYmxlKTsKLSAgICAgICAgaWYgKEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJs
ZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihjYWxsRnJhbWUsIGNhbGxlZS0+c2NvcGUoKSwga2luZCkp
IHsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+dm0oKS50aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUs
IGVycm9yKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIGNvZGVC
bG9jayA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQpOwotICAgICAgICBp
ZiAoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8
c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkKLSAgICAgICAgICAgIHx8IGNhbGxM
aW5rSW5mby0+Y2FsbFR5cGUgPT0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJncykKLSAgICAgICAg
ICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVXaXRoQXJp
dHlDaGVja0ZvcihraW5kKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY29kZVB0ciA9IGZ1
bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS0+YWRkcmVzc0ZvckNh
bGwoKTsKLSAgICB9Ci0gICAgCi0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoY2FsbEZy
YW1lLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKLSAgICBpZiAoIWNhbGxM
aW5rSW5mby0+c2Vlbk9uY2UoKSkKLSAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRTZWVuKCk7Ci0g
ICAgZWxzZQotICAgICAgICBKSVQ6OmxpbmtGb3IoY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpLCBj
YWxsZWUsIGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCksIGNvZGVCbG9jaywg
Y29kZVB0ciwgY2FsbExpbmtJbmZvLCAmY2FsbEZyYW1lLT52bSgpLCBraW5kKTsKLQotICAgIHJl
dHVybiBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci19Ci0KLURFRklORV9TVFVCX0ZVTkNU
SU9OKHZvaWQqLCB2bV9sYXp5TGlua0NhbGwpCi17Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1F
KHN0YWNrRnJhbWUpOwotCi0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNh
bGxGcmFtZTsKLSAgICB2b2lkKiByZXN1bHQgPSBsYXp5TGlua0ZvcihjYWxsRnJhbWUsIENvZGVG
b3JDYWxsKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9u
RnJvbU9wQ2FsbDx2b2lkKj4oc3RhY2tGcmFtZSwgY2FsbEZyYW1lLCBTVFVCX1JFVFVSTl9BRERS
RVNTKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLURFRklORV9TVFVCX0ZVTkNUSU9OKHZv
aWQqLCB2bV9sYXp5TGlua0Nsb3N1cmVDYWxsKQotewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFN
RShzdGFja0ZyYW1lKTsKLQotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5j
YWxsRnJhbWU7Ci0gICAgCi0gICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsRnJh
bWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpOwotICAgIFZNKiB2bSA9IGNhbGxlckNvZGVC
bG9jay0+dm0oKTsKLSAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9ICZjYWxsZXJDb2Rl
QmxvY2stPmdldENhbGxMaW5rSW5mbyhjYWxsRnJhbWUtPnJldHVyblBDKCkpOwotICAgIEpTRnVu
Y3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5jYWxsZWUoKSk7
Ci0gICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBjYWxsZWUtPmV4ZWN1dGFibGUoKTsK
LSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNhbGxlZS0+c3RydWN0dXJlKCk7Ci0gICAgCi0g
ICAgQVNTRVJUKGNhbGxMaW5rSW5mby0+Y2FsbFR5cGUgPT0gQ2FsbExpbmtJbmZvOjpDYWxsKTsK
LSAgICBBU1NFUlQoY2FsbExpbmtJbmZvLT5pc0xpbmtlZCgpKTsKLSAgICBBU1NFUlQoY2FsbExp
bmtJbmZvLT5jYWxsZWUpOwotICAgIEFTU0VSVChjYWxsZWUgIT0gY2FsbExpbmtJbmZvLT5jYWxs
ZWUuZ2V0KCkpOwotICAgIAotICAgIGJvb2wgc2hvdWxkTGluayA9IGZhbHNlOwotICAgIENvZGVC
bG9jayogY2FsbGVlQ29kZUJsb2NrID0gMDsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29k
ZVB0cjsKLSAgICAKLSAgICBpZiAoZXhlY3V0YWJsZSA9PSBjYWxsTGlua0luZm8tPmNhbGxlZS5n
ZXQoKS0+ZXhlY3V0YWJsZSgpCi0gICAgICAgICYmIHN0cnVjdHVyZSA9PSBjYWxsTGlua0luZm8t
PmNhbGxlZS5nZXQoKS0+c3RydWN0dXJlKCkpIHsKLSAgICAgICAgCi0gICAgICAgIHNob3VsZExp
bmsgPSB0cnVlOwotICAgICAgICAKLSAgICAgICAgQVNTRVJUKGV4ZWN1dGFibGUtPmhhc0pJVENv
ZGVGb3JDYWxsKCkpOwotICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklU
Q29kZUZvckNhbGwoKS0+YWRkcmVzc0ZvckNhbGwoKTsKLSAgICAgICAgaWYgKCFjYWxsZWUtPmV4
ZWN1dGFibGUoKS0+aXNIb3N0RnVuY3Rpb24oKSkgewotICAgICAgICAgICAgY2FsbGVlQ29kZUJs
b2NrID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5jb2RlQmxvY2tG
b3JDYWxsKCk7Ci0gICAgICAgICAgICBpZiAoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihjYWxsZWVDb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKSkpIHsKLSAgICAgICAgICAgICAgICBzaG91bGRMaW5rID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVXaXRoQXJpdHlD
aGVja0ZvcihDb2RlRm9yQ2FsbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVs
c2UgaWYgKGNhbGxlZS0+aXNIb3N0RnVuY3Rpb24oKSkKLSAgICAgICAgY29kZVB0ciA9IGV4ZWN1
dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCktPmFkZHJlc3NGb3JDYWxsKCk7Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIC8vIE5lZWQgdG8gY2xlYXIgdGhlIGNvZGUgYmxvY2sgYmVmb3JlIGNv
bXBpbGF0aW9uLCBiZWNhdXNlIGNvbXBpbGF0aW9uIGNhbiBHQy4KLSAgICAgICAgY2FsbEZyYW1l
LT5zZXRDb2RlQmxvY2soMCk7Ci0gICAgICAgIAotICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmN0aW9uRXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRh
YmxlKTsKLSAgICAgICAgSlNTY29wZSogc2NvcGVDaGFpbiA9IGNhbGxlZS0+c2NvcGUoKTsKLSAg
ICAgICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhl
Y3V0aW9uKGNhbGxGcmFtZSwgc2NvcGVDaGFpbiwgQ29kZUZvckNhbGwpOwotICAgICAgICBpZiAo
ZXJyb3IpIHsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+dm0oKS50aHJvd0V4Y2VwdGlvbihjYWxs
RnJhbWUsIGVycm9yKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2Rl
V2l0aEFyaXR5Q2hlY2tGb3IoQ29kZUZvckNhbGwpOwotICAgIH0KLSAgICAKLSAgICBpZiAoc2hv
dWxkTGluaykgewotICAgICAgICBBU1NFUlQoY29kZVB0cik7Ci0gICAgICAgIENvbmN1cnJlbnRK
SVRMb2NrZXIgbG9ja2VyKGNhbGxlckNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgSklUOjpj
b21waWxlQ2xvc3VyZUNhbGwodm0sIGNhbGxMaW5rSW5mbywgY2FsbGVyQ29kZUJsb2NrLCBjYWxs
ZWVDb2RlQmxvY2ssIHN0cnVjdHVyZSwgZXhlY3V0YWJsZSwgY29kZVB0cik7Ci0gICAgICAgIGNh
bGxMaW5rSW5mby0+aGFzU2VlbkNsb3N1cmUgPSB0cnVlOwotICAgIH0gZWxzZQotICAgICAgICBK
SVQ6OmxpbmtTbG93Q2FsbChjYWxsZXJDb2RlQmxvY2ssIGNhbGxMaW5rSW5mbyk7Ci0KLSAgICBy
ZXR1cm4gY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpOwotfQotCi1ERUZJTkVfU1RVQl9GVU5D
VElPTih2b2lkKiwgdm1fbGF6eUxpbmtDb25zdHJ1Y3QpCi17Ci0gICAgU1RVQl9JTklUX1NUQUNL
X0ZSQU1FKHN0YWNrRnJhbWUpOwotCi0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0Zy
YW1lLmNhbGxGcmFtZTsKLSAgICB2b2lkKiByZXN1bHQgPSBsYXp5TGlua0ZvcihjYWxsRnJhbWUs
IENvZGVGb3JDb25zdHJ1Y3QpOwotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gdGhy
b3dFeGNlcHRpb25Gcm9tT3BDYWxsPHZvaWQqPihzdGFja0ZyYW1lLCBjYWxsRnJhbWUsIFNUVUJf
UkVUVVJOX0FERFJFU1MpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogREVGSU5FX1NUVUJf
RlVOQ1RJT04oSlNPYmplY3QqLCBvcF9wdXNoX2FjdGl2YXRpb24pCiB7CiAgICAgU1RVQl9JTklU
X1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwpAQCAtMTM1OSwzNiArMTE1Niw2IEBAIERFRklORV9T
VFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3BfcHVzaF8KICAgICByZXR1cm4gYWN0aXZhdGlvbjsK
IH0KIAotREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2NhbGxfTm90SlNG
dW5jdGlvbikKLXsKLSAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7Ci0KLSAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwotICAgIAotICAg
IEpTVmFsdWUgY2FsbGVlID0gY2FsbEZyYW1lLT5jYWxsZWVBc1ZhbHVlKCk7Ci0KLSAgICBDYWxs
RGF0YSBjYWxsRGF0YTsKLSAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGNhbGxl
ZSwgY2FsbERhdGEpOwotCi0gICAgQVNTRVJUKGNhbGxUeXBlICE9IENhbGxUeXBlSlMpOwotICAg
IGlmIChjYWxsVHlwZSAhPSBDYWxsVHlwZUhvc3QpIHsKLSAgICAgICAgQVNTRVJUKGNhbGxUeXBl
ID09IENhbGxUeXBlTm9uZSk7Ci0gICAgICAgIEVycm9yV2l0aEV4ZWNBbmRDYWxsZWVGdW5jdG9y
IGZ1bmN0b3IgPSBFcnJvcldpdGhFeGVjQW5kQ2FsbGVlRnVuY3RvcihjcmVhdGVOb3RBRnVuY3Rp
b25FcnJvciwgY2FsbGVlKTsKLSAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uRnJvbU9wQ2Fs
bDxFbmNvZGVkSlNWYWx1ZT4oc3RhY2tGcmFtZSwgY2FsbEZyYW1lLCBTVFVCX1JFVFVSTl9BRERS
RVNTLCAmZnVuY3Rvcik7Ci0gICAgfQotCi0gICAgRW5jb2RlZEpTVmFsdWUgcmV0dXJuVmFsdWU7
Ci0gICAgewotICAgICAgICBTYW1wbGluZ1Rvb2w6OkNhbGxSZWNvcmQgY2FsbFJlY29yZChDVElf
U0FNUExFUiwgdHJ1ZSk7Ci0gICAgICAgIHJldHVyblZhbHVlID0gY2FsbERhdGEubmF0aXZlLmZ1
bmN0aW9uKGNhbGxGcmFtZSk7Ci0gICAgfQotCi0gICAgaWYgKHN0YWNrRnJhbWUudm0tPmV4Y2Vw
dGlvbigpKQotICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb25Gcm9tT3BDYWxsPEVuY29kZWRK
U1ZhbHVlPihzdGFja0ZyYW1lLCBjYWxsRnJhbWUsIFNUVUJfUkVUVVJOX0FERFJFU1MpOwotCi0g
ICAgcmV0dXJuIHJldHVyblZhbHVlOwotfQotCiBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVk
SlNWYWx1ZSwgb3BfY3JlYXRlX2FyZ3VtZW50cykKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJB
TUUoc3RhY2tGcmFtZSk7CkBAIC0xNDU2LDM1ICsxMjIzLDYgQEAgREVGSU5FX1NUVUJfRlVOQ1RJ
T04oSlNPYmplY3QqLCBvcF9uZXdfYQogICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShzdGFja0Zy
YW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzJdLmFycmF5QWxsb2NhdGlvblByb2ZpbGUo
KSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5jb25zdGFudEJ1ZmZlcihzdGFj
a0ZyYW1lLmFyZ3NbMF0uaW50MzIoKSksIHN0YWNrRnJhbWUuYXJnc1sxXS5pbnQzMigpKTsKIH0K
IAotREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2NvbnN0cnVjdF9Ob3RK
U0NvbnN0cnVjdCkKLXsKLSAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7Ci0K
LSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwotICAgIEpT
VmFsdWUgY2FsbGVlID0gY2FsbEZyYW1lLT5jYWxsZWVBc1ZhbHVlKCk7Ci0KLSAgICBDb25zdHJ1
Y3REYXRhIGNvbnN0cnVjdERhdGE7Ci0gICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0g
Z2V0Q29uc3RydWN0RGF0YShjYWxsZWUsIGNvbnN0cnVjdERhdGEpOwotCi0gICAgQVNTRVJUKGNv
bnN0cnVjdFR5cGUgIT0gQ29uc3RydWN0VHlwZUpTKTsKLSAgICBpZiAoY29uc3RydWN0VHlwZSAh
PSBDb25zdHJ1Y3RUeXBlSG9zdCkgewotICAgICAgICBBU1NFUlQoY29uc3RydWN0VHlwZSA9PSBD
b25zdHJ1Y3RUeXBlTm9uZSk7Ci0gICAgICAgIEVycm9yV2l0aEV4ZWNBbmRDYWxsZWVGdW5jdG9y
IGZ1bmN0b3IgPSBFcnJvcldpdGhFeGVjQW5kQ2FsbGVlRnVuY3RvcihjcmVhdGVOb3RBQ29uc3Ry
dWN0b3JFcnJvciwgY2FsbGVlKTsKLSAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uRnJvbU9w
Q2FsbDxFbmNvZGVkSlNWYWx1ZT4oc3RhY2tGcmFtZSwgY2FsbEZyYW1lLCBTVFVCX1JFVFVSTl9B
RERSRVNTLCAmZnVuY3Rvcik7Ci0gICAgfQotCi0gICAgRW5jb2RlZEpTVmFsdWUgcmV0dXJuVmFs
dWU7Ci0gICAgewotICAgICAgICBTYW1wbGluZ1Rvb2w6OkNhbGxSZWNvcmQgY2FsbFJlY29yZChD
VElfU0FNUExFUiwgdHJ1ZSk7Ci0gICAgICAgIHJldHVyblZhbHVlID0gY29uc3RydWN0RGF0YS5u
YXRpdmUuZnVuY3Rpb24oY2FsbEZyYW1lKTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhY2tGcmFtZS52
bS0+ZXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbkZyb21PcENhbGw8
RW5jb2RlZEpTVmFsdWU+KHN0YWNrRnJhbWUsIGNhbGxGcmFtZSwgU1RVQl9SRVRVUk5fQUREUkVT
Uyk7Ci0KLSAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci19Ci0KIHN0YXRpYyBKU1ZhbHVlIGdldEJ5
VmFsKAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1
ZSBzdWJzY3JpcHQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKIHsKQEAgLTE4OTcs
MzAgKzE2MzUsNiBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihKU09iamVjdCosIG9wX25ld19mCiAg
ICAgcmV0dXJuIGZ1bmM7CiB9CiAKLURFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVl
LCBvcF9jYWxsX2V2YWwpCi17Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUp
OwotCi0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLSAg
ICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOwotICAg
IEFTU0VSVChjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpLT5jb2RlVHlwZSgp
ICE9IEZ1bmN0aW9uQ29kZQotICAgICAgICB8fCAhY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpLT5j
b2RlQmxvY2soKS0+bmVlZHNGdWxsU2NvcGVDaGFpbigpCi0gICAgICAgIHx8IGNhbGxGcmFtZS0+
Y2FsbGVyRnJhbWUoKS0+dW5jaGVja2VkUihjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCktPmNvZGVC
bG9jaygpLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKS5vZmZzZXQoKSkuanNWYWx1ZSgpKTsKLQotICAg
IGNhbGxGcmFtZS0+c2V0U2NvcGUoY2FsbGVyRnJhbWUtPnNjb3BlKCkpOwotICAgIGNhbGxGcmFt
ZS0+c2V0UmV0dXJuUEMoc3RhdGljX2Nhc3Q8SW5zdHJ1Y3Rpb24qPigoU1RVQl9SRVRVUk5fQURE
UkVTUykudmFsdWUoKSkpOwotICAgIGNhbGxGcmFtZS0+c2V0Q29kZUJsb2NrKDApOwotCi0gICAg
aWYgKCFpc0hvc3RGdW5jdGlvbihjYWxsRnJhbWUtPmNhbGxlZUFzVmFsdWUoKSwgZ2xvYmFsRnVu
Y0V2YWwpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7Ci0KLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGV2YWwoY2FsbEZyYW1lKTsKLSAgICBpZiAoc3RhY2tGcmFtZS52
bS0+ZXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbkZyb21PcENhbGw8
RW5jb2RlZEpTVmFsdWU+KHN0YWNrRnJhbWUsIGNhbGxGcmFtZSwgU1RVQl9SRVRVUk5fQUREUkVT
Uyk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci19Ci0KIERFRklORV9T
VFVCX0ZVTkNUSU9OKHZvaWQqLCBvcF90aHJvdykKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJB
TUUoc3RhY2tGcmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCShy
ZXZpc2lvbiAxNTcxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMzMCw5ICszMzAsNiBAQCBleHRlcm4gIkMiIHZvaWQgY3RpTWFz
bVByb2JlVHJhbXBvbGluZSgpCiB2b2lkIHBlcmZvcm1QbGF0Zm9ybVNwZWNpZmljSklUQXNzZXJ0
aW9ucyhWTSopOwogCiBleHRlcm4gIkMiIHsKLUVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9v
cF9jYWxsX05vdEpTRnVuY3Rpb24oU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7
Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfY2FsbF9ldmFsKFNUVUJfQVJHU19ERUNM
QVJBVElPTikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2Nv
bnN0cnVjdF9Ob3RKU0NvbnN0cnVjdChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5B
TDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9jaGVja19oYXNfaW5zdGFuY2UoU1RV
Ql9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RV
QiBjdGlfb3BfY3JlYXRlX2FyZ3VtZW50cyhTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRF
Uk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9kZWxfYnlfaWQoU1RVQl9BUkdT
X0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CkBAIC0zOTIsMTUgKzM4OSwxMCBAQCB2b2lkIEpJ
VF9TVFVCIGN0aV9vcF90aHJvd19zdGF0aWNfZXJyb3IoCiAjaWYgRU5BQkxFKERGR19KSVQpCiB2
b2lkIEpJVF9TVFVCIGN0aV9vcHRpbWl6ZShTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRF
Uk5BTDsKICNlbmRpZgotdm9pZCogSklUX1NUVUIgY3RpX29wX2NhbGxfaml0Q29tcGlsZShTVFVC
X0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKLXZvaWQqIEpJVF9TVFVCIGN0aV9vcF9j
b25zdHJ1Y3Rfaml0Q29tcGlsZShTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsK
IHZvaWQqIEpJVF9TVFVCIGN0aV9vcF9zd2l0Y2hfY2hhcihTVFVCX0FSR1NfREVDTEFSQVRJT04p
IFdURl9JTlRFUk5BTDsKIHZvaWQqIEpJVF9TVFVCIGN0aV9vcF9zd2l0Y2hfaW1tKFNUVUJfQVJH
U19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogdm9pZCogSklUX1NUVUIgY3RpX29wX3N3aXRj
aF9zdHJpbmcoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiB2b2lkKiBKSVRf
U1RVQiBjdGlfb3BfdGhyb3coU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7Ci12
b2lkKiBKSVRfU1RVQiBjdGlfdm1fbGF6eUxpbmtDYWxsKFNUVUJfQVJHU19ERUNMQVJBVElPTikg
V1RGX0lOVEVSTkFMOwotdm9pZCogSklUX1NUVUIgY3RpX3ZtX2xhenlMaW5rQ2xvc3VyZUNhbGwo
U1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7Ci12b2lkKiBKSVRfU1RVQiBjdGlf
dm1fbGF6eUxpbmtDb25zdHJ1Y3QoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7
CiB2b2lkKiBKSVRfU1RVQiBjdGlfdm1fdGhyb3coU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBSRUZF
UkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsKIAogRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIg
Y3RpX29wX3Jlc29sdmVfc2NvcGUoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3Bw
CShyZXZpc2lvbiAxNTcxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEzNSArMzksNiBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotc3RhdGljIEpTSW50ZXJmYWNlSklUOjpDYWxsIG9sZFN0eWxlR2VuZXJhdGVT
bG93Q2FzZUZvcihWTSogdm0sIEpTSW50ZXJmYWNlSklUJiBqaXQpCi17Ci0gICAgaml0LmVtaXRH
ZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZyYW1lLCBKU0ludGVyZmFj
ZUpJVDo6cmVnVDIpOwotICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0
YWNrOjpTY29wZUNoYWluLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIsIEpTSW50ZXJmYWNlSklUOjpy
ZWdUMik7Ci0gICAgaml0LmVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIoSlNJbnRlcmZhY2VK
SVQ6OnJlZ1QyLCBKU1N0YWNrOjpTY29wZUNoYWluKTsKLQotICAgIC8vIEFsc28gaW5pdGlhbGl6
ZSBSZXR1cm5QQyBhbmQgQ29kZUJsb2NrLCBsaWtlIGEgSlMgZnVuY3Rpb24gd291bGQuCi0gICAg
aml0LnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChKU0ludGVyZmFjZUpJVDo6cmVnVDMp
OwotICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoSlNJbnRlcmZhY2VKSVQ6OnJlZ1Qz
LCBKU1N0YWNrOjpSZXR1cm5QQyk7Ci0gICAgaml0LmVtaXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFt
ZUhlYWRlcigwLCBKU1N0YWNrOjpDb2RlQmxvY2spOwotCi0gICAgaml0LnN0b3JlUHRyKEpTSW50
ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOwotICAgIGpp
dC5yZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKLSAgICBKU0ludGVyZmFjZUpJVDo6Q2FsbCBj
YWxsTm90SlNGdW5jdGlvbiA9IGppdC5jYWxsKCk7Ci0gICAgaml0LmVtaXRHZXRGcm9tQ2FsbEZy
YW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZyYW1lLCBKU0ludGVyZmFjZUpJVDo6Y2FsbEZy
YW1lUmVnaXN0ZXIpOwotICAgIGppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihK
U0ludGVyZmFjZUpJVDo6cmVnVDMpOwotICAgIGppdC5yZXQoKTsKLSAgICAKLSAgICByZXR1cm4g
Y2FsbE5vdEpTRnVuY3Rpb247Ci19Ci0KLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb2xk
U3R5bGVMaW5rRm9yR2VuZXJhdG9yKFZNKiB2bSwgRnVuY3Rpb25QdHIgbGF6eUxpbmssIEZ1bmN0
aW9uUHRyIG5vdEpTRnVuY3Rpb24sIGNvbnN0IGNoYXIqIG5hbWUpCi17Ci0gICAgSlNJbnRlcmZh
Y2VKSVQgaml0KHZtKTsKLSAgICAKLSAgICBKU0ludGVyZmFjZUpJVDo6SnVtcExpc3Qgc2xvd0Nh
c2U7Ci0gICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmVt
aXRKdW1wSWZOb3RKU0NlbGwoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKSk7Ci0gICAgc2xvd0Nhc2Uu
YXBwZW5kKGppdC5lbWl0SnVtcElmTm90VHlwZShKU0ludGVyZmFjZUpJVDo6cmVnVDAsIEpTSW50
ZXJmYWNlSklUOjpyZWdUMSwgSlNGdW5jdGlvblR5cGUpKTsKLSNlbHNlIC8vIFVTRShKU1ZBTFVF
NjQpCi0gICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihKU0ludGVyZmFjZUpJVDo6Tm90
RXF1YWwsIEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSkpOwotICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuZW1pdEp1bXBJ
Zk5vdFR5cGUoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwLCBKU0ludGVyZmFjZUpJVDo6cmVnVDEsIEpT
RnVuY3Rpb25UeXBlKSk7Ci0jZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKLQotICAgIC8vIEZpbmlz
aCBjYW5vbmljYWwgaW5pdGlhbGl6YXRpb24gYmVmb3JlIEpTIGZ1bmN0aW9uIGNhbGwuCi0gICAg
aml0LmxvYWRQdHIoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1Qw
LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIEpTSW50ZXJmYWNlSklUOjpyZWdU
MSk7Ci0gICAgaml0LmVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIoSlNJbnRlcmZhY2VKSVQ6
OnJlZ1QxLCBKU1N0YWNrOjpTY29wZUNoYWluKTsKLQotICAgIC8vIEFsc28gaW5pdGlhbGl6ZSBS
ZXR1cm5QQyBmb3IgdXNlIGJ5IGxhenkgbGlua2luZyBhbmQgZXhjZXB0aW9ucy4KLSAgICBqaXQu
cHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEpTSW50ZXJmYWNlSklUOjpyZWdUMyk7Ci0g
ICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihKU0ludGVyZmFjZUpJVDo6cmVnVDMsIEpT
U3RhY2s6OlJldHVyblBDKTsKLSAgICAKLSAgICBqaXQuc3RvcmVQdHIoSlNJbnRlcmZhY2VKSVQ6
OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0tPnRvcENhbGxGcmFtZSk7Ci0gICAgaml0LnJlc3RvcmVB
cmd1bWVudFJlZmVyZW5jZSgpOwotICAgIEpTSW50ZXJmYWNlSklUOjpDYWxsIGNhbGxMYXp5TGlu
ayA9IGppdC5jYWxsKCk7Ci0gICAgaml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJu
KEpTSW50ZXJmYWNlSklUOjpyZWdUMyk7Ci0gICAgaml0Lmp1bXAoSlNJbnRlcmZhY2VKSVQ6OnJl
Z1QwKTsKLSAgICAKLSAgICBzbG93Q2FzZS5saW5rKCZqaXQpOwotICAgIEpTSW50ZXJmYWNlSklU
OjpDYWxsIGNhbGxOb3RKU0Z1bmN0aW9uID0gb2xkU3R5bGVHZW5lcmF0ZVNsb3dDYXNlRm9yKHZt
LCBqaXQpOwotICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9C
QUxfVEhVTktfSUQpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbExhenlMaW5rLCBsYXp5TGlu
ayk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhjYWxsTm90SlNGdW5jdGlvbiwgbm90SlNGdW5jdGlv
bik7Ci0gICAgCi0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgibGluayAl
cyB0cmFtcG9saW5lIiwgbmFtZSkpOwotfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgb2xkU3R5
bGVMaW5rQ2FsbEdlbmVyYXRvcihWTSogdm0pCi17Ci0gICAgcmV0dXJuIG9sZFN0eWxlTGlua0Zv
ckdlbmVyYXRvcih2bSwgRnVuY3Rpb25QdHIoY3RpX3ZtX2xhenlMaW5rQ2FsbCksIEZ1bmN0aW9u
UHRyKGN0aV9vcF9jYWxsX05vdEpTRnVuY3Rpb24pLCAiY2FsbCIpOwotfQotCi1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgb2xkU3R5bGVMaW5rQ29uc3RydWN0R2VuZXJhdG9yKFZNKiB2bSkKLXsKLSAg
ICByZXR1cm4gb2xkU3R5bGVMaW5rRm9yR2VuZXJhdG9yKHZtLCBGdW5jdGlvblB0cihjdGlfdm1f
bGF6eUxpbmtDb25zdHJ1Y3QpLCBGdW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0X05vdEpTQ29u
c3RydWN0KSwgImNvbnN0cnVjdCIpOwotfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgb2xkU3R5
bGVMaW5rQ2xvc3VyZUNhbGxHZW5lcmF0b3IoVk0qIHZtKQotewotICAgIHJldHVybiBvbGRTdHls
ZUxpbmtGb3JHZW5lcmF0b3Iodm0sIEZ1bmN0aW9uUHRyKGN0aV92bV9sYXp5TGlua0Nsb3N1cmVD
YWxsKSwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbiksICJjbG9zdXJlIGNh
bGwiKTsKLX0KLQotc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvbGRTdHlsZVZpcnR1YWxG
b3JHZW5lcmF0b3IoVk0qIHZtLCBGdW5jdGlvblB0ciBjb21waWxlLCBGdW5jdGlvblB0ciBub3RK
U0Z1bmN0aW9uLCBjb25zdCBjaGFyKiBuYW1lLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQp
Ci17Ci0gICAgSlNJbnRlcmZhY2VKSVQgaml0KHZtKTsKLSAgICAKLSAgICBKU0ludGVyZmFjZUpJ
VDo6SnVtcExpc3Qgc2xvd0Nhc2U7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KSAgICAKLSAgICBzbG93
Q2FzZS5hcHBlbmQoaml0LmVtaXRKdW1wSWZOb3RKU0NlbGwoSlNJbnRlcmZhY2VKSVQ6OnJlZ1Qw
KSk7Ci0jZWxzZSAvLyBVU0UoSlNWQUxVRTY0KQotICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJh
bmNoMzIoSlNJbnRlcmZhY2VKSVQ6Ok5vdEVxdWFsLCBKU0ludGVyZmFjZUpJVDo6cmVnVDEsIEpT
SW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKLSNlbmRpZiAv
LyBVU0UoSlNWQUxVRTY0KQotICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuZW1pdEp1bXBJZk5vdFR5
cGUoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwLCBKU0ludGVyZmFjZUpJVDo6cmVnVDEsIEpTRnVuY3Rp
b25UeXBlKSk7Ci0KLSAgICAvLyBGaW5pc2ggY2Fub25pY2FsIGluaXRpYWxpemF0aW9uIGJlZm9y
ZSBKUyBmdW5jdGlvbiBjYWxsLgotICAgIGppdC5sb2FkUHRyKEpTSW50ZXJmYWNlSklUOjpBZGRy
ZXNzKEpTSW50ZXJmYWNlSklUOjpyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWlu
KCkpLCBKU0ludGVyZmFjZUpJVDo6cmVnVDEpOwotICAgIGppdC5lbWl0UHV0Q2VsbFRvQ2FsbEZy
YW1lSGVhZGVyKEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgSlNTdGFjazo6U2NvcGVDaGFpbik7Ci0K
LSAgICBqaXQubG9hZFB0cihKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6
cmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgpKSwgSlNJbnRlcmZhY2VKSVQ6
OnJlZ1QyKTsKLSAgICBKU0ludGVyZmFjZUpJVDo6SnVtcCBoYXNDb2RlQmxvY2sxID0gaml0LmJy
YW5jaDMyKEpTSW50ZXJmYWNlSklUOjpHcmVhdGVyVGhhbk9yRXF1YWwsIEpTSW50ZXJmYWNlSklU
OjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjpyZWdUMiwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZz
ZXRPZk51bVBhcmFtZXRlcnNGb3Ioa2luZCkpLCBKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMy
KDApKTsKLSAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEpTSW50ZXJmYWNl
SklUOjpyZWdUMyk7Ci0gICAgaml0LnN0b3JlUHRyKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVS
ZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOwotICAgIGppdC5yZXN0b3JlQXJndW1lbnRSZWZl
cmVuY2UoKTsKLSAgICBKU0ludGVyZmFjZUpJVDo6Q2FsbCBjYWxsQ29tcGlsZSA9IGppdC5jYWxs
KCk7Ci0gICAgaml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEpTSW50ZXJmYWNl
SklUOjpyZWdUMyk7Ci0gICAgaml0LmxvYWRQdHIoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJ
bnRlcmZhY2VKSVQ6OnJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksIEpT
SW50ZXJmYWNlSklUOjpyZWdUMik7Ci0KLSAgICBoYXNDb2RlQmxvY2sxLmxpbmsoJmppdCk7Ci0g
ICAgaml0LmxvYWRQdHIoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJl
Z1QyLCBGdW5jdGlvbkV4ZWN1dGFibGU6Om9mZnNldE9mSklUQ29kZVdpdGhBcml0eUNoZWNrRm9y
KGtpbmQpKSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0g
ICAgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgb2sgPSBqaXQuYnJhbmNoVGVzdFB0cihKU0ludGVyZmFj
ZUpJVDo6Tm9uWmVybywgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKLSAgICBqaXQuYnJlYWtwb2lu
dCgpOwotICAgIG9rLmxpbmsoJmppdCk7Ci0jZW5kaWYKLSAgICBqaXQuanVtcChKU0ludGVyZmFj
ZUpJVDo6cmVnVDApOwotICAgIAotICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7Ci0gICAgSlNJbnRl
cmZhY2VKSVQ6OkNhbGwgY2FsbE5vdEpTRnVuY3Rpb24gPSBvbGRTdHlsZUdlbmVyYXRlU2xvd0Nh
c2VGb3Iodm0sIGppdCk7Ci0gICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZq
aXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhjYWxsQ29tcGlsZSwg
Y29tcGlsZSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhjYWxsTm90SlNGdW5jdGlvbiwgbm90SlNG
dW5jdGlvbik7Ci0gICAgCi0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgi
dmlydHVhbCAlcyB0cmFtcG9saW5lIiwgbmFtZSkpOwotfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgb2xkU3R5bGVWaXJ0dWFsQ2FsbEdlbmVyYXRvcihWTSogdm0pCi17Ci0gICAgcmV0dXJuIG9s
ZFN0eWxlVmlydHVhbEZvckdlbmVyYXRvcih2bSwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfaml0
Q29tcGlsZSksIEZ1bmN0aW9uUHRyKGN0aV9vcF9jYWxsX05vdEpTRnVuY3Rpb24pLCAiY2FsbCIs
IENvZGVGb3JDYWxsKTsKLX0KLQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9sZFN0eWxlVmlydHVh
bENvbnN0cnVjdEdlbmVyYXRvcihWTSogdm0pCi17Ci0gICAgcmV0dXJuIG9sZFN0eWxlVmlydHVh
bEZvckdlbmVyYXRvcih2bSwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVjdF9qaXRDb21waWxl
KSwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVjdF9Ob3RKU0NvbnN0cnVjdCksICJjb25zdHJ1
Y3QiLCBDb2RlRm9yQ29uc3RydWN0KTsKLX0KLQogaW5saW5lIHZvaWQgZW1pdFBvaW50ZXJWYWxp
ZGF0aW9uKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgcG9pbnRlckdQUikKIHsKICNpZiAhQVNT
RVJUX0RJU0FCTEVECkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJh
dG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5l
cmF0b3JzLmgJKHJldmlzaW9uIDE1NzE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
VGh1bmtHZW5lcmF0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEyICszMSw2IEBACiAjaWYg
RU5BQkxFKEpJVCkKIG5hbWVzcGFjZSBKU0MgewogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgb2xk
U3R5bGVMaW5rQ2FsbEdlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9sZFN0
eWxlTGlua0NvbnN0cnVjdEdlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9s
ZFN0eWxlTGlua0Nsb3N1cmVDYWxsR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgb2xkU3R5bGVWaXJ0dWFsQ2FsbEdlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIG9sZFN0eWxlVmlydHVhbENvbnN0cnVjdEdlbmVyYXRvcihWTSopOwotCiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNKik7
CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7Cg==
</data>
<flag name="review"
          id="236156"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>