<?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>54988</bug_id>
          
          <creation_ts>2011-02-22 12:56:20 -0800</creation_ts>
          <short_desc>Re-create StructureTransitionTable class, encapsulate transition table</short_desc>
          <delta_ts>2011-02-22 13:54:35 -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>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="Nobody">webkit-unassigned</assigned_to>
          <cc>buildbot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>355523</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-02-22 12:56:20 -0800</bug_when>
    <thetext>The Structure class keeps a table of transitions to derived Structure types.  Since this table commonly contains a single entry we employ an optimization where instead of holding a map, we may hold a pointer directly to a single instance of the mapped type.  We use an additional bit of data to flag whether the pointer is currently pointing to a table of transitions, or a singleton transition.  Previously we had commonly used a pattern of storing data in the low bits of pointers, but had moved away from this since it causes false leaks to be reported by the leaks tool.  However in this case, the entries in the map are weak links - this pointer will never be responsible for keeping an object alive.  As such we can use this approach provided that the bit is set when a table is not in use (otherwise the table would appear to be leaked).

Additionally, the transition table currently allows to entries to exist for a given key - one specialized to a particular value, and one not specialized.  This is unnecessary, wasteful, and a little inconsistent.  (If you create an entry for a specialized value, then a non-specialized entry, both will exist.  If you create an entry for a non-specialized value, then try to create a specialized entry, only a non-specialized form will be allowed.)

This shows a small progression on v8.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355531</commentid>
    <comment_count>1</comment_count>
      <attachid>83371</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-02-22 12:59:15 -0800</bug_when>
    <thetext>Created attachment 83371
The patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355551</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-02-22 13:19:41 -0800</bug_when>
    <thetext>Attachment 83371 did not build on win:
Build output: http://queues.webkit.org/results/7942469</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355568</commentid>
    <comment_count>3</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-02-22 13:54:35 -0800</bug_when>
    <thetext>Fixed in r79355.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83371</attachid>
            <date>2011-02-22 12:59:15 -0800</date>
            <delta_ts>2011-02-22 13:04:07 -0800</delta_ts>
            <desc>The patch</desc>
            <filename>54988.patch</filename>
            <type>text/plain</type>
            <size>24951</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzkzNDcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTkgQEAK
KzIwMTEtMDItMjIgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyA1NDk4
OCAtIFJlLWNyZWF0ZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUgY2xhc3MsIGVuY2Fwc3VsYXRl
IHRyYW5zaXRpb24gdGFibGUKKworICAgICAgICBUaGUgU3RydWN0dXJlIGNsYXNzIGtlZXBzIGEg
dGFibGUgb2YgdHJhbnNpdGlvbnMgdG8gZGVyaXZlZCBTdHJ1Y3R1cmUgdHlwZXMuIFNpbmNlCisg
ICAgICAgIHRoaXMgdGFibGUgY29tbW9ubHkgY29udGFpbnMgYSBzaW5nbGUgZW50cnkgd2UgZW1w
bG95IGFuIG9wdGltaXphdGlvbiB3aGVyZSBpbnN0ZWFkCisgICAgICAgIG9mIGhvbGRpbmcgYSBt
YXAsIHdlIG1heSBob2xkIGEgcG9pbnRlciBkaXJlY3RseSB0byBhIHNpbmdsZSBpbnN0YW5jZSBv
ZiB0aGUgbWFwcGVkCisgICAgICAgIHR5cGUuIFdlIHVzZSBhbiBhZGRpdGlvbmFsIGJpdCBvZiBk
YXRhIHRvIGZsYWcgd2hldGhlciB0aGUgcG9pbnRlciBpcyBjdXJyZW50bHkKKyAgICAgICAgcG9p
bnRpbmcgdG8gYSB0YWJsZSBvZiB0cmFuc2l0aW9ucywgb3IgYSBzaW5nbGV0b24gdHJhbnNpdGlv
bi4gUHJldmlvdXNseSB3ZSBoYWQKKyAgICAgICAgY29tbW9ubHkgdXNlZCBhIHBhdHRlcm4gb2Yg
c3RvcmluZyBkYXRhIGluIHRoZSBsb3cgYml0cyBvZiBwb2ludGVycywgYnV0IGhhZCBtb3ZlZAor
ICAgICAgICBhd2F5IGZyb20gdGhpcyBzaW5jZSBpdCBjYXVzZXMgZmFsc2UgbGVha3MgdG8gYmUg
cmVwb3J0ZWQgYnkgdGhlIGxlYWtzIHRvb2wuIEhvd2V2ZXIKKyAgICAgICAgaW4gdGhpcyBjYXNl
LCB0aGUgZW50cmllcyBpbiB0aGUgbWFwIGFyZSB3ZWFrIGxpbmtzIC0gdGhpcyBwb2ludGVyIHdp
bGwgbmV2ZXIgYmUKKyAgICAgICAgcmVzcG9uc2libGUgZm9yIGtlZXBpbmcgYW4gb2JqZWN0IGFs
aXZlLiAgQXMgc3VjaCB3ZSBjYW4gdXNlIHRoaXMgYXBwcm9hY2ggcHJvdmlkZWQKKyAgICAgICAg
dGhhdCB0aGUgYml0IGlzIHNldCB3aGVuIGEgdGFibGUgaXMgbm90IGluIHVzZSAob3RoZXJ3aXNl
IHRoZSB0YWJsZSB3b3VsZCBhcHBlYXIgdG8KKyAgICAgICAgYmUgbGVha2VkKS4KKworICAgICAg
ICBBZGRpdGlvbmFsbHksIHRoZSB0cmFuc2l0aW9uIHRhYmxlIGN1cnJlbnRseSBhbGxvd3MgdG8g
ZW50cmllcyB0byBleGlzdCBmb3IgYSBnaXZlbgorICAgICAgICBrZXkgLSBvbmUgc3BlY2lhbGl6
ZWQgdG8gYSBwYXJ0aWN1bGFyIHZhbHVlLCBhbmQgb25lIG5vdCBzcGVjaWFsaXplZC4gVGhpcyBp
cworICAgICAgICB1bm5lY2Vzc2FyeSwgd2FzdGVmdWwsIGFuZCBhIGxpdHRsZSBpbmNvbnNpc3Rl
bnQuIChJZiB5b3UgY3JlYXRlIGFuIGVudHJ5IGZvciBhCisgICAgICAgIHNwZWNpYWxpemVkIHZh
bHVlLCB0aGVuIGEgbm9uLXNwZWNpYWxpemVkIGVudHJ5LCBib3RoIHdpbGwgZXhpc3QuICBJZiB5
b3UgY3JlYXRlIGFuCisgICAgICAgIGVudHJ5IGZvciBhIG5vbi1zcGVjaWFsaXplZCB2YWx1ZSwg
dGhlbiB0cnkgdG8gY3JlYXRlIGEgc3BlY2lhbGl6ZWQgZW50cnksIG9ubHkgYQorICAgICAgICBu
b24tc3BlY2lhbGl6ZWQgZm9ybSB3aWxsIGJlIGFsbG93ZWQuKQorCisgICAgICAgIFRoaXMgc2hv
d3MgYSBzbWFsbCBwcm9ncmVzc2lvbiBvbiB2OC4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
LmV4cDoKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpwdXREaXJlY3RJbnRlcm5hbCk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuY3Bw
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmNvbnRhaW5zKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpnZXQpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZVRyYW5zaXRpb25UYWJsZTo6YWRkKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpkdW1w
U3RhdGlzdGljcyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6U3RydWN0dXJlKToKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjp+U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
OjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUv
U3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Z2V0KToKKyAgICAgICAgKiBy
dW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmVUcmFuc2l0aW9uVGFibGU6Okhhc2g6Omhhc2gpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVU
cmFuc2l0aW9uVGFibGU6Okhhc2g6OmVxdWFsKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlVHJh
bnNpdGlvblRhYmxlOjpIYXNoVHJhaXRzOjplbXB0eVZhbHVlKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlVHJhbnNpdGlvblRhYmxlOjpIYXNoVHJhaXRzOjpjb25zdHJ1Y3REZWxldGVkVmFsdWUp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6Okhhc2hUcmFpdHM6Omlz
RGVsZXRlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpT
dHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0
aW9uVGFibGU6On5TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUpOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmlzVXNpbmdTaW5nbGVTbG90KToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjptYXApOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVU
cmFuc2l0aW9uVGFibGU6OnNldE1hcCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVRyYW5zaXRp
b25UYWJsZTo6c2luZ2xlVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVRyYW5z
aXRpb25UYWJsZTo6c2V0U2luZ2xlVHJhbnNpdGlvbik6CisKIDIwMTEtMDItMjIgIEFuZHJhcyBC
ZWNzaSAgPGFiZWNzaUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IExhc3psbyBH
b21ib3MuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJl
dmlzaW9uIDc5MjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4
cAkod29ya2luZyBjb3B5KQpAQCAtMzEwLDcgKzMxMCw2IEBAIF9fWk4zSlNDOUNvZGVCbG9ja0Qx
RXYKIF9fWk4zSlNDOUNvZGVCbG9ja0QyRXYKIF9fWk4zSlNDOU1hcmtTdGFjazEwc19wYWdlU2l6
ZUUKIF9fWk4zSlNDOU1hcmtTdGFjazE4aW5pdGlhbGl6ZVBhZ2VzaXplRXYKLV9fWk4zSlNDOVN0
cnVjdHVyZTEzaGFzVHJhbnNpdGlvbkVQTjNXVEYxMFN0cmluZ0ltcGxFagogX19aTjNKU0M5U3Ry
dWN0dXJlMTdzdG9wSWdub3JpbmdMZWFrc0V2CiBfX1pOM0pTQzlTdHJ1Y3R1cmUxOHN0YXJ0SWdu
b3JpbmdMZWFrc0V2CiBfX1pOM0pTQzlTdHJ1Y3R1cmUyMWFkZFByb3BlcnR5VHJhbnNpdGlvbkVQ
UzBfUktOU18xMElkZW50aWZpZXJFalBOU182SlNDZWxsRVJtCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDc5MjU0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjMwLDE2
ICs2MzAsNiBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIC8vIElmIHdlIGhhdmUgYSBzcGVjaWZpYyBm
dW5jdGlvbiwgd2UgbWF5IGhhdmUgZ290IHRvIHRoaXMgcG9pbnQgaWYgdGhlcmUgaXMKLSAgICAv
LyBhbHJlYWR5IGEgdHJhbnNpdGlvbiB3aXRoIHRoZSBjb3JyZWN0IHByb3BlcnR5IG5hbWUgYW5k
IGF0dHJpYnV0ZXMsIGJ1dAotICAgIC8vIHNwZWNpYWxpemVkIHRvIGEgZGlmZmVyZW50IGZ1bmN0
aW9uLiAgSW4gdGhpcyBjYXNlIHdlIGp1c3Qgd2FudCB0byBnaXZlIHVwCi0gICAgLy8gYW5kIGRl
c3BlY2lhbGl6ZSB0aGUgdHJhbnNpdGlvbi4KLSAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgY2xlYXIg
dGhlIHZhbHVlIG9mIHNwZWNpZmljRnVuY3Rpb24gd2hpY2ggd2lsbCByZXN1bHQKLSAgICAvLyBp
biB1cyBhZGRpbmcgYSBub24tc3BlY2lmaWMgdHJhbnNpdGlvbiwgYW5kIGFueSBzdWJzZXF1ZW50
IGxvb2t1cCBpbgotICAgIC8vIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlz
dGluZ1N0cnVjdHVyZSB3aWxsIGp1c3QgdXNlIHRoYXQuCi0gICAgaWYgKHNwZWNpZmljRnVuY3Rp
b24gJiYgbV9zdHJ1Y3R1cmUtPmhhc1RyYW5zaXRpb24ocHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVz
KSkKLSAgICAgICAgc3BlY2lmaWNGdW5jdGlvbiA9IDA7Ci0KICAgICBSZWZQdHI8U3RydWN0dXJl
PiBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbihtX3N0cnVjdHVy
ZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY0Z1bmN0aW9uLCBvZmZzZXQpOwog
CiAgICAgaWYgKGN1cnJlbnRDYXBhY2l0eSAhPSBzdHJ1Y3R1cmUtPnByb3BlcnR5U3RvcmFnZUNh
cGFjaXR5KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5jcHAJKHJldmlzaW9uIDc5MjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksMTAzICs3OSw2NyBAQCBzdGF0aWMg
SGFzaFNldDxTdHJ1Y3R1cmUqPiYgbGl2ZVN0cnVjdHVyCiAKIHN0YXRpYyBpbnQgY29tcGFyZVBy
b3BlcnR5TWFwRW50cnlJbmRpY2VzKGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpOwogCi1p
bmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OnNldFRyYW5zaXRpb25UYWJsZShUcmFuc2l0aW9uVGFibGUq
IHRhYmxlKQorYm9vbCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmNvbnRhaW5zKFN0cmluZ0lt
cGwqIHJlcCwgdW5zaWduZWQgYXR0cmlidXRlcykgY29uc3QKIHsKLSAgICBBU1NFUlQobV9pc1Vz
aW5nU2luZ2xlU2xvdCk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIHNldFNpbmdsZVRyYW5zaXRpb24o
MCk7Ci0jZW5kaWYKLSAgICBtX2lzVXNpbmdTaW5nbGVTbG90ID0gZmFsc2U7Ci0gICAgbV90cmFu
c2l0aW9ucy5tX3RhYmxlID0gdGFibGU7Ci0gICAgLy8gVGhpcyBpbXBsaWNpdGx5IGNsZWFycyB0
aGUgZmxhZyB0aGF0IGluZGljYXRlcyB3ZSdyZSB1c2luZyBhIHNpbmdsZSB0cmFuc2l0aW9uCi0g
ICAgQVNTRVJUKCFtX2lzVXNpbmdTaW5nbGVTbG90KTsKLX0KLQotLy8gVGhlIGNvbnRhaW5zIGFu
ZCBnZXQgbWV0aG9kcyBhY2NlcHQgaW1wcmVjaXNlIG1hdGNoZXMsIHNvIGlmIGFuIHVuc3BlY2lh
bGlzZWQgdHJhbnNpdGlvbiBleGlzdHMKLS8vIGZvciB0aGUgZ2l2ZW4ga2V5IHRoZXkgd2lsbCBj
b25zaWRlciB0aGF0IHRyYW5zaXRpb24gdG8gYmUgYSBtYXRjaC4gIElmIGEgc3BlY2lhbGlzZWQg
dHJhbnNpdGlvbgotLy8gZXhpc3RzIGFuZCBpdCBtYXRjaGVzIHRoZSBwcm92aWRlZCBzcGVjaWZp
Y1ZhbHVlLCBnZXQgd2lsbCByZXR1cm4gdGhlIHNwZWNpZmljIHRyYW5zaXRpb24uCi1pbmxpbmUg
Ym9vbCBTdHJ1Y3R1cmU6OnRyYW5zaXRpb25UYWJsZUNvbnRhaW5zKGNvbnN0IFN0cnVjdHVyZVRy
YW5zaXRpb25UYWJsZUhhc2g6OktleSYga2V5LCBKU0NlbGwqIHNwZWNpZmljVmFsdWUpCi17Ci0g
ICAgaWYgKG1faXNVc2luZ1NpbmdsZVNsb3QpIHsKLSAgICAgICAgU3RydWN0dXJlKiBleGlzdGlu
Z1RyYW5zaXRpb24gPSBzaW5nbGVUcmFuc2l0aW9uKCk7Ci0gICAgICAgIHJldHVybiBleGlzdGlu
Z1RyYW5zaXRpb24gJiYgZXhpc3RpbmdUcmFuc2l0aW9uLT5tX25hbWVJblByZXZpb3VzLmdldCgp
ID09IGtleS5maXJzdAotICAgICAgICAgICAgICAgJiYgZXhpc3RpbmdUcmFuc2l0aW9uLT5tX2F0
dHJpYnV0ZXNJblByZXZpb3VzID09IGtleS5zZWNvbmQKLSAgICAgICAgICAgICAgICYmIChleGlz
dGluZ1RyYW5zaXRpb24tPm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMgPT0gc3BlY2lmaWNWYWx1
ZSB8fCBleGlzdGluZ1RyYW5zaXRpb24tPm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMgPT0gMCk7
Ci0gICAgfQotICAgIFRyYW5zaXRpb25UYWJsZTo6aXRlcmF0b3IgZmluZCA9IHRyYW5zaXRpb25U
YWJsZSgpLT5maW5kKGtleSk7Ci0gICAgaWYgKGZpbmQgPT0gdHJhbnNpdGlvblRhYmxlKCktPmVu
ZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gZmluZC0+c2Vjb25kLmZp
cnN0IHx8IGZpbmQtPnNlY29uZC5zZWNvbmQtPnRyYW5zaXRpb25lZEZvcihzcGVjaWZpY1ZhbHVl
KTsKLX0KLQotaW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJlOjp0cmFuc2l0aW9uVGFibGVHZXQo
Y29uc3QgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlSGFzaDo6S2V5JiBrZXksIEpTQ2VsbCogc3Bl
Y2lmaWNWYWx1ZSkgY29uc3QKLXsKLSAgICBpZiAobV9pc1VzaW5nU2luZ2xlU2xvdCkgewotICAg
ICAgICBTdHJ1Y3R1cmUqIGV4aXN0aW5nVHJhbnNpdGlvbiA9IHNpbmdsZVRyYW5zaXRpb24oKTsK
LSAgICAgICAgaWYgKGV4aXN0aW5nVHJhbnNpdGlvbiAmJiBleGlzdGluZ1RyYW5zaXRpb24tPm1f
bmFtZUluUHJldmlvdXMuZ2V0KCkgPT0ga2V5LmZpcnN0Ci0gICAgICAgICAgICAmJiBleGlzdGlu
Z1RyYW5zaXRpb24tPm1fYXR0cmlidXRlc0luUHJldmlvdXMgPT0ga2V5LnNlY29uZAotICAgICAg
ICAgICAgJiYgKGV4aXN0aW5nVHJhbnNpdGlvbi0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cyA9
PSBzcGVjaWZpY1ZhbHVlIHx8IGV4aXN0aW5nVHJhbnNpdGlvbi0+bV9zcGVjaWZpY1ZhbHVlSW5Q
cmV2aW91cyA9PSAwKSkKLSAgICAgICAgICAgIHJldHVybiBleGlzdGluZ1RyYW5zaXRpb247Ci0g
ICAgICAgIHJldHVybiAwOworICAgIGlmIChpc1VzaW5nU2luZ2xlU2xvdCgpKSB7CisgICAgICAg
IFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IHNpbmdsZVRyYW5zaXRpb24oKTsKKyAgICAgICAgcmV0
dXJuIHRyYW5zaXRpb24gJiYgdHJhbnNpdGlvbi0+bV9uYW1lSW5QcmV2aW91cyA9PSByZXAgJiYg
dHJhbnNpdGlvbi0+bV9hdHRyaWJ1dGVzSW5QcmV2aW91cyA9PSBhdHRyaWJ1dGVzOwogICAgIH0K
LQotICAgIFRyYW5zaXRpb24gdHJhbnNpdGlvbiA9IHRyYW5zaXRpb25UYWJsZSgpLT5nZXQoa2V5
KTsKLSAgICBpZiAodHJhbnNpdGlvbi5zZWNvbmQgJiYgdHJhbnNpdGlvbi5zZWNvbmQtPnRyYW5z
aXRpb25lZEZvcihzcGVjaWZpY1ZhbHVlKSkKLSAgICAgICAgcmV0dXJuIHRyYW5zaXRpb24uc2Vj
b25kOwotICAgIHJldHVybiB0cmFuc2l0aW9uLmZpcnN0OworICAgIHJldHVybiBtYXAoKS0+Y29u
dGFpbnMobWFrZV9wYWlyKHJlcCwgYXR0cmlidXRlcykpOwogfQogCi1pbmxpbmUgYm9vbCBTdHJ1
Y3R1cmU6OnRyYW5zaXRpb25UYWJsZUhhc1RyYW5zaXRpb24oY29uc3QgU3RydWN0dXJlVHJhbnNp
dGlvblRhYmxlSGFzaDo6S2V5JiBrZXkpIGNvbnN0CitpbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1
cmVUcmFuc2l0aW9uVGFibGU6OmdldChTdHJpbmdJbXBsKiByZXAsIHVuc2lnbmVkIGF0dHJpYnV0
ZXMpIGNvbnN0CiB7Ci0gICAgaWYgKG1faXNVc2luZ1NpbmdsZVNsb3QpIHsKKyAgICBpZiAoaXNV
c2luZ1NpbmdsZVNsb3QoKSkgewogICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBzaW5n
bGVUcmFuc2l0aW9uKCk7Ci0gICAgICAgIHJldHVybiB0cmFuc2l0aW9uICYmIHRyYW5zaXRpb24t
Pm1fbmFtZUluUHJldmlvdXMgPT0ga2V5LmZpcnN0Ci0gICAgICAgICYmIHRyYW5zaXRpb24tPm1f
YXR0cmlidXRlc0luUHJldmlvdXMgPT0ga2V5LnNlY29uZDsKKyAgICAgICAgcmV0dXJuICh0cmFu
c2l0aW9uICYmIHRyYW5zaXRpb24tPm1fbmFtZUluUHJldmlvdXMgPT0gcmVwICYmIHRyYW5zaXRp
b24tPm1fYXR0cmlidXRlc0luUHJldmlvdXMgPT0gYXR0cmlidXRlcykgPyB0cmFuc2l0aW9uIDog
MDsKICAgICB9Ci0gICAgcmV0dXJuIHRyYW5zaXRpb25UYWJsZSgpLT5jb250YWlucyhrZXkpOwor
ICAgIHJldHVybiBtYXAoKS0+Z2V0KG1ha2VfcGFpcihyZXAsIGF0dHJpYnV0ZXMpKTsKIH0KIAot
aW5saW5lIHZvaWQgU3RydWN0dXJlOjp0cmFuc2l0aW9uVGFibGVSZW1vdmUoY29uc3QgU3RydWN0
dXJlVHJhbnNpdGlvblRhYmxlSGFzaDo6S2V5JiBrZXksIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSkK
K2lubGluZSB2b2lkIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6cmVtb3ZlKFN0cnVjdHVyZSog
c3RydWN0dXJlKQogewotICAgIGlmIChtX2lzVXNpbmdTaW5nbGVTbG90KSB7Ci0gICAgICAgIEFT
U0VSVCh0cmFuc2l0aW9uVGFibGVDb250YWlucyhrZXksIHNwZWNpZmljVmFsdWUpKTsKKyAgICBp
ZiAoaXNVc2luZ1NpbmdsZVNsb3QoKSkgeworICAgICAgICAvLyBJZiBtb3JlIHRoYW4gb25lIHRy
YW5zaXRpb24gaGFkIGJlZW4gYWRkZWQsIHRoZW4gd2Ugd291bGRuJ3QgYmUgaW4KKyAgICAgICAg
Ly8gc2luZ2xlIHNsb3QgbW9kZSAoZXZlbiBkZXNwZWNpZnlpbmcgYSBmcm9tIGEgc3BlY2lmaWMg
dmFsdWUgdHJpZ2dlcnMKKyAgICAgICAgLy8gbWFwIG1vZGUpLgorICAgICAgICAvLyBBcyBzdWNo
LCB0aGUgcGFzc2VkIHN0cnVjdHVyZSAqbXVzdCogYmUgdGhlIGV4aXN0aW5nIHRyYW5zaXRpb24u
CisgICAgICAgIEFTU0VSVChzaW5nbGVUcmFuc2l0aW9uKCkgPT0gc3RydWN0dXJlKTsKICAgICAg
ICAgc2V0U2luZ2xlVHJhbnNpdGlvbigwKTsKLSAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSB7
CisgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgYSBtYXBwaW5nIGV4aXN0cyBmb3Igc3RydWN0dXJl
J3Mga2V5LCBhbmQgd2hldGhlciB0aGUKKyAgICAgICAgLy8gZW50cnkgaXMgc3RydWN0dXJlICh0
aGUgbGF0dGVyIGNoZWNrIG1heSBmYWlsIGlmIHdlIGluaXRpYWxseSBoYWQgYQorICAgICAgICAv
LyB0cmFuc2l0aW9uIHdpdGggYSBzcGVjaWZpYyB2YWx1ZSwgYW5kIHRoaXMgaGFzIGJlZW4gZGVz
cGVjaWZpZWQpLgorICAgICAgICBUcmFuc2l0aW9uTWFwOjppdGVyYXRvciBlbnRyeSA9IG1hcCgp
LT5maW5kKG1ha2VfcGFpcihzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMsIHN0cnVjdHVyZS0+
bV9hdHRyaWJ1dGVzSW5QcmV2aW91cykpOworICAgICAgICBpZiAoZW50cnkgIT0gbWFwKCktPmVu
ZCgpICYmIHN0cnVjdHVyZSA9PSBlbnRyeS0+c2Vjb25kKQorICAgICAgICAgICAgbWFwKCktPnJl
bW92ZShlbnRyeSk7CiAgICAgfQotICAgIFRyYW5zaXRpb25UYWJsZTo6aXRlcmF0b3IgZmluZCA9
IHRyYW5zaXRpb25UYWJsZSgpLT5maW5kKGtleSk7Ci0gICAgaWYgKCFzcGVjaWZpY1ZhbHVlKQot
ICAgICAgICBmaW5kLT5zZWNvbmQuZmlyc3QgPSAwOwotICAgIGVsc2UKLSAgICAgICAgZmluZC0+
c2Vjb25kLnNlY29uZCA9IDA7Ci0gICAgaWYgKCFmaW5kLT5zZWNvbmQuZmlyc3QgJiYgIWZpbmQt
PnNlY29uZC5zZWNvbmQpCi0gICAgICAgIHRyYW5zaXRpb25UYWJsZSgpLT5yZW1vdmUoZmluZCk7
CiB9CiAKLWlubGluZSB2b2lkIFN0cnVjdHVyZTo6dHJhbnNpdGlvblRhYmxlQWRkKGNvbnN0IFN0
cnVjdHVyZVRyYW5zaXRpb25UYWJsZUhhc2g6OktleSYga2V5LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlKQoraW5saW5lIHZvaWQgU3RydWN0dXJlVHJhbnNpdGlv
blRhYmxlOjphZGQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgaWYgKG1faXNVc2luZ1Np
bmdsZVNsb3QpIHsKLSAgICAgICAgaWYgKCFzaW5nbGVUcmFuc2l0aW9uKCkpIHsKKyAgICBpZiAo
aXNVc2luZ1NpbmdsZVNsb3QoKSkgeworICAgICAgICBTdHJ1Y3R1cmUqIGV4aXN0aW5nVHJhbnNp
dGlvbiA9IHNpbmdsZVRyYW5zaXRpb24oKTsKKworICAgICAgICAvLyBUaGlzIGhhbmRsZXMgdGhl
IGZpcnN0IHRyYW5zaXRpb24gYmVpbmcgYWRkZWQuCisgICAgICAgIGlmICghZXhpc3RpbmdUcmFu
c2l0aW9uKSB7CiAgICAgICAgICAgICBzZXRTaW5nbGVUcmFuc2l0aW9uKHN0cnVjdHVyZSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgU3RydWN0dXJlKiBleGlzdGlu
Z1RyYW5zaXRpb24gPSBzaW5nbGVUcmFuc2l0aW9uKCk7Ci0gICAgICAgIFRyYW5zaXRpb25UYWJs
ZSogdHJhbnNpdGlvblRhYmxlID0gbmV3IFRyYW5zaXRpb25UYWJsZTsKLSAgICAgICAgc2V0VHJh
bnNpdGlvblRhYmxlKHRyYW5zaXRpb25UYWJsZSk7Ci0gICAgICAgIGlmIChleGlzdGluZ1RyYW5z
aXRpb24pCi0gICAgICAgICAgICB0cmFuc2l0aW9uVGFibGVBZGQoc3RkOjptYWtlX3BhaXIoZXhp
c3RpbmdUcmFuc2l0aW9uLT5tX25hbWVJblByZXZpb3VzLmdldCgpLCBleGlzdGluZ1RyYW5zaXRp
b24tPm1fYXR0cmlidXRlc0luUHJldmlvdXMpLCBleGlzdGluZ1RyYW5zaXRpb24sIGV4aXN0aW5n
VHJhbnNpdGlvbi0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cyk7Ci0gICAgfQotICAgIGlmICgh
c3BlY2lmaWNWYWx1ZSkgewotICAgICAgICBUcmFuc2l0aW9uVGFibGU6Oml0ZXJhdG9yIGZpbmQg
PSB0cmFuc2l0aW9uVGFibGUoKS0+ZmluZChrZXkpOwotICAgICAgICBpZiAoZmluZCA9PSB0cmFu
c2l0aW9uVGFibGUoKS0+ZW5kKCkpCi0gICAgICAgICAgICB0cmFuc2l0aW9uVGFibGUoKS0+YWRk
KGtleSwgVHJhbnNpdGlvbihzdHJ1Y3R1cmUsIHN0YXRpY19jYXN0PFN0cnVjdHVyZSo+KDApKSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZpbmQtPnNlY29uZC5maXJzdCA9IHN0cnVjdHVy
ZTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBJZiB3ZSdyZSBhZGRpbmcgYSB0cmFuc2l0aW9u
IHRvIGEgc3BlY2lmaWMgdmFsdWUsIHRoZW4gdGhlcmUgY2Fubm90IGJlCi0gICAgICAgIC8vIGFu
IGV4aXN0aW5nIHRyYW5zaXRpb24KLSAgICAgICAgQVNTRVJUKCF0cmFuc2l0aW9uVGFibGUoKS0+
Y29udGFpbnMoa2V5KSk7Ci0gICAgICAgIHRyYW5zaXRpb25UYWJsZSgpLT5hZGQoa2V5LCBUcmFu
c2l0aW9uKHN0YXRpY19jYXN0PFN0cnVjdHVyZSo+KDApLCBzdHJ1Y3R1cmUpKTsKKworICAgICAg
ICAvLyBUaGlzIGhhbmRsZXMgdGhlIHNlY29uZCB0cmFuc2l0aW9uIGJlaW5nIGFkZGVkCisgICAg
ICAgIC8vIChvciB0aGUgZmlyc3QgdHJhbnNpdGlvbiBiZWluZyBkZXNwZWNpZmllZCEpCisgICAg
ICAgIHNldE1hcChuZXcgVHJhbnNpdGlvbk1hcCgpKTsKKyAgICAgICAgYWRkKGV4aXN0aW5nVHJh
bnNpdGlvbik7CisgICAgfQorCisgICAgLy8gQWRkIHRoZSBzdHJ1Y3R1cmUgdG8gdGhlIG1hcC4K
KyAgICBzdGQ6OnBhaXI8VHJhbnNpdGlvbk1hcDo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IG1h
cCgpLT5hZGQobWFrZV9wYWlyKHN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cywgc3RydWN0dXJl
LT5tX2F0dHJpYnV0ZXNJblByZXZpb3VzKSwgc3RydWN0dXJlKTsKKyAgICBpZiAoIXJlc3VsdC5z
ZWNvbmQpIHsKKyAgICAgICAgLy8gVGhlcmUgYWxyZWFkeSBpcyBhbiBlbnRyeSEgLSB3ZSBzaG91
bGQgb25seSBoaXQgdGhpcyB3aGVuIGRlc3BlY2lmeWluZy4KKyAgICAgICAgQVNTRVJUKHJlc3Vs
dC5maXJzdC0+c2Vjb25kLT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzKTsKKyAgICAgICAgQVNT
RVJUKCFzdHJ1Y3R1cmUtPm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMpOworICAgICAgICByZXN1
bHQuZmlyc3QtPnNlY29uZCA9IHN0cnVjdHVyZTsKICAgICB9CiB9CiAKQEAgLTE5MiwxMiArMTU2
LDEyIEBAIHZvaWQgU3RydWN0dXJlOjpkdW1wU3RhdGlzdGljcygpCiAgICAgZm9yIChIYXNoU2V0
PFN0cnVjdHVyZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGxpdmVTdHJ1Y3R1cmVTZXQuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gKml0
OwogICAgICAgICBpZiAoc3RydWN0dXJlLT5tX3VzaW5nU2luZ2xlVHJhbnNpdGlvblNsb3QpIHsK
LSAgICAgICAgICAgIGlmICghc3RydWN0dXJlLT5tX3RyYW5zaXRpb25zLnNpbmdsZVRyYW5zaXRp
b24pCisgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuc2luZ2xl
VHJhbnNpdGlvbigpKQogICAgICAgICAgICAgICAgICsrbnVtYmVyTGVhZjsKICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICArK251bWJlclVzaW5nU2luZ2xlU2xvdDsKIAotICAgICAg
ICAgICBpZiAoIXN0cnVjdHVyZS0+bV9wcmV2aW91cyAmJiAhc3RydWN0dXJlLT5tX3RyYW5zaXRp
b25zLnNpbmdsZVRyYW5zaXRpb24pCisgICAgICAgICAgIGlmICghc3RydWN0dXJlLT5tX3ByZXZp
b3VzICYmICFzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblRhYmxlLnNpbmdsZVRyYW5zaXRpb24oKSkK
ICAgICAgICAgICAgICAgICArK251bWJlclNpbmdsZXRvbnM7CiAgICAgICAgIH0KIApAQCAtMjM4
LDEwICsyMDIsNyBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU1ZhbHVlIHByb3RvdHlwZSwgCiAg
ICAgLCBtX2F0dHJpYnV0ZXNJblByZXZpb3VzKDApCiAgICAgLCBtX3NwZWNpZmljRnVuY3Rpb25U
aHJhc2hDb3VudCgwKQogICAgICwgbV9hbm9ueW1vdXNTbG90Q291bnQoYW5vbnltb3VzU2xvdENv
dW50KQotICAgICwgbV9pc1VzaW5nU2luZ2xlU2xvdCh0cnVlKQogewotICAgIG1fdHJhbnNpdGlv
bnMubV9zaW5nbGVUcmFuc2l0aW9uID0gMDsKLQogICAgIEFTU0VSVChtX3Byb3RvdHlwZSk7CiAg
ICAgQVNTRVJUKG1fcHJvdG90eXBlLT5pc09iamVjdCgpIHx8IG1fcHJvdG90eXBlLT5pc051bGwo
KSk7CiAKQEAgLTI3NSwxMCArMjM2LDcgQEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoY29uc3QgU3Ry
dWN0dXJlKiBwcgogICAgICwgbV9hdHRyaWJ1dGVzSW5QcmV2aW91cygwKQogICAgICwgbV9zcGVj
aWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQocHJldmlvdXMtPm1fc3BlY2lmaWNGdW5jdGlvblRocmFz
aENvdW50KQogICAgICwgbV9hbm9ueW1vdXNTbG90Q291bnQocHJldmlvdXMtPmFub255bW91c1Ns
b3RDb3VudCgpKQotICAgICwgbV9pc1VzaW5nU2luZ2xlU2xvdCh0cnVlKQogewotICAgIG1fdHJh
bnNpdGlvbnMubV9zaW5nbGVUcmFuc2l0aW9uID0gMDsKLQogICAgIEFTU0VSVChtX3Byb3RvdHlw
ZSk7CiAgICAgQVNTRVJUKG1fcHJvdG90eXBlLT5pc09iamVjdCgpIHx8IG1fcHJvdG90eXBlLT5p
c051bGwoKSk7CiAKQEAgLTMwMSw4ICsyNTksNyBAQCBTdHJ1Y3R1cmU6On5TdHJ1Y3R1cmUoKQog
ewogICAgIGlmIChtX3ByZXZpb3VzKSB7CiAgICAgICAgIEFTU0VSVChtX25hbWVJblByZXZpb3Vz
KTsKLSAgICAgICAgbV9wcmV2aW91cy0+dHJhbnNpdGlvblRhYmxlUmVtb3ZlKG1ha2VfcGFpciht
X25hbWVJblByZXZpb3VzLmdldCgpLCBtX2F0dHJpYnV0ZXNJblByZXZpb3VzKSwgbV9zcGVjaWZp
Y1ZhbHVlSW5QcmV2aW91cyk7Ci0KKyAgICAgICAgbV9wcmV2aW91cy0+bV90cmFuc2l0aW9uVGFi
bGUucmVtb3ZlKHRoaXMpOwogICAgIH0KIAogICAgIGlmIChtX3Byb3BlcnR5VGFibGUpIHsKQEAg
LTMxNiw5ICsyNzMsNiBAQCBTdHJ1Y3R1cmU6On5TdHJ1Y3R1cmUoKQogICAgICAgICBmYXN0RnJl
ZShtX3Byb3BlcnR5VGFibGUpOwogICAgIH0KIAotICAgIGlmICghbV9pc1VzaW5nU2luZ2xlU2xv
dCkKLSAgICAgICAgZGVsZXRlIHRyYW5zaXRpb25UYWJsZSgpOwotCiAjaWZuZGVmIE5ERUJVRwog
I2lmIEVOQUJMRShKU0NfTVVMVElQTEVfVEhSRUFEUykKICAgICBNdXRleExvY2tlciBwcm90ZWN0
KGlnbm9yZVNldE11dGV4KTsKQEAgLTQ4Miw3ICs0MzYsMTAgQEAgUGFzc1JlZlB0cjxTdHJ1Y3R1
cmU+IFN0cnVjdHVyZTo6YWRkUHJvcAogICAgIEFTU0VSVCghc3RydWN0dXJlLT5pc0RpY3Rpb25h
cnkoKSk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgPT0gT2JqZWN0
VHlwZSk7CiAKLSAgICBpZiAoU3RydWN0dXJlKiBleGlzdGluZ1RyYW5zaXRpb24gPSBzdHJ1Y3R1
cmUtPnRyYW5zaXRpb25UYWJsZUdldChtYWtlX3BhaXIocHJvcGVydHlOYW1lLmltcGwoKSwgYXR0
cmlidXRlcyksIHNwZWNpZmljVmFsdWUpKSB7CisgICAgaWYgKFN0cnVjdHVyZSogZXhpc3RpbmdU
cmFuc2l0aW9uID0gc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5nZXQocHJvcGVydHlOYW1l
LmltcGwoKSwgYXR0cmlidXRlcykpIHsKKyAgICAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlSW5Q
cmV2aW91cyA9IGV4aXN0aW5nVHJhbnNpdGlvbi0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91czsK
KyAgICAgICAgaWYgKHNwZWNpZmljVmFsdWVJblByZXZpb3VzICYmIHNwZWNpZmljVmFsdWVJblBy
ZXZpb3VzICE9IHNwZWNpZmljVmFsdWUpCisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAg
QVNTRVJUKGV4aXN0aW5nVHJhbnNpdGlvbi0+bV9vZmZzZXQgIT0gbm9PZmZzZXQpOwogICAgICAg
ICBvZmZzZXQgPSBleGlzdGluZ1RyYW5zaXRpb24tPm1fb2Zmc2V0ICsgZXhpc3RpbmdUcmFuc2l0
aW9uLT5tX2Fub255bW91c1Nsb3RDb3VudDsKICAgICAgICAgQVNTRVJUKG9mZnNldCA+PSBzdHJ1
Y3R1cmUtPm1fYW5vbnltb3VzU2xvdENvdW50KTsKQEAgLTQ5NSw2ICs0NTIsMTYgQEAgUGFzc1Jl
ZlB0cjxTdHJ1Y3R1cmU+IFN0cnVjdHVyZTo6YWRkUHJvcAogCiBQYXNzUmVmUHRyPFN0cnVjdHVy
ZT4gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24oU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgSlND
ZWxsKiBzcGVjaWZpY1ZhbHVlLCBzaXplX3QmIG9mZnNldCkKIHsKKyAgICAvLyBJZiB3ZSBoYXZl
IGEgc3BlY2lmaWMgZnVuY3Rpb24sIHdlIG1heSBoYXZlIGdvdCB0byB0aGlzIHBvaW50IGlmIHRo
ZXJlIGlzCisgICAgLy8gYWxyZWFkeSBhIHRyYW5zaXRpb24gd2l0aCB0aGUgY29ycmVjdCBwcm9w
ZXJ0eSBuYW1lIGFuZCBhdHRyaWJ1dGVzLCBidXQKKyAgICAvLyBzcGVjaWFsaXplZCB0byBhIGRp
ZmZlcmVudCBmdW5jdGlvbi4gIEluIHRoaXMgY2FzZSB3ZSBqdXN0IHdhbnQgdG8gZ2l2ZSB1cAor
ICAgIC8vIGFuZCBkZXNwZWNpYWxpemUgdGhlIHRyYW5zaXRpb24uCisgICAgLy8gSW4gdGhpcyBj
YXNlIHdlIGNsZWFyIHRoZSB2YWx1ZSBvZiBzcGVjaWZpY0Z1bmN0aW9uIHdoaWNoIHdpbGwgcmVz
dWx0CisgICAgLy8gaW4gdXMgYWRkaW5nIGEgbm9uLXNwZWNpZmljIHRyYW5zaXRpb24sIGFuZCBh
bnkgc3Vic2VxdWVudCBsb29rdXAgaW4KKyAgICAvLyBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJh
bnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUgd2lsbCBqdXN0IHVzZSB0aGF0LgorICAgIGlmIChz
cGVjaWZpY1ZhbHVlICYmIHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuY29udGFpbnMocHJv
cGVydHlOYW1lLmltcGwoKSwgYXR0cmlidXRlcykpCisgICAgICAgIHNwZWNpZmljVmFsdWUgPSAw
OworCiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKTsKICAgICBBU1NFUlQo
c3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSA9PSBPYmplY3RUeXBlKTsKICAgICBBU1NFUlQo
IVN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZShzdHJ1
Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSwgb2Zmc2V0KSk7
CkBAIC01NDMsNyArNTEwLDcgQEAgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IFN0cnVjdHVyZTo6YWRk
UHJvcAogCiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBvZmZzZXQgLSBzdHJ1Y3R1cmUtPm1f
YW5vbnltb3VzU2xvdENvdW50OwogICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmFub255bW91c1Nsb3RD
b3VudCgpID09IHRyYW5zaXRpb24tPmFub255bW91c1Nsb3RDb3VudCgpKTsKLSAgICBzdHJ1Y3R1
cmUtPnRyYW5zaXRpb25UYWJsZUFkZChtYWtlX3BhaXIocHJvcGVydHlOYW1lLmltcGwoKSwgYXR0
cmlidXRlcyksIHRyYW5zaXRpb24uZ2V0KCksIHNwZWNpZmljVmFsdWUpOworICAgIHN0cnVjdHVy
ZS0+bV90cmFuc2l0aW9uVGFibGUuYWRkKHRyYW5zaXRpb24uZ2V0KCkpOwogICAgIHJldHVybiB0
cmFuc2l0aW9uLnJlbGVhc2UoKTsKIH0KIApAQCAtOTc0LDExICs5NDEsNiBAQCBzaXplX3QgU3Ry
dWN0dXJlOjpwdXQoY29uc3QgSWRlbnRpZmllciYgCiAgICAgcmV0dXJuIG5ld09mZnNldDsKIH0K
IAotYm9vbCBTdHJ1Y3R1cmU6Omhhc1RyYW5zaXRpb24oU3RyaW5nSW1wbCogcmVwLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzKQotewotICAgIHJldHVybiB0cmFuc2l0aW9uVGFibGVIYXNUcmFuc2l0aW9u
KG1ha2VfcGFpcihyZXAsIGF0dHJpYnV0ZXMpKTsKLX0KLQogc2l6ZV90IFN0cnVjdHVyZTo6cmVt
b3ZlKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKICAgICBBU1NFUlQoIXByb3Bl
cnR5TmFtZS5pc051bGwoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuaAkocmV2aXNpb24gNzkyNTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDE1ICsxMTUsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIEFTU0VSVCghcHJvcGVydHlOYW1lLmlzTnVsbCgpKTsK
ICAgICAgICAgICAgIHJldHVybiBnZXQocHJvcGVydHlOYW1lLmltcGwoKSwgYXR0cmlidXRlcywg
c3BlY2lmaWNWYWx1ZSk7CiAgICAgICAgIH0KLSAgICAgICAgYm9vbCB0cmFuc2l0aW9uZWRGb3Io
Y29uc3QgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gbV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cyA9PSBzcGVjaWZpY1ZhbHVlOwotICAgICAgICB9
Ci0gICAgICAgIGJvb2wgaGFzVHJhbnNpdGlvbihTdHJpbmdJbXBsKiwgdW5zaWduZWQgYXR0cmli
dXRlcyk7Ci0gICAgICAgIGJvb2wgaGFzVHJhbnNpdGlvbihjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBoYXNUcmFuc2l0aW9uKHByb3BlcnR5TmFtZS5pbXBsKCksIGF0dHJpYnV0ZXMpOwotICAg
ICAgICB9CiAKICAgICAgICAgYm9vbCBoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzOyB9CiAgICAgICAgIHZvaWQgc2V0
SGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcyhib29sIGhhc0dldHRlclNldHRlclByb3BlcnRpZXMp
IHsgbV9oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzID0gaGFzR2V0dGVyU2V0dGVyUHJvcGVydGll
czsgfQpAQCAtMTkwLDIwICsxODEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJl
dHVybiBtX29mZnNldCA9PSBub09mZnNldCA/IDAgOiBtX29mZnNldCArIDE7CiAgICAgICAgIH0K
IAotICAgICAgICB0eXBlZGVmIHN0ZDo6cGFpcjxTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmUqPiBUcmFu
c2l0aW9uOwotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8U3RydWN0dXJlVHJhbnNpdGlvblRhYmxl
SGFzaDo6S2V5LCBUcmFuc2l0aW9uLCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGVIYXNoLCBTdHJ1
Y3R1cmVUcmFuc2l0aW9uVGFibGVIYXNoVHJhaXRzPiBUcmFuc2l0aW9uVGFibGU7Ci0KLSAgICAg
ICAgaW5saW5lIGJvb2wgdHJhbnNpdGlvblRhYmxlQ29udGFpbnMoY29uc3QgU3RydWN0dXJlVHJh
bnNpdGlvblRhYmxlSGFzaDo6S2V5JiBrZXksIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSk7Ci0gICAg
ICAgIGlubGluZSB2b2lkIHRyYW5zaXRpb25UYWJsZVJlbW92ZShjb25zdCBTdHJ1Y3R1cmVUcmFu
c2l0aW9uVGFibGVIYXNoOjpLZXkmIGtleSwgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlKTsKLSAgICAg
ICAgaW5saW5lIHZvaWQgdHJhbnNpdGlvblRhYmxlQWRkKGNvbnN0IFN0cnVjdHVyZVRyYW5zaXRp
b25UYWJsZUhhc2g6OktleSYga2V5LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNDZWxsKiBzcGVj
aWZpY1ZhbHVlKTsKLSAgICAgICAgaW5saW5lIGJvb2wgdHJhbnNpdGlvblRhYmxlSGFzVHJhbnNp
dGlvbihjb25zdCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGVIYXNoOjpLZXkmIGtleSkgY29uc3Q7
Ci0gICAgICAgIGlubGluZSBTdHJ1Y3R1cmUqIHRyYW5zaXRpb25UYWJsZUdldChjb25zdCBTdHJ1
Y3R1cmVUcmFuc2l0aW9uVGFibGVIYXNoOjpLZXkmIGtleSwgSlNDZWxsKiBzcGVjaWZpY1ZhbHVl
KSBjb25zdDsKLQotICAgICAgICBUcmFuc2l0aW9uVGFibGUqIHRyYW5zaXRpb25UYWJsZSgpIGNv
bnN0IHsgQVNTRVJUKCFtX2lzVXNpbmdTaW5nbGVTbG90KTsgcmV0dXJuIG1fdHJhbnNpdGlvbnMu
bV90YWJsZTsgfQotICAgICAgICBpbmxpbmUgdm9pZCBzZXRUcmFuc2l0aW9uVGFibGUoVHJhbnNp
dGlvblRhYmxlKiB0YWJsZSk7Ci0gICAgICAgIFN0cnVjdHVyZSogc2luZ2xlVHJhbnNpdGlvbigp
IGNvbnN0IHsgQVNTRVJUKG1faXNVc2luZ1NpbmdsZVNsb3QpOyByZXR1cm4gbV90cmFuc2l0aW9u
cy5tX3NpbmdsZVRyYW5zaXRpb247IH0KLSAgICAgICAgdm9pZCBzZXRTaW5nbGVUcmFuc2l0aW9u
KFN0cnVjdHVyZSogc3RydWN0dXJlKSB7IEFTU0VSVChtX2lzVXNpbmdTaW5nbGVTbG90KTsgbV90
cmFuc2l0aW9ucy5tX3NpbmdsZVRyYW5zaXRpb24gPSBzdHJ1Y3R1cmU7IH0KLSAgICAgICAgCiAg
ICAgICAgIGJvb2wgaXNWYWxpZChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmVDaGFpbiogY2FjaGVkUHJv
dG90eXBlQ2hhaW4pIGNvbnN0OwogCiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBlbXB0
eUVudHJ5SW5kZXggPSAwOwpAQCAtMjI1LDExICsyMDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgICAgICBjb25zdCBDbGFzc0luZm8qIG1fY2xhc3NJbmZvOwogCi0gICAgICAgIC8vICdtX2lz
VXNpbmdTaW5nbGVTbG90JyBpbmRpY2F0ZXMgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIHNpbmds
ZSB0cmFuc2l0aW9uIG9wdGltaXNhdGlvbi4KLSAgICAgICAgdW5pb24gewotICAgICAgICAgICAg
VHJhbnNpdGlvblRhYmxlKiBtX3RhYmxlOwotICAgICAgICAgICAgU3RydWN0dXJlKiBtX3Npbmds
ZVRyYW5zaXRpb247Ci0gICAgICAgIH0gbV90cmFuc2l0aW9uczsKKyAgICAgICAgU3RydWN0dXJl
VHJhbnNpdGlvblRhYmxlIG1fdHJhbnNpdGlvblRhYmxlOwogCiAgICAgICAgIFdlYWtHQ1B0cjxK
U1Byb3BlcnR5TmFtZUl0ZXJhdG9yPiBtX2VudW1lcmF0aW9uQ2FjaGU7CiAKQEAgLTI1NCw4ICsy
MjcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAgICAgICB1bnNpZ25lZCBtX3NwZWNp
ZmljRnVuY3Rpb25UaHJhc2hDb3VudCA6IDI7CiAgICAgICAgIHVuc2lnbmVkIG1fYW5vbnltb3Vz
U2xvdENvdW50IDogNTsKLSAgICAgICAgdW5zaWduZWQgbV9pc1VzaW5nU2luZ2xlU2xvdCA6IDE7
Ci0gICAgICAgIC8vIDQgZnJlZSBiaXRzCisgICAgICAgIC8vIDUgZnJlZSBiaXRzCiAgICAgfTsK
IAogICAgIGlubGluZSBzaXplX3QgU3RydWN0dXJlOjpnZXQoY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
VHJhbnNpdGlvblRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgJKHJldmlzaW9uIDc5MjU0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM3LDMzICszNyw5MiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNs
YXNzIFN0cnVjdHVyZTsKIAotICAgIHN0cnVjdCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGVIYXNo
IHsKLSAgICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8UmVmUHRyPFN0cmluZ0ltcGw+LCB1bnNpZ25l
ZD4gS2V5OwotICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBLZXkmIHApCisgICAg
Y2xhc3MgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGlu
dHB0cl90IFVzaW5nU2luZ2xlU2xvdEZsYWcgPSAxOworCisgICAgICAgIHN0cnVjdCBIYXNoIHsK
KyAgICAgICAgICAgIHR5cGVkZWYgc3RkOjpwYWlyPFJlZlB0cjxTdHJpbmdJbXBsPiwgdW5zaWdu
ZWQ+IEtleTsKKyAgICAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEtleSYgcCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcC5maXJzdC0+ZXhpc3RpbmdI
YXNoKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNv
bnN0IEtleSYgYSwgY29uc3QgS2V5JiBiKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBhID09IGI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN0YXRpYyBjb25z
dCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKKyAgICAgICAgfTsK
KworICAgICAgICBzdHJ1Y3QgSGFzaFRyYWl0cyB7CisgICAgICAgICAgICB0eXBlZGVmIFdURjo6
SGFzaFRyYWl0czxSZWZQdHI8U3RyaW5nSW1wbD4gPiBGaXJzdFRyYWl0czsKKyAgICAgICAgICAg
IHR5cGVkZWYgV1RGOjpHZW5lcmljSGFzaFRyYWl0czx1bnNpZ25lZD4gU2Vjb25kVHJhaXRzOwor
ICAgICAgICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8Rmlyc3RUcmFpdHM6OlRyYWl0VHlwZSwgU2Vj
b25kVHJhaXRzOjpUcmFpdFR5cGUgPiBUcmFpdFR5cGU7CisKKyAgICAgICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBGaXJzdFRyYWl0czo6ZW1wdHlWYWx1ZUlzWmVy
byAmJiBTZWNvbmRUcmFpdHM6OmVtcHR5VmFsdWVJc1plcm87CisgICAgICAgICAgICBzdGF0aWMg
VHJhaXRUeXBlIGVtcHR5VmFsdWUoKSB7IHJldHVybiBzdGQ6Om1ha2VfcGFpcihGaXJzdFRyYWl0
czo6ZW1wdHlWYWx1ZSgpLCBTZWNvbmRUcmFpdHM6OmVtcHR5VmFsdWUoKSk7IH0KKworICAgICAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IEZpcnN0VHJhaXRzOjpu
ZWVkc0Rlc3RydWN0aW9uIHx8IFNlY29uZFRyYWl0czo6bmVlZHNEZXN0cnVjdGlvbjsKKworICAg
ICAgICAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFRyYWl0VHlwZSYgc2xv
dCkgeyBGaXJzdFRyYWl0czo6Y29uc3RydWN0RGVsZXRlZFZhbHVlKHNsb3QuZmlyc3QpOyB9Cisg
ICAgICAgICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBUcmFpdFR5cGUmIHZh
bHVlKSB7IHJldHVybiBGaXJzdFRyYWl0czo6aXNEZWxldGVkVmFsdWUodmFsdWUuZmlyc3QpOyB9
CisgICAgICAgIH07CisKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEhhc2g6OktleSwgU3RydWN0
dXJlKiwgSGFzaCwgSGFzaFRyYWl0cz4gVHJhbnNpdGlvbk1hcDsKKworICAgIHB1YmxpYzoKKyAg
ICAgICAgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlKCkKKyAgICAgICAgICAgIDogbV9kYXRhKFVz
aW5nU2luZ2xlU2xvdEZsYWcpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBwLmZpcnN0
LT5leGlzdGluZ0hhc2goKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBib29sIGVxdWFs
KGNvbnN0IEtleSYgYSwgY29uc3QgS2V5JiBiKQorICAgICAgICB+U3RydWN0dXJlVHJhbnNpdGlv
blRhYmxlKCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICAgICAg
ICAgIGlmICghaXNVc2luZ1NpbmdsZVNsb3QoKSkKKyAgICAgICAgICAgICAgICBkZWxldGUgbWFw
KCk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJl
VG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Ci0gICAgfTsKKyAgICAgICAgaW5saW5lIHZvaWQgYWRk
KFN0cnVjdHVyZSopOworICAgICAgICBpbmxpbmUgdm9pZCByZW1vdmUoU3RydWN0dXJlKik7Cisg
ICAgICAgIGlubGluZSBib29sIGNvbnRhaW5zKFN0cmluZ0ltcGwqIHJlcCwgdW5zaWduZWQgYXR0
cmlidXRlcykgY29uc3Q7CisgICAgICAgIGlubGluZSBTdHJ1Y3R1cmUqIGdldChTdHJpbmdJbXBs
KiByZXAsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgYm9vbCBpc1VzaW5nU2luZ2xlU2xvdCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBtX2RhdGEgJiBVc2luZ1NpbmdsZVNsb3RGbGFnOworICAgICAgICB9CisKKyAgICAg
ICAgVHJhbnNpdGlvbk1hcCogbWFwKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUKCFpc1VzaW5nU2luZ2xlU2xvdCgpKTsKKyAgICAgICAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PFRyYW5zaXRpb25NYXAqPihtX2RhdGEpOworICAgICAgICB9CiAKLSAgICBzdHJ1Y3Qg
U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlSGFzaFRyYWl0cyB7Ci0gICAgICAgIHR5cGVkZWYgV1RG
OjpIYXNoVHJhaXRzPFJlZlB0cjxTdHJpbmdJbXBsPiA+IEZpcnN0VHJhaXRzOwotICAgICAgICB0
eXBlZGVmIFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8dW5zaWduZWQ+IFNlY29uZFRyYWl0czsKLSAg
ICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8Rmlyc3RUcmFpdHM6OlRyYWl0VHlwZSwgU2Vjb25kVHJh
aXRzOjpUcmFpdFR5cGUgPiBUcmFpdFR5cGU7CisgICAgICAgIHZvaWQgc2V0TWFwKFRyYW5zaXRp
b25NYXAqIG1hcCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGlzVXNpbmdTaW5nbGVT
bG90KCkpOworCisgICAgICAgICAgICAvLyBUaGlzIGltcGxpY2l0bHkgY2xlYXJzIHRoZSBmbGFn
IHRoYXQgaW5kaWNhdGVzIHdlJ3JlIHVzaW5nIGEgc2luZ2xlIHRyYW5zaXRpb24KKyAgICAgICAg
ICAgIG1fZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1hcCk7CisKKyAgICAgICAg
ICAgIEFTU0VSVCghaXNVc2luZ1NpbmdsZVNsb3QoKSk7CisgICAgICAgIH0KIAotICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gRmlyc3RUcmFpdHM6OmVtcHR5VmFs
dWVJc1plcm8gJiYgU2Vjb25kVHJhaXRzOjplbXB0eVZhbHVlSXNaZXJvOwotICAgICAgICBzdGF0
aWMgVHJhaXRUeXBlIGVtcHR5VmFsdWUoKSB7IHJldHVybiBzdGQ6Om1ha2VfcGFpcihGaXJzdFRy
YWl0czo6ZW1wdHlWYWx1ZSgpLCBTZWNvbmRUcmFpdHM6OmVtcHR5VmFsdWUoKSk7IH0KKyAgICAg
ICAgU3RydWN0dXJlKiBzaW5nbGVUcmFuc2l0aW9uKCkgY29uc3QKKyAgICAgICAgeworICAgICAg
ICAgICAgQVNTRVJUKGlzVXNpbmdTaW5nbGVTbG90KCkpOworICAgICAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8U3RydWN0dXJlKj4obV9kYXRhICYgflVzaW5nU2luZ2xlU2xvdEZsYWcp
OworICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlv
biA9IEZpcnN0VHJhaXRzOjpuZWVkc0Rlc3RydWN0aW9uIHx8IFNlY29uZFRyYWl0czo6bmVlZHNE
ZXN0cnVjdGlvbjsKKyAgICAgICAgdm9pZCBzZXRTaW5nbGVUcmFuc2l0aW9uKFN0cnVjdHVyZSog
c3RydWN0dXJlKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoaXNVc2luZ1NpbmdsZVNs
b3QoKSk7CisgICAgICAgICAgICBtX2RhdGEgPSByZWludGVycHJldF9jYXN0PGludHB0cl90Pihz
dHJ1Y3R1cmUpIHwgVXNpbmdTaW5nbGVTbG90RmxhZzsKKyAgICAgICAgfQogCi0gICAgICAgIHN0
YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShUcmFpdFR5cGUmIHNsb3QpIHsgRmlyc3RU
cmFpdHM6OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZShzbG90LmZpcnN0KTsgfQotICAgICAgICBzdGF0
aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBUcmFpdFR5cGUmIHZhbHVlKSB7IHJldHVybiBG
aXJzdFRyYWl0czo6aXNEZWxldGVkVmFsdWUodmFsdWUuZmlyc3QpOyB9CisgICAgICAgIGludHB0
cl90IG1fZGF0YTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
</data>
<flag name="review"
          id="75179"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>