From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH v6 03/21] xen/x86: Generate deep dependencies of features Date: Fri, 8 Apr 2016 21:31:39 +0100 Message-ID: <1460147517-11706-4-git-send-email-andrew.cooper3@citrix.com> References: <1460147517-11706-1-git-send-email-andrew.cooper3@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1460147517-11706-1-git-send-email-andrew.cooper3@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: Andrew Cooper , Jan Beulich List-Id: xen-devel@lists.xenproject.org U29tZSBmZWF0dXJlcyBkZXBlbmQgb24gb3RoZXIgZmVhdHVyZXMuICBXb3JraW5nIG91dCBhbmQg bWFpbnRhaW5pbmcgdGhlIGV4YWN0CmRlcGVuZGVuY3kgdHJlZSBpcyBjb21wbGljYXRlZCwgc28g aXQgaXMgZXhwcmVzc2VkIGluIHRoZSBhdXRvbWF0aWMgZ2VuZXJhdGlvbgpzY3JpcHQuCgpBdCBy dW50aW1lLCBYZW4gbmVlZHMgdG8gYmUgZGlzYWJsZSBhbGwgZmVhdHVyZXMgd2hpY2ggYXJlIGRl cGVuZGVudCBvbiBhCmZlYXR1cmUgYmVpbmcgZGlzYWJsZWQuICBCZWNhdXNlIG9mIHRoZSBmbGF0 dGVuaW5nIHBlcmZvcm1lZCBhdCBjb21waWxlIHRpbWUsCnJ1bnRpbWUgY2FuIHVzZSBhIHNpbmds ZSBtYXNrIHRvIGRpc2FibGUgYWxsIGV2ZW50dWFsIGZlYXR1cmVzLgoKU2lnbmVkLW9mZi1ieTog QW5kcmV3IENvb3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNvbT4KUmV2aWV3ZWQtYnk6IEph biBCZXVsaWNoIDxqYmV1bGljaEBzdXNlLmNvbT4KLS0tCkNDOiBKYW4gQmV1bGljaCA8SkJldWxp Y2hAc3VzZS5jb20+Cgp2MjoKICogTmV3Lgp2MzoKICogVmFzdGx5IG1vcmUgcmVzZXJjaCBhbmQg Y29tbWVudHMuCnY0OgogKiBFeHBhbmQgY29tbWl0IG1lc3NhZ2UuCiAqIE1vcmUgdHdlYWtzIHRv IHRoZSBkZXBlbmRlbmN5IHRyZWUuCiAqIEF2b2lkIGZvcl9lYWNoX3NldF9iaXQoKSB3YWxraW5n IG9mZiB0aGUgZW5kIG9mIGRpc2FibGVkX2ZlYXR1cmVzW10uCiAgIEV4cGFuZGluZyBkaXNhYmxl ZF9mZWF0dXJlc1tdIHR1cm5zIG91dCB0byBiZSBmYXIgbW9yZSBzaW1wbGUgdGhhbgogICBhdHRl bXB0aW5nIHRvIG9wZW5jb2RlIGZvcl9lYWNoX3NldF9iaXQoKQp2NToKICogRnVydGhlciB0d2Vh a2luZyBvZiB0aGUgU1NFKiBkZXBlbmRlbmNpZXMuCnY2OgogKiBTd2l0Y2ggdGhlIFBLVSBkZXBl bmRlbmN5IGZyb20gUEFFIHRvIExNLiAgSXQgaXMgZG9jdW1lbnRlZCBhcyBvbmx5IHRha2luZwog ICBlZmZlY3QgaW4gNC1sZXZlbCBwYWdpbmcsIGJ1dCBpbiBhIHdheSB3aGljaCBpbXBsaWVzIHRo YXQgaXQgY2FuIGJlIGFjdGl2ZQogICBvdXQgb2YgTG9uZyBNb2RlLiAgSW4gcHJpbmNpcGxjZSBp dCBjb3VsZCBiZSB1c2VkIGJ5IDMyYml0IFBWIGd1ZXN0cy4gIFdlCiAgIGNhbiByZWxheCB0aGUg cmVzdHJpY3Rpb24gaWYgbmVjZXNzYXJ5LgotLS0KIHhlbi9hcmNoL3g4Ni9jcHVpZC5jICAgICAg ICB8ICA1NiArKysrKysrKysrKysrKysrCiB4ZW4vaW5jbHVkZS9hc20teDg2L2NwdWlkLmggfCAg IDIgKwogeGVuL3Rvb2xzL2dlbi1jcHVpZC5weSAgICAgIHwgMTUyICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKystCiAzIGZpbGVzIGNoYW5nZWQsIDIwOSBpbnNlcnRp b25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L2NwdWlkLmMg Yi94ZW4vYXJjaC94ODYvY3B1aWQuYwppbmRleCA0MTQzOWY4Li5lMWUwZTQ0IDEwMDY0NAotLS0g YS94ZW4vYXJjaC94ODYvY3B1aWQuYworKysgYi94ZW4vYXJjaC94ODYvY3B1aWQuYwpAQCAtMTEs NiArMTEsNyBAQCBjb25zdCB1aW50MzJfdCBzcGVjaWFsX2ZlYXR1cmVzW10gPSBJTklUX1NQRUNJ QUxfRkVBVFVSRVM7CiBzdGF0aWMgY29uc3QgdWludDMyX3QgX19pbml0Y29uc3QgcHZfZmVhdHVy ZW1hc2tbXSA9IElOSVRfUFZfRkVBVFVSRVM7CiBzdGF0aWMgY29uc3QgdWludDMyX3QgX19pbml0 Y29uc3QgaHZtX3NoYWRvd19mZWF0dXJlbWFza1tdID0gSU5JVF9IVk1fU0hBRE9XX0ZFQVRVUkVT Owogc3RhdGljIGNvbnN0IHVpbnQzMl90IF9faW5pdGNvbnN0IGh2bV9oYXBfZmVhdHVyZW1hc2tb XSA9IElOSVRfSFZNX0hBUF9GRUFUVVJFUzsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBfX2luaXRj b25zdCBkZWVwX2ZlYXR1cmVzW10gPSBJTklUX0RFRVBfRkVBVFVSRVM7CiAKIHVpbnQzMl90IF9f cmVhZF9tb3N0bHkgcmF3X2ZlYXR1cmVzZXRbRlNDQVBJTlRTXTsKIHVpbnQzMl90IF9fcmVhZF9t b3N0bHkgcHZfZmVhdHVyZXNldFtGU0NBUElOVFNdOwpAQCAtMTgsMTIgKzE5LDM2IEBAIHVpbnQz Ml90IF9fcmVhZF9tb3N0bHkgaHZtX2ZlYXR1cmVzZXRbRlNDQVBJTlRTXTsKIAogc3RhdGljIHZv aWQgX19pbml0IHNhbml0aXNlX2ZlYXR1cmVzZXQodWludDMyX3QgKmZzKQogeworICAgIC8qIGZv cl9lYWNoX3NldF9iaXQoKSB1c2VzIHVuc2lnbmVkIGxvbmdzLiAgRXh0ZW5kIHdpdGggemVyb2Vz LiAqLworICAgIHVpbnQzMl90IGRpc2FibGVkX2ZlYXR1cmVzWworICAgICAgICBST1VORFVQKEZT Q0FQSU5UUywgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpL3NpemVvZih1aW50MzJfdCkpXSA9IHt9Owog ICAgIHVuc2lnbmVkIGludCBpOwogCiAgICAgZm9yICggaSA9IDA7IGkgPCBGU0NBUElOVFM7ICsr aSApCiAgICAgewogICAgICAgICAvKiBDbGFtcCB0byBrbm93biBtYXNrLiAqLwogICAgICAgICBm c1tpXSAmPSBrbm93bl9mZWF0dXJlc1tpXTsKKworICAgICAgICAvKgorICAgICAgICAgKiBJZGVu dGlmeSB3aGljaCBmZWF0dXJlcyB3aXRoIGRlZXAgZGVwZW5kZW5jaWVzIGhhdmUgYmVlbgorICAg ICAgICAgKiBkaXNhYmxlZC4KKyAgICAgICAgICovCisgICAgICAgIGRpc2FibGVkX2ZlYXR1cmVz W2ldID0gfmZzW2ldICYgZGVlcF9mZWF0dXJlc1tpXTsKKyAgICB9CisKKyAgICBmb3JfZWFjaF9z ZXRfYml0KGksICh2b2lkICopZGlzYWJsZWRfZmVhdHVyZXMsCisgICAgICAgICAgICAgICAgICAg ICBzaXplb2YoZGlzYWJsZWRfZmVhdHVyZXMpICogOCkKKyAgICB7CisgICAgICAgIGNvbnN0IHVp bnQzMl90ICpkZnMgPSBsb29rdXBfZGVlcF9kZXBzKGkpOworICAgICAgICB1bnNpZ25lZCBpbnQg ajsKKworICAgICAgICBBU1NFUlQoZGZzKTsgLyogZGVlcF9mZWF0dXJlc1tdIHNob3VsZCBndWFy ZW50ZWUgdGhpcy4gKi8KKworICAgICAgICBmb3IgKCBqID0gMDsgaiA8IEZTQ0FQSU5UUzsgKytq ICkKKyAgICAgICAgeworICAgICAgICAgICAgZnNbal0gJj0gfmRmc1tqXTsKKyAgICAgICAgICAg IGRpc2FibGVkX2ZlYXR1cmVzW2pdICY9IH5kZnNbal07CisgICAgICAgIH0KICAgICB9CiAKICAg ICAvKgpAQCAtMTY0LDYgKzE4OSwzNiBAQCB2b2lkIF9faW5pdCBjYWxjdWxhdGVfZmVhdHVyZXNl dHModm9pZCkKICAgICBjYWxjdWxhdGVfaHZtX2ZlYXR1cmVzZXQoKTsKIH0KIAorY29uc3QgdWlu dDMyX3QgKiBfX2luaXQgbG9va3VwX2RlZXBfZGVwcyh1aW50MzJfdCBmZWF0dXJlKQoreworICAg IHN0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgICAgICB1aW50MzJfdCBmZWF0dXJlOworICAgICAg ICB1aW50MzJfdCBmc1tGU0NBUElOVFNdOworICAgIH0gZGVlcF9kZXBzW10gX19pbml0Y29uc3Qg PSBJTklUX0RFRVBfREVQUzsKKyAgICB1bnNpZ25lZCBpbnQgc3RhcnQgPSAwLCBlbmQgPSBBUlJB WV9TSVpFKGRlZXBfZGVwcyk7CisKKyAgICBCVUlMRF9CVUdfT04oQVJSQVlfU0laRShkZWVwX2Rl cHMpICE9IE5SX0RFRVBfREVQUyk7CisKKyAgICAvKiBGYXN0IGVhcmx5IGV4aXQuICovCisgICAg aWYgKCAhdGVzdF9iaXQoZmVhdHVyZSwgZGVlcF9mZWF0dXJlcykgKQorICAgICAgICByZXR1cm4g TlVMTDsKKworICAgIC8qIGRlZXBfZGVwc1tdIGlzIHNvcnRlZC4gIFBlcmZvcm0gYSBiaW5hcnkg c2VhcmNoLiAqLworICAgIHdoaWxlICggc3RhcnQgPCBlbmQgKQorICAgIHsKKyAgICAgICAgdW5z aWduZWQgaW50IG1pZCA9IHN0YXJ0ICsgKChlbmQgLSBzdGFydCkgLyAyKTsKKworICAgICAgICBp ZiAoIGRlZXBfZGVwc1ttaWRdLmZlYXR1cmUgPiBmZWF0dXJlICkKKyAgICAgICAgICAgIGVuZCA9 IG1pZDsKKyAgICAgICAgZWxzZSBpZiAoIGRlZXBfZGVwc1ttaWRdLmZlYXR1cmUgPCBmZWF0dXJl ICkKKyAgICAgICAgICAgIHN0YXJ0ID0gbWlkICsgMTsKKyAgICAgICAgZWxzZQorICAgICAgICAg ICAgcmV0dXJuIGRlZXBfZGVwc1ttaWRdLmZzOworICAgIH0KKworICAgIHJldHVybiBOVUxMOwor fQorCiBzdGF0aWMgdm9pZCBfX2luaXQgX19tYXliZV91bnVzZWQgYnVpbGRfYXNzZXJ0aW9ucyh2 b2lkKQogewogICAgIEJVSUxEX0JVR19PTihBUlJBWV9TSVpFKGtub3duX2ZlYXR1cmVzKSAhPSBG U0NBUElOVFMpOwpAQCAtMTcxLDYgKzIyNiw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBfX21heWJl X3VudXNlZCBidWlsZF9hc3NlcnRpb25zKHZvaWQpCiAgICAgQlVJTERfQlVHX09OKEFSUkFZX1NJ WkUocHZfZmVhdHVyZW1hc2spICE9IEZTQ0FQSU5UUyk7CiAgICAgQlVJTERfQlVHX09OKEFSUkFZ X1NJWkUoaHZtX3NoYWRvd19mZWF0dXJlbWFzaykgIT0gRlNDQVBJTlRTKTsKICAgICBCVUlMRF9C VUdfT04oQVJSQVlfU0laRShodm1faGFwX2ZlYXR1cmVtYXNrKSAhPSBGU0NBUElOVFMpOworICAg IEJVSUxEX0JVR19PTihBUlJBWV9TSVpFKGRlZXBfZmVhdHVyZXMpICE9IEZTQ0FQSU5UUyk7CiB9 CiAKIC8qCmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20teDg2L2NwdWlkLmggYi94ZW4vaW5j bHVkZS9hc20teDg2L2NwdWlkLmgKaW5kZXggNTA0MWJjZC4uNDcyNTY3MiAxMDA2NDQKLS0tIGEv eGVuL2luY2x1ZGUvYXNtLXg4Ni9jcHVpZC5oCisrKyBiL3hlbi9pbmNsdWRlL2FzbS14ODYvY3B1 aWQuaApAQCAtMjksNiArMjksOCBAQCBleHRlcm4gdWludDMyX3QgaHZtX2ZlYXR1cmVzZXRbRlND QVBJTlRTXTsKIAogdm9pZCBjYWxjdWxhdGVfZmVhdHVyZXNldHModm9pZCk7CiAKK2NvbnN0IHVp bnQzMl90ICpsb29rdXBfZGVlcF9kZXBzKHVpbnQzMl90IGZlYXR1cmUpOworCiAjZW5kaWYgLyog X19BU1NFTUJMWV9fICovCiAjZW5kaWYgLyogIV9fWDg2X0NQVUlEX0hfXyAqLwogCmRpZmYgLS1n aXQgYS94ZW4vdG9vbHMvZ2VuLWNwdWlkLnB5IGIveGVuL3Rvb2xzL2dlbi1jcHVpZC5weQppbmRl eCBmOTcxYWIyLi4xNzhmYWE5IDEwMDc1NQotLS0gYS94ZW4vdG9vbHMvZ2VuLWNwdWlkLnB5Cisr KyBiL3hlbi90b29scy9nZW4tY3B1aWQucHkKQEAgLTE0NCw2ICsxNDQsMTQwIEBAIGRlZiBjcnVu Y2hfbnVtYmVycyhzdGF0ZSk6CiAgICAgc3RhdGUuaHZtX3NoYWRvdyA9IGZlYXR1cmVzZXRfdG9f dWludDMycyhzdGF0ZS5yYXdfaHZtX3NoYWRvdywgbnJfZW50cmllcykKICAgICBzdGF0ZS5odm1f aGFwID0gZmVhdHVyZXNldF90b191aW50MzJzKHN0YXRlLnJhd19odm1faGFwLCBucl9lbnRyaWVz KQogCisgICAgIworICAgICMgRmVhdHVyZSBkZXBlbmRlbmN5IGluZm9ybWF0aW9uLgorICAgICMK KyAgICAjICEhISBXQVJOSU5HICEhIQorICAgICMKKyAgICAjIEEgbG90IG9mIHRoaXMgaW5mb3Jt YXRpb24gaXMgZGVyaXZlZCBmcm9tIHRoZSB3cml0dGVuIHRleHQgb2YgdmVuZG9ycworICAgICMg c29mdHdhcmUgbWFudWFscywgcmF0aGVyIHRoYW4gZGlyZWN0bHkgZnJvbSBhIHN0YXRlbWVudC4g IEFzIHN1Y2gsIGl0CisgICAgIyBkb2VzIGNvbnRhaW4gZ3Vlc3N3b3JrIGFuZCBhc3N1bXB0aW9u cywgYW5kIG1heSBub3QgYWNjdXJhdGVseSBtYXRjaAorICAgICMgaGFyZHdhcmUgaW1wbGVtZW50 YXRpb25zLgorICAgICMKKyAgICAjIEl0IGlzIGhvd2V2ZXIgZGVzaWduZWQgdG8gY3JlYXRlIGFu IGVuZCByZXN1bHQgZm9yIGEgZ3Vlc3Qgd2hpY2ggZG9lcworICAgICMgcGxhdXNpYmx5IG1hdGNo IHJlYWwgaGFyZHdhcmUuCisgICAgIworICAgICMgISEhIFdBUk5JTkcgISEhCisgICAgIworICAg ICMgVGhlIGZvcm1hdCBvZiB0aGlzIGRpY3Rpb25hcnkgaXMgdGhhdCB0aGUgZmVhdHVyZSBpbiB0 aGUga2V5IGlzIGEgZGlyZWN0CisgICAgIyBwcmVyZXF1aXNpdGUgb2YgZWFjaCBmZWF0dXJlIGlu IHRoZSB2YWx1ZS4KKyAgICAjCisgICAgIyBUaGUgZmlyc3QgY29uc2lkZXJhdGlvbiBpcyBhYm91 dCB3aGljaCBmdW5jdGlvbmFsaXR5IGlzIHBoeXNpY2FsbHkgYnVpbHQKKyAgICAjIG9uIHRvcCBv ZiBvdGhlciBmZWF0dXJlcy4gIFRoZSBzZWNvbmQgY29uc2lkZXJhdGlvbiwgd2hpY2ggaXMgbW9y ZQorICAgICMgc3ViamVjdGl2ZSwgaXMgd2hldGhlciByZWFsIGhhcmR3YXJlIHdvdWxkIGV2ZXIg YmUgZm91bmQgc3VwcG9ydGluZworICAgICMgZmVhdHVyZSBYIGJ1dCBub3QgWS4KKyAgICAjCisg ICAgZGVwcyA9IHsKKyAgICAgICAgIyBGUFUgaXMgdGFrZW4gdG8gbWVhbiBzdXBwb3J0IGZvciB0 aGUgeDg3IHJlZ2lzZXJzIGFzIHdlbGwgYXMgdGhlCisgICAgICAgICMgaW5zdHJ1Y3Rpb25zLiAg TU1YIGlzIGRvY3VtZW50ZWQgdG8gYWxpYXMgdGhlICVNTSByZWdpc3RlcnMgb3ZlciB0aGUKKyAg ICAgICAgIyB4ODcgJVNUIHJlZ2lzdGVycyBpbiBoYXJkd2FyZS4KKyAgICAgICAgRlBVOiBbTU1Y XSwKKworICAgICAgICAjIFRoZSBQU0UzNiBmZWF0dXJlIGluZGljYXRlcyB0aGF0IHJlc2VydmVk IGJpdHMgaW4gYSBQU0Ugc3VwZXJwYWdlCisgICAgICAgICMgbWF5IGJlIHVzZWQgYXMgZXh0cmEg cGh5c2ljYWwgYWRkcmVzcyBiaXRzLgorICAgICAgICBQU0U6IFtQU0UzNl0sCisKKyAgICAgICAg IyBFbnRlcmluZyBMb25nIE1vZGUgcmVxdWlyZXMgdGhhdCAlQ1I0LlBBRSBpcyBzZXQuICBUaGUg TlggcGFnZXRhYmxlCisgICAgICAgICMgYml0IGlzIG9ubHkgcmVwcmVzZW50YWJsZSBpbiB0aGUg NjRiaXQgUFRFIGZvcm1hdCBvZmZlcmVkIGJ5IFBBRS4KKyAgICAgICAgUEFFOiBbTE0sIE5YXSwK KworICAgICAgICAjIEFQSUMgaXMgc3BlY2lhbCwgYnV0IFgyQVBJQyBkb2VzIGRlcGVuZCBvbiBB UElDIGJlaW5nIGF2YWlsYWJsZSBpbgorICAgICAgICAjIHRoZSBmaXJzdCBwbGFjZS4KKyAgICAg ICAgQVBJQzogW1gyQVBJQ10sCisKKyAgICAgICAgIyBBTUQgYnVpbHQgTU1YRXh0ZW50aW9ucyBh bmQgM0ROb3cgYXMgZXh0ZW50aW9ucyB0byBNTVguCisgICAgICAgIE1NWDogW01NWEVYVCwgXzNE Tk9XXSwKKworICAgICAgICAjIFRoZSBGWFNBVkUvRlhSU1RPUiBpbnN0cnVjdGlvbnMgd2VyZSBp bnRyb2R1Y2VkIGludG8gaGFyZHdhcmUgYmVmb3JlCisgICAgICAgICMgU1NFLCB3aGljaCBpcyB3 aHkgdGhleSBiZWhhdmUgZGlmZmVyZW50bHkgYmFzZWQgb24gJUNSNC5PU0ZYU0FWRSBhbmQKKyAg ICAgICAgIyBoYXZlIHRoZWlyIG93biBmZWF0dXJlIGJpdC4gIEFNRCBob3dldmVyIGludHJvZHVj ZSB0aGUgRmFzdCBGWFNSCisgICAgICAgICMgZmVhdHVyZSBhcyBhbiBvcHRpbWlzYXRpb24uCisg ICAgICAgIEZYU1I6IFtGRlhTUiwgU1NFXSwKKworICAgICAgICAjIFNTRSBpcyB0YWtlbiB0byBt ZWFuIHN1cHBvcnQgZm9yIHRoZSAlWE1NIHJlZ2lzdGVycyBhcyB3ZWxsIGFzIHRoZQorICAgICAg ICAjIGluc3RydWN0aW9ucy4gIFNldmVyYWwgZnV0aGVyIGluc3RydWN0aW9uIHNldHMgYXJlIGJ1 aWx0IG9uIGNvcmUKKyAgICAgICAgIyAlWE1NIHN1cHBvcnQsIHdpdGhvdXQgc3BlY2lmaWMgaW50 ZXItZGVwZW5kZW5jaWVzLgorICAgICAgICBTU0U6IFtTU0UyLCBTU0UzLCBTU1NFMywgU1NFNEEs CisgICAgICAgICAgICAgIEFFU05JLCBTSEFdLAorCisgICAgICAgICMgU1NFMiB3YXMgcmUtc3Bl Y2lmaWVkIGFzIGNvcmUgaW5zdHJ1Y3Rpb25zIGZvciA2NGJpdC4KKyAgICAgICAgU1NFMjogW0xN XSwKKworICAgICAgICAjIFNTRTQuMSBleHBsaWNpdGx5IGRlcGVuZHMgb24gU1NFMyBhbmQgU1NT RTMKKyAgICAgICAgU1NFMzogW1NTRTRfMV0sCisgICAgICAgIFNTU0UzOiBbU1NFNF8xXSwKKwor ICAgICAgICAjIFNTRTQuMiBleHBsaWNpdGx5IGRlcGVuZHMgb24gU1NFNC4xCisgICAgICAgIFNT RTRfMTogW1NTRTRfMl0sCisKKyAgICAgICAgIyBBTUQgc3BlY2lmeSBubyByZWxhdGlvbnNoaXAg YmV0d2VlbiBQT1BDTlQgYW5kIFNTRTQuMi4gIEludGVsCisgICAgICAgICMgZG9jdW1lbnQgdGhh dCBTU0U0LjIgc2hvdWxkIGJlIGNoZWNrZWQgZm9yIGJlZm9yZSBjaGVja2luZyBmb3IKKyAgICAg ICAgIyBQT1BDTlQuICBIb3dldmVyLCBpdCBoYXMgaXRzIG93biBmZWF0dXJlIGJpdCwgYW5kIG9w ZXJhdGVzIG9uIEdQUnMKKyAgICAgICAgIyByYXRoZXIgdGhhbiAlWE1NIHN0YXRlLCBzbyBkb2Vz bid0IGluaGVyZW50bHkgZGVwZW5kIG9uIFNTRS4KKyAgICAgICAgIyBUaGVyZWZvcmUsIHdlIGRv IG5vdCBzcGVjaWZ5IGEgZGVwZW5kZW5jeSBiZXR3ZWVuIFNTRTRfMiBhbmQgUE9QQ05ULgorICAg ICAgICAjCisgICAgICAgICMgU1NFNF8yOiBbUE9QQ05UXQorCisgICAgICAgICMgVGhlIElOVlBD SUQgaW5zdHJ1Y3Rpb24gZGVwZW5kcyBvbiBQQ0lEIGluZnJhc3RydWN0dXJlIGJlaW5nCisgICAg ICAgICMgYXZhaWxhYmxlLgorICAgICAgICBQQ0lEOiBbSU5WUENJRF0sCisKKyAgICAgICAgIyBY U0FWRSBpcyBhbiBleHRyYSBzZXQgb2YgaW5zdHJ1Y3Rpb25zIGZvciBzdGF0ZSBtYW5hZ2VtZW50 LCBidXQKKyAgICAgICAgIyBkb2Vzbid0IGNvbnN0aXR1ZSBuZXcgc3RhdGUgaXRzZWxmLiAgU29t ZSBvZiB0aGUgZGVwZW5kZW50IGZlYXR1cmVzCisgICAgICAgICMgYXJlIGluc3RydWN0aW9ucyBi dWlsdCBvbiB0b3Agb2YgYmFzZSBYU0FWRSwgd2hpbGUgb3RoZXJzIGFyZSBuZXcKKyAgICAgICAg IyBpbnN0cnVjdGlvbiBncm91cHMgd2hpY2ggYXJlIHNwZWNpZmllZCB0byByZXF1aXJlIFhTQVZF IGZvciBzdGF0ZQorICAgICAgICAjIG1hbmFnZW1lbnQuCisgICAgICAgIFhTQVZFOiBbWFNBVkVP UFQsIFhTQVZFQywgWEdFVEJWMSwgWFNBVkVTLAorICAgICAgICAgICAgICAgIEFWWCwgTVBYLCBQ S1UsIExXUF0sCisKKyAgICAgICAgIyBBVlggaXMgdGFrZW4gdG8gbWVhbiBoYXJkd2FyZSBzdXBw b3J0IGZvciBWRVggZW5jb2RlZCBpbnN0cnVjdGlvbnMsCisgICAgICAgICMgMjU2Yml0IHJlZ2lz dGVycywgYW5kIHRoZSBpbnN0cnVjdGlvbnMgdGhlbXNlbHZlcy4gIEVhY2ggb2YgdGhlc2UKKyAg ICAgICAgIyBzdWJzZXF1ZW50IGluc3RydWN0aW9uIGdyb3VwcyBtYXkgb25seSBiZSBWRVggZW5j b2RlZC4KKyAgICAgICAgQVZYOiBbRk1BLCBGTUE0LCBGMTZDLCBBVlgyLCBYT1BdLAorCisgICAg ICAgICMgQ1gxNiBpcyBvbmx5IGVuY29kYWJsZSBpbiBMb25nIE1vZGUuICBMQUhGX0xNIGluZGlj YXRlcyB0aGF0IHRoZQorICAgICAgICAjIFNBSEYvTEFIRiBpbnN0cnVjdGlvbnMgYXJlIHJlaW50 cm9kdWNlZCBpbiBMb25nIE1vZGUuICAxR0IKKyAgICAgICAgIyBzdXBlcnBhZ2VzLCBQQ0lEIGFu ZCBQS1UgYXJlIG9ubHkgYXZhaWxhYmxlIGluIDQgbGV2ZWwgcGFnaW5nLgorICAgICAgICBMTTog W0NYMTYsIFBDSUQsIExBSEZfTE0sIFBBR0UxR0IsIFBLVV0sCisKKyAgICAgICAgIyBBTUQgSzYt MisgYW5kIEs2LUlJSSBwcm9jZXNzb3JzIHNoaXBwZWQgd2l0aCAzRE5vdyssIGJleW9uZCB0aGUK KyAgICAgICAgIyBzdGFuZGFyZCAzRE5vdyBpbiB0aGUgZWFybGllciBLNiBwcm9jZXNzb3JzLgor ICAgICAgICBfM0ROT1c6IFtfM0ROT1dFWFRdLAorICAgIH0KKworICAgIGRlZXBfZmVhdHVyZXMg PSB0dXBsZShzb3J0ZWQoZGVwcy5rZXlzKCkpKQorICAgIHN0YXRlLmRlZXBfZGVwcyA9IHt9CisK KyAgICBmb3IgZmVhdCBpbiBkZWVwX2ZlYXR1cmVzOgorCisgICAgICAgIHNlZW4gPSBbZmVhdF0K KyAgICAgICAgdG9fcHJvY2VzcyA9IGxpc3QoZGVwc1tmZWF0XSkKKworICAgICAgICB3aGlsZSBs ZW4odG9fcHJvY2Vzcyk6CisKKyAgICAgICAgICAgICMgVG8gZGVidWcsIHVuY29tbWVudCB0aGUg Zm9sbG93aW5nIGxpbmVzOgorICAgICAgICAgICAgIyBkZWYgcmVwbChsKToKKyAgICAgICAgICAg ICMgICAgIHJldHVybiAiWyIgKyAiLCAiLmpvaW4oKHN0YXRlLm5hbWVzW3hdIGZvciB4IGluIGwp KSArICJdIgorICAgICAgICAgICAgIyBwcmludCA+PnN5cy5zdGRlcnIsICJGZWF0dXJlICVzLCBz ZWVuICVzLCB0b19wcm9jZXNzICVzICIgJSBcCisgICAgICAgICAgICAjICAgICAoc3RhdGUubmFt ZXNbZmVhdF0sIHJlcGwoc2VlbiksIHJlcGwodG9fcHJvY2VzcykpCisKKyAgICAgICAgICAgIGYg PSB0b19wcm9jZXNzLnBvcCgwKQorCisgICAgICAgICAgICBpZiBmIGluIHNlZW46CisgICAgICAg ICAgICAgICAgcmFpc2UgRmFpbCgiRVJST1I6IEN5Y2xlIGZvdW5kIHdpdGggJXMgd2hlbiBwcm9j ZXNzaW5nICVzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc3RhdGUubmFtZXNbZl0s IHN0YXRlLm5hbWVzW2ZlYXRdKSkKKworICAgICAgICAgICAgc2Vlbi5hcHBlbmQoZikKKyAgICAg ICAgICAgIHRvX3Byb2Nlc3MgPSBsaXN0KHNldCh0b19wcm9jZXNzICsgZGVwcy5nZXQoZiwgW10p KSkKKworICAgICAgICBzdGF0ZS5kZWVwX2RlcHNbZmVhdF0gPSBzZWVuWzE6XQorCisgICAgc3Rh dGUuZGVlcF9mZWF0dXJlcyA9IGZlYXR1cmVzZXRfdG9fdWludDMycyhkZXBzLmtleXMoKSwgbnJf ZW50cmllcykKKyAgICBzdGF0ZS5ucl9kZWVwX2RlcHMgPSBsZW4oc3RhdGUuZGVlcF9kZXBzLmtl eXMoKSkKKworICAgIGZvciBrLCB2IGluIHN0YXRlLmRlZXBfZGVwcy5pdGVyaXRlbXMoKToKKyAg ICAgICAgc3RhdGUuZGVlcF9kZXBzW2tdID0gZmVhdHVyZXNldF90b191aW50MzJzKHYsIG5yX2Vu dHJpZXMpCisKIAogZGVmIHdyaXRlX3Jlc3VsdHMoc3RhdGUpOgogICAgIHN0YXRlLm91dHB1dC53 cml0ZSgKQEAgLTE3MCw2ICszMDQsMTIgQEAgZGVmIHdyaXRlX3Jlc3VsdHMoc3RhdGUpOgogI2Rl ZmluZSBJTklUX0hWTV9TSEFET1dfRkVBVFVSRVMgeyBcXFxuJXNcbn0KIAogI2RlZmluZSBJTklU X0hWTV9IQVBfRkVBVFVSRVMgeyBcXFxuJXNcbn0KKworI2RlZmluZSBOUl9ERUVQX0RFUFMgJXNV CisKKyNkZWZpbmUgSU5JVF9ERUVQX0ZFQVRVUkVTIHsgXFxcbiVzXG59CisKKyNkZWZpbmUgSU5J VF9ERUVQX0RFUFMgeyBcXAogIiIiICUgKHN0YXRlLm5yX2VudHJpZXMsCiAgICAgICAgc3RhdGUu Y29tbW9uXzFkLAogICAgICAgIGZvcm1hdF91aW50MzJzKHN0YXRlLmtub3duLCA0KSwKQEAgLTE3 NywxMCArMzE3LDIwIEBAIGRlZiB3cml0ZV9yZXN1bHRzKHN0YXRlKToKICAgICAgICBmb3JtYXRf dWludDMycyhzdGF0ZS5wdiwgNCksCiAgICAgICAgZm9ybWF0X3VpbnQzMnMoc3RhdGUuaHZtX3No YWRvdywgNCksCiAgICAgICAgZm9ybWF0X3VpbnQzMnMoc3RhdGUuaHZtX2hhcCwgNCksCisgICAg ICAgc3RhdGUubnJfZGVlcF9kZXBzLAorICAgICAgIGZvcm1hdF91aW50MzJzKHN0YXRlLmRlZXBf ZmVhdHVyZXMsIDQpLAogICAgICAgICkpCiAKKyAgICBmb3IgZGVwIGluIHNvcnRlZChzdGF0ZS5k ZWVwX2RlcHMua2V5cygpKToKKyAgICAgICAgc3RhdGUub3V0cHV0LndyaXRlKAorICAgICAgICAg ICAgIiAgICB7ICUjeFUsIC8qICVzICovIHsgXFxcbiVzXG4gICAgfSwgfSwgXFxcbiIKKyAgICAg ICAgICAgICUgKGRlcCwgc3RhdGUubmFtZXNbZGVwXSwKKyAgICAgICAgICAgICAgIGZvcm1hdF91 aW50MzJzKHN0YXRlLmRlZXBfZGVwc1tkZXBdLCA4KQorICAgICAgICAgICApKQorCiAgICAgc3Rh dGUub3V0cHV0LndyaXRlKAotIiIiCisiIiJ9CisKICNlbmRpZiAvKiBfX1hFTl9YODZfX0ZFQVRV UkVTRVRfREFUQV9fICovCiAiIiIpCiAKLS0gCjIuMS40CgoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2 ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK