<?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>121387</bug_id>
          
          <creation_ts>2013-09-15 06:13:14 -0700</creation_ts>
          <short_desc>[CTTE] Node subclasses should take a Document by reference in their constructor (Part 6)</short_desc>
          <delta_ts>2013-09-15 06:30:47 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>philn</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>929426</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-09-15 06:13:14 -0700</bug_when>
    <thetext>[CTTE] Node subclasses should take a Document by reference in their constructor (Part 6)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>929427</commentid>
    <comment_count>1</comment_count>
      <attachid>211703</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-09-15 06:21:11 -0700</bug_when>
    <thetext>Created attachment 211703
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>929428</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-09-15 06:30:47 -0700</bug_when>
    <thetext>Committed r155808: &lt;http://trac.webkit.org/changeset/155808&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211703</attachid>
            <date>2013-09-15 06:21:11 -0700</date>
            <delta_ts>2013-09-15 06:23:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-121387-20130915062110.patch</filename>
            <type>text/plain</type>
            <size>52668</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NTgwNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDEzLTA5LTE1ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NUVEVdIE5vZGUgc3ViY2xhc3NlcyBz
aG91bGQgdGFrZSBhIERvY3VtZW50IGJ5IHJlZmVyZW5jZSBpbiB0aGVpciBjb25zdHJ1Y3RvciAo
UGFydCA2KQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTIxMzg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Q29udmVydHMgdGhlIGZvbGxvd2luZyB0byB0YWtlIGEgRG9jdW1lbnQgcmVmZXJlbmNlOgorICAg
ICAgICAgICAgLSBBdHRyCisgICAgICAgICAgICAtIENEQVRBU2VjdGlvbgorICAgICAgICAgICAg
LSBDaGFyYWN0ZXJEYXRhCisgICAgICAgICAgICAtIENvbW1lbnQKKyAgICAgICAgICAgIC0gRE9N
SW1wbGVtZW50YXRpb24KKyAgICAgICAgICAgIC0gRG9jdW1lbnRGcmFnbWVudAorICAgICAgICAg
ICAgLSBEb2N1bWVudFR5cGUKKyAgICAgICAgICAgIC0gRW50aXR5UmVmZXJlbmNlCisgICAgICAg
ICAgICAtIE5vdGF0aW9uCisgICAgICAgICAgICAtIFByb2Nlc3NpbmdJbnN0cnVjdGlvbgorICAg
ICAgICAgICAgLSBTaGFkb3dSb290CisgICAgICAgICAgICAtIFRlbXBsYXRlQ29udGVudERvY3Vt
ZW50RnJhZ21lbnQKKyAgICAgICAgICAgIC0gVGV4dAorCiAyMDEzLTA5LTE1ICBBbmRyZWFzIEts
aW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgUmVuZGVyT2JqZWN0Ojpj
bGVhck5vZGUoKS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9BdHRyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQXR0ci5jcHAJKHJldmlzaW9uIDE1NTgwNykKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9BdHRyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsOCBA
QCBBdHRyOjpBdHRyKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpCiB7CiB9CiAKLUF0dHI6
OkF0dHIoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25z
dCBBdG9taWNTdHJpbmcmIHN0YW5kYWxvbmVWYWx1ZSkKLSAgICA6IENvbnRhaW5lck5vZGUoZG9j
dW1lbnQpCitBdHRyOjpBdHRyKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBzdGFuZGFsb25lVmFsdWUpCisgICAgOiBDb250
YWluZXJOb2RlKCZkb2N1bWVudCkKICAgICAsIG1fZWxlbWVudCgwKQogICAgICwgbV9uYW1lKG5h
bWUpCiAgICAgLCBtX3N0YW5kYWxvbmVWYWx1ZShzdGFuZGFsb25lVmFsdWUpCkBAIC02NCw3ICs2
NCw3IEBAIFBhc3NSZWZQdHI8QXR0cj4gQXR0cjo6Y3JlYXRlKEVsZW1lbnQqIGUKICAgICByZXR1
cm4gYXR0ci5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8QXR0cj4gQXR0cjo6Y3JlYXRlKERv
Y3VtZW50KiBkb2N1bWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWlj
U3RyaW5nJiB2YWx1ZSkKK1Bhc3NSZWZQdHI8QXR0cj4gQXR0cjo6Y3JlYXRlKERvY3VtZW50JiBk
b2N1bWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2
YWx1ZSkKIHsKICAgICBSZWZQdHI8QXR0cj4gYXR0ciA9IGFkb3B0UmVmKG5ldyBBdHRyKGRvY3Vt
ZW50LCBuYW1lLCB2YWx1ZSkpOwogICAgIGF0dHItPmNyZWF0ZVRleHRDaGlsZCgpOwpAQCAtMTQy
LDcgKzE0Miw3IEBAIHZvaWQgQXR0cjo6c2V0Tm9kZVZhbHVlKGNvbnN0IFN0cmluZyYgdiwKIAog
UGFzc1JlZlB0cjxOb2RlPiBBdHRyOjpjbG9uZU5vZGUoYm9vbCAvKmRlZXAqLykKIHsKLSAgICBS
ZWZQdHI8QXR0cj4gY2xvbmUgPSBhZG9wdFJlZihuZXcgQXR0cigmZG9jdW1lbnQoKSwgcXVhbGlm
aWVkTmFtZSgpLCB2YWx1ZSgpKSk7CisgICAgUmVmUHRyPEF0dHI+IGNsb25lID0gYWRvcHRSZWYo
bmV3IEF0dHIoZG9jdW1lbnQoKSwgcXVhbGlmaWVkTmFtZSgpLCB2YWx1ZSgpKSk7CiAgICAgY2xv
bmVDaGlsZE5vZGVzKGNsb25lLmdldCgpKTsKICAgICByZXR1cm4gY2xvbmUucmVsZWFzZSgpOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0F0dHIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vQXR0ci5oCShyZXZpc2lvbiAxNTU4MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vQXR0ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIGNsYXNzIE11dGFibGVT
dHlsZVByb3BlcnR5U2V0OwogY2xhc3MgQXR0ciBGSU5BTCA6IHB1YmxpYyBDb250YWluZXJOb2Rl
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdHRyPiBjcmVhdGUoRWxlbWVudCos
IGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdHRyPiBjcmVh
dGUoRG9jdW1lbnQqLCBjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiB2
YWx1ZSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QXR0cj4gY3JlYXRlKERvY3VtZW50JiwgY29u
c3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpOwogICAgIHZpcnR1
YWwgfkF0dHIoKTsKIAogICAgIFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gcXVhbGlmaWVk
TmFtZSgpLnRvU3RyaW5nKCk7IH0KQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogCiBwcml2YXRl
OgogICAgIEF0dHIoRWxlbWVudCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKLSAgICBBdHRyKERv
Y3VtZW50KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUp
OworICAgIEF0dHIoRG9jdW1lbnQmLCBjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWlj
U3RyaW5nJiB2YWx1ZSk7CiAKICAgICB2b2lkIGNyZWF0ZVRleHRDaGlsZCgpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vQ0RBVEFTZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vQ0RBVEFTZWN0aW9uLmNwcAkocmV2aXNpb24gMTU1ODA3KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0NEQVRBU2VjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEyICsy
NiwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWlubGluZSBDREFUQVNlY3Rpb246OkNE
QVRBU2VjdGlvbihEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgZGF0YSkKK2lubGlu
ZSBDREFUQVNlY3Rpb246OkNEQVRBU2VjdGlvbihEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFN0
cmluZyYgZGF0YSkKICAgICA6IFRleHQoZG9jdW1lbnQsIGRhdGEsIENyZWF0ZVRleHQpCiB7CiB9
CiAKLVBhc3NSZWZQdHI8Q0RBVEFTZWN0aW9uPiBDREFUQVNlY3Rpb246OmNyZWF0ZShEb2N1bWVu
dCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgZGF0YSkKK1Bhc3NSZWZQdHI8Q0RBVEFTZWN0aW9u
PiBDREFUQVNlY3Rpb246OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYg
ZGF0YSkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENEQVRBU2VjdGlvbihkb2N1bWVudCwg
ZGF0YSkpOwogfQpAQCAtNDgsNyArNDgsNyBAQCBOb2RlOjpOb2RlVHlwZSBDREFUQVNlY3Rpb246
Om5vZGVUeXBlKCkgCiAKIFBhc3NSZWZQdHI8Tm9kZT4gQ0RBVEFTZWN0aW9uOjpjbG9uZU5vZGUo
Ym9vbCAvKmRlZXAqLykKIHsKLSAgICByZXR1cm4gY3JlYXRlKCZkb2N1bWVudCgpLCBkYXRhKCkp
OworICAgIHJldHVybiBjcmVhdGUoZG9jdW1lbnQoKSwgZGF0YSgpKTsKIH0KIAogYm9vbCBDREFU
QVNlY3Rpb246OmNoaWxkVHlwZUFsbG93ZWQoTm9kZVR5cGUpIGNvbnN0CkBAIC01OCw3ICs1OCw3
IEBAIGJvb2wgQ0RBVEFTZWN0aW9uOjpjaGlsZFR5cGVBbGxvd2VkKE5vZGUKIAogUGFzc1JlZlB0
cjxUZXh0PiBDREFUQVNlY3Rpb246OnZpcnR1YWxDcmVhdGUoY29uc3QgU3RyaW5nJiBkYXRhKQog
ewotICAgIHJldHVybiBjcmVhdGUoJmRvY3VtZW50KCksIGRhdGEpOworICAgIHJldHVybiBjcmVh
dGUoZG9jdW1lbnQoKSwgZGF0YSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9DREFUQVNlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vQ0RBVEFTZWN0aW9uLmgJKHJldmlzaW9uIDE1NTgwNykKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9DREFUQVNlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDEw
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0RBVEFTZWN0aW9uIEZJTkFMIDogcHVi
bGljIFRleHQgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENEQVRBU2VjdGlvbj4g
Y3JlYXRlKERvY3VtZW50KiwgY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
Q0RBVEFTZWN0aW9uPiBjcmVhdGUoRG9jdW1lbnQmLCBjb25zdCBTdHJpbmcmKTsKIAogcHJpdmF0
ZToKLSAgICBDREFUQVNlY3Rpb24oRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmKTsKKyAgICBDREFU
QVNlY3Rpb24oRG9jdW1lbnQmLCBjb25zdCBTdHJpbmcmKTsKIAogICAgIHZpcnR1YWwgU3RyaW5n
IG5vZGVOYW1lKCkgY29uc3Q7CiAgICAgdmlydHVhbCBOb2RlVHlwZSBub2RlVHlwZSgpIGNvbnN0
OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5oCShyZXZpc2lvbiAxNTU4MDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OCw4ICs0OCw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBwYXJzZXJBcHBlbmREYXRhKGNvbnN0
IFN0cmluZyYgc3RyaW5nLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aExpbWl0KTsK
IAogcHJvdGVjdGVkOgotICAgIENoYXJhY3RlckRhdGEoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25z
dCBTdHJpbmcmIHRleHQsIENvbnN0cnVjdGlvblR5cGUgdHlwZSkKLSAgICAgICAgOiBOb2RlKGRv
Y3VtZW50LCB0eXBlKQorICAgIENoYXJhY3RlckRhdGEoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25z
dCBTdHJpbmcmIHRleHQsIENvbnN0cnVjdGlvblR5cGUgdHlwZSkKKyAgICAgICAgOiBOb2RlKCZk
b2N1bWVudCwgdHlwZSkKICAgICAgICAgLCBtX2RhdGEoIXRleHQuaXNOdWxsKCkgPyB0ZXh0IDog
ZW1wdHlTdHJpbmcoKSkKICAgICB7CiAgICAgICAgIEFTU0VSVCh0eXBlID09IENyZWF0ZU90aGVy
IHx8IHR5cGUgPT0gQ3JlYXRlVGV4dCB8fCB0eXBlID09IENyZWF0ZUVkaXRpbmdUZXh0KTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db21tZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vQ29tbWVudC5jcHAJKHJldmlzaW9uIDE1NTgwNykKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9Db21tZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTIgKzI2LDEyIEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotaW5saW5lIENvbW1lbnQ6OkNvbW1lbnQoRG9jdW1lbnQq
IGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQpCitpbmxpbmUgQ29tbWVudDo6Q29tbWVudChE
b2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCkKICAgICA6IENoYXJhY3RlckRh
dGEoZG9jdW1lbnQsIHRleHQsIENyZWF0ZU90aGVyKQogewogfQogCi1QYXNzUmVmUHRyPENvbW1l
bnQ+IENvbW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4
dCkKK1Bhc3NSZWZQdHI8Q29tbWVudD4gQ29tbWVudDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVu
dCwgY29uc3QgU3RyaW5nJiB0ZXh0KQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29tbWVu
dChkb2N1bWVudCwgdGV4dCkpOwogfQpAQCAtNDgsNyArNDgsNyBAQCBOb2RlOjpOb2RlVHlwZSBD
b21tZW50Ojpub2RlVHlwZSgpIGNvbnN0CiAKIFBhc3NSZWZQdHI8Tm9kZT4gQ29tbWVudDo6Y2xv
bmVOb2RlKGJvb2wgLypkZWVwKi8pCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZSgmZG9jdW1lbnQoKSwg
ZGF0YSgpKTsKKyAgICByZXR1cm4gY3JlYXRlKGRvY3VtZW50KCksIGRhdGEoKSk7CiB9CiAKIGJv
b2wgQ29tbWVudDo6Y2hpbGRUeXBlQWxsb3dlZChOb2RlVHlwZSkgY29uc3QKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9Db21tZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L0NvbW1lbnQuaAkocmV2aXNpb24gMTU1ODA3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgQ29tbWVudCBGSU5BTCA6IHB1YmxpYyBDaGFyYWN0ZXJEYXRhIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb21tZW50PiBjcmVhdGUoRG9jdW1lbnQqLCBjb25z
dCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb21tZW50PiBjcmVhdGUoRG9jdW1l
bnQmLCBjb25zdCBTdHJpbmcmKTsKIAogcHJpdmF0ZToKLSAgICBDb21tZW50KERvY3VtZW50Kiwg
Y29uc3QgU3RyaW5nJik7CisgICAgQ29tbWVudChEb2N1bWVudCYsIGNvbnN0IFN0cmluZyYpOwog
CiAgICAgdmlydHVhbCBTdHJpbmcgbm9kZU5hbWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIE5vZGVU
eXBlIG5vZGVUeXBlKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRE9NSW1wbGVt
ZW50YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9ET01JbXBsZW1l
bnRhdGlvbi5jcHAJKHJldmlzaW9uIDE1NTgwNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9ET01J
bXBsZW1lbnRhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw3ICsxOTEsNyBAQCBzdGF0
aWMgYm9vbCBpc1N1cHBvcnRlZFNWRzExRmVhdHVyZShjb25zCiB9CiAjZW5kaWYKIAotRE9NSW1w
bGVtZW50YXRpb246OkRPTUltcGxlbWVudGF0aW9uKERvY3VtZW50KiBkb2N1bWVudCkKK0RPTUlt
cGxlbWVudGF0aW9uOjpET01JbXBsZW1lbnRhdGlvbihEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAg
OiBtX2RvY3VtZW50KGRvY3VtZW50KQogewogfQpAQCAtMjQyLDggKzI0Miw4IEBAIFBhc3NSZWZQ
dHI8RG9jdW1lbnQ+IERPTUltcGxlbWVudGF0aW9uOjoKICAgICBlbHNlCiAgICAgICAgIGRvYyA9
IERvY3VtZW50OjpjcmVhdGUoMCwgS1VSTCgpKTsKIAotICAgIGRvYy0+c2V0U2VjdXJpdHlPcmln
aW4obV9kb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSk7Ci0gICAgZG9jLT5zZXRDb250ZXh0RmVh
dHVyZXMobV9kb2N1bWVudC0+Y29udGV4dEZlYXR1cmVzKCkpOworICAgIGRvYy0+c2V0U2VjdXJp
dHlPcmlnaW4obV9kb2N1bWVudC5zZWN1cml0eU9yaWdpbigpKTsKKyAgICBkb2MtPnNldENvbnRl
eHRGZWF0dXJlcyhtX2RvY3VtZW50LmNvbnRleHRGZWF0dXJlcygpKTsKIAogICAgIFJlZlB0cjxO
b2RlPiBkb2N1bWVudEVsZW1lbnQ7CiAgICAgaWYgKCFxdWFsaWZpZWROYW1lLmlzRW1wdHkoKSkg
ewpAQCAtMzE3LDggKzMxNyw4IEBAIFBhc3NSZWZQdHI8SFRNTERvY3VtZW50PiBET01JbXBsZW1l
bnRhdGkKICAgICBkLT53cml0ZSgiPCFkb2N0eXBlIGh0bWw+PGh0bWw+PGJvZHk+PC9ib2R5Pjwv
aHRtbD4iKTsKICAgICBpZiAoIXRpdGxlLmlzTnVsbCgpKQogICAgICAgICBkLT5zZXRUaXRsZSh0
aXRsZSk7Ci0gICAgZC0+c2V0U2VjdXJpdHlPcmlnaW4obV9kb2N1bWVudC0+c2VjdXJpdHlPcmln
aW4oKSk7Ci0gICAgZC0+c2V0Q29udGV4dEZlYXR1cmVzKG1fZG9jdW1lbnQtPmNvbnRleHRGZWF0
dXJlcygpKTsKKyAgICBkLT5zZXRTZWN1cml0eU9yaWdpbihtX2RvY3VtZW50LnNlY3VyaXR5T3Jp
Z2luKCkpOworICAgIGQtPnNldENvbnRleHRGZWF0dXJlcyhtX2RvY3VtZW50LmNvbnRleHRGZWF0
dXJlcygpKTsKICAgICByZXR1cm4gZC5yZWxlYXNlKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9ET01JbXBsZW1lbnRhdGlvbi5oCShyZXZpc2lvbiAxNTU4MDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTEgKzQ1
LDExIEBAIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiBjbGFzcyBET01JbXBsZW1lbnRhdGlv
biA6IHB1YmxpYyBTY3JpcHRXcmFwcGFibGUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPERPTUltcGxlbWVudGF0aW9uPiBjcmVh
dGUoRG9jdW1lbnQqIGRvY3VtZW50KSB7IHJldHVybiBhZG9wdFB0cihuZXcgRE9NSW1wbGVtZW50
YXRpb24oZG9jdW1lbnQpKTsgfQorICAgIHN0YXRpYyBQYXNzT3duUHRyPERPTUltcGxlbWVudGF0
aW9uPiBjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KSB7IHJldHVybiBhZG9wdFB0cihuZXcgRE9N
SW1wbGVtZW50YXRpb24oZG9jdW1lbnQpKTsgfQogICAgIAotICAgIHZvaWQgcmVmKCkgeyBtX2Rv
Y3VtZW50LT5yZWYoKTsgfQotICAgIHZvaWQgZGVyZWYoKSB7IG1fZG9jdW1lbnQtPmRlcmVmKCk7
IH0KLSAgICBEb2N1bWVudCogZG9jdW1lbnQoKSB7IHJldHVybiBtX2RvY3VtZW50OyB9CisgICAg
dm9pZCByZWYoKSB7IG1fZG9jdW1lbnQucmVmKCk7IH0KKyAgICB2b2lkIGRlcmVmKCkgeyBtX2Rv
Y3VtZW50LmRlcmVmKCk7IH0KKyAgICBEb2N1bWVudCogZG9jdW1lbnQoKSB7IHJldHVybiAmbV9k
b2N1bWVudDsgfQogCiAgICAgLy8gRE9NIG1ldGhvZHMgJiBhdHRyaWJ1dGVzIGZvciBET01JbXBs
ZW1lbnRhdGlvbgogICAgIHN0YXRpYyBib29sIGhhc0ZlYXR1cmUoY29uc3QgU3RyaW5nJiBmZWF0
dXJlLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOwpAQCAtNzEsOSArNzEsOSBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGJvb2wgaXNUZXh0TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBNSU1FVHlwZSk7CiAK
IHByaXZhdGU6Ci0gICAgZXhwbGljaXQgRE9NSW1wbGVtZW50YXRpb24oRG9jdW1lbnQqKTsKKyAg
ICBleHBsaWNpdCBET01JbXBsZW1lbnRhdGlvbihEb2N1bWVudCYpOwogCi0gICAgRG9jdW1lbnQq
IG1fZG9jdW1lbnQ7CisgICAgRG9jdW1lbnQmIG1fZG9jdW1lbnQ7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDE1NTgw
NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc2NSw3ICs3NjUsNyBAQCB2b2lkIERvY3VtZW50OjpyZXNldEFjdGl2ZUxpbmtDb2xvcigpCiBE
T01JbXBsZW1lbnRhdGlvbiogRG9jdW1lbnQ6OmltcGxlbWVudGF0aW9uKCkKIHsKICAgICBpZiAo
IW1faW1wbGVtZW50YXRpb24pCi0gICAgICAgIG1faW1wbGVtZW50YXRpb24gPSBET01JbXBsZW1l
bnRhdGlvbjo6Y3JlYXRlKHRoaXMpOworICAgICAgICBtX2ltcGxlbWVudGF0aW9uID0gRE9NSW1w
bGVtZW50YXRpb246OmNyZWF0ZSgqdGhpcyk7CiAgICAgcmV0dXJuIG1faW1wbGVtZW50YXRpb24u
Z2V0KCk7CiB9CiAKQEAgLTg4OCwxNyArODg4LDE3IEBAIHZvaWQgRG9jdW1lbnQ6OmRpZENyZWF0
ZUN1c3RvbUVsZW1lbnQoRWwKIAogUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBEb2N1bWVu
dDo6Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpCiB7Ci0gICAgcmV0dXJuIERvY3VtZW50RnJhZ21l
bnQ6OmNyZWF0ZSgmZG9jdW1lbnQoKSk7CisgICAgcmV0dXJuIERvY3VtZW50RnJhZ21lbnQ6OmNy
ZWF0ZShkb2N1bWVudCgpKTsKIH0KIAogUGFzc1JlZlB0cjxUZXh0PiBEb2N1bWVudDo6Y3JlYXRl
VGV4dE5vZGUoY29uc3QgU3RyaW5nJiBkYXRhKQogewotICAgIHJldHVybiBUZXh0OjpjcmVhdGUo
dGhpcywgZGF0YSk7CisgICAgcmV0dXJuIFRleHQ6OmNyZWF0ZSgqdGhpcywgZGF0YSk7CiB9CiAK
IFBhc3NSZWZQdHI8Q29tbWVudD4gRG9jdW1lbnQ6OmNyZWF0ZUNvbW1lbnQoY29uc3QgU3RyaW5n
JiBkYXRhKQogewotICAgIHJldHVybiBDb21tZW50OjpjcmVhdGUodGhpcywgZGF0YSk7CisgICAg
cmV0dXJuIENvbW1lbnQ6OmNyZWF0ZSgqdGhpcywgZGF0YSk7CiB9CiAKIFBhc3NSZWZQdHI8Q0RB
VEFTZWN0aW9uPiBEb2N1bWVudDo6Y3JlYXRlQ0RBVEFTZWN0aW9uKGNvbnN0IFN0cmluZyYgZGF0
YSwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC05MDcsNyArOTA3LDcgQEAgUGFzc1JlZlB0cjxDREFU
QVNlY3Rpb24+IERvY3VtZW50OjpjcmVhdAogICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJS
OwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgcmV0dXJuIENEQVRBU2VjdGlvbjo6Y3Jl
YXRlKHRoaXMsIGRhdGEpOworICAgIHJldHVybiBDREFUQVNlY3Rpb246OmNyZWF0ZSgqdGhpcywg
ZGF0YSk7CiB9CiAKIFBhc3NSZWZQdHI8UHJvY2Vzc2luZ0luc3RydWN0aW9uPiBEb2N1bWVudDo6
Y3JlYXRlUHJvY2Vzc2luZ0luc3RydWN0aW9uKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBT
dHJpbmcmIGRhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtOTIwLDcgKzkyMCw3IEBAIFBhc3NS
ZWZQdHI8UHJvY2Vzc2luZ0luc3RydWN0aW9uPiBEb2N1bWUKICAgICAgICAgZWMgPSBOT1RfU1VQ
UE9SVEVEX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIHJldHVybiBQcm9jZXNz
aW5nSW5zdHJ1Y3Rpb246OmNyZWF0ZSh0aGlzLCB0YXJnZXQsIGRhdGEpOworICAgIHJldHVybiBQ
cm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmNyZWF0ZSgqdGhpcywgdGFyZ2V0LCBkYXRhKTsKIH0KIAog
UGFzc1JlZlB0cjxFbnRpdHlSZWZlcmVuY2U+IERvY3VtZW50OjpjcmVhdGVFbnRpdHlSZWZlcmVu
Y2UoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTkzMywxMiArOTMz
LDEyIEBAIFBhc3NSZWZQdHI8RW50aXR5UmVmZXJlbmNlPiBEb2N1bWVudDo6Y3IKICAgICAgICAg
ZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIHJl
dHVybiBFbnRpdHlSZWZlcmVuY2U6OmNyZWF0ZSh0aGlzLCBuYW1lKTsKKyAgICByZXR1cm4gRW50
aXR5UmVmZXJlbmNlOjpjcmVhdGUoKnRoaXMsIG5hbWUpOwogfQogCiBQYXNzUmVmUHRyPFRleHQ+
IERvY3VtZW50OjpjcmVhdGVFZGl0aW5nVGV4dE5vZGUoY29uc3QgU3RyaW5nJiB0ZXh0KQogewot
ICAgIHJldHVybiBUZXh0OjpjcmVhdGVFZGl0aW5nVGV4dCh0aGlzLCB0ZXh0KTsKKyAgICByZXR1
cm4gVGV4dDo6Y3JlYXRlRWRpdGluZ1RleHQoKnRoaXMsIHRleHQpOwogfQogCiBQYXNzUmVmUHRy
PENTU1N0eWxlRGVjbGFyYXRpb24+IERvY3VtZW50OjpjcmVhdGVDU1NTdHlsZURlY2xhcmF0aW9u
KCkKQEAgLTk5Miw3ICs5OTIsNyBAQCBQYXNzUmVmUHRyPE5vZGU+IERvY3VtZW50OjppbXBvcnRO
b2RlKE5vCiAgICAgICAgIHJldHVybiBuZXdFbGVtZW50LnJlbGVhc2UoKTsKICAgICB9CiAgICAg
Y2FzZSBBVFRSSUJVVEVfTk9ERToKLSAgICAgICAgcmV0dXJuIEF0dHI6OmNyZWF0ZSh0aGlzLCBR
dWFsaWZpZWROYW1lKG51bGxBdG9tLCBzdGF0aWNfY2FzdDxBdHRyKj4oaW1wb3J0ZWROb2RlKS0+
bmFtZSgpLCBudWxsQXRvbSksIHN0YXRpY19jYXN0PEF0dHIqPihpbXBvcnRlZE5vZGUpLT52YWx1
ZSgpKTsKKyAgICAgICAgcmV0dXJuIEF0dHI6OmNyZWF0ZSgqdGhpcywgUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgc3RhdGljX2Nhc3Q8QXR0cio+KGltcG9ydGVkTm9kZSktPm5hbWUoKSwgbnVsbEF0
b20pLCBzdGF0aWNfY2FzdDxBdHRyKj4oaW1wb3J0ZWROb2RlKS0+dmFsdWUoKSk7CiAgICAgY2Fz
ZSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFOiB7CiAgICAgICAgIGlmIChpbXBvcnRlZE5vZGUtPmlz
U2hhZG93Um9vdCgpKSB7CiAgICAgICAgICAgICAvLyBTaGFkb3dSb290IG5vZGVzIHNob3VsZCBu
b3QgYmUgZXhwbGljaXRseSBpbXBvcnRhYmxlLgpAQCAtNDMzNCw3ICs0MzM0LDcgQEAgUGFzc1Jl
ZlB0cjxBdHRyPiBEb2N1bWVudDo6Y3JlYXRlQXR0cmlidQogICAgICAgICByZXR1cm4gMDsKICAg
ICB9CiAKLSAgICByZXR1cm4gQXR0cjo6Y3JlYXRlKHRoaXMsIHFOYW1lLCBlbXB0eVN0cmluZygp
KTsKKyAgICByZXR1cm4gQXR0cjo6Y3JlYXRlKCp0aGlzLCBxTmFtZSwgZW1wdHlTdHJpbmcoKSk7
CiB9CiAKICNpZiBFTkFCTEUoU1ZHKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
RnJhZ21lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEZy
YWdtZW50LmNwcAkocmV2aXNpb24gMTU1ODA3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50RnJhZ21lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMCArMzYsOSBAQCBEb2N1bWVu
dEZyYWdtZW50OjpEb2N1bWVudEZyYWdtZW50KERvY3VtCiB7CiB9CiAKLVBhc3NSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVu
dCkKK1Bhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRl
KERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBBU1NFUlQoZG9jdW1lbnQpOwotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgRG9jdW1lbnRGcmFnbWVudChkb2N1bWVudCwgTm9kZTo6Q3JlYXRlRG9j
dW1lbnRGcmFnbWVudCkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRG9jdW1lbnRGcmFnbWVu
dCgmZG9jdW1lbnQsIE5vZGU6OkNyZWF0ZURvY3VtZW50RnJhZ21lbnQpKTsKIH0KIAogU3RyaW5n
IERvY3VtZW50RnJhZ21lbnQ6Om5vZGVOYW1lKCkgY29uc3QKQEAgLTY5LDcgKzY4LDcgQEAgYm9v
bCBEb2N1bWVudEZyYWdtZW50OjpjaGlsZFR5cGVBbGxvd2VkKAogCiBQYXNzUmVmUHRyPE5vZGU+
IERvY3VtZW50RnJhZ21lbnQ6OmNsb25lTm9kZShib29sIGRlZXApCiB7Ci0gICAgUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGNsb25lID0gY3JlYXRlKCZkb2N1bWVudCgpKTsKKyAgICBSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4gY2xvbmUgPSBjcmVhdGUoZG9jdW1lbnQoKSk7CiAgICAgaWYgKGRl
ZXApCiAgICAgICAgIGNsb25lQ2hpbGROb2RlcyhjbG9uZS5nZXQoKSk7CiAgICAgcmV0dXJuIGNs
b25lLnJlbGVhc2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEZyYWdtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50RnJhZ21lbnQuaAko
cmV2aXNpb24gMTU1ODA3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50RnJhZ21lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIERvY3VtZW50RnJhZ21lbnQgOiBwdWJsaWMgQ29udGFpbmVyTm9kZSB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlKERvY3VtZW50
Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlKERvY3Vt
ZW50Jik7CiAKICAgICB2b2lkIHBhcnNlSFRNTChjb25zdCBTdHJpbmcmLCBFbGVtZW50KiBjb250
ZXh0RWxlbWVudCwgUGFyc2VyQ29udGVudFBvbGljeSA9IEFsbG93U2NyaXB0aW5nQ29udGVudCk7
CiAgICAgYm9vbCBwYXJzZVhNTChjb25zdCBTdHJpbmcmLCBFbGVtZW50KiBjb250ZXh0RWxlbWVu
dCwgUGFyc2VyQ29udGVudFBvbGljeSA9IEFsbG93U2NyaXB0aW5nQ29udGVudCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnRUeXBlLmNwcAkocmV2aXNpb24gMTU1ODA3KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4
LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Eb2N1bWVudFR5cGU6OkRvY3VtZW50VHlw
ZShEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBw
dWJsaWNJZCwgY29uc3QgU3RyaW5nJiBzeXN0ZW1JZCkKLSAgICA6IE5vZGUoZG9jdW1lbnQsIENy
ZWF0ZU90aGVyKQorRG9jdW1lbnRUeXBlOjpEb2N1bWVudFR5cGUoRG9jdW1lbnQmIGRvY3VtZW50
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgcHVibGljSWQsIGNvbnN0IFN0cmlu
ZyYgc3lzdGVtSWQpCisgICAgOiBOb2RlKCZkb2N1bWVudCwgQ3JlYXRlT3RoZXIpCiAgICAgLCBt
X25hbWUobmFtZSkKICAgICAsIG1fcHVibGljSWQocHVibGljSWQpCiAgICAgLCBtX3N5c3RlbUlk
KHN5c3RlbUlkKQpAQCAtNTMsNyArNTMsNyBAQCBOb2RlOjpOb2RlVHlwZSBEb2N1bWVudFR5cGU6
Om5vZGVUeXBlKCkgCiAKIFBhc3NSZWZQdHI8Tm9kZT4gRG9jdW1lbnRUeXBlOjpjbG9uZU5vZGUo
Ym9vbCAvKmRlZXAqLykKIHsKLSAgICByZXR1cm4gY3JlYXRlKCZkb2N1bWVudCgpLCBtX25hbWUs
IG1fcHVibGljSWQsIG1fc3lzdGVtSWQpOworICAgIHJldHVybiBjcmVhdGUoZG9jdW1lbnQoKSwg
bV9uYW1lLCBtX3B1YmxpY0lkLCBtX3N5c3RlbUlkKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudFR5cGUuaAkocmV2aXNpb24gMTU1ODA3KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIGNsYXNzIE5h
bWVkTm9kZU1hcDsKIAogY2xhc3MgRG9jdW1lbnRUeXBlIEZJTkFMIDogcHVibGljIE5vZGUgewog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERvY3VtZW50VHlwZT4gY3JlYXRlKERvY3Vt
ZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHB1YmxpY0lk
LCBjb25zdCBTdHJpbmcmIHN5c3RlbUlkKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERvY3VtZW50
VHlwZT4gY3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIHB1YmxpY0lkLCBjb25zdCBTdHJpbmcmIHN5c3RlbUlkKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEb2N1bWVudFR5cGUoZG9jdW1lbnQsIG5hbWUsIHB1Ymxp
Y0lkLCBzeXN0ZW1JZCkpOwogICAgIH0KQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIGNv
bnN0IFN0cmluZyYgaW50ZXJuYWxTdWJzZXQoKSBjb25zdCB7IHJldHVybiBtX3N1YnNldDsgfQog
CiBwcml2YXRlOgotICAgIERvY3VtZW50VHlwZShEb2N1bWVudCosIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiBwdWJsaWNJZCwgY29uc3QgU3RyaW5nJiBzeXN0ZW1JZCk7CisgICAg
RG9jdW1lbnRUeXBlKERvY3VtZW50JiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IHB1YmxpY0lkLCBjb25zdCBTdHJpbmcmIHN5c3RlbUlkKTsKIAogICAgIHZpcnR1YWwgS1VSTCBi
YXNlVVJJKCkgY29uc3Q7CiAgICAgdmlydHVhbCBTdHJpbmcgbm9kZU5hbWUoKSBjb25zdDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDE1NTgwNykKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg2LDcgKzI4Niw3IEBAIFBh
c3NSZWZQdHI8QXR0cj4gRWxlbWVudDo6ZGV0YWNoQXR0cmlidXQKICAgICBpZiAoYXR0ck5vZGUp
CiAgICAgICAgIGRldGFjaEF0dHJOb2RlRnJvbUVsZW1lbnRXaXRoVmFsdWUoYXR0ck5vZGUuZ2V0
KCksIGF0dHJpYnV0ZS52YWx1ZSgpKTsKICAgICBlbHNlCi0gICAgICAgIGF0dHJOb2RlID0gQXR0
cjo6Y3JlYXRlKCZkb2N1bWVudCgpLCBhdHRyaWJ1dGUubmFtZSgpLCBhdHRyaWJ1dGUudmFsdWUo
KSk7CisgICAgICAgIGF0dHJOb2RlID0gQXR0cjo6Y3JlYXRlKGRvY3VtZW50KCksIGF0dHJpYnV0
ZS5uYW1lKCksIGF0dHJpYnV0ZS52YWx1ZSgpKTsKIAogICAgIHJlbW92ZUF0dHJpYnV0ZUludGVy
bmFsKGluZGV4LCBOb3RJblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSk7CiAgICAgcmV0
dXJuIGF0dHJOb2RlLnJlbGVhc2UoKTsKQEAgLTE0ODUsNyArMTQ4NSw3IEBAIFBhc3NSZWZQdHI8
U2hhZG93Um9vdD4gRWxlbWVudDo6Y3JlYXRlU2gKICAgICAgICAgZWMgPSBISUVSQVJDSFlfUkVR
VUVTVF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBhZGRTaGFkb3dSb290KFNo
YWRvd1Jvb3Q6OmNyZWF0ZSgmZG9jdW1lbnQoKSwgU2hhZG93Um9vdDo6QXV0aG9yU2hhZG93Um9v
dCkpOworICAgIGFkZFNoYWRvd1Jvb3QoU2hhZG93Um9vdDo6Y3JlYXRlKGRvY3VtZW50KCksIFNo
YWRvd1Jvb3Q6OkF1dGhvclNoYWRvd1Jvb3QpKTsKIAogICAgIHJldHVybiBzaGFkb3dSb290KCk7
CiB9CkBAIC0xNTExLDcgKzE1MTEsNyBAQCBTaGFkb3dSb290JiBFbGVtZW50OjplbnN1cmVVc2Vy
QWdlbnRTaGFkCiB7CiAgICAgU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IHVzZXJBZ2VudFNoYWRv
d1Jvb3QoKTsKICAgICBpZiAoIXNoYWRvd1Jvb3QpIHsKLSAgICAgICAgYWRkU2hhZG93Um9vdChT
aGFkb3dSb290OjpjcmVhdGUoJmRvY3VtZW50KCksIFNoYWRvd1Jvb3Q6OlVzZXJBZ2VudFNoYWRv
d1Jvb3QpKTsKKyAgICAgICAgYWRkU2hhZG93Um9vdChTaGFkb3dSb290OjpjcmVhdGUoZG9jdW1l
bnQoKSwgU2hhZG93Um9vdDo6VXNlckFnZW50U2hhZG93Um9vdCkpOwogICAgICAgICBzaGFkb3dS
b290ID0gdXNlckFnZW50U2hhZG93Um9vdCgpOwogICAgICAgICBkaWRBZGRVc2VyQWdlbnRTaGFk
b3dSb290KHNoYWRvd1Jvb3QpOwogICAgIH0KQEAgLTE3MTIsNyArMTcxMiw3IEBAIFBhc3NSZWZQ
dHI8QXR0cj4gRWxlbWVudDo6c2V0QXR0cmlidXRlTm8KICAgICAgICAgaWYgKG9sZEF0dHJOb2Rl
KQogICAgICAgICAgICAgZGV0YWNoQXR0ck5vZGVGcm9tRWxlbWVudFdpdGhWYWx1ZShvbGRBdHRy
Tm9kZS5nZXQoKSwgZWxlbWVudERhdGEuYXR0cmlidXRlQXQoaW5kZXgpLnZhbHVlKCkpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBvbGRBdHRyTm9kZSA9IEF0dHI6OmNyZWF0ZSgmZG9jdW1l
bnQoKSwgYXR0ck5vZGUtPnF1YWxpZmllZE5hbWUoKSwgZWxlbWVudERhdGEuYXR0cmlidXRlQXQo
aW5kZXgpLnZhbHVlKCkpOworICAgICAgICAgICAgb2xkQXR0ck5vZGUgPSBBdHRyOjpjcmVhdGUo
ZG9jdW1lbnQoKSwgYXR0ck5vZGUtPnF1YWxpZmllZE5hbWUoKSwgZWxlbWVudERhdGEuYXR0cmli
dXRlQXQoaW5kZXgpLnZhbHVlKCkpOwogICAgIH0KIAogICAgIHNldEF0dHJpYnV0ZUludGVybmFs
KGluZGV4LCBhdHRyTm9kZS0+cXVhbGlmaWVkTmFtZSgpLCBhdHRyTm9kZS0+dmFsdWUoKSwgTm90
SW5TeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0VudGl0eVJlZmVyZW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L0VudGl0eVJlZmVyZW5jZS5jcHAJKHJldmlzaW9uIDE1NTgwNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9FbnRpdHlSZWZlcmVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMyArMjUsMTMg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1pbmxpbmUgRW50aXR5UmVmZXJlbmNlOjpFbnRp
dHlSZWZlcmVuY2UoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIGVudGl0eU5hbWUp
Ci0gICAgOiBDb250YWluZXJOb2RlKGRvY3VtZW50KQoraW5saW5lIEVudGl0eVJlZmVyZW5jZTo6
RW50aXR5UmVmZXJlbmNlKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBlbnRpdHlO
YW1lKQorICAgIDogQ29udGFpbmVyTm9kZSgmZG9jdW1lbnQpCiAgICAgLCBtX2VudGl0eU5hbWUo
ZW50aXR5TmFtZSkKIHsKIH0KIAotUGFzc1JlZlB0cjxFbnRpdHlSZWZlcmVuY2U+IEVudGl0eVJl
ZmVyZW5jZTo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBlbnRpdHlO
YW1lKQorUGFzc1JlZlB0cjxFbnRpdHlSZWZlcmVuY2U+IEVudGl0eVJlZmVyZW5jZTo6Y3JlYXRl
KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBlbnRpdHlOYW1lKQogewogICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgRW50aXR5UmVmZXJlbmNlKGRvY3VtZW50LCBlbnRpdHlOYW1lKSk7
CiB9CkBAIC00OCw3ICs0OCw3IEBAIE5vZGU6Ok5vZGVUeXBlIEVudGl0eVJlZmVyZW5jZTo6bm9k
ZVR5cGUKIAogUGFzc1JlZlB0cjxOb2RlPiBFbnRpdHlSZWZlcmVuY2U6OmNsb25lTm9kZShib29s
KQogewotICAgIHJldHVybiBjcmVhdGUoJmRvY3VtZW50KCksIG1fZW50aXR5TmFtZSk7CisgICAg
cmV0dXJuIGNyZWF0ZShkb2N1bWVudCgpLCBtX2VudGl0eU5hbWUpOwogfQogCiB9IC8vIG5hbWVz
cGFjZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VudGl0eVJlZmVyZW5jZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbnRpdHlSZWZlcmVuY2UuaAkocmV2aXNpb24gMTU1
ODA3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VudGl0eVJlZmVyZW5jZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCwxMCArMjgsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBFbnRp
dHlSZWZlcmVuY2UgRklOQUwgOiBwdWJsaWMgQ29udGFpbmVyTm9kZSB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8RW50aXR5UmVmZXJlbmNlPiBjcmVhdGUoRG9jdW1lbnQqLCBjb25z
dCBTdHJpbmcmIGVudGl0eU5hbWUpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVudGl0eVJlZmVy
ZW5jZT4gY3JlYXRlKERvY3VtZW50JiwgY29uc3QgU3RyaW5nJiBlbnRpdHlOYW1lKTsKIAogcHJp
dmF0ZToKLSAgICBFbnRpdHlSZWZlcmVuY2UoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmIGVudGl0
eU5hbWUpOworICAgIEVudGl0eVJlZmVyZW5jZShEb2N1bWVudCYsIGNvbnN0IFN0cmluZyYgZW50
aXR5TmFtZSk7CiAKICAgICB2aXJ0dWFsIFN0cmluZyBub2RlTmFtZSgpIGNvbnN0OwogICAgIHZp
cnR1YWwgTm9kZVR5cGUgbm9kZVR5cGUoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ob3RhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vdGF0aW9u
LmNwcAkocmV2aXNpb24gMTU1ODA3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vdGF0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLU5vdGF0aW9uOjpOb3RhdGlvbihEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiBwdWJsaWNJZCwgY29uc3QgU3RyaW5nJiBzeXN0ZW1JZCkKLSAg
ICA6IENvbnRhaW5lck5vZGUoZG9jdW1lbnQpCitOb3RhdGlvbjo6Tm90YXRpb24oRG9jdW1lbnQm
IGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgcHVibGljSWQsIGNv
bnN0IFN0cmluZyYgc3lzdGVtSWQpCisgICAgOiBDb250YWluZXJOb2RlKCZkb2N1bWVudCkKICAg
ICAsIG1fbmFtZShuYW1lKQogICAgICwgbV9wdWJsaWNJZChwdWJsaWNJZCkKICAgICAsIG1fc3lz
dGVtSWQoc3lzdGVtSWQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm90YXRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm90YXRpb24uaAkocmV2aXNpb24gMTU1ODA3
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vdGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDcgKzM0LDcgQEAgcHVibGljOgogICAgIGNvbnN0IFN0cmluZyYgc3lzdGVtSWQoKSBjb25zdCB7
IHJldHVybiBtX3N5c3RlbUlkOyB9CiAKIHByaXZhdGU6Ci0gICAgTm90YXRpb24oRG9jdW1lbnQq
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgcHVibGljSWQsIGNvbnN0IFN0cmlu
ZyYgc3lzdGVtSWQpOworICAgIE5vdGF0aW9uKERvY3VtZW50JiwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIHB1YmxpY0lkLCBjb25zdCBTdHJpbmcmIHN5c3RlbUlkKTsKIAogICAg
IHZpcnR1YWwgU3RyaW5nIG5vZGVOYW1lKCkgY29uc3Q7CiAgICAgdmlydHVhbCBOb2RlVHlwZSBu
b2RlVHlwZSgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0
cnVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJ
bnN0cnVjdGlvbi5jcHAJKHJldmlzaW9uIDE1NTgwNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Q
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotaW5saW5lIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6
UHJvY2Vzc2luZ0luc3RydWN0aW9uKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0
YXJnZXQsIGNvbnN0IFN0cmluZyYgZGF0YSkKK2lubGluZSBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246
OlByb2Nlc3NpbmdJbnN0cnVjdGlvbihEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYg
dGFyZ2V0LCBjb25zdCBTdHJpbmcmIGRhdGEpCiAgICAgOiBDaGFyYWN0ZXJEYXRhKGRvY3VtZW50
LCBkYXRhLCBDcmVhdGVPdGhlcikKICAgICAsIG1fdGFyZ2V0KHRhcmdldCkKICAgICAsIG1fY2Fj
aGVkU2hlZXQoMCkKQEAgLTUzLDcgKzUzLDcgQEAgaW5saW5lIFByb2Nlc3NpbmdJbnN0cnVjdGlv
bjo6UHJvY2Vzc2luZwogewogfQogCi1QYXNzUmVmUHRyPFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4g
UHJvY2Vzc2luZ0luc3RydWN0aW9uOjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBT
dHJpbmcmIHRhcmdldCwgY29uc3QgU3RyaW5nJiBkYXRhKQorUGFzc1JlZlB0cjxQcm9jZXNzaW5n
SW5zdHJ1Y3Rpb24+IFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6Y3JlYXRlKERvY3VtZW50JiBkb2N1
bWVudCwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgZGF0YSkKIHsKICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFByb2Nlc3NpbmdJbnN0cnVjdGlvbihkb2N1bWVudCwgdGFyZ2V0
LCBkYXRhKSk7CiB9CkBAIC04NCw3ICs4NCw3IEBAIFBhc3NSZWZQdHI8Tm9kZT4gUHJvY2Vzc2lu
Z0luc3RydWN0aW9uOjoKIHsKICAgICAvLyBGSVhNRTogSXMgaXQgYSBwcm9ibGVtIHRoYXQgdGhp
cyBkb2VzIG5vdCBjb3B5IG1fbG9jYWxIcmVmPwogICAgIC8vIFdoYXQgYWJvdXQgb3RoZXIgZGF0
YSBtZW1iZXJzPwotICAgIHJldHVybiBjcmVhdGUoJmRvY3VtZW50KCksIG1fdGFyZ2V0LCBkYXRh
KCkpOworICAgIHJldHVybiBjcmVhdGUoZG9jdW1lbnQoKSwgbV90YXJnZXQsIGRhdGEoKSk7CiB9
CiAKIHZvaWQgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpjaGVja1N0eWxlU2hlZXQoKQpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaAkocmV2aXNpb24gMTU1
ODA3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIGNsYXNzIENTU1N0eWxlU2hlZXQ7CiAKIGNsYXNz
IFByb2Nlc3NpbmdJbnN0cnVjdGlvbiBGSU5BTCA6IHB1YmxpYyBDaGFyYWN0ZXJEYXRhLCBwcml2
YXRlIENhY2hlZFN0eWxlU2hlZXRDbGllbnQgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4gY3JlYXRlKERvY3VtZW50KiwgY29uc3QgU3RyaW5n
JiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgZGF0YSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UHJv
Y2Vzc2luZ0luc3RydWN0aW9uPiBjcmVhdGUoRG9jdW1lbnQmLCBjb25zdCBTdHJpbmcmIHRhcmdl
dCwgY29uc3QgU3RyaW5nJiBkYXRhKTsKICAgICB2aXJ0dWFsIH5Qcm9jZXNzaW5nSW5zdHJ1Y3Rp
b24oKTsKIAogICAgIGNvbnN0IFN0cmluZyYgdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV90YXJn
ZXQ7IH0KQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBDaGFyYWN0ZXJEYXRhOwotICAgIFByb2Nlc3NpbmdJbnN0cnVjdGlvbihEb2N1bWVudCos
IGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIGRhdGEpOworICAgIFByb2Nlc3Np
bmdJbnN0cnVjdGlvbihEb2N1bWVudCYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJp
bmcmIGRhdGEpOwogCiAgICAgdmlydHVhbCBTdHJpbmcgbm9kZU5hbWUoKSBjb25zdDsKICAgICB2
aXJ0dWFsIE5vZGVUeXBlIG5vZGVUeXBlKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAJ
KHJldmlzaW9uIDE1NTgwNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY3NSw3ICs2NzUsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IFJhbmdlOjpwcm9jCiAKICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQ7CiAg
ICAgaWYgKGFjdGlvbiA9PSBFeHRyYWN0IHx8IGFjdGlvbiA9PSBDbG9uZSkKLSAgICAgICAgZnJh
Z21lbnQgPSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUobV9vd25lckRvY3VtZW50LmdldCgpKTsK
KyAgICAgICAgZnJhZ21lbnQgPSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUob3duZXJEb2N1bWVu
dCgpKTsKIAogICAgIGVjID0gMDsKICAgICBpZiAoY29sbGFwc2VkKGVjKSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vU2hhZG93Um9vdC5jcHAJKHJldmlzaW9uIDE1NTgwNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9TaGFkb3dSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTYgKzUyLDE1IEBAIGVu
dW0gU2hhZG93Um9vdFVzYWdlT3JpZ2luVHlwZSB7CiAgICAgU2hhZG93Um9vdFVzYWdlT3JpZ2lu
TWF4CiB9OwogCi1TaGFkb3dSb290OjpTaGFkb3dSb290KERvY3VtZW50KiBkb2N1bWVudCwgU2hh
ZG93Um9vdFR5cGUgdHlwZSkKK1NoYWRvd1Jvb3Q6OlNoYWRvd1Jvb3QoRG9jdW1lbnQmIGRvY3Vt
ZW50LCBTaGFkb3dSb290VHlwZSB0eXBlKQogICAgIDogRG9jdW1lbnRGcmFnbWVudCgwLCBDcmVh
dGVTaGFkb3dSb290KQotICAgICwgVHJlZVNjb3BlKHRoaXMsIGRvY3VtZW50KQorICAgICwgVHJl
ZVNjb3BlKHRoaXMsICZkb2N1bWVudCkKICAgICAsIG1fbnVtYmVyT2ZTdHlsZXMoMCkKICAgICAs
IG1fYXBwbHlBdXRob3JTdHlsZXMoZmFsc2UpCiAgICAgLCBtX3Jlc2V0U3R5bGVJbmhlcml0YW5j
ZShmYWxzZSkKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9ob3N0RWxlbWVudCgwKQogewot
ICAgIEFTU0VSVChkb2N1bWVudCk7CiB9CiAKIFNoYWRvd1Jvb3Q6On5TaGFkb3dSb290KCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaAkocmV2aXNpb24gMTU1ODA3KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL1NoYWRvd1Jvb3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBw
dWJsaWM6CiAgICAgICAgIEF1dGhvclNoYWRvd1Jvb3QKICAgICB9OwogCi0gICAgc3RhdGljIFBh
c3NSZWZQdHI8U2hhZG93Um9vdD4gY3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgU2hhZG93Um9v
dFR5cGUgdHlwZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFkb3dSb290PiBjcmVhdGUoRG9j
dW1lbnQmIGRvY3VtZW50LCBTaGFkb3dSb290VHlwZSB0eXBlKQogICAgIHsKICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTaGFkb3dSb290KGRvY3VtZW50LCB0eXBlKSk7CiAgICAgfQpAQCAt
ODIsNyArODIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVBbGxFdmVudExpc3RlbmVycygp
OwogCiBwcml2YXRlOgotICAgIFNoYWRvd1Jvb3QoRG9jdW1lbnQqLCBTaGFkb3dSb290VHlwZSk7
CisgICAgU2hhZG93Um9vdChEb2N1bWVudCYsIFNoYWRvd1Jvb3RUeXBlKTsKIAogICAgIHZpcnR1
YWwgdm9pZCBkcm9wQ2hpbGRyZW4oKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRU
eXBlQWxsb3dlZChOb2RlVHlwZSkgY29uc3QgT1ZFUlJJREU7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vVGVtcGxhdGVDb250ZW50RG9jdW1lbnRGcmFnbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9UZW1wbGF0ZUNvbnRlbnREb2N1bWVudEZyYWdtZW50LmgJKHJldmlz
aW9uIDE1NTgwNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UZW1wbGF0ZUNvbnRlbnREb2N1bWVu
dEZyYWdtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBUZW1wbGF0ZUNvbnRlbnREb2N1bWVudEZyYWdtZW50IEZJTkFMIDog
cHVibGljIERvY3VtZW50RnJhZ21lbnQgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFRlbXBsYXRlQ29udGVudERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZShEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnN0IEVsZW1lbnQqIGhvc3QpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGVtcGxhdGVD
b250ZW50RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3Qg
RWxlbWVudCogaG9zdCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGVtcGxh
dGVDb250ZW50RG9jdW1lbnRGcmFnbWVudChkb2N1bWVudCwgaG9zdCkpOwogICAgIH0KQEAgLTQz
LDcgKzQzLDcgQEAgcHVibGljOgogICAgIGNvbnN0IEVsZW1lbnQqIGhvc3QoKSBjb25zdCB7IHJl
dHVybiBtX2hvc3Q7IH0KIAogcHJpdmF0ZToKLSAgICBUZW1wbGF0ZUNvbnRlbnREb2N1bWVudEZy
YWdtZW50KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgRWxlbWVudCogaG9zdCkKKyAgICBUZW1w
bGF0ZUNvbnRlbnREb2N1bWVudEZyYWdtZW50KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgRWxl
bWVudCogaG9zdCkKICAgICAgICAgOiBEb2N1bWVudEZyYWdtZW50KGRvY3VtZW50LCBDcmVhdGVE
b2N1bWVudEZyYWdtZW50KQogICAgICAgICAsIG1faG9zdChob3N0KQogICAgIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9UZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vVGV4dC5jcHAJKHJldmlzaW9uIDE1NTgwNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UZXh0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTIgKzQ1LDEyIEBAIHVzaW5nIG5hbWVzcGFjZSBz
dGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxUZXh0PiBUZXh0OjpjcmVh
dGUoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIGRhdGEpCitQYXNzUmVmUHRyPFRl
eHQ+IFRleHQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgZGF0YSkK
IHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHQoZG9jdW1lbnQsIGRhdGEsIENyZWF0ZVRl
eHQpKTsKIH0KIAotUGFzc1JlZlB0cjxUZXh0PiBUZXh0OjpjcmVhdGVFZGl0aW5nVGV4dChEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgZGF0YSkKK1Bhc3NSZWZQdHI8VGV4dD4gVGV4
dDo6Y3JlYXRlRWRpdGluZ1RleHQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIGRh
dGEpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0KGRvY3VtZW50LCBkYXRhLCBDcmVh
dGVFZGl0aW5nVGV4dCkpOwogfQpAQCAtMTczLDcgKzE3Myw3IEBAIE5vZGU6Ok5vZGVUeXBlIFRl
eHQ6Om5vZGVUeXBlKCkgY29uc3QKIAogUGFzc1JlZlB0cjxOb2RlPiBUZXh0OjpjbG9uZU5vZGUo
Ym9vbCAvKmRlZXAqLykKIHsKLSAgICByZXR1cm4gY3JlYXRlKCZkb2N1bWVudCgpLCBkYXRhKCkp
OworICAgIHJldHVybiBjcmVhdGUoZG9jdW1lbnQoKSwgZGF0YSgpKTsKIH0KIAogCkBAIC0yMTAs
MTAgKzIxMCwxMCBAQCBib29sIFRleHQ6OmNoaWxkVHlwZUFsbG93ZWQoTm9kZVR5cGUpIGNvCiAK
IFBhc3NSZWZQdHI8VGV4dD4gVGV4dDo6dmlydHVhbENyZWF0ZShjb25zdCBTdHJpbmcmIGRhdGEp
CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZSgmZG9jdW1lbnQoKSwgZGF0YSk7CisgICAgcmV0dXJuIGNy
ZWF0ZShkb2N1bWVudCgpLCBkYXRhKTsKIH0KIAotUGFzc1JlZlB0cjxUZXh0PiBUZXh0OjpjcmVh
dGVXaXRoTGVuZ3RoTGltaXQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIGRhdGEs
IHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGhMaW1pdCkKK1Bhc3NSZWZQdHI8VGV4dD4g
VGV4dDo6Y3JlYXRlV2l0aExlbmd0aExpbWl0KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3Ry
aW5nJiBkYXRhLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoTGltaXQpCiB7CiAgICAg
dW5zaWduZWQgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoKCk7CiAKQEAgLTIyNyw3ICsyMjcsNyBA
QCBQYXNzUmVmUHRyPFRleHQ+IFRleHQ6OmNyZWF0ZVdpdGhMZW5ndGhMCiB9CiAKICNpZm5kZWYg
TkRFQlVHCi12b2lkIFRleHQ6OmZvcm1hdEZvckRlYnVnZ2VyKGNoYXIgKmJ1ZmZlciwgdW5zaWdu
ZWQgbGVuZ3RoKSBjb25zdAordm9pZCBUZXh0Ojpmb3JtYXRGb3JEZWJ1Z2dlcihjaGFyKiBidWZm
ZXIsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKIHsKICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsK
ICAgICBTdHJpbmcgczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1RleHQuaAkocmV2aXNpb24gMTU1ODA3KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL1RleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsOSArMzQsOSBAQCBj
bGFzcyBUZXh0IDogcHVibGljIENoYXJhY3RlckRhdGEgewogcHVibGljOgogICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBkZWZhdWx0TGVuZ3RoTGltaXQgPSAxIDw8IDE2OwogCi0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8VGV4dD4gY3JlYXRlKERvY3VtZW50KiwgY29uc3QgU3RyaW5nJik7Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8VGV4dD4gY3JlYXRlV2l0aExlbmd0aExpbWl0KERvY3VtZW50Kiwg
Y29uc3QgU3RyaW5nJiwgdW5zaWduZWQgcG9zaXRpb25JblN0cmluZywgdW5zaWduZWQgbGVuZ3Ro
TGltaXQgPSBkZWZhdWx0TGVuZ3RoTGltaXQpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHQ+
IGNyZWF0ZUVkaXRpbmdUZXh0KERvY3VtZW50KiwgY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8VGV4dD4gY3JlYXRlKERvY3VtZW50JiwgY29uc3QgU3RyaW5nJik7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8VGV4dD4gY3JlYXRlV2l0aExlbmd0aExpbWl0KERvY3VtZW50Jiwg
Y29uc3QgU3RyaW5nJiwgdW5zaWduZWQgcG9zaXRpb25JblN0cmluZywgdW5zaWduZWQgbGVuZ3Ro
TGltaXQgPSBkZWZhdWx0TGVuZ3RoTGltaXQpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHQ+
IGNyZWF0ZUVkaXRpbmdUZXh0KERvY3VtZW50JiwgY29uc3QgU3RyaW5nJik7CiAKICAgICB2aXJ0
dWFsIH5UZXh0KCk7CiAKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9v
bCBjYW5Db250YWluUmFuZ2VFbmRQb2ludCgpIGNvbnN0IE9WRVJSSURFIEZJTkFMIHsgcmV0dXJu
IHRydWU7IH0KIAogcHJvdGVjdGVkOgotICAgIFRleHQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25z
dCBTdHJpbmcmIGRhdGEsIENvbnN0cnVjdGlvblR5cGUgdHlwZSkKKyAgICBUZXh0KERvY3VtZW50
JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBkYXRhLCBDb25zdHJ1Y3Rpb25UeXBlIHR5cGUpCiAg
ICAgICAgIDogQ2hhcmFjdGVyRGF0YShkb2N1bWVudCwgZGF0YSwgdHlwZSkKICAgICB7CiAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9DcmVhdGVMaW5rQ29tbWFuZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9DcmVhdGVMaW5rQ29tbWFuZC5jcHAJ
KHJldmlzaW9uIDE1NTgwNykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ3JlYXRlTGlua0Nv
bW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHZvaWQgQ3JlYXRlTGlu
a0NvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICBhcHBseVN0eWxlZEVsZW1lbnQoYW5jaG9yRWxl
bWVudC5nZXQoKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIGluc2VydE5vZGVBdChhbmNob3JFbGVt
ZW50LmdldCgpLCBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpKTsKLSAgICAgICAgUmVmUHRyPFRl
eHQ+IHRleHROb2RlID0gVGV4dDo6Y3JlYXRlKCZkb2N1bWVudCgpLCBtX3VybCk7CisgICAgICAg
IFJlZlB0cjxUZXh0PiB0ZXh0Tm9kZSA9IFRleHQ6OmNyZWF0ZShkb2N1bWVudCgpLCBtX3VybCk7
CiAgICAgICAgIGFwcGVuZE5vZGUodGV4dE5vZGUuZ2V0KCksIGFuY2hvckVsZW1lbnQuZ2V0KCkp
OwogICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihwb3NpdGlvbklu
UGFyZW50QmVmb3JlTm9kZShhbmNob3JFbGVtZW50LmdldCgpKSwgcG9zaXRpb25JblBhcmVudEFm
dGVyTm9kZShhbmNob3JFbGVtZW50LmdldCgpKSwgRE9XTlNUUkVBTSwgZW5kaW5nU2VsZWN0aW9u
KCkuaXNEaXJlY3Rpb25hbCgpKSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3JDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvckNvbW1hbmQuY3BwCShyZXZpc2lvbiAxNTU4MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsNyArMjAwLDcg
QEAgc3RhdGljIGJvb2wgZXhlY3V0ZUluc2VydEZyYWdtZW50KEZyYW1lJgogCiBzdGF0aWMgYm9v
bCBleGVjdXRlSW5zZXJ0Tm9kZShGcmFtZSYgZnJhbWUsIFBhc3NSZWZQdHI8Tm9kZT4gY29udGVu
dCkKIHsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBEb2N1bWVudEZy
YWdtZW50OjpjcmVhdGUoZnJhbWUuZG9jdW1lbnQoKSk7CisgICAgUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IGZyYWdtZW50ID0gRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVu
dCgpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBmcmFnbWVudC0+YXBwZW5kQ2hp
bGQoY29udGVudCwgZWMpOwogICAgIGlmIChlYykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwCShyZXZpc2lvbiAxNTU4MDcpCisrKyBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTgsNyArNTgsNyBAQCB2b2lkIFNwbGl0VGV4dE5vZGVDb21tYW5kOjpkb0FwcGx5
KCkKICAgICBpZiAocHJlZml4VGV4dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IG1fdGV4dDEgPSBUZXh0OjpjcmVhdGUoJmRvY3VtZW50KCksIHByZWZpeFRleHQpOworICAgIG1f
dGV4dDEgPSBUZXh0OjpjcmVhdGUoZG9jdW1lbnQoKSwgcHJlZml4VGV4dCk7CiAgICAgQVNTRVJU
KG1fdGV4dDEpOwogICAgIGRvY3VtZW50KCkubWFya2VycygpLmNvcHlNYXJrZXJzKG1fdGV4dDIu
Z2V0KCksIDAsIG1fb2Zmc2V0LCBtX3RleHQxLmdldCgpLCAwKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFya3VwLmNwcAkocmV2aXNpb24gMTU1ODA3KQorKysgU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjIsNyArNjYyLDcgQEAgUGFzc1Jl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbQogewogICAgIC8vIFdlIHVzZSBhIGZh
a2UgYm9keSBlbGVtZW50IGhlcmUgdG8gdHJpY2sgdGhlIEhUTUwgcGFyc2VyIHRvIHVzaW5nIHRo
ZSBJbkJvZHkgaW5zZXJ0aW9uIG1vZGUuCiAgICAgUmVmUHRyPEhUTUxCb2R5RWxlbWVudD4gZmFr
ZUJvZHkgPSBIVE1MQm9keUVsZW1lbnQ6OmNyZWF0ZSgqZG9jdW1lbnQpOwotICAgIFJlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZShkb2N1
bWVudCk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gRG9jdW1lbnRG
cmFnbWVudDo6Y3JlYXRlKCpkb2N1bWVudCk7CiAKICAgICBmcmFnbWVudC0+cGFyc2VIVE1MKG1h
cmt1cCwgZmFrZUJvZHkuZ2V0KCksIHBhcnNlckNvbnRlbnRQb2xpY3kpOwogCkBAIC03NDMsNyAr
NzQzLDcgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbQogICAgIC8v
IFdoZW4gdGhlcmUncyBhIHNwZWNpYWwgY29tbW9uIGFuY2VzdG9yIG91dHNpZGUgb2YgdGhlIGZy
YWdtZW50LCB3ZSBtdXN0IGluY2x1ZGUgaXQgYXMgd2VsbCB0bwogICAgIC8vIHByZXNlcnZlIHRo
ZSBzdHJ1Y3R1cmUgYW5kIGFwcGVhcmFuY2Ugb2YgdGhlIGZyYWdtZW50LiBGb3IgZXhhbXBsZSwg
aWYgdGhlIGZyYWdtZW50IGNvbnRhaW5zCiAgICAgLy8gVEQsIHdlIG5lZWQgdG8gaW5jbHVkZSB0
aGUgZW5jbG9zaW5nIFRBQkxFIHRhZyBhcyB3ZWxsLgotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBmcmFnbWVudCA9IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAg
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gRG9jdW1lbnRGcmFnbWVudDo6Y3Jl
YXRlKCpkb2N1bWVudCk7CiAgICAgaWYgKHNwZWNpYWxDb21tb25BbmNlc3RvcikKICAgICAgICAg
ZnJhZ21lbnQtPmFwcGVuZENoaWxkKHNwZWNpYWxDb21tb25BbmNlc3RvciwgQVNTRVJUX05PX0VY
Q0VQVElPTik7CiAgICAgZWxzZQpAQCAtOTcyLDcgKzk3Miw3IEBAIFBhc3NSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gY3JlYXRlRnJhZ20KICAgICBpZiAoY29udGV4dEVsZW1lbnQtPmhhc1RhZ05h
bWUodGVtcGxhdGVUYWcpKQogICAgICAgICBkb2N1bWVudCA9IGRvY3VtZW50LT5lbnN1cmVUZW1w
bGF0ZURvY3VtZW50KCk7CiAjZW5kaWYKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJh
Z21lbnQgPSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIFJlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZSgqZG9j
dW1lbnQpOwogCiAgICAgaWYgKGRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKSB7CiAgICAgICAg
IGZyYWdtZW50LT5wYXJzZUhUTUwobWFya3VwLCBjb250ZXh0RWxlbWVudCwgcGFyc2VyQ29udGVu
dFBvbGljeSk7CkBAIC05OTksNyArOTk5LDcgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBjcmVhdGVGcmFnbQogICAgICAgICBSZWZQdHI8SFRNTEJvZHlFbGVtZW50PiBmYWtlQm9keSA9
IEhUTUxCb2R5RWxlbWVudDo6Y3JlYXRlKCpvdXRwdXREb2MpOwogICAgICAgICBmcmFnbWVudC0+
cGFyc2VIVE1MKHNvdXJjZVN0cmluZywgZmFrZUJvZHkuZ2V0KCkpOwogICAgIH0gZWxzZSBpZiAo
c291cmNlTUlNRVR5cGUgPT0gInRleHQvcGxhaW4iKQotICAgICAgICBmcmFnbWVudC0+cGFyc2Vy
QXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKG91dHB1dERvYywgc291cmNlU3RyaW5nKSk7CisgICAg
ICAgIGZyYWdtZW50LT5wYXJzZXJBcHBlbmRDaGlsZChUZXh0OjpjcmVhdGUoKm91dHB1dERvYywg
c291cmNlU3RyaW5nKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIGJvb2wgc3VjY2Vzc2Z1bFBhcnNl
ID0gZnJhZ21lbnQtPnBhcnNlWE1MKHNvdXJjZVN0cmluZywgMCk7CiAgICAgICAgIGlmICghc3Vj
Y2Vzc2Z1bFBhcnNlKQpAQCAtMTEwMyw3ICsxMTAzLDcgQEAgdm9pZCByZXBsYWNlQ2hpbGRyZW5X
aXRoVGV4dChDb250YWluZXJObwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRy
PFRleHQ+IHRleHROb2RlID0gVGV4dDo6Y3JlYXRlKCZjb250YWluZXJOb2RlLT5kb2N1bWVudCgp
LCB0ZXh0KTsKKyAgICBSZWZQdHI8VGV4dD4gdGV4dE5vZGUgPSBUZXh0OjpjcmVhdGUoY29udGFp
bmVyTm9kZS0+ZG9jdW1lbnQoKSwgdGV4dCk7CiAKICAgICBpZiAoaGFzT25lQ2hpbGQoY29udGFp
bmVyTm9kZS5nZXQoKSkpIHsKICAgICAgICAgY29udGFpbmVyTm9kZS0+cmVwbGFjZUNoaWxkKHRl
eHROb2RlLnJlbGVhc2UoKSwgY29udGFpbmVyTm9kZS0+Zmlyc3RDaGlsZCgpLCBlYyk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcAkocmV2aXNp
b24gMTU1ODA3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQsNyBAQCB2b2lkIEZUUERpcmVjdG9yeURv
Y3VtZW50UGFyc2VyOjphcHBlbmRFCiAgICAgcm93RWxlbWVudC0+c2V0QXR0cmlidXRlKCJjbGFz
cyIsICJmdHBEaXJlY3RvcnlFbnRyeVJvdyIsIElHTk9SRV9FWENFUFRJT04pOwogCiAgICAgUmVm
UHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KHRkVGFnLCBm
YWxzZSk7Ci0gICAgZWxlbWVudC0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKGRvY3VtZW50KCks
IFN0cmluZygmbm9CcmVha1NwYWNlLCAxKSksIElHTk9SRV9FWENFUFRJT04pOworICAgIGVsZW1l
bnQtPmFwcGVuZENoaWxkKFRleHQ6OmNyZWF0ZSgqZG9jdW1lbnQoKSwgU3RyaW5nKCZub0JyZWFr
U3BhY2UsIDEpKSwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgaWYgKGlzRGlyZWN0b3J5KQogICAg
ICAgICBlbGVtZW50LT5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgImZ0cERpcmVjdG9yeUljb24gZnRw
RGlyZWN0b3J5VHlwZURpcmVjdG9yeSIsIElHTk9SRV9FWENFUFRJT04pOwogICAgIGVsc2UKQEAg
LTEyNiwxMiArMTI2LDEyIEBAIHZvaWQgRlRQRGlyZWN0b3J5RG9jdW1lbnRQYXJzZXI6OmFwcGVu
ZEUKICAgICByb3dFbGVtZW50LT5hcHBlbmRDaGlsZChlbGVtZW50LCBJR05PUkVfRVhDRVBUSU9O
KTsKIAogICAgIGVsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KHRkVGFnLCBmYWxz
ZSk7Ci0gICAgZWxlbWVudC0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKGRvY3VtZW50KCksIGRh
dGUpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICBlbGVtZW50LT5hcHBlbmRDaGlsZChUZXh0Ojpj
cmVhdGUoKmRvY3VtZW50KCksIGRhdGUpLCBJR05PUkVfRVhDRVBUSU9OKTsKICAgICBlbGVtZW50
LT5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgImZ0cERpcmVjdG9yeUZpbGVEYXRlIiwgSUdOT1JFX0VY
Q0VQVElPTik7CiAgICAgcm93RWxlbWVudC0+YXBwZW5kQ2hpbGQoZWxlbWVudCwgSUdOT1JFX0VY
Q0VQVElPTik7CiAKICAgICBlbGVtZW50ID0gZG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudCh0ZFRh
ZywgZmFsc2UpOwotICAgIGVsZW1lbnQtPmFwcGVuZENoaWxkKFRleHQ6OmNyZWF0ZShkb2N1bWVu
dCgpLCBzaXplKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgZWxlbWVudC0+YXBwZW5kQ2hpbGQo
VGV4dDo6Y3JlYXRlKCpkb2N1bWVudCgpLCBzaXplKSwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAg
ZWxlbWVudC0+c2V0QXR0cmlidXRlKCJjbGFzcyIsICJmdHBEaXJlY3RvcnlGaWxlU2l6ZSIsIElH
Tk9SRV9FWENFUFRJT04pOwogICAgIHJvd0VsZW1lbnQtPmFwcGVuZENoaWxkKGVsZW1lbnQsIElH
Tk9SRV9FWENFUFRJT04pOwogfQpAQCAtMTQ2LDcgKzE0Niw3IEBAIFBhc3NSZWZQdHI8RWxlbWVu
dD4gRlRQRGlyZWN0b3J5RG9jdW1lbnQKIAogICAgIFJlZlB0cjxFbGVtZW50PiBhbmNob3JFbGVt
ZW50ID0gZG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudChhVGFnLCBmYWxzZSk7CiAgICAgYW5jaG9y
RWxlbWVudC0+c2V0QXR0cmlidXRlKCJocmVmIiwgZnVsbFVSTCwgSUdOT1JFX0VYQ0VQVElPTik7
Ci0gICAgYW5jaG9yRWxlbWVudC0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKGRvY3VtZW50KCks
IGZpbGVuYW1lKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgYW5jaG9yRWxlbWVudC0+YXBwZW5k
Q2hpbGQoVGV4dDo6Y3JlYXRlKCpkb2N1bWVudCgpLCBmaWxlbmFtZSksIElHTk9SRV9FWENFUFRJ
T04pOwogCiAgICAgUmVmUHRyPEVsZW1lbnQ+IHRkRWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0
ZUVsZW1lbnQodGRUYWcsIGZhbHNlKTsKICAgICB0ZEVsZW1lbnQtPmFwcGVuZENoaWxkKGFuY2hv
ckVsZW1lbnQsIElHTk9SRV9FWENFUFRJT04pOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRGV0YWlsc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTERldGFpbHNFbGVtZW50LmNwcAkocmV2aXNpb24gMTU1ODA3KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRGV0YWlsc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5
MSw3IEBAIHByaXZhdGU6CiBQYXNzUmVmUHRyPERldGFpbHNTdW1tYXJ5RWxlbWVudD4gRGV0YWls
c1N1bW1hcnlFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQogewogICAgIFJlZlB0
cjxIVE1MU3VtbWFyeUVsZW1lbnQ+IHN1bW1hcnkgPSBIVE1MU3VtbWFyeUVsZW1lbnQ6OmNyZWF0
ZShzdW1tYXJ5VGFnLCBkb2N1bWVudCk7Ci0gICAgc3VtbWFyeS0+YXBwZW5kQ2hpbGQoVGV4dDo6
Y3JlYXRlKCZkb2N1bWVudCwgZGVmYXVsdERldGFpbHNTdW1tYXJ5VGV4dCgpKSwgQVNTRVJUX05P
X0VYQ0VQVElPTik7CisgICAgc3VtbWFyeS0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKGRvY3Vt
ZW50LCBkZWZhdWx0RGV0YWlsc1N1bW1hcnlUZXh0KCkpLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsK
IAogICAgIFJlZlB0cjxEZXRhaWxzU3VtbWFyeUVsZW1lbnQ+IGRldGFpbHNTdW1tYXJ5ID0gYWRv
cHRSZWYobmV3IERldGFpbHNTdW1tYXJ5RWxlbWVudChkb2N1bWVudCkpOwogICAgIGRldGFpbHNT
dW1tYXJ5LT5hcHBlbmRDaGlsZChzdW1tYXJ5KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxNTU4MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA4LDcgKzQwOCw3IEBAIHZvaWQgSFRNTEVs
ZW1lbnQ6OnNldE91dGVySFRNTChjb25zdCBTdHIKIAogUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBIVE1MRWxlbWVudDo6dGV4dFRvRnJhZ21lbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQg
PSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUoJmRvY3VtZW50KCkpOworICAgIFJlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZShkb2N1bWVu
dCgpKTsKICAgICB1bnNpZ25lZCBpbnQgaSwgbGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsKICAgICBV
Q2hhciBjID0gMDsKICAgICBmb3IgKHVuc2lnbmVkIGludCBzdGFydCA9IDA7IHN0YXJ0IDwgbGVu
Z3RoOyApIHsKQEAgLTQyMCw3ICs0MjAsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IEhUTUxFbGVtZW50CiAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAg
ZnJhZ21lbnQtPmFwcGVuZENoaWxkKFRleHQ6OmNyZWF0ZSgmZG9jdW1lbnQoKSwgdGV4dC5zdWJz
dHJpbmcoc3RhcnQsIGkgLSBzdGFydCkpLCBlYyk7CisgICAgICAgIGZyYWdtZW50LT5hcHBlbmRD
aGlsZChUZXh0OjpjcmVhdGUoZG9jdW1lbnQoKSwgdGV4dC5zdWJzdHJpbmcoc3RhcnQsIGkgLSBz
dGFydCkpLCBlYyk7CiAgICAgICAgIGlmIChlYykKICAgICAgICAgICAgIHJldHVybiAwOwogCkBA
IC01MTYsNyArNTE2LDcgQEAgdm9pZCBIVE1MRWxlbWVudDo6c2V0T3V0ZXJUZXh0KGNvbnN0IFN0
cgogICAgIGlmICh0ZXh0LmNvbnRhaW5zKCdccicpIHx8IHRleHQuY29udGFpbnMoJ1xuJykpCiAg
ICAgICAgIG5ld0NoaWxkID0gdGV4dFRvRnJhZ21lbnQodGV4dCwgZWMpOwogICAgIGVsc2UKLSAg
ICAgICAgbmV3Q2hpbGQgPSBUZXh0OjpjcmVhdGUoJmRvY3VtZW50KCksIHRleHQpOworICAgICAg
ICBuZXdDaGlsZCA9IFRleHQ6OmNyZWF0ZShkb2N1bWVudCgpLCB0ZXh0KTsKIAogICAgIGlmICgh
dGhpcyB8fCAhcGFyZW50Tm9kZSgpKQogICAgICAgICBlYyA9IEhJRVJBUkNIWV9SRVFVRVNUX0VS
UjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEtleWdlbkVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEtleWdlbkVsZW1lbnQuY3BwCShyZXZp
c2lvbiAxNTU4MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxLZXlnZW5FbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBpbmxpbmUgSFRNTEtleWdlbkVsZW1l
bnQ6OkhUTUxLZXlnZW5FbGVtCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUo
KTsgKytpKSB7CiAgICAgICAgIFJlZlB0cjxIVE1MT3B0aW9uRWxlbWVudD4gb3B0aW9uID0gSFRN
TE9wdGlvbkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CiAgICAgICAgIHNlbGVjdC0+YXBwZW5k
Q2hpbGQob3B0aW9uLCBJR05PUkVfRVhDRVBUSU9OKTsKLSAgICAgICAgb3B0aW9uLT5hcHBlbmRD
aGlsZChUZXh0OjpjcmVhdGUoJmRvY3VtZW50LCBrZXlzW2ldKSwgSUdOT1JFX0VYQ0VQVElPTik7
CisgICAgICAgIG9wdGlvbi0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKGRvY3VtZW50LCBrZXlz
W2ldKSwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgfQogCiAgICAgZW5zdXJlVXNlckFnZW50U2hh
ZG93Um9vdCgpLmFwcGVuZENoaWxkKHNlbGVjdCwgSUdOT1JFX0VYQ0VQVElPTik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMTU1ODA3
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc0LDcgKzc0LDcgQEAgUGFzc1JlZlB0cjxIVE1MT3B0aW9uRWxlbWVudD4gSFRN
TE9wdGlvbgogewogICAgIFJlZlB0cjxIVE1MT3B0aW9uRWxlbWVudD4gZWxlbWVudCA9IGFkb3B0
UmVmKG5ldyBIVE1MT3B0aW9uRWxlbWVudChvcHRpb25UYWcsICpkb2N1bWVudCkpOwogCi0gICAg
UmVmUHRyPFRleHQ+IHRleHQgPSBUZXh0OjpjcmVhdGUoZG9jdW1lbnQsIGRhdGEuaXNOdWxsKCkg
PyAiIiA6IGRhdGEpOworICAgIFJlZlB0cjxUZXh0PiB0ZXh0ID0gVGV4dDo6Y3JlYXRlKCpkb2N1
bWVudCwgZGF0YS5pc051bGwoKSA/ICIiIDogZGF0YSk7CiAKICAgICBlYyA9IDA7CiAgICAgZWxl
bWVudC0+YXBwZW5kQ2hpbGQodGV4dC5yZWxlYXNlKCksIGVjKTsKQEAgLTE0Niw3ICsxNDYsNyBA
QCB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjpzZXRUZXh0KGNvbnN0IFN0CiAgICAgICAgIHRvVGV4
dChjaGlsZCktPnNldERhdGEodGV4dCwgZWMpOwogICAgIGVsc2UgewogICAgICAgICByZW1vdmVD
aGlsZHJlbigpOwotICAgICAgICBhcHBlbmRDaGlsZChUZXh0OjpjcmVhdGUoJmRvY3VtZW50KCks
IHRleHQpLCBlYyk7CisgICAgICAgIGFwcGVuZENoaWxkKFRleHQ6OmNyZWF0ZShkb2N1bWVudCgp
LCB0ZXh0KSwgZWMpOwogICAgIH0KICAgICAKICAgICBpZiAoc2VsZWN0SXNNZW51TGlzdCAmJiBz
ZWxlY3QtPnNlbGVjdGVkSW5kZXgoKSAhPSBvbGRTZWxlY3RlZEluZGV4KQpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MVGVtcGxhdGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxUZW1wbGF0ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTU4MDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZW1wbGF0ZUVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIFBhc3NSZWZQdHI8SFRNTFRlbXBsYXRlRWxlbWVudD4g
SFRNTFRlbXAKIERvY3VtZW50RnJhZ21lbnQqIEhUTUxUZW1wbGF0ZUVsZW1lbnQ6OmNvbnRlbnQo
KSBjb25zdAogewogICAgIGlmICghbV9jb250ZW50KQotICAgICAgICBtX2NvbnRlbnQgPSBUZW1w
bGF0ZUNvbnRlbnREb2N1bWVudEZyYWdtZW50OjpjcmVhdGUoZG9jdW1lbnQoKS5lbnN1cmVUZW1w
bGF0ZURvY3VtZW50KCksIHRoaXMpOworICAgICAgICBtX2NvbnRlbnQgPSBUZW1wbGF0ZUNvbnRl
bnREb2N1bWVudEZyYWdtZW50OjpjcmVhdGUoKmRvY3VtZW50KCkuZW5zdXJlVGVtcGxhdGVEb2N1
bWVudCgpLCB0aGlzKTsKIAogICAgIHJldHVybiBtX2NvbnRlbnQuZ2V0KCk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWV3U291cmNlRG9jdW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5jcHAJKHJldmlz
aW9uIDE1NTgwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOSw3ICsyMDksNyBAQCB2b2lkIEhUTUxWaWV3U291
cmNlRG9jdW1lbnQ6OmFkZExpbmUoY29uCiAgICAgbV9jdXJyZW50ID0gbV90ZCA9IHRkOwogCiAj
aWZkZWYgREVCVUdfTElORV9OVU1CRVJTCi0gICAgUmVmUHRyPFRleHQ+IGxpbmVOdW1iZXJUZXh0
ID0gVGV4dDo6Y3JlYXRlKHRoaXMsIFN0cmluZzo6bnVtYmVyKHBhcnNlcigpLT5saW5lTnVtYmVy
KCkgKyAxKSArICIgIik7CisgICAgUmVmUHRyPFRleHQ+IGxpbmVOdW1iZXJUZXh0ID0gVGV4dDo6
Y3JlYXRlKCp0aGlzLCBTdHJpbmc6Om51bWJlcihwYXJzZXIoKS0+bGluZU51bWJlcigpICsgMSkg
KyAiICIpOwogICAgIHRkLT5hZGRDaGlsZChsaW5lTnVtYmVyVGV4dCk7CiAgICAgU3R5bGU6OmF0
dGFjaFJlbmRlclRyZWUobGluZU51bWJlclRleHQuZ2V0KCkpOwogI2VuZGlmCkBAIC0yNTEsNyAr
MjUxLDcgQEAgdm9pZCBIVE1MVmlld1NvdXJjZURvY3VtZW50OjphZGRUZXh0KGNvbgogICAgICAg
ICAgICAgZmluaXNoTGluZSgpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAg
ICAgICAgUmVmUHRyPFRleHQ+IHRleHQgPSBUZXh0OjpjcmVhdGUodGhpcywgc3Vic3RyaW5nKTsK
KyAgICAgICAgUmVmUHRyPFRleHQ+IHRleHQgPSBUZXh0OjpjcmVhdGUoKnRoaXMsIHN1YnN0cmlu
Zyk7CiAgICAgICAgIG1fY3VycmVudC0+cGFyc2VyQXBwZW5kQ2hpbGQodGV4dCk7CiAgICAgICAg
IFN0eWxlOjphdHRhY2hUZXh0UmVuZGVyZXIoKnRleHQpOwogICAgICAgICBpZiAoaSA8IHNpemUg
LSAxKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9WYWxpZGF0aW9uTWVzc2FnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9WYWxpZGF0aW9uTWVzc2FnZS5jcHAJKHJl
dmlzaW9uIDE1NTgwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsNyArMTMxLDcgQEAgdm9pZCBWYWxpZGF0aW9uTWVz
c2FnZTo6c2V0TWVzc2FnZURPTUFuZAogICAgIERvY3VtZW50JiBkb2N1bWVudCA9IG1fbWVzc2Fn
ZUhlYWRpbmctPmRvY3VtZW50KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpbmVz
LnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmIChpKSB7Ci0gICAgICAgICAgICBtX21lc3NhZ2VC
b2R5LT5hcHBlbmRDaGlsZChUZXh0OjpjcmVhdGUoJmRvY3VtZW50LCBsaW5lc1tpXSksIEFTU0VS
VF9OT19FWENFUFRJT04pOworICAgICAgICAgICAgbV9tZXNzYWdlQm9keS0+YXBwZW5kQ2hpbGQo
VGV4dDo6Y3JlYXRlKGRvY3VtZW50LCBsaW5lc1tpXSksIEFTU0VSVF9OT19FWENFUFRJT04pOwog
ICAgICAgICAgICAgaWYgKGkgPCBsaW5lcy5zaXplKCkgLSAxKQogICAgICAgICAgICAgICAgIG1f
bWVzc2FnZUJvZHktPmFwcGVuZENoaWxkKEhUTUxCUkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCks
IEFTU0VSVF9OT19FWENFUFRJT04pOwogICAgICAgICB9IGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAJKHJldmlz
aW9uIDE1NTgwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rp
b25TaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU4LDcgKzM1OCw3IEBAIHZvaWQgSFRNTENv
bnN0cnVjdGlvblNpdGU6Omluc2VydERvY3R5cGUKIAogICAgIGNvbnN0IFN0cmluZyYgcHVibGlj
SWQgPSBTdHJpbmdJbXBsOjpjcmVhdGU4Qml0SWZQb3NzaWJsZSh0b2tlbi0+cHVibGljSWRlbnRp
ZmllcigpKTsKICAgICBjb25zdCBTdHJpbmcmIHN5c3RlbUlkID0gU3RyaW5nSW1wbDo6Y3JlYXRl
OEJpdElmUG9zc2libGUodG9rZW4tPnN5c3RlbUlkZW50aWZpZXIoKSk7Ci0gICAgUmVmUHRyPERv
Y3VtZW50VHlwZT4gZG9jdHlwZSA9IERvY3VtZW50VHlwZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIHRv
a2VuLT5uYW1lKCksIHB1YmxpY0lkLCBzeXN0ZW1JZCk7CisgICAgUmVmUHRyPERvY3VtZW50VHlw
ZT4gZG9jdHlwZSA9IERvY3VtZW50VHlwZTo6Y3JlYXRlKCptX2RvY3VtZW50LCB0b2tlbi0+bmFt
ZSgpLCBwdWJsaWNJZCwgc3lzdGVtSWQpOwogICAgIGF0dGFjaExhdGVyKG1fYXR0YWNobWVudFJv
b3QsIGRvY3R5cGUucmVsZWFzZSgpKTsKIAogICAgIC8vIERPQ1RZUEUgbm9kZXMgYXJlIG9ubHkg
cHJvY2Vzc2VkIHdoZW4gcGFyc2luZyBmcmFnbWVudHMgdy9vIGNvbnRleHRFbGVtZW50cywgd2hp
Y2gKQEAgLTM4MCwyMCArMzgwLDIwIEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2Vy
dERvY3R5cGUKIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydENvbW1lbnQoQXRvbWlj
SFRNTFRva2VuKiB0b2tlbikKIHsKICAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9r
ZW46OkNvbW1lbnQpOwotICAgIGF0dGFjaExhdGVyKGN1cnJlbnROb2RlKCksIENvbW1lbnQ6OmNy
ZWF0ZSgmb3duZXJEb2N1bWVudEZvckN1cnJlbnROb2RlKCksIHRva2VuLT5jb21tZW50KCkpKTsK
KyAgICBhdHRhY2hMYXRlcihjdXJyZW50Tm9kZSgpLCBDb21tZW50OjpjcmVhdGUob3duZXJEb2N1
bWVudEZvckN1cnJlbnROb2RlKCksIHRva2VuLT5jb21tZW50KCkpKTsKIH0KIAogdm9pZCBIVE1M
Q29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Q29tbWVudE9uRG9jdW1lbnQoQXRvbWljSFRNTFRva2Vu
KiB0b2tlbikKIHsKICAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW46OkNvbW1l
bnQpOwotICAgIGF0dGFjaExhdGVyKG1fYXR0YWNobWVudFJvb3QsIENvbW1lbnQ6OmNyZWF0ZSht
X2RvY3VtZW50LCB0b2tlbi0+Y29tbWVudCgpKSk7CisgICAgYXR0YWNoTGF0ZXIobV9hdHRhY2ht
ZW50Um9vdCwgQ29tbWVudDo6Y3JlYXRlKCptX2RvY3VtZW50LCB0b2tlbi0+Y29tbWVudCgpKSk7
CiB9CiAKIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydENvbW1lbnRPbkhUTUxIdG1s
RWxlbWVudChBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewogICAgIEFTU0VSVCh0b2tlbi0+dHlw
ZSgpID09IEhUTUxUb2tlbjo6Q29tbWVudCk7CiAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0g
bV9vcGVuRWxlbWVudHMucm9vdE5vZGUoKTsKLSAgICBhdHRhY2hMYXRlcihwYXJlbnQsIENvbW1l
bnQ6OmNyZWF0ZSgmcGFyZW50LT5kb2N1bWVudCgpLCB0b2tlbi0+Y29tbWVudCgpKSk7CisgICAg
YXR0YWNoTGF0ZXIocGFyZW50LCBDb21tZW50OjpjcmVhdGUocGFyZW50LT5kb2N1bWVudCgpLCB0
b2tlbi0+Y29tbWVudCgpKSk7CiB9CiAKIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2Vy
dEhUTUxIZWFkRWxlbWVudChBdG9taWNIVE1MVG9rZW4qIHRva2VuKQpAQCAtNTEyLDExICs1MTIs
MTEgQEAgdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0VGV4dE5vZAogICAgIH0KIAog
ICAgIHdoaWxlIChjdXJyZW50UG9zaXRpb24gPCBjaGFyYWN0ZXJzLmxlbmd0aCgpKSB7Ci0gICAg
ICAgIFJlZlB0cjxUZXh0PiB0ZXh0Tm9kZSA9IFRleHQ6OmNyZWF0ZVdpdGhMZW5ndGhMaW1pdCgm
dGFzay5wYXJlbnQtPmRvY3VtZW50KCksIHNob3VsZFVzZUF0b21pY1N0cmluZyA/IEF0b21pY1N0
cmluZyhjaGFyYWN0ZXJzKS5zdHJpbmcoKSA6IGNoYXJhY3RlcnMsIGN1cnJlbnRQb3NpdGlvbiwg
bGVuZ3RoTGltaXQpOworICAgICAgICBSZWZQdHI8VGV4dD4gdGV4dE5vZGUgPSBUZXh0OjpjcmVh
dGVXaXRoTGVuZ3RoTGltaXQodGFzay5wYXJlbnQtPmRvY3VtZW50KCksIHNob3VsZFVzZUF0b21p
Y1N0cmluZyA/IEF0b21pY1N0cmluZyhjaGFyYWN0ZXJzKS5zdHJpbmcoKSA6IGNoYXJhY3RlcnMs
IGN1cnJlbnRQb3NpdGlvbiwgbGVuZ3RoTGltaXQpOwogICAgICAgICAvLyBJZiB3ZSBoYXZlIGEg
d2hvbGUgc3RyaW5nIG9mIHVuYnJlYWthYmxlIGNoYXJhY3RlcnMgdGhlIGFib3ZlIGNvdWxkIGxl
YWQgdG8gYW4gaW5maW5pdGUgbG9vcC4gRXhjZWVkaW5nIHRoZSBsZW5ndGggbGltaXQgaXMgdGhl
IGxlc3NlciBldmlsLgogICAgICAgICBpZiAoIXRleHROb2RlLT5sZW5ndGgoKSkgewogICAgICAg
ICAgICAgU3RyaW5nIHN1YnN0cmluZyA9IGNoYXJhY3RlcnMuc3Vic3RyaW5nKGN1cnJlbnRQb3Np
dGlvbik7Ci0gICAgICAgICAgICB0ZXh0Tm9kZSA9IFRleHQ6OmNyZWF0ZSgmdGFzay5wYXJlbnQt
PmRvY3VtZW50KCksIHNob3VsZFVzZUF0b21pY1N0cmluZyA/IEF0b21pY1N0cmluZyhzdWJzdHJp
bmcpLnN0cmluZygpIDogc3Vic3RyaW5nKTsKKyAgICAgICAgICAgIHRleHROb2RlID0gVGV4dDo6
Y3JlYXRlKHRhc2sucGFyZW50LT5kb2N1bWVudCgpLCBzaG91bGRVc2VBdG9taWNTdHJpbmcgPyBB
dG9taWNTdHJpbmcoc3Vic3RyaW5nKS5zdHJpbmcoKSA6IHN1YnN0cmluZyk7CiAgICAgICAgIH0K
IAogICAgICAgICBjdXJyZW50UG9zaXRpb24gKz0gdGV4dE5vZGUtPmxlbmd0aCgpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmNwcAkocmV2aXNpb24gMTU1
ODA3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MjQsNyArNTI0LDcgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBUZXh0VHJhY2tDdQogICAgIGlmICghbV93ZWJWVFROb2RlVHJlZSkKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY2xvbmVkRnJhZ21lbnQgPSBEb2N1
bWVudEZyYWdtZW50OjpjcmVhdGUoJm93bmVyRG9jdW1lbnQoKSk7CisgICAgUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IGNsb25lZEZyYWdtZW50ID0gRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKG93
bmVyRG9jdW1lbnQoKSk7CiAgICAgY29weVdlYlZUVE5vZGVUb0RPTVRyZWUobV93ZWJWVFROb2Rl
VHJlZS5nZXQoKSwgY2xvbmVkRnJhZ21lbnQuZ2V0KCkpOwogICAgIHJldHVybiBjbG9uZWRGcmFn
bWVudC5yZWxlYXNlKCk7CiB9CkBAIC01MzYsNyArNTM2LDcgQEAgUGFzc1JlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBUZXh0VHJhY2tDdQogICAgIGlmICghbV93ZWJWVFROb2RlVHJlZSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKLSAgICBjbG9uZWRGcmFnbWVudCA9IERvY3VtZW50RnJhZ21lbnQ6OmNy
ZWF0ZSgmb3duZXJEb2N1bWVudCgpKTsKKyAgICBjbG9uZWRGcmFnbWVudCA9IERvY3VtZW50RnJh
Z21lbnQ6OmNyZWF0ZShvd25lckRvY3VtZW50KCkpOwogICAgIG1fd2ViVlRUTm9kZVRyZWUtPmNs
b25lQ2hpbGROb2RlcyhjbG9uZWRGcmFnbWVudC5nZXQoKSk7CiAgICAgcmV0dXJuIGNsb25lZEZy
YWdtZW50LnJlbGVhc2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svV2Vi
VlRUUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dl
YlZUVFBhcnNlci5jcHAJKHJldmlzaW9uIDE1NTgwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
dHJhY2svV2ViVlRUUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMwLDcgKzMzMCw3IEBA
IFdlYlZUVFBhcnNlcjo6UGFyc2VTdGF0ZSBXZWJWVFRQYXJzZXI6OmkKICAgICByZXR1cm4gSWQ7
CiB9CiAKLVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gIFdlYlZUVFBhcnNlcjo6Y3JlYXRl
RG9jdW1lbnRGcmFnbWVudEZyb21DdWVUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKK1Bhc3NSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gV2ViVlRUUGFyc2VyOjpjcmVhdGVEb2N1bWVudEZyYWdtZW50
RnJvbUN1ZVRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KQogewogICAgIC8vIEN1ZSB0ZXh0IHByb2Nl
c3NpbmcgYmFzZWQgb24KICAgICAvLyA0LjguMTAuMTMuNCBXZWJWVFQgY3VlIHRleHQgcGFyc2lu
ZyBydWxlcyBhbmQKQEAgLTM0Miw3ICszNDIsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+ICBXZWJWVFRQYXJzCiAgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNE
b2N1bWVudCgpKTsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSB0b0RvY3VtZW50KG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgCi0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZy
YWdtZW50ID0gRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUoKmRv
Y3VtZW50KTsKICAgICBtX2N1cnJlbnROb2RlID0gZnJhZ21lbnQ7CiAgICAgbV90b2tlbml6ZXIt
PnJlc2V0KCk7CiAgICAgbV90b2tlbi5jbGVhcigpOwpAQCAtNTAwLDcgKzUwMCw3IEBAIHZvaWQg
V2ViVlRUUGFyc2VyOjpjb25zdHJ1Y3RUcmVlRnJvbVRva2UKICAgICBzd2l0Y2ggKG1fdG9rZW4u
dHlwZSgpKSB7CiAgICAgY2FzZSBXZWJWVFRUb2tlblR5cGVzOjpDaGFyYWN0ZXI6IHsKICAgICAg
ICAgU3RyaW5nIGNvbnRlbnQobV90b2tlbi5jaGFyYWN0ZXJzKCkpOyAvLyBGSVhNRTogVGhpcyBz
aG91bGQgYmUgOGJpdCBpZiBwb3NzaWJsZS4KLSAgICAgICAgUmVmUHRyPFRleHQ+IGNoaWxkID0g
VGV4dDo6Y3JlYXRlKGRvY3VtZW50LCBjb250ZW50KTsKKyAgICAgICAgUmVmUHRyPFRleHQ+IGNo
aWxkID0gVGV4dDo6Y3JlYXRlKCpkb2N1bWVudCwgY29udGVudCk7CiAgICAgICAgIG1fY3VycmVu
dE5vZGUtPnBhcnNlckFwcGVuZENoaWxkKGNoaWxkKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpA
QCAtNTQxLDcgKzU0MSw3IEBAIHZvaWQgV2ViVlRUUGFyc2VyOjpjb25zdHJ1Y3RUcmVlRnJvbVRv
a2UKICAgICAgICAgU3RyaW5nIGNoYXJhY3RlcnNTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlOEJp
dElmUG9zc2libGUobV90b2tlbi5jaGFyYWN0ZXJzKCkpKTsKICAgICAgICAgZG91YmxlIHRpbWUg
PSBjb2xsZWN0VGltZVN0YW1wKGNoYXJhY3RlcnNTdHJpbmcsICZwb3NpdGlvbik7CiAgICAgICAg
IGlmICh0aW1lICE9IG1hbGZvcm1lZFRpbWUpCi0gICAgICAgICAgICBtX2N1cnJlbnROb2RlLT5w
YXJzZXJBcHBlbmRDaGlsZChQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmNyZWF0ZShkb2N1bWVudCwg
InRpbWVzdGFtcCIsIGNoYXJhY3RlcnNTdHJpbmcpKTsKKyAgICAgICAgICAgIG1fY3VycmVudE5v
ZGUtPnBhcnNlckFwcGVuZENoaWxkKFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6Y3JlYXRlKCpkb2N1
bWVudCwgInRpbWVzdGFtcCIsIGNoYXJhY3RlcnNTdHJpbmcpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0
Y2hTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9N
UGF0Y2hTdXBwb3J0LmNwcAkocmV2aXNpb24gMTU1ODA3KQorKysgU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw3ICsxMzEs
NyBAQCBOb2RlKiBET01QYXRjaFN1cHBvcnQ6OnBhdGNoTm9kZShOb2RlKiBuCiAKICAgICBOb2Rl
KiBwcmV2aW91c1NpYmxpbmcgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICAvLyBGSVhN
RTogVGhpcyBjb2RlIHNob3VsZCB1c2Ugb25lIG9mIGNyZWF0ZUZyYWdtZW50KiBpbiBtYXJrdXAu
aAotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IERvY3VtZW50RnJhZ21l
bnQ6OmNyZWF0ZShtX2RvY3VtZW50KTsKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJh
Z21lbnQgPSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUoKm1fZG9jdW1lbnQpOwogICAgIGlmICht
X2RvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKQogICAgICAgICBmcmFnbWVudC0+cGFyc2VIVE1M
KG1hcmt1cCwgbm9kZS0+cGFyZW50RWxlbWVudCgpID8gbm9kZS0+cGFyZW50RWxlbWVudCgpIDog
bV9kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCkpOwogICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdUUmVmRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1RSZWZFbGVtZW50LmNwcAkocmV2aXNpb24gMTU1ODA3KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1RSZWZFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDcgKzE1
MSw3IEBAIHZvaWQgU1ZHVFJlZkVsZW1lbnQ6OnVwZGF0ZVJlZmVyZW5jZWRUZXgKICAgICBBU1NF
UlQoc2hhZG93Um9vdCgpKTsKICAgICBTaGFkb3dSb290KiByb290ID0gc2hhZG93Um9vdCgpOwog
ICAgIGlmICghcm9vdC0+Zmlyc3RDaGlsZCgpKQotICAgICAgICByb290LT5hcHBlbmRDaGlsZChU
ZXh0OjpjcmVhdGUoJmRvY3VtZW50KCksIHRleHRDb250ZW50KSwgQVNTRVJUX05PX0VYQ0VQVElP
Tik7CisgICAgICAgIHJvb3QtPmFwcGVuZENoaWxkKFRleHQ6OmNyZWF0ZShkb2N1bWVudCgpLCB0
ZXh0Q29udGVudCksIEFTU0VSVF9OT19FWENFUFRJT04pOwogICAgIGVsc2UgewogICAgICAgICBB
U1NFUlQocm9vdC0+Zmlyc3RDaGlsZCgpLT5pc1RleHROb2RlKCkpOwogICAgICAgICByb290LT5m
aXJzdENoaWxkKCktPnNldFRleHRDb250ZW50KHRleHRDb250ZW50LCBBU1NFUlRfTk9fRVhDRVBU
SU9OKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQ
YXJzZXIuY3BwCShyZXZpc2lvbiAxNTU4MDcpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2Vy
L1hNTERvY3VtZW50UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDcgKzE0Nyw3IEBA
IHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmVudGVyVGV4dCgpCiB7CiAgICAgQVNTRVJUKG1fYnVm
ZmVyZWRUZXh0LnNpemUoKSA9PSAwKTsKICAgICBBU1NFUlQoIW1fbGVhZlRleHROb2RlKTsKLSAg
ICBtX2xlYWZUZXh0Tm9kZSA9IFRleHQ6OmNyZWF0ZSgmbV9jdXJyZW50Tm9kZS0+ZG9jdW1lbnQo
KSwgIiIpOworICAgIG1fbGVhZlRleHROb2RlID0gVGV4dDo6Y3JlYXRlKG1fY3VycmVudE5vZGUt
PmRvY3VtZW50KCksICIiKTsKICAgICBtX2N1cnJlbnROb2RlLT5wYXJzZXJBcHBlbmRDaGlsZCht
X2xlYWZUZXh0Tm9kZS5nZXQoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJz
ZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAJKHJldmlzaW9uIDE1
NTgwNykKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4
bWwyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzMyw3ICsxMDMzLDcgQEAgdm9pZCBYTUxEb2N1
bWVudFBhcnNlcjo6Y2RhdGFCbG9jayhjb25zdAogCiAgICAgZXhpdFRleHQoKTsKIAotICAgIFJl
ZlB0cjxDREFUQVNlY3Rpb24+IG5ld05vZGUgPSBDREFUQVNlY3Rpb246OmNyZWF0ZSgmbV9jdXJy
ZW50Tm9kZS0+ZG9jdW1lbnQoKSwgdG9TdHJpbmcocywgbGVuKSk7CisgICAgUmVmUHRyPENEQVRB
U2VjdGlvbj4gbmV3Tm9kZSA9IENEQVRBU2VjdGlvbjo6Y3JlYXRlKG1fY3VycmVudE5vZGUtPmRv
Y3VtZW50KCksIHRvU3RyaW5nKHMsIGxlbikpOwogICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFw
cGVuZENoaWxkKG5ld05vZGUuZ2V0KCkpOwogICAgIGlmIChtX3ZpZXcgJiYgIW5ld05vZGUtPmF0
dGFjaGVkKCkpCiAgICAgICAgIFN0eWxlOjphdHRhY2hUZXh0UmVuZGVyZXIoKm5ld05vZGUpOwpA
QCAtMTA1MSw3ICsxMDUxLDcgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6Y29tbWVudChjb25z
dCB4bQogCiAgICAgZXhpdFRleHQoKTsKIAotICAgIFJlZlB0cjxDb21tZW50PiBuZXdOb2RlID0g
Q29tbWVudDo6Y3JlYXRlKCZtX2N1cnJlbnROb2RlLT5kb2N1bWVudCgpLCB0b1N0cmluZyhzKSk7
CisgICAgUmVmUHRyPENvbW1lbnQ+IG5ld05vZGUgPSBDb21tZW50OjpjcmVhdGUobV9jdXJyZW50
Tm9kZS0+ZG9jdW1lbnQoKSwgdG9TdHJpbmcocykpOwogICAgIG1fY3VycmVudE5vZGUtPnBhcnNl
ckFwcGVuZENoaWxkKG5ld05vZGUuZ2V0KCkpOwogfQogCkBAIC0xMDk1LDcgKzEwOTUsNyBAQCB2
b2lkIFhNTERvY3VtZW50UGFyc2VyOjppbnRlcm5hbFN1YnNldChjCiAgICAgfQogCiAgICAgaWYg
KGRvY3VtZW50KCkpCi0gICAgICAgIGRvY3VtZW50KCktPnBhcnNlckFwcGVuZENoaWxkKERvY3Vt
ZW50VHlwZTo6Y3JlYXRlKGRvY3VtZW50KCksIHRvU3RyaW5nKG5hbWUpLCB0b1N0cmluZyhleHRl
cm5hbElEKSwgdG9TdHJpbmcoc3lzdGVtSUQpKSk7CisgICAgICAgIGRvY3VtZW50KCktPnBhcnNl
ckFwcGVuZENoaWxkKERvY3VtZW50VHlwZTo6Y3JlYXRlKCpkb2N1bWVudCgpLCB0b1N0cmluZyhu
YW1lKSwgdG9TdHJpbmcoZXh0ZXJuYWxJRCksIHRvU3RyaW5nKHN5c3RlbUlEKSkpOwogfQogCiBz
dGF0aWMgaW5saW5lIFhNTERvY3VtZW50UGFyc2VyKiBnZXRQYXJzZXIodm9pZCogY2xvc3VyZSkK
</data>
<flag name="review"
          id="233820"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>