Name: series-workflowcgsml Phase: Failed StartedAt: 2026-08-31 21:41:47 +0000 UTC FinishedAt: 2026-08-31 21:45:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgsml[0] Phase: Succeeded StartedAt: 2026-08-31 21:41:47 +0000 UTC FinishedAt: 2026-08-31 21:45:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgsml[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 21:41:47 +0000 UTC FinishedAt: 2026-08-31 21:45:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBtb2RpZnkgdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgKGljZSkgZHJpdmVyIERQTEwgcGluIGhhbmRsaW5nLiBUaGUgaWNlIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBJbnRlbCBFODAwIHNlcmllcyBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDFiMGYwNjYzMGY4NDQ0MmY4NzA1MjYyZTEwM2ZjY2Q4YmJkMWM1MmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMTo0Mzo1MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jXG5pbmRleCA4NWE3NGNkNmVhMWYzLi5jZmZjOWQ3MzdkYzJmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jXG5AQCAtODksNiAmIzQzOzg5LDI5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fZnJlcXVlbmN5IGljZV9lc3luY19yYW5nZVtdID0ge1xuIFx0RFBMTF9QSU5fRlJFUVVFTkNZX1JBTkdFKDAsIERQTExfUElOX0ZSRVFVRU5DWV8xX0haKSxcbiB9O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBTTUExL1UuRkwxIE1VWCB0YWJsZVxuJiM0MzsgKiYjNDM7LS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tJiM0MztcbiYjNDM7ICp8ICAgICAgICAgICAgICAgIHwgU01BMV9ESVJfRU4gfCBTTUExX1RYX0VOIHxcbiYjNDM7IComIzQzOy0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLSYjNDM7XG4mIzQzOyAqfFNNQTEgUlggRW5hYmxlICB8ICAgICAgIDAgICAgIHwgICAgICB4ICAgICB8XG4mIzQzOyAqfHUuRkwxIFRYIEVuYWJsZSB8ICAgICAgIDAgICAgIHwgICAgICAwICAgICB8XG4mIzQzOyAqfFNNQTEgVFggRW5hYmxlICB8ICAgICAgIDEgICAgIHwgICAgICAwICAgICB8XG4mIzQzOyAqfEFsbCBEaXNhYmxlICAgICB8ICAgICAgIDEgICAgIHwgICAgICAxICAgICB8XG4mIzQzOyAqJiM0MzstLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0mIzQzO1xuJiM0MzsgKlxuJiM0MzsgKiBTTUEyL1UuRkwyIE1VWCB0YWJsZVxuJiM0MzsgKiYjNDM7LS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0mIzQzO1xuJiM0MzsgKnwgICAgICAgICAgICAgICAgfCBTTUEyX0RJUl9FTiB8IFNNQTJfVFhfRU4gfCBVRkwyX1JYX0VOIHxcbiYjNDM7IComIzQzOy0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tJiM0MztcbiYjNDM7ICp8U01BMiBSWCBFbmFibGUgIHwgICAgICAgMCAgICAgfCAgICAgIHggICAgIHwgICAgIHggICAgICB8XG4mIzQzOyAqfHUuRkwyIFJYIEVuYWJsZSB8ICAgICAgIDEgICAgIHwgICAgICB4ICAgICB8ICAgICAwICAgICAgfFxuJiM0MzsgKnxTTUEyIFRYIEVuYWJsZSAgfCAgICAgICAxICAgICB8ICAgICAgMCAgICAgfCAgICAgeCAgICAgIHxcbiYjNDM7ICp8U01BMiBEaXNhYmxlICAgIHwgICAgICAgMSAgICAgfCAgICAgIDEgICAgIHwgICAgIHggICAgICB8XG4mIzQzOyAqfEFsbCBEaXNhYmxlICAgICB8ICAgICAgIDEgICAgIHwgICAgICAxICAgICB8ICAgICAxICAgICAgfFxuJiM0MzsgKiYjNDM7LS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0mIzQzO1xuJiM0MzsgKi9cbiYjNDM7XG4gLyoqXG4gICogaWNlX2RwbGxfaXNfc3dfcGluIC0gY2hlY2sgaWYgZ2l2ZW4gcGluIHNoYWxsIGJlIGNvbnRyb2xsZWQgYnkgU1dcbiAgKiBAcGY6IHByaXZhdGUgYm9hcmQgc3RydWN0dXJlXG5AQCAtNDQzLDYgJiM0Mzs0NjYsNDAgQEAgaWNlX2RwbGxfc3dfcGluX2ZyZXF1ZW5jeV9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgaWNlX2RwbGxfZ2V0X2ZhbGxiYWNrX2lkeChzdHJ1Y3QgaWNlX2RwbGxzICpkLCBzdHJ1Y3QgaWNlX2RwbGxfcGluICp0YXJnZXQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoZC1cdTAwM2VwcHMuZHBsbF9pZHggXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgdGFyZ2V0LVx1MDAzZXN0YXRlW2QtXHUwMDNlcHBzLmRwbGxfaWR4XSA9PSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQpXG4mIzQzO1x0XHRyZXR1cm4gZC1cdTAwM2VwcHMuZHBsbF9pZHg7XG4mIzQzO1xuJiM0MztcdGlmIChkLVx1MDAzZWVlYy5kcGxsX2lkeCBcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICB0YXJnZXQtXHUwMDNlc3RhdGVbZC1cdTAwM2VlZWMuZHBsbF9pZHhdID09IERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRClcbiYjNDM7XHRcdHJldHVybiBkLVx1MDAzZWVlYy5kcGxsX2lkeDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGljZV9kcGxsX2dldF9wZWVyX3RhcmdldChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IGljZV9kcGxsX3BpbiAqKnBlZXJfdGFyZ2V0LFxuJiM0MztcdFx0XHRcdCAgICAgZW51bSBpY2VfZHBsbF9waW5fdHlwZSAqcGVlcl90eXBlKVxuJiM0Mzt7XG4mIzQzO1x0KnBlZXJfdGFyZ2V0ID0gTlVMTDtcbiYjNDM7XHQqcGVlcl90eXBlID0gMDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChwZWVyLVx1MDAzZWRpcmVjdGlvbikge1xuJiM0MztcdGNhc2UgRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVDpcbiYjNDM7XHRcdCpwZWVyX3RhcmdldCA9IHBlZXItXHUwMDNlb3V0cHV0O1xuJiM0MztcdFx0KnBlZXJfdHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUOlxuJiM0MztcdFx0KnBlZXJfdGFyZ2V0ID0gcGVlci1cdTAwM2VpbnB1dDtcbiYjNDM7XHRcdCpwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogaWNlX2RwbGxfcGluX2VuYWJsZSAtIGVuYWJsZSBhIHBpbiBvbiBkcGxsc1xuICAqIEBodzogYm9hcmQgcHJpdmF0ZSBodyBzdHJ1Y3R1cmVcbkBAIC01MzgsNiAmIzQzOzU5NSwyOSBAQCBpY2VfZHBsbF9waW5fZGlzYWJsZShzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIgLSBub3RpZnkgdGhlIHBhaXJlZCBTVyBwaW4gYWZ0ZXIgYSBzdGF0ZSBjaGFuZ2VcbiYjNDM7ICogQGNoYW5nZWQ6IHRoZSBTVyBwaW4gdGhhdCB3YXMgZXhwbGljaXRseSBjaGFuZ2VkIChhbHJlYWR5IG5vdGlmaWVkIGJ5IGRwbGwgY29yZSlcbiYjNDM7ICpcbiYjNDM7ICogU01BIGFuZCBVLkZMIHBpbnMgc2hhcmUgcGh5c2ljYWwgc2lnbmFsIHBhdGhzIGluIHBhaXJzIChTTUExL1UuRkwxIGFuZFxuJiM0MzsgKiBTTUEyL1UuRkwyKS4gIFdoZW4gb25lIHBpbiYjMzk7cyByb3V0aW5nIGNoYW5nZXMgdmlhIHRoZSBQQ0E5NTc1IEdQSU9cbiYjNDM7ICogZXhwYW5kZXIsIHRoZSBwYWlyZWQgcGluJiMzOTtzIHN0YXRlIG1heSBhbHNvIGNoYW5nZS4gIFNlbmQgYSBjaGFuZ2VcbiYjNDM7ICogbm90aWZpY2F0aW9uIGZvciB0aGUgcGVlciBwaW4gc28gdXNlcnNwYWNlIGNvbnN1bWVycyBtb25pdG9yaW5nIHRoZVxuJiM0MzsgKiBwZWVyIHZpYSBkcGxsIG5ldGxpbmsgbGVhcm4gYWJvdXQgdGhlIHVwZGF0ZS5cbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVkIGZyb20gZHBsbF9waW5fb3BzIGNhbGxiYWNrcyBhZnRlciBwZi1cdTAwM2VkcGxscy5sb2NrIGlzXG4mIzQzOyAqICAgICAgICAgIHJlbGVhc2VkLiAgVXNlcyBfX2RwbGxfcGluX2NoYW5nZV9udGYoKSBiZWNhdXNlIGRwbGxfbG9jayBpc1xuJiM0MzsgKiAgICAgICAgICBzdGlsbCBoZWxkIGJ5IHRoZSBkcGxsIG5ldGxpbmsgbGF5ZXIuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoc3RydWN0IGljZV9kcGxsX3BpbiAqY2hhbmdlZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXI7XG4mIzQzO1xuJiM0MztcdHBlZXIgPSBjaGFuZ2VkLVx1MDAzZW11eGVkO1xuJiM0MztcdGlmIChwZWVyIFx1MDAyNlx1MDAyNiBwZWVyLVx1MDAzZXBpbilcbiYjNDM7XHRcdF9fZHBsbF9waW5fY2hhbmdlX250ZihwZWVyLVx1MDAzZXBpbik7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogaWNlX2RwbGxfcGluX3N0b3JlX3N0YXRlIC0gdXBkYXRlcyB0aGUgc3RhdGUgb2YgcGluIGluIFNXIGJvb2trZWVwaW5nXG4gICogQHBpbjogcG9pbnRlciB0byBhIHBpblxuQEAgLTcwOSw2ICYjNDM7Nzg5LDggQEAgaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLFxuIFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHU4IHBhcmVudCwgcG9ydF9udW0gPSBJQ0VfQVFDX1NFVF9QSFlfUkVDX0NMS19PVVRfQ1VSUl9QT1JUO1xuJiM0MztcdGVudW0gZHBsbF9waW5fc3RhdGUgZWVjX3N0YXRlID0gRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xuJiM0MztcdGVudW0gZHBsbF9waW5fc3RhdGUgcHBzX3N0YXRlID0gRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xuIFx0aW50IHJldDtcbiBcbiBcdHN3aXRjaCAocGluX3R5cGUpIHtcbkBAIC03MjAsMjYgJiM0Mzs4MDIsMjYgQEAgaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLFxuIFx0XHRcdGdvdG8gZXJyO1xuIFx0XHRpZiAoSUNFX0FRQ19HRVRfQ0dVX0lOX0NGR19GTEcyX0lOUFVUX0VOIFx1MDAyNiBwaW4tXHUwMDNlZmxhZ3NbMF0pIHtcbiBcdFx0XHRpZiAocGluLVx1MDAzZXBpbikge1xuLVx0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxuJiM0MztcdFx0XHRcdGVlY19zdGF0ZSA9XG4gXHRcdFx0XHRcdHBpbi1cdTAwM2VwaW4gPT0gcGYtXHUwMDNlZHBsbHMuZWVjLmFjdGl2ZV9pbnB1dCA/XG4gXHRcdFx0XHRcdERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCA6XG4gXHRcdFx0XHRcdERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7XG4tXHRcdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4XSA9XG4mIzQzO1x0XHRcdFx0cHBzX3N0YXRlID1cbiBcdFx0XHRcdFx0cGluLVx1MDAzZXBpbiA9PSBwZi1cdTAwM2VkcGxscy5wcHMuYWN0aXZlX2lucHV0ID9cbiBcdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEIDpcbiBcdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcbiBcdFx0XHR9IGVsc2Uge1xuLVx0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxuLVx0XHRcdFx0XHREUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xuLVx0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxuLVx0XHRcdFx0XHREUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xuJiM0MztcdFx0XHRcdGVlY19zdGF0ZSA9IERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7XG4mIzQzO1x0XHRcdFx0cHBzX3N0YXRlID0gRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcbiBcdFx0XHR9XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxuLVx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xuLVx0XHRcdHBpbi1cdTAwM2VzdGF0ZVtwZi1cdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID1cbi1cdFx0XHRcdERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDtcbiBcdFx0fVxuJiM0MztcdFx0LyogQ29tbWl0IG9ubHkgYWZ0ZXIgYSBzdWNjZXNzZnVsIHJlYWQgc28gbG9ja2xlc3MgcmVhZGVycyBuZXZlclxuJiM0MztcdFx0ICogb2JzZXJ2ZSBhIHRyYW5zaWVudCBkaXNjb25uZWN0ZWQgc3RhdGUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChwZi1cdTAwM2VkcGxscy5lZWMuZHBsbF9pZHggXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWClcbiYjNDM7XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPSBlZWNfc3RhdGU7XG4mIzQzO1x0XHRpZiAocGYtXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4IFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpXG4mIzQzO1x0XHRcdHBpbi1cdTAwM2VzdGF0ZVtwZi1cdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID0gcHBzX3N0YXRlO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUOlxuIFx0XHRyZXQgPSBpY2VfYXFfZ2V0X291dHB1dF9waW5fY2ZnKFx1MDAyNnBmLVx1MDAzZWh3LCBwaW4tXHUwMDNlaWR4LFxuQEAgLTc1MCwyMCAmIzQzOzgzMiwxNyBAQCBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW4sXG4gXG4gXHRcdHBhcmVudCBcdTAwMjY9IElDRV9BUUNfR0VUX0NHVV9PVVRfQ0ZHX0RQTExfU1JDX1NFTDtcbiBcdFx0aWYgKElDRV9BUUNfR0VUX0NHVV9PVVRfQ0ZHX09VVF9FTiBcdTAwMjYgcGluLVx1MDAzZWZsYWdzWzBdKSB7XG4tXHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxuLVx0XHRcdFx0cGFyZW50ID09IHBmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeCA/XG4mIzQzO1x0XHRcdGVlY19zdGF0ZSA9IHBhcmVudCA9PSBwZi1cdTAwM2VkcGxscy5lZWMuZHBsbF9pZHggP1xuIFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEIDpcbiBcdFx0XHRcdERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDtcbi1cdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4XSA9XG4tXHRcdFx0XHRwYXJlbnQgPT0gcGYtXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4ID9cbiYjNDM7XHRcdFx0cHBzX3N0YXRlID0gcGFyZW50ID09IHBmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeCA/XG4gXHRcdFx0XHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxuIFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdHBpbi1cdTAwM2VzdGF0ZVtwZi1cdTAwM2VkcGxscy5lZWMuZHBsbF9pZHhdID1cbi1cdFx0XHRcdERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDtcbi1cdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4XSA9XG4tXHRcdFx0XHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XG4gXHRcdH1cbiYjNDM7XHRcdGlmIChwZi1cdTAwM2VkcGxscy5lZWMuZHBsbF9pZHggXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWClcbiYjNDM7XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPSBlZWNfc3RhdGU7XG4mIzQzO1x0XHRpZiAocGYtXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4IFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpXG4mIzQzO1x0XHRcdHBpbi1cdTAwM2VzdGF0ZVtwZi1cdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID0gcHBzX3N0YXRlO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgSUNFX0RQTExfUElOX1RZUEVfUkNMS19JTlBVVDpcbiBcdFx0aWYgKHBmLVx1MDAzZWh3Lm1hY190eXBlID09IElDRV9NQUNfR0VORVJJQ18zS19FODI1KSB7XG5AQCAtMTE2MywzMCAmIzQzOzEyNDIsODUgQEAgaWNlX2RwbGxfaW5wdXRfc3RhdGVfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcdFx0XHRcdCAgICAgIGV4dGFjaywgSUNFX0RQTExfUElOX1RZUEVfSU5QVVQpO1xuIH1cbiBcbi0vKipcbi0gKiBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIgLSBub3RpZnkgdGhlIHBhaXJlZCBTVyBwaW4gYWZ0ZXIgYSBzdGF0ZSBjaGFuZ2Vcbi0gKiBAZDogcG9pbnRlciB0byBkcGxscyBzdHJ1Y3Rcbi0gKiBAY2hhbmdlZDogdGhlIFNXIHBpbiB0aGF0IHdhcyBleHBsaWNpdGx5IGNoYW5nZWQgKGFscmVhZHkgbm90aWZpZWQgYnkgZHBsbCBjb3JlKVxuLSAqXG4tICogU01BIGFuZCBVLkZMIHBpbnMgc2hhcmUgcGh5c2ljYWwgc2lnbmFsIHBhdGhzIGluIHBhaXJzIChTTUExL1UuRkwxIGFuZFxuLSAqIFNNQTIvVS5GTDIpLiAgV2hlbiBvbmUgcGluJiMzOTtzIHJvdXRpbmcgY2hhbmdlcyB2aWEgdGhlIFBDQTk1NzUgR1BJT1xuLSAqIGV4cGFuZGVyLCB0aGUgcGFpcmVkIHBpbiYjMzk7cyBzdGF0ZSBtYXkgYWxzbyBjaGFuZ2UuICBTZW5kIGEgY2hhbmdlXG4tICogbm90aWZpY2F0aW9uIGZvciB0aGUgcGVlciBwaW4gc28gdXNlcnNwYWNlIGNvbnN1bWVycyBtb25pdG9yaW5nIHRoZVxuLSAqIHBlZXIgdmlhIGRwbGwgbmV0bGluayBsZWFybiBhYm91dCB0aGUgdXBkYXRlLlxuLSAqXG4tICogQ29udGV4dDogQ2FsbGVkIGZyb20gZHBsbF9waW5fb3BzIGNhbGxiYWNrcyBhZnRlciBwZi1cdTAwM2VkcGxscy5sb2NrIGlzXG4tICogICAgICAgICAgcmVsZWFzZWQuICBVc2VzIF9fZHBsbF9waW5fY2hhbmdlX250ZigpIGJlY2F1c2UgZHBsbF9sb2NrIGlzXG4tICogICAgICAgICAgc3RpbGwgaGVsZCBieSB0aGUgZHBsbCBuZXRsaW5rIGxheWVyLlxuLSAqL1xuLXN0YXRpYyB2b2lkIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihzdHJ1Y3QgaWNlX2RwbGxzICpkLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpjaGFuZ2VkKVxuJiM0MztzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyB7XG4mIzQzO1x0Ym9vbCBlbmFibGVkO1xuJiM0MztcdHU4IGRwbGxfaWR4O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0MztpY2VfZHBsbF9waW5fY29uZmlnX2dldChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqdGFyZ2V0LFxuJiM0MztcdFx0XHRlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGUsXG4mIzQzO1x0XHRcdHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnICpjb25maWcsXG4mIzQzO1x0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4tXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyO1xuJiM0MztcdGludCByZXQ7XG4gXG4tXHRwZWVyID0gKGNoYW5nZWQgXHUwMDNlPSBkLVx1MDAzZXNtYSBcdTAwMjZcdTAwMjYgY2hhbmdlZCBcdTAwM2MgZC1cdTAwM2VzbWEgJiM0MzsgSUNFX0RQTExfUElOX1NXX05VTSkgP1xuLVx0XHRcdTAwMjZkLVx1MDAzZXVmbFtjaGFuZ2VkLVx1MDAzZWlkeF0gOiBcdTAwMjZkLVx1MDAzZXNtYVtjaGFuZ2VkLVx1MDAzZWlkeF07XG4tXHRpZiAocGVlci1cdTAwM2VwaW4pXG4tXHRcdF9fZHBsbF9waW5fY2hhbmdlX250ZihwZWVyLVx1MDAzZXBpbik7XG4mIzQzO1x0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHR5cGUpIHtcbiYjNDM7XHRjYXNlIElDRV9EUExMX1BJTl9UWVBFX0lOUFVUOlxuJiM0MztcdFx0Y29uZmlnLVx1MDAzZWVuYWJsZWQgPSB0YXJnZXQtXHUwMDNlZmxhZ3NbMF0gXHUwMDI2XG4mIzQzO1x0XHRcdFx0ICBJQ0VfQVFDX0dFVF9DR1VfSU5fQ0ZHX0ZMRzJfSU5QVVRfRU47XG4mIzQzO1x0XHRjb25maWctXHUwMDNlZHBsbF9pZHggPSAwO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0Y2FzZSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ6XG4mIzQzO1x0XHRjb25maWctXHUwMDNlZW5hYmxlZCA9IHRhcmdldC1cdTAwM2VmbGFnc1swXSBcdTAwMjZcbiYjNDM7XHRcdFx0XHQgIElDRV9BUUNfR0VUX0NHVV9PVVRfQ0ZHX09VVF9FTjtcbiYjNDM7XHRcdGlmICghY29uZmlnLVx1MDAzZWVuYWJsZWQpIHtcbiYjNDM7XHRcdFx0Y29uZmlnLVx1MDAzZWRwbGxfaWR4ID0gMDtcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gaWNlX2RwbGxfZ2V0X2ZhbGxiYWNrX2lkeChcdTAwMjZwZi1cdTAwM2VkcGxscywgdGFyZ2V0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRjb25maWctXHUwMDNlZHBsbF9pZHggPSByZXQ7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO2ljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqdGFyZ2V0LFxuJiM0MztcdFx0XHQgICAgZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlLFxuJiM0MztcdFx0XHQgICAgY29uc3Qgc3RydWN0IGljZV9kcGxsX3Bpbl9jb25maWcgKmNvbmZpZyxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaywgaW50IGluaXRfZXJyKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJlc3RvcmVfZXJyLCB1cGRhdGVfZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoY29uZmlnLVx1MDAzZWVuYWJsZWQpXG4mIzQzO1x0XHRyZXN0b3JlX2VyciA9IGljZV9kcGxsX3Bpbl9lbmFibGUoXHUwMDI2cGYtXHUwMDNlaHcsIHRhcmdldCxcbiYjNDM7XHRcdFx0XHRcdFx0ICBjb25maWctXHUwMDNlZHBsbF9pZHgsIHR5cGUsIGV4dGFjayk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmVzdG9yZV9lcnIgPSBpY2VfZHBsbF9waW5fZGlzYWJsZShcdTAwMjZwZi1cdTAwM2VodywgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuJiM0MztcdHVwZGF0ZV9lcnIgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4mIzQzO1x0aWYgKHJlc3RvcmVfZXJyIHx8IHVwZGF0ZV9lcnIpIHtcbiYjNDM7XHRcdGRldl93YXJuKGljZV9wZl90b19kZXYocGYpLFxuJiM0MztcdFx0XHQgXCYjMzQ7RmFpbGVkIHRvIHJvbGxiYWNrIHBpbiBzdGF0ZTogZXJyICVkLCByZXN0b3JlIGVyciAlZCwgdXBkYXRlIGVyciAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0IGluaXRfZXJyLCByZXN0b3JlX2VyciwgdXBkYXRlX2Vycik7XG4mIzQzO1x0XHRyZXR1cm4gcmVzdG9yZV9lcnIgPyByZXN0b3JlX2VyciA6IHVwZGF0ZV9lcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBpY2VfZHBsbF9yZXN0b3JlX3NtYV9jdHJsKHN0cnVjdCBpY2VfcGYgKnBmLCB1OCBvbGRfZGF0YSxcbiYjNDM7XHRcdFx0XHQgICAgIGludCBpbml0X2VycilcbiYjNDM7e1xuJiM0MztcdGludCByZXN0b3JlX2VycjtcbiYjNDM7XG4mIzQzO1x0cmVzdG9yZV9lcnIgPSBpY2Vfd3JpdGVfc21hX2N0cmwoXHUwMDI2cGYtXHUwMDNlaHcsIG9sZF9kYXRhKTtcbiYjNDM7XHRpZiAoIXJlc3RvcmVfZXJyKVxuJiM0MztcdFx0cmVzdG9yZV9lcnIgPSBpY2VfZHBsbF9zd19waW5zX3VwZGF0ZShwZik7XG4mIzQzO1x0aWYgKHJlc3RvcmVfZXJyKVxuJiM0MztcdFx0ZGV2X3dhcm4oaWNlX3BmX3RvX2RldihwZiksXG4mIzQzO1x0XHRcdCBcJiMzNDtGYWlsZWQgdG8gcmVzdG9yZSBTTUEgY29udHJvbDogZXJyICVkLCByZXN0b3JlIGVyciAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0IGluaXRfZXJyLCByZXN0b3JlX2Vycik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXN0b3JlX2VycjtcbiB9XG4gXG4gLyoqXG5AQCAtMTIwNiwzMCAmIzQzOzEzNDAsMzkgQEAgc3RhdGljIGludCBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwLFxuIFx0XHRcdFx0ICAgICAgZW51bSBkcGxsX3Bpbl9kaXJlY3Rpb24gZGlyZWN0aW9uLFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyBwZWVyX2NvbmZpZztcbiBcdHN0cnVjdCBpY2VfZHBsbHMgKmQgPSBcdTAwMjZwLVx1MDAzZXBmLVx1MDAzZWRwbGxzO1xuJiM0MztcdGludCBwZWVyX2RwbGxfaWR4LCByZXN0b3JlX2VyciwgcmV0O1xuJiM0MztcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnRhcmdldCA9IE5VTEw7XG4mIzQzO1x0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlID0gMDtcbiBcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXI7XG4tXHR1OCBkYXRhO1xuLVx0aW50IHJldDtcbiYjNDM7XHR1OCBkYXRhLCBvbGRfZGF0YSA9IDA7XG4gXG4gXHRpZiAocC1cdTAwM2VkaXJlY3Rpb24gPT0gZGlyZWN0aW9uIFx1MDAyNlx1MDAyNiBwLVx1MDAzZWFjdGl2ZSlcbiBcdFx0cmV0dXJuIDA7XG4gXHRyZXQgPSBpY2VfcmVhZF9zbWFfY3RybChcdTAwMjZwLVx1MDAzZXBmLVx1MDAzZWh3LCBcdTAwMjZkYXRhKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0b2xkX2RhdGEgPSBkYXRhO1xuIFxuIFx0c3dpdGNoIChwLVx1MDAzZWlkeCkge1xuIFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFg6XG4tXHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTFfTUFTSztcbi1cdFx0aWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKVxuJiM0MztcdFx0aWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKSB7XG4mIzQzO1x0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTFfVFhfRU47XG4gXHRcdFx0ZGF0YSB8PSBJQ0VfU01BMV9ESVJfRU47XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUExX0RJUl9FTjtcbiYjNDM7XHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMV9UWF9FTjtcbiYjNDM7XHRcdH1cbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElDRV9EUExMX1BJTl9TV18yX0lEWDpcbiBcdFx0aWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQpIHtcbiBcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUEyX0RJUl9FTjtcbi1cdFx0XHRkYXRhIHw9IElDRV9TTUEyX1VGTDJfUlhfRElTO1xuJiM0MztcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUEyX1RYX0VOO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdGRhdGEgXHUwMDI2PSB+KElDRV9TTUEyX1RYX0VOIHwgSUNFX1NNQTJfVUZMMl9SWF9ESVMpO1xuIFx0XHRcdGRhdGEgfD0gSUNFX1NNQTJfRElSX0VOO1xuJiM0MztcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUEyX1VGTDJfUlhfRElTO1xuJiM0MztcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUEyX1RYX0VOO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbkBAIC0xMjQxLDcgJiM0MzsxMzg0LDcgQEAgc3RhdGljIGludCBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwLFxuIFx0XHRcdFx0XHRcdElDRV9EUExMX1BJTl9UWVBFX1NPRlRXQVJFLFxuIFx0XHRcdFx0XHRcdGV4dGFjayk7XG4gXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0Z290byByZXN0b3JlX3NtYTtcbiBcbiBcdC8qIFdoZW4gYSBkaXJlY3Rpb24gY2hhbmdlIGFjdGl2YXRlcyB0aGUgcGFpcmVkIFUuRkwgcGluLCBlbmFibGVcbiBcdCAqIGl0cyBiYWNraW5nIENHVSBwaW4gc28gdGhlIHBpbiByZXBvcnRzIGFzIGNvbm5lY3RlZC4gV2l0aG91dFxuQEAgLTEyNTAsMjUgJiM0MzsxMzkzLDQ2IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQoc3RydWN0IGljZV9kcGxsX3BpbiAqcCxcbiBcdCAqIGJhY2tpbmcgcGluIHdoZW4gVS5GTCBiZWNvbWVzIGluYWN0aXZlIGJlY2F1c2UgdGhlIFNNQSBwaW4gbWF5XG4gXHQgKiBzdGlsbCBiZSB1c2luZyBpdC5cbiBcdCAqL1xuLVx0cGVlciA9IFx1MDAyNmQtXHUwMDNldWZsW3AtXHUwMDNlaWR4XTtcbiYjNDM7XHRwZWVyID0gcC1cdTAwM2VtdXhlZDtcbiBcdGlmIChwZWVyLVx1MDAzZWFjdGl2ZSkge1xuLVx0XHRzdHJ1Y3QgaWNlX2RwbGxfcGluICp0YXJnZXQ7XG4tXHRcdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZTtcbi1cbiBcdFx0aWYgKHBlZXItXHUwMDNlb3V0cHV0KSB7XG4gXHRcdFx0dGFyZ2V0ID0gcGVlci1cdTAwM2VvdXRwdXQ7XG4gXHRcdFx0dHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDtcbi1cdFx0fSBlbHNlIHtcbiYjNDM7XHRcdH0gZWxzZSBpZiAocGVlci1cdTAwM2VpbnB1dCkge1xuIFx0XHRcdHRhcmdldCA9IHBlZXItXHUwMDNlaW5wdXQ7XG4gXHRcdFx0dHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX0lOUFVUO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdFx0Z290byByZXN0b3JlX3NtYTtcbiBcdFx0fVxuLVx0XHRyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKFx1MDAyNnAtXHUwMDNlcGYtXHUwMDNlaHcsIHRhcmdldCxcbi1cdFx0XHRcdFx0ICBkLVx1MDAzZWVlYy5kcGxsX2lkeCwgdHlwZSwgZXh0YWNrKTtcbi1cdFx0aWYgKCFyZXQpXG4tXHRcdFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwLVx1MDAzZXBmLCB0YXJnZXQsXG4tXHRcdFx0XHRcdFx0XHR0eXBlLCBleHRhY2spO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHAtXHUwMDNlcGYsIHRhcmdldCwgdHlwZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIFx1MDAyNnBlZXJfY29uZmlnLCBleHRhY2spO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byByZXN0b3JlX3NtYTtcbiYjNDM7XG4mIzQzO1x0XHRwZWVyX2RwbGxfaWR4ID0gaWNlX2RwbGxfZ2V0X2ZhbGxiYWNrX2lkeChkLCB0YXJnZXQpO1xuJiM0MztcdFx0aWYgKHBlZXJfZHBsbF9pZHggXHUwMDNjIDApXG4mIzQzO1x0XHRcdHBlZXJfZHBsbF9pZHggPSBkLVx1MDAzZWVlYy5kcGxsX2lkeDtcbiYjNDM7XHRcdHJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoXHUwMDI2cC1cdTAwM2VwZi1cdTAwM2VodywgdGFyZ2V0LCBwZWVyX2RwbGxfaWR4LFxuJiM0MztcdFx0XHRcdFx0ICB0eXBlLCBleHRhY2spO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byByZXN0b3JlX3BlZXI7XG4mIzQzO1x0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHAtXHUwMDNlcGYsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gcmVzdG9yZV9wZWVyO1xuIFx0fVxuIFxuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7cmVzdG9yZV9wZWVyOlxuJiM0MztcdHJlc3RvcmVfZXJyID1cbiYjNDM7XHRcdGljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShwLVx1MDAzZXBmLCB0YXJnZXQsIHR5cGUsIFx1MDAyNnBlZXJfY29uZmlnLFxuJiM0MztcdFx0XHRcdFx0ICAgIGV4dGFjaywgcmV0KTtcbiYjNDM7XHRpZiAocmVzdG9yZV9lcnIpXG4mIzQzO1x0XHRyZXQgPSByZXN0b3JlX2VycjtcbiYjNDM7cmVzdG9yZV9zbWE6XG4mIzQzO1x0aWNlX2RwbGxfcmVzdG9yZV9zbWFfY3RybChwLVx1MDAzZXBmLCBvbGRfZGF0YSwgcmV0KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTEyOTQsMTQgJiM0MzsxNDU4LDE4IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcdFx0XHQgICBlbnVtIGRwbGxfcGluX3N0YXRlIHN0YXRlLFxuIFx0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4mIzQzO1x0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSBwZWVyX3R5cGUgPSAwLCB0eXBlO1xuIFx0c3RydWN0IGljZV9kcGxsX3BpbiAqcCA9IHBpbl9wcml2LCAqdGFyZ2V0O1xuJiM0MztcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXJfdGFyZ2V0ID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyBwZWVyX2NvbmZpZztcbiYjNDM7XHRzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyBvbGRfY29uZmlnO1xuJiM0MztcdGludCBwZWVyX2RwbGxfaWR4LCByZXN0b3JlX2VyciwgcmV0O1xuIFx0c3RydWN0IGljZV9kcGxsICpkID0gZHBsbF9wcml2O1xuLVx0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlO1xuIFx0c3RydWN0IGljZV9wZiAqcGYgPSBwLVx1MDAzZXBmO1xuIFx0c3RydWN0IGljZV9odyAqaHc7XG4mIzQzO1x0dTggb2xkX2RhdGEgPSAwO1xuIFx0Ym9vbCBlbmFibGU7XG4gXHR1OCBkYXRhO1xuLVx0aW50IHJldDtcbiBcbiBcdGlmIChpY2VfZHBsbF9pc19yZXNldChwZiwgZXh0YWNrKSlcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbkBAIC0xMzExLDE0ICYjNDM7MTQ3OSwxNyBAQCBpY2VfZHBsbF91ZmxfcGluX3N0YXRlX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXG4gXHRyZXQgPSBpY2VfcmVhZF9zbWFfY3RybChodywgXHUwMDI2ZGF0YSk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRvbGRfZGF0YSA9IGRhdGE7XG4gXG4gXHRyZXQgPSAtRUlOVkFMO1xuIFx0c3dpdGNoIChwLVx1MDAzZWlkeCkge1xuIFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFg6XG4tXHRcdGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQpIHtcbiYjNDM7XHRcdHN3aXRjaCAoc3RhdGUpIHtcbiYjNDM7XHRcdGNhc2UgRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEOlxuIFx0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTFfTUFTSztcbiBcdFx0XHRlbmFibGUgPSB0cnVlO1xuLVx0XHR9IGVsc2UgaWYgKHN0YXRlID09IERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRCkge1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOlxuIFx0XHRcdC8qIFNraXAgaWYgVS5GTDEgaXMgbm90IGFjdGl2ZSwgc2V0dGluZyBUWF9FTlxuIFx0XHRcdCAqIHdoaWxlIERJUl9FTiBpcyBzZXQgd291bGQgYWxzbyBkZWFjdGl2YXRlXG4gXHRcdFx0ICogdGhlIHBhaXJlZCBTTUExIG91dHB1dC5cbkBAIC0xMzI5LDE4ICYjNDM7MTUwMCwyMSBAQCBpY2VfZHBsbF91ZmxfcGluX3N0YXRlX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXG4gXHRcdFx0fVxuIFx0XHRcdGRhdGEgfD0gSUNFX1NNQTFfVFhfRU47XG4gXHRcdFx0ZW5hYmxlID0gZmFsc2U7XG4tXHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0ZGVmYXVsdDpcbiBcdFx0XHRnb3RvIHVubG9jaztcbiBcdFx0fVxuIFx0XHR0YXJnZXQgPSBwLVx1MDAzZW91dHB1dDtcbiBcdFx0dHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElDRV9EUExMX1BJTl9TV18yX0lEWDpcbi1cdFx0aWYgKHN0YXRlID09IERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEUpIHtcbiYjNDM7XHRcdHN3aXRjaCAoc3RhdGUpIHtcbiYjNDM7XHRcdGNhc2UgRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTpcbiBcdFx0XHRkYXRhIHw9IElDRV9TTUEyX0RJUl9FTjtcbiBcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUEyX1VGTDJfUlhfRElTO1xuIFx0XHRcdGVuYWJsZSA9IHRydWU7XG4tXHRcdH0gZWxzZSBpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEKSB7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ6XG4gXHRcdFx0LyogU2tpcCBpZiBVLkZMMiBpcyBub3QgYWN0aXZlLCBzZXR0aW5nXG4gXHRcdFx0ICogVUZMMl9SWF9ESVMgY291bGQgYWxzbyBkaXNhYmxlIHRoZSBwYWlyZWRcbiBcdFx0XHQgKiBTTUEyIGlucHV0LlxuQEAgLTEzNTIsNyAmIzQzOzE1MjYsOCBAQCBpY2VfZHBsbF91ZmxfcGluX3N0YXRlX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXG4gXHRcdFx0fVxuIFx0XHRcdGRhdGEgfD0gSUNFX1NNQTJfVUZMMl9SWF9ESVM7XG4gXHRcdFx0ZW5hYmxlID0gZmFsc2U7XG4tXHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0ZGVmYXVsdDpcbiBcdFx0XHRnb3RvIHVubG9jaztcbiBcdFx0fVxuIFx0XHR0YXJnZXQgPSBwLVx1MDAzZWlucHV0O1xuQEAgLTEzNjQsMjMgJiM0MzsxNTM5LDc0IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcbiBcdHJldCA9IGljZV93cml0ZV9zbWFfY3RybChodywgZGF0YSk7XG4gXHRpZiAocmV0KVxuLVx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdGdvdG8gcmVzdG9yZV9zbWFfY3RybDtcbiBcdHJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHAsIElDRV9EUExMX1BJTl9UWVBFX1NPRlRXQVJFLFxuIFx0XHRcdFx0XHRleHRhY2spO1xuIFx0aWYgKHJldClcbi1cdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XG4mIzQzO1xuJiM0MztcdHJldCA9IGljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHBmLCB0YXJnZXQsIHR5cGUsIFx1MDAyNm9sZF9jb25maWcsIGV4dGFjayk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gcmVzdG9yZV9zbWFfY3RybDtcbiBcbiBcdGlmIChlbmFibGUpXG4gXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoaHcsIHRhcmdldCwgZC1cdTAwM2VkcGxsX2lkeCwgdHlwZSwgZXh0YWNrKTtcbiBcdGVsc2VcbiBcdFx0cmV0ID0gaWNlX2RwbGxfcGluX2Rpc2FibGUoaHcsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcbi1cdGlmICghcmV0KVxuLVx0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gcmVzdG9yZV90YXJnZXQ7XG4mIzQzO1x0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xuJiM0MztcbiYjNDM7XHRpZiAoZW5hYmxlIFx1MDAyNlx1MDAyNiBwLVx1MDAzZW11eGVkIFx1MDAyNlx1MDAyNiBwLVx1MDAzZW11eGVkLVx1MDAzZWFjdGl2ZSkge1xuJiM0MztcdFx0aWNlX2RwbGxfZ2V0X3BlZXJfdGFyZ2V0KHAtXHUwMDNlbXV4ZWQsIFx1MDAyNnBlZXJfdGFyZ2V0LCBcdTAwMjZwZWVyX3R5cGUpO1xuJiM0MztcdFx0aWYgKCFwZWVyX3RhcmdldCkge1xuJiM0MztcdFx0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cmV0ID0gaWNlX2RwbGxfcGluX2NvbmZpZ19nZXQocGYsIHBlZXJfdGFyZ2V0LCBwZWVyX3R5cGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBcdTAwMjZwZWVyX2NvbmZpZywgZXh0YWNrKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gcmVzdG9yZV90YXJnZXQ7XG4mIzQzO1xuJiM0MztcdFx0cGVlcl9kcGxsX2lkeCA9IGljZV9kcGxsX2dldF9mYWxsYmFja19pZHgoXHUwMDI2cGYtXHUwMDNlZHBsbHMsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICBwZWVyX3RhcmdldCk7XG4mIzQzO1x0XHRpZiAocGVlcl9kcGxsX2lkeCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cGVlcl9kcGxsX2lkeCA9IGQtXHUwMDNlZHBsbF9pZHg7XG4mIzQzO1x0XHRyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKFx1MDAyNnBmLVx1MDAzZWh3LCBwZWVyX3RhcmdldCwgcGVlcl9kcGxsX2lkeCxcbiYjNDM7XHRcdFx0XHRcdCAgcGVlcl90eXBlLCBleHRhY2spO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byByZXN0b3JlX3BlZXI7XG4mIzQzO1x0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLFxuJiM0MztcdFx0XHRcdFx0XHRleHRhY2spO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byByZXN0b3JlX3BlZXI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRnb3RvIHVubG9jaztcbiYjNDM7XG4mIzQzO3Jlc3RvcmVfcGVlcjpcbiYjNDM7XHRyZXN0b3JlX2VyciA9XG4mIzQzO1x0XHRpY2VfZHBsbF9waW5fY29uZmlnX3Jlc3RvcmUocGYsIHBlZXJfdGFyZ2V0LCBwZWVyX3R5cGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgXHUwMDI2cGVlcl9jb25maWcsIGV4dGFjaywgcmV0KTtcbiYjNDM7XHRpZiAocmVzdG9yZV9lcnIpXG4mIzQzO1x0XHRyZXQgPSByZXN0b3JlX2VycjtcbiYjNDM7cmVzdG9yZV90YXJnZXQ6XG4mIzQzO1x0cmVzdG9yZV9lcnIgPVxuJiM0MztcdFx0aWNlX2RwbGxfcGluX2NvbmZpZ19yZXN0b3JlKHBmLCB0YXJnZXQsIHR5cGUsIFx1MDAyNm9sZF9jb25maWcsXG4mIzQzO1x0XHRcdFx0XHQgICAgZXh0YWNrLCByZXQpO1xuJiM0MztcdGlmIChyZXN0b3JlX2VycilcbiYjNDM7XHRcdHJldCA9IHJlc3RvcmVfZXJyO1xuJiM0MztyZXN0b3JlX3NtYV9jdHJsOlxuJiM0MztcdHJlc3RvcmVfZXJyID0gaWNlX2RwbGxfcmVzdG9yZV9zbWFfY3RybChwZiwgb2xkX2RhdGEsIHJldCk7XG4mIzQzO1x0aWYgKHJlc3RvcmVfZXJyKVxuJiM0MztcdFx0cmV0ID0gcmVzdG9yZV9lcnI7XG4gXG4gdW5sb2NrOlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBmLVx1MDAzZWRwbGxzLmxvY2spO1xuIFx0aWYgKCFyZXQpXG4tXHRcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihcdTAwMjZwZi1cdTAwM2VkcGxscywgcCk7XG4mIzQzO1x0XHRpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIocCk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC0xNDYzLDQ0ICYjNDM7MTY4OSwxNjggQEAgaWNlX2RwbGxfc21hX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0XHRcdCAgIGVudW0gZHBsbF9waW5fc3RhdGUgc3RhdGUsXG4gXHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiYjNDM7XHRpbnQgcGVlcl9kcGxsX2lkeCwgcmVzdG9yZV9lcnIsIHJldCA9IC1FSU5WQUw7XG4gXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpzbWEgPSBwaW5fcHJpdiwgKnRhcmdldDtcbiYjNDM7XHRlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHBlZXJfdHlwZSA9IDAsIHR5cGU7XG4mIzQzO1x0c3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcl90YXJnZXQgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIHBlZXJfY29uZmlnO1xuJiM0MztcdHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIG9sZF9jb25maWc7XG4gXHRzdHJ1Y3QgaWNlX2RwbGwgKmQgPSBkcGxsX3ByaXY7XG4gXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHNtYS1cdTAwM2VwZjtcbi1cdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZTtcbiYjNDM7XHR1OCBvbGRfZGF0YSA9IDA7XG4gXHRib29sIGVuYWJsZTtcbi1cdGludCByZXQ7XG4gXG4gXHRpZiAoaWNlX2RwbGxfaXNfcmVzZXQocGYsIGV4dGFjaykpXG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnBmLVx1MDAzZWRwbGxzLmxvY2spO1xuLVx0aWYgKCFzbWEtXHUwMDNlYWN0aXZlKSB7XG4tXHRcdHJldCA9IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHNtYSwgc21hLVx1MDAzZWRpcmVjdGlvbiwgZXh0YWNrKTtcbi1cdFx0aWYgKHJldClcbiYjNDM7XHRzd2l0Y2ggKHN0YXRlKSB7XG4mIzQzO1x0Y2FzZSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOlxuJiM0MztcdFx0LyogUmVqZWN0IGRpcmVjdGlvbi1taXNtYXRjaGVkIHJlcXVlc3RzOiBTRUxFQ1RBQkxFICYjNDM7IE9VVFBVVFxuJiM0MztcdFx0ICogaXMgYW4gaW52YWxpZCBjb21iaW5hdGlvbiwgcmV0dXJuIC1FSU5WQUwgaW4gdGhpcyBjYXNlXG4mIzQzO1x0XHQgKiBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIGRpc2FibGluZyB0aGUgcGluLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoc21hLVx1MDAzZWRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKSB7XG4mIzQzO1x0XHRcdGVuYWJsZSA9IGZhbHNlO1xuJiM0MztcdFx0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGVuYWJsZSA9IHRydWU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDpcbiYjNDM7XHRcdC8qIFJlamVjdCBkaXJlY3Rpb24tbWlzbWF0Y2hlZCByZXF1ZXN0czogQ09OTkVDVEVEICYjNDM7IElOUFVUXG4mIzQzO1x0XHQgKiBpcyBhbiBpbnZhbGlkIGNvbWJpbmF0aW9uLCByZXR1cm4gLUVJTlZBTCBpbiB0aGlzIGNhc2VcbiYjNDM7XHRcdCAqIGltbWVkaWF0ZWx5IGluc3RlYWQgb2YgZGlzYWJsaW5nIHRoZSBwaW4uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChzbWEtXHUwMDNlZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9JTlBVVCkge1xuJiM0MztcdFx0XHRlbmFibGUgPSBmYWxzZTtcbiYjNDM7XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGVuYWJsZSA9IHRydWU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDpcbiYjNDM7XHRcdGVuYWJsZSA9IGZhbHNlO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiBcdH1cbi1cdGlmIChzbWEtXHUwMDNlZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9JTlBVVCkge1xuLVx0XHRlbmFibGUgPSBzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHNtYS1cdTAwM2VkaXJlY3Rpb24pIHtcbiYjNDM7XHRjYXNlIERQTExfUElOX0RJUkVDVElPTl9JTlBVVDpcbiBcdFx0dGFyZ2V0ID0gc21hLVx1MDAzZWlucHV0O1xuIFx0XHR0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfSU5QVVQ7XG4tXHR9IGVsc2Uge1xuLVx0XHRlbmFibGUgPSBzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQ6XG4gXHRcdHRhcmdldCA9IHNtYS1cdTAwM2VvdXRwdXQ7XG4gXHRcdHR5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuIFx0fVxuIFxuLVx0aWYgKGVuYWJsZSlcbiYjNDM7XHRpZiAoIXNtYS1cdTAwM2VhY3RpdmUpIHtcbiYjNDM7XHRcdHJldCA9IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHNtYSwgc21hLVx1MDAzZWRpcmVjdGlvbiwgZXh0YWNrKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGVuYWJsZSkge1xuJiM0MztcdFx0dTggZGF0YTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBpY2VfcmVhZF9zbWFfY3RybChcdTAwMjZwZi1cdTAwM2VodywgXHUwMDI2ZGF0YSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdG9sZF9kYXRhID0gZGF0YTtcbiYjNDM7XHRcdHN3aXRjaCAoc21hLVx1MDAzZWlkeCkge1xuJiM0MztcdFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFg6XG4mIzQzO1x0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTFfVFhfRU47XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFg6XG4mIzQzO1x0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTJfVUZMMl9SWF9ESVM7XG4mIzQzO1x0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTJfVFhfRU47XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXQgPSBpY2Vfd3JpdGVfc21hX2N0cmwoXHUwMDI2cGYtXHUwMDNlaHcsIGRhdGEpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byByZXN0b3JlX3NtYV9jdHJsO1xuJiM0MztcdFx0cmV0ID0gaWNlX2RwbGxfc3dfcGluc191cGRhdGUocGYpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byByZXN0b3JlX3NtYV9jdHJsO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHBmLCB0YXJnZXQsIHR5cGUsIFx1MDAyNm9sZF9jb25maWcsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBleHRhY2spO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byByZXN0b3JlX3NtYV9jdHJsO1xuIFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKFx1MDAyNnBmLVx1MDAzZWh3LCB0YXJnZXQsIGQtXHUwMDNlZHBsbF9pZHgsIHR5cGUsXG4gXHRcdFx0XHRcdCAgZXh0YWNrKTtcbi1cdGVsc2Vcbi1cdFx0cmV0ID0gaWNlX2RwbGxfcGluX2Rpc2FibGUoXHUwMDI2cGYtXHUwMDNlaHcsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcbi1cdGlmICghcmV0KVxuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byByZXN0b3JlX3RhcmdldDtcbiYjNDM7XHRcdC8qIFJlZnJlc2ggdGFyZ2V0IHN0YXRlIGJlZm9yZSBwZWVyLXNpZGUgb3BlcmF0aW9ucy4gKi9cbiBcdFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byByZXN0b3JlX3RhcmdldDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc21hLVx1MDAzZW11eGVkIFx1MDAyNlx1MDAyNiBzbWEtXHUwMDNlbXV4ZWQtXHUwMDNlYWN0aXZlKSB7XG4mIzQzO1x0XHRcdGljZV9kcGxsX2dldF9wZWVyX3RhcmdldChzbWEtXHUwMDNlbXV4ZWQsIFx1MDAyNnBlZXJfdGFyZ2V0LFxuJiM0MztcdFx0XHRcdFx0XHQgXHUwMDI2cGVlcl90eXBlKTtcbiYjNDM7XHRcdFx0aWYgKCFwZWVyX3RhcmdldCkge1xuJiM0MztcdFx0XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdFx0Z290byByZXN0b3JlX3RhcmdldDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0gaWNlX2RwbGxfcGluX2NvbmZpZ19nZXQocGYsIHBlZXJfdGFyZ2V0LCBwZWVyX3R5cGUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIFx1MDAyNnBlZXJfY29uZmlnLCBleHRhY2spO1xuJiM0MztcdFx0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRcdGdvdG8gcmVzdG9yZV90YXJnZXQ7XG4mIzQzO1xuJiM0MztcdFx0XHRwZWVyX2RwbGxfaWR4ID1cbiYjNDM7XHRcdFx0XHRpY2VfZHBsbF9nZXRfZmFsbGJhY2tfaWR4KFx1MDAyNnBmLVx1MDAzZWRwbGxzLCBwZWVyX3RhcmdldCk7XG4mIzQzO1x0XHRcdGlmIChwZWVyX2RwbGxfaWR4IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdHBlZXJfZHBsbF9pZHggPSBkLVx1MDAzZWRwbGxfaWR4O1xuJiM0MztcdFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKFx1MDAyNnBmLVx1MDAzZWh3LCBwZWVyX3RhcmdldCxcbiYjNDM7XHRcdFx0XHRcdFx0ICBwZWVyX2RwbGxfaWR4LCBwZWVyX3R5cGUsIGV4dGFjayk7XG4mIzQzO1x0XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdFx0Z290byByZXN0b3JlX3BlZXI7XG4mIzQzO1x0XHRcdHJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHBlZXJfdGFyZ2V0LCBwZWVyX3R5cGUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ZXh0YWNrKTtcbiYjNDM7XHRcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0XHRnb3RvIHJlc3RvcmVfcGVlcjtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmV0ID0gaWNlX2RwbGxfcGluX2Rpc2FibGUoXHUwMDI2cGYtXHUwMDNlaHcsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcbiYjNDM7XHRcdGlmICghcmV0KVxuJiM0MztcdFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ZXh0YWNrKTtcbiYjNDM7XHR9XG4mIzQzO1x0Z290byB1bmxvY2s7XG4mIzQzO1xuJiM0MztyZXN0b3JlX3BlZXI6XG4mIzQzO1x0cmVzdG9yZV9lcnIgPVxuJiM0MztcdFx0aWNlX2RwbGxfcGluX2NvbmZpZ19yZXN0b3JlKHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLFxuJiM0MztcdFx0XHRcdFx0ICAgIFx1MDAyNnBlZXJfY29uZmlnLCBleHRhY2ssIHJldCk7XG4mIzQzO1x0aWYgKHJlc3RvcmVfZXJyKVxuJiM0MztcdFx0cmV0ID0gcmVzdG9yZV9lcnI7XG4mIzQzO3Jlc3RvcmVfdGFyZ2V0OlxuJiM0MztcdHJlc3RvcmVfZXJyID1cbiYjNDM7XHRcdGljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShwZiwgdGFyZ2V0LCB0eXBlLCBcdTAwMjZvbGRfY29uZmlnLFxuJiM0MztcdFx0XHRcdFx0ICAgIGV4dGFjaywgcmV0KTtcbiYjNDM7XHRpZiAocmVzdG9yZV9lcnIpXG4mIzQzO1x0XHRyZXQgPSByZXN0b3JlX2VycjtcbiYjNDM7cmVzdG9yZV9zbWFfY3RybDpcbiYjNDM7XHRyZXN0b3JlX2VyciA9IGljZV9kcGxsX3Jlc3RvcmVfc21hX2N0cmwocGYsIG9sZF9kYXRhLCByZXQpO1xuJiM0MztcdGlmIChyZXN0b3JlX2VycilcbiYjNDM7XHRcdHJldCA9IHJlc3RvcmVfZXJyO1xuIFxuIHVubG9jazpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZwZi1cdTAwM2VkcGxscy5sb2NrKTtcbiBcdGlmICghcmV0KVxuLVx0XHRpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoXHUwMDI2cGYtXHUwMDNlZHBsbHMsIHNtYSk7XG4mIzQzO1x0XHRpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoc21hKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTE2OTcsNyAmIzQzOzIwNDcsNyBAQCBpY2VfZHBsbF9waW5fc21hX2RpcmVjdGlvbl9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0cmV0ID0gaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQocCwgZGlyZWN0aW9uLCBleHRhY2spO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBmLVx1MDAzZWRwbGxzLmxvY2spO1xuIFx0aWYgKCFyZXQpXG4tXHRcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihcdTAwMjZwZi1cdTAwM2VkcGxscywgcCk7XG4mIzQzO1x0XHRpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIocCk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC00NTE5LDYgJiM0Mzs0ODY5LDggQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdFx0aWYgKHBpbi1cdTAwM2VpbnB1dC1cdTAwM2VyZWZfc3luYylcbiBcdFx0XHRwaW4tXHUwMDNlcmVmX3N5bmMgPSBwaW4tXHUwMDNlaW5wdXQtXHUwMDNlcmVmX3N5bmMgLSBwaW5fYWJzX2lkeDtcbiBcdFx0cGluLVx1MDAzZW91dHB1dCA9IFx1MDAyNmQtXHUwMDNlb3V0cHV0c1tJQ0VfRFBMTF9QSU5fU1dfT1VUUFVUX0FCUyhpKV07XG4mIzQzO1x0XHRwaW4tXHUwMDNlbXV4ZWQgPSBcdTAwMjZkLVx1MDAzZXVmbFtpXTtcbiYjNDM7XG4gXHRcdGljZV9kcGxsX3BoYXNlX3JhbmdlX3NldChcdTAwMjZwaW4tXHUwMDNlcHJvcC5waGFzZV9yYW5nZSwgcGhhc2VfYWRqX21heCk7XG4gXHR9XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJQ0VfRFBMTF9QSU5fU1dfTlVNOyBpJiM0MzsmIzQzOykge1xuQEAgLTQ1MjgsNyAmIzQzOzQ4ODAsOCBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0XHRwaW4tXHUwMDNlcHJvcC5jYXBhYmlsaXRpZXMgPSBjYXBzO1xuIFx0XHRwaW4tXHUwMDNlcGYgPSBwZjtcbiBcdFx0cGluLVx1MDAzZXByb3AuYm9hcmRfbGFiZWwgPSBpY2VfZHBsbF9zd19waW5fdWZsW2ldO1xuLVx0XHRpZiAoaSA9PSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFgpIHtcbiYjNDM7XHRcdHN3aXRjaCAoaSkge1xuJiM0MztcdFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFg6XG4gXHRcdFx0cGluLVx1MDAzZWRpcmVjdGlvbiA9IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQ7XG4gXHRcdFx0cGluX2Fic19pZHggPSBJQ0VfRFBMTF9QSU5fU1dfT1VUUFVUX0FCUyhpKTtcbiBcdFx0XHRwaW4tXHUwMDNlcHJvcC5mcmVxX3N1cHBvcnRlZCA9XG5AQCAtNDUzOCw3ICYjNDM7NDg5MSw4IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3N3X3BpbnMoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRcdFx0cGluLVx1MDAzZXByb3AuZnJlcV9zdXBwb3J0ZWRfbnVtID0gZnJlcV9zdXBwX251bTtcbiBcdFx0XHRwaW4tXHUwMDNlaW5wdXQgPSBOVUxMO1xuIFx0XHRcdHBpbi1cdTAwM2VvdXRwdXQgPSBcdTAwMjZkLVx1MDAzZW91dHB1dHNbcGluX2Fic19pZHhdO1xuLVx0XHR9IGVsc2UgaWYgKGkgPT0gSUNFX0RQTExfUElOX1NXXzJfSURYKSB7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFg6XG4gXHRcdFx0cGluLVx1MDAzZWRpcmVjdGlvbiA9IERQTExfUElOX0RJUkVDVElPTl9JTlBVVDtcbiBcdFx0XHRwaW5fYWJzX2lkeCA9IElDRV9EUExMX1BJTl9TV19JTlBVVF9BQlMoaSkgJiM0MztcbiBcdFx0XHRcdCAgICAgIGlucHV0X2lkeF9vZmZzZXQ7XG5AQCAtNDU1MSw3ICYjNDM7NDkwNSwxMiBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0XHRcdHBpbi1cdTAwM2Vwcm9wLmNhcGFiaWxpdGllcyA9XG4gXHRcdFx0XHQoRFBMTF9QSU5fQ0FQQUJJTElUSUVTX1BSSU9SSVRZX0NBTl9DSEFOR0UgfFxuIFx0XHRcdFx0IGNhcHMpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdGRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksIFwmIzM0O0ludmFsaWQgVS5GTCBwaW4gaW5kZXg6ICVkXFxuXCYjMzQ7LCBpKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiYjNDM7XHRcdHBpbi1cdTAwM2VtdXhlZCA9IFx1MDAyNmQtXHUwMDNlc21hW2ldO1xuIFx0XHRpY2VfZHBsbF9waGFzZV9yYW5nZV9zZXQoXHUwMDI2cGluLVx1MDAzZXByb3AucGhhc2VfcmFuZ2UsIHBoYXNlX2Fkal9tYXgpO1xuIFx0fVxuIFxuQEAgLTQ3NDMsNiAmIzQzOzUxMDIsMTMgQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm8oc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgY2d1KVxuIFxuIFx0ZGUtXHUwMDNlZHBsbF9pZHggPSBhYmlsaXRpZXMuZWVjX2RwbGxfaWR4O1xuIFx0ZHAtXHUwMDNlZHBsbF9pZHggPSBhYmlsaXRpZXMucHBzX2RwbGxfaWR4O1xuJiM0MztcdGlmIChkZS1cdTAwM2VkcGxsX2lkeCBcdTAwM2U9IElDRV9EUExMX1JDTEtfTlVNX01BWCB8fFxuJiM0MztcdCAgICBkcC1cdTAwM2VkcGxsX2lkeCBcdTAwM2U9IElDRV9EUExMX1JDTEtfTlVNX01BWCkge1xuJiM0MztcdFx0ZGV2X2VycihpY2VfcGZfdG9fZGV2KHBmKSxcbiYjNDM7XHRcdFx0XCYjMzQ7aW52YWxpZCBkcGxsX2lkeCBpbiBjZ3UgYWJpbGl0aWVzOiBlZWM9JXUsIHBwcz0ldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ZGUtXHUwMDNlZHBsbF9pZHgsIGRwLVx1MDAzZWRwbGxfaWR4KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiBcdGQtXHUwMDNlbnVtX2lucHV0cyA9IGFiaWxpdGllcy5udW1faW5wdXRzO1xuIFx0ZC1cdTAwM2VudW1fb3V0cHV0cyA9IGFiaWxpdGllcy5udW1fb3V0cHV0cztcbiBcdGQtXHUwMDNlaW5wdXRfcGhhc2VfYWRqX21heCA9IGxlMzJfdG9fY3B1KGFiaWxpdGllcy5tYXhfaW5fcGhhc2VfYWRqKSBcdTAwMjZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oXG5pbmRleCAxMDNiYTNlNDkwNjgyLi5kYzZmMDk2YmYwNjlhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oXG5AQCAtNzYsNiAmIzQzOzc2LDcgQEAgc3RydWN0IGljZV9kcGxsX3BpbiB7XG4gXHRzMzIgcGhhc2VfYWRqdXN0O1xuIFx0c3RydWN0IGljZV9kcGxsX3BpbiAqaW5wdXQ7XG4gXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpvdXRwdXQ7XG4mIzQzO1x0c3RydWN0IGljZV9kcGxsX3BpbiAqbXV4ZWQ7XG4gXHRlbnVtIGRwbGxfcGluX2RpcmVjdGlvbiBkaXJlY3Rpb247XG4gXHRzNjQgcGhhc2Vfb2Zmc2V0O1xuIFx0dTggc3RhdHVzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjQzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIGNoYW5nZXMgbW9kaWZ5IHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIChpY2UpIGRyaXZlciBEUExMIHBpbiBoYW5kbGluZy4gVGhlIGljZSBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgSW50ZWwgRTgwMCBzZXJpZXMgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxYjBmMDY2MzBmODQ0NDJmODcwNTI2MmUxMDNmY2NkOGJiZDFjNTJkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMjE6NDM6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jCmluZGV4IDg1YTc0Y2Q2ZWExZjMuLmNmZmM5ZDczN2RjMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jCkBAIC04OSw2ICYjNDM7ODksMjkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9mcmVxdWVuY3kgaWNlX2VzeW5jX3JhbmdlW10gPSB7CiAJRFBMTF9QSU5fRlJFUVVFTkNZX1JBTkdFKDAsIERQTExfUElOX0ZSRVFVRU5DWV8xX0haKSwKIH07CiAKJiM0MzsvKgomIzQzOyAqIFNNQTEvVS5GTDEgTVVYIHRhYmxlCiYjNDM7IComIzQzOy0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLSYjNDM7CiYjNDM7ICp8ICAgICAgICAgICAgICAgIHwgU01BMV9ESVJfRU4gfCBTTUExX1RYX0VOIHwKJiM0MzsgKiYjNDM7LS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tJiM0MzsKJiM0MzsgKnxTTUExIFJYIEVuYWJsZSAgfCAgICAgICAwICAgICB8ICAgICAgeCAgICAgfAomIzQzOyAqfHUuRkwxIFRYIEVuYWJsZSB8ICAgICAgIDAgICAgIHwgICAgICAwICAgICB8CiYjNDM7ICp8U01BMSBUWCBFbmFibGUgIHwgICAgICAgMSAgICAgfCAgICAgIDAgICAgIHwKJiM0MzsgKnxBbGwgRGlzYWJsZSAgICAgfCAgICAgICAxICAgICB8ICAgICAgMSAgICAgfAomIzQzOyAqJiM0MzstLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0mIzQzOwomIzQzOyAqCiYjNDM7ICogU01BMi9VLkZMMiBNVVggdGFibGUKJiM0MzsgKiYjNDM7LS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0mIzQzOwomIzQzOyAqfCAgICAgICAgICAgICAgICB8IFNNQTJfRElSX0VOIHwgU01BMl9UWF9FTiB8IFVGTDJfUlhfRU4gfAomIzQzOyAqJiM0MzstLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLSYjNDM7CiYjNDM7ICp8U01BMiBSWCBFbmFibGUgIHwgICAgICAgMCAgICAgfCAgICAgIHggICAgIHwgICAgIHggICAgICB8CiYjNDM7ICp8dS5GTDIgUlggRW5hYmxlIHwgICAgICAgMSAgICAgfCAgICAgIHggICAgIHwgICAgIDAgICAgICB8CiYjNDM7ICp8U01BMiBUWCBFbmFibGUgIHwgICAgICAgMSAgICAgfCAgICAgIDAgICAgIHwgICAgIHggICAgICB8CiYjNDM7ICp8U01BMiBEaXNhYmxlICAgIHwgICAgICAgMSAgICAgfCAgICAgIDEgICAgIHwgICAgIHggICAgICB8CiYjNDM7ICp8QWxsIERpc2FibGUgICAgIHwgICAgICAgMSAgICAgfCAgICAgIDEgICAgIHwgICAgIDEgICAgICB8CiYjNDM7IComIzQzOy0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tJiM0MzsKJiM0MzsgKi8KJiM0MzsKIC8qKgogICogaWNlX2RwbGxfaXNfc3dfcGluIC0gY2hlY2sgaWYgZ2l2ZW4gcGluIHNoYWxsIGJlIGNvbnRyb2xsZWQgYnkgU1cKICAqIEBwZjogcHJpdmF0ZSBib2FyZCBzdHJ1Y3R1cmUKQEAgLTQ0Myw2ICYjNDM7NDY2LDQwIEBAIGljZV9kcGxsX3N3X3Bpbl9mcmVxdWVuY3lfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdiwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIGludCBpY2VfZHBsbF9nZXRfZmFsbGJhY2tfaWR4KHN0cnVjdCBpY2VfZHBsbHMgKmQsIHN0cnVjdCBpY2VfZHBsbF9waW4gKnRhcmdldCkKJiM0Mzt7CiYjNDM7CWlmIChkLSZndDtwcHMuZHBsbF9pZHggJmx0OyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVggJmFtcDsmYW1wOwomIzQzOwkgICAgdGFyZ2V0LSZndDtzdGF0ZVtkLSZndDtwcHMuZHBsbF9pZHhdID09IERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCkKJiM0MzsJCXJldHVybiBkLSZndDtwcHMuZHBsbF9pZHg7CiYjNDM7CiYjNDM7CWlmIChkLSZndDtlZWMuZHBsbF9pZHggJmx0OyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVggJmFtcDsmYW1wOwomIzQzOwkgICAgdGFyZ2V0LSZndDtzdGF0ZVtkLSZndDtlZWMuZHBsbF9pZHhdID09IERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCkKJiM0MzsJCXJldHVybiBkLSZndDtlZWMuZHBsbF9pZHg7CiYjNDM7CiYjNDM7CXJldHVybiAtRUlOVkFMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpY2VfZHBsbF9nZXRfcGVlcl90YXJnZXQoc3RydWN0IGljZV9kcGxsX3BpbiAqcGVlciwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgaWNlX2RwbGxfcGluICoqcGVlcl90YXJnZXQsCiYjNDM7CQkJCSAgICAgZW51bSBpY2VfZHBsbF9waW5fdHlwZSAqcGVlcl90eXBlKQomIzQzO3sKJiM0MzsJKnBlZXJfdGFyZ2V0ID0gTlVMTDsKJiM0MzsJKnBlZXJfdHlwZSA9IDA7CiYjNDM7CiYjNDM7CXN3aXRjaCAocGVlci0mZ3Q7ZGlyZWN0aW9uKSB7CiYjNDM7CWNhc2UgRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVDoKJiM0MzsJCSpwZWVyX3RhcmdldCA9IHBlZXItJmd0O291dHB1dDsKJiM0MzsJCSpwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQ6CiYjNDM7CQkqcGVlcl90YXJnZXQgPSBwZWVyLSZndDtpbnB1dDsKJiM0MzsJCSpwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVDsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiAvKioKICAqIGljZV9kcGxsX3Bpbl9lbmFibGUgLSBlbmFibGUgYSBwaW4gb24gZHBsbHMKICAqIEBodzogYm9hcmQgcHJpdmF0ZSBodyBzdHJ1Y3R1cmUKQEAgLTUzOCw2ICYjNDM7NTk1LDI5IEBAIGljZV9kcGxsX3Bpbl9kaXNhYmxlKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW4sCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlciAtIG5vdGlmeSB0aGUgcGFpcmVkIFNXIHBpbiBhZnRlciBhIHN0YXRlIGNoYW5nZQomIzQzOyAqIEBjaGFuZ2VkOiB0aGUgU1cgcGluIHRoYXQgd2FzIGV4cGxpY2l0bHkgY2hhbmdlZCAoYWxyZWFkeSBub3RpZmllZCBieSBkcGxsIGNvcmUpCiYjNDM7ICoKJiM0MzsgKiBTTUEgYW5kIFUuRkwgcGlucyBzaGFyZSBwaHlzaWNhbCBzaWduYWwgcGF0aHMgaW4gcGFpcnMgKFNNQTEvVS5GTDEgYW5kCiYjNDM7ICogU01BMi9VLkZMMikuICBXaGVuIG9uZSBwaW4mIzM5O3Mgcm91dGluZyBjaGFuZ2VzIHZpYSB0aGUgUENBOTU3NSBHUElPCiYjNDM7ICogZXhwYW5kZXIsIHRoZSBwYWlyZWQgcGluJiMzOTtzIHN0YXRlIG1heSBhbHNvIGNoYW5nZS4gIFNlbmQgYSBjaGFuZ2UKJiM0MzsgKiBub3RpZmljYXRpb24gZm9yIHRoZSBwZWVyIHBpbiBzbyB1c2Vyc3BhY2UgY29uc3VtZXJzIG1vbml0b3JpbmcgdGhlCiYjNDM7ICogcGVlciB2aWEgZHBsbCBuZXRsaW5rIGxlYXJuIGFib3V0IHRoZSB1cGRhdGUuCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBDYWxsZWQgZnJvbSBkcGxsX3Bpbl9vcHMgY2FsbGJhY2tzIGFmdGVyIHBmLSZndDtkcGxscy5sb2NrIGlzCiYjNDM7ICogICAgICAgICAgcmVsZWFzZWQuICBVc2VzIF9fZHBsbF9waW5fY2hhbmdlX250ZigpIGJlY2F1c2UgZHBsbF9sb2NrIGlzCiYjNDM7ICogICAgICAgICAgc3RpbGwgaGVsZCBieSB0aGUgZHBsbCBuZXRsaW5rIGxheWVyLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihzdHJ1Y3QgaWNlX2RwbGxfcGluICpjaGFuZ2VkKQomIzQzO3sKJiM0MzsJc3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcjsKJiM0MzsKJiM0MzsJcGVlciA9IGNoYW5nZWQtJmd0O211eGVkOwomIzQzOwlpZiAocGVlciAmYW1wOyZhbXA7IHBlZXItJmd0O3BpbikKJiM0MzsJCV9fZHBsbF9waW5fY2hhbmdlX250ZihwZWVyLSZndDtwaW4pOwomIzQzO30KJiM0MzsKIC8qKgogICogaWNlX2RwbGxfcGluX3N0b3JlX3N0YXRlIC0gdXBkYXRlcyB0aGUgc3RhdGUgb2YgcGluIGluIFNXIGJvb2trZWVwaW5nCiAgKiBAcGluOiBwb2ludGVyIHRvIGEgcGluCkBAIC03MDksNiAmIzQzOzc4OSw4IEBAIGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfZHBsbF9waW4gKnBpbiwKIAkJCSAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXU4IHBhcmVudCwgcG9ydF9udW0gPSBJQ0VfQVFDX1NFVF9QSFlfUkVDX0NMS19PVVRfQ1VSUl9QT1JUOwomIzQzOwllbnVtIGRwbGxfcGluX3N0YXRlIGVlY19zdGF0ZSA9IERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDsKJiM0MzsJZW51bSBkcGxsX3Bpbl9zdGF0ZSBwcHNfc3RhdGUgPSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7CiAJaW50IHJldDsKIAogCXN3aXRjaCAocGluX3R5cGUpIHsKQEAgLTcyMCwyNiAmIzQzOzgwMiwyNiBAQCBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW4sCiAJCQlnb3RvIGVycjsKIAkJaWYgKElDRV9BUUNfR0VUX0NHVV9JTl9DRkdfRkxHMl9JTlBVVF9FTiAmYW1wOyBwaW4tJmd0O2ZsYWdzWzBdKSB7CiAJCQlpZiAocGluLSZndDtwaW4pIHsKLQkJCQlwaW4tJmd0O3N0YXRlW3BmLSZndDtkcGxscy5lZWMuZHBsbF9pZHhdID0KJiM0MzsJCQkJZWVjX3N0YXRlID0KIAkJCQkJcGluLSZndDtwaW4gPT0gcGYtJmd0O2RwbGxzLmVlYy5hY3RpdmVfaW5wdXQgPwogCQkJCQlEUExMX1BJTl9TVEFURV9DT05ORUNURUQgOgogCQkJCQlEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOwotCQkJCXBpbi0mZ3Q7c3RhdGVbcGYtJmd0O2RwbGxzLnBwcy5kcGxsX2lkeF0gPQomIzQzOwkJCQlwcHNfc3RhdGUgPQogCQkJCQlwaW4tJmd0O3BpbiA9PSBwZi0mZ3Q7ZHBsbHMucHBzLmFjdGl2ZV9pbnB1dCA/CiAJCQkJCURQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCA6CiAJCQkJCURQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7CiAJCQl9IGVsc2UgewotCQkJCXBpbi0mZ3Q7c3RhdGVbcGYtJmd0O2RwbGxzLmVlYy5kcGxsX2lkeF0gPQotCQkJCQlEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOwotCQkJCXBpbi0mZ3Q7c3RhdGVbcGYtJmd0O2RwbGxzLnBwcy5kcGxsX2lkeF0gPQotCQkJCQlEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOwomIzQzOwkJCQllZWNfc3RhdGUgPSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOwomIzQzOwkJCQlwcHNfc3RhdGUgPSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOwogCQkJfQotCQl9IGVsc2UgewotCQkJcGluLSZndDtzdGF0ZVtwZi0mZ3Q7ZHBsbHMuZWVjLmRwbGxfaWR4XSA9Ci0JCQkJRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOwotCQkJcGluLSZndDtzdGF0ZVtwZi0mZ3Q7ZHBsbHMucHBzLmRwbGxfaWR4XSA9Ci0JCQkJRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOwogCQl9CiYjNDM7CQkvKiBDb21taXQgb25seSBhZnRlciBhIHN1Y2Nlc3NmdWwgcmVhZCBzbyBsb2NrbGVzcyByZWFkZXJzIG5ldmVyCiYjNDM7CQkgKiBvYnNlcnZlIGEgdHJhbnNpZW50IGRpc2Nvbm5lY3RlZCBzdGF0ZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHBmLSZndDtkcGxscy5lZWMuZHBsbF9pZHggJmx0OyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpCiYjNDM7CQkJcGluLSZndDtzdGF0ZVtwZi0mZ3Q7ZHBsbHMuZWVjLmRwbGxfaWR4XSA9IGVlY19zdGF0ZTsKJiM0MzsJCWlmIChwZi0mZ3Q7ZHBsbHMucHBzLmRwbGxfaWR4ICZsdDsgSUNFX0RQTExfUkNMS19OVU1fTUFYKQomIzQzOwkJCXBpbi0mZ3Q7c3RhdGVbcGYtJmd0O2RwbGxzLnBwcy5kcGxsX2lkeF0gPSBwcHNfc3RhdGU7CiAJCWJyZWFrOwogCWNhc2UgSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUOgogCQlyZXQgPSBpY2VfYXFfZ2V0X291dHB1dF9waW5fY2ZnKCZhbXA7cGYtJmd0O2h3LCBwaW4tJmd0O2lkeCwKQEAgLTc1MCwyMCAmIzQzOzgzMiwxNyBAQCBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW4sCiAKIAkJcGFyZW50ICZhbXA7PSBJQ0VfQVFDX0dFVF9DR1VfT1VUX0NGR19EUExMX1NSQ19TRUw7CiAJCWlmIChJQ0VfQVFDX0dFVF9DR1VfT1VUX0NGR19PVVRfRU4gJmFtcDsgcGluLSZndDtmbGFnc1swXSkgewotCQkJcGluLSZndDtzdGF0ZVtwZi0mZ3Q7ZHBsbHMuZWVjLmRwbGxfaWR4XSA9Ci0JCQkJcGFyZW50ID09IHBmLSZndDtkcGxscy5lZWMuZHBsbF9pZHggPwomIzQzOwkJCWVlY19zdGF0ZSA9IHBhcmVudCA9PSBwZi0mZ3Q7ZHBsbHMuZWVjLmRwbGxfaWR4ID8KIAkJCQlEUExMX1BJTl9TVEFURV9DT05ORUNURUQgOgogCQkJCURQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDsKLQkJCXBpbi0mZ3Q7c3RhdGVbcGYtJmd0O2RwbGxzLnBwcy5kcGxsX2lkeF0gPQotCQkJCXBhcmVudCA9PSBwZi0mZ3Q7ZHBsbHMucHBzLmRwbGxfaWR4ID8KJiM0MzsJCQlwcHNfc3RhdGUgPSBwYXJlbnQgPT0gcGYtJmd0O2RwbGxzLnBwcy5kcGxsX2lkeCA/CiAJCQkJRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEIDoKIAkJCQlEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7Ci0JCX0gZWxzZSB7Ci0JCQlwaW4tJmd0O3N0YXRlW3BmLSZndDtkcGxscy5lZWMuZHBsbF9pZHhdID0KLQkJCQlEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7Ci0JCQlwaW4tJmd0O3N0YXRlW3BmLSZndDtkcGxscy5wcHMuZHBsbF9pZHhdID0KLQkJCQlEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7CiAJCX0KJiM0MzsJCWlmIChwZi0mZ3Q7ZHBsbHMuZWVjLmRwbGxfaWR4ICZsdDsgSUNFX0RQTExfUkNMS19OVU1fTUFYKQomIzQzOwkJCXBpbi0mZ3Q7c3RhdGVbcGYtJmd0O2RwbGxzLmVlYy5kcGxsX2lkeF0gPSBlZWNfc3RhdGU7CiYjNDM7CQlpZiAocGYtJmd0O2RwbGxzLnBwcy5kcGxsX2lkeCAmbHQ7IElDRV9EUExMX1JDTEtfTlVNX01BWCkKJiM0MzsJCQlwaW4tJmd0O3N0YXRlW3BmLSZndDtkcGxscy5wcHMuZHBsbF9pZHhdID0gcHBzX3N0YXRlOwogCQlicmVhazsKIAljYXNlIElDRV9EUExMX1BJTl9UWVBFX1JDTEtfSU5QVVQ6CiAJCWlmIChwZi0mZ3Q7aHcubWFjX3R5cGUgPT0gSUNFX01BQ19HRU5FUklDXzNLX0U4MjUpIHsKQEAgLTExNjMsMzAgJiM0MzsxMjQyLDg1IEBAIGljZV9kcGxsX2lucHV0X3N0YXRlX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsCiAJCQkJICAgICAgZXh0YWNrLCBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVCk7CiB9CiAKLS8qKgotICogaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyIC0gbm90aWZ5IHRoZSBwYWlyZWQgU1cgcGluIGFmdGVyIGEgc3RhdGUgY2hhbmdlCi0gKiBAZDogcG9pbnRlciB0byBkcGxscyBzdHJ1Y3QKLSAqIEBjaGFuZ2VkOiB0aGUgU1cgcGluIHRoYXQgd2FzIGV4cGxpY2l0bHkgY2hhbmdlZCAoYWxyZWFkeSBub3RpZmllZCBieSBkcGxsIGNvcmUpCi0gKgotICogU01BIGFuZCBVLkZMIHBpbnMgc2hhcmUgcGh5c2ljYWwgc2lnbmFsIHBhdGhzIGluIHBhaXJzIChTTUExL1UuRkwxIGFuZAotICogU01BMi9VLkZMMikuICBXaGVuIG9uZSBwaW4mIzM5O3Mgcm91dGluZyBjaGFuZ2VzIHZpYSB0aGUgUENBOTU3NSBHUElPCi0gKiBleHBhbmRlciwgdGhlIHBhaXJlZCBwaW4mIzM5O3Mgc3RhdGUgbWF5IGFsc28gY2hhbmdlLiAgU2VuZCBhIGNoYW5nZQotICogbm90aWZpY2F0aW9uIGZvciB0aGUgcGVlciBwaW4gc28gdXNlcnNwYWNlIGNvbnN1bWVycyBtb25pdG9yaW5nIHRoZQotICogcGVlciB2aWEgZHBsbCBuZXRsaW5rIGxlYXJuIGFib3V0IHRoZSB1cGRhdGUuCi0gKgotICogQ29udGV4dDogQ2FsbGVkIGZyb20gZHBsbF9waW5fb3BzIGNhbGxiYWNrcyBhZnRlciBwZi0mZ3Q7ZHBsbHMubG9jayBpcwotICogICAgICAgICAgcmVsZWFzZWQuICBVc2VzIF9fZHBsbF9waW5fY2hhbmdlX250ZigpIGJlY2F1c2UgZHBsbF9sb2NrIGlzCi0gKiAgICAgICAgICBzdGlsbCBoZWxkIGJ5IHRoZSBkcGxsIG5ldGxpbmsgbGF5ZXIuCi0gKi8KLXN0YXRpYyB2b2lkIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihzdHJ1Y3QgaWNlX2RwbGxzICpkLAotCQkJCQlzdHJ1Y3QgaWNlX2RwbGxfcGluICpjaGFuZ2VkKQomIzQzO3N0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIHsKJiM0MzsJYm9vbCBlbmFibGVkOwomIzQzOwl1OCBkcGxsX2lkeDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0MztpY2VfZHBsbF9waW5fY29uZmlnX2dldChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqdGFyZ2V0LAomIzQzOwkJCWVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZSwKJiM0MzsJCQlzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyAqY29uZmlnLAomIzQzOwkJCXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKLQlzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyOwomIzQzOwlpbnQgcmV0OwogCi0JcGVlciA9IChjaGFuZ2VkICZndDs9IGQtJmd0O3NtYSAmYW1wOyZhbXA7IGNoYW5nZWQgJmx0OyBkLSZndDtzbWEgJiM0MzsgSUNFX0RQTExfUElOX1NXX05VTSkgPwotCQkmYW1wO2QtJmd0O3VmbFtjaGFuZ2VkLSZndDtpZHhdIDogJmFtcDtkLSZndDtzbWFbY2hhbmdlZC0mZ3Q7aWR4XTsKLQlpZiAocGVlci0mZ3Q7cGluKQotCQlfX2RwbGxfcGluX2NoYW5nZV9udGYocGVlci0mZ3Q7cGluKTsKJiM0MzsJcmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJc3dpdGNoICh0eXBlKSB7CiYjNDM7CWNhc2UgSUNFX0RQTExfUElOX1RZUEVfSU5QVVQ6CiYjNDM7CQljb25maWctJmd0O2VuYWJsZWQgPSB0YXJnZXQtJmd0O2ZsYWdzWzBdICZhbXA7CiYjNDM7CQkJCSAgSUNFX0FRQ19HRVRfQ0dVX0lOX0NGR19GTEcyX0lOUFVUX0VOOwomIzQzOwkJY29uZmlnLSZndDtkcGxsX2lkeCA9IDA7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJY2FzZSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ6CiYjNDM7CQljb25maWctJmd0O2VuYWJsZWQgPSB0YXJnZXQtJmd0O2ZsYWdzWzBdICZhbXA7CiYjNDM7CQkJCSAgSUNFX0FRQ19HRVRfQ0dVX09VVF9DRkdfT1VUX0VOOwomIzQzOwkJaWYgKCFjb25maWctJmd0O2VuYWJsZWQpIHsKJiM0MzsJCQljb25maWctJmd0O2RwbGxfaWR4ID0gMDsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXJldCA9IGljZV9kcGxsX2dldF9mYWxsYmFja19pZHgoJmFtcDtwZi0mZ3Q7ZHBsbHMsIHRhcmdldCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJY29uZmlnLSZndDtkcGxsX2lkeCA9IHJldDsKJiM0MzsJCXJldHVybiAwOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO2ljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqdGFyZ2V0LAomIzQzOwkJCSAgICBlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGUsCiYjNDM7CQkJICAgIGNvbnN0IHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnICpjb25maWcsCiYjNDM7CQkJICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaywgaW50IGluaXRfZXJyKQomIzQzO3sKJiM0MzsJaW50IHJlc3RvcmVfZXJyLCB1cGRhdGVfZXJyOwomIzQzOwomIzQzOwlpZiAoY29uZmlnLSZndDtlbmFibGVkKQomIzQzOwkJcmVzdG9yZV9lcnIgPSBpY2VfZHBsbF9waW5fZW5hYmxlKCZhbXA7cGYtJmd0O2h3LCB0YXJnZXQsCiYjNDM7CQkJCQkJICBjb25maWctJmd0O2RwbGxfaWR4LCB0eXBlLCBleHRhY2spOwomIzQzOwllbHNlCiYjNDM7CQlyZXN0b3JlX2VyciA9IGljZV9kcGxsX3Bpbl9kaXNhYmxlKCZhbXA7cGYtJmd0O2h3LCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7CiYjNDM7CXVwZGF0ZV9lcnIgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7CiYjNDM7CWlmIChyZXN0b3JlX2VyciB8fCB1cGRhdGVfZXJyKSB7CiYjNDM7CQlkZXZfd2FybihpY2VfcGZfdG9fZGV2KHBmKSwKJiM0MzsJCQkgJiMzNDtGYWlsZWQgdG8gcm9sbGJhY2sgcGluIHN0YXRlOiBlcnIgJWQsIHJlc3RvcmUgZXJyICVkLCB1cGRhdGUgZXJyICVkXG4mIzM0OywKJiM0MzsJCQkgaW5pdF9lcnIsIHJlc3RvcmVfZXJyLCB1cGRhdGVfZXJyKTsKJiM0MzsJCXJldHVybiByZXN0b3JlX2VyciA/IHJlc3RvcmVfZXJyIDogdXBkYXRlX2VycjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBpY2VfZHBsbF9yZXN0b3JlX3NtYV9jdHJsKHN0cnVjdCBpY2VfcGYgKnBmLCB1OCBvbGRfZGF0YSwKJiM0MzsJCQkJICAgICBpbnQgaW5pdF9lcnIpCiYjNDM7ewomIzQzOwlpbnQgcmVzdG9yZV9lcnI7CiYjNDM7CiYjNDM7CXJlc3RvcmVfZXJyID0gaWNlX3dyaXRlX3NtYV9jdHJsKCZhbXA7cGYtJmd0O2h3LCBvbGRfZGF0YSk7CiYjNDM7CWlmICghcmVzdG9yZV9lcnIpCiYjNDM7CQlyZXN0b3JlX2VyciA9IGljZV9kcGxsX3N3X3BpbnNfdXBkYXRlKHBmKTsKJiM0MzsJaWYgKHJlc3RvcmVfZXJyKQomIzQzOwkJZGV2X3dhcm4oaWNlX3BmX3RvX2RldihwZiksCiYjNDM7CQkJICYjMzQ7RmFpbGVkIHRvIHJlc3RvcmUgU01BIGNvbnRyb2w6IGVyciAlZCwgcmVzdG9yZSBlcnIgJWRcbiYjMzQ7LAomIzQzOwkJCSBpbml0X2VyciwgcmVzdG9yZV9lcnIpOwomIzQzOwomIzQzOwlyZXR1cm4gcmVzdG9yZV9lcnI7CiB9CiAKIC8qKgpAQCAtMTIwNiwzMCAmIzQzOzEzNDAsMzkgQEAgc3RhdGljIGludCBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwLAogCQkJCSAgICAgIGVudW0gZHBsbF9waW5fZGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJCQkgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiYjNDM7CXN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIHBlZXJfY29uZmlnOwogCXN0cnVjdCBpY2VfZHBsbHMgKmQgPSAmYW1wO3AtJmd0O3BmLSZndDtkcGxsczsKJiM0MzsJaW50IHBlZXJfZHBsbF9pZHgsIHJlc3RvcmVfZXJyLCByZXQ7CiYjNDM7CXN0cnVjdCBpY2VfZHBsbF9waW4gKnRhcmdldCA9IE5VTEw7CiYjNDM7CWVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZSA9IDA7CiAJc3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcjsKLQl1OCBkYXRhOwotCWludCByZXQ7CiYjNDM7CXU4IGRhdGEsIG9sZF9kYXRhID0gMDsKIAogCWlmIChwLSZndDtkaXJlY3Rpb24gPT0gZGlyZWN0aW9uICZhbXA7JmFtcDsgcC0mZ3Q7YWN0aXZlKQogCQlyZXR1cm4gMDsKIAlyZXQgPSBpY2VfcmVhZF9zbWFfY3RybCgmYW1wO3AtJmd0O3BmLSZndDtodywgJmFtcDtkYXRhKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwomIzQzOwlvbGRfZGF0YSA9IGRhdGE7CiAKIAlzd2l0Y2ggKHAtJmd0O2lkeCkgewogCWNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOgotCQlkYXRhICZhbXA7PSB+SUNFX1NNQTFfTUFTSzsKLQkJaWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKQomIzQzOwkJaWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKSB7CiYjNDM7CQkJZGF0YSAmYW1wOz0gfklDRV9TTUExX1RYX0VOOwogCQkJZGF0YSB8PSBJQ0VfU01BMV9ESVJfRU47CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWRhdGEgJmFtcDs9IH5JQ0VfU01BMV9ESVJfRU47CiYjNDM7CQkJZGF0YSAmYW1wOz0gfklDRV9TTUExX1RYX0VOOwomIzQzOwkJfQogCQlicmVhazsKIAljYXNlIElDRV9EUExMX1BJTl9TV18yX0lEWDoKIAkJaWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQpIHsKIAkJCWRhdGEgJmFtcDs9IH5JQ0VfU01BMl9ESVJfRU47Ci0JCQlkYXRhIHw9IElDRV9TTUEyX1VGTDJfUlhfRElTOwomIzQzOwkJCWRhdGEgJmFtcDs9IH5JQ0VfU01BMl9UWF9FTjsKIAkJfSBlbHNlIHsKLQkJCWRhdGEgJmFtcDs9IH4oSUNFX1NNQTJfVFhfRU4gfCBJQ0VfU01BMl9VRkwyX1JYX0RJUyk7CiAJCQlkYXRhIHw9IElDRV9TTUEyX0RJUl9FTjsKJiM0MzsJCQlkYXRhICZhbXA7PSB+SUNFX1NNQTJfVUZMMl9SWF9ESVM7CiYjNDM7CQkJZGF0YSAmYW1wOz0gfklDRV9TTUEyX1RYX0VOOwogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xMjQxLDcgJiM0MzsxMzg0LDcgQEAgc3RhdGljIGludCBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwLAogCQkJCQkJSUNFX0RQTExfUElOX1RZUEVfU09GVFdBUkUsCiAJCQkJCQlleHRhY2spOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CiYjNDM7CQlnb3RvIHJlc3RvcmVfc21hOwogCiAJLyogV2hlbiBhIGRpcmVjdGlvbiBjaGFuZ2UgYWN0aXZhdGVzIHRoZSBwYWlyZWQgVS5GTCBwaW4sIGVuYWJsZQogCSAqIGl0cyBiYWNraW5nIENHVSBwaW4gc28gdGhlIHBpbiByZXBvcnRzIGFzIGNvbm5lY3RlZC4gV2l0aG91dApAQCAtMTI1MCwyNSAmIzQzOzEzOTMsNDYgQEAgc3RhdGljIGludCBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwLAogCSAqIGJhY2tpbmcgcGluIHdoZW4gVS5GTCBiZWNvbWVzIGluYWN0aXZlIGJlY2F1c2UgdGhlIFNNQSBwaW4gbWF5CiAJICogc3RpbGwgYmUgdXNpbmcgaXQuCiAJICovCi0JcGVlciA9ICZhbXA7ZC0mZ3Q7dWZsW3AtJmd0O2lkeF07CiYjNDM7CXBlZXIgPSBwLSZndDttdXhlZDsKIAlpZiAocGVlci0mZ3Q7YWN0aXZlKSB7Ci0JCXN0cnVjdCBpY2VfZHBsbF9waW4gKnRhcmdldDsKLQkJZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlOwotCiAJCWlmIChwZWVyLSZndDtvdXRwdXQpIHsKIAkJCXRhcmdldCA9IHBlZXItJmd0O291dHB1dDsKIAkJCXR5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7Ci0JCX0gZWxzZSB7CiYjNDM7CQl9IGVsc2UgaWYgKHBlZXItJmd0O2lucHV0KSB7CiAJCQl0YXJnZXQgPSBwZWVyLSZndDtpbnB1dDsKIAkJCXR5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCQlnb3RvIHJlc3RvcmVfc21hOwogCQl9Ci0JCXJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoJmFtcDtwLSZndDtwZi0mZ3Q7aHcsIHRhcmdldCwKLQkJCQkJICBkLSZndDtlZWMuZHBsbF9pZHgsIHR5cGUsIGV4dGFjayk7Ci0JCWlmICghcmV0KQotCQkJcmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwLSZndDtwZiwgdGFyZ2V0LAotCQkJCQkJCXR5cGUsIGV4dGFjayk7CiYjNDM7CiYjNDM7CQlyZXQgPSBpY2VfZHBsbF9waW5fY29uZmlnX2dldChwLSZndDtwZiwgdGFyZ2V0LCB0eXBlLAomIzQzOwkJCQkJICAgICAgJmFtcDtwZWVyX2NvbmZpZywgZXh0YWNrKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byByZXN0b3JlX3NtYTsKJiM0MzsKJiM0MzsJCXBlZXJfZHBsbF9pZHggPSBpY2VfZHBsbF9nZXRfZmFsbGJhY2tfaWR4KGQsIHRhcmdldCk7CiYjNDM7CQlpZiAocGVlcl9kcGxsX2lkeCAmbHQ7IDApCiYjNDM7CQkJcGVlcl9kcGxsX2lkeCA9IGQtJmd0O2VlYy5kcGxsX2lkeDsKJiM0MzsJCXJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoJmFtcDtwLSZndDtwZi0mZ3Q7aHcsIHRhcmdldCwgcGVlcl9kcGxsX2lkeCwKJiM0MzsJCQkJCSAgdHlwZSwgZXh0YWNrKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byByZXN0b3JlX3BlZXI7CiYjNDM7CQlyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHAtJmd0O3BmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gcmVzdG9yZV9wZWVyOwogCX0KIAomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztyZXN0b3JlX3BlZXI6CiYjNDM7CXJlc3RvcmVfZXJyID0KJiM0MzsJCWljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShwLSZndDtwZiwgdGFyZ2V0LCB0eXBlLCAmYW1wO3BlZXJfY29uZmlnLAomIzQzOwkJCQkJICAgIGV4dGFjaywgcmV0KTsKJiM0MzsJaWYgKHJlc3RvcmVfZXJyKQomIzQzOwkJcmV0ID0gcmVzdG9yZV9lcnI7CiYjNDM7cmVzdG9yZV9zbWE6CiYjNDM7CWljZV9kcGxsX3Jlc3RvcmVfc21hX2N0cmwocC0mZ3Q7cGYsIG9sZF9kYXRhLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEyOTQsMTQgJiM0MzsxNDU4LDE4IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdiwKIAkJCSAgIGVudW0gZHBsbF9waW5fc3RhdGUgc3RhdGUsCiAJCQkgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiYjNDM7CWVudW0gaWNlX2RwbGxfcGluX3R5cGUgcGVlcl90eXBlID0gMCwgdHlwZTsKIAlzdHJ1Y3QgaWNlX2RwbGxfcGluICpwID0gcGluX3ByaXYsICp0YXJnZXQ7CiYjNDM7CXN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXJfdGFyZ2V0ID0gTlVMTDsKJiM0MzsJc3RydWN0IGljZV9kcGxsX3Bpbl9jb25maWcgcGVlcl9jb25maWc7CiYjNDM7CXN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIG9sZF9jb25maWc7CiYjNDM7CWludCBwZWVyX2RwbGxfaWR4LCByZXN0b3JlX2VyciwgcmV0OwogCXN0cnVjdCBpY2VfZHBsbCAqZCA9IGRwbGxfcHJpdjsKLQllbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGU7CiAJc3RydWN0IGljZV9wZiAqcGYgPSBwLSZndDtwZjsKIAlzdHJ1Y3QgaWNlX2h3ICpodzsKJiM0MzsJdTggb2xkX2RhdGEgPSAwOwogCWJvb2wgZW5hYmxlOwogCXU4IGRhdGE7Ci0JaW50IHJldDsKIAogCWlmIChpY2VfZHBsbF9pc19yZXNldChwZiwgZXh0YWNrKSkKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTEzMTEsMTQgJiM0MzsxNDc5LDE3IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdiwKIAlyZXQgPSBpY2VfcmVhZF9zbWFfY3RybChodywgJmFtcDtkYXRhKTsKIAlpZiAocmV0KQogCQlnb3RvIHVubG9jazsKJiM0MzsJb2xkX2RhdGEgPSBkYXRhOwogCiAJcmV0ID0gLUVJTlZBTDsKIAlzd2l0Y2ggKHAtJmd0O2lkeCkgewogCWNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOgotCQlpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEKSB7CiYjNDM7CQlzd2l0Y2ggKHN0YXRlKSB7CiYjNDM7CQljYXNlIERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDoKIAkJCWRhdGEgJmFtcDs9IH5JQ0VfU01BMV9NQVNLOwogCQkJZW5hYmxlID0gdHJ1ZTsKLQkJfSBlbHNlIGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQpIHsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOgogCQkJLyogU2tpcCBpZiBVLkZMMSBpcyBub3QgYWN0aXZlLCBzZXR0aW5nIFRYX0VOCiAJCQkgKiB3aGlsZSBESVJfRU4gaXMgc2V0IHdvdWxkIGFsc28gZGVhY3RpdmF0ZQogCQkJICogdGhlIHBhaXJlZCBTTUExIG91dHB1dC4KQEAgLTEzMjksMTggJiM0MzsxNTAwLDIxIEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdiwKIAkJCX0KIAkJCWRhdGEgfD0gSUNFX1NNQTFfVFhfRU47CiAJCQllbmFibGUgPSBmYWxzZTsKLQkJfSBlbHNlIHsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWRlZmF1bHQ6CiAJCQlnb3RvIHVubG9jazsKIAkJfQogCQl0YXJnZXQgPSBwLSZndDtvdXRwdXQ7CiAJCXR5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7CiAJCWJyZWFrOwogCWNhc2UgSUNFX0RQTExfUElOX1NXXzJfSURYOgotCQlpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRSkgewomIzQzOwkJc3dpdGNoIChzdGF0ZSkgewomIzQzOwkJY2FzZSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOgogCQkJZGF0YSB8PSBJQ0VfU01BMl9ESVJfRU47CiAJCQlkYXRhICZhbXA7PSB+SUNFX1NNQTJfVUZMMl9SWF9ESVM7CiAJCQllbmFibGUgPSB0cnVlOwotCQl9IGVsc2UgaWYgKHN0YXRlID09IERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRCkgewomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ6CiAJCQkvKiBTa2lwIGlmIFUuRkwyIGlzIG5vdCBhY3RpdmUsIHNldHRpbmcKIAkJCSAqIFVGTDJfUlhfRElTIGNvdWxkIGFsc28gZGlzYWJsZSB0aGUgcGFpcmVkCiAJCQkgKiBTTUEyIGlucHV0LgpAQCAtMTM1Miw3ICYjNDM7MTUyNiw4IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdiwKIAkJCX0KIAkJCWRhdGEgfD0gSUNFX1NNQTJfVUZMMl9SWF9ESVM7CiAJCQllbmFibGUgPSBmYWxzZTsKLQkJfSBlbHNlIHsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWRlZmF1bHQ6CiAJCQlnb3RvIHVubG9jazsKIAkJfQogCQl0YXJnZXQgPSBwLSZndDtpbnB1dDsKQEAgLTEzNjQsMjMgJiM0MzsxNTM5LDc0IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdiwKIAogCXJldCA9IGljZV93cml0ZV9zbWFfY3RybChodywgZGF0YSk7CiAJaWYgKHJldCkKLQkJZ290byB1bmxvY2s7CiYjNDM7CQlnb3RvIHJlc3RvcmVfc21hX2N0cmw7CiAJcmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcCwgSUNFX0RQTExfUElOX1RZUEVfU09GVFdBUkUsCiAJCQkJCWV4dGFjayk7CiAJaWYgKHJldCkKLQkJZ290byB1bmxvY2s7CiYjNDM7CQlnb3RvIHJlc3RvcmVfc21hX2N0cmw7CiYjNDM7CiYjNDM7CXJldCA9IGljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHBmLCB0YXJnZXQsIHR5cGUsICZhbXA7b2xkX2NvbmZpZywgZXh0YWNrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gcmVzdG9yZV9zbWFfY3RybDsKIAogCWlmIChlbmFibGUpCiAJCXJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoaHcsIHRhcmdldCwgZC0mZ3Q7ZHBsbF9pZHgsIHR5cGUsIGV4dGFjayk7CiAJZWxzZQogCQlyZXQgPSBpY2VfZHBsbF9waW5fZGlzYWJsZShodywgdGFyZ2V0LCB0eXBlLCBleHRhY2spOwotCWlmICghcmV0KQotCQlyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIHJlc3RvcmVfdGFyZ2V0OwomIzQzOwlyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIHJlc3RvcmVfdGFyZ2V0OwomIzQzOwomIzQzOwlpZiAoZW5hYmxlICZhbXA7JmFtcDsgcC0mZ3Q7bXV4ZWQgJmFtcDsmYW1wOyBwLSZndDttdXhlZC0mZ3Q7YWN0aXZlKSB7CiYjNDM7CQlpY2VfZHBsbF9nZXRfcGVlcl90YXJnZXQocC0mZ3Q7bXV4ZWQsICZhbXA7cGVlcl90YXJnZXQsICZhbXA7cGVlcl90eXBlKTsKJiM0MzsJCWlmICghcGVlcl90YXJnZXQpIHsKJiM0MzsJCQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJCWdvdG8gcmVzdG9yZV90YXJnZXQ7CiYjNDM7CQl9CiYjNDM7CQlyZXQgPSBpY2VfZHBsbF9waW5fY29uZmlnX2dldChwZiwgcGVlcl90YXJnZXQsIHBlZXJfdHlwZSwKJiM0MzsJCQkJCSAgICAgICZhbXA7cGVlcl9jb25maWcsIGV4dGFjayk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gcmVzdG9yZV90YXJnZXQ7CiYjNDM7CiYjNDM7CQlwZWVyX2RwbGxfaWR4ID0gaWNlX2RwbGxfZ2V0X2ZhbGxiYWNrX2lkeCgmYW1wO3BmLSZndDtkcGxscywKJiM0MzsJCQkJCQkJICBwZWVyX3RhcmdldCk7CiYjNDM7CQlpZiAocGVlcl9kcGxsX2lkeCAmbHQ7IDApCiYjNDM7CQkJcGVlcl9kcGxsX2lkeCA9IGQtJmd0O2RwbGxfaWR4OwomIzQzOwkJcmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZSgmYW1wO3BmLSZndDtodywgcGVlcl90YXJnZXQsIHBlZXJfZHBsbF9pZHgsCiYjNDM7CQkJCQkgIHBlZXJfdHlwZSwgZXh0YWNrKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byByZXN0b3JlX3BlZXI7CiYjNDM7CQlyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLAomIzQzOwkJCQkJCWV4dGFjayk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gcmVzdG9yZV9wZWVyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWdvdG8gdW5sb2NrOwomIzQzOwomIzQzO3Jlc3RvcmVfcGVlcjoKJiM0MzsJcmVzdG9yZV9lcnIgPQomIzQzOwkJaWNlX2RwbGxfcGluX2NvbmZpZ19yZXN0b3JlKHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLAomIzQzOwkJCQkJICAgICZhbXA7cGVlcl9jb25maWcsIGV4dGFjaywgcmV0KTsKJiM0MzsJaWYgKHJlc3RvcmVfZXJyKQomIzQzOwkJcmV0ID0gcmVzdG9yZV9lcnI7CiYjNDM7cmVzdG9yZV90YXJnZXQ6CiYjNDM7CXJlc3RvcmVfZXJyID0KJiM0MzsJCWljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShwZiwgdGFyZ2V0LCB0eXBlLCAmYW1wO29sZF9jb25maWcsCiYjNDM7CQkJCQkgICAgZXh0YWNrLCByZXQpOwomIzQzOwlpZiAocmVzdG9yZV9lcnIpCiYjNDM7CQlyZXQgPSByZXN0b3JlX2VycjsKJiM0MztyZXN0b3JlX3NtYV9jdHJsOgomIzQzOwlyZXN0b3JlX2VyciA9IGljZV9kcGxsX3Jlc3RvcmVfc21hX2N0cmwocGYsIG9sZF9kYXRhLCByZXQpOwomIzQzOwlpZiAocmVzdG9yZV9lcnIpCiYjNDM7CQlyZXQgPSByZXN0b3JlX2VycjsKIAogdW5sb2NrOgogCW11dGV4X3VubG9jaygmYW1wO3BmLSZndDtkcGxscy5sb2NrKTsKIAlpZiAoIXJldCkKLQkJaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKCZhbXA7cGYtJmd0O2RwbGxzLCBwKTsKJiM0MzsJCWljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihwKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xNDYzLDQ0ICYjNDM7MTY4OSwxNjggQEAgaWNlX2RwbGxfc21hX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LAogCQkJICAgZW51bSBkcGxsX3Bpbl9zdGF0ZSBzdGF0ZSwKIAkJCSAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKJiM0MzsJaW50IHBlZXJfZHBsbF9pZHgsIHJlc3RvcmVfZXJyLCByZXQgPSAtRUlOVkFMOwogCXN0cnVjdCBpY2VfZHBsbF9waW4gKnNtYSA9IHBpbl9wcml2LCAqdGFyZ2V0OwomIzQzOwllbnVtIGljZV9kcGxsX3Bpbl90eXBlIHBlZXJfdHlwZSA9IDAsIHR5cGU7CiYjNDM7CXN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXJfdGFyZ2V0ID0gTlVMTDsKJiM0MzsJc3RydWN0IGljZV9kcGxsX3Bpbl9jb25maWcgcGVlcl9jb25maWc7CiYjNDM7CXN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIG9sZF9jb25maWc7CiAJc3RydWN0IGljZV9kcGxsICpkID0gZHBsbF9wcml2OwogCXN0cnVjdCBpY2VfcGYgKnBmID0gc21hLSZndDtwZjsKLQllbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGU7CiYjNDM7CXU4IG9sZF9kYXRhID0gMDsKIAlib29sIGVuYWJsZTsKLQlpbnQgcmV0OwogCiAJaWYgKGljZV9kcGxsX2lzX3Jlc2V0KHBmLCBleHRhY2spKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJbXV0ZXhfbG9jaygmYW1wO3BmLSZndDtkcGxscy5sb2NrKTsKLQlpZiAoIXNtYS0mZ3Q7YWN0aXZlKSB7Ci0JCXJldCA9IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHNtYSwgc21hLSZndDtkaXJlY3Rpb24sIGV4dGFjayk7Ci0JCWlmIChyZXQpCiYjNDM7CXN3aXRjaCAoc3RhdGUpIHsKJiM0MzsJY2FzZSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOgomIzQzOwkJLyogUmVqZWN0IGRpcmVjdGlvbi1taXNtYXRjaGVkIHJlcXVlc3RzOiBTRUxFQ1RBQkxFICYjNDM7IE9VVFBVVAomIzQzOwkJICogaXMgYW4gaW52YWxpZCBjb21iaW5hdGlvbiwgcmV0dXJuIC1FSU5WQUwgaW4gdGhpcyBjYXNlCiYjNDM7CQkgKiBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIGRpc2FibGluZyB0aGUgcGluLgomIzQzOwkJICovCiYjNDM7CQlpZiAoc21hLSZndDtkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVCkgewomIzQzOwkJCWVuYWJsZSA9IGZhbHNlOwomIzQzOwkJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CQl9CiYjNDM7CQllbmFibGUgPSB0cnVlOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEOgomIzQzOwkJLyogUmVqZWN0IGRpcmVjdGlvbi1taXNtYXRjaGVkIHJlcXVlc3RzOiBDT05ORUNURUQgJiM0MzsgSU5QVVQKJiM0MzsJCSAqIGlzIGFuIGludmFsaWQgY29tYmluYXRpb24sIHJldHVybiAtRUlOVkFMIGluIHRoaXMgY2FzZQomIzQzOwkJICogaW1tZWRpYXRlbHkgaW5zdGVhZCBvZiBkaXNhYmxpbmcgdGhlIHBpbi4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHNtYS0mZ3Q7ZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9JTlBVVCkgewomIzQzOwkJCWVuYWJsZSA9IGZhbHNlOwomIzQzOwkJCXJldCA9IC1FSU5WQUw7CiAJCQlnb3RvIHVubG9jazsKJiM0MzsJCX0KJiM0MzsJCWVuYWJsZSA9IHRydWU7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ6CiYjNDM7CQllbmFibGUgPSBmYWxzZTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gdW5sb2NrOwogCX0KLQlpZiAoc21hLSZndDtkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUKSB7Ci0JCWVuYWJsZSA9IHN0YXRlID09IERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7CiYjNDM7CiYjNDM7CXN3aXRjaCAoc21hLSZndDtkaXJlY3Rpb24pIHsKJiM0MzsJY2FzZSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQ6CiAJCXRhcmdldCA9IHNtYS0mZ3Q7aW5wdXQ7CiAJCXR5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVDsKLQl9IGVsc2UgewotCQllbmFibGUgPSBzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQ7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUOgogCQl0YXJnZXQgPSBzbWEtJmd0O291dHB1dDsKIAkJdHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gdW5sb2NrOwogCX0KIAotCWlmIChlbmFibGUpCiYjNDM7CWlmICghc21hLSZndDthY3RpdmUpIHsKJiM0MzsJCXJldCA9IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHNtYSwgc21hLSZndDtkaXJlY3Rpb24sIGV4dGFjayk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gdW5sb2NrOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChlbmFibGUpIHsKJiM0MzsJCXU4IGRhdGE7CiYjNDM7CiYjNDM7CQlyZXQgPSBpY2VfcmVhZF9zbWFfY3RybCgmYW1wO3BmLSZndDtodywgJmFtcDtkYXRhKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CQlvbGRfZGF0YSA9IGRhdGE7CiYjNDM7CQlzd2l0Y2ggKHNtYS0mZ3Q7aWR4KSB7CiYjNDM7CQljYXNlIElDRV9EUExMX1BJTl9TV18xX0lEWDoKJiM0MzsJCQlkYXRhICZhbXA7PSB+SUNFX1NNQTFfVFhfRU47CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIElDRV9EUExMX1BJTl9TV18yX0lEWDoKJiM0MzsJCQlkYXRhICZhbXA7PSB+SUNFX1NNQTJfVUZMMl9SWF9ESVM7CiYjNDM7CQkJZGF0YSAmYW1wOz0gfklDRV9TTUEyX1RYX0VOOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJCWdvdG8gdW5sb2NrOwomIzQzOwkJfQomIzQzOwkJcmV0ID0gaWNlX3dyaXRlX3NtYV9jdHJsKCZhbXA7cGYtJmd0O2h3LCBkYXRhKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byByZXN0b3JlX3NtYV9jdHJsOwomIzQzOwkJcmV0ID0gaWNlX2RwbGxfc3dfcGluc191cGRhdGUocGYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIHJlc3RvcmVfc21hX2N0cmw7CiYjNDM7CiYjNDM7CQlyZXQgPSBpY2VfZHBsbF9waW5fY29uZmlnX2dldChwZiwgdGFyZ2V0LCB0eXBlLCAmYW1wO29sZF9jb25maWcsCiYjNDM7CQkJCQkgICAgICBleHRhY2spOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIHJlc3RvcmVfc21hX2N0cmw7CiAJCXJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoJmFtcDtwZi0mZ3Q7aHcsIHRhcmdldCwgZC0mZ3Q7ZHBsbF9pZHgsIHR5cGUsCiAJCQkJCSAgZXh0YWNrKTsKLQllbHNlCi0JCXJldCA9IGljZV9kcGxsX3Bpbl9kaXNhYmxlKCZhbXA7cGYtJmd0O2h3LCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7Ci0JaWYgKCFyZXQpCiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gcmVzdG9yZV90YXJnZXQ7CiYjNDM7CQkvKiBSZWZyZXNoIHRhcmdldCBzdGF0ZSBiZWZvcmUgcGVlci1zaWRlIG9wZXJhdGlvbnMuICovCiAJCXJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byByZXN0b3JlX3RhcmdldDsKJiM0MzsKJiM0MzsJCWlmIChzbWEtJmd0O211eGVkICZhbXA7JmFtcDsgc21hLSZndDttdXhlZC0mZ3Q7YWN0aXZlKSB7CiYjNDM7CQkJaWNlX2RwbGxfZ2V0X3BlZXJfdGFyZ2V0KHNtYS0mZ3Q7bXV4ZWQsICZhbXA7cGVlcl90YXJnZXQsCiYjNDM7CQkJCQkJICZhbXA7cGVlcl90eXBlKTsKJiM0MzsJCQlpZiAoIXBlZXJfdGFyZ2V0KSB7CiYjNDM7CQkJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQkJCWdvdG8gcmVzdG9yZV90YXJnZXQ7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCXJldCA9IGljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLAomIzQzOwkJCQkJCSAgICAgICZhbXA7cGVlcl9jb25maWcsIGV4dGFjayk7CiYjNDM7CQkJaWYgKHJldCkKJiM0MzsJCQkJZ290byByZXN0b3JlX3RhcmdldDsKJiM0MzsKJiM0MzsJCQlwZWVyX2RwbGxfaWR4ID0KJiM0MzsJCQkJaWNlX2RwbGxfZ2V0X2ZhbGxiYWNrX2lkeCgmYW1wO3BmLSZndDtkcGxscywgcGVlcl90YXJnZXQpOwomIzQzOwkJCWlmIChwZWVyX2RwbGxfaWR4ICZsdDsgMCkKJiM0MzsJCQkJcGVlcl9kcGxsX2lkeCA9IGQtJmd0O2RwbGxfaWR4OwomIzQzOwkJCXJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoJmFtcDtwZi0mZ3Q7aHcsIHBlZXJfdGFyZ2V0LAomIzQzOwkJCQkJCSAgcGVlcl9kcGxsX2lkeCwgcGVlcl90eXBlLCBleHRhY2spOwomIzQzOwkJCWlmIChyZXQpCiYjNDM7CQkJCWdvdG8gcmVzdG9yZV9wZWVyOwomIzQzOwkJCXJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHBlZXJfdGFyZ2V0LCBwZWVyX3R5cGUsCiYjNDM7CQkJCQkJCWV4dGFjayk7CiYjNDM7CQkJaWYgKHJldCkKJiM0MzsJCQkJZ290byByZXN0b3JlX3BlZXI7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXQgPSBpY2VfZHBsbF9waW5fZGlzYWJsZSgmYW1wO3BmLSZndDtodywgdGFyZ2V0LCB0eXBlLCBleHRhY2spOwomIzQzOwkJaWYgKCFyZXQpCiYjNDM7CQkJcmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLAomIzQzOwkJCQkJCQlleHRhY2spOwomIzQzOwl9CiYjNDM7CWdvdG8gdW5sb2NrOwomIzQzOwomIzQzO3Jlc3RvcmVfcGVlcjoKJiM0MzsJcmVzdG9yZV9lcnIgPQomIzQzOwkJaWNlX2RwbGxfcGluX2NvbmZpZ19yZXN0b3JlKHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLAomIzQzOwkJCQkJICAgICZhbXA7cGVlcl9jb25maWcsIGV4dGFjaywgcmV0KTsKJiM0MzsJaWYgKHJlc3RvcmVfZXJyKQomIzQzOwkJcmV0ID0gcmVzdG9yZV9lcnI7CiYjNDM7cmVzdG9yZV90YXJnZXQ6CiYjNDM7CXJlc3RvcmVfZXJyID0KJiM0MzsJCWljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShwZiwgdGFyZ2V0LCB0eXBlLCAmYW1wO29sZF9jb25maWcsCiYjNDM7CQkJCQkgICAgZXh0YWNrLCByZXQpOwomIzQzOwlpZiAocmVzdG9yZV9lcnIpCiYjNDM7CQlyZXQgPSByZXN0b3JlX2VycjsKJiM0MztyZXN0b3JlX3NtYV9jdHJsOgomIzQzOwlyZXN0b3JlX2VyciA9IGljZV9kcGxsX3Jlc3RvcmVfc21hX2N0cmwocGYsIG9sZF9kYXRhLCByZXQpOwomIzQzOwlpZiAocmVzdG9yZV9lcnIpCiYjNDM7CQlyZXQgPSByZXN0b3JlX2VycjsKIAogdW5sb2NrOgogCW11dGV4X3VubG9jaygmYW1wO3BmLSZndDtkcGxscy5sb2NrKTsKIAlpZiAoIXJldCkKLQkJaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKCZhbXA7cGYtJmd0O2RwbGxzLCBzbWEpOwomIzQzOwkJaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKHNtYSk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTY5Nyw3ICYjNDM7MjA0Nyw3IEBAIGljZV9kcGxsX3Bpbl9zbWFfZGlyZWN0aW9uX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsCiAJcmV0ID0gaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQocCwgZGlyZWN0aW9uLCBleHRhY2spOwogCW11dGV4X3VubG9jaygmYW1wO3BmLSZndDtkcGxscy5sb2NrKTsKIAlpZiAoIXJldCkKLQkJaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKCZhbXA7cGYtJmd0O2RwbGxzLCBwKTsKJiM0MzsJCWljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihwKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC00NTE5LDYgJiM0Mzs0ODY5LDggQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZikKIAkJaWYgKHBpbi0mZ3Q7aW5wdXQtJmd0O3JlZl9zeW5jKQogCQkJcGluLSZndDtyZWZfc3luYyA9IHBpbi0mZ3Q7aW5wdXQtJmd0O3JlZl9zeW5jIC0gcGluX2Fic19pZHg7CiAJCXBpbi0mZ3Q7b3V0cHV0ID0gJmFtcDtkLSZndDtvdXRwdXRzW0lDRV9EUExMX1BJTl9TV19PVVRQVVRfQUJTKGkpXTsKJiM0MzsJCXBpbi0mZ3Q7bXV4ZWQgPSAmYW1wO2QtJmd0O3VmbFtpXTsKJiM0MzsKIAkJaWNlX2RwbGxfcGhhc2VfcmFuZ2Vfc2V0KCZhbXA7cGluLSZndDtwcm9wLnBoYXNlX3JhbmdlLCBwaGFzZV9hZGpfbWF4KTsKIAl9CiAJZm9yIChpID0gMDsgaSAmbHQ7IElDRV9EUExMX1BJTl9TV19OVU07IGkmIzQzOyYjNDM7KSB7CkBAIC00NTI4LDcgJiM0Mzs0ODgwLDggQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZikKIAkJcGluLSZndDtwcm9wLmNhcGFiaWxpdGllcyA9IGNhcHM7CiAJCXBpbi0mZ3Q7cGYgPSBwZjsKIAkJcGluLSZndDtwcm9wLmJvYXJkX2xhYmVsID0gaWNlX2RwbGxfc3dfcGluX3VmbFtpXTsKLQkJaWYgKGkgPT0gSUNFX0RQTExfUElOX1NXXzFfSURYKSB7CiYjNDM7CQlzd2l0Y2ggKGkpIHsKJiM0MzsJCWNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOgogCQkJcGluLSZndDtkaXJlY3Rpb24gPSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUOwogCQkJcGluX2Fic19pZHggPSBJQ0VfRFBMTF9QSU5fU1dfT1VUUFVUX0FCUyhpKTsKIAkJCXBpbi0mZ3Q7cHJvcC5mcmVxX3N1cHBvcnRlZCA9CkBAIC00NTM4LDcgJiM0Mzs0ODkxLDggQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZikKIAkJCXBpbi0mZ3Q7cHJvcC5mcmVxX3N1cHBvcnRlZF9udW0gPSBmcmVxX3N1cHBfbnVtOwogCQkJcGluLSZndDtpbnB1dCA9IE5VTEw7CiAJCQlwaW4tJmd0O291dHB1dCA9ICZhbXA7ZC0mZ3Q7b3V0cHV0c1twaW5fYWJzX2lkeF07Ci0JCX0gZWxzZSBpZiAoaSA9PSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFgpIHsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgSUNFX0RQTExfUElOX1NXXzJfSURYOgogCQkJcGluLSZndDtkaXJlY3Rpb24gPSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQ7CiAJCQlwaW5fYWJzX2lkeCA9IElDRV9EUExMX1BJTl9TV19JTlBVVF9BQlMoaSkgJiM0MzsKIAkJCQkgICAgICBpbnB1dF9pZHhfb2Zmc2V0OwpAQCAtNDU1MSw3ICYjNDM7NDkwNSwxMiBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKQogCQkJcGluLSZndDtwcm9wLmNhcGFiaWxpdGllcyA9CiAJCQkJKERQTExfUElOX0NBUEFCSUxJVElFU19QUklPUklUWV9DQU5fQ0hBTkdFIHwKIAkJCQkgY2Fwcyk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCWRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksICYjMzQ7SW52YWxpZCBVLkZMIHBpbiBpbmRleDogJWRcbiYjMzQ7LCBpKTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQomIzQzOwkJcGluLSZndDttdXhlZCA9ICZhbXA7ZC0mZ3Q7c21hW2ldOwogCQlpY2VfZHBsbF9waGFzZV9yYW5nZV9zZXQoJmFtcDtwaW4tJmd0O3Byb3AucGhhc2VfcmFuZ2UsIHBoYXNlX2Fkal9tYXgpOwogCX0KIApAQCAtNDc0Myw2ICYjNDM7NTEwMiwxMyBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mbyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBjZ3UpCiAKIAlkZS0mZ3Q7ZHBsbF9pZHggPSBhYmlsaXRpZXMuZWVjX2RwbGxfaWR4OwogCWRwLSZndDtkcGxsX2lkeCA9IGFiaWxpdGllcy5wcHNfZHBsbF9pZHg7CiYjNDM7CWlmIChkZS0mZ3Q7ZHBsbF9pZHggJmd0Oz0gSUNFX0RQTExfUkNMS19OVU1fTUFYIHx8CiYjNDM7CSAgICBkcC0mZ3Q7ZHBsbF9pZHggJmd0Oz0gSUNFX0RQTExfUkNMS19OVU1fTUFYKSB7CiYjNDM7CQlkZXZfZXJyKGljZV9wZl90b19kZXYocGYpLAomIzQzOwkJCSYjMzQ7aW52YWxpZCBkcGxsX2lkeCBpbiBjZ3UgYWJpbGl0aWVzOiBlZWM9JXUsIHBwcz0ldVxuJiMzNDssCiYjNDM7CQkJZGUtJmd0O2RwbGxfaWR4LCBkcC0mZ3Q7ZHBsbF9pZHgpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KIAlkLSZndDtudW1faW5wdXRzID0gYWJpbGl0aWVzLm51bV9pbnB1dHM7CiAJZC0mZ3Q7bnVtX291dHB1dHMgPSBhYmlsaXRpZXMubnVtX291dHB1dHM7CiAJZC0mZ3Q7aW5wdXRfcGhhc2VfYWRqX21heCA9IGxlMzJfdG9fY3B1KGFiaWxpdGllcy5tYXhfaW5fcGhhc2VfYWRqKSAmYW1wOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaAppbmRleCAxMDNiYTNlNDkwNjgyLi5kYzZmMDk2YmYwNjlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaApAQCAtNzYsNiAmIzQzOzc2LDcgQEAgc3RydWN0IGljZV9kcGxsX3BpbiB7CiAJczMyIHBoYXNlX2FkanVzdDsKIAlzdHJ1Y3QgaWNlX2RwbGxfcGluICppbnB1dDsKIAlzdHJ1Y3QgaWNlX2RwbGxfcGluICpvdXRwdXQ7CiYjNDM7CXN0cnVjdCBpY2VfZHBsbF9waW4gKm11eGVkOwogCWVudW0gZHBsbF9waW5fZGlyZWN0aW9uIGRpcmVjdGlvbjsKIAlzNjQgcGhhc2Vfb2Zmc2V0OwogCXU4IHN0YXR1czsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjE6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3NTgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXZhbHVhdGluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgVGhpcyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggaXMgd29ydGggZnV6emluZy4gVGhlIGtleSBxdWVzdGlvbiBoZXJlIGlzIHdoZXRoZXIgdGhlIGNvZGUgdG91Y2hlcyBzb21ldGhpbmcgdGhhdCYjMzk7cyBkaWZmaWN1bHQgb3IgaW1wb3NzaWJsZSB0byByZXByb2R1Y2UgaW4gYSBzdGFuZGFyZCwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VLiBUaGUgZ3VpZGVsaW5lcyBhcmUgcHJldHR5IGNsZWFyIG9uIHdoYXQgZ2V0cyBleGNsdWRlZDogY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXphdGlvbiwgdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVycyB0aGF0IG5lZWQgZGVkaWNhdGVkIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VLCBhbmQgdGVhcmRvd24gY2FsbGJhY2tzIHRoYXQgb25seSBydW4gZHVyaW5nIGhvdC11bnBsdWcgb3BlcmF0aW9ucy4KClRoZSBwYXRjaCBtZW50aW9ucyBhIGZldyBleGFtcGxlcywgYnV0IG15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2VgLiBIbW0sIGBpY2VgLi4uIEkga25vdyB0aGF0JiMzOTtzIHRoZSBJbnRlbCBFdGhlcm5ldCBDb250cm9sbGVyIEU4MDAgc2VyaWVzIGRyaXZlci4gU28sIGlzIHRoYXQgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXI/IEFuZCBjcnVjaWFsbHksIGRvZXMgaXQgKnJlcXVpcmUqIHBoeXNpY2FsIGhhcmR3YXJlIHRoYXQgaXNuJiMzOTt0IHJlcGxpY2F0ZWQgaW4gUUVNVT8KCkkgbmVlZCB0byBuYWlsIHRoaXMgZG93bi4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgcmVyZWFkIHRob3NlIGV4Y2x1c2lvbiBjcml0ZXJpYS4gQ29kZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlIGVtdWxhdGlvbiwgaXMgb3V0LiBUaGVuLCAqc3BlY2lmaWMqIFBDSWUgZHJpdmVycyB0aGF0IHJlcXVpcmUgYWN0dWFsIGhhcmR3YXJlIHRoYXQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlLiBBbmQgdGhlbiB0aGluZ3MgbGlrZSBkcml2ZXIgdW5yZWdpc3RyYXRpb24gY2FsbGJhY2tzLgoKU28sIGJhY2sgdG8gYGljZWAuIEkga25vdyBpdCYjMzk7cyB0aGUgSW50ZWwgRTgwMCBzZXJpZXMgZHJpdmVyLCB0aGUgSW50ZWwoUikgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBMaW51eCBEcml2ZXIuIENhbiBRRU1VIHNpbXVsYXRlIGFuIEludGVsIEU4MDAgc2VyaWVzIE5JQz8gTm9wZSwgZGVmaW5pdGVseSBub3QuIFFFTVUgaGFuZGxlcyB0aGluZ3MgbGlrZSBlMTAwMCwgZTEwMDBlLCBtYXliZSBpZ2Igbm93YWRheXMsIHJ0bDgxMzksIHZpcnRpby1uZXQsIGV0Yy4sIGJ1dCBpdCBkb2VzbiYjMzk7dCBzaW11bGF0ZSB0aGUgYGljZWAgY29udHJvbGxlci4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRoaW5raW5nIHRoaXMgY291bGQgYmUgYSBwcm9ibGVtLgoKSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBpY2VgIGlzIGRlc2lnbmVkIGZvciBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG9ubHkuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvZGViYXNlIGl0c2VsZiwgYW5kIGNoZWNrIGl0cyBLY29uZmlnIGFuZCBwcm9iZSBtZWNoYW5pc20gdG8gY29uZmlybSBpZiBpdCBjYW4gYmUgZW11bGF0ZWQgb3IgaWYgaXQmIzM5O3MgcHVyZWx5IGEgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElDRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnPTI2OD1jb25maWcgSTQwRVZGXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yOTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjI5MTpjb25maWcgSUNFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTI5Mi1cdHRyaXN0YXRlIFwmIzM0O0ludGVsKFIpIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgU3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMzE5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzozMjA6Y29uZmlnIElDRV9IV01PTlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zMjEtXHRib29sIFwmIzM0O0ludGVsKFIpIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgU3VwcG9ydCBIV01PTiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zMzAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMzMTpjb25maWcgSUNFX1NXSVRDSERFVlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zMzItXHRib29sIFwmIzM0O1N3aXRjaGRldiBTdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zNDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjM0NTpjb25maWcgSUNFX0hXVFNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMzQ2LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IEhXIGNyb3NzLXRpbWVzdGFtcCBvbiBwbGF0Zm9ybXMgd2l0aCBQVE0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDQ0CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBEUExMIChEaWdpdGFsIFBoYXNlLUxvY2tlZCBMb29wKSBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgSW50ZWwgRXRoZXJuZXQgZHJpdmVyIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IGZvciB0aGUgJiMzNDtpY2UmIzM0OyBkcml2ZXIuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jYC4gTXkgcHJpbWFyeSBpbnRlcmVzdCBpcyBpbiBpbml0aWFsaXphdGlvbiDigJMgaG93IHRoZSBEUExMIGdldHMgc2V0IHVwIGluaXRpYWxseSDigJMgYW5kIHRoZW4sIGltcG9ydGFudGx5LCBob3cgaXQmIzM5O3MgKnVzZWQqIHdpdGhpbiB0aGUgbGFyZ2VyIGRyaXZlciBjb250ZXh0LiBJIG5lZWQgdG8gc2VlIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBjb250cm9sIGZsb3csIGFueSBwb3RlbnRpYWwgZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCB0byBEUExMIG9wZXJhdGlvbiwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBtb2R1bGVzIGFuZCBmdW5jdGlvbnMgd2l0aGluIHRoZSAmIzM0O2ljZSYjMzQ7IGRyaXZlci4gVGhpcyBpcyBsaWtlbHkgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgdGltaW5nIGFuZCBjbG9ja2luZyBhc3BlY3RzIG9mIHRoZSBpbnRlcmZhY2UsIGFuZCBob3cgdGhhdCBpcyBjb250cmlidXRpbmcgdG8gb3ZlcmFsbCBwZXJmb3JtYW5jZS4gSSBleHBlY3QgdGhlcmUmIzM5O3MgcHJvYmFibHkgc29tZSBpbXBvcnRhbnQgY29uc2lkZXJhdGlvbnMgcmVsYXRpbmcgdG8gcG93ZXIgbWFuYWdlbWVudCBhbmQvb3IgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0LyogQ29weXJpZ2h0IChDKSAyMDIyLCBJbnRlbCBDb3Jwb3JhdGlvbi4gKi9cbiAgIDM6XHRcbiAgIDQ6XHQjaW5jbHVkZSBcJiMzNDtpY2UuaFwmIzM0O1xuICAgNTpcdCNpbmNsdWRlIFwmIzM0O2ljZV9saWIuaFwmIzM0O1xuICAgNjpcdCNpbmNsdWRlIFwmIzM0O2ljZV90cmFjZS5oXCYjMzQ7XG4gICA3Olx0I2luY2x1ZGUgXCYjMzQ7aWNlX3R4Y2xrLmhcJiMzNDtcbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9kcGxsLmhcdTAwM2VcbiAgIDk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4gIDEwOlx0XG4gIDExOlx0I2RlZmluZSBJQ0VfQ0dVX1NUQVRFX0FDUV9FUlJfVEhSRVNIT0xEXHRcdDUwXG4gIDEyOlx0I2RlZmluZSBJQ0VfRFBMTF9QSU5fSURYX0lOVkFMSURcdFx0MHhmZlxuICAxMzpcdCNkZWZpbmUgSUNFX0RQTExfUkNMS19OVU1fUEVSX1BGXHRcdDFcbiAgMTQ6XHQjZGVmaW5lIElDRV9EUExMX1BJTl9FU1lOQ19QVUxTRV9ISUdIX1BFUkNFTlRcdDI1XG4gIDE1Olx0I2RlZmluZSBJQ0VfRFBMTF9QSU5fR0VOX1JDTEtfRlJFUVx0XHQxOTUzMTI1XG4gIDE2Olx0I2RlZmluZSBJQ0VfRFBMTF9QSU5fUFJJT19PVVRQVVRcdFx0MHhmZlxuICAxNzpcdCNkZWZpbmUgSUNFX0RQTExfSU5QVVRfUkVGX05VTVx0XHRcdDEwXG4gIDE4Olx0I2RlZmluZSBJQ0VfRFBMTF9QSEFTRV9PRkZTRVRfUEVSSU9EXHRcdDJcbiAgMTk6XHQjZGVmaW5lIElDRV9EUExMX1NXX1BJTl9JTlBVVF9CQVNFX1NGUFx0XHQ0XG4gIDIwOlx0I2RlZmluZSBJQ0VfRFBMTF9TV19QSU5fSU5QVVRfQkFTRV9RU0ZQXHRcdDZcbiAgMjE6XHQjZGVmaW5lIElDRV9EUExMX1NXX1BJTl9PVVRQVVRfQkFTRVx0XHQwXG4gIDIyOlx0XG4gIDIzOlx0I2RlZmluZSBFODI1X1JDTEtfUEFSRU5UXzBfUElOX0lEWFx0XHQwXG4gIDI0Olx0I2RlZmluZSBFODI1X1JDTEtfUEFSRU5UXzFfUElOX0lEWFx0XHQxXG4gIDI1Olx0XG4gIDI2Olx0I2RlZmluZSBJQ0VfRFBMTF9QSU5fU1dfSU5QVVRfQUJTKGluX2lkeCkgXFxcbiAgMjc6XHRcdChJQ0VfRFBMTF9TV19QSU5fSU5QVVRfQkFTRV9TRlAgJiM0MzsgKGluX2lkeCkpXG4gIDI4Olx0XG4gIDI5Olx0I2RlZmluZSBJQ0VfRFBMTF9QSU5fU1dfMV9JTlBVVF9BQlNfSURYIFxcXG4gIDMwOlx0XHQoSUNFX0RQTExfUElOX1NXX0lOUFVUX0FCUyhJQ0VfRFBMTF9QSU5fU1dfMV9JRFgpKVxuICAzMTpcdFxuICAzMjpcdCNkZWZpbmUgSUNFX0RQTExfUElOX1NXXzJfSU5QVVRfQUJTX0lEWCBcXFxuICAzMzpcdFx0KElDRV9EUExMX1BJTl9TV19JTlBVVF9BQlMoSUNFX0RQTExfUElOX1NXXzJfSURYKSlcbiAgMzQ6XHRcbiAgMzU6XHQjZGVmaW5lIElDRV9EUExMX1BJTl9TV19PVVRQVVRfQUJTKG91dF9pZHgpIFxcXG4gIDM2Olx0XHQoSUNFX0RQTExfU1dfUElOX09VVFBVVF9CQVNFICYjNDM7IChvdXRfaWR4KSlcbiAgMzc6XHRcbiAgMzg6XHQjZGVmaW5lIElDRV9EUExMX1BJTl9TV18xX09VVFBVVF9BQlNfSURYIFxcXG4gIDM5Olx0XHQoSUNFX0RQTExfUElOX1NXX09VVFBVVF9BQlMoSUNFX0RQTExfUElOX1NXXzFfSURYKSlcbiAgNDA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTA4OQoJCQkJCQkJb3V0cHV0OiA5MQoJCQkJCQkJdGhvdWdodHM6IDQwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQXNzZXNzbWVudCBmb3IgYGljZV9kcGxsLmNgIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoLiBJdCYjMzk7cyB0b3VjaGluZyBgaWNlX2RwbGwuY2AgYW5kIGBpY2VfZHBsbC5oYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgcGFydCBvZiB0aGUgSW50ZWwgYGljZWAgZHJpdmVyIGZvciB0aGUgRTgwMCBzZXJpZXMgRXRoZXJuZXQgY29udHJvbGxlcnMuIFRoaXMgaXMgc3BlY2lmaWNhbGx5IGZvY3VzZWQgb24gdGhlIERQTEwgc3Vic3lzdGVtLCBoYW5kbGluZyBhbGwgdGhlIG51YW5jZXMgb2YgdGhvc2UgcGlucywgdGhlIFNNQSBhbmQgVS5GTCBjb25uZWN0b3JzLCBDR1UsIGFuZCB0aGUgUENBOTU3NSBHUElPIGV4cGFuZGVyIOKAkyBhbGwgdGhlIGhhcmR3YXJlLXNwZWNpZmljIGRldGFpbHMuCgpOb3csIGxldCYjMzk7cyBnbyBvdmVyIHRoZSBpbnN0cnVjdGlvbnMgZm9yIGRldGVybWluaW5nIGlmIHRoaXMgY29kZSBpcyB3b3J0aCBmdXp6aW5nLiBUaGUga2V5IGhlcmUgaXMgdGhlICYjMzQ7aW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMmIzM0OyBjbGF1c2UuIFNwZWNpZmljYWxseSwgaXQgbm90ZXMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoIGFuZCBTbWFydE5JQyBkcml2ZXJzIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSBhcmVuJiMzOTt0IGZ1enphYmxlIGluIHN0YW5kYXJkIFFFTVUuCgpUaGUgYGljZWAgZHJpdmVyIGlzICpwcmVjaXNlbHkqIHRoYXQ6IGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBkcml2ZXIgZm9yIEludGVsJiMzOTtzIEU4MDAgc2VyaWVzLiBJdCYjMzk7cyBkZXNpZ25lZCB0byBpbnRlcmZhY2UgZGlyZWN0bHkgd2l0aCBwaHlzaWNhbCBJbnRlbCBoYXJkd2FyZS4gVGhlIERQTEwgZnVuY3Rpb25hbGl0eSwgd2hpY2ggdGhpcyBwYXRjaCBtb2RpZmllcywgaXMgZGVwZW5kZW50IG9uIHNwZWNpZmljIGhhcmR3YXJlIGJvYXJkcyB0aGF0IEkmIzM5O2QgbmVlZCB0byBmdXp6IHRoZXNlIGNvZGUgcGF0aHMuIFRoaXMgaXMgZmFyIGZyb20gYmVpbmcgcG9zc2libGUgaW4gYSBzdGFuZGFyZCBRRU1VIGluc3RhbmNlLCBhbmQgY2VydGFpbmx5IG5vdCBzb21ldGhpbmcgdGhhdCBjYW4gYmUgcHJhY3RpY2FsbHkgdGVzdGVkIGluIHNvbWV0aGluZyBsaWtlIEdDRSBvciBTeXprYWxsZXIgVk1zLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBoYXJkd2FyZS1zcGVjaWZpYyBEUExMIC8gQ0dVIC8gU01BIHBpbiBhY2Nlc3MuCgpUaGVyZWZvcmUsIGdpdmVuIHRoYXQgaXQgcmVxdWlyZXMgKnBoeXNpY2FsKiBJbnRlbCBFODAwIGhhcmR3YXJlLCBhbmQgdGhhdCB0aGlzIGNvZGUmIzM5O3MgZnVuY3Rpb25hbGl0eSBpcyBkaXJlY3RseSB0aWVkIHRvIHRoaXMgaGFyZHdhcmUsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IHRoaXMgaXNuJiMzOTt0IHdvcnRoIGZ1enppbmcgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLgoKU28sIGxldCYjMzk7cyBzb2xpZGlmeSB0aGUgYXNzZXNzbWVudDoKCiogICAqKldvcnRoRnV6emluZzogZmFsc2UqKgoqICAgKipGb2N1c1N5bWJvbHM6IFxbIF0qKgoqICAgKipFbmFibGVDb25maWdzOiBcWyBdKioKKiAgICoqUmVhc29uaW5nOiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEU4MDAgc2VyaWVzIGV0aGVybmV0IGRyaXZlciAoYGljZWApLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZXNlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuKioKClRoYXQgc2hvdWxkIGNvdmVyIGl0LiBSZWFkeSB0byBzdWJtaXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBjaGFuZ2VzIG1vZGlmeSB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyAoaWNlKSBkcml2ZXIgRFBMTCBwaW4gaGFuZGxpbmcuIFRoZSBpY2UgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIEludGVsIEU4MDAgc2VyaWVzIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBjaGFuZ2VzIG1vZGlmeSB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyAoaWNlKSBkcml2ZXIgRFBMTCBwaW4gaGFuZGxpbmcuIFRoZSBpY2UgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIEludGVsIEU4MDAgc2VyaWVzIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjQ0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTo0Mzo1MS41OTQ1NDkyNDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjU5NTkwMDQzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgbW9kaWZ5IHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIChpY2UpIGRyaXZlciBEUExMIHBpbiBoYW5kbGluZy4gVGhlIGljZSBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgSW50ZWwgRTgwMCBzZXJpZXMgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQzOjUxLjU5NDU1Mzc5N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwOTY2NTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMWIwZjA2NjMwZjg0NDQyZjg3MDUyNjJlMTAzZmNjZDhiYmQxYzUyZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMTo0Mzo1MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jXFxuaW5kZXggODVhNzRjZDZlYTFmMy4uY2ZmYzlkNzM3ZGMyZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jXFxuQEAgLTg5LDYgKzg5LDI5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fZnJlcXVlbmN5IGljZV9lc3luY19yYW5nZVtdID0ge1xcbiBcXHREUExMX1BJTl9GUkVRVUVOQ1lfUkFOR0UoMCwgRFBMTF9QSU5fRlJFUVVFTkNZXzFfSFopLFxcbiB9O1xcbiBcXG4rLypcXG4rICogU01BMS9VLkZMMSBNVVggdGFibGVcXG4rICorLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcXG4rICp8ICAgICAgICAgICAgICAgIHwgU01BMV9ESVJfRU4gfCBTTUExX1RYX0VOIHxcXG4rICorLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcXG4rICp8U01BMSBSWCBFbmFibGUgIHwgICAgICAgMCAgICAgfCAgICAgIHggICAgIHxcXG4rICp8dS5GTDEgVFggRW5hYmxlIHwgICAgICAgMCAgICAgfCAgICAgIDAgICAgIHxcXG4rICp8U01BMSBUWCBFbmFibGUgIHwgICAgICAgMSAgICAgfCAgICAgIDAgICAgIHxcXG4rICp8QWxsIERpc2FibGUgICAgIHwgICAgICAgMSAgICAgfCAgICAgIDEgICAgIHxcXG4rICorLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcXG4rICpcXG4rICogU01BMi9VLkZMMiBNVVggdGFibGVcXG4rICorLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXFxuKyAqfCAgICAgICAgICAgICAgICB8IFNNQTJfRElSX0VOIHwgU01BMl9UWF9FTiB8IFVGTDJfUlhfRU4gfFxcbisgKistLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcXG4rICp8U01BMiBSWCBFbmFibGUgIHwgICAgICAgMCAgICAgfCAgICAgIHggICAgIHwgICAgIHggICAgICB8XFxuKyAqfHUuRkwyIFJYIEVuYWJsZSB8ICAgICAgIDEgICAgIHwgICAgICB4ICAgICB8ICAgICAwICAgICAgfFxcbisgKnxTTUEyIFRYIEVuYWJsZSAgfCAgICAgICAxICAgICB8ICAgICAgMCAgICAgfCAgICAgeCAgICAgIHxcXG4rICp8U01BMiBEaXNhYmxlICAgIHwgICAgICAgMSAgICAgfCAgICAgIDEgICAgIHwgICAgIHggICAgICB8XFxuKyAqfEFsbCBEaXNhYmxlICAgICB8ICAgICAgIDEgICAgIHwgICAgICAxICAgICB8ICAgICAxICAgICAgfFxcbisgKistLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcXG4rICovXFxuK1xcbiAvKipcXG4gICogaWNlX2RwbGxfaXNfc3dfcGluIC0gY2hlY2sgaWYgZ2l2ZW4gcGluIHNoYWxsIGJlIGNvbnRyb2xsZWQgYnkgU1dcXG4gICogQHBmOiBwcml2YXRlIGJvYXJkIHN0cnVjdHVyZVxcbkBAIC00NDMsNiArNDY2LDQwIEBAIGljZV9kcGxsX3N3X3Bpbl9mcmVxdWVuY3lfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBpY2VfZHBsbF9nZXRfZmFsbGJhY2tfaWR4KHN0cnVjdCBpY2VfZHBsbHMgKmQsIHN0cnVjdCBpY2VfZHBsbF9waW4gKnRhcmdldClcXG4re1xcbitcXHRpZiAoZC1cXHUwMDNlcHBzLmRwbGxfaWR4IFxcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICB0YXJnZXQtXFx1MDAzZXN0YXRlW2QtXFx1MDAzZXBwcy5kcGxsX2lkeF0gPT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEKVxcbitcXHRcXHRyZXR1cm4gZC1cXHUwMDNlcHBzLmRwbGxfaWR4O1xcbitcXG4rXFx0aWYgKGQtXFx1MDAzZWVlYy5kcGxsX2lkeCBcXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgdGFyZ2V0LVxcdTAwM2VzdGF0ZVtkLVxcdTAwM2VlZWMuZHBsbF9pZHhdID09IERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRClcXG4rXFx0XFx0cmV0dXJuIGQtXFx1MDAzZWVlYy5kcGxsX2lkeDtcXG4rXFxuK1xcdHJldHVybiAtRUlOVkFMO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpY2VfZHBsbF9nZXRfcGVlcl90YXJnZXQoc3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcixcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaWNlX2RwbGxfcGluICoqcGVlcl90YXJnZXQsXFxuK1xcdFxcdFxcdFxcdCAgICAgZW51bSBpY2VfZHBsbF9waW5fdHlwZSAqcGVlcl90eXBlKVxcbit7XFxuK1xcdCpwZWVyX3RhcmdldCA9IE5VTEw7XFxuK1xcdCpwZWVyX3R5cGUgPSAwO1xcbitcXG4rXFx0c3dpdGNoIChwZWVyLVxcdTAwM2VkaXJlY3Rpb24pIHtcXG4rXFx0Y2FzZSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUOlxcbitcXHRcXHQqcGVlcl90YXJnZXQgPSBwZWVyLVxcdTAwM2VvdXRwdXQ7XFxuK1xcdFxcdCpwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIERQTExfUElOX0RJUkVDVElPTl9JTlBVVDpcXG4rXFx0XFx0KnBlZXJfdGFyZ2V0ID0gcGVlci1cXHUwMDNlaW5wdXQ7XFxuK1xcdFxcdCpwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBpY2VfZHBsbF9waW5fZW5hYmxlIC0gZW5hYmxlIGEgcGluIG9uIGRwbGxzXFxuICAqIEBodzogYm9hcmQgcHJpdmF0ZSBodyBzdHJ1Y3R1cmVcXG5AQCAtNTM4LDYgKzU5NSwyOSBAQCBpY2VfZHBsbF9waW5fZGlzYWJsZShzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbisvKipcXG4rICogaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyIC0gbm90aWZ5IHRoZSBwYWlyZWQgU1cgcGluIGFmdGVyIGEgc3RhdGUgY2hhbmdlXFxuKyAqIEBjaGFuZ2VkOiB0aGUgU1cgcGluIHRoYXQgd2FzIGV4cGxpY2l0bHkgY2hhbmdlZCAoYWxyZWFkeSBub3RpZmllZCBieSBkcGxsIGNvcmUpXFxuKyAqXFxuKyAqIFNNQSBhbmQgVS5GTCBwaW5zIHNoYXJlIHBoeXNpY2FsIHNpZ25hbCBwYXRocyBpbiBwYWlycyAoU01BMS9VLkZMMSBhbmRcXG4rICogU01BMi9VLkZMMikuICBXaGVuIG9uZSBwaW4ncyByb3V0aW5nIGNoYW5nZXMgdmlhIHRoZSBQQ0E5NTc1IEdQSU9cXG4rICogZXhwYW5kZXIsIHRoZSBwYWlyZWQgcGluJ3Mgc3RhdGUgbWF5IGFsc28gY2hhbmdlLiAgU2VuZCBhIGNoYW5nZVxcbisgKiBub3RpZmljYXRpb24gZm9yIHRoZSBwZWVyIHBpbiBzbyB1c2Vyc3BhY2UgY29uc3VtZXJzIG1vbml0b3JpbmcgdGhlXFxuKyAqIHBlZXIgdmlhIGRwbGwgbmV0bGluayBsZWFybiBhYm91dCB0aGUgdXBkYXRlLlxcbisgKlxcbisgKiBDb250ZXh0OiBDYWxsZWQgZnJvbSBkcGxsX3Bpbl9vcHMgY2FsbGJhY2tzIGFmdGVyIHBmLVxcdTAwM2VkcGxscy5sb2NrIGlzXFxuKyAqICAgICAgICAgIHJlbGVhc2VkLiAgVXNlcyBfX2RwbGxfcGluX2NoYW5nZV9udGYoKSBiZWNhdXNlIGRwbGxfbG9jayBpc1xcbisgKiAgICAgICAgICBzdGlsbCBoZWxkIGJ5IHRoZSBkcGxsIG5ldGxpbmsgbGF5ZXIuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoc3RydWN0IGljZV9kcGxsX3BpbiAqY2hhbmdlZClcXG4re1xcbitcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyO1xcbitcXG4rXFx0cGVlciA9IGNoYW5nZWQtXFx1MDAzZW11eGVkO1xcbitcXHRpZiAocGVlciBcXHUwMDI2XFx1MDAyNiBwZWVyLVxcdTAwM2VwaW4pXFxuK1xcdFxcdF9fZHBsbF9waW5fY2hhbmdlX250ZihwZWVyLVxcdTAwM2VwaW4pO1xcbit9XFxuK1xcbiAvKipcXG4gICogaWNlX2RwbGxfcGluX3N0b3JlX3N0YXRlIC0gdXBkYXRlcyB0aGUgc3RhdGUgb2YgcGluIGluIFNXIGJvb2trZWVwaW5nXFxuICAqIEBwaW46IHBvaW50ZXIgdG8gYSBwaW5cXG5AQCAtNzA5LDYgKzc4OSw4IEBAIGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfZHBsbF9waW4gKnBpbixcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4gXFx0dTggcGFyZW50LCBwb3J0X251bSA9IElDRV9BUUNfU0VUX1BIWV9SRUNfQ0xLX09VVF9DVVJSX1BPUlQ7XFxuK1xcdGVudW0gZHBsbF9waW5fc3RhdGUgZWVjX3N0YXRlID0gRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xcbitcXHRlbnVtIGRwbGxfcGluX3N0YXRlIHBwc19zdGF0ZSA9IERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdHN3aXRjaCAocGluX3R5cGUpIHtcXG5AQCAtNzIwLDI2ICs4MDIsMjYgQEAgaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLFxcbiBcXHRcXHRcXHRnb3RvIGVycjtcXG4gXFx0XFx0aWYgKElDRV9BUUNfR0VUX0NHVV9JTl9DRkdfRkxHMl9JTlBVVF9FTiBcXHUwMDI2IHBpbi1cXHUwMDNlZmxhZ3NbMF0pIHtcXG4gXFx0XFx0XFx0aWYgKHBpbi1cXHUwMDNlcGluKSB7XFxuLVxcdFxcdFxcdFxcdHBpbi1cXHUwMDNlc3RhdGVbcGYtXFx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxcbitcXHRcXHRcXHRcXHRlZWNfc3RhdGUgPVxcbiBcXHRcXHRcXHRcXHRcXHRwaW4tXFx1MDAzZXBpbiA9PSBwZi1cXHUwMDNlZHBsbHMuZWVjLmFjdGl2ZV9pbnB1dCA/XFxuIFxcdFxcdFxcdFxcdFxcdERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCA6XFxuIFxcdFxcdFxcdFxcdFxcdERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7XFxuLVxcdFxcdFxcdFxcdHBpbi1cXHUwMDNlc3RhdGVbcGYtXFx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxcbitcXHRcXHRcXHRcXHRwcHNfc3RhdGUgPVxcbiBcXHRcXHRcXHRcXHRcXHRwaW4tXFx1MDAzZXBpbiA9PSBwZi1cXHUwMDNlZHBsbHMucHBzLmFjdGl2ZV9pbnB1dCA/XFxuIFxcdFxcdFxcdFxcdFxcdERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCA6XFxuIFxcdFxcdFxcdFxcdFxcdERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7XFxuIFxcdFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdFxcdHBpbi1cXHUwMDNlc3RhdGVbcGYtXFx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxcbi1cXHRcXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xcbi1cXHRcXHRcXHRcXHRwaW4tXFx1MDAzZXN0YXRlW3BmLVxcdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID1cXG4tXFx0XFx0XFx0XFx0XFx0RFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcXG4rXFx0XFx0XFx0XFx0ZWVjX3N0YXRlID0gRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcXG4rXFx0XFx0XFx0XFx0cHBzX3N0YXRlID0gRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRwaW4tXFx1MDAzZXN0YXRlW3BmLVxcdTAwM2VkcGxscy5lZWMuZHBsbF9pZHhdID1cXG4tXFx0XFx0XFx0XFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xcbi1cXHRcXHRcXHRwaW4tXFx1MDAzZXN0YXRlW3BmLVxcdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID1cXG4tXFx0XFx0XFx0XFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xcbiBcXHRcXHR9XFxuK1xcdFxcdC8qIENvbW1pdCBvbmx5IGFmdGVyIGEgc3VjY2Vzc2Z1bCByZWFkIHNvIGxvY2tsZXNzIHJlYWRlcnMgbmV2ZXJcXG4rXFx0XFx0ICogb2JzZXJ2ZSBhIHRyYW5zaWVudCBkaXNjb25uZWN0ZWQgc3RhdGUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAocGYtXFx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeCBcXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWClcXG4rXFx0XFx0XFx0cGluLVxcdTAwM2VzdGF0ZVtwZi1cXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4XSA9IGVlY19zdGF0ZTtcXG4rXFx0XFx0aWYgKHBmLVxcdTAwM2VkcGxscy5wcHMuZHBsbF9pZHggXFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpXFxuK1xcdFxcdFxcdHBpbi1cXHUwMDNlc3RhdGVbcGYtXFx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPSBwcHNfc3RhdGU7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDpcXG4gXFx0XFx0cmV0ID0gaWNlX2FxX2dldF9vdXRwdXRfcGluX2NmZyhcXHUwMDI2cGYtXFx1MDAzZWh3LCBwaW4tXFx1MDAzZWlkeCxcXG5AQCAtNzUwLDIwICs4MzIsMTcgQEAgaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLFxcbiBcXG4gXFx0XFx0cGFyZW50IFxcdTAwMjY9IElDRV9BUUNfR0VUX0NHVV9PVVRfQ0ZHX0RQTExfU1JDX1NFTDtcXG4gXFx0XFx0aWYgKElDRV9BUUNfR0VUX0NHVV9PVVRfQ0ZHX09VVF9FTiBcXHUwMDI2IHBpbi1cXHUwMDNlZmxhZ3NbMF0pIHtcXG4tXFx0XFx0XFx0cGluLVxcdTAwM2VzdGF0ZVtwZi1cXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4XSA9XFxuLVxcdFxcdFxcdFxcdHBhcmVudCA9PSBwZi1cXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4ID9cXG4rXFx0XFx0XFx0ZWVjX3N0YXRlID0gcGFyZW50ID09IHBmLVxcdTAwM2VkcGxscy5lZWMuZHBsbF9pZHggP1xcbiBcXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxcbiBcXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XFxuLVxcdFxcdFxcdHBpbi1cXHUwMDNlc3RhdGVbcGYtXFx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxcbi1cXHRcXHRcXHRcXHRwYXJlbnQgPT0gcGYtXFx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeCA/XFxuK1xcdFxcdFxcdHBwc19zdGF0ZSA9IHBhcmVudCA9PSBwZi1cXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4ID9cXG4gXFx0XFx0XFx0XFx0RFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEIDpcXG4gXFx0XFx0XFx0XFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xcbi1cXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRwaW4tXFx1MDAzZXN0YXRlW3BmLVxcdTAwM2VkcGxscy5lZWMuZHBsbF9pZHhdID1cXG4tXFx0XFx0XFx0XFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xcbi1cXHRcXHRcXHRwaW4tXFx1MDAzZXN0YXRlW3BmLVxcdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID1cXG4tXFx0XFx0XFx0XFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xcbiBcXHRcXHR9XFxuK1xcdFxcdGlmIChwZi1cXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4IFxcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYKVxcbitcXHRcXHRcXHRwaW4tXFx1MDAzZXN0YXRlW3BmLVxcdTAwM2VkcGxscy5lZWMuZHBsbF9pZHhdID0gZWVjX3N0YXRlO1xcbitcXHRcXHRpZiAocGYtXFx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeCBcXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWClcXG4rXFx0XFx0XFx0cGluLVxcdTAwM2VzdGF0ZVtwZi1cXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4XSA9IHBwc19zdGF0ZTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgSUNFX0RQTExfUElOX1RZUEVfUkNMS19JTlBVVDpcXG4gXFx0XFx0aWYgKHBmLVxcdTAwM2Vody5tYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNSkge1xcbkBAIC0xMTYzLDMwICsxMjQyLDg1IEBAIGljZV9kcGxsX2lucHV0X3N0YXRlX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGV4dGFjaywgSUNFX0RQTExfUElOX1RZUEVfSU5QVVQpO1xcbiB9XFxuIFxcbi0vKipcXG4tICogaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyIC0gbm90aWZ5IHRoZSBwYWlyZWQgU1cgcGluIGFmdGVyIGEgc3RhdGUgY2hhbmdlXFxuLSAqIEBkOiBwb2ludGVyIHRvIGRwbGxzIHN0cnVjdFxcbi0gKiBAY2hhbmdlZDogdGhlIFNXIHBpbiB0aGF0IHdhcyBleHBsaWNpdGx5IGNoYW5nZWQgKGFscmVhZHkgbm90aWZpZWQgYnkgZHBsbCBjb3JlKVxcbi0gKlxcbi0gKiBTTUEgYW5kIFUuRkwgcGlucyBzaGFyZSBwaHlzaWNhbCBzaWduYWwgcGF0aHMgaW4gcGFpcnMgKFNNQTEvVS5GTDEgYW5kXFxuLSAqIFNNQTIvVS5GTDIpLiAgV2hlbiBvbmUgcGluJ3Mgcm91dGluZyBjaGFuZ2VzIHZpYSB0aGUgUENBOTU3NSBHUElPXFxuLSAqIGV4cGFuZGVyLCB0aGUgcGFpcmVkIHBpbidzIHN0YXRlIG1heSBhbHNvIGNoYW5nZS4gIFNlbmQgYSBjaGFuZ2VcXG4tICogbm90aWZpY2F0aW9uIGZvciB0aGUgcGVlciBwaW4gc28gdXNlcnNwYWNlIGNvbnN1bWVycyBtb25pdG9yaW5nIHRoZVxcbi0gKiBwZWVyIHZpYSBkcGxsIG5ldGxpbmsgbGVhcm4gYWJvdXQgdGhlIHVwZGF0ZS5cXG4tICpcXG4tICogQ29udGV4dDogQ2FsbGVkIGZyb20gZHBsbF9waW5fb3BzIGNhbGxiYWNrcyBhZnRlciBwZi1cXHUwMDNlZHBsbHMubG9jayBpc1xcbi0gKiAgICAgICAgICByZWxlYXNlZC4gIFVzZXMgX19kcGxsX3Bpbl9jaGFuZ2VfbnRmKCkgYmVjYXVzZSBkcGxsX2xvY2sgaXNcXG4tICogICAgICAgICAgc3RpbGwgaGVsZCBieSB0aGUgZHBsbCBuZXRsaW5rIGxheWVyLlxcbi0gKi9cXG4tc3RhdGljIHZvaWQgaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKHN0cnVjdCBpY2VfZHBsbHMgKmQsXFxuLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpY2VfZHBsbF9waW4gKmNoYW5nZWQpXFxuK3N0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIHtcXG4rXFx0Ym9vbCBlbmFibGVkO1xcbitcXHR1OCBkcGxsX2lkeDtcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnRcXG4raWNlX2RwbGxfcGluX2NvbmZpZ19nZXQoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfZHBsbF9waW4gKnRhcmdldCxcXG4rXFx0XFx0XFx0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlLFxcbitcXHRcXHRcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyAqY29uZmlnLFxcbitcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4tXFx0c3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcjtcXG4rXFx0aW50IHJldDtcXG4gXFxuLVxcdHBlZXIgPSAoY2hhbmdlZCBcXHUwMDNlPSBkLVxcdTAwM2VzbWEgXFx1MDAyNlxcdTAwMjYgY2hhbmdlZCBcXHUwMDNjIGQtXFx1MDAzZXNtYSArIElDRV9EUExMX1BJTl9TV19OVU0pID9cXG4tXFx0XFx0XFx1MDAyNmQtXFx1MDAzZXVmbFtjaGFuZ2VkLVxcdTAwM2VpZHhdIDogXFx1MDAyNmQtXFx1MDAzZXNtYVtjaGFuZ2VkLVxcdTAwM2VpZHhdO1xcbi1cXHRpZiAocGVlci1cXHUwMDNlcGluKVxcbi1cXHRcXHRfX2RwbGxfcGluX2NoYW5nZV9udGYocGVlci1cXHUwMDNlcGluKTtcXG4rXFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0c3dpdGNoICh0eXBlKSB7XFxuK1xcdGNhc2UgSUNFX0RQTExfUElOX1RZUEVfSU5QVVQ6XFxuK1xcdFxcdGNvbmZpZy1cXHUwMDNlZW5hYmxlZCA9IHRhcmdldC1cXHUwMDNlZmxhZ3NbMF0gXFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgIElDRV9BUUNfR0VUX0NHVV9JTl9DRkdfRkxHMl9JTlBVVF9FTjtcXG4rXFx0XFx0Y29uZmlnLVxcdTAwM2VkcGxsX2lkeCA9IDA7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRjYXNlIElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDpcXG4rXFx0XFx0Y29uZmlnLVxcdTAwM2VlbmFibGVkID0gdGFyZ2V0LVxcdTAwM2VmbGFnc1swXSBcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdCAgSUNFX0FRQ19HRVRfQ0dVX09VVF9DRkdfT1VUX0VOO1xcbitcXHRcXHRpZiAoIWNvbmZpZy1cXHUwMDNlZW5hYmxlZCkge1xcbitcXHRcXHRcXHRjb25maWctXFx1MDAzZWRwbGxfaWR4ID0gMDtcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHJldCA9IGljZV9kcGxsX2dldF9mYWxsYmFja19pZHgoXFx1MDAyNnBmLVxcdTAwM2VkcGxscywgdGFyZ2V0KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGNvbmZpZy1cXHUwMDNlZHBsbF9pZHggPSByZXQ7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK2ljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqdGFyZ2V0LFxcbitcXHRcXHRcXHQgICAgZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlLFxcbitcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGljZV9kcGxsX3Bpbl9jb25maWcgKmNvbmZpZyxcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaywgaW50IGluaXRfZXJyKVxcbit7XFxuK1xcdGludCByZXN0b3JlX2VyciwgdXBkYXRlX2VycjtcXG4rXFxuK1xcdGlmIChjb25maWctXFx1MDAzZWVuYWJsZWQpXFxuK1xcdFxcdHJlc3RvcmVfZXJyID0gaWNlX2RwbGxfcGluX2VuYWJsZShcXHUwMDI2cGYtXFx1MDAzZWh3LCB0YXJnZXQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgY29uZmlnLVxcdTAwM2VkcGxsX2lkeCwgdHlwZSwgZXh0YWNrKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRyZXN0b3JlX2VyciA9IGljZV9kcGxsX3Bpbl9kaXNhYmxlKFxcdTAwMjZwZi1cXHUwMDNlaHcsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcXG4rXFx0dXBkYXRlX2VyciA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcXG4rXFx0aWYgKHJlc3RvcmVfZXJyIHx8IHVwZGF0ZV9lcnIpIHtcXG4rXFx0XFx0ZGV2X3dhcm4oaWNlX3BmX3RvX2RldihwZiksXFxuK1xcdFxcdFxcdCBcXFwiRmFpbGVkIHRvIHJvbGxiYWNrIHBpbiBzdGF0ZTogZXJyICVkLCByZXN0b3JlIGVyciAlZCwgdXBkYXRlIGVyciAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0IGluaXRfZXJyLCByZXN0b3JlX2VyciwgdXBkYXRlX2Vycik7XFxuK1xcdFxcdHJldHVybiByZXN0b3JlX2VyciA/IHJlc3RvcmVfZXJyIDogdXBkYXRlX2VycjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaWNlX2RwbGxfcmVzdG9yZV9zbWFfY3RybChzdHJ1Y3QgaWNlX3BmICpwZiwgdTggb2xkX2RhdGEsXFxuK1xcdFxcdFxcdFxcdCAgICAgaW50IGluaXRfZXJyKVxcbit7XFxuK1xcdGludCByZXN0b3JlX2VycjtcXG4rXFxuK1xcdHJlc3RvcmVfZXJyID0gaWNlX3dyaXRlX3NtYV9jdHJsKFxcdTAwMjZwZi1cXHUwMDNlaHcsIG9sZF9kYXRhKTtcXG4rXFx0aWYgKCFyZXN0b3JlX2VycilcXG4rXFx0XFx0cmVzdG9yZV9lcnIgPSBpY2VfZHBsbF9zd19waW5zX3VwZGF0ZShwZik7XFxuK1xcdGlmIChyZXN0b3JlX2VycilcXG4rXFx0XFx0ZGV2X3dhcm4oaWNlX3BmX3RvX2RldihwZiksXFxuK1xcdFxcdFxcdCBcXFwiRmFpbGVkIHRvIHJlc3RvcmUgU01BIGNvbnRyb2w6IGVyciAlZCwgcmVzdG9yZSBlcnIgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCBpbml0X2VyciwgcmVzdG9yZV9lcnIpO1xcbitcXG4rXFx0cmV0dXJuIHJlc3RvcmVfZXJyO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMTIwNiwzMCArMTM0MCwzOSBAQCBzdGF0aWMgaW50IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHN0cnVjdCBpY2VfZHBsbF9waW4gKnAsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGVudW0gZHBsbF9waW5fZGlyZWN0aW9uIGRpcmVjdGlvbixcXG4gXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuK1xcdHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIHBlZXJfY29uZmlnO1xcbiBcXHRzdHJ1Y3QgaWNlX2RwbGxzICpkID0gXFx1MDAyNnAtXFx1MDAzZXBmLVxcdTAwM2VkcGxscztcXG4rXFx0aW50IHBlZXJfZHBsbF9pZHgsIHJlc3RvcmVfZXJyLCByZXQ7XFxuK1xcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnRhcmdldCA9IE5VTEw7XFxuK1xcdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZSA9IDA7XFxuIFxcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXI7XFxuLVxcdHU4IGRhdGE7XFxuLVxcdGludCByZXQ7XFxuK1xcdHU4IGRhdGEsIG9sZF9kYXRhID0gMDtcXG4gXFxuIFxcdGlmIChwLVxcdTAwM2VkaXJlY3Rpb24gPT0gZGlyZWN0aW9uIFxcdTAwMjZcXHUwMDI2IHAtXFx1MDAzZWFjdGl2ZSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdHJldCA9IGljZV9yZWFkX3NtYV9jdHJsKFxcdTAwMjZwLVxcdTAwM2VwZi1cXHUwMDNlaHcsIFxcdTAwMjZkYXRhKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0b2xkX2RhdGEgPSBkYXRhO1xcbiBcXG4gXFx0c3dpdGNoIChwLVxcdTAwM2VpZHgpIHtcXG4gXFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFg6XFxuLVxcdFxcdGRhdGEgXFx1MDAyNj0gfklDRV9TTUExX01BU0s7XFxuLVxcdFxcdGlmIChkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVClcXG4rXFx0XFx0aWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKSB7XFxuK1xcdFxcdFxcdGRhdGEgXFx1MDAyNj0gfklDRV9TTUExX1RYX0VOO1xcbiBcXHRcXHRcXHRkYXRhIHw9IElDRV9TTUExX0RJUl9FTjtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0ZGF0YSBcXHUwMDI2PSB+SUNFX1NNQTFfRElSX0VOO1xcbitcXHRcXHRcXHRkYXRhIFxcdTAwMjY9IH5JQ0VfU01BMV9UWF9FTjtcXG4rXFx0XFx0fVxcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFg6XFxuIFxcdFxcdGlmIChkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUKSB7XFxuIFxcdFxcdFxcdGRhdGEgXFx1MDAyNj0gfklDRV9TTUEyX0RJUl9FTjtcXG4tXFx0XFx0XFx0ZGF0YSB8PSBJQ0VfU01BMl9VRkwyX1JYX0RJUztcXG4rXFx0XFx0XFx0ZGF0YSBcXHUwMDI2PSB+SUNFX1NNQTJfVFhfRU47XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdGRhdGEgXFx1MDAyNj0gfihJQ0VfU01BMl9UWF9FTiB8IElDRV9TTUEyX1VGTDJfUlhfRElTKTtcXG4gXFx0XFx0XFx0ZGF0YSB8PSBJQ0VfU01BMl9ESVJfRU47XFxuK1xcdFxcdFxcdGRhdGEgXFx1MDAyNj0gfklDRV9TTUEyX1VGTDJfUlhfRElTO1xcbitcXHRcXHRcXHRkYXRhIFxcdTAwMjY9IH5JQ0VfU01BMl9UWF9FTjtcXG4gXFx0XFx0fVxcbiBcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG5AQCAtMTI0MSw3ICsxMzg0LDcgQEAgc3RhdGljIGludCBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRJQ0VfRFBMTF9QSU5fVFlQRV9TT0ZUV0FSRSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ZXh0YWNrKTtcXG4gXFx0aWYgKHJldClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0Z290byByZXN0b3JlX3NtYTtcXG4gXFxuIFxcdC8qIFdoZW4gYSBkaXJlY3Rpb24gY2hhbmdlIGFjdGl2YXRlcyB0aGUgcGFpcmVkIFUuRkwgcGluLCBlbmFibGVcXG4gXFx0ICogaXRzIGJhY2tpbmcgQ0dVIHBpbiBzbyB0aGUgcGluIHJlcG9ydHMgYXMgY29ubmVjdGVkLiBXaXRob3V0XFxuQEAgLTEyNTAsMjUgKzEzOTMsNDYgQEAgc3RhdGljIGludCBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwLFxcbiBcXHQgKiBiYWNraW5nIHBpbiB3aGVuIFUuRkwgYmVjb21lcyBpbmFjdGl2ZSBiZWNhdXNlIHRoZSBTTUEgcGluIG1heVxcbiBcXHQgKiBzdGlsbCBiZSB1c2luZyBpdC5cXG4gXFx0ICovXFxuLVxcdHBlZXIgPSBcXHUwMDI2ZC1cXHUwMDNldWZsW3AtXFx1MDAzZWlkeF07XFxuK1xcdHBlZXIgPSBwLVxcdTAwM2VtdXhlZDtcXG4gXFx0aWYgKHBlZXItXFx1MDAzZWFjdGl2ZSkge1xcbi1cXHRcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICp0YXJnZXQ7XFxuLVxcdFxcdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZTtcXG4tXFxuIFxcdFxcdGlmIChwZWVyLVxcdTAwM2VvdXRwdXQpIHtcXG4gXFx0XFx0XFx0dGFyZ2V0ID0gcGVlci1cXHUwMDNlb3V0cHV0O1xcbiBcXHRcXHRcXHR0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUO1xcbi1cXHRcXHR9IGVsc2Uge1xcbitcXHRcXHR9IGVsc2UgaWYgKHBlZXItXFx1MDAzZWlucHV0KSB7XFxuIFxcdFxcdFxcdHRhcmdldCA9IHBlZXItXFx1MDAzZWlucHV0O1xcbiBcXHRcXHRcXHR0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfSU5QVVQ7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdGdvdG8gcmVzdG9yZV9zbWE7XFxuIFxcdFxcdH1cXG4tXFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZShcXHUwMDI2cC1cXHUwMDNlcGYtXFx1MDAzZWh3LCB0YXJnZXQsXFxuLVxcdFxcdFxcdFxcdFxcdCAgZC1cXHUwMDNlZWVjLmRwbGxfaWR4LCB0eXBlLCBleHRhY2spO1xcbi1cXHRcXHRpZiAoIXJldClcXG4tXFx0XFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwLVxcdTAwM2VwZiwgdGFyZ2V0LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHR0eXBlLCBleHRhY2spO1xcbitcXG4rXFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX2NvbmZpZ19nZXQocC1cXHUwMDNlcGYsIHRhcmdldCwgdHlwZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnBlZXJfY29uZmlnLCBleHRhY2spO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIHJlc3RvcmVfc21hO1xcbitcXG4rXFx0XFx0cGVlcl9kcGxsX2lkeCA9IGljZV9kcGxsX2dldF9mYWxsYmFja19pZHgoZCwgdGFyZ2V0KTtcXG4rXFx0XFx0aWYgKHBlZXJfZHBsbF9pZHggXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRwZWVyX2RwbGxfaWR4ID0gZC1cXHUwMDNlZWVjLmRwbGxfaWR4O1xcbitcXHRcXHRyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKFxcdTAwMjZwLVxcdTAwM2VwZi1cXHUwMDNlaHcsIHRhcmdldCwgcGVlcl9kcGxsX2lkeCxcXG4rXFx0XFx0XFx0XFx0XFx0ICB0eXBlLCBleHRhY2spO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIHJlc3RvcmVfcGVlcjtcXG4rXFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwLVxcdTAwM2VwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIHJlc3RvcmVfcGVlcjtcXG4gXFx0fVxcbiBcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbityZXN0b3JlX3BlZXI6XFxuK1xcdHJlc3RvcmVfZXJyID1cXG4rXFx0XFx0aWNlX2RwbGxfcGluX2NvbmZpZ19yZXN0b3JlKHAtXFx1MDAzZXBmLCB0YXJnZXQsIHR5cGUsIFxcdTAwMjZwZWVyX2NvbmZpZyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGV4dGFjaywgcmV0KTtcXG4rXFx0aWYgKHJlc3RvcmVfZXJyKVxcbitcXHRcXHRyZXQgPSByZXN0b3JlX2VycjtcXG4rcmVzdG9yZV9zbWE6XFxuK1xcdGljZV9kcGxsX3Jlc3RvcmVfc21hX2N0cmwocC1cXHUwMDNlcGYsIG9sZF9kYXRhLCByZXQpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbkBAIC0xMjk0LDE0ICsxNDU4LDE4IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcXG4gXFx0XFx0XFx0ICAgZW51bSBkcGxsX3Bpbl9zdGF0ZSBzdGF0ZSxcXG4gXFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuK1xcdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgcGVlcl90eXBlID0gMCwgdHlwZTtcXG4gXFx0c3RydWN0IGljZV9kcGxsX3BpbiAqcCA9IHBpbl9wcml2LCAqdGFyZ2V0O1xcbitcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyX3RhcmdldCA9IE5VTEw7XFxuK1xcdHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIHBlZXJfY29uZmlnO1xcbitcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyBvbGRfY29uZmlnO1xcbitcXHRpbnQgcGVlcl9kcGxsX2lkeCwgcmVzdG9yZV9lcnIsIHJldDtcXG4gXFx0c3RydWN0IGljZV9kcGxsICpkID0gZHBsbF9wcml2O1xcbi1cXHRlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGU7XFxuIFxcdHN0cnVjdCBpY2VfcGYgKnBmID0gcC1cXHUwMDNlcGY7XFxuIFxcdHN0cnVjdCBpY2VfaHcgKmh3O1xcbitcXHR1OCBvbGRfZGF0YSA9IDA7XFxuIFxcdGJvb2wgZW5hYmxlO1xcbiBcXHR1OCBkYXRhO1xcbi1cXHRpbnQgcmV0O1xcbiBcXG4gXFx0aWYgKGljZV9kcGxsX2lzX3Jlc2V0KHBmLCBleHRhY2spKVxcbiBcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbkBAIC0xMzExLDE0ICsxNDc5LDE3IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcXG4gXFx0cmV0ID0gaWNlX3JlYWRfc21hX2N0cmwoaHcsIFxcdTAwMjZkYXRhKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdG9sZF9kYXRhID0gZGF0YTtcXG4gXFxuIFxcdHJldCA9IC1FSU5WQUw7XFxuIFxcdHN3aXRjaCAocC1cXHUwMDNlaWR4KSB7XFxuIFxcdGNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOlxcbi1cXHRcXHRpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEKSB7XFxuK1xcdFxcdHN3aXRjaCAoc3RhdGUpIHtcXG4rXFx0XFx0Y2FzZSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQ6XFxuIFxcdFxcdFxcdGRhdGEgXFx1MDAyNj0gfklDRV9TTUExX01BU0s7XFxuIFxcdFxcdFxcdGVuYWJsZSA9IHRydWU7XFxuLVxcdFxcdH0gZWxzZSBpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEKSB7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDpcXG4gXFx0XFx0XFx0LyogU2tpcCBpZiBVLkZMMSBpcyBub3QgYWN0aXZlLCBzZXR0aW5nIFRYX0VOXFxuIFxcdFxcdFxcdCAqIHdoaWxlIERJUl9FTiBpcyBzZXQgd291bGQgYWxzbyBkZWFjdGl2YXRlXFxuIFxcdFxcdFxcdCAqIHRoZSBwYWlyZWQgU01BMSBvdXRwdXQuXFxuQEAgLTEzMjksMTggKzE1MDAsMjEgQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGRhdGEgfD0gSUNFX1NNQTFfVFhfRU47XFxuIFxcdFxcdFxcdGVuYWJsZSA9IGZhbHNlO1xcbi1cXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0ZGVmYXVsdDpcXG4gXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuIFxcdFxcdH1cXG4gXFx0XFx0dGFyZ2V0ID0gcC1cXHUwMDNlb3V0cHV0O1xcbiBcXHRcXHR0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFg6XFxuLVxcdFxcdGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFKSB7XFxuK1xcdFxcdHN3aXRjaCAoc3RhdGUpIHtcXG4rXFx0XFx0Y2FzZSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOlxcbiBcXHRcXHRcXHRkYXRhIHw9IElDRV9TTUEyX0RJUl9FTjtcXG4gXFx0XFx0XFx0ZGF0YSBcXHUwMDI2PSB+SUNFX1NNQTJfVUZMMl9SWF9ESVM7XFxuIFxcdFxcdFxcdGVuYWJsZSA9IHRydWU7XFxuLVxcdFxcdH0gZWxzZSBpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEKSB7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDpcXG4gXFx0XFx0XFx0LyogU2tpcCBpZiBVLkZMMiBpcyBub3QgYWN0aXZlLCBzZXR0aW5nXFxuIFxcdFxcdFxcdCAqIFVGTDJfUlhfRElTIGNvdWxkIGFsc28gZGlzYWJsZSB0aGUgcGFpcmVkXFxuIFxcdFxcdFxcdCAqIFNNQTIgaW5wdXQuXFxuQEAgLTEzNTIsNyArMTUyNiw4IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRkYXRhIHw9IElDRV9TTUEyX1VGTDJfUlhfRElTO1xcbiBcXHRcXHRcXHRlbmFibGUgPSBmYWxzZTtcXG4tXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuIFxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHRhcmdldCA9IHAtXFx1MDAzZWlucHV0O1xcbkBAIC0xMzY0LDIzICsxNTM5LDc0IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcXG4gXFxuIFxcdHJldCA9IGljZV93cml0ZV9zbWFfY3RybChodywgZGF0YSk7XFxuIFxcdGlmIChyZXQpXFxuLVxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XFxuIFxcdHJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHAsIElDRV9EUExMX1BJTl9UWVBFX1NPRlRXQVJFLFxcbiBcXHRcXHRcXHRcXHRcXHRleHRhY2spO1xcbiBcXHRpZiAocmV0KVxcbi1cXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0XFx0Z290byByZXN0b3JlX3NtYV9jdHJsO1xcbitcXG4rXFx0cmV0ID0gaWNlX2RwbGxfcGluX2NvbmZpZ19nZXQocGYsIHRhcmdldCwgdHlwZSwgXFx1MDAyNm9sZF9jb25maWcsIGV4dGFjayk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gcmVzdG9yZV9zbWFfY3RybDtcXG4gXFxuIFxcdGlmIChlbmFibGUpXFxuIFxcdFxcdHJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoaHcsIHRhcmdldCwgZC1cXHUwMDNlZHBsbF9pZHgsIHR5cGUsIGV4dGFjayk7XFxuIFxcdGVsc2VcXG4gXFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX2Rpc2FibGUoaHcsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcXG4tXFx0aWYgKCFyZXQpXFxuLVxcdFxcdHJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byByZXN0b3JlX3RhcmdldDtcXG4rXFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xcbitcXG4rXFx0aWYgKGVuYWJsZSBcXHUwMDI2XFx1MDAyNiBwLVxcdTAwM2VtdXhlZCBcXHUwMDI2XFx1MDAyNiBwLVxcdTAwM2VtdXhlZC1cXHUwMDNlYWN0aXZlKSB7XFxuK1xcdFxcdGljZV9kcGxsX2dldF9wZWVyX3RhcmdldChwLVxcdTAwM2VtdXhlZCwgXFx1MDAyNnBlZXJfdGFyZ2V0LCBcXHUwMDI2cGVlcl90eXBlKTtcXG4rXFx0XFx0aWYgKCFwZWVyX3RhcmdldCkge1xcbitcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xcbitcXHRcXHR9XFxuK1xcdFxcdHJldCA9IGljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2cGVlcl9jb25maWcsIGV4dGFjayk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gcmVzdG9yZV90YXJnZXQ7XFxuK1xcbitcXHRcXHRwZWVyX2RwbGxfaWR4ID0gaWNlX2RwbGxfZ2V0X2ZhbGxiYWNrX2lkeChcXHUwMDI2cGYtXFx1MDAzZWRwbGxzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHBlZXJfdGFyZ2V0KTtcXG4rXFx0XFx0aWYgKHBlZXJfZHBsbF9pZHggXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRwZWVyX2RwbGxfaWR4ID0gZC1cXHUwMDNlZHBsbF9pZHg7XFxuK1xcdFxcdHJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoXFx1MDAyNnBmLVxcdTAwM2VodywgcGVlcl90YXJnZXQsIHBlZXJfZHBsbF9pZHgsXFxuK1xcdFxcdFxcdFxcdFxcdCAgcGVlcl90eXBlLCBleHRhY2spO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIHJlc3RvcmVfcGVlcjtcXG4rXFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcGVlcl90YXJnZXQsIHBlZXJfdHlwZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ZXh0YWNrKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byByZXN0b3JlX3BlZXI7XFxuK1xcdH1cXG4rXFxuK1xcdGdvdG8gdW5sb2NrO1xcbitcXG4rcmVzdG9yZV9wZWVyOlxcbitcXHRyZXN0b3JlX2VyciA9XFxuK1xcdFxcdGljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShwZiwgcGVlcl90YXJnZXQsIHBlZXJfdHlwZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZwZWVyX2NvbmZpZywgZXh0YWNrLCByZXQpO1xcbitcXHRpZiAocmVzdG9yZV9lcnIpXFxuK1xcdFxcdHJldCA9IHJlc3RvcmVfZXJyO1xcbityZXN0b3JlX3RhcmdldDpcXG4rXFx0cmVzdG9yZV9lcnIgPVxcbitcXHRcXHRpY2VfZHBsbF9waW5fY29uZmlnX3Jlc3RvcmUocGYsIHRhcmdldCwgdHlwZSwgXFx1MDAyNm9sZF9jb25maWcsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBleHRhY2ssIHJldCk7XFxuK1xcdGlmIChyZXN0b3JlX2VycilcXG4rXFx0XFx0cmV0ID0gcmVzdG9yZV9lcnI7XFxuK3Jlc3RvcmVfc21hX2N0cmw6XFxuK1xcdHJlc3RvcmVfZXJyID0gaWNlX2RwbGxfcmVzdG9yZV9zbWFfY3RybChwZiwgb2xkX2RhdGEsIHJldCk7XFxuK1xcdGlmIChyZXN0b3JlX2VycilcXG4rXFx0XFx0cmV0ID0gcmVzdG9yZV9lcnI7XFxuIFxcbiB1bmxvY2s6XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2cGYtXFx1MDAzZWRwbGxzLmxvY2spO1xcbiBcXHRpZiAoIXJldClcXG4tXFx0XFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKFxcdTAwMjZwZi1cXHUwMDNlZHBsbHMsIHApO1xcbitcXHRcXHRpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIocCk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTE0NjMsNDQgKzE2ODksMTY4IEBAIGljZV9kcGxsX3NtYV9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcXG4gXFx0XFx0XFx0ICAgZW51bSBkcGxsX3Bpbl9zdGF0ZSBzdGF0ZSxcXG4gXFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuK1xcdGludCBwZWVyX2RwbGxfaWR4LCByZXN0b3JlX2VyciwgcmV0ID0gLUVJTlZBTDtcXG4gXFx0c3RydWN0IGljZV9kcGxsX3BpbiAqc21hID0gcGluX3ByaXYsICp0YXJnZXQ7XFxuK1xcdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgcGVlcl90eXBlID0gMCwgdHlwZTtcXG4rXFx0c3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcl90YXJnZXQgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyBwZWVyX2NvbmZpZztcXG4rXFx0c3RydWN0IGljZV9kcGxsX3Bpbl9jb25maWcgb2xkX2NvbmZpZztcXG4gXFx0c3RydWN0IGljZV9kcGxsICpkID0gZHBsbF9wcml2O1xcbiBcXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHNtYS1cXHUwMDNlcGY7XFxuLVxcdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZTtcXG4rXFx0dTggb2xkX2RhdGEgPSAwO1xcbiBcXHRib29sIGVuYWJsZTtcXG4tXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmIChpY2VfZHBsbF9pc19yZXNldChwZiwgZXh0YWNrKSlcXG4gXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNnBmLVxcdTAwM2VkcGxscy5sb2NrKTtcXG4tXFx0aWYgKCFzbWEtXFx1MDAzZWFjdGl2ZSkge1xcbi1cXHRcXHRyZXQgPSBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzbWEsIHNtYS1cXHUwMDNlZGlyZWN0aW9uLCBleHRhY2spO1xcbi1cXHRcXHRpZiAocmV0KVxcbitcXHRzd2l0Y2ggKHN0YXRlKSB7XFxuK1xcdGNhc2UgRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTpcXG4rXFx0XFx0LyogUmVqZWN0IGRpcmVjdGlvbi1taXNtYXRjaGVkIHJlcXVlc3RzOiBTRUxFQ1RBQkxFICsgT1VUUFVUXFxuK1xcdFxcdCAqIGlzIGFuIGludmFsaWQgY29tYmluYXRpb24sIHJldHVybiAtRUlOVkFMIGluIHRoaXMgY2FzZVxcbitcXHRcXHQgKiBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIGRpc2FibGluZyB0aGUgcGluLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHNtYS1cXHUwMDNlZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQpIHtcXG4rXFx0XFx0XFx0ZW5hYmxlID0gZmFsc2U7XFxuK1xcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcdFxcdGVuYWJsZSA9IHRydWU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDpcXG4rXFx0XFx0LyogUmVqZWN0IGRpcmVjdGlvbi1taXNtYXRjaGVkIHJlcXVlc3RzOiBDT05ORUNURUQgKyBJTlBVVFxcbitcXHRcXHQgKiBpcyBhbiBpbnZhbGlkIGNvbWJpbmF0aW9uLCByZXR1cm4gLUVJTlZBTCBpbiB0aGlzIGNhc2VcXG4rXFx0XFx0ICogaW1tZWRpYXRlbHkgaW5zdGVhZCBvZiBkaXNhYmxpbmcgdGhlIHBpbi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChzbWEtXFx1MDAzZWRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQpIHtcXG4rXFx0XFx0XFx0ZW5hYmxlID0gZmFsc2U7XFxuK1xcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIFxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcdFxcdGVuYWJsZSA9IHRydWU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDpcXG4rXFx0XFx0ZW5hYmxlID0gZmFsc2U7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIHVubG9jaztcXG4gXFx0fVxcbi1cXHRpZiAoc21hLVxcdTAwM2VkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUKSB7XFxuLVxcdFxcdGVuYWJsZSA9IHN0YXRlID09IERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7XFxuK1xcbitcXHRzd2l0Y2ggKHNtYS1cXHUwMDNlZGlyZWN0aW9uKSB7XFxuK1xcdGNhc2UgRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUOlxcbiBcXHRcXHR0YXJnZXQgPSBzbWEtXFx1MDAzZWlucHV0O1xcbiBcXHRcXHR0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfSU5QVVQ7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdGVuYWJsZSA9IHN0YXRlID09IERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVDpcXG4gXFx0XFx0dGFyZ2V0ID0gc21hLVxcdTAwM2VvdXRwdXQ7XFxuIFxcdFxcdHR5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIHVubG9jaztcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGVuYWJsZSlcXG4rXFx0aWYgKCFzbWEtXFx1MDAzZWFjdGl2ZSkge1xcbitcXHRcXHRyZXQgPSBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzbWEsIHNtYS1cXHUwMDNlZGlyZWN0aW9uLCBleHRhY2spO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGVuYWJsZSkge1xcbitcXHRcXHR1OCBkYXRhO1xcbitcXG4rXFx0XFx0cmV0ID0gaWNlX3JlYWRfc21hX2N0cmwoXFx1MDAyNnBmLVxcdTAwM2VodywgXFx1MDAyNmRhdGEpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0XFx0b2xkX2RhdGEgPSBkYXRhO1xcbitcXHRcXHRzd2l0Y2ggKHNtYS1cXHUwMDNlaWR4KSB7XFxuK1xcdFxcdGNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOlxcbitcXHRcXHRcXHRkYXRhIFxcdTAwMjY9IH5JQ0VfU01BMV9UWF9FTjtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgSUNFX0RQTExfUElOX1NXXzJfSURYOlxcbitcXHRcXHRcXHRkYXRhIFxcdTAwMjY9IH5JQ0VfU01BMl9VRkwyX1JYX0RJUztcXG4rXFx0XFx0XFx0ZGF0YSBcXHUwMDI2PSB+SUNFX1NNQTJfVFhfRU47XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRkZWZhdWx0OlxcbitcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0XFx0fVxcbitcXHRcXHRyZXQgPSBpY2Vfd3JpdGVfc21hX2N0cmwoXFx1MDAyNnBmLVxcdTAwM2VodywgZGF0YSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gcmVzdG9yZV9zbWFfY3RybDtcXG4rXFx0XFx0cmV0ID0gaWNlX2RwbGxfc3dfcGluc191cGRhdGUocGYpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XFxuK1xcbitcXHRcXHRyZXQgPSBpY2VfZHBsbF9waW5fY29uZmlnX2dldChwZiwgdGFyZ2V0LCB0eXBlLCBcXHUwMDI2b2xkX2NvbmZpZyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgZXh0YWNrKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byByZXN0b3JlX3NtYV9jdHJsO1xcbiBcXHRcXHRyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKFxcdTAwMjZwZi1cXHUwMDNlaHcsIHRhcmdldCwgZC1cXHUwMDNlZHBsbF9pZHgsIHR5cGUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgZXh0YWNrKTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRyZXQgPSBpY2VfZHBsbF9waW5fZGlzYWJsZShcXHUwMDI2cGYtXFx1MDAzZWh3LCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XFxuLVxcdGlmICghcmV0KVxcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xcbitcXHRcXHQvKiBSZWZyZXNoIHRhcmdldCBzdGF0ZSBiZWZvcmUgcGVlci1zaWRlIG9wZXJhdGlvbnMuICovXFxuIFxcdFxcdHJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byByZXN0b3JlX3RhcmdldDtcXG4rXFxuK1xcdFxcdGlmIChzbWEtXFx1MDAzZW11eGVkIFxcdTAwMjZcXHUwMDI2IHNtYS1cXHUwMDNlbXV4ZWQtXFx1MDAzZWFjdGl2ZSkge1xcbitcXHRcXHRcXHRpY2VfZHBsbF9nZXRfcGVlcl90YXJnZXQoc21hLVxcdTAwM2VtdXhlZCwgXFx1MDAyNnBlZXJfdGFyZ2V0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnBlZXJfdHlwZSk7XFxuK1xcdFxcdFxcdGlmICghcGVlcl90YXJnZXQpIHtcXG4rXFx0XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0XFx0XFx0Z290byByZXN0b3JlX3RhcmdldDtcXG4rXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX2NvbmZpZ19nZXQocGYsIHBlZXJfdGFyZ2V0LCBwZWVyX3R5cGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZwZWVyX2NvbmZpZywgZXh0YWNrKTtcXG4rXFx0XFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0XFx0Z290byByZXN0b3JlX3RhcmdldDtcXG4rXFxuK1xcdFxcdFxcdHBlZXJfZHBsbF9pZHggPVxcbitcXHRcXHRcXHRcXHRpY2VfZHBsbF9nZXRfZmFsbGJhY2tfaWR4KFxcdTAwMjZwZi1cXHUwMDNlZHBsbHMsIHBlZXJfdGFyZ2V0KTtcXG4rXFx0XFx0XFx0aWYgKHBlZXJfZHBsbF9pZHggXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRwZWVyX2RwbGxfaWR4ID0gZC1cXHUwMDNlZHBsbF9pZHg7XFxuK1xcdFxcdFxcdHJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoXFx1MDAyNnBmLVxcdTAwM2VodywgcGVlcl90YXJnZXQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgcGVlcl9kcGxsX2lkeCwgcGVlcl90eXBlLCBleHRhY2spO1xcbitcXHRcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRcXHRnb3RvIHJlc3RvcmVfcGVlcjtcXG4rXFx0XFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcGVlcl90YXJnZXQsIHBlZXJfdHlwZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ZXh0YWNrKTtcXG4rXFx0XFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0XFx0Z290byByZXN0b3JlX3BlZXI7XFxuK1xcdFxcdH1cXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX2Rpc2FibGUoXFx1MDAyNnBmLVxcdTAwM2VodywgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xcbitcXHRcXHRpZiAoIXJldClcXG4rXFx0XFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRleHRhY2spO1xcbitcXHR9XFxuK1xcdGdvdG8gdW5sb2NrO1xcbitcXG4rcmVzdG9yZV9wZWVyOlxcbitcXHRyZXN0b3JlX2VyciA9XFxuK1xcdFxcdGljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShwZiwgcGVlcl90YXJnZXQsIHBlZXJfdHlwZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZwZWVyX2NvbmZpZywgZXh0YWNrLCByZXQpO1xcbitcXHRpZiAocmVzdG9yZV9lcnIpXFxuK1xcdFxcdHJldCA9IHJlc3RvcmVfZXJyO1xcbityZXN0b3JlX3RhcmdldDpcXG4rXFx0cmVzdG9yZV9lcnIgPVxcbitcXHRcXHRpY2VfZHBsbF9waW5fY29uZmlnX3Jlc3RvcmUocGYsIHRhcmdldCwgdHlwZSwgXFx1MDAyNm9sZF9jb25maWcsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBleHRhY2ssIHJldCk7XFxuK1xcdGlmIChyZXN0b3JlX2VycilcXG4rXFx0XFx0cmV0ID0gcmVzdG9yZV9lcnI7XFxuK3Jlc3RvcmVfc21hX2N0cmw6XFxuK1xcdHJlc3RvcmVfZXJyID0gaWNlX2RwbGxfcmVzdG9yZV9zbWFfY3RybChwZiwgb2xkX2RhdGEsIHJldCk7XFxuK1xcdGlmIChyZXN0b3JlX2VycilcXG4rXFx0XFx0cmV0ID0gcmVzdG9yZV9lcnI7XFxuIFxcbiB1bmxvY2s6XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2cGYtXFx1MDAzZWRwbGxzLmxvY2spO1xcbiBcXHRpZiAoIXJldClcXG4tXFx0XFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKFxcdTAwMjZwZi1cXHUwMDNlZHBsbHMsIHNtYSk7XFxuK1xcdFxcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihzbWEpO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC0xNjk3LDcgKzIwNDcsNyBAQCBpY2VfZHBsbF9waW5fc21hX2RpcmVjdGlvbl9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxcbiBcXHRyZXQgPSBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChwLCBkaXJlY3Rpb24sIGV4dGFjayk7XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2cGYtXFx1MDAzZWRwbGxzLmxvY2spO1xcbiBcXHRpZiAoIXJldClcXG4tXFx0XFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKFxcdTAwMjZwZi1cXHUwMDNlZHBsbHMsIHApO1xcbitcXHRcXHRpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIocCk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTQ1MTksNiArNDg2OSw4IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3N3X3BpbnMoc3RydWN0IGljZV9wZiAqcGYpXFxuIFxcdFxcdGlmIChwaW4tXFx1MDAzZWlucHV0LVxcdTAwM2VyZWZfc3luYylcXG4gXFx0XFx0XFx0cGluLVxcdTAwM2VyZWZfc3luYyA9IHBpbi1cXHUwMDNlaW5wdXQtXFx1MDAzZXJlZl9zeW5jIC0gcGluX2Fic19pZHg7XFxuIFxcdFxcdHBpbi1cXHUwMDNlb3V0cHV0ID0gXFx1MDAyNmQtXFx1MDAzZW91dHB1dHNbSUNFX0RQTExfUElOX1NXX09VVFBVVF9BQlMoaSldO1xcbitcXHRcXHRwaW4tXFx1MDAzZW11eGVkID0gXFx1MDAyNmQtXFx1MDAzZXVmbFtpXTtcXG4rXFxuIFxcdFxcdGljZV9kcGxsX3BoYXNlX3JhbmdlX3NldChcXHUwMDI2cGluLVxcdTAwM2Vwcm9wLnBoYXNlX3JhbmdlLCBwaGFzZV9hZGpfbWF4KTtcXG4gXFx0fVxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgSUNFX0RQTExfUElOX1NXX05VTTsgaSsrKSB7XFxuQEAgLTQ1MjgsNyArNDg4MCw4IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3N3X3BpbnMoc3RydWN0IGljZV9wZiAqcGYpXFxuIFxcdFxcdHBpbi1cXHUwMDNlcHJvcC5jYXBhYmlsaXRpZXMgPSBjYXBzO1xcbiBcXHRcXHRwaW4tXFx1MDAzZXBmID0gcGY7XFxuIFxcdFxcdHBpbi1cXHUwMDNlcHJvcC5ib2FyZF9sYWJlbCA9IGljZV9kcGxsX3N3X3Bpbl91ZmxbaV07XFxuLVxcdFxcdGlmIChpID09IElDRV9EUExMX1BJTl9TV18xX0lEWCkge1xcbitcXHRcXHRzd2l0Y2ggKGkpIHtcXG4rXFx0XFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFg6XFxuIFxcdFxcdFxcdHBpbi1cXHUwMDNlZGlyZWN0aW9uID0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVDtcXG4gXFx0XFx0XFx0cGluX2Fic19pZHggPSBJQ0VfRFBMTF9QSU5fU1dfT1VUUFVUX0FCUyhpKTtcXG4gXFx0XFx0XFx0cGluLVxcdTAwM2Vwcm9wLmZyZXFfc3VwcG9ydGVkID1cXG5AQCAtNDUzOCw3ICs0ODkxLDggQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZilcXG4gXFx0XFx0XFx0cGluLVxcdTAwM2Vwcm9wLmZyZXFfc3VwcG9ydGVkX251bSA9IGZyZXFfc3VwcF9udW07XFxuIFxcdFxcdFxcdHBpbi1cXHUwMDNlaW5wdXQgPSBOVUxMO1xcbiBcXHRcXHRcXHRwaW4tXFx1MDAzZW91dHB1dCA9IFxcdTAwMjZkLVxcdTAwM2VvdXRwdXRzW3Bpbl9hYnNfaWR4XTtcXG4tXFx0XFx0fSBlbHNlIGlmIChpID09IElDRV9EUExMX1BJTl9TV18yX0lEWCkge1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFg6XFxuIFxcdFxcdFxcdHBpbi1cXHUwMDNlZGlyZWN0aW9uID0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUO1xcbiBcXHRcXHRcXHRwaW5fYWJzX2lkeCA9IElDRV9EUExMX1BJTl9TV19JTlBVVF9BQlMoaSkgK1xcbiBcXHRcXHRcXHRcXHQgICAgICBpbnB1dF9pZHhfb2Zmc2V0O1xcbkBAIC00NTUxLDcgKzQ5MDUsMTIgQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZilcXG4gXFx0XFx0XFx0cGluLVxcdTAwM2Vwcm9wLmNhcGFiaWxpdGllcyA9XFxuIFxcdFxcdFxcdFxcdChEUExMX1BJTl9DQVBBQklMSVRJRVNfUFJJT1JJVFlfQ0FOX0NIQU5HRSB8XFxuIFxcdFxcdFxcdFxcdCBjYXBzKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdGRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksIFxcXCJJbnZhbGlkIFUuRkwgcGluIGluZGV4OiAlZFxcXFxuXFxcIiwgaSk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHR9XFxuK1xcdFxcdHBpbi1cXHUwMDNlbXV4ZWQgPSBcXHUwMDI2ZC1cXHUwMDNlc21hW2ldO1xcbiBcXHRcXHRpY2VfZHBsbF9waGFzZV9yYW5nZV9zZXQoXFx1MDAyNnBpbi1cXHUwMDNlcHJvcC5waGFzZV9yYW5nZSwgcGhhc2VfYWRqX21heCk7XFxuIFxcdH1cXG4gXFxuQEAgLTQ3NDMsNiArNTEwMiwxMyBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mbyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBjZ3UpXFxuIFxcbiBcXHRkZS1cXHUwMDNlZHBsbF9pZHggPSBhYmlsaXRpZXMuZWVjX2RwbGxfaWR4O1xcbiBcXHRkcC1cXHUwMDNlZHBsbF9pZHggPSBhYmlsaXRpZXMucHBzX2RwbGxfaWR4O1xcbitcXHRpZiAoZGUtXFx1MDAzZWRwbGxfaWR4IFxcdTAwM2U9IElDRV9EUExMX1JDTEtfTlVNX01BWCB8fFxcbitcXHQgICAgZHAtXFx1MDAzZWRwbGxfaWR4IFxcdTAwM2U9IElDRV9EUExMX1JDTEtfTlVNX01BWCkge1xcbitcXHRcXHRkZXZfZXJyKGljZV9wZl90b19kZXYocGYpLFxcbitcXHRcXHRcXHRcXFwiaW52YWxpZCBkcGxsX2lkeCBpbiBjZ3UgYWJpbGl0aWVzOiBlZWM9JXUsIHBwcz0ldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ZGUtXFx1MDAzZWRwbGxfaWR4LCBkcC1cXHUwMDNlZHBsbF9pZHgpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbiBcXHRkLVxcdTAwM2VudW1faW5wdXRzID0gYWJpbGl0aWVzLm51bV9pbnB1dHM7XFxuIFxcdGQtXFx1MDAzZW51bV9vdXRwdXRzID0gYWJpbGl0aWVzLm51bV9vdXRwdXRzO1xcbiBcXHRkLVxcdTAwM2VpbnB1dF9waGFzZV9hZGpfbWF4ID0gbGUzMl90b19jcHUoYWJpbGl0aWVzLm1heF9pbl9waGFzZV9hZGopIFxcdTAwMjZcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaFxcbmluZGV4IDEwM2JhM2U0OTA2ODIuLmRjNmYwOTZiZjA2OWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaFxcbkBAIC03Niw2ICs3Niw3IEBAIHN0cnVjdCBpY2VfZHBsbF9waW4ge1xcbiBcXHRzMzIgcGhhc2VfYWRqdXN0O1xcbiBcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICppbnB1dDtcXG4gXFx0c3RydWN0IGljZV9kcGxsX3BpbiAqb3V0cHV0O1xcbitcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICptdXhlZDtcXG4gXFx0ZW51bSBkcGxsX3Bpbl9kaXJlY3Rpb24gZGlyZWN0aW9uO1xcbiBcXHRzNjQgcGhhc2Vfb2Zmc2V0O1xcbiBcXHR1OCBzdGF0dXM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQzOjUyLjA4NjIwODIzMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjIxMDQyMjA3OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgbW9kaWZ5IHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIChpY2UpIGRyaXZlciBEUExMIHBpbiBoYW5kbGluZy4gVGhlIGljZSBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgSW50ZWwgRTgwMCBzZXJpZXMgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDFiMGYwNjYzMGY4NDQ0MmY4NzA1MjYyZTEwM2ZjY2Q4YmJkMWM1MmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMTo0Mzo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmNcbmluZGV4IDg1YTc0Y2Q2ZWExZjMuLmNmZmM5ZDczN2RjMmYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmNcbkBAIC04OSw2ICs4OSwyOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGluX2ZyZXF1ZW5jeSBpY2VfZXN5bmNfcmFuZ2VbXSA9IHtcbiBcdERQTExfUElOX0ZSRVFVRU5DWV9SQU5HRSgwLCBEUExMX1BJTl9GUkVRVUVOQ1lfMV9IWiksXG4gfTtcbiBcbisvKlxuKyAqIFNNQTEvVS5GTDEgTVVYIHRhYmxlXG4rICorLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbisgKnwgICAgICAgICAgICAgICAgfCBTTUExX0RJUl9FTiB8IFNNQTFfVFhfRU4gfFxuKyAqKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG4rICp8U01BMSBSWCBFbmFibGUgIHwgICAgICAgMCAgICAgfCAgICAgIHggICAgIHxcbisgKnx1LkZMMSBUWCBFbmFibGUgfCAgICAgICAwICAgICB8ICAgICAgMCAgICAgfFxuKyAqfFNNQTEgVFggRW5hYmxlICB8ICAgICAgIDEgICAgIHwgICAgICAwICAgICB8XG4rICp8QWxsIERpc2FibGUgICAgIHwgICAgICAgMSAgICAgfCAgICAgIDEgICAgIHxcbisgKistLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xuKyAqXG4rICogU01BMi9VLkZMMiBNVVggdGFibGVcbisgKistLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbisgKnwgICAgICAgICAgICAgICAgfCBTTUEyX0RJUl9FTiB8IFNNQTJfVFhfRU4gfCBVRkwyX1JYX0VOIHxcbisgKistLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbisgKnxTTUEyIFJYIEVuYWJsZSAgfCAgICAgICAwICAgICB8ICAgICAgeCAgICAgfCAgICAgeCAgICAgIHxcbisgKnx1LkZMMiBSWCBFbmFibGUgfCAgICAgICAxICAgICB8ICAgICAgeCAgICAgfCAgICAgMCAgICAgIHxcbisgKnxTTUEyIFRYIEVuYWJsZSAgfCAgICAgICAxICAgICB8ICAgICAgMCAgICAgfCAgICAgeCAgICAgIHxcbisgKnxTTUEyIERpc2FibGUgICAgfCAgICAgICAxICAgICB8ICAgICAgMSAgICAgfCAgICAgeCAgICAgIHxcbisgKnxBbGwgRGlzYWJsZSAgICAgfCAgICAgICAxICAgICB8ICAgICAgMSAgICAgfCAgICAgMSAgICAgIHxcbisgKistLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbisgKi9cbitcbiAvKipcbiAgKiBpY2VfZHBsbF9pc19zd19waW4gLSBjaGVjayBpZiBnaXZlbiBwaW4gc2hhbGwgYmUgY29udHJvbGxlZCBieSBTV1xuICAqIEBwZjogcHJpdmF0ZSBib2FyZCBzdHJ1Y3R1cmVcbkBAIC00NDMsNiArNDY2LDQwIEBAIGljZV9kcGxsX3N3X3Bpbl9mcmVxdWVuY3lfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgaWNlX2RwbGxfZ2V0X2ZhbGxiYWNrX2lkeChzdHJ1Y3QgaWNlX2RwbGxzICpkLCBzdHJ1Y3QgaWNlX2RwbGxfcGluICp0YXJnZXQpXG4re1xuK1x0aWYgKGQtXHUwMDNlcHBzLmRwbGxfaWR4IFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVggXHUwMDI2XHUwMDI2XG4rXHQgICAgdGFyZ2V0LVx1MDAzZXN0YXRlW2QtXHUwMDNlcHBzLmRwbGxfaWR4XSA9PSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQpXG4rXHRcdHJldHVybiBkLVx1MDAzZXBwcy5kcGxsX2lkeDtcbitcbitcdGlmIChkLVx1MDAzZWVlYy5kcGxsX2lkeCBcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHRhcmdldC1cdTAwM2VzdGF0ZVtkLVx1MDAzZWVlYy5kcGxsX2lkeF0gPT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEKVxuK1x0XHRyZXR1cm4gZC1cdTAwM2VlZWMuZHBsbF9pZHg7XG4rXG4rXHRyZXR1cm4gLUVJTlZBTDtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWNlX2RwbGxfZ2V0X3BlZXJfdGFyZ2V0KHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXIsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBpY2VfZHBsbF9waW4gKipwZWVyX3RhcmdldCxcbitcdFx0XHRcdCAgICAgZW51bSBpY2VfZHBsbF9waW5fdHlwZSAqcGVlcl90eXBlKVxuK3tcbitcdCpwZWVyX3RhcmdldCA9IE5VTEw7XG4rXHQqcGVlcl90eXBlID0gMDtcbitcbitcdHN3aXRjaCAocGVlci1cdTAwM2VkaXJlY3Rpb24pIHtcbitcdGNhc2UgRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVDpcbitcdFx0KnBlZXJfdGFyZ2V0ID0gcGVlci1cdTAwM2VvdXRwdXQ7XG4rXHRcdCpwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQ6XG4rXHRcdCpwZWVyX3RhcmdldCA9IHBlZXItXHUwMDNlaW5wdXQ7XG4rXHRcdCpwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVDtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRicmVhaztcbitcdH1cbit9XG4rXG4gLyoqXG4gICogaWNlX2RwbGxfcGluX2VuYWJsZSAtIGVuYWJsZSBhIHBpbiBvbiBkcGxsc1xuICAqIEBodzogYm9hcmQgcHJpdmF0ZSBodyBzdHJ1Y3R1cmVcbkBAIC01MzgsNiArNTk1LDI5IEBAIGljZV9kcGxsX3Bpbl9kaXNhYmxlKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW4sXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbisvKipcbisgKiBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIgLSBub3RpZnkgdGhlIHBhaXJlZCBTVyBwaW4gYWZ0ZXIgYSBzdGF0ZSBjaGFuZ2VcbisgKiBAY2hhbmdlZDogdGhlIFNXIHBpbiB0aGF0IHdhcyBleHBsaWNpdGx5IGNoYW5nZWQgKGFscmVhZHkgbm90aWZpZWQgYnkgZHBsbCBjb3JlKVxuKyAqXG4rICogU01BIGFuZCBVLkZMIHBpbnMgc2hhcmUgcGh5c2ljYWwgc2lnbmFsIHBhdGhzIGluIHBhaXJzIChTTUExL1UuRkwxIGFuZFxuKyAqIFNNQTIvVS5GTDIpLiAgV2hlbiBvbmUgcGluJ3Mgcm91dGluZyBjaGFuZ2VzIHZpYSB0aGUgUENBOTU3NSBHUElPXG4rICogZXhwYW5kZXIsIHRoZSBwYWlyZWQgcGluJ3Mgc3RhdGUgbWF5IGFsc28gY2hhbmdlLiAgU2VuZCBhIGNoYW5nZVxuKyAqIG5vdGlmaWNhdGlvbiBmb3IgdGhlIHBlZXIgcGluIHNvIHVzZXJzcGFjZSBjb25zdW1lcnMgbW9uaXRvcmluZyB0aGVcbisgKiBwZWVyIHZpYSBkcGxsIG5ldGxpbmsgbGVhcm4gYWJvdXQgdGhlIHVwZGF0ZS5cbisgKlxuKyAqIENvbnRleHQ6IENhbGxlZCBmcm9tIGRwbGxfcGluX29wcyBjYWxsYmFja3MgYWZ0ZXIgcGYtXHUwMDNlZHBsbHMubG9jayBpc1xuKyAqICAgICAgICAgIHJlbGVhc2VkLiAgVXNlcyBfX2RwbGxfcGluX2NoYW5nZV9udGYoKSBiZWNhdXNlIGRwbGxfbG9jayBpc1xuKyAqICAgICAgICAgIHN0aWxsIGhlbGQgYnkgdGhlIGRwbGwgbmV0bGluayBsYXllci5cbisgKi9cbitzdGF0aWMgdm9pZCBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoc3RydWN0IGljZV9kcGxsX3BpbiAqY2hhbmdlZClcbit7XG4rXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyO1xuK1xuK1x0cGVlciA9IGNoYW5nZWQtXHUwMDNlbXV4ZWQ7XG4rXHRpZiAocGVlciBcdTAwMjZcdTAwMjYgcGVlci1cdTAwM2VwaW4pXG4rXHRcdF9fZHBsbF9waW5fY2hhbmdlX250ZihwZWVyLVx1MDAzZXBpbik7XG4rfVxuK1xuIC8qKlxuICAqIGljZV9kcGxsX3Bpbl9zdG9yZV9zdGF0ZSAtIHVwZGF0ZXMgdGhlIHN0YXRlIG9mIHBpbiBpbiBTVyBib29ra2VlcGluZ1xuICAqIEBwaW46IHBvaW50ZXIgdG8gYSBwaW5cbkBAIC03MDksNiArNzg5LDggQEAgaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLFxuIFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHU4IHBhcmVudCwgcG9ydF9udW0gPSBJQ0VfQVFDX1NFVF9QSFlfUkVDX0NMS19PVVRfQ1VSUl9QT1JUO1xuK1x0ZW51bSBkcGxsX3Bpbl9zdGF0ZSBlZWNfc3RhdGUgPSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XG4rXHRlbnVtIGRwbGxfcGluX3N0YXRlIHBwc19zdGF0ZSA9IERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDtcbiBcdGludCByZXQ7XG4gXG4gXHRzd2l0Y2ggKHBpbl90eXBlKSB7XG5AQCAtNzIwLDI2ICs4MDIsMjYgQEAgaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLFxuIFx0XHRcdGdvdG8gZXJyO1xuIFx0XHRpZiAoSUNFX0FRQ19HRVRfQ0dVX0lOX0NGR19GTEcyX0lOUFVUX0VOIFx1MDAyNiBwaW4tXHUwMDNlZmxhZ3NbMF0pIHtcbiBcdFx0XHRpZiAocGluLVx1MDAzZXBpbikge1xuLVx0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxuK1x0XHRcdFx0ZWVjX3N0YXRlID1cbiBcdFx0XHRcdFx0cGluLVx1MDAzZXBpbiA9PSBwZi1cdTAwM2VkcGxscy5lZWMuYWN0aXZlX2lucHV0ID9cbiBcdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEIDpcbiBcdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcbi1cdFx0XHRcdHBpbi1cdTAwM2VzdGF0ZVtwZi1cdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID1cbitcdFx0XHRcdHBwc19zdGF0ZSA9XG4gXHRcdFx0XHRcdHBpbi1cdTAwM2VwaW4gPT0gcGYtXHUwMDNlZHBsbHMucHBzLmFjdGl2ZV9pbnB1dCA/XG4gXHRcdFx0XHRcdERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCA6XG4gXHRcdFx0XHRcdERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7XG4gXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdHBpbi1cdTAwM2VzdGF0ZVtwZi1cdTAwM2VkcGxscy5lZWMuZHBsbF9pZHhdID1cbi1cdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcbi1cdFx0XHRcdHBpbi1cdTAwM2VzdGF0ZVtwZi1cdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID1cbi1cdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcbitcdFx0XHRcdGVlY19zdGF0ZSA9IERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7XG4rXHRcdFx0XHRwcHNfc3RhdGUgPSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xuIFx0XHRcdH1cbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4XSA9XG4tXHRcdFx0XHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XG4tXHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxuLVx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xuIFx0XHR9XG4rXHRcdC8qIENvbW1pdCBvbmx5IGFmdGVyIGEgc3VjY2Vzc2Z1bCByZWFkIHNvIGxvY2tsZXNzIHJlYWRlcnMgbmV2ZXJcbitcdFx0ICogb2JzZXJ2ZSBhIHRyYW5zaWVudCBkaXNjb25uZWN0ZWQgc3RhdGUuXG4rXHRcdCAqL1xuK1x0XHRpZiAocGYtXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4IFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpXG4rXHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPSBlZWNfc3RhdGU7XG4rXHRcdGlmIChwZi1cdTAwM2VkcGxscy5wcHMuZHBsbF9pZHggXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWClcbitcdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4XSA9IHBwc19zdGF0ZTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDpcbiBcdFx0cmV0ID0gaWNlX2FxX2dldF9vdXRwdXRfcGluX2NmZyhcdTAwMjZwZi1cdTAwM2VodywgcGluLVx1MDAzZWlkeCxcbkBAIC03NTAsMjAgKzgzMiwxNyBAQCBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW4sXG4gXG4gXHRcdHBhcmVudCBcdTAwMjY9IElDRV9BUUNfR0VUX0NHVV9PVVRfQ0ZHX0RQTExfU1JDX1NFTDtcbiBcdFx0aWYgKElDRV9BUUNfR0VUX0NHVV9PVVRfQ0ZHX09VVF9FTiBcdTAwMjYgcGluLVx1MDAzZWZsYWdzWzBdKSB7XG4tXHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxuLVx0XHRcdFx0cGFyZW50ID09IHBmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeCA/XG4rXHRcdFx0ZWVjX3N0YXRlID0gcGFyZW50ID09IHBmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeCA/XG4gXHRcdFx0XHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxuIFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xuLVx0XHRcdHBpbi1cdTAwM2VzdGF0ZVtwZi1cdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID1cbi1cdFx0XHRcdHBhcmVudCA9PSBwZi1cdTAwM2VkcGxscy5wcHMuZHBsbF9pZHggP1xuK1x0XHRcdHBwc19zdGF0ZSA9IHBhcmVudCA9PSBwZi1cdTAwM2VkcGxscy5wcHMuZHBsbF9pZHggP1xuIFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEIDpcbiBcdFx0XHRcdERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4XSA9XG4tXHRcdFx0XHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XG4tXHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxuLVx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xuIFx0XHR9XG4rXHRcdGlmIChwZi1cdTAwM2VkcGxscy5lZWMuZHBsbF9pZHggXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWClcbitcdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4XSA9IGVlY19zdGF0ZTtcbitcdFx0aWYgKHBmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeCBcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYKVxuK1x0XHRcdHBpbi1cdTAwM2VzdGF0ZVtwZi1cdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID0gcHBzX3N0YXRlO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgSUNFX0RQTExfUElOX1RZUEVfUkNMS19JTlBVVDpcbiBcdFx0aWYgKHBmLVx1MDAzZWh3Lm1hY190eXBlID09IElDRV9NQUNfR0VORVJJQ18zS19FODI1KSB7XG5AQCAtMTE2MywzMCArMTI0Miw4NSBAQCBpY2VfZHBsbF9pbnB1dF9zdGF0ZV9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0XHRcdFx0ICAgICAgZXh0YWNrLCBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVCk7XG4gfVxuIFxuLS8qKlxuLSAqIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlciAtIG5vdGlmeSB0aGUgcGFpcmVkIFNXIHBpbiBhZnRlciBhIHN0YXRlIGNoYW5nZVxuLSAqIEBkOiBwb2ludGVyIHRvIGRwbGxzIHN0cnVjdFxuLSAqIEBjaGFuZ2VkOiB0aGUgU1cgcGluIHRoYXQgd2FzIGV4cGxpY2l0bHkgY2hhbmdlZCAoYWxyZWFkeSBub3RpZmllZCBieSBkcGxsIGNvcmUpXG4tICpcbi0gKiBTTUEgYW5kIFUuRkwgcGlucyBzaGFyZSBwaHlzaWNhbCBzaWduYWwgcGF0aHMgaW4gcGFpcnMgKFNNQTEvVS5GTDEgYW5kXG4tICogU01BMi9VLkZMMikuICBXaGVuIG9uZSBwaW4ncyByb3V0aW5nIGNoYW5nZXMgdmlhIHRoZSBQQ0E5NTc1IEdQSU9cbi0gKiBleHBhbmRlciwgdGhlIHBhaXJlZCBwaW4ncyBzdGF0ZSBtYXkgYWxzbyBjaGFuZ2UuICBTZW5kIGEgY2hhbmdlXG4tICogbm90aWZpY2F0aW9uIGZvciB0aGUgcGVlciBwaW4gc28gdXNlcnNwYWNlIGNvbnN1bWVycyBtb25pdG9yaW5nIHRoZVxuLSAqIHBlZXIgdmlhIGRwbGwgbmV0bGluayBsZWFybiBhYm91dCB0aGUgdXBkYXRlLlxuLSAqXG4tICogQ29udGV4dDogQ2FsbGVkIGZyb20gZHBsbF9waW5fb3BzIGNhbGxiYWNrcyBhZnRlciBwZi1cdTAwM2VkcGxscy5sb2NrIGlzXG4tICogICAgICAgICAgcmVsZWFzZWQuICBVc2VzIF9fZHBsbF9waW5fY2hhbmdlX250ZigpIGJlY2F1c2UgZHBsbF9sb2NrIGlzXG4tICogICAgICAgICAgc3RpbGwgaGVsZCBieSB0aGUgZHBsbCBuZXRsaW5rIGxheWVyLlxuLSAqL1xuLXN0YXRpYyB2b2lkIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihzdHJ1Y3QgaWNlX2RwbGxzICpkLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpjaGFuZ2VkKVxuK3N0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIHtcbitcdGJvb2wgZW5hYmxlZDtcbitcdHU4IGRwbGxfaWR4O1xuK307XG4rXG4rc3RhdGljIGludFxuK2ljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGxfcGluICp0YXJnZXQsXG4rXHRcdFx0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlLFxuK1x0XHRcdHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnICpjb25maWcsXG4rXHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbi1cdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXI7XG4rXHRpbnQgcmV0O1xuIFxuLVx0cGVlciA9IChjaGFuZ2VkIFx1MDAzZT0gZC1cdTAwM2VzbWEgXHUwMDI2XHUwMDI2IGNoYW5nZWQgXHUwMDNjIGQtXHUwMDNlc21hICsgSUNFX0RQTExfUElOX1NXX05VTSkgP1xuLVx0XHRcdTAwMjZkLVx1MDAzZXVmbFtjaGFuZ2VkLVx1MDAzZWlkeF0gOiBcdTAwMjZkLVx1MDAzZXNtYVtjaGFuZ2VkLVx1MDAzZWlkeF07XG4tXHRpZiAocGVlci1cdTAwM2VwaW4pXG4tXHRcdF9fZHBsbF9waW5fY2hhbmdlX250ZihwZWVyLVx1MDAzZXBpbik7XG4rXHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0c3dpdGNoICh0eXBlKSB7XG4rXHRjYXNlIElDRV9EUExMX1BJTl9UWVBFX0lOUFVUOlxuK1x0XHRjb25maWctXHUwMDNlZW5hYmxlZCA9IHRhcmdldC1cdTAwM2VmbGFnc1swXSBcdTAwMjZcbitcdFx0XHRcdCAgSUNFX0FRQ19HRVRfQ0dVX0lOX0NGR19GTEcyX0lOUFVUX0VOO1xuK1x0XHRjb25maWctXHUwMDNlZHBsbF9pZHggPSAwO1xuK1x0XHRyZXR1cm4gMDtcbitcdGNhc2UgSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUOlxuK1x0XHRjb25maWctXHUwMDNlZW5hYmxlZCA9IHRhcmdldC1cdTAwM2VmbGFnc1swXSBcdTAwMjZcbitcdFx0XHRcdCAgSUNFX0FRQ19HRVRfQ0dVX09VVF9DRkdfT1VUX0VOO1xuK1x0XHRpZiAoIWNvbmZpZy1cdTAwM2VlbmFibGVkKSB7XG4rXHRcdFx0Y29uZmlnLVx1MDAzZWRwbGxfaWR4ID0gMDtcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuK1xuK1x0XHRyZXQgPSBpY2VfZHBsbF9nZXRfZmFsbGJhY2tfaWR4KFx1MDAyNnBmLVx1MDAzZWRwbGxzLCB0YXJnZXQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdGNvbmZpZy1cdTAwM2VkcGxsX2lkeCA9IHJldDtcbitcdFx0cmV0dXJuIDA7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludFxuK2ljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqdGFyZ2V0LFxuK1x0XHRcdCAgICBlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGUsXG4rXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnICpjb25maWcsXG4rXHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaywgaW50IGluaXRfZXJyKVxuK3tcbitcdGludCByZXN0b3JlX2VyciwgdXBkYXRlX2VycjtcbitcbitcdGlmIChjb25maWctXHUwMDNlZW5hYmxlZClcbitcdFx0cmVzdG9yZV9lcnIgPSBpY2VfZHBsbF9waW5fZW5hYmxlKFx1MDAyNnBmLVx1MDAzZWh3LCB0YXJnZXQsXG4rXHRcdFx0XHRcdFx0ICBjb25maWctXHUwMDNlZHBsbF9pZHgsIHR5cGUsIGV4dGFjayk7XG4rXHRlbHNlXG4rXHRcdHJlc3RvcmVfZXJyID0gaWNlX2RwbGxfcGluX2Rpc2FibGUoXHUwMDI2cGYtXHUwMDNlaHcsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcbitcdHVwZGF0ZV9lcnIgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4rXHRpZiAocmVzdG9yZV9lcnIgfHwgdXBkYXRlX2Vycikge1xuK1x0XHRkZXZfd2FybihpY2VfcGZfdG9fZGV2KHBmKSxcbitcdFx0XHQgXCJGYWlsZWQgdG8gcm9sbGJhY2sgcGluIHN0YXRlOiBlcnIgJWQsIHJlc3RvcmUgZXJyICVkLCB1cGRhdGUgZXJyICVkXFxuXCIsXG4rXHRcdFx0IGluaXRfZXJyLCByZXN0b3JlX2VyciwgdXBkYXRlX2Vycik7XG4rXHRcdHJldHVybiByZXN0b3JlX2VyciA/IHJlc3RvcmVfZXJyIDogdXBkYXRlX2VycjtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGljZV9kcGxsX3Jlc3RvcmVfc21hX2N0cmwoc3RydWN0IGljZV9wZiAqcGYsIHU4IG9sZF9kYXRhLFxuK1x0XHRcdFx0ICAgICBpbnQgaW5pdF9lcnIpXG4re1xuK1x0aW50IHJlc3RvcmVfZXJyO1xuK1xuK1x0cmVzdG9yZV9lcnIgPSBpY2Vfd3JpdGVfc21hX2N0cmwoXHUwMDI2cGYtXHUwMDNlaHcsIG9sZF9kYXRhKTtcbitcdGlmICghcmVzdG9yZV9lcnIpXG4rXHRcdHJlc3RvcmVfZXJyID0gaWNlX2RwbGxfc3dfcGluc191cGRhdGUocGYpO1xuK1x0aWYgKHJlc3RvcmVfZXJyKVxuK1x0XHRkZXZfd2FybihpY2VfcGZfdG9fZGV2KHBmKSxcbitcdFx0XHQgXCJGYWlsZWQgdG8gcmVzdG9yZSBTTUEgY29udHJvbDogZXJyICVkLCByZXN0b3JlIGVyciAlZFxcblwiLFxuK1x0XHRcdCBpbml0X2VyciwgcmVzdG9yZV9lcnIpO1xuK1xuK1x0cmV0dXJuIHJlc3RvcmVfZXJyO1xuIH1cbiBcbiAvKipcbkBAIC0xMjA2LDMwICsxMzQwLDM5IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQoc3RydWN0IGljZV9kcGxsX3BpbiAqcCxcbiBcdFx0XHRcdCAgICAgIGVudW0gZHBsbF9waW5fZGlyZWN0aW9uIGRpcmVjdGlvbixcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4rXHRzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyBwZWVyX2NvbmZpZztcbiBcdHN0cnVjdCBpY2VfZHBsbHMgKmQgPSBcdTAwMjZwLVx1MDAzZXBmLVx1MDAzZWRwbGxzO1xuK1x0aW50IHBlZXJfZHBsbF9pZHgsIHJlc3RvcmVfZXJyLCByZXQ7XG4rXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICp0YXJnZXQgPSBOVUxMO1xuK1x0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlID0gMDtcbiBcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXI7XG4tXHR1OCBkYXRhO1xuLVx0aW50IHJldDtcbitcdHU4IGRhdGEsIG9sZF9kYXRhID0gMDtcbiBcbiBcdGlmIChwLVx1MDAzZWRpcmVjdGlvbiA9PSBkaXJlY3Rpb24gXHUwMDI2XHUwMDI2IHAtXHUwMDNlYWN0aXZlKVxuIFx0XHRyZXR1cm4gMDtcbiBcdHJldCA9IGljZV9yZWFkX3NtYV9jdHJsKFx1MDAyNnAtXHUwMDNlcGYtXHUwMDNlaHcsIFx1MDAyNmRhdGEpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbitcdG9sZF9kYXRhID0gZGF0YTtcbiBcbiBcdHN3aXRjaCAocC1cdTAwM2VpZHgpIHtcbiBcdGNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOlxuLVx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUExX01BU0s7XG4tXHRcdGlmIChkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVClcbitcdFx0aWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKSB7XG4rXHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMV9UWF9FTjtcbiBcdFx0XHRkYXRhIHw9IElDRV9TTUExX0RJUl9FTjtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUExX0RJUl9FTjtcbitcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUExX1RYX0VOO1xuK1x0XHR9XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFg6XG4gXHRcdGlmIChkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUKSB7XG4gXHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMl9ESVJfRU47XG4tXHRcdFx0ZGF0YSB8PSBJQ0VfU01BMl9VRkwyX1JYX0RJUztcbitcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUEyX1RYX0VOO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdGRhdGEgXHUwMDI2PSB+KElDRV9TTUEyX1RYX0VOIHwgSUNFX1NNQTJfVUZMMl9SWF9ESVMpO1xuIFx0XHRcdGRhdGEgfD0gSUNFX1NNQTJfRElSX0VOO1xuK1x0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTJfVUZMMl9SWF9ESVM7XG4rXHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMl9UWF9FTjtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG5AQCAtMTI0MSw3ICsxMzg0LDcgQEAgc3RhdGljIGludCBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwLFxuIFx0XHRcdFx0XHRcdElDRV9EUExMX1BJTl9UWVBFX1NPRlRXQVJFLFxuIFx0XHRcdFx0XHRcdGV4dGFjayk7XG4gXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuK1x0XHRnb3RvIHJlc3RvcmVfc21hO1xuIFxuIFx0LyogV2hlbiBhIGRpcmVjdGlvbiBjaGFuZ2UgYWN0aXZhdGVzIHRoZSBwYWlyZWQgVS5GTCBwaW4sIGVuYWJsZVxuIFx0ICogaXRzIGJhY2tpbmcgQ0dVIHBpbiBzbyB0aGUgcGluIHJlcG9ydHMgYXMgY29ubmVjdGVkLiBXaXRob3V0XG5AQCAtMTI1MCwyNSArMTM5Myw0NiBAQCBzdGF0aWMgaW50IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHN0cnVjdCBpY2VfZHBsbF9waW4gKnAsXG4gXHQgKiBiYWNraW5nIHBpbiB3aGVuIFUuRkwgYmVjb21lcyBpbmFjdGl2ZSBiZWNhdXNlIHRoZSBTTUEgcGluIG1heVxuIFx0ICogc3RpbGwgYmUgdXNpbmcgaXQuXG4gXHQgKi9cbi1cdHBlZXIgPSBcdTAwMjZkLVx1MDAzZXVmbFtwLVx1MDAzZWlkeF07XG4rXHRwZWVyID0gcC1cdTAwM2VtdXhlZDtcbiBcdGlmIChwZWVyLVx1MDAzZWFjdGl2ZSkge1xuLVx0XHRzdHJ1Y3QgaWNlX2RwbGxfcGluICp0YXJnZXQ7XG4tXHRcdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZTtcbi1cbiBcdFx0aWYgKHBlZXItXHUwMDNlb3V0cHV0KSB7XG4gXHRcdFx0dGFyZ2V0ID0gcGVlci1cdTAwM2VvdXRwdXQ7XG4gXHRcdFx0dHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDtcbi1cdFx0fSBlbHNlIHtcbitcdFx0fSBlbHNlIGlmIChwZWVyLVx1MDAzZWlucHV0KSB7XG4gXHRcdFx0dGFyZ2V0ID0gcGVlci1cdTAwM2VpbnB1dDtcbiBcdFx0XHR0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfSU5QVVQ7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0XHRnb3RvIHJlc3RvcmVfc21hO1xuIFx0XHR9XG4tXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoXHUwMDI2cC1cdTAwM2VwZi1cdTAwM2VodywgdGFyZ2V0LFxuLVx0XHRcdFx0XHQgIGQtXHUwMDNlZWVjLmRwbGxfaWR4LCB0eXBlLCBleHRhY2spO1xuLVx0XHRpZiAoIXJldClcbi1cdFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHAtXHUwMDNlcGYsIHRhcmdldCxcbi1cdFx0XHRcdFx0XHRcdHR5cGUsIGV4dGFjayk7XG4rXG4rXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHAtXHUwMDNlcGYsIHRhcmdldCwgdHlwZSxcbitcdFx0XHRcdFx0ICAgICAgXHUwMDI2cGVlcl9jb25maWcsIGV4dGFjayk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byByZXN0b3JlX3NtYTtcbitcbitcdFx0cGVlcl9kcGxsX2lkeCA9IGljZV9kcGxsX2dldF9mYWxsYmFja19pZHgoZCwgdGFyZ2V0KTtcbitcdFx0aWYgKHBlZXJfZHBsbF9pZHggXHUwMDNjIDApXG4rXHRcdFx0cGVlcl9kcGxsX2lkeCA9IGQtXHUwMDNlZWVjLmRwbGxfaWR4O1xuK1x0XHRyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKFx1MDAyNnAtXHUwMDNlcGYtXHUwMDNlaHcsIHRhcmdldCwgcGVlcl9kcGxsX2lkeCxcbitcdFx0XHRcdFx0ICB0eXBlLCBleHRhY2spO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gcmVzdG9yZV9wZWVyO1xuK1x0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHAtXHUwMDNlcGYsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIHJlc3RvcmVfcGVlcjtcbiBcdH1cbiBcbitcdHJldHVybiAwO1xuK1xuK3Jlc3RvcmVfcGVlcjpcbitcdHJlc3RvcmVfZXJyID1cbitcdFx0aWNlX2RwbGxfcGluX2NvbmZpZ19yZXN0b3JlKHAtXHUwMDNlcGYsIHRhcmdldCwgdHlwZSwgXHUwMDI2cGVlcl9jb25maWcsXG4rXHRcdFx0XHRcdCAgICBleHRhY2ssIHJldCk7XG4rXHRpZiAocmVzdG9yZV9lcnIpXG4rXHRcdHJldCA9IHJlc3RvcmVfZXJyO1xuK3Jlc3RvcmVfc21hOlxuK1x0aWNlX2RwbGxfcmVzdG9yZV9zbWFfY3RybChwLVx1MDAzZXBmLCBvbGRfZGF0YSwgcmV0KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTEyOTQsMTQgKzE0NTgsMTggQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0XHRcdCAgIGVudW0gZHBsbF9waW5fc3RhdGUgc3RhdGUsXG4gXHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbitcdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgcGVlcl90eXBlID0gMCwgdHlwZTtcbiBcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnAgPSBwaW5fcHJpdiwgKnRhcmdldDtcbitcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXJfdGFyZ2V0ID0gTlVMTDtcbitcdHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIHBlZXJfY29uZmlnO1xuK1x0c3RydWN0IGljZV9kcGxsX3Bpbl9jb25maWcgb2xkX2NvbmZpZztcbitcdGludCBwZWVyX2RwbGxfaWR4LCByZXN0b3JlX2VyciwgcmV0O1xuIFx0c3RydWN0IGljZV9kcGxsICpkID0gZHBsbF9wcml2O1xuLVx0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlO1xuIFx0c3RydWN0IGljZV9wZiAqcGYgPSBwLVx1MDAzZXBmO1xuIFx0c3RydWN0IGljZV9odyAqaHc7XG4rXHR1OCBvbGRfZGF0YSA9IDA7XG4gXHRib29sIGVuYWJsZTtcbiBcdHU4IGRhdGE7XG4tXHRpbnQgcmV0O1xuIFxuIFx0aWYgKGljZV9kcGxsX2lzX3Jlc2V0KHBmLCBleHRhY2spKVxuIFx0XHRyZXR1cm4gLUVCVVNZO1xuQEAgLTEzMTEsMTQgKzE0NzksMTcgQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0cmV0ID0gaWNlX3JlYWRfc21hX2N0cmwoaHcsIFx1MDAyNmRhdGEpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byB1bmxvY2s7XG4rXHRvbGRfZGF0YSA9IGRhdGE7XG4gXG4gXHRyZXQgPSAtRUlOVkFMO1xuIFx0c3dpdGNoIChwLVx1MDAzZWlkeCkge1xuIFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFg6XG4tXHRcdGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQpIHtcbitcdFx0c3dpdGNoIChzdGF0ZSkge1xuK1x0XHRjYXNlIERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDpcbiBcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUExX01BU0s7XG4gXHRcdFx0ZW5hYmxlID0gdHJ1ZTtcbi1cdFx0fSBlbHNlIGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQpIHtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ6XG4gXHRcdFx0LyogU2tpcCBpZiBVLkZMMSBpcyBub3QgYWN0aXZlLCBzZXR0aW5nIFRYX0VOXG4gXHRcdFx0ICogd2hpbGUgRElSX0VOIGlzIHNldCB3b3VsZCBhbHNvIGRlYWN0aXZhdGVcbiBcdFx0XHQgKiB0aGUgcGFpcmVkIFNNQTEgb3V0cHV0LlxuQEAgLTEzMjksMTggKzE1MDAsMjEgQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0XHRcdH1cbiBcdFx0XHRkYXRhIHw9IElDRV9TTUExX1RYX0VOO1xuIFx0XHRcdGVuYWJsZSA9IGZhbHNlO1xuLVx0XHR9IGVsc2Uge1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRkZWZhdWx0OlxuIFx0XHRcdGdvdG8gdW5sb2NrO1xuIFx0XHR9XG4gXHRcdHRhcmdldCA9IHAtXHUwMDNlb3V0cHV0O1xuIFx0XHR0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgSUNFX0RQTExfUElOX1NXXzJfSURYOlxuLVx0XHRpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRSkge1xuK1x0XHRzd2l0Y2ggKHN0YXRlKSB7XG4rXHRcdGNhc2UgRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTpcbiBcdFx0XHRkYXRhIHw9IElDRV9TTUEyX0RJUl9FTjtcbiBcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUEyX1VGTDJfUlhfRElTO1xuIFx0XHRcdGVuYWJsZSA9IHRydWU7XG4tXHRcdH0gZWxzZSBpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEKSB7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOlxuIFx0XHRcdC8qIFNraXAgaWYgVS5GTDIgaXMgbm90IGFjdGl2ZSwgc2V0dGluZ1xuIFx0XHRcdCAqIFVGTDJfUlhfRElTIGNvdWxkIGFsc28gZGlzYWJsZSB0aGUgcGFpcmVkXG4gXHRcdFx0ICogU01BMiBpbnB1dC5cbkBAIC0xMzUyLDcgKzE1MjYsOCBAQCBpY2VfZHBsbF91ZmxfcGluX3N0YXRlX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXG4gXHRcdFx0fVxuIFx0XHRcdGRhdGEgfD0gSUNFX1NNQTJfVUZMMl9SWF9ESVM7XG4gXHRcdFx0ZW5hYmxlID0gZmFsc2U7XG4tXHRcdH0gZWxzZSB7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGRlZmF1bHQ6XG4gXHRcdFx0Z290byB1bmxvY2s7XG4gXHRcdH1cbiBcdFx0dGFyZ2V0ID0gcC1cdTAwM2VpbnB1dDtcbkBAIC0xMzY0LDIzICsxNTM5LDc0IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcbiBcdHJldCA9IGljZV93cml0ZV9zbWFfY3RybChodywgZGF0YSk7XG4gXHRpZiAocmV0KVxuLVx0XHRnb3RvIHVubG9jaztcbitcdFx0Z290byByZXN0b3JlX3NtYV9jdHJsO1xuIFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcCwgSUNFX0RQTExfUElOX1RZUEVfU09GVFdBUkUsXG4gXHRcdFx0XHRcdGV4dGFjayk7XG4gXHRpZiAocmV0KVxuLVx0XHRnb3RvIHVubG9jaztcbitcdFx0Z290byByZXN0b3JlX3NtYV9jdHJsO1xuK1xuK1x0cmV0ID0gaWNlX2RwbGxfcGluX2NvbmZpZ19nZXQocGYsIHRhcmdldCwgdHlwZSwgXHUwMDI2b2xkX2NvbmZpZywgZXh0YWNrKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gcmVzdG9yZV9zbWFfY3RybDtcbiBcbiBcdGlmIChlbmFibGUpXG4gXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoaHcsIHRhcmdldCwgZC1cdTAwM2VkcGxsX2lkeCwgdHlwZSwgZXh0YWNrKTtcbiBcdGVsc2VcbiBcdFx0cmV0ID0gaWNlX2RwbGxfcGluX2Rpc2FibGUoaHcsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcbi1cdGlmICghcmV0KVxuLVx0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xuK1x0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuK1x0aWYgKHJldClcbitcdFx0Z290byByZXN0b3JlX3RhcmdldDtcbitcbitcdGlmIChlbmFibGUgXHUwMDI2XHUwMDI2IHAtXHUwMDNlbXV4ZWQgXHUwMDI2XHUwMDI2IHAtXHUwMDNlbXV4ZWQtXHUwMDNlYWN0aXZlKSB7XG4rXHRcdGljZV9kcGxsX2dldF9wZWVyX3RhcmdldChwLVx1MDAzZW11eGVkLCBcdTAwMjZwZWVyX3RhcmdldCwgXHUwMDI2cGVlcl90eXBlKTtcbitcdFx0aWYgKCFwZWVyX3RhcmdldCkge1xuK1x0XHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdFx0Z290byByZXN0b3JlX3RhcmdldDtcbitcdFx0fVxuK1x0XHRyZXQgPSBpY2VfZHBsbF9waW5fY29uZmlnX2dldChwZiwgcGVlcl90YXJnZXQsIHBlZXJfdHlwZSxcbitcdFx0XHRcdFx0ICAgICAgXHUwMDI2cGVlcl9jb25maWcsIGV4dGFjayk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byByZXN0b3JlX3RhcmdldDtcbitcbitcdFx0cGVlcl9kcGxsX2lkeCA9IGljZV9kcGxsX2dldF9mYWxsYmFja19pZHgoXHUwMDI2cGYtXHUwMDNlZHBsbHMsXG4rXHRcdFx0XHRcdFx0XHQgIHBlZXJfdGFyZ2V0KTtcbitcdFx0aWYgKHBlZXJfZHBsbF9pZHggXHUwMDNjIDApXG4rXHRcdFx0cGVlcl9kcGxsX2lkeCA9IGQtXHUwMDNlZHBsbF9pZHg7XG4rXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoXHUwMDI2cGYtXHUwMDNlaHcsIHBlZXJfdGFyZ2V0LCBwZWVyX2RwbGxfaWR4LFxuK1x0XHRcdFx0XHQgIHBlZXJfdHlwZSwgZXh0YWNrKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIHJlc3RvcmVfcGVlcjtcbitcdFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcGVlcl90YXJnZXQsIHBlZXJfdHlwZSxcbitcdFx0XHRcdFx0XHRleHRhY2spO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gcmVzdG9yZV9wZWVyO1xuK1x0fVxuK1xuK1x0Z290byB1bmxvY2s7XG4rXG4rcmVzdG9yZV9wZWVyOlxuK1x0cmVzdG9yZV9lcnIgPVxuK1x0XHRpY2VfZHBsbF9waW5fY29uZmlnX3Jlc3RvcmUocGYsIHBlZXJfdGFyZ2V0LCBwZWVyX3R5cGUsXG4rXHRcdFx0XHRcdCAgICBcdTAwMjZwZWVyX2NvbmZpZywgZXh0YWNrLCByZXQpO1xuK1x0aWYgKHJlc3RvcmVfZXJyKVxuK1x0XHRyZXQgPSByZXN0b3JlX2VycjtcbityZXN0b3JlX3RhcmdldDpcbitcdHJlc3RvcmVfZXJyID1cbitcdFx0aWNlX2RwbGxfcGluX2NvbmZpZ19yZXN0b3JlKHBmLCB0YXJnZXQsIHR5cGUsIFx1MDAyNm9sZF9jb25maWcsXG4rXHRcdFx0XHRcdCAgICBleHRhY2ssIHJldCk7XG4rXHRpZiAocmVzdG9yZV9lcnIpXG4rXHRcdHJldCA9IHJlc3RvcmVfZXJyO1xuK3Jlc3RvcmVfc21hX2N0cmw6XG4rXHRyZXN0b3JlX2VyciA9IGljZV9kcGxsX3Jlc3RvcmVfc21hX2N0cmwocGYsIG9sZF9kYXRhLCByZXQpO1xuK1x0aWYgKHJlc3RvcmVfZXJyKVxuK1x0XHRyZXQgPSByZXN0b3JlX2VycjtcbiBcbiB1bmxvY2s6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cGYtXHUwMDNlZHBsbHMubG9jayk7XG4gXHRpZiAoIXJldClcbi1cdFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKFx1MDAyNnBmLVx1MDAzZWRwbGxzLCBwKTtcbitcdFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKHApO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMTQ2Myw0NCArMTY4OSwxNjggQEAgaWNlX2RwbGxfc21hX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0XHRcdCAgIGVudW0gZHBsbF9waW5fc3RhdGUgc3RhdGUsXG4gXHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbitcdGludCBwZWVyX2RwbGxfaWR4LCByZXN0b3JlX2VyciwgcmV0ID0gLUVJTlZBTDtcbiBcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnNtYSA9IHBpbl9wcml2LCAqdGFyZ2V0O1xuK1x0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSBwZWVyX3R5cGUgPSAwLCB0eXBlO1xuK1x0c3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcl90YXJnZXQgPSBOVUxMO1xuK1x0c3RydWN0IGljZV9kcGxsX3Bpbl9jb25maWcgcGVlcl9jb25maWc7XG4rXHRzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyBvbGRfY29uZmlnO1xuIFx0c3RydWN0IGljZV9kcGxsICpkID0gZHBsbF9wcml2O1xuIFx0c3RydWN0IGljZV9wZiAqcGYgPSBzbWEtXHUwMDNlcGY7XG4tXHRlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGU7XG4rXHR1OCBvbGRfZGF0YSA9IDA7XG4gXHRib29sIGVuYWJsZTtcbi1cdGludCByZXQ7XG4gXG4gXHRpZiAoaWNlX2RwbGxfaXNfcmVzZXQocGYsIGV4dGFjaykpXG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnBmLVx1MDAzZWRwbGxzLmxvY2spO1xuLVx0aWYgKCFzbWEtXHUwMDNlYWN0aXZlKSB7XG4tXHRcdHJldCA9IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHNtYSwgc21hLVx1MDAzZWRpcmVjdGlvbiwgZXh0YWNrKTtcbi1cdFx0aWYgKHJldClcbitcdHN3aXRjaCAoc3RhdGUpIHtcbitcdGNhc2UgRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTpcbitcdFx0LyogUmVqZWN0IGRpcmVjdGlvbi1taXNtYXRjaGVkIHJlcXVlc3RzOiBTRUxFQ1RBQkxFICsgT1VUUFVUXG4rXHRcdCAqIGlzIGFuIGludmFsaWQgY29tYmluYXRpb24sIHJldHVybiAtRUlOVkFMIGluIHRoaXMgY2FzZVxuK1x0XHQgKiBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIGRpc2FibGluZyB0aGUgcGluLlxuK1x0XHQgKi9cbitcdFx0aWYgKHNtYS1cdTAwM2VkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVCkge1xuK1x0XHRcdGVuYWJsZSA9IGZhbHNlO1xuK1x0XHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdH1cbitcdFx0ZW5hYmxlID0gdHJ1ZTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDpcbitcdFx0LyogUmVqZWN0IGRpcmVjdGlvbi1taXNtYXRjaGVkIHJlcXVlc3RzOiBDT05ORUNURUQgKyBJTlBVVFxuK1x0XHQgKiBpcyBhbiBpbnZhbGlkIGNvbWJpbmF0aW9uLCByZXR1cm4gLUVJTlZBTCBpbiB0aGlzIGNhc2VcbitcdFx0ICogaW1tZWRpYXRlbHkgaW5zdGVhZCBvZiBkaXNhYmxpbmcgdGhlIHBpbi5cbitcdFx0ICovXG4rXHRcdGlmIChzbWEtXHUwMDNlZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9JTlBVVCkge1xuK1x0XHRcdGVuYWJsZSA9IGZhbHNlO1xuK1x0XHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdH1cbitcdFx0ZW5hYmxlID0gdHJ1ZTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDpcbitcdFx0ZW5hYmxlID0gZmFsc2U7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0Z290byB1bmxvY2s7XG4gXHR9XG4tXHRpZiAoc21hLVx1MDAzZWRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQpIHtcbi1cdFx0ZW5hYmxlID0gc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcbitcbitcdHN3aXRjaCAoc21hLVx1MDAzZWRpcmVjdGlvbikge1xuK1x0Y2FzZSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQ6XG4gXHRcdHRhcmdldCA9IHNtYS1cdTAwM2VpbnB1dDtcbiBcdFx0dHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX0lOUFVUO1xuLVx0fSBlbHNlIHtcbi1cdFx0ZW5hYmxlID0gc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEO1xuK1x0XHRicmVhaztcbitcdGNhc2UgRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVDpcbiBcdFx0dGFyZ2V0ID0gc21hLVx1MDAzZW91dHB1dDtcbiBcdFx0dHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIHVubG9jaztcbiBcdH1cbiBcbi1cdGlmIChlbmFibGUpXG4rXHRpZiAoIXNtYS1cdTAwM2VhY3RpdmUpIHtcbitcdFx0cmV0ID0gaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQoc21hLCBzbWEtXHUwMDNlZGlyZWN0aW9uLCBleHRhY2spO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gdW5sb2NrO1xuK1x0fVxuK1xuK1x0aWYgKGVuYWJsZSkge1xuK1x0XHR1OCBkYXRhO1xuK1xuK1x0XHRyZXQgPSBpY2VfcmVhZF9zbWFfY3RybChcdTAwMjZwZi1cdTAwM2VodywgXHUwMDI2ZGF0YSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdG9sZF9kYXRhID0gZGF0YTtcbitcdFx0c3dpdGNoIChzbWEtXHUwMDNlaWR4KSB7XG4rXHRcdGNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOlxuK1x0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTFfVFhfRU47XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgSUNFX0RQTExfUElOX1NXXzJfSURYOlxuK1x0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTJfVUZMMl9SWF9ESVM7XG4rXHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMl9UWF9FTjtcbitcdFx0XHRicmVhaztcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRcdGdvdG8gdW5sb2NrO1xuK1x0XHR9XG4rXHRcdHJldCA9IGljZV93cml0ZV9zbWFfY3RybChcdTAwMjZwZi1cdTAwM2VodywgZGF0YSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byByZXN0b3JlX3NtYV9jdHJsO1xuK1x0XHRyZXQgPSBpY2VfZHBsbF9zd19waW5zX3VwZGF0ZShwZik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byByZXN0b3JlX3NtYV9jdHJsO1xuK1xuK1x0XHRyZXQgPSBpY2VfZHBsbF9waW5fY29uZmlnX2dldChwZiwgdGFyZ2V0LCB0eXBlLCBcdTAwMjZvbGRfY29uZmlnLFxuK1x0XHRcdFx0XHQgICAgICBleHRhY2spO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gcmVzdG9yZV9zbWFfY3RybDtcbiBcdFx0cmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZShcdTAwMjZwZi1cdTAwM2VodywgdGFyZ2V0LCBkLVx1MDAzZWRwbGxfaWR4LCB0eXBlLFxuIFx0XHRcdFx0XHQgIGV4dGFjayk7XG4tXHRlbHNlXG4tXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9kaXNhYmxlKFx1MDAyNnBmLVx1MDAzZWh3LCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4tXHRpZiAoIXJldClcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xuK1x0XHQvKiBSZWZyZXNoIHRhcmdldCBzdGF0ZSBiZWZvcmUgcGVlci1zaWRlIG9wZXJhdGlvbnMuICovXG4gXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xuK1xuK1x0XHRpZiAoc21hLVx1MDAzZW11eGVkIFx1MDAyNlx1MDAyNiBzbWEtXHUwMDNlbXV4ZWQtXHUwMDNlYWN0aXZlKSB7XG4rXHRcdFx0aWNlX2RwbGxfZ2V0X3BlZXJfdGFyZ2V0KHNtYS1cdTAwM2VtdXhlZCwgXHUwMDI2cGVlcl90YXJnZXQsXG4rXHRcdFx0XHRcdFx0IFx1MDAyNnBlZXJfdHlwZSk7XG4rXHRcdFx0aWYgKCFwZWVyX3RhcmdldCkge1xuK1x0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0XHRcdGdvdG8gcmVzdG9yZV90YXJnZXQ7XG4rXHRcdFx0fVxuK1xuK1x0XHRcdHJldCA9IGljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLFxuK1x0XHRcdFx0XHRcdCAgICAgIFx1MDAyNnBlZXJfY29uZmlnLCBleHRhY2spO1xuK1x0XHRcdGlmIChyZXQpXG4rXHRcdFx0XHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xuK1xuK1x0XHRcdHBlZXJfZHBsbF9pZHggPVxuK1x0XHRcdFx0aWNlX2RwbGxfZ2V0X2ZhbGxiYWNrX2lkeChcdTAwMjZwZi1cdTAwM2VkcGxscywgcGVlcl90YXJnZXQpO1xuK1x0XHRcdGlmIChwZWVyX2RwbGxfaWR4IFx1MDAzYyAwKVxuK1x0XHRcdFx0cGVlcl9kcGxsX2lkeCA9IGQtXHUwMDNlZHBsbF9pZHg7XG4rXHRcdFx0cmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZShcdTAwMjZwZi1cdTAwM2VodywgcGVlcl90YXJnZXQsXG4rXHRcdFx0XHRcdFx0ICBwZWVyX2RwbGxfaWR4LCBwZWVyX3R5cGUsIGV4dGFjayk7XG4rXHRcdFx0aWYgKHJldClcbitcdFx0XHRcdGdvdG8gcmVzdG9yZV9wZWVyO1xuK1x0XHRcdHJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHBlZXJfdGFyZ2V0LCBwZWVyX3R5cGUsXG4rXHRcdFx0XHRcdFx0XHRleHRhY2spO1xuK1x0XHRcdGlmIChyZXQpXG4rXHRcdFx0XHRnb3RvIHJlc3RvcmVfcGVlcjtcbitcdFx0fVxuK1x0fSBlbHNlIHtcbitcdFx0cmV0ID0gaWNlX2RwbGxfcGluX2Rpc2FibGUoXHUwMDI2cGYtXHUwMDNlaHcsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcbitcdFx0aWYgKCFyZXQpXG4rXHRcdFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLFxuK1x0XHRcdFx0XHRcdFx0ZXh0YWNrKTtcbitcdH1cbitcdGdvdG8gdW5sb2NrO1xuK1xuK3Jlc3RvcmVfcGVlcjpcbitcdHJlc3RvcmVfZXJyID1cbitcdFx0aWNlX2RwbGxfcGluX2NvbmZpZ19yZXN0b3JlKHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLFxuK1x0XHRcdFx0XHQgICAgXHUwMDI2cGVlcl9jb25maWcsIGV4dGFjaywgcmV0KTtcbitcdGlmIChyZXN0b3JlX2VycilcbitcdFx0cmV0ID0gcmVzdG9yZV9lcnI7XG4rcmVzdG9yZV90YXJnZXQ6XG4rXHRyZXN0b3JlX2VyciA9XG4rXHRcdGljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShwZiwgdGFyZ2V0LCB0eXBlLCBcdTAwMjZvbGRfY29uZmlnLFxuK1x0XHRcdFx0XHQgICAgZXh0YWNrLCByZXQpO1xuK1x0aWYgKHJlc3RvcmVfZXJyKVxuK1x0XHRyZXQgPSByZXN0b3JlX2VycjtcbityZXN0b3JlX3NtYV9jdHJsOlxuK1x0cmVzdG9yZV9lcnIgPSBpY2VfZHBsbF9yZXN0b3JlX3NtYV9jdHJsKHBmLCBvbGRfZGF0YSwgcmV0KTtcbitcdGlmIChyZXN0b3JlX2VycilcbitcdFx0cmV0ID0gcmVzdG9yZV9lcnI7XG4gXG4gdW5sb2NrOlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBmLVx1MDAzZWRwbGxzLmxvY2spO1xuIFx0aWYgKCFyZXQpXG4tXHRcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihcdTAwMjZwZi1cdTAwM2VkcGxscywgc21hKTtcbitcdFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKHNtYSk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC0xNjk3LDcgKzIwNDcsNyBAQCBpY2VfZHBsbF9waW5fc21hX2RpcmVjdGlvbl9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0cmV0ID0gaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQocCwgZGlyZWN0aW9uLCBleHRhY2spO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBmLVx1MDAzZWRwbGxzLmxvY2spO1xuIFx0aWYgKCFyZXQpXG4tXHRcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihcdTAwMjZwZi1cdTAwM2VkcGxscywgcCk7XG4rXHRcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihwKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTQ1MTksNiArNDg2OSw4IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3N3X3BpbnMoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRcdGlmIChwaW4tXHUwMDNlaW5wdXQtXHUwMDNlcmVmX3N5bmMpXG4gXHRcdFx0cGluLVx1MDAzZXJlZl9zeW5jID0gcGluLVx1MDAzZWlucHV0LVx1MDAzZXJlZl9zeW5jIC0gcGluX2Fic19pZHg7XG4gXHRcdHBpbi1cdTAwM2VvdXRwdXQgPSBcdTAwMjZkLVx1MDAzZW91dHB1dHNbSUNFX0RQTExfUElOX1NXX09VVFBVVF9BQlMoaSldO1xuK1x0XHRwaW4tXHUwMDNlbXV4ZWQgPSBcdTAwMjZkLVx1MDAzZXVmbFtpXTtcbitcbiBcdFx0aWNlX2RwbGxfcGhhc2VfcmFuZ2Vfc2V0KFx1MDAyNnBpbi1cdTAwM2Vwcm9wLnBoYXNlX3JhbmdlLCBwaGFzZV9hZGpfbWF4KTtcbiBcdH1cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElDRV9EUExMX1BJTl9TV19OVU07IGkrKykge1xuQEAgLTQ1MjgsNyArNDg4MCw4IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3N3X3BpbnMoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRcdHBpbi1cdTAwM2Vwcm9wLmNhcGFiaWxpdGllcyA9IGNhcHM7XG4gXHRcdHBpbi1cdTAwM2VwZiA9IHBmO1xuIFx0XHRwaW4tXHUwMDNlcHJvcC5ib2FyZF9sYWJlbCA9IGljZV9kcGxsX3N3X3Bpbl91ZmxbaV07XG4tXHRcdGlmIChpID09IElDRV9EUExMX1BJTl9TV18xX0lEWCkge1xuK1x0XHRzd2l0Y2ggKGkpIHtcbitcdFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFg6XG4gXHRcdFx0cGluLVx1MDAzZWRpcmVjdGlvbiA9IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQ7XG4gXHRcdFx0cGluX2Fic19pZHggPSBJQ0VfRFBMTF9QSU5fU1dfT1VUUFVUX0FCUyhpKTtcbiBcdFx0XHRwaW4tXHUwMDNlcHJvcC5mcmVxX3N1cHBvcnRlZCA9XG5AQCAtNDUzOCw3ICs0ODkxLDggQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdFx0XHRwaW4tXHUwMDNlcHJvcC5mcmVxX3N1cHBvcnRlZF9udW0gPSBmcmVxX3N1cHBfbnVtO1xuIFx0XHRcdHBpbi1cdTAwM2VpbnB1dCA9IE5VTEw7XG4gXHRcdFx0cGluLVx1MDAzZW91dHB1dCA9IFx1MDAyNmQtXHUwMDNlb3V0cHV0c1twaW5fYWJzX2lkeF07XG4tXHRcdH0gZWxzZSBpZiAoaSA9PSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFgpIHtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFg6XG4gXHRcdFx0cGluLVx1MDAzZWRpcmVjdGlvbiA9IERQTExfUElOX0RJUkVDVElPTl9JTlBVVDtcbiBcdFx0XHRwaW5fYWJzX2lkeCA9IElDRV9EUExMX1BJTl9TV19JTlBVVF9BQlMoaSkgK1xuIFx0XHRcdFx0ICAgICAgaW5wdXRfaWR4X29mZnNldDtcbkBAIC00NTUxLDcgKzQ5MDUsMTIgQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdFx0XHRwaW4tXHUwMDNlcHJvcC5jYXBhYmlsaXRpZXMgPVxuIFx0XHRcdFx0KERQTExfUElOX0NBUEFCSUxJVElFU19QUklPUklUWV9DQU5fQ0hBTkdFIHxcbiBcdFx0XHRcdCBjYXBzKTtcbitcdFx0XHRicmVhaztcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRkZXZfZXJyKGljZV9wZl90b19kZXYocGYpLCBcIkludmFsaWQgVS5GTCBwaW4gaW5kZXg6ICVkXFxuXCIsIGkpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4rXHRcdHBpbi1cdTAwM2VtdXhlZCA9IFx1MDAyNmQtXHUwMDNlc21hW2ldO1xuIFx0XHRpY2VfZHBsbF9waGFzZV9yYW5nZV9zZXQoXHUwMDI2cGluLVx1MDAzZXByb3AucGhhc2VfcmFuZ2UsIHBoYXNlX2Fkal9tYXgpO1xuIFx0fVxuIFxuQEAgLTQ3NDMsNiArNTEwMiwxMyBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mbyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBjZ3UpXG4gXG4gXHRkZS1cdTAwM2VkcGxsX2lkeCA9IGFiaWxpdGllcy5lZWNfZHBsbF9pZHg7XG4gXHRkcC1cdTAwM2VkcGxsX2lkeCA9IGFiaWxpdGllcy5wcHNfZHBsbF9pZHg7XG4rXHRpZiAoZGUtXHUwMDNlZHBsbF9pZHggXHUwMDNlPSBJQ0VfRFBMTF9SQ0xLX05VTV9NQVggfHxcbitcdCAgICBkcC1cdTAwM2VkcGxsX2lkeCBcdTAwM2U9IElDRV9EUExMX1JDTEtfTlVNX01BWCkge1xuK1x0XHRkZXZfZXJyKGljZV9wZl90b19kZXYocGYpLFxuK1x0XHRcdFwiaW52YWxpZCBkcGxsX2lkeCBpbiBjZ3UgYWJpbGl0aWVzOiBlZWM9JXUsIHBwcz0ldVxcblwiLFxuK1x0XHRcdGRlLVx1MDAzZWRwbGxfaWR4LCBkcC1cdTAwM2VkcGxsX2lkeCk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuIFx0ZC1cdTAwM2VudW1faW5wdXRzID0gYWJpbGl0aWVzLm51bV9pbnB1dHM7XG4gXHRkLVx1MDAzZW51bV9vdXRwdXRzID0gYWJpbGl0aWVzLm51bV9vdXRwdXRzO1xuIFx0ZC1cdTAwM2VpbnB1dF9waGFzZV9hZGpfbWF4ID0gbGUzMl90b19jcHUoYWJpbGl0aWVzLm1heF9pbl9waGFzZV9hZGopIFx1MDAyNlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmhcbmluZGV4IDEwM2JhM2U0OTA2ODIuLmRjNmYwOTZiZjA2OWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmhcbkBAIC03Niw2ICs3Niw3IEBAIHN0cnVjdCBpY2VfZHBsbF9waW4ge1xuIFx0czMyIHBoYXNlX2FkanVzdDtcbiBcdHN0cnVjdCBpY2VfZHBsbF9waW4gKmlucHV0O1xuIFx0c3RydWN0IGljZV9kcGxsX3BpbiAqb3V0cHV0O1xuK1x0c3RydWN0IGljZV9kcGxsX3BpbiAqbXV4ZWQ7XG4gXHRlbnVtIGRwbGxfcGluX2RpcmVjdGlvbiBkaXJlY3Rpb247XG4gXHRzNjQgcGhhc2Vfb2Zmc2V0O1xuIFx0dTggc3RhdHVzO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjE6NDM6NTIuMDg2MjA5NjYyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTExMzE1NzI3OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgVGhpcyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGlzIHdvcnRoIGZ1enppbmcuIFRoZSBrZXkgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIHRoZSBjb2RlIHRvdWNoZXMgc29tZXRoaW5nIHRoYXQncyBkaWZmaWN1bHQgb3IgaW1wb3NzaWJsZSB0byByZXByb2R1Y2UgaW4gYSBzdGFuZGFyZCwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VLiBUaGUgZ3VpZGVsaW5lcyBhcmUgcHJldHR5IGNsZWFyIG9uIHdoYXQgZ2V0cyBleGNsdWRlZDogY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXphdGlvbiwgdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVycyB0aGF0IG5lZWQgZGVkaWNhdGVkIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VLCBhbmQgdGVhcmRvd24gY2FsbGJhY2tzIHRoYXQgb25seSBydW4gZHVyaW5nIGhvdC11bnBsdWcgb3BlcmF0aW9ucy5cblxuVGhlIHBhdGNoIG1lbnRpb25zIGEgZmV3IGV4YW1wbGVzLCBidXQgbXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZWAuIEhtbSwgYGljZWAuLi4gSSBrbm93IHRoYXQncyB0aGUgSW50ZWwgRXRoZXJuZXQgQ29udHJvbGxlciBFODAwIHNlcmllcyBkcml2ZXIuIFNvLCBpcyB0aGF0IGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVyPyBBbmQgY3J1Y2lhbGx5LCBkb2VzIGl0ICpyZXF1aXJlKiBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0IGlzbid0IHJlcGxpY2F0ZWQgaW4gUUVNVT9cblxuSSBuZWVkIHRvIG5haWwgdGhpcyBkb3duLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJlcmVhZCB0aG9zZSBleGNsdXNpb24gY3JpdGVyaWEuIENvZGUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRpb24sIGlzIG91dC4gVGhlbiwgKnNwZWNpZmljKiBQQ0llIGRyaXZlcnMgdGhhdCByZXF1aXJlIGFjdHVhbCBoYXJkd2FyZSB0aGF0IFFFTVUgZG9lc24ndCBlbXVsYXRlLiBBbmQgdGhlbiB0aGluZ3MgbGlrZSBkcml2ZXIgdW5yZWdpc3RyYXRpb24gY2FsbGJhY2tzLlxuXG5TbywgYmFjayB0byBgaWNlYC4gSSBrbm93IGl0J3MgdGhlIEludGVsIEU4MDAgc2VyaWVzIGRyaXZlciwgdGhlIEludGVsKFIpIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgTGludXggRHJpdmVyLiBDYW4gUUVNVSBzaW11bGF0ZSBhbiBJbnRlbCBFODAwIHNlcmllcyBOSUM/IE5vcGUsIGRlZmluaXRlbHkgbm90LiBRRU1VIGhhbmRsZXMgdGhpbmdzIGxpa2UgZTEwMDAsIGUxMDAwZSwgbWF5YmUgaWdiIG5vd2FkYXlzLCBydGw4MTM5LCB2aXJ0aW8tbmV0LCBldGMuLCBidXQgaXQgZG9lc24ndCBzaW11bGF0ZSB0aGUgYGljZWAgY29udHJvbGxlci4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRoaW5raW5nIHRoaXMgY291bGQgYmUgYSBwcm9ibGVtLlxuXG5JIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYGljZWAgaXMgZGVzaWduZWQgZm9yIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgb25seS4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb2RlYmFzZSBpdHNlbGYsIGFuZCBjaGVjayBpdHMgS2NvbmZpZyBhbmQgcHJvYmUgbWVjaGFuaXNtIHRvIGNvbmZpcm0gaWYgaXQgY2FuIGJlIGVtdWxhdGVkIG9yIGlmIGl0J3MgcHVyZWx5IGEgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBkcml2ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzU4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjE6NDQ6MDMuMjE3Nzg0ODFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk4MzIxMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0yNjg9Y29uZmlnIEk0MEVWRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yOTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoyOTE6Y29uZmlnIElDRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjkyLVxcdHRyaXN0YXRlIFxcXCJJbnRlbChSKSBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIFN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMxOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMyMDpjb25maWcgSUNFX0hXTU9OXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zMjEtXFx0Ym9vbCBcXFwiSW50ZWwoUikgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBTdXBwb3J0IEhXTU9OIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMzMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMzMTpjb25maWcgSUNFX1NXSVRDSERFVlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMzMyLVxcdGJvb2wgXFxcIlN3aXRjaGRldiBTdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzozNDU6Y29uZmlnIElDRV9IV1RTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zNDYtXFx0Ym9vbCBcXFwiU3VwcG9ydCBIVyBjcm9zcy10aW1lc3RhbXAgb24gcGxhdGZvcm1zIHdpdGggUFRNIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQ0OjAzLjI2NzYyMjIxN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMDcxODI0NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBEUExMIChEaWdpdGFsIFBoYXNlLUxvY2tlZCBMb29wKSBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgSW50ZWwgRXRoZXJuZXQgZHJpdmVyIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IGZvciB0aGUgXCJpY2VcIiBkcml2ZXIuIEknbSBnb2luZyB0byBmb2N1cyBvbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmNgLiBNeSBwcmltYXJ5IGludGVyZXN0IGlzIGluIGluaXRpYWxpemF0aW9uIOKAkyBob3cgdGhlIERQTEwgZ2V0cyBzZXQgdXAgaW5pdGlhbGx5IOKAkyBhbmQgdGhlbiwgaW1wb3J0YW50bHksIGhvdyBpdCdzICp1c2VkKiB3aXRoaW4gdGhlIGxhcmdlciBkcml2ZXIgY29udGV4dC4gSSBuZWVkIHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgY29udHJvbCBmbG93LCBhbnkgcG90ZW50aWFsIGVycm9yIGhhbmRsaW5nIHJlbGF0ZWQgdG8gRFBMTCBvcGVyYXRpb24sIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgbW9kdWxlcyBhbmQgZnVuY3Rpb25zIHdpdGhpbiB0aGUgXCJpY2VcIiBkcml2ZXIuIFRoaXMgaXMgbGlrZWx5IGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHRpbWluZyBhbmQgY2xvY2tpbmcgYXNwZWN0cyBvZiB0aGUgaW50ZXJmYWNlLCBhbmQgaG93IHRoYXQgaXMgY29udHJpYnV0aW5nIHRvIG92ZXJhbGwgcGVyZm9ybWFuY2UuIEkgZXhwZWN0IHRoZXJlJ3MgcHJvYmFibHkgc29tZSBpbXBvcnRhbnQgY29uc2lkZXJhdGlvbnMgcmVsYXRpbmcgdG8gcG93ZXIgbWFuYWdlbWVudCBhbmQvb3IgY29uZmlndXJhdGlvbi4gTGV0J3Mgc3RhcnQgZGlnZ2luZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTQwNDQsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTo0NDoyNC4zMzk0NTI1OTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjQwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0LyogQ29weXJpZ2h0IChDKSAyMDIyLCBJbnRlbCBDb3Jwb3JhdGlvbi4gKi9cXG4gICAzOlxcdFxcbiAgIDQ6XFx0I2luY2x1ZGUgXFxcImljZS5oXFxcIlxcbiAgIDU6XFx0I2luY2x1ZGUgXFxcImljZV9saWIuaFxcXCJcXG4gICA2OlxcdCNpbmNsdWRlIFxcXCJpY2VfdHJhY2UuaFxcXCJcXG4gICA3OlxcdCNpbmNsdWRlIFxcXCJpY2VfdHhjbGsuaFxcXCJcXG4gICA4OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9kcGxsLmhcXHUwMDNlXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvcGVydHkuaFxcdTAwM2VcXG4gIDEwOlxcdFxcbiAgMTE6XFx0I2RlZmluZSBJQ0VfQ0dVX1NUQVRFX0FDUV9FUlJfVEhSRVNIT0xEXFx0XFx0NTBcXG4gIDEyOlxcdCNkZWZpbmUgSUNFX0RQTExfUElOX0lEWF9JTlZBTElEXFx0XFx0MHhmZlxcbiAgMTM6XFx0I2RlZmluZSBJQ0VfRFBMTF9SQ0xLX05VTV9QRVJfUEZcXHRcXHQxXFxuICAxNDpcXHQjZGVmaW5lIElDRV9EUExMX1BJTl9FU1lOQ19QVUxTRV9ISUdIX1BFUkNFTlRcXHQyNVxcbiAgMTU6XFx0I2RlZmluZSBJQ0VfRFBMTF9QSU5fR0VOX1JDTEtfRlJFUVxcdFxcdDE5NTMxMjVcXG4gIDE2OlxcdCNkZWZpbmUgSUNFX0RQTExfUElOX1BSSU9fT1VUUFVUXFx0XFx0MHhmZlxcbiAgMTc6XFx0I2RlZmluZSBJQ0VfRFBMTF9JTlBVVF9SRUZfTlVNXFx0XFx0XFx0MTBcXG4gIDE4OlxcdCNkZWZpbmUgSUNFX0RQTExfUEhBU0VfT0ZGU0VUX1BFUklPRFxcdFxcdDJcXG4gIDE5OlxcdCNkZWZpbmUgSUNFX0RQTExfU1dfUElOX0lOUFVUX0JBU0VfU0ZQXFx0XFx0NFxcbiAgMjA6XFx0I2RlZmluZSBJQ0VfRFBMTF9TV19QSU5fSU5QVVRfQkFTRV9RU0ZQXFx0XFx0NlxcbiAgMjE6XFx0I2RlZmluZSBJQ0VfRFBMTF9TV19QSU5fT1VUUFVUX0JBU0VcXHRcXHQwXFxuICAyMjpcXHRcXG4gIDIzOlxcdCNkZWZpbmUgRTgyNV9SQ0xLX1BBUkVOVF8wX1BJTl9JRFhcXHRcXHQwXFxuICAyNDpcXHQjZGVmaW5lIEU4MjVfUkNMS19QQVJFTlRfMV9QSU5fSURYXFx0XFx0MVxcbiAgMjU6XFx0XFxuICAyNjpcXHQjZGVmaW5lIElDRV9EUExMX1BJTl9TV19JTlBVVF9BQlMoaW5faWR4KSBcXFxcXFxuICAyNzpcXHRcXHQoSUNFX0RQTExfU1dfUElOX0lOUFVUX0JBU0VfU0ZQICsgKGluX2lkeCkpXFxuICAyODpcXHRcXG4gIDI5OlxcdCNkZWZpbmUgSUNFX0RQTExfUElOX1NXXzFfSU5QVVRfQUJTX0lEWCBcXFxcXFxuICAzMDpcXHRcXHQoSUNFX0RQTExfUElOX1NXX0lOUFVUX0FCUyhJQ0VfRFBMTF9QSU5fU1dfMV9JRFgpKVxcbiAgMzE6XFx0XFxuICAzMjpcXHQjZGVmaW5lIElDRV9EUExMX1BJTl9TV18yX0lOUFVUX0FCU19JRFggXFxcXFxcbiAgMzM6XFx0XFx0KElDRV9EUExMX1BJTl9TV19JTlBVVF9BQlMoSUNFX0RQTExfUElOX1NXXzJfSURYKSlcXG4gIDM0OlxcdFxcbiAgMzU6XFx0I2RlZmluZSBJQ0VfRFBMTF9QSU5fU1dfT1VUUFVUX0FCUyhvdXRfaWR4KSBcXFxcXFxuICAzNjpcXHRcXHQoSUNFX0RQTExfU1dfUElOX09VVFBVVF9CQVNFICsgKG91dF9pZHgpKVxcbiAgMzc6XFx0XFxuICAzODpcXHQjZGVmaW5lIElDRV9EUExMX1BJTl9TV18xX09VVFBVVF9BQlNfSURYIFxcXFxcXG4gIDM5OlxcdFxcdChJQ0VfRFBMTF9QSU5fU1dfT1VUUFVUX0FCUyhJQ0VfRFBMTF9QSU5fU1dfMV9JRFgpKVxcbiAgNDA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQ0OjI0LjMzOTg3OTgyNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5ODUwNTA3MjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50IGZvciBgaWNlX2RwbGwuY2AgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoLiBJdCdzIHRvdWNoaW5nIGBpY2VfZHBsbC5jYCBhbmQgYGljZV9kcGxsLmhgLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBwYXJ0IG9mIHRoZSBJbnRlbCBgaWNlYCBkcml2ZXIgZm9yIHRoZSBFODAwIHNlcmllcyBFdGhlcm5ldCBjb250cm9sbGVycy4gVGhpcyBpcyBzcGVjaWZpY2FsbHkgZm9jdXNlZCBvbiB0aGUgRFBMTCBzdWJzeXN0ZW0sIGhhbmRsaW5nIGFsbCB0aGUgbnVhbmNlcyBvZiB0aG9zZSBwaW5zLCB0aGUgU01BIGFuZCBVLkZMIGNvbm5lY3RvcnMsIENHVSwgYW5kIHRoZSBQQ0E5NTc1IEdQSU8gZXhwYW5kZXIg4oCTIGFsbCB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgZGV0YWlscy5cblxuTm93LCBsZXQncyBnbyBvdmVyIHRoZSBpbnN0cnVjdGlvbnMgZm9yIGRldGVybWluaW5nIGlmIHRoaXMgY29kZSBpcyB3b3J0aCBmdXp6aW5nLiBUaGUga2V5IGhlcmUgaXMgdGhlIFwiaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHNcIiBjbGF1c2UuIFNwZWNpZmljYWxseSwgaXQgbm90ZXMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoIGFuZCBTbWFydE5JQyBkcml2ZXJzIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSBhcmVuJ3QgZnV6emFibGUgaW4gc3RhbmRhcmQgUUVNVS5cblxuVGhlIGBpY2VgIGRyaXZlciBpcyAqcHJlY2lzZWx5KiB0aGF0OiBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgZHJpdmVyIGZvciBJbnRlbCdzIEU4MDAgc2VyaWVzLiBJdCdzIGRlc2lnbmVkIHRvIGludGVyZmFjZSBkaXJlY3RseSB3aXRoIHBoeXNpY2FsIEludGVsIGhhcmR3YXJlLiBUaGUgRFBMTCBmdW5jdGlvbmFsaXR5LCB3aGljaCB0aGlzIHBhdGNoIG1vZGlmaWVzLCBpcyBkZXBlbmRlbnQgb24gc3BlY2lmaWMgaGFyZHdhcmUgYm9hcmRzIHRoYXQgSSdkIG5lZWQgdG8gZnV6eiB0aGVzZSBjb2RlIHBhdGhzLiBUaGlzIGlzIGZhciBmcm9tIGJlaW5nIHBvc3NpYmxlIGluIGEgc3RhbmRhcmQgUUVNVSBpbnN0YW5jZSwgYW5kIGNlcnRhaW5seSBub3Qgc29tZXRoaW5nIHRoYXQgY2FuIGJlIHByYWN0aWNhbGx5IHRlc3RlZCBpbiBzb21ldGhpbmcgbGlrZSBHQ0Ugb3IgU3l6a2FsbGVyIFZNcy4gV2UncmUgdGFsa2luZyBhYm91dCBoYXJkd2FyZS1zcGVjaWZpYyBEUExMIC8gQ0dVIC8gU01BIHBpbiBhY2Nlc3MuXG5cblRoZXJlZm9yZSwgZ2l2ZW4gdGhhdCBpdCByZXF1aXJlcyAqcGh5c2ljYWwqIEludGVsIEU4MDAgaGFyZHdhcmUsIGFuZCB0aGF0IHRoaXMgY29kZSdzIGZ1bmN0aW9uYWxpdHkgaXMgZGlyZWN0bHkgdGllZCB0byB0aGlzIGhhcmR3YXJlLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IHRoaXMgaXNuJ3Qgd29ydGggZnV6emluZyBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMuXG5cblNvLCBsZXQncyBzb2xpZGlmeSB0aGUgYXNzZXNzbWVudDpcblxuKiAgICoqV29ydGhGdXp6aW5nOiBmYWxzZSoqXG4qICAgKipGb2N1c1N5bWJvbHM6IFxcWyBdKipcbiogICAqKkVuYWJsZUNvbmZpZ3M6IFxcWyBdKipcbiogICAqKlJlYXNvbmluZzogVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBFODAwIHNlcmllcyBldGhlcm5ldCBkcml2ZXIgKGBpY2VgKSwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGVzZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLioqXG5cblRoYXQgc2hvdWxkIGNvdmVyIGl0LiBSZWFkeSB0byBzdWJtaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDg5LCJPdXRwdXRUb2tlbnMiOjkxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjE6NDQ6NTQuMTkwMzkxODI5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBjaGFuZ2VzIG1vZGlmeSB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyAoaWNlKSBkcml2ZXIgRFBMTCBwaW4gaGFuZGxpbmcuIFRoZSBpY2UgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIEludGVsIEU4MDAgc2VyaWVzIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBjaGFuZ2VzIG1vZGlmeSB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyAoaWNlKSBkcml2ZXIgRFBMTCBwaW4gaGFuZGxpbmcuIFRoZSBpY2UgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIEludGVsIEU4MDAgc2VyaWVzIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTo0NDo1NC4xOTA0MzIxNDlaIiwiU2VxIjo5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcgsml[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 21:41:47 +0000 UTC FinishedAt: 2026-08-31 21:44:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBtb2RpZnkgdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgKGljZSkgZHJpdmVyIERQTEwgcGluIGhhbmRsaW5nLiBUaGUgaWNlIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBJbnRlbCBFODAwIHNlcmllcyBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDFiMGYwNjYzMGY4NDQ0MmY4NzA1MjYyZTEwM2ZjY2Q4YmJkMWM1MmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMTo0Mzo1MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jXG5pbmRleCA4NWE3NGNkNmVhMWYzLi5jZmZjOWQ3MzdkYzJmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jXG5AQCAtODksNiAmIzQzOzg5LDI5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fZnJlcXVlbmN5IGljZV9lc3luY19yYW5nZVtdID0ge1xuIFx0RFBMTF9QSU5fRlJFUVVFTkNZX1JBTkdFKDAsIERQTExfUElOX0ZSRVFVRU5DWV8xX0haKSxcbiB9O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBTTUExL1UuRkwxIE1VWCB0YWJsZVxuJiM0MzsgKiYjNDM7LS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tJiM0MztcbiYjNDM7ICp8ICAgICAgICAgICAgICAgIHwgU01BMV9ESVJfRU4gfCBTTUExX1RYX0VOIHxcbiYjNDM7IComIzQzOy0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLSYjNDM7XG4mIzQzOyAqfFNNQTEgUlggRW5hYmxlICB8ICAgICAgIDAgICAgIHwgICAgICB4ICAgICB8XG4mIzQzOyAqfHUuRkwxIFRYIEVuYWJsZSB8ICAgICAgIDAgICAgIHwgICAgICAwICAgICB8XG4mIzQzOyAqfFNNQTEgVFggRW5hYmxlICB8ICAgICAgIDEgICAgIHwgICAgICAwICAgICB8XG4mIzQzOyAqfEFsbCBEaXNhYmxlICAgICB8ICAgICAgIDEgICAgIHwgICAgICAxICAgICB8XG4mIzQzOyAqJiM0MzstLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0mIzQzO1xuJiM0MzsgKlxuJiM0MzsgKiBTTUEyL1UuRkwyIE1VWCB0YWJsZVxuJiM0MzsgKiYjNDM7LS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0mIzQzO1xuJiM0MzsgKnwgICAgICAgICAgICAgICAgfCBTTUEyX0RJUl9FTiB8IFNNQTJfVFhfRU4gfCBVRkwyX1JYX0VOIHxcbiYjNDM7IComIzQzOy0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tJiM0MztcbiYjNDM7ICp8U01BMiBSWCBFbmFibGUgIHwgICAgICAgMCAgICAgfCAgICAgIHggICAgIHwgICAgIHggICAgICB8XG4mIzQzOyAqfHUuRkwyIFJYIEVuYWJsZSB8ICAgICAgIDEgICAgIHwgICAgICB4ICAgICB8ICAgICAwICAgICAgfFxuJiM0MzsgKnxTTUEyIFRYIEVuYWJsZSAgfCAgICAgICAxICAgICB8ICAgICAgMCAgICAgfCAgICAgeCAgICAgIHxcbiYjNDM7ICp8U01BMiBEaXNhYmxlICAgIHwgICAgICAgMSAgICAgfCAgICAgIDEgICAgIHwgICAgIHggICAgICB8XG4mIzQzOyAqfEFsbCBEaXNhYmxlICAgICB8ICAgICAgIDEgICAgIHwgICAgICAxICAgICB8ICAgICAxICAgICAgfFxuJiM0MzsgKiYjNDM7LS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0mIzQzO1xuJiM0MzsgKi9cbiYjNDM7XG4gLyoqXG4gICogaWNlX2RwbGxfaXNfc3dfcGluIC0gY2hlY2sgaWYgZ2l2ZW4gcGluIHNoYWxsIGJlIGNvbnRyb2xsZWQgYnkgU1dcbiAgKiBAcGY6IHByaXZhdGUgYm9hcmQgc3RydWN0dXJlXG5AQCAtNDQzLDYgJiM0Mzs0NjYsNDAgQEAgaWNlX2RwbGxfc3dfcGluX2ZyZXF1ZW5jeV9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgaWNlX2RwbGxfZ2V0X2ZhbGxiYWNrX2lkeChzdHJ1Y3QgaWNlX2RwbGxzICpkLCBzdHJ1Y3QgaWNlX2RwbGxfcGluICp0YXJnZXQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoZC1cdTAwM2VwcHMuZHBsbF9pZHggXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgdGFyZ2V0LVx1MDAzZXN0YXRlW2QtXHUwMDNlcHBzLmRwbGxfaWR4XSA9PSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQpXG4mIzQzO1x0XHRyZXR1cm4gZC1cdTAwM2VwcHMuZHBsbF9pZHg7XG4mIzQzO1xuJiM0MztcdGlmIChkLVx1MDAzZWVlYy5kcGxsX2lkeCBcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICB0YXJnZXQtXHUwMDNlc3RhdGVbZC1cdTAwM2VlZWMuZHBsbF9pZHhdID09IERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRClcbiYjNDM7XHRcdHJldHVybiBkLVx1MDAzZWVlYy5kcGxsX2lkeDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGljZV9kcGxsX2dldF9wZWVyX3RhcmdldChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IGljZV9kcGxsX3BpbiAqKnBlZXJfdGFyZ2V0LFxuJiM0MztcdFx0XHRcdCAgICAgZW51bSBpY2VfZHBsbF9waW5fdHlwZSAqcGVlcl90eXBlKVxuJiM0Mzt7XG4mIzQzO1x0KnBlZXJfdGFyZ2V0ID0gTlVMTDtcbiYjNDM7XHQqcGVlcl90eXBlID0gMDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChwZWVyLVx1MDAzZWRpcmVjdGlvbikge1xuJiM0MztcdGNhc2UgRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVDpcbiYjNDM7XHRcdCpwZWVyX3RhcmdldCA9IHBlZXItXHUwMDNlb3V0cHV0O1xuJiM0MztcdFx0KnBlZXJfdHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUOlxuJiM0MztcdFx0KnBlZXJfdGFyZ2V0ID0gcGVlci1cdTAwM2VpbnB1dDtcbiYjNDM7XHRcdCpwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogaWNlX2RwbGxfcGluX2VuYWJsZSAtIGVuYWJsZSBhIHBpbiBvbiBkcGxsc1xuICAqIEBodzogYm9hcmQgcHJpdmF0ZSBodyBzdHJ1Y3R1cmVcbkBAIC01MzgsNiAmIzQzOzU5NSwyOSBAQCBpY2VfZHBsbF9waW5fZGlzYWJsZShzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIgLSBub3RpZnkgdGhlIHBhaXJlZCBTVyBwaW4gYWZ0ZXIgYSBzdGF0ZSBjaGFuZ2VcbiYjNDM7ICogQGNoYW5nZWQ6IHRoZSBTVyBwaW4gdGhhdCB3YXMgZXhwbGljaXRseSBjaGFuZ2VkIChhbHJlYWR5IG5vdGlmaWVkIGJ5IGRwbGwgY29yZSlcbiYjNDM7ICpcbiYjNDM7ICogU01BIGFuZCBVLkZMIHBpbnMgc2hhcmUgcGh5c2ljYWwgc2lnbmFsIHBhdGhzIGluIHBhaXJzIChTTUExL1UuRkwxIGFuZFxuJiM0MzsgKiBTTUEyL1UuRkwyKS4gIFdoZW4gb25lIHBpbiYjMzk7cyByb3V0aW5nIGNoYW5nZXMgdmlhIHRoZSBQQ0E5NTc1IEdQSU9cbiYjNDM7ICogZXhwYW5kZXIsIHRoZSBwYWlyZWQgcGluJiMzOTtzIHN0YXRlIG1heSBhbHNvIGNoYW5nZS4gIFNlbmQgYSBjaGFuZ2VcbiYjNDM7ICogbm90aWZpY2F0aW9uIGZvciB0aGUgcGVlciBwaW4gc28gdXNlcnNwYWNlIGNvbnN1bWVycyBtb25pdG9yaW5nIHRoZVxuJiM0MzsgKiBwZWVyIHZpYSBkcGxsIG5ldGxpbmsgbGVhcm4gYWJvdXQgdGhlIHVwZGF0ZS5cbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVkIGZyb20gZHBsbF9waW5fb3BzIGNhbGxiYWNrcyBhZnRlciBwZi1cdTAwM2VkcGxscy5sb2NrIGlzXG4mIzQzOyAqICAgICAgICAgIHJlbGVhc2VkLiAgVXNlcyBfX2RwbGxfcGluX2NoYW5nZV9udGYoKSBiZWNhdXNlIGRwbGxfbG9jayBpc1xuJiM0MzsgKiAgICAgICAgICBzdGlsbCBoZWxkIGJ5IHRoZSBkcGxsIG5ldGxpbmsgbGF5ZXIuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoc3RydWN0IGljZV9kcGxsX3BpbiAqY2hhbmdlZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXI7XG4mIzQzO1xuJiM0MztcdHBlZXIgPSBjaGFuZ2VkLVx1MDAzZW11eGVkO1xuJiM0MztcdGlmIChwZWVyIFx1MDAyNlx1MDAyNiBwZWVyLVx1MDAzZXBpbilcbiYjNDM7XHRcdF9fZHBsbF9waW5fY2hhbmdlX250ZihwZWVyLVx1MDAzZXBpbik7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogaWNlX2RwbGxfcGluX3N0b3JlX3N0YXRlIC0gdXBkYXRlcyB0aGUgc3RhdGUgb2YgcGluIGluIFNXIGJvb2trZWVwaW5nXG4gICogQHBpbjogcG9pbnRlciB0byBhIHBpblxuQEAgLTcwOSw2ICYjNDM7Nzg5LDggQEAgaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLFxuIFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHU4IHBhcmVudCwgcG9ydF9udW0gPSBJQ0VfQVFDX1NFVF9QSFlfUkVDX0NMS19PVVRfQ1VSUl9QT1JUO1xuJiM0MztcdGVudW0gZHBsbF9waW5fc3RhdGUgZWVjX3N0YXRlID0gRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xuJiM0MztcdGVudW0gZHBsbF9waW5fc3RhdGUgcHBzX3N0YXRlID0gRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xuIFx0aW50IHJldDtcbiBcbiBcdHN3aXRjaCAocGluX3R5cGUpIHtcbkBAIC03MjAsMjYgJiM0Mzs4MDIsMjYgQEAgaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLFxuIFx0XHRcdGdvdG8gZXJyO1xuIFx0XHRpZiAoSUNFX0FRQ19HRVRfQ0dVX0lOX0NGR19GTEcyX0lOUFVUX0VOIFx1MDAyNiBwaW4tXHUwMDNlZmxhZ3NbMF0pIHtcbiBcdFx0XHRpZiAocGluLVx1MDAzZXBpbikge1xuLVx0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxuJiM0MztcdFx0XHRcdGVlY19zdGF0ZSA9XG4gXHRcdFx0XHRcdHBpbi1cdTAwM2VwaW4gPT0gcGYtXHUwMDNlZHBsbHMuZWVjLmFjdGl2ZV9pbnB1dCA/XG4gXHRcdFx0XHRcdERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCA6XG4gXHRcdFx0XHRcdERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7XG4tXHRcdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4XSA9XG4mIzQzO1x0XHRcdFx0cHBzX3N0YXRlID1cbiBcdFx0XHRcdFx0cGluLVx1MDAzZXBpbiA9PSBwZi1cdTAwM2VkcGxscy5wcHMuYWN0aXZlX2lucHV0ID9cbiBcdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEIDpcbiBcdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcbiBcdFx0XHR9IGVsc2Uge1xuLVx0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxuLVx0XHRcdFx0XHREUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xuLVx0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxuLVx0XHRcdFx0XHREUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xuJiM0MztcdFx0XHRcdGVlY19zdGF0ZSA9IERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7XG4mIzQzO1x0XHRcdFx0cHBzX3N0YXRlID0gRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcbiBcdFx0XHR9XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxuLVx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xuLVx0XHRcdHBpbi1cdTAwM2VzdGF0ZVtwZi1cdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID1cbi1cdFx0XHRcdERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDtcbiBcdFx0fVxuJiM0MztcdFx0LyogQ29tbWl0IG9ubHkgYWZ0ZXIgYSBzdWNjZXNzZnVsIHJlYWQgc28gbG9ja2xlc3MgcmVhZGVycyBuZXZlclxuJiM0MztcdFx0ICogb2JzZXJ2ZSBhIHRyYW5zaWVudCBkaXNjb25uZWN0ZWQgc3RhdGUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChwZi1cdTAwM2VkcGxscy5lZWMuZHBsbF9pZHggXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWClcbiYjNDM7XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPSBlZWNfc3RhdGU7XG4mIzQzO1x0XHRpZiAocGYtXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4IFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpXG4mIzQzO1x0XHRcdHBpbi1cdTAwM2VzdGF0ZVtwZi1cdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID0gcHBzX3N0YXRlO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUOlxuIFx0XHRyZXQgPSBpY2VfYXFfZ2V0X291dHB1dF9waW5fY2ZnKFx1MDAyNnBmLVx1MDAzZWh3LCBwaW4tXHUwMDNlaWR4LFxuQEAgLTc1MCwyMCAmIzQzOzgzMiwxNyBAQCBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW4sXG4gXG4gXHRcdHBhcmVudCBcdTAwMjY9IElDRV9BUUNfR0VUX0NHVV9PVVRfQ0ZHX0RQTExfU1JDX1NFTDtcbiBcdFx0aWYgKElDRV9BUUNfR0VUX0NHVV9PVVRfQ0ZHX09VVF9FTiBcdTAwMjYgcGluLVx1MDAzZWZsYWdzWzBdKSB7XG4tXHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxuLVx0XHRcdFx0cGFyZW50ID09IHBmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeCA/XG4mIzQzO1x0XHRcdGVlY19zdGF0ZSA9IHBhcmVudCA9PSBwZi1cdTAwM2VkcGxscy5lZWMuZHBsbF9pZHggP1xuIFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEIDpcbiBcdFx0XHRcdERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDtcbi1cdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4XSA9XG4tXHRcdFx0XHRwYXJlbnQgPT0gcGYtXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4ID9cbiYjNDM7XHRcdFx0cHBzX3N0YXRlID0gcGFyZW50ID09IHBmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeCA/XG4gXHRcdFx0XHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxuIFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdHBpbi1cdTAwM2VzdGF0ZVtwZi1cdTAwM2VkcGxscy5lZWMuZHBsbF9pZHhdID1cbi1cdFx0XHRcdERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDtcbi1cdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4XSA9XG4tXHRcdFx0XHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XG4gXHRcdH1cbiYjNDM7XHRcdGlmIChwZi1cdTAwM2VkcGxscy5lZWMuZHBsbF9pZHggXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWClcbiYjNDM7XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPSBlZWNfc3RhdGU7XG4mIzQzO1x0XHRpZiAocGYtXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4IFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpXG4mIzQzO1x0XHRcdHBpbi1cdTAwM2VzdGF0ZVtwZi1cdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID0gcHBzX3N0YXRlO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgSUNFX0RQTExfUElOX1RZUEVfUkNMS19JTlBVVDpcbiBcdFx0aWYgKHBmLVx1MDAzZWh3Lm1hY190eXBlID09IElDRV9NQUNfR0VORVJJQ18zS19FODI1KSB7XG5AQCAtMTE2MywzMCAmIzQzOzEyNDIsODUgQEAgaWNlX2RwbGxfaW5wdXRfc3RhdGVfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcdFx0XHRcdCAgICAgIGV4dGFjaywgSUNFX0RQTExfUElOX1RZUEVfSU5QVVQpO1xuIH1cbiBcbi0vKipcbi0gKiBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIgLSBub3RpZnkgdGhlIHBhaXJlZCBTVyBwaW4gYWZ0ZXIgYSBzdGF0ZSBjaGFuZ2Vcbi0gKiBAZDogcG9pbnRlciB0byBkcGxscyBzdHJ1Y3Rcbi0gKiBAY2hhbmdlZDogdGhlIFNXIHBpbiB0aGF0IHdhcyBleHBsaWNpdGx5IGNoYW5nZWQgKGFscmVhZHkgbm90aWZpZWQgYnkgZHBsbCBjb3JlKVxuLSAqXG4tICogU01BIGFuZCBVLkZMIHBpbnMgc2hhcmUgcGh5c2ljYWwgc2lnbmFsIHBhdGhzIGluIHBhaXJzIChTTUExL1UuRkwxIGFuZFxuLSAqIFNNQTIvVS5GTDIpLiAgV2hlbiBvbmUgcGluJiMzOTtzIHJvdXRpbmcgY2hhbmdlcyB2aWEgdGhlIFBDQTk1NzUgR1BJT1xuLSAqIGV4cGFuZGVyLCB0aGUgcGFpcmVkIHBpbiYjMzk7cyBzdGF0ZSBtYXkgYWxzbyBjaGFuZ2UuICBTZW5kIGEgY2hhbmdlXG4tICogbm90aWZpY2F0aW9uIGZvciB0aGUgcGVlciBwaW4gc28gdXNlcnNwYWNlIGNvbnN1bWVycyBtb25pdG9yaW5nIHRoZVxuLSAqIHBlZXIgdmlhIGRwbGwgbmV0bGluayBsZWFybiBhYm91dCB0aGUgdXBkYXRlLlxuLSAqXG4tICogQ29udGV4dDogQ2FsbGVkIGZyb20gZHBsbF9waW5fb3BzIGNhbGxiYWNrcyBhZnRlciBwZi1cdTAwM2VkcGxscy5sb2NrIGlzXG4tICogICAgICAgICAgcmVsZWFzZWQuICBVc2VzIF9fZHBsbF9waW5fY2hhbmdlX250ZigpIGJlY2F1c2UgZHBsbF9sb2NrIGlzXG4tICogICAgICAgICAgc3RpbGwgaGVsZCBieSB0aGUgZHBsbCBuZXRsaW5rIGxheWVyLlxuLSAqL1xuLXN0YXRpYyB2b2lkIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihzdHJ1Y3QgaWNlX2RwbGxzICpkLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpjaGFuZ2VkKVxuJiM0MztzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyB7XG4mIzQzO1x0Ym9vbCBlbmFibGVkO1xuJiM0MztcdHU4IGRwbGxfaWR4O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0MztpY2VfZHBsbF9waW5fY29uZmlnX2dldChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqdGFyZ2V0LFxuJiM0MztcdFx0XHRlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGUsXG4mIzQzO1x0XHRcdHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnICpjb25maWcsXG4mIzQzO1x0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4tXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyO1xuJiM0MztcdGludCByZXQ7XG4gXG4tXHRwZWVyID0gKGNoYW5nZWQgXHUwMDNlPSBkLVx1MDAzZXNtYSBcdTAwMjZcdTAwMjYgY2hhbmdlZCBcdTAwM2MgZC1cdTAwM2VzbWEgJiM0MzsgSUNFX0RQTExfUElOX1NXX05VTSkgP1xuLVx0XHRcdTAwMjZkLVx1MDAzZXVmbFtjaGFuZ2VkLVx1MDAzZWlkeF0gOiBcdTAwMjZkLVx1MDAzZXNtYVtjaGFuZ2VkLVx1MDAzZWlkeF07XG4tXHRpZiAocGVlci1cdTAwM2VwaW4pXG4tXHRcdF9fZHBsbF9waW5fY2hhbmdlX250ZihwZWVyLVx1MDAzZXBpbik7XG4mIzQzO1x0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHR5cGUpIHtcbiYjNDM7XHRjYXNlIElDRV9EUExMX1BJTl9UWVBFX0lOUFVUOlxuJiM0MztcdFx0Y29uZmlnLVx1MDAzZWVuYWJsZWQgPSB0YXJnZXQtXHUwMDNlZmxhZ3NbMF0gXHUwMDI2XG4mIzQzO1x0XHRcdFx0ICBJQ0VfQVFDX0dFVF9DR1VfSU5fQ0ZHX0ZMRzJfSU5QVVRfRU47XG4mIzQzO1x0XHRjb25maWctXHUwMDNlZHBsbF9pZHggPSAwO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0Y2FzZSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ6XG4mIzQzO1x0XHRjb25maWctXHUwMDNlZW5hYmxlZCA9IHRhcmdldC1cdTAwM2VmbGFnc1swXSBcdTAwMjZcbiYjNDM7XHRcdFx0XHQgIElDRV9BUUNfR0VUX0NHVV9PVVRfQ0ZHX09VVF9FTjtcbiYjNDM7XHRcdGlmICghY29uZmlnLVx1MDAzZWVuYWJsZWQpIHtcbiYjNDM7XHRcdFx0Y29uZmlnLVx1MDAzZWRwbGxfaWR4ID0gMDtcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gaWNlX2RwbGxfZ2V0X2ZhbGxiYWNrX2lkeChcdTAwMjZwZi1cdTAwM2VkcGxscywgdGFyZ2V0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRjb25maWctXHUwMDNlZHBsbF9pZHggPSByZXQ7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO2ljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqdGFyZ2V0LFxuJiM0MztcdFx0XHQgICAgZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlLFxuJiM0MztcdFx0XHQgICAgY29uc3Qgc3RydWN0IGljZV9kcGxsX3Bpbl9jb25maWcgKmNvbmZpZyxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaywgaW50IGluaXRfZXJyKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJlc3RvcmVfZXJyLCB1cGRhdGVfZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoY29uZmlnLVx1MDAzZWVuYWJsZWQpXG4mIzQzO1x0XHRyZXN0b3JlX2VyciA9IGljZV9kcGxsX3Bpbl9lbmFibGUoXHUwMDI2cGYtXHUwMDNlaHcsIHRhcmdldCxcbiYjNDM7XHRcdFx0XHRcdFx0ICBjb25maWctXHUwMDNlZHBsbF9pZHgsIHR5cGUsIGV4dGFjayk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmVzdG9yZV9lcnIgPSBpY2VfZHBsbF9waW5fZGlzYWJsZShcdTAwMjZwZi1cdTAwM2VodywgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuJiM0MztcdHVwZGF0ZV9lcnIgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4mIzQzO1x0aWYgKHJlc3RvcmVfZXJyIHx8IHVwZGF0ZV9lcnIpIHtcbiYjNDM7XHRcdGRldl93YXJuKGljZV9wZl90b19kZXYocGYpLFxuJiM0MztcdFx0XHQgXCYjMzQ7RmFpbGVkIHRvIHJvbGxiYWNrIHBpbiBzdGF0ZTogZXJyICVkLCByZXN0b3JlIGVyciAlZCwgdXBkYXRlIGVyciAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0IGluaXRfZXJyLCByZXN0b3JlX2VyciwgdXBkYXRlX2Vycik7XG4mIzQzO1x0XHRyZXR1cm4gcmVzdG9yZV9lcnIgPyByZXN0b3JlX2VyciA6IHVwZGF0ZV9lcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBpY2VfZHBsbF9yZXN0b3JlX3NtYV9jdHJsKHN0cnVjdCBpY2VfcGYgKnBmLCB1OCBvbGRfZGF0YSxcbiYjNDM7XHRcdFx0XHQgICAgIGludCBpbml0X2VycilcbiYjNDM7e1xuJiM0MztcdGludCByZXN0b3JlX2VycjtcbiYjNDM7XG4mIzQzO1x0cmVzdG9yZV9lcnIgPSBpY2Vfd3JpdGVfc21hX2N0cmwoXHUwMDI2cGYtXHUwMDNlaHcsIG9sZF9kYXRhKTtcbiYjNDM7XHRpZiAoIXJlc3RvcmVfZXJyKVxuJiM0MztcdFx0cmVzdG9yZV9lcnIgPSBpY2VfZHBsbF9zd19waW5zX3VwZGF0ZShwZik7XG4mIzQzO1x0aWYgKHJlc3RvcmVfZXJyKVxuJiM0MztcdFx0ZGV2X3dhcm4oaWNlX3BmX3RvX2RldihwZiksXG4mIzQzO1x0XHRcdCBcJiMzNDtGYWlsZWQgdG8gcmVzdG9yZSBTTUEgY29udHJvbDogZXJyICVkLCByZXN0b3JlIGVyciAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0IGluaXRfZXJyLCByZXN0b3JlX2Vycik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXN0b3JlX2VycjtcbiB9XG4gXG4gLyoqXG5AQCAtMTIwNiwzMCAmIzQzOzEzNDAsMzkgQEAgc3RhdGljIGludCBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwLFxuIFx0XHRcdFx0ICAgICAgZW51bSBkcGxsX3Bpbl9kaXJlY3Rpb24gZGlyZWN0aW9uLFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyBwZWVyX2NvbmZpZztcbiBcdHN0cnVjdCBpY2VfZHBsbHMgKmQgPSBcdTAwMjZwLVx1MDAzZXBmLVx1MDAzZWRwbGxzO1xuJiM0MztcdGludCBwZWVyX2RwbGxfaWR4LCByZXN0b3JlX2VyciwgcmV0O1xuJiM0MztcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnRhcmdldCA9IE5VTEw7XG4mIzQzO1x0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlID0gMDtcbiBcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXI7XG4tXHR1OCBkYXRhO1xuLVx0aW50IHJldDtcbiYjNDM7XHR1OCBkYXRhLCBvbGRfZGF0YSA9IDA7XG4gXG4gXHRpZiAocC1cdTAwM2VkaXJlY3Rpb24gPT0gZGlyZWN0aW9uIFx1MDAyNlx1MDAyNiBwLVx1MDAzZWFjdGl2ZSlcbiBcdFx0cmV0dXJuIDA7XG4gXHRyZXQgPSBpY2VfcmVhZF9zbWFfY3RybChcdTAwMjZwLVx1MDAzZXBmLVx1MDAzZWh3LCBcdTAwMjZkYXRhKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0b2xkX2RhdGEgPSBkYXRhO1xuIFxuIFx0c3dpdGNoIChwLVx1MDAzZWlkeCkge1xuIFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFg6XG4tXHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTFfTUFTSztcbi1cdFx0aWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKVxuJiM0MztcdFx0aWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKSB7XG4mIzQzO1x0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTFfVFhfRU47XG4gXHRcdFx0ZGF0YSB8PSBJQ0VfU01BMV9ESVJfRU47XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUExX0RJUl9FTjtcbiYjNDM7XHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMV9UWF9FTjtcbiYjNDM7XHRcdH1cbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElDRV9EUExMX1BJTl9TV18yX0lEWDpcbiBcdFx0aWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQpIHtcbiBcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUEyX0RJUl9FTjtcbi1cdFx0XHRkYXRhIHw9IElDRV9TTUEyX1VGTDJfUlhfRElTO1xuJiM0MztcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUEyX1RYX0VOO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdGRhdGEgXHUwMDI2PSB+KElDRV9TTUEyX1RYX0VOIHwgSUNFX1NNQTJfVUZMMl9SWF9ESVMpO1xuIFx0XHRcdGRhdGEgfD0gSUNFX1NNQTJfRElSX0VOO1xuJiM0MztcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUEyX1VGTDJfUlhfRElTO1xuJiM0MztcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUEyX1RYX0VOO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbkBAIC0xMjQxLDcgJiM0MzsxMzg0LDcgQEAgc3RhdGljIGludCBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwLFxuIFx0XHRcdFx0XHRcdElDRV9EUExMX1BJTl9UWVBFX1NPRlRXQVJFLFxuIFx0XHRcdFx0XHRcdGV4dGFjayk7XG4gXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0Z290byByZXN0b3JlX3NtYTtcbiBcbiBcdC8qIFdoZW4gYSBkaXJlY3Rpb24gY2hhbmdlIGFjdGl2YXRlcyB0aGUgcGFpcmVkIFUuRkwgcGluLCBlbmFibGVcbiBcdCAqIGl0cyBiYWNraW5nIENHVSBwaW4gc28gdGhlIHBpbiByZXBvcnRzIGFzIGNvbm5lY3RlZC4gV2l0aG91dFxuQEAgLTEyNTAsMjUgJiM0MzsxMzkzLDQ2IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQoc3RydWN0IGljZV9kcGxsX3BpbiAqcCxcbiBcdCAqIGJhY2tpbmcgcGluIHdoZW4gVS5GTCBiZWNvbWVzIGluYWN0aXZlIGJlY2F1c2UgdGhlIFNNQSBwaW4gbWF5XG4gXHQgKiBzdGlsbCBiZSB1c2luZyBpdC5cbiBcdCAqL1xuLVx0cGVlciA9IFx1MDAyNmQtXHUwMDNldWZsW3AtXHUwMDNlaWR4XTtcbiYjNDM7XHRwZWVyID0gcC1cdTAwM2VtdXhlZDtcbiBcdGlmIChwZWVyLVx1MDAzZWFjdGl2ZSkge1xuLVx0XHRzdHJ1Y3QgaWNlX2RwbGxfcGluICp0YXJnZXQ7XG4tXHRcdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZTtcbi1cbiBcdFx0aWYgKHBlZXItXHUwMDNlb3V0cHV0KSB7XG4gXHRcdFx0dGFyZ2V0ID0gcGVlci1cdTAwM2VvdXRwdXQ7XG4gXHRcdFx0dHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDtcbi1cdFx0fSBlbHNlIHtcbiYjNDM7XHRcdH0gZWxzZSBpZiAocGVlci1cdTAwM2VpbnB1dCkge1xuIFx0XHRcdHRhcmdldCA9IHBlZXItXHUwMDNlaW5wdXQ7XG4gXHRcdFx0dHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX0lOUFVUO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdFx0Z290byByZXN0b3JlX3NtYTtcbiBcdFx0fVxuLVx0XHRyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKFx1MDAyNnAtXHUwMDNlcGYtXHUwMDNlaHcsIHRhcmdldCxcbi1cdFx0XHRcdFx0ICBkLVx1MDAzZWVlYy5kcGxsX2lkeCwgdHlwZSwgZXh0YWNrKTtcbi1cdFx0aWYgKCFyZXQpXG4tXHRcdFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwLVx1MDAzZXBmLCB0YXJnZXQsXG4tXHRcdFx0XHRcdFx0XHR0eXBlLCBleHRhY2spO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHAtXHUwMDNlcGYsIHRhcmdldCwgdHlwZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIFx1MDAyNnBlZXJfY29uZmlnLCBleHRhY2spO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byByZXN0b3JlX3NtYTtcbiYjNDM7XG4mIzQzO1x0XHRwZWVyX2RwbGxfaWR4ID0gaWNlX2RwbGxfZ2V0X2ZhbGxiYWNrX2lkeChkLCB0YXJnZXQpO1xuJiM0MztcdFx0aWYgKHBlZXJfZHBsbF9pZHggXHUwMDNjIDApXG4mIzQzO1x0XHRcdHBlZXJfZHBsbF9pZHggPSBkLVx1MDAzZWVlYy5kcGxsX2lkeDtcbiYjNDM7XHRcdHJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoXHUwMDI2cC1cdTAwM2VwZi1cdTAwM2VodywgdGFyZ2V0LCBwZWVyX2RwbGxfaWR4LFxuJiM0MztcdFx0XHRcdFx0ICB0eXBlLCBleHRhY2spO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byByZXN0b3JlX3BlZXI7XG4mIzQzO1x0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHAtXHUwMDNlcGYsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gcmVzdG9yZV9wZWVyO1xuIFx0fVxuIFxuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7cmVzdG9yZV9wZWVyOlxuJiM0MztcdHJlc3RvcmVfZXJyID1cbiYjNDM7XHRcdGljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShwLVx1MDAzZXBmLCB0YXJnZXQsIHR5cGUsIFx1MDAyNnBlZXJfY29uZmlnLFxuJiM0MztcdFx0XHRcdFx0ICAgIGV4dGFjaywgcmV0KTtcbiYjNDM7XHRpZiAocmVzdG9yZV9lcnIpXG4mIzQzO1x0XHRyZXQgPSByZXN0b3JlX2VycjtcbiYjNDM7cmVzdG9yZV9zbWE6XG4mIzQzO1x0aWNlX2RwbGxfcmVzdG9yZV9zbWFfY3RybChwLVx1MDAzZXBmLCBvbGRfZGF0YSwgcmV0KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTEyOTQsMTQgJiM0MzsxNDU4LDE4IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcdFx0XHQgICBlbnVtIGRwbGxfcGluX3N0YXRlIHN0YXRlLFxuIFx0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4mIzQzO1x0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSBwZWVyX3R5cGUgPSAwLCB0eXBlO1xuIFx0c3RydWN0IGljZV9kcGxsX3BpbiAqcCA9IHBpbl9wcml2LCAqdGFyZ2V0O1xuJiM0MztcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXJfdGFyZ2V0ID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyBwZWVyX2NvbmZpZztcbiYjNDM7XHRzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyBvbGRfY29uZmlnO1xuJiM0MztcdGludCBwZWVyX2RwbGxfaWR4LCByZXN0b3JlX2VyciwgcmV0O1xuIFx0c3RydWN0IGljZV9kcGxsICpkID0gZHBsbF9wcml2O1xuLVx0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlO1xuIFx0c3RydWN0IGljZV9wZiAqcGYgPSBwLVx1MDAzZXBmO1xuIFx0c3RydWN0IGljZV9odyAqaHc7XG4mIzQzO1x0dTggb2xkX2RhdGEgPSAwO1xuIFx0Ym9vbCBlbmFibGU7XG4gXHR1OCBkYXRhO1xuLVx0aW50IHJldDtcbiBcbiBcdGlmIChpY2VfZHBsbF9pc19yZXNldChwZiwgZXh0YWNrKSlcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbkBAIC0xMzExLDE0ICYjNDM7MTQ3OSwxNyBAQCBpY2VfZHBsbF91ZmxfcGluX3N0YXRlX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXG4gXHRyZXQgPSBpY2VfcmVhZF9zbWFfY3RybChodywgXHUwMDI2ZGF0YSk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRvbGRfZGF0YSA9IGRhdGE7XG4gXG4gXHRyZXQgPSAtRUlOVkFMO1xuIFx0c3dpdGNoIChwLVx1MDAzZWlkeCkge1xuIFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFg6XG4tXHRcdGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQpIHtcbiYjNDM7XHRcdHN3aXRjaCAoc3RhdGUpIHtcbiYjNDM7XHRcdGNhc2UgRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEOlxuIFx0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTFfTUFTSztcbiBcdFx0XHRlbmFibGUgPSB0cnVlO1xuLVx0XHR9IGVsc2UgaWYgKHN0YXRlID09IERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRCkge1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOlxuIFx0XHRcdC8qIFNraXAgaWYgVS5GTDEgaXMgbm90IGFjdGl2ZSwgc2V0dGluZyBUWF9FTlxuIFx0XHRcdCAqIHdoaWxlIERJUl9FTiBpcyBzZXQgd291bGQgYWxzbyBkZWFjdGl2YXRlXG4gXHRcdFx0ICogdGhlIHBhaXJlZCBTTUExIG91dHB1dC5cbkBAIC0xMzI5LDE4ICYjNDM7MTUwMCwyMSBAQCBpY2VfZHBsbF91ZmxfcGluX3N0YXRlX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXG4gXHRcdFx0fVxuIFx0XHRcdGRhdGEgfD0gSUNFX1NNQTFfVFhfRU47XG4gXHRcdFx0ZW5hYmxlID0gZmFsc2U7XG4tXHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0ZGVmYXVsdDpcbiBcdFx0XHRnb3RvIHVubG9jaztcbiBcdFx0fVxuIFx0XHR0YXJnZXQgPSBwLVx1MDAzZW91dHB1dDtcbiBcdFx0dHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElDRV9EUExMX1BJTl9TV18yX0lEWDpcbi1cdFx0aWYgKHN0YXRlID09IERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEUpIHtcbiYjNDM7XHRcdHN3aXRjaCAoc3RhdGUpIHtcbiYjNDM7XHRcdGNhc2UgRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTpcbiBcdFx0XHRkYXRhIHw9IElDRV9TTUEyX0RJUl9FTjtcbiBcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUEyX1VGTDJfUlhfRElTO1xuIFx0XHRcdGVuYWJsZSA9IHRydWU7XG4tXHRcdH0gZWxzZSBpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEKSB7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ6XG4gXHRcdFx0LyogU2tpcCBpZiBVLkZMMiBpcyBub3QgYWN0aXZlLCBzZXR0aW5nXG4gXHRcdFx0ICogVUZMMl9SWF9ESVMgY291bGQgYWxzbyBkaXNhYmxlIHRoZSBwYWlyZWRcbiBcdFx0XHQgKiBTTUEyIGlucHV0LlxuQEAgLTEzNTIsNyAmIzQzOzE1MjYsOCBAQCBpY2VfZHBsbF91ZmxfcGluX3N0YXRlX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXG4gXHRcdFx0fVxuIFx0XHRcdGRhdGEgfD0gSUNFX1NNQTJfVUZMMl9SWF9ESVM7XG4gXHRcdFx0ZW5hYmxlID0gZmFsc2U7XG4tXHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0ZGVmYXVsdDpcbiBcdFx0XHRnb3RvIHVubG9jaztcbiBcdFx0fVxuIFx0XHR0YXJnZXQgPSBwLVx1MDAzZWlucHV0O1xuQEAgLTEzNjQsMjMgJiM0MzsxNTM5LDc0IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcbiBcdHJldCA9IGljZV93cml0ZV9zbWFfY3RybChodywgZGF0YSk7XG4gXHRpZiAocmV0KVxuLVx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdGdvdG8gcmVzdG9yZV9zbWFfY3RybDtcbiBcdHJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHAsIElDRV9EUExMX1BJTl9UWVBFX1NPRlRXQVJFLFxuIFx0XHRcdFx0XHRleHRhY2spO1xuIFx0aWYgKHJldClcbi1cdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XG4mIzQzO1xuJiM0MztcdHJldCA9IGljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHBmLCB0YXJnZXQsIHR5cGUsIFx1MDAyNm9sZF9jb25maWcsIGV4dGFjayk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gcmVzdG9yZV9zbWFfY3RybDtcbiBcbiBcdGlmIChlbmFibGUpXG4gXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoaHcsIHRhcmdldCwgZC1cdTAwM2VkcGxsX2lkeCwgdHlwZSwgZXh0YWNrKTtcbiBcdGVsc2VcbiBcdFx0cmV0ID0gaWNlX2RwbGxfcGluX2Rpc2FibGUoaHcsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcbi1cdGlmICghcmV0KVxuLVx0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gcmVzdG9yZV90YXJnZXQ7XG4mIzQzO1x0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xuJiM0MztcbiYjNDM7XHRpZiAoZW5hYmxlIFx1MDAyNlx1MDAyNiBwLVx1MDAzZW11eGVkIFx1MDAyNlx1MDAyNiBwLVx1MDAzZW11eGVkLVx1MDAzZWFjdGl2ZSkge1xuJiM0MztcdFx0aWNlX2RwbGxfZ2V0X3BlZXJfdGFyZ2V0KHAtXHUwMDNlbXV4ZWQsIFx1MDAyNnBlZXJfdGFyZ2V0LCBcdTAwMjZwZWVyX3R5cGUpO1xuJiM0MztcdFx0aWYgKCFwZWVyX3RhcmdldCkge1xuJiM0MztcdFx0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cmV0ID0gaWNlX2RwbGxfcGluX2NvbmZpZ19nZXQocGYsIHBlZXJfdGFyZ2V0LCBwZWVyX3R5cGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBcdTAwMjZwZWVyX2NvbmZpZywgZXh0YWNrKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gcmVzdG9yZV90YXJnZXQ7XG4mIzQzO1xuJiM0MztcdFx0cGVlcl9kcGxsX2lkeCA9IGljZV9kcGxsX2dldF9mYWxsYmFja19pZHgoXHUwMDI2cGYtXHUwMDNlZHBsbHMsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICBwZWVyX3RhcmdldCk7XG4mIzQzO1x0XHRpZiAocGVlcl9kcGxsX2lkeCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cGVlcl9kcGxsX2lkeCA9IGQtXHUwMDNlZHBsbF9pZHg7XG4mIzQzO1x0XHRyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKFx1MDAyNnBmLVx1MDAzZWh3LCBwZWVyX3RhcmdldCwgcGVlcl9kcGxsX2lkeCxcbiYjNDM7XHRcdFx0XHRcdCAgcGVlcl90eXBlLCBleHRhY2spO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byByZXN0b3JlX3BlZXI7XG4mIzQzO1x0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLFxuJiM0MztcdFx0XHRcdFx0XHRleHRhY2spO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byByZXN0b3JlX3BlZXI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRnb3RvIHVubG9jaztcbiYjNDM7XG4mIzQzO3Jlc3RvcmVfcGVlcjpcbiYjNDM7XHRyZXN0b3JlX2VyciA9XG4mIzQzO1x0XHRpY2VfZHBsbF9waW5fY29uZmlnX3Jlc3RvcmUocGYsIHBlZXJfdGFyZ2V0LCBwZWVyX3R5cGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgXHUwMDI2cGVlcl9jb25maWcsIGV4dGFjaywgcmV0KTtcbiYjNDM7XHRpZiAocmVzdG9yZV9lcnIpXG4mIzQzO1x0XHRyZXQgPSByZXN0b3JlX2VycjtcbiYjNDM7cmVzdG9yZV90YXJnZXQ6XG4mIzQzO1x0cmVzdG9yZV9lcnIgPVxuJiM0MztcdFx0aWNlX2RwbGxfcGluX2NvbmZpZ19yZXN0b3JlKHBmLCB0YXJnZXQsIHR5cGUsIFx1MDAyNm9sZF9jb25maWcsXG4mIzQzO1x0XHRcdFx0XHQgICAgZXh0YWNrLCByZXQpO1xuJiM0MztcdGlmIChyZXN0b3JlX2VycilcbiYjNDM7XHRcdHJldCA9IHJlc3RvcmVfZXJyO1xuJiM0MztyZXN0b3JlX3NtYV9jdHJsOlxuJiM0MztcdHJlc3RvcmVfZXJyID0gaWNlX2RwbGxfcmVzdG9yZV9zbWFfY3RybChwZiwgb2xkX2RhdGEsIHJldCk7XG4mIzQzO1x0aWYgKHJlc3RvcmVfZXJyKVxuJiM0MztcdFx0cmV0ID0gcmVzdG9yZV9lcnI7XG4gXG4gdW5sb2NrOlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBmLVx1MDAzZWRwbGxzLmxvY2spO1xuIFx0aWYgKCFyZXQpXG4tXHRcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihcdTAwMjZwZi1cdTAwM2VkcGxscywgcCk7XG4mIzQzO1x0XHRpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIocCk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC0xNDYzLDQ0ICYjNDM7MTY4OSwxNjggQEAgaWNlX2RwbGxfc21hX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0XHRcdCAgIGVudW0gZHBsbF9waW5fc3RhdGUgc3RhdGUsXG4gXHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiYjNDM7XHRpbnQgcGVlcl9kcGxsX2lkeCwgcmVzdG9yZV9lcnIsIHJldCA9IC1FSU5WQUw7XG4gXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpzbWEgPSBwaW5fcHJpdiwgKnRhcmdldDtcbiYjNDM7XHRlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHBlZXJfdHlwZSA9IDAsIHR5cGU7XG4mIzQzO1x0c3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcl90YXJnZXQgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIHBlZXJfY29uZmlnO1xuJiM0MztcdHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIG9sZF9jb25maWc7XG4gXHRzdHJ1Y3QgaWNlX2RwbGwgKmQgPSBkcGxsX3ByaXY7XG4gXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHNtYS1cdTAwM2VwZjtcbi1cdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZTtcbiYjNDM7XHR1OCBvbGRfZGF0YSA9IDA7XG4gXHRib29sIGVuYWJsZTtcbi1cdGludCByZXQ7XG4gXG4gXHRpZiAoaWNlX2RwbGxfaXNfcmVzZXQocGYsIGV4dGFjaykpXG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnBmLVx1MDAzZWRwbGxzLmxvY2spO1xuLVx0aWYgKCFzbWEtXHUwMDNlYWN0aXZlKSB7XG4tXHRcdHJldCA9IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHNtYSwgc21hLVx1MDAzZWRpcmVjdGlvbiwgZXh0YWNrKTtcbi1cdFx0aWYgKHJldClcbiYjNDM7XHRzd2l0Y2ggKHN0YXRlKSB7XG4mIzQzO1x0Y2FzZSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOlxuJiM0MztcdFx0LyogUmVqZWN0IGRpcmVjdGlvbi1taXNtYXRjaGVkIHJlcXVlc3RzOiBTRUxFQ1RBQkxFICYjNDM7IE9VVFBVVFxuJiM0MztcdFx0ICogaXMgYW4gaW52YWxpZCBjb21iaW5hdGlvbiwgcmV0dXJuIC1FSU5WQUwgaW4gdGhpcyBjYXNlXG4mIzQzO1x0XHQgKiBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIGRpc2FibGluZyB0aGUgcGluLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoc21hLVx1MDAzZWRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKSB7XG4mIzQzO1x0XHRcdGVuYWJsZSA9IGZhbHNlO1xuJiM0MztcdFx0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGVuYWJsZSA9IHRydWU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDpcbiYjNDM7XHRcdC8qIFJlamVjdCBkaXJlY3Rpb24tbWlzbWF0Y2hlZCByZXF1ZXN0czogQ09OTkVDVEVEICYjNDM7IElOUFVUXG4mIzQzO1x0XHQgKiBpcyBhbiBpbnZhbGlkIGNvbWJpbmF0aW9uLCByZXR1cm4gLUVJTlZBTCBpbiB0aGlzIGNhc2VcbiYjNDM7XHRcdCAqIGltbWVkaWF0ZWx5IGluc3RlYWQgb2YgZGlzYWJsaW5nIHRoZSBwaW4uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChzbWEtXHUwMDNlZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9JTlBVVCkge1xuJiM0MztcdFx0XHRlbmFibGUgPSBmYWxzZTtcbiYjNDM7XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGVuYWJsZSA9IHRydWU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDpcbiYjNDM7XHRcdGVuYWJsZSA9IGZhbHNlO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiBcdH1cbi1cdGlmIChzbWEtXHUwMDNlZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9JTlBVVCkge1xuLVx0XHRlbmFibGUgPSBzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHNtYS1cdTAwM2VkaXJlY3Rpb24pIHtcbiYjNDM7XHRjYXNlIERQTExfUElOX0RJUkVDVElPTl9JTlBVVDpcbiBcdFx0dGFyZ2V0ID0gc21hLVx1MDAzZWlucHV0O1xuIFx0XHR0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfSU5QVVQ7XG4tXHR9IGVsc2Uge1xuLVx0XHRlbmFibGUgPSBzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQ6XG4gXHRcdHRhcmdldCA9IHNtYS1cdTAwM2VvdXRwdXQ7XG4gXHRcdHR5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuIFx0fVxuIFxuLVx0aWYgKGVuYWJsZSlcbiYjNDM7XHRpZiAoIXNtYS1cdTAwM2VhY3RpdmUpIHtcbiYjNDM7XHRcdHJldCA9IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHNtYSwgc21hLVx1MDAzZWRpcmVjdGlvbiwgZXh0YWNrKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGVuYWJsZSkge1xuJiM0MztcdFx0dTggZGF0YTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBpY2VfcmVhZF9zbWFfY3RybChcdTAwMjZwZi1cdTAwM2VodywgXHUwMDI2ZGF0YSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdG9sZF9kYXRhID0gZGF0YTtcbiYjNDM7XHRcdHN3aXRjaCAoc21hLVx1MDAzZWlkeCkge1xuJiM0MztcdFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFg6XG4mIzQzO1x0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTFfVFhfRU47XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFg6XG4mIzQzO1x0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTJfVUZMMl9SWF9ESVM7XG4mIzQzO1x0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTJfVFhfRU47XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXQgPSBpY2Vfd3JpdGVfc21hX2N0cmwoXHUwMDI2cGYtXHUwMDNlaHcsIGRhdGEpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byByZXN0b3JlX3NtYV9jdHJsO1xuJiM0MztcdFx0cmV0ID0gaWNlX2RwbGxfc3dfcGluc191cGRhdGUocGYpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byByZXN0b3JlX3NtYV9jdHJsO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHBmLCB0YXJnZXQsIHR5cGUsIFx1MDAyNm9sZF9jb25maWcsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBleHRhY2spO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byByZXN0b3JlX3NtYV9jdHJsO1xuIFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKFx1MDAyNnBmLVx1MDAzZWh3LCB0YXJnZXQsIGQtXHUwMDNlZHBsbF9pZHgsIHR5cGUsXG4gXHRcdFx0XHRcdCAgZXh0YWNrKTtcbi1cdGVsc2Vcbi1cdFx0cmV0ID0gaWNlX2RwbGxfcGluX2Rpc2FibGUoXHUwMDI2cGYtXHUwMDNlaHcsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcbi1cdGlmICghcmV0KVxuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byByZXN0b3JlX3RhcmdldDtcbiYjNDM7XHRcdC8qIFJlZnJlc2ggdGFyZ2V0IHN0YXRlIGJlZm9yZSBwZWVyLXNpZGUgb3BlcmF0aW9ucy4gKi9cbiBcdFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byByZXN0b3JlX3RhcmdldDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc21hLVx1MDAzZW11eGVkIFx1MDAyNlx1MDAyNiBzbWEtXHUwMDNlbXV4ZWQtXHUwMDNlYWN0aXZlKSB7XG4mIzQzO1x0XHRcdGljZV9kcGxsX2dldF9wZWVyX3RhcmdldChzbWEtXHUwMDNlbXV4ZWQsIFx1MDAyNnBlZXJfdGFyZ2V0LFxuJiM0MztcdFx0XHRcdFx0XHQgXHUwMDI2cGVlcl90eXBlKTtcbiYjNDM7XHRcdFx0aWYgKCFwZWVyX3RhcmdldCkge1xuJiM0MztcdFx0XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdFx0Z290byByZXN0b3JlX3RhcmdldDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0gaWNlX2RwbGxfcGluX2NvbmZpZ19nZXQocGYsIHBlZXJfdGFyZ2V0LCBwZWVyX3R5cGUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIFx1MDAyNnBlZXJfY29uZmlnLCBleHRhY2spO1xuJiM0MztcdFx0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRcdGdvdG8gcmVzdG9yZV90YXJnZXQ7XG4mIzQzO1xuJiM0MztcdFx0XHRwZWVyX2RwbGxfaWR4ID1cbiYjNDM7XHRcdFx0XHRpY2VfZHBsbF9nZXRfZmFsbGJhY2tfaWR4KFx1MDAyNnBmLVx1MDAzZWRwbGxzLCBwZWVyX3RhcmdldCk7XG4mIzQzO1x0XHRcdGlmIChwZWVyX2RwbGxfaWR4IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdHBlZXJfZHBsbF9pZHggPSBkLVx1MDAzZWRwbGxfaWR4O1xuJiM0MztcdFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKFx1MDAyNnBmLVx1MDAzZWh3LCBwZWVyX3RhcmdldCxcbiYjNDM7XHRcdFx0XHRcdFx0ICBwZWVyX2RwbGxfaWR4LCBwZWVyX3R5cGUsIGV4dGFjayk7XG4mIzQzO1x0XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdFx0Z290byByZXN0b3JlX3BlZXI7XG4mIzQzO1x0XHRcdHJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHBlZXJfdGFyZ2V0LCBwZWVyX3R5cGUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ZXh0YWNrKTtcbiYjNDM7XHRcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0XHRnb3RvIHJlc3RvcmVfcGVlcjtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmV0ID0gaWNlX2RwbGxfcGluX2Rpc2FibGUoXHUwMDI2cGYtXHUwMDNlaHcsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcbiYjNDM7XHRcdGlmICghcmV0KVxuJiM0MztcdFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ZXh0YWNrKTtcbiYjNDM7XHR9XG4mIzQzO1x0Z290byB1bmxvY2s7XG4mIzQzO1xuJiM0MztyZXN0b3JlX3BlZXI6XG4mIzQzO1x0cmVzdG9yZV9lcnIgPVxuJiM0MztcdFx0aWNlX2RwbGxfcGluX2NvbmZpZ19yZXN0b3JlKHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLFxuJiM0MztcdFx0XHRcdFx0ICAgIFx1MDAyNnBlZXJfY29uZmlnLCBleHRhY2ssIHJldCk7XG4mIzQzO1x0aWYgKHJlc3RvcmVfZXJyKVxuJiM0MztcdFx0cmV0ID0gcmVzdG9yZV9lcnI7XG4mIzQzO3Jlc3RvcmVfdGFyZ2V0OlxuJiM0MztcdHJlc3RvcmVfZXJyID1cbiYjNDM7XHRcdGljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShwZiwgdGFyZ2V0LCB0eXBlLCBcdTAwMjZvbGRfY29uZmlnLFxuJiM0MztcdFx0XHRcdFx0ICAgIGV4dGFjaywgcmV0KTtcbiYjNDM7XHRpZiAocmVzdG9yZV9lcnIpXG4mIzQzO1x0XHRyZXQgPSByZXN0b3JlX2VycjtcbiYjNDM7cmVzdG9yZV9zbWFfY3RybDpcbiYjNDM7XHRyZXN0b3JlX2VyciA9IGljZV9kcGxsX3Jlc3RvcmVfc21hX2N0cmwocGYsIG9sZF9kYXRhLCByZXQpO1xuJiM0MztcdGlmIChyZXN0b3JlX2VycilcbiYjNDM7XHRcdHJldCA9IHJlc3RvcmVfZXJyO1xuIFxuIHVubG9jazpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZwZi1cdTAwM2VkcGxscy5sb2NrKTtcbiBcdGlmICghcmV0KVxuLVx0XHRpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoXHUwMDI2cGYtXHUwMDNlZHBsbHMsIHNtYSk7XG4mIzQzO1x0XHRpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoc21hKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTE2OTcsNyAmIzQzOzIwNDcsNyBAQCBpY2VfZHBsbF9waW5fc21hX2RpcmVjdGlvbl9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0cmV0ID0gaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQocCwgZGlyZWN0aW9uLCBleHRhY2spO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBmLVx1MDAzZWRwbGxzLmxvY2spO1xuIFx0aWYgKCFyZXQpXG4tXHRcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihcdTAwMjZwZi1cdTAwM2VkcGxscywgcCk7XG4mIzQzO1x0XHRpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIocCk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC00NTE5LDYgJiM0Mzs0ODY5LDggQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdFx0aWYgKHBpbi1cdTAwM2VpbnB1dC1cdTAwM2VyZWZfc3luYylcbiBcdFx0XHRwaW4tXHUwMDNlcmVmX3N5bmMgPSBwaW4tXHUwMDNlaW5wdXQtXHUwMDNlcmVmX3N5bmMgLSBwaW5fYWJzX2lkeDtcbiBcdFx0cGluLVx1MDAzZW91dHB1dCA9IFx1MDAyNmQtXHUwMDNlb3V0cHV0c1tJQ0VfRFBMTF9QSU5fU1dfT1VUUFVUX0FCUyhpKV07XG4mIzQzO1x0XHRwaW4tXHUwMDNlbXV4ZWQgPSBcdTAwMjZkLVx1MDAzZXVmbFtpXTtcbiYjNDM7XG4gXHRcdGljZV9kcGxsX3BoYXNlX3JhbmdlX3NldChcdTAwMjZwaW4tXHUwMDNlcHJvcC5waGFzZV9yYW5nZSwgcGhhc2VfYWRqX21heCk7XG4gXHR9XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJQ0VfRFBMTF9QSU5fU1dfTlVNOyBpJiM0MzsmIzQzOykge1xuQEAgLTQ1MjgsNyAmIzQzOzQ4ODAsOCBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0XHRwaW4tXHUwMDNlcHJvcC5jYXBhYmlsaXRpZXMgPSBjYXBzO1xuIFx0XHRwaW4tXHUwMDNlcGYgPSBwZjtcbiBcdFx0cGluLVx1MDAzZXByb3AuYm9hcmRfbGFiZWwgPSBpY2VfZHBsbF9zd19waW5fdWZsW2ldO1xuLVx0XHRpZiAoaSA9PSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFgpIHtcbiYjNDM7XHRcdHN3aXRjaCAoaSkge1xuJiM0MztcdFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFg6XG4gXHRcdFx0cGluLVx1MDAzZWRpcmVjdGlvbiA9IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQ7XG4gXHRcdFx0cGluX2Fic19pZHggPSBJQ0VfRFBMTF9QSU5fU1dfT1VUUFVUX0FCUyhpKTtcbiBcdFx0XHRwaW4tXHUwMDNlcHJvcC5mcmVxX3N1cHBvcnRlZCA9XG5AQCAtNDUzOCw3ICYjNDM7NDg5MSw4IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3N3X3BpbnMoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRcdFx0cGluLVx1MDAzZXByb3AuZnJlcV9zdXBwb3J0ZWRfbnVtID0gZnJlcV9zdXBwX251bTtcbiBcdFx0XHRwaW4tXHUwMDNlaW5wdXQgPSBOVUxMO1xuIFx0XHRcdHBpbi1cdTAwM2VvdXRwdXQgPSBcdTAwMjZkLVx1MDAzZW91dHB1dHNbcGluX2Fic19pZHhdO1xuLVx0XHR9IGVsc2UgaWYgKGkgPT0gSUNFX0RQTExfUElOX1NXXzJfSURYKSB7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFg6XG4gXHRcdFx0cGluLVx1MDAzZWRpcmVjdGlvbiA9IERQTExfUElOX0RJUkVDVElPTl9JTlBVVDtcbiBcdFx0XHRwaW5fYWJzX2lkeCA9IElDRV9EUExMX1BJTl9TV19JTlBVVF9BQlMoaSkgJiM0MztcbiBcdFx0XHRcdCAgICAgIGlucHV0X2lkeF9vZmZzZXQ7XG5AQCAtNDU1MSw3ICYjNDM7NDkwNSwxMiBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0XHRcdHBpbi1cdTAwM2Vwcm9wLmNhcGFiaWxpdGllcyA9XG4gXHRcdFx0XHQoRFBMTF9QSU5fQ0FQQUJJTElUSUVTX1BSSU9SSVRZX0NBTl9DSEFOR0UgfFxuIFx0XHRcdFx0IGNhcHMpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdGRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksIFwmIzM0O0ludmFsaWQgVS5GTCBwaW4gaW5kZXg6ICVkXFxuXCYjMzQ7LCBpKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiYjNDM7XHRcdHBpbi1cdTAwM2VtdXhlZCA9IFx1MDAyNmQtXHUwMDNlc21hW2ldO1xuIFx0XHRpY2VfZHBsbF9waGFzZV9yYW5nZV9zZXQoXHUwMDI2cGluLVx1MDAzZXByb3AucGhhc2VfcmFuZ2UsIHBoYXNlX2Fkal9tYXgpO1xuIFx0fVxuIFxuQEAgLTQ3NDMsNiAmIzQzOzUxMDIsMTMgQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm8oc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgY2d1KVxuIFxuIFx0ZGUtXHUwMDNlZHBsbF9pZHggPSBhYmlsaXRpZXMuZWVjX2RwbGxfaWR4O1xuIFx0ZHAtXHUwMDNlZHBsbF9pZHggPSBhYmlsaXRpZXMucHBzX2RwbGxfaWR4O1xuJiM0MztcdGlmIChkZS1cdTAwM2VkcGxsX2lkeCBcdTAwM2U9IElDRV9EUExMX1JDTEtfTlVNX01BWCB8fFxuJiM0MztcdCAgICBkcC1cdTAwM2VkcGxsX2lkeCBcdTAwM2U9IElDRV9EUExMX1JDTEtfTlVNX01BWCkge1xuJiM0MztcdFx0ZGV2X2VycihpY2VfcGZfdG9fZGV2KHBmKSxcbiYjNDM7XHRcdFx0XCYjMzQ7aW52YWxpZCBkcGxsX2lkeCBpbiBjZ3UgYWJpbGl0aWVzOiBlZWM9JXUsIHBwcz0ldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ZGUtXHUwMDNlZHBsbF9pZHgsIGRwLVx1MDAzZWRwbGxfaWR4KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiBcdGQtXHUwMDNlbnVtX2lucHV0cyA9IGFiaWxpdGllcy5udW1faW5wdXRzO1xuIFx0ZC1cdTAwM2VudW1fb3V0cHV0cyA9IGFiaWxpdGllcy5udW1fb3V0cHV0cztcbiBcdGQtXHUwMDNlaW5wdXRfcGhhc2VfYWRqX21heCA9IGxlMzJfdG9fY3B1KGFiaWxpdGllcy5tYXhfaW5fcGhhc2VfYWRqKSBcdTAwMjZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oXG5pbmRleCAxMDNiYTNlNDkwNjgyLi5kYzZmMDk2YmYwNjlhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oXG5AQCAtNzYsNiAmIzQzOzc2LDcgQEAgc3RydWN0IGljZV9kcGxsX3BpbiB7XG4gXHRzMzIgcGhhc2VfYWRqdXN0O1xuIFx0c3RydWN0IGljZV9kcGxsX3BpbiAqaW5wdXQ7XG4gXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpvdXRwdXQ7XG4mIzQzO1x0c3RydWN0IGljZV9kcGxsX3BpbiAqbXV4ZWQ7XG4gXHRlbnVtIGRwbGxfcGluX2RpcmVjdGlvbiBkaXJlY3Rpb247XG4gXHRzNjQgcGhhc2Vfb2Zmc2V0O1xuIFx0dTggc3RhdHVzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjQzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIGNoYW5nZXMgbW9kaWZ5IHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIChpY2UpIGRyaXZlciBEUExMIHBpbiBoYW5kbGluZy4gVGhlIGljZSBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgSW50ZWwgRTgwMCBzZXJpZXMgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxYjBmMDY2MzBmODQ0NDJmODcwNTI2MmUxMDNmY2NkOGJiZDFjNTJkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMjE6NDM6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jCmluZGV4IDg1YTc0Y2Q2ZWExZjMuLmNmZmM5ZDczN2RjMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jCkBAIC04OSw2ICYjNDM7ODksMjkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9mcmVxdWVuY3kgaWNlX2VzeW5jX3JhbmdlW10gPSB7CiAJRFBMTF9QSU5fRlJFUVVFTkNZX1JBTkdFKDAsIERQTExfUElOX0ZSRVFVRU5DWV8xX0haKSwKIH07CiAKJiM0MzsvKgomIzQzOyAqIFNNQTEvVS5GTDEgTVVYIHRhYmxlCiYjNDM7IComIzQzOy0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLSYjNDM7CiYjNDM7ICp8ICAgICAgICAgICAgICAgIHwgU01BMV9ESVJfRU4gfCBTTUExX1RYX0VOIHwKJiM0MzsgKiYjNDM7LS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tJiM0MzsKJiM0MzsgKnxTTUExIFJYIEVuYWJsZSAgfCAgICAgICAwICAgICB8ICAgICAgeCAgICAgfAomIzQzOyAqfHUuRkwxIFRYIEVuYWJsZSB8ICAgICAgIDAgICAgIHwgICAgICAwICAgICB8CiYjNDM7ICp8U01BMSBUWCBFbmFibGUgIHwgICAgICAgMSAgICAgfCAgICAgIDAgICAgIHwKJiM0MzsgKnxBbGwgRGlzYWJsZSAgICAgfCAgICAgICAxICAgICB8ICAgICAgMSAgICAgfAomIzQzOyAqJiM0MzstLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0mIzQzOwomIzQzOyAqCiYjNDM7ICogU01BMi9VLkZMMiBNVVggdGFibGUKJiM0MzsgKiYjNDM7LS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0mIzQzOwomIzQzOyAqfCAgICAgICAgICAgICAgICB8IFNNQTJfRElSX0VOIHwgU01BMl9UWF9FTiB8IFVGTDJfUlhfRU4gfAomIzQzOyAqJiM0MzstLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLSYjNDM7CiYjNDM7ICp8U01BMiBSWCBFbmFibGUgIHwgICAgICAgMCAgICAgfCAgICAgIHggICAgIHwgICAgIHggICAgICB8CiYjNDM7ICp8dS5GTDIgUlggRW5hYmxlIHwgICAgICAgMSAgICAgfCAgICAgIHggICAgIHwgICAgIDAgICAgICB8CiYjNDM7ICp8U01BMiBUWCBFbmFibGUgIHwgICAgICAgMSAgICAgfCAgICAgIDAgICAgIHwgICAgIHggICAgICB8CiYjNDM7ICp8U01BMiBEaXNhYmxlICAgIHwgICAgICAgMSAgICAgfCAgICAgIDEgICAgIHwgICAgIHggICAgICB8CiYjNDM7ICp8QWxsIERpc2FibGUgICAgIHwgICAgICAgMSAgICAgfCAgICAgIDEgICAgIHwgICAgIDEgICAgICB8CiYjNDM7IComIzQzOy0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tJiM0MzsKJiM0MzsgKi8KJiM0MzsKIC8qKgogICogaWNlX2RwbGxfaXNfc3dfcGluIC0gY2hlY2sgaWYgZ2l2ZW4gcGluIHNoYWxsIGJlIGNvbnRyb2xsZWQgYnkgU1cKICAqIEBwZjogcHJpdmF0ZSBib2FyZCBzdHJ1Y3R1cmUKQEAgLTQ0Myw2ICYjNDM7NDY2LDQwIEBAIGljZV9kcGxsX3N3X3Bpbl9mcmVxdWVuY3lfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdiwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIGludCBpY2VfZHBsbF9nZXRfZmFsbGJhY2tfaWR4KHN0cnVjdCBpY2VfZHBsbHMgKmQsIHN0cnVjdCBpY2VfZHBsbF9waW4gKnRhcmdldCkKJiM0Mzt7CiYjNDM7CWlmIChkLSZndDtwcHMuZHBsbF9pZHggJmx0OyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVggJmFtcDsmYW1wOwomIzQzOwkgICAgdGFyZ2V0LSZndDtzdGF0ZVtkLSZndDtwcHMuZHBsbF9pZHhdID09IERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCkKJiM0MzsJCXJldHVybiBkLSZndDtwcHMuZHBsbF9pZHg7CiYjNDM7CiYjNDM7CWlmIChkLSZndDtlZWMuZHBsbF9pZHggJmx0OyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVggJmFtcDsmYW1wOwomIzQzOwkgICAgdGFyZ2V0LSZndDtzdGF0ZVtkLSZndDtlZWMuZHBsbF9pZHhdID09IERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCkKJiM0MzsJCXJldHVybiBkLSZndDtlZWMuZHBsbF9pZHg7CiYjNDM7CiYjNDM7CXJldHVybiAtRUlOVkFMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpY2VfZHBsbF9nZXRfcGVlcl90YXJnZXQoc3RydWN0IGljZV9kcGxsX3BpbiAqcGVlciwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgaWNlX2RwbGxfcGluICoqcGVlcl90YXJnZXQsCiYjNDM7CQkJCSAgICAgZW51bSBpY2VfZHBsbF9waW5fdHlwZSAqcGVlcl90eXBlKQomIzQzO3sKJiM0MzsJKnBlZXJfdGFyZ2V0ID0gTlVMTDsKJiM0MzsJKnBlZXJfdHlwZSA9IDA7CiYjNDM7CiYjNDM7CXN3aXRjaCAocGVlci0mZ3Q7ZGlyZWN0aW9uKSB7CiYjNDM7CWNhc2UgRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVDoKJiM0MzsJCSpwZWVyX3RhcmdldCA9IHBlZXItJmd0O291dHB1dDsKJiM0MzsJCSpwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQ6CiYjNDM7CQkqcGVlcl90YXJnZXQgPSBwZWVyLSZndDtpbnB1dDsKJiM0MzsJCSpwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVDsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiAvKioKICAqIGljZV9kcGxsX3Bpbl9lbmFibGUgLSBlbmFibGUgYSBwaW4gb24gZHBsbHMKICAqIEBodzogYm9hcmQgcHJpdmF0ZSBodyBzdHJ1Y3R1cmUKQEAgLTUzOCw2ICYjNDM7NTk1LDI5IEBAIGljZV9kcGxsX3Bpbl9kaXNhYmxlKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW4sCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlciAtIG5vdGlmeSB0aGUgcGFpcmVkIFNXIHBpbiBhZnRlciBhIHN0YXRlIGNoYW5nZQomIzQzOyAqIEBjaGFuZ2VkOiB0aGUgU1cgcGluIHRoYXQgd2FzIGV4cGxpY2l0bHkgY2hhbmdlZCAoYWxyZWFkeSBub3RpZmllZCBieSBkcGxsIGNvcmUpCiYjNDM7ICoKJiM0MzsgKiBTTUEgYW5kIFUuRkwgcGlucyBzaGFyZSBwaHlzaWNhbCBzaWduYWwgcGF0aHMgaW4gcGFpcnMgKFNNQTEvVS5GTDEgYW5kCiYjNDM7ICogU01BMi9VLkZMMikuICBXaGVuIG9uZSBwaW4mIzM5O3Mgcm91dGluZyBjaGFuZ2VzIHZpYSB0aGUgUENBOTU3NSBHUElPCiYjNDM7ICogZXhwYW5kZXIsIHRoZSBwYWlyZWQgcGluJiMzOTtzIHN0YXRlIG1heSBhbHNvIGNoYW5nZS4gIFNlbmQgYSBjaGFuZ2UKJiM0MzsgKiBub3RpZmljYXRpb24gZm9yIHRoZSBwZWVyIHBpbiBzbyB1c2Vyc3BhY2UgY29uc3VtZXJzIG1vbml0b3JpbmcgdGhlCiYjNDM7ICogcGVlciB2aWEgZHBsbCBuZXRsaW5rIGxlYXJuIGFib3V0IHRoZSB1cGRhdGUuCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBDYWxsZWQgZnJvbSBkcGxsX3Bpbl9vcHMgY2FsbGJhY2tzIGFmdGVyIHBmLSZndDtkcGxscy5sb2NrIGlzCiYjNDM7ICogICAgICAgICAgcmVsZWFzZWQuICBVc2VzIF9fZHBsbF9waW5fY2hhbmdlX250ZigpIGJlY2F1c2UgZHBsbF9sb2NrIGlzCiYjNDM7ICogICAgICAgICAgc3RpbGwgaGVsZCBieSB0aGUgZHBsbCBuZXRsaW5rIGxheWVyLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihzdHJ1Y3QgaWNlX2RwbGxfcGluICpjaGFuZ2VkKQomIzQzO3sKJiM0MzsJc3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcjsKJiM0MzsKJiM0MzsJcGVlciA9IGNoYW5nZWQtJmd0O211eGVkOwomIzQzOwlpZiAocGVlciAmYW1wOyZhbXA7IHBlZXItJmd0O3BpbikKJiM0MzsJCV9fZHBsbF9waW5fY2hhbmdlX250ZihwZWVyLSZndDtwaW4pOwomIzQzO30KJiM0MzsKIC8qKgogICogaWNlX2RwbGxfcGluX3N0b3JlX3N0YXRlIC0gdXBkYXRlcyB0aGUgc3RhdGUgb2YgcGluIGluIFNXIGJvb2trZWVwaW5nCiAgKiBAcGluOiBwb2ludGVyIHRvIGEgcGluCkBAIC03MDksNiAmIzQzOzc4OSw4IEBAIGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfZHBsbF9waW4gKnBpbiwKIAkJCSAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXU4IHBhcmVudCwgcG9ydF9udW0gPSBJQ0VfQVFDX1NFVF9QSFlfUkVDX0NMS19PVVRfQ1VSUl9QT1JUOwomIzQzOwllbnVtIGRwbGxfcGluX3N0YXRlIGVlY19zdGF0ZSA9IERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDsKJiM0MzsJZW51bSBkcGxsX3Bpbl9zdGF0ZSBwcHNfc3RhdGUgPSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7CiAJaW50IHJldDsKIAogCXN3aXRjaCAocGluX3R5cGUpIHsKQEAgLTcyMCwyNiAmIzQzOzgwMiwyNiBAQCBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW4sCiAJCQlnb3RvIGVycjsKIAkJaWYgKElDRV9BUUNfR0VUX0NHVV9JTl9DRkdfRkxHMl9JTlBVVF9FTiAmYW1wOyBwaW4tJmd0O2ZsYWdzWzBdKSB7CiAJCQlpZiAocGluLSZndDtwaW4pIHsKLQkJCQlwaW4tJmd0O3N0YXRlW3BmLSZndDtkcGxscy5lZWMuZHBsbF9pZHhdID0KJiM0MzsJCQkJZWVjX3N0YXRlID0KIAkJCQkJcGluLSZndDtwaW4gPT0gcGYtJmd0O2RwbGxzLmVlYy5hY3RpdmVfaW5wdXQgPwogCQkJCQlEUExMX1BJTl9TVEFURV9DT05ORUNURUQgOgogCQkJCQlEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOwotCQkJCXBpbi0mZ3Q7c3RhdGVbcGYtJmd0O2RwbGxzLnBwcy5kcGxsX2lkeF0gPQomIzQzOwkJCQlwcHNfc3RhdGUgPQogCQkJCQlwaW4tJmd0O3BpbiA9PSBwZi0mZ3Q7ZHBsbHMucHBzLmFjdGl2ZV9pbnB1dCA/CiAJCQkJCURQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCA6CiAJCQkJCURQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7CiAJCQl9IGVsc2UgewotCQkJCXBpbi0mZ3Q7c3RhdGVbcGYtJmd0O2RwbGxzLmVlYy5kcGxsX2lkeF0gPQotCQkJCQlEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOwotCQkJCXBpbi0mZ3Q7c3RhdGVbcGYtJmd0O2RwbGxzLnBwcy5kcGxsX2lkeF0gPQotCQkJCQlEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOwomIzQzOwkJCQllZWNfc3RhdGUgPSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOwomIzQzOwkJCQlwcHNfc3RhdGUgPSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOwogCQkJfQotCQl9IGVsc2UgewotCQkJcGluLSZndDtzdGF0ZVtwZi0mZ3Q7ZHBsbHMuZWVjLmRwbGxfaWR4XSA9Ci0JCQkJRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOwotCQkJcGluLSZndDtzdGF0ZVtwZi0mZ3Q7ZHBsbHMucHBzLmRwbGxfaWR4XSA9Ci0JCQkJRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOwogCQl9CiYjNDM7CQkvKiBDb21taXQgb25seSBhZnRlciBhIHN1Y2Nlc3NmdWwgcmVhZCBzbyBsb2NrbGVzcyByZWFkZXJzIG5ldmVyCiYjNDM7CQkgKiBvYnNlcnZlIGEgdHJhbnNpZW50IGRpc2Nvbm5lY3RlZCBzdGF0ZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHBmLSZndDtkcGxscy5lZWMuZHBsbF9pZHggJmx0OyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpCiYjNDM7CQkJcGluLSZndDtzdGF0ZVtwZi0mZ3Q7ZHBsbHMuZWVjLmRwbGxfaWR4XSA9IGVlY19zdGF0ZTsKJiM0MzsJCWlmIChwZi0mZ3Q7ZHBsbHMucHBzLmRwbGxfaWR4ICZsdDsgSUNFX0RQTExfUkNMS19OVU1fTUFYKQomIzQzOwkJCXBpbi0mZ3Q7c3RhdGVbcGYtJmd0O2RwbGxzLnBwcy5kcGxsX2lkeF0gPSBwcHNfc3RhdGU7CiAJCWJyZWFrOwogCWNhc2UgSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUOgogCQlyZXQgPSBpY2VfYXFfZ2V0X291dHB1dF9waW5fY2ZnKCZhbXA7cGYtJmd0O2h3LCBwaW4tJmd0O2lkeCwKQEAgLTc1MCwyMCAmIzQzOzgzMiwxNyBAQCBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW4sCiAKIAkJcGFyZW50ICZhbXA7PSBJQ0VfQVFDX0dFVF9DR1VfT1VUX0NGR19EUExMX1NSQ19TRUw7CiAJCWlmIChJQ0VfQVFDX0dFVF9DR1VfT1VUX0NGR19PVVRfRU4gJmFtcDsgcGluLSZndDtmbGFnc1swXSkgewotCQkJcGluLSZndDtzdGF0ZVtwZi0mZ3Q7ZHBsbHMuZWVjLmRwbGxfaWR4XSA9Ci0JCQkJcGFyZW50ID09IHBmLSZndDtkcGxscy5lZWMuZHBsbF9pZHggPwomIzQzOwkJCWVlY19zdGF0ZSA9IHBhcmVudCA9PSBwZi0mZ3Q7ZHBsbHMuZWVjLmRwbGxfaWR4ID8KIAkJCQlEUExMX1BJTl9TVEFURV9DT05ORUNURUQgOgogCQkJCURQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDsKLQkJCXBpbi0mZ3Q7c3RhdGVbcGYtJmd0O2RwbGxzLnBwcy5kcGxsX2lkeF0gPQotCQkJCXBhcmVudCA9PSBwZi0mZ3Q7ZHBsbHMucHBzLmRwbGxfaWR4ID8KJiM0MzsJCQlwcHNfc3RhdGUgPSBwYXJlbnQgPT0gcGYtJmd0O2RwbGxzLnBwcy5kcGxsX2lkeCA/CiAJCQkJRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEIDoKIAkJCQlEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7Ci0JCX0gZWxzZSB7Ci0JCQlwaW4tJmd0O3N0YXRlW3BmLSZndDtkcGxscy5lZWMuZHBsbF9pZHhdID0KLQkJCQlEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7Ci0JCQlwaW4tJmd0O3N0YXRlW3BmLSZndDtkcGxscy5wcHMuZHBsbF9pZHhdID0KLQkJCQlEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7CiAJCX0KJiM0MzsJCWlmIChwZi0mZ3Q7ZHBsbHMuZWVjLmRwbGxfaWR4ICZsdDsgSUNFX0RQTExfUkNMS19OVU1fTUFYKQomIzQzOwkJCXBpbi0mZ3Q7c3RhdGVbcGYtJmd0O2RwbGxzLmVlYy5kcGxsX2lkeF0gPSBlZWNfc3RhdGU7CiYjNDM7CQlpZiAocGYtJmd0O2RwbGxzLnBwcy5kcGxsX2lkeCAmbHQ7IElDRV9EUExMX1JDTEtfTlVNX01BWCkKJiM0MzsJCQlwaW4tJmd0O3N0YXRlW3BmLSZndDtkcGxscy5wcHMuZHBsbF9pZHhdID0gcHBzX3N0YXRlOwogCQlicmVhazsKIAljYXNlIElDRV9EUExMX1BJTl9UWVBFX1JDTEtfSU5QVVQ6CiAJCWlmIChwZi0mZ3Q7aHcubWFjX3R5cGUgPT0gSUNFX01BQ19HRU5FUklDXzNLX0U4MjUpIHsKQEAgLTExNjMsMzAgJiM0MzsxMjQyLDg1IEBAIGljZV9kcGxsX2lucHV0X3N0YXRlX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsCiAJCQkJICAgICAgZXh0YWNrLCBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVCk7CiB9CiAKLS8qKgotICogaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyIC0gbm90aWZ5IHRoZSBwYWlyZWQgU1cgcGluIGFmdGVyIGEgc3RhdGUgY2hhbmdlCi0gKiBAZDogcG9pbnRlciB0byBkcGxscyBzdHJ1Y3QKLSAqIEBjaGFuZ2VkOiB0aGUgU1cgcGluIHRoYXQgd2FzIGV4cGxpY2l0bHkgY2hhbmdlZCAoYWxyZWFkeSBub3RpZmllZCBieSBkcGxsIGNvcmUpCi0gKgotICogU01BIGFuZCBVLkZMIHBpbnMgc2hhcmUgcGh5c2ljYWwgc2lnbmFsIHBhdGhzIGluIHBhaXJzIChTTUExL1UuRkwxIGFuZAotICogU01BMi9VLkZMMikuICBXaGVuIG9uZSBwaW4mIzM5O3Mgcm91dGluZyBjaGFuZ2VzIHZpYSB0aGUgUENBOTU3NSBHUElPCi0gKiBleHBhbmRlciwgdGhlIHBhaXJlZCBwaW4mIzM5O3Mgc3RhdGUgbWF5IGFsc28gY2hhbmdlLiAgU2VuZCBhIGNoYW5nZQotICogbm90aWZpY2F0aW9uIGZvciB0aGUgcGVlciBwaW4gc28gdXNlcnNwYWNlIGNvbnN1bWVycyBtb25pdG9yaW5nIHRoZQotICogcGVlciB2aWEgZHBsbCBuZXRsaW5rIGxlYXJuIGFib3V0IHRoZSB1cGRhdGUuCi0gKgotICogQ29udGV4dDogQ2FsbGVkIGZyb20gZHBsbF9waW5fb3BzIGNhbGxiYWNrcyBhZnRlciBwZi0mZ3Q7ZHBsbHMubG9jayBpcwotICogICAgICAgICAgcmVsZWFzZWQuICBVc2VzIF9fZHBsbF9waW5fY2hhbmdlX250ZigpIGJlY2F1c2UgZHBsbF9sb2NrIGlzCi0gKiAgICAgICAgICBzdGlsbCBoZWxkIGJ5IHRoZSBkcGxsIG5ldGxpbmsgbGF5ZXIuCi0gKi8KLXN0YXRpYyB2b2lkIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihzdHJ1Y3QgaWNlX2RwbGxzICpkLAotCQkJCQlzdHJ1Y3QgaWNlX2RwbGxfcGluICpjaGFuZ2VkKQomIzQzO3N0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIHsKJiM0MzsJYm9vbCBlbmFibGVkOwomIzQzOwl1OCBkcGxsX2lkeDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0MztpY2VfZHBsbF9waW5fY29uZmlnX2dldChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqdGFyZ2V0LAomIzQzOwkJCWVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZSwKJiM0MzsJCQlzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyAqY29uZmlnLAomIzQzOwkJCXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKLQlzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyOwomIzQzOwlpbnQgcmV0OwogCi0JcGVlciA9IChjaGFuZ2VkICZndDs9IGQtJmd0O3NtYSAmYW1wOyZhbXA7IGNoYW5nZWQgJmx0OyBkLSZndDtzbWEgJiM0MzsgSUNFX0RQTExfUElOX1NXX05VTSkgPwotCQkmYW1wO2QtJmd0O3VmbFtjaGFuZ2VkLSZndDtpZHhdIDogJmFtcDtkLSZndDtzbWFbY2hhbmdlZC0mZ3Q7aWR4XTsKLQlpZiAocGVlci0mZ3Q7cGluKQotCQlfX2RwbGxfcGluX2NoYW5nZV9udGYocGVlci0mZ3Q7cGluKTsKJiM0MzsJcmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJc3dpdGNoICh0eXBlKSB7CiYjNDM7CWNhc2UgSUNFX0RQTExfUElOX1RZUEVfSU5QVVQ6CiYjNDM7CQljb25maWctJmd0O2VuYWJsZWQgPSB0YXJnZXQtJmd0O2ZsYWdzWzBdICZhbXA7CiYjNDM7CQkJCSAgSUNFX0FRQ19HRVRfQ0dVX0lOX0NGR19GTEcyX0lOUFVUX0VOOwomIzQzOwkJY29uZmlnLSZndDtkcGxsX2lkeCA9IDA7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJY2FzZSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ6CiYjNDM7CQljb25maWctJmd0O2VuYWJsZWQgPSB0YXJnZXQtJmd0O2ZsYWdzWzBdICZhbXA7CiYjNDM7CQkJCSAgSUNFX0FRQ19HRVRfQ0dVX09VVF9DRkdfT1VUX0VOOwomIzQzOwkJaWYgKCFjb25maWctJmd0O2VuYWJsZWQpIHsKJiM0MzsJCQljb25maWctJmd0O2RwbGxfaWR4ID0gMDsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXJldCA9IGljZV9kcGxsX2dldF9mYWxsYmFja19pZHgoJmFtcDtwZi0mZ3Q7ZHBsbHMsIHRhcmdldCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJY29uZmlnLSZndDtkcGxsX2lkeCA9IHJldDsKJiM0MzsJCXJldHVybiAwOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO2ljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqdGFyZ2V0LAomIzQzOwkJCSAgICBlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGUsCiYjNDM7CQkJICAgIGNvbnN0IHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnICpjb25maWcsCiYjNDM7CQkJICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaywgaW50IGluaXRfZXJyKQomIzQzO3sKJiM0MzsJaW50IHJlc3RvcmVfZXJyLCB1cGRhdGVfZXJyOwomIzQzOwomIzQzOwlpZiAoY29uZmlnLSZndDtlbmFibGVkKQomIzQzOwkJcmVzdG9yZV9lcnIgPSBpY2VfZHBsbF9waW5fZW5hYmxlKCZhbXA7cGYtJmd0O2h3LCB0YXJnZXQsCiYjNDM7CQkJCQkJICBjb25maWctJmd0O2RwbGxfaWR4LCB0eXBlLCBleHRhY2spOwomIzQzOwllbHNlCiYjNDM7CQlyZXN0b3JlX2VyciA9IGljZV9kcGxsX3Bpbl9kaXNhYmxlKCZhbXA7cGYtJmd0O2h3LCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7CiYjNDM7CXVwZGF0ZV9lcnIgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7CiYjNDM7CWlmIChyZXN0b3JlX2VyciB8fCB1cGRhdGVfZXJyKSB7CiYjNDM7CQlkZXZfd2FybihpY2VfcGZfdG9fZGV2KHBmKSwKJiM0MzsJCQkgJiMzNDtGYWlsZWQgdG8gcm9sbGJhY2sgcGluIHN0YXRlOiBlcnIgJWQsIHJlc3RvcmUgZXJyICVkLCB1cGRhdGUgZXJyICVkXG4mIzM0OywKJiM0MzsJCQkgaW5pdF9lcnIsIHJlc3RvcmVfZXJyLCB1cGRhdGVfZXJyKTsKJiM0MzsJCXJldHVybiByZXN0b3JlX2VyciA/IHJlc3RvcmVfZXJyIDogdXBkYXRlX2VycjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBpY2VfZHBsbF9yZXN0b3JlX3NtYV9jdHJsKHN0cnVjdCBpY2VfcGYgKnBmLCB1OCBvbGRfZGF0YSwKJiM0MzsJCQkJICAgICBpbnQgaW5pdF9lcnIpCiYjNDM7ewomIzQzOwlpbnQgcmVzdG9yZV9lcnI7CiYjNDM7CiYjNDM7CXJlc3RvcmVfZXJyID0gaWNlX3dyaXRlX3NtYV9jdHJsKCZhbXA7cGYtJmd0O2h3LCBvbGRfZGF0YSk7CiYjNDM7CWlmICghcmVzdG9yZV9lcnIpCiYjNDM7CQlyZXN0b3JlX2VyciA9IGljZV9kcGxsX3N3X3BpbnNfdXBkYXRlKHBmKTsKJiM0MzsJaWYgKHJlc3RvcmVfZXJyKQomIzQzOwkJZGV2X3dhcm4oaWNlX3BmX3RvX2RldihwZiksCiYjNDM7CQkJICYjMzQ7RmFpbGVkIHRvIHJlc3RvcmUgU01BIGNvbnRyb2w6IGVyciAlZCwgcmVzdG9yZSBlcnIgJWRcbiYjMzQ7LAomIzQzOwkJCSBpbml0X2VyciwgcmVzdG9yZV9lcnIpOwomIzQzOwomIzQzOwlyZXR1cm4gcmVzdG9yZV9lcnI7CiB9CiAKIC8qKgpAQCAtMTIwNiwzMCAmIzQzOzEzNDAsMzkgQEAgc3RhdGljIGludCBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwLAogCQkJCSAgICAgIGVudW0gZHBsbF9waW5fZGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJCQkgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiYjNDM7CXN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIHBlZXJfY29uZmlnOwogCXN0cnVjdCBpY2VfZHBsbHMgKmQgPSAmYW1wO3AtJmd0O3BmLSZndDtkcGxsczsKJiM0MzsJaW50IHBlZXJfZHBsbF9pZHgsIHJlc3RvcmVfZXJyLCByZXQ7CiYjNDM7CXN0cnVjdCBpY2VfZHBsbF9waW4gKnRhcmdldCA9IE5VTEw7CiYjNDM7CWVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZSA9IDA7CiAJc3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcjsKLQl1OCBkYXRhOwotCWludCByZXQ7CiYjNDM7CXU4IGRhdGEsIG9sZF9kYXRhID0gMDsKIAogCWlmIChwLSZndDtkaXJlY3Rpb24gPT0gZGlyZWN0aW9uICZhbXA7JmFtcDsgcC0mZ3Q7YWN0aXZlKQogCQlyZXR1cm4gMDsKIAlyZXQgPSBpY2VfcmVhZF9zbWFfY3RybCgmYW1wO3AtJmd0O3BmLSZndDtodywgJmFtcDtkYXRhKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwomIzQzOwlvbGRfZGF0YSA9IGRhdGE7CiAKIAlzd2l0Y2ggKHAtJmd0O2lkeCkgewogCWNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOgotCQlkYXRhICZhbXA7PSB+SUNFX1NNQTFfTUFTSzsKLQkJaWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKQomIzQzOwkJaWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKSB7CiYjNDM7CQkJZGF0YSAmYW1wOz0gfklDRV9TTUExX1RYX0VOOwogCQkJZGF0YSB8PSBJQ0VfU01BMV9ESVJfRU47CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWRhdGEgJmFtcDs9IH5JQ0VfU01BMV9ESVJfRU47CiYjNDM7CQkJZGF0YSAmYW1wOz0gfklDRV9TTUExX1RYX0VOOwomIzQzOwkJfQogCQlicmVhazsKIAljYXNlIElDRV9EUExMX1BJTl9TV18yX0lEWDoKIAkJaWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQpIHsKIAkJCWRhdGEgJmFtcDs9IH5JQ0VfU01BMl9ESVJfRU47Ci0JCQlkYXRhIHw9IElDRV9TTUEyX1VGTDJfUlhfRElTOwomIzQzOwkJCWRhdGEgJmFtcDs9IH5JQ0VfU01BMl9UWF9FTjsKIAkJfSBlbHNlIHsKLQkJCWRhdGEgJmFtcDs9IH4oSUNFX1NNQTJfVFhfRU4gfCBJQ0VfU01BMl9VRkwyX1JYX0RJUyk7CiAJCQlkYXRhIHw9IElDRV9TTUEyX0RJUl9FTjsKJiM0MzsJCQlkYXRhICZhbXA7PSB+SUNFX1NNQTJfVUZMMl9SWF9ESVM7CiYjNDM7CQkJZGF0YSAmYW1wOz0gfklDRV9TTUEyX1RYX0VOOwogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xMjQxLDcgJiM0MzsxMzg0LDcgQEAgc3RhdGljIGludCBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwLAogCQkJCQkJSUNFX0RQTExfUElOX1RZUEVfU09GVFdBUkUsCiAJCQkJCQlleHRhY2spOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CiYjNDM7CQlnb3RvIHJlc3RvcmVfc21hOwogCiAJLyogV2hlbiBhIGRpcmVjdGlvbiBjaGFuZ2UgYWN0aXZhdGVzIHRoZSBwYWlyZWQgVS5GTCBwaW4sIGVuYWJsZQogCSAqIGl0cyBiYWNraW5nIENHVSBwaW4gc28gdGhlIHBpbiByZXBvcnRzIGFzIGNvbm5lY3RlZC4gV2l0aG91dApAQCAtMTI1MCwyNSAmIzQzOzEzOTMsNDYgQEAgc3RhdGljIGludCBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwLAogCSAqIGJhY2tpbmcgcGluIHdoZW4gVS5GTCBiZWNvbWVzIGluYWN0aXZlIGJlY2F1c2UgdGhlIFNNQSBwaW4gbWF5CiAJICogc3RpbGwgYmUgdXNpbmcgaXQuCiAJICovCi0JcGVlciA9ICZhbXA7ZC0mZ3Q7dWZsW3AtJmd0O2lkeF07CiYjNDM7CXBlZXIgPSBwLSZndDttdXhlZDsKIAlpZiAocGVlci0mZ3Q7YWN0aXZlKSB7Ci0JCXN0cnVjdCBpY2VfZHBsbF9waW4gKnRhcmdldDsKLQkJZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlOwotCiAJCWlmIChwZWVyLSZndDtvdXRwdXQpIHsKIAkJCXRhcmdldCA9IHBlZXItJmd0O291dHB1dDsKIAkJCXR5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7Ci0JCX0gZWxzZSB7CiYjNDM7CQl9IGVsc2UgaWYgKHBlZXItJmd0O2lucHV0KSB7CiAJCQl0YXJnZXQgPSBwZWVyLSZndDtpbnB1dDsKIAkJCXR5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCQlnb3RvIHJlc3RvcmVfc21hOwogCQl9Ci0JCXJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoJmFtcDtwLSZndDtwZi0mZ3Q7aHcsIHRhcmdldCwKLQkJCQkJICBkLSZndDtlZWMuZHBsbF9pZHgsIHR5cGUsIGV4dGFjayk7Ci0JCWlmICghcmV0KQotCQkJcmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwLSZndDtwZiwgdGFyZ2V0LAotCQkJCQkJCXR5cGUsIGV4dGFjayk7CiYjNDM7CiYjNDM7CQlyZXQgPSBpY2VfZHBsbF9waW5fY29uZmlnX2dldChwLSZndDtwZiwgdGFyZ2V0LCB0eXBlLAomIzQzOwkJCQkJICAgICAgJmFtcDtwZWVyX2NvbmZpZywgZXh0YWNrKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byByZXN0b3JlX3NtYTsKJiM0MzsKJiM0MzsJCXBlZXJfZHBsbF9pZHggPSBpY2VfZHBsbF9nZXRfZmFsbGJhY2tfaWR4KGQsIHRhcmdldCk7CiYjNDM7CQlpZiAocGVlcl9kcGxsX2lkeCAmbHQ7IDApCiYjNDM7CQkJcGVlcl9kcGxsX2lkeCA9IGQtJmd0O2VlYy5kcGxsX2lkeDsKJiM0MzsJCXJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoJmFtcDtwLSZndDtwZi0mZ3Q7aHcsIHRhcmdldCwgcGVlcl9kcGxsX2lkeCwKJiM0MzsJCQkJCSAgdHlwZSwgZXh0YWNrKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byByZXN0b3JlX3BlZXI7CiYjNDM7CQlyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHAtJmd0O3BmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gcmVzdG9yZV9wZWVyOwogCX0KIAomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztyZXN0b3JlX3BlZXI6CiYjNDM7CXJlc3RvcmVfZXJyID0KJiM0MzsJCWljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShwLSZndDtwZiwgdGFyZ2V0LCB0eXBlLCAmYW1wO3BlZXJfY29uZmlnLAomIzQzOwkJCQkJICAgIGV4dGFjaywgcmV0KTsKJiM0MzsJaWYgKHJlc3RvcmVfZXJyKQomIzQzOwkJcmV0ID0gcmVzdG9yZV9lcnI7CiYjNDM7cmVzdG9yZV9zbWE6CiYjNDM7CWljZV9kcGxsX3Jlc3RvcmVfc21hX2N0cmwocC0mZ3Q7cGYsIG9sZF9kYXRhLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEyOTQsMTQgJiM0MzsxNDU4LDE4IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdiwKIAkJCSAgIGVudW0gZHBsbF9waW5fc3RhdGUgc3RhdGUsCiAJCQkgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiYjNDM7CWVudW0gaWNlX2RwbGxfcGluX3R5cGUgcGVlcl90eXBlID0gMCwgdHlwZTsKIAlzdHJ1Y3QgaWNlX2RwbGxfcGluICpwID0gcGluX3ByaXYsICp0YXJnZXQ7CiYjNDM7CXN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXJfdGFyZ2V0ID0gTlVMTDsKJiM0MzsJc3RydWN0IGljZV9kcGxsX3Bpbl9jb25maWcgcGVlcl9jb25maWc7CiYjNDM7CXN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIG9sZF9jb25maWc7CiYjNDM7CWludCBwZWVyX2RwbGxfaWR4LCByZXN0b3JlX2VyciwgcmV0OwogCXN0cnVjdCBpY2VfZHBsbCAqZCA9IGRwbGxfcHJpdjsKLQllbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGU7CiAJc3RydWN0IGljZV9wZiAqcGYgPSBwLSZndDtwZjsKIAlzdHJ1Y3QgaWNlX2h3ICpodzsKJiM0MzsJdTggb2xkX2RhdGEgPSAwOwogCWJvb2wgZW5hYmxlOwogCXU4IGRhdGE7Ci0JaW50IHJldDsKIAogCWlmIChpY2VfZHBsbF9pc19yZXNldChwZiwgZXh0YWNrKSkKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTEzMTEsMTQgJiM0MzsxNDc5LDE3IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdiwKIAlyZXQgPSBpY2VfcmVhZF9zbWFfY3RybChodywgJmFtcDtkYXRhKTsKIAlpZiAocmV0KQogCQlnb3RvIHVubG9jazsKJiM0MzsJb2xkX2RhdGEgPSBkYXRhOwogCiAJcmV0ID0gLUVJTlZBTDsKIAlzd2l0Y2ggKHAtJmd0O2lkeCkgewogCWNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOgotCQlpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEKSB7CiYjNDM7CQlzd2l0Y2ggKHN0YXRlKSB7CiYjNDM7CQljYXNlIERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDoKIAkJCWRhdGEgJmFtcDs9IH5JQ0VfU01BMV9NQVNLOwogCQkJZW5hYmxlID0gdHJ1ZTsKLQkJfSBlbHNlIGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQpIHsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOgogCQkJLyogU2tpcCBpZiBVLkZMMSBpcyBub3QgYWN0aXZlLCBzZXR0aW5nIFRYX0VOCiAJCQkgKiB3aGlsZSBESVJfRU4gaXMgc2V0IHdvdWxkIGFsc28gZGVhY3RpdmF0ZQogCQkJICogdGhlIHBhaXJlZCBTTUExIG91dHB1dC4KQEAgLTEzMjksMTggJiM0MzsxNTAwLDIxIEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdiwKIAkJCX0KIAkJCWRhdGEgfD0gSUNFX1NNQTFfVFhfRU47CiAJCQllbmFibGUgPSBmYWxzZTsKLQkJfSBlbHNlIHsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWRlZmF1bHQ6CiAJCQlnb3RvIHVubG9jazsKIAkJfQogCQl0YXJnZXQgPSBwLSZndDtvdXRwdXQ7CiAJCXR5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7CiAJCWJyZWFrOwogCWNhc2UgSUNFX0RQTExfUElOX1NXXzJfSURYOgotCQlpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRSkgewomIzQzOwkJc3dpdGNoIChzdGF0ZSkgewomIzQzOwkJY2FzZSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOgogCQkJZGF0YSB8PSBJQ0VfU01BMl9ESVJfRU47CiAJCQlkYXRhICZhbXA7PSB+SUNFX1NNQTJfVUZMMl9SWF9ESVM7CiAJCQllbmFibGUgPSB0cnVlOwotCQl9IGVsc2UgaWYgKHN0YXRlID09IERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRCkgewomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ6CiAJCQkvKiBTa2lwIGlmIFUuRkwyIGlzIG5vdCBhY3RpdmUsIHNldHRpbmcKIAkJCSAqIFVGTDJfUlhfRElTIGNvdWxkIGFsc28gZGlzYWJsZSB0aGUgcGFpcmVkCiAJCQkgKiBTTUEyIGlucHV0LgpAQCAtMTM1Miw3ICYjNDM7MTUyNiw4IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdiwKIAkJCX0KIAkJCWRhdGEgfD0gSUNFX1NNQTJfVUZMMl9SWF9ESVM7CiAJCQllbmFibGUgPSBmYWxzZTsKLQkJfSBlbHNlIHsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWRlZmF1bHQ6CiAJCQlnb3RvIHVubG9jazsKIAkJfQogCQl0YXJnZXQgPSBwLSZndDtpbnB1dDsKQEAgLTEzNjQsMjMgJiM0MzsxNTM5LDc0IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdiwKIAogCXJldCA9IGljZV93cml0ZV9zbWFfY3RybChodywgZGF0YSk7CiAJaWYgKHJldCkKLQkJZ290byB1bmxvY2s7CiYjNDM7CQlnb3RvIHJlc3RvcmVfc21hX2N0cmw7CiAJcmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcCwgSUNFX0RQTExfUElOX1RZUEVfU09GVFdBUkUsCiAJCQkJCWV4dGFjayk7CiAJaWYgKHJldCkKLQkJZ290byB1bmxvY2s7CiYjNDM7CQlnb3RvIHJlc3RvcmVfc21hX2N0cmw7CiYjNDM7CiYjNDM7CXJldCA9IGljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHBmLCB0YXJnZXQsIHR5cGUsICZhbXA7b2xkX2NvbmZpZywgZXh0YWNrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gcmVzdG9yZV9zbWFfY3RybDsKIAogCWlmIChlbmFibGUpCiAJCXJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoaHcsIHRhcmdldCwgZC0mZ3Q7ZHBsbF9pZHgsIHR5cGUsIGV4dGFjayk7CiAJZWxzZQogCQlyZXQgPSBpY2VfZHBsbF9waW5fZGlzYWJsZShodywgdGFyZ2V0LCB0eXBlLCBleHRhY2spOwotCWlmICghcmV0KQotCQlyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIHJlc3RvcmVfdGFyZ2V0OwomIzQzOwlyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIHJlc3RvcmVfdGFyZ2V0OwomIzQzOwomIzQzOwlpZiAoZW5hYmxlICZhbXA7JmFtcDsgcC0mZ3Q7bXV4ZWQgJmFtcDsmYW1wOyBwLSZndDttdXhlZC0mZ3Q7YWN0aXZlKSB7CiYjNDM7CQlpY2VfZHBsbF9nZXRfcGVlcl90YXJnZXQocC0mZ3Q7bXV4ZWQsICZhbXA7cGVlcl90YXJnZXQsICZhbXA7cGVlcl90eXBlKTsKJiM0MzsJCWlmICghcGVlcl90YXJnZXQpIHsKJiM0MzsJCQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJCWdvdG8gcmVzdG9yZV90YXJnZXQ7CiYjNDM7CQl9CiYjNDM7CQlyZXQgPSBpY2VfZHBsbF9waW5fY29uZmlnX2dldChwZiwgcGVlcl90YXJnZXQsIHBlZXJfdHlwZSwKJiM0MzsJCQkJCSAgICAgICZhbXA7cGVlcl9jb25maWcsIGV4dGFjayk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gcmVzdG9yZV90YXJnZXQ7CiYjNDM7CiYjNDM7CQlwZWVyX2RwbGxfaWR4ID0gaWNlX2RwbGxfZ2V0X2ZhbGxiYWNrX2lkeCgmYW1wO3BmLSZndDtkcGxscywKJiM0MzsJCQkJCQkJICBwZWVyX3RhcmdldCk7CiYjNDM7CQlpZiAocGVlcl9kcGxsX2lkeCAmbHQ7IDApCiYjNDM7CQkJcGVlcl9kcGxsX2lkeCA9IGQtJmd0O2RwbGxfaWR4OwomIzQzOwkJcmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZSgmYW1wO3BmLSZndDtodywgcGVlcl90YXJnZXQsIHBlZXJfZHBsbF9pZHgsCiYjNDM7CQkJCQkgIHBlZXJfdHlwZSwgZXh0YWNrKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byByZXN0b3JlX3BlZXI7CiYjNDM7CQlyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLAomIzQzOwkJCQkJCWV4dGFjayk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gcmVzdG9yZV9wZWVyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWdvdG8gdW5sb2NrOwomIzQzOwomIzQzO3Jlc3RvcmVfcGVlcjoKJiM0MzsJcmVzdG9yZV9lcnIgPQomIzQzOwkJaWNlX2RwbGxfcGluX2NvbmZpZ19yZXN0b3JlKHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLAomIzQzOwkJCQkJICAgICZhbXA7cGVlcl9jb25maWcsIGV4dGFjaywgcmV0KTsKJiM0MzsJaWYgKHJlc3RvcmVfZXJyKQomIzQzOwkJcmV0ID0gcmVzdG9yZV9lcnI7CiYjNDM7cmVzdG9yZV90YXJnZXQ6CiYjNDM7CXJlc3RvcmVfZXJyID0KJiM0MzsJCWljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShwZiwgdGFyZ2V0LCB0eXBlLCAmYW1wO29sZF9jb25maWcsCiYjNDM7CQkJCQkgICAgZXh0YWNrLCByZXQpOwomIzQzOwlpZiAocmVzdG9yZV9lcnIpCiYjNDM7CQlyZXQgPSByZXN0b3JlX2VycjsKJiM0MztyZXN0b3JlX3NtYV9jdHJsOgomIzQzOwlyZXN0b3JlX2VyciA9IGljZV9kcGxsX3Jlc3RvcmVfc21hX2N0cmwocGYsIG9sZF9kYXRhLCByZXQpOwomIzQzOwlpZiAocmVzdG9yZV9lcnIpCiYjNDM7CQlyZXQgPSByZXN0b3JlX2VycjsKIAogdW5sb2NrOgogCW11dGV4X3VubG9jaygmYW1wO3BmLSZndDtkcGxscy5sb2NrKTsKIAlpZiAoIXJldCkKLQkJaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKCZhbXA7cGYtJmd0O2RwbGxzLCBwKTsKJiM0MzsJCWljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihwKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xNDYzLDQ0ICYjNDM7MTY4OSwxNjggQEAgaWNlX2RwbGxfc21hX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LAogCQkJICAgZW51bSBkcGxsX3Bpbl9zdGF0ZSBzdGF0ZSwKIAkJCSAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKJiM0MzsJaW50IHBlZXJfZHBsbF9pZHgsIHJlc3RvcmVfZXJyLCByZXQgPSAtRUlOVkFMOwogCXN0cnVjdCBpY2VfZHBsbF9waW4gKnNtYSA9IHBpbl9wcml2LCAqdGFyZ2V0OwomIzQzOwllbnVtIGljZV9kcGxsX3Bpbl90eXBlIHBlZXJfdHlwZSA9IDAsIHR5cGU7CiYjNDM7CXN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXJfdGFyZ2V0ID0gTlVMTDsKJiM0MzsJc3RydWN0IGljZV9kcGxsX3Bpbl9jb25maWcgcGVlcl9jb25maWc7CiYjNDM7CXN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIG9sZF9jb25maWc7CiAJc3RydWN0IGljZV9kcGxsICpkID0gZHBsbF9wcml2OwogCXN0cnVjdCBpY2VfcGYgKnBmID0gc21hLSZndDtwZjsKLQllbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGU7CiYjNDM7CXU4IG9sZF9kYXRhID0gMDsKIAlib29sIGVuYWJsZTsKLQlpbnQgcmV0OwogCiAJaWYgKGljZV9kcGxsX2lzX3Jlc2V0KHBmLCBleHRhY2spKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJbXV0ZXhfbG9jaygmYW1wO3BmLSZndDtkcGxscy5sb2NrKTsKLQlpZiAoIXNtYS0mZ3Q7YWN0aXZlKSB7Ci0JCXJldCA9IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHNtYSwgc21hLSZndDtkaXJlY3Rpb24sIGV4dGFjayk7Ci0JCWlmIChyZXQpCiYjNDM7CXN3aXRjaCAoc3RhdGUpIHsKJiM0MzsJY2FzZSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOgomIzQzOwkJLyogUmVqZWN0IGRpcmVjdGlvbi1taXNtYXRjaGVkIHJlcXVlc3RzOiBTRUxFQ1RBQkxFICYjNDM7IE9VVFBVVAomIzQzOwkJICogaXMgYW4gaW52YWxpZCBjb21iaW5hdGlvbiwgcmV0dXJuIC1FSU5WQUwgaW4gdGhpcyBjYXNlCiYjNDM7CQkgKiBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIGRpc2FibGluZyB0aGUgcGluLgomIzQzOwkJICovCiYjNDM7CQlpZiAoc21hLSZndDtkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVCkgewomIzQzOwkJCWVuYWJsZSA9IGZhbHNlOwomIzQzOwkJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CQl9CiYjNDM7CQllbmFibGUgPSB0cnVlOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEOgomIzQzOwkJLyogUmVqZWN0IGRpcmVjdGlvbi1taXNtYXRjaGVkIHJlcXVlc3RzOiBDT05ORUNURUQgJiM0MzsgSU5QVVQKJiM0MzsJCSAqIGlzIGFuIGludmFsaWQgY29tYmluYXRpb24sIHJldHVybiAtRUlOVkFMIGluIHRoaXMgY2FzZQomIzQzOwkJICogaW1tZWRpYXRlbHkgaW5zdGVhZCBvZiBkaXNhYmxpbmcgdGhlIHBpbi4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHNtYS0mZ3Q7ZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9JTlBVVCkgewomIzQzOwkJCWVuYWJsZSA9IGZhbHNlOwomIzQzOwkJCXJldCA9IC1FSU5WQUw7CiAJCQlnb3RvIHVubG9jazsKJiM0MzsJCX0KJiM0MzsJCWVuYWJsZSA9IHRydWU7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ6CiYjNDM7CQllbmFibGUgPSBmYWxzZTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gdW5sb2NrOwogCX0KLQlpZiAoc21hLSZndDtkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUKSB7Ci0JCWVuYWJsZSA9IHN0YXRlID09IERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7CiYjNDM7CiYjNDM7CXN3aXRjaCAoc21hLSZndDtkaXJlY3Rpb24pIHsKJiM0MzsJY2FzZSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQ6CiAJCXRhcmdldCA9IHNtYS0mZ3Q7aW5wdXQ7CiAJCXR5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVDsKLQl9IGVsc2UgewotCQllbmFibGUgPSBzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQ7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUOgogCQl0YXJnZXQgPSBzbWEtJmd0O291dHB1dDsKIAkJdHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gdW5sb2NrOwogCX0KIAotCWlmIChlbmFibGUpCiYjNDM7CWlmICghc21hLSZndDthY3RpdmUpIHsKJiM0MzsJCXJldCA9IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHNtYSwgc21hLSZndDtkaXJlY3Rpb24sIGV4dGFjayk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gdW5sb2NrOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChlbmFibGUpIHsKJiM0MzsJCXU4IGRhdGE7CiYjNDM7CiYjNDM7CQlyZXQgPSBpY2VfcmVhZF9zbWFfY3RybCgmYW1wO3BmLSZndDtodywgJmFtcDtkYXRhKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CQlvbGRfZGF0YSA9IGRhdGE7CiYjNDM7CQlzd2l0Y2ggKHNtYS0mZ3Q7aWR4KSB7CiYjNDM7CQljYXNlIElDRV9EUExMX1BJTl9TV18xX0lEWDoKJiM0MzsJCQlkYXRhICZhbXA7PSB+SUNFX1NNQTFfVFhfRU47CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIElDRV9EUExMX1BJTl9TV18yX0lEWDoKJiM0MzsJCQlkYXRhICZhbXA7PSB+SUNFX1NNQTJfVUZMMl9SWF9ESVM7CiYjNDM7CQkJZGF0YSAmYW1wOz0gfklDRV9TTUEyX1RYX0VOOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJCWdvdG8gdW5sb2NrOwomIzQzOwkJfQomIzQzOwkJcmV0ID0gaWNlX3dyaXRlX3NtYV9jdHJsKCZhbXA7cGYtJmd0O2h3LCBkYXRhKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byByZXN0b3JlX3NtYV9jdHJsOwomIzQzOwkJcmV0ID0gaWNlX2RwbGxfc3dfcGluc191cGRhdGUocGYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIHJlc3RvcmVfc21hX2N0cmw7CiYjNDM7CiYjNDM7CQlyZXQgPSBpY2VfZHBsbF9waW5fY29uZmlnX2dldChwZiwgdGFyZ2V0LCB0eXBlLCAmYW1wO29sZF9jb25maWcsCiYjNDM7CQkJCQkgICAgICBleHRhY2spOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIHJlc3RvcmVfc21hX2N0cmw7CiAJCXJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoJmFtcDtwZi0mZ3Q7aHcsIHRhcmdldCwgZC0mZ3Q7ZHBsbF9pZHgsIHR5cGUsCiAJCQkJCSAgZXh0YWNrKTsKLQllbHNlCi0JCXJldCA9IGljZV9kcGxsX3Bpbl9kaXNhYmxlKCZhbXA7cGYtJmd0O2h3LCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7Ci0JaWYgKCFyZXQpCiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gcmVzdG9yZV90YXJnZXQ7CiYjNDM7CQkvKiBSZWZyZXNoIHRhcmdldCBzdGF0ZSBiZWZvcmUgcGVlci1zaWRlIG9wZXJhdGlvbnMuICovCiAJCXJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byByZXN0b3JlX3RhcmdldDsKJiM0MzsKJiM0MzsJCWlmIChzbWEtJmd0O211eGVkICZhbXA7JmFtcDsgc21hLSZndDttdXhlZC0mZ3Q7YWN0aXZlKSB7CiYjNDM7CQkJaWNlX2RwbGxfZ2V0X3BlZXJfdGFyZ2V0KHNtYS0mZ3Q7bXV4ZWQsICZhbXA7cGVlcl90YXJnZXQsCiYjNDM7CQkJCQkJICZhbXA7cGVlcl90eXBlKTsKJiM0MzsJCQlpZiAoIXBlZXJfdGFyZ2V0KSB7CiYjNDM7CQkJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQkJCWdvdG8gcmVzdG9yZV90YXJnZXQ7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCXJldCA9IGljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLAomIzQzOwkJCQkJCSAgICAgICZhbXA7cGVlcl9jb25maWcsIGV4dGFjayk7CiYjNDM7CQkJaWYgKHJldCkKJiM0MzsJCQkJZ290byByZXN0b3JlX3RhcmdldDsKJiM0MzsKJiM0MzsJCQlwZWVyX2RwbGxfaWR4ID0KJiM0MzsJCQkJaWNlX2RwbGxfZ2V0X2ZhbGxiYWNrX2lkeCgmYW1wO3BmLSZndDtkcGxscywgcGVlcl90YXJnZXQpOwomIzQzOwkJCWlmIChwZWVyX2RwbGxfaWR4ICZsdDsgMCkKJiM0MzsJCQkJcGVlcl9kcGxsX2lkeCA9IGQtJmd0O2RwbGxfaWR4OwomIzQzOwkJCXJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoJmFtcDtwZi0mZ3Q7aHcsIHBlZXJfdGFyZ2V0LAomIzQzOwkJCQkJCSAgcGVlcl9kcGxsX2lkeCwgcGVlcl90eXBlLCBleHRhY2spOwomIzQzOwkJCWlmIChyZXQpCiYjNDM7CQkJCWdvdG8gcmVzdG9yZV9wZWVyOwomIzQzOwkJCXJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHBlZXJfdGFyZ2V0LCBwZWVyX3R5cGUsCiYjNDM7CQkJCQkJCWV4dGFjayk7CiYjNDM7CQkJaWYgKHJldCkKJiM0MzsJCQkJZ290byByZXN0b3JlX3BlZXI7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXQgPSBpY2VfZHBsbF9waW5fZGlzYWJsZSgmYW1wO3BmLSZndDtodywgdGFyZ2V0LCB0eXBlLCBleHRhY2spOwomIzQzOwkJaWYgKCFyZXQpCiYjNDM7CQkJcmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLAomIzQzOwkJCQkJCQlleHRhY2spOwomIzQzOwl9CiYjNDM7CWdvdG8gdW5sb2NrOwomIzQzOwomIzQzO3Jlc3RvcmVfcGVlcjoKJiM0MzsJcmVzdG9yZV9lcnIgPQomIzQzOwkJaWNlX2RwbGxfcGluX2NvbmZpZ19yZXN0b3JlKHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLAomIzQzOwkJCQkJICAgICZhbXA7cGVlcl9jb25maWcsIGV4dGFjaywgcmV0KTsKJiM0MzsJaWYgKHJlc3RvcmVfZXJyKQomIzQzOwkJcmV0ID0gcmVzdG9yZV9lcnI7CiYjNDM7cmVzdG9yZV90YXJnZXQ6CiYjNDM7CXJlc3RvcmVfZXJyID0KJiM0MzsJCWljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShwZiwgdGFyZ2V0LCB0eXBlLCAmYW1wO29sZF9jb25maWcsCiYjNDM7CQkJCQkgICAgZXh0YWNrLCByZXQpOwomIzQzOwlpZiAocmVzdG9yZV9lcnIpCiYjNDM7CQlyZXQgPSByZXN0b3JlX2VycjsKJiM0MztyZXN0b3JlX3NtYV9jdHJsOgomIzQzOwlyZXN0b3JlX2VyciA9IGljZV9kcGxsX3Jlc3RvcmVfc21hX2N0cmwocGYsIG9sZF9kYXRhLCByZXQpOwomIzQzOwlpZiAocmVzdG9yZV9lcnIpCiYjNDM7CQlyZXQgPSByZXN0b3JlX2VycjsKIAogdW5sb2NrOgogCW11dGV4X3VubG9jaygmYW1wO3BmLSZndDtkcGxscy5sb2NrKTsKIAlpZiAoIXJldCkKLQkJaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKCZhbXA7cGYtJmd0O2RwbGxzLCBzbWEpOwomIzQzOwkJaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKHNtYSk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTY5Nyw3ICYjNDM7MjA0Nyw3IEBAIGljZV9kcGxsX3Bpbl9zbWFfZGlyZWN0aW9uX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsCiAJcmV0ID0gaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQocCwgZGlyZWN0aW9uLCBleHRhY2spOwogCW11dGV4X3VubG9jaygmYW1wO3BmLSZndDtkcGxscy5sb2NrKTsKIAlpZiAoIXJldCkKLQkJaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKCZhbXA7cGYtJmd0O2RwbGxzLCBwKTsKJiM0MzsJCWljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihwKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC00NTE5LDYgJiM0Mzs0ODY5LDggQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZikKIAkJaWYgKHBpbi0mZ3Q7aW5wdXQtJmd0O3JlZl9zeW5jKQogCQkJcGluLSZndDtyZWZfc3luYyA9IHBpbi0mZ3Q7aW5wdXQtJmd0O3JlZl9zeW5jIC0gcGluX2Fic19pZHg7CiAJCXBpbi0mZ3Q7b3V0cHV0ID0gJmFtcDtkLSZndDtvdXRwdXRzW0lDRV9EUExMX1BJTl9TV19PVVRQVVRfQUJTKGkpXTsKJiM0MzsJCXBpbi0mZ3Q7bXV4ZWQgPSAmYW1wO2QtJmd0O3VmbFtpXTsKJiM0MzsKIAkJaWNlX2RwbGxfcGhhc2VfcmFuZ2Vfc2V0KCZhbXA7cGluLSZndDtwcm9wLnBoYXNlX3JhbmdlLCBwaGFzZV9hZGpfbWF4KTsKIAl9CiAJZm9yIChpID0gMDsgaSAmbHQ7IElDRV9EUExMX1BJTl9TV19OVU07IGkmIzQzOyYjNDM7KSB7CkBAIC00NTI4LDcgJiM0Mzs0ODgwLDggQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZikKIAkJcGluLSZndDtwcm9wLmNhcGFiaWxpdGllcyA9IGNhcHM7CiAJCXBpbi0mZ3Q7cGYgPSBwZjsKIAkJcGluLSZndDtwcm9wLmJvYXJkX2xhYmVsID0gaWNlX2RwbGxfc3dfcGluX3VmbFtpXTsKLQkJaWYgKGkgPT0gSUNFX0RQTExfUElOX1NXXzFfSURYKSB7CiYjNDM7CQlzd2l0Y2ggKGkpIHsKJiM0MzsJCWNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOgogCQkJcGluLSZndDtkaXJlY3Rpb24gPSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUOwogCQkJcGluX2Fic19pZHggPSBJQ0VfRFBMTF9QSU5fU1dfT1VUUFVUX0FCUyhpKTsKIAkJCXBpbi0mZ3Q7cHJvcC5mcmVxX3N1cHBvcnRlZCA9CkBAIC00NTM4LDcgJiM0Mzs0ODkxLDggQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZikKIAkJCXBpbi0mZ3Q7cHJvcC5mcmVxX3N1cHBvcnRlZF9udW0gPSBmcmVxX3N1cHBfbnVtOwogCQkJcGluLSZndDtpbnB1dCA9IE5VTEw7CiAJCQlwaW4tJmd0O291dHB1dCA9ICZhbXA7ZC0mZ3Q7b3V0cHV0c1twaW5fYWJzX2lkeF07Ci0JCX0gZWxzZSBpZiAoaSA9PSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFgpIHsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgSUNFX0RQTExfUElOX1NXXzJfSURYOgogCQkJcGluLSZndDtkaXJlY3Rpb24gPSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQ7CiAJCQlwaW5fYWJzX2lkeCA9IElDRV9EUExMX1BJTl9TV19JTlBVVF9BQlMoaSkgJiM0MzsKIAkJCQkgICAgICBpbnB1dF9pZHhfb2Zmc2V0OwpAQCAtNDU1MSw3ICYjNDM7NDkwNSwxMiBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKQogCQkJcGluLSZndDtwcm9wLmNhcGFiaWxpdGllcyA9CiAJCQkJKERQTExfUElOX0NBUEFCSUxJVElFU19QUklPUklUWV9DQU5fQ0hBTkdFIHwKIAkJCQkgY2Fwcyk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCWRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksICYjMzQ7SW52YWxpZCBVLkZMIHBpbiBpbmRleDogJWRcbiYjMzQ7LCBpKTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQomIzQzOwkJcGluLSZndDttdXhlZCA9ICZhbXA7ZC0mZ3Q7c21hW2ldOwogCQlpY2VfZHBsbF9waGFzZV9yYW5nZV9zZXQoJmFtcDtwaW4tJmd0O3Byb3AucGhhc2VfcmFuZ2UsIHBoYXNlX2Fkal9tYXgpOwogCX0KIApAQCAtNDc0Myw2ICYjNDM7NTEwMiwxMyBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mbyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBjZ3UpCiAKIAlkZS0mZ3Q7ZHBsbF9pZHggPSBhYmlsaXRpZXMuZWVjX2RwbGxfaWR4OwogCWRwLSZndDtkcGxsX2lkeCA9IGFiaWxpdGllcy5wcHNfZHBsbF9pZHg7CiYjNDM7CWlmIChkZS0mZ3Q7ZHBsbF9pZHggJmd0Oz0gSUNFX0RQTExfUkNMS19OVU1fTUFYIHx8CiYjNDM7CSAgICBkcC0mZ3Q7ZHBsbF9pZHggJmd0Oz0gSUNFX0RQTExfUkNMS19OVU1fTUFYKSB7CiYjNDM7CQlkZXZfZXJyKGljZV9wZl90b19kZXYocGYpLAomIzQzOwkJCSYjMzQ7aW52YWxpZCBkcGxsX2lkeCBpbiBjZ3UgYWJpbGl0aWVzOiBlZWM9JXUsIHBwcz0ldVxuJiMzNDssCiYjNDM7CQkJZGUtJmd0O2RwbGxfaWR4LCBkcC0mZ3Q7ZHBsbF9pZHgpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KIAlkLSZndDtudW1faW5wdXRzID0gYWJpbGl0aWVzLm51bV9pbnB1dHM7CiAJZC0mZ3Q7bnVtX291dHB1dHMgPSBhYmlsaXRpZXMubnVtX291dHB1dHM7CiAJZC0mZ3Q7aW5wdXRfcGhhc2VfYWRqX21heCA9IGxlMzJfdG9fY3B1KGFiaWxpdGllcy5tYXhfaW5fcGhhc2VfYWRqKSAmYW1wOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaAppbmRleCAxMDNiYTNlNDkwNjgyLi5kYzZmMDk2YmYwNjlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaApAQCAtNzYsNiAmIzQzOzc2LDcgQEAgc3RydWN0IGljZV9kcGxsX3BpbiB7CiAJczMyIHBoYXNlX2FkanVzdDsKIAlzdHJ1Y3QgaWNlX2RwbGxfcGluICppbnB1dDsKIAlzdHJ1Y3QgaWNlX2RwbGxfcGluICpvdXRwdXQ7CiYjNDM7CXN0cnVjdCBpY2VfZHBsbF9waW4gKm11eGVkOwogCWVudW0gZHBsbF9waW5fZGlyZWN0aW9uIGRpcmVjdGlvbjsKIAlzNjQgcGhhc2Vfb2Zmc2V0OwogCXU4IHN0YXR1czsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjE6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3NTgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXZhbHVhdGluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgVGhpcyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggaXMgd29ydGggZnV6emluZy4gVGhlIGtleSBxdWVzdGlvbiBoZXJlIGlzIHdoZXRoZXIgdGhlIGNvZGUgdG91Y2hlcyBzb21ldGhpbmcgdGhhdCYjMzk7cyBkaWZmaWN1bHQgb3IgaW1wb3NzaWJsZSB0byByZXByb2R1Y2UgaW4gYSBzdGFuZGFyZCwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VLiBUaGUgZ3VpZGVsaW5lcyBhcmUgcHJldHR5IGNsZWFyIG9uIHdoYXQgZ2V0cyBleGNsdWRlZDogY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXphdGlvbiwgdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVycyB0aGF0IG5lZWQgZGVkaWNhdGVkIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VLCBhbmQgdGVhcmRvd24gY2FsbGJhY2tzIHRoYXQgb25seSBydW4gZHVyaW5nIGhvdC11bnBsdWcgb3BlcmF0aW9ucy4KClRoZSBwYXRjaCBtZW50aW9ucyBhIGZldyBleGFtcGxlcywgYnV0IG15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2VgLiBIbW0sIGBpY2VgLi4uIEkga25vdyB0aGF0JiMzOTtzIHRoZSBJbnRlbCBFdGhlcm5ldCBDb250cm9sbGVyIEU4MDAgc2VyaWVzIGRyaXZlci4gU28sIGlzIHRoYXQgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXI/IEFuZCBjcnVjaWFsbHksIGRvZXMgaXQgKnJlcXVpcmUqIHBoeXNpY2FsIGhhcmR3YXJlIHRoYXQgaXNuJiMzOTt0IHJlcGxpY2F0ZWQgaW4gUUVNVT8KCkkgbmVlZCB0byBuYWlsIHRoaXMgZG93bi4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgcmVyZWFkIHRob3NlIGV4Y2x1c2lvbiBjcml0ZXJpYS4gQ29kZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlIGVtdWxhdGlvbiwgaXMgb3V0LiBUaGVuLCAqc3BlY2lmaWMqIFBDSWUgZHJpdmVycyB0aGF0IHJlcXVpcmUgYWN0dWFsIGhhcmR3YXJlIHRoYXQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlLiBBbmQgdGhlbiB0aGluZ3MgbGlrZSBkcml2ZXIgdW5yZWdpc3RyYXRpb24gY2FsbGJhY2tzLgoKU28sIGJhY2sgdG8gYGljZWAuIEkga25vdyBpdCYjMzk7cyB0aGUgSW50ZWwgRTgwMCBzZXJpZXMgZHJpdmVyLCB0aGUgSW50ZWwoUikgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBMaW51eCBEcml2ZXIuIENhbiBRRU1VIHNpbXVsYXRlIGFuIEludGVsIEU4MDAgc2VyaWVzIE5JQz8gTm9wZSwgZGVmaW5pdGVseSBub3QuIFFFTVUgaGFuZGxlcyB0aGluZ3MgbGlrZSBlMTAwMCwgZTEwMDBlLCBtYXliZSBpZ2Igbm93YWRheXMsIHJ0bDgxMzksIHZpcnRpby1uZXQsIGV0Yy4sIGJ1dCBpdCBkb2VzbiYjMzk7dCBzaW11bGF0ZSB0aGUgYGljZWAgY29udHJvbGxlci4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRoaW5raW5nIHRoaXMgY291bGQgYmUgYSBwcm9ibGVtLgoKSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBpY2VgIGlzIGRlc2lnbmVkIGZvciBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG9ubHkuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvZGViYXNlIGl0c2VsZiwgYW5kIGNoZWNrIGl0cyBLY29uZmlnIGFuZCBwcm9iZSBtZWNoYW5pc20gdG8gY29uZmlybSBpZiBpdCBjYW4gYmUgZW11bGF0ZWQgb3IgaWYgaXQmIzM5O3MgcHVyZWx5IGEgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElDRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnPTI2OD1jb25maWcgSTQwRVZGXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yOTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjI5MTpjb25maWcgSUNFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTI5Mi1cdHRyaXN0YXRlIFwmIzM0O0ludGVsKFIpIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgU3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMzE5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzozMjA6Y29uZmlnIElDRV9IV01PTlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zMjEtXHRib29sIFwmIzM0O0ludGVsKFIpIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgU3VwcG9ydCBIV01PTiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zMzAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMzMTpjb25maWcgSUNFX1NXSVRDSERFVlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zMzItXHRib29sIFwmIzM0O1N3aXRjaGRldiBTdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zNDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjM0NTpjb25maWcgSUNFX0hXVFNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMzQ2LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IEhXIGNyb3NzLXRpbWVzdGFtcCBvbiBwbGF0Zm9ybXMgd2l0aCBQVE0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDQ0CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBEUExMIChEaWdpdGFsIFBoYXNlLUxvY2tlZCBMb29wKSBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgSW50ZWwgRXRoZXJuZXQgZHJpdmVyIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IGZvciB0aGUgJiMzNDtpY2UmIzM0OyBkcml2ZXIuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jYC4gTXkgcHJpbWFyeSBpbnRlcmVzdCBpcyBpbiBpbml0aWFsaXphdGlvbiDigJMgaG93IHRoZSBEUExMIGdldHMgc2V0IHVwIGluaXRpYWxseSDigJMgYW5kIHRoZW4sIGltcG9ydGFudGx5LCBob3cgaXQmIzM5O3MgKnVzZWQqIHdpdGhpbiB0aGUgbGFyZ2VyIGRyaXZlciBjb250ZXh0LiBJIG5lZWQgdG8gc2VlIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBjb250cm9sIGZsb3csIGFueSBwb3RlbnRpYWwgZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCB0byBEUExMIG9wZXJhdGlvbiwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBtb2R1bGVzIGFuZCBmdW5jdGlvbnMgd2l0aGluIHRoZSAmIzM0O2ljZSYjMzQ7IGRyaXZlci4gVGhpcyBpcyBsaWtlbHkgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgdGltaW5nIGFuZCBjbG9ja2luZyBhc3BlY3RzIG9mIHRoZSBpbnRlcmZhY2UsIGFuZCBob3cgdGhhdCBpcyBjb250cmlidXRpbmcgdG8gb3ZlcmFsbCBwZXJmb3JtYW5jZS4gSSBleHBlY3QgdGhlcmUmIzM5O3MgcHJvYmFibHkgc29tZSBpbXBvcnRhbnQgY29uc2lkZXJhdGlvbnMgcmVsYXRpbmcgdG8gcG93ZXIgbWFuYWdlbWVudCBhbmQvb3IgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0LyogQ29weXJpZ2h0IChDKSAyMDIyLCBJbnRlbCBDb3Jwb3JhdGlvbi4gKi9cbiAgIDM6XHRcbiAgIDQ6XHQjaW5jbHVkZSBcJiMzNDtpY2UuaFwmIzM0O1xuICAgNTpcdCNpbmNsdWRlIFwmIzM0O2ljZV9saWIuaFwmIzM0O1xuICAgNjpcdCNpbmNsdWRlIFwmIzM0O2ljZV90cmFjZS5oXCYjMzQ7XG4gICA3Olx0I2luY2x1ZGUgXCYjMzQ7aWNlX3R4Y2xrLmhcJiMzNDtcbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9kcGxsLmhcdTAwM2VcbiAgIDk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4gIDEwOlx0XG4gIDExOlx0I2RlZmluZSBJQ0VfQ0dVX1NUQVRFX0FDUV9FUlJfVEhSRVNIT0xEXHRcdDUwXG4gIDEyOlx0I2RlZmluZSBJQ0VfRFBMTF9QSU5fSURYX0lOVkFMSURcdFx0MHhmZlxuICAxMzpcdCNkZWZpbmUgSUNFX0RQTExfUkNMS19OVU1fUEVSX1BGXHRcdDFcbiAgMTQ6XHQjZGVmaW5lIElDRV9EUExMX1BJTl9FU1lOQ19QVUxTRV9ISUdIX1BFUkNFTlRcdDI1XG4gIDE1Olx0I2RlZmluZSBJQ0VfRFBMTF9QSU5fR0VOX1JDTEtfRlJFUVx0XHQxOTUzMTI1XG4gIDE2Olx0I2RlZmluZSBJQ0VfRFBMTF9QSU5fUFJJT19PVVRQVVRcdFx0MHhmZlxuICAxNzpcdCNkZWZpbmUgSUNFX0RQTExfSU5QVVRfUkVGX05VTVx0XHRcdDEwXG4gIDE4Olx0I2RlZmluZSBJQ0VfRFBMTF9QSEFTRV9PRkZTRVRfUEVSSU9EXHRcdDJcbiAgMTk6XHQjZGVmaW5lIElDRV9EUExMX1NXX1BJTl9JTlBVVF9CQVNFX1NGUFx0XHQ0XG4gIDIwOlx0I2RlZmluZSBJQ0VfRFBMTF9TV19QSU5fSU5QVVRfQkFTRV9RU0ZQXHRcdDZcbiAgMjE6XHQjZGVmaW5lIElDRV9EUExMX1NXX1BJTl9PVVRQVVRfQkFTRVx0XHQwXG4gIDIyOlx0XG4gIDIzOlx0I2RlZmluZSBFODI1X1JDTEtfUEFSRU5UXzBfUElOX0lEWFx0XHQwXG4gIDI0Olx0I2RlZmluZSBFODI1X1JDTEtfUEFSRU5UXzFfUElOX0lEWFx0XHQxXG4gIDI1Olx0XG4gIDI2Olx0I2RlZmluZSBJQ0VfRFBMTF9QSU5fU1dfSU5QVVRfQUJTKGluX2lkeCkgXFxcbiAgMjc6XHRcdChJQ0VfRFBMTF9TV19QSU5fSU5QVVRfQkFTRV9TRlAgJiM0MzsgKGluX2lkeCkpXG4gIDI4Olx0XG4gIDI5Olx0I2RlZmluZSBJQ0VfRFBMTF9QSU5fU1dfMV9JTlBVVF9BQlNfSURYIFxcXG4gIDMwOlx0XHQoSUNFX0RQTExfUElOX1NXX0lOUFVUX0FCUyhJQ0VfRFBMTF9QSU5fU1dfMV9JRFgpKVxuICAzMTpcdFxuICAzMjpcdCNkZWZpbmUgSUNFX0RQTExfUElOX1NXXzJfSU5QVVRfQUJTX0lEWCBcXFxuICAzMzpcdFx0KElDRV9EUExMX1BJTl9TV19JTlBVVF9BQlMoSUNFX0RQTExfUElOX1NXXzJfSURYKSlcbiAgMzQ6XHRcbiAgMzU6XHQjZGVmaW5lIElDRV9EUExMX1BJTl9TV19PVVRQVVRfQUJTKG91dF9pZHgpIFxcXG4gIDM2Olx0XHQoSUNFX0RQTExfU1dfUElOX09VVFBVVF9CQVNFICYjNDM7IChvdXRfaWR4KSlcbiAgMzc6XHRcbiAgMzg6XHQjZGVmaW5lIElDRV9EUExMX1BJTl9TV18xX09VVFBVVF9BQlNfSURYIFxcXG4gIDM5Olx0XHQoSUNFX0RQTExfUElOX1NXX09VVFBVVF9BQlMoSUNFX0RQTExfUElOX1NXXzFfSURYKSlcbiAgNDA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTA4OQoJCQkJCQkJb3V0cHV0OiA5MQoJCQkJCQkJdGhvdWdodHM6IDQwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQXNzZXNzbWVudCBmb3IgYGljZV9kcGxsLmNgIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoLiBJdCYjMzk7cyB0b3VjaGluZyBgaWNlX2RwbGwuY2AgYW5kIGBpY2VfZHBsbC5oYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgcGFydCBvZiB0aGUgSW50ZWwgYGljZWAgZHJpdmVyIGZvciB0aGUgRTgwMCBzZXJpZXMgRXRoZXJuZXQgY29udHJvbGxlcnMuIFRoaXMgaXMgc3BlY2lmaWNhbGx5IGZvY3VzZWQgb24gdGhlIERQTEwgc3Vic3lzdGVtLCBoYW5kbGluZyBhbGwgdGhlIG51YW5jZXMgb2YgdGhvc2UgcGlucywgdGhlIFNNQSBhbmQgVS5GTCBjb25uZWN0b3JzLCBDR1UsIGFuZCB0aGUgUENBOTU3NSBHUElPIGV4cGFuZGVyIOKAkyBhbGwgdGhlIGhhcmR3YXJlLXNwZWNpZmljIGRldGFpbHMuCgpOb3csIGxldCYjMzk7cyBnbyBvdmVyIHRoZSBpbnN0cnVjdGlvbnMgZm9yIGRldGVybWluaW5nIGlmIHRoaXMgY29kZSBpcyB3b3J0aCBmdXp6aW5nLiBUaGUga2V5IGhlcmUgaXMgdGhlICYjMzQ7aW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMmIzM0OyBjbGF1c2UuIFNwZWNpZmljYWxseSwgaXQgbm90ZXMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoIGFuZCBTbWFydE5JQyBkcml2ZXJzIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSBhcmVuJiMzOTt0IGZ1enphYmxlIGluIHN0YW5kYXJkIFFFTVUuCgpUaGUgYGljZWAgZHJpdmVyIGlzICpwcmVjaXNlbHkqIHRoYXQ6IGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBkcml2ZXIgZm9yIEludGVsJiMzOTtzIEU4MDAgc2VyaWVzLiBJdCYjMzk7cyBkZXNpZ25lZCB0byBpbnRlcmZhY2UgZGlyZWN0bHkgd2l0aCBwaHlzaWNhbCBJbnRlbCBoYXJkd2FyZS4gVGhlIERQTEwgZnVuY3Rpb25hbGl0eSwgd2hpY2ggdGhpcyBwYXRjaCBtb2RpZmllcywgaXMgZGVwZW5kZW50IG9uIHNwZWNpZmljIGhhcmR3YXJlIGJvYXJkcyB0aGF0IEkmIzM5O2QgbmVlZCB0byBmdXp6IHRoZXNlIGNvZGUgcGF0aHMuIFRoaXMgaXMgZmFyIGZyb20gYmVpbmcgcG9zc2libGUgaW4gYSBzdGFuZGFyZCBRRU1VIGluc3RhbmNlLCBhbmQgY2VydGFpbmx5IG5vdCBzb21ldGhpbmcgdGhhdCBjYW4gYmUgcHJhY3RpY2FsbHkgdGVzdGVkIGluIHNvbWV0aGluZyBsaWtlIEdDRSBvciBTeXprYWxsZXIgVk1zLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBoYXJkd2FyZS1zcGVjaWZpYyBEUExMIC8gQ0dVIC8gU01BIHBpbiBhY2Nlc3MuCgpUaGVyZWZvcmUsIGdpdmVuIHRoYXQgaXQgcmVxdWlyZXMgKnBoeXNpY2FsKiBJbnRlbCBFODAwIGhhcmR3YXJlLCBhbmQgdGhhdCB0aGlzIGNvZGUmIzM5O3MgZnVuY3Rpb25hbGl0eSBpcyBkaXJlY3RseSB0aWVkIHRvIHRoaXMgaGFyZHdhcmUsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IHRoaXMgaXNuJiMzOTt0IHdvcnRoIGZ1enppbmcgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLgoKU28sIGxldCYjMzk7cyBzb2xpZGlmeSB0aGUgYXNzZXNzbWVudDoKCiogICAqKldvcnRoRnV6emluZzogZmFsc2UqKgoqICAgKipGb2N1c1N5bWJvbHM6IFxbIF0qKgoqICAgKipFbmFibGVDb25maWdzOiBcWyBdKioKKiAgICoqUmVhc29uaW5nOiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEU4MDAgc2VyaWVzIGV0aGVybmV0IGRyaXZlciAoYGljZWApLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZXNlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuKioKClRoYXQgc2hvdWxkIGNvdmVyIGl0LiBSZWFkeSB0byBzdWJtaXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBjaGFuZ2VzIG1vZGlmeSB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyAoaWNlKSBkcml2ZXIgRFBMTCBwaW4gaGFuZGxpbmcuIFRoZSBpY2UgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIEludGVsIEU4MDAgc2VyaWVzIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBjaGFuZ2VzIG1vZGlmeSB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyAoaWNlKSBkcml2ZXIgRFBMTCBwaW4gaGFuZGxpbmcuIFRoZSBpY2UgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIEludGVsIEU4MDAgc2VyaWVzIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIxOjQ0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTo0Mzo1MS41OTQ1NDkyNDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjU5NTkwMDQzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgbW9kaWZ5IHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIChpY2UpIGRyaXZlciBEUExMIHBpbiBoYW5kbGluZy4gVGhlIGljZSBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgSW50ZWwgRTgwMCBzZXJpZXMgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQzOjUxLjU5NDU1Mzc5N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwOTY2NTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMWIwZjA2NjMwZjg0NDQyZjg3MDUyNjJlMTAzZmNjZDhiYmQxYzUyZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMTo0Mzo1MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jXFxuaW5kZXggODVhNzRjZDZlYTFmMy4uY2ZmYzlkNzM3ZGMyZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jXFxuQEAgLTg5LDYgKzg5LDI5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fZnJlcXVlbmN5IGljZV9lc3luY19yYW5nZVtdID0ge1xcbiBcXHREUExMX1BJTl9GUkVRVUVOQ1lfUkFOR0UoMCwgRFBMTF9QSU5fRlJFUVVFTkNZXzFfSFopLFxcbiB9O1xcbiBcXG4rLypcXG4rICogU01BMS9VLkZMMSBNVVggdGFibGVcXG4rICorLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcXG4rICp8ICAgICAgICAgICAgICAgIHwgU01BMV9ESVJfRU4gfCBTTUExX1RYX0VOIHxcXG4rICorLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcXG4rICp8U01BMSBSWCBFbmFibGUgIHwgICAgICAgMCAgICAgfCAgICAgIHggICAgIHxcXG4rICp8dS5GTDEgVFggRW5hYmxlIHwgICAgICAgMCAgICAgfCAgICAgIDAgICAgIHxcXG4rICp8U01BMSBUWCBFbmFibGUgIHwgICAgICAgMSAgICAgfCAgICAgIDAgICAgIHxcXG4rICp8QWxsIERpc2FibGUgICAgIHwgICAgICAgMSAgICAgfCAgICAgIDEgICAgIHxcXG4rICorLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcXG4rICpcXG4rICogU01BMi9VLkZMMiBNVVggdGFibGVcXG4rICorLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXFxuKyAqfCAgICAgICAgICAgICAgICB8IFNNQTJfRElSX0VOIHwgU01BMl9UWF9FTiB8IFVGTDJfUlhfRU4gfFxcbisgKistLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcXG4rICp8U01BMiBSWCBFbmFibGUgIHwgICAgICAgMCAgICAgfCAgICAgIHggICAgIHwgICAgIHggICAgICB8XFxuKyAqfHUuRkwyIFJYIEVuYWJsZSB8ICAgICAgIDEgICAgIHwgICAgICB4ICAgICB8ICAgICAwICAgICAgfFxcbisgKnxTTUEyIFRYIEVuYWJsZSAgfCAgICAgICAxICAgICB8ICAgICAgMCAgICAgfCAgICAgeCAgICAgIHxcXG4rICp8U01BMiBEaXNhYmxlICAgIHwgICAgICAgMSAgICAgfCAgICAgIDEgICAgIHwgICAgIHggICAgICB8XFxuKyAqfEFsbCBEaXNhYmxlICAgICB8ICAgICAgIDEgICAgIHwgICAgICAxICAgICB8ICAgICAxICAgICAgfFxcbisgKistLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcXG4rICovXFxuK1xcbiAvKipcXG4gICogaWNlX2RwbGxfaXNfc3dfcGluIC0gY2hlY2sgaWYgZ2l2ZW4gcGluIHNoYWxsIGJlIGNvbnRyb2xsZWQgYnkgU1dcXG4gICogQHBmOiBwcml2YXRlIGJvYXJkIHN0cnVjdHVyZVxcbkBAIC00NDMsNiArNDY2LDQwIEBAIGljZV9kcGxsX3N3X3Bpbl9mcmVxdWVuY3lfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBpY2VfZHBsbF9nZXRfZmFsbGJhY2tfaWR4KHN0cnVjdCBpY2VfZHBsbHMgKmQsIHN0cnVjdCBpY2VfZHBsbF9waW4gKnRhcmdldClcXG4re1xcbitcXHRpZiAoZC1cXHUwMDNlcHBzLmRwbGxfaWR4IFxcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICB0YXJnZXQtXFx1MDAzZXN0YXRlW2QtXFx1MDAzZXBwcy5kcGxsX2lkeF0gPT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEKVxcbitcXHRcXHRyZXR1cm4gZC1cXHUwMDNlcHBzLmRwbGxfaWR4O1xcbitcXG4rXFx0aWYgKGQtXFx1MDAzZWVlYy5kcGxsX2lkeCBcXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgdGFyZ2V0LVxcdTAwM2VzdGF0ZVtkLVxcdTAwM2VlZWMuZHBsbF9pZHhdID09IERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRClcXG4rXFx0XFx0cmV0dXJuIGQtXFx1MDAzZWVlYy5kcGxsX2lkeDtcXG4rXFxuK1xcdHJldHVybiAtRUlOVkFMO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpY2VfZHBsbF9nZXRfcGVlcl90YXJnZXQoc3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcixcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaWNlX2RwbGxfcGluICoqcGVlcl90YXJnZXQsXFxuK1xcdFxcdFxcdFxcdCAgICAgZW51bSBpY2VfZHBsbF9waW5fdHlwZSAqcGVlcl90eXBlKVxcbit7XFxuK1xcdCpwZWVyX3RhcmdldCA9IE5VTEw7XFxuK1xcdCpwZWVyX3R5cGUgPSAwO1xcbitcXG4rXFx0c3dpdGNoIChwZWVyLVxcdTAwM2VkaXJlY3Rpb24pIHtcXG4rXFx0Y2FzZSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUOlxcbitcXHRcXHQqcGVlcl90YXJnZXQgPSBwZWVyLVxcdTAwM2VvdXRwdXQ7XFxuK1xcdFxcdCpwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIERQTExfUElOX0RJUkVDVElPTl9JTlBVVDpcXG4rXFx0XFx0KnBlZXJfdGFyZ2V0ID0gcGVlci1cXHUwMDNlaW5wdXQ7XFxuK1xcdFxcdCpwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBpY2VfZHBsbF9waW5fZW5hYmxlIC0gZW5hYmxlIGEgcGluIG9uIGRwbGxzXFxuICAqIEBodzogYm9hcmQgcHJpdmF0ZSBodyBzdHJ1Y3R1cmVcXG5AQCAtNTM4LDYgKzU5NSwyOSBAQCBpY2VfZHBsbF9waW5fZGlzYWJsZShzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbisvKipcXG4rICogaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyIC0gbm90aWZ5IHRoZSBwYWlyZWQgU1cgcGluIGFmdGVyIGEgc3RhdGUgY2hhbmdlXFxuKyAqIEBjaGFuZ2VkOiB0aGUgU1cgcGluIHRoYXQgd2FzIGV4cGxpY2l0bHkgY2hhbmdlZCAoYWxyZWFkeSBub3RpZmllZCBieSBkcGxsIGNvcmUpXFxuKyAqXFxuKyAqIFNNQSBhbmQgVS5GTCBwaW5zIHNoYXJlIHBoeXNpY2FsIHNpZ25hbCBwYXRocyBpbiBwYWlycyAoU01BMS9VLkZMMSBhbmRcXG4rICogU01BMi9VLkZMMikuICBXaGVuIG9uZSBwaW4ncyByb3V0aW5nIGNoYW5nZXMgdmlhIHRoZSBQQ0E5NTc1IEdQSU9cXG4rICogZXhwYW5kZXIsIHRoZSBwYWlyZWQgcGluJ3Mgc3RhdGUgbWF5IGFsc28gY2hhbmdlLiAgU2VuZCBhIGNoYW5nZVxcbisgKiBub3RpZmljYXRpb24gZm9yIHRoZSBwZWVyIHBpbiBzbyB1c2Vyc3BhY2UgY29uc3VtZXJzIG1vbml0b3JpbmcgdGhlXFxuKyAqIHBlZXIgdmlhIGRwbGwgbmV0bGluayBsZWFybiBhYm91dCB0aGUgdXBkYXRlLlxcbisgKlxcbisgKiBDb250ZXh0OiBDYWxsZWQgZnJvbSBkcGxsX3Bpbl9vcHMgY2FsbGJhY2tzIGFmdGVyIHBmLVxcdTAwM2VkcGxscy5sb2NrIGlzXFxuKyAqICAgICAgICAgIHJlbGVhc2VkLiAgVXNlcyBfX2RwbGxfcGluX2NoYW5nZV9udGYoKSBiZWNhdXNlIGRwbGxfbG9jayBpc1xcbisgKiAgICAgICAgICBzdGlsbCBoZWxkIGJ5IHRoZSBkcGxsIG5ldGxpbmsgbGF5ZXIuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoc3RydWN0IGljZV9kcGxsX3BpbiAqY2hhbmdlZClcXG4re1xcbitcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyO1xcbitcXG4rXFx0cGVlciA9IGNoYW5nZWQtXFx1MDAzZW11eGVkO1xcbitcXHRpZiAocGVlciBcXHUwMDI2XFx1MDAyNiBwZWVyLVxcdTAwM2VwaW4pXFxuK1xcdFxcdF9fZHBsbF9waW5fY2hhbmdlX250ZihwZWVyLVxcdTAwM2VwaW4pO1xcbit9XFxuK1xcbiAvKipcXG4gICogaWNlX2RwbGxfcGluX3N0b3JlX3N0YXRlIC0gdXBkYXRlcyB0aGUgc3RhdGUgb2YgcGluIGluIFNXIGJvb2trZWVwaW5nXFxuICAqIEBwaW46IHBvaW50ZXIgdG8gYSBwaW5cXG5AQCAtNzA5LDYgKzc4OSw4IEBAIGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfZHBsbF9waW4gKnBpbixcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4gXFx0dTggcGFyZW50LCBwb3J0X251bSA9IElDRV9BUUNfU0VUX1BIWV9SRUNfQ0xLX09VVF9DVVJSX1BPUlQ7XFxuK1xcdGVudW0gZHBsbF9waW5fc3RhdGUgZWVjX3N0YXRlID0gRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xcbitcXHRlbnVtIGRwbGxfcGluX3N0YXRlIHBwc19zdGF0ZSA9IERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdHN3aXRjaCAocGluX3R5cGUpIHtcXG5AQCAtNzIwLDI2ICs4MDIsMjYgQEAgaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLFxcbiBcXHRcXHRcXHRnb3RvIGVycjtcXG4gXFx0XFx0aWYgKElDRV9BUUNfR0VUX0NHVV9JTl9DRkdfRkxHMl9JTlBVVF9FTiBcXHUwMDI2IHBpbi1cXHUwMDNlZmxhZ3NbMF0pIHtcXG4gXFx0XFx0XFx0aWYgKHBpbi1cXHUwMDNlcGluKSB7XFxuLVxcdFxcdFxcdFxcdHBpbi1cXHUwMDNlc3RhdGVbcGYtXFx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxcbitcXHRcXHRcXHRcXHRlZWNfc3RhdGUgPVxcbiBcXHRcXHRcXHRcXHRcXHRwaW4tXFx1MDAzZXBpbiA9PSBwZi1cXHUwMDNlZHBsbHMuZWVjLmFjdGl2ZV9pbnB1dCA/XFxuIFxcdFxcdFxcdFxcdFxcdERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCA6XFxuIFxcdFxcdFxcdFxcdFxcdERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7XFxuLVxcdFxcdFxcdFxcdHBpbi1cXHUwMDNlc3RhdGVbcGYtXFx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxcbitcXHRcXHRcXHRcXHRwcHNfc3RhdGUgPVxcbiBcXHRcXHRcXHRcXHRcXHRwaW4tXFx1MDAzZXBpbiA9PSBwZi1cXHUwMDNlZHBsbHMucHBzLmFjdGl2ZV9pbnB1dCA/XFxuIFxcdFxcdFxcdFxcdFxcdERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCA6XFxuIFxcdFxcdFxcdFxcdFxcdERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7XFxuIFxcdFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdFxcdHBpbi1cXHUwMDNlc3RhdGVbcGYtXFx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxcbi1cXHRcXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xcbi1cXHRcXHRcXHRcXHRwaW4tXFx1MDAzZXN0YXRlW3BmLVxcdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID1cXG4tXFx0XFx0XFx0XFx0XFx0RFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcXG4rXFx0XFx0XFx0XFx0ZWVjX3N0YXRlID0gRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcXG4rXFx0XFx0XFx0XFx0cHBzX3N0YXRlID0gRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRwaW4tXFx1MDAzZXN0YXRlW3BmLVxcdTAwM2VkcGxscy5lZWMuZHBsbF9pZHhdID1cXG4tXFx0XFx0XFx0XFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xcbi1cXHRcXHRcXHRwaW4tXFx1MDAzZXN0YXRlW3BmLVxcdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID1cXG4tXFx0XFx0XFx0XFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xcbiBcXHRcXHR9XFxuK1xcdFxcdC8qIENvbW1pdCBvbmx5IGFmdGVyIGEgc3VjY2Vzc2Z1bCByZWFkIHNvIGxvY2tsZXNzIHJlYWRlcnMgbmV2ZXJcXG4rXFx0XFx0ICogb2JzZXJ2ZSBhIHRyYW5zaWVudCBkaXNjb25uZWN0ZWQgc3RhdGUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAocGYtXFx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeCBcXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWClcXG4rXFx0XFx0XFx0cGluLVxcdTAwM2VzdGF0ZVtwZi1cXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4XSA9IGVlY19zdGF0ZTtcXG4rXFx0XFx0aWYgKHBmLVxcdTAwM2VkcGxscy5wcHMuZHBsbF9pZHggXFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpXFxuK1xcdFxcdFxcdHBpbi1cXHUwMDNlc3RhdGVbcGYtXFx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPSBwcHNfc3RhdGU7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDpcXG4gXFx0XFx0cmV0ID0gaWNlX2FxX2dldF9vdXRwdXRfcGluX2NmZyhcXHUwMDI2cGYtXFx1MDAzZWh3LCBwaW4tXFx1MDAzZWlkeCxcXG5AQCAtNzUwLDIwICs4MzIsMTcgQEAgaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLFxcbiBcXG4gXFx0XFx0cGFyZW50IFxcdTAwMjY9IElDRV9BUUNfR0VUX0NHVV9PVVRfQ0ZHX0RQTExfU1JDX1NFTDtcXG4gXFx0XFx0aWYgKElDRV9BUUNfR0VUX0NHVV9PVVRfQ0ZHX09VVF9FTiBcXHUwMDI2IHBpbi1cXHUwMDNlZmxhZ3NbMF0pIHtcXG4tXFx0XFx0XFx0cGluLVxcdTAwM2VzdGF0ZVtwZi1cXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4XSA9XFxuLVxcdFxcdFxcdFxcdHBhcmVudCA9PSBwZi1cXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4ID9cXG4rXFx0XFx0XFx0ZWVjX3N0YXRlID0gcGFyZW50ID09IHBmLVxcdTAwM2VkcGxscy5lZWMuZHBsbF9pZHggP1xcbiBcXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxcbiBcXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XFxuLVxcdFxcdFxcdHBpbi1cXHUwMDNlc3RhdGVbcGYtXFx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxcbi1cXHRcXHRcXHRcXHRwYXJlbnQgPT0gcGYtXFx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeCA/XFxuK1xcdFxcdFxcdHBwc19zdGF0ZSA9IHBhcmVudCA9PSBwZi1cXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4ID9cXG4gXFx0XFx0XFx0XFx0RFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEIDpcXG4gXFx0XFx0XFx0XFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xcbi1cXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRwaW4tXFx1MDAzZXN0YXRlW3BmLVxcdTAwM2VkcGxscy5lZWMuZHBsbF9pZHhdID1cXG4tXFx0XFx0XFx0XFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xcbi1cXHRcXHRcXHRwaW4tXFx1MDAzZXN0YXRlW3BmLVxcdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID1cXG4tXFx0XFx0XFx0XFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xcbiBcXHRcXHR9XFxuK1xcdFxcdGlmIChwZi1cXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4IFxcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYKVxcbitcXHRcXHRcXHRwaW4tXFx1MDAzZXN0YXRlW3BmLVxcdTAwM2VkcGxscy5lZWMuZHBsbF9pZHhdID0gZWVjX3N0YXRlO1xcbitcXHRcXHRpZiAocGYtXFx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeCBcXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWClcXG4rXFx0XFx0XFx0cGluLVxcdTAwM2VzdGF0ZVtwZi1cXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4XSA9IHBwc19zdGF0ZTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgSUNFX0RQTExfUElOX1RZUEVfUkNMS19JTlBVVDpcXG4gXFx0XFx0aWYgKHBmLVxcdTAwM2Vody5tYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNSkge1xcbkBAIC0xMTYzLDMwICsxMjQyLDg1IEBAIGljZV9kcGxsX2lucHV0X3N0YXRlX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGV4dGFjaywgSUNFX0RQTExfUElOX1RZUEVfSU5QVVQpO1xcbiB9XFxuIFxcbi0vKipcXG4tICogaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyIC0gbm90aWZ5IHRoZSBwYWlyZWQgU1cgcGluIGFmdGVyIGEgc3RhdGUgY2hhbmdlXFxuLSAqIEBkOiBwb2ludGVyIHRvIGRwbGxzIHN0cnVjdFxcbi0gKiBAY2hhbmdlZDogdGhlIFNXIHBpbiB0aGF0IHdhcyBleHBsaWNpdGx5IGNoYW5nZWQgKGFscmVhZHkgbm90aWZpZWQgYnkgZHBsbCBjb3JlKVxcbi0gKlxcbi0gKiBTTUEgYW5kIFUuRkwgcGlucyBzaGFyZSBwaHlzaWNhbCBzaWduYWwgcGF0aHMgaW4gcGFpcnMgKFNNQTEvVS5GTDEgYW5kXFxuLSAqIFNNQTIvVS5GTDIpLiAgV2hlbiBvbmUgcGluJ3Mgcm91dGluZyBjaGFuZ2VzIHZpYSB0aGUgUENBOTU3NSBHUElPXFxuLSAqIGV4cGFuZGVyLCB0aGUgcGFpcmVkIHBpbidzIHN0YXRlIG1heSBhbHNvIGNoYW5nZS4gIFNlbmQgYSBjaGFuZ2VcXG4tICogbm90aWZpY2F0aW9uIGZvciB0aGUgcGVlciBwaW4gc28gdXNlcnNwYWNlIGNvbnN1bWVycyBtb25pdG9yaW5nIHRoZVxcbi0gKiBwZWVyIHZpYSBkcGxsIG5ldGxpbmsgbGVhcm4gYWJvdXQgdGhlIHVwZGF0ZS5cXG4tICpcXG4tICogQ29udGV4dDogQ2FsbGVkIGZyb20gZHBsbF9waW5fb3BzIGNhbGxiYWNrcyBhZnRlciBwZi1cXHUwMDNlZHBsbHMubG9jayBpc1xcbi0gKiAgICAgICAgICByZWxlYXNlZC4gIFVzZXMgX19kcGxsX3Bpbl9jaGFuZ2VfbnRmKCkgYmVjYXVzZSBkcGxsX2xvY2sgaXNcXG4tICogICAgICAgICAgc3RpbGwgaGVsZCBieSB0aGUgZHBsbCBuZXRsaW5rIGxheWVyLlxcbi0gKi9cXG4tc3RhdGljIHZvaWQgaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKHN0cnVjdCBpY2VfZHBsbHMgKmQsXFxuLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpY2VfZHBsbF9waW4gKmNoYW5nZWQpXFxuK3N0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIHtcXG4rXFx0Ym9vbCBlbmFibGVkO1xcbitcXHR1OCBkcGxsX2lkeDtcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnRcXG4raWNlX2RwbGxfcGluX2NvbmZpZ19nZXQoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfZHBsbF9waW4gKnRhcmdldCxcXG4rXFx0XFx0XFx0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlLFxcbitcXHRcXHRcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyAqY29uZmlnLFxcbitcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4tXFx0c3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcjtcXG4rXFx0aW50IHJldDtcXG4gXFxuLVxcdHBlZXIgPSAoY2hhbmdlZCBcXHUwMDNlPSBkLVxcdTAwM2VzbWEgXFx1MDAyNlxcdTAwMjYgY2hhbmdlZCBcXHUwMDNjIGQtXFx1MDAzZXNtYSArIElDRV9EUExMX1BJTl9TV19OVU0pID9cXG4tXFx0XFx0XFx1MDAyNmQtXFx1MDAzZXVmbFtjaGFuZ2VkLVxcdTAwM2VpZHhdIDogXFx1MDAyNmQtXFx1MDAzZXNtYVtjaGFuZ2VkLVxcdTAwM2VpZHhdO1xcbi1cXHRpZiAocGVlci1cXHUwMDNlcGluKVxcbi1cXHRcXHRfX2RwbGxfcGluX2NoYW5nZV9udGYocGVlci1cXHUwMDNlcGluKTtcXG4rXFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0c3dpdGNoICh0eXBlKSB7XFxuK1xcdGNhc2UgSUNFX0RQTExfUElOX1RZUEVfSU5QVVQ6XFxuK1xcdFxcdGNvbmZpZy1cXHUwMDNlZW5hYmxlZCA9IHRhcmdldC1cXHUwMDNlZmxhZ3NbMF0gXFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgIElDRV9BUUNfR0VUX0NHVV9JTl9DRkdfRkxHMl9JTlBVVF9FTjtcXG4rXFx0XFx0Y29uZmlnLVxcdTAwM2VkcGxsX2lkeCA9IDA7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRjYXNlIElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDpcXG4rXFx0XFx0Y29uZmlnLVxcdTAwM2VlbmFibGVkID0gdGFyZ2V0LVxcdTAwM2VmbGFnc1swXSBcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdCAgSUNFX0FRQ19HRVRfQ0dVX09VVF9DRkdfT1VUX0VOO1xcbitcXHRcXHRpZiAoIWNvbmZpZy1cXHUwMDNlZW5hYmxlZCkge1xcbitcXHRcXHRcXHRjb25maWctXFx1MDAzZWRwbGxfaWR4ID0gMDtcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHJldCA9IGljZV9kcGxsX2dldF9mYWxsYmFja19pZHgoXFx1MDAyNnBmLVxcdTAwM2VkcGxscywgdGFyZ2V0KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGNvbmZpZy1cXHUwMDNlZHBsbF9pZHggPSByZXQ7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK2ljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqdGFyZ2V0LFxcbitcXHRcXHRcXHQgICAgZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlLFxcbitcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGljZV9kcGxsX3Bpbl9jb25maWcgKmNvbmZpZyxcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaywgaW50IGluaXRfZXJyKVxcbit7XFxuK1xcdGludCByZXN0b3JlX2VyciwgdXBkYXRlX2VycjtcXG4rXFxuK1xcdGlmIChjb25maWctXFx1MDAzZWVuYWJsZWQpXFxuK1xcdFxcdHJlc3RvcmVfZXJyID0gaWNlX2RwbGxfcGluX2VuYWJsZShcXHUwMDI2cGYtXFx1MDAzZWh3LCB0YXJnZXQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgY29uZmlnLVxcdTAwM2VkcGxsX2lkeCwgdHlwZSwgZXh0YWNrKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRyZXN0b3JlX2VyciA9IGljZV9kcGxsX3Bpbl9kaXNhYmxlKFxcdTAwMjZwZi1cXHUwMDNlaHcsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcXG4rXFx0dXBkYXRlX2VyciA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcXG4rXFx0aWYgKHJlc3RvcmVfZXJyIHx8IHVwZGF0ZV9lcnIpIHtcXG4rXFx0XFx0ZGV2X3dhcm4oaWNlX3BmX3RvX2RldihwZiksXFxuK1xcdFxcdFxcdCBcXFwiRmFpbGVkIHRvIHJvbGxiYWNrIHBpbiBzdGF0ZTogZXJyICVkLCByZXN0b3JlIGVyciAlZCwgdXBkYXRlIGVyciAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0IGluaXRfZXJyLCByZXN0b3JlX2VyciwgdXBkYXRlX2Vycik7XFxuK1xcdFxcdHJldHVybiByZXN0b3JlX2VyciA/IHJlc3RvcmVfZXJyIDogdXBkYXRlX2VycjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaWNlX2RwbGxfcmVzdG9yZV9zbWFfY3RybChzdHJ1Y3QgaWNlX3BmICpwZiwgdTggb2xkX2RhdGEsXFxuK1xcdFxcdFxcdFxcdCAgICAgaW50IGluaXRfZXJyKVxcbit7XFxuK1xcdGludCByZXN0b3JlX2VycjtcXG4rXFxuK1xcdHJlc3RvcmVfZXJyID0gaWNlX3dyaXRlX3NtYV9jdHJsKFxcdTAwMjZwZi1cXHUwMDNlaHcsIG9sZF9kYXRhKTtcXG4rXFx0aWYgKCFyZXN0b3JlX2VycilcXG4rXFx0XFx0cmVzdG9yZV9lcnIgPSBpY2VfZHBsbF9zd19waW5zX3VwZGF0ZShwZik7XFxuK1xcdGlmIChyZXN0b3JlX2VycilcXG4rXFx0XFx0ZGV2X3dhcm4oaWNlX3BmX3RvX2RldihwZiksXFxuK1xcdFxcdFxcdCBcXFwiRmFpbGVkIHRvIHJlc3RvcmUgU01BIGNvbnRyb2w6IGVyciAlZCwgcmVzdG9yZSBlcnIgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCBpbml0X2VyciwgcmVzdG9yZV9lcnIpO1xcbitcXG4rXFx0cmV0dXJuIHJlc3RvcmVfZXJyO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMTIwNiwzMCArMTM0MCwzOSBAQCBzdGF0aWMgaW50IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHN0cnVjdCBpY2VfZHBsbF9waW4gKnAsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGVudW0gZHBsbF9waW5fZGlyZWN0aW9uIGRpcmVjdGlvbixcXG4gXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuK1xcdHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIHBlZXJfY29uZmlnO1xcbiBcXHRzdHJ1Y3QgaWNlX2RwbGxzICpkID0gXFx1MDAyNnAtXFx1MDAzZXBmLVxcdTAwM2VkcGxscztcXG4rXFx0aW50IHBlZXJfZHBsbF9pZHgsIHJlc3RvcmVfZXJyLCByZXQ7XFxuK1xcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnRhcmdldCA9IE5VTEw7XFxuK1xcdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZSA9IDA7XFxuIFxcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXI7XFxuLVxcdHU4IGRhdGE7XFxuLVxcdGludCByZXQ7XFxuK1xcdHU4IGRhdGEsIG9sZF9kYXRhID0gMDtcXG4gXFxuIFxcdGlmIChwLVxcdTAwM2VkaXJlY3Rpb24gPT0gZGlyZWN0aW9uIFxcdTAwMjZcXHUwMDI2IHAtXFx1MDAzZWFjdGl2ZSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdHJldCA9IGljZV9yZWFkX3NtYV9jdHJsKFxcdTAwMjZwLVxcdTAwM2VwZi1cXHUwMDNlaHcsIFxcdTAwMjZkYXRhKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0b2xkX2RhdGEgPSBkYXRhO1xcbiBcXG4gXFx0c3dpdGNoIChwLVxcdTAwM2VpZHgpIHtcXG4gXFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFg6XFxuLVxcdFxcdGRhdGEgXFx1MDAyNj0gfklDRV9TTUExX01BU0s7XFxuLVxcdFxcdGlmIChkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVClcXG4rXFx0XFx0aWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKSB7XFxuK1xcdFxcdFxcdGRhdGEgXFx1MDAyNj0gfklDRV9TTUExX1RYX0VOO1xcbiBcXHRcXHRcXHRkYXRhIHw9IElDRV9TTUExX0RJUl9FTjtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0ZGF0YSBcXHUwMDI2PSB+SUNFX1NNQTFfRElSX0VOO1xcbitcXHRcXHRcXHRkYXRhIFxcdTAwMjY9IH5JQ0VfU01BMV9UWF9FTjtcXG4rXFx0XFx0fVxcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFg6XFxuIFxcdFxcdGlmIChkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUKSB7XFxuIFxcdFxcdFxcdGRhdGEgXFx1MDAyNj0gfklDRV9TTUEyX0RJUl9FTjtcXG4tXFx0XFx0XFx0ZGF0YSB8PSBJQ0VfU01BMl9VRkwyX1JYX0RJUztcXG4rXFx0XFx0XFx0ZGF0YSBcXHUwMDI2PSB+SUNFX1NNQTJfVFhfRU47XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdGRhdGEgXFx1MDAyNj0gfihJQ0VfU01BMl9UWF9FTiB8IElDRV9TTUEyX1VGTDJfUlhfRElTKTtcXG4gXFx0XFx0XFx0ZGF0YSB8PSBJQ0VfU01BMl9ESVJfRU47XFxuK1xcdFxcdFxcdGRhdGEgXFx1MDAyNj0gfklDRV9TTUEyX1VGTDJfUlhfRElTO1xcbitcXHRcXHRcXHRkYXRhIFxcdTAwMjY9IH5JQ0VfU01BMl9UWF9FTjtcXG4gXFx0XFx0fVxcbiBcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG5AQCAtMTI0MSw3ICsxMzg0LDcgQEAgc3RhdGljIGludCBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRJQ0VfRFBMTF9QSU5fVFlQRV9TT0ZUV0FSRSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ZXh0YWNrKTtcXG4gXFx0aWYgKHJldClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0Z290byByZXN0b3JlX3NtYTtcXG4gXFxuIFxcdC8qIFdoZW4gYSBkaXJlY3Rpb24gY2hhbmdlIGFjdGl2YXRlcyB0aGUgcGFpcmVkIFUuRkwgcGluLCBlbmFibGVcXG4gXFx0ICogaXRzIGJhY2tpbmcgQ0dVIHBpbiBzbyB0aGUgcGluIHJlcG9ydHMgYXMgY29ubmVjdGVkLiBXaXRob3V0XFxuQEAgLTEyNTAsMjUgKzEzOTMsNDYgQEAgc3RhdGljIGludCBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwLFxcbiBcXHQgKiBiYWNraW5nIHBpbiB3aGVuIFUuRkwgYmVjb21lcyBpbmFjdGl2ZSBiZWNhdXNlIHRoZSBTTUEgcGluIG1heVxcbiBcXHQgKiBzdGlsbCBiZSB1c2luZyBpdC5cXG4gXFx0ICovXFxuLVxcdHBlZXIgPSBcXHUwMDI2ZC1cXHUwMDNldWZsW3AtXFx1MDAzZWlkeF07XFxuK1xcdHBlZXIgPSBwLVxcdTAwM2VtdXhlZDtcXG4gXFx0aWYgKHBlZXItXFx1MDAzZWFjdGl2ZSkge1xcbi1cXHRcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICp0YXJnZXQ7XFxuLVxcdFxcdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZTtcXG4tXFxuIFxcdFxcdGlmIChwZWVyLVxcdTAwM2VvdXRwdXQpIHtcXG4gXFx0XFx0XFx0dGFyZ2V0ID0gcGVlci1cXHUwMDNlb3V0cHV0O1xcbiBcXHRcXHRcXHR0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUO1xcbi1cXHRcXHR9IGVsc2Uge1xcbitcXHRcXHR9IGVsc2UgaWYgKHBlZXItXFx1MDAzZWlucHV0KSB7XFxuIFxcdFxcdFxcdHRhcmdldCA9IHBlZXItXFx1MDAzZWlucHV0O1xcbiBcXHRcXHRcXHR0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfSU5QVVQ7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdGdvdG8gcmVzdG9yZV9zbWE7XFxuIFxcdFxcdH1cXG4tXFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZShcXHUwMDI2cC1cXHUwMDNlcGYtXFx1MDAzZWh3LCB0YXJnZXQsXFxuLVxcdFxcdFxcdFxcdFxcdCAgZC1cXHUwMDNlZWVjLmRwbGxfaWR4LCB0eXBlLCBleHRhY2spO1xcbi1cXHRcXHRpZiAoIXJldClcXG4tXFx0XFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwLVxcdTAwM2VwZiwgdGFyZ2V0LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHR0eXBlLCBleHRhY2spO1xcbitcXG4rXFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX2NvbmZpZ19nZXQocC1cXHUwMDNlcGYsIHRhcmdldCwgdHlwZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnBlZXJfY29uZmlnLCBleHRhY2spO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIHJlc3RvcmVfc21hO1xcbitcXG4rXFx0XFx0cGVlcl9kcGxsX2lkeCA9IGljZV9kcGxsX2dldF9mYWxsYmFja19pZHgoZCwgdGFyZ2V0KTtcXG4rXFx0XFx0aWYgKHBlZXJfZHBsbF9pZHggXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRwZWVyX2RwbGxfaWR4ID0gZC1cXHUwMDNlZWVjLmRwbGxfaWR4O1xcbitcXHRcXHRyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKFxcdTAwMjZwLVxcdTAwM2VwZi1cXHUwMDNlaHcsIHRhcmdldCwgcGVlcl9kcGxsX2lkeCxcXG4rXFx0XFx0XFx0XFx0XFx0ICB0eXBlLCBleHRhY2spO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIHJlc3RvcmVfcGVlcjtcXG4rXFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwLVxcdTAwM2VwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIHJlc3RvcmVfcGVlcjtcXG4gXFx0fVxcbiBcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbityZXN0b3JlX3BlZXI6XFxuK1xcdHJlc3RvcmVfZXJyID1cXG4rXFx0XFx0aWNlX2RwbGxfcGluX2NvbmZpZ19yZXN0b3JlKHAtXFx1MDAzZXBmLCB0YXJnZXQsIHR5cGUsIFxcdTAwMjZwZWVyX2NvbmZpZyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGV4dGFjaywgcmV0KTtcXG4rXFx0aWYgKHJlc3RvcmVfZXJyKVxcbitcXHRcXHRyZXQgPSByZXN0b3JlX2VycjtcXG4rcmVzdG9yZV9zbWE6XFxuK1xcdGljZV9kcGxsX3Jlc3RvcmVfc21hX2N0cmwocC1cXHUwMDNlcGYsIG9sZF9kYXRhLCByZXQpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbkBAIC0xMjk0LDE0ICsxNDU4LDE4IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcXG4gXFx0XFx0XFx0ICAgZW51bSBkcGxsX3Bpbl9zdGF0ZSBzdGF0ZSxcXG4gXFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuK1xcdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgcGVlcl90eXBlID0gMCwgdHlwZTtcXG4gXFx0c3RydWN0IGljZV9kcGxsX3BpbiAqcCA9IHBpbl9wcml2LCAqdGFyZ2V0O1xcbitcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyX3RhcmdldCA9IE5VTEw7XFxuK1xcdHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIHBlZXJfY29uZmlnO1xcbitcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyBvbGRfY29uZmlnO1xcbitcXHRpbnQgcGVlcl9kcGxsX2lkeCwgcmVzdG9yZV9lcnIsIHJldDtcXG4gXFx0c3RydWN0IGljZV9kcGxsICpkID0gZHBsbF9wcml2O1xcbi1cXHRlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGU7XFxuIFxcdHN0cnVjdCBpY2VfcGYgKnBmID0gcC1cXHUwMDNlcGY7XFxuIFxcdHN0cnVjdCBpY2VfaHcgKmh3O1xcbitcXHR1OCBvbGRfZGF0YSA9IDA7XFxuIFxcdGJvb2wgZW5hYmxlO1xcbiBcXHR1OCBkYXRhO1xcbi1cXHRpbnQgcmV0O1xcbiBcXG4gXFx0aWYgKGljZV9kcGxsX2lzX3Jlc2V0KHBmLCBleHRhY2spKVxcbiBcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbkBAIC0xMzExLDE0ICsxNDc5LDE3IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcXG4gXFx0cmV0ID0gaWNlX3JlYWRfc21hX2N0cmwoaHcsIFxcdTAwMjZkYXRhKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdG9sZF9kYXRhID0gZGF0YTtcXG4gXFxuIFxcdHJldCA9IC1FSU5WQUw7XFxuIFxcdHN3aXRjaCAocC1cXHUwMDNlaWR4KSB7XFxuIFxcdGNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOlxcbi1cXHRcXHRpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEKSB7XFxuK1xcdFxcdHN3aXRjaCAoc3RhdGUpIHtcXG4rXFx0XFx0Y2FzZSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQ6XFxuIFxcdFxcdFxcdGRhdGEgXFx1MDAyNj0gfklDRV9TTUExX01BU0s7XFxuIFxcdFxcdFxcdGVuYWJsZSA9IHRydWU7XFxuLVxcdFxcdH0gZWxzZSBpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEKSB7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDpcXG4gXFx0XFx0XFx0LyogU2tpcCBpZiBVLkZMMSBpcyBub3QgYWN0aXZlLCBzZXR0aW5nIFRYX0VOXFxuIFxcdFxcdFxcdCAqIHdoaWxlIERJUl9FTiBpcyBzZXQgd291bGQgYWxzbyBkZWFjdGl2YXRlXFxuIFxcdFxcdFxcdCAqIHRoZSBwYWlyZWQgU01BMSBvdXRwdXQuXFxuQEAgLTEzMjksMTggKzE1MDAsMjEgQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGRhdGEgfD0gSUNFX1NNQTFfVFhfRU47XFxuIFxcdFxcdFxcdGVuYWJsZSA9IGZhbHNlO1xcbi1cXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0ZGVmYXVsdDpcXG4gXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuIFxcdFxcdH1cXG4gXFx0XFx0dGFyZ2V0ID0gcC1cXHUwMDNlb3V0cHV0O1xcbiBcXHRcXHR0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFg6XFxuLVxcdFxcdGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFKSB7XFxuK1xcdFxcdHN3aXRjaCAoc3RhdGUpIHtcXG4rXFx0XFx0Y2FzZSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOlxcbiBcXHRcXHRcXHRkYXRhIHw9IElDRV9TTUEyX0RJUl9FTjtcXG4gXFx0XFx0XFx0ZGF0YSBcXHUwMDI2PSB+SUNFX1NNQTJfVUZMMl9SWF9ESVM7XFxuIFxcdFxcdFxcdGVuYWJsZSA9IHRydWU7XFxuLVxcdFxcdH0gZWxzZSBpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEKSB7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDpcXG4gXFx0XFx0XFx0LyogU2tpcCBpZiBVLkZMMiBpcyBub3QgYWN0aXZlLCBzZXR0aW5nXFxuIFxcdFxcdFxcdCAqIFVGTDJfUlhfRElTIGNvdWxkIGFsc28gZGlzYWJsZSB0aGUgcGFpcmVkXFxuIFxcdFxcdFxcdCAqIFNNQTIgaW5wdXQuXFxuQEAgLTEzNTIsNyArMTUyNiw4IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRkYXRhIHw9IElDRV9TTUEyX1VGTDJfUlhfRElTO1xcbiBcXHRcXHRcXHRlbmFibGUgPSBmYWxzZTtcXG4tXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuIFxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHRhcmdldCA9IHAtXFx1MDAzZWlucHV0O1xcbkBAIC0xMzY0LDIzICsxNTM5LDc0IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcXG4gXFxuIFxcdHJldCA9IGljZV93cml0ZV9zbWFfY3RybChodywgZGF0YSk7XFxuIFxcdGlmIChyZXQpXFxuLVxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XFxuIFxcdHJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHAsIElDRV9EUExMX1BJTl9UWVBFX1NPRlRXQVJFLFxcbiBcXHRcXHRcXHRcXHRcXHRleHRhY2spO1xcbiBcXHRpZiAocmV0KVxcbi1cXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0XFx0Z290byByZXN0b3JlX3NtYV9jdHJsO1xcbitcXG4rXFx0cmV0ID0gaWNlX2RwbGxfcGluX2NvbmZpZ19nZXQocGYsIHRhcmdldCwgdHlwZSwgXFx1MDAyNm9sZF9jb25maWcsIGV4dGFjayk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gcmVzdG9yZV9zbWFfY3RybDtcXG4gXFxuIFxcdGlmIChlbmFibGUpXFxuIFxcdFxcdHJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoaHcsIHRhcmdldCwgZC1cXHUwMDNlZHBsbF9pZHgsIHR5cGUsIGV4dGFjayk7XFxuIFxcdGVsc2VcXG4gXFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX2Rpc2FibGUoaHcsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcXG4tXFx0aWYgKCFyZXQpXFxuLVxcdFxcdHJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byByZXN0b3JlX3RhcmdldDtcXG4rXFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xcbitcXG4rXFx0aWYgKGVuYWJsZSBcXHUwMDI2XFx1MDAyNiBwLVxcdTAwM2VtdXhlZCBcXHUwMDI2XFx1MDAyNiBwLVxcdTAwM2VtdXhlZC1cXHUwMDNlYWN0aXZlKSB7XFxuK1xcdFxcdGljZV9kcGxsX2dldF9wZWVyX3RhcmdldChwLVxcdTAwM2VtdXhlZCwgXFx1MDAyNnBlZXJfdGFyZ2V0LCBcXHUwMDI2cGVlcl90eXBlKTtcXG4rXFx0XFx0aWYgKCFwZWVyX3RhcmdldCkge1xcbitcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xcbitcXHRcXHR9XFxuK1xcdFxcdHJldCA9IGljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2cGVlcl9jb25maWcsIGV4dGFjayk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gcmVzdG9yZV90YXJnZXQ7XFxuK1xcbitcXHRcXHRwZWVyX2RwbGxfaWR4ID0gaWNlX2RwbGxfZ2V0X2ZhbGxiYWNrX2lkeChcXHUwMDI2cGYtXFx1MDAzZWRwbGxzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHBlZXJfdGFyZ2V0KTtcXG4rXFx0XFx0aWYgKHBlZXJfZHBsbF9pZHggXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRwZWVyX2RwbGxfaWR4ID0gZC1cXHUwMDNlZHBsbF9pZHg7XFxuK1xcdFxcdHJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoXFx1MDAyNnBmLVxcdTAwM2VodywgcGVlcl90YXJnZXQsIHBlZXJfZHBsbF9pZHgsXFxuK1xcdFxcdFxcdFxcdFxcdCAgcGVlcl90eXBlLCBleHRhY2spO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIHJlc3RvcmVfcGVlcjtcXG4rXFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcGVlcl90YXJnZXQsIHBlZXJfdHlwZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ZXh0YWNrKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byByZXN0b3JlX3BlZXI7XFxuK1xcdH1cXG4rXFxuK1xcdGdvdG8gdW5sb2NrO1xcbitcXG4rcmVzdG9yZV9wZWVyOlxcbitcXHRyZXN0b3JlX2VyciA9XFxuK1xcdFxcdGljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShwZiwgcGVlcl90YXJnZXQsIHBlZXJfdHlwZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZwZWVyX2NvbmZpZywgZXh0YWNrLCByZXQpO1xcbitcXHRpZiAocmVzdG9yZV9lcnIpXFxuK1xcdFxcdHJldCA9IHJlc3RvcmVfZXJyO1xcbityZXN0b3JlX3RhcmdldDpcXG4rXFx0cmVzdG9yZV9lcnIgPVxcbitcXHRcXHRpY2VfZHBsbF9waW5fY29uZmlnX3Jlc3RvcmUocGYsIHRhcmdldCwgdHlwZSwgXFx1MDAyNm9sZF9jb25maWcsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBleHRhY2ssIHJldCk7XFxuK1xcdGlmIChyZXN0b3JlX2VycilcXG4rXFx0XFx0cmV0ID0gcmVzdG9yZV9lcnI7XFxuK3Jlc3RvcmVfc21hX2N0cmw6XFxuK1xcdHJlc3RvcmVfZXJyID0gaWNlX2RwbGxfcmVzdG9yZV9zbWFfY3RybChwZiwgb2xkX2RhdGEsIHJldCk7XFxuK1xcdGlmIChyZXN0b3JlX2VycilcXG4rXFx0XFx0cmV0ID0gcmVzdG9yZV9lcnI7XFxuIFxcbiB1bmxvY2s6XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2cGYtXFx1MDAzZWRwbGxzLmxvY2spO1xcbiBcXHRpZiAoIXJldClcXG4tXFx0XFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKFxcdTAwMjZwZi1cXHUwMDNlZHBsbHMsIHApO1xcbitcXHRcXHRpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIocCk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTE0NjMsNDQgKzE2ODksMTY4IEBAIGljZV9kcGxsX3NtYV9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcXG4gXFx0XFx0XFx0ICAgZW51bSBkcGxsX3Bpbl9zdGF0ZSBzdGF0ZSxcXG4gXFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuK1xcdGludCBwZWVyX2RwbGxfaWR4LCByZXN0b3JlX2VyciwgcmV0ID0gLUVJTlZBTDtcXG4gXFx0c3RydWN0IGljZV9kcGxsX3BpbiAqc21hID0gcGluX3ByaXYsICp0YXJnZXQ7XFxuK1xcdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgcGVlcl90eXBlID0gMCwgdHlwZTtcXG4rXFx0c3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcl90YXJnZXQgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyBwZWVyX2NvbmZpZztcXG4rXFx0c3RydWN0IGljZV9kcGxsX3Bpbl9jb25maWcgb2xkX2NvbmZpZztcXG4gXFx0c3RydWN0IGljZV9kcGxsICpkID0gZHBsbF9wcml2O1xcbiBcXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHNtYS1cXHUwMDNlcGY7XFxuLVxcdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZTtcXG4rXFx0dTggb2xkX2RhdGEgPSAwO1xcbiBcXHRib29sIGVuYWJsZTtcXG4tXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmIChpY2VfZHBsbF9pc19yZXNldChwZiwgZXh0YWNrKSlcXG4gXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNnBmLVxcdTAwM2VkcGxscy5sb2NrKTtcXG4tXFx0aWYgKCFzbWEtXFx1MDAzZWFjdGl2ZSkge1xcbi1cXHRcXHRyZXQgPSBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzbWEsIHNtYS1cXHUwMDNlZGlyZWN0aW9uLCBleHRhY2spO1xcbi1cXHRcXHRpZiAocmV0KVxcbitcXHRzd2l0Y2ggKHN0YXRlKSB7XFxuK1xcdGNhc2UgRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTpcXG4rXFx0XFx0LyogUmVqZWN0IGRpcmVjdGlvbi1taXNtYXRjaGVkIHJlcXVlc3RzOiBTRUxFQ1RBQkxFICsgT1VUUFVUXFxuK1xcdFxcdCAqIGlzIGFuIGludmFsaWQgY29tYmluYXRpb24sIHJldHVybiAtRUlOVkFMIGluIHRoaXMgY2FzZVxcbitcXHRcXHQgKiBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIGRpc2FibGluZyB0aGUgcGluLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHNtYS1cXHUwMDNlZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQpIHtcXG4rXFx0XFx0XFx0ZW5hYmxlID0gZmFsc2U7XFxuK1xcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcdFxcdGVuYWJsZSA9IHRydWU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDpcXG4rXFx0XFx0LyogUmVqZWN0IGRpcmVjdGlvbi1taXNtYXRjaGVkIHJlcXVlc3RzOiBDT05ORUNURUQgKyBJTlBVVFxcbitcXHRcXHQgKiBpcyBhbiBpbnZhbGlkIGNvbWJpbmF0aW9uLCByZXR1cm4gLUVJTlZBTCBpbiB0aGlzIGNhc2VcXG4rXFx0XFx0ICogaW1tZWRpYXRlbHkgaW5zdGVhZCBvZiBkaXNhYmxpbmcgdGhlIHBpbi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChzbWEtXFx1MDAzZWRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQpIHtcXG4rXFx0XFx0XFx0ZW5hYmxlID0gZmFsc2U7XFxuK1xcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIFxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcdFxcdGVuYWJsZSA9IHRydWU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDpcXG4rXFx0XFx0ZW5hYmxlID0gZmFsc2U7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIHVubG9jaztcXG4gXFx0fVxcbi1cXHRpZiAoc21hLVxcdTAwM2VkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUKSB7XFxuLVxcdFxcdGVuYWJsZSA9IHN0YXRlID09IERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7XFxuK1xcbitcXHRzd2l0Y2ggKHNtYS1cXHUwMDNlZGlyZWN0aW9uKSB7XFxuK1xcdGNhc2UgRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUOlxcbiBcXHRcXHR0YXJnZXQgPSBzbWEtXFx1MDAzZWlucHV0O1xcbiBcXHRcXHR0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfSU5QVVQ7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdGVuYWJsZSA9IHN0YXRlID09IERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVDpcXG4gXFx0XFx0dGFyZ2V0ID0gc21hLVxcdTAwM2VvdXRwdXQ7XFxuIFxcdFxcdHR5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIHVubG9jaztcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGVuYWJsZSlcXG4rXFx0aWYgKCFzbWEtXFx1MDAzZWFjdGl2ZSkge1xcbitcXHRcXHRyZXQgPSBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzbWEsIHNtYS1cXHUwMDNlZGlyZWN0aW9uLCBleHRhY2spO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGVuYWJsZSkge1xcbitcXHRcXHR1OCBkYXRhO1xcbitcXG4rXFx0XFx0cmV0ID0gaWNlX3JlYWRfc21hX2N0cmwoXFx1MDAyNnBmLVxcdTAwM2VodywgXFx1MDAyNmRhdGEpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0XFx0b2xkX2RhdGEgPSBkYXRhO1xcbitcXHRcXHRzd2l0Y2ggKHNtYS1cXHUwMDNlaWR4KSB7XFxuK1xcdFxcdGNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOlxcbitcXHRcXHRcXHRkYXRhIFxcdTAwMjY9IH5JQ0VfU01BMV9UWF9FTjtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgSUNFX0RQTExfUElOX1NXXzJfSURYOlxcbitcXHRcXHRcXHRkYXRhIFxcdTAwMjY9IH5JQ0VfU01BMl9VRkwyX1JYX0RJUztcXG4rXFx0XFx0XFx0ZGF0YSBcXHUwMDI2PSB+SUNFX1NNQTJfVFhfRU47XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRkZWZhdWx0OlxcbitcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0XFx0fVxcbitcXHRcXHRyZXQgPSBpY2Vfd3JpdGVfc21hX2N0cmwoXFx1MDAyNnBmLVxcdTAwM2VodywgZGF0YSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gcmVzdG9yZV9zbWFfY3RybDtcXG4rXFx0XFx0cmV0ID0gaWNlX2RwbGxfc3dfcGluc191cGRhdGUocGYpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XFxuK1xcbitcXHRcXHRyZXQgPSBpY2VfZHBsbF9waW5fY29uZmlnX2dldChwZiwgdGFyZ2V0LCB0eXBlLCBcXHUwMDI2b2xkX2NvbmZpZyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgZXh0YWNrKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byByZXN0b3JlX3NtYV9jdHJsO1xcbiBcXHRcXHRyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKFxcdTAwMjZwZi1cXHUwMDNlaHcsIHRhcmdldCwgZC1cXHUwMDNlZHBsbF9pZHgsIHR5cGUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgZXh0YWNrKTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRyZXQgPSBpY2VfZHBsbF9waW5fZGlzYWJsZShcXHUwMDI2cGYtXFx1MDAzZWh3LCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XFxuLVxcdGlmICghcmV0KVxcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xcbitcXHRcXHQvKiBSZWZyZXNoIHRhcmdldCBzdGF0ZSBiZWZvcmUgcGVlci1zaWRlIG9wZXJhdGlvbnMuICovXFxuIFxcdFxcdHJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byByZXN0b3JlX3RhcmdldDtcXG4rXFxuK1xcdFxcdGlmIChzbWEtXFx1MDAzZW11eGVkIFxcdTAwMjZcXHUwMDI2IHNtYS1cXHUwMDNlbXV4ZWQtXFx1MDAzZWFjdGl2ZSkge1xcbitcXHRcXHRcXHRpY2VfZHBsbF9nZXRfcGVlcl90YXJnZXQoc21hLVxcdTAwM2VtdXhlZCwgXFx1MDAyNnBlZXJfdGFyZ2V0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnBlZXJfdHlwZSk7XFxuK1xcdFxcdFxcdGlmICghcGVlcl90YXJnZXQpIHtcXG4rXFx0XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0XFx0XFx0Z290byByZXN0b3JlX3RhcmdldDtcXG4rXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX2NvbmZpZ19nZXQocGYsIHBlZXJfdGFyZ2V0LCBwZWVyX3R5cGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZwZWVyX2NvbmZpZywgZXh0YWNrKTtcXG4rXFx0XFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0XFx0Z290byByZXN0b3JlX3RhcmdldDtcXG4rXFxuK1xcdFxcdFxcdHBlZXJfZHBsbF9pZHggPVxcbitcXHRcXHRcXHRcXHRpY2VfZHBsbF9nZXRfZmFsbGJhY2tfaWR4KFxcdTAwMjZwZi1cXHUwMDNlZHBsbHMsIHBlZXJfdGFyZ2V0KTtcXG4rXFx0XFx0XFx0aWYgKHBlZXJfZHBsbF9pZHggXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRwZWVyX2RwbGxfaWR4ID0gZC1cXHUwMDNlZHBsbF9pZHg7XFxuK1xcdFxcdFxcdHJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoXFx1MDAyNnBmLVxcdTAwM2VodywgcGVlcl90YXJnZXQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgcGVlcl9kcGxsX2lkeCwgcGVlcl90eXBlLCBleHRhY2spO1xcbitcXHRcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRcXHRnb3RvIHJlc3RvcmVfcGVlcjtcXG4rXFx0XFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcGVlcl90YXJnZXQsIHBlZXJfdHlwZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ZXh0YWNrKTtcXG4rXFx0XFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0XFx0Z290byByZXN0b3JlX3BlZXI7XFxuK1xcdFxcdH1cXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX2Rpc2FibGUoXFx1MDAyNnBmLVxcdTAwM2VodywgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xcbitcXHRcXHRpZiAoIXJldClcXG4rXFx0XFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRleHRhY2spO1xcbitcXHR9XFxuK1xcdGdvdG8gdW5sb2NrO1xcbitcXG4rcmVzdG9yZV9wZWVyOlxcbitcXHRyZXN0b3JlX2VyciA9XFxuK1xcdFxcdGljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShwZiwgcGVlcl90YXJnZXQsIHBlZXJfdHlwZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZwZWVyX2NvbmZpZywgZXh0YWNrLCByZXQpO1xcbitcXHRpZiAocmVzdG9yZV9lcnIpXFxuK1xcdFxcdHJldCA9IHJlc3RvcmVfZXJyO1xcbityZXN0b3JlX3RhcmdldDpcXG4rXFx0cmVzdG9yZV9lcnIgPVxcbitcXHRcXHRpY2VfZHBsbF9waW5fY29uZmlnX3Jlc3RvcmUocGYsIHRhcmdldCwgdHlwZSwgXFx1MDAyNm9sZF9jb25maWcsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBleHRhY2ssIHJldCk7XFxuK1xcdGlmIChyZXN0b3JlX2VycilcXG4rXFx0XFx0cmV0ID0gcmVzdG9yZV9lcnI7XFxuK3Jlc3RvcmVfc21hX2N0cmw6XFxuK1xcdHJlc3RvcmVfZXJyID0gaWNlX2RwbGxfcmVzdG9yZV9zbWFfY3RybChwZiwgb2xkX2RhdGEsIHJldCk7XFxuK1xcdGlmIChyZXN0b3JlX2VycilcXG4rXFx0XFx0cmV0ID0gcmVzdG9yZV9lcnI7XFxuIFxcbiB1bmxvY2s6XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2cGYtXFx1MDAzZWRwbGxzLmxvY2spO1xcbiBcXHRpZiAoIXJldClcXG4tXFx0XFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKFxcdTAwMjZwZi1cXHUwMDNlZHBsbHMsIHNtYSk7XFxuK1xcdFxcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihzbWEpO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC0xNjk3LDcgKzIwNDcsNyBAQCBpY2VfZHBsbF9waW5fc21hX2RpcmVjdGlvbl9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxcbiBcXHRyZXQgPSBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChwLCBkaXJlY3Rpb24sIGV4dGFjayk7XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2cGYtXFx1MDAzZWRwbGxzLmxvY2spO1xcbiBcXHRpZiAoIXJldClcXG4tXFx0XFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKFxcdTAwMjZwZi1cXHUwMDNlZHBsbHMsIHApO1xcbitcXHRcXHRpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIocCk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTQ1MTksNiArNDg2OSw4IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3N3X3BpbnMoc3RydWN0IGljZV9wZiAqcGYpXFxuIFxcdFxcdGlmIChwaW4tXFx1MDAzZWlucHV0LVxcdTAwM2VyZWZfc3luYylcXG4gXFx0XFx0XFx0cGluLVxcdTAwM2VyZWZfc3luYyA9IHBpbi1cXHUwMDNlaW5wdXQtXFx1MDAzZXJlZl9zeW5jIC0gcGluX2Fic19pZHg7XFxuIFxcdFxcdHBpbi1cXHUwMDNlb3V0cHV0ID0gXFx1MDAyNmQtXFx1MDAzZW91dHB1dHNbSUNFX0RQTExfUElOX1NXX09VVFBVVF9BQlMoaSldO1xcbitcXHRcXHRwaW4tXFx1MDAzZW11eGVkID0gXFx1MDAyNmQtXFx1MDAzZXVmbFtpXTtcXG4rXFxuIFxcdFxcdGljZV9kcGxsX3BoYXNlX3JhbmdlX3NldChcXHUwMDI2cGluLVxcdTAwM2Vwcm9wLnBoYXNlX3JhbmdlLCBwaGFzZV9hZGpfbWF4KTtcXG4gXFx0fVxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgSUNFX0RQTExfUElOX1NXX05VTTsgaSsrKSB7XFxuQEAgLTQ1MjgsNyArNDg4MCw4IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3N3X3BpbnMoc3RydWN0IGljZV9wZiAqcGYpXFxuIFxcdFxcdHBpbi1cXHUwMDNlcHJvcC5jYXBhYmlsaXRpZXMgPSBjYXBzO1xcbiBcXHRcXHRwaW4tXFx1MDAzZXBmID0gcGY7XFxuIFxcdFxcdHBpbi1cXHUwMDNlcHJvcC5ib2FyZF9sYWJlbCA9IGljZV9kcGxsX3N3X3Bpbl91ZmxbaV07XFxuLVxcdFxcdGlmIChpID09IElDRV9EUExMX1BJTl9TV18xX0lEWCkge1xcbitcXHRcXHRzd2l0Y2ggKGkpIHtcXG4rXFx0XFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFg6XFxuIFxcdFxcdFxcdHBpbi1cXHUwMDNlZGlyZWN0aW9uID0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVDtcXG4gXFx0XFx0XFx0cGluX2Fic19pZHggPSBJQ0VfRFBMTF9QSU5fU1dfT1VUUFVUX0FCUyhpKTtcXG4gXFx0XFx0XFx0cGluLVxcdTAwM2Vwcm9wLmZyZXFfc3VwcG9ydGVkID1cXG5AQCAtNDUzOCw3ICs0ODkxLDggQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZilcXG4gXFx0XFx0XFx0cGluLVxcdTAwM2Vwcm9wLmZyZXFfc3VwcG9ydGVkX251bSA9IGZyZXFfc3VwcF9udW07XFxuIFxcdFxcdFxcdHBpbi1cXHUwMDNlaW5wdXQgPSBOVUxMO1xcbiBcXHRcXHRcXHRwaW4tXFx1MDAzZW91dHB1dCA9IFxcdTAwMjZkLVxcdTAwM2VvdXRwdXRzW3Bpbl9hYnNfaWR4XTtcXG4tXFx0XFx0fSBlbHNlIGlmIChpID09IElDRV9EUExMX1BJTl9TV18yX0lEWCkge1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFg6XFxuIFxcdFxcdFxcdHBpbi1cXHUwMDNlZGlyZWN0aW9uID0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUO1xcbiBcXHRcXHRcXHRwaW5fYWJzX2lkeCA9IElDRV9EUExMX1BJTl9TV19JTlBVVF9BQlMoaSkgK1xcbiBcXHRcXHRcXHRcXHQgICAgICBpbnB1dF9pZHhfb2Zmc2V0O1xcbkBAIC00NTUxLDcgKzQ5MDUsMTIgQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZilcXG4gXFx0XFx0XFx0cGluLVxcdTAwM2Vwcm9wLmNhcGFiaWxpdGllcyA9XFxuIFxcdFxcdFxcdFxcdChEUExMX1BJTl9DQVBBQklMSVRJRVNfUFJJT1JJVFlfQ0FOX0NIQU5HRSB8XFxuIFxcdFxcdFxcdFxcdCBjYXBzKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdGRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksIFxcXCJJbnZhbGlkIFUuRkwgcGluIGluZGV4OiAlZFxcXFxuXFxcIiwgaSk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHR9XFxuK1xcdFxcdHBpbi1cXHUwMDNlbXV4ZWQgPSBcXHUwMDI2ZC1cXHUwMDNlc21hW2ldO1xcbiBcXHRcXHRpY2VfZHBsbF9waGFzZV9yYW5nZV9zZXQoXFx1MDAyNnBpbi1cXHUwMDNlcHJvcC5waGFzZV9yYW5nZSwgcGhhc2VfYWRqX21heCk7XFxuIFxcdH1cXG4gXFxuQEAgLTQ3NDMsNiArNTEwMiwxMyBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mbyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBjZ3UpXFxuIFxcbiBcXHRkZS1cXHUwMDNlZHBsbF9pZHggPSBhYmlsaXRpZXMuZWVjX2RwbGxfaWR4O1xcbiBcXHRkcC1cXHUwMDNlZHBsbF9pZHggPSBhYmlsaXRpZXMucHBzX2RwbGxfaWR4O1xcbitcXHRpZiAoZGUtXFx1MDAzZWRwbGxfaWR4IFxcdTAwM2U9IElDRV9EUExMX1JDTEtfTlVNX01BWCB8fFxcbitcXHQgICAgZHAtXFx1MDAzZWRwbGxfaWR4IFxcdTAwM2U9IElDRV9EUExMX1JDTEtfTlVNX01BWCkge1xcbitcXHRcXHRkZXZfZXJyKGljZV9wZl90b19kZXYocGYpLFxcbitcXHRcXHRcXHRcXFwiaW52YWxpZCBkcGxsX2lkeCBpbiBjZ3UgYWJpbGl0aWVzOiBlZWM9JXUsIHBwcz0ldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ZGUtXFx1MDAzZWRwbGxfaWR4LCBkcC1cXHUwMDNlZHBsbF9pZHgpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbiBcXHRkLVxcdTAwM2VudW1faW5wdXRzID0gYWJpbGl0aWVzLm51bV9pbnB1dHM7XFxuIFxcdGQtXFx1MDAzZW51bV9vdXRwdXRzID0gYWJpbGl0aWVzLm51bV9vdXRwdXRzO1xcbiBcXHRkLVxcdTAwM2VpbnB1dF9waGFzZV9hZGpfbWF4ID0gbGUzMl90b19jcHUoYWJpbGl0aWVzLm1heF9pbl9waGFzZV9hZGopIFxcdTAwMjZcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaFxcbmluZGV4IDEwM2JhM2U0OTA2ODIuLmRjNmYwOTZiZjA2OWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaFxcbkBAIC03Niw2ICs3Niw3IEBAIHN0cnVjdCBpY2VfZHBsbF9waW4ge1xcbiBcXHRzMzIgcGhhc2VfYWRqdXN0O1xcbiBcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICppbnB1dDtcXG4gXFx0c3RydWN0IGljZV9kcGxsX3BpbiAqb3V0cHV0O1xcbitcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICptdXhlZDtcXG4gXFx0ZW51bSBkcGxsX3Bpbl9kaXJlY3Rpb24gZGlyZWN0aW9uO1xcbiBcXHRzNjQgcGhhc2Vfb2Zmc2V0O1xcbiBcXHR1OCBzdGF0dXM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQzOjUyLjA4NjIwODIzMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjIxMDQyMjA3OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgbW9kaWZ5IHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIChpY2UpIGRyaXZlciBEUExMIHBpbiBoYW5kbGluZy4gVGhlIGljZSBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgSW50ZWwgRTgwMCBzZXJpZXMgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDFiMGYwNjYzMGY4NDQ0MmY4NzA1MjYyZTEwM2ZjY2Q4YmJkMWM1MmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMTo0Mzo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmNcbmluZGV4IDg1YTc0Y2Q2ZWExZjMuLmNmZmM5ZDczN2RjMmYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmNcbkBAIC04OSw2ICs4OSwyOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGluX2ZyZXF1ZW5jeSBpY2VfZXN5bmNfcmFuZ2VbXSA9IHtcbiBcdERQTExfUElOX0ZSRVFVRU5DWV9SQU5HRSgwLCBEUExMX1BJTl9GUkVRVUVOQ1lfMV9IWiksXG4gfTtcbiBcbisvKlxuKyAqIFNNQTEvVS5GTDEgTVVYIHRhYmxlXG4rICorLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbisgKnwgICAgICAgICAgICAgICAgfCBTTUExX0RJUl9FTiB8IFNNQTFfVFhfRU4gfFxuKyAqKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG4rICp8U01BMSBSWCBFbmFibGUgIHwgICAgICAgMCAgICAgfCAgICAgIHggICAgIHxcbisgKnx1LkZMMSBUWCBFbmFibGUgfCAgICAgICAwICAgICB8ICAgICAgMCAgICAgfFxuKyAqfFNNQTEgVFggRW5hYmxlICB8ICAgICAgIDEgICAgIHwgICAgICAwICAgICB8XG4rICp8QWxsIERpc2FibGUgICAgIHwgICAgICAgMSAgICAgfCAgICAgIDEgICAgIHxcbisgKistLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xuKyAqXG4rICogU01BMi9VLkZMMiBNVVggdGFibGVcbisgKistLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbisgKnwgICAgICAgICAgICAgICAgfCBTTUEyX0RJUl9FTiB8IFNNQTJfVFhfRU4gfCBVRkwyX1JYX0VOIHxcbisgKistLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbisgKnxTTUEyIFJYIEVuYWJsZSAgfCAgICAgICAwICAgICB8ICAgICAgeCAgICAgfCAgICAgeCAgICAgIHxcbisgKnx1LkZMMiBSWCBFbmFibGUgfCAgICAgICAxICAgICB8ICAgICAgeCAgICAgfCAgICAgMCAgICAgIHxcbisgKnxTTUEyIFRYIEVuYWJsZSAgfCAgICAgICAxICAgICB8ICAgICAgMCAgICAgfCAgICAgeCAgICAgIHxcbisgKnxTTUEyIERpc2FibGUgICAgfCAgICAgICAxICAgICB8ICAgICAgMSAgICAgfCAgICAgeCAgICAgIHxcbisgKnxBbGwgRGlzYWJsZSAgICAgfCAgICAgICAxICAgICB8ICAgICAgMSAgICAgfCAgICAgMSAgICAgIHxcbisgKistLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbisgKi9cbitcbiAvKipcbiAgKiBpY2VfZHBsbF9pc19zd19waW4gLSBjaGVjayBpZiBnaXZlbiBwaW4gc2hhbGwgYmUgY29udHJvbGxlZCBieSBTV1xuICAqIEBwZjogcHJpdmF0ZSBib2FyZCBzdHJ1Y3R1cmVcbkBAIC00NDMsNiArNDY2LDQwIEBAIGljZV9kcGxsX3N3X3Bpbl9mcmVxdWVuY3lfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgaWNlX2RwbGxfZ2V0X2ZhbGxiYWNrX2lkeChzdHJ1Y3QgaWNlX2RwbGxzICpkLCBzdHJ1Y3QgaWNlX2RwbGxfcGluICp0YXJnZXQpXG4re1xuK1x0aWYgKGQtXHUwMDNlcHBzLmRwbGxfaWR4IFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVggXHUwMDI2XHUwMDI2XG4rXHQgICAgdGFyZ2V0LVx1MDAzZXN0YXRlW2QtXHUwMDNlcHBzLmRwbGxfaWR4XSA9PSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQpXG4rXHRcdHJldHVybiBkLVx1MDAzZXBwcy5kcGxsX2lkeDtcbitcbitcdGlmIChkLVx1MDAzZWVlYy5kcGxsX2lkeCBcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHRhcmdldC1cdTAwM2VzdGF0ZVtkLVx1MDAzZWVlYy5kcGxsX2lkeF0gPT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEKVxuK1x0XHRyZXR1cm4gZC1cdTAwM2VlZWMuZHBsbF9pZHg7XG4rXG4rXHRyZXR1cm4gLUVJTlZBTDtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWNlX2RwbGxfZ2V0X3BlZXJfdGFyZ2V0KHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXIsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBpY2VfZHBsbF9waW4gKipwZWVyX3RhcmdldCxcbitcdFx0XHRcdCAgICAgZW51bSBpY2VfZHBsbF9waW5fdHlwZSAqcGVlcl90eXBlKVxuK3tcbitcdCpwZWVyX3RhcmdldCA9IE5VTEw7XG4rXHQqcGVlcl90eXBlID0gMDtcbitcbitcdHN3aXRjaCAocGVlci1cdTAwM2VkaXJlY3Rpb24pIHtcbitcdGNhc2UgRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVDpcbitcdFx0KnBlZXJfdGFyZ2V0ID0gcGVlci1cdTAwM2VvdXRwdXQ7XG4rXHRcdCpwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQ6XG4rXHRcdCpwZWVyX3RhcmdldCA9IHBlZXItXHUwMDNlaW5wdXQ7XG4rXHRcdCpwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVDtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRicmVhaztcbitcdH1cbit9XG4rXG4gLyoqXG4gICogaWNlX2RwbGxfcGluX2VuYWJsZSAtIGVuYWJsZSBhIHBpbiBvbiBkcGxsc1xuICAqIEBodzogYm9hcmQgcHJpdmF0ZSBodyBzdHJ1Y3R1cmVcbkBAIC01MzgsNiArNTk1LDI5IEBAIGljZV9kcGxsX3Bpbl9kaXNhYmxlKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW4sXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbisvKipcbisgKiBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIgLSBub3RpZnkgdGhlIHBhaXJlZCBTVyBwaW4gYWZ0ZXIgYSBzdGF0ZSBjaGFuZ2VcbisgKiBAY2hhbmdlZDogdGhlIFNXIHBpbiB0aGF0IHdhcyBleHBsaWNpdGx5IGNoYW5nZWQgKGFscmVhZHkgbm90aWZpZWQgYnkgZHBsbCBjb3JlKVxuKyAqXG4rICogU01BIGFuZCBVLkZMIHBpbnMgc2hhcmUgcGh5c2ljYWwgc2lnbmFsIHBhdGhzIGluIHBhaXJzIChTTUExL1UuRkwxIGFuZFxuKyAqIFNNQTIvVS5GTDIpLiAgV2hlbiBvbmUgcGluJ3Mgcm91dGluZyBjaGFuZ2VzIHZpYSB0aGUgUENBOTU3NSBHUElPXG4rICogZXhwYW5kZXIsIHRoZSBwYWlyZWQgcGluJ3Mgc3RhdGUgbWF5IGFsc28gY2hhbmdlLiAgU2VuZCBhIGNoYW5nZVxuKyAqIG5vdGlmaWNhdGlvbiBmb3IgdGhlIHBlZXIgcGluIHNvIHVzZXJzcGFjZSBjb25zdW1lcnMgbW9uaXRvcmluZyB0aGVcbisgKiBwZWVyIHZpYSBkcGxsIG5ldGxpbmsgbGVhcm4gYWJvdXQgdGhlIHVwZGF0ZS5cbisgKlxuKyAqIENvbnRleHQ6IENhbGxlZCBmcm9tIGRwbGxfcGluX29wcyBjYWxsYmFja3MgYWZ0ZXIgcGYtXHUwMDNlZHBsbHMubG9jayBpc1xuKyAqICAgICAgICAgIHJlbGVhc2VkLiAgVXNlcyBfX2RwbGxfcGluX2NoYW5nZV9udGYoKSBiZWNhdXNlIGRwbGxfbG9jayBpc1xuKyAqICAgICAgICAgIHN0aWxsIGhlbGQgYnkgdGhlIGRwbGwgbmV0bGluayBsYXllci5cbisgKi9cbitzdGF0aWMgdm9pZCBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoc3RydWN0IGljZV9kcGxsX3BpbiAqY2hhbmdlZClcbit7XG4rXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyO1xuK1xuK1x0cGVlciA9IGNoYW5nZWQtXHUwMDNlbXV4ZWQ7XG4rXHRpZiAocGVlciBcdTAwMjZcdTAwMjYgcGVlci1cdTAwM2VwaW4pXG4rXHRcdF9fZHBsbF9waW5fY2hhbmdlX250ZihwZWVyLVx1MDAzZXBpbik7XG4rfVxuK1xuIC8qKlxuICAqIGljZV9kcGxsX3Bpbl9zdG9yZV9zdGF0ZSAtIHVwZGF0ZXMgdGhlIHN0YXRlIG9mIHBpbiBpbiBTVyBib29ra2VlcGluZ1xuICAqIEBwaW46IHBvaW50ZXIgdG8gYSBwaW5cbkBAIC03MDksNiArNzg5LDggQEAgaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLFxuIFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHU4IHBhcmVudCwgcG9ydF9udW0gPSBJQ0VfQVFDX1NFVF9QSFlfUkVDX0NMS19PVVRfQ1VSUl9QT1JUO1xuK1x0ZW51bSBkcGxsX3Bpbl9zdGF0ZSBlZWNfc3RhdGUgPSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XG4rXHRlbnVtIGRwbGxfcGluX3N0YXRlIHBwc19zdGF0ZSA9IERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDtcbiBcdGludCByZXQ7XG4gXG4gXHRzd2l0Y2ggKHBpbl90eXBlKSB7XG5AQCAtNzIwLDI2ICs4MDIsMjYgQEAgaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLFxuIFx0XHRcdGdvdG8gZXJyO1xuIFx0XHRpZiAoSUNFX0FRQ19HRVRfQ0dVX0lOX0NGR19GTEcyX0lOUFVUX0VOIFx1MDAyNiBwaW4tXHUwMDNlZmxhZ3NbMF0pIHtcbiBcdFx0XHRpZiAocGluLVx1MDAzZXBpbikge1xuLVx0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxuK1x0XHRcdFx0ZWVjX3N0YXRlID1cbiBcdFx0XHRcdFx0cGluLVx1MDAzZXBpbiA9PSBwZi1cdTAwM2VkcGxscy5lZWMuYWN0aXZlX2lucHV0ID9cbiBcdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEIDpcbiBcdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcbi1cdFx0XHRcdHBpbi1cdTAwM2VzdGF0ZVtwZi1cdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID1cbitcdFx0XHRcdHBwc19zdGF0ZSA9XG4gXHRcdFx0XHRcdHBpbi1cdTAwM2VwaW4gPT0gcGYtXHUwMDNlZHBsbHMucHBzLmFjdGl2ZV9pbnB1dCA/XG4gXHRcdFx0XHRcdERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCA6XG4gXHRcdFx0XHRcdERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7XG4gXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdHBpbi1cdTAwM2VzdGF0ZVtwZi1cdTAwM2VkcGxscy5lZWMuZHBsbF9pZHhdID1cbi1cdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcbi1cdFx0XHRcdHBpbi1cdTAwM2VzdGF0ZVtwZi1cdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID1cbi1cdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcbitcdFx0XHRcdGVlY19zdGF0ZSA9IERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7XG4rXHRcdFx0XHRwcHNfc3RhdGUgPSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xuIFx0XHRcdH1cbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4XSA9XG4tXHRcdFx0XHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XG4tXHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxuLVx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xuIFx0XHR9XG4rXHRcdC8qIENvbW1pdCBvbmx5IGFmdGVyIGEgc3VjY2Vzc2Z1bCByZWFkIHNvIGxvY2tsZXNzIHJlYWRlcnMgbmV2ZXJcbitcdFx0ICogb2JzZXJ2ZSBhIHRyYW5zaWVudCBkaXNjb25uZWN0ZWQgc3RhdGUuXG4rXHRcdCAqL1xuK1x0XHRpZiAocGYtXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4IFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpXG4rXHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPSBlZWNfc3RhdGU7XG4rXHRcdGlmIChwZi1cdTAwM2VkcGxscy5wcHMuZHBsbF9pZHggXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWClcbitcdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4XSA9IHBwc19zdGF0ZTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDpcbiBcdFx0cmV0ID0gaWNlX2FxX2dldF9vdXRwdXRfcGluX2NmZyhcdTAwMjZwZi1cdTAwM2VodywgcGluLVx1MDAzZWlkeCxcbkBAIC03NTAsMjAgKzgzMiwxNyBAQCBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW4sXG4gXG4gXHRcdHBhcmVudCBcdTAwMjY9IElDRV9BUUNfR0VUX0NHVV9PVVRfQ0ZHX0RQTExfU1JDX1NFTDtcbiBcdFx0aWYgKElDRV9BUUNfR0VUX0NHVV9PVVRfQ0ZHX09VVF9FTiBcdTAwMjYgcGluLVx1MDAzZWZsYWdzWzBdKSB7XG4tXHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxuLVx0XHRcdFx0cGFyZW50ID09IHBmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeCA/XG4rXHRcdFx0ZWVjX3N0YXRlID0gcGFyZW50ID09IHBmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeCA/XG4gXHRcdFx0XHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxuIFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xuLVx0XHRcdHBpbi1cdTAwM2VzdGF0ZVtwZi1cdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID1cbi1cdFx0XHRcdHBhcmVudCA9PSBwZi1cdTAwM2VkcGxscy5wcHMuZHBsbF9pZHggP1xuK1x0XHRcdHBwc19zdGF0ZSA9IHBhcmVudCA9PSBwZi1cdTAwM2VkcGxscy5wcHMuZHBsbF9pZHggP1xuIFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEIDpcbiBcdFx0XHRcdERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4XSA9XG4tXHRcdFx0XHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XG4tXHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxuLVx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xuIFx0XHR9XG4rXHRcdGlmIChwZi1cdTAwM2VkcGxscy5lZWMuZHBsbF9pZHggXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWClcbitcdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4XSA9IGVlY19zdGF0ZTtcbitcdFx0aWYgKHBmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeCBcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYKVxuK1x0XHRcdHBpbi1cdTAwM2VzdGF0ZVtwZi1cdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID0gcHBzX3N0YXRlO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgSUNFX0RQTExfUElOX1RZUEVfUkNMS19JTlBVVDpcbiBcdFx0aWYgKHBmLVx1MDAzZWh3Lm1hY190eXBlID09IElDRV9NQUNfR0VORVJJQ18zS19FODI1KSB7XG5AQCAtMTE2MywzMCArMTI0Miw4NSBAQCBpY2VfZHBsbF9pbnB1dF9zdGF0ZV9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0XHRcdFx0ICAgICAgZXh0YWNrLCBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVCk7XG4gfVxuIFxuLS8qKlxuLSAqIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlciAtIG5vdGlmeSB0aGUgcGFpcmVkIFNXIHBpbiBhZnRlciBhIHN0YXRlIGNoYW5nZVxuLSAqIEBkOiBwb2ludGVyIHRvIGRwbGxzIHN0cnVjdFxuLSAqIEBjaGFuZ2VkOiB0aGUgU1cgcGluIHRoYXQgd2FzIGV4cGxpY2l0bHkgY2hhbmdlZCAoYWxyZWFkeSBub3RpZmllZCBieSBkcGxsIGNvcmUpXG4tICpcbi0gKiBTTUEgYW5kIFUuRkwgcGlucyBzaGFyZSBwaHlzaWNhbCBzaWduYWwgcGF0aHMgaW4gcGFpcnMgKFNNQTEvVS5GTDEgYW5kXG4tICogU01BMi9VLkZMMikuICBXaGVuIG9uZSBwaW4ncyByb3V0aW5nIGNoYW5nZXMgdmlhIHRoZSBQQ0E5NTc1IEdQSU9cbi0gKiBleHBhbmRlciwgdGhlIHBhaXJlZCBwaW4ncyBzdGF0ZSBtYXkgYWxzbyBjaGFuZ2UuICBTZW5kIGEgY2hhbmdlXG4tICogbm90aWZpY2F0aW9uIGZvciB0aGUgcGVlciBwaW4gc28gdXNlcnNwYWNlIGNvbnN1bWVycyBtb25pdG9yaW5nIHRoZVxuLSAqIHBlZXIgdmlhIGRwbGwgbmV0bGluayBsZWFybiBhYm91dCB0aGUgdXBkYXRlLlxuLSAqXG4tICogQ29udGV4dDogQ2FsbGVkIGZyb20gZHBsbF9waW5fb3BzIGNhbGxiYWNrcyBhZnRlciBwZi1cdTAwM2VkcGxscy5sb2NrIGlzXG4tICogICAgICAgICAgcmVsZWFzZWQuICBVc2VzIF9fZHBsbF9waW5fY2hhbmdlX250ZigpIGJlY2F1c2UgZHBsbF9sb2NrIGlzXG4tICogICAgICAgICAgc3RpbGwgaGVsZCBieSB0aGUgZHBsbCBuZXRsaW5rIGxheWVyLlxuLSAqL1xuLXN0YXRpYyB2b2lkIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihzdHJ1Y3QgaWNlX2RwbGxzICpkLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpjaGFuZ2VkKVxuK3N0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIHtcbitcdGJvb2wgZW5hYmxlZDtcbitcdHU4IGRwbGxfaWR4O1xuK307XG4rXG4rc3RhdGljIGludFxuK2ljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGxfcGluICp0YXJnZXQsXG4rXHRcdFx0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlLFxuK1x0XHRcdHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnICpjb25maWcsXG4rXHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbi1cdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXI7XG4rXHRpbnQgcmV0O1xuIFxuLVx0cGVlciA9IChjaGFuZ2VkIFx1MDAzZT0gZC1cdTAwM2VzbWEgXHUwMDI2XHUwMDI2IGNoYW5nZWQgXHUwMDNjIGQtXHUwMDNlc21hICsgSUNFX0RQTExfUElOX1NXX05VTSkgP1xuLVx0XHRcdTAwMjZkLVx1MDAzZXVmbFtjaGFuZ2VkLVx1MDAzZWlkeF0gOiBcdTAwMjZkLVx1MDAzZXNtYVtjaGFuZ2VkLVx1MDAzZWlkeF07XG4tXHRpZiAocGVlci1cdTAwM2VwaW4pXG4tXHRcdF9fZHBsbF9waW5fY2hhbmdlX250ZihwZWVyLVx1MDAzZXBpbik7XG4rXHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0c3dpdGNoICh0eXBlKSB7XG4rXHRjYXNlIElDRV9EUExMX1BJTl9UWVBFX0lOUFVUOlxuK1x0XHRjb25maWctXHUwMDNlZW5hYmxlZCA9IHRhcmdldC1cdTAwM2VmbGFnc1swXSBcdTAwMjZcbitcdFx0XHRcdCAgSUNFX0FRQ19HRVRfQ0dVX0lOX0NGR19GTEcyX0lOUFVUX0VOO1xuK1x0XHRjb25maWctXHUwMDNlZHBsbF9pZHggPSAwO1xuK1x0XHRyZXR1cm4gMDtcbitcdGNhc2UgSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUOlxuK1x0XHRjb25maWctXHUwMDNlZW5hYmxlZCA9IHRhcmdldC1cdTAwM2VmbGFnc1swXSBcdTAwMjZcbitcdFx0XHRcdCAgSUNFX0FRQ19HRVRfQ0dVX09VVF9DRkdfT1VUX0VOO1xuK1x0XHRpZiAoIWNvbmZpZy1cdTAwM2VlbmFibGVkKSB7XG4rXHRcdFx0Y29uZmlnLVx1MDAzZWRwbGxfaWR4ID0gMDtcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuK1xuK1x0XHRyZXQgPSBpY2VfZHBsbF9nZXRfZmFsbGJhY2tfaWR4KFx1MDAyNnBmLVx1MDAzZWRwbGxzLCB0YXJnZXQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdGNvbmZpZy1cdTAwM2VkcGxsX2lkeCA9IHJldDtcbitcdFx0cmV0dXJuIDA7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludFxuK2ljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqdGFyZ2V0LFxuK1x0XHRcdCAgICBlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGUsXG4rXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnICpjb25maWcsXG4rXHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaywgaW50IGluaXRfZXJyKVxuK3tcbitcdGludCByZXN0b3JlX2VyciwgdXBkYXRlX2VycjtcbitcbitcdGlmIChjb25maWctXHUwMDNlZW5hYmxlZClcbitcdFx0cmVzdG9yZV9lcnIgPSBpY2VfZHBsbF9waW5fZW5hYmxlKFx1MDAyNnBmLVx1MDAzZWh3LCB0YXJnZXQsXG4rXHRcdFx0XHRcdFx0ICBjb25maWctXHUwMDNlZHBsbF9pZHgsIHR5cGUsIGV4dGFjayk7XG4rXHRlbHNlXG4rXHRcdHJlc3RvcmVfZXJyID0gaWNlX2RwbGxfcGluX2Rpc2FibGUoXHUwMDI2cGYtXHUwMDNlaHcsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcbitcdHVwZGF0ZV9lcnIgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4rXHRpZiAocmVzdG9yZV9lcnIgfHwgdXBkYXRlX2Vycikge1xuK1x0XHRkZXZfd2FybihpY2VfcGZfdG9fZGV2KHBmKSxcbitcdFx0XHQgXCJGYWlsZWQgdG8gcm9sbGJhY2sgcGluIHN0YXRlOiBlcnIgJWQsIHJlc3RvcmUgZXJyICVkLCB1cGRhdGUgZXJyICVkXFxuXCIsXG4rXHRcdFx0IGluaXRfZXJyLCByZXN0b3JlX2VyciwgdXBkYXRlX2Vycik7XG4rXHRcdHJldHVybiByZXN0b3JlX2VyciA/IHJlc3RvcmVfZXJyIDogdXBkYXRlX2VycjtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGljZV9kcGxsX3Jlc3RvcmVfc21hX2N0cmwoc3RydWN0IGljZV9wZiAqcGYsIHU4IG9sZF9kYXRhLFxuK1x0XHRcdFx0ICAgICBpbnQgaW5pdF9lcnIpXG4re1xuK1x0aW50IHJlc3RvcmVfZXJyO1xuK1xuK1x0cmVzdG9yZV9lcnIgPSBpY2Vfd3JpdGVfc21hX2N0cmwoXHUwMDI2cGYtXHUwMDNlaHcsIG9sZF9kYXRhKTtcbitcdGlmICghcmVzdG9yZV9lcnIpXG4rXHRcdHJlc3RvcmVfZXJyID0gaWNlX2RwbGxfc3dfcGluc191cGRhdGUocGYpO1xuK1x0aWYgKHJlc3RvcmVfZXJyKVxuK1x0XHRkZXZfd2FybihpY2VfcGZfdG9fZGV2KHBmKSxcbitcdFx0XHQgXCJGYWlsZWQgdG8gcmVzdG9yZSBTTUEgY29udHJvbDogZXJyICVkLCByZXN0b3JlIGVyciAlZFxcblwiLFxuK1x0XHRcdCBpbml0X2VyciwgcmVzdG9yZV9lcnIpO1xuK1xuK1x0cmV0dXJuIHJlc3RvcmVfZXJyO1xuIH1cbiBcbiAvKipcbkBAIC0xMjA2LDMwICsxMzQwLDM5IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQoc3RydWN0IGljZV9kcGxsX3BpbiAqcCxcbiBcdFx0XHRcdCAgICAgIGVudW0gZHBsbF9waW5fZGlyZWN0aW9uIGRpcmVjdGlvbixcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4rXHRzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyBwZWVyX2NvbmZpZztcbiBcdHN0cnVjdCBpY2VfZHBsbHMgKmQgPSBcdTAwMjZwLVx1MDAzZXBmLVx1MDAzZWRwbGxzO1xuK1x0aW50IHBlZXJfZHBsbF9pZHgsIHJlc3RvcmVfZXJyLCByZXQ7XG4rXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICp0YXJnZXQgPSBOVUxMO1xuK1x0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlID0gMDtcbiBcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXI7XG4tXHR1OCBkYXRhO1xuLVx0aW50IHJldDtcbitcdHU4IGRhdGEsIG9sZF9kYXRhID0gMDtcbiBcbiBcdGlmIChwLVx1MDAzZWRpcmVjdGlvbiA9PSBkaXJlY3Rpb24gXHUwMDI2XHUwMDI2IHAtXHUwMDNlYWN0aXZlKVxuIFx0XHRyZXR1cm4gMDtcbiBcdHJldCA9IGljZV9yZWFkX3NtYV9jdHJsKFx1MDAyNnAtXHUwMDNlcGYtXHUwMDNlaHcsIFx1MDAyNmRhdGEpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbitcdG9sZF9kYXRhID0gZGF0YTtcbiBcbiBcdHN3aXRjaCAocC1cdTAwM2VpZHgpIHtcbiBcdGNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOlxuLVx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUExX01BU0s7XG4tXHRcdGlmIChkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVClcbitcdFx0aWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKSB7XG4rXHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMV9UWF9FTjtcbiBcdFx0XHRkYXRhIHw9IElDRV9TTUExX0RJUl9FTjtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUExX0RJUl9FTjtcbitcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUExX1RYX0VOO1xuK1x0XHR9XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFg6XG4gXHRcdGlmIChkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUKSB7XG4gXHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMl9ESVJfRU47XG4tXHRcdFx0ZGF0YSB8PSBJQ0VfU01BMl9VRkwyX1JYX0RJUztcbitcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUEyX1RYX0VOO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdGRhdGEgXHUwMDI2PSB+KElDRV9TTUEyX1RYX0VOIHwgSUNFX1NNQTJfVUZMMl9SWF9ESVMpO1xuIFx0XHRcdGRhdGEgfD0gSUNFX1NNQTJfRElSX0VOO1xuK1x0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTJfVUZMMl9SWF9ESVM7XG4rXHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMl9UWF9FTjtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG5AQCAtMTI0MSw3ICsxMzg0LDcgQEAgc3RhdGljIGludCBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwLFxuIFx0XHRcdFx0XHRcdElDRV9EUExMX1BJTl9UWVBFX1NPRlRXQVJFLFxuIFx0XHRcdFx0XHRcdGV4dGFjayk7XG4gXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuK1x0XHRnb3RvIHJlc3RvcmVfc21hO1xuIFxuIFx0LyogV2hlbiBhIGRpcmVjdGlvbiBjaGFuZ2UgYWN0aXZhdGVzIHRoZSBwYWlyZWQgVS5GTCBwaW4sIGVuYWJsZVxuIFx0ICogaXRzIGJhY2tpbmcgQ0dVIHBpbiBzbyB0aGUgcGluIHJlcG9ydHMgYXMgY29ubmVjdGVkLiBXaXRob3V0XG5AQCAtMTI1MCwyNSArMTM5Myw0NiBAQCBzdGF0aWMgaW50IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHN0cnVjdCBpY2VfZHBsbF9waW4gKnAsXG4gXHQgKiBiYWNraW5nIHBpbiB3aGVuIFUuRkwgYmVjb21lcyBpbmFjdGl2ZSBiZWNhdXNlIHRoZSBTTUEgcGluIG1heVxuIFx0ICogc3RpbGwgYmUgdXNpbmcgaXQuXG4gXHQgKi9cbi1cdHBlZXIgPSBcdTAwMjZkLVx1MDAzZXVmbFtwLVx1MDAzZWlkeF07XG4rXHRwZWVyID0gcC1cdTAwM2VtdXhlZDtcbiBcdGlmIChwZWVyLVx1MDAzZWFjdGl2ZSkge1xuLVx0XHRzdHJ1Y3QgaWNlX2RwbGxfcGluICp0YXJnZXQ7XG4tXHRcdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZTtcbi1cbiBcdFx0aWYgKHBlZXItXHUwMDNlb3V0cHV0KSB7XG4gXHRcdFx0dGFyZ2V0ID0gcGVlci1cdTAwM2VvdXRwdXQ7XG4gXHRcdFx0dHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDtcbi1cdFx0fSBlbHNlIHtcbitcdFx0fSBlbHNlIGlmIChwZWVyLVx1MDAzZWlucHV0KSB7XG4gXHRcdFx0dGFyZ2V0ID0gcGVlci1cdTAwM2VpbnB1dDtcbiBcdFx0XHR0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfSU5QVVQ7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0XHRnb3RvIHJlc3RvcmVfc21hO1xuIFx0XHR9XG4tXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoXHUwMDI2cC1cdTAwM2VwZi1cdTAwM2VodywgdGFyZ2V0LFxuLVx0XHRcdFx0XHQgIGQtXHUwMDNlZWVjLmRwbGxfaWR4LCB0eXBlLCBleHRhY2spO1xuLVx0XHRpZiAoIXJldClcbi1cdFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHAtXHUwMDNlcGYsIHRhcmdldCxcbi1cdFx0XHRcdFx0XHRcdHR5cGUsIGV4dGFjayk7XG4rXG4rXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHAtXHUwMDNlcGYsIHRhcmdldCwgdHlwZSxcbitcdFx0XHRcdFx0ICAgICAgXHUwMDI2cGVlcl9jb25maWcsIGV4dGFjayk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byByZXN0b3JlX3NtYTtcbitcbitcdFx0cGVlcl9kcGxsX2lkeCA9IGljZV9kcGxsX2dldF9mYWxsYmFja19pZHgoZCwgdGFyZ2V0KTtcbitcdFx0aWYgKHBlZXJfZHBsbF9pZHggXHUwMDNjIDApXG4rXHRcdFx0cGVlcl9kcGxsX2lkeCA9IGQtXHUwMDNlZWVjLmRwbGxfaWR4O1xuK1x0XHRyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKFx1MDAyNnAtXHUwMDNlcGYtXHUwMDNlaHcsIHRhcmdldCwgcGVlcl9kcGxsX2lkeCxcbitcdFx0XHRcdFx0ICB0eXBlLCBleHRhY2spO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gcmVzdG9yZV9wZWVyO1xuK1x0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHAtXHUwMDNlcGYsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIHJlc3RvcmVfcGVlcjtcbiBcdH1cbiBcbitcdHJldHVybiAwO1xuK1xuK3Jlc3RvcmVfcGVlcjpcbitcdHJlc3RvcmVfZXJyID1cbitcdFx0aWNlX2RwbGxfcGluX2NvbmZpZ19yZXN0b3JlKHAtXHUwMDNlcGYsIHRhcmdldCwgdHlwZSwgXHUwMDI2cGVlcl9jb25maWcsXG4rXHRcdFx0XHRcdCAgICBleHRhY2ssIHJldCk7XG4rXHRpZiAocmVzdG9yZV9lcnIpXG4rXHRcdHJldCA9IHJlc3RvcmVfZXJyO1xuK3Jlc3RvcmVfc21hOlxuK1x0aWNlX2RwbGxfcmVzdG9yZV9zbWFfY3RybChwLVx1MDAzZXBmLCBvbGRfZGF0YSwgcmV0KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTEyOTQsMTQgKzE0NTgsMTggQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0XHRcdCAgIGVudW0gZHBsbF9waW5fc3RhdGUgc3RhdGUsXG4gXHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbitcdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgcGVlcl90eXBlID0gMCwgdHlwZTtcbiBcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnAgPSBwaW5fcHJpdiwgKnRhcmdldDtcbitcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXJfdGFyZ2V0ID0gTlVMTDtcbitcdHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIHBlZXJfY29uZmlnO1xuK1x0c3RydWN0IGljZV9kcGxsX3Bpbl9jb25maWcgb2xkX2NvbmZpZztcbitcdGludCBwZWVyX2RwbGxfaWR4LCByZXN0b3JlX2VyciwgcmV0O1xuIFx0c3RydWN0IGljZV9kcGxsICpkID0gZHBsbF9wcml2O1xuLVx0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlO1xuIFx0c3RydWN0IGljZV9wZiAqcGYgPSBwLVx1MDAzZXBmO1xuIFx0c3RydWN0IGljZV9odyAqaHc7XG4rXHR1OCBvbGRfZGF0YSA9IDA7XG4gXHRib29sIGVuYWJsZTtcbiBcdHU4IGRhdGE7XG4tXHRpbnQgcmV0O1xuIFxuIFx0aWYgKGljZV9kcGxsX2lzX3Jlc2V0KHBmLCBleHRhY2spKVxuIFx0XHRyZXR1cm4gLUVCVVNZO1xuQEAgLTEzMTEsMTQgKzE0NzksMTcgQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0cmV0ID0gaWNlX3JlYWRfc21hX2N0cmwoaHcsIFx1MDAyNmRhdGEpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byB1bmxvY2s7XG4rXHRvbGRfZGF0YSA9IGRhdGE7XG4gXG4gXHRyZXQgPSAtRUlOVkFMO1xuIFx0c3dpdGNoIChwLVx1MDAzZWlkeCkge1xuIFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFg6XG4tXHRcdGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQpIHtcbitcdFx0c3dpdGNoIChzdGF0ZSkge1xuK1x0XHRjYXNlIERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDpcbiBcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUExX01BU0s7XG4gXHRcdFx0ZW5hYmxlID0gdHJ1ZTtcbi1cdFx0fSBlbHNlIGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQpIHtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ6XG4gXHRcdFx0LyogU2tpcCBpZiBVLkZMMSBpcyBub3QgYWN0aXZlLCBzZXR0aW5nIFRYX0VOXG4gXHRcdFx0ICogd2hpbGUgRElSX0VOIGlzIHNldCB3b3VsZCBhbHNvIGRlYWN0aXZhdGVcbiBcdFx0XHQgKiB0aGUgcGFpcmVkIFNNQTEgb3V0cHV0LlxuQEAgLTEzMjksMTggKzE1MDAsMjEgQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0XHRcdH1cbiBcdFx0XHRkYXRhIHw9IElDRV9TTUExX1RYX0VOO1xuIFx0XHRcdGVuYWJsZSA9IGZhbHNlO1xuLVx0XHR9IGVsc2Uge1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRkZWZhdWx0OlxuIFx0XHRcdGdvdG8gdW5sb2NrO1xuIFx0XHR9XG4gXHRcdHRhcmdldCA9IHAtXHUwMDNlb3V0cHV0O1xuIFx0XHR0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgSUNFX0RQTExfUElOX1NXXzJfSURYOlxuLVx0XHRpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRSkge1xuK1x0XHRzd2l0Y2ggKHN0YXRlKSB7XG4rXHRcdGNhc2UgRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTpcbiBcdFx0XHRkYXRhIHw9IElDRV9TTUEyX0RJUl9FTjtcbiBcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUEyX1VGTDJfUlhfRElTO1xuIFx0XHRcdGVuYWJsZSA9IHRydWU7XG4tXHRcdH0gZWxzZSBpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEKSB7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOlxuIFx0XHRcdC8qIFNraXAgaWYgVS5GTDIgaXMgbm90IGFjdGl2ZSwgc2V0dGluZ1xuIFx0XHRcdCAqIFVGTDJfUlhfRElTIGNvdWxkIGFsc28gZGlzYWJsZSB0aGUgcGFpcmVkXG4gXHRcdFx0ICogU01BMiBpbnB1dC5cbkBAIC0xMzUyLDcgKzE1MjYsOCBAQCBpY2VfZHBsbF91ZmxfcGluX3N0YXRlX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXG4gXHRcdFx0fVxuIFx0XHRcdGRhdGEgfD0gSUNFX1NNQTJfVUZMMl9SWF9ESVM7XG4gXHRcdFx0ZW5hYmxlID0gZmFsc2U7XG4tXHRcdH0gZWxzZSB7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGRlZmF1bHQ6XG4gXHRcdFx0Z290byB1bmxvY2s7XG4gXHRcdH1cbiBcdFx0dGFyZ2V0ID0gcC1cdTAwM2VpbnB1dDtcbkBAIC0xMzY0LDIzICsxNTM5LDc0IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcbiBcdHJldCA9IGljZV93cml0ZV9zbWFfY3RybChodywgZGF0YSk7XG4gXHRpZiAocmV0KVxuLVx0XHRnb3RvIHVubG9jaztcbitcdFx0Z290byByZXN0b3JlX3NtYV9jdHJsO1xuIFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcCwgSUNFX0RQTExfUElOX1RZUEVfU09GVFdBUkUsXG4gXHRcdFx0XHRcdGV4dGFjayk7XG4gXHRpZiAocmV0KVxuLVx0XHRnb3RvIHVubG9jaztcbitcdFx0Z290byByZXN0b3JlX3NtYV9jdHJsO1xuK1xuK1x0cmV0ID0gaWNlX2RwbGxfcGluX2NvbmZpZ19nZXQocGYsIHRhcmdldCwgdHlwZSwgXHUwMDI2b2xkX2NvbmZpZywgZXh0YWNrKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gcmVzdG9yZV9zbWFfY3RybDtcbiBcbiBcdGlmIChlbmFibGUpXG4gXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoaHcsIHRhcmdldCwgZC1cdTAwM2VkcGxsX2lkeCwgdHlwZSwgZXh0YWNrKTtcbiBcdGVsc2VcbiBcdFx0cmV0ID0gaWNlX2RwbGxfcGluX2Rpc2FibGUoaHcsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcbi1cdGlmICghcmV0KVxuLVx0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xuK1x0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuK1x0aWYgKHJldClcbitcdFx0Z290byByZXN0b3JlX3RhcmdldDtcbitcbitcdGlmIChlbmFibGUgXHUwMDI2XHUwMDI2IHAtXHUwMDNlbXV4ZWQgXHUwMDI2XHUwMDI2IHAtXHUwMDNlbXV4ZWQtXHUwMDNlYWN0aXZlKSB7XG4rXHRcdGljZV9kcGxsX2dldF9wZWVyX3RhcmdldChwLVx1MDAzZW11eGVkLCBcdTAwMjZwZWVyX3RhcmdldCwgXHUwMDI2cGVlcl90eXBlKTtcbitcdFx0aWYgKCFwZWVyX3RhcmdldCkge1xuK1x0XHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdFx0Z290byByZXN0b3JlX3RhcmdldDtcbitcdFx0fVxuK1x0XHRyZXQgPSBpY2VfZHBsbF9waW5fY29uZmlnX2dldChwZiwgcGVlcl90YXJnZXQsIHBlZXJfdHlwZSxcbitcdFx0XHRcdFx0ICAgICAgXHUwMDI2cGVlcl9jb25maWcsIGV4dGFjayk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byByZXN0b3JlX3RhcmdldDtcbitcbitcdFx0cGVlcl9kcGxsX2lkeCA9IGljZV9kcGxsX2dldF9mYWxsYmFja19pZHgoXHUwMDI2cGYtXHUwMDNlZHBsbHMsXG4rXHRcdFx0XHRcdFx0XHQgIHBlZXJfdGFyZ2V0KTtcbitcdFx0aWYgKHBlZXJfZHBsbF9pZHggXHUwMDNjIDApXG4rXHRcdFx0cGVlcl9kcGxsX2lkeCA9IGQtXHUwMDNlZHBsbF9pZHg7XG4rXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoXHUwMDI2cGYtXHUwMDNlaHcsIHBlZXJfdGFyZ2V0LCBwZWVyX2RwbGxfaWR4LFxuK1x0XHRcdFx0XHQgIHBlZXJfdHlwZSwgZXh0YWNrKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIHJlc3RvcmVfcGVlcjtcbitcdFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcGVlcl90YXJnZXQsIHBlZXJfdHlwZSxcbitcdFx0XHRcdFx0XHRleHRhY2spO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gcmVzdG9yZV9wZWVyO1xuK1x0fVxuK1xuK1x0Z290byB1bmxvY2s7XG4rXG4rcmVzdG9yZV9wZWVyOlxuK1x0cmVzdG9yZV9lcnIgPVxuK1x0XHRpY2VfZHBsbF9waW5fY29uZmlnX3Jlc3RvcmUocGYsIHBlZXJfdGFyZ2V0LCBwZWVyX3R5cGUsXG4rXHRcdFx0XHRcdCAgICBcdTAwMjZwZWVyX2NvbmZpZywgZXh0YWNrLCByZXQpO1xuK1x0aWYgKHJlc3RvcmVfZXJyKVxuK1x0XHRyZXQgPSByZXN0b3JlX2VycjtcbityZXN0b3JlX3RhcmdldDpcbitcdHJlc3RvcmVfZXJyID1cbitcdFx0aWNlX2RwbGxfcGluX2NvbmZpZ19yZXN0b3JlKHBmLCB0YXJnZXQsIHR5cGUsIFx1MDAyNm9sZF9jb25maWcsXG4rXHRcdFx0XHRcdCAgICBleHRhY2ssIHJldCk7XG4rXHRpZiAocmVzdG9yZV9lcnIpXG4rXHRcdHJldCA9IHJlc3RvcmVfZXJyO1xuK3Jlc3RvcmVfc21hX2N0cmw6XG4rXHRyZXN0b3JlX2VyciA9IGljZV9kcGxsX3Jlc3RvcmVfc21hX2N0cmwocGYsIG9sZF9kYXRhLCByZXQpO1xuK1x0aWYgKHJlc3RvcmVfZXJyKVxuK1x0XHRyZXQgPSByZXN0b3JlX2VycjtcbiBcbiB1bmxvY2s6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cGYtXHUwMDNlZHBsbHMubG9jayk7XG4gXHRpZiAoIXJldClcbi1cdFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKFx1MDAyNnBmLVx1MDAzZWRwbGxzLCBwKTtcbitcdFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKHApO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMTQ2Myw0NCArMTY4OSwxNjggQEAgaWNlX2RwbGxfc21hX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0XHRcdCAgIGVudW0gZHBsbF9waW5fc3RhdGUgc3RhdGUsXG4gXHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbitcdGludCBwZWVyX2RwbGxfaWR4LCByZXN0b3JlX2VyciwgcmV0ID0gLUVJTlZBTDtcbiBcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnNtYSA9IHBpbl9wcml2LCAqdGFyZ2V0O1xuK1x0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSBwZWVyX3R5cGUgPSAwLCB0eXBlO1xuK1x0c3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcl90YXJnZXQgPSBOVUxMO1xuK1x0c3RydWN0IGljZV9kcGxsX3Bpbl9jb25maWcgcGVlcl9jb25maWc7XG4rXHRzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyBvbGRfY29uZmlnO1xuIFx0c3RydWN0IGljZV9kcGxsICpkID0gZHBsbF9wcml2O1xuIFx0c3RydWN0IGljZV9wZiAqcGYgPSBzbWEtXHUwMDNlcGY7XG4tXHRlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGU7XG4rXHR1OCBvbGRfZGF0YSA9IDA7XG4gXHRib29sIGVuYWJsZTtcbi1cdGludCByZXQ7XG4gXG4gXHRpZiAoaWNlX2RwbGxfaXNfcmVzZXQocGYsIGV4dGFjaykpXG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnBmLVx1MDAzZWRwbGxzLmxvY2spO1xuLVx0aWYgKCFzbWEtXHUwMDNlYWN0aXZlKSB7XG4tXHRcdHJldCA9IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHNtYSwgc21hLVx1MDAzZWRpcmVjdGlvbiwgZXh0YWNrKTtcbi1cdFx0aWYgKHJldClcbitcdHN3aXRjaCAoc3RhdGUpIHtcbitcdGNhc2UgRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTpcbitcdFx0LyogUmVqZWN0IGRpcmVjdGlvbi1taXNtYXRjaGVkIHJlcXVlc3RzOiBTRUxFQ1RBQkxFICsgT1VUUFVUXG4rXHRcdCAqIGlzIGFuIGludmFsaWQgY29tYmluYXRpb24sIHJldHVybiAtRUlOVkFMIGluIHRoaXMgY2FzZVxuK1x0XHQgKiBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIGRpc2FibGluZyB0aGUgcGluLlxuK1x0XHQgKi9cbitcdFx0aWYgKHNtYS1cdTAwM2VkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVCkge1xuK1x0XHRcdGVuYWJsZSA9IGZhbHNlO1xuK1x0XHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdH1cbitcdFx0ZW5hYmxlID0gdHJ1ZTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDpcbitcdFx0LyogUmVqZWN0IGRpcmVjdGlvbi1taXNtYXRjaGVkIHJlcXVlc3RzOiBDT05ORUNURUQgKyBJTlBVVFxuK1x0XHQgKiBpcyBhbiBpbnZhbGlkIGNvbWJpbmF0aW9uLCByZXR1cm4gLUVJTlZBTCBpbiB0aGlzIGNhc2VcbitcdFx0ICogaW1tZWRpYXRlbHkgaW5zdGVhZCBvZiBkaXNhYmxpbmcgdGhlIHBpbi5cbitcdFx0ICovXG4rXHRcdGlmIChzbWEtXHUwMDNlZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9JTlBVVCkge1xuK1x0XHRcdGVuYWJsZSA9IGZhbHNlO1xuK1x0XHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdH1cbitcdFx0ZW5hYmxlID0gdHJ1ZTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDpcbitcdFx0ZW5hYmxlID0gZmFsc2U7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0Z290byB1bmxvY2s7XG4gXHR9XG4tXHRpZiAoc21hLVx1MDAzZWRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQpIHtcbi1cdFx0ZW5hYmxlID0gc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcbitcbitcdHN3aXRjaCAoc21hLVx1MDAzZWRpcmVjdGlvbikge1xuK1x0Y2FzZSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQ6XG4gXHRcdHRhcmdldCA9IHNtYS1cdTAwM2VpbnB1dDtcbiBcdFx0dHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX0lOUFVUO1xuLVx0fSBlbHNlIHtcbi1cdFx0ZW5hYmxlID0gc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEO1xuK1x0XHRicmVhaztcbitcdGNhc2UgRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVDpcbiBcdFx0dGFyZ2V0ID0gc21hLVx1MDAzZW91dHB1dDtcbiBcdFx0dHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIHVubG9jaztcbiBcdH1cbiBcbi1cdGlmIChlbmFibGUpXG4rXHRpZiAoIXNtYS1cdTAwM2VhY3RpdmUpIHtcbitcdFx0cmV0ID0gaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQoc21hLCBzbWEtXHUwMDNlZGlyZWN0aW9uLCBleHRhY2spO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gdW5sb2NrO1xuK1x0fVxuK1xuK1x0aWYgKGVuYWJsZSkge1xuK1x0XHR1OCBkYXRhO1xuK1xuK1x0XHRyZXQgPSBpY2VfcmVhZF9zbWFfY3RybChcdTAwMjZwZi1cdTAwM2VodywgXHUwMDI2ZGF0YSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdG9sZF9kYXRhID0gZGF0YTtcbitcdFx0c3dpdGNoIChzbWEtXHUwMDNlaWR4KSB7XG4rXHRcdGNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOlxuK1x0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTFfVFhfRU47XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgSUNFX0RQTExfUElOX1NXXzJfSURYOlxuK1x0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTJfVUZMMl9SWF9ESVM7XG4rXHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMl9UWF9FTjtcbitcdFx0XHRicmVhaztcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRcdGdvdG8gdW5sb2NrO1xuK1x0XHR9XG4rXHRcdHJldCA9IGljZV93cml0ZV9zbWFfY3RybChcdTAwMjZwZi1cdTAwM2VodywgZGF0YSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byByZXN0b3JlX3NtYV9jdHJsO1xuK1x0XHRyZXQgPSBpY2VfZHBsbF9zd19waW5zX3VwZGF0ZShwZik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byByZXN0b3JlX3NtYV9jdHJsO1xuK1xuK1x0XHRyZXQgPSBpY2VfZHBsbF9waW5fY29uZmlnX2dldChwZiwgdGFyZ2V0LCB0eXBlLCBcdTAwMjZvbGRfY29uZmlnLFxuK1x0XHRcdFx0XHQgICAgICBleHRhY2spO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gcmVzdG9yZV9zbWFfY3RybDtcbiBcdFx0cmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZShcdTAwMjZwZi1cdTAwM2VodywgdGFyZ2V0LCBkLVx1MDAzZWRwbGxfaWR4LCB0eXBlLFxuIFx0XHRcdFx0XHQgIGV4dGFjayk7XG4tXHRlbHNlXG4tXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9kaXNhYmxlKFx1MDAyNnBmLVx1MDAzZWh3LCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4tXHRpZiAoIXJldClcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xuK1x0XHQvKiBSZWZyZXNoIHRhcmdldCBzdGF0ZSBiZWZvcmUgcGVlci1zaWRlIG9wZXJhdGlvbnMuICovXG4gXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xuK1xuK1x0XHRpZiAoc21hLVx1MDAzZW11eGVkIFx1MDAyNlx1MDAyNiBzbWEtXHUwMDNlbXV4ZWQtXHUwMDNlYWN0aXZlKSB7XG4rXHRcdFx0aWNlX2RwbGxfZ2V0X3BlZXJfdGFyZ2V0KHNtYS1cdTAwM2VtdXhlZCwgXHUwMDI2cGVlcl90YXJnZXQsXG4rXHRcdFx0XHRcdFx0IFx1MDAyNnBlZXJfdHlwZSk7XG4rXHRcdFx0aWYgKCFwZWVyX3RhcmdldCkge1xuK1x0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0XHRcdGdvdG8gcmVzdG9yZV90YXJnZXQ7XG4rXHRcdFx0fVxuK1xuK1x0XHRcdHJldCA9IGljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLFxuK1x0XHRcdFx0XHRcdCAgICAgIFx1MDAyNnBlZXJfY29uZmlnLCBleHRhY2spO1xuK1x0XHRcdGlmIChyZXQpXG4rXHRcdFx0XHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xuK1xuK1x0XHRcdHBlZXJfZHBsbF9pZHggPVxuK1x0XHRcdFx0aWNlX2RwbGxfZ2V0X2ZhbGxiYWNrX2lkeChcdTAwMjZwZi1cdTAwM2VkcGxscywgcGVlcl90YXJnZXQpO1xuK1x0XHRcdGlmIChwZWVyX2RwbGxfaWR4IFx1MDAzYyAwKVxuK1x0XHRcdFx0cGVlcl9kcGxsX2lkeCA9IGQtXHUwMDNlZHBsbF9pZHg7XG4rXHRcdFx0cmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZShcdTAwMjZwZi1cdTAwM2VodywgcGVlcl90YXJnZXQsXG4rXHRcdFx0XHRcdFx0ICBwZWVyX2RwbGxfaWR4LCBwZWVyX3R5cGUsIGV4dGFjayk7XG4rXHRcdFx0aWYgKHJldClcbitcdFx0XHRcdGdvdG8gcmVzdG9yZV9wZWVyO1xuK1x0XHRcdHJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHBlZXJfdGFyZ2V0LCBwZWVyX3R5cGUsXG4rXHRcdFx0XHRcdFx0XHRleHRhY2spO1xuK1x0XHRcdGlmIChyZXQpXG4rXHRcdFx0XHRnb3RvIHJlc3RvcmVfcGVlcjtcbitcdFx0fVxuK1x0fSBlbHNlIHtcbitcdFx0cmV0ID0gaWNlX2RwbGxfcGluX2Rpc2FibGUoXHUwMDI2cGYtXHUwMDNlaHcsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcbitcdFx0aWYgKCFyZXQpXG4rXHRcdFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLFxuK1x0XHRcdFx0XHRcdFx0ZXh0YWNrKTtcbitcdH1cbitcdGdvdG8gdW5sb2NrO1xuK1xuK3Jlc3RvcmVfcGVlcjpcbitcdHJlc3RvcmVfZXJyID1cbitcdFx0aWNlX2RwbGxfcGluX2NvbmZpZ19yZXN0b3JlKHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLFxuK1x0XHRcdFx0XHQgICAgXHUwMDI2cGVlcl9jb25maWcsIGV4dGFjaywgcmV0KTtcbitcdGlmIChyZXN0b3JlX2VycilcbitcdFx0cmV0ID0gcmVzdG9yZV9lcnI7XG4rcmVzdG9yZV90YXJnZXQ6XG4rXHRyZXN0b3JlX2VyciA9XG4rXHRcdGljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShwZiwgdGFyZ2V0LCB0eXBlLCBcdTAwMjZvbGRfY29uZmlnLFxuK1x0XHRcdFx0XHQgICAgZXh0YWNrLCByZXQpO1xuK1x0aWYgKHJlc3RvcmVfZXJyKVxuK1x0XHRyZXQgPSByZXN0b3JlX2VycjtcbityZXN0b3JlX3NtYV9jdHJsOlxuK1x0cmVzdG9yZV9lcnIgPSBpY2VfZHBsbF9yZXN0b3JlX3NtYV9jdHJsKHBmLCBvbGRfZGF0YSwgcmV0KTtcbitcdGlmIChyZXN0b3JlX2VycilcbitcdFx0cmV0ID0gcmVzdG9yZV9lcnI7XG4gXG4gdW5sb2NrOlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBmLVx1MDAzZWRwbGxzLmxvY2spO1xuIFx0aWYgKCFyZXQpXG4tXHRcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihcdTAwMjZwZi1cdTAwM2VkcGxscywgc21hKTtcbitcdFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKHNtYSk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC0xNjk3LDcgKzIwNDcsNyBAQCBpY2VfZHBsbF9waW5fc21hX2RpcmVjdGlvbl9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0cmV0ID0gaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQocCwgZGlyZWN0aW9uLCBleHRhY2spO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBmLVx1MDAzZWRwbGxzLmxvY2spO1xuIFx0aWYgKCFyZXQpXG4tXHRcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihcdTAwMjZwZi1cdTAwM2VkcGxscywgcCk7XG4rXHRcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihwKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTQ1MTksNiArNDg2OSw4IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3N3X3BpbnMoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRcdGlmIChwaW4tXHUwMDNlaW5wdXQtXHUwMDNlcmVmX3N5bmMpXG4gXHRcdFx0cGluLVx1MDAzZXJlZl9zeW5jID0gcGluLVx1MDAzZWlucHV0LVx1MDAzZXJlZl9zeW5jIC0gcGluX2Fic19pZHg7XG4gXHRcdHBpbi1cdTAwM2VvdXRwdXQgPSBcdTAwMjZkLVx1MDAzZW91dHB1dHNbSUNFX0RQTExfUElOX1NXX09VVFBVVF9BQlMoaSldO1xuK1x0XHRwaW4tXHUwMDNlbXV4ZWQgPSBcdTAwMjZkLVx1MDAzZXVmbFtpXTtcbitcbiBcdFx0aWNlX2RwbGxfcGhhc2VfcmFuZ2Vfc2V0KFx1MDAyNnBpbi1cdTAwM2Vwcm9wLnBoYXNlX3JhbmdlLCBwaGFzZV9hZGpfbWF4KTtcbiBcdH1cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElDRV9EUExMX1BJTl9TV19OVU07IGkrKykge1xuQEAgLTQ1MjgsNyArNDg4MCw4IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3N3X3BpbnMoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRcdHBpbi1cdTAwM2Vwcm9wLmNhcGFiaWxpdGllcyA9IGNhcHM7XG4gXHRcdHBpbi1cdTAwM2VwZiA9IHBmO1xuIFx0XHRwaW4tXHUwMDNlcHJvcC5ib2FyZF9sYWJlbCA9IGljZV9kcGxsX3N3X3Bpbl91ZmxbaV07XG4tXHRcdGlmIChpID09IElDRV9EUExMX1BJTl9TV18xX0lEWCkge1xuK1x0XHRzd2l0Y2ggKGkpIHtcbitcdFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFg6XG4gXHRcdFx0cGluLVx1MDAzZWRpcmVjdGlvbiA9IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQ7XG4gXHRcdFx0cGluX2Fic19pZHggPSBJQ0VfRFBMTF9QSU5fU1dfT1VUUFVUX0FCUyhpKTtcbiBcdFx0XHRwaW4tXHUwMDNlcHJvcC5mcmVxX3N1cHBvcnRlZCA9XG5AQCAtNDUzOCw3ICs0ODkxLDggQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdFx0XHRwaW4tXHUwMDNlcHJvcC5mcmVxX3N1cHBvcnRlZF9udW0gPSBmcmVxX3N1cHBfbnVtO1xuIFx0XHRcdHBpbi1cdTAwM2VpbnB1dCA9IE5VTEw7XG4gXHRcdFx0cGluLVx1MDAzZW91dHB1dCA9IFx1MDAyNmQtXHUwMDNlb3V0cHV0c1twaW5fYWJzX2lkeF07XG4tXHRcdH0gZWxzZSBpZiAoaSA9PSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFgpIHtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFg6XG4gXHRcdFx0cGluLVx1MDAzZWRpcmVjdGlvbiA9IERQTExfUElOX0RJUkVDVElPTl9JTlBVVDtcbiBcdFx0XHRwaW5fYWJzX2lkeCA9IElDRV9EUExMX1BJTl9TV19JTlBVVF9BQlMoaSkgK1xuIFx0XHRcdFx0ICAgICAgaW5wdXRfaWR4X29mZnNldDtcbkBAIC00NTUxLDcgKzQ5MDUsMTIgQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdFx0XHRwaW4tXHUwMDNlcHJvcC5jYXBhYmlsaXRpZXMgPVxuIFx0XHRcdFx0KERQTExfUElOX0NBUEFCSUxJVElFU19QUklPUklUWV9DQU5fQ0hBTkdFIHxcbiBcdFx0XHRcdCBjYXBzKTtcbitcdFx0XHRicmVhaztcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRkZXZfZXJyKGljZV9wZl90b19kZXYocGYpLCBcIkludmFsaWQgVS5GTCBwaW4gaW5kZXg6ICVkXFxuXCIsIGkpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4rXHRcdHBpbi1cdTAwM2VtdXhlZCA9IFx1MDAyNmQtXHUwMDNlc21hW2ldO1xuIFx0XHRpY2VfZHBsbF9waGFzZV9yYW5nZV9zZXQoXHUwMDI2cGluLVx1MDAzZXByb3AucGhhc2VfcmFuZ2UsIHBoYXNlX2Fkal9tYXgpO1xuIFx0fVxuIFxuQEAgLTQ3NDMsNiArNTEwMiwxMyBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mbyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBjZ3UpXG4gXG4gXHRkZS1cdTAwM2VkcGxsX2lkeCA9IGFiaWxpdGllcy5lZWNfZHBsbF9pZHg7XG4gXHRkcC1cdTAwM2VkcGxsX2lkeCA9IGFiaWxpdGllcy5wcHNfZHBsbF9pZHg7XG4rXHRpZiAoZGUtXHUwMDNlZHBsbF9pZHggXHUwMDNlPSBJQ0VfRFBMTF9SQ0xLX05VTV9NQVggfHxcbitcdCAgICBkcC1cdTAwM2VkcGxsX2lkeCBcdTAwM2U9IElDRV9EUExMX1JDTEtfTlVNX01BWCkge1xuK1x0XHRkZXZfZXJyKGljZV9wZl90b19kZXYocGYpLFxuK1x0XHRcdFwiaW52YWxpZCBkcGxsX2lkeCBpbiBjZ3UgYWJpbGl0aWVzOiBlZWM9JXUsIHBwcz0ldVxcblwiLFxuK1x0XHRcdGRlLVx1MDAzZWRwbGxfaWR4LCBkcC1cdTAwM2VkcGxsX2lkeCk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuIFx0ZC1cdTAwM2VudW1faW5wdXRzID0gYWJpbGl0aWVzLm51bV9pbnB1dHM7XG4gXHRkLVx1MDAzZW51bV9vdXRwdXRzID0gYWJpbGl0aWVzLm51bV9vdXRwdXRzO1xuIFx0ZC1cdTAwM2VpbnB1dF9waGFzZV9hZGpfbWF4ID0gbGUzMl90b19jcHUoYWJpbGl0aWVzLm1heF9pbl9waGFzZV9hZGopIFx1MDAyNlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmhcbmluZGV4IDEwM2JhM2U0OTA2ODIuLmRjNmYwOTZiZjA2OWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmhcbkBAIC03Niw2ICs3Niw3IEBAIHN0cnVjdCBpY2VfZHBsbF9waW4ge1xuIFx0czMyIHBoYXNlX2FkanVzdDtcbiBcdHN0cnVjdCBpY2VfZHBsbF9waW4gKmlucHV0O1xuIFx0c3RydWN0IGljZV9kcGxsX3BpbiAqb3V0cHV0O1xuK1x0c3RydWN0IGljZV9kcGxsX3BpbiAqbXV4ZWQ7XG4gXHRlbnVtIGRwbGxfcGluX2RpcmVjdGlvbiBkaXJlY3Rpb247XG4gXHRzNjQgcGhhc2Vfb2Zmc2V0O1xuIFx0dTggc3RhdHVzO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjE6NDM6NTIuMDg2MjA5NjYyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTExMzE1NzI3OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgVGhpcyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGlzIHdvcnRoIGZ1enppbmcuIFRoZSBrZXkgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIHRoZSBjb2RlIHRvdWNoZXMgc29tZXRoaW5nIHRoYXQncyBkaWZmaWN1bHQgb3IgaW1wb3NzaWJsZSB0byByZXByb2R1Y2UgaW4gYSBzdGFuZGFyZCwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VLiBUaGUgZ3VpZGVsaW5lcyBhcmUgcHJldHR5IGNsZWFyIG9uIHdoYXQgZ2V0cyBleGNsdWRlZDogY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXphdGlvbiwgdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVycyB0aGF0IG5lZWQgZGVkaWNhdGVkIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VLCBhbmQgdGVhcmRvd24gY2FsbGJhY2tzIHRoYXQgb25seSBydW4gZHVyaW5nIGhvdC11bnBsdWcgb3BlcmF0aW9ucy5cblxuVGhlIHBhdGNoIG1lbnRpb25zIGEgZmV3IGV4YW1wbGVzLCBidXQgbXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZWAuIEhtbSwgYGljZWAuLi4gSSBrbm93IHRoYXQncyB0aGUgSW50ZWwgRXRoZXJuZXQgQ29udHJvbGxlciBFODAwIHNlcmllcyBkcml2ZXIuIFNvLCBpcyB0aGF0IGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVyPyBBbmQgY3J1Y2lhbGx5LCBkb2VzIGl0ICpyZXF1aXJlKiBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0IGlzbid0IHJlcGxpY2F0ZWQgaW4gUUVNVT9cblxuSSBuZWVkIHRvIG5haWwgdGhpcyBkb3duLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJlcmVhZCB0aG9zZSBleGNsdXNpb24gY3JpdGVyaWEuIENvZGUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRpb24sIGlzIG91dC4gVGhlbiwgKnNwZWNpZmljKiBQQ0llIGRyaXZlcnMgdGhhdCByZXF1aXJlIGFjdHVhbCBoYXJkd2FyZSB0aGF0IFFFTVUgZG9lc24ndCBlbXVsYXRlLiBBbmQgdGhlbiB0aGluZ3MgbGlrZSBkcml2ZXIgdW5yZWdpc3RyYXRpb24gY2FsbGJhY2tzLlxuXG5TbywgYmFjayB0byBgaWNlYC4gSSBrbm93IGl0J3MgdGhlIEludGVsIEU4MDAgc2VyaWVzIGRyaXZlciwgdGhlIEludGVsKFIpIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgTGludXggRHJpdmVyLiBDYW4gUUVNVSBzaW11bGF0ZSBhbiBJbnRlbCBFODAwIHNlcmllcyBOSUM/IE5vcGUsIGRlZmluaXRlbHkgbm90LiBRRU1VIGhhbmRsZXMgdGhpbmdzIGxpa2UgZTEwMDAsIGUxMDAwZSwgbWF5YmUgaWdiIG5vd2FkYXlzLCBydGw4MTM5LCB2aXJ0aW8tbmV0LCBldGMuLCBidXQgaXQgZG9lc24ndCBzaW11bGF0ZSB0aGUgYGljZWAgY29udHJvbGxlci4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRoaW5raW5nIHRoaXMgY291bGQgYmUgYSBwcm9ibGVtLlxuXG5JIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYGljZWAgaXMgZGVzaWduZWQgZm9yIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgb25seS4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb2RlYmFzZSBpdHNlbGYsIGFuZCBjaGVjayBpdHMgS2NvbmZpZyBhbmQgcHJvYmUgbWVjaGFuaXNtIHRvIGNvbmZpcm0gaWYgaXQgY2FuIGJlIGVtdWxhdGVkIG9yIGlmIGl0J3MgcHVyZWx5IGEgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBkcml2ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzU4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjE6NDQ6MDMuMjE3Nzg0ODFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk4MzIxMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0yNjg9Y29uZmlnIEk0MEVWRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yOTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoyOTE6Y29uZmlnIElDRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjkyLVxcdHRyaXN0YXRlIFxcXCJJbnRlbChSKSBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIFN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMxOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMyMDpjb25maWcgSUNFX0hXTU9OXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zMjEtXFx0Ym9vbCBcXFwiSW50ZWwoUikgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBTdXBwb3J0IEhXTU9OIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMzMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMzMTpjb25maWcgSUNFX1NXSVRDSERFVlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMzMyLVxcdGJvb2wgXFxcIlN3aXRjaGRldiBTdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzozNDU6Y29uZmlnIElDRV9IV1RTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zNDYtXFx0Ym9vbCBcXFwiU3VwcG9ydCBIVyBjcm9zcy10aW1lc3RhbXAgb24gcGxhdGZvcm1zIHdpdGggUFRNIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQ0OjAzLjI2NzYyMjIxN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMDcxODI0NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBEUExMIChEaWdpdGFsIFBoYXNlLUxvY2tlZCBMb29wKSBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgSW50ZWwgRXRoZXJuZXQgZHJpdmVyIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IGZvciB0aGUgXCJpY2VcIiBkcml2ZXIuIEknbSBnb2luZyB0byBmb2N1cyBvbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmNgLiBNeSBwcmltYXJ5IGludGVyZXN0IGlzIGluIGluaXRpYWxpemF0aW9uIOKAkyBob3cgdGhlIERQTEwgZ2V0cyBzZXQgdXAgaW5pdGlhbGx5IOKAkyBhbmQgdGhlbiwgaW1wb3J0YW50bHksIGhvdyBpdCdzICp1c2VkKiB3aXRoaW4gdGhlIGxhcmdlciBkcml2ZXIgY29udGV4dC4gSSBuZWVkIHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgY29udHJvbCBmbG93LCBhbnkgcG90ZW50aWFsIGVycm9yIGhhbmRsaW5nIHJlbGF0ZWQgdG8gRFBMTCBvcGVyYXRpb24sIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgbW9kdWxlcyBhbmQgZnVuY3Rpb25zIHdpdGhpbiB0aGUgXCJpY2VcIiBkcml2ZXIuIFRoaXMgaXMgbGlrZWx5IGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHRpbWluZyBhbmQgY2xvY2tpbmcgYXNwZWN0cyBvZiB0aGUgaW50ZXJmYWNlLCBhbmQgaG93IHRoYXQgaXMgY29udHJpYnV0aW5nIHRvIG92ZXJhbGwgcGVyZm9ybWFuY2UuIEkgZXhwZWN0IHRoZXJlJ3MgcHJvYmFibHkgc29tZSBpbXBvcnRhbnQgY29uc2lkZXJhdGlvbnMgcmVsYXRpbmcgdG8gcG93ZXIgbWFuYWdlbWVudCBhbmQvb3IgY29uZmlndXJhdGlvbi4gTGV0J3Mgc3RhcnQgZGlnZ2luZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTQwNDQsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTo0NDoyNC4zMzk0NTI1OTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjQwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0LyogQ29weXJpZ2h0IChDKSAyMDIyLCBJbnRlbCBDb3Jwb3JhdGlvbi4gKi9cXG4gICAzOlxcdFxcbiAgIDQ6XFx0I2luY2x1ZGUgXFxcImljZS5oXFxcIlxcbiAgIDU6XFx0I2luY2x1ZGUgXFxcImljZV9saWIuaFxcXCJcXG4gICA2OlxcdCNpbmNsdWRlIFxcXCJpY2VfdHJhY2UuaFxcXCJcXG4gICA3OlxcdCNpbmNsdWRlIFxcXCJpY2VfdHhjbGsuaFxcXCJcXG4gICA4OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9kcGxsLmhcXHUwMDNlXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvcGVydHkuaFxcdTAwM2VcXG4gIDEwOlxcdFxcbiAgMTE6XFx0I2RlZmluZSBJQ0VfQ0dVX1NUQVRFX0FDUV9FUlJfVEhSRVNIT0xEXFx0XFx0NTBcXG4gIDEyOlxcdCNkZWZpbmUgSUNFX0RQTExfUElOX0lEWF9JTlZBTElEXFx0XFx0MHhmZlxcbiAgMTM6XFx0I2RlZmluZSBJQ0VfRFBMTF9SQ0xLX05VTV9QRVJfUEZcXHRcXHQxXFxuICAxNDpcXHQjZGVmaW5lIElDRV9EUExMX1BJTl9FU1lOQ19QVUxTRV9ISUdIX1BFUkNFTlRcXHQyNVxcbiAgMTU6XFx0I2RlZmluZSBJQ0VfRFBMTF9QSU5fR0VOX1JDTEtfRlJFUVxcdFxcdDE5NTMxMjVcXG4gIDE2OlxcdCNkZWZpbmUgSUNFX0RQTExfUElOX1BSSU9fT1VUUFVUXFx0XFx0MHhmZlxcbiAgMTc6XFx0I2RlZmluZSBJQ0VfRFBMTF9JTlBVVF9SRUZfTlVNXFx0XFx0XFx0MTBcXG4gIDE4OlxcdCNkZWZpbmUgSUNFX0RQTExfUEhBU0VfT0ZGU0VUX1BFUklPRFxcdFxcdDJcXG4gIDE5OlxcdCNkZWZpbmUgSUNFX0RQTExfU1dfUElOX0lOUFVUX0JBU0VfU0ZQXFx0XFx0NFxcbiAgMjA6XFx0I2RlZmluZSBJQ0VfRFBMTF9TV19QSU5fSU5QVVRfQkFTRV9RU0ZQXFx0XFx0NlxcbiAgMjE6XFx0I2RlZmluZSBJQ0VfRFBMTF9TV19QSU5fT1VUUFVUX0JBU0VcXHRcXHQwXFxuICAyMjpcXHRcXG4gIDIzOlxcdCNkZWZpbmUgRTgyNV9SQ0xLX1BBUkVOVF8wX1BJTl9JRFhcXHRcXHQwXFxuICAyNDpcXHQjZGVmaW5lIEU4MjVfUkNMS19QQVJFTlRfMV9QSU5fSURYXFx0XFx0MVxcbiAgMjU6XFx0XFxuICAyNjpcXHQjZGVmaW5lIElDRV9EUExMX1BJTl9TV19JTlBVVF9BQlMoaW5faWR4KSBcXFxcXFxuICAyNzpcXHRcXHQoSUNFX0RQTExfU1dfUElOX0lOUFVUX0JBU0VfU0ZQICsgKGluX2lkeCkpXFxuICAyODpcXHRcXG4gIDI5OlxcdCNkZWZpbmUgSUNFX0RQTExfUElOX1NXXzFfSU5QVVRfQUJTX0lEWCBcXFxcXFxuICAzMDpcXHRcXHQoSUNFX0RQTExfUElOX1NXX0lOUFVUX0FCUyhJQ0VfRFBMTF9QSU5fU1dfMV9JRFgpKVxcbiAgMzE6XFx0XFxuICAzMjpcXHQjZGVmaW5lIElDRV9EUExMX1BJTl9TV18yX0lOUFVUX0FCU19JRFggXFxcXFxcbiAgMzM6XFx0XFx0KElDRV9EUExMX1BJTl9TV19JTlBVVF9BQlMoSUNFX0RQTExfUElOX1NXXzJfSURYKSlcXG4gIDM0OlxcdFxcbiAgMzU6XFx0I2RlZmluZSBJQ0VfRFBMTF9QSU5fU1dfT1VUUFVUX0FCUyhvdXRfaWR4KSBcXFxcXFxuICAzNjpcXHRcXHQoSUNFX0RQTExfU1dfUElOX09VVFBVVF9CQVNFICsgKG91dF9pZHgpKVxcbiAgMzc6XFx0XFxuICAzODpcXHQjZGVmaW5lIElDRV9EUExMX1BJTl9TV18xX09VVFBVVF9BQlNfSURYIFxcXFxcXG4gIDM5OlxcdFxcdChJQ0VfRFBMTF9QSU5fU1dfT1VUUFVUX0FCUyhJQ0VfRFBMTF9QSU5fU1dfMV9JRFgpKVxcbiAgNDA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIxOjQ0OjI0LjMzOTg3OTgyNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5ODUwNTA3MjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50IGZvciBgaWNlX2RwbGwuY2AgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoLiBJdCdzIHRvdWNoaW5nIGBpY2VfZHBsbC5jYCBhbmQgYGljZV9kcGxsLmhgLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBwYXJ0IG9mIHRoZSBJbnRlbCBgaWNlYCBkcml2ZXIgZm9yIHRoZSBFODAwIHNlcmllcyBFdGhlcm5ldCBjb250cm9sbGVycy4gVGhpcyBpcyBzcGVjaWZpY2FsbHkgZm9jdXNlZCBvbiB0aGUgRFBMTCBzdWJzeXN0ZW0sIGhhbmRsaW5nIGFsbCB0aGUgbnVhbmNlcyBvZiB0aG9zZSBwaW5zLCB0aGUgU01BIGFuZCBVLkZMIGNvbm5lY3RvcnMsIENHVSwgYW5kIHRoZSBQQ0E5NTc1IEdQSU8gZXhwYW5kZXIg4oCTIGFsbCB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgZGV0YWlscy5cblxuTm93LCBsZXQncyBnbyBvdmVyIHRoZSBpbnN0cnVjdGlvbnMgZm9yIGRldGVybWluaW5nIGlmIHRoaXMgY29kZSBpcyB3b3J0aCBmdXp6aW5nLiBUaGUga2V5IGhlcmUgaXMgdGhlIFwiaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHNcIiBjbGF1c2UuIFNwZWNpZmljYWxseSwgaXQgbm90ZXMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoIGFuZCBTbWFydE5JQyBkcml2ZXJzIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSBhcmVuJ3QgZnV6emFibGUgaW4gc3RhbmRhcmQgUUVNVS5cblxuVGhlIGBpY2VgIGRyaXZlciBpcyAqcHJlY2lzZWx5KiB0aGF0OiBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgZHJpdmVyIGZvciBJbnRlbCdzIEU4MDAgc2VyaWVzLiBJdCdzIGRlc2lnbmVkIHRvIGludGVyZmFjZSBkaXJlY3RseSB3aXRoIHBoeXNpY2FsIEludGVsIGhhcmR3YXJlLiBUaGUgRFBMTCBmdW5jdGlvbmFsaXR5LCB3aGljaCB0aGlzIHBhdGNoIG1vZGlmaWVzLCBpcyBkZXBlbmRlbnQgb24gc3BlY2lmaWMgaGFyZHdhcmUgYm9hcmRzIHRoYXQgSSdkIG5lZWQgdG8gZnV6eiB0aGVzZSBjb2RlIHBhdGhzLiBUaGlzIGlzIGZhciBmcm9tIGJlaW5nIHBvc3NpYmxlIGluIGEgc3RhbmRhcmQgUUVNVSBpbnN0YW5jZSwgYW5kIGNlcnRhaW5seSBub3Qgc29tZXRoaW5nIHRoYXQgY2FuIGJlIHByYWN0aWNhbGx5IHRlc3RlZCBpbiBzb21ldGhpbmcgbGlrZSBHQ0Ugb3IgU3l6a2FsbGVyIFZNcy4gV2UncmUgdGFsa2luZyBhYm91dCBoYXJkd2FyZS1zcGVjaWZpYyBEUExMIC8gQ0dVIC8gU01BIHBpbiBhY2Nlc3MuXG5cblRoZXJlZm9yZSwgZ2l2ZW4gdGhhdCBpdCByZXF1aXJlcyAqcGh5c2ljYWwqIEludGVsIEU4MDAgaGFyZHdhcmUsIGFuZCB0aGF0IHRoaXMgY29kZSdzIGZ1bmN0aW9uYWxpdHkgaXMgZGlyZWN0bHkgdGllZCB0byB0aGlzIGhhcmR3YXJlLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IHRoaXMgaXNuJ3Qgd29ydGggZnV6emluZyBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMuXG5cblNvLCBsZXQncyBzb2xpZGlmeSB0aGUgYXNzZXNzbWVudDpcblxuKiAgICoqV29ydGhGdXp6aW5nOiBmYWxzZSoqXG4qICAgKipGb2N1c1N5bWJvbHM6IFxcWyBdKipcbiogICAqKkVuYWJsZUNvbmZpZ3M6IFxcWyBdKipcbiogICAqKlJlYXNvbmluZzogVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBFODAwIHNlcmllcyBldGhlcm5ldCBkcml2ZXIgKGBpY2VgKSwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGVzZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLioqXG5cblRoYXQgc2hvdWxkIGNvdmVyIGl0LiBSZWFkeSB0byBzdWJtaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDg5LCJPdXRwdXRUb2tlbnMiOjkxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjE6NDQ6NTQuMTkwMzkxODI5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBjaGFuZ2VzIG1vZGlmeSB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyAoaWNlKSBkcml2ZXIgRFBMTCBwaW4gaGFuZGxpbmcuIFRoZSBpY2UgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIEludGVsIEU4MDAgc2VyaWVzIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBjaGFuZ2VzIG1vZGlmeSB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyAoaWNlKSBkcml2ZXIgRFBMTCBwaW4gaGFuZGxpbmcuIFRoZSBpY2UgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIEludGVsIEU4MDAgc2VyaWVzIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMTo0NDo1NC4xOTA0MzIxNDlaIiwiU2VxIjo5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcgsml[1] Phase: Running StartedAt: 2026-08-31 21:45:06 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgsml[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-31 21:45:06 +0000 UTC FinishedAt: 2026-08-31 21:45:11 +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,}