Name: series-workflowjftdv Phase: Failed StartedAt: 2026-09-14 12:52:10 +0000 UTC FinishedAt: 2026-09-14 12:56:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjftdv[0] Phase: Succeeded StartedAt: 2026-09-14 12:52:10 +0000 UTC FinishedAt: 2026-09-14 12:56:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjftdv[0].run-triage Phase: Succeeded StartedAt: 2026-09-14 12:52:10 +0000 UTC FinishedAt: 2026-09-14 12:56:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtBbGwgbW9kaWZpZWQga2VybmVsIGNvZGUgaXMgZXhjbHVzaXZlIHRvIHRoZSBhcm02NCBhcmNoaXRlY3R1cmUgKGFyY2gvYXJtNjQgYW5kIGluY2x1ZGUva3ZtL2FybV9wbXUuaCksIHdpdGggdGhlIHJlbWFpbmluZyBjaGFuZ2VzIGxvY2F0ZWQgaW4gRG9jdW1lbnRhdGlvbi8gYW5kIHVzZXItc3BhY2UgdG9vbHMvc2VsZnRlc3RzICh0b29scy8pLiBOb25lIG9mIHRoZSBtb2RpZmllZCBjb2RlIGlzIGNvbXBpbGVkIG9yIHJlYWNoYWJsZSBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMjo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDczNDNjMGJmZjdkNWM1ZWE3YWY5ZTFmMGZiNjU4MTkxYTgwZmJmMTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAxMjo1NDozNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbmluZGV4IDQ5ODhjMzJkZjRiZjguLjQyMDY1MTM4NjAzYjcgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxuQEAgLTM1MjEsOSAmIzQzOzM1MjEsMTMgQEAgUG9zc2libGUgZmVhdHVyZXM6XG4gXG4gXHQgICAgKiBVc2Vyc3BhY2UgbXVzdCBleHBsaWNpdGx5IHNlbGVjdCBhIFBNVSBpbXBsZW1lbnRhdGlvbiBiZWZvcmVcbiBcdCAgICAgIGluaXRpYWxpemluZyB0aGUgUE1VIG9yIGNvbmZpZ3VyaW5nIGEgUE1VIGV2ZW50IGZpbHRlclxuJiM0MztcdCAgICAgIChLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkgYWxzbyBzYXRpc2ZpZXMgdGhlXG4mIzQzO1x0ICAgICAgaW5pdGlhbGl6YXRpb24gcmVxdWlyZW1lbnQ7IGV2ZW50IGZpbHRlcmluZyByZW1haW5zIHVuYXZhaWxhYmxlXG4mIzQzO1x0ICAgICAgaW4gdGhhdCBtb2RlKVxuIFxuLVx0ICAgICogSWYgdGhlIFBNVSBpbXBsZW1lbnRzIEZFQVRfUE1VdjNwNCwgUE1NSVJfRUwxLlNMT1RTIHByb3ZpZGVzIHRoZVxuLVx0ICAgICAgaGFyZHdhcmUgdmFsdWUgb2YgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb25cbiYjNDM7XHQgICAgKiBJZiBhIGhhcmR3YXJlIFBNVSBpcyBzZWxlY3RlZCBhbmQgaW1wbGVtZW50cyBGRUFUX1BNVXYzcDQsXG4mIzQzO1x0ICAgICAgUE1NSVJfRUwxLlNMT1RTIHByb3ZpZGVzIGl0cyBoYXJkd2FyZSB2YWx1ZS4gSW4gZml4ZWQtY291bnRlcnMtb25seVxuJiM0MztcdCAgICAgIG1vZGUsIFBNTUlSX0VMMSByZWFkcyBhcyB6ZXJvXG4gXG4gXHQgICAgKiBXcml0ZXMgdG8gUE1DUl9FTDAuTiB2aWEgS1ZNX1NFVF9PTkVfUkVHIGFyZSBpZ25vcmVkXG4gXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0XG5pbmRleCBkZWI1YzUxYmMwMGM4Li40ZWMzMjkxZjBiYTc0IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3RcbkBAIC01Myw5ICYjNDM7NTMsOSBAQCBSZXR1cm5zOlxuIFx0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFx0IC1FRVhJU1QgIEludGVycnVwdCBudW1iZXIgYWxyZWFkeSB1c2VkXG4gXHQgLUVOT0RFViAgUE1VdjMgbm90IHN1cHBvcnRlZCBvciBHSUMgbm90IGluaXRpYWxpemVkXG4tXHQgLUVOWElPICAgUE1VdjMgbm90IHN1cHBvcnRlZCwgbWlzc2luZyBWQ1BVIGZlYXR1cmUsIG1pc3Npbmdcbi0gICAgICAgICAgICAgICAgICBoYXJkd2FyZSBQTVUsIG9yIGludGVycnVwdCBudW1iZXIgbm90IHNldCAobm9uLUdJQ3Y1XG4tICAgICAgICAgICAgICAgICAgZ3Vlc3RzLCBvbmx5KVxuJiM0MztcdCAtRU5YSU8gICBQTVV2MyBub3Qgc3VwcG9ydGVkLCBtaXNzaW5nIFZDUFUgZmVhdHVyZSxcbiYjNDM7XHRcdCAgbmVpdGhlciBoYXJkd2FyZSBQTVUgbm9yIEZJWEVEX0NPVU5URVJTX09OTFkgc2VsZWN0ZWQsXG4mIzQzO1x0XHQgIG9yIGludGVycnVwdCBudW1iZXIgbm90IHNldCAobm9uLUdJQ3Y1IGd1ZXN0cyBvbmx5KVxuIFx0IC1FQlVTWSAgIFBNVXYzIGFscmVhZHkgaW5pdGlhbGl6ZWRcbiBcdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbkBAIC02NCw3ICYjNDM7NjQsOCBAQCB2aXJ0dWFsIEdJQyBpbXBsZW1lbnRhdGlvbiwgdGhpcyBtdXN0IGJlIGRvbmUgYWZ0ZXIgaW5pdGlhbGl6aW5nIHRoZSBpbi1rZXJuZWxcbiBpcnFjaGlwLlxuIFxuIFdoZW4gdGhlIEtWTV9BUk1fVkNQVV9QTVVfVjNfU1RSSUNUIHZDUFUgZmVhdHVyZSBpcyBlbmFibGVkIHRoaXMgbXVzdCBiZSBkb25lXG4tYWZ0ZXIgc2VsZWN0aW5nIGEgaGFyZHdhcmUgUE1VLlxuJiM0MzthZnRlciBzZWxlY3RpbmcgYSBoYXJkd2FyZSBQTVUgb3IgZW5hYmxpbmdcbiYjNDM7S1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLlxuIFxuIDEuMyBBVFRSSUJVVEU6IEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSXG4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBAIC03OCw3ICYjNDM7NzksOCBAQCBhZnRlciBzZWxlY3RpbmcgYSBoYXJkd2FyZSBQTVUuXG4gXHQgLUVOT0RFViAgUE1VdjMgbm90IHN1cHBvcnRlZCBvciBHSUMgbm90IGluaXRpYWxpemVkXG4gXHQgLUVOWElPICAgUE1VdjMgbm90IHByb3Blcmx5IGNvbmZpZ3VyZWQgb3IgaW4ta2VybmVsIGlycWNoaXAgbm90XG4gXHQgXHQgIGNvbmZpZ3VyZWQgYXMgcmVxdWlyZWQgcHJpb3IgdG8gY2FsbGluZyB0aGlzIGF0dHJpYnV0ZVxuLVx0IC1FQlVTWSAgIFBNVXYzIGFscmVhZHkgaW5pdGlhbGl6ZWQgb3IgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1blxuJiM0MztcdCAtRUJVU1kgICBQTVV2MyBhbHJlYWR5IGluaXRpYWxpemVkLCBhIFZDUFUgaGFzIGFscmVhZHkgcnVuIG9yXG4mIzQzO1x0XHQgIEZJWEVEX0NPVU5URVJTX09OTFkgaGFzIGFscmVhZHkgYmVlbiBzZXRcbiBcdCAtRUlOVkFMICBJbnZhbGlkIGZpbHRlciByYW5nZVxuIFx0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuQEAgLTEyMywxNCAmIzQzOzEyNSwxNCBAQCBhZnRlciBzZWxlY3RpbmcgYSBoYXJkd2FyZSBQTVUuXG4gXG4gOlJldHVybnM6XG4gXG4tXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MztcdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFx0IC1FQlVTWSAgIFBNVXYzIGFscmVhZHkgaW5pdGlhbGl6ZWQsIGEgVkNQVSBoYXMgYWxyZWFkeSBydW4gb3Jcbi0gICAgICAgICAgICAgICAgICBhbiBldmVudCBmaWx0ZXIgaGFzIGFscmVhZHkgYmVlbiBzZXRcbiYjNDM7ICAgICAgICAgICAgICAgICAgYW4gZXZlbnQgZmlsdGVyIG9yIEZJWEVEX0NPVU5URVJTX09OTFkgaGFzIGFscmVhZHkgYmVlbiBzZXRcbiBcdCAtRUZBVUxUICBFcnJvciBhY2Nlc3NpbmcgdGhlIFBNVSBpZGVudGlmaWVyXG4gXHQgLUVOWElPICAgUE1VIG5vdCBmb3VuZFxuIFx0IC1FTk9ERVYgIFBNVXYzIG5vdCBzdXBwb3J0ZWQgb3IgR0lDIG5vdCBpbml0aWFsaXplZFxuIFx0IC1FTk9NRU0gIENvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnlcbi1cdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO1x0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXG4gUmVxdWVzdCB0aGF0IHRoZSBWQ1BVIHVzZXMgdGhlIHNwZWNpZmllZCBoYXJkd2FyZSBQTVUgd2hlbiBjcmVhdGluZyBndWVzdCBldmVudHNcbiBmb3IgdGhlIHB1cnBvc2Ugb2YgUE1VIGVtdWxhdGlvbi4gVGhlIFBNVSBpZGVudGlmaWVyIGNhbiBiZSByZWFkIGZyb20gdGhlIFwmIzM0O3R5cGVcJiMzNDtcbkBAIC0xNzIsNiAmIzQzOzE3NCwzMCBAQCBleHBsaWNpdGx5IHNlbGVjdGVkLCBvciB0aGUgbnVtYmVyIG9mIGNvdW50ZXJzIGlzIG91dCBvZiByYW5nZSBmb3IgdGhlXG4gc2VsZWN0ZWQgUE1VLiBTZWxlY3RpbmcgYSBuZXcgUE1VIGNhbmNlbHMgdGhlIGVmZmVjdCBvZiBzZXR0aW5nIHRoaXNcbiBhdHRyaWJ1dGUuXG4gXG4mIzQzOzEuNiBBVFRSSUJVVEU6IEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWVxuJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7XG4mIzQzOzpQYXJhbWV0ZXJzOiBubyBhZGRpdGlvbmFsIHBhcmFtZXRlciBpbiBrdm1fZGV2aWNlX2F0dHIuYWRkclxuJiM0MztcbiYjNDM7OlJldHVybnM6XG4mIzQzO1xuJiM0MztcdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MztcdCAtRUJVU1kgICBQTVV2MyBhbHJlYWR5IGluaXRpYWxpemVkLCBhIFZDUFUgaGFzIGFscmVhZHkgcnVuLFxuJiM0MztcdFx0ICBhbiBldmVudCBmaWx0ZXIgaGFzIGFscmVhZHkgYmVlbiBzZXQgb3JcbiYjNDM7XHRcdCAgYSBoYXJkd2FyZSBQTVUgaGFzIGFscmVhZHkgYmVlbiBzcGVjaWZpZWRcbiYjNDM7XHQgLUVOWElPICAgQXR0ZW1wdGVkIHRvIGdldCBiZWZvcmUgc2V0dGluZ1xuJiM0MztcdCAtRU5PREVWICBBdHRlbXB0ZWQgdG8gc2V0IHdoaWxlIFBNVXYzIG5vdCBzdXBwb3J0ZWRcbiYjNDM7XHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7XG4mIzQzO0lmIHNldCwgS1ZNIGVtdWxhdGVzIFBNVXYzIHdpdGhvdXQgcHJvZ3JhbW1hYmxlIGV2ZW50IGNvdW50ZXJzLlxuJiM0MztcbiYjNDM7V2l0aCBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NUUklDVCwgZW5hYmxpbmcgdGhpcyBhdHRyaWJ1dGUgc2F0aXNmaWVzIHRoZVxuJiM0MztQTVUgc2VsZWN0aW9uIHJlcXVpcmVtZW50IGZvciBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQuXG4mIzQzO1xuJiM0MztXaGVuIHRoaXMgYXR0cmlidXRlIGlzIGVuYWJsZWQsIHRoZSB2Q1BVIGNhbiBydW4gb24gYW55IHBoeXNpY2FsIENQVVxuJiM0Mzt0aGF0IGhhcyBhIFBNVSwgcmVnYXJkbGVzcyBvZiB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbi4gVGhpc1xuJiM0MzthdHRyaWJ1dGUgaXMgVk0tc2NvcGVkLlxuJiM0MztcbiAyLiBHUk9VUDogS1ZNX0FSTV9WQ1BVX1RJTUVSX0NUUkxcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDI3ZmUwY2Q1YjJkN2EuLjEwZTNmZjQxMDc5ZTggMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTM2Nyw2ICYjNDM7MzY3LDEwIEBAIHN0cnVjdCBrdm1fYXJjaCB7XG4gI2RlZmluZSBLVk1fQVJDSF9GTEFHX1dSSVRBQkxFX0lNUF9JRF9SRUdTXHRcdDEwXG4gXHQvKiBVbmhhbmRsZWQgU0VBcyBhcmUgdGFrZW4gdG8gdXNlcnNwYWNlICovXG4gI2RlZmluZSBLVk1fQVJDSF9GTEFHX0VYSVRfU0VBXHRcdFx0XHQxMVxuJiM0MztcdC8qIFBNVXYzIGlzIGVtdWxhdGVkIHdpdGggYW4gZXhwbGljaXRseSBzcGVjaWZpZWQgaGFyZHdhcmUgUE1VICovXG4mIzQzOyNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRVhQTElDSVRcdFx0XHQxMlxuJiM0MztcdC8qIFBNVXYzIGlzIGVtdWxhdGVkIHdpdGhvdXQgcHJvZ3JhbW1hYmxlIGV2ZW50IGNvdW50ZXJzICovXG4mIzQzOyNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWVx0MTNcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHQvKiBWTS13aWRlIHZDUFUgZmVhdHVyZSBzZXQgKi9cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbmluZGV4IDAxOWU1ZTNkODkyZTYuLjNiZDdmMjAxMjUyYTEgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuQEAgLTQzOCw2ICYjNDM7NDM4LDcgQEAgZW51bSB7XG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSXHRcdDJcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VXHRcdDNcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlNcdDRcbiYjNDM7I2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWVx0NVxuICNkZWZpbmUgS1ZNX0FSTV9WQ1BVX1RJTUVSX0NUUkxcdFx0MVxuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfVElNRVJfSVJRX1ZUSU1FUlx0XHQwXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9USU1FUl9JUlFfUFRJTUVSXHRcdDFcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVfZXJyYXRhLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVfZXJyYXRhLmNcbmluZGV4IDc4ZTRlMTA1ZjZhYjUuLjliMmQ5ZDBmMTczODggMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVfZXJyYXRhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdV9lcnJhdGEuY1xuQEAgLTEwMTIsNyAmIzQzOzEwMTIsNyBAQCBjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyBhcm02NF9lcnJhdGFbXSA9IHtcbiBcdHtcbiBcdFx0LmRlc2MgPSBcJiMzNDtBcHBsZSBJTVBERUYgUE1VdjMgVHJhcHNcJiMzNDssXG4gXHRcdC5jYXBhYmlsaXR5ID0gQVJNNjRfV09SS0FST1VORF9QTVVWM19JTVBERUZfVFJBUFMsXG4tXHRcdC50eXBlID0gQVJNNjRfQ1BVQ0FQX0xPQ0FMX0NQVV9FUlJBVFVNLFxuJiM0MztcdFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfRUFSTFlfTE9DQUxfQ1BVX0ZFQVRVUkUsXG4gXHRcdC5tYXRjaGVzID0gaGFzX2ltcGRlZl9wbXV2MyxcbiBcdFx0LmNwdV9lbmFibGUgPSBjcHVfZW5hYmxlX2ltcGRlZl9wbXV2M190cmFwcyxcbiBcdH0sXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vYXJtLmMgYi9hcmNoL2FybTY0L2t2bS9hcm0uY1xuaW5kZXggY2NhZTgyYzEyNDJiYy4uZGZlYmZlYjk1NjE5OCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2FybS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9hcm0uY1xuQEAgLTY1Miw2ICYjNDM7NjUyLDcgQEAgc3RhdGljIGJvb2wga3ZtX3ZjcHVfc2hvdWxkX2NsZWFyX3R3ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gdm9pZCBrdm1fYXJjaF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxuIHtcbiBcdHN0cnVjdCBrdm1fczJfbW11ICptbXU7XG4mIzQzO1x0aW50IGxhc3RfY3B1ID0gdmNwdS1cdTAwM2VjcHU7XG4gXHRpbnQgKmxhc3RfcmFuO1xuIFxuIFx0aWYgKGlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpKVxuQEAgLTcwMSw2ICYjNDM7NzAyLDcgQEAgdm9pZCBrdm1fYXJjaF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxuIFx0aWYgKGhhc192aGUoKSlcbiBcdFx0a3ZtX3ZjcHVfbG9hZF92aGUodmNwdSk7XG4gXHRrdm1fYXJjaF92Y3B1X2xvYWRfZnAodmNwdSk7XG4mIzQzO1x0a3ZtX3ZjcHVfbG9hZF9wbXUodmNwdSwgbGFzdF9jcHUpO1xuIFx0a3ZtX3ZjcHVfcG11X3Jlc3RvcmVfZ3Vlc3QodmNwdSk7XG4gXHRpZiAoa3ZtX2FybV9pc19wdnRpbWVfZW5hYmxlZChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gpKVxuIFx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVDT1JEX1NURUFMLCB2Y3B1KTtcbkBAIC03NTQsNyAmIzQzOzc1Niw2IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0a3ZtX2FybV92bWlkX2NsZWFyX2FjdGl2ZSgpO1xuIFxuIFx0dmNwdV9jbGVhcl9vbl91bnN1cHBvcnRlZF9jcHUodmNwdSk7XG4tXHR2Y3B1LVx1MDAzZWNwdSA9IC0xO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2t2bV9hcm1fdmNwdV9wb3dlcl9vZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuQEAgLTE2NzAsMjkgJiM0MzsxNjcxLDI2IEBAIHN0YXRpYyBpbnQgX19rdm1fdmNwdV9zZXRfdGFyZ2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGZlYXR1cmVzID0gaW5pdC1cdTAwM2VmZWF0dXJlc1swXTtcbiBcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuLVx0aW50IHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0aW50IHJldDtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuIFxuIFx0aWYgKHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfVkNQVV9GRUFUVVJFU19DT05GSUdVUkVELCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5mbGFncykgXHUwMDI2XHUwMDI2XG4gXHQgICAga3ZtX3ZjcHVfaW5pdF9jaGFuZ2VkKHZjcHUsIGluaXQpKVxuLVx0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGJpdG1hcF9jb3B5KGt2bS1cdTAwM2VhcmNoLnZjcHVfZmVhdHVyZXMsIFx1MDAyNmZlYXR1cmVzLCBLVk1fVkNQVV9NQVhfRkVBVFVSRVMpO1xuIFxuIFx0cmV0ID0ga3ZtX3NldHVwX3ZjcHUodmNwdSk7XG4gXHRpZiAocmV0KVxuLVx0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0LyogTm93IHdlIGtub3cgd2hhdCBpdCBpcywgd2UgY2FuIHJlc2V0IGl0LiAqL1xuIFx0a3ZtX3Jlc2V0X3ZjcHUodmNwdSk7XG4gXG4gXHRzZXRfYml0KEtWTV9BUkNIX0ZMQUdfVkNQVV9GRUFUVVJFU19DT05GSUdVUkVELCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5mbGFncyk7XG4gXHR2Y3B1X3NldF9mbGFnKHZjcHUsIFZDUFVfSU5JVElBTElaRUQpO1xuLVx0cmV0ID0gMDtcbi1vdXRfdW5sb2NrOlxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbi1cdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQga3ZtX3ZjcHVfc2V0X3RhcmdldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5AQCAtMTcwOCw2ICYjNDM7MTcwNiw4IEBAIHN0YXRpYyBpbnQga3ZtX3ZjcHVfc2V0X3RhcmdldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiYjNDM7XG4gXHRpZiAoIWt2bV92Y3B1X2luaXRpYWxpemVkKHZjcHUpKVxuIFx0XHRyZXR1cm4gX19rdm1fdmNwdV9zZXRfdGFyZ2V0KHZjcHUsIGluaXQpO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMgYi9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jXG5pbmRleCA1YjFhZjdlMjE3NmZhLi5jNjgzMzFjZGZhZjkzIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuY1xuQEAgLTcsOSAmIzQzOzcsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rdm1faG9zdC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZi9hcm1fcG11LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcmN1bGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9lbXVsYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nrdm0vYXJtX3BtdS5oXHUwMDNlXG5AQCAtMTcsNiAmIzQzOzE3LDEwIEBAXG4gXG4gI2RlZmluZSBQRVJGX0FUVFJfQ0ZHMV9DT1VOVEVSXzY0QklUXHRCSVQoMClcbiBcbiYjNDM7LypcbiYjNDM7ICogYXJtX3BtdXMgaXMgYXBwZW5kLW9ubHkuIGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2MygpIGZlZWRzIHBlcnNpc3RlbnRcbiYjNDM7ICogVk0gc3RhdGUsIHNvIGEgdHJ1ZSByZXN1bHQgbXVzdCByZW1haW4gdmFsaWQgYWZ0ZXIgdGhlIGNoZWNrLlxuJiM0MzsgKi9cbiBzdGF0aWMgTElTVF9IRUFEKGFybV9wbXVzKTtcbiBzdGF0aWMgREVGSU5FX01VVEVYKGFybV9wbXVzX2xvY2spO1xuIFxuQEAgLTI2LDcgJiM0MzszMCw2IEBAIHN0YXRpYyBib29sIGt2bV9wbXVfY291bnRlcl9pc19lbmFibGVkKHN0cnVjdCBrdm1fcG1jICpwbWMpO1xuIFxuIGJvb2wga3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzKHZvaWQpXG4ge1xuLVx0Z3VhcmQobXV0ZXgpKFx1MDAyNmFybV9wbXVzX2xvY2spO1xuIFx0cmV0dXJuICFsaXN0X2VtcHR5KFx1MDAyNmFybV9wbXVzKTtcbiB9XG4gXG5AQCAtODAsNiAmIzQzOzgzLDExIEBAIHU2NCBrdm1fcG11X2V2dHlwZXJfbWFzayhzdHJ1Y3Qga3ZtICprdm0pXG4gXHRyZXR1cm4gbWFzaztcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seShzdHJ1Y3Qga3ZtICprdm0pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdGVzdF9iaXQoS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgXHUwMDI2a3ZtLVx1MDAzZWFyY2guZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGt2bV9wbWNfaXNfNjRiaXQgLSBkZXRlcm1pbmUgaWYgY291bnRlciBpcyA2NGJpdFxuICAqIEBwbWM6IGNvdW50ZXIgY29udGV4dFxuQEAgLTMxNywxMiAmIzQzOzMyNSwxMiBAQCB1NjQga3ZtX3BtdV9hY2Nlc3NpYmxlX2NvdW50ZXJfbWFzayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gdTY0IGt2bV9wbXVfaW1wbGVtZW50ZWRfY291bnRlcl9tYXNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHR1NjQgdmFsID0gRklFTERfR0VUKEFSTVY4X1BNVV9QTUNSX04sIGt2bV92Y3B1X3JlYWRfcG1jcih2Y3B1KSk7XG4mIzQzO1x0dTY0IG4gPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm5yX3BtdV9jb3VudGVycztcbiBcbi1cdGlmICh2YWwgPT0gMClcbiYjNDM7XHRpZiAobiA9PSAwKVxuIFx0XHRyZXR1cm4gQklUKEFSTVY4X1BNVV9DWUNMRV9JRFgpO1xuIFx0ZWxzZVxuLVx0XHRyZXR1cm4gR0VOTUFTSyh2YWwgLSAxLCAwKSB8IEJJVChBUk1WOF9QTVVfQ1lDTEVfSURYKTtcbiYjNDM7XHRcdHJldHVybiBHRU5NQVNLKG4gLSAxLCAwKSB8IEJJVChBUk1WOF9QTVVfQ1lDTEVfSURYKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQga3ZtX3BtY19lbmFibGVfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxuQEAgLTU3MSw2ICYjNDM7NTc5LDIzIEBAIHZvaWQga3ZtX3BtdV9zb2Z0d2FyZV9pbmNyZW1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKVxuIFx0a3ZtX3BtdV9jb3VudGVyX2luY3JlbWVudCh2Y3B1LCB2YWwsIEFSTVY4X1BNVVYzX1BFUkZDVFJfU1dfSU5DUik7XG4gfVxuIFxuJiM0Mzt2b2lkIGt2bV9wbXVfcmVxdWVzdF9yZWNyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHR2Y3B1LVx1MDAzZWFyY2gucG11LmV2ZW50c19uZWVkX3JlY3JlYXRlID0gdHJ1ZTtcbiYjNDM7XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQga3ZtX3BtdV9hcHBseV9wbWNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9sZCwgdTY0IHZhbCwgYm9vbCBmb3JjZV9yZWxvYWQpXG4mIzQzO3tcbiYjNDM7XHR1NjQgY2hhbmdlZCA9IG9sZCBeIHZhbDtcbiYjNDM7XG4mIzQzO1x0LyogUmVsb2FkIHRoZSBQTVUgaWYgdGhlIHdyaXRlIGFmZmVjdHMgdGhlIGJhY2tpbmcgcGVyZiBldmVudHMuICovXG4mIzQzO1x0aWYgKGNoYW5nZWQgXHUwMDI2IChBUk1WOF9QTVVfUE1DUl9MQyB8IEFSTVY4X1BNVV9QTUNSX0xQKSlcbiYjNDM7XHRcdGt2bV9wbXVfcmVxdWVzdF9yZWNyZWF0ZSh2Y3B1KTtcbiYjNDM7XHRlbHNlIGlmIChmb3JjZV9yZWxvYWQgfHwgKGNoYW5nZWQgXHUwMDI2IEFSTVY4X1BNVV9QTUNSX0UpKVxuJiM0MztcdFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFTE9BRF9QTVUsIHZjcHUpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGt2bV9wbXVfaGFuZGxlX3BtY3IgLSBoYW5kbGUgUE1DUiByZWdpc3RlclxuICAqIEB2Y3B1OiBUaGUgdmNwdSBwb2ludGVyXG5AQCAtNTc4LDE5ICYjNDM7NjAzLDE4IEBAIHZvaWQga3ZtX3BtdV9zb2Z0d2FyZV9pbmNyZW1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKVxuICAqL1xuIHZvaWQga3ZtX3BtdV9oYW5kbGVfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpXG4ge1xuJiM0MztcdHU2NCBvbGQgPSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBQTUNSX0VMMCk7XG4gXHRpbnQgaTtcbiBcbiBcdC8qIEZpeHVwIFBNQ1JfRUwwIHRvIHJlY29uY2lsZSB0aGUgUE1VIHZlcnNpb24gYW5kIHRoZSBMUCBiaXQgKi9cbiBcdGlmICgha3ZtX2hhc19mZWF0KHZjcHUtXHUwMDNla3ZtLCBJRF9BQTY0REZSMF9FTDEsIFBNVVZlciwgVjNQNSkpXG4gXHRcdHZhbCBcdTAwMjY9IH5BUk1WOF9QTVVfUE1DUl9MUDtcbiBcbi1cdC8qIFJlcXVlc3QgYSByZWxvYWQgb2YgdGhlIFBNVSB0byBlbmFibGUvZGlzYWJsZSBhZmZlY3RlZCBjb3VudGVycyAqL1xuLVx0aWYgKChfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBQTUNSX0VMMCkgXiB2YWwpIFx1MDAyNiBBUk1WOF9QTVVfUE1DUl9FKVxuLVx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XG4tXG4gXHQvKiBUaGUgcmVzZXQgYml0cyBkb24mIzM5O3QgaW5kaWNhdGUgYW55IHN0YXRlLCBhbmQgc2hvdWxkbiYjMzk7dCBiZSBzYXZlZC4gKi9cbiBcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBQTUNSX0VMMCwgKHZhbCBcdTAwMjYgfihBUk1WOF9QTVVfUE1DUl9DIHwgQVJNVjhfUE1VX1BNQ1JfUCkpKTtcbiBcbiYjNDM7XHRrdm1fcG11X2FwcGx5X3BtY3IodmNwdSwgb2xkLCBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBQTUNSX0VMMCksIGZhbHNlKTtcbiYjNDM7XG4gXHRpZiAodmFsIFx1MDAyNiBBUk1WOF9QTVVfUE1DUl9DKVxuIFx0XHRrdm1fcG11X3NldF9jb3VudGVyX3ZhbHVlKHZjcHUsIEFSTVY4X1BNVV9DWUNMRV9JRFgsIDApO1xuIFxuQEAgLTYwNiw2ICYjNDM7NjMwLDIwIEBAIHZvaWQga3ZtX3BtdV9oYW5kbGVfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpXG4gXHR9XG4gfVxuIFxuJiM0Mzt2b2lkIGt2bV9wbXVfYXBwbHlfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBvbGQsIHU2NCB2YWwpXG4mIzQzO3tcbiYjNDM7XHR1NjQgY2hhbmdlZCA9IG9sZCBeIHZhbDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBIUE1OIGRldGVybWluZXMgd2hpY2ggY291bnRlcnMgSFBNRCBhbmQgSExQIGFwcGx5IHRvLiBDaGFuZ2VzIHRvXG4mIzQzO1x0ICogdGhlc2UgZmllbGRzIHJlcXVpcmUgbmV3IHBlcmYgZXZlbnQgZmlsdGVycyBhbmQgc2FtcGxlIHBlcmlvZHMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGNoYW5nZWQgXHUwMDI2IChNRENSX0VMMl9IUE1OIHwgTURDUl9FTDJfSFBNRCB8IE1EQ1JfRUwyX0hMUCkpXG4mIzQzO1x0XHRrdm1fcG11X3JlcXVlc3RfcmVjcmVhdGUodmNwdSk7XG4mIzQzO1x0ZWxzZSBpZiAoY2hhbmdlZCBcdTAwMjYgTURDUl9FTDJfSFBNRSlcbiYjNDM7XHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUxPQURfUE1VLCB2Y3B1KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgYm9vbCBrdm1fcG11X2NvdW50ZXJfaXNfZW5hYmxlZChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9wbWNfdG9fdmNwdShwbWMpO1xuQEAgLTY0OSwxMCAmIzQzOzY4Nyw4IEBAIHN0YXRpYyBib29sIGt2bV9wbWNfY291bnRzX2F0X2VsMihzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxuIFx0cmV0dXJuIGt2bV9wbWNfcmVhZF9ldnRyZWcocG1jKSBcdTAwMjYgQVJNVjhfUE1VX0lOQ0xVREVfRUwyO1xuIH1cbiBcbi1zdGF0aWMgaW50IGt2bV9tYXBfcG11X2V2ZW50KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGV2ZW50c2VsKVxuJiM0MztzdGF0aWMgaW50IGt2bV9tYXBfcG11X2V2ZW50KHN0cnVjdCBhcm1fcG11ICpwbXUsIHVuc2lnbmVkIGludCBldmVudHNlbClcbiB7XG4tXHRzdHJ1Y3QgYXJtX3BtdSAqcG11ID0ga3ZtLVx1MDAzZWFyY2guYXJtX3BtdTtcbi1cbiBcdC8qXG4gXHQgKiBUaGUgQ1BVIFBNVSBsaWtlbHkgaXNuJiMzOTt0IFBNVXYzOyBsZXQgdGhlIGRyaXZlciBwcm92aWRlIGEgbWFwcGluZ1xuIFx0ICogZm9yIHRoZSBndWVzdCYjMzk7cyBQTVV2MyBldmVudCBJRC5cbkBAIC02NjMsMTQgJiM0Mzs2OTksMjcgQEAgc3RhdGljIGludCBrdm1fbWFwX3BtdV9ldmVudChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBldmVudHNlbClcbiBcdHJldHVybiBldmVudHNlbDtcbiB9XG4gXG4tLyoqXG4tICoga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudCAtIGNyZWF0ZSBhIHBlcmYgZXZlbnQgZm9yIGEgY291bnRlclxuLSAqIEBwbWM6IENvdW50ZXIgY29udGV4dFxuLSAqL1xuLXN0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYylcbiYjNDM7c3RhdGljIHN0cnVjdCBhcm1fcG11ICprdm1fcG11X3Byb2JlX2FybXBtdShpbnQgY3B1KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFybV9wbXVfZW50cnkgKmVudHJ5O1xuJiM0MztcdHN0cnVjdCBhcm1fcG11ICpwbXU7XG4mIzQzO1xuJiM0MztcdGd1YXJkKHJjdSkoKTtcbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZW50cnksIFx1MDAyNmFybV9wbXVzLCBlbnRyeSkge1xuJiM0MztcdFx0cG11ID0gZW50cnktXHUwMDNlYXJtX3BtdTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIFx1MDAyNnBtdS1cdTAwM2VzdXBwb3J0ZWRfY3B1cykpXG4mIzQzO1x0XHRcdHJldHVybiBwbXU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdShzdHJ1Y3Qga3ZtX3BtYyAqcG1jLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBhcm1fcG11ICphcm1fcG11KVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9wbWNfdG9fdmNwdShwbWMpO1xuLVx0c3RydWN0IGFybV9wbXUgKmFybV9wbXUgPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmFybV9wbXU7XG4gXHRzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7XG4gXHRzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIGF0dHI7XG4gXHRpbnQgZXZlbnRzZWw7XG5AQCAtNzA0LDcgJiM0Mzs3NTMsNyBAQCBzdGF0aWMgdm9pZCBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50KHN0cnVjdCBrdm1fcG1jICpwbWMpXG4gXHQgKiBEb24mIzM5O3QgY3JlYXRlIGFuIGV2ZW50IGlmIHdlJiMzOTtyZSBydW5uaW5nIG9uIGhhcmR3YXJlIHRoYXQgcmVxdWlyZXNcbiBcdCAqIFBNVXYzIGV2ZW50IHRyYW5zbGF0aW9uIGFuZCB3ZSBjb3VsZG4mIzM5O3QgZmluZCBhIHZhbGlkIG1hcHBpbmcuXG4gXHQgKi9cbi1cdGV2ZW50c2VsID0ga3ZtX21hcF9wbXVfZXZlbnQodmNwdS1cdTAwM2Vrdm0sIGV2ZW50c2VsKTtcbiYjNDM7XHRldmVudHNlbCA9IGt2bV9tYXBfcG11X2V2ZW50KGFybV9wbXUsIGV2ZW50c2VsKTtcbiBcdGlmIChldmVudHNlbCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTc0OSw2ICYjNDM7Nzk4LDMyIEBAIHN0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYylcbiBcdHBtYy1cdTAwM2VwZXJmX2V2ZW50ID0gZXZlbnQ7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICoga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudCAtIGNyZWF0ZSBhIHBlcmYgZXZlbnQgZm9yIGEgY291bnRlclxuJiM0MzsgKiBAcG1jOiBDb3VudGVyIGNvbnRleHRcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9wbWNfdG9fdmNwdShwbWMpO1xuJiM0MztcdHN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5hcm1fcG11O1xuJiM0MztcbiYjNDM7XHRpZiAoa3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXHUwMDNla3ZtKSkge1xuJiM0MztcdFx0ZG8ge1xuJiM0MztcdFx0XHRhcm1fcG11ID0ga3ZtX3BtdV9wcm9iZV9hcm1wbXUoUkVBRF9PTkNFKHZjcHUtXHUwMDNlY3B1KSk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoIWFybV9wbXUpIHtcbiYjNDM7XHRcdFx0XHRwcl93YXJuX29uY2UoXCYjMzQ7a3ZtOiBVbnN1cHBvcnRlZCBQTVUgdmFyaWF0aW9uIGRldGVjdGVkLlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0YWRkX3RhaW50KFRBSU5UX0NQVV9PVVRfT0ZfU1BFQywgTE9DS0RFUF9TVElMTF9PSyk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0XHRrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50X3dpdGhfcG11KHBtYywgYXJtX3BtdSk7XG4mIzQzO1x0XHR9IHdoaWxlICghY3B1bWFza190ZXN0X2NwdShSRUFEX09OQ0UodmNwdS1cdTAwM2VjcHUpLCBcdTAwMjZhcm1fcG11LVx1MDAzZXN1cHBvcnRlZF9jcHVzKSk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnRfd2l0aF9wbXUocG1jLCBhcm1fcG11KTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICoga3ZtX3BtdV9zZXRfY291bnRlcl9ldmVudF90eXBlIC0gc2V0IHNlbGVjdGVkIGNvdW50ZXIgdG8gbW9uaXRvciBzb21lIGV2ZW50XG4gICogQHZjcHU6IFRoZSB2Y3B1IHBvaW50ZXJcbkBAIC03ODksNDMgJiM0Mzs4NjQsNyBAQCB2b2lkIGt2bV9ob3N0X3BtdV9pbml0KHN0cnVjdCBhcm1fcG11ICpwbXUpXG4gXHRcdHJldHVybjtcbiBcbiBcdGVudHJ5LVx1MDAzZWFybV9wbXUgPSBwbXU7XG4tXHRsaXN0X2FkZF90YWlsKFx1MDAyNmVudHJ5LVx1MDAzZWVudHJ5LCBcdTAwMjZhcm1fcG11cyk7XG4tfVxuLVxuLXN0YXRpYyBzdHJ1Y3QgYXJtX3BtdSAqa3ZtX3BtdV9wcm9iZV9hcm1wbXUodm9pZClcbi17XG4tXHRzdHJ1Y3QgYXJtX3BtdV9lbnRyeSAqZW50cnk7XG4tXHRzdHJ1Y3QgYXJtX3BtdSAqcG11O1xuLVx0aW50IGNwdTtcbi1cbi1cdGd1YXJkKG11dGV4KShcdTAwMjZhcm1fcG11c19sb2NrKTtcbi1cbi1cdC8qXG4tXHQgKiBJdCBpcyBzYWZlIHRvIHVzZSBhIHN0YWxlIGNwdSB0byBpdGVyYXRlIHRoZSBsaXN0IG9mIFBNVXMgc28gbG9uZyBhc1xuLVx0ICogdGhlIHNhbWUgdmFsdWUgaXMgdXNlZCBmb3IgdGhlIGVudGlyZXR5IG9mIHRoZSBsb29wLiBHaXZlbiB0aGlzLCBhbmRcbi1cdCAqIHRoZSBmYWN0IHRoYXQgbm8gcGVyY3B1IGRhdGEgaXMgdXNlZCBmb3IgdGhlIGxvb2t1cCB0aGVyZSBpcyBubyBuZWVkXG4tXHQgKiB0byBkaXNhYmxlIHByZWVtcHRpb24uXG4tXHQgKlxuLVx0ICogSXQgaXMgc3RpbGwgbmVjZXNzYXJ5IHRvIGdldCBhIHZhbGlkIGNwdSwgdGhvdWdoLCB0byBwcm9iZSBmb3IgdGhlXG4tXHQgKiBkZWZhdWx0IFBNVSBpbnN0YW5jZSBhcyB1c2Vyc3BhY2UgaXMgbm90IHJlcXVpcmVkIHRvIHNwZWNpZnkgYSBQTVVcbi1cdCAqIHR5cGUuIEluIG9yZGVyIHRvIHVwaG9sZCB0aGUgcHJlZXhpc3RpbmcgYmVoYXZpb3IgS1ZNIHNlbGVjdHMgdGhlXG4tXHQgKiBQTVUgaW5zdGFuY2UgZm9yIHRoZSBjb3JlIGR1cmluZyB2Y3B1IGluaXQuIEEgZGVwZW5kZW50IHVzZVxuLVx0ICogY2FzZSB3b3VsZCBiZSBhIHVzZXIgd2l0aCBkaXNkYWluIG9mIGFsbCB0aGluZ3MgYmlnLkxJVFRMRSB0aGF0XG4tXHQgKiBhZmZpbmVzIHRoZSBWTU0gdG8gYSBwYXJ0aWN1bGFyIGNsdXN0ZXIgb2YgY29yZXMuXG4tXHQgKlxuLVx0ICogSW4gYW55IGNhc2UsIHVzZXJzcGFjZSBzaG91bGQganVzdCBkbyB0aGUgc2FuZSB0aGluZyBhbmQgdXNlIHRoZSBVQVBJXG4tXHQgKiB0byBzZWxlY3QgYSBQTVUgdHlwZSBkaXJlY3RseS4gQnV0LCBiZSB3YXJ5IG9mIHRoZSBiYWdnYWdlIGJlaW5nXG4tXHQgKiBjYXJyaWVkIGhlcmUuXG4tXHQgKi9cbi1cdGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7XG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcdTAwMjZhcm1fcG11cywgZW50cnkpIHtcbi1cdFx0cG11ID0gZW50cnktXHUwMDNlYXJtX3BtdTtcbi1cbi1cdFx0aWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBcdTAwMjZwbXUtXHUwMDNlc3VwcG9ydGVkX2NwdXMpKVxuLVx0XHRcdHJldHVybiBwbXU7XG4tXHR9XG4tXG4tXHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZlbnRyeS1cdTAwM2VlbnRyeSwgXHUwMDI2YXJtX3BtdXMpO1xuIH1cbiBcbiBzdGF0aWMgdTY0IF9fY29tcHV0ZV9wbWNlaWQoc3RydWN0IGFybV9wbXUgKnBtdSwgYm9vbCBwbWNlaWQxKVxuQEAgLTg3MSw2ICYjNDM7OTEwLDEzIEBAIHU2NCBrdm1fcG11X2dldF9wbWNlaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHBtY2VpZDEpXG4gXHR1NjQgdmFsLCBtYXNrID0gMDtcbiBcdGludCBiYXNlLCBpLCBucl9ldmVudHM7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBIaWRlIHRoZSBoYXJkd2FyZSBQTVUmIzM5O3MgZXZlbnQgc2V0IHRvIGtlZXAgUE1DRUlEIHN0YWJsZSBhY3Jvc3NcbiYjNDM7XHQgKiBwaHlzaWNhbCBDUFUgbWlncmF0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdS1cdTAwM2Vrdm0pKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuIFx0aWYgKCFwbWNlaWQxKSB7XG4gXHRcdHZhbCA9IGNvbXB1dGVfcG1jZWlkMCh2Y3B1KTtcbiBcdFx0YmFzZSA9IDA7XG5AQCAtODk4LDkgJiM0Mzs5NDQsMjcgQEAgdTY0IGt2bV9wbXVfZ2V0X3BtY2VpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcG1jZWlkMSlcbiBcdHJldHVybiB2YWwgXHUwMDI2IG1hc2s7XG4gfVxuIFxuJiM0Mzt2b2lkIGt2bV92Y3B1X2xvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGxhc3RfY3B1KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdS1cdTAwM2Vrdm0pIHx8IHZjcHUtXHUwMDNlY3B1ID09IGxhc3RfY3B1IHx8IGxhc3RfY3B1ID09IC0xKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAoa3ZtX3BtdV9wcm9iZV9hcm1wbXUodmNwdS1cdTAwM2VjcHUpICE9IGt2bV9wbXVfcHJvYmVfYXJtcG11KGxhc3RfY3B1KSlcbiYjNDM7XHRcdGt2bV9wbXVfcmVxdWVzdF9yZWNyZWF0ZSh2Y3B1KTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIGt2bV92Y3B1X3JlbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnBtdTtcbiBcdHU2NCBtYXNrID0ga3ZtX3BtdV9pbXBsZW1lbnRlZF9jb3VudGVyX21hc2sodmNwdSk7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGlmIChwbXUtXHUwMDNlZXZlbnRzX25lZWRfcmVjcmVhdGUpIHtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEtWTV9BUk1WOF9QTVVfTUFYX0NPVU5URVJTOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0a3ZtX3BtdV9zdG9wX2NvdW50ZXIoa3ZtX3ZjcHVfaWR4X3RvX3BtYyh2Y3B1LCBpKSk7XG4mIzQzO1xuJiM0MztcdFx0cG11LVx1MDAzZWV2ZW50c19uZWVkX3JlY3JlYXRlID0gZmFsc2U7XG4mIzQzO1x0fVxuIFxuIFx0X192Y3B1X3Jtd19zeXNfcmVnKHZjcHUsIFBNT1ZTU0VUX0VMMCwgXHUwMDI2PSwgbWFzayk7XG4gXHRfX3ZjcHVfcm13X3N5c19yZWcodmNwdSwgUE1JTlRFTlNFVF9FTDEsIFx1MDAyNj0sIG1hc2spO1xuQEAgLTkzOSw4ICYjNDM7MTAwMyw4IEBAIGludCBrdm1fYXJtX3BtdV92M19lbmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHN0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0LyogT25seSBwb3NzaWJsZSB3aGVuIHVzaW5nIEtWTV9BUk1fVkNQVV9QTVVfVjNfU1RSSUNUICovXG4tXHRpZiAoIXZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guYXJtX3BtdSlcbiYjNDM7XHQvKiBTdHJpY3QgUE1VdjMgcmVxdWlyZXMgYSBoYXJkd2FyZSBQTVUgb3IgZml4ZWQtY291bnRlcnMtb25seSBtb2RlLiAqL1xuJiM0MztcdGlmICghdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5hcm1fcG11IFx1MDAyNlx1MDAyNiAha3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXHUwMDNla3ZtKSlcbiBcdFx0cmV0dXJuIC1FTlhJTztcbiBcbiBcdGlmIChpcnFjaGlwX2luX2tlcm5lbCh2Y3B1LVx1MDAzZWt2bSkpIHtcbkBAIC0xMDEzLDYgJiM0MzsxMDc3LDkgQEAgdTgga3ZtX2FybV9wbXVfZ2V0X21heF9jb3VudGVycyhzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0c3RydWN0IGFybV9wbXUgKmFybV9wbXUgPSBrdm0tXHUwMDNlYXJjaC5hcm1fcG11O1xuIFxuJiM0MztcdGlmIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBVbmRlciBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NUUklDVCBubyBQTVUgZXhpc3RzIHVudGlsIHVzZXJzcGFjZSBzZXRzXG4gXHQgKiBvbmUsIHNvIHRoaXMgY2FuIGJlIHJlYWNoZWQgYmVmb3JlIGFybV9wbXUgaXMgc2V0LiBSZXBvcnQgbm9cbkBAIC0xMDM1LDMwICYjNDM7MTEwMiwxMiBAQCB1OCBrdm1fYXJtX3BtdV9nZXRfbWF4X2NvdW50ZXJzKHN0cnVjdCBrdm0gKmt2bSlcbiBcdHJldHVybiBiaXRtYXBfd2VpZ2h0KGFybV9wbXUtXHUwMDNlY250cl9tYXNrLCBBUk1WOF9QTVVfTUFYX0dFTkVSQUxfQ09VTlRFUlMpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBrdm1fYXJtX3NldF9ucl9jb3VudGVycyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBucilcbi17XG4tXHRrdm0tXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnMgPSBucjtcbi1cbi1cdC8qIFJlc2V0IE1EQ1JfRUwyLkhQTU4gYmVoaW5kIHRoZSB2Y3B1cyYjMzk7IGJhY2suLi4gKi9cbi1cdGlmICh0ZXN0X2JpdChLVk1fQVJNX1ZDUFVfSEFTX0VMMiwga3ZtLVx1MDAzZWFyY2gudmNwdV9mZWF0dXJlcykpIHtcbi1cdFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuLVx0XHR1bnNpZ25lZCBsb25nIGk7XG4tXG4tXHRcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkge1xuLVx0XHRcdHU2NCB2YWwgPSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBNRENSX0VMMik7XG4tXHRcdFx0dmFsIFx1MDAyNj0gfk1EQ1JfRUwyX0hQTU47XG4tXHRcdFx0dmFsIHw9IEZJRUxEX1BSRVAoTURDUl9FTDJfSFBNTiwga3ZtLVx1MDAzZWFyY2gubnJfcG11X2NvdW50ZXJzKTtcbi1cdFx0XHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgTURDUl9FTDIsIHZhbCk7XG4tXHRcdH1cbi1cdH1cbi19XG4tXG4gc3RhdGljIHZvaWQga3ZtX2FybV9zZXRfcG11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGFybV9wbXUgKmFybV9wbXUpXG4ge1xuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4gXG4gXHRrdm0tXHUwMDNlYXJjaC5hcm1fcG11ID0gYXJtX3BtdTtcbi1cdGt2bV9hcm1fc2V0X25yX2NvdW50ZXJzKGt2bSwga3ZtX2FybV9wbXVfZ2V0X21heF9jb3VudGVycyhrdm0pKTtcbiYjNDM7XHRrdm0tXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnMgPSBrdm1fYXJtX3BtdV9nZXRfbWF4X2NvdW50ZXJzKGt2bSk7XG4gfVxuIFxuIC8qKlxuQEAgLTEwNzYsNyAmIzQzOzExMjUsMjQgQEAgc3RhdGljIHZvaWQga3ZtX2FybV9zZXRfcG11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGFybV9wbXUgKmFybV9wbXUpXG4gICovXG4gaW50IGt2bV9hcm1fc2V0X2RlZmF1bHRfcG11KHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4tXHRzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IGt2bV9wbXVfcHJvYmVfYXJtcG11KCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJdCBpcyBzYWZlIHRvIHVzZSBhIHN0YWxlIGNwdSB0byBpdGVyYXRlIHRoZSBsaXN0IG9mIFBNVXMgc28gbG9uZyBhc1xuJiM0MztcdCAqIHRoZSBzYW1lIHZhbHVlIGlzIHVzZWQgZm9yIHRoZSBlbnRpcmV0eSBvZiB0aGUgbG9vcC4gR2l2ZW4gdGhpcywgYW5kXG4mIzQzO1x0ICogdGhlIGZhY3QgdGhhdCBubyBwZXJjcHUgZGF0YSBpcyB1c2VkIGZvciB0aGUgbG9va3VwIHRoZXJlIGlzIG5vIG5lZWRcbiYjNDM7XHQgKiB0byBkaXNhYmxlIHByZWVtcHRpb24uXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBJdCBpcyBzdGlsbCBuZWNlc3NhcnkgdG8gZ2V0IGEgdmFsaWQgY3B1LCB0aG91Z2gsIHRvIHByb2JlIGZvciB0aGVcbiYjNDM7XHQgKiBkZWZhdWx0IFBNVSBpbnN0YW5jZSBhcyB1c2Vyc3BhY2UgaXMgbm90IHJlcXVpcmVkIHRvIHNwZWNpZnkgYSBQTVVcbiYjNDM7XHQgKiB0eXBlLiBJbiBvcmRlciB0byB1cGhvbGQgdGhlIHByZWV4aXN0aW5nIGJlaGF2aW9yIEtWTSBzZWxlY3RzIHRoZVxuJiM0MztcdCAqIFBNVSBpbnN0YW5jZSBmb3IgdGhlIGNvcmUgZHVyaW5nIHZjcHUgaW5pdC4gQSBkZXBlbmRlbnQgdXNlXG4mIzQzO1x0ICogY2FzZSB3b3VsZCBiZSBhIHVzZXIgd2l0aCBkaXNkYWluIG9mIGFsbCB0aGluZ3MgYmlnLkxJVFRMRSB0aGF0XG4mIzQzO1x0ICogYWZmaW5lcyB0aGUgVk1NIHRvIGEgcGFydGljdWxhciBjbHVzdGVyIG9mIGNvcmVzLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogSW4gYW55IGNhc2UsIHVzZXJzcGFjZSBzaG91bGQganVzdCBkbyB0aGUgc2FuZSB0aGluZyBhbmQgdXNlIHRoZSBVQVBJXG4mIzQzO1x0ICogdG8gc2VsZWN0IGEgUE1VIHR5cGUgZGlyZWN0bHksIG9yIHJlcXVlc3QgZml4ZWQtY291bnRlcnMtb25seVxuJiM0MztcdCAqIGVtdWxhdGlvbi4gQnV0LCBiZSB3YXJ5IG9mIHRoZSBiYWdnYWdlIGJlaW5nIGNhcnJpZWQgaGVyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IGt2bV9wbXVfcHJvYmVfYXJtcG11KHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpO1xuIFxuIFx0aWYgKCFhcm1fcG11KVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbkBAIC0xMDkzLDE3ICYjNDM7MTE1OSwxOSBAQCBzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcG11X2lkKVxuIFx0aW50IHJldCA9IC1FTlhJTztcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuLVx0bXV0ZXhfbG9jayhcdTAwMjZhcm1fcG11c19sb2NrKTtcbiYjNDM7XHRndWFyZChyY3UpKCk7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcdTAwMjZhcm1fcG11cywgZW50cnkpIHtcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbnRyeSwgXHUwMDI2YXJtX3BtdXMsIGVudHJ5KSB7XG4gXHRcdGFybV9wbXUgPSBlbnRyeS1cdTAwM2Vhcm1fcG11O1xuIFx0XHRpZiAoYXJtX3BtdS1cdTAwM2VwbXUudHlwZSA9PSBwbXVfaWQpIHtcbiBcdFx0XHRpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pIHx8XG4mIzQzO1x0XHRcdCAgICBrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSB8fFxuIFx0XHRcdCAgICAoa3ZtLVx1MDAzZWFyY2gucG11X2ZpbHRlciBcdTAwMjZcdTAwMjYga3ZtLVx1MDAzZWFyY2guYXJtX3BtdSAhPSBhcm1fcG11KSkge1xuIFx0XHRcdFx0cmV0ID0gLUVCVVNZO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFxuJiM0MztcdFx0XHRzZXRfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0VYUExJQ0lULCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5mbGFncyk7XG4gXHRcdFx0a3ZtX2FybV9zZXRfcG11KGt2bSwgYXJtX3BtdSk7XG4gXHRcdFx0Y3B1bWFza19jb3B5KGt2bS1cdTAwM2VhcmNoLnN1cHBvcnRlZF9jcHVzLCBcdTAwMjZhcm1fcG11LVx1MDAzZXN1cHBvcnRlZF9jcHVzKTtcbiBcbkBAIC0xMTIyLDIxICYjNDM7MTE5MCwzOSBAQCBzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcG11X2lkKVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRtdXRleF91bmxvY2soXHUwMDI2YXJtX3BtdXNfbG9jayk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pIHx8IGt2bS1cdTAwM2VhcmNoLnBtdV9maWx0ZXIgfHxcbiYjNDM7XHQgICAgdGVzdF9iaXQoS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRVhQTElDSVQsIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmZsYWdzKSlcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdHNldF9iaXQoS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgXHUwMDI2a3ZtLVx1MDAzZWFyY2guZmxhZ3MpO1xuJiM0MztcdGt2bS1cdTAwM2VhcmNoLm5yX3BtdV9jb3VudGVycyA9IDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X25yX2NvdW50ZXJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IG4pXG4ge1xuIFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4gXG4mIzQzO1x0aWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSlcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuIFx0aWYgKCFrdm0tXHUwMDNlYXJjaC5hcm1fcG11KVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGlmIChuIFx1MDAzZSBrdm1fYXJtX3BtdV9nZXRfbWF4X2NvdW50ZXJzKGt2bSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0a3ZtX2FybV9zZXRfbnJfY291bnRlcnMoa3ZtLCBuKTtcbiYjNDM7XHRrdm0tXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnMgPSBuO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTEyMDAsNyAmIzQzOzEyODYsNyBAQCBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuIFx0XHQgICAgIGZpbHRlci5hY3Rpb24gIT0gS1ZNX1BNVV9FVkVOVF9ERU5ZKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdFx0aWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSlcbiYjNDM7XHRcdGlmIChrdm1fdm1faGFzX3Jhbl9vbmNlKGt2bSkgfHwga3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KGt2bSkpXG4gXHRcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbiBcdFx0aWYgKCFrdm0tXHUwMDNlYXJjaC5hcm1fcG11KVxuQEAgLTEyNDgsNiAmIzQzOzEzMzQsOCBAQCBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuIFxuIFx0XHRyZXR1cm4ga3ZtX2FybV9wbXVfdjNfc2V0X25yX2NvdW50ZXJzKHZjcHUsIG4pO1xuIFx0fVxuJiM0MztcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOlxuJiM0MztcdFx0cmV0dXJuIGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1KTtcbiBcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklUOlxuIFx0XHRyZXR1cm4ga3ZtX2FybV9wbXVfdjNfaW5pdCh2Y3B1KTtcbiBcdH1cbkBAIC0xMjc0LDYgJiM0MzsxMzYyLDkgQEAgaW50IGt2bV9hcm1fcG11X3YzX2dldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbiBcdFx0aXJxID0gdmNwdS1cdTAwM2VhcmNoLnBtdS5pcnFfbnVtO1xuIFx0XHRyZXR1cm4gcHV0X3VzZXIoaXJxLCB1YWRkcik7XG4gXHR9XG4mIzQzO1x0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFk6XG4mIzQzO1x0XHRpZiAoa3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXHUwMDNla3ZtKSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4gXHRyZXR1cm4gLUVOWElPO1xuQEAgLTEyODcsNiAmIzQzOzEzNzgsNyBAQCBpbnQga3ZtX2FybV9wbXVfdjNfaGFzX2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuIFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJTFRFUjpcbiBcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VOlxuIFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9OUl9DT1VOVEVSUzpcbiYjNDM7XHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWTpcbiBcdFx0aWYgKGt2bV92Y3B1X2hhc19wbXUodmNwdSkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vcmVzZXQuYyBiL2FyY2gvYXJtNjQva3ZtL3Jlc2V0LmNcbmluZGV4IDEwZWI3MjQ5YWE5ZTguLmNkY2RlYTg1MDkwOWMgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9yZXNldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9yZXNldC5jXG5AQCAtMTc4LDE3ICYjNDM7MTc4LDI0IEBAIHN0YXRpYyB2b2lkIGt2bV92Y3B1X3Jlc2V0X3N2ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gdm9pZCBrdm1fcmVzZXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHZjcHVfcmVzZXRfc3RhdGUgcmVzZXRfc3RhdGU7XG4tXHRib29sIGxvYWRlZDtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnJ1bm5pbmc7XG4mIzQzO1x0Ym9vbCBsb2FkZWQgPSBmYWxzZTtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gubXBfc3RhdGVfbG9jayk7XG4gXHRyZXNldF9zdGF0ZSA9IHZjcHUtXHUwMDNlYXJjaC5yZXNldF9zdGF0ZTtcbiBcdHZjcHUtXHUwMDNlYXJjaC5yZXNldF9zdGF0ZS5yZXNldCA9IGZhbHNlO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2VhcmNoLm1wX3N0YXRlX2xvY2spO1xuIFxuLVx0cHJlZW1wdF9kaXNhYmxlKCk7XG4tXHRsb2FkZWQgPSAodmNwdS1cdTAwM2VjcHUgIT0gLTEpO1xuLVx0aWYgKGxvYWRlZClcbiYjNDM7XHRndWFyZChwcmVlbXB0KSgpO1xuJiM0MztcbiYjNDM7XHRydW5uaW5nID0ga3ZtX2dldF9ydW5uaW5nX3ZjcHUoKTtcbiYjNDM7XHRpZiAocnVubmluZykge1xuJiM0MztcdFx0aWYgKEtWTV9CVUdfT04ocnVubmluZyAhPSB2Y3B1LCB2Y3B1LVx1MDAzZWt2bSkpXG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0XHRsb2FkZWQgPSB0cnVlO1xuIFx0XHRrdm1fYXJjaF92Y3B1X3B1dCh2Y3B1KTtcbiYjNDM7XHR9XG4gXG4gXHRpZiAoIWt2bV9hcm1fdmNwdV9zdmVfZmluYWxpemVkKHZjcHUpKSB7XG4gXHRcdGlmICh2Y3B1X2hhc19mZWF0dXJlKHZjcHUsIEtWTV9BUk1fVkNQVV9TVkUpKVxuQEAgLTIxNSw3ICYjNDM7MjIyLDYgQEAgdm9pZCBrdm1fcmVzZXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRpZiAobG9hZGVkKVxuIFx0XHRrdm1fYXJjaF92Y3B1X2xvYWQodmNwdSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTtcbi1cdHByZWVtcHRfZW5hYmxlKCk7XG4gfVxuIFxuIHUzMiBrdm1fZ2V0X3BhX2JpdHMoc3RydWN0IGt2bSAqa3ZtKVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jXG5pbmRleCA0NGFhZTUyYzQ3M2Q3Li5hNWMxMjE0ODJjNzEzIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuY1xuQEAgLTEzMjYsNyAmIzQzOzEzMjYsNyBAQCBzdGF0aWMgYm9vbCBhY2Nlc3NfcG11X2V2dHlwZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsXG4gXG4gc3RhdGljIGludCBzZXRfcG1yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyLCB1NjQgdmFsKVxuIHtcbi1cdHU2NCBtYXNrID0ga3ZtX3BtdV9hY2Nlc3NpYmxlX2NvdW50ZXJfbWFzayh2Y3B1KTtcbiYjNDM7XHR1NjQgbWFzayA9IGt2bV9wbXVfaW1wbGVtZW50ZWRfY291bnRlcl9tYXNrKHZjcHUpO1xuIFxuIFx0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIHItXHUwMDNlcmVnLCB2YWwgXHUwMDI2IG1hc2spO1xuIFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFTE9BRF9QTVUsIHZjcHUpO1xuQEAgLTEzMzQsOSAmIzQzOzEzMzQsMTggQEAgc3RhdGljIGludCBzZXRfcG1yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyLCB1NjQgdmFcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBzZXRfcG11X2V2dHlwZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuJiM0MztcdFx0XHQgICBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyLCB1NjQgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIHItXHUwMDNlcmVnLCB2YWwpO1xuJiM0MztcdGt2bV9wbXVfcmVxdWVzdF9yZWNyZWF0ZSh2Y3B1KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBnZXRfcG1yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyLCB1NjQgKnZhbClcbiB7XG4tXHR1NjQgbWFzayA9IGt2bV9wbXVfYWNjZXNzaWJsZV9jb3VudGVyX21hc2sodmNwdSk7XG4mIzQzO1x0dTY0IG1hc2sgPSBrdm1fcG11X2ltcGxlbWVudGVkX2NvdW50ZXJfbWFzayh2Y3B1KTtcbiBcbiBcdCp2YWwgPSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCByLVx1MDAzZXJlZykgXHUwMDI2IG1hc2s7XG4gXHRyZXR1cm4gMDtcbkBAIC0xNTE3LDYgJiM0MzsxNTI2LDcgQEAgc3RhdGljIGludCBzZXRfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnIsXG4ge1xuIFx0dTggbmV3X24gPSBGSUVMRF9HRVQoQVJNVjhfUE1VX1BNQ1JfTiwgdmFsKTtcbiBcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuJiM0MztcdHU2NCBvbGQgPSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCByLVx1MDAzZXJlZyk7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiBcbkBAIC0xNTQ5LDcgJiM0MzsxNTU5LDcgQEAgc3RhdGljIGludCBzZXRfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnIsXG4gXHRcdHZhbCB8PSBBUk1WOF9QTVVfUE1DUl9MQztcbiBcbiBcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCByLVx1MDAzZXJlZywgdmFsKTtcbi1cdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUxPQURfUE1VLCB2Y3B1KTtcbiYjNDM7XHRrdm1fcG11X2FwcGx5X3BtY3IodmNwdSwgb2xkLCB2YWwsIHRydWUpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTE1ODMsNyAmIzQzOzE1OTMsNyBAQCBzdGF0aWMgaW50IHNldF9wbWNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcixcbiAvKiBNYWNybyB0byBleHBhbmQgdGhlIFBNRVZUWVBFUm5fRUwwIHJlZ2lzdGVyICovXG4gI2RlZmluZSBQTVVfUE1FVlRZUEVSX0VMMChuKVx0XHRcdFx0XHRcdFxcXG4gXHR7IFBNVV9TWVNfUkVHKFBNRVZUWVBFUm5fRUwwKG4pKSxcdFx0XHRcdFxcXG4tXHQgIC5yZXNldCA9IHJlc2V0X3BtZXZ0eXBlcixcdFx0XHRcdFx0XFxcbiYjNDM7XHQgIC5yZXNldCA9IHJlc2V0X3BtZXZ0eXBlciwgLnNldF91c2VyID0gc2V0X3BtdV9ldnR5cGVyLFx0XFxcbiBcdCAgLmFjY2VzcyA9IGFjY2Vzc19wbXVfZXZ0eXBlciwgLnJlZyA9IChQTUVWVFlQRVIwX0VMMCAmIzQzOyBuKSwgfVxuIFxuIC8qIE1hY3JvIHRvIGV4cGFuZCB0aGUgQU1VIGNvdW50ZXIgYW5kIHR5cGUgcmVnaXN0ZXJzKi9cbkBAIC0zMTE0LDE3ICYjNDM7MzEyNCwyMiBAQCBzdGF0aWMgYm9vbCBhY2Nlc3NfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHR9XG4gXG4gXHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgTURDUl9FTDIsIHZhbCk7XG4tXG4tXHQvKlxuLVx0ICogUmVxdWVzdCBhIHJlbG9hZCBvZiB0aGUgUE1VIHRvIGVuYWJsZS9kaXNhYmxlIHRoZSBjb3VudGVyc1xuLVx0ICogYWZmZWN0ZWQgYnkgSFBNRS5cbi1cdCAqL1xuLVx0aWYgKChvbGQgXiB2YWwpIFx1MDAyNiBNRENSX0VMMl9IUE1FKVxuLVx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XG4mIzQzO1x0a3ZtX3BtdV9hcHBseV9tZGNyKHZjcHUsIG9sZCwgdmFsKTtcbiBcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBzZXRfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkLFxuJiM0MztcdFx0ICAgIHU2NCB2YWwpXG4mIzQzO3tcbiYjNDM7XHR1NjQgb2xkID0gX192Y3B1X3N5c19yZWcodmNwdSwgTURDUl9FTDIpO1xuJiM0MztcbiYjNDM7XHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgTURDUl9FTDIsIHZhbCk7XG4mIzQzO1x0a3ZtX3BtdV9hcHBseV9tZGNyKHZjcHUsIG9sZCwgdmFsKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgYWNjZXNzX3JhcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdCAgICAgICBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsXG4gXHRcdCAgICAgICBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyKVxuQEAgLTM4MjcsNyAmIzQzOzM4NDIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyBzeXNfcmVnX2Rlc2NzW10gPSB7XG4gXHQgKiBpbiAzMmJpdCBtb2RlLiBIZXJlIHdlIGNob29zZSB0byByZXNldCBpdCBhcyB6ZXJvIGZvciBjb25zaXN0ZW5jeS5cbiBcdCAqL1xuIFx0eyBQTVVfU1lTX1JFRyhQTUNDRklMVFJfRUwwKSwgLmFjY2VzcyA9IGFjY2Vzc19wbXVfZXZ0eXBlcixcbi1cdCAgLnJlc2V0ID0gcmVzZXRfdmFsLCAucmVnID0gUE1DQ0ZJTFRSX0VMMCwgLnZhbCA9IDAgfSxcbiYjNDM7XHQgIC5yZXNldCA9IHJlc2V0X3ZhbCwgLnJlZyA9IFBNQ0NGSUxUUl9FTDAsIC52YWwgPSAwLFxuJiM0MztcdCAgLnNldF91c2VyID0gc2V0X3BtdV9ldnR5cGVyIH0sXG4gXG4gXHRFTDJfUkVHX1ZOQ1IoVlBJRFJfRUwyLCByZXNldF91bmtub3duLCAwKSxcbiBcdEVMMl9SRUdfVk5DUihWTVBJRFJfRUwyLCByZXNldF91bmtub3duLCAwKSxcbkBAIC0zODM2LDcgJiM0MzszODUyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2Mgc3lzX3JlZ19kZXNjc1tdID0ge1xuIFx0RUwyX1JFR19GSUxURVJFRChTQ1RMUjJfRUwyLCBhY2Nlc3Nfdm1fcmVnLCByZXNldF92YWwsIDAsXG4gXHRcdFx0IHNjdGxyMl9lbDJfdmlzaWJpbGl0eSksXG4gXHRFTDJfUkVHX1ZOQ1IoSENSX0VMMiwgcmVzZXRfaGNyLCAwKSxcbi1cdEVMMl9SRUcoTURDUl9FTDIsIGFjY2Vzc19tZGNyLCByZXNldF9tZGNyLCAwKSxcbiYjNDM7XHRTWVNfUkVHX1VTRVJfRklMVEVSKE1EQ1JfRUwyLCBhY2Nlc3NfbWRjciwgcmVzZXRfbWRjciwgMCxcbiYjNDM7XHRcdFx0ICAgIE5VTEwsIHNldF9tZGNyLCBlbDJfdmlzaWJpbGl0eSksXG4gXHRFTDJfUkVHKENQVFJfRUwyLCBhY2Nlc3NfcncsIHJlc2V0X3ZhbCwgQ1BUUl9OVkhFX0VMMl9SRVMxKSxcbiBcdEVMMl9SRUdfVk5DUihIU1RSX0VMMiwgcmVzZXRfdmFsLCAwKSxcbiBcdEVMMl9SRUdfVk5DUl9GSUxUKEhGR1JUUl9FTDIsIGZndF92aXNpYmlsaXR5KSxcbkBAIC01MzkwLDcgJiM0Mzs1NDA3LDcgQEAgdm9pZCBrdm1fcmVzZXRfc3lzX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0c2V0X2JpdChLVk1fQVJDSF9GTEFHX0lEX1JFR1NfSU5JVElBTElaRUQsIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmZsYWdzKTtcbiBcbiBcdGlmIChrdm1fdmNwdV9oYXNfcG11KHZjcHUpKVxuLVx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XG4mIzQzO1x0XHRrdm1fcG11X3JlcXVlc3RfcmVjcmVhdGUodmNwdSk7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUva3ZtL2FybV9wbXUuaCBiL2luY2x1ZGUva3ZtL2FybV9wbXUuaFxuaW5kZXggNmI0YTExOGQxN2NhOS4uMTdiODYxZWQxNzFkNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUva3ZtL2FybV9wbXUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9rdm0vYXJtX3BtdS5oXG5AQCAtMzIsNiAmIzQzOzMyLDcgQEAgc3RydWN0IGt2bV9wbXUge1xuIFx0c3RydWN0IGt2bV9wbWMgcG1jW0tWTV9BUk1WOF9QTVVfTUFYX0NPVU5URVJTXTtcbiBcdGludCBpcnFfbnVtO1xuIFx0Ym9vbCBjcmVhdGVkO1xuJiM0MztcdGJvb2wgZXZlbnRzX25lZWRfcmVjcmVhdGU7XG4gfTtcbiBcbiBzdHJ1Y3QgYXJtX3BtdV9lbnRyeSB7XG5AQCAtNTUsOSAmIzQzOzU2LDEzIEBAIHZvaWQga3ZtX3BtdV9zeW5jX2h3c3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBib29sIGt2bV9wbXVfc2hvdWxkX25vdGlmeV91c2VyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gYm9vbCBrdm1fcG11X3VwZGF0ZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIGt2bV9wbXVfc29mdHdhcmVfaW5jcmVtZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhbCk7XG4mIzQzO3ZvaWQga3ZtX3BtdV9yZXF1ZXN0X3JlY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4mIzQzO3ZvaWQga3ZtX3BtdV9hcHBseV9wbWNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9sZCwgdTY0IHZhbCwgYm9vbCBmb3JjZV9yZWxvYWQpO1xuIHZvaWQga3ZtX3BtdV9oYW5kbGVfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpO1xuJiM0Mzt2b2lkIGt2bV9wbXVfYXBwbHlfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBvbGQsIHU2NCB2YWwpO1xuIHZvaWQga3ZtX3BtdV9zZXRfY291bnRlcl9ldmVudF90eXBlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEsXG4gXHRcdFx0XHQgICAgdTY0IHNlbGVjdF9pZHgpO1xuJiM0Mzt2b2lkIGt2bV92Y3B1X2xvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGxhc3RfY3B1KTtcbiB2b2lkIGt2bV92Y3B1X3JlbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKTtcbkBAIC0xMzUsNyAmIzQzOzE0MCwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3BtdV9zaG91bGRfbm90aWZ5X3VzZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIH1cbiBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3BtdV91cGRhdGVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkgeyByZXR1cm4gZmFsc2U7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3BtdV9zb2Z0d2FyZV9pbmNyZW1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKSB7fVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3BtdV9yZXF1ZXN0X3JlY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge31cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGt2bV9wbXVfYXBwbHlfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBvbGQsIHU2NCB2YWwsIGJvb2wgZm9yY2VfcmVsb2FkKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X2hhbmRsZV9wbWNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhbCkge31cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGt2bV9wbXVfYXBwbHlfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBvbGQsIHU2NCB2YWwpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV9wbXVfc2V0X2NvdW50ZXJfZXZlbnRfdHlwZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0XHRcdFx0ICB1NjQgZGF0YSwgdTY0IHNlbGVjdF9pZHgpIHt9XG4gc3RhdGljIGlubGluZSBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuQEAgLTE2Nyw2ICYjNDM7MTc1LDcgQEAgc3RhdGljIGlubGluZSB1NjQga3ZtX3BtdV9nZXRfcG1jZWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBwbWNlaWQxKVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X3VwZGF0ZV92Y3B1X2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X3BtdV9yZXN0b3JlX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge31cbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfcG11X3Jlc3RvcmVfaG9zdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdmNwdV9sb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBsYXN0X2NwdSkge31cbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfcmVsb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9XG4gc3RhdGljIGlubGluZSB1OCBrdm1fYXJtX3BtdV9nZXRfcG11dmVyX2xpbWl0KHZvaWQpXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL3Rvb2xzL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuaW5kZXggMWMxM2JmYTJkMzhhYS4uMzlhMWExZTQxMmU2NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG5AQCAtNDM3LDYgJiM0Mzs0MzcsNyBAQCBlbnVtIHtcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVJcdFx0MlxuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9QTVVcdFx0M1xuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9OUl9DT1VOVEVSU1x0NFxuJiM0MzsjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZXHQ1XG4gI2RlZmluZSBLVk1fQVJNX1ZDUFVfVElNRVJfQ1RSTFx0XHQxXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9USU1FUl9JUlFfVlRJTUVSXHRcdDBcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1RJTUVSX0lSUV9QVElNRVJcdFx0MVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvbGludXgvYml0ZmllbGQuaCBiL3Rvb2xzL2luY2x1ZGUvbGludXgvYml0ZmllbGQuaFxuaW5kZXggZGRmODFmMjQ5NTZiYS4uMWM2MzMzNDNkNTc2NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvbGludXgvYml0ZmllbGQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvaW5jbHVkZS9saW51eC9iaXRmaWVsZC5oXG5AQCAtMTQyLDMyICYjNDM7MTQyLDMyIEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTY0IGZpZWxkX21hc2sodTY0IGZpZWxkKVxuIFx0cmV0dXJuIGZpZWxkIC8gZmllbGRfbXVsdGlwbGllcihmaWVsZCk7XG4gfVxuICNkZWZpbmUgZmllbGRfbWF4KGZpZWxkKVx0KCh0eXBlb2YoZmllbGQpKWZpZWxkX21hc2soZmllbGQpKVxuLSNkZWZpbmUgX19fX01BS0VfT1AodHlwZSxiYXNlLHRvLGZyb20pXHRcdFx0XHRcdFxcXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSBfXyMjdHlwZSB0eXBlIyNfZW5jb2RlX2JpdHMoYmFzZSB2LCBiYXNlIGZpZWxkKVx0XFxcbiYjNDM7I2RlZmluZSBfX19fTUFLRV9PUChuYW1lLHR5cGUsYmFzZSx0byxmcm9tKVx0XHRcdFx0XFxcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB0eXBlIG5hbWUjI19lbmNvZGVfYml0cyhiYXNlIHYsIGJhc2UgZmllbGQpXHRcXFxuIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0aWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHYpIFx1MDAyNlx1MDAyNiAodiBcdTAwMjYgfmZpZWxkX21hc2soZmllbGQpKSlcdFxcXG4gXHRcdF9fZmllbGRfb3ZlcmZsb3coKTtcdFx0XHRcdFx0XFxcbiBcdHJldHVybiB0bygodiBcdTAwMjYgZmllbGRfbWFzayhmaWVsZCkpICogZmllbGRfbXVsdGlwbGllcihmaWVsZCkpO1x0XFxcbiB9XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIF9fIyN0eXBlIHR5cGUjI19yZXBsYWNlX2JpdHMoX18jI3R5cGUgb2xkLFx0XFxcbi1cdFx0XHRcdFx0YmFzZSB2YWwsIGJhc2UgZmllbGQpXHRcdFxcXG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdHlwZSBuYW1lIyNfcmVwbGFjZV9iaXRzKHR5cGUgb2xkLFx0XHRcXFxuJiM0MztcdFx0XHRcdFx0XHRiYXNlIHZhbCwgYmFzZSBmaWVsZClcdFxcXG4ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4tXHRyZXR1cm4gKG9sZCBcdTAwMjYgfnRvKGZpZWxkKSkgfCB0eXBlIyNfZW5jb2RlX2JpdHModmFsLCBmaWVsZCk7XHRcXFxuJiM0MztcdHJldHVybiAob2xkIFx1MDAyNiB+dG8oZmllbGQpKSB8IG5hbWUjI19lbmNvZGVfYml0cyh2YWwsIGZpZWxkKTtcdFxcXG4gfVx0XHRcdFx0XHRcdFx0XHRcdFxcXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHR5cGUjI3BfcmVwbGFjZV9iaXRzKF9fIyN0eXBlICpwLFx0XHRcXFxuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbmFtZSMjcF9yZXBsYWNlX2JpdHModHlwZSAqcCxcdFx0XFxcbiBcdFx0XHRcdFx0YmFzZSB2YWwsIGJhc2UgZmllbGQpXHRcdFxcXG4ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4tXHQqcCA9ICgqcCBcdTAwMjYgfnRvKGZpZWxkKSkgfCB0eXBlIyNfZW5jb2RlX2JpdHModmFsLCBmaWVsZCk7XHRcXFxuJiM0MztcdCpwID0gKCpwIFx1MDAyNiB+dG8oZmllbGQpKSB8IG5hbWUjI19lbmNvZGVfYml0cyh2YWwsIGZpZWxkKTtcdFxcXG4gfVx0XHRcdFx0XHRcdFx0XHRcdFxcXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSBiYXNlIHR5cGUjI19nZXRfYml0cyhfXyMjdHlwZSB2LCBiYXNlIGZpZWxkKVx0XFxcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBiYXNlIG5hbWUjI19nZXRfYml0cyh0eXBlIHYsIGJhc2UgZmllbGQpXHRcXFxuIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0cmV0dXJuIChmcm9tKHYpIFx1MDAyNiBmaWVsZCkvZmllbGRfbXVsdGlwbGllcihmaWVsZCk7XHRcdFxcXG4gfVxuLSNkZWZpbmUgX19NQUtFX09QKHNpemUpXHRcdFx0XHRcdFx0XHRcXFxuLVx0X19fX01BS0VfT1AobGUjI3NpemUsdSMjc2l6ZSxjcHVfdG9fbGUjI3NpemUsbGUjI3NpemUjI190b19jcHUpXHRcXFxuLVx0X19fX01BS0VfT1AoYmUjI3NpemUsdSMjc2l6ZSxjcHVfdG9fYmUjI3NpemUsYmUjI3NpemUjI190b19jcHUpXHRcXFxuLVx0X19fX01BS0VfT1AodSMjc2l6ZSx1IyNzaXplLCwpXG4tX19fX01BS0VfT1AodTgsdTgsLClcbiYjNDM7I2RlZmluZSBfX01BS0VfT1Aoc2l6ZSlcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdF9fX19NQUtFX09QKGxlIyNzaXplLF9fbGUjI3NpemUsdSMjc2l6ZSxjcHVfdG9fbGUjI3NpemUsbGUjI3NpemUjI190b19jcHUpXHRcXFxuJiM0MztcdF9fX19NQUtFX09QKGJlIyNzaXplLF9fYmUjI3NpemUsdSMjc2l6ZSxjcHVfdG9fYmUjI3NpemUsYmUjI3NpemUjI190b19jcHUpXHRcXFxuJiM0MztcdF9fX19NQUtFX09QKHUjI3NpemUsdSMjc2l6ZSx1IyNzaXplLCwpXG4mIzQzO19fX19NQUtFX09QKHU4LHU4LHU4LCwpXG4gX19NQUtFX09QKDE2KVxuIF9fTUFLRV9PUCgzMilcbiBfX01BS0VfT1AoNjQpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmNcbmluZGV4IDIyMjIzMzk1OTY5ZTAuLjYzNzY1M2Y3YTI1YjkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jXG5AQCAtMjUsNiAmIzQzOzI1LDE0IEBAXG4gLyogVGhlIGN5Y2xlIGNvdW50ZXIgYml0IHBvc2l0aW9uIHRoYXQmIzM5O3MgY29tbW9uIGFtb25nIHRoZSBQTVUgcmVnaXN0ZXJzICovXG4gI2RlZmluZSBBUk1WOF9QTVVfQ1lDTEVfSURYXHRcdDMxXG4gXG4mIzQzOyNpZm5kZWYgTURDUl9FTDJfSFBNTlxuJiM0MzsjZGVmaW5lIE1EQ1JfRUwyX0hQTU5cdFx0XHRHRU5NQVNLX1VMTCg0LCAwKVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNpZm5kZWYgTURDUl9FTDJfSFBNRVxuJiM0MzsjZGVmaW5lIE1EQ1JfRUwyX0hQTUVcdFx0XHRCSVRfVUxMKDcpXG4mIzQzOyNlbmRpZlxuJiM0MztcbiBzdHJ1Y3QgdnBtdV92bSB7XG4gXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbkBAIC00MDMsMTIgJiM0Mzs0MTEsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfdnBtdV92bSh2b2lkICpndWVzdF9jb2RlKVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdV9pbml0IGluaXQ7XG4gXHR1OCBwbXV2ZXIsIGVjO1xuLVx0dTY0IGRmcjAsIGlycSA9IDIzO1xuLVx0c3RydWN0IGt2bV9kZXZpY2VfYXR0ciBpcnFfYXR0ciA9IHtcbi1cdFx0Lmdyb3VwID0gS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuLVx0XHQuYXR0ciA9IEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLFxuLVx0XHQuYWRkciA9ICh1NjQpXHUwMDI2aXJxLFxuLVx0fTtcbiYjNDM7XHR1NjQgZGZyMDtcbiBcbiBcdC8qIFRoZSB0ZXN0IGNyZWF0ZXMgdGhlIHZwbXVfdm0gbXVsdGlwbGUgdGltZXMuIEVuc3VyZSBhIGNsZWFuIHN0YXRlICovXG4gXHRtZW1zZXQoXHUwMDI2dnBtdV92bSwgMCwgc2l6ZW9mKHZwbXVfdm0pKTtcbkBAIC00MzQsOCAmIzQzOzQzNyw2IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZV92cG11X3ZtKHZvaWQgKmd1ZXN0X2NvZGUpXG4gXHRURVNUX0FTU0VSVChwbXV2ZXIgIT0gSURfQUE2NERGUjBfRUwxX1BNVVZlcl9JTVBfREVGIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgcG11dmVyIFx1MDAzZT0gSURfQUE2NERGUjBfRUwxX1BNVVZlcl9JTVAsXG4gXHRcdCAgICBcJiMzNDtVbmV4cGVjdGVkIFBNVVZFUiAoMHgleCkgb24gdGhlIHZDUFUgd2l0aCBQTVV2M1wmIzM0OywgcG11dmVyKTtcbi1cbi1cdHZjcHVfaW9jdGwodnBtdV92bS52Y3B1LCBLVk1fU0VUX0RFVklDRV9BVFRSLCBcdTAwMjZpcnFfYXR0cik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGRlc3Ryb3lfdnBtdV92bSh2b2lkKVxuQEAgLTQ0MywxMSAmIzQzOzQ0NCwxMCBAQCBzdGF0aWMgdm9pZCBkZXN0cm95X3ZwbXVfdm0odm9pZClcbiBcdGt2bV92bV9mcmVlKHZwbXVfdm0udm0pO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBwbWNyX24pXG4mIzQzO3N0YXRpYyB2b2lkIHJ1bl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3QgdWNhbGwgdWM7XG4gXG4tXHR2Y3B1X2FyZ3Nfc2V0KHZjcHUsIDEsIHBtY3Jfbik7XG4gXHR2Y3B1X3J1bih2Y3B1KTtcbiBcdHN3aXRjaCAoZ2V0X3VjYWxsKHZjcHUsIFx1MDAyNnVjKSkge1xuIFx0Y2FzZSBVQ0FMTF9BQk9SVDpcbkBAIC00NjEsMTUgJiM0Mzs0NjEsMTcgQEAgc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcG1jcl9uKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnModW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sIGV4cGVjdF9mYWlsKVxuJiM0MztzdGF0aWMgdm9pZCBndWVzdF9jb2RlX2RvbmUodm9pZClcbiYjNDM7e1xuJiM0MztcdEdVRVNUX0RPTkUoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgc2V0X25yX2NvdW50ZXJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiYjNDM7XHRcdFx0ICAgIHVuc2lnbmVkIGludCBucl9jb3VudGVycywgYm9vbCBleHBlY3RfZmFpbClcbiB7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4gXHR1bnNpZ25lZCBpbnQgcHJldjtcbiBcdGludCByZXQ7XG4gXG4tXHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcbi1cdHZjcHUgPSB2cG11X3ZtLnZjcHU7XG4tXG4gXHRwcmV2ID0gZ2V0X3BtY3Jfbih2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX1BNQ1JfRUwwKSkpO1xuIFxuIFx0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG5AQCAtNDgxLDYgJiM0Mzs0ODMsMjYgQEAgc3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycywgYm9vbFxuIFx0XHRcdCAgICBucl9jb3VudGVycywgcHJldik7XG4gXHRlbHNlXG4gXHRcdFRFU1RfQVNTRVJUKCFyZXQsIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycyxcbiYjNDM7XHRcdFx0XHRcdFx0IGJvb2wgZml4ZWRfY291bnRlcnNfb25seSxcbiYjNDM7XHRcdFx0XHRcdFx0IGJvb2wgZXhwZWN0X2ZhaWwpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4mIzQzO1x0dTY0IGlycSA9IDIzO1xuJiM0MztcbiYjNDM7XHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcbiYjNDM7XHR2Y3B1ID0gdnBtdV92bS52Y3B1O1xuJiM0MztcbiYjNDM7XHRpZiAoZml4ZWRfY291bnRlcnNfb25seSlcbiYjNDM7XHRcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgXHUwMDI2aXJxKTtcbiYjNDM7XG4mIzQzO1x0c2V0X25yX2NvdW50ZXJzKHZjcHUsIG5yX2NvdW50ZXJzLCBleHBlY3RfZmFpbCk7XG4gXG4gXHR2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVCwgTlVMTCk7XG4gfVxuQEAgLTQ4OSwyMSAmIzQzOzUxMSwyMiBAQCBzdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnModW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sXG4gICogQ3JlYXRlIGEgZ3Vlc3Qgd2l0aCBvbmUgdkNQVSwgc2V0IHRoZSBQTUNSX0VMMC5OIGZvciB0aGUgdkNQVSB0byBAcG1jcl9uLFxuICAqIGFuZCBydW4gdGhlIHRlc3QuXG4gICovXG4tc3RhdGljIHZvaWQgcnVuX2FjY2Vzc190ZXN0KHU2NCBwbWNyX24pXG4mIzQzO3N0YXRpYyB2b2lkIHJ1bl9hY2Nlc3NfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXG4ge1xuIFx0dTY0IHNwO1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuIFx0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcbiBcbi1cdHByX2RlYnVnKFwmIzM0O1Rlc3Qgd2l0aCBwbWNyX24gJWx1XFxuXCYjMzQ7LCBwbWNyX24pO1xuJiM0MztcdHByX2RlYnVnKFwmIzM0O1Rlc3Qgd2l0aCBwbWNyX24gJWx1LCBmaXhlZF9jb3VudGVyc19vbmx5ICVkXFxuXCYjMzQ7LCBwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHkpO1xuIFxuLVx0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZmFsc2UpO1xuJiM0MztcdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHksIGZhbHNlKTtcbiBcdHZjcHUgPSB2cG11X3ZtLnZjcHU7XG4gXG4gXHQvKiBTYXZlIHRoZSBpbml0aWFsIHNwIHRvIHJlc3RvcmUgdGhlbSBsYXRlciB0byBydW4gdGhlIGd1ZXN0IGFnYWluICovXG4gXHRzcCA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBjdHh0X3JlZ19hbGlhcyh2Y3B1LCBTWVNfU1BfRUwxKSk7XG4gXG4tXHRydW5fdmNwdSh2Y3B1LCBwbWNyX24pO1xuJiM0MztcdHZjcHVfYXJnc19zZXQodmNwdSwgMSwgcG1jcl9uKTtcbiYjNDM7XHRydW5fdmNwdSh2Y3B1KTtcbiBcbiBcdC8qXG4gXHQgKiBSZXNldCBhbmQgcmUtaW5pdGlhbGl6ZSB0aGUgdkNQVSwgYW5kIHJ1biB0aGUgZ3Vlc3QgY29kZSBhZ2FpbiB0b1xuQEAgLTUxNiw3ICYjNDM7NTM5LDggQEAgc3RhdGljIHZvaWQgcnVuX2FjY2Vzc190ZXN0KHU2NCBwbWNyX24pXG4gXHR2Y3B1X3NldF9yZWcodmNwdSwgY3R4dF9yZWdfYWxpYXModmNwdSwgU1lTX1NQX0VMMSksIHNwKTtcbiBcdHZjcHVfc2V0X3JlZyh2Y3B1LCBBUk02NF9DT1JFX1JFRyhyZWdzLnBjKSwgKHU2NClndWVzdF9jb2RlKTtcbiBcbi1cdHJ1bl92Y3B1KHZjcHUsIHBtY3Jfbik7XG4mIzQzO1x0dmNwdV9hcmdzX3NldCh2Y3B1LCAxLCBwbWNyX24pO1xuJiM0MztcdHJ1bl92Y3B1KHZjcHUpO1xuIFxuIFx0ZGVzdHJveV92cG11X3ZtKCk7XG4gfVxuQEAgLTUzMSwxNCAmIzQzOzU1NSwxNCBAQCBzdGF0aWMgc3RydWN0IHBtcmVnX3NldHMgdmFsaWRpdHlfY2hlY2tfcmVnX3NldHNbXSA9IHtcbiAgKiBDcmVhdGUgYSBWTSwgYW5kIGNoZWNrIGlmIEtWTSBoYW5kbGVzIHRoZSB1c2Vyc3BhY2UgYWNjZXNzZXMgb2ZcbiAgKiB0aGUgUE1VIHJlZ2lzdGVyIHNldHMgaW4gQHZhbGlkaXR5X2NoZWNrX3JlZ19zZXRzW10gY29ycmVjdGx5LlxuICAqL1xuLXN0YXRpYyB2b2lkIHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uKVxuJiM0MztzdGF0aWMgdm9pZCBydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QodTY0IHBtY3JfbiwgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5KVxuIHtcbiBcdGludCBpO1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuIFx0dTY0IHNldF9yZWdfaWQsIGNscl9yZWdfaWQsIHJlZ192YWw7XG4gXHR1NjQgdmFsaWRfY291bnRlcnNfbWFzaywgbWF4X2NvdW50ZXJzX21hc2s7XG4gXG4tXHR0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCBmYWxzZSk7XG4mIzQzO1x0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZml4ZWRfY291bnRlcnNfb25seSwgZmFsc2UpO1xuIFx0dmNwdSA9IHZwbXVfdm0udmNwdTtcbiBcbiBcdHZhbGlkX2NvdW50ZXJzX21hc2sgPSBnZXRfY291bnRlcnNfbWFzayhwbWNyX24pO1xuQEAgLTU4MywxNiAmIzQzOzYwNyw5NCBAQCBzdGF0aWMgdm9pZCBydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QodTY0IHBtY3JfbilcbiBcdGRlc3Ryb3lfdnBtdV92bSgpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcnVuX21kY3JfZWwyX3ZhbGlkaXR5X3Rlc3QodTY0IHBtY3JfbiwgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4mIzQzO1x0dTY0IGV4cGVjdGVkX21kY3IsIG1kY3I7XG4mIzQzO1x0dTY0IGlycSA9IDIzO1xuJiM0MztcbiYjNDM7XHRwcl9kZWJ1ZyhcJiMzNDtNRENSX0VMMiB0ZXN0IHdpdGggcG1jcl9uICVsdSwgZml4ZWRfY291bnRlcnNfb25seSAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdCBwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHkpO1xuJiM0MztcbiYjNDM7XHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcbiYjNDM7XHRpZiAoIXZtX3N1cHBvcnRzX2VsMih2cG11X3ZtLnZtKSkge1xuJiM0MztcdFx0ZGVzdHJveV92cG11X3ZtKCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR2Y3B1ID0gdnBtdV92bS52Y3B1O1xuJiM0MztcbiYjNDM7XHRtZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpO1xuJiM0MztcdGV4cGVjdGVkX21kY3IgPSB1NjRfcmVwbGFjZV9iaXRzKG1kY3IsIEZJRUxEX01BWChNRENSX0VMMl9IUE1OKSxcbiYjNDM7XHRcdFx0XHRcdCBNRENSX0VMMl9IUE1OKTtcbiYjNDM7XHR2Y3B1X3NldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSxcbiYjNDM7XHRcdCAgICAgZXhwZWN0ZWRfbWRjcik7XG4mIzQzO1xuJiM0MztcdG1kY3IgPSB2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSk7XG4mIzQzO1x0VEVTVF9BU1NFUlQobWRjciA9PSBleHBlY3RlZF9tZGNyLFxuJiM0MztcdFx0ICAgIFwmIzM0O01EQ1JfRUwyIHdhcyBub3QgcHJvcGVybHkgdXBkYXRlZCBhZnRlciBIUE1OIHdyaXRlIChleHBlY3RlZCAweCVseCwgZ290IDB4JWx4KVwmIzM0OyxcbiYjNDM7XHRcdCAgICBleHBlY3RlZF9tZGNyLCBtZGNyKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZpeGVkX2NvdW50ZXJzX29ubHkpIHtcbiYjNDM7XHRcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdFx0bWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTtcbiYjNDM7XHRcdFRFU1RfQVNTRVJUKG1kY3IgPT0gZXhwZWN0ZWRfbWRjcixcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O01EQ1JfRUwyIGNoYW5nZWQgYWZ0ZXIgUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkgKGV4cGVjdGVkIDB4JWx4LCBnb3QgMHglbHgpXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgZXhwZWN0ZWRfbWRjciwgbWRjcik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzZXRfbnJfY291bnRlcnModmNwdSwgcG1jcl9uLCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdG1kY3IgPSB2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSk7XG4mIzQzO1x0VEVTVF9BU1NFUlQobWRjciA9PSBleHBlY3RlZF9tZGNyLFxuJiM0MztcdFx0ICAgIFwmIzM0O01EQ1JfRUwyIGNoYW5nZWQgYWZ0ZXIgUE1VX1YzX1NFVF9OUl9DT1VOVEVSUyAoZXhwZWN0ZWQgMHglbHgsIGdvdCAweCVseClcJiMzNDssXG4mIzQzO1x0XHQgICAgZXhwZWN0ZWRfbWRjciwgbWRjcik7XG4mIzQzO1xuJiM0MztcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgXHUwMDI2aXJxKTtcbiYjNDM7XG4mIzQzO1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuJiM0MztcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVCwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdG1kY3IgPSB2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSk7XG4mIzQzO1x0VEVTVF9BU1NFUlQobWRjciA9PSBleHBlY3RlZF9tZGNyLFxuJiM0MztcdFx0ICAgIFwmIzM0O01EQ1JfRUwyIGNoYW5nZWQgYWZ0ZXIgUE1VX1YzX0lOSVQgKGV4cGVjdGVkIDB4JWx4LCBnb3QgMHglbHgpXCYjMzQ7LFxuJiM0MztcdFx0ICAgIGV4cGVjdGVkX21kY3IsIG1kY3IpO1xuJiM0MztcbiYjNDM7XHRleHBlY3RlZF9tZGNyID0gbWRjciBeIE1EQ1JfRUwyX0hQTUU7XG4mIzQzO1x0dmNwdV9zZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMiksXG4mIzQzO1x0XHQgICAgIGV4cGVjdGVkX21kY3IpO1xuJiM0MztcbiYjNDM7XHRtZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpO1xuJiM0MztcdFRFU1RfQVNTRVJUKG1kY3IgPT0gZXhwZWN0ZWRfbWRjcixcbiYjNDM7XHRcdCAgICBcJiMzNDtNRENSX0VMMiB3YXMgbm90IHByb3Blcmx5IHVwZGF0ZWQgYWZ0ZXIgSFBNRSB3cml0ZSAoZXhwZWN0ZWQgMHglbHgsIGdvdCAweCVseClcJiMzNDssXG4mIzQzO1x0XHQgICAgZXhwZWN0ZWRfbWRjciwgbWRjcik7XG4mIzQzO1xuJiM0MztcdGt2bV9nZXRfZGVmYXVsdF92Y3B1X3RhcmdldCh2cG11X3ZtLnZtLCBcdTAwMjZpbml0KTtcbiYjNDM7XHRpbml0LmZlYXR1cmVzWzBdIHw9ICgxIFx1MDAzY1x1MDAzYyBLVk1fQVJNX1ZDUFVfUE1VX1YzKTtcbiYjNDM7XHRhYXJjaDY0X3ZjcHVfc2V0dXAodmNwdSwgXHUwMDI2aW5pdCk7XG4mIzQzO1xuJiM0MztcdG1kY3IgPSB2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSk7XG4mIzQzO1x0VEVTVF9BU1NFUlQoRklFTERfR0VUKE1EQ1JfRUwyX0hQTU4sIG1kY3IpID09IHBtY3JfbixcbiYjNDM7XHRcdCAgICBcJiMzNDtNRENSX0VMMi5IUE1OIGlzIG5vdCByZXNldCBhZnRlciBJTklUIChleHBlY3RlZCAlbHUsIGdvdCAlbHUpXCYjMzQ7LFxuJiM0MztcdFx0ICAgIHBtY3JfbiwgRklFTERfR0VUKE1EQ1JfRUwyX0hQTU4sIG1kY3IpKTtcbiYjNDM7XG4mIzQzO1x0ZGVzdHJveV92cG11X3ZtKCk7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBDcmVhdGUgYSBndWVzdCB3aXRoIG9uZSB2Q1BVLCBhbmQgYXR0ZW1wdCB0byBzZXQgdGhlIFBNQ1JfRUwwLk4gZm9yXG4gICogdGhlIHZDUFUgdG8gQHBtY3Jfbiwgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gdGhlIGhvc3QgdmFsdWUuXG4gICogVGhlIGF0dGVtcHQgc2hvdWxkIGZhaWwgYXMgQHBtY3JfbiBpcyB0b28gYmlnIHRvIHNldCBmb3IgdGhlIHZDUFUuXG4gICovXG4tc3RhdGljIHZvaWQgcnVuX2Vycm9yX3Rlc3QodTY0IHBtY3JfbilcbiYjNDM7c3RhdGljIHZvaWQgcnVuX2Vycm9yX3Rlc3QodTY0IHBtY3JfbiwgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5KVxuIHtcbiBcdHByX2RlYnVnKFwmIzM0O0Vycm9yIHRlc3Qgd2l0aCBwbWNyX24gJWx1IChsYXJnZXIgdGhhbiB0aGUgaG9zdClcXG5cJiMzNDssIHBtY3Jfbik7XG4gXG4tXHR0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCB0cnVlKTtcbiYjNDM7XHR0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5LCB0cnVlKTtcbiBcdGRlc3Ryb3lfdnBtdV92bSgpO1xuIH1cbiBcbkBAIC02MjIsMjIgJiM0Mzs3MjQsMTgzIEBAIHN0YXRpYyBib29sIGt2bV9zdXBwb3J0c19ucl9jb3VudGVyc19hdHRyKHZvaWQpXG4gXHRyZXR1cm4gc3VwcG9ydGVkO1xuIH1cbiBcbi1pbnQgbWFpbih2b2lkKVxuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3NldF9ucl9jb3VudGVyc19hZnRlcl92Y3B1X3J1bih2b2lkKVxuIHtcbi1cdHU2NCBpLCBwbWNyX247XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICpydW5uaW5nX3ZjcHUsICpzdG9wcGVkX3ZjcHU7XG4mIzQzO1x0dW5zaWduZWQgaW50IG5yX2NvdW50ZXJzID0gMDtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCBpbml0O1xuJiM0MztcdHN0cnVjdCBrdm1fdm0gKnZtO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0dTY0IGlycSA9IDIzO1xuJiM0MztcbiYjNDM7XHR2bSA9IHZtX2NyZWF0ZSgyKTtcbiYjNDM7XHR2bV9pb2N0bCh2bSwgS1ZNX0FSTV9QUkVGRVJSRURfVEFSR0VULCBcdTAwMjZpbml0KTtcbiYjNDM7XHRpbml0LmZlYXR1cmVzWzBdIHw9IEJJVChLVk1fQVJNX1ZDUFVfUE1VX1YzKTtcbiYjNDM7XHRydW5uaW5nX3ZjcHUgPSBhYXJjaDY0X3ZjcHVfYWRkKHZtLCAwLCBcdTAwMjZpbml0LCBndWVzdF9jb2RlX2RvbmUpO1xuJiM0MztcdHN0b3BwZWRfdmNwdSA9IGFhcmNoNjRfdmNwdV9hZGQodm0sIDEsIFx1MDAyNmluaXQsIGd1ZXN0X2NvZGVfZG9uZSk7XG4mIzQzO1x0a3ZtX2FyY2hfdm1fZmluYWxpemVfdmNwdXModm0pO1xuJiM0MztcbiYjNDM7XHR2Y3B1X2RldmljZV9hdHRyX3NldChydW5uaW5nX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgXHUwMDI2aXJxKTtcbiYjNDM7XHR2Y3B1X2RldmljZV9hdHRyX3NldChydW5uaW5nX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQsIE5VTEwpO1xuJiM0MztcdHJ1bl92Y3B1KHJ1bm5pbmdfdmNwdSk7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQoc3RvcHBlZF92Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4mIzQzO1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9OUl9DT1VOVEVSUyxcbiYjNDM7XHRcdFx0XHQgICAgIFx1MDAyNm5yX2NvdW50ZXJzKTtcbiYjNDM7XHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVCVVNZLFxuJiM0MztcdFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTtcbiYjNDM7XG4mIzQzO1x0a3ZtX3ZtX2ZyZWUodm0pO1xuJiM0Mzt9XG4gXG4tXHRURVNUX1JFUVVJUkUoa3ZtX2hhc19jYXAoS1ZNX0NBUF9BUk1fUE1VX1YzKSk7XG4tXHRURVNUX1JFUVVJUkUoa3ZtX3N1cHBvcnRzX3ZnaWNfdjMoKSk7XG4tXHRURVNUX1JFUVVJUkUoa3ZtX3N1cHBvcnRzX25yX2NvdW50ZXJzX2F0dHIoKSk7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfY29uZmlnKHU2NCBwbWNyX24sIGJvb2wgZml4ZWRfY291bnRlcnNfb25seSlcbiYjNDM7e1xuJiM0MztcdHU2NCBpO1xuIFxuLVx0cG1jcl9uID0gZ2V0X3BtY3Jfbl9saW1pdCgpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2M9IHBtY3JfbjsgaSYjNDM7JiM0MzspIHtcbi1cdFx0cnVuX2FjY2Vzc190ZXN0KGkpO1xuLVx0XHRydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QoaSk7XG4mIzQzO1x0XHRydW5fYWNjZXNzX3Rlc3QoaSwgZml4ZWRfY291bnRlcnNfb25seSk7XG4mIzQzO1x0XHRydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QoaSwgZml4ZWRfY291bnRlcnNfb25seSk7XG4mIzQzO1x0XHRydW5fbWRjcl9lbDJfdmFsaWRpdHlfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcbiBcdH1cbiBcbiBcdGZvciAoaSA9IHBtY3JfbiAmIzQzOyAxOyBpIFx1MDAzYyBBUk1WOF9QTVVfTUFYX0NPVU5URVJTOyBpJiM0MzsmIzQzOylcbi1cdFx0cnVuX2Vycm9yX3Rlc3QoaSk7XG4mIzQzO1x0XHRydW5fZXJyb3JfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9maXhlZF9jb3VudGVyc19vbmx5X3N0cmljdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4mIzQzO1x0c3RydWN0IGt2bV92bSAqdm07XG4mIzQzO1x0dTY0IGlycSA9IDIzO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICgha3ZtX2hhc19jYXAoS1ZNX0NBUF9BUk1fUE1VX1YzX1NUUklDVCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHZtID0gdm1fY3JlYXRlKDEpO1xuJiM0MztcdGt2bV9nZXRfZGVmYXVsdF92Y3B1X3RhcmdldCh2bSwgXHUwMDI2aW5pdCk7XG4mIzQzO1x0aW5pdC5mZWF0dXJlc1swXSB8PSBCSVQoS1ZNX0FSTV9WQ1BVX1BNVV9WMykgfFxuJiM0MztcdFx0XHQgICAgQklUKEtWTV9BUk1fVkNQVV9QTVVfVjNfU1RSSUNUKTtcbiYjNDM7XHR2Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMCwgXHUwMDI2aW5pdCwgZ3Vlc3RfY29kZV9kb25lKTtcbiYjNDM7XHRrdm1fYXJjaF92bV9maW5hbGl6ZV92Y3B1cyh2bSk7XG4mIzQzO1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuJiM0MztcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLCBcdTAwMjZpcnEpO1xuJiM0MztcbiYjNDM7XHQvKiBTVFJJQ1Qgc3RpbGwgcmVxdWlyZXMgYSBQTVUgc2VsZWN0aW9uIGJlZm9yZSBpbml0aWFsaXphdGlvbi4gKi9cbiYjNDM7XHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVCwgTlVMTCk7XG4mIzQzO1x0VEVTVF9BU1NFUlQocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFTlhJTyxcbiYjNDM7XHRcdCAgICBLVk1fSU9DVExfRVJST1IoS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7XG4mIzQzO1xuJiM0MztcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuJiM0MztcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRrdm1fdm1fZnJlZSh2bSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfZml4ZWRfY291bnRlcnNfb25seSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGt2bV9wbXVfZXZlbnRfZmlsdGVyIGZpbHRlciA9IHsgLm5ldmVudHMgPSAwIH07XG4mIzQzO1x0c3RydWN0IGt2bV92bSAqdm07XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICpydW5uaW5nX3ZjcHU7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICpzdG9wcGVkX3ZjcHU7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdHU2NCBpcnEgPSAyMztcbiYjNDM7XG4mIzQzO1x0Y3JlYXRlX3ZwbXVfdm0oZ3Vlc3RfY29kZSk7XG4mIzQzO1x0cmV0ID0gX192Y3B1X2hhc19kZXZpY2VfYXR0cih2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0VEVTVF9BU1NFUlQocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFTlhJTyxcbiYjNDM7XHRcdFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fSEFTX0RFVklDRV9BVFRSLCByZXQpKTtcbiYjNDM7XHRcdGRlc3Ryb3lfdnBtdV92bSgpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQXNzZXJ0IHRoYXQgRklYRURfQ09VTlRFUlNfT05MWSBpcyB1bnNldCBhdCBpbml0aWFsaXphdGlvbi4gKi9cbiYjNDM7XHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfZ2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuJiM0MztcdFx0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcbiYjNDM7XHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVOWElPLFxuJiM0MztcdFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fR0VUX0RFVklDRV9BVFRSLCByZXQpKTtcbiYjNDM7XG4mIzQzO1x0LyogQXNzZXJ0IHRoYXQgc2V0dGluZyBGSVhFRF9DT1VOVEVSU19PTkxZIHN1Y2NlZWRzLiAqL1xuJiM0MztcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuJiM0MztcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdC8qIEFzc2VydCB0aGF0IEZJWEVEX0NPVU5URVJTX09OTFkgaXMgc2V0LiAqL1xuJiM0MztcdHZjcHVfZGV2aWNlX2F0dHJfZ2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuJiM0MztcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU2V0dGluZyBhbiBldmVudCBmaWx0ZXIgd2hlbiBGSVhFRF9DT1VOVEVSU19PTkxZIGhhcyBhbHJlYWR5IGJlZW4gc2V0XG4mIzQzO1x0ICogcmVzdWx0cyBpbiBFQlVTWS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuJiM0MztcdFx0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVIsIFx1MDAyNmZpbHRlcik7XG4mIzQzO1x0VEVTVF9BU1NFUlQocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFQlVTWSxcbiYjNDM7XHRcdCAgICBLVk1fSU9DVExfRVJST1IoS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7XG4mIzQzO1xuJiM0MztcdGRlc3Ryb3lfdnBtdV92bSgpO1xuJiM0MztcbiYjNDM7XHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgd2hlbiBhbiBldmVudCBmaWx0ZXIgaGFzXG4mIzQzO1x0ICogYWxyZWFkeSBiZWVuIHNldCByZXN1bHRzIGluIEVCVVNZLlxuJiM0MztcdCAqL1xuJiM0MztcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuJiM0MztcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSLCBcdTAwMjZmaWx0ZXIpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuJiM0MztcdFx0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcbiYjNDM7XHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVCVVNZLFxuJiM0MztcdFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTtcbiYjNDM7XG4mIzQzO1x0ZGVzdHJveV92cG11X3ZtKCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQXNzZXJ0IHRoYXQgc2V0dGluZyBGSVhFRF9DT1VOVEVSU19PTkxZIHdoZW4gYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1blxuJiM0MztcdCAqIHJlc3VsdHMgaW4gRUJVU1kuXG4mIzQzO1x0ICovXG4mIzQzO1x0dm0gPSB2bV9jcmVhdGUoMik7XG4mIzQzO1x0dm1faW9jdGwodm0sIEtWTV9BUk1fUFJFRkVSUkVEX1RBUkdFVCwgXHUwMDI2aW5pdCk7XG4mIzQzO1x0aW5pdC5mZWF0dXJlc1swXSB8PSAoMSBcdTAwM2NcdTAwM2MgS1ZNX0FSTV9WQ1BVX1BNVV9WMyk7XG4mIzQzO1x0cnVubmluZ192Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMCwgXHUwMDI2aW5pdCwgZ3Vlc3RfY29kZV9kb25lKTtcbiYjNDM7XHRzdG9wcGVkX3ZjcHUgPSBhYXJjaDY0X3ZjcHVfYWRkKHZtLCAxLCBcdTAwMjZpbml0LCBndWVzdF9jb2RlX2RvbmUpO1xuJiM0MztcdGt2bV9hcmNoX3ZtX2ZpbmFsaXplX3ZjcHVzKHZtKTtcbiYjNDM7XHR2Y3B1X2RldmljZV9hdHRyX3NldChydW5uaW5nX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgXHUwMDI2aXJxKTtcbiYjNDM7XHR2Y3B1X2RldmljZV9hdHRyX3NldChydW5uaW5nX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQsIE5VTEwpO1xuJiM0MztcdHJ1bl92Y3B1KHJ1bm5pbmdfdmNwdSk7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQoc3RvcHBlZF92Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4mIzQzO1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuJiM0MztcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUJVU1ksXG4mIzQzO1x0XHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpO1xuJiM0MztcbiYjNDM7XHRrdm1fdm1fZnJlZSh2bSk7XG4mIzQzO1xuJiM0MztcdHRlc3RfZml4ZWRfY291bnRlcnNfb25seV9zdHJpY3QoKTtcbiYjNDM7XG4mIzQzO1x0dGVzdF9jb25maWcoMCwgdHJ1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRURVNUX1JFUVVJUkUoa3ZtX2hhc19jYXAoS1ZNX0NBUF9BUk1fUE1VX1YzKSk7XG4mIzQzO1x0VEVTVF9SRVFVSVJFKGt2bV9zdXBwb3J0c192Z2ljX3YzKCkpO1xuJiM0MztcdFRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfbnJfY291bnRlcnNfYXR0cigpKTtcbiYjNDM7XG4mIzQzO1x0dGVzdF9zZXRfbnJfY291bnRlcnNfYWZ0ZXJfdmNwdV9ydW4oKTtcbiYjNDM7XHR0ZXN0X2NvbmZpZyhnZXRfcG1jcl9uX2xpbWl0KCksIGZhbHNlKTtcbiYjNDM7XHR0ZXN0X2ZpeGVkX2NvdW50ZXJzX29ubHkoKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMjo1NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O0FsbCBtb2RpZmllZCBrZXJuZWwgY29kZSBpcyBleGNsdXNpdmUgdG8gdGhlIGFybTY0IGFyY2hpdGVjdHVyZSAoYXJjaC9hcm02NCBhbmQgaW5jbHVkZS9rdm0vYXJtX3BtdS5oKSwgd2l0aCB0aGUgcmVtYWluaW5nIGNoYW5nZXMgbG9jYXRlZCBpbiBEb2N1bWVudGF0aW9uLyBhbmQgdXNlci1zcGFjZSB0b29scy9zZWxmdGVzdHMgKHRvb2xzLykuIE5vbmUgb2YgdGhlIG1vZGlmaWVkIGNvZGUgaXMgY29tcGlsZWQgb3IgcmVhY2hhYmxlIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzM0M2MwYmZmN2Q1YzVlYTdhZjllMWYwZmI2NTgxOTFhODBmYmYxOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDE0IDEyOjU0OjM1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0CmluZGV4IDQ5ODhjMzJkZjRiZjguLjQyMDY1MTM4NjAzYjcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QKQEAgLTM1MjEsOSAmIzQzOzM1MjEsMTMgQEAgUG9zc2libGUgZmVhdHVyZXM6CiAKIAkgICAgKiBVc2Vyc3BhY2UgbXVzdCBleHBsaWNpdGx5IHNlbGVjdCBhIFBNVSBpbXBsZW1lbnRhdGlvbiBiZWZvcmUKIAkgICAgICBpbml0aWFsaXppbmcgdGhlIFBNVSBvciBjb25maWd1cmluZyBhIFBNVSBldmVudCBmaWx0ZXIKJiM0MzsJICAgICAgKEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSBhbHNvIHNhdGlzZmllcyB0aGUKJiM0MzsJICAgICAgaW5pdGlhbGl6YXRpb24gcmVxdWlyZW1lbnQ7IGV2ZW50IGZpbHRlcmluZyByZW1haW5zIHVuYXZhaWxhYmxlCiYjNDM7CSAgICAgIGluIHRoYXQgbW9kZSkKIAotCSAgICAqIElmIHRoZSBQTVUgaW1wbGVtZW50cyBGRUFUX1BNVXYzcDQsIFBNTUlSX0VMMS5TTE9UUyBwcm92aWRlcyB0aGUKLQkgICAgICBoYXJkd2FyZSB2YWx1ZSBvZiB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbgomIzQzOwkgICAgKiBJZiBhIGhhcmR3YXJlIFBNVSBpcyBzZWxlY3RlZCBhbmQgaW1wbGVtZW50cyBGRUFUX1BNVXYzcDQsCiYjNDM7CSAgICAgIFBNTUlSX0VMMS5TTE9UUyBwcm92aWRlcyBpdHMgaGFyZHdhcmUgdmFsdWUuIEluIGZpeGVkLWNvdW50ZXJzLW9ubHkKJiM0MzsJICAgICAgbW9kZSwgUE1NSVJfRUwxIHJlYWRzIGFzIHplcm8KIAogCSAgICAqIFdyaXRlcyB0byBQTUNSX0VMMC5OIHZpYSBLVk1fU0VUX09ORV9SRUcgYXJlIGlnbm9yZWQKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0CmluZGV4IGRlYjVjNTFiYzAwYzguLjRlYzMyOTFmMGJhNzQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vZGV2aWNlcy92Y3B1LnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3QKQEAgLTUzLDkgJiM0Mzs1Myw5IEBAIFJldHVybnM6CiAJID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCSAtRUVYSVNUICBJbnRlcnJ1cHQgbnVtYmVyIGFscmVhZHkgdXNlZAogCSAtRU5PREVWICBQTVV2MyBub3Qgc3VwcG9ydGVkIG9yIEdJQyBub3QgaW5pdGlhbGl6ZWQKLQkgLUVOWElPICAgUE1VdjMgbm90IHN1cHBvcnRlZCwgbWlzc2luZyBWQ1BVIGZlYXR1cmUsIG1pc3NpbmcKLSAgICAgICAgICAgICAgICAgIGhhcmR3YXJlIFBNVSwgb3IgaW50ZXJydXB0IG51bWJlciBub3Qgc2V0IChub24tR0lDdjUKLSAgICAgICAgICAgICAgICAgIGd1ZXN0cywgb25seSkKJiM0MzsJIC1FTlhJTyAgIFBNVXYzIG5vdCBzdXBwb3J0ZWQsIG1pc3NpbmcgVkNQVSBmZWF0dXJlLAomIzQzOwkJICBuZWl0aGVyIGhhcmR3YXJlIFBNVSBub3IgRklYRURfQ09VTlRFUlNfT05MWSBzZWxlY3RlZCwKJiM0MzsJCSAgb3IgaW50ZXJydXB0IG51bWJlciBub3Qgc2V0IChub24tR0lDdjUgZ3Vlc3RzIG9ubHkpCiAJIC1FQlVTWSAgIFBNVXYzIGFscmVhZHkgaW5pdGlhbGl6ZWQKIAkgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTY0LDcgJiM0Mzs2NCw4IEBAIHZpcnR1YWwgR0lDIGltcGxlbWVudGF0aW9uLCB0aGlzIG11c3QgYmUgZG9uZSBhZnRlciBpbml0aWFsaXppbmcgdGhlIGluLWtlcm5lbAogaXJxY2hpcC4KIAogV2hlbiB0aGUgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TVFJJQ1QgdkNQVSBmZWF0dXJlIGlzIGVuYWJsZWQgdGhpcyBtdXN0IGJlIGRvbmUKLWFmdGVyIHNlbGVjdGluZyBhIGhhcmR3YXJlIFBNVS4KJiM0MzthZnRlciBzZWxlY3RpbmcgYSBoYXJkd2FyZSBQTVUgb3IgZW5hYmxpbmcKJiM0MztLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkuCiAKIDEuMyBBVFRSSUJVVEU6IEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNzgsNyAmIzQzOzc5LDggQEAgYWZ0ZXIgc2VsZWN0aW5nIGEgaGFyZHdhcmUgUE1VLgogCSAtRU5PREVWICBQTVV2MyBub3Qgc3VwcG9ydGVkIG9yIEdJQyBub3QgaW5pdGlhbGl6ZWQKIAkgLUVOWElPICAgUE1VdjMgbm90IHByb3Blcmx5IGNvbmZpZ3VyZWQgb3IgaW4ta2VybmVsIGlycWNoaXAgbm90CiAJIAkgIGNvbmZpZ3VyZWQgYXMgcmVxdWlyZWQgcHJpb3IgdG8gY2FsbGluZyB0aGlzIGF0dHJpYnV0ZQotCSAtRUJVU1kgICBQTVV2MyBhbHJlYWR5IGluaXRpYWxpemVkIG9yIGEgVkNQVSBoYXMgYWxyZWFkeSBydW4KJiM0MzsJIC1FQlVTWSAgIFBNVXYzIGFscmVhZHkgaW5pdGlhbGl6ZWQsIGEgVkNQVSBoYXMgYWxyZWFkeSBydW4gb3IKJiM0MzsJCSAgRklYRURfQ09VTlRFUlNfT05MWSBoYXMgYWxyZWFkeSBiZWVuIHNldAogCSAtRUlOVkFMICBJbnZhbGlkIGZpbHRlciByYW5nZQogCSA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtMTIzLDE0ICYjNDM7MTI1LDE0IEBAIGFmdGVyIHNlbGVjdGluZyBhIGhhcmR3YXJlIFBNVS4KIAogOlJldHVybnM6CiAKLQkgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwkgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAkgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCwgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1biBvcgotICAgICAgICAgICAgICAgICAgYW4gZXZlbnQgZmlsdGVyIGhhcyBhbHJlYWR5IGJlZW4gc2V0CiYjNDM7ICAgICAgICAgICAgICAgICAgYW4gZXZlbnQgZmlsdGVyIG9yIEZJWEVEX0NPVU5URVJTX09OTFkgaGFzIGFscmVhZHkgYmVlbiBzZXQKIAkgLUVGQVVMVCAgRXJyb3IgYWNjZXNzaW5nIHRoZSBQTVUgaWRlbnRpZmllcgogCSAtRU5YSU8gICBQTVUgbm90IGZvdW5kCiAJIC1FTk9ERVYgIFBNVXYzIG5vdCBzdXBwb3J0ZWQgb3IgR0lDIG5vdCBpbml0aWFsaXplZAogCSAtRU5PTUVNICBDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5Ci0JID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsJID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIFJlcXVlc3QgdGhhdCB0aGUgVkNQVSB1c2VzIHRoZSBzcGVjaWZpZWQgaGFyZHdhcmUgUE1VIHdoZW4gY3JlYXRpbmcgZ3Vlc3QgZXZlbnRzCiBmb3IgdGhlIHB1cnBvc2Ugb2YgUE1VIGVtdWxhdGlvbi4gVGhlIFBNVSBpZGVudGlmaWVyIGNhbiBiZSByZWFkIGZyb20gdGhlICYjMzQ7dHlwZSYjMzQ7CkBAIC0xNzIsNiAmIzQzOzE3NCwzMCBAQCBleHBsaWNpdGx5IHNlbGVjdGVkLCBvciB0aGUgbnVtYmVyIG9mIGNvdW50ZXJzIGlzIG91dCBvZiByYW5nZSBmb3IgdGhlCiBzZWxlY3RlZCBQTVUuIFNlbGVjdGluZyBhIG5ldyBQTVUgY2FuY2VscyB0aGUgZWZmZWN0IG9mIHNldHRpbmcgdGhpcwogYXR0cmlidXRlLgogCiYjNDM7MS42IEFUVFJJQlVURTogS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZCiYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7CiYjNDM7OlBhcmFtZXRlcnM6IG5vIGFkZGl0aW9uYWwgcGFyYW1ldGVyIGluIGt2bV9kZXZpY2VfYXR0ci5hZGRyCiYjNDM7CiYjNDM7OlJldHVybnM6CiYjNDM7CiYjNDM7CSA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwkgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCwgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1biwKJiM0MzsJCSAgYW4gZXZlbnQgZmlsdGVyIGhhcyBhbHJlYWR5IGJlZW4gc2V0IG9yCiYjNDM7CQkgIGEgaGFyZHdhcmUgUE1VIGhhcyBhbHJlYWR5IGJlZW4gc3BlY2lmaWVkCiYjNDM7CSAtRU5YSU8gICBBdHRlbXB0ZWQgdG8gZ2V0IGJlZm9yZSBzZXR0aW5nCiYjNDM7CSAtRU5PREVWICBBdHRlbXB0ZWQgdG8gc2V0IHdoaWxlIFBNVXYzIG5vdCBzdXBwb3J0ZWQKJiM0MzsJID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7CiYjNDM7SWYgc2V0LCBLVk0gZW11bGF0ZXMgUE1VdjMgd2l0aG91dCBwcm9ncmFtbWFibGUgZXZlbnQgY291bnRlcnMuCiYjNDM7CiYjNDM7V2l0aCBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NUUklDVCwgZW5hYmxpbmcgdGhpcyBhdHRyaWJ1dGUgc2F0aXNmaWVzIHRoZQomIzQzO1BNVSBzZWxlY3Rpb24gcmVxdWlyZW1lbnQgZm9yIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVC4KJiM0MzsKJiM0MztXaGVuIHRoaXMgYXR0cmlidXRlIGlzIGVuYWJsZWQsIHRoZSB2Q1BVIGNhbiBydW4gb24gYW55IHBoeXNpY2FsIENQVQomIzQzO3RoYXQgaGFzIGEgUE1VLCByZWdhcmRsZXNzIG9mIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uLiBUaGlzCiYjNDM7YXR0cmlidXRlIGlzIFZNLXNjb3BlZC4KJiM0MzsKIDIuIEdST1VQOiBLVk1fQVJNX1ZDUFVfVElNRVJfQ1RSTAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCAyN2ZlMGNkNWIyZDdhLi4xMGUzZmY0MTA3OWU4IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC0zNjcsNiAmIzQzOzM2NywxMCBAQCBzdHJ1Y3Qga3ZtX2FyY2ggewogI2RlZmluZSBLVk1fQVJDSF9GTEFHX1dSSVRBQkxFX0lNUF9JRF9SRUdTCQkxMAogCS8qIFVuaGFuZGxlZCBTRUFzIGFyZSB0YWtlbiB0byB1c2Vyc3BhY2UgKi8KICNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19FWElUX1NFQQkJCQkxMQomIzQzOwkvKiBQTVV2MyBpcyBlbXVsYXRlZCB3aXRoIGFuIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGhhcmR3YXJlIFBNVSAqLwomIzQzOyNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRVhQTElDSVQJCQkxMgomIzQzOwkvKiBQTVV2MyBpcyBlbXVsYXRlZCB3aXRob3V0IHByb2dyYW1tYWJsZSBldmVudCBjb3VudGVycyAqLwomIzQzOyNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWQkxMwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiBWTS13aWRlIHZDUFUgZmVhdHVyZSBzZXQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaAppbmRleCAwMTllNWUzZDg5MmU2Li4zYmQ3ZjIwMTI1MmExIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oCkBAIC00MzgsNiAmIzQzOzQzOCw3IEBAIGVudW0gewogI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSCQkyCiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VCQkzCiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlMJNAomIzQzOyNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkJNQogI2RlZmluZSBLVk1fQVJNX1ZDUFVfVElNRVJfQ1RSTAkJMQogI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9USU1FUl9JUlFfVlRJTUVSCQkwCiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1RJTUVSX0lSUV9QVElNRVIJCTEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2NwdV9lcnJhdGEuYyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdV9lcnJhdGEuYwppbmRleCA3OGU0ZTEwNWY2YWI1Li45YjJkOWQwZjE3Mzg4IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVfZXJyYXRhLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1X2VycmF0YS5jCkBAIC0xMDEyLDcgJiM0MzsxMDEyLDcgQEAgY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgYXJtNjRfZXJyYXRhW10gPSB7CiAJewogCQkuZGVzYyA9ICYjMzQ7QXBwbGUgSU1QREVGIFBNVXYzIFRyYXBzJiMzNDssCiAJCS5jYXBhYmlsaXR5ID0gQVJNNjRfV09SS0FST1VORF9QTVVWM19JTVBERUZfVFJBUFMsCi0JCS50eXBlID0gQVJNNjRfQ1BVQ0FQX0xPQ0FMX0NQVV9FUlJBVFVNLAomIzQzOwkJLnR5cGUgPSBBUk02NF9DUFVDQVBfRUFSTFlfTE9DQUxfQ1BVX0ZFQVRVUkUsCiAJCS5tYXRjaGVzID0gaGFzX2ltcGRlZl9wbXV2MywKIAkJLmNwdV9lbmFibGUgPSBjcHVfZW5hYmxlX2ltcGRlZl9wbXV2M190cmFwcywKIAl9LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vYXJtLmMgYi9hcmNoL2FybTY0L2t2bS9hcm0uYwppbmRleCBjY2FlODJjMTI0MmJjLi5kZmViZmViOTU2MTk4IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9hcm0uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9hcm0uYwpAQCAtNjUyLDYgJiM0Mzs2NTIsNyBAQCBzdGF0aWMgYm9vbCBrdm1fdmNwdV9zaG91bGRfY2xlYXJfdHdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSkKIHsKIAlzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11OwomIzQzOwlpbnQgbGFzdF9jcHUgPSB2Y3B1LSZndDtjcHU7CiAJaW50ICpsYXN0X3JhbjsKIAogCWlmIChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSkKQEAgLTcwMSw2ICYjNDM7NzAyLDcgQEAgdm9pZCBrdm1fYXJjaF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQogCWlmIChoYXNfdmhlKCkpCiAJCWt2bV92Y3B1X2xvYWRfdmhlKHZjcHUpOwogCWt2bV9hcmNoX3ZjcHVfbG9hZF9mcCh2Y3B1KTsKJiM0MzsJa3ZtX3ZjcHVfbG9hZF9wbXUodmNwdSwgbGFzdF9jcHUpOwogCWt2bV92Y3B1X3BtdV9yZXN0b3JlX2d1ZXN0KHZjcHUpOwogCWlmIChrdm1fYXJtX2lzX3B2dGltZV9lbmFibGVkKCZhbXA7dmNwdS0mZ3Q7YXJjaCkpCiAJCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUNPUkRfU1RFQUwsIHZjcHUpOwpAQCAtNzU0LDcgJiM0Mzs3NTYsNiBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlrdm1fYXJtX3ZtaWRfY2xlYXJfYWN0aXZlKCk7CiAKIAl2Y3B1X2NsZWFyX29uX3Vuc3VwcG9ydGVkX2NwdSh2Y3B1KTsKLQl2Y3B1LSZndDtjcHUgPSAtMTsKIH0KIAogc3RhdGljIHZvaWQgX19rdm1fYXJtX3ZjcHVfcG93ZXJfb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTE2NzAsMjkgJiM0MzsxNjcxLDI2IEBAIHN0YXRpYyBpbnQgX19rdm1fdmNwdV9zZXRfdGFyZ2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIHsKIAl1bnNpZ25lZCBsb25nIGZlYXR1cmVzID0gaW5pdC0mZ3Q7ZmVhdHVyZXNbMF07CiAJc3RydWN0IGt2bSAqa3ZtID0gdmNwdS0mZ3Q7a3ZtOwotCWludCByZXQgPSAtRUlOVkFMOwomIzQzOwlpbnQgcmV0OwogCi0JbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwogCiAJaWYgKHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfVkNQVV9GRUFUVVJFU19DT05GSUdVUkVELCAmYW1wO2t2bS0mZ3Q7YXJjaC5mbGFncykgJmFtcDsmYW1wOwogCSAgICBrdm1fdmNwdV9pbml0X2NoYW5nZWQodmNwdSwgaW5pdCkpCi0JCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwogCiAJYml0bWFwX2NvcHkoa3ZtLSZndDthcmNoLnZjcHVfZmVhdHVyZXMsICZhbXA7ZmVhdHVyZXMsIEtWTV9WQ1BVX01BWF9GRUFUVVJFUyk7CiAKIAlyZXQgPSBrdm1fc2V0dXBfdmNwdSh2Y3B1KTsKIAlpZiAocmV0KQotCQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CQlyZXR1cm4gcmV0OwogCiAJLyogTm93IHdlIGtub3cgd2hhdCBpdCBpcywgd2UgY2FuIHJlc2V0IGl0LiAqLwogCWt2bV9yZXNldF92Y3B1KHZjcHUpOwogCiAJc2V0X2JpdChLVk1fQVJDSF9GTEFHX1ZDUFVfRkVBVFVSRVNfQ09ORklHVVJFRCwgJmFtcDtrdm0tJmd0O2FyY2guZmxhZ3MpOwogCXZjcHVfc2V0X2ZsYWcodmNwdSwgVkNQVV9JTklUSUFMSVpFRCk7Ci0JcmV0ID0gMDsKLW91dF91bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKLQlyZXR1cm4gcmV0OwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBrdm1fdmNwdV9zZXRfdGFyZ2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKQEAgLTE3MDgsNiAmIzQzOzE3MDYsOCBAQCBzdGF0aWMgaW50IGt2bV92Y3B1X3NldF90YXJnZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKJiM0MzsKIAlpZiAoIWt2bV92Y3B1X2luaXRpYWxpemVkKHZjcHUpKQogCQlyZXR1cm4gX19rdm1fdmNwdV9zZXRfdGFyZ2V0KHZjcHUsIGluaXQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jIGIvYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYwppbmRleCA1YjFhZjdlMjE3NmZhLi5jNjgzMzFjZGZhZjkzIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMKQEAgLTcsOSAmIzQzOzcsOSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2NwdS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2t2bS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2t2bV9ob3N0LmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvbGlzdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BlcmZfZXZlbnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wZXJmL2FybV9wbXUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcmN1bGlzdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3VhY2Nlc3MuaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX2VtdWxhdGUuaCZndDsKICNpbmNsdWRlICZsdDtrdm0vYXJtX3BtdS5oJmd0OwpAQCAtMTcsNiAmIzQzOzE3LDEwIEBACiAKICNkZWZpbmUgUEVSRl9BVFRSX0NGRzFfQ09VTlRFUl82NEJJVAlCSVQoMCkKIAomIzQzOy8qCiYjNDM7ICogYXJtX3BtdXMgaXMgYXBwZW5kLW9ubHkuIGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2MygpIGZlZWRzIHBlcnNpc3RlbnQKJiM0MzsgKiBWTSBzdGF0ZSwgc28gYSB0cnVlIHJlc3VsdCBtdXN0IHJlbWFpbiB2YWxpZCBhZnRlciB0aGUgY2hlY2suCiYjNDM7ICovCiBzdGF0aWMgTElTVF9IRUFEKGFybV9wbXVzKTsKIHN0YXRpYyBERUZJTkVfTVVURVgoYXJtX3BtdXNfbG9jayk7CiAKQEAgLTI2LDcgJiM0MzszMCw2IEBAIHN0YXRpYyBib29sIGt2bV9wbXVfY291bnRlcl9pc19lbmFibGVkKHN0cnVjdCBrdm1fcG1jICpwbWMpOwogCiBib29sIGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2Myh2b2lkKQogewotCWd1YXJkKG11dGV4KSgmYW1wO2FybV9wbXVzX2xvY2spOwogCXJldHVybiAhbGlzdF9lbXB0eSgmYW1wO2FybV9wbXVzKTsKIH0KIApAQCAtODAsNiAmIzQzOzgzLDExIEBAIHU2NCBrdm1fcG11X2V2dHlwZXJfbWFzayhzdHJ1Y3Qga3ZtICprdm0pCiAJcmV0dXJuIG1hc2s7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoc3RydWN0IGt2bSAqa3ZtKQomIzQzO3sKJiM0MzsJcmV0dXJuIHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksICZhbXA7a3ZtLSZndDthcmNoLmZsYWdzKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGt2bV9wbWNfaXNfNjRiaXQgLSBkZXRlcm1pbmUgaWYgY291bnRlciBpcyA2NGJpdAogICogQHBtYzogY291bnRlciBjb250ZXh0CkBAIC0zMTcsMTIgJiM0MzszMjUsMTIgQEAgdTY0IGt2bV9wbXVfYWNjZXNzaWJsZV9jb3VudGVyX21hc2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiB1NjQga3ZtX3BtdV9pbXBsZW1lbnRlZF9jb3VudGVyX21hc2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXU2NCB2YWwgPSBGSUVMRF9HRVQoQVJNVjhfUE1VX1BNQ1JfTiwga3ZtX3ZjcHVfcmVhZF9wbWNyKHZjcHUpKTsKJiM0MzsJdTY0IG4gPSB2Y3B1LSZndDtrdm0tJmd0O2FyY2gubnJfcG11X2NvdW50ZXJzOwogCi0JaWYgKHZhbCA9PSAwKQomIzQzOwlpZiAobiA9PSAwKQogCQlyZXR1cm4gQklUKEFSTVY4X1BNVV9DWUNMRV9JRFgpOwogCWVsc2UKLQkJcmV0dXJuIEdFTk1BU0sodmFsIC0gMSwgMCkgfCBCSVQoQVJNVjhfUE1VX0NZQ0xFX0lEWCk7CiYjNDM7CQlyZXR1cm4gR0VOTUFTSyhuIC0gMSwgMCkgfCBCSVQoQVJNVjhfUE1VX0NZQ0xFX0lEWCk7CiB9CiAKIHN0YXRpYyB2b2lkIGt2bV9wbWNfZW5hYmxlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYykKQEAgLTU3MSw2ICYjNDM7NTc5LDIzIEBAIHZvaWQga3ZtX3BtdV9zb2Z0d2FyZV9pbmNyZW1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKQogCWt2bV9wbXVfY291bnRlcl9pbmNyZW1lbnQodmNwdSwgdmFsLCBBUk1WOF9QTVVWM19QRVJGQ1RSX1NXX0lOQ1IpOwogfQogCiYjNDM7dm9pZCBrdm1fcG11X3JlcXVlc3RfcmVjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJdmNwdS0mZ3Q7YXJjaC5wbXUuZXZlbnRzX25lZWRfcmVjcmVhdGUgPSB0cnVlOwomIzQzOwlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQga3ZtX3BtdV9hcHBseV9wbWNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9sZCwgdTY0IHZhbCwgYm9vbCBmb3JjZV9yZWxvYWQpCiYjNDM7ewomIzQzOwl1NjQgY2hhbmdlZCA9IG9sZCBeIHZhbDsKJiM0MzsKJiM0MzsJLyogUmVsb2FkIHRoZSBQTVUgaWYgdGhlIHdyaXRlIGFmZmVjdHMgdGhlIGJhY2tpbmcgcGVyZiBldmVudHMuICovCiYjNDM7CWlmIChjaGFuZ2VkICZhbXA7IChBUk1WOF9QTVVfUE1DUl9MQyB8IEFSTVY4X1BNVV9QTUNSX0xQKSkKJiM0MzsJCWt2bV9wbXVfcmVxdWVzdF9yZWNyZWF0ZSh2Y3B1KTsKJiM0MzsJZWxzZSBpZiAoZm9yY2VfcmVsb2FkIHx8IChjaGFuZ2VkICZhbXA7IEFSTVY4X1BNVV9QTUNSX0UpKQomIzQzOwkJa3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFTE9BRF9QTVUsIHZjcHUpOwomIzQzO30KJiM0MzsKIC8qKgogICoga3ZtX3BtdV9oYW5kbGVfcG1jciAtIGhhbmRsZSBQTUNSIHJlZ2lzdGVyCiAgKiBAdmNwdTogVGhlIHZjcHUgcG9pbnRlcgpAQCAtNTc4LDE5ICYjNDM7NjAzLDE4IEBAIHZvaWQga3ZtX3BtdV9zb2Z0d2FyZV9pbmNyZW1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKQogICovCiB2b2lkIGt2bV9wbXVfaGFuZGxlX3BtY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKQogewomIzQzOwl1NjQgb2xkID0gX192Y3B1X3N5c19yZWcodmNwdSwgUE1DUl9FTDApOwogCWludCBpOwogCiAJLyogRml4dXAgUE1DUl9FTDAgdG8gcmVjb25jaWxlIHRoZSBQTVUgdmVyc2lvbiBhbmQgdGhlIExQIGJpdCAqLwogCWlmICgha3ZtX2hhc19mZWF0KHZjcHUtJmd0O2t2bSwgSURfQUE2NERGUjBfRUwxLCBQTVVWZXIsIFYzUDUpKQogCQl2YWwgJmFtcDs9IH5BUk1WOF9QTVVfUE1DUl9MUDsKIAotCS8qIFJlcXVlc3QgYSByZWxvYWQgb2YgdGhlIFBNVSB0byBlbmFibGUvZGlzYWJsZSBhZmZlY3RlZCBjb3VudGVycyAqLwotCWlmICgoX192Y3B1X3N5c19yZWcodmNwdSwgUE1DUl9FTDApIF4gdmFsKSAmYW1wOyBBUk1WOF9QTVVfUE1DUl9FKQotCQlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7Ci0KIAkvKiBUaGUgcmVzZXQgYml0cyBkb24mIzM5O3QgaW5kaWNhdGUgYW55IHN0YXRlLCBhbmQgc2hvdWxkbiYjMzk7dCBiZSBzYXZlZC4gKi8KIAlfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgUE1DUl9FTDAsICh2YWwgJmFtcDsgfihBUk1WOF9QTVVfUE1DUl9DIHwgQVJNVjhfUE1VX1BNQ1JfUCkpKTsKIAomIzQzOwlrdm1fcG11X2FwcGx5X3BtY3IodmNwdSwgb2xkLCBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBQTUNSX0VMMCksIGZhbHNlKTsKJiM0MzsKIAlpZiAodmFsICZhbXA7IEFSTVY4X1BNVV9QTUNSX0MpCiAJCWt2bV9wbXVfc2V0X2NvdW50ZXJfdmFsdWUodmNwdSwgQVJNVjhfUE1VX0NZQ0xFX0lEWCwgMCk7CiAKQEAgLTYwNiw2ICYjNDM7NjMwLDIwIEBAIHZvaWQga3ZtX3BtdV9oYW5kbGVfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpCiAJfQogfQogCiYjNDM7dm9pZCBrdm1fcG11X2FwcGx5X21kY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgb2xkLCB1NjQgdmFsKQomIzQzO3sKJiM0MzsJdTY0IGNoYW5nZWQgPSBvbGQgXiB2YWw7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEhQTU4gZGV0ZXJtaW5lcyB3aGljaCBjb3VudGVycyBIUE1EIGFuZCBITFAgYXBwbHkgdG8uIENoYW5nZXMgdG8KJiM0MzsJICogdGhlc2UgZmllbGRzIHJlcXVpcmUgbmV3IHBlcmYgZXZlbnQgZmlsdGVycyBhbmQgc2FtcGxlIHBlcmlvZHMuCiYjNDM7CSAqLwomIzQzOwlpZiAoY2hhbmdlZCAmYW1wOyAoTURDUl9FTDJfSFBNTiB8IE1EQ1JfRUwyX0hQTUQgfCBNRENSX0VMMl9ITFApKQomIzQzOwkJa3ZtX3BtdV9yZXF1ZXN0X3JlY3JlYXRlKHZjcHUpOwomIzQzOwllbHNlIGlmIChjaGFuZ2VkICZhbXA7IE1EQ1JfRUwyX0hQTUUpCiYjNDM7CQlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wga3ZtX3BtdV9jb3VudGVyX2lzX2VuYWJsZWQoc3RydWN0IGt2bV9wbWMgKnBtYykKIHsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fcG1jX3RvX3ZjcHUocG1jKTsKQEAgLTY0OSwxMCAmIzQzOzY4Nyw4IEBAIHN0YXRpYyBib29sIGt2bV9wbWNfY291bnRzX2F0X2VsMihzdHJ1Y3Qga3ZtX3BtYyAqcG1jKQogCXJldHVybiBrdm1fcG1jX3JlYWRfZXZ0cmVnKHBtYykgJmFtcDsgQVJNVjhfUE1VX0lOQ0xVREVfRUwyOwogfQogCi1zdGF0aWMgaW50IGt2bV9tYXBfcG11X2V2ZW50KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGV2ZW50c2VsKQomIzQzO3N0YXRpYyBpbnQga3ZtX21hcF9wbXVfZXZlbnQoc3RydWN0IGFybV9wbXUgKnBtdSwgdW5zaWduZWQgaW50IGV2ZW50c2VsKQogewotCXN0cnVjdCBhcm1fcG11ICpwbXUgPSBrdm0tJmd0O2FyY2guYXJtX3BtdTsKLQogCS8qCiAJICogVGhlIENQVSBQTVUgbGlrZWx5IGlzbiYjMzk7dCBQTVV2MzsgbGV0IHRoZSBkcml2ZXIgcHJvdmlkZSBhIG1hcHBpbmcKIAkgKiBmb3IgdGhlIGd1ZXN0JiMzOTtzIFBNVXYzIGV2ZW50IElELgpAQCAtNjYzLDE0ICYjNDM7Njk5LDI3IEBAIHN0YXRpYyBpbnQga3ZtX21hcF9wbXVfZXZlbnQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgZXZlbnRzZWwpCiAJcmV0dXJuIGV2ZW50c2VsOwogfQogCi0vKioKLSAqIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQgLSBjcmVhdGUgYSBwZXJmIGV2ZW50IGZvciBhIGNvdW50ZXIKLSAqIEBwbWM6IENvdW50ZXIgY29udGV4dAotICovCi1zdGF0aWMgdm9pZCBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50KHN0cnVjdCBrdm1fcG1jICpwbWMpCiYjNDM7c3RhdGljIHN0cnVjdCBhcm1fcG11ICprdm1fcG11X3Byb2JlX2FybXBtdShpbnQgY3B1KQomIzQzO3sKJiM0MzsJc3RydWN0IGFybV9wbXVfZW50cnkgKmVudHJ5OwomIzQzOwlzdHJ1Y3QgYXJtX3BtdSAqcG11OwomIzQzOwomIzQzOwlndWFyZChyY3UpKCk7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVudHJ5LCAmYW1wO2FybV9wbXVzLCBlbnRyeSkgewomIzQzOwkJcG11ID0gZW50cnktJmd0O2FybV9wbXU7CiYjNDM7CiYjNDM7CQlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsICZhbXA7cG11LSZndDtzdXBwb3J0ZWRfY3B1cykpCiYjNDM7CQkJcmV0dXJuIHBtdTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdShzdHJ1Y3Qga3ZtX3BtYyAqcG1jLAomIzQzOwkJCQkJICAgICAgIHN0cnVjdCBhcm1fcG11ICphcm1fcG11KQogewogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9wbWNfdG9fdmNwdShwbWMpOwotCXN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0gdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmFybV9wbXU7CiAJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OwogCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgYXR0cjsKIAlpbnQgZXZlbnRzZWw7CkBAIC03MDQsNyAmIzQzOzc1Myw3IEBAIHN0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYykKIAkgKiBEb24mIzM5O3QgY3JlYXRlIGFuIGV2ZW50IGlmIHdlJiMzOTtyZSBydW5uaW5nIG9uIGhhcmR3YXJlIHRoYXQgcmVxdWlyZXMKIAkgKiBQTVV2MyBldmVudCB0cmFuc2xhdGlvbiBhbmQgd2UgY291bGRuJiMzOTt0IGZpbmQgYSB2YWxpZCBtYXBwaW5nLgogCSAqLwotCWV2ZW50c2VsID0ga3ZtX21hcF9wbXVfZXZlbnQodmNwdS0mZ3Q7a3ZtLCBldmVudHNlbCk7CiYjNDM7CWV2ZW50c2VsID0ga3ZtX21hcF9wbXVfZXZlbnQoYXJtX3BtdSwgZXZlbnRzZWwpOwogCWlmIChldmVudHNlbCAmbHQ7IDApCiAJCXJldHVybjsKIApAQCAtNzQ5LDYgJiM0Mzs3OTgsMzIgQEAgc3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKQogCXBtYy0mZ3Q7cGVyZl9ldmVudCA9IGV2ZW50OwogfQogCiYjNDM7LyoqCiYjNDM7ICoga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudCAtIGNyZWF0ZSBhIHBlcmYgZXZlbnQgZm9yIGEgY291bnRlcgomIzQzOyAqIEBwbWM6IENvdW50ZXIgY29udGV4dAomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9wbWNfdG9fdmNwdShwbWMpOwomIzQzOwlzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5hcm1fcG11OwomIzQzOwomIzQzOwlpZiAoa3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtJmd0O2t2bSkpIHsKJiM0MzsJCWRvIHsKJiM0MzsJCQlhcm1fcG11ID0ga3ZtX3BtdV9wcm9iZV9hcm1wbXUoUkVBRF9PTkNFKHZjcHUtJmd0O2NwdSkpOwomIzQzOwomIzQzOwkJCWlmICghYXJtX3BtdSkgewomIzQzOwkJCQlwcl93YXJuX29uY2UoJiMzNDtrdm06IFVuc3VwcG9ydGVkIFBNVSB2YXJpYXRpb24gZGV0ZWN0ZWQuXG4mIzM0Oyk7CiYjNDM7CQkJCWFkZF90YWludChUQUlOVF9DUFVfT1VUX09GX1NQRUMsIExPQ0tERVBfU1RJTExfT0spOwomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCWt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnRfd2l0aF9wbXUocG1jLCBhcm1fcG11KTsKJiM0MzsJCX0gd2hpbGUgKCFjcHVtYXNrX3Rlc3RfY3B1KFJFQURfT05DRSh2Y3B1LSZndDtjcHUpLCAmYW1wO2FybV9wbXUtJmd0O3N1cHBvcnRlZF9jcHVzKSk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50X3dpdGhfcG11KHBtYywgYXJtX3BtdSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiAvKioKICAqIGt2bV9wbXVfc2V0X2NvdW50ZXJfZXZlbnRfdHlwZSAtIHNldCBzZWxlY3RlZCBjb3VudGVyIHRvIG1vbml0b3Igc29tZSBldmVudAogICogQHZjcHU6IFRoZSB2Y3B1IHBvaW50ZXIKQEAgLTc4OSw0MyAmIzQzOzg2NCw3IEBAIHZvaWQga3ZtX2hvc3RfcG11X2luaXQoc3RydWN0IGFybV9wbXUgKnBtdSkKIAkJcmV0dXJuOwogCiAJZW50cnktJmd0O2FybV9wbXUgPSBwbXU7Ci0JbGlzdF9hZGRfdGFpbCgmYW1wO2VudHJ5LSZndDtlbnRyeSwgJmFtcDthcm1fcG11cyk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYXJtX3BtdSAqa3ZtX3BtdV9wcm9iZV9hcm1wbXUodm9pZCkKLXsKLQlzdHJ1Y3QgYXJtX3BtdV9lbnRyeSAqZW50cnk7Ci0Jc3RydWN0IGFybV9wbXUgKnBtdTsKLQlpbnQgY3B1OwotCi0JZ3VhcmQobXV0ZXgpKCZhbXA7YXJtX3BtdXNfbG9jayk7Ci0KLQkvKgotCSAqIEl0IGlzIHNhZmUgdG8gdXNlIGEgc3RhbGUgY3B1IHRvIGl0ZXJhdGUgdGhlIGxpc3Qgb2YgUE1VcyBzbyBsb25nIGFzCi0JICogdGhlIHNhbWUgdmFsdWUgaXMgdXNlZCBmb3IgdGhlIGVudGlyZXR5IG9mIHRoZSBsb29wLiBHaXZlbiB0aGlzLCBhbmQKLQkgKiB0aGUgZmFjdCB0aGF0IG5vIHBlcmNwdSBkYXRhIGlzIHVzZWQgZm9yIHRoZSBsb29rdXAgdGhlcmUgaXMgbm8gbmVlZAotCSAqIHRvIGRpc2FibGUgcHJlZW1wdGlvbi4KLQkgKgotCSAqIEl0IGlzIHN0aWxsIG5lY2Vzc2FyeSB0byBnZXQgYSB2YWxpZCBjcHUsIHRob3VnaCwgdG8gcHJvYmUgZm9yIHRoZQotCSAqIGRlZmF1bHQgUE1VIGluc3RhbmNlIGFzIHVzZXJzcGFjZSBpcyBub3QgcmVxdWlyZWQgdG8gc3BlY2lmeSBhIFBNVQotCSAqIHR5cGUuIEluIG9yZGVyIHRvIHVwaG9sZCB0aGUgcHJlZXhpc3RpbmcgYmVoYXZpb3IgS1ZNIHNlbGVjdHMgdGhlCi0JICogUE1VIGluc3RhbmNlIGZvciB0aGUgY29yZSBkdXJpbmcgdmNwdSBpbml0LiBBIGRlcGVuZGVudCB1c2UKLQkgKiBjYXNlIHdvdWxkIGJlIGEgdXNlciB3aXRoIGRpc2RhaW4gb2YgYWxsIHRoaW5ncyBiaWcuTElUVExFIHRoYXQKLQkgKiBhZmZpbmVzIHRoZSBWTU0gdG8gYSBwYXJ0aWN1bGFyIGNsdXN0ZXIgb2YgY29yZXMuCi0JICoKLQkgKiBJbiBhbnkgY2FzZSwgdXNlcnNwYWNlIHNob3VsZCBqdXN0IGRvIHRoZSBzYW5lIHRoaW5nIGFuZCB1c2UgdGhlIFVBUEkKLQkgKiB0byBzZWxlY3QgYSBQTVUgdHlwZSBkaXJlY3RseS4gQnV0LCBiZSB3YXJ5IG9mIHRoZSBiYWdnYWdlIGJlaW5nCi0JICogY2FycmllZCBoZXJlLgotCSAqLwotCWNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmFtcDthcm1fcG11cywgZW50cnkpIHsKLQkJcG11ID0gZW50cnktJmd0O2FybV9wbXU7Ci0KLQkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCAmYW1wO3BtdS0mZ3Q7c3VwcG9ydGVkX2NwdXMpKQotCQkJcmV0dXJuIHBtdTsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKJiM0MzsJbGlzdF9hZGRfdGFpbF9yY3UoJmFtcDtlbnRyeS0mZ3Q7ZW50cnksICZhbXA7YXJtX3BtdXMpOwogfQogCiBzdGF0aWMgdTY0IF9fY29tcHV0ZV9wbWNlaWQoc3RydWN0IGFybV9wbXUgKnBtdSwgYm9vbCBwbWNlaWQxKQpAQCAtODcxLDYgJiM0Mzs5MTAsMTMgQEAgdTY0IGt2bV9wbXVfZ2V0X3BtY2VpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcG1jZWlkMSkKIAl1NjQgdmFsLCBtYXNrID0gMDsKIAlpbnQgYmFzZSwgaSwgbnJfZXZlbnRzOwogCiYjNDM7CS8qCiYjNDM7CSAqIEhpZGUgdGhlIGhhcmR3YXJlIFBNVSYjMzk7cyBldmVudCBzZXQgdG8ga2VlcCBQTUNFSUQgc3RhYmxlIGFjcm9zcwomIzQzOwkgKiBwaHlzaWNhbCBDUFUgbWlncmF0aW9uLgomIzQzOwkgKi8KJiM0MzsJaWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LSZndDtrdm0pKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJaWYgKCFwbWNlaWQxKSB7CiAJCXZhbCA9IGNvbXB1dGVfcG1jZWlkMCh2Y3B1KTsKIAkJYmFzZSA9IDA7CkBAIC04OTgsOSAmIzQzOzk0NCwyNyBAQCB1NjQga3ZtX3BtdV9nZXRfcG1jZWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBwbWNlaWQxKQogCXJldHVybiB2YWwgJmFtcDsgbWFzazsKIH0KIAomIzQzO3ZvaWQga3ZtX3ZjcHVfbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbGFzdF9jcHUpCiYjNDM7ewomIzQzOwlpZiAoIWt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LSZndDtrdm0pIHx8IHZjcHUtJmd0O2NwdSA9PSBsYXN0X2NwdSB8fCBsYXN0X2NwdSA9PSAtMSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKGt2bV9wbXVfcHJvYmVfYXJtcG11KHZjcHUtJmd0O2NwdSkgIT0ga3ZtX3BtdV9wcm9iZV9hcm1wbXUobGFzdF9jcHUpKQomIzQzOwkJa3ZtX3BtdV9yZXF1ZXN0X3JlY3JlYXRlKHZjcHUpOwomIzQzO30KJiM0MzsKIHZvaWQga3ZtX3ZjcHVfcmVsb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiYjNDM7CXN0cnVjdCBrdm1fcG11ICpwbXUgPSAmYW1wO3ZjcHUtJmd0O2FyY2gucG11OwogCXU2NCBtYXNrID0ga3ZtX3BtdV9pbXBsZW1lbnRlZF9jb3VudGVyX21hc2sodmNwdSk7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAocG11LSZndDtldmVudHNfbmVlZF9yZWNyZWF0ZSkgewomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IEtWTV9BUk1WOF9QTVVfTUFYX0NPVU5URVJTOyBpJiM0MzsmIzQzOykKJiM0MzsJCQlrdm1fcG11X3N0b3BfY291bnRlcihrdm1fdmNwdV9pZHhfdG9fcG1jKHZjcHUsIGkpKTsKJiM0MzsKJiM0MzsJCXBtdS0mZ3Q7ZXZlbnRzX25lZWRfcmVjcmVhdGUgPSBmYWxzZTsKJiM0MzsJfQogCiAJX192Y3B1X3Jtd19zeXNfcmVnKHZjcHUsIFBNT1ZTU0VUX0VMMCwgJmFtcDs9LCBtYXNrKTsKIAlfX3ZjcHVfcm13X3N5c19yZWcodmNwdSwgUE1JTlRFTlNFVF9FTDEsICZhbXA7PSwgbWFzayk7CkBAIC05MzksOCAmIzQzOzEwMDMsOCBAQCBpbnQga3ZtX2FybV9wbXVfdjNfZW5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogc3RhdGljIGludCBrdm1fYXJtX3BtdV92M19pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQkvKiBPbmx5IHBvc3NpYmxlIHdoZW4gdXNpbmcgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TVFJJQ1QgKi8KLQlpZiAoIXZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5hcm1fcG11KQomIzQzOwkvKiBTdHJpY3QgUE1VdjMgcmVxdWlyZXMgYSBoYXJkd2FyZSBQTVUgb3IgZml4ZWQtY291bnRlcnMtb25seSBtb2RlLiAqLwomIzQzOwlpZiAoIXZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5hcm1fcG11ICZhbXA7JmFtcDsgIWt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LSZndDtrdm0pKQogCQlyZXR1cm4gLUVOWElPOwogCiAJaWYgKGlycWNoaXBfaW5fa2VybmVsKHZjcHUtJmd0O2t2bSkpIHsKQEAgLTEwMTMsNiAmIzQzOzEwNzcsOSBAQCB1OCBrdm1fYXJtX3BtdV9nZXRfbWF4X2NvdW50ZXJzKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IGt2bS0mZ3Q7YXJjaC5hcm1fcG11OwogCiYjNDM7CWlmIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwogCS8qCiAJICogVW5kZXIgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TVFJJQ1Qgbm8gUE1VIGV4aXN0cyB1bnRpbCB1c2Vyc3BhY2Ugc2V0cwogCSAqIG9uZSwgc28gdGhpcyBjYW4gYmUgcmVhY2hlZCBiZWZvcmUgYXJtX3BtdSBpcyBzZXQuIFJlcG9ydCBubwpAQCAtMTAzNSwzMCAmIzQzOzExMDIsMTIgQEAgdTgga3ZtX2FybV9wbXVfZ2V0X21heF9jb3VudGVycyhzdHJ1Y3Qga3ZtICprdm0pCiAJcmV0dXJuIGJpdG1hcF93ZWlnaHQoYXJtX3BtdS0mZ3Q7Y250cl9tYXNrLCBBUk1WOF9QTVVfTUFYX0dFTkVSQUxfQ09VTlRFUlMpOwogfQogCi1zdGF0aWMgdm9pZCBrdm1fYXJtX3NldF9ucl9jb3VudGVycyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBucikKLXsKLQlrdm0tJmd0O2FyY2gubnJfcG11X2NvdW50ZXJzID0gbnI7Ci0KLQkvKiBSZXNldCBNRENSX0VMMi5IUE1OIGJlaGluZCB0aGUgdmNwdXMmIzM5OyBiYWNrLi4uICovCi0JaWYgKHRlc3RfYml0KEtWTV9BUk1fVkNQVV9IQVNfRUwyLCBrdm0tJmd0O2FyY2gudmNwdV9mZWF0dXJlcykpIHsKLQkJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwotCQl1bnNpZ25lZCBsb25nIGk7Ci0KLQkJa3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKSB7Ci0JCQl1NjQgdmFsID0gX192Y3B1X3N5c19yZWcodmNwdSwgTURDUl9FTDIpOwotCQkJdmFsICZhbXA7PSB+TURDUl9FTDJfSFBNTjsKLQkJCXZhbCB8PSBGSUVMRF9QUkVQKE1EQ1JfRUwyX0hQTU4sIGt2bS0mZ3Q7YXJjaC5ucl9wbXVfY291bnRlcnMpOwotCQkJX192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIE1EQ1JfRUwyLCB2YWwpOwotCQl9Ci0JfQotfQotCiBzdGF0aWMgdm9pZCBrdm1fYXJtX3NldF9wbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSkKIHsKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKIAogCWt2bS0mZ3Q7YXJjaC5hcm1fcG11ID0gYXJtX3BtdTsKLQlrdm1fYXJtX3NldF9ucl9jb3VudGVycyhrdm0sIGt2bV9hcm1fcG11X2dldF9tYXhfY291bnRlcnMoa3ZtKSk7CiYjNDM7CWt2bS0mZ3Q7YXJjaC5ucl9wbXVfY291bnRlcnMgPSBrdm1fYXJtX3BtdV9nZXRfbWF4X2NvdW50ZXJzKGt2bSk7CiB9CiAKIC8qKgpAQCAtMTA3Niw3ICYjNDM7MTEyNSwyNCBAQCBzdGF0aWMgdm9pZCBrdm1fYXJtX3NldF9wbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSkKICAqLwogaW50IGt2bV9hcm1fc2V0X2RlZmF1bHRfcG11KHN0cnVjdCBrdm0gKmt2bSkKIHsKLQlzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IGt2bV9wbXVfcHJvYmVfYXJtcG11KCk7CiYjNDM7CS8qCiYjNDM7CSAqIEl0IGlzIHNhZmUgdG8gdXNlIGEgc3RhbGUgY3B1IHRvIGl0ZXJhdGUgdGhlIGxpc3Qgb2YgUE1VcyBzbyBsb25nIGFzCiYjNDM7CSAqIHRoZSBzYW1lIHZhbHVlIGlzIHVzZWQgZm9yIHRoZSBlbnRpcmV0eSBvZiB0aGUgbG9vcC4gR2l2ZW4gdGhpcywgYW5kCiYjNDM7CSAqIHRoZSBmYWN0IHRoYXQgbm8gcGVyY3B1IGRhdGEgaXMgdXNlZCBmb3IgdGhlIGxvb2t1cCB0aGVyZSBpcyBubyBuZWVkCiYjNDM7CSAqIHRvIGRpc2FibGUgcHJlZW1wdGlvbi4KJiM0MzsJICoKJiM0MzsJICogSXQgaXMgc3RpbGwgbmVjZXNzYXJ5IHRvIGdldCBhIHZhbGlkIGNwdSwgdGhvdWdoLCB0byBwcm9iZSBmb3IgdGhlCiYjNDM7CSAqIGRlZmF1bHQgUE1VIGluc3RhbmNlIGFzIHVzZXJzcGFjZSBpcyBub3QgcmVxdWlyZWQgdG8gc3BlY2lmeSBhIFBNVQomIzQzOwkgKiB0eXBlLiBJbiBvcmRlciB0byB1cGhvbGQgdGhlIHByZWV4aXN0aW5nIGJlaGF2aW9yIEtWTSBzZWxlY3RzIHRoZQomIzQzOwkgKiBQTVUgaW5zdGFuY2UgZm9yIHRoZSBjb3JlIGR1cmluZyB2Y3B1IGluaXQuIEEgZGVwZW5kZW50IHVzZQomIzQzOwkgKiBjYXNlIHdvdWxkIGJlIGEgdXNlciB3aXRoIGRpc2RhaW4gb2YgYWxsIHRoaW5ncyBiaWcuTElUVExFIHRoYXQKJiM0MzsJICogYWZmaW5lcyB0aGUgVk1NIHRvIGEgcGFydGljdWxhciBjbHVzdGVyIG9mIGNvcmVzLgomIzQzOwkgKgomIzQzOwkgKiBJbiBhbnkgY2FzZSwgdXNlcnNwYWNlIHNob3VsZCBqdXN0IGRvIHRoZSBzYW5lIHRoaW5nIGFuZCB1c2UgdGhlIFVBUEkKJiM0MzsJICogdG8gc2VsZWN0IGEgUE1VIHR5cGUgZGlyZWN0bHksIG9yIHJlcXVlc3QgZml4ZWQtY291bnRlcnMtb25seQomIzQzOwkgKiBlbXVsYXRpb24uIEJ1dCwgYmUgd2FyeSBvZiB0aGUgYmFnZ2FnZSBiZWluZyBjYXJyaWVkIGhlcmUuCiYjNDM7CSAqLwomIzQzOwlzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IGt2bV9wbXVfcHJvYmVfYXJtcG11KHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOwogCiAJaWYgKCFhcm1fcG11KQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTEwOTMsMTcgJiM0MzsxMTU5LDE5IEBAIHN0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwbXVfaWQpCiAJaW50IHJldCA9IC1FTlhJTzsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwotCW11dGV4X2xvY2soJmFtcDthcm1fcG11c19sb2NrKTsKJiM0MzsJZ3VhcmQocmN1KSgpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmFtcDthcm1fcG11cywgZW50cnkpIHsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZW50cnksICZhbXA7YXJtX3BtdXMsIGVudHJ5KSB7CiAJCWFybV9wbXUgPSBlbnRyeS0mZ3Q7YXJtX3BtdTsKIAkJaWYgKGFybV9wbXUtJmd0O3BtdS50eXBlID09IHBtdV9pZCkgewogCQkJaWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSB8fAomIzQzOwkJCSAgICBrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSB8fAogCQkJICAgIChrdm0tJmd0O2FyY2gucG11X2ZpbHRlciAmYW1wOyZhbXA7IGt2bS0mZ3Q7YXJjaC5hcm1fcG11ICE9IGFybV9wbXUpKSB7CiAJCQkJcmV0ID0gLUVCVVNZOwogCQkJCWJyZWFrOwogCQkJfQogCiYjNDM7CQkJc2V0X2JpdChLVk1fQVJDSF9GTEFHX1BNVV9WM19FWFBMSUNJVCwgJmFtcDtrdm0tJmd0O2FyY2guZmxhZ3MpOwogCQkJa3ZtX2FybV9zZXRfcG11KGt2bSwgYXJtX3BtdSk7CiAJCQljcHVtYXNrX2NvcHkoa3ZtLSZndDthcmNoLnN1cHBvcnRlZF9jcHVzLCAmYW1wO2FybV9wbXUtJmd0O3N1cHBvcnRlZF9jcHVzKTsKIApAQCAtMTEyMiwyMSAmIzQzOzExOTAsMzkgQEAgc3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBtdV9pZCkKIAkJfQogCX0KIAotCW11dGV4X3VubG9jaygmYW1wO2FybV9wbXVzX2xvY2spOwogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwomIzQzOwomIzQzOwlpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pIHx8IGt2bS0mZ3Q7YXJjaC5wbXVfZmlsdGVyIHx8CiYjNDM7CSAgICB0ZXN0X2JpdChLVk1fQVJDSF9GTEFHX1BNVV9WM19FWFBMSUNJVCwgJmFtcDtrdm0tJmd0O2FyY2guZmxhZ3MpKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKJiM0MzsJc2V0X2JpdChLVk1fQVJDSF9GTEFHX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCAmYW1wO2t2bS0mZ3Q7YXJjaC5mbGFncyk7CiYjNDM7CWt2bS0mZ3Q7YXJjaC5ucl9wbXVfY291bnRlcnMgPSAwOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9ucl9jb3VudGVycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBuKQogewogCXN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtJmd0O2t2bTsKIAomIzQzOwlpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKIAlpZiAoIWt2bS0mZ3Q7YXJjaC5hcm1fcG11KQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChuICZndDsga3ZtX2FybV9wbXVfZ2V0X21heF9jb3VudGVycyhrdm0pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWt2bV9hcm1fc2V0X25yX2NvdW50ZXJzKGt2bSwgbik7CiYjNDM7CWt2bS0mZ3Q7YXJjaC5ucl9wbXVfY291bnRlcnMgPSBuOwogCXJldHVybiAwOwogfQogCkBAIC0xMjAwLDcgJiM0MzsxMjg2LDcgQEAgaW50IGt2bV9hcm1fcG11X3YzX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cikKIAkJICAgICBmaWx0ZXIuYWN0aW9uICE9IEtWTV9QTVVfRVZFTlRfREVOWSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pKQomIzQzOwkJaWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSB8fCBrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSkKIAkJCXJldHVybiAtRUJVU1k7CiAKIAkJaWYgKCFrdm0tJmd0O2FyY2guYXJtX3BtdSkKQEAgLTEyNDgsNiAmIzQzOzEzMzQsOCBAQCBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKQogCiAJCXJldHVybiBrdm1fYXJtX3BtdV92M19zZXRfbnJfY291bnRlcnModmNwdSwgbik7CiAJfQomIzQzOwljYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWToKJiM0MzsJCXJldHVybiBrdm1fYXJtX3BtdV92M19zZXRfcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdSk7CiAJY2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQ6CiAJCXJldHVybiBrdm1fYXJtX3BtdV92M19pbml0KHZjcHUpOwogCX0KQEAgLTEyNzQsNiAmIzQzOzEzNjIsOSBAQCBpbnQga3ZtX2FybV9wbXVfdjNfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKQogCQlpcnEgPSB2Y3B1LSZndDthcmNoLnBtdS5pcnFfbnVtOwogCQlyZXR1cm4gcHV0X3VzZXIoaXJxLCB1YWRkcik7CiAJfQomIzQzOwljYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWToKJiM0MzsJCWlmIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdS0mZ3Q7a3ZtKSkKJiM0MzsJCQlyZXR1cm4gMDsKIAl9CiAKIAlyZXR1cm4gLUVOWElPOwpAQCAtMTI4Nyw2ICYjNDM7MTM3OCw3IEBAIGludCBrdm1fYXJtX3BtdV92M19oYXNfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpCiAJY2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJTFRFUjoKIAljYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfU0VUX1BNVToKIAljYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfU0VUX05SX0NPVU5URVJTOgomIzQzOwljYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWToKIAkJaWYgKGt2bV92Y3B1X2hhc19wbXUodmNwdSkpCiAJCQlyZXR1cm4gMDsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9yZXNldC5jIGIvYXJjaC9hcm02NC9rdm0vcmVzZXQuYwppbmRleCAxMGViNzI0OWFhOWU4Li5jZGNkZWE4NTA5MDljIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9yZXNldC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3Jlc2V0LmMKQEAgLTE3OCwxNyAmIzQzOzE3OCwyNCBAQCBzdGF0aWMgdm9pZCBrdm1fdmNwdV9yZXNldF9zdmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogdm9pZCBrdm1fcmVzZXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IHZjcHVfcmVzZXRfc3RhdGUgcmVzZXRfc3RhdGU7Ci0JYm9vbCBsb2FkZWQ7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqcnVubmluZzsKJiM0MzsJYm9vbCBsb2FkZWQgPSBmYWxzZTsKIAogCXNwaW5fbG9jaygmYW1wO3ZjcHUtJmd0O2FyY2gubXBfc3RhdGVfbG9jayk7CiAJcmVzZXRfc3RhdGUgPSB2Y3B1LSZndDthcmNoLnJlc2V0X3N0YXRlOwogCXZjcHUtJmd0O2FyY2gucmVzZXRfc3RhdGUucmVzZXQgPSBmYWxzZTsKIAlzcGluX3VubG9jaygmYW1wO3ZjcHUtJmd0O2FyY2gubXBfc3RhdGVfbG9jayk7CiAKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlsb2FkZWQgPSAodmNwdS0mZ3Q7Y3B1ICE9IC0xKTsKLQlpZiAobG9hZGVkKQomIzQzOwlndWFyZChwcmVlbXB0KSgpOwomIzQzOwomIzQzOwlydW5uaW5nID0ga3ZtX2dldF9ydW5uaW5nX3ZjcHUoKTsKJiM0MzsJaWYgKHJ1bm5pbmcpIHsKJiM0MzsJCWlmIChLVk1fQlVHX09OKHJ1bm5pbmcgIT0gdmNwdSwgdmNwdS0mZ3Q7a3ZtKSkKJiM0MzsJCQlyZXR1cm47CiYjNDM7CiYjNDM7CQlsb2FkZWQgPSB0cnVlOwogCQlrdm1fYXJjaF92Y3B1X3B1dCh2Y3B1KTsKJiM0MzsJfQogCiAJaWYgKCFrdm1fYXJtX3ZjcHVfc3ZlX2ZpbmFsaXplZCh2Y3B1KSkgewogCQlpZiAodmNwdV9oYXNfZmVhdHVyZSh2Y3B1LCBLVk1fQVJNX1ZDUFVfU1ZFKSkKQEAgLTIxNSw3ICYjNDM7MjIyLDYgQEAgdm9pZCBrdm1fcmVzZXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIAlpZiAobG9hZGVkKQogCQlrdm1fYXJjaF92Y3B1X2xvYWQodmNwdSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlwcmVlbXB0X2VuYWJsZSgpOwogfQogCiB1MzIga3ZtX2dldF9wYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jCmluZGV4IDQ0YWFlNTJjNDczZDcuLmE1YzEyMTQ4MmM3MTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYwpAQCAtMTMyNiw3ICYjNDM7MTMyNiw3IEBAIHN0YXRpYyBib29sIGFjY2Vzc19wbXVfZXZ0eXBlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCwKIAogc3RhdGljIGludCBzZXRfcG1yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyLCB1NjQgdmFsKQogewotCXU2NCBtYXNrID0ga3ZtX3BtdV9hY2Nlc3NpYmxlX2NvdW50ZXJfbWFzayh2Y3B1KTsKJiM0MzsJdTY0IG1hc2sgPSBrdm1fcG11X2ltcGxlbWVudGVkX2NvdW50ZXJfbWFzayh2Y3B1KTsKIAogCV9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCByLSZndDtyZWcsIHZhbCAmYW1wOyBtYXNrKTsKIAlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7CkBAIC0xMzM0LDkgJiM0MzsxMzM0LDE4IEBAIHN0YXRpYyBpbnQgc2V0X3BtcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqciwgdTY0IHZhCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHNldF9wbXVfZXZ0eXBlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiYjNDM7CQkJICAgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqciwgdTY0IHZhbCkKJiM0Mzt7CiYjNDM7CV9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCByLSZndDtyZWcsIHZhbCk7CiYjNDM7CWt2bV9wbXVfcmVxdWVzdF9yZWNyZWF0ZSh2Y3B1KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBnZXRfcG1yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyLCB1NjQgKnZhbCkKIHsKLQl1NjQgbWFzayA9IGt2bV9wbXVfYWNjZXNzaWJsZV9jb3VudGVyX21hc2sodmNwdSk7CiYjNDM7CXU2NCBtYXNrID0ga3ZtX3BtdV9pbXBsZW1lbnRlZF9jb3VudGVyX21hc2sodmNwdSk7CiAKIAkqdmFsID0gX192Y3B1X3N5c19yZWcodmNwdSwgci0mZ3Q7cmVnKSAmYW1wOyBtYXNrOwogCXJldHVybiAwOwpAQCAtMTUxNyw2ICYjNDM7MTUyNiw3IEBAIHN0YXRpYyBpbnQgc2V0X3BtY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyLAogewogCXU4IG5ld19uID0gRklFTERfR0VUKEFSTVY4X1BNVV9QTUNSX04sIHZhbCk7CiAJc3RydWN0IGt2bSAqa3ZtID0gdmNwdS0mZ3Q7a3ZtOwomIzQzOwl1NjQgb2xkID0gX192Y3B1X3N5c19yZWcodmNwdSwgci0mZ3Q7cmVnKTsKIAogCW11dGV4X2xvY2soJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwogCkBAIC0xNTQ5LDcgJiM0MzsxNTU5LDcgQEAgc3RhdGljIGludCBzZXRfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnIsCiAJCXZhbCB8PSBBUk1WOF9QTVVfUE1DUl9MQzsKIAogCV9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCByLSZndDtyZWcsIHZhbCk7Ci0Ja3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFTE9BRF9QTVUsIHZjcHUpOwomIzQzOwlrdm1fcG11X2FwcGx5X3BtY3IodmNwdSwgb2xkLCB2YWwsIHRydWUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNTgzLDcgJiM0MzsxNTkzLDcgQEAgc3RhdGljIGludCBzZXRfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnIsCiAvKiBNYWNybyB0byBleHBhbmQgdGhlIFBNRVZUWVBFUm5fRUwwIHJlZ2lzdGVyICovCiAjZGVmaW5lIFBNVV9QTUVWVFlQRVJfRUwwKG4pCQkJCQkJXAogCXsgUE1VX1NZU19SRUcoUE1FVlRZUEVSbl9FTDAobikpLAkJCQlcCi0JICAucmVzZXQgPSByZXNldF9wbWV2dHlwZXIsCQkJCQlcCiYjNDM7CSAgLnJlc2V0ID0gcmVzZXRfcG1ldnR5cGVyLCAuc2V0X3VzZXIgPSBzZXRfcG11X2V2dHlwZXIsCVwKIAkgIC5hY2Nlc3MgPSBhY2Nlc3NfcG11X2V2dHlwZXIsIC5yZWcgPSAoUE1FVlRZUEVSMF9FTDAgJiM0MzsgbiksIH0KIAogLyogTWFjcm8gdG8gZXhwYW5kIHRoZSBBTVUgY291bnRlciBhbmQgdHlwZSByZWdpc3RlcnMqLwpAQCAtMzExNCwxNyAmIzQzOzMxMjQsMjIgQEAgc3RhdGljIGJvb2wgYWNjZXNzX21kY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCX0KIAogCV9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBNRENSX0VMMiwgdmFsKTsKLQotCS8qCi0JICogUmVxdWVzdCBhIHJlbG9hZCBvZiB0aGUgUE1VIHRvIGVuYWJsZS9kaXNhYmxlIHRoZSBjb3VudGVycwotCSAqIGFmZmVjdGVkIGJ5IEhQTUUuCi0JICovCi0JaWYgKChvbGQgXiB2YWwpICZhbXA7IE1EQ1JfRUwyX0hQTUUpCi0JCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUxPQURfUE1VLCB2Y3B1KTsKJiM0MzsJa3ZtX3BtdV9hcHBseV9tZGNyKHZjcHUsIG9sZCwgdmFsKTsKIAogCXJldHVybiB0cnVlOwogfQogCiYjNDM7c3RhdGljIGludCBzZXRfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkLAomIzQzOwkJICAgIHU2NCB2YWwpCiYjNDM7ewomIzQzOwl1NjQgb2xkID0gX192Y3B1X3N5c19yZWcodmNwdSwgTURDUl9FTDIpOwomIzQzOwomIzQzOwlfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgTURDUl9FTDIsIHZhbCk7CiYjNDM7CWt2bV9wbXVfYXBwbHlfbWRjcih2Y3B1LCBvbGQsIHZhbCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIGFjY2Vzc19yYXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkgICAgICAgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLAogCQkgICAgICAgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcikKQEAgLTM4MjcsNyAmIzQzOzM4NDIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyBzeXNfcmVnX2Rlc2NzW10gPSB7CiAJICogaW4gMzJiaXQgbW9kZS4gSGVyZSB3ZSBjaG9vc2UgdG8gcmVzZXQgaXQgYXMgemVybyBmb3IgY29uc2lzdGVuY3kuCiAJICovCiAJeyBQTVVfU1lTX1JFRyhQTUNDRklMVFJfRUwwKSwgLmFjY2VzcyA9IGFjY2Vzc19wbXVfZXZ0eXBlciwKLQkgIC5yZXNldCA9IHJlc2V0X3ZhbCwgLnJlZyA9IFBNQ0NGSUxUUl9FTDAsIC52YWwgPSAwIH0sCiYjNDM7CSAgLnJlc2V0ID0gcmVzZXRfdmFsLCAucmVnID0gUE1DQ0ZJTFRSX0VMMCwgLnZhbCA9IDAsCiYjNDM7CSAgLnNldF91c2VyID0gc2V0X3BtdV9ldnR5cGVyIH0sCiAKIAlFTDJfUkVHX1ZOQ1IoVlBJRFJfRUwyLCByZXNldF91bmtub3duLCAwKSwKIAlFTDJfUkVHX1ZOQ1IoVk1QSURSX0VMMiwgcmVzZXRfdW5rbm93biwgMCksCkBAIC0zODM2LDcgJiM0MzszODUyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2Mgc3lzX3JlZ19kZXNjc1tdID0gewogCUVMMl9SRUdfRklMVEVSRUQoU0NUTFIyX0VMMiwgYWNjZXNzX3ZtX3JlZywgcmVzZXRfdmFsLCAwLAogCQkJIHNjdGxyMl9lbDJfdmlzaWJpbGl0eSksCiAJRUwyX1JFR19WTkNSKEhDUl9FTDIsIHJlc2V0X2hjciwgMCksCi0JRUwyX1JFRyhNRENSX0VMMiwgYWNjZXNzX21kY3IsIHJlc2V0X21kY3IsIDApLAomIzQzOwlTWVNfUkVHX1VTRVJfRklMVEVSKE1EQ1JfRUwyLCBhY2Nlc3NfbWRjciwgcmVzZXRfbWRjciwgMCwKJiM0MzsJCQkgICAgTlVMTCwgc2V0X21kY3IsIGVsMl92aXNpYmlsaXR5KSwKIAlFTDJfUkVHKENQVFJfRUwyLCBhY2Nlc3NfcncsIHJlc2V0X3ZhbCwgQ1BUUl9OVkhFX0VMMl9SRVMxKSwKIAlFTDJfUkVHX1ZOQ1IoSFNUUl9FTDIsIHJlc2V0X3ZhbCwgMCksCiAJRUwyX1JFR19WTkNSX0ZJTFQoSEZHUlRSX0VMMiwgZmd0X3Zpc2liaWxpdHkpLApAQCAtNTM5MCw3ICYjNDM7NTQwNyw3IEBAIHZvaWQga3ZtX3Jlc2V0X3N5c19yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlzZXRfYml0KEtWTV9BUkNIX0ZMQUdfSURfUkVHU19JTklUSUFMSVpFRCwgJmFtcDtrdm0tJmd0O2FyY2guZmxhZ3MpOwogCiAJaWYgKGt2bV92Y3B1X2hhc19wbXUodmNwdSkpCi0JCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUxPQURfUE1VLCB2Y3B1KTsKJiM0MzsJCWt2bV9wbXVfcmVxdWVzdF9yZWNyZWF0ZSh2Y3B1KTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2t2bS9hcm1fcG11LmggYi9pbmNsdWRlL2t2bS9hcm1fcG11LmgKaW5kZXggNmI0YTExOGQxN2NhOS4uMTdiODYxZWQxNzFkNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9rdm0vYXJtX3BtdS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUva3ZtL2FybV9wbXUuaApAQCAtMzIsNiAmIzQzOzMyLDcgQEAgc3RydWN0IGt2bV9wbXUgewogCXN0cnVjdCBrdm1fcG1jIHBtY1tLVk1fQVJNVjhfUE1VX01BWF9DT1VOVEVSU107CiAJaW50IGlycV9udW07CiAJYm9vbCBjcmVhdGVkOwomIzQzOwlib29sIGV2ZW50c19uZWVkX3JlY3JlYXRlOwogfTsKIAogc3RydWN0IGFybV9wbXVfZW50cnkgewpAQCAtNTUsOSAmIzQzOzU2LDEzIEBAIHZvaWQga3ZtX3BtdV9zeW5jX2h3c3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGJvb2wga3ZtX3BtdV9zaG91bGRfbm90aWZ5X3VzZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGJvb2wga3ZtX3BtdV91cGRhdGVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIGt2bV9wbXVfc29mdHdhcmVfaW5jcmVtZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhbCk7CiYjNDM7dm9pZCBrdm1fcG11X3JlcXVlc3RfcmVjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKJiM0Mzt2b2lkIGt2bV9wbXVfYXBwbHlfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBvbGQsIHU2NCB2YWwsIGJvb2wgZm9yY2VfcmVsb2FkKTsKIHZvaWQga3ZtX3BtdV9oYW5kbGVfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpOwomIzQzO3ZvaWQga3ZtX3BtdV9hcHBseV9tZGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9sZCwgdTY0IHZhbCk7CiB2b2lkIGt2bV9wbXVfc2V0X2NvdW50ZXJfZXZlbnRfdHlwZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhLAogCQkJCSAgICB1NjQgc2VsZWN0X2lkeCk7CiYjNDM7dm9pZCBrdm1fdmNwdV9sb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBsYXN0X2NwdSk7CiB2b2lkIGt2bV92Y3B1X3JlbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGludCBrdm1fYXJtX3BtdV92M19zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkgICAgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cik7CkBAIC0xMzUsNyAmIzQzOzE0MCwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3BtdV9zaG91bGRfbm90aWZ5X3VzZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogfQogc3RhdGljIGlubGluZSBib29sIGt2bV9wbXVfdXBkYXRlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHsgcmV0dXJuIGZhbHNlOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3BtdV9zb2Z0d2FyZV9pbmNyZW1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKSB7fQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X3JlcXVlc3RfcmVjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X2FwcGx5X3BtY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgb2xkLCB1NjQgdmFsLCBib29sIGZvcmNlX3JlbG9hZCkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X2hhbmRsZV9wbWNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhbCkge30KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3BtdV9hcHBseV9tZGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9sZCwgdTY0IHZhbCkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X3NldF9jb3VudGVyX2V2ZW50X3R5cGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCQkJICB1NjQgZGF0YSwgdTY0IHNlbGVjdF9pZHgpIHt9CiBzdGF0aWMgaW5saW5lIGludCBrdm1fYXJtX3BtdV92M19zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCkBAIC0xNjcsNiAmIzQzOzE3NSw3IEBAIHN0YXRpYyBpbmxpbmUgdTY0IGt2bV9wbXVfZ2V0X3BtY2VpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcG1jZWlkMSkKIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X3VwZGF0ZV92Y3B1X2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfcG11X3Jlc3RvcmVfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fQogc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X3BtdV9yZXN0b3JlX2hvc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdmNwdV9sb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBsYXN0X2NwdSkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdmNwdV9yZWxvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge30KIHN0YXRpYyBpbmxpbmUgdTgga3ZtX2FybV9wbXVfZ2V0X3BtdXZlcl9saW1pdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvdG9vbHMvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oIGIvdG9vbHMvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oCmluZGV4IDFjMTNiZmEyZDM4YWEuLjM5YTFhMWU0MTJlNjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgKQEAgLTQzNyw2ICYjNDM7NDM3LDcgQEAgZW51bSB7CiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVIJCTIKICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9QTVUJCTMKICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9OUl9DT1VOVEVSUwk0CiYjNDM7I2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWQk1CiAjZGVmaW5lIEtWTV9BUk1fVkNQVV9USU1FUl9DVFJMCQkxCiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1RJTUVSX0lSUV9WVElNRVIJCTAKICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfVElNRVJfSVJRX1BUSU1FUgkJMQpkaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS9saW51eC9iaXRmaWVsZC5oIGIvdG9vbHMvaW5jbHVkZS9saW51eC9iaXRmaWVsZC5oCmluZGV4IGRkZjgxZjI0OTU2YmEuLjFjNjMzMzQzZDU3NjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2luY2x1ZGUvbGludXgvYml0ZmllbGQuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9pbmNsdWRlL2xpbnV4L2JpdGZpZWxkLmgKQEAgLTE0MiwzMiAmIzQzOzE0MiwzMiBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHU2NCBmaWVsZF9tYXNrKHU2NCBmaWVsZCkKIAlyZXR1cm4gZmllbGQgLyBmaWVsZF9tdWx0aXBsaWVyKGZpZWxkKTsKIH0KICNkZWZpbmUgZmllbGRfbWF4KGZpZWxkKQkoKHR5cGVvZihmaWVsZCkpZmllbGRfbWFzayhmaWVsZCkpCi0jZGVmaW5lIF9fX19NQUtFX09QKHR5cGUsYmFzZSx0byxmcm9tKQkJCQkJXAotc3RhdGljIF9fYWx3YXlzX2lubGluZSBfXyMjdHlwZSB0eXBlIyNfZW5jb2RlX2JpdHMoYmFzZSB2LCBiYXNlIGZpZWxkKQlcCiYjNDM7I2RlZmluZSBfX19fTUFLRV9PUChuYW1lLHR5cGUsYmFzZSx0byxmcm9tKQkJCQlcCiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB0eXBlIG5hbWUjI19lbmNvZGVfYml0cyhiYXNlIHYsIGJhc2UgZmllbGQpCVwKIHsJCQkJCQkJCQlcCiAJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHYpICZhbXA7JmFtcDsgKHYgJmFtcDsgfmZpZWxkX21hc2soZmllbGQpKSkJXAogCQlfX2ZpZWxkX292ZXJmbG93KCk7CQkJCQlcCiAJcmV0dXJuIHRvKCh2ICZhbXA7IGZpZWxkX21hc2soZmllbGQpKSAqIGZpZWxkX211bHRpcGxpZXIoZmllbGQpKTsJXAogfQkJCQkJCQkJCVwKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX18jI3R5cGUgdHlwZSMjX3JlcGxhY2VfYml0cyhfXyMjdHlwZSBvbGQsCVwKLQkJCQkJYmFzZSB2YWwsIGJhc2UgZmllbGQpCQlcCiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB0eXBlIG5hbWUjI19yZXBsYWNlX2JpdHModHlwZSBvbGQsCQlcCiYjNDM7CQkJCQkJYmFzZSB2YWwsIGJhc2UgZmllbGQpCVwKIHsJCQkJCQkJCQlcCi0JcmV0dXJuIChvbGQgJmFtcDsgfnRvKGZpZWxkKSkgfCB0eXBlIyNfZW5jb2RlX2JpdHModmFsLCBmaWVsZCk7CVwKJiM0MzsJcmV0dXJuIChvbGQgJmFtcDsgfnRvKGZpZWxkKSkgfCBuYW1lIyNfZW5jb2RlX2JpdHModmFsLCBmaWVsZCk7CVwKIH0JCQkJCQkJCQlcCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdHlwZSMjcF9yZXBsYWNlX2JpdHMoX18jI3R5cGUgKnAsCQlcCiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG5hbWUjI3BfcmVwbGFjZV9iaXRzKHR5cGUgKnAsCQlcCiAJCQkJCWJhc2UgdmFsLCBiYXNlIGZpZWxkKQkJXAogewkJCQkJCQkJCVwKLQkqcCA9ICgqcCAmYW1wOyB+dG8oZmllbGQpKSB8IHR5cGUjI19lbmNvZGVfYml0cyh2YWwsIGZpZWxkKTsJXAomIzQzOwkqcCA9ICgqcCAmYW1wOyB+dG8oZmllbGQpKSB8IG5hbWUjI19lbmNvZGVfYml0cyh2YWwsIGZpZWxkKTsJXAogfQkJCQkJCQkJCVwKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYmFzZSB0eXBlIyNfZ2V0X2JpdHMoX18jI3R5cGUgdiwgYmFzZSBmaWVsZCkJXAomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYmFzZSBuYW1lIyNfZ2V0X2JpdHModHlwZSB2LCBiYXNlIGZpZWxkKQlcCiB7CQkJCQkJCQkJXAogCXJldHVybiAoZnJvbSh2KSAmYW1wOyBmaWVsZCkvZmllbGRfbXVsdGlwbGllcihmaWVsZCk7CQlcCiB9Ci0jZGVmaW5lIF9fTUFLRV9PUChzaXplKQkJCQkJCQlcCi0JX19fX01BS0VfT1AobGUjI3NpemUsdSMjc2l6ZSxjcHVfdG9fbGUjI3NpemUsbGUjI3NpemUjI190b19jcHUpCVwKLQlfX19fTUFLRV9PUChiZSMjc2l6ZSx1IyNzaXplLGNwdV90b19iZSMjc2l6ZSxiZSMjc2l6ZSMjX3RvX2NwdSkJXAotCV9fX19NQUtFX09QKHUjI3NpemUsdSMjc2l6ZSwsKQotX19fX01BS0VfT1AodTgsdTgsLCkKJiM0MzsjZGVmaW5lIF9fTUFLRV9PUChzaXplKQkJCQkJCQkJCVwKJiM0MzsJX19fX01BS0VfT1AobGUjI3NpemUsX19sZSMjc2l6ZSx1IyNzaXplLGNwdV90b19sZSMjc2l6ZSxsZSMjc2l6ZSMjX3RvX2NwdSkJXAomIzQzOwlfX19fTUFLRV9PUChiZSMjc2l6ZSxfX2JlIyNzaXplLHUjI3NpemUsY3B1X3RvX2JlIyNzaXplLGJlIyNzaXplIyNfdG9fY3B1KQlcCiYjNDM7CV9fX19NQUtFX09QKHUjI3NpemUsdSMjc2l6ZSx1IyNzaXplLCwpCiYjNDM7X19fX01BS0VfT1AodTgsdTgsdTgsLCkKIF9fTUFLRV9PUCgxNikKIF9fTUFLRV9PUCgzMikKIF9fTUFLRV9PUCg2NCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jCmluZGV4IDIyMjIzMzk1OTY5ZTAuLjYzNzY1M2Y3YTI1YjkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYwpAQCAtMjUsNiAmIzQzOzI1LDE0IEBACiAvKiBUaGUgY3ljbGUgY291bnRlciBiaXQgcG9zaXRpb24gdGhhdCYjMzk7cyBjb21tb24gYW1vbmcgdGhlIFBNVSByZWdpc3RlcnMgKi8KICNkZWZpbmUgQVJNVjhfUE1VX0NZQ0xFX0lEWAkJMzEKIAomIzQzOyNpZm5kZWYgTURDUl9FTDJfSFBNTgomIzQzOyNkZWZpbmUgTURDUl9FTDJfSFBNTgkJCUdFTk1BU0tfVUxMKDQsIDApCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2lmbmRlZiBNRENSX0VMMl9IUE1FCiYjNDM7I2RlZmluZSBNRENSX0VMMl9IUE1FCQkJQklUX1VMTCg3KQomIzQzOyNlbmRpZgomIzQzOwogc3RydWN0IHZwbXVfdm0gewogCXN0cnVjdCBrdm1fdm0gKnZtOwogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKQEAgLTQwMywxMiAmIzQzOzQxMSw3IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZV92cG11X3ZtKHZvaWQgKmd1ZXN0X2NvZGUpCiB7CiAJc3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDsKIAl1OCBwbXV2ZXIsIGVjOwotCXU2NCBkZnIwLCBpcnEgPSAyMzsKLQlzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyIGlycV9hdHRyID0gewotCQkuZ3JvdXAgPSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCi0JCS5hdHRyID0gS1ZNX0FSTV9WQ1BVX1BNVV9WM19JUlEsCi0JCS5hZGRyID0gKHU2NCkmYW1wO2lycSwKLQl9OwomIzQzOwl1NjQgZGZyMDsKIAogCS8qIFRoZSB0ZXN0IGNyZWF0ZXMgdGhlIHZwbXVfdm0gbXVsdGlwbGUgdGltZXMuIEVuc3VyZSBhIGNsZWFuIHN0YXRlICovCiAJbWVtc2V0KCZhbXA7dnBtdV92bSwgMCwgc2l6ZW9mKHZwbXVfdm0pKTsKQEAgLTQzNCw4ICYjNDM7NDM3LDYgQEAgc3RhdGljIHZvaWQgY3JlYXRlX3ZwbXVfdm0odm9pZCAqZ3Vlc3RfY29kZSkKIAlURVNUX0FTU0VSVChwbXV2ZXIgIT0gSURfQUE2NERGUjBfRUwxX1BNVVZlcl9JTVBfREVGICZhbXA7JmFtcDsKIAkJICAgIHBtdXZlciAmZ3Q7PSBJRF9BQTY0REZSMF9FTDFfUE1VVmVyX0lNUCwKIAkJICAgICYjMzQ7VW5leHBlY3RlZCBQTVVWRVIgKDB4JXgpIG9uIHRoZSB2Q1BVIHdpdGggUE1VdjMmIzM0OywgcG11dmVyKTsKLQotCXZjcHVfaW9jdGwodnBtdV92bS52Y3B1LCBLVk1fU0VUX0RFVklDRV9BVFRSLCAmYW1wO2lycV9hdHRyKTsKIH0KIAogc3RhdGljIHZvaWQgZGVzdHJveV92cG11X3ZtKHZvaWQpCkBAIC00NDMsMTEgJiM0Mzs0NDQsMTAgQEAgc3RhdGljIHZvaWQgZGVzdHJveV92cG11X3ZtKHZvaWQpCiAJa3ZtX3ZtX2ZyZWUodnBtdV92bS52bSk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ1bl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBtY3JfbikKJiM0MztzdGF0aWMgdm9pZCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IHVjYWxsIHVjOwogCi0JdmNwdV9hcmdzX3NldCh2Y3B1LCAxLCBwbWNyX24pOwogCXZjcHVfcnVuKHZjcHUpOwogCXN3aXRjaCAoZ2V0X3VjYWxsKHZjcHUsICZhbXA7dWMpKSB7CiAJY2FzZSBVQ0FMTF9BQk9SVDoKQEAgLTQ2MSwxNSAmIzQzOzQ2MSwxNyBAQCBzdGF0aWMgdm9pZCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBwbWNyX24pCiAJfQogfQogCi1zdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnModW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sIGV4cGVjdF9mYWlsKQomIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X2NvZGVfZG9uZSh2b2lkKQomIzQzO3sKJiM0MzsJR1VFU1RfRE9ORSgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzZXRfbnJfY291bnRlcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAomIzQzOwkJCSAgICB1bnNpZ25lZCBpbnQgbnJfY291bnRlcnMsIGJvb2wgZXhwZWN0X2ZhaWwpCiB7Ci0Jc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwogCXVuc2lnbmVkIGludCBwcmV2OwogCWludCByZXQ7CiAKLQljcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTsKLQl2Y3B1ID0gdnBtdV92bS52Y3B1OwotCiAJcHJldiA9IGdldF9wbWNyX24odmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19QTUNSX0VMMCkpKTsKIAogCXJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLApAQCAtNDgxLDYgJiM0Mzs0ODMsMjYgQEAgc3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycywgYm9vbAogCQkJICAgIG5yX2NvdW50ZXJzLCBwcmV2KTsKIAllbHNlCiAJCVRFU1RfQVNTRVJUKCFyZXQsIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycywKJiM0MzsJCQkJCQkgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5LAomIzQzOwkJCQkJCSBib29sIGV4cGVjdF9mYWlsKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwomIzQzOwl1NjQgaXJxID0gMjM7CiYjNDM7CiYjNDM7CWNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpOwomIzQzOwl2Y3B1ID0gdnBtdV92bS52Y3B1OwomIzQzOwomIzQzOwlpZiAoZml4ZWRfY291bnRlcnNfb25seSkKJiM0MzsJCXZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwKJiM0MzsJCQkJICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpOwomIzQzOwomIzQzOwl2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgJmFtcDtpcnEpOwomIzQzOwomIzQzOwlzZXRfbnJfY291bnRlcnModmNwdSwgbnJfY291bnRlcnMsIGV4cGVjdF9mYWlsKTsKIAogCXZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTsKIH0KQEAgLTQ4OSwyMSAmIzQzOzUxMSwyMiBAQCBzdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnModW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sCiAgKiBDcmVhdGUgYSBndWVzdCB3aXRoIG9uZSB2Q1BVLCBzZXQgdGhlIFBNQ1JfRUwwLk4gZm9yIHRoZSB2Q1BVIHRvIEBwbWNyX24sCiAgKiBhbmQgcnVuIHRoZSB0ZXN0LgogICovCi1zdGF0aWMgdm9pZCBydW5fYWNjZXNzX3Rlc3QodTY0IHBtY3JfbikKJiM0MztzdGF0aWMgdm9pZCBydW5fYWNjZXNzX3Rlc3QodTY0IHBtY3JfbiwgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5KQogewogCXU2NCBzcDsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiAJc3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDsKIAotCXByX2RlYnVnKCYjMzQ7VGVzdCB3aXRoIHBtY3JfbiAlbHVcbiYjMzQ7LCBwbWNyX24pOwomIzQzOwlwcl9kZWJ1ZygmIzM0O1Rlc3Qgd2l0aCBwbWNyX24gJWx1LCBmaXhlZF9jb3VudGVyc19vbmx5ICVkXG4mIzM0OywgcG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5KTsKIAotCXRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZhbHNlKTsKJiM0MzsJdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZml4ZWRfY291bnRlcnNfb25seSwgZmFsc2UpOwogCXZjcHUgPSB2cG11X3ZtLnZjcHU7CiAKIAkvKiBTYXZlIHRoZSBpbml0aWFsIHNwIHRvIHJlc3RvcmUgdGhlbSBsYXRlciB0byBydW4gdGhlIGd1ZXN0IGFnYWluICovCiAJc3AgPSB2Y3B1X2dldF9yZWcodmNwdSwgY3R4dF9yZWdfYWxpYXModmNwdSwgU1lTX1NQX0VMMSkpOwogCi0JcnVuX3ZjcHUodmNwdSwgcG1jcl9uKTsKJiM0MzsJdmNwdV9hcmdzX3NldCh2Y3B1LCAxLCBwbWNyX24pOwomIzQzOwlydW5fdmNwdSh2Y3B1KTsKIAogCS8qCiAJICogUmVzZXQgYW5kIHJlLWluaXRpYWxpemUgdGhlIHZDUFUsIGFuZCBydW4gdGhlIGd1ZXN0IGNvZGUgYWdhaW4gdG8KQEAgLTUxNiw3ICYjNDM7NTM5LDggQEAgc3RhdGljIHZvaWQgcnVuX2FjY2Vzc190ZXN0KHU2NCBwbWNyX24pCiAJdmNwdV9zZXRfcmVnKHZjcHUsIGN0eHRfcmVnX2FsaWFzKHZjcHUsIFNZU19TUF9FTDEpLCBzcCk7CiAJdmNwdV9zZXRfcmVnKHZjcHUsIEFSTTY0X0NPUkVfUkVHKHJlZ3MucGMpLCAodTY0KWd1ZXN0X2NvZGUpOwogCi0JcnVuX3ZjcHUodmNwdSwgcG1jcl9uKTsKJiM0MzsJdmNwdV9hcmdzX3NldCh2Y3B1LCAxLCBwbWNyX24pOwomIzQzOwlydW5fdmNwdSh2Y3B1KTsKIAogCWRlc3Ryb3lfdnBtdV92bSgpOwogfQpAQCAtNTMxLDE0ICYjNDM7NTU1LDE0IEBAIHN0YXRpYyBzdHJ1Y3QgcG1yZWdfc2V0cyB2YWxpZGl0eV9jaGVja19yZWdfc2V0c1tdID0gewogICogQ3JlYXRlIGEgVk0sIGFuZCBjaGVjayBpZiBLVk0gaGFuZGxlcyB0aGUgdXNlcnNwYWNlIGFjY2Vzc2VzIG9mCiAgKiB0aGUgUE1VIHJlZ2lzdGVyIHNldHMgaW4gQHZhbGlkaXR5X2NoZWNrX3JlZ19zZXRzW10gY29ycmVjdGx5LgogICovCi1zdGF0aWMgdm9pZCBydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QodTY0IHBtY3JfbikKJiM0MztzdGF0aWMgdm9pZCBydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QodTY0IHBtY3JfbiwgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5KQogewogCWludCBpOwogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKIAl1NjQgc2V0X3JlZ19pZCwgY2xyX3JlZ19pZCwgcmVnX3ZhbDsKIAl1NjQgdmFsaWRfY291bnRlcnNfbWFzaywgbWF4X2NvdW50ZXJzX21hc2s7CiAKLQl0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCBmYWxzZSk7CiYjNDM7CXRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHksIGZhbHNlKTsKIAl2Y3B1ID0gdnBtdV92bS52Y3B1OwogCiAJdmFsaWRfY291bnRlcnNfbWFzayA9IGdldF9jb3VudGVyc19tYXNrKHBtY3Jfbik7CkBAIC01ODMsMTYgJiM0Mzs2MDcsOTQgQEAgc3RhdGljIHZvaWQgcnVuX3BtcmVnc192YWxpZGl0eV90ZXN0KHU2NCBwbWNyX24pCiAJZGVzdHJveV92cG11X3ZtKCk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBydW5fbWRjcl9lbDJfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCBpbml0OwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiYjNDM7CXU2NCBleHBlY3RlZF9tZGNyLCBtZGNyOwomIzQzOwl1NjQgaXJxID0gMjM7CiYjNDM7CiYjNDM7CXByX2RlYnVnKCYjMzQ7TURDUl9FTDIgdGVzdCB3aXRoIHBtY3JfbiAlbHUsIGZpeGVkX2NvdW50ZXJzX29ubHkgJWRcbiYjMzQ7LAomIzQzOwkJIHBtY3JfbiwgZml4ZWRfY291bnRlcnNfb25seSk7CiYjNDM7CiYjNDM7CWNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpOwomIzQzOwlpZiAoIXZtX3N1cHBvcnRzX2VsMih2cG11X3ZtLnZtKSkgewomIzQzOwkJZGVzdHJveV92cG11X3ZtKCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJdmNwdSA9IHZwbXVfdm0udmNwdTsKJiM0MzsKJiM0MzsJbWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTsKJiM0MzsJZXhwZWN0ZWRfbWRjciA9IHU2NF9yZXBsYWNlX2JpdHMobWRjciwgRklFTERfTUFYKE1EQ1JfRUwyX0hQTU4pLAomIzQzOwkJCQkJIE1EQ1JfRUwyX0hQTU4pOwomIzQzOwl2Y3B1X3NldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSwKJiM0MzsJCSAgICAgZXhwZWN0ZWRfbWRjcik7CiYjNDM7CiYjNDM7CW1kY3IgPSB2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSk7CiYjNDM7CVRFU1RfQVNTRVJUKG1kY3IgPT0gZXhwZWN0ZWRfbWRjciwKJiM0MzsJCSAgICAmIzM0O01EQ1JfRUwyIHdhcyBub3QgcHJvcGVybHkgdXBkYXRlZCBhZnRlciBIUE1OIHdyaXRlIChleHBlY3RlZCAweCVseCwgZ290IDB4JWx4KSYjMzQ7LAomIzQzOwkJICAgIGV4cGVjdGVkX21kY3IsIG1kY3IpOwomIzQzOwomIzQzOwlpZiAoZml4ZWRfY291bnRlcnNfb25seSkgewomIzQzOwkJdmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLAomIzQzOwkJCQkgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7CiYjNDM7CiYjNDM7CQltZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpOwomIzQzOwkJVEVTVF9BU1NFUlQobWRjciA9PSBleHBlY3RlZF9tZGNyLAomIzQzOwkJCSAgICAmIzM0O01EQ1JfRUwyIGNoYW5nZWQgYWZ0ZXIgUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkgKGV4cGVjdGVkIDB4JWx4LCBnb3QgMHglbHgpJiMzNDssCiYjNDM7CQkJICAgIGV4cGVjdGVkX21kY3IsIG1kY3IpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNldF9ucl9jb3VudGVycyh2Y3B1LCBwbWNyX24sIGZhbHNlKTsKJiM0MzsKJiM0MzsJbWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTsKJiM0MzsJVEVTVF9BU1NFUlQobWRjciA9PSBleHBlY3RlZF9tZGNyLAomIzQzOwkJICAgICYjMzQ7TURDUl9FTDIgY2hhbmdlZCBhZnRlciBQTVVfVjNfU0VUX05SX0NPVU5URVJTIChleHBlY3RlZCAweCVseCwgZ290IDB4JWx4KSYjMzQ7LAomIzQzOwkJICAgIGV4cGVjdGVkX21kY3IsIG1kY3IpOwomIzQzOwomIzQzOwl2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgJmFtcDtpcnEpOwomIzQzOwomIzQzOwl2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQsIE5VTEwpOwomIzQzOwomIzQzOwltZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpOwomIzQzOwlURVNUX0FTU0VSVChtZGNyID09IGV4cGVjdGVkX21kY3IsCiYjNDM7CQkgICAgJiMzNDtNRENSX0VMMiBjaGFuZ2VkIGFmdGVyIFBNVV9WM19JTklUIChleHBlY3RlZCAweCVseCwgZ290IDB4JWx4KSYjMzQ7LAomIzQzOwkJICAgIGV4cGVjdGVkX21kY3IsIG1kY3IpOwomIzQzOwomIzQzOwlleHBlY3RlZF9tZGNyID0gbWRjciBeIE1EQ1JfRUwyX0hQTUU7CiYjNDM7CXZjcHVfc2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpLAomIzQzOwkJICAgICBleHBlY3RlZF9tZGNyKTsKJiM0MzsKJiM0MzsJbWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTsKJiM0MzsJVEVTVF9BU1NFUlQobWRjciA9PSBleHBlY3RlZF9tZGNyLAomIzQzOwkJICAgICYjMzQ7TURDUl9FTDIgd2FzIG5vdCBwcm9wZXJseSB1cGRhdGVkIGFmdGVyIEhQTUUgd3JpdGUgKGV4cGVjdGVkIDB4JWx4LCBnb3QgMHglbHgpJiMzNDssCiYjNDM7CQkgICAgZXhwZWN0ZWRfbWRjciwgbWRjcik7CiYjNDM7CiYjNDM7CWt2bV9nZXRfZGVmYXVsdF92Y3B1X3RhcmdldCh2cG11X3ZtLnZtLCAmYW1wO2luaXQpOwomIzQzOwlpbml0LmZlYXR1cmVzWzBdIHw9ICgxICZsdDsmbHQ7IEtWTV9BUk1fVkNQVV9QTVVfVjMpOwomIzQzOwlhYXJjaDY0X3ZjcHVfc2V0dXAodmNwdSwgJmFtcDtpbml0KTsKJiM0MzsKJiM0MzsJbWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTsKJiM0MzsJVEVTVF9BU1NFUlQoRklFTERfR0VUKE1EQ1JfRUwyX0hQTU4sIG1kY3IpID09IHBtY3JfbiwKJiM0MzsJCSAgICAmIzM0O01EQ1JfRUwyLkhQTU4gaXMgbm90IHJlc2V0IGFmdGVyIElOSVQgKGV4cGVjdGVkICVsdSwgZ290ICVsdSkmIzM0OywKJiM0MzsJCSAgICBwbWNyX24sIEZJRUxEX0dFVChNRENSX0VMMl9IUE1OLCBtZGNyKSk7CiYjNDM7CiYjNDM7CWRlc3Ryb3lfdnBtdV92bSgpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBDcmVhdGUgYSBndWVzdCB3aXRoIG9uZSB2Q1BVLCBhbmQgYXR0ZW1wdCB0byBzZXQgdGhlIFBNQ1JfRUwwLk4gZm9yCiAgKiB0aGUgdkNQVSB0byBAcG1jcl9uLCB3aGljaCBpcyBsYXJnZXIgdGhhbiB0aGUgaG9zdCB2YWx1ZS4KICAqIFRoZSBhdHRlbXB0IHNob3VsZCBmYWlsIGFzIEBwbWNyX24gaXMgdG9vIGJpZyB0byBzZXQgZm9yIHRoZSB2Q1BVLgogICovCi1zdGF0aWMgdm9pZCBydW5fZXJyb3JfdGVzdCh1NjQgcG1jcl9uKQomIzQzO3N0YXRpYyB2b2lkIHJ1bl9lcnJvcl90ZXN0KHU2NCBwbWNyX24sIGJvb2wgZml4ZWRfY291bnRlcnNfb25seSkKIHsKIAlwcl9kZWJ1ZygmIzM0O0Vycm9yIHRlc3Qgd2l0aCBwbWNyX24gJWx1IChsYXJnZXIgdGhhbiB0aGUgaG9zdClcbiYjMzQ7LCBwbWNyX24pOwogCi0JdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgdHJ1ZSk7CiYjNDM7CXRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHksIHRydWUpOwogCWRlc3Ryb3lfdnBtdV92bSgpOwogfQogCkBAIC02MjIsMjIgJiM0Mzs3MjQsMTgzIEBAIHN0YXRpYyBib29sIGt2bV9zdXBwb3J0c19ucl9jb3VudGVyc19hdHRyKHZvaWQpCiAJcmV0dXJuIHN1cHBvcnRlZDsKIH0KIAotaW50IG1haW4odm9pZCkKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3NldF9ucl9jb3VudGVyc19hZnRlcl92Y3B1X3J1bih2b2lkKQogewotCXU2NCBpLCBwbWNyX247CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqcnVubmluZ192Y3B1LCAqc3RvcHBlZF92Y3B1OwomIzQzOwl1bnNpZ25lZCBpbnQgbnJfY291bnRlcnMgPSAwOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCBpbml0OwomIzQzOwlzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsJaW50IHJldDsKJiM0MzsJdTY0IGlycSA9IDIzOwomIzQzOwomIzQzOwl2bSA9IHZtX2NyZWF0ZSgyKTsKJiM0MzsJdm1faW9jdGwodm0sIEtWTV9BUk1fUFJFRkVSUkVEX1RBUkdFVCwgJmFtcDtpbml0KTsKJiM0MzsJaW5pdC5mZWF0dXJlc1swXSB8PSBCSVQoS1ZNX0FSTV9WQ1BVX1BNVV9WMyk7CiYjNDM7CXJ1bm5pbmdfdmNwdSA9IGFhcmNoNjRfdmNwdV9hZGQodm0sIDAsICZhbXA7aW5pdCwgZ3Vlc3RfY29kZV9kb25lKTsKJiM0MzsJc3RvcHBlZF92Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMSwgJmFtcDtpbml0LCBndWVzdF9jb2RlX2RvbmUpOwomIzQzOwlrdm1fYXJjaF92bV9maW5hbGl6ZV92Y3B1cyh2bSk7CiYjNDM7CiYjNDM7CXZjcHVfZGV2aWNlX2F0dHJfc2V0KHJ1bm5pbmdfdmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLAomIzQzOwkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JUlEsICZhbXA7aXJxKTsKJiM0MzsJdmNwdV9kZXZpY2VfYXR0cl9zZXQocnVubmluZ192Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQsIE5VTEwpOwomIzQzOwlydW5fdmNwdShydW5uaW5nX3ZjcHUpOwomIzQzOwomIzQzOwlyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHN0b3BwZWRfdmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLAomIzQzOwkJCQkgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfU0VUX05SX0NPVU5URVJTLAomIzQzOwkJCQkgICAgICZhbXA7bnJfY291bnRlcnMpOwomIzQzOwlURVNUX0FTU0VSVChyZXQgPT0gLTEgJmFtcDsmYW1wOyBlcnJubyA9PSBFQlVTWSwKJiM0MzsJCSAgICBLVk1fSU9DVExfRVJST1IoS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7CiYjNDM7CiYjNDM7CWt2bV92bV9mcmVlKHZtKTsKJiM0Mzt9CiAKLQlURVNUX1JFUVVJUkUoa3ZtX2hhc19jYXAoS1ZNX0NBUF9BUk1fUE1VX1YzKSk7Ci0JVEVTVF9SRVFVSVJFKGt2bV9zdXBwb3J0c192Z2ljX3YzKCkpOwotCVRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfbnJfY291bnRlcnNfYXR0cigpKTsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2NvbmZpZyh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpCiYjNDM7ewomIzQzOwl1NjQgaTsKIAotCXBtY3JfbiA9IGdldF9wbWNyX25fbGltaXQoKTsKIAlmb3IgKGkgPSAwOyBpICZsdDs9IHBtY3JfbjsgaSYjNDM7JiM0MzspIHsKLQkJcnVuX2FjY2Vzc190ZXN0KGkpOwotCQlydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QoaSk7CiYjNDM7CQlydW5fYWNjZXNzX3Rlc3QoaSwgZml4ZWRfY291bnRlcnNfb25seSk7CiYjNDM7CQlydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QoaSwgZml4ZWRfY291bnRlcnNfb25seSk7CiYjNDM7CQlydW5fbWRjcl9lbDJfdmFsaWRpdHlfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTsKIAl9CiAKIAlmb3IgKGkgPSBwbWNyX24gJiM0MzsgMTsgaSAmbHQ7IEFSTVY4X1BNVV9NQVhfQ09VTlRFUlM7IGkmIzQzOyYjNDM7KQotCQlydW5fZXJyb3JfdGVzdChpKTsKJiM0MzsJCXJ1bl9lcnJvcl90ZXN0KGksIGZpeGVkX2NvdW50ZXJzX29ubHkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2ZpeGVkX2NvdW50ZXJzX29ubHlfc3RyaWN0KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCBpbml0OwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwl1NjQgaXJxID0gMjM7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICgha3ZtX2hhc19jYXAoS1ZNX0NBUF9BUk1fUE1VX1YzX1NUUklDVCkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXZtID0gdm1fY3JlYXRlKDEpOwomIzQzOwlrdm1fZ2V0X2RlZmF1bHRfdmNwdV90YXJnZXQodm0sICZhbXA7aW5pdCk7CiYjNDM7CWluaXQuZmVhdHVyZXNbMF0gfD0gQklUKEtWTV9BUk1fVkNQVV9QTVVfVjMpIHwKJiM0MzsJCQkgICAgQklUKEtWTV9BUk1fVkNQVV9QTVVfVjNfU1RSSUNUKTsKJiM0MzsJdmNwdSA9IGFhcmNoNjRfdmNwdV9hZGQodm0sIDAsICZhbXA7aW5pdCwgZ3Vlc3RfY29kZV9kb25lKTsKJiM0MzsJa3ZtX2FyY2hfdm1fZmluYWxpemVfdmNwdXModm0pOwomIzQzOwl2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgJmFtcDtpcnEpOwomIzQzOwomIzQzOwkvKiBTVFJJQ1Qgc3RpbGwgcmVxdWlyZXMgYSBQTVUgc2VsZWN0aW9uIGJlZm9yZSBpbml0aWFsaXphdGlvbi4gKi8KJiM0MzsJcmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTsKJiM0MzsJVEVTVF9BU1NFUlQocmV0ID09IC0xICZhbXA7JmFtcDsgZXJybm8gPT0gRU5YSU8sCiYjNDM7CQkgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpOwomIzQzOwomIzQzOwl2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpOwomIzQzOwl2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQsIE5VTEwpOwomIzQzOwomIzQzOwlrdm1fdm1fZnJlZSh2bSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfZml4ZWRfY291bnRlcnNfb25seSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9wbXVfZXZlbnRfZmlsdGVyIGZpbHRlciA9IHsgLm5ldmVudHMgPSAwIH07CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnJ1bm5pbmdfdmNwdTsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICpzdG9wcGVkX3ZjcHU7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdV9pbml0IGluaXQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CXU2NCBpcnEgPSAyMzsKJiM0MzsKJiM0MzsJY3JlYXRlX3ZwbXVfdm0oZ3Vlc3RfY29kZSk7CiYjNDM7CXJldCA9IF9fdmNwdV9oYXNfZGV2aWNlX2F0dHIodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJVEVTVF9BU1NFUlQocmV0ID09IC0xICZhbXA7JmFtcDsgZXJybm8gPT0gRU5YSU8sCiYjNDM7CQkJICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fSEFTX0RFVklDRV9BVFRSLCByZXQpKTsKJiM0MzsJCWRlc3Ryb3lfdnBtdV92bSgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFzc2VydCB0aGF0IEZJWEVEX0NPVU5URVJTX09OTFkgaXMgdW5zZXQgYXQgaW5pdGlhbGl6YXRpb24uICovCiYjNDM7CXJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9nZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTsKJiM0MzsJVEVTVF9BU1NFUlQocmV0ID09IC0xICZhbXA7JmFtcDsgZXJybm8gPT0gRU5YSU8sCiYjNDM7CQkgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9HRVRfREVWSUNFX0FUVFIsIHJldCkpOwomIzQzOwomIzQzOwkvKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgc3VjY2VlZHMuICovCiYjNDM7CXZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLAomIzQzOwkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTsKJiM0MzsKJiM0MzsJLyogQXNzZXJ0IHRoYXQgRklYRURfQ09VTlRFUlNfT05MWSBpcyBzZXQuICovCiYjNDM7CXZjcHVfZGV2aWNlX2F0dHJfZ2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLAomIzQzOwkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU2V0dGluZyBhbiBldmVudCBmaWx0ZXIgd2hlbiBGSVhFRF9DT1VOVEVSU19PTkxZIGhhcyBhbHJlYWR5IGJlZW4gc2V0CiYjNDM7CSAqIHJlc3VsdHMgaW4gRUJVU1kuCiYjNDM7CSAqLwomIzQzOwlyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLAomIzQzOwkJCQkgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSLCAmYW1wO2ZpbHRlcik7CiYjNDM7CVRFU1RfQVNTRVJUKHJldCA9PSAtMSAmYW1wOyZhbXA7IGVycm5vID09IEVCVVNZLAomIzQzOwkJICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTsKJiM0MzsKJiM0MzsJZGVzdHJveV92cG11X3ZtKCk7CiYjNDM7CiYjNDM7CWNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgd2hlbiBhbiBldmVudCBmaWx0ZXIgaGFzCiYjNDM7CSAqIGFscmVhZHkgYmVlbiBzZXQgcmVzdWx0cyBpbiBFQlVTWS4KJiM0MzsJICovCiYjNDM7CXZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLAomIzQzOwkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVIsICZhbXA7ZmlsdGVyKTsKJiM0MzsKJiM0MzsJcmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwKJiM0MzsJCQkJICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpOwomIzQzOwlURVNUX0FTU0VSVChyZXQgPT0gLTEgJmFtcDsmYW1wOyBlcnJubyA9PSBFQlVTWSwKJiM0MzsJCSAgICBLVk1fSU9DVExfRVJST1IoS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7CiYjNDM7CiYjNDM7CWRlc3Ryb3lfdnBtdV92bSgpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgd2hlbiBhIFZDUFUgaGFzIGFscmVhZHkgcnVuCiYjNDM7CSAqIHJlc3VsdHMgaW4gRUJVU1kuCiYjNDM7CSAqLwomIzQzOwl2bSA9IHZtX2NyZWF0ZSgyKTsKJiM0MzsJdm1faW9jdGwodm0sIEtWTV9BUk1fUFJFRkVSUkVEX1RBUkdFVCwgJmFtcDtpbml0KTsKJiM0MzsJaW5pdC5mZWF0dXJlc1swXSB8PSAoMSAmbHQ7Jmx0OyBLVk1fQVJNX1ZDUFVfUE1VX1YzKTsKJiM0MzsJcnVubmluZ192Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMCwgJmFtcDtpbml0LCBndWVzdF9jb2RlX2RvbmUpOwomIzQzOwlzdG9wcGVkX3ZjcHUgPSBhYXJjaDY0X3ZjcHVfYWRkKHZtLCAxLCAmYW1wO2luaXQsIGd1ZXN0X2NvZGVfZG9uZSk7CiYjNDM7CWt2bV9hcmNoX3ZtX2ZpbmFsaXplX3ZjcHVzKHZtKTsKJiM0MzsJdmNwdV9kZXZpY2VfYXR0cl9zZXQocnVubmluZ192Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgJmFtcDtpcnEpOwomIzQzOwl2Y3B1X2RldmljZV9hdHRyX3NldChydW5uaW5nX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwKJiM0MzsJCQkgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVCwgTlVMTCk7CiYjNDM7CXJ1bl92Y3B1KHJ1bm5pbmdfdmNwdSk7CiYjNDM7CiYjNDM7CXJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQoc3RvcHBlZF92Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTsKJiM0MzsJVEVTVF9BU1NFUlQocmV0ID09IC0xICZhbXA7JmFtcDsgZXJybm8gPT0gRUJVU1ksCiYjNDM7CQkgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpOwomIzQzOwomIzQzOwlrdm1fdm1fZnJlZSh2bSk7CiYjNDM7CiYjNDM7CXRlc3RfZml4ZWRfY291bnRlcnNfb25seV9zdHJpY3QoKTsKJiM0MzsKJiM0MzsJdGVzdF9jb25maWcoMCwgdHJ1ZSk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtYWluKHZvaWQpCiYjNDM7ewomIzQzOwlURVNUX1JFUVVJUkUoa3ZtX2hhc19jYXAoS1ZNX0NBUF9BUk1fUE1VX1YzKSk7CiYjNDM7CVRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfdmdpY192MygpKTsKJiM0MzsJVEVTVF9SRVFVSVJFKGt2bV9zdXBwb3J0c19ucl9jb3VudGVyc19hdHRyKCkpOwomIzQzOwomIzQzOwl0ZXN0X3NldF9ucl9jb3VudGVyc19hZnRlcl92Y3B1X3J1bigpOwomIzQzOwl0ZXN0X2NvbmZpZyhnZXRfcG1jcl9uX2xpbWl0KCksIGZhbHNlKTsKJiM0MzsJdGVzdF9maXhlZF9jb3VudGVyc19vbmx5KCk7CiAKIAlyZXR1cm4gMDsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ3OTEKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA2MjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoaXMgUGF0Y2ggZm9yIEFNRDY0IENvbXBhdGliaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGF0IHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIEFNRDY0LCBhbmQgdGhlIGZpbGUgbW9kaWZpY2F0aW9ucyBzZWVtIGhlYXZpbHkgZm9jdXNlZCBvbiBBUk02NC4gVGhlIGluc3RydWN0aW9ucyBzdGF0ZSB0byBsb29rIGZvciAmIzM0O1VucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocyYjMzQ7IGFuZCAmIzM0O0NvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSwmIzM0OyBzbyB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBmb2N1cy4KCkZpcnN0LCBJIGV4YW1pbmVkIHRoZSB1c2VyIGluc3RydWN0aW9uczogJiMzNDtUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NCwmIzM0OyBjaGVjay4gVGhlbiBJIGxvb2tlZCBhdCB0aGUgZmlsZSBtb2RpZmljYXRpb25zLCBJIHNlZToKCiogICBgRG9jdW1lbnRhdGlvbi9gIGFuZCBgdG9vbHMvYCBkaXJlY3RvcmllcywgY2hlY2suIERvY3VtZW50YXRpb24gbWlnaHQgYXBwbHkgdG8gYW55IGFyY2hpdGVjdHVyZSwgYW5kIHRvb2xzIGFyZSBhcmNoaXRlY3R1cmUgaW5kZXBlbmRlbnQuCiogICBCdXQsIGNydWNpYWxseSwgYWxtb3N0IGFsbCB0aGUga2VybmVsIG1vZGlmaWNhdGlvbnMgYXJlIHdpdGhpbiBgYXJjaC9hcm02NC9gLCBhbmQgaW5jbHVkZSBmaWxlcyB0aGF0IEkgc3VzcGVjdCB3aWxsIGJlIEFSTTY0IG9ubHkuIExldCYjMzk7cyBzZWUuLi4KKiAgIEkgZmxhZ2dlZCBgaW5jbHVkZS9rdm0vYXJtX3BtdS5oYCBhcyBhIHBvdGVudGlhbCBwb2ludCBvZiBpbnRlcmVzdC4gSXQmIzM5O3MgaW4gdGhlIGBpbmNsdWRlL2t2bWAgZGlyZWN0b3J5LCBidXQgaXRzIG5hbWUgc2NyZWFtcyAmIzM0O0FSTSBQTVUmIzM0OyBhdCBtZS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGlmIHRoYXQgZmlsZSBpcyBpbmNsdWRlZCBpbiBhbnkgQU1ENjQtc3BlY2lmaWMgY29kZSBwYXRocy4gU28gSSBuZWVkIHRvIHZlcmlmeSBpdHMgdXNhZ2UuCiogICBJIGFsc28gbmVlZCB0byBjaGVjayB0aGUgdG9vbHMgYW5kIGRvY3VtZW50YXRpb24gdG8gZW5zdXJlIHRoZXJlIGFyZSBubyB1bmludGVuZGVkIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBjb21wb25lbnRzIHRoZXJlLgoKTm93IEkmIzM5O2xsIG1ldGhvZGljYWxseSBjaGVjayBlYWNoIGZpbGUuIFRoZSBhcm02NC1zcGVjaWZpYyBmaWxlcyBhcmUgY2xlYXJseSB1bnJlYWNoYWJsZSBvbiBhbWQ2NDoKLSBhcmNoL2FybTY0L1wqCi0gaW5jbHVkZS9rdm0vYXJtXF9wbXUuaAotIHRvb2xzL1wqCi0gRG9jdW1lbnRhdGlvbi9cKgoKSSYjMzk7bGwgdXNlIGdyZXAgb3IgY29kZSBzZWFyY2ggdG8gZGVmaW5pdGl2ZWx5IGNvbmZpcm0gdGhlIGluY2x1ZGUgZmlsZSB1c2FnZSBhbmQgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBkZXBlbmRlbmNpZXMgYW5kLCBpZiBpdCBpcyBvbmx5IHVzZWQgYnkgYXJtNjQsIEkgY2FuIGJlIGNvbmZpZGVudCB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBzYWZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luY2x1ZGUgXHUwMDNja3ZtL2FybV9wbXUuaFx1MDAzZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMzctI2luY2x1ZGUgXHUwMDNja3ZtL2FybV9hcmNoX3RpbWVyLmhcdTAwM2VcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDozODojaW5jbHVkZSBcdTAwM2Nrdm0vYXJtX3BtdS5oXHUwMDNlXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMzktXG4tLVxuYXJjaC9hcm02NC9rdm0vYXJtLmMtNDgtI2luY2x1ZGUgXHUwMDNja3ZtL2FybV9oeXBlcmNhbGxzLmhcdTAwM2VcbmFyY2gvYXJtNjQva3ZtL2FybS5jOjQ5OiNpbmNsdWRlIFx1MDAzY2t2bS9hcm1fcG11LmhcdTAwM2VcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTUwLSNpbmNsdWRlIFx1MDAzY2t2bS9hcm1fcHNjaS5oXHUwMDNlXG4tLVxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy0xNC0jaW5jbHVkZSBcdTAwM2Nhc20va3ZtX2VtdWxhdGUuaFx1MDAzZVxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYzoxNTojaW5jbHVkZSBcdTAwM2Nrdm0vYXJtX3BtdS5oXHUwMDNlXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jLTE2LSNpbmNsdWRlIFx1MDAzY2t2bS9hcm1fdmdpYy5oXHUwMDNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYxMTkKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA3NzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIEFuYWx5c2lzIC0gTm8gQ29uY2VybnMgSGVyZSEqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBjaGFuZ2VzIHRoYXQgd2FycmFudCBmdXp6aW5nLiBUaGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlIG1vZGlmaWVkIGNvZGUgaW1wYWN0cyB0aGUga2VybmVsJiMzOTtzIGNyaXRpY2FsIGV4ZWN1dGlvbiBwYXRocyBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQgaW4gdGhpcyBjYXNlKS4KCkZpcnN0LCBJIGNoZWNrZWQgZm9yIGFueSBpbmNsdXNpb24gb3IgdXNhZ2Ugb2YgdGhlIGBpbmNsdWRlL2t2bS9hcm1fcG11LmhgIGZpbGUsIG9yIGFueSBvdGhlciBBUk02NCBQZXJmb3JtYW5jZSBNb25pdG9yaW5nIFVuaXQgKFBNVSkgY29kZSwgb24gdGhlIHg4Nl82NCBhcmNoaXRlY3R1cmUuIE5vIGRpY2UhIFRoYXQgaGVhZGVyIGlzIGV4Y2x1c2l2ZWx5IHVzZWQgd2l0aGluIHRoZSBBUk02NCBhcmNoaXRlY3R1cmUsIHNwZWNpZmljYWxseSBieSBgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oYCwgYGFyY2gvYXJtNjQva3ZtL2FybS5jYCwgYW5kIGBhcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jYC4gVGhpcyBpcyBnb29kOyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZSBvbiBhIGRpZmZlcmVudCB0YXJnZXQgaXMgaW1tZWRpYXRlbHkgYSBub24taXNzdWUuCgpOZXh0LCBJIGxvb2tlZCBhdCBgdG9vbHMvaW5jbHVkZS9saW51eC9iaXRmaWVsZC5oYC4gSXQgcmVzaWRlcyB3aXRoaW4gdGhlIGB0b29scy9gIGRpcmVjdG9yeS4gVGhpcyBkaXJlY3RvcnkgaXMgZXhwbGljaXRseSBleGVtcHQgZnJvbSBmdXp6aW5nIGNvbnNpZGVyYXRpb25zIGJlY2F1c2UgaXQmIzM5O3MgZGVmaW5lZCBhcyBhICYjMzQ7VXNlci1zcGFjZSBkaXJlY3RvcnkmIzM0Oy4KClRoZW4sIEkgY29uc3VsdGVkIHRoZSAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UmIzM0OyBjcml0ZXJpYS4gVGhlIGxvZ2ljIGZvciB0aGF0IGRlY2lzaW9uIGlzIGJhc2VkIG9uIG11bHRpcGxlIGNhdGVnb3JpZXM6CjEuICAqKk5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6KiogVGhpcyBpbmNsdWRlcyBkb2N1bWVudGF0aW9uLCBjb21tZW50cywgc3BlbGxpbmcgZml4ZXMsIGFuZCwgaW1wb3J0YW50bHksIHVzZXItc3BhY2UgZGlyZWN0b3JpZXMgbGlrZSBgdG9vbHMvYCwgYXMgd2VsbCBhcyBzZWxmLXRlc3RzLCBzYW1wbGVzLCBhbmQgc2NyaXB0cyB0aGF0IGRvbiYjMzk7dCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSBvciBtb2R1bGVzLgoyLiAgKipTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6KioKMy4gICoqVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOioqCgpHaXZlbiB0aGF0LCBJIGNhbiBjb25jbHVzaXZlbHkgY2F0ZWdvcml6ZSBhbGwgY2hhbmdlcyB3aXRoaW4gdGhpcyBwYXRjaCBzZXJpZXM6CgoxLiAgKipEb2N1bWVudGF0aW9uOioqIE1vZGlmaWNhdGlvbnMgdG8gdGhlIGRvY3VtZW50YXRpb24gZmlsZXMgKGBEb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RgLCBgRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0YCkgZmFsbCB1bmRlciB0aGUgJiMzNDtOb24ta2VybmVsJiMzNDsgY2F0ZWdvcnkuCjIuICAqKkFSTTY0IEFyY2hpdGVjdHVyZSBDb2RlOioqIEFsbCBjaGFuZ2VzIHdpdGhpbiBgYXJjaC9hcm02NC8qYCBhcmUgKmV4Y2x1c2l2ZWx5KiBmb3IgdGhlIEFSTTY0IGFyY2hpdGVjdHVyZS4gVGhleSBhcmUgc2ltcGx5IHVucmVhY2hhYmxlIGFuZCBkbyBub3QgYWZmZWN0IHRoZSB0YXJnZXQgKGFtZDY0KS4KMy4gICoqYGluY2x1ZGUva3ZtL2FybV9wbXUuaGA6KiogVGhpcyBpcywgYWdhaW4sIEFSTTY0LXNwZWNpZmljIGFuZCBvbmx5IGluY2x1ZGVkIHdpdGhpbiBBUk02NCBmaWxlcy4gSXQgaXMgaXJyZWxldmFudCBvbiBhbWQ2NC4KNC4gICoqYHRvb2xzLypgOioqIFRoaXMgY292ZXJzIGNvZGUgaW4gYHRvb2xzL2FyY2gvYXJtNjQvYCwgYHRvb2xzL2luY2x1ZGUvbGludXgvYml0ZmllbGQuaGAsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYC4gVGhlc2UgYXJlIHVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNjcmlwdHMsIGFuZCBzZWxmLXRlc3RzLgoKVGhlcmVmb3JlLCAqYWxsKiBtb2RpZmllZCBjb2RlIGZhbGxzIHVuZGVyIG9uZSBvciBtb3JlIG9mIHRoZXNlIHNhZmUgY2F0ZWdvcmllczogdXNlci1zcGFjZSBkaXJlY3RvcmllcywgZG9jdW1lbnRhdGlvbiwgb3IgY29kZSBleGNsdXNpdmUgdG8gYSBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlIHRoYW4gdGhlIHRhcmdldCBhbWQ2NC4gSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGEgZnVsbCBhbmQgY29tcGxldGUgbGlzdCBhbmQgYmUgc3VyZSBubyBvdGhlciBmaWxlIHdhcyBtb2RpZmllZCB1c2luZyBgZ2l0IGRpZmYgLyBzdGF0dXNgIG9yIGBnaXQgZ3JlcGAgb24gdGhpcyBjb21taXQgdG8gY29uZmlybSB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RpZmYgLS1naXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9icGYvZHJnbi5yc3Q9OTk9Rm9yIGV4YW1wbGUsIHRvIHByaW50IGBgc3RydWN0IGJwZl9wcm9nX2F1eGBgIGZvciBCUEYgcHJvZ3JhbSBpZCA1MzA3Nzpcbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9kcmduLnJzdC0xMDMtICAgICUgZ2l0IGRpZmZcbkRvY3VtZW50YXRpb24vYnBmL2RyZ24ucnN0OjEwNDogICAgZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZl9pbnNwZWN0LnB5IGIvdG9vbHMvYnBmX2luc3BlY3QucHlcbkRvY3VtZW50YXRpb24vYnBmL2RyZ24ucnN0LTEwNS0gICAgaW5kZXggNjUwZTIyOC4uYWVhMjM1NyAxMDA3NTVcbi0tXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9jaGVja3VhcGkucnN0PTU0PXdvbiYjMzk7dCBicmVhayB1c2Vyc3BhY2U6OlxuLS1cbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2NoZWNrdWFwaS5yc3QtNjktICAgICAgKiAgY29tcDJfdCBpcyAyNC1iaXQgd2l0aCA1LWJpdCBiYXNlIDIgZXhwb25lbnQgYW5kIDIwIGJpdCBmcmFjdGlvblxuRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMvY2hlY2t1YXBpLnJzdDo3MDogICAgZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMvY2hlY2t1YXBpLnJzdC03MS0gICAgRU9GXG4tLVxuRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMvY2hlY2t1YXBpLnJzdD0zMTA9Q29uc2lkZXIgdGhpcyBjaGFuZ2U6OlxuLS1cbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2NoZWNrdWFwaS5yc3QtMzEyLSAgICBjYXQgXHUwMDNjXHUwMDNjICYjMzk7RU9GJiMzOTsgfCBwYXRjaCAtbCAtcDFcbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2NoZWNrdWFwaS5yc3Q6MzEzOiAgICBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL0tidWlsZCBiL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9LYnVpbGRcbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2NoZWNrdWFwaS5yc3QtMzE0LSAgICBpbmRleCBlYmIxODBhYWM3NGUuLmE5Yzg4YjBhOGIzYiAxMDA2NDRcbi0tXG5Eb2N1bWVudGF0aW9uL2RvYy1ndWlkZS9jb250cmlidXRpbmcucnN0PTg0PWxvb2tlZCBsaWtlIHRoaXM6OlxuLS1cbkRvY3VtZW50YXRpb24vZG9jLWd1aWRlL2NvbnRyaWJ1dGluZy5yc3QtMTAyLVxuRG9jdW1lbnRhdGlvbi9kb2MtZ3VpZGUvY29udHJpYnV0aW5nLnJzdDoxMDM6ICBkaWZmIC0tZ2l0IGEvZHJpdmVycy9kZXZmcmVxL2RldmZyZXEuYyBiL2RyaXZlcnMvZGV2ZnJlcS9kZXZmcmVxLmNcbkRvY3VtZW50YXRpb24vZG9jLWd1aWRlL2NvbnRyaWJ1dGluZy5yc3QtMTA0LSAgaW5kZXggNTdmNjk0NGQ2NWE2Li4wMGM5YjgwYjNkMzMgMTAwNjQ0XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS90cmFuc2h1Z2UucnN0PTczPWNoYW5nZTo6XG5Eb2N1bWVudGF0aW9uL21tL3RyYW5zaHVnZS5yc3QtNzQtXG5Eb2N1bWVudGF0aW9uL21tL3RyYW5zaHVnZS5yc3Q6NzU6XHRkaWZmIC0tZ2l0IGEvbW0vbXJlbWFwLmMgYi9tbS9tcmVtYXAuY1xuRG9jdW1lbnRhdGlvbi9tbS90cmFuc2h1Z2UucnN0LTc2LVx0LS0tIGEvbW0vbXJlbWFwLmNcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9kb2MtZ3VpZGUvY29udHJpYnV0aW5nLnJzdD0zNj1D5Luj56CB57yW6K+R5Zmo5Y+R5Ye655qE6K2m5ZGK5bi45bi45Lya6KKr6KeG5Li66K+v5oql77yM5LuO6ICM5a+86Ie05Ye6546w5LqG5peo5Zyo6K6p57yW6K+R5Zmo6Zet5Zi055qE6KGl5LiB44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZG9jLWd1aWRlL2NvbnRyaWJ1dGluZy5yc3QtODYtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9kb2MtZ3VpZGUvY29udHJpYnV0aW5nLnJzdDo4NzogIGRpZmYgLS1naXQgYS9kcml2ZXJzL2RldmZyZXEvZGV2ZnJlcS5jIGIvZHJpdmVycy9kZXZmcmVxL2RldmZyZXEuY1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZG9jLWd1aWRlL2NvbnRyaWJ1dGluZy5yc3QtODgtICBpbmRleCA1N2Y2OTQ0ZDY1YTYuLjAwYzliODBiM2QzMyAxMDA2NDRcbi0tXG5zY3JpcHRzL2NoZWNrcGF0Y2gucGw9MjY3MT1zdWIgcHJvY2VzcyB7XG4tLVxuc2NyaXB0cy9jaGVja3BhdGNoLnBsLTI4NDQtXHRcdCAgICAoJGxpbmUgPX4gL15yZW5hbWUgKD86ZnJvbXx0bykgXFxTJiM0MztcXHMqJC8gfHxcbnNjcmlwdHMvY2hlY2twYXRjaC5wbDoyODQ1Olx0XHQgICAgICRsaW5lID1+IC9eZGlmZiAtLWdpdCBhXFwvW1xcd1xcL1xcLlxcX1xcLV0mIzQzOyBiXFwvXFxTJiM0MztcXHMqJC8pKSkge1xuc2NyaXB0cy9jaGVja3BhdGNoLnBsLTI4NDYtXHRcdFx0JGlzX3BhdGNoID0gMTtcbi0tXG5zY3JpcHRzL2NoZWNrcGF0Y2gucGwtMjkwMi1cdFx0IyBleHRyYWN0IHRoZSBmaWxlbmFtZSBhcyBpdCBwYXNzZXNcbnNjcmlwdHMvY2hlY2twYXRjaC5wbDoyOTAzOlx0XHRpZiAoJGxpbmUgPX4gL15kaWZmIC0tZ2l0Lio/KFxcUyYjNDM7KSQvKSB7XG5zY3JpcHRzL2NoZWNrcGF0Y2gucGwtMjkwNC1cdFx0XHQkcmVhbGZpbGUgPSAkMTtcbi0tXG5zY3JpcHRzL2dldF9tYWludGFpbmVyLnBsPTU1Mj1mb3JlYWNoIG15ICRmaWxlIChAQVJHVikge1xuLS1cbnNjcmlwdHMvZ2V0X21haW50YWluZXIucGwtNjAxLVx0XHRwdXNoKEBmaWxlcywgJGZpbGVuYW1lKTtcbnNjcmlwdHMvZ2V0X21haW50YWluZXIucGw6NjAyOlx0ICAgIH0gZWxzaWYgKG0vXmRpZmYgLS1naXQgYVxcLyhcXFMmIzQzOykgYlxcLyhcXFMmIzQzOylcXHMqJC8pIHtcbnNjcmlwdHMvZ2V0X21haW50YWluZXIucGwtNjAzLVx0XHRteSAkZmlsZW5hbWUxID0gJDE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg2OTkKCQkJCQkJCW91dHB1dDogMTAwCgkJCQkJCQl0aG91Z2h0czogNjMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgQ29tbWl0IDczNDNjMGJmZjdkNWM1ZWE3YWY5ZTFmMGZiNjU4MTkxYTgwZmJmMTkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkmIzM5O3ZlIGdvdCB0aGUgbGlzdCBvZiBtb2RpZmllZCBmaWxlczogYERvY3VtZW50YXRpb24vdmlydC9rdm0vKmAsIGBhcmNoL2FybTY0LypgLCBgaW5jbHVkZS9rdm0vYXJtX3BtdS5oYCwgYHRvb2xzLypgLCBhbmQgYGluY2x1ZGUvbGludXgvYml0ZmllbGQuaGAuIE15IGluaXRpYWwgc2NhbiB0ZWxscyBtZSB0aGlzIGlzIGFsbCBwcmV0dHkgdGFyZ2V0ZWQuIE5vbmUgb2YgdGhpcyB0b3VjaGVzIGFueSBhbWQ2NCAoeDg2XzY0KSByZWFjaGFibGUgY29kZS4gU3BlY2lmaWNhbGx5OgoKKiAgIFRoZSBgYXJjaC9hcm02NC8qYCBmaWxlcyBhcmUgQVJNNjQtc3BlY2lmaWMsIGFzIGlzIGBpbmNsdWRlL2t2bS9hcm1fcG11LmhgLgoqICAgVGhlIGB0b29scy8qYCBkaXJlY3RvcnkgY29udGFpbnMgdXNlci1zcGFjZSBzZWxmdGVzdHMgYW5kIHRvb2xzLCBzbyBpdCYjMzk7cyBub3QgZGlyZWN0bHkgaW1wYWN0aW5nIHRoZSBrZXJuZWwgaW1hZ2UgaXRzZWxmLgoqICAgYERvY3VtZW50YXRpb24vKmAgaXMsIHdlbGwsIGRvY3VtZW50YXRpb24uCgpOb3csIGNvbnNpZGVyaW5nIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBmb3IgZnV6emluZywgd2hpY2ggYXJlIHRoZSByZWxldmFudCBvbmVzIGluIHRoaXMgY29udGV4dCwgdGhlIGNvbW1pdCBpcyBjb21wbGV0ZWx5IGNvdmVyZWQgYnkgdGhlc2UgY2FzZXM6CgoqICAgKipOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOioqIEl0IGluY2x1ZGVzIGRvY3VtZW50YXRpb24sIGFuZCB1c2VyLXNwYWNlIHRvb2xzL3NlbGZ0ZXN0cyB0aGF0IGRvbiYjMzk7dCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZS4KKiAgICoqVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOioqIFRoZSBjaGFuZ2VzIGFyZSBleGNsdXNpdmUgdG8gQVJNNjQsIG5vdCBhbWQ2NCwgd2hpY2ggaXMgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgpHaXZlbiB0aGF0IHRoaXMgY29tbWl0IHN0cmljdGx5IGZhbGxzIGludG8gdGhlc2UgY2F0ZWdvcmllcywgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBjcml0ZXJpYSwgSSBtdXN0IGNvbmNsdWRlIHRoYXQgYFdvcnRoRnV6emluZyA9IGZhbHNlYC4gVGhlIGBFbmFibGVDb25maWdzYCBhbmQgYEZvY3VzU3ltYm9sc2AgbGlzdHMgYXJlIGJvdGggZW1wdHksIGFuZCB0aGUgcmVhc29uaW5nIGlzIHRoYXQgdGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIEFSTTY0LXNwZWNpZmljIEtWTSBhbmQgQ1BVIGVycmF0YSBjb2RlLCBvciBkb2N1bWVudGF0aW9uIGFuZCB0b29scywgd2hpY2ggYXJlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiB0aGUgYW1kNjQgYXJjaGl0ZWN0dXJlLgoKSnVzdCBydW5uaW5nIGEgcXVpY2sgc2FuaXR5IGNoZWNrIG9mIHRoZSB2YWx1ZXM6CiogV29ydGhGdXp6aW5nOiBmYWxzZQoqIEVuYWJsZUNvbmZpZ3M6IFtdCiogRm9jdXNTeW1ib2xzOiBbXQoqIFJlYXNvbmluZzogQ2xlYXIgYW5kIGNvbmNpc2UuCgpFdmVyeXRoaW5nIGNoZWNrcyBvdXQuIEkmIzM5O20gY29uZmlkZW50IGluIHRoaXMgYXNzZXNzbWVudC4gSSYjMzk7bSBub3cgZ29pbmcgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtBbGwgbW9kaWZpZWQga2VybmVsIGNvZGUgaXMgZXhjbHVzaXZlIHRvIHRoZSBhcm02NCBhcmNoaXRlY3R1cmUgKGFyY2gvYXJtNjQgYW5kIGluY2x1ZGUva3ZtL2FybV9wbXUuaCksIHdpdGggdGhlIHJlbWFpbmluZyBjaGFuZ2VzIGxvY2F0ZWQgaW4gRG9jdW1lbnRhdGlvbi8gYW5kIHVzZXItc3BhY2UgdG9vbHMvc2VsZnRlc3RzICh0b29scy8pLiBOb25lIG9mIHRoZSBtb2RpZmllZCBjb2RlIGlzIGNvbXBpbGVkIG9yIHJlYWNoYWJsZSBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtBbGwgbW9kaWZpZWQga2VybmVsIGNvZGUgaXMgZXhjbHVzaXZlIHRvIHRoZSBhcm02NCBhcmNoaXRlY3R1cmUgKGFyY2gvYXJtNjQgYW5kIGluY2x1ZGUva3ZtL2FybV9wbXUuaCksIHdpdGggdGhlIHJlbWFpbmluZyBjaGFuZ2VzIGxvY2F0ZWQgaW4gRG9jdW1lbnRhdGlvbi8gYW5kIHVzZXItc3BhY2UgdG9vbHMvc2VsZnRlc3RzICh0b29scy8pLiBOb25lIG9mIHRoZSBtb2RpZmllZCBjb2RlIGlzIGNvbXBpbGVkIG9yIHJlYWNoYWJsZSBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMjo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTRUMTI6NTQ6MzYuNjk4Mjg2NDU5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgyMzU5NjE5MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIkFsbCBtb2RpZmllZCBrZXJuZWwgY29kZSBpcyBleGNsdXNpdmUgdG8gdGhlIGFybTY0IGFyY2hpdGVjdHVyZSAoYXJjaC9hcm02NCBhbmQgaW5jbHVkZS9rdm0vYXJtX3BtdS5oKSwgd2l0aCB0aGUgcmVtYWluaW5nIGNoYW5nZXMgbG9jYXRlZCBpbiBEb2N1bWVudGF0aW9uLyBhbmQgdXNlci1zcGFjZSB0b29scy9zZWxmdGVzdHMgKHRvb2xzLykuIE5vbmUgb2YgdGhlIG1vZGlmaWVkIGNvZGUgaXMgY29tcGlsZWQgb3IgcmVhY2hhYmxlIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo1NDozNi42OTgyOTM0OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI0NjM1NDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzM0M2MwYmZmN2Q1YzVlYTdhZjllMWYwZmI2NTgxOTFhODBmYmYxOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCAxNCAxMjo1NDozNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcXG5pbmRleCA0OTg4YzMyZGY0YmY4Li40MjA2NTEzODYwM2I3IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxcbkBAIC0zNTIxLDkgKzM1MjEsMTMgQEAgUG9zc2libGUgZmVhdHVyZXM6XFxuIFxcbiBcXHQgICAgKiBVc2Vyc3BhY2UgbXVzdCBleHBsaWNpdGx5IHNlbGVjdCBhIFBNVSBpbXBsZW1lbnRhdGlvbiBiZWZvcmVcXG4gXFx0ICAgICAgaW5pdGlhbGl6aW5nIHRoZSBQTVUgb3IgY29uZmlndXJpbmcgYSBQTVUgZXZlbnQgZmlsdGVyXFxuK1xcdCAgICAgIChLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkgYWxzbyBzYXRpc2ZpZXMgdGhlXFxuK1xcdCAgICAgIGluaXRpYWxpemF0aW9uIHJlcXVpcmVtZW50OyBldmVudCBmaWx0ZXJpbmcgcmVtYWlucyB1bmF2YWlsYWJsZVxcbitcXHQgICAgICBpbiB0aGF0IG1vZGUpXFxuIFxcbi1cXHQgICAgKiBJZiB0aGUgUE1VIGltcGxlbWVudHMgRkVBVF9QTVV2M3A0LCBQTU1JUl9FTDEuU0xPVFMgcHJvdmlkZXMgdGhlXFxuLVxcdCAgICAgIGhhcmR3YXJlIHZhbHVlIG9mIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uXFxuK1xcdCAgICAqIElmIGEgaGFyZHdhcmUgUE1VIGlzIHNlbGVjdGVkIGFuZCBpbXBsZW1lbnRzIEZFQVRfUE1VdjNwNCxcXG4rXFx0ICAgICAgUE1NSVJfRUwxLlNMT1RTIHByb3ZpZGVzIGl0cyBoYXJkd2FyZSB2YWx1ZS4gSW4gZml4ZWQtY291bnRlcnMtb25seVxcbitcXHQgICAgICBtb2RlLCBQTU1JUl9FTDEgcmVhZHMgYXMgemVyb1xcbiBcXG4gXFx0ICAgICogV3JpdGVzIHRvIFBNQ1JfRUwwLk4gdmlhIEtWTV9TRVRfT05FX1JFRyBhcmUgaWdub3JlZFxcbiBcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0XFxuaW5kZXggZGViNWM1MWJjMDBjOC4uNGVjMzI5MWYwYmE3NCAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3RcXG5AQCAtNTMsOSArNTMsOSBAQCBSZXR1cm5zOlxcbiBcXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuIFxcdCAtRUVYSVNUICBJbnRlcnJ1cHQgbnVtYmVyIGFscmVhZHkgdXNlZFxcbiBcXHQgLUVOT0RFViAgUE1VdjMgbm90IHN1cHBvcnRlZCBvciBHSUMgbm90IGluaXRpYWxpemVkXFxuLVxcdCAtRU5YSU8gICBQTVV2MyBub3Qgc3VwcG9ydGVkLCBtaXNzaW5nIFZDUFUgZmVhdHVyZSwgbWlzc2luZ1xcbi0gICAgICAgICAgICAgICAgICBoYXJkd2FyZSBQTVUsIG9yIGludGVycnVwdCBudW1iZXIgbm90IHNldCAobm9uLUdJQ3Y1XFxuLSAgICAgICAgICAgICAgICAgIGd1ZXN0cywgb25seSlcXG4rXFx0IC1FTlhJTyAgIFBNVXYzIG5vdCBzdXBwb3J0ZWQsIG1pc3NpbmcgVkNQVSBmZWF0dXJlLFxcbitcXHRcXHQgIG5laXRoZXIgaGFyZHdhcmUgUE1VIG5vciBGSVhFRF9DT1VOVEVSU19PTkxZIHNlbGVjdGVkLFxcbitcXHRcXHQgIG9yIGludGVycnVwdCBudW1iZXIgbm90IHNldCAobm9uLUdJQ3Y1IGd1ZXN0cyBvbmx5KVxcbiBcXHQgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZFxcbiBcXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuIFxcbkBAIC02NCw3ICs2NCw4IEBAIHZpcnR1YWwgR0lDIGltcGxlbWVudGF0aW9uLCB0aGlzIG11c3QgYmUgZG9uZSBhZnRlciBpbml0aWFsaXppbmcgdGhlIGluLWtlcm5lbFxcbiBpcnFjaGlwLlxcbiBcXG4gV2hlbiB0aGUgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TVFJJQ1QgdkNQVSBmZWF0dXJlIGlzIGVuYWJsZWQgdGhpcyBtdXN0IGJlIGRvbmVcXG4tYWZ0ZXIgc2VsZWN0aW5nIGEgaGFyZHdhcmUgUE1VLlxcbithZnRlciBzZWxlY3RpbmcgYSBoYXJkd2FyZSBQTVUgb3IgZW5hYmxpbmdcXG4rS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLlxcbiBcXG4gMS4zIEFUVFJJQlVURTogS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVJcXG4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG5AQCAtNzgsNyArNzksOCBAQCBhZnRlciBzZWxlY3RpbmcgYSBoYXJkd2FyZSBQTVUuXFxuIFxcdCAtRU5PREVWICBQTVV2MyBub3Qgc3VwcG9ydGVkIG9yIEdJQyBub3QgaW5pdGlhbGl6ZWRcXG4gXFx0IC1FTlhJTyAgIFBNVXYzIG5vdCBwcm9wZXJseSBjb25maWd1cmVkIG9yIGluLWtlcm5lbCBpcnFjaGlwIG5vdFxcbiBcXHQgXFx0ICBjb25maWd1cmVkIGFzIHJlcXVpcmVkIHByaW9yIHRvIGNhbGxpbmcgdGhpcyBhdHRyaWJ1dGVcXG4tXFx0IC1FQlVTWSAgIFBNVXYzIGFscmVhZHkgaW5pdGlhbGl6ZWQgb3IgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1blxcbitcXHQgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCwgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1biBvclxcbitcXHRcXHQgIEZJWEVEX0NPVU5URVJTX09OTFkgaGFzIGFscmVhZHkgYmVlbiBzZXRcXG4gXFx0IC1FSU5WQUwgIEludmFsaWQgZmlsdGVyIHJhbmdlXFxuIFxcdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4gXFxuQEAgLTEyMywxNCArMTI1LDE0IEBAIGFmdGVyIHNlbGVjdGluZyBhIGhhcmR3YXJlIFBNVS5cXG4gXFxuIDpSZXR1cm5zOlxcbiBcXG4tXFx0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFx0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuIFxcdCAtRUJVU1kgICBQTVV2MyBhbHJlYWR5IGluaXRpYWxpemVkLCBhIFZDUFUgaGFzIGFscmVhZHkgcnVuIG9yXFxuLSAgICAgICAgICAgICAgICAgIGFuIGV2ZW50IGZpbHRlciBoYXMgYWxyZWFkeSBiZWVuIHNldFxcbisgICAgICAgICAgICAgICAgICBhbiBldmVudCBmaWx0ZXIgb3IgRklYRURfQ09VTlRFUlNfT05MWSBoYXMgYWxyZWFkeSBiZWVuIHNldFxcbiBcXHQgLUVGQVVMVCAgRXJyb3IgYWNjZXNzaW5nIHRoZSBQTVUgaWRlbnRpZmllclxcbiBcXHQgLUVOWElPICAgUE1VIG5vdCBmb3VuZFxcbiBcXHQgLUVOT0RFViAgUE1VdjMgbm90IHN1cHBvcnRlZCBvciBHSUMgbm90IGluaXRpYWxpemVkXFxuIFxcdCAtRU5PTUVNICBDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5XFxuLVxcdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiBcXG4gUmVxdWVzdCB0aGF0IHRoZSBWQ1BVIHVzZXMgdGhlIHNwZWNpZmllZCBoYXJkd2FyZSBQTVUgd2hlbiBjcmVhdGluZyBndWVzdCBldmVudHNcXG4gZm9yIHRoZSBwdXJwb3NlIG9mIFBNVSBlbXVsYXRpb24uIFRoZSBQTVUgaWRlbnRpZmllciBjYW4gYmUgcmVhZCBmcm9tIHRoZSBcXFwidHlwZVxcXCJcXG5AQCAtMTcyLDYgKzE3NCwzMCBAQCBleHBsaWNpdGx5IHNlbGVjdGVkLCBvciB0aGUgbnVtYmVyIG9mIGNvdW50ZXJzIGlzIG91dCBvZiByYW5nZSBmb3IgdGhlXFxuIHNlbGVjdGVkIFBNVS4gU2VsZWN0aW5nIGEgbmV3IFBNVSBjYW5jZWxzIHRoZSBlZmZlY3Qgb2Ygc2V0dGluZyB0aGlzXFxuIGF0dHJpYnV0ZS5cXG4gXFxuKzEuNiBBVFRSSUJVVEU6IEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWVxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rXFxuKzpQYXJhbWV0ZXJzOiBubyBhZGRpdGlvbmFsIHBhcmFtZXRlciBpbiBrdm1fZGV2aWNlX2F0dHIuYWRkclxcbitcXG4rOlJldHVybnM6XFxuK1xcbitcXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFx0IC1FQlVTWSAgIFBNVXYzIGFscmVhZHkgaW5pdGlhbGl6ZWQsIGEgVkNQVSBoYXMgYWxyZWFkeSBydW4sXFxuK1xcdFxcdCAgYW4gZXZlbnQgZmlsdGVyIGhhcyBhbHJlYWR5IGJlZW4gc2V0IG9yXFxuK1xcdFxcdCAgYSBoYXJkd2FyZSBQTVUgaGFzIGFscmVhZHkgYmVlbiBzcGVjaWZpZWRcXG4rXFx0IC1FTlhJTyAgIEF0dGVtcHRlZCB0byBnZXQgYmVmb3JlIHNldHRpbmdcXG4rXFx0IC1FTk9ERVYgIEF0dGVtcHRlZCB0byBzZXQgd2hpbGUgUE1VdjMgbm90IHN1cHBvcnRlZFxcbitcXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFxuK0lmIHNldCwgS1ZNIGVtdWxhdGVzIFBNVXYzIHdpdGhvdXQgcHJvZ3JhbW1hYmxlIGV2ZW50IGNvdW50ZXJzLlxcbitcXG4rV2l0aCBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NUUklDVCwgZW5hYmxpbmcgdGhpcyBhdHRyaWJ1dGUgc2F0aXNmaWVzIHRoZVxcbitQTVUgc2VsZWN0aW9uIHJlcXVpcmVtZW50IGZvciBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQuXFxuK1xcbitXaGVuIHRoaXMgYXR0cmlidXRlIGlzIGVuYWJsZWQsIHRoZSB2Q1BVIGNhbiBydW4gb24gYW55IHBoeXNpY2FsIENQVVxcbit0aGF0IGhhcyBhIFBNVSwgcmVnYXJkbGVzcyBvZiB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbi4gVGhpc1xcbithdHRyaWJ1dGUgaXMgVk0tc2NvcGVkLlxcbitcXG4gMi4gR1JPVVA6IEtWTV9BUk1fVkNQVV9USU1FUl9DVFJMXFxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuaW5kZXggMjdmZTBjZDViMmQ3YS4uMTBlM2ZmNDEwNzllOCAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5AQCAtMzY3LDYgKzM2NywxMCBAQCBzdHJ1Y3Qga3ZtX2FyY2gge1xcbiAjZGVmaW5lIEtWTV9BUkNIX0ZMQUdfV1JJVEFCTEVfSU1QX0lEX1JFR1NcXHRcXHQxMFxcbiBcXHQvKiBVbmhhbmRsZWQgU0VBcyBhcmUgdGFrZW4gdG8gdXNlcnNwYWNlICovXFxuICNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19FWElUX1NFQVxcdFxcdFxcdFxcdDExXFxuK1xcdC8qIFBNVXYzIGlzIGVtdWxhdGVkIHdpdGggYW4gZXhwbGljaXRseSBzcGVjaWZpZWQgaGFyZHdhcmUgUE1VICovXFxuKyNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRVhQTElDSVRcXHRcXHRcXHQxMlxcbitcXHQvKiBQTVV2MyBpcyBlbXVsYXRlZCB3aXRob3V0IHByb2dyYW1tYWJsZSBldmVudCBjb3VudGVycyAqL1xcbisjZGVmaW5lIEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlcXHQxM1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG4gXFx0LyogVk0td2lkZSB2Q1BVIGZlYXR1cmUgc2V0ICovXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxcbmluZGV4IDAxOWU1ZTNkODkyZTYuLjNiZDdmMjAxMjUyYTEgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXFxuQEAgLTQzOCw2ICs0MzgsNyBAQCBlbnVtIHtcXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSXFx0XFx0MlxcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VXFx0XFx0M1xcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlNcXHQ0XFxuKyNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlcXHQ1XFxuICNkZWZpbmUgS1ZNX0FSTV9WQ1BVX1RJTUVSX0NUUkxcXHRcXHQxXFxuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfVElNRVJfSVJRX1ZUSU1FUlxcdFxcdDBcXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9USU1FUl9JUlFfUFRJTUVSXFx0XFx0MVxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVfZXJyYXRhLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVfZXJyYXRhLmNcXG5pbmRleCA3OGU0ZTEwNWY2YWI1Li45YjJkOWQwZjE3Mzg4IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2NwdV9lcnJhdGEuY1xcbisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdV9lcnJhdGEuY1xcbkBAIC0xMDEyLDcgKzEwMTIsNyBAQCBjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyBhcm02NF9lcnJhdGFbXSA9IHtcXG4gXFx0e1xcbiBcXHRcXHQuZGVzYyA9IFxcXCJBcHBsZSBJTVBERUYgUE1VdjMgVHJhcHNcXFwiLFxcbiBcXHRcXHQuY2FwYWJpbGl0eSA9IEFSTTY0X1dPUktBUk9VTkRfUE1VVjNfSU1QREVGX1RSQVBTLFxcbi1cXHRcXHQudHlwZSA9IEFSTTY0X0NQVUNBUF9MT0NBTF9DUFVfRVJSQVRVTSxcXG4rXFx0XFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfRUFSTFlfTE9DQUxfQ1BVX0ZFQVRVUkUsXFxuIFxcdFxcdC5tYXRjaGVzID0gaGFzX2ltcGRlZl9wbXV2MyxcXG4gXFx0XFx0LmNwdV9lbmFibGUgPSBjcHVfZW5hYmxlX2ltcGRlZl9wbXV2M190cmFwcyxcXG4gXFx0fSxcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vYXJtLmMgYi9hcmNoL2FybTY0L2t2bS9hcm0uY1xcbmluZGV4IGNjYWU4MmMxMjQyYmMuLmRmZWJmZWI5NTYxOTggMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vYXJtLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9hcm0uY1xcbkBAIC02NTIsNiArNjUyLDcgQEAgc3RhdGljIGJvb2wga3ZtX3ZjcHVfc2hvdWxkX2NsZWFyX3R3ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcXG4ge1xcbiBcXHRzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11O1xcbitcXHRpbnQgbGFzdF9jcHUgPSB2Y3B1LVxcdTAwM2VjcHU7XFxuIFxcdGludCAqbGFzdF9yYW47XFxuIFxcbiBcXHRpZiAoaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkpXFxuQEAgLTcwMSw2ICs3MDIsNyBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXFxuIFxcdGlmIChoYXNfdmhlKCkpXFxuIFxcdFxcdGt2bV92Y3B1X2xvYWRfdmhlKHZjcHUpO1xcbiBcXHRrdm1fYXJjaF92Y3B1X2xvYWRfZnAodmNwdSk7XFxuK1xcdGt2bV92Y3B1X2xvYWRfcG11KHZjcHUsIGxhc3RfY3B1KTtcXG4gXFx0a3ZtX3ZjcHVfcG11X3Jlc3RvcmVfZ3Vlc3QodmNwdSk7XFxuIFxcdGlmIChrdm1fYXJtX2lzX3B2dGltZV9lbmFibGVkKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoKSlcXG4gXFx0XFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFQ09SRF9TVEVBTCwgdmNwdSk7XFxuQEAgLTc1NCw3ICs3NTYsNiBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0a3ZtX2FybV92bWlkX2NsZWFyX2FjdGl2ZSgpO1xcbiBcXG4gXFx0dmNwdV9jbGVhcl9vbl91bnN1cHBvcnRlZF9jcHUodmNwdSk7XFxuLVxcdHZjcHUtXFx1MDAzZWNwdSA9IC0xO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBfX2t2bV9hcm1fdmNwdV9wb3dlcl9vZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbkBAIC0xNjcwLDI5ICsxNjcxLDI2IEBAIHN0YXRpYyBpbnQgX19rdm1fdmNwdV9zZXRfdGFyZ2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGZlYXR1cmVzID0gaW5pdC1cXHUwMDNlZmVhdHVyZXNbMF07XFxuIFxcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXFx1MDAzZWt2bTtcXG4tXFx0aW50IHJldCA9IC1FSU5WQUw7XFxuK1xcdGludCByZXQ7XFxuIFxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbiBcXG4gXFx0aWYgKHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfVkNQVV9GRUFUVVJFU19DT05GSUdVUkVELCBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmZsYWdzKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAga3ZtX3ZjcHVfaW5pdF9jaGFuZ2VkKHZjcHUsIGluaXQpKVxcbi1cXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0Yml0bWFwX2NvcHkoa3ZtLVxcdTAwM2VhcmNoLnZjcHVfZmVhdHVyZXMsIFxcdTAwMjZmZWF0dXJlcywgS1ZNX1ZDUFVfTUFYX0ZFQVRVUkVTKTtcXG4gXFxuIFxcdHJldCA9IGt2bV9zZXR1cF92Y3B1KHZjcHUpO1xcbiBcXHRpZiAocmV0KVxcbi1cXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHQvKiBOb3cgd2Uga25vdyB3aGF0IGl0IGlzLCB3ZSBjYW4gcmVzZXQgaXQuICovXFxuIFxcdGt2bV9yZXNldF92Y3B1KHZjcHUpO1xcbiBcXG4gXFx0c2V0X2JpdChLVk1fQVJDSF9GTEFHX1ZDUFVfRkVBVFVSRVNfQ09ORklHVVJFRCwgXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5mbGFncyk7XFxuIFxcdHZjcHVfc2V0X2ZsYWcodmNwdSwgVkNQVV9JTklUSUFMSVpFRCk7XFxuLVxcdHJldCA9IDA7XFxuLW91dF91bmxvY2s6XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcXG4tXFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQga3ZtX3ZjcHVfc2V0X3RhcmdldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuQEAgLTE3MDgsNiArMTcwNiw4IEBAIHN0YXRpYyBpbnQga3ZtX3ZjcHVfc2V0X3RhcmdldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XFxuK1xcbiBcXHRpZiAoIWt2bV92Y3B1X2luaXRpYWxpemVkKHZjcHUpKVxcbiBcXHRcXHRyZXR1cm4gX19rdm1fdmNwdV9zZXRfdGFyZ2V0KHZjcHUsIGluaXQpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYyBiL2FyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmNcXG5pbmRleCA1YjFhZjdlMjE3NmZhLi5jNjgzMzFjZGZhZjkzIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jXFxuQEAgLTcsOSArNyw5IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jcHUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2t2bS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva3ZtX2hvc3QuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BlcmZfZXZlbnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BlcmYvYXJtX3BtdS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcmN1bGlzdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdWFjY2Vzcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9lbXVsYXRlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nrdm0vYXJtX3BtdS5oXFx1MDAzZVxcbkBAIC0xNyw2ICsxNywxMCBAQFxcbiBcXG4gI2RlZmluZSBQRVJGX0FUVFJfQ0ZHMV9DT1VOVEVSXzY0QklUXFx0QklUKDApXFxuIFxcbisvKlxcbisgKiBhcm1fcG11cyBpcyBhcHBlbmQtb25seS4ga3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzKCkgZmVlZHMgcGVyc2lzdGVudFxcbisgKiBWTSBzdGF0ZSwgc28gYSB0cnVlIHJlc3VsdCBtdXN0IHJlbWFpbiB2YWxpZCBhZnRlciB0aGUgY2hlY2suXFxuKyAqL1xcbiBzdGF0aWMgTElTVF9IRUFEKGFybV9wbXVzKTtcXG4gc3RhdGljIERFRklORV9NVVRFWChhcm1fcG11c19sb2NrKTtcXG4gXFxuQEAgLTI2LDcgKzMwLDYgQEAgc3RhdGljIGJvb2wga3ZtX3BtdV9jb3VudGVyX2lzX2VuYWJsZWQoc3RydWN0IGt2bV9wbWMgKnBtYyk7XFxuIFxcbiBib29sIGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2Myh2b2lkKVxcbiB7XFxuLVxcdGd1YXJkKG11dGV4KShcXHUwMDI2YXJtX3BtdXNfbG9jayk7XFxuIFxcdHJldHVybiAhbGlzdF9lbXB0eShcXHUwMDI2YXJtX3BtdXMpO1xcbiB9XFxuIFxcbkBAIC04MCw2ICs4MywxMSBAQCB1NjQga3ZtX3BtdV9ldnR5cGVyX21hc2soc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHRyZXR1cm4gbWFzaztcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wga3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHN0cnVjdCBrdm0gKmt2bSlcXG4re1xcbitcXHRyZXR1cm4gdGVzdF9iaXQoS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5mbGFncyk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBrdm1fcG1jX2lzXzY0Yml0IC0gZGV0ZXJtaW5lIGlmIGNvdW50ZXIgaXMgNjRiaXRcXG4gICogQHBtYzogY291bnRlciBjb250ZXh0XFxuQEAgLTMxNywxMiArMzI1LDEyIEBAIHU2NCBrdm1fcG11X2FjY2Vzc2libGVfY291bnRlcl9tYXNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIHU2NCBrdm1fcG11X2ltcGxlbWVudGVkX2NvdW50ZXJfbWFzayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0dTY0IHZhbCA9IEZJRUxEX0dFVChBUk1WOF9QTVVfUE1DUl9OLCBrdm1fdmNwdV9yZWFkX3BtY3IodmNwdSkpO1xcbitcXHR1NjQgbiA9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnM7XFxuIFxcbi1cXHRpZiAodmFsID09IDApXFxuK1xcdGlmIChuID09IDApXFxuIFxcdFxcdHJldHVybiBCSVQoQVJNVjhfUE1VX0NZQ0xFX0lEWCk7XFxuIFxcdGVsc2VcXG4tXFx0XFx0cmV0dXJuIEdFTk1BU0sodmFsIC0gMSwgMCkgfCBCSVQoQVJNVjhfUE1VX0NZQ0xFX0lEWCk7XFxuK1xcdFxcdHJldHVybiBHRU5NQVNLKG4gLSAxLCAwKSB8IEJJVChBUk1WOF9QTVVfQ1lDTEVfSURYKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQga3ZtX3BtY19lbmFibGVfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxcbkBAIC01NzEsNiArNTc5LDIzIEBAIHZvaWQga3ZtX3BtdV9zb2Z0d2FyZV9pbmNyZW1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKVxcbiBcXHRrdm1fcG11X2NvdW50ZXJfaW5jcmVtZW50KHZjcHUsIHZhbCwgQVJNVjhfUE1VVjNfUEVSRkNUUl9TV19JTkNSKTtcXG4gfVxcbiBcXG4rdm9pZCBrdm1fcG11X3JlcXVlc3RfcmVjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdHZjcHUtXFx1MDAzZWFyY2gucG11LmV2ZW50c19uZWVkX3JlY3JlYXRlID0gdHJ1ZTtcXG4rXFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFTE9BRF9QTVUsIHZjcHUpO1xcbit9XFxuK1xcbit2b2lkIGt2bV9wbXVfYXBwbHlfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBvbGQsIHU2NCB2YWwsIGJvb2wgZm9yY2VfcmVsb2FkKVxcbit7XFxuK1xcdHU2NCBjaGFuZ2VkID0gb2xkIF4gdmFsO1xcbitcXG4rXFx0LyogUmVsb2FkIHRoZSBQTVUgaWYgdGhlIHdyaXRlIGFmZmVjdHMgdGhlIGJhY2tpbmcgcGVyZiBldmVudHMuICovXFxuK1xcdGlmIChjaGFuZ2VkIFxcdTAwMjYgKEFSTVY4X1BNVV9QTUNSX0xDIHwgQVJNVjhfUE1VX1BNQ1JfTFApKVxcbitcXHRcXHRrdm1fcG11X3JlcXVlc3RfcmVjcmVhdGUodmNwdSk7XFxuK1xcdGVsc2UgaWYgKGZvcmNlX3JlbG9hZCB8fCAoY2hhbmdlZCBcXHUwMDI2IEFSTVY4X1BNVV9QTUNSX0UpKVxcbitcXHRcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBrdm1fcG11X2hhbmRsZV9wbWNyIC0gaGFuZGxlIFBNQ1IgcmVnaXN0ZXJcXG4gICogQHZjcHU6IFRoZSB2Y3B1IHBvaW50ZXJcXG5AQCAtNTc4LDE5ICs2MDMsMTggQEAgdm9pZCBrdm1fcG11X3NvZnR3YXJlX2luY3JlbWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpXFxuICAqL1xcbiB2b2lkIGt2bV9wbXVfaGFuZGxlX3BtY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKVxcbiB7XFxuK1xcdHU2NCBvbGQgPSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBQTUNSX0VMMCk7XFxuIFxcdGludCBpO1xcbiBcXG4gXFx0LyogRml4dXAgUE1DUl9FTDAgdG8gcmVjb25jaWxlIHRoZSBQTVUgdmVyc2lvbiBhbmQgdGhlIExQIGJpdCAqL1xcbiBcXHRpZiAoIWt2bV9oYXNfZmVhdCh2Y3B1LVxcdTAwM2Vrdm0sIElEX0FBNjRERlIwX0VMMSwgUE1VVmVyLCBWM1A1KSlcXG4gXFx0XFx0dmFsIFxcdTAwMjY9IH5BUk1WOF9QTVVfUE1DUl9MUDtcXG4gXFxuLVxcdC8qIFJlcXVlc3QgYSByZWxvYWQgb2YgdGhlIFBNVSB0byBlbmFibGUvZGlzYWJsZSBhZmZlY3RlZCBjb3VudGVycyAqL1xcbi1cXHRpZiAoKF9fdmNwdV9zeXNfcmVnKHZjcHUsIFBNQ1JfRUwwKSBeIHZhbCkgXFx1MDAyNiBBUk1WOF9QTVVfUE1DUl9FKVxcbi1cXHRcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XFxuLVxcbiBcXHQvKiBUaGUgcmVzZXQgYml0cyBkb24ndCBpbmRpY2F0ZSBhbnkgc3RhdGUsIGFuZCBzaG91bGRuJ3QgYmUgc2F2ZWQuICovXFxuIFxcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBQTUNSX0VMMCwgKHZhbCBcXHUwMDI2IH4oQVJNVjhfUE1VX1BNQ1JfQyB8IEFSTVY4X1BNVV9QTUNSX1ApKSk7XFxuIFxcbitcXHRrdm1fcG11X2FwcGx5X3BtY3IodmNwdSwgb2xkLCBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBQTUNSX0VMMCksIGZhbHNlKTtcXG4rXFxuIFxcdGlmICh2YWwgXFx1MDAyNiBBUk1WOF9QTVVfUE1DUl9DKVxcbiBcXHRcXHRrdm1fcG11X3NldF9jb3VudGVyX3ZhbHVlKHZjcHUsIEFSTVY4X1BNVV9DWUNMRV9JRFgsIDApO1xcbiBcXG5AQCAtNjA2LDYgKzYzMCwyMCBAQCB2b2lkIGt2bV9wbXVfaGFuZGxlX3BtY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKVxcbiBcXHR9XFxuIH1cXG4gXFxuK3ZvaWQga3ZtX3BtdV9hcHBseV9tZGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9sZCwgdTY0IHZhbClcXG4re1xcbitcXHR1NjQgY2hhbmdlZCA9IG9sZCBeIHZhbDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEhQTU4gZGV0ZXJtaW5lcyB3aGljaCBjb3VudGVycyBIUE1EIGFuZCBITFAgYXBwbHkgdG8uIENoYW5nZXMgdG9cXG4rXFx0ICogdGhlc2UgZmllbGRzIHJlcXVpcmUgbmV3IHBlcmYgZXZlbnQgZmlsdGVycyBhbmQgc2FtcGxlIHBlcmlvZHMuXFxuK1xcdCAqL1xcbitcXHRpZiAoY2hhbmdlZCBcXHUwMDI2IChNRENSX0VMMl9IUE1OIHwgTURDUl9FTDJfSFBNRCB8IE1EQ1JfRUwyX0hMUCkpXFxuK1xcdFxcdGt2bV9wbXVfcmVxdWVzdF9yZWNyZWF0ZSh2Y3B1KTtcXG4rXFx0ZWxzZSBpZiAoY2hhbmdlZCBcXHUwMDI2IE1EQ1JfRUwyX0hQTUUpXFxuK1xcdFxcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUxPQURfUE1VLCB2Y3B1KTtcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wga3ZtX3BtdV9jb3VudGVyX2lzX2VuYWJsZWQoc3RydWN0IGt2bV9wbWMgKnBtYylcXG4ge1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fcG1jX3RvX3ZjcHUocG1jKTtcXG5AQCAtNjQ5LDEwICs2ODcsOCBAQCBzdGF0aWMgYm9vbCBrdm1fcG1jX2NvdW50c19hdF9lbDIoc3RydWN0IGt2bV9wbWMgKnBtYylcXG4gXFx0cmV0dXJuIGt2bV9wbWNfcmVhZF9ldnRyZWcocG1jKSBcXHUwMDI2IEFSTVY4X1BNVV9JTkNMVURFX0VMMjtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBrdm1fbWFwX3BtdV9ldmVudChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBldmVudHNlbClcXG4rc3RhdGljIGludCBrdm1fbWFwX3BtdV9ldmVudChzdHJ1Y3QgYXJtX3BtdSAqcG11LCB1bnNpZ25lZCBpbnQgZXZlbnRzZWwpXFxuIHtcXG4tXFx0c3RydWN0IGFybV9wbXUgKnBtdSA9IGt2bS1cXHUwMDNlYXJjaC5hcm1fcG11O1xcbi1cXG4gXFx0LypcXG4gXFx0ICogVGhlIENQVSBQTVUgbGlrZWx5IGlzbid0IFBNVXYzOyBsZXQgdGhlIGRyaXZlciBwcm92aWRlIGEgbWFwcGluZ1xcbiBcXHQgKiBmb3IgdGhlIGd1ZXN0J3MgUE1VdjMgZXZlbnQgSUQuXFxuQEAgLTY2MywxNCArNjk5LDI3IEBAIHN0YXRpYyBpbnQga3ZtX21hcF9wbXVfZXZlbnQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgZXZlbnRzZWwpXFxuIFxcdHJldHVybiBldmVudHNlbDtcXG4gfVxcbiBcXG4tLyoqXFxuLSAqIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQgLSBjcmVhdGUgYSBwZXJmIGV2ZW50IGZvciBhIGNvdW50ZXJcXG4tICogQHBtYzogQ291bnRlciBjb250ZXh0XFxuLSAqL1xcbi1zdGF0aWMgdm9pZCBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50KHN0cnVjdCBrdm1fcG1jICpwbWMpXFxuK3N0YXRpYyBzdHJ1Y3QgYXJtX3BtdSAqa3ZtX3BtdV9wcm9iZV9hcm1wbXUoaW50IGNwdSlcXG4re1xcbitcXHRzdHJ1Y3QgYXJtX3BtdV9lbnRyeSAqZW50cnk7XFxuK1xcdHN0cnVjdCBhcm1fcG11ICpwbXU7XFxuK1xcbitcXHRndWFyZChyY3UpKCk7XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbnRyeSwgXFx1MDAyNmFybV9wbXVzLCBlbnRyeSkge1xcbitcXHRcXHRwbXUgPSBlbnRyeS1cXHUwMDNlYXJtX3BtdTtcXG4rXFxuK1xcdFxcdGlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgXFx1MDAyNnBtdS1cXHUwMDNlc3VwcG9ydGVkX2NwdXMpKVxcbitcXHRcXHRcXHRyZXR1cm4gcG11O1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdShzdHJ1Y3Qga3ZtX3BtYyAqcG1jLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGFybV9wbXUgKmFybV9wbXUpXFxuIHtcXG4gXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX3BtY190b192Y3B1KHBtYyk7XFxuLVxcdHN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0gdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmFybV9wbXU7XFxuIFxcdHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDtcXG4gXFx0c3RydWN0IHBlcmZfZXZlbnRfYXR0ciBhdHRyO1xcbiBcXHRpbnQgZXZlbnRzZWw7XFxuQEAgLTcwNCw3ICs3NTMsNyBAQCBzdGF0aWMgdm9pZCBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50KHN0cnVjdCBrdm1fcG1jICpwbWMpXFxuIFxcdCAqIERvbid0IGNyZWF0ZSBhbiBldmVudCBpZiB3ZSdyZSBydW5uaW5nIG9uIGhhcmR3YXJlIHRoYXQgcmVxdWlyZXNcXG4gXFx0ICogUE1VdjMgZXZlbnQgdHJhbnNsYXRpb24gYW5kIHdlIGNvdWxkbid0IGZpbmQgYSB2YWxpZCBtYXBwaW5nLlxcbiBcXHQgKi9cXG4tXFx0ZXZlbnRzZWwgPSBrdm1fbWFwX3BtdV9ldmVudCh2Y3B1LVxcdTAwM2Vrdm0sIGV2ZW50c2VsKTtcXG4rXFx0ZXZlbnRzZWwgPSBrdm1fbWFwX3BtdV9ldmVudChhcm1fcG11LCBldmVudHNlbCk7XFxuIFxcdGlmIChldmVudHNlbCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuQEAgLTc0OSw2ICs3OTgsMzIgQEAgc3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxcbiBcXHRwbWMtXFx1MDAzZXBlcmZfZXZlbnQgPSBldmVudDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQgLSBjcmVhdGUgYSBwZXJmIGV2ZW50IGZvciBhIGNvdW50ZXJcXG4rICogQHBtYzogQ291bnRlciBjb250ZXh0XFxuKyAqL1xcbitzdGF0aWMgdm9pZCBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50KHN0cnVjdCBrdm1fcG1jICpwbWMpXFxuK3tcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX3BtY190b192Y3B1KHBtYyk7XFxuK1xcdHN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0gdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmFybV9wbXU7XFxuK1xcbitcXHRpZiAoa3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXFx1MDAzZWt2bSkpIHtcXG4rXFx0XFx0ZG8ge1xcbitcXHRcXHRcXHRhcm1fcG11ID0ga3ZtX3BtdV9wcm9iZV9hcm1wbXUoUkVBRF9PTkNFKHZjcHUtXFx1MDAzZWNwdSkpO1xcbitcXG4rXFx0XFx0XFx0aWYgKCFhcm1fcG11KSB7XFxuK1xcdFxcdFxcdFxcdHByX3dhcm5fb25jZShcXFwia3ZtOiBVbnN1cHBvcnRlZCBQTVUgdmFyaWF0aW9uIGRldGVjdGVkLlxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdGFkZF90YWludChUQUlOVF9DUFVfT1VUX09GX1NQRUMsIExPQ0tERVBfU1RJTExfT0spO1xcbitcXHRcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnRfd2l0aF9wbXUocG1jLCBhcm1fcG11KTtcXG4rXFx0XFx0fSB3aGlsZSAoIWNwdW1hc2tfdGVzdF9jcHUoUkVBRF9PTkNFKHZjcHUtXFx1MDAzZWNwdSksIFxcdTAwMjZhcm1fcG11LVxcdTAwM2VzdXBwb3J0ZWRfY3B1cykpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50X3dpdGhfcG11KHBtYywgYXJtX3BtdSk7XFxuK1xcdH1cXG4rfVxcbitcXG4gLyoqXFxuICAqIGt2bV9wbXVfc2V0X2NvdW50ZXJfZXZlbnRfdHlwZSAtIHNldCBzZWxlY3RlZCBjb3VudGVyIHRvIG1vbml0b3Igc29tZSBldmVudFxcbiAgKiBAdmNwdTogVGhlIHZjcHUgcG9pbnRlclxcbkBAIC03ODksNDMgKzg2NCw3IEBAIHZvaWQga3ZtX2hvc3RfcG11X2luaXQoc3RydWN0IGFybV9wbXUgKnBtdSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0ZW50cnktXFx1MDAzZWFybV9wbXUgPSBwbXU7XFxuLVxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmVudHJ5LVxcdTAwM2VlbnRyeSwgXFx1MDAyNmFybV9wbXVzKTtcXG4tfVxcbi1cXG4tc3RhdGljIHN0cnVjdCBhcm1fcG11ICprdm1fcG11X3Byb2JlX2FybXBtdSh2b2lkKVxcbi17XFxuLVxcdHN0cnVjdCBhcm1fcG11X2VudHJ5ICplbnRyeTtcXG4tXFx0c3RydWN0IGFybV9wbXUgKnBtdTtcXG4tXFx0aW50IGNwdTtcXG4tXFxuLVxcdGd1YXJkKG11dGV4KShcXHUwMDI2YXJtX3BtdXNfbG9jayk7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBJdCBpcyBzYWZlIHRvIHVzZSBhIHN0YWxlIGNwdSB0byBpdGVyYXRlIHRoZSBsaXN0IG9mIFBNVXMgc28gbG9uZyBhc1xcbi1cXHQgKiB0aGUgc2FtZSB2YWx1ZSBpcyB1c2VkIGZvciB0aGUgZW50aXJldHkgb2YgdGhlIGxvb3AuIEdpdmVuIHRoaXMsIGFuZFxcbi1cXHQgKiB0aGUgZmFjdCB0aGF0IG5vIHBlcmNwdSBkYXRhIGlzIHVzZWQgZm9yIHRoZSBsb29rdXAgdGhlcmUgaXMgbm8gbmVlZFxcbi1cXHQgKiB0byBkaXNhYmxlIHByZWVtcHRpb24uXFxuLVxcdCAqXFxuLVxcdCAqIEl0IGlzIHN0aWxsIG5lY2Vzc2FyeSB0byBnZXQgYSB2YWxpZCBjcHUsIHRob3VnaCwgdG8gcHJvYmUgZm9yIHRoZVxcbi1cXHQgKiBkZWZhdWx0IFBNVSBpbnN0YW5jZSBhcyB1c2Vyc3BhY2UgaXMgbm90IHJlcXVpcmVkIHRvIHNwZWNpZnkgYSBQTVVcXG4tXFx0ICogdHlwZS4gSW4gb3JkZXIgdG8gdXBob2xkIHRoZSBwcmVleGlzdGluZyBiZWhhdmlvciBLVk0gc2VsZWN0cyB0aGVcXG4tXFx0ICogUE1VIGluc3RhbmNlIGZvciB0aGUgY29yZSBkdXJpbmcgdmNwdSBpbml0LiBBIGRlcGVuZGVudCB1c2VcXG4tXFx0ICogY2FzZSB3b3VsZCBiZSBhIHVzZXIgd2l0aCBkaXNkYWluIG9mIGFsbCB0aGluZ3MgYmlnLkxJVFRMRSB0aGF0XFxuLVxcdCAqIGFmZmluZXMgdGhlIFZNTSB0byBhIHBhcnRpY3VsYXIgY2x1c3RlciBvZiBjb3Jlcy5cXG4tXFx0ICpcXG4tXFx0ICogSW4gYW55IGNhc2UsIHVzZXJzcGFjZSBzaG91bGQganVzdCBkbyB0aGUgc2FuZSB0aGluZyBhbmQgdXNlIHRoZSBVQVBJXFxuLVxcdCAqIHRvIHNlbGVjdCBhIFBNVSB0eXBlIGRpcmVjdGx5LiBCdXQsIGJlIHdhcnkgb2YgdGhlIGJhZ2dhZ2UgYmVpbmdcXG4tXFx0ICogY2FycmllZCBoZXJlLlxcbi1cXHQgKi9cXG4tXFx0Y3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTtcXG4tXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXFx1MDAyNmFybV9wbXVzLCBlbnRyeSkge1xcbi1cXHRcXHRwbXUgPSBlbnRyeS1cXHUwMDNlYXJtX3BtdTtcXG4tXFxuLVxcdFxcdGlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgXFx1MDAyNnBtdS1cXHUwMDNlc3VwcG9ydGVkX2NwdXMpKVxcbi1cXHRcXHRcXHRyZXR1cm4gcG11O1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gTlVMTDtcXG4rXFx0bGlzdF9hZGRfdGFpbF9yY3UoXFx1MDAyNmVudHJ5LVxcdTAwM2VlbnRyeSwgXFx1MDAyNmFybV9wbXVzKTtcXG4gfVxcbiBcXG4gc3RhdGljIHU2NCBfX2NvbXB1dGVfcG1jZWlkKHN0cnVjdCBhcm1fcG11ICpwbXUsIGJvb2wgcG1jZWlkMSlcXG5AQCAtODcxLDYgKzkxMCwxMyBAQCB1NjQga3ZtX3BtdV9nZXRfcG1jZWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBwbWNlaWQxKVxcbiBcXHR1NjQgdmFsLCBtYXNrID0gMDtcXG4gXFx0aW50IGJhc2UsIGksIG5yX2V2ZW50cztcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIEhpZGUgdGhlIGhhcmR3YXJlIFBNVSdzIGV2ZW50IHNldCB0byBrZWVwIFBNQ0VJRCBzdGFibGUgYWNyb3NzXFxuK1xcdCAqIHBoeXNpY2FsIENQVSBtaWdyYXRpb24uXFxuK1xcdCAqL1xcbitcXHRpZiAoa3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXFx1MDAzZWt2bSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4gXFx0aWYgKCFwbWNlaWQxKSB7XFxuIFxcdFxcdHZhbCA9IGNvbXB1dGVfcG1jZWlkMCh2Y3B1KTtcXG4gXFx0XFx0YmFzZSA9IDA7XFxuQEAgLTg5OCw5ICs5NDQsMjcgQEAgdTY0IGt2bV9wbXVfZ2V0X3BtY2VpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcG1jZWlkMSlcXG4gXFx0cmV0dXJuIHZhbCBcXHUwMDI2IG1hc2s7XFxuIH1cXG4gXFxuK3ZvaWQga3ZtX3ZjcHVfbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbGFzdF9jcHUpXFxuK3tcXG4rXFx0aWYgKCFrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdS1cXHUwMDNla3ZtKSB8fCB2Y3B1LVxcdTAwM2VjcHUgPT0gbGFzdF9jcHUgfHwgbGFzdF9jcHUgPT0gLTEpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmIChrdm1fcG11X3Byb2JlX2FybXBtdSh2Y3B1LVxcdTAwM2VjcHUpICE9IGt2bV9wbXVfcHJvYmVfYXJtcG11KGxhc3RfY3B1KSlcXG4rXFx0XFx0a3ZtX3BtdV9yZXF1ZXN0X3JlY3JlYXRlKHZjcHUpO1xcbit9XFxuK1xcbiB2b2lkIGt2bV92Y3B1X3JlbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuK1xcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5wbXU7XFxuIFxcdHU2NCBtYXNrID0ga3ZtX3BtdV9pbXBsZW1lbnRlZF9jb3VudGVyX21hc2sodmNwdSk7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKHBtdS1cXHUwMDNlZXZlbnRzX25lZWRfcmVjcmVhdGUpIHtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEtWTV9BUk1WOF9QTVVfTUFYX0NPVU5URVJTOyBpKyspXFxuK1xcdFxcdFxcdGt2bV9wbXVfc3RvcF9jb3VudGVyKGt2bV92Y3B1X2lkeF90b19wbWModmNwdSwgaSkpO1xcbitcXG4rXFx0XFx0cG11LVxcdTAwM2VldmVudHNfbmVlZF9yZWNyZWF0ZSA9IGZhbHNlO1xcbitcXHR9XFxuIFxcbiBcXHRfX3ZjcHVfcm13X3N5c19yZWcodmNwdSwgUE1PVlNTRVRfRUwwLCBcXHUwMDI2PSwgbWFzayk7XFxuIFxcdF9fdmNwdV9ybXdfc3lzX3JlZyh2Y3B1LCBQTUlOVEVOU0VUX0VMMSwgXFx1MDAyNj0sIG1hc2spO1xcbkBAIC05MzksOCArMTAwMyw4IEBAIGludCBrdm1fYXJtX3BtdV92M19lbmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gc3RhdGljIGludCBrdm1fYXJtX3BtdV92M19pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbi1cXHQvKiBPbmx5IHBvc3NpYmxlIHdoZW4gdXNpbmcgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TVFJJQ1QgKi9cXG4tXFx0aWYgKCF2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guYXJtX3BtdSlcXG4rXFx0LyogU3RyaWN0IFBNVXYzIHJlcXVpcmVzIGEgaGFyZHdhcmUgUE1VIG9yIGZpeGVkLWNvdW50ZXJzLW9ubHkgbW9kZS4gKi9cXG4rXFx0aWYgKCF2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guYXJtX3BtdSBcXHUwMDI2XFx1MDAyNiAha3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXFx1MDAzZWt2bSkpXFxuIFxcdFxcdHJldHVybiAtRU5YSU87XFxuIFxcbiBcXHRpZiAoaXJxY2hpcF9pbl9rZXJuZWwodmNwdS1cXHUwMDNla3ZtKSkge1xcbkBAIC0xMDEzLDYgKzEwNzcsOSBAQCB1OCBrdm1fYXJtX3BtdV9nZXRfbWF4X2NvdW50ZXJzKHN0cnVjdCBrdm0gKmt2bSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IGt2bS1cXHUwMDNlYXJjaC5hcm1fcG11O1xcbiBcXG4rXFx0aWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seShrdm0pKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFVuZGVyIEtWTV9BUk1fVkNQVV9QTVVfVjNfU1RSSUNUIG5vIFBNVSBleGlzdHMgdW50aWwgdXNlcnNwYWNlIHNldHNcXG4gXFx0ICogb25lLCBzbyB0aGlzIGNhbiBiZSByZWFjaGVkIGJlZm9yZSBhcm1fcG11IGlzIHNldC4gUmVwb3J0IG5vXFxuQEAgLTEwMzUsMzAgKzExMDIsMTIgQEAgdTgga3ZtX2FybV9wbXVfZ2V0X21heF9jb3VudGVycyhzdHJ1Y3Qga3ZtICprdm0pXFxuIFxcdHJldHVybiBiaXRtYXBfd2VpZ2h0KGFybV9wbXUtXFx1MDAzZWNudHJfbWFzaywgQVJNVjhfUE1VX01BWF9HRU5FUkFMX0NPVU5URVJTKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQga3ZtX2FybV9zZXRfbnJfY291bnRlcnMoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgbnIpXFxuLXtcXG4tXFx0a3ZtLVxcdTAwM2VhcmNoLm5yX3BtdV9jb3VudGVycyA9IG5yO1xcbi1cXG4tXFx0LyogUmVzZXQgTURDUl9FTDIuSFBNTiBiZWhpbmQgdGhlIHZjcHVzJyBiYWNrLi4uICovXFxuLVxcdGlmICh0ZXN0X2JpdChLVk1fQVJNX1ZDUFVfSEFTX0VMMiwga3ZtLVxcdTAwM2VhcmNoLnZjcHVfZmVhdHVyZXMpKSB7XFxuLVxcdFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4tXFx0XFx0dW5zaWduZWQgbG9uZyBpO1xcbi1cXG4tXFx0XFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKSB7XFxuLVxcdFxcdFxcdHU2NCB2YWwgPSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBNRENSX0VMMik7XFxuLVxcdFxcdFxcdHZhbCBcXHUwMDI2PSB+TURDUl9FTDJfSFBNTjtcXG4tXFx0XFx0XFx0dmFsIHw9IEZJRUxEX1BSRVAoTURDUl9FTDJfSFBNTiwga3ZtLVxcdTAwM2VhcmNoLm5yX3BtdV9jb3VudGVycyk7XFxuLVxcdFxcdFxcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBNRENSX0VMMiwgdmFsKTtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuLX1cXG4tXFxuIHN0YXRpYyB2b2lkIGt2bV9hcm1fc2V0X3BtdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBhcm1fcG11ICphcm1fcG11KVxcbiB7XFxuIFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XFxuIFxcbiBcXHRrdm0tXFx1MDAzZWFyY2guYXJtX3BtdSA9IGFybV9wbXU7XFxuLVxcdGt2bV9hcm1fc2V0X25yX2NvdW50ZXJzKGt2bSwga3ZtX2FybV9wbXVfZ2V0X21heF9jb3VudGVycyhrdm0pKTtcXG4rXFx0a3ZtLVxcdTAwM2VhcmNoLm5yX3BtdV9jb3VudGVycyA9IGt2bV9hcm1fcG11X2dldF9tYXhfY291bnRlcnMoa3ZtKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTEwNzYsNyArMTEyNSwyNCBAQCBzdGF0aWMgdm9pZCBrdm1fYXJtX3NldF9wbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSlcXG4gICovXFxuIGludCBrdm1fYXJtX3NldF9kZWZhdWx0X3BtdShzdHJ1Y3Qga3ZtICprdm0pXFxuIHtcXG4tXFx0c3RydWN0IGFybV9wbXUgKmFybV9wbXUgPSBrdm1fcG11X3Byb2JlX2FybXBtdSgpO1xcbitcXHQvKlxcbitcXHQgKiBJdCBpcyBzYWZlIHRvIHVzZSBhIHN0YWxlIGNwdSB0byBpdGVyYXRlIHRoZSBsaXN0IG9mIFBNVXMgc28gbG9uZyBhc1xcbitcXHQgKiB0aGUgc2FtZSB2YWx1ZSBpcyB1c2VkIGZvciB0aGUgZW50aXJldHkgb2YgdGhlIGxvb3AuIEdpdmVuIHRoaXMsIGFuZFxcbitcXHQgKiB0aGUgZmFjdCB0aGF0IG5vIHBlcmNwdSBkYXRhIGlzIHVzZWQgZm9yIHRoZSBsb29rdXAgdGhlcmUgaXMgbm8gbmVlZFxcbitcXHQgKiB0byBkaXNhYmxlIHByZWVtcHRpb24uXFxuK1xcdCAqXFxuK1xcdCAqIEl0IGlzIHN0aWxsIG5lY2Vzc2FyeSB0byBnZXQgYSB2YWxpZCBjcHUsIHRob3VnaCwgdG8gcHJvYmUgZm9yIHRoZVxcbitcXHQgKiBkZWZhdWx0IFBNVSBpbnN0YW5jZSBhcyB1c2Vyc3BhY2UgaXMgbm90IHJlcXVpcmVkIHRvIHNwZWNpZnkgYSBQTVVcXG4rXFx0ICogdHlwZS4gSW4gb3JkZXIgdG8gdXBob2xkIHRoZSBwcmVleGlzdGluZyBiZWhhdmlvciBLVk0gc2VsZWN0cyB0aGVcXG4rXFx0ICogUE1VIGluc3RhbmNlIGZvciB0aGUgY29yZSBkdXJpbmcgdmNwdSBpbml0LiBBIGRlcGVuZGVudCB1c2VcXG4rXFx0ICogY2FzZSB3b3VsZCBiZSBhIHVzZXIgd2l0aCBkaXNkYWluIG9mIGFsbCB0aGluZ3MgYmlnLkxJVFRMRSB0aGF0XFxuK1xcdCAqIGFmZmluZXMgdGhlIFZNTSB0byBhIHBhcnRpY3VsYXIgY2x1c3RlciBvZiBjb3Jlcy5cXG4rXFx0ICpcXG4rXFx0ICogSW4gYW55IGNhc2UsIHVzZXJzcGFjZSBzaG91bGQganVzdCBkbyB0aGUgc2FuZSB0aGluZyBhbmQgdXNlIHRoZSBVQVBJXFxuK1xcdCAqIHRvIHNlbGVjdCBhIFBNVSB0eXBlIGRpcmVjdGx5LCBvciByZXF1ZXN0IGZpeGVkLWNvdW50ZXJzLW9ubHlcXG4rXFx0ICogZW11bGF0aW9uLiBCdXQsIGJlIHdhcnkgb2YgdGhlIGJhZ2dhZ2UgYmVpbmcgY2FycmllZCBoZXJlLlxcbitcXHQgKi9cXG4rXFx0c3RydWN0IGFybV9wbXUgKmFybV9wbXUgPSBrdm1fcG11X3Byb2JlX2FybXBtdShyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTtcXG4gXFxuIFxcdGlmICghYXJtX3BtdSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuQEAgLTEwOTMsMTcgKzExNTksMTkgQEAgc3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBtdV9pZClcXG4gXFx0aW50IHJldCA9IC1FTlhJTztcXG4gXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNmFybV9wbXVzX2xvY2spO1xcbitcXHRndWFyZChyY3UpKCk7XFxuIFxcbi1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcXHUwMDI2YXJtX3BtdXMsIGVudHJ5KSB7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVudHJ5LCBcXHUwMDI2YXJtX3BtdXMsIGVudHJ5KSB7XFxuIFxcdFxcdGFybV9wbXUgPSBlbnRyeS1cXHUwMDNlYXJtX3BtdTtcXG4gXFx0XFx0aWYgKGFybV9wbXUtXFx1MDAzZXBtdS50eXBlID09IHBtdV9pZCkge1xcbiBcXHRcXHRcXHRpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pIHx8XFxuK1xcdFxcdFxcdCAgICBrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSB8fFxcbiBcXHRcXHRcXHQgICAgKGt2bS1cXHUwMDNlYXJjaC5wbXVfZmlsdGVyIFxcdTAwMjZcXHUwMDI2IGt2bS1cXHUwMDNlYXJjaC5hcm1fcG11ICE9IGFybV9wbXUpKSB7XFxuIFxcdFxcdFxcdFxcdHJldCA9IC1FQlVTWTtcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdH1cXG4gXFxuK1xcdFxcdFxcdHNldF9iaXQoS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRVhQTElDSVQsIFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guZmxhZ3MpO1xcbiBcXHRcXHRcXHRrdm1fYXJtX3NldF9wbXUoa3ZtLCBhcm1fcG11KTtcXG4gXFx0XFx0XFx0Y3B1bWFza19jb3B5KGt2bS1cXHUwMDNlYXJjaC5zdXBwb3J0ZWRfY3B1cywgXFx1MDAyNmFybV9wbXUtXFx1MDAzZXN1cHBvcnRlZF9jcHVzKTtcXG4gXFxuQEAgLTExMjIsMjEgKzExOTAsMzkgQEAgc3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBtdV9pZClcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNmFybV9wbXVzX2xvY2spO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3tcXG4rXFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cXHUwMDNla3ZtO1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcXG4rXFxuK1xcdGlmIChrdm1fdm1faGFzX3Jhbl9vbmNlKGt2bSkgfHwga3ZtLVxcdTAwM2VhcmNoLnBtdV9maWx0ZXIgfHxcXG4rXFx0ICAgIHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0VYUExJQ0lULCBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuK1xcdHNldF9iaXQoS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5mbGFncyk7XFxuK1xcdGt2bS1cXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnMgPSAwO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X25yX2NvdW50ZXJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IG4pXFxuIHtcXG4gXFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cXHUwMDNla3ZtO1xcbiBcXG4rXFx0aWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSlcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuIFxcdGlmICgha3ZtLVxcdTAwM2VhcmNoLmFybV9wbXUpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0aWYgKG4gXFx1MDAzZSBrdm1fYXJtX3BtdV9nZXRfbWF4X2NvdW50ZXJzKGt2bSkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0a3ZtX2FybV9zZXRfbnJfY291bnRlcnMoa3ZtLCBuKTtcXG4rXFx0a3ZtLVxcdTAwM2VhcmNoLm5yX3BtdV9jb3VudGVycyA9IG47XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0xMjAwLDcgKzEyODYsNyBAQCBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbiBcXHRcXHQgICAgIGZpbHRlci5hY3Rpb24gIT0gS1ZNX1BNVV9FVkVOVF9ERU5ZKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRcXHRpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pKVxcbitcXHRcXHRpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pIHx8IGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seShrdm0pKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiBcXG4gXFx0XFx0aWYgKCFrdm0tXFx1MDAzZWFyY2guYXJtX3BtdSlcXG5AQCAtMTI0OCw2ICsxMzM0LDggQEAgaW50IGt2bV9hcm1fcG11X3YzX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4gXFxuIFxcdFxcdHJldHVybiBrdm1fYXJtX3BtdV92M19zZXRfbnJfY291bnRlcnModmNwdSwgbik7XFxuIFxcdH1cXG4rXFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFk6XFxuK1xcdFxcdHJldHVybiBrdm1fYXJtX3BtdV92M19zZXRfcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdSk7XFxuIFxcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklUOlxcbiBcXHRcXHRyZXR1cm4ga3ZtX2FybV9wbXVfdjNfaW5pdCh2Y3B1KTtcXG4gXFx0fVxcbkBAIC0xMjc0LDYgKzEzNjIsOSBAQCBpbnQga3ZtX2FybV9wbXVfdjNfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbiBcXHRcXHRpcnEgPSB2Y3B1LVxcdTAwM2VhcmNoLnBtdS5pcnFfbnVtO1xcbiBcXHRcXHRyZXR1cm4gcHV0X3VzZXIoaXJxLCB1YWRkcik7XFxuIFxcdH1cXG4rXFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFk6XFxuK1xcdFxcdGlmIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdS1cXHUwMDNla3ZtKSlcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiAtRU5YSU87XFxuQEAgLTEyODcsNiArMTM3OCw3IEBAIGludCBrdm1fYXJtX3BtdV92M19oYXNfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuIFxcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVI6XFxuIFxcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VOlxcbiBcXHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfU0VUX05SX0NPVU5URVJTOlxcbitcXHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWTpcXG4gXFx0XFx0aWYgKGt2bV92Y3B1X2hhc19wbXUodmNwdSkpXFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3Jlc2V0LmMgYi9hcmNoL2FybTY0L2t2bS9yZXNldC5jXFxuaW5kZXggMTBlYjcyNDlhYTllOC4uY2RjZGVhODUwOTA5YyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9yZXNldC5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vcmVzZXQuY1xcbkBAIC0xNzgsMTcgKzE3OCwyNCBAQCBzdGF0aWMgdm9pZCBrdm1fdmNwdV9yZXNldF9zdmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB2b2lkIGt2bV9yZXNldF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHRzdHJ1Y3QgdmNwdV9yZXNldF9zdGF0ZSByZXNldF9zdGF0ZTtcXG4tXFx0Ym9vbCBsb2FkZWQ7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqcnVubmluZztcXG4rXFx0Ym9vbCBsb2FkZWQgPSBmYWxzZTtcXG4gXFxuIFxcdHNwaW5fbG9jayhcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5tcF9zdGF0ZV9sb2NrKTtcXG4gXFx0cmVzZXRfc3RhdGUgPSB2Y3B1LVxcdTAwM2VhcmNoLnJlc2V0X3N0YXRlO1xcbiBcXHR2Y3B1LVxcdTAwM2VhcmNoLnJlc2V0X3N0YXRlLnJlc2V0ID0gZmFsc2U7XFxuIFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLm1wX3N0YXRlX2xvY2spO1xcbiBcXG4tXFx0cHJlZW1wdF9kaXNhYmxlKCk7XFxuLVxcdGxvYWRlZCA9ICh2Y3B1LVxcdTAwM2VjcHUgIT0gLTEpO1xcbi1cXHRpZiAobG9hZGVkKVxcbitcXHRndWFyZChwcmVlbXB0KSgpO1xcbitcXG4rXFx0cnVubmluZyA9IGt2bV9nZXRfcnVubmluZ192Y3B1KCk7XFxuK1xcdGlmIChydW5uaW5nKSB7XFxuK1xcdFxcdGlmIChLVk1fQlVHX09OKHJ1bm5pbmcgIT0gdmNwdSwgdmNwdS1cXHUwMDNla3ZtKSlcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0XFx0bG9hZGVkID0gdHJ1ZTtcXG4gXFx0XFx0a3ZtX2FyY2hfdmNwdV9wdXQodmNwdSk7XFxuK1xcdH1cXG4gXFxuIFxcdGlmICgha3ZtX2FybV92Y3B1X3N2ZV9maW5hbGl6ZWQodmNwdSkpIHtcXG4gXFx0XFx0aWYgKHZjcHVfaGFzX2ZlYXR1cmUodmNwdSwgS1ZNX0FSTV9WQ1BVX1NWRSkpXFxuQEAgLTIxNSw3ICsyMjIsNiBAQCB2b2lkIGt2bV9yZXNldF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIFxcdGlmIChsb2FkZWQpXFxuIFxcdFxcdGt2bV9hcmNoX3ZjcHVfbG9hZCh2Y3B1LCBzbXBfcHJvY2Vzc29yX2lkKCkpO1xcbi1cXHRwcmVlbXB0X2VuYWJsZSgpO1xcbiB9XFxuIFxcbiB1MzIga3ZtX2dldF9wYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmNcXG5pbmRleCA0NGFhZTUyYzQ3M2Q3Li5hNWMxMjE0ODJjNzEzIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jXFxuQEAgLTEzMjYsNyArMTMyNiw3IEBAIHN0YXRpYyBib29sIGFjY2Vzc19wbXVfZXZ0eXBlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCxcXG4gXFxuIHN0YXRpYyBpbnQgc2V0X3BtcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqciwgdTY0IHZhbClcXG4ge1xcbi1cXHR1NjQgbWFzayA9IGt2bV9wbXVfYWNjZXNzaWJsZV9jb3VudGVyX21hc2sodmNwdSk7XFxuK1xcdHU2NCBtYXNrID0ga3ZtX3BtdV9pbXBsZW1lbnRlZF9jb3VudGVyX21hc2sodmNwdSk7XFxuIFxcbiBcXHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgci1cXHUwMDNlcmVnLCB2YWwgXFx1MDAyNiBtYXNrKTtcXG4gXFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFTE9BRF9QTVUsIHZjcHUpO1xcbkBAIC0xMzM0LDkgKzEzMzQsMTggQEAgc3RhdGljIGludCBzZXRfcG1yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyLCB1NjQgdmFcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgc2V0X3BtdV9ldnR5cGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4rXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqciwgdTY0IHZhbClcXG4re1xcbitcXHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgci1cXHUwMDNlcmVnLCB2YWwpO1xcbitcXHRrdm1fcG11X3JlcXVlc3RfcmVjcmVhdGUodmNwdSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBnZXRfcG1yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyLCB1NjQgKnZhbClcXG4ge1xcbi1cXHR1NjQgbWFzayA9IGt2bV9wbXVfYWNjZXNzaWJsZV9jb3VudGVyX21hc2sodmNwdSk7XFxuK1xcdHU2NCBtYXNrID0ga3ZtX3BtdV9pbXBsZW1lbnRlZF9jb3VudGVyX21hc2sodmNwdSk7XFxuIFxcbiBcXHQqdmFsID0gX192Y3B1X3N5c19yZWcodmNwdSwgci1cXHUwMDNlcmVnKSBcXHUwMDI2IG1hc2s7XFxuIFxcdHJldHVybiAwO1xcbkBAIC0xNTE3LDYgKzE1MjYsNyBAQCBzdGF0aWMgaW50IHNldF9wbWNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcixcXG4ge1xcbiBcXHR1OCBuZXdfbiA9IEZJRUxEX0dFVChBUk1WOF9QTVVfUE1DUl9OLCB2YWwpO1xcbiBcXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVxcdTAwM2Vrdm07XFxuK1xcdHU2NCBvbGQgPSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCByLVxcdTAwM2VyZWcpO1xcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcXG4gXFxuQEAgLTE1NDksNyArMTU1OSw3IEBAIHN0YXRpYyBpbnQgc2V0X3BtY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyLFxcbiBcXHRcXHR2YWwgfD0gQVJNVjhfUE1VX1BNQ1JfTEM7XFxuIFxcbiBcXHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgci1cXHUwMDNlcmVnLCB2YWwpO1xcbi1cXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XFxuK1xcdGt2bV9wbXVfYXBwbHlfcG1jcih2Y3B1LCBvbGQsIHZhbCwgdHJ1ZSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC0xNTgzLDcgKzE1OTMsNyBAQCBzdGF0aWMgaW50IHNldF9wbWNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcixcXG4gLyogTWFjcm8gdG8gZXhwYW5kIHRoZSBQTUVWVFlQRVJuX0VMMCByZWdpc3RlciAqL1xcbiAjZGVmaW5lIFBNVV9QTUVWVFlQRVJfRUwwKG4pXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHR7IFBNVV9TWVNfUkVHKFBNRVZUWVBFUm5fRUwwKG4pKSxcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdCAgLnJlc2V0ID0gcmVzZXRfcG1ldnR5cGVyLFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ICAucmVzZXQgPSByZXNldF9wbWV2dHlwZXIsIC5zZXRfdXNlciA9IHNldF9wbXVfZXZ0eXBlcixcXHRcXFxcXFxuIFxcdCAgLmFjY2VzcyA9IGFjY2Vzc19wbXVfZXZ0eXBlciwgLnJlZyA9IChQTUVWVFlQRVIwX0VMMCArIG4pLCB9XFxuIFxcbiAvKiBNYWNybyB0byBleHBhbmQgdGhlIEFNVSBjb3VudGVyIGFuZCB0eXBlIHJlZ2lzdGVycyovXFxuQEAgLTMxMTQsMTcgKzMxMjQsMjIgQEAgc3RhdGljIGJvb2wgYWNjZXNzX21kY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHR9XFxuIFxcbiBcXHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgTURDUl9FTDIsIHZhbCk7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBSZXF1ZXN0IGEgcmVsb2FkIG9mIHRoZSBQTVUgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIGNvdW50ZXJzXFxuLVxcdCAqIGFmZmVjdGVkIGJ5IEhQTUUuXFxuLVxcdCAqL1xcbi1cXHRpZiAoKG9sZCBeIHZhbCkgXFx1MDAyNiBNRENSX0VMMl9IUE1FKVxcbi1cXHRcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XFxuK1xcdGt2bV9wbXVfYXBwbHlfbWRjcih2Y3B1LCBvbGQsIHZhbCk7XFxuIFxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBzZXRfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkLFxcbitcXHRcXHQgICAgdTY0IHZhbClcXG4re1xcbitcXHR1NjQgb2xkID0gX192Y3B1X3N5c19yZWcodmNwdSwgTURDUl9FTDIpO1xcbitcXG4rXFx0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIE1EQ1JfRUwyLCB2YWwpO1xcbitcXHRrdm1fcG11X2FwcGx5X21kY3IodmNwdSwgb2xkLCB2YWwpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBib29sIGFjY2Vzc19yYXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRcXHQgICAgICAgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLFxcbiBcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcilcXG5AQCAtMzgyNyw3ICszODQyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2Mgc3lzX3JlZ19kZXNjc1tdID0ge1xcbiBcXHQgKiBpbiAzMmJpdCBtb2RlLiBIZXJlIHdlIGNob29zZSB0byByZXNldCBpdCBhcyB6ZXJvIGZvciBjb25zaXN0ZW5jeS5cXG4gXFx0ICovXFxuIFxcdHsgUE1VX1NZU19SRUcoUE1DQ0ZJTFRSX0VMMCksIC5hY2Nlc3MgPSBhY2Nlc3NfcG11X2V2dHlwZXIsXFxuLVxcdCAgLnJlc2V0ID0gcmVzZXRfdmFsLCAucmVnID0gUE1DQ0ZJTFRSX0VMMCwgLnZhbCA9IDAgfSxcXG4rXFx0ICAucmVzZXQgPSByZXNldF92YWwsIC5yZWcgPSBQTUNDRklMVFJfRUwwLCAudmFsID0gMCxcXG4rXFx0ICAuc2V0X3VzZXIgPSBzZXRfcG11X2V2dHlwZXIgfSxcXG4gXFxuIFxcdEVMMl9SRUdfVk5DUihWUElEUl9FTDIsIHJlc2V0X3Vua25vd24sIDApLFxcbiBcXHRFTDJfUkVHX1ZOQ1IoVk1QSURSX0VMMiwgcmVzZXRfdW5rbm93biwgMCksXFxuQEAgLTM4MzYsNyArMzg1Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjIHN5c19yZWdfZGVzY3NbXSA9IHtcXG4gXFx0RUwyX1JFR19GSUxURVJFRChTQ1RMUjJfRUwyLCBhY2Nlc3Nfdm1fcmVnLCByZXNldF92YWwsIDAsXFxuIFxcdFxcdFxcdCBzY3RscjJfZWwyX3Zpc2liaWxpdHkpLFxcbiBcXHRFTDJfUkVHX1ZOQ1IoSENSX0VMMiwgcmVzZXRfaGNyLCAwKSxcXG4tXFx0RUwyX1JFRyhNRENSX0VMMiwgYWNjZXNzX21kY3IsIHJlc2V0X21kY3IsIDApLFxcbitcXHRTWVNfUkVHX1VTRVJfRklMVEVSKE1EQ1JfRUwyLCBhY2Nlc3NfbWRjciwgcmVzZXRfbWRjciwgMCxcXG4rXFx0XFx0XFx0ICAgIE5VTEwsIHNldF9tZGNyLCBlbDJfdmlzaWJpbGl0eSksXFxuIFxcdEVMMl9SRUcoQ1BUUl9FTDIsIGFjY2Vzc19ydywgcmVzZXRfdmFsLCBDUFRSX05WSEVfRUwyX1JFUzEpLFxcbiBcXHRFTDJfUkVHX1ZOQ1IoSFNUUl9FTDIsIHJlc2V0X3ZhbCwgMCksXFxuIFxcdEVMMl9SRUdfVk5DUl9GSUxUKEhGR1JUUl9FTDIsIGZndF92aXNpYmlsaXR5KSxcXG5AQCAtNTM5MCw3ICs1NDA3LDcgQEAgdm9pZCBrdm1fcmVzZXRfc3lzX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRzZXRfYml0KEtWTV9BUkNIX0ZMQUdfSURfUkVHU19JTklUSUFMSVpFRCwgXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5mbGFncyk7XFxuIFxcbiBcXHRpZiAoa3ZtX3ZjcHVfaGFzX3BtdSh2Y3B1KSlcXG4tXFx0XFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFTE9BRF9QTVUsIHZjcHUpO1xcbitcXHRcXHRrdm1fcG11X3JlcXVlc3RfcmVjcmVhdGUodmNwdSk7XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2t2bS9hcm1fcG11LmggYi9pbmNsdWRlL2t2bS9hcm1fcG11LmhcXG5pbmRleCA2YjRhMTE4ZDE3Y2E5Li4xN2I4NjFlZDE3MWQ2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUva3ZtL2FybV9wbXUuaFxcbisrKyBiL2luY2x1ZGUva3ZtL2FybV9wbXUuaFxcbkBAIC0zMiw2ICszMiw3IEBAIHN0cnVjdCBrdm1fcG11IHtcXG4gXFx0c3RydWN0IGt2bV9wbWMgcG1jW0tWTV9BUk1WOF9QTVVfTUFYX0NPVU5URVJTXTtcXG4gXFx0aW50IGlycV9udW07XFxuIFxcdGJvb2wgY3JlYXRlZDtcXG4rXFx0Ym9vbCBldmVudHNfbmVlZF9yZWNyZWF0ZTtcXG4gfTtcXG4gXFxuIHN0cnVjdCBhcm1fcG11X2VudHJ5IHtcXG5AQCAtNTUsOSArNTYsMTMgQEAgdm9pZCBrdm1fcG11X3N5bmNfaHdzdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBib29sIGt2bV9wbXVfc2hvdWxkX25vdGlmeV91c2VyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIGJvb2wga3ZtX3BtdV91cGRhdGVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHZvaWQga3ZtX3BtdV9zb2Z0d2FyZV9pbmNyZW1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKTtcXG4rdm9pZCBrdm1fcG11X3JlcXVlc3RfcmVjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4rdm9pZCBrdm1fcG11X2FwcGx5X3BtY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgb2xkLCB1NjQgdmFsLCBib29sIGZvcmNlX3JlbG9hZCk7XFxuIHZvaWQga3ZtX3BtdV9oYW5kbGVfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpO1xcbit2b2lkIGt2bV9wbXVfYXBwbHlfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBvbGQsIHU2NCB2YWwpO1xcbiB2b2lkIGt2bV9wbXVfc2V0X2NvdW50ZXJfZXZlbnRfdHlwZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhLFxcbiBcXHRcXHRcXHRcXHQgICAgdTY0IHNlbGVjdF9pZHgpO1xcbit2b2lkIGt2bV92Y3B1X2xvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGxhc3RfY3B1KTtcXG4gdm9pZCBrdm1fdmNwdV9yZWxvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIGludCBrdm1fYXJtX3BtdV92M19zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKTtcXG5AQCAtMTM1LDcgKzE0MCwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3BtdV9zaG91bGRfbm90aWZ5X3VzZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB9XFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fcG11X3VwZGF0ZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7IHJldHVybiBmYWxzZTsgfVxcbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3BtdV9zb2Z0d2FyZV9pbmNyZW1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKSB7fVxcbitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3BtdV9yZXF1ZXN0X3JlY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge31cXG4rc3RhdGljIGlubGluZSB2b2lkIGt2bV9wbXVfYXBwbHlfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBvbGQsIHU2NCB2YWwsIGJvb2wgZm9yY2VfcmVsb2FkKSB7fVxcbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3BtdV9oYW5kbGVfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpIHt9XFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X2FwcGx5X21kY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgb2xkLCB1NjQgdmFsKSB7fVxcbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3BtdV9zZXRfY291bnRlcl9ldmVudF90eXBlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICB1NjQgZGF0YSwgdTY0IHNlbGVjdF9pZHgpIHt9XFxuIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9hcm1fcG11X3YzX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5AQCAtMTY3LDYgKzE3NSw3IEBAIHN0YXRpYyBpbmxpbmUgdTY0IGt2bV9wbXVfZ2V0X3BtY2VpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcG1jZWlkMSlcXG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV9wbXVfdXBkYXRlX3ZjcHVfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge31cXG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X3BtdV9yZXN0b3JlX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge31cXG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X3BtdV9yZXN0b3JlX2hvc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fVxcbitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbGFzdF9jcHUpIHt9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdmNwdV9yZWxvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge31cXG4gc3RhdGljIGlubGluZSB1OCBrdm1fYXJtX3BtdV9nZXRfcG11dmVyX2xpbWl0KHZvaWQpXFxuIHtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oIGIvdG9vbHMvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXFxuaW5kZXggMWMxM2JmYTJkMzhhYS4uMzlhMWExZTQxMmU2NiAxMDA2NDRcXG4tLS0gYS90b29scy9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcXG4rKysgYi90b29scy9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcXG5AQCAtNDM3LDYgKzQzNyw3IEBAIGVudW0ge1xcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVJcXHRcXHQyXFxuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9QTVVcXHRcXHQzXFxuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9OUl9DT1VOVEVSU1xcdDRcXG4rI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWVxcdDVcXG4gI2RlZmluZSBLVk1fQVJNX1ZDUFVfVElNRVJfQ1RSTFxcdFxcdDFcXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9USU1FUl9JUlFfVlRJTUVSXFx0XFx0MFxcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1RJTUVSX0lSUV9QVElNRVJcXHRcXHQxXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvbGludXgvYml0ZmllbGQuaCBiL3Rvb2xzL2luY2x1ZGUvbGludXgvYml0ZmllbGQuaFxcbmluZGV4IGRkZjgxZjI0OTU2YmEuLjFjNjMzMzQzZDU3NjYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvaW5jbHVkZS9saW51eC9iaXRmaWVsZC5oXFxuKysrIGIvdG9vbHMvaW5jbHVkZS9saW51eC9iaXRmaWVsZC5oXFxuQEAgLTE0MiwzMiArMTQyLDMyIEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTY0IGZpZWxkX21hc2sodTY0IGZpZWxkKVxcbiBcXHRyZXR1cm4gZmllbGQgLyBmaWVsZF9tdWx0aXBsaWVyKGZpZWxkKTtcXG4gfVxcbiAjZGVmaW5lIGZpZWxkX21heChmaWVsZClcXHQoKHR5cGVvZihmaWVsZCkpZmllbGRfbWFzayhmaWVsZCkpXFxuLSNkZWZpbmUgX19fX01BS0VfT1AodHlwZSxiYXNlLHRvLGZyb20pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIF9fIyN0eXBlIHR5cGUjI19lbmNvZGVfYml0cyhiYXNlIHYsIGJhc2UgZmllbGQpXFx0XFxcXFxcbisjZGVmaW5lIF9fX19NQUtFX09QKG5hbWUsdHlwZSxiYXNlLHRvLGZyb20pXFx0XFx0XFx0XFx0XFxcXFxcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHR5cGUgbmFtZSMjX2VuY29kZV9iaXRzKGJhc2UgdiwgYmFzZSBmaWVsZClcXHRcXFxcXFxuIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCh2KSBcXHUwMDI2XFx1MDAyNiAodiBcXHUwMDI2IH5maWVsZF9tYXNrKGZpZWxkKSkpXFx0XFxcXFxcbiBcXHRcXHRfX2ZpZWxkX292ZXJmbG93KCk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRyZXR1cm4gdG8oKHYgXFx1MDAyNiBmaWVsZF9tYXNrKGZpZWxkKSkgKiBmaWVsZF9tdWx0aXBsaWVyKGZpZWxkKSk7XFx0XFxcXFxcbiB9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIF9fIyN0eXBlIHR5cGUjI19yZXBsYWNlX2JpdHMoX18jI3R5cGUgb2xkLFxcdFxcXFxcXG4tXFx0XFx0XFx0XFx0XFx0YmFzZSB2YWwsIGJhc2UgZmllbGQpXFx0XFx0XFxcXFxcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHR5cGUgbmFtZSMjX3JlcGxhY2VfYml0cyh0eXBlIG9sZCxcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdFxcdGJhc2UgdmFsLCBiYXNlIGZpZWxkKVxcdFxcXFxcXG4ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0cmV0dXJuIChvbGQgXFx1MDAyNiB+dG8oZmllbGQpKSB8IHR5cGUjI19lbmNvZGVfYml0cyh2YWwsIGZpZWxkKTtcXHRcXFxcXFxuK1xcdHJldHVybiAob2xkIFxcdTAwMjYgfnRvKGZpZWxkKSkgfCBuYW1lIyNfZW5jb2RlX2JpdHModmFsLCBmaWVsZCk7XFx0XFxcXFxcbiB9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdHlwZSMjcF9yZXBsYWNlX2JpdHMoX18jI3R5cGUgKnAsXFx0XFx0XFxcXFxcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbmFtZSMjcF9yZXBsYWNlX2JpdHModHlwZSAqcCxcXHRcXHRcXFxcXFxuIFxcdFxcdFxcdFxcdFxcdGJhc2UgdmFsLCBiYXNlIGZpZWxkKVxcdFxcdFxcXFxcXG4ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0KnAgPSAoKnAgXFx1MDAyNiB+dG8oZmllbGQpKSB8IHR5cGUjI19lbmNvZGVfYml0cyh2YWwsIGZpZWxkKTtcXHRcXFxcXFxuK1xcdCpwID0gKCpwIFxcdTAwMjYgfnRvKGZpZWxkKSkgfCBuYW1lIyNfZW5jb2RlX2JpdHModmFsLCBmaWVsZCk7XFx0XFxcXFxcbiB9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJhc2UgdHlwZSMjX2dldF9iaXRzKF9fIyN0eXBlIHYsIGJhc2UgZmllbGQpXFx0XFxcXFxcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJhc2UgbmFtZSMjX2dldF9iaXRzKHR5cGUgdiwgYmFzZSBmaWVsZClcXHRcXFxcXFxuIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdHJldHVybiAoZnJvbSh2KSBcXHUwMDI2IGZpZWxkKS9maWVsZF9tdWx0aXBsaWVyKGZpZWxkKTtcXHRcXHRcXFxcXFxuIH1cXG4tI2RlZmluZSBfX01BS0VfT1Aoc2l6ZSlcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdF9fX19NQUtFX09QKGxlIyNzaXplLHUjI3NpemUsY3B1X3RvX2xlIyNzaXplLGxlIyNzaXplIyNfdG9fY3B1KVxcdFxcXFxcXG4tXFx0X19fX01BS0VfT1AoYmUjI3NpemUsdSMjc2l6ZSxjcHVfdG9fYmUjI3NpemUsYmUjI3NpemUjI190b19jcHUpXFx0XFxcXFxcbi1cXHRfX19fTUFLRV9PUCh1IyNzaXplLHUjI3NpemUsLClcXG4tX19fX01BS0VfT1AodTgsdTgsLClcXG4rI2RlZmluZSBfX01BS0VfT1Aoc2l6ZSlcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdF9fX19NQUtFX09QKGxlIyNzaXplLF9fbGUjI3NpemUsdSMjc2l6ZSxjcHVfdG9fbGUjI3NpemUsbGUjI3NpemUjI190b19jcHUpXFx0XFxcXFxcbitcXHRfX19fTUFLRV9PUChiZSMjc2l6ZSxfX2JlIyNzaXplLHUjI3NpemUsY3B1X3RvX2JlIyNzaXplLGJlIyNzaXplIyNfdG9fY3B1KVxcdFxcXFxcXG4rXFx0X19fX01BS0VfT1AodSMjc2l6ZSx1IyNzaXplLHUjI3NpemUsLClcXG4rX19fX01BS0VfT1AodTgsdTgsdTgsLClcXG4gX19NQUtFX09QKDE2KVxcbiBfX01BS0VfT1AoMzIpXFxuIF9fTUFLRV9PUCg2NClcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmNcXG5pbmRleCAyMjIyMzM5NTk2OWUwLi42Mzc2NTNmN2EyNWI5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jXFxuQEAgLTI1LDYgKzI1LDE0IEBAXFxuIC8qIFRoZSBjeWNsZSBjb3VudGVyIGJpdCBwb3NpdGlvbiB0aGF0J3MgY29tbW9uIGFtb25nIHRoZSBQTVUgcmVnaXN0ZXJzICovXFxuICNkZWZpbmUgQVJNVjhfUE1VX0NZQ0xFX0lEWFxcdFxcdDMxXFxuIFxcbisjaWZuZGVmIE1EQ1JfRUwyX0hQTU5cXG4rI2RlZmluZSBNRENSX0VMMl9IUE1OXFx0XFx0XFx0R0VOTUFTS19VTEwoNCwgMClcXG4rI2VuZGlmXFxuK1xcbisjaWZuZGVmIE1EQ1JfRUwyX0hQTUVcXG4rI2RlZmluZSBNRENSX0VMMl9IUE1FXFx0XFx0XFx0QklUX1VMTCg3KVxcbisjZW5kaWZcXG4rXFxuIHN0cnVjdCB2cG11X3ZtIHtcXG4gXFx0c3RydWN0IGt2bV92bSAqdm07XFxuIFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG5AQCAtNDAzLDEyICs0MTEsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfdnBtdV92bSh2b2lkICpndWVzdF9jb2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBrdm1fdmNwdV9pbml0IGluaXQ7XFxuIFxcdHU4IHBtdXZlciwgZWM7XFxuLVxcdHU2NCBkZnIwLCBpcnEgPSAyMztcXG4tXFx0c3RydWN0IGt2bV9kZXZpY2VfYXR0ciBpcnFfYXR0ciA9IHtcXG4tXFx0XFx0Lmdyb3VwID0gS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxcbi1cXHRcXHQuYXR0ciA9IEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLFxcbi1cXHRcXHQuYWRkciA9ICh1NjQpXFx1MDAyNmlycSxcXG4tXFx0fTtcXG4rXFx0dTY0IGRmcjA7XFxuIFxcbiBcXHQvKiBUaGUgdGVzdCBjcmVhdGVzIHRoZSB2cG11X3ZtIG11bHRpcGxlIHRpbWVzLiBFbnN1cmUgYSBjbGVhbiBzdGF0ZSAqL1xcbiBcXHRtZW1zZXQoXFx1MDAyNnZwbXVfdm0sIDAsIHNpemVvZih2cG11X3ZtKSk7XFxuQEAgLTQzNCw4ICs0MzcsNiBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfdnBtdV92bSh2b2lkICpndWVzdF9jb2RlKVxcbiBcXHRURVNUX0FTU0VSVChwbXV2ZXIgIT0gSURfQUE2NERGUjBfRUwxX1BNVVZlcl9JTVBfREVGIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBwbXV2ZXIgXFx1MDAzZT0gSURfQUE2NERGUjBfRUwxX1BNVVZlcl9JTVAsXFxuIFxcdFxcdCAgICBcXFwiVW5leHBlY3RlZCBQTVVWRVIgKDB4JXgpIG9uIHRoZSB2Q1BVIHdpdGggUE1VdjNcXFwiLCBwbXV2ZXIpO1xcbi1cXG4tXFx0dmNwdV9pb2N0bCh2cG11X3ZtLnZjcHUsIEtWTV9TRVRfREVWSUNFX0FUVFIsIFxcdTAwMjZpcnFfYXR0cik7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGRlc3Ryb3lfdnBtdV92bSh2b2lkKVxcbkBAIC00NDMsMTEgKzQ0NCwxMCBAQCBzdGF0aWMgdm9pZCBkZXN0cm95X3ZwbXVfdm0odm9pZClcXG4gXFx0a3ZtX3ZtX2ZyZWUodnBtdV92bS52bSk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHJ1bl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBtY3JfbilcXG4rc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHN0cnVjdCB1Y2FsbCB1YztcXG4gXFxuLVxcdHZjcHVfYXJnc19zZXQodmNwdSwgMSwgcG1jcl9uKTtcXG4gXFx0dmNwdV9ydW4odmNwdSk7XFxuIFxcdHN3aXRjaCAoZ2V0X3VjYWxsKHZjcHUsIFxcdTAwMjZ1YykpIHtcXG4gXFx0Y2FzZSBVQ0FMTF9BQk9SVDpcXG5AQCAtNDYxLDE1ICs0NjEsMTcgQEAgc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcG1jcl9uKVxcbiBcXHR9XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyh1bnNpZ25lZCBpbnQgbnJfY291bnRlcnMsIGJvb2wgZXhwZWN0X2ZhaWwpXFxuK3N0YXRpYyB2b2lkIGd1ZXN0X2NvZGVfZG9uZSh2b2lkKVxcbit7XFxuK1xcdEdVRVNUX0RPTkUoKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgc2V0X25yX2NvdW50ZXJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4rXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBucl9jb3VudGVycywgYm9vbCBleHBlY3RfZmFpbClcXG4ge1xcbi1cXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuIFxcdHVuc2lnbmVkIGludCBwcmV2O1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0Y3JlYXRlX3ZwbXVfdm0oZ3Vlc3RfY29kZSk7XFxuLVxcdHZjcHUgPSB2cG11X3ZtLnZjcHU7XFxuLVxcbiBcXHRwcmV2ID0gZ2V0X3BtY3Jfbih2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX1BNQ1JfRUwwKSkpO1xcbiBcXG4gXFx0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuQEAgLTQ4MSw2ICs0ODMsMjYgQEAgc3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycywgYm9vbFxcbiBcXHRcXHRcXHQgICAgbnJfY291bnRlcnMsIHByZXYpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdFRFU1RfQVNTRVJUKCFyZXQsIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IGJvb2wgZml4ZWRfY291bnRlcnNfb25seSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IGJvb2wgZXhwZWN0X2ZhaWwpXFxuK3tcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbitcXHR1NjQgaXJxID0gMjM7XFxuK1xcbitcXHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcXG4rXFx0dmNwdSA9IHZwbXVfdm0udmNwdTtcXG4rXFxuK1xcdGlmIChmaXhlZF9jb3VudGVyc19vbmx5KVxcbitcXHRcXHR2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcXG4rXFxuK1xcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgXFx1MDAyNmlycSk7XFxuK1xcbitcXHRzZXRfbnJfY291bnRlcnModmNwdSwgbnJfY291bnRlcnMsIGV4cGVjdF9mYWlsKTtcXG4gXFxuIFxcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTtcXG4gfVxcbkBAIC00ODksMjEgKzUxMSwyMiBAQCBzdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnModW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sXFxuICAqIENyZWF0ZSBhIGd1ZXN0IHdpdGggb25lIHZDUFUsIHNldCB0aGUgUE1DUl9FTDAuTiBmb3IgdGhlIHZDUFUgdG8gQHBtY3JfbixcXG4gICogYW5kIHJ1biB0aGUgdGVzdC5cXG4gICovXFxuLXN0YXRpYyB2b2lkIHJ1bl9hY2Nlc3NfdGVzdCh1NjQgcG1jcl9uKVxcbitzdGF0aWMgdm9pZCBydW5fYWNjZXNzX3Rlc3QodTY0IHBtY3JfbiwgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5KVxcbiB7XFxuIFxcdHU2NCBzcDtcXG4gXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCBpbml0O1xcbiBcXG4tXFx0cHJfZGVidWcoXFxcIlRlc3Qgd2l0aCBwbWNyX24gJWx1XFxcXG5cXFwiLCBwbWNyX24pO1xcbitcXHRwcl9kZWJ1ZyhcXFwiVGVzdCB3aXRoIHBtY3JfbiAlbHUsIGZpeGVkX2NvdW50ZXJzX29ubHkgJWRcXFxcblxcXCIsIHBtY3JfbiwgZml4ZWRfY291bnRlcnNfb25seSk7XFxuIFxcbi1cXHR0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCBmYWxzZSk7XFxuK1xcdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHksIGZhbHNlKTtcXG4gXFx0dmNwdSA9IHZwbXVfdm0udmNwdTtcXG4gXFxuIFxcdC8qIFNhdmUgdGhlIGluaXRpYWwgc3AgdG8gcmVzdG9yZSB0aGVtIGxhdGVyIHRvIHJ1biB0aGUgZ3Vlc3QgYWdhaW4gKi9cXG4gXFx0c3AgPSB2Y3B1X2dldF9yZWcodmNwdSwgY3R4dF9yZWdfYWxpYXModmNwdSwgU1lTX1NQX0VMMSkpO1xcbiBcXG4tXFx0cnVuX3ZjcHUodmNwdSwgcG1jcl9uKTtcXG4rXFx0dmNwdV9hcmdzX3NldCh2Y3B1LCAxLCBwbWNyX24pO1xcbitcXHRydW5fdmNwdSh2Y3B1KTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFJlc2V0IGFuZCByZS1pbml0aWFsaXplIHRoZSB2Q1BVLCBhbmQgcnVuIHRoZSBndWVzdCBjb2RlIGFnYWluIHRvXFxuQEAgLTUxNiw3ICs1MzksOCBAQCBzdGF0aWMgdm9pZCBydW5fYWNjZXNzX3Rlc3QodTY0IHBtY3JfbilcXG4gXFx0dmNwdV9zZXRfcmVnKHZjcHUsIGN0eHRfcmVnX2FsaWFzKHZjcHUsIFNZU19TUF9FTDEpLCBzcCk7XFxuIFxcdHZjcHVfc2V0X3JlZyh2Y3B1LCBBUk02NF9DT1JFX1JFRyhyZWdzLnBjKSwgKHU2NClndWVzdF9jb2RlKTtcXG4gXFxuLVxcdHJ1bl92Y3B1KHZjcHUsIHBtY3Jfbik7XFxuK1xcdHZjcHVfYXJnc19zZXQodmNwdSwgMSwgcG1jcl9uKTtcXG4rXFx0cnVuX3ZjcHUodmNwdSk7XFxuIFxcbiBcXHRkZXN0cm95X3ZwbXVfdm0oKTtcXG4gfVxcbkBAIC01MzEsMTQgKzU1NSwxNCBAQCBzdGF0aWMgc3RydWN0IHBtcmVnX3NldHMgdmFsaWRpdHlfY2hlY2tfcmVnX3NldHNbXSA9IHtcXG4gICogQ3JlYXRlIGEgVk0sIGFuZCBjaGVjayBpZiBLVk0gaGFuZGxlcyB0aGUgdXNlcnNwYWNlIGFjY2Vzc2VzIG9mXFxuICAqIHRoZSBQTVUgcmVnaXN0ZXIgc2V0cyBpbiBAdmFsaWRpdHlfY2hlY2tfcmVnX3NldHNbXSBjb3JyZWN0bHkuXFxuICAqL1xcbi1zdGF0aWMgdm9pZCBydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QodTY0IHBtY3JfbilcXG4rc3RhdGljIHZvaWQgcnVuX3BtcmVnc192YWxpZGl0eV90ZXN0KHU2NCBwbWNyX24sIGJvb2wgZml4ZWRfY291bnRlcnNfb25seSlcXG4ge1xcbiBcXHRpbnQgaTtcXG4gXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbiBcXHR1NjQgc2V0X3JlZ19pZCwgY2xyX3JlZ19pZCwgcmVnX3ZhbDtcXG4gXFx0dTY0IHZhbGlkX2NvdW50ZXJzX21hc2ssIG1heF9jb3VudGVyc19tYXNrO1xcbiBcXG4tXFx0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZmFsc2UpO1xcbitcXHR0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5LCBmYWxzZSk7XFxuIFxcdHZjcHUgPSB2cG11X3ZtLnZjcHU7XFxuIFxcbiBcXHR2YWxpZF9jb3VudGVyc19tYXNrID0gZ2V0X2NvdW50ZXJzX21hc2socG1jcl9uKTtcXG5AQCAtNTgzLDE2ICs2MDcsOTQgQEAgc3RhdGljIHZvaWQgcnVuX3BtcmVnc192YWxpZGl0eV90ZXN0KHU2NCBwbWNyX24pXFxuIFxcdGRlc3Ryb3lfdnBtdV92bSgpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBydW5fbWRjcl9lbDJfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXFxuK3tcXG4rXFx0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbitcXHR1NjQgZXhwZWN0ZWRfbWRjciwgbWRjcjtcXG4rXFx0dTY0IGlycSA9IDIzO1xcbitcXG4rXFx0cHJfZGVidWcoXFxcIk1EQ1JfRUwyIHRlc3Qgd2l0aCBwbWNyX24gJWx1LCBmaXhlZF9jb3VudGVyc19vbmx5ICVkXFxcXG5cXFwiLFxcbitcXHRcXHQgcG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcXG4rXFxuK1xcdGNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpO1xcbitcXHRpZiAoIXZtX3N1cHBvcnRzX2VsMih2cG11X3ZtLnZtKSkge1xcbitcXHRcXHRkZXN0cm95X3ZwbXVfdm0oKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHR2Y3B1ID0gdnBtdV92bS52Y3B1O1xcbitcXG4rXFx0bWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTtcXG4rXFx0ZXhwZWN0ZWRfbWRjciA9IHU2NF9yZXBsYWNlX2JpdHMobWRjciwgRklFTERfTUFYKE1EQ1JfRUwyX0hQTU4pLFxcbitcXHRcXHRcXHRcXHRcXHQgTURDUl9FTDJfSFBNTik7XFxuK1xcdHZjcHVfc2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpLFxcbitcXHRcXHQgICAgIGV4cGVjdGVkX21kY3IpO1xcbitcXG4rXFx0bWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTtcXG4rXFx0VEVTVF9BU1NFUlQobWRjciA9PSBleHBlY3RlZF9tZGNyLFxcbitcXHRcXHQgICAgXFxcIk1EQ1JfRUwyIHdhcyBub3QgcHJvcGVybHkgdXBkYXRlZCBhZnRlciBIUE1OIHdyaXRlIChleHBlY3RlZCAweCVseCwgZ290IDB4JWx4KVxcXCIsXFxuK1xcdFxcdCAgICBleHBlY3RlZF9tZGNyLCBtZGNyKTtcXG4rXFxuK1xcdGlmIChmaXhlZF9jb3VudGVyc19vbmx5KSB7XFxuK1xcdFxcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xcbitcXG4rXFx0XFx0bWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTtcXG4rXFx0XFx0VEVTVF9BU1NFUlQobWRjciA9PSBleHBlY3RlZF9tZGNyLFxcbitcXHRcXHRcXHQgICAgXFxcIk1EQ1JfRUwyIGNoYW5nZWQgYWZ0ZXIgUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkgKGV4cGVjdGVkIDB4JWx4LCBnb3QgMHglbHgpXFxcIixcXG4rXFx0XFx0XFx0ICAgIGV4cGVjdGVkX21kY3IsIG1kY3IpO1xcbitcXHR9XFxuK1xcbitcXHRzZXRfbnJfY291bnRlcnModmNwdSwgcG1jcl9uLCBmYWxzZSk7XFxuK1xcbitcXHRtZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpO1xcbitcXHRURVNUX0FTU0VSVChtZGNyID09IGV4cGVjdGVkX21kY3IsXFxuK1xcdFxcdCAgICBcXFwiTURDUl9FTDIgY2hhbmdlZCBhZnRlciBQTVVfVjNfU0VUX05SX0NPVU5URVJTIChleHBlY3RlZCAweCVseCwgZ290IDB4JWx4KVxcXCIsXFxuK1xcdFxcdCAgICBleHBlY3RlZF9tZGNyLCBtZGNyKTtcXG4rXFxuK1xcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgXFx1MDAyNmlycSk7XFxuK1xcbitcXHR2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTtcXG4rXFxuK1xcdG1kY3IgPSB2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSk7XFxuK1xcdFRFU1RfQVNTRVJUKG1kY3IgPT0gZXhwZWN0ZWRfbWRjcixcXG4rXFx0XFx0ICAgIFxcXCJNRENSX0VMMiBjaGFuZ2VkIGFmdGVyIFBNVV9WM19JTklUIChleHBlY3RlZCAweCVseCwgZ290IDB4JWx4KVxcXCIsXFxuK1xcdFxcdCAgICBleHBlY3RlZF9tZGNyLCBtZGNyKTtcXG4rXFxuK1xcdGV4cGVjdGVkX21kY3IgPSBtZGNyIF4gTURDUl9FTDJfSFBNRTtcXG4rXFx0dmNwdV9zZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMiksXFxuK1xcdFxcdCAgICAgZXhwZWN0ZWRfbWRjcik7XFxuK1xcbitcXHRtZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpO1xcbitcXHRURVNUX0FTU0VSVChtZGNyID09IGV4cGVjdGVkX21kY3IsXFxuK1xcdFxcdCAgICBcXFwiTURDUl9FTDIgd2FzIG5vdCBwcm9wZXJseSB1cGRhdGVkIGFmdGVyIEhQTUUgd3JpdGUgKGV4cGVjdGVkIDB4JWx4LCBnb3QgMHglbHgpXFxcIixcXG4rXFx0XFx0ICAgIGV4cGVjdGVkX21kY3IsIG1kY3IpO1xcbitcXG4rXFx0a3ZtX2dldF9kZWZhdWx0X3ZjcHVfdGFyZ2V0KHZwbXVfdm0udm0sIFxcdTAwMjZpbml0KTtcXG4rXFx0aW5pdC5mZWF0dXJlc1swXSB8PSAoMSBcXHUwMDNjXFx1MDAzYyBLVk1fQVJNX1ZDUFVfUE1VX1YzKTtcXG4rXFx0YWFyY2g2NF92Y3B1X3NldHVwKHZjcHUsIFxcdTAwMjZpbml0KTtcXG4rXFxuK1xcdG1kY3IgPSB2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSk7XFxuK1xcdFRFU1RfQVNTRVJUKEZJRUxEX0dFVChNRENSX0VMMl9IUE1OLCBtZGNyKSA9PSBwbWNyX24sXFxuK1xcdFxcdCAgICBcXFwiTURDUl9FTDIuSFBNTiBpcyBub3QgcmVzZXQgYWZ0ZXIgSU5JVCAoZXhwZWN0ZWQgJWx1LCBnb3QgJWx1KVxcXCIsXFxuK1xcdFxcdCAgICBwbWNyX24sIEZJRUxEX0dFVChNRENSX0VMMl9IUE1OLCBtZGNyKSk7XFxuK1xcbitcXHRkZXN0cm95X3ZwbXVfdm0oKTtcXG4rfVxcbitcXG4gLypcXG4gICogQ3JlYXRlIGEgZ3Vlc3Qgd2l0aCBvbmUgdkNQVSwgYW5kIGF0dGVtcHQgdG8gc2V0IHRoZSBQTUNSX0VMMC5OIGZvclxcbiAgKiB0aGUgdkNQVSB0byBAcG1jcl9uLCB3aGljaCBpcyBsYXJnZXIgdGhhbiB0aGUgaG9zdCB2YWx1ZS5cXG4gICogVGhlIGF0dGVtcHQgc2hvdWxkIGZhaWwgYXMgQHBtY3JfbiBpcyB0b28gYmlnIHRvIHNldCBmb3IgdGhlIHZDUFUuXFxuICAqL1xcbi1zdGF0aWMgdm9pZCBydW5fZXJyb3JfdGVzdCh1NjQgcG1jcl9uKVxcbitzdGF0aWMgdm9pZCBydW5fZXJyb3JfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXFxuIHtcXG4gXFx0cHJfZGVidWcoXFxcIkVycm9yIHRlc3Qgd2l0aCBwbWNyX24gJWx1IChsYXJnZXIgdGhhbiB0aGUgaG9zdClcXFxcblxcXCIsIHBtY3Jfbik7XFxuIFxcbi1cXHR0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCB0cnVlKTtcXG4rXFx0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZml4ZWRfY291bnRlcnNfb25seSwgdHJ1ZSk7XFxuIFxcdGRlc3Ryb3lfdnBtdV92bSgpO1xcbiB9XFxuIFxcbkBAIC02MjIsMjIgKzcyNCwxODMgQEAgc3RhdGljIGJvb2wga3ZtX3N1cHBvcnRzX25yX2NvdW50ZXJzX2F0dHIodm9pZClcXG4gXFx0cmV0dXJuIHN1cHBvcnRlZDtcXG4gfVxcbiBcXG4taW50IG1haW4odm9pZClcXG4rc3RhdGljIHZvaWQgdGVzdF9zZXRfbnJfY291bnRlcnNfYWZ0ZXJfdmNwdV9ydW4odm9pZClcXG4ge1xcbi1cXHR1NjQgaSwgcG1jcl9uO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnJ1bm5pbmdfdmNwdSwgKnN0b3BwZWRfdmNwdTtcXG4rXFx0dW5zaWduZWQgaW50IG5yX2NvdW50ZXJzID0gMDtcXG4rXFx0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcXG4rXFx0c3RydWN0IGt2bV92bSAqdm07XFxuK1xcdGludCByZXQ7XFxuK1xcdHU2NCBpcnEgPSAyMztcXG4rXFxuK1xcdHZtID0gdm1fY3JlYXRlKDIpO1xcbitcXHR2bV9pb2N0bCh2bSwgS1ZNX0FSTV9QUkVGRVJSRURfVEFSR0VULCBcXHUwMDI2aW5pdCk7XFxuK1xcdGluaXQuZmVhdHVyZXNbMF0gfD0gQklUKEtWTV9BUk1fVkNQVV9QTVVfVjMpO1xcbitcXHRydW5uaW5nX3ZjcHUgPSBhYXJjaDY0X3ZjcHVfYWRkKHZtLCAwLCBcXHUwMDI2aW5pdCwgZ3Vlc3RfY29kZV9kb25lKTtcXG4rXFx0c3RvcHBlZF92Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMSwgXFx1MDAyNmluaXQsIGd1ZXN0X2NvZGVfZG9uZSk7XFxuK1xcdGt2bV9hcmNoX3ZtX2ZpbmFsaXplX3ZjcHVzKHZtKTtcXG4rXFxuK1xcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHJ1bm5pbmdfdmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxcbitcXHRcXHRcXHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLCBcXHUwMDI2aXJxKTtcXG4rXFx0dmNwdV9kZXZpY2VfYXR0cl9zZXQocnVubmluZ192Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTtcXG4rXFx0cnVuX3ZjcHUocnVubmluZ192Y3B1KTtcXG4rXFxuK1xcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQoc3RvcHBlZF92Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlMsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFx1MDAyNm5yX2NvdW50ZXJzKTtcXG4rXFx0VEVTVF9BU1NFUlQocmV0ID09IC0xIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVCVVNZLFxcbitcXHRcXHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpO1xcbitcXG4rXFx0a3ZtX3ZtX2ZyZWUodm0pO1xcbit9XFxuIFxcbi1cXHRURVNUX1JFUVVJUkUoa3ZtX2hhc19jYXAoS1ZNX0NBUF9BUk1fUE1VX1YzKSk7XFxuLVxcdFRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfdmdpY192MygpKTtcXG4tXFx0VEVTVF9SRVFVSVJFKGt2bV9zdXBwb3J0c19ucl9jb3VudGVyc19hdHRyKCkpO1xcbitzdGF0aWMgdm9pZCB0ZXN0X2NvbmZpZyh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXFxuK3tcXG4rXFx0dTY0IGk7XFxuIFxcbi1cXHRwbWNyX24gPSBnZXRfcG1jcl9uX2xpbWl0KCk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYz0gcG1jcl9uOyBpKyspIHtcXG4tXFx0XFx0cnVuX2FjY2Vzc190ZXN0KGkpO1xcbi1cXHRcXHRydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QoaSk7XFxuK1xcdFxcdHJ1bl9hY2Nlc3NfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcXG4rXFx0XFx0cnVuX3BtcmVnc192YWxpZGl0eV90ZXN0KGksIGZpeGVkX2NvdW50ZXJzX29ubHkpO1xcbitcXHRcXHRydW5fbWRjcl9lbDJfdmFsaWRpdHlfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcXG4gXFx0fVxcbiBcXG4gXFx0Zm9yIChpID0gcG1jcl9uICsgMTsgaSBcXHUwMDNjIEFSTVY4X1BNVV9NQVhfQ09VTlRFUlM7IGkrKylcXG4tXFx0XFx0cnVuX2Vycm9yX3Rlc3QoaSk7XFxuK1xcdFxcdHJ1bl9lcnJvcl90ZXN0KGksIGZpeGVkX2NvdW50ZXJzX29ubHkpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X2ZpeGVkX2NvdW50ZXJzX29ubHlfc3RyaWN0KHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbitcXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4rXFx0dTY0IGlycSA9IDIzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFrdm1faGFzX2NhcChLVk1fQ0FQX0FSTV9QTVVfVjNfU1RSSUNUKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0dm0gPSB2bV9jcmVhdGUoMSk7XFxuK1xcdGt2bV9nZXRfZGVmYXVsdF92Y3B1X3RhcmdldCh2bSwgXFx1MDAyNmluaXQpO1xcbitcXHRpbml0LmZlYXR1cmVzWzBdIHw9IEJJVChLVk1fQVJNX1ZDUFVfUE1VX1YzKSB8XFxuK1xcdFxcdFxcdCAgICBCSVQoS1ZNX0FSTV9WQ1BVX1BNVV9WM19TVFJJQ1QpO1xcbitcXHR2Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMCwgXFx1MDAyNmluaXQsIGd1ZXN0X2NvZGVfZG9uZSk7XFxuK1xcdGt2bV9hcmNoX3ZtX2ZpbmFsaXplX3ZjcHVzKHZtKTtcXG4rXFx0dmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxcbitcXHRcXHRcXHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLCBcXHUwMDI2aXJxKTtcXG4rXFxuK1xcdC8qIFNUUklDVCBzdGlsbCByZXF1aXJlcyBhIFBNVSBzZWxlY3Rpb24gYmVmb3JlIGluaXRpYWxpemF0aW9uLiAqL1xcbitcXHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQsIE5VTEwpO1xcbitcXHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRU5YSU8sXFxuK1xcdFxcdCAgICBLVk1fSU9DVExfRVJST1IoS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7XFxuK1xcbitcXHR2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcXG4rXFx0dmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxcbitcXHRcXHRcXHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVCwgTlVMTCk7XFxuK1xcbitcXHRrdm1fdm1fZnJlZSh2bSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3RfZml4ZWRfY291bnRlcnNfb25seSh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fcG11X2V2ZW50X2ZpbHRlciBmaWx0ZXIgPSB7IC5uZXZlbnRzID0gMCB9O1xcbitcXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICpydW5uaW5nX3ZjcHU7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqc3RvcHBlZF92Y3B1O1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCBpbml0O1xcbitcXHRpbnQgcmV0O1xcbitcXHR1NjQgaXJxID0gMjM7XFxuK1xcbitcXHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcXG4rXFx0cmV0ID0gX192Y3B1X2hhc19kZXZpY2VfYXR0cih2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFTlhJTyxcXG4rXFx0XFx0XFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fSEFTX0RFVklDRV9BVFRSLCByZXQpKTtcXG4rXFx0XFx0ZGVzdHJveV92cG11X3ZtKCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0LyogQXNzZXJ0IHRoYXQgRklYRURfQ09VTlRFUlNfT05MWSBpcyB1bnNldCBhdCBpbml0aWFsaXphdGlvbi4gKi9cXG4rXFx0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX2dldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xcbitcXHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRU5YSU8sXFxuK1xcdFxcdCAgICBLVk1fSU9DVExfRVJST1IoS1ZNX0dFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7XFxuK1xcbitcXHQvKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgc3VjY2VlZHMuICovXFxuK1xcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxcbitcXHRcXHRcXHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XFxuK1xcbitcXHQvKiBBc3NlcnQgdGhhdCBGSVhFRF9DT1VOVEVSU19PTkxZIGlzIHNldC4gKi9cXG4rXFx0dmNwdV9kZXZpY2VfYXR0cl9nZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFNldHRpbmcgYW4gZXZlbnQgZmlsdGVyIHdoZW4gRklYRURfQ09VTlRFUlNfT05MWSBoYXMgYWxyZWFkeSBiZWVuIHNldFxcbitcXHQgKiByZXN1bHRzIGluIEVCVVNZLlxcbitcXHQgKi9cXG4rXFx0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJTFRFUiwgXFx1MDAyNmZpbHRlcik7XFxuK1xcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFQlVTWSxcXG4rXFx0XFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTtcXG4rXFxuK1xcdGRlc3Ryb3lfdnBtdV92bSgpO1xcbitcXG4rXFx0Y3JlYXRlX3ZwbXVfdm0oZ3Vlc3RfY29kZSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgd2hlbiBhbiBldmVudCBmaWx0ZXIgaGFzXFxuK1xcdCAqIGFscmVhZHkgYmVlbiBzZXQgcmVzdWx0cyBpbiBFQlVTWS5cXG4rXFx0ICovXFxuK1xcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxcbitcXHRcXHRcXHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSLCBcXHUwMDI2ZmlsdGVyKTtcXG4rXFxuK1xcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcXG4rXFx0VEVTVF9BU1NFUlQocmV0ID09IC0xIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVCVVNZLFxcbitcXHRcXHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpO1xcbitcXG4rXFx0ZGVzdHJveV92cG11X3ZtKCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgd2hlbiBhIFZDUFUgaGFzIGFscmVhZHkgcnVuXFxuK1xcdCAqIHJlc3VsdHMgaW4gRUJVU1kuXFxuK1xcdCAqL1xcbitcXHR2bSA9IHZtX2NyZWF0ZSgyKTtcXG4rXFx0dm1faW9jdGwodm0sIEtWTV9BUk1fUFJFRkVSUkVEX1RBUkdFVCwgXFx1MDAyNmluaXQpO1xcbitcXHRpbml0LmZlYXR1cmVzWzBdIHw9ICgxIFxcdTAwM2NcXHUwMDNjIEtWTV9BUk1fVkNQVV9QTVVfVjMpO1xcbitcXHRydW5uaW5nX3ZjcHUgPSBhYXJjaDY0X3ZjcHVfYWRkKHZtLCAwLCBcXHUwMDI2aW5pdCwgZ3Vlc3RfY29kZV9kb25lKTtcXG4rXFx0c3RvcHBlZF92Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMSwgXFx1MDAyNmluaXQsIGd1ZXN0X2NvZGVfZG9uZSk7XFxuK1xcdGt2bV9hcmNoX3ZtX2ZpbmFsaXplX3ZjcHVzKHZtKTtcXG4rXFx0dmNwdV9kZXZpY2VfYXR0cl9zZXQocnVubmluZ192Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JUlEsIFxcdTAwMjZpcnEpO1xcbitcXHR2Y3B1X2RldmljZV9hdHRyX3NldChydW5uaW5nX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQsIE5VTEwpO1xcbitcXHRydW5fdmNwdShydW5uaW5nX3ZjcHUpO1xcbitcXG4rXFx0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldChzdG9wcGVkX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xcbitcXHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUJVU1ksXFxuK1xcdFxcdCAgICBLVk1fSU9DVExfRVJST1IoS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7XFxuK1xcbitcXHRrdm1fdm1fZnJlZSh2bSk7XFxuK1xcbitcXHR0ZXN0X2ZpeGVkX2NvdW50ZXJzX29ubHlfc3RyaWN0KCk7XFxuK1xcbitcXHR0ZXN0X2NvbmZpZygwLCB0cnVlKTtcXG4rfVxcbitcXG4raW50IG1haW4odm9pZClcXG4re1xcbitcXHRURVNUX1JFUVVJUkUoa3ZtX2hhc19jYXAoS1ZNX0NBUF9BUk1fUE1VX1YzKSk7XFxuK1xcdFRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfdmdpY192MygpKTtcXG4rXFx0VEVTVF9SRVFVSVJFKGt2bV9zdXBwb3J0c19ucl9jb3VudGVyc19hdHRyKCkpO1xcbitcXG4rXFx0dGVzdF9zZXRfbnJfY291bnRlcnNfYWZ0ZXJfdmNwdV9ydW4oKTtcXG4rXFx0dGVzdF9jb25maWcoZ2V0X3BtY3Jfbl9saW1pdCgpLCBmYWxzZSk7XFxuK1xcdHRlc3RfZml4ZWRfY291bnRlcnNfb25seSgpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTI6NTQ6MzcuNDIzODkzNTQ5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo3NzUxMDMzMTI5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJBbGwgbW9kaWZpZWQga2VybmVsIGNvZGUgaXMgZXhjbHVzaXZlIHRvIHRoZSBhcm02NCBhcmNoaXRlY3R1cmUgKGFyY2gvYXJtNjQgYW5kIGluY2x1ZGUva3ZtL2FybV9wbXUuaCksIHdpdGggdGhlIHJlbWFpbmluZyBjaGFuZ2VzIGxvY2F0ZWQgaW4gRG9jdW1lbnRhdGlvbi8gYW5kIHVzZXItc3BhY2UgdG9vbHMvc2VsZnRlc3RzICh0b29scy8pLiBOb25lIG9mIHRoZSBtb2RpZmllZCBjb2RlIGlzIGNvbXBpbGVkIG9yIHJlYWNoYWJsZSBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MzQzYzBiZmY3ZDVjNWVhN2FmOWUxZjBmYjY1ODE5MWE4MGZiZjE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTI6NTQ6MzUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbmluZGV4IDQ5ODhjMzJkZjRiZjguLjQyMDY1MTM4NjAzYjcgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxuQEAgLTM1MjEsOSArMzUyMSwxMyBAQCBQb3NzaWJsZSBmZWF0dXJlczpcbiBcbiBcdCAgICAqIFVzZXJzcGFjZSBtdXN0IGV4cGxpY2l0bHkgc2VsZWN0IGEgUE1VIGltcGxlbWVudGF0aW9uIGJlZm9yZVxuIFx0ICAgICAgaW5pdGlhbGl6aW5nIHRoZSBQTVUgb3IgY29uZmlndXJpbmcgYSBQTVUgZXZlbnQgZmlsdGVyXG4rXHQgICAgICAoS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZIGFsc28gc2F0aXNmaWVzIHRoZVxuK1x0ICAgICAgaW5pdGlhbGl6YXRpb24gcmVxdWlyZW1lbnQ7IGV2ZW50IGZpbHRlcmluZyByZW1haW5zIHVuYXZhaWxhYmxlXG4rXHQgICAgICBpbiB0aGF0IG1vZGUpXG4gXG4tXHQgICAgKiBJZiB0aGUgUE1VIGltcGxlbWVudHMgRkVBVF9QTVV2M3A0LCBQTU1JUl9FTDEuU0xPVFMgcHJvdmlkZXMgdGhlXG4tXHQgICAgICBoYXJkd2FyZSB2YWx1ZSBvZiB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvblxuK1x0ICAgICogSWYgYSBoYXJkd2FyZSBQTVUgaXMgc2VsZWN0ZWQgYW5kIGltcGxlbWVudHMgRkVBVF9QTVV2M3A0LFxuK1x0ICAgICAgUE1NSVJfRUwxLlNMT1RTIHByb3ZpZGVzIGl0cyBoYXJkd2FyZSB2YWx1ZS4gSW4gZml4ZWQtY291bnRlcnMtb25seVxuK1x0ICAgICAgbW9kZSwgUE1NSVJfRUwxIHJlYWRzIGFzIHplcm9cbiBcbiBcdCAgICAqIFdyaXRlcyB0byBQTUNSX0VMMC5OIHZpYSBLVk1fU0VUX09ORV9SRUcgYXJlIGlnbm9yZWRcbiBcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3RcbmluZGV4IGRlYjVjNTFiYzAwYzguLjRlYzMyOTFmMGJhNzQgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vZGV2aWNlcy92Y3B1LnJzdFxuQEAgLTUzLDkgKzUzLDkgQEAgUmV0dXJuczpcbiBcdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcdCAtRUVYSVNUICBJbnRlcnJ1cHQgbnVtYmVyIGFscmVhZHkgdXNlZFxuIFx0IC1FTk9ERVYgIFBNVXYzIG5vdCBzdXBwb3J0ZWQgb3IgR0lDIG5vdCBpbml0aWFsaXplZFxuLVx0IC1FTlhJTyAgIFBNVXYzIG5vdCBzdXBwb3J0ZWQsIG1pc3NpbmcgVkNQVSBmZWF0dXJlLCBtaXNzaW5nXG4tICAgICAgICAgICAgICAgICAgaGFyZHdhcmUgUE1VLCBvciBpbnRlcnJ1cHQgbnVtYmVyIG5vdCBzZXQgKG5vbi1HSUN2NVxuLSAgICAgICAgICAgICAgICAgIGd1ZXN0cywgb25seSlcbitcdCAtRU5YSU8gICBQTVV2MyBub3Qgc3VwcG9ydGVkLCBtaXNzaW5nIFZDUFUgZmVhdHVyZSxcbitcdFx0ICBuZWl0aGVyIGhhcmR3YXJlIFBNVSBub3IgRklYRURfQ09VTlRFUlNfT05MWSBzZWxlY3RlZCxcbitcdFx0ICBvciBpbnRlcnJ1cHQgbnVtYmVyIG5vdCBzZXQgKG5vbi1HSUN2NSBndWVzdHMgb25seSlcbiBcdCAtRUJVU1kgICBQTVV2MyBhbHJlYWR5IGluaXRpYWxpemVkXG4gXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXG5AQCAtNjQsNyArNjQsOCBAQCB2aXJ0dWFsIEdJQyBpbXBsZW1lbnRhdGlvbiwgdGhpcyBtdXN0IGJlIGRvbmUgYWZ0ZXIgaW5pdGlhbGl6aW5nIHRoZSBpbi1rZXJuZWxcbiBpcnFjaGlwLlxuIFxuIFdoZW4gdGhlIEtWTV9BUk1fVkNQVV9QTVVfVjNfU1RSSUNUIHZDUFUgZmVhdHVyZSBpcyBlbmFibGVkIHRoaXMgbXVzdCBiZSBkb25lXG4tYWZ0ZXIgc2VsZWN0aW5nIGEgaGFyZHdhcmUgUE1VLlxuK2FmdGVyIHNlbGVjdGluZyBhIGhhcmR3YXJlIFBNVSBvciBlbmFibGluZ1xuK0tWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWS5cbiBcbiAxLjMgQVRUUklCVVRFOiBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJTFRFUlxuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5AQCAtNzgsNyArNzksOCBAQCBhZnRlciBzZWxlY3RpbmcgYSBoYXJkd2FyZSBQTVUuXG4gXHQgLUVOT0RFViAgUE1VdjMgbm90IHN1cHBvcnRlZCBvciBHSUMgbm90IGluaXRpYWxpemVkXG4gXHQgLUVOWElPICAgUE1VdjMgbm90IHByb3Blcmx5IGNvbmZpZ3VyZWQgb3IgaW4ta2VybmVsIGlycWNoaXAgbm90XG4gXHQgXHQgIGNvbmZpZ3VyZWQgYXMgcmVxdWlyZWQgcHJpb3IgdG8gY2FsbGluZyB0aGlzIGF0dHJpYnV0ZVxuLVx0IC1FQlVTWSAgIFBNVXYzIGFscmVhZHkgaW5pdGlhbGl6ZWQgb3IgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1blxuK1x0IC1FQlVTWSAgIFBNVXYzIGFscmVhZHkgaW5pdGlhbGl6ZWQsIGEgVkNQVSBoYXMgYWxyZWFkeSBydW4gb3JcbitcdFx0ICBGSVhFRF9DT1VOVEVSU19PTkxZIGhhcyBhbHJlYWR5IGJlZW4gc2V0XG4gXHQgLUVJTlZBTCAgSW52YWxpZCBmaWx0ZXIgcmFuZ2VcbiBcdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbkBAIC0xMjMsMTQgKzEyNSwxNCBAQCBhZnRlciBzZWxlY3RpbmcgYSBoYXJkd2FyZSBQTVUuXG4gXG4gOlJldHVybnM6XG4gXG4tXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1x0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXHQgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCwgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1biBvclxuLSAgICAgICAgICAgICAgICAgIGFuIGV2ZW50IGZpbHRlciBoYXMgYWxyZWFkeSBiZWVuIHNldFxuKyAgICAgICAgICAgICAgICAgIGFuIGV2ZW50IGZpbHRlciBvciBGSVhFRF9DT1VOVEVSU19PTkxZIGhhcyBhbHJlYWR5IGJlZW4gc2V0XG4gXHQgLUVGQVVMVCAgRXJyb3IgYWNjZXNzaW5nIHRoZSBQTVUgaWRlbnRpZmllclxuIFx0IC1FTlhJTyAgIFBNVSBub3QgZm91bmRcbiBcdCAtRU5PREVWICBQTVV2MyBub3Qgc3VwcG9ydGVkIG9yIEdJQyBub3QgaW5pdGlhbGl6ZWRcbiBcdCAtRU5PTUVNICBDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5XG4tXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1x0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXG4gUmVxdWVzdCB0aGF0IHRoZSBWQ1BVIHVzZXMgdGhlIHNwZWNpZmllZCBoYXJkd2FyZSBQTVUgd2hlbiBjcmVhdGluZyBndWVzdCBldmVudHNcbiBmb3IgdGhlIHB1cnBvc2Ugb2YgUE1VIGVtdWxhdGlvbi4gVGhlIFBNVSBpZGVudGlmaWVyIGNhbiBiZSByZWFkIGZyb20gdGhlIFwidHlwZVwiXG5AQCAtMTcyLDYgKzE3NCwzMCBAQCBleHBsaWNpdGx5IHNlbGVjdGVkLCBvciB0aGUgbnVtYmVyIG9mIGNvdW50ZXJzIGlzIG91dCBvZiByYW5nZSBmb3IgdGhlXG4gc2VsZWN0ZWQgUE1VLiBTZWxlY3RpbmcgYSBuZXcgUE1VIGNhbmNlbHMgdGhlIGVmZmVjdCBvZiBzZXR0aW5nIHRoaXNcbiBhdHRyaWJ1dGUuXG4gXG4rMS42IEFUVFJJQlVURTogS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rXG4rOlBhcmFtZXRlcnM6IG5vIGFkZGl0aW9uYWwgcGFyYW1ldGVyIGluIGt2bV9kZXZpY2VfYXR0ci5hZGRyXG4rXG4rOlJldHVybnM6XG4rXG4rXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbitcdCAtRUJVU1kgICBQTVV2MyBhbHJlYWR5IGluaXRpYWxpemVkLCBhIFZDUFUgaGFzIGFscmVhZHkgcnVuLFxuK1x0XHQgIGFuIGV2ZW50IGZpbHRlciBoYXMgYWxyZWFkeSBiZWVuIHNldCBvclxuK1x0XHQgIGEgaGFyZHdhcmUgUE1VIGhhcyBhbHJlYWR5IGJlZW4gc3BlY2lmaWVkXG4rXHQgLUVOWElPICAgQXR0ZW1wdGVkIHRvIGdldCBiZWZvcmUgc2V0dGluZ1xuK1x0IC1FTk9ERVYgIEF0dGVtcHRlZCB0byBzZXQgd2hpbGUgUE1VdjMgbm90IHN1cHBvcnRlZFxuK1x0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rXG4rSWYgc2V0LCBLVk0gZW11bGF0ZXMgUE1VdjMgd2l0aG91dCBwcm9ncmFtbWFibGUgZXZlbnQgY291bnRlcnMuXG4rXG4rV2l0aCBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NUUklDVCwgZW5hYmxpbmcgdGhpcyBhdHRyaWJ1dGUgc2F0aXNmaWVzIHRoZVxuK1BNVSBzZWxlY3Rpb24gcmVxdWlyZW1lbnQgZm9yIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVC5cbitcbitXaGVuIHRoaXMgYXR0cmlidXRlIGlzIGVuYWJsZWQsIHRoZSB2Q1BVIGNhbiBydW4gb24gYW55IHBoeXNpY2FsIENQVVxuK3RoYXQgaGFzIGEgUE1VLCByZWdhcmRsZXNzIG9mIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uLiBUaGlzXG4rYXR0cmlidXRlIGlzIFZNLXNjb3BlZC5cbitcbiAyLiBHUk9VUDogS1ZNX0FSTV9WQ1BVX1RJTUVSX0NUUkxcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDI3ZmUwY2Q1YjJkN2EuLjEwZTNmZjQxMDc5ZTggMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTM2Nyw2ICszNjcsMTAgQEAgc3RydWN0IGt2bV9hcmNoIHtcbiAjZGVmaW5lIEtWTV9BUkNIX0ZMQUdfV1JJVEFCTEVfSU1QX0lEX1JFR1NcdFx0MTBcbiBcdC8qIFVuaGFuZGxlZCBTRUFzIGFyZSB0YWtlbiB0byB1c2Vyc3BhY2UgKi9cbiAjZGVmaW5lIEtWTV9BUkNIX0ZMQUdfRVhJVF9TRUFcdFx0XHRcdDExXG4rXHQvKiBQTVV2MyBpcyBlbXVsYXRlZCB3aXRoIGFuIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGhhcmR3YXJlIFBNVSAqL1xuKyNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRVhQTElDSVRcdFx0XHQxMlxuK1x0LyogUE1VdjMgaXMgZW11bGF0ZWQgd2l0aG91dCBwcm9ncmFtbWFibGUgZXZlbnQgY291bnRlcnMgKi9cbisjZGVmaW5lIEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlcdDEzXG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0LyogVk0td2lkZSB2Q1BVIGZlYXR1cmUgc2V0ICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG5pbmRleCAwMTllNWUzZDg5MmU2Li4zYmQ3ZjIwMTI1MmExIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbkBAIC00MzgsNiArNDM4LDcgQEAgZW51bSB7XG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSXHRcdDJcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VXHRcdDNcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlNcdDRcbisjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZXHQ1XG4gI2RlZmluZSBLVk1fQVJNX1ZDUFVfVElNRVJfQ1RSTFx0XHQxXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9USU1FUl9JUlFfVlRJTUVSXHRcdDBcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1RJTUVSX0lSUV9QVElNRVJcdFx0MVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2NwdV9lcnJhdGEuYyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdV9lcnJhdGEuY1xuaW5kZXggNzhlNGUxMDVmNmFiNS4uOWIyZDlkMGYxNzM4OCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2NwdV9lcnJhdGEuY1xuKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1X2VycmF0YS5jXG5AQCAtMTAxMiw3ICsxMDEyLDcgQEAgY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgYXJtNjRfZXJyYXRhW10gPSB7XG4gXHR7XG4gXHRcdC5kZXNjID0gXCJBcHBsZSBJTVBERUYgUE1VdjMgVHJhcHNcIixcbiBcdFx0LmNhcGFiaWxpdHkgPSBBUk02NF9XT1JLQVJPVU5EX1BNVVYzX0lNUERFRl9UUkFQUyxcbi1cdFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfTE9DQUxfQ1BVX0VSUkFUVU0sXG4rXHRcdC50eXBlID0gQVJNNjRfQ1BVQ0FQX0VBUkxZX0xPQ0FMX0NQVV9GRUFUVVJFLFxuIFx0XHQubWF0Y2hlcyA9IGhhc19pbXBkZWZfcG11djMsXG4gXHRcdC5jcHVfZW5hYmxlID0gY3B1X2VuYWJsZV9pbXBkZWZfcG11djNfdHJhcHMsXG4gXHR9LFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FybS5jIGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcbmluZGV4IGNjYWU4MmMxMjQyYmMuLmRmZWJmZWI5NTYxOTggMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9hcm0uY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcbkBAIC02NTIsNiArNjUyLDcgQEAgc3RhdGljIGJvb2wga3ZtX3ZjcHVfc2hvdWxkX2NsZWFyX3R3ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gdm9pZCBrdm1fYXJjaF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxuIHtcbiBcdHN0cnVjdCBrdm1fczJfbW11ICptbXU7XG4rXHRpbnQgbGFzdF9jcHUgPSB2Y3B1LVx1MDAzZWNwdTtcbiBcdGludCAqbGFzdF9yYW47XG4gXG4gXHRpZiAoaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkpXG5AQCAtNzAxLDYgKzcwMiw3IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbiBcdGlmIChoYXNfdmhlKCkpXG4gXHRcdGt2bV92Y3B1X2xvYWRfdmhlKHZjcHUpO1xuIFx0a3ZtX2FyY2hfdmNwdV9sb2FkX2ZwKHZjcHUpO1xuK1x0a3ZtX3ZjcHVfbG9hZF9wbXUodmNwdSwgbGFzdF9jcHUpO1xuIFx0a3ZtX3ZjcHVfcG11X3Jlc3RvcmVfZ3Vlc3QodmNwdSk7XG4gXHRpZiAoa3ZtX2FybV9pc19wdnRpbWVfZW5hYmxlZChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gpKVxuIFx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVDT1JEX1NURUFMLCB2Y3B1KTtcbkBAIC03NTQsNyArNzU2LDYgQEAgdm9pZCBrdm1fYXJjaF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRrdm1fYXJtX3ZtaWRfY2xlYXJfYWN0aXZlKCk7XG4gXG4gXHR2Y3B1X2NsZWFyX29uX3Vuc3VwcG9ydGVkX2NwdSh2Y3B1KTtcbi1cdHZjcHUtXHUwMDNlY3B1ID0gLTE7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9fa3ZtX2FybV92Y3B1X3Bvd2VyX29mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5AQCAtMTY3MCwyOSArMTY3MSwyNiBAQCBzdGF0aWMgaW50IF9fa3ZtX3ZjcHVfc2V0X3RhcmdldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBmZWF0dXJlcyA9IGluaXQtXHUwMDNlZmVhdHVyZXNbMF07XG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbi1cdGludCByZXQgPSAtRUlOVkFMO1xuK1x0aW50IHJldDtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4gXG4gXHRpZiAodGVzdF9iaXQoS1ZNX0FSQ0hfRkxBR19WQ1BVX0ZFQVRVUkVTX0NPTkZJR1VSRUQsIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmZsYWdzKSBcdTAwMjZcdTAwMjZcbiBcdCAgICBrdm1fdmNwdV9pbml0X2NoYW5nZWQodmNwdSwgaW5pdCkpXG4tXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRiaXRtYXBfY29weShrdm0tXHUwMDNlYXJjaC52Y3B1X2ZlYXR1cmVzLCBcdTAwMjZmZWF0dXJlcywgS1ZNX1ZDUFVfTUFYX0ZFQVRVUkVTKTtcbiBcbiBcdHJldCA9IGt2bV9zZXR1cF92Y3B1KHZjcHUpO1xuIFx0aWYgKHJldClcbi1cdFx0Z290byBvdXRfdW5sb2NrO1xuK1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0LyogTm93IHdlIGtub3cgd2hhdCBpdCBpcywgd2UgY2FuIHJlc2V0IGl0LiAqL1xuIFx0a3ZtX3Jlc2V0X3ZjcHUodmNwdSk7XG4gXG4gXHRzZXRfYml0KEtWTV9BUkNIX0ZMQUdfVkNQVV9GRUFUVVJFU19DT05GSUdVUkVELCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5mbGFncyk7XG4gXHR2Y3B1X3NldF9mbGFnKHZjcHUsIFZDUFVfSU5JVElBTElaRUQpO1xuLVx0cmV0ID0gMDtcbi1vdXRfdW5sb2NrOlxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbi1cdHJldHVybiByZXQ7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBrdm1fdmNwdV9zZXRfdGFyZ2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbkBAIC0xNzA4LDYgKzE3MDYsOCBAQCBzdGF0aWMgaW50IGt2bV92Y3B1X3NldF90YXJnZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbitcbiBcdGlmICgha3ZtX3ZjcHVfaW5pdGlhbGl6ZWQodmNwdSkpXG4gXHRcdHJldHVybiBfX2t2bV92Y3B1X3NldF90YXJnZXQodmNwdSwgaW5pdCk7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYyBiL2FyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmNcbmluZGV4IDViMWFmN2UyMTc2ZmEuLmM2ODMzMWNkZmFmOTMgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jXG5AQCAtNyw5ICs3LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jcHUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2hvc3QuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmZfZXZlbnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmYvYXJtX3BtdS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1bGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9lbXVsYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nrdm0vYXJtX3BtdS5oXHUwMDNlXG5AQCAtMTcsNiArMTcsMTAgQEBcbiBcbiAjZGVmaW5lIFBFUkZfQVRUUl9DRkcxX0NPVU5URVJfNjRCSVRcdEJJVCgwKVxuIFxuKy8qXG4rICogYXJtX3BtdXMgaXMgYXBwZW5kLW9ubHkuIGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2MygpIGZlZWRzIHBlcnNpc3RlbnRcbisgKiBWTSBzdGF0ZSwgc28gYSB0cnVlIHJlc3VsdCBtdXN0IHJlbWFpbiB2YWxpZCBhZnRlciB0aGUgY2hlY2suXG4rICovXG4gc3RhdGljIExJU1RfSEVBRChhcm1fcG11cyk7XG4gc3RhdGljIERFRklORV9NVVRFWChhcm1fcG11c19sb2NrKTtcbiBcbkBAIC0yNiw3ICszMCw2IEBAIHN0YXRpYyBib29sIGt2bV9wbXVfY291bnRlcl9pc19lbmFibGVkKHN0cnVjdCBrdm1fcG1jICpwbWMpO1xuIFxuIGJvb2wga3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzKHZvaWQpXG4ge1xuLVx0Z3VhcmQobXV0ZXgpKFx1MDAyNmFybV9wbXVzX2xvY2spO1xuIFx0cmV0dXJuICFsaXN0X2VtcHR5KFx1MDAyNmFybV9wbXVzKTtcbiB9XG4gXG5AQCAtODAsNiArODMsMTEgQEAgdTY0IGt2bV9wbXVfZXZ0eXBlcl9tYXNrKHN0cnVjdCBrdm0gKmt2bSlcbiBcdHJldHVybiBtYXNrO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoc3RydWN0IGt2bSAqa3ZtKVxuK3tcbitcdHJldHVybiB0ZXN0X2JpdChLVk1fQVJDSF9GTEFHX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5mbGFncyk7XG4rfVxuK1xuIC8qKlxuICAqIGt2bV9wbWNfaXNfNjRiaXQgLSBkZXRlcm1pbmUgaWYgY291bnRlciBpcyA2NGJpdFxuICAqIEBwbWM6IGNvdW50ZXIgY29udGV4dFxuQEAgLTMxNywxMiArMzI1LDEyIEBAIHU2NCBrdm1fcG11X2FjY2Vzc2libGVfY291bnRlcl9tYXNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiB1NjQga3ZtX3BtdV9pbXBsZW1lbnRlZF9jb3VudGVyX21hc2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHU2NCB2YWwgPSBGSUVMRF9HRVQoQVJNVjhfUE1VX1BNQ1JfTiwga3ZtX3ZjcHVfcmVhZF9wbWNyKHZjcHUpKTtcbitcdHU2NCBuID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnM7XG4gXG4tXHRpZiAodmFsID09IDApXG4rXHRpZiAobiA9PSAwKVxuIFx0XHRyZXR1cm4gQklUKEFSTVY4X1BNVV9DWUNMRV9JRFgpO1xuIFx0ZWxzZVxuLVx0XHRyZXR1cm4gR0VOTUFTSyh2YWwgLSAxLCAwKSB8IEJJVChBUk1WOF9QTVVfQ1lDTEVfSURYKTtcbitcdFx0cmV0dXJuIEdFTk1BU0sobiAtIDEsIDApIHwgQklUKEFSTVY4X1BNVV9DWUNMRV9JRFgpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBrdm1fcG1jX2VuYWJsZV9wZXJmX2V2ZW50KHN0cnVjdCBrdm1fcG1jICpwbWMpXG5AQCAtNTcxLDYgKzU3OSwyMyBAQCB2b2lkIGt2bV9wbXVfc29mdHdhcmVfaW5jcmVtZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhbClcbiBcdGt2bV9wbXVfY291bnRlcl9pbmNyZW1lbnQodmNwdSwgdmFsLCBBUk1WOF9QTVVWM19QRVJGQ1RSX1NXX0lOQ1IpO1xuIH1cbiBcbit2b2lkIGt2bV9wbXVfcmVxdWVzdF9yZWNyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0dmNwdS1cdTAwM2VhcmNoLnBtdS5ldmVudHNfbmVlZF9yZWNyZWF0ZSA9IHRydWU7XG4rXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XG4rfVxuK1xuK3ZvaWQga3ZtX3BtdV9hcHBseV9wbWNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9sZCwgdTY0IHZhbCwgYm9vbCBmb3JjZV9yZWxvYWQpXG4re1xuK1x0dTY0IGNoYW5nZWQgPSBvbGQgXiB2YWw7XG4rXG4rXHQvKiBSZWxvYWQgdGhlIFBNVSBpZiB0aGUgd3JpdGUgYWZmZWN0cyB0aGUgYmFja2luZyBwZXJmIGV2ZW50cy4gKi9cbitcdGlmIChjaGFuZ2VkIFx1MDAyNiAoQVJNVjhfUE1VX1BNQ1JfTEMgfCBBUk1WOF9QTVVfUE1DUl9MUCkpXG4rXHRcdGt2bV9wbXVfcmVxdWVzdF9yZWNyZWF0ZSh2Y3B1KTtcbitcdGVsc2UgaWYgKGZvcmNlX3JlbG9hZCB8fCAoY2hhbmdlZCBcdTAwMjYgQVJNVjhfUE1VX1BNQ1JfRSkpXG4rXHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUxPQURfUE1VLCB2Y3B1KTtcbit9XG4rXG4gLyoqXG4gICoga3ZtX3BtdV9oYW5kbGVfcG1jciAtIGhhbmRsZSBQTUNSIHJlZ2lzdGVyXG4gICogQHZjcHU6IFRoZSB2Y3B1IHBvaW50ZXJcbkBAIC01NzgsMTkgKzYwMywxOCBAQCB2b2lkIGt2bV9wbXVfc29mdHdhcmVfaW5jcmVtZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhbClcbiAgKi9cbiB2b2lkIGt2bV9wbXVfaGFuZGxlX3BtY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKVxuIHtcbitcdHU2NCBvbGQgPSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBQTUNSX0VMMCk7XG4gXHRpbnQgaTtcbiBcbiBcdC8qIEZpeHVwIFBNQ1JfRUwwIHRvIHJlY29uY2lsZSB0aGUgUE1VIHZlcnNpb24gYW5kIHRoZSBMUCBiaXQgKi9cbiBcdGlmICgha3ZtX2hhc19mZWF0KHZjcHUtXHUwMDNla3ZtLCBJRF9BQTY0REZSMF9FTDEsIFBNVVZlciwgVjNQNSkpXG4gXHRcdHZhbCBcdTAwMjY9IH5BUk1WOF9QTVVfUE1DUl9MUDtcbiBcbi1cdC8qIFJlcXVlc3QgYSByZWxvYWQgb2YgdGhlIFBNVSB0byBlbmFibGUvZGlzYWJsZSBhZmZlY3RlZCBjb3VudGVycyAqL1xuLVx0aWYgKChfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBQTUNSX0VMMCkgXiB2YWwpIFx1MDAyNiBBUk1WOF9QTVVfUE1DUl9FKVxuLVx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XG4tXG4gXHQvKiBUaGUgcmVzZXQgYml0cyBkb24ndCBpbmRpY2F0ZSBhbnkgc3RhdGUsIGFuZCBzaG91bGRuJ3QgYmUgc2F2ZWQuICovXG4gXHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgUE1DUl9FTDAsICh2YWwgXHUwMDI2IH4oQVJNVjhfUE1VX1BNQ1JfQyB8IEFSTVY4X1BNVV9QTUNSX1ApKSk7XG4gXG4rXHRrdm1fcG11X2FwcGx5X3BtY3IodmNwdSwgb2xkLCBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBQTUNSX0VMMCksIGZhbHNlKTtcbitcbiBcdGlmICh2YWwgXHUwMDI2IEFSTVY4X1BNVV9QTUNSX0MpXG4gXHRcdGt2bV9wbXVfc2V0X2NvdW50ZXJfdmFsdWUodmNwdSwgQVJNVjhfUE1VX0NZQ0xFX0lEWCwgMCk7XG4gXG5AQCAtNjA2LDYgKzYzMCwyMCBAQCB2b2lkIGt2bV9wbXVfaGFuZGxlX3BtY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKVxuIFx0fVxuIH1cbiBcbit2b2lkIGt2bV9wbXVfYXBwbHlfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBvbGQsIHU2NCB2YWwpXG4re1xuK1x0dTY0IGNoYW5nZWQgPSBvbGQgXiB2YWw7XG4rXG4rXHQvKlxuK1x0ICogSFBNTiBkZXRlcm1pbmVzIHdoaWNoIGNvdW50ZXJzIEhQTUQgYW5kIEhMUCBhcHBseSB0by4gQ2hhbmdlcyB0b1xuK1x0ICogdGhlc2UgZmllbGRzIHJlcXVpcmUgbmV3IHBlcmYgZXZlbnQgZmlsdGVycyBhbmQgc2FtcGxlIHBlcmlvZHMuXG4rXHQgKi9cbitcdGlmIChjaGFuZ2VkIFx1MDAyNiAoTURDUl9FTDJfSFBNTiB8IE1EQ1JfRUwyX0hQTUQgfCBNRENSX0VMMl9ITFApKVxuK1x0XHRrdm1fcG11X3JlcXVlc3RfcmVjcmVhdGUodmNwdSk7XG4rXHRlbHNlIGlmIChjaGFuZ2VkIFx1MDAyNiBNRENSX0VMMl9IUE1FKVxuK1x0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XG4rfVxuK1xuIHN0YXRpYyBib29sIGt2bV9wbXVfY291bnRlcl9pc19lbmFibGVkKHN0cnVjdCBrdm1fcG1jICpwbWMpXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX3BtY190b192Y3B1KHBtYyk7XG5AQCAtNjQ5LDEwICs2ODcsOCBAQCBzdGF0aWMgYm9vbCBrdm1fcG1jX2NvdW50c19hdF9lbDIoc3RydWN0IGt2bV9wbWMgKnBtYylcbiBcdHJldHVybiBrdm1fcG1jX3JlYWRfZXZ0cmVnKHBtYykgXHUwMDI2IEFSTVY4X1BNVV9JTkNMVURFX0VMMjtcbiB9XG4gXG4tc3RhdGljIGludCBrdm1fbWFwX3BtdV9ldmVudChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBldmVudHNlbClcbitzdGF0aWMgaW50IGt2bV9tYXBfcG11X2V2ZW50KHN0cnVjdCBhcm1fcG11ICpwbXUsIHVuc2lnbmVkIGludCBldmVudHNlbClcbiB7XG4tXHRzdHJ1Y3QgYXJtX3BtdSAqcG11ID0ga3ZtLVx1MDAzZWFyY2guYXJtX3BtdTtcbi1cbiBcdC8qXG4gXHQgKiBUaGUgQ1BVIFBNVSBsaWtlbHkgaXNuJ3QgUE1VdjM7IGxldCB0aGUgZHJpdmVyIHByb3ZpZGUgYSBtYXBwaW5nXG4gXHQgKiBmb3IgdGhlIGd1ZXN0J3MgUE1VdjMgZXZlbnQgSUQuXG5AQCAtNjYzLDE0ICs2OTksMjcgQEAgc3RhdGljIGludCBrdm1fbWFwX3BtdV9ldmVudChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBldmVudHNlbClcbiBcdHJldHVybiBldmVudHNlbDtcbiB9XG4gXG4tLyoqXG4tICoga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudCAtIGNyZWF0ZSBhIHBlcmYgZXZlbnQgZm9yIGEgY291bnRlclxuLSAqIEBwbWM6IENvdW50ZXIgY29udGV4dFxuLSAqL1xuLXN0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYylcbitzdGF0aWMgc3RydWN0IGFybV9wbXUgKmt2bV9wbXVfcHJvYmVfYXJtcG11KGludCBjcHUpXG4re1xuK1x0c3RydWN0IGFybV9wbXVfZW50cnkgKmVudHJ5O1xuK1x0c3RydWN0IGFybV9wbXUgKnBtdTtcbitcbitcdGd1YXJkKHJjdSkoKTtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVudHJ5LCBcdTAwMjZhcm1fcG11cywgZW50cnkpIHtcbitcdFx0cG11ID0gZW50cnktXHUwMDNlYXJtX3BtdTtcbitcbitcdFx0aWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBcdTAwMjZwbXUtXHUwMDNlc3VwcG9ydGVkX2NwdXMpKVxuK1x0XHRcdHJldHVybiBwbXU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rc3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdShzdHJ1Y3Qga3ZtX3BtYyAqcG1jLFxuK1x0XHRcdFx0XHQgICAgICAgc3RydWN0IGFybV9wbXUgKmFybV9wbXUpXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX3BtY190b192Y3B1KHBtYyk7XG4tXHRzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guYXJtX3BtdTtcbiBcdHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDtcbiBcdHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgYXR0cjtcbiBcdGludCBldmVudHNlbDtcbkBAIC03MDQsNyArNzUzLDcgQEAgc3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxuIFx0ICogRG9uJ3QgY3JlYXRlIGFuIGV2ZW50IGlmIHdlJ3JlIHJ1bm5pbmcgb24gaGFyZHdhcmUgdGhhdCByZXF1aXJlc1xuIFx0ICogUE1VdjMgZXZlbnQgdHJhbnNsYXRpb24gYW5kIHdlIGNvdWxkbid0IGZpbmQgYSB2YWxpZCBtYXBwaW5nLlxuIFx0ICovXG4tXHRldmVudHNlbCA9IGt2bV9tYXBfcG11X2V2ZW50KHZjcHUtXHUwMDNla3ZtLCBldmVudHNlbCk7XG4rXHRldmVudHNlbCA9IGt2bV9tYXBfcG11X2V2ZW50KGFybV9wbXUsIGV2ZW50c2VsKTtcbiBcdGlmIChldmVudHNlbCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTc0OSw2ICs3OTgsMzIgQEAgc3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxuIFx0cG1jLVx1MDAzZXBlcmZfZXZlbnQgPSBldmVudDtcbiB9XG4gXG4rLyoqXG4rICoga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudCAtIGNyZWF0ZSBhIHBlcmYgZXZlbnQgZm9yIGEgY291bnRlclxuKyAqIEBwbWM6IENvdW50ZXIgY29udGV4dFxuKyAqL1xuK3N0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYylcbit7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fcG1jX3RvX3ZjcHUocG1jKTtcbitcdHN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5hcm1fcG11O1xuK1xuK1x0aWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LVx1MDAzZWt2bSkpIHtcbitcdFx0ZG8ge1xuK1x0XHRcdGFybV9wbXUgPSBrdm1fcG11X3Byb2JlX2FybXBtdShSRUFEX09OQ0UodmNwdS1cdTAwM2VjcHUpKTtcbitcbitcdFx0XHRpZiAoIWFybV9wbXUpIHtcbitcdFx0XHRcdHByX3dhcm5fb25jZShcImt2bTogVW5zdXBwb3J0ZWQgUE1VIHZhcmlhdGlvbiBkZXRlY3RlZC5cXG5cIik7XG4rXHRcdFx0XHRhZGRfdGFpbnQoVEFJTlRfQ1BVX09VVF9PRl9TUEVDLCBMT0NLREVQX1NUSUxMX09LKTtcbitcdFx0XHRcdHJldHVybjtcbitcdFx0XHR9XG4rXG4rXHRcdFx0a3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdShwbWMsIGFybV9wbXUpO1xuK1x0XHR9IHdoaWxlICghY3B1bWFza190ZXN0X2NwdShSRUFEX09OQ0UodmNwdS1cdTAwM2VjcHUpLCBcdTAwMjZhcm1fcG11LVx1MDAzZXN1cHBvcnRlZF9jcHVzKSk7XG4rXHR9IGVsc2Uge1xuK1x0XHRrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50X3dpdGhfcG11KHBtYywgYXJtX3BtdSk7XG4rXHR9XG4rfVxuK1xuIC8qKlxuICAqIGt2bV9wbXVfc2V0X2NvdW50ZXJfZXZlbnRfdHlwZSAtIHNldCBzZWxlY3RlZCBjb3VudGVyIHRvIG1vbml0b3Igc29tZSBldmVudFxuICAqIEB2Y3B1OiBUaGUgdmNwdSBwb2ludGVyXG5AQCAtNzg5LDQzICs4NjQsNyBAQCB2b2lkIGt2bV9ob3N0X3BtdV9pbml0KHN0cnVjdCBhcm1fcG11ICpwbXUpXG4gXHRcdHJldHVybjtcbiBcbiBcdGVudHJ5LVx1MDAzZWFybV9wbXUgPSBwbXU7XG4tXHRsaXN0X2FkZF90YWlsKFx1MDAyNmVudHJ5LVx1MDAzZWVudHJ5LCBcdTAwMjZhcm1fcG11cyk7XG4tfVxuLVxuLXN0YXRpYyBzdHJ1Y3QgYXJtX3BtdSAqa3ZtX3BtdV9wcm9iZV9hcm1wbXUodm9pZClcbi17XG4tXHRzdHJ1Y3QgYXJtX3BtdV9lbnRyeSAqZW50cnk7XG4tXHRzdHJ1Y3QgYXJtX3BtdSAqcG11O1xuLVx0aW50IGNwdTtcbi1cbi1cdGd1YXJkKG11dGV4KShcdTAwMjZhcm1fcG11c19sb2NrKTtcbi1cbi1cdC8qXG4tXHQgKiBJdCBpcyBzYWZlIHRvIHVzZSBhIHN0YWxlIGNwdSB0byBpdGVyYXRlIHRoZSBsaXN0IG9mIFBNVXMgc28gbG9uZyBhc1xuLVx0ICogdGhlIHNhbWUgdmFsdWUgaXMgdXNlZCBmb3IgdGhlIGVudGlyZXR5IG9mIHRoZSBsb29wLiBHaXZlbiB0aGlzLCBhbmRcbi1cdCAqIHRoZSBmYWN0IHRoYXQgbm8gcGVyY3B1IGRhdGEgaXMgdXNlZCBmb3IgdGhlIGxvb2t1cCB0aGVyZSBpcyBubyBuZWVkXG4tXHQgKiB0byBkaXNhYmxlIHByZWVtcHRpb24uXG4tXHQgKlxuLVx0ICogSXQgaXMgc3RpbGwgbmVjZXNzYXJ5IHRvIGdldCBhIHZhbGlkIGNwdSwgdGhvdWdoLCB0byBwcm9iZSBmb3IgdGhlXG4tXHQgKiBkZWZhdWx0IFBNVSBpbnN0YW5jZSBhcyB1c2Vyc3BhY2UgaXMgbm90IHJlcXVpcmVkIHRvIHNwZWNpZnkgYSBQTVVcbi1cdCAqIHR5cGUuIEluIG9yZGVyIHRvIHVwaG9sZCB0aGUgcHJlZXhpc3RpbmcgYmVoYXZpb3IgS1ZNIHNlbGVjdHMgdGhlXG4tXHQgKiBQTVUgaW5zdGFuY2UgZm9yIHRoZSBjb3JlIGR1cmluZyB2Y3B1IGluaXQuIEEgZGVwZW5kZW50IHVzZVxuLVx0ICogY2FzZSB3b3VsZCBiZSBhIHVzZXIgd2l0aCBkaXNkYWluIG9mIGFsbCB0aGluZ3MgYmlnLkxJVFRMRSB0aGF0XG4tXHQgKiBhZmZpbmVzIHRoZSBWTU0gdG8gYSBwYXJ0aWN1bGFyIGNsdXN0ZXIgb2YgY29yZXMuXG4tXHQgKlxuLVx0ICogSW4gYW55IGNhc2UsIHVzZXJzcGFjZSBzaG91bGQganVzdCBkbyB0aGUgc2FuZSB0aGluZyBhbmQgdXNlIHRoZSBVQVBJXG4tXHQgKiB0byBzZWxlY3QgYSBQTVUgdHlwZSBkaXJlY3RseS4gQnV0LCBiZSB3YXJ5IG9mIHRoZSBiYWdnYWdlIGJlaW5nXG4tXHQgKiBjYXJyaWVkIGhlcmUuXG4tXHQgKi9cbi1cdGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7XG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcdTAwMjZhcm1fcG11cywgZW50cnkpIHtcbi1cdFx0cG11ID0gZW50cnktXHUwMDNlYXJtX3BtdTtcbi1cbi1cdFx0aWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBcdTAwMjZwbXUtXHUwMDNlc3VwcG9ydGVkX2NwdXMpKVxuLVx0XHRcdHJldHVybiBwbXU7XG4tXHR9XG4tXG4tXHRyZXR1cm4gTlVMTDtcbitcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNmVudHJ5LVx1MDAzZWVudHJ5LCBcdTAwMjZhcm1fcG11cyk7XG4gfVxuIFxuIHN0YXRpYyB1NjQgX19jb21wdXRlX3BtY2VpZChzdHJ1Y3QgYXJtX3BtdSAqcG11LCBib29sIHBtY2VpZDEpXG5AQCAtODcxLDYgKzkxMCwxMyBAQCB1NjQga3ZtX3BtdV9nZXRfcG1jZWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBwbWNlaWQxKVxuIFx0dTY0IHZhbCwgbWFzayA9IDA7XG4gXHRpbnQgYmFzZSwgaSwgbnJfZXZlbnRzO1xuIFxuK1x0LypcbitcdCAqIEhpZGUgdGhlIGhhcmR3YXJlIFBNVSdzIGV2ZW50IHNldCB0byBrZWVwIFBNQ0VJRCBzdGFibGUgYWNyb3NzXG4rXHQgKiBwaHlzaWNhbCBDUFUgbWlncmF0aW9uLlxuK1x0ICovXG4rXHRpZiAoa3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXHUwMDNla3ZtKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHRpZiAoIXBtY2VpZDEpIHtcbiBcdFx0dmFsID0gY29tcHV0ZV9wbWNlaWQwKHZjcHUpO1xuIFx0XHRiYXNlID0gMDtcbkBAIC04OTgsOSArOTQ0LDI3IEBAIHU2NCBrdm1fcG11X2dldF9wbWNlaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHBtY2VpZDEpXG4gXHRyZXR1cm4gdmFsIFx1MDAyNiBtYXNrO1xuIH1cbiBcbit2b2lkIGt2bV92Y3B1X2xvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGxhc3RfY3B1KVxuK3tcbitcdGlmICgha3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXHUwMDNla3ZtKSB8fCB2Y3B1LVx1MDAzZWNwdSA9PSBsYXN0X2NwdSB8fCBsYXN0X2NwdSA9PSAtMSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKGt2bV9wbXVfcHJvYmVfYXJtcG11KHZjcHUtXHUwMDNlY3B1KSAhPSBrdm1fcG11X3Byb2JlX2FybXBtdShsYXN0X2NwdSkpXG4rXHRcdGt2bV9wbXVfcmVxdWVzdF9yZWNyZWF0ZSh2Y3B1KTtcbit9XG4rXG4gdm9pZCBrdm1fdmNwdV9yZWxvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4rXHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnBtdTtcbiBcdHU2NCBtYXNrID0ga3ZtX3BtdV9pbXBsZW1lbnRlZF9jb3VudGVyX21hc2sodmNwdSk7XG4rXHRpbnQgaTtcbitcbitcdGlmIChwbXUtXHUwMDNlZXZlbnRzX25lZWRfcmVjcmVhdGUpIHtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgS1ZNX0FSTVY4X1BNVV9NQVhfQ09VTlRFUlM7IGkrKylcbitcdFx0XHRrdm1fcG11X3N0b3BfY291bnRlcihrdm1fdmNwdV9pZHhfdG9fcG1jKHZjcHUsIGkpKTtcbitcbitcdFx0cG11LVx1MDAzZWV2ZW50c19uZWVkX3JlY3JlYXRlID0gZmFsc2U7XG4rXHR9XG4gXG4gXHRfX3ZjcHVfcm13X3N5c19yZWcodmNwdSwgUE1PVlNTRVRfRUwwLCBcdTAwMjY9LCBtYXNrKTtcbiBcdF9fdmNwdV9ybXdfc3lzX3JlZyh2Y3B1LCBQTUlOVEVOU0VUX0VMMSwgXHUwMDI2PSwgbWFzayk7XG5AQCAtOTM5LDggKzEwMDMsOCBAQCBpbnQga3ZtX2FybV9wbXVfdjNfZW5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdC8qIE9ubHkgcG9zc2libGUgd2hlbiB1c2luZyBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NUUklDVCAqL1xuLVx0aWYgKCF2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmFybV9wbXUpXG4rXHQvKiBTdHJpY3QgUE1VdjMgcmVxdWlyZXMgYSBoYXJkd2FyZSBQTVUgb3IgZml4ZWQtY291bnRlcnMtb25seSBtb2RlLiAqL1xuK1x0aWYgKCF2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmFybV9wbXUgXHUwMDI2XHUwMDI2ICFrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdS1cdTAwM2Vrdm0pKVxuIFx0XHRyZXR1cm4gLUVOWElPO1xuIFxuIFx0aWYgKGlycWNoaXBfaW5fa2VybmVsKHZjcHUtXHUwMDNla3ZtKSkge1xuQEAgLTEwMTMsNiArMTA3Nyw5IEBAIHU4IGt2bV9hcm1fcG11X2dldF9tYXhfY291bnRlcnMoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbiBcdHN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0ga3ZtLVx1MDAzZWFyY2guYXJtX3BtdTtcbiBcbitcdGlmIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHQvKlxuIFx0ICogVW5kZXIgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TVFJJQ1Qgbm8gUE1VIGV4aXN0cyB1bnRpbCB1c2Vyc3BhY2Ugc2V0c1xuIFx0ICogb25lLCBzbyB0aGlzIGNhbiBiZSByZWFjaGVkIGJlZm9yZSBhcm1fcG11IGlzIHNldC4gUmVwb3J0IG5vXG5AQCAtMTAzNSwzMCArMTEwMiwxMiBAQCB1OCBrdm1fYXJtX3BtdV9nZXRfbWF4X2NvdW50ZXJzKHN0cnVjdCBrdm0gKmt2bSlcbiBcdHJldHVybiBiaXRtYXBfd2VpZ2h0KGFybV9wbXUtXHUwMDNlY250cl9tYXNrLCBBUk1WOF9QTVVfTUFYX0dFTkVSQUxfQ09VTlRFUlMpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBrdm1fYXJtX3NldF9ucl9jb3VudGVycyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBucilcbi17XG4tXHRrdm0tXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnMgPSBucjtcbi1cbi1cdC8qIFJlc2V0IE1EQ1JfRUwyLkhQTU4gYmVoaW5kIHRoZSB2Y3B1cycgYmFjay4uLiAqL1xuLVx0aWYgKHRlc3RfYml0KEtWTV9BUk1fVkNQVV9IQVNfRUwyLCBrdm0tXHUwMDNlYXJjaC52Y3B1X2ZlYXR1cmVzKSkge1xuLVx0XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHRcdHVuc2lnbmVkIGxvbmcgaTtcbi1cbi1cdFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKSB7XG4tXHRcdFx0dTY0IHZhbCA9IF9fdmNwdV9zeXNfcmVnKHZjcHUsIE1EQ1JfRUwyKTtcbi1cdFx0XHR2YWwgXHUwMDI2PSB+TURDUl9FTDJfSFBNTjtcbi1cdFx0XHR2YWwgfD0gRklFTERfUFJFUChNRENSX0VMMl9IUE1OLCBrdm0tXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnMpO1xuLVx0XHRcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBNRENSX0VMMiwgdmFsKTtcbi1cdFx0fVxuLVx0fVxuLX1cbi1cbiBzdGF0aWMgdm9pZCBrdm1fYXJtX3NldF9wbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSlcbiB7XG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiBcbiBcdGt2bS1cdTAwM2VhcmNoLmFybV9wbXUgPSBhcm1fcG11O1xuLVx0a3ZtX2FybV9zZXRfbnJfY291bnRlcnMoa3ZtLCBrdm1fYXJtX3BtdV9nZXRfbWF4X2NvdW50ZXJzKGt2bSkpO1xuK1x0a3ZtLVx1MDAzZWFyY2gubnJfcG11X2NvdW50ZXJzID0ga3ZtX2FybV9wbXVfZ2V0X21heF9jb3VudGVycyhrdm0pO1xuIH1cbiBcbiAvKipcbkBAIC0xMDc2LDcgKzExMjUsMjQgQEAgc3RhdGljIHZvaWQga3ZtX2FybV9zZXRfcG11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGFybV9wbXUgKmFybV9wbXUpXG4gICovXG4gaW50IGt2bV9hcm1fc2V0X2RlZmF1bHRfcG11KHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4tXHRzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IGt2bV9wbXVfcHJvYmVfYXJtcG11KCk7XG4rXHQvKlxuK1x0ICogSXQgaXMgc2FmZSB0byB1c2UgYSBzdGFsZSBjcHUgdG8gaXRlcmF0ZSB0aGUgbGlzdCBvZiBQTVVzIHNvIGxvbmcgYXNcbitcdCAqIHRoZSBzYW1lIHZhbHVlIGlzIHVzZWQgZm9yIHRoZSBlbnRpcmV0eSBvZiB0aGUgbG9vcC4gR2l2ZW4gdGhpcywgYW5kXG4rXHQgKiB0aGUgZmFjdCB0aGF0IG5vIHBlcmNwdSBkYXRhIGlzIHVzZWQgZm9yIHRoZSBsb29rdXAgdGhlcmUgaXMgbm8gbmVlZFxuK1x0ICogdG8gZGlzYWJsZSBwcmVlbXB0aW9uLlxuK1x0ICpcbitcdCAqIEl0IGlzIHN0aWxsIG5lY2Vzc2FyeSB0byBnZXQgYSB2YWxpZCBjcHUsIHRob3VnaCwgdG8gcHJvYmUgZm9yIHRoZVxuK1x0ICogZGVmYXVsdCBQTVUgaW5zdGFuY2UgYXMgdXNlcnNwYWNlIGlzIG5vdCByZXF1aXJlZCB0byBzcGVjaWZ5IGEgUE1VXG4rXHQgKiB0eXBlLiBJbiBvcmRlciB0byB1cGhvbGQgdGhlIHByZWV4aXN0aW5nIGJlaGF2aW9yIEtWTSBzZWxlY3RzIHRoZVxuK1x0ICogUE1VIGluc3RhbmNlIGZvciB0aGUgY29yZSBkdXJpbmcgdmNwdSBpbml0LiBBIGRlcGVuZGVudCB1c2VcbitcdCAqIGNhc2Ugd291bGQgYmUgYSB1c2VyIHdpdGggZGlzZGFpbiBvZiBhbGwgdGhpbmdzIGJpZy5MSVRUTEUgdGhhdFxuK1x0ICogYWZmaW5lcyB0aGUgVk1NIHRvIGEgcGFydGljdWxhciBjbHVzdGVyIG9mIGNvcmVzLlxuK1x0ICpcbitcdCAqIEluIGFueSBjYXNlLCB1c2Vyc3BhY2Ugc2hvdWxkIGp1c3QgZG8gdGhlIHNhbmUgdGhpbmcgYW5kIHVzZSB0aGUgVUFQSVxuK1x0ICogdG8gc2VsZWN0IGEgUE1VIHR5cGUgZGlyZWN0bHksIG9yIHJlcXVlc3QgZml4ZWQtY291bnRlcnMtb25seVxuK1x0ICogZW11bGF0aW9uLiBCdXQsIGJlIHdhcnkgb2YgdGhlIGJhZ2dhZ2UgYmVpbmcgY2FycmllZCBoZXJlLlxuK1x0ICovXG4rXHRzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IGt2bV9wbXVfcHJvYmVfYXJtcG11KHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpO1xuIFxuIFx0aWYgKCFhcm1fcG11KVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbkBAIC0xMDkzLDE3ICsxMTU5LDE5IEBAIHN0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwbXVfaWQpXG4gXHRpbnQgcmV0ID0gLUVOWElPO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4tXHRtdXRleF9sb2NrKFx1MDAyNmFybV9wbXVzX2xvY2spO1xuK1x0Z3VhcmQocmN1KSgpO1xuIFxuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXHUwMDI2YXJtX3BtdXMsIGVudHJ5KSB7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbnRyeSwgXHUwMDI2YXJtX3BtdXMsIGVudHJ5KSB7XG4gXHRcdGFybV9wbXUgPSBlbnRyeS1cdTAwM2Vhcm1fcG11O1xuIFx0XHRpZiAoYXJtX3BtdS1cdTAwM2VwbXUudHlwZSA9PSBwbXVfaWQpIHtcbiBcdFx0XHRpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pIHx8XG4rXHRcdFx0ICAgIGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seShrdm0pIHx8XG4gXHRcdFx0ICAgIChrdm0tXHUwMDNlYXJjaC5wbXVfZmlsdGVyIFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC5hcm1fcG11ICE9IGFybV9wbXUpKSB7XG4gXHRcdFx0XHRyZXQgPSAtRUJVU1k7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXG4rXHRcdFx0c2V0X2JpdChLVk1fQVJDSF9GTEFHX1BNVV9WM19FWFBMSUNJVCwgXHUwMDI2a3ZtLVx1MDAzZWFyY2guZmxhZ3MpO1xuIFx0XHRcdGt2bV9hcm1fc2V0X3BtdShrdm0sIGFybV9wbXUpO1xuIFx0XHRcdGNwdW1hc2tfY29weShrdm0tXHUwMDNlYXJjaC5zdXBwb3J0ZWRfY3B1cywgXHUwMDI2YXJtX3BtdS1cdTAwM2VzdXBwb3J0ZWRfY3B1cyk7XG4gXG5AQCAtMTEyMiwyMSArMTE5MCwzOSBAQCBzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcG11X2lkKVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRtdXRleF91bmxvY2soXHUwMDI2YXJtX3BtdXNfbG9jayk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbitzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbitcbitcdGlmIChrdm1fdm1faGFzX3Jhbl9vbmNlKGt2bSkgfHwga3ZtLVx1MDAzZWFyY2gucG11X2ZpbHRlciB8fFxuK1x0ICAgIHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0VYUExJQ0lULCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5mbGFncykpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHRzZXRfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmZsYWdzKTtcbitcdGt2bS1cdTAwM2VhcmNoLm5yX3BtdV9jb3VudGVycyA9IDA7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfbnJfY291bnRlcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgbilcbiB7XG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbiBcbitcdGlmIChrdm1fdm1faGFzX3Jhbl9vbmNlKGt2bSkpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4gXHRpZiAoIWt2bS1cdTAwM2VhcmNoLmFybV9wbXUpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKG4gXHUwMDNlIGt2bV9hcm1fcG11X2dldF9tYXhfY291bnRlcnMoa3ZtKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRrdm1fYXJtX3NldF9ucl9jb3VudGVycyhrdm0sIG4pO1xuK1x0a3ZtLVx1MDAzZWFyY2gubnJfcG11X2NvdW50ZXJzID0gbjtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0xMjAwLDcgKzEyODYsNyBAQCBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuIFx0XHQgICAgIGZpbHRlci5hY3Rpb24gIT0gS1ZNX1BNVV9FVkVOVF9ERU5ZKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdFx0aWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSlcbitcdFx0aWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSB8fCBrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSlcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuIFx0XHRpZiAoIWt2bS1cdTAwM2VhcmNoLmFybV9wbXUpXG5AQCAtMTI0OCw2ICsxMzM0LDggQEAgaW50IGt2bV9hcm1fcG11X3YzX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbiBcbiBcdFx0cmV0dXJuIGt2bV9hcm1fcG11X3YzX3NldF9ucl9jb3VudGVycyh2Y3B1LCBuKTtcbiBcdH1cbitcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOlxuK1x0XHRyZXR1cm4ga3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUpO1xuIFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQ6XG4gXHRcdHJldHVybiBrdm1fYXJtX3BtdV92M19pbml0KHZjcHUpO1xuIFx0fVxuQEAgLTEyNzQsNiArMTM2Miw5IEBAIGludCBrdm1fYXJtX3BtdV92M19nZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4gXHRcdGlycSA9IHZjcHUtXHUwMDNlYXJjaC5wbXUuaXJxX251bTtcbiBcdFx0cmV0dXJuIHB1dF91c2VyKGlycSwgdWFkZHIpO1xuIFx0fVxuK1x0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFk6XG4rXHRcdGlmIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdS1cdTAwM2Vrdm0pKVxuK1x0XHRcdHJldHVybiAwO1xuIFx0fVxuIFxuIFx0cmV0dXJuIC1FTlhJTztcbkBAIC0xMjg3LDYgKzEzNzgsNyBAQCBpbnQga3ZtX2FybV9wbXVfdjNfaGFzX2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuIFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJTFRFUjpcbiBcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VOlxuIFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9OUl9DT1VOVEVSUzpcbitcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOlxuIFx0XHRpZiAoa3ZtX3ZjcHVfaGFzX3BtdSh2Y3B1KSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdH1cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9yZXNldC5jIGIvYXJjaC9hcm02NC9rdm0vcmVzZXQuY1xuaW5kZXggMTBlYjcyNDlhYTllOC4uY2RjZGVhODUwOTA5YyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3Jlc2V0LmNcbisrKyBiL2FyY2gvYXJtNjQva3ZtL3Jlc2V0LmNcbkBAIC0xNzgsMTcgKzE3OCwyNCBAQCBzdGF0aWMgdm9pZCBrdm1fdmNwdV9yZXNldF9zdmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHZvaWQga3ZtX3Jlc2V0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3Jlc2V0X3N0YXRlIHJlc2V0X3N0YXRlO1xuLVx0Ym9vbCBsb2FkZWQ7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnJ1bm5pbmc7XG4rXHRib29sIGxvYWRlZCA9IGZhbHNlO1xuIFxuIFx0c3Bpbl9sb2NrKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5tcF9zdGF0ZV9sb2NrKTtcbiBcdHJlc2V0X3N0YXRlID0gdmNwdS1cdTAwM2VhcmNoLnJlc2V0X3N0YXRlO1xuIFx0dmNwdS1cdTAwM2VhcmNoLnJlc2V0X3N0YXRlLnJlc2V0ID0gZmFsc2U7XG4gXHRzcGluX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gubXBfc3RhdGVfbG9jayk7XG4gXG4tXHRwcmVlbXB0X2Rpc2FibGUoKTtcbi1cdGxvYWRlZCA9ICh2Y3B1LVx1MDAzZWNwdSAhPSAtMSk7XG4tXHRpZiAobG9hZGVkKVxuK1x0Z3VhcmQocHJlZW1wdCkoKTtcbitcbitcdHJ1bm5pbmcgPSBrdm1fZ2V0X3J1bm5pbmdfdmNwdSgpO1xuK1x0aWYgKHJ1bm5pbmcpIHtcbitcdFx0aWYgKEtWTV9CVUdfT04ocnVubmluZyAhPSB2Y3B1LCB2Y3B1LVx1MDAzZWt2bSkpXG4rXHRcdFx0cmV0dXJuO1xuK1xuK1x0XHRsb2FkZWQgPSB0cnVlO1xuIFx0XHRrdm1fYXJjaF92Y3B1X3B1dCh2Y3B1KTtcbitcdH1cbiBcbiBcdGlmICgha3ZtX2FybV92Y3B1X3N2ZV9maW5hbGl6ZWQodmNwdSkpIHtcbiBcdFx0aWYgKHZjcHVfaGFzX2ZlYXR1cmUodmNwdSwgS1ZNX0FSTV9WQ1BVX1NWRSkpXG5AQCAtMjE1LDcgKzIyMiw2IEBAIHZvaWQga3ZtX3Jlc2V0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0aWYgKGxvYWRlZClcbiBcdFx0a3ZtX2FyY2hfdmNwdV9sb2FkKHZjcHUsIHNtcF9wcm9jZXNzb3JfaWQoKSk7XG4tXHRwcmVlbXB0X2VuYWJsZSgpO1xuIH1cbiBcbiB1MzIga3ZtX2dldF9wYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSlcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jIGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuY1xuaW5kZXggNDRhYWU1MmM0NzNkNy4uYTVjMTIxNDgyYzcxMyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmNcbisrKyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmNcbkBAIC0xMzI2LDcgKzEzMjYsNyBAQCBzdGF0aWMgYm9vbCBhY2Nlc3NfcG11X2V2dHlwZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsXG4gXG4gc3RhdGljIGludCBzZXRfcG1yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyLCB1NjQgdmFsKVxuIHtcbi1cdHU2NCBtYXNrID0ga3ZtX3BtdV9hY2Nlc3NpYmxlX2NvdW50ZXJfbWFzayh2Y3B1KTtcbitcdHU2NCBtYXNrID0ga3ZtX3BtdV9pbXBsZW1lbnRlZF9jb3VudGVyX21hc2sodmNwdSk7XG4gXG4gXHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgci1cdTAwM2VyZWcsIHZhbCBcdTAwMjYgbWFzayk7XG4gXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XG5AQCAtMTMzNCw5ICsxMzM0LDE4IEBAIHN0YXRpYyBpbnQgc2V0X3BtcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqciwgdTY0IHZhXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBzZXRfcG11X2V2dHlwZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuK1x0XHRcdCAgIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnIsIHU2NCB2YWwpXG4re1xuK1x0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIHItXHUwMDNlcmVnLCB2YWwpO1xuK1x0a3ZtX3BtdV9yZXF1ZXN0X3JlY3JlYXRlKHZjcHUpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgZ2V0X3BtcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqciwgdTY0ICp2YWwpXG4ge1xuLVx0dTY0IG1hc2sgPSBrdm1fcG11X2FjY2Vzc2libGVfY291bnRlcl9tYXNrKHZjcHUpO1xuK1x0dTY0IG1hc2sgPSBrdm1fcG11X2ltcGxlbWVudGVkX2NvdW50ZXJfbWFzayh2Y3B1KTtcbiBcbiBcdCp2YWwgPSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCByLVx1MDAzZXJlZykgXHUwMDI2IG1hc2s7XG4gXHRyZXR1cm4gMDtcbkBAIC0xNTE3LDYgKzE1MjYsNyBAQCBzdGF0aWMgaW50IHNldF9wbWNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcixcbiB7XG4gXHR1OCBuZXdfbiA9IEZJRUxEX0dFVChBUk1WOF9QTVVfUE1DUl9OLCB2YWwpO1xuIFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4rXHR1NjQgb2xkID0gX192Y3B1X3N5c19yZWcodmNwdSwgci1cdTAwM2VyZWcpO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4gXG5AQCAtMTU0OSw3ICsxNTU5LDcgQEAgc3RhdGljIGludCBzZXRfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnIsXG4gXHRcdHZhbCB8PSBBUk1WOF9QTVVfUE1DUl9MQztcbiBcbiBcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCByLVx1MDAzZXJlZywgdmFsKTtcbi1cdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUxPQURfUE1VLCB2Y3B1KTtcbitcdGt2bV9wbXVfYXBwbHlfcG1jcih2Y3B1LCBvbGQsIHZhbCwgdHJ1ZSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMTU4Myw3ICsxNTkzLDcgQEAgc3RhdGljIGludCBzZXRfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnIsXG4gLyogTWFjcm8gdG8gZXhwYW5kIHRoZSBQTUVWVFlQRVJuX0VMMCByZWdpc3RlciAqL1xuICNkZWZpbmUgUE1VX1BNRVZUWVBFUl9FTDAobilcdFx0XHRcdFx0XHRcXFxuIFx0eyBQTVVfU1lTX1JFRyhQTUVWVFlQRVJuX0VMMChuKSksXHRcdFx0XHRcXFxuLVx0ICAucmVzZXQgPSByZXNldF9wbWV2dHlwZXIsXHRcdFx0XHRcdFxcXG4rXHQgIC5yZXNldCA9IHJlc2V0X3BtZXZ0eXBlciwgLnNldF91c2VyID0gc2V0X3BtdV9ldnR5cGVyLFx0XFxcbiBcdCAgLmFjY2VzcyA9IGFjY2Vzc19wbXVfZXZ0eXBlciwgLnJlZyA9IChQTUVWVFlQRVIwX0VMMCArIG4pLCB9XG4gXG4gLyogTWFjcm8gdG8gZXhwYW5kIHRoZSBBTVUgY291bnRlciBhbmQgdHlwZSByZWdpc3RlcnMqL1xuQEAgLTMxMTQsMTcgKzMxMjQsMjIgQEAgc3RhdGljIGJvb2wgYWNjZXNzX21kY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0fVxuIFxuIFx0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIE1EQ1JfRUwyLCB2YWwpO1xuLVxuLVx0Lypcbi1cdCAqIFJlcXVlc3QgYSByZWxvYWQgb2YgdGhlIFBNVSB0byBlbmFibGUvZGlzYWJsZSB0aGUgY291bnRlcnNcbi1cdCAqIGFmZmVjdGVkIGJ5IEhQTUUuXG4tXHQgKi9cbi1cdGlmICgob2xkIF4gdmFsKSBcdTAwMjYgTURDUl9FTDJfSFBNRSlcbi1cdFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFTE9BRF9QTVUsIHZjcHUpO1xuK1x0a3ZtX3BtdV9hcHBseV9tZGNyKHZjcHUsIG9sZCwgdmFsKTtcbiBcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbitzdGF0aWMgaW50IHNldF9tZGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcmQsXG4rXHRcdCAgICB1NjQgdmFsKVxuK3tcbitcdHU2NCBvbGQgPSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBNRENSX0VMMik7XG4rXG4rXHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgTURDUl9FTDIsIHZhbCk7XG4rXHRrdm1fcG11X2FwcGx5X21kY3IodmNwdSwgb2xkLCB2YWwpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBib29sIGFjY2Vzc19yYXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHQgICAgICAgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLFxuIFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcilcbkBAIC0zODI3LDcgKzM4NDIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyBzeXNfcmVnX2Rlc2NzW10gPSB7XG4gXHQgKiBpbiAzMmJpdCBtb2RlLiBIZXJlIHdlIGNob29zZSB0byByZXNldCBpdCBhcyB6ZXJvIGZvciBjb25zaXN0ZW5jeS5cbiBcdCAqL1xuIFx0eyBQTVVfU1lTX1JFRyhQTUNDRklMVFJfRUwwKSwgLmFjY2VzcyA9IGFjY2Vzc19wbXVfZXZ0eXBlcixcbi1cdCAgLnJlc2V0ID0gcmVzZXRfdmFsLCAucmVnID0gUE1DQ0ZJTFRSX0VMMCwgLnZhbCA9IDAgfSxcbitcdCAgLnJlc2V0ID0gcmVzZXRfdmFsLCAucmVnID0gUE1DQ0ZJTFRSX0VMMCwgLnZhbCA9IDAsXG4rXHQgIC5zZXRfdXNlciA9IHNldF9wbXVfZXZ0eXBlciB9LFxuIFxuIFx0RUwyX1JFR19WTkNSKFZQSURSX0VMMiwgcmVzZXRfdW5rbm93biwgMCksXG4gXHRFTDJfUkVHX1ZOQ1IoVk1QSURSX0VMMiwgcmVzZXRfdW5rbm93biwgMCksXG5AQCAtMzgzNiw3ICszODUyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2Mgc3lzX3JlZ19kZXNjc1tdID0ge1xuIFx0RUwyX1JFR19GSUxURVJFRChTQ1RMUjJfRUwyLCBhY2Nlc3Nfdm1fcmVnLCByZXNldF92YWwsIDAsXG4gXHRcdFx0IHNjdGxyMl9lbDJfdmlzaWJpbGl0eSksXG4gXHRFTDJfUkVHX1ZOQ1IoSENSX0VMMiwgcmVzZXRfaGNyLCAwKSxcbi1cdEVMMl9SRUcoTURDUl9FTDIsIGFjY2Vzc19tZGNyLCByZXNldF9tZGNyLCAwKSxcbitcdFNZU19SRUdfVVNFUl9GSUxURVIoTURDUl9FTDIsIGFjY2Vzc19tZGNyLCByZXNldF9tZGNyLCAwLFxuK1x0XHRcdCAgICBOVUxMLCBzZXRfbWRjciwgZWwyX3Zpc2liaWxpdHkpLFxuIFx0RUwyX1JFRyhDUFRSX0VMMiwgYWNjZXNzX3J3LCByZXNldF92YWwsIENQVFJfTlZIRV9FTDJfUkVTMSksXG4gXHRFTDJfUkVHX1ZOQ1IoSFNUUl9FTDIsIHJlc2V0X3ZhbCwgMCksXG4gXHRFTDJfUkVHX1ZOQ1JfRklMVChIRkdSVFJfRUwyLCBmZ3RfdmlzaWJpbGl0eSksXG5AQCAtNTM5MCw3ICs1NDA3LDcgQEAgdm9pZCBrdm1fcmVzZXRfc3lzX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0c2V0X2JpdChLVk1fQVJDSF9GTEFHX0lEX1JFR1NfSU5JVElBTElaRUQsIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmZsYWdzKTtcbiBcbiBcdGlmIChrdm1fdmNwdV9oYXNfcG11KHZjcHUpKVxuLVx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XG4rXHRcdGt2bV9wbXVfcmVxdWVzdF9yZWNyZWF0ZSh2Y3B1KTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9rdm0vYXJtX3BtdS5oIGIvaW5jbHVkZS9rdm0vYXJtX3BtdS5oXG5pbmRleCA2YjRhMTE4ZDE3Y2E5Li4xN2I4NjFlZDE3MWQ2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9rdm0vYXJtX3BtdS5oXG4rKysgYi9pbmNsdWRlL2t2bS9hcm1fcG11LmhcbkBAIC0zMiw2ICszMiw3IEBAIHN0cnVjdCBrdm1fcG11IHtcbiBcdHN0cnVjdCBrdm1fcG1jIHBtY1tLVk1fQVJNVjhfUE1VX01BWF9DT1VOVEVSU107XG4gXHRpbnQgaXJxX251bTtcbiBcdGJvb2wgY3JlYXRlZDtcbitcdGJvb2wgZXZlbnRzX25lZWRfcmVjcmVhdGU7XG4gfTtcbiBcbiBzdHJ1Y3QgYXJtX3BtdV9lbnRyeSB7XG5AQCAtNTUsOSArNTYsMTMgQEAgdm9pZCBrdm1fcG11X3N5bmNfaHdzdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGJvb2wga3ZtX3BtdV9zaG91bGRfbm90aWZ5X3VzZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBib29sIGt2bV9wbXVfdXBkYXRlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQga3ZtX3BtdV9zb2Z0d2FyZV9pbmNyZW1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKTtcbit2b2lkIGt2bV9wbXVfcmVxdWVzdF9yZWNyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuK3ZvaWQga3ZtX3BtdV9hcHBseV9wbWNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9sZCwgdTY0IHZhbCwgYm9vbCBmb3JjZV9yZWxvYWQpO1xuIHZvaWQga3ZtX3BtdV9oYW5kbGVfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpO1xuK3ZvaWQga3ZtX3BtdV9hcHBseV9tZGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9sZCwgdTY0IHZhbCk7XG4gdm9pZCBrdm1fcG11X3NldF9jb3VudGVyX2V2ZW50X3R5cGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSxcbiBcdFx0XHRcdCAgICB1NjQgc2VsZWN0X2lkeCk7XG4rdm9pZCBrdm1fdmNwdV9sb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBsYXN0X2NwdSk7XG4gdm9pZCBrdm1fdmNwdV9yZWxvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gaW50IGt2bV9hcm1fcG11X3YzX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0XHQgICAgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cik7XG5AQCAtMTM1LDcgKzE0MCwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3BtdV9zaG91bGRfbm90aWZ5X3VzZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIH1cbiBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3BtdV91cGRhdGVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkgeyByZXR1cm4gZmFsc2U7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3BtdV9zb2Z0d2FyZV9pbmNyZW1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKSB7fVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X3JlcXVlc3RfcmVjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X2FwcGx5X3BtY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgb2xkLCB1NjQgdmFsLCBib29sIGZvcmNlX3JlbG9hZCkge31cbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3BtdV9oYW5kbGVfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpIHt9XG4rc3RhdGljIGlubGluZSB2b2lkIGt2bV9wbXVfYXBwbHlfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBvbGQsIHU2NCB2YWwpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV9wbXVfc2V0X2NvdW50ZXJfZXZlbnRfdHlwZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0XHRcdFx0ICB1NjQgZGF0YSwgdTY0IHNlbGVjdF9pZHgpIHt9XG4gc3RhdGljIGlubGluZSBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuQEAgLTE2Nyw2ICsxNzUsNyBAQCBzdGF0aWMgaW5saW5lIHU2NCBrdm1fcG11X2dldF9wbWNlaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHBtY2VpZDEpXG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV9wbXVfdXBkYXRlX3ZjcHVfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge31cbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfcG11X3Jlc3RvcmVfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdmNwdV9wbXVfcmVzdG9yZV9ob3N0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge31cbitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbGFzdF9jcHUpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X3JlbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fVxuIHN0YXRpYyBpbmxpbmUgdTgga3ZtX2FybV9wbXVfZ2V0X3BtdXZlcl9saW1pdCh2b2lkKVxuIHtcbmRpZmYgLS1naXQgYS90b29scy9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmggYi90b29scy9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbmluZGV4IDFjMTNiZmEyZDM4YWEuLjM5YTFhMWU0MTJlNjYgMTAwNjQ0XG4tLS0gYS90b29scy9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbisrKyBiL3Rvb2xzL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuQEAgLTQzNyw2ICs0MzcsNyBAQCBlbnVtIHtcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVJcdFx0MlxuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9QTVVcdFx0M1xuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9OUl9DT1VOVEVSU1x0NFxuKyNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlcdDVcbiAjZGVmaW5lIEtWTV9BUk1fVkNQVV9USU1FUl9DVFJMXHRcdDFcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1RJTUVSX0lSUV9WVElNRVJcdFx0MFxuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfVElNRVJfSVJRX1BUSU1FUlx0XHQxXG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS9saW51eC9iaXRmaWVsZC5oIGIvdG9vbHMvaW5jbHVkZS9saW51eC9iaXRmaWVsZC5oXG5pbmRleCBkZGY4MWYyNDk1NmJhLi4xYzYzMzM0M2Q1NzY2IDEwMDY0NFxuLS0tIGEvdG9vbHMvaW5jbHVkZS9saW51eC9iaXRmaWVsZC5oXG4rKysgYi90b29scy9pbmNsdWRlL2xpbnV4L2JpdGZpZWxkLmhcbkBAIC0xNDIsMzIgKzE0MiwzMiBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHU2NCBmaWVsZF9tYXNrKHU2NCBmaWVsZClcbiBcdHJldHVybiBmaWVsZCAvIGZpZWxkX211bHRpcGxpZXIoZmllbGQpO1xuIH1cbiAjZGVmaW5lIGZpZWxkX21heChmaWVsZClcdCgodHlwZW9mKGZpZWxkKSlmaWVsZF9tYXNrKGZpZWxkKSlcbi0jZGVmaW5lIF9fX19NQUtFX09QKHR5cGUsYmFzZSx0byxmcm9tKVx0XHRcdFx0XHRcXFxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX18jI3R5cGUgdHlwZSMjX2VuY29kZV9iaXRzKGJhc2UgdiwgYmFzZSBmaWVsZClcdFxcXG4rI2RlZmluZSBfX19fTUFLRV9PUChuYW1lLHR5cGUsYmFzZSx0byxmcm9tKVx0XHRcdFx0XFxcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHR5cGUgbmFtZSMjX2VuY29kZV9iaXRzKGJhc2UgdiwgYmFzZSBmaWVsZClcdFxcXG4ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRpZiAoX19idWlsdGluX2NvbnN0YW50X3AodikgXHUwMDI2XHUwMDI2ICh2IFx1MDAyNiB+ZmllbGRfbWFzayhmaWVsZCkpKVx0XFxcbiBcdFx0X19maWVsZF9vdmVyZmxvdygpO1x0XHRcdFx0XHRcXFxuIFx0cmV0dXJuIHRvKCh2IFx1MDAyNiBmaWVsZF9tYXNrKGZpZWxkKSkgKiBmaWVsZF9tdWx0aXBsaWVyKGZpZWxkKSk7XHRcXFxuIH1cdFx0XHRcdFx0XHRcdFx0XHRcXFxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX18jI3R5cGUgdHlwZSMjX3JlcGxhY2VfYml0cyhfXyMjdHlwZSBvbGQsXHRcXFxuLVx0XHRcdFx0XHRiYXNlIHZhbCwgYmFzZSBmaWVsZClcdFx0XFxcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHR5cGUgbmFtZSMjX3JlcGxhY2VfYml0cyh0eXBlIG9sZCxcdFx0XFxcbitcdFx0XHRcdFx0XHRiYXNlIHZhbCwgYmFzZSBmaWVsZClcdFxcXG4ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4tXHRyZXR1cm4gKG9sZCBcdTAwMjYgfnRvKGZpZWxkKSkgfCB0eXBlIyNfZW5jb2RlX2JpdHModmFsLCBmaWVsZCk7XHRcXFxuK1x0cmV0dXJuIChvbGQgXHUwMDI2IH50byhmaWVsZCkpIHwgbmFtZSMjX2VuY29kZV9iaXRzKHZhbCwgZmllbGQpO1x0XFxcbiB9XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdHlwZSMjcF9yZXBsYWNlX2JpdHMoX18jI3R5cGUgKnAsXHRcdFxcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG5hbWUjI3BfcmVwbGFjZV9iaXRzKHR5cGUgKnAsXHRcdFxcXG4gXHRcdFx0XHRcdGJhc2UgdmFsLCBiYXNlIGZpZWxkKVx0XHRcXFxuIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLVx0KnAgPSAoKnAgXHUwMDI2IH50byhmaWVsZCkpIHwgdHlwZSMjX2VuY29kZV9iaXRzKHZhbCwgZmllbGQpO1x0XFxcbitcdCpwID0gKCpwIFx1MDAyNiB+dG8oZmllbGQpKSB8IG5hbWUjI19lbmNvZGVfYml0cyh2YWwsIGZpZWxkKTtcdFxcXG4gfVx0XHRcdFx0XHRcdFx0XHRcdFxcXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSBiYXNlIHR5cGUjI19nZXRfYml0cyhfXyMjdHlwZSB2LCBiYXNlIGZpZWxkKVx0XFxcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJhc2UgbmFtZSMjX2dldF9iaXRzKHR5cGUgdiwgYmFzZSBmaWVsZClcdFxcXG4ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRyZXR1cm4gKGZyb20odikgXHUwMDI2IGZpZWxkKS9maWVsZF9tdWx0aXBsaWVyKGZpZWxkKTtcdFx0XFxcbiB9XG4tI2RlZmluZSBfX01BS0VfT1Aoc2l6ZSlcdFx0XHRcdFx0XHRcdFxcXG4tXHRfX19fTUFLRV9PUChsZSMjc2l6ZSx1IyNzaXplLGNwdV90b19sZSMjc2l6ZSxsZSMjc2l6ZSMjX3RvX2NwdSlcdFxcXG4tXHRfX19fTUFLRV9PUChiZSMjc2l6ZSx1IyNzaXplLGNwdV90b19iZSMjc2l6ZSxiZSMjc2l6ZSMjX3RvX2NwdSlcdFxcXG4tXHRfX19fTUFLRV9PUCh1IyNzaXplLHUjI3NpemUsLClcbi1fX19fTUFLRV9PUCh1OCx1OCwsKVxuKyNkZWZpbmUgX19NQUtFX09QKHNpemUpXHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdF9fX19NQUtFX09QKGxlIyNzaXplLF9fbGUjI3NpemUsdSMjc2l6ZSxjcHVfdG9fbGUjI3NpemUsbGUjI3NpemUjI190b19jcHUpXHRcXFxuK1x0X19fX01BS0VfT1AoYmUjI3NpemUsX19iZSMjc2l6ZSx1IyNzaXplLGNwdV90b19iZSMjc2l6ZSxiZSMjc2l6ZSMjX3RvX2NwdSlcdFxcXG4rXHRfX19fTUFLRV9PUCh1IyNzaXplLHUjI3NpemUsdSMjc2l6ZSwsKVxuK19fX19NQUtFX09QKHU4LHU4LHU4LCwpXG4gX19NQUtFX09QKDE2KVxuIF9fTUFLRV9PUCgzMilcbiBfX01BS0VfT1AoNjQpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmNcbmluZGV4IDIyMjIzMzk1OTY5ZTAuLjYzNzY1M2Y3YTI1YjkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jXG5AQCAtMjUsNiArMjUsMTQgQEBcbiAvKiBUaGUgY3ljbGUgY291bnRlciBiaXQgcG9zaXRpb24gdGhhdCdzIGNvbW1vbiBhbW9uZyB0aGUgUE1VIHJlZ2lzdGVycyAqL1xuICNkZWZpbmUgQVJNVjhfUE1VX0NZQ0xFX0lEWFx0XHQzMVxuIFxuKyNpZm5kZWYgTURDUl9FTDJfSFBNTlxuKyNkZWZpbmUgTURDUl9FTDJfSFBNTlx0XHRcdEdFTk1BU0tfVUxMKDQsIDApXG4rI2VuZGlmXG4rXG4rI2lmbmRlZiBNRENSX0VMMl9IUE1FXG4rI2RlZmluZSBNRENSX0VMMl9IUE1FXHRcdFx0QklUX1VMTCg3KVxuKyNlbmRpZlxuK1xuIHN0cnVjdCB2cG11X3ZtIHtcbiBcdHN0cnVjdCBrdm1fdm0gKnZtO1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuQEAgLTQwMywxMiArNDExLDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlX3ZwbXVfdm0odm9pZCAqZ3Vlc3RfY29kZSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCBpbml0O1xuIFx0dTggcG11dmVyLCBlYztcbi1cdHU2NCBkZnIwLCBpcnEgPSAyMztcbi1cdHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgaXJxX2F0dHIgPSB7XG4tXHRcdC5ncm91cCA9IEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbi1cdFx0LmF0dHIgPSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSxcbi1cdFx0LmFkZHIgPSAodTY0KVx1MDAyNmlycSxcbi1cdH07XG4rXHR1NjQgZGZyMDtcbiBcbiBcdC8qIFRoZSB0ZXN0IGNyZWF0ZXMgdGhlIHZwbXVfdm0gbXVsdGlwbGUgdGltZXMuIEVuc3VyZSBhIGNsZWFuIHN0YXRlICovXG4gXHRtZW1zZXQoXHUwMDI2dnBtdV92bSwgMCwgc2l6ZW9mKHZwbXVfdm0pKTtcbkBAIC00MzQsOCArNDM3LDYgQEAgc3RhdGljIHZvaWQgY3JlYXRlX3ZwbXVfdm0odm9pZCAqZ3Vlc3RfY29kZSlcbiBcdFRFU1RfQVNTRVJUKHBtdXZlciAhPSBJRF9BQTY0REZSMF9FTDFfUE1VVmVyX0lNUF9ERUYgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBwbXV2ZXIgXHUwMDNlPSBJRF9BQTY0REZSMF9FTDFfUE1VVmVyX0lNUCxcbiBcdFx0ICAgIFwiVW5leHBlY3RlZCBQTVVWRVIgKDB4JXgpIG9uIHRoZSB2Q1BVIHdpdGggUE1VdjNcIiwgcG11dmVyKTtcbi1cbi1cdHZjcHVfaW9jdGwodnBtdV92bS52Y3B1LCBLVk1fU0VUX0RFVklDRV9BVFRSLCBcdTAwMjZpcnFfYXR0cik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGRlc3Ryb3lfdnBtdV92bSh2b2lkKVxuQEAgLTQ0MywxMSArNDQ0LDEwIEBAIHN0YXRpYyB2b2lkIGRlc3Ryb3lfdnBtdV92bSh2b2lkKVxuIFx0a3ZtX3ZtX2ZyZWUodnBtdV92bS52bSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJ1bl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBtY3JfbilcbitzdGF0aWMgdm9pZCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHVjYWxsIHVjO1xuIFxuLVx0dmNwdV9hcmdzX3NldCh2Y3B1LCAxLCBwbWNyX24pO1xuIFx0dmNwdV9ydW4odmNwdSk7XG4gXHRzd2l0Y2ggKGdldF91Y2FsbCh2Y3B1LCBcdTAwMjZ1YykpIHtcbiBcdGNhc2UgVUNBTExfQUJPUlQ6XG5AQCAtNDYxLDE1ICs0NjEsMTcgQEAgc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcG1jcl9uKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnModW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sIGV4cGVjdF9mYWlsKVxuK3N0YXRpYyB2b2lkIGd1ZXN0X2NvZGVfZG9uZSh2b2lkKVxuK3tcbitcdEdVRVNUX0RPTkUoKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgc2V0X25yX2NvdW50ZXJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbitcdFx0XHQgICAgdW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sIGV4cGVjdF9mYWlsKVxuIHtcbi1cdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiBcdHVuc2lnbmVkIGludCBwcmV2O1xuIFx0aW50IHJldDtcbiBcbi1cdGNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpO1xuLVx0dmNwdSA9IHZwbXVfdm0udmNwdTtcbi1cbiBcdHByZXYgPSBnZXRfcG1jcl9uKHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfUE1DUl9FTDApKSk7XG4gXG4gXHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbkBAIC00ODEsNiArNDgzLDI2IEBAIHN0YXRpYyB2b2lkIHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyh1bnNpZ25lZCBpbnQgbnJfY291bnRlcnMsIGJvb2xcbiBcdFx0XHQgICAgbnJfY291bnRlcnMsIHByZXYpO1xuIFx0ZWxzZVxuIFx0XHRURVNUX0FTU0VSVCghcmV0LCBLVk1fSU9DVExfRVJST1IoS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyh1bnNpZ25lZCBpbnQgbnJfY291bnRlcnMsXG4rXHRcdFx0XHRcdFx0IGJvb2wgZml4ZWRfY291bnRlcnNfb25seSxcbitcdFx0XHRcdFx0XHQgYm9vbCBleHBlY3RfZmFpbClcbit7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4rXHR1NjQgaXJxID0gMjM7XG4rXG4rXHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcbitcdHZjcHUgPSB2cG11X3ZtLnZjcHU7XG4rXG4rXHRpZiAoZml4ZWRfY291bnRlcnNfb25seSlcbitcdFx0dmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuK1xuK1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JUlEsIFx1MDAyNmlycSk7XG4rXG4rXHRzZXRfbnJfY291bnRlcnModmNwdSwgbnJfY291bnRlcnMsIGV4cGVjdF9mYWlsKTtcbiBcbiBcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTtcbiB9XG5AQCAtNDg5LDIxICs1MTEsMjIgQEAgc3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycywgYm9vbFxuICAqIENyZWF0ZSBhIGd1ZXN0IHdpdGggb25lIHZDUFUsIHNldCB0aGUgUE1DUl9FTDAuTiBmb3IgdGhlIHZDUFUgdG8gQHBtY3JfbixcbiAgKiBhbmQgcnVuIHRoZSB0ZXN0LlxuICAqL1xuLXN0YXRpYyB2b2lkIHJ1bl9hY2Nlc3NfdGVzdCh1NjQgcG1jcl9uKVxuK3N0YXRpYyB2b2lkIHJ1bl9hY2Nlc3NfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXG4ge1xuIFx0dTY0IHNwO1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuIFx0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcbiBcbi1cdHByX2RlYnVnKFwiVGVzdCB3aXRoIHBtY3JfbiAlbHVcXG5cIiwgcG1jcl9uKTtcbitcdHByX2RlYnVnKFwiVGVzdCB3aXRoIHBtY3JfbiAlbHUsIGZpeGVkX2NvdW50ZXJzX29ubHkgJWRcXG5cIiwgcG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcbiBcbi1cdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZhbHNlKTtcbitcdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHksIGZhbHNlKTtcbiBcdHZjcHUgPSB2cG11X3ZtLnZjcHU7XG4gXG4gXHQvKiBTYXZlIHRoZSBpbml0aWFsIHNwIHRvIHJlc3RvcmUgdGhlbSBsYXRlciB0byBydW4gdGhlIGd1ZXN0IGFnYWluICovXG4gXHRzcCA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBjdHh0X3JlZ19hbGlhcyh2Y3B1LCBTWVNfU1BfRUwxKSk7XG4gXG4tXHRydW5fdmNwdSh2Y3B1LCBwbWNyX24pO1xuK1x0dmNwdV9hcmdzX3NldCh2Y3B1LCAxLCBwbWNyX24pO1xuK1x0cnVuX3ZjcHUodmNwdSk7XG4gXG4gXHQvKlxuIFx0ICogUmVzZXQgYW5kIHJlLWluaXRpYWxpemUgdGhlIHZDUFUsIGFuZCBydW4gdGhlIGd1ZXN0IGNvZGUgYWdhaW4gdG9cbkBAIC01MTYsNyArNTM5LDggQEAgc3RhdGljIHZvaWQgcnVuX2FjY2Vzc190ZXN0KHU2NCBwbWNyX24pXG4gXHR2Y3B1X3NldF9yZWcodmNwdSwgY3R4dF9yZWdfYWxpYXModmNwdSwgU1lTX1NQX0VMMSksIHNwKTtcbiBcdHZjcHVfc2V0X3JlZyh2Y3B1LCBBUk02NF9DT1JFX1JFRyhyZWdzLnBjKSwgKHU2NClndWVzdF9jb2RlKTtcbiBcbi1cdHJ1bl92Y3B1KHZjcHUsIHBtY3Jfbik7XG4rXHR2Y3B1X2FyZ3Nfc2V0KHZjcHUsIDEsIHBtY3Jfbik7XG4rXHRydW5fdmNwdSh2Y3B1KTtcbiBcbiBcdGRlc3Ryb3lfdnBtdV92bSgpO1xuIH1cbkBAIC01MzEsMTQgKzU1NSwxNCBAQCBzdGF0aWMgc3RydWN0IHBtcmVnX3NldHMgdmFsaWRpdHlfY2hlY2tfcmVnX3NldHNbXSA9IHtcbiAgKiBDcmVhdGUgYSBWTSwgYW5kIGNoZWNrIGlmIEtWTSBoYW5kbGVzIHRoZSB1c2Vyc3BhY2UgYWNjZXNzZXMgb2ZcbiAgKiB0aGUgUE1VIHJlZ2lzdGVyIHNldHMgaW4gQHZhbGlkaXR5X2NoZWNrX3JlZ19zZXRzW10gY29ycmVjdGx5LlxuICAqL1xuLXN0YXRpYyB2b2lkIHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uKVxuK3N0YXRpYyB2b2lkIHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXG4ge1xuIFx0aW50IGk7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4gXHR1NjQgc2V0X3JlZ19pZCwgY2xyX3JlZ19pZCwgcmVnX3ZhbDtcbiBcdHU2NCB2YWxpZF9jb3VudGVyc19tYXNrLCBtYXhfY291bnRlcnNfbWFzaztcbiBcbi1cdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZhbHNlKTtcbitcdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHksIGZhbHNlKTtcbiBcdHZjcHUgPSB2cG11X3ZtLnZjcHU7XG4gXG4gXHR2YWxpZF9jb3VudGVyc19tYXNrID0gZ2V0X2NvdW50ZXJzX21hc2socG1jcl9uKTtcbkBAIC01ODMsMTYgKzYwNyw5NCBAQCBzdGF0aWMgdm9pZCBydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QodTY0IHBtY3JfbilcbiBcdGRlc3Ryb3lfdnBtdV92bSgpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBydW5fbWRjcl9lbDJfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXG4re1xuK1x0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcbitcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbitcdHU2NCBleHBlY3RlZF9tZGNyLCBtZGNyO1xuK1x0dTY0IGlycSA9IDIzO1xuK1xuK1x0cHJfZGVidWcoXCJNRENSX0VMMiB0ZXN0IHdpdGggcG1jcl9uICVsdSwgZml4ZWRfY291bnRlcnNfb25seSAlZFxcblwiLFxuK1x0XHQgcG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcbitcbitcdGNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpO1xuK1x0aWYgKCF2bV9zdXBwb3J0c19lbDIodnBtdV92bS52bSkpIHtcbitcdFx0ZGVzdHJveV92cG11X3ZtKCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHZjcHUgPSB2cG11X3ZtLnZjcHU7XG4rXG4rXHRtZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpO1xuK1x0ZXhwZWN0ZWRfbWRjciA9IHU2NF9yZXBsYWNlX2JpdHMobWRjciwgRklFTERfTUFYKE1EQ1JfRUwyX0hQTU4pLFxuK1x0XHRcdFx0XHQgTURDUl9FTDJfSFBNTik7XG4rXHR2Y3B1X3NldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSxcbitcdFx0ICAgICBleHBlY3RlZF9tZGNyKTtcbitcbitcdG1kY3IgPSB2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSk7XG4rXHRURVNUX0FTU0VSVChtZGNyID09IGV4cGVjdGVkX21kY3IsXG4rXHRcdCAgICBcIk1EQ1JfRUwyIHdhcyBub3QgcHJvcGVybHkgdXBkYXRlZCBhZnRlciBIUE1OIHdyaXRlIChleHBlY3RlZCAweCVseCwgZ290IDB4JWx4KVwiLFxuK1x0XHQgICAgZXhwZWN0ZWRfbWRjciwgbWRjcik7XG4rXG4rXHRpZiAoZml4ZWRfY291bnRlcnNfb25seSkge1xuK1x0XHR2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XG4rXG4rXHRcdG1kY3IgPSB2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSk7XG4rXHRcdFRFU1RfQVNTRVJUKG1kY3IgPT0gZXhwZWN0ZWRfbWRjcixcbitcdFx0XHQgICAgXCJNRENSX0VMMiBjaGFuZ2VkIGFmdGVyIFBNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZIChleHBlY3RlZCAweCVseCwgZ290IDB4JWx4KVwiLFxuK1x0XHRcdCAgICBleHBlY3RlZF9tZGNyLCBtZGNyKTtcbitcdH1cbitcbitcdHNldF9ucl9jb3VudGVycyh2Y3B1LCBwbWNyX24sIGZhbHNlKTtcbitcbitcdG1kY3IgPSB2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSk7XG4rXHRURVNUX0FTU0VSVChtZGNyID09IGV4cGVjdGVkX21kY3IsXG4rXHRcdCAgICBcIk1EQ1JfRUwyIGNoYW5nZWQgYWZ0ZXIgUE1VX1YzX1NFVF9OUl9DT1VOVEVSUyAoZXhwZWN0ZWQgMHglbHgsIGdvdCAweCVseClcIixcbitcdFx0ICAgIGV4cGVjdGVkX21kY3IsIG1kY3IpO1xuK1xuK1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JUlEsIFx1MDAyNmlycSk7XG4rXG4rXHR2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQsIE5VTEwpO1xuK1xuK1x0bWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTtcbitcdFRFU1RfQVNTRVJUKG1kY3IgPT0gZXhwZWN0ZWRfbWRjcixcbitcdFx0ICAgIFwiTURDUl9FTDIgY2hhbmdlZCBhZnRlciBQTVVfVjNfSU5JVCAoZXhwZWN0ZWQgMHglbHgsIGdvdCAweCVseClcIixcbitcdFx0ICAgIGV4cGVjdGVkX21kY3IsIG1kY3IpO1xuK1xuK1x0ZXhwZWN0ZWRfbWRjciA9IG1kY3IgXiBNRENSX0VMMl9IUE1FO1xuK1x0dmNwdV9zZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMiksXG4rXHRcdCAgICAgZXhwZWN0ZWRfbWRjcik7XG4rXG4rXHRtZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpO1xuK1x0VEVTVF9BU1NFUlQobWRjciA9PSBleHBlY3RlZF9tZGNyLFxuK1x0XHQgICAgXCJNRENSX0VMMiB3YXMgbm90IHByb3Blcmx5IHVwZGF0ZWQgYWZ0ZXIgSFBNRSB3cml0ZSAoZXhwZWN0ZWQgMHglbHgsIGdvdCAweCVseClcIixcbitcdFx0ICAgIGV4cGVjdGVkX21kY3IsIG1kY3IpO1xuK1xuK1x0a3ZtX2dldF9kZWZhdWx0X3ZjcHVfdGFyZ2V0KHZwbXVfdm0udm0sIFx1MDAyNmluaXQpO1xuK1x0aW5pdC5mZWF0dXJlc1swXSB8PSAoMSBcdTAwM2NcdTAwM2MgS1ZNX0FSTV9WQ1BVX1BNVV9WMyk7XG4rXHRhYXJjaDY0X3ZjcHVfc2V0dXAodmNwdSwgXHUwMDI2aW5pdCk7XG4rXG4rXHRtZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpO1xuK1x0VEVTVF9BU1NFUlQoRklFTERfR0VUKE1EQ1JfRUwyX0hQTU4sIG1kY3IpID09IHBtY3JfbixcbitcdFx0ICAgIFwiTURDUl9FTDIuSFBNTiBpcyBub3QgcmVzZXQgYWZ0ZXIgSU5JVCAoZXhwZWN0ZWQgJWx1LCBnb3QgJWx1KVwiLFxuK1x0XHQgICAgcG1jcl9uLCBGSUVMRF9HRVQoTURDUl9FTDJfSFBNTiwgbWRjcikpO1xuK1xuK1x0ZGVzdHJveV92cG11X3ZtKCk7XG4rfVxuK1xuIC8qXG4gICogQ3JlYXRlIGEgZ3Vlc3Qgd2l0aCBvbmUgdkNQVSwgYW5kIGF0dGVtcHQgdG8gc2V0IHRoZSBQTUNSX0VMMC5OIGZvclxuICAqIHRoZSB2Q1BVIHRvIEBwbWNyX24sIHdoaWNoIGlzIGxhcmdlciB0aGFuIHRoZSBob3N0IHZhbHVlLlxuICAqIFRoZSBhdHRlbXB0IHNob3VsZCBmYWlsIGFzIEBwbWNyX24gaXMgdG9vIGJpZyB0byBzZXQgZm9yIHRoZSB2Q1BVLlxuICAqL1xuLXN0YXRpYyB2b2lkIHJ1bl9lcnJvcl90ZXN0KHU2NCBwbWNyX24pXG4rc3RhdGljIHZvaWQgcnVuX2Vycm9yX3Rlc3QodTY0IHBtY3JfbiwgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5KVxuIHtcbiBcdHByX2RlYnVnKFwiRXJyb3IgdGVzdCB3aXRoIHBtY3JfbiAlbHUgKGxhcmdlciB0aGFuIHRoZSBob3N0KVxcblwiLCBwbWNyX24pO1xuIFxuLVx0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgdHJ1ZSk7XG4rXHR0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5LCB0cnVlKTtcbiBcdGRlc3Ryb3lfdnBtdV92bSgpO1xuIH1cbiBcbkBAIC02MjIsMjIgKzcyNCwxODMgQEAgc3RhdGljIGJvb2wga3ZtX3N1cHBvcnRzX25yX2NvdW50ZXJzX2F0dHIodm9pZClcbiBcdHJldHVybiBzdXBwb3J0ZWQ7XG4gfVxuIFxuLWludCBtYWluKHZvaWQpXG4rc3RhdGljIHZvaWQgdGVzdF9zZXRfbnJfY291bnRlcnNfYWZ0ZXJfdmNwdV9ydW4odm9pZClcbiB7XG4tXHR1NjQgaSwgcG1jcl9uO1xuK1x0c3RydWN0IGt2bV92Y3B1ICpydW5uaW5nX3ZjcHUsICpzdG9wcGVkX3ZjcHU7XG4rXHR1bnNpZ25lZCBpbnQgbnJfY291bnRlcnMgPSAwO1xuK1x0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcbitcdHN0cnVjdCBrdm1fdm0gKnZtO1xuK1x0aW50IHJldDtcbitcdHU2NCBpcnEgPSAyMztcbitcbitcdHZtID0gdm1fY3JlYXRlKDIpO1xuK1x0dm1faW9jdGwodm0sIEtWTV9BUk1fUFJFRkVSUkVEX1RBUkdFVCwgXHUwMDI2aW5pdCk7XG4rXHRpbml0LmZlYXR1cmVzWzBdIHw9IEJJVChLVk1fQVJNX1ZDUFVfUE1VX1YzKTtcbitcdHJ1bm5pbmdfdmNwdSA9IGFhcmNoNjRfdmNwdV9hZGQodm0sIDAsIFx1MDAyNmluaXQsIGd1ZXN0X2NvZGVfZG9uZSk7XG4rXHRzdG9wcGVkX3ZjcHUgPSBhYXJjaDY0X3ZjcHVfYWRkKHZtLCAxLCBcdTAwMjZpbml0LCBndWVzdF9jb2RlX2RvbmUpO1xuK1x0a3ZtX2FyY2hfdm1fZmluYWxpemVfdmNwdXModm0pO1xuK1xuK1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQocnVubmluZ192Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgXHUwMDI2aXJxKTtcbitcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHJ1bm5pbmdfdmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTtcbitcdHJ1bl92Y3B1KHJ1bm5pbmdfdmNwdSk7XG4rXG4rXHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHN0b3BwZWRfdmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9OUl9DT1VOVEVSUyxcbitcdFx0XHRcdCAgICAgXHUwMDI2bnJfY291bnRlcnMpO1xuK1x0VEVTVF9BU1NFUlQocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFQlVTWSxcbitcdFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTtcbitcbitcdGt2bV92bV9mcmVlKHZtKTtcbit9XG4gXG4tXHRURVNUX1JFUVVJUkUoa3ZtX2hhc19jYXAoS1ZNX0NBUF9BUk1fUE1VX1YzKSk7XG4tXHRURVNUX1JFUVVJUkUoa3ZtX3N1cHBvcnRzX3ZnaWNfdjMoKSk7XG4tXHRURVNUX1JFUVVJUkUoa3ZtX3N1cHBvcnRzX25yX2NvdW50ZXJzX2F0dHIoKSk7XG4rc3RhdGljIHZvaWQgdGVzdF9jb25maWcodTY0IHBtY3JfbiwgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5KVxuK3tcbitcdHU2NCBpO1xuIFxuLVx0cG1jcl9uID0gZ2V0X3BtY3Jfbl9saW1pdCgpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2M9IHBtY3JfbjsgaSsrKSB7XG4tXHRcdHJ1bl9hY2Nlc3NfdGVzdChpKTtcbi1cdFx0cnVuX3BtcmVnc192YWxpZGl0eV90ZXN0KGkpO1xuK1x0XHRydW5fYWNjZXNzX3Rlc3QoaSwgZml4ZWRfY291bnRlcnNfb25seSk7XG4rXHRcdHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcbitcdFx0cnVuX21kY3JfZWwyX3ZhbGlkaXR5X3Rlc3QoaSwgZml4ZWRfY291bnRlcnNfb25seSk7XG4gXHR9XG4gXG4gXHRmb3IgKGkgPSBwbWNyX24gKyAxOyBpIFx1MDAzYyBBUk1WOF9QTVVfTUFYX0NPVU5URVJTOyBpKyspXG4tXHRcdHJ1bl9lcnJvcl90ZXN0KGkpO1xuK1x0XHRydW5fZXJyb3JfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9maXhlZF9jb3VudGVyc19vbmx5X3N0cmljdCh2b2lkKVxuK3tcbitcdHN0cnVjdCBrdm1fdmNwdV9pbml0IGluaXQ7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4rXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcdHU2NCBpcnEgPSAyMztcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIWt2bV9oYXNfY2FwKEtWTV9DQVBfQVJNX1BNVV9WM19TVFJJQ1QpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR2bSA9IHZtX2NyZWF0ZSgxKTtcbitcdGt2bV9nZXRfZGVmYXVsdF92Y3B1X3RhcmdldCh2bSwgXHUwMDI2aW5pdCk7XG4rXHRpbml0LmZlYXR1cmVzWzBdIHw9IEJJVChLVk1fQVJNX1ZDUFVfUE1VX1YzKSB8XG4rXHRcdFx0ICAgIEJJVChLVk1fQVJNX1ZDUFVfUE1VX1YzX1NUUklDVCk7XG4rXHR2Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMCwgXHUwMDI2aW5pdCwgZ3Vlc3RfY29kZV9kb25lKTtcbitcdGt2bV9hcmNoX3ZtX2ZpbmFsaXplX3ZjcHVzKHZtKTtcbitcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbitcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLCBcdTAwMjZpcnEpO1xuK1xuK1x0LyogU1RSSUNUIHN0aWxsIHJlcXVpcmVzIGEgUE1VIHNlbGVjdGlvbiBiZWZvcmUgaW5pdGlhbGl6YXRpb24uICovXG4rXHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbitcdFx0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTtcbitcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRU5YSU8sXG4rXHRcdCAgICBLVk1fSU9DVExfRVJST1IoS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7XG4rXG4rXHR2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuK1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTtcbitcbitcdGt2bV92bV9mcmVlKHZtKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9maXhlZF9jb3VudGVyc19vbmx5KHZvaWQpXG4re1xuK1x0c3RydWN0IGt2bV9wbXVfZXZlbnRfZmlsdGVyIGZpbHRlciA9IHsgLm5ldmVudHMgPSAwIH07XG4rXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcdHN0cnVjdCBrdm1fdmNwdSAqcnVubmluZ192Y3B1O1xuK1x0c3RydWN0IGt2bV92Y3B1ICpzdG9wcGVkX3ZjcHU7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCBpbml0O1xuK1x0aW50IHJldDtcbitcdHU2NCBpcnEgPSAyMztcbitcbitcdGNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpO1xuK1x0cmV0ID0gX192Y3B1X2hhc19kZXZpY2VfYXR0cih2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbitcdFx0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZKTtcbitcdGlmIChyZXQpIHtcbitcdFx0VEVTVF9BU1NFUlQocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFTlhJTyxcbitcdFx0XHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9IQVNfREVWSUNFX0FUVFIsIHJldCkpO1xuK1x0XHRkZXN0cm95X3ZwbXVfdm0oKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0LyogQXNzZXJ0IHRoYXQgRklYRURfQ09VTlRFUlNfT05MWSBpcyB1bnNldCBhdCBpbml0aWFsaXphdGlvbi4gKi9cbitcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9nZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XG4rXHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVOWElPLFxuK1x0XHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9HRVRfREVWSUNFX0FUVFIsIHJldCkpO1xuK1xuK1x0LyogQXNzZXJ0IHRoYXQgc2V0dGluZyBGSVhFRF9DT1VOVEVSU19PTkxZIHN1Y2NlZWRzLiAqL1xuK1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuK1xuK1x0LyogQXNzZXJ0IHRoYXQgRklYRURfQ09VTlRFUlNfT05MWSBpcyBzZXQuICovXG4rXHR2Y3B1X2RldmljZV9hdHRyX2dldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbitcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XG4rXG4rXHQvKlxuK1x0ICogU2V0dGluZyBhbiBldmVudCBmaWx0ZXIgd2hlbiBGSVhFRF9DT1VOVEVSU19PTkxZIGhhcyBhbHJlYWR5IGJlZW4gc2V0XG4rXHQgKiByZXN1bHRzIGluIEVCVVNZLlxuK1x0ICovXG4rXHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJTFRFUiwgXHUwMDI2ZmlsdGVyKTtcbitcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUJVU1ksXG4rXHRcdCAgICBLVk1fSU9DVExfRVJST1IoS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7XG4rXG4rXHRkZXN0cm95X3ZwbXVfdm0oKTtcbitcbitcdGNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpO1xuK1xuK1x0LypcbitcdCAqIEFzc2VydCB0aGF0IHNldHRpbmcgRklYRURfQ09VTlRFUlNfT05MWSB3aGVuIGFuIGV2ZW50IGZpbHRlciBoYXNcbitcdCAqIGFscmVhZHkgYmVlbiBzZXQgcmVzdWx0cyBpbiBFQlVTWS5cbitcdCAqL1xuK1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJTFRFUiwgXHUwMDI2ZmlsdGVyKTtcbitcbitcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XG4rXHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVCVVNZLFxuK1x0XHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpO1xuK1xuK1x0ZGVzdHJveV92cG11X3ZtKCk7XG4rXG4rXHQvKlxuK1x0ICogQXNzZXJ0IHRoYXQgc2V0dGluZyBGSVhFRF9DT1VOVEVSU19PTkxZIHdoZW4gYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1blxuK1x0ICogcmVzdWx0cyBpbiBFQlVTWS5cbitcdCAqL1xuK1x0dm0gPSB2bV9jcmVhdGUoMik7XG4rXHR2bV9pb2N0bCh2bSwgS1ZNX0FSTV9QUkVGRVJSRURfVEFSR0VULCBcdTAwMjZpbml0KTtcbitcdGluaXQuZmVhdHVyZXNbMF0gfD0gKDEgXHUwMDNjXHUwMDNjIEtWTV9BUk1fVkNQVV9QTVVfVjMpO1xuK1x0cnVubmluZ192Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMCwgXHUwMDI2aW5pdCwgZ3Vlc3RfY29kZV9kb25lKTtcbitcdHN0b3BwZWRfdmNwdSA9IGFhcmNoNjRfdmNwdV9hZGQodm0sIDEsIFx1MDAyNmluaXQsIGd1ZXN0X2NvZGVfZG9uZSk7XG4rXHRrdm1fYXJjaF92bV9maW5hbGl6ZV92Y3B1cyh2bSk7XG4rXHR2Y3B1X2RldmljZV9hdHRyX3NldChydW5uaW5nX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbitcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLCBcdTAwMjZpcnEpO1xuK1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQocnVubmluZ192Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQsIE5VTEwpO1xuK1x0cnVuX3ZjcHUocnVubmluZ192Y3B1KTtcbitcbitcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQoc3RvcHBlZF92Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XG4rXHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVCVVNZLFxuK1x0XHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpO1xuK1xuK1x0a3ZtX3ZtX2ZyZWUodm0pO1xuK1xuK1x0dGVzdF9maXhlZF9jb3VudGVyc19vbmx5X3N0cmljdCgpO1xuK1xuK1x0dGVzdF9jb25maWcoMCwgdHJ1ZSk7XG4rfVxuK1xuK2ludCBtYWluKHZvaWQpXG4re1xuK1x0VEVTVF9SRVFVSVJFKGt2bV9oYXNfY2FwKEtWTV9DQVBfQVJNX1BNVV9WMykpO1xuK1x0VEVTVF9SRVFVSVJFKGt2bV9zdXBwb3J0c192Z2ljX3YzKCkpO1xuK1x0VEVTVF9SRVFVSVJFKGt2bV9zdXBwb3J0c19ucl9jb3VudGVyc19hdHRyKCkpO1xuK1xuK1x0dGVzdF9zZXRfbnJfY291bnRlcnNfYWZ0ZXJfdmNwdV9ydW4oKTtcbitcdHRlc3RfY29uZmlnKGdldF9wbWNyX25fbGltaXQoKSwgZmFsc2UpO1xuK1x0dGVzdF9maXhlZF9jb3VudGVyc19vbmx5KCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo1NDozNy40MjM4OTYwMzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNzAwNjU5MjIxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhpcyBQYXRjaCBmb3IgQU1ENjQgQ29tcGF0aWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGF0IHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIEFNRDY0LCBhbmQgdGhlIGZpbGUgbW9kaWZpY2F0aW9ucyBzZWVtIGhlYXZpbHkgZm9jdXNlZCBvbiBBUk02NC4gVGhlIGluc3RydWN0aW9ucyBzdGF0ZSB0byBsb29rIGZvciBcIlVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoc1wiIGFuZCBcIkNvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSxcIiBzbyB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzLlxuXG5GaXJzdCwgSSBleGFtaW5lZCB0aGUgdXNlciBpbnN0cnVjdGlvbnM6IFwiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQsXCIgY2hlY2suIFRoZW4gSSBsb29rZWQgYXQgdGhlIGZpbGUgbW9kaWZpY2F0aW9ucywgSSBzZWU6XG5cbiogICBgRG9jdW1lbnRhdGlvbi9gIGFuZCBgdG9vbHMvYCBkaXJlY3RvcmllcywgY2hlY2suIERvY3VtZW50YXRpb24gbWlnaHQgYXBwbHkgdG8gYW55IGFyY2hpdGVjdHVyZSwgYW5kIHRvb2xzIGFyZSBhcmNoaXRlY3R1cmUgaW5kZXBlbmRlbnQuXG4qICAgQnV0LCBjcnVjaWFsbHksIGFsbW9zdCBhbGwgdGhlIGtlcm5lbCBtb2RpZmljYXRpb25zIGFyZSB3aXRoaW4gYGFyY2gvYXJtNjQvYCwgYW5kIGluY2x1ZGUgZmlsZXMgdGhhdCBJIHN1c3BlY3Qgd2lsbCBiZSBBUk02NCBvbmx5LiBMZXQncyBzZWUuLi5cbiogICBJIGZsYWdnZWQgYGluY2x1ZGUva3ZtL2FybV9wbXUuaGAgYXMgYSBwb3RlbnRpYWwgcG9pbnQgb2YgaW50ZXJlc3QuIEl0J3MgaW4gdGhlIGBpbmNsdWRlL2t2bWAgZGlyZWN0b3J5LCBidXQgaXRzIG5hbWUgc2NyZWFtcyBcIkFSTSBQTVVcIiBhdCBtZS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaWYgdGhhdCBmaWxlIGlzIGluY2x1ZGVkIGluIGFueSBBTUQ2NC1zcGVjaWZpYyBjb2RlIHBhdGhzLiBTbyBJIG5lZWQgdG8gdmVyaWZ5IGl0cyB1c2FnZS5cbiogICBJIGFsc28gbmVlZCB0byBjaGVjayB0aGUgdG9vbHMgYW5kIGRvY3VtZW50YXRpb24gdG8gZW5zdXJlIHRoZXJlIGFyZSBubyB1bmludGVuZGVkIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBjb21wb25lbnRzIHRoZXJlLlxuXG5Ob3cgSSdsbCBtZXRob2RpY2FsbHkgY2hlY2sgZWFjaCBmaWxlLiBUaGUgYXJtNjQtc3BlY2lmaWMgZmlsZXMgYXJlIGNsZWFybHkgdW5yZWFjaGFibGUgb24gYW1kNjQ6XG4tIGFyY2gvYXJtNjQvXFwqXG4tIGluY2x1ZGUva3ZtL2FybVxcX3BtdS5oXG4tIHRvb2xzL1xcKlxuLSBEb2N1bWVudGF0aW9uL1xcKlxuXG5JJ2xsIHVzZSBncmVwIG9yIGNvZGUgc2VhcmNoIHRvIGRlZmluaXRpdmVseSBjb25maXJtIHRoZSBpbmNsdWRlIGZpbGUgdXNhZ2UgYW5kIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZGVwZW5kZW5jaWVzIGFuZCwgaWYgaXQgaXMgb25seSB1c2VkIGJ5IGFybTY0LCBJIGNhbiBiZSBjb25maWRlbnQgdGhhdCB0aGUgY2hhbmdlcyBhcmUgc2FmZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ3OTEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo1NTowNC40MzA0OTE4MzRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY1NjQ4ODI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbmNsdWRlIFxcdTAwM2Nrdm0vYXJtX3BtdS5oXFx1MDAzZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMzctI2luY2x1ZGUgXFx1MDAzY2t2bS9hcm1fYXJjaF90aW1lci5oXFx1MDAzZVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDozODojaW5jbHVkZSBcXHUwMDNja3ZtL2FybV9wbXUuaFxcdTAwM2VcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMzktXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hcm0uYy00OC0jaW5jbHVkZSBcXHUwMDNja3ZtL2FybV9oeXBlcmNhbGxzLmhcXHUwMDNlXFxuYXJjaC9hcm02NC9rdm0vYXJtLmM6NDk6I2luY2x1ZGUgXFx1MDAzY2t2bS9hcm1fcG11LmhcXHUwMDNlXFxuYXJjaC9hcm02NC9rdm0vYXJtLmMtNTAtI2luY2x1ZGUgXFx1MDAzY2t2bS9hcm1fcHNjaS5oXFx1MDAzZVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy0xNC0jaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9lbXVsYXRlLmhcXHUwMDNlXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYzoxNTojaW5jbHVkZSBcXHUwMDNja3ZtL2FybV9wbXUuaFxcdTAwM2VcXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jLTE2LSNpbmNsdWRlIFxcdTAwM2Nrdm0vYXJtX3ZnaWMuaFxcdTAwM2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTI6NTU6MDcuMDg2OTg0ODMzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjQ1NDI0NzgzODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIEFuYWx5c2lzIC0gTm8gQ29uY2VybnMgSGVyZSEqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IHByaW1hcnkgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgY2hhbmdlcyB0aGF0IHdhcnJhbnQgZnV6emluZy4gVGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBtb2RpZmllZCBjb2RlIGltcGFjdHMgdGhlIGtlcm5lbCdzIGNyaXRpY2FsIGV4ZWN1dGlvbiBwYXRocyBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQgaW4gdGhpcyBjYXNlKS5cblxuRmlyc3QsIEkgY2hlY2tlZCBmb3IgYW55IGluY2x1c2lvbiBvciB1c2FnZSBvZiB0aGUgYGluY2x1ZGUva3ZtL2FybV9wbXUuaGAgZmlsZSwgb3IgYW55IG90aGVyIEFSTTY0IFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdCAoUE1VKSBjb2RlLCBvbiB0aGUgeDg2XzY0IGFyY2hpdGVjdHVyZS4gTm8gZGljZSEgVGhhdCBoZWFkZXIgaXMgZXhjbHVzaXZlbHkgdXNlZCB3aXRoaW4gdGhlIEFSTTY0IGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IGJ5IGBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhgLCBgYXJjaC9hcm02NC9rdm0vYXJtLmNgLCBhbmQgYGFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmNgLiBUaGlzIGlzIGdvb2Q7IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlIG9uIGEgZGlmZmVyZW50IHRhcmdldCBpcyBpbW1lZGlhdGVseSBhIG5vbi1pc3N1ZS5cblxuTmV4dCwgSSBsb29rZWQgYXQgYHRvb2xzL2luY2x1ZGUvbGludXgvYml0ZmllbGQuaGAuIEl0IHJlc2lkZXMgd2l0aGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnkuIFRoaXMgZGlyZWN0b3J5IGlzIGV4cGxpY2l0bHkgZXhlbXB0IGZyb20gZnV6emluZyBjb25zaWRlcmF0aW9ucyBiZWNhdXNlIGl0J3MgZGVmaW5lZCBhcyBhIFwiVXNlci1zcGFjZSBkaXJlY3RvcnlcIi5cblxuVGhlbiwgSSBjb25zdWx0ZWQgdGhlIFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZVwiIGNyaXRlcmlhLiBUaGUgbG9naWMgZm9yIHRoYXQgZGVjaXNpb24gaXMgYmFzZWQgb24gbXVsdGlwbGUgY2F0ZWdvcmllczpcbjEuICAqKk5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6KiogVGhpcyBpbmNsdWRlcyBkb2N1bWVudGF0aW9uLCBjb21tZW50cywgc3BlbGxpbmcgZml4ZXMsIGFuZCwgaW1wb3J0YW50bHksIHVzZXItc3BhY2UgZGlyZWN0b3JpZXMgbGlrZSBgdG9vbHMvYCwgYXMgd2VsbCBhcyBzZWxmLXRlc3RzLCBzYW1wbGVzLCBhbmQgc2NyaXB0cyB0aGF0IGRvbid0IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlIG9yIG1vZHVsZXMuXG4yLiAgKipTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6KipcbjMuICAqKlVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoqKlxuXG5HaXZlbiB0aGF0LCBJIGNhbiBjb25jbHVzaXZlbHkgY2F0ZWdvcml6ZSBhbGwgY2hhbmdlcyB3aXRoaW4gdGhpcyBwYXRjaCBzZXJpZXM6XG5cbjEuICAqKkRvY3VtZW50YXRpb246KiogTW9kaWZpY2F0aW9ucyB0byB0aGUgZG9jdW1lbnRhdGlvbiBmaWxlcyAoYERvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdGAsIGBEb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3RgKSBmYWxsIHVuZGVyIHRoZSBcIk5vbi1rZXJuZWxcIiBjYXRlZ29yeS5cbjIuICAqKkFSTTY0IEFyY2hpdGVjdHVyZSBDb2RlOioqIEFsbCBjaGFuZ2VzIHdpdGhpbiBgYXJjaC9hcm02NC8qYCBhcmUgKmV4Y2x1c2l2ZWx5KiBmb3IgdGhlIEFSTTY0IGFyY2hpdGVjdHVyZS4gVGhleSBhcmUgc2ltcGx5IHVucmVhY2hhYmxlIGFuZCBkbyBub3QgYWZmZWN0IHRoZSB0YXJnZXQgKGFtZDY0KS5cbjMuICAqKmBpbmNsdWRlL2t2bS9hcm1fcG11LmhgOioqIFRoaXMgaXMsIGFnYWluLCBBUk02NC1zcGVjaWZpYyBhbmQgb25seSBpbmNsdWRlZCB3aXRoaW4gQVJNNjQgZmlsZXMuIEl0IGlzIGlycmVsZXZhbnQgb24gYW1kNjQuXG40LiAgKipgdG9vbHMvKmA6KiogVGhpcyBjb3ZlcnMgY29kZSBpbiBgdG9vbHMvYXJjaC9hcm02NC9gLCBgdG9vbHMvaW5jbHVkZS9saW51eC9iaXRmaWVsZC5oYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gLiBUaGVzZSBhcmUgdXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2NyaXB0cywgYW5kIHNlbGYtdGVzdHMuXG5cblRoZXJlZm9yZSwgKmFsbCogbW9kaWZpZWQgY29kZSBmYWxscyB1bmRlciBvbmUgb3IgbW9yZSBvZiB0aGVzZSBzYWZlIGNhdGVnb3JpZXM6IHVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIGRvY3VtZW50YXRpb24sIG9yIGNvZGUgZXhjbHVzaXZlIHRvIGEgZGlmZmVyZW50IGFyY2hpdGVjdHVyZSB0aGFuIHRoZSB0YXJnZXQgYW1kNjQuIEknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGEgZnVsbCBhbmQgY29tcGxldGUgbGlzdCBhbmQgYmUgc3VyZSBubyBvdGhlciBmaWxlIHdhcyBtb2RpZmllZCB1c2luZyBgZ2l0IGRpZmYgLyBzdGF0dXNgIG9yIGBnaXQgZ3JlcGAgb24gdGhpcyBjb21taXQgdG8gY29uZmlybSB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjExOSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo1NTozMS42Mjk0NjY1ODZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ4NTc1MDg4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkaWZmIC0tZ2l0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYnBmL2RyZ24ucnN0PTk5PUZvciBleGFtcGxlLCB0byBwcmludCBgYHN0cnVjdCBicGZfcHJvZ19hdXhgYCBmb3IgQlBGIHByb2dyYW0gaWQgNTMwNzc6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9kcmduLnJzdC0xMDMtICAgICUgZ2l0IGRpZmZcXG5Eb2N1bWVudGF0aW9uL2JwZi9kcmduLnJzdDoxMDQ6ICAgIGRpZmYgLS1naXQgYS90b29scy9icGZfaW5zcGVjdC5weSBiL3Rvb2xzL2JwZl9pbnNwZWN0LnB5XFxuRG9jdW1lbnRhdGlvbi9icGYvZHJnbi5yc3QtMTA1LSAgICBpbmRleCA2NTBlMjI4Li5hZWEyMzU3IDEwMDc1NVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMvY2hlY2t1YXBpLnJzdD01ND13b24ndCBicmVhayB1c2Vyc3BhY2U6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMvY2hlY2t1YXBpLnJzdC02OS0gICAgICAqICBjb21wMl90IGlzIDI0LWJpdCB3aXRoIDUtYml0IGJhc2UgMiBleHBvbmVudCBhbmQgMjAgYml0IGZyYWN0aW9uXFxuRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMvY2hlY2t1YXBpLnJzdDo3MDogICAgZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxcbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2NoZWNrdWFwaS5yc3QtNzEtICAgIEVPRlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMvY2hlY2t1YXBpLnJzdD0zMTA9Q29uc2lkZXIgdGhpcyBjaGFuZ2U6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMvY2hlY2t1YXBpLnJzdC0zMTItICAgIGNhdCBcXHUwMDNjXFx1MDAzYyAnRU9GJyB8IHBhdGNoIC1sIC1wMVxcbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2NoZWNrdWFwaS5yc3Q6MzEzOiAgICBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL0tidWlsZCBiL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9LYnVpbGRcXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9jaGVja3VhcGkucnN0LTMxNC0gICAgaW5kZXggZWJiMTgwYWFjNzRlLi5hOWM4OGIwYThiM2IgMTAwNjQ0XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RvYy1ndWlkZS9jb250cmlidXRpbmcucnN0PTg0PWxvb2tlZCBsaWtlIHRoaXM6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kb2MtZ3VpZGUvY29udHJpYnV0aW5nLnJzdC0xMDItXFxuRG9jdW1lbnRhdGlvbi9kb2MtZ3VpZGUvY29udHJpYnV0aW5nLnJzdDoxMDM6ICBkaWZmIC0tZ2l0IGEvZHJpdmVycy9kZXZmcmVxL2RldmZyZXEuYyBiL2RyaXZlcnMvZGV2ZnJlcS9kZXZmcmVxLmNcXG5Eb2N1bWVudGF0aW9uL2RvYy1ndWlkZS9jb250cmlidXRpbmcucnN0LTEwNC0gIGluZGV4IDU3ZjY5NDRkNjVhNi4uMDBjOWI4MGIzZDMzIDEwMDY0NFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS90cmFuc2h1Z2UucnN0PTczPWNoYW5nZTo6XFxuRG9jdW1lbnRhdGlvbi9tbS90cmFuc2h1Z2UucnN0LTc0LVxcbkRvY3VtZW50YXRpb24vbW0vdHJhbnNodWdlLnJzdDo3NTpcXHRkaWZmIC0tZ2l0IGEvbW0vbXJlbWFwLmMgYi9tbS9tcmVtYXAuY1xcbkRvY3VtZW50YXRpb24vbW0vdHJhbnNodWdlLnJzdC03Ni1cXHQtLS0gYS9tbS9tcmVtYXAuY1xcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZG9jLWd1aWRlL2NvbnRyaWJ1dGluZy5yc3Q9MzY9Q+S7o+eggee8luivkeWZqOWPkeWHuueahOitpuWRiuW4uOW4uOS8muiiq+inhuS4uuivr+aKpe+8jOS7juiAjOWvvOiHtOWHuueOsOS6huaXqOWcqOiuqee8luivkeWZqOmXreWYtOeahOihpeS4geOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZG9jLWd1aWRlL2NvbnRyaWJ1dGluZy5yc3QtODYtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZG9jLWd1aWRlL2NvbnRyaWJ1dGluZy5yc3Q6ODc6ICBkaWZmIC0tZ2l0IGEvZHJpdmVycy9kZXZmcmVxL2RldmZyZXEuYyBiL2RyaXZlcnMvZGV2ZnJlcS9kZXZmcmVxLmNcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9kb2MtZ3VpZGUvY29udHJpYnV0aW5nLnJzdC04OC0gIGluZGV4IDU3ZjY5NDRkNjVhNi4uMDBjOWI4MGIzZDMzIDEwMDY0NFxcbi0tXFxuc2NyaXB0cy9jaGVja3BhdGNoLnBsPTI2NzE9c3ViIHByb2Nlc3Mge1xcbi0tXFxuc2NyaXB0cy9jaGVja3BhdGNoLnBsLTI4NDQtXFx0XFx0ICAgICgkbGluZSA9fiAvXnJlbmFtZSAoPzpmcm9tfHRvKSBcXFxcUytcXFxccyokLyB8fFxcbnNjcmlwdHMvY2hlY2twYXRjaC5wbDoyODQ1OlxcdFxcdCAgICAgJGxpbmUgPX4gL15kaWZmIC0tZ2l0IGFcXFxcL1tcXFxcd1xcXFwvXFxcXC5cXFxcX1xcXFwtXSsgYlxcXFwvXFxcXFMrXFxcXHMqJC8pKSkge1xcbnNjcmlwdHMvY2hlY2twYXRjaC5wbC0yODQ2LVxcdFxcdFxcdCRpc19wYXRjaCA9IDE7XFxuLS1cXG5zY3JpcHRzL2NoZWNrcGF0Y2gucGwtMjkwMi1cXHRcXHQjIGV4dHJhY3QgdGhlIGZpbGVuYW1lIGFzIGl0IHBhc3Nlc1xcbnNjcmlwdHMvY2hlY2twYXRjaC5wbDoyOTAzOlxcdFxcdGlmICgkbGluZSA9fiAvXmRpZmYgLS1naXQuKj8oXFxcXFMrKSQvKSB7XFxuc2NyaXB0cy9jaGVja3BhdGNoLnBsLTI5MDQtXFx0XFx0XFx0JHJlYWxmaWxlID0gJDE7XFxuLS1cXG5zY3JpcHRzL2dldF9tYWludGFpbmVyLnBsPTU1Mj1mb3JlYWNoIG15ICRmaWxlIChAQVJHVikge1xcbi0tXFxuc2NyaXB0cy9nZXRfbWFpbnRhaW5lci5wbC02MDEtXFx0XFx0cHVzaChAZmlsZXMsICRmaWxlbmFtZSk7XFxuc2NyaXB0cy9nZXRfbWFpbnRhaW5lci5wbDo2MDI6XFx0ICAgIH0gZWxzaWYgKG0vXmRpZmYgLS1naXQgYVxcXFwvKFxcXFxTKykgYlxcXFwvKFxcXFxTKylcXFxccyokLykge1xcbnNjcmlwdHMvZ2V0X21haW50YWluZXIucGwtNjAzLVxcdFxcdG15ICRmaWxlbmFtZTEgPSAkMTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTI6NTU6MzQuMTE1MjI0NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIwODE4OTQ2NzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgQ29tbWl0IDczNDNjMGJmZjdkNWM1ZWE3YWY5ZTFmMGZiNjU4MTkxYTgwZmJmMTkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ3ZlIGdvdCB0aGUgbGlzdCBvZiBtb2RpZmllZCBmaWxlczogYERvY3VtZW50YXRpb24vdmlydC9rdm0vKmAsIGBhcmNoL2FybTY0LypgLCBgaW5jbHVkZS9rdm0vYXJtX3BtdS5oYCwgYHRvb2xzLypgLCBhbmQgYGluY2x1ZGUvbGludXgvYml0ZmllbGQuaGAuIE15IGluaXRpYWwgc2NhbiB0ZWxscyBtZSB0aGlzIGlzIGFsbCBwcmV0dHkgdGFyZ2V0ZWQuIE5vbmUgb2YgdGhpcyB0b3VjaGVzIGFueSBhbWQ2NCAoeDg2XzY0KSByZWFjaGFibGUgY29kZS4gU3BlY2lmaWNhbGx5OlxuXG4qICAgVGhlIGBhcmNoL2FybTY0LypgIGZpbGVzIGFyZSBBUk02NC1zcGVjaWZpYywgYXMgaXMgYGluY2x1ZGUva3ZtL2FybV9wbXUuaGAuXG4qICAgVGhlIGB0b29scy8qYCBkaXJlY3RvcnkgY29udGFpbnMgdXNlci1zcGFjZSBzZWxmdGVzdHMgYW5kIHRvb2xzLCBzbyBpdCdzIG5vdCBkaXJlY3RseSBpbXBhY3RpbmcgdGhlIGtlcm5lbCBpbWFnZSBpdHNlbGYuXG4qICAgYERvY3VtZW50YXRpb24vKmAgaXMsIHdlbGwsIGRvY3VtZW50YXRpb24uXG5cbk5vdywgY29uc2lkZXJpbmcgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhIGZvciBmdXp6aW5nLCB3aGljaCBhcmUgdGhlIHJlbGV2YW50IG9uZXMgaW4gdGhpcyBjb250ZXh0LCB0aGUgY29tbWl0IGlzIGNvbXBsZXRlbHkgY292ZXJlZCBieSB0aGVzZSBjYXNlczpcblxuKiAgICoqTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoqKiBJdCBpbmNsdWRlcyBkb2N1bWVudGF0aW9uLCBhbmQgdXNlci1zcGFjZSB0b29scy9zZWxmdGVzdHMgdGhhdCBkb24ndCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZS5cbiogICAqKlVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoqKiBUaGUgY2hhbmdlcyBhcmUgZXhjbHVzaXZlIHRvIEFSTTY0LCBub3QgYW1kNjQsIHdoaWNoIGlzIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG5HaXZlbiB0aGF0IHRoaXMgY29tbWl0IHN0cmljdGx5IGZhbGxzIGludG8gdGhlc2UgY2F0ZWdvcmllcywgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBjcml0ZXJpYSwgSSBtdXN0IGNvbmNsdWRlIHRoYXQgYFdvcnRoRnV6emluZyA9IGZhbHNlYC4gVGhlIGBFbmFibGVDb25maWdzYCBhbmQgYEZvY3VzU3ltYm9sc2AgbGlzdHMgYXJlIGJvdGggZW1wdHksIGFuZCB0aGUgcmVhc29uaW5nIGlzIHRoYXQgdGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIEFSTTY0LXNwZWNpZmljIEtWTSBhbmQgQ1BVIGVycmF0YSBjb2RlLCBvciBkb2N1bWVudGF0aW9uIGFuZCB0b29scywgd2hpY2ggYXJlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiB0aGUgYW1kNjQgYXJjaGl0ZWN0dXJlLlxuXG5KdXN0IHJ1bm5pbmcgYSBxdWljayBzYW5pdHkgY2hlY2sgb2YgdGhlIHZhbHVlczpcbiogV29ydGhGdXp6aW5nOiBmYWxzZVxuKiBFbmFibGVDb25maWdzOiBbXVxuKiBGb2N1c1N5bWJvbHM6IFtdXG4qIFJlYXNvbmluZzogQ2xlYXIgYW5kIGNvbmNpc2UuXG5cbkV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gSSdtIGNvbmZpZGVudCBpbiB0aGlzIGFzc2Vzc21lbnQuIEknbSBub3cgZ29pbmcgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODY5OSwiT3V0cHV0VG9rZW5zIjoxMDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTI6NTU6NTQuOTM0MTc0MTI1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIkFsbCBtb2RpZmllZCBrZXJuZWwgY29kZSBpcyBleGNsdXNpdmUgdG8gdGhlIGFybTY0IGFyY2hpdGVjdHVyZSAoYXJjaC9hcm02NCBhbmQgaW5jbHVkZS9rdm0vYXJtX3BtdS5oKSwgd2l0aCB0aGUgcmVtYWluaW5nIGNoYW5nZXMgbG9jYXRlZCBpbiBEb2N1bWVudGF0aW9uLyBhbmQgdXNlci1zcGFjZSB0b29scy9zZWxmdGVzdHMgKHRvb2xzLykuIE5vbmUgb2YgdGhlIG1vZGlmaWVkIGNvZGUgaXMgY29tcGlsZWQgb3IgcmVhY2hhYmxlIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIkFsbCBtb2RpZmllZCBrZXJuZWwgY29kZSBpcyBleGNsdXNpdmUgdG8gdGhlIGFybTY0IGFyY2hpdGVjdHVyZSAoYXJjaC9hcm02NCBhbmQgaW5jbHVkZS9rdm0vYXJtX3BtdS5oKSwgd2l0aCB0aGUgcmVtYWluaW5nIGNoYW5nZXMgbG9jYXRlZCBpbiBEb2N1bWVudGF0aW9uLyBhbmQgdXNlci1zcGFjZSB0b29scy9zZWxmdGVzdHMgKHRvb2xzLykuIE5vbmUgb2YgdGhlIG1vZGlmaWVkIGNvZGUgaXMgY29tcGlsZWQgb3IgcmVhY2hhYmxlIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo1NTo1NC45MzQyMjczMDZaIiwiU2VxIjo5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjftdv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-14 12:52:10 +0000 UTC FinishedAt: 2026-09-14 12:55:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtBbGwgbW9kaWZpZWQga2VybmVsIGNvZGUgaXMgZXhjbHVzaXZlIHRvIHRoZSBhcm02NCBhcmNoaXRlY3R1cmUgKGFyY2gvYXJtNjQgYW5kIGluY2x1ZGUva3ZtL2FybV9wbXUuaCksIHdpdGggdGhlIHJlbWFpbmluZyBjaGFuZ2VzIGxvY2F0ZWQgaW4gRG9jdW1lbnRhdGlvbi8gYW5kIHVzZXItc3BhY2UgdG9vbHMvc2VsZnRlc3RzICh0b29scy8pLiBOb25lIG9mIHRoZSBtb2RpZmllZCBjb2RlIGlzIGNvbXBpbGVkIG9yIHJlYWNoYWJsZSBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMjo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDczNDNjMGJmZjdkNWM1ZWE3YWY5ZTFmMGZiNjU4MTkxYTgwZmJmMTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAxMjo1NDozNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbmluZGV4IDQ5ODhjMzJkZjRiZjguLjQyMDY1MTM4NjAzYjcgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxuQEAgLTM1MjEsOSAmIzQzOzM1MjEsMTMgQEAgUG9zc2libGUgZmVhdHVyZXM6XG4gXG4gXHQgICAgKiBVc2Vyc3BhY2UgbXVzdCBleHBsaWNpdGx5IHNlbGVjdCBhIFBNVSBpbXBsZW1lbnRhdGlvbiBiZWZvcmVcbiBcdCAgICAgIGluaXRpYWxpemluZyB0aGUgUE1VIG9yIGNvbmZpZ3VyaW5nIGEgUE1VIGV2ZW50IGZpbHRlclxuJiM0MztcdCAgICAgIChLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkgYWxzbyBzYXRpc2ZpZXMgdGhlXG4mIzQzO1x0ICAgICAgaW5pdGlhbGl6YXRpb24gcmVxdWlyZW1lbnQ7IGV2ZW50IGZpbHRlcmluZyByZW1haW5zIHVuYXZhaWxhYmxlXG4mIzQzO1x0ICAgICAgaW4gdGhhdCBtb2RlKVxuIFxuLVx0ICAgICogSWYgdGhlIFBNVSBpbXBsZW1lbnRzIEZFQVRfUE1VdjNwNCwgUE1NSVJfRUwxLlNMT1RTIHByb3ZpZGVzIHRoZVxuLVx0ICAgICAgaGFyZHdhcmUgdmFsdWUgb2YgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb25cbiYjNDM7XHQgICAgKiBJZiBhIGhhcmR3YXJlIFBNVSBpcyBzZWxlY3RlZCBhbmQgaW1wbGVtZW50cyBGRUFUX1BNVXYzcDQsXG4mIzQzO1x0ICAgICAgUE1NSVJfRUwxLlNMT1RTIHByb3ZpZGVzIGl0cyBoYXJkd2FyZSB2YWx1ZS4gSW4gZml4ZWQtY291bnRlcnMtb25seVxuJiM0MztcdCAgICAgIG1vZGUsIFBNTUlSX0VMMSByZWFkcyBhcyB6ZXJvXG4gXG4gXHQgICAgKiBXcml0ZXMgdG8gUE1DUl9FTDAuTiB2aWEgS1ZNX1NFVF9PTkVfUkVHIGFyZSBpZ25vcmVkXG4gXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0XG5pbmRleCBkZWI1YzUxYmMwMGM4Li40ZWMzMjkxZjBiYTc0IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3RcbkBAIC01Myw5ICYjNDM7NTMsOSBAQCBSZXR1cm5zOlxuIFx0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFx0IC1FRVhJU1QgIEludGVycnVwdCBudW1iZXIgYWxyZWFkeSB1c2VkXG4gXHQgLUVOT0RFViAgUE1VdjMgbm90IHN1cHBvcnRlZCBvciBHSUMgbm90IGluaXRpYWxpemVkXG4tXHQgLUVOWElPICAgUE1VdjMgbm90IHN1cHBvcnRlZCwgbWlzc2luZyBWQ1BVIGZlYXR1cmUsIG1pc3Npbmdcbi0gICAgICAgICAgICAgICAgICBoYXJkd2FyZSBQTVUsIG9yIGludGVycnVwdCBudW1iZXIgbm90IHNldCAobm9uLUdJQ3Y1XG4tICAgICAgICAgICAgICAgICAgZ3Vlc3RzLCBvbmx5KVxuJiM0MztcdCAtRU5YSU8gICBQTVV2MyBub3Qgc3VwcG9ydGVkLCBtaXNzaW5nIFZDUFUgZmVhdHVyZSxcbiYjNDM7XHRcdCAgbmVpdGhlciBoYXJkd2FyZSBQTVUgbm9yIEZJWEVEX0NPVU5URVJTX09OTFkgc2VsZWN0ZWQsXG4mIzQzO1x0XHQgIG9yIGludGVycnVwdCBudW1iZXIgbm90IHNldCAobm9uLUdJQ3Y1IGd1ZXN0cyBvbmx5KVxuIFx0IC1FQlVTWSAgIFBNVXYzIGFscmVhZHkgaW5pdGlhbGl6ZWRcbiBcdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbkBAIC02NCw3ICYjNDM7NjQsOCBAQCB2aXJ0dWFsIEdJQyBpbXBsZW1lbnRhdGlvbiwgdGhpcyBtdXN0IGJlIGRvbmUgYWZ0ZXIgaW5pdGlhbGl6aW5nIHRoZSBpbi1rZXJuZWxcbiBpcnFjaGlwLlxuIFxuIFdoZW4gdGhlIEtWTV9BUk1fVkNQVV9QTVVfVjNfU1RSSUNUIHZDUFUgZmVhdHVyZSBpcyBlbmFibGVkIHRoaXMgbXVzdCBiZSBkb25lXG4tYWZ0ZXIgc2VsZWN0aW5nIGEgaGFyZHdhcmUgUE1VLlxuJiM0MzthZnRlciBzZWxlY3RpbmcgYSBoYXJkd2FyZSBQTVUgb3IgZW5hYmxpbmdcbiYjNDM7S1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLlxuIFxuIDEuMyBBVFRSSUJVVEU6IEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSXG4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBAIC03OCw3ICYjNDM7NzksOCBAQCBhZnRlciBzZWxlY3RpbmcgYSBoYXJkd2FyZSBQTVUuXG4gXHQgLUVOT0RFViAgUE1VdjMgbm90IHN1cHBvcnRlZCBvciBHSUMgbm90IGluaXRpYWxpemVkXG4gXHQgLUVOWElPICAgUE1VdjMgbm90IHByb3Blcmx5IGNvbmZpZ3VyZWQgb3IgaW4ta2VybmVsIGlycWNoaXAgbm90XG4gXHQgXHQgIGNvbmZpZ3VyZWQgYXMgcmVxdWlyZWQgcHJpb3IgdG8gY2FsbGluZyB0aGlzIGF0dHJpYnV0ZVxuLVx0IC1FQlVTWSAgIFBNVXYzIGFscmVhZHkgaW5pdGlhbGl6ZWQgb3IgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1blxuJiM0MztcdCAtRUJVU1kgICBQTVV2MyBhbHJlYWR5IGluaXRpYWxpemVkLCBhIFZDUFUgaGFzIGFscmVhZHkgcnVuIG9yXG4mIzQzO1x0XHQgIEZJWEVEX0NPVU5URVJTX09OTFkgaGFzIGFscmVhZHkgYmVlbiBzZXRcbiBcdCAtRUlOVkFMICBJbnZhbGlkIGZpbHRlciByYW5nZVxuIFx0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuQEAgLTEyMywxNCAmIzQzOzEyNSwxNCBAQCBhZnRlciBzZWxlY3RpbmcgYSBoYXJkd2FyZSBQTVUuXG4gXG4gOlJldHVybnM6XG4gXG4tXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MztcdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFx0IC1FQlVTWSAgIFBNVXYzIGFscmVhZHkgaW5pdGlhbGl6ZWQsIGEgVkNQVSBoYXMgYWxyZWFkeSBydW4gb3Jcbi0gICAgICAgICAgICAgICAgICBhbiBldmVudCBmaWx0ZXIgaGFzIGFscmVhZHkgYmVlbiBzZXRcbiYjNDM7ICAgICAgICAgICAgICAgICAgYW4gZXZlbnQgZmlsdGVyIG9yIEZJWEVEX0NPVU5URVJTX09OTFkgaGFzIGFscmVhZHkgYmVlbiBzZXRcbiBcdCAtRUZBVUxUICBFcnJvciBhY2Nlc3NpbmcgdGhlIFBNVSBpZGVudGlmaWVyXG4gXHQgLUVOWElPICAgUE1VIG5vdCBmb3VuZFxuIFx0IC1FTk9ERVYgIFBNVXYzIG5vdCBzdXBwb3J0ZWQgb3IgR0lDIG5vdCBpbml0aWFsaXplZFxuIFx0IC1FTk9NRU0gIENvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnlcbi1cdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO1x0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXG4gUmVxdWVzdCB0aGF0IHRoZSBWQ1BVIHVzZXMgdGhlIHNwZWNpZmllZCBoYXJkd2FyZSBQTVUgd2hlbiBjcmVhdGluZyBndWVzdCBldmVudHNcbiBmb3IgdGhlIHB1cnBvc2Ugb2YgUE1VIGVtdWxhdGlvbi4gVGhlIFBNVSBpZGVudGlmaWVyIGNhbiBiZSByZWFkIGZyb20gdGhlIFwmIzM0O3R5cGVcJiMzNDtcbkBAIC0xNzIsNiAmIzQzOzE3NCwzMCBAQCBleHBsaWNpdGx5IHNlbGVjdGVkLCBvciB0aGUgbnVtYmVyIG9mIGNvdW50ZXJzIGlzIG91dCBvZiByYW5nZSBmb3IgdGhlXG4gc2VsZWN0ZWQgUE1VLiBTZWxlY3RpbmcgYSBuZXcgUE1VIGNhbmNlbHMgdGhlIGVmZmVjdCBvZiBzZXR0aW5nIHRoaXNcbiBhdHRyaWJ1dGUuXG4gXG4mIzQzOzEuNiBBVFRSSUJVVEU6IEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWVxuJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7XG4mIzQzOzpQYXJhbWV0ZXJzOiBubyBhZGRpdGlvbmFsIHBhcmFtZXRlciBpbiBrdm1fZGV2aWNlX2F0dHIuYWRkclxuJiM0MztcbiYjNDM7OlJldHVybnM6XG4mIzQzO1xuJiM0MztcdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MztcdCAtRUJVU1kgICBQTVV2MyBhbHJlYWR5IGluaXRpYWxpemVkLCBhIFZDUFUgaGFzIGFscmVhZHkgcnVuLFxuJiM0MztcdFx0ICBhbiBldmVudCBmaWx0ZXIgaGFzIGFscmVhZHkgYmVlbiBzZXQgb3JcbiYjNDM7XHRcdCAgYSBoYXJkd2FyZSBQTVUgaGFzIGFscmVhZHkgYmVlbiBzcGVjaWZpZWRcbiYjNDM7XHQgLUVOWElPICAgQXR0ZW1wdGVkIHRvIGdldCBiZWZvcmUgc2V0dGluZ1xuJiM0MztcdCAtRU5PREVWICBBdHRlbXB0ZWQgdG8gc2V0IHdoaWxlIFBNVXYzIG5vdCBzdXBwb3J0ZWRcbiYjNDM7XHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7XG4mIzQzO0lmIHNldCwgS1ZNIGVtdWxhdGVzIFBNVXYzIHdpdGhvdXQgcHJvZ3JhbW1hYmxlIGV2ZW50IGNvdW50ZXJzLlxuJiM0MztcbiYjNDM7V2l0aCBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NUUklDVCwgZW5hYmxpbmcgdGhpcyBhdHRyaWJ1dGUgc2F0aXNmaWVzIHRoZVxuJiM0MztQTVUgc2VsZWN0aW9uIHJlcXVpcmVtZW50IGZvciBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQuXG4mIzQzO1xuJiM0MztXaGVuIHRoaXMgYXR0cmlidXRlIGlzIGVuYWJsZWQsIHRoZSB2Q1BVIGNhbiBydW4gb24gYW55IHBoeXNpY2FsIENQVVxuJiM0Mzt0aGF0IGhhcyBhIFBNVSwgcmVnYXJkbGVzcyBvZiB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbi4gVGhpc1xuJiM0MzthdHRyaWJ1dGUgaXMgVk0tc2NvcGVkLlxuJiM0MztcbiAyLiBHUk9VUDogS1ZNX0FSTV9WQ1BVX1RJTUVSX0NUUkxcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDI3ZmUwY2Q1YjJkN2EuLjEwZTNmZjQxMDc5ZTggMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTM2Nyw2ICYjNDM7MzY3LDEwIEBAIHN0cnVjdCBrdm1fYXJjaCB7XG4gI2RlZmluZSBLVk1fQVJDSF9GTEFHX1dSSVRBQkxFX0lNUF9JRF9SRUdTXHRcdDEwXG4gXHQvKiBVbmhhbmRsZWQgU0VBcyBhcmUgdGFrZW4gdG8gdXNlcnNwYWNlICovXG4gI2RlZmluZSBLVk1fQVJDSF9GTEFHX0VYSVRfU0VBXHRcdFx0XHQxMVxuJiM0MztcdC8qIFBNVXYzIGlzIGVtdWxhdGVkIHdpdGggYW4gZXhwbGljaXRseSBzcGVjaWZpZWQgaGFyZHdhcmUgUE1VICovXG4mIzQzOyNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRVhQTElDSVRcdFx0XHQxMlxuJiM0MztcdC8qIFBNVXYzIGlzIGVtdWxhdGVkIHdpdGhvdXQgcHJvZ3JhbW1hYmxlIGV2ZW50IGNvdW50ZXJzICovXG4mIzQzOyNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWVx0MTNcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHQvKiBWTS13aWRlIHZDUFUgZmVhdHVyZSBzZXQgKi9cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbmluZGV4IDAxOWU1ZTNkODkyZTYuLjNiZDdmMjAxMjUyYTEgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuQEAgLTQzOCw2ICYjNDM7NDM4LDcgQEAgZW51bSB7XG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSXHRcdDJcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VXHRcdDNcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlNcdDRcbiYjNDM7I2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWVx0NVxuICNkZWZpbmUgS1ZNX0FSTV9WQ1BVX1RJTUVSX0NUUkxcdFx0MVxuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfVElNRVJfSVJRX1ZUSU1FUlx0XHQwXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9USU1FUl9JUlFfUFRJTUVSXHRcdDFcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVfZXJyYXRhLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVfZXJyYXRhLmNcbmluZGV4IDc4ZTRlMTA1ZjZhYjUuLjliMmQ5ZDBmMTczODggMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVfZXJyYXRhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdV9lcnJhdGEuY1xuQEAgLTEwMTIsNyAmIzQzOzEwMTIsNyBAQCBjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyBhcm02NF9lcnJhdGFbXSA9IHtcbiBcdHtcbiBcdFx0LmRlc2MgPSBcJiMzNDtBcHBsZSBJTVBERUYgUE1VdjMgVHJhcHNcJiMzNDssXG4gXHRcdC5jYXBhYmlsaXR5ID0gQVJNNjRfV09SS0FST1VORF9QTVVWM19JTVBERUZfVFJBUFMsXG4tXHRcdC50eXBlID0gQVJNNjRfQ1BVQ0FQX0xPQ0FMX0NQVV9FUlJBVFVNLFxuJiM0MztcdFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfRUFSTFlfTE9DQUxfQ1BVX0ZFQVRVUkUsXG4gXHRcdC5tYXRjaGVzID0gaGFzX2ltcGRlZl9wbXV2MyxcbiBcdFx0LmNwdV9lbmFibGUgPSBjcHVfZW5hYmxlX2ltcGRlZl9wbXV2M190cmFwcyxcbiBcdH0sXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vYXJtLmMgYi9hcmNoL2FybTY0L2t2bS9hcm0uY1xuaW5kZXggY2NhZTgyYzEyNDJiYy4uZGZlYmZlYjk1NjE5OCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2FybS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9hcm0uY1xuQEAgLTY1Miw2ICYjNDM7NjUyLDcgQEAgc3RhdGljIGJvb2wga3ZtX3ZjcHVfc2hvdWxkX2NsZWFyX3R3ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gdm9pZCBrdm1fYXJjaF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxuIHtcbiBcdHN0cnVjdCBrdm1fczJfbW11ICptbXU7XG4mIzQzO1x0aW50IGxhc3RfY3B1ID0gdmNwdS1cdTAwM2VjcHU7XG4gXHRpbnQgKmxhc3RfcmFuO1xuIFxuIFx0aWYgKGlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpKVxuQEAgLTcwMSw2ICYjNDM7NzAyLDcgQEAgdm9pZCBrdm1fYXJjaF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxuIFx0aWYgKGhhc192aGUoKSlcbiBcdFx0a3ZtX3ZjcHVfbG9hZF92aGUodmNwdSk7XG4gXHRrdm1fYXJjaF92Y3B1X2xvYWRfZnAodmNwdSk7XG4mIzQzO1x0a3ZtX3ZjcHVfbG9hZF9wbXUodmNwdSwgbGFzdF9jcHUpO1xuIFx0a3ZtX3ZjcHVfcG11X3Jlc3RvcmVfZ3Vlc3QodmNwdSk7XG4gXHRpZiAoa3ZtX2FybV9pc19wdnRpbWVfZW5hYmxlZChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gpKVxuIFx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVDT1JEX1NURUFMLCB2Y3B1KTtcbkBAIC03NTQsNyAmIzQzOzc1Niw2IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0a3ZtX2FybV92bWlkX2NsZWFyX2FjdGl2ZSgpO1xuIFxuIFx0dmNwdV9jbGVhcl9vbl91bnN1cHBvcnRlZF9jcHUodmNwdSk7XG4tXHR2Y3B1LVx1MDAzZWNwdSA9IC0xO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2t2bV9hcm1fdmNwdV9wb3dlcl9vZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuQEAgLTE2NzAsMjkgJiM0MzsxNjcxLDI2IEBAIHN0YXRpYyBpbnQgX19rdm1fdmNwdV9zZXRfdGFyZ2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGZlYXR1cmVzID0gaW5pdC1cdTAwM2VmZWF0dXJlc1swXTtcbiBcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuLVx0aW50IHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0aW50IHJldDtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuIFxuIFx0aWYgKHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfVkNQVV9GRUFUVVJFU19DT05GSUdVUkVELCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5mbGFncykgXHUwMDI2XHUwMDI2XG4gXHQgICAga3ZtX3ZjcHVfaW5pdF9jaGFuZ2VkKHZjcHUsIGluaXQpKVxuLVx0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGJpdG1hcF9jb3B5KGt2bS1cdTAwM2VhcmNoLnZjcHVfZmVhdHVyZXMsIFx1MDAyNmZlYXR1cmVzLCBLVk1fVkNQVV9NQVhfRkVBVFVSRVMpO1xuIFxuIFx0cmV0ID0ga3ZtX3NldHVwX3ZjcHUodmNwdSk7XG4gXHRpZiAocmV0KVxuLVx0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0LyogTm93IHdlIGtub3cgd2hhdCBpdCBpcywgd2UgY2FuIHJlc2V0IGl0LiAqL1xuIFx0a3ZtX3Jlc2V0X3ZjcHUodmNwdSk7XG4gXG4gXHRzZXRfYml0KEtWTV9BUkNIX0ZMQUdfVkNQVV9GRUFUVVJFU19DT05GSUdVUkVELCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5mbGFncyk7XG4gXHR2Y3B1X3NldF9mbGFnKHZjcHUsIFZDUFVfSU5JVElBTElaRUQpO1xuLVx0cmV0ID0gMDtcbi1vdXRfdW5sb2NrOlxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbi1cdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQga3ZtX3ZjcHVfc2V0X3RhcmdldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5AQCAtMTcwOCw2ICYjNDM7MTcwNiw4IEBAIHN0YXRpYyBpbnQga3ZtX3ZjcHVfc2V0X3RhcmdldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiYjNDM7XG4gXHRpZiAoIWt2bV92Y3B1X2luaXRpYWxpemVkKHZjcHUpKVxuIFx0XHRyZXR1cm4gX19rdm1fdmNwdV9zZXRfdGFyZ2V0KHZjcHUsIGluaXQpO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMgYi9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jXG5pbmRleCA1YjFhZjdlMjE3NmZhLi5jNjgzMzFjZGZhZjkzIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuY1xuQEAgLTcsOSAmIzQzOzcsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rdm1faG9zdC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZi9hcm1fcG11LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcmN1bGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9lbXVsYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nrdm0vYXJtX3BtdS5oXHUwMDNlXG5AQCAtMTcsNiAmIzQzOzE3LDEwIEBAXG4gXG4gI2RlZmluZSBQRVJGX0FUVFJfQ0ZHMV9DT1VOVEVSXzY0QklUXHRCSVQoMClcbiBcbiYjNDM7LypcbiYjNDM7ICogYXJtX3BtdXMgaXMgYXBwZW5kLW9ubHkuIGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2MygpIGZlZWRzIHBlcnNpc3RlbnRcbiYjNDM7ICogVk0gc3RhdGUsIHNvIGEgdHJ1ZSByZXN1bHQgbXVzdCByZW1haW4gdmFsaWQgYWZ0ZXIgdGhlIGNoZWNrLlxuJiM0MzsgKi9cbiBzdGF0aWMgTElTVF9IRUFEKGFybV9wbXVzKTtcbiBzdGF0aWMgREVGSU5FX01VVEVYKGFybV9wbXVzX2xvY2spO1xuIFxuQEAgLTI2LDcgJiM0MzszMCw2IEBAIHN0YXRpYyBib29sIGt2bV9wbXVfY291bnRlcl9pc19lbmFibGVkKHN0cnVjdCBrdm1fcG1jICpwbWMpO1xuIFxuIGJvb2wga3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzKHZvaWQpXG4ge1xuLVx0Z3VhcmQobXV0ZXgpKFx1MDAyNmFybV9wbXVzX2xvY2spO1xuIFx0cmV0dXJuICFsaXN0X2VtcHR5KFx1MDAyNmFybV9wbXVzKTtcbiB9XG4gXG5AQCAtODAsNiAmIzQzOzgzLDExIEBAIHU2NCBrdm1fcG11X2V2dHlwZXJfbWFzayhzdHJ1Y3Qga3ZtICprdm0pXG4gXHRyZXR1cm4gbWFzaztcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seShzdHJ1Y3Qga3ZtICprdm0pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdGVzdF9iaXQoS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgXHUwMDI2a3ZtLVx1MDAzZWFyY2guZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGt2bV9wbWNfaXNfNjRiaXQgLSBkZXRlcm1pbmUgaWYgY291bnRlciBpcyA2NGJpdFxuICAqIEBwbWM6IGNvdW50ZXIgY29udGV4dFxuQEAgLTMxNywxMiAmIzQzOzMyNSwxMiBAQCB1NjQga3ZtX3BtdV9hY2Nlc3NpYmxlX2NvdW50ZXJfbWFzayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gdTY0IGt2bV9wbXVfaW1wbGVtZW50ZWRfY291bnRlcl9tYXNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHR1NjQgdmFsID0gRklFTERfR0VUKEFSTVY4X1BNVV9QTUNSX04sIGt2bV92Y3B1X3JlYWRfcG1jcih2Y3B1KSk7XG4mIzQzO1x0dTY0IG4gPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm5yX3BtdV9jb3VudGVycztcbiBcbi1cdGlmICh2YWwgPT0gMClcbiYjNDM7XHRpZiAobiA9PSAwKVxuIFx0XHRyZXR1cm4gQklUKEFSTVY4X1BNVV9DWUNMRV9JRFgpO1xuIFx0ZWxzZVxuLVx0XHRyZXR1cm4gR0VOTUFTSyh2YWwgLSAxLCAwKSB8IEJJVChBUk1WOF9QTVVfQ1lDTEVfSURYKTtcbiYjNDM7XHRcdHJldHVybiBHRU5NQVNLKG4gLSAxLCAwKSB8IEJJVChBUk1WOF9QTVVfQ1lDTEVfSURYKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQga3ZtX3BtY19lbmFibGVfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxuQEAgLTU3MSw2ICYjNDM7NTc5LDIzIEBAIHZvaWQga3ZtX3BtdV9zb2Z0d2FyZV9pbmNyZW1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKVxuIFx0a3ZtX3BtdV9jb3VudGVyX2luY3JlbWVudCh2Y3B1LCB2YWwsIEFSTVY4X1BNVVYzX1BFUkZDVFJfU1dfSU5DUik7XG4gfVxuIFxuJiM0Mzt2b2lkIGt2bV9wbXVfcmVxdWVzdF9yZWNyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHR2Y3B1LVx1MDAzZWFyY2gucG11LmV2ZW50c19uZWVkX3JlY3JlYXRlID0gdHJ1ZTtcbiYjNDM7XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQga3ZtX3BtdV9hcHBseV9wbWNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9sZCwgdTY0IHZhbCwgYm9vbCBmb3JjZV9yZWxvYWQpXG4mIzQzO3tcbiYjNDM7XHR1NjQgY2hhbmdlZCA9IG9sZCBeIHZhbDtcbiYjNDM7XG4mIzQzO1x0LyogUmVsb2FkIHRoZSBQTVUgaWYgdGhlIHdyaXRlIGFmZmVjdHMgdGhlIGJhY2tpbmcgcGVyZiBldmVudHMuICovXG4mIzQzO1x0aWYgKGNoYW5nZWQgXHUwMDI2IChBUk1WOF9QTVVfUE1DUl9MQyB8IEFSTVY4X1BNVV9QTUNSX0xQKSlcbiYjNDM7XHRcdGt2bV9wbXVfcmVxdWVzdF9yZWNyZWF0ZSh2Y3B1KTtcbiYjNDM7XHRlbHNlIGlmIChmb3JjZV9yZWxvYWQgfHwgKGNoYW5nZWQgXHUwMDI2IEFSTVY4X1BNVV9QTUNSX0UpKVxuJiM0MztcdFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFTE9BRF9QTVUsIHZjcHUpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGt2bV9wbXVfaGFuZGxlX3BtY3IgLSBoYW5kbGUgUE1DUiByZWdpc3RlclxuICAqIEB2Y3B1OiBUaGUgdmNwdSBwb2ludGVyXG5AQCAtNTc4LDE5ICYjNDM7NjAzLDE4IEBAIHZvaWQga3ZtX3BtdV9zb2Z0d2FyZV9pbmNyZW1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKVxuICAqL1xuIHZvaWQga3ZtX3BtdV9oYW5kbGVfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpXG4ge1xuJiM0MztcdHU2NCBvbGQgPSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBQTUNSX0VMMCk7XG4gXHRpbnQgaTtcbiBcbiBcdC8qIEZpeHVwIFBNQ1JfRUwwIHRvIHJlY29uY2lsZSB0aGUgUE1VIHZlcnNpb24gYW5kIHRoZSBMUCBiaXQgKi9cbiBcdGlmICgha3ZtX2hhc19mZWF0KHZjcHUtXHUwMDNla3ZtLCBJRF9BQTY0REZSMF9FTDEsIFBNVVZlciwgVjNQNSkpXG4gXHRcdHZhbCBcdTAwMjY9IH5BUk1WOF9QTVVfUE1DUl9MUDtcbiBcbi1cdC8qIFJlcXVlc3QgYSByZWxvYWQgb2YgdGhlIFBNVSB0byBlbmFibGUvZGlzYWJsZSBhZmZlY3RlZCBjb3VudGVycyAqL1xuLVx0aWYgKChfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBQTUNSX0VMMCkgXiB2YWwpIFx1MDAyNiBBUk1WOF9QTVVfUE1DUl9FKVxuLVx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XG4tXG4gXHQvKiBUaGUgcmVzZXQgYml0cyBkb24mIzM5O3QgaW5kaWNhdGUgYW55IHN0YXRlLCBhbmQgc2hvdWxkbiYjMzk7dCBiZSBzYXZlZC4gKi9cbiBcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBQTUNSX0VMMCwgKHZhbCBcdTAwMjYgfihBUk1WOF9QTVVfUE1DUl9DIHwgQVJNVjhfUE1VX1BNQ1JfUCkpKTtcbiBcbiYjNDM7XHRrdm1fcG11X2FwcGx5X3BtY3IodmNwdSwgb2xkLCBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBQTUNSX0VMMCksIGZhbHNlKTtcbiYjNDM7XG4gXHRpZiAodmFsIFx1MDAyNiBBUk1WOF9QTVVfUE1DUl9DKVxuIFx0XHRrdm1fcG11X3NldF9jb3VudGVyX3ZhbHVlKHZjcHUsIEFSTVY4X1BNVV9DWUNMRV9JRFgsIDApO1xuIFxuQEAgLTYwNiw2ICYjNDM7NjMwLDIwIEBAIHZvaWQga3ZtX3BtdV9oYW5kbGVfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpXG4gXHR9XG4gfVxuIFxuJiM0Mzt2b2lkIGt2bV9wbXVfYXBwbHlfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBvbGQsIHU2NCB2YWwpXG4mIzQzO3tcbiYjNDM7XHR1NjQgY2hhbmdlZCA9IG9sZCBeIHZhbDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBIUE1OIGRldGVybWluZXMgd2hpY2ggY291bnRlcnMgSFBNRCBhbmQgSExQIGFwcGx5IHRvLiBDaGFuZ2VzIHRvXG4mIzQzO1x0ICogdGhlc2UgZmllbGRzIHJlcXVpcmUgbmV3IHBlcmYgZXZlbnQgZmlsdGVycyBhbmQgc2FtcGxlIHBlcmlvZHMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGNoYW5nZWQgXHUwMDI2IChNRENSX0VMMl9IUE1OIHwgTURDUl9FTDJfSFBNRCB8IE1EQ1JfRUwyX0hMUCkpXG4mIzQzO1x0XHRrdm1fcG11X3JlcXVlc3RfcmVjcmVhdGUodmNwdSk7XG4mIzQzO1x0ZWxzZSBpZiAoY2hhbmdlZCBcdTAwMjYgTURDUl9FTDJfSFBNRSlcbiYjNDM7XHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUxPQURfUE1VLCB2Y3B1KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgYm9vbCBrdm1fcG11X2NvdW50ZXJfaXNfZW5hYmxlZChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9wbWNfdG9fdmNwdShwbWMpO1xuQEAgLTY0OSwxMCAmIzQzOzY4Nyw4IEBAIHN0YXRpYyBib29sIGt2bV9wbWNfY291bnRzX2F0X2VsMihzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxuIFx0cmV0dXJuIGt2bV9wbWNfcmVhZF9ldnRyZWcocG1jKSBcdTAwMjYgQVJNVjhfUE1VX0lOQ0xVREVfRUwyO1xuIH1cbiBcbi1zdGF0aWMgaW50IGt2bV9tYXBfcG11X2V2ZW50KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGV2ZW50c2VsKVxuJiM0MztzdGF0aWMgaW50IGt2bV9tYXBfcG11X2V2ZW50KHN0cnVjdCBhcm1fcG11ICpwbXUsIHVuc2lnbmVkIGludCBldmVudHNlbClcbiB7XG4tXHRzdHJ1Y3QgYXJtX3BtdSAqcG11ID0ga3ZtLVx1MDAzZWFyY2guYXJtX3BtdTtcbi1cbiBcdC8qXG4gXHQgKiBUaGUgQ1BVIFBNVSBsaWtlbHkgaXNuJiMzOTt0IFBNVXYzOyBsZXQgdGhlIGRyaXZlciBwcm92aWRlIGEgbWFwcGluZ1xuIFx0ICogZm9yIHRoZSBndWVzdCYjMzk7cyBQTVV2MyBldmVudCBJRC5cbkBAIC02NjMsMTQgJiM0Mzs2OTksMjcgQEAgc3RhdGljIGludCBrdm1fbWFwX3BtdV9ldmVudChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBldmVudHNlbClcbiBcdHJldHVybiBldmVudHNlbDtcbiB9XG4gXG4tLyoqXG4tICoga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudCAtIGNyZWF0ZSBhIHBlcmYgZXZlbnQgZm9yIGEgY291bnRlclxuLSAqIEBwbWM6IENvdW50ZXIgY29udGV4dFxuLSAqL1xuLXN0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYylcbiYjNDM7c3RhdGljIHN0cnVjdCBhcm1fcG11ICprdm1fcG11X3Byb2JlX2FybXBtdShpbnQgY3B1KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFybV9wbXVfZW50cnkgKmVudHJ5O1xuJiM0MztcdHN0cnVjdCBhcm1fcG11ICpwbXU7XG4mIzQzO1xuJiM0MztcdGd1YXJkKHJjdSkoKTtcbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZW50cnksIFx1MDAyNmFybV9wbXVzLCBlbnRyeSkge1xuJiM0MztcdFx0cG11ID0gZW50cnktXHUwMDNlYXJtX3BtdTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIFx1MDAyNnBtdS1cdTAwM2VzdXBwb3J0ZWRfY3B1cykpXG4mIzQzO1x0XHRcdHJldHVybiBwbXU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdShzdHJ1Y3Qga3ZtX3BtYyAqcG1jLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBhcm1fcG11ICphcm1fcG11KVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9wbWNfdG9fdmNwdShwbWMpO1xuLVx0c3RydWN0IGFybV9wbXUgKmFybV9wbXUgPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmFybV9wbXU7XG4gXHRzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7XG4gXHRzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIGF0dHI7XG4gXHRpbnQgZXZlbnRzZWw7XG5AQCAtNzA0LDcgJiM0Mzs3NTMsNyBAQCBzdGF0aWMgdm9pZCBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50KHN0cnVjdCBrdm1fcG1jICpwbWMpXG4gXHQgKiBEb24mIzM5O3QgY3JlYXRlIGFuIGV2ZW50IGlmIHdlJiMzOTtyZSBydW5uaW5nIG9uIGhhcmR3YXJlIHRoYXQgcmVxdWlyZXNcbiBcdCAqIFBNVXYzIGV2ZW50IHRyYW5zbGF0aW9uIGFuZCB3ZSBjb3VsZG4mIzM5O3QgZmluZCBhIHZhbGlkIG1hcHBpbmcuXG4gXHQgKi9cbi1cdGV2ZW50c2VsID0ga3ZtX21hcF9wbXVfZXZlbnQodmNwdS1cdTAwM2Vrdm0sIGV2ZW50c2VsKTtcbiYjNDM7XHRldmVudHNlbCA9IGt2bV9tYXBfcG11X2V2ZW50KGFybV9wbXUsIGV2ZW50c2VsKTtcbiBcdGlmIChldmVudHNlbCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTc0OSw2ICYjNDM7Nzk4LDMyIEBAIHN0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYylcbiBcdHBtYy1cdTAwM2VwZXJmX2V2ZW50ID0gZXZlbnQ7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICoga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudCAtIGNyZWF0ZSBhIHBlcmYgZXZlbnQgZm9yIGEgY291bnRlclxuJiM0MzsgKiBAcG1jOiBDb3VudGVyIGNvbnRleHRcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9wbWNfdG9fdmNwdShwbWMpO1xuJiM0MztcdHN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5hcm1fcG11O1xuJiM0MztcbiYjNDM7XHRpZiAoa3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXHUwMDNla3ZtKSkge1xuJiM0MztcdFx0ZG8ge1xuJiM0MztcdFx0XHRhcm1fcG11ID0ga3ZtX3BtdV9wcm9iZV9hcm1wbXUoUkVBRF9PTkNFKHZjcHUtXHUwMDNlY3B1KSk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoIWFybV9wbXUpIHtcbiYjNDM7XHRcdFx0XHRwcl93YXJuX29uY2UoXCYjMzQ7a3ZtOiBVbnN1cHBvcnRlZCBQTVUgdmFyaWF0aW9uIGRldGVjdGVkLlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0YWRkX3RhaW50KFRBSU5UX0NQVV9PVVRfT0ZfU1BFQywgTE9DS0RFUF9TVElMTF9PSyk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0XHRrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50X3dpdGhfcG11KHBtYywgYXJtX3BtdSk7XG4mIzQzO1x0XHR9IHdoaWxlICghY3B1bWFza190ZXN0X2NwdShSRUFEX09OQ0UodmNwdS1cdTAwM2VjcHUpLCBcdTAwMjZhcm1fcG11LVx1MDAzZXN1cHBvcnRlZF9jcHVzKSk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnRfd2l0aF9wbXUocG1jLCBhcm1fcG11KTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICoga3ZtX3BtdV9zZXRfY291bnRlcl9ldmVudF90eXBlIC0gc2V0IHNlbGVjdGVkIGNvdW50ZXIgdG8gbW9uaXRvciBzb21lIGV2ZW50XG4gICogQHZjcHU6IFRoZSB2Y3B1IHBvaW50ZXJcbkBAIC03ODksNDMgJiM0Mzs4NjQsNyBAQCB2b2lkIGt2bV9ob3N0X3BtdV9pbml0KHN0cnVjdCBhcm1fcG11ICpwbXUpXG4gXHRcdHJldHVybjtcbiBcbiBcdGVudHJ5LVx1MDAzZWFybV9wbXUgPSBwbXU7XG4tXHRsaXN0X2FkZF90YWlsKFx1MDAyNmVudHJ5LVx1MDAzZWVudHJ5LCBcdTAwMjZhcm1fcG11cyk7XG4tfVxuLVxuLXN0YXRpYyBzdHJ1Y3QgYXJtX3BtdSAqa3ZtX3BtdV9wcm9iZV9hcm1wbXUodm9pZClcbi17XG4tXHRzdHJ1Y3QgYXJtX3BtdV9lbnRyeSAqZW50cnk7XG4tXHRzdHJ1Y3QgYXJtX3BtdSAqcG11O1xuLVx0aW50IGNwdTtcbi1cbi1cdGd1YXJkKG11dGV4KShcdTAwMjZhcm1fcG11c19sb2NrKTtcbi1cbi1cdC8qXG4tXHQgKiBJdCBpcyBzYWZlIHRvIHVzZSBhIHN0YWxlIGNwdSB0byBpdGVyYXRlIHRoZSBsaXN0IG9mIFBNVXMgc28gbG9uZyBhc1xuLVx0ICogdGhlIHNhbWUgdmFsdWUgaXMgdXNlZCBmb3IgdGhlIGVudGlyZXR5IG9mIHRoZSBsb29wLiBHaXZlbiB0aGlzLCBhbmRcbi1cdCAqIHRoZSBmYWN0IHRoYXQgbm8gcGVyY3B1IGRhdGEgaXMgdXNlZCBmb3IgdGhlIGxvb2t1cCB0aGVyZSBpcyBubyBuZWVkXG4tXHQgKiB0byBkaXNhYmxlIHByZWVtcHRpb24uXG4tXHQgKlxuLVx0ICogSXQgaXMgc3RpbGwgbmVjZXNzYXJ5IHRvIGdldCBhIHZhbGlkIGNwdSwgdGhvdWdoLCB0byBwcm9iZSBmb3IgdGhlXG4tXHQgKiBkZWZhdWx0IFBNVSBpbnN0YW5jZSBhcyB1c2Vyc3BhY2UgaXMgbm90IHJlcXVpcmVkIHRvIHNwZWNpZnkgYSBQTVVcbi1cdCAqIHR5cGUuIEluIG9yZGVyIHRvIHVwaG9sZCB0aGUgcHJlZXhpc3RpbmcgYmVoYXZpb3IgS1ZNIHNlbGVjdHMgdGhlXG4tXHQgKiBQTVUgaW5zdGFuY2UgZm9yIHRoZSBjb3JlIGR1cmluZyB2Y3B1IGluaXQuIEEgZGVwZW5kZW50IHVzZVxuLVx0ICogY2FzZSB3b3VsZCBiZSBhIHVzZXIgd2l0aCBkaXNkYWluIG9mIGFsbCB0aGluZ3MgYmlnLkxJVFRMRSB0aGF0XG4tXHQgKiBhZmZpbmVzIHRoZSBWTU0gdG8gYSBwYXJ0aWN1bGFyIGNsdXN0ZXIgb2YgY29yZXMuXG4tXHQgKlxuLVx0ICogSW4gYW55IGNhc2UsIHVzZXJzcGFjZSBzaG91bGQganVzdCBkbyB0aGUgc2FuZSB0aGluZyBhbmQgdXNlIHRoZSBVQVBJXG4tXHQgKiB0byBzZWxlY3QgYSBQTVUgdHlwZSBkaXJlY3RseS4gQnV0LCBiZSB3YXJ5IG9mIHRoZSBiYWdnYWdlIGJlaW5nXG4tXHQgKiBjYXJyaWVkIGhlcmUuXG4tXHQgKi9cbi1cdGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7XG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcdTAwMjZhcm1fcG11cywgZW50cnkpIHtcbi1cdFx0cG11ID0gZW50cnktXHUwMDNlYXJtX3BtdTtcbi1cbi1cdFx0aWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBcdTAwMjZwbXUtXHUwMDNlc3VwcG9ydGVkX2NwdXMpKVxuLVx0XHRcdHJldHVybiBwbXU7XG4tXHR9XG4tXG4tXHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZlbnRyeS1cdTAwM2VlbnRyeSwgXHUwMDI2YXJtX3BtdXMpO1xuIH1cbiBcbiBzdGF0aWMgdTY0IF9fY29tcHV0ZV9wbWNlaWQoc3RydWN0IGFybV9wbXUgKnBtdSwgYm9vbCBwbWNlaWQxKVxuQEAgLTg3MSw2ICYjNDM7OTEwLDEzIEBAIHU2NCBrdm1fcG11X2dldF9wbWNlaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHBtY2VpZDEpXG4gXHR1NjQgdmFsLCBtYXNrID0gMDtcbiBcdGludCBiYXNlLCBpLCBucl9ldmVudHM7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBIaWRlIHRoZSBoYXJkd2FyZSBQTVUmIzM5O3MgZXZlbnQgc2V0IHRvIGtlZXAgUE1DRUlEIHN0YWJsZSBhY3Jvc3NcbiYjNDM7XHQgKiBwaHlzaWNhbCBDUFUgbWlncmF0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdS1cdTAwM2Vrdm0pKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuIFx0aWYgKCFwbWNlaWQxKSB7XG4gXHRcdHZhbCA9IGNvbXB1dGVfcG1jZWlkMCh2Y3B1KTtcbiBcdFx0YmFzZSA9IDA7XG5AQCAtODk4LDkgJiM0Mzs5NDQsMjcgQEAgdTY0IGt2bV9wbXVfZ2V0X3BtY2VpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcG1jZWlkMSlcbiBcdHJldHVybiB2YWwgXHUwMDI2IG1hc2s7XG4gfVxuIFxuJiM0Mzt2b2lkIGt2bV92Y3B1X2xvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGxhc3RfY3B1KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdS1cdTAwM2Vrdm0pIHx8IHZjcHUtXHUwMDNlY3B1ID09IGxhc3RfY3B1IHx8IGxhc3RfY3B1ID09IC0xKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAoa3ZtX3BtdV9wcm9iZV9hcm1wbXUodmNwdS1cdTAwM2VjcHUpICE9IGt2bV9wbXVfcHJvYmVfYXJtcG11KGxhc3RfY3B1KSlcbiYjNDM7XHRcdGt2bV9wbXVfcmVxdWVzdF9yZWNyZWF0ZSh2Y3B1KTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIGt2bV92Y3B1X3JlbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnBtdTtcbiBcdHU2NCBtYXNrID0ga3ZtX3BtdV9pbXBsZW1lbnRlZF9jb3VudGVyX21hc2sodmNwdSk7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGlmIChwbXUtXHUwMDNlZXZlbnRzX25lZWRfcmVjcmVhdGUpIHtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEtWTV9BUk1WOF9QTVVfTUFYX0NPVU5URVJTOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0a3ZtX3BtdV9zdG9wX2NvdW50ZXIoa3ZtX3ZjcHVfaWR4X3RvX3BtYyh2Y3B1LCBpKSk7XG4mIzQzO1xuJiM0MztcdFx0cG11LVx1MDAzZWV2ZW50c19uZWVkX3JlY3JlYXRlID0gZmFsc2U7XG4mIzQzO1x0fVxuIFxuIFx0X192Y3B1X3Jtd19zeXNfcmVnKHZjcHUsIFBNT1ZTU0VUX0VMMCwgXHUwMDI2PSwgbWFzayk7XG4gXHRfX3ZjcHVfcm13X3N5c19yZWcodmNwdSwgUE1JTlRFTlNFVF9FTDEsIFx1MDAyNj0sIG1hc2spO1xuQEAgLTkzOSw4ICYjNDM7MTAwMyw4IEBAIGludCBrdm1fYXJtX3BtdV92M19lbmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHN0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0LyogT25seSBwb3NzaWJsZSB3aGVuIHVzaW5nIEtWTV9BUk1fVkNQVV9QTVVfVjNfU1RSSUNUICovXG4tXHRpZiAoIXZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guYXJtX3BtdSlcbiYjNDM7XHQvKiBTdHJpY3QgUE1VdjMgcmVxdWlyZXMgYSBoYXJkd2FyZSBQTVUgb3IgZml4ZWQtY291bnRlcnMtb25seSBtb2RlLiAqL1xuJiM0MztcdGlmICghdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5hcm1fcG11IFx1MDAyNlx1MDAyNiAha3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXHUwMDNla3ZtKSlcbiBcdFx0cmV0dXJuIC1FTlhJTztcbiBcbiBcdGlmIChpcnFjaGlwX2luX2tlcm5lbCh2Y3B1LVx1MDAzZWt2bSkpIHtcbkBAIC0xMDEzLDYgJiM0MzsxMDc3LDkgQEAgdTgga3ZtX2FybV9wbXVfZ2V0X21heF9jb3VudGVycyhzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0c3RydWN0IGFybV9wbXUgKmFybV9wbXUgPSBrdm0tXHUwMDNlYXJjaC5hcm1fcG11O1xuIFxuJiM0MztcdGlmIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBVbmRlciBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NUUklDVCBubyBQTVUgZXhpc3RzIHVudGlsIHVzZXJzcGFjZSBzZXRzXG4gXHQgKiBvbmUsIHNvIHRoaXMgY2FuIGJlIHJlYWNoZWQgYmVmb3JlIGFybV9wbXUgaXMgc2V0LiBSZXBvcnQgbm9cbkBAIC0xMDM1LDMwICYjNDM7MTEwMiwxMiBAQCB1OCBrdm1fYXJtX3BtdV9nZXRfbWF4X2NvdW50ZXJzKHN0cnVjdCBrdm0gKmt2bSlcbiBcdHJldHVybiBiaXRtYXBfd2VpZ2h0KGFybV9wbXUtXHUwMDNlY250cl9tYXNrLCBBUk1WOF9QTVVfTUFYX0dFTkVSQUxfQ09VTlRFUlMpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBrdm1fYXJtX3NldF9ucl9jb3VudGVycyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBucilcbi17XG4tXHRrdm0tXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnMgPSBucjtcbi1cbi1cdC8qIFJlc2V0IE1EQ1JfRUwyLkhQTU4gYmVoaW5kIHRoZSB2Y3B1cyYjMzk7IGJhY2suLi4gKi9cbi1cdGlmICh0ZXN0X2JpdChLVk1fQVJNX1ZDUFVfSEFTX0VMMiwga3ZtLVx1MDAzZWFyY2gudmNwdV9mZWF0dXJlcykpIHtcbi1cdFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuLVx0XHR1bnNpZ25lZCBsb25nIGk7XG4tXG4tXHRcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkge1xuLVx0XHRcdHU2NCB2YWwgPSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBNRENSX0VMMik7XG4tXHRcdFx0dmFsIFx1MDAyNj0gfk1EQ1JfRUwyX0hQTU47XG4tXHRcdFx0dmFsIHw9IEZJRUxEX1BSRVAoTURDUl9FTDJfSFBNTiwga3ZtLVx1MDAzZWFyY2gubnJfcG11X2NvdW50ZXJzKTtcbi1cdFx0XHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgTURDUl9FTDIsIHZhbCk7XG4tXHRcdH1cbi1cdH1cbi19XG4tXG4gc3RhdGljIHZvaWQga3ZtX2FybV9zZXRfcG11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGFybV9wbXUgKmFybV9wbXUpXG4ge1xuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4gXG4gXHRrdm0tXHUwMDNlYXJjaC5hcm1fcG11ID0gYXJtX3BtdTtcbi1cdGt2bV9hcm1fc2V0X25yX2NvdW50ZXJzKGt2bSwga3ZtX2FybV9wbXVfZ2V0X21heF9jb3VudGVycyhrdm0pKTtcbiYjNDM7XHRrdm0tXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnMgPSBrdm1fYXJtX3BtdV9nZXRfbWF4X2NvdW50ZXJzKGt2bSk7XG4gfVxuIFxuIC8qKlxuQEAgLTEwNzYsNyAmIzQzOzExMjUsMjQgQEAgc3RhdGljIHZvaWQga3ZtX2FybV9zZXRfcG11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGFybV9wbXUgKmFybV9wbXUpXG4gICovXG4gaW50IGt2bV9hcm1fc2V0X2RlZmF1bHRfcG11KHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4tXHRzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IGt2bV9wbXVfcHJvYmVfYXJtcG11KCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJdCBpcyBzYWZlIHRvIHVzZSBhIHN0YWxlIGNwdSB0byBpdGVyYXRlIHRoZSBsaXN0IG9mIFBNVXMgc28gbG9uZyBhc1xuJiM0MztcdCAqIHRoZSBzYW1lIHZhbHVlIGlzIHVzZWQgZm9yIHRoZSBlbnRpcmV0eSBvZiB0aGUgbG9vcC4gR2l2ZW4gdGhpcywgYW5kXG4mIzQzO1x0ICogdGhlIGZhY3QgdGhhdCBubyBwZXJjcHUgZGF0YSBpcyB1c2VkIGZvciB0aGUgbG9va3VwIHRoZXJlIGlzIG5vIG5lZWRcbiYjNDM7XHQgKiB0byBkaXNhYmxlIHByZWVtcHRpb24uXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBJdCBpcyBzdGlsbCBuZWNlc3NhcnkgdG8gZ2V0IGEgdmFsaWQgY3B1LCB0aG91Z2gsIHRvIHByb2JlIGZvciB0aGVcbiYjNDM7XHQgKiBkZWZhdWx0IFBNVSBpbnN0YW5jZSBhcyB1c2Vyc3BhY2UgaXMgbm90IHJlcXVpcmVkIHRvIHNwZWNpZnkgYSBQTVVcbiYjNDM7XHQgKiB0eXBlLiBJbiBvcmRlciB0byB1cGhvbGQgdGhlIHByZWV4aXN0aW5nIGJlaGF2aW9yIEtWTSBzZWxlY3RzIHRoZVxuJiM0MztcdCAqIFBNVSBpbnN0YW5jZSBmb3IgdGhlIGNvcmUgZHVyaW5nIHZjcHUgaW5pdC4gQSBkZXBlbmRlbnQgdXNlXG4mIzQzO1x0ICogY2FzZSB3b3VsZCBiZSBhIHVzZXIgd2l0aCBkaXNkYWluIG9mIGFsbCB0aGluZ3MgYmlnLkxJVFRMRSB0aGF0XG4mIzQzO1x0ICogYWZmaW5lcyB0aGUgVk1NIHRvIGEgcGFydGljdWxhciBjbHVzdGVyIG9mIGNvcmVzLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogSW4gYW55IGNhc2UsIHVzZXJzcGFjZSBzaG91bGQganVzdCBkbyB0aGUgc2FuZSB0aGluZyBhbmQgdXNlIHRoZSBVQVBJXG4mIzQzO1x0ICogdG8gc2VsZWN0IGEgUE1VIHR5cGUgZGlyZWN0bHksIG9yIHJlcXVlc3QgZml4ZWQtY291bnRlcnMtb25seVxuJiM0MztcdCAqIGVtdWxhdGlvbi4gQnV0LCBiZSB3YXJ5IG9mIHRoZSBiYWdnYWdlIGJlaW5nIGNhcnJpZWQgaGVyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IGt2bV9wbXVfcHJvYmVfYXJtcG11KHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpO1xuIFxuIFx0aWYgKCFhcm1fcG11KVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbkBAIC0xMDkzLDE3ICYjNDM7MTE1OSwxOSBAQCBzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcG11X2lkKVxuIFx0aW50IHJldCA9IC1FTlhJTztcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuLVx0bXV0ZXhfbG9jayhcdTAwMjZhcm1fcG11c19sb2NrKTtcbiYjNDM7XHRndWFyZChyY3UpKCk7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcdTAwMjZhcm1fcG11cywgZW50cnkpIHtcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbnRyeSwgXHUwMDI2YXJtX3BtdXMsIGVudHJ5KSB7XG4gXHRcdGFybV9wbXUgPSBlbnRyeS1cdTAwM2Vhcm1fcG11O1xuIFx0XHRpZiAoYXJtX3BtdS1cdTAwM2VwbXUudHlwZSA9PSBwbXVfaWQpIHtcbiBcdFx0XHRpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pIHx8XG4mIzQzO1x0XHRcdCAgICBrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSB8fFxuIFx0XHRcdCAgICAoa3ZtLVx1MDAzZWFyY2gucG11X2ZpbHRlciBcdTAwMjZcdTAwMjYga3ZtLVx1MDAzZWFyY2guYXJtX3BtdSAhPSBhcm1fcG11KSkge1xuIFx0XHRcdFx0cmV0ID0gLUVCVVNZO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFxuJiM0MztcdFx0XHRzZXRfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0VYUExJQ0lULCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5mbGFncyk7XG4gXHRcdFx0a3ZtX2FybV9zZXRfcG11KGt2bSwgYXJtX3BtdSk7XG4gXHRcdFx0Y3B1bWFza19jb3B5KGt2bS1cdTAwM2VhcmNoLnN1cHBvcnRlZF9jcHVzLCBcdTAwMjZhcm1fcG11LVx1MDAzZXN1cHBvcnRlZF9jcHVzKTtcbiBcbkBAIC0xMTIyLDIxICYjNDM7MTE5MCwzOSBAQCBzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcG11X2lkKVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRtdXRleF91bmxvY2soXHUwMDI2YXJtX3BtdXNfbG9jayk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pIHx8IGt2bS1cdTAwM2VhcmNoLnBtdV9maWx0ZXIgfHxcbiYjNDM7XHQgICAgdGVzdF9iaXQoS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRVhQTElDSVQsIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmZsYWdzKSlcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdHNldF9iaXQoS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgXHUwMDI2a3ZtLVx1MDAzZWFyY2guZmxhZ3MpO1xuJiM0MztcdGt2bS1cdTAwM2VhcmNoLm5yX3BtdV9jb3VudGVycyA9IDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X25yX2NvdW50ZXJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IG4pXG4ge1xuIFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4gXG4mIzQzO1x0aWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSlcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuIFx0aWYgKCFrdm0tXHUwMDNlYXJjaC5hcm1fcG11KVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGlmIChuIFx1MDAzZSBrdm1fYXJtX3BtdV9nZXRfbWF4X2NvdW50ZXJzKGt2bSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0a3ZtX2FybV9zZXRfbnJfY291bnRlcnMoa3ZtLCBuKTtcbiYjNDM7XHRrdm0tXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnMgPSBuO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTEyMDAsNyAmIzQzOzEyODYsNyBAQCBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuIFx0XHQgICAgIGZpbHRlci5hY3Rpb24gIT0gS1ZNX1BNVV9FVkVOVF9ERU5ZKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdFx0aWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSlcbiYjNDM7XHRcdGlmIChrdm1fdm1faGFzX3Jhbl9vbmNlKGt2bSkgfHwga3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KGt2bSkpXG4gXHRcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbiBcdFx0aWYgKCFrdm0tXHUwMDNlYXJjaC5hcm1fcG11KVxuQEAgLTEyNDgsNiAmIzQzOzEzMzQsOCBAQCBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuIFxuIFx0XHRyZXR1cm4ga3ZtX2FybV9wbXVfdjNfc2V0X25yX2NvdW50ZXJzKHZjcHUsIG4pO1xuIFx0fVxuJiM0MztcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOlxuJiM0MztcdFx0cmV0dXJuIGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1KTtcbiBcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklUOlxuIFx0XHRyZXR1cm4ga3ZtX2FybV9wbXVfdjNfaW5pdCh2Y3B1KTtcbiBcdH1cbkBAIC0xMjc0LDYgJiM0MzsxMzYyLDkgQEAgaW50IGt2bV9hcm1fcG11X3YzX2dldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbiBcdFx0aXJxID0gdmNwdS1cdTAwM2VhcmNoLnBtdS5pcnFfbnVtO1xuIFx0XHRyZXR1cm4gcHV0X3VzZXIoaXJxLCB1YWRkcik7XG4gXHR9XG4mIzQzO1x0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFk6XG4mIzQzO1x0XHRpZiAoa3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXHUwMDNla3ZtKSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4gXHRyZXR1cm4gLUVOWElPO1xuQEAgLTEyODcsNiAmIzQzOzEzNzgsNyBAQCBpbnQga3ZtX2FybV9wbXVfdjNfaGFzX2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuIFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJTFRFUjpcbiBcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VOlxuIFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9OUl9DT1VOVEVSUzpcbiYjNDM7XHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWTpcbiBcdFx0aWYgKGt2bV92Y3B1X2hhc19wbXUodmNwdSkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vcmVzZXQuYyBiL2FyY2gvYXJtNjQva3ZtL3Jlc2V0LmNcbmluZGV4IDEwZWI3MjQ5YWE5ZTguLmNkY2RlYTg1MDkwOWMgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9yZXNldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9yZXNldC5jXG5AQCAtMTc4LDE3ICYjNDM7MTc4LDI0IEBAIHN0YXRpYyB2b2lkIGt2bV92Y3B1X3Jlc2V0X3N2ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gdm9pZCBrdm1fcmVzZXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHZjcHVfcmVzZXRfc3RhdGUgcmVzZXRfc3RhdGU7XG4tXHRib29sIGxvYWRlZDtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnJ1bm5pbmc7XG4mIzQzO1x0Ym9vbCBsb2FkZWQgPSBmYWxzZTtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gubXBfc3RhdGVfbG9jayk7XG4gXHRyZXNldF9zdGF0ZSA9IHZjcHUtXHUwMDNlYXJjaC5yZXNldF9zdGF0ZTtcbiBcdHZjcHUtXHUwMDNlYXJjaC5yZXNldF9zdGF0ZS5yZXNldCA9IGZhbHNlO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2VhcmNoLm1wX3N0YXRlX2xvY2spO1xuIFxuLVx0cHJlZW1wdF9kaXNhYmxlKCk7XG4tXHRsb2FkZWQgPSAodmNwdS1cdTAwM2VjcHUgIT0gLTEpO1xuLVx0aWYgKGxvYWRlZClcbiYjNDM7XHRndWFyZChwcmVlbXB0KSgpO1xuJiM0MztcbiYjNDM7XHRydW5uaW5nID0ga3ZtX2dldF9ydW5uaW5nX3ZjcHUoKTtcbiYjNDM7XHRpZiAocnVubmluZykge1xuJiM0MztcdFx0aWYgKEtWTV9CVUdfT04ocnVubmluZyAhPSB2Y3B1LCB2Y3B1LVx1MDAzZWt2bSkpXG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0XHRsb2FkZWQgPSB0cnVlO1xuIFx0XHRrdm1fYXJjaF92Y3B1X3B1dCh2Y3B1KTtcbiYjNDM7XHR9XG4gXG4gXHRpZiAoIWt2bV9hcm1fdmNwdV9zdmVfZmluYWxpemVkKHZjcHUpKSB7XG4gXHRcdGlmICh2Y3B1X2hhc19mZWF0dXJlKHZjcHUsIEtWTV9BUk1fVkNQVV9TVkUpKVxuQEAgLTIxNSw3ICYjNDM7MjIyLDYgQEAgdm9pZCBrdm1fcmVzZXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRpZiAobG9hZGVkKVxuIFx0XHRrdm1fYXJjaF92Y3B1X2xvYWQodmNwdSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTtcbi1cdHByZWVtcHRfZW5hYmxlKCk7XG4gfVxuIFxuIHUzMiBrdm1fZ2V0X3BhX2JpdHMoc3RydWN0IGt2bSAqa3ZtKVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jXG5pbmRleCA0NGFhZTUyYzQ3M2Q3Li5hNWMxMjE0ODJjNzEzIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuY1xuQEAgLTEzMjYsNyAmIzQzOzEzMjYsNyBAQCBzdGF0aWMgYm9vbCBhY2Nlc3NfcG11X2V2dHlwZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsXG4gXG4gc3RhdGljIGludCBzZXRfcG1yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyLCB1NjQgdmFsKVxuIHtcbi1cdHU2NCBtYXNrID0ga3ZtX3BtdV9hY2Nlc3NpYmxlX2NvdW50ZXJfbWFzayh2Y3B1KTtcbiYjNDM7XHR1NjQgbWFzayA9IGt2bV9wbXVfaW1wbGVtZW50ZWRfY291bnRlcl9tYXNrKHZjcHUpO1xuIFxuIFx0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIHItXHUwMDNlcmVnLCB2YWwgXHUwMDI2IG1hc2spO1xuIFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFTE9BRF9QTVUsIHZjcHUpO1xuQEAgLTEzMzQsOSAmIzQzOzEzMzQsMTggQEAgc3RhdGljIGludCBzZXRfcG1yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyLCB1NjQgdmFcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBzZXRfcG11X2V2dHlwZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuJiM0MztcdFx0XHQgICBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyLCB1NjQgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIHItXHUwMDNlcmVnLCB2YWwpO1xuJiM0MztcdGt2bV9wbXVfcmVxdWVzdF9yZWNyZWF0ZSh2Y3B1KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBnZXRfcG1yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyLCB1NjQgKnZhbClcbiB7XG4tXHR1NjQgbWFzayA9IGt2bV9wbXVfYWNjZXNzaWJsZV9jb3VudGVyX21hc2sodmNwdSk7XG4mIzQzO1x0dTY0IG1hc2sgPSBrdm1fcG11X2ltcGxlbWVudGVkX2NvdW50ZXJfbWFzayh2Y3B1KTtcbiBcbiBcdCp2YWwgPSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCByLVx1MDAzZXJlZykgXHUwMDI2IG1hc2s7XG4gXHRyZXR1cm4gMDtcbkBAIC0xNTE3LDYgJiM0MzsxNTI2LDcgQEAgc3RhdGljIGludCBzZXRfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnIsXG4ge1xuIFx0dTggbmV3X24gPSBGSUVMRF9HRVQoQVJNVjhfUE1VX1BNQ1JfTiwgdmFsKTtcbiBcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuJiM0MztcdHU2NCBvbGQgPSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCByLVx1MDAzZXJlZyk7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiBcbkBAIC0xNTQ5LDcgJiM0MzsxNTU5LDcgQEAgc3RhdGljIGludCBzZXRfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnIsXG4gXHRcdHZhbCB8PSBBUk1WOF9QTVVfUE1DUl9MQztcbiBcbiBcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCByLVx1MDAzZXJlZywgdmFsKTtcbi1cdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUxPQURfUE1VLCB2Y3B1KTtcbiYjNDM7XHRrdm1fcG11X2FwcGx5X3BtY3IodmNwdSwgb2xkLCB2YWwsIHRydWUpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTE1ODMsNyAmIzQzOzE1OTMsNyBAQCBzdGF0aWMgaW50IHNldF9wbWNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcixcbiAvKiBNYWNybyB0byBleHBhbmQgdGhlIFBNRVZUWVBFUm5fRUwwIHJlZ2lzdGVyICovXG4gI2RlZmluZSBQTVVfUE1FVlRZUEVSX0VMMChuKVx0XHRcdFx0XHRcdFxcXG4gXHR7IFBNVV9TWVNfUkVHKFBNRVZUWVBFUm5fRUwwKG4pKSxcdFx0XHRcdFxcXG4tXHQgIC5yZXNldCA9IHJlc2V0X3BtZXZ0eXBlcixcdFx0XHRcdFx0XFxcbiYjNDM7XHQgIC5yZXNldCA9IHJlc2V0X3BtZXZ0eXBlciwgLnNldF91c2VyID0gc2V0X3BtdV9ldnR5cGVyLFx0XFxcbiBcdCAgLmFjY2VzcyA9IGFjY2Vzc19wbXVfZXZ0eXBlciwgLnJlZyA9IChQTUVWVFlQRVIwX0VMMCAmIzQzOyBuKSwgfVxuIFxuIC8qIE1hY3JvIHRvIGV4cGFuZCB0aGUgQU1VIGNvdW50ZXIgYW5kIHR5cGUgcmVnaXN0ZXJzKi9cbkBAIC0zMTE0LDE3ICYjNDM7MzEyNCwyMiBAQCBzdGF0aWMgYm9vbCBhY2Nlc3NfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHR9XG4gXG4gXHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgTURDUl9FTDIsIHZhbCk7XG4tXG4tXHQvKlxuLVx0ICogUmVxdWVzdCBhIHJlbG9hZCBvZiB0aGUgUE1VIHRvIGVuYWJsZS9kaXNhYmxlIHRoZSBjb3VudGVyc1xuLVx0ICogYWZmZWN0ZWQgYnkgSFBNRS5cbi1cdCAqL1xuLVx0aWYgKChvbGQgXiB2YWwpIFx1MDAyNiBNRENSX0VMMl9IUE1FKVxuLVx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XG4mIzQzO1x0a3ZtX3BtdV9hcHBseV9tZGNyKHZjcHUsIG9sZCwgdmFsKTtcbiBcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBzZXRfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkLFxuJiM0MztcdFx0ICAgIHU2NCB2YWwpXG4mIzQzO3tcbiYjNDM7XHR1NjQgb2xkID0gX192Y3B1X3N5c19yZWcodmNwdSwgTURDUl9FTDIpO1xuJiM0MztcbiYjNDM7XHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgTURDUl9FTDIsIHZhbCk7XG4mIzQzO1x0a3ZtX3BtdV9hcHBseV9tZGNyKHZjcHUsIG9sZCwgdmFsKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgYWNjZXNzX3JhcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdCAgICAgICBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsXG4gXHRcdCAgICAgICBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyKVxuQEAgLTM4MjcsNyAmIzQzOzM4NDIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyBzeXNfcmVnX2Rlc2NzW10gPSB7XG4gXHQgKiBpbiAzMmJpdCBtb2RlLiBIZXJlIHdlIGNob29zZSB0byByZXNldCBpdCBhcyB6ZXJvIGZvciBjb25zaXN0ZW5jeS5cbiBcdCAqL1xuIFx0eyBQTVVfU1lTX1JFRyhQTUNDRklMVFJfRUwwKSwgLmFjY2VzcyA9IGFjY2Vzc19wbXVfZXZ0eXBlcixcbi1cdCAgLnJlc2V0ID0gcmVzZXRfdmFsLCAucmVnID0gUE1DQ0ZJTFRSX0VMMCwgLnZhbCA9IDAgfSxcbiYjNDM7XHQgIC5yZXNldCA9IHJlc2V0X3ZhbCwgLnJlZyA9IFBNQ0NGSUxUUl9FTDAsIC52YWwgPSAwLFxuJiM0MztcdCAgLnNldF91c2VyID0gc2V0X3BtdV9ldnR5cGVyIH0sXG4gXG4gXHRFTDJfUkVHX1ZOQ1IoVlBJRFJfRUwyLCByZXNldF91bmtub3duLCAwKSxcbiBcdEVMMl9SRUdfVk5DUihWTVBJRFJfRUwyLCByZXNldF91bmtub3duLCAwKSxcbkBAIC0zODM2LDcgJiM0MzszODUyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2Mgc3lzX3JlZ19kZXNjc1tdID0ge1xuIFx0RUwyX1JFR19GSUxURVJFRChTQ1RMUjJfRUwyLCBhY2Nlc3Nfdm1fcmVnLCByZXNldF92YWwsIDAsXG4gXHRcdFx0IHNjdGxyMl9lbDJfdmlzaWJpbGl0eSksXG4gXHRFTDJfUkVHX1ZOQ1IoSENSX0VMMiwgcmVzZXRfaGNyLCAwKSxcbi1cdEVMMl9SRUcoTURDUl9FTDIsIGFjY2Vzc19tZGNyLCByZXNldF9tZGNyLCAwKSxcbiYjNDM7XHRTWVNfUkVHX1VTRVJfRklMVEVSKE1EQ1JfRUwyLCBhY2Nlc3NfbWRjciwgcmVzZXRfbWRjciwgMCxcbiYjNDM7XHRcdFx0ICAgIE5VTEwsIHNldF9tZGNyLCBlbDJfdmlzaWJpbGl0eSksXG4gXHRFTDJfUkVHKENQVFJfRUwyLCBhY2Nlc3NfcncsIHJlc2V0X3ZhbCwgQ1BUUl9OVkhFX0VMMl9SRVMxKSxcbiBcdEVMMl9SRUdfVk5DUihIU1RSX0VMMiwgcmVzZXRfdmFsLCAwKSxcbiBcdEVMMl9SRUdfVk5DUl9GSUxUKEhGR1JUUl9FTDIsIGZndF92aXNpYmlsaXR5KSxcbkBAIC01MzkwLDcgJiM0Mzs1NDA3LDcgQEAgdm9pZCBrdm1fcmVzZXRfc3lzX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0c2V0X2JpdChLVk1fQVJDSF9GTEFHX0lEX1JFR1NfSU5JVElBTElaRUQsIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmZsYWdzKTtcbiBcbiBcdGlmIChrdm1fdmNwdV9oYXNfcG11KHZjcHUpKVxuLVx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XG4mIzQzO1x0XHRrdm1fcG11X3JlcXVlc3RfcmVjcmVhdGUodmNwdSk7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUva3ZtL2FybV9wbXUuaCBiL2luY2x1ZGUva3ZtL2FybV9wbXUuaFxuaW5kZXggNmI0YTExOGQxN2NhOS4uMTdiODYxZWQxNzFkNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUva3ZtL2FybV9wbXUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9rdm0vYXJtX3BtdS5oXG5AQCAtMzIsNiAmIzQzOzMyLDcgQEAgc3RydWN0IGt2bV9wbXUge1xuIFx0c3RydWN0IGt2bV9wbWMgcG1jW0tWTV9BUk1WOF9QTVVfTUFYX0NPVU5URVJTXTtcbiBcdGludCBpcnFfbnVtO1xuIFx0Ym9vbCBjcmVhdGVkO1xuJiM0MztcdGJvb2wgZXZlbnRzX25lZWRfcmVjcmVhdGU7XG4gfTtcbiBcbiBzdHJ1Y3QgYXJtX3BtdV9lbnRyeSB7XG5AQCAtNTUsOSAmIzQzOzU2LDEzIEBAIHZvaWQga3ZtX3BtdV9zeW5jX2h3c3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBib29sIGt2bV9wbXVfc2hvdWxkX25vdGlmeV91c2VyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gYm9vbCBrdm1fcG11X3VwZGF0ZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIGt2bV9wbXVfc29mdHdhcmVfaW5jcmVtZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhbCk7XG4mIzQzO3ZvaWQga3ZtX3BtdV9yZXF1ZXN0X3JlY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4mIzQzO3ZvaWQga3ZtX3BtdV9hcHBseV9wbWNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9sZCwgdTY0IHZhbCwgYm9vbCBmb3JjZV9yZWxvYWQpO1xuIHZvaWQga3ZtX3BtdV9oYW5kbGVfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpO1xuJiM0Mzt2b2lkIGt2bV9wbXVfYXBwbHlfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBvbGQsIHU2NCB2YWwpO1xuIHZvaWQga3ZtX3BtdV9zZXRfY291bnRlcl9ldmVudF90eXBlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEsXG4gXHRcdFx0XHQgICAgdTY0IHNlbGVjdF9pZHgpO1xuJiM0Mzt2b2lkIGt2bV92Y3B1X2xvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGxhc3RfY3B1KTtcbiB2b2lkIGt2bV92Y3B1X3JlbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKTtcbkBAIC0xMzUsNyAmIzQzOzE0MCwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3BtdV9zaG91bGRfbm90aWZ5X3VzZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIH1cbiBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3BtdV91cGRhdGVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkgeyByZXR1cm4gZmFsc2U7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3BtdV9zb2Z0d2FyZV9pbmNyZW1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKSB7fVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3BtdV9yZXF1ZXN0X3JlY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge31cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGt2bV9wbXVfYXBwbHlfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBvbGQsIHU2NCB2YWwsIGJvb2wgZm9yY2VfcmVsb2FkKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X2hhbmRsZV9wbWNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhbCkge31cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGt2bV9wbXVfYXBwbHlfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBvbGQsIHU2NCB2YWwpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV9wbXVfc2V0X2NvdW50ZXJfZXZlbnRfdHlwZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0XHRcdFx0ICB1NjQgZGF0YSwgdTY0IHNlbGVjdF9pZHgpIHt9XG4gc3RhdGljIGlubGluZSBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuQEAgLTE2Nyw2ICYjNDM7MTc1LDcgQEAgc3RhdGljIGlubGluZSB1NjQga3ZtX3BtdV9nZXRfcG1jZWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBwbWNlaWQxKVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X3VwZGF0ZV92Y3B1X2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X3BtdV9yZXN0b3JlX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge31cbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfcG11X3Jlc3RvcmVfaG9zdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdmNwdV9sb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBsYXN0X2NwdSkge31cbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfcmVsb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9XG4gc3RhdGljIGlubGluZSB1OCBrdm1fYXJtX3BtdV9nZXRfcG11dmVyX2xpbWl0KHZvaWQpXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL3Rvb2xzL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuaW5kZXggMWMxM2JmYTJkMzhhYS4uMzlhMWExZTQxMmU2NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG5AQCAtNDM3LDYgJiM0Mzs0MzcsNyBAQCBlbnVtIHtcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVJcdFx0MlxuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9QTVVcdFx0M1xuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9OUl9DT1VOVEVSU1x0NFxuJiM0MzsjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZXHQ1XG4gI2RlZmluZSBLVk1fQVJNX1ZDUFVfVElNRVJfQ1RSTFx0XHQxXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9USU1FUl9JUlFfVlRJTUVSXHRcdDBcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1RJTUVSX0lSUV9QVElNRVJcdFx0MVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvbGludXgvYml0ZmllbGQuaCBiL3Rvb2xzL2luY2x1ZGUvbGludXgvYml0ZmllbGQuaFxuaW5kZXggZGRmODFmMjQ5NTZiYS4uMWM2MzMzNDNkNTc2NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvbGludXgvYml0ZmllbGQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvaW5jbHVkZS9saW51eC9iaXRmaWVsZC5oXG5AQCAtMTQyLDMyICYjNDM7MTQyLDMyIEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTY0IGZpZWxkX21hc2sodTY0IGZpZWxkKVxuIFx0cmV0dXJuIGZpZWxkIC8gZmllbGRfbXVsdGlwbGllcihmaWVsZCk7XG4gfVxuICNkZWZpbmUgZmllbGRfbWF4KGZpZWxkKVx0KCh0eXBlb2YoZmllbGQpKWZpZWxkX21hc2soZmllbGQpKVxuLSNkZWZpbmUgX19fX01BS0VfT1AodHlwZSxiYXNlLHRvLGZyb20pXHRcdFx0XHRcdFxcXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSBfXyMjdHlwZSB0eXBlIyNfZW5jb2RlX2JpdHMoYmFzZSB2LCBiYXNlIGZpZWxkKVx0XFxcbiYjNDM7I2RlZmluZSBfX19fTUFLRV9PUChuYW1lLHR5cGUsYmFzZSx0byxmcm9tKVx0XHRcdFx0XFxcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB0eXBlIG5hbWUjI19lbmNvZGVfYml0cyhiYXNlIHYsIGJhc2UgZmllbGQpXHRcXFxuIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0aWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHYpIFx1MDAyNlx1MDAyNiAodiBcdTAwMjYgfmZpZWxkX21hc2soZmllbGQpKSlcdFxcXG4gXHRcdF9fZmllbGRfb3ZlcmZsb3coKTtcdFx0XHRcdFx0XFxcbiBcdHJldHVybiB0bygodiBcdTAwMjYgZmllbGRfbWFzayhmaWVsZCkpICogZmllbGRfbXVsdGlwbGllcihmaWVsZCkpO1x0XFxcbiB9XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIF9fIyN0eXBlIHR5cGUjI19yZXBsYWNlX2JpdHMoX18jI3R5cGUgb2xkLFx0XFxcbi1cdFx0XHRcdFx0YmFzZSB2YWwsIGJhc2UgZmllbGQpXHRcdFxcXG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdHlwZSBuYW1lIyNfcmVwbGFjZV9iaXRzKHR5cGUgb2xkLFx0XHRcXFxuJiM0MztcdFx0XHRcdFx0XHRiYXNlIHZhbCwgYmFzZSBmaWVsZClcdFxcXG4ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4tXHRyZXR1cm4gKG9sZCBcdTAwMjYgfnRvKGZpZWxkKSkgfCB0eXBlIyNfZW5jb2RlX2JpdHModmFsLCBmaWVsZCk7XHRcXFxuJiM0MztcdHJldHVybiAob2xkIFx1MDAyNiB+dG8oZmllbGQpKSB8IG5hbWUjI19lbmNvZGVfYml0cyh2YWwsIGZpZWxkKTtcdFxcXG4gfVx0XHRcdFx0XHRcdFx0XHRcdFxcXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHR5cGUjI3BfcmVwbGFjZV9iaXRzKF9fIyN0eXBlICpwLFx0XHRcXFxuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbmFtZSMjcF9yZXBsYWNlX2JpdHModHlwZSAqcCxcdFx0XFxcbiBcdFx0XHRcdFx0YmFzZSB2YWwsIGJhc2UgZmllbGQpXHRcdFxcXG4ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4tXHQqcCA9ICgqcCBcdTAwMjYgfnRvKGZpZWxkKSkgfCB0eXBlIyNfZW5jb2RlX2JpdHModmFsLCBmaWVsZCk7XHRcXFxuJiM0MztcdCpwID0gKCpwIFx1MDAyNiB+dG8oZmllbGQpKSB8IG5hbWUjI19lbmNvZGVfYml0cyh2YWwsIGZpZWxkKTtcdFxcXG4gfVx0XHRcdFx0XHRcdFx0XHRcdFxcXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSBiYXNlIHR5cGUjI19nZXRfYml0cyhfXyMjdHlwZSB2LCBiYXNlIGZpZWxkKVx0XFxcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBiYXNlIG5hbWUjI19nZXRfYml0cyh0eXBlIHYsIGJhc2UgZmllbGQpXHRcXFxuIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0cmV0dXJuIChmcm9tKHYpIFx1MDAyNiBmaWVsZCkvZmllbGRfbXVsdGlwbGllcihmaWVsZCk7XHRcdFxcXG4gfVxuLSNkZWZpbmUgX19NQUtFX09QKHNpemUpXHRcdFx0XHRcdFx0XHRcXFxuLVx0X19fX01BS0VfT1AobGUjI3NpemUsdSMjc2l6ZSxjcHVfdG9fbGUjI3NpemUsbGUjI3NpemUjI190b19jcHUpXHRcXFxuLVx0X19fX01BS0VfT1AoYmUjI3NpemUsdSMjc2l6ZSxjcHVfdG9fYmUjI3NpemUsYmUjI3NpemUjI190b19jcHUpXHRcXFxuLVx0X19fX01BS0VfT1AodSMjc2l6ZSx1IyNzaXplLCwpXG4tX19fX01BS0VfT1AodTgsdTgsLClcbiYjNDM7I2RlZmluZSBfX01BS0VfT1Aoc2l6ZSlcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdF9fX19NQUtFX09QKGxlIyNzaXplLF9fbGUjI3NpemUsdSMjc2l6ZSxjcHVfdG9fbGUjI3NpemUsbGUjI3NpemUjI190b19jcHUpXHRcXFxuJiM0MztcdF9fX19NQUtFX09QKGJlIyNzaXplLF9fYmUjI3NpemUsdSMjc2l6ZSxjcHVfdG9fYmUjI3NpemUsYmUjI3NpemUjI190b19jcHUpXHRcXFxuJiM0MztcdF9fX19NQUtFX09QKHUjI3NpemUsdSMjc2l6ZSx1IyNzaXplLCwpXG4mIzQzO19fX19NQUtFX09QKHU4LHU4LHU4LCwpXG4gX19NQUtFX09QKDE2KVxuIF9fTUFLRV9PUCgzMilcbiBfX01BS0VfT1AoNjQpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmNcbmluZGV4IDIyMjIzMzk1OTY5ZTAuLjYzNzY1M2Y3YTI1YjkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jXG5AQCAtMjUsNiAmIzQzOzI1LDE0IEBAXG4gLyogVGhlIGN5Y2xlIGNvdW50ZXIgYml0IHBvc2l0aW9uIHRoYXQmIzM5O3MgY29tbW9uIGFtb25nIHRoZSBQTVUgcmVnaXN0ZXJzICovXG4gI2RlZmluZSBBUk1WOF9QTVVfQ1lDTEVfSURYXHRcdDMxXG4gXG4mIzQzOyNpZm5kZWYgTURDUl9FTDJfSFBNTlxuJiM0MzsjZGVmaW5lIE1EQ1JfRUwyX0hQTU5cdFx0XHRHRU5NQVNLX1VMTCg0LCAwKVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNpZm5kZWYgTURDUl9FTDJfSFBNRVxuJiM0MzsjZGVmaW5lIE1EQ1JfRUwyX0hQTUVcdFx0XHRCSVRfVUxMKDcpXG4mIzQzOyNlbmRpZlxuJiM0MztcbiBzdHJ1Y3QgdnBtdV92bSB7XG4gXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbkBAIC00MDMsMTIgJiM0Mzs0MTEsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfdnBtdV92bSh2b2lkICpndWVzdF9jb2RlKVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdV9pbml0IGluaXQ7XG4gXHR1OCBwbXV2ZXIsIGVjO1xuLVx0dTY0IGRmcjAsIGlycSA9IDIzO1xuLVx0c3RydWN0IGt2bV9kZXZpY2VfYXR0ciBpcnFfYXR0ciA9IHtcbi1cdFx0Lmdyb3VwID0gS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuLVx0XHQuYXR0ciA9IEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLFxuLVx0XHQuYWRkciA9ICh1NjQpXHUwMDI2aXJxLFxuLVx0fTtcbiYjNDM7XHR1NjQgZGZyMDtcbiBcbiBcdC8qIFRoZSB0ZXN0IGNyZWF0ZXMgdGhlIHZwbXVfdm0gbXVsdGlwbGUgdGltZXMuIEVuc3VyZSBhIGNsZWFuIHN0YXRlICovXG4gXHRtZW1zZXQoXHUwMDI2dnBtdV92bSwgMCwgc2l6ZW9mKHZwbXVfdm0pKTtcbkBAIC00MzQsOCAmIzQzOzQzNyw2IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZV92cG11X3ZtKHZvaWQgKmd1ZXN0X2NvZGUpXG4gXHRURVNUX0FTU0VSVChwbXV2ZXIgIT0gSURfQUE2NERGUjBfRUwxX1BNVVZlcl9JTVBfREVGIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgcG11dmVyIFx1MDAzZT0gSURfQUE2NERGUjBfRUwxX1BNVVZlcl9JTVAsXG4gXHRcdCAgICBcJiMzNDtVbmV4cGVjdGVkIFBNVVZFUiAoMHgleCkgb24gdGhlIHZDUFUgd2l0aCBQTVV2M1wmIzM0OywgcG11dmVyKTtcbi1cbi1cdHZjcHVfaW9jdGwodnBtdV92bS52Y3B1LCBLVk1fU0VUX0RFVklDRV9BVFRSLCBcdTAwMjZpcnFfYXR0cik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGRlc3Ryb3lfdnBtdV92bSh2b2lkKVxuQEAgLTQ0MywxMSAmIzQzOzQ0NCwxMCBAQCBzdGF0aWMgdm9pZCBkZXN0cm95X3ZwbXVfdm0odm9pZClcbiBcdGt2bV92bV9mcmVlKHZwbXVfdm0udm0pO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBwbWNyX24pXG4mIzQzO3N0YXRpYyB2b2lkIHJ1bl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3QgdWNhbGwgdWM7XG4gXG4tXHR2Y3B1X2FyZ3Nfc2V0KHZjcHUsIDEsIHBtY3Jfbik7XG4gXHR2Y3B1X3J1bih2Y3B1KTtcbiBcdHN3aXRjaCAoZ2V0X3VjYWxsKHZjcHUsIFx1MDAyNnVjKSkge1xuIFx0Y2FzZSBVQ0FMTF9BQk9SVDpcbkBAIC00NjEsMTUgJiM0Mzs0NjEsMTcgQEAgc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcG1jcl9uKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnModW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sIGV4cGVjdF9mYWlsKVxuJiM0MztzdGF0aWMgdm9pZCBndWVzdF9jb2RlX2RvbmUodm9pZClcbiYjNDM7e1xuJiM0MztcdEdVRVNUX0RPTkUoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgc2V0X25yX2NvdW50ZXJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiYjNDM7XHRcdFx0ICAgIHVuc2lnbmVkIGludCBucl9jb3VudGVycywgYm9vbCBleHBlY3RfZmFpbClcbiB7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4gXHR1bnNpZ25lZCBpbnQgcHJldjtcbiBcdGludCByZXQ7XG4gXG4tXHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcbi1cdHZjcHUgPSB2cG11X3ZtLnZjcHU7XG4tXG4gXHRwcmV2ID0gZ2V0X3BtY3Jfbih2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX1BNQ1JfRUwwKSkpO1xuIFxuIFx0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG5AQCAtNDgxLDYgJiM0Mzs0ODMsMjYgQEAgc3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycywgYm9vbFxuIFx0XHRcdCAgICBucl9jb3VudGVycywgcHJldik7XG4gXHRlbHNlXG4gXHRcdFRFU1RfQVNTRVJUKCFyZXQsIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycyxcbiYjNDM7XHRcdFx0XHRcdFx0IGJvb2wgZml4ZWRfY291bnRlcnNfb25seSxcbiYjNDM7XHRcdFx0XHRcdFx0IGJvb2wgZXhwZWN0X2ZhaWwpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4mIzQzO1x0dTY0IGlycSA9IDIzO1xuJiM0MztcbiYjNDM7XHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcbiYjNDM7XHR2Y3B1ID0gdnBtdV92bS52Y3B1O1xuJiM0MztcbiYjNDM7XHRpZiAoZml4ZWRfY291bnRlcnNfb25seSlcbiYjNDM7XHRcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgXHUwMDI2aXJxKTtcbiYjNDM7XG4mIzQzO1x0c2V0X25yX2NvdW50ZXJzKHZjcHUsIG5yX2NvdW50ZXJzLCBleHBlY3RfZmFpbCk7XG4gXG4gXHR2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVCwgTlVMTCk7XG4gfVxuQEAgLTQ4OSwyMSAmIzQzOzUxMSwyMiBAQCBzdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnModW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sXG4gICogQ3JlYXRlIGEgZ3Vlc3Qgd2l0aCBvbmUgdkNQVSwgc2V0IHRoZSBQTUNSX0VMMC5OIGZvciB0aGUgdkNQVSB0byBAcG1jcl9uLFxuICAqIGFuZCBydW4gdGhlIHRlc3QuXG4gICovXG4tc3RhdGljIHZvaWQgcnVuX2FjY2Vzc190ZXN0KHU2NCBwbWNyX24pXG4mIzQzO3N0YXRpYyB2b2lkIHJ1bl9hY2Nlc3NfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXG4ge1xuIFx0dTY0IHNwO1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuIFx0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcbiBcbi1cdHByX2RlYnVnKFwmIzM0O1Rlc3Qgd2l0aCBwbWNyX24gJWx1XFxuXCYjMzQ7LCBwbWNyX24pO1xuJiM0MztcdHByX2RlYnVnKFwmIzM0O1Rlc3Qgd2l0aCBwbWNyX24gJWx1LCBmaXhlZF9jb3VudGVyc19vbmx5ICVkXFxuXCYjMzQ7LCBwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHkpO1xuIFxuLVx0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZmFsc2UpO1xuJiM0MztcdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHksIGZhbHNlKTtcbiBcdHZjcHUgPSB2cG11X3ZtLnZjcHU7XG4gXG4gXHQvKiBTYXZlIHRoZSBpbml0aWFsIHNwIHRvIHJlc3RvcmUgdGhlbSBsYXRlciB0byBydW4gdGhlIGd1ZXN0IGFnYWluICovXG4gXHRzcCA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBjdHh0X3JlZ19hbGlhcyh2Y3B1LCBTWVNfU1BfRUwxKSk7XG4gXG4tXHRydW5fdmNwdSh2Y3B1LCBwbWNyX24pO1xuJiM0MztcdHZjcHVfYXJnc19zZXQodmNwdSwgMSwgcG1jcl9uKTtcbiYjNDM7XHRydW5fdmNwdSh2Y3B1KTtcbiBcbiBcdC8qXG4gXHQgKiBSZXNldCBhbmQgcmUtaW5pdGlhbGl6ZSB0aGUgdkNQVSwgYW5kIHJ1biB0aGUgZ3Vlc3QgY29kZSBhZ2FpbiB0b1xuQEAgLTUxNiw3ICYjNDM7NTM5LDggQEAgc3RhdGljIHZvaWQgcnVuX2FjY2Vzc190ZXN0KHU2NCBwbWNyX24pXG4gXHR2Y3B1X3NldF9yZWcodmNwdSwgY3R4dF9yZWdfYWxpYXModmNwdSwgU1lTX1NQX0VMMSksIHNwKTtcbiBcdHZjcHVfc2V0X3JlZyh2Y3B1LCBBUk02NF9DT1JFX1JFRyhyZWdzLnBjKSwgKHU2NClndWVzdF9jb2RlKTtcbiBcbi1cdHJ1bl92Y3B1KHZjcHUsIHBtY3Jfbik7XG4mIzQzO1x0dmNwdV9hcmdzX3NldCh2Y3B1LCAxLCBwbWNyX24pO1xuJiM0MztcdHJ1bl92Y3B1KHZjcHUpO1xuIFxuIFx0ZGVzdHJveV92cG11X3ZtKCk7XG4gfVxuQEAgLTUzMSwxNCAmIzQzOzU1NSwxNCBAQCBzdGF0aWMgc3RydWN0IHBtcmVnX3NldHMgdmFsaWRpdHlfY2hlY2tfcmVnX3NldHNbXSA9IHtcbiAgKiBDcmVhdGUgYSBWTSwgYW5kIGNoZWNrIGlmIEtWTSBoYW5kbGVzIHRoZSB1c2Vyc3BhY2UgYWNjZXNzZXMgb2ZcbiAgKiB0aGUgUE1VIHJlZ2lzdGVyIHNldHMgaW4gQHZhbGlkaXR5X2NoZWNrX3JlZ19zZXRzW10gY29ycmVjdGx5LlxuICAqL1xuLXN0YXRpYyB2b2lkIHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uKVxuJiM0MztzdGF0aWMgdm9pZCBydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QodTY0IHBtY3JfbiwgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5KVxuIHtcbiBcdGludCBpO1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuIFx0dTY0IHNldF9yZWdfaWQsIGNscl9yZWdfaWQsIHJlZ192YWw7XG4gXHR1NjQgdmFsaWRfY291bnRlcnNfbWFzaywgbWF4X2NvdW50ZXJzX21hc2s7XG4gXG4tXHR0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCBmYWxzZSk7XG4mIzQzO1x0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZml4ZWRfY291bnRlcnNfb25seSwgZmFsc2UpO1xuIFx0dmNwdSA9IHZwbXVfdm0udmNwdTtcbiBcbiBcdHZhbGlkX2NvdW50ZXJzX21hc2sgPSBnZXRfY291bnRlcnNfbWFzayhwbWNyX24pO1xuQEAgLTU4MywxNiAmIzQzOzYwNyw5NCBAQCBzdGF0aWMgdm9pZCBydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QodTY0IHBtY3JfbilcbiBcdGRlc3Ryb3lfdnBtdV92bSgpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcnVuX21kY3JfZWwyX3ZhbGlkaXR5X3Rlc3QodTY0IHBtY3JfbiwgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4mIzQzO1x0dTY0IGV4cGVjdGVkX21kY3IsIG1kY3I7XG4mIzQzO1x0dTY0IGlycSA9IDIzO1xuJiM0MztcbiYjNDM7XHRwcl9kZWJ1ZyhcJiMzNDtNRENSX0VMMiB0ZXN0IHdpdGggcG1jcl9uICVsdSwgZml4ZWRfY291bnRlcnNfb25seSAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdCBwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHkpO1xuJiM0MztcbiYjNDM7XHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcbiYjNDM7XHRpZiAoIXZtX3N1cHBvcnRzX2VsMih2cG11X3ZtLnZtKSkge1xuJiM0MztcdFx0ZGVzdHJveV92cG11X3ZtKCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR2Y3B1ID0gdnBtdV92bS52Y3B1O1xuJiM0MztcbiYjNDM7XHRtZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpO1xuJiM0MztcdGV4cGVjdGVkX21kY3IgPSB1NjRfcmVwbGFjZV9iaXRzKG1kY3IsIEZJRUxEX01BWChNRENSX0VMMl9IUE1OKSxcbiYjNDM7XHRcdFx0XHRcdCBNRENSX0VMMl9IUE1OKTtcbiYjNDM7XHR2Y3B1X3NldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSxcbiYjNDM7XHRcdCAgICAgZXhwZWN0ZWRfbWRjcik7XG4mIzQzO1xuJiM0MztcdG1kY3IgPSB2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSk7XG4mIzQzO1x0VEVTVF9BU1NFUlQobWRjciA9PSBleHBlY3RlZF9tZGNyLFxuJiM0MztcdFx0ICAgIFwmIzM0O01EQ1JfRUwyIHdhcyBub3QgcHJvcGVybHkgdXBkYXRlZCBhZnRlciBIUE1OIHdyaXRlIChleHBlY3RlZCAweCVseCwgZ290IDB4JWx4KVwmIzM0OyxcbiYjNDM7XHRcdCAgICBleHBlY3RlZF9tZGNyLCBtZGNyKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZpeGVkX2NvdW50ZXJzX29ubHkpIHtcbiYjNDM7XHRcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdFx0bWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTtcbiYjNDM7XHRcdFRFU1RfQVNTRVJUKG1kY3IgPT0gZXhwZWN0ZWRfbWRjcixcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O01EQ1JfRUwyIGNoYW5nZWQgYWZ0ZXIgUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkgKGV4cGVjdGVkIDB4JWx4LCBnb3QgMHglbHgpXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgZXhwZWN0ZWRfbWRjciwgbWRjcik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzZXRfbnJfY291bnRlcnModmNwdSwgcG1jcl9uLCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdG1kY3IgPSB2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSk7XG4mIzQzO1x0VEVTVF9BU1NFUlQobWRjciA9PSBleHBlY3RlZF9tZGNyLFxuJiM0MztcdFx0ICAgIFwmIzM0O01EQ1JfRUwyIGNoYW5nZWQgYWZ0ZXIgUE1VX1YzX1NFVF9OUl9DT1VOVEVSUyAoZXhwZWN0ZWQgMHglbHgsIGdvdCAweCVseClcJiMzNDssXG4mIzQzO1x0XHQgICAgZXhwZWN0ZWRfbWRjciwgbWRjcik7XG4mIzQzO1xuJiM0MztcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgXHUwMDI2aXJxKTtcbiYjNDM7XG4mIzQzO1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuJiM0MztcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVCwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdG1kY3IgPSB2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSk7XG4mIzQzO1x0VEVTVF9BU1NFUlQobWRjciA9PSBleHBlY3RlZF9tZGNyLFxuJiM0MztcdFx0ICAgIFwmIzM0O01EQ1JfRUwyIGNoYW5nZWQgYWZ0ZXIgUE1VX1YzX0lOSVQgKGV4cGVjdGVkIDB4JWx4LCBnb3QgMHglbHgpXCYjMzQ7LFxuJiM0MztcdFx0ICAgIGV4cGVjdGVkX21kY3IsIG1kY3IpO1xuJiM0MztcbiYjNDM7XHRleHBlY3RlZF9tZGNyID0gbWRjciBeIE1EQ1JfRUwyX0hQTUU7XG4mIzQzO1x0dmNwdV9zZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMiksXG4mIzQzO1x0XHQgICAgIGV4cGVjdGVkX21kY3IpO1xuJiM0MztcbiYjNDM7XHRtZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpO1xuJiM0MztcdFRFU1RfQVNTRVJUKG1kY3IgPT0gZXhwZWN0ZWRfbWRjcixcbiYjNDM7XHRcdCAgICBcJiMzNDtNRENSX0VMMiB3YXMgbm90IHByb3Blcmx5IHVwZGF0ZWQgYWZ0ZXIgSFBNRSB3cml0ZSAoZXhwZWN0ZWQgMHglbHgsIGdvdCAweCVseClcJiMzNDssXG4mIzQzO1x0XHQgICAgZXhwZWN0ZWRfbWRjciwgbWRjcik7XG4mIzQzO1xuJiM0MztcdGt2bV9nZXRfZGVmYXVsdF92Y3B1X3RhcmdldCh2cG11X3ZtLnZtLCBcdTAwMjZpbml0KTtcbiYjNDM7XHRpbml0LmZlYXR1cmVzWzBdIHw9ICgxIFx1MDAzY1x1MDAzYyBLVk1fQVJNX1ZDUFVfUE1VX1YzKTtcbiYjNDM7XHRhYXJjaDY0X3ZjcHVfc2V0dXAodmNwdSwgXHUwMDI2aW5pdCk7XG4mIzQzO1xuJiM0MztcdG1kY3IgPSB2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSk7XG4mIzQzO1x0VEVTVF9BU1NFUlQoRklFTERfR0VUKE1EQ1JfRUwyX0hQTU4sIG1kY3IpID09IHBtY3JfbixcbiYjNDM7XHRcdCAgICBcJiMzNDtNRENSX0VMMi5IUE1OIGlzIG5vdCByZXNldCBhZnRlciBJTklUIChleHBlY3RlZCAlbHUsIGdvdCAlbHUpXCYjMzQ7LFxuJiM0MztcdFx0ICAgIHBtY3JfbiwgRklFTERfR0VUKE1EQ1JfRUwyX0hQTU4sIG1kY3IpKTtcbiYjNDM7XG4mIzQzO1x0ZGVzdHJveV92cG11X3ZtKCk7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBDcmVhdGUgYSBndWVzdCB3aXRoIG9uZSB2Q1BVLCBhbmQgYXR0ZW1wdCB0byBzZXQgdGhlIFBNQ1JfRUwwLk4gZm9yXG4gICogdGhlIHZDUFUgdG8gQHBtY3Jfbiwgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gdGhlIGhvc3QgdmFsdWUuXG4gICogVGhlIGF0dGVtcHQgc2hvdWxkIGZhaWwgYXMgQHBtY3JfbiBpcyB0b28gYmlnIHRvIHNldCBmb3IgdGhlIHZDUFUuXG4gICovXG4tc3RhdGljIHZvaWQgcnVuX2Vycm9yX3Rlc3QodTY0IHBtY3JfbilcbiYjNDM7c3RhdGljIHZvaWQgcnVuX2Vycm9yX3Rlc3QodTY0IHBtY3JfbiwgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5KVxuIHtcbiBcdHByX2RlYnVnKFwmIzM0O0Vycm9yIHRlc3Qgd2l0aCBwbWNyX24gJWx1IChsYXJnZXIgdGhhbiB0aGUgaG9zdClcXG5cJiMzNDssIHBtY3Jfbik7XG4gXG4tXHR0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCB0cnVlKTtcbiYjNDM7XHR0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5LCB0cnVlKTtcbiBcdGRlc3Ryb3lfdnBtdV92bSgpO1xuIH1cbiBcbkBAIC02MjIsMjIgJiM0Mzs3MjQsMTgzIEBAIHN0YXRpYyBib29sIGt2bV9zdXBwb3J0c19ucl9jb3VudGVyc19hdHRyKHZvaWQpXG4gXHRyZXR1cm4gc3VwcG9ydGVkO1xuIH1cbiBcbi1pbnQgbWFpbih2b2lkKVxuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3NldF9ucl9jb3VudGVyc19hZnRlcl92Y3B1X3J1bih2b2lkKVxuIHtcbi1cdHU2NCBpLCBwbWNyX247XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICpydW5uaW5nX3ZjcHUsICpzdG9wcGVkX3ZjcHU7XG4mIzQzO1x0dW5zaWduZWQgaW50IG5yX2NvdW50ZXJzID0gMDtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCBpbml0O1xuJiM0MztcdHN0cnVjdCBrdm1fdm0gKnZtO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0dTY0IGlycSA9IDIzO1xuJiM0MztcbiYjNDM7XHR2bSA9IHZtX2NyZWF0ZSgyKTtcbiYjNDM7XHR2bV9pb2N0bCh2bSwgS1ZNX0FSTV9QUkVGRVJSRURfVEFSR0VULCBcdTAwMjZpbml0KTtcbiYjNDM7XHRpbml0LmZlYXR1cmVzWzBdIHw9IEJJVChLVk1fQVJNX1ZDUFVfUE1VX1YzKTtcbiYjNDM7XHRydW5uaW5nX3ZjcHUgPSBhYXJjaDY0X3ZjcHVfYWRkKHZtLCAwLCBcdTAwMjZpbml0LCBndWVzdF9jb2RlX2RvbmUpO1xuJiM0MztcdHN0b3BwZWRfdmNwdSA9IGFhcmNoNjRfdmNwdV9hZGQodm0sIDEsIFx1MDAyNmluaXQsIGd1ZXN0X2NvZGVfZG9uZSk7XG4mIzQzO1x0a3ZtX2FyY2hfdm1fZmluYWxpemVfdmNwdXModm0pO1xuJiM0MztcbiYjNDM7XHR2Y3B1X2RldmljZV9hdHRyX3NldChydW5uaW5nX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgXHUwMDI2aXJxKTtcbiYjNDM7XHR2Y3B1X2RldmljZV9hdHRyX3NldChydW5uaW5nX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQsIE5VTEwpO1xuJiM0MztcdHJ1bl92Y3B1KHJ1bm5pbmdfdmNwdSk7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQoc3RvcHBlZF92Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4mIzQzO1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9OUl9DT1VOVEVSUyxcbiYjNDM7XHRcdFx0XHQgICAgIFx1MDAyNm5yX2NvdW50ZXJzKTtcbiYjNDM7XHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVCVVNZLFxuJiM0MztcdFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTtcbiYjNDM7XG4mIzQzO1x0a3ZtX3ZtX2ZyZWUodm0pO1xuJiM0Mzt9XG4gXG4tXHRURVNUX1JFUVVJUkUoa3ZtX2hhc19jYXAoS1ZNX0NBUF9BUk1fUE1VX1YzKSk7XG4tXHRURVNUX1JFUVVJUkUoa3ZtX3N1cHBvcnRzX3ZnaWNfdjMoKSk7XG4tXHRURVNUX1JFUVVJUkUoa3ZtX3N1cHBvcnRzX25yX2NvdW50ZXJzX2F0dHIoKSk7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfY29uZmlnKHU2NCBwbWNyX24sIGJvb2wgZml4ZWRfY291bnRlcnNfb25seSlcbiYjNDM7e1xuJiM0MztcdHU2NCBpO1xuIFxuLVx0cG1jcl9uID0gZ2V0X3BtY3Jfbl9saW1pdCgpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2M9IHBtY3JfbjsgaSYjNDM7JiM0MzspIHtcbi1cdFx0cnVuX2FjY2Vzc190ZXN0KGkpO1xuLVx0XHRydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QoaSk7XG4mIzQzO1x0XHRydW5fYWNjZXNzX3Rlc3QoaSwgZml4ZWRfY291bnRlcnNfb25seSk7XG4mIzQzO1x0XHRydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QoaSwgZml4ZWRfY291bnRlcnNfb25seSk7XG4mIzQzO1x0XHRydW5fbWRjcl9lbDJfdmFsaWRpdHlfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcbiBcdH1cbiBcbiBcdGZvciAoaSA9IHBtY3JfbiAmIzQzOyAxOyBpIFx1MDAzYyBBUk1WOF9QTVVfTUFYX0NPVU5URVJTOyBpJiM0MzsmIzQzOylcbi1cdFx0cnVuX2Vycm9yX3Rlc3QoaSk7XG4mIzQzO1x0XHRydW5fZXJyb3JfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9maXhlZF9jb3VudGVyc19vbmx5X3N0cmljdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4mIzQzO1x0c3RydWN0IGt2bV92bSAqdm07XG4mIzQzO1x0dTY0IGlycSA9IDIzO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICgha3ZtX2hhc19jYXAoS1ZNX0NBUF9BUk1fUE1VX1YzX1NUUklDVCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHZtID0gdm1fY3JlYXRlKDEpO1xuJiM0MztcdGt2bV9nZXRfZGVmYXVsdF92Y3B1X3RhcmdldCh2bSwgXHUwMDI2aW5pdCk7XG4mIzQzO1x0aW5pdC5mZWF0dXJlc1swXSB8PSBCSVQoS1ZNX0FSTV9WQ1BVX1BNVV9WMykgfFxuJiM0MztcdFx0XHQgICAgQklUKEtWTV9BUk1fVkNQVV9QTVVfVjNfU1RSSUNUKTtcbiYjNDM7XHR2Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMCwgXHUwMDI2aW5pdCwgZ3Vlc3RfY29kZV9kb25lKTtcbiYjNDM7XHRrdm1fYXJjaF92bV9maW5hbGl6ZV92Y3B1cyh2bSk7XG4mIzQzO1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuJiM0MztcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLCBcdTAwMjZpcnEpO1xuJiM0MztcbiYjNDM7XHQvKiBTVFJJQ1Qgc3RpbGwgcmVxdWlyZXMgYSBQTVUgc2VsZWN0aW9uIGJlZm9yZSBpbml0aWFsaXphdGlvbi4gKi9cbiYjNDM7XHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVCwgTlVMTCk7XG4mIzQzO1x0VEVTVF9BU1NFUlQocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFTlhJTyxcbiYjNDM7XHRcdCAgICBLVk1fSU9DVExfRVJST1IoS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7XG4mIzQzO1xuJiM0MztcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuJiM0MztcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRrdm1fdm1fZnJlZSh2bSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfZml4ZWRfY291bnRlcnNfb25seSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGt2bV9wbXVfZXZlbnRfZmlsdGVyIGZpbHRlciA9IHsgLm5ldmVudHMgPSAwIH07XG4mIzQzO1x0c3RydWN0IGt2bV92bSAqdm07XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICpydW5uaW5nX3ZjcHU7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICpzdG9wcGVkX3ZjcHU7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdHU2NCBpcnEgPSAyMztcbiYjNDM7XG4mIzQzO1x0Y3JlYXRlX3ZwbXVfdm0oZ3Vlc3RfY29kZSk7XG4mIzQzO1x0cmV0ID0gX192Y3B1X2hhc19kZXZpY2VfYXR0cih2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0VEVTVF9BU1NFUlQocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFTlhJTyxcbiYjNDM7XHRcdFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fSEFTX0RFVklDRV9BVFRSLCByZXQpKTtcbiYjNDM7XHRcdGRlc3Ryb3lfdnBtdV92bSgpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQXNzZXJ0IHRoYXQgRklYRURfQ09VTlRFUlNfT05MWSBpcyB1bnNldCBhdCBpbml0aWFsaXphdGlvbi4gKi9cbiYjNDM7XHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfZ2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuJiM0MztcdFx0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcbiYjNDM7XHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVOWElPLFxuJiM0MztcdFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fR0VUX0RFVklDRV9BVFRSLCByZXQpKTtcbiYjNDM7XG4mIzQzO1x0LyogQXNzZXJ0IHRoYXQgc2V0dGluZyBGSVhFRF9DT1VOVEVSU19PTkxZIHN1Y2NlZWRzLiAqL1xuJiM0MztcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuJiM0MztcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdC8qIEFzc2VydCB0aGF0IEZJWEVEX0NPVU5URVJTX09OTFkgaXMgc2V0LiAqL1xuJiM0MztcdHZjcHVfZGV2aWNlX2F0dHJfZ2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuJiM0MztcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU2V0dGluZyBhbiBldmVudCBmaWx0ZXIgd2hlbiBGSVhFRF9DT1VOVEVSU19PTkxZIGhhcyBhbHJlYWR5IGJlZW4gc2V0XG4mIzQzO1x0ICogcmVzdWx0cyBpbiBFQlVTWS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuJiM0MztcdFx0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVIsIFx1MDAyNmZpbHRlcik7XG4mIzQzO1x0VEVTVF9BU1NFUlQocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFQlVTWSxcbiYjNDM7XHRcdCAgICBLVk1fSU9DVExfRVJST1IoS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7XG4mIzQzO1xuJiM0MztcdGRlc3Ryb3lfdnBtdV92bSgpO1xuJiM0MztcbiYjNDM7XHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgd2hlbiBhbiBldmVudCBmaWx0ZXIgaGFzXG4mIzQzO1x0ICogYWxyZWFkeSBiZWVuIHNldCByZXN1bHRzIGluIEVCVVNZLlxuJiM0MztcdCAqL1xuJiM0MztcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuJiM0MztcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSLCBcdTAwMjZmaWx0ZXIpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuJiM0MztcdFx0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcbiYjNDM7XHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVCVVNZLFxuJiM0MztcdFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTtcbiYjNDM7XG4mIzQzO1x0ZGVzdHJveV92cG11X3ZtKCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQXNzZXJ0IHRoYXQgc2V0dGluZyBGSVhFRF9DT1VOVEVSU19PTkxZIHdoZW4gYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1blxuJiM0MztcdCAqIHJlc3VsdHMgaW4gRUJVU1kuXG4mIzQzO1x0ICovXG4mIzQzO1x0dm0gPSB2bV9jcmVhdGUoMik7XG4mIzQzO1x0dm1faW9jdGwodm0sIEtWTV9BUk1fUFJFRkVSUkVEX1RBUkdFVCwgXHUwMDI2aW5pdCk7XG4mIzQzO1x0aW5pdC5mZWF0dXJlc1swXSB8PSAoMSBcdTAwM2NcdTAwM2MgS1ZNX0FSTV9WQ1BVX1BNVV9WMyk7XG4mIzQzO1x0cnVubmluZ192Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMCwgXHUwMDI2aW5pdCwgZ3Vlc3RfY29kZV9kb25lKTtcbiYjNDM7XHRzdG9wcGVkX3ZjcHUgPSBhYXJjaDY0X3ZjcHVfYWRkKHZtLCAxLCBcdTAwMjZpbml0LCBndWVzdF9jb2RlX2RvbmUpO1xuJiM0MztcdGt2bV9hcmNoX3ZtX2ZpbmFsaXplX3ZjcHVzKHZtKTtcbiYjNDM7XHR2Y3B1X2RldmljZV9hdHRyX3NldChydW5uaW5nX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgXHUwMDI2aXJxKTtcbiYjNDM7XHR2Y3B1X2RldmljZV9hdHRyX3NldChydW5uaW5nX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbiYjNDM7XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQsIE5VTEwpO1xuJiM0MztcdHJ1bl92Y3B1KHJ1bm5pbmdfdmNwdSk7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQoc3RvcHBlZF92Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4mIzQzO1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuJiM0MztcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUJVU1ksXG4mIzQzO1x0XHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpO1xuJiM0MztcbiYjNDM7XHRrdm1fdm1fZnJlZSh2bSk7XG4mIzQzO1xuJiM0MztcdHRlc3RfZml4ZWRfY291bnRlcnNfb25seV9zdHJpY3QoKTtcbiYjNDM7XG4mIzQzO1x0dGVzdF9jb25maWcoMCwgdHJ1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRURVNUX1JFUVVJUkUoa3ZtX2hhc19jYXAoS1ZNX0NBUF9BUk1fUE1VX1YzKSk7XG4mIzQzO1x0VEVTVF9SRVFVSVJFKGt2bV9zdXBwb3J0c192Z2ljX3YzKCkpO1xuJiM0MztcdFRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfbnJfY291bnRlcnNfYXR0cigpKTtcbiYjNDM7XG4mIzQzO1x0dGVzdF9zZXRfbnJfY291bnRlcnNfYWZ0ZXJfdmNwdV9ydW4oKTtcbiYjNDM7XHR0ZXN0X2NvbmZpZyhnZXRfcG1jcl9uX2xpbWl0KCksIGZhbHNlKTtcbiYjNDM7XHR0ZXN0X2ZpeGVkX2NvdW50ZXJzX29ubHkoKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMjo1NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O0FsbCBtb2RpZmllZCBrZXJuZWwgY29kZSBpcyBleGNsdXNpdmUgdG8gdGhlIGFybTY0IGFyY2hpdGVjdHVyZSAoYXJjaC9hcm02NCBhbmQgaW5jbHVkZS9rdm0vYXJtX3BtdS5oKSwgd2l0aCB0aGUgcmVtYWluaW5nIGNoYW5nZXMgbG9jYXRlZCBpbiBEb2N1bWVudGF0aW9uLyBhbmQgdXNlci1zcGFjZSB0b29scy9zZWxmdGVzdHMgKHRvb2xzLykuIE5vbmUgb2YgdGhlIG1vZGlmaWVkIGNvZGUgaXMgY29tcGlsZWQgb3IgcmVhY2hhYmxlIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzM0M2MwYmZmN2Q1YzVlYTdhZjllMWYwZmI2NTgxOTFhODBmYmYxOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDE0IDEyOjU0OjM1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0CmluZGV4IDQ5ODhjMzJkZjRiZjguLjQyMDY1MTM4NjAzYjcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QKQEAgLTM1MjEsOSAmIzQzOzM1MjEsMTMgQEAgUG9zc2libGUgZmVhdHVyZXM6CiAKIAkgICAgKiBVc2Vyc3BhY2UgbXVzdCBleHBsaWNpdGx5IHNlbGVjdCBhIFBNVSBpbXBsZW1lbnRhdGlvbiBiZWZvcmUKIAkgICAgICBpbml0aWFsaXppbmcgdGhlIFBNVSBvciBjb25maWd1cmluZyBhIFBNVSBldmVudCBmaWx0ZXIKJiM0MzsJICAgICAgKEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSBhbHNvIHNhdGlzZmllcyB0aGUKJiM0MzsJICAgICAgaW5pdGlhbGl6YXRpb24gcmVxdWlyZW1lbnQ7IGV2ZW50IGZpbHRlcmluZyByZW1haW5zIHVuYXZhaWxhYmxlCiYjNDM7CSAgICAgIGluIHRoYXQgbW9kZSkKIAotCSAgICAqIElmIHRoZSBQTVUgaW1wbGVtZW50cyBGRUFUX1BNVXYzcDQsIFBNTUlSX0VMMS5TTE9UUyBwcm92aWRlcyB0aGUKLQkgICAgICBoYXJkd2FyZSB2YWx1ZSBvZiB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbgomIzQzOwkgICAgKiBJZiBhIGhhcmR3YXJlIFBNVSBpcyBzZWxlY3RlZCBhbmQgaW1wbGVtZW50cyBGRUFUX1BNVXYzcDQsCiYjNDM7CSAgICAgIFBNTUlSX0VMMS5TTE9UUyBwcm92aWRlcyBpdHMgaGFyZHdhcmUgdmFsdWUuIEluIGZpeGVkLWNvdW50ZXJzLW9ubHkKJiM0MzsJICAgICAgbW9kZSwgUE1NSVJfRUwxIHJlYWRzIGFzIHplcm8KIAogCSAgICAqIFdyaXRlcyB0byBQTUNSX0VMMC5OIHZpYSBLVk1fU0VUX09ORV9SRUcgYXJlIGlnbm9yZWQKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0CmluZGV4IGRlYjVjNTFiYzAwYzguLjRlYzMyOTFmMGJhNzQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vZGV2aWNlcy92Y3B1LnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3QKQEAgLTUzLDkgJiM0Mzs1Myw5IEBAIFJldHVybnM6CiAJID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCSAtRUVYSVNUICBJbnRlcnJ1cHQgbnVtYmVyIGFscmVhZHkgdXNlZAogCSAtRU5PREVWICBQTVV2MyBub3Qgc3VwcG9ydGVkIG9yIEdJQyBub3QgaW5pdGlhbGl6ZWQKLQkgLUVOWElPICAgUE1VdjMgbm90IHN1cHBvcnRlZCwgbWlzc2luZyBWQ1BVIGZlYXR1cmUsIG1pc3NpbmcKLSAgICAgICAgICAgICAgICAgIGhhcmR3YXJlIFBNVSwgb3IgaW50ZXJydXB0IG51bWJlciBub3Qgc2V0IChub24tR0lDdjUKLSAgICAgICAgICAgICAgICAgIGd1ZXN0cywgb25seSkKJiM0MzsJIC1FTlhJTyAgIFBNVXYzIG5vdCBzdXBwb3J0ZWQsIG1pc3NpbmcgVkNQVSBmZWF0dXJlLAomIzQzOwkJICBuZWl0aGVyIGhhcmR3YXJlIFBNVSBub3IgRklYRURfQ09VTlRFUlNfT05MWSBzZWxlY3RlZCwKJiM0MzsJCSAgb3IgaW50ZXJydXB0IG51bWJlciBub3Qgc2V0IChub24tR0lDdjUgZ3Vlc3RzIG9ubHkpCiAJIC1FQlVTWSAgIFBNVXYzIGFscmVhZHkgaW5pdGlhbGl6ZWQKIAkgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTY0LDcgJiM0Mzs2NCw4IEBAIHZpcnR1YWwgR0lDIGltcGxlbWVudGF0aW9uLCB0aGlzIG11c3QgYmUgZG9uZSBhZnRlciBpbml0aWFsaXppbmcgdGhlIGluLWtlcm5lbAogaXJxY2hpcC4KIAogV2hlbiB0aGUgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TVFJJQ1QgdkNQVSBmZWF0dXJlIGlzIGVuYWJsZWQgdGhpcyBtdXN0IGJlIGRvbmUKLWFmdGVyIHNlbGVjdGluZyBhIGhhcmR3YXJlIFBNVS4KJiM0MzthZnRlciBzZWxlY3RpbmcgYSBoYXJkd2FyZSBQTVUgb3IgZW5hYmxpbmcKJiM0MztLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkuCiAKIDEuMyBBVFRSSUJVVEU6IEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNzgsNyAmIzQzOzc5LDggQEAgYWZ0ZXIgc2VsZWN0aW5nIGEgaGFyZHdhcmUgUE1VLgogCSAtRU5PREVWICBQTVV2MyBub3Qgc3VwcG9ydGVkIG9yIEdJQyBub3QgaW5pdGlhbGl6ZWQKIAkgLUVOWElPICAgUE1VdjMgbm90IHByb3Blcmx5IGNvbmZpZ3VyZWQgb3IgaW4ta2VybmVsIGlycWNoaXAgbm90CiAJIAkgIGNvbmZpZ3VyZWQgYXMgcmVxdWlyZWQgcHJpb3IgdG8gY2FsbGluZyB0aGlzIGF0dHJpYnV0ZQotCSAtRUJVU1kgICBQTVV2MyBhbHJlYWR5IGluaXRpYWxpemVkIG9yIGEgVkNQVSBoYXMgYWxyZWFkeSBydW4KJiM0MzsJIC1FQlVTWSAgIFBNVXYzIGFscmVhZHkgaW5pdGlhbGl6ZWQsIGEgVkNQVSBoYXMgYWxyZWFkeSBydW4gb3IKJiM0MzsJCSAgRklYRURfQ09VTlRFUlNfT05MWSBoYXMgYWxyZWFkeSBiZWVuIHNldAogCSAtRUlOVkFMICBJbnZhbGlkIGZpbHRlciByYW5nZQogCSA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtMTIzLDE0ICYjNDM7MTI1LDE0IEBAIGFmdGVyIHNlbGVjdGluZyBhIGhhcmR3YXJlIFBNVS4KIAogOlJldHVybnM6CiAKLQkgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwkgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAkgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCwgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1biBvcgotICAgICAgICAgICAgICAgICAgYW4gZXZlbnQgZmlsdGVyIGhhcyBhbHJlYWR5IGJlZW4gc2V0CiYjNDM7ICAgICAgICAgICAgICAgICAgYW4gZXZlbnQgZmlsdGVyIG9yIEZJWEVEX0NPVU5URVJTX09OTFkgaGFzIGFscmVhZHkgYmVlbiBzZXQKIAkgLUVGQVVMVCAgRXJyb3IgYWNjZXNzaW5nIHRoZSBQTVUgaWRlbnRpZmllcgogCSAtRU5YSU8gICBQTVUgbm90IGZvdW5kCiAJIC1FTk9ERVYgIFBNVXYzIG5vdCBzdXBwb3J0ZWQgb3IgR0lDIG5vdCBpbml0aWFsaXplZAogCSAtRU5PTUVNICBDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5Ci0JID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsJID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIFJlcXVlc3QgdGhhdCB0aGUgVkNQVSB1c2VzIHRoZSBzcGVjaWZpZWQgaGFyZHdhcmUgUE1VIHdoZW4gY3JlYXRpbmcgZ3Vlc3QgZXZlbnRzCiBmb3IgdGhlIHB1cnBvc2Ugb2YgUE1VIGVtdWxhdGlvbi4gVGhlIFBNVSBpZGVudGlmaWVyIGNhbiBiZSByZWFkIGZyb20gdGhlICYjMzQ7dHlwZSYjMzQ7CkBAIC0xNzIsNiAmIzQzOzE3NCwzMCBAQCBleHBsaWNpdGx5IHNlbGVjdGVkLCBvciB0aGUgbnVtYmVyIG9mIGNvdW50ZXJzIGlzIG91dCBvZiByYW5nZSBmb3IgdGhlCiBzZWxlY3RlZCBQTVUuIFNlbGVjdGluZyBhIG5ldyBQTVUgY2FuY2VscyB0aGUgZWZmZWN0IG9mIHNldHRpbmcgdGhpcwogYXR0cmlidXRlLgogCiYjNDM7MS42IEFUVFJJQlVURTogS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZCiYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7CiYjNDM7OlBhcmFtZXRlcnM6IG5vIGFkZGl0aW9uYWwgcGFyYW1ldGVyIGluIGt2bV9kZXZpY2VfYXR0ci5hZGRyCiYjNDM7CiYjNDM7OlJldHVybnM6CiYjNDM7CiYjNDM7CSA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwkgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCwgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1biwKJiM0MzsJCSAgYW4gZXZlbnQgZmlsdGVyIGhhcyBhbHJlYWR5IGJlZW4gc2V0IG9yCiYjNDM7CQkgIGEgaGFyZHdhcmUgUE1VIGhhcyBhbHJlYWR5IGJlZW4gc3BlY2lmaWVkCiYjNDM7CSAtRU5YSU8gICBBdHRlbXB0ZWQgdG8gZ2V0IGJlZm9yZSBzZXR0aW5nCiYjNDM7CSAtRU5PREVWICBBdHRlbXB0ZWQgdG8gc2V0IHdoaWxlIFBNVXYzIG5vdCBzdXBwb3J0ZWQKJiM0MzsJID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7CiYjNDM7SWYgc2V0LCBLVk0gZW11bGF0ZXMgUE1VdjMgd2l0aG91dCBwcm9ncmFtbWFibGUgZXZlbnQgY291bnRlcnMuCiYjNDM7CiYjNDM7V2l0aCBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NUUklDVCwgZW5hYmxpbmcgdGhpcyBhdHRyaWJ1dGUgc2F0aXNmaWVzIHRoZQomIzQzO1BNVSBzZWxlY3Rpb24gcmVxdWlyZW1lbnQgZm9yIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVC4KJiM0MzsKJiM0MztXaGVuIHRoaXMgYXR0cmlidXRlIGlzIGVuYWJsZWQsIHRoZSB2Q1BVIGNhbiBydW4gb24gYW55IHBoeXNpY2FsIENQVQomIzQzO3RoYXQgaGFzIGEgUE1VLCByZWdhcmRsZXNzIG9mIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uLiBUaGlzCiYjNDM7YXR0cmlidXRlIGlzIFZNLXNjb3BlZC4KJiM0MzsKIDIuIEdST1VQOiBLVk1fQVJNX1ZDUFVfVElNRVJfQ1RSTAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCAyN2ZlMGNkNWIyZDdhLi4xMGUzZmY0MTA3OWU4IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC0zNjcsNiAmIzQzOzM2NywxMCBAQCBzdHJ1Y3Qga3ZtX2FyY2ggewogI2RlZmluZSBLVk1fQVJDSF9GTEFHX1dSSVRBQkxFX0lNUF9JRF9SRUdTCQkxMAogCS8qIFVuaGFuZGxlZCBTRUFzIGFyZSB0YWtlbiB0byB1c2Vyc3BhY2UgKi8KICNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19FWElUX1NFQQkJCQkxMQomIzQzOwkvKiBQTVV2MyBpcyBlbXVsYXRlZCB3aXRoIGFuIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGhhcmR3YXJlIFBNVSAqLwomIzQzOyNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRVhQTElDSVQJCQkxMgomIzQzOwkvKiBQTVV2MyBpcyBlbXVsYXRlZCB3aXRob3V0IHByb2dyYW1tYWJsZSBldmVudCBjb3VudGVycyAqLwomIzQzOyNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWQkxMwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiBWTS13aWRlIHZDUFUgZmVhdHVyZSBzZXQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaAppbmRleCAwMTllNWUzZDg5MmU2Li4zYmQ3ZjIwMTI1MmExIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oCkBAIC00MzgsNiAmIzQzOzQzOCw3IEBAIGVudW0gewogI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSCQkyCiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VCQkzCiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlMJNAomIzQzOyNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkJNQogI2RlZmluZSBLVk1fQVJNX1ZDUFVfVElNRVJfQ1RSTAkJMQogI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9USU1FUl9JUlFfVlRJTUVSCQkwCiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1RJTUVSX0lSUV9QVElNRVIJCTEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2NwdV9lcnJhdGEuYyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdV9lcnJhdGEuYwppbmRleCA3OGU0ZTEwNWY2YWI1Li45YjJkOWQwZjE3Mzg4IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVfZXJyYXRhLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1X2VycmF0YS5jCkBAIC0xMDEyLDcgJiM0MzsxMDEyLDcgQEAgY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgYXJtNjRfZXJyYXRhW10gPSB7CiAJewogCQkuZGVzYyA9ICYjMzQ7QXBwbGUgSU1QREVGIFBNVXYzIFRyYXBzJiMzNDssCiAJCS5jYXBhYmlsaXR5ID0gQVJNNjRfV09SS0FST1VORF9QTVVWM19JTVBERUZfVFJBUFMsCi0JCS50eXBlID0gQVJNNjRfQ1BVQ0FQX0xPQ0FMX0NQVV9FUlJBVFVNLAomIzQzOwkJLnR5cGUgPSBBUk02NF9DUFVDQVBfRUFSTFlfTE9DQUxfQ1BVX0ZFQVRVUkUsCiAJCS5tYXRjaGVzID0gaGFzX2ltcGRlZl9wbXV2MywKIAkJLmNwdV9lbmFibGUgPSBjcHVfZW5hYmxlX2ltcGRlZl9wbXV2M190cmFwcywKIAl9LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vYXJtLmMgYi9hcmNoL2FybTY0L2t2bS9hcm0uYwppbmRleCBjY2FlODJjMTI0MmJjLi5kZmViZmViOTU2MTk4IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9hcm0uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9hcm0uYwpAQCAtNjUyLDYgJiM0Mzs2NTIsNyBAQCBzdGF0aWMgYm9vbCBrdm1fdmNwdV9zaG91bGRfY2xlYXJfdHdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSkKIHsKIAlzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11OwomIzQzOwlpbnQgbGFzdF9jcHUgPSB2Y3B1LSZndDtjcHU7CiAJaW50ICpsYXN0X3JhbjsKIAogCWlmIChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSkKQEAgLTcwMSw2ICYjNDM7NzAyLDcgQEAgdm9pZCBrdm1fYXJjaF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQogCWlmIChoYXNfdmhlKCkpCiAJCWt2bV92Y3B1X2xvYWRfdmhlKHZjcHUpOwogCWt2bV9hcmNoX3ZjcHVfbG9hZF9mcCh2Y3B1KTsKJiM0MzsJa3ZtX3ZjcHVfbG9hZF9wbXUodmNwdSwgbGFzdF9jcHUpOwogCWt2bV92Y3B1X3BtdV9yZXN0b3JlX2d1ZXN0KHZjcHUpOwogCWlmIChrdm1fYXJtX2lzX3B2dGltZV9lbmFibGVkKCZhbXA7dmNwdS0mZ3Q7YXJjaCkpCiAJCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUNPUkRfU1RFQUwsIHZjcHUpOwpAQCAtNzU0LDcgJiM0Mzs3NTYsNiBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlrdm1fYXJtX3ZtaWRfY2xlYXJfYWN0aXZlKCk7CiAKIAl2Y3B1X2NsZWFyX29uX3Vuc3VwcG9ydGVkX2NwdSh2Y3B1KTsKLQl2Y3B1LSZndDtjcHUgPSAtMTsKIH0KIAogc3RhdGljIHZvaWQgX19rdm1fYXJtX3ZjcHVfcG93ZXJfb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTE2NzAsMjkgJiM0MzsxNjcxLDI2IEBAIHN0YXRpYyBpbnQgX19rdm1fdmNwdV9zZXRfdGFyZ2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIHsKIAl1bnNpZ25lZCBsb25nIGZlYXR1cmVzID0gaW5pdC0mZ3Q7ZmVhdHVyZXNbMF07CiAJc3RydWN0IGt2bSAqa3ZtID0gdmNwdS0mZ3Q7a3ZtOwotCWludCByZXQgPSAtRUlOVkFMOwomIzQzOwlpbnQgcmV0OwogCi0JbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7YXJjaC5jb25maWdfbG9jayk7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwogCiAJaWYgKHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfVkNQVV9GRUFUVVJFU19DT05GSUdVUkVELCAmYW1wO2t2bS0mZ3Q7YXJjaC5mbGFncykgJmFtcDsmYW1wOwogCSAgICBrdm1fdmNwdV9pbml0X2NoYW5nZWQodmNwdSwgaW5pdCkpCi0JCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwogCiAJYml0bWFwX2NvcHkoa3ZtLSZndDthcmNoLnZjcHVfZmVhdHVyZXMsICZhbXA7ZmVhdHVyZXMsIEtWTV9WQ1BVX01BWF9GRUFUVVJFUyk7CiAKIAlyZXQgPSBrdm1fc2V0dXBfdmNwdSh2Y3B1KTsKIAlpZiAocmV0KQotCQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CQlyZXR1cm4gcmV0OwogCiAJLyogTm93IHdlIGtub3cgd2hhdCBpdCBpcywgd2UgY2FuIHJlc2V0IGl0LiAqLwogCWt2bV9yZXNldF92Y3B1KHZjcHUpOwogCiAJc2V0X2JpdChLVk1fQVJDSF9GTEFHX1ZDUFVfRkVBVFVSRVNfQ09ORklHVVJFRCwgJmFtcDtrdm0tJmd0O2FyY2guZmxhZ3MpOwogCXZjcHVfc2V0X2ZsYWcodmNwdSwgVkNQVV9JTklUSUFMSVpFRCk7Ci0JcmV0ID0gMDsKLW91dF91bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKLQlyZXR1cm4gcmV0OwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBrdm1fdmNwdV9zZXRfdGFyZ2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKQEAgLTE3MDgsNiAmIzQzOzE3MDYsOCBAQCBzdGF0aWMgaW50IGt2bV92Y3B1X3NldF90YXJnZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKJiM0MzsKIAlpZiAoIWt2bV92Y3B1X2luaXRpYWxpemVkKHZjcHUpKQogCQlyZXR1cm4gX19rdm1fdmNwdV9zZXRfdGFyZ2V0KHZjcHUsIGluaXQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jIGIvYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYwppbmRleCA1YjFhZjdlMjE3NmZhLi5jNjgzMzFjZGZhZjkzIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMKQEAgLTcsOSAmIzQzOzcsOSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2NwdS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2t2bS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2t2bV9ob3N0LmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvbGlzdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BlcmZfZXZlbnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wZXJmL2FybV9wbXUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcmN1bGlzdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3VhY2Nlc3MuaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX2VtdWxhdGUuaCZndDsKICNpbmNsdWRlICZsdDtrdm0vYXJtX3BtdS5oJmd0OwpAQCAtMTcsNiAmIzQzOzE3LDEwIEBACiAKICNkZWZpbmUgUEVSRl9BVFRSX0NGRzFfQ09VTlRFUl82NEJJVAlCSVQoMCkKIAomIzQzOy8qCiYjNDM7ICogYXJtX3BtdXMgaXMgYXBwZW5kLW9ubHkuIGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2MygpIGZlZWRzIHBlcnNpc3RlbnQKJiM0MzsgKiBWTSBzdGF0ZSwgc28gYSB0cnVlIHJlc3VsdCBtdXN0IHJlbWFpbiB2YWxpZCBhZnRlciB0aGUgY2hlY2suCiYjNDM7ICovCiBzdGF0aWMgTElTVF9IRUFEKGFybV9wbXVzKTsKIHN0YXRpYyBERUZJTkVfTVVURVgoYXJtX3BtdXNfbG9jayk7CiAKQEAgLTI2LDcgJiM0MzszMCw2IEBAIHN0YXRpYyBib29sIGt2bV9wbXVfY291bnRlcl9pc19lbmFibGVkKHN0cnVjdCBrdm1fcG1jICpwbWMpOwogCiBib29sIGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2Myh2b2lkKQogewotCWd1YXJkKG11dGV4KSgmYW1wO2FybV9wbXVzX2xvY2spOwogCXJldHVybiAhbGlzdF9lbXB0eSgmYW1wO2FybV9wbXVzKTsKIH0KIApAQCAtODAsNiAmIzQzOzgzLDExIEBAIHU2NCBrdm1fcG11X2V2dHlwZXJfbWFzayhzdHJ1Y3Qga3ZtICprdm0pCiAJcmV0dXJuIG1hc2s7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoc3RydWN0IGt2bSAqa3ZtKQomIzQzO3sKJiM0MzsJcmV0dXJuIHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksICZhbXA7a3ZtLSZndDthcmNoLmZsYWdzKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGt2bV9wbWNfaXNfNjRiaXQgLSBkZXRlcm1pbmUgaWYgY291bnRlciBpcyA2NGJpdAogICogQHBtYzogY291bnRlciBjb250ZXh0CkBAIC0zMTcsMTIgJiM0MzszMjUsMTIgQEAgdTY0IGt2bV9wbXVfYWNjZXNzaWJsZV9jb3VudGVyX21hc2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiB1NjQga3ZtX3BtdV9pbXBsZW1lbnRlZF9jb3VudGVyX21hc2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXU2NCB2YWwgPSBGSUVMRF9HRVQoQVJNVjhfUE1VX1BNQ1JfTiwga3ZtX3ZjcHVfcmVhZF9wbWNyKHZjcHUpKTsKJiM0MzsJdTY0IG4gPSB2Y3B1LSZndDtrdm0tJmd0O2FyY2gubnJfcG11X2NvdW50ZXJzOwogCi0JaWYgKHZhbCA9PSAwKQomIzQzOwlpZiAobiA9PSAwKQogCQlyZXR1cm4gQklUKEFSTVY4X1BNVV9DWUNMRV9JRFgpOwogCWVsc2UKLQkJcmV0dXJuIEdFTk1BU0sodmFsIC0gMSwgMCkgfCBCSVQoQVJNVjhfUE1VX0NZQ0xFX0lEWCk7CiYjNDM7CQlyZXR1cm4gR0VOTUFTSyhuIC0gMSwgMCkgfCBCSVQoQVJNVjhfUE1VX0NZQ0xFX0lEWCk7CiB9CiAKIHN0YXRpYyB2b2lkIGt2bV9wbWNfZW5hYmxlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYykKQEAgLTU3MSw2ICYjNDM7NTc5LDIzIEBAIHZvaWQga3ZtX3BtdV9zb2Z0d2FyZV9pbmNyZW1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKQogCWt2bV9wbXVfY291bnRlcl9pbmNyZW1lbnQodmNwdSwgdmFsLCBBUk1WOF9QTVVWM19QRVJGQ1RSX1NXX0lOQ1IpOwogfQogCiYjNDM7dm9pZCBrdm1fcG11X3JlcXVlc3RfcmVjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJdmNwdS0mZ3Q7YXJjaC5wbXUuZXZlbnRzX25lZWRfcmVjcmVhdGUgPSB0cnVlOwomIzQzOwlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQga3ZtX3BtdV9hcHBseV9wbWNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9sZCwgdTY0IHZhbCwgYm9vbCBmb3JjZV9yZWxvYWQpCiYjNDM7ewomIzQzOwl1NjQgY2hhbmdlZCA9IG9sZCBeIHZhbDsKJiM0MzsKJiM0MzsJLyogUmVsb2FkIHRoZSBQTVUgaWYgdGhlIHdyaXRlIGFmZmVjdHMgdGhlIGJhY2tpbmcgcGVyZiBldmVudHMuICovCiYjNDM7CWlmIChjaGFuZ2VkICZhbXA7IChBUk1WOF9QTVVfUE1DUl9MQyB8IEFSTVY4X1BNVV9QTUNSX0xQKSkKJiM0MzsJCWt2bV9wbXVfcmVxdWVzdF9yZWNyZWF0ZSh2Y3B1KTsKJiM0MzsJZWxzZSBpZiAoZm9yY2VfcmVsb2FkIHx8IChjaGFuZ2VkICZhbXA7IEFSTVY4X1BNVV9QTUNSX0UpKQomIzQzOwkJa3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFTE9BRF9QTVUsIHZjcHUpOwomIzQzO30KJiM0MzsKIC8qKgogICoga3ZtX3BtdV9oYW5kbGVfcG1jciAtIGhhbmRsZSBQTUNSIHJlZ2lzdGVyCiAgKiBAdmNwdTogVGhlIHZjcHUgcG9pbnRlcgpAQCAtNTc4LDE5ICYjNDM7NjAzLDE4IEBAIHZvaWQga3ZtX3BtdV9zb2Z0d2FyZV9pbmNyZW1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKQogICovCiB2b2lkIGt2bV9wbXVfaGFuZGxlX3BtY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKQogewomIzQzOwl1NjQgb2xkID0gX192Y3B1X3N5c19yZWcodmNwdSwgUE1DUl9FTDApOwogCWludCBpOwogCiAJLyogRml4dXAgUE1DUl9FTDAgdG8gcmVjb25jaWxlIHRoZSBQTVUgdmVyc2lvbiBhbmQgdGhlIExQIGJpdCAqLwogCWlmICgha3ZtX2hhc19mZWF0KHZjcHUtJmd0O2t2bSwgSURfQUE2NERGUjBfRUwxLCBQTVVWZXIsIFYzUDUpKQogCQl2YWwgJmFtcDs9IH5BUk1WOF9QTVVfUE1DUl9MUDsKIAotCS8qIFJlcXVlc3QgYSByZWxvYWQgb2YgdGhlIFBNVSB0byBlbmFibGUvZGlzYWJsZSBhZmZlY3RlZCBjb3VudGVycyAqLwotCWlmICgoX192Y3B1X3N5c19yZWcodmNwdSwgUE1DUl9FTDApIF4gdmFsKSAmYW1wOyBBUk1WOF9QTVVfUE1DUl9FKQotCQlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7Ci0KIAkvKiBUaGUgcmVzZXQgYml0cyBkb24mIzM5O3QgaW5kaWNhdGUgYW55IHN0YXRlLCBhbmQgc2hvdWxkbiYjMzk7dCBiZSBzYXZlZC4gKi8KIAlfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgUE1DUl9FTDAsICh2YWwgJmFtcDsgfihBUk1WOF9QTVVfUE1DUl9DIHwgQVJNVjhfUE1VX1BNQ1JfUCkpKTsKIAomIzQzOwlrdm1fcG11X2FwcGx5X3BtY3IodmNwdSwgb2xkLCBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBQTUNSX0VMMCksIGZhbHNlKTsKJiM0MzsKIAlpZiAodmFsICZhbXA7IEFSTVY4X1BNVV9QTUNSX0MpCiAJCWt2bV9wbXVfc2V0X2NvdW50ZXJfdmFsdWUodmNwdSwgQVJNVjhfUE1VX0NZQ0xFX0lEWCwgMCk7CiAKQEAgLTYwNiw2ICYjNDM7NjMwLDIwIEBAIHZvaWQga3ZtX3BtdV9oYW5kbGVfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpCiAJfQogfQogCiYjNDM7dm9pZCBrdm1fcG11X2FwcGx5X21kY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgb2xkLCB1NjQgdmFsKQomIzQzO3sKJiM0MzsJdTY0IGNoYW5nZWQgPSBvbGQgXiB2YWw7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEhQTU4gZGV0ZXJtaW5lcyB3aGljaCBjb3VudGVycyBIUE1EIGFuZCBITFAgYXBwbHkgdG8uIENoYW5nZXMgdG8KJiM0MzsJICogdGhlc2UgZmllbGRzIHJlcXVpcmUgbmV3IHBlcmYgZXZlbnQgZmlsdGVycyBhbmQgc2FtcGxlIHBlcmlvZHMuCiYjNDM7CSAqLwomIzQzOwlpZiAoY2hhbmdlZCAmYW1wOyAoTURDUl9FTDJfSFBNTiB8IE1EQ1JfRUwyX0hQTUQgfCBNRENSX0VMMl9ITFApKQomIzQzOwkJa3ZtX3BtdV9yZXF1ZXN0X3JlY3JlYXRlKHZjcHUpOwomIzQzOwllbHNlIGlmIChjaGFuZ2VkICZhbXA7IE1EQ1JfRUwyX0hQTUUpCiYjNDM7CQlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wga3ZtX3BtdV9jb3VudGVyX2lzX2VuYWJsZWQoc3RydWN0IGt2bV9wbWMgKnBtYykKIHsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fcG1jX3RvX3ZjcHUocG1jKTsKQEAgLTY0OSwxMCAmIzQzOzY4Nyw4IEBAIHN0YXRpYyBib29sIGt2bV9wbWNfY291bnRzX2F0X2VsMihzdHJ1Y3Qga3ZtX3BtYyAqcG1jKQogCXJldHVybiBrdm1fcG1jX3JlYWRfZXZ0cmVnKHBtYykgJmFtcDsgQVJNVjhfUE1VX0lOQ0xVREVfRUwyOwogfQogCi1zdGF0aWMgaW50IGt2bV9tYXBfcG11X2V2ZW50KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGV2ZW50c2VsKQomIzQzO3N0YXRpYyBpbnQga3ZtX21hcF9wbXVfZXZlbnQoc3RydWN0IGFybV9wbXUgKnBtdSwgdW5zaWduZWQgaW50IGV2ZW50c2VsKQogewotCXN0cnVjdCBhcm1fcG11ICpwbXUgPSBrdm0tJmd0O2FyY2guYXJtX3BtdTsKLQogCS8qCiAJICogVGhlIENQVSBQTVUgbGlrZWx5IGlzbiYjMzk7dCBQTVV2MzsgbGV0IHRoZSBkcml2ZXIgcHJvdmlkZSBhIG1hcHBpbmcKIAkgKiBmb3IgdGhlIGd1ZXN0JiMzOTtzIFBNVXYzIGV2ZW50IElELgpAQCAtNjYzLDE0ICYjNDM7Njk5LDI3IEBAIHN0YXRpYyBpbnQga3ZtX21hcF9wbXVfZXZlbnQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgZXZlbnRzZWwpCiAJcmV0dXJuIGV2ZW50c2VsOwogfQogCi0vKioKLSAqIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQgLSBjcmVhdGUgYSBwZXJmIGV2ZW50IGZvciBhIGNvdW50ZXIKLSAqIEBwbWM6IENvdW50ZXIgY29udGV4dAotICovCi1zdGF0aWMgdm9pZCBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50KHN0cnVjdCBrdm1fcG1jICpwbWMpCiYjNDM7c3RhdGljIHN0cnVjdCBhcm1fcG11ICprdm1fcG11X3Byb2JlX2FybXBtdShpbnQgY3B1KQomIzQzO3sKJiM0MzsJc3RydWN0IGFybV9wbXVfZW50cnkgKmVudHJ5OwomIzQzOwlzdHJ1Y3QgYXJtX3BtdSAqcG11OwomIzQzOwomIzQzOwlndWFyZChyY3UpKCk7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVudHJ5LCAmYW1wO2FybV9wbXVzLCBlbnRyeSkgewomIzQzOwkJcG11ID0gZW50cnktJmd0O2FybV9wbXU7CiYjNDM7CiYjNDM7CQlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsICZhbXA7cG11LSZndDtzdXBwb3J0ZWRfY3B1cykpCiYjNDM7CQkJcmV0dXJuIHBtdTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdShzdHJ1Y3Qga3ZtX3BtYyAqcG1jLAomIzQzOwkJCQkJICAgICAgIHN0cnVjdCBhcm1fcG11ICphcm1fcG11KQogewogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9wbWNfdG9fdmNwdShwbWMpOwotCXN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0gdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmFybV9wbXU7CiAJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OwogCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgYXR0cjsKIAlpbnQgZXZlbnRzZWw7CkBAIC03MDQsNyAmIzQzOzc1Myw3IEBAIHN0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYykKIAkgKiBEb24mIzM5O3QgY3JlYXRlIGFuIGV2ZW50IGlmIHdlJiMzOTtyZSBydW5uaW5nIG9uIGhhcmR3YXJlIHRoYXQgcmVxdWlyZXMKIAkgKiBQTVV2MyBldmVudCB0cmFuc2xhdGlvbiBhbmQgd2UgY291bGRuJiMzOTt0IGZpbmQgYSB2YWxpZCBtYXBwaW5nLgogCSAqLwotCWV2ZW50c2VsID0ga3ZtX21hcF9wbXVfZXZlbnQodmNwdS0mZ3Q7a3ZtLCBldmVudHNlbCk7CiYjNDM7CWV2ZW50c2VsID0ga3ZtX21hcF9wbXVfZXZlbnQoYXJtX3BtdSwgZXZlbnRzZWwpOwogCWlmIChldmVudHNlbCAmbHQ7IDApCiAJCXJldHVybjsKIApAQCAtNzQ5LDYgJiM0Mzs3OTgsMzIgQEAgc3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKQogCXBtYy0mZ3Q7cGVyZl9ldmVudCA9IGV2ZW50OwogfQogCiYjNDM7LyoqCiYjNDM7ICoga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudCAtIGNyZWF0ZSBhIHBlcmYgZXZlbnQgZm9yIGEgY291bnRlcgomIzQzOyAqIEBwbWM6IENvdW50ZXIgY29udGV4dAomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9wbWNfdG9fdmNwdShwbWMpOwomIzQzOwlzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5hcm1fcG11OwomIzQzOwomIzQzOwlpZiAoa3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtJmd0O2t2bSkpIHsKJiM0MzsJCWRvIHsKJiM0MzsJCQlhcm1fcG11ID0ga3ZtX3BtdV9wcm9iZV9hcm1wbXUoUkVBRF9PTkNFKHZjcHUtJmd0O2NwdSkpOwomIzQzOwomIzQzOwkJCWlmICghYXJtX3BtdSkgewomIzQzOwkJCQlwcl93YXJuX29uY2UoJiMzNDtrdm06IFVuc3VwcG9ydGVkIFBNVSB2YXJpYXRpb24gZGV0ZWN0ZWQuXG4mIzM0Oyk7CiYjNDM7CQkJCWFkZF90YWludChUQUlOVF9DUFVfT1VUX09GX1NQRUMsIExPQ0tERVBfU1RJTExfT0spOwomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCWt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnRfd2l0aF9wbXUocG1jLCBhcm1fcG11KTsKJiM0MzsJCX0gd2hpbGUgKCFjcHVtYXNrX3Rlc3RfY3B1KFJFQURfT05DRSh2Y3B1LSZndDtjcHUpLCAmYW1wO2FybV9wbXUtJmd0O3N1cHBvcnRlZF9jcHVzKSk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50X3dpdGhfcG11KHBtYywgYXJtX3BtdSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiAvKioKICAqIGt2bV9wbXVfc2V0X2NvdW50ZXJfZXZlbnRfdHlwZSAtIHNldCBzZWxlY3RlZCBjb3VudGVyIHRvIG1vbml0b3Igc29tZSBldmVudAogICogQHZjcHU6IFRoZSB2Y3B1IHBvaW50ZXIKQEAgLTc4OSw0MyAmIzQzOzg2NCw3IEBAIHZvaWQga3ZtX2hvc3RfcG11X2luaXQoc3RydWN0IGFybV9wbXUgKnBtdSkKIAkJcmV0dXJuOwogCiAJZW50cnktJmd0O2FybV9wbXUgPSBwbXU7Ci0JbGlzdF9hZGRfdGFpbCgmYW1wO2VudHJ5LSZndDtlbnRyeSwgJmFtcDthcm1fcG11cyk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYXJtX3BtdSAqa3ZtX3BtdV9wcm9iZV9hcm1wbXUodm9pZCkKLXsKLQlzdHJ1Y3QgYXJtX3BtdV9lbnRyeSAqZW50cnk7Ci0Jc3RydWN0IGFybV9wbXUgKnBtdTsKLQlpbnQgY3B1OwotCi0JZ3VhcmQobXV0ZXgpKCZhbXA7YXJtX3BtdXNfbG9jayk7Ci0KLQkvKgotCSAqIEl0IGlzIHNhZmUgdG8gdXNlIGEgc3RhbGUgY3B1IHRvIGl0ZXJhdGUgdGhlIGxpc3Qgb2YgUE1VcyBzbyBsb25nIGFzCi0JICogdGhlIHNhbWUgdmFsdWUgaXMgdXNlZCBmb3IgdGhlIGVudGlyZXR5IG9mIHRoZSBsb29wLiBHaXZlbiB0aGlzLCBhbmQKLQkgKiB0aGUgZmFjdCB0aGF0IG5vIHBlcmNwdSBkYXRhIGlzIHVzZWQgZm9yIHRoZSBsb29rdXAgdGhlcmUgaXMgbm8gbmVlZAotCSAqIHRvIGRpc2FibGUgcHJlZW1wdGlvbi4KLQkgKgotCSAqIEl0IGlzIHN0aWxsIG5lY2Vzc2FyeSB0byBnZXQgYSB2YWxpZCBjcHUsIHRob3VnaCwgdG8gcHJvYmUgZm9yIHRoZQotCSAqIGRlZmF1bHQgUE1VIGluc3RhbmNlIGFzIHVzZXJzcGFjZSBpcyBub3QgcmVxdWlyZWQgdG8gc3BlY2lmeSBhIFBNVQotCSAqIHR5cGUuIEluIG9yZGVyIHRvIHVwaG9sZCB0aGUgcHJlZXhpc3RpbmcgYmVoYXZpb3IgS1ZNIHNlbGVjdHMgdGhlCi0JICogUE1VIGluc3RhbmNlIGZvciB0aGUgY29yZSBkdXJpbmcgdmNwdSBpbml0LiBBIGRlcGVuZGVudCB1c2UKLQkgKiBjYXNlIHdvdWxkIGJlIGEgdXNlciB3aXRoIGRpc2RhaW4gb2YgYWxsIHRoaW5ncyBiaWcuTElUVExFIHRoYXQKLQkgKiBhZmZpbmVzIHRoZSBWTU0gdG8gYSBwYXJ0aWN1bGFyIGNsdXN0ZXIgb2YgY29yZXMuCi0JICoKLQkgKiBJbiBhbnkgY2FzZSwgdXNlcnNwYWNlIHNob3VsZCBqdXN0IGRvIHRoZSBzYW5lIHRoaW5nIGFuZCB1c2UgdGhlIFVBUEkKLQkgKiB0byBzZWxlY3QgYSBQTVUgdHlwZSBkaXJlY3RseS4gQnV0LCBiZSB3YXJ5IG9mIHRoZSBiYWdnYWdlIGJlaW5nCi0JICogY2FycmllZCBoZXJlLgotCSAqLwotCWNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmFtcDthcm1fcG11cywgZW50cnkpIHsKLQkJcG11ID0gZW50cnktJmd0O2FybV9wbXU7Ci0KLQkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCAmYW1wO3BtdS0mZ3Q7c3VwcG9ydGVkX2NwdXMpKQotCQkJcmV0dXJuIHBtdTsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKJiM0MzsJbGlzdF9hZGRfdGFpbF9yY3UoJmFtcDtlbnRyeS0mZ3Q7ZW50cnksICZhbXA7YXJtX3BtdXMpOwogfQogCiBzdGF0aWMgdTY0IF9fY29tcHV0ZV9wbWNlaWQoc3RydWN0IGFybV9wbXUgKnBtdSwgYm9vbCBwbWNlaWQxKQpAQCAtODcxLDYgJiM0Mzs5MTAsMTMgQEAgdTY0IGt2bV9wbXVfZ2V0X3BtY2VpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcG1jZWlkMSkKIAl1NjQgdmFsLCBtYXNrID0gMDsKIAlpbnQgYmFzZSwgaSwgbnJfZXZlbnRzOwogCiYjNDM7CS8qCiYjNDM7CSAqIEhpZGUgdGhlIGhhcmR3YXJlIFBNVSYjMzk7cyBldmVudCBzZXQgdG8ga2VlcCBQTUNFSUQgc3RhYmxlIGFjcm9zcwomIzQzOwkgKiBwaHlzaWNhbCBDUFUgbWlncmF0aW9uLgomIzQzOwkgKi8KJiM0MzsJaWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LSZndDtrdm0pKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJaWYgKCFwbWNlaWQxKSB7CiAJCXZhbCA9IGNvbXB1dGVfcG1jZWlkMCh2Y3B1KTsKIAkJYmFzZSA9IDA7CkBAIC04OTgsOSAmIzQzOzk0NCwyNyBAQCB1NjQga3ZtX3BtdV9nZXRfcG1jZWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBwbWNlaWQxKQogCXJldHVybiB2YWwgJmFtcDsgbWFzazsKIH0KIAomIzQzO3ZvaWQga3ZtX3ZjcHVfbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbGFzdF9jcHUpCiYjNDM7ewomIzQzOwlpZiAoIWt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LSZndDtrdm0pIHx8IHZjcHUtJmd0O2NwdSA9PSBsYXN0X2NwdSB8fCBsYXN0X2NwdSA9PSAtMSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKGt2bV9wbXVfcHJvYmVfYXJtcG11KHZjcHUtJmd0O2NwdSkgIT0ga3ZtX3BtdV9wcm9iZV9hcm1wbXUobGFzdF9jcHUpKQomIzQzOwkJa3ZtX3BtdV9yZXF1ZXN0X3JlY3JlYXRlKHZjcHUpOwomIzQzO30KJiM0MzsKIHZvaWQga3ZtX3ZjcHVfcmVsb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiYjNDM7CXN0cnVjdCBrdm1fcG11ICpwbXUgPSAmYW1wO3ZjcHUtJmd0O2FyY2gucG11OwogCXU2NCBtYXNrID0ga3ZtX3BtdV9pbXBsZW1lbnRlZF9jb3VudGVyX21hc2sodmNwdSk7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAocG11LSZndDtldmVudHNfbmVlZF9yZWNyZWF0ZSkgewomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IEtWTV9BUk1WOF9QTVVfTUFYX0NPVU5URVJTOyBpJiM0MzsmIzQzOykKJiM0MzsJCQlrdm1fcG11X3N0b3BfY291bnRlcihrdm1fdmNwdV9pZHhfdG9fcG1jKHZjcHUsIGkpKTsKJiM0MzsKJiM0MzsJCXBtdS0mZ3Q7ZXZlbnRzX25lZWRfcmVjcmVhdGUgPSBmYWxzZTsKJiM0MzsJfQogCiAJX192Y3B1X3Jtd19zeXNfcmVnKHZjcHUsIFBNT1ZTU0VUX0VMMCwgJmFtcDs9LCBtYXNrKTsKIAlfX3ZjcHVfcm13X3N5c19yZWcodmNwdSwgUE1JTlRFTlNFVF9FTDEsICZhbXA7PSwgbWFzayk7CkBAIC05MzksOCAmIzQzOzEwMDMsOCBAQCBpbnQga3ZtX2FybV9wbXVfdjNfZW5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogc3RhdGljIGludCBrdm1fYXJtX3BtdV92M19pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQkvKiBPbmx5IHBvc3NpYmxlIHdoZW4gdXNpbmcgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TVFJJQ1QgKi8KLQlpZiAoIXZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5hcm1fcG11KQomIzQzOwkvKiBTdHJpY3QgUE1VdjMgcmVxdWlyZXMgYSBoYXJkd2FyZSBQTVUgb3IgZml4ZWQtY291bnRlcnMtb25seSBtb2RlLiAqLwomIzQzOwlpZiAoIXZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5hcm1fcG11ICZhbXA7JmFtcDsgIWt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LSZndDtrdm0pKQogCQlyZXR1cm4gLUVOWElPOwogCiAJaWYgKGlycWNoaXBfaW5fa2VybmVsKHZjcHUtJmd0O2t2bSkpIHsKQEAgLTEwMTMsNiAmIzQzOzEwNzcsOSBAQCB1OCBrdm1fYXJtX3BtdV9nZXRfbWF4X2NvdW50ZXJzKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IGt2bS0mZ3Q7YXJjaC5hcm1fcG11OwogCiYjNDM7CWlmIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwogCS8qCiAJICogVW5kZXIgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TVFJJQ1Qgbm8gUE1VIGV4aXN0cyB1bnRpbCB1c2Vyc3BhY2Ugc2V0cwogCSAqIG9uZSwgc28gdGhpcyBjYW4gYmUgcmVhY2hlZCBiZWZvcmUgYXJtX3BtdSBpcyBzZXQuIFJlcG9ydCBubwpAQCAtMTAzNSwzMCAmIzQzOzExMDIsMTIgQEAgdTgga3ZtX2FybV9wbXVfZ2V0X21heF9jb3VudGVycyhzdHJ1Y3Qga3ZtICprdm0pCiAJcmV0dXJuIGJpdG1hcF93ZWlnaHQoYXJtX3BtdS0mZ3Q7Y250cl9tYXNrLCBBUk1WOF9QTVVfTUFYX0dFTkVSQUxfQ09VTlRFUlMpOwogfQogCi1zdGF0aWMgdm9pZCBrdm1fYXJtX3NldF9ucl9jb3VudGVycyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBucikKLXsKLQlrdm0tJmd0O2FyY2gubnJfcG11X2NvdW50ZXJzID0gbnI7Ci0KLQkvKiBSZXNldCBNRENSX0VMMi5IUE1OIGJlaGluZCB0aGUgdmNwdXMmIzM5OyBiYWNrLi4uICovCi0JaWYgKHRlc3RfYml0KEtWTV9BUk1fVkNQVV9IQVNfRUwyLCBrdm0tJmd0O2FyY2gudmNwdV9mZWF0dXJlcykpIHsKLQkJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwotCQl1bnNpZ25lZCBsb25nIGk7Ci0KLQkJa3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKSB7Ci0JCQl1NjQgdmFsID0gX192Y3B1X3N5c19yZWcodmNwdSwgTURDUl9FTDIpOwotCQkJdmFsICZhbXA7PSB+TURDUl9FTDJfSFBNTjsKLQkJCXZhbCB8PSBGSUVMRF9QUkVQKE1EQ1JfRUwyX0hQTU4sIGt2bS0mZ3Q7YXJjaC5ucl9wbXVfY291bnRlcnMpOwotCQkJX192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIE1EQ1JfRUwyLCB2YWwpOwotCQl9Ci0JfQotfQotCiBzdGF0aWMgdm9pZCBrdm1fYXJtX3NldF9wbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSkKIHsKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7a3ZtLSZndDthcmNoLmNvbmZpZ19sb2NrKTsKIAogCWt2bS0mZ3Q7YXJjaC5hcm1fcG11ID0gYXJtX3BtdTsKLQlrdm1fYXJtX3NldF9ucl9jb3VudGVycyhrdm0sIGt2bV9hcm1fcG11X2dldF9tYXhfY291bnRlcnMoa3ZtKSk7CiYjNDM7CWt2bS0mZ3Q7YXJjaC5ucl9wbXVfY291bnRlcnMgPSBrdm1fYXJtX3BtdV9nZXRfbWF4X2NvdW50ZXJzKGt2bSk7CiB9CiAKIC8qKgpAQCAtMTA3Niw3ICYjNDM7MTEyNSwyNCBAQCBzdGF0aWMgdm9pZCBrdm1fYXJtX3NldF9wbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSkKICAqLwogaW50IGt2bV9hcm1fc2V0X2RlZmF1bHRfcG11KHN0cnVjdCBrdm0gKmt2bSkKIHsKLQlzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IGt2bV9wbXVfcHJvYmVfYXJtcG11KCk7CiYjNDM7CS8qCiYjNDM7CSAqIEl0IGlzIHNhZmUgdG8gdXNlIGEgc3RhbGUgY3B1IHRvIGl0ZXJhdGUgdGhlIGxpc3Qgb2YgUE1VcyBzbyBsb25nIGFzCiYjNDM7CSAqIHRoZSBzYW1lIHZhbHVlIGlzIHVzZWQgZm9yIHRoZSBlbnRpcmV0eSBvZiB0aGUgbG9vcC4gR2l2ZW4gdGhpcywgYW5kCiYjNDM7CSAqIHRoZSBmYWN0IHRoYXQgbm8gcGVyY3B1IGRhdGEgaXMgdXNlZCBmb3IgdGhlIGxvb2t1cCB0aGVyZSBpcyBubyBuZWVkCiYjNDM7CSAqIHRvIGRpc2FibGUgcHJlZW1wdGlvbi4KJiM0MzsJICoKJiM0MzsJICogSXQgaXMgc3RpbGwgbmVjZXNzYXJ5IHRvIGdldCBhIHZhbGlkIGNwdSwgdGhvdWdoLCB0byBwcm9iZSBmb3IgdGhlCiYjNDM7CSAqIGRlZmF1bHQgUE1VIGluc3RhbmNlIGFzIHVzZXJzcGFjZSBpcyBub3QgcmVxdWlyZWQgdG8gc3BlY2lmeSBhIFBNVQomIzQzOwkgKiB0eXBlLiBJbiBvcmRlciB0byB1cGhvbGQgdGhlIHByZWV4aXN0aW5nIGJlaGF2aW9yIEtWTSBzZWxlY3RzIHRoZQomIzQzOwkgKiBQTVUgaW5zdGFuY2UgZm9yIHRoZSBjb3JlIGR1cmluZyB2Y3B1IGluaXQuIEEgZGVwZW5kZW50IHVzZQomIzQzOwkgKiBjYXNlIHdvdWxkIGJlIGEgdXNlciB3aXRoIGRpc2RhaW4gb2YgYWxsIHRoaW5ncyBiaWcuTElUVExFIHRoYXQKJiM0MzsJICogYWZmaW5lcyB0aGUgVk1NIHRvIGEgcGFydGljdWxhciBjbHVzdGVyIG9mIGNvcmVzLgomIzQzOwkgKgomIzQzOwkgKiBJbiBhbnkgY2FzZSwgdXNlcnNwYWNlIHNob3VsZCBqdXN0IGRvIHRoZSBzYW5lIHRoaW5nIGFuZCB1c2UgdGhlIFVBUEkKJiM0MzsJICogdG8gc2VsZWN0IGEgUE1VIHR5cGUgZGlyZWN0bHksIG9yIHJlcXVlc3QgZml4ZWQtY291bnRlcnMtb25seQomIzQzOwkgKiBlbXVsYXRpb24uIEJ1dCwgYmUgd2FyeSBvZiB0aGUgYmFnZ2FnZSBiZWluZyBjYXJyaWVkIGhlcmUuCiYjNDM7CSAqLwomIzQzOwlzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IGt2bV9wbXVfcHJvYmVfYXJtcG11KHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOwogCiAJaWYgKCFhcm1fcG11KQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTEwOTMsMTcgJiM0MzsxMTU5LDE5IEBAIHN0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwbXVfaWQpCiAJaW50IHJldCA9IC1FTlhJTzsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwotCW11dGV4X2xvY2soJmFtcDthcm1fcG11c19sb2NrKTsKJiM0MzsJZ3VhcmQocmN1KSgpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmFtcDthcm1fcG11cywgZW50cnkpIHsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZW50cnksICZhbXA7YXJtX3BtdXMsIGVudHJ5KSB7CiAJCWFybV9wbXUgPSBlbnRyeS0mZ3Q7YXJtX3BtdTsKIAkJaWYgKGFybV9wbXUtJmd0O3BtdS50eXBlID09IHBtdV9pZCkgewogCQkJaWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSB8fAomIzQzOwkJCSAgICBrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSB8fAogCQkJICAgIChrdm0tJmd0O2FyY2gucG11X2ZpbHRlciAmYW1wOyZhbXA7IGt2bS0mZ3Q7YXJjaC5hcm1fcG11ICE9IGFybV9wbXUpKSB7CiAJCQkJcmV0ID0gLUVCVVNZOwogCQkJCWJyZWFrOwogCQkJfQogCiYjNDM7CQkJc2V0X2JpdChLVk1fQVJDSF9GTEFHX1BNVV9WM19FWFBMSUNJVCwgJmFtcDtrdm0tJmd0O2FyY2guZmxhZ3MpOwogCQkJa3ZtX2FybV9zZXRfcG11KGt2bSwgYXJtX3BtdSk7CiAJCQljcHVtYXNrX2NvcHkoa3ZtLSZndDthcmNoLnN1cHBvcnRlZF9jcHVzLCAmYW1wO2FybV9wbXUtJmd0O3N1cHBvcnRlZF9jcHVzKTsKIApAQCAtMTEyMiwyMSAmIzQzOzExOTAsMzkgQEAgc3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBtdV9pZCkKIAkJfQogCX0KIAotCW11dGV4X3VubG9jaygmYW1wO2FybV9wbXVzX2xvY2spOwogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwomIzQzOwomIzQzOwlpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pIHx8IGt2bS0mZ3Q7YXJjaC5wbXVfZmlsdGVyIHx8CiYjNDM7CSAgICB0ZXN0X2JpdChLVk1fQVJDSF9GTEFHX1BNVV9WM19FWFBMSUNJVCwgJmFtcDtrdm0tJmd0O2FyY2guZmxhZ3MpKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKJiM0MzsJc2V0X2JpdChLVk1fQVJDSF9GTEFHX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCAmYW1wO2t2bS0mZ3Q7YXJjaC5mbGFncyk7CiYjNDM7CWt2bS0mZ3Q7YXJjaC5ucl9wbXVfY291bnRlcnMgPSAwOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9ucl9jb3VudGVycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBuKQogewogCXN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtJmd0O2t2bTsKIAomIzQzOwlpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKIAlpZiAoIWt2bS0mZ3Q7YXJjaC5hcm1fcG11KQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChuICZndDsga3ZtX2FybV9wbXVfZ2V0X21heF9jb3VudGVycyhrdm0pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWt2bV9hcm1fc2V0X25yX2NvdW50ZXJzKGt2bSwgbik7CiYjNDM7CWt2bS0mZ3Q7YXJjaC5ucl9wbXVfY291bnRlcnMgPSBuOwogCXJldHVybiAwOwogfQogCkBAIC0xMjAwLDcgJiM0MzsxMjg2LDcgQEAgaW50IGt2bV9hcm1fcG11X3YzX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cikKIAkJICAgICBmaWx0ZXIuYWN0aW9uICE9IEtWTV9QTVVfRVZFTlRfREVOWSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pKQomIzQzOwkJaWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSB8fCBrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSkKIAkJCXJldHVybiAtRUJVU1k7CiAKIAkJaWYgKCFrdm0tJmd0O2FyY2guYXJtX3BtdSkKQEAgLTEyNDgsNiAmIzQzOzEzMzQsOCBAQCBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKQogCiAJCXJldHVybiBrdm1fYXJtX3BtdV92M19zZXRfbnJfY291bnRlcnModmNwdSwgbik7CiAJfQomIzQzOwljYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWToKJiM0MzsJCXJldHVybiBrdm1fYXJtX3BtdV92M19zZXRfcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdSk7CiAJY2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQ6CiAJCXJldHVybiBrdm1fYXJtX3BtdV92M19pbml0KHZjcHUpOwogCX0KQEAgLTEyNzQsNiAmIzQzOzEzNjIsOSBAQCBpbnQga3ZtX2FybV9wbXVfdjNfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKQogCQlpcnEgPSB2Y3B1LSZndDthcmNoLnBtdS5pcnFfbnVtOwogCQlyZXR1cm4gcHV0X3VzZXIoaXJxLCB1YWRkcik7CiAJfQomIzQzOwljYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWToKJiM0MzsJCWlmIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdS0mZ3Q7a3ZtKSkKJiM0MzsJCQlyZXR1cm4gMDsKIAl9CiAKIAlyZXR1cm4gLUVOWElPOwpAQCAtMTI4Nyw2ICYjNDM7MTM3OCw3IEBAIGludCBrdm1fYXJtX3BtdV92M19oYXNfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpCiAJY2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJTFRFUjoKIAljYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfU0VUX1BNVToKIAljYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfU0VUX05SX0NPVU5URVJTOgomIzQzOwljYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWToKIAkJaWYgKGt2bV92Y3B1X2hhc19wbXUodmNwdSkpCiAJCQlyZXR1cm4gMDsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9yZXNldC5jIGIvYXJjaC9hcm02NC9rdm0vcmVzZXQuYwppbmRleCAxMGViNzI0OWFhOWU4Li5jZGNkZWE4NTA5MDljIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9yZXNldC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3Jlc2V0LmMKQEAgLTE3OCwxNyAmIzQzOzE3OCwyNCBAQCBzdGF0aWMgdm9pZCBrdm1fdmNwdV9yZXNldF9zdmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogdm9pZCBrdm1fcmVzZXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IHZjcHVfcmVzZXRfc3RhdGUgcmVzZXRfc3RhdGU7Ci0JYm9vbCBsb2FkZWQ7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqcnVubmluZzsKJiM0MzsJYm9vbCBsb2FkZWQgPSBmYWxzZTsKIAogCXNwaW5fbG9jaygmYW1wO3ZjcHUtJmd0O2FyY2gubXBfc3RhdGVfbG9jayk7CiAJcmVzZXRfc3RhdGUgPSB2Y3B1LSZndDthcmNoLnJlc2V0X3N0YXRlOwogCXZjcHUtJmd0O2FyY2gucmVzZXRfc3RhdGUucmVzZXQgPSBmYWxzZTsKIAlzcGluX3VubG9jaygmYW1wO3ZjcHUtJmd0O2FyY2gubXBfc3RhdGVfbG9jayk7CiAKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlsb2FkZWQgPSAodmNwdS0mZ3Q7Y3B1ICE9IC0xKTsKLQlpZiAobG9hZGVkKQomIzQzOwlndWFyZChwcmVlbXB0KSgpOwomIzQzOwomIzQzOwlydW5uaW5nID0ga3ZtX2dldF9ydW5uaW5nX3ZjcHUoKTsKJiM0MzsJaWYgKHJ1bm5pbmcpIHsKJiM0MzsJCWlmIChLVk1fQlVHX09OKHJ1bm5pbmcgIT0gdmNwdSwgdmNwdS0mZ3Q7a3ZtKSkKJiM0MzsJCQlyZXR1cm47CiYjNDM7CiYjNDM7CQlsb2FkZWQgPSB0cnVlOwogCQlrdm1fYXJjaF92Y3B1X3B1dCh2Y3B1KTsKJiM0MzsJfQogCiAJaWYgKCFrdm1fYXJtX3ZjcHVfc3ZlX2ZpbmFsaXplZCh2Y3B1KSkgewogCQlpZiAodmNwdV9oYXNfZmVhdHVyZSh2Y3B1LCBLVk1fQVJNX1ZDUFVfU1ZFKSkKQEAgLTIxNSw3ICYjNDM7MjIyLDYgQEAgdm9pZCBrdm1fcmVzZXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIAlpZiAobG9hZGVkKQogCQlrdm1fYXJjaF92Y3B1X2xvYWQodmNwdSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlwcmVlbXB0X2VuYWJsZSgpOwogfQogCiB1MzIga3ZtX2dldF9wYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jCmluZGV4IDQ0YWFlNTJjNDczZDcuLmE1YzEyMTQ4MmM3MTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYwpAQCAtMTMyNiw3ICYjNDM7MTMyNiw3IEBAIHN0YXRpYyBib29sIGFjY2Vzc19wbXVfZXZ0eXBlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCwKIAogc3RhdGljIGludCBzZXRfcG1yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyLCB1NjQgdmFsKQogewotCXU2NCBtYXNrID0ga3ZtX3BtdV9hY2Nlc3NpYmxlX2NvdW50ZXJfbWFzayh2Y3B1KTsKJiM0MzsJdTY0IG1hc2sgPSBrdm1fcG11X2ltcGxlbWVudGVkX2NvdW50ZXJfbWFzayh2Y3B1KTsKIAogCV9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCByLSZndDtyZWcsIHZhbCAmYW1wOyBtYXNrKTsKIAlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7CkBAIC0xMzM0LDkgJiM0MzsxMzM0LDE4IEBAIHN0YXRpYyBpbnQgc2V0X3BtcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqciwgdTY0IHZhCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHNldF9wbXVfZXZ0eXBlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiYjNDM7CQkJICAgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqciwgdTY0IHZhbCkKJiM0Mzt7CiYjNDM7CV9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCByLSZndDtyZWcsIHZhbCk7CiYjNDM7CWt2bV9wbXVfcmVxdWVzdF9yZWNyZWF0ZSh2Y3B1KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBnZXRfcG1yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyLCB1NjQgKnZhbCkKIHsKLQl1NjQgbWFzayA9IGt2bV9wbXVfYWNjZXNzaWJsZV9jb3VudGVyX21hc2sodmNwdSk7CiYjNDM7CXU2NCBtYXNrID0ga3ZtX3BtdV9pbXBsZW1lbnRlZF9jb3VudGVyX21hc2sodmNwdSk7CiAKIAkqdmFsID0gX192Y3B1X3N5c19yZWcodmNwdSwgci0mZ3Q7cmVnKSAmYW1wOyBtYXNrOwogCXJldHVybiAwOwpAQCAtMTUxNyw2ICYjNDM7MTUyNiw3IEBAIHN0YXRpYyBpbnQgc2V0X3BtY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyLAogewogCXU4IG5ld19uID0gRklFTERfR0VUKEFSTVY4X1BNVV9QTUNSX04sIHZhbCk7CiAJc3RydWN0IGt2bSAqa3ZtID0gdmNwdS0mZ3Q7a3ZtOwomIzQzOwl1NjQgb2xkID0gX192Y3B1X3N5c19yZWcodmNwdSwgci0mZ3Q7cmVnKTsKIAogCW11dGV4X2xvY2soJmFtcDtrdm0tJmd0O2FyY2guY29uZmlnX2xvY2spOwogCkBAIC0xNTQ5LDcgJiM0MzsxNTU5LDcgQEAgc3RhdGljIGludCBzZXRfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnIsCiAJCXZhbCB8PSBBUk1WOF9QTVVfUE1DUl9MQzsKIAogCV9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCByLSZndDtyZWcsIHZhbCk7Ci0Ja3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFTE9BRF9QTVUsIHZjcHUpOwomIzQzOwlrdm1fcG11X2FwcGx5X3BtY3IodmNwdSwgb2xkLCB2YWwsIHRydWUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNTgzLDcgJiM0MzsxNTkzLDcgQEAgc3RhdGljIGludCBzZXRfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnIsCiAvKiBNYWNybyB0byBleHBhbmQgdGhlIFBNRVZUWVBFUm5fRUwwIHJlZ2lzdGVyICovCiAjZGVmaW5lIFBNVV9QTUVWVFlQRVJfRUwwKG4pCQkJCQkJXAogCXsgUE1VX1NZU19SRUcoUE1FVlRZUEVSbl9FTDAobikpLAkJCQlcCi0JICAucmVzZXQgPSByZXNldF9wbWV2dHlwZXIsCQkJCQlcCiYjNDM7CSAgLnJlc2V0ID0gcmVzZXRfcG1ldnR5cGVyLCAuc2V0X3VzZXIgPSBzZXRfcG11X2V2dHlwZXIsCVwKIAkgIC5hY2Nlc3MgPSBhY2Nlc3NfcG11X2V2dHlwZXIsIC5yZWcgPSAoUE1FVlRZUEVSMF9FTDAgJiM0MzsgbiksIH0KIAogLyogTWFjcm8gdG8gZXhwYW5kIHRoZSBBTVUgY291bnRlciBhbmQgdHlwZSByZWdpc3RlcnMqLwpAQCAtMzExNCwxNyAmIzQzOzMxMjQsMjIgQEAgc3RhdGljIGJvb2wgYWNjZXNzX21kY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCX0KIAogCV9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBNRENSX0VMMiwgdmFsKTsKLQotCS8qCi0JICogUmVxdWVzdCBhIHJlbG9hZCBvZiB0aGUgUE1VIHRvIGVuYWJsZS9kaXNhYmxlIHRoZSBjb3VudGVycwotCSAqIGFmZmVjdGVkIGJ5IEhQTUUuCi0JICovCi0JaWYgKChvbGQgXiB2YWwpICZhbXA7IE1EQ1JfRUwyX0hQTUUpCi0JCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUxPQURfUE1VLCB2Y3B1KTsKJiM0MzsJa3ZtX3BtdV9hcHBseV9tZGNyKHZjcHUsIG9sZCwgdmFsKTsKIAogCXJldHVybiB0cnVlOwogfQogCiYjNDM7c3RhdGljIGludCBzZXRfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkLAomIzQzOwkJICAgIHU2NCB2YWwpCiYjNDM7ewomIzQzOwl1NjQgb2xkID0gX192Y3B1X3N5c19yZWcodmNwdSwgTURDUl9FTDIpOwomIzQzOwomIzQzOwlfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgTURDUl9FTDIsIHZhbCk7CiYjNDM7CWt2bV9wbXVfYXBwbHlfbWRjcih2Y3B1LCBvbGQsIHZhbCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIGFjY2Vzc19yYXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkgICAgICAgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLAogCQkgICAgICAgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcikKQEAgLTM4MjcsNyAmIzQzOzM4NDIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyBzeXNfcmVnX2Rlc2NzW10gPSB7CiAJICogaW4gMzJiaXQgbW9kZS4gSGVyZSB3ZSBjaG9vc2UgdG8gcmVzZXQgaXQgYXMgemVybyBmb3IgY29uc2lzdGVuY3kuCiAJICovCiAJeyBQTVVfU1lTX1JFRyhQTUNDRklMVFJfRUwwKSwgLmFjY2VzcyA9IGFjY2Vzc19wbXVfZXZ0eXBlciwKLQkgIC5yZXNldCA9IHJlc2V0X3ZhbCwgLnJlZyA9IFBNQ0NGSUxUUl9FTDAsIC52YWwgPSAwIH0sCiYjNDM7CSAgLnJlc2V0ID0gcmVzZXRfdmFsLCAucmVnID0gUE1DQ0ZJTFRSX0VMMCwgLnZhbCA9IDAsCiYjNDM7CSAgLnNldF91c2VyID0gc2V0X3BtdV9ldnR5cGVyIH0sCiAKIAlFTDJfUkVHX1ZOQ1IoVlBJRFJfRUwyLCByZXNldF91bmtub3duLCAwKSwKIAlFTDJfUkVHX1ZOQ1IoVk1QSURSX0VMMiwgcmVzZXRfdW5rbm93biwgMCksCkBAIC0zODM2LDcgJiM0MzszODUyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2Mgc3lzX3JlZ19kZXNjc1tdID0gewogCUVMMl9SRUdfRklMVEVSRUQoU0NUTFIyX0VMMiwgYWNjZXNzX3ZtX3JlZywgcmVzZXRfdmFsLCAwLAogCQkJIHNjdGxyMl9lbDJfdmlzaWJpbGl0eSksCiAJRUwyX1JFR19WTkNSKEhDUl9FTDIsIHJlc2V0X2hjciwgMCksCi0JRUwyX1JFRyhNRENSX0VMMiwgYWNjZXNzX21kY3IsIHJlc2V0X21kY3IsIDApLAomIzQzOwlTWVNfUkVHX1VTRVJfRklMVEVSKE1EQ1JfRUwyLCBhY2Nlc3NfbWRjciwgcmVzZXRfbWRjciwgMCwKJiM0MzsJCQkgICAgTlVMTCwgc2V0X21kY3IsIGVsMl92aXNpYmlsaXR5KSwKIAlFTDJfUkVHKENQVFJfRUwyLCBhY2Nlc3NfcncsIHJlc2V0X3ZhbCwgQ1BUUl9OVkhFX0VMMl9SRVMxKSwKIAlFTDJfUkVHX1ZOQ1IoSFNUUl9FTDIsIHJlc2V0X3ZhbCwgMCksCiAJRUwyX1JFR19WTkNSX0ZJTFQoSEZHUlRSX0VMMiwgZmd0X3Zpc2liaWxpdHkpLApAQCAtNTM5MCw3ICYjNDM7NTQwNyw3IEBAIHZvaWQga3ZtX3Jlc2V0X3N5c19yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlzZXRfYml0KEtWTV9BUkNIX0ZMQUdfSURfUkVHU19JTklUSUFMSVpFRCwgJmFtcDtrdm0tJmd0O2FyY2guZmxhZ3MpOwogCiAJaWYgKGt2bV92Y3B1X2hhc19wbXUodmNwdSkpCi0JCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUxPQURfUE1VLCB2Y3B1KTsKJiM0MzsJCWt2bV9wbXVfcmVxdWVzdF9yZWNyZWF0ZSh2Y3B1KTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2t2bS9hcm1fcG11LmggYi9pbmNsdWRlL2t2bS9hcm1fcG11LmgKaW5kZXggNmI0YTExOGQxN2NhOS4uMTdiODYxZWQxNzFkNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9rdm0vYXJtX3BtdS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUva3ZtL2FybV9wbXUuaApAQCAtMzIsNiAmIzQzOzMyLDcgQEAgc3RydWN0IGt2bV9wbXUgewogCXN0cnVjdCBrdm1fcG1jIHBtY1tLVk1fQVJNVjhfUE1VX01BWF9DT1VOVEVSU107CiAJaW50IGlycV9udW07CiAJYm9vbCBjcmVhdGVkOwomIzQzOwlib29sIGV2ZW50c19uZWVkX3JlY3JlYXRlOwogfTsKIAogc3RydWN0IGFybV9wbXVfZW50cnkgewpAQCAtNTUsOSAmIzQzOzU2LDEzIEBAIHZvaWQga3ZtX3BtdV9zeW5jX2h3c3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGJvb2wga3ZtX3BtdV9zaG91bGRfbm90aWZ5X3VzZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGJvb2wga3ZtX3BtdV91cGRhdGVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIGt2bV9wbXVfc29mdHdhcmVfaW5jcmVtZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhbCk7CiYjNDM7dm9pZCBrdm1fcG11X3JlcXVlc3RfcmVjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKJiM0Mzt2b2lkIGt2bV9wbXVfYXBwbHlfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBvbGQsIHU2NCB2YWwsIGJvb2wgZm9yY2VfcmVsb2FkKTsKIHZvaWQga3ZtX3BtdV9oYW5kbGVfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpOwomIzQzO3ZvaWQga3ZtX3BtdV9hcHBseV9tZGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9sZCwgdTY0IHZhbCk7CiB2b2lkIGt2bV9wbXVfc2V0X2NvdW50ZXJfZXZlbnRfdHlwZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhLAogCQkJCSAgICB1NjQgc2VsZWN0X2lkeCk7CiYjNDM7dm9pZCBrdm1fdmNwdV9sb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBsYXN0X2NwdSk7CiB2b2lkIGt2bV92Y3B1X3JlbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGludCBrdm1fYXJtX3BtdV92M19zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkgICAgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cik7CkBAIC0xMzUsNyAmIzQzOzE0MCwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3BtdV9zaG91bGRfbm90aWZ5X3VzZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogfQogc3RhdGljIGlubGluZSBib29sIGt2bV9wbXVfdXBkYXRlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHsgcmV0dXJuIGZhbHNlOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3BtdV9zb2Z0d2FyZV9pbmNyZW1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKSB7fQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X3JlcXVlc3RfcmVjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X2FwcGx5X3BtY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgb2xkLCB1NjQgdmFsLCBib29sIGZvcmNlX3JlbG9hZCkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X2hhbmRsZV9wbWNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhbCkge30KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3BtdV9hcHBseV9tZGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9sZCwgdTY0IHZhbCkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X3NldF9jb3VudGVyX2V2ZW50X3R5cGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCQkJICB1NjQgZGF0YSwgdTY0IHNlbGVjdF9pZHgpIHt9CiBzdGF0aWMgaW5saW5lIGludCBrdm1fYXJtX3BtdV92M19zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCkBAIC0xNjcsNiAmIzQzOzE3NSw3IEBAIHN0YXRpYyBpbmxpbmUgdTY0IGt2bV9wbXVfZ2V0X3BtY2VpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcG1jZWlkMSkKIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X3VwZGF0ZV92Y3B1X2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfcG11X3Jlc3RvcmVfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fQogc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X3BtdV9yZXN0b3JlX2hvc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdmNwdV9sb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBsYXN0X2NwdSkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdmNwdV9yZWxvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge30KIHN0YXRpYyBpbmxpbmUgdTgga3ZtX2FybV9wbXVfZ2V0X3BtdXZlcl9saW1pdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvdG9vbHMvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oIGIvdG9vbHMvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oCmluZGV4IDFjMTNiZmEyZDM4YWEuLjM5YTFhMWU0MTJlNjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgKQEAgLTQzNyw2ICYjNDM7NDM3LDcgQEAgZW51bSB7CiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVIJCTIKICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9QTVUJCTMKICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9OUl9DT1VOVEVSUwk0CiYjNDM7I2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWQk1CiAjZGVmaW5lIEtWTV9BUk1fVkNQVV9USU1FUl9DVFJMCQkxCiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1RJTUVSX0lSUV9WVElNRVIJCTAKICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfVElNRVJfSVJRX1BUSU1FUgkJMQpkaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS9saW51eC9iaXRmaWVsZC5oIGIvdG9vbHMvaW5jbHVkZS9saW51eC9iaXRmaWVsZC5oCmluZGV4IGRkZjgxZjI0OTU2YmEuLjFjNjMzMzQzZDU3NjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2luY2x1ZGUvbGludXgvYml0ZmllbGQuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9pbmNsdWRlL2xpbnV4L2JpdGZpZWxkLmgKQEAgLTE0MiwzMiAmIzQzOzE0MiwzMiBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHU2NCBmaWVsZF9tYXNrKHU2NCBmaWVsZCkKIAlyZXR1cm4gZmllbGQgLyBmaWVsZF9tdWx0aXBsaWVyKGZpZWxkKTsKIH0KICNkZWZpbmUgZmllbGRfbWF4KGZpZWxkKQkoKHR5cGVvZihmaWVsZCkpZmllbGRfbWFzayhmaWVsZCkpCi0jZGVmaW5lIF9fX19NQUtFX09QKHR5cGUsYmFzZSx0byxmcm9tKQkJCQkJXAotc3RhdGljIF9fYWx3YXlzX2lubGluZSBfXyMjdHlwZSB0eXBlIyNfZW5jb2RlX2JpdHMoYmFzZSB2LCBiYXNlIGZpZWxkKQlcCiYjNDM7I2RlZmluZSBfX19fTUFLRV9PUChuYW1lLHR5cGUsYmFzZSx0byxmcm9tKQkJCQlcCiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB0eXBlIG5hbWUjI19lbmNvZGVfYml0cyhiYXNlIHYsIGJhc2UgZmllbGQpCVwKIHsJCQkJCQkJCQlcCiAJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHYpICZhbXA7JmFtcDsgKHYgJmFtcDsgfmZpZWxkX21hc2soZmllbGQpKSkJXAogCQlfX2ZpZWxkX292ZXJmbG93KCk7CQkJCQlcCiAJcmV0dXJuIHRvKCh2ICZhbXA7IGZpZWxkX21hc2soZmllbGQpKSAqIGZpZWxkX211bHRpcGxpZXIoZmllbGQpKTsJXAogfQkJCQkJCQkJCVwKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX18jI3R5cGUgdHlwZSMjX3JlcGxhY2VfYml0cyhfXyMjdHlwZSBvbGQsCVwKLQkJCQkJYmFzZSB2YWwsIGJhc2UgZmllbGQpCQlcCiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB0eXBlIG5hbWUjI19yZXBsYWNlX2JpdHModHlwZSBvbGQsCQlcCiYjNDM7CQkJCQkJYmFzZSB2YWwsIGJhc2UgZmllbGQpCVwKIHsJCQkJCQkJCQlcCi0JcmV0dXJuIChvbGQgJmFtcDsgfnRvKGZpZWxkKSkgfCB0eXBlIyNfZW5jb2RlX2JpdHModmFsLCBmaWVsZCk7CVwKJiM0MzsJcmV0dXJuIChvbGQgJmFtcDsgfnRvKGZpZWxkKSkgfCBuYW1lIyNfZW5jb2RlX2JpdHModmFsLCBmaWVsZCk7CVwKIH0JCQkJCQkJCQlcCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdHlwZSMjcF9yZXBsYWNlX2JpdHMoX18jI3R5cGUgKnAsCQlcCiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG5hbWUjI3BfcmVwbGFjZV9iaXRzKHR5cGUgKnAsCQlcCiAJCQkJCWJhc2UgdmFsLCBiYXNlIGZpZWxkKQkJXAogewkJCQkJCQkJCVwKLQkqcCA9ICgqcCAmYW1wOyB+dG8oZmllbGQpKSB8IHR5cGUjI19lbmNvZGVfYml0cyh2YWwsIGZpZWxkKTsJXAomIzQzOwkqcCA9ICgqcCAmYW1wOyB+dG8oZmllbGQpKSB8IG5hbWUjI19lbmNvZGVfYml0cyh2YWwsIGZpZWxkKTsJXAogfQkJCQkJCQkJCVwKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYmFzZSB0eXBlIyNfZ2V0X2JpdHMoX18jI3R5cGUgdiwgYmFzZSBmaWVsZCkJXAomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYmFzZSBuYW1lIyNfZ2V0X2JpdHModHlwZSB2LCBiYXNlIGZpZWxkKQlcCiB7CQkJCQkJCQkJXAogCXJldHVybiAoZnJvbSh2KSAmYW1wOyBmaWVsZCkvZmllbGRfbXVsdGlwbGllcihmaWVsZCk7CQlcCiB9Ci0jZGVmaW5lIF9fTUFLRV9PUChzaXplKQkJCQkJCQlcCi0JX19fX01BS0VfT1AobGUjI3NpemUsdSMjc2l6ZSxjcHVfdG9fbGUjI3NpemUsbGUjI3NpemUjI190b19jcHUpCVwKLQlfX19fTUFLRV9PUChiZSMjc2l6ZSx1IyNzaXplLGNwdV90b19iZSMjc2l6ZSxiZSMjc2l6ZSMjX3RvX2NwdSkJXAotCV9fX19NQUtFX09QKHUjI3NpemUsdSMjc2l6ZSwsKQotX19fX01BS0VfT1AodTgsdTgsLCkKJiM0MzsjZGVmaW5lIF9fTUFLRV9PUChzaXplKQkJCQkJCQkJCVwKJiM0MzsJX19fX01BS0VfT1AobGUjI3NpemUsX19sZSMjc2l6ZSx1IyNzaXplLGNwdV90b19sZSMjc2l6ZSxsZSMjc2l6ZSMjX3RvX2NwdSkJXAomIzQzOwlfX19fTUFLRV9PUChiZSMjc2l6ZSxfX2JlIyNzaXplLHUjI3NpemUsY3B1X3RvX2JlIyNzaXplLGJlIyNzaXplIyNfdG9fY3B1KQlcCiYjNDM7CV9fX19NQUtFX09QKHUjI3NpemUsdSMjc2l6ZSx1IyNzaXplLCwpCiYjNDM7X19fX01BS0VfT1AodTgsdTgsdTgsLCkKIF9fTUFLRV9PUCgxNikKIF9fTUFLRV9PUCgzMikKIF9fTUFLRV9PUCg2NCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jCmluZGV4IDIyMjIzMzk1OTY5ZTAuLjYzNzY1M2Y3YTI1YjkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYwpAQCAtMjUsNiAmIzQzOzI1LDE0IEBACiAvKiBUaGUgY3ljbGUgY291bnRlciBiaXQgcG9zaXRpb24gdGhhdCYjMzk7cyBjb21tb24gYW1vbmcgdGhlIFBNVSByZWdpc3RlcnMgKi8KICNkZWZpbmUgQVJNVjhfUE1VX0NZQ0xFX0lEWAkJMzEKIAomIzQzOyNpZm5kZWYgTURDUl9FTDJfSFBNTgomIzQzOyNkZWZpbmUgTURDUl9FTDJfSFBNTgkJCUdFTk1BU0tfVUxMKDQsIDApCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2lmbmRlZiBNRENSX0VMMl9IUE1FCiYjNDM7I2RlZmluZSBNRENSX0VMMl9IUE1FCQkJQklUX1VMTCg3KQomIzQzOyNlbmRpZgomIzQzOwogc3RydWN0IHZwbXVfdm0gewogCXN0cnVjdCBrdm1fdm0gKnZtOwogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKQEAgLTQwMywxMiAmIzQzOzQxMSw3IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZV92cG11X3ZtKHZvaWQgKmd1ZXN0X2NvZGUpCiB7CiAJc3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDsKIAl1OCBwbXV2ZXIsIGVjOwotCXU2NCBkZnIwLCBpcnEgPSAyMzsKLQlzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyIGlycV9hdHRyID0gewotCQkuZ3JvdXAgPSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCi0JCS5hdHRyID0gS1ZNX0FSTV9WQ1BVX1BNVV9WM19JUlEsCi0JCS5hZGRyID0gKHU2NCkmYW1wO2lycSwKLQl9OwomIzQzOwl1NjQgZGZyMDsKIAogCS8qIFRoZSB0ZXN0IGNyZWF0ZXMgdGhlIHZwbXVfdm0gbXVsdGlwbGUgdGltZXMuIEVuc3VyZSBhIGNsZWFuIHN0YXRlICovCiAJbWVtc2V0KCZhbXA7dnBtdV92bSwgMCwgc2l6ZW9mKHZwbXVfdm0pKTsKQEAgLTQzNCw4ICYjNDM7NDM3LDYgQEAgc3RhdGljIHZvaWQgY3JlYXRlX3ZwbXVfdm0odm9pZCAqZ3Vlc3RfY29kZSkKIAlURVNUX0FTU0VSVChwbXV2ZXIgIT0gSURfQUE2NERGUjBfRUwxX1BNVVZlcl9JTVBfREVGICZhbXA7JmFtcDsKIAkJICAgIHBtdXZlciAmZ3Q7PSBJRF9BQTY0REZSMF9FTDFfUE1VVmVyX0lNUCwKIAkJICAgICYjMzQ7VW5leHBlY3RlZCBQTVVWRVIgKDB4JXgpIG9uIHRoZSB2Q1BVIHdpdGggUE1VdjMmIzM0OywgcG11dmVyKTsKLQotCXZjcHVfaW9jdGwodnBtdV92bS52Y3B1LCBLVk1fU0VUX0RFVklDRV9BVFRSLCAmYW1wO2lycV9hdHRyKTsKIH0KIAogc3RhdGljIHZvaWQgZGVzdHJveV92cG11X3ZtKHZvaWQpCkBAIC00NDMsMTEgJiM0Mzs0NDQsMTAgQEAgc3RhdGljIHZvaWQgZGVzdHJveV92cG11X3ZtKHZvaWQpCiAJa3ZtX3ZtX2ZyZWUodnBtdV92bS52bSk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ1bl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBtY3JfbikKJiM0MztzdGF0aWMgdm9pZCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IHVjYWxsIHVjOwogCi0JdmNwdV9hcmdzX3NldCh2Y3B1LCAxLCBwbWNyX24pOwogCXZjcHVfcnVuKHZjcHUpOwogCXN3aXRjaCAoZ2V0X3VjYWxsKHZjcHUsICZhbXA7dWMpKSB7CiAJY2FzZSBVQ0FMTF9BQk9SVDoKQEAgLTQ2MSwxNSAmIzQzOzQ2MSwxNyBAQCBzdGF0aWMgdm9pZCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBwbWNyX24pCiAJfQogfQogCi1zdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnModW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sIGV4cGVjdF9mYWlsKQomIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X2NvZGVfZG9uZSh2b2lkKQomIzQzO3sKJiM0MzsJR1VFU1RfRE9ORSgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzZXRfbnJfY291bnRlcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAomIzQzOwkJCSAgICB1bnNpZ25lZCBpbnQgbnJfY291bnRlcnMsIGJvb2wgZXhwZWN0X2ZhaWwpCiB7Ci0Jc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwogCXVuc2lnbmVkIGludCBwcmV2OwogCWludCByZXQ7CiAKLQljcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTsKLQl2Y3B1ID0gdnBtdV92bS52Y3B1OwotCiAJcHJldiA9IGdldF9wbWNyX24odmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19QTUNSX0VMMCkpKTsKIAogCXJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLApAQCAtNDgxLDYgJiM0Mzs0ODMsMjYgQEAgc3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycywgYm9vbAogCQkJICAgIG5yX2NvdW50ZXJzLCBwcmV2KTsKIAllbHNlCiAJCVRFU1RfQVNTRVJUKCFyZXQsIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycywKJiM0MzsJCQkJCQkgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5LAomIzQzOwkJCQkJCSBib29sIGV4cGVjdF9mYWlsKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwomIzQzOwl1NjQgaXJxID0gMjM7CiYjNDM7CiYjNDM7CWNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpOwomIzQzOwl2Y3B1ID0gdnBtdV92bS52Y3B1OwomIzQzOwomIzQzOwlpZiAoZml4ZWRfY291bnRlcnNfb25seSkKJiM0MzsJCXZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwKJiM0MzsJCQkJICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpOwomIzQzOwomIzQzOwl2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgJmFtcDtpcnEpOwomIzQzOwomIzQzOwlzZXRfbnJfY291bnRlcnModmNwdSwgbnJfY291bnRlcnMsIGV4cGVjdF9mYWlsKTsKIAogCXZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTsKIH0KQEAgLTQ4OSwyMSAmIzQzOzUxMSwyMiBAQCBzdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnModW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sCiAgKiBDcmVhdGUgYSBndWVzdCB3aXRoIG9uZSB2Q1BVLCBzZXQgdGhlIFBNQ1JfRUwwLk4gZm9yIHRoZSB2Q1BVIHRvIEBwbWNyX24sCiAgKiBhbmQgcnVuIHRoZSB0ZXN0LgogICovCi1zdGF0aWMgdm9pZCBydW5fYWNjZXNzX3Rlc3QodTY0IHBtY3JfbikKJiM0MztzdGF0aWMgdm9pZCBydW5fYWNjZXNzX3Rlc3QodTY0IHBtY3JfbiwgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5KQogewogCXU2NCBzcDsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiAJc3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDsKIAotCXByX2RlYnVnKCYjMzQ7VGVzdCB3aXRoIHBtY3JfbiAlbHVcbiYjMzQ7LCBwbWNyX24pOwomIzQzOwlwcl9kZWJ1ZygmIzM0O1Rlc3Qgd2l0aCBwbWNyX24gJWx1LCBmaXhlZF9jb3VudGVyc19vbmx5ICVkXG4mIzM0OywgcG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5KTsKIAotCXRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZhbHNlKTsKJiM0MzsJdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZml4ZWRfY291bnRlcnNfb25seSwgZmFsc2UpOwogCXZjcHUgPSB2cG11X3ZtLnZjcHU7CiAKIAkvKiBTYXZlIHRoZSBpbml0aWFsIHNwIHRvIHJlc3RvcmUgdGhlbSBsYXRlciB0byBydW4gdGhlIGd1ZXN0IGFnYWluICovCiAJc3AgPSB2Y3B1X2dldF9yZWcodmNwdSwgY3R4dF9yZWdfYWxpYXModmNwdSwgU1lTX1NQX0VMMSkpOwogCi0JcnVuX3ZjcHUodmNwdSwgcG1jcl9uKTsKJiM0MzsJdmNwdV9hcmdzX3NldCh2Y3B1LCAxLCBwbWNyX24pOwomIzQzOwlydW5fdmNwdSh2Y3B1KTsKIAogCS8qCiAJICogUmVzZXQgYW5kIHJlLWluaXRpYWxpemUgdGhlIHZDUFUsIGFuZCBydW4gdGhlIGd1ZXN0IGNvZGUgYWdhaW4gdG8KQEAgLTUxNiw3ICYjNDM7NTM5LDggQEAgc3RhdGljIHZvaWQgcnVuX2FjY2Vzc190ZXN0KHU2NCBwbWNyX24pCiAJdmNwdV9zZXRfcmVnKHZjcHUsIGN0eHRfcmVnX2FsaWFzKHZjcHUsIFNZU19TUF9FTDEpLCBzcCk7CiAJdmNwdV9zZXRfcmVnKHZjcHUsIEFSTTY0X0NPUkVfUkVHKHJlZ3MucGMpLCAodTY0KWd1ZXN0X2NvZGUpOwogCi0JcnVuX3ZjcHUodmNwdSwgcG1jcl9uKTsKJiM0MzsJdmNwdV9hcmdzX3NldCh2Y3B1LCAxLCBwbWNyX24pOwomIzQzOwlydW5fdmNwdSh2Y3B1KTsKIAogCWRlc3Ryb3lfdnBtdV92bSgpOwogfQpAQCAtNTMxLDE0ICYjNDM7NTU1LDE0IEBAIHN0YXRpYyBzdHJ1Y3QgcG1yZWdfc2V0cyB2YWxpZGl0eV9jaGVja19yZWdfc2V0c1tdID0gewogICogQ3JlYXRlIGEgVk0sIGFuZCBjaGVjayBpZiBLVk0gaGFuZGxlcyB0aGUgdXNlcnNwYWNlIGFjY2Vzc2VzIG9mCiAgKiB0aGUgUE1VIHJlZ2lzdGVyIHNldHMgaW4gQHZhbGlkaXR5X2NoZWNrX3JlZ19zZXRzW10gY29ycmVjdGx5LgogICovCi1zdGF0aWMgdm9pZCBydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QodTY0IHBtY3JfbikKJiM0MztzdGF0aWMgdm9pZCBydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QodTY0IHBtY3JfbiwgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5KQogewogCWludCBpOwogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKIAl1NjQgc2V0X3JlZ19pZCwgY2xyX3JlZ19pZCwgcmVnX3ZhbDsKIAl1NjQgdmFsaWRfY291bnRlcnNfbWFzaywgbWF4X2NvdW50ZXJzX21hc2s7CiAKLQl0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCBmYWxzZSk7CiYjNDM7CXRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHksIGZhbHNlKTsKIAl2Y3B1ID0gdnBtdV92bS52Y3B1OwogCiAJdmFsaWRfY291bnRlcnNfbWFzayA9IGdldF9jb3VudGVyc19tYXNrKHBtY3Jfbik7CkBAIC01ODMsMTYgJiM0Mzs2MDcsOTQgQEAgc3RhdGljIHZvaWQgcnVuX3BtcmVnc192YWxpZGl0eV90ZXN0KHU2NCBwbWNyX24pCiAJZGVzdHJveV92cG11X3ZtKCk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBydW5fbWRjcl9lbDJfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCBpbml0OwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiYjNDM7CXU2NCBleHBlY3RlZF9tZGNyLCBtZGNyOwomIzQzOwl1NjQgaXJxID0gMjM7CiYjNDM7CiYjNDM7CXByX2RlYnVnKCYjMzQ7TURDUl9FTDIgdGVzdCB3aXRoIHBtY3JfbiAlbHUsIGZpeGVkX2NvdW50ZXJzX29ubHkgJWRcbiYjMzQ7LAomIzQzOwkJIHBtY3JfbiwgZml4ZWRfY291bnRlcnNfb25seSk7CiYjNDM7CiYjNDM7CWNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpOwomIzQzOwlpZiAoIXZtX3N1cHBvcnRzX2VsMih2cG11X3ZtLnZtKSkgewomIzQzOwkJZGVzdHJveV92cG11X3ZtKCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJdmNwdSA9IHZwbXVfdm0udmNwdTsKJiM0MzsKJiM0MzsJbWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTsKJiM0MzsJZXhwZWN0ZWRfbWRjciA9IHU2NF9yZXBsYWNlX2JpdHMobWRjciwgRklFTERfTUFYKE1EQ1JfRUwyX0hQTU4pLAomIzQzOwkJCQkJIE1EQ1JfRUwyX0hQTU4pOwomIzQzOwl2Y3B1X3NldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSwKJiM0MzsJCSAgICAgZXhwZWN0ZWRfbWRjcik7CiYjNDM7CiYjNDM7CW1kY3IgPSB2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSk7CiYjNDM7CVRFU1RfQVNTRVJUKG1kY3IgPT0gZXhwZWN0ZWRfbWRjciwKJiM0MzsJCSAgICAmIzM0O01EQ1JfRUwyIHdhcyBub3QgcHJvcGVybHkgdXBkYXRlZCBhZnRlciBIUE1OIHdyaXRlIChleHBlY3RlZCAweCVseCwgZ290IDB4JWx4KSYjMzQ7LAomIzQzOwkJICAgIGV4cGVjdGVkX21kY3IsIG1kY3IpOwomIzQzOwomIzQzOwlpZiAoZml4ZWRfY291bnRlcnNfb25seSkgewomIzQzOwkJdmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLAomIzQzOwkJCQkgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7CiYjNDM7CiYjNDM7CQltZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpOwomIzQzOwkJVEVTVF9BU1NFUlQobWRjciA9PSBleHBlY3RlZF9tZGNyLAomIzQzOwkJCSAgICAmIzM0O01EQ1JfRUwyIGNoYW5nZWQgYWZ0ZXIgUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkgKGV4cGVjdGVkIDB4JWx4LCBnb3QgMHglbHgpJiMzNDssCiYjNDM7CQkJICAgIGV4cGVjdGVkX21kY3IsIG1kY3IpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNldF9ucl9jb3VudGVycyh2Y3B1LCBwbWNyX24sIGZhbHNlKTsKJiM0MzsKJiM0MzsJbWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTsKJiM0MzsJVEVTVF9BU1NFUlQobWRjciA9PSBleHBlY3RlZF9tZGNyLAomIzQzOwkJICAgICYjMzQ7TURDUl9FTDIgY2hhbmdlZCBhZnRlciBQTVVfVjNfU0VUX05SX0NPVU5URVJTIChleHBlY3RlZCAweCVseCwgZ290IDB4JWx4KSYjMzQ7LAomIzQzOwkJICAgIGV4cGVjdGVkX21kY3IsIG1kY3IpOwomIzQzOwomIzQzOwl2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgJmFtcDtpcnEpOwomIzQzOwomIzQzOwl2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQsIE5VTEwpOwomIzQzOwomIzQzOwltZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpOwomIzQzOwlURVNUX0FTU0VSVChtZGNyID09IGV4cGVjdGVkX21kY3IsCiYjNDM7CQkgICAgJiMzNDtNRENSX0VMMiBjaGFuZ2VkIGFmdGVyIFBNVV9WM19JTklUIChleHBlY3RlZCAweCVseCwgZ290IDB4JWx4KSYjMzQ7LAomIzQzOwkJICAgIGV4cGVjdGVkX21kY3IsIG1kY3IpOwomIzQzOwomIzQzOwlleHBlY3RlZF9tZGNyID0gbWRjciBeIE1EQ1JfRUwyX0hQTUU7CiYjNDM7CXZjcHVfc2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpLAomIzQzOwkJICAgICBleHBlY3RlZF9tZGNyKTsKJiM0MzsKJiM0MzsJbWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTsKJiM0MzsJVEVTVF9BU1NFUlQobWRjciA9PSBleHBlY3RlZF9tZGNyLAomIzQzOwkJICAgICYjMzQ7TURDUl9FTDIgd2FzIG5vdCBwcm9wZXJseSB1cGRhdGVkIGFmdGVyIEhQTUUgd3JpdGUgKGV4cGVjdGVkIDB4JWx4LCBnb3QgMHglbHgpJiMzNDssCiYjNDM7CQkgICAgZXhwZWN0ZWRfbWRjciwgbWRjcik7CiYjNDM7CiYjNDM7CWt2bV9nZXRfZGVmYXVsdF92Y3B1X3RhcmdldCh2cG11X3ZtLnZtLCAmYW1wO2luaXQpOwomIzQzOwlpbml0LmZlYXR1cmVzWzBdIHw9ICgxICZsdDsmbHQ7IEtWTV9BUk1fVkNQVV9QTVVfVjMpOwomIzQzOwlhYXJjaDY0X3ZjcHVfc2V0dXAodmNwdSwgJmFtcDtpbml0KTsKJiM0MzsKJiM0MzsJbWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTsKJiM0MzsJVEVTVF9BU1NFUlQoRklFTERfR0VUKE1EQ1JfRUwyX0hQTU4sIG1kY3IpID09IHBtY3JfbiwKJiM0MzsJCSAgICAmIzM0O01EQ1JfRUwyLkhQTU4gaXMgbm90IHJlc2V0IGFmdGVyIElOSVQgKGV4cGVjdGVkICVsdSwgZ290ICVsdSkmIzM0OywKJiM0MzsJCSAgICBwbWNyX24sIEZJRUxEX0dFVChNRENSX0VMMl9IUE1OLCBtZGNyKSk7CiYjNDM7CiYjNDM7CWRlc3Ryb3lfdnBtdV92bSgpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBDcmVhdGUgYSBndWVzdCB3aXRoIG9uZSB2Q1BVLCBhbmQgYXR0ZW1wdCB0byBzZXQgdGhlIFBNQ1JfRUwwLk4gZm9yCiAgKiB0aGUgdkNQVSB0byBAcG1jcl9uLCB3aGljaCBpcyBsYXJnZXIgdGhhbiB0aGUgaG9zdCB2YWx1ZS4KICAqIFRoZSBhdHRlbXB0IHNob3VsZCBmYWlsIGFzIEBwbWNyX24gaXMgdG9vIGJpZyB0byBzZXQgZm9yIHRoZSB2Q1BVLgogICovCi1zdGF0aWMgdm9pZCBydW5fZXJyb3JfdGVzdCh1NjQgcG1jcl9uKQomIzQzO3N0YXRpYyB2b2lkIHJ1bl9lcnJvcl90ZXN0KHU2NCBwbWNyX24sIGJvb2wgZml4ZWRfY291bnRlcnNfb25seSkKIHsKIAlwcl9kZWJ1ZygmIzM0O0Vycm9yIHRlc3Qgd2l0aCBwbWNyX24gJWx1IChsYXJnZXIgdGhhbiB0aGUgaG9zdClcbiYjMzQ7LCBwbWNyX24pOwogCi0JdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgdHJ1ZSk7CiYjNDM7CXRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHksIHRydWUpOwogCWRlc3Ryb3lfdnBtdV92bSgpOwogfQogCkBAIC02MjIsMjIgJiM0Mzs3MjQsMTgzIEBAIHN0YXRpYyBib29sIGt2bV9zdXBwb3J0c19ucl9jb3VudGVyc19hdHRyKHZvaWQpCiAJcmV0dXJuIHN1cHBvcnRlZDsKIH0KIAotaW50IG1haW4odm9pZCkKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3NldF9ucl9jb3VudGVyc19hZnRlcl92Y3B1X3J1bih2b2lkKQogewotCXU2NCBpLCBwbWNyX247CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqcnVubmluZ192Y3B1LCAqc3RvcHBlZF92Y3B1OwomIzQzOwl1bnNpZ25lZCBpbnQgbnJfY291bnRlcnMgPSAwOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCBpbml0OwomIzQzOwlzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsJaW50IHJldDsKJiM0MzsJdTY0IGlycSA9IDIzOwomIzQzOwomIzQzOwl2bSA9IHZtX2NyZWF0ZSgyKTsKJiM0MzsJdm1faW9jdGwodm0sIEtWTV9BUk1fUFJFRkVSUkVEX1RBUkdFVCwgJmFtcDtpbml0KTsKJiM0MzsJaW5pdC5mZWF0dXJlc1swXSB8PSBCSVQoS1ZNX0FSTV9WQ1BVX1BNVV9WMyk7CiYjNDM7CXJ1bm5pbmdfdmNwdSA9IGFhcmNoNjRfdmNwdV9hZGQodm0sIDAsICZhbXA7aW5pdCwgZ3Vlc3RfY29kZV9kb25lKTsKJiM0MzsJc3RvcHBlZF92Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMSwgJmFtcDtpbml0LCBndWVzdF9jb2RlX2RvbmUpOwomIzQzOwlrdm1fYXJjaF92bV9maW5hbGl6ZV92Y3B1cyh2bSk7CiYjNDM7CiYjNDM7CXZjcHVfZGV2aWNlX2F0dHJfc2V0KHJ1bm5pbmdfdmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLAomIzQzOwkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JUlEsICZhbXA7aXJxKTsKJiM0MzsJdmNwdV9kZXZpY2VfYXR0cl9zZXQocnVubmluZ192Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQsIE5VTEwpOwomIzQzOwlydW5fdmNwdShydW5uaW5nX3ZjcHUpOwomIzQzOwomIzQzOwlyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHN0b3BwZWRfdmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLAomIzQzOwkJCQkgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfU0VUX05SX0NPVU5URVJTLAomIzQzOwkJCQkgICAgICZhbXA7bnJfY291bnRlcnMpOwomIzQzOwlURVNUX0FTU0VSVChyZXQgPT0gLTEgJmFtcDsmYW1wOyBlcnJubyA9PSBFQlVTWSwKJiM0MzsJCSAgICBLVk1fSU9DVExfRVJST1IoS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7CiYjNDM7CiYjNDM7CWt2bV92bV9mcmVlKHZtKTsKJiM0Mzt9CiAKLQlURVNUX1JFUVVJUkUoa3ZtX2hhc19jYXAoS1ZNX0NBUF9BUk1fUE1VX1YzKSk7Ci0JVEVTVF9SRVFVSVJFKGt2bV9zdXBwb3J0c192Z2ljX3YzKCkpOwotCVRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfbnJfY291bnRlcnNfYXR0cigpKTsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2NvbmZpZyh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpCiYjNDM7ewomIzQzOwl1NjQgaTsKIAotCXBtY3JfbiA9IGdldF9wbWNyX25fbGltaXQoKTsKIAlmb3IgKGkgPSAwOyBpICZsdDs9IHBtY3JfbjsgaSYjNDM7JiM0MzspIHsKLQkJcnVuX2FjY2Vzc190ZXN0KGkpOwotCQlydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QoaSk7CiYjNDM7CQlydW5fYWNjZXNzX3Rlc3QoaSwgZml4ZWRfY291bnRlcnNfb25seSk7CiYjNDM7CQlydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QoaSwgZml4ZWRfY291bnRlcnNfb25seSk7CiYjNDM7CQlydW5fbWRjcl9lbDJfdmFsaWRpdHlfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTsKIAl9CiAKIAlmb3IgKGkgPSBwbWNyX24gJiM0MzsgMTsgaSAmbHQ7IEFSTVY4X1BNVV9NQVhfQ09VTlRFUlM7IGkmIzQzOyYjNDM7KQotCQlydW5fZXJyb3JfdGVzdChpKTsKJiM0MzsJCXJ1bl9lcnJvcl90ZXN0KGksIGZpeGVkX2NvdW50ZXJzX29ubHkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2ZpeGVkX2NvdW50ZXJzX29ubHlfc3RyaWN0KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCBpbml0OwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwl1NjQgaXJxID0gMjM7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICgha3ZtX2hhc19jYXAoS1ZNX0NBUF9BUk1fUE1VX1YzX1NUUklDVCkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXZtID0gdm1fY3JlYXRlKDEpOwomIzQzOwlrdm1fZ2V0X2RlZmF1bHRfdmNwdV90YXJnZXQodm0sICZhbXA7aW5pdCk7CiYjNDM7CWluaXQuZmVhdHVyZXNbMF0gfD0gQklUKEtWTV9BUk1fVkNQVV9QTVVfVjMpIHwKJiM0MzsJCQkgICAgQklUKEtWTV9BUk1fVkNQVV9QTVVfVjNfU1RSSUNUKTsKJiM0MzsJdmNwdSA9IGFhcmNoNjRfdmNwdV9hZGQodm0sIDAsICZhbXA7aW5pdCwgZ3Vlc3RfY29kZV9kb25lKTsKJiM0MzsJa3ZtX2FyY2hfdm1fZmluYWxpemVfdmNwdXModm0pOwomIzQzOwl2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgJmFtcDtpcnEpOwomIzQzOwomIzQzOwkvKiBTVFJJQ1Qgc3RpbGwgcmVxdWlyZXMgYSBQTVUgc2VsZWN0aW9uIGJlZm9yZSBpbml0aWFsaXphdGlvbi4gKi8KJiM0MzsJcmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTsKJiM0MzsJVEVTVF9BU1NFUlQocmV0ID09IC0xICZhbXA7JmFtcDsgZXJybm8gPT0gRU5YSU8sCiYjNDM7CQkgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpOwomIzQzOwomIzQzOwl2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpOwomIzQzOwl2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQsIE5VTEwpOwomIzQzOwomIzQzOwlrdm1fdm1fZnJlZSh2bSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfZml4ZWRfY291bnRlcnNfb25seSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9wbXVfZXZlbnRfZmlsdGVyIGZpbHRlciA9IHsgLm5ldmVudHMgPSAwIH07CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnJ1bm5pbmdfdmNwdTsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICpzdG9wcGVkX3ZjcHU7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdV9pbml0IGluaXQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CXU2NCBpcnEgPSAyMzsKJiM0MzsKJiM0MzsJY3JlYXRlX3ZwbXVfdm0oZ3Vlc3RfY29kZSk7CiYjNDM7CXJldCA9IF9fdmNwdV9oYXNfZGV2aWNlX2F0dHIodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJVEVTVF9BU1NFUlQocmV0ID09IC0xICZhbXA7JmFtcDsgZXJybm8gPT0gRU5YSU8sCiYjNDM7CQkJICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fSEFTX0RFVklDRV9BVFRSLCByZXQpKTsKJiM0MzsJCWRlc3Ryb3lfdnBtdV92bSgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFzc2VydCB0aGF0IEZJWEVEX0NPVU5URVJTX09OTFkgaXMgdW5zZXQgYXQgaW5pdGlhbGl6YXRpb24uICovCiYjNDM7CXJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9nZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTsKJiM0MzsJVEVTVF9BU1NFUlQocmV0ID09IC0xICZhbXA7JmFtcDsgZXJybm8gPT0gRU5YSU8sCiYjNDM7CQkgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9HRVRfREVWSUNFX0FUVFIsIHJldCkpOwomIzQzOwomIzQzOwkvKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgc3VjY2VlZHMuICovCiYjNDM7CXZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLAomIzQzOwkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTsKJiM0MzsKJiM0MzsJLyogQXNzZXJ0IHRoYXQgRklYRURfQ09VTlRFUlNfT05MWSBpcyBzZXQuICovCiYjNDM7CXZjcHVfZGV2aWNlX2F0dHJfZ2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLAomIzQzOwkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU2V0dGluZyBhbiBldmVudCBmaWx0ZXIgd2hlbiBGSVhFRF9DT1VOVEVSU19PTkxZIGhhcyBhbHJlYWR5IGJlZW4gc2V0CiYjNDM7CSAqIHJlc3VsdHMgaW4gRUJVU1kuCiYjNDM7CSAqLwomIzQzOwlyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLAomIzQzOwkJCQkgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSLCAmYW1wO2ZpbHRlcik7CiYjNDM7CVRFU1RfQVNTRVJUKHJldCA9PSAtMSAmYW1wOyZhbXA7IGVycm5vID09IEVCVVNZLAomIzQzOwkJICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTsKJiM0MzsKJiM0MzsJZGVzdHJveV92cG11X3ZtKCk7CiYjNDM7CiYjNDM7CWNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgd2hlbiBhbiBldmVudCBmaWx0ZXIgaGFzCiYjNDM7CSAqIGFscmVhZHkgYmVlbiBzZXQgcmVzdWx0cyBpbiBFQlVTWS4KJiM0MzsJICovCiYjNDM7CXZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLAomIzQzOwkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVIsICZhbXA7ZmlsdGVyKTsKJiM0MzsKJiM0MzsJcmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwKJiM0MzsJCQkJICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpOwomIzQzOwlURVNUX0FTU0VSVChyZXQgPT0gLTEgJmFtcDsmYW1wOyBlcnJubyA9PSBFQlVTWSwKJiM0MzsJCSAgICBLVk1fSU9DVExfRVJST1IoS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7CiYjNDM7CiYjNDM7CWRlc3Ryb3lfdnBtdV92bSgpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgd2hlbiBhIFZDUFUgaGFzIGFscmVhZHkgcnVuCiYjNDM7CSAqIHJlc3VsdHMgaW4gRUJVU1kuCiYjNDM7CSAqLwomIzQzOwl2bSA9IHZtX2NyZWF0ZSgyKTsKJiM0MzsJdm1faW9jdGwodm0sIEtWTV9BUk1fUFJFRkVSUkVEX1RBUkdFVCwgJmFtcDtpbml0KTsKJiM0MzsJaW5pdC5mZWF0dXJlc1swXSB8PSAoMSAmbHQ7Jmx0OyBLVk1fQVJNX1ZDUFVfUE1VX1YzKTsKJiM0MzsJcnVubmluZ192Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMCwgJmFtcDtpbml0LCBndWVzdF9jb2RlX2RvbmUpOwomIzQzOwlzdG9wcGVkX3ZjcHUgPSBhYXJjaDY0X3ZjcHVfYWRkKHZtLCAxLCAmYW1wO2luaXQsIGd1ZXN0X2NvZGVfZG9uZSk7CiYjNDM7CWt2bV9hcmNoX3ZtX2ZpbmFsaXplX3ZjcHVzKHZtKTsKJiM0MzsJdmNwdV9kZXZpY2VfYXR0cl9zZXQocnVubmluZ192Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgJmFtcDtpcnEpOwomIzQzOwl2Y3B1X2RldmljZV9hdHRyX3NldChydW5uaW5nX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwKJiM0MzsJCQkgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVCwgTlVMTCk7CiYjNDM7CXJ1bl92Y3B1KHJ1bm5pbmdfdmNwdSk7CiYjNDM7CiYjNDM7CXJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQoc3RvcHBlZF92Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsCiYjNDM7CQkJCSAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTsKJiM0MzsJVEVTVF9BU1NFUlQocmV0ID09IC0xICZhbXA7JmFtcDsgZXJybm8gPT0gRUJVU1ksCiYjNDM7CQkgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpOwomIzQzOwomIzQzOwlrdm1fdm1fZnJlZSh2bSk7CiYjNDM7CiYjNDM7CXRlc3RfZml4ZWRfY291bnRlcnNfb25seV9zdHJpY3QoKTsKJiM0MzsKJiM0MzsJdGVzdF9jb25maWcoMCwgdHJ1ZSk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtYWluKHZvaWQpCiYjNDM7ewomIzQzOwlURVNUX1JFUVVJUkUoa3ZtX2hhc19jYXAoS1ZNX0NBUF9BUk1fUE1VX1YzKSk7CiYjNDM7CVRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfdmdpY192MygpKTsKJiM0MzsJVEVTVF9SRVFVSVJFKGt2bV9zdXBwb3J0c19ucl9jb3VudGVyc19hdHRyKCkpOwomIzQzOwomIzQzOwl0ZXN0X3NldF9ucl9jb3VudGVyc19hZnRlcl92Y3B1X3J1bigpOwomIzQzOwl0ZXN0X2NvbmZpZyhnZXRfcG1jcl9uX2xpbWl0KCksIGZhbHNlKTsKJiM0MzsJdGVzdF9maXhlZF9jb3VudGVyc19vbmx5KCk7CiAKIAlyZXR1cm4gMDsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ3OTEKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA2MjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoaXMgUGF0Y2ggZm9yIEFNRDY0IENvbXBhdGliaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGF0IHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIEFNRDY0LCBhbmQgdGhlIGZpbGUgbW9kaWZpY2F0aW9ucyBzZWVtIGhlYXZpbHkgZm9jdXNlZCBvbiBBUk02NC4gVGhlIGluc3RydWN0aW9ucyBzdGF0ZSB0byBsb29rIGZvciAmIzM0O1VucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocyYjMzQ7IGFuZCAmIzM0O0NvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSwmIzM0OyBzbyB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBmb2N1cy4KCkZpcnN0LCBJIGV4YW1pbmVkIHRoZSB1c2VyIGluc3RydWN0aW9uczogJiMzNDtUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NCwmIzM0OyBjaGVjay4gVGhlbiBJIGxvb2tlZCBhdCB0aGUgZmlsZSBtb2RpZmljYXRpb25zLCBJIHNlZToKCiogICBgRG9jdW1lbnRhdGlvbi9gIGFuZCBgdG9vbHMvYCBkaXJlY3RvcmllcywgY2hlY2suIERvY3VtZW50YXRpb24gbWlnaHQgYXBwbHkgdG8gYW55IGFyY2hpdGVjdHVyZSwgYW5kIHRvb2xzIGFyZSBhcmNoaXRlY3R1cmUgaW5kZXBlbmRlbnQuCiogICBCdXQsIGNydWNpYWxseSwgYWxtb3N0IGFsbCB0aGUga2VybmVsIG1vZGlmaWNhdGlvbnMgYXJlIHdpdGhpbiBgYXJjaC9hcm02NC9gLCBhbmQgaW5jbHVkZSBmaWxlcyB0aGF0IEkgc3VzcGVjdCB3aWxsIGJlIEFSTTY0IG9ubHkuIExldCYjMzk7cyBzZWUuLi4KKiAgIEkgZmxhZ2dlZCBgaW5jbHVkZS9rdm0vYXJtX3BtdS5oYCBhcyBhIHBvdGVudGlhbCBwb2ludCBvZiBpbnRlcmVzdC4gSXQmIzM5O3MgaW4gdGhlIGBpbmNsdWRlL2t2bWAgZGlyZWN0b3J5LCBidXQgaXRzIG5hbWUgc2NyZWFtcyAmIzM0O0FSTSBQTVUmIzM0OyBhdCBtZS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGlmIHRoYXQgZmlsZSBpcyBpbmNsdWRlZCBpbiBhbnkgQU1ENjQtc3BlY2lmaWMgY29kZSBwYXRocy4gU28gSSBuZWVkIHRvIHZlcmlmeSBpdHMgdXNhZ2UuCiogICBJIGFsc28gbmVlZCB0byBjaGVjayB0aGUgdG9vbHMgYW5kIGRvY3VtZW50YXRpb24gdG8gZW5zdXJlIHRoZXJlIGFyZSBubyB1bmludGVuZGVkIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBjb21wb25lbnRzIHRoZXJlLgoKTm93IEkmIzM5O2xsIG1ldGhvZGljYWxseSBjaGVjayBlYWNoIGZpbGUuIFRoZSBhcm02NC1zcGVjaWZpYyBmaWxlcyBhcmUgY2xlYXJseSB1bnJlYWNoYWJsZSBvbiBhbWQ2NDoKLSBhcmNoL2FybTY0L1wqCi0gaW5jbHVkZS9rdm0vYXJtXF9wbXUuaAotIHRvb2xzL1wqCi0gRG9jdW1lbnRhdGlvbi9cKgoKSSYjMzk7bGwgdXNlIGdyZXAgb3IgY29kZSBzZWFyY2ggdG8gZGVmaW5pdGl2ZWx5IGNvbmZpcm0gdGhlIGluY2x1ZGUgZmlsZSB1c2FnZSBhbmQgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBkZXBlbmRlbmNpZXMgYW5kLCBpZiBpdCBpcyBvbmx5IHVzZWQgYnkgYXJtNjQsIEkgY2FuIGJlIGNvbmZpZGVudCB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBzYWZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luY2x1ZGUgXHUwMDNja3ZtL2FybV9wbXUuaFx1MDAzZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMzctI2luY2x1ZGUgXHUwMDNja3ZtL2FybV9hcmNoX3RpbWVyLmhcdTAwM2VcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDozODojaW5jbHVkZSBcdTAwM2Nrdm0vYXJtX3BtdS5oXHUwMDNlXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMzktXG4tLVxuYXJjaC9hcm02NC9rdm0vYXJtLmMtNDgtI2luY2x1ZGUgXHUwMDNja3ZtL2FybV9oeXBlcmNhbGxzLmhcdTAwM2VcbmFyY2gvYXJtNjQva3ZtL2FybS5jOjQ5OiNpbmNsdWRlIFx1MDAzY2t2bS9hcm1fcG11LmhcdTAwM2VcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTUwLSNpbmNsdWRlIFx1MDAzY2t2bS9hcm1fcHNjaS5oXHUwMDNlXG4tLVxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy0xNC0jaW5jbHVkZSBcdTAwM2Nhc20va3ZtX2VtdWxhdGUuaFx1MDAzZVxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYzoxNTojaW5jbHVkZSBcdTAwM2Nrdm0vYXJtX3BtdS5oXHUwMDNlXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jLTE2LSNpbmNsdWRlIFx1MDAzY2t2bS9hcm1fdmdpYy5oXHUwMDNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYxMTkKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA3NzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIEFuYWx5c2lzIC0gTm8gQ29uY2VybnMgSGVyZSEqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBjaGFuZ2VzIHRoYXQgd2FycmFudCBmdXp6aW5nLiBUaGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlIG1vZGlmaWVkIGNvZGUgaW1wYWN0cyB0aGUga2VybmVsJiMzOTtzIGNyaXRpY2FsIGV4ZWN1dGlvbiBwYXRocyBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQgaW4gdGhpcyBjYXNlKS4KCkZpcnN0LCBJIGNoZWNrZWQgZm9yIGFueSBpbmNsdXNpb24gb3IgdXNhZ2Ugb2YgdGhlIGBpbmNsdWRlL2t2bS9hcm1fcG11LmhgIGZpbGUsIG9yIGFueSBvdGhlciBBUk02NCBQZXJmb3JtYW5jZSBNb25pdG9yaW5nIFVuaXQgKFBNVSkgY29kZSwgb24gdGhlIHg4Nl82NCBhcmNoaXRlY3R1cmUuIE5vIGRpY2UhIFRoYXQgaGVhZGVyIGlzIGV4Y2x1c2l2ZWx5IHVzZWQgd2l0aGluIHRoZSBBUk02NCBhcmNoaXRlY3R1cmUsIHNwZWNpZmljYWxseSBieSBgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oYCwgYGFyY2gvYXJtNjQva3ZtL2FybS5jYCwgYW5kIGBhcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jYC4gVGhpcyBpcyBnb29kOyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZSBvbiBhIGRpZmZlcmVudCB0YXJnZXQgaXMgaW1tZWRpYXRlbHkgYSBub24taXNzdWUuCgpOZXh0LCBJIGxvb2tlZCBhdCBgdG9vbHMvaW5jbHVkZS9saW51eC9iaXRmaWVsZC5oYC4gSXQgcmVzaWRlcyB3aXRoaW4gdGhlIGB0b29scy9gIGRpcmVjdG9yeS4gVGhpcyBkaXJlY3RvcnkgaXMgZXhwbGljaXRseSBleGVtcHQgZnJvbSBmdXp6aW5nIGNvbnNpZGVyYXRpb25zIGJlY2F1c2UgaXQmIzM5O3MgZGVmaW5lZCBhcyBhICYjMzQ7VXNlci1zcGFjZSBkaXJlY3RvcnkmIzM0Oy4KClRoZW4sIEkgY29uc3VsdGVkIHRoZSAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UmIzM0OyBjcml0ZXJpYS4gVGhlIGxvZ2ljIGZvciB0aGF0IGRlY2lzaW9uIGlzIGJhc2VkIG9uIG11bHRpcGxlIGNhdGVnb3JpZXM6CjEuICAqKk5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6KiogVGhpcyBpbmNsdWRlcyBkb2N1bWVudGF0aW9uLCBjb21tZW50cywgc3BlbGxpbmcgZml4ZXMsIGFuZCwgaW1wb3J0YW50bHksIHVzZXItc3BhY2UgZGlyZWN0b3JpZXMgbGlrZSBgdG9vbHMvYCwgYXMgd2VsbCBhcyBzZWxmLXRlc3RzLCBzYW1wbGVzLCBhbmQgc2NyaXB0cyB0aGF0IGRvbiYjMzk7dCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSBvciBtb2R1bGVzLgoyLiAgKipTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6KioKMy4gICoqVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOioqCgpHaXZlbiB0aGF0LCBJIGNhbiBjb25jbHVzaXZlbHkgY2F0ZWdvcml6ZSBhbGwgY2hhbmdlcyB3aXRoaW4gdGhpcyBwYXRjaCBzZXJpZXM6CgoxLiAgKipEb2N1bWVudGF0aW9uOioqIE1vZGlmaWNhdGlvbnMgdG8gdGhlIGRvY3VtZW50YXRpb24gZmlsZXMgKGBEb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RgLCBgRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0YCkgZmFsbCB1bmRlciB0aGUgJiMzNDtOb24ta2VybmVsJiMzNDsgY2F0ZWdvcnkuCjIuICAqKkFSTTY0IEFyY2hpdGVjdHVyZSBDb2RlOioqIEFsbCBjaGFuZ2VzIHdpdGhpbiBgYXJjaC9hcm02NC8qYCBhcmUgKmV4Y2x1c2l2ZWx5KiBmb3IgdGhlIEFSTTY0IGFyY2hpdGVjdHVyZS4gVGhleSBhcmUgc2ltcGx5IHVucmVhY2hhYmxlIGFuZCBkbyBub3QgYWZmZWN0IHRoZSB0YXJnZXQgKGFtZDY0KS4KMy4gICoqYGluY2x1ZGUva3ZtL2FybV9wbXUuaGA6KiogVGhpcyBpcywgYWdhaW4sIEFSTTY0LXNwZWNpZmljIGFuZCBvbmx5IGluY2x1ZGVkIHdpdGhpbiBBUk02NCBmaWxlcy4gSXQgaXMgaXJyZWxldmFudCBvbiBhbWQ2NC4KNC4gICoqYHRvb2xzLypgOioqIFRoaXMgY292ZXJzIGNvZGUgaW4gYHRvb2xzL2FyY2gvYXJtNjQvYCwgYHRvb2xzL2luY2x1ZGUvbGludXgvYml0ZmllbGQuaGAsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYC4gVGhlc2UgYXJlIHVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNjcmlwdHMsIGFuZCBzZWxmLXRlc3RzLgoKVGhlcmVmb3JlLCAqYWxsKiBtb2RpZmllZCBjb2RlIGZhbGxzIHVuZGVyIG9uZSBvciBtb3JlIG9mIHRoZXNlIHNhZmUgY2F0ZWdvcmllczogdXNlci1zcGFjZSBkaXJlY3RvcmllcywgZG9jdW1lbnRhdGlvbiwgb3IgY29kZSBleGNsdXNpdmUgdG8gYSBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlIHRoYW4gdGhlIHRhcmdldCBhbWQ2NC4gSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGEgZnVsbCBhbmQgY29tcGxldGUgbGlzdCBhbmQgYmUgc3VyZSBubyBvdGhlciBmaWxlIHdhcyBtb2RpZmllZCB1c2luZyBgZ2l0IGRpZmYgLyBzdGF0dXNgIG9yIGBnaXQgZ3JlcGAgb24gdGhpcyBjb21taXQgdG8gY29uZmlybSB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RpZmYgLS1naXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9icGYvZHJnbi5yc3Q9OTk9Rm9yIGV4YW1wbGUsIHRvIHByaW50IGBgc3RydWN0IGJwZl9wcm9nX2F1eGBgIGZvciBCUEYgcHJvZ3JhbSBpZCA1MzA3Nzpcbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9kcmduLnJzdC0xMDMtICAgICUgZ2l0IGRpZmZcbkRvY3VtZW50YXRpb24vYnBmL2RyZ24ucnN0OjEwNDogICAgZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZl9pbnNwZWN0LnB5IGIvdG9vbHMvYnBmX2luc3BlY3QucHlcbkRvY3VtZW50YXRpb24vYnBmL2RyZ24ucnN0LTEwNS0gICAgaW5kZXggNjUwZTIyOC4uYWVhMjM1NyAxMDA3NTVcbi0tXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9jaGVja3VhcGkucnN0PTU0PXdvbiYjMzk7dCBicmVhayB1c2Vyc3BhY2U6OlxuLS1cbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2NoZWNrdWFwaS5yc3QtNjktICAgICAgKiAgY29tcDJfdCBpcyAyNC1iaXQgd2l0aCA1LWJpdCBiYXNlIDIgZXhwb25lbnQgYW5kIDIwIGJpdCBmcmFjdGlvblxuRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMvY2hlY2t1YXBpLnJzdDo3MDogICAgZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMvY2hlY2t1YXBpLnJzdC03MS0gICAgRU9GXG4tLVxuRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMvY2hlY2t1YXBpLnJzdD0zMTA9Q29uc2lkZXIgdGhpcyBjaGFuZ2U6OlxuLS1cbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2NoZWNrdWFwaS5yc3QtMzEyLSAgICBjYXQgXHUwMDNjXHUwMDNjICYjMzk7RU9GJiMzOTsgfCBwYXRjaCAtbCAtcDFcbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2NoZWNrdWFwaS5yc3Q6MzEzOiAgICBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL0tidWlsZCBiL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9LYnVpbGRcbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2NoZWNrdWFwaS5yc3QtMzE0LSAgICBpbmRleCBlYmIxODBhYWM3NGUuLmE5Yzg4YjBhOGIzYiAxMDA2NDRcbi0tXG5Eb2N1bWVudGF0aW9uL2RvYy1ndWlkZS9jb250cmlidXRpbmcucnN0PTg0PWxvb2tlZCBsaWtlIHRoaXM6OlxuLS1cbkRvY3VtZW50YXRpb24vZG9jLWd1aWRlL2NvbnRyaWJ1dGluZy5yc3QtMTAyLVxuRG9jdW1lbnRhdGlvbi9kb2MtZ3VpZGUvY29udHJpYnV0aW5nLnJzdDoxMDM6ICBkaWZmIC0tZ2l0IGEvZHJpdmVycy9kZXZmcmVxL2RldmZyZXEuYyBiL2RyaXZlcnMvZGV2ZnJlcS9kZXZmcmVxLmNcbkRvY3VtZW50YXRpb24vZG9jLWd1aWRlL2NvbnRyaWJ1dGluZy5yc3QtMTA0LSAgaW5kZXggNTdmNjk0NGQ2NWE2Li4wMGM5YjgwYjNkMzMgMTAwNjQ0XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS90cmFuc2h1Z2UucnN0PTczPWNoYW5nZTo6XG5Eb2N1bWVudGF0aW9uL21tL3RyYW5zaHVnZS5yc3QtNzQtXG5Eb2N1bWVudGF0aW9uL21tL3RyYW5zaHVnZS5yc3Q6NzU6XHRkaWZmIC0tZ2l0IGEvbW0vbXJlbWFwLmMgYi9tbS9tcmVtYXAuY1xuRG9jdW1lbnRhdGlvbi9tbS90cmFuc2h1Z2UucnN0LTc2LVx0LS0tIGEvbW0vbXJlbWFwLmNcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9kb2MtZ3VpZGUvY29udHJpYnV0aW5nLnJzdD0zNj1D5Luj56CB57yW6K+R5Zmo5Y+R5Ye655qE6K2m5ZGK5bi45bi45Lya6KKr6KeG5Li66K+v5oql77yM5LuO6ICM5a+86Ie05Ye6546w5LqG5peo5Zyo6K6p57yW6K+R5Zmo6Zet5Zi055qE6KGl5LiB44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZG9jLWd1aWRlL2NvbnRyaWJ1dGluZy5yc3QtODYtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9kb2MtZ3VpZGUvY29udHJpYnV0aW5nLnJzdDo4NzogIGRpZmYgLS1naXQgYS9kcml2ZXJzL2RldmZyZXEvZGV2ZnJlcS5jIGIvZHJpdmVycy9kZXZmcmVxL2RldmZyZXEuY1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZG9jLWd1aWRlL2NvbnRyaWJ1dGluZy5yc3QtODgtICBpbmRleCA1N2Y2OTQ0ZDY1YTYuLjAwYzliODBiM2QzMyAxMDA2NDRcbi0tXG5zY3JpcHRzL2NoZWNrcGF0Y2gucGw9MjY3MT1zdWIgcHJvY2VzcyB7XG4tLVxuc2NyaXB0cy9jaGVja3BhdGNoLnBsLTI4NDQtXHRcdCAgICAoJGxpbmUgPX4gL15yZW5hbWUgKD86ZnJvbXx0bykgXFxTJiM0MztcXHMqJC8gfHxcbnNjcmlwdHMvY2hlY2twYXRjaC5wbDoyODQ1Olx0XHQgICAgICRsaW5lID1+IC9eZGlmZiAtLWdpdCBhXFwvW1xcd1xcL1xcLlxcX1xcLV0mIzQzOyBiXFwvXFxTJiM0MztcXHMqJC8pKSkge1xuc2NyaXB0cy9jaGVja3BhdGNoLnBsLTI4NDYtXHRcdFx0JGlzX3BhdGNoID0gMTtcbi0tXG5zY3JpcHRzL2NoZWNrcGF0Y2gucGwtMjkwMi1cdFx0IyBleHRyYWN0IHRoZSBmaWxlbmFtZSBhcyBpdCBwYXNzZXNcbnNjcmlwdHMvY2hlY2twYXRjaC5wbDoyOTAzOlx0XHRpZiAoJGxpbmUgPX4gL15kaWZmIC0tZ2l0Lio/KFxcUyYjNDM7KSQvKSB7XG5zY3JpcHRzL2NoZWNrcGF0Y2gucGwtMjkwNC1cdFx0XHQkcmVhbGZpbGUgPSAkMTtcbi0tXG5zY3JpcHRzL2dldF9tYWludGFpbmVyLnBsPTU1Mj1mb3JlYWNoIG15ICRmaWxlIChAQVJHVikge1xuLS1cbnNjcmlwdHMvZ2V0X21haW50YWluZXIucGwtNjAxLVx0XHRwdXNoKEBmaWxlcywgJGZpbGVuYW1lKTtcbnNjcmlwdHMvZ2V0X21haW50YWluZXIucGw6NjAyOlx0ICAgIH0gZWxzaWYgKG0vXmRpZmYgLS1naXQgYVxcLyhcXFMmIzQzOykgYlxcLyhcXFMmIzQzOylcXHMqJC8pIHtcbnNjcmlwdHMvZ2V0X21haW50YWluZXIucGwtNjAzLVx0XHRteSAkZmlsZW5hbWUxID0gJDE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg2OTkKCQkJCQkJCW91dHB1dDogMTAwCgkJCQkJCQl0aG91Z2h0czogNjMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgQ29tbWl0IDczNDNjMGJmZjdkNWM1ZWE3YWY5ZTFmMGZiNjU4MTkxYTgwZmJmMTkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkmIzM5O3ZlIGdvdCB0aGUgbGlzdCBvZiBtb2RpZmllZCBmaWxlczogYERvY3VtZW50YXRpb24vdmlydC9rdm0vKmAsIGBhcmNoL2FybTY0LypgLCBgaW5jbHVkZS9rdm0vYXJtX3BtdS5oYCwgYHRvb2xzLypgLCBhbmQgYGluY2x1ZGUvbGludXgvYml0ZmllbGQuaGAuIE15IGluaXRpYWwgc2NhbiB0ZWxscyBtZSB0aGlzIGlzIGFsbCBwcmV0dHkgdGFyZ2V0ZWQuIE5vbmUgb2YgdGhpcyB0b3VjaGVzIGFueSBhbWQ2NCAoeDg2XzY0KSByZWFjaGFibGUgY29kZS4gU3BlY2lmaWNhbGx5OgoKKiAgIFRoZSBgYXJjaC9hcm02NC8qYCBmaWxlcyBhcmUgQVJNNjQtc3BlY2lmaWMsIGFzIGlzIGBpbmNsdWRlL2t2bS9hcm1fcG11LmhgLgoqICAgVGhlIGB0b29scy8qYCBkaXJlY3RvcnkgY29udGFpbnMgdXNlci1zcGFjZSBzZWxmdGVzdHMgYW5kIHRvb2xzLCBzbyBpdCYjMzk7cyBub3QgZGlyZWN0bHkgaW1wYWN0aW5nIHRoZSBrZXJuZWwgaW1hZ2UgaXRzZWxmLgoqICAgYERvY3VtZW50YXRpb24vKmAgaXMsIHdlbGwsIGRvY3VtZW50YXRpb24uCgpOb3csIGNvbnNpZGVyaW5nIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBmb3IgZnV6emluZywgd2hpY2ggYXJlIHRoZSByZWxldmFudCBvbmVzIGluIHRoaXMgY29udGV4dCwgdGhlIGNvbW1pdCBpcyBjb21wbGV0ZWx5IGNvdmVyZWQgYnkgdGhlc2UgY2FzZXM6CgoqICAgKipOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOioqIEl0IGluY2x1ZGVzIGRvY3VtZW50YXRpb24sIGFuZCB1c2VyLXNwYWNlIHRvb2xzL3NlbGZ0ZXN0cyB0aGF0IGRvbiYjMzk7dCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZS4KKiAgICoqVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOioqIFRoZSBjaGFuZ2VzIGFyZSBleGNsdXNpdmUgdG8gQVJNNjQsIG5vdCBhbWQ2NCwgd2hpY2ggaXMgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgpHaXZlbiB0aGF0IHRoaXMgY29tbWl0IHN0cmljdGx5IGZhbGxzIGludG8gdGhlc2UgY2F0ZWdvcmllcywgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBjcml0ZXJpYSwgSSBtdXN0IGNvbmNsdWRlIHRoYXQgYFdvcnRoRnV6emluZyA9IGZhbHNlYC4gVGhlIGBFbmFibGVDb25maWdzYCBhbmQgYEZvY3VzU3ltYm9sc2AgbGlzdHMgYXJlIGJvdGggZW1wdHksIGFuZCB0aGUgcmVhc29uaW5nIGlzIHRoYXQgdGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIEFSTTY0LXNwZWNpZmljIEtWTSBhbmQgQ1BVIGVycmF0YSBjb2RlLCBvciBkb2N1bWVudGF0aW9uIGFuZCB0b29scywgd2hpY2ggYXJlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiB0aGUgYW1kNjQgYXJjaGl0ZWN0dXJlLgoKSnVzdCBydW5uaW5nIGEgcXVpY2sgc2FuaXR5IGNoZWNrIG9mIHRoZSB2YWx1ZXM6CiogV29ydGhGdXp6aW5nOiBmYWxzZQoqIEVuYWJsZUNvbmZpZ3M6IFtdCiogRm9jdXNTeW1ib2xzOiBbXQoqIFJlYXNvbmluZzogQ2xlYXIgYW5kIGNvbmNpc2UuCgpFdmVyeXRoaW5nIGNoZWNrcyBvdXQuIEkmIzM5O20gY29uZmlkZW50IGluIHRoaXMgYXNzZXNzbWVudC4gSSYjMzk7bSBub3cgZ29pbmcgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEyOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtBbGwgbW9kaWZpZWQga2VybmVsIGNvZGUgaXMgZXhjbHVzaXZlIHRvIHRoZSBhcm02NCBhcmNoaXRlY3R1cmUgKGFyY2gvYXJtNjQgYW5kIGluY2x1ZGUva3ZtL2FybV9wbXUuaCksIHdpdGggdGhlIHJlbWFpbmluZyBjaGFuZ2VzIGxvY2F0ZWQgaW4gRG9jdW1lbnRhdGlvbi8gYW5kIHVzZXItc3BhY2UgdG9vbHMvc2VsZnRlc3RzICh0b29scy8pLiBOb25lIG9mIHRoZSBtb2RpZmllZCBjb2RlIGlzIGNvbXBpbGVkIG9yIHJlYWNoYWJsZSBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtBbGwgbW9kaWZpZWQga2VybmVsIGNvZGUgaXMgZXhjbHVzaXZlIHRvIHRoZSBhcm02NCBhcmNoaXRlY3R1cmUgKGFyY2gvYXJtNjQgYW5kIGluY2x1ZGUva3ZtL2FybV9wbXUuaCksIHdpdGggdGhlIHJlbWFpbmluZyBjaGFuZ2VzIGxvY2F0ZWQgaW4gRG9jdW1lbnRhdGlvbi8gYW5kIHVzZXItc3BhY2UgdG9vbHMvc2VsZnRlc3RzICh0b29scy8pLiBOb25lIG9mIHRoZSBtb2RpZmllZCBjb2RlIGlzIGNvbXBpbGVkIG9yIHJlYWNoYWJsZSBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMjo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTRUMTI6NTQ6MzYuNjk4Mjg2NDU5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgyMzU5NjE5MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIkFsbCBtb2RpZmllZCBrZXJuZWwgY29kZSBpcyBleGNsdXNpdmUgdG8gdGhlIGFybTY0IGFyY2hpdGVjdHVyZSAoYXJjaC9hcm02NCBhbmQgaW5jbHVkZS9rdm0vYXJtX3BtdS5oKSwgd2l0aCB0aGUgcmVtYWluaW5nIGNoYW5nZXMgbG9jYXRlZCBpbiBEb2N1bWVudGF0aW9uLyBhbmQgdXNlci1zcGFjZSB0b29scy9zZWxmdGVzdHMgKHRvb2xzLykuIE5vbmUgb2YgdGhlIG1vZGlmaWVkIGNvZGUgaXMgY29tcGlsZWQgb3IgcmVhY2hhYmxlIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo1NDozNi42OTgyOTM0OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI0NjM1NDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzM0M2MwYmZmN2Q1YzVlYTdhZjllMWYwZmI2NTgxOTFhODBmYmYxOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCAxNCAxMjo1NDozNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcXG5pbmRleCA0OTg4YzMyZGY0YmY4Li40MjA2NTEzODYwM2I3IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxcbkBAIC0zNTIxLDkgKzM1MjEsMTMgQEAgUG9zc2libGUgZmVhdHVyZXM6XFxuIFxcbiBcXHQgICAgKiBVc2Vyc3BhY2UgbXVzdCBleHBsaWNpdGx5IHNlbGVjdCBhIFBNVSBpbXBsZW1lbnRhdGlvbiBiZWZvcmVcXG4gXFx0ICAgICAgaW5pdGlhbGl6aW5nIHRoZSBQTVUgb3IgY29uZmlndXJpbmcgYSBQTVUgZXZlbnQgZmlsdGVyXFxuK1xcdCAgICAgIChLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkgYWxzbyBzYXRpc2ZpZXMgdGhlXFxuK1xcdCAgICAgIGluaXRpYWxpemF0aW9uIHJlcXVpcmVtZW50OyBldmVudCBmaWx0ZXJpbmcgcmVtYWlucyB1bmF2YWlsYWJsZVxcbitcXHQgICAgICBpbiB0aGF0IG1vZGUpXFxuIFxcbi1cXHQgICAgKiBJZiB0aGUgUE1VIGltcGxlbWVudHMgRkVBVF9QTVV2M3A0LCBQTU1JUl9FTDEuU0xPVFMgcHJvdmlkZXMgdGhlXFxuLVxcdCAgICAgIGhhcmR3YXJlIHZhbHVlIG9mIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uXFxuK1xcdCAgICAqIElmIGEgaGFyZHdhcmUgUE1VIGlzIHNlbGVjdGVkIGFuZCBpbXBsZW1lbnRzIEZFQVRfUE1VdjNwNCxcXG4rXFx0ICAgICAgUE1NSVJfRUwxLlNMT1RTIHByb3ZpZGVzIGl0cyBoYXJkd2FyZSB2YWx1ZS4gSW4gZml4ZWQtY291bnRlcnMtb25seVxcbitcXHQgICAgICBtb2RlLCBQTU1JUl9FTDEgcmVhZHMgYXMgemVyb1xcbiBcXG4gXFx0ICAgICogV3JpdGVzIHRvIFBNQ1JfRUwwLk4gdmlhIEtWTV9TRVRfT05FX1JFRyBhcmUgaWdub3JlZFxcbiBcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3ZjcHUucnN0XFxuaW5kZXggZGViNWM1MWJjMDBjOC4uNGVjMzI5MWYwYmE3NCAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3RcXG5AQCAtNTMsOSArNTMsOSBAQCBSZXR1cm5zOlxcbiBcXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuIFxcdCAtRUVYSVNUICBJbnRlcnJ1cHQgbnVtYmVyIGFscmVhZHkgdXNlZFxcbiBcXHQgLUVOT0RFViAgUE1VdjMgbm90IHN1cHBvcnRlZCBvciBHSUMgbm90IGluaXRpYWxpemVkXFxuLVxcdCAtRU5YSU8gICBQTVV2MyBub3Qgc3VwcG9ydGVkLCBtaXNzaW5nIFZDUFUgZmVhdHVyZSwgbWlzc2luZ1xcbi0gICAgICAgICAgICAgICAgICBoYXJkd2FyZSBQTVUsIG9yIGludGVycnVwdCBudW1iZXIgbm90IHNldCAobm9uLUdJQ3Y1XFxuLSAgICAgICAgICAgICAgICAgIGd1ZXN0cywgb25seSlcXG4rXFx0IC1FTlhJTyAgIFBNVXYzIG5vdCBzdXBwb3J0ZWQsIG1pc3NpbmcgVkNQVSBmZWF0dXJlLFxcbitcXHRcXHQgIG5laXRoZXIgaGFyZHdhcmUgUE1VIG5vciBGSVhFRF9DT1VOVEVSU19PTkxZIHNlbGVjdGVkLFxcbitcXHRcXHQgIG9yIGludGVycnVwdCBudW1iZXIgbm90IHNldCAobm9uLUdJQ3Y1IGd1ZXN0cyBvbmx5KVxcbiBcXHQgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZFxcbiBcXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuIFxcbkBAIC02NCw3ICs2NCw4IEBAIHZpcnR1YWwgR0lDIGltcGxlbWVudGF0aW9uLCB0aGlzIG11c3QgYmUgZG9uZSBhZnRlciBpbml0aWFsaXppbmcgdGhlIGluLWtlcm5lbFxcbiBpcnFjaGlwLlxcbiBcXG4gV2hlbiB0aGUgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TVFJJQ1QgdkNQVSBmZWF0dXJlIGlzIGVuYWJsZWQgdGhpcyBtdXN0IGJlIGRvbmVcXG4tYWZ0ZXIgc2VsZWN0aW5nIGEgaGFyZHdhcmUgUE1VLlxcbithZnRlciBzZWxlY3RpbmcgYSBoYXJkd2FyZSBQTVUgb3IgZW5hYmxpbmdcXG4rS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLlxcbiBcXG4gMS4zIEFUVFJJQlVURTogS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVJcXG4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG5AQCAtNzgsNyArNzksOCBAQCBhZnRlciBzZWxlY3RpbmcgYSBoYXJkd2FyZSBQTVUuXFxuIFxcdCAtRU5PREVWICBQTVV2MyBub3Qgc3VwcG9ydGVkIG9yIEdJQyBub3QgaW5pdGlhbGl6ZWRcXG4gXFx0IC1FTlhJTyAgIFBNVXYzIG5vdCBwcm9wZXJseSBjb25maWd1cmVkIG9yIGluLWtlcm5lbCBpcnFjaGlwIG5vdFxcbiBcXHQgXFx0ICBjb25maWd1cmVkIGFzIHJlcXVpcmVkIHByaW9yIHRvIGNhbGxpbmcgdGhpcyBhdHRyaWJ1dGVcXG4tXFx0IC1FQlVTWSAgIFBNVXYzIGFscmVhZHkgaW5pdGlhbGl6ZWQgb3IgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1blxcbitcXHQgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCwgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1biBvclxcbitcXHRcXHQgIEZJWEVEX0NPVU5URVJTX09OTFkgaGFzIGFscmVhZHkgYmVlbiBzZXRcXG4gXFx0IC1FSU5WQUwgIEludmFsaWQgZmlsdGVyIHJhbmdlXFxuIFxcdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4gXFxuQEAgLTEyMywxNCArMTI1LDE0IEBAIGFmdGVyIHNlbGVjdGluZyBhIGhhcmR3YXJlIFBNVS5cXG4gXFxuIDpSZXR1cm5zOlxcbiBcXG4tXFx0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFx0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuIFxcdCAtRUJVU1kgICBQTVV2MyBhbHJlYWR5IGluaXRpYWxpemVkLCBhIFZDUFUgaGFzIGFscmVhZHkgcnVuIG9yXFxuLSAgICAgICAgICAgICAgICAgIGFuIGV2ZW50IGZpbHRlciBoYXMgYWxyZWFkeSBiZWVuIHNldFxcbisgICAgICAgICAgICAgICAgICBhbiBldmVudCBmaWx0ZXIgb3IgRklYRURfQ09VTlRFUlNfT05MWSBoYXMgYWxyZWFkeSBiZWVuIHNldFxcbiBcXHQgLUVGQVVMVCAgRXJyb3IgYWNjZXNzaW5nIHRoZSBQTVUgaWRlbnRpZmllclxcbiBcXHQgLUVOWElPICAgUE1VIG5vdCBmb3VuZFxcbiBcXHQgLUVOT0RFViAgUE1VdjMgbm90IHN1cHBvcnRlZCBvciBHSUMgbm90IGluaXRpYWxpemVkXFxuIFxcdCAtRU5PTUVNICBDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5XFxuLVxcdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiBcXG4gUmVxdWVzdCB0aGF0IHRoZSBWQ1BVIHVzZXMgdGhlIHNwZWNpZmllZCBoYXJkd2FyZSBQTVUgd2hlbiBjcmVhdGluZyBndWVzdCBldmVudHNcXG4gZm9yIHRoZSBwdXJwb3NlIG9mIFBNVSBlbXVsYXRpb24uIFRoZSBQTVUgaWRlbnRpZmllciBjYW4gYmUgcmVhZCBmcm9tIHRoZSBcXFwidHlwZVxcXCJcXG5AQCAtMTcyLDYgKzE3NCwzMCBAQCBleHBsaWNpdGx5IHNlbGVjdGVkLCBvciB0aGUgbnVtYmVyIG9mIGNvdW50ZXJzIGlzIG91dCBvZiByYW5nZSBmb3IgdGhlXFxuIHNlbGVjdGVkIFBNVS4gU2VsZWN0aW5nIGEgbmV3IFBNVSBjYW5jZWxzIHRoZSBlZmZlY3Qgb2Ygc2V0dGluZyB0aGlzXFxuIGF0dHJpYnV0ZS5cXG4gXFxuKzEuNiBBVFRSSUJVVEU6IEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWVxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rXFxuKzpQYXJhbWV0ZXJzOiBubyBhZGRpdGlvbmFsIHBhcmFtZXRlciBpbiBrdm1fZGV2aWNlX2F0dHIuYWRkclxcbitcXG4rOlJldHVybnM6XFxuK1xcbitcXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFx0IC1FQlVTWSAgIFBNVXYzIGFscmVhZHkgaW5pdGlhbGl6ZWQsIGEgVkNQVSBoYXMgYWxyZWFkeSBydW4sXFxuK1xcdFxcdCAgYW4gZXZlbnQgZmlsdGVyIGhhcyBhbHJlYWR5IGJlZW4gc2V0IG9yXFxuK1xcdFxcdCAgYSBoYXJkd2FyZSBQTVUgaGFzIGFscmVhZHkgYmVlbiBzcGVjaWZpZWRcXG4rXFx0IC1FTlhJTyAgIEF0dGVtcHRlZCB0byBnZXQgYmVmb3JlIHNldHRpbmdcXG4rXFx0IC1FTk9ERVYgIEF0dGVtcHRlZCB0byBzZXQgd2hpbGUgUE1VdjMgbm90IHN1cHBvcnRlZFxcbitcXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFxuK0lmIHNldCwgS1ZNIGVtdWxhdGVzIFBNVXYzIHdpdGhvdXQgcHJvZ3JhbW1hYmxlIGV2ZW50IGNvdW50ZXJzLlxcbitcXG4rV2l0aCBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NUUklDVCwgZW5hYmxpbmcgdGhpcyBhdHRyaWJ1dGUgc2F0aXNmaWVzIHRoZVxcbitQTVUgc2VsZWN0aW9uIHJlcXVpcmVtZW50IGZvciBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQuXFxuK1xcbitXaGVuIHRoaXMgYXR0cmlidXRlIGlzIGVuYWJsZWQsIHRoZSB2Q1BVIGNhbiBydW4gb24gYW55IHBoeXNpY2FsIENQVVxcbit0aGF0IGhhcyBhIFBNVSwgcmVnYXJkbGVzcyBvZiB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbi4gVGhpc1xcbithdHRyaWJ1dGUgaXMgVk0tc2NvcGVkLlxcbitcXG4gMi4gR1JPVVA6IEtWTV9BUk1fVkNQVV9USU1FUl9DVFJMXFxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuaW5kZXggMjdmZTBjZDViMmQ3YS4uMTBlM2ZmNDEwNzllOCAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5AQCAtMzY3LDYgKzM2NywxMCBAQCBzdHJ1Y3Qga3ZtX2FyY2gge1xcbiAjZGVmaW5lIEtWTV9BUkNIX0ZMQUdfV1JJVEFCTEVfSU1QX0lEX1JFR1NcXHRcXHQxMFxcbiBcXHQvKiBVbmhhbmRsZWQgU0VBcyBhcmUgdGFrZW4gdG8gdXNlcnNwYWNlICovXFxuICNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19FWElUX1NFQVxcdFxcdFxcdFxcdDExXFxuK1xcdC8qIFBNVXYzIGlzIGVtdWxhdGVkIHdpdGggYW4gZXhwbGljaXRseSBzcGVjaWZpZWQgaGFyZHdhcmUgUE1VICovXFxuKyNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRVhQTElDSVRcXHRcXHRcXHQxMlxcbitcXHQvKiBQTVV2MyBpcyBlbXVsYXRlZCB3aXRob3V0IHByb2dyYW1tYWJsZSBldmVudCBjb3VudGVycyAqL1xcbisjZGVmaW5lIEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlcXHQxM1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG4gXFx0LyogVk0td2lkZSB2Q1BVIGZlYXR1cmUgc2V0ICovXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxcbmluZGV4IDAxOWU1ZTNkODkyZTYuLjNiZDdmMjAxMjUyYTEgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXFxuQEAgLTQzOCw2ICs0MzgsNyBAQCBlbnVtIHtcXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSXFx0XFx0MlxcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VXFx0XFx0M1xcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlNcXHQ0XFxuKyNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlcXHQ1XFxuICNkZWZpbmUgS1ZNX0FSTV9WQ1BVX1RJTUVSX0NUUkxcXHRcXHQxXFxuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfVElNRVJfSVJRX1ZUSU1FUlxcdFxcdDBcXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9USU1FUl9JUlFfUFRJTUVSXFx0XFx0MVxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVfZXJyYXRhLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVfZXJyYXRhLmNcXG5pbmRleCA3OGU0ZTEwNWY2YWI1Li45YjJkOWQwZjE3Mzg4IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2NwdV9lcnJhdGEuY1xcbisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdV9lcnJhdGEuY1xcbkBAIC0xMDEyLDcgKzEwMTIsNyBAQCBjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyBhcm02NF9lcnJhdGFbXSA9IHtcXG4gXFx0e1xcbiBcXHRcXHQuZGVzYyA9IFxcXCJBcHBsZSBJTVBERUYgUE1VdjMgVHJhcHNcXFwiLFxcbiBcXHRcXHQuY2FwYWJpbGl0eSA9IEFSTTY0X1dPUktBUk9VTkRfUE1VVjNfSU1QREVGX1RSQVBTLFxcbi1cXHRcXHQudHlwZSA9IEFSTTY0X0NQVUNBUF9MT0NBTF9DUFVfRVJSQVRVTSxcXG4rXFx0XFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfRUFSTFlfTE9DQUxfQ1BVX0ZFQVRVUkUsXFxuIFxcdFxcdC5tYXRjaGVzID0gaGFzX2ltcGRlZl9wbXV2MyxcXG4gXFx0XFx0LmNwdV9lbmFibGUgPSBjcHVfZW5hYmxlX2ltcGRlZl9wbXV2M190cmFwcyxcXG4gXFx0fSxcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vYXJtLmMgYi9hcmNoL2FybTY0L2t2bS9hcm0uY1xcbmluZGV4IGNjYWU4MmMxMjQyYmMuLmRmZWJmZWI5NTYxOTggMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vYXJtLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9hcm0uY1xcbkBAIC02NTIsNiArNjUyLDcgQEAgc3RhdGljIGJvb2wga3ZtX3ZjcHVfc2hvdWxkX2NsZWFyX3R3ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcXG4ge1xcbiBcXHRzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11O1xcbitcXHRpbnQgbGFzdF9jcHUgPSB2Y3B1LVxcdTAwM2VjcHU7XFxuIFxcdGludCAqbGFzdF9yYW47XFxuIFxcbiBcXHRpZiAoaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkpXFxuQEAgLTcwMSw2ICs3MDIsNyBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXFxuIFxcdGlmIChoYXNfdmhlKCkpXFxuIFxcdFxcdGt2bV92Y3B1X2xvYWRfdmhlKHZjcHUpO1xcbiBcXHRrdm1fYXJjaF92Y3B1X2xvYWRfZnAodmNwdSk7XFxuK1xcdGt2bV92Y3B1X2xvYWRfcG11KHZjcHUsIGxhc3RfY3B1KTtcXG4gXFx0a3ZtX3ZjcHVfcG11X3Jlc3RvcmVfZ3Vlc3QodmNwdSk7XFxuIFxcdGlmIChrdm1fYXJtX2lzX3B2dGltZV9lbmFibGVkKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoKSlcXG4gXFx0XFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFQ09SRF9TVEVBTCwgdmNwdSk7XFxuQEAgLTc1NCw3ICs3NTYsNiBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0a3ZtX2FybV92bWlkX2NsZWFyX2FjdGl2ZSgpO1xcbiBcXG4gXFx0dmNwdV9jbGVhcl9vbl91bnN1cHBvcnRlZF9jcHUodmNwdSk7XFxuLVxcdHZjcHUtXFx1MDAzZWNwdSA9IC0xO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBfX2t2bV9hcm1fdmNwdV9wb3dlcl9vZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbkBAIC0xNjcwLDI5ICsxNjcxLDI2IEBAIHN0YXRpYyBpbnQgX19rdm1fdmNwdV9zZXRfdGFyZ2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGZlYXR1cmVzID0gaW5pdC1cXHUwMDNlZmVhdHVyZXNbMF07XFxuIFxcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXFx1MDAzZWt2bTtcXG4tXFx0aW50IHJldCA9IC1FSU5WQUw7XFxuK1xcdGludCByZXQ7XFxuIFxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xcbiBcXG4gXFx0aWYgKHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfVkNQVV9GRUFUVVJFU19DT05GSUdVUkVELCBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmZsYWdzKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAga3ZtX3ZjcHVfaW5pdF9jaGFuZ2VkKHZjcHUsIGluaXQpKVxcbi1cXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0Yml0bWFwX2NvcHkoa3ZtLVxcdTAwM2VhcmNoLnZjcHVfZmVhdHVyZXMsIFxcdTAwMjZmZWF0dXJlcywgS1ZNX1ZDUFVfTUFYX0ZFQVRVUkVTKTtcXG4gXFxuIFxcdHJldCA9IGt2bV9zZXR1cF92Y3B1KHZjcHUpO1xcbiBcXHRpZiAocmV0KVxcbi1cXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHQvKiBOb3cgd2Uga25vdyB3aGF0IGl0IGlzLCB3ZSBjYW4gcmVzZXQgaXQuICovXFxuIFxcdGt2bV9yZXNldF92Y3B1KHZjcHUpO1xcbiBcXG4gXFx0c2V0X2JpdChLVk1fQVJDSF9GTEFHX1ZDUFVfRkVBVFVSRVNfQ09ORklHVVJFRCwgXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5mbGFncyk7XFxuIFxcdHZjcHVfc2V0X2ZsYWcodmNwdSwgVkNQVV9JTklUSUFMSVpFRCk7XFxuLVxcdHJldCA9IDA7XFxuLW91dF91bmxvY2s6XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcXG4tXFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQga3ZtX3ZjcHVfc2V0X3RhcmdldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuQEAgLTE3MDgsNiArMTcwNiw4IEBAIHN0YXRpYyBpbnQga3ZtX3ZjcHVfc2V0X3RhcmdldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XFxuK1xcbiBcXHRpZiAoIWt2bV92Y3B1X2luaXRpYWxpemVkKHZjcHUpKVxcbiBcXHRcXHRyZXR1cm4gX19rdm1fdmNwdV9zZXRfdGFyZ2V0KHZjcHUsIGluaXQpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYyBiL2FyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmNcXG5pbmRleCA1YjFhZjdlMjE3NmZhLi5jNjgzMzFjZGZhZjkzIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jXFxuQEAgLTcsOSArNyw5IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jcHUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2t2bS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva3ZtX2hvc3QuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BlcmZfZXZlbnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BlcmYvYXJtX3BtdS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcmN1bGlzdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdWFjY2Vzcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9lbXVsYXRlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nrdm0vYXJtX3BtdS5oXFx1MDAzZVxcbkBAIC0xNyw2ICsxNywxMCBAQFxcbiBcXG4gI2RlZmluZSBQRVJGX0FUVFJfQ0ZHMV9DT1VOVEVSXzY0QklUXFx0QklUKDApXFxuIFxcbisvKlxcbisgKiBhcm1fcG11cyBpcyBhcHBlbmQtb25seS4ga3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzKCkgZmVlZHMgcGVyc2lzdGVudFxcbisgKiBWTSBzdGF0ZSwgc28gYSB0cnVlIHJlc3VsdCBtdXN0IHJlbWFpbiB2YWxpZCBhZnRlciB0aGUgY2hlY2suXFxuKyAqL1xcbiBzdGF0aWMgTElTVF9IRUFEKGFybV9wbXVzKTtcXG4gc3RhdGljIERFRklORV9NVVRFWChhcm1fcG11c19sb2NrKTtcXG4gXFxuQEAgLTI2LDcgKzMwLDYgQEAgc3RhdGljIGJvb2wga3ZtX3BtdV9jb3VudGVyX2lzX2VuYWJsZWQoc3RydWN0IGt2bV9wbWMgKnBtYyk7XFxuIFxcbiBib29sIGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2Myh2b2lkKVxcbiB7XFxuLVxcdGd1YXJkKG11dGV4KShcXHUwMDI2YXJtX3BtdXNfbG9jayk7XFxuIFxcdHJldHVybiAhbGlzdF9lbXB0eShcXHUwMDI2YXJtX3BtdXMpO1xcbiB9XFxuIFxcbkBAIC04MCw2ICs4MywxMSBAQCB1NjQga3ZtX3BtdV9ldnR5cGVyX21hc2soc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHRyZXR1cm4gbWFzaztcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wga3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHN0cnVjdCBrdm0gKmt2bSlcXG4re1xcbitcXHRyZXR1cm4gdGVzdF9iaXQoS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5mbGFncyk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBrdm1fcG1jX2lzXzY0Yml0IC0gZGV0ZXJtaW5lIGlmIGNvdW50ZXIgaXMgNjRiaXRcXG4gICogQHBtYzogY291bnRlciBjb250ZXh0XFxuQEAgLTMxNywxMiArMzI1LDEyIEBAIHU2NCBrdm1fcG11X2FjY2Vzc2libGVfY291bnRlcl9tYXNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIHU2NCBrdm1fcG11X2ltcGxlbWVudGVkX2NvdW50ZXJfbWFzayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0dTY0IHZhbCA9IEZJRUxEX0dFVChBUk1WOF9QTVVfUE1DUl9OLCBrdm1fdmNwdV9yZWFkX3BtY3IodmNwdSkpO1xcbitcXHR1NjQgbiA9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnM7XFxuIFxcbi1cXHRpZiAodmFsID09IDApXFxuK1xcdGlmIChuID09IDApXFxuIFxcdFxcdHJldHVybiBCSVQoQVJNVjhfUE1VX0NZQ0xFX0lEWCk7XFxuIFxcdGVsc2VcXG4tXFx0XFx0cmV0dXJuIEdFTk1BU0sodmFsIC0gMSwgMCkgfCBCSVQoQVJNVjhfUE1VX0NZQ0xFX0lEWCk7XFxuK1xcdFxcdHJldHVybiBHRU5NQVNLKG4gLSAxLCAwKSB8IEJJVChBUk1WOF9QTVVfQ1lDTEVfSURYKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQga3ZtX3BtY19lbmFibGVfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxcbkBAIC01NzEsNiArNTc5LDIzIEBAIHZvaWQga3ZtX3BtdV9zb2Z0d2FyZV9pbmNyZW1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKVxcbiBcXHRrdm1fcG11X2NvdW50ZXJfaW5jcmVtZW50KHZjcHUsIHZhbCwgQVJNVjhfUE1VVjNfUEVSRkNUUl9TV19JTkNSKTtcXG4gfVxcbiBcXG4rdm9pZCBrdm1fcG11X3JlcXVlc3RfcmVjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdHZjcHUtXFx1MDAzZWFyY2gucG11LmV2ZW50c19uZWVkX3JlY3JlYXRlID0gdHJ1ZTtcXG4rXFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFTE9BRF9QTVUsIHZjcHUpO1xcbit9XFxuK1xcbit2b2lkIGt2bV9wbXVfYXBwbHlfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBvbGQsIHU2NCB2YWwsIGJvb2wgZm9yY2VfcmVsb2FkKVxcbit7XFxuK1xcdHU2NCBjaGFuZ2VkID0gb2xkIF4gdmFsO1xcbitcXG4rXFx0LyogUmVsb2FkIHRoZSBQTVUgaWYgdGhlIHdyaXRlIGFmZmVjdHMgdGhlIGJhY2tpbmcgcGVyZiBldmVudHMuICovXFxuK1xcdGlmIChjaGFuZ2VkIFxcdTAwMjYgKEFSTVY4X1BNVV9QTUNSX0xDIHwgQVJNVjhfUE1VX1BNQ1JfTFApKVxcbitcXHRcXHRrdm1fcG11X3JlcXVlc3RfcmVjcmVhdGUodmNwdSk7XFxuK1xcdGVsc2UgaWYgKGZvcmNlX3JlbG9hZCB8fCAoY2hhbmdlZCBcXHUwMDI2IEFSTVY4X1BNVV9QTUNSX0UpKVxcbitcXHRcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBrdm1fcG11X2hhbmRsZV9wbWNyIC0gaGFuZGxlIFBNQ1IgcmVnaXN0ZXJcXG4gICogQHZjcHU6IFRoZSB2Y3B1IHBvaW50ZXJcXG5AQCAtNTc4LDE5ICs2MDMsMTggQEAgdm9pZCBrdm1fcG11X3NvZnR3YXJlX2luY3JlbWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpXFxuICAqL1xcbiB2b2lkIGt2bV9wbXVfaGFuZGxlX3BtY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKVxcbiB7XFxuK1xcdHU2NCBvbGQgPSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBQTUNSX0VMMCk7XFxuIFxcdGludCBpO1xcbiBcXG4gXFx0LyogRml4dXAgUE1DUl9FTDAgdG8gcmVjb25jaWxlIHRoZSBQTVUgdmVyc2lvbiBhbmQgdGhlIExQIGJpdCAqL1xcbiBcXHRpZiAoIWt2bV9oYXNfZmVhdCh2Y3B1LVxcdTAwM2Vrdm0sIElEX0FBNjRERlIwX0VMMSwgUE1VVmVyLCBWM1A1KSlcXG4gXFx0XFx0dmFsIFxcdTAwMjY9IH5BUk1WOF9QTVVfUE1DUl9MUDtcXG4gXFxuLVxcdC8qIFJlcXVlc3QgYSByZWxvYWQgb2YgdGhlIFBNVSB0byBlbmFibGUvZGlzYWJsZSBhZmZlY3RlZCBjb3VudGVycyAqL1xcbi1cXHRpZiAoKF9fdmNwdV9zeXNfcmVnKHZjcHUsIFBNQ1JfRUwwKSBeIHZhbCkgXFx1MDAyNiBBUk1WOF9QTVVfUE1DUl9FKVxcbi1cXHRcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XFxuLVxcbiBcXHQvKiBUaGUgcmVzZXQgYml0cyBkb24ndCBpbmRpY2F0ZSBhbnkgc3RhdGUsIGFuZCBzaG91bGRuJ3QgYmUgc2F2ZWQuICovXFxuIFxcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBQTUNSX0VMMCwgKHZhbCBcXHUwMDI2IH4oQVJNVjhfUE1VX1BNQ1JfQyB8IEFSTVY4X1BNVV9QTUNSX1ApKSk7XFxuIFxcbitcXHRrdm1fcG11X2FwcGx5X3BtY3IodmNwdSwgb2xkLCBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBQTUNSX0VMMCksIGZhbHNlKTtcXG4rXFxuIFxcdGlmICh2YWwgXFx1MDAyNiBBUk1WOF9QTVVfUE1DUl9DKVxcbiBcXHRcXHRrdm1fcG11X3NldF9jb3VudGVyX3ZhbHVlKHZjcHUsIEFSTVY4X1BNVV9DWUNMRV9JRFgsIDApO1xcbiBcXG5AQCAtNjA2LDYgKzYzMCwyMCBAQCB2b2lkIGt2bV9wbXVfaGFuZGxlX3BtY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKVxcbiBcXHR9XFxuIH1cXG4gXFxuK3ZvaWQga3ZtX3BtdV9hcHBseV9tZGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9sZCwgdTY0IHZhbClcXG4re1xcbitcXHR1NjQgY2hhbmdlZCA9IG9sZCBeIHZhbDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEhQTU4gZGV0ZXJtaW5lcyB3aGljaCBjb3VudGVycyBIUE1EIGFuZCBITFAgYXBwbHkgdG8uIENoYW5nZXMgdG9cXG4rXFx0ICogdGhlc2UgZmllbGRzIHJlcXVpcmUgbmV3IHBlcmYgZXZlbnQgZmlsdGVycyBhbmQgc2FtcGxlIHBlcmlvZHMuXFxuK1xcdCAqL1xcbitcXHRpZiAoY2hhbmdlZCBcXHUwMDI2IChNRENSX0VMMl9IUE1OIHwgTURDUl9FTDJfSFBNRCB8IE1EQ1JfRUwyX0hMUCkpXFxuK1xcdFxcdGt2bV9wbXVfcmVxdWVzdF9yZWNyZWF0ZSh2Y3B1KTtcXG4rXFx0ZWxzZSBpZiAoY2hhbmdlZCBcXHUwMDI2IE1EQ1JfRUwyX0hQTUUpXFxuK1xcdFxcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUxPQURfUE1VLCB2Y3B1KTtcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wga3ZtX3BtdV9jb3VudGVyX2lzX2VuYWJsZWQoc3RydWN0IGt2bV9wbWMgKnBtYylcXG4ge1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fcG1jX3RvX3ZjcHUocG1jKTtcXG5AQCAtNjQ5LDEwICs2ODcsOCBAQCBzdGF0aWMgYm9vbCBrdm1fcG1jX2NvdW50c19hdF9lbDIoc3RydWN0IGt2bV9wbWMgKnBtYylcXG4gXFx0cmV0dXJuIGt2bV9wbWNfcmVhZF9ldnRyZWcocG1jKSBcXHUwMDI2IEFSTVY4X1BNVV9JTkNMVURFX0VMMjtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBrdm1fbWFwX3BtdV9ldmVudChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBldmVudHNlbClcXG4rc3RhdGljIGludCBrdm1fbWFwX3BtdV9ldmVudChzdHJ1Y3QgYXJtX3BtdSAqcG11LCB1bnNpZ25lZCBpbnQgZXZlbnRzZWwpXFxuIHtcXG4tXFx0c3RydWN0IGFybV9wbXUgKnBtdSA9IGt2bS1cXHUwMDNlYXJjaC5hcm1fcG11O1xcbi1cXG4gXFx0LypcXG4gXFx0ICogVGhlIENQVSBQTVUgbGlrZWx5IGlzbid0IFBNVXYzOyBsZXQgdGhlIGRyaXZlciBwcm92aWRlIGEgbWFwcGluZ1xcbiBcXHQgKiBmb3IgdGhlIGd1ZXN0J3MgUE1VdjMgZXZlbnQgSUQuXFxuQEAgLTY2MywxNCArNjk5LDI3IEBAIHN0YXRpYyBpbnQga3ZtX21hcF9wbXVfZXZlbnQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgZXZlbnRzZWwpXFxuIFxcdHJldHVybiBldmVudHNlbDtcXG4gfVxcbiBcXG4tLyoqXFxuLSAqIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQgLSBjcmVhdGUgYSBwZXJmIGV2ZW50IGZvciBhIGNvdW50ZXJcXG4tICogQHBtYzogQ291bnRlciBjb250ZXh0XFxuLSAqL1xcbi1zdGF0aWMgdm9pZCBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50KHN0cnVjdCBrdm1fcG1jICpwbWMpXFxuK3N0YXRpYyBzdHJ1Y3QgYXJtX3BtdSAqa3ZtX3BtdV9wcm9iZV9hcm1wbXUoaW50IGNwdSlcXG4re1xcbitcXHRzdHJ1Y3QgYXJtX3BtdV9lbnRyeSAqZW50cnk7XFxuK1xcdHN0cnVjdCBhcm1fcG11ICpwbXU7XFxuK1xcbitcXHRndWFyZChyY3UpKCk7XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbnRyeSwgXFx1MDAyNmFybV9wbXVzLCBlbnRyeSkge1xcbitcXHRcXHRwbXUgPSBlbnRyeS1cXHUwMDNlYXJtX3BtdTtcXG4rXFxuK1xcdFxcdGlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgXFx1MDAyNnBtdS1cXHUwMDNlc3VwcG9ydGVkX2NwdXMpKVxcbitcXHRcXHRcXHRyZXR1cm4gcG11O1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdShzdHJ1Y3Qga3ZtX3BtYyAqcG1jLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGFybV9wbXUgKmFybV9wbXUpXFxuIHtcXG4gXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX3BtY190b192Y3B1KHBtYyk7XFxuLVxcdHN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0gdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmFybV9wbXU7XFxuIFxcdHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDtcXG4gXFx0c3RydWN0IHBlcmZfZXZlbnRfYXR0ciBhdHRyO1xcbiBcXHRpbnQgZXZlbnRzZWw7XFxuQEAgLTcwNCw3ICs3NTMsNyBAQCBzdGF0aWMgdm9pZCBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50KHN0cnVjdCBrdm1fcG1jICpwbWMpXFxuIFxcdCAqIERvbid0IGNyZWF0ZSBhbiBldmVudCBpZiB3ZSdyZSBydW5uaW5nIG9uIGhhcmR3YXJlIHRoYXQgcmVxdWlyZXNcXG4gXFx0ICogUE1VdjMgZXZlbnQgdHJhbnNsYXRpb24gYW5kIHdlIGNvdWxkbid0IGZpbmQgYSB2YWxpZCBtYXBwaW5nLlxcbiBcXHQgKi9cXG4tXFx0ZXZlbnRzZWwgPSBrdm1fbWFwX3BtdV9ldmVudCh2Y3B1LVxcdTAwM2Vrdm0sIGV2ZW50c2VsKTtcXG4rXFx0ZXZlbnRzZWwgPSBrdm1fbWFwX3BtdV9ldmVudChhcm1fcG11LCBldmVudHNlbCk7XFxuIFxcdGlmIChldmVudHNlbCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuQEAgLTc0OSw2ICs3OTgsMzIgQEAgc3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxcbiBcXHRwbWMtXFx1MDAzZXBlcmZfZXZlbnQgPSBldmVudDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQgLSBjcmVhdGUgYSBwZXJmIGV2ZW50IGZvciBhIGNvdW50ZXJcXG4rICogQHBtYzogQ291bnRlciBjb250ZXh0XFxuKyAqL1xcbitzdGF0aWMgdm9pZCBrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50KHN0cnVjdCBrdm1fcG1jICpwbWMpXFxuK3tcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX3BtY190b192Y3B1KHBtYyk7XFxuK1xcdHN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0gdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmFybV9wbXU7XFxuK1xcbitcXHRpZiAoa3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXFx1MDAzZWt2bSkpIHtcXG4rXFx0XFx0ZG8ge1xcbitcXHRcXHRcXHRhcm1fcG11ID0ga3ZtX3BtdV9wcm9iZV9hcm1wbXUoUkVBRF9PTkNFKHZjcHUtXFx1MDAzZWNwdSkpO1xcbitcXG4rXFx0XFx0XFx0aWYgKCFhcm1fcG11KSB7XFxuK1xcdFxcdFxcdFxcdHByX3dhcm5fb25jZShcXFwia3ZtOiBVbnN1cHBvcnRlZCBQTVUgdmFyaWF0aW9uIGRldGVjdGVkLlxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdGFkZF90YWludChUQUlOVF9DUFVfT1VUX09GX1NQRUMsIExPQ0tERVBfU1RJTExfT0spO1xcbitcXHRcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnRfd2l0aF9wbXUocG1jLCBhcm1fcG11KTtcXG4rXFx0XFx0fSB3aGlsZSAoIWNwdW1hc2tfdGVzdF9jcHUoUkVBRF9PTkNFKHZjcHUtXFx1MDAzZWNwdSksIFxcdTAwMjZhcm1fcG11LVxcdTAwM2VzdXBwb3J0ZWRfY3B1cykpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50X3dpdGhfcG11KHBtYywgYXJtX3BtdSk7XFxuK1xcdH1cXG4rfVxcbitcXG4gLyoqXFxuICAqIGt2bV9wbXVfc2V0X2NvdW50ZXJfZXZlbnRfdHlwZSAtIHNldCBzZWxlY3RlZCBjb3VudGVyIHRvIG1vbml0b3Igc29tZSBldmVudFxcbiAgKiBAdmNwdTogVGhlIHZjcHUgcG9pbnRlclxcbkBAIC03ODksNDMgKzg2NCw3IEBAIHZvaWQga3ZtX2hvc3RfcG11X2luaXQoc3RydWN0IGFybV9wbXUgKnBtdSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0ZW50cnktXFx1MDAzZWFybV9wbXUgPSBwbXU7XFxuLVxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmVudHJ5LVxcdTAwM2VlbnRyeSwgXFx1MDAyNmFybV9wbXVzKTtcXG4tfVxcbi1cXG4tc3RhdGljIHN0cnVjdCBhcm1fcG11ICprdm1fcG11X3Byb2JlX2FybXBtdSh2b2lkKVxcbi17XFxuLVxcdHN0cnVjdCBhcm1fcG11X2VudHJ5ICplbnRyeTtcXG4tXFx0c3RydWN0IGFybV9wbXUgKnBtdTtcXG4tXFx0aW50IGNwdTtcXG4tXFxuLVxcdGd1YXJkKG11dGV4KShcXHUwMDI2YXJtX3BtdXNfbG9jayk7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBJdCBpcyBzYWZlIHRvIHVzZSBhIHN0YWxlIGNwdSB0byBpdGVyYXRlIHRoZSBsaXN0IG9mIFBNVXMgc28gbG9uZyBhc1xcbi1cXHQgKiB0aGUgc2FtZSB2YWx1ZSBpcyB1c2VkIGZvciB0aGUgZW50aXJldHkgb2YgdGhlIGxvb3AuIEdpdmVuIHRoaXMsIGFuZFxcbi1cXHQgKiB0aGUgZmFjdCB0aGF0IG5vIHBlcmNwdSBkYXRhIGlzIHVzZWQgZm9yIHRoZSBsb29rdXAgdGhlcmUgaXMgbm8gbmVlZFxcbi1cXHQgKiB0byBkaXNhYmxlIHByZWVtcHRpb24uXFxuLVxcdCAqXFxuLVxcdCAqIEl0IGlzIHN0aWxsIG5lY2Vzc2FyeSB0byBnZXQgYSB2YWxpZCBjcHUsIHRob3VnaCwgdG8gcHJvYmUgZm9yIHRoZVxcbi1cXHQgKiBkZWZhdWx0IFBNVSBpbnN0YW5jZSBhcyB1c2Vyc3BhY2UgaXMgbm90IHJlcXVpcmVkIHRvIHNwZWNpZnkgYSBQTVVcXG4tXFx0ICogdHlwZS4gSW4gb3JkZXIgdG8gdXBob2xkIHRoZSBwcmVleGlzdGluZyBiZWhhdmlvciBLVk0gc2VsZWN0cyB0aGVcXG4tXFx0ICogUE1VIGluc3RhbmNlIGZvciB0aGUgY29yZSBkdXJpbmcgdmNwdSBpbml0LiBBIGRlcGVuZGVudCB1c2VcXG4tXFx0ICogY2FzZSB3b3VsZCBiZSBhIHVzZXIgd2l0aCBkaXNkYWluIG9mIGFsbCB0aGluZ3MgYmlnLkxJVFRMRSB0aGF0XFxuLVxcdCAqIGFmZmluZXMgdGhlIFZNTSB0byBhIHBhcnRpY3VsYXIgY2x1c3RlciBvZiBjb3Jlcy5cXG4tXFx0ICpcXG4tXFx0ICogSW4gYW55IGNhc2UsIHVzZXJzcGFjZSBzaG91bGQganVzdCBkbyB0aGUgc2FuZSB0aGluZyBhbmQgdXNlIHRoZSBVQVBJXFxuLVxcdCAqIHRvIHNlbGVjdCBhIFBNVSB0eXBlIGRpcmVjdGx5LiBCdXQsIGJlIHdhcnkgb2YgdGhlIGJhZ2dhZ2UgYmVpbmdcXG4tXFx0ICogY2FycmllZCBoZXJlLlxcbi1cXHQgKi9cXG4tXFx0Y3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTtcXG4tXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXFx1MDAyNmFybV9wbXVzLCBlbnRyeSkge1xcbi1cXHRcXHRwbXUgPSBlbnRyeS1cXHUwMDNlYXJtX3BtdTtcXG4tXFxuLVxcdFxcdGlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgXFx1MDAyNnBtdS1cXHUwMDNlc3VwcG9ydGVkX2NwdXMpKVxcbi1cXHRcXHRcXHRyZXR1cm4gcG11O1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gTlVMTDtcXG4rXFx0bGlzdF9hZGRfdGFpbF9yY3UoXFx1MDAyNmVudHJ5LVxcdTAwM2VlbnRyeSwgXFx1MDAyNmFybV9wbXVzKTtcXG4gfVxcbiBcXG4gc3RhdGljIHU2NCBfX2NvbXB1dGVfcG1jZWlkKHN0cnVjdCBhcm1fcG11ICpwbXUsIGJvb2wgcG1jZWlkMSlcXG5AQCAtODcxLDYgKzkxMCwxMyBAQCB1NjQga3ZtX3BtdV9nZXRfcG1jZWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBwbWNlaWQxKVxcbiBcXHR1NjQgdmFsLCBtYXNrID0gMDtcXG4gXFx0aW50IGJhc2UsIGksIG5yX2V2ZW50cztcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIEhpZGUgdGhlIGhhcmR3YXJlIFBNVSdzIGV2ZW50IHNldCB0byBrZWVwIFBNQ0VJRCBzdGFibGUgYWNyb3NzXFxuK1xcdCAqIHBoeXNpY2FsIENQVSBtaWdyYXRpb24uXFxuK1xcdCAqL1xcbitcXHRpZiAoa3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXFx1MDAzZWt2bSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4gXFx0aWYgKCFwbWNlaWQxKSB7XFxuIFxcdFxcdHZhbCA9IGNvbXB1dGVfcG1jZWlkMCh2Y3B1KTtcXG4gXFx0XFx0YmFzZSA9IDA7XFxuQEAgLTg5OCw5ICs5NDQsMjcgQEAgdTY0IGt2bV9wbXVfZ2V0X3BtY2VpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcG1jZWlkMSlcXG4gXFx0cmV0dXJuIHZhbCBcXHUwMDI2IG1hc2s7XFxuIH1cXG4gXFxuK3ZvaWQga3ZtX3ZjcHVfbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbGFzdF9jcHUpXFxuK3tcXG4rXFx0aWYgKCFrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdS1cXHUwMDNla3ZtKSB8fCB2Y3B1LVxcdTAwM2VjcHUgPT0gbGFzdF9jcHUgfHwgbGFzdF9jcHUgPT0gLTEpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmIChrdm1fcG11X3Byb2JlX2FybXBtdSh2Y3B1LVxcdTAwM2VjcHUpICE9IGt2bV9wbXVfcHJvYmVfYXJtcG11KGxhc3RfY3B1KSlcXG4rXFx0XFx0a3ZtX3BtdV9yZXF1ZXN0X3JlY3JlYXRlKHZjcHUpO1xcbit9XFxuK1xcbiB2b2lkIGt2bV92Y3B1X3JlbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuK1xcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5wbXU7XFxuIFxcdHU2NCBtYXNrID0ga3ZtX3BtdV9pbXBsZW1lbnRlZF9jb3VudGVyX21hc2sodmNwdSk7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKHBtdS1cXHUwMDNlZXZlbnRzX25lZWRfcmVjcmVhdGUpIHtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEtWTV9BUk1WOF9QTVVfTUFYX0NPVU5URVJTOyBpKyspXFxuK1xcdFxcdFxcdGt2bV9wbXVfc3RvcF9jb3VudGVyKGt2bV92Y3B1X2lkeF90b19wbWModmNwdSwgaSkpO1xcbitcXG4rXFx0XFx0cG11LVxcdTAwM2VldmVudHNfbmVlZF9yZWNyZWF0ZSA9IGZhbHNlO1xcbitcXHR9XFxuIFxcbiBcXHRfX3ZjcHVfcm13X3N5c19yZWcodmNwdSwgUE1PVlNTRVRfRUwwLCBcXHUwMDI2PSwgbWFzayk7XFxuIFxcdF9fdmNwdV9ybXdfc3lzX3JlZyh2Y3B1LCBQTUlOVEVOU0VUX0VMMSwgXFx1MDAyNj0sIG1hc2spO1xcbkBAIC05MzksOCArMTAwMyw4IEBAIGludCBrdm1fYXJtX3BtdV92M19lbmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gc3RhdGljIGludCBrdm1fYXJtX3BtdV92M19pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbi1cXHQvKiBPbmx5IHBvc3NpYmxlIHdoZW4gdXNpbmcgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TVFJJQ1QgKi9cXG4tXFx0aWYgKCF2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guYXJtX3BtdSlcXG4rXFx0LyogU3RyaWN0IFBNVXYzIHJlcXVpcmVzIGEgaGFyZHdhcmUgUE1VIG9yIGZpeGVkLWNvdW50ZXJzLW9ubHkgbW9kZS4gKi9cXG4rXFx0aWYgKCF2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guYXJtX3BtdSBcXHUwMDI2XFx1MDAyNiAha3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXFx1MDAzZWt2bSkpXFxuIFxcdFxcdHJldHVybiAtRU5YSU87XFxuIFxcbiBcXHRpZiAoaXJxY2hpcF9pbl9rZXJuZWwodmNwdS1cXHUwMDNla3ZtKSkge1xcbkBAIC0xMDEzLDYgKzEwNzcsOSBAQCB1OCBrdm1fYXJtX3BtdV9nZXRfbWF4X2NvdW50ZXJzKHN0cnVjdCBrdm0gKmt2bSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IGt2bS1cXHUwMDNlYXJjaC5hcm1fcG11O1xcbiBcXG4rXFx0aWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seShrdm0pKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFVuZGVyIEtWTV9BUk1fVkNQVV9QTVVfVjNfU1RSSUNUIG5vIFBNVSBleGlzdHMgdW50aWwgdXNlcnNwYWNlIHNldHNcXG4gXFx0ICogb25lLCBzbyB0aGlzIGNhbiBiZSByZWFjaGVkIGJlZm9yZSBhcm1fcG11IGlzIHNldC4gUmVwb3J0IG5vXFxuQEAgLTEwMzUsMzAgKzExMDIsMTIgQEAgdTgga3ZtX2FybV9wbXVfZ2V0X21heF9jb3VudGVycyhzdHJ1Y3Qga3ZtICprdm0pXFxuIFxcdHJldHVybiBiaXRtYXBfd2VpZ2h0KGFybV9wbXUtXFx1MDAzZWNudHJfbWFzaywgQVJNVjhfUE1VX01BWF9HRU5FUkFMX0NPVU5URVJTKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQga3ZtX2FybV9zZXRfbnJfY291bnRlcnMoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgbnIpXFxuLXtcXG4tXFx0a3ZtLVxcdTAwM2VhcmNoLm5yX3BtdV9jb3VudGVycyA9IG5yO1xcbi1cXG4tXFx0LyogUmVzZXQgTURDUl9FTDIuSFBNTiBiZWhpbmQgdGhlIHZjcHVzJyBiYWNrLi4uICovXFxuLVxcdGlmICh0ZXN0X2JpdChLVk1fQVJNX1ZDUFVfSEFTX0VMMiwga3ZtLVxcdTAwM2VhcmNoLnZjcHVfZmVhdHVyZXMpKSB7XFxuLVxcdFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4tXFx0XFx0dW5zaWduZWQgbG9uZyBpO1xcbi1cXG4tXFx0XFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKSB7XFxuLVxcdFxcdFxcdHU2NCB2YWwgPSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBNRENSX0VMMik7XFxuLVxcdFxcdFxcdHZhbCBcXHUwMDI2PSB+TURDUl9FTDJfSFBNTjtcXG4tXFx0XFx0XFx0dmFsIHw9IEZJRUxEX1BSRVAoTURDUl9FTDJfSFBNTiwga3ZtLVxcdTAwM2VhcmNoLm5yX3BtdV9jb3VudGVycyk7XFxuLVxcdFxcdFxcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBNRENSX0VMMiwgdmFsKTtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuLX1cXG4tXFxuIHN0YXRpYyB2b2lkIGt2bV9hcm1fc2V0X3BtdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBhcm1fcG11ICphcm1fcG11KVxcbiB7XFxuIFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XFxuIFxcbiBcXHRrdm0tXFx1MDAzZWFyY2guYXJtX3BtdSA9IGFybV9wbXU7XFxuLVxcdGt2bV9hcm1fc2V0X25yX2NvdW50ZXJzKGt2bSwga3ZtX2FybV9wbXVfZ2V0X21heF9jb3VudGVycyhrdm0pKTtcXG4rXFx0a3ZtLVxcdTAwM2VhcmNoLm5yX3BtdV9jb3VudGVycyA9IGt2bV9hcm1fcG11X2dldF9tYXhfY291bnRlcnMoa3ZtKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTEwNzYsNyArMTEyNSwyNCBAQCBzdGF0aWMgdm9pZCBrdm1fYXJtX3NldF9wbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSlcXG4gICovXFxuIGludCBrdm1fYXJtX3NldF9kZWZhdWx0X3BtdShzdHJ1Y3Qga3ZtICprdm0pXFxuIHtcXG4tXFx0c3RydWN0IGFybV9wbXUgKmFybV9wbXUgPSBrdm1fcG11X3Byb2JlX2FybXBtdSgpO1xcbitcXHQvKlxcbitcXHQgKiBJdCBpcyBzYWZlIHRvIHVzZSBhIHN0YWxlIGNwdSB0byBpdGVyYXRlIHRoZSBsaXN0IG9mIFBNVXMgc28gbG9uZyBhc1xcbitcXHQgKiB0aGUgc2FtZSB2YWx1ZSBpcyB1c2VkIGZvciB0aGUgZW50aXJldHkgb2YgdGhlIGxvb3AuIEdpdmVuIHRoaXMsIGFuZFxcbitcXHQgKiB0aGUgZmFjdCB0aGF0IG5vIHBlcmNwdSBkYXRhIGlzIHVzZWQgZm9yIHRoZSBsb29rdXAgdGhlcmUgaXMgbm8gbmVlZFxcbitcXHQgKiB0byBkaXNhYmxlIHByZWVtcHRpb24uXFxuK1xcdCAqXFxuK1xcdCAqIEl0IGlzIHN0aWxsIG5lY2Vzc2FyeSB0byBnZXQgYSB2YWxpZCBjcHUsIHRob3VnaCwgdG8gcHJvYmUgZm9yIHRoZVxcbitcXHQgKiBkZWZhdWx0IFBNVSBpbnN0YW5jZSBhcyB1c2Vyc3BhY2UgaXMgbm90IHJlcXVpcmVkIHRvIHNwZWNpZnkgYSBQTVVcXG4rXFx0ICogdHlwZS4gSW4gb3JkZXIgdG8gdXBob2xkIHRoZSBwcmVleGlzdGluZyBiZWhhdmlvciBLVk0gc2VsZWN0cyB0aGVcXG4rXFx0ICogUE1VIGluc3RhbmNlIGZvciB0aGUgY29yZSBkdXJpbmcgdmNwdSBpbml0LiBBIGRlcGVuZGVudCB1c2VcXG4rXFx0ICogY2FzZSB3b3VsZCBiZSBhIHVzZXIgd2l0aCBkaXNkYWluIG9mIGFsbCB0aGluZ3MgYmlnLkxJVFRMRSB0aGF0XFxuK1xcdCAqIGFmZmluZXMgdGhlIFZNTSB0byBhIHBhcnRpY3VsYXIgY2x1c3RlciBvZiBjb3Jlcy5cXG4rXFx0ICpcXG4rXFx0ICogSW4gYW55IGNhc2UsIHVzZXJzcGFjZSBzaG91bGQganVzdCBkbyB0aGUgc2FuZSB0aGluZyBhbmQgdXNlIHRoZSBVQVBJXFxuK1xcdCAqIHRvIHNlbGVjdCBhIFBNVSB0eXBlIGRpcmVjdGx5LCBvciByZXF1ZXN0IGZpeGVkLWNvdW50ZXJzLW9ubHlcXG4rXFx0ICogZW11bGF0aW9uLiBCdXQsIGJlIHdhcnkgb2YgdGhlIGJhZ2dhZ2UgYmVpbmcgY2FycmllZCBoZXJlLlxcbitcXHQgKi9cXG4rXFx0c3RydWN0IGFybV9wbXUgKmFybV9wbXUgPSBrdm1fcG11X3Byb2JlX2FybXBtdShyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTtcXG4gXFxuIFxcdGlmICghYXJtX3BtdSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuQEAgLTEwOTMsMTcgKzExNTksMTkgQEAgc3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBtdV9pZClcXG4gXFx0aW50IHJldCA9IC1FTlhJTztcXG4gXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNmFybV9wbXVzX2xvY2spO1xcbitcXHRndWFyZChyY3UpKCk7XFxuIFxcbi1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcXHUwMDI2YXJtX3BtdXMsIGVudHJ5KSB7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVudHJ5LCBcXHUwMDI2YXJtX3BtdXMsIGVudHJ5KSB7XFxuIFxcdFxcdGFybV9wbXUgPSBlbnRyeS1cXHUwMDNlYXJtX3BtdTtcXG4gXFx0XFx0aWYgKGFybV9wbXUtXFx1MDAzZXBtdS50eXBlID09IHBtdV9pZCkge1xcbiBcXHRcXHRcXHRpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pIHx8XFxuK1xcdFxcdFxcdCAgICBrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSB8fFxcbiBcXHRcXHRcXHQgICAgKGt2bS1cXHUwMDNlYXJjaC5wbXVfZmlsdGVyIFxcdTAwMjZcXHUwMDI2IGt2bS1cXHUwMDNlYXJjaC5hcm1fcG11ICE9IGFybV9wbXUpKSB7XFxuIFxcdFxcdFxcdFxcdHJldCA9IC1FQlVTWTtcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdH1cXG4gXFxuK1xcdFxcdFxcdHNldF9iaXQoS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRVhQTElDSVQsIFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guZmxhZ3MpO1xcbiBcXHRcXHRcXHRrdm1fYXJtX3NldF9wbXUoa3ZtLCBhcm1fcG11KTtcXG4gXFx0XFx0XFx0Y3B1bWFza19jb3B5KGt2bS1cXHUwMDNlYXJjaC5zdXBwb3J0ZWRfY3B1cywgXFx1MDAyNmFybV9wbXUtXFx1MDAzZXN1cHBvcnRlZF9jcHVzKTtcXG4gXFxuQEAgLTExMjIsMjEgKzExOTAsMzkgQEAgc3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBtdV9pZClcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNmFybV9wbXVzX2xvY2spO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3tcXG4rXFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cXHUwMDNla3ZtO1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcXG4rXFxuK1xcdGlmIChrdm1fdm1faGFzX3Jhbl9vbmNlKGt2bSkgfHwga3ZtLVxcdTAwM2VhcmNoLnBtdV9maWx0ZXIgfHxcXG4rXFx0ICAgIHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0VYUExJQ0lULCBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuK1xcdHNldF9iaXQoS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5mbGFncyk7XFxuK1xcdGt2bS1cXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnMgPSAwO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X25yX2NvdW50ZXJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IG4pXFxuIHtcXG4gXFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cXHUwMDNla3ZtO1xcbiBcXG4rXFx0aWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSlcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuIFxcdGlmICgha3ZtLVxcdTAwM2VhcmNoLmFybV9wbXUpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0aWYgKG4gXFx1MDAzZSBrdm1fYXJtX3BtdV9nZXRfbWF4X2NvdW50ZXJzKGt2bSkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0a3ZtX2FybV9zZXRfbnJfY291bnRlcnMoa3ZtLCBuKTtcXG4rXFx0a3ZtLVxcdTAwM2VhcmNoLm5yX3BtdV9jb3VudGVycyA9IG47XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0xMjAwLDcgKzEyODYsNyBAQCBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbiBcXHRcXHQgICAgIGZpbHRlci5hY3Rpb24gIT0gS1ZNX1BNVV9FVkVOVF9ERU5ZKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRcXHRpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pKVxcbitcXHRcXHRpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pIHx8IGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seShrdm0pKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiBcXG4gXFx0XFx0aWYgKCFrdm0tXFx1MDAzZWFyY2guYXJtX3BtdSlcXG5AQCAtMTI0OCw2ICsxMzM0LDggQEAgaW50IGt2bV9hcm1fcG11X3YzX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4gXFxuIFxcdFxcdHJldHVybiBrdm1fYXJtX3BtdV92M19zZXRfbnJfY291bnRlcnModmNwdSwgbik7XFxuIFxcdH1cXG4rXFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFk6XFxuK1xcdFxcdHJldHVybiBrdm1fYXJtX3BtdV92M19zZXRfcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdSk7XFxuIFxcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklUOlxcbiBcXHRcXHRyZXR1cm4ga3ZtX2FybV9wbXVfdjNfaW5pdCh2Y3B1KTtcXG4gXFx0fVxcbkBAIC0xMjc0LDYgKzEzNjIsOSBAQCBpbnQga3ZtX2FybV9wbXVfdjNfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbiBcXHRcXHRpcnEgPSB2Y3B1LVxcdTAwM2VhcmNoLnBtdS5pcnFfbnVtO1xcbiBcXHRcXHRyZXR1cm4gcHV0X3VzZXIoaXJxLCB1YWRkcik7XFxuIFxcdH1cXG4rXFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFk6XFxuK1xcdFxcdGlmIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdS1cXHUwMDNla3ZtKSlcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiAtRU5YSU87XFxuQEAgLTEyODcsNiArMTM3OCw3IEBAIGludCBrdm1fYXJtX3BtdV92M19oYXNfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuIFxcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVI6XFxuIFxcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VOlxcbiBcXHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfU0VUX05SX0NPVU5URVJTOlxcbitcXHRjYXNlIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWTpcXG4gXFx0XFx0aWYgKGt2bV92Y3B1X2hhc19wbXUodmNwdSkpXFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3Jlc2V0LmMgYi9hcmNoL2FybTY0L2t2bS9yZXNldC5jXFxuaW5kZXggMTBlYjcyNDlhYTllOC4uY2RjZGVhODUwOTA5YyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9yZXNldC5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vcmVzZXQuY1xcbkBAIC0xNzgsMTcgKzE3OCwyNCBAQCBzdGF0aWMgdm9pZCBrdm1fdmNwdV9yZXNldF9zdmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB2b2lkIGt2bV9yZXNldF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHRzdHJ1Y3QgdmNwdV9yZXNldF9zdGF0ZSByZXNldF9zdGF0ZTtcXG4tXFx0Ym9vbCBsb2FkZWQ7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqcnVubmluZztcXG4rXFx0Ym9vbCBsb2FkZWQgPSBmYWxzZTtcXG4gXFxuIFxcdHNwaW5fbG9jayhcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5tcF9zdGF0ZV9sb2NrKTtcXG4gXFx0cmVzZXRfc3RhdGUgPSB2Y3B1LVxcdTAwM2VhcmNoLnJlc2V0X3N0YXRlO1xcbiBcXHR2Y3B1LVxcdTAwM2VhcmNoLnJlc2V0X3N0YXRlLnJlc2V0ID0gZmFsc2U7XFxuIFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLm1wX3N0YXRlX2xvY2spO1xcbiBcXG4tXFx0cHJlZW1wdF9kaXNhYmxlKCk7XFxuLVxcdGxvYWRlZCA9ICh2Y3B1LVxcdTAwM2VjcHUgIT0gLTEpO1xcbi1cXHRpZiAobG9hZGVkKVxcbitcXHRndWFyZChwcmVlbXB0KSgpO1xcbitcXG4rXFx0cnVubmluZyA9IGt2bV9nZXRfcnVubmluZ192Y3B1KCk7XFxuK1xcdGlmIChydW5uaW5nKSB7XFxuK1xcdFxcdGlmIChLVk1fQlVHX09OKHJ1bm5pbmcgIT0gdmNwdSwgdmNwdS1cXHUwMDNla3ZtKSlcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0XFx0bG9hZGVkID0gdHJ1ZTtcXG4gXFx0XFx0a3ZtX2FyY2hfdmNwdV9wdXQodmNwdSk7XFxuK1xcdH1cXG4gXFxuIFxcdGlmICgha3ZtX2FybV92Y3B1X3N2ZV9maW5hbGl6ZWQodmNwdSkpIHtcXG4gXFx0XFx0aWYgKHZjcHVfaGFzX2ZlYXR1cmUodmNwdSwgS1ZNX0FSTV9WQ1BVX1NWRSkpXFxuQEAgLTIxNSw3ICsyMjIsNiBAQCB2b2lkIGt2bV9yZXNldF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIFxcdGlmIChsb2FkZWQpXFxuIFxcdFxcdGt2bV9hcmNoX3ZjcHVfbG9hZCh2Y3B1LCBzbXBfcHJvY2Vzc29yX2lkKCkpO1xcbi1cXHRwcmVlbXB0X2VuYWJsZSgpO1xcbiB9XFxuIFxcbiB1MzIga3ZtX2dldF9wYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmNcXG5pbmRleCA0NGFhZTUyYzQ3M2Q3Li5hNWMxMjE0ODJjNzEzIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jXFxuQEAgLTEzMjYsNyArMTMyNiw3IEBAIHN0YXRpYyBib29sIGFjY2Vzc19wbXVfZXZ0eXBlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCxcXG4gXFxuIHN0YXRpYyBpbnQgc2V0X3BtcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqciwgdTY0IHZhbClcXG4ge1xcbi1cXHR1NjQgbWFzayA9IGt2bV9wbXVfYWNjZXNzaWJsZV9jb3VudGVyX21hc2sodmNwdSk7XFxuK1xcdHU2NCBtYXNrID0ga3ZtX3BtdV9pbXBsZW1lbnRlZF9jb3VudGVyX21hc2sodmNwdSk7XFxuIFxcbiBcXHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgci1cXHUwMDNlcmVnLCB2YWwgXFx1MDAyNiBtYXNrKTtcXG4gXFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFTE9BRF9QTVUsIHZjcHUpO1xcbkBAIC0xMzM0LDkgKzEzMzQsMTggQEAgc3RhdGljIGludCBzZXRfcG1yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyLCB1NjQgdmFcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgc2V0X3BtdV9ldnR5cGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4rXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqciwgdTY0IHZhbClcXG4re1xcbitcXHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgci1cXHUwMDNlcmVnLCB2YWwpO1xcbitcXHRrdm1fcG11X3JlcXVlc3RfcmVjcmVhdGUodmNwdSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBnZXRfcG1yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyLCB1NjQgKnZhbClcXG4ge1xcbi1cXHR1NjQgbWFzayA9IGt2bV9wbXVfYWNjZXNzaWJsZV9jb3VudGVyX21hc2sodmNwdSk7XFxuK1xcdHU2NCBtYXNrID0ga3ZtX3BtdV9pbXBsZW1lbnRlZF9jb3VudGVyX21hc2sodmNwdSk7XFxuIFxcbiBcXHQqdmFsID0gX192Y3B1X3N5c19yZWcodmNwdSwgci1cXHUwMDNlcmVnKSBcXHUwMDI2IG1hc2s7XFxuIFxcdHJldHVybiAwO1xcbkBAIC0xNTE3LDYgKzE1MjYsNyBAQCBzdGF0aWMgaW50IHNldF9wbWNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcixcXG4ge1xcbiBcXHR1OCBuZXdfbiA9IEZJRUxEX0dFVChBUk1WOF9QTVVfUE1DUl9OLCB2YWwpO1xcbiBcXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVxcdTAwM2Vrdm07XFxuK1xcdHU2NCBvbGQgPSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCByLVxcdTAwM2VyZWcpO1xcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcXG4gXFxuQEAgLTE1NDksNyArMTU1OSw3IEBAIHN0YXRpYyBpbnQgc2V0X3BtY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyLFxcbiBcXHRcXHR2YWwgfD0gQVJNVjhfUE1VX1BNQ1JfTEM7XFxuIFxcbiBcXHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgci1cXHUwMDNlcmVnLCB2YWwpO1xcbi1cXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XFxuK1xcdGt2bV9wbXVfYXBwbHlfcG1jcih2Y3B1LCBvbGQsIHZhbCwgdHJ1ZSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC0xNTgzLDcgKzE1OTMsNyBAQCBzdGF0aWMgaW50IHNldF9wbWNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcixcXG4gLyogTWFjcm8gdG8gZXhwYW5kIHRoZSBQTUVWVFlQRVJuX0VMMCByZWdpc3RlciAqL1xcbiAjZGVmaW5lIFBNVV9QTUVWVFlQRVJfRUwwKG4pXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHR7IFBNVV9TWVNfUkVHKFBNRVZUWVBFUm5fRUwwKG4pKSxcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdCAgLnJlc2V0ID0gcmVzZXRfcG1ldnR5cGVyLFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ICAucmVzZXQgPSByZXNldF9wbWV2dHlwZXIsIC5zZXRfdXNlciA9IHNldF9wbXVfZXZ0eXBlcixcXHRcXFxcXFxuIFxcdCAgLmFjY2VzcyA9IGFjY2Vzc19wbXVfZXZ0eXBlciwgLnJlZyA9IChQTUVWVFlQRVIwX0VMMCArIG4pLCB9XFxuIFxcbiAvKiBNYWNybyB0byBleHBhbmQgdGhlIEFNVSBjb3VudGVyIGFuZCB0eXBlIHJlZ2lzdGVycyovXFxuQEAgLTMxMTQsMTcgKzMxMjQsMjIgQEAgc3RhdGljIGJvb2wgYWNjZXNzX21kY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHR9XFxuIFxcbiBcXHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgTURDUl9FTDIsIHZhbCk7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBSZXF1ZXN0IGEgcmVsb2FkIG9mIHRoZSBQTVUgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIGNvdW50ZXJzXFxuLVxcdCAqIGFmZmVjdGVkIGJ5IEhQTUUuXFxuLVxcdCAqL1xcbi1cXHRpZiAoKG9sZCBeIHZhbCkgXFx1MDAyNiBNRENSX0VMMl9IUE1FKVxcbi1cXHRcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XFxuK1xcdGt2bV9wbXVfYXBwbHlfbWRjcih2Y3B1LCBvbGQsIHZhbCk7XFxuIFxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBzZXRfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkLFxcbitcXHRcXHQgICAgdTY0IHZhbClcXG4re1xcbitcXHR1NjQgb2xkID0gX192Y3B1X3N5c19yZWcodmNwdSwgTURDUl9FTDIpO1xcbitcXG4rXFx0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIE1EQ1JfRUwyLCB2YWwpO1xcbitcXHRrdm1fcG11X2FwcGx5X21kY3IodmNwdSwgb2xkLCB2YWwpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBib29sIGFjY2Vzc19yYXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRcXHQgICAgICAgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLFxcbiBcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcilcXG5AQCAtMzgyNyw3ICszODQyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2Mgc3lzX3JlZ19kZXNjc1tdID0ge1xcbiBcXHQgKiBpbiAzMmJpdCBtb2RlLiBIZXJlIHdlIGNob29zZSB0byByZXNldCBpdCBhcyB6ZXJvIGZvciBjb25zaXN0ZW5jeS5cXG4gXFx0ICovXFxuIFxcdHsgUE1VX1NZU19SRUcoUE1DQ0ZJTFRSX0VMMCksIC5hY2Nlc3MgPSBhY2Nlc3NfcG11X2V2dHlwZXIsXFxuLVxcdCAgLnJlc2V0ID0gcmVzZXRfdmFsLCAucmVnID0gUE1DQ0ZJTFRSX0VMMCwgLnZhbCA9IDAgfSxcXG4rXFx0ICAucmVzZXQgPSByZXNldF92YWwsIC5yZWcgPSBQTUNDRklMVFJfRUwwLCAudmFsID0gMCxcXG4rXFx0ICAuc2V0X3VzZXIgPSBzZXRfcG11X2V2dHlwZXIgfSxcXG4gXFxuIFxcdEVMMl9SRUdfVk5DUihWUElEUl9FTDIsIHJlc2V0X3Vua25vd24sIDApLFxcbiBcXHRFTDJfUkVHX1ZOQ1IoVk1QSURSX0VMMiwgcmVzZXRfdW5rbm93biwgMCksXFxuQEAgLTM4MzYsNyArMzg1Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjIHN5c19yZWdfZGVzY3NbXSA9IHtcXG4gXFx0RUwyX1JFR19GSUxURVJFRChTQ1RMUjJfRUwyLCBhY2Nlc3Nfdm1fcmVnLCByZXNldF92YWwsIDAsXFxuIFxcdFxcdFxcdCBzY3RscjJfZWwyX3Zpc2liaWxpdHkpLFxcbiBcXHRFTDJfUkVHX1ZOQ1IoSENSX0VMMiwgcmVzZXRfaGNyLCAwKSxcXG4tXFx0RUwyX1JFRyhNRENSX0VMMiwgYWNjZXNzX21kY3IsIHJlc2V0X21kY3IsIDApLFxcbitcXHRTWVNfUkVHX1VTRVJfRklMVEVSKE1EQ1JfRUwyLCBhY2Nlc3NfbWRjciwgcmVzZXRfbWRjciwgMCxcXG4rXFx0XFx0XFx0ICAgIE5VTEwsIHNldF9tZGNyLCBlbDJfdmlzaWJpbGl0eSksXFxuIFxcdEVMMl9SRUcoQ1BUUl9FTDIsIGFjY2Vzc19ydywgcmVzZXRfdmFsLCBDUFRSX05WSEVfRUwyX1JFUzEpLFxcbiBcXHRFTDJfUkVHX1ZOQ1IoSFNUUl9FTDIsIHJlc2V0X3ZhbCwgMCksXFxuIFxcdEVMMl9SRUdfVk5DUl9GSUxUKEhGR1JUUl9FTDIsIGZndF92aXNpYmlsaXR5KSxcXG5AQCAtNTM5MCw3ICs1NDA3LDcgQEAgdm9pZCBrdm1fcmVzZXRfc3lzX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRzZXRfYml0KEtWTV9BUkNIX0ZMQUdfSURfUkVHU19JTklUSUFMSVpFRCwgXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5mbGFncyk7XFxuIFxcbiBcXHRpZiAoa3ZtX3ZjcHVfaGFzX3BtdSh2Y3B1KSlcXG4tXFx0XFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFTE9BRF9QTVUsIHZjcHUpO1xcbitcXHRcXHRrdm1fcG11X3JlcXVlc3RfcmVjcmVhdGUodmNwdSk7XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2t2bS9hcm1fcG11LmggYi9pbmNsdWRlL2t2bS9hcm1fcG11LmhcXG5pbmRleCA2YjRhMTE4ZDE3Y2E5Li4xN2I4NjFlZDE3MWQ2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUva3ZtL2FybV9wbXUuaFxcbisrKyBiL2luY2x1ZGUva3ZtL2FybV9wbXUuaFxcbkBAIC0zMiw2ICszMiw3IEBAIHN0cnVjdCBrdm1fcG11IHtcXG4gXFx0c3RydWN0IGt2bV9wbWMgcG1jW0tWTV9BUk1WOF9QTVVfTUFYX0NPVU5URVJTXTtcXG4gXFx0aW50IGlycV9udW07XFxuIFxcdGJvb2wgY3JlYXRlZDtcXG4rXFx0Ym9vbCBldmVudHNfbmVlZF9yZWNyZWF0ZTtcXG4gfTtcXG4gXFxuIHN0cnVjdCBhcm1fcG11X2VudHJ5IHtcXG5AQCAtNTUsOSArNTYsMTMgQEAgdm9pZCBrdm1fcG11X3N5bmNfaHdzdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBib29sIGt2bV9wbXVfc2hvdWxkX25vdGlmeV91c2VyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIGJvb2wga3ZtX3BtdV91cGRhdGVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHZvaWQga3ZtX3BtdV9zb2Z0d2FyZV9pbmNyZW1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKTtcXG4rdm9pZCBrdm1fcG11X3JlcXVlc3RfcmVjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4rdm9pZCBrdm1fcG11X2FwcGx5X3BtY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgb2xkLCB1NjQgdmFsLCBib29sIGZvcmNlX3JlbG9hZCk7XFxuIHZvaWQga3ZtX3BtdV9oYW5kbGVfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpO1xcbit2b2lkIGt2bV9wbXVfYXBwbHlfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBvbGQsIHU2NCB2YWwpO1xcbiB2b2lkIGt2bV9wbXVfc2V0X2NvdW50ZXJfZXZlbnRfdHlwZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhLFxcbiBcXHRcXHRcXHRcXHQgICAgdTY0IHNlbGVjdF9pZHgpO1xcbit2b2lkIGt2bV92Y3B1X2xvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGxhc3RfY3B1KTtcXG4gdm9pZCBrdm1fdmNwdV9yZWxvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIGludCBrdm1fYXJtX3BtdV92M19zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKTtcXG5AQCAtMTM1LDcgKzE0MCwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3BtdV9zaG91bGRfbm90aWZ5X3VzZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB9XFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fcG11X3VwZGF0ZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7IHJldHVybiBmYWxzZTsgfVxcbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3BtdV9zb2Z0d2FyZV9pbmNyZW1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKSB7fVxcbitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3BtdV9yZXF1ZXN0X3JlY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge31cXG4rc3RhdGljIGlubGluZSB2b2lkIGt2bV9wbXVfYXBwbHlfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBvbGQsIHU2NCB2YWwsIGJvb2wgZm9yY2VfcmVsb2FkKSB7fVxcbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3BtdV9oYW5kbGVfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpIHt9XFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X2FwcGx5X21kY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgb2xkLCB1NjQgdmFsKSB7fVxcbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3BtdV9zZXRfY291bnRlcl9ldmVudF90eXBlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICB1NjQgZGF0YSwgdTY0IHNlbGVjdF9pZHgpIHt9XFxuIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9hcm1fcG11X3YzX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5AQCAtMTY3LDYgKzE3NSw3IEBAIHN0YXRpYyBpbmxpbmUgdTY0IGt2bV9wbXVfZ2V0X3BtY2VpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgcG1jZWlkMSlcXG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV9wbXVfdXBkYXRlX3ZjcHVfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge31cXG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X3BtdV9yZXN0b3JlX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge31cXG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X3BtdV9yZXN0b3JlX2hvc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fVxcbitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbGFzdF9jcHUpIHt9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdmNwdV9yZWxvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge31cXG4gc3RhdGljIGlubGluZSB1OCBrdm1fYXJtX3BtdV9nZXRfcG11dmVyX2xpbWl0KHZvaWQpXFxuIHtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oIGIvdG9vbHMvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXFxuaW5kZXggMWMxM2JmYTJkMzhhYS4uMzlhMWExZTQxMmU2NiAxMDA2NDRcXG4tLS0gYS90b29scy9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcXG4rKysgYi90b29scy9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcXG5AQCAtNDM3LDYgKzQzNyw3IEBAIGVudW0ge1xcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVJcXHRcXHQyXFxuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9QTVVcXHRcXHQzXFxuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9OUl9DT1VOVEVSU1xcdDRcXG4rI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWVxcdDVcXG4gI2RlZmluZSBLVk1fQVJNX1ZDUFVfVElNRVJfQ1RSTFxcdFxcdDFcXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9USU1FUl9JUlFfVlRJTUVSXFx0XFx0MFxcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1RJTUVSX0lSUV9QVElNRVJcXHRcXHQxXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvbGludXgvYml0ZmllbGQuaCBiL3Rvb2xzL2luY2x1ZGUvbGludXgvYml0ZmllbGQuaFxcbmluZGV4IGRkZjgxZjI0OTU2YmEuLjFjNjMzMzQzZDU3NjYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvaW5jbHVkZS9saW51eC9iaXRmaWVsZC5oXFxuKysrIGIvdG9vbHMvaW5jbHVkZS9saW51eC9iaXRmaWVsZC5oXFxuQEAgLTE0MiwzMiArMTQyLDMyIEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTY0IGZpZWxkX21hc2sodTY0IGZpZWxkKVxcbiBcXHRyZXR1cm4gZmllbGQgLyBmaWVsZF9tdWx0aXBsaWVyKGZpZWxkKTtcXG4gfVxcbiAjZGVmaW5lIGZpZWxkX21heChmaWVsZClcXHQoKHR5cGVvZihmaWVsZCkpZmllbGRfbWFzayhmaWVsZCkpXFxuLSNkZWZpbmUgX19fX01BS0VfT1AodHlwZSxiYXNlLHRvLGZyb20pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIF9fIyN0eXBlIHR5cGUjI19lbmNvZGVfYml0cyhiYXNlIHYsIGJhc2UgZmllbGQpXFx0XFxcXFxcbisjZGVmaW5lIF9fX19NQUtFX09QKG5hbWUsdHlwZSxiYXNlLHRvLGZyb20pXFx0XFx0XFx0XFx0XFxcXFxcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHR5cGUgbmFtZSMjX2VuY29kZV9iaXRzKGJhc2UgdiwgYmFzZSBmaWVsZClcXHRcXFxcXFxuIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCh2KSBcXHUwMDI2XFx1MDAyNiAodiBcXHUwMDI2IH5maWVsZF9tYXNrKGZpZWxkKSkpXFx0XFxcXFxcbiBcXHRcXHRfX2ZpZWxkX292ZXJmbG93KCk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRyZXR1cm4gdG8oKHYgXFx1MDAyNiBmaWVsZF9tYXNrKGZpZWxkKSkgKiBmaWVsZF9tdWx0aXBsaWVyKGZpZWxkKSk7XFx0XFxcXFxcbiB9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIF9fIyN0eXBlIHR5cGUjI19yZXBsYWNlX2JpdHMoX18jI3R5cGUgb2xkLFxcdFxcXFxcXG4tXFx0XFx0XFx0XFx0XFx0YmFzZSB2YWwsIGJhc2UgZmllbGQpXFx0XFx0XFxcXFxcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHR5cGUgbmFtZSMjX3JlcGxhY2VfYml0cyh0eXBlIG9sZCxcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdFxcdGJhc2UgdmFsLCBiYXNlIGZpZWxkKVxcdFxcXFxcXG4ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0cmV0dXJuIChvbGQgXFx1MDAyNiB+dG8oZmllbGQpKSB8IHR5cGUjI19lbmNvZGVfYml0cyh2YWwsIGZpZWxkKTtcXHRcXFxcXFxuK1xcdHJldHVybiAob2xkIFxcdTAwMjYgfnRvKGZpZWxkKSkgfCBuYW1lIyNfZW5jb2RlX2JpdHModmFsLCBmaWVsZCk7XFx0XFxcXFxcbiB9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdHlwZSMjcF9yZXBsYWNlX2JpdHMoX18jI3R5cGUgKnAsXFx0XFx0XFxcXFxcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbmFtZSMjcF9yZXBsYWNlX2JpdHModHlwZSAqcCxcXHRcXHRcXFxcXFxuIFxcdFxcdFxcdFxcdFxcdGJhc2UgdmFsLCBiYXNlIGZpZWxkKVxcdFxcdFxcXFxcXG4ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0KnAgPSAoKnAgXFx1MDAyNiB+dG8oZmllbGQpKSB8IHR5cGUjI19lbmNvZGVfYml0cyh2YWwsIGZpZWxkKTtcXHRcXFxcXFxuK1xcdCpwID0gKCpwIFxcdTAwMjYgfnRvKGZpZWxkKSkgfCBuYW1lIyNfZW5jb2RlX2JpdHModmFsLCBmaWVsZCk7XFx0XFxcXFxcbiB9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJhc2UgdHlwZSMjX2dldF9iaXRzKF9fIyN0eXBlIHYsIGJhc2UgZmllbGQpXFx0XFxcXFxcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJhc2UgbmFtZSMjX2dldF9iaXRzKHR5cGUgdiwgYmFzZSBmaWVsZClcXHRcXFxcXFxuIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdHJldHVybiAoZnJvbSh2KSBcXHUwMDI2IGZpZWxkKS9maWVsZF9tdWx0aXBsaWVyKGZpZWxkKTtcXHRcXHRcXFxcXFxuIH1cXG4tI2RlZmluZSBfX01BS0VfT1Aoc2l6ZSlcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdF9fX19NQUtFX09QKGxlIyNzaXplLHUjI3NpemUsY3B1X3RvX2xlIyNzaXplLGxlIyNzaXplIyNfdG9fY3B1KVxcdFxcXFxcXG4tXFx0X19fX01BS0VfT1AoYmUjI3NpemUsdSMjc2l6ZSxjcHVfdG9fYmUjI3NpemUsYmUjI3NpemUjI190b19jcHUpXFx0XFxcXFxcbi1cXHRfX19fTUFLRV9PUCh1IyNzaXplLHUjI3NpemUsLClcXG4tX19fX01BS0VfT1AodTgsdTgsLClcXG4rI2RlZmluZSBfX01BS0VfT1Aoc2l6ZSlcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdF9fX19NQUtFX09QKGxlIyNzaXplLF9fbGUjI3NpemUsdSMjc2l6ZSxjcHVfdG9fbGUjI3NpemUsbGUjI3NpemUjI190b19jcHUpXFx0XFxcXFxcbitcXHRfX19fTUFLRV9PUChiZSMjc2l6ZSxfX2JlIyNzaXplLHUjI3NpemUsY3B1X3RvX2JlIyNzaXplLGJlIyNzaXplIyNfdG9fY3B1KVxcdFxcXFxcXG4rXFx0X19fX01BS0VfT1AodSMjc2l6ZSx1IyNzaXplLHUjI3NpemUsLClcXG4rX19fX01BS0VfT1AodTgsdTgsdTgsLClcXG4gX19NQUtFX09QKDE2KVxcbiBfX01BS0VfT1AoMzIpXFxuIF9fTUFLRV9PUCg2NClcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmNcXG5pbmRleCAyMjIyMzM5NTk2OWUwLi42Mzc2NTNmN2EyNWI5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jXFxuQEAgLTI1LDYgKzI1LDE0IEBAXFxuIC8qIFRoZSBjeWNsZSBjb3VudGVyIGJpdCBwb3NpdGlvbiB0aGF0J3MgY29tbW9uIGFtb25nIHRoZSBQTVUgcmVnaXN0ZXJzICovXFxuICNkZWZpbmUgQVJNVjhfUE1VX0NZQ0xFX0lEWFxcdFxcdDMxXFxuIFxcbisjaWZuZGVmIE1EQ1JfRUwyX0hQTU5cXG4rI2RlZmluZSBNRENSX0VMMl9IUE1OXFx0XFx0XFx0R0VOTUFTS19VTEwoNCwgMClcXG4rI2VuZGlmXFxuK1xcbisjaWZuZGVmIE1EQ1JfRUwyX0hQTUVcXG4rI2RlZmluZSBNRENSX0VMMl9IUE1FXFx0XFx0XFx0QklUX1VMTCg3KVxcbisjZW5kaWZcXG4rXFxuIHN0cnVjdCB2cG11X3ZtIHtcXG4gXFx0c3RydWN0IGt2bV92bSAqdm07XFxuIFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG5AQCAtNDAzLDEyICs0MTEsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfdnBtdV92bSh2b2lkICpndWVzdF9jb2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBrdm1fdmNwdV9pbml0IGluaXQ7XFxuIFxcdHU4IHBtdXZlciwgZWM7XFxuLVxcdHU2NCBkZnIwLCBpcnEgPSAyMztcXG4tXFx0c3RydWN0IGt2bV9kZXZpY2VfYXR0ciBpcnFfYXR0ciA9IHtcXG4tXFx0XFx0Lmdyb3VwID0gS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxcbi1cXHRcXHQuYXR0ciA9IEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLFxcbi1cXHRcXHQuYWRkciA9ICh1NjQpXFx1MDAyNmlycSxcXG4tXFx0fTtcXG4rXFx0dTY0IGRmcjA7XFxuIFxcbiBcXHQvKiBUaGUgdGVzdCBjcmVhdGVzIHRoZSB2cG11X3ZtIG11bHRpcGxlIHRpbWVzLiBFbnN1cmUgYSBjbGVhbiBzdGF0ZSAqL1xcbiBcXHRtZW1zZXQoXFx1MDAyNnZwbXVfdm0sIDAsIHNpemVvZih2cG11X3ZtKSk7XFxuQEAgLTQzNCw4ICs0MzcsNiBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfdnBtdV92bSh2b2lkICpndWVzdF9jb2RlKVxcbiBcXHRURVNUX0FTU0VSVChwbXV2ZXIgIT0gSURfQUE2NERGUjBfRUwxX1BNVVZlcl9JTVBfREVGIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBwbXV2ZXIgXFx1MDAzZT0gSURfQUE2NERGUjBfRUwxX1BNVVZlcl9JTVAsXFxuIFxcdFxcdCAgICBcXFwiVW5leHBlY3RlZCBQTVVWRVIgKDB4JXgpIG9uIHRoZSB2Q1BVIHdpdGggUE1VdjNcXFwiLCBwbXV2ZXIpO1xcbi1cXG4tXFx0dmNwdV9pb2N0bCh2cG11X3ZtLnZjcHUsIEtWTV9TRVRfREVWSUNFX0FUVFIsIFxcdTAwMjZpcnFfYXR0cik7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGRlc3Ryb3lfdnBtdV92bSh2b2lkKVxcbkBAIC00NDMsMTEgKzQ0NCwxMCBAQCBzdGF0aWMgdm9pZCBkZXN0cm95X3ZwbXVfdm0odm9pZClcXG4gXFx0a3ZtX3ZtX2ZyZWUodnBtdV92bS52bSk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHJ1bl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBtY3JfbilcXG4rc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHN0cnVjdCB1Y2FsbCB1YztcXG4gXFxuLVxcdHZjcHVfYXJnc19zZXQodmNwdSwgMSwgcG1jcl9uKTtcXG4gXFx0dmNwdV9ydW4odmNwdSk7XFxuIFxcdHN3aXRjaCAoZ2V0X3VjYWxsKHZjcHUsIFxcdTAwMjZ1YykpIHtcXG4gXFx0Y2FzZSBVQ0FMTF9BQk9SVDpcXG5AQCAtNDYxLDE1ICs0NjEsMTcgQEAgc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcG1jcl9uKVxcbiBcXHR9XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyh1bnNpZ25lZCBpbnQgbnJfY291bnRlcnMsIGJvb2wgZXhwZWN0X2ZhaWwpXFxuK3N0YXRpYyB2b2lkIGd1ZXN0X2NvZGVfZG9uZSh2b2lkKVxcbit7XFxuK1xcdEdVRVNUX0RPTkUoKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgc2V0X25yX2NvdW50ZXJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4rXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBucl9jb3VudGVycywgYm9vbCBleHBlY3RfZmFpbClcXG4ge1xcbi1cXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuIFxcdHVuc2lnbmVkIGludCBwcmV2O1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0Y3JlYXRlX3ZwbXVfdm0oZ3Vlc3RfY29kZSk7XFxuLVxcdHZjcHUgPSB2cG11X3ZtLnZjcHU7XFxuLVxcbiBcXHRwcmV2ID0gZ2V0X3BtY3Jfbih2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX1BNQ1JfRUwwKSkpO1xcbiBcXG4gXFx0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuQEAgLTQ4MSw2ICs0ODMsMjYgQEAgc3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycywgYm9vbFxcbiBcXHRcXHRcXHQgICAgbnJfY291bnRlcnMsIHByZXYpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdFRFU1RfQVNTRVJUKCFyZXQsIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IGJvb2wgZml4ZWRfY291bnRlcnNfb25seSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IGJvb2wgZXhwZWN0X2ZhaWwpXFxuK3tcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbitcXHR1NjQgaXJxID0gMjM7XFxuK1xcbitcXHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcXG4rXFx0dmNwdSA9IHZwbXVfdm0udmNwdTtcXG4rXFxuK1xcdGlmIChmaXhlZF9jb3VudGVyc19vbmx5KVxcbitcXHRcXHR2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcXG4rXFxuK1xcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgXFx1MDAyNmlycSk7XFxuK1xcbitcXHRzZXRfbnJfY291bnRlcnModmNwdSwgbnJfY291bnRlcnMsIGV4cGVjdF9mYWlsKTtcXG4gXFxuIFxcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTtcXG4gfVxcbkBAIC00ODksMjEgKzUxMSwyMiBAQCBzdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnModW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sXFxuICAqIENyZWF0ZSBhIGd1ZXN0IHdpdGggb25lIHZDUFUsIHNldCB0aGUgUE1DUl9FTDAuTiBmb3IgdGhlIHZDUFUgdG8gQHBtY3JfbixcXG4gICogYW5kIHJ1biB0aGUgdGVzdC5cXG4gICovXFxuLXN0YXRpYyB2b2lkIHJ1bl9hY2Nlc3NfdGVzdCh1NjQgcG1jcl9uKVxcbitzdGF0aWMgdm9pZCBydW5fYWNjZXNzX3Rlc3QodTY0IHBtY3JfbiwgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5KVxcbiB7XFxuIFxcdHU2NCBzcDtcXG4gXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCBpbml0O1xcbiBcXG4tXFx0cHJfZGVidWcoXFxcIlRlc3Qgd2l0aCBwbWNyX24gJWx1XFxcXG5cXFwiLCBwbWNyX24pO1xcbitcXHRwcl9kZWJ1ZyhcXFwiVGVzdCB3aXRoIHBtY3JfbiAlbHUsIGZpeGVkX2NvdW50ZXJzX29ubHkgJWRcXFxcblxcXCIsIHBtY3JfbiwgZml4ZWRfY291bnRlcnNfb25seSk7XFxuIFxcbi1cXHR0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCBmYWxzZSk7XFxuK1xcdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHksIGZhbHNlKTtcXG4gXFx0dmNwdSA9IHZwbXVfdm0udmNwdTtcXG4gXFxuIFxcdC8qIFNhdmUgdGhlIGluaXRpYWwgc3AgdG8gcmVzdG9yZSB0aGVtIGxhdGVyIHRvIHJ1biB0aGUgZ3Vlc3QgYWdhaW4gKi9cXG4gXFx0c3AgPSB2Y3B1X2dldF9yZWcodmNwdSwgY3R4dF9yZWdfYWxpYXModmNwdSwgU1lTX1NQX0VMMSkpO1xcbiBcXG4tXFx0cnVuX3ZjcHUodmNwdSwgcG1jcl9uKTtcXG4rXFx0dmNwdV9hcmdzX3NldCh2Y3B1LCAxLCBwbWNyX24pO1xcbitcXHRydW5fdmNwdSh2Y3B1KTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFJlc2V0IGFuZCByZS1pbml0aWFsaXplIHRoZSB2Q1BVLCBhbmQgcnVuIHRoZSBndWVzdCBjb2RlIGFnYWluIHRvXFxuQEAgLTUxNiw3ICs1MzksOCBAQCBzdGF0aWMgdm9pZCBydW5fYWNjZXNzX3Rlc3QodTY0IHBtY3JfbilcXG4gXFx0dmNwdV9zZXRfcmVnKHZjcHUsIGN0eHRfcmVnX2FsaWFzKHZjcHUsIFNZU19TUF9FTDEpLCBzcCk7XFxuIFxcdHZjcHVfc2V0X3JlZyh2Y3B1LCBBUk02NF9DT1JFX1JFRyhyZWdzLnBjKSwgKHU2NClndWVzdF9jb2RlKTtcXG4gXFxuLVxcdHJ1bl92Y3B1KHZjcHUsIHBtY3Jfbik7XFxuK1xcdHZjcHVfYXJnc19zZXQodmNwdSwgMSwgcG1jcl9uKTtcXG4rXFx0cnVuX3ZjcHUodmNwdSk7XFxuIFxcbiBcXHRkZXN0cm95X3ZwbXVfdm0oKTtcXG4gfVxcbkBAIC01MzEsMTQgKzU1NSwxNCBAQCBzdGF0aWMgc3RydWN0IHBtcmVnX3NldHMgdmFsaWRpdHlfY2hlY2tfcmVnX3NldHNbXSA9IHtcXG4gICogQ3JlYXRlIGEgVk0sIGFuZCBjaGVjayBpZiBLVk0gaGFuZGxlcyB0aGUgdXNlcnNwYWNlIGFjY2Vzc2VzIG9mXFxuICAqIHRoZSBQTVUgcmVnaXN0ZXIgc2V0cyBpbiBAdmFsaWRpdHlfY2hlY2tfcmVnX3NldHNbXSBjb3JyZWN0bHkuXFxuICAqL1xcbi1zdGF0aWMgdm9pZCBydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QodTY0IHBtY3JfbilcXG4rc3RhdGljIHZvaWQgcnVuX3BtcmVnc192YWxpZGl0eV90ZXN0KHU2NCBwbWNyX24sIGJvb2wgZml4ZWRfY291bnRlcnNfb25seSlcXG4ge1xcbiBcXHRpbnQgaTtcXG4gXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbiBcXHR1NjQgc2V0X3JlZ19pZCwgY2xyX3JlZ19pZCwgcmVnX3ZhbDtcXG4gXFx0dTY0IHZhbGlkX2NvdW50ZXJzX21hc2ssIG1heF9jb3VudGVyc19tYXNrO1xcbiBcXG4tXFx0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZmFsc2UpO1xcbitcXHR0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5LCBmYWxzZSk7XFxuIFxcdHZjcHUgPSB2cG11X3ZtLnZjcHU7XFxuIFxcbiBcXHR2YWxpZF9jb3VudGVyc19tYXNrID0gZ2V0X2NvdW50ZXJzX21hc2socG1jcl9uKTtcXG5AQCAtNTgzLDE2ICs2MDcsOTQgQEAgc3RhdGljIHZvaWQgcnVuX3BtcmVnc192YWxpZGl0eV90ZXN0KHU2NCBwbWNyX24pXFxuIFxcdGRlc3Ryb3lfdnBtdV92bSgpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBydW5fbWRjcl9lbDJfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXFxuK3tcXG4rXFx0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbitcXHR1NjQgZXhwZWN0ZWRfbWRjciwgbWRjcjtcXG4rXFx0dTY0IGlycSA9IDIzO1xcbitcXG4rXFx0cHJfZGVidWcoXFxcIk1EQ1JfRUwyIHRlc3Qgd2l0aCBwbWNyX24gJWx1LCBmaXhlZF9jb3VudGVyc19vbmx5ICVkXFxcXG5cXFwiLFxcbitcXHRcXHQgcG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcXG4rXFxuK1xcdGNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpO1xcbitcXHRpZiAoIXZtX3N1cHBvcnRzX2VsMih2cG11X3ZtLnZtKSkge1xcbitcXHRcXHRkZXN0cm95X3ZwbXVfdm0oKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHR2Y3B1ID0gdnBtdV92bS52Y3B1O1xcbitcXG4rXFx0bWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTtcXG4rXFx0ZXhwZWN0ZWRfbWRjciA9IHU2NF9yZXBsYWNlX2JpdHMobWRjciwgRklFTERfTUFYKE1EQ1JfRUwyX0hQTU4pLFxcbitcXHRcXHRcXHRcXHRcXHQgTURDUl9FTDJfSFBNTik7XFxuK1xcdHZjcHVfc2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpLFxcbitcXHRcXHQgICAgIGV4cGVjdGVkX21kY3IpO1xcbitcXG4rXFx0bWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTtcXG4rXFx0VEVTVF9BU1NFUlQobWRjciA9PSBleHBlY3RlZF9tZGNyLFxcbitcXHRcXHQgICAgXFxcIk1EQ1JfRUwyIHdhcyBub3QgcHJvcGVybHkgdXBkYXRlZCBhZnRlciBIUE1OIHdyaXRlIChleHBlY3RlZCAweCVseCwgZ290IDB4JWx4KVxcXCIsXFxuK1xcdFxcdCAgICBleHBlY3RlZF9tZGNyLCBtZGNyKTtcXG4rXFxuK1xcdGlmIChmaXhlZF9jb3VudGVyc19vbmx5KSB7XFxuK1xcdFxcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xcbitcXG4rXFx0XFx0bWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTtcXG4rXFx0XFx0VEVTVF9BU1NFUlQobWRjciA9PSBleHBlY3RlZF9tZGNyLFxcbitcXHRcXHRcXHQgICAgXFxcIk1EQ1JfRUwyIGNoYW5nZWQgYWZ0ZXIgUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkgKGV4cGVjdGVkIDB4JWx4LCBnb3QgMHglbHgpXFxcIixcXG4rXFx0XFx0XFx0ICAgIGV4cGVjdGVkX21kY3IsIG1kY3IpO1xcbitcXHR9XFxuK1xcbitcXHRzZXRfbnJfY291bnRlcnModmNwdSwgcG1jcl9uLCBmYWxzZSk7XFxuK1xcbitcXHRtZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpO1xcbitcXHRURVNUX0FTU0VSVChtZGNyID09IGV4cGVjdGVkX21kY3IsXFxuK1xcdFxcdCAgICBcXFwiTURDUl9FTDIgY2hhbmdlZCBhZnRlciBQTVVfVjNfU0VUX05SX0NPVU5URVJTIChleHBlY3RlZCAweCVseCwgZ290IDB4JWx4KVxcXCIsXFxuK1xcdFxcdCAgICBleHBlY3RlZF9tZGNyLCBtZGNyKTtcXG4rXFxuK1xcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgXFx1MDAyNmlycSk7XFxuK1xcbitcXHR2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTtcXG4rXFxuK1xcdG1kY3IgPSB2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSk7XFxuK1xcdFRFU1RfQVNTRVJUKG1kY3IgPT0gZXhwZWN0ZWRfbWRjcixcXG4rXFx0XFx0ICAgIFxcXCJNRENSX0VMMiBjaGFuZ2VkIGFmdGVyIFBNVV9WM19JTklUIChleHBlY3RlZCAweCVseCwgZ290IDB4JWx4KVxcXCIsXFxuK1xcdFxcdCAgICBleHBlY3RlZF9tZGNyLCBtZGNyKTtcXG4rXFxuK1xcdGV4cGVjdGVkX21kY3IgPSBtZGNyIF4gTURDUl9FTDJfSFBNRTtcXG4rXFx0dmNwdV9zZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMiksXFxuK1xcdFxcdCAgICAgZXhwZWN0ZWRfbWRjcik7XFxuK1xcbitcXHRtZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpO1xcbitcXHRURVNUX0FTU0VSVChtZGNyID09IGV4cGVjdGVkX21kY3IsXFxuK1xcdFxcdCAgICBcXFwiTURDUl9FTDIgd2FzIG5vdCBwcm9wZXJseSB1cGRhdGVkIGFmdGVyIEhQTUUgd3JpdGUgKGV4cGVjdGVkIDB4JWx4LCBnb3QgMHglbHgpXFxcIixcXG4rXFx0XFx0ICAgIGV4cGVjdGVkX21kY3IsIG1kY3IpO1xcbitcXG4rXFx0a3ZtX2dldF9kZWZhdWx0X3ZjcHVfdGFyZ2V0KHZwbXVfdm0udm0sIFxcdTAwMjZpbml0KTtcXG4rXFx0aW5pdC5mZWF0dXJlc1swXSB8PSAoMSBcXHUwMDNjXFx1MDAzYyBLVk1fQVJNX1ZDUFVfUE1VX1YzKTtcXG4rXFx0YWFyY2g2NF92Y3B1X3NldHVwKHZjcHUsIFxcdTAwMjZpbml0KTtcXG4rXFxuK1xcdG1kY3IgPSB2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSk7XFxuK1xcdFRFU1RfQVNTRVJUKEZJRUxEX0dFVChNRENSX0VMMl9IUE1OLCBtZGNyKSA9PSBwbWNyX24sXFxuK1xcdFxcdCAgICBcXFwiTURDUl9FTDIuSFBNTiBpcyBub3QgcmVzZXQgYWZ0ZXIgSU5JVCAoZXhwZWN0ZWQgJWx1LCBnb3QgJWx1KVxcXCIsXFxuK1xcdFxcdCAgICBwbWNyX24sIEZJRUxEX0dFVChNRENSX0VMMl9IUE1OLCBtZGNyKSk7XFxuK1xcbitcXHRkZXN0cm95X3ZwbXVfdm0oKTtcXG4rfVxcbitcXG4gLypcXG4gICogQ3JlYXRlIGEgZ3Vlc3Qgd2l0aCBvbmUgdkNQVSwgYW5kIGF0dGVtcHQgdG8gc2V0IHRoZSBQTUNSX0VMMC5OIGZvclxcbiAgKiB0aGUgdkNQVSB0byBAcG1jcl9uLCB3aGljaCBpcyBsYXJnZXIgdGhhbiB0aGUgaG9zdCB2YWx1ZS5cXG4gICogVGhlIGF0dGVtcHQgc2hvdWxkIGZhaWwgYXMgQHBtY3JfbiBpcyB0b28gYmlnIHRvIHNldCBmb3IgdGhlIHZDUFUuXFxuICAqL1xcbi1zdGF0aWMgdm9pZCBydW5fZXJyb3JfdGVzdCh1NjQgcG1jcl9uKVxcbitzdGF0aWMgdm9pZCBydW5fZXJyb3JfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXFxuIHtcXG4gXFx0cHJfZGVidWcoXFxcIkVycm9yIHRlc3Qgd2l0aCBwbWNyX24gJWx1IChsYXJnZXIgdGhhbiB0aGUgaG9zdClcXFxcblxcXCIsIHBtY3Jfbik7XFxuIFxcbi1cXHR0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCB0cnVlKTtcXG4rXFx0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgZml4ZWRfY291bnRlcnNfb25seSwgdHJ1ZSk7XFxuIFxcdGRlc3Ryb3lfdnBtdV92bSgpO1xcbiB9XFxuIFxcbkBAIC02MjIsMjIgKzcyNCwxODMgQEAgc3RhdGljIGJvb2wga3ZtX3N1cHBvcnRzX25yX2NvdW50ZXJzX2F0dHIodm9pZClcXG4gXFx0cmV0dXJuIHN1cHBvcnRlZDtcXG4gfVxcbiBcXG4taW50IG1haW4odm9pZClcXG4rc3RhdGljIHZvaWQgdGVzdF9zZXRfbnJfY291bnRlcnNfYWZ0ZXJfdmNwdV9ydW4odm9pZClcXG4ge1xcbi1cXHR1NjQgaSwgcG1jcl9uO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnJ1bm5pbmdfdmNwdSwgKnN0b3BwZWRfdmNwdTtcXG4rXFx0dW5zaWduZWQgaW50IG5yX2NvdW50ZXJzID0gMDtcXG4rXFx0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcXG4rXFx0c3RydWN0IGt2bV92bSAqdm07XFxuK1xcdGludCByZXQ7XFxuK1xcdHU2NCBpcnEgPSAyMztcXG4rXFxuK1xcdHZtID0gdm1fY3JlYXRlKDIpO1xcbitcXHR2bV9pb2N0bCh2bSwgS1ZNX0FSTV9QUkVGRVJSRURfVEFSR0VULCBcXHUwMDI2aW5pdCk7XFxuK1xcdGluaXQuZmVhdHVyZXNbMF0gfD0gQklUKEtWTV9BUk1fVkNQVV9QTVVfVjMpO1xcbitcXHRydW5uaW5nX3ZjcHUgPSBhYXJjaDY0X3ZjcHVfYWRkKHZtLCAwLCBcXHUwMDI2aW5pdCwgZ3Vlc3RfY29kZV9kb25lKTtcXG4rXFx0c3RvcHBlZF92Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMSwgXFx1MDAyNmluaXQsIGd1ZXN0X2NvZGVfZG9uZSk7XFxuK1xcdGt2bV9hcmNoX3ZtX2ZpbmFsaXplX3ZjcHVzKHZtKTtcXG4rXFxuK1xcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHJ1bm5pbmdfdmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxcbitcXHRcXHRcXHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLCBcXHUwMDI2aXJxKTtcXG4rXFx0dmNwdV9kZXZpY2VfYXR0cl9zZXQocnVubmluZ192Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTtcXG4rXFx0cnVuX3ZjcHUocnVubmluZ192Y3B1KTtcXG4rXFxuK1xcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQoc3RvcHBlZF92Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlMsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFx1MDAyNm5yX2NvdW50ZXJzKTtcXG4rXFx0VEVTVF9BU1NFUlQocmV0ID09IC0xIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVCVVNZLFxcbitcXHRcXHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpO1xcbitcXG4rXFx0a3ZtX3ZtX2ZyZWUodm0pO1xcbit9XFxuIFxcbi1cXHRURVNUX1JFUVVJUkUoa3ZtX2hhc19jYXAoS1ZNX0NBUF9BUk1fUE1VX1YzKSk7XFxuLVxcdFRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfdmdpY192MygpKTtcXG4tXFx0VEVTVF9SRVFVSVJFKGt2bV9zdXBwb3J0c19ucl9jb3VudGVyc19hdHRyKCkpO1xcbitzdGF0aWMgdm9pZCB0ZXN0X2NvbmZpZyh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXFxuK3tcXG4rXFx0dTY0IGk7XFxuIFxcbi1cXHRwbWNyX24gPSBnZXRfcG1jcl9uX2xpbWl0KCk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYz0gcG1jcl9uOyBpKyspIHtcXG4tXFx0XFx0cnVuX2FjY2Vzc190ZXN0KGkpO1xcbi1cXHRcXHRydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QoaSk7XFxuK1xcdFxcdHJ1bl9hY2Nlc3NfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcXG4rXFx0XFx0cnVuX3BtcmVnc192YWxpZGl0eV90ZXN0KGksIGZpeGVkX2NvdW50ZXJzX29ubHkpO1xcbitcXHRcXHRydW5fbWRjcl9lbDJfdmFsaWRpdHlfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcXG4gXFx0fVxcbiBcXG4gXFx0Zm9yIChpID0gcG1jcl9uICsgMTsgaSBcXHUwMDNjIEFSTVY4X1BNVV9NQVhfQ09VTlRFUlM7IGkrKylcXG4tXFx0XFx0cnVuX2Vycm9yX3Rlc3QoaSk7XFxuK1xcdFxcdHJ1bl9lcnJvcl90ZXN0KGksIGZpeGVkX2NvdW50ZXJzX29ubHkpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X2ZpeGVkX2NvdW50ZXJzX29ubHlfc3RyaWN0KHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbitcXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4rXFx0dTY0IGlycSA9IDIzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFrdm1faGFzX2NhcChLVk1fQ0FQX0FSTV9QTVVfVjNfU1RSSUNUKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0dm0gPSB2bV9jcmVhdGUoMSk7XFxuK1xcdGt2bV9nZXRfZGVmYXVsdF92Y3B1X3RhcmdldCh2bSwgXFx1MDAyNmluaXQpO1xcbitcXHRpbml0LmZlYXR1cmVzWzBdIHw9IEJJVChLVk1fQVJNX1ZDUFVfUE1VX1YzKSB8XFxuK1xcdFxcdFxcdCAgICBCSVQoS1ZNX0FSTV9WQ1BVX1BNVV9WM19TVFJJQ1QpO1xcbitcXHR2Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMCwgXFx1MDAyNmluaXQsIGd1ZXN0X2NvZGVfZG9uZSk7XFxuK1xcdGt2bV9hcmNoX3ZtX2ZpbmFsaXplX3ZjcHVzKHZtKTtcXG4rXFx0dmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxcbitcXHRcXHRcXHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLCBcXHUwMDI2aXJxKTtcXG4rXFxuK1xcdC8qIFNUUklDVCBzdGlsbCByZXF1aXJlcyBhIFBNVSBzZWxlY3Rpb24gYmVmb3JlIGluaXRpYWxpemF0aW9uLiAqL1xcbitcXHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQsIE5VTEwpO1xcbitcXHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRU5YSU8sXFxuK1xcdFxcdCAgICBLVk1fSU9DVExfRVJST1IoS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7XFxuK1xcbitcXHR2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcXG4rXFx0dmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxcbitcXHRcXHRcXHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVCwgTlVMTCk7XFxuK1xcbitcXHRrdm1fdm1fZnJlZSh2bSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3RfZml4ZWRfY291bnRlcnNfb25seSh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fcG11X2V2ZW50X2ZpbHRlciBmaWx0ZXIgPSB7IC5uZXZlbnRzID0gMCB9O1xcbitcXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICpydW5uaW5nX3ZjcHU7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqc3RvcHBlZF92Y3B1O1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCBpbml0O1xcbitcXHRpbnQgcmV0O1xcbitcXHR1NjQgaXJxID0gMjM7XFxuK1xcbitcXHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcXG4rXFx0cmV0ID0gX192Y3B1X2hhc19kZXZpY2VfYXR0cih2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFkpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFTlhJTyxcXG4rXFx0XFx0XFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fSEFTX0RFVklDRV9BVFRSLCByZXQpKTtcXG4rXFx0XFx0ZGVzdHJveV92cG11X3ZtKCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0LyogQXNzZXJ0IHRoYXQgRklYRURfQ09VTlRFUlNfT05MWSBpcyB1bnNldCBhdCBpbml0aWFsaXphdGlvbi4gKi9cXG4rXFx0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX2dldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xcbitcXHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRU5YSU8sXFxuK1xcdFxcdCAgICBLVk1fSU9DVExfRVJST1IoS1ZNX0dFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7XFxuK1xcbitcXHQvKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgc3VjY2VlZHMuICovXFxuK1xcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxcbitcXHRcXHRcXHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XFxuK1xcbitcXHQvKiBBc3NlcnQgdGhhdCBGSVhFRF9DT1VOVEVSU19PTkxZIGlzIHNldC4gKi9cXG4rXFx0dmNwdV9kZXZpY2VfYXR0cl9nZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFNldHRpbmcgYW4gZXZlbnQgZmlsdGVyIHdoZW4gRklYRURfQ09VTlRFUlNfT05MWSBoYXMgYWxyZWFkeSBiZWVuIHNldFxcbitcXHQgKiByZXN1bHRzIGluIEVCVVNZLlxcbitcXHQgKi9cXG4rXFx0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJTFRFUiwgXFx1MDAyNmZpbHRlcik7XFxuK1xcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFQlVTWSxcXG4rXFx0XFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTtcXG4rXFxuK1xcdGRlc3Ryb3lfdnBtdV92bSgpO1xcbitcXG4rXFx0Y3JlYXRlX3ZwbXVfdm0oZ3Vlc3RfY29kZSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgd2hlbiBhbiBldmVudCBmaWx0ZXIgaGFzXFxuK1xcdCAqIGFscmVhZHkgYmVlbiBzZXQgcmVzdWx0cyBpbiBFQlVTWS5cXG4rXFx0ICovXFxuK1xcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxcbitcXHRcXHRcXHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSLCBcXHUwMDI2ZmlsdGVyKTtcXG4rXFxuK1xcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBOVUxMKTtcXG4rXFx0VEVTVF9BU1NFUlQocmV0ID09IC0xIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVCVVNZLFxcbitcXHRcXHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpO1xcbitcXG4rXFx0ZGVzdHJveV92cG11X3ZtKCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBc3NlcnQgdGhhdCBzZXR0aW5nIEZJWEVEX0NPVU5URVJTX09OTFkgd2hlbiBhIFZDUFUgaGFzIGFscmVhZHkgcnVuXFxuK1xcdCAqIHJlc3VsdHMgaW4gRUJVU1kuXFxuK1xcdCAqL1xcbitcXHR2bSA9IHZtX2NyZWF0ZSgyKTtcXG4rXFx0dm1faW9jdGwodm0sIEtWTV9BUk1fUFJFRkVSUkVEX1RBUkdFVCwgXFx1MDAyNmluaXQpO1xcbitcXHRpbml0LmZlYXR1cmVzWzBdIHw9ICgxIFxcdTAwM2NcXHUwMDNjIEtWTV9BUk1fVkNQVV9QTVVfVjMpO1xcbitcXHRydW5uaW5nX3ZjcHUgPSBhYXJjaDY0X3ZjcHVfYWRkKHZtLCAwLCBcXHUwMDI2aW5pdCwgZ3Vlc3RfY29kZV9kb25lKTtcXG4rXFx0c3RvcHBlZF92Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMSwgXFx1MDAyNmluaXQsIGd1ZXN0X2NvZGVfZG9uZSk7XFxuK1xcdGt2bV9hcmNoX3ZtX2ZpbmFsaXplX3ZjcHVzKHZtKTtcXG4rXFx0dmNwdV9kZXZpY2VfYXR0cl9zZXQocnVubmluZ192Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXFxuK1xcdFxcdFxcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JUlEsIFxcdTAwMjZpcnEpO1xcbitcXHR2Y3B1X2RldmljZV9hdHRyX3NldChydW5uaW5nX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQsIE5VTEwpO1xcbitcXHRydW5fdmNwdShydW5uaW5nX3ZjcHUpO1xcbitcXG4rXFx0cmV0ID0gX192Y3B1X2RldmljZV9hdHRyX3NldChzdG9wcGVkX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xcbitcXHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUJVU1ksXFxuK1xcdFxcdCAgICBLVk1fSU9DVExfRVJST1IoS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7XFxuK1xcbitcXHRrdm1fdm1fZnJlZSh2bSk7XFxuK1xcbitcXHR0ZXN0X2ZpeGVkX2NvdW50ZXJzX29ubHlfc3RyaWN0KCk7XFxuK1xcbitcXHR0ZXN0X2NvbmZpZygwLCB0cnVlKTtcXG4rfVxcbitcXG4raW50IG1haW4odm9pZClcXG4re1xcbitcXHRURVNUX1JFUVVJUkUoa3ZtX2hhc19jYXAoS1ZNX0NBUF9BUk1fUE1VX1YzKSk7XFxuK1xcdFRFU1RfUkVRVUlSRShrdm1fc3VwcG9ydHNfdmdpY192MygpKTtcXG4rXFx0VEVTVF9SRVFVSVJFKGt2bV9zdXBwb3J0c19ucl9jb3VudGVyc19hdHRyKCkpO1xcbitcXG4rXFx0dGVzdF9zZXRfbnJfY291bnRlcnNfYWZ0ZXJfdmNwdV9ydW4oKTtcXG4rXFx0dGVzdF9jb25maWcoZ2V0X3BtY3Jfbl9saW1pdCgpLCBmYWxzZSk7XFxuK1xcdHRlc3RfZml4ZWRfY291bnRlcnNfb25seSgpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTI6NTQ6MzcuNDIzODkzNTQ5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo3NzUxMDMzMTI5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJBbGwgbW9kaWZpZWQga2VybmVsIGNvZGUgaXMgZXhjbHVzaXZlIHRvIHRoZSBhcm02NCBhcmNoaXRlY3R1cmUgKGFyY2gvYXJtNjQgYW5kIGluY2x1ZGUva3ZtL2FybV9wbXUuaCksIHdpdGggdGhlIHJlbWFpbmluZyBjaGFuZ2VzIGxvY2F0ZWQgaW4gRG9jdW1lbnRhdGlvbi8gYW5kIHVzZXItc3BhY2UgdG9vbHMvc2VsZnRlc3RzICh0b29scy8pLiBOb25lIG9mIHRoZSBtb2RpZmllZCBjb2RlIGlzIGNvbXBpbGVkIG9yIHJlYWNoYWJsZSBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MzQzYzBiZmY3ZDVjNWVhN2FmOWUxZjBmYjY1ODE5MWE4MGZiZjE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTI6NTQ6MzUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbmluZGV4IDQ5ODhjMzJkZjRiZjguLjQyMDY1MTM4NjAzYjcgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxuQEAgLTM1MjEsOSArMzUyMSwxMyBAQCBQb3NzaWJsZSBmZWF0dXJlczpcbiBcbiBcdCAgICAqIFVzZXJzcGFjZSBtdXN0IGV4cGxpY2l0bHkgc2VsZWN0IGEgUE1VIGltcGxlbWVudGF0aW9uIGJlZm9yZVxuIFx0ICAgICAgaW5pdGlhbGl6aW5nIHRoZSBQTVUgb3IgY29uZmlndXJpbmcgYSBQTVUgZXZlbnQgZmlsdGVyXG4rXHQgICAgICAoS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZIGFsc28gc2F0aXNmaWVzIHRoZVxuK1x0ICAgICAgaW5pdGlhbGl6YXRpb24gcmVxdWlyZW1lbnQ7IGV2ZW50IGZpbHRlcmluZyByZW1haW5zIHVuYXZhaWxhYmxlXG4rXHQgICAgICBpbiB0aGF0IG1vZGUpXG4gXG4tXHQgICAgKiBJZiB0aGUgUE1VIGltcGxlbWVudHMgRkVBVF9QTVV2M3A0LCBQTU1JUl9FTDEuU0xPVFMgcHJvdmlkZXMgdGhlXG4tXHQgICAgICBoYXJkd2FyZSB2YWx1ZSBvZiB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvblxuK1x0ICAgICogSWYgYSBoYXJkd2FyZSBQTVUgaXMgc2VsZWN0ZWQgYW5kIGltcGxlbWVudHMgRkVBVF9QTVV2M3A0LFxuK1x0ICAgICAgUE1NSVJfRUwxLlNMT1RTIHByb3ZpZGVzIGl0cyBoYXJkd2FyZSB2YWx1ZS4gSW4gZml4ZWQtY291bnRlcnMtb25seVxuK1x0ICAgICAgbW9kZSwgUE1NSVJfRUwxIHJlYWRzIGFzIHplcm9cbiBcbiBcdCAgICAqIFdyaXRlcyB0byBQTUNSX0VMMC5OIHZpYSBLVk1fU0VUX09ORV9SRUcgYXJlIGlnbm9yZWRcbiBcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3RcbmluZGV4IGRlYjVjNTFiYzAwYzguLjRlYzMyOTFmMGJhNzQgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vZGV2aWNlcy92Y3B1LnJzdFxuQEAgLTUzLDkgKzUzLDkgQEAgUmV0dXJuczpcbiBcdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcdCAtRUVYSVNUICBJbnRlcnJ1cHQgbnVtYmVyIGFscmVhZHkgdXNlZFxuIFx0IC1FTk9ERVYgIFBNVXYzIG5vdCBzdXBwb3J0ZWQgb3IgR0lDIG5vdCBpbml0aWFsaXplZFxuLVx0IC1FTlhJTyAgIFBNVXYzIG5vdCBzdXBwb3J0ZWQsIG1pc3NpbmcgVkNQVSBmZWF0dXJlLCBtaXNzaW5nXG4tICAgICAgICAgICAgICAgICAgaGFyZHdhcmUgUE1VLCBvciBpbnRlcnJ1cHQgbnVtYmVyIG5vdCBzZXQgKG5vbi1HSUN2NVxuLSAgICAgICAgICAgICAgICAgIGd1ZXN0cywgb25seSlcbitcdCAtRU5YSU8gICBQTVV2MyBub3Qgc3VwcG9ydGVkLCBtaXNzaW5nIFZDUFUgZmVhdHVyZSxcbitcdFx0ICBuZWl0aGVyIGhhcmR3YXJlIFBNVSBub3IgRklYRURfQ09VTlRFUlNfT05MWSBzZWxlY3RlZCxcbitcdFx0ICBvciBpbnRlcnJ1cHQgbnVtYmVyIG5vdCBzZXQgKG5vbi1HSUN2NSBndWVzdHMgb25seSlcbiBcdCAtRUJVU1kgICBQTVV2MyBhbHJlYWR5IGluaXRpYWxpemVkXG4gXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXG5AQCAtNjQsNyArNjQsOCBAQCB2aXJ0dWFsIEdJQyBpbXBsZW1lbnRhdGlvbiwgdGhpcyBtdXN0IGJlIGRvbmUgYWZ0ZXIgaW5pdGlhbGl6aW5nIHRoZSBpbi1rZXJuZWxcbiBpcnFjaGlwLlxuIFxuIFdoZW4gdGhlIEtWTV9BUk1fVkNQVV9QTVVfVjNfU1RSSUNUIHZDUFUgZmVhdHVyZSBpcyBlbmFibGVkIHRoaXMgbXVzdCBiZSBkb25lXG4tYWZ0ZXIgc2VsZWN0aW5nIGEgaGFyZHdhcmUgUE1VLlxuK2FmdGVyIHNlbGVjdGluZyBhIGhhcmR3YXJlIFBNVSBvciBlbmFibGluZ1xuK0tWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWS5cbiBcbiAxLjMgQVRUUklCVVRFOiBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJTFRFUlxuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5AQCAtNzgsNyArNzksOCBAQCBhZnRlciBzZWxlY3RpbmcgYSBoYXJkd2FyZSBQTVUuXG4gXHQgLUVOT0RFViAgUE1VdjMgbm90IHN1cHBvcnRlZCBvciBHSUMgbm90IGluaXRpYWxpemVkXG4gXHQgLUVOWElPICAgUE1VdjMgbm90IHByb3Blcmx5IGNvbmZpZ3VyZWQgb3IgaW4ta2VybmVsIGlycWNoaXAgbm90XG4gXHQgXHQgIGNvbmZpZ3VyZWQgYXMgcmVxdWlyZWQgcHJpb3IgdG8gY2FsbGluZyB0aGlzIGF0dHJpYnV0ZVxuLVx0IC1FQlVTWSAgIFBNVXYzIGFscmVhZHkgaW5pdGlhbGl6ZWQgb3IgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1blxuK1x0IC1FQlVTWSAgIFBNVXYzIGFscmVhZHkgaW5pdGlhbGl6ZWQsIGEgVkNQVSBoYXMgYWxyZWFkeSBydW4gb3JcbitcdFx0ICBGSVhFRF9DT1VOVEVSU19PTkxZIGhhcyBhbHJlYWR5IGJlZW4gc2V0XG4gXHQgLUVJTlZBTCAgSW52YWxpZCBmaWx0ZXIgcmFuZ2VcbiBcdCA9PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbkBAIC0xMjMsMTQgKzEyNSwxNCBAQCBhZnRlciBzZWxlY3RpbmcgYSBoYXJkd2FyZSBQTVUuXG4gXG4gOlJldHVybnM6XG4gXG4tXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1x0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXHQgLUVCVVNZICAgUE1VdjMgYWxyZWFkeSBpbml0aWFsaXplZCwgYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1biBvclxuLSAgICAgICAgICAgICAgICAgIGFuIGV2ZW50IGZpbHRlciBoYXMgYWxyZWFkeSBiZWVuIHNldFxuKyAgICAgICAgICAgICAgICAgIGFuIGV2ZW50IGZpbHRlciBvciBGSVhFRF9DT1VOVEVSU19PTkxZIGhhcyBhbHJlYWR5IGJlZW4gc2V0XG4gXHQgLUVGQVVMVCAgRXJyb3IgYWNjZXNzaW5nIHRoZSBQTVUgaWRlbnRpZmllclxuIFx0IC1FTlhJTyAgIFBNVSBub3QgZm91bmRcbiBcdCAtRU5PREVWICBQTVV2MyBub3Qgc3VwcG9ydGVkIG9yIEdJQyBub3QgaW5pdGlhbGl6ZWRcbiBcdCAtRU5PTUVNICBDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5XG4tXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1x0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXG4gUmVxdWVzdCB0aGF0IHRoZSBWQ1BVIHVzZXMgdGhlIHNwZWNpZmllZCBoYXJkd2FyZSBQTVUgd2hlbiBjcmVhdGluZyBndWVzdCBldmVudHNcbiBmb3IgdGhlIHB1cnBvc2Ugb2YgUE1VIGVtdWxhdGlvbi4gVGhlIFBNVSBpZGVudGlmaWVyIGNhbiBiZSByZWFkIGZyb20gdGhlIFwidHlwZVwiXG5AQCAtMTcyLDYgKzE3NCwzMCBAQCBleHBsaWNpdGx5IHNlbGVjdGVkLCBvciB0aGUgbnVtYmVyIG9mIGNvdW50ZXJzIGlzIG91dCBvZiByYW5nZSBmb3IgdGhlXG4gc2VsZWN0ZWQgUE1VLiBTZWxlY3RpbmcgYSBuZXcgUE1VIGNhbmNlbHMgdGhlIGVmZmVjdCBvZiBzZXR0aW5nIHRoaXNcbiBhdHRyaWJ1dGUuXG4gXG4rMS42IEFUVFJJQlVURTogS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rXG4rOlBhcmFtZXRlcnM6IG5vIGFkZGl0aW9uYWwgcGFyYW1ldGVyIGluIGt2bV9kZXZpY2VfYXR0ci5hZGRyXG4rXG4rOlJldHVybnM6XG4rXG4rXHQgPT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbitcdCAtRUJVU1kgICBQTVV2MyBhbHJlYWR5IGluaXRpYWxpemVkLCBhIFZDUFUgaGFzIGFscmVhZHkgcnVuLFxuK1x0XHQgIGFuIGV2ZW50IGZpbHRlciBoYXMgYWxyZWFkeSBiZWVuIHNldCBvclxuK1x0XHQgIGEgaGFyZHdhcmUgUE1VIGhhcyBhbHJlYWR5IGJlZW4gc3BlY2lmaWVkXG4rXHQgLUVOWElPICAgQXR0ZW1wdGVkIHRvIGdldCBiZWZvcmUgc2V0dGluZ1xuK1x0IC1FTk9ERVYgIEF0dGVtcHRlZCB0byBzZXQgd2hpbGUgUE1VdjMgbm90IHN1cHBvcnRlZFxuK1x0ID09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rXG4rSWYgc2V0LCBLVk0gZW11bGF0ZXMgUE1VdjMgd2l0aG91dCBwcm9ncmFtbWFibGUgZXZlbnQgY291bnRlcnMuXG4rXG4rV2l0aCBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NUUklDVCwgZW5hYmxpbmcgdGhpcyBhdHRyaWJ1dGUgc2F0aXNmaWVzIHRoZVxuK1BNVSBzZWxlY3Rpb24gcmVxdWlyZW1lbnQgZm9yIEtWTV9BUk1fVkNQVV9QTVVfVjNfSU5JVC5cbitcbitXaGVuIHRoaXMgYXR0cmlidXRlIGlzIGVuYWJsZWQsIHRoZSB2Q1BVIGNhbiBydW4gb24gYW55IHBoeXNpY2FsIENQVVxuK3RoYXQgaGFzIGEgUE1VLCByZWdhcmRsZXNzIG9mIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uLiBUaGlzXG4rYXR0cmlidXRlIGlzIFZNLXNjb3BlZC5cbitcbiAyLiBHUk9VUDogS1ZNX0FSTV9WQ1BVX1RJTUVSX0NUUkxcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDI3ZmUwY2Q1YjJkN2EuLjEwZTNmZjQxMDc5ZTggMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTM2Nyw2ICszNjcsMTAgQEAgc3RydWN0IGt2bV9hcmNoIHtcbiAjZGVmaW5lIEtWTV9BUkNIX0ZMQUdfV1JJVEFCTEVfSU1QX0lEX1JFR1NcdFx0MTBcbiBcdC8qIFVuaGFuZGxlZCBTRUFzIGFyZSB0YWtlbiB0byB1c2Vyc3BhY2UgKi9cbiAjZGVmaW5lIEtWTV9BUkNIX0ZMQUdfRVhJVF9TRUFcdFx0XHRcdDExXG4rXHQvKiBQTVV2MyBpcyBlbXVsYXRlZCB3aXRoIGFuIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGhhcmR3YXJlIFBNVSAqL1xuKyNkZWZpbmUgS1ZNX0FSQ0hfRkxBR19QTVVfVjNfRVhQTElDSVRcdFx0XHQxMlxuK1x0LyogUE1VdjMgaXMgZW11bGF0ZWQgd2l0aG91dCBwcm9ncmFtbWFibGUgZXZlbnQgY291bnRlcnMgKi9cbisjZGVmaW5lIEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlcdDEzXG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0LyogVk0td2lkZSB2Q1BVIGZlYXR1cmUgc2V0ICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG5pbmRleCAwMTllNWUzZDg5MmU2Li4zYmQ3ZjIwMTI1MmExIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbkBAIC00MzgsNiArNDM4LDcgQEAgZW51bSB7XG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklMVEVSXHRcdDJcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VXHRcdDNcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfTlJfQ09VTlRFUlNcdDRcbisjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZXHQ1XG4gI2RlZmluZSBLVk1fQVJNX1ZDUFVfVElNRVJfQ1RSTFx0XHQxXG4gI2RlZmluZSAgIEtWTV9BUk1fVkNQVV9USU1FUl9JUlFfVlRJTUVSXHRcdDBcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1RJTUVSX0lSUV9QVElNRVJcdFx0MVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2NwdV9lcnJhdGEuYyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdV9lcnJhdGEuY1xuaW5kZXggNzhlNGUxMDVmNmFiNS4uOWIyZDlkMGYxNzM4OCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2NwdV9lcnJhdGEuY1xuKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1X2VycmF0YS5jXG5AQCAtMTAxMiw3ICsxMDEyLDcgQEAgY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgYXJtNjRfZXJyYXRhW10gPSB7XG4gXHR7XG4gXHRcdC5kZXNjID0gXCJBcHBsZSBJTVBERUYgUE1VdjMgVHJhcHNcIixcbiBcdFx0LmNhcGFiaWxpdHkgPSBBUk02NF9XT1JLQVJPVU5EX1BNVVYzX0lNUERFRl9UUkFQUyxcbi1cdFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfTE9DQUxfQ1BVX0VSUkFUVU0sXG4rXHRcdC50eXBlID0gQVJNNjRfQ1BVQ0FQX0VBUkxZX0xPQ0FMX0NQVV9GRUFUVVJFLFxuIFx0XHQubWF0Y2hlcyA9IGhhc19pbXBkZWZfcG11djMsXG4gXHRcdC5jcHVfZW5hYmxlID0gY3B1X2VuYWJsZV9pbXBkZWZfcG11djNfdHJhcHMsXG4gXHR9LFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FybS5jIGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcbmluZGV4IGNjYWU4MmMxMjQyYmMuLmRmZWJmZWI5NTYxOTggMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9hcm0uY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcbkBAIC02NTIsNiArNjUyLDcgQEAgc3RhdGljIGJvb2wga3ZtX3ZjcHVfc2hvdWxkX2NsZWFyX3R3ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gdm9pZCBrdm1fYXJjaF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxuIHtcbiBcdHN0cnVjdCBrdm1fczJfbW11ICptbXU7XG4rXHRpbnQgbGFzdF9jcHUgPSB2Y3B1LVx1MDAzZWNwdTtcbiBcdGludCAqbGFzdF9yYW47XG4gXG4gXHRpZiAoaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkpXG5AQCAtNzAxLDYgKzcwMiw3IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbiBcdGlmIChoYXNfdmhlKCkpXG4gXHRcdGt2bV92Y3B1X2xvYWRfdmhlKHZjcHUpO1xuIFx0a3ZtX2FyY2hfdmNwdV9sb2FkX2ZwKHZjcHUpO1xuK1x0a3ZtX3ZjcHVfbG9hZF9wbXUodmNwdSwgbGFzdF9jcHUpO1xuIFx0a3ZtX3ZjcHVfcG11X3Jlc3RvcmVfZ3Vlc3QodmNwdSk7XG4gXHRpZiAoa3ZtX2FybV9pc19wdnRpbWVfZW5hYmxlZChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gpKVxuIFx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVDT1JEX1NURUFMLCB2Y3B1KTtcbkBAIC03NTQsNyArNzU2LDYgQEAgdm9pZCBrdm1fYXJjaF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRrdm1fYXJtX3ZtaWRfY2xlYXJfYWN0aXZlKCk7XG4gXG4gXHR2Y3B1X2NsZWFyX29uX3Vuc3VwcG9ydGVkX2NwdSh2Y3B1KTtcbi1cdHZjcHUtXHUwMDNlY3B1ID0gLTE7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9fa3ZtX2FybV92Y3B1X3Bvd2VyX29mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5AQCAtMTY3MCwyOSArMTY3MSwyNiBAQCBzdGF0aWMgaW50IF9fa3ZtX3ZjcHVfc2V0X3RhcmdldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBmZWF0dXJlcyA9IGluaXQtXHUwMDNlZmVhdHVyZXNbMF07XG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbi1cdGludCByZXQgPSAtRUlOVkFMO1xuK1x0aW50IHJldDtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2guY29uZmlnX2xvY2spO1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4gXG4gXHRpZiAodGVzdF9iaXQoS1ZNX0FSQ0hfRkxBR19WQ1BVX0ZFQVRVUkVTX0NPTkZJR1VSRUQsIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmZsYWdzKSBcdTAwMjZcdTAwMjZcbiBcdCAgICBrdm1fdmNwdV9pbml0X2NoYW5nZWQodmNwdSwgaW5pdCkpXG4tXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRiaXRtYXBfY29weShrdm0tXHUwMDNlYXJjaC52Y3B1X2ZlYXR1cmVzLCBcdTAwMjZmZWF0dXJlcywgS1ZNX1ZDUFVfTUFYX0ZFQVRVUkVTKTtcbiBcbiBcdHJldCA9IGt2bV9zZXR1cF92Y3B1KHZjcHUpO1xuIFx0aWYgKHJldClcbi1cdFx0Z290byBvdXRfdW5sb2NrO1xuK1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0LyogTm93IHdlIGtub3cgd2hhdCBpdCBpcywgd2UgY2FuIHJlc2V0IGl0LiAqL1xuIFx0a3ZtX3Jlc2V0X3ZjcHUodmNwdSk7XG4gXG4gXHRzZXRfYml0KEtWTV9BUkNIX0ZMQUdfVkNQVV9GRUFUVVJFU19DT05GSUdVUkVELCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5mbGFncyk7XG4gXHR2Y3B1X3NldF9mbGFnKHZjcHUsIFZDUFVfSU5JVElBTElaRUQpO1xuLVx0cmV0ID0gMDtcbi1vdXRfdW5sb2NrOlxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbi1cdHJldHVybiByZXQ7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBrdm1fdmNwdV9zZXRfdGFyZ2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbkBAIC0xNzA4LDYgKzE3MDYsOCBAQCBzdGF0aWMgaW50IGt2bV92Y3B1X3NldF90YXJnZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbitcbiBcdGlmICgha3ZtX3ZjcHVfaW5pdGlhbGl6ZWQodmNwdSkpXG4gXHRcdHJldHVybiBfX2t2bV92Y3B1X3NldF90YXJnZXQodmNwdSwgaW5pdCk7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYyBiL2FyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmNcbmluZGV4IDViMWFmN2UyMTc2ZmEuLmM2ODMzMWNkZmFmOTMgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jXG5AQCAtNyw5ICs3LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jcHUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2hvc3QuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmZfZXZlbnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmYvYXJtX3BtdS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1bGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9lbXVsYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nrdm0vYXJtX3BtdS5oXHUwMDNlXG5AQCAtMTcsNiArMTcsMTAgQEBcbiBcbiAjZGVmaW5lIFBFUkZfQVRUUl9DRkcxX0NPVU5URVJfNjRCSVRcdEJJVCgwKVxuIFxuKy8qXG4rICogYXJtX3BtdXMgaXMgYXBwZW5kLW9ubHkuIGt2bV9zdXBwb3J0c19ndWVzdF9wbXV2MygpIGZlZWRzIHBlcnNpc3RlbnRcbisgKiBWTSBzdGF0ZSwgc28gYSB0cnVlIHJlc3VsdCBtdXN0IHJlbWFpbiB2YWxpZCBhZnRlciB0aGUgY2hlY2suXG4rICovXG4gc3RhdGljIExJU1RfSEVBRChhcm1fcG11cyk7XG4gc3RhdGljIERFRklORV9NVVRFWChhcm1fcG11c19sb2NrKTtcbiBcbkBAIC0yNiw3ICszMCw2IEBAIHN0YXRpYyBib29sIGt2bV9wbXVfY291bnRlcl9pc19lbmFibGVkKHN0cnVjdCBrdm1fcG1jICpwbWMpO1xuIFxuIGJvb2wga3ZtX3N1cHBvcnRzX2d1ZXN0X3BtdXYzKHZvaWQpXG4ge1xuLVx0Z3VhcmQobXV0ZXgpKFx1MDAyNmFybV9wbXVzX2xvY2spO1xuIFx0cmV0dXJuICFsaXN0X2VtcHR5KFx1MDAyNmFybV9wbXVzKTtcbiB9XG4gXG5AQCAtODAsNiArODMsMTEgQEAgdTY0IGt2bV9wbXVfZXZ0eXBlcl9tYXNrKHN0cnVjdCBrdm0gKmt2bSlcbiBcdHJldHVybiBtYXNrO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoc3RydWN0IGt2bSAqa3ZtKVxuK3tcbitcdHJldHVybiB0ZXN0X2JpdChLVk1fQVJDSF9GTEFHX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZLCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5mbGFncyk7XG4rfVxuK1xuIC8qKlxuICAqIGt2bV9wbWNfaXNfNjRiaXQgLSBkZXRlcm1pbmUgaWYgY291bnRlciBpcyA2NGJpdFxuICAqIEBwbWM6IGNvdW50ZXIgY29udGV4dFxuQEAgLTMxNywxMiArMzI1LDEyIEBAIHU2NCBrdm1fcG11X2FjY2Vzc2libGVfY291bnRlcl9tYXNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiB1NjQga3ZtX3BtdV9pbXBsZW1lbnRlZF9jb3VudGVyX21hc2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHU2NCB2YWwgPSBGSUVMRF9HRVQoQVJNVjhfUE1VX1BNQ1JfTiwga3ZtX3ZjcHVfcmVhZF9wbWNyKHZjcHUpKTtcbitcdHU2NCBuID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnM7XG4gXG4tXHRpZiAodmFsID09IDApXG4rXHRpZiAobiA9PSAwKVxuIFx0XHRyZXR1cm4gQklUKEFSTVY4X1BNVV9DWUNMRV9JRFgpO1xuIFx0ZWxzZVxuLVx0XHRyZXR1cm4gR0VOTUFTSyh2YWwgLSAxLCAwKSB8IEJJVChBUk1WOF9QTVVfQ1lDTEVfSURYKTtcbitcdFx0cmV0dXJuIEdFTk1BU0sobiAtIDEsIDApIHwgQklUKEFSTVY4X1BNVV9DWUNMRV9JRFgpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBrdm1fcG1jX2VuYWJsZV9wZXJmX2V2ZW50KHN0cnVjdCBrdm1fcG1jICpwbWMpXG5AQCAtNTcxLDYgKzU3OSwyMyBAQCB2b2lkIGt2bV9wbXVfc29mdHdhcmVfaW5jcmVtZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhbClcbiBcdGt2bV9wbXVfY291bnRlcl9pbmNyZW1lbnQodmNwdSwgdmFsLCBBUk1WOF9QTVVWM19QRVJGQ1RSX1NXX0lOQ1IpO1xuIH1cbiBcbit2b2lkIGt2bV9wbXVfcmVxdWVzdF9yZWNyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0dmNwdS1cdTAwM2VhcmNoLnBtdS5ldmVudHNfbmVlZF9yZWNyZWF0ZSA9IHRydWU7XG4rXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XG4rfVxuK1xuK3ZvaWQga3ZtX3BtdV9hcHBseV9wbWNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9sZCwgdTY0IHZhbCwgYm9vbCBmb3JjZV9yZWxvYWQpXG4re1xuK1x0dTY0IGNoYW5nZWQgPSBvbGQgXiB2YWw7XG4rXG4rXHQvKiBSZWxvYWQgdGhlIFBNVSBpZiB0aGUgd3JpdGUgYWZmZWN0cyB0aGUgYmFja2luZyBwZXJmIGV2ZW50cy4gKi9cbitcdGlmIChjaGFuZ2VkIFx1MDAyNiAoQVJNVjhfUE1VX1BNQ1JfTEMgfCBBUk1WOF9QTVVfUE1DUl9MUCkpXG4rXHRcdGt2bV9wbXVfcmVxdWVzdF9yZWNyZWF0ZSh2Y3B1KTtcbitcdGVsc2UgaWYgKGZvcmNlX3JlbG9hZCB8fCAoY2hhbmdlZCBcdTAwMjYgQVJNVjhfUE1VX1BNQ1JfRSkpXG4rXHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUxPQURfUE1VLCB2Y3B1KTtcbit9XG4rXG4gLyoqXG4gICoga3ZtX3BtdV9oYW5kbGVfcG1jciAtIGhhbmRsZSBQTUNSIHJlZ2lzdGVyXG4gICogQHZjcHU6IFRoZSB2Y3B1IHBvaW50ZXJcbkBAIC01NzgsMTkgKzYwMywxOCBAQCB2b2lkIGt2bV9wbXVfc29mdHdhcmVfaW5jcmVtZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhbClcbiAgKi9cbiB2b2lkIGt2bV9wbXVfaGFuZGxlX3BtY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKVxuIHtcbitcdHU2NCBvbGQgPSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBQTUNSX0VMMCk7XG4gXHRpbnQgaTtcbiBcbiBcdC8qIEZpeHVwIFBNQ1JfRUwwIHRvIHJlY29uY2lsZSB0aGUgUE1VIHZlcnNpb24gYW5kIHRoZSBMUCBiaXQgKi9cbiBcdGlmICgha3ZtX2hhc19mZWF0KHZjcHUtXHUwMDNla3ZtLCBJRF9BQTY0REZSMF9FTDEsIFBNVVZlciwgVjNQNSkpXG4gXHRcdHZhbCBcdTAwMjY9IH5BUk1WOF9QTVVfUE1DUl9MUDtcbiBcbi1cdC8qIFJlcXVlc3QgYSByZWxvYWQgb2YgdGhlIFBNVSB0byBlbmFibGUvZGlzYWJsZSBhZmZlY3RlZCBjb3VudGVycyAqL1xuLVx0aWYgKChfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBQTUNSX0VMMCkgXiB2YWwpIFx1MDAyNiBBUk1WOF9QTVVfUE1DUl9FKVxuLVx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XG4tXG4gXHQvKiBUaGUgcmVzZXQgYml0cyBkb24ndCBpbmRpY2F0ZSBhbnkgc3RhdGUsIGFuZCBzaG91bGRuJ3QgYmUgc2F2ZWQuICovXG4gXHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgUE1DUl9FTDAsICh2YWwgXHUwMDI2IH4oQVJNVjhfUE1VX1BNQ1JfQyB8IEFSTVY4X1BNVV9QTUNSX1ApKSk7XG4gXG4rXHRrdm1fcG11X2FwcGx5X3BtY3IodmNwdSwgb2xkLCBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBQTUNSX0VMMCksIGZhbHNlKTtcbitcbiBcdGlmICh2YWwgXHUwMDI2IEFSTVY4X1BNVV9QTUNSX0MpXG4gXHRcdGt2bV9wbXVfc2V0X2NvdW50ZXJfdmFsdWUodmNwdSwgQVJNVjhfUE1VX0NZQ0xFX0lEWCwgMCk7XG4gXG5AQCAtNjA2LDYgKzYzMCwyMCBAQCB2b2lkIGt2bV9wbXVfaGFuZGxlX3BtY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKVxuIFx0fVxuIH1cbiBcbit2b2lkIGt2bV9wbXVfYXBwbHlfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBvbGQsIHU2NCB2YWwpXG4re1xuK1x0dTY0IGNoYW5nZWQgPSBvbGQgXiB2YWw7XG4rXG4rXHQvKlxuK1x0ICogSFBNTiBkZXRlcm1pbmVzIHdoaWNoIGNvdW50ZXJzIEhQTUQgYW5kIEhMUCBhcHBseSB0by4gQ2hhbmdlcyB0b1xuK1x0ICogdGhlc2UgZmllbGRzIHJlcXVpcmUgbmV3IHBlcmYgZXZlbnQgZmlsdGVycyBhbmQgc2FtcGxlIHBlcmlvZHMuXG4rXHQgKi9cbitcdGlmIChjaGFuZ2VkIFx1MDAyNiAoTURDUl9FTDJfSFBNTiB8IE1EQ1JfRUwyX0hQTUQgfCBNRENSX0VMMl9ITFApKVxuK1x0XHRrdm1fcG11X3JlcXVlc3RfcmVjcmVhdGUodmNwdSk7XG4rXHRlbHNlIGlmIChjaGFuZ2VkIFx1MDAyNiBNRENSX0VMMl9IUE1FKVxuK1x0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XG4rfVxuK1xuIHN0YXRpYyBib29sIGt2bV9wbXVfY291bnRlcl9pc19lbmFibGVkKHN0cnVjdCBrdm1fcG1jICpwbWMpXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX3BtY190b192Y3B1KHBtYyk7XG5AQCAtNjQ5LDEwICs2ODcsOCBAQCBzdGF0aWMgYm9vbCBrdm1fcG1jX2NvdW50c19hdF9lbDIoc3RydWN0IGt2bV9wbWMgKnBtYylcbiBcdHJldHVybiBrdm1fcG1jX3JlYWRfZXZ0cmVnKHBtYykgXHUwMDI2IEFSTVY4X1BNVV9JTkNMVURFX0VMMjtcbiB9XG4gXG4tc3RhdGljIGludCBrdm1fbWFwX3BtdV9ldmVudChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBldmVudHNlbClcbitzdGF0aWMgaW50IGt2bV9tYXBfcG11X2V2ZW50KHN0cnVjdCBhcm1fcG11ICpwbXUsIHVuc2lnbmVkIGludCBldmVudHNlbClcbiB7XG4tXHRzdHJ1Y3QgYXJtX3BtdSAqcG11ID0ga3ZtLVx1MDAzZWFyY2guYXJtX3BtdTtcbi1cbiBcdC8qXG4gXHQgKiBUaGUgQ1BVIFBNVSBsaWtlbHkgaXNuJ3QgUE1VdjM7IGxldCB0aGUgZHJpdmVyIHByb3ZpZGUgYSBtYXBwaW5nXG4gXHQgKiBmb3IgdGhlIGd1ZXN0J3MgUE1VdjMgZXZlbnQgSUQuXG5AQCAtNjYzLDE0ICs2OTksMjcgQEAgc3RhdGljIGludCBrdm1fbWFwX3BtdV9ldmVudChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBldmVudHNlbClcbiBcdHJldHVybiBldmVudHNlbDtcbiB9XG4gXG4tLyoqXG4tICoga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudCAtIGNyZWF0ZSBhIHBlcmYgZXZlbnQgZm9yIGEgY291bnRlclxuLSAqIEBwbWM6IENvdW50ZXIgY29udGV4dFxuLSAqL1xuLXN0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYylcbitzdGF0aWMgc3RydWN0IGFybV9wbXUgKmt2bV9wbXVfcHJvYmVfYXJtcG11KGludCBjcHUpXG4re1xuK1x0c3RydWN0IGFybV9wbXVfZW50cnkgKmVudHJ5O1xuK1x0c3RydWN0IGFybV9wbXUgKnBtdTtcbitcbitcdGd1YXJkKHJjdSkoKTtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVudHJ5LCBcdTAwMjZhcm1fcG11cywgZW50cnkpIHtcbitcdFx0cG11ID0gZW50cnktXHUwMDNlYXJtX3BtdTtcbitcbitcdFx0aWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBcdTAwMjZwbXUtXHUwMDNlc3VwcG9ydGVkX2NwdXMpKVxuK1x0XHRcdHJldHVybiBwbXU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rc3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdShzdHJ1Y3Qga3ZtX3BtYyAqcG1jLFxuK1x0XHRcdFx0XHQgICAgICAgc3RydWN0IGFybV9wbXUgKmFybV9wbXUpXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX3BtY190b192Y3B1KHBtYyk7XG4tXHRzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guYXJtX3BtdTtcbiBcdHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDtcbiBcdHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgYXR0cjtcbiBcdGludCBldmVudHNlbDtcbkBAIC03MDQsNyArNzUzLDcgQEAgc3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxuIFx0ICogRG9uJ3QgY3JlYXRlIGFuIGV2ZW50IGlmIHdlJ3JlIHJ1bm5pbmcgb24gaGFyZHdhcmUgdGhhdCByZXF1aXJlc1xuIFx0ICogUE1VdjMgZXZlbnQgdHJhbnNsYXRpb24gYW5kIHdlIGNvdWxkbid0IGZpbmQgYSB2YWxpZCBtYXBwaW5nLlxuIFx0ICovXG4tXHRldmVudHNlbCA9IGt2bV9tYXBfcG11X2V2ZW50KHZjcHUtXHUwMDNla3ZtLCBldmVudHNlbCk7XG4rXHRldmVudHNlbCA9IGt2bV9tYXBfcG11X2V2ZW50KGFybV9wbXUsIGV2ZW50c2VsKTtcbiBcdGlmIChldmVudHNlbCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTc0OSw2ICs3OTgsMzIgQEAgc3RhdGljIHZvaWQga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudChzdHJ1Y3Qga3ZtX3BtYyAqcG1jKVxuIFx0cG1jLVx1MDAzZXBlcmZfZXZlbnQgPSBldmVudDtcbiB9XG4gXG4rLyoqXG4rICoga3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudCAtIGNyZWF0ZSBhIHBlcmYgZXZlbnQgZm9yIGEgY291bnRlclxuKyAqIEBwbWM6IENvdW50ZXIgY29udGV4dFxuKyAqL1xuK3N0YXRpYyB2b2lkIGt2bV9wbXVfY3JlYXRlX3BlcmZfZXZlbnQoc3RydWN0IGt2bV9wbWMgKnBtYylcbit7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fcG1jX3RvX3ZjcHUocG1jKTtcbitcdHN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5hcm1fcG11O1xuK1xuK1x0aWYgKGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seSh2Y3B1LVx1MDAzZWt2bSkpIHtcbitcdFx0ZG8ge1xuK1x0XHRcdGFybV9wbXUgPSBrdm1fcG11X3Byb2JlX2FybXBtdShSRUFEX09OQ0UodmNwdS1cdTAwM2VjcHUpKTtcbitcbitcdFx0XHRpZiAoIWFybV9wbXUpIHtcbitcdFx0XHRcdHByX3dhcm5fb25jZShcImt2bTogVW5zdXBwb3J0ZWQgUE1VIHZhcmlhdGlvbiBkZXRlY3RlZC5cXG5cIik7XG4rXHRcdFx0XHRhZGRfdGFpbnQoVEFJTlRfQ1BVX09VVF9PRl9TUEVDLCBMT0NLREVQX1NUSUxMX09LKTtcbitcdFx0XHRcdHJldHVybjtcbitcdFx0XHR9XG4rXG4rXHRcdFx0a3ZtX3BtdV9jcmVhdGVfcGVyZl9ldmVudF93aXRoX3BtdShwbWMsIGFybV9wbXUpO1xuK1x0XHR9IHdoaWxlICghY3B1bWFza190ZXN0X2NwdShSRUFEX09OQ0UodmNwdS1cdTAwM2VjcHUpLCBcdTAwMjZhcm1fcG11LVx1MDAzZXN1cHBvcnRlZF9jcHVzKSk7XG4rXHR9IGVsc2Uge1xuK1x0XHRrdm1fcG11X2NyZWF0ZV9wZXJmX2V2ZW50X3dpdGhfcG11KHBtYywgYXJtX3BtdSk7XG4rXHR9XG4rfVxuK1xuIC8qKlxuICAqIGt2bV9wbXVfc2V0X2NvdW50ZXJfZXZlbnRfdHlwZSAtIHNldCBzZWxlY3RlZCBjb3VudGVyIHRvIG1vbml0b3Igc29tZSBldmVudFxuICAqIEB2Y3B1OiBUaGUgdmNwdSBwb2ludGVyXG5AQCAtNzg5LDQzICs4NjQsNyBAQCB2b2lkIGt2bV9ob3N0X3BtdV9pbml0KHN0cnVjdCBhcm1fcG11ICpwbXUpXG4gXHRcdHJldHVybjtcbiBcbiBcdGVudHJ5LVx1MDAzZWFybV9wbXUgPSBwbXU7XG4tXHRsaXN0X2FkZF90YWlsKFx1MDAyNmVudHJ5LVx1MDAzZWVudHJ5LCBcdTAwMjZhcm1fcG11cyk7XG4tfVxuLVxuLXN0YXRpYyBzdHJ1Y3QgYXJtX3BtdSAqa3ZtX3BtdV9wcm9iZV9hcm1wbXUodm9pZClcbi17XG4tXHRzdHJ1Y3QgYXJtX3BtdV9lbnRyeSAqZW50cnk7XG4tXHRzdHJ1Y3QgYXJtX3BtdSAqcG11O1xuLVx0aW50IGNwdTtcbi1cbi1cdGd1YXJkKG11dGV4KShcdTAwMjZhcm1fcG11c19sb2NrKTtcbi1cbi1cdC8qXG4tXHQgKiBJdCBpcyBzYWZlIHRvIHVzZSBhIHN0YWxlIGNwdSB0byBpdGVyYXRlIHRoZSBsaXN0IG9mIFBNVXMgc28gbG9uZyBhc1xuLVx0ICogdGhlIHNhbWUgdmFsdWUgaXMgdXNlZCBmb3IgdGhlIGVudGlyZXR5IG9mIHRoZSBsb29wLiBHaXZlbiB0aGlzLCBhbmRcbi1cdCAqIHRoZSBmYWN0IHRoYXQgbm8gcGVyY3B1IGRhdGEgaXMgdXNlZCBmb3IgdGhlIGxvb2t1cCB0aGVyZSBpcyBubyBuZWVkXG4tXHQgKiB0byBkaXNhYmxlIHByZWVtcHRpb24uXG4tXHQgKlxuLVx0ICogSXQgaXMgc3RpbGwgbmVjZXNzYXJ5IHRvIGdldCBhIHZhbGlkIGNwdSwgdGhvdWdoLCB0byBwcm9iZSBmb3IgdGhlXG4tXHQgKiBkZWZhdWx0IFBNVSBpbnN0YW5jZSBhcyB1c2Vyc3BhY2UgaXMgbm90IHJlcXVpcmVkIHRvIHNwZWNpZnkgYSBQTVVcbi1cdCAqIHR5cGUuIEluIG9yZGVyIHRvIHVwaG9sZCB0aGUgcHJlZXhpc3RpbmcgYmVoYXZpb3IgS1ZNIHNlbGVjdHMgdGhlXG4tXHQgKiBQTVUgaW5zdGFuY2UgZm9yIHRoZSBjb3JlIGR1cmluZyB2Y3B1IGluaXQuIEEgZGVwZW5kZW50IHVzZVxuLVx0ICogY2FzZSB3b3VsZCBiZSBhIHVzZXIgd2l0aCBkaXNkYWluIG9mIGFsbCB0aGluZ3MgYmlnLkxJVFRMRSB0aGF0XG4tXHQgKiBhZmZpbmVzIHRoZSBWTU0gdG8gYSBwYXJ0aWN1bGFyIGNsdXN0ZXIgb2YgY29yZXMuXG4tXHQgKlxuLVx0ICogSW4gYW55IGNhc2UsIHVzZXJzcGFjZSBzaG91bGQganVzdCBkbyB0aGUgc2FuZSB0aGluZyBhbmQgdXNlIHRoZSBVQVBJXG4tXHQgKiB0byBzZWxlY3QgYSBQTVUgdHlwZSBkaXJlY3RseS4gQnV0LCBiZSB3YXJ5IG9mIHRoZSBiYWdnYWdlIGJlaW5nXG4tXHQgKiBjYXJyaWVkIGhlcmUuXG4tXHQgKi9cbi1cdGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7XG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcdTAwMjZhcm1fcG11cywgZW50cnkpIHtcbi1cdFx0cG11ID0gZW50cnktXHUwMDNlYXJtX3BtdTtcbi1cbi1cdFx0aWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBcdTAwMjZwbXUtXHUwMDNlc3VwcG9ydGVkX2NwdXMpKVxuLVx0XHRcdHJldHVybiBwbXU7XG4tXHR9XG4tXG4tXHRyZXR1cm4gTlVMTDtcbitcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNmVudHJ5LVx1MDAzZWVudHJ5LCBcdTAwMjZhcm1fcG11cyk7XG4gfVxuIFxuIHN0YXRpYyB1NjQgX19jb21wdXRlX3BtY2VpZChzdHJ1Y3QgYXJtX3BtdSAqcG11LCBib29sIHBtY2VpZDEpXG5AQCAtODcxLDYgKzkxMCwxMyBAQCB1NjQga3ZtX3BtdV9nZXRfcG1jZWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBwbWNlaWQxKVxuIFx0dTY0IHZhbCwgbWFzayA9IDA7XG4gXHRpbnQgYmFzZSwgaSwgbnJfZXZlbnRzO1xuIFxuK1x0LypcbitcdCAqIEhpZGUgdGhlIGhhcmR3YXJlIFBNVSdzIGV2ZW50IHNldCB0byBrZWVwIFBNQ0VJRCBzdGFibGUgYWNyb3NzXG4rXHQgKiBwaHlzaWNhbCBDUFUgbWlncmF0aW9uLlxuK1x0ICovXG4rXHRpZiAoa3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXHUwMDNla3ZtKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHRpZiAoIXBtY2VpZDEpIHtcbiBcdFx0dmFsID0gY29tcHV0ZV9wbWNlaWQwKHZjcHUpO1xuIFx0XHRiYXNlID0gMDtcbkBAIC04OTgsOSArOTQ0LDI3IEBAIHU2NCBrdm1fcG11X2dldF9wbWNlaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHBtY2VpZDEpXG4gXHRyZXR1cm4gdmFsIFx1MDAyNiBtYXNrO1xuIH1cbiBcbit2b2lkIGt2bV92Y3B1X2xvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGxhc3RfY3B1KVxuK3tcbitcdGlmICgha3ZtX3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUtXHUwMDNla3ZtKSB8fCB2Y3B1LVx1MDAzZWNwdSA9PSBsYXN0X2NwdSB8fCBsYXN0X2NwdSA9PSAtMSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKGt2bV9wbXVfcHJvYmVfYXJtcG11KHZjcHUtXHUwMDNlY3B1KSAhPSBrdm1fcG11X3Byb2JlX2FybXBtdShsYXN0X2NwdSkpXG4rXHRcdGt2bV9wbXVfcmVxdWVzdF9yZWNyZWF0ZSh2Y3B1KTtcbit9XG4rXG4gdm9pZCBrdm1fdmNwdV9yZWxvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4rXHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnBtdTtcbiBcdHU2NCBtYXNrID0ga3ZtX3BtdV9pbXBsZW1lbnRlZF9jb3VudGVyX21hc2sodmNwdSk7XG4rXHRpbnQgaTtcbitcbitcdGlmIChwbXUtXHUwMDNlZXZlbnRzX25lZWRfcmVjcmVhdGUpIHtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgS1ZNX0FSTVY4X1BNVV9NQVhfQ09VTlRFUlM7IGkrKylcbitcdFx0XHRrdm1fcG11X3N0b3BfY291bnRlcihrdm1fdmNwdV9pZHhfdG9fcG1jKHZjcHUsIGkpKTtcbitcbitcdFx0cG11LVx1MDAzZWV2ZW50c19uZWVkX3JlY3JlYXRlID0gZmFsc2U7XG4rXHR9XG4gXG4gXHRfX3ZjcHVfcm13X3N5c19yZWcodmNwdSwgUE1PVlNTRVRfRUwwLCBcdTAwMjY9LCBtYXNrKTtcbiBcdF9fdmNwdV9ybXdfc3lzX3JlZyh2Y3B1LCBQTUlOVEVOU0VUX0VMMSwgXHUwMDI2PSwgbWFzayk7XG5AQCAtOTM5LDggKzEwMDMsOCBAQCBpbnQga3ZtX2FybV9wbXVfdjNfZW5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdC8qIE9ubHkgcG9zc2libGUgd2hlbiB1c2luZyBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NUUklDVCAqL1xuLVx0aWYgKCF2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmFybV9wbXUpXG4rXHQvKiBTdHJpY3QgUE1VdjMgcmVxdWlyZXMgYSBoYXJkd2FyZSBQTVUgb3IgZml4ZWQtY291bnRlcnMtb25seSBtb2RlLiAqL1xuK1x0aWYgKCF2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmFybV9wbXUgXHUwMDI2XHUwMDI2ICFrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdS1cdTAwM2Vrdm0pKVxuIFx0XHRyZXR1cm4gLUVOWElPO1xuIFxuIFx0aWYgKGlycWNoaXBfaW5fa2VybmVsKHZjcHUtXHUwMDNla3ZtKSkge1xuQEAgLTEwMTMsNiArMTA3Nyw5IEBAIHU4IGt2bV9hcm1fcG11X2dldF9tYXhfY291bnRlcnMoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbiBcdHN0cnVjdCBhcm1fcG11ICphcm1fcG11ID0ga3ZtLVx1MDAzZWFyY2guYXJtX3BtdTtcbiBcbitcdGlmIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHQvKlxuIFx0ICogVW5kZXIgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TVFJJQ1Qgbm8gUE1VIGV4aXN0cyB1bnRpbCB1c2Vyc3BhY2Ugc2V0c1xuIFx0ICogb25lLCBzbyB0aGlzIGNhbiBiZSByZWFjaGVkIGJlZm9yZSBhcm1fcG11IGlzIHNldC4gUmVwb3J0IG5vXG5AQCAtMTAzNSwzMCArMTEwMiwxMiBAQCB1OCBrdm1fYXJtX3BtdV9nZXRfbWF4X2NvdW50ZXJzKHN0cnVjdCBrdm0gKmt2bSlcbiBcdHJldHVybiBiaXRtYXBfd2VpZ2h0KGFybV9wbXUtXHUwMDNlY250cl9tYXNrLCBBUk1WOF9QTVVfTUFYX0dFTkVSQUxfQ09VTlRFUlMpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBrdm1fYXJtX3NldF9ucl9jb3VudGVycyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBucilcbi17XG4tXHRrdm0tXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnMgPSBucjtcbi1cbi1cdC8qIFJlc2V0IE1EQ1JfRUwyLkhQTU4gYmVoaW5kIHRoZSB2Y3B1cycgYmFjay4uLiAqL1xuLVx0aWYgKHRlc3RfYml0KEtWTV9BUk1fVkNQVV9IQVNfRUwyLCBrdm0tXHUwMDNlYXJjaC52Y3B1X2ZlYXR1cmVzKSkge1xuLVx0XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHRcdHVuc2lnbmVkIGxvbmcgaTtcbi1cbi1cdFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKSB7XG4tXHRcdFx0dTY0IHZhbCA9IF9fdmNwdV9zeXNfcmVnKHZjcHUsIE1EQ1JfRUwyKTtcbi1cdFx0XHR2YWwgXHUwMDI2PSB+TURDUl9FTDJfSFBNTjtcbi1cdFx0XHR2YWwgfD0gRklFTERfUFJFUChNRENSX0VMMl9IUE1OLCBrdm0tXHUwMDNlYXJjaC5ucl9wbXVfY291bnRlcnMpO1xuLVx0XHRcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCBNRENSX0VMMiwgdmFsKTtcbi1cdFx0fVxuLVx0fVxuLX1cbi1cbiBzdGF0aWMgdm9pZCBrdm1fYXJtX3NldF9wbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSlcbiB7XG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbiBcbiBcdGt2bS1cdTAwM2VhcmNoLmFybV9wbXUgPSBhcm1fcG11O1xuLVx0a3ZtX2FybV9zZXRfbnJfY291bnRlcnMoa3ZtLCBrdm1fYXJtX3BtdV9nZXRfbWF4X2NvdW50ZXJzKGt2bSkpO1xuK1x0a3ZtLVx1MDAzZWFyY2gubnJfcG11X2NvdW50ZXJzID0ga3ZtX2FybV9wbXVfZ2V0X21heF9jb3VudGVycyhrdm0pO1xuIH1cbiBcbiAvKipcbkBAIC0xMDc2LDcgKzExMjUsMjQgQEAgc3RhdGljIHZvaWQga3ZtX2FybV9zZXRfcG11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGFybV9wbXUgKmFybV9wbXUpXG4gICovXG4gaW50IGt2bV9hcm1fc2V0X2RlZmF1bHRfcG11KHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4tXHRzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IGt2bV9wbXVfcHJvYmVfYXJtcG11KCk7XG4rXHQvKlxuK1x0ICogSXQgaXMgc2FmZSB0byB1c2UgYSBzdGFsZSBjcHUgdG8gaXRlcmF0ZSB0aGUgbGlzdCBvZiBQTVVzIHNvIGxvbmcgYXNcbitcdCAqIHRoZSBzYW1lIHZhbHVlIGlzIHVzZWQgZm9yIHRoZSBlbnRpcmV0eSBvZiB0aGUgbG9vcC4gR2l2ZW4gdGhpcywgYW5kXG4rXHQgKiB0aGUgZmFjdCB0aGF0IG5vIHBlcmNwdSBkYXRhIGlzIHVzZWQgZm9yIHRoZSBsb29rdXAgdGhlcmUgaXMgbm8gbmVlZFxuK1x0ICogdG8gZGlzYWJsZSBwcmVlbXB0aW9uLlxuK1x0ICpcbitcdCAqIEl0IGlzIHN0aWxsIG5lY2Vzc2FyeSB0byBnZXQgYSB2YWxpZCBjcHUsIHRob3VnaCwgdG8gcHJvYmUgZm9yIHRoZVxuK1x0ICogZGVmYXVsdCBQTVUgaW5zdGFuY2UgYXMgdXNlcnNwYWNlIGlzIG5vdCByZXF1aXJlZCB0byBzcGVjaWZ5IGEgUE1VXG4rXHQgKiB0eXBlLiBJbiBvcmRlciB0byB1cGhvbGQgdGhlIHByZWV4aXN0aW5nIGJlaGF2aW9yIEtWTSBzZWxlY3RzIHRoZVxuK1x0ICogUE1VIGluc3RhbmNlIGZvciB0aGUgY29yZSBkdXJpbmcgdmNwdSBpbml0LiBBIGRlcGVuZGVudCB1c2VcbitcdCAqIGNhc2Ugd291bGQgYmUgYSB1c2VyIHdpdGggZGlzZGFpbiBvZiBhbGwgdGhpbmdzIGJpZy5MSVRUTEUgdGhhdFxuK1x0ICogYWZmaW5lcyB0aGUgVk1NIHRvIGEgcGFydGljdWxhciBjbHVzdGVyIG9mIGNvcmVzLlxuK1x0ICpcbitcdCAqIEluIGFueSBjYXNlLCB1c2Vyc3BhY2Ugc2hvdWxkIGp1c3QgZG8gdGhlIHNhbmUgdGhpbmcgYW5kIHVzZSB0aGUgVUFQSVxuK1x0ICogdG8gc2VsZWN0IGEgUE1VIHR5cGUgZGlyZWN0bHksIG9yIHJlcXVlc3QgZml4ZWQtY291bnRlcnMtb25seVxuK1x0ICogZW11bGF0aW9uLiBCdXQsIGJlIHdhcnkgb2YgdGhlIGJhZ2dhZ2UgYmVpbmcgY2FycmllZCBoZXJlLlxuK1x0ICovXG4rXHRzdHJ1Y3QgYXJtX3BtdSAqYXJtX3BtdSA9IGt2bV9wbXVfcHJvYmVfYXJtcG11KHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpO1xuIFxuIFx0aWYgKCFhcm1fcG11KVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbkBAIC0xMDkzLDE3ICsxMTU5LDE5IEBAIHN0YXRpYyBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwbXVfaWQpXG4gXHRpbnQgcmV0ID0gLUVOWElPO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4tXHRtdXRleF9sb2NrKFx1MDAyNmFybV9wbXVzX2xvY2spO1xuK1x0Z3VhcmQocmN1KSgpO1xuIFxuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXHUwMDI2YXJtX3BtdXMsIGVudHJ5KSB7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbnRyeSwgXHUwMDI2YXJtX3BtdXMsIGVudHJ5KSB7XG4gXHRcdGFybV9wbXUgPSBlbnRyeS1cdTAwM2Vhcm1fcG11O1xuIFx0XHRpZiAoYXJtX3BtdS1cdTAwM2VwbXUudHlwZSA9PSBwbXVfaWQpIHtcbiBcdFx0XHRpZiAoa3ZtX3ZtX2hhc19yYW5fb25jZShrdm0pIHx8XG4rXHRcdFx0ICAgIGt2bV9wbXVfZml4ZWRfY291bnRlcnNfb25seShrdm0pIHx8XG4gXHRcdFx0ICAgIChrdm0tXHUwMDNlYXJjaC5wbXVfZmlsdGVyIFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC5hcm1fcG11ICE9IGFybV9wbXUpKSB7XG4gXHRcdFx0XHRyZXQgPSAtRUJVU1k7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXG4rXHRcdFx0c2V0X2JpdChLVk1fQVJDSF9GTEFHX1BNVV9WM19FWFBMSUNJVCwgXHUwMDI2a3ZtLVx1MDAzZWFyY2guZmxhZ3MpO1xuIFx0XHRcdGt2bV9hcm1fc2V0X3BtdShrdm0sIGFybV9wbXUpO1xuIFx0XHRcdGNwdW1hc2tfY29weShrdm0tXHUwMDNlYXJjaC5zdXBwb3J0ZWRfY3B1cywgXHUwMDI2YXJtX3BtdS1cdTAwM2VzdXBwb3J0ZWRfY3B1cyk7XG4gXG5AQCAtMTEyMiwyMSArMTE5MCwzOSBAQCBzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcG11X2lkKVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRtdXRleF91bmxvY2soXHUwMDI2YXJtX3BtdXNfbG9jayk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbitzdGF0aWMgaW50IGt2bV9hcm1fcG11X3YzX3NldF9wbXVfZml4ZWRfY291bnRlcnNfb25seShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNvbmZpZ19sb2NrKTtcbitcbitcdGlmIChrdm1fdm1faGFzX3Jhbl9vbmNlKGt2bSkgfHwga3ZtLVx1MDAzZWFyY2gucG11X2ZpbHRlciB8fFxuK1x0ICAgIHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0VYUExJQ0lULCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5mbGFncykpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHRzZXRfYml0KEtWTV9BUkNIX0ZMQUdfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmZsYWdzKTtcbitcdGt2bS1cdTAwM2VhcmNoLm5yX3BtdV9jb3VudGVycyA9IDA7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBrdm1fYXJtX3BtdV92M19zZXRfbnJfY291bnRlcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgbilcbiB7XG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbiBcbitcdGlmIChrdm1fdm1faGFzX3Jhbl9vbmNlKGt2bSkpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4gXHRpZiAoIWt2bS1cdTAwM2VhcmNoLmFybV9wbXUpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKG4gXHUwMDNlIGt2bV9hcm1fcG11X2dldF9tYXhfY291bnRlcnMoa3ZtKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRrdm1fYXJtX3NldF9ucl9jb3VudGVycyhrdm0sIG4pO1xuK1x0a3ZtLVx1MDAzZWFyY2gubnJfcG11X2NvdW50ZXJzID0gbjtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0xMjAwLDcgKzEyODYsNyBAQCBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuIFx0XHQgICAgIGZpbHRlci5hY3Rpb24gIT0gS1ZNX1BNVV9FVkVOVF9ERU5ZKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdFx0aWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSlcbitcdFx0aWYgKGt2bV92bV9oYXNfcmFuX29uY2Uoa3ZtKSB8fCBrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkoa3ZtKSlcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuIFx0XHRpZiAoIWt2bS1cdTAwM2VhcmNoLmFybV9wbXUpXG5AQCAtMTI0OCw2ICsxMzM0LDggQEAgaW50IGt2bV9hcm1fcG11X3YzX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbiBcbiBcdFx0cmV0dXJuIGt2bV9hcm1fcG11X3YzX3NldF9ucl9jb3VudGVycyh2Y3B1LCBuKTtcbiBcdH1cbitcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOlxuK1x0XHRyZXR1cm4ga3ZtX2FybV9wbXVfdjNfc2V0X3BtdV9maXhlZF9jb3VudGVyc19vbmx5KHZjcHUpO1xuIFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQ6XG4gXHRcdHJldHVybiBrdm1fYXJtX3BtdV92M19pbml0KHZjcHUpO1xuIFx0fVxuQEAgLTEyNzQsNiArMTM2Miw5IEBAIGludCBrdm1fYXJtX3BtdV92M19nZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4gXHRcdGlycSA9IHZjcHUtXHUwMDNlYXJjaC5wbXUuaXJxX251bTtcbiBcdFx0cmV0dXJuIHB1dF91c2VyKGlycSwgdWFkZHIpO1xuIFx0fVxuK1x0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFk6XG4rXHRcdGlmIChrdm1fcG11X2ZpeGVkX2NvdW50ZXJzX29ubHkodmNwdS1cdTAwM2Vrdm0pKVxuK1x0XHRcdHJldHVybiAwO1xuIFx0fVxuIFxuIFx0cmV0dXJuIC1FTlhJTztcbkBAIC0xMjg3LDYgKzEzNzgsNyBAQCBpbnQga3ZtX2FybV9wbXVfdjNfaGFzX2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuIFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJTFRFUjpcbiBcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19TRVRfUE1VOlxuIFx0Y2FzZSBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9OUl9DT1VOVEVSUzpcbitcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZOlxuIFx0XHRpZiAoa3ZtX3ZjcHVfaGFzX3BtdSh2Y3B1KSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdH1cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9yZXNldC5jIGIvYXJjaC9hcm02NC9rdm0vcmVzZXQuY1xuaW5kZXggMTBlYjcyNDlhYTllOC4uY2RjZGVhODUwOTA5YyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3Jlc2V0LmNcbisrKyBiL2FyY2gvYXJtNjQva3ZtL3Jlc2V0LmNcbkBAIC0xNzgsMTcgKzE3OCwyNCBAQCBzdGF0aWMgdm9pZCBrdm1fdmNwdV9yZXNldF9zdmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHZvaWQga3ZtX3Jlc2V0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3Jlc2V0X3N0YXRlIHJlc2V0X3N0YXRlO1xuLVx0Ym9vbCBsb2FkZWQ7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnJ1bm5pbmc7XG4rXHRib29sIGxvYWRlZCA9IGZhbHNlO1xuIFxuIFx0c3Bpbl9sb2NrKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5tcF9zdGF0ZV9sb2NrKTtcbiBcdHJlc2V0X3N0YXRlID0gdmNwdS1cdTAwM2VhcmNoLnJlc2V0X3N0YXRlO1xuIFx0dmNwdS1cdTAwM2VhcmNoLnJlc2V0X3N0YXRlLnJlc2V0ID0gZmFsc2U7XG4gXHRzcGluX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gubXBfc3RhdGVfbG9jayk7XG4gXG4tXHRwcmVlbXB0X2Rpc2FibGUoKTtcbi1cdGxvYWRlZCA9ICh2Y3B1LVx1MDAzZWNwdSAhPSAtMSk7XG4tXHRpZiAobG9hZGVkKVxuK1x0Z3VhcmQocHJlZW1wdCkoKTtcbitcbitcdHJ1bm5pbmcgPSBrdm1fZ2V0X3J1bm5pbmdfdmNwdSgpO1xuK1x0aWYgKHJ1bm5pbmcpIHtcbitcdFx0aWYgKEtWTV9CVUdfT04ocnVubmluZyAhPSB2Y3B1LCB2Y3B1LVx1MDAzZWt2bSkpXG4rXHRcdFx0cmV0dXJuO1xuK1xuK1x0XHRsb2FkZWQgPSB0cnVlO1xuIFx0XHRrdm1fYXJjaF92Y3B1X3B1dCh2Y3B1KTtcbitcdH1cbiBcbiBcdGlmICgha3ZtX2FybV92Y3B1X3N2ZV9maW5hbGl6ZWQodmNwdSkpIHtcbiBcdFx0aWYgKHZjcHVfaGFzX2ZlYXR1cmUodmNwdSwgS1ZNX0FSTV9WQ1BVX1NWRSkpXG5AQCAtMjE1LDcgKzIyMiw2IEBAIHZvaWQga3ZtX3Jlc2V0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0aWYgKGxvYWRlZClcbiBcdFx0a3ZtX2FyY2hfdmNwdV9sb2FkKHZjcHUsIHNtcF9wcm9jZXNzb3JfaWQoKSk7XG4tXHRwcmVlbXB0X2VuYWJsZSgpO1xuIH1cbiBcbiB1MzIga3ZtX2dldF9wYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSlcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jIGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuY1xuaW5kZXggNDRhYWU1MmM0NzNkNy4uYTVjMTIxNDgyYzcxMyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmNcbisrKyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmNcbkBAIC0xMzI2LDcgKzEzMjYsNyBAQCBzdGF0aWMgYm9vbCBhY2Nlc3NfcG11X2V2dHlwZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsXG4gXG4gc3RhdGljIGludCBzZXRfcG1yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyLCB1NjQgdmFsKVxuIHtcbi1cdHU2NCBtYXNrID0ga3ZtX3BtdV9hY2Nlc3NpYmxlX2NvdW50ZXJfbWFzayh2Y3B1KTtcbitcdHU2NCBtYXNrID0ga3ZtX3BtdV9pbXBsZW1lbnRlZF9jb3VudGVyX21hc2sodmNwdSk7XG4gXG4gXHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgci1cdTAwM2VyZWcsIHZhbCBcdTAwMjYgbWFzayk7XG4gXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XG5AQCAtMTMzNCw5ICsxMzM0LDE4IEBAIHN0YXRpYyBpbnQgc2V0X3BtcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqciwgdTY0IHZhXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBzZXRfcG11X2V2dHlwZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuK1x0XHRcdCAgIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnIsIHU2NCB2YWwpXG4re1xuK1x0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIHItXHUwMDNlcmVnLCB2YWwpO1xuK1x0a3ZtX3BtdV9yZXF1ZXN0X3JlY3JlYXRlKHZjcHUpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgZ2V0X3BtcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqciwgdTY0ICp2YWwpXG4ge1xuLVx0dTY0IG1hc2sgPSBrdm1fcG11X2FjY2Vzc2libGVfY291bnRlcl9tYXNrKHZjcHUpO1xuK1x0dTY0IG1hc2sgPSBrdm1fcG11X2ltcGxlbWVudGVkX2NvdW50ZXJfbWFzayh2Y3B1KTtcbiBcbiBcdCp2YWwgPSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCByLVx1MDAzZXJlZykgXHUwMDI2IG1hc2s7XG4gXHRyZXR1cm4gMDtcbkBAIC0xNTE3LDYgKzE1MjYsNyBAQCBzdGF0aWMgaW50IHNldF9wbWNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcixcbiB7XG4gXHR1OCBuZXdfbiA9IEZJRUxEX0dFVChBUk1WOF9QTVVfUE1DUl9OLCB2YWwpO1xuIFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4rXHR1NjQgb2xkID0gX192Y3B1X3N5c19yZWcodmNwdSwgci1cdTAwM2VyZWcpO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC5jb25maWdfbG9jayk7XG4gXG5AQCAtMTU0OSw3ICsxNTU5LDcgQEAgc3RhdGljIGludCBzZXRfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnIsXG4gXHRcdHZhbCB8PSBBUk1WOF9QTVVfUE1DUl9MQztcbiBcbiBcdF9fdmNwdV9hc3NpZ25fc3lzX3JlZyh2Y3B1LCByLVx1MDAzZXJlZywgdmFsKTtcbi1cdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUxPQURfUE1VLCB2Y3B1KTtcbitcdGt2bV9wbXVfYXBwbHlfcG1jcih2Y3B1LCBvbGQsIHZhbCwgdHJ1ZSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMTU4Myw3ICsxNTkzLDcgQEAgc3RhdGljIGludCBzZXRfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnIsXG4gLyogTWFjcm8gdG8gZXhwYW5kIHRoZSBQTUVWVFlQRVJuX0VMMCByZWdpc3RlciAqL1xuICNkZWZpbmUgUE1VX1BNRVZUWVBFUl9FTDAobilcdFx0XHRcdFx0XHRcXFxuIFx0eyBQTVVfU1lTX1JFRyhQTUVWVFlQRVJuX0VMMChuKSksXHRcdFx0XHRcXFxuLVx0ICAucmVzZXQgPSByZXNldF9wbWV2dHlwZXIsXHRcdFx0XHRcdFxcXG4rXHQgIC5yZXNldCA9IHJlc2V0X3BtZXZ0eXBlciwgLnNldF91c2VyID0gc2V0X3BtdV9ldnR5cGVyLFx0XFxcbiBcdCAgLmFjY2VzcyA9IGFjY2Vzc19wbXVfZXZ0eXBlciwgLnJlZyA9IChQTUVWVFlQRVIwX0VMMCArIG4pLCB9XG4gXG4gLyogTWFjcm8gdG8gZXhwYW5kIHRoZSBBTVUgY291bnRlciBhbmQgdHlwZSByZWdpc3RlcnMqL1xuQEAgLTMxMTQsMTcgKzMxMjQsMjIgQEAgc3RhdGljIGJvb2wgYWNjZXNzX21kY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0fVxuIFxuIFx0X192Y3B1X2Fzc2lnbl9zeXNfcmVnKHZjcHUsIE1EQ1JfRUwyLCB2YWwpO1xuLVxuLVx0Lypcbi1cdCAqIFJlcXVlc3QgYSByZWxvYWQgb2YgdGhlIFBNVSB0byBlbmFibGUvZGlzYWJsZSB0aGUgY291bnRlcnNcbi1cdCAqIGFmZmVjdGVkIGJ5IEhQTUUuXG4tXHQgKi9cbi1cdGlmICgob2xkIF4gdmFsKSBcdTAwMjYgTURDUl9FTDJfSFBNRSlcbi1cdFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFTE9BRF9QTVUsIHZjcHUpO1xuK1x0a3ZtX3BtdV9hcHBseV9tZGNyKHZjcHUsIG9sZCwgdmFsKTtcbiBcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbitzdGF0aWMgaW50IHNldF9tZGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcmQsXG4rXHRcdCAgICB1NjQgdmFsKVxuK3tcbitcdHU2NCBvbGQgPSBfX3ZjcHVfc3lzX3JlZyh2Y3B1LCBNRENSX0VMMik7XG4rXG4rXHRfX3ZjcHVfYXNzaWduX3N5c19yZWcodmNwdSwgTURDUl9FTDIsIHZhbCk7XG4rXHRrdm1fcG11X2FwcGx5X21kY3IodmNwdSwgb2xkLCB2YWwpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBib29sIGFjY2Vzc19yYXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHQgICAgICAgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLFxuIFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcilcbkBAIC0zODI3LDcgKzM4NDIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyBzeXNfcmVnX2Rlc2NzW10gPSB7XG4gXHQgKiBpbiAzMmJpdCBtb2RlLiBIZXJlIHdlIGNob29zZSB0byByZXNldCBpdCBhcyB6ZXJvIGZvciBjb25zaXN0ZW5jeS5cbiBcdCAqL1xuIFx0eyBQTVVfU1lTX1JFRyhQTUNDRklMVFJfRUwwKSwgLmFjY2VzcyA9IGFjY2Vzc19wbXVfZXZ0eXBlcixcbi1cdCAgLnJlc2V0ID0gcmVzZXRfdmFsLCAucmVnID0gUE1DQ0ZJTFRSX0VMMCwgLnZhbCA9IDAgfSxcbitcdCAgLnJlc2V0ID0gcmVzZXRfdmFsLCAucmVnID0gUE1DQ0ZJTFRSX0VMMCwgLnZhbCA9IDAsXG4rXHQgIC5zZXRfdXNlciA9IHNldF9wbXVfZXZ0eXBlciB9LFxuIFxuIFx0RUwyX1JFR19WTkNSKFZQSURSX0VMMiwgcmVzZXRfdW5rbm93biwgMCksXG4gXHRFTDJfUkVHX1ZOQ1IoVk1QSURSX0VMMiwgcmVzZXRfdW5rbm93biwgMCksXG5AQCAtMzgzNiw3ICszODUyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2Mgc3lzX3JlZ19kZXNjc1tdID0ge1xuIFx0RUwyX1JFR19GSUxURVJFRChTQ1RMUjJfRUwyLCBhY2Nlc3Nfdm1fcmVnLCByZXNldF92YWwsIDAsXG4gXHRcdFx0IHNjdGxyMl9lbDJfdmlzaWJpbGl0eSksXG4gXHRFTDJfUkVHX1ZOQ1IoSENSX0VMMiwgcmVzZXRfaGNyLCAwKSxcbi1cdEVMMl9SRUcoTURDUl9FTDIsIGFjY2Vzc19tZGNyLCByZXNldF9tZGNyLCAwKSxcbitcdFNZU19SRUdfVVNFUl9GSUxURVIoTURDUl9FTDIsIGFjY2Vzc19tZGNyLCByZXNldF9tZGNyLCAwLFxuK1x0XHRcdCAgICBOVUxMLCBzZXRfbWRjciwgZWwyX3Zpc2liaWxpdHkpLFxuIFx0RUwyX1JFRyhDUFRSX0VMMiwgYWNjZXNzX3J3LCByZXNldF92YWwsIENQVFJfTlZIRV9FTDJfUkVTMSksXG4gXHRFTDJfUkVHX1ZOQ1IoSFNUUl9FTDIsIHJlc2V0X3ZhbCwgMCksXG4gXHRFTDJfUkVHX1ZOQ1JfRklMVChIRkdSVFJfRUwyLCBmZ3RfdmlzaWJpbGl0eSksXG5AQCAtNTM5MCw3ICs1NDA3LDcgQEAgdm9pZCBrdm1fcmVzZXRfc3lzX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0c2V0X2JpdChLVk1fQVJDSF9GTEFHX0lEX1JFR1NfSU5JVElBTElaRUQsIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmZsYWdzKTtcbiBcbiBcdGlmIChrdm1fdmNwdV9oYXNfcG11KHZjcHUpKVxuLVx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfUkVMT0FEX1BNVSwgdmNwdSk7XG4rXHRcdGt2bV9wbXVfcmVxdWVzdF9yZWNyZWF0ZSh2Y3B1KTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9rdm0vYXJtX3BtdS5oIGIvaW5jbHVkZS9rdm0vYXJtX3BtdS5oXG5pbmRleCA2YjRhMTE4ZDE3Y2E5Li4xN2I4NjFlZDE3MWQ2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9rdm0vYXJtX3BtdS5oXG4rKysgYi9pbmNsdWRlL2t2bS9hcm1fcG11LmhcbkBAIC0zMiw2ICszMiw3IEBAIHN0cnVjdCBrdm1fcG11IHtcbiBcdHN0cnVjdCBrdm1fcG1jIHBtY1tLVk1fQVJNVjhfUE1VX01BWF9DT1VOVEVSU107XG4gXHRpbnQgaXJxX251bTtcbiBcdGJvb2wgY3JlYXRlZDtcbitcdGJvb2wgZXZlbnRzX25lZWRfcmVjcmVhdGU7XG4gfTtcbiBcbiBzdHJ1Y3QgYXJtX3BtdV9lbnRyeSB7XG5AQCAtNTUsOSArNTYsMTMgQEAgdm9pZCBrdm1fcG11X3N5bmNfaHdzdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGJvb2wga3ZtX3BtdV9zaG91bGRfbm90aWZ5X3VzZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBib29sIGt2bV9wbXVfdXBkYXRlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQga3ZtX3BtdV9zb2Z0d2FyZV9pbmNyZW1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKTtcbit2b2lkIGt2bV9wbXVfcmVxdWVzdF9yZWNyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuK3ZvaWQga3ZtX3BtdV9hcHBseV9wbWNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9sZCwgdTY0IHZhbCwgYm9vbCBmb3JjZV9yZWxvYWQpO1xuIHZvaWQga3ZtX3BtdV9oYW5kbGVfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpO1xuK3ZvaWQga3ZtX3BtdV9hcHBseV9tZGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9sZCwgdTY0IHZhbCk7XG4gdm9pZCBrdm1fcG11X3NldF9jb3VudGVyX2V2ZW50X3R5cGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSxcbiBcdFx0XHRcdCAgICB1NjQgc2VsZWN0X2lkeCk7XG4rdm9pZCBrdm1fdmNwdV9sb2FkX3BtdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBsYXN0X2NwdSk7XG4gdm9pZCBrdm1fdmNwdV9yZWxvYWRfcG11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gaW50IGt2bV9hcm1fcG11X3YzX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0XHQgICAgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cik7XG5AQCAtMTM1LDcgKzE0MCwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3BtdV9zaG91bGRfbm90aWZ5X3VzZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIH1cbiBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3BtdV91cGRhdGVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkgeyByZXR1cm4gZmFsc2U7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3BtdV9zb2Z0d2FyZV9pbmNyZW1lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKSB7fVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X3JlcXVlc3RfcmVjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcG11X2FwcGx5X3BtY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgb2xkLCB1NjQgdmFsLCBib29sIGZvcmNlX3JlbG9hZCkge31cbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3BtdV9oYW5kbGVfcG1jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwpIHt9XG4rc3RhdGljIGlubGluZSB2b2lkIGt2bV9wbXVfYXBwbHlfbWRjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBvbGQsIHU2NCB2YWwpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV9wbXVfc2V0X2NvdW50ZXJfZXZlbnRfdHlwZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0XHRcdFx0ICB1NjQgZGF0YSwgdTY0IHNlbGVjdF9pZHgpIHt9XG4gc3RhdGljIGlubGluZSBpbnQga3ZtX2FybV9wbXVfdjNfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuQEAgLTE2Nyw2ICsxNzUsNyBAQCBzdGF0aWMgaW5saW5lIHU2NCBrdm1fcG11X2dldF9wbWNlaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHBtY2VpZDEpXG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV9wbXVfdXBkYXRlX3ZjcHVfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge31cbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfcG11X3Jlc3RvcmVfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdmNwdV9wbXVfcmVzdG9yZV9ob3N0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkge31cbitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbGFzdF9jcHUpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X3JlbG9hZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7fVxuIHN0YXRpYyBpbmxpbmUgdTgga3ZtX2FybV9wbXVfZ2V0X3BtdXZlcl9saW1pdCh2b2lkKVxuIHtcbmRpZmYgLS1naXQgYS90b29scy9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmggYi90b29scy9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbmluZGV4IDFjMTNiZmEyZDM4YWEuLjM5YTFhMWU0MTJlNjYgMTAwNjQ0XG4tLS0gYS90b29scy9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbisrKyBiL3Rvb2xzL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuQEAgLTQzNyw2ICs0MzcsNyBAQCBlbnVtIHtcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSUxURVJcdFx0MlxuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9QTVVcdFx0M1xuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9OUl9DT1VOVEVSU1x0NFxuKyNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFlcdDVcbiAjZGVmaW5lIEtWTV9BUk1fVkNQVV9USU1FUl9DVFJMXHRcdDFcbiAjZGVmaW5lICAgS1ZNX0FSTV9WQ1BVX1RJTUVSX0lSUV9WVElNRVJcdFx0MFxuICNkZWZpbmUgICBLVk1fQVJNX1ZDUFVfVElNRVJfSVJRX1BUSU1FUlx0XHQxXG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS9saW51eC9iaXRmaWVsZC5oIGIvdG9vbHMvaW5jbHVkZS9saW51eC9iaXRmaWVsZC5oXG5pbmRleCBkZGY4MWYyNDk1NmJhLi4xYzYzMzM0M2Q1NzY2IDEwMDY0NFxuLS0tIGEvdG9vbHMvaW5jbHVkZS9saW51eC9iaXRmaWVsZC5oXG4rKysgYi90b29scy9pbmNsdWRlL2xpbnV4L2JpdGZpZWxkLmhcbkBAIC0xNDIsMzIgKzE0MiwzMiBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHU2NCBmaWVsZF9tYXNrKHU2NCBmaWVsZClcbiBcdHJldHVybiBmaWVsZCAvIGZpZWxkX211bHRpcGxpZXIoZmllbGQpO1xuIH1cbiAjZGVmaW5lIGZpZWxkX21heChmaWVsZClcdCgodHlwZW9mKGZpZWxkKSlmaWVsZF9tYXNrKGZpZWxkKSlcbi0jZGVmaW5lIF9fX19NQUtFX09QKHR5cGUsYmFzZSx0byxmcm9tKVx0XHRcdFx0XHRcXFxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX18jI3R5cGUgdHlwZSMjX2VuY29kZV9iaXRzKGJhc2UgdiwgYmFzZSBmaWVsZClcdFxcXG4rI2RlZmluZSBfX19fTUFLRV9PUChuYW1lLHR5cGUsYmFzZSx0byxmcm9tKVx0XHRcdFx0XFxcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHR5cGUgbmFtZSMjX2VuY29kZV9iaXRzKGJhc2UgdiwgYmFzZSBmaWVsZClcdFxcXG4ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRpZiAoX19idWlsdGluX2NvbnN0YW50X3AodikgXHUwMDI2XHUwMDI2ICh2IFx1MDAyNiB+ZmllbGRfbWFzayhmaWVsZCkpKVx0XFxcbiBcdFx0X19maWVsZF9vdmVyZmxvdygpO1x0XHRcdFx0XHRcXFxuIFx0cmV0dXJuIHRvKCh2IFx1MDAyNiBmaWVsZF9tYXNrKGZpZWxkKSkgKiBmaWVsZF9tdWx0aXBsaWVyKGZpZWxkKSk7XHRcXFxuIH1cdFx0XHRcdFx0XHRcdFx0XHRcXFxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX18jI3R5cGUgdHlwZSMjX3JlcGxhY2VfYml0cyhfXyMjdHlwZSBvbGQsXHRcXFxuLVx0XHRcdFx0XHRiYXNlIHZhbCwgYmFzZSBmaWVsZClcdFx0XFxcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHR5cGUgbmFtZSMjX3JlcGxhY2VfYml0cyh0eXBlIG9sZCxcdFx0XFxcbitcdFx0XHRcdFx0XHRiYXNlIHZhbCwgYmFzZSBmaWVsZClcdFxcXG4ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4tXHRyZXR1cm4gKG9sZCBcdTAwMjYgfnRvKGZpZWxkKSkgfCB0eXBlIyNfZW5jb2RlX2JpdHModmFsLCBmaWVsZCk7XHRcXFxuK1x0cmV0dXJuIChvbGQgXHUwMDI2IH50byhmaWVsZCkpIHwgbmFtZSMjX2VuY29kZV9iaXRzKHZhbCwgZmllbGQpO1x0XFxcbiB9XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdHlwZSMjcF9yZXBsYWNlX2JpdHMoX18jI3R5cGUgKnAsXHRcdFxcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG5hbWUjI3BfcmVwbGFjZV9iaXRzKHR5cGUgKnAsXHRcdFxcXG4gXHRcdFx0XHRcdGJhc2UgdmFsLCBiYXNlIGZpZWxkKVx0XHRcXFxuIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLVx0KnAgPSAoKnAgXHUwMDI2IH50byhmaWVsZCkpIHwgdHlwZSMjX2VuY29kZV9iaXRzKHZhbCwgZmllbGQpO1x0XFxcbitcdCpwID0gKCpwIFx1MDAyNiB+dG8oZmllbGQpKSB8IG5hbWUjI19lbmNvZGVfYml0cyh2YWwsIGZpZWxkKTtcdFxcXG4gfVx0XHRcdFx0XHRcdFx0XHRcdFxcXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSBiYXNlIHR5cGUjI19nZXRfYml0cyhfXyMjdHlwZSB2LCBiYXNlIGZpZWxkKVx0XFxcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJhc2UgbmFtZSMjX2dldF9iaXRzKHR5cGUgdiwgYmFzZSBmaWVsZClcdFxcXG4ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRyZXR1cm4gKGZyb20odikgXHUwMDI2IGZpZWxkKS9maWVsZF9tdWx0aXBsaWVyKGZpZWxkKTtcdFx0XFxcbiB9XG4tI2RlZmluZSBfX01BS0VfT1Aoc2l6ZSlcdFx0XHRcdFx0XHRcdFxcXG4tXHRfX19fTUFLRV9PUChsZSMjc2l6ZSx1IyNzaXplLGNwdV90b19sZSMjc2l6ZSxsZSMjc2l6ZSMjX3RvX2NwdSlcdFxcXG4tXHRfX19fTUFLRV9PUChiZSMjc2l6ZSx1IyNzaXplLGNwdV90b19iZSMjc2l6ZSxiZSMjc2l6ZSMjX3RvX2NwdSlcdFxcXG4tXHRfX19fTUFLRV9PUCh1IyNzaXplLHUjI3NpemUsLClcbi1fX19fTUFLRV9PUCh1OCx1OCwsKVxuKyNkZWZpbmUgX19NQUtFX09QKHNpemUpXHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdF9fX19NQUtFX09QKGxlIyNzaXplLF9fbGUjI3NpemUsdSMjc2l6ZSxjcHVfdG9fbGUjI3NpemUsbGUjI3NpemUjI190b19jcHUpXHRcXFxuK1x0X19fX01BS0VfT1AoYmUjI3NpemUsX19iZSMjc2l6ZSx1IyNzaXplLGNwdV90b19iZSMjc2l6ZSxiZSMjc2l6ZSMjX3RvX2NwdSlcdFxcXG4rXHRfX19fTUFLRV9PUCh1IyNzaXplLHUjI3NpemUsdSMjc2l6ZSwsKVxuK19fX19NQUtFX09QKHU4LHU4LHU4LCwpXG4gX19NQUtFX09QKDE2KVxuIF9fTUFLRV9PUCgzMilcbiBfX01BS0VfT1AoNjQpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZwbXVfY291bnRlcl9hY2Nlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92cG11X2NvdW50ZXJfYWNjZXNzLmNcbmluZGV4IDIyMjIzMzk1OTY5ZTAuLjYzNzY1M2Y3YTI1YjkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdnBtdV9jb3VudGVyX2FjY2Vzcy5jXG5AQCAtMjUsNiArMjUsMTQgQEBcbiAvKiBUaGUgY3ljbGUgY291bnRlciBiaXQgcG9zaXRpb24gdGhhdCdzIGNvbW1vbiBhbW9uZyB0aGUgUE1VIHJlZ2lzdGVycyAqL1xuICNkZWZpbmUgQVJNVjhfUE1VX0NZQ0xFX0lEWFx0XHQzMVxuIFxuKyNpZm5kZWYgTURDUl9FTDJfSFBNTlxuKyNkZWZpbmUgTURDUl9FTDJfSFBNTlx0XHRcdEdFTk1BU0tfVUxMKDQsIDApXG4rI2VuZGlmXG4rXG4rI2lmbmRlZiBNRENSX0VMMl9IUE1FXG4rI2RlZmluZSBNRENSX0VMMl9IUE1FXHRcdFx0QklUX1VMTCg3KVxuKyNlbmRpZlxuK1xuIHN0cnVjdCB2cG11X3ZtIHtcbiBcdHN0cnVjdCBrdm1fdm0gKnZtO1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuQEAgLTQwMywxMiArNDExLDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlX3ZwbXVfdm0odm9pZCAqZ3Vlc3RfY29kZSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCBpbml0O1xuIFx0dTggcG11dmVyLCBlYztcbi1cdHU2NCBkZnIwLCBpcnEgPSAyMztcbi1cdHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgaXJxX2F0dHIgPSB7XG4tXHRcdC5ncm91cCA9IEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbi1cdFx0LmF0dHIgPSBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSxcbi1cdFx0LmFkZHIgPSAodTY0KVx1MDAyNmlycSxcbi1cdH07XG4rXHR1NjQgZGZyMDtcbiBcbiBcdC8qIFRoZSB0ZXN0IGNyZWF0ZXMgdGhlIHZwbXVfdm0gbXVsdGlwbGUgdGltZXMuIEVuc3VyZSBhIGNsZWFuIHN0YXRlICovXG4gXHRtZW1zZXQoXHUwMDI2dnBtdV92bSwgMCwgc2l6ZW9mKHZwbXVfdm0pKTtcbkBAIC00MzQsOCArNDM3LDYgQEAgc3RhdGljIHZvaWQgY3JlYXRlX3ZwbXVfdm0odm9pZCAqZ3Vlc3RfY29kZSlcbiBcdFRFU1RfQVNTRVJUKHBtdXZlciAhPSBJRF9BQTY0REZSMF9FTDFfUE1VVmVyX0lNUF9ERUYgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBwbXV2ZXIgXHUwMDNlPSBJRF9BQTY0REZSMF9FTDFfUE1VVmVyX0lNUCxcbiBcdFx0ICAgIFwiVW5leHBlY3RlZCBQTVVWRVIgKDB4JXgpIG9uIHRoZSB2Q1BVIHdpdGggUE1VdjNcIiwgcG11dmVyKTtcbi1cbi1cdHZjcHVfaW9jdGwodnBtdV92bS52Y3B1LCBLVk1fU0VUX0RFVklDRV9BVFRSLCBcdTAwMjZpcnFfYXR0cik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGRlc3Ryb3lfdnBtdV92bSh2b2lkKVxuQEAgLTQ0MywxMSArNDQ0LDEwIEBAIHN0YXRpYyB2b2lkIGRlc3Ryb3lfdnBtdV92bSh2b2lkKVxuIFx0a3ZtX3ZtX2ZyZWUodnBtdV92bS52bSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJ1bl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBtY3JfbilcbitzdGF0aWMgdm9pZCBydW5fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHVjYWxsIHVjO1xuIFxuLVx0dmNwdV9hcmdzX3NldCh2Y3B1LCAxLCBwbWNyX24pO1xuIFx0dmNwdV9ydW4odmNwdSk7XG4gXHRzd2l0Y2ggKGdldF91Y2FsbCh2Y3B1LCBcdTAwMjZ1YykpIHtcbiBcdGNhc2UgVUNBTExfQUJPUlQ6XG5AQCAtNDYxLDE1ICs0NjEsMTcgQEAgc3RhdGljIHZvaWQgcnVuX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcG1jcl9uKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCB0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnModW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sIGV4cGVjdF9mYWlsKVxuK3N0YXRpYyB2b2lkIGd1ZXN0X2NvZGVfZG9uZSh2b2lkKVxuK3tcbitcdEdVRVNUX0RPTkUoKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgc2V0X25yX2NvdW50ZXJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbitcdFx0XHQgICAgdW5zaWduZWQgaW50IG5yX2NvdW50ZXJzLCBib29sIGV4cGVjdF9mYWlsKVxuIHtcbi1cdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiBcdHVuc2lnbmVkIGludCBwcmV2O1xuIFx0aW50IHJldDtcbiBcbi1cdGNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpO1xuLVx0dmNwdSA9IHZwbXVfdm0udmNwdTtcbi1cbiBcdHByZXYgPSBnZXRfcG1jcl9uKHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfUE1DUl9FTDApKSk7XG4gXG4gXHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbkBAIC00ODEsNiArNDgzLDI2IEBAIHN0YXRpYyB2b2lkIHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyh1bnNpZ25lZCBpbnQgbnJfY291bnRlcnMsIGJvb2xcbiBcdFx0XHQgICAgbnJfY291bnRlcnMsIHByZXYpO1xuIFx0ZWxzZVxuIFx0XHRURVNUX0FTU0VSVCghcmV0LCBLVk1fSU9DVExfRVJST1IoS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyh1bnNpZ25lZCBpbnQgbnJfY291bnRlcnMsXG4rXHRcdFx0XHRcdFx0IGJvb2wgZml4ZWRfY291bnRlcnNfb25seSxcbitcdFx0XHRcdFx0XHQgYm9vbCBleHBlY3RfZmFpbClcbit7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4rXHR1NjQgaXJxID0gMjM7XG4rXG4rXHRjcmVhdGVfdnBtdV92bShndWVzdF9jb2RlKTtcbitcdHZjcHUgPSB2cG11X3ZtLnZjcHU7XG4rXG4rXHRpZiAoZml4ZWRfY291bnRlcnNfb25seSlcbitcdFx0dmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuK1xuK1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JUlEsIFx1MDAyNmlycSk7XG4rXG4rXHRzZXRfbnJfY291bnRlcnModmNwdSwgbnJfY291bnRlcnMsIGV4cGVjdF9mYWlsKTtcbiBcbiBcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTtcbiB9XG5AQCAtNDg5LDIxICs1MTEsMjIgQEAgc3RhdGljIHZvaWQgdGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHVuc2lnbmVkIGludCBucl9jb3VudGVycywgYm9vbFxuICAqIENyZWF0ZSBhIGd1ZXN0IHdpdGggb25lIHZDUFUsIHNldCB0aGUgUE1DUl9FTDAuTiBmb3IgdGhlIHZDUFUgdG8gQHBtY3JfbixcbiAgKiBhbmQgcnVuIHRoZSB0ZXN0LlxuICAqL1xuLXN0YXRpYyB2b2lkIHJ1bl9hY2Nlc3NfdGVzdCh1NjQgcG1jcl9uKVxuK3N0YXRpYyB2b2lkIHJ1bl9hY2Nlc3NfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXG4ge1xuIFx0dTY0IHNwO1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuIFx0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcbiBcbi1cdHByX2RlYnVnKFwiVGVzdCB3aXRoIHBtY3JfbiAlbHVcXG5cIiwgcG1jcl9uKTtcbitcdHByX2RlYnVnKFwiVGVzdCB3aXRoIHBtY3JfbiAlbHUsIGZpeGVkX2NvdW50ZXJzX29ubHkgJWRcXG5cIiwgcG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcbiBcbi1cdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZhbHNlKTtcbitcdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHksIGZhbHNlKTtcbiBcdHZjcHUgPSB2cG11X3ZtLnZjcHU7XG4gXG4gXHQvKiBTYXZlIHRoZSBpbml0aWFsIHNwIHRvIHJlc3RvcmUgdGhlbSBsYXRlciB0byBydW4gdGhlIGd1ZXN0IGFnYWluICovXG4gXHRzcCA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBjdHh0X3JlZ19hbGlhcyh2Y3B1LCBTWVNfU1BfRUwxKSk7XG4gXG4tXHRydW5fdmNwdSh2Y3B1LCBwbWNyX24pO1xuK1x0dmNwdV9hcmdzX3NldCh2Y3B1LCAxLCBwbWNyX24pO1xuK1x0cnVuX3ZjcHUodmNwdSk7XG4gXG4gXHQvKlxuIFx0ICogUmVzZXQgYW5kIHJlLWluaXRpYWxpemUgdGhlIHZDUFUsIGFuZCBydW4gdGhlIGd1ZXN0IGNvZGUgYWdhaW4gdG9cbkBAIC01MTYsNyArNTM5LDggQEAgc3RhdGljIHZvaWQgcnVuX2FjY2Vzc190ZXN0KHU2NCBwbWNyX24pXG4gXHR2Y3B1X3NldF9yZWcodmNwdSwgY3R4dF9yZWdfYWxpYXModmNwdSwgU1lTX1NQX0VMMSksIHNwKTtcbiBcdHZjcHVfc2V0X3JlZyh2Y3B1LCBBUk02NF9DT1JFX1JFRyhyZWdzLnBjKSwgKHU2NClndWVzdF9jb2RlKTtcbiBcbi1cdHJ1bl92Y3B1KHZjcHUsIHBtY3Jfbik7XG4rXHR2Y3B1X2FyZ3Nfc2V0KHZjcHUsIDEsIHBtY3Jfbik7XG4rXHRydW5fdmNwdSh2Y3B1KTtcbiBcbiBcdGRlc3Ryb3lfdnBtdV92bSgpO1xuIH1cbkBAIC01MzEsMTQgKzU1NSwxNCBAQCBzdGF0aWMgc3RydWN0IHBtcmVnX3NldHMgdmFsaWRpdHlfY2hlY2tfcmVnX3NldHNbXSA9IHtcbiAgKiBDcmVhdGUgYSBWTSwgYW5kIGNoZWNrIGlmIEtWTSBoYW5kbGVzIHRoZSB1c2Vyc3BhY2UgYWNjZXNzZXMgb2ZcbiAgKiB0aGUgUE1VIHJlZ2lzdGVyIHNldHMgaW4gQHZhbGlkaXR5X2NoZWNrX3JlZ19zZXRzW10gY29ycmVjdGx5LlxuICAqL1xuLXN0YXRpYyB2b2lkIHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uKVxuK3N0YXRpYyB2b2lkIHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXG4ge1xuIFx0aW50IGk7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4gXHR1NjQgc2V0X3JlZ19pZCwgY2xyX3JlZ19pZCwgcmVnX3ZhbDtcbiBcdHU2NCB2YWxpZF9jb3VudGVyc19tYXNrLCBtYXhfY291bnRlcnNfbWFzaztcbiBcbi1cdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZhbHNlKTtcbitcdHRlc3RfY3JlYXRlX3ZwbXVfdm1fd2l0aF9ucl9jb3VudGVycyhwbWNyX24sIGZpeGVkX2NvdW50ZXJzX29ubHksIGZhbHNlKTtcbiBcdHZjcHUgPSB2cG11X3ZtLnZjcHU7XG4gXG4gXHR2YWxpZF9jb3VudGVyc19tYXNrID0gZ2V0X2NvdW50ZXJzX21hc2socG1jcl9uKTtcbkBAIC01ODMsMTYgKzYwNyw5NCBAQCBzdGF0aWMgdm9pZCBydW5fcG1yZWdzX3ZhbGlkaXR5X3Rlc3QodTY0IHBtY3JfbilcbiBcdGRlc3Ryb3lfdnBtdV92bSgpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBydW5fbWRjcl9lbDJfdmFsaWRpdHlfdGVzdCh1NjQgcG1jcl9uLCBib29sIGZpeGVkX2NvdW50ZXJzX29ubHkpXG4re1xuK1x0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcbitcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbitcdHU2NCBleHBlY3RlZF9tZGNyLCBtZGNyO1xuK1x0dTY0IGlycSA9IDIzO1xuK1xuK1x0cHJfZGVidWcoXCJNRENSX0VMMiB0ZXN0IHdpdGggcG1jcl9uICVsdSwgZml4ZWRfY291bnRlcnNfb25seSAlZFxcblwiLFxuK1x0XHQgcG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcbitcbitcdGNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpO1xuK1x0aWYgKCF2bV9zdXBwb3J0c19lbDIodnBtdV92bS52bSkpIHtcbitcdFx0ZGVzdHJveV92cG11X3ZtKCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHZjcHUgPSB2cG11X3ZtLnZjcHU7XG4rXG4rXHRtZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpO1xuK1x0ZXhwZWN0ZWRfbWRjciA9IHU2NF9yZXBsYWNlX2JpdHMobWRjciwgRklFTERfTUFYKE1EQ1JfRUwyX0hQTU4pLFxuK1x0XHRcdFx0XHQgTURDUl9FTDJfSFBNTik7XG4rXHR2Y3B1X3NldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSxcbitcdFx0ICAgICBleHBlY3RlZF9tZGNyKTtcbitcbitcdG1kY3IgPSB2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSk7XG4rXHRURVNUX0FTU0VSVChtZGNyID09IGV4cGVjdGVkX21kY3IsXG4rXHRcdCAgICBcIk1EQ1JfRUwyIHdhcyBub3QgcHJvcGVybHkgdXBkYXRlZCBhZnRlciBIUE1OIHdyaXRlIChleHBlY3RlZCAweCVseCwgZ290IDB4JWx4KVwiLFxuK1x0XHQgICAgZXhwZWN0ZWRfbWRjciwgbWRjcik7XG4rXG4rXHRpZiAoZml4ZWRfY291bnRlcnNfb25seSkge1xuK1x0XHR2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XG4rXG4rXHRcdG1kY3IgPSB2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSk7XG4rXHRcdFRFU1RfQVNTRVJUKG1kY3IgPT0gZXhwZWN0ZWRfbWRjcixcbitcdFx0XHQgICAgXCJNRENSX0VMMiBjaGFuZ2VkIGFmdGVyIFBNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZIChleHBlY3RlZCAweCVseCwgZ290IDB4JWx4KVwiLFxuK1x0XHRcdCAgICBleHBlY3RlZF9tZGNyLCBtZGNyKTtcbitcdH1cbitcbitcdHNldF9ucl9jb3VudGVycyh2Y3B1LCBwbWNyX24sIGZhbHNlKTtcbitcbitcdG1kY3IgPSB2Y3B1X2dldF9yZWcodmNwdSwgS1ZNX0FSTTY0X1NZU19SRUcoU1lTX01EQ1JfRUwyKSk7XG4rXHRURVNUX0FTU0VSVChtZGNyID09IGV4cGVjdGVkX21kY3IsXG4rXHRcdCAgICBcIk1EQ1JfRUwyIGNoYW5nZWQgYWZ0ZXIgUE1VX1YzX1NFVF9OUl9DT1VOVEVSUyAoZXhwZWN0ZWQgMHglbHgsIGdvdCAweCVseClcIixcbitcdFx0ICAgIGV4cGVjdGVkX21kY3IsIG1kY3IpO1xuK1xuK1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JUlEsIFx1MDAyNmlycSk7XG4rXG4rXHR2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQsIE5VTEwpO1xuK1xuK1x0bWRjciA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCBLVk1fQVJNNjRfU1lTX1JFRyhTWVNfTURDUl9FTDIpKTtcbitcdFRFU1RfQVNTRVJUKG1kY3IgPT0gZXhwZWN0ZWRfbWRjcixcbitcdFx0ICAgIFwiTURDUl9FTDIgY2hhbmdlZCBhZnRlciBQTVVfVjNfSU5JVCAoZXhwZWN0ZWQgMHglbHgsIGdvdCAweCVseClcIixcbitcdFx0ICAgIGV4cGVjdGVkX21kY3IsIG1kY3IpO1xuK1xuK1x0ZXhwZWN0ZWRfbWRjciA9IG1kY3IgXiBNRENSX0VMMl9IUE1FO1xuK1x0dmNwdV9zZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMiksXG4rXHRcdCAgICAgZXhwZWN0ZWRfbWRjcik7XG4rXG4rXHRtZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpO1xuK1x0VEVTVF9BU1NFUlQobWRjciA9PSBleHBlY3RlZF9tZGNyLFxuK1x0XHQgICAgXCJNRENSX0VMMiB3YXMgbm90IHByb3Blcmx5IHVwZGF0ZWQgYWZ0ZXIgSFBNRSB3cml0ZSAoZXhwZWN0ZWQgMHglbHgsIGdvdCAweCVseClcIixcbitcdFx0ICAgIGV4cGVjdGVkX21kY3IsIG1kY3IpO1xuK1xuK1x0a3ZtX2dldF9kZWZhdWx0X3ZjcHVfdGFyZ2V0KHZwbXVfdm0udm0sIFx1MDAyNmluaXQpO1xuK1x0aW5pdC5mZWF0dXJlc1swXSB8PSAoMSBcdTAwM2NcdTAwM2MgS1ZNX0FSTV9WQ1BVX1BNVV9WMyk7XG4rXHRhYXJjaDY0X3ZjcHVfc2V0dXAodmNwdSwgXHUwMDI2aW5pdCk7XG4rXG4rXHRtZGNyID0gdmNwdV9nZXRfcmVnKHZjcHUsIEtWTV9BUk02NF9TWVNfUkVHKFNZU19NRENSX0VMMikpO1xuK1x0VEVTVF9BU1NFUlQoRklFTERfR0VUKE1EQ1JfRUwyX0hQTU4sIG1kY3IpID09IHBtY3JfbixcbitcdFx0ICAgIFwiTURDUl9FTDIuSFBNTiBpcyBub3QgcmVzZXQgYWZ0ZXIgSU5JVCAoZXhwZWN0ZWQgJWx1LCBnb3QgJWx1KVwiLFxuK1x0XHQgICAgcG1jcl9uLCBGSUVMRF9HRVQoTURDUl9FTDJfSFBNTiwgbWRjcikpO1xuK1xuK1x0ZGVzdHJveV92cG11X3ZtKCk7XG4rfVxuK1xuIC8qXG4gICogQ3JlYXRlIGEgZ3Vlc3Qgd2l0aCBvbmUgdkNQVSwgYW5kIGF0dGVtcHQgdG8gc2V0IHRoZSBQTUNSX0VMMC5OIGZvclxuICAqIHRoZSB2Q1BVIHRvIEBwbWNyX24sIHdoaWNoIGlzIGxhcmdlciB0aGFuIHRoZSBob3N0IHZhbHVlLlxuICAqIFRoZSBhdHRlbXB0IHNob3VsZCBmYWlsIGFzIEBwbWNyX24gaXMgdG9vIGJpZyB0byBzZXQgZm9yIHRoZSB2Q1BVLlxuICAqL1xuLXN0YXRpYyB2b2lkIHJ1bl9lcnJvcl90ZXN0KHU2NCBwbWNyX24pXG4rc3RhdGljIHZvaWQgcnVuX2Vycm9yX3Rlc3QodTY0IHBtY3JfbiwgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5KVxuIHtcbiBcdHByX2RlYnVnKFwiRXJyb3IgdGVzdCB3aXRoIHBtY3JfbiAlbHUgKGxhcmdlciB0aGFuIHRoZSBob3N0KVxcblwiLCBwbWNyX24pO1xuIFxuLVx0dGVzdF9jcmVhdGVfdnBtdV92bV93aXRoX25yX2NvdW50ZXJzKHBtY3JfbiwgdHJ1ZSk7XG4rXHR0ZXN0X2NyZWF0ZV92cG11X3ZtX3dpdGhfbnJfY291bnRlcnMocG1jcl9uLCBmaXhlZF9jb3VudGVyc19vbmx5LCB0cnVlKTtcbiBcdGRlc3Ryb3lfdnBtdV92bSgpO1xuIH1cbiBcbkBAIC02MjIsMjIgKzcyNCwxODMgQEAgc3RhdGljIGJvb2wga3ZtX3N1cHBvcnRzX25yX2NvdW50ZXJzX2F0dHIodm9pZClcbiBcdHJldHVybiBzdXBwb3J0ZWQ7XG4gfVxuIFxuLWludCBtYWluKHZvaWQpXG4rc3RhdGljIHZvaWQgdGVzdF9zZXRfbnJfY291bnRlcnNfYWZ0ZXJfdmNwdV9ydW4odm9pZClcbiB7XG4tXHR1NjQgaSwgcG1jcl9uO1xuK1x0c3RydWN0IGt2bV92Y3B1ICpydW5uaW5nX3ZjcHUsICpzdG9wcGVkX3ZjcHU7XG4rXHR1bnNpZ25lZCBpbnQgbnJfY291bnRlcnMgPSAwO1xuK1x0c3RydWN0IGt2bV92Y3B1X2luaXQgaW5pdDtcbitcdHN0cnVjdCBrdm1fdm0gKnZtO1xuK1x0aW50IHJldDtcbitcdHU2NCBpcnEgPSAyMztcbitcbitcdHZtID0gdm1fY3JlYXRlKDIpO1xuK1x0dm1faW9jdGwodm0sIEtWTV9BUk1fUFJFRkVSUkVEX1RBUkdFVCwgXHUwMDI2aW5pdCk7XG4rXHRpbml0LmZlYXR1cmVzWzBdIHw9IEJJVChLVk1fQVJNX1ZDUFVfUE1VX1YzKTtcbitcdHJ1bm5pbmdfdmNwdSA9IGFhcmNoNjRfdmNwdV9hZGQodm0sIDAsIFx1MDAyNmluaXQsIGd1ZXN0X2NvZGVfZG9uZSk7XG4rXHRzdG9wcGVkX3ZjcHUgPSBhYXJjaDY0X3ZjcHVfYWRkKHZtLCAxLCBcdTAwMjZpbml0LCBndWVzdF9jb2RlX2RvbmUpO1xuK1x0a3ZtX2FyY2hfdm1fZmluYWxpemVfdmNwdXModm0pO1xuK1xuK1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQocnVubmluZ192Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lSUSwgXHUwMDI2aXJxKTtcbitcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHJ1bm5pbmdfdmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTtcbitcdHJ1bl92Y3B1KHJ1bm5pbmdfdmNwdSk7XG4rXG4rXHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHN0b3BwZWRfdmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX1NFVF9OUl9DT1VOVEVSUyxcbitcdFx0XHRcdCAgICAgXHUwMDI2bnJfY291bnRlcnMpO1xuK1x0VEVTVF9BU1NFUlQocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFQlVTWSxcbitcdFx0ICAgIEtWTV9JT0NUTF9FUlJPUihLVk1fU0VUX0RFVklDRV9BVFRSLCByZXQpKTtcbitcbitcdGt2bV92bV9mcmVlKHZtKTtcbit9XG4gXG4tXHRURVNUX1JFUVVJUkUoa3ZtX2hhc19jYXAoS1ZNX0NBUF9BUk1fUE1VX1YzKSk7XG4tXHRURVNUX1JFUVVJUkUoa3ZtX3N1cHBvcnRzX3ZnaWNfdjMoKSk7XG4tXHRURVNUX1JFUVVJUkUoa3ZtX3N1cHBvcnRzX25yX2NvdW50ZXJzX2F0dHIoKSk7XG4rc3RhdGljIHZvaWQgdGVzdF9jb25maWcodTY0IHBtY3JfbiwgYm9vbCBmaXhlZF9jb3VudGVyc19vbmx5KVxuK3tcbitcdHU2NCBpO1xuIFxuLVx0cG1jcl9uID0gZ2V0X3BtY3Jfbl9saW1pdCgpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2M9IHBtY3JfbjsgaSsrKSB7XG4tXHRcdHJ1bl9hY2Nlc3NfdGVzdChpKTtcbi1cdFx0cnVuX3BtcmVnc192YWxpZGl0eV90ZXN0KGkpO1xuK1x0XHRydW5fYWNjZXNzX3Rlc3QoaSwgZml4ZWRfY291bnRlcnNfb25seSk7XG4rXHRcdHJ1bl9wbXJlZ3NfdmFsaWRpdHlfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcbitcdFx0cnVuX21kY3JfZWwyX3ZhbGlkaXR5X3Rlc3QoaSwgZml4ZWRfY291bnRlcnNfb25seSk7XG4gXHR9XG4gXG4gXHRmb3IgKGkgPSBwbWNyX24gKyAxOyBpIFx1MDAzYyBBUk1WOF9QTVVfTUFYX0NPVU5URVJTOyBpKyspXG4tXHRcdHJ1bl9lcnJvcl90ZXN0KGkpO1xuK1x0XHRydW5fZXJyb3JfdGVzdChpLCBmaXhlZF9jb3VudGVyc19vbmx5KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9maXhlZF9jb3VudGVyc19vbmx5X3N0cmljdCh2b2lkKVxuK3tcbitcdHN0cnVjdCBrdm1fdmNwdV9pbml0IGluaXQ7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4rXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcdHU2NCBpcnEgPSAyMztcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIWt2bV9oYXNfY2FwKEtWTV9DQVBfQVJNX1BNVV9WM19TVFJJQ1QpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR2bSA9IHZtX2NyZWF0ZSgxKTtcbitcdGt2bV9nZXRfZGVmYXVsdF92Y3B1X3RhcmdldCh2bSwgXHUwMDI2aW5pdCk7XG4rXHRpbml0LmZlYXR1cmVzWzBdIHw9IEJJVChLVk1fQVJNX1ZDUFVfUE1VX1YzKSB8XG4rXHRcdFx0ICAgIEJJVChLVk1fQVJNX1ZDUFVfUE1VX1YzX1NUUklDVCk7XG4rXHR2Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMCwgXHUwMDI2aW5pdCwgZ3Vlc3RfY29kZV9kb25lKTtcbitcdGt2bV9hcmNoX3ZtX2ZpbmFsaXplX3ZjcHVzKHZtKTtcbitcdHZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbitcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLCBcdTAwMjZpcnEpO1xuK1xuK1x0LyogU1RSSUNUIHN0aWxsIHJlcXVpcmVzIGEgUE1VIHNlbGVjdGlvbiBiZWZvcmUgaW5pdGlhbGl6YXRpb24uICovXG4rXHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbitcdFx0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTtcbitcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRU5YSU8sXG4rXHRcdCAgICBLVk1fSU9DVExfRVJST1IoS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7XG4rXG4rXHR2Y3B1X2RldmljZV9hdHRyX3NldCh2Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuK1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQodmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19JTklULCBOVUxMKTtcbitcbitcdGt2bV92bV9mcmVlKHZtKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9maXhlZF9jb3VudGVyc19vbmx5KHZvaWQpXG4re1xuK1x0c3RydWN0IGt2bV9wbXVfZXZlbnRfZmlsdGVyIGZpbHRlciA9IHsgLm5ldmVudHMgPSAwIH07XG4rXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcdHN0cnVjdCBrdm1fdmNwdSAqcnVubmluZ192Y3B1O1xuK1x0c3RydWN0IGt2bV92Y3B1ICpzdG9wcGVkX3ZjcHU7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCBpbml0O1xuK1x0aW50IHJldDtcbitcdHU2NCBpcnEgPSAyMztcbitcbitcdGNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpO1xuK1x0cmV0ID0gX192Y3B1X2hhc19kZXZpY2VfYXR0cih2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbitcdFx0XHRcdCAgICAgS1ZNX0FSTV9WQ1BVX1BNVV9WM19GSVhFRF9DT1VOVEVSU19PTkxZKTtcbitcdGlmIChyZXQpIHtcbitcdFx0VEVTVF9BU1NFUlQocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFTlhJTyxcbitcdFx0XHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9IQVNfREVWSUNFX0FUVFIsIHJldCkpO1xuK1x0XHRkZXN0cm95X3ZwbXVfdm0oKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0LyogQXNzZXJ0IHRoYXQgRklYRURfQ09VTlRFUlNfT05MWSBpcyB1bnNldCBhdCBpbml0aWFsaXphdGlvbi4gKi9cbitcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9nZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XG4rXHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVOWElPLFxuK1x0XHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9HRVRfREVWSUNFX0FUVFIsIHJldCkpO1xuK1xuK1x0LyogQXNzZXJ0IHRoYXQgc2V0dGluZyBGSVhFRF9DT1VOVEVSU19PTkxZIHN1Y2NlZWRzLiAqL1xuK1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJWEVEX0NPVU5URVJTX09OTFksIE5VTEwpO1xuK1xuK1x0LyogQXNzZXJ0IHRoYXQgRklYRURfQ09VTlRFUlNfT05MWSBpcyBzZXQuICovXG4rXHR2Y3B1X2RldmljZV9hdHRyX2dldCh2cG11X3ZtLnZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbitcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XG4rXG4rXHQvKlxuK1x0ICogU2V0dGluZyBhbiBldmVudCBmaWx0ZXIgd2hlbiBGSVhFRF9DT1VOVEVSU19PTkxZIGhhcyBhbHJlYWR5IGJlZW4gc2V0XG4rXHQgKiByZXN1bHRzIGluIEVCVVNZLlxuK1x0ICovXG4rXHRyZXQgPSBfX3ZjcHVfZGV2aWNlX2F0dHJfc2V0KHZwbXVfdm0udmNwdSwgS1ZNX0FSTV9WQ1BVX1BNVV9WM19DVFJMLFxuK1x0XHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJTFRFUiwgXHUwMDI2ZmlsdGVyKTtcbitcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUJVU1ksXG4rXHRcdCAgICBLVk1fSU9DVExfRVJST1IoS1ZNX1NFVF9ERVZJQ0VfQVRUUiwgcmV0KSk7XG4rXG4rXHRkZXN0cm95X3ZwbXVfdm0oKTtcbitcbitcdGNyZWF0ZV92cG11X3ZtKGd1ZXN0X2NvZGUpO1xuK1xuK1x0LypcbitcdCAqIEFzc2VydCB0aGF0IHNldHRpbmcgRklYRURfQ09VTlRFUlNfT05MWSB3aGVuIGFuIGV2ZW50IGZpbHRlciBoYXNcbitcdCAqIGFscmVhZHkgYmVlbiBzZXQgcmVzdWx0cyBpbiBFQlVTWS5cbitcdCAqL1xuK1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0ZJTFRFUiwgXHUwMDI2ZmlsdGVyKTtcbitcbitcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQodnBtdV92bS52Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XG4rXHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVCVVNZLFxuK1x0XHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpO1xuK1xuK1x0ZGVzdHJveV92cG11X3ZtKCk7XG4rXG4rXHQvKlxuK1x0ICogQXNzZXJ0IHRoYXQgc2V0dGluZyBGSVhFRF9DT1VOVEVSU19PTkxZIHdoZW4gYSBWQ1BVIGhhcyBhbHJlYWR5IHJ1blxuK1x0ICogcmVzdWx0cyBpbiBFQlVTWS5cbitcdCAqL1xuK1x0dm0gPSB2bV9jcmVhdGUoMik7XG4rXHR2bV9pb2N0bCh2bSwgS1ZNX0FSTV9QUkVGRVJSRURfVEFSR0VULCBcdTAwMjZpbml0KTtcbitcdGluaXQuZmVhdHVyZXNbMF0gfD0gKDEgXHUwMDNjXHUwMDNjIEtWTV9BUk1fVkNQVV9QTVVfVjMpO1xuK1x0cnVubmluZ192Y3B1ID0gYWFyY2g2NF92Y3B1X2FkZCh2bSwgMCwgXHUwMDI2aW5pdCwgZ3Vlc3RfY29kZV9kb25lKTtcbitcdHN0b3BwZWRfdmNwdSA9IGFhcmNoNjRfdmNwdV9hZGQodm0sIDEsIFx1MDAyNmluaXQsIGd1ZXN0X2NvZGVfZG9uZSk7XG4rXHRrdm1fYXJjaF92bV9maW5hbGl6ZV92Y3B1cyh2bSk7XG4rXHR2Y3B1X2RldmljZV9hdHRyX3NldChydW5uaW5nX3ZjcHUsIEtWTV9BUk1fVkNQVV9QTVVfVjNfQ1RSTCxcbitcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfSVJRLCBcdTAwMjZpcnEpO1xuK1x0dmNwdV9kZXZpY2VfYXR0cl9zZXQocnVubmluZ192Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0ICAgICBLVk1fQVJNX1ZDUFVfUE1VX1YzX0lOSVQsIE5VTEwpO1xuK1x0cnVuX3ZjcHUocnVubmluZ192Y3B1KTtcbitcbitcdHJldCA9IF9fdmNwdV9kZXZpY2VfYXR0cl9zZXQoc3RvcHBlZF92Y3B1LCBLVk1fQVJNX1ZDUFVfUE1VX1YzX0NUUkwsXG4rXHRcdFx0XHQgICAgIEtWTV9BUk1fVkNQVV9QTVVfVjNfRklYRURfQ09VTlRFUlNfT05MWSwgTlVMTCk7XG4rXHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVCVVNZLFxuK1x0XHQgICAgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9TRVRfREVWSUNFX0FUVFIsIHJldCkpO1xuK1xuK1x0a3ZtX3ZtX2ZyZWUodm0pO1xuK1xuK1x0dGVzdF9maXhlZF9jb3VudGVyc19vbmx5X3N0cmljdCgpO1xuK1xuK1x0dGVzdF9jb25maWcoMCwgdHJ1ZSk7XG4rfVxuK1xuK2ludCBtYWluKHZvaWQpXG4re1xuK1x0VEVTVF9SRVFVSVJFKGt2bV9oYXNfY2FwKEtWTV9DQVBfQVJNX1BNVV9WMykpO1xuK1x0VEVTVF9SRVFVSVJFKGt2bV9zdXBwb3J0c192Z2ljX3YzKCkpO1xuK1x0VEVTVF9SRVFVSVJFKGt2bV9zdXBwb3J0c19ucl9jb3VudGVyc19hdHRyKCkpO1xuK1xuK1x0dGVzdF9zZXRfbnJfY291bnRlcnNfYWZ0ZXJfdmNwdV9ydW4oKTtcbitcdHRlc3RfY29uZmlnKGdldF9wbWNyX25fbGltaXQoKSwgZmFsc2UpO1xuK1x0dGVzdF9maXhlZF9jb3VudGVyc19vbmx5KCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo1NDozNy40MjM4OTYwMzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNzAwNjU5MjIxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhpcyBQYXRjaCBmb3IgQU1ENjQgQ29tcGF0aWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGF0IHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIEFNRDY0LCBhbmQgdGhlIGZpbGUgbW9kaWZpY2F0aW9ucyBzZWVtIGhlYXZpbHkgZm9jdXNlZCBvbiBBUk02NC4gVGhlIGluc3RydWN0aW9ucyBzdGF0ZSB0byBsb29rIGZvciBcIlVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoc1wiIGFuZCBcIkNvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSxcIiBzbyB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzLlxuXG5GaXJzdCwgSSBleGFtaW5lZCB0aGUgdXNlciBpbnN0cnVjdGlvbnM6IFwiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQsXCIgY2hlY2suIFRoZW4gSSBsb29rZWQgYXQgdGhlIGZpbGUgbW9kaWZpY2F0aW9ucywgSSBzZWU6XG5cbiogICBgRG9jdW1lbnRhdGlvbi9gIGFuZCBgdG9vbHMvYCBkaXJlY3RvcmllcywgY2hlY2suIERvY3VtZW50YXRpb24gbWlnaHQgYXBwbHkgdG8gYW55IGFyY2hpdGVjdHVyZSwgYW5kIHRvb2xzIGFyZSBhcmNoaXRlY3R1cmUgaW5kZXBlbmRlbnQuXG4qICAgQnV0LCBjcnVjaWFsbHksIGFsbW9zdCBhbGwgdGhlIGtlcm5lbCBtb2RpZmljYXRpb25zIGFyZSB3aXRoaW4gYGFyY2gvYXJtNjQvYCwgYW5kIGluY2x1ZGUgZmlsZXMgdGhhdCBJIHN1c3BlY3Qgd2lsbCBiZSBBUk02NCBvbmx5LiBMZXQncyBzZWUuLi5cbiogICBJIGZsYWdnZWQgYGluY2x1ZGUva3ZtL2FybV9wbXUuaGAgYXMgYSBwb3RlbnRpYWwgcG9pbnQgb2YgaW50ZXJlc3QuIEl0J3MgaW4gdGhlIGBpbmNsdWRlL2t2bWAgZGlyZWN0b3J5LCBidXQgaXRzIG5hbWUgc2NyZWFtcyBcIkFSTSBQTVVcIiBhdCBtZS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaWYgdGhhdCBmaWxlIGlzIGluY2x1ZGVkIGluIGFueSBBTUQ2NC1zcGVjaWZpYyBjb2RlIHBhdGhzLiBTbyBJIG5lZWQgdG8gdmVyaWZ5IGl0cyB1c2FnZS5cbiogICBJIGFsc28gbmVlZCB0byBjaGVjayB0aGUgdG9vbHMgYW5kIGRvY3VtZW50YXRpb24gdG8gZW5zdXJlIHRoZXJlIGFyZSBubyB1bmludGVuZGVkIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBjb21wb25lbnRzIHRoZXJlLlxuXG5Ob3cgSSdsbCBtZXRob2RpY2FsbHkgY2hlY2sgZWFjaCBmaWxlLiBUaGUgYXJtNjQtc3BlY2lmaWMgZmlsZXMgYXJlIGNsZWFybHkgdW5yZWFjaGFibGUgb24gYW1kNjQ6XG4tIGFyY2gvYXJtNjQvXFwqXG4tIGluY2x1ZGUva3ZtL2FybVxcX3BtdS5oXG4tIHRvb2xzL1xcKlxuLSBEb2N1bWVudGF0aW9uL1xcKlxuXG5JJ2xsIHVzZSBncmVwIG9yIGNvZGUgc2VhcmNoIHRvIGRlZmluaXRpdmVseSBjb25maXJtIHRoZSBpbmNsdWRlIGZpbGUgdXNhZ2UgYW5kIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZGVwZW5kZW5jaWVzIGFuZCwgaWYgaXQgaXMgb25seSB1c2VkIGJ5IGFybTY0LCBJIGNhbiBiZSBjb25maWRlbnQgdGhhdCB0aGUgY2hhbmdlcyBhcmUgc2FmZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ3OTEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo1NTowNC40MzA0OTE4MzRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY1NjQ4ODI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbmNsdWRlIFxcdTAwM2Nrdm0vYXJtX3BtdS5oXFx1MDAzZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMzctI2luY2x1ZGUgXFx1MDAzY2t2bS9hcm1fYXJjaF90aW1lci5oXFx1MDAzZVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDozODojaW5jbHVkZSBcXHUwMDNja3ZtL2FybV9wbXUuaFxcdTAwM2VcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMzktXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hcm0uYy00OC0jaW5jbHVkZSBcXHUwMDNja3ZtL2FybV9oeXBlcmNhbGxzLmhcXHUwMDNlXFxuYXJjaC9hcm02NC9rdm0vYXJtLmM6NDk6I2luY2x1ZGUgXFx1MDAzY2t2bS9hcm1fcG11LmhcXHUwMDNlXFxuYXJjaC9hcm02NC9rdm0vYXJtLmMtNTAtI2luY2x1ZGUgXFx1MDAzY2t2bS9hcm1fcHNjaS5oXFx1MDAzZVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy0xNC0jaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9lbXVsYXRlLmhcXHUwMDNlXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYzoxNTojaW5jbHVkZSBcXHUwMDNja3ZtL2FybV9wbXUuaFxcdTAwM2VcXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jLTE2LSNpbmNsdWRlIFxcdTAwM2Nrdm0vYXJtX3ZnaWMuaFxcdTAwM2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTI6NTU6MDcuMDg2OTg0ODMzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjQ1NDI0NzgzODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIEFuYWx5c2lzIC0gTm8gQ29uY2VybnMgSGVyZSEqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IHByaW1hcnkgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgY2hhbmdlcyB0aGF0IHdhcnJhbnQgZnV6emluZy4gVGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBtb2RpZmllZCBjb2RlIGltcGFjdHMgdGhlIGtlcm5lbCdzIGNyaXRpY2FsIGV4ZWN1dGlvbiBwYXRocyBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQgaW4gdGhpcyBjYXNlKS5cblxuRmlyc3QsIEkgY2hlY2tlZCBmb3IgYW55IGluY2x1c2lvbiBvciB1c2FnZSBvZiB0aGUgYGluY2x1ZGUva3ZtL2FybV9wbXUuaGAgZmlsZSwgb3IgYW55IG90aGVyIEFSTTY0IFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdCAoUE1VKSBjb2RlLCBvbiB0aGUgeDg2XzY0IGFyY2hpdGVjdHVyZS4gTm8gZGljZSEgVGhhdCBoZWFkZXIgaXMgZXhjbHVzaXZlbHkgdXNlZCB3aXRoaW4gdGhlIEFSTTY0IGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IGJ5IGBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhgLCBgYXJjaC9hcm02NC9rdm0vYXJtLmNgLCBhbmQgYGFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmNgLiBUaGlzIGlzIGdvb2Q7IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlIG9uIGEgZGlmZmVyZW50IHRhcmdldCBpcyBpbW1lZGlhdGVseSBhIG5vbi1pc3N1ZS5cblxuTmV4dCwgSSBsb29rZWQgYXQgYHRvb2xzL2luY2x1ZGUvbGludXgvYml0ZmllbGQuaGAuIEl0IHJlc2lkZXMgd2l0aGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnkuIFRoaXMgZGlyZWN0b3J5IGlzIGV4cGxpY2l0bHkgZXhlbXB0IGZyb20gZnV6emluZyBjb25zaWRlcmF0aW9ucyBiZWNhdXNlIGl0J3MgZGVmaW5lZCBhcyBhIFwiVXNlci1zcGFjZSBkaXJlY3RvcnlcIi5cblxuVGhlbiwgSSBjb25zdWx0ZWQgdGhlIFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZVwiIGNyaXRlcmlhLiBUaGUgbG9naWMgZm9yIHRoYXQgZGVjaXNpb24gaXMgYmFzZWQgb24gbXVsdGlwbGUgY2F0ZWdvcmllczpcbjEuICAqKk5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6KiogVGhpcyBpbmNsdWRlcyBkb2N1bWVudGF0aW9uLCBjb21tZW50cywgc3BlbGxpbmcgZml4ZXMsIGFuZCwgaW1wb3J0YW50bHksIHVzZXItc3BhY2UgZGlyZWN0b3JpZXMgbGlrZSBgdG9vbHMvYCwgYXMgd2VsbCBhcyBzZWxmLXRlc3RzLCBzYW1wbGVzLCBhbmQgc2NyaXB0cyB0aGF0IGRvbid0IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlIG9yIG1vZHVsZXMuXG4yLiAgKipTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6KipcbjMuICAqKlVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoqKlxuXG5HaXZlbiB0aGF0LCBJIGNhbiBjb25jbHVzaXZlbHkgY2F0ZWdvcml6ZSBhbGwgY2hhbmdlcyB3aXRoaW4gdGhpcyBwYXRjaCBzZXJpZXM6XG5cbjEuICAqKkRvY3VtZW50YXRpb246KiogTW9kaWZpY2F0aW9ucyB0byB0aGUgZG9jdW1lbnRhdGlvbiBmaWxlcyAoYERvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdGAsIGBEb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvdmNwdS5yc3RgKSBmYWxsIHVuZGVyIHRoZSBcIk5vbi1rZXJuZWxcIiBjYXRlZ29yeS5cbjIuICAqKkFSTTY0IEFyY2hpdGVjdHVyZSBDb2RlOioqIEFsbCBjaGFuZ2VzIHdpdGhpbiBgYXJjaC9hcm02NC8qYCBhcmUgKmV4Y2x1c2l2ZWx5KiBmb3IgdGhlIEFSTTY0IGFyY2hpdGVjdHVyZS4gVGhleSBhcmUgc2ltcGx5IHVucmVhY2hhYmxlIGFuZCBkbyBub3QgYWZmZWN0IHRoZSB0YXJnZXQgKGFtZDY0KS5cbjMuICAqKmBpbmNsdWRlL2t2bS9hcm1fcG11LmhgOioqIFRoaXMgaXMsIGFnYWluLCBBUk02NC1zcGVjaWZpYyBhbmQgb25seSBpbmNsdWRlZCB3aXRoaW4gQVJNNjQgZmlsZXMuIEl0IGlzIGlycmVsZXZhbnQgb24gYW1kNjQuXG40LiAgKipgdG9vbHMvKmA6KiogVGhpcyBjb3ZlcnMgY29kZSBpbiBgdG9vbHMvYXJjaC9hcm02NC9gLCBgdG9vbHMvaW5jbHVkZS9saW51eC9iaXRmaWVsZC5oYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gLiBUaGVzZSBhcmUgdXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2NyaXB0cywgYW5kIHNlbGYtdGVzdHMuXG5cblRoZXJlZm9yZSwgKmFsbCogbW9kaWZpZWQgY29kZSBmYWxscyB1bmRlciBvbmUgb3IgbW9yZSBvZiB0aGVzZSBzYWZlIGNhdGVnb3JpZXM6IHVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIGRvY3VtZW50YXRpb24sIG9yIGNvZGUgZXhjbHVzaXZlIHRvIGEgZGlmZmVyZW50IGFyY2hpdGVjdHVyZSB0aGFuIHRoZSB0YXJnZXQgYW1kNjQuIEknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGEgZnVsbCBhbmQgY29tcGxldGUgbGlzdCBhbmQgYmUgc3VyZSBubyBvdGhlciBmaWxlIHdhcyBtb2RpZmllZCB1c2luZyBgZ2l0IGRpZmYgLyBzdGF0dXNgIG9yIGBnaXQgZ3JlcGAgb24gdGhpcyBjb21taXQgdG8gY29uZmlybSB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjExOSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo1NTozMS42Mjk0NjY1ODZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ4NTc1MDg4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkaWZmIC0tZ2l0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYnBmL2RyZ24ucnN0PTk5PUZvciBleGFtcGxlLCB0byBwcmludCBgYHN0cnVjdCBicGZfcHJvZ19hdXhgYCBmb3IgQlBGIHByb2dyYW0gaWQgNTMwNzc6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9kcmduLnJzdC0xMDMtICAgICUgZ2l0IGRpZmZcXG5Eb2N1bWVudGF0aW9uL2JwZi9kcmduLnJzdDoxMDQ6ICAgIGRpZmYgLS1naXQgYS90b29scy9icGZfaW5zcGVjdC5weSBiL3Rvb2xzL2JwZl9pbnNwZWN0LnB5XFxuRG9jdW1lbnRhdGlvbi9icGYvZHJnbi5yc3QtMTA1LSAgICBpbmRleCA2NTBlMjI4Li5hZWEyMzU3IDEwMDc1NVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMvY2hlY2t1YXBpLnJzdD01ND13b24ndCBicmVhayB1c2Vyc3BhY2U6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMvY2hlY2t1YXBpLnJzdC02OS0gICAgICAqICBjb21wMl90IGlzIDI0LWJpdCB3aXRoIDUtYml0IGJhc2UgMiBleHBvbmVudCBhbmQgMjAgYml0IGZyYWN0aW9uXFxuRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMvY2hlY2t1YXBpLnJzdDo3MDogICAgZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxcbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2NoZWNrdWFwaS5yc3QtNzEtICAgIEVPRlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMvY2hlY2t1YXBpLnJzdD0zMTA9Q29uc2lkZXIgdGhpcyBjaGFuZ2U6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMvY2hlY2t1YXBpLnJzdC0zMTItICAgIGNhdCBcXHUwMDNjXFx1MDAzYyAnRU9GJyB8IHBhdGNoIC1sIC1wMVxcbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2NoZWNrdWFwaS5yc3Q6MzEzOiAgICBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL0tidWlsZCBiL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9LYnVpbGRcXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9jaGVja3VhcGkucnN0LTMxNC0gICAgaW5kZXggZWJiMTgwYWFjNzRlLi5hOWM4OGIwYThiM2IgMTAwNjQ0XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RvYy1ndWlkZS9jb250cmlidXRpbmcucnN0PTg0PWxvb2tlZCBsaWtlIHRoaXM6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kb2MtZ3VpZGUvY29udHJpYnV0aW5nLnJzdC0xMDItXFxuRG9jdW1lbnRhdGlvbi9kb2MtZ3VpZGUvY29udHJpYnV0aW5nLnJzdDoxMDM6ICBkaWZmIC0tZ2l0IGEvZHJpdmVycy9kZXZmcmVxL2RldmZyZXEuYyBiL2RyaXZlcnMvZGV2ZnJlcS9kZXZmcmVxLmNcXG5Eb2N1bWVudGF0aW9uL2RvYy1ndWlkZS9jb250cmlidXRpbmcucnN0LTEwNC0gIGluZGV4IDU3ZjY5NDRkNjVhNi4uMDBjOWI4MGIzZDMzIDEwMDY0NFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS90cmFuc2h1Z2UucnN0PTczPWNoYW5nZTo6XFxuRG9jdW1lbnRhdGlvbi9tbS90cmFuc2h1Z2UucnN0LTc0LVxcbkRvY3VtZW50YXRpb24vbW0vdHJhbnNodWdlLnJzdDo3NTpcXHRkaWZmIC0tZ2l0IGEvbW0vbXJlbWFwLmMgYi9tbS9tcmVtYXAuY1xcbkRvY3VtZW50YXRpb24vbW0vdHJhbnNodWdlLnJzdC03Ni1cXHQtLS0gYS9tbS9tcmVtYXAuY1xcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZG9jLWd1aWRlL2NvbnRyaWJ1dGluZy5yc3Q9MzY9Q+S7o+eggee8luivkeWZqOWPkeWHuueahOitpuWRiuW4uOW4uOS8muiiq+inhuS4uuivr+aKpe+8jOS7juiAjOWvvOiHtOWHuueOsOS6huaXqOWcqOiuqee8luivkeWZqOmXreWYtOeahOihpeS4geOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZG9jLWd1aWRlL2NvbnRyaWJ1dGluZy5yc3QtODYtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZG9jLWd1aWRlL2NvbnRyaWJ1dGluZy5yc3Q6ODc6ICBkaWZmIC0tZ2l0IGEvZHJpdmVycy9kZXZmcmVxL2RldmZyZXEuYyBiL2RyaXZlcnMvZGV2ZnJlcS9kZXZmcmVxLmNcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9kb2MtZ3VpZGUvY29udHJpYnV0aW5nLnJzdC04OC0gIGluZGV4IDU3ZjY5NDRkNjVhNi4uMDBjOWI4MGIzZDMzIDEwMDY0NFxcbi0tXFxuc2NyaXB0cy9jaGVja3BhdGNoLnBsPTI2NzE9c3ViIHByb2Nlc3Mge1xcbi0tXFxuc2NyaXB0cy9jaGVja3BhdGNoLnBsLTI4NDQtXFx0XFx0ICAgICgkbGluZSA9fiAvXnJlbmFtZSAoPzpmcm9tfHRvKSBcXFxcUytcXFxccyokLyB8fFxcbnNjcmlwdHMvY2hlY2twYXRjaC5wbDoyODQ1OlxcdFxcdCAgICAgJGxpbmUgPX4gL15kaWZmIC0tZ2l0IGFcXFxcL1tcXFxcd1xcXFwvXFxcXC5cXFxcX1xcXFwtXSsgYlxcXFwvXFxcXFMrXFxcXHMqJC8pKSkge1xcbnNjcmlwdHMvY2hlY2twYXRjaC5wbC0yODQ2LVxcdFxcdFxcdCRpc19wYXRjaCA9IDE7XFxuLS1cXG5zY3JpcHRzL2NoZWNrcGF0Y2gucGwtMjkwMi1cXHRcXHQjIGV4dHJhY3QgdGhlIGZpbGVuYW1lIGFzIGl0IHBhc3Nlc1xcbnNjcmlwdHMvY2hlY2twYXRjaC5wbDoyOTAzOlxcdFxcdGlmICgkbGluZSA9fiAvXmRpZmYgLS1naXQuKj8oXFxcXFMrKSQvKSB7XFxuc2NyaXB0cy9jaGVja3BhdGNoLnBsLTI5MDQtXFx0XFx0XFx0JHJlYWxmaWxlID0gJDE7XFxuLS1cXG5zY3JpcHRzL2dldF9tYWludGFpbmVyLnBsPTU1Mj1mb3JlYWNoIG15ICRmaWxlIChAQVJHVikge1xcbi0tXFxuc2NyaXB0cy9nZXRfbWFpbnRhaW5lci5wbC02MDEtXFx0XFx0cHVzaChAZmlsZXMsICRmaWxlbmFtZSk7XFxuc2NyaXB0cy9nZXRfbWFpbnRhaW5lci5wbDo2MDI6XFx0ICAgIH0gZWxzaWYgKG0vXmRpZmYgLS1naXQgYVxcXFwvKFxcXFxTKykgYlxcXFwvKFxcXFxTKylcXFxccyokLykge1xcbnNjcmlwdHMvZ2V0X21haW50YWluZXIucGwtNjAzLVxcdFxcdG15ICRmaWxlbmFtZTEgPSAkMTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTI6NTU6MzQuMTE1MjI0NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIwODE4OTQ2NzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgQ29tbWl0IDczNDNjMGJmZjdkNWM1ZWE3YWY5ZTFmMGZiNjU4MTkxYTgwZmJmMTkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ3ZlIGdvdCB0aGUgbGlzdCBvZiBtb2RpZmllZCBmaWxlczogYERvY3VtZW50YXRpb24vdmlydC9rdm0vKmAsIGBhcmNoL2FybTY0LypgLCBgaW5jbHVkZS9rdm0vYXJtX3BtdS5oYCwgYHRvb2xzLypgLCBhbmQgYGluY2x1ZGUvbGludXgvYml0ZmllbGQuaGAuIE15IGluaXRpYWwgc2NhbiB0ZWxscyBtZSB0aGlzIGlzIGFsbCBwcmV0dHkgdGFyZ2V0ZWQuIE5vbmUgb2YgdGhpcyB0b3VjaGVzIGFueSBhbWQ2NCAoeDg2XzY0KSByZWFjaGFibGUgY29kZS4gU3BlY2lmaWNhbGx5OlxuXG4qICAgVGhlIGBhcmNoL2FybTY0LypgIGZpbGVzIGFyZSBBUk02NC1zcGVjaWZpYywgYXMgaXMgYGluY2x1ZGUva3ZtL2FybV9wbXUuaGAuXG4qICAgVGhlIGB0b29scy8qYCBkaXJlY3RvcnkgY29udGFpbnMgdXNlci1zcGFjZSBzZWxmdGVzdHMgYW5kIHRvb2xzLCBzbyBpdCdzIG5vdCBkaXJlY3RseSBpbXBhY3RpbmcgdGhlIGtlcm5lbCBpbWFnZSBpdHNlbGYuXG4qICAgYERvY3VtZW50YXRpb24vKmAgaXMsIHdlbGwsIGRvY3VtZW50YXRpb24uXG5cbk5vdywgY29uc2lkZXJpbmcgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhIGZvciBmdXp6aW5nLCB3aGljaCBhcmUgdGhlIHJlbGV2YW50IG9uZXMgaW4gdGhpcyBjb250ZXh0LCB0aGUgY29tbWl0IGlzIGNvbXBsZXRlbHkgY292ZXJlZCBieSB0aGVzZSBjYXNlczpcblxuKiAgICoqTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoqKiBJdCBpbmNsdWRlcyBkb2N1bWVudGF0aW9uLCBhbmQgdXNlci1zcGFjZSB0b29scy9zZWxmdGVzdHMgdGhhdCBkb24ndCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZS5cbiogICAqKlVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoqKiBUaGUgY2hhbmdlcyBhcmUgZXhjbHVzaXZlIHRvIEFSTTY0LCBub3QgYW1kNjQsIHdoaWNoIGlzIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG5HaXZlbiB0aGF0IHRoaXMgY29tbWl0IHN0cmljdGx5IGZhbGxzIGludG8gdGhlc2UgY2F0ZWdvcmllcywgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBjcml0ZXJpYSwgSSBtdXN0IGNvbmNsdWRlIHRoYXQgYFdvcnRoRnV6emluZyA9IGZhbHNlYC4gVGhlIGBFbmFibGVDb25maWdzYCBhbmQgYEZvY3VzU3ltYm9sc2AgbGlzdHMgYXJlIGJvdGggZW1wdHksIGFuZCB0aGUgcmVhc29uaW5nIGlzIHRoYXQgdGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIEFSTTY0LXNwZWNpZmljIEtWTSBhbmQgQ1BVIGVycmF0YSBjb2RlLCBvciBkb2N1bWVudGF0aW9uIGFuZCB0b29scywgd2hpY2ggYXJlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiB0aGUgYW1kNjQgYXJjaGl0ZWN0dXJlLlxuXG5KdXN0IHJ1bm5pbmcgYSBxdWljayBzYW5pdHkgY2hlY2sgb2YgdGhlIHZhbHVlczpcbiogV29ydGhGdXp6aW5nOiBmYWxzZVxuKiBFbmFibGVDb25maWdzOiBbXVxuKiBGb2N1c1N5bWJvbHM6IFtdXG4qIFJlYXNvbmluZzogQ2xlYXIgYW5kIGNvbmNpc2UuXG5cbkV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gSSdtIGNvbmZpZGVudCBpbiB0aGlzIGFzc2Vzc21lbnQuIEknbSBub3cgZ29pbmcgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODY5OSwiT3V0cHV0VG9rZW5zIjoxMDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTI6NTU6NTQuOTM0MTc0MTI1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIkFsbCBtb2RpZmllZCBrZXJuZWwgY29kZSBpcyBleGNsdXNpdmUgdG8gdGhlIGFybTY0IGFyY2hpdGVjdHVyZSAoYXJjaC9hcm02NCBhbmQgaW5jbHVkZS9rdm0vYXJtX3BtdS5oKSwgd2l0aCB0aGUgcmVtYWluaW5nIGNoYW5nZXMgbG9jYXRlZCBpbiBEb2N1bWVudGF0aW9uLyBhbmQgdXNlci1zcGFjZSB0b29scy9zZWxmdGVzdHMgKHRvb2xzLykuIE5vbmUgb2YgdGhlIG1vZGlmaWVkIGNvZGUgaXMgY29tcGlsZWQgb3IgcmVhY2hhYmxlIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIkFsbCBtb2RpZmllZCBrZXJuZWwgY29kZSBpcyBleGNsdXNpdmUgdG8gdGhlIGFybTY0IGFyY2hpdGVjdHVyZSAoYXJjaC9hcm02NCBhbmQgaW5jbHVkZS9rdm0vYXJtX3BtdS5oKSwgd2l0aCB0aGUgcmVtYWluaW5nIGNoYW5nZXMgbG9jYXRlZCBpbiBEb2N1bWVudGF0aW9uLyBhbmQgdXNlci1zcGFjZSB0b29scy9zZWxmdGVzdHMgKHRvb2xzLykuIE5vbmUgb2YgdGhlIG1vZGlmaWVkIGNvZGUgaXMgY29tcGlsZWQgb3IgcmVhY2hhYmxlIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMjo1NTo1NC45MzQyMjczMDZaIiwiU2VxIjo5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjftdv[1] Phase: Running StartedAt: 2026-09-14 12:56:06 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjftdv[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-14 12:56:06 +0000 UTC FinishedAt: 2026-09-14 12:56:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}