Name: series-workflow752wx Phase: Failed StartedAt: 2026-08-28 21:01:30 +0000 UTC FinishedAt: 2026-08-28 21:18:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow752wx[0] Phase: Succeeded StartedAt: 2026-08-28 21:01:30 +0000 UTC FinishedAt: 2026-08-28 21:18:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow752wx[0].run-triage Phase: Succeeded StartedAt: 2026-08-28 21:01:30 +0000 UTC FinishedAt: 2026-08-28 21:18:46 +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+CgkJCTx0ZD4yMDI2LzA4LzI4IDIxOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBjb250YWlucyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIGtlcm5lbGRvYyBhZGRpdGlvbnMsIGNvbW1lbnQgY29udmVyc2lvbnMgKGZyb20gcGFnZSB0byBmb2xpbyB0ZXJtaW5vbG9neSksIGFuZCBhIGxhYmVsIHJlbmFtZSAodW5sb2NrX3BhZ2UgdG8gdW5sb2NrX2ZvbGlvKSB3aXRoIG5vIGZ1bmN0aW9uYWwgY29kZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMToxODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM4ZTcyZTZmMmZiNmIxNGE4YWY4NGU0YjNlOTBlYTgyN2QzMThmMTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyOCAyMToxODoyOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdFxuaW5kZXggNjA4ODBlYjBjNDlkMS4uZGU5NmI2NzQ1NjAwYiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3RcbkBAIC0zNDgsNyAmIzQzOzM0OCw3IEBAIHNpbXBseSBvZiByZXR1cm4gMS4gIE5vdGUgdGhhdCBhbGwgYWN0dWFsIGV2aWN0aW9uIHdvcmsgaXMgZG9uZSBieSBjYWxsZXIgYWZ0ZXJcbiBBcyBiZWZvcmUsIGNsZWFyX2lub2RlKCkgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIG9uIGVhY2ggY2FsbCBvZlxuIC1cdTAwM2VldmljdF9pbm9kZSgpIChhcyBpdCB1c2VkIHRvIGJlIGZvciBlYWNoIGNhbGwgb2YgLVx1MDAzZWRlbGV0ZV9pbm9kZSgpKS4gIFVubGlrZVxuIGJlZm9yZSwgaWYgeW91IGFyZSB1c2luZyBpbm9kZS1hc3NvY2lhdGVkIG1ldGFkYXRhIGJ1ZmZlcnMgKGkuZS5cbi1tYXJrX2J1ZmZlcl9kaXJ0eV9pbm9kZSgpKSwgaXQmIzM5O3MgeW91ciByZXNwb25zaWJpbGl0eSB0byBjYWxsXG4mIzQzO21tYl9tYXJrX2J1ZmZlcl9kaXJ0eSgpKSwgaXQmIzM5O3MgeW91ciByZXNwb25zaWJpbGl0eSB0byBjYWxsXG4gaW52YWxpZGF0ZV9pbm9kZV9idWZmZXJzKCkgYmVmb3JlIGNsZWFyX2lub2RlKCkuXG4gXG4gTk9URTogY2hlY2tpbmcgaV9ubGluayBpbiB0aGUgYmVnaW5uaW5nIG9mIC1cdTAwM2V3cml0ZV9pbm9kZSgpIGFuZCBiYWlsaW5nIG91dFxuZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmNcbmluZGV4IGVkOTY2ZmE3M2IxYmEuLmM5MzQyYWViOGNkZjYgMTAwNjQ0XG4tLS0gYS9mcy9idWZmZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnVmZmVyLmNcbkBAIC0yNjUsNyAmIzQzOzI2NSw3IEBAIF9fZmluZF9nZXRfYmxvY2tfc2xvdyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBibG9jaywgYm9vbCBhdG9taWMpXG4gXHRcdGJoID0gYmgtXHUwMDNlYl90aGlzX3BhZ2U7XG4gXHR9IHdoaWxlIChiaCAhPSBoZWFkKTtcbiBcbi1cdC8qIHdlIG1pZ2h0IGJlIGhlcmUgYmVjYXVzZSBzb21lIG9mIHRoZSBidWZmZXJzIG9uIHRoaXMgcGFnZSBhcmVcbiYjNDM7XHQvKiB3ZSBtaWdodCBiZSBoZXJlIGJlY2F1c2Ugc29tZSBvZiB0aGUgYnVmZmVycyBvbiB0aGlzIGZvbGlvIGFyZVxuIFx0ICogbm90IG1hcHBlZC4gIFRoaXMgaXMgZHVlIHRvIHZhcmlvdXMgcmFjZXMgYmV0d2VlblxuIFx0ICogZmlsZSBpbyBvbiB0aGUgYmxvY2sgZGV2aWNlIGFuZCBnZXRibGsuICBJdCBnZXRzIGRlYWx0IHdpdGhcbiBcdCAqIGVsc2V3aGVyZSwgZG9uJiMzOTt0IGJ1ZmZlcl9lcnJvciBpZiB3ZSBoYWQgc29tZSB1bm1hcHBlZCBidWZmZXJzXG5AQCAtMzExLDcgJiM0MzszMTEsNyBAQCBzdGF0aWMgdm9pZCBlbmRfYnVmZmVyX2FzeW5jX3JlYWQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHVwdG9kYXRlKVxuIFx0LypcbiBcdCAqIEJlIF92ZXJ5XyBjYXJlZnVsIGZyb20gaGVyZSBvbi4gQmFkIHRoaW5ncyBjYW4gaGFwcGVuIGlmXG4gXHQgKiB0d28gYnVmZmVyIGhlYWRzIGVuZCBJTyBhdCBhbG1vc3QgdGhlIHNhbWUgdGltZSBhbmQgYm90aFxuLVx0ICogZGVjaWRlIHRoYXQgdGhlIHBhZ2UgaXMgbm93IGNvbXBsZXRlbHkgZG9uZS5cbiYjNDM7XHQgKiBkZWNpZGUgdGhhdCB0aGUgZm9saW8gaXMgbm93IGNvbXBsZXRlbHkgZG9uZS5cbiBcdCAqL1xuIFx0Zmlyc3QgPSBmb2xpb19idWZmZXJzKGZvbGlvKTtcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmZpcnN0LVx1MDAzZWJfdXB0b2RhdGVfbG9jaywgZmxhZ3MpO1xuQEAgLTUyMCw4ICYjNDM7NTIwLDggQEAgRVhQT1JUX1NZTUJPTF9HUEwobW1iX2hhc19idWZmZXJzKTtcbiAgKlxuICAqIERvIHRoaXMgaW4gdHdvIG1haW4gc3RhZ2VzOiBmaXJzdCB3ZSBjb3B5IGRpcnR5IGJ1ZmZlcnMgdG8gYVxuICAqIHRlbXBvcmFyeSBpbm9kZSBsaXN0LCBxdWV1ZWluZyB0aGUgd3JpdGVzIGFzIHdlIGdvLiBUaGVuIHdlIGNsZWFuXG4tICogdXAsIHdhaXRpbmcgZm9yIHRob3NlIHdyaXRlcyB0byBjb21wbGV0ZS4gbWFya19idWZmZXJfZGlydHlfaW5vZGUoKVxuLSAqIGRvZXNuJiMzOTt0IHRvdWNoIGJfYXNzb2NfYnVmZmVycyBsaXN0IGlmIGJfbW1iIGlzIG5vdCBOVUxMIHNvIHdlIGFyZSBzdXJlIHRoZVxuJiM0MzsgKiB1cCwgd2FpdGluZyBmb3IgdGhvc2Ugd3JpdGVzIHRvIGNvbXBsZXRlLiBtbWJfbWFya19idWZmZXJfZGlydHkoKVxuJiM0MzsgKiBkb2VzbiYjMzk7dCB0b3VjaCBiX2Fzc29jX2J1ZmZlcnMgbGlzdCBpZiBiX21tYiBpcyBzZXQgc28gd2UgYXJlIHN1cmUgdGhlXG4gICogYnVmZmVyIHN0YXlzIG9uIG91ciBsaXN0IHVudGlsIElPIGNvbXBsZXRlcyAoYXQgd2hpY2ggcG9pbnQgaXQgY2FuIGJlXG4gICogcmVhcGVkKS5cbiAgKi9cbkBAIC01NDIsNyAmIzQzOzU0Miw3IEBAIGludCBtbWJfc3luYyhzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYilcbiBcdFx0YmggPSBCSF9FTlRSWShtbWItXHUwMDNlbGlzdC5uZXh0KTtcbiBcdFx0V0FSTl9PTl9PTkNFKGJoLVx1MDAzZWJfbW1iICE9IG1tYik7XG4gXHRcdF9fcmVtb3ZlX2Fzc29jX3F1ZXVlKG1tYiwgYmgpO1xuLVx0XHQvKiBBdm9pZCByYWNlIHdpdGggbWFya19idWZmZXJfZGlydHlfaW5vZGUoKSB3aGljaCBkb2VzXG4mIzQzO1x0XHQvKiBBdm9pZCByYWNlIHdpdGggbW1iX21hcmtfYnVmZmVyX2RpcnR5KCkgd2hpY2ggZG9lc1xuIFx0XHQgKiBhIGxvY2tsZXNzIGNoZWNrIGFuZCB3ZSByZWx5IG9uIHNlZWluZyB0aGUgZGlydHkgYml0ICovXG4gXHRcdHNtcF9tYigpO1xuIFx0XHRpZiAoYnVmZmVyX2RpcnR5KGJoKSB8fCBidWZmZXJfbG9ja2VkKGJoKSkge1xuQEAgLTU4MCw3ICYjNDM7NTgwLDcgQEAgaW50IG1tYl9zeW5jKHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iKVxuIFx0XHRiaCA9IEJIX0VOVFJZKHRtcC5wcmV2KTtcbiBcdFx0Z2V0X2JoKGJoKTtcbiBcdFx0X19yZW1vdmVfYXNzb2NfcXVldWUobW1iLCBiaCk7XG4tXHRcdC8qIEF2b2lkIHJhY2Ugd2l0aCBtYXJrX2J1ZmZlcl9kaXJ0eV9pbm9kZSgpIHdoaWNoIGRvZXNcbiYjNDM7XHRcdC8qIEF2b2lkIHJhY2Ugd2l0aCBtbWJfbWFya19idWZmZXJfZGlydHkoKSB3aGljaCBkb2VzXG4gXHRcdCAqIGEgbG9ja2xlc3MgY2hlY2sgYW5kIHdlIHJlbHkgb24gc2VlaW5nIHRoZSBkaXJ0eSBiaXQgKi9cbiBcdFx0c21wX21iKCk7XG4gXHRcdGlmIChidWZmZXJfZGlydHkoYmgpKSB7XG5AQCAtNjE4LDYgJiM0Mzs2MTgsMTQgQEAgdm9pZCB3cml0ZV9ib3VuZGFyeV9ibG9jayhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxuIFx0fVxuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eSAtIE1hcmsgYSBtZXRhZGF0YSBidWZmZXIgZGlydHkuXG4mIzQzOyAqIEBiaDogVGhlIGJ1ZmZlciB0byBtYXJrIGRpcnR5LlxuJiM0MzsgKiBAbW1iOiBUaGUgbGlzdCBvZiBidWZmZXJzIHRvIGFkZCB0aGUgYnVmZmVyIHRvLlxuJiM0MzsgKlxuJiM0MzsgKiBNYXJrIHRoZSBidWZmZXIgZGlydHkgYW5kIGFkZCBpdCB0byB0aGUgbGlzdCBpZiBpdCBpcyBub3QgYWxyZWFkeSBvblxuJiM0MzsgKiBhIGxpc3QuXG4mIzQzOyAqL1xuIHZvaWQgbW1iX21hcmtfYnVmZmVyX2RpcnR5KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG4gXHRcdFx0ICAgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIpXG4ge1xuQEAgLTY4Niw3ICYjNDM7Njk0LDcgQEAgYm9vbCBibG9ja19kaXJ0eV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0fSB3aGlsZSAoYmggIT0gaGVhZCk7XG4gXHR9XG4gXHQvKlxuLVx0ICogTG9jayBvdXQgcGFnZSYjMzk7cyBtZW1jZyBtaWdyYXRpb24gdG8ga2VlcCBQYWdlRGlydHlcbiYjNDM7XHQgKiBMb2NrIG91dCBmb2xpbyYjMzk7cyBtZW1jZyBtaWdyYXRpb24gdG8ga2VlcCBmb2xpbyBkaXJ0eSBmbGFnXG4gXHQgKiBzeW5jaHJvbml6ZWQgd2l0aCBwZXItbWVtY2cgZGlydHkgcGFnZSBjb3VudGVycy5cbiBcdCAqL1xuIFx0bmV3bHlfZGlydHkgPSAhZm9saW9fdGVzdF9zZXRfZGlydHkoZm9saW8pO1xuQEAgLTk1MiwyMyAmIzQzOzk2MCwyMyBAQCBfX2dldGJsa19zbG93KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLFxuIH1cbiBcbiAvKlxuLSAqIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBkaXJ0eSBidWZmZXJzIGFuZCBkaXJ0eSBwYWdlczpcbiYjNDM7ICogVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGRpcnR5IGJ1ZmZlcnMgYW5kIGRpcnR5IGZvbGlvczpcbiAgKlxuLSAqIFdoZW5ldmVyIGEgcGFnZSBoYXMgYW55IGRpcnR5IGJ1ZmZlcnMsIHRoZSBwYWdlJiMzOTtzIGRpcnR5IGJpdCBpcyBzZXQsIGFuZFxuLSAqIHRoZSBwYWdlIGlzIHRhZ2dlZCBkaXJ0eSBpbiB0aGUgcGFnZSBjYWNoZS5cbiYjNDM7ICogV2hlbmV2ZXIgYSBmb2xpbyBoYXMgYW55IGRpcnR5IGJ1ZmZlcnMsIHRoZSBmb2xpbyYjMzk7cyBkaXJ0eSBmbGFnIGlzIHNldCwgYW5kXG4mIzQzOyAqIHRoZSBmb2xpbyBpcyB0YWdnZWQgZGlydHkgaW4gdGhlIHBhZ2UgY2FjaGUuXG4gICpcbiAgKiBBdCBhbGwgdGltZXMsIHRoZSBkaXJ0aW5lc3Mgb2YgdGhlIGJ1ZmZlcnMgcmVwcmVzZW50cyB0aGUgZGlydGluZXNzIG9mXG4tICogc3Vic2VjdGlvbnMgb2YgdGhlIHBhZ2UuICBJZiB0aGUgcGFnZSBoYXMgYnVmZmVycywgdGhlIHBhZ2UgZGlydHkgYml0IGlzXG4mIzQzOyAqIHN1YnNlY3Rpb25zIG9mIHRoZSBmb2xpby4gIElmIHRoZSBmb2xpbyBoYXMgYnVmZmVycywgdGhlIGZvbGlvIGRpcnR5IGZsYWcgaXNcbiAgKiBtZXJlbHkgYSBoaW50IGFib3V0IHRoZSB0cnVlIGRpcnR5IHN0YXRlLlxuICAqXG4tICogV2hlbiBhIHBhZ2UgaXMgc2V0IGRpcnR5IGluIGl0cyBlbnRpcmV0eSwgYWxsIGl0cyBidWZmZXJzIGFyZSBtYXJrZWQgZGlydHlcbi0gKiAoaWYgdGhlIHBhZ2UgaGFzIGJ1ZmZlcnMpLlxuJiM0MzsgKiBXaGVuIGEgZm9saW8gaXMgc2V0IGRpcnR5IGluIGl0cyBlbnRpcmV0eSwgYWxsIGl0cyBidWZmZXJzIGFyZSBtYXJrZWQgZGlydHlcbiYjNDM7ICogKGlmIHRoZSBmb2xpbyBoYXMgYnVmZmVycykuXG4gICpcbi0gKiBXaGVuIGEgYnVmZmVyIGlzIG1hcmtlZCBkaXJ0eSwgaXRzIHBhZ2UgaXMgZGlydGllZCwgYnV0IHRoZSBwYWdlJiMzOTtzIG90aGVyXG4mIzQzOyAqIFdoZW4gYSBidWZmZXIgaXMgbWFya2VkIGRpcnR5LCBpdHMgZm9saW8gaXMgZGlydGllZCwgYnV0IHRoZSBmb2xpbyYjMzk7cyBvdGhlclxuICAqIGJ1ZmZlcnMgYXJlIG5vdC5cbiAgKlxuICAqIEFsc28uICBXaGVuIGJsb2NrZGV2IGJ1ZmZlcnMgYXJlIGV4cGxpY2l0bHkgcmVhZCB3aXRoIGJyZWFkKCksIHRoZXlcbi0gKiBpbmRpdmlkdWFsbHkgYmVjb21lIHVwdG9kYXRlLiAgQnV0IHRoZWlyIGJhY2tpbmcgcGFnZSByZW1haW5zIG5vdFxuJiM0MzsgKiBpbmRpdmlkdWFsbHkgYmVjb21lIHVwdG9kYXRlLiAgQnV0IHRoZWlyIGJhY2tpbmcgZm9saW8gcmVtYWlucyBub3RcbiAgKiB1cHRvZGF0ZSAtIGV2ZW4gaWYgYWxsIG9mIGl0cyBidWZmZXJzIGFyZSB1cHRvZGF0ZS4gIEEgc3Vic2VxdWVudFxuICAqIGJsb2NrX3JlYWRfZnVsbF9mb2xpbygpIGFnYWluc3QgdGhhdCBmb2xpbyB3aWxsIGRpc2NvdmVyIGFsbCB0aGUgdXB0b2RhdGVcbiAgKiBidWZmZXJzLCB3aWxsIHNldCB0aGUgZm9saW8gdXB0b2RhdGUgYW5kIHdpbGwgcGVyZm9ybSBubyBJL08uXG5AQCAtOTc5LDcgJiM0Mzs5ODcsNyBAQCBfX2dldGJsa19zbG93KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLFxuICAqIEBiaDogdGhlIGJ1ZmZlcl9oZWFkIHRvIG1hcmsgZGlydHlcbiAgKlxuICAqIG1hcmtfYnVmZmVyX2RpcnR5KCkgd2lsbCBzZXQgdGhlIGRpcnR5IGJpdCBhZ2FpbnN0IHRoZSBidWZmZXIsIHRoZW4gc2V0XG4tICogaXRzIGJhY2tpbmcgcGFnZSBkaXJ0eSwgdGhlbiB0YWcgdGhlIHBhZ2UgYXMgZGlydHkgaW4gdGhlIHBhZ2UgY2FjaGVcbiYjNDM7ICogaXRzIGJhY2tpbmcgZm9saW8gZGlydHksIHRoZW4gdGFnIHRoZSBmb2xpbyBhcyBkaXJ0eSBpbiB0aGUgcGFnZSBjYWNoZVxuICAqIGFuZCB0aGVuIGF0dGFjaCB0aGUgYWRkcmVzc19zcGFjZSYjMzk7cyBpbm9kZSB0byBpdHMgc3VwZXJibG9jayYjMzk7cyBkaXJ0eVxuICAqIGlub2RlIGxpc3QuXG4gICpcbkBAIC0xMDc0LDcgJiM0MzsxMDgyLDcgQEAgc3RhdGljIHZvaWQgYnVmZmVyX3NldF9jcnlwdG9fY3R4KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbiBcbiBcdC8qXG4gXHQgKiBUaGUgZXh0NCBqb3VybmFsIChqYmQyKSBjYW4gc3VibWl0IGEgYnVmZmVyX2hlYWQgaXQgZGlyZWN0bHkgY3JlYXRlZFxuLVx0ICogZm9yIGEgbm9uLXBhZ2VjYWNoZSBwYWdlLiAgZnNjcnlwdCBkb2VzbiYjMzk7dCBjYXJlIGFib3V0IHRoZXNlLlxuJiM0MztcdCAqIGZvciBhIG5vbi1wYWdlY2FjaGUgZm9saW8uICBmc2NyeXB0IGRvZXNuJiMzOTt0IGNhcmUgYWJvdXQgdGhlc2UuXG4gXHQgKi9cbiBcdGlmICghbWFwcGluZylcbiBcdFx0cmV0dXJuO1xuQEAgLTEyMTYsNyAmIzQzOzEyMjQsNyBAQCBzdGF0aWMgdm9pZCBiaF9scnVfaW5zdGFsbChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuIFxuIFx0LypcbiBcdCAqIHRoZSByZWZjb3VudCBvZiBidWZmZXJfaGVhZCBpbiBiaF9scnUgcHJldmVudHMgZHJvcHBpbmcgdGhlXG4tXHQgKiBhdHRhY2hlZCBwYWdlKGkuZS4sIHRyeV90b19mcmVlX2J1ZmZlcnMpIHNvIGl0IGNvdWxkIGNhdXNlXG4mIzQzO1x0ICogYXR0YWNoZWQgZm9saW8gKGkuZS4sIHRyeV90b19mcmVlX2J1ZmZlcnMpIHNvIGl0IGNvdWxkIGNhdXNlXG4gXHQgKiBmYWlsaW5nIHBhZ2UgbWlncmF0aW9uLlxuIFx0ICogU2tpcCBwdXR0aW5nIHVwY29taW5nIGJoIGludG8gYmhfbHJ1IHVudGlsIG1pZ3JhdGlvbiBpcyBkb25lLlxuIFx0ICovXG5AQCAtMTI4MCw3ICYjNDM7MTI4OCw3IEBAIGxvb2t1cF9iaF9scnUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3QgYmxvY2ssIHVuc2lnbmVkIHNpemUpXG4gICogUGVyZm9ybSBhIHBhZ2VjYWNoZSBsb29rdXAgZm9yIHRoZSBtYXRjaGluZyBidWZmZXIuICBJZiBpdCYjMzk7cyB0aGVyZSwgcmVmcmVzaFxuICAqIGl0IGluIHRoZSBMUlUgYW5kIG1hcmsgaXQgYXMgYWNjZXNzZWQuICBJZiBpdCBpcyBub3QgcHJlc2VudCB0aGVuIHJldHVyblxuICAqIE5VTEwuIEF0b21pYyBjb250ZXh0IGNhbGxlcnMgbWF5IGFsc28gcmV0dXJuIE5VTEwgaWYgdGhlIGJ1ZmZlciBpcyBiZWluZ1xuLSAqIG1pZ3JhdGVkOyBzaW1pbGFybHkgdGhlIHBhZ2UgaXMgbm90IG1hcmtlZCBhY2Nlc3NlZCBlaXRoZXIuXG4mIzQzOyAqIG1pZ3JhdGVkOyBzaW1pbGFybHkgdGhlIGZvbGlvIGlzIG5vdCBtYXJrZWQgYWNjZXNzZWQgZWl0aGVyLlxuICAqL1xuIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKlxuIGZpbmRfZ2V0X2Jsb2NrX2NvbW1vbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBibG9jayxcbkBAIC0xMjg5LDcgJiM0MzsxMjk3LDcgQEAgZmluZF9nZXRfYmxvY2tfY29tbW9uKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLFxuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IGxvb2t1cF9iaF9scnUoYmRldiwgYmxvY2ssIHNpemUpO1xuIFxuIFx0aWYgKGJoID09IE5VTEwpIHtcbi1cdFx0LyogX19maW5kX2dldF9ibG9ja19zbG93IHdpbGwgbWFyayB0aGUgcGFnZSBhY2Nlc3NlZCAqL1xuJiM0MztcdFx0LyogX19maW5kX2dldF9ibG9ja19zbG93IHdpbGwgbWFyayB0aGUgZm9saW8gYWNjZXNzZWQgKi9cbiBcdFx0YmggPSBfX2ZpbmRfZ2V0X2Jsb2NrX3Nsb3coYmRldiwgYmxvY2ssIGF0b21pYyk7XG4gXHRcdGlmIChiaClcbiBcdFx0XHRiaF9scnVfaW5zdGFsbChiaCk7XG5AQCAtMTQ3NSwxNSAmIzQzOzE0ODMsMTQgQEAgdm9pZCBmb2xpb19zZXRfYmgoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiB9XG4gRVhQT1JUX1NZTUJPTChmb2xpb19zZXRfYmgpO1xuIFxuLS8qXG4tICogQ2FsbGVkIHdoZW4gdHJ1bmNhdGluZyBhIGJ1ZmZlciBvbiBhIHBhZ2UgY29tcGxldGVseS5cbi0gKi9cbi1cbiAvKiBCaXRzIHRoYXQgYXJlIGNsZWFyZWQgZHVyaW5nIGFuIGludmFsaWRhdGUgKi9cbiAjZGVmaW5lIEJVRkZFUl9GTEFHU19ESVNDQVJEIFxcXG4gXHQoMSBcdTAwM2NcdTAwM2MgQkhfTWFwcGVkIHwgMSBcdTAwM2NcdTAwM2MgQkhfTmV3IHwgMSBcdTAwM2NcdTAwM2MgQkhfUmVxIHwgXFxcbiBcdCAxIFx1MDAzY1x1MDAzYyBCSF9EZWxheSB8IDEgXHUwMDNjXHUwMDNjIEJIX1Vud3JpdHRlbilcbiBcbiYjNDM7LypcbiYjNDM7ICogQ2FsbGVkIHdoZW4gdHJ1bmNhdGluZyBhIGJ1ZmZlciBvbiBhIGZvbGlvIGNvbXBsZXRlbHkuXG4mIzQzOyAqL1xuIHN0YXRpYyB2b2lkIGRpc2NhcmRfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgYl9zdGF0ZTtcbkBAIC0xNjExLDkgJiM0MzsxNjE4LDcgQEAgRVhQT1JUX1NZTUJPTChjcmVhdGVfZW1wdHlfYnVmZmVycyk7XG4gICogbW9tZW50IHdoZW4gc29tZXRoaW5nIHdpbGwgZXhwbGljaXRseSBtYXJrIHRoZSBidWZmZXIgZGlydHkgKGhvcGVmdWxseSB0aGF0XG4gICogd2lsbCBub3QgaGFwcGVuIHVudGlsIHdlIHdpbGwgZnJlZSB0aGF0IGJsb2NrIDstKSBXZSBkb24mIzM5O3QgZXZlbiBuZWVkIHRvIG1hcmtcbiAgKiBpdCBub3QtdXB0b2RhdGUgLSBub2JvZHkgY2FuIGV4cGVjdCBhbnl0aGluZyBmcm9tIGEgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlclxuLSAqIGFueXdheS4gV2UgdXNlZCB0byB1c2UgdW5tYXBfYnVmZmVyKCkgZm9yIHN1Y2ggaW52YWxpZGF0aW9uLCBidXQgdGhhdCB3YXNcbi0gKiB3cm9uZy4gV2UgZGVmaW5pdGVseSBkb24mIzM5O3Qgd2FudCB0byBtYXJrIHRoZSBhbGlhcyB1bm1hcHBlZCwgZm9yIGV4YW1wbGUgLSBpdFxuLSAqIHdvdWxkIGNvbmZ1c2UgYW55b25lIHdobyBtaWdodCBwaWNrIGl0IHdpdGggYnJlYWQoKSBhZnRlcndhcmRzLi4uXG4mIzQzOyAqIGFueXdheS5cbiAgKlxuICAqIEFsc28uLiAgTm90ZSB0aGF0IGJmb3JnZXQoKSBkb2VzbiYjMzk7dCBsb2NrIHRoZSBidWZmZXIuICBTbyB0aGVyZSBjYW4gYmVcbiAgKiB3cml0ZW91dCBJL08gZ29pbmcgb24gYWdhaW5zdCByZWNlbnRseS1mcmVlZCBidWZmZXJzLiAgV2UgZG9uJiMzOTt0IHdhaXQgb24gdGhhdFxuQEAgLTE2NDksNyAmIzQzOzE2NTQsNyBAQCB2b2lkIGNsZWFuX2JkZXZfYWxpYXNlcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBibG9jaywgc2VjdG9yX3QgbGVuKVxuIFx0XHRcdC8qIFJlY2hlY2sgd2hlbiB0aGUgZm9saW8gaXMgbG9ja2VkIHdoaWNoIHBpbnMgYmhzICovXG4gXHRcdFx0aGVhZCA9IGZvbGlvX2J1ZmZlcnMoZm9saW8pO1xuIFx0XHRcdGlmICghaGVhZClcbi1cdFx0XHRcdGdvdG8gdW5sb2NrX3BhZ2U7XG4mIzQzO1x0XHRcdFx0Z290byB1bmxvY2tfZm9saW87XG4gXHRcdFx0YmggPSBoZWFkO1xuIFx0XHRcdGRvIHtcbiBcdFx0XHRcdGlmICghYnVmZmVyX21hcHBlZChiaCkgfHwgKGJoLVx1MDAzZWJfYmxvY2tuciBcdTAwM2MgYmxvY2spKVxuQEAgLTE2NjIsNyAmIzQzOzE2NjcsNyBAQCB2b2lkIGNsZWFuX2JkZXZfYWxpYXNlcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBibG9jaywgc2VjdG9yX3QgbGVuKVxuIG5leHQ6XG4gXHRcdFx0XHRiaCA9IGJoLVx1MDAzZWJfdGhpc19wYWdlO1xuIFx0XHRcdH0gd2hpbGUgKGJoICE9IGhlYWQpO1xuLXVubG9ja19wYWdlOlxuJiM0Mzt1bmxvY2tfZm9saW86XG4gXHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdFx0fVxuIFx0XHRmb2xpb19iYXRjaF9yZWxlYXNlKFx1MDAyNmZiYXRjaCk7XG5AQCAtMTcxMCw3ICYjNDM7MTcxNSw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmZvbGlvX2NyZWF0ZV9idWZmZXJzKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gICpcbiAgKiBJZiBibG9ja193cml0ZV9mdWxsX2ZvbGlvKCkgaXMgY2FsbGVkIGZvciByZWd1bGFyIHdyaXRlYmFja1xuICAqICh3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfTk9ORSkgdGhlbiBpdCB3aWxsIHJlZGlydHkgYSBmb2xpbyB3aGljaFxuLSAqIGhhcyBhIGxvY2tlZCBidWZmZXIuICAgVGhpcyBvbmx5IGNhbiBoYXBwZW4gaWYgc29tZW9uZSBoYXMgd3JpdHRlblxuJiM0MzsgKiBoYXMgYSBsb2NrZWQgYnVmZmVyLiAgIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGlmIHNvbWVvbmUgaGFzIHdyaXR0ZW5cbiAgKiB0aGUgYnVmZmVyIGRpcmVjdGx5LCB3aXRoIGJoX3N1Ym1pdCgpLiAgQXQgdGhlIGFkZHJlc3Nfc3BhY2UgbGV2ZWxcbiAgKiB0aGUgZm9saW8gd3JpdGViYWNrIGZsYWcgcHJldmVudHMgdGhpcyBjb250ZW50aW9uIGZyb20gb2NjdXJyaW5nLlxuICAqXG5AQCAtMjIxMyw5ICYjNDM7MjIxOCw5IEBAIGludCBnZW5lcmljX3dyaXRlX2VuZChjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0aWYgKG9sZF9zaXplIFx1MDAzYyBwb3MpXG4gXHRcdHBhZ2VjYWNoZV9pc2l6ZV9leHRlbmRlZChpbm9kZSwgb2xkX3NpemUsIHBvcyk7XG4gXHQvKlxuLVx0ICogRG9uJiMzOTt0IG1hcmsgdGhlIGlub2RlIGRpcnR5IHVuZGVyIHBhZ2UgbG9jay4gRmlyc3QsIGl0IHVubmVjZXNzYXJpbHlcbi1cdCAqIG1ha2VzIHRoZSBob2xkaW5nIHRpbWUgb2YgcGFnZSBsb2NrIGxvbmdlci4gU2Vjb25kLCBpdCBmb3JjZXMgbG9ja1xuLVx0ICogb3JkZXJpbmcgb2YgcGFnZSBsb2NrIGFuZCB0cmFuc2FjdGlvbiBzdGFydCBmb3Igam91cm5hbGluZ1xuJiM0MztcdCAqIERvbiYjMzk7dCBtYXJrIHRoZSBpbm9kZSBkaXJ0eSB1bmRlciBmb2xpbyBsb2NrLiBGaXJzdCwgaXQgdW5uZWNlc3NhcmlseVxuJiM0MztcdCAqIG1ha2VzIHRoZSBob2xkaW5nIHRpbWUgb2YgZm9saW8gbG9jayBsb25nZXIuIFNlY29uZCwgaXQgZm9yY2VzIGxvY2tcbiYjNDM7XHQgKiBvcmRlcmluZyBvZiBmb2xpbyBsb2NrIGFuZCB0cmFuc2FjdGlvbiBzdGFydCBmb3Igam91cm5hbGluZ1xuIFx0ICogZmlsZXN5c3RlbXMuXG4gXHQgKi9cbiBcdGlmIChpX3NpemVfY2hhbmdlZClcbkBAIC0yMzQxLDcgJiM0MzsyMzQ2LDcgQEAgaW50IGJsb2NrX3JlYWRfZnVsbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZXRfYmxvY2tfdCAqZ2V0X2Jsb2NrKVxuIFx0XHQgKiBCSF9Bc3luY19SZWFkIHRlbGxzIGVuZF9idWZmZXJfYXN5bmNfcmVhZCgpIHRoYXQgdGhpc1xuIFx0XHQgKiBidWZmZXIgaXMgbm90IHVuZGVyIGFzeW5jIEkvTy5cbiBcdFx0ICpcbi1cdFx0ICogVGhlIGZvbGlvIGNvbWVzIHVubG9ja2VkIHdoZW4gaXQgaGFzIG5vIGxvY2tlZFxuJiM0MztcdFx0ICogVGhlIGZvbGlvIGlzIHVubG9ja2VkIHdoZW4gaXQgaGFzIG5vIGxvY2tlZFxuIFx0XHQgKiBidWZmZXJfYXN5bmMgYnVmZmVycyBsZWZ0LlxuIFx0XHQgKlxuIFx0XHQgKiBUaGUgZm9saW8gbG9jayBwcmV2ZW50cyBhbnlvbmUgc3RhcnRpbmcgbmV3IGFzeW5jXG5AQCAtMjQ1MSw3ICYjNDM7MjQ1Niw3IEBAIHN0YXRpYyBpbnQgY29udF9leHBhbmRfemVybyhjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXHRcdH1cbiBcdH1cbiBcbi1cdC8qIHBhZ2UgY292ZXJzIHRoZSBib3VuZGFyeSwgZmluZCB0aGUgYm91bmRhcnkgb2Zmc2V0ICovXG4mIzQzO1x0LyogZm9saW8gY3Jvc3NlcyB0aGUgYm91bmRhcnksIGZpbmQgdGhlIGJvdW5kYXJ5IG9mZnNldCAqL1xuIFx0aWYgKGluZGV4ID09IGN1cmlkeCkge1xuIFx0XHR6ZXJvZnJvbSA9IGN1cnBvcyBcdTAwMjYgflBBR0VfTUFTSztcbiBcdFx0LyogaWYgd2Ugd2lsbCBleHBhbmQgdGhlIHRoaW5nIGxhc3QgYmxvY2sgd2lsbCBiZSBmaWxsZWQgKi9cbkBAIC0yNTA5LDE4ICYjNDM7MjUxNCwxOCBAQCBFWFBPUlRfU1lNQk9MKGNvbnRfd3JpdGVfYmVnaW4pO1xuIFxuIC8qXG4gICogYmxvY2tfcGFnZV9ta3dyaXRlKCkgaXMgbm90IGFsbG93ZWQgdG8gY2hhbmdlIHRoZSBmaWxlIHNpemUgYXMgaXQgZ2V0c1xuLSAqIGNhbGxlZCBmcm9tIGEgcGFnZSBmYXVsdCBoYW5kbGVyIHdoZW4gYSBwYWdlIGlzIGZpcnN0IGRpcnRpZWQuIEhlbmNlIHdlIG11c3Rcbi0gKiBiZSBjYXJlZnVsIHRvIGNoZWNrIGZvciBFT0YgY29uZGl0aW9ucyBoZXJlLiBXZSBzZXQgdGhlIHBhZ2UgdXAgY29ycmVjdGx5XG4tICogZm9yIGEgd3JpdHRlbiBwYWdlIHdoaWNoIG1lYW5zIHdlIGdldCBFTk9TUEMgY2hlY2tpbmcgd2hlbiB3cml0aW5nIGludG9cbiYjNDM7ICogY2FsbGVkIGZyb20gYSBwYWdlIGZhdWx0IGhhbmRsZXIgd2hlbiBhIGZvbGlvIGlzIGZpcnN0IGRpcnRpZWQuIEhlbmNlIHdlIG11c3RcbiYjNDM7ICogYmUgY2FyZWZ1bCB0byBjaGVjayBmb3IgRU9GIGNvbmRpdGlvbnMgaGVyZS4gV2Ugc2V0IHRoZSBmb2xpbyB1cCBjb3JyZWN0bHlcbiYjNDM7ICogZm9yIGEgd3JpdHRlbiBmb2xpbyB3aGljaCBtZWFucyB3ZSBnZXQgRU5PU1BDIGNoZWNraW5nIHdoZW4gd3JpdGluZyBpbnRvXG4gICogaG9sZXMgYW5kIGNvcnJlY3QgZGVsYWxsb2MgYW5kIHVud3JpdHRlbiBleHRlbnQgbWFwcGluZyBvbiBmaWxlc3lzdGVtcyB0aGF0XG4gICogc3VwcG9ydCB0aGVzZSBmZWF0dXJlcy5cbiAgKlxuICAqIFdlIGFyZSBub3QgYWxsb3dlZCB0byB0YWtlIHRoZSBpX3J3c2VtIGhlcmUgc28gd2UgaGF2ZSB0byBwbGF5IGdhbWVzIHRvXG4tICogcHJvdGVjdCBhZ2FpbnN0IHRydW5jYXRlIHJhY2VzIGFzIHRoZSBwYWdlIGNvdWxkIG5vdyBiZSBiZXlvbmQgRU9GLiAgQmVjYXVzZVxuLSAqIHRydW5jYXRlIHdyaXRlcyB0aGUgaW5vZGUgc2l6ZSBiZWZvcmUgcmVtb3ZpbmcgcGFnZXMsIG9uY2Ugd2UgaGF2ZSB0aGVcbi0gKiBwYWdlIGxvY2sgd2UgY2FuIGRldGVybWluZSBzYWZlbHkgaWYgdGhlIHBhZ2UgaXMgYmV5b25kIEVPRi4gSWYgaXQgaXMgbm90XG4tICogYmV5b25kIEVPRiwgdGhlbiB0aGUgcGFnZSBpcyBndWFyYW50ZWVkIHNhZmUgYWdhaW5zdCB0cnVuY2F0aW9uIHVudGlsIHdlXG4tICogdW5sb2NrIHRoZSBwYWdlLlxuJiM0MzsgKiBwcm90ZWN0IGFnYWluc3QgdHJ1bmNhdGUgcmFjZXMgYXMgdGhlIGZvbGlvIGNvdWxkIG5vdyBiZSBiZXlvbmQgRU9GLiAgQmVjYXVzZVxuJiM0MzsgKiB0cnVuY2F0ZSB3cml0ZXMgdGhlIGlub2RlIHNpemUgYmVmb3JlIHJlbW92aW5nIGZvbGlvcywgb25jZSB3ZSBoYXZlIHRoZVxuJiM0MzsgKiBmb2xpbyBsb2NrIHdlIGNhbiBkZXRlcm1pbmUgc2FmZWx5IGlmIHRoZSBmb2xpbyBpcyBiZXlvbmQgRU9GLiBJZiBpdCBpcyBub3RcbiYjNDM7ICogYmV5b25kIEVPRiwgdGhlbiB0aGUgZm9saW8gaXMgZ3VhcmFudGVlZCBzYWZlIGFnYWluc3QgdHJ1bmNhdGlvbiB1bnRpbCB3ZVxuJiM0MzsgKiB1bmxvY2sgdGhlIGZvbGlvLlxuICAqXG4gICogRGlyZWN0IGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbiBzaG91bGQgcHJvdGVjdCBhZ2FpbnN0IGZpbGVzeXN0ZW0gZnJlZXppbmdcbiAgKiB1c2luZyBzYl9zdGFydF9wYWdlZmF1bHQoKSAtIHNiX2VuZF9wYWdlZmF1bHQoKSBmdW5jdGlvbnMuXG5AQCAtMjUzOCw3ICYjNDM7MjU0Myw3IEBAIGludCBibG9ja19wYWdlX21rd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuIFx0c2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbiBcdGlmICgoZm9saW8tXHUwMDNlbWFwcGluZyAhPSBpbm9kZS1cdTAwM2VpX21hcHBpbmcpIHx8XG4gXHQgICAgKGZvbGlvX3Bvcyhmb2xpbykgXHUwMDNlPSBzaXplKSkge1xuLVx0XHQvKiBXZSBvdmVybG9hZCBFRkFVTFQgdG8gbWVhbiBwYWdlIGdvdCB0cnVuY2F0ZWQgKi9cbiYjNDM7XHRcdC8qIFdlIG92ZXJsb2FkIEVGQVVMVCB0byBtZWFuIGZvbGlvIGdvdCB0cnVuY2F0ZWQgKi9cbiBcdFx0cmV0ID0gLUVGQVVMVDtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaCBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaFxuaW5kZXggZmQyYzcxMTVjMDU0Mi4uMWQ1NWY3NzcwY2FkMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oXG5AQCAtMzM4LDIwICYjNDM7MzM4LDU4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBiZm9yZ2V0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4gXHRcdF9fYmZvcmdldChiaCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGJ1ZmZlcl9oZWFkICpcbi1zYl9icmVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzZWN0b3JfdCBibG9jaylcbiYjNDM7LyoqXG4mIzQzOyAqIHNiX2JyZWFkIC0gUmVhZCBhIGJsb2NrLlxuJiM0MzsgKiBAc2I6IFRoZSBzdXBlcmJsb2NrIHRvIHJlYWQgZnJvbS5cbiYjNDM7ICogQGJsb2NrOiBCbG9jayBudW1iZXIgaW4gdW5pdHMgb2YgYmxvY2sgc2l6ZS5cbiYjNDM7ICpcbiYjNDM7ICogUmVhZCBhIHNwZWNpZmllZCBibG9jaywgYW5kIHJldHVybiB0aGUgYnVmZmVyIGhlYWQgdGhhdCByZWZlcnNcbiYjNDM7ICogdG8gaXQuICBUaGUgbWVtb3J5IGlzIGFsbG9jYXRlZCBmcm9tIHRoZSBtb3ZhYmxlIGFyZWEgc28gdGhhdCBpdCBjYW5cbiYjNDM7ICogYmUgbWlncmF0ZWQuICBUaGUgcmV0dXJuZWQgYnVmZmVyIGhlYWQgaGFzIGl0cyByZWZjb3VudCBpbmNyZWFzZWQuXG4mIzQzOyAqIFRoZSBjYWxsZXIgc2hvdWxkIGNhbGwgYnJlbHNlKCkgd2hlbiBpdCBoYXMgZmluaXNoZWQgd2l0aCB0aGUgYnVmZmVyLlxuJiM0MzsgKlxuJiM0MzsgKiBDb250ZXh0OiBNYXkgc2xlZXAgd2FpdGluZyBmb3IgSS9PLlxuJiM0MzsgKiBSZXR1cm46IE5VTEwgaWYgdGhlIGJsb2NrIHdhcyB1bnJlYWRhYmxlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZVxuJiM0MztzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNiX2JyZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHNlY3Rvcl90IGJsb2NrKVxuIHtcbiBcdHJldHVybiBfX2JyZWFkX2dmcChzYi1cdTAwM2VzX2JkZXYsIGJsb2NrLCBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSwgX19HRlBfTU9WQUJMRSk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGJ1ZmZlcl9oZWFkICpcbi1zYl9icmVhZF91bm1vdmFibGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc2VjdG9yX3QgYmxvY2spXG4mIzQzOy8qKlxuJiM0MzsgKiBzYl9icmVhZF91bm1vdmFibGUgLSBSZWFkIGEgYmxvY2suXG4mIzQzOyAqIEBzYjogVGhlIHN1cGVyYmxvY2sgdG8gcmVhZCBmcm9tLlxuJiM0MzsgKiBAYmxvY2s6IEJsb2NrIG51bWJlciBpbiB1bml0cyBvZiBibG9jayBzaXplLlxuJiM0MzsgKlxuJiM0MzsgKiBSZWFkIGEgc3BlY2lmaWVkIGJsb2NrLCBhbmQgcmV0dXJuIHRoZSBidWZmZXIgaGVhZCB0aGF0IHJlZmVycyB0byBpdC5cbiYjNDM7ICogVGhlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgZnJvbSB0aGUgdW5tb3ZhYmxlIGFyZWEgc28gdGhhdCBwb2ludGVycyBpbnRvXG4mIzQzOyAqIGl0IHJlbWFpbiB2YWxpZCBhZnRlciBjb21wYWN0aW9uIHJ1bnMuICBUaGUgcmV0dXJuZWQgYnVmZmVyIGhlYWQgaGFzXG4mIzQzOyAqIGl0cyByZWZjb3VudCBpbmNyZWFzZWQuICBUaGUgY2FsbGVyIHNob3VsZCBjYWxsIGJyZWxzZSgpIHdoZW4gaXQgaGFzXG4mIzQzOyAqIGZpbmlzaGVkIHdpdGggdGhlIGJ1ZmZlci5cbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogTWF5IHNsZWVwIHdhaXRpbmcgZm9yIEkvTy5cbiYjNDM7ICogUmV0dXJuOiBOVUxMIGlmIHRoZSBibG9jayB3YXMgdW5yZWFkYWJsZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmVcbiYjNDM7c3RydWN0IGJ1ZmZlcl9oZWFkICpzYl9icmVhZF91bm1vdmFibGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc2VjdG9yX3QgYmxvY2spXG4ge1xuIFx0cmV0dXJuIF9fYnJlYWRfZ2ZwKHNiLVx1MDAzZXNfYmRldiwgYmxvY2ssIHNiLVx1MDAzZXNfYmxvY2tzaXplLCAwKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkXG4tc2JfYnJlYWRhaGVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzZWN0b3JfdCBibG9jaylcbiYjNDM7LyoqXG4mIzQzOyAqIHNiX2JyZWFkYWhlYWQgLSBTdGFydCByZWFkYWhlYWQuXG4mIzQzOyAqIEBzYjogU3VwZXJibG9jayBpZGVudGlmeWluZyB0aGUgYmxvY2sgZGV2aWNlLlxuJiM0MzsgKiBAYmxvY2s6IFRoZSBibG9jayB0byByZWFkLlxuJiM0MzsgKlxuJiM0MzsgKiBSZWFkIHRoaXMgYmxvY2suICBUaGUgSS9PIHdpbGwgYmUgZmxhZ2dlZCBhcyBiZWluZyByZWFkYWhlYWQgcmF0aGVyXG4mIzQzOyAqIHRoYW4gaW1tZWRpYXRlIHJlYWQsIGJ1dCAodW5saWtlIHRoZSBwYWdlIGNhY2hlKSwgc3Vycm91bmRpbmcgYmxvY2tzXG4mIzQzOyAqIHdpbGwgbm90IGJlIHJlYWQuXG4mIzQzOyAqXG4mIzQzOyAqIENvbnRleHQ6IE1heSBzbGVlcCBpbiBvcmRlciB0byBhbGxvY2F0ZSBtZW1vcnkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lXG4mIzQzO3ZvaWQgc2JfYnJlYWRhaGVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzZWN0b3JfdCBibG9jaylcbiB7XG4gXHRfX2JyZWFkYWhlYWQoc2ItXHUwMDNlc19iZGV2LCBibG9jaywgc2ItXHUwMDNlc19ibG9ja3NpemUpO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMToxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGRvY3VtZW50YXRpb24gdXBkYXRlcywga2VybmVsZG9jIGFkZGl0aW9ucywgY29tbWVudCBjb252ZXJzaW9ucyAoZnJvbSBwYWdlIHRvIGZvbGlvIHRlcm1pbm9sb2d5KSwgYW5kIGEgbGFiZWwgcmVuYW1lICh1bmxvY2tfcGFnZSB0byB1bmxvY2tfZm9saW8pIHdpdGggbm8gZnVuY3Rpb25hbCBjb2RlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzhlNzJlNmYyZmI2YjE0YThhZjg0ZTRiM2U5MGVhODI3ZDMxOGYxMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDI4IDIxOjE4OjI4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QKaW5kZXggNjA4ODBlYjBjNDlkMS4uZGU5NmI2NzQ1NjAwYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0CkBAIC0zNDgsNyAmIzQzOzM0OCw3IEBAIHNpbXBseSBvZiByZXR1cm4gMS4gIE5vdGUgdGhhdCBhbGwgYWN0dWFsIGV2aWN0aW9uIHdvcmsgaXMgZG9uZSBieSBjYWxsZXIgYWZ0ZXIKIEFzIGJlZm9yZSwgY2xlYXJfaW5vZGUoKSBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2Ugb24gZWFjaCBjYWxsIG9mCiAtJmd0O2V2aWN0X2lub2RlKCkgKGFzIGl0IHVzZWQgdG8gYmUgZm9yIGVhY2ggY2FsbCBvZiAtJmd0O2RlbGV0ZV9pbm9kZSgpKS4gIFVubGlrZQogYmVmb3JlLCBpZiB5b3UgYXJlIHVzaW5nIGlub2RlLWFzc29jaWF0ZWQgbWV0YWRhdGEgYnVmZmVycyAoaS5lLgotbWFya19idWZmZXJfZGlydHlfaW5vZGUoKSksIGl0JiMzOTtzIHlvdXIgcmVzcG9uc2liaWxpdHkgdG8gY2FsbAomIzQzO21tYl9tYXJrX2J1ZmZlcl9kaXJ0eSgpKSwgaXQmIzM5O3MgeW91ciByZXNwb25zaWJpbGl0eSB0byBjYWxsCiBpbnZhbGlkYXRlX2lub2RlX2J1ZmZlcnMoKSBiZWZvcmUgY2xlYXJfaW5vZGUoKS4KIAogTk9URTogY2hlY2tpbmcgaV9ubGluayBpbiB0aGUgYmVnaW5uaW5nIG9mIC0mZ3Q7d3JpdGVfaW5vZGUoKSBhbmQgYmFpbGluZyBvdXQKZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmMKaW5kZXggZWQ5NjZmYTczYjFiYS4uYzkzNDJhZWI4Y2RmNiAxMDA2NDQKLS0tIGEvZnMvYnVmZmVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnVmZmVyLmMKQEAgLTI2NSw3ICYjNDM7MjY1LDcgQEAgX19maW5kX2dldF9ibG9ja19zbG93KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLCBib29sIGF0b21pYykKIAkJYmggPSBiaC0mZ3Q7Yl90aGlzX3BhZ2U7CiAJfSB3aGlsZSAoYmggIT0gaGVhZCk7CiAKLQkvKiB3ZSBtaWdodCBiZSBoZXJlIGJlY2F1c2Ugc29tZSBvZiB0aGUgYnVmZmVycyBvbiB0aGlzIHBhZ2UgYXJlCiYjNDM7CS8qIHdlIG1pZ2h0IGJlIGhlcmUgYmVjYXVzZSBzb21lIG9mIHRoZSBidWZmZXJzIG9uIHRoaXMgZm9saW8gYXJlCiAJICogbm90IG1hcHBlZC4gIFRoaXMgaXMgZHVlIHRvIHZhcmlvdXMgcmFjZXMgYmV0d2VlbgogCSAqIGZpbGUgaW8gb24gdGhlIGJsb2NrIGRldmljZSBhbmQgZ2V0YmxrLiAgSXQgZ2V0cyBkZWFsdCB3aXRoCiAJICogZWxzZXdoZXJlLCBkb24mIzM5O3QgYnVmZmVyX2Vycm9yIGlmIHdlIGhhZCBzb21lIHVubWFwcGVkIGJ1ZmZlcnMKQEAgLTMxMSw3ICYjNDM7MzExLDcgQEAgc3RhdGljIHZvaWQgZW5kX2J1ZmZlcl9hc3luY19yZWFkKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB1cHRvZGF0ZSkKIAkvKgogCSAqIEJlIF92ZXJ5XyBjYXJlZnVsIGZyb20gaGVyZSBvbi4gQmFkIHRoaW5ncyBjYW4gaGFwcGVuIGlmCiAJICogdHdvIGJ1ZmZlciBoZWFkcyBlbmQgSU8gYXQgYWxtb3N0IHRoZSBzYW1lIHRpbWUgYW5kIGJvdGgKLQkgKiBkZWNpZGUgdGhhdCB0aGUgcGFnZSBpcyBub3cgY29tcGxldGVseSBkb25lLgomIzQzOwkgKiBkZWNpZGUgdGhhdCB0aGUgZm9saW8gaXMgbm93IGNvbXBsZXRlbHkgZG9uZS4KIAkgKi8KIAlmaXJzdCA9IGZvbGlvX2J1ZmZlcnMoZm9saW8pOwogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7Zmlyc3QtJmd0O2JfdXB0b2RhdGVfbG9jaywgZmxhZ3MpOwpAQCAtNTIwLDggJiM0Mzs1MjAsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChtbWJfaGFzX2J1ZmZlcnMpOwogICoKICAqIERvIHRoaXMgaW4gdHdvIG1haW4gc3RhZ2VzOiBmaXJzdCB3ZSBjb3B5IGRpcnR5IGJ1ZmZlcnMgdG8gYQogICogdGVtcG9yYXJ5IGlub2RlIGxpc3QsIHF1ZXVlaW5nIHRoZSB3cml0ZXMgYXMgd2UgZ28uIFRoZW4gd2UgY2xlYW4KLSAqIHVwLCB3YWl0aW5nIGZvciB0aG9zZSB3cml0ZXMgdG8gY29tcGxldGUuIG1hcmtfYnVmZmVyX2RpcnR5X2lub2RlKCkKLSAqIGRvZXNuJiMzOTt0IHRvdWNoIGJfYXNzb2NfYnVmZmVycyBsaXN0IGlmIGJfbW1iIGlzIG5vdCBOVUxMIHNvIHdlIGFyZSBzdXJlIHRoZQomIzQzOyAqIHVwLCB3YWl0aW5nIGZvciB0aG9zZSB3cml0ZXMgdG8gY29tcGxldGUuIG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eSgpCiYjNDM7ICogZG9lc24mIzM5O3QgdG91Y2ggYl9hc3NvY19idWZmZXJzIGxpc3QgaWYgYl9tbWIgaXMgc2V0IHNvIHdlIGFyZSBzdXJlIHRoZQogICogYnVmZmVyIHN0YXlzIG9uIG91ciBsaXN0IHVudGlsIElPIGNvbXBsZXRlcyAoYXQgd2hpY2ggcG9pbnQgaXQgY2FuIGJlCiAgKiByZWFwZWQpLgogICovCkBAIC01NDIsNyAmIzQzOzU0Miw3IEBAIGludCBtbWJfc3luYyhzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYikKIAkJYmggPSBCSF9FTlRSWShtbWItJmd0O2xpc3QubmV4dCk7CiAJCVdBUk5fT05fT05DRShiaC0mZ3Q7Yl9tbWIgIT0gbW1iKTsKIAkJX19yZW1vdmVfYXNzb2NfcXVldWUobW1iLCBiaCk7Ci0JCS8qIEF2b2lkIHJhY2Ugd2l0aCBtYXJrX2J1ZmZlcl9kaXJ0eV9pbm9kZSgpIHdoaWNoIGRvZXMKJiM0MzsJCS8qIEF2b2lkIHJhY2Ugd2l0aCBtbWJfbWFya19idWZmZXJfZGlydHkoKSB3aGljaCBkb2VzCiAJCSAqIGEgbG9ja2xlc3MgY2hlY2sgYW5kIHdlIHJlbHkgb24gc2VlaW5nIHRoZSBkaXJ0eSBiaXQgKi8KIAkJc21wX21iKCk7CiAJCWlmIChidWZmZXJfZGlydHkoYmgpIHx8IGJ1ZmZlcl9sb2NrZWQoYmgpKSB7CkBAIC01ODAsNyAmIzQzOzU4MCw3IEBAIGludCBtbWJfc3luYyhzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYikKIAkJYmggPSBCSF9FTlRSWSh0bXAucHJldik7CiAJCWdldF9iaChiaCk7CiAJCV9fcmVtb3ZlX2Fzc29jX3F1ZXVlKG1tYiwgYmgpOwotCQkvKiBBdm9pZCByYWNlIHdpdGggbWFya19idWZmZXJfZGlydHlfaW5vZGUoKSB3aGljaCBkb2VzCiYjNDM7CQkvKiBBdm9pZCByYWNlIHdpdGggbW1iX21hcmtfYnVmZmVyX2RpcnR5KCkgd2hpY2ggZG9lcwogCQkgKiBhIGxvY2tsZXNzIGNoZWNrIGFuZCB3ZSByZWx5IG9uIHNlZWluZyB0aGUgZGlydHkgYml0ICovCiAJCXNtcF9tYigpOwogCQlpZiAoYnVmZmVyX2RpcnR5KGJoKSkgewpAQCAtNjE4LDYgJiM0Mzs2MTgsMTQgQEAgdm9pZCB3cml0ZV9ib3VuZGFyeV9ibG9jayhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LAogCX0KIH0KIAomIzQzOy8qKgomIzQzOyAqIG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eSAtIE1hcmsgYSBtZXRhZGF0YSBidWZmZXIgZGlydHkuCiYjNDM7ICogQGJoOiBUaGUgYnVmZmVyIHRvIG1hcmsgZGlydHkuCiYjNDM7ICogQG1tYjogVGhlIGxpc3Qgb2YgYnVmZmVycyB0byBhZGQgdGhlIGJ1ZmZlciB0by4KJiM0MzsgKgomIzQzOyAqIE1hcmsgdGhlIGJ1ZmZlciBkaXJ0eSBhbmQgYWRkIGl0IHRvIHRoZSBsaXN0IGlmIGl0IGlzIG5vdCBhbHJlYWR5IG9uCiYjNDM7ICogYSBsaXN0LgomIzQzOyAqLwogdm9pZCBtbWJfbWFya19idWZmZXJfZGlydHkoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKIAkJCSAgIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iKQogewpAQCAtNjg2LDcgJiM0Mzs2OTQsNyBAQCBib29sIGJsb2NrX2RpcnR5X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCQl9IHdoaWxlIChiaCAhPSBoZWFkKTsKIAl9CiAJLyoKLQkgKiBMb2NrIG91dCBwYWdlJiMzOTtzIG1lbWNnIG1pZ3JhdGlvbiB0byBrZWVwIFBhZ2VEaXJ0eQomIzQzOwkgKiBMb2NrIG91dCBmb2xpbyYjMzk7cyBtZW1jZyBtaWdyYXRpb24gdG8ga2VlcCBmb2xpbyBkaXJ0eSBmbGFnCiAJICogc3luY2hyb25pemVkIHdpdGggcGVyLW1lbWNnIGRpcnR5IHBhZ2UgY291bnRlcnMuCiAJICovCiAJbmV3bHlfZGlydHkgPSAhZm9saW9fdGVzdF9zZXRfZGlydHkoZm9saW8pOwpAQCAtOTUyLDIzICYjNDM7OTYwLDIzIEBAIF9fZ2V0YmxrX3Nsb3coc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3QgYmxvY2ssCiB9CiAKIC8qCi0gKiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gZGlydHkgYnVmZmVycyBhbmQgZGlydHkgcGFnZXM6CiYjNDM7ICogVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGRpcnR5IGJ1ZmZlcnMgYW5kIGRpcnR5IGZvbGlvczoKICAqCi0gKiBXaGVuZXZlciBhIHBhZ2UgaGFzIGFueSBkaXJ0eSBidWZmZXJzLCB0aGUgcGFnZSYjMzk7cyBkaXJ0eSBiaXQgaXMgc2V0LCBhbmQKLSAqIHRoZSBwYWdlIGlzIHRhZ2dlZCBkaXJ0eSBpbiB0aGUgcGFnZSBjYWNoZS4KJiM0MzsgKiBXaGVuZXZlciBhIGZvbGlvIGhhcyBhbnkgZGlydHkgYnVmZmVycywgdGhlIGZvbGlvJiMzOTtzIGRpcnR5IGZsYWcgaXMgc2V0LCBhbmQKJiM0MzsgKiB0aGUgZm9saW8gaXMgdGFnZ2VkIGRpcnR5IGluIHRoZSBwYWdlIGNhY2hlLgogICoKICAqIEF0IGFsbCB0aW1lcywgdGhlIGRpcnRpbmVzcyBvZiB0aGUgYnVmZmVycyByZXByZXNlbnRzIHRoZSBkaXJ0aW5lc3Mgb2YKLSAqIHN1YnNlY3Rpb25zIG9mIHRoZSBwYWdlLiAgSWYgdGhlIHBhZ2UgaGFzIGJ1ZmZlcnMsIHRoZSBwYWdlIGRpcnR5IGJpdCBpcwomIzQzOyAqIHN1YnNlY3Rpb25zIG9mIHRoZSBmb2xpby4gIElmIHRoZSBmb2xpbyBoYXMgYnVmZmVycywgdGhlIGZvbGlvIGRpcnR5IGZsYWcgaXMKICAqIG1lcmVseSBhIGhpbnQgYWJvdXQgdGhlIHRydWUgZGlydHkgc3RhdGUuCiAgKgotICogV2hlbiBhIHBhZ2UgaXMgc2V0IGRpcnR5IGluIGl0cyBlbnRpcmV0eSwgYWxsIGl0cyBidWZmZXJzIGFyZSBtYXJrZWQgZGlydHkKLSAqIChpZiB0aGUgcGFnZSBoYXMgYnVmZmVycykuCiYjNDM7ICogV2hlbiBhIGZvbGlvIGlzIHNldCBkaXJ0eSBpbiBpdHMgZW50aXJldHksIGFsbCBpdHMgYnVmZmVycyBhcmUgbWFya2VkIGRpcnR5CiYjNDM7ICogKGlmIHRoZSBmb2xpbyBoYXMgYnVmZmVycykuCiAgKgotICogV2hlbiBhIGJ1ZmZlciBpcyBtYXJrZWQgZGlydHksIGl0cyBwYWdlIGlzIGRpcnRpZWQsIGJ1dCB0aGUgcGFnZSYjMzk7cyBvdGhlcgomIzQzOyAqIFdoZW4gYSBidWZmZXIgaXMgbWFya2VkIGRpcnR5LCBpdHMgZm9saW8gaXMgZGlydGllZCwgYnV0IHRoZSBmb2xpbyYjMzk7cyBvdGhlcgogICogYnVmZmVycyBhcmUgbm90LgogICoKICAqIEFsc28uICBXaGVuIGJsb2NrZGV2IGJ1ZmZlcnMgYXJlIGV4cGxpY2l0bHkgcmVhZCB3aXRoIGJyZWFkKCksIHRoZXkKLSAqIGluZGl2aWR1YWxseSBiZWNvbWUgdXB0b2RhdGUuICBCdXQgdGhlaXIgYmFja2luZyBwYWdlIHJlbWFpbnMgbm90CiYjNDM7ICogaW5kaXZpZHVhbGx5IGJlY29tZSB1cHRvZGF0ZS4gIEJ1dCB0aGVpciBiYWNraW5nIGZvbGlvIHJlbWFpbnMgbm90CiAgKiB1cHRvZGF0ZSAtIGV2ZW4gaWYgYWxsIG9mIGl0cyBidWZmZXJzIGFyZSB1cHRvZGF0ZS4gIEEgc3Vic2VxdWVudAogICogYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKCkgYWdhaW5zdCB0aGF0IGZvbGlvIHdpbGwgZGlzY292ZXIgYWxsIHRoZSB1cHRvZGF0ZQogICogYnVmZmVycywgd2lsbCBzZXQgdGhlIGZvbGlvIHVwdG9kYXRlIGFuZCB3aWxsIHBlcmZvcm0gbm8gSS9PLgpAQCAtOTc5LDcgJiM0Mzs5ODcsNyBAQCBfX2dldGJsa19zbG93KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLAogICogQGJoOiB0aGUgYnVmZmVyX2hlYWQgdG8gbWFyayBkaXJ0eQogICoKICAqIG1hcmtfYnVmZmVyX2RpcnR5KCkgd2lsbCBzZXQgdGhlIGRpcnR5IGJpdCBhZ2FpbnN0IHRoZSBidWZmZXIsIHRoZW4gc2V0Ci0gKiBpdHMgYmFja2luZyBwYWdlIGRpcnR5LCB0aGVuIHRhZyB0aGUgcGFnZSBhcyBkaXJ0eSBpbiB0aGUgcGFnZSBjYWNoZQomIzQzOyAqIGl0cyBiYWNraW5nIGZvbGlvIGRpcnR5LCB0aGVuIHRhZyB0aGUgZm9saW8gYXMgZGlydHkgaW4gdGhlIHBhZ2UgY2FjaGUKICAqIGFuZCB0aGVuIGF0dGFjaCB0aGUgYWRkcmVzc19zcGFjZSYjMzk7cyBpbm9kZSB0byBpdHMgc3VwZXJibG9jayYjMzk7cyBkaXJ0eQogICogaW5vZGUgbGlzdC4KICAqCkBAIC0xMDc0LDcgJiM0MzsxMDgyLDcgQEAgc3RhdGljIHZvaWQgYnVmZmVyX3NldF9jcnlwdG9fY3R4KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKIAogCS8qCiAJICogVGhlIGV4dDQgam91cm5hbCAoamJkMikgY2FuIHN1Ym1pdCBhIGJ1ZmZlcl9oZWFkIGl0IGRpcmVjdGx5IGNyZWF0ZWQKLQkgKiBmb3IgYSBub24tcGFnZWNhY2hlIHBhZ2UuICBmc2NyeXB0IGRvZXNuJiMzOTt0IGNhcmUgYWJvdXQgdGhlc2UuCiYjNDM7CSAqIGZvciBhIG5vbi1wYWdlY2FjaGUgZm9saW8uICBmc2NyeXB0IGRvZXNuJiMzOTt0IGNhcmUgYWJvdXQgdGhlc2UuCiAJICovCiAJaWYgKCFtYXBwaW5nKQogCQlyZXR1cm47CkBAIC0xMjE2LDcgJiM0MzsxMjI0LDcgQEAgc3RhdGljIHZvaWQgYmhfbHJ1X2luc3RhbGwoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIAogCS8qCiAJICogdGhlIHJlZmNvdW50IG9mIGJ1ZmZlcl9oZWFkIGluIGJoX2xydSBwcmV2ZW50cyBkcm9wcGluZyB0aGUKLQkgKiBhdHRhY2hlZCBwYWdlKGkuZS4sIHRyeV90b19mcmVlX2J1ZmZlcnMpIHNvIGl0IGNvdWxkIGNhdXNlCiYjNDM7CSAqIGF0dGFjaGVkIGZvbGlvIChpLmUuLCB0cnlfdG9fZnJlZV9idWZmZXJzKSBzbyBpdCBjb3VsZCBjYXVzZQogCSAqIGZhaWxpbmcgcGFnZSBtaWdyYXRpb24uCiAJICogU2tpcCBwdXR0aW5nIHVwY29taW5nIGJoIGludG8gYmhfbHJ1IHVudGlsIG1pZ3JhdGlvbiBpcyBkb25lLgogCSAqLwpAQCAtMTI4MCw3ICYjNDM7MTI4OCw3IEBAIGxvb2t1cF9iaF9scnUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3QgYmxvY2ssIHVuc2lnbmVkIHNpemUpCiAgKiBQZXJmb3JtIGEgcGFnZWNhY2hlIGxvb2t1cCBmb3IgdGhlIG1hdGNoaW5nIGJ1ZmZlci4gIElmIGl0JiMzOTtzIHRoZXJlLCByZWZyZXNoCiAgKiBpdCBpbiB0aGUgTFJVIGFuZCBtYXJrIGl0IGFzIGFjY2Vzc2VkLiAgSWYgaXQgaXMgbm90IHByZXNlbnQgdGhlbiByZXR1cm4KICAqIE5VTEwuIEF0b21pYyBjb250ZXh0IGNhbGxlcnMgbWF5IGFsc28gcmV0dXJuIE5VTEwgaWYgdGhlIGJ1ZmZlciBpcyBiZWluZwotICogbWlncmF0ZWQ7IHNpbWlsYXJseSB0aGUgcGFnZSBpcyBub3QgbWFya2VkIGFjY2Vzc2VkIGVpdGhlci4KJiM0MzsgKiBtaWdyYXRlZDsgc2ltaWxhcmx5IHRoZSBmb2xpbyBpcyBub3QgbWFya2VkIGFjY2Vzc2VkIGVpdGhlci4KICAqLwogc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqCiBmaW5kX2dldF9ibG9ja19jb21tb24oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3QgYmxvY2ssCkBAIC0xMjg5LDcgJiM0MzsxMjk3LDcgQEAgZmluZF9nZXRfYmxvY2tfY29tbW9uKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLAogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBsb29rdXBfYmhfbHJ1KGJkZXYsIGJsb2NrLCBzaXplKTsKIAogCWlmIChiaCA9PSBOVUxMKSB7Ci0JCS8qIF9fZmluZF9nZXRfYmxvY2tfc2xvdyB3aWxsIG1hcmsgdGhlIHBhZ2UgYWNjZXNzZWQgKi8KJiM0MzsJCS8qIF9fZmluZF9nZXRfYmxvY2tfc2xvdyB3aWxsIG1hcmsgdGhlIGZvbGlvIGFjY2Vzc2VkICovCiAJCWJoID0gX19maW5kX2dldF9ibG9ja19zbG93KGJkZXYsIGJsb2NrLCBhdG9taWMpOwogCQlpZiAoYmgpCiAJCQliaF9scnVfaW5zdGFsbChiaCk7CkBAIC0xNDc1LDE1ICYjNDM7MTQ4MywxNCBAQCB2b2lkIGZvbGlvX3NldF9iaChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogfQogRVhQT1JUX1NZTUJPTChmb2xpb19zZXRfYmgpOwogCi0vKgotICogQ2FsbGVkIHdoZW4gdHJ1bmNhdGluZyBhIGJ1ZmZlciBvbiBhIHBhZ2UgY29tcGxldGVseS4KLSAqLwotCiAvKiBCaXRzIHRoYXQgYXJlIGNsZWFyZWQgZHVyaW5nIGFuIGludmFsaWRhdGUgKi8KICNkZWZpbmUgQlVGRkVSX0ZMQUdTX0RJU0NBUkQgXAogCSgxICZsdDsmbHQ7IEJIX01hcHBlZCB8IDEgJmx0OyZsdDsgQkhfTmV3IHwgMSAmbHQ7Jmx0OyBCSF9SZXEgfCBcCiAJIDEgJmx0OyZsdDsgQkhfRGVsYXkgfCAxICZsdDsmbHQ7IEJIX1Vud3JpdHRlbikKIAomIzQzOy8qCiYjNDM7ICogQ2FsbGVkIHdoZW4gdHJ1bmNhdGluZyBhIGJ1ZmZlciBvbiBhIGZvbGlvIGNvbXBsZXRlbHkuCiYjNDM7ICovCiBzdGF0aWMgdm9pZCBkaXNjYXJkX2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaCkKIHsKIAl1bnNpZ25lZCBsb25nIGJfc3RhdGU7CkBAIC0xNjExLDkgJiM0MzsxNjE4LDcgQEAgRVhQT1JUX1NZTUJPTChjcmVhdGVfZW1wdHlfYnVmZmVycyk7CiAgKiBtb21lbnQgd2hlbiBzb21ldGhpbmcgd2lsbCBleHBsaWNpdGx5IG1hcmsgdGhlIGJ1ZmZlciBkaXJ0eSAoaG9wZWZ1bGx5IHRoYXQKICAqIHdpbGwgbm90IGhhcHBlbiB1bnRpbCB3ZSB3aWxsIGZyZWUgdGhhdCBibG9jayA7LSkgV2UgZG9uJiMzOTt0IGV2ZW4gbmVlZCB0byBtYXJrCiAgKiBpdCBub3QtdXB0b2RhdGUgLSBub2JvZHkgY2FuIGV4cGVjdCBhbnl0aGluZyBmcm9tIGEgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlcgotICogYW55d2F5LiBXZSB1c2VkIHRvIHVzZSB1bm1hcF9idWZmZXIoKSBmb3Igc3VjaCBpbnZhbGlkYXRpb24sIGJ1dCB0aGF0IHdhcwotICogd3JvbmcuIFdlIGRlZmluaXRlbHkgZG9uJiMzOTt0IHdhbnQgdG8gbWFyayB0aGUgYWxpYXMgdW5tYXBwZWQsIGZvciBleGFtcGxlIC0gaXQKLSAqIHdvdWxkIGNvbmZ1c2UgYW55b25lIHdobyBtaWdodCBwaWNrIGl0IHdpdGggYnJlYWQoKSBhZnRlcndhcmRzLi4uCiYjNDM7ICogYW55d2F5LgogICoKICAqIEFsc28uLiAgTm90ZSB0aGF0IGJmb3JnZXQoKSBkb2VzbiYjMzk7dCBsb2NrIHRoZSBidWZmZXIuICBTbyB0aGVyZSBjYW4gYmUKICAqIHdyaXRlb3V0IEkvTyBnb2luZyBvbiBhZ2FpbnN0IHJlY2VudGx5LWZyZWVkIGJ1ZmZlcnMuICBXZSBkb24mIzM5O3Qgd2FpdCBvbiB0aGF0CkBAIC0xNjQ5LDcgJiM0MzsxNjU0LDcgQEAgdm9pZCBjbGVhbl9iZGV2X2FsaWFzZXMoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3QgYmxvY2ssIHNlY3Rvcl90IGxlbikKIAkJCS8qIFJlY2hlY2sgd2hlbiB0aGUgZm9saW8gaXMgbG9ja2VkIHdoaWNoIHBpbnMgYmhzICovCiAJCQloZWFkID0gZm9saW9fYnVmZmVycyhmb2xpbyk7CiAJCQlpZiAoIWhlYWQpCi0JCQkJZ290byB1bmxvY2tfcGFnZTsKJiM0MzsJCQkJZ290byB1bmxvY2tfZm9saW87CiAJCQliaCA9IGhlYWQ7CiAJCQlkbyB7CiAJCQkJaWYgKCFidWZmZXJfbWFwcGVkKGJoKSB8fCAoYmgtJmd0O2JfYmxvY2tuciAmbHQ7IGJsb2NrKSkKQEAgLTE2NjIsNyAmIzQzOzE2NjcsNyBAQCB2b2lkIGNsZWFuX2JkZXZfYWxpYXNlcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBibG9jaywgc2VjdG9yX3QgbGVuKQogbmV4dDoKIAkJCQliaCA9IGJoLSZndDtiX3RoaXNfcGFnZTsKIAkJCX0gd2hpbGUgKGJoICE9IGhlYWQpOwotdW5sb2NrX3BhZ2U6CiYjNDM7dW5sb2NrX2ZvbGlvOgogCQkJZm9saW9fdW5sb2NrKGZvbGlvKTsKIAkJfQogCQlmb2xpb19iYXRjaF9yZWxlYXNlKCZhbXA7ZmJhdGNoKTsKQEAgLTE3MTAsNyAmIzQzOzE3MTUsNyBAQCBzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpmb2xpb19jcmVhdGVfYnVmZmVycyhzdHJ1Y3QgZm9saW8gKmZvbGlvLAogICoKICAqIElmIGJsb2NrX3dyaXRlX2Z1bGxfZm9saW8oKSBpcyBjYWxsZWQgZm9yIHJlZ3VsYXIgd3JpdGViYWNrCiAgKiAod2JjLSZndDtzeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FKSB0aGVuIGl0IHdpbGwgcmVkaXJ0eSBhIGZvbGlvIHdoaWNoCi0gKiBoYXMgYSBsb2NrZWQgYnVmZmVyLiAgIFRoaXMgb25seSBjYW4gaGFwcGVuIGlmIHNvbWVvbmUgaGFzIHdyaXR0ZW4KJiM0MzsgKiBoYXMgYSBsb2NrZWQgYnVmZmVyLiAgIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGlmIHNvbWVvbmUgaGFzIHdyaXR0ZW4KICAqIHRoZSBidWZmZXIgZGlyZWN0bHksIHdpdGggYmhfc3VibWl0KCkuICBBdCB0aGUgYWRkcmVzc19zcGFjZSBsZXZlbAogICogdGhlIGZvbGlvIHdyaXRlYmFjayBmbGFnIHByZXZlbnRzIHRoaXMgY29udGVudGlvbiBmcm9tIG9jY3VycmluZy4KICAqCkBAIC0yMjEzLDkgJiM0MzsyMjE4LDkgQEAgaW50IGdlbmVyaWNfd3JpdGVfZW5kKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJaWYgKG9sZF9zaXplICZsdDsgcG9zKQogCQlwYWdlY2FjaGVfaXNpemVfZXh0ZW5kZWQoaW5vZGUsIG9sZF9zaXplLCBwb3MpOwogCS8qCi0JICogRG9uJiMzOTt0IG1hcmsgdGhlIGlub2RlIGRpcnR5IHVuZGVyIHBhZ2UgbG9jay4gRmlyc3QsIGl0IHVubmVjZXNzYXJpbHkKLQkgKiBtYWtlcyB0aGUgaG9sZGluZyB0aW1lIG9mIHBhZ2UgbG9jayBsb25nZXIuIFNlY29uZCwgaXQgZm9yY2VzIGxvY2sKLQkgKiBvcmRlcmluZyBvZiBwYWdlIGxvY2sgYW5kIHRyYW5zYWN0aW9uIHN0YXJ0IGZvciBqb3VybmFsaW5nCiYjNDM7CSAqIERvbiYjMzk7dCBtYXJrIHRoZSBpbm9kZSBkaXJ0eSB1bmRlciBmb2xpbyBsb2NrLiBGaXJzdCwgaXQgdW5uZWNlc3NhcmlseQomIzQzOwkgKiBtYWtlcyB0aGUgaG9sZGluZyB0aW1lIG9mIGZvbGlvIGxvY2sgbG9uZ2VyLiBTZWNvbmQsIGl0IGZvcmNlcyBsb2NrCiYjNDM7CSAqIG9yZGVyaW5nIG9mIGZvbGlvIGxvY2sgYW5kIHRyYW5zYWN0aW9uIHN0YXJ0IGZvciBqb3VybmFsaW5nCiAJICogZmlsZXN5c3RlbXMuCiAJICovCiAJaWYgKGlfc2l6ZV9jaGFuZ2VkKQpAQCAtMjM0MSw3ICYjNDM7MjM0Niw3IEBAIGludCBibG9ja19yZWFkX2Z1bGxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2V0X2Jsb2NrX3QgKmdldF9ibG9jaykKIAkJICogQkhfQXN5bmNfUmVhZCB0ZWxscyBlbmRfYnVmZmVyX2FzeW5jX3JlYWQoKSB0aGF0IHRoaXMKIAkJICogYnVmZmVyIGlzIG5vdCB1bmRlciBhc3luYyBJL08uCiAJCSAqCi0JCSAqIFRoZSBmb2xpbyBjb21lcyB1bmxvY2tlZCB3aGVuIGl0IGhhcyBubyBsb2NrZWQKJiM0MzsJCSAqIFRoZSBmb2xpbyBpcyB1bmxvY2tlZCB3aGVuIGl0IGhhcyBubyBsb2NrZWQKIAkJICogYnVmZmVyX2FzeW5jIGJ1ZmZlcnMgbGVmdC4KIAkJICoKIAkJICogVGhlIGZvbGlvIGxvY2sgcHJldmVudHMgYW55b25lIHN0YXJ0aW5nIG5ldyBhc3luYwpAQCAtMjQ1MSw3ICYjNDM7MjQ1Niw3IEBAIHN0YXRpYyBpbnQgY29udF9leHBhbmRfemVybyhjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCiAJCX0KIAl9CiAKLQkvKiBwYWdlIGNvdmVycyB0aGUgYm91bmRhcnksIGZpbmQgdGhlIGJvdW5kYXJ5IG9mZnNldCAqLwomIzQzOwkvKiBmb2xpbyBjcm9zc2VzIHRoZSBib3VuZGFyeSwgZmluZCB0aGUgYm91bmRhcnkgb2Zmc2V0ICovCiAJaWYgKGluZGV4ID09IGN1cmlkeCkgewogCQl6ZXJvZnJvbSA9IGN1cnBvcyAmYW1wOyB+UEFHRV9NQVNLOwogCQkvKiBpZiB3ZSB3aWxsIGV4cGFuZCB0aGUgdGhpbmcgbGFzdCBibG9jayB3aWxsIGJlIGZpbGxlZCAqLwpAQCAtMjUwOSwxOCAmIzQzOzI1MTQsMTggQEAgRVhQT1JUX1NZTUJPTChjb250X3dyaXRlX2JlZ2luKTsKIAogLyoKICAqIGJsb2NrX3BhZ2VfbWt3cml0ZSgpIGlzIG5vdCBhbGxvd2VkIHRvIGNoYW5nZSB0aGUgZmlsZSBzaXplIGFzIGl0IGdldHMKLSAqIGNhbGxlZCBmcm9tIGEgcGFnZSBmYXVsdCBoYW5kbGVyIHdoZW4gYSBwYWdlIGlzIGZpcnN0IGRpcnRpZWQuIEhlbmNlIHdlIG11c3QKLSAqIGJlIGNhcmVmdWwgdG8gY2hlY2sgZm9yIEVPRiBjb25kaXRpb25zIGhlcmUuIFdlIHNldCB0aGUgcGFnZSB1cCBjb3JyZWN0bHkKLSAqIGZvciBhIHdyaXR0ZW4gcGFnZSB3aGljaCBtZWFucyB3ZSBnZXQgRU5PU1BDIGNoZWNraW5nIHdoZW4gd3JpdGluZyBpbnRvCiYjNDM7ICogY2FsbGVkIGZyb20gYSBwYWdlIGZhdWx0IGhhbmRsZXIgd2hlbiBhIGZvbGlvIGlzIGZpcnN0IGRpcnRpZWQuIEhlbmNlIHdlIG11c3QKJiM0MzsgKiBiZSBjYXJlZnVsIHRvIGNoZWNrIGZvciBFT0YgY29uZGl0aW9ucyBoZXJlLiBXZSBzZXQgdGhlIGZvbGlvIHVwIGNvcnJlY3RseQomIzQzOyAqIGZvciBhIHdyaXR0ZW4gZm9saW8gd2hpY2ggbWVhbnMgd2UgZ2V0IEVOT1NQQyBjaGVja2luZyB3aGVuIHdyaXRpbmcgaW50bwogICogaG9sZXMgYW5kIGNvcnJlY3QgZGVsYWxsb2MgYW5kIHVud3JpdHRlbiBleHRlbnQgbWFwcGluZyBvbiBmaWxlc3lzdGVtcyB0aGF0CiAgKiBzdXBwb3J0IHRoZXNlIGZlYXR1cmVzLgogICoKICAqIFdlIGFyZSBub3QgYWxsb3dlZCB0byB0YWtlIHRoZSBpX3J3c2VtIGhlcmUgc28gd2UgaGF2ZSB0byBwbGF5IGdhbWVzIHRvCi0gKiBwcm90ZWN0IGFnYWluc3QgdHJ1bmNhdGUgcmFjZXMgYXMgdGhlIHBhZ2UgY291bGQgbm93IGJlIGJleW9uZCBFT0YuICBCZWNhdXNlCi0gKiB0cnVuY2F0ZSB3cml0ZXMgdGhlIGlub2RlIHNpemUgYmVmb3JlIHJlbW92aW5nIHBhZ2VzLCBvbmNlIHdlIGhhdmUgdGhlCi0gKiBwYWdlIGxvY2sgd2UgY2FuIGRldGVybWluZSBzYWZlbHkgaWYgdGhlIHBhZ2UgaXMgYmV5b25kIEVPRi4gSWYgaXQgaXMgbm90Ci0gKiBiZXlvbmQgRU9GLCB0aGVuIHRoZSBwYWdlIGlzIGd1YXJhbnRlZWQgc2FmZSBhZ2FpbnN0IHRydW5jYXRpb24gdW50aWwgd2UKLSAqIHVubG9jayB0aGUgcGFnZS4KJiM0MzsgKiBwcm90ZWN0IGFnYWluc3QgdHJ1bmNhdGUgcmFjZXMgYXMgdGhlIGZvbGlvIGNvdWxkIG5vdyBiZSBiZXlvbmQgRU9GLiAgQmVjYXVzZQomIzQzOyAqIHRydW5jYXRlIHdyaXRlcyB0aGUgaW5vZGUgc2l6ZSBiZWZvcmUgcmVtb3ZpbmcgZm9saW9zLCBvbmNlIHdlIGhhdmUgdGhlCiYjNDM7ICogZm9saW8gbG9jayB3ZSBjYW4gZGV0ZXJtaW5lIHNhZmVseSBpZiB0aGUgZm9saW8gaXMgYmV5b25kIEVPRi4gSWYgaXQgaXMgbm90CiYjNDM7ICogYmV5b25kIEVPRiwgdGhlbiB0aGUgZm9saW8gaXMgZ3VhcmFudGVlZCBzYWZlIGFnYWluc3QgdHJ1bmNhdGlvbiB1bnRpbCB3ZQomIzQzOyAqIHVubG9jayB0aGUgZm9saW8uCiAgKgogICogRGlyZWN0IGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbiBzaG91bGQgcHJvdGVjdCBhZ2FpbnN0IGZpbGVzeXN0ZW0gZnJlZXppbmcKICAqIHVzaW5nIHNiX3N0YXJ0X3BhZ2VmYXVsdCgpIC0gc2JfZW5kX3BhZ2VmYXVsdCgpIGZ1bmN0aW9ucy4KQEAgLTI1MzgsNyAmIzQzOzI1NDMsNyBAQCBpbnQgYmxvY2tfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwKIAlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwogCWlmICgoZm9saW8tJmd0O21hcHBpbmcgIT0gaW5vZGUtJmd0O2lfbWFwcGluZykgfHwKIAkgICAgKGZvbGlvX3Bvcyhmb2xpbykgJmd0Oz0gc2l6ZSkpIHsKLQkJLyogV2Ugb3ZlcmxvYWQgRUZBVUxUIHRvIG1lYW4gcGFnZSBnb3QgdHJ1bmNhdGVkICovCiYjNDM7CQkvKiBXZSBvdmVybG9hZCBFRkFVTFQgdG8gbWVhbiBmb2xpbyBnb3QgdHJ1bmNhdGVkICovCiAJCXJldCA9IC1FRkFVTFQ7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmggYi9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgKaW5kZXggZmQyYzcxMTVjMDU0Mi4uMWQ1NWY3NzcwY2FkMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaApAQCAtMzM4LDIwICYjNDM7MzM4LDU4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBiZm9yZ2V0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiAJCV9fYmZvcmdldChiaCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGJ1ZmZlcl9oZWFkICoKLXNiX2JyZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHNlY3Rvcl90IGJsb2NrKQomIzQzOy8qKgomIzQzOyAqIHNiX2JyZWFkIC0gUmVhZCBhIGJsb2NrLgomIzQzOyAqIEBzYjogVGhlIHN1cGVyYmxvY2sgdG8gcmVhZCBmcm9tLgomIzQzOyAqIEBibG9jazogQmxvY2sgbnVtYmVyIGluIHVuaXRzIG9mIGJsb2NrIHNpemUuCiYjNDM7ICoKJiM0MzsgKiBSZWFkIGEgc3BlY2lmaWVkIGJsb2NrLCBhbmQgcmV0dXJuIHRoZSBidWZmZXIgaGVhZCB0aGF0IHJlZmVycwomIzQzOyAqIHRvIGl0LiAgVGhlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgZnJvbSB0aGUgbW92YWJsZSBhcmVhIHNvIHRoYXQgaXQgY2FuCiYjNDM7ICogYmUgbWlncmF0ZWQuICBUaGUgcmV0dXJuZWQgYnVmZmVyIGhlYWQgaGFzIGl0cyByZWZjb3VudCBpbmNyZWFzZWQuCiYjNDM7ICogVGhlIGNhbGxlciBzaG91bGQgY2FsbCBicmVsc2UoKSB3aGVuIGl0IGhhcyBmaW5pc2hlZCB3aXRoIHRoZSBidWZmZXIuCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBNYXkgc2xlZXAgd2FpdGluZyBmb3IgSS9PLgomIzQzOyAqIFJldHVybjogTlVMTCBpZiB0aGUgYmxvY2sgd2FzIHVucmVhZGFibGUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZQomIzQzO3N0cnVjdCBidWZmZXJfaGVhZCAqc2JfYnJlYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc2VjdG9yX3QgYmxvY2spCiB7CiAJcmV0dXJuIF9fYnJlYWRfZ2ZwKHNiLSZndDtzX2JkZXYsIGJsb2NrLCBzYi0mZ3Q7c19ibG9ja3NpemUsIF9fR0ZQX01PVkFCTEUpOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBidWZmZXJfaGVhZCAqCi1zYl9icmVhZF91bm1vdmFibGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc2VjdG9yX3QgYmxvY2spCiYjNDM7LyoqCiYjNDM7ICogc2JfYnJlYWRfdW5tb3ZhYmxlIC0gUmVhZCBhIGJsb2NrLgomIzQzOyAqIEBzYjogVGhlIHN1cGVyYmxvY2sgdG8gcmVhZCBmcm9tLgomIzQzOyAqIEBibG9jazogQmxvY2sgbnVtYmVyIGluIHVuaXRzIG9mIGJsb2NrIHNpemUuCiYjNDM7ICoKJiM0MzsgKiBSZWFkIGEgc3BlY2lmaWVkIGJsb2NrLCBhbmQgcmV0dXJuIHRoZSBidWZmZXIgaGVhZCB0aGF0IHJlZmVycyB0byBpdC4KJiM0MzsgKiBUaGUgbWVtb3J5IGlzIGFsbG9jYXRlZCBmcm9tIHRoZSB1bm1vdmFibGUgYXJlYSBzbyB0aGF0IHBvaW50ZXJzIGludG8KJiM0MzsgKiBpdCByZW1haW4gdmFsaWQgYWZ0ZXIgY29tcGFjdGlvbiBydW5zLiAgVGhlIHJldHVybmVkIGJ1ZmZlciBoZWFkIGhhcwomIzQzOyAqIGl0cyByZWZjb3VudCBpbmNyZWFzZWQuICBUaGUgY2FsbGVyIHNob3VsZCBjYWxsIGJyZWxzZSgpIHdoZW4gaXQgaGFzCiYjNDM7ICogZmluaXNoZWQgd2l0aCB0aGUgYnVmZmVyLgomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogTWF5IHNsZWVwIHdhaXRpbmcgZm9yIEkvTy4KJiM0MzsgKiBSZXR1cm46IE5VTEwgaWYgdGhlIGJsb2NrIHdhcyB1bnJlYWRhYmxlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUKJiM0MztzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNiX2JyZWFkX3VubW92YWJsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzZWN0b3JfdCBibG9jaykKIHsKIAlyZXR1cm4gX19icmVhZF9nZnAoc2ItJmd0O3NfYmRldiwgYmxvY2ssIHNiLSZndDtzX2Jsb2Nrc2l6ZSwgMCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotc2JfYnJlYWRhaGVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzZWN0b3JfdCBibG9jaykKJiM0MzsvKioKJiM0MzsgKiBzYl9icmVhZGFoZWFkIC0gU3RhcnQgcmVhZGFoZWFkLgomIzQzOyAqIEBzYjogU3VwZXJibG9jayBpZGVudGlmeWluZyB0aGUgYmxvY2sgZGV2aWNlLgomIzQzOyAqIEBibG9jazogVGhlIGJsb2NrIHRvIHJlYWQuCiYjNDM7ICoKJiM0MzsgKiBSZWFkIHRoaXMgYmxvY2suICBUaGUgSS9PIHdpbGwgYmUgZmxhZ2dlZCBhcyBiZWluZyByZWFkYWhlYWQgcmF0aGVyCiYjNDM7ICogdGhhbiBpbW1lZGlhdGUgcmVhZCwgYnV0ICh1bmxpa2UgdGhlIHBhZ2UgY2FjaGUpLCBzdXJyb3VuZGluZyBibG9ja3MKJiM0MzsgKiB3aWxsIG5vdCBiZSByZWFkLgomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogTWF5IHNsZWVwIGluIG9yZGVyIHRvIGFsbG9jYXRlIG1lbW9yeS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lCiYjNDM7dm9pZCBzYl9icmVhZGFoZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHNlY3Rvcl90IGJsb2NrKQogewogCV9fYnJlYWRhaGVhZChzYi0mZ3Q7c19iZGV2LCBibG9jaywgc2ItJmd0O3NfYmxvY2tzaXplKTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk0MwoJCQkJCQkJb3V0cHV0OiA3MQoJCQkJCQkJdGhvdWdodHM6IDY4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogV29ydGhGdXp6aW5nIEV2YWx1YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBmb2N1cyBpcyB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgcG90ZW50aWFsIGltcGFjdC4gRmlyc3QsIEkgbm90ZSB0aGUgY2hhbmdlZCBmaWxlczogYERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3RgLCBgZnMvYnVmZmVyLmNgLCBhbmQgYGluY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaGAuIFRoYXQgZ2l2ZXMgbWUgYSBnZW5lcmFsIGFyZWEgdG8gbG9vayBpbnRvLgoKTm93IGZvciB0aGUgZGV0YWlsZWQgZGlmZi4gSSBzZWUgdGhhdCB0aGUgZG9jdW1lbnRhdGlvbiBmaWxlIGhhcyBhIHNpbXBsZSBkb2MgdXBkYXRlLCByZW5hbWluZyBgbWFya19idWZmZXJfZGlydHlfaW5vZGUoKWAgdG8gYG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eSgpYC4gIEluIGBmcy9idWZmZXIuY2AsIGl0JiMzOTtzIHByaW1hcmlseSBjb21tZW50IHVwZGF0ZXMsIHJlcGxhY2luZyAmIzM0O3BhZ2UmIzM0OyB3aXRoICYjMzQ7Zm9saW8sJiMzNDsgYW5kIHRoZSBzYW1lIGZ1bmN0aW9uIG5hbWUgY2hhbmdlLCBpbmNsdWRpbmcgcmVuYW1pbmcgYSBsYWJlbCBmcm9tIGB1bmxvY2tfcGFnZWAgdG8gYHVubG9ja19mb2xpb2AgaW4gYGNsZWFuX2JkZXZfYWxpYXNlc2AuIFRoZXJlIGFsc28gbG9va3MgbGlrZSBzb21lIG5ldyBrZXJuZWxkb2MgY29tbWVudHMgZm9yIGBtbWJfbWFya19idWZmZXJfZGlydHlgIGFyZSBwcmVzZW50LiAgT3ZlciBpbiBgaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oYCwgdGhlcmUgYXJlIGtlcm5lbGRvYyBhZGRpdGlvbnMgZm9yIGBzYl9icmVhZGAsIGBzYl9icmVhZF91bm1vdmFibGVgLCBhbmQgYHNiX2JyZWFkYWhlYWRgLCBhbG9uZyB3aXRoIHNvbWUgdmVyeSBtaW5vciBmb3JtYXR0aW5nIGFkanVzdG1lbnRzIHRvIGZ1bmN0aW9uIHNpZ25hdHVyZXMgKGp1c3QgbGluZSB3cmFwcGluZywgbm8gYWN0dWFsIGNvZGUgY2hhbmdlcykuCgpDcnVjaWFsbHksIEkgbmVlZCB0byBjb25maXJtIHRoZXJlJiMzOTtzIG5vIGZ1bmN0aW9uYWwgY2hhbmdlLiAgSSYjMzk7ZCBsb3ZlIHRvIGdyYWIgdGhlIHNwZWNpZmljIGNvbW1pdCBkaWZmIChjOGU3MmU2ZjJmYjZiMTRhOGFmODRlNGIzZTkwZWE4MjdkMzE4ZjEwKSBpZiBwb3NzaWJsZSwgYnV0IHJlYWRpbmcgdGhlIGRpZmYgZGlyZWN0bHkgY29uZmlybXMgbXkgc3VzcGljaW9uOiAqYWxsKiB0aGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLCBjb21tZW50IG1vZGlmaWNhdGlvbnMsIGtlcm5lbGRvYywgdGhlIGxhYmVsIHJlbmFtZSAod2hpY2ggaXMgcHVyZWx5IGNvc21ldGljKSwgYW5kIGZvcm1hdHRpbmcgdHdlYWtzLiBBYnNvbHV0ZWx5IG5vIGxvZ2ljIGNoYW5nZXMuCgpOb3csIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBpbnN0cnVjdGlvbnMsIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCB3YXJyYW50cyBmdXp6aW5nLiBUaGUgY3JpdGVyaWEgY2xlYXJseSBzdGF0ZSB0aGF0IGlmIHRoZSBwYXRjaCBjb250YWlucyBvbmx5IGRvY3VtZW50YXRpb24sIGNvZGUgY29tbWVudHMsIG9yIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIGxpa2UgbG9nZ2luZywgaXQmIzM5O3Mgbm90IHdvcnRoIGZ1enppbmcuIFRoYXQgY292ZXJzIGFsbCB0aGUgY2hhbmdlcyBJJiMzOTt2ZSBvYnNlcnZlZDogZG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIGFuZCB0aGUgbGFiZWwvZm9ybWF0dGluZyBjaGFuZ2VzLgoKVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIGNsZWFyOiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIG5ldyBjb2RlIHBhdGhzIG9yIG1vZGlmaWNhdGlvbnMgdG8gZXhpc3RpbmcgZXhlY3V0aW9uIGxvZ2ljLCB0aGVyZWZvcmUgZnV6emluZyBpdCB3b3VsZCBiZSBhIHdhc3RlIG9mIHJlc291cmNlcy4KCkZpbmFsbHksIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBzZXR0aW5nIHRoZSBwcm9wZXIgdmFsdWVzOgotICAgYFdvcnRoRnV6emluZ2A6IGBmYWxzZWAKLSAgIGBGb2N1c1N5bWJvbHNgOiBgW11gIChlbXB0eSBsaXN0LCBhcyB0aGVyZSBhcmUgbm8gc3ltYm9scyB0byBmb2N1cyBvbikKLSAgIGBFbmFibGVDb25maWdzYDogYFtdYCAoZW1wdHkgbGlzdCwgYXMgdGhlcmUgYXJlIG5vIGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZSkKLSAgIGBSZWFzb25pbmdgOiAmIzM0O1RoZSBwYXRjaCBjb250YWlucyBvbmx5IGRvY3VtZW50YXRpb24sIGNvZGUgY29tbWVudHMsIGtlcm5lbGRvYywgbGFiZWwgcmVuYW1pbmcgYW5kIGZvcm1hdHRpbmcgY2hhbmdlcy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcy4mIzM0OwoKVGltZSB0byB2ZXJpZnkgd2l0aCB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBjb250YWlucyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIGtlcm5lbGRvYyBhZGRpdGlvbnMsIGNvbW1lbnQgY29udmVyc2lvbnMgKGZyb20gcGFnZSB0byBmb2xpbyB0ZXJtaW5vbG9neSksIGFuZCBhIGxhYmVsIHJlbmFtZSAodW5sb2NrX3BhZ2UgdG8gdW5sb2NrX2ZvbGlvKSB3aXRoIG5vIGZ1bmN0aW9uYWwgY29kZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBjb250YWlucyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIGtlcm5lbGRvYyBhZGRpdGlvbnMsIGNvbW1lbnQgY29udmVyc2lvbnMgKGZyb20gcGFnZSB0byBmb2xpbyB0ZXJtaW5vbG9neSksIGFuZCBhIGxhYmVsIHJlbmFtZSAodW5sb2NrX3BhZ2UgdG8gdW5sb2NrX2ZvbGlvKSB3aXRoIG5vIGZ1bmN0aW9uYWwgY29kZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMToxODwvdGQ+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+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjE6MTg6MjkuMjU0MDMyMDkxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg4MzcyMDkxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgY29udGFpbnMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLCBrZXJuZWxkb2MgYWRkaXRpb25zLCBjb21tZW50IGNvbnZlcnNpb25zIChmcm9tIHBhZ2UgdG8gZm9saW8gdGVybWlub2xvZ3kpLCBhbmQgYSBsYWJlbCByZW5hbWUgKHVubG9ja19wYWdlIHRvIHVubG9ja19mb2xpbykgd2l0aCBubyBmdW5jdGlvbmFsIGNvZGUgY2hhbmdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIxOjE4OjI5LjI1NDAzNjQzMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA0NDQyMDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzhlNzJlNmYyZmI2YjE0YThhZjg0ZTRiM2U5MGVhODI3ZDMxOGYxMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAyOCAyMToxODoyOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdFxcbmluZGV4IDYwODgwZWIwYzQ5ZDEuLmRlOTZiNjc0NTYwMGIgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3RcXG5AQCAtMzQ4LDcgKzM0OCw3IEBAIHNpbXBseSBvZiByZXR1cm4gMS4gIE5vdGUgdGhhdCBhbGwgYWN0dWFsIGV2aWN0aW9uIHdvcmsgaXMgZG9uZSBieSBjYWxsZXIgYWZ0ZXJcXG4gQXMgYmVmb3JlLCBjbGVhcl9pbm9kZSgpIG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBvbiBlYWNoIGNhbGwgb2ZcXG4gLVxcdTAwM2VldmljdF9pbm9kZSgpIChhcyBpdCB1c2VkIHRvIGJlIGZvciBlYWNoIGNhbGwgb2YgLVxcdTAwM2VkZWxldGVfaW5vZGUoKSkuICBVbmxpa2VcXG4gYmVmb3JlLCBpZiB5b3UgYXJlIHVzaW5nIGlub2RlLWFzc29jaWF0ZWQgbWV0YWRhdGEgYnVmZmVycyAoaS5lLlxcbi1tYXJrX2J1ZmZlcl9kaXJ0eV9pbm9kZSgpKSwgaXQncyB5b3VyIHJlc3BvbnNpYmlsaXR5IHRvIGNhbGxcXG4rbW1iX21hcmtfYnVmZmVyX2RpcnR5KCkpLCBpdCdzIHlvdXIgcmVzcG9uc2liaWxpdHkgdG8gY2FsbFxcbiBpbnZhbGlkYXRlX2lub2RlX2J1ZmZlcnMoKSBiZWZvcmUgY2xlYXJfaW5vZGUoKS5cXG4gXFxuIE5PVEU6IGNoZWNraW5nIGlfbmxpbmsgaW4gdGhlIGJlZ2lubmluZyBvZiAtXFx1MDAzZXdyaXRlX2lub2RlKCkgYW5kIGJhaWxpbmcgb3V0XFxuZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmNcXG5pbmRleCBlZDk2NmZhNzNiMWJhLi5jOTM0MmFlYjhjZGY2IDEwMDY0NFxcbi0tLSBhL2ZzL2J1ZmZlci5jXFxuKysrIGIvZnMvYnVmZmVyLmNcXG5AQCAtMjY1LDcgKzI2NSw3IEBAIF9fZmluZF9nZXRfYmxvY2tfc2xvdyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBibG9jaywgYm9vbCBhdG9taWMpXFxuIFxcdFxcdGJoID0gYmgtXFx1MDAzZWJfdGhpc19wYWdlO1xcbiBcXHR9IHdoaWxlIChiaCAhPSBoZWFkKTtcXG4gXFxuLVxcdC8qIHdlIG1pZ2h0IGJlIGhlcmUgYmVjYXVzZSBzb21lIG9mIHRoZSBidWZmZXJzIG9uIHRoaXMgcGFnZSBhcmVcXG4rXFx0Lyogd2UgbWlnaHQgYmUgaGVyZSBiZWNhdXNlIHNvbWUgb2YgdGhlIGJ1ZmZlcnMgb24gdGhpcyBmb2xpbyBhcmVcXG4gXFx0ICogbm90IG1hcHBlZC4gIFRoaXMgaXMgZHVlIHRvIHZhcmlvdXMgcmFjZXMgYmV0d2VlblxcbiBcXHQgKiBmaWxlIGlvIG9uIHRoZSBibG9jayBkZXZpY2UgYW5kIGdldGJsay4gIEl0IGdldHMgZGVhbHQgd2l0aFxcbiBcXHQgKiBlbHNld2hlcmUsIGRvbid0IGJ1ZmZlcl9lcnJvciBpZiB3ZSBoYWQgc29tZSB1bm1hcHBlZCBidWZmZXJzXFxuQEAgLTMxMSw3ICszMTEsNyBAQCBzdGF0aWMgdm9pZCBlbmRfYnVmZmVyX2FzeW5jX3JlYWQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHVwdG9kYXRlKVxcbiBcXHQvKlxcbiBcXHQgKiBCZSBfdmVyeV8gY2FyZWZ1bCBmcm9tIGhlcmUgb24uIEJhZCB0aGluZ3MgY2FuIGhhcHBlbiBpZlxcbiBcXHQgKiB0d28gYnVmZmVyIGhlYWRzIGVuZCBJTyBhdCBhbG1vc3QgdGhlIHNhbWUgdGltZSBhbmQgYm90aFxcbi1cXHQgKiBkZWNpZGUgdGhhdCB0aGUgcGFnZSBpcyBub3cgY29tcGxldGVseSBkb25lLlxcbitcXHQgKiBkZWNpZGUgdGhhdCB0aGUgZm9saW8gaXMgbm93IGNvbXBsZXRlbHkgZG9uZS5cXG4gXFx0ICovXFxuIFxcdGZpcnN0ID0gZm9saW9fYnVmZmVycyhmb2xpbyk7XFxuIFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZmaXJzdC1cXHUwMDNlYl91cHRvZGF0ZV9sb2NrLCBmbGFncyk7XFxuQEAgLTUyMCw4ICs1MjAsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChtbWJfaGFzX2J1ZmZlcnMpO1xcbiAgKlxcbiAgKiBEbyB0aGlzIGluIHR3byBtYWluIHN0YWdlczogZmlyc3Qgd2UgY29weSBkaXJ0eSBidWZmZXJzIHRvIGFcXG4gICogdGVtcG9yYXJ5IGlub2RlIGxpc3QsIHF1ZXVlaW5nIHRoZSB3cml0ZXMgYXMgd2UgZ28uIFRoZW4gd2UgY2xlYW5cXG4tICogdXAsIHdhaXRpbmcgZm9yIHRob3NlIHdyaXRlcyB0byBjb21wbGV0ZS4gbWFya19idWZmZXJfZGlydHlfaW5vZGUoKVxcbi0gKiBkb2Vzbid0IHRvdWNoIGJfYXNzb2NfYnVmZmVycyBsaXN0IGlmIGJfbW1iIGlzIG5vdCBOVUxMIHNvIHdlIGFyZSBzdXJlIHRoZVxcbisgKiB1cCwgd2FpdGluZyBmb3IgdGhvc2Ugd3JpdGVzIHRvIGNvbXBsZXRlLiBtbWJfbWFya19idWZmZXJfZGlydHkoKVxcbisgKiBkb2Vzbid0IHRvdWNoIGJfYXNzb2NfYnVmZmVycyBsaXN0IGlmIGJfbW1iIGlzIHNldCBzbyB3ZSBhcmUgc3VyZSB0aGVcXG4gICogYnVmZmVyIHN0YXlzIG9uIG91ciBsaXN0IHVudGlsIElPIGNvbXBsZXRlcyAoYXQgd2hpY2ggcG9pbnQgaXQgY2FuIGJlXFxuICAqIHJlYXBlZCkuXFxuICAqL1xcbkBAIC01NDIsNyArNTQyLDcgQEAgaW50IG1tYl9zeW5jKHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iKVxcbiBcXHRcXHRiaCA9IEJIX0VOVFJZKG1tYi1cXHUwMDNlbGlzdC5uZXh0KTtcXG4gXFx0XFx0V0FSTl9PTl9PTkNFKGJoLVxcdTAwM2ViX21tYiAhPSBtbWIpO1xcbiBcXHRcXHRfX3JlbW92ZV9hc3NvY19xdWV1ZShtbWIsIGJoKTtcXG4tXFx0XFx0LyogQXZvaWQgcmFjZSB3aXRoIG1hcmtfYnVmZmVyX2RpcnR5X2lub2RlKCkgd2hpY2ggZG9lc1xcbitcXHRcXHQvKiBBdm9pZCByYWNlIHdpdGggbW1iX21hcmtfYnVmZmVyX2RpcnR5KCkgd2hpY2ggZG9lc1xcbiBcXHRcXHQgKiBhIGxvY2tsZXNzIGNoZWNrIGFuZCB3ZSByZWx5IG9uIHNlZWluZyB0aGUgZGlydHkgYml0ICovXFxuIFxcdFxcdHNtcF9tYigpO1xcbiBcXHRcXHRpZiAoYnVmZmVyX2RpcnR5KGJoKSB8fCBidWZmZXJfbG9ja2VkKGJoKSkge1xcbkBAIC01ODAsNyArNTgwLDcgQEAgaW50IG1tYl9zeW5jKHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iKVxcbiBcXHRcXHRiaCA9IEJIX0VOVFJZKHRtcC5wcmV2KTtcXG4gXFx0XFx0Z2V0X2JoKGJoKTtcXG4gXFx0XFx0X19yZW1vdmVfYXNzb2NfcXVldWUobW1iLCBiaCk7XFxuLVxcdFxcdC8qIEF2b2lkIHJhY2Ugd2l0aCBtYXJrX2J1ZmZlcl9kaXJ0eV9pbm9kZSgpIHdoaWNoIGRvZXNcXG4rXFx0XFx0LyogQXZvaWQgcmFjZSB3aXRoIG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eSgpIHdoaWNoIGRvZXNcXG4gXFx0XFx0ICogYSBsb2NrbGVzcyBjaGVjayBhbmQgd2UgcmVseSBvbiBzZWVpbmcgdGhlIGRpcnR5IGJpdCAqL1xcbiBcXHRcXHRzbXBfbWIoKTtcXG4gXFx0XFx0aWYgKGJ1ZmZlcl9kaXJ0eShiaCkpIHtcXG5AQCAtNjE4LDYgKzYxOCwxNCBAQCB2b2lkIHdyaXRlX2JvdW5kYXJ5X2Jsb2NrKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXFxuIFxcdH1cXG4gfVxcbiBcXG4rLyoqXFxuKyAqIG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eSAtIE1hcmsgYSBtZXRhZGF0YSBidWZmZXIgZGlydHkuXFxuKyAqIEBiaDogVGhlIGJ1ZmZlciB0byBtYXJrIGRpcnR5LlxcbisgKiBAbW1iOiBUaGUgbGlzdCBvZiBidWZmZXJzIHRvIGFkZCB0aGUgYnVmZmVyIHRvLlxcbisgKlxcbisgKiBNYXJrIHRoZSBidWZmZXIgZGlydHkgYW5kIGFkZCBpdCB0byB0aGUgbGlzdCBpZiBpdCBpcyBub3QgYWxyZWFkeSBvblxcbisgKiBhIGxpc3QuXFxuKyAqL1xcbiB2b2lkIG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxcbiBcXHRcXHRcXHQgICBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYilcXG4ge1xcbkBAIC02ODYsNyArNjk0LDcgQEAgYm9vbCBibG9ja19kaXJ0eV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0XFx0fSB3aGlsZSAoYmggIT0gaGVhZCk7XFxuIFxcdH1cXG4gXFx0LypcXG4tXFx0ICogTG9jayBvdXQgcGFnZSdzIG1lbWNnIG1pZ3JhdGlvbiB0byBrZWVwIFBhZ2VEaXJ0eVxcbitcXHQgKiBMb2NrIG91dCBmb2xpbydzIG1lbWNnIG1pZ3JhdGlvbiB0byBrZWVwIGZvbGlvIGRpcnR5IGZsYWdcXG4gXFx0ICogc3luY2hyb25pemVkIHdpdGggcGVyLW1lbWNnIGRpcnR5IHBhZ2UgY291bnRlcnMuXFxuIFxcdCAqL1xcbiBcXHRuZXdseV9kaXJ0eSA9ICFmb2xpb190ZXN0X3NldF9kaXJ0eShmb2xpbyk7XFxuQEAgLTk1MiwyMyArOTYwLDIzIEBAIF9fZ2V0YmxrX3Nsb3coc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3QgYmxvY2ssXFxuIH1cXG4gXFxuIC8qXFxuLSAqIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBkaXJ0eSBidWZmZXJzIGFuZCBkaXJ0eSBwYWdlczpcXG4rICogVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGRpcnR5IGJ1ZmZlcnMgYW5kIGRpcnR5IGZvbGlvczpcXG4gICpcXG4tICogV2hlbmV2ZXIgYSBwYWdlIGhhcyBhbnkgZGlydHkgYnVmZmVycywgdGhlIHBhZ2UncyBkaXJ0eSBiaXQgaXMgc2V0LCBhbmRcXG4tICogdGhlIHBhZ2UgaXMgdGFnZ2VkIGRpcnR5IGluIHRoZSBwYWdlIGNhY2hlLlxcbisgKiBXaGVuZXZlciBhIGZvbGlvIGhhcyBhbnkgZGlydHkgYnVmZmVycywgdGhlIGZvbGlvJ3MgZGlydHkgZmxhZyBpcyBzZXQsIGFuZFxcbisgKiB0aGUgZm9saW8gaXMgdGFnZ2VkIGRpcnR5IGluIHRoZSBwYWdlIGNhY2hlLlxcbiAgKlxcbiAgKiBBdCBhbGwgdGltZXMsIHRoZSBkaXJ0aW5lc3Mgb2YgdGhlIGJ1ZmZlcnMgcmVwcmVzZW50cyB0aGUgZGlydGluZXNzIG9mXFxuLSAqIHN1YnNlY3Rpb25zIG9mIHRoZSBwYWdlLiAgSWYgdGhlIHBhZ2UgaGFzIGJ1ZmZlcnMsIHRoZSBwYWdlIGRpcnR5IGJpdCBpc1xcbisgKiBzdWJzZWN0aW9ucyBvZiB0aGUgZm9saW8uICBJZiB0aGUgZm9saW8gaGFzIGJ1ZmZlcnMsIHRoZSBmb2xpbyBkaXJ0eSBmbGFnIGlzXFxuICAqIG1lcmVseSBhIGhpbnQgYWJvdXQgdGhlIHRydWUgZGlydHkgc3RhdGUuXFxuICAqXFxuLSAqIFdoZW4gYSBwYWdlIGlzIHNldCBkaXJ0eSBpbiBpdHMgZW50aXJldHksIGFsbCBpdHMgYnVmZmVycyBhcmUgbWFya2VkIGRpcnR5XFxuLSAqIChpZiB0aGUgcGFnZSBoYXMgYnVmZmVycykuXFxuKyAqIFdoZW4gYSBmb2xpbyBpcyBzZXQgZGlydHkgaW4gaXRzIGVudGlyZXR5LCBhbGwgaXRzIGJ1ZmZlcnMgYXJlIG1hcmtlZCBkaXJ0eVxcbisgKiAoaWYgdGhlIGZvbGlvIGhhcyBidWZmZXJzKS5cXG4gICpcXG4tICogV2hlbiBhIGJ1ZmZlciBpcyBtYXJrZWQgZGlydHksIGl0cyBwYWdlIGlzIGRpcnRpZWQsIGJ1dCB0aGUgcGFnZSdzIG90aGVyXFxuKyAqIFdoZW4gYSBidWZmZXIgaXMgbWFya2VkIGRpcnR5LCBpdHMgZm9saW8gaXMgZGlydGllZCwgYnV0IHRoZSBmb2xpbydzIG90aGVyXFxuICAqIGJ1ZmZlcnMgYXJlIG5vdC5cXG4gICpcXG4gICogQWxzby4gIFdoZW4gYmxvY2tkZXYgYnVmZmVycyBhcmUgZXhwbGljaXRseSByZWFkIHdpdGggYnJlYWQoKSwgdGhleVxcbi0gKiBpbmRpdmlkdWFsbHkgYmVjb21lIHVwdG9kYXRlLiAgQnV0IHRoZWlyIGJhY2tpbmcgcGFnZSByZW1haW5zIG5vdFxcbisgKiBpbmRpdmlkdWFsbHkgYmVjb21lIHVwdG9kYXRlLiAgQnV0IHRoZWlyIGJhY2tpbmcgZm9saW8gcmVtYWlucyBub3RcXG4gICogdXB0b2RhdGUgLSBldmVuIGlmIGFsbCBvZiBpdHMgYnVmZmVycyBhcmUgdXB0b2RhdGUuICBBIHN1YnNlcXVlbnRcXG4gICogYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKCkgYWdhaW5zdCB0aGF0IGZvbGlvIHdpbGwgZGlzY292ZXIgYWxsIHRoZSB1cHRvZGF0ZVxcbiAgKiBidWZmZXJzLCB3aWxsIHNldCB0aGUgZm9saW8gdXB0b2RhdGUgYW5kIHdpbGwgcGVyZm9ybSBubyBJL08uXFxuQEAgLTk3OSw3ICs5ODcsNyBAQCBfX2dldGJsa19zbG93KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLFxcbiAgKiBAYmg6IHRoZSBidWZmZXJfaGVhZCB0byBtYXJrIGRpcnR5XFxuICAqXFxuICAqIG1hcmtfYnVmZmVyX2RpcnR5KCkgd2lsbCBzZXQgdGhlIGRpcnR5IGJpdCBhZ2FpbnN0IHRoZSBidWZmZXIsIHRoZW4gc2V0XFxuLSAqIGl0cyBiYWNraW5nIHBhZ2UgZGlydHksIHRoZW4gdGFnIHRoZSBwYWdlIGFzIGRpcnR5IGluIHRoZSBwYWdlIGNhY2hlXFxuKyAqIGl0cyBiYWNraW5nIGZvbGlvIGRpcnR5LCB0aGVuIHRhZyB0aGUgZm9saW8gYXMgZGlydHkgaW4gdGhlIHBhZ2UgY2FjaGVcXG4gICogYW5kIHRoZW4gYXR0YWNoIHRoZSBhZGRyZXNzX3NwYWNlJ3MgaW5vZGUgdG8gaXRzIHN1cGVyYmxvY2sncyBkaXJ0eVxcbiAgKiBpbm9kZSBsaXN0LlxcbiAgKlxcbkBAIC0xMDc0LDcgKzEwODIsNyBAQCBzdGF0aWMgdm9pZCBidWZmZXJfc2V0X2NyeXB0b19jdHgoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxcbiBcXG4gXFx0LypcXG4gXFx0ICogVGhlIGV4dDQgam91cm5hbCAoamJkMikgY2FuIHN1Ym1pdCBhIGJ1ZmZlcl9oZWFkIGl0IGRpcmVjdGx5IGNyZWF0ZWRcXG4tXFx0ICogZm9yIGEgbm9uLXBhZ2VjYWNoZSBwYWdlLiAgZnNjcnlwdCBkb2Vzbid0IGNhcmUgYWJvdXQgdGhlc2UuXFxuK1xcdCAqIGZvciBhIG5vbi1wYWdlY2FjaGUgZm9saW8uICBmc2NyeXB0IGRvZXNuJ3QgY2FyZSBhYm91dCB0aGVzZS5cXG4gXFx0ICovXFxuIFxcdGlmICghbWFwcGluZylcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC0xMjE2LDcgKzEyMjQsNyBAQCBzdGF0aWMgdm9pZCBiaF9scnVfaW5zdGFsbChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcbiBcXG4gXFx0LypcXG4gXFx0ICogdGhlIHJlZmNvdW50IG9mIGJ1ZmZlcl9oZWFkIGluIGJoX2xydSBwcmV2ZW50cyBkcm9wcGluZyB0aGVcXG4tXFx0ICogYXR0YWNoZWQgcGFnZShpLmUuLCB0cnlfdG9fZnJlZV9idWZmZXJzKSBzbyBpdCBjb3VsZCBjYXVzZVxcbitcXHQgKiBhdHRhY2hlZCBmb2xpbyAoaS5lLiwgdHJ5X3RvX2ZyZWVfYnVmZmVycykgc28gaXQgY291bGQgY2F1c2VcXG4gXFx0ICogZmFpbGluZyBwYWdlIG1pZ3JhdGlvbi5cXG4gXFx0ICogU2tpcCBwdXR0aW5nIHVwY29taW5nIGJoIGludG8gYmhfbHJ1IHVudGlsIG1pZ3JhdGlvbiBpcyBkb25lLlxcbiBcXHQgKi9cXG5AQCAtMTI4MCw3ICsxMjg4LDcgQEAgbG9va3VwX2JoX2xydShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBibG9jaywgdW5zaWduZWQgc2l6ZSlcXG4gICogUGVyZm9ybSBhIHBhZ2VjYWNoZSBsb29rdXAgZm9yIHRoZSBtYXRjaGluZyBidWZmZXIuICBJZiBpdCdzIHRoZXJlLCByZWZyZXNoXFxuICAqIGl0IGluIHRoZSBMUlUgYW5kIG1hcmsgaXQgYXMgYWNjZXNzZWQuICBJZiBpdCBpcyBub3QgcHJlc2VudCB0aGVuIHJldHVyblxcbiAgKiBOVUxMLiBBdG9taWMgY29udGV4dCBjYWxsZXJzIG1heSBhbHNvIHJldHVybiBOVUxMIGlmIHRoZSBidWZmZXIgaXMgYmVpbmdcXG4tICogbWlncmF0ZWQ7IHNpbWlsYXJseSB0aGUgcGFnZSBpcyBub3QgbWFya2VkIGFjY2Vzc2VkIGVpdGhlci5cXG4rICogbWlncmF0ZWQ7IHNpbWlsYXJseSB0aGUgZm9saW8gaXMgbm90IG1hcmtlZCBhY2Nlc3NlZCBlaXRoZXIuXFxuICAqL1xcbiBzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpcXG4gZmluZF9nZXRfYmxvY2tfY29tbW9uKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLFxcbkBAIC0xMjg5LDcgKzEyOTcsNyBAQCBmaW5kX2dldF9ibG9ja19jb21tb24oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3QgYmxvY2ssXFxuIFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBsb29rdXBfYmhfbHJ1KGJkZXYsIGJsb2NrLCBzaXplKTtcXG4gXFxuIFxcdGlmIChiaCA9PSBOVUxMKSB7XFxuLVxcdFxcdC8qIF9fZmluZF9nZXRfYmxvY2tfc2xvdyB3aWxsIG1hcmsgdGhlIHBhZ2UgYWNjZXNzZWQgKi9cXG4rXFx0XFx0LyogX19maW5kX2dldF9ibG9ja19zbG93IHdpbGwgbWFyayB0aGUgZm9saW8gYWNjZXNzZWQgKi9cXG4gXFx0XFx0YmggPSBfX2ZpbmRfZ2V0X2Jsb2NrX3Nsb3coYmRldiwgYmxvY2ssIGF0b21pYyk7XFxuIFxcdFxcdGlmIChiaClcXG4gXFx0XFx0XFx0YmhfbHJ1X2luc3RhbGwoYmgpO1xcbkBAIC0xNDc1LDE1ICsxNDgzLDE0IEBAIHZvaWQgZm9saW9fc2V0X2JoKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChmb2xpb19zZXRfYmgpO1xcbiBcXG4tLypcXG4tICogQ2FsbGVkIHdoZW4gdHJ1bmNhdGluZyBhIGJ1ZmZlciBvbiBhIHBhZ2UgY29tcGxldGVseS5cXG4tICovXFxuLVxcbiAvKiBCaXRzIHRoYXQgYXJlIGNsZWFyZWQgZHVyaW5nIGFuIGludmFsaWRhdGUgKi9cXG4gI2RlZmluZSBCVUZGRVJfRkxBR1NfRElTQ0FSRCBcXFxcXFxuIFxcdCgxIFxcdTAwM2NcXHUwMDNjIEJIX01hcHBlZCB8IDEgXFx1MDAzY1xcdTAwM2MgQkhfTmV3IHwgMSBcXHUwMDNjXFx1MDAzYyBCSF9SZXEgfCBcXFxcXFxuIFxcdCAxIFxcdTAwM2NcXHUwMDNjIEJIX0RlbGF5IHwgMSBcXHUwMDNjXFx1MDAzYyBCSF9VbndyaXR0ZW4pXFxuIFxcbisvKlxcbisgKiBDYWxsZWQgd2hlbiB0cnVuY2F0aW5nIGEgYnVmZmVyIG9uIGEgZm9saW8gY29tcGxldGVseS5cXG4rICovXFxuIHN0YXRpYyB2b2lkIGRpc2NhcmRfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgYl9zdGF0ZTtcXG5AQCAtMTYxMSw5ICsxNjE4LDcgQEAgRVhQT1JUX1NZTUJPTChjcmVhdGVfZW1wdHlfYnVmZmVycyk7XFxuICAqIG1vbWVudCB3aGVuIHNvbWV0aGluZyB3aWxsIGV4cGxpY2l0bHkgbWFyayB0aGUgYnVmZmVyIGRpcnR5IChob3BlZnVsbHkgdGhhdFxcbiAgKiB3aWxsIG5vdCBoYXBwZW4gdW50aWwgd2Ugd2lsbCBmcmVlIHRoYXQgYmxvY2sgOy0pIFdlIGRvbid0IGV2ZW4gbmVlZCB0byBtYXJrXFxuICAqIGl0IG5vdC11cHRvZGF0ZSAtIG5vYm9keSBjYW4gZXhwZWN0IGFueXRoaW5nIGZyb20gYSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyXFxuLSAqIGFueXdheS4gV2UgdXNlZCB0byB1c2UgdW5tYXBfYnVmZmVyKCkgZm9yIHN1Y2ggaW52YWxpZGF0aW9uLCBidXQgdGhhdCB3YXNcXG4tICogd3JvbmcuIFdlIGRlZmluaXRlbHkgZG9uJ3Qgd2FudCB0byBtYXJrIHRoZSBhbGlhcyB1bm1hcHBlZCwgZm9yIGV4YW1wbGUgLSBpdFxcbi0gKiB3b3VsZCBjb25mdXNlIGFueW9uZSB3aG8gbWlnaHQgcGljayBpdCB3aXRoIGJyZWFkKCkgYWZ0ZXJ3YXJkcy4uLlxcbisgKiBhbnl3YXkuXFxuICAqXFxuICAqIEFsc28uLiAgTm90ZSB0aGF0IGJmb3JnZXQoKSBkb2Vzbid0IGxvY2sgdGhlIGJ1ZmZlci4gIFNvIHRoZXJlIGNhbiBiZVxcbiAgKiB3cml0ZW91dCBJL08gZ29pbmcgb24gYWdhaW5zdCByZWNlbnRseS1mcmVlZCBidWZmZXJzLiAgV2UgZG9uJ3Qgd2FpdCBvbiB0aGF0XFxuQEAgLTE2NDksNyArMTY1NCw3IEBAIHZvaWQgY2xlYW5fYmRldl9hbGlhc2VzKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLCBzZWN0b3JfdCBsZW4pXFxuIFxcdFxcdFxcdC8qIFJlY2hlY2sgd2hlbiB0aGUgZm9saW8gaXMgbG9ja2VkIHdoaWNoIHBpbnMgYmhzICovXFxuIFxcdFxcdFxcdGhlYWQgPSBmb2xpb19idWZmZXJzKGZvbGlvKTtcXG4gXFx0XFx0XFx0aWYgKCFoZWFkKVxcbi1cXHRcXHRcXHRcXHRnb3RvIHVubG9ja19wYWdlO1xcbitcXHRcXHRcXHRcXHRnb3RvIHVubG9ja19mb2xpbztcXG4gXFx0XFx0XFx0YmggPSBoZWFkO1xcbiBcXHRcXHRcXHRkbyB7XFxuIFxcdFxcdFxcdFxcdGlmICghYnVmZmVyX21hcHBlZChiaCkgfHwgKGJoLVxcdTAwM2ViX2Jsb2NrbnIgXFx1MDAzYyBibG9jaykpXFxuQEAgLTE2NjIsNyArMTY2Nyw3IEBAIHZvaWQgY2xlYW5fYmRldl9hbGlhc2VzKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLCBzZWN0b3JfdCBsZW4pXFxuIG5leHQ6XFxuIFxcdFxcdFxcdFxcdGJoID0gYmgtXFx1MDAzZWJfdGhpc19wYWdlO1xcbiBcXHRcXHRcXHR9IHdoaWxlIChiaCAhPSBoZWFkKTtcXG4tdW5sb2NrX3BhZ2U6XFxuK3VubG9ja19mb2xpbzpcXG4gXFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRmb2xpb19iYXRjaF9yZWxlYXNlKFxcdTAwMjZmYmF0Y2gpO1xcbkBAIC0xNzEwLDcgKzE3MTUsNyBAQCBzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpmb2xpb19jcmVhdGVfYnVmZmVycyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiAgKlxcbiAgKiBJZiBibG9ja193cml0ZV9mdWxsX2ZvbGlvKCkgaXMgY2FsbGVkIGZvciByZWd1bGFyIHdyaXRlYmFja1xcbiAgKiAod2JjLVxcdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FKSB0aGVuIGl0IHdpbGwgcmVkaXJ0eSBhIGZvbGlvIHdoaWNoXFxuLSAqIGhhcyBhIGxvY2tlZCBidWZmZXIuICAgVGhpcyBvbmx5IGNhbiBoYXBwZW4gaWYgc29tZW9uZSBoYXMgd3JpdHRlblxcbisgKiBoYXMgYSBsb2NrZWQgYnVmZmVyLiAgIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGlmIHNvbWVvbmUgaGFzIHdyaXR0ZW5cXG4gICogdGhlIGJ1ZmZlciBkaXJlY3RseSwgd2l0aCBiaF9zdWJtaXQoKS4gIEF0IHRoZSBhZGRyZXNzX3NwYWNlIGxldmVsXFxuICAqIHRoZSBmb2xpbyB3cml0ZWJhY2sgZmxhZyBwcmV2ZW50cyB0aGlzIGNvbnRlbnRpb24gZnJvbSBvY2N1cnJpbmcuXFxuICAqXFxuQEAgLTIyMTMsOSArMjIxOCw5IEBAIGludCBnZW5lcmljX3dyaXRlX2VuZChjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRpZiAob2xkX3NpemUgXFx1MDAzYyBwb3MpXFxuIFxcdFxcdHBhZ2VjYWNoZV9pc2l6ZV9leHRlbmRlZChpbm9kZSwgb2xkX3NpemUsIHBvcyk7XFxuIFxcdC8qXFxuLVxcdCAqIERvbid0IG1hcmsgdGhlIGlub2RlIGRpcnR5IHVuZGVyIHBhZ2UgbG9jay4gRmlyc3QsIGl0IHVubmVjZXNzYXJpbHlcXG4tXFx0ICogbWFrZXMgdGhlIGhvbGRpbmcgdGltZSBvZiBwYWdlIGxvY2sgbG9uZ2VyLiBTZWNvbmQsIGl0IGZvcmNlcyBsb2NrXFxuLVxcdCAqIG9yZGVyaW5nIG9mIHBhZ2UgbG9jayBhbmQgdHJhbnNhY3Rpb24gc3RhcnQgZm9yIGpvdXJuYWxpbmdcXG4rXFx0ICogRG9uJ3QgbWFyayB0aGUgaW5vZGUgZGlydHkgdW5kZXIgZm9saW8gbG9jay4gRmlyc3QsIGl0IHVubmVjZXNzYXJpbHlcXG4rXFx0ICogbWFrZXMgdGhlIGhvbGRpbmcgdGltZSBvZiBmb2xpbyBsb2NrIGxvbmdlci4gU2Vjb25kLCBpdCBmb3JjZXMgbG9ja1xcbitcXHQgKiBvcmRlcmluZyBvZiBmb2xpbyBsb2NrIGFuZCB0cmFuc2FjdGlvbiBzdGFydCBmb3Igam91cm5hbGluZ1xcbiBcXHQgKiBmaWxlc3lzdGVtcy5cXG4gXFx0ICovXFxuIFxcdGlmIChpX3NpemVfY2hhbmdlZClcXG5AQCAtMjM0MSw3ICsyMzQ2LDcgQEAgaW50IGJsb2NrX3JlYWRfZnVsbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZXRfYmxvY2tfdCAqZ2V0X2Jsb2NrKVxcbiBcXHRcXHQgKiBCSF9Bc3luY19SZWFkIHRlbGxzIGVuZF9idWZmZXJfYXN5bmNfcmVhZCgpIHRoYXQgdGhpc1xcbiBcXHRcXHQgKiBidWZmZXIgaXMgbm90IHVuZGVyIGFzeW5jIEkvTy5cXG4gXFx0XFx0ICpcXG4tXFx0XFx0ICogVGhlIGZvbGlvIGNvbWVzIHVubG9ja2VkIHdoZW4gaXQgaGFzIG5vIGxvY2tlZFxcbitcXHRcXHQgKiBUaGUgZm9saW8gaXMgdW5sb2NrZWQgd2hlbiBpdCBoYXMgbm8gbG9ja2VkXFxuIFxcdFxcdCAqIGJ1ZmZlcl9hc3luYyBidWZmZXJzIGxlZnQuXFxuIFxcdFxcdCAqXFxuIFxcdFxcdCAqIFRoZSBmb2xpbyBsb2NrIHByZXZlbnRzIGFueW9uZSBzdGFydGluZyBuZXcgYXN5bmNcXG5AQCAtMjQ1MSw3ICsyNDU2LDcgQEAgc3RhdGljIGludCBjb250X2V4cGFuZF96ZXJvKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHQvKiBwYWdlIGNvdmVycyB0aGUgYm91bmRhcnksIGZpbmQgdGhlIGJvdW5kYXJ5IG9mZnNldCAqL1xcbitcXHQvKiBmb2xpbyBjcm9zc2VzIHRoZSBib3VuZGFyeSwgZmluZCB0aGUgYm91bmRhcnkgb2Zmc2V0ICovXFxuIFxcdGlmIChpbmRleCA9PSBjdXJpZHgpIHtcXG4gXFx0XFx0emVyb2Zyb20gPSBjdXJwb3MgXFx1MDAyNiB+UEFHRV9NQVNLO1xcbiBcXHRcXHQvKiBpZiB3ZSB3aWxsIGV4cGFuZCB0aGUgdGhpbmcgbGFzdCBibG9jayB3aWxsIGJlIGZpbGxlZCAqL1xcbkBAIC0yNTA5LDE4ICsyNTE0LDE4IEBAIEVYUE9SVF9TWU1CT0woY29udF93cml0ZV9iZWdpbik7XFxuIFxcbiAvKlxcbiAgKiBibG9ja19wYWdlX21rd3JpdGUoKSBpcyBub3QgYWxsb3dlZCB0byBjaGFuZ2UgdGhlIGZpbGUgc2l6ZSBhcyBpdCBnZXRzXFxuLSAqIGNhbGxlZCBmcm9tIGEgcGFnZSBmYXVsdCBoYW5kbGVyIHdoZW4gYSBwYWdlIGlzIGZpcnN0IGRpcnRpZWQuIEhlbmNlIHdlIG11c3RcXG4tICogYmUgY2FyZWZ1bCB0byBjaGVjayBmb3IgRU9GIGNvbmRpdGlvbnMgaGVyZS4gV2Ugc2V0IHRoZSBwYWdlIHVwIGNvcnJlY3RseVxcbi0gKiBmb3IgYSB3cml0dGVuIHBhZ2Ugd2hpY2ggbWVhbnMgd2UgZ2V0IEVOT1NQQyBjaGVja2luZyB3aGVuIHdyaXRpbmcgaW50b1xcbisgKiBjYWxsZWQgZnJvbSBhIHBhZ2UgZmF1bHQgaGFuZGxlciB3aGVuIGEgZm9saW8gaXMgZmlyc3QgZGlydGllZC4gSGVuY2Ugd2UgbXVzdFxcbisgKiBiZSBjYXJlZnVsIHRvIGNoZWNrIGZvciBFT0YgY29uZGl0aW9ucyBoZXJlLiBXZSBzZXQgdGhlIGZvbGlvIHVwIGNvcnJlY3RseVxcbisgKiBmb3IgYSB3cml0dGVuIGZvbGlvIHdoaWNoIG1lYW5zIHdlIGdldCBFTk9TUEMgY2hlY2tpbmcgd2hlbiB3cml0aW5nIGludG9cXG4gICogaG9sZXMgYW5kIGNvcnJlY3QgZGVsYWxsb2MgYW5kIHVud3JpdHRlbiBleHRlbnQgbWFwcGluZyBvbiBmaWxlc3lzdGVtcyB0aGF0XFxuICAqIHN1cHBvcnQgdGhlc2UgZmVhdHVyZXMuXFxuICAqXFxuICAqIFdlIGFyZSBub3QgYWxsb3dlZCB0byB0YWtlIHRoZSBpX3J3c2VtIGhlcmUgc28gd2UgaGF2ZSB0byBwbGF5IGdhbWVzIHRvXFxuLSAqIHByb3RlY3QgYWdhaW5zdCB0cnVuY2F0ZSByYWNlcyBhcyB0aGUgcGFnZSBjb3VsZCBub3cgYmUgYmV5b25kIEVPRi4gIEJlY2F1c2VcXG4tICogdHJ1bmNhdGUgd3JpdGVzIHRoZSBpbm9kZSBzaXplIGJlZm9yZSByZW1vdmluZyBwYWdlcywgb25jZSB3ZSBoYXZlIHRoZVxcbi0gKiBwYWdlIGxvY2sgd2UgY2FuIGRldGVybWluZSBzYWZlbHkgaWYgdGhlIHBhZ2UgaXMgYmV5b25kIEVPRi4gSWYgaXQgaXMgbm90XFxuLSAqIGJleW9uZCBFT0YsIHRoZW4gdGhlIHBhZ2UgaXMgZ3VhcmFudGVlZCBzYWZlIGFnYWluc3QgdHJ1bmNhdGlvbiB1bnRpbCB3ZVxcbi0gKiB1bmxvY2sgdGhlIHBhZ2UuXFxuKyAqIHByb3RlY3QgYWdhaW5zdCB0cnVuY2F0ZSByYWNlcyBhcyB0aGUgZm9saW8gY291bGQgbm93IGJlIGJleW9uZCBFT0YuICBCZWNhdXNlXFxuKyAqIHRydW5jYXRlIHdyaXRlcyB0aGUgaW5vZGUgc2l6ZSBiZWZvcmUgcmVtb3ZpbmcgZm9saW9zLCBvbmNlIHdlIGhhdmUgdGhlXFxuKyAqIGZvbGlvIGxvY2sgd2UgY2FuIGRldGVybWluZSBzYWZlbHkgaWYgdGhlIGZvbGlvIGlzIGJleW9uZCBFT0YuIElmIGl0IGlzIG5vdFxcbisgKiBiZXlvbmQgRU9GLCB0aGVuIHRoZSBmb2xpbyBpcyBndWFyYW50ZWVkIHNhZmUgYWdhaW5zdCB0cnVuY2F0aW9uIHVudGlsIHdlXFxuKyAqIHVubG9jayB0aGUgZm9saW8uXFxuICAqXFxuICAqIERpcmVjdCBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24gc2hvdWxkIHByb3RlY3QgYWdhaW5zdCBmaWxlc3lzdGVtIGZyZWV6aW5nXFxuICAqIHVzaW5nIHNiX3N0YXJ0X3BhZ2VmYXVsdCgpIC0gc2JfZW5kX3BhZ2VmYXVsdCgpIGZ1bmN0aW9ucy5cXG5AQCAtMjUzOCw3ICsyNTQzLDcgQEAgaW50IGJsb2NrX3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuIFxcdHNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XFxuIFxcdGlmICgoZm9saW8tXFx1MDAzZW1hcHBpbmcgIT0gaW5vZGUtXFx1MDAzZWlfbWFwcGluZykgfHxcXG4gXFx0ICAgIChmb2xpb19wb3MoZm9saW8pIFxcdTAwM2U9IHNpemUpKSB7XFxuLVxcdFxcdC8qIFdlIG92ZXJsb2FkIEVGQVVMVCB0byBtZWFuIHBhZ2UgZ290IHRydW5jYXRlZCAqL1xcbitcXHRcXHQvKiBXZSBvdmVybG9hZCBFRkFVTFQgdG8gbWVhbiBmb2xpbyBnb3QgdHJ1bmNhdGVkICovXFxuIFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmggYi9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmhcXG5pbmRleCBmZDJjNzExNWMwNTQyLi4xZDU1Zjc3NzBjYWQxIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaFxcbkBAIC0zMzgsMjAgKzMzOCw1OCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYmZvcmdldChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcbiBcXHRcXHRfX2Jmb3JnZXQoYmgpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBidWZmZXJfaGVhZCAqXFxuLXNiX2JyZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHNlY3Rvcl90IGJsb2NrKVxcbisvKipcXG4rICogc2JfYnJlYWQgLSBSZWFkIGEgYmxvY2suXFxuKyAqIEBzYjogVGhlIHN1cGVyYmxvY2sgdG8gcmVhZCBmcm9tLlxcbisgKiBAYmxvY2s6IEJsb2NrIG51bWJlciBpbiB1bml0cyBvZiBibG9jayBzaXplLlxcbisgKlxcbisgKiBSZWFkIGEgc3BlY2lmaWVkIGJsb2NrLCBhbmQgcmV0dXJuIHRoZSBidWZmZXIgaGVhZCB0aGF0IHJlZmVyc1xcbisgKiB0byBpdC4gIFRoZSBtZW1vcnkgaXMgYWxsb2NhdGVkIGZyb20gdGhlIG1vdmFibGUgYXJlYSBzbyB0aGF0IGl0IGNhblxcbisgKiBiZSBtaWdyYXRlZC4gIFRoZSByZXR1cm5lZCBidWZmZXIgaGVhZCBoYXMgaXRzIHJlZmNvdW50IGluY3JlYXNlZC5cXG4rICogVGhlIGNhbGxlciBzaG91bGQgY2FsbCBicmVsc2UoKSB3aGVuIGl0IGhhcyBmaW5pc2hlZCB3aXRoIHRoZSBidWZmZXIuXFxuKyAqXFxuKyAqIENvbnRleHQ6IE1heSBzbGVlcCB3YWl0aW5nIGZvciBJL08uXFxuKyAqIFJldHVybjogTlVMTCBpZiB0aGUgYmxvY2sgd2FzIHVucmVhZGFibGUuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lXFxuK3N0cnVjdCBidWZmZXJfaGVhZCAqc2JfYnJlYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc2VjdG9yX3QgYmxvY2spXFxuIHtcXG4gXFx0cmV0dXJuIF9fYnJlYWRfZ2ZwKHNiLVxcdTAwM2VzX2JkZXYsIGJsb2NrLCBzYi1cXHUwMDNlc19ibG9ja3NpemUsIF9fR0ZQX01PVkFCTEUpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBidWZmZXJfaGVhZCAqXFxuLXNiX2JyZWFkX3VubW92YWJsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzZWN0b3JfdCBibG9jaylcXG4rLyoqXFxuKyAqIHNiX2JyZWFkX3VubW92YWJsZSAtIFJlYWQgYSBibG9jay5cXG4rICogQHNiOiBUaGUgc3VwZXJibG9jayB0byByZWFkIGZyb20uXFxuKyAqIEBibG9jazogQmxvY2sgbnVtYmVyIGluIHVuaXRzIG9mIGJsb2NrIHNpemUuXFxuKyAqXFxuKyAqIFJlYWQgYSBzcGVjaWZpZWQgYmxvY2ssIGFuZCByZXR1cm4gdGhlIGJ1ZmZlciBoZWFkIHRoYXQgcmVmZXJzIHRvIGl0LlxcbisgKiBUaGUgbWVtb3J5IGlzIGFsbG9jYXRlZCBmcm9tIHRoZSB1bm1vdmFibGUgYXJlYSBzbyB0aGF0IHBvaW50ZXJzIGludG9cXG4rICogaXQgcmVtYWluIHZhbGlkIGFmdGVyIGNvbXBhY3Rpb24gcnVucy4gIFRoZSByZXR1cm5lZCBidWZmZXIgaGVhZCBoYXNcXG4rICogaXRzIHJlZmNvdW50IGluY3JlYXNlZC4gIFRoZSBjYWxsZXIgc2hvdWxkIGNhbGwgYnJlbHNlKCkgd2hlbiBpdCBoYXNcXG4rICogZmluaXNoZWQgd2l0aCB0aGUgYnVmZmVyLlxcbisgKlxcbisgKiBDb250ZXh0OiBNYXkgc2xlZXAgd2FpdGluZyBmb3IgSS9PLlxcbisgKiBSZXR1cm46IE5VTEwgaWYgdGhlIGJsb2NrIHdhcyB1bnJlYWRhYmxlLlxcbisgKi9cXG4rc3RhdGljIGlubGluZVxcbitzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNiX2JyZWFkX3VubW92YWJsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzZWN0b3JfdCBibG9jaylcXG4ge1xcbiBcXHRyZXR1cm4gX19icmVhZF9nZnAoc2ItXFx1MDAzZXNfYmRldiwgYmxvY2ssIHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSwgMCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZFxcbi1zYl9icmVhZGFoZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHNlY3Rvcl90IGJsb2NrKVxcbisvKipcXG4rICogc2JfYnJlYWRhaGVhZCAtIFN0YXJ0IHJlYWRhaGVhZC5cXG4rICogQHNiOiBTdXBlcmJsb2NrIGlkZW50aWZ5aW5nIHRoZSBibG9jayBkZXZpY2UuXFxuKyAqIEBibG9jazogVGhlIGJsb2NrIHRvIHJlYWQuXFxuKyAqXFxuKyAqIFJlYWQgdGhpcyBibG9jay4gIFRoZSBJL08gd2lsbCBiZSBmbGFnZ2VkIGFzIGJlaW5nIHJlYWRhaGVhZCByYXRoZXJcXG4rICogdGhhbiBpbW1lZGlhdGUgcmVhZCwgYnV0ICh1bmxpa2UgdGhlIHBhZ2UgY2FjaGUpLCBzdXJyb3VuZGluZyBibG9ja3NcXG4rICogd2lsbCBub3QgYmUgcmVhZC5cXG4rICpcXG4rICogQ29udGV4dDogTWF5IHNsZWVwIGluIG9yZGVyIHRvIGFsbG9jYXRlIG1lbW9yeS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmVcXG4rdm9pZCBzYl9icmVhZGFoZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHNlY3Rvcl90IGJsb2NrKVxcbiB7XFxuIFxcdF9fYnJlYWRhaGVhZChzYi1cXHUwMDNlc19iZGV2LCBibG9jaywgc2ItXFx1MDAzZXNfYmxvY2tzaXplKTtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMToxODoyOS42NTkxODMyMjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjU0Nzg1NTcwNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgY29udGFpbnMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLCBrZXJuZWxkb2MgYWRkaXRpb25zLCBjb21tZW50IGNvbnZlcnNpb25zIChmcm9tIHBhZ2UgdG8gZm9saW8gdGVybWlub2xvZ3kpLCBhbmQgYSBsYWJlbCByZW5hbWUgKHVubG9ja19wYWdlIHRvIHVubG9ja19mb2xpbykgd2l0aCBubyBmdW5jdGlvbmFsIGNvZGUgY2hhbmdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM4ZTcyZTZmMmZiNmIxNGE4YWY4NGU0YjNlOTBlYTgyN2QzMThmMTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyOCAyMToxODoyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0XG5pbmRleCA2MDg4MGViMGM0OWQxLi5kZTk2YjY3NDU2MDBiIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdFxuQEAgLTM0OCw3ICszNDgsNyBAQCBzaW1wbHkgb2YgcmV0dXJuIDEuICBOb3RlIHRoYXQgYWxsIGFjdHVhbCBldmljdGlvbiB3b3JrIGlzIGRvbmUgYnkgY2FsbGVyIGFmdGVyXG4gQXMgYmVmb3JlLCBjbGVhcl9pbm9kZSgpIG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBvbiBlYWNoIGNhbGwgb2ZcbiAtXHUwMDNlZXZpY3RfaW5vZGUoKSAoYXMgaXQgdXNlZCB0byBiZSBmb3IgZWFjaCBjYWxsIG9mIC1cdTAwM2VkZWxldGVfaW5vZGUoKSkuICBVbmxpa2VcbiBiZWZvcmUsIGlmIHlvdSBhcmUgdXNpbmcgaW5vZGUtYXNzb2NpYXRlZCBtZXRhZGF0YSBidWZmZXJzIChpLmUuXG4tbWFya19idWZmZXJfZGlydHlfaW5vZGUoKSksIGl0J3MgeW91ciByZXNwb25zaWJpbGl0eSB0byBjYWxsXG4rbW1iX21hcmtfYnVmZmVyX2RpcnR5KCkpLCBpdCdzIHlvdXIgcmVzcG9uc2liaWxpdHkgdG8gY2FsbFxuIGludmFsaWRhdGVfaW5vZGVfYnVmZmVycygpIGJlZm9yZSBjbGVhcl9pbm9kZSgpLlxuIFxuIE5PVEU6IGNoZWNraW5nIGlfbmxpbmsgaW4gdGhlIGJlZ2lubmluZyBvZiAtXHUwMDNld3JpdGVfaW5vZGUoKSBhbmQgYmFpbGluZyBvdXRcbmRpZmYgLS1naXQgYS9mcy9idWZmZXIuYyBiL2ZzL2J1ZmZlci5jXG5pbmRleCBlZDk2NmZhNzNiMWJhLi5jOTM0MmFlYjhjZGY2IDEwMDY0NFxuLS0tIGEvZnMvYnVmZmVyLmNcbisrKyBiL2ZzL2J1ZmZlci5jXG5AQCAtMjY1LDcgKzI2NSw3IEBAIF9fZmluZF9nZXRfYmxvY2tfc2xvdyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBibG9jaywgYm9vbCBhdG9taWMpXG4gXHRcdGJoID0gYmgtXHUwMDNlYl90aGlzX3BhZ2U7XG4gXHR9IHdoaWxlIChiaCAhPSBoZWFkKTtcbiBcbi1cdC8qIHdlIG1pZ2h0IGJlIGhlcmUgYmVjYXVzZSBzb21lIG9mIHRoZSBidWZmZXJzIG9uIHRoaXMgcGFnZSBhcmVcbitcdC8qIHdlIG1pZ2h0IGJlIGhlcmUgYmVjYXVzZSBzb21lIG9mIHRoZSBidWZmZXJzIG9uIHRoaXMgZm9saW8gYXJlXG4gXHQgKiBub3QgbWFwcGVkLiAgVGhpcyBpcyBkdWUgdG8gdmFyaW91cyByYWNlcyBiZXR3ZWVuXG4gXHQgKiBmaWxlIGlvIG9uIHRoZSBibG9jayBkZXZpY2UgYW5kIGdldGJsay4gIEl0IGdldHMgZGVhbHQgd2l0aFxuIFx0ICogZWxzZXdoZXJlLCBkb24ndCBidWZmZXJfZXJyb3IgaWYgd2UgaGFkIHNvbWUgdW5tYXBwZWQgYnVmZmVyc1xuQEAgLTMxMSw3ICszMTEsNyBAQCBzdGF0aWMgdm9pZCBlbmRfYnVmZmVyX2FzeW5jX3JlYWQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHVwdG9kYXRlKVxuIFx0LypcbiBcdCAqIEJlIF92ZXJ5XyBjYXJlZnVsIGZyb20gaGVyZSBvbi4gQmFkIHRoaW5ncyBjYW4gaGFwcGVuIGlmXG4gXHQgKiB0d28gYnVmZmVyIGhlYWRzIGVuZCBJTyBhdCBhbG1vc3QgdGhlIHNhbWUgdGltZSBhbmQgYm90aFxuLVx0ICogZGVjaWRlIHRoYXQgdGhlIHBhZ2UgaXMgbm93IGNvbXBsZXRlbHkgZG9uZS5cbitcdCAqIGRlY2lkZSB0aGF0IHRoZSBmb2xpbyBpcyBub3cgY29tcGxldGVseSBkb25lLlxuIFx0ICovXG4gXHRmaXJzdCA9IGZvbGlvX2J1ZmZlcnMoZm9saW8pO1xuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Zmlyc3QtXHUwMDNlYl91cHRvZGF0ZV9sb2NrLCBmbGFncyk7XG5AQCAtNTIwLDggKzUyMCw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKG1tYl9oYXNfYnVmZmVycyk7XG4gICpcbiAgKiBEbyB0aGlzIGluIHR3byBtYWluIHN0YWdlczogZmlyc3Qgd2UgY29weSBkaXJ0eSBidWZmZXJzIHRvIGFcbiAgKiB0ZW1wb3JhcnkgaW5vZGUgbGlzdCwgcXVldWVpbmcgdGhlIHdyaXRlcyBhcyB3ZSBnby4gVGhlbiB3ZSBjbGVhblxuLSAqIHVwLCB3YWl0aW5nIGZvciB0aG9zZSB3cml0ZXMgdG8gY29tcGxldGUuIG1hcmtfYnVmZmVyX2RpcnR5X2lub2RlKClcbi0gKiBkb2Vzbid0IHRvdWNoIGJfYXNzb2NfYnVmZmVycyBsaXN0IGlmIGJfbW1iIGlzIG5vdCBOVUxMIHNvIHdlIGFyZSBzdXJlIHRoZVxuKyAqIHVwLCB3YWl0aW5nIGZvciB0aG9zZSB3cml0ZXMgdG8gY29tcGxldGUuIG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eSgpXG4rICogZG9lc24ndCB0b3VjaCBiX2Fzc29jX2J1ZmZlcnMgbGlzdCBpZiBiX21tYiBpcyBzZXQgc28gd2UgYXJlIHN1cmUgdGhlXG4gICogYnVmZmVyIHN0YXlzIG9uIG91ciBsaXN0IHVudGlsIElPIGNvbXBsZXRlcyAoYXQgd2hpY2ggcG9pbnQgaXQgY2FuIGJlXG4gICogcmVhcGVkKS5cbiAgKi9cbkBAIC01NDIsNyArNTQyLDcgQEAgaW50IG1tYl9zeW5jKHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iKVxuIFx0XHRiaCA9IEJIX0VOVFJZKG1tYi1cdTAwM2VsaXN0Lm5leHQpO1xuIFx0XHRXQVJOX09OX09OQ0UoYmgtXHUwMDNlYl9tbWIgIT0gbW1iKTtcbiBcdFx0X19yZW1vdmVfYXNzb2NfcXVldWUobW1iLCBiaCk7XG4tXHRcdC8qIEF2b2lkIHJhY2Ugd2l0aCBtYXJrX2J1ZmZlcl9kaXJ0eV9pbm9kZSgpIHdoaWNoIGRvZXNcbitcdFx0LyogQXZvaWQgcmFjZSB3aXRoIG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eSgpIHdoaWNoIGRvZXNcbiBcdFx0ICogYSBsb2NrbGVzcyBjaGVjayBhbmQgd2UgcmVseSBvbiBzZWVpbmcgdGhlIGRpcnR5IGJpdCAqL1xuIFx0XHRzbXBfbWIoKTtcbiBcdFx0aWYgKGJ1ZmZlcl9kaXJ0eShiaCkgfHwgYnVmZmVyX2xvY2tlZChiaCkpIHtcbkBAIC01ODAsNyArNTgwLDcgQEAgaW50IG1tYl9zeW5jKHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iKVxuIFx0XHRiaCA9IEJIX0VOVFJZKHRtcC5wcmV2KTtcbiBcdFx0Z2V0X2JoKGJoKTtcbiBcdFx0X19yZW1vdmVfYXNzb2NfcXVldWUobW1iLCBiaCk7XG4tXHRcdC8qIEF2b2lkIHJhY2Ugd2l0aCBtYXJrX2J1ZmZlcl9kaXJ0eV9pbm9kZSgpIHdoaWNoIGRvZXNcbitcdFx0LyogQXZvaWQgcmFjZSB3aXRoIG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eSgpIHdoaWNoIGRvZXNcbiBcdFx0ICogYSBsb2NrbGVzcyBjaGVjayBhbmQgd2UgcmVseSBvbiBzZWVpbmcgdGhlIGRpcnR5IGJpdCAqL1xuIFx0XHRzbXBfbWIoKTtcbiBcdFx0aWYgKGJ1ZmZlcl9kaXJ0eShiaCkpIHtcbkBAIC02MTgsNiArNjE4LDE0IEBAIHZvaWQgd3JpdGVfYm91bmRhcnlfYmxvY2soc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcbiBcdH1cbiB9XG4gXG4rLyoqXG4rICogbW1iX21hcmtfYnVmZmVyX2RpcnR5IC0gTWFyayBhIG1ldGFkYXRhIGJ1ZmZlciBkaXJ0eS5cbisgKiBAYmg6IFRoZSBidWZmZXIgdG8gbWFyayBkaXJ0eS5cbisgKiBAbW1iOiBUaGUgbGlzdCBvZiBidWZmZXJzIHRvIGFkZCB0aGUgYnVmZmVyIHRvLlxuKyAqXG4rICogTWFyayB0aGUgYnVmZmVyIGRpcnR5IGFuZCBhZGQgaXQgdG8gdGhlIGxpc3QgaWYgaXQgaXMgbm90IGFscmVhZHkgb25cbisgKiBhIGxpc3QuXG4rICovXG4gdm9pZCBtbWJfbWFya19idWZmZXJfZGlydHkoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbiBcdFx0XHQgICBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYilcbiB7XG5AQCAtNjg2LDcgKzY5NCw3IEBAIGJvb2wgYmxvY2tfZGlydHlfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdH0gd2hpbGUgKGJoICE9IGhlYWQpO1xuIFx0fVxuIFx0Lypcbi1cdCAqIExvY2sgb3V0IHBhZ2UncyBtZW1jZyBtaWdyYXRpb24gdG8ga2VlcCBQYWdlRGlydHlcbitcdCAqIExvY2sgb3V0IGZvbGlvJ3MgbWVtY2cgbWlncmF0aW9uIHRvIGtlZXAgZm9saW8gZGlydHkgZmxhZ1xuIFx0ICogc3luY2hyb25pemVkIHdpdGggcGVyLW1lbWNnIGRpcnR5IHBhZ2UgY291bnRlcnMuXG4gXHQgKi9cbiBcdG5ld2x5X2RpcnR5ID0gIWZvbGlvX3Rlc3Rfc2V0X2RpcnR5KGZvbGlvKTtcbkBAIC05NTIsMjMgKzk2MCwyMyBAQCBfX2dldGJsa19zbG93KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLFxuIH1cbiBcbiAvKlxuLSAqIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBkaXJ0eSBidWZmZXJzIGFuZCBkaXJ0eSBwYWdlczpcbisgKiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gZGlydHkgYnVmZmVycyBhbmQgZGlydHkgZm9saW9zOlxuICAqXG4tICogV2hlbmV2ZXIgYSBwYWdlIGhhcyBhbnkgZGlydHkgYnVmZmVycywgdGhlIHBhZ2UncyBkaXJ0eSBiaXQgaXMgc2V0LCBhbmRcbi0gKiB0aGUgcGFnZSBpcyB0YWdnZWQgZGlydHkgaW4gdGhlIHBhZ2UgY2FjaGUuXG4rICogV2hlbmV2ZXIgYSBmb2xpbyBoYXMgYW55IGRpcnR5IGJ1ZmZlcnMsIHRoZSBmb2xpbydzIGRpcnR5IGZsYWcgaXMgc2V0LCBhbmRcbisgKiB0aGUgZm9saW8gaXMgdGFnZ2VkIGRpcnR5IGluIHRoZSBwYWdlIGNhY2hlLlxuICAqXG4gICogQXQgYWxsIHRpbWVzLCB0aGUgZGlydGluZXNzIG9mIHRoZSBidWZmZXJzIHJlcHJlc2VudHMgdGhlIGRpcnRpbmVzcyBvZlxuLSAqIHN1YnNlY3Rpb25zIG9mIHRoZSBwYWdlLiAgSWYgdGhlIHBhZ2UgaGFzIGJ1ZmZlcnMsIHRoZSBwYWdlIGRpcnR5IGJpdCBpc1xuKyAqIHN1YnNlY3Rpb25zIG9mIHRoZSBmb2xpby4gIElmIHRoZSBmb2xpbyBoYXMgYnVmZmVycywgdGhlIGZvbGlvIGRpcnR5IGZsYWcgaXNcbiAgKiBtZXJlbHkgYSBoaW50IGFib3V0IHRoZSB0cnVlIGRpcnR5IHN0YXRlLlxuICAqXG4tICogV2hlbiBhIHBhZ2UgaXMgc2V0IGRpcnR5IGluIGl0cyBlbnRpcmV0eSwgYWxsIGl0cyBidWZmZXJzIGFyZSBtYXJrZWQgZGlydHlcbi0gKiAoaWYgdGhlIHBhZ2UgaGFzIGJ1ZmZlcnMpLlxuKyAqIFdoZW4gYSBmb2xpbyBpcyBzZXQgZGlydHkgaW4gaXRzIGVudGlyZXR5LCBhbGwgaXRzIGJ1ZmZlcnMgYXJlIG1hcmtlZCBkaXJ0eVxuKyAqIChpZiB0aGUgZm9saW8gaGFzIGJ1ZmZlcnMpLlxuICAqXG4tICogV2hlbiBhIGJ1ZmZlciBpcyBtYXJrZWQgZGlydHksIGl0cyBwYWdlIGlzIGRpcnRpZWQsIGJ1dCB0aGUgcGFnZSdzIG90aGVyXG4rICogV2hlbiBhIGJ1ZmZlciBpcyBtYXJrZWQgZGlydHksIGl0cyBmb2xpbyBpcyBkaXJ0aWVkLCBidXQgdGhlIGZvbGlvJ3Mgb3RoZXJcbiAgKiBidWZmZXJzIGFyZSBub3QuXG4gICpcbiAgKiBBbHNvLiAgV2hlbiBibG9ja2RldiBidWZmZXJzIGFyZSBleHBsaWNpdGx5IHJlYWQgd2l0aCBicmVhZCgpLCB0aGV5XG4tICogaW5kaXZpZHVhbGx5IGJlY29tZSB1cHRvZGF0ZS4gIEJ1dCB0aGVpciBiYWNraW5nIHBhZ2UgcmVtYWlucyBub3RcbisgKiBpbmRpdmlkdWFsbHkgYmVjb21lIHVwdG9kYXRlLiAgQnV0IHRoZWlyIGJhY2tpbmcgZm9saW8gcmVtYWlucyBub3RcbiAgKiB1cHRvZGF0ZSAtIGV2ZW4gaWYgYWxsIG9mIGl0cyBidWZmZXJzIGFyZSB1cHRvZGF0ZS4gIEEgc3Vic2VxdWVudFxuICAqIGJsb2NrX3JlYWRfZnVsbF9mb2xpbygpIGFnYWluc3QgdGhhdCBmb2xpbyB3aWxsIGRpc2NvdmVyIGFsbCB0aGUgdXB0b2RhdGVcbiAgKiBidWZmZXJzLCB3aWxsIHNldCB0aGUgZm9saW8gdXB0b2RhdGUgYW5kIHdpbGwgcGVyZm9ybSBubyBJL08uXG5AQCAtOTc5LDcgKzk4Nyw3IEBAIF9fZ2V0YmxrX3Nsb3coc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3QgYmxvY2ssXG4gICogQGJoOiB0aGUgYnVmZmVyX2hlYWQgdG8gbWFyayBkaXJ0eVxuICAqXG4gICogbWFya19idWZmZXJfZGlydHkoKSB3aWxsIHNldCB0aGUgZGlydHkgYml0IGFnYWluc3QgdGhlIGJ1ZmZlciwgdGhlbiBzZXRcbi0gKiBpdHMgYmFja2luZyBwYWdlIGRpcnR5LCB0aGVuIHRhZyB0aGUgcGFnZSBhcyBkaXJ0eSBpbiB0aGUgcGFnZSBjYWNoZVxuKyAqIGl0cyBiYWNraW5nIGZvbGlvIGRpcnR5LCB0aGVuIHRhZyB0aGUgZm9saW8gYXMgZGlydHkgaW4gdGhlIHBhZ2UgY2FjaGVcbiAgKiBhbmQgdGhlbiBhdHRhY2ggdGhlIGFkZHJlc3Nfc3BhY2UncyBpbm9kZSB0byBpdHMgc3VwZXJibG9jaydzIGRpcnR5XG4gICogaW5vZGUgbGlzdC5cbiAgKlxuQEAgLTEwNzQsNyArMTA4Miw3IEBAIHN0YXRpYyB2b2lkIGJ1ZmZlcl9zZXRfY3J5cHRvX2N0eChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG4gXG4gXHQvKlxuIFx0ICogVGhlIGV4dDQgam91cm5hbCAoamJkMikgY2FuIHN1Ym1pdCBhIGJ1ZmZlcl9oZWFkIGl0IGRpcmVjdGx5IGNyZWF0ZWRcbi1cdCAqIGZvciBhIG5vbi1wYWdlY2FjaGUgcGFnZS4gIGZzY3J5cHQgZG9lc24ndCBjYXJlIGFib3V0IHRoZXNlLlxuK1x0ICogZm9yIGEgbm9uLXBhZ2VjYWNoZSBmb2xpby4gIGZzY3J5cHQgZG9lc24ndCBjYXJlIGFib3V0IHRoZXNlLlxuIFx0ICovXG4gXHRpZiAoIW1hcHBpbmcpXG4gXHRcdHJldHVybjtcbkBAIC0xMjE2LDcgKzEyMjQsNyBAQCBzdGF0aWMgdm9pZCBiaF9scnVfaW5zdGFsbChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuIFxuIFx0LypcbiBcdCAqIHRoZSByZWZjb3VudCBvZiBidWZmZXJfaGVhZCBpbiBiaF9scnUgcHJldmVudHMgZHJvcHBpbmcgdGhlXG4tXHQgKiBhdHRhY2hlZCBwYWdlKGkuZS4sIHRyeV90b19mcmVlX2J1ZmZlcnMpIHNvIGl0IGNvdWxkIGNhdXNlXG4rXHQgKiBhdHRhY2hlZCBmb2xpbyAoaS5lLiwgdHJ5X3RvX2ZyZWVfYnVmZmVycykgc28gaXQgY291bGQgY2F1c2VcbiBcdCAqIGZhaWxpbmcgcGFnZSBtaWdyYXRpb24uXG4gXHQgKiBTa2lwIHB1dHRpbmcgdXBjb21pbmcgYmggaW50byBiaF9scnUgdW50aWwgbWlncmF0aW9uIGlzIGRvbmUuXG4gXHQgKi9cbkBAIC0xMjgwLDcgKzEyODgsNyBAQCBsb29rdXBfYmhfbHJ1KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLCB1bnNpZ25lZCBzaXplKVxuICAqIFBlcmZvcm0gYSBwYWdlY2FjaGUgbG9va3VwIGZvciB0aGUgbWF0Y2hpbmcgYnVmZmVyLiAgSWYgaXQncyB0aGVyZSwgcmVmcmVzaFxuICAqIGl0IGluIHRoZSBMUlUgYW5kIG1hcmsgaXQgYXMgYWNjZXNzZWQuICBJZiBpdCBpcyBub3QgcHJlc2VudCB0aGVuIHJldHVyblxuICAqIE5VTEwuIEF0b21pYyBjb250ZXh0IGNhbGxlcnMgbWF5IGFsc28gcmV0dXJuIE5VTEwgaWYgdGhlIGJ1ZmZlciBpcyBiZWluZ1xuLSAqIG1pZ3JhdGVkOyBzaW1pbGFybHkgdGhlIHBhZ2UgaXMgbm90IG1hcmtlZCBhY2Nlc3NlZCBlaXRoZXIuXG4rICogbWlncmF0ZWQ7IHNpbWlsYXJseSB0aGUgZm9saW8gaXMgbm90IG1hcmtlZCBhY2Nlc3NlZCBlaXRoZXIuXG4gICovXG4gc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqXG4gZmluZF9nZXRfYmxvY2tfY29tbW9uKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLFxuQEAgLTEyODksNyArMTI5Nyw3IEBAIGZpbmRfZ2V0X2Jsb2NrX2NvbW1vbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBibG9jayxcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBsb29rdXBfYmhfbHJ1KGJkZXYsIGJsb2NrLCBzaXplKTtcbiBcbiBcdGlmIChiaCA9PSBOVUxMKSB7XG4tXHRcdC8qIF9fZmluZF9nZXRfYmxvY2tfc2xvdyB3aWxsIG1hcmsgdGhlIHBhZ2UgYWNjZXNzZWQgKi9cbitcdFx0LyogX19maW5kX2dldF9ibG9ja19zbG93IHdpbGwgbWFyayB0aGUgZm9saW8gYWNjZXNzZWQgKi9cbiBcdFx0YmggPSBfX2ZpbmRfZ2V0X2Jsb2NrX3Nsb3coYmRldiwgYmxvY2ssIGF0b21pYyk7XG4gXHRcdGlmIChiaClcbiBcdFx0XHRiaF9scnVfaW5zdGFsbChiaCk7XG5AQCAtMTQ3NSwxNSArMTQ4MywxNCBAQCB2b2lkIGZvbGlvX3NldF9iaChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIH1cbiBFWFBPUlRfU1lNQk9MKGZvbGlvX3NldF9iaCk7XG4gXG4tLypcbi0gKiBDYWxsZWQgd2hlbiB0cnVuY2F0aW5nIGEgYnVmZmVyIG9uIGEgcGFnZSBjb21wbGV0ZWx5LlxuLSAqL1xuLVxuIC8qIEJpdHMgdGhhdCBhcmUgY2xlYXJlZCBkdXJpbmcgYW4gaW52YWxpZGF0ZSAqL1xuICNkZWZpbmUgQlVGRkVSX0ZMQUdTX0RJU0NBUkQgXFxcbiBcdCgxIFx1MDAzY1x1MDAzYyBCSF9NYXBwZWQgfCAxIFx1MDAzY1x1MDAzYyBCSF9OZXcgfCAxIFx1MDAzY1x1MDAzYyBCSF9SZXEgfCBcXFxuIFx0IDEgXHUwMDNjXHUwMDNjIEJIX0RlbGF5IHwgMSBcdTAwM2NcdTAwM2MgQkhfVW53cml0dGVuKVxuIFxuKy8qXG4rICogQ2FsbGVkIHdoZW4gdHJ1bmNhdGluZyBhIGJ1ZmZlciBvbiBhIGZvbGlvIGNvbXBsZXRlbHkuXG4rICovXG4gc3RhdGljIHZvaWQgZGlzY2FyZF9idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICogYmgpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBiX3N0YXRlO1xuQEAgLTE2MTEsOSArMTYxOCw3IEBAIEVYUE9SVF9TWU1CT0woY3JlYXRlX2VtcHR5X2J1ZmZlcnMpO1xuICAqIG1vbWVudCB3aGVuIHNvbWV0aGluZyB3aWxsIGV4cGxpY2l0bHkgbWFyayB0aGUgYnVmZmVyIGRpcnR5IChob3BlZnVsbHkgdGhhdFxuICAqIHdpbGwgbm90IGhhcHBlbiB1bnRpbCB3ZSB3aWxsIGZyZWUgdGhhdCBibG9jayA7LSkgV2UgZG9uJ3QgZXZlbiBuZWVkIHRvIG1hcmtcbiAgKiBpdCBub3QtdXB0b2RhdGUgLSBub2JvZHkgY2FuIGV4cGVjdCBhbnl0aGluZyBmcm9tIGEgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlclxuLSAqIGFueXdheS4gV2UgdXNlZCB0byB1c2UgdW5tYXBfYnVmZmVyKCkgZm9yIHN1Y2ggaW52YWxpZGF0aW9uLCBidXQgdGhhdCB3YXNcbi0gKiB3cm9uZy4gV2UgZGVmaW5pdGVseSBkb24ndCB3YW50IHRvIG1hcmsgdGhlIGFsaWFzIHVubWFwcGVkLCBmb3IgZXhhbXBsZSAtIGl0XG4tICogd291bGQgY29uZnVzZSBhbnlvbmUgd2hvIG1pZ2h0IHBpY2sgaXQgd2l0aCBicmVhZCgpIGFmdGVyd2FyZHMuLi5cbisgKiBhbnl3YXkuXG4gICpcbiAgKiBBbHNvLi4gIE5vdGUgdGhhdCBiZm9yZ2V0KCkgZG9lc24ndCBsb2NrIHRoZSBidWZmZXIuICBTbyB0aGVyZSBjYW4gYmVcbiAgKiB3cml0ZW91dCBJL08gZ29pbmcgb24gYWdhaW5zdCByZWNlbnRseS1mcmVlZCBidWZmZXJzLiAgV2UgZG9uJ3Qgd2FpdCBvbiB0aGF0XG5AQCAtMTY0OSw3ICsxNjU0LDcgQEAgdm9pZCBjbGVhbl9iZGV2X2FsaWFzZXMoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3QgYmxvY2ssIHNlY3Rvcl90IGxlbilcbiBcdFx0XHQvKiBSZWNoZWNrIHdoZW4gdGhlIGZvbGlvIGlzIGxvY2tlZCB3aGljaCBwaW5zIGJocyAqL1xuIFx0XHRcdGhlYWQgPSBmb2xpb19idWZmZXJzKGZvbGlvKTtcbiBcdFx0XHRpZiAoIWhlYWQpXG4tXHRcdFx0XHRnb3RvIHVubG9ja19wYWdlO1xuK1x0XHRcdFx0Z290byB1bmxvY2tfZm9saW87XG4gXHRcdFx0YmggPSBoZWFkO1xuIFx0XHRcdGRvIHtcbiBcdFx0XHRcdGlmICghYnVmZmVyX21hcHBlZChiaCkgfHwgKGJoLVx1MDAzZWJfYmxvY2tuciBcdTAwM2MgYmxvY2spKVxuQEAgLTE2NjIsNyArMTY2Nyw3IEBAIHZvaWQgY2xlYW5fYmRldl9hbGlhc2VzKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLCBzZWN0b3JfdCBsZW4pXG4gbmV4dDpcbiBcdFx0XHRcdGJoID0gYmgtXHUwMDNlYl90aGlzX3BhZ2U7XG4gXHRcdFx0fSB3aGlsZSAoYmggIT0gaGVhZCk7XG4tdW5sb2NrX3BhZ2U6XG4rdW5sb2NrX2ZvbGlvOlxuIFx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXHRcdH1cbiBcdFx0Zm9saW9fYmF0Y2hfcmVsZWFzZShcdTAwMjZmYmF0Y2gpO1xuQEAgLTE3MTAsNyArMTcxNSw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmZvbGlvX2NyZWF0ZV9idWZmZXJzKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gICpcbiAgKiBJZiBibG9ja193cml0ZV9mdWxsX2ZvbGlvKCkgaXMgY2FsbGVkIGZvciByZWd1bGFyIHdyaXRlYmFja1xuICAqICh3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfTk9ORSkgdGhlbiBpdCB3aWxsIHJlZGlydHkgYSBmb2xpbyB3aGljaFxuLSAqIGhhcyBhIGxvY2tlZCBidWZmZXIuICAgVGhpcyBvbmx5IGNhbiBoYXBwZW4gaWYgc29tZW9uZSBoYXMgd3JpdHRlblxuKyAqIGhhcyBhIGxvY2tlZCBidWZmZXIuICAgVGhpcyBjYW4gb25seSBoYXBwZW4gaWYgc29tZW9uZSBoYXMgd3JpdHRlblxuICAqIHRoZSBidWZmZXIgZGlyZWN0bHksIHdpdGggYmhfc3VibWl0KCkuICBBdCB0aGUgYWRkcmVzc19zcGFjZSBsZXZlbFxuICAqIHRoZSBmb2xpbyB3cml0ZWJhY2sgZmxhZyBwcmV2ZW50cyB0aGlzIGNvbnRlbnRpb24gZnJvbSBvY2N1cnJpbmcuXG4gICpcbkBAIC0yMjEzLDkgKzIyMTgsOSBAQCBpbnQgZ2VuZXJpY193cml0ZV9lbmQoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdGlmIChvbGRfc2l6ZSBcdTAwM2MgcG9zKVxuIFx0XHRwYWdlY2FjaGVfaXNpemVfZXh0ZW5kZWQoaW5vZGUsIG9sZF9zaXplLCBwb3MpO1xuIFx0Lypcbi1cdCAqIERvbid0IG1hcmsgdGhlIGlub2RlIGRpcnR5IHVuZGVyIHBhZ2UgbG9jay4gRmlyc3QsIGl0IHVubmVjZXNzYXJpbHlcbi1cdCAqIG1ha2VzIHRoZSBob2xkaW5nIHRpbWUgb2YgcGFnZSBsb2NrIGxvbmdlci4gU2Vjb25kLCBpdCBmb3JjZXMgbG9ja1xuLVx0ICogb3JkZXJpbmcgb2YgcGFnZSBsb2NrIGFuZCB0cmFuc2FjdGlvbiBzdGFydCBmb3Igam91cm5hbGluZ1xuK1x0ICogRG9uJ3QgbWFyayB0aGUgaW5vZGUgZGlydHkgdW5kZXIgZm9saW8gbG9jay4gRmlyc3QsIGl0IHVubmVjZXNzYXJpbHlcbitcdCAqIG1ha2VzIHRoZSBob2xkaW5nIHRpbWUgb2YgZm9saW8gbG9jayBsb25nZXIuIFNlY29uZCwgaXQgZm9yY2VzIGxvY2tcbitcdCAqIG9yZGVyaW5nIG9mIGZvbGlvIGxvY2sgYW5kIHRyYW5zYWN0aW9uIHN0YXJ0IGZvciBqb3VybmFsaW5nXG4gXHQgKiBmaWxlc3lzdGVtcy5cbiBcdCAqL1xuIFx0aWYgKGlfc2l6ZV9jaGFuZ2VkKVxuQEAgLTIzNDEsNyArMjM0Niw3IEBAIGludCBibG9ja19yZWFkX2Z1bGxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2V0X2Jsb2NrX3QgKmdldF9ibG9jaylcbiBcdFx0ICogQkhfQXN5bmNfUmVhZCB0ZWxscyBlbmRfYnVmZmVyX2FzeW5jX3JlYWQoKSB0aGF0IHRoaXNcbiBcdFx0ICogYnVmZmVyIGlzIG5vdCB1bmRlciBhc3luYyBJL08uXG4gXHRcdCAqXG4tXHRcdCAqIFRoZSBmb2xpbyBjb21lcyB1bmxvY2tlZCB3aGVuIGl0IGhhcyBubyBsb2NrZWRcbitcdFx0ICogVGhlIGZvbGlvIGlzIHVubG9ja2VkIHdoZW4gaXQgaGFzIG5vIGxvY2tlZFxuIFx0XHQgKiBidWZmZXJfYXN5bmMgYnVmZmVycyBsZWZ0LlxuIFx0XHQgKlxuIFx0XHQgKiBUaGUgZm9saW8gbG9jayBwcmV2ZW50cyBhbnlvbmUgc3RhcnRpbmcgbmV3IGFzeW5jXG5AQCAtMjQ1MSw3ICsyNDU2LDcgQEAgc3RhdGljIGludCBjb250X2V4cGFuZF96ZXJvKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbiBcdFx0fVxuIFx0fVxuIFxuLVx0LyogcGFnZSBjb3ZlcnMgdGhlIGJvdW5kYXJ5LCBmaW5kIHRoZSBib3VuZGFyeSBvZmZzZXQgKi9cbitcdC8qIGZvbGlvIGNyb3NzZXMgdGhlIGJvdW5kYXJ5LCBmaW5kIHRoZSBib3VuZGFyeSBvZmZzZXQgKi9cbiBcdGlmIChpbmRleCA9PSBjdXJpZHgpIHtcbiBcdFx0emVyb2Zyb20gPSBjdXJwb3MgXHUwMDI2IH5QQUdFX01BU0s7XG4gXHRcdC8qIGlmIHdlIHdpbGwgZXhwYW5kIHRoZSB0aGluZyBsYXN0IGJsb2NrIHdpbGwgYmUgZmlsbGVkICovXG5AQCAtMjUwOSwxOCArMjUxNCwxOCBAQCBFWFBPUlRfU1lNQk9MKGNvbnRfd3JpdGVfYmVnaW4pO1xuIFxuIC8qXG4gICogYmxvY2tfcGFnZV9ta3dyaXRlKCkgaXMgbm90IGFsbG93ZWQgdG8gY2hhbmdlIHRoZSBmaWxlIHNpemUgYXMgaXQgZ2V0c1xuLSAqIGNhbGxlZCBmcm9tIGEgcGFnZSBmYXVsdCBoYW5kbGVyIHdoZW4gYSBwYWdlIGlzIGZpcnN0IGRpcnRpZWQuIEhlbmNlIHdlIG11c3Rcbi0gKiBiZSBjYXJlZnVsIHRvIGNoZWNrIGZvciBFT0YgY29uZGl0aW9ucyBoZXJlLiBXZSBzZXQgdGhlIHBhZ2UgdXAgY29ycmVjdGx5XG4tICogZm9yIGEgd3JpdHRlbiBwYWdlIHdoaWNoIG1lYW5zIHdlIGdldCBFTk9TUEMgY2hlY2tpbmcgd2hlbiB3cml0aW5nIGludG9cbisgKiBjYWxsZWQgZnJvbSBhIHBhZ2UgZmF1bHQgaGFuZGxlciB3aGVuIGEgZm9saW8gaXMgZmlyc3QgZGlydGllZC4gSGVuY2Ugd2UgbXVzdFxuKyAqIGJlIGNhcmVmdWwgdG8gY2hlY2sgZm9yIEVPRiBjb25kaXRpb25zIGhlcmUuIFdlIHNldCB0aGUgZm9saW8gdXAgY29ycmVjdGx5XG4rICogZm9yIGEgd3JpdHRlbiBmb2xpbyB3aGljaCBtZWFucyB3ZSBnZXQgRU5PU1BDIGNoZWNraW5nIHdoZW4gd3JpdGluZyBpbnRvXG4gICogaG9sZXMgYW5kIGNvcnJlY3QgZGVsYWxsb2MgYW5kIHVud3JpdHRlbiBleHRlbnQgbWFwcGluZyBvbiBmaWxlc3lzdGVtcyB0aGF0XG4gICogc3VwcG9ydCB0aGVzZSBmZWF0dXJlcy5cbiAgKlxuICAqIFdlIGFyZSBub3QgYWxsb3dlZCB0byB0YWtlIHRoZSBpX3J3c2VtIGhlcmUgc28gd2UgaGF2ZSB0byBwbGF5IGdhbWVzIHRvXG4tICogcHJvdGVjdCBhZ2FpbnN0IHRydW5jYXRlIHJhY2VzIGFzIHRoZSBwYWdlIGNvdWxkIG5vdyBiZSBiZXlvbmQgRU9GLiAgQmVjYXVzZVxuLSAqIHRydW5jYXRlIHdyaXRlcyB0aGUgaW5vZGUgc2l6ZSBiZWZvcmUgcmVtb3ZpbmcgcGFnZXMsIG9uY2Ugd2UgaGF2ZSB0aGVcbi0gKiBwYWdlIGxvY2sgd2UgY2FuIGRldGVybWluZSBzYWZlbHkgaWYgdGhlIHBhZ2UgaXMgYmV5b25kIEVPRi4gSWYgaXQgaXMgbm90XG4tICogYmV5b25kIEVPRiwgdGhlbiB0aGUgcGFnZSBpcyBndWFyYW50ZWVkIHNhZmUgYWdhaW5zdCB0cnVuY2F0aW9uIHVudGlsIHdlXG4tICogdW5sb2NrIHRoZSBwYWdlLlxuKyAqIHByb3RlY3QgYWdhaW5zdCB0cnVuY2F0ZSByYWNlcyBhcyB0aGUgZm9saW8gY291bGQgbm93IGJlIGJleW9uZCBFT0YuICBCZWNhdXNlXG4rICogdHJ1bmNhdGUgd3JpdGVzIHRoZSBpbm9kZSBzaXplIGJlZm9yZSByZW1vdmluZyBmb2xpb3MsIG9uY2Ugd2UgaGF2ZSB0aGVcbisgKiBmb2xpbyBsb2NrIHdlIGNhbiBkZXRlcm1pbmUgc2FmZWx5IGlmIHRoZSBmb2xpbyBpcyBiZXlvbmQgRU9GLiBJZiBpdCBpcyBub3RcbisgKiBiZXlvbmQgRU9GLCB0aGVuIHRoZSBmb2xpbyBpcyBndWFyYW50ZWVkIHNhZmUgYWdhaW5zdCB0cnVuY2F0aW9uIHVudGlsIHdlXG4rICogdW5sb2NrIHRoZSBmb2xpby5cbiAgKlxuICAqIERpcmVjdCBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24gc2hvdWxkIHByb3RlY3QgYWdhaW5zdCBmaWxlc3lzdGVtIGZyZWV6aW5nXG4gICogdXNpbmcgc2Jfc3RhcnRfcGFnZWZhdWx0KCkgLSBzYl9lbmRfcGFnZWZhdWx0KCkgZnVuY3Rpb25zLlxuQEAgLTI1MzgsNyArMjU0Myw3IEBAIGludCBibG9ja19wYWdlX21rd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuIFx0c2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbiBcdGlmICgoZm9saW8tXHUwMDNlbWFwcGluZyAhPSBpbm9kZS1cdTAwM2VpX21hcHBpbmcpIHx8XG4gXHQgICAgKGZvbGlvX3Bvcyhmb2xpbykgXHUwMDNlPSBzaXplKSkge1xuLVx0XHQvKiBXZSBvdmVybG9hZCBFRkFVTFQgdG8gbWVhbiBwYWdlIGdvdCB0cnVuY2F0ZWQgKi9cbitcdFx0LyogV2Ugb3ZlcmxvYWQgRUZBVUxUIHRvIG1lYW4gZm9saW8gZ290IHRydW5jYXRlZCAqL1xuIFx0XHRyZXQgPSAtRUZBVUxUO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oIGIvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oXG5pbmRleCBmZDJjNzExNWMwNTQyLi4xZDU1Zjc3NzBjYWQxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmhcbkBAIC0zMzgsMjAgKzMzOCw1OCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYmZvcmdldChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuIFx0XHRfX2Jmb3JnZXQoYmgpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBidWZmZXJfaGVhZCAqXG4tc2JfYnJlYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc2VjdG9yX3QgYmxvY2spXG4rLyoqXG4rICogc2JfYnJlYWQgLSBSZWFkIGEgYmxvY2suXG4rICogQHNiOiBUaGUgc3VwZXJibG9jayB0byByZWFkIGZyb20uXG4rICogQGJsb2NrOiBCbG9jayBudW1iZXIgaW4gdW5pdHMgb2YgYmxvY2sgc2l6ZS5cbisgKlxuKyAqIFJlYWQgYSBzcGVjaWZpZWQgYmxvY2ssIGFuZCByZXR1cm4gdGhlIGJ1ZmZlciBoZWFkIHRoYXQgcmVmZXJzXG4rICogdG8gaXQuICBUaGUgbWVtb3J5IGlzIGFsbG9jYXRlZCBmcm9tIHRoZSBtb3ZhYmxlIGFyZWEgc28gdGhhdCBpdCBjYW5cbisgKiBiZSBtaWdyYXRlZC4gIFRoZSByZXR1cm5lZCBidWZmZXIgaGVhZCBoYXMgaXRzIHJlZmNvdW50IGluY3JlYXNlZC5cbisgKiBUaGUgY2FsbGVyIHNob3VsZCBjYWxsIGJyZWxzZSgpIHdoZW4gaXQgaGFzIGZpbmlzaGVkIHdpdGggdGhlIGJ1ZmZlci5cbisgKlxuKyAqIENvbnRleHQ6IE1heSBzbGVlcCB3YWl0aW5nIGZvciBJL08uXG4rICogUmV0dXJuOiBOVUxMIGlmIHRoZSBibG9jayB3YXMgdW5yZWFkYWJsZS5cbisgKi9cbitzdGF0aWMgaW5saW5lXG4rc3RydWN0IGJ1ZmZlcl9oZWFkICpzYl9icmVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzZWN0b3JfdCBibG9jaylcbiB7XG4gXHRyZXR1cm4gX19icmVhZF9nZnAoc2ItXHUwMDNlc19iZGV2LCBibG9jaywgc2ItXHUwMDNlc19ibG9ja3NpemUsIF9fR0ZQX01PVkFCTEUpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBidWZmZXJfaGVhZCAqXG4tc2JfYnJlYWRfdW5tb3ZhYmxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHNlY3Rvcl90IGJsb2NrKVxuKy8qKlxuKyAqIHNiX2JyZWFkX3VubW92YWJsZSAtIFJlYWQgYSBibG9jay5cbisgKiBAc2I6IFRoZSBzdXBlcmJsb2NrIHRvIHJlYWQgZnJvbS5cbisgKiBAYmxvY2s6IEJsb2NrIG51bWJlciBpbiB1bml0cyBvZiBibG9jayBzaXplLlxuKyAqXG4rICogUmVhZCBhIHNwZWNpZmllZCBibG9jaywgYW5kIHJldHVybiB0aGUgYnVmZmVyIGhlYWQgdGhhdCByZWZlcnMgdG8gaXQuXG4rICogVGhlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgZnJvbSB0aGUgdW5tb3ZhYmxlIGFyZWEgc28gdGhhdCBwb2ludGVycyBpbnRvXG4rICogaXQgcmVtYWluIHZhbGlkIGFmdGVyIGNvbXBhY3Rpb24gcnVucy4gIFRoZSByZXR1cm5lZCBidWZmZXIgaGVhZCBoYXNcbisgKiBpdHMgcmVmY291bnQgaW5jcmVhc2VkLiAgVGhlIGNhbGxlciBzaG91bGQgY2FsbCBicmVsc2UoKSB3aGVuIGl0IGhhc1xuKyAqIGZpbmlzaGVkIHdpdGggdGhlIGJ1ZmZlci5cbisgKlxuKyAqIENvbnRleHQ6IE1heSBzbGVlcCB3YWl0aW5nIGZvciBJL08uXG4rICogUmV0dXJuOiBOVUxMIGlmIHRoZSBibG9jayB3YXMgdW5yZWFkYWJsZS5cbisgKi9cbitzdGF0aWMgaW5saW5lXG4rc3RydWN0IGJ1ZmZlcl9oZWFkICpzYl9icmVhZF91bm1vdmFibGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc2VjdG9yX3QgYmxvY2spXG4ge1xuIFx0cmV0dXJuIF9fYnJlYWRfZ2ZwKHNiLVx1MDAzZXNfYmRldiwgYmxvY2ssIHNiLVx1MDAzZXNfYmxvY2tzaXplLCAwKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkXG4tc2JfYnJlYWRhaGVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzZWN0b3JfdCBibG9jaylcbisvKipcbisgKiBzYl9icmVhZGFoZWFkIC0gU3RhcnQgcmVhZGFoZWFkLlxuKyAqIEBzYjogU3VwZXJibG9jayBpZGVudGlmeWluZyB0aGUgYmxvY2sgZGV2aWNlLlxuKyAqIEBibG9jazogVGhlIGJsb2NrIHRvIHJlYWQuXG4rICpcbisgKiBSZWFkIHRoaXMgYmxvY2suICBUaGUgSS9PIHdpbGwgYmUgZmxhZ2dlZCBhcyBiZWluZyByZWFkYWhlYWQgcmF0aGVyXG4rICogdGhhbiBpbW1lZGlhdGUgcmVhZCwgYnV0ICh1bmxpa2UgdGhlIHBhZ2UgY2FjaGUpLCBzdXJyb3VuZGluZyBibG9ja3NcbisgKiB3aWxsIG5vdCBiZSByZWFkLlxuKyAqXG4rICogQ29udGV4dDogTWF5IHNsZWVwIGluIG9yZGVyIHRvIGFsbG9jYXRlIG1lbW9yeS5cbisgKi9cbitzdGF0aWMgaW5saW5lXG4rdm9pZCBzYl9icmVhZGFoZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHNlY3Rvcl90IGJsb2NrKVxuIHtcbiBcdF9fYnJlYWRhaGVhZChzYi1cdTAwM2VzX2JkZXYsIGJsb2NrLCBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjE6MTg6MjkuNjU5MTg0NzI0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQ3ODUzMDgwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogV29ydGhGdXp6aW5nIEV2YWx1YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgZm9jdXMgaXMgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIHBvdGVudGlhbCBpbXBhY3QuIEZpcnN0LCBJIG5vdGUgdGhlIGNoYW5nZWQgZmlsZXM6IGBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0YCwgYGZzL2J1ZmZlci5jYCwgYW5kIGBpbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmhgLiBUaGF0IGdpdmVzIG1lIGEgZ2VuZXJhbCBhcmVhIHRvIGxvb2sgaW50by5cblxuTm93IGZvciB0aGUgZGV0YWlsZWQgZGlmZi4gSSBzZWUgdGhhdCB0aGUgZG9jdW1lbnRhdGlvbiBmaWxlIGhhcyBhIHNpbXBsZSBkb2MgdXBkYXRlLCByZW5hbWluZyBgbWFya19idWZmZXJfZGlydHlfaW5vZGUoKWAgdG8gYG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eSgpYC4gIEluIGBmcy9idWZmZXIuY2AsIGl0J3MgcHJpbWFyaWx5IGNvbW1lbnQgdXBkYXRlcywgcmVwbGFjaW5nIFwicGFnZVwiIHdpdGggXCJmb2xpbyxcIiBhbmQgdGhlIHNhbWUgZnVuY3Rpb24gbmFtZSBjaGFuZ2UsIGluY2x1ZGluZyByZW5hbWluZyBhIGxhYmVsIGZyb20gYHVubG9ja19wYWdlYCB0byBgdW5sb2NrX2ZvbGlvYCBpbiBgY2xlYW5fYmRldl9hbGlhc2VzYC4gVGhlcmUgYWxzbyBsb29rcyBsaWtlIHNvbWUgbmV3IGtlcm5lbGRvYyBjb21tZW50cyBmb3IgYG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eWAgYXJlIHByZXNlbnQuICBPdmVyIGluIGBpbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmhgLCB0aGVyZSBhcmUga2VybmVsZG9jIGFkZGl0aW9ucyBmb3IgYHNiX2JyZWFkYCwgYHNiX2JyZWFkX3VubW92YWJsZWAsIGFuZCBgc2JfYnJlYWRhaGVhZGAsIGFsb25nIHdpdGggc29tZSB2ZXJ5IG1pbm9yIGZvcm1hdHRpbmcgYWRqdXN0bWVudHMgdG8gZnVuY3Rpb24gc2lnbmF0dXJlcyAoanVzdCBsaW5lIHdyYXBwaW5nLCBubyBhY3R1YWwgY29kZSBjaGFuZ2VzKS5cblxuQ3J1Y2lhbGx5LCBJIG5lZWQgdG8gY29uZmlybSB0aGVyZSdzIG5vIGZ1bmN0aW9uYWwgY2hhbmdlLiAgSSdkIGxvdmUgdG8gZ3JhYiB0aGUgc3BlY2lmaWMgY29tbWl0IGRpZmYgKGM4ZTcyZTZmMmZiNmIxNGE4YWY4NGU0YjNlOTBlYTgyN2QzMThmMTApIGlmIHBvc3NpYmxlLCBidXQgcmVhZGluZyB0aGUgZGlmZiBkaXJlY3RseSBjb25maXJtcyBteSBzdXNwaWNpb246ICphbGwqIHRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIGNvbW1lbnQgbW9kaWZpY2F0aW9ucywga2VybmVsZG9jLCB0aGUgbGFiZWwgcmVuYW1lICh3aGljaCBpcyBwdXJlbHkgY29zbWV0aWMpLCBhbmQgZm9ybWF0dGluZyB0d2Vha3MuIEFic29sdXRlbHkgbm8gbG9naWMgY2hhbmdlcy5cblxuTm93LCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgaW5zdHJ1Y3Rpb25zLCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgZnV6emluZy4gVGhlIGNyaXRlcmlhIGNsZWFybHkgc3RhdGUgdGhhdCBpZiB0aGUgcGF0Y2ggY29udGFpbnMgb25seSBkb2N1bWVudGF0aW9uLCBjb2RlIGNvbW1lbnRzLCBvciBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBsaWtlIGxvZ2dpbmcsIGl0J3Mgbm90IHdvcnRoIGZ1enppbmcuIFRoYXQgY292ZXJzIGFsbCB0aGUgY2hhbmdlcyBJJ3ZlIG9ic2VydmVkOiBkb2N1bWVudGF0aW9uLCBjb21tZW50cywgYW5kIHRoZSBsYWJlbC9mb3JtYXR0aW5nIGNoYW5nZXMuXG5cblRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyBjbGVhcjogYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyBuZXcgY29kZSBwYXRocyBvciBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIGV4ZWN1dGlvbiBsb2dpYywgdGhlcmVmb3JlIGZ1enppbmcgaXQgd291bGQgYmUgYSB3YXN0ZSBvZiByZXNvdXJjZXMuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIHNldHRpbmcgdGhlIHByb3BlciB2YWx1ZXM6XG4tICAgYFdvcnRoRnV6emluZ2A6IGBmYWxzZWBcbi0gICBgRm9jdXNTeW1ib2xzYDogYFtdYCAoZW1wdHkgbGlzdCwgYXMgdGhlcmUgYXJlIG5vIHN5bWJvbHMgdG8gZm9jdXMgb24pXG4tICAgYEVuYWJsZUNvbmZpZ3NgOiBgW11gIChlbXB0eSBsaXN0LCBhcyB0aGVyZSBhcmUgbm8gY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlKVxuLSAgIGBSZWFzb25pbmdgOiBcIlRoZSBwYXRjaCBjb250YWlucyBvbmx5IGRvY3VtZW50YXRpb24sIGNvZGUgY29tbWVudHMsIGtlcm5lbGRvYywgbGFiZWwgcmVuYW1pbmcgYW5kIGZvcm1hdHRpbmcgY2hhbmdlcy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcy5cIlxuXG5UaW1lIHRvIHZlcmlmeSB3aXRoIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYW5kIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NDMsIk91dHB1dFRva2VucyI6NzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2ODksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMToxODozNS4xMzc3MTgyNDRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgY29udGFpbnMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLCBrZXJuZWxkb2MgYWRkaXRpb25zLCBjb21tZW50IGNvbnZlcnNpb25zIChmcm9tIHBhZ2UgdG8gZm9saW8gdGVybWlub2xvZ3kpLCBhbmQgYSBsYWJlbCByZW5hbWUgKHVubG9ja19wYWdlIHRvIHVubG9ja19mb2xpbykgd2l0aCBubyBmdW5jdGlvbmFsIGNvZGUgY2hhbmdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgY29udGFpbnMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLCBrZXJuZWxkb2MgYWRkaXRpb25zLCBjb21tZW50IGNvbnZlcnNpb25zIChmcm9tIHBhZ2UgdG8gZm9saW8gdGVybWlub2xvZ3kpLCBhbmQgYSBsYWJlbCByZW5hbWUgKHVubG9ja19wYWdlIHRvIHVubG9ja19mb2xpbykgd2l0aCBubyBmdW5jdGlvbmFsIGNvZGUgY2hhbmdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIxOjE4OjM1LjEzNzc0MjMyNFoiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow752wx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-28 21:01:30 +0000 UTC FinishedAt: 2026-08-28 21:18:36 +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+CgkJCTx0ZD4yMDI2LzA4LzI4IDIxOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBjb250YWlucyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIGtlcm5lbGRvYyBhZGRpdGlvbnMsIGNvbW1lbnQgY29udmVyc2lvbnMgKGZyb20gcGFnZSB0byBmb2xpbyB0ZXJtaW5vbG9neSksIGFuZCBhIGxhYmVsIHJlbmFtZSAodW5sb2NrX3BhZ2UgdG8gdW5sb2NrX2ZvbGlvKSB3aXRoIG5vIGZ1bmN0aW9uYWwgY29kZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMToxODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM4ZTcyZTZmMmZiNmIxNGE4YWY4NGU0YjNlOTBlYTgyN2QzMThmMTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyOCAyMToxODoyOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdFxuaW5kZXggNjA4ODBlYjBjNDlkMS4uZGU5NmI2NzQ1NjAwYiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3RcbkBAIC0zNDgsNyAmIzQzOzM0OCw3IEBAIHNpbXBseSBvZiByZXR1cm4gMS4gIE5vdGUgdGhhdCBhbGwgYWN0dWFsIGV2aWN0aW9uIHdvcmsgaXMgZG9uZSBieSBjYWxsZXIgYWZ0ZXJcbiBBcyBiZWZvcmUsIGNsZWFyX2lub2RlKCkgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIG9uIGVhY2ggY2FsbCBvZlxuIC1cdTAwM2VldmljdF9pbm9kZSgpIChhcyBpdCB1c2VkIHRvIGJlIGZvciBlYWNoIGNhbGwgb2YgLVx1MDAzZWRlbGV0ZV9pbm9kZSgpKS4gIFVubGlrZVxuIGJlZm9yZSwgaWYgeW91IGFyZSB1c2luZyBpbm9kZS1hc3NvY2lhdGVkIG1ldGFkYXRhIGJ1ZmZlcnMgKGkuZS5cbi1tYXJrX2J1ZmZlcl9kaXJ0eV9pbm9kZSgpKSwgaXQmIzM5O3MgeW91ciByZXNwb25zaWJpbGl0eSB0byBjYWxsXG4mIzQzO21tYl9tYXJrX2J1ZmZlcl9kaXJ0eSgpKSwgaXQmIzM5O3MgeW91ciByZXNwb25zaWJpbGl0eSB0byBjYWxsXG4gaW52YWxpZGF0ZV9pbm9kZV9idWZmZXJzKCkgYmVmb3JlIGNsZWFyX2lub2RlKCkuXG4gXG4gTk9URTogY2hlY2tpbmcgaV9ubGluayBpbiB0aGUgYmVnaW5uaW5nIG9mIC1cdTAwM2V3cml0ZV9pbm9kZSgpIGFuZCBiYWlsaW5nIG91dFxuZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmNcbmluZGV4IGVkOTY2ZmE3M2IxYmEuLmM5MzQyYWViOGNkZjYgMTAwNjQ0XG4tLS0gYS9mcy9idWZmZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnVmZmVyLmNcbkBAIC0yNjUsNyAmIzQzOzI2NSw3IEBAIF9fZmluZF9nZXRfYmxvY2tfc2xvdyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBibG9jaywgYm9vbCBhdG9taWMpXG4gXHRcdGJoID0gYmgtXHUwMDNlYl90aGlzX3BhZ2U7XG4gXHR9IHdoaWxlIChiaCAhPSBoZWFkKTtcbiBcbi1cdC8qIHdlIG1pZ2h0IGJlIGhlcmUgYmVjYXVzZSBzb21lIG9mIHRoZSBidWZmZXJzIG9uIHRoaXMgcGFnZSBhcmVcbiYjNDM7XHQvKiB3ZSBtaWdodCBiZSBoZXJlIGJlY2F1c2Ugc29tZSBvZiB0aGUgYnVmZmVycyBvbiB0aGlzIGZvbGlvIGFyZVxuIFx0ICogbm90IG1hcHBlZC4gIFRoaXMgaXMgZHVlIHRvIHZhcmlvdXMgcmFjZXMgYmV0d2VlblxuIFx0ICogZmlsZSBpbyBvbiB0aGUgYmxvY2sgZGV2aWNlIGFuZCBnZXRibGsuICBJdCBnZXRzIGRlYWx0IHdpdGhcbiBcdCAqIGVsc2V3aGVyZSwgZG9uJiMzOTt0IGJ1ZmZlcl9lcnJvciBpZiB3ZSBoYWQgc29tZSB1bm1hcHBlZCBidWZmZXJzXG5AQCAtMzExLDcgJiM0MzszMTEsNyBAQCBzdGF0aWMgdm9pZCBlbmRfYnVmZmVyX2FzeW5jX3JlYWQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHVwdG9kYXRlKVxuIFx0LypcbiBcdCAqIEJlIF92ZXJ5XyBjYXJlZnVsIGZyb20gaGVyZSBvbi4gQmFkIHRoaW5ncyBjYW4gaGFwcGVuIGlmXG4gXHQgKiB0d28gYnVmZmVyIGhlYWRzIGVuZCBJTyBhdCBhbG1vc3QgdGhlIHNhbWUgdGltZSBhbmQgYm90aFxuLVx0ICogZGVjaWRlIHRoYXQgdGhlIHBhZ2UgaXMgbm93IGNvbXBsZXRlbHkgZG9uZS5cbiYjNDM7XHQgKiBkZWNpZGUgdGhhdCB0aGUgZm9saW8gaXMgbm93IGNvbXBsZXRlbHkgZG9uZS5cbiBcdCAqL1xuIFx0Zmlyc3QgPSBmb2xpb19idWZmZXJzKGZvbGlvKTtcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmZpcnN0LVx1MDAzZWJfdXB0b2RhdGVfbG9jaywgZmxhZ3MpO1xuQEAgLTUyMCw4ICYjNDM7NTIwLDggQEAgRVhQT1JUX1NZTUJPTF9HUEwobW1iX2hhc19idWZmZXJzKTtcbiAgKlxuICAqIERvIHRoaXMgaW4gdHdvIG1haW4gc3RhZ2VzOiBmaXJzdCB3ZSBjb3B5IGRpcnR5IGJ1ZmZlcnMgdG8gYVxuICAqIHRlbXBvcmFyeSBpbm9kZSBsaXN0LCBxdWV1ZWluZyB0aGUgd3JpdGVzIGFzIHdlIGdvLiBUaGVuIHdlIGNsZWFuXG4tICogdXAsIHdhaXRpbmcgZm9yIHRob3NlIHdyaXRlcyB0byBjb21wbGV0ZS4gbWFya19idWZmZXJfZGlydHlfaW5vZGUoKVxuLSAqIGRvZXNuJiMzOTt0IHRvdWNoIGJfYXNzb2NfYnVmZmVycyBsaXN0IGlmIGJfbW1iIGlzIG5vdCBOVUxMIHNvIHdlIGFyZSBzdXJlIHRoZVxuJiM0MzsgKiB1cCwgd2FpdGluZyBmb3IgdGhvc2Ugd3JpdGVzIHRvIGNvbXBsZXRlLiBtbWJfbWFya19idWZmZXJfZGlydHkoKVxuJiM0MzsgKiBkb2VzbiYjMzk7dCB0b3VjaCBiX2Fzc29jX2J1ZmZlcnMgbGlzdCBpZiBiX21tYiBpcyBzZXQgc28gd2UgYXJlIHN1cmUgdGhlXG4gICogYnVmZmVyIHN0YXlzIG9uIG91ciBsaXN0IHVudGlsIElPIGNvbXBsZXRlcyAoYXQgd2hpY2ggcG9pbnQgaXQgY2FuIGJlXG4gICogcmVhcGVkKS5cbiAgKi9cbkBAIC01NDIsNyAmIzQzOzU0Miw3IEBAIGludCBtbWJfc3luYyhzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYilcbiBcdFx0YmggPSBCSF9FTlRSWShtbWItXHUwMDNlbGlzdC5uZXh0KTtcbiBcdFx0V0FSTl9PTl9PTkNFKGJoLVx1MDAzZWJfbW1iICE9IG1tYik7XG4gXHRcdF9fcmVtb3ZlX2Fzc29jX3F1ZXVlKG1tYiwgYmgpO1xuLVx0XHQvKiBBdm9pZCByYWNlIHdpdGggbWFya19idWZmZXJfZGlydHlfaW5vZGUoKSB3aGljaCBkb2VzXG4mIzQzO1x0XHQvKiBBdm9pZCByYWNlIHdpdGggbW1iX21hcmtfYnVmZmVyX2RpcnR5KCkgd2hpY2ggZG9lc1xuIFx0XHQgKiBhIGxvY2tsZXNzIGNoZWNrIGFuZCB3ZSByZWx5IG9uIHNlZWluZyB0aGUgZGlydHkgYml0ICovXG4gXHRcdHNtcF9tYigpO1xuIFx0XHRpZiAoYnVmZmVyX2RpcnR5KGJoKSB8fCBidWZmZXJfbG9ja2VkKGJoKSkge1xuQEAgLTU4MCw3ICYjNDM7NTgwLDcgQEAgaW50IG1tYl9zeW5jKHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iKVxuIFx0XHRiaCA9IEJIX0VOVFJZKHRtcC5wcmV2KTtcbiBcdFx0Z2V0X2JoKGJoKTtcbiBcdFx0X19yZW1vdmVfYXNzb2NfcXVldWUobW1iLCBiaCk7XG4tXHRcdC8qIEF2b2lkIHJhY2Ugd2l0aCBtYXJrX2J1ZmZlcl9kaXJ0eV9pbm9kZSgpIHdoaWNoIGRvZXNcbiYjNDM7XHRcdC8qIEF2b2lkIHJhY2Ugd2l0aCBtbWJfbWFya19idWZmZXJfZGlydHkoKSB3aGljaCBkb2VzXG4gXHRcdCAqIGEgbG9ja2xlc3MgY2hlY2sgYW5kIHdlIHJlbHkgb24gc2VlaW5nIHRoZSBkaXJ0eSBiaXQgKi9cbiBcdFx0c21wX21iKCk7XG4gXHRcdGlmIChidWZmZXJfZGlydHkoYmgpKSB7XG5AQCAtNjE4LDYgJiM0Mzs2MTgsMTQgQEAgdm9pZCB3cml0ZV9ib3VuZGFyeV9ibG9jayhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxuIFx0fVxuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eSAtIE1hcmsgYSBtZXRhZGF0YSBidWZmZXIgZGlydHkuXG4mIzQzOyAqIEBiaDogVGhlIGJ1ZmZlciB0byBtYXJrIGRpcnR5LlxuJiM0MzsgKiBAbW1iOiBUaGUgbGlzdCBvZiBidWZmZXJzIHRvIGFkZCB0aGUgYnVmZmVyIHRvLlxuJiM0MzsgKlxuJiM0MzsgKiBNYXJrIHRoZSBidWZmZXIgZGlydHkgYW5kIGFkZCBpdCB0byB0aGUgbGlzdCBpZiBpdCBpcyBub3QgYWxyZWFkeSBvblxuJiM0MzsgKiBhIGxpc3QuXG4mIzQzOyAqL1xuIHZvaWQgbW1iX21hcmtfYnVmZmVyX2RpcnR5KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG4gXHRcdFx0ICAgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIpXG4ge1xuQEAgLTY4Niw3ICYjNDM7Njk0LDcgQEAgYm9vbCBibG9ja19kaXJ0eV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0fSB3aGlsZSAoYmggIT0gaGVhZCk7XG4gXHR9XG4gXHQvKlxuLVx0ICogTG9jayBvdXQgcGFnZSYjMzk7cyBtZW1jZyBtaWdyYXRpb24gdG8ga2VlcCBQYWdlRGlydHlcbiYjNDM7XHQgKiBMb2NrIG91dCBmb2xpbyYjMzk7cyBtZW1jZyBtaWdyYXRpb24gdG8ga2VlcCBmb2xpbyBkaXJ0eSBmbGFnXG4gXHQgKiBzeW5jaHJvbml6ZWQgd2l0aCBwZXItbWVtY2cgZGlydHkgcGFnZSBjb3VudGVycy5cbiBcdCAqL1xuIFx0bmV3bHlfZGlydHkgPSAhZm9saW9fdGVzdF9zZXRfZGlydHkoZm9saW8pO1xuQEAgLTk1MiwyMyAmIzQzOzk2MCwyMyBAQCBfX2dldGJsa19zbG93KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLFxuIH1cbiBcbiAvKlxuLSAqIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBkaXJ0eSBidWZmZXJzIGFuZCBkaXJ0eSBwYWdlczpcbiYjNDM7ICogVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGRpcnR5IGJ1ZmZlcnMgYW5kIGRpcnR5IGZvbGlvczpcbiAgKlxuLSAqIFdoZW5ldmVyIGEgcGFnZSBoYXMgYW55IGRpcnR5IGJ1ZmZlcnMsIHRoZSBwYWdlJiMzOTtzIGRpcnR5IGJpdCBpcyBzZXQsIGFuZFxuLSAqIHRoZSBwYWdlIGlzIHRhZ2dlZCBkaXJ0eSBpbiB0aGUgcGFnZSBjYWNoZS5cbiYjNDM7ICogV2hlbmV2ZXIgYSBmb2xpbyBoYXMgYW55IGRpcnR5IGJ1ZmZlcnMsIHRoZSBmb2xpbyYjMzk7cyBkaXJ0eSBmbGFnIGlzIHNldCwgYW5kXG4mIzQzOyAqIHRoZSBmb2xpbyBpcyB0YWdnZWQgZGlydHkgaW4gdGhlIHBhZ2UgY2FjaGUuXG4gICpcbiAgKiBBdCBhbGwgdGltZXMsIHRoZSBkaXJ0aW5lc3Mgb2YgdGhlIGJ1ZmZlcnMgcmVwcmVzZW50cyB0aGUgZGlydGluZXNzIG9mXG4tICogc3Vic2VjdGlvbnMgb2YgdGhlIHBhZ2UuICBJZiB0aGUgcGFnZSBoYXMgYnVmZmVycywgdGhlIHBhZ2UgZGlydHkgYml0IGlzXG4mIzQzOyAqIHN1YnNlY3Rpb25zIG9mIHRoZSBmb2xpby4gIElmIHRoZSBmb2xpbyBoYXMgYnVmZmVycywgdGhlIGZvbGlvIGRpcnR5IGZsYWcgaXNcbiAgKiBtZXJlbHkgYSBoaW50IGFib3V0IHRoZSB0cnVlIGRpcnR5IHN0YXRlLlxuICAqXG4tICogV2hlbiBhIHBhZ2UgaXMgc2V0IGRpcnR5IGluIGl0cyBlbnRpcmV0eSwgYWxsIGl0cyBidWZmZXJzIGFyZSBtYXJrZWQgZGlydHlcbi0gKiAoaWYgdGhlIHBhZ2UgaGFzIGJ1ZmZlcnMpLlxuJiM0MzsgKiBXaGVuIGEgZm9saW8gaXMgc2V0IGRpcnR5IGluIGl0cyBlbnRpcmV0eSwgYWxsIGl0cyBidWZmZXJzIGFyZSBtYXJrZWQgZGlydHlcbiYjNDM7ICogKGlmIHRoZSBmb2xpbyBoYXMgYnVmZmVycykuXG4gICpcbi0gKiBXaGVuIGEgYnVmZmVyIGlzIG1hcmtlZCBkaXJ0eSwgaXRzIHBhZ2UgaXMgZGlydGllZCwgYnV0IHRoZSBwYWdlJiMzOTtzIG90aGVyXG4mIzQzOyAqIFdoZW4gYSBidWZmZXIgaXMgbWFya2VkIGRpcnR5LCBpdHMgZm9saW8gaXMgZGlydGllZCwgYnV0IHRoZSBmb2xpbyYjMzk7cyBvdGhlclxuICAqIGJ1ZmZlcnMgYXJlIG5vdC5cbiAgKlxuICAqIEFsc28uICBXaGVuIGJsb2NrZGV2IGJ1ZmZlcnMgYXJlIGV4cGxpY2l0bHkgcmVhZCB3aXRoIGJyZWFkKCksIHRoZXlcbi0gKiBpbmRpdmlkdWFsbHkgYmVjb21lIHVwdG9kYXRlLiAgQnV0IHRoZWlyIGJhY2tpbmcgcGFnZSByZW1haW5zIG5vdFxuJiM0MzsgKiBpbmRpdmlkdWFsbHkgYmVjb21lIHVwdG9kYXRlLiAgQnV0IHRoZWlyIGJhY2tpbmcgZm9saW8gcmVtYWlucyBub3RcbiAgKiB1cHRvZGF0ZSAtIGV2ZW4gaWYgYWxsIG9mIGl0cyBidWZmZXJzIGFyZSB1cHRvZGF0ZS4gIEEgc3Vic2VxdWVudFxuICAqIGJsb2NrX3JlYWRfZnVsbF9mb2xpbygpIGFnYWluc3QgdGhhdCBmb2xpbyB3aWxsIGRpc2NvdmVyIGFsbCB0aGUgdXB0b2RhdGVcbiAgKiBidWZmZXJzLCB3aWxsIHNldCB0aGUgZm9saW8gdXB0b2RhdGUgYW5kIHdpbGwgcGVyZm9ybSBubyBJL08uXG5AQCAtOTc5LDcgJiM0Mzs5ODcsNyBAQCBfX2dldGJsa19zbG93KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLFxuICAqIEBiaDogdGhlIGJ1ZmZlcl9oZWFkIHRvIG1hcmsgZGlydHlcbiAgKlxuICAqIG1hcmtfYnVmZmVyX2RpcnR5KCkgd2lsbCBzZXQgdGhlIGRpcnR5IGJpdCBhZ2FpbnN0IHRoZSBidWZmZXIsIHRoZW4gc2V0XG4tICogaXRzIGJhY2tpbmcgcGFnZSBkaXJ0eSwgdGhlbiB0YWcgdGhlIHBhZ2UgYXMgZGlydHkgaW4gdGhlIHBhZ2UgY2FjaGVcbiYjNDM7ICogaXRzIGJhY2tpbmcgZm9saW8gZGlydHksIHRoZW4gdGFnIHRoZSBmb2xpbyBhcyBkaXJ0eSBpbiB0aGUgcGFnZSBjYWNoZVxuICAqIGFuZCB0aGVuIGF0dGFjaCB0aGUgYWRkcmVzc19zcGFjZSYjMzk7cyBpbm9kZSB0byBpdHMgc3VwZXJibG9jayYjMzk7cyBkaXJ0eVxuICAqIGlub2RlIGxpc3QuXG4gICpcbkBAIC0xMDc0LDcgJiM0MzsxMDgyLDcgQEAgc3RhdGljIHZvaWQgYnVmZmVyX3NldF9jcnlwdG9fY3R4KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbiBcbiBcdC8qXG4gXHQgKiBUaGUgZXh0NCBqb3VybmFsIChqYmQyKSBjYW4gc3VibWl0IGEgYnVmZmVyX2hlYWQgaXQgZGlyZWN0bHkgY3JlYXRlZFxuLVx0ICogZm9yIGEgbm9uLXBhZ2VjYWNoZSBwYWdlLiAgZnNjcnlwdCBkb2VzbiYjMzk7dCBjYXJlIGFib3V0IHRoZXNlLlxuJiM0MztcdCAqIGZvciBhIG5vbi1wYWdlY2FjaGUgZm9saW8uICBmc2NyeXB0IGRvZXNuJiMzOTt0IGNhcmUgYWJvdXQgdGhlc2UuXG4gXHQgKi9cbiBcdGlmICghbWFwcGluZylcbiBcdFx0cmV0dXJuO1xuQEAgLTEyMTYsNyAmIzQzOzEyMjQsNyBAQCBzdGF0aWMgdm9pZCBiaF9scnVfaW5zdGFsbChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuIFxuIFx0LypcbiBcdCAqIHRoZSByZWZjb3VudCBvZiBidWZmZXJfaGVhZCBpbiBiaF9scnUgcHJldmVudHMgZHJvcHBpbmcgdGhlXG4tXHQgKiBhdHRhY2hlZCBwYWdlKGkuZS4sIHRyeV90b19mcmVlX2J1ZmZlcnMpIHNvIGl0IGNvdWxkIGNhdXNlXG4mIzQzO1x0ICogYXR0YWNoZWQgZm9saW8gKGkuZS4sIHRyeV90b19mcmVlX2J1ZmZlcnMpIHNvIGl0IGNvdWxkIGNhdXNlXG4gXHQgKiBmYWlsaW5nIHBhZ2UgbWlncmF0aW9uLlxuIFx0ICogU2tpcCBwdXR0aW5nIHVwY29taW5nIGJoIGludG8gYmhfbHJ1IHVudGlsIG1pZ3JhdGlvbiBpcyBkb25lLlxuIFx0ICovXG5AQCAtMTI4MCw3ICYjNDM7MTI4OCw3IEBAIGxvb2t1cF9iaF9scnUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3QgYmxvY2ssIHVuc2lnbmVkIHNpemUpXG4gICogUGVyZm9ybSBhIHBhZ2VjYWNoZSBsb29rdXAgZm9yIHRoZSBtYXRjaGluZyBidWZmZXIuICBJZiBpdCYjMzk7cyB0aGVyZSwgcmVmcmVzaFxuICAqIGl0IGluIHRoZSBMUlUgYW5kIG1hcmsgaXQgYXMgYWNjZXNzZWQuICBJZiBpdCBpcyBub3QgcHJlc2VudCB0aGVuIHJldHVyblxuICAqIE5VTEwuIEF0b21pYyBjb250ZXh0IGNhbGxlcnMgbWF5IGFsc28gcmV0dXJuIE5VTEwgaWYgdGhlIGJ1ZmZlciBpcyBiZWluZ1xuLSAqIG1pZ3JhdGVkOyBzaW1pbGFybHkgdGhlIHBhZ2UgaXMgbm90IG1hcmtlZCBhY2Nlc3NlZCBlaXRoZXIuXG4mIzQzOyAqIG1pZ3JhdGVkOyBzaW1pbGFybHkgdGhlIGZvbGlvIGlzIG5vdCBtYXJrZWQgYWNjZXNzZWQgZWl0aGVyLlxuICAqL1xuIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKlxuIGZpbmRfZ2V0X2Jsb2NrX2NvbW1vbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBibG9jayxcbkBAIC0xMjg5LDcgJiM0MzsxMjk3LDcgQEAgZmluZF9nZXRfYmxvY2tfY29tbW9uKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLFxuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IGxvb2t1cF9iaF9scnUoYmRldiwgYmxvY2ssIHNpemUpO1xuIFxuIFx0aWYgKGJoID09IE5VTEwpIHtcbi1cdFx0LyogX19maW5kX2dldF9ibG9ja19zbG93IHdpbGwgbWFyayB0aGUgcGFnZSBhY2Nlc3NlZCAqL1xuJiM0MztcdFx0LyogX19maW5kX2dldF9ibG9ja19zbG93IHdpbGwgbWFyayB0aGUgZm9saW8gYWNjZXNzZWQgKi9cbiBcdFx0YmggPSBfX2ZpbmRfZ2V0X2Jsb2NrX3Nsb3coYmRldiwgYmxvY2ssIGF0b21pYyk7XG4gXHRcdGlmIChiaClcbiBcdFx0XHRiaF9scnVfaW5zdGFsbChiaCk7XG5AQCAtMTQ3NSwxNSAmIzQzOzE0ODMsMTQgQEAgdm9pZCBmb2xpb19zZXRfYmgoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiB9XG4gRVhQT1JUX1NZTUJPTChmb2xpb19zZXRfYmgpO1xuIFxuLS8qXG4tICogQ2FsbGVkIHdoZW4gdHJ1bmNhdGluZyBhIGJ1ZmZlciBvbiBhIHBhZ2UgY29tcGxldGVseS5cbi0gKi9cbi1cbiAvKiBCaXRzIHRoYXQgYXJlIGNsZWFyZWQgZHVyaW5nIGFuIGludmFsaWRhdGUgKi9cbiAjZGVmaW5lIEJVRkZFUl9GTEFHU19ESVNDQVJEIFxcXG4gXHQoMSBcdTAwM2NcdTAwM2MgQkhfTWFwcGVkIHwgMSBcdTAwM2NcdTAwM2MgQkhfTmV3IHwgMSBcdTAwM2NcdTAwM2MgQkhfUmVxIHwgXFxcbiBcdCAxIFx1MDAzY1x1MDAzYyBCSF9EZWxheSB8IDEgXHUwMDNjXHUwMDNjIEJIX1Vud3JpdHRlbilcbiBcbiYjNDM7LypcbiYjNDM7ICogQ2FsbGVkIHdoZW4gdHJ1bmNhdGluZyBhIGJ1ZmZlciBvbiBhIGZvbGlvIGNvbXBsZXRlbHkuXG4mIzQzOyAqL1xuIHN0YXRpYyB2b2lkIGRpc2NhcmRfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgYl9zdGF0ZTtcbkBAIC0xNjExLDkgJiM0MzsxNjE4LDcgQEAgRVhQT1JUX1NZTUJPTChjcmVhdGVfZW1wdHlfYnVmZmVycyk7XG4gICogbW9tZW50IHdoZW4gc29tZXRoaW5nIHdpbGwgZXhwbGljaXRseSBtYXJrIHRoZSBidWZmZXIgZGlydHkgKGhvcGVmdWxseSB0aGF0XG4gICogd2lsbCBub3QgaGFwcGVuIHVudGlsIHdlIHdpbGwgZnJlZSB0aGF0IGJsb2NrIDstKSBXZSBkb24mIzM5O3QgZXZlbiBuZWVkIHRvIG1hcmtcbiAgKiBpdCBub3QtdXB0b2RhdGUgLSBub2JvZHkgY2FuIGV4cGVjdCBhbnl0aGluZyBmcm9tIGEgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlclxuLSAqIGFueXdheS4gV2UgdXNlZCB0byB1c2UgdW5tYXBfYnVmZmVyKCkgZm9yIHN1Y2ggaW52YWxpZGF0aW9uLCBidXQgdGhhdCB3YXNcbi0gKiB3cm9uZy4gV2UgZGVmaW5pdGVseSBkb24mIzM5O3Qgd2FudCB0byBtYXJrIHRoZSBhbGlhcyB1bm1hcHBlZCwgZm9yIGV4YW1wbGUgLSBpdFxuLSAqIHdvdWxkIGNvbmZ1c2UgYW55b25lIHdobyBtaWdodCBwaWNrIGl0IHdpdGggYnJlYWQoKSBhZnRlcndhcmRzLi4uXG4mIzQzOyAqIGFueXdheS5cbiAgKlxuICAqIEFsc28uLiAgTm90ZSB0aGF0IGJmb3JnZXQoKSBkb2VzbiYjMzk7dCBsb2NrIHRoZSBidWZmZXIuICBTbyB0aGVyZSBjYW4gYmVcbiAgKiB3cml0ZW91dCBJL08gZ29pbmcgb24gYWdhaW5zdCByZWNlbnRseS1mcmVlZCBidWZmZXJzLiAgV2UgZG9uJiMzOTt0IHdhaXQgb24gdGhhdFxuQEAgLTE2NDksNyAmIzQzOzE2NTQsNyBAQCB2b2lkIGNsZWFuX2JkZXZfYWxpYXNlcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBibG9jaywgc2VjdG9yX3QgbGVuKVxuIFx0XHRcdC8qIFJlY2hlY2sgd2hlbiB0aGUgZm9saW8gaXMgbG9ja2VkIHdoaWNoIHBpbnMgYmhzICovXG4gXHRcdFx0aGVhZCA9IGZvbGlvX2J1ZmZlcnMoZm9saW8pO1xuIFx0XHRcdGlmICghaGVhZClcbi1cdFx0XHRcdGdvdG8gdW5sb2NrX3BhZ2U7XG4mIzQzO1x0XHRcdFx0Z290byB1bmxvY2tfZm9saW87XG4gXHRcdFx0YmggPSBoZWFkO1xuIFx0XHRcdGRvIHtcbiBcdFx0XHRcdGlmICghYnVmZmVyX21hcHBlZChiaCkgfHwgKGJoLVx1MDAzZWJfYmxvY2tuciBcdTAwM2MgYmxvY2spKVxuQEAgLTE2NjIsNyAmIzQzOzE2NjcsNyBAQCB2b2lkIGNsZWFuX2JkZXZfYWxpYXNlcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBibG9jaywgc2VjdG9yX3QgbGVuKVxuIG5leHQ6XG4gXHRcdFx0XHRiaCA9IGJoLVx1MDAzZWJfdGhpc19wYWdlO1xuIFx0XHRcdH0gd2hpbGUgKGJoICE9IGhlYWQpO1xuLXVubG9ja19wYWdlOlxuJiM0Mzt1bmxvY2tfZm9saW86XG4gXHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdFx0fVxuIFx0XHRmb2xpb19iYXRjaF9yZWxlYXNlKFx1MDAyNmZiYXRjaCk7XG5AQCAtMTcxMCw3ICYjNDM7MTcxNSw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmZvbGlvX2NyZWF0ZV9idWZmZXJzKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gICpcbiAgKiBJZiBibG9ja193cml0ZV9mdWxsX2ZvbGlvKCkgaXMgY2FsbGVkIGZvciByZWd1bGFyIHdyaXRlYmFja1xuICAqICh3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfTk9ORSkgdGhlbiBpdCB3aWxsIHJlZGlydHkgYSBmb2xpbyB3aGljaFxuLSAqIGhhcyBhIGxvY2tlZCBidWZmZXIuICAgVGhpcyBvbmx5IGNhbiBoYXBwZW4gaWYgc29tZW9uZSBoYXMgd3JpdHRlblxuJiM0MzsgKiBoYXMgYSBsb2NrZWQgYnVmZmVyLiAgIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGlmIHNvbWVvbmUgaGFzIHdyaXR0ZW5cbiAgKiB0aGUgYnVmZmVyIGRpcmVjdGx5LCB3aXRoIGJoX3N1Ym1pdCgpLiAgQXQgdGhlIGFkZHJlc3Nfc3BhY2UgbGV2ZWxcbiAgKiB0aGUgZm9saW8gd3JpdGViYWNrIGZsYWcgcHJldmVudHMgdGhpcyBjb250ZW50aW9uIGZyb20gb2NjdXJyaW5nLlxuICAqXG5AQCAtMjIxMyw5ICYjNDM7MjIxOCw5IEBAIGludCBnZW5lcmljX3dyaXRlX2VuZChjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0aWYgKG9sZF9zaXplIFx1MDAzYyBwb3MpXG4gXHRcdHBhZ2VjYWNoZV9pc2l6ZV9leHRlbmRlZChpbm9kZSwgb2xkX3NpemUsIHBvcyk7XG4gXHQvKlxuLVx0ICogRG9uJiMzOTt0IG1hcmsgdGhlIGlub2RlIGRpcnR5IHVuZGVyIHBhZ2UgbG9jay4gRmlyc3QsIGl0IHVubmVjZXNzYXJpbHlcbi1cdCAqIG1ha2VzIHRoZSBob2xkaW5nIHRpbWUgb2YgcGFnZSBsb2NrIGxvbmdlci4gU2Vjb25kLCBpdCBmb3JjZXMgbG9ja1xuLVx0ICogb3JkZXJpbmcgb2YgcGFnZSBsb2NrIGFuZCB0cmFuc2FjdGlvbiBzdGFydCBmb3Igam91cm5hbGluZ1xuJiM0MztcdCAqIERvbiYjMzk7dCBtYXJrIHRoZSBpbm9kZSBkaXJ0eSB1bmRlciBmb2xpbyBsb2NrLiBGaXJzdCwgaXQgdW5uZWNlc3NhcmlseVxuJiM0MztcdCAqIG1ha2VzIHRoZSBob2xkaW5nIHRpbWUgb2YgZm9saW8gbG9jayBsb25nZXIuIFNlY29uZCwgaXQgZm9yY2VzIGxvY2tcbiYjNDM7XHQgKiBvcmRlcmluZyBvZiBmb2xpbyBsb2NrIGFuZCB0cmFuc2FjdGlvbiBzdGFydCBmb3Igam91cm5hbGluZ1xuIFx0ICogZmlsZXN5c3RlbXMuXG4gXHQgKi9cbiBcdGlmIChpX3NpemVfY2hhbmdlZClcbkBAIC0yMzQxLDcgJiM0MzsyMzQ2LDcgQEAgaW50IGJsb2NrX3JlYWRfZnVsbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZXRfYmxvY2tfdCAqZ2V0X2Jsb2NrKVxuIFx0XHQgKiBCSF9Bc3luY19SZWFkIHRlbGxzIGVuZF9idWZmZXJfYXN5bmNfcmVhZCgpIHRoYXQgdGhpc1xuIFx0XHQgKiBidWZmZXIgaXMgbm90IHVuZGVyIGFzeW5jIEkvTy5cbiBcdFx0ICpcbi1cdFx0ICogVGhlIGZvbGlvIGNvbWVzIHVubG9ja2VkIHdoZW4gaXQgaGFzIG5vIGxvY2tlZFxuJiM0MztcdFx0ICogVGhlIGZvbGlvIGlzIHVubG9ja2VkIHdoZW4gaXQgaGFzIG5vIGxvY2tlZFxuIFx0XHQgKiBidWZmZXJfYXN5bmMgYnVmZmVycyBsZWZ0LlxuIFx0XHQgKlxuIFx0XHQgKiBUaGUgZm9saW8gbG9jayBwcmV2ZW50cyBhbnlvbmUgc3RhcnRpbmcgbmV3IGFzeW5jXG5AQCAtMjQ1MSw3ICYjNDM7MjQ1Niw3IEBAIHN0YXRpYyBpbnQgY29udF9leHBhbmRfemVybyhjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXHRcdH1cbiBcdH1cbiBcbi1cdC8qIHBhZ2UgY292ZXJzIHRoZSBib3VuZGFyeSwgZmluZCB0aGUgYm91bmRhcnkgb2Zmc2V0ICovXG4mIzQzO1x0LyogZm9saW8gY3Jvc3NlcyB0aGUgYm91bmRhcnksIGZpbmQgdGhlIGJvdW5kYXJ5IG9mZnNldCAqL1xuIFx0aWYgKGluZGV4ID09IGN1cmlkeCkge1xuIFx0XHR6ZXJvZnJvbSA9IGN1cnBvcyBcdTAwMjYgflBBR0VfTUFTSztcbiBcdFx0LyogaWYgd2Ugd2lsbCBleHBhbmQgdGhlIHRoaW5nIGxhc3QgYmxvY2sgd2lsbCBiZSBmaWxsZWQgKi9cbkBAIC0yNTA5LDE4ICYjNDM7MjUxNCwxOCBAQCBFWFBPUlRfU1lNQk9MKGNvbnRfd3JpdGVfYmVnaW4pO1xuIFxuIC8qXG4gICogYmxvY2tfcGFnZV9ta3dyaXRlKCkgaXMgbm90IGFsbG93ZWQgdG8gY2hhbmdlIHRoZSBmaWxlIHNpemUgYXMgaXQgZ2V0c1xuLSAqIGNhbGxlZCBmcm9tIGEgcGFnZSBmYXVsdCBoYW5kbGVyIHdoZW4gYSBwYWdlIGlzIGZpcnN0IGRpcnRpZWQuIEhlbmNlIHdlIG11c3Rcbi0gKiBiZSBjYXJlZnVsIHRvIGNoZWNrIGZvciBFT0YgY29uZGl0aW9ucyBoZXJlLiBXZSBzZXQgdGhlIHBhZ2UgdXAgY29ycmVjdGx5XG4tICogZm9yIGEgd3JpdHRlbiBwYWdlIHdoaWNoIG1lYW5zIHdlIGdldCBFTk9TUEMgY2hlY2tpbmcgd2hlbiB3cml0aW5nIGludG9cbiYjNDM7ICogY2FsbGVkIGZyb20gYSBwYWdlIGZhdWx0IGhhbmRsZXIgd2hlbiBhIGZvbGlvIGlzIGZpcnN0IGRpcnRpZWQuIEhlbmNlIHdlIG11c3RcbiYjNDM7ICogYmUgY2FyZWZ1bCB0byBjaGVjayBmb3IgRU9GIGNvbmRpdGlvbnMgaGVyZS4gV2Ugc2V0IHRoZSBmb2xpbyB1cCBjb3JyZWN0bHlcbiYjNDM7ICogZm9yIGEgd3JpdHRlbiBmb2xpbyB3aGljaCBtZWFucyB3ZSBnZXQgRU5PU1BDIGNoZWNraW5nIHdoZW4gd3JpdGluZyBpbnRvXG4gICogaG9sZXMgYW5kIGNvcnJlY3QgZGVsYWxsb2MgYW5kIHVud3JpdHRlbiBleHRlbnQgbWFwcGluZyBvbiBmaWxlc3lzdGVtcyB0aGF0XG4gICogc3VwcG9ydCB0aGVzZSBmZWF0dXJlcy5cbiAgKlxuICAqIFdlIGFyZSBub3QgYWxsb3dlZCB0byB0YWtlIHRoZSBpX3J3c2VtIGhlcmUgc28gd2UgaGF2ZSB0byBwbGF5IGdhbWVzIHRvXG4tICogcHJvdGVjdCBhZ2FpbnN0IHRydW5jYXRlIHJhY2VzIGFzIHRoZSBwYWdlIGNvdWxkIG5vdyBiZSBiZXlvbmQgRU9GLiAgQmVjYXVzZVxuLSAqIHRydW5jYXRlIHdyaXRlcyB0aGUgaW5vZGUgc2l6ZSBiZWZvcmUgcmVtb3ZpbmcgcGFnZXMsIG9uY2Ugd2UgaGF2ZSB0aGVcbi0gKiBwYWdlIGxvY2sgd2UgY2FuIGRldGVybWluZSBzYWZlbHkgaWYgdGhlIHBhZ2UgaXMgYmV5b25kIEVPRi4gSWYgaXQgaXMgbm90XG4tICogYmV5b25kIEVPRiwgdGhlbiB0aGUgcGFnZSBpcyBndWFyYW50ZWVkIHNhZmUgYWdhaW5zdCB0cnVuY2F0aW9uIHVudGlsIHdlXG4tICogdW5sb2NrIHRoZSBwYWdlLlxuJiM0MzsgKiBwcm90ZWN0IGFnYWluc3QgdHJ1bmNhdGUgcmFjZXMgYXMgdGhlIGZvbGlvIGNvdWxkIG5vdyBiZSBiZXlvbmQgRU9GLiAgQmVjYXVzZVxuJiM0MzsgKiB0cnVuY2F0ZSB3cml0ZXMgdGhlIGlub2RlIHNpemUgYmVmb3JlIHJlbW92aW5nIGZvbGlvcywgb25jZSB3ZSBoYXZlIHRoZVxuJiM0MzsgKiBmb2xpbyBsb2NrIHdlIGNhbiBkZXRlcm1pbmUgc2FmZWx5IGlmIHRoZSBmb2xpbyBpcyBiZXlvbmQgRU9GLiBJZiBpdCBpcyBub3RcbiYjNDM7ICogYmV5b25kIEVPRiwgdGhlbiB0aGUgZm9saW8gaXMgZ3VhcmFudGVlZCBzYWZlIGFnYWluc3QgdHJ1bmNhdGlvbiB1bnRpbCB3ZVxuJiM0MzsgKiB1bmxvY2sgdGhlIGZvbGlvLlxuICAqXG4gICogRGlyZWN0IGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbiBzaG91bGQgcHJvdGVjdCBhZ2FpbnN0IGZpbGVzeXN0ZW0gZnJlZXppbmdcbiAgKiB1c2luZyBzYl9zdGFydF9wYWdlZmF1bHQoKSAtIHNiX2VuZF9wYWdlZmF1bHQoKSBmdW5jdGlvbnMuXG5AQCAtMjUzOCw3ICYjNDM7MjU0Myw3IEBAIGludCBibG9ja19wYWdlX21rd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuIFx0c2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbiBcdGlmICgoZm9saW8tXHUwMDNlbWFwcGluZyAhPSBpbm9kZS1cdTAwM2VpX21hcHBpbmcpIHx8XG4gXHQgICAgKGZvbGlvX3Bvcyhmb2xpbykgXHUwMDNlPSBzaXplKSkge1xuLVx0XHQvKiBXZSBvdmVybG9hZCBFRkFVTFQgdG8gbWVhbiBwYWdlIGdvdCB0cnVuY2F0ZWQgKi9cbiYjNDM7XHRcdC8qIFdlIG92ZXJsb2FkIEVGQVVMVCB0byBtZWFuIGZvbGlvIGdvdCB0cnVuY2F0ZWQgKi9cbiBcdFx0cmV0ID0gLUVGQVVMVDtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaCBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaFxuaW5kZXggZmQyYzcxMTVjMDU0Mi4uMWQ1NWY3NzcwY2FkMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oXG5AQCAtMzM4LDIwICYjNDM7MzM4LDU4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBiZm9yZ2V0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4gXHRcdF9fYmZvcmdldChiaCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGJ1ZmZlcl9oZWFkICpcbi1zYl9icmVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzZWN0b3JfdCBibG9jaylcbiYjNDM7LyoqXG4mIzQzOyAqIHNiX2JyZWFkIC0gUmVhZCBhIGJsb2NrLlxuJiM0MzsgKiBAc2I6IFRoZSBzdXBlcmJsb2NrIHRvIHJlYWQgZnJvbS5cbiYjNDM7ICogQGJsb2NrOiBCbG9jayBudW1iZXIgaW4gdW5pdHMgb2YgYmxvY2sgc2l6ZS5cbiYjNDM7ICpcbiYjNDM7ICogUmVhZCBhIHNwZWNpZmllZCBibG9jaywgYW5kIHJldHVybiB0aGUgYnVmZmVyIGhlYWQgdGhhdCByZWZlcnNcbiYjNDM7ICogdG8gaXQuICBUaGUgbWVtb3J5IGlzIGFsbG9jYXRlZCBmcm9tIHRoZSBtb3ZhYmxlIGFyZWEgc28gdGhhdCBpdCBjYW5cbiYjNDM7ICogYmUgbWlncmF0ZWQuICBUaGUgcmV0dXJuZWQgYnVmZmVyIGhlYWQgaGFzIGl0cyByZWZjb3VudCBpbmNyZWFzZWQuXG4mIzQzOyAqIFRoZSBjYWxsZXIgc2hvdWxkIGNhbGwgYnJlbHNlKCkgd2hlbiBpdCBoYXMgZmluaXNoZWQgd2l0aCB0aGUgYnVmZmVyLlxuJiM0MzsgKlxuJiM0MzsgKiBDb250ZXh0OiBNYXkgc2xlZXAgd2FpdGluZyBmb3IgSS9PLlxuJiM0MzsgKiBSZXR1cm46IE5VTEwgaWYgdGhlIGJsb2NrIHdhcyB1bnJlYWRhYmxlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZVxuJiM0MztzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNiX2JyZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHNlY3Rvcl90IGJsb2NrKVxuIHtcbiBcdHJldHVybiBfX2JyZWFkX2dmcChzYi1cdTAwM2VzX2JkZXYsIGJsb2NrLCBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSwgX19HRlBfTU9WQUJMRSk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGJ1ZmZlcl9oZWFkICpcbi1zYl9icmVhZF91bm1vdmFibGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc2VjdG9yX3QgYmxvY2spXG4mIzQzOy8qKlxuJiM0MzsgKiBzYl9icmVhZF91bm1vdmFibGUgLSBSZWFkIGEgYmxvY2suXG4mIzQzOyAqIEBzYjogVGhlIHN1cGVyYmxvY2sgdG8gcmVhZCBmcm9tLlxuJiM0MzsgKiBAYmxvY2s6IEJsb2NrIG51bWJlciBpbiB1bml0cyBvZiBibG9jayBzaXplLlxuJiM0MzsgKlxuJiM0MzsgKiBSZWFkIGEgc3BlY2lmaWVkIGJsb2NrLCBhbmQgcmV0dXJuIHRoZSBidWZmZXIgaGVhZCB0aGF0IHJlZmVycyB0byBpdC5cbiYjNDM7ICogVGhlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgZnJvbSB0aGUgdW5tb3ZhYmxlIGFyZWEgc28gdGhhdCBwb2ludGVycyBpbnRvXG4mIzQzOyAqIGl0IHJlbWFpbiB2YWxpZCBhZnRlciBjb21wYWN0aW9uIHJ1bnMuICBUaGUgcmV0dXJuZWQgYnVmZmVyIGhlYWQgaGFzXG4mIzQzOyAqIGl0cyByZWZjb3VudCBpbmNyZWFzZWQuICBUaGUgY2FsbGVyIHNob3VsZCBjYWxsIGJyZWxzZSgpIHdoZW4gaXQgaGFzXG4mIzQzOyAqIGZpbmlzaGVkIHdpdGggdGhlIGJ1ZmZlci5cbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogTWF5IHNsZWVwIHdhaXRpbmcgZm9yIEkvTy5cbiYjNDM7ICogUmV0dXJuOiBOVUxMIGlmIHRoZSBibG9jayB3YXMgdW5yZWFkYWJsZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmVcbiYjNDM7c3RydWN0IGJ1ZmZlcl9oZWFkICpzYl9icmVhZF91bm1vdmFibGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc2VjdG9yX3QgYmxvY2spXG4ge1xuIFx0cmV0dXJuIF9fYnJlYWRfZ2ZwKHNiLVx1MDAzZXNfYmRldiwgYmxvY2ssIHNiLVx1MDAzZXNfYmxvY2tzaXplLCAwKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkXG4tc2JfYnJlYWRhaGVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzZWN0b3JfdCBibG9jaylcbiYjNDM7LyoqXG4mIzQzOyAqIHNiX2JyZWFkYWhlYWQgLSBTdGFydCByZWFkYWhlYWQuXG4mIzQzOyAqIEBzYjogU3VwZXJibG9jayBpZGVudGlmeWluZyB0aGUgYmxvY2sgZGV2aWNlLlxuJiM0MzsgKiBAYmxvY2s6IFRoZSBibG9jayB0byByZWFkLlxuJiM0MzsgKlxuJiM0MzsgKiBSZWFkIHRoaXMgYmxvY2suICBUaGUgSS9PIHdpbGwgYmUgZmxhZ2dlZCBhcyBiZWluZyByZWFkYWhlYWQgcmF0aGVyXG4mIzQzOyAqIHRoYW4gaW1tZWRpYXRlIHJlYWQsIGJ1dCAodW5saWtlIHRoZSBwYWdlIGNhY2hlKSwgc3Vycm91bmRpbmcgYmxvY2tzXG4mIzQzOyAqIHdpbGwgbm90IGJlIHJlYWQuXG4mIzQzOyAqXG4mIzQzOyAqIENvbnRleHQ6IE1heSBzbGVlcCBpbiBvcmRlciB0byBhbGxvY2F0ZSBtZW1vcnkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lXG4mIzQzO3ZvaWQgc2JfYnJlYWRhaGVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzZWN0b3JfdCBibG9jaylcbiB7XG4gXHRfX2JyZWFkYWhlYWQoc2ItXHUwMDNlc19iZGV2LCBibG9jaywgc2ItXHUwMDNlc19ibG9ja3NpemUpO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMToxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGRvY3VtZW50YXRpb24gdXBkYXRlcywga2VybmVsZG9jIGFkZGl0aW9ucywgY29tbWVudCBjb252ZXJzaW9ucyAoZnJvbSBwYWdlIHRvIGZvbGlvIHRlcm1pbm9sb2d5KSwgYW5kIGEgbGFiZWwgcmVuYW1lICh1bmxvY2tfcGFnZSB0byB1bmxvY2tfZm9saW8pIHdpdGggbm8gZnVuY3Rpb25hbCBjb2RlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzhlNzJlNmYyZmI2YjE0YThhZjg0ZTRiM2U5MGVhODI3ZDMxOGYxMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDI4IDIxOjE4OjI4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QKaW5kZXggNjA4ODBlYjBjNDlkMS4uZGU5NmI2NzQ1NjAwYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0CkBAIC0zNDgsNyAmIzQzOzM0OCw3IEBAIHNpbXBseSBvZiByZXR1cm4gMS4gIE5vdGUgdGhhdCBhbGwgYWN0dWFsIGV2aWN0aW9uIHdvcmsgaXMgZG9uZSBieSBjYWxsZXIgYWZ0ZXIKIEFzIGJlZm9yZSwgY2xlYXJfaW5vZGUoKSBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2Ugb24gZWFjaCBjYWxsIG9mCiAtJmd0O2V2aWN0X2lub2RlKCkgKGFzIGl0IHVzZWQgdG8gYmUgZm9yIGVhY2ggY2FsbCBvZiAtJmd0O2RlbGV0ZV9pbm9kZSgpKS4gIFVubGlrZQogYmVmb3JlLCBpZiB5b3UgYXJlIHVzaW5nIGlub2RlLWFzc29jaWF0ZWQgbWV0YWRhdGEgYnVmZmVycyAoaS5lLgotbWFya19idWZmZXJfZGlydHlfaW5vZGUoKSksIGl0JiMzOTtzIHlvdXIgcmVzcG9uc2liaWxpdHkgdG8gY2FsbAomIzQzO21tYl9tYXJrX2J1ZmZlcl9kaXJ0eSgpKSwgaXQmIzM5O3MgeW91ciByZXNwb25zaWJpbGl0eSB0byBjYWxsCiBpbnZhbGlkYXRlX2lub2RlX2J1ZmZlcnMoKSBiZWZvcmUgY2xlYXJfaW5vZGUoKS4KIAogTk9URTogY2hlY2tpbmcgaV9ubGluayBpbiB0aGUgYmVnaW5uaW5nIG9mIC0mZ3Q7d3JpdGVfaW5vZGUoKSBhbmQgYmFpbGluZyBvdXQKZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmMKaW5kZXggZWQ5NjZmYTczYjFiYS4uYzkzNDJhZWI4Y2RmNiAxMDA2NDQKLS0tIGEvZnMvYnVmZmVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnVmZmVyLmMKQEAgLTI2NSw3ICYjNDM7MjY1LDcgQEAgX19maW5kX2dldF9ibG9ja19zbG93KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLCBib29sIGF0b21pYykKIAkJYmggPSBiaC0mZ3Q7Yl90aGlzX3BhZ2U7CiAJfSB3aGlsZSAoYmggIT0gaGVhZCk7CiAKLQkvKiB3ZSBtaWdodCBiZSBoZXJlIGJlY2F1c2Ugc29tZSBvZiB0aGUgYnVmZmVycyBvbiB0aGlzIHBhZ2UgYXJlCiYjNDM7CS8qIHdlIG1pZ2h0IGJlIGhlcmUgYmVjYXVzZSBzb21lIG9mIHRoZSBidWZmZXJzIG9uIHRoaXMgZm9saW8gYXJlCiAJICogbm90IG1hcHBlZC4gIFRoaXMgaXMgZHVlIHRvIHZhcmlvdXMgcmFjZXMgYmV0d2VlbgogCSAqIGZpbGUgaW8gb24gdGhlIGJsb2NrIGRldmljZSBhbmQgZ2V0YmxrLiAgSXQgZ2V0cyBkZWFsdCB3aXRoCiAJICogZWxzZXdoZXJlLCBkb24mIzM5O3QgYnVmZmVyX2Vycm9yIGlmIHdlIGhhZCBzb21lIHVubWFwcGVkIGJ1ZmZlcnMKQEAgLTMxMSw3ICYjNDM7MzExLDcgQEAgc3RhdGljIHZvaWQgZW5kX2J1ZmZlcl9hc3luY19yZWFkKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB1cHRvZGF0ZSkKIAkvKgogCSAqIEJlIF92ZXJ5XyBjYXJlZnVsIGZyb20gaGVyZSBvbi4gQmFkIHRoaW5ncyBjYW4gaGFwcGVuIGlmCiAJICogdHdvIGJ1ZmZlciBoZWFkcyBlbmQgSU8gYXQgYWxtb3N0IHRoZSBzYW1lIHRpbWUgYW5kIGJvdGgKLQkgKiBkZWNpZGUgdGhhdCB0aGUgcGFnZSBpcyBub3cgY29tcGxldGVseSBkb25lLgomIzQzOwkgKiBkZWNpZGUgdGhhdCB0aGUgZm9saW8gaXMgbm93IGNvbXBsZXRlbHkgZG9uZS4KIAkgKi8KIAlmaXJzdCA9IGZvbGlvX2J1ZmZlcnMoZm9saW8pOwogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7Zmlyc3QtJmd0O2JfdXB0b2RhdGVfbG9jaywgZmxhZ3MpOwpAQCAtNTIwLDggJiM0Mzs1MjAsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChtbWJfaGFzX2J1ZmZlcnMpOwogICoKICAqIERvIHRoaXMgaW4gdHdvIG1haW4gc3RhZ2VzOiBmaXJzdCB3ZSBjb3B5IGRpcnR5IGJ1ZmZlcnMgdG8gYQogICogdGVtcG9yYXJ5IGlub2RlIGxpc3QsIHF1ZXVlaW5nIHRoZSB3cml0ZXMgYXMgd2UgZ28uIFRoZW4gd2UgY2xlYW4KLSAqIHVwLCB3YWl0aW5nIGZvciB0aG9zZSB3cml0ZXMgdG8gY29tcGxldGUuIG1hcmtfYnVmZmVyX2RpcnR5X2lub2RlKCkKLSAqIGRvZXNuJiMzOTt0IHRvdWNoIGJfYXNzb2NfYnVmZmVycyBsaXN0IGlmIGJfbW1iIGlzIG5vdCBOVUxMIHNvIHdlIGFyZSBzdXJlIHRoZQomIzQzOyAqIHVwLCB3YWl0aW5nIGZvciB0aG9zZSB3cml0ZXMgdG8gY29tcGxldGUuIG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eSgpCiYjNDM7ICogZG9lc24mIzM5O3QgdG91Y2ggYl9hc3NvY19idWZmZXJzIGxpc3QgaWYgYl9tbWIgaXMgc2V0IHNvIHdlIGFyZSBzdXJlIHRoZQogICogYnVmZmVyIHN0YXlzIG9uIG91ciBsaXN0IHVudGlsIElPIGNvbXBsZXRlcyAoYXQgd2hpY2ggcG9pbnQgaXQgY2FuIGJlCiAgKiByZWFwZWQpLgogICovCkBAIC01NDIsNyAmIzQzOzU0Miw3IEBAIGludCBtbWJfc3luYyhzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYikKIAkJYmggPSBCSF9FTlRSWShtbWItJmd0O2xpc3QubmV4dCk7CiAJCVdBUk5fT05fT05DRShiaC0mZ3Q7Yl9tbWIgIT0gbW1iKTsKIAkJX19yZW1vdmVfYXNzb2NfcXVldWUobW1iLCBiaCk7Ci0JCS8qIEF2b2lkIHJhY2Ugd2l0aCBtYXJrX2J1ZmZlcl9kaXJ0eV9pbm9kZSgpIHdoaWNoIGRvZXMKJiM0MzsJCS8qIEF2b2lkIHJhY2Ugd2l0aCBtbWJfbWFya19idWZmZXJfZGlydHkoKSB3aGljaCBkb2VzCiAJCSAqIGEgbG9ja2xlc3MgY2hlY2sgYW5kIHdlIHJlbHkgb24gc2VlaW5nIHRoZSBkaXJ0eSBiaXQgKi8KIAkJc21wX21iKCk7CiAJCWlmIChidWZmZXJfZGlydHkoYmgpIHx8IGJ1ZmZlcl9sb2NrZWQoYmgpKSB7CkBAIC01ODAsNyAmIzQzOzU4MCw3IEBAIGludCBtbWJfc3luYyhzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYikKIAkJYmggPSBCSF9FTlRSWSh0bXAucHJldik7CiAJCWdldF9iaChiaCk7CiAJCV9fcmVtb3ZlX2Fzc29jX3F1ZXVlKG1tYiwgYmgpOwotCQkvKiBBdm9pZCByYWNlIHdpdGggbWFya19idWZmZXJfZGlydHlfaW5vZGUoKSB3aGljaCBkb2VzCiYjNDM7CQkvKiBBdm9pZCByYWNlIHdpdGggbW1iX21hcmtfYnVmZmVyX2RpcnR5KCkgd2hpY2ggZG9lcwogCQkgKiBhIGxvY2tsZXNzIGNoZWNrIGFuZCB3ZSByZWx5IG9uIHNlZWluZyB0aGUgZGlydHkgYml0ICovCiAJCXNtcF9tYigpOwogCQlpZiAoYnVmZmVyX2RpcnR5KGJoKSkgewpAQCAtNjE4LDYgJiM0Mzs2MTgsMTQgQEAgdm9pZCB3cml0ZV9ib3VuZGFyeV9ibG9jayhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LAogCX0KIH0KIAomIzQzOy8qKgomIzQzOyAqIG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eSAtIE1hcmsgYSBtZXRhZGF0YSBidWZmZXIgZGlydHkuCiYjNDM7ICogQGJoOiBUaGUgYnVmZmVyIHRvIG1hcmsgZGlydHkuCiYjNDM7ICogQG1tYjogVGhlIGxpc3Qgb2YgYnVmZmVycyB0byBhZGQgdGhlIGJ1ZmZlciB0by4KJiM0MzsgKgomIzQzOyAqIE1hcmsgdGhlIGJ1ZmZlciBkaXJ0eSBhbmQgYWRkIGl0IHRvIHRoZSBsaXN0IGlmIGl0IGlzIG5vdCBhbHJlYWR5IG9uCiYjNDM7ICogYSBsaXN0LgomIzQzOyAqLwogdm9pZCBtbWJfbWFya19idWZmZXJfZGlydHkoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKIAkJCSAgIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iKQogewpAQCAtNjg2LDcgJiM0Mzs2OTQsNyBAQCBib29sIGJsb2NrX2RpcnR5X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCQl9IHdoaWxlIChiaCAhPSBoZWFkKTsKIAl9CiAJLyoKLQkgKiBMb2NrIG91dCBwYWdlJiMzOTtzIG1lbWNnIG1pZ3JhdGlvbiB0byBrZWVwIFBhZ2VEaXJ0eQomIzQzOwkgKiBMb2NrIG91dCBmb2xpbyYjMzk7cyBtZW1jZyBtaWdyYXRpb24gdG8ga2VlcCBmb2xpbyBkaXJ0eSBmbGFnCiAJICogc3luY2hyb25pemVkIHdpdGggcGVyLW1lbWNnIGRpcnR5IHBhZ2UgY291bnRlcnMuCiAJICovCiAJbmV3bHlfZGlydHkgPSAhZm9saW9fdGVzdF9zZXRfZGlydHkoZm9saW8pOwpAQCAtOTUyLDIzICYjNDM7OTYwLDIzIEBAIF9fZ2V0YmxrX3Nsb3coc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3QgYmxvY2ssCiB9CiAKIC8qCi0gKiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gZGlydHkgYnVmZmVycyBhbmQgZGlydHkgcGFnZXM6CiYjNDM7ICogVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGRpcnR5IGJ1ZmZlcnMgYW5kIGRpcnR5IGZvbGlvczoKICAqCi0gKiBXaGVuZXZlciBhIHBhZ2UgaGFzIGFueSBkaXJ0eSBidWZmZXJzLCB0aGUgcGFnZSYjMzk7cyBkaXJ0eSBiaXQgaXMgc2V0LCBhbmQKLSAqIHRoZSBwYWdlIGlzIHRhZ2dlZCBkaXJ0eSBpbiB0aGUgcGFnZSBjYWNoZS4KJiM0MzsgKiBXaGVuZXZlciBhIGZvbGlvIGhhcyBhbnkgZGlydHkgYnVmZmVycywgdGhlIGZvbGlvJiMzOTtzIGRpcnR5IGZsYWcgaXMgc2V0LCBhbmQKJiM0MzsgKiB0aGUgZm9saW8gaXMgdGFnZ2VkIGRpcnR5IGluIHRoZSBwYWdlIGNhY2hlLgogICoKICAqIEF0IGFsbCB0aW1lcywgdGhlIGRpcnRpbmVzcyBvZiB0aGUgYnVmZmVycyByZXByZXNlbnRzIHRoZSBkaXJ0aW5lc3Mgb2YKLSAqIHN1YnNlY3Rpb25zIG9mIHRoZSBwYWdlLiAgSWYgdGhlIHBhZ2UgaGFzIGJ1ZmZlcnMsIHRoZSBwYWdlIGRpcnR5IGJpdCBpcwomIzQzOyAqIHN1YnNlY3Rpb25zIG9mIHRoZSBmb2xpby4gIElmIHRoZSBmb2xpbyBoYXMgYnVmZmVycywgdGhlIGZvbGlvIGRpcnR5IGZsYWcgaXMKICAqIG1lcmVseSBhIGhpbnQgYWJvdXQgdGhlIHRydWUgZGlydHkgc3RhdGUuCiAgKgotICogV2hlbiBhIHBhZ2UgaXMgc2V0IGRpcnR5IGluIGl0cyBlbnRpcmV0eSwgYWxsIGl0cyBidWZmZXJzIGFyZSBtYXJrZWQgZGlydHkKLSAqIChpZiB0aGUgcGFnZSBoYXMgYnVmZmVycykuCiYjNDM7ICogV2hlbiBhIGZvbGlvIGlzIHNldCBkaXJ0eSBpbiBpdHMgZW50aXJldHksIGFsbCBpdHMgYnVmZmVycyBhcmUgbWFya2VkIGRpcnR5CiYjNDM7ICogKGlmIHRoZSBmb2xpbyBoYXMgYnVmZmVycykuCiAgKgotICogV2hlbiBhIGJ1ZmZlciBpcyBtYXJrZWQgZGlydHksIGl0cyBwYWdlIGlzIGRpcnRpZWQsIGJ1dCB0aGUgcGFnZSYjMzk7cyBvdGhlcgomIzQzOyAqIFdoZW4gYSBidWZmZXIgaXMgbWFya2VkIGRpcnR5LCBpdHMgZm9saW8gaXMgZGlydGllZCwgYnV0IHRoZSBmb2xpbyYjMzk7cyBvdGhlcgogICogYnVmZmVycyBhcmUgbm90LgogICoKICAqIEFsc28uICBXaGVuIGJsb2NrZGV2IGJ1ZmZlcnMgYXJlIGV4cGxpY2l0bHkgcmVhZCB3aXRoIGJyZWFkKCksIHRoZXkKLSAqIGluZGl2aWR1YWxseSBiZWNvbWUgdXB0b2RhdGUuICBCdXQgdGhlaXIgYmFja2luZyBwYWdlIHJlbWFpbnMgbm90CiYjNDM7ICogaW5kaXZpZHVhbGx5IGJlY29tZSB1cHRvZGF0ZS4gIEJ1dCB0aGVpciBiYWNraW5nIGZvbGlvIHJlbWFpbnMgbm90CiAgKiB1cHRvZGF0ZSAtIGV2ZW4gaWYgYWxsIG9mIGl0cyBidWZmZXJzIGFyZSB1cHRvZGF0ZS4gIEEgc3Vic2VxdWVudAogICogYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKCkgYWdhaW5zdCB0aGF0IGZvbGlvIHdpbGwgZGlzY292ZXIgYWxsIHRoZSB1cHRvZGF0ZQogICogYnVmZmVycywgd2lsbCBzZXQgdGhlIGZvbGlvIHVwdG9kYXRlIGFuZCB3aWxsIHBlcmZvcm0gbm8gSS9PLgpAQCAtOTc5LDcgJiM0Mzs5ODcsNyBAQCBfX2dldGJsa19zbG93KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLAogICogQGJoOiB0aGUgYnVmZmVyX2hlYWQgdG8gbWFyayBkaXJ0eQogICoKICAqIG1hcmtfYnVmZmVyX2RpcnR5KCkgd2lsbCBzZXQgdGhlIGRpcnR5IGJpdCBhZ2FpbnN0IHRoZSBidWZmZXIsIHRoZW4gc2V0Ci0gKiBpdHMgYmFja2luZyBwYWdlIGRpcnR5LCB0aGVuIHRhZyB0aGUgcGFnZSBhcyBkaXJ0eSBpbiB0aGUgcGFnZSBjYWNoZQomIzQzOyAqIGl0cyBiYWNraW5nIGZvbGlvIGRpcnR5LCB0aGVuIHRhZyB0aGUgZm9saW8gYXMgZGlydHkgaW4gdGhlIHBhZ2UgY2FjaGUKICAqIGFuZCB0aGVuIGF0dGFjaCB0aGUgYWRkcmVzc19zcGFjZSYjMzk7cyBpbm9kZSB0byBpdHMgc3VwZXJibG9jayYjMzk7cyBkaXJ0eQogICogaW5vZGUgbGlzdC4KICAqCkBAIC0xMDc0LDcgJiM0MzsxMDgyLDcgQEAgc3RhdGljIHZvaWQgYnVmZmVyX3NldF9jcnlwdG9fY3R4KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKIAogCS8qCiAJICogVGhlIGV4dDQgam91cm5hbCAoamJkMikgY2FuIHN1Ym1pdCBhIGJ1ZmZlcl9oZWFkIGl0IGRpcmVjdGx5IGNyZWF0ZWQKLQkgKiBmb3IgYSBub24tcGFnZWNhY2hlIHBhZ2UuICBmc2NyeXB0IGRvZXNuJiMzOTt0IGNhcmUgYWJvdXQgdGhlc2UuCiYjNDM7CSAqIGZvciBhIG5vbi1wYWdlY2FjaGUgZm9saW8uICBmc2NyeXB0IGRvZXNuJiMzOTt0IGNhcmUgYWJvdXQgdGhlc2UuCiAJICovCiAJaWYgKCFtYXBwaW5nKQogCQlyZXR1cm47CkBAIC0xMjE2LDcgJiM0MzsxMjI0LDcgQEAgc3RhdGljIHZvaWQgYmhfbHJ1X2luc3RhbGwoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIAogCS8qCiAJICogdGhlIHJlZmNvdW50IG9mIGJ1ZmZlcl9oZWFkIGluIGJoX2xydSBwcmV2ZW50cyBkcm9wcGluZyB0aGUKLQkgKiBhdHRhY2hlZCBwYWdlKGkuZS4sIHRyeV90b19mcmVlX2J1ZmZlcnMpIHNvIGl0IGNvdWxkIGNhdXNlCiYjNDM7CSAqIGF0dGFjaGVkIGZvbGlvIChpLmUuLCB0cnlfdG9fZnJlZV9idWZmZXJzKSBzbyBpdCBjb3VsZCBjYXVzZQogCSAqIGZhaWxpbmcgcGFnZSBtaWdyYXRpb24uCiAJICogU2tpcCBwdXR0aW5nIHVwY29taW5nIGJoIGludG8gYmhfbHJ1IHVudGlsIG1pZ3JhdGlvbiBpcyBkb25lLgogCSAqLwpAQCAtMTI4MCw3ICYjNDM7MTI4OCw3IEBAIGxvb2t1cF9iaF9scnUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3QgYmxvY2ssIHVuc2lnbmVkIHNpemUpCiAgKiBQZXJmb3JtIGEgcGFnZWNhY2hlIGxvb2t1cCBmb3IgdGhlIG1hdGNoaW5nIGJ1ZmZlci4gIElmIGl0JiMzOTtzIHRoZXJlLCByZWZyZXNoCiAgKiBpdCBpbiB0aGUgTFJVIGFuZCBtYXJrIGl0IGFzIGFjY2Vzc2VkLiAgSWYgaXQgaXMgbm90IHByZXNlbnQgdGhlbiByZXR1cm4KICAqIE5VTEwuIEF0b21pYyBjb250ZXh0IGNhbGxlcnMgbWF5IGFsc28gcmV0dXJuIE5VTEwgaWYgdGhlIGJ1ZmZlciBpcyBiZWluZwotICogbWlncmF0ZWQ7IHNpbWlsYXJseSB0aGUgcGFnZSBpcyBub3QgbWFya2VkIGFjY2Vzc2VkIGVpdGhlci4KJiM0MzsgKiBtaWdyYXRlZDsgc2ltaWxhcmx5IHRoZSBmb2xpbyBpcyBub3QgbWFya2VkIGFjY2Vzc2VkIGVpdGhlci4KICAqLwogc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqCiBmaW5kX2dldF9ibG9ja19jb21tb24oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3QgYmxvY2ssCkBAIC0xMjg5LDcgJiM0MzsxMjk3LDcgQEAgZmluZF9nZXRfYmxvY2tfY29tbW9uKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLAogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBsb29rdXBfYmhfbHJ1KGJkZXYsIGJsb2NrLCBzaXplKTsKIAogCWlmIChiaCA9PSBOVUxMKSB7Ci0JCS8qIF9fZmluZF9nZXRfYmxvY2tfc2xvdyB3aWxsIG1hcmsgdGhlIHBhZ2UgYWNjZXNzZWQgKi8KJiM0MzsJCS8qIF9fZmluZF9nZXRfYmxvY2tfc2xvdyB3aWxsIG1hcmsgdGhlIGZvbGlvIGFjY2Vzc2VkICovCiAJCWJoID0gX19maW5kX2dldF9ibG9ja19zbG93KGJkZXYsIGJsb2NrLCBhdG9taWMpOwogCQlpZiAoYmgpCiAJCQliaF9scnVfaW5zdGFsbChiaCk7CkBAIC0xNDc1LDE1ICYjNDM7MTQ4MywxNCBAQCB2b2lkIGZvbGlvX3NldF9iaChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogfQogRVhQT1JUX1NZTUJPTChmb2xpb19zZXRfYmgpOwogCi0vKgotICogQ2FsbGVkIHdoZW4gdHJ1bmNhdGluZyBhIGJ1ZmZlciBvbiBhIHBhZ2UgY29tcGxldGVseS4KLSAqLwotCiAvKiBCaXRzIHRoYXQgYXJlIGNsZWFyZWQgZHVyaW5nIGFuIGludmFsaWRhdGUgKi8KICNkZWZpbmUgQlVGRkVSX0ZMQUdTX0RJU0NBUkQgXAogCSgxICZsdDsmbHQ7IEJIX01hcHBlZCB8IDEgJmx0OyZsdDsgQkhfTmV3IHwgMSAmbHQ7Jmx0OyBCSF9SZXEgfCBcCiAJIDEgJmx0OyZsdDsgQkhfRGVsYXkgfCAxICZsdDsmbHQ7IEJIX1Vud3JpdHRlbikKIAomIzQzOy8qCiYjNDM7ICogQ2FsbGVkIHdoZW4gdHJ1bmNhdGluZyBhIGJ1ZmZlciBvbiBhIGZvbGlvIGNvbXBsZXRlbHkuCiYjNDM7ICovCiBzdGF0aWMgdm9pZCBkaXNjYXJkX2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaCkKIHsKIAl1bnNpZ25lZCBsb25nIGJfc3RhdGU7CkBAIC0xNjExLDkgJiM0MzsxNjE4LDcgQEAgRVhQT1JUX1NZTUJPTChjcmVhdGVfZW1wdHlfYnVmZmVycyk7CiAgKiBtb21lbnQgd2hlbiBzb21ldGhpbmcgd2lsbCBleHBsaWNpdGx5IG1hcmsgdGhlIGJ1ZmZlciBkaXJ0eSAoaG9wZWZ1bGx5IHRoYXQKICAqIHdpbGwgbm90IGhhcHBlbiB1bnRpbCB3ZSB3aWxsIGZyZWUgdGhhdCBibG9jayA7LSkgV2UgZG9uJiMzOTt0IGV2ZW4gbmVlZCB0byBtYXJrCiAgKiBpdCBub3QtdXB0b2RhdGUgLSBub2JvZHkgY2FuIGV4cGVjdCBhbnl0aGluZyBmcm9tIGEgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlcgotICogYW55d2F5LiBXZSB1c2VkIHRvIHVzZSB1bm1hcF9idWZmZXIoKSBmb3Igc3VjaCBpbnZhbGlkYXRpb24sIGJ1dCB0aGF0IHdhcwotICogd3JvbmcuIFdlIGRlZmluaXRlbHkgZG9uJiMzOTt0IHdhbnQgdG8gbWFyayB0aGUgYWxpYXMgdW5tYXBwZWQsIGZvciBleGFtcGxlIC0gaXQKLSAqIHdvdWxkIGNvbmZ1c2UgYW55b25lIHdobyBtaWdodCBwaWNrIGl0IHdpdGggYnJlYWQoKSBhZnRlcndhcmRzLi4uCiYjNDM7ICogYW55d2F5LgogICoKICAqIEFsc28uLiAgTm90ZSB0aGF0IGJmb3JnZXQoKSBkb2VzbiYjMzk7dCBsb2NrIHRoZSBidWZmZXIuICBTbyB0aGVyZSBjYW4gYmUKICAqIHdyaXRlb3V0IEkvTyBnb2luZyBvbiBhZ2FpbnN0IHJlY2VudGx5LWZyZWVkIGJ1ZmZlcnMuICBXZSBkb24mIzM5O3Qgd2FpdCBvbiB0aGF0CkBAIC0xNjQ5LDcgJiM0MzsxNjU0LDcgQEAgdm9pZCBjbGVhbl9iZGV2X2FsaWFzZXMoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3QgYmxvY2ssIHNlY3Rvcl90IGxlbikKIAkJCS8qIFJlY2hlY2sgd2hlbiB0aGUgZm9saW8gaXMgbG9ja2VkIHdoaWNoIHBpbnMgYmhzICovCiAJCQloZWFkID0gZm9saW9fYnVmZmVycyhmb2xpbyk7CiAJCQlpZiAoIWhlYWQpCi0JCQkJZ290byB1bmxvY2tfcGFnZTsKJiM0MzsJCQkJZ290byB1bmxvY2tfZm9saW87CiAJCQliaCA9IGhlYWQ7CiAJCQlkbyB7CiAJCQkJaWYgKCFidWZmZXJfbWFwcGVkKGJoKSB8fCAoYmgtJmd0O2JfYmxvY2tuciAmbHQ7IGJsb2NrKSkKQEAgLTE2NjIsNyAmIzQzOzE2NjcsNyBAQCB2b2lkIGNsZWFuX2JkZXZfYWxpYXNlcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBibG9jaywgc2VjdG9yX3QgbGVuKQogbmV4dDoKIAkJCQliaCA9IGJoLSZndDtiX3RoaXNfcGFnZTsKIAkJCX0gd2hpbGUgKGJoICE9IGhlYWQpOwotdW5sb2NrX3BhZ2U6CiYjNDM7dW5sb2NrX2ZvbGlvOgogCQkJZm9saW9fdW5sb2NrKGZvbGlvKTsKIAkJfQogCQlmb2xpb19iYXRjaF9yZWxlYXNlKCZhbXA7ZmJhdGNoKTsKQEAgLTE3MTAsNyAmIzQzOzE3MTUsNyBAQCBzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpmb2xpb19jcmVhdGVfYnVmZmVycyhzdHJ1Y3QgZm9saW8gKmZvbGlvLAogICoKICAqIElmIGJsb2NrX3dyaXRlX2Z1bGxfZm9saW8oKSBpcyBjYWxsZWQgZm9yIHJlZ3VsYXIgd3JpdGViYWNrCiAgKiAod2JjLSZndDtzeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FKSB0aGVuIGl0IHdpbGwgcmVkaXJ0eSBhIGZvbGlvIHdoaWNoCi0gKiBoYXMgYSBsb2NrZWQgYnVmZmVyLiAgIFRoaXMgb25seSBjYW4gaGFwcGVuIGlmIHNvbWVvbmUgaGFzIHdyaXR0ZW4KJiM0MzsgKiBoYXMgYSBsb2NrZWQgYnVmZmVyLiAgIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGlmIHNvbWVvbmUgaGFzIHdyaXR0ZW4KICAqIHRoZSBidWZmZXIgZGlyZWN0bHksIHdpdGggYmhfc3VibWl0KCkuICBBdCB0aGUgYWRkcmVzc19zcGFjZSBsZXZlbAogICogdGhlIGZvbGlvIHdyaXRlYmFjayBmbGFnIHByZXZlbnRzIHRoaXMgY29udGVudGlvbiBmcm9tIG9jY3VycmluZy4KICAqCkBAIC0yMjEzLDkgJiM0MzsyMjE4LDkgQEAgaW50IGdlbmVyaWNfd3JpdGVfZW5kKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJaWYgKG9sZF9zaXplICZsdDsgcG9zKQogCQlwYWdlY2FjaGVfaXNpemVfZXh0ZW5kZWQoaW5vZGUsIG9sZF9zaXplLCBwb3MpOwogCS8qCi0JICogRG9uJiMzOTt0IG1hcmsgdGhlIGlub2RlIGRpcnR5IHVuZGVyIHBhZ2UgbG9jay4gRmlyc3QsIGl0IHVubmVjZXNzYXJpbHkKLQkgKiBtYWtlcyB0aGUgaG9sZGluZyB0aW1lIG9mIHBhZ2UgbG9jayBsb25nZXIuIFNlY29uZCwgaXQgZm9yY2VzIGxvY2sKLQkgKiBvcmRlcmluZyBvZiBwYWdlIGxvY2sgYW5kIHRyYW5zYWN0aW9uIHN0YXJ0IGZvciBqb3VybmFsaW5nCiYjNDM7CSAqIERvbiYjMzk7dCBtYXJrIHRoZSBpbm9kZSBkaXJ0eSB1bmRlciBmb2xpbyBsb2NrLiBGaXJzdCwgaXQgdW5uZWNlc3NhcmlseQomIzQzOwkgKiBtYWtlcyB0aGUgaG9sZGluZyB0aW1lIG9mIGZvbGlvIGxvY2sgbG9uZ2VyLiBTZWNvbmQsIGl0IGZvcmNlcyBsb2NrCiYjNDM7CSAqIG9yZGVyaW5nIG9mIGZvbGlvIGxvY2sgYW5kIHRyYW5zYWN0aW9uIHN0YXJ0IGZvciBqb3VybmFsaW5nCiAJICogZmlsZXN5c3RlbXMuCiAJICovCiAJaWYgKGlfc2l6ZV9jaGFuZ2VkKQpAQCAtMjM0MSw3ICYjNDM7MjM0Niw3IEBAIGludCBibG9ja19yZWFkX2Z1bGxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2V0X2Jsb2NrX3QgKmdldF9ibG9jaykKIAkJICogQkhfQXN5bmNfUmVhZCB0ZWxscyBlbmRfYnVmZmVyX2FzeW5jX3JlYWQoKSB0aGF0IHRoaXMKIAkJICogYnVmZmVyIGlzIG5vdCB1bmRlciBhc3luYyBJL08uCiAJCSAqCi0JCSAqIFRoZSBmb2xpbyBjb21lcyB1bmxvY2tlZCB3aGVuIGl0IGhhcyBubyBsb2NrZWQKJiM0MzsJCSAqIFRoZSBmb2xpbyBpcyB1bmxvY2tlZCB3aGVuIGl0IGhhcyBubyBsb2NrZWQKIAkJICogYnVmZmVyX2FzeW5jIGJ1ZmZlcnMgbGVmdC4KIAkJICoKIAkJICogVGhlIGZvbGlvIGxvY2sgcHJldmVudHMgYW55b25lIHN0YXJ0aW5nIG5ldyBhc3luYwpAQCAtMjQ1MSw3ICYjNDM7MjQ1Niw3IEBAIHN0YXRpYyBpbnQgY29udF9leHBhbmRfemVybyhjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCiAJCX0KIAl9CiAKLQkvKiBwYWdlIGNvdmVycyB0aGUgYm91bmRhcnksIGZpbmQgdGhlIGJvdW5kYXJ5IG9mZnNldCAqLwomIzQzOwkvKiBmb2xpbyBjcm9zc2VzIHRoZSBib3VuZGFyeSwgZmluZCB0aGUgYm91bmRhcnkgb2Zmc2V0ICovCiAJaWYgKGluZGV4ID09IGN1cmlkeCkgewogCQl6ZXJvZnJvbSA9IGN1cnBvcyAmYW1wOyB+UEFHRV9NQVNLOwogCQkvKiBpZiB3ZSB3aWxsIGV4cGFuZCB0aGUgdGhpbmcgbGFzdCBibG9jayB3aWxsIGJlIGZpbGxlZCAqLwpAQCAtMjUwOSwxOCAmIzQzOzI1MTQsMTggQEAgRVhQT1JUX1NZTUJPTChjb250X3dyaXRlX2JlZ2luKTsKIAogLyoKICAqIGJsb2NrX3BhZ2VfbWt3cml0ZSgpIGlzIG5vdCBhbGxvd2VkIHRvIGNoYW5nZSB0aGUgZmlsZSBzaXplIGFzIGl0IGdldHMKLSAqIGNhbGxlZCBmcm9tIGEgcGFnZSBmYXVsdCBoYW5kbGVyIHdoZW4gYSBwYWdlIGlzIGZpcnN0IGRpcnRpZWQuIEhlbmNlIHdlIG11c3QKLSAqIGJlIGNhcmVmdWwgdG8gY2hlY2sgZm9yIEVPRiBjb25kaXRpb25zIGhlcmUuIFdlIHNldCB0aGUgcGFnZSB1cCBjb3JyZWN0bHkKLSAqIGZvciBhIHdyaXR0ZW4gcGFnZSB3aGljaCBtZWFucyB3ZSBnZXQgRU5PU1BDIGNoZWNraW5nIHdoZW4gd3JpdGluZyBpbnRvCiYjNDM7ICogY2FsbGVkIGZyb20gYSBwYWdlIGZhdWx0IGhhbmRsZXIgd2hlbiBhIGZvbGlvIGlzIGZpcnN0IGRpcnRpZWQuIEhlbmNlIHdlIG11c3QKJiM0MzsgKiBiZSBjYXJlZnVsIHRvIGNoZWNrIGZvciBFT0YgY29uZGl0aW9ucyBoZXJlLiBXZSBzZXQgdGhlIGZvbGlvIHVwIGNvcnJlY3RseQomIzQzOyAqIGZvciBhIHdyaXR0ZW4gZm9saW8gd2hpY2ggbWVhbnMgd2UgZ2V0IEVOT1NQQyBjaGVja2luZyB3aGVuIHdyaXRpbmcgaW50bwogICogaG9sZXMgYW5kIGNvcnJlY3QgZGVsYWxsb2MgYW5kIHVud3JpdHRlbiBleHRlbnQgbWFwcGluZyBvbiBmaWxlc3lzdGVtcyB0aGF0CiAgKiBzdXBwb3J0IHRoZXNlIGZlYXR1cmVzLgogICoKICAqIFdlIGFyZSBub3QgYWxsb3dlZCB0byB0YWtlIHRoZSBpX3J3c2VtIGhlcmUgc28gd2UgaGF2ZSB0byBwbGF5IGdhbWVzIHRvCi0gKiBwcm90ZWN0IGFnYWluc3QgdHJ1bmNhdGUgcmFjZXMgYXMgdGhlIHBhZ2UgY291bGQgbm93IGJlIGJleW9uZCBFT0YuICBCZWNhdXNlCi0gKiB0cnVuY2F0ZSB3cml0ZXMgdGhlIGlub2RlIHNpemUgYmVmb3JlIHJlbW92aW5nIHBhZ2VzLCBvbmNlIHdlIGhhdmUgdGhlCi0gKiBwYWdlIGxvY2sgd2UgY2FuIGRldGVybWluZSBzYWZlbHkgaWYgdGhlIHBhZ2UgaXMgYmV5b25kIEVPRi4gSWYgaXQgaXMgbm90Ci0gKiBiZXlvbmQgRU9GLCB0aGVuIHRoZSBwYWdlIGlzIGd1YXJhbnRlZWQgc2FmZSBhZ2FpbnN0IHRydW5jYXRpb24gdW50aWwgd2UKLSAqIHVubG9jayB0aGUgcGFnZS4KJiM0MzsgKiBwcm90ZWN0IGFnYWluc3QgdHJ1bmNhdGUgcmFjZXMgYXMgdGhlIGZvbGlvIGNvdWxkIG5vdyBiZSBiZXlvbmQgRU9GLiAgQmVjYXVzZQomIzQzOyAqIHRydW5jYXRlIHdyaXRlcyB0aGUgaW5vZGUgc2l6ZSBiZWZvcmUgcmVtb3ZpbmcgZm9saW9zLCBvbmNlIHdlIGhhdmUgdGhlCiYjNDM7ICogZm9saW8gbG9jayB3ZSBjYW4gZGV0ZXJtaW5lIHNhZmVseSBpZiB0aGUgZm9saW8gaXMgYmV5b25kIEVPRi4gSWYgaXQgaXMgbm90CiYjNDM7ICogYmV5b25kIEVPRiwgdGhlbiB0aGUgZm9saW8gaXMgZ3VhcmFudGVlZCBzYWZlIGFnYWluc3QgdHJ1bmNhdGlvbiB1bnRpbCB3ZQomIzQzOyAqIHVubG9jayB0aGUgZm9saW8uCiAgKgogICogRGlyZWN0IGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbiBzaG91bGQgcHJvdGVjdCBhZ2FpbnN0IGZpbGVzeXN0ZW0gZnJlZXppbmcKICAqIHVzaW5nIHNiX3N0YXJ0X3BhZ2VmYXVsdCgpIC0gc2JfZW5kX3BhZ2VmYXVsdCgpIGZ1bmN0aW9ucy4KQEAgLTI1MzgsNyAmIzQzOzI1NDMsNyBAQCBpbnQgYmxvY2tfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwKIAlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwogCWlmICgoZm9saW8tJmd0O21hcHBpbmcgIT0gaW5vZGUtJmd0O2lfbWFwcGluZykgfHwKIAkgICAgKGZvbGlvX3Bvcyhmb2xpbykgJmd0Oz0gc2l6ZSkpIHsKLQkJLyogV2Ugb3ZlcmxvYWQgRUZBVUxUIHRvIG1lYW4gcGFnZSBnb3QgdHJ1bmNhdGVkICovCiYjNDM7CQkvKiBXZSBvdmVybG9hZCBFRkFVTFQgdG8gbWVhbiBmb2xpbyBnb3QgdHJ1bmNhdGVkICovCiAJCXJldCA9IC1FRkFVTFQ7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmggYi9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgKaW5kZXggZmQyYzcxMTVjMDU0Mi4uMWQ1NWY3NzcwY2FkMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaApAQCAtMzM4LDIwICYjNDM7MzM4LDU4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBiZm9yZ2V0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiAJCV9fYmZvcmdldChiaCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGJ1ZmZlcl9oZWFkICoKLXNiX2JyZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHNlY3Rvcl90IGJsb2NrKQomIzQzOy8qKgomIzQzOyAqIHNiX2JyZWFkIC0gUmVhZCBhIGJsb2NrLgomIzQzOyAqIEBzYjogVGhlIHN1cGVyYmxvY2sgdG8gcmVhZCBmcm9tLgomIzQzOyAqIEBibG9jazogQmxvY2sgbnVtYmVyIGluIHVuaXRzIG9mIGJsb2NrIHNpemUuCiYjNDM7ICoKJiM0MzsgKiBSZWFkIGEgc3BlY2lmaWVkIGJsb2NrLCBhbmQgcmV0dXJuIHRoZSBidWZmZXIgaGVhZCB0aGF0IHJlZmVycwomIzQzOyAqIHRvIGl0LiAgVGhlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgZnJvbSB0aGUgbW92YWJsZSBhcmVhIHNvIHRoYXQgaXQgY2FuCiYjNDM7ICogYmUgbWlncmF0ZWQuICBUaGUgcmV0dXJuZWQgYnVmZmVyIGhlYWQgaGFzIGl0cyByZWZjb3VudCBpbmNyZWFzZWQuCiYjNDM7ICogVGhlIGNhbGxlciBzaG91bGQgY2FsbCBicmVsc2UoKSB3aGVuIGl0IGhhcyBmaW5pc2hlZCB3aXRoIHRoZSBidWZmZXIuCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBNYXkgc2xlZXAgd2FpdGluZyBmb3IgSS9PLgomIzQzOyAqIFJldHVybjogTlVMTCBpZiB0aGUgYmxvY2sgd2FzIHVucmVhZGFibGUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZQomIzQzO3N0cnVjdCBidWZmZXJfaGVhZCAqc2JfYnJlYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc2VjdG9yX3QgYmxvY2spCiB7CiAJcmV0dXJuIF9fYnJlYWRfZ2ZwKHNiLSZndDtzX2JkZXYsIGJsb2NrLCBzYi0mZ3Q7c19ibG9ja3NpemUsIF9fR0ZQX01PVkFCTEUpOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBidWZmZXJfaGVhZCAqCi1zYl9icmVhZF91bm1vdmFibGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc2VjdG9yX3QgYmxvY2spCiYjNDM7LyoqCiYjNDM7ICogc2JfYnJlYWRfdW5tb3ZhYmxlIC0gUmVhZCBhIGJsb2NrLgomIzQzOyAqIEBzYjogVGhlIHN1cGVyYmxvY2sgdG8gcmVhZCBmcm9tLgomIzQzOyAqIEBibG9jazogQmxvY2sgbnVtYmVyIGluIHVuaXRzIG9mIGJsb2NrIHNpemUuCiYjNDM7ICoKJiM0MzsgKiBSZWFkIGEgc3BlY2lmaWVkIGJsb2NrLCBhbmQgcmV0dXJuIHRoZSBidWZmZXIgaGVhZCB0aGF0IHJlZmVycyB0byBpdC4KJiM0MzsgKiBUaGUgbWVtb3J5IGlzIGFsbG9jYXRlZCBmcm9tIHRoZSB1bm1vdmFibGUgYXJlYSBzbyB0aGF0IHBvaW50ZXJzIGludG8KJiM0MzsgKiBpdCByZW1haW4gdmFsaWQgYWZ0ZXIgY29tcGFjdGlvbiBydW5zLiAgVGhlIHJldHVybmVkIGJ1ZmZlciBoZWFkIGhhcwomIzQzOyAqIGl0cyByZWZjb3VudCBpbmNyZWFzZWQuICBUaGUgY2FsbGVyIHNob3VsZCBjYWxsIGJyZWxzZSgpIHdoZW4gaXQgaGFzCiYjNDM7ICogZmluaXNoZWQgd2l0aCB0aGUgYnVmZmVyLgomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogTWF5IHNsZWVwIHdhaXRpbmcgZm9yIEkvTy4KJiM0MzsgKiBSZXR1cm46IE5VTEwgaWYgdGhlIGJsb2NrIHdhcyB1bnJlYWRhYmxlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUKJiM0MztzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNiX2JyZWFkX3VubW92YWJsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzZWN0b3JfdCBibG9jaykKIHsKIAlyZXR1cm4gX19icmVhZF9nZnAoc2ItJmd0O3NfYmRldiwgYmxvY2ssIHNiLSZndDtzX2Jsb2Nrc2l6ZSwgMCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotc2JfYnJlYWRhaGVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzZWN0b3JfdCBibG9jaykKJiM0MzsvKioKJiM0MzsgKiBzYl9icmVhZGFoZWFkIC0gU3RhcnQgcmVhZGFoZWFkLgomIzQzOyAqIEBzYjogU3VwZXJibG9jayBpZGVudGlmeWluZyB0aGUgYmxvY2sgZGV2aWNlLgomIzQzOyAqIEBibG9jazogVGhlIGJsb2NrIHRvIHJlYWQuCiYjNDM7ICoKJiM0MzsgKiBSZWFkIHRoaXMgYmxvY2suICBUaGUgSS9PIHdpbGwgYmUgZmxhZ2dlZCBhcyBiZWluZyByZWFkYWhlYWQgcmF0aGVyCiYjNDM7ICogdGhhbiBpbW1lZGlhdGUgcmVhZCwgYnV0ICh1bmxpa2UgdGhlIHBhZ2UgY2FjaGUpLCBzdXJyb3VuZGluZyBibG9ja3MKJiM0MzsgKiB3aWxsIG5vdCBiZSByZWFkLgomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogTWF5IHNsZWVwIGluIG9yZGVyIHRvIGFsbG9jYXRlIG1lbW9yeS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lCiYjNDM7dm9pZCBzYl9icmVhZGFoZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHNlY3Rvcl90IGJsb2NrKQogewogCV9fYnJlYWRhaGVhZChzYi0mZ3Q7c19iZGV2LCBibG9jaywgc2ItJmd0O3NfYmxvY2tzaXplKTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk0MwoJCQkJCQkJb3V0cHV0OiA3MQoJCQkJCQkJdGhvdWdodHM6IDY4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogV29ydGhGdXp6aW5nIEV2YWx1YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBmb2N1cyBpcyB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgcG90ZW50aWFsIGltcGFjdC4gRmlyc3QsIEkgbm90ZSB0aGUgY2hhbmdlZCBmaWxlczogYERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3RgLCBgZnMvYnVmZmVyLmNgLCBhbmQgYGluY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaGAuIFRoYXQgZ2l2ZXMgbWUgYSBnZW5lcmFsIGFyZWEgdG8gbG9vayBpbnRvLgoKTm93IGZvciB0aGUgZGV0YWlsZWQgZGlmZi4gSSBzZWUgdGhhdCB0aGUgZG9jdW1lbnRhdGlvbiBmaWxlIGhhcyBhIHNpbXBsZSBkb2MgdXBkYXRlLCByZW5hbWluZyBgbWFya19idWZmZXJfZGlydHlfaW5vZGUoKWAgdG8gYG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eSgpYC4gIEluIGBmcy9idWZmZXIuY2AsIGl0JiMzOTtzIHByaW1hcmlseSBjb21tZW50IHVwZGF0ZXMsIHJlcGxhY2luZyAmIzM0O3BhZ2UmIzM0OyB3aXRoICYjMzQ7Zm9saW8sJiMzNDsgYW5kIHRoZSBzYW1lIGZ1bmN0aW9uIG5hbWUgY2hhbmdlLCBpbmNsdWRpbmcgcmVuYW1pbmcgYSBsYWJlbCBmcm9tIGB1bmxvY2tfcGFnZWAgdG8gYHVubG9ja19mb2xpb2AgaW4gYGNsZWFuX2JkZXZfYWxpYXNlc2AuIFRoZXJlIGFsc28gbG9va3MgbGlrZSBzb21lIG5ldyBrZXJuZWxkb2MgY29tbWVudHMgZm9yIGBtbWJfbWFya19idWZmZXJfZGlydHlgIGFyZSBwcmVzZW50LiAgT3ZlciBpbiBgaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oYCwgdGhlcmUgYXJlIGtlcm5lbGRvYyBhZGRpdGlvbnMgZm9yIGBzYl9icmVhZGAsIGBzYl9icmVhZF91bm1vdmFibGVgLCBhbmQgYHNiX2JyZWFkYWhlYWRgLCBhbG9uZyB3aXRoIHNvbWUgdmVyeSBtaW5vciBmb3JtYXR0aW5nIGFkanVzdG1lbnRzIHRvIGZ1bmN0aW9uIHNpZ25hdHVyZXMgKGp1c3QgbGluZSB3cmFwcGluZywgbm8gYWN0dWFsIGNvZGUgY2hhbmdlcykuCgpDcnVjaWFsbHksIEkgbmVlZCB0byBjb25maXJtIHRoZXJlJiMzOTtzIG5vIGZ1bmN0aW9uYWwgY2hhbmdlLiAgSSYjMzk7ZCBsb3ZlIHRvIGdyYWIgdGhlIHNwZWNpZmljIGNvbW1pdCBkaWZmIChjOGU3MmU2ZjJmYjZiMTRhOGFmODRlNGIzZTkwZWE4MjdkMzE4ZjEwKSBpZiBwb3NzaWJsZSwgYnV0IHJlYWRpbmcgdGhlIGRpZmYgZGlyZWN0bHkgY29uZmlybXMgbXkgc3VzcGljaW9uOiAqYWxsKiB0aGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLCBjb21tZW50IG1vZGlmaWNhdGlvbnMsIGtlcm5lbGRvYywgdGhlIGxhYmVsIHJlbmFtZSAod2hpY2ggaXMgcHVyZWx5IGNvc21ldGljKSwgYW5kIGZvcm1hdHRpbmcgdHdlYWtzLiBBYnNvbHV0ZWx5IG5vIGxvZ2ljIGNoYW5nZXMuCgpOb3csIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBpbnN0cnVjdGlvbnMsIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCB3YXJyYW50cyBmdXp6aW5nLiBUaGUgY3JpdGVyaWEgY2xlYXJseSBzdGF0ZSB0aGF0IGlmIHRoZSBwYXRjaCBjb250YWlucyBvbmx5IGRvY3VtZW50YXRpb24sIGNvZGUgY29tbWVudHMsIG9yIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIGxpa2UgbG9nZ2luZywgaXQmIzM5O3Mgbm90IHdvcnRoIGZ1enppbmcuIFRoYXQgY292ZXJzIGFsbCB0aGUgY2hhbmdlcyBJJiMzOTt2ZSBvYnNlcnZlZDogZG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIGFuZCB0aGUgbGFiZWwvZm9ybWF0dGluZyBjaGFuZ2VzLgoKVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIGNsZWFyOiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIG5ldyBjb2RlIHBhdGhzIG9yIG1vZGlmaWNhdGlvbnMgdG8gZXhpc3RpbmcgZXhlY3V0aW9uIGxvZ2ljLCB0aGVyZWZvcmUgZnV6emluZyBpdCB3b3VsZCBiZSBhIHdhc3RlIG9mIHJlc291cmNlcy4KCkZpbmFsbHksIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBzZXR0aW5nIHRoZSBwcm9wZXIgdmFsdWVzOgotICAgYFdvcnRoRnV6emluZ2A6IGBmYWxzZWAKLSAgIGBGb2N1c1N5bWJvbHNgOiBgW11gIChlbXB0eSBsaXN0LCBhcyB0aGVyZSBhcmUgbm8gc3ltYm9scyB0byBmb2N1cyBvbikKLSAgIGBFbmFibGVDb25maWdzYDogYFtdYCAoZW1wdHkgbGlzdCwgYXMgdGhlcmUgYXJlIG5vIGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZSkKLSAgIGBSZWFzb25pbmdgOiAmIzM0O1RoZSBwYXRjaCBjb250YWlucyBvbmx5IGRvY3VtZW50YXRpb24sIGNvZGUgY29tbWVudHMsIGtlcm5lbGRvYywgbGFiZWwgcmVuYW1pbmcgYW5kIGZvcm1hdHRpbmcgY2hhbmdlcy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcy4mIzM0OwoKVGltZSB0byB2ZXJpZnkgd2l0aCB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBjb250YWlucyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIGtlcm5lbGRvYyBhZGRpdGlvbnMsIGNvbW1lbnQgY29udmVyc2lvbnMgKGZyb20gcGFnZSB0byBmb2xpbyB0ZXJtaW5vbG9neSksIGFuZCBhIGxhYmVsIHJlbmFtZSAodW5sb2NrX3BhZ2UgdG8gdW5sb2NrX2ZvbGlvKSB3aXRoIG5vIGZ1bmN0aW9uYWwgY29kZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBjb250YWlucyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIGtlcm5lbGRvYyBhZGRpdGlvbnMsIGNvbW1lbnQgY29udmVyc2lvbnMgKGZyb20gcGFnZSB0byBmb2xpbyB0ZXJtaW5vbG9neSksIGFuZCBhIGxhYmVsIHJlbmFtZSAodW5sb2NrX3BhZ2UgdG8gdW5sb2NrX2ZvbGlvKSB3aXRoIG5vIGZ1bmN0aW9uYWwgY29kZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMToxODwvdGQ+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+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjE6MTg6MjkuMjU0MDMyMDkxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg4MzcyMDkxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgY29udGFpbnMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLCBrZXJuZWxkb2MgYWRkaXRpb25zLCBjb21tZW50IGNvbnZlcnNpb25zIChmcm9tIHBhZ2UgdG8gZm9saW8gdGVybWlub2xvZ3kpLCBhbmQgYSBsYWJlbCByZW5hbWUgKHVubG9ja19wYWdlIHRvIHVubG9ja19mb2xpbykgd2l0aCBubyBmdW5jdGlvbmFsIGNvZGUgY2hhbmdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIxOjE4OjI5LjI1NDAzNjQzMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA0NDQyMDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzhlNzJlNmYyZmI2YjE0YThhZjg0ZTRiM2U5MGVhODI3ZDMxOGYxMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAyOCAyMToxODoyOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdFxcbmluZGV4IDYwODgwZWIwYzQ5ZDEuLmRlOTZiNjc0NTYwMGIgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3RcXG5AQCAtMzQ4LDcgKzM0OCw3IEBAIHNpbXBseSBvZiByZXR1cm4gMS4gIE5vdGUgdGhhdCBhbGwgYWN0dWFsIGV2aWN0aW9uIHdvcmsgaXMgZG9uZSBieSBjYWxsZXIgYWZ0ZXJcXG4gQXMgYmVmb3JlLCBjbGVhcl9pbm9kZSgpIG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBvbiBlYWNoIGNhbGwgb2ZcXG4gLVxcdTAwM2VldmljdF9pbm9kZSgpIChhcyBpdCB1c2VkIHRvIGJlIGZvciBlYWNoIGNhbGwgb2YgLVxcdTAwM2VkZWxldGVfaW5vZGUoKSkuICBVbmxpa2VcXG4gYmVmb3JlLCBpZiB5b3UgYXJlIHVzaW5nIGlub2RlLWFzc29jaWF0ZWQgbWV0YWRhdGEgYnVmZmVycyAoaS5lLlxcbi1tYXJrX2J1ZmZlcl9kaXJ0eV9pbm9kZSgpKSwgaXQncyB5b3VyIHJlc3BvbnNpYmlsaXR5IHRvIGNhbGxcXG4rbW1iX21hcmtfYnVmZmVyX2RpcnR5KCkpLCBpdCdzIHlvdXIgcmVzcG9uc2liaWxpdHkgdG8gY2FsbFxcbiBpbnZhbGlkYXRlX2lub2RlX2J1ZmZlcnMoKSBiZWZvcmUgY2xlYXJfaW5vZGUoKS5cXG4gXFxuIE5PVEU6IGNoZWNraW5nIGlfbmxpbmsgaW4gdGhlIGJlZ2lubmluZyBvZiAtXFx1MDAzZXdyaXRlX2lub2RlKCkgYW5kIGJhaWxpbmcgb3V0XFxuZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmNcXG5pbmRleCBlZDk2NmZhNzNiMWJhLi5jOTM0MmFlYjhjZGY2IDEwMDY0NFxcbi0tLSBhL2ZzL2J1ZmZlci5jXFxuKysrIGIvZnMvYnVmZmVyLmNcXG5AQCAtMjY1LDcgKzI2NSw3IEBAIF9fZmluZF9nZXRfYmxvY2tfc2xvdyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBibG9jaywgYm9vbCBhdG9taWMpXFxuIFxcdFxcdGJoID0gYmgtXFx1MDAzZWJfdGhpc19wYWdlO1xcbiBcXHR9IHdoaWxlIChiaCAhPSBoZWFkKTtcXG4gXFxuLVxcdC8qIHdlIG1pZ2h0IGJlIGhlcmUgYmVjYXVzZSBzb21lIG9mIHRoZSBidWZmZXJzIG9uIHRoaXMgcGFnZSBhcmVcXG4rXFx0Lyogd2UgbWlnaHQgYmUgaGVyZSBiZWNhdXNlIHNvbWUgb2YgdGhlIGJ1ZmZlcnMgb24gdGhpcyBmb2xpbyBhcmVcXG4gXFx0ICogbm90IG1hcHBlZC4gIFRoaXMgaXMgZHVlIHRvIHZhcmlvdXMgcmFjZXMgYmV0d2VlblxcbiBcXHQgKiBmaWxlIGlvIG9uIHRoZSBibG9jayBkZXZpY2UgYW5kIGdldGJsay4gIEl0IGdldHMgZGVhbHQgd2l0aFxcbiBcXHQgKiBlbHNld2hlcmUsIGRvbid0IGJ1ZmZlcl9lcnJvciBpZiB3ZSBoYWQgc29tZSB1bm1hcHBlZCBidWZmZXJzXFxuQEAgLTMxMSw3ICszMTEsNyBAQCBzdGF0aWMgdm9pZCBlbmRfYnVmZmVyX2FzeW5jX3JlYWQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHVwdG9kYXRlKVxcbiBcXHQvKlxcbiBcXHQgKiBCZSBfdmVyeV8gY2FyZWZ1bCBmcm9tIGhlcmUgb24uIEJhZCB0aGluZ3MgY2FuIGhhcHBlbiBpZlxcbiBcXHQgKiB0d28gYnVmZmVyIGhlYWRzIGVuZCBJTyBhdCBhbG1vc3QgdGhlIHNhbWUgdGltZSBhbmQgYm90aFxcbi1cXHQgKiBkZWNpZGUgdGhhdCB0aGUgcGFnZSBpcyBub3cgY29tcGxldGVseSBkb25lLlxcbitcXHQgKiBkZWNpZGUgdGhhdCB0aGUgZm9saW8gaXMgbm93IGNvbXBsZXRlbHkgZG9uZS5cXG4gXFx0ICovXFxuIFxcdGZpcnN0ID0gZm9saW9fYnVmZmVycyhmb2xpbyk7XFxuIFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZmaXJzdC1cXHUwMDNlYl91cHRvZGF0ZV9sb2NrLCBmbGFncyk7XFxuQEAgLTUyMCw4ICs1MjAsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChtbWJfaGFzX2J1ZmZlcnMpO1xcbiAgKlxcbiAgKiBEbyB0aGlzIGluIHR3byBtYWluIHN0YWdlczogZmlyc3Qgd2UgY29weSBkaXJ0eSBidWZmZXJzIHRvIGFcXG4gICogdGVtcG9yYXJ5IGlub2RlIGxpc3QsIHF1ZXVlaW5nIHRoZSB3cml0ZXMgYXMgd2UgZ28uIFRoZW4gd2UgY2xlYW5cXG4tICogdXAsIHdhaXRpbmcgZm9yIHRob3NlIHdyaXRlcyB0byBjb21wbGV0ZS4gbWFya19idWZmZXJfZGlydHlfaW5vZGUoKVxcbi0gKiBkb2Vzbid0IHRvdWNoIGJfYXNzb2NfYnVmZmVycyBsaXN0IGlmIGJfbW1iIGlzIG5vdCBOVUxMIHNvIHdlIGFyZSBzdXJlIHRoZVxcbisgKiB1cCwgd2FpdGluZyBmb3IgdGhvc2Ugd3JpdGVzIHRvIGNvbXBsZXRlLiBtbWJfbWFya19idWZmZXJfZGlydHkoKVxcbisgKiBkb2Vzbid0IHRvdWNoIGJfYXNzb2NfYnVmZmVycyBsaXN0IGlmIGJfbW1iIGlzIHNldCBzbyB3ZSBhcmUgc3VyZSB0aGVcXG4gICogYnVmZmVyIHN0YXlzIG9uIG91ciBsaXN0IHVudGlsIElPIGNvbXBsZXRlcyAoYXQgd2hpY2ggcG9pbnQgaXQgY2FuIGJlXFxuICAqIHJlYXBlZCkuXFxuICAqL1xcbkBAIC01NDIsNyArNTQyLDcgQEAgaW50IG1tYl9zeW5jKHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iKVxcbiBcXHRcXHRiaCA9IEJIX0VOVFJZKG1tYi1cXHUwMDNlbGlzdC5uZXh0KTtcXG4gXFx0XFx0V0FSTl9PTl9PTkNFKGJoLVxcdTAwM2ViX21tYiAhPSBtbWIpO1xcbiBcXHRcXHRfX3JlbW92ZV9hc3NvY19xdWV1ZShtbWIsIGJoKTtcXG4tXFx0XFx0LyogQXZvaWQgcmFjZSB3aXRoIG1hcmtfYnVmZmVyX2RpcnR5X2lub2RlKCkgd2hpY2ggZG9lc1xcbitcXHRcXHQvKiBBdm9pZCByYWNlIHdpdGggbW1iX21hcmtfYnVmZmVyX2RpcnR5KCkgd2hpY2ggZG9lc1xcbiBcXHRcXHQgKiBhIGxvY2tsZXNzIGNoZWNrIGFuZCB3ZSByZWx5IG9uIHNlZWluZyB0aGUgZGlydHkgYml0ICovXFxuIFxcdFxcdHNtcF9tYigpO1xcbiBcXHRcXHRpZiAoYnVmZmVyX2RpcnR5KGJoKSB8fCBidWZmZXJfbG9ja2VkKGJoKSkge1xcbkBAIC01ODAsNyArNTgwLDcgQEAgaW50IG1tYl9zeW5jKHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iKVxcbiBcXHRcXHRiaCA9IEJIX0VOVFJZKHRtcC5wcmV2KTtcXG4gXFx0XFx0Z2V0X2JoKGJoKTtcXG4gXFx0XFx0X19yZW1vdmVfYXNzb2NfcXVldWUobW1iLCBiaCk7XFxuLVxcdFxcdC8qIEF2b2lkIHJhY2Ugd2l0aCBtYXJrX2J1ZmZlcl9kaXJ0eV9pbm9kZSgpIHdoaWNoIGRvZXNcXG4rXFx0XFx0LyogQXZvaWQgcmFjZSB3aXRoIG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eSgpIHdoaWNoIGRvZXNcXG4gXFx0XFx0ICogYSBsb2NrbGVzcyBjaGVjayBhbmQgd2UgcmVseSBvbiBzZWVpbmcgdGhlIGRpcnR5IGJpdCAqL1xcbiBcXHRcXHRzbXBfbWIoKTtcXG4gXFx0XFx0aWYgKGJ1ZmZlcl9kaXJ0eShiaCkpIHtcXG5AQCAtNjE4LDYgKzYxOCwxNCBAQCB2b2lkIHdyaXRlX2JvdW5kYXJ5X2Jsb2NrKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXFxuIFxcdH1cXG4gfVxcbiBcXG4rLyoqXFxuKyAqIG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eSAtIE1hcmsgYSBtZXRhZGF0YSBidWZmZXIgZGlydHkuXFxuKyAqIEBiaDogVGhlIGJ1ZmZlciB0byBtYXJrIGRpcnR5LlxcbisgKiBAbW1iOiBUaGUgbGlzdCBvZiBidWZmZXJzIHRvIGFkZCB0aGUgYnVmZmVyIHRvLlxcbisgKlxcbisgKiBNYXJrIHRoZSBidWZmZXIgZGlydHkgYW5kIGFkZCBpdCB0byB0aGUgbGlzdCBpZiBpdCBpcyBub3QgYWxyZWFkeSBvblxcbisgKiBhIGxpc3QuXFxuKyAqL1xcbiB2b2lkIG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxcbiBcXHRcXHRcXHQgICBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYilcXG4ge1xcbkBAIC02ODYsNyArNjk0LDcgQEAgYm9vbCBibG9ja19kaXJ0eV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0XFx0fSB3aGlsZSAoYmggIT0gaGVhZCk7XFxuIFxcdH1cXG4gXFx0LypcXG4tXFx0ICogTG9jayBvdXQgcGFnZSdzIG1lbWNnIG1pZ3JhdGlvbiB0byBrZWVwIFBhZ2VEaXJ0eVxcbitcXHQgKiBMb2NrIG91dCBmb2xpbydzIG1lbWNnIG1pZ3JhdGlvbiB0byBrZWVwIGZvbGlvIGRpcnR5IGZsYWdcXG4gXFx0ICogc3luY2hyb25pemVkIHdpdGggcGVyLW1lbWNnIGRpcnR5IHBhZ2UgY291bnRlcnMuXFxuIFxcdCAqL1xcbiBcXHRuZXdseV9kaXJ0eSA9ICFmb2xpb190ZXN0X3NldF9kaXJ0eShmb2xpbyk7XFxuQEAgLTk1MiwyMyArOTYwLDIzIEBAIF9fZ2V0YmxrX3Nsb3coc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3QgYmxvY2ssXFxuIH1cXG4gXFxuIC8qXFxuLSAqIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBkaXJ0eSBidWZmZXJzIGFuZCBkaXJ0eSBwYWdlczpcXG4rICogVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGRpcnR5IGJ1ZmZlcnMgYW5kIGRpcnR5IGZvbGlvczpcXG4gICpcXG4tICogV2hlbmV2ZXIgYSBwYWdlIGhhcyBhbnkgZGlydHkgYnVmZmVycywgdGhlIHBhZ2UncyBkaXJ0eSBiaXQgaXMgc2V0LCBhbmRcXG4tICogdGhlIHBhZ2UgaXMgdGFnZ2VkIGRpcnR5IGluIHRoZSBwYWdlIGNhY2hlLlxcbisgKiBXaGVuZXZlciBhIGZvbGlvIGhhcyBhbnkgZGlydHkgYnVmZmVycywgdGhlIGZvbGlvJ3MgZGlydHkgZmxhZyBpcyBzZXQsIGFuZFxcbisgKiB0aGUgZm9saW8gaXMgdGFnZ2VkIGRpcnR5IGluIHRoZSBwYWdlIGNhY2hlLlxcbiAgKlxcbiAgKiBBdCBhbGwgdGltZXMsIHRoZSBkaXJ0aW5lc3Mgb2YgdGhlIGJ1ZmZlcnMgcmVwcmVzZW50cyB0aGUgZGlydGluZXNzIG9mXFxuLSAqIHN1YnNlY3Rpb25zIG9mIHRoZSBwYWdlLiAgSWYgdGhlIHBhZ2UgaGFzIGJ1ZmZlcnMsIHRoZSBwYWdlIGRpcnR5IGJpdCBpc1xcbisgKiBzdWJzZWN0aW9ucyBvZiB0aGUgZm9saW8uICBJZiB0aGUgZm9saW8gaGFzIGJ1ZmZlcnMsIHRoZSBmb2xpbyBkaXJ0eSBmbGFnIGlzXFxuICAqIG1lcmVseSBhIGhpbnQgYWJvdXQgdGhlIHRydWUgZGlydHkgc3RhdGUuXFxuICAqXFxuLSAqIFdoZW4gYSBwYWdlIGlzIHNldCBkaXJ0eSBpbiBpdHMgZW50aXJldHksIGFsbCBpdHMgYnVmZmVycyBhcmUgbWFya2VkIGRpcnR5XFxuLSAqIChpZiB0aGUgcGFnZSBoYXMgYnVmZmVycykuXFxuKyAqIFdoZW4gYSBmb2xpbyBpcyBzZXQgZGlydHkgaW4gaXRzIGVudGlyZXR5LCBhbGwgaXRzIGJ1ZmZlcnMgYXJlIG1hcmtlZCBkaXJ0eVxcbisgKiAoaWYgdGhlIGZvbGlvIGhhcyBidWZmZXJzKS5cXG4gICpcXG4tICogV2hlbiBhIGJ1ZmZlciBpcyBtYXJrZWQgZGlydHksIGl0cyBwYWdlIGlzIGRpcnRpZWQsIGJ1dCB0aGUgcGFnZSdzIG90aGVyXFxuKyAqIFdoZW4gYSBidWZmZXIgaXMgbWFya2VkIGRpcnR5LCBpdHMgZm9saW8gaXMgZGlydGllZCwgYnV0IHRoZSBmb2xpbydzIG90aGVyXFxuICAqIGJ1ZmZlcnMgYXJlIG5vdC5cXG4gICpcXG4gICogQWxzby4gIFdoZW4gYmxvY2tkZXYgYnVmZmVycyBhcmUgZXhwbGljaXRseSByZWFkIHdpdGggYnJlYWQoKSwgdGhleVxcbi0gKiBpbmRpdmlkdWFsbHkgYmVjb21lIHVwdG9kYXRlLiAgQnV0IHRoZWlyIGJhY2tpbmcgcGFnZSByZW1haW5zIG5vdFxcbisgKiBpbmRpdmlkdWFsbHkgYmVjb21lIHVwdG9kYXRlLiAgQnV0IHRoZWlyIGJhY2tpbmcgZm9saW8gcmVtYWlucyBub3RcXG4gICogdXB0b2RhdGUgLSBldmVuIGlmIGFsbCBvZiBpdHMgYnVmZmVycyBhcmUgdXB0b2RhdGUuICBBIHN1YnNlcXVlbnRcXG4gICogYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKCkgYWdhaW5zdCB0aGF0IGZvbGlvIHdpbGwgZGlzY292ZXIgYWxsIHRoZSB1cHRvZGF0ZVxcbiAgKiBidWZmZXJzLCB3aWxsIHNldCB0aGUgZm9saW8gdXB0b2RhdGUgYW5kIHdpbGwgcGVyZm9ybSBubyBJL08uXFxuQEAgLTk3OSw3ICs5ODcsNyBAQCBfX2dldGJsa19zbG93KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLFxcbiAgKiBAYmg6IHRoZSBidWZmZXJfaGVhZCB0byBtYXJrIGRpcnR5XFxuICAqXFxuICAqIG1hcmtfYnVmZmVyX2RpcnR5KCkgd2lsbCBzZXQgdGhlIGRpcnR5IGJpdCBhZ2FpbnN0IHRoZSBidWZmZXIsIHRoZW4gc2V0XFxuLSAqIGl0cyBiYWNraW5nIHBhZ2UgZGlydHksIHRoZW4gdGFnIHRoZSBwYWdlIGFzIGRpcnR5IGluIHRoZSBwYWdlIGNhY2hlXFxuKyAqIGl0cyBiYWNraW5nIGZvbGlvIGRpcnR5LCB0aGVuIHRhZyB0aGUgZm9saW8gYXMgZGlydHkgaW4gdGhlIHBhZ2UgY2FjaGVcXG4gICogYW5kIHRoZW4gYXR0YWNoIHRoZSBhZGRyZXNzX3NwYWNlJ3MgaW5vZGUgdG8gaXRzIHN1cGVyYmxvY2sncyBkaXJ0eVxcbiAgKiBpbm9kZSBsaXN0LlxcbiAgKlxcbkBAIC0xMDc0LDcgKzEwODIsNyBAQCBzdGF0aWMgdm9pZCBidWZmZXJfc2V0X2NyeXB0b19jdHgoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxcbiBcXG4gXFx0LypcXG4gXFx0ICogVGhlIGV4dDQgam91cm5hbCAoamJkMikgY2FuIHN1Ym1pdCBhIGJ1ZmZlcl9oZWFkIGl0IGRpcmVjdGx5IGNyZWF0ZWRcXG4tXFx0ICogZm9yIGEgbm9uLXBhZ2VjYWNoZSBwYWdlLiAgZnNjcnlwdCBkb2Vzbid0IGNhcmUgYWJvdXQgdGhlc2UuXFxuK1xcdCAqIGZvciBhIG5vbi1wYWdlY2FjaGUgZm9saW8uICBmc2NyeXB0IGRvZXNuJ3QgY2FyZSBhYm91dCB0aGVzZS5cXG4gXFx0ICovXFxuIFxcdGlmICghbWFwcGluZylcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC0xMjE2LDcgKzEyMjQsNyBAQCBzdGF0aWMgdm9pZCBiaF9scnVfaW5zdGFsbChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcbiBcXG4gXFx0LypcXG4gXFx0ICogdGhlIHJlZmNvdW50IG9mIGJ1ZmZlcl9oZWFkIGluIGJoX2xydSBwcmV2ZW50cyBkcm9wcGluZyB0aGVcXG4tXFx0ICogYXR0YWNoZWQgcGFnZShpLmUuLCB0cnlfdG9fZnJlZV9idWZmZXJzKSBzbyBpdCBjb3VsZCBjYXVzZVxcbitcXHQgKiBhdHRhY2hlZCBmb2xpbyAoaS5lLiwgdHJ5X3RvX2ZyZWVfYnVmZmVycykgc28gaXQgY291bGQgY2F1c2VcXG4gXFx0ICogZmFpbGluZyBwYWdlIG1pZ3JhdGlvbi5cXG4gXFx0ICogU2tpcCBwdXR0aW5nIHVwY29taW5nIGJoIGludG8gYmhfbHJ1IHVudGlsIG1pZ3JhdGlvbiBpcyBkb25lLlxcbiBcXHQgKi9cXG5AQCAtMTI4MCw3ICsxMjg4LDcgQEAgbG9va3VwX2JoX2xydShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBibG9jaywgdW5zaWduZWQgc2l6ZSlcXG4gICogUGVyZm9ybSBhIHBhZ2VjYWNoZSBsb29rdXAgZm9yIHRoZSBtYXRjaGluZyBidWZmZXIuICBJZiBpdCdzIHRoZXJlLCByZWZyZXNoXFxuICAqIGl0IGluIHRoZSBMUlUgYW5kIG1hcmsgaXQgYXMgYWNjZXNzZWQuICBJZiBpdCBpcyBub3QgcHJlc2VudCB0aGVuIHJldHVyblxcbiAgKiBOVUxMLiBBdG9taWMgY29udGV4dCBjYWxsZXJzIG1heSBhbHNvIHJldHVybiBOVUxMIGlmIHRoZSBidWZmZXIgaXMgYmVpbmdcXG4tICogbWlncmF0ZWQ7IHNpbWlsYXJseSB0aGUgcGFnZSBpcyBub3QgbWFya2VkIGFjY2Vzc2VkIGVpdGhlci5cXG4rICogbWlncmF0ZWQ7IHNpbWlsYXJseSB0aGUgZm9saW8gaXMgbm90IG1hcmtlZCBhY2Nlc3NlZCBlaXRoZXIuXFxuICAqL1xcbiBzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpcXG4gZmluZF9nZXRfYmxvY2tfY29tbW9uKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLFxcbkBAIC0xMjg5LDcgKzEyOTcsNyBAQCBmaW5kX2dldF9ibG9ja19jb21tb24oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3QgYmxvY2ssXFxuIFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBsb29rdXBfYmhfbHJ1KGJkZXYsIGJsb2NrLCBzaXplKTtcXG4gXFxuIFxcdGlmIChiaCA9PSBOVUxMKSB7XFxuLVxcdFxcdC8qIF9fZmluZF9nZXRfYmxvY2tfc2xvdyB3aWxsIG1hcmsgdGhlIHBhZ2UgYWNjZXNzZWQgKi9cXG4rXFx0XFx0LyogX19maW5kX2dldF9ibG9ja19zbG93IHdpbGwgbWFyayB0aGUgZm9saW8gYWNjZXNzZWQgKi9cXG4gXFx0XFx0YmggPSBfX2ZpbmRfZ2V0X2Jsb2NrX3Nsb3coYmRldiwgYmxvY2ssIGF0b21pYyk7XFxuIFxcdFxcdGlmIChiaClcXG4gXFx0XFx0XFx0YmhfbHJ1X2luc3RhbGwoYmgpO1xcbkBAIC0xNDc1LDE1ICsxNDgzLDE0IEBAIHZvaWQgZm9saW9fc2V0X2JoKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChmb2xpb19zZXRfYmgpO1xcbiBcXG4tLypcXG4tICogQ2FsbGVkIHdoZW4gdHJ1bmNhdGluZyBhIGJ1ZmZlciBvbiBhIHBhZ2UgY29tcGxldGVseS5cXG4tICovXFxuLVxcbiAvKiBCaXRzIHRoYXQgYXJlIGNsZWFyZWQgZHVyaW5nIGFuIGludmFsaWRhdGUgKi9cXG4gI2RlZmluZSBCVUZGRVJfRkxBR1NfRElTQ0FSRCBcXFxcXFxuIFxcdCgxIFxcdTAwM2NcXHUwMDNjIEJIX01hcHBlZCB8IDEgXFx1MDAzY1xcdTAwM2MgQkhfTmV3IHwgMSBcXHUwMDNjXFx1MDAzYyBCSF9SZXEgfCBcXFxcXFxuIFxcdCAxIFxcdTAwM2NcXHUwMDNjIEJIX0RlbGF5IHwgMSBcXHUwMDNjXFx1MDAzYyBCSF9VbndyaXR0ZW4pXFxuIFxcbisvKlxcbisgKiBDYWxsZWQgd2hlbiB0cnVuY2F0aW5nIGEgYnVmZmVyIG9uIGEgZm9saW8gY29tcGxldGVseS5cXG4rICovXFxuIHN0YXRpYyB2b2lkIGRpc2NhcmRfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgYl9zdGF0ZTtcXG5AQCAtMTYxMSw5ICsxNjE4LDcgQEAgRVhQT1JUX1NZTUJPTChjcmVhdGVfZW1wdHlfYnVmZmVycyk7XFxuICAqIG1vbWVudCB3aGVuIHNvbWV0aGluZyB3aWxsIGV4cGxpY2l0bHkgbWFyayB0aGUgYnVmZmVyIGRpcnR5IChob3BlZnVsbHkgdGhhdFxcbiAgKiB3aWxsIG5vdCBoYXBwZW4gdW50aWwgd2Ugd2lsbCBmcmVlIHRoYXQgYmxvY2sgOy0pIFdlIGRvbid0IGV2ZW4gbmVlZCB0byBtYXJrXFxuICAqIGl0IG5vdC11cHRvZGF0ZSAtIG5vYm9keSBjYW4gZXhwZWN0IGFueXRoaW5nIGZyb20gYSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyXFxuLSAqIGFueXdheS4gV2UgdXNlZCB0byB1c2UgdW5tYXBfYnVmZmVyKCkgZm9yIHN1Y2ggaW52YWxpZGF0aW9uLCBidXQgdGhhdCB3YXNcXG4tICogd3JvbmcuIFdlIGRlZmluaXRlbHkgZG9uJ3Qgd2FudCB0byBtYXJrIHRoZSBhbGlhcyB1bm1hcHBlZCwgZm9yIGV4YW1wbGUgLSBpdFxcbi0gKiB3b3VsZCBjb25mdXNlIGFueW9uZSB3aG8gbWlnaHQgcGljayBpdCB3aXRoIGJyZWFkKCkgYWZ0ZXJ3YXJkcy4uLlxcbisgKiBhbnl3YXkuXFxuICAqXFxuICAqIEFsc28uLiAgTm90ZSB0aGF0IGJmb3JnZXQoKSBkb2Vzbid0IGxvY2sgdGhlIGJ1ZmZlci4gIFNvIHRoZXJlIGNhbiBiZVxcbiAgKiB3cml0ZW91dCBJL08gZ29pbmcgb24gYWdhaW5zdCByZWNlbnRseS1mcmVlZCBidWZmZXJzLiAgV2UgZG9uJ3Qgd2FpdCBvbiB0aGF0XFxuQEAgLTE2NDksNyArMTY1NCw3IEBAIHZvaWQgY2xlYW5fYmRldl9hbGlhc2VzKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLCBzZWN0b3JfdCBsZW4pXFxuIFxcdFxcdFxcdC8qIFJlY2hlY2sgd2hlbiB0aGUgZm9saW8gaXMgbG9ja2VkIHdoaWNoIHBpbnMgYmhzICovXFxuIFxcdFxcdFxcdGhlYWQgPSBmb2xpb19idWZmZXJzKGZvbGlvKTtcXG4gXFx0XFx0XFx0aWYgKCFoZWFkKVxcbi1cXHRcXHRcXHRcXHRnb3RvIHVubG9ja19wYWdlO1xcbitcXHRcXHRcXHRcXHRnb3RvIHVubG9ja19mb2xpbztcXG4gXFx0XFx0XFx0YmggPSBoZWFkO1xcbiBcXHRcXHRcXHRkbyB7XFxuIFxcdFxcdFxcdFxcdGlmICghYnVmZmVyX21hcHBlZChiaCkgfHwgKGJoLVxcdTAwM2ViX2Jsb2NrbnIgXFx1MDAzYyBibG9jaykpXFxuQEAgLTE2NjIsNyArMTY2Nyw3IEBAIHZvaWQgY2xlYW5fYmRldl9hbGlhc2VzKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLCBzZWN0b3JfdCBsZW4pXFxuIG5leHQ6XFxuIFxcdFxcdFxcdFxcdGJoID0gYmgtXFx1MDAzZWJfdGhpc19wYWdlO1xcbiBcXHRcXHRcXHR9IHdoaWxlIChiaCAhPSBoZWFkKTtcXG4tdW5sb2NrX3BhZ2U6XFxuK3VubG9ja19mb2xpbzpcXG4gXFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRmb2xpb19iYXRjaF9yZWxlYXNlKFxcdTAwMjZmYmF0Y2gpO1xcbkBAIC0xNzEwLDcgKzE3MTUsNyBAQCBzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpmb2xpb19jcmVhdGVfYnVmZmVycyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiAgKlxcbiAgKiBJZiBibG9ja193cml0ZV9mdWxsX2ZvbGlvKCkgaXMgY2FsbGVkIGZvciByZWd1bGFyIHdyaXRlYmFja1xcbiAgKiAod2JjLVxcdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FKSB0aGVuIGl0IHdpbGwgcmVkaXJ0eSBhIGZvbGlvIHdoaWNoXFxuLSAqIGhhcyBhIGxvY2tlZCBidWZmZXIuICAgVGhpcyBvbmx5IGNhbiBoYXBwZW4gaWYgc29tZW9uZSBoYXMgd3JpdHRlblxcbisgKiBoYXMgYSBsb2NrZWQgYnVmZmVyLiAgIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGlmIHNvbWVvbmUgaGFzIHdyaXR0ZW5cXG4gICogdGhlIGJ1ZmZlciBkaXJlY3RseSwgd2l0aCBiaF9zdWJtaXQoKS4gIEF0IHRoZSBhZGRyZXNzX3NwYWNlIGxldmVsXFxuICAqIHRoZSBmb2xpbyB3cml0ZWJhY2sgZmxhZyBwcmV2ZW50cyB0aGlzIGNvbnRlbnRpb24gZnJvbSBvY2N1cnJpbmcuXFxuICAqXFxuQEAgLTIyMTMsOSArMjIxOCw5IEBAIGludCBnZW5lcmljX3dyaXRlX2VuZChjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRpZiAob2xkX3NpemUgXFx1MDAzYyBwb3MpXFxuIFxcdFxcdHBhZ2VjYWNoZV9pc2l6ZV9leHRlbmRlZChpbm9kZSwgb2xkX3NpemUsIHBvcyk7XFxuIFxcdC8qXFxuLVxcdCAqIERvbid0IG1hcmsgdGhlIGlub2RlIGRpcnR5IHVuZGVyIHBhZ2UgbG9jay4gRmlyc3QsIGl0IHVubmVjZXNzYXJpbHlcXG4tXFx0ICogbWFrZXMgdGhlIGhvbGRpbmcgdGltZSBvZiBwYWdlIGxvY2sgbG9uZ2VyLiBTZWNvbmQsIGl0IGZvcmNlcyBsb2NrXFxuLVxcdCAqIG9yZGVyaW5nIG9mIHBhZ2UgbG9jayBhbmQgdHJhbnNhY3Rpb24gc3RhcnQgZm9yIGpvdXJuYWxpbmdcXG4rXFx0ICogRG9uJ3QgbWFyayB0aGUgaW5vZGUgZGlydHkgdW5kZXIgZm9saW8gbG9jay4gRmlyc3QsIGl0IHVubmVjZXNzYXJpbHlcXG4rXFx0ICogbWFrZXMgdGhlIGhvbGRpbmcgdGltZSBvZiBmb2xpbyBsb2NrIGxvbmdlci4gU2Vjb25kLCBpdCBmb3JjZXMgbG9ja1xcbitcXHQgKiBvcmRlcmluZyBvZiBmb2xpbyBsb2NrIGFuZCB0cmFuc2FjdGlvbiBzdGFydCBmb3Igam91cm5hbGluZ1xcbiBcXHQgKiBmaWxlc3lzdGVtcy5cXG4gXFx0ICovXFxuIFxcdGlmIChpX3NpemVfY2hhbmdlZClcXG5AQCAtMjM0MSw3ICsyMzQ2LDcgQEAgaW50IGJsb2NrX3JlYWRfZnVsbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZXRfYmxvY2tfdCAqZ2V0X2Jsb2NrKVxcbiBcXHRcXHQgKiBCSF9Bc3luY19SZWFkIHRlbGxzIGVuZF9idWZmZXJfYXN5bmNfcmVhZCgpIHRoYXQgdGhpc1xcbiBcXHRcXHQgKiBidWZmZXIgaXMgbm90IHVuZGVyIGFzeW5jIEkvTy5cXG4gXFx0XFx0ICpcXG4tXFx0XFx0ICogVGhlIGZvbGlvIGNvbWVzIHVubG9ja2VkIHdoZW4gaXQgaGFzIG5vIGxvY2tlZFxcbitcXHRcXHQgKiBUaGUgZm9saW8gaXMgdW5sb2NrZWQgd2hlbiBpdCBoYXMgbm8gbG9ja2VkXFxuIFxcdFxcdCAqIGJ1ZmZlcl9hc3luYyBidWZmZXJzIGxlZnQuXFxuIFxcdFxcdCAqXFxuIFxcdFxcdCAqIFRoZSBmb2xpbyBsb2NrIHByZXZlbnRzIGFueW9uZSBzdGFydGluZyBuZXcgYXN5bmNcXG5AQCAtMjQ1MSw3ICsyNDU2LDcgQEAgc3RhdGljIGludCBjb250X2V4cGFuZF96ZXJvKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHQvKiBwYWdlIGNvdmVycyB0aGUgYm91bmRhcnksIGZpbmQgdGhlIGJvdW5kYXJ5IG9mZnNldCAqL1xcbitcXHQvKiBmb2xpbyBjcm9zc2VzIHRoZSBib3VuZGFyeSwgZmluZCB0aGUgYm91bmRhcnkgb2Zmc2V0ICovXFxuIFxcdGlmIChpbmRleCA9PSBjdXJpZHgpIHtcXG4gXFx0XFx0emVyb2Zyb20gPSBjdXJwb3MgXFx1MDAyNiB+UEFHRV9NQVNLO1xcbiBcXHRcXHQvKiBpZiB3ZSB3aWxsIGV4cGFuZCB0aGUgdGhpbmcgbGFzdCBibG9jayB3aWxsIGJlIGZpbGxlZCAqL1xcbkBAIC0yNTA5LDE4ICsyNTE0LDE4IEBAIEVYUE9SVF9TWU1CT0woY29udF93cml0ZV9iZWdpbik7XFxuIFxcbiAvKlxcbiAgKiBibG9ja19wYWdlX21rd3JpdGUoKSBpcyBub3QgYWxsb3dlZCB0byBjaGFuZ2UgdGhlIGZpbGUgc2l6ZSBhcyBpdCBnZXRzXFxuLSAqIGNhbGxlZCBmcm9tIGEgcGFnZSBmYXVsdCBoYW5kbGVyIHdoZW4gYSBwYWdlIGlzIGZpcnN0IGRpcnRpZWQuIEhlbmNlIHdlIG11c3RcXG4tICogYmUgY2FyZWZ1bCB0byBjaGVjayBmb3IgRU9GIGNvbmRpdGlvbnMgaGVyZS4gV2Ugc2V0IHRoZSBwYWdlIHVwIGNvcnJlY3RseVxcbi0gKiBmb3IgYSB3cml0dGVuIHBhZ2Ugd2hpY2ggbWVhbnMgd2UgZ2V0IEVOT1NQQyBjaGVja2luZyB3aGVuIHdyaXRpbmcgaW50b1xcbisgKiBjYWxsZWQgZnJvbSBhIHBhZ2UgZmF1bHQgaGFuZGxlciB3aGVuIGEgZm9saW8gaXMgZmlyc3QgZGlydGllZC4gSGVuY2Ugd2UgbXVzdFxcbisgKiBiZSBjYXJlZnVsIHRvIGNoZWNrIGZvciBFT0YgY29uZGl0aW9ucyBoZXJlLiBXZSBzZXQgdGhlIGZvbGlvIHVwIGNvcnJlY3RseVxcbisgKiBmb3IgYSB3cml0dGVuIGZvbGlvIHdoaWNoIG1lYW5zIHdlIGdldCBFTk9TUEMgY2hlY2tpbmcgd2hlbiB3cml0aW5nIGludG9cXG4gICogaG9sZXMgYW5kIGNvcnJlY3QgZGVsYWxsb2MgYW5kIHVud3JpdHRlbiBleHRlbnQgbWFwcGluZyBvbiBmaWxlc3lzdGVtcyB0aGF0XFxuICAqIHN1cHBvcnQgdGhlc2UgZmVhdHVyZXMuXFxuICAqXFxuICAqIFdlIGFyZSBub3QgYWxsb3dlZCB0byB0YWtlIHRoZSBpX3J3c2VtIGhlcmUgc28gd2UgaGF2ZSB0byBwbGF5IGdhbWVzIHRvXFxuLSAqIHByb3RlY3QgYWdhaW5zdCB0cnVuY2F0ZSByYWNlcyBhcyB0aGUgcGFnZSBjb3VsZCBub3cgYmUgYmV5b25kIEVPRi4gIEJlY2F1c2VcXG4tICogdHJ1bmNhdGUgd3JpdGVzIHRoZSBpbm9kZSBzaXplIGJlZm9yZSByZW1vdmluZyBwYWdlcywgb25jZSB3ZSBoYXZlIHRoZVxcbi0gKiBwYWdlIGxvY2sgd2UgY2FuIGRldGVybWluZSBzYWZlbHkgaWYgdGhlIHBhZ2UgaXMgYmV5b25kIEVPRi4gSWYgaXQgaXMgbm90XFxuLSAqIGJleW9uZCBFT0YsIHRoZW4gdGhlIHBhZ2UgaXMgZ3VhcmFudGVlZCBzYWZlIGFnYWluc3QgdHJ1bmNhdGlvbiB1bnRpbCB3ZVxcbi0gKiB1bmxvY2sgdGhlIHBhZ2UuXFxuKyAqIHByb3RlY3QgYWdhaW5zdCB0cnVuY2F0ZSByYWNlcyBhcyB0aGUgZm9saW8gY291bGQgbm93IGJlIGJleW9uZCBFT0YuICBCZWNhdXNlXFxuKyAqIHRydW5jYXRlIHdyaXRlcyB0aGUgaW5vZGUgc2l6ZSBiZWZvcmUgcmVtb3ZpbmcgZm9saW9zLCBvbmNlIHdlIGhhdmUgdGhlXFxuKyAqIGZvbGlvIGxvY2sgd2UgY2FuIGRldGVybWluZSBzYWZlbHkgaWYgdGhlIGZvbGlvIGlzIGJleW9uZCBFT0YuIElmIGl0IGlzIG5vdFxcbisgKiBiZXlvbmQgRU9GLCB0aGVuIHRoZSBmb2xpbyBpcyBndWFyYW50ZWVkIHNhZmUgYWdhaW5zdCB0cnVuY2F0aW9uIHVudGlsIHdlXFxuKyAqIHVubG9jayB0aGUgZm9saW8uXFxuICAqXFxuICAqIERpcmVjdCBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24gc2hvdWxkIHByb3RlY3QgYWdhaW5zdCBmaWxlc3lzdGVtIGZyZWV6aW5nXFxuICAqIHVzaW5nIHNiX3N0YXJ0X3BhZ2VmYXVsdCgpIC0gc2JfZW5kX3BhZ2VmYXVsdCgpIGZ1bmN0aW9ucy5cXG5AQCAtMjUzOCw3ICsyNTQzLDcgQEAgaW50IGJsb2NrX3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuIFxcdHNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XFxuIFxcdGlmICgoZm9saW8tXFx1MDAzZW1hcHBpbmcgIT0gaW5vZGUtXFx1MDAzZWlfbWFwcGluZykgfHxcXG4gXFx0ICAgIChmb2xpb19wb3MoZm9saW8pIFxcdTAwM2U9IHNpemUpKSB7XFxuLVxcdFxcdC8qIFdlIG92ZXJsb2FkIEVGQVVMVCB0byBtZWFuIHBhZ2UgZ290IHRydW5jYXRlZCAqL1xcbitcXHRcXHQvKiBXZSBvdmVybG9hZCBFRkFVTFQgdG8gbWVhbiBmb2xpbyBnb3QgdHJ1bmNhdGVkICovXFxuIFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmggYi9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmhcXG5pbmRleCBmZDJjNzExNWMwNTQyLi4xZDU1Zjc3NzBjYWQxIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaFxcbkBAIC0zMzgsMjAgKzMzOCw1OCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYmZvcmdldChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcbiBcXHRcXHRfX2Jmb3JnZXQoYmgpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBidWZmZXJfaGVhZCAqXFxuLXNiX2JyZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHNlY3Rvcl90IGJsb2NrKVxcbisvKipcXG4rICogc2JfYnJlYWQgLSBSZWFkIGEgYmxvY2suXFxuKyAqIEBzYjogVGhlIHN1cGVyYmxvY2sgdG8gcmVhZCBmcm9tLlxcbisgKiBAYmxvY2s6IEJsb2NrIG51bWJlciBpbiB1bml0cyBvZiBibG9jayBzaXplLlxcbisgKlxcbisgKiBSZWFkIGEgc3BlY2lmaWVkIGJsb2NrLCBhbmQgcmV0dXJuIHRoZSBidWZmZXIgaGVhZCB0aGF0IHJlZmVyc1xcbisgKiB0byBpdC4gIFRoZSBtZW1vcnkgaXMgYWxsb2NhdGVkIGZyb20gdGhlIG1vdmFibGUgYXJlYSBzbyB0aGF0IGl0IGNhblxcbisgKiBiZSBtaWdyYXRlZC4gIFRoZSByZXR1cm5lZCBidWZmZXIgaGVhZCBoYXMgaXRzIHJlZmNvdW50IGluY3JlYXNlZC5cXG4rICogVGhlIGNhbGxlciBzaG91bGQgY2FsbCBicmVsc2UoKSB3aGVuIGl0IGhhcyBmaW5pc2hlZCB3aXRoIHRoZSBidWZmZXIuXFxuKyAqXFxuKyAqIENvbnRleHQ6IE1heSBzbGVlcCB3YWl0aW5nIGZvciBJL08uXFxuKyAqIFJldHVybjogTlVMTCBpZiB0aGUgYmxvY2sgd2FzIHVucmVhZGFibGUuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lXFxuK3N0cnVjdCBidWZmZXJfaGVhZCAqc2JfYnJlYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc2VjdG9yX3QgYmxvY2spXFxuIHtcXG4gXFx0cmV0dXJuIF9fYnJlYWRfZ2ZwKHNiLVxcdTAwM2VzX2JkZXYsIGJsb2NrLCBzYi1cXHUwMDNlc19ibG9ja3NpemUsIF9fR0ZQX01PVkFCTEUpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBidWZmZXJfaGVhZCAqXFxuLXNiX2JyZWFkX3VubW92YWJsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzZWN0b3JfdCBibG9jaylcXG4rLyoqXFxuKyAqIHNiX2JyZWFkX3VubW92YWJsZSAtIFJlYWQgYSBibG9jay5cXG4rICogQHNiOiBUaGUgc3VwZXJibG9jayB0byByZWFkIGZyb20uXFxuKyAqIEBibG9jazogQmxvY2sgbnVtYmVyIGluIHVuaXRzIG9mIGJsb2NrIHNpemUuXFxuKyAqXFxuKyAqIFJlYWQgYSBzcGVjaWZpZWQgYmxvY2ssIGFuZCByZXR1cm4gdGhlIGJ1ZmZlciBoZWFkIHRoYXQgcmVmZXJzIHRvIGl0LlxcbisgKiBUaGUgbWVtb3J5IGlzIGFsbG9jYXRlZCBmcm9tIHRoZSB1bm1vdmFibGUgYXJlYSBzbyB0aGF0IHBvaW50ZXJzIGludG9cXG4rICogaXQgcmVtYWluIHZhbGlkIGFmdGVyIGNvbXBhY3Rpb24gcnVucy4gIFRoZSByZXR1cm5lZCBidWZmZXIgaGVhZCBoYXNcXG4rICogaXRzIHJlZmNvdW50IGluY3JlYXNlZC4gIFRoZSBjYWxsZXIgc2hvdWxkIGNhbGwgYnJlbHNlKCkgd2hlbiBpdCBoYXNcXG4rICogZmluaXNoZWQgd2l0aCB0aGUgYnVmZmVyLlxcbisgKlxcbisgKiBDb250ZXh0OiBNYXkgc2xlZXAgd2FpdGluZyBmb3IgSS9PLlxcbisgKiBSZXR1cm46IE5VTEwgaWYgdGhlIGJsb2NrIHdhcyB1bnJlYWRhYmxlLlxcbisgKi9cXG4rc3RhdGljIGlubGluZVxcbitzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNiX2JyZWFkX3VubW92YWJsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzZWN0b3JfdCBibG9jaylcXG4ge1xcbiBcXHRyZXR1cm4gX19icmVhZF9nZnAoc2ItXFx1MDAzZXNfYmRldiwgYmxvY2ssIHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSwgMCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZFxcbi1zYl9icmVhZGFoZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHNlY3Rvcl90IGJsb2NrKVxcbisvKipcXG4rICogc2JfYnJlYWRhaGVhZCAtIFN0YXJ0IHJlYWRhaGVhZC5cXG4rICogQHNiOiBTdXBlcmJsb2NrIGlkZW50aWZ5aW5nIHRoZSBibG9jayBkZXZpY2UuXFxuKyAqIEBibG9jazogVGhlIGJsb2NrIHRvIHJlYWQuXFxuKyAqXFxuKyAqIFJlYWQgdGhpcyBibG9jay4gIFRoZSBJL08gd2lsbCBiZSBmbGFnZ2VkIGFzIGJlaW5nIHJlYWRhaGVhZCByYXRoZXJcXG4rICogdGhhbiBpbW1lZGlhdGUgcmVhZCwgYnV0ICh1bmxpa2UgdGhlIHBhZ2UgY2FjaGUpLCBzdXJyb3VuZGluZyBibG9ja3NcXG4rICogd2lsbCBub3QgYmUgcmVhZC5cXG4rICpcXG4rICogQ29udGV4dDogTWF5IHNsZWVwIGluIG9yZGVyIHRvIGFsbG9jYXRlIG1lbW9yeS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmVcXG4rdm9pZCBzYl9icmVhZGFoZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHNlY3Rvcl90IGJsb2NrKVxcbiB7XFxuIFxcdF9fYnJlYWRhaGVhZChzYi1cXHUwMDNlc19iZGV2LCBibG9jaywgc2ItXFx1MDAzZXNfYmxvY2tzaXplKTtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMToxODoyOS42NTkxODMyMjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjU0Nzg1NTcwNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgY29udGFpbnMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLCBrZXJuZWxkb2MgYWRkaXRpb25zLCBjb21tZW50IGNvbnZlcnNpb25zIChmcm9tIHBhZ2UgdG8gZm9saW8gdGVybWlub2xvZ3kpLCBhbmQgYSBsYWJlbCByZW5hbWUgKHVubG9ja19wYWdlIHRvIHVubG9ja19mb2xpbykgd2l0aCBubyBmdW5jdGlvbmFsIGNvZGUgY2hhbmdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM4ZTcyZTZmMmZiNmIxNGE4YWY4NGU0YjNlOTBlYTgyN2QzMThmMTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyOCAyMToxODoyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0XG5pbmRleCA2MDg4MGViMGM0OWQxLi5kZTk2YjY3NDU2MDBiIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdFxuQEAgLTM0OCw3ICszNDgsNyBAQCBzaW1wbHkgb2YgcmV0dXJuIDEuICBOb3RlIHRoYXQgYWxsIGFjdHVhbCBldmljdGlvbiB3b3JrIGlzIGRvbmUgYnkgY2FsbGVyIGFmdGVyXG4gQXMgYmVmb3JlLCBjbGVhcl9pbm9kZSgpIG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBvbiBlYWNoIGNhbGwgb2ZcbiAtXHUwMDNlZXZpY3RfaW5vZGUoKSAoYXMgaXQgdXNlZCB0byBiZSBmb3IgZWFjaCBjYWxsIG9mIC1cdTAwM2VkZWxldGVfaW5vZGUoKSkuICBVbmxpa2VcbiBiZWZvcmUsIGlmIHlvdSBhcmUgdXNpbmcgaW5vZGUtYXNzb2NpYXRlZCBtZXRhZGF0YSBidWZmZXJzIChpLmUuXG4tbWFya19idWZmZXJfZGlydHlfaW5vZGUoKSksIGl0J3MgeW91ciByZXNwb25zaWJpbGl0eSB0byBjYWxsXG4rbW1iX21hcmtfYnVmZmVyX2RpcnR5KCkpLCBpdCdzIHlvdXIgcmVzcG9uc2liaWxpdHkgdG8gY2FsbFxuIGludmFsaWRhdGVfaW5vZGVfYnVmZmVycygpIGJlZm9yZSBjbGVhcl9pbm9kZSgpLlxuIFxuIE5PVEU6IGNoZWNraW5nIGlfbmxpbmsgaW4gdGhlIGJlZ2lubmluZyBvZiAtXHUwMDNld3JpdGVfaW5vZGUoKSBhbmQgYmFpbGluZyBvdXRcbmRpZmYgLS1naXQgYS9mcy9idWZmZXIuYyBiL2ZzL2J1ZmZlci5jXG5pbmRleCBlZDk2NmZhNzNiMWJhLi5jOTM0MmFlYjhjZGY2IDEwMDY0NFxuLS0tIGEvZnMvYnVmZmVyLmNcbisrKyBiL2ZzL2J1ZmZlci5jXG5AQCAtMjY1LDcgKzI2NSw3IEBAIF9fZmluZF9nZXRfYmxvY2tfc2xvdyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBibG9jaywgYm9vbCBhdG9taWMpXG4gXHRcdGJoID0gYmgtXHUwMDNlYl90aGlzX3BhZ2U7XG4gXHR9IHdoaWxlIChiaCAhPSBoZWFkKTtcbiBcbi1cdC8qIHdlIG1pZ2h0IGJlIGhlcmUgYmVjYXVzZSBzb21lIG9mIHRoZSBidWZmZXJzIG9uIHRoaXMgcGFnZSBhcmVcbitcdC8qIHdlIG1pZ2h0IGJlIGhlcmUgYmVjYXVzZSBzb21lIG9mIHRoZSBidWZmZXJzIG9uIHRoaXMgZm9saW8gYXJlXG4gXHQgKiBub3QgbWFwcGVkLiAgVGhpcyBpcyBkdWUgdG8gdmFyaW91cyByYWNlcyBiZXR3ZWVuXG4gXHQgKiBmaWxlIGlvIG9uIHRoZSBibG9jayBkZXZpY2UgYW5kIGdldGJsay4gIEl0IGdldHMgZGVhbHQgd2l0aFxuIFx0ICogZWxzZXdoZXJlLCBkb24ndCBidWZmZXJfZXJyb3IgaWYgd2UgaGFkIHNvbWUgdW5tYXBwZWQgYnVmZmVyc1xuQEAgLTMxMSw3ICszMTEsNyBAQCBzdGF0aWMgdm9pZCBlbmRfYnVmZmVyX2FzeW5jX3JlYWQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHVwdG9kYXRlKVxuIFx0LypcbiBcdCAqIEJlIF92ZXJ5XyBjYXJlZnVsIGZyb20gaGVyZSBvbi4gQmFkIHRoaW5ncyBjYW4gaGFwcGVuIGlmXG4gXHQgKiB0d28gYnVmZmVyIGhlYWRzIGVuZCBJTyBhdCBhbG1vc3QgdGhlIHNhbWUgdGltZSBhbmQgYm90aFxuLVx0ICogZGVjaWRlIHRoYXQgdGhlIHBhZ2UgaXMgbm93IGNvbXBsZXRlbHkgZG9uZS5cbitcdCAqIGRlY2lkZSB0aGF0IHRoZSBmb2xpbyBpcyBub3cgY29tcGxldGVseSBkb25lLlxuIFx0ICovXG4gXHRmaXJzdCA9IGZvbGlvX2J1ZmZlcnMoZm9saW8pO1xuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Zmlyc3QtXHUwMDNlYl91cHRvZGF0ZV9sb2NrLCBmbGFncyk7XG5AQCAtNTIwLDggKzUyMCw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKG1tYl9oYXNfYnVmZmVycyk7XG4gICpcbiAgKiBEbyB0aGlzIGluIHR3byBtYWluIHN0YWdlczogZmlyc3Qgd2UgY29weSBkaXJ0eSBidWZmZXJzIHRvIGFcbiAgKiB0ZW1wb3JhcnkgaW5vZGUgbGlzdCwgcXVldWVpbmcgdGhlIHdyaXRlcyBhcyB3ZSBnby4gVGhlbiB3ZSBjbGVhblxuLSAqIHVwLCB3YWl0aW5nIGZvciB0aG9zZSB3cml0ZXMgdG8gY29tcGxldGUuIG1hcmtfYnVmZmVyX2RpcnR5X2lub2RlKClcbi0gKiBkb2Vzbid0IHRvdWNoIGJfYXNzb2NfYnVmZmVycyBsaXN0IGlmIGJfbW1iIGlzIG5vdCBOVUxMIHNvIHdlIGFyZSBzdXJlIHRoZVxuKyAqIHVwLCB3YWl0aW5nIGZvciB0aG9zZSB3cml0ZXMgdG8gY29tcGxldGUuIG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eSgpXG4rICogZG9lc24ndCB0b3VjaCBiX2Fzc29jX2J1ZmZlcnMgbGlzdCBpZiBiX21tYiBpcyBzZXQgc28gd2UgYXJlIHN1cmUgdGhlXG4gICogYnVmZmVyIHN0YXlzIG9uIG91ciBsaXN0IHVudGlsIElPIGNvbXBsZXRlcyAoYXQgd2hpY2ggcG9pbnQgaXQgY2FuIGJlXG4gICogcmVhcGVkKS5cbiAgKi9cbkBAIC01NDIsNyArNTQyLDcgQEAgaW50IG1tYl9zeW5jKHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iKVxuIFx0XHRiaCA9IEJIX0VOVFJZKG1tYi1cdTAwM2VsaXN0Lm5leHQpO1xuIFx0XHRXQVJOX09OX09OQ0UoYmgtXHUwMDNlYl9tbWIgIT0gbW1iKTtcbiBcdFx0X19yZW1vdmVfYXNzb2NfcXVldWUobW1iLCBiaCk7XG4tXHRcdC8qIEF2b2lkIHJhY2Ugd2l0aCBtYXJrX2J1ZmZlcl9kaXJ0eV9pbm9kZSgpIHdoaWNoIGRvZXNcbitcdFx0LyogQXZvaWQgcmFjZSB3aXRoIG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eSgpIHdoaWNoIGRvZXNcbiBcdFx0ICogYSBsb2NrbGVzcyBjaGVjayBhbmQgd2UgcmVseSBvbiBzZWVpbmcgdGhlIGRpcnR5IGJpdCAqL1xuIFx0XHRzbXBfbWIoKTtcbiBcdFx0aWYgKGJ1ZmZlcl9kaXJ0eShiaCkgfHwgYnVmZmVyX2xvY2tlZChiaCkpIHtcbkBAIC01ODAsNyArNTgwLDcgQEAgaW50IG1tYl9zeW5jKHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iKVxuIFx0XHRiaCA9IEJIX0VOVFJZKHRtcC5wcmV2KTtcbiBcdFx0Z2V0X2JoKGJoKTtcbiBcdFx0X19yZW1vdmVfYXNzb2NfcXVldWUobW1iLCBiaCk7XG4tXHRcdC8qIEF2b2lkIHJhY2Ugd2l0aCBtYXJrX2J1ZmZlcl9kaXJ0eV9pbm9kZSgpIHdoaWNoIGRvZXNcbitcdFx0LyogQXZvaWQgcmFjZSB3aXRoIG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eSgpIHdoaWNoIGRvZXNcbiBcdFx0ICogYSBsb2NrbGVzcyBjaGVjayBhbmQgd2UgcmVseSBvbiBzZWVpbmcgdGhlIGRpcnR5IGJpdCAqL1xuIFx0XHRzbXBfbWIoKTtcbiBcdFx0aWYgKGJ1ZmZlcl9kaXJ0eShiaCkpIHtcbkBAIC02MTgsNiArNjE4LDE0IEBAIHZvaWQgd3JpdGVfYm91bmRhcnlfYmxvY2soc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcbiBcdH1cbiB9XG4gXG4rLyoqXG4rICogbW1iX21hcmtfYnVmZmVyX2RpcnR5IC0gTWFyayBhIG1ldGFkYXRhIGJ1ZmZlciBkaXJ0eS5cbisgKiBAYmg6IFRoZSBidWZmZXIgdG8gbWFyayBkaXJ0eS5cbisgKiBAbW1iOiBUaGUgbGlzdCBvZiBidWZmZXJzIHRvIGFkZCB0aGUgYnVmZmVyIHRvLlxuKyAqXG4rICogTWFyayB0aGUgYnVmZmVyIGRpcnR5IGFuZCBhZGQgaXQgdG8gdGhlIGxpc3QgaWYgaXQgaXMgbm90IGFscmVhZHkgb25cbisgKiBhIGxpc3QuXG4rICovXG4gdm9pZCBtbWJfbWFya19idWZmZXJfZGlydHkoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbiBcdFx0XHQgICBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYilcbiB7XG5AQCAtNjg2LDcgKzY5NCw3IEBAIGJvb2wgYmxvY2tfZGlydHlfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdH0gd2hpbGUgKGJoICE9IGhlYWQpO1xuIFx0fVxuIFx0Lypcbi1cdCAqIExvY2sgb3V0IHBhZ2UncyBtZW1jZyBtaWdyYXRpb24gdG8ga2VlcCBQYWdlRGlydHlcbitcdCAqIExvY2sgb3V0IGZvbGlvJ3MgbWVtY2cgbWlncmF0aW9uIHRvIGtlZXAgZm9saW8gZGlydHkgZmxhZ1xuIFx0ICogc3luY2hyb25pemVkIHdpdGggcGVyLW1lbWNnIGRpcnR5IHBhZ2UgY291bnRlcnMuXG4gXHQgKi9cbiBcdG5ld2x5X2RpcnR5ID0gIWZvbGlvX3Rlc3Rfc2V0X2RpcnR5KGZvbGlvKTtcbkBAIC05NTIsMjMgKzk2MCwyMyBAQCBfX2dldGJsa19zbG93KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLFxuIH1cbiBcbiAvKlxuLSAqIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBkaXJ0eSBidWZmZXJzIGFuZCBkaXJ0eSBwYWdlczpcbisgKiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gZGlydHkgYnVmZmVycyBhbmQgZGlydHkgZm9saW9zOlxuICAqXG4tICogV2hlbmV2ZXIgYSBwYWdlIGhhcyBhbnkgZGlydHkgYnVmZmVycywgdGhlIHBhZ2UncyBkaXJ0eSBiaXQgaXMgc2V0LCBhbmRcbi0gKiB0aGUgcGFnZSBpcyB0YWdnZWQgZGlydHkgaW4gdGhlIHBhZ2UgY2FjaGUuXG4rICogV2hlbmV2ZXIgYSBmb2xpbyBoYXMgYW55IGRpcnR5IGJ1ZmZlcnMsIHRoZSBmb2xpbydzIGRpcnR5IGZsYWcgaXMgc2V0LCBhbmRcbisgKiB0aGUgZm9saW8gaXMgdGFnZ2VkIGRpcnR5IGluIHRoZSBwYWdlIGNhY2hlLlxuICAqXG4gICogQXQgYWxsIHRpbWVzLCB0aGUgZGlydGluZXNzIG9mIHRoZSBidWZmZXJzIHJlcHJlc2VudHMgdGhlIGRpcnRpbmVzcyBvZlxuLSAqIHN1YnNlY3Rpb25zIG9mIHRoZSBwYWdlLiAgSWYgdGhlIHBhZ2UgaGFzIGJ1ZmZlcnMsIHRoZSBwYWdlIGRpcnR5IGJpdCBpc1xuKyAqIHN1YnNlY3Rpb25zIG9mIHRoZSBmb2xpby4gIElmIHRoZSBmb2xpbyBoYXMgYnVmZmVycywgdGhlIGZvbGlvIGRpcnR5IGZsYWcgaXNcbiAgKiBtZXJlbHkgYSBoaW50IGFib3V0IHRoZSB0cnVlIGRpcnR5IHN0YXRlLlxuICAqXG4tICogV2hlbiBhIHBhZ2UgaXMgc2V0IGRpcnR5IGluIGl0cyBlbnRpcmV0eSwgYWxsIGl0cyBidWZmZXJzIGFyZSBtYXJrZWQgZGlydHlcbi0gKiAoaWYgdGhlIHBhZ2UgaGFzIGJ1ZmZlcnMpLlxuKyAqIFdoZW4gYSBmb2xpbyBpcyBzZXQgZGlydHkgaW4gaXRzIGVudGlyZXR5LCBhbGwgaXRzIGJ1ZmZlcnMgYXJlIG1hcmtlZCBkaXJ0eVxuKyAqIChpZiB0aGUgZm9saW8gaGFzIGJ1ZmZlcnMpLlxuICAqXG4tICogV2hlbiBhIGJ1ZmZlciBpcyBtYXJrZWQgZGlydHksIGl0cyBwYWdlIGlzIGRpcnRpZWQsIGJ1dCB0aGUgcGFnZSdzIG90aGVyXG4rICogV2hlbiBhIGJ1ZmZlciBpcyBtYXJrZWQgZGlydHksIGl0cyBmb2xpbyBpcyBkaXJ0aWVkLCBidXQgdGhlIGZvbGlvJ3Mgb3RoZXJcbiAgKiBidWZmZXJzIGFyZSBub3QuXG4gICpcbiAgKiBBbHNvLiAgV2hlbiBibG9ja2RldiBidWZmZXJzIGFyZSBleHBsaWNpdGx5IHJlYWQgd2l0aCBicmVhZCgpLCB0aGV5XG4tICogaW5kaXZpZHVhbGx5IGJlY29tZSB1cHRvZGF0ZS4gIEJ1dCB0aGVpciBiYWNraW5nIHBhZ2UgcmVtYWlucyBub3RcbisgKiBpbmRpdmlkdWFsbHkgYmVjb21lIHVwdG9kYXRlLiAgQnV0IHRoZWlyIGJhY2tpbmcgZm9saW8gcmVtYWlucyBub3RcbiAgKiB1cHRvZGF0ZSAtIGV2ZW4gaWYgYWxsIG9mIGl0cyBidWZmZXJzIGFyZSB1cHRvZGF0ZS4gIEEgc3Vic2VxdWVudFxuICAqIGJsb2NrX3JlYWRfZnVsbF9mb2xpbygpIGFnYWluc3QgdGhhdCBmb2xpbyB3aWxsIGRpc2NvdmVyIGFsbCB0aGUgdXB0b2RhdGVcbiAgKiBidWZmZXJzLCB3aWxsIHNldCB0aGUgZm9saW8gdXB0b2RhdGUgYW5kIHdpbGwgcGVyZm9ybSBubyBJL08uXG5AQCAtOTc5LDcgKzk4Nyw3IEBAIF9fZ2V0YmxrX3Nsb3coc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3QgYmxvY2ssXG4gICogQGJoOiB0aGUgYnVmZmVyX2hlYWQgdG8gbWFyayBkaXJ0eVxuICAqXG4gICogbWFya19idWZmZXJfZGlydHkoKSB3aWxsIHNldCB0aGUgZGlydHkgYml0IGFnYWluc3QgdGhlIGJ1ZmZlciwgdGhlbiBzZXRcbi0gKiBpdHMgYmFja2luZyBwYWdlIGRpcnR5LCB0aGVuIHRhZyB0aGUgcGFnZSBhcyBkaXJ0eSBpbiB0aGUgcGFnZSBjYWNoZVxuKyAqIGl0cyBiYWNraW5nIGZvbGlvIGRpcnR5LCB0aGVuIHRhZyB0aGUgZm9saW8gYXMgZGlydHkgaW4gdGhlIHBhZ2UgY2FjaGVcbiAgKiBhbmQgdGhlbiBhdHRhY2ggdGhlIGFkZHJlc3Nfc3BhY2UncyBpbm9kZSB0byBpdHMgc3VwZXJibG9jaydzIGRpcnR5XG4gICogaW5vZGUgbGlzdC5cbiAgKlxuQEAgLTEwNzQsNyArMTA4Miw3IEBAIHN0YXRpYyB2b2lkIGJ1ZmZlcl9zZXRfY3J5cHRvX2N0eChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG4gXG4gXHQvKlxuIFx0ICogVGhlIGV4dDQgam91cm5hbCAoamJkMikgY2FuIHN1Ym1pdCBhIGJ1ZmZlcl9oZWFkIGl0IGRpcmVjdGx5IGNyZWF0ZWRcbi1cdCAqIGZvciBhIG5vbi1wYWdlY2FjaGUgcGFnZS4gIGZzY3J5cHQgZG9lc24ndCBjYXJlIGFib3V0IHRoZXNlLlxuK1x0ICogZm9yIGEgbm9uLXBhZ2VjYWNoZSBmb2xpby4gIGZzY3J5cHQgZG9lc24ndCBjYXJlIGFib3V0IHRoZXNlLlxuIFx0ICovXG4gXHRpZiAoIW1hcHBpbmcpXG4gXHRcdHJldHVybjtcbkBAIC0xMjE2LDcgKzEyMjQsNyBAQCBzdGF0aWMgdm9pZCBiaF9scnVfaW5zdGFsbChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuIFxuIFx0LypcbiBcdCAqIHRoZSByZWZjb3VudCBvZiBidWZmZXJfaGVhZCBpbiBiaF9scnUgcHJldmVudHMgZHJvcHBpbmcgdGhlXG4tXHQgKiBhdHRhY2hlZCBwYWdlKGkuZS4sIHRyeV90b19mcmVlX2J1ZmZlcnMpIHNvIGl0IGNvdWxkIGNhdXNlXG4rXHQgKiBhdHRhY2hlZCBmb2xpbyAoaS5lLiwgdHJ5X3RvX2ZyZWVfYnVmZmVycykgc28gaXQgY291bGQgY2F1c2VcbiBcdCAqIGZhaWxpbmcgcGFnZSBtaWdyYXRpb24uXG4gXHQgKiBTa2lwIHB1dHRpbmcgdXBjb21pbmcgYmggaW50byBiaF9scnUgdW50aWwgbWlncmF0aW9uIGlzIGRvbmUuXG4gXHQgKi9cbkBAIC0xMjgwLDcgKzEyODgsNyBAQCBsb29rdXBfYmhfbHJ1KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLCB1bnNpZ25lZCBzaXplKVxuICAqIFBlcmZvcm0gYSBwYWdlY2FjaGUgbG9va3VwIGZvciB0aGUgbWF0Y2hpbmcgYnVmZmVyLiAgSWYgaXQncyB0aGVyZSwgcmVmcmVzaFxuICAqIGl0IGluIHRoZSBMUlUgYW5kIG1hcmsgaXQgYXMgYWNjZXNzZWQuICBJZiBpdCBpcyBub3QgcHJlc2VudCB0aGVuIHJldHVyblxuICAqIE5VTEwuIEF0b21pYyBjb250ZXh0IGNhbGxlcnMgbWF5IGFsc28gcmV0dXJuIE5VTEwgaWYgdGhlIGJ1ZmZlciBpcyBiZWluZ1xuLSAqIG1pZ3JhdGVkOyBzaW1pbGFybHkgdGhlIHBhZ2UgaXMgbm90IG1hcmtlZCBhY2Nlc3NlZCBlaXRoZXIuXG4rICogbWlncmF0ZWQ7IHNpbWlsYXJseSB0aGUgZm9saW8gaXMgbm90IG1hcmtlZCBhY2Nlc3NlZCBlaXRoZXIuXG4gICovXG4gc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqXG4gZmluZF9nZXRfYmxvY2tfY29tbW9uKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLFxuQEAgLTEyODksNyArMTI5Nyw3IEBAIGZpbmRfZ2V0X2Jsb2NrX2NvbW1vbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBibG9jayxcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBsb29rdXBfYmhfbHJ1KGJkZXYsIGJsb2NrLCBzaXplKTtcbiBcbiBcdGlmIChiaCA9PSBOVUxMKSB7XG4tXHRcdC8qIF9fZmluZF9nZXRfYmxvY2tfc2xvdyB3aWxsIG1hcmsgdGhlIHBhZ2UgYWNjZXNzZWQgKi9cbitcdFx0LyogX19maW5kX2dldF9ibG9ja19zbG93IHdpbGwgbWFyayB0aGUgZm9saW8gYWNjZXNzZWQgKi9cbiBcdFx0YmggPSBfX2ZpbmRfZ2V0X2Jsb2NrX3Nsb3coYmRldiwgYmxvY2ssIGF0b21pYyk7XG4gXHRcdGlmIChiaClcbiBcdFx0XHRiaF9scnVfaW5zdGFsbChiaCk7XG5AQCAtMTQ3NSwxNSArMTQ4MywxNCBAQCB2b2lkIGZvbGlvX3NldF9iaChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIH1cbiBFWFBPUlRfU1lNQk9MKGZvbGlvX3NldF9iaCk7XG4gXG4tLypcbi0gKiBDYWxsZWQgd2hlbiB0cnVuY2F0aW5nIGEgYnVmZmVyIG9uIGEgcGFnZSBjb21wbGV0ZWx5LlxuLSAqL1xuLVxuIC8qIEJpdHMgdGhhdCBhcmUgY2xlYXJlZCBkdXJpbmcgYW4gaW52YWxpZGF0ZSAqL1xuICNkZWZpbmUgQlVGRkVSX0ZMQUdTX0RJU0NBUkQgXFxcbiBcdCgxIFx1MDAzY1x1MDAzYyBCSF9NYXBwZWQgfCAxIFx1MDAzY1x1MDAzYyBCSF9OZXcgfCAxIFx1MDAzY1x1MDAzYyBCSF9SZXEgfCBcXFxuIFx0IDEgXHUwMDNjXHUwMDNjIEJIX0RlbGF5IHwgMSBcdTAwM2NcdTAwM2MgQkhfVW53cml0dGVuKVxuIFxuKy8qXG4rICogQ2FsbGVkIHdoZW4gdHJ1bmNhdGluZyBhIGJ1ZmZlciBvbiBhIGZvbGlvIGNvbXBsZXRlbHkuXG4rICovXG4gc3RhdGljIHZvaWQgZGlzY2FyZF9idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICogYmgpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBiX3N0YXRlO1xuQEAgLTE2MTEsOSArMTYxOCw3IEBAIEVYUE9SVF9TWU1CT0woY3JlYXRlX2VtcHR5X2J1ZmZlcnMpO1xuICAqIG1vbWVudCB3aGVuIHNvbWV0aGluZyB3aWxsIGV4cGxpY2l0bHkgbWFyayB0aGUgYnVmZmVyIGRpcnR5IChob3BlZnVsbHkgdGhhdFxuICAqIHdpbGwgbm90IGhhcHBlbiB1bnRpbCB3ZSB3aWxsIGZyZWUgdGhhdCBibG9jayA7LSkgV2UgZG9uJ3QgZXZlbiBuZWVkIHRvIG1hcmtcbiAgKiBpdCBub3QtdXB0b2RhdGUgLSBub2JvZHkgY2FuIGV4cGVjdCBhbnl0aGluZyBmcm9tIGEgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlclxuLSAqIGFueXdheS4gV2UgdXNlZCB0byB1c2UgdW5tYXBfYnVmZmVyKCkgZm9yIHN1Y2ggaW52YWxpZGF0aW9uLCBidXQgdGhhdCB3YXNcbi0gKiB3cm9uZy4gV2UgZGVmaW5pdGVseSBkb24ndCB3YW50IHRvIG1hcmsgdGhlIGFsaWFzIHVubWFwcGVkLCBmb3IgZXhhbXBsZSAtIGl0XG4tICogd291bGQgY29uZnVzZSBhbnlvbmUgd2hvIG1pZ2h0IHBpY2sgaXQgd2l0aCBicmVhZCgpIGFmdGVyd2FyZHMuLi5cbisgKiBhbnl3YXkuXG4gICpcbiAgKiBBbHNvLi4gIE5vdGUgdGhhdCBiZm9yZ2V0KCkgZG9lc24ndCBsb2NrIHRoZSBidWZmZXIuICBTbyB0aGVyZSBjYW4gYmVcbiAgKiB3cml0ZW91dCBJL08gZ29pbmcgb24gYWdhaW5zdCByZWNlbnRseS1mcmVlZCBidWZmZXJzLiAgV2UgZG9uJ3Qgd2FpdCBvbiB0aGF0XG5AQCAtMTY0OSw3ICsxNjU0LDcgQEAgdm9pZCBjbGVhbl9iZGV2X2FsaWFzZXMoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3QgYmxvY2ssIHNlY3Rvcl90IGxlbilcbiBcdFx0XHQvKiBSZWNoZWNrIHdoZW4gdGhlIGZvbGlvIGlzIGxvY2tlZCB3aGljaCBwaW5zIGJocyAqL1xuIFx0XHRcdGhlYWQgPSBmb2xpb19idWZmZXJzKGZvbGlvKTtcbiBcdFx0XHRpZiAoIWhlYWQpXG4tXHRcdFx0XHRnb3RvIHVubG9ja19wYWdlO1xuK1x0XHRcdFx0Z290byB1bmxvY2tfZm9saW87XG4gXHRcdFx0YmggPSBoZWFkO1xuIFx0XHRcdGRvIHtcbiBcdFx0XHRcdGlmICghYnVmZmVyX21hcHBlZChiaCkgfHwgKGJoLVx1MDAzZWJfYmxvY2tuciBcdTAwM2MgYmxvY2spKVxuQEAgLTE2NjIsNyArMTY2Nyw3IEBAIHZvaWQgY2xlYW5fYmRldl9hbGlhc2VzKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLCBzZWN0b3JfdCBsZW4pXG4gbmV4dDpcbiBcdFx0XHRcdGJoID0gYmgtXHUwMDNlYl90aGlzX3BhZ2U7XG4gXHRcdFx0fSB3aGlsZSAoYmggIT0gaGVhZCk7XG4tdW5sb2NrX3BhZ2U6XG4rdW5sb2NrX2ZvbGlvOlxuIFx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXHRcdH1cbiBcdFx0Zm9saW9fYmF0Y2hfcmVsZWFzZShcdTAwMjZmYmF0Y2gpO1xuQEAgLTE3MTAsNyArMTcxNSw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmZvbGlvX2NyZWF0ZV9idWZmZXJzKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gICpcbiAgKiBJZiBibG9ja193cml0ZV9mdWxsX2ZvbGlvKCkgaXMgY2FsbGVkIGZvciByZWd1bGFyIHdyaXRlYmFja1xuICAqICh3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfTk9ORSkgdGhlbiBpdCB3aWxsIHJlZGlydHkgYSBmb2xpbyB3aGljaFxuLSAqIGhhcyBhIGxvY2tlZCBidWZmZXIuICAgVGhpcyBvbmx5IGNhbiBoYXBwZW4gaWYgc29tZW9uZSBoYXMgd3JpdHRlblxuKyAqIGhhcyBhIGxvY2tlZCBidWZmZXIuICAgVGhpcyBjYW4gb25seSBoYXBwZW4gaWYgc29tZW9uZSBoYXMgd3JpdHRlblxuICAqIHRoZSBidWZmZXIgZGlyZWN0bHksIHdpdGggYmhfc3VibWl0KCkuICBBdCB0aGUgYWRkcmVzc19zcGFjZSBsZXZlbFxuICAqIHRoZSBmb2xpbyB3cml0ZWJhY2sgZmxhZyBwcmV2ZW50cyB0aGlzIGNvbnRlbnRpb24gZnJvbSBvY2N1cnJpbmcuXG4gICpcbkBAIC0yMjEzLDkgKzIyMTgsOSBAQCBpbnQgZ2VuZXJpY193cml0ZV9lbmQoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdGlmIChvbGRfc2l6ZSBcdTAwM2MgcG9zKVxuIFx0XHRwYWdlY2FjaGVfaXNpemVfZXh0ZW5kZWQoaW5vZGUsIG9sZF9zaXplLCBwb3MpO1xuIFx0Lypcbi1cdCAqIERvbid0IG1hcmsgdGhlIGlub2RlIGRpcnR5IHVuZGVyIHBhZ2UgbG9jay4gRmlyc3QsIGl0IHVubmVjZXNzYXJpbHlcbi1cdCAqIG1ha2VzIHRoZSBob2xkaW5nIHRpbWUgb2YgcGFnZSBsb2NrIGxvbmdlci4gU2Vjb25kLCBpdCBmb3JjZXMgbG9ja1xuLVx0ICogb3JkZXJpbmcgb2YgcGFnZSBsb2NrIGFuZCB0cmFuc2FjdGlvbiBzdGFydCBmb3Igam91cm5hbGluZ1xuK1x0ICogRG9uJ3QgbWFyayB0aGUgaW5vZGUgZGlydHkgdW5kZXIgZm9saW8gbG9jay4gRmlyc3QsIGl0IHVubmVjZXNzYXJpbHlcbitcdCAqIG1ha2VzIHRoZSBob2xkaW5nIHRpbWUgb2YgZm9saW8gbG9jayBsb25nZXIuIFNlY29uZCwgaXQgZm9yY2VzIGxvY2tcbitcdCAqIG9yZGVyaW5nIG9mIGZvbGlvIGxvY2sgYW5kIHRyYW5zYWN0aW9uIHN0YXJ0IGZvciBqb3VybmFsaW5nXG4gXHQgKiBmaWxlc3lzdGVtcy5cbiBcdCAqL1xuIFx0aWYgKGlfc2l6ZV9jaGFuZ2VkKVxuQEAgLTIzNDEsNyArMjM0Niw3IEBAIGludCBibG9ja19yZWFkX2Z1bGxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2V0X2Jsb2NrX3QgKmdldF9ibG9jaylcbiBcdFx0ICogQkhfQXN5bmNfUmVhZCB0ZWxscyBlbmRfYnVmZmVyX2FzeW5jX3JlYWQoKSB0aGF0IHRoaXNcbiBcdFx0ICogYnVmZmVyIGlzIG5vdCB1bmRlciBhc3luYyBJL08uXG4gXHRcdCAqXG4tXHRcdCAqIFRoZSBmb2xpbyBjb21lcyB1bmxvY2tlZCB3aGVuIGl0IGhhcyBubyBsb2NrZWRcbitcdFx0ICogVGhlIGZvbGlvIGlzIHVubG9ja2VkIHdoZW4gaXQgaGFzIG5vIGxvY2tlZFxuIFx0XHQgKiBidWZmZXJfYXN5bmMgYnVmZmVycyBsZWZ0LlxuIFx0XHQgKlxuIFx0XHQgKiBUaGUgZm9saW8gbG9jayBwcmV2ZW50cyBhbnlvbmUgc3RhcnRpbmcgbmV3IGFzeW5jXG5AQCAtMjQ1MSw3ICsyNDU2LDcgQEAgc3RhdGljIGludCBjb250X2V4cGFuZF96ZXJvKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbiBcdFx0fVxuIFx0fVxuIFxuLVx0LyogcGFnZSBjb3ZlcnMgdGhlIGJvdW5kYXJ5LCBmaW5kIHRoZSBib3VuZGFyeSBvZmZzZXQgKi9cbitcdC8qIGZvbGlvIGNyb3NzZXMgdGhlIGJvdW5kYXJ5LCBmaW5kIHRoZSBib3VuZGFyeSBvZmZzZXQgKi9cbiBcdGlmIChpbmRleCA9PSBjdXJpZHgpIHtcbiBcdFx0emVyb2Zyb20gPSBjdXJwb3MgXHUwMDI2IH5QQUdFX01BU0s7XG4gXHRcdC8qIGlmIHdlIHdpbGwgZXhwYW5kIHRoZSB0aGluZyBsYXN0IGJsb2NrIHdpbGwgYmUgZmlsbGVkICovXG5AQCAtMjUwOSwxOCArMjUxNCwxOCBAQCBFWFBPUlRfU1lNQk9MKGNvbnRfd3JpdGVfYmVnaW4pO1xuIFxuIC8qXG4gICogYmxvY2tfcGFnZV9ta3dyaXRlKCkgaXMgbm90IGFsbG93ZWQgdG8gY2hhbmdlIHRoZSBmaWxlIHNpemUgYXMgaXQgZ2V0c1xuLSAqIGNhbGxlZCBmcm9tIGEgcGFnZSBmYXVsdCBoYW5kbGVyIHdoZW4gYSBwYWdlIGlzIGZpcnN0IGRpcnRpZWQuIEhlbmNlIHdlIG11c3Rcbi0gKiBiZSBjYXJlZnVsIHRvIGNoZWNrIGZvciBFT0YgY29uZGl0aW9ucyBoZXJlLiBXZSBzZXQgdGhlIHBhZ2UgdXAgY29ycmVjdGx5XG4tICogZm9yIGEgd3JpdHRlbiBwYWdlIHdoaWNoIG1lYW5zIHdlIGdldCBFTk9TUEMgY2hlY2tpbmcgd2hlbiB3cml0aW5nIGludG9cbisgKiBjYWxsZWQgZnJvbSBhIHBhZ2UgZmF1bHQgaGFuZGxlciB3aGVuIGEgZm9saW8gaXMgZmlyc3QgZGlydGllZC4gSGVuY2Ugd2UgbXVzdFxuKyAqIGJlIGNhcmVmdWwgdG8gY2hlY2sgZm9yIEVPRiBjb25kaXRpb25zIGhlcmUuIFdlIHNldCB0aGUgZm9saW8gdXAgY29ycmVjdGx5XG4rICogZm9yIGEgd3JpdHRlbiBmb2xpbyB3aGljaCBtZWFucyB3ZSBnZXQgRU5PU1BDIGNoZWNraW5nIHdoZW4gd3JpdGluZyBpbnRvXG4gICogaG9sZXMgYW5kIGNvcnJlY3QgZGVsYWxsb2MgYW5kIHVud3JpdHRlbiBleHRlbnQgbWFwcGluZyBvbiBmaWxlc3lzdGVtcyB0aGF0XG4gICogc3VwcG9ydCB0aGVzZSBmZWF0dXJlcy5cbiAgKlxuICAqIFdlIGFyZSBub3QgYWxsb3dlZCB0byB0YWtlIHRoZSBpX3J3c2VtIGhlcmUgc28gd2UgaGF2ZSB0byBwbGF5IGdhbWVzIHRvXG4tICogcHJvdGVjdCBhZ2FpbnN0IHRydW5jYXRlIHJhY2VzIGFzIHRoZSBwYWdlIGNvdWxkIG5vdyBiZSBiZXlvbmQgRU9GLiAgQmVjYXVzZVxuLSAqIHRydW5jYXRlIHdyaXRlcyB0aGUgaW5vZGUgc2l6ZSBiZWZvcmUgcmVtb3ZpbmcgcGFnZXMsIG9uY2Ugd2UgaGF2ZSB0aGVcbi0gKiBwYWdlIGxvY2sgd2UgY2FuIGRldGVybWluZSBzYWZlbHkgaWYgdGhlIHBhZ2UgaXMgYmV5b25kIEVPRi4gSWYgaXQgaXMgbm90XG4tICogYmV5b25kIEVPRiwgdGhlbiB0aGUgcGFnZSBpcyBndWFyYW50ZWVkIHNhZmUgYWdhaW5zdCB0cnVuY2F0aW9uIHVudGlsIHdlXG4tICogdW5sb2NrIHRoZSBwYWdlLlxuKyAqIHByb3RlY3QgYWdhaW5zdCB0cnVuY2F0ZSByYWNlcyBhcyB0aGUgZm9saW8gY291bGQgbm93IGJlIGJleW9uZCBFT0YuICBCZWNhdXNlXG4rICogdHJ1bmNhdGUgd3JpdGVzIHRoZSBpbm9kZSBzaXplIGJlZm9yZSByZW1vdmluZyBmb2xpb3MsIG9uY2Ugd2UgaGF2ZSB0aGVcbisgKiBmb2xpbyBsb2NrIHdlIGNhbiBkZXRlcm1pbmUgc2FmZWx5IGlmIHRoZSBmb2xpbyBpcyBiZXlvbmQgRU9GLiBJZiBpdCBpcyBub3RcbisgKiBiZXlvbmQgRU9GLCB0aGVuIHRoZSBmb2xpbyBpcyBndWFyYW50ZWVkIHNhZmUgYWdhaW5zdCB0cnVuY2F0aW9uIHVudGlsIHdlXG4rICogdW5sb2NrIHRoZSBmb2xpby5cbiAgKlxuICAqIERpcmVjdCBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24gc2hvdWxkIHByb3RlY3QgYWdhaW5zdCBmaWxlc3lzdGVtIGZyZWV6aW5nXG4gICogdXNpbmcgc2Jfc3RhcnRfcGFnZWZhdWx0KCkgLSBzYl9lbmRfcGFnZWZhdWx0KCkgZnVuY3Rpb25zLlxuQEAgLTI1MzgsNyArMjU0Myw3IEBAIGludCBibG9ja19wYWdlX21rd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuIFx0c2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbiBcdGlmICgoZm9saW8tXHUwMDNlbWFwcGluZyAhPSBpbm9kZS1cdTAwM2VpX21hcHBpbmcpIHx8XG4gXHQgICAgKGZvbGlvX3Bvcyhmb2xpbykgXHUwMDNlPSBzaXplKSkge1xuLVx0XHQvKiBXZSBvdmVybG9hZCBFRkFVTFQgdG8gbWVhbiBwYWdlIGdvdCB0cnVuY2F0ZWQgKi9cbitcdFx0LyogV2Ugb3ZlcmxvYWQgRUZBVUxUIHRvIG1lYW4gZm9saW8gZ290IHRydW5jYXRlZCAqL1xuIFx0XHRyZXQgPSAtRUZBVUxUO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oIGIvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oXG5pbmRleCBmZDJjNzExNWMwNTQyLi4xZDU1Zjc3NzBjYWQxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmhcbkBAIC0zMzgsMjAgKzMzOCw1OCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYmZvcmdldChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuIFx0XHRfX2Jmb3JnZXQoYmgpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBidWZmZXJfaGVhZCAqXG4tc2JfYnJlYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc2VjdG9yX3QgYmxvY2spXG4rLyoqXG4rICogc2JfYnJlYWQgLSBSZWFkIGEgYmxvY2suXG4rICogQHNiOiBUaGUgc3VwZXJibG9jayB0byByZWFkIGZyb20uXG4rICogQGJsb2NrOiBCbG9jayBudW1iZXIgaW4gdW5pdHMgb2YgYmxvY2sgc2l6ZS5cbisgKlxuKyAqIFJlYWQgYSBzcGVjaWZpZWQgYmxvY2ssIGFuZCByZXR1cm4gdGhlIGJ1ZmZlciBoZWFkIHRoYXQgcmVmZXJzXG4rICogdG8gaXQuICBUaGUgbWVtb3J5IGlzIGFsbG9jYXRlZCBmcm9tIHRoZSBtb3ZhYmxlIGFyZWEgc28gdGhhdCBpdCBjYW5cbisgKiBiZSBtaWdyYXRlZC4gIFRoZSByZXR1cm5lZCBidWZmZXIgaGVhZCBoYXMgaXRzIHJlZmNvdW50IGluY3JlYXNlZC5cbisgKiBUaGUgY2FsbGVyIHNob3VsZCBjYWxsIGJyZWxzZSgpIHdoZW4gaXQgaGFzIGZpbmlzaGVkIHdpdGggdGhlIGJ1ZmZlci5cbisgKlxuKyAqIENvbnRleHQ6IE1heSBzbGVlcCB3YWl0aW5nIGZvciBJL08uXG4rICogUmV0dXJuOiBOVUxMIGlmIHRoZSBibG9jayB3YXMgdW5yZWFkYWJsZS5cbisgKi9cbitzdGF0aWMgaW5saW5lXG4rc3RydWN0IGJ1ZmZlcl9oZWFkICpzYl9icmVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzZWN0b3JfdCBibG9jaylcbiB7XG4gXHRyZXR1cm4gX19icmVhZF9nZnAoc2ItXHUwMDNlc19iZGV2LCBibG9jaywgc2ItXHUwMDNlc19ibG9ja3NpemUsIF9fR0ZQX01PVkFCTEUpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBidWZmZXJfaGVhZCAqXG4tc2JfYnJlYWRfdW5tb3ZhYmxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHNlY3Rvcl90IGJsb2NrKVxuKy8qKlxuKyAqIHNiX2JyZWFkX3VubW92YWJsZSAtIFJlYWQgYSBibG9jay5cbisgKiBAc2I6IFRoZSBzdXBlcmJsb2NrIHRvIHJlYWQgZnJvbS5cbisgKiBAYmxvY2s6IEJsb2NrIG51bWJlciBpbiB1bml0cyBvZiBibG9jayBzaXplLlxuKyAqXG4rICogUmVhZCBhIHNwZWNpZmllZCBibG9jaywgYW5kIHJldHVybiB0aGUgYnVmZmVyIGhlYWQgdGhhdCByZWZlcnMgdG8gaXQuXG4rICogVGhlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgZnJvbSB0aGUgdW5tb3ZhYmxlIGFyZWEgc28gdGhhdCBwb2ludGVycyBpbnRvXG4rICogaXQgcmVtYWluIHZhbGlkIGFmdGVyIGNvbXBhY3Rpb24gcnVucy4gIFRoZSByZXR1cm5lZCBidWZmZXIgaGVhZCBoYXNcbisgKiBpdHMgcmVmY291bnQgaW5jcmVhc2VkLiAgVGhlIGNhbGxlciBzaG91bGQgY2FsbCBicmVsc2UoKSB3aGVuIGl0IGhhc1xuKyAqIGZpbmlzaGVkIHdpdGggdGhlIGJ1ZmZlci5cbisgKlxuKyAqIENvbnRleHQ6IE1heSBzbGVlcCB3YWl0aW5nIGZvciBJL08uXG4rICogUmV0dXJuOiBOVUxMIGlmIHRoZSBibG9jayB3YXMgdW5yZWFkYWJsZS5cbisgKi9cbitzdGF0aWMgaW5saW5lXG4rc3RydWN0IGJ1ZmZlcl9oZWFkICpzYl9icmVhZF91bm1vdmFibGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc2VjdG9yX3QgYmxvY2spXG4ge1xuIFx0cmV0dXJuIF9fYnJlYWRfZ2ZwKHNiLVx1MDAzZXNfYmRldiwgYmxvY2ssIHNiLVx1MDAzZXNfYmxvY2tzaXplLCAwKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkXG4tc2JfYnJlYWRhaGVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzZWN0b3JfdCBibG9jaylcbisvKipcbisgKiBzYl9icmVhZGFoZWFkIC0gU3RhcnQgcmVhZGFoZWFkLlxuKyAqIEBzYjogU3VwZXJibG9jayBpZGVudGlmeWluZyB0aGUgYmxvY2sgZGV2aWNlLlxuKyAqIEBibG9jazogVGhlIGJsb2NrIHRvIHJlYWQuXG4rICpcbisgKiBSZWFkIHRoaXMgYmxvY2suICBUaGUgSS9PIHdpbGwgYmUgZmxhZ2dlZCBhcyBiZWluZyByZWFkYWhlYWQgcmF0aGVyXG4rICogdGhhbiBpbW1lZGlhdGUgcmVhZCwgYnV0ICh1bmxpa2UgdGhlIHBhZ2UgY2FjaGUpLCBzdXJyb3VuZGluZyBibG9ja3NcbisgKiB3aWxsIG5vdCBiZSByZWFkLlxuKyAqXG4rICogQ29udGV4dDogTWF5IHNsZWVwIGluIG9yZGVyIHRvIGFsbG9jYXRlIG1lbW9yeS5cbisgKi9cbitzdGF0aWMgaW5saW5lXG4rdm9pZCBzYl9icmVhZGFoZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHNlY3Rvcl90IGJsb2NrKVxuIHtcbiBcdF9fYnJlYWRhaGVhZChzYi1cdTAwM2VzX2JkZXYsIGJsb2NrLCBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjE6MTg6MjkuNjU5MTg0NzI0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQ3ODUzMDgwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogV29ydGhGdXp6aW5nIEV2YWx1YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgZm9jdXMgaXMgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIHBvdGVudGlhbCBpbXBhY3QuIEZpcnN0LCBJIG5vdGUgdGhlIGNoYW5nZWQgZmlsZXM6IGBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0YCwgYGZzL2J1ZmZlci5jYCwgYW5kIGBpbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmhgLiBUaGF0IGdpdmVzIG1lIGEgZ2VuZXJhbCBhcmVhIHRvIGxvb2sgaW50by5cblxuTm93IGZvciB0aGUgZGV0YWlsZWQgZGlmZi4gSSBzZWUgdGhhdCB0aGUgZG9jdW1lbnRhdGlvbiBmaWxlIGhhcyBhIHNpbXBsZSBkb2MgdXBkYXRlLCByZW5hbWluZyBgbWFya19idWZmZXJfZGlydHlfaW5vZGUoKWAgdG8gYG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eSgpYC4gIEluIGBmcy9idWZmZXIuY2AsIGl0J3MgcHJpbWFyaWx5IGNvbW1lbnQgdXBkYXRlcywgcmVwbGFjaW5nIFwicGFnZVwiIHdpdGggXCJmb2xpbyxcIiBhbmQgdGhlIHNhbWUgZnVuY3Rpb24gbmFtZSBjaGFuZ2UsIGluY2x1ZGluZyByZW5hbWluZyBhIGxhYmVsIGZyb20gYHVubG9ja19wYWdlYCB0byBgdW5sb2NrX2ZvbGlvYCBpbiBgY2xlYW5fYmRldl9hbGlhc2VzYC4gVGhlcmUgYWxzbyBsb29rcyBsaWtlIHNvbWUgbmV3IGtlcm5lbGRvYyBjb21tZW50cyBmb3IgYG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eWAgYXJlIHByZXNlbnQuICBPdmVyIGluIGBpbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmhgLCB0aGVyZSBhcmUga2VybmVsZG9jIGFkZGl0aW9ucyBmb3IgYHNiX2JyZWFkYCwgYHNiX2JyZWFkX3VubW92YWJsZWAsIGFuZCBgc2JfYnJlYWRhaGVhZGAsIGFsb25nIHdpdGggc29tZSB2ZXJ5IG1pbm9yIGZvcm1hdHRpbmcgYWRqdXN0bWVudHMgdG8gZnVuY3Rpb24gc2lnbmF0dXJlcyAoanVzdCBsaW5lIHdyYXBwaW5nLCBubyBhY3R1YWwgY29kZSBjaGFuZ2VzKS5cblxuQ3J1Y2lhbGx5LCBJIG5lZWQgdG8gY29uZmlybSB0aGVyZSdzIG5vIGZ1bmN0aW9uYWwgY2hhbmdlLiAgSSdkIGxvdmUgdG8gZ3JhYiB0aGUgc3BlY2lmaWMgY29tbWl0IGRpZmYgKGM4ZTcyZTZmMmZiNmIxNGE4YWY4NGU0YjNlOTBlYTgyN2QzMThmMTApIGlmIHBvc3NpYmxlLCBidXQgcmVhZGluZyB0aGUgZGlmZiBkaXJlY3RseSBjb25maXJtcyBteSBzdXNwaWNpb246ICphbGwqIHRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIGNvbW1lbnQgbW9kaWZpY2F0aW9ucywga2VybmVsZG9jLCB0aGUgbGFiZWwgcmVuYW1lICh3aGljaCBpcyBwdXJlbHkgY29zbWV0aWMpLCBhbmQgZm9ybWF0dGluZyB0d2Vha3MuIEFic29sdXRlbHkgbm8gbG9naWMgY2hhbmdlcy5cblxuTm93LCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgaW5zdHJ1Y3Rpb25zLCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgZnV6emluZy4gVGhlIGNyaXRlcmlhIGNsZWFybHkgc3RhdGUgdGhhdCBpZiB0aGUgcGF0Y2ggY29udGFpbnMgb25seSBkb2N1bWVudGF0aW9uLCBjb2RlIGNvbW1lbnRzLCBvciBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBsaWtlIGxvZ2dpbmcsIGl0J3Mgbm90IHdvcnRoIGZ1enppbmcuIFRoYXQgY292ZXJzIGFsbCB0aGUgY2hhbmdlcyBJJ3ZlIG9ic2VydmVkOiBkb2N1bWVudGF0aW9uLCBjb21tZW50cywgYW5kIHRoZSBsYWJlbC9mb3JtYXR0aW5nIGNoYW5nZXMuXG5cblRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyBjbGVhcjogYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyBuZXcgY29kZSBwYXRocyBvciBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIGV4ZWN1dGlvbiBsb2dpYywgdGhlcmVmb3JlIGZ1enppbmcgaXQgd291bGQgYmUgYSB3YXN0ZSBvZiByZXNvdXJjZXMuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIHNldHRpbmcgdGhlIHByb3BlciB2YWx1ZXM6XG4tICAgYFdvcnRoRnV6emluZ2A6IGBmYWxzZWBcbi0gICBgRm9jdXNTeW1ib2xzYDogYFtdYCAoZW1wdHkgbGlzdCwgYXMgdGhlcmUgYXJlIG5vIHN5bWJvbHMgdG8gZm9jdXMgb24pXG4tICAgYEVuYWJsZUNvbmZpZ3NgOiBgW11gIChlbXB0eSBsaXN0LCBhcyB0aGVyZSBhcmUgbm8gY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlKVxuLSAgIGBSZWFzb25pbmdgOiBcIlRoZSBwYXRjaCBjb250YWlucyBvbmx5IGRvY3VtZW50YXRpb24sIGNvZGUgY29tbWVudHMsIGtlcm5lbGRvYywgbGFiZWwgcmVuYW1pbmcgYW5kIGZvcm1hdHRpbmcgY2hhbmdlcy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcy5cIlxuXG5UaW1lIHRvIHZlcmlmeSB3aXRoIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYW5kIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NDMsIk91dHB1dFRva2VucyI6NzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2ODksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMToxODozNS4xMzc3MTgyNDRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgY29udGFpbnMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLCBrZXJuZWxkb2MgYWRkaXRpb25zLCBjb21tZW50IGNvbnZlcnNpb25zIChmcm9tIHBhZ2UgdG8gZm9saW8gdGVybWlub2xvZ3kpLCBhbmQgYSBsYWJlbCByZW5hbWUgKHVubG9ja19wYWdlIHRvIHVubG9ja19mb2xpbykgd2l0aCBubyBmdW5jdGlvbmFsIGNvZGUgY2hhbmdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgY29udGFpbnMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLCBrZXJuZWxkb2MgYWRkaXRpb25zLCBjb21tZW50IGNvbnZlcnNpb25zIChmcm9tIHBhZ2UgdG8gZm9saW8gdGVybWlub2xvZ3kpLCBhbmQgYSBsYWJlbCByZW5hbWUgKHVubG9ja19wYWdlIHRvIHVubG9ja19mb2xpbykgd2l0aCBubyBmdW5jdGlvbmFsIGNvZGUgY2hhbmdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIxOjE4OjM1LjEzNzc0MjMyNFoiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow752wx[1] Phase: Running StartedAt: 2026-08-28 21:18:46 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow752wx[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-28 21:18:46 +0000 UTC FinishedAt: 2026-08-28 21:18:51 +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,}