From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH v3 10/28] xen/x86: Generate deep dependencies of features Date: Tue, 15 Mar 2016 15:35:06 +0000 Message-ID: <1458056124-8024-11-git-send-email-andrew.cooper3@citrix.com> References: <1458056124-8024-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: <1458056124-8024-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 aXQgaXMgZXhwcmVzc2VkIGluIHRoZSBhdXRvbWF0aWMgZ2VuZXJhdGlvbgpzY3JpcHQsIGFuZCBm bGF0dGVuZWQgZm9yIGZhc3RlciBydW50aW1lIHVzZS4KClNpZ25lZC1vZmYtYnk6IEFuZHJldyBD b29wZXIgPGFuZHJldy5jb29wZXIzQGNpdHJpeC5jb20+Ci0tLQpDQzogSmFuIEJldWxpY2ggPEpC ZXVsaWNoQHN1c2UuY29tPgoKdjM6CiAqIFZhc3RseSBtb3JlIHJlc2VyY2ggYW5kIGNvbW1lbnRz CnYyOgogKiBOZXcKLS0tCiB4ZW4vYXJjaC94ODYvY3B1aWQuYyAgICAgICAgfCAgNTQgKysrKysr KysrKysrKysrKysKIHhlbi9pbmNsdWRlL2FzbS14ODYvY3B1aWQuaCB8ICAgMiArCiB4ZW4vdG9v bHMvZ2VuLWNwdWlkLnB5ICAgICAgfCAxMzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKy0KIDMgZmlsZXMgY2hhbmdlZCwgMTk0IGluc2VydGlvbnMoKyksIDEgZGVs ZXRpb24oLSkKCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvY3B1aWQuYyBiL3hlbi9hcmNoL3g4 Ni9jcHVpZC5jCmluZGV4IDE3NGNmYTAuLjE3NDg3ZjUgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4 Ni9jcHVpZC5jCisrKyBiL3hlbi9hcmNoL3g4Ni9jcHVpZC5jCkBAIC0xMSw2ICsxMSw3IEBAIGNv bnN0IHVpbnQzMl90IHNwZWNpYWxfZmVhdHVyZXNbXSA9IElOSVRfU1BFQ0lBTF9GRUFUVVJFUzsK IHN0YXRpYyBjb25zdCB1aW50MzJfdCBfX2luaXRjb25zdCBwdl9mZWF0dXJlbWFza1tdID0gSU5J VF9QVl9GRUFUVVJFUzsKIHN0YXRpYyBjb25zdCB1aW50MzJfdCBfX2luaXRjb25zdCBodm1fc2hh ZG93X2ZlYXR1cmVtYXNrW10gPSBJTklUX0hWTV9TSEFET1dfRkVBVFVSRVM7CiBzdGF0aWMgY29u c3QgdWludDMyX3QgX19pbml0Y29uc3QgaHZtX2hhcF9mZWF0dXJlbWFza1tdID0gSU5JVF9IVk1f SEFQX0ZFQVRVUkVTOworc3RhdGljIGNvbnN0IHVpbnQzMl90IF9faW5pdGNvbnN0IGRlZXBfZmVh dHVyZXNbXSA9IElOSVRfREVFUF9GRUFUVVJFUzsKIAogdWludDMyX3QgX19yZWFkX21vc3RseSBy YXdfZmVhdHVyZXNldFtGU0NBUElOVFNdOwogdWludDMyX3QgX19yZWFkX21vc3RseSBwdl9mZWF0 dXJlc2V0W0ZTQ0FQSU5UU107CkBAIC0xOCwxMiArMTksMzQgQEAgdWludDMyX3QgX19yZWFkX21v c3RseSBodm1fZmVhdHVyZXNldFtGU0NBUElOVFNdOwogCiBzdGF0aWMgdm9pZCBfX2luaXQgc2Fu aXRpc2VfZmVhdHVyZXNldCh1aW50MzJfdCAqZnMpCiB7CisgICAgdWludDMyX3QgZGlzYWJsZWRf ZmVhdHVyZXNbRlNDQVBJTlRTXTsKICAgICB1bnNpZ25lZCBpbnQgaTsKIAogICAgIGZvciAoIGkg PSAwOyBpIDwgRlNDQVBJTlRTOyArK2kgKQogICAgIHsKICAgICAgICAgLyogQ2xhbXAgdG8ga25v d24gbWFzay4gKi8KICAgICAgICAgZnNbaV0gJj0ga25vd25fZmVhdHVyZXNbaV07CisKKyAgICAg ICAgLyoKKyAgICAgICAgICogSWRlbnRpZnkgd2hpY2ggZmVhdHVyZXMgd2l0aCBkZWVwIGRlcGVu ZGVuY2llcyBoYXZlIGJlZW4KKyAgICAgICAgICogZGlzYWJsZWQuCisgICAgICAgICAqLworICAg ICAgICBkaXNhYmxlZF9mZWF0dXJlc1tpXSA9IH5mc1tpXSAmIGRlZXBfZmVhdHVyZXNbaV07Cisg ICAgfQorCisgICAgZm9yX2VhY2hfc2V0X2JpdChpLCAodm9pZCAqKWRpc2FibGVkX2ZlYXR1cmVz LAorICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGRpc2FibGVkX2ZlYXR1cmVzKSAqIDgpCisg ICAgeworICAgICAgICBjb25zdCB1aW50MzJfdCAqZGZzID0gbG9va3VwX2RlZXBfZGVwcyhpKTsK KyAgICAgICAgdW5zaWduZWQgaW50IGo7CisKKyAgICAgICAgQVNTRVJUKGRmcyk7IC8qIGRlZXBf ZmVhdHVyZXNbXSBzaG91bGQgZ3VhcmVudGVlIHRoaXMuICovCisKKyAgICAgICAgZm9yICggaiA9 IDA7IGogPCBGU0NBUElOVFM7ICsraiApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZzW2pdICY9 IH5kZnNbal07CisgICAgICAgICAgICBkaXNhYmxlZF9mZWF0dXJlc1tqXSAmPSB+ZGZzW2pdOwor ICAgICAgICB9CiAgICAgfQogCiAgICAgLyoKQEAgLTE2Miw2ICsxODUsMzYgQEAgdm9pZCBfX2lu aXQgY2FsY3VsYXRlX2ZlYXR1cmVzZXRzKHZvaWQpCiAgICAgY2FsY3VsYXRlX2h2bV9mZWF0dXJl c2V0KCk7CiB9CiAKK2NvbnN0IHVpbnQzMl90ICogX19pbml0IGxvb2t1cF9kZWVwX2RlcHModWlu dDMyX3QgZmVhdHVyZSkKK3sKKyAgICBzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgICAgICAgdWlu dDMyX3QgZmVhdHVyZTsKKyAgICAgICAgdWludDMyX3QgZnNbRlNDQVBJTlRTXTsKKyAgICB9IGRl ZXBfZGVwc1tdIF9faW5pdGNvbnN0ID0gSU5JVF9ERUVQX0RFUFM7CisgICAgdW5zaWduZWQgaW50 IHN0YXJ0ID0gMCwgZW5kID0gQVJSQVlfU0laRShkZWVwX2RlcHMpOworCisgICAgQlVJTERfQlVH X09OKEFSUkFZX1NJWkUoZGVlcF9kZXBzKSAhPSBOUl9ERUVQX0RFUFMpOworCisgICAgLyogRmFz dCBlYXJseSBleGl0LiAqLworICAgIGlmICggIXRlc3RfYml0KGZlYXR1cmUsIGRlZXBfZmVhdHVy ZXMpICkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBkZWVwX2RlcHNbXSBpcyBzb3J0 ZWQuICBQZXJmb3JtIGEgYmluYXJ5IHNlYXJjaC4gKi8KKyAgICB3aGlsZSAoIHN0YXJ0IDwgZW5k ICkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBtaWQgPSBzdGFydCArICgoZW5kIC0gc3Rh cnQpIC8gMik7CisKKyAgICAgICAgaWYgKCBkZWVwX2RlcHNbbWlkXS5mZWF0dXJlID4gZmVhdHVy ZSApCisgICAgICAgICAgICBlbmQgPSBtaWQ7CisgICAgICAgIGVsc2UgaWYgKCBkZWVwX2RlcHNb bWlkXS5mZWF0dXJlIDwgZmVhdHVyZSApCisgICAgICAgICAgICBzdGFydCA9IG1pZCArIDE7Cisg ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBkZWVwX2RlcHNbbWlkXS5mczsKKyAgICB9 CisKKyAgICByZXR1cm4gTlVMTDsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IF9fbWF5YmVfdW51 c2VkIGJ1aWxkX2Fzc2VydGlvbnModm9pZCkKIHsKICAgICBCVUlMRF9CVUdfT04oQVJSQVlfU0la RShrbm93bl9mZWF0dXJlcykgIT0gRlNDQVBJTlRTKTsKQEAgLTE2OSw2ICsyMjIsNyBAQCBzdGF0 aWMgdm9pZCBfX2luaXQgX19tYXliZV91bnVzZWQgYnVpbGRfYXNzZXJ0aW9ucyh2b2lkKQogICAg IEJVSUxEX0JVR19PTihBUlJBWV9TSVpFKHB2X2ZlYXR1cmVtYXNrKSAhPSBGU0NBUElOVFMpOwog ICAgIEJVSUxEX0JVR19PTihBUlJBWV9TSVpFKGh2bV9zaGFkb3dfZmVhdHVyZW1hc2spICE9IEZT Q0FQSU5UUyk7CiAgICAgQlVJTERfQlVHX09OKEFSUkFZX1NJWkUoaHZtX2hhcF9mZWF0dXJlbWFz aykgIT0gRlNDQVBJTlRTKTsKKyAgICBCVUlMRF9CVUdfT04oQVJSQVlfU0laRShkZWVwX2ZlYXR1 cmVzKSAhPSBGU0NBUElOVFMpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNt LXg4Ni9jcHVpZC5oIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9jcHVpZC5oCmluZGV4IDUwNDFiY2Qu LjQ3MjU2NzIgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNsdWRlL2FzbS14ODYvY3B1aWQuaAorKysgYi94 ZW4vaW5jbHVkZS9hc20teDg2L2NwdWlkLmgKQEAgLTI5LDYgKzI5LDggQEAgZXh0ZXJuIHVpbnQz Ml90IGh2bV9mZWF0dXJlc2V0W0ZTQ0FQSU5UU107CiAKIHZvaWQgY2FsY3VsYXRlX2ZlYXR1cmVz ZXRzKHZvaWQpOwogCitjb25zdCB1aW50MzJfdCAqbG9va3VwX2RlZXBfZGVwcyh1aW50MzJfdCBm ZWF0dXJlKTsKKwogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogI2VuZGlmIC8qICFfX1g4Nl9D UFVJRF9IX18gKi8KIApkaWZmIC0tZ2l0IGEveGVuL3Rvb2xzL2dlbi1jcHVpZC5weSBiL3hlbi90 b29scy9nZW4tY3B1aWQucHkKaW5kZXggNDUyYzI2YS4uZWQzNjhjYiAxMDA3NTUKLS0tIGEveGVu L3Rvb2xzL2dlbi1jcHVpZC5weQorKysgYi94ZW4vdG9vbHMvZ2VuLWNwdWlkLnB5CkBAIC0xNDQs NiArMTQ0LDEyNyBAQCBkZWYgY3J1bmNoX251bWJlcnMoc3RhdGUpOgogICAgIHN0YXRlLmh2bV9z aGFkb3cgPSBmZWF0dXJlc2V0X3RvX3VpbnQzMnMoc3RhdGUucmF3X2h2bV9zaGFkb3csIG5yX2Vu dHJpZXMpCiAgICAgc3RhdGUuaHZtX2hhcCA9IGZlYXR1cmVzZXRfdG9fdWludDMycyhzdGF0ZS5y YXdfaHZtX2hhcCwgbnJfZW50cmllcykKIAorICAgICMKKyAgICAjIEZlYXR1cmUgZGVwZW5kZW5j eSBpbmZvcm1hdGlvbi4KKyAgICAjCisgICAgIyAhISEgV0FSTklORyAhISEKKyAgICAjCisgICAg IyBBIGxvdCBvZiB0aGlzIGluZm9ybWF0aW9uIGlzIGRlcml2ZWQgZnJvbSB0aGUgd3JpdHRlbiB0 ZXh0IG9mIHZlbmRvcnMKKyAgICAjIHNvZnR3YXJlIG1hbnVhbHMsIHJhdGhlciB0aGFuIGRpcmVj dGx5IGZyb20gYSBzdGF0ZW1lbnQuICBBcyBzdWNoLCBpdAorICAgICMgZG9lcyBjb250YWluIGd1 ZXNzd29yayBhbmQgYXNzdW1wdGlvbnMsIGFuZCBtYXkgbm90IGFjY3VyYXRlbHkgbWF0Y2gKKyAg ICAjIGhhcmR3YXJlIGltcGxlbWVudGF0aW9ucy4KKyAgICAjCisgICAgIyBJdCBpcyBob3dldmVy IGRlc2lnbmVkIHRvIGNyZWF0ZSBhbiBlbmQgcmVzdWx0IGZvciBhIGd1ZXN0IHdoaWNoIGRvZXMK KyAgICAjIHBsYXVzaWJseSBtYXRjaCByZWFsIGhhcmR3YXJlLgorICAgICMKKyAgICAjICEhISBX QVJOSU5HICEhIQorICAgICMKKyAgICAjIFRoZSBmb3JtYXQgb2YgdGhpcyBkaWN0aW9uYXJ5IGlz IHRoYXQgdGhlIGZlYXR1cmUgaW4gdGhlIGtleSBpcyBhIGRpcmVjdAorICAgICMgcHJlcmVxdWlz aXRlIG9mIGVhY2ggZmVhdHVyZSBpbiB0aGUgdmFsdWUuCisgICAgIworICAgICMgVGhlIGZpcnN0 IGNvbnNpZGVyYXRpb24gaXMgYWJvdXQgd2hpY2ggZnVuY3Rpb25hbGl0eSBpcyBwaHlzaWNhbGx5 IGJ1aWx0CisgICAgIyBvbiB0b3Agb2Ygb3RoZXIgZmVhdHVyZXMuICBUaGUgc2Vjb25kIGNvbnNp ZGVyYXRpb24sIHdoaWNoIGlzIG1vcmUKKyAgICAjIHN1YmplY3RpdmUsIGlzIHdoZXRoZXIgcmVh bCBoYXJkd2FyZSB3b3VsZCBldmVyIGJlIGZvdW5kIHN1cHBvcnRpbmcKKyAgICAjIGZlYXR1cmUg WCBidXQgbm90IFkuCisgICAgIworICAgIGRlcHMgPSB7CisgICAgICAgICMgRlBVIGlzIHRha2Vu IHRvIG1lYW4gc3VwcG9ydCBmb3IgdGhlIHg4NyByZWdpc2VycyBhcyB3ZWxsIGFzIHRoZQorICAg ICAgICAjIGluc3RydWN0aW9ucy4gIE1NWCBpcyBkb2N1bWVudGVkIHRvIGFsaWFzIHRoZSAlTU0g cmVnaXN0ZXJzIG92ZXIgdGhlCisgICAgICAgICMgeDg3ICVTVCByZWdpc3RlcnMgaW4gaGFyZHdh cmUuCisgICAgICAgIEZQVTogW01NWF0sCisKKyAgICAgICAgIyBUaGUgUFNFMzYgZmVhdHVyZSBp bmRpY2F0ZXMgdGhhdCByZXNlcnZlZCBiaXRzIGluIGEgUFNFIHN1cGVycGFnZQorICAgICAgICAj IG1heSBiZSB1c2VkIGFzIGV4dHJhIHBoeXNpY2FsIGFkZHJlc3MgYml0cy4KKyAgICAgICAgUFNF OiBbUFNFMzZdLAorCisgICAgICAgICMgRW50ZXJpbmcgTG9uZyBNb2RlIHJlcXVpcmVzIHRoYXQg JUNSNC5QQUUgaXMgc2V0LiAgVGhlIE5YIHBhZ2V0YWJsZQorICAgICAgICAjIGJpdCBpcyBvbmx5 IHJlcHJlc2VudGFibGUgaW4gdGhlIDY0Yml0IFBURSBmb3JtYXQgb2ZmZXJlZCBieSBQQUUuCisg ICAgICAgIFBBRTogW0xNLCBOWF0sCisKKyAgICAgICAgIyBBUElDIGlzIHNwZWNpYWwsIGJ1dCBY MkFQSUMgZG9lcyBkZXBlbmQgb24gQVBJQyBiZWluZyBhdmFpbGFibGUgaW4KKyAgICAgICAgIyB0 aGUgZmlyc3QgcGxhY2UuCisgICAgICAgIEFQSUM6IFtYMkFQSUNdLAorCisgICAgICAgICMgQU1E IGJ1aWx0IE1NWEV4dGVudGlvbnMgYW5kIDNETm93IGFzIGV4dGVudGlvbnMgdG8gTU1YLgorICAg ICAgICBNTVg6IFtNTVhFWFQsIF8zRE5PV10sCisKKyAgICAgICAgIyBUaGUgRlhTQVZFL0ZYUlNU T1IgaW5zdHJ1Y3Rpb25zIHdlcmUgaW50cm9kdWNlZCBpbnRvIGhhcmR3YXJlIGJlZm9yZQorICAg ICAgICAjIFNTRSwgd2hpY2ggaXMgd2h5IHRoZXkgYmVoYXZlIGRpZmZlcmVudGx5IGJhc2VkIG9u ICVDUjQuT1NGWFNBVkUgYW5kCisgICAgICAgICMgaGF2ZSB0aGVpciBvd24gZmVhdHVyZSBiaXQu ICBBTUQgaG93ZXZlciBpbnRyb2R1Y2UgdGhlIEZhc3QgRlhTUgorICAgICAgICAjIGZlYXR1cmUg YXMgYW4gb3B0aW1pc2F0aW9uLgorICAgICAgICBGWFNSOiBbRkZYU1JdLAorCisgICAgICAgICMg U1NFIGlzIHRha2VuIHRvIG1lYW4gc3VwcG9ydCBmb3IgdGhlICVYTU0gcmVnaXN0ZXJzIGFzIHdl bGwgYXMgdGhlCisgICAgICAgICMgaW5zdHJ1Y3Rpb25zLiAgVGhlIFNTRSBleHRlbnRpb25zIHdl cmUgcmUtc3BlY2lmaWVkIGFzIGNvcmUgZm9yCisgICAgICAgICMgNjRiaXQgc3VwcG9ydC4KKyAg ICAgICAgU1NFOiBbU1NFMiwgTE1dLAorCisgICAgICAgICMgU1NFMiB3YXMgYWxzbyByZS1zcGVj aWZpZWQgYXMgY29yZSBmb3IgNjRiaXQuICBUaGUgQUVTTkkgYW5kIFNIQQorICAgICAgICAjIGlu c3RydWN0aW9uIGdyb3VwcyBhcmUgZG9jdW1lbnRlZCB0byByZXF1aXJlIGNoZWNraW5nIGZvciBT U0UyCisgICAgICAgICMgc3VwcG9ydCBhcyBhIHByZXJlcXVpc2l0ZS4KKyAgICAgICAgU1NFMjog W1NTRTMsIExNLCBBRVNOSSwgU0hBXSwKKworICAgICAgICAjIEFNRCBLMTAgcHJvY2Vzc29ycyBo YXMgU1NFMyBhbmQgU1NFNEEuICBCb2JjYXQvQmFyY2Vsb25hIHByb2Nlc3NvcnMKKyAgICAgICAg IyBzdWJzZXF1ZW50bHkgaW5jbHVkZWQgU1NTRTMsIGFuZCBCdWxsZG96ZXIgc3Vic2VxdWVudGx5 IGluY2x1ZGVkCisgICAgICAgICMgU1NFNF8xLiAgSW50ZWwgaGF2ZSBuZXZlciBzaGlwcGVkIFNT RTRBLgorICAgICAgICBTU0UzOiBbU1NTRTMsIFNTRTRfMSwgU1NFNEFdLAorICAgICAgICBTU0U0 XzE6IFtTU0U0XzJdLAorCisgICAgICAgICMgWFNBVkUgaXMgYW4gZXh0cmEgc2V0IG9mIGluc3Ry dWN0aW9ucyBmb3Igc3RhdGUgbWFuYWdlbWVudCwgYnV0CisgICAgICAgICMgZG9lc24ndCBjb25z dGl0dWUgbmV3IHN0YXRlIGl0c2VsZi4gIFNvbWUgb2YgdGhlIGRlcGVuZGVudCBmZWF0dXJlcwor ICAgICAgICAjIGFyZSBpbnN0cnVjdGlvbnMgYnVpbHQgb24gdG9wIG9mIGJhc2UgWFNBVkUsIHdo aWxlIG90aGVycyBhcmUgbmV3CisgICAgICAgICMgaW5zdHJ1Y3Rpb24gZ3JvdXBzIHdoaWNoIGFy ZSBzcGVjaWZpZWQgdG8gcmVxdWlyZSBYU0FWRSBmb3Igc3RhdGUKKyAgICAgICAgIyBtYW5hZ2Vt ZW50LgorICAgICAgICBYU0FWRTogW1hTQVZFT1BULCBYU0FWRUMsIFhHRVRCVjEsIFhTQVZFUywg QVZYLCBNUFhdLAorCisgICAgICAgICMgQVZYIGlzIHRha2VuIHRvIG1lYW4gaGFyZHdhcmUgc3Vw cG9ydCBmb3IgVkVYIGVuY29kZWQgaW5zdHJ1Y3Rpb25zLAorICAgICAgICAjIDI1NmJpdCByZWdp c3RlcnMsIGFuZCB0aGUgaW5zdHJ1Y3Rpb25zIHRoZW1zZWx2ZXMuICBFYWNoIG9mIHRoZXNlCisg ICAgICAgICMgc3Vic2VxdWVudCBpbnN0cnVjdGlvbiBncm91cHMgbWF5IG9ubHkgYmUgVkVYIGVu Y29kZWQuCisgICAgICAgIEFWWDogW0ZNQSwgRk1BNCwgRjE2QywgQVZYMiwgWE9QXSwKKworICAg ICAgICAjIENYMTYgaXMgb25seSBlbmNvZGFibGUgaW4gTG9uZyBNb2RlLiAgTEFIRl9MTSBpbmRp Y2F0ZXMgdGhhdCB0aGUKKyAgICAgICAgIyBTQUhGL0xBSEYgaW5zdHJ1Y3Rpb25zIGFyZSByZWlu dHJvZHVjZWQgaW4gTG9uZyBNb2RlLiAgMUdCCisgICAgICAgICMgc3VwZXJwYWdlcyBhcmUgb25s eSBhdmFpbGFibGUgaW4gNCBsZXZlbCBwYWdpbmcuCisgICAgICAgIExNOiBbQ1gxNiwgTEFIRl9M TSwgUEFHRTFHQl0sCisKKyAgICAgICAgIyBBTUQgSzYtMisgYW5kIEs2LUlJSSBwcm9jZXNzb3Jz IHNoaXBwZWQgd2l0aCAzRE5vdyssIGJleW9uZCB0aGUKKyAgICAgICAgIyBzdGFuZGFyZCAzRE5v dyBpbiB0aGUgZWFybGllciBLNiBwcm9jZXNzb3JzLgorICAgICAgICBfM0ROT1c6IFtfM0ROT1dF WFRdLAorICAgIH0KKworICAgIGRlZXBfZmVhdHVyZXMgPSB0dXBsZShzb3J0ZWQoZGVwcy5rZXlz KCkpKQorICAgIHN0YXRlLmRlZXBfZGVwcyA9IHt9CisKKyAgICBmb3IgZmVhdCBpbiBkZWVwX2Zl YXR1cmVzOgorCisgICAgICAgIHNlZW4gPSBbZmVhdF0KKyAgICAgICAgdG9fcHJvY2VzcyA9IGxp c3QoZGVwc1tmZWF0XSkKKworICAgICAgICB3aGlsZSBsZW4odG9fcHJvY2Vzcyk6CisKKyAgICAg ICAgICAgICMgVG8gZGVidWcsIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmVzOgorICAgICAg ICAgICAgIyBkZWYgcmVwbChsKToKKyAgICAgICAgICAgICMgICAgIHJldHVybiAiWyIgKyAiLCAi LmpvaW4oKHN0YXRlLm5hbWVzW3hdIGZvciB4IGluIGwpKSArICJdIgorICAgICAgICAgICAgIyBw cmludCA+PnN5cy5zdGRlcnIsICJGZWF0dXJlICVzLCBzZWVuICVzLCB0b19wcm9jZXNzICVzICIg JSBcCisgICAgICAgICAgICAjICAgICAoc3RhdGUubmFtZXNbZmVhdF0sIHJlcGwoc2VlbiksIHJl cGwodG9fcHJvY2VzcykpCisKKyAgICAgICAgICAgIGYgPSB0b19wcm9jZXNzLnBvcCgwKQorCisg ICAgICAgICAgICBpZiBmIGluIHNlZW46CisgICAgICAgICAgICAgICAgcmFpc2UgRmFpbCgiRVJS T1I6IEN5Y2xlIGZvdW5kIHdpdGggJXMgd2hlbiBwcm9jZXNzaW5nICVzIgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgJSAoc3RhdGUubmFtZXNbZl0sIHN0YXRlLm5hbWVzW2ZlYXRdKSkKKwor ICAgICAgICAgICAgc2Vlbi5hcHBlbmQoZikKKyAgICAgICAgICAgIHRvX3Byb2Nlc3MgPSBsaXN0 KHNldCh0b19wcm9jZXNzICsgZGVwcy5nZXQoZiwgW10pKSkKKworICAgICAgICBzdGF0ZS5kZWVw X2RlcHNbZmVhdF0gPSBzZWVuWzE6XQorCisgICAgc3RhdGUuZGVlcF9mZWF0dXJlcyA9IGZlYXR1 cmVzZXRfdG9fdWludDMycyhkZXBzLmtleXMoKSwgbnJfZW50cmllcykKKyAgICBzdGF0ZS5ucl9k ZWVwX2RlcHMgPSBsZW4oc3RhdGUuZGVlcF9kZXBzLmtleXMoKSkKKworICAgIGZvciBrLCB2IGlu IHN0YXRlLmRlZXBfZGVwcy5pdGVyaXRlbXMoKToKKyAgICAgICAgc3RhdGUuZGVlcF9kZXBzW2td ID0gZmVhdHVyZXNldF90b191aW50MzJzKHYsIG5yX2VudHJpZXMpCisKIAogZGVmIHdyaXRlX3Jl c3VsdHMoc3RhdGUpOgogICAgIHN0YXRlLm91dHB1dC53cml0ZSgKQEAgLTE3MCw2ICsyOTEsMTIg QEAgZGVmIHdyaXRlX3Jlc3VsdHMoc3RhdGUpOgogI2RlZmluZSBJTklUX0hWTV9TSEFET1dfRkVB VFVSRVMgeyBcXFxuJXNcbn0KIAogI2RlZmluZSBJTklUX0hWTV9IQVBfRkVBVFVSRVMgeyBcXFxu JXNcbn0KKworI2RlZmluZSBOUl9ERUVQX0RFUFMgJXNVCisKKyNkZWZpbmUgSU5JVF9ERUVQX0ZF QVRVUkVTIHsgXFxcbiVzXG59CisKKyNkZWZpbmUgSU5JVF9ERUVQX0RFUFMgeyBcXAogIiIiICUg KHN0YXRlLm5yX2VudHJpZXMsCiAgICAgICAgc3RhdGUuY29tbW9uXzFkLAogICAgICAgIGZvcm1h dF91aW50MzJzKHN0YXRlLmtub3duLCA0KSwKQEAgLTE3NywxMCArMzA0LDIwIEBAIGRlZiB3cml0 ZV9yZXN1bHRzKHN0YXRlKToKICAgICAgICBmb3JtYXRfdWludDMycyhzdGF0ZS5wdiwgNCksCiAg ICAgICAgZm9ybWF0X3VpbnQzMnMoc3RhdGUuaHZtX3NoYWRvdywgNCksCiAgICAgICAgZm9ybWF0 X3VpbnQzMnMoc3RhdGUuaHZtX2hhcCwgNCksCisgICAgICAgc3RhdGUubnJfZGVlcF9kZXBzLAor ICAgICAgIGZvcm1hdF91aW50MzJzKHN0YXRlLmRlZXBfZmVhdHVyZXMsIDQpLAogICAgICAgICkp CiAKKyAgICBmb3IgZGVwIGluIHNvcnRlZChzdGF0ZS5kZWVwX2RlcHMua2V5cygpKToKKyAgICAg ICAgc3RhdGUub3V0cHV0LndyaXRlKAorICAgICAgICAgICAgIiAgICB7ICUjeFUsIC8qICVzICov IHsgXFxcbiVzXG4gICAgfSwgfSwgXFxcbiIKKyAgICAgICAgICAgICUgKGRlcCwgc3RhdGUubmFt ZXNbZGVwXSwKKyAgICAgICAgICAgICAgIGZvcm1hdF91aW50MzJzKHN0YXRlLmRlZXBfZGVwc1tk ZXBdLCA4KQorICAgICAgICAgICApKQorCiAgICAgc3RhdGUub3V0cHV0LndyaXRlKAotIiIiCisi IiJ9CisKICNlbmRpZiAvKiBfX1hFTl9YODZfX0ZFQVRVUkVTRVRfREFUQV9fICovCiAiIiIpCiAK LS0gCjIuMS40CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8v bGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK