<?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>27564</bug_id>
          
          <creation_ts>2009-07-22 14:33:27 -0700</creation_ts>
          <short_desc>With ENABLE(ASSEMBLER_WX_EXCLUSIVE), only change permissions once per repatch event.</short_desc>
          <delta_ts>2009-07-22 15:59:51 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>133908</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-07-22 14:33:27 -0700</bug_when>
    <thetext>Currently we change permissions forwards and backwards for each instruction modified, instead we should only change permissions once per complete repatching event.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133913</commentid>
    <comment_count>1</comment_count>
      <attachid>33291</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-07-22 14:46:25 -0700</bug_when>
    <thetext>Created attachment 33291
The Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133971</commentid>
    <comment_count>2</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-07-22 15:59:51 -0700</bug_when>
    <thetext>Fixed in r46247.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33291</attachid>
            <date>2009-07-22 14:46:25 -0700</date>
            <delta_ts>2009-07-22 15:01:58 -0700</delta_ts>
            <desc>The Patch.</desc>
            <filename>patch.repatchRegionCB2.txt</filename>
            <type>text/plain</type>
            <size>45343</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ2MjM4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTkgQEAKKzIwMDktMDctMjIgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdpdGggRU5BQkxFKEFTU0VNQkxFUl9XWF9FWENM
VVNJVkUpLCBvbmx5IGNoYW5nZSBwZXJtaXNzaW9ucyBvbmNlIHBlciByZXBhdGNoIGV2ZW50Lgor
ICAgICAgICAoIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzU2NCAp
CisKKyAgICAgICAgQ3VycmVudGx5IHdlIGNoYW5nZSBwZXJtaXNzaW9ucyBmb3J3YXJkcyBhbmQg
YmFja3dhcmRzIGZvciBlYWNoIGluc3RydWN0aW9uIG1vZGlmaWVkLAorICAgICAgICBpbnN0ZWFk
IHdlIHNob3VsZCBvbmx5IGNoYW5nZSBwZXJtaXNzaW9ucyBvbmNlIHBlciBjb21wbGV0ZSByZXBh
dGNoaW5nIGV2ZW50LgorCisgICAgICAgIDIuNSUgcHJvZ3Jlc3Npb24gcnVubmluZyB3aXRoIEVO
QUJMRShBU1NFTUJMRVJfV1hfRVhDTFVTSVZFKSBlbmFibGVkLAorICAgICAgICB3aGljaCByZWNv
dXBzIDEvMyBvZiB0aGUgcGVuYWx0eSBvZiBydW5uaW5nIHdpdGggdGhpcyBtb2RlIGVuYWJsZWQu
CisKKyAgICAgICAgKiBhc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKEpTQzo6
QVJNQXNzZW1ibGVyOjpsaW5rQnJhbmNoKToKKyAgICAgICAgICAgIC0gUmVwbGFjZSB1c2FnZSBv
ZiBNYWtlV3JpdGFibGUgd2l0aCBjYWNoZUZsdXNoLgorICAgICAgICAKKyAgICAgICAgKiBhc3Nl
bWJsZXIvQVJNQXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6cGF0Y2hQ
b2ludGVySW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OnJlcGF0Y2hMb2Fk
UHRyVG9MRUEpOgorICAgICAgICAgICAgLSBSZXBsYWNlIHVzYWdlIG9mIE1ha2VXcml0YWJsZSB3
aXRoIGNhY2hlRmx1c2guCisKKyAgICAgICAgKiBhc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaDoK
KyAgICAgICAgKEpTQzo6QVJNdjdBc3NlbWJsZXI6OnJlbGlua0p1bXApOgorICAgICAgICAoSlND
OjpBUk12N0Fzc2VtYmxlcjo6cmVsaW5rQ2FsbCk6CisgICAgICAgIChKU0M6OkFSTXY3QXNzZW1i
bGVyOjpyZXBhdGNoSW50MzIpOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2VtYmxlcjo6cmVwYXRj
aFBvaW50ZXIpOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2VtYmxlcjo6cmVwYXRjaExvYWRQdHJU
b0xFQSk6CisgICAgICAgIChKU0M6OkFSTXY3QXNzZW1ibGVyOjpzZXRJbnQzMik6CisgICAgICAg
ICAgICAtIFJlcGxhY2UgdXNhZ2Ugb2YgTWFrZVdyaXRhYmxlIHdpdGggY2FjaGVGbHVzaC4KKwor
ICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmg6CisgICAgICAgIChKU0M6OkxpbmtCdWZm
ZXI6OnBlcmZvcm1GaW5hbGl6YXRpb24pOgorICAgICAgICAgICAgLSBNYWtlIGV4cGxpY2l0IGNh
bGwgdG8gY2FjaGVGbHVzaC4KKworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYpOgorICAgICAgICAgICAgLSBNYWtlIHNpemUgYWx3YXlzIGF2YWlsYWJsZS4K
KworICAgICAgICAqIGFzc2VtYmxlci9SZXBhdGNoQnVmZmVyLmg6CisgICAgICAgIChKU0M6OlJl
cGF0Y2hCdWZmZXI6OlJlcGF0Y2hCdWZmZXIpOgorICAgICAgICAoSlNDOjpSZXBhdGNoQnVmZmVy
Ojp+UmVwYXRjaEJ1ZmZlcik6CisgICAgICAgICAgICAtIEFkZCBjYWxscyB0byBNYWtlV3JpdGFi
bGUgJiBtYWtlRXhlY3V0YWJsZS4KKworICAgICAgICAqIGFzc2VtYmxlci9YODZBc3NlbWJsZXIu
aDoKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpyZWxpbmtKdW1wKToKKyAgICAgICAgKEpT
Qzo6WDg2QXNzZW1ibGVyOjpyZWxpbmtDYWxsKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVy
OjpyZXBhdGNoSW50MzIpOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OnJlcGF0Y2hQb2lu
dGVyKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpyZXBhdGNoTG9hZFB0clRvTEVBKToK
KyAgICAgICAgICAgIC0gUmVtb3ZlIHVzYWdlIG9mIE1ha2VXcml0YWJsZS4KKworICAgICAgICAq
IGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldEpJVENv
ZGUpOgorICAgICAgICAgICAgLSBQcm92aWRlIGFjY2VzcyB0byBDb2RlQmxvY2sncyBKSVRDb2Rl
LgorCisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQzo6
RXhlY3V0YWJsZUFsbG9jYXRvcjo6bWFrZUV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpFeGVj
dXRhYmxlQWxsb2NhdG9yOjpjYWNoZUZsdXNoKToKKyAgICAgICAgICAgIC0gUmVtb3ZlIE1ha2VX
cml0YWJsZSwgbWFrZSBjYWNoZUZsdXNoIHB1YmxpYy4KKworICAgICAgICAqIGppdC9KSVQuY3Bw
OgorICAgICAgICAoSlNDOjpjdGlQYXRjaE5lYXJDYWxsQnlSZXR1cm5BZGRyZXNzKToKKyAgICAg
ICAgKEpTQzo6Y3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKToKKyAgICAgICAgKEpTQzo6SklU
Ojpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6dW5saW5rQ2FsbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6bGlua0NhbGwpOgorICAgICAgICAgICAgLSBBZGQgQ29kZUJsb2NrIGFy
Z3VtZW50IHRvIFJlcGF0Y2hCdWZmZXIuCisKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAg
ICAgICAtIFBhc3MgQ29kZUJsb2NrIGFyZ3VtZW50IGZvciB1c2UgYnkgUmVwYXRjaEJ1ZmZlci4K
KworICAgICAgICAqIGppdC9KSVRDb2RlLmg6CisgICAgICAgIChKU0M6OkpJVENvZGU6OnN0YXJ0
KToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6c2l6ZSk6CisgICAgICAgICAgICAtIFByb3ZpZGUg
YWNjZXNzIHRvIGNvZGUgc3RhcnQgJiBzaXplLgorCisgICAgICAgICogaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFu
c2l0aW9uKToKKyAgICAgICAgKEpTQzo6SklUOjpwYXRjaEdldEJ5SWRTZWxmKToKKyAgICAgICAg
KEpTQzo6SklUOjpwYXRjaE1ldGhvZENhbGxQcm90byk6CisgICAgICAgIChKU0M6OkpJVDo6cGF0
Y2hQdXRCeUlkUmVwbGFjZSk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRj
aEdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5
SWRQcm90byk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxp
c3QpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdCk6
CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAg
ICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbik6CisgICAgICAgICAg
ICAtIEFkZCBDb2RlQmxvY2sgYXJndW1lbnQgdG8gUmVwYXRjaEJ1ZmZlci4KKworICAgICAgICAq
IGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6dHJ5Q2FjaGVQdXRC
eUlEKToKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjp0cnlDYWNoZUdldEJ5SUQpOgorICAgICAg
ICAoSlNDOjpKSVRTdHViczo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAgICAgLSBQ
YXNzIENvZGVCbG9jayBhcmd1bWVudCBmb3IgdXNlIGJ5IFJlcGF0Y2hCdWZmZXIuCisKIDIwMDkt
MDctMjEgIFpvbHRhbiBIZXJjemVnICA8emhlcmN6ZWdAaW5mLnUtc3plZ2VkLmh1PgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEdhdmluIEJhcnJhY2xvdWdoLgpJbmRleDogSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0FSTUFzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0FSTUFzc2VtYmxlci5jcHAJKHJldmlzaW9uIDQ2MjEwKQorKysgSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDE0
ICs1NywxNCBAQCB2b2lkIEFSTUFzc2VtYmxlcjo6bGlua0JyYW5jaCh2b2lkKiBjb2RlCiAgICAg
ICAgIGludCBkaWZmID0gcmVpbnRlcnByZXRfY2FzdDxBUk1Xb3JkKj4odG8pIC0gcmVpbnRlcnBy
ZXRfY2FzdDxBUk1Xb3JkKj4oaW5zbiArIDIpOwogCiAgICAgICAgIGlmICgoZGlmZiA8PSBCT0ZG
U0VUX01BWCAmJiBkaWZmID49IEJPRkZTRVRfTUlOKSkgewotICAgICAgICAgICAgRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6TWFrZVdyaXRhYmxlIHVucHJvdGVjdChpbnNuLCBzaXplb2YoQVJNV29yZCkp
OwogICAgICAgICAgICAgKmluc24gPSBCIHwgZ2V0Q29uZGl0aW9uYWxGaWVsZCgqaW5zbikgfCAo
ZGlmZiAmIEJSQU5DSF9NQVNLKTsKKyAgICAgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNh
Y2hlRmx1c2goaW5zbiwgc2l6ZW9mKEFSTVdvcmQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgIH0KICAgICBBUk1Xb3JkKiBhZGRyID0gZ2V0TGRySW1tQWRkcmVzcyhpbnNu
KTsKLSAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjpNYWtlV3JpdGFibGUgdW5wcm90ZWN0KGFkZHIs
IHNpemVvZihBUk1Xb3JkKSk7CiAgICAgKmFkZHIgPSByZWludGVycHJldF9jYXN0PEFSTVdvcmQ+
KHRvKTsKKyAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjpjYWNoZUZsdXNoKGFkZHIsIHNpemVvZihB
Uk1Xb3JkKSk7CiB9CiAKIHZvaWQgQVJNQXNzZW1ibGVyOjpwYXRjaENvbnN0YW50UG9vbExvYWQo
dm9pZCogbG9hZEFkZHIsIHZvaWQqIGNvbnN0UG9vbEFkZHIpCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oCShyZXZpc2lvbiA0NjIxMCkKKysrIEphdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTM5LDggKzUz
OSw4IEBAIG5hbWVzcGFjZSBBUk0gewogICAgICAgICB7CiAgICAgICAgICAgICBBUk1Xb3JkKiBp
bnNuID0gcmVpbnRlcnByZXRfY2FzdDxBUk1Xb3JkKj4oZnJvbSk7CiAgICAgICAgICAgICBBUk1X
b3JkKiBhZGRyID0gZ2V0TGRySW1tQWRkcmVzcyhpbnNuKTsKLSAgICAgICAgICAgIEV4ZWN1dGFi
bGVBbGxvY2F0b3I6Ok1ha2VXcml0YWJsZSB1bnByb3RlY3QoYWRkciwgc2l6ZW9mKEFSTVdvcmQp
KTsKICAgICAgICAgICAgICphZGRyID0gcmVpbnRlcnByZXRfY2FzdDxBUk1Xb3JkPih0byk7Cisg
ICAgICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjpjYWNoZUZsdXNoKGFkZHIsIHNpemVvZihB
Uk1Xb3JkKSk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgQVJNV29yZCBwYXRjaENvbnN0
YW50UG9vbExvYWQoQVJNV29yZCBsb2FkLCBBUk1Xb3JkIHZhbHVlKQpAQCAtNTc2LDggKzU3Niw4
IEBAIG5hbWVzcGFjZSBBUk0gewogICAgICAgICAgICAgQVJNV29yZCogaW5zbiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8QVJNV29yZCo+KGZyb20pOwogICAgICAgICAgICAgQVNTRVJUKCgqaW5zbiAmIDB4
MGZmMDBmMDApID09IDB4MDU5MDAwMDApOwogCi0gICAgICAgICAgICBFeGVjdXRhYmxlQWxsb2Nh
dG9yOjpNYWtlV3JpdGFibGUgdW5wcm90ZWN0KGluc24sIHNpemVvZihBUk1Xb3JkKSk7CiAgICAg
ICAgICAgICAqaW5zbiA9ICgqaW5zbiAmIDB4ZjAwZmYwZmYpIHwgMHgwMjgwMDAwMDsKKyAgICAg
ICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNhY2hlRmx1c2goaW5zbiwgc2l6ZW9mKEFSTVdv
cmQpKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIExpbmtlcnMKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCShyZXZpc2lvbiA0NjIxMCkKKysrIEphdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTM5LDQxICsxNTM5LDQxIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIHJlbGlua0p1bXAo
dm9pZCogZnJvbSwgdm9pZCogdG8pCiAgICAgewotICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9y
OjpNYWtlV3JpdGFibGUgdW5wcm90ZWN0KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPihmcm9t
KSAtIDIsIDIgKiBzaXplb2YodWludDE2X3QpKTsKLQogICAgICAgICBBU1NFUlQoIShyZWludGVy
cHJldF9jYXN0PGludHB0cl90Pihmcm9tKSAmIDEpKTsKICAgICAgICAgQVNTRVJUKCEocmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4odG8pICYgMSkpOwogCiAgICAgICAgIGludHB0cl90IHJlbGF0
aXZlID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pIC0gcmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4oZnJvbSk7CiAgICAgICAgIGxpbmtXaXRoT2Zmc2V0KHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDE2X3QqPihmcm9tKSwgcmVsYXRpdmUpOworCisgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0
b3I6OmNhY2hlRmx1c2gocmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KGZyb20pIC0gMiwgMiAq
IHNpemVvZih1aW50MTZfdCkpOwogICAgIH0KICAgICAKICAgICBzdGF0aWMgdm9pZCByZWxpbmtD
YWxsKHZvaWQqIGZyb20sIHZvaWQqIHRvKQogICAgIHsKLSAgICAgICAgRXhlY3V0YWJsZUFsbG9j
YXRvcjo6TWFrZVdyaXRhYmxlIHVucHJvdGVjdChyZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4o
ZnJvbSkgLSA1LCA0ICogc2l6ZW9mKHVpbnQxNl90KSk7Ci0KICAgICAgICAgQVNTRVJUKCEocmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbSkgJiAxKSk7CiAgICAgICAgIEFTU0VSVChyZWlu
dGVycHJldF9jYXN0PGludHB0cl90Pih0bykgJiAxKTsKIAogICAgICAgICBzZXRQb2ludGVyKHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPihmcm9tKSAtIDEsIHRvKTsKKworICAgICAgICBFeGVj
dXRhYmxlQWxsb2NhdG9yOjpjYWNoZUZsdXNoKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPihm
cm9tKSAtIDUsIDQgKiBzaXplb2YodWludDE2X3QpKTsKICAgICB9CiAKICAgICBzdGF0aWMgdm9p
ZCByZXBhdGNoSW50MzIodm9pZCogd2hlcmUsIGludDMyX3QgdmFsdWUpCiAgICAgewotICAgICAg
ICBFeGVjdXRhYmxlQWxsb2NhdG9yOjpNYWtlV3JpdGFibGUgdW5wcm90ZWN0KHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDE2X3QqPih3aGVyZSkgLSA0LCA0ICogc2l6ZW9mKHVpbnQxNl90KSk7Ci0KICAg
ICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4od2hlcmUpICYgMSkpOwog
ICAgICAgICAKICAgICAgICAgc2V0SW50MzIod2hlcmUsIHZhbHVlKTsKKworICAgICAgICBFeGVj
dXRhYmxlQWxsb2NhdG9yOjpjYWNoZUZsdXNoKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPih3
aGVyZSkgLSA0LCA0ICogc2l6ZW9mKHVpbnQxNl90KSk7CiAgICAgfQogCiAgICAgc3RhdGljIHZv
aWQgcmVwYXRjaFBvaW50ZXIodm9pZCogd2hlcmUsIHZvaWQqIHZhbHVlKQogICAgIHsKLSAgICAg
ICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6TWFrZVdyaXRhYmxlIHVucHJvdGVjdChyZWludGVycHJl
dF9jYXN0PHVpbnQxNl90Kj4od2hlcmUpIC0gNCwgNCAqIHNpemVvZih1aW50MTZfdCkpOwotCiAg
ICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHdoZXJlKSAmIDEpKTsK
ICAgICAgICAgCiAgICAgICAgIHNldFBvaW50ZXIod2hlcmUsIHZhbHVlKTsKKworICAgICAgICBF
eGVjdXRhYmxlQWxsb2NhdG9yOjpjYWNoZUZsdXNoKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3Qq
Pih3aGVyZSkgLSA0LCA0ICogc2l6ZW9mKHVpbnQxNl90KSk7CiAgICAgfQogCiAgICAgc3RhdGlj
IHZvaWQgcmVwYXRjaExvYWRQdHJUb0xFQSh2b2lkKiB3aGVyZSkKQEAgLTE1ODMsOCArMTU4Myw4
IEBAIHB1YmxpYzoKICAgICAgICAgdWludDE2X3QqIGxvYWRPcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDE2X3QqPih3aGVyZSkgKyA0OwogICAgICAgICBBU1NFUlQoKCpsb2FkT3AgJiAweGZmZjAp
ID09IE9QX0xEUl9yZWdfVDIpOwogCi0gICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6Ok1ha2VX
cml0YWJsZSB1bnByb3RlY3QobG9hZE9wLCBzaXplb2YodWludDE2X3QpKTsKICAgICAgICAgKmxv
YWRPcCA9IE9QX0FERF9yZWdfVDMgfCAoKmxvYWRPcCAmIDB4Zik7CisgICAgICAgIEV4ZWN1dGFi
bGVBbGxvY2F0b3I6OmNhY2hlRmx1c2gobG9hZE9wLCBzaXplb2YodWludDE2X3QpKTsKICAgICB9
CiAKIHByaXZhdGU6CkBAIC0xNjE1LDggKzE2MTUsNiBAQCBwcml2YXRlOgogICAgIHsKICAgICAg
ICAgdWludDE2X3QqIGxvY2F0aW9uID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KGNvZGUp
OwogCi0gICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6Ok1ha2VXcml0YWJsZSB1bnByb3RlY3Qo
bG9jYXRpb24gLSA0LCA0ICogc2l6ZW9mKHVpbnQxNl90KSk7Ci0KICAgICAgICAgdWludDE2X3Qg
bG8xNiA9IHZhbHVlOwogICAgICAgICB1aW50MTZfdCBoaTE2ID0gdmFsdWUgPj4gMTY7CiAKQEAg
LTE2MjQsNiArMTYyMiw4IEBAIHByaXZhdGU6CiAgICAgICAgIHNwbGljZUxvMTEobG9jYXRpb24g
LSAzLCBsbzE2KTsKICAgICAgICAgc3BsaWNlSGk1KGxvY2F0aW9uIC0gMiwgaGkxNik7CiAgICAg
ICAgIHNwbGljZUxvMTEobG9jYXRpb24gLSAxLCBoaTE2KTsKKworICAgICAgICBFeGVjdXRhYmxl
QWxsb2NhdG9yOjpjYWNoZUZsdXNoKGxvY2F0aW9uIC0gNCwgNCAqIHNpemVvZih1aW50MTZfdCkp
OwogICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIHNldFBvaW50ZXIodm9pZCogY29kZSwgdm9pZCog
dmFsdWUpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHJldmlzaW9u
IDQ2MjEwKQorKysgSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTc3LDYgKzE3Nyw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgICAgICBF
eGVjdXRhYmxlQWxsb2NhdG9yOjptYWtlRXhlY3V0YWJsZShjb2RlKCksIG1fc2l6ZSk7CisgICAg
ICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNhY2hlRmx1c2goY29kZSgpLCBtX3NpemUpOwogICAg
IH0KIAogICAgIFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4gbV9leGVjdXRhYmxlUG9vbDsKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgJ
KHJldmlzaW9uIDQ2MjEwKQorKysgSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQ29kZVJlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsMjggKzE2NSwyMCBAQCBwcml2YXRl
OgogY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHsKIHB1YmxpYzoKICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYoKQotI2lmbmRlZiBOREVCVUcKICAgICAgICAgOiBtX3NpemUoMCkKLSNlbmRp
ZgogICAgIHsKICAgICB9CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYodm9pZCogY29kZSwg
UGFzc1JlZlB0cjxFeGVjdXRhYmxlUG9vbD4gZXhlY3V0YWJsZVBvb2wsIHNpemVfdCBzaXplKQog
ICAgICAgICA6IG1fY29kZShjb2RlKQogICAgICAgICAsIG1fZXhlY3V0YWJsZVBvb2woZXhlY3V0
YWJsZVBvb2wpCisgICAgICAgICwgbV9zaXplKHNpemUpCiAgICAgewotI2lmbmRlZiBOREVCVUcK
LSAgICAgICAgbV9zaXplID0gc2l6ZTsKLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShzaXpl
KTsKLSNlbmRpZgogICAgIH0KIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2NvZGU7CiAg
ICAgUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBtX2V4ZWN1dGFibGVQb29sOwotI2lmbmRlZiBOREVC
VUcKICAgICBzaXplX3QgbV9zaXplOwotI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9SZXBhdGNoQnVmZmVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1JlcGF0Y2hCdWZmZXIuaAkocmV2aXNpb24g
NDYyMTApCisrKyBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUmVwYXRjaEJ1ZmZlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NSw4ICs0NSwxOCBAQCBjbGFzcyBSZXBhdGNoQnVmZmVyIHsKICAgICB0
eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBDb2RlUHRyOwogCiBwdWJsaWM6Ci0gICAgUmVw
YXRjaEJ1ZmZlcigpCisgICAgUmVwYXRjaEJ1ZmZlcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAg
ICB7CisgICAgICAgIEpJVENvZGUmIGNvZGUgPSBjb2RlQmxvY2stPmdldEpJVENvZGUoKTsKKyAg
ICAgICAgbV9zdGFydCA9IGNvZGUuc3RhcnQoKTsKKyAgICAgICAgbV9zaXplID0gY29kZS5zaXpl
KCk7CisKKyAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6bWFrZVdyaXRhYmxlKG1fc3RhcnQs
IG1fc2l6ZSk7CisgICAgfQorCisgICAgflJlcGF0Y2hCdWZmZXIoKQorICAgIHsKKyAgICAgICAg
RXhlY3V0YWJsZUFsbG9jYXRvcjo6bWFrZUV4ZWN1dGFibGUobV9zdGFydCwgbV9zaXplKTsKICAg
ICB9CiAKICAgICB2b2lkIHJlbGluayhDb2RlTG9jYXRpb25KdW1wIGp1bXAsIENvZGVMb2NhdGlv
bkxhYmVsIGRlc3RpbmF0aW9uKQpAQCAtMTEzLDYgKzEyMywxMCBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICByZWxpbmtOZWFyQ2FsbGVyVG9UcmFtcG9saW5lKHJldHVybkFkZHJlc3MsIENvZGVM
b2NhdGlvbkxhYmVsKG5ld0NhbGxlZUZ1bmN0aW9uKSk7CiAgICAgfQorCitwcml2YXRlOgorICAg
IHZvaWQqIG1fc3RhcnQ7CisgICAgc2l6ZV90IG1fc2l6ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkocmV2aXNp
b24gNDYyMTApCisrKyBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEzOTgsMjUgKzEzOTgsMjEgQEAgcHVibGljOgogCiAgICAgc3RhdGlj
IHZvaWQgcmVsaW5rSnVtcCh2b2lkKiBmcm9tLCB2b2lkKiB0bykKICAgICB7Ci0gICAgICAgIEV4
ZWN1dGFibGVBbGxvY2F0b3I6Ok1ha2VXcml0YWJsZSB1bnByb3RlY3QocmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oZnJvbSkgLSBzaXplb2YoaW50MzJfdCksIHNpemVvZihpbnQzMl90KSk7CiAgICAg
ICAgIHNldFJlbDMyKGZyb20sIHRvKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIHZvaWQgcmVs
aW5rQ2FsbCh2b2lkKiBmcm9tLCB2b2lkKiB0bykKICAgICB7Ci0gICAgICAgIEV4ZWN1dGFibGVB
bGxvY2F0b3I6Ok1ha2VXcml0YWJsZSB1bnByb3RlY3QocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
ZnJvbSkgLSBzaXplb2YoaW50MzJfdCksIHNpemVvZihpbnQzMl90KSk7CiAgICAgICAgIHNldFJl
bDMyKGZyb20sIHRvKTsKICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCByZXBhdGNoSW50MzIodm9p
ZCogd2hlcmUsIGludDMyX3QgdmFsdWUpCiAgICAgewotICAgICAgICBFeGVjdXRhYmxlQWxsb2Nh
dG9yOjpNYWtlV3JpdGFibGUgdW5wcm90ZWN0KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHdoZXJl
KSAtIHNpemVvZihpbnQzMl90KSwgc2l6ZW9mKGludDMyX3QpKTsKICAgICAgICAgc2V0SW50MzIo
d2hlcmUsIHZhbHVlKTsKICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCByZXBhdGNoUG9pbnRlcih2
b2lkKiB3aGVyZSwgdm9pZCogdmFsdWUpCiAgICAgewotICAgICAgICBFeGVjdXRhYmxlQWxsb2Nh
dG9yOjpNYWtlV3JpdGFibGUgdW5wcm90ZWN0KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHdoZXJl
KSAtIHNpemVvZih2b2lkKiksIHNpemVvZih2b2lkKikpOwogICAgICAgICBzZXRQb2ludGVyKHdo
ZXJlLCB2YWx1ZSk7CiAgICAgfQogCkBAIC0xNDI3LDcgKzE0MjMsNiBAQCBwdWJsaWM6CiAgICAg
ICAgIC8vIFNraXAgb3ZlciB0aGUgcHJlZml4IGJ5dGUuCiAgICAgICAgIHdoZXJlID0gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4od2hlcmUpICsgMTsKICNlbmRpZgotICAgICAgICBFeGVjdXRhYmxl
QWxsb2NhdG9yOjpNYWtlV3JpdGFibGUgdW5wcm90ZWN0KHdoZXJlLCAxKTsKICAgICAgICAgKnJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KHdoZXJlKSA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXI+KE9QX0xFQSk7CiAgICAgfQogICAgIApJbmRleDogSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgJKHJldmlzaW9uIDQ2MjEwKQorKysgSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw2ICsxMDUsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgY2FsbFJldHVybkxvY2F0aW9uOwog
ICAgICAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgaG90UGF0aEJlZ2luOwogICAgICAgICBD
b2RlTG9jYXRpb25OZWFyQ2FsbCBob3RQYXRoT3RoZXI7CisgICAgICAgIENvZGVCbG9jayogb3du
ZXJDb2RlQmxvY2s7CiAgICAgICAgIENvZGVCbG9jayogY2FsbGVlOwogICAgICAgICB1bnNpZ25l
ZCBwb3NpdGlvbjsKICAgICAgICAgCkBAIC0zMTksNiArMzIwLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShKSVQpCisgICAgICAgIEpJVENvZGUmIGdldEpJVENvZGUo
KSB7IHJldHVybiBvd25lck5vZGUoKS0+Z2VuZXJhdGVkSklUQ29kZSgpOyB9CiAgICAgICAgIHZv
aWQgc2V0SklUQ29kZShKSVRDb2RlKTsKICAgICAgICAgRXhlY3V0YWJsZVBvb2wqIGV4ZWN1dGFi
bGVQb29sKCkgeyByZXR1cm4gb3duZXJOb2RlKCktPmdldEV4ZWN1dGFibGVQb29sKCk7IH0KICNl
bmRpZgpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCShyZXZp
c2lvbiA0NjIxMCkKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE1Niw3ICsxNTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBwb29sLnJlbGVhc2UoKTsKICAgICB9CiAKLSNpZiBFTkFCTEUoQVNTRU1CTEVSX1dYX0VYQ0xV
U0lWRSkgfHwgIShQTEFURk9STShYODYpIHx8IFBMQVRGT1JNKFg4Nl82NCkpCisjaWYgRU5BQkxF
KEFTU0VNQkxFUl9XWF9FWENMVVNJVkUpCiAgICAgc3RhdGljIHZvaWQgbWFrZVdyaXRhYmxlKHZv
aWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIHJlcHJvdGVjdFJlZ2lvbihz
dGFydCwgc2l6ZSwgV3JpdGFibGUpOwpAQCAtMTY1LDU1ICsxNjUsMjYgQEAgcHVibGljOgogICAg
IHN0YXRpYyB2b2lkIG1ha2VFeGVjdXRhYmxlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZSkKICAg
ICB7CiAgICAgICAgIHJlcHJvdGVjdFJlZ2lvbihzdGFydCwgc2l6ZSwgRXhlY3V0YWJsZSk7Ci0g
ICAgICAgIGNhY2hlRmx1c2goc3RhcnQsIHNpemUpOwogICAgIH0KLQotICAgIC8vIElmIEFTU0VN
QkxFUl9XWF9FWENMVVNJVkUgcHJvdGVjdGlvbiBpcyB0dXJuZWQgb24sIG9yIG9uIG5vbi14ODYg
cGxhdGZvcm1zLAotICAgIC8vIHdlIG5lZWQgdG8gdHJhY2sgc3RhcnQgJiBzaXplIHNvIHdlIGNh
biBtYWtlRXhlY3V0YWJsZS9jYWNoZUZsdXNoIGF0IHRoZSBlbmQuCi0gICAgY2xhc3MgTWFrZVdy
aXRhYmxlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIE1ha2VXcml0YWJsZSh2b2lkKiBzdGFydCwg
c2l6ZV90IHNpemUpCi0gICAgICAgICAgICA6IG1fc3RhcnQoc3RhcnQpCi0gICAgICAgICAgICAs
IG1fc2l6ZShzaXplKQotICAgICAgICB7Ci0gICAgICAgICAgICBtYWtlV3JpdGFibGUoc3RhcnQs
IHNpemUpOwotICAgICAgICB9Ci0KLSAgICAgICAgfk1ha2VXcml0YWJsZSgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1ha2VFeGVjdXRhYmxlKG1fc3RhcnQsIG1fc2l6ZSk7Ci0gICAgICAgIH0K
LQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQqIG1fc3RhcnQ7Ci0gICAgICAgIHNpemVfdCBt
X3NpemU7Ci0gICAgfTsKICNlbHNlCiAgICAgc3RhdGljIHZvaWQgbWFrZVdyaXRhYmxlKHZvaWQq
LCBzaXplX3QpIHt9CiAgICAgc3RhdGljIHZvaWQgbWFrZUV4ZWN1dGFibGUodm9pZCosIHNpemVf
dCkge30KLQotICAgIC8vIE9uIHg4Niwgd2l0aG91dCBBU1NFTUJMRVJfV1hfRVhDTFVTSVZFLCB0
aGVyZSBpcyBub3RoaW5nIHRvIGRvIGhlcmUuCi0gICAgY2xhc3MgTWFrZVdyaXRhYmxlIHsgcHVi
bGljOiBNYWtlV3JpdGFibGUodm9pZCosIHNpemVfdCkge30gfTsKICNlbmRpZgogCi1wcml2YXRl
OgotCi0jaWYgRU5BQkxFKEFTU0VNQkxFUl9XWF9FWENMVVNJVkUpIHx8ICEoUExBVEZPUk0oWDg2
KSB8fCBQTEFURk9STShYODZfNjQpKQotI2lmIEVOQUJMRShBU1NFTUJMRVJfV1hfRVhDTFVTSVZF
KQotICAgIHN0YXRpYyB2b2lkIHJlcHJvdGVjdFJlZ2lvbih2b2lkKiwgc2l6ZV90LCBQcm90ZWN0
aW9uU2V0aW5nKTsKLSNlbHNlCi0gICAgc3RhdGljIHZvaWQgcmVwcm90ZWN0UmVnaW9uKHZvaWQq
LCBzaXplX3QsIFByb3RlY3Rpb25TZXRpbmcpIHt9Ci0jZW5kaWYKIAotICAgc3RhdGljIHZvaWQg
Y2FjaGVGbHVzaCh2b2lkKiBjb2RlLCBzaXplX3Qgc2l6ZSkKLSAgICB7CiAjaWYgUExBVEZPUk0o
WDg2KSB8fCBQTEFURk9STShYODZfNjQpCi0gICAgICAgIFVOVVNFRF9QQVJBTShjb2RlKTsKLSAg
ICAgICAgVU5VU0VEX1BBUkFNKHNpemUpOworICAgIHN0YXRpYyB2b2lkIGNhY2hlRmx1c2godm9p
ZCosIHNpemVfdCkKKyAgICB7CisgICAgfQogI2VsaWYgUExBVEZPUk1fQVJNX0FSQ0goNykgJiYg
UExBVEZPUk0oSVBIT05FKQorICAgIHN0YXRpYyB2b2lkIGNhY2hlRmx1c2godm9pZCogY29kZSwg
c2l6ZV90IHNpemUpCisgICAgewogICAgICAgICBzeXNfZGNhY2hlX2ZsdXNoKGNvZGUsIHNpemUp
OwogICAgICAgICBzeXNfaWNhY2hlX2ludmFsaWRhdGUoY29kZSwgc2l6ZSk7CisgICAgfQogI2Vs
aWYgUExBVEZPUk0oQVJNKQorICAgIHN0YXRpYyB2b2lkIGNhY2hlRmx1c2godm9pZCogY29kZSwg
c2l6ZV90IHNpemUpCisgICAgewogICAgICNpZiBDT01QSUxFUihHQ0MpICYmIChHQ0NfVkVSU0lP
TiA+PSAzMDQwNikKICAgICAgICAgX19jbGVhcl9jYWNoZShyZWludGVycHJldF9jYXN0PGNoYXIq
Pihjb2RlKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29kZSkgKyBzaXplKTsKICAgICAjZWxz
ZQpAQCAtMjI4LDEyICsxOTksMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgOiAgICJyIiAoY29k
ZSksICJyIiAocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29kZSkgKyBzaXplKSwgInIiIChzeXNj
YWxsKQogICAgICAgICAgICA6ICAgInIwIiwgInIxIiwgInI3Iik7CiAgICAgI2VuZGlmIC8vIENP
TVBJTEVSKEdDQykgJiYgKEdDQ19WRVJTSU9OID49IDMwNDA2KQotI2Vsc2UKLSNlcnJvciAiRXhl
Y3V0YWJsZUFsbG9jYXRvcjo6Y2FjaGVGbHVzaCBub3QgaW1wbGVtZW50ZWQgb24gdGhpcyBwbGF0
Zm9ybS4iCi0jZW5kaWYKICAgICB9CiAjZW5kaWYKIAorcHJpdmF0ZToKKworI2lmIEVOQUJMRShB
U1NFTUJMRVJfV1hfRVhDTFVTSVZFKQorICAgIHN0YXRpYyB2b2lkIHJlcHJvdGVjdFJlZ2lvbih2
b2lkKiwgc2l6ZV90LCBQcm90ZWN0aW9uU2V0aW5nKTsKKyNlbmRpZgorCiAgICAgUmVmUHRyPEV4
ZWN1dGFibGVQb29sPiBtX3NtYWxsQWxsb2NhdGlvblBvb2w7CiAgICAgc3RhdGljIHZvaWQgaW50
aWFsaXplUGFnZVNpemUoKTsKIH07CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gNDYyMTAp
CisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMjEg
KzQ3LDIxIEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lk
IGN0aVBhdGNoTmVhckNhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbmV3Q2FsbGVlRnVuY3Rpb24pCit2b2lkIGN0
aVBhdGNoTmVhckNhbGxCeVJldHVybkFkZHJlc3MoQ29kZUJsb2NrKiBjb2RlYmxvY2ssIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG5ld0NhbGxl
ZUZ1bmN0aW9uKQogewotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcjsKKyAgICBSZXBh
dGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZWJsb2NrKTsKICAgICByZXBhdGNoQnVmZmVyLnJl
bGlua05lYXJDYWxsZXJUb1RyYW1wb2xpbmUocmV0dXJuQWRkcmVzcywgbmV3Q2FsbGVlRnVuY3Rp
b24pOwogfQogCi12b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBuZXdDYWxsZWVGdW5jdGlv
bikKK3ZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKENvZGVCbG9jayogY29kZWJsb2Nr
LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBu
ZXdDYWxsZWVGdW5jdGlvbikKIHsKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXI7Cisg
ICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVibG9jayk7CiAgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmtDYWxsZXJUb1RyYW1wb2xpbmUocmV0dXJuQWRkcmVzcywgbmV3Q2FsbGVlRnVu
Y3Rpb24pOwogfQogCi12b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRy
ZXNzUHRyIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyIG5ld0NhbGxlZUZ1bmN0aW9uKQordm9p
ZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoQ29kZUJsb2NrKiBjb2RlYmxvY2ssIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIgbmV3Q2FsbGVlRnVuY3Rpb24p
CiB7Ci0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyOworICAgIFJlcGF0Y2hCdWZmZXIg
cmVwYXRjaEJ1ZmZlcihjb2RlYmxvY2spOwogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVy
VG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBuZXdDYWxsZWVGdW5jdGlvbik7CiB9CiAKQEAgLTQ5
MCw2ICs0OTAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGUoKQogI2lmIEVOQUJMRShKSVRf
T1BUSU1JWkVfQ0FMTCkKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb2RlQmxvY2st
Pm51bWJlck9mQ2FsbExpbmtJbmZvcygpOyArK2kpIHsKICAgICAgICAgQ2FsbExpbmtJbmZvJiBp
bmZvID0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mbyhpKTsKKyAgICAgICAgaW5mby5vd25lckNv
ZGVCbG9jayA9IG1fY29kZUJsb2NrOwogICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9
IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGls
YXRpb25JbmZvW2ldLmNhbGxSZXR1cm5Mb2NhdGlvbik7CiAgICAgICAgIGluZm8uaG90UGF0aEJl
Z2luID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRp
b25JbmZvW2ldLmhvdFBhdGhCZWdpbik7CiAgICAgICAgIGluZm8uaG90UGF0aE90aGVyID0gcGF0
Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlv
bkluZm9baV0uaG90UGF0aE90aGVyKTsKQEAgLTkwNSwxNCArOTA2LDE0IEBAIHZvaWQgSklUOjp1
bmxpbmtDYWxsKENhbGxMaW5rSW5mbyogY2FsbEwKICAgICAvLyBXaGVuIHRoZSBKU0Z1bmN0aW9u
IGlzIGRlbGV0ZWQgdGhlIHBvaW50ZXIgZW1iZWRkZWQgaW4gdGhlIGluc3RydWN0aW9uIHN0cmVh
bSB3aWxsIG5vIGxvbmdlciBiZSB2YWxpZAogICAgIC8vIChhbmQsIGlmIGEgbmV3IEpTRnVuY3Rp
b24gaGFwcGVuZWQgdG8gYmUgY29uc3RydWN0ZWQgYXQgdGhlIHNhbWUgbG9jYXRpb24sIHdlIGNv
dWxkIGdldCBhIGZhbHNlIHBvc2l0aXZlCiAgICAgLy8gbWF0Y2gpLiAgUmVzZXQgdGhlIGNoZWNr
IHNvIGl0IG5vIGxvbmdlciBtYXRjaGVzLgotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZl
cjsKKyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbExpbmtJbmZvLT5vd25lckNv
ZGVCbG9jayk7CiAgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKGNhbGxMaW5rSW5mby0+aG90UGF0
aEJlZ2luLCBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSk7CiB9CiAKLXZvaWQgSklUOjpsaW5r
Q2FsbChKU0Z1bmN0aW9uKiBjYWxsZWUsIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCBKSVRD
b2RlJiBjb2RlLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgaW50IGNhbGxlckFyZ0NvdW50
LCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCit2b2lkIEpJVDo6bGlua0NhbGwoSlNGdW5jdGlv
biogY2FsbGVlLCBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jaywgQ29kZUJsb2NrKiBjYWxsZWVD
b2RlQmxvY2ssIEpJVENvZGUmIGNvZGUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBpbnQg
Y2FsbGVyQXJnQ291bnQsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKICAgICBBU1NFUlQo
Y2FsbGVlQ29kZUJsb2NrKTsKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXI7CisgICAg
UmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxlckNvZGVCbG9jayk7CiAKICAgICAvLyBD
dXJyZW50bHkgd2Ugb25seSBsaW5rIGNhbGxzIHdpdGggdGhlIGV4YWN0IG51bWJlciBvZiBhcmd1
bWVudHMuCiAgICAgLy8gSWYgdGhpcyBpcyBhIG5hdGl2ZSBjYWxsIGNhbGxlZUNvZGVCbG9jayBp
cyBudWxsIHNvIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBpcyB1bmltcG9ydGFudApJbmRleDog
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAkocmV2aXNpb24gNDYyMTApCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdv
cmtpbmcgY29weSkKQEAgLTE3MSw5ICsxNzEsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9Owog
CiAgICAgLy8gTmVhciBjYWxscyBjYW4gb25seSBiZSBwYXRjaGVkIHRvIG90aGVyIEpJVCBjb2Rl
LCByZWd1bGFyIGNhbGxzIGNhbiBiZSBwYXRjaGVkIHRvIEpJVCBjb2RlIG9yIHJlbGlua2VkIHRv
IHN0dWIgZnVuY3Rpb25zLgotICAgIHZvaWQgY3RpUGF0Y2hOZWFyQ2FsbEJ5UmV0dXJuQWRkcmVz
cyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBu
ZXdDYWxsZWVGdW5jdGlvbik7Ci0gICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3Mo
UmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbmV3
Q2FsbGVlRnVuY3Rpb24pOwotICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJl
dHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIgbmV3Q2FsbGVlRnVuY3Rp
b24pOworICAgIHZvaWQgY3RpUGF0Y2hOZWFyQ2FsbEJ5UmV0dXJuQWRkcmVzcyhDb2RlQmxvY2sq
IGNvZGVibG9jaywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgbmV3Q2FsbGVlRnVuY3Rpb24pOworICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1
cm5BZGRyZXNzKENvZGVCbG9jayogY29kZWJsb2NrLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBuZXdDYWxsZWVGdW5jdGlvbik7CisgICAgdm9p
ZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoQ29kZUJsb2NrKiBjb2RlYmxvY2ssIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIgbmV3Q2FsbGVlRnVuY3Rpb24p
OwogCiAgICAgY2xhc3MgSklUIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBKSVRTdHViQ2FsbDsKQEAgLTM3OSw5ICszNzksOSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhl
eGVjdXRhYmxlUG9vbCwgZ2xvYmFsRGF0YSwgY3RpQXJyYXlMZW5ndGhUcmFtcG9saW5lLCBjdGlT
dHJpbmdMZW5ndGhUcmFtcG9saW5lLCBjdGlWaXJ0dWFsQ2FsbFByZUxpbmssIGN0aVZpcnR1YWxD
YWxsTGluaywgY3RpVmlydHVhbENhbGwsIGN0aU5hdGl2ZUNhbGxUaHVuayk7CiAgICAgICAgIH0K
IAotICAgICAgICBzdGF0aWMgdm9pZCBwYXRjaEdldEJ5SWRTZWxmKFN0cnVjdHVyZVN0dWJJbmZv
KiwgU3RydWN0dXJlKiwgc2l6ZV90IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1
cm5BZGRyZXNzKTsKLSAgICAgICAgc3RhdGljIHZvaWQgcGF0Y2hQdXRCeUlkUmVwbGFjZShTdHJ1
Y3R1cmVTdHViSW5mbyosIFN0cnVjdHVyZSosIHNpemVfdCBjYWNoZWRPZmZzZXQsIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHBhdGNoTWV0aG9k
Q2FsbFByb3RvKE1ldGhvZENhbGxMaW5rSW5mbyYsIEpTRnVuY3Rpb24qLCBTdHJ1Y3R1cmUqLCBK
U09iamVjdCopOworICAgICAgICBzdGF0aWMgdm9pZCBwYXRjaEdldEJ5SWRTZWxmKENvZGVCbG9j
ayogY29kZWJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyosIFN0cnVjdHVyZSosIHNpemVfdCBjYWNo
ZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7CisgICAgICAgIHN0YXRp
YyB2b2lkIHBhdGNoUHV0QnlJZFJlcGxhY2UoQ29kZUJsb2NrKiBjb2RlYmxvY2ssIFN0cnVjdHVy
ZVN0dWJJbmZvKiwgU3RydWN0dXJlKiwgc2l6ZV90IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVz
c1B0ciByZXR1cm5BZGRyZXNzKTsKKyAgICAgICAgc3RhdGljIHZvaWQgcGF0Y2hNZXRob2RDYWxs
UHJvdG8oQ29kZUJsb2NrKiBjb2RlYmxvY2ssIE1ldGhvZENhbGxMaW5rSW5mbyYsIEpTRnVuY3Rp
b24qLCBTdHJ1Y3R1cmUqLCBKU09iamVjdCopOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBp
bGVQYXRjaEdldEFycmF5TGVuZ3RoKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKICAgICAgICAgewpA
QCAtMzg5LDcgKzM4OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIGpp
dC5wcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgocmV0dXJuQWRkcmVzcyk7CiAgICAg
ICAgIH0KIAotICAgICAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbChKU0Z1bmN0aW9uKiBjYWxsZWUs
IENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCBKSVRDb2RlJiwgQ2FsbExpbmtJbmZvKiwgaW50
IGNhbGxlckFyZ0NvdW50LCBKU0dsb2JhbERhdGEqKTsKKyAgICAgICAgc3RhdGljIHZvaWQgbGlu
a0NhbGwoSlNGdW5jdGlvbiogY2FsbGVlLCBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jaywgQ29k
ZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIEpJVENvZGUmLCBDYWxsTGlua0luZm8qLCBpbnQgY2Fs
bGVyQXJnQ291bnQsIEpTR2xvYmFsRGF0YSopOwogICAgICAgICBzdGF0aWMgdm9pZCB1bmxpbmtD
YWxsKENhbGxMaW5rSW5mbyopOwogCiAgICAgcHJpdmF0ZToKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUu
aAkocmV2aXNpb24gNDYyMTApCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MywxMyArODMsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICAgICAgbV9yZWYubV9jb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlZ2lzdGVyRmlsZSwgY2Fs
bEZyYW1lLCBleGNlcHRpb24sIFByb2ZpbGVyOjplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UoKSwg
Z2xvYmFsRGF0YSkpOwogICAgICAgICB9CiAKLSNpZm5kZWYgTkRFQlVHCisgICAgICAgIHZvaWQq
IHN0YXJ0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fcmVmLm1fY29kZS5kYXRh
TG9jYXRpb24oKTsKKyAgICAgICAgfQorCiAgICAgICAgIHNpemVfdCBzaXplKCkKICAgICAgICAg
ewogICAgICAgICAgICAgQVNTRVJUKG1fcmVmLm1fY29kZS5leGVjdXRhYmxlQWRkcmVzcygpKTsK
ICAgICAgICAgICAgIHJldHVybiBtX3JlZi5tX3NpemU7CiAgICAgICAgIH0KLSNlbmRpZgogCiAg
ICAgICAgIEV4ZWN1dGFibGVQb29sKiBnZXRFeGVjdXRhYmxlUG9vbCgpCiAgICAgICAgIHsKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gNDYy
MTApCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MDMsMTMgKzUwMywxMyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRC
eUlkVHJhbnNpdGlvCiAgICAgCiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBh
dGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7CiAgICAgc3R1YkluZm8tPnN0dWJSb3V0
aW5lID0gZW50cnlMYWJlbDsKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXI7CisgICAg
UmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKICAgICByZXBhdGNoQnVm
ZmVyLnJlbGlua0NhbGxlclRvVHJhbXBvbGluZShyZXR1cm5BZGRyZXNzLCBlbnRyeUxhYmVsKTsK
IH0KIAotdm9pZCBKSVQ6OnBhdGNoR2V0QnlJZFNlbGYoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzKQordm9pZCBKSVQ6OnBhdGNoR2V0QnlJZFNlbGYoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIHNpemVfdCBjYWNoZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRk
cmVzcykKIHsKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXI7CisgICAgUmVwYXRjaEJ1
ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAKICAgICAvLyBXZSBkb24ndCB3YW50IHRv
IHBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9nZXRfYnlfaWRf
Z2VuZXJpYy4KICAgICAvLyBTaG91bGQgcHJvYmFibHkgZ28gdG8gSklUU3R1YnM6OmN0aV9vcF9n
ZXRfYnlfaWRfZmFpbCwgYnV0IHRoYXQgZG9lc24ndCBkbyBhbnl0aGluZyBpbnRlcmVzdGluZyBy
aWdodCBub3cuCkBAIC01MjcsOSArNTI3LDkgQEAgdm9pZCBKSVQ6OnBhdGNoR2V0QnlJZFNlbGYo
U3RydWN0dXJlU3R1YgogICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby0+aG90UGF0
aEJlZ2luLmRhdGFMYWJlbDMyQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBP
ZmZzZXQpLCBvZmZzZXQpOwogfQogCi12b2lkIEpJVDo6cGF0Y2hNZXRob2RDYWxsUHJvdG8oTWV0
aG9kQ2FsbExpbmtJbmZvJiBtZXRob2RDYWxsTGlua0luZm8sIEpTRnVuY3Rpb24qIGNhbGxlZSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90bykKK3ZvaWQgSklUOjpwYXRjaE1l
dGhvZENhbGxQcm90byhDb2RlQmxvY2sqIGNvZGVCbG9jaywgTWV0aG9kQ2FsbExpbmtJbmZvJiBt
ZXRob2RDYWxsTGlua0luZm8sIEpTRnVuY3Rpb24qIGNhbGxlZSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEpTT2JqZWN0KiBwcm90bykKIHsKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXI7
CisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAKICAgICBBU1NF
UlQoIW1ldGhvZENhbGxMaW5rSW5mby5jYWNoZWRTdHJ1Y3R1cmUpOwogICAgIG1ldGhvZENhbGxM
aW5rSW5mby5jYWNoZWRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CkBAIC01NDYsOSArNTQ2LDkgQEAg
dm9pZCBKSVQ6OnBhdGNoTWV0aG9kQ2FsbFByb3RvKE1ldGhvZENhbAogICAgIHJlcGF0Y2hCdWZm
ZXIucmVwYXRjaChtZXRob2RDYWxsTGlua0luZm8uc3RydWN0dXJlTGFiZWwuZGF0YUxhYmVsUHRy
QXRPZmZzZXQocGF0Y2hPZmZzZXRNZXRob2RDaGVja1B1dEZ1bmN0aW9uKSwgY2FsbGVlKTsKIH0K
IAotdm9pZCBKSVQ6OnBhdGNoUHV0QnlJZFJlcGxhY2UoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzKQordm9pZCBKSVQ6OnBhdGNoUHV0QnlJZFJlcGxhY2UoQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIHNpemVfdCBjYWNoZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJu
QWRkcmVzcykKIHsKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXI7CisgICAgUmVwYXRj
aEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAKICAgICAvLyBXZSBkb24ndCB3YW50
IHRvIHBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlf
aWRfZ2VuZXJpYy4KICAgICAvLyBTaG91bGQgcHJvYmFibHkgZ28gdG8gSklUU3R1YnM6OmN0aV9v
cF9wdXRfYnlfaWRfZmFpbCwgYnV0IHRoYXQgZG9lc24ndCBkbyBhbnl0aGluZyBpbnRlcmVzdGlu
ZyByaWdodCBub3cuCkBAIC01OTgsNyArNTk4LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
UGF0Y2hHZXRBcnJheUxlbgogCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93
IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29k
ZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBB
dE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKLSAgICBSZXBhdGNo
QnVmZmVyIHJlcGF0Y2hCdWZmZXI7CisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1f
Y29kZUJsb2NrKTsKICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5
TGFiZWwpOwogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXRjaCBtb3JlIHRoYW4gb25jZSAt
IGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCkBAIC02NDQsNyArNjQ0
LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvKFN0cgogCiAgICAgLy8g
RmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGgg
dG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24g
PSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRC
cmFuY2hUb1Nsb3dDYXNlKTsKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXI7CisgICAg
UmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKICAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOwogCiAgICAgLy8gV2UgZG9uJ3Qg
d2FudCB0byBwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0
X2J5X2lkX2dlbmVyaWMuCkBAIC02NzYsNyArNjc2LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlR2V0QnlJZFNlbGZMaXN0KAogCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBz
bG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAg
Q29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1
bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKLSAgICBSZXBh
dGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXI7CisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVy
KG1fY29kZUJsb2NrKTsKICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVu
dHJ5TGFiZWwpOwogfQogCkBAIC03MjEsNyArNzIxLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlR2V0QnlJZFByb3RvTGlzdAogCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBz
bG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAg
Q29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1
bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKLSAgICBSZXBh
dGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXI7CisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVy
KG1fY29kZUJsb2NrKTsKICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVu
dHJ5TGFiZWwpOwogfQogCkBAIC03NzUsNyArNzc1LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlR2V0QnlJZENoYWluTGlzdAogCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBz
bG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAg
Q29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1
bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKLSAgICBSZXBh
dGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXI7CisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVy
KG1fY29kZUJsb2NrKTsKICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVu
dHJ5TGFiZWwpOwogfQogCkBAIC04MjMsNyArODIzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlR2V0QnlJZENoYWluKFN0cgogCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBz
bG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAg
Q29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1
bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKLSAgICBSZXBh
dGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXI7CisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVy
KG1fY29kZUJsb2NrKTsKICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVu
dHJ5TGFiZWwpOwogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXRjaCBtb3JlIHRoYW4gb25j
ZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDQ2MjEwKQorKysgSmF2YVNjcmlwdENvcmUvaml0
L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU4LDcgKzM1OCw3IEBAIE5FVkVSX0lO
TElORSB2b2lkIEpJVFRodW5rczo6dHJ5Q2FjaGVQdXQKIAogICAgIC8vIFVuY2FjaGVhYmxlOiBn
aXZlIHVwLgogICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpKSB7Ci0gICAgICAgIGN0aVBhdGNo
Q2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihKSVRTdHViczo6
Y3RpX29wX3B1dF9ieV9pZF9nZW5lcmljKSk7CisgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJu
QWRkcmVzcyhjb2RlQmxvY2ssIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKEpJVFN0dWJzOjpj
dGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAK
QEAgLTM2NiwxMyArMzY2LDEzIEBAIE5FVkVSX0lOTElORSB2b2lkIEpJVFRodW5rczo6dHJ5Q2Fj
aGVQdXQKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKTsK
IAogICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7Ci0gICAgICAgIGN0aVBhdGNo
Q2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihKSVRTdHViczo6
Y3RpX29wX3B1dF9ieV9pZF9nZW5lcmljKSk7CisgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJu
QWRkcmVzcyhjb2RlQmxvY2ssIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKEpJVFN0dWJzOjpj
dGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IC8vIElmIGJhc2VDZWxsICE9IGJhc2UsIHRoZW4gYmFzZUNlbGwgbXVzdCBiZSBhIHByb3h5IGZv
ciBhbm90aGVyIG9iamVjdC4KICAgICBpZiAoYmFzZUNlbGwgIT0gc2xvdC5iYXNlKCkpIHsKLSAg
ICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9u
UHRyKEpJVFN0dWJzOjpjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMpKTsKKyAgICAgICAgY3RpUGF0
Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNvZGVCbG9jaywgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25Q
dHIoSklUU3R1YnM6OmN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYykpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC0zODQsNyArMzg0LDcgQEAgTkVWRVJfSU5MSU5FIHZvaWQgSklUVGh1bmtz
Ojp0cnlDYWNoZVB1dAogICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5l
d1Byb3BlcnR5KSB7CiAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0
cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oY2FsbEZyYW1lKTsKICAgICAgICAgaWYgKCFwcm90b3R5
cGVDaGFpbi0+aXNDYWNoZWFibGUoKSkgewotICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1
cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKEpJVFN0dWJzOjpjdGlfb3BfcHV0
X2J5X2lkX2dlbmVyaWMpKTsKKyAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVz
cyhjb2RlQmxvY2ssIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKEpJVFN0dWJzOjpjdGlfb3Bf
cHV0X2J5X2lkX2dlbmVyaWMpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICBzdHViSW5mby0+aW5pdFB1dEJ5SWRUcmFuc2l0aW9uKHN0cnVjdHVyZS0+cHJldmlvdXNJ
RCgpLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluKTsKQEAgLTM5NCw3ICszOTQsNyBAQCBORVZF
Ul9JTkxJTkUgdm9pZCBKSVRUaHVua3M6OnRyeUNhY2hlUHV0CiAgICAgCiAgICAgc3R1YkluZm8t
PmluaXRQdXRCeUlkUmVwbGFjZShzdHJ1Y3R1cmUpOwogCi0gICAgSklUOjpwYXRjaFB1dEJ5SWRS
ZXBsYWNlKHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHJldHVybkFk
ZHJlc3MpOworICAgIEpJVDo6cGF0Y2hQdXRCeUlkUmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZv
LCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHJldHVybkFkZHJlc3MpOwogfQogCiBO
RVZFUl9JTkxJTkUgdm9pZCBKSVRUaHVua3M6OnRyeUNhY2hlR2V0QnlJRChDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRk
cmVzcywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90KQpAQCAtNDA0LDcgKzQwNCw3IEBAIE5FVkVSX0lOTElO
RSB2b2lkIEpJVFRodW5rczo6dHJ5Q2FjaGVHZXQKIAogICAgIC8vIEZJWE1FOiBDYWNoZSBwcm9w
ZXJ0eSBhY2Nlc3MgZm9yIGltbWVkaWF0ZXMuCiAgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkp
IHsKLSAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsIEZ1
bmN0aW9uUHRyKEpJVFN0dWJzOjpjdGlfb3BfZ2V0X2J5X2lkX2dlbmVyaWMpKTsKKyAgICAgICAg
Y3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNvZGVCbG9jaywgcmV0dXJuQWRkcmVzcywgRnVu
Y3Rpb25QdHIoSklUU3R1YnM6OmN0aV9vcF9nZXRfYnlfaWRfZ2VuZXJpYykpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIApAQCAtNDE4LDEzICs0MTgsMTMgQEAgTkVWRVJfSU5MSU5FIHZv
aWQgSklUVGh1bmtzOjp0cnlDYWNoZUdldAogICAgIGlmIChpc0pTU3RyaW5nKGdsb2JhbERhdGEs
IGJhc2VWYWx1ZSkgJiYgcHJvcGVydHlOYW1lID09IGNhbGxGcmFtZS0+cHJvcGVydHlOYW1lcygp
Lmxlbmd0aCkgewogICAgICAgICAvLyBUaGUgdHJhZGVvZmYgb2YgY29tcGlsaW5nIGFuIHBhdGNo
ZWQgaW5saW5lIHN0cmluZyBsZW5ndGggYWNjZXNzIHJvdXRpbmUgZG9lcyBub3Qgc2VlbQogICAg
ICAgICAvLyB0byBwYXkgb2ZmLCBzbyB3ZSBjdXJyZW50bHkgb25seSBkbyB0aGlzIGZvciBhcnJh
eXMuCi0gICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCBn
bG9iYWxEYXRhLT5qaXRTdHVicy5jdGlTdHJpbmdMZW5ndGhUcmFtcG9saW5lKCkpOworICAgICAg
ICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY29kZUJsb2NrLCByZXR1cm5BZGRyZXNzLCBn
bG9iYWxEYXRhLT5qaXRTdHVicy5jdGlTdHJpbmdMZW5ndGhUcmFtcG9saW5lKCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gVW5jYWNoZWFibGU6IGdpdmUgdXAuCiAgICAgaWYg
KCFzbG90LmlzQ2FjaGVhYmxlKCkpIHsKLSAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRy
ZXNzKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKEpJVFN0dWJzOjpjdGlfb3BfZ2V0X2J5X2lk
X2dlbmVyaWMpKTsKKyAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNvZGVCbG9j
aywgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoSklUU3R1YnM6OmN0aV9vcF9nZXRfYnlfaWRf
Z2VuZXJpYykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00MzIsNyArNDMyLDcgQEAg
TkVWRVJfSU5MSU5FIHZvaWQgSklUVGh1bmtzOjp0cnlDYWNoZUdldAogICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgpOwogCiAgICAgaWYgKHN0cnVjdHVyZS0+
aXNEaWN0aW9uYXJ5KCkpIHsKLSAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJl
dHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKEpJVFN0dWJzOjpjdGlfb3BfZ2V0X2J5X2lkX2dlbmVy
aWMpKTsKKyAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNvZGVCbG9jaywgcmV0
dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoSklUU3R1YnM6OmN0aV9vcF9nZXRfYnlfaWRfZ2VuZXJp
YykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00NDcsNyArNDQ3LDcgQEAgTkVWRVJf
SU5MSU5FIHZvaWQgSklUVGh1bmtzOjp0cnlDYWNoZUdldAogICAgICAgICAvLyBzZXQgdGhpcyB1
cCwgc28gZGVyZWZTdHJ1Y3R1cmVzIGNhbiBkbyBpdCdzIGpvYi4KICAgICAgICAgc3R1YkluZm8t
PmluaXRHZXRCeUlkU2VsZihzdHJ1Y3R1cmUpOwogCi0gICAgICAgIEpJVDo6cGF0Y2hHZXRCeUlk
U2VsZihzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCByZXR1cm5BZGRy
ZXNzKTsKKyAgICAgICAgSklUOjpwYXRjaEdldEJ5SWRTZWxmKGNvZGVCbG9jaywgc3R1YkluZm8s
IHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgcmV0dXJuQWRkcmVzcyk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTQ3NSw3ICs0NzUsNyBAQCBORVZFUl9JTkxJTkUgdm9pZCBK
SVRUaHVua3M6OnRyeUNhY2hlR2V0CiAKICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hh
aW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGNhbGxGcmFtZSk7CiAgICAgaWYgKCFwcm90
b3R5cGVDaGFpbi0+aXNDYWNoZWFibGUoKSkgewotICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVy
bkFkZHJlc3MocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoSklUU3R1YnM6OmN0aV9vcF9nZXRf
YnlfaWRfZ2VuZXJpYykpOworICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY29k
ZUJsb2NrLCByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihKSVRTdHViczo6Y3RpX29wX2dldF9i
eV9pZF9nZW5lcmljKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgc3R1YkluZm8tPmlu
aXRHZXRCeUlkQ2hhaW4oc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbik7CkBAIC03NzcsNyArNzc3
LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X2J5X2lkKQogICAgIFB1dFBy
b3BlcnR5U2xvdCBzbG90OwogICAgIHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCkucHV0KGNh
bGxGcmFtZSwgaWRlbnQsIHN0YWNrRnJhbWUuYXJnc1syXS5qc1ZhbHVlKCksIHNsb3QpOwogCi0g
ICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFNUVUJfUkVUVVJOX0FERFJFU1MsIEZ1bmN0
aW9uUHRyKGN0aV9vcF9wdXRfYnlfaWRfc2Vjb25kKSk7CisgICAgY3RpUGF0Y2hDYWxsQnlSZXR1
cm5BZGRyZXNzKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIFNUVUJfUkVUVVJOX0FERFJFU1MsIEZ1
bmN0aW9uUHRyKGN0aV9vcF9wdXRfYnlfaWRfc2Vjb25kKSk7CiAKICAgICBDSEVDS19GT1JfRVhD
RVBUSU9OX0FUX0VORCgpOwogfQpAQCAtODMxLDcgKzgzMSw3IEBAIERFRklORV9TVFVCX0ZVTkNU
SU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUp
OwogICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGlkZW50LCBz
bG90KTsKIAotICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhTVFVCX1JFVFVSTl9BRERS
RVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3NlY29uZCkpOworICAgIGN0aVBhdGNo
Q2FsbEJ5UmV0dXJuQWRkcmVzcyhjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBTVFVCX1JFVFVSTl9B
RERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3NlY29uZCkpOwogCiAgICAgQ0hF
Q0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CkBAIC04NDgsNyArODQ4LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpT
VmFsdWUsIG9wXwogICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7CiAgICAgSlNWYWx1
ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwgaWRlbnQsIHNsb3QpOwogCi0gICAg
Y3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFNUVUJfUkVUVVJOX0FERFJFU1MsIEZ1bmN0aW9u
UHRyKGN0aV9vcF9nZXRfYnlfaWRfbWV0aG9kX2NoZWNrX3NlY29uZCkpOworICAgIGN0aVBhdGNo
Q2FsbEJ5UmV0dXJuQWRkcmVzcyhjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBTVFVCX1JFVFVSTl9B
RERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX21ldGhvZF9jaGVja19zZWNvbmQp
KTsKIAogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOwpAQCAtOTAwLDcgKzkwMCw3IEBAIERFRklORV9TVFVCX0ZVTkNU
SU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KIAogICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhl
IGZ1bmN0aW9uIGlzIG9uIHRoZSBvYmplY3QncyBwcm90b3R5cGUuICBQYXRjaCB1cCB0aGUgY29k
ZSB0byBvcHRpbWl6ZS4KICAgICAgICAgaWYgKHNsb3Quc2xvdEJhc2UoKSA9PSBzdHJ1Y3R1cmUt
PnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUpKQotICAgICAgICAgICAgSklUOjpwYXRjaE1l
dGhvZENhbGxQcm90byhtZXRob2RDYWxsTGlua0luZm8sIGNhbGxlZSwgc3RydWN0dXJlLCBzbG90
QmFzZU9iamVjdCk7CisgICAgICAgICAgICBKSVQ6OnBhdGNoTWV0aG9kQ2FsbFByb3RvKGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCksIG1ldGhvZENhbGxMaW5rSW5mbywgY2FsbGVlLCBzdHJ1Y3R1cmUs
IHNsb3RCYXNlT2JqZWN0KTsKICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBmdW5jdGlv
biBpcyBvbiB0aGUgb2JqZWN0IGl0c2VsZi4KICAgICAgICAgLy8gU2luY2Ugd2UgZ2VuZXJhdGUg
dGhlIG1ldGhvZC1jaGVjayB0byBjaGVjayBib3RoIHRoZSBzdHJ1Y3R1cmUgYW5kIGEgcHJvdG90
eXBlLXN0cnVjdHVyZSAoc2luY2UgdGhpcwogICAgICAgICAvLyBpcyB0aGUgY29tbW9uIGNhc2Up
IHdlIGhhdmUgYSBwcm9ibGVtIC0gd2UgbmVlZCB0byBwYXRjaCB0aGUgcHJvdG90eXBlIHN0cnVj
dHVyZSBjaGVjayB0byBkbyBzb21ldGhpbmcKQEAgLTkwOCwxMyArOTA4LDEzIEBAIERFRklORV9T
VFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICAgICAgLy8gZm9yIG5vdy4gIEZv
ciBub3cgaXQgcGVyZm9ybXMgYSBjaGVjayBvbiBhIHNwZWNpYWwgb2JqZWN0IG9uIHRoZSBnbG9i
YWwgb2JqZWN0IG9ubHkgdXNlZCBmb3IgdGhpcwogICAgICAgICAvLyBwdXJwb3NlLiAgVGhlIG9i
amVjdCBpcyBpbiBubyB3YXkgZXhwb3NlZCwgYW5kIGFzIHN1Y2ggdGhlIGNoZWNrIHdpbGwgYWx3
YXlzIHBhc3MuCiAgICAgICAgIGVsc2UgaWYgKHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUp
Ci0gICAgICAgICAgICBKSVQ6OnBhdGNoTWV0aG9kQ2FsbFByb3RvKG1ldGhvZENhbGxMaW5rSW5m
bywgY2FsbGVlLCBzdHJ1Y3R1cmUsIGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxPYmpl
Y3QoKS0+bWV0aG9kQ2FsbER1bW15KCkpOworICAgICAgICAgICAgSklUOjpwYXRjaE1ldGhvZENh
bGxQcm90byhjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBtZXRob2RDYWxsTGlua0luZm8sIGNhbGxl
ZSwgc3RydWN0dXJlLCBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+Z2xvYmFsT2JqZWN0KCktPm1l
dGhvZENhbGxEdW1teSgpKTsKIAogICAgICAgICAvLyBGb3Igbm93IGxldCBhbnkgb3RoZXIgY2Fz
ZSBiZSBjYWNoZWQgYXMgYSBub3JtYWwgZ2V0X2J5X2lkLgogICAgIH0KIAogICAgIC8vIFJldmVy
dCB0aGUgZ2V0X2J5X2lkIG9wIGJhY2sgdG8gYmVpbmcgYSByZWd1bGFyIGdldF9ieV9pZCAtIGFs
bG93IGl0IHRvIGNhY2hlIGxpa2Ugbm9ybWFsLCBpZiBpdCBuZWVkcyB0by4KLSAgICBjdGlQYXRj
aENhbGxCeVJldHVybkFkZHJlc3MoU1RVQl9SRVRVUk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3Rp
X29wX2dldF9ieV9pZCkpOworICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjYWxsRnJh
bWUtPmNvZGVCbG9jaygpLCBTVFVCX1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3Bf
Z2V0X2J5X2lkKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CkBA
IC05NzUsMTAgKzk3NSw5IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBv
cF8KICAgICAgICAgSklUOjpjb21waWxlR2V0QnlJZFNlbGZMaXN0KGNhbGxGcmFtZS0+c2NvcGVD
aGFpbigpLT5nbG9iYWxEYXRhLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBwb2x5bW9ycGhpY1N0cnVj
dHVyZUxpc3QsIGxpc3RJbmRleCwgYXNDZWxsKGJhc2VWYWx1ZSktPnN0cnVjdHVyZSgpLCBzbG90
LmNhY2hlZE9mZnNldCgpKTsKIAogICAgICAgICBpZiAobGlzdEluZGV4ID09IChQT0xZTU9SUEhJ
Q19MSVNUX0NBQ0hFX1NJWkUgLSAxKSkKLSAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJu
QWRkcmVzcyhTVFVCX1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lk
X2dlbmVyaWMpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFk
ZHJlc3MoU1RVQl9SRVRVUk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9n
ZW5lcmljKSk7Ci0gICAgfQorICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNz
KGNvZGVCbG9jaywgU1RVQl9SRVRVUk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9i
eV9pZF9nZW5lcmljKSk7CisgICAgfSBlbHNlCisgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJu
QWRkcmVzcyhjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBTVFVCX1JFVFVSTl9BRERSRVNTLCBGdW5j
dGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX2dlbmVyaWMpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CiB9CiAKQEAgLTEwMjQsNyArMTAyMyw3IEBAIERFRklORV9TVFVCX0ZV
TkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAK
ICAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSB8fCAhc2xvdC5pc0NhY2hlYWJsZSgpIHx8IGFz
Q2VsbChiYXNlVmFsdWUpLT5zdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpIHsKLSAgICAgICAg
Y3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFNUVUJfUkVUVVJOX0FERFJFU1MsIEZ1bmN0aW9u
UHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fZmFpbCkpOworICAgICAgICBjdGlQYXRjaENhbGxC
eVJldHVybkFkZHJlc3MoY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgU1RVQl9SRVRVUk5fQUREUkVT
UywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9wcm90b19mYWlsKSk7CiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9CiAKQEAgLTEwMzYsNyArMTAzNSw3
IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICBKU09iamVj
dCogc2xvdEJhc2VPYmplY3QgPSBhc09iamVjdChzbG90LnNsb3RCYXNlKCkpOwogCiAgICAgaWYg
KHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpCi0gICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0
dXJuQWRkcmVzcyhTVFVCX1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5
X2lkX3Byb3RvX2ZhaWwpKTsKKyAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNv
ZGVCbG9jaywgU1RVQl9SRVRVUk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9p
ZF9wcm90b19mYWlsKSk7CiAgICAgZWxzZSBpZiAoc2xvdC5zbG90QmFzZSgpID09IGFzQ2VsbChi
YXNlVmFsdWUpLT5zdHJ1Y3R1cmUoKS0+cHJvdG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSkpIHsK
ICAgICAgICAgLy8gU2luY2Ugd2UncmUgYWNjZXNzaW5nIGEgcHJvdG90eXBlIGluIGEgbG9vcCwg
aXQncyBhIGdvb2QgYmV0IHRoYXQgaXQKICAgICAgICAgLy8gc2hvdWxkIG5vdCBiZSB0cmVhdGVk
IGFzIGEgZGljdGlvbmFyeS4KQEAgLTEwNDksMTEgKzEwNDgsMTEgQEAgREVGSU5FX1NUVUJfRlVO
Q1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgICAgICBKSVQ6OmNvbXBpbGVHZXRCeUlkUHJv
dG9MaXN0KGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxEYXRhLCBjYWxsRnJhbWUsIGNv
ZGVCbG9jaywgc3R1YkluZm8sIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QsIGxpc3RJbmRleCwgc3Ry
dWN0dXJlLCBzbG90QmFzZU9iamVjdC0+c3RydWN0dXJlKCksIHNsb3QuY2FjaGVkT2Zmc2V0KCkp
OwogCiAgICAgICAgIGlmIChsaXN0SW5kZXggPT0gKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0la
RSAtIDEpKQotICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFNUVUJfUkVU
VVJOX0FERFJFU1MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdF9mdWxs
KSk7CisgICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY29kZUJsb2NrLCBT
VFVCX1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xp
c3RfZnVsbCkpOwogICAgIH0gZWxzZSBpZiAoc2l6ZV90IGNvdW50ID0gY291bnRQcm90b3R5cGVD
aGFpbkVudHJpZXNBbmRDaGVja0ZvclByb3hpZXMoY2FsbEZyYW1lLCBiYXNlVmFsdWUsIHNsb3Qp
KSB7CiAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b0NoYWluID0gc3RydWN0dXJlLT5wcm90
b3R5cGVDaGFpbihjYWxsRnJhbWUpOwogICAgICAgICBpZiAoIXByb3RvQ2hhaW4tPmlzQ2FjaGVh
YmxlKCkpIHsKLSAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhTVFVCX1JF
VFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2ZhaWwpKTsK
KyAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjb2RlQmxvY2ssIFNUVUJf
UkVUVVJOX0FERFJFU1MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fZmFpbCkp
OwogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgICAgICB9
CiAgICAgICAgIApAQCAtMTA2Miw5ICsxMDYxLDkgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5j
b2RlZEpTVmFsdWUsIG9wXwogICAgICAgICBKSVQ6OmNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KGNh
bGxGcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxEYXRhLCBjYWxsRnJhbWUsIGNvZGVCbG9jaywg
c3R1YkluZm8sIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QsIGxpc3RJbmRleCwgc3RydWN0dXJlLCBw
cm90b0NoYWluLCBjb3VudCwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAKICAgICAgICAgaWYgKGxp
c3RJbmRleCA9PSAoUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMSkpCi0gICAgICAgICAg
ICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoU1RVQl9SRVRVUk5fQUREUkVTUywgRnVuY3Rp
b25QdHIoY3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0X2Z1bGwpKTsKKyAgICAgICAgICAgIGN0
aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjb2RlQmxvY2ssIFNUVUJfUkVUVVJOX0FERFJFU1Ms
IEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdF9mdWxsKSk7CiAgICAgfSBl
bHNlCi0gICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhTVFVCX1JFVFVSTl9BRERS
RVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2ZhaWwpKTsKKyAgICAgICAg
Y3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNvZGVCbG9jaywgU1RVQl9SRVRVUk5fQUREUkVT
UywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9wcm90b19mYWlsKSk7CiAKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CkBAIC0xMjcxLDcgKzEyNzAsNyBAQCBERUZJ
TkVfU1RVQl9GVU5DVElPTih2b2lkKiwgdm1fZG9udExhenlMCiAgICAgSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhID0gc3RhY2tGcmFtZS5nbG9iYWxEYXRhOwogICAgIEpTRnVuY3Rpb24qIGNhbGxl
ZSA9IGFzRnVuY3Rpb24oc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKSk7CiAKLSAgICBjdGlQ
YXRjaE5lYXJDYWxsQnlSZXR1cm5BZGRyZXNzKHN0YWNrRnJhbWUuYXJnc1sxXS5yZXR1cm5BZGRy
ZXNzKCksIGdsb2JhbERhdGEtPmppdFN0dWJzLmN0aVZpcnR1YWxDYWxsTGluaygpKTsKKyAgICBj
dGlQYXRjaE5lYXJDYWxsQnlSZXR1cm5BZGRyZXNzKHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jYWxs
ZXJGcmFtZSgpLT5jb2RlQmxvY2soKSwgc3RhY2tGcmFtZS5hcmdzWzFdLnJldHVybkFkZHJlc3Mo
KSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMuY3RpVmlydHVhbENhbGxMaW5rKCkpOwogCiAgICAgcmV0
dXJuIGNhbGxlZS0+Ym9keSgpLT5nZW5lcmF0ZWRKSVRDb2RlKCkuYWRkcmVzc0ZvckNhbGwoKS5l
eGVjdXRhYmxlQWRkcmVzcygpOwogfQpAQCAtMTI5MCw3ICsxMjg5LDcgQEAgREVGSU5FX1NUVUJf
RlVOQ1RJT04odm9pZCosIHZtX2xhenlMaW5rQwogICAgICAgICBjb2RlQmxvY2sgPSAmY2FsbGVl
LT5ib2R5KCktPmdlbmVyYXRlZEJ5dGVjb2RlKCk7CiAKICAgICBDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbyA9ICZzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2Nr
KCktPmdldENhbGxMaW5rSW5mbyhzdGFja0ZyYW1lLmFyZ3NbMV0ucmV0dXJuQWRkcmVzcygpKTsK
LSAgICBKSVQ6OmxpbmtDYWxsKGNhbGxlZSwgY29kZUJsb2NrLCBqaXRDb2RlLCBjYWxsTGlua0lu
Zm8sIHN0YWNrRnJhbWUuYXJnc1syXS5pbnQzMigpLCBzdGFja0ZyYW1lLmdsb2JhbERhdGEpOwor
ICAgIEpJVDo6bGlua0NhbGwoY2FsbGVlLCBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y2FsbGVyRnJh
bWUoKS0+Y29kZUJsb2NrKCksIGNvZGVCbG9jaywgaml0Q29kZSwgY2FsbExpbmtJbmZvLCBzdGFj
a0ZyYW1lLmFyZ3NbMl0uaW50MzIoKSwgc3RhY2tGcmFtZS5nbG9iYWxEYXRhKTsKIAogICAgIHJl
dHVybiBqaXRDb2RlLmFkZHJlc3NGb3JDYWxsKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIH0KQEAg
LTE1MzAsMTEgKzE1MjksMTEgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUs
IG9wXwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGpzQXJyYXktPkpTQXJyYXk6OmdldChjYWxs
RnJhbWUsIGkpOwogICAgICAgICB9IGVsc2UgaWYgKGlzSlNTdHJpbmcoZ2xvYmFsRGF0YSwgYmFz
ZVZhbHVlKSAmJiBhc1N0cmluZyhiYXNlVmFsdWUpLT5jYW5HZXRJbmRleChpKSkgewogICAgICAg
ICAgICAgLy8gQWxsIGZhc3QgYnl0ZSBhcnJheSBhY2Nlc3NlcyBhcmUgc2FmZSBmcm9tIGV4Y2Vw
dGlvbnMgc28gcmV0dXJuIGltbWVkaWF0ZWx5IHRvIGF2b2lkIGV4Y2VwdGlvbiBjaGVja3MuCi0g
ICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoU1RVQl9SRVRVUk5fQUREUkVT
UywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV92YWxfc3RyaW5nKSk7CisgICAgICAgICAgICBj
dGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgU1RVQl9S
RVRVUk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV92YWxfc3RyaW5nKSk7CiAg
ICAgICAgICAgICByZXN1bHQgPSBhc1N0cmluZyhiYXNlVmFsdWUpLT5nZXRJbmRleChzdGFja0Zy
YW1lLmdsb2JhbERhdGEsIGkpOwogICAgICAgICB9IGVsc2UgaWYgKGlzSlNCeXRlQXJyYXkoZ2xv
YmFsRGF0YSwgYmFzZVZhbHVlKSAmJiBhc0J5dGVBcnJheShiYXNlVmFsdWUpLT5jYW5BY2Nlc3NJ
bmRleChpKSkgewogICAgICAgICAgICAgLy8gQWxsIGZhc3QgYnl0ZSBhcnJheSBhY2Nlc3NlcyBh
cmUgc2FmZSBmcm9tIGV4Y2VwdGlvbnMgc28gcmV0dXJuIGltbWVkaWF0ZWx5IHRvIGF2b2lkIGV4
Y2VwdGlvbiBjaGVja3MuCi0gICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3Mo
U1RVQl9SRVRVUk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV92YWxfYnl0ZV9h
cnJheSkpOworICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCksIFNUVUJfUkVUVVJOX0FERFJFU1MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9n
ZXRfYnlfdmFsX2J5dGVfYXJyYXkpKTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoYXNCeXRlQXJyYXkoYmFzZVZhbHVlKS0+Z2V0SW5kZXgoY2FsbEZyYW1lLCBpKSk7CiAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUs
IGkpOwpAQCAtMTU2Niw3ICsxNTY1LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpT
VmFsdWUsIG9wXwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHJlc3VsdCA9IGJhc2VWYWx1
ZS5nZXQoY2FsbEZyYW1lLCBpKTsKICAgICAgICAgICAgIGlmICghaXNKU1N0cmluZyhnbG9iYWxE
YXRhLCBiYXNlVmFsdWUpKQotICAgICAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRk
cmVzcyhTVFVCX1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3ZhbCkp
OworICAgICAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjYWxsRnJhbWUt
PmNvZGVCbG9jaygpLCBTVFVCX1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0
X2J5X3ZhbCkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgSWRlbnRpZmllciBw
cm9wZXJ0eShjYWxsRnJhbWUsIHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpKTsKQEAgLTE1
OTksNyArMTU5OCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8K
IAogICAgICAgICByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwgaSk7CiAgICAgICAg
IGlmICghaXNKU0J5dGVBcnJheShnbG9iYWxEYXRhLCBiYXNlVmFsdWUpKQotICAgICAgICAgICAg
Y3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFNUVUJfUkVUVVJOX0FERFJFU1MsIEZ1bmN0aW9u
UHRyKGN0aV9vcF9nZXRfYnlfdmFsKSk7CisgICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVy
bkFkZHJlc3MoY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgU1RVQl9SRVRVUk5fQUREUkVTUywgRnVu
Y3Rpb25QdHIoY3RpX29wX2dldF9ieV92YWwpKTsKICAgICB9IGVsc2UgewogICAgICAgICBJZGVu
dGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFtZSkp
OwogICAgICAgICByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwgcHJvcGVydHkpOwpA
QCAtMTY5Miw3ICsxNjkxLDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X2J5
X3ZhbAogICAgICAgICAgICAgICAgIGpzQXJyYXktPkpTQXJyYXk6OnB1dChjYWxsRnJhbWUsIGks
IHZhbHVlKTsKICAgICAgICAgfSBlbHNlIGlmIChpc0pTQnl0ZUFycmF5KGdsb2JhbERhdGEsIGJh
c2VWYWx1ZSkgJiYgYXNCeXRlQXJyYXkoYmFzZVZhbHVlKS0+Y2FuQWNjZXNzSW5kZXgoaSkpIHsK
ICAgICAgICAgICAgIEpTQnl0ZUFycmF5KiBqc0J5dGVBcnJheSA9IGFzQnl0ZUFycmF5KGJhc2VW
YWx1ZSk7Ci0gICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoU1RVQl9SRVRV
Uk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3RpX29wX3B1dF9ieV92YWxfYnl0ZV9hcnJheSkpOwor
ICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCksIFNUVUJfUkVUVVJOX0FERFJFU1MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9wdXRfYnlfdmFs
X2J5dGVfYXJyYXkpKTsKICAgICAgICAgICAgIC8vIEFsbCBmYXN0IGJ5dGUgYXJyYXkgYWNjZXNz
ZXMgYXJlIHNhZmUgZnJvbSBleGNlcHRpb25zIHNvIHJldHVybiBpbW1lZGlhdGVseSB0byBhdm9p
ZCBleGNlcHRpb24gY2hlY2tzLgogICAgICAgICAgICAgaWYgKHZhbHVlLmlzSW50MzJGYXN0KCkp
IHsKICAgICAgICAgICAgICAgICBqc0J5dGVBcnJheS0+c2V0SW5kZXgoaSwgdmFsdWUuZ2V0SW50
MzJGYXN0KCkpOwpAQCAtMTc3Niw3ICsxNzc1LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9p
ZCwgb3BfcHV0X2J5X3ZhbAogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFpc0pTQnl0ZUFycmF5
KGdsb2JhbERhdGEsIGJhc2VWYWx1ZSkpCi0gICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVy
bkFkZHJlc3MoU1RVQl9SRVRVUk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3RpX29wX3B1dF9ieV92
YWwpKTsKKyAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjYWxsRnJhbWUt
PmNvZGVCbG9jaygpLCBTVFVCX1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfcHV0
X2J5X3ZhbCkpOwogICAgICAgICBiYXNlVmFsdWUucHV0KGNhbGxGcmFtZSwgaSwgdmFsdWUpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBzdWJz
Y3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKSk7Cg==
</data>
<flag name="review"
          id="17596"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>