<?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>78062</bug_id>
          
          <creation_ts>2012-02-07 17:40:32 -0800</creation_ts>
          <short_desc>DFG should have polymorphic put_by_id caching</short_desc>
          <delta_ts>2012-02-11 13:34:02 -0800</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>551609</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-02-07 17:40:32 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551610</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-02-07 17:40:48 -0800</bug_when>
    <thetext>&lt;rdar://problem/10326439&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551616</commentid>
    <comment_count>2</comment_count>
      <attachid>125968</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-02-07 17:47:10 -0800</bug_when>
    <thetext>Created attachment 125968
the patch

Still need some build foo, but other than that it seems to work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551629</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-07 17:56:24 -0800</bug_when>
    <thetext>Attachment 125968 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...&quot; exit_code: 1

Source/JavaScriptCore/bytecode/PolymorphicPutByIdList.h:156:  The parameter name &quot;putKind&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/bytecode/PolymorphicPutByIdList.h:157:  The parameter name &quot;stubInfo&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/bytecode/StructureStubInfo.h:41:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 3 in 12 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>551633</commentid>
    <comment_count>4</comment_count>
      <attachid>125971</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-02-07 18:02:32 -0800</bug_when>
    <thetext>Created attachment 125971
the patch

Added build goodness.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551635</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-07 18:03:44 -0800</bug_when>
    <thetext>Attachment 125971 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;S...&quot; exit_code: 1

Source/JavaScriptCore/bytecode/StructureStubInfo.h:41:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 16 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>551668</commentid>
    <comment_count>6</comment_count>
      <attachid>125979</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-02-07 18:37:46 -0800</bug_when>
    <thetext>Created attachment 125979
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551671</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-07 18:40:29 -0800</bug_when>
    <thetext>Attachment 125979 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;S...&quot; exit_code: 1

Source/JavaScriptCore/bytecode/StructureStubInfo.h:41:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 16 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>554132</commentid>
    <comment_count>8</comment_count>
      <attachid>125979</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-02-10 09:58:34 -0800</bug_when>
    <thetext>Comment on attachment 125979
the patch

View in context: https://bugs.webkit.org/attachment.cgi?id=125979&amp;action=review

No baseline support? :-D

Once this is in we can add support for setters!!!!

&gt; Source/JavaScriptCore/runtime/WriteBarrier.h:82
&gt; +    
&gt; +    // This is meant to be used like operator=, but is called copyFrom instead, in
&gt; +    // order to kindly inform the C++ compiler that its advice is not appreciated.
&gt; +    void copyFrom(const WriteBarrierBase&lt;T&gt;&amp; other)
&gt; +    {
&gt; +        m_cell = other.m_cell;
&gt; +    }

What was it complaining about?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554681</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-02-11 13:34:02 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/107485</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125968</attachid>
            <date>2012-02-07 17:47:10 -0800</date>
            <delta_ts>2012-02-07 18:02:32 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>polyputbyid_patch_1.diff</filename>
            <type>text/plain</type>
            <size>55595</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA3MDE4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkyIEBA
CisyMDEyLTAyLTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBoYXZlIHBvbHltb3JwaGljIHB1dF9ieV9pZCBjYWNoaW5nCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODA2MgorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMTAzMjY0Mzk+IDxyZGFyOi8vcHJvYmxlbS8xMDgyNDgzOT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEltcGxlbWVu
dGVkIHBvbHltb3JwaGljIHB1dF9ieV9pZCBjYWNoaW5nIGluIHRoZSBERkcsIGFuZCBhZGRlZCBt
dWNoIG9mIHRoZQorICAgICAgICBtYWNoaW5lcnkgdGhhdCB3b3VsZCBiZSBuZWVkZWQgdG8gaW1w
bGVtZW50IGl0IGluIHRoZSBvbGQgSklUIGFzIHdlbGwuCisgICAgICAgIAorICAgICAgICBJIGRl
Y2lkZWQgYWdhaW5zdCB1c2luZyB0aGUgb2xkIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlz
dCBtZWNoYW5pc20gYXMKKyAgICAgICAgdGhpcyBkaWRuJ3QgcXVpdGUgZml0IHdpdGggcHV0X2J5
X2lkLiBJbiBwYXJ0aWN1bGFyLCBJIHdhbnRlZCB0aGUgYWJpbGl0eSB0bworICAgICAgICBoYXZl
IG9uZSBsaXN0IHRoYXQgY2FwdHVyZWQgYWxsIHJlbGV2YW50IGNhc2VzIChpbmNsdWRpbmcgcHJv
dG8gcHV0X2J5X2lkCisgICAgICAgIGlmIHdlIGV2ZXIgZGVjaWRlZCB0byBkbyBpdCkuIEFuZCBJ
IHdhbnRlZCB0aGUgY29kZSB0byBoYXZlIGJldHRlcgorICAgICAgICBlbmNhcHN1bGF0aW9uLiBB
bmQgSSBkaWRuJ3Qgd2FudCB0byBnZXQgY29uZnVzZWQgYnkgdGhlIGZhY3QgdGhhdCB0aGUKKyAg
ICAgICAgb3JpZ2luYWwgKG5vbi1saXN0KSBwdXRfYnlfaWQgY2FjaGUgbWF5IGl0c2VsZiBjb25z
aXN0IG9mIGEgc3R1YiByb3V0aW5lLgorICAgICAgICAKKyAgICAgICAgVGhpcyBjb2RlIGlzIHN0
aWxsIHN1Yi1vcHRpbWFsIChmb3IgZXhhbXBsZSBhZGRpbmcgYSByZXBsYWNlIHRvIGEgbGlzdCB3
aG9zZQorICAgICAgICBwcmV2aW91cyBlbGVtZW50cyBhcmUgYWxsIHRyYW5zaXRpb25zIHNob3Vs
ZCBqdXN0IHJlcGF0Y2ggdGhlIG9yaWdpbmFsIGNvZGUsCisgICAgICAgIGJ1dCBoZXJlIGl0IHdp
bGwgZ2VuZXJhdGUgYSBzdHViKSBidXQgaXQgYWxyZWFkeSBnZW5lcmF0ZXMgYSA+MjAlIHNwZWVk
LXVwCisgICAgICAgIG9uIFY4LXNwbGF5LCBsZWFkaW5nIHRvIGEgMiUgd2luIG92ZXJhbGwgaW4g
c3BsYXkuIE5ldXRyYWwgZWxzZXdoZXJlLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0LmNwcDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpQdXRC
eUlkQWNjZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpQdXRCeUlk
QWNjZXNzOjp2aXNpdFdlYWspOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
OjpQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNQdXRC
eUlkTGlzdDo6ZnJvbSk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljUHV0QnlJZExpc3Q6On5Q
b2x5bW9ycGhpY1B1dEJ5SWRMaXN0KToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNQdXRCeUlk
TGlzdDo6aXNGdWxsKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6aXNB
bG1vc3RGdWxsKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6YWRkQWNj
ZXNzKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6dmlzaXRXZWFrKToK
KyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Lmg6IEFkZGVkLgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKFB1dEJ5SWRBY2Nlc3MpOgorICAgICAgICAoSlNDOjpQdXRC
eUlkQWNjZXNzOjpQdXRCeUlkQWNjZXNzKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6
dHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlB1dEJ5SWRBY2Nlc3M6OnJlcGxhY2UpOgorICAg
ICAgICAoSlNDOjpQdXRCeUlkQWNjZXNzOjppc1NldCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRB
Y2Nlc3M6Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRBY2Nlc3M6OnR5cGUpOgor
ICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNzOjppc1RyYW5zaXRpb24pOgorICAgICAgICAoSlND
OjpQdXRCeUlkQWNjZXNzOjppc1JlcGxhY2UpOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNz
OjpvbGRTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNzOjpzdHJ1Y3R1cmUp
OgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNzOjpuZXdTdHJ1Y3R1cmUpOgorICAgICAgICAo
SlNDOjpQdXRCeUlkQWNjZXNzOjpjaGFpbik6CisgICAgICAgIChKU0M6OlB1dEJ5SWRBY2Nlc3M6
OnN0dWJSb3V0aW5lKToKKyAgICAgICAgKFBvbHltb3JwaGljUHV0QnlJZExpc3QpOgorICAgICAg
ICAoSlNDOjpQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0OjpjdXJyZW50U2xvd1BhdGhUYXJnZXQpOgor
ICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojppc0VtcHR5KToKKyAgICAgICAg
KEpTQzo6UG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6c2l6ZSk6CisgICAgICAgIChKU0M6OlBvbHlt
b3JwaGljUHV0QnlJZExpc3Q6OmF0KToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNQdXRCeUlk
TGlzdDo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljUHV0QnlJZExpc3Q6
OmtpbmQpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEtpbmQuaDogQWRkZWQuCisgICAgICAgIChK
U0MpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcDoKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmRlcmVmKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
U3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjppc1B1dEJ5SWRB
Y2Nlc3MpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdFB1dEJ5SWRMaXN0
KToKKyAgICAgICAgKFN0cnVjdHVyZVN0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
U3R1YkluZm86OnJlc2V0KToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAg
ICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZn
L0RGR1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpERkc6OmFwcHJvcHJpYXRlR2VuZXJpY1B1
dEJ5SWRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6YXBwcm9wcmlhdGVMaXN0QnVpbGRp
bmdQdXRCeUlkRnVuY3Rpb24pOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpl
bWl0UHV0UmVwbGFjZVN0dWIpOgorICAgICAgICAoSlNDOjpERkc6OmVtaXRQdXRUcmFuc2l0aW9u
U3R1Yik6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAgICAgICAgKEpT
Qzo6REZHOjpkZmdSZXBhdGNoUHV0QnlJRCk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5QnVpbGRQ
dXRCeUlkTGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6ZGZnQnVpbGRQdXRCeUlkTGlzdCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6ZGZnUmVzZXRQdXRCeUlEKToKKyAgICAgICAgKiBkZmcvREZHUmVw
YXRjaC5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBydW50aW1lL1dyaXRlQmFycmllci5o
OgorICAgICAgICAoV3JpdGVCYXJyaWVyQmFzZSk6CisgICAgICAgIChKU0M6OldyaXRlQmFycmll
ckJhc2U6OmNvcHlGcm9tKToKKwogMjAxMi0wMi0wNyAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJy
YWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgQ3Jhc2ggb24gaHR0cDovL3d3dy5yaWNrc2hh
d2JhZ3MuY29tLwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEw
Njc3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNiArMTAyLDkgQEAKIAkJMEY5
NjNCMkQxM0Y4NTQwMjAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzQjJBMTNGODUzQkQwMDAyRDlCMiAv
KiBNZXRhQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEY5NjNCMkYxM0ZDNjZCQjAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3JIYW5k
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYz
QjJFMTNGQzY2QUUwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5NjNCMzgxM0ZDNkZFOTAw
MDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY5NjNCMzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGOUZD
OEMzMTRFMUI1RkUwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZDOEJGMTRFMUI1RkIw
MEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCAqLzsgfTsKKwkJMEY5RkM4QzQx
NEUxQjYwMDAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZDOEMwMTRFMUI1RkIwMEQ1MkFF
MCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY5RkM4QzUxNEUxQjYwNDAwRDUyQUUwIC8qIFB1dEtp
bmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZD
OEMxMTRFMUI1RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCQzBBRTcxNDk2QzdDNDAwRDRGQkREIC8qIERG
R0V4aXRQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgKi87
IH07CiAJCTBGQkMwQUU4MTQ5NkM3QzcwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCQzBBRTUxNDk2QzdD
MTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCRDdFNjkxNDQ3OTk5NjAwNDgxMzE1IC8qIENvZGVP
cmlnaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QkQ3RTY3MTQ0Nzk5OEYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTg5Niw2ICs4OTksOSBAQAogCQkwRjk2
M0IyQjEzRjg1M0M3MDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZXRhQWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY5NjNCMkUxM0ZDNjZBRTAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3JI
YW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWV0YUFsbG9jYXRvckhh
bmRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk2M0IzNjEzRkM2RkRFMDAw
MkQ5QjIgLyogVmFsdWVQcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFZhbHVlUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjlGQzhCRjE0
RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5RkM4QzAxNEUxQjVGQjAwRDUyQUUwIC8qIFBv
bHltb3JwaGljUHV0QnlJZExpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjlGQzhDMTE0RTFCNUZCMDBENTJBRTAgLyogUHV0S2luZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQdXRLaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
QkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBERkdFeGl0UHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGQkMwQUU1MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJv
ZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBERkdFeGl0UHJvZmlsZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkJEN0U2NzE0NDc5OThGMDA0ODEzMTUg
LyogQ29kZU9yaWdpbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlT3Jp
Z2luLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTUzLDYgKzI1NTksOSBAQAog
CQk5NjlBMDc4RjBFRDFEM0FFMDBGMUY2ODEgLyogYnl0ZWNvZGUgKi8gPSB7CiAJCQlpc2EgPSBQ
QlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGOUZDOEJGMTRFMUI1RkIwMEQ1MkFFMCAv
KiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCAqLywKKwkJCQkwRjlGQzhDMDE0RTFCNUZCMDBE
NTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oICovLAorCQkJCTBGOUZDOEMxMTRFMUI1
RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmggKi8sCiAJCQkJMEY5MzMyOTMxNENBN0RDMTAwODVGM0M2
IC8qIENhbGxMaW5rU3RhdHVzLmNwcCAqLywKIAkJCQkwRjkzMzI5NDE0Q0E3REMxMDA4NUYzQzYg
LyogQ2FsbExpbmtTdGF0dXMuaCAqLywKIAkJCQkwRjkzMzI5NTE0Q0E3REMxMDA4NUYzQzYgLyog
R2V0QnlJZFN0YXR1cy5jcHAgKi8sCkBAIC0zMTI4LDYgKzMxMzcsOCBAQAogCQkJCTBGNTVGMEY1
MTREMTA2M0MwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY2
RTE2QjE0REYzRjE2MDBCN0IyRTQgLyogREZHTm9kZVJlZmVyZW5jZUJsb2IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNjZFMTZDMTRERjNGMTYwMEI3QjJFNCAvKiBERkdOb2RlVXNlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjlGQzhDNDE0RTFCNjAwMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRC
eUlkTGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5RkM4QzUxNEUxQjYwNDAwRDUyQUUwIC8q
IFB1dEtpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzY3NCw2ICszNjg1LDcgQEAKIAkJCQk4NkI1
ODI2NzE0RDI3OTZDMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJODZCNTgyNjkxNEQyNzk3MDAwQTlDMzA2IC8qIENvZGVQcm9maWxpbmcuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQzJCOTE2QzUxNERBMDQwQzAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjlGQzhDMzE0RTFCNUZFMDBENTJBRTAgLyogUG9seW1v
cnBoaWNQdXRCeUlkTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNQdXRCeUlkTGlzdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQ1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgiCisKKyNpbmNsdWRlICJT
dHJ1Y3R1cmVTdHViSW5mby5oIgorCituYW1lc3BhY2UgSlNDIHsKKworUHV0QnlJZEFjY2VzcyBQ
dXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oCisgICAgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBpbml0aWFsU2xvd1BhdGgp
Cit7CisgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7CisgICAgCisgICAgc3dpdGNoIChzdHViSW5m
by5hY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6CisgICAg
ICAgIHJlc3VsdC5tX3R5cGUgPSBSZXBsYWNlOworICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1
cmUuY29weUZyb20oc3R1YkluZm8udS5wdXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJl
KTsKKyAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6
OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihpbml0aWFsU2xvd1BhdGgpOworICAgICAgICBicmVh
azsKKyAgICAgICAgCisgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0
OgorICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKKyAgICAgICAg
cmVzdWx0Lm1fdHlwZSA9IFRyYW5zaXRpb247CisgICAgICAgIHJlc3VsdC5tX29sZFN0cnVjdHVy
ZS5jb3B5RnJvbShzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJl
KTsKKyAgICAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUucHV0
QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlKTsKKyAgICAgICAgcmVzdWx0Lm1fY2hhaW4uY29weUZy
b20oc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbik7CisgICAgICAgIHJlc3VsdC5t
X3N0dWJSb3V0aW5lID0gc3R1YkluZm8uc3R1YlJvdXRpbmU7CisgICAgICAgIGJyZWFrOworICAg
ICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9
CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBQdXRCeUlkQWNjZXNzOjp2aXNp
dFdlYWsoKSBjb25zdAoreworICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBSZXBsYWNl
OgorICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fb2xkU3RydWN0dXJlLmdldCgpKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUcmFuc2l0
aW9uOgorICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fb2xkU3RydWN0dXJlLmdldCgpKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZCht
X25ld1N0cnVjdHVyZS5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGlmICghSGVhcDo6aXNNYXJrZWQobV9jaGFpbi5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVl
OworfQorCitQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0OjpQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KAor
ICAgIFB1dEtpbmQgcHV0S2luZCwKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCisg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGluaXRpYWxTbG93UGF0aCkKKyAgICA6IG1fa2luZChw
dXRLaW5kKQoreworICAgIG1fbGlzdC5hcHBlbmQoUHV0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVy
ZVN0dWJJbmZvKHN0dWJJbmZvLCBpbml0aWFsU2xvd1BhdGgpKTsKK30KKworUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdCogUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbSgKKyAgICBQdXRLaW5kIHB1
dEtpbmQsCisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBpbml0aWFsU2xvd1BhdGgpCit7CisgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5
cGUgPT0gYWNjZXNzX3B1dF9ieV9pZF9saXN0KQorICAgICAgICByZXR1cm4gc3R1YkluZm8udS5w
dXRCeUlkTGlzdC5saXN0OworICAgIAorICAgIEFTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09
IGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZQorICAgICAgICAgICB8fCBzdHViSW5mby5hY2Nlc3NU
eXBlID09IGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWwKKyAgICAgICAgICAgfHwg
c3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0
KTsKKyAgICAKKyAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiByZXN1bHQgPQorICAgICAgICBu
ZXcgUG9seW1vcnBoaWNQdXRCeUlkTGlzdChwdXRLaW5kLCBzdHViSW5mbywgaW5pdGlhbFNsb3dQ
YXRoKTsKKyAgICAKKyAgICBzdHViSW5mby5pbml0UHV0QnlJZExpc3QocmVzdWx0KTsKKyAgICAK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojp+UG9seW1v
cnBoaWNQdXRCeUlkTGlzdCgpIHsgfQorCitib29sIFBvbHltb3JwaGljUHV0QnlJZExpc3Q6Omlz
RnVsbCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NB
Q0hFX1NJWkUpOworICAgIHJldHVybiBzaXplKCkgPT0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9T
SVpFOworfQorCitib29sIFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmlzQWxtb3N0RnVsbCgpIGNv
bnN0Cit7CisgICAgQVNTRVJUKHNpemUoKSA8PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUp
OworICAgIHJldHVybiBzaXplKCkgPj0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMTsK
K30KKwordm9pZCBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0OjphZGRBY2Nlc3MoY29uc3QgUHV0QnlJ
ZEFjY2VzcyYgcHV0QnlJZEFjY2VzcykKK3sKKyAgICBBU1NFUlQoIWlzRnVsbCgpKTsKKyAgICAv
LyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVzaXppbmcgb3B0aW1pemVzIGZvciBzcGFjZSwgbm90IHRp
bWUuCisgICAgbV9saXN0LnJlc2l6ZShtX2xpc3Quc2l6ZSgpICsgMSk7CisgICAgbV9saXN0Lmxh
c3QoKSA9IHB1dEJ5SWRBY2Nlc3M7Cit9CisKK2Jvb2wgUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6
dmlzaXRXZWFrKCkgY29uc3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKCFhdChpKS52aXNpdFdlYWsoKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDE5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIFBvbHltb3JwaGljUHV0QnlJZExpc3RfaAorI2RlZmluZSBQb2x5bW9y
cGhpY1B1dEJ5SWRMaXN0X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5B
QkxFKEpJVCkKKworI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2Vt
Ymxlci5oIgorI2luY2x1ZGUgIk9wY29kZS5oIgorI2luY2x1ZGUgIlB1dEtpbmQuaCIKKyNpbmNs
dWRlICJTdHJ1Y3R1cmUuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCitzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm87CisKK2NsYXNzIFB1dEJ5SWRBY2Nlc3Mg
eworcHVibGljOgorICAgIGVudW0gQWNjZXNzVHlwZSB7CisgICAgICAgIEludmFsaWQsCisgICAg
ICAgIFRyYW5zaXRpb24sCisgICAgICAgIFJlcGxhY2UKKyAgICB9OworICAgIAorICAgIFB1dEJ5
SWRBY2Nlc3MoKQorICAgICAgICA6IG1fdHlwZShJbnZhbGlkKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIFB1dEJ5SWRBY2Nlc3MgdHJhbnNpdGlvbigKKyAgICAgICAgSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLAorICAgICAgICBKU0NlbGwqIG93bmVyLAorICAgICAgICBTdHJ1Y3R1
cmUqIG9sZFN0cnVjdHVyZSwKKyAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCisgICAg
ICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IHN0dWJSb3V0aW5lKQorICAgIHsKKyAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7CisgICAg
ICAgIHJlc3VsdC5tX3R5cGUgPSBUcmFuc2l0aW9uOworICAgICAgICByZXN1bHQubV9vbGRTdHJ1
Y3R1cmUuc2V0KGdsb2JhbERhdGEsIG93bmVyLCBvbGRTdHJ1Y3R1cmUpOworICAgICAgICByZXN1
bHQubV9uZXdTdHJ1Y3R1cmUuc2V0KGdsb2JhbERhdGEsIG93bmVyLCBuZXdTdHJ1Y3R1cmUpOwor
ICAgICAgICByZXN1bHQubV9jaGFpbi5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIGNoYWluKTsKKyAg
ICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFB1dEJ5SWRBY2Nlc3MgcmVwbGFjZSgK
KyAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLAorICAgICAgICBKU0NlbGwqIG93bmVy
LAorICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIHN0dWJSb3V0aW5lKQorICAgIHsKKyAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7
CisgICAgICAgIHJlc3VsdC5tX3R5cGUgPSBSZXBsYWNlOworICAgICAgICByZXN1bHQubV9vbGRT
dHJ1Y3R1cmUuc2V0KGdsb2JhbERhdGEsIG93bmVyLCBzdHJ1Y3R1cmUpOworICAgICAgICByZXN1
bHQubV9zdHViUm91dGluZSA9IHN0dWJSb3V0aW5lOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHV0QnlJZEFjY2VzcyBmcm9tU3RydWN0dXJlU3R1Yklu
Zm8oCisgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIGluaXRpYWxTbG93UGF0aCk7CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZSAhPSBJbnZhbGlkOyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7
IHJldHVybiAhaXNTZXQoKTsgfQorICAgIAorICAgIEFjY2Vzc1R5cGUgdHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZTsgfQorICAgIAorICAgIGJvb2wgaXNUcmFuc2l0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlID09IFRyYW5zaXRpb247IH0KKyAgICBib29sIGlzUmVwbGFjZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdHlwZSA9PSBSZXBsYWNlOyB9CisgICAgCisgICAgU3RydWN0dXJlKiBvbGRT
dHJ1Y3R1cmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gVXNpbmcgdGhpcyBpbnN0ZWFkIG9m
IGlzU2V0KCkgdG8gbWFrZSB0aGlzIGFzc2VydGlvbiByb2J1c3QgYWdhaW5zdCB0aGUgcG9zc2li
aWxpdHkKKyAgICAgICAgLy8gb2YgYWRkaXRpb25hbCBhY2Nlc3MgdHlwZXMgYmVpbmcgYWRkZWQu
CisgICAgICAgIEFTU0VSVChpc1RyYW5zaXRpb24oKSB8fCBpc1JlcGxhY2UoKSk7CisgICAgICAg
IAorICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgfQorICAgIAorICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1Jl
cGxhY2UoKSk7CisgICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZS5nZXQoKTsKKyAgICB9Cisg
ICAgCisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlzVHJhbnNpdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIG1fbmV3U3RydWN0dXJlLmdl
dCgpOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4oKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKGlzVHJhbnNpdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIG1fY2hh
aW4uZ2V0KCk7CisgICAgfQorICAgIAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViUm91
dGluZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNUcmFuc2l0aW9uKCkgfHwgaXNS
ZXBsYWNlKCkpOworICAgICAgICByZXR1cm4gbV9zdHViUm91dGluZTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCB2aXNpdFdlYWsoKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgQWNjZXNzVHlw
ZSBtX3R5cGU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9vbGRTdHJ1Y3R1cmU7Cisg
ICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9uZXdTdHJ1Y3R1cmU7CisgICAgV3JpdGVCYXJy
aWVyPFN0cnVjdHVyZUNoYWluPiBtX2NoYWluOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBt
X3N0dWJSb3V0aW5lOworfTsKKworY2xhc3MgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCB7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgLy8gSW5pdGlhbGl6ZSBmcm9t
IGEgc3R1YiBpbmZvOyB0aGlzIHdpbGwgcGxhY2Ugb25lIGVsZW1lbnQgaW4gdGhlIGxpc3QgYW5k
IGl0IHdpbGwKKyAgICAvLyBiZSBjcmVhdGVkIGJ5IGNvbnZlcnRpbmcgdGhlIHN0dWIgaW5mbydz
IHB1dCBieSBpZCBhY2Nlc3MgaW5mb3JtYXRpb24gaW50byBvdXIKKyAgICAvLyBQdXRCeUlkQWNj
ZXNzLgorICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QoCisgICAgICAgIFB1dEtpbmQsCisgICAg
ICAgIFN0cnVjdHVyZVN0dWJJbmZvJiwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGlu
aXRpYWxTbG93UGF0aCk7CisKKyAgICAvLyBFaXRoZXIgY3JlYXRlcyBhIG5ldyBwb2x5bW9ycGhp
YyBwdXQgbGlzdCwgb3IgcmV0dXJucyB0aGUgb25lIHRoYXQgaXMgYWxyZWFkeQorICAgIC8vIGlu
IHBsYWNlLgorICAgIHN0YXRpYyBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBmcm9tKAorICAgICAg
ICBQdXRLaW5kIHB1dEtpbmQsCisgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGluaXRpYWxTbG93UGF0aCk7CisgICAgCisg
ICAgflBvbHltb3JwaGljUHV0QnlJZExpc3QoKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgY3VycmVudFNsb3dQYXRoVGFyZ2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2xpc3QubGFzdCgpLnN0dWJSb3V0aW5lKCkuY29kZSgpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGFkZEFjY2Vzcyhjb25zdCBQdXRCeUlkQWNjZXNzJik7CisgICAgCisgICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3QgeyByZXR1cm4gbV9saXN0LmlzRW1wdHkoKTsgfQorICAgIHVuc2lnbmVkIHNp
emUoKSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9CisgICAgYm9vbCBpc0Z1bGwoKSBj
b25zdDsKKyAgICBib29sIGlzQWxtb3N0RnVsbCgpIGNvbnN0OyAvLyBUcnVlIGlmIGFkZGluZyBh
biBlbGVtZW50IHdvdWxkIG1ha2UgaXNGdWxsKCkgdHJ1ZS4KKyAgICBjb25zdCBQdXRCeUlkQWNj
ZXNzJiBhdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2xpc3RbaV07IH0KKyAgICBjb25z
dCBQdXRCeUlkQWNjZXNzJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1f
bGlzdFtpXTsgfQorICAgIAorICAgIFB1dEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2lu
ZDsgfQorICAgIAorICAgIGJvb2wgdmlzaXRXZWFrKCkgY29uc3Q7CisgICAgCitwcml2YXRlOgor
ICAgIFZlY3RvcjxQdXRCeUlkQWNjZXNzLCAyPiBtX2xpc3Q7CisgICAgUHV0S2luZCBtX2tpbmQ7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyNl
bmRpZiAvLyBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1B1dEtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0S2luZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1B1dEtpbmQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFB1
dEtpbmRfaAorI2RlZmluZSBQdXRLaW5kX2gKKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gUHV0
S2luZCB7IERpcmVjdCwgTm90RGlyZWN0IH07CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gUHV0S2luZF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMTA2Nzc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgi
CiAKICNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljUHV0QnlJZExp
c3QuaCIKICNpbmNsdWRlICJTY29wZUNoYWluLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDUs
NiArNDYsOSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpkZXJlZigpCiAgICAgICAgIGRlbGV0
ZSBwb2x5bW9ycGhpY1N0cnVjdHVyZXM7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgY2Fz
ZSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q6CisgICAgICAgIGRlbGV0ZSB1LnB1dEJ5SWRMaXN0Lmxp
c3Q7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKICAg
ICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfcHJvdG86CiAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lk
X2NoYWluOgpAQCAtODIsMTggKzg2LDE0IEBAIGJvb2wgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0
V2Vha1JlZmVyZW4KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Nl
bGZfbGlzdDogewogICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHlt
b3JwaGljU3RydWN0dXJlcyA9IHUuZ2V0QnlJZFNlbGZMaXN0LnN0cnVjdHVyZUxpc3Q7Ci0gICAg
ICAgIGlmICghcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT52aXNpdFdlYWsodS5nZXRCeUlkU2VsZkxp
c3QubGlzdFNpemUpKSB7Ci0gICAgICAgICAgICBkZWxldGUgcG9seW1vcnBoaWNTdHJ1Y3R1cmVz
OworICAgICAgICBpZiAoIXBvbHltb3JwaGljU3RydWN0dXJlcy0+dmlzaXRXZWFrKHUuZ2V0QnlJ
ZFNlbGZMaXN0Lmxpc3RTaXplKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3Rv
X2xpc3Q6IHsKICAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9y
cGhpY1N0cnVjdHVyZXMgPSB1LmdldEJ5SWRQcm90b0xpc3Quc3RydWN0dXJlTGlzdDsKLSAgICAg
ICAgaWYgKCFwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPnZpc2l0V2Vhayh1LmdldEJ5SWRTZWxmTGlz
dC5saXN0U2l6ZSkpIHsKLSAgICAgICAgICAgIGRlbGV0ZSBwb2x5bW9ycGhpY1N0cnVjdHVyZXM7
CisgICAgICAgIGlmICghcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT52aXNpdFdlYWsodS5nZXRCeUlk
U2VsZkxpc3QubGlzdFNpemUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNp
dGlvbl9ub3JtYWw6CkBAIC0xMDcsNiArMTA3LDEwIEBAIGJvb2wgU3RydWN0dXJlU3R1YkluZm86
OnZpc2l0V2Vha1JlZmVyZW4KICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZCh1LnB1dEJ5SWRS
ZXBsYWNlLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDoKKyAg
ICAgICAgaWYgKCF1LnB1dEJ5SWRMaXN0Lmxpc3QtPnZpc2l0V2VhaygpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICAvLyBU
aGUgcmVzdCBvZiB0aGUgaW5zdHJ1Y3Rpb25zIGRvbid0IHJlcXVpcmUgcmVmZXJlbmNlcywgc28g
dGhlcmUgaXMgbm8gbmVlZCB0bwogICAgICAgICAvLyBkbyBhbnl0aGluZy4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShy
ZXZpc2lvbiAxMDY3NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOCBAQAogI2lmbmRlZiBT
dHJ1Y3R1cmVTdHViSW5mb19oCiAjZGVmaW5lIFN0cnVjdHVyZVN0dWJJbmZvX2gKIAorI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCiAjaWYgRU5BQkxFKEpJVCkKIAogI2luY2x1ZGUgIkNvZGVP
cmlnaW4uaCIKQEAgLTM2LDYgKzM4LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKKyAgICBjbGFz
cyBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0OworCiAgICAgZW51bSBBY2Nlc3NUeXBlIHsKICAgICAg
ICAgYWNjZXNzX2dldF9ieV9pZF9zZWxmLAogICAgICAgICBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3Rv
LApAQCAtNDUsNiArNDksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYWNjZXNzX3B1dF9i
eV9pZF90cmFuc2l0aW9uX25vcm1hbCwKICAgICAgICAgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0
aW9uX2RpcmVjdCwKICAgICAgICAgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlLAorICAgICAgICBh
Y2Nlc3NfcHV0X2J5X2lkX2xpc3QsCiAgICAgICAgIGFjY2Vzc191bnNldCwKICAgICAgICAgYWNj
ZXNzX2dldF9ieV9pZF9nZW5lcmljLAogICAgICAgICBhY2Nlc3NfcHV0X2J5X2lkX2dlbmVyaWMs
CkBAIC03NSw2ICs4MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBjYXNlIGFjY2Vzc19w
dXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6CiAgICAgICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9p
ZF90cmFuc2l0aW9uX2RpcmVjdDoKICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxh
Y2U6CisgICAgICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9saXN0OgogICAgICAgICBjYXNlIGFj
Y2Vzc19wdXRfYnlfaWRfZ2VuZXJpYzoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICBkZWZhdWx0OgpAQCAtMTQ5LDEwICsxNTUsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICB1LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmplY3RTdHJ1Y3R1cmUuc2V0KGdsb2JhbERhdGEs
IG93bmVyLCBiYXNlT2JqZWN0U3RydWN0dXJlKTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAg
ICAgdm9pZCBpbml0UHV0QnlJZExpc3QoUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdCkKKyAg
ICAgICAgeworICAgICAgICAgICAgYWNjZXNzVHlwZSA9IGFjY2Vzc19wdXRfYnlfaWRfbGlzdDsK
KyAgICAgICAgICAgIHUucHV0QnlJZExpc3QubGlzdCA9IGxpc3Q7CisgICAgICAgIH0KKyAgICAg
ICAgCiAgICAgICAgIHZvaWQgcmVzZXQoKQogICAgICAgICB7CiAgICAgICAgICAgICBhY2Nlc3NU
eXBlID0gYWNjZXNzX3Vuc2V0OwotICAgICAgICAgICAgCisgICAgICAgICAgICBkZXJlZigpOwog
ICAgICAgICAgICAgc3R1YlJvdXRpbmUgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKICAgICAg
ICAgfQogCkBAIC0yMjcsNiArMjM5LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBz
dHJ1Y3QgewogICAgICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBiYXNl
T2JqZWN0U3RydWN0dXJlOwogICAgICAgICAgICAgfSBwdXRCeUlkUmVwbGFjZTsKKyAgICAgICAg
ICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlz
dDsKKyAgICAgICAgICAgIH0gcHV0QnlJZExpc3Q7CiAgICAgICAgIH0gdTsKIAogICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YlJvdXRpbmU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDEwNjc3NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYxMSw2ICs2MTEsNzAgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJl
YwogICAgICAgICBzdHViSW5mby5zZWVuID0gdHJ1ZTsKIH0KIAorVl9GVU5DVElPTl9XUkFQUEVS
X1dJVEhfUkVUVVJOX0FERFJFU1NfRUpDSShvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0
KTsKK3ZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0V2l0
aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MpCit7CisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4
ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2Jh
bERhdGEsIGV4ZWMpOworICAgIAorICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZShiYXNlKTsKKyAgICBQdXRQcm9w
ZXJ0eVNsb3Qgc2xvdCh0cnVlKTsKKyAgICAKKyAgICBiYXNlVmFsdWUucHV0KGV4ZWMsICpwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICAKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Cisg
ICAgZGZnQnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNlVmFsdWUsICpwcm9wZXJ0eU5hbWUsIHNs
b3QsIHN0dWJJbmZvLCBOb3REaXJlY3QpOworfQorCitWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3QpOwor
dm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3RXaXRo
UmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUsIFJldHVybkFkZHJlc3NQ
dHIgcmV0dXJuQWRkcmVzcykKK3sKKyAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhl
Yy0+Z2xvYmFsRGF0YSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFs
RGF0YSwgZXhlYyk7CisgICAgCisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlKGJhc2UpOworICAgIFB1dFByb3Bl
cnR5U2xvdCBzbG90KGZhbHNlKTsKKyAgICAKKyAgICBiYXNlVmFsdWUucHV0KGV4ZWMsICpwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICAKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Cisg
ICAgZGZnQnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNlVmFsdWUsICpwcm9wZXJ0eU5hbWUsIHNs
b3QsIHN0dWJJbmZvLCBOb3REaXJlY3QpOworfQorCitWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9S
RVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3Qp
Owordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExp
c3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUsIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3sKKyAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEg
PSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
Z2xvYmFsRGF0YSwgZXhlYyk7CisgICAgCisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOworICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRydWUpOworICAg
IAorICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKKyAgICBhc09iamVjdChiYXNlKS0+cHV0
RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgKnByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwor
ICAgIAorICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygp
LT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBkZmdCdWlsZFB1dEJ5SWRMaXN0KGV4
ZWMsIGJhc2UsICpwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBEaXJlY3QpOworfQorCitW
X0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1dEJ5
SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3QpOwordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVu
dGlmaWVyKiBwcm9wZXJ0eU5hbWUsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3sK
KyAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgCisg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFB1
dFByb3BlcnR5U2xvdCBzbG90KGZhbHNlKTsKKyAgICAKKyAgICBBU1NFUlQoYmFzZS0+aXNPYmpl
Y3QoKSk7CisgICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCks
ICpwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICAKKyAgICBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVz
cyk7CisgICAgZGZnQnVpbGRQdXRCeUlkTGlzdChleGVjLCBiYXNlLCAqcHJvcGVydHlOYW1lLCBz
bG90LCBzdHViSW5mbywgRGlyZWN0KTsKK30KKwogc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0
aW9uQ29tcGFyZUxlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ax
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTA2Nzc1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDgg
QEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCi0jaW5jbHVkZSA8ZGZnL0RGR0pJVENvbXBpbGVy
Lmg+CisjaW5jbHVkZSAiREZHSklUQ29tcGlsZXIuaCIKKyNpbmNsdWRlICJQdXRLaW5kLmgiCiAK
IG5hbWVzcGFjZSBKU0MgewogCkBAIC0zNiw4ICszNyw2IEBAIHN0cnVjdCBHbG9iYWxSZXNvbHZl
SW5mbzsKIAogbmFtZXNwYWNlIERGRyB7CiAKLWVudW0gUHV0S2luZCB7IERpcmVjdCwgTm90RGly
ZWN0IH07Ci0KIGV4dGVybiAiQyIgewogCiAjaWYgQ0FMTElOR19DT05WRU5USU9OX0lTX1NURENB
TEwKQEAgLTEzMCw2ICsxMjksMTAgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
SWRTdHJpYwogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRp
bWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFz
ZSwgSWRlbnRpZmllciopOwogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3RTdHJpY3RPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUs
IEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciopOwogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciopOwordm9pZCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElkZW50aWZpZXIqKTsKK3ZvaWQg
REZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVy
Kik7Cit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxk
TGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFz
ZSwgSWRlbnRpZmllciopOwordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3ROb25TdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlLCBKU0NlbGwqIGJhc2UsIElkZW50aWZpZXIqKTsKIC8vIFRoZXNlIGNvbXBhcmlzb25zIHJl
dHVybiBhIGJvb2xlYW4gd2l0aGluIGEgc2l6ZV90IHN1Y2ggdGhhdCB0aGUgdmFsdWUgaXMgemVy
byBleHRlbmRlZCB0byBmaWxsIHRoZSByZWdpc3Rlci4KIHNpemVfdCBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkNvbXBhcmVMZXNzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpOwogc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0
aW9uQ29tcGFyZUxlc3NFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdSZXBhdGNoLmNwcAkocmV2aXNpb24gMTA2Nzc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZlSklULmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgog
I2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
LmgiCiAjaW5jbHVkZSAiUmVwYXRjaEJ1ZmZlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CkBAIC00OTIsNyArNDkzLDcgQEAgdm9pZCBkZmdCdWlsZEdldEJ5SURQcm90b0xp
c3QoRXhlY1N0YXRlKgogICAgICAgICBkZmdSZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKIH0KIAotc3Rh
dGljIFZfREZHT3BlcmF0aW9uX0VKQ0kgYXBwcm9wcmlhdGVQdXRCeUlkRnVuY3Rpb24oY29uc3Qg
UHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpCitzdGF0aWMgVl9ERkdPcGVy
YXRpb25fRUpDSSBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJv
cGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpCiB7CiAgICAgaWYgKHNsb3QuaXNTdHJp
Y3RNb2RlKCkpIHsKICAgICAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQpAQCAtNTA0LDYgKzUw
NSwxOCBAQCBzdGF0aWMgVl9ERkdPcGVyYXRpb25fRUpDSSBhcHByb3ByaWF0ZVB1CiAgICAgcmV0
dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3Q7CiB9CiAKK3N0YXRpYyBWX0RGR09wZXJhdGlv
bl9FSkNJIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFBy
b3BlcnR5U2xvdCAmc2xvdCwgUHV0S2luZCBwdXRLaW5kKQoreworICAgIGlmIChzbG90LmlzU3Ry
aWN0TW9kZSgpKSB7CisgICAgICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKKyAgICAgICAgICAg
IHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRMaXN0OworICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdDsKKyAgICB9CisgICAgaWYgKHB1
dEtpbmQgPT0gRGlyZWN0KQorICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5v
blN0cmljdEJ1aWxkTGlzdDsKKyAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1
aWxkTGlzdDsKK30KKwogc3RhdGljIHZvaWQgdGVzdFByb3RvdHlwZShNYWNyb0Fzc2VtYmxlciAm
c3R1YkppdCwgR1BSUmVnIHNjcmF0Y2hHUFIsIEpTVmFsdWUgcHJvdG90eXBlLCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcykKIHsKICAgICBpZiAocHJvdG90eXBlLmlzTnVs
bCgpKQpAQCAtNTE1LDcgKzUyOCwxODcgQEAgc3RhdGljIHZvaWQgdGVzdFByb3RvdHlwZShNYWNy
b0Fzc2VtYmxlcgogICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIocHJvdG90eXBlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSkpKTsKIH0KIAotc3RhdGljIGJvb2wg
dHJ5Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0
IElkZW50aWZpZXImLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQorc3RhdGljIHZvaWQgZW1pdFB1dFJlcGxh
Y2VTdHViKAorICAgIEV4ZWNTdGF0ZSogZXhlYywKKyAgICBKU1ZhbHVlLAorICAgIGNvbnN0IElk
ZW50aWZpZXImLAorICAgIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwKKyAgICBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sCisgICAgUHV0S2luZCwKKyAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBmYWlsdXJlTGFiZWwsCisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmJiBzdHViUm91dGluZSkKK3sKKyAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nh
c3Q8R1BSUmVnPihzdHViSW5mby5iYXNlR1BSKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAg
IEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8udmFsdWVU
YWdHUFIpOworI2VuZGlmCisgICAgR1BSUmVnIHZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVn
PihzdHViSW5mby52YWx1ZUdQUik7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzdGF0aWNfY2Fz
dDxHUFJSZWc+KHN0dWJJbmZvLnNjcmF0Y2hHUFIpOworICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNj
cmF0Y2ggPSBmYWxzZTsKKyNpZiBFTkFCTEUoR0dDKSB8fCBFTkFCTEUoV1JJVEVfQkFSUklFUl9Q
Uk9GSUxJTkcpCisgICAgR1BSUmVnIHNjcmF0Y2hHUFIyOworICAgIGNvbnN0IGJvb2wgd3JpdGVC
YXJyaWVyTmVlZGVkID0gdHJ1ZTsKKyNlbHNlCisgICAgY29uc3QgYm9vbCB3cml0ZUJhcnJpZXJO
ZWVkZWQgPSBmYWxzZTsKKyNlbmRpZgorICAgIAorICAgIE1hY3JvQXNzZW1ibGVyIHN0dWJKaXQ7
CisgICAgCisgICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZyAmJiAod3JpdGVCYXJy
aWVyTmVlZGVkIHx8ICFzdHJ1Y3R1cmUtPmlzVXNpbmdJbmxpbmVTdG9yYWdlKCkpKSB7CisgICAg
ICAgIHNjcmF0Y2hHUFIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BS
LCB2YWx1ZUdQUik7CisgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gdHJ1ZTsKKyAgICAg
ICAgc3R1YkppdC5wdXNoKHNjcmF0Y2hHUFIpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGJhZFN0cnVjdHVyZSA9IHN0dWJKaXQuYnJhbmNoUHRyKAorICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKKyAgICAKKyNpZiBFTkFCTEUoR0dDKSB8fCBFTkFC
TEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCisgICAgc2NyYXRjaEdQUjIgPSBTcGVjdWxhdGl2
ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCB2YWx1ZUdQUiwgc2NyYXRjaEdQUik7Cisg
ICAgc3R1YkppdC5wdXNoKHNjcmF0Y2hHUFIyKTsKKyAgICBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVC
YXJyaWVyKHN0dWJKaXQsIGJhc2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIyLCBXcml0ZUJh
cnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7CisgICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQUjIpOwor
I2VuZGlmCisgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBpZiAoc3RydWN0dXJlLT5pc1Vz
aW5nSW5saW5lU3RvcmFnZSgpKQorICAgICAgICBzdHViSml0LnN0b3JlUHRyKHZhbHVlR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dG9yYWdlKCkgKyBzbG90LmNhY2hlZE9mZnNldCgpICogc2l6ZW9mKEpTVmFsdWUpKSk7CisgICAg
ZWxzZSB7CisgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIp
OworICAgICAgICBzdHViSml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzY3JhdGNoR1BSLCBzbG90LmNhY2hlZE9mZnNldCgpICogc2l6ZW9mKEpTVmFsdWUpKSk7
CisgICAgfQorI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBpZiAoc3RydWN0dXJlLT5pc1Vz
aW5nSW5saW5lU3RvcmFnZSgpKSB7CisgICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5l
U3RvcmFnZSgpICsgc2xvdC5jYWNoZWRPZmZzZXQoKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVD
VF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKKyAg
ICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBzbG90LmNhY2hl
ZE9mZnNldCgpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3R1Ykpp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZz
ZXRPZlByb3BlcnR5U3RvcmFnZSgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0dWJKaXQuc3Rv
cmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgc2xvdC5j
YWNoZWRPZmZzZXQoKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAgc3R1YkppdC5zdG9y
ZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBzbG90
LmNhY2hlZE9mZnNldCgpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CisgICAgfQorI2VuZGlmCisgICAgCisg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzczsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBmYWlsdXJlOworICAgIAorICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkgeworICAgICAg
ICBzdHViSml0LnBvcChzY3JhdGNoR1BSKTsKKyAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVt
cCgpOworICAgICAgICAKKyAgICAgICAgYmFkU3RydWN0dXJlLmxpbmsoJnN0dWJKaXQpOworICAg
ICAgICBzdHViSml0LnBvcChzY3JhdGNoR1BSKTsKKyAgICAgICAgZmFpbHVyZSA9IHN0dWJKaXQu
anVtcCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsK
KyAgICAgICAgZmFpbHVyZSA9IGJhZFN0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygp
KTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvRG9uZSkpOworICAgIHBhdGNo
QnVmZmVyLmxpbmsoZmFpbHVyZSwgZmFpbHVyZUxhYmVsKTsKKyAgICAgICAgICAgIAorICAgIHN0
dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7Cit9CisKK3N0YXRpYyB2b2lk
IGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsCisgICAgSlNWYWx1
ZSwKKyAgICBjb25zdCBJZGVudGlmaWVyJiwKKyAgICBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNs
b3QsCisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorICAgIFB1dEtpbmQgcHV0S2lu
ZCwKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKKyAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVy
ZSwKKyAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4sCisgICAgQ29kZUxvY2F0aW9u
TGFiZWwgZmFpbHVyZUxhYmVsLAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgc3R1YlJvdXRp
bmUpCit7CisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEo
KTsKKworICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5i
YXNlR1BSKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9
IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8udmFsdWVUYWdHUFIpOworI2VuZGlmCisgICAg
R1BSUmVnIHZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby52YWx1ZUdQUik7
CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnNj
cmF0Y2hHUFIpOworICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKKyAgICAg
ICAgICAgIAorICAgIEFTU0VSVChzY3JhdGNoR1BSICE9IGJhc2VHUFIpOworICAgICAgICAgICAg
CisgICAgTWFjcm9Bc3NlbWJsZXIgc3R1YkppdDsKKyAgICAgICAgICAgIAorICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7CisgICAgICAgICAgICAKKyAgICBpZiAoc2Ny
YXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBTcGVjdWxh
dGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCB2YWx1ZUdQUik7CisgICAgICAgIHN0
dWJKaXQucHVzaChzY3JhdGNoR1BSKTsKKyAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSB0
cnVlOworICAgIH0KKyAgICAKKyAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG9sZFN0cnVjdHVyZSkpKTsKKyAgICAgICAgICAgIAorICAgIHRlc3RQcm90b3R5cGUo
c3R1YkppdCwgc2NyYXRjaEdQUiwgb2xkU3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKSwgZmFp
bHVyZUNhc2VzKTsKKyAgICAgICAgICAgIAorICAgIGlmIChwdXRLaW5kID09IE5vdERpcmVjdCkg
eworICAgICAgICBmb3IgKFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IHByb3RvdHlwZUNo
YWluLT5oZWFkKCk7ICppdDsgKytpdCkKKyAgICAgICAgICAgIHRlc3RQcm90b3R5cGUoc3R1Ykpp
dCwgc2NyYXRjaEdQUiwgKCppdCktPnN0b3JlZFByb3RvdHlwZSgpLCBmYWlsdXJlQ2FzZXMpOwor
ICAgIH0KKworI2lmIEVOQUJMRShHR0MpIHx8IEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElO
RykKKyAgICAvLyBNdXN0IGFsd2F5cyBlbWl0IHRoaXMgd3JpdGUgYmFycmllciBhcyB0aGUgc3Ry
dWN0dXJlIHRyYW5zaXRpb24gaXRzZWxmIHJlcXVpcmVzIGl0CisgICAgR1BSUmVnIHNjcmF0Y2gy
ID0gU3BlY3VsYXRpdmVKSVQ6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgdmFsdWVHUFIsIHNj
cmF0Y2hHUFIpOworICAgIHN0dWJKaXQucHVzaChzY3JhdGNoMik7CisgICAgU3BlY3VsYXRpdmVK
SVQ6OndyaXRlQmFycmllcihzdHViSml0LCBiYXNlR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMiwg
V3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOworICAgIHN0dWJKaXQucG9wKHNjcmF0Y2gy
KTsKKyNlbmRpZgorCisgICAgc3R1YkppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihzdHJ1Y3R1cmUpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBpZiAoc3Ry
dWN0dXJlLT5pc1VzaW5nSW5saW5lU3RvcmFnZSgpKQorICAgICAgICBzdHViSml0LnN0b3JlUHRy
KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zm
c2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBzbG90LmNhY2hlZE9mZnNldCgpICogc2l6ZW9mKEpTVmFs
dWUpKSk7CisgICAgZWxzZSB7CisgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSks
IHNjcmF0Y2hHUFIpOworICAgICAgICBzdHViSml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBzbG90LmNhY2hlZE9mZnNldCgpICogc2l6ZW9m
KEpTVmFsdWUpKSk7CisgICAgfQorI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBpZiAoc3Ry
dWN0dXJlLT5pc1VzaW5nSW5saW5lU3RvcmFnZSgpKSB7CisgICAgICAgIHN0dWJKaXQuc3RvcmUz
Mih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9m
ZnNldE9mSW5saW5lU3RvcmFnZSgpICsgc2xvdC5jYWNoZWRPZmZzZXQoKSAqIHNpemVvZihKU1Zh
bHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5
bG9hZCkpKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkg
KyBzbG90LmNhY2hlZE9mZnNldCgpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpKSwgc2NyYXRjaEdQUik7CisgICAgICAg
IHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgc2xvdC5jYWNoZWRPZmZzZXQoKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZT
RVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAg
c3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3Jh
dGNoR1BSLCBzbG90LmNhY2hlZE9mZnNldCgpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09G
RlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CisgICAgfQorI2Vu
ZGlmCisgICAgICAgICAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzOworICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWx1cmU7CisgICAgICAgICAgICAKKyAgICBpZiAobmVl
ZFRvUmVzdG9yZVNjcmF0Y2gpIHsKKyAgICAgICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQUik7Cisg
ICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKKworICAgICAgICBmYWlsdXJlQ2FzZXMu
bGluaygmc3R1YkppdCk7CisgICAgICAgIHN0dWJKaXQucG9wKHNjcmF0Y2hHUFIpOworICAgICAg
ICBmYWlsdXJlID0gc3R1YkppdC5qdW1wKCk7CisgICAgfSBlbHNlCisgICAgICAgIHN1Y2Nlc3Mg
PSBzdHViSml0Lmp1bXAoKTsKKyAgICAgICAgICAgIAorICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKmdsb2JhbERhdGEsICZzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSk7CisgICAgcGF0Y2hC
dWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5kZWx0YUNhbGxUb0RvbmUpKTsKKyAgICBpZiAobmVlZFRvUmVzdG9yZVNj
cmF0Y2gpCisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwgZmFpbHVyZUxhYmVsKTsK
KyAgICBlbHNlCisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzLCBmYWlsdXJl
TGFiZWwpOworICAgICAgICAgICAgCisgICAgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5h
bGl6ZUNvZGUoKTsKK30KKworc3RhdGljIGJvb2wgdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQ
dXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2lu
ZCBwdXRLaW5kKQogewogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2Nr
KCk7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsK
QEAgLTU0NSw5OSArNzM4LDI2IEBAIHN0YXRpYyBib29sIHRyeUNhY2hlUHV0QnlJRChFeGVjU3Rh
dGUqIGUKICAgICAgICAgICAgIAogICAgICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlw
ZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZv
LmJhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgICAgICBHUFJSZWcgdmFs
dWVUYWdHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnZhbHVlVGFnR1BSKTsKLSNl
bmRpZgotICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihz
dHViSW5mby52YWx1ZUdQUik7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHN0YXRp
Y19jYXN0PEdQUlJlZz4oc3R1YkluZm8uc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBib29sIG5l
ZWRUb1Jlc3RvcmVTY3JhdGNoID0gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFT
U0VSVChzY3JhdGNoR1BSICE9IGJhc2VHUFIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlciBzdHViSml0OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7Ci0gICAgICAgICAgICAgICAgc2Ny
YXRjaEdQUiA9IFNwZWN1bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHZhbHVl
R1BSKTsKLSAgICAgICAgICAgICAgICBzdHViSml0LnB1c2goc2NyYXRjaEdQUik7Ci0gICAgICAg
ICAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSB0cnVlOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG9sZFN0cnVjdHVyZSkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdGVzdFBy
b3RvdHlwZShzdHViSml0LCBzY3JhdGNoR1BSLCBvbGRTdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlw
ZSgpLCBmYWlsdXJlQ2FzZXMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAocHV0S2lu
ZCA9PSBOb3REaXJlY3QpIHsKLSAgICAgICAgICAgICAgICBmb3IgKFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmU+KiBpdCA9IHByb3RvdHlwZUNoYWluLT5oZWFkKCk7ICppdDsgKytpdCkKLSAgICAgICAg
ICAgICAgICAgICAgdGVzdFByb3RvdHlwZShzdHViSml0LCBzY3JhdGNoR1BSLCAoKml0KS0+c3Rv
cmVkUHJvdG90eXBlKCksIGZhaWx1cmVDYXNlcyk7Ci0gICAgICAgICAgICB9Ci0KLSNpZiBFTkFC
TEUoR0dDKSB8fCBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0gICAgICAgICAgICAv
LyBNdXN0IGFsd2F5cyBlbWl0IHRoaXMgd3JpdGUgYmFycmllciBhcyB0aGUgc3RydWN0dXJlIHRy
YW5zaXRpb24gaXRzZWxmIHJlcXVpcmVzIGl0Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDIg
PSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCB2YWx1ZUdQUiwgc2Ny
YXRjaEdQUik7Ci0gICAgICAgICAgICBzdHViSml0LnB1c2goc2NyYXRjaDIpOwotICAgICAgICAg
ICAgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihzdHViSml0LCBiYXNlR1BSLCBzY3JhdGNo
R1BSLCBzY3JhdGNoMiwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOwotICAgICAgICAg
ICAgc3R1YkppdC5wb3Aoc2NyYXRjaDIpOwotI2VuZGlmCi0KLSAgICAgICAgICAgIHN0dWJKaXQu
c3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSkpOwot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5pc1VzaW5nSW5s
aW5lU3RvcmFnZSgpKQotICAgICAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIodmFsdWVHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGlu
ZVN0b3JhZ2UoKSArIHNsb3QuY2FjaGVkT2Zmc2V0KCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKLSAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3Jh
Z2UoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIodmFs
dWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIHNsb3QuY2FjaGVkT2Zm
c2V0KCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKLSAgICAgICAgICAgIH0KLSNlbGlmIFVTRShKU1ZB
TFVFMzJfNjQpCi0gICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5pc1VzaW5nSW5saW5lU3RvcmFn
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdl
KCkgKyBzbG90LmNhY2hlZE9mZnNldCgpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICAg
ICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgc2xvdC5jYWNo
ZWRPZmZzZXQoKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNPYmplY3Q6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCkpLCBzY3JhdGNoR1BSKTsKLSAg
ICAgICAgICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIsIHNsb3QuY2FjaGVkT2Zmc2V0KCkgKiBzaXplb2YoSlNWYWx1ZSkg
KyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQp
KSk7Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBzbG90LmNhY2hlZE9mZnNldCgpICogc2l6ZW9m
KEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy50YWcpKSk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzczsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGZhaWx1cmU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChuZWVkVG9S
ZXN0b3JlU2NyYXRjaCkgewotICAgICAgICAgICAgICAgIHN0dWJKaXQucG9wKHNjcmF0Y2hHUFIp
OwotICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLQotICAgICAgICAg
ICAgICAgIGZhaWx1cmVDYXNlcy5saW5rKCZzdHViSml0KTsKLSAgICAgICAgICAgICAgICBzdHVi
Sml0LnBvcChzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBmYWlsdXJlID0gc3R1YkppdC5q
dW1wKCk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBzdWNjZXNzID0gc3R1
YkppdC5qdW1wKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKmdsb2JhbERhdGEsICZzdHViSml0LCBjb2RlQmxvY2spOwotICAgICAgICAgICAgcGF0
Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxB
dE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb0RvbmUpKTsKLSAgICAgICAgICAgIGlmIChuZWVk
VG9SZXN0b3JlU2NyYXRjaCkKLSAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1
cmUsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRl
bHRhQ2FsbFRvU2xvd0Nhc2UpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBw
YXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFs
aXplQ29kZSgpOworICAgICAgICAgICAgZW1pdFB1dFRyYW5zaXRpb25TdHViKAorICAgICAgICAg
ICAgICAgIGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kLAor
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwK
KyAgICAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dChzdHViSW5mby5kZWx0YUNhbGxUb1Nsb3dDYXNlKSwKKyAgICAgICAgICAgICAgICBzdHViSW5m
by5zdHViUm91dGluZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIg
cmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5kZWx0
YUNhbGxUb1N0cnVjdENoZWNrKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRp
bmUuY29kZSgpKSk7Ci0gICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtp
bmQpKTsKKyAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwg
cHV0S2luZCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJ
ZFRyYW5zaXRpb24oKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIG9s
ZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgcHV0S2luZCA9PSBEaXJlY3Qp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCi0g
ICAgICAgIGRmZ1JlcGF0Y2hCeUlkU2VsZkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1
Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIGFwcHJvcHJpYXRlUHV0QnlJZEZ1bmN0aW9uKHNs
b3QsIHB1dEtpbmQpLCBmYWxzZSk7CisgICAgICAgIGRmZ1JlcGF0Y2hCeUlkU2VsZkFjY2Vzcyhj
b2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIGFwcHJv
cHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpLCBmYWxzZSk7
CiAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkUmVwbGFjZSgqZ2xvYmFsRGF0YSwgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCi0gICAgLy8gRklYTUU6IHNob3VsZCBzdXBwb3J0IHRoZSB0cmFuc2l0aW9uIGNh
c2UhCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC02NDUsNyArNzY1LDkxIEBAIHZvaWQgZGZn
UmVwYXRjaFB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCAKIHsKICAgICBib29sIGNhY2hlZCA9IHRy
eUNhY2hlUHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1Yklu
Zm8sIHB1dEtpbmQpOwogICAgIGlmICghY2FjaGVkKQotICAgICAgICBkZmdSZXBhdGNoQ2FsbChl
eGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0
ZVB1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CisgICAgICAgIGRmZ1JlcGF0Y2hDYWxs
KGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJp
YXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKK30KKworc3Rh
dGljIGJvb2wgdHJ5QnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFz
ZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5
U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQp
Cit7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworCisgICAgaWYg
KCFiYXNlVmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBKU0NlbGwq
IGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgpOworICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0g
c3RydWN0dXJlLT5wcmV2aW91c0lEKCk7CisgICAgCisgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxl
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc3RydWN0dXJlLT5pc1VuY2FjaGVh
YmxlRGljdGlvbmFyeSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBPcHRpbWl6
ZSBzZWxmIGFjY2Vzcy4KKyAgICBpZiAoc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSB7CisgICAg
ICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3Q7CisgICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBzdHViUm91dGluZTsKKyAgICAgICAgCisgICAgICAgIGlmIChzbG90LnR5cGUoKSA9
PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7CisgICAgICAgICAgICBpZiAoc3RydWN0
dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIHNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3
ZSBuZWVkIGEgcmVhbGxvYworICAgICAgICAgICAgaWYgKG9sZFN0cnVjdHVyZS0+cHJvcGVydHlT
dG9yYWdlQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUtPnByb3BlcnR5U3RvcmFnZUNhcGFjaXR5KCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBub3JtYWxpemVQcm90b3R5cGVDaGFpbihleGVjLCBiYXNlQ2VsbCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+
cHJvdG90eXBlQ2hhaW4oZXhlYyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlJ3Jl
IG5vdyBjb21taXR0ZWQgdG8gY3JlYXRpbmcgdGhlIHN0dWIuIE1vZ3JpZnkgdGhlIG1ldGEtZGF0
YSBhY2NvcmRpbmdseS4KKyAgICAgICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
Ojpmcm9tKAorICAgICAgICAgICAgICAgIHB1dEtpbmQsIHN0dWJJbmZvLAorICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRl
bHRhQ2FsbFRvU2xvd0Nhc2UpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZW1pdFB1dFRy
YW5zaXRpb25TdHViKAorICAgICAgICAgICAgICAgIGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlO
YW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUs
IG9sZFN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sCisgICAgICAgICAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWwobGlzdC0+Y3VycmVudFNsb3dQYXRoVGFyZ2V0KCkpLAorICAgICAgICAgICAgICAg
IHN0dWJSb3V0aW5lKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbGlzdC0+YWRkQWNjZXNz
KAorICAgICAgICAgICAgICAgIFB1dEJ5SWRBY2Nlc3M6OnRyYW5zaXRpb24oCisgICAgICAgICAg
ICAgICAgICAgICpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAorICAg
ICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4s
CisgICAgICAgICAgICAgICAgICAgIHN0dWJSb3V0aW5lKSk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAvLyBXZSdyZSBub3cgY29tbWl0dGVkIHRvIGNyZWF0aW5nIHRoZSBzdHViLiBN
b2dyaWZ5IHRoZSBtZXRhLWRhdGEgYWNjb3JkaW5nbHkuCisgICAgICAgICAgICBsaXN0ID0gUG9s
eW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbSgKKyAgICAgICAgICAgICAgICBwdXRLaW5kLCBzdHVi
SW5mbywKKyAgICAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxB
dE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGVtaXRQdXRSZXBsYWNlU3R1YigKKyAgICAgICAgICAgICAgICBleGVjLCBiYXNl
VmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQsCisgICAgICAgICAg
ICAgICAgc3RydWN0dXJlLCBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhU
YXJnZXQoKSksIHN0dWJSb3V0aW5lKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbGlzdC0+
YWRkQWNjZXNzKAorICAgICAgICAgICAgICAgIFB1dEJ5SWRBY2Nlc3M6OnJlcGxhY2UoCisgICAg
ICAgICAgICAgICAgICAgICpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LAorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIHN0dWJSb3V0aW5lKSk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxv
Y2spOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2Rl
TG9jYXRpb25MYWJlbChzdHViUm91dGluZS5jb2RlKCkpKTsKKyAgICAgICAgCisgICAgICAgIGlm
IChsaXN0LT5pc0Z1bGwoKSkKKyAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9u
KHNsb3QsIHB1dEtpbmQpKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgZGZnQnVpbGRQdXRCeUlkTGlzdChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCit7CisgICAgYm9vbCBjYWNoZWQgPSB0cnlCdWls
ZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5m
bywgcHV0S2luZCk7CisgICAgaWYgKCFjYWNoZWQpCisgICAgICAgIGRmZ1JlcGF0Y2hDYWxsKGV4
ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRl
R2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiB9CiAKIHZvaWQgZGZnTGlu
a0ZvcihFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxv
Y2sqIGNhbGxlZUNvZGVCbG9jaywgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgY29kZVB0ciwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQpAQCAtNjg3LDE0ICs4
OTEsMTQgQEAgdm9pZCBkZmdSZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYgcmVwYQogewogICAg
IFZfREZHT3BlcmF0aW9uX0VKQ0kgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IGJpdHdpc2VfY2FzdDxW
X0RGR09wZXJhdGlvbl9FSkNJPihNYWNyb0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQoc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICBWX0RGR09w
ZXJhdGlvbl9FSkNJIG9wdGltaXplZEZ1bmN0aW9uOwotICAgIGlmICh1bm9wdGltaXplZEZ1bmN0
aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QpCisgICAgaWYgKHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExpc3QpCiAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9u
ID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0aW1p
emVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCkKKyAgICBlbHNlIGlmICh1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QgfHwgdW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0KQogICAg
ICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6
ZTsKLSAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3RTdHJpY3QpCisgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeUlkRGlyZWN0U3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdCkKICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24g
PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CiAgICAgZWxzZSB7Ci0gICAg
ICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RO
b25TdHJpY3QpOworICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdCk7CiAgICAgICAgIG9wdGltaXplZEZ1
bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOwogICAgIH0K
ICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9w
dGltaXplZEZ1bmN0aW9uKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVw
YXRjaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRj
aC5oCShyZXZpc2lvbiAxMDY3NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Jl
cGF0Y2guaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTAgKzI2LDEyIEBACiAjaWZuZGVmIERGR1Jl
cGF0Y2hfaAogI2RlZmluZSBERkdSZXBhdGNoX2gKIAorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5o
PgorCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKLSNpbmNsdWRlIDxkZmcvREZHSklUQ29tcGlsZXIu
aD4KLSNpbmNsdWRlIDxkZmcvREZHT3BlcmF0aW9ucy5oPgorI2luY2x1ZGUgIkRGR0pJVENvbXBp
bGVyLmgiCisjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAKQEAgLTM3LDYgKzM5LDcgQEAgdm9pZCBkZmdSZXBhdGNoR2V0QnlJRChF
eGVjU3RhdGUqLCBKU1ZhbAogdm9pZCBkZmdCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0ZSosIEpT
VmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVT
dHViSW5mbyYpOwogdm9pZCBkZmdCdWlsZEdldEJ5SURQcm90b0xpc3QoRXhlY1N0YXRlKiwgSlNW
YWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0
dWJJbmZvJik7CiB2b2lkIGRmZ1JlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5m
byYsIFB1dEtpbmQpOwordm9pZCBkZmdCdWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSosIEpTVmFs
dWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVT
dHViSW5mbyYsIFB1dEtpbmQpOwogdm9pZCBkZmdMaW5rRm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5r
SW5mbyYsIENvZGVCbG9jayosIEpTRnVuY3Rpb24qIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKIHZvaWQgZGZnUmVzZXRHZXRCeUlEKFJlcGF0
Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9pZCBkZmdSZXNldFB1dEJ5SUQoUmVw
YXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Xcml0ZUJhcnJpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Xcml0ZUJhcnJpZXIuaAkocmV2aXNpb24gMTA2Nzc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVCYXJyaWVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTczLDYgKzczLDEzIEBAIHB1YmxpYzoKICAgICAgICAgdmFsaWRhdGVDZWxsKHZhbHVlKTsK
ICAgICAgICAgc2V0RWFybHlWYWx1ZShnbG9iYWxEYXRhLCBvd25lciwgdmFsdWUpOwogICAgIH0K
KyAgICAKKyAgICAvLyBUaGlzIGlzIG1lYW50IHRvIGJlIHVzZWQgbGlrZSBvcGVyYXRvcj0sIGJ1
dCBpcyBjYWxsZWQgY29weUZyb20gaW5zdGVhZCwgaW4KKyAgICAvLyBvcmRlciB0byBraW5kbHkg
aW5mb3JtIHRoZSBDKysgY29tcGlsZXIgdGhhdCBpdHMgYWR2aWNlIGlzIG5vdCBhcHByZWNpYXRl
ZC4KKyAgICB2b2lkIGNvcHlGcm9tKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VD4mIG90aGVyKQor
ICAgIHsKKyAgICAgICAgbV9jZWxsID0gb3RoZXIubV9jZWxsOworICAgIH0KIAogICAgIHZvaWQg
c2V0TWF5QmVOdWxsKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgSlNDZWxsKiBvd25l
ciwgVCogdmFsdWUpCiAgICAgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125971</attachid>
            <date>2012-02-07 18:02:32 -0800</date>
            <delta_ts>2012-02-07 18:37:46 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>polyputbyid_patch_2.diff</filename>
            <type>text/plain</type>
            <size>58180</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA3MDE4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkyIEBA
CisyMDEyLTAyLTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBoYXZlIHBvbHltb3JwaGljIHB1dF9ieV9pZCBjYWNoaW5nCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODA2MgorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMTAzMjY0Mzk+IDxyZGFyOi8vcHJvYmxlbS8xMDgyNDgzOT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEltcGxlbWVu
dGVkIHBvbHltb3JwaGljIHB1dF9ieV9pZCBjYWNoaW5nIGluIHRoZSBERkcsIGFuZCBhZGRlZCBt
dWNoIG9mIHRoZQorICAgICAgICBtYWNoaW5lcnkgdGhhdCB3b3VsZCBiZSBuZWVkZWQgdG8gaW1w
bGVtZW50IGl0IGluIHRoZSBvbGQgSklUIGFzIHdlbGwuCisgICAgICAgIAorICAgICAgICBJIGRl
Y2lkZWQgYWdhaW5zdCB1c2luZyB0aGUgb2xkIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlz
dCBtZWNoYW5pc20gYXMKKyAgICAgICAgdGhpcyBkaWRuJ3QgcXVpdGUgZml0IHdpdGggcHV0X2J5
X2lkLiBJbiBwYXJ0aWN1bGFyLCBJIHdhbnRlZCB0aGUgYWJpbGl0eSB0bworICAgICAgICBoYXZl
IG9uZSBsaXN0IHRoYXQgY2FwdHVyZWQgYWxsIHJlbGV2YW50IGNhc2VzIChpbmNsdWRpbmcgcHJv
dG8gcHV0X2J5X2lkCisgICAgICAgIGlmIHdlIGV2ZXIgZGVjaWRlZCB0byBkbyBpdCkuIEFuZCBJ
IHdhbnRlZCB0aGUgY29kZSB0byBoYXZlIGJldHRlcgorICAgICAgICBlbmNhcHN1bGF0aW9uLiBB
bmQgSSBkaWRuJ3Qgd2FudCB0byBnZXQgY29uZnVzZWQgYnkgdGhlIGZhY3QgdGhhdCB0aGUKKyAg
ICAgICAgb3JpZ2luYWwgKG5vbi1saXN0KSBwdXRfYnlfaWQgY2FjaGUgbWF5IGl0c2VsZiBjb25z
aXN0IG9mIGEgc3R1YiByb3V0aW5lLgorICAgICAgICAKKyAgICAgICAgVGhpcyBjb2RlIGlzIHN0
aWxsIHN1Yi1vcHRpbWFsIChmb3IgZXhhbXBsZSBhZGRpbmcgYSByZXBsYWNlIHRvIGEgbGlzdCB3
aG9zZQorICAgICAgICBwcmV2aW91cyBlbGVtZW50cyBhcmUgYWxsIHRyYW5zaXRpb25zIHNob3Vs
ZCBqdXN0IHJlcGF0Y2ggdGhlIG9yaWdpbmFsIGNvZGUsCisgICAgICAgIGJ1dCBoZXJlIGl0IHdp
bGwgZ2VuZXJhdGUgYSBzdHViKSBidXQgaXQgYWxyZWFkeSBnZW5lcmF0ZXMgYSA+MjAlIHNwZWVk
LXVwCisgICAgICAgIG9uIFY4LXNwbGF5LCBsZWFkaW5nIHRvIGEgMiUgd2luIG92ZXJhbGwgaW4g
c3BsYXkuIE5ldXRyYWwgZWxzZXdoZXJlLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0LmNwcDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpQdXRC
eUlkQWNjZXNzOjpmcm9tU3RydWN0dXJlU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpQdXRCeUlk
QWNjZXNzOjp2aXNpdFdlYWspOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
OjpQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNQdXRC
eUlkTGlzdDo6ZnJvbSk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljUHV0QnlJZExpc3Q6On5Q
b2x5bW9ycGhpY1B1dEJ5SWRMaXN0KToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNQdXRCeUlk
TGlzdDo6aXNGdWxsKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6aXNB
bG1vc3RGdWxsKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6YWRkQWNj
ZXNzKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6dmlzaXRXZWFrKToK
KyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Lmg6IEFkZGVkLgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKFB1dEJ5SWRBY2Nlc3MpOgorICAgICAgICAoSlNDOjpQdXRC
eUlkQWNjZXNzOjpQdXRCeUlkQWNjZXNzKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6
dHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlB1dEJ5SWRBY2Nlc3M6OnJlcGxhY2UpOgorICAg
ICAgICAoSlNDOjpQdXRCeUlkQWNjZXNzOjppc1NldCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRB
Y2Nlc3M6Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRBY2Nlc3M6OnR5cGUpOgor
ICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNzOjppc1RyYW5zaXRpb24pOgorICAgICAgICAoSlND
OjpQdXRCeUlkQWNjZXNzOjppc1JlcGxhY2UpOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNz
OjpvbGRTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNzOjpzdHJ1Y3R1cmUp
OgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNzOjpuZXdTdHJ1Y3R1cmUpOgorICAgICAgICAo
SlNDOjpQdXRCeUlkQWNjZXNzOjpjaGFpbik6CisgICAgICAgIChKU0M6OlB1dEJ5SWRBY2Nlc3M6
OnN0dWJSb3V0aW5lKToKKyAgICAgICAgKFBvbHltb3JwaGljUHV0QnlJZExpc3QpOgorICAgICAg
ICAoSlNDOjpQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0OjpjdXJyZW50U2xvd1BhdGhUYXJnZXQpOgor
ICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojppc0VtcHR5KToKKyAgICAgICAg
KEpTQzo6UG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6c2l6ZSk6CisgICAgICAgIChKU0M6OlBvbHlt
b3JwaGljUHV0QnlJZExpc3Q6OmF0KToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNQdXRCeUlk
TGlzdDo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljUHV0QnlJZExpc3Q6
OmtpbmQpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEtpbmQuaDogQWRkZWQuCisgICAgICAgIChK
U0MpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcDoKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmRlcmVmKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
U3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjppc1B1dEJ5SWRB
Y2Nlc3MpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdFB1dEJ5SWRMaXN0
KToKKyAgICAgICAgKFN0cnVjdHVyZVN0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
U3R1YkluZm86OnJlc2V0KToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAg
ICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZn
L0RGR1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpERkc6OmFwcHJvcHJpYXRlR2VuZXJpY1B1
dEJ5SWRGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6YXBwcm9wcmlhdGVMaXN0QnVpbGRp
bmdQdXRCeUlkRnVuY3Rpb24pOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpl
bWl0UHV0UmVwbGFjZVN0dWIpOgorICAgICAgICAoSlNDOjpERkc6OmVtaXRQdXRUcmFuc2l0aW9u
U3R1Yik6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAgICAgICAgKEpT
Qzo6REZHOjpkZmdSZXBhdGNoUHV0QnlJRCk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5QnVpbGRQ
dXRCeUlkTGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6ZGZnQnVpbGRQdXRCeUlkTGlzdCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6ZGZnUmVzZXRQdXRCeUlEKToKKyAgICAgICAgKiBkZmcvREZHUmVw
YXRjaC5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBydW50aW1lL1dyaXRlQmFycmllci5o
OgorICAgICAgICAoV3JpdGVCYXJyaWVyQmFzZSk6CisgICAgICAgIChKU0M6OldyaXRlQmFycmll
ckJhc2U6OmNvcHlGcm9tKToKKwogMjAxMi0wMi0wNyAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJy
YWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgQ3Jhc2ggb24gaHR0cDovL3d3dy5yaWNrc2hh
d2JhZ3MuY29tLwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNp
b24gMTA2Nzc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBAIFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAg
ICAgYnl0ZWNvZGUvTWV0aG9kQ2FsbExpbmtJbmZvLmNwcAogICAgIGJ5dGVjb2RlL01ldGhvZENh
bGxMaW5rU3RhdHVzLmNwcAogICAgIGJ5dGVjb2RlL09wY29kZS5jcHAKKyAgICBieXRlY29kZS9Q
b2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAogICAgIGJ5dGVjb2RlL1ByZWRpY3RlZFR5cGUuY3Bw
CiAgICAgYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKICAgICBieXRlY29kZS9TYW1wbGluZ1Rv
b2wuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQko
cmV2aXNpb24gMTA2Nzc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTEwOSwxMSArMTA5LDE0IEBAIGphdmFzY3JpcHRjb3Jl
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RDYWxs
TGlua1N0YXR1cy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmNw
cCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oIFwKKwlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAgXAorCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmNwcCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3Rpb25UcmFja2VyLmggXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEtpbmQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Nh
bXBsaW5nVG9vbC5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGlu
Z1Rvb2wuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5o
IFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZpc2lvbiAxMDY3NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpAQCAtNTgsNiAr
NTgsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBieXRlY29kZS9NZXRob2RDYWxsTGlua0luZm8uY3Bw
IFwKICAgICBieXRlY29kZS9NZXRob2RDYWxsTGlua1N0YXR1cy5jcHAgXAogICAgIGJ5dGVjb2Rl
L09wY29kZS5jcHAgXAorICAgIGJ5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwIFwK
ICAgICBieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmNwcCBcCiAgICAgYnl0ZWNvZGUvUHV0QnlJZFN0
YXR1cy5jcHAgXAogICAgIGJ5dGVjb2RlL1NhbXBsaW5nVG9vbC5jcHAgXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJ
KHJldmlzaW9uIDEwNjc3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTg2LDYgKzE1ODYsMTAgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQor
CQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5j
cHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4u
XGJ5dGVjb2RlXFByZWRpY3RlZFR5cGUuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMDY3NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiw5IEBACiAJCTBGOTYzQjJEMTNGODU0MDIwMDAyRDlC
MiAvKiBNZXRhQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjk2M0IyQTEzRjg1M0JEMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTYzQjJG
MTNGQzY2QkIwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IyRTEzRkM2NkFFMDAwMkQ5QjIg
LyogTWV0YUFsbG9jYXRvckhhbmRsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGOTYzQjM4MTNGQzZGRTkwMDAyRDlCMiAvKiBWYWx1ZVByb2Zp
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYz
QjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjlGQzhDMzE0RTFCNUZFMDBENTJBRTAg
LyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlGQzhCRjE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBo
aWNQdXRCeUlkTGlzdC5jcHAgKi87IH07CisJCTBGOUZDOEM0MTRFMUI2MDAwMEQ1MkFFMCAvKiBQ
b2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjlGQzhDMDE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRC
eUlkTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGOUZDOEM1MTRFMUI2MDQwMEQ1MkFFMCAvKiBQdXRLaW5kLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlGQzhDMTE0RTFCNUZCMDBENTJBRTAg
LyogUHV0S2luZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGQkMwQUU3MTQ5NkM3QzQwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJDMEFFNDE0OTZD
N0MxMDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuY3BwICovOyB9OwogCQkwRkJDMEFFODE0OTZD
N0M3MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQkMwQUU1MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0
UHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGQkQ3RTY5MTQ0Nzk5OTYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJEN0U2NzE0NDc5OThGMDA0ODEz
MTUgLyogQ29kZU9yaWdpbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC04OTYsNiArODk5LDkgQEAKIAkJMEY5NjNCMkIxM0Y4NTNDNzAwMDJEOUIy
IC8qIE1ldGFBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTWV0YUFsbG9jYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTYz
QjJFMTNGQzY2QUUwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1ldGFBbGxvY2F0b3JIYW5kbGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NjNCMzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZhbHVlUHJvZmls
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZVByb2ZpbGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5RkM4QkYxNEUxQjVGQjAwRDUyQUUwIC8qIFBv
bHltb3JwaGljUHV0QnlJZExpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGOUZDOEMwMTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvbHltb3JwaGljUHV0QnlJZExp
c3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5RkM4QzExNEUxQjVGQjAwRDUy
QUUwIC8qIFB1dEtpbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0S2lu
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkJDMEFFNDE0OTZDN0MxMDBENEZC
REQgLyogREZHRXhpdFByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gREZHRXhpdFByb2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkJDMEFFNTE0OTZDN0MxMDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gREZHRXhpdFByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZCRDdFNjcxNDQ3OTk4RjAwNDgxMzE1IC8qIENvZGVPcmlnaW4uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZU9yaWdpbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjU1Myw2ICsyNTU5LDkgQEAKIAkJOTY5QTA3OEYwRUQxRDNBRTAw
RjFGNjgxIC8qIGJ5dGVjb2RlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQkwRjlGQzhCRjE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlk
TGlzdC5jcHAgKi8sCisJCQkJMEY5RkM4QzAxNEUxQjVGQjAwRDUyQUUwIC8qIFBvbHltb3JwaGlj
UHV0QnlJZExpc3QuaCAqLywKKwkJCQkwRjlGQzhDMTE0RTFCNUZCMDBENTJBRTAgLyogUHV0S2lu
ZC5oICovLAogCQkJCTBGOTMzMjkzMTRDQTdEQzEwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5j
cHAgKi8sCiAJCQkJMEY5MzMyOTQxNENBN0RDMTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmgg
Ki8sCiAJCQkJMEY5MzMyOTUxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5SWRTdGF0dXMuY3BwICov
LApAQCAtMzEyOCw2ICszMTM3LDggQEAKIAkJCQkwRjU1RjBGNTE0RDEwNjNDMDBBQzc2NDkgLyog
QWJzdHJhY3RQQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NkUxNkIxNERGM0YxNjAwQjdCMkU0
IC8qIERGR05vZGVSZWZlcmVuY2VCbG9iLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY2RTE2QzE0
REYzRjE2MDBCN0IyRTQgLyogREZHTm9kZVVzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5RkM4
QzQxNEUxQjYwMDAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGOUZDOEM1MTRFMUI2MDQwMEQ1MkFFMCAvKiBQdXRLaW5kLmggaW4gSGVhZGVy
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKQEAgLTM2NzQsNiArMzY4NSw3IEBACiAJCQkJODZCNTgyNjcxNEQyNzk2QzAwQTlDMzA2
IC8qIENvZGVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2QjU4MjY5MTREMjc5NzAw
MEE5QzMwNiAvKiBDb2RlUHJvZmlsaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyQjkxNkM1
MTREQTA0MEMwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEY5RkM4QzMxNEUxQjVGRTAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUG9s
eW1vcnBoaWNQdXRCeUlkTGlzdC5oIgorCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK1B1dEJ5SWRBY2Nlc3MgUHV0QnlJZEFjY2Vzczo6ZnJvbVN0
cnVjdHVyZVN0dWJJbmZvKAorICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKKyAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIgaW5pdGlhbFNsb3dQYXRoKQoreworICAgIFB1dEJ5SWRBY2Nl
c3MgcmVzdWx0OworICAgIAorICAgIHN3aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlwZSkgeworICAg
IGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgorICAgICAgICByZXN1bHQubV90eXBlID0g
UmVwbGFjZTsKKyAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZv
LnUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZSk7CisgICAgICAgIHJlc3VsdC5t
X3N0dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENv
ZGVSZWYoaW5pdGlhbFNsb3dQYXRoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNh
c2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKKyAgICBjYXNlIGFjY2Vzc19w
dXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6CisgICAgICAgIHJlc3VsdC5tX3R5cGUgPSBUcmFu
c2l0aW9uOworICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8u
dS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZSk7CisgICAgICAgIHJlc3VsdC5t
X25ld1N0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVj
dHVyZSk7CisgICAgICAgIHJlc3VsdC5tX2NoYWluLmNvcHlGcm9tKHN0dWJJbmZvLnUucHV0QnlJ
ZFRyYW5zaXRpb24uY2hhaW4pOworICAgICAgICByZXN1bHQubV9zdHViUm91dGluZSA9IHN0dWJJ
bmZvLnN0dWJSb3V0aW5lOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK2Jvb2wgUHV0QnlJZEFjY2Vzczo6dmlzaXRXZWFrKCkgY29uc3QKK3sKKyAg
ICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgUmVwbGFjZToKKyAgICAgICAgaWYgKCFIZWFw
Ojppc01hcmtlZChtX29sZFN0cnVjdHVyZS5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgaWYgKCFI
ZWFwOjppc01hcmtlZChtX29sZFN0cnVjdHVyZS5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9uZXdTdHJ1Y3R1cmUuZ2V0KCkp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2Vk
KG1fY2hhaW4uZ2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdDo6UG9seW1vcnBoaWNQdXRCeUlkTGlzdCgKKyAgICBQdXRLaW5kIHB1dEtpbmQs
CisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBpbml0aWFsU2xvd1BhdGgpCisgICAgOiBtX2tpbmQocHV0S2luZCkKK3sKKyAgICBtX2xp
c3QuYXBwZW5kKFB1dEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyhzdHViSW5mbywg
aW5pdGlhbFNsb3dQYXRoKSk7Cit9CisKK1BvbHltb3JwaGljUHV0QnlJZExpc3QqIFBvbHltb3Jw
aGljUHV0QnlJZExpc3Q6OmZyb20oCisgICAgUHV0S2luZCBwdXRLaW5kLAorICAgIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaW5pdGlhbFNs
b3dQYXRoKQoreworICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19wdXRfYnlf
aWRfbGlzdCkKKyAgICAgICAgcmV0dXJuIHN0dWJJbmZvLnUucHV0QnlJZExpc3QubGlzdDsKKyAg
ICAKKyAgICBBU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfcHV0X2J5X2lkX3Jl
cGxhY2UKKyAgICAgICAgICAgfHwgc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfcHV0X2J5
X2lkX3RyYW5zaXRpb25fbm9ybWFsCisgICAgICAgICAgIHx8IHN0dWJJbmZvLmFjY2Vzc1R5cGUg
PT0gYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdCk7CisgICAgCisgICAgUG9seW1v
cnBoaWNQdXRCeUlkTGlzdCogcmVzdWx0ID0KKyAgICAgICAgbmV3IFBvbHltb3JwaGljUHV0QnlJ
ZExpc3QocHV0S2luZCwgc3R1YkluZm8sIGluaXRpYWxTbG93UGF0aCk7CisgICAgCisgICAgc3R1
YkluZm8uaW5pdFB1dEJ5SWRMaXN0KHJlc3VsdCk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6flBvbHltb3JwaGljUHV0QnlJZExpc3QoKSB7
IH0KKworYm9vbCBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojppc0Z1bGwoKSBjb25zdAoreworICAg
IEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKKyAgICByZXR1
cm4gc2l6ZSgpID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRTsKK30KKworYm9vbCBQb2x5
bW9ycGhpY1B1dEJ5SWRMaXN0Ojppc0FsbW9zdEZ1bGwoKSBjb25zdAoreworICAgIEFTU0VSVChz
aXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKKyAgICByZXR1cm4gc2l6ZSgp
ID49IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDE7Cit9CisKK3ZvaWQgUG9seW1vcnBo
aWNQdXRCeUlkTGlzdDo6YWRkQWNjZXNzKGNvbnN0IFB1dEJ5SWRBY2Nlc3MmIHB1dEJ5SWRBY2Nl
c3MpCit7CisgICAgQVNTRVJUKCFpc0Z1bGwoKSk7CisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhl
IHJlc2l6aW5nIG9wdGltaXplcyBmb3Igc3BhY2UsIG5vdCB0aW1lLgorICAgIG1fbGlzdC5yZXNp
emUobV9saXN0LnNpemUoKSArIDEpOworICAgIG1fbGlzdC5sYXN0KCkgPSBwdXRCeUlkQWNjZXNz
OworfQorCitib29sIFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OnZpc2l0V2VhaygpIGNvbnN0Cit7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7CisgICAgICAgIGlm
ICghYXQoaSkudmlzaXRXZWFrKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlk
TGlzdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Bv
bHltb3JwaGljUHV0QnlJZExpc3QuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQb2x5
bW9ycGhpY1B1dEJ5SWRMaXN0X2gKKyNkZWZpbmUgUG9seW1vcnBoaWNQdXRCeUlkTGlzdF9oCisK
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRl
ICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJP
cGNvZGUuaCIKKyNpbmNsdWRlICJQdXRLaW5kLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0IFN0cnVj
dHVyZVN0dWJJbmZvOworCitjbGFzcyBQdXRCeUlkQWNjZXNzIHsKK3B1YmxpYzoKKyAgICBlbnVt
IEFjY2Vzc1R5cGUgeworICAgICAgICBJbnZhbGlkLAorICAgICAgICBUcmFuc2l0aW9uLAorICAg
ICAgICBSZXBsYWNlCisgICAgfTsKKyAgICAKKyAgICBQdXRCeUlkQWNjZXNzKCkKKyAgICAgICAg
OiBtX3R5cGUoSW52YWxpZCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQdXRCeUlk
QWNjZXNzIHRyYW5zaXRpb24oCisgICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwKKyAg
ICAgICAgSlNDZWxsKiBvd25lciwKKyAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsCisg
ICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAorICAgICAgICBTdHJ1Y3R1cmVDaGFpbiog
Y2hhaW4sCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViUm91dGluZSkKKyAgICB7
CisgICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OworICAgICAgICByZXN1bHQubV90eXBlID0g
VHJhbnNpdGlvbjsKKyAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLnNldChnbG9iYWxEYXRh
LCBvd25lciwgb2xkU3RydWN0dXJlKTsKKyAgICAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlLnNl
dChnbG9iYWxEYXRhLCBvd25lciwgbmV3U3RydWN0dXJlKTsKKyAgICAgICAgcmVzdWx0Lm1fY2hh
aW4uc2V0KGdsb2JhbERhdGEsIG93bmVyLCBjaGFpbik7CisgICAgICAgIHJlc3VsdC5tX3N0dWJS
b3V0aW5lID0gc3R1YlJvdXRpbmU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBQdXRCeUlkQWNjZXNzIHJlcGxhY2UoCisgICAgICAgIEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwKKyAgICAgICAgSlNDZWxsKiBvd25lciwKKyAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViUm91dGluZSkK
KyAgICB7CisgICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OworICAgICAgICByZXN1bHQubV90
eXBlID0gUmVwbGFjZTsKKyAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLnNldChnbG9iYWxE
YXRhLCBvd25lciwgc3RydWN0dXJlKTsKKyAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBz
dHViUm91dGluZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIFB1dEJ5SWRBY2Nlc3MgZnJvbVN0cnVjdHVyZVN0dWJJbmZvKAorICAgICAgICBTdHJ1Y3R1
cmVTdHViSW5mbyYsCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBpbml0aWFsU2xvd1Bh
dGgpOworICAgIAorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgIT0gSW52
YWxpZDsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0K
KyAgICAKKyAgICBBY2Nlc3NUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAg
ICAKKyAgICBib29sIGlzVHJhbnNpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUcmFu
c2l0aW9uOyB9CisgICAgYm9vbCBpc1JlcGxhY2UoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0g
UmVwbGFjZTsgfQorICAgIAorICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIC8vIFVzaW5nIHRoaXMgaW5zdGVhZCBvZiBpc1NldCgpIHRvIG1ha2UgdGhp
cyBhc3NlcnRpb24gcm9idXN0IGFnYWluc3QgdGhlIHBvc3NpYmlsaXR5CisgICAgICAgIC8vIG9m
IGFkZGl0aW9uYWwgYWNjZXNzIHR5cGVzIGJlaW5nIGFkZGVkLgorICAgICAgICBBU1NFUlQoaXNU
cmFuc2l0aW9uKCkgfHwgaXNSZXBsYWNlKCkpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1f
b2xkU3RydWN0dXJlLmdldCgpOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNSZXBsYWNlKCkpOworICAgICAgICBy
ZXR1cm4gbV9vbGRTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZSog
bmV3U3RydWN0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1RyYW5zaXRpb24o
KSk7CisgICAgICAgIHJldHVybiBtX25ld1N0cnVjdHVyZS5nZXQoKTsKKyAgICB9CisgICAgCisg
ICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChp
c1RyYW5zaXRpb24oKSk7CisgICAgICAgIHJldHVybiBtX2NoYWluLmdldCgpOworICAgIH0KKyAg
ICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YlJvdXRpbmUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKGlzVHJhbnNpdGlvbigpIHx8IGlzUmVwbGFjZSgpKTsKKyAgICAgICAg
cmV0dXJuIG1fc3R1YlJvdXRpbmU7CisgICAgfQorICAgIAorICAgIGJvb2wgdmlzaXRXZWFrKCkg
Y29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIEFjY2Vzc1R5cGUgbV90eXBlOworICAgIFdyaXRl
QmFycmllcjxTdHJ1Y3R1cmU+IG1fb2xkU3RydWN0dXJlOworICAgIFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmU+IG1fbmV3U3RydWN0dXJlOworICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmVDaGFpbj4g
bV9jaGFpbjsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbV9zdHViUm91dGluZTsKK307CisK
K2NsYXNzIFBvbHltb3JwaGljUHV0QnlJZExpc3QgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIC8vIEluaXRpYWxpemUgZnJvbSBhIHN0dWIgaW5mbzsgdGhpcyB3
aWxsIHBsYWNlIG9uZSBlbGVtZW50IGluIHRoZSBsaXN0IGFuZCBpdCB3aWxsCisgICAgLy8gYmUg
Y3JlYXRlZCBieSBjb252ZXJ0aW5nIHRoZSBzdHViIGluZm8ncyBwdXQgYnkgaWQgYWNjZXNzIGlu
Zm9ybWF0aW9uIGludG8gb3VyCisgICAgLy8gUHV0QnlJZEFjY2Vzcy4KKyAgICBQb2x5bW9ycGhp
Y1B1dEJ5SWRMaXN0KAorICAgICAgICBQdXRLaW5kLAorICAgICAgICBTdHJ1Y3R1cmVTdHViSW5m
byYsCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBpbml0aWFsU2xvd1BhdGgpOworCisg
ICAgLy8gRWl0aGVyIGNyZWF0ZXMgYSBuZXcgcG9seW1vcnBoaWMgcHV0IGxpc3QsIG9yIHJldHVy
bnMgdGhlIG9uZSB0aGF0IGlzIGFscmVhZHkKKyAgICAvLyBpbiBwbGFjZS4KKyAgICBzdGF0aWMg
UG9seW1vcnBoaWNQdXRCeUlkTGlzdCogZnJvbSgKKyAgICAgICAgUHV0S2luZCwKKyAgICAgICAg
U3RydWN0dXJlU3R1YkluZm8mLAorICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaW5pdGlh
bFNsb3dQYXRoKTsKKyAgICAKKyAgICB+UG9seW1vcnBoaWNQdXRCeUlkTGlzdCgpOworICAgIAor
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdXJyZW50U2xvd1BhdGhUYXJnZXQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGlzdC5sYXN0KCkuc3R1YlJvdXRpbmUoKS5jb2RlKCk7
CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkQWNjZXNzKGNvbnN0IFB1dEJ5SWRBY2Nlc3MmKTsK
KyAgICAKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2xpc3QuaXNFbXB0eSgp
OyB9CisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0K
KyAgICBib29sIGlzRnVsbCgpIGNvbnN0OworICAgIGJvb2wgaXNBbG1vc3RGdWxsKCkgY29uc3Q7
IC8vIFRydWUgaWYgYWRkaW5nIGFuIGVsZW1lbnQgd291bGQgbWFrZSBpc0Z1bGwoKSB0cnVlLgor
ICAgIGNvbnN0IFB1dEJ5SWRBY2Nlc3MmIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1f
bGlzdFtpXTsgfQorICAgIGNvbnN0IFB1dEJ5SWRBY2Nlc3MmIG9wZXJhdG9yW10odW5zaWduZWQg
aSkgY29uc3QgeyByZXR1cm4gbV9saXN0W2ldOyB9CisgICAgCisgICAgUHV0S2luZCBraW5kKCkg
Y29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgCisgICAgYm9vbCB2aXNpdFdlYWsoKSBjb25z
dDsKKyAgICAKK3ByaXZhdGU6CisgICAgVmVjdG9yPFB1dEJ5SWRBY2Nlc3MsIDI+IG1fbGlzdDsK
KyAgICBQdXRLaW5kIG1fa2luZDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gRU5BQkxFKEpJVCkKKworI2VuZGlmIC8vIFBvbHltb3JwaGljUHV0QnlJZExpc3RfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0S2luZC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRLaW5kLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0S2luZC5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgUHV0S2luZF9oCisjZGVmaW5lIFB1dEtpbmRfaAorCituYW1lc3Bh
Y2UgSlNDIHsKKworZW51bSBQdXRLaW5kIHsgRGlyZWN0LCBOb3REaXJlY3QgfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBQdXRLaW5kX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZp
c2lvbiAxMDY3NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAi
U3RydWN0dXJlU3R1YkluZm8uaCIKIAogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAi
UG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIgogI2luY2x1ZGUgIlNjb3BlQ2hhaW4uaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CkBAIC00NSw2ICs0Niw5IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmRl
cmVmKCkKICAgICAgICAgZGVsZXRlIHBvbHltb3JwaGljU3RydWN0dXJlczsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KKyAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDoKKyAgICAgICAgZGVs
ZXRlIHUucHV0QnlJZExpc3QubGlzdDsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgYWNjZXNz
X2dldF9ieV9pZF9zZWxmOgogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9wcm90bzoKICAgICBj
YXNlIGFjY2Vzc19nZXRfYnlfaWRfY2hhaW46CkBAIC04MiwxOCArODYsMTQgQEAgYm9vbCBTdHJ1
Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogICAgICAgICBicmVhazsKICAgICBjYXNl
IGFjY2Vzc19nZXRfYnlfaWRfc2VsZl9saXN0OiB7CiAgICAgICAgIFBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVzID0gdS5nZXRCeUlkU2VsZkxpc3Qu
c3RydWN0dXJlTGlzdDsKLSAgICAgICAgaWYgKCFwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPnZpc2l0
V2Vhayh1LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZSkpIHsKLSAgICAgICAgICAgIGRlbGV0ZSBw
b2x5bW9ycGhpY1N0cnVjdHVyZXM7CisgICAgICAgIGlmICghcG9seW1vcnBoaWNTdHJ1Y3R1cmVz
LT52aXNpdFdlYWsodS5nZXRCeUlkU2VsZkxpc3QubGlzdFNpemUpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIGFj
Y2Vzc19nZXRfYnlfaWRfcHJvdG9fbGlzdDogewogICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0
cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlcyA9IHUuZ2V0QnlJZFByb3RvTGlzdC5z
dHJ1Y3R1cmVMaXN0OwotICAgICAgICBpZiAoIXBvbHltb3JwaGljU3RydWN0dXJlcy0+dmlzaXRX
ZWFrKHUuZ2V0QnlJZFNlbGZMaXN0Lmxpc3RTaXplKSkgewotICAgICAgICAgICAgZGVsZXRlIHBv
bHltb3JwaGljU3RydWN0dXJlczsKKyAgICAgICAgaWYgKCFwb2x5bW9ycGhpY1N0cnVjdHVyZXMt
PnZpc2l0V2Vhayh1LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZSkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgYWNj
ZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKQEAgLTEwNyw2ICsxMDcsMTAgQEAgYm9v
bCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogICAgICAgICBpZiAoIUhlYXA6
OmlzTWFya2VkKHUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgYWNjZXNz
X3B1dF9ieV9pZF9saXN0OgorICAgICAgICBpZiAoIXUucHV0QnlJZExpc3QubGlzdC0+dmlzaXRX
ZWFrKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOwogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIC8vIFRoZSByZXN0IG9mIHRoZSBpbnN0cnVjdGlvbnMgZG9uJ3QgcmVx
dWlyZSByZWZlcmVuY2VzLCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvCiAgICAgICAgIC8vIGRvIGFu
eXRoaW5nLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDEwNjc3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2
ICsyNiw4IEBACiAjaWZuZGVmIFN0cnVjdHVyZVN0dWJJbmZvX2gKICNkZWZpbmUgU3RydWN0dXJl
U3R1YkluZm9faAogCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKICNpZiBFTkFCTEUoSklU
KQogCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgpAQCAtMzYsNiArMzgsOCBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAorICAgIGNsYXNzIFBvbHltb3JwaGljUHV0QnlJZExpc3Q7CisKICAgICBlbnVt
IEFjY2Vzc1R5cGUgewogICAgICAgICBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYsCiAgICAgICAgIGFj
Y2Vzc19nZXRfYnlfaWRfcHJvdG8sCkBAIC00NSw2ICs0OSw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsLAogICAgICAgICBhY2Nl
c3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0LAogICAgICAgICBhY2Nlc3NfcHV0X2J5X2lk
X3JlcGxhY2UsCisgICAgICAgIGFjY2Vzc19wdXRfYnlfaWRfbGlzdCwKICAgICAgICAgYWNjZXNz
X3Vuc2V0LAogICAgICAgICBhY2Nlc3NfZ2V0X2J5X2lkX2dlbmVyaWMsCiAgICAgICAgIGFjY2Vz
c19wdXRfYnlfaWRfZ2VuZXJpYywKQEAgLTc1LDYgKzgwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKICAgICAgICAg
Y2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OgogICAgICAgICBjYXNlIGFj
Y2Vzc19wdXRfYnlfaWRfcmVwbGFjZToKKyAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2xp
c3Q6CiAgICAgICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9nZW5lcmljOgogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CkBAIC0xNDksMTAgKzE1NSwxNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIHUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVj
dHVyZS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIGJhc2VPYmplY3RTdHJ1Y3R1cmUpOwogICAgICAg
ICB9CiAgICAgICAgIAorICAgICAgICB2b2lkIGluaXRQdXRCeUlkTGlzdChQb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0KiBsaXN0KQorICAgICAgICB7CisgICAgICAgICAgICBhY2Nlc3NUeXBlID0gYWNj
ZXNzX3B1dF9ieV9pZF9saXN0OworICAgICAgICAgICAgdS5wdXRCeUlkTGlzdC5saXN0ID0gbGlz
dDsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgdm9pZCByZXNldCgpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfdW5zZXQ7Ci0gICAgICAgICAgICAKKyAg
ICAgICAgICAgIGRlcmVmKCk7CiAgICAgICAgICAgICBzdHViUm91dGluZSA9IE1hY3JvQXNzZW1i
bGVyQ29kZVJlZigpOwogICAgICAgICB9CiAKQEAgLTIyNyw2ICsyMzksOSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVy
QmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7CiAgICAgICAgICAgICB9IHB1dEJ5
SWRSZXBsYWNlOworICAgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgICAgICBQb2x5bW9y
cGhpY1B1dEJ5SWRMaXN0KiBsaXN0OworICAgICAgICAgICAgfSBwdXRCeUlkTGlzdDsKICAgICAg
ICAgfSB1OwogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViUm91dGluZTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNp
b24gMTA2Nzc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjExLDYgKzYxMSw3MCBAQCB2b2lkIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlJZERpcmVjCiAgICAgICAgIHN0dWJJbmZvLnNlZW4gPSB0cnVlOwogfQog
CitWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJKG9wZXJhdGlvblB1
dEJ5SWRTdHJpY3RCdWlsZExpc3QpOwordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
SWRTdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKiBwcm9wZXJ0
eU5hbWUsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3sKKyAgICBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgCisgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIEpTVmFsdWUgYmFzZVZhbHVl
KGJhc2UpOworICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRydWUpOworICAgIAorICAgIGJhc2VW
YWx1ZS5wdXQoZXhlYywgKnByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIAorICAgIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5m
byhyZXR1cm5BZGRyZXNzKTsKKyAgICBkZmdCdWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VWYWx1
ZSwgKnByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIE5vdERpcmVjdCk7Cit9CisKK1ZfRlVO
Q1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZE5v
blN0cmljdEJ1aWxkTGlzdCk7Cit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5v
blN0cmljdEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElkZW50aWZpZXIqIHByb3BlcnR5
TmFtZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICAKKyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUo
YmFzZSk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UpOworICAgIAorICAgIGJhc2VW
YWx1ZS5wdXQoZXhlYywgKnByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIAorICAgIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRTdHViSW5m
byhyZXR1cm5BZGRyZXNzKTsKKyAgICBkZmdCdWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJhc2VWYWx1
ZSwgKnByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIE5vdERpcmVjdCk7Cit9CisKK1ZfRlVO
Q1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZERp
cmVjdFN0cmljdEJ1aWxkTGlzdCk7Cit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJ
ZERpcmVjdFN0cmljdEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElkZW50aWZpZXIqIHBy
b3BlcnR5TmFtZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICAKKyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgUHV0UHJvcGVydHlT
bG90IHNsb3QodHJ1ZSk7CisgICAgCisgICAgQVNTRVJUKGJhc2UtPmlzT2JqZWN0KCkpOworICAg
IGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCAqcHJvcGVydHlO
YW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgCisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
ID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOworICAgIGRm
Z0J1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZSwgKnByb3BlcnR5TmFtZSwgc2xvdCwgc3R1Yklu
Zm8sIERpcmVjdCk7Cit9CisKK1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNT
X0VKQ0kob3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdCk7Cit2b2lkIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdFdpdGhS
ZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBKU0NlbGwqIGJhc2UsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzKQoreworICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVj
LT5nbG9iYWxEYXRhKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxE
YXRhLCBleGVjKTsKKyAgICAKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UpOworICAgIAorICAg
IEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKKyAgICBhc09iamVjdChiYXNlKS0+cHV0RGlyZWN0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgKnByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIAor
ICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRT
dHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBkZmdCdWlsZFB1dEJ5SWRMaXN0KGV4ZWMsIGJh
c2UsICpwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBEaXJlY3QpOworfQorCiBzaXplX3Qg
REZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7CiAgICAg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxMDY3NzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNyArMjgsOCBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKLSNpbmNsdWRl
IDxkZmcvREZHSklUQ29tcGlsZXIuaD4KKyNpbmNsdWRlICJERkdKSVRDb21waWxlci5oIgorI2lu
Y2x1ZGUgIlB1dEtpbmQuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTM2LDggKzM3LDYgQEAg
c3RydWN0IEdsb2JhbFJlc29sdmVJbmZvOwogCiBuYW1lc3BhY2UgREZHIHsKIAotZW51bSBQdXRL
aW5kIHsgRGlyZWN0LCBOb3REaXJlY3QgfTsKLQogZXh0ZXJuICJDIiB7CiAKICNpZiBDQUxMSU5H
X0NPTlZFTlRJT05fSVNfU1REQ0FMTApAQCAtMTMwLDYgKzEyOSwxMCBAQCB2b2lkIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljCiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlJZE5vblN0cmljdE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKik7CiB2b2lkIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKik7CiB2b2lkIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlm
aWVyKik7Cit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlz
dChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwg
SWRlbnRpZmllciopOwordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJp
Y3RCdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0Nl
bGwqIGJhc2UsIElkZW50aWZpZXIqKTsKK3ZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eUlkRGlyZWN0U3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKik7Cit2b2lkIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciopOwogLy8g
VGhlc2UgY29tcGFyaXNvbnMgcmV0dXJuIGEgYm9vbGVhbiB3aXRoaW4gYSBzaXplX3Qgc3VjaCB0
aGF0IHRoZSB2YWx1ZSBpcyB6ZXJvIGV4dGVuZGVkIHRvIGZpbGwgdGhlIHJlZ2lzdGVyLgogc2l6
ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3MoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMik7CiBzaXplX3Qg
REZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVzc0VxKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxMDY3NzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiREZHU3BlY3VsYXRpdmVKSVQuaCIKICNpbmNs
dWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlBv
bHltb3JwaGljUHV0QnlJZExpc3QuaCIKICNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTQ5Miw3ICs0OTMsNyBAQCB2b2lkIGRm
Z0J1aWxkR2V0QnlJRFByb3RvTGlzdChFeGVjU3RhdGUqCiAgICAgICAgIGRmZ1JlcGF0Y2hDYWxs
KGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlv
bkdldEJ5SWQpOwogfQogCi1zdGF0aWMgVl9ERkdPcGVyYXRpb25fRUpDSSBhcHByb3ByaWF0ZVB1
dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2lu
ZCkKK3N0YXRpYyBWX0RGR09wZXJhdGlvbl9FSkNJIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRG
dW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkKIHsK
ICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkgewogICAgICAgICBpZiAocHV0S2luZCA9PSBE
aXJlY3QpCkBAIC01MDQsNiArNTA1LDE4IEBAIHN0YXRpYyBWX0RGR09wZXJhdGlvbl9FSkNJIGFw
cHJvcHJpYXRlUHUKICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdDsKIH0KIAor
c3RhdGljIFZfREZHT3BlcmF0aW9uX0VKQ0kgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlk
RnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpCit7
CisgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpIHsKKyAgICAgICAgaWYgKHB1dEtpbmQgPT0g
RGlyZWN0KQorICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RC
dWlsZExpc3Q7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0
OworICAgIH0KKyAgICBpZiAocHV0S2luZCA9PSBEaXJlY3QpCisgICAgICAgIHJldHVybiBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0OworICAgIHJldHVybiBvcGVyYXRp
b25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0OworfQorCiBzdGF0aWMgdm9pZCB0ZXN0UHJvdG90
eXBlKE1hY3JvQXNzZW1ibGVyICZzdHViSml0LCBHUFJSZWcgc2NyYXRjaEdQUiwgSlNWYWx1ZSBw
cm90b3R5cGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzKQogewogICAg
IGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCkBAIC01MTUsNyArNTI4LDE4NyBAQCBzdGF0aWMgdm9p
ZCB0ZXN0UHJvdG90eXBlKE1hY3JvQXNzZW1ibGVyCiAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChz
dHViSml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwcm90b3R5cGUuYXNDZWxsKCktPnN0cnVjdHVyZSgpKSkp
OwogfQogCi1zdGF0aWMgYm9vbCB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYg
c2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCitzdGF0
aWMgdm9pZCBlbWl0UHV0UmVwbGFjZVN0dWIoCisgICAgRXhlY1N0YXRlKiBleGVjLAorICAgIEpT
VmFsdWUsCisgICAgY29uc3QgSWRlbnRpZmllciYsCisgICAgY29uc3QgUHV0UHJvcGVydHlTbG90
JiBzbG90LAorICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKKyAgICBQdXRLaW5kLAor
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAorICAgIENvZGVMb2NhdGlvbkxhYmVsIGZhaWx1cmVM
YWJlbCwKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIHN0dWJSb3V0aW5lKQoreworICAgIEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgR1BSUmVn
IGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLmJhc2VHUFIpOworI2lmIFVT
RShKU1ZBTFVFMzJfNjQpCisgICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BS
UmVnPihzdHViSW5mby52YWx1ZVRhZ0dQUik7CisjZW5kaWYKKyAgICBHUFJSZWcgdmFsdWVHUFIg
PSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnZhbHVlR1BSKTsKKyAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8uc2NyYXRjaEdQUik7CisgICAg
Ym9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IGZhbHNlOworI2lmIEVOQUJMRShHR0MpIHx8IEVO
QUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjI7Cisg
ICAgY29uc3QgYm9vbCB3cml0ZUJhcnJpZXJOZWVkZWQgPSB0cnVlOworI2Vsc2UKKyAgICBjb25z
dCBib29sIHdyaXRlQmFycmllck5lZWRlZCA9IGZhbHNlOworI2VuZGlmCisgICAgCisgICAgTWFj
cm9Bc3NlbWJsZXIgc3R1YkppdDsKKyAgICAKKyAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlk
R1BSUmVnICYmICh3cml0ZUJhcnJpZXJOZWVkZWQgfHwgIXN0cnVjdHVyZS0+aXNVc2luZ0lubGlu
ZVN0b3JhZ2UoKSkpIHsKKyAgICAgICAgc2NyYXRjaEdQUiA9IFNwZWN1bGF0aXZlSklUOjpzZWxl
Y3RTY3JhdGNoR1BSKGJhc2VHUFIsIHZhbHVlR1BSKTsKKyAgICAgICAgbmVlZFRvUmVzdG9yZVNj
cmF0Y2ggPSB0cnVlOworICAgICAgICBzdHViSml0LnB1c2goc2NyYXRjaEdQUik7CisgICAgfQor
CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmFkU3RydWN0dXJlID0gc3R1YkppdC5icmFuY2hQ
dHIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOworICAgIAorI2lm
IEVOQUJMRShHR0MpIHx8IEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKKyAgICBzY3Jh
dGNoR1BSMiA9IFNwZWN1bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHZhbHVl
R1BSLCBzY3JhdGNoR1BSKTsKKyAgICBzdHViSml0LnB1c2goc2NyYXRjaEdQUjIpOworICAgIFNw
ZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoc3R1YkppdCwgYmFzZUdQUiwgc2NyYXRjaEdQUiwg
c2NyYXRjaEdQUjIsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKKyAgICBzdHViSml0
LnBvcChzY3JhdGNoR1BSMik7CisjZW5kaWYKKyAgICAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
IGlmIChzdHJ1Y3R1cmUtPmlzVXNpbmdJbmxpbmVTdG9yYWdlKCkpCisgICAgICAgIHN0dWJKaXQu
c3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIHNsb3QuY2FjaGVkT2Zmc2V0KCkgKiBzaXpl
b2YoSlNWYWx1ZSkpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZlByb3BlcnR5U3Rv
cmFnZSgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIodmFsdWVHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIHNsb3QuY2FjaGVkT2Zmc2V0KCkg
KiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICB9CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAg
IGlmIChzdHJ1Y3R1cmUtPmlzVXNpbmdJbmxpbmVTdG9yYWdlKCkpIHsKKyAgICAgICAgc3R1Ykpp
dC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09i
amVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBzbG90LmNhY2hlZE9mZnNldCgpICogc2l6
ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFz
Qml0cy5wYXlsb2FkKSkpOworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0
b3JhZ2UoKSArIHNsb3QuY2FjaGVkT2Zmc2V0KCkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCkpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzY3JhdGNoR1BSLCBzbG90LmNhY2hlZE9mZnNldCgpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwor
ICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIsIHNsb3QuY2FjaGVkT2Zmc2V0KCkgKiBzaXplb2YoSlNWYWx1ZSkgKyBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKKyAg
ICB9CisjZW5kaWYKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzOworICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWx1cmU7CisgICAgCisgICAgaWYgKG5lZWRUb1Jlc3Rv
cmVTY3JhdGNoKSB7CisgICAgICAgIHN0dWJKaXQucG9wKHNjcmF0Y2hHUFIpOworICAgICAgICBz
dWNjZXNzID0gc3R1YkppdC5qdW1wKCk7CisgICAgICAgIAorICAgICAgICBiYWRTdHJ1Y3R1cmUu
bGluaygmc3R1YkppdCk7CisgICAgICAgIHN0dWJKaXQucG9wKHNjcmF0Y2hHUFIpOworICAgICAg
ICBmYWlsdXJlID0gc3R1YkppdC5qdW1wKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3VjY2Vz
cyA9IHN0dWJKaXQuanVtcCgpOworICAgICAgICBmYWlsdXJlID0gYmFkU3RydWN0dXJlOworICAg
IH0KKyAgICAKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmc3R1Ykpp
dCwgZXhlYy0+Y29kZUJsb2NrKCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxs
VG9Eb25lKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlLCBmYWlsdXJlTGFiZWwpOwor
ICAgICAgICAgICAgCisgICAgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUo
KTsKK30KKworc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAorICAgIEV4ZWNTdGF0
ZSogZXhlYywKKyAgICBKU1ZhbHVlLAorICAgIGNvbnN0IElkZW50aWZpZXImLAorICAgIGNvbnN0
IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
CisgICAgUHV0S2luZCBwdXRLaW5kLAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAorICAgIFN0
cnVjdHVyZSogb2xkU3RydWN0dXJlLAorICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFp
biwKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBmYWlsdXJlTGFiZWwsCisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmJiBzdHViUm91dGluZSkKK3sKKyAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEg
PSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworCisgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2Fz
dDxHUFJSZWc+KHN0dWJJbmZvLmJhc2VHUFIpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAg
R1BSUmVnIHZhbHVlVGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby52YWx1ZVRh
Z0dQUik7CisjZW5kaWYKKyAgICBHUFJSZWcgdmFsdWVHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+
KHN0dWJJbmZvLnZhbHVlR1BSKTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHN0YXRpY19jYXN0
PEdQUlJlZz4oc3R1YkluZm8uc2NyYXRjaEdQUik7CisgICAgYm9vbCBuZWVkVG9SZXN0b3JlU2Ny
YXRjaCA9IGZhbHNlOworICAgICAgICAgICAgCisgICAgQVNTRVJUKHNjcmF0Y2hHUFIgIT0gYmFz
ZUdQUik7CisgICAgICAgICAgICAKKyAgICBNYWNyb0Fzc2VtYmxlciBzdHViSml0OworICAgICAg
ICAgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKKyAgICAg
ICAgICAgIAorICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAg
c2NyYXRjaEdQUiA9IFNwZWN1bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHZh
bHVlR1BSKTsKKyAgICAgICAgc3R1YkppdC5wdXNoKHNjcmF0Y2hHUFIpOworICAgICAgICBuZWVk
VG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7CisgICAgfQorICAgIAorICAgIGZhaWx1cmVDYXNlcy5h
cHBlbmQoc3R1YkppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIob2xkU3RydWN0dXJlKSkpOworICAgICAgICAgICAg
CisgICAgdGVzdFByb3RvdHlwZShzdHViSml0LCBzY3JhdGNoR1BSLCBvbGRTdHJ1Y3R1cmUtPnN0
b3JlZFByb3RvdHlwZSgpLCBmYWlsdXJlQ2FzZXMpOworICAgICAgICAgICAgCisgICAgaWYgKHB1
dEtpbmQgPT0gTm90RGlyZWN0KSB7CisgICAgICAgIGZvciAoV3JpdGVCYXJyaWVyPFN0cnVjdHVy
ZT4qIGl0ID0gcHJvdG90eXBlQ2hhaW4tPmhlYWQoKTsgKml0OyArK2l0KQorICAgICAgICAgICAg
dGVzdFByb3RvdHlwZShzdHViSml0LCBzY3JhdGNoR1BSLCAoKml0KS0+c3RvcmVkUHJvdG90eXBl
KCksIGZhaWx1cmVDYXNlcyk7CisgICAgfQorCisjaWYgRU5BQkxFKEdHQykgfHwgRU5BQkxFKFdS
SVRFX0JBUlJJRVJfUFJPRklMSU5HKQorICAgIC8vIE11c3QgYWx3YXlzIGVtaXQgdGhpcyB3cml0
ZSBiYXJyaWVyIGFzIHRoZSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiBpdHNlbGYgcmVxdWlyZXMgaXQK
KyAgICBHUFJSZWcgc2NyYXRjaDIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihi
YXNlR1BSLCB2YWx1ZUdQUiwgc2NyYXRjaEdQUik7CisgICAgc3R1YkppdC5wdXNoKHNjcmF0Y2gy
KTsKKyAgICBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKHN0dWJKaXQsIGJhc2VHUFIsIHNj
cmF0Y2hHUFIsIHNjcmF0Y2gyLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7CisgICAg
c3R1YkppdC5wb3Aoc2NyYXRjaDIpOworI2VuZGlmCisKKyAgICBzdHViSml0LnN0b3JlUHRyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpKTsKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgIGlmIChzdHJ1Y3R1cmUtPmlzVXNpbmdJbmxpbmVTdG9yYWdlKCkpCisgICAg
ICAgIHN0dWJKaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIHNsb3QuY2FjaGVkT2Zm
c2V0KCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgc3R1YkppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRP
ZlByb3BlcnR5U3RvcmFnZSgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0dWJKaXQuc3RvcmVQ
dHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIHNsb3QuY2Fj
aGVkT2Zmc2V0KCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICB9CisjZWxpZiBVU0UoSlNWQUxV
RTMyXzY0KQorICAgIGlmIChzdHJ1Y3R1cmUtPmlzVXNpbmdJbmxpbmVTdG9yYWdlKCkpIHsKKyAg
ICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBzbG90LmNhY2hlZE9m
ZnNldCgpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFs
dWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZz
ZXRPZklubGluZVN0b3JhZ2UoKSArIHNsb3QuY2FjaGVkT2Zmc2V0KCkgKiBzaXplb2YoSlNWYWx1
ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykp
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBzbG90LmNhY2hlZE9mZnNldCgpICogc2l6ZW9mKEpT
VmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5w
YXlsb2FkKSkpOworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIHNsb3QuY2FjaGVkT2Zmc2V0KCkgKiBzaXplb2Yo
SlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRz
LnRhZykpKTsKKyAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIAorICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIHN1Y2Nlc3M7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbHVyZTsKKyAgICAg
ICAgICAgIAorICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkgeworICAgICAgICBzdHViSml0
LnBvcChzY3JhdGNoR1BSKTsKKyAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOworCisg
ICAgICAgIGZhaWx1cmVDYXNlcy5saW5rKCZzdHViSml0KTsKKyAgICAgICAgc3R1YkppdC5wb3Ao
c2NyYXRjaEdQUik7CisgICAgICAgIGZhaWx1cmUgPSBzdHViSml0Lmp1bXAoKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOworICAgICAgICAgICAgCisgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQsIGV4ZWMtPmNvZGVC
bG9jaygpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvRG9uZSkpOworICAg
IGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWls
dXJlLCBmYWlsdXJlTGFiZWwpOworICAgIGVsc2UKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhm
YWlsdXJlQ2FzZXMsIGZhaWx1cmVMYWJlbCk7CisgICAgICAgICAgICAKKyAgICBzdHViUm91dGlu
ZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOworfQorCitzdGF0aWMgYm9vbCB0cnlDYWNo
ZVB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCiB7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBleGVjLT5jb2RlQmxvY2soKTsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAm
ZXhlYy0+Z2xvYmFsRGF0YSgpOwpAQCAtNTQ1LDk5ICs3MzgsMjYgQEAgc3RhdGljIGJvb2wgdHJ5
Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZQogICAgICAgICAgICAgCiAgICAgICAgICAgICBTdHJ1
Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4
ZWMpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19j
YXN0PEdQUlJlZz4oc3R1YkluZm8uYmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAg
ICAgICAgICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1Yklu
Zm8udmFsdWVUYWdHUFIpOwotI2VuZGlmCi0gICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSBz
dGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnZhbHVlR1BSKTsKLSAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5zY3JhdGNoR1BSKTsK
LSAgICAgICAgICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxzZTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIgIT0gYmFzZUdQUik7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyIHN0dWJKaXQ7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcpIHsK
LSAgICAgICAgICAgICAgICBzY3JhdGNoR1BSID0gU3BlY3VsYXRpdmVKSVQ6OnNlbGVjdFNjcmF0
Y2hHUFIoYmFzZUdQUiwgdmFsdWVHUFIpOwotICAgICAgICAgICAgICAgIHN0dWJKaXQucHVzaChz
Y3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZhaWx1cmVDYXNlcy5h
cHBlbmQoc3R1YkppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIob2xkU3RydWN0dXJlKSkpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICB0ZXN0UHJvdG90eXBlKHN0dWJKaXQsIHNjcmF0Y2hHUFIsIG9sZFN0cnVj
dHVyZS0+c3RvcmVkUHJvdG90eXBlKCksIGZhaWx1cmVDYXNlcyk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmIChwdXRLaW5kID09IE5vdERpcmVjdCkgewotICAgICAgICAgICAgICAgIGZv
ciAoV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gcHJvdG90eXBlQ2hhaW4tPmhlYWQoKTsg
Kml0OyArK2l0KQotICAgICAgICAgICAgICAgICAgICB0ZXN0UHJvdG90eXBlKHN0dWJKaXQsIHNj
cmF0Y2hHUFIsICgqaXQpLT5zdG9yZWRQcm90b3R5cGUoKSwgZmFpbHVyZUNhc2VzKTsKLSAgICAg
ICAgICAgIH0KLQotI2lmIEVOQUJMRShHR0MpIHx8IEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJ
TElORykKLSAgICAgICAgICAgIC8vIE11c3QgYWx3YXlzIGVtaXQgdGhpcyB3cml0ZSBiYXJyaWVy
IGFzIHRoZSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiBpdHNlbGYgcmVxdWlyZXMgaXQKLSAgICAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoMiA9IFNwZWN1bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNoR1BSKGJh
c2VHUFIsIHZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIHN0dWJKaXQucHVzaChz
Y3JhdGNoMik7Ci0gICAgICAgICAgICBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKHN0dWJK
aXQsIGJhc2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0
eUFjY2Vzcyk7Ci0gICAgICAgICAgICBzdHViSml0LnBvcChzY3JhdGNoMik7Ci0jZW5kaWYKLQot
ICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihzdHJ1Y3R1cmUpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIGlmIChz
dHJ1Y3R1cmUtPmlzVXNpbmdJbmxpbmVTdG9yYWdlKCkpCi0gICAgICAgICAgICAgICAgc3R1Ykpp
dC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNP
YmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgc2xvdC5jYWNoZWRPZmZzZXQoKSAqIHNp
emVvZihKU1ZhbHVlKSkpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3R1
YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpv
ZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAg
c3R1YkppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgc2xvdC5jYWNoZWRPZmZzZXQoKSAqIHNpemVvZihKU1ZhbHVlKSkpOwotICAgICAgICAg
ICAgfQotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUt
PmlzVXNpbmdJbmxpbmVTdG9yYWdlKCkpIHsKLSAgICAgICAgICAgICAgICBzdHViSml0LnN0b3Jl
MzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpv
ZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIHNsb3QuY2FjaGVkT2Zmc2V0KCkgKiBzaXplb2YoSlNW
YWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBh
eWxvYWQpKSk7Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dG9yYWdlKCkgKyBzbG90LmNhY2hlZE9mZnNldCgpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2Uo
KSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgc2xvdC5jYWNoZWRPZmZzZXQo
KSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgICAgICAgICBzdHViSml0LnN0b3JlMzIo
dmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIHNsb3QuY2Fj
aGVkT2Zmc2V0KCkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZgotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzOwotICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbHVyZTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3JhdGNoKSB7Ci0gICAgICAgICAgICAgICAgc3R1
YkppdC5wb3Aoc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQu
anVtcCgpOwotCi0gICAgICAgICAgICAgICAgZmFpbHVyZUNhc2VzLmxpbmsoJnN0dWJKaXQpOwot
ICAgICAgICAgICAgICAgIHN0dWJKaXQucG9wKHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAg
IGZhaWx1cmUgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQsIGNvZGVCbG9j
ayk7Ci0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvRG9uZSkpOwot
ICAgICAgICAgICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3JhdGNoKQotICAgICAgICAgICAgICAgIHBh
dGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzLCBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1Ns
b3dDYXNlKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5l
ID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CisgICAgICAgICAgICBlbWl0UHV0VHJhbnNp
dGlvblN0dWIoCisgICAgICAgICAgICAgICAgZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwg
c3R1YkluZm8sIHB1dEtpbmQsCisgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBvbGRTdHJ1Y3R1
cmUsIHByb3RvdHlwZUNoYWluLAorICAgICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpLAorICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAgICAgICAgICAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0
T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJl
bChzdHViSW5mby5zdHViUm91dGluZS5jb2RlKCkpKTsKLSAgICAgICAgICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVQdXRCeUlk
RnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOworICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1
dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IHN0dWJJbmZvLmluaXRQdXRCeUlkVHJhbnNpdGlvbigqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWlu
LCBwdXRLaW5kID09IERpcmVjdCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgZGZnUmVwYXRjaEJ5SWRTZWxmQWNjZXNzKGNvZGVC
bG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgYXBwcm9wcmlh
dGVQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCksIGZhbHNlKTsKKyAgICAgICAgZGZnUmVw
YXRjaEJ5SWRTZWxmQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5j
YWNoZWRPZmZzZXQoKSwgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xv
dCwgcHV0S2luZCksIGZhbHNlKTsKICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRSZXBsYWNl
KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogc2hvdWxkIHN1cHBv
cnQgdGhlIHRyYW5zaXRpb24gY2FzZSEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTY0NSw3
ICs3NjUsOTEgQEAgdm9pZCBkZmdSZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIAogewog
ICAgIGJvb2wgY2FjaGVkID0gdHJ5Q2FjaGVQdXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVy
dHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCk7CiAgICAgaWYgKCFjYWNoZWQpCi0gICAg
ICAgIGRmZ1JlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24sIGFwcHJvcHJpYXRlUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKKyAg
ICAgICAgZGZnUmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwg
cHV0S2luZCkpOworfQorCitzdGF0aWMgYm9vbCB0cnlCdWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sIFB1dEtpbmQgcHV0S2luZCkKK3sKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMt
PmNvZGVCbG9jaygpOworICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9i
YWxEYXRhKCk7CisKKyAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CisgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCk7CisgICAgU3RydWN0
dXJlKiBvbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKTsKKyAgICAKKyAgICBp
ZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChz
dHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgorICAgIGlmIChzbG90LmJhc2UoKSA9
PSBiYXNlVmFsdWUpIHsKKyAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdDsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJSb3V0aW5lOworICAgICAgICAKKyAgICAg
ICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpIHsKKyAg
ICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gc2tpcCBvcHRpbWl6
aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgYSByZWFsbG9jCisgICAgICAgICAgICBpZiAob2xk
U3RydWN0dXJlLT5wcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpICE9IHN0cnVjdHVyZS0+cHJvcGVy
dHlTdG9yYWdlQ2FwYWNpdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIGJhc2VD
ZWxsKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlw
ZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgLy8gV2UncmUgbm93IGNvbW1pdHRlZCB0byBjcmVhdGluZyB0aGUgc3R1Yi4g
TW9ncmlmeSB0aGUgbWV0YS1kYXRhIGFjY29yZGluZ2x5LgorICAgICAgICAgICAgbGlzdCA9IFBv
bHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20oCisgICAgICAgICAgICAgICAgcHV0S2luZCwgc3R1
YkluZm8sCisgICAgICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TbG93Q2FzZSkpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCisgICAgICAgICAgICAgICAgZXhlYywg
YmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kLAorICAgICAg
ICAgICAgICAgIHN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwKKyAgICAg
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQo
KSksCisgICAgICAgICAgICAgICAgc3R1YlJvdXRpbmUpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBsaXN0LT5hZGRBY2Nlc3MoCisgICAgICAgICAgICAgICAgUHV0QnlJZEFjY2Vzczo6dHJh
bnNpdGlvbigKKyAgICAgICAgICAgICAgICAgICAgKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksCisgICAgICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZSwgc3RydWN0
dXJlLCBwcm90b3R5cGVDaGFpbiwKKyAgICAgICAgICAgICAgICAgICAgc3R1YlJvdXRpbmUpKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdlJ3JlIG5vdyBjb21taXR0ZWQgdG8g
Y3JlYXRpbmcgdGhlIHN0dWIuIE1vZ3JpZnkgdGhlIG1ldGEtZGF0YSBhY2NvcmRpbmdseS4KKyAg
ICAgICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9tKAorICAgICAgICAg
ICAgICAgIHB1dEtpbmQsIHN0dWJJbmZvLAorICAgICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU2xvd0Nhc2Up
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZW1pdFB1dFJlcGxhY2VTdHViKAorICAgICAg
ICAgICAgICAgIGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywg
cHV0S2luZCwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIENvZGVMb2NhdGlvbkxhYmVsKGxp
c3QtPmN1cnJlbnRTbG93UGF0aFRhcmdldCgpKSwgc3R1YlJvdXRpbmUpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoCisgICAgICAgICAgICAgICAgUHV0QnlJZEFj
Y2Vzczo6cmVwbGFjZSgKKyAgICAgICAgICAgICAgICAgICAgKmdsb2JhbERhdGEsIGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgc3R1
YlJvdXRpbmUpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUmVwYXRjaEJ1ZmZlciBy
ZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxs
VG9TdHJ1Y3RDaGVjayksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUoKSkpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKGxpc3QtPmlzRnVsbCgpKQorICAgICAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdl
bmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOworICAgICAgICAKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBk
ZmdCdWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKK3sKKyAgICBi
b29sIGNhY2hlZCA9IHRyeUJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0
eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKTsKKyAgICBpZiAoIWNhY2hlZCkKKyAgICAg
ICAgZGZnUmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQp
KTsKIH0KIAogdm9pZCBkZmdMaW5rRm9yKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbmZvJiBj
YWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCBKU0Z1bmN0aW9uKiBjYWxs
ZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IGtpbmQpCkBAIC02ODcsMTQgKzg5MSwxNCBAQCB2b2lkIGRmZ1Jlc2V0UHV0QnlJRChSZXBhdGNo
QnVmZmVyJiByZXBhCiB7CiAgICAgVl9ERkdPcGVyYXRpb25fRUpDSSB1bm9wdGltaXplZEZ1bmN0
aW9uID0gYml0d2lzZV9jYXN0PFZfREZHT3BlcmF0aW9uX0VKQ0k+KE1hY3JvQXNzZW1ibGVyOjpy
ZWFkQ2FsbFRhcmdldChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24pLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpOwogICAgIFZfREZHT3BlcmF0aW9uX0VKQ0kgb3B0aW1pemVkRnVuY3Rpb247Ci0gICAg
aWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCkKKyAgICBp
ZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0IHx8IHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxkTGlzdCkKICAgICAg
ICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7Ci0g
ICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3Ry
aWN0KQorICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJ
ZE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25T
dHJpY3RCdWlsZExpc3QpCiAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0
QnlJZE5vblN0cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCkKKyAgICBlbHNlIGlmICh1bm9wdGltaXpl
ZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QgfHwgdW5vcHRpbWl6ZWRG
dW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRMaXN0KQogICAgICAg
ICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6
ZTsKICAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCk7CisgICAgICAgIEFTU0VSVCh1bm9wdGltaXpl
ZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QgfHwgdW5vcHRpbWl6
ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0KTsK
ICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3Ry
aWN0T3B0aW1pemU7CiAgICAgfQogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbiwgb3B0aW1pemVkRnVuY3Rpb24pOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdSZXBhdGNoLmgJKHJldmlzaW9uIDEwNjc3NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMCArMjYs
MTIgQEAKICNpZm5kZWYgREZHUmVwYXRjaF9oCiAjZGVmaW5lIERGR1JlcGF0Y2hfaAogCisjaW5j
bHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotI2luY2x1ZGUg
PGRmZy9ERkdKSVRDb21waWxlci5oPgotI2luY2x1ZGUgPGRmZy9ERkdPcGVyYXRpb25zLmg+Cisj
aW5jbHVkZSAiREZHSklUQ29tcGlsZXIuaCIKKyNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtMzcsNiArMzksNyBAQCB2b2lk
IGRmZ1JlcGF0Y2hHZXRCeUlEKEV4ZWNTdGF0ZSosIEpTVmFsCiB2b2lkIGRmZ0J1aWxkR2V0QnlJ
RExpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIGRmZ0J1aWxkR2V0QnlJRFByb3Rv
TGlzdChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVy
dHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgZGZnUmVwYXRjaFB1dEJ5SUQoRXhl
Y1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFB1dFByb3BlcnR5U2xv
dCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2luZCk7Cit2b2lkIGRmZ0J1aWxkUHV0QnlJZExp
c3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFB1dFByb3Bl
cnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2luZCk7CiB2b2lkIGRmZ0xpbmtGb3Io
RXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgSlNGdW5jdGlvbiogY2FsbGVl
LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogdm9pZCBk
ZmdSZXNldEdldEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lk
IGRmZ1Jlc2V0UHV0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dyaXRlQmFycmllci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dyaXRlQmFycmllci5oCShyZXZp
c2lvbiAxMDY3NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Xcml0ZUJhcnJp
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsMTMgQEAgcHVibGljOgogICAgICAgICB2
YWxpZGF0ZUNlbGwodmFsdWUpOwogICAgICAgICBzZXRFYXJseVZhbHVlKGdsb2JhbERhdGEsIG93
bmVyLCB2YWx1ZSk7CiAgICAgfQorICAgIAorICAgIC8vIFRoaXMgaXMgbWVhbnQgdG8gYmUgdXNl
ZCBsaWtlIG9wZXJhdG9yPSwgYnV0IGlzIGNhbGxlZCBjb3B5RnJvbSBpbnN0ZWFkLCBpbgorICAg
IC8vIG9yZGVyIHRvIGtpbmRseSBpbmZvcm0gdGhlIEMrKyBjb21waWxlciB0aGF0IGl0cyBhZHZp
Y2UgaXMgbm90IGFwcHJlY2lhdGVkLgorICAgIHZvaWQgY29weUZyb20oY29uc3QgV3JpdGVCYXJy
aWVyQmFzZTxUPiYgb3RoZXIpCisgICAgeworICAgICAgICBtX2NlbGwgPSBvdGhlci5tX2NlbGw7
CisgICAgfQogCiAgICAgdm9pZCBzZXRNYXlCZU51bGwoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBjb25zdCBKU0NlbGwqIG93bmVyLCBUKiB2YWx1ZSkKICAgICB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125979</attachid>
            <date>2012-02-07 18:37:46 -0800</date>
            <delta_ts>2012-02-10 09:58:34 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>polyputbyid_patch_3.diff</filename>
            <type>text/plain</type>
            <size>58363</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA3MDIyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk2IEBA
CisyMDEyLTAyLTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBoYXZlIHBvbHltb3JwaGljIHB1dF9ieV9pZCBjYWNoaW5nCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODA2MgorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMTAzMjY0Mzk+IDxyZGFyOi8vcHJvYmxlbS8xMDgyNDgzOT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEltcGxlbWVu
dGVkIHBvbHltb3JwaGljIHB1dF9ieV9pZCBjYWNoaW5nIGluIHRoZSBERkcsIGFuZCBhZGRlZCBt
dWNoIG9mIHRoZQorICAgICAgICBtYWNoaW5lcnkgdGhhdCB3b3VsZCBiZSBuZWVkZWQgdG8gaW1w
bGVtZW50IGl0IGluIHRoZSBvbGQgSklUIGFzIHdlbGwuCisgICAgICAgIAorICAgICAgICBJIGRl
Y2lkZWQgYWdhaW5zdCB1c2luZyB0aGUgb2xkIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlz
dCBtZWNoYW5pc20gYXMKKyAgICAgICAgdGhpcyBkaWRuJ3QgcXVpdGUgZml0IHdpdGggcHV0X2J5
X2lkLiBJbiBwYXJ0aWN1bGFyLCBJIHdhbnRlZCB0aGUgYWJpbGl0eSB0bworICAgICAgICBoYXZl
IG9uZSBsaXN0IHRoYXQgY2FwdHVyZWQgYWxsIHJlbGV2YW50IGNhc2VzIChpbmNsdWRpbmcgcHJv
dG8gcHV0X2J5X2lkCisgICAgICAgIGlmIHdlIGV2ZXIgZGVjaWRlZCB0byBkbyBpdCkuIEFuZCBJ
IHdhbnRlZCB0aGUgY29kZSB0byBoYXZlIGJldHRlcgorICAgICAgICBlbmNhcHN1bGF0aW9uLiBB
bmQgSSBkaWRuJ3Qgd2FudCB0byBnZXQgY29uZnVzZWQgYnkgdGhlIGZhY3QgdGhhdCB0aGUKKyAg
ICAgICAgb3JpZ2luYWwgKG5vbi1saXN0KSBwdXRfYnlfaWQgY2FjaGUgbWF5IGl0c2VsZiBjb25z
aXN0IG9mIGEgc3R1YiByb3V0aW5lLgorICAgICAgICAKKyAgICAgICAgVGhpcyBjb2RlIGlzIHN0
aWxsIHN1Yi1vcHRpbWFsIChmb3IgZXhhbXBsZSBhZGRpbmcgYSByZXBsYWNlIHRvIGEgbGlzdCB3
aG9zZQorICAgICAgICBwcmV2aW91cyBlbGVtZW50cyBhcmUgYWxsIHRyYW5zaXRpb25zIHNob3Vs
ZCBqdXN0IHJlcGF0Y2ggdGhlIG9yaWdpbmFsIGNvZGUsCisgICAgICAgIGJ1dCBoZXJlIGl0IHdp
bGwgZ2VuZXJhdGUgYSBzdHViKSBidXQgaXQgYWxyZWFkeSBnZW5lcmF0ZXMgYSA+MjAlIHNwZWVk
LXVwCisgICAgICAgIG9uIFY4LXNwbGF5LCBsZWFkaW5nIHRvIGEgMiUgd2luIG92ZXJhbGwgaW4g
c3BsYXkuIE5ldXRyYWwgZWxzZXdoZXJlLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52
Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGFyZ2V0
LnByaToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNzOjpmcm9tU3Ry
dWN0dXJlU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNzOjp2aXNpdFdlYWsp
OgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0OjpQb2x5bW9ycGhpY1B1dEJ5
SWRMaXN0KToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6ZnJvbSk6Cisg
ICAgICAgIChKU0M6OlBvbHltb3JwaGljUHV0QnlJZExpc3Q6On5Qb2x5bW9ycGhpY1B1dEJ5SWRM
aXN0KToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6aXNGdWxsKToKKyAg
ICAgICAgKEpTQzo6UG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6aXNBbG1vc3RGdWxsKToKKyAgICAg
ICAgKEpTQzo6UG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6YWRkQWNjZXNzKToKKyAgICAgICAgKEpT
Qzo6UG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6dmlzaXRXZWFrKToKKyAgICAgICAgKiBieXRlY29k
ZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAg
ICAgKFB1dEJ5SWRBY2Nlc3MpOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNzOjpQdXRCeUlk
QWNjZXNzKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6dHJhbnNpdGlvbik6CisgICAg
ICAgIChKU0M6OlB1dEJ5SWRBY2Nlc3M6OnJlcGxhY2UpOgorICAgICAgICAoSlNDOjpQdXRCeUlk
QWNjZXNzOjppc1NldCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRBY2Nlc3M6Om9wZXJhdG9yISk6
CisgICAgICAgIChKU0M6OlB1dEJ5SWRBY2Nlc3M6OnR5cGUpOgorICAgICAgICAoSlNDOjpQdXRC
eUlkQWNjZXNzOjppc1RyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNzOjpp
c1JlcGxhY2UpOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNzOjpvbGRTdHJ1Y3R1cmUpOgor
ICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNzOjpzdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpQ
dXRCeUlkQWNjZXNzOjpuZXdTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNjZXNz
OjpjaGFpbik6CisgICAgICAgIChKU0M6OlB1dEJ5SWRBY2Nlc3M6OnN0dWJSb3V0aW5lKToKKyAg
ICAgICAgKFBvbHltb3JwaGljUHV0QnlJZExpc3QpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhp
Y1B1dEJ5SWRMaXN0OjpjdXJyZW50U2xvd1BhdGhUYXJnZXQpOgorICAgICAgICAoSlNDOjpQb2x5
bW9ycGhpY1B1dEJ5SWRMaXN0Ojppc0VtcHR5KToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNQ
dXRCeUlkTGlzdDo6c2l6ZSk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljUHV0QnlJZExpc3Q6
OmF0KToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6b3BlcmF0b3JbXSk6
CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmtpbmQpOgorICAgICAgICAq
IGJ5dGVjb2RlL1B1dEtpbmQuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAqIGJ5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1
YkluZm86OmRlcmVmKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vh
a1JlZmVyZW5jZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6Cisg
ICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjppc1B1dEJ5SWRBY2Nlc3MpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdFB1dEJ5SWRMaXN0KToKKyAgICAgICAgKFN0cnVj
dHVyZVN0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnJlc2V0KToK
KyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJh
dGlvbnMuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR1JlcGF0Y2guY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OmFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbik6Cisg
ICAgICAgIChKU0M6OkRGRzo6YXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24p
OgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjplbWl0UHV0UmVwbGFjZVN0dWIp
OgorICAgICAgICAoSlNDOjpERkc6OmVtaXRQdXRUcmFuc2l0aW9uU3R1Yik6CisgICAgICAgIChK
U0M6OkRGRzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAgICAgICAgKEpTQzo6REZHOjpkZmdSZXBhdGNo
UHV0QnlJRCk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5QnVpbGRQdXRCeUlkTGlzdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6ZGZnQnVpbGRQdXRCeUlkTGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6
ZGZnUmVzZXRQdXRCeUlEKToKKyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5oOgorICAgICAgICAo
REZHKToKKyAgICAgICAgKiBydW50aW1lL1dyaXRlQmFycmllci5oOgorICAgICAgICAoV3JpdGVC
YXJyaWVyQmFzZSk6CisgICAgICAgIChKU0M6OldyaXRlQmFycmllckJhc2U6OmNvcHlGcm9tKToK
KwogMjAxMi0wMi0wNyAgR3l1eW91bmcgS2ltICA8Z3l1eW91bmcua2ltQHNhbXN1bmcuY29tPgog
CiAgICAgICAgIFtDTUFLRV0gVXNlICpiaW4qIGFuZCAqbGliKiBkaXJlY3RvcmllcyBmb3IgZXhl
Y3V0YWJsZSBhbmQgbGlicmFyaWVzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAkocmV2aXNpb24gMTA2Nzc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBAIFNFVChKYXZhU2NyaXB0Q29y
ZV9TT1VSQ0VTCiAgICAgYnl0ZWNvZGUvTWV0aG9kQ2FsbExpbmtJbmZvLmNwcAogICAgIGJ5dGVj
b2RlL01ldGhvZENhbGxMaW5rU3RhdHVzLmNwcAogICAgIGJ5dGVjb2RlL09wY29kZS5jcHAKKyAg
ICBieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAogICAgIGJ5dGVjb2RlL1ByZWRp
Y3RlZFR5cGUuY3BwCiAgICAgYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKICAgICBieXRlY29k
ZS9TYW1wbGluZ1Rvb2wuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQkocmV2aXNpb24gMTA2Nzc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTEwOSwxMSArMTA5LDE0IEBAIGph
dmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9NZXRob2RDYWxsTGlua1N0YXR1cy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3Bjb2RlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5o
IFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlz
dC5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5
SWRMaXN0LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBl
LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3Rpb25UcmFja2VyLmggXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaCBcCisJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEtpbmQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TYW1wbGluZ1Rvb2wuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVNldC5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZpc2lvbiAx
MDY3NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5
KQpAQCAtNTgsNiArNTgsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBieXRlY29kZS9NZXRob2RDYWxs
TGlua0luZm8uY3BwIFwKICAgICBieXRlY29kZS9NZXRob2RDYWxsTGlua1N0YXR1cy5jcHAgXAog
ICAgIGJ5dGVjb2RlL09wY29kZS5jcHAgXAorICAgIGJ5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJ
ZExpc3QuY3BwIFwKICAgICBieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmNwcCBcCiAgICAgYnl0ZWNv
ZGUvUHV0QnlJZFN0YXR1cy5jcHAgXAogICAgIGJ5dGVjb2RlL1NhbXBsaW5nVG9vbC5jcHAgXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3Byb2oJKHJldmlzaW9uIDEwNjc3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTg2LDYgKzE1ODYsMTAgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+
CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdC5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXGJ5dGVjb2RlXFByZWRpY3RlZFR5cGUuY3BwIgogCQkJCT4KIAkJCTwvRmls
ZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMDY3NzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiw5IEBACiAJCTBGOTYzQjJEMTNG
ODU0MDIwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IyQTEzRjg1M0JEMDAwMkQ5QjIgLyogTWV0YUFs
bG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGOTYzQjJGMTNGQzY2QkIwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IyRTEzRkM2
NkFFMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTYzQjM4MTNGQzZGRTkwMDAyRDlCMiAv
KiBWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjlGQzhDMzE0RTFC
NUZFMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlGQzhCRjE0RTFCNUZCMDBENTJBRTAg
LyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAgKi87IH07CisJCTBGOUZDOEM0MTRFMUI2MDAw
MEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlGQzhDMDE0RTFCNUZCMDBENTJBRTAgLyogUG9s
eW1vcnBoaWNQdXRCeUlkTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGOUZDOEM1MTRFMUI2MDQwMEQ1MkFFMCAvKiBQdXRLaW5kLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlGQzhDMTE0RTFC
NUZCMDBENTJBRTAgLyogUHV0S2luZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGQkMwQUU3MTQ5NkM3QzQwMEQ0RkJERCAvKiBERkdFeGl0UHJv
ZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkJDMEFFNDE0OTZDN0MxMDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuY3BwICovOyB9OwogCQkw
RkJDMEFFODE0OTZDN0M3MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQkMwQUU1MTQ5NkM3QzEwMEQ0RkJE
RCAvKiBERkdFeGl0UHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGQkQ3RTY5MTQ0Nzk5OTYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJEN0U2NzE0
NDc5OThGMDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04OTYsNiArODk5LDkgQEAKIAkJMEY5NjNCMkIxM0Y4
NTNDNzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTWV0YUFsbG9jYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGOTYzQjJFMTNGQzY2QUUwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1ldGFBbGxvY2F0b3JIYW5kbGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NjNCMzYxM0ZDNkZERTAwMDJEOUIyIC8q
IFZhbHVlUHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZVBy
b2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5RkM4QkYxNEUxQjVGQjAw
RDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGOUZDOEMwMTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhp
Y1B1dEJ5SWRMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvbHltb3Jw
aGljUHV0QnlJZExpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5RkM4QzEx
NEUxQjVGQjAwRDUyQUUwIC8qIFB1dEtpbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUHV0S2luZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkJDMEFFNDE0
OTZDN0MxMDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gREZHRXhpdFByb2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkJDMEFFNTE0OTZDN0MxMDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gREZHRXhpdFByb2ZpbGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCRDdFNjcxNDQ3OTk4RjAwNDgxMzE1IC8qIENvZGVP
cmlnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZU9yaWdpbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU1Myw2ICsyNTU5LDkgQEAKIAkJOTY5QTA3
OEYwRUQxRDNBRTAwRjFGNjgxIC8qIGJ5dGVjb2RlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRjlGQzhCRjE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1v
cnBoaWNQdXRCeUlkTGlzdC5jcHAgKi8sCisJCQkJMEY5RkM4QzAxNEUxQjVGQjAwRDUyQUUwIC8q
IFBvbHltb3JwaGljUHV0QnlJZExpc3QuaCAqLywKKwkJCQkwRjlGQzhDMTE0RTFCNUZCMDBENTJB
RTAgLyogUHV0S2luZC5oICovLAogCQkJCTBGOTMzMjkzMTRDQTdEQzEwMDg1RjNDNiAvKiBDYWxs
TGlua1N0YXR1cy5jcHAgKi8sCiAJCQkJMEY5MzMyOTQxNENBN0RDMTAwODVGM0M2IC8qIENhbGxM
aW5rU3RhdHVzLmggKi8sCiAJCQkJMEY5MzMyOTUxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5SWRT
dGF0dXMuY3BwICovLApAQCAtMzEyOCw2ICszMTM3LDggQEAKIAkJCQkwRjU1RjBGNTE0RDEwNjND
MDBBQzc2NDkgLyogQWJzdHJhY3RQQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NkUxNkIxNERG
M0YxNjAwQjdCMkU0IC8qIERGR05vZGVSZWZlcmVuY2VCbG9iLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjY2RTE2QzE0REYzRjE2MDBCN0IyRTQgLyogREZHTm9kZVVzZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEY5RkM4QzQxNEUxQjYwMDAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3Qu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGOUZDOEM1MTRFMUI2MDQwMEQ1MkFFMCAvKiBQdXRLaW5k
LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKQEAgLTM2NzQsNiArMzY4NSw3IEBACiAJCQkJODZCNTgyNjcxNEQy
Nzk2QzAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2QjU4
MjY5MTREMjc5NzAwMEE5QzMwNiAvKiBDb2RlUHJvZmlsaW5nLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUMyQjkxNkM1MTREQTA0MEMwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEY5RkM4QzMxNEUxQjVGRTAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0
QnlJZExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0
QnlJZExpc3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIgorCisjaW5jbHVkZSAiU3RydWN0dXJl
U3R1YkluZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1B1dEJ5SWRBY2Nlc3MgUHV0QnlJZEFj
Y2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKAorICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaW5pdGlhbFNsb3dQYXRoKQoreworICAg
IFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OworICAgIAorICAgIHN3aXRjaCAoc3R1YkluZm8uYWNjZXNz
VHlwZSkgeworICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgorICAgICAgICByZXN1
bHQubV90eXBlID0gUmVwbGFjZTsKKyAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLmNvcHlG
cm9tKHN0dWJJbmZvLnUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZSk7CisgICAg
ICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVT
ZWxmTWFuYWdlZENvZGVSZWYoaW5pdGlhbFNsb3dQYXRoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICAgIAorICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKKyAgICBj
YXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6CisgICAgICAgIHJlc3VsdC5t
X3R5cGUgPSBUcmFuc2l0aW9uOworICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuY29weUZy
b20oc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZSk7CisgICAg
ICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5mby51LnB1dEJ5SWRUcmFu
c2l0aW9uLnN0cnVjdHVyZSk7CisgICAgICAgIHJlc3VsdC5tX2NoYWluLmNvcHlGcm9tKHN0dWJJ
bmZvLnUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4pOworICAgICAgICByZXN1bHQubV9zdHViUm91
dGluZSA9IHN0dWJJbmZvLnN0dWJSb3V0aW5lOworICAgICAgICBicmVhazsKKyAgICAgICAgCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgUHV0QnlJZEFjY2Vzczo6dmlzaXRXZWFrKCkg
Y29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgUmVwbGFjZToKKyAgICAg
ICAgaWYgKCFIZWFwOjppc01hcmtlZChtX29sZFN0cnVjdHVyZS5nZXQoKSkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAg
ICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX29sZFN0cnVjdHVyZS5nZXQoKSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9uZXdTdHJ1
Y3R1cmUuZ2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIUhl
YXA6OmlzTWFya2VkKG1fY2hhaW4uZ2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
UG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6UG9seW1vcnBoaWNQdXRCeUlkTGlzdCgKKyAgICBQdXRL
aW5kIHB1dEtpbmQsCisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBpbml0aWFsU2xvd1BhdGgpCisgICAgOiBtX2tpbmQocHV0S2luZCkK
K3sKKyAgICBtX2xpc3QuYXBwZW5kKFB1dEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5m
byhzdHViSW5mbywgaW5pdGlhbFNsb3dQYXRoKSk7Cit9CisKK1BvbHltb3JwaGljUHV0QnlJZExp
c3QqIFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20oCisgICAgUHV0S2luZCBwdXRLaW5kLAor
ICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgaW5pdGlhbFNsb3dQYXRoKQoreworICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFj
Y2Vzc19wdXRfYnlfaWRfbGlzdCkKKyAgICAgICAgcmV0dXJuIHN0dWJJbmZvLnUucHV0QnlJZExp
c3QubGlzdDsKKyAgICAKKyAgICBBU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3Nf
cHV0X2J5X2lkX3JlcGxhY2UKKyAgICAgICAgICAgfHwgc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBh
Y2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsCisgICAgICAgICAgIHx8IHN0dWJJbmZv
LmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdCk7CisgICAg
CisgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogcmVzdWx0ID0KKyAgICAgICAgbmV3IFBvbHlt
b3JwaGljUHV0QnlJZExpc3QocHV0S2luZCwgc3R1YkluZm8sIGluaXRpYWxTbG93UGF0aCk7Cisg
ICAgCisgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRMaXN0KHJlc3VsdCk7CisgICAgCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6flBvbHltb3JwaGljUHV0
QnlJZExpc3QoKSB7IH0KKworYm9vbCBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojppc0Z1bGwoKSBj
b25zdAoreworICAgIEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpF
KTsKKyAgICByZXR1cm4gc2l6ZSgpID09IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRTsKK30K
KworYm9vbCBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojppc0FsbW9zdEZ1bGwoKSBjb25zdAorewor
ICAgIEFTU0VSVChzaXplKCkgPD0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKTsKKyAgICBy
ZXR1cm4gc2l6ZSgpID49IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDE7Cit9CisKK3Zv
aWQgUG9seW1vcnBoaWNQdXRCeUlkTGlzdDo6YWRkQWNjZXNzKGNvbnN0IFB1dEJ5SWRBY2Nlc3Mm
IHB1dEJ5SWRBY2Nlc3MpCit7CisgICAgQVNTRVJUKCFpc0Z1bGwoKSk7CisgICAgLy8gTWFrZSBz
dXJlIHRoYXQgdGhlIHJlc2l6aW5nIG9wdGltaXplcyBmb3Igc3BhY2UsIG5vdCB0aW1lLgorICAg
IG1fbGlzdC5yZXNpemUobV9saXN0LnNpemUoKSArIDEpOworICAgIG1fbGlzdC5sYXN0KCkgPSBw
dXRCeUlkQWNjZXNzOworfQorCitib29sIFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OnZpc2l0V2Vh
aygpIGNvbnN0Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7
CisgICAgICAgIGlmICghYXQoaSkudmlzaXRXZWFrKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExp
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNQdXRCeUlkTGlzdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0X2gKKyNkZWZpbmUgUG9seW1vcnBoaWNQdXRC
eUlkTGlzdF9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShKSVQp
CisKKyNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIK
KyNpbmNsdWRlICJPcGNvZGUuaCIKKyNpbmNsdWRlICJQdXRLaW5kLmgiCisjaW5jbHVkZSAiU3Ry
dWN0dXJlLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
c3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvOworCitjbGFzcyBQdXRCeUlkQWNjZXNzIHsKK3B1Ymxp
YzoKKyAgICBlbnVtIEFjY2Vzc1R5cGUgeworICAgICAgICBJbnZhbGlkLAorICAgICAgICBUcmFu
c2l0aW9uLAorICAgICAgICBSZXBsYWNlCisgICAgfTsKKyAgICAKKyAgICBQdXRCeUlkQWNjZXNz
KCkKKyAgICAgICAgOiBtX3R5cGUoSW52YWxpZCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyBQdXRCeUlkQWNjZXNzIHRyYW5zaXRpb24oCisgICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwKKyAgICAgICAgSlNDZWxsKiBvd25lciwKKyAgICAgICAgU3RydWN0dXJlKiBvbGRT
dHJ1Y3R1cmUsCisgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAorICAgICAgICBTdHJ1
Y3R1cmVDaGFpbiogY2hhaW4sCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViUm91
dGluZSkKKyAgICB7CisgICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OworICAgICAgICByZXN1
bHQubV90eXBlID0gVHJhbnNpdGlvbjsKKyAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLnNl
dChnbG9iYWxEYXRhLCBvd25lciwgb2xkU3RydWN0dXJlKTsKKyAgICAgICAgcmVzdWx0Lm1fbmV3
U3RydWN0dXJlLnNldChnbG9iYWxEYXRhLCBvd25lciwgbmV3U3RydWN0dXJlKTsKKyAgICAgICAg
cmVzdWx0Lm1fY2hhaW4uc2V0KGdsb2JhbERhdGEsIG93bmVyLCBjaGFpbik7CisgICAgICAgIHJl
c3VsdC5tX3N0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQdXRCeUlkQWNjZXNzIHJlcGxhY2UoCisgICAgICAg
IEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwKKyAgICAgICAgSlNDZWxsKiBvd25lciwKKyAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBz
dHViUm91dGluZSkKKyAgICB7CisgICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OworICAgICAg
ICByZXN1bHQubV90eXBlID0gUmVwbGFjZTsKKyAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJl
LnNldChnbG9iYWxEYXRhLCBvd25lciwgc3RydWN0dXJlKTsKKyAgICAgICAgcmVzdWx0Lm1fc3R1
YlJvdXRpbmUgPSBzdHViUm91dGluZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgCisgICAgc3RhdGljIFB1dEJ5SWRBY2Nlc3MgZnJvbVN0cnVjdHVyZVN0dWJJbmZvKAorICAg
ICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYsCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBp
bml0aWFsU2xvd1BhdGgpOworICAgIAorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBt
X3R5cGUgIT0gSW52YWxpZDsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4g
IWlzU2V0KCk7IH0KKyAgICAKKyAgICBBY2Nlc3NUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBt
X3R5cGU7IH0KKyAgICAKKyAgICBib29sIGlzVHJhbnNpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
dHlwZSA9PSBUcmFuc2l0aW9uOyB9CisgICAgYm9vbCBpc1JlcGxhY2UoKSBjb25zdCB7IHJldHVy
biBtX3R5cGUgPT0gUmVwbGFjZTsgfQorICAgIAorICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIFVzaW5nIHRoaXMgaW5zdGVhZCBvZiBpc1NldCgp
IHRvIG1ha2UgdGhpcyBhc3NlcnRpb24gcm9idXN0IGFnYWluc3QgdGhlIHBvc3NpYmlsaXR5Cisg
ICAgICAgIC8vIG9mIGFkZGl0aW9uYWwgYWNjZXNzIHR5cGVzIGJlaW5nIGFkZGVkLgorICAgICAg
ICBBU1NFUlQoaXNUcmFuc2l0aW9uKCkgfHwgaXNSZXBsYWNlKCkpOworICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlLmdldCgpOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNSZXBsYWNlKCkp
OworICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgfQorICAgIAorICAg
IFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChp
c1RyYW5zaXRpb24oKSk7CisgICAgICAgIHJldHVybiBtX25ld1N0cnVjdHVyZS5nZXQoKTsKKyAg
ICB9CisgICAgCisgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChpc1RyYW5zaXRpb24oKSk7CisgICAgICAgIHJldHVybiBtX2NoYWluLmdldCgp
OworICAgIH0KKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YlJvdXRpbmUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzVHJhbnNpdGlvbigpIHx8IGlzUmVwbGFjZSgp
KTsKKyAgICAgICAgcmV0dXJuIG1fc3R1YlJvdXRpbmU7CisgICAgfQorICAgIAorICAgIGJvb2wg
dmlzaXRXZWFrKCkgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIEFjY2Vzc1R5cGUgbV90eXBl
OworICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fb2xkU3RydWN0dXJlOworICAgIFdyaXRl
QmFycmllcjxTdHJ1Y3R1cmU+IG1fbmV3U3RydWN0dXJlOworICAgIFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmVDaGFpbj4gbV9jaGFpbjsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbV9zdHViUm91
dGluZTsKK307CisKK2NsYXNzIFBvbHltb3JwaGljUHV0QnlJZExpc3QgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIC8vIEluaXRpYWxpemUgZnJvbSBhIHN0dWIg
aW5mbzsgdGhpcyB3aWxsIHBsYWNlIG9uZSBlbGVtZW50IGluIHRoZSBsaXN0IGFuZCBpdCB3aWxs
CisgICAgLy8gYmUgY3JlYXRlZCBieSBjb252ZXJ0aW5nIHRoZSBzdHViIGluZm8ncyBwdXQgYnkg
aWQgYWNjZXNzIGluZm9ybWF0aW9uIGludG8gb3VyCisgICAgLy8gUHV0QnlJZEFjY2Vzcy4KKyAg
ICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KAorICAgICAgICBQdXRLaW5kLAorICAgICAgICBTdHJ1
Y3R1cmVTdHViSW5mbyYsCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBpbml0aWFsU2xv
d1BhdGgpOworCisgICAgLy8gRWl0aGVyIGNyZWF0ZXMgYSBuZXcgcG9seW1vcnBoaWMgcHV0IGxp
c3QsIG9yIHJldHVybnMgdGhlIG9uZSB0aGF0IGlzIGFscmVhZHkKKyAgICAvLyBpbiBwbGFjZS4K
KyAgICBzdGF0aWMgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogZnJvbSgKKyAgICAgICAgUHV0S2lu
ZCwKKyAgICAgICAgU3RydWN0dXJlU3R1YkluZm8mLAorICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgaW5pdGlhbFNsb3dQYXRoKTsKKyAgICAKKyAgICB+UG9seW1vcnBoaWNQdXRCeUlkTGlz
dCgpOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdXJyZW50U2xvd1BhdGhUYXJn
ZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGlzdC5sYXN0KCkuc3R1YlJvdXRp
bmUoKS5jb2RlKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkQWNjZXNzKGNvbnN0IFB1dEJ5
SWRBY2Nlc3MmKTsKKyAgICAKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2xp
c3QuaXNFbXB0eSgpOyB9CisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlz
dC5zaXplKCk7IH0KKyAgICBib29sIGlzRnVsbCgpIGNvbnN0OworICAgIGJvb2wgaXNBbG1vc3RG
dWxsKCkgY29uc3Q7IC8vIFRydWUgaWYgYWRkaW5nIGFuIGVsZW1lbnQgd291bGQgbWFrZSBpc0Z1
bGwoKSB0cnVlLgorICAgIGNvbnN0IFB1dEJ5SWRBY2Nlc3MmIGF0KHVuc2lnbmVkIGkpIGNvbnN0
IHsgcmV0dXJuIG1fbGlzdFtpXTsgfQorICAgIGNvbnN0IFB1dEJ5SWRBY2Nlc3MmIG9wZXJhdG9y
W10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9saXN0W2ldOyB9CisgICAgCisgICAgUHV0
S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgCisgICAgYm9vbCB2aXNp
dFdlYWsoKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgVmVjdG9yPFB1dEJ5SWRBY2Nlc3Ms
IDI+IG1fbGlzdDsKKyAgICBQdXRLaW5kIG1fa2luZDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworI2VuZGlmIC8vIFBvbHltb3JwaGljUHV0QnlJ
ZExpc3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0S2luZC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRLaW5kLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0S2luZC5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUHV0S2luZF9oCisjZGVmaW5lIFB1dEtpbmRf
aAorCituYW1lc3BhY2UgSlNDIHsKKworZW51bSBQdXRLaW5kIHsgRGlyZWN0LCBOb3REaXJlY3Qg
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBQdXRLaW5kX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1Yklu
Zm8uY3BwCShyZXZpc2lvbiAxMDY3NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBA
CiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKIAogI2luY2x1ZGUgIkpTT2JqZWN0Lmgi
CisjaW5jbHVkZSAiUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIgogI2luY2x1ZGUgIlNjb3BlQ2hh
aW4uaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC00NSw2ICs0Niw5IEBAIHZvaWQgU3RydWN0dXJl
U3R1YkluZm86OmRlcmVmKCkKICAgICAgICAgZGVsZXRlIHBvbHltb3JwaGljU3RydWN0dXJlczsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDoK
KyAgICAgICAgZGVsZXRlIHUucHV0QnlJZExpc3QubGlzdDsKKyAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9w
cm90bzoKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfY2hhaW46CkBAIC04MiwxOCArODYsMTQg
QEAgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogICAgICAgICBicmVh
azsKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZl9saXN0OiB7CiAgICAgICAgIFBvbHlt
b3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVzID0gdS5nZXRC
eUlkU2VsZkxpc3Quc3RydWN0dXJlTGlzdDsKLSAgICAgICAgaWYgKCFwb2x5bW9ycGhpY1N0cnVj
dHVyZXMtPnZpc2l0V2Vhayh1LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZSkpIHsKLSAgICAgICAg
ICAgIGRlbGV0ZSBwb2x5bW9ycGhpY1N0cnVjdHVyZXM7CisgICAgICAgIGlmICghcG9seW1vcnBo
aWNTdHJ1Y3R1cmVzLT52aXNpdFdlYWsodS5nZXRCeUlkU2VsZkxpc3QubGlzdFNpemUpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfcHJvdG9fbGlzdDogewogICAgICAgICBQb2x5bW9y
cGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlcyA9IHUuZ2V0QnlJ
ZFByb3RvTGlzdC5zdHJ1Y3R1cmVMaXN0OwotICAgICAgICBpZiAoIXBvbHltb3JwaGljU3RydWN0
dXJlcy0+dmlzaXRXZWFrKHUuZ2V0QnlJZFNlbGZMaXN0Lmxpc3RTaXplKSkgewotICAgICAgICAg
ICAgZGVsZXRlIHBvbHltb3JwaGljU3RydWN0dXJlczsKKyAgICAgICAgaWYgKCFwb2x5bW9ycGhp
Y1N0cnVjdHVyZXMtPnZpc2l0V2Vhayh1LmdldEJ5SWRTZWxmTGlzdC5saXN0U2l6ZSkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKQEAgLTEwNyw2ICsx
MDcsMTAgQEAgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogICAgICAg
ICBpZiAoIUhlYXA6OmlzTWFya2VkKHUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVy
ZS5nZXQoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOworICAg
IGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9saXN0OgorICAgICAgICBpZiAoIXUucHV0QnlJZExpc3Qu
bGlzdC0+dmlzaXRXZWFrKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJy
ZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIC8vIFRoZSByZXN0IG9mIHRoZSBpbnN0cnVjdGlv
bnMgZG9uJ3QgcmVxdWlyZSByZWZlcmVuY2VzLCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvCiAgICAg
ICAgIC8vIGRvIGFueXRoaW5nLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDEwNjc3NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw2ICsyNiw4IEBACiAjaWZuZGVmIFN0cnVjdHVyZVN0dWJJbmZvX2gKICNkZWZp
bmUgU3RydWN0dXJlU3R1YkluZm9faAogCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKICNp
ZiBFTkFCTEUoSklUKQogCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgpAQCAtMzYsNiArMzgsOCBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAorICAgIGNsYXNzIFBvbHltb3JwaGljUHV0QnlJZExpc3Q7
CisKICAgICBlbnVtIEFjY2Vzc1R5cGUgewogICAgICAgICBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYs
CiAgICAgICAgIGFjY2Vzc19nZXRfYnlfaWRfcHJvdG8sCkBAIC00NSw2ICs0OSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsLAog
ICAgICAgICBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0LAogICAgICAgICBhY2Nl
c3NfcHV0X2J5X2lkX3JlcGxhY2UsCisgICAgICAgIGFjY2Vzc19wdXRfYnlfaWRfbGlzdCwKICAg
ICAgICAgYWNjZXNzX3Vuc2V0LAogICAgICAgICBhY2Nlc3NfZ2V0X2J5X2lkX2dlbmVyaWMsCiAg
ICAgICAgIGFjY2Vzc19wdXRfYnlfaWRfZ2VuZXJpYywKQEAgLTc1LDYgKzgwLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1h
bDoKICAgICAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OgogICAg
ICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFjZToKKyAgICAgICAgY2FzZSBhY2Nlc3Nf
cHV0X2J5X2lkX2xpc3Q6CiAgICAgICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9nZW5lcmljOgog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CkBAIC0xNDksMTAgKzE1
NSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHUucHV0QnlJZFJlcGxhY2UuYmFz
ZU9iamVjdFN0cnVjdHVyZS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIGJhc2VPYmplY3RTdHJ1Y3R1
cmUpOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICB2b2lkIGluaXRQdXRCeUlkTGlzdChQ
b2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0KQorICAgICAgICB7CisgICAgICAgICAgICBhY2Nl
c3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF9saXN0OworICAgICAgICAgICAgdS5wdXRCeUlkTGlz
dC5saXN0ID0gbGlzdDsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgdm9pZCByZXNldCgp
CiAgICAgICAgIHsKICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfdW5zZXQ7Ci0gICAg
ICAgICAgICAKKyAgICAgICAgICAgIGRlcmVmKCk7CiAgICAgICAgICAgICBzdHViUm91dGluZSA9
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpOwogICAgICAgICB9CiAKQEAgLTIyNyw2ICsyMzksOSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAg
V3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IGJhc2VPYmplY3RTdHJ1Y3R1cmU7CiAgICAgICAg
ICAgICB9IHB1dEJ5SWRSZXBsYWNlOworICAgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAg
ICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0OworICAgICAgICAgICAgfSBwdXRCeUlk
TGlzdDsKICAgICAgICAgfSB1OwogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHVi
Um91dGluZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAkocmV2aXNpb24gMTA2Nzc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjExLDYgKzYxMSw3MCBAQCB2b2lkIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjCiAgICAgICAgIHN0dWJJbmZvLnNlZW4g
PSB0cnVlOwogfQogCitWX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVTU19FSkNJ
KG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExpc3QpOwordm9pZCBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5SWRTdHJpY3RCdWlsZExpc3RXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUq
IGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlm
aWVyKiBwcm9wZXJ0eU5hbWUsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3sKKyAg
ICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgCisgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIEpTVmFs
dWUgYmFzZVZhbHVlKGJhc2UpOworICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRydWUpOworICAg
IAorICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgKnByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwor
ICAgIAorICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygp
LT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBkZmdCdWlsZFB1dEJ5SWRMaXN0KGV4
ZWMsIGJhc2VWYWx1ZSwgKnByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIE5vdERpcmVjdCk7
Cit9CisKK1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0
aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdCk7Cit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElkZW50aWZp
ZXIqIHByb3BlcnR5TmFtZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAg
IEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICAKKyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgSlNWYWx1
ZSBiYXNlVmFsdWUoYmFzZSk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2UpOworICAg
IAorICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgKnByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwor
ICAgIAorICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygp
LT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBkZmdCdWlsZFB1dEJ5SWRMaXN0KGV4
ZWMsIGJhc2VWYWx1ZSwgKnByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIE5vdERpcmVjdCk7
Cit9CisKK1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0
aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdCk7Cit2b2lkIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElk
ZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQor
eworICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICAK
KyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAg
UHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSk7CisgICAgCisgICAgQVNTRVJUKGJhc2UtPmlzT2Jq
ZWN0KCkpOworICAgIGFzT2JqZWN0KGJhc2UpLT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgp
LCAqcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgCisgICAgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZvKHJldHVybkFkZHJl
c3MpOworICAgIGRmZ0J1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZSwgKnByb3BlcnR5TmFtZSwg
c2xvdCwgc3R1YkluZm8sIERpcmVjdCk7Cit9CisKK1ZfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JF
VFVSTl9BRERSRVNTX0VKQ0kob3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlz
dCk7Cit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1
aWxkTGlzdFdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICAKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoZmFsc2Up
OworICAgIAorICAgIEFTU0VSVChiYXNlLT5pc09iamVjdCgpKTsKKyAgICBhc09iamVjdChiYXNl
KS0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgKnByb3BlcnR5TmFtZSwgdmFsdWUsIHNs
b3QpOworICAgIAorICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVC
bG9jaygpLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBkZmdCdWlsZFB1dEJ5SWRM
aXN0KGV4ZWMsIGJhc2UsICpwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBEaXJlY3QpOwor
fQorCiBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVzcyhFeGVjU3RhdGUq
IGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRP
cDIpCiB7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZp
c2lvbiAxMDY3NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsOCBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQp
CiAKLSNpbmNsdWRlIDxkZmcvREZHSklUQ29tcGlsZXIuaD4KKyNpbmNsdWRlICJERkdKSVRDb21w
aWxlci5oIgorI2luY2x1ZGUgIlB1dEtpbmQuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTM2
LDggKzM3LDYgQEAgc3RydWN0IEdsb2JhbFJlc29sdmVJbmZvOwogCiBuYW1lc3BhY2UgREZHIHsK
IAotZW51bSBQdXRLaW5kIHsgRGlyZWN0LCBOb3REaXJlY3QgfTsKLQogZXh0ZXJuICJDIiB7CiAK
ICNpZiBDQUxMSU5HX0NPTlZFTlRJT05fSVNfU1REQ0FMTApAQCAtMTMwLDYgKzEyOSwxMCBAQCB2
b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljCiB2b2lkIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKik7CiB2b2lkIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVy
Kik7CiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9w
dGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBi
YXNlLCBJZGVudGlmaWVyKik7Cit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0
cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpT
Q2VsbCogYmFzZSwgSWRlbnRpZmllciopOwordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5SWROb25TdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElkZW50aWZpZXIqKTsKK3ZvaWQgREZHX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKik7Cit2b2lkIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdChFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRp
ZmllciopOwogLy8gVGhlc2UgY29tcGFyaXNvbnMgcmV0dXJuIGEgYm9vbGVhbiB3aXRoaW4gYSBz
aXplX3Qgc3VjaCB0aGF0IHRoZSB2YWx1ZSBpcyB6ZXJvIGV4dGVuZGVkIHRvIGZpbGwgdGhlIHJl
Z2lzdGVyLgogc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3MoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9w
Mik7CiBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVzc0VxKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lv
biAxMDY3NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiREZHU3BlY3VsYXRpdmVK
SVQuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgor
I2luY2x1ZGUgIlBvbHltb3JwaGljUHV0QnlJZExpc3QuaCIKICNpbmNsdWRlICJSZXBhdGNoQnVm
ZmVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTQ5Miw3ICs0OTMs
NyBAQCB2b2lkIGRmZ0J1aWxkR2V0QnlJRFByb3RvTGlzdChFeGVjU3RhdGUqCiAgICAgICAgIGRm
Z1JlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24sIG9wZXJhdGlvbkdldEJ5SWQpOwogfQogCi1zdGF0aWMgVl9ERkdPcGVyYXRpb25fRUpDSSBh
cHByb3ByaWF0ZVB1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1
dEtpbmQgcHV0S2luZCkKK3N0YXRpYyBWX0RGR09wZXJhdGlvbl9FSkNJIGFwcHJvcHJpYXRlR2Vu
ZXJpY1B1dEJ5SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQg
cHV0S2luZCkKIHsKICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkgewogICAgICAgICBpZiAo
cHV0S2luZCA9PSBEaXJlY3QpCkBAIC01MDQsNiArNTA1LDE4IEBAIHN0YXRpYyBWX0RGR09wZXJh
dGlvbl9FSkNJIGFwcHJvcHJpYXRlUHUKICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0
cmljdDsKIH0KIAorc3RhdGljIFZfREZHT3BlcmF0aW9uX0VKQ0kgYXBwcm9wcmlhdGVMaXN0QnVp
bGRpbmdQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRLaW5k
IHB1dEtpbmQpCit7CisgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpIHsKKyAgICAgICAgaWYg
KHB1dEtpbmQgPT0gRGlyZWN0KQorICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3RTdHJpY3RCdWlsZExpc3Q7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3Ry
aWN0QnVpbGRMaXN0OworICAgIH0KKyAgICBpZiAocHV0S2luZCA9PSBEaXJlY3QpCisgICAgICAg
IHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0OworICAgIHJl
dHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0QnVpbGRMaXN0OworfQorCiBzdGF0aWMgdm9p
ZCB0ZXN0UHJvdG90eXBlKE1hY3JvQXNzZW1ibGVyICZzdHViSml0LCBHUFJSZWcgc2NyYXRjaEdQ
UiwgSlNWYWx1ZSBwcm90b3R5cGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNh
c2VzKQogewogICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCkBAIC01MTUsNyArNTI4LDE4NyBA
QCBzdGF0aWMgdm9pZCB0ZXN0UHJvdG90eXBlKE1hY3JvQXNzZW1ibGVyCiAgICAgZmFpbHVyZUNh
c2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwcm90b3R5cGUuYXNDZWxsKCktPnN0
cnVjdHVyZSgpKSkpOwogfQogCi1zdGF0aWMgYm9vbCB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1
dEtpbmQpCitzdGF0aWMgdm9pZCBlbWl0UHV0UmVwbGFjZVN0dWIoCisgICAgRXhlY1N0YXRlKiBl
eGVjLAorICAgIEpTVmFsdWUsCisgICAgY29uc3QgSWRlbnRpZmllciYsCisgICAgY29uc3QgUHV0
UHJvcGVydHlTbG90JiBzbG90LAorICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKKyAg
ICBQdXRLaW5kLAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAorICAgIENvZGVMb2NhdGlvbkxh
YmVsIGZhaWx1cmVMYWJlbCwKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIHN0dWJSb3V0aW5l
KQoreworICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7
CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLmJhc2VH
UFIpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gc3Rh
dGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby52YWx1ZVRhZ0dQUik7CisjZW5kaWYKKyAgICBHUFJS
ZWcgdmFsdWVHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnZhbHVlR1BSKTsKKyAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8uc2NyYXRj
aEdQUik7CisgICAgYm9vbCBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IGZhbHNlOworI2lmIEVOQUJM
RShHR0MpIHx8IEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKKyAgICBHUFJSZWcgc2Ny
YXRjaEdQUjI7CisgICAgY29uc3QgYm9vbCB3cml0ZUJhcnJpZXJOZWVkZWQgPSB0cnVlOworI2Vs
c2UKKyAgICBjb25zdCBib29sIHdyaXRlQmFycmllck5lZWRlZCA9IGZhbHNlOworI2VuZGlmCisg
ICAgCisgICAgTWFjcm9Bc3NlbWJsZXIgc3R1YkppdDsKKyAgICAKKyAgICBpZiAoc2NyYXRjaEdQ
UiA9PSBJbnZhbGlkR1BSUmVnICYmICh3cml0ZUJhcnJpZXJOZWVkZWQgfHwgIXN0cnVjdHVyZS0+
aXNVc2luZ0lubGluZVN0b3JhZ2UoKSkpIHsKKyAgICAgICAgc2NyYXRjaEdQUiA9IFNwZWN1bGF0
aXZlSklUOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHZhbHVlR1BSKTsKKyAgICAgICAgbmVl
ZFRvUmVzdG9yZVNjcmF0Y2ggPSB0cnVlOworICAgICAgICBzdHViSml0LnB1c2goc2NyYXRjaEdQ
Uik7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmFkU3RydWN0dXJlID0gc3R1
YkppdC5icmFuY2hQdHIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkp
OworICAgIAorI2lmIEVOQUJMRShHR0MpIHx8IEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElO
RykKKyAgICBzY3JhdGNoR1BSMiA9IFNwZWN1bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNoR1BSKGJh
c2VHUFIsIHZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKKyAgICBzdHViSml0LnB1c2goc2NyYXRjaEdQ
UjIpOworICAgIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoc3R1YkppdCwgYmFzZUdQUiwg
c2NyYXRjaEdQUiwgc2NyYXRjaEdQUjIsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsK
KyAgICBzdHViSml0LnBvcChzY3JhdGNoR1BSMik7CisjZW5kaWYKKyAgICAKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgIGlmIChzdHJ1Y3R1cmUtPmlzVXNpbmdJbmxpbmVTdG9yYWdlKCkpCisgICAg
ICAgIHN0dWJKaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIHNsb3QuY2FjaGVkT2Zm
c2V0KCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgc3R1YkppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRP
ZlByb3BlcnR5U3RvcmFnZSgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0dWJKaXQuc3RvcmVQ
dHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIHNsb3QuY2Fj
aGVkT2Zmc2V0KCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICB9CisjZWxpZiBVU0UoSlNWQUxV
RTMyXzY0KQorICAgIGlmIChzdHJ1Y3R1cmUtPmlzVXNpbmdJbmxpbmVTdG9yYWdlKCkpIHsKKyAg
ICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBzbG90LmNhY2hlZE9m
ZnNldCgpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFs
dWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZz
ZXRPZklubGluZVN0b3JhZ2UoKSArIHNsb3QuY2FjaGVkT2Zmc2V0KCkgKiBzaXplb2YoSlNWYWx1
ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykp
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBzbG90LmNhY2hlZE9mZnNldCgpICogc2l6ZW9mKEpT
VmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5w
YXlsb2FkKSkpOworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIHNsb3QuY2FjaGVkT2Zmc2V0KCkgKiBzaXplb2Yo
SlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRz
LnRhZykpKTsKKyAgICB9CisjZW5kaWYKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBz
dWNjZXNzOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWx1cmU7CisgICAgCisgICAgaWYg
KG5lZWRUb1Jlc3RvcmVTY3JhdGNoKSB7CisgICAgICAgIHN0dWJKaXQucG9wKHNjcmF0Y2hHUFIp
OworICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7CisgICAgICAgIAorICAgICAgICBi
YWRTdHJ1Y3R1cmUubGluaygmc3R1YkppdCk7CisgICAgICAgIHN0dWJKaXQucG9wKHNjcmF0Y2hH
UFIpOworICAgICAgICBmYWlsdXJlID0gc3R1YkppdC5qdW1wKCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOworICAgICAgICBmYWlsdXJlID0gYmFkU3Ry
dWN0dXJlOworICAgIH0KKyAgICAKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxE
YXRhLCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmso
c3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1Yklu
Zm8uZGVsdGFDYWxsVG9Eb25lKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlLCBmYWls
dXJlTGFiZWwpOworICAgICAgICAgICAgCisgICAgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5m
aW5hbGl6ZUNvZGUoKTsKK30KKworc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAor
ICAgIEV4ZWNTdGF0ZSogZXhlYywKKyAgICBKU1ZhbHVlLAorICAgIGNvbnN0IElkZW50aWZpZXIm
LAorICAgIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwKKyAgICBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sCisgICAgUHV0S2luZCBwdXRLaW5kLAorICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlLAorICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAorICAgIFN0cnVjdHVyZUNoYWluKiBw
cm90b3R5cGVDaGFpbiwKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBmYWlsdXJlTGFiZWwsCisgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBzdHViUm91dGluZSkKK3sKKyAgICBKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworCisgICAgR1BSUmVnIGJhc2VHUFIg
PSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLmJhc2VHUFIpOworI2lmIFVTRShKU1ZBTFVF
MzJfNjQpCisgICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHVi
SW5mby52YWx1ZVRhZ0dQUik7CisjZW5kaWYKKyAgICBHUFJSZWcgdmFsdWVHUFIgPSBzdGF0aWNf
Y2FzdDxHUFJSZWc+KHN0dWJJbmZvLnZhbHVlR1BSKTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8uc2NyYXRjaEdQUik7CisgICAgYm9vbCBuZWVk
VG9SZXN0b3JlU2NyYXRjaCA9IGZhbHNlOworICAgICAgICAgICAgCisgICAgQVNTRVJUKHNjcmF0
Y2hHUFIgIT0gYmFzZUdQUik7CisgICAgICAgICAgICAKKyAgICBNYWNyb0Fzc2VtYmxlciBzdHVi
Sml0OworICAgICAgICAgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVD
YXNlczsKKyAgICAgICAgICAgIAorICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcp
IHsKKyAgICAgICAgc2NyYXRjaEdQUiA9IFNwZWN1bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNoR1BS
KGJhc2VHUFIsIHZhbHVlR1BSKTsKKyAgICAgICAgc3R1YkppdC5wdXNoKHNjcmF0Y2hHUFIpOwor
ICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7CisgICAgfQorICAgIAorICAgIGZh
aWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIob2xkU3RydWN0dXJlKSkpOwor
ICAgICAgICAgICAgCisgICAgdGVzdFByb3RvdHlwZShzdHViSml0LCBzY3JhdGNoR1BSLCBvbGRT
dHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLCBmYWlsdXJlQ2FzZXMpOworICAgICAgICAgICAg
CisgICAgaWYgKHB1dEtpbmQgPT0gTm90RGlyZWN0KSB7CisgICAgICAgIGZvciAoV3JpdGVCYXJy
aWVyPFN0cnVjdHVyZT4qIGl0ID0gcHJvdG90eXBlQ2hhaW4tPmhlYWQoKTsgKml0OyArK2l0KQor
ICAgICAgICAgICAgdGVzdFByb3RvdHlwZShzdHViSml0LCBzY3JhdGNoR1BSLCAoKml0KS0+c3Rv
cmVkUHJvdG90eXBlKCksIGZhaWx1cmVDYXNlcyk7CisgICAgfQorCisjaWYgRU5BQkxFKEdHQykg
fHwgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQorICAgIC8vIE11c3QgYWx3YXlzIGVt
aXQgdGhpcyB3cml0ZSBiYXJyaWVyIGFzIHRoZSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiBpdHNlbGYg
cmVxdWlyZXMgaXQKKyAgICBHUFJSZWcgc2NyYXRjaDIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0
U2NyYXRjaEdQUihiYXNlR1BSLCB2YWx1ZUdQUiwgc2NyYXRjaEdQUik7CisgICAgc3R1YkppdC5w
dXNoKHNjcmF0Y2gyKTsKKyAgICBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKHN0dWJKaXQs
IGJhc2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFj
Y2Vzcyk7CisgICAgc3R1YkppdC5wb3Aoc2NyYXRjaDIpOworI2VuZGlmCisKKyAgICBzdHViSml0
LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpKTsK
KyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGlmIChzdHJ1Y3R1cmUtPmlzVXNpbmdJbmxpbmVTdG9y
YWdlKCkpCisgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIHNs
b3QuY2FjaGVkT2Zmc2V0KCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0
dWJKaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hH
UFIsIHNsb3QuY2FjaGVkT2Zmc2V0KCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICB9CisjZWxp
ZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGlmIChzdHJ1Y3R1cmUtPmlzVXNpbmdJbmxpbmVTdG9y
YWdlKCkpIHsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBz
bG90LmNhY2hlZE9mZnNldCgpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICBzdHViSml0
LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIHNsb3QuY2FjaGVkT2Zmc2V0KCkgKiBz
aXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnRhZykpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mUHJvcGVydHlT
dG9yYWdlKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBzbG90LmNhY2hlZE9mZnNldCgp
ICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdH
UFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIHNsb3QuY2FjaGVkT2Zmc2V0
KCkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3Jp
cHRvciwgYXNCaXRzLnRhZykpKTsKKyAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIAorICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3M7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFp
bHVyZTsKKyAgICAgICAgICAgIAorICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkgeworICAg
ICAgICBzdHViSml0LnBvcChzY3JhdGNoR1BSKTsKKyAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQu
anVtcCgpOworCisgICAgICAgIGZhaWx1cmVDYXNlcy5saW5rKCZzdHViSml0KTsKKyAgICAgICAg
c3R1YkppdC5wb3Aoc2NyYXRjaEdQUik7CisgICAgICAgIGZhaWx1cmUgPSBzdHViSml0Lmp1bXAo
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOworICAgICAg
ICAgICAgCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQs
IGV4ZWMtPmNvZGVCbG9jaygpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRv
RG9uZSkpOworICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkKKyAgICAgICAgcGF0Y2hCdWZm
ZXIubGluayhmYWlsdXJlLCBmYWlsdXJlTGFiZWwpOworICAgIGVsc2UKKyAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhmYWlsdXJlQ2FzZXMsIGZhaWx1cmVMYWJlbCk7CisgICAgICAgICAgICAKKyAg
ICBzdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOworfQorCitzdGF0aWMg
Ym9vbCB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCiB7CiAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKICAgICBKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwpAQCAtNTQ1LDk5ICs3MzgsMjYgQEAgc3Rh
dGljIGJvb2wgdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZQogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3Rv
dHlwZUNoYWluKGV4ZWMpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJSZWcgYmFzZUdQ
UiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8uYmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFM
VUUzMl82NCkKLSAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHN0YXRpY19jYXN0PEdQ
UlJlZz4oc3R1YkluZm8udmFsdWVUYWdHUFIpOwotI2VuZGlmCi0gICAgICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnZhbHVlR1BSKTsKLSAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5z
Y3JhdGNoR1BSKTsKLSAgICAgICAgICAgIGJvb2wgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSBmYWxz
ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIgIT0gYmFzZUdQ
Uik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyIHN0dWJKaXQ7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJl
Q2FzZXM7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzY3JhdGNoR1BSID09IEludmFs
aWRHUFJSZWcpIHsKLSAgICAgICAgICAgICAgICBzY3JhdGNoR1BSID0gU3BlY3VsYXRpdmVKSVQ6
OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgdmFsdWVHUFIpOwotICAgICAgICAgICAgICAgIHN0
dWJKaXQucHVzaChzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBuZWVkVG9SZXN0b3JlU2Ny
YXRjaCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZh
aWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIob2xkU3RydWN0dXJlKSkpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICB0ZXN0UHJvdG90eXBlKHN0dWJKaXQsIHNjcmF0Y2hH
UFIsIG9sZFN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCksIGZhaWx1cmVDYXNlcyk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChwdXRLaW5kID09IE5vdERpcmVjdCkgewotICAgICAg
ICAgICAgICAgIGZvciAoV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gcHJvdG90eXBlQ2hh
aW4tPmhlYWQoKTsgKml0OyArK2l0KQotICAgICAgICAgICAgICAgICAgICB0ZXN0UHJvdG90eXBl
KHN0dWJKaXQsIHNjcmF0Y2hHUFIsICgqaXQpLT5zdG9yZWRQcm90b3R5cGUoKSwgZmFpbHVyZUNh
c2VzKTsKLSAgICAgICAgICAgIH0KLQotI2lmIEVOQUJMRShHR0MpIHx8IEVOQUJMRShXUklURV9C
QVJSSUVSX1BST0ZJTElORykKLSAgICAgICAgICAgIC8vIE11c3QgYWx3YXlzIGVtaXQgdGhpcyB3
cml0ZSBiYXJyaWVyIGFzIHRoZSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiBpdHNlbGYgcmVxdWlyZXMg
aXQKLSAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IFNwZWN1bGF0aXZlSklUOjpzZWxlY3RT
Y3JhdGNoR1BSKGJhc2VHUFIsIHZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIHN0
dWJKaXQucHVzaChzY3JhdGNoMik7Ci0gICAgICAgICAgICBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVC
YXJyaWVyKHN0dWJKaXQsIGJhc2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyLCBXcml0ZUJhcnJp
ZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7Ci0gICAgICAgICAgICBzdHViSml0LnBvcChzY3JhdGNoMik7
Ci0jZW5kaWYKLQotICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAg
ICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzVXNpbmdJbmxpbmVTdG9yYWdlKCkpCi0gICAgICAgICAg
ICAgICAgc3R1YkppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgc2xvdC5jYWNoZWRP
ZmZzZXQoKSAqIHNpemVvZihKU1ZhbHVlKSkpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpKSwgc2NyYXRjaEdQUik7Ci0gICAg
ICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc2NyYXRjaEdQUiwgc2xvdC5jYWNoZWRPZmZzZXQoKSAqIHNpemVvZihKU1ZhbHVlKSkp
OwotICAgICAgICAgICAgfQotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgICAgIGlm
IChzdHJ1Y3R1cmUtPmlzVXNpbmdJbmxpbmVTdG9yYWdlKCkpIHsKLSAgICAgICAgICAgICAgICBz
dHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIHNsb3QuY2FjaGVkT2Zmc2V0KCkg
KiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZh
bHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zm
c2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBzbG90LmNhY2hlZE9mZnNldCgpICogc2l6ZW9mKEpTVmFs
dWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcp
KSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZQcm9w
ZXJ0eVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIHN0dWJKaXQuc3Rv
cmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgc2xvdC5j
YWNoZWRPZmZzZXQoKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgICAgICAgICBzdHVi
Sml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hH
UFIsIHNsb3QuY2FjaGVkT2Zmc2V0KCkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKLSAgICAgICAgICAgIH0K
LSNlbmRpZgotICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBz
dWNjZXNzOwotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbHVyZTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3JhdGNoKSB7Ci0gICAgICAg
ICAgICAgICAgc3R1YkppdC5wb3Aoc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgc3VjY2Vz
cyA9IHN0dWJKaXQuanVtcCgpOwotCi0gICAgICAgICAgICAgICAgZmFpbHVyZUNhc2VzLmxpbmso
JnN0dWJKaXQpOwotICAgICAgICAgICAgICAgIHN0dWJKaXQucG9wKHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgICAgIGZhaWx1cmUgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJK
aXQsIGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2Fs
bFRvRG9uZSkpOwotICAgICAgICAgICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3JhdGNoKQotICAgICAg
ICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNh
c2VzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5k
ZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJJbmZv
LnN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CisgICAgICAgICAgICBl
bWl0UHV0VHJhbnNpdGlvblN0dWIoCisgICAgICAgICAgICAgICAgZXhlYywgYmFzZVZhbHVlLCBp
ZGVudCwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQsCisgICAgICAgICAgICAgICAgc3RydWN0dXJl
LCBvbGRTdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLAorICAgICAgICAgICAgICAgIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU2xv
d0Nhc2UpLAorICAgICAgICAgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7
CiAgICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2Rl
TG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS5jb2RlKCkpKTsKLSAgICAgICAgICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9w
cmlhdGVQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOworICAgICAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUxp
c3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkVHJhbnNpdGlvbigqZ2xvYmFsRGF0YSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIHBy
b3RvdHlwZUNoYWluLCBwdXRLaW5kID09IERpcmVjdCk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgZGZnUmVwYXRjaEJ5SWRTZWxm
QWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQo
KSwgYXBwcm9wcmlhdGVQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCksIGZhbHNlKTsKKyAg
ICAgICAgZGZnUmVwYXRjaEJ5SWRTZWxmQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVj
dHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlk
RnVuY3Rpb24oc2xvdCwgcHV0S2luZCksIGZhbHNlKTsKICAgICAgICAgc3R1YkluZm8uaW5pdFB1
dEJ5SWRSZXBsYWNlKCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBz
dHJ1Y3R1cmUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICAvLyBGSVhNRTog
c2hvdWxkIHN1cHBvcnQgdGhlIHRyYW5zaXRpb24gY2FzZSEKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKQEAgLTY0NSw3ICs3NjUsOTEgQEAgdm9pZCBkZmdSZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUq
IGV4ZWMsIAogewogICAgIGJvb2wgY2FjaGVkID0gdHJ5Q2FjaGVQdXRCeUlEKGV4ZWMsIGJhc2VW
YWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCk7CiAgICAgaWYgKCFj
YWNoZWQpCi0gICAgICAgIGRmZ1JlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1
dEtpbmQpKTsKKyAgICAgICAgZGZnUmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVu
Y3Rpb24oc2xvdCwgcHV0S2luZCkpOworfQorCitzdGF0aWMgYm9vbCB0cnlCdWlsZFB1dEJ5SWRM
aXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKK3sKKyAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9
ICZleGVjLT5nbG9iYWxEYXRhKCk7CisKKyAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXND
ZWxsKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCk7
CisgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKTsK
KyAgICAKKyAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgorICAgIGlmIChz
bG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpIHsKKyAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlz
dCogbGlzdDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJSb3V0aW5lOworICAg
ICAgICAKKyAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJv
cGVydHkpIHsKKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8g
c2tpcCBvcHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgYSByZWFsbG9jCisgICAgICAg
ICAgICBpZiAob2xkU3RydWN0dXJlLT5wcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpICE9IHN0cnVj
dHVyZS0+cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG5vcm1hbGl6ZVByb3RvdHlwZUNoYWlu
KGV4ZWMsIGJhc2VDZWxsKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RydWN0dXJlQ2hh
aW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgLy8gV2UncmUgbm93IGNvbW1pdHRlZCB0byBjcmVhdGlu
ZyB0aGUgc3R1Yi4gTW9ncmlmeSB0aGUgbWV0YS1kYXRhIGFjY29yZGluZ2x5LgorICAgICAgICAg
ICAgbGlzdCA9IFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20oCisgICAgICAgICAgICAgICAg
cHV0S2luZCwgc3R1YkluZm8sCisgICAgICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TbG93Q2FzZSkpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCisgICAgICAgICAg
ICAgICAgZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRL
aW5kLAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLCBwcm90b3R5cGVD
aGFpbiwKKyAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50U2xv
d1BhdGhUYXJnZXQoKSksCisgICAgICAgICAgICAgICAgc3R1YlJvdXRpbmUpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoCisgICAgICAgICAgICAgICAgUHV0QnlJ
ZEFjY2Vzczo6dHJhbnNpdGlvbigKKyAgICAgICAgICAgICAgICAgICAgKmdsb2JhbERhdGEsIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCisgICAgICAgICAgICAgICAgICAgIG9sZFN0cnVj
dHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwKKyAgICAgICAgICAgICAgICAgICAgc3R1
YlJvdXRpbmUpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdlJ3JlIG5vdyBj
b21taXR0ZWQgdG8gY3JlYXRpbmcgdGhlIHN0dWIuIE1vZ3JpZnkgdGhlIG1ldGEtZGF0YSBhY2Nv
cmRpbmdseS4KKyAgICAgICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9t
KAorICAgICAgICAgICAgICAgIHB1dEtpbmQsIHN0dWJJbmZvLAorICAgICAgICAgICAgICAgIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2Fs
bFRvU2xvd0Nhc2UpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZW1pdFB1dFJlcGxhY2VT
dHViKAorICAgICAgICAgICAgICAgIGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90
LCBzdHViSW5mbywgcHV0S2luZCwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIENvZGVMb2Nh
dGlvbkxhYmVsKGxpc3QtPmN1cnJlbnRTbG93UGF0aFRhcmdldCgpKSwgc3R1YlJvdXRpbmUpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoCisgICAgICAgICAgICAg
ICAgUHV0QnlJZEFjY2Vzczo6cmVwbGFjZSgKKyAgICAgICAgICAgICAgICAgICAgKmdsb2JhbERh
dGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCisgICAgICAgICAgICAgICAgICAgIHN0
cnVjdHVyZSwgc3R1YlJvdXRpbmUpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUmVw
YXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CisgICAgICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1Yklu
Zm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5l
LmNvZGUoKSkpOworICAgICAgICAKKyAgICAgICAgaWYgKGxpc3QtPmlzRnVsbCgpKQorICAgICAg
ICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBh
cHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOworICAgICAg
ICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsK
K30KKwordm9pZCBkZmdCdWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBi
YXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVy
dHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2lu
ZCkKK3sKKyAgICBib29sIGNhY2hlZCA9IHRyeUJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFzZVZh
bHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKTsKKyAgICBpZiAoIWNh
Y2hlZCkKKyAgICAgICAgZGZnUmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNs
b3QsIHB1dEtpbmQpKTsKIH0KIAogdm9pZCBkZmdMaW5rRm9yKEV4ZWNTdGF0ZSogZXhlYywgQ2Fs
bExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCBKU0Z1
bmN0aW9uKiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyLCBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIGtpbmQpCkBAIC02ODcsMTQgKzg5MSwxNCBAQCB2b2lkIGRmZ1Jlc2V0UHV0
QnlJRChSZXBhdGNoQnVmZmVyJiByZXBhCiB7CiAgICAgVl9ERkdPcGVyYXRpb25fRUpDSSB1bm9w
dGltaXplZEZ1bmN0aW9uID0gYml0d2lzZV9jYXN0PFZfREZHT3BlcmF0aW9uX0VKQ0k+KE1hY3Jv
QXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24pLmV4
ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIFZfREZHT3BlcmF0aW9uX0VKQ0kgb3B0aW1pemVkRnVu
Y3Rpb247Ci0gICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0
cmljdCkKKyAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3Ry
aWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdEJ1aWxk
TGlzdCkKICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0
T3B0aW1pemU7Ci0gICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeUlkTm9uU3RyaWN0KQorICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uUHV0QnlJZE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlv
blB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3QpCiAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0g
b3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOwotICAgIGVsc2UgaWYgKHVub3B0aW1p
emVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCkKKyAgICBlbHNlIGlm
ICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QgfHwg
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRM
aXN0KQogICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RT
dHJpY3RPcHRpbWl6ZTsKICAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCk7CisgICAgICAgIEFTU0VS
VCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3Qg
fHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0
QnVpbGRMaXN0KTsKICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CiAgICAgfQogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3B0aW1pemVkRnVuY3Rpb24pOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmgJKHJldmlzaW9uIDEwNjc3NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiwxMCArMjYsMTIgQEAKICNpZm5kZWYgREZHUmVwYXRjaF9oCiAjZGVmaW5lIERGR1JlcGF0
Y2hfaAogCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKICNpZiBFTkFCTEUoREZHX0pJVCkK
IAotI2luY2x1ZGUgPGRmZy9ERkdKSVRDb21waWxlci5oPgotI2luY2x1ZGUgPGRmZy9ERkdPcGVy
YXRpb25zLmg+CisjaW5jbHVkZSAiREZHSklUQ29tcGlsZXIuaCIKKyNpbmNsdWRlICJERkdPcGVy
YXRpb25zLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtMzcsNiAr
MzksNyBAQCB2b2lkIGRmZ1JlcGF0Y2hHZXRCeUlEKEV4ZWNTdGF0ZSosIEpTVmFsCiB2b2lkIGRm
Z0J1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYs
IGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIGRmZ0J1aWxk
R2V0QnlJRFByb3RvTGlzdChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwg
Y29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgZGZnUmVwYXRj
aFB1dEJ5SUQoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFB1
dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2luZCk7Cit2b2lkIGRmZ0J1
aWxkUHV0QnlJZExpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2luZCk7CiB2b2lk
IGRmZ0xpbmtGb3IoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgSlNGdW5j
dGlvbiogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIsIENvZGVTcGVjaWFsaXphdGlvbktp
bmQpOwogdm9pZCBkZmdSZXNldEdldEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJ
bmZvJik7CiB2b2lkIGRmZ1Jlc2V0UHV0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1
YkluZm8mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dyaXRlQmFycmll
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dyaXRlQmFy
cmllci5oCShyZXZpc2lvbiAxMDY3NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Xcml0ZUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsMTMgQEAgcHVibGlj
OgogICAgICAgICB2YWxpZGF0ZUNlbGwodmFsdWUpOwogICAgICAgICBzZXRFYXJseVZhbHVlKGds
b2JhbERhdGEsIG93bmVyLCB2YWx1ZSk7CiAgICAgfQorICAgIAorICAgIC8vIFRoaXMgaXMgbWVh
bnQgdG8gYmUgdXNlZCBsaWtlIG9wZXJhdG9yPSwgYnV0IGlzIGNhbGxlZCBjb3B5RnJvbSBpbnN0
ZWFkLCBpbgorICAgIC8vIG9yZGVyIHRvIGtpbmRseSBpbmZvcm0gdGhlIEMrKyBjb21waWxlciB0
aGF0IGl0cyBhZHZpY2UgaXMgbm90IGFwcHJlY2lhdGVkLgorICAgIHZvaWQgY29weUZyb20oY29u
c3QgV3JpdGVCYXJyaWVyQmFzZTxUPiYgb3RoZXIpCisgICAgeworICAgICAgICBtX2NlbGwgPSBv
dGhlci5tX2NlbGw7CisgICAgfQogCiAgICAgdm9pZCBzZXRNYXlCZU51bGwoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBjb25zdCBKU0NlbGwqIG93bmVyLCBUKiB2YWx1ZSkKICAgICB7Cg==
</data>
<flag name="review"
          id="127655"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>