Name: series-workflowl7dxp Phase: Failed StartedAt: 2026-08-13 20:36:22 +0000 UTC FinishedAt: 2026-08-13 20:55:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl7dxp[0] Phase: Succeeded StartedAt: 2026-08-13 20:36:22 +0000 UTC FinishedAt: 2026-08-13 20:55:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl7dxp[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 20:36:22 +0000 UTC FinishedAt: 2026-08-13 20:55:12 +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+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJyb2FkY29tIE5ldFh0cmVtZS1DL0UgKGJueHQpIEV0aGVybmV0IGRyaXZlciB0byBpbXByb3ZlIElSUSBhZmZpbml0eSB0cmFja2luZyBhY3Jvc3MgSVJRIHJlYWxsb2NhdGlvbnMuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGRyaXZlciBmb3IgcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDlhMzI3OTM0OGQxODAxZGU0OTg1M2ZlMDU3NDRiYjNiYTViZDYwMDVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAyMDo1NDozNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jXG5pbmRleCAxZTQ5NDRmM2U2MDY1Li4zNTc5NTM3NGE4ZGRhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jXG5AQCAtMTE1OTIsNyAmIzQzOzExNTkyLDcgQEAgc3RhdGljIGludCBibnh0X2dldF9udW1fbXNpeChzdHJ1Y3QgYm54dCAqYnApXG4gXG4gc3RhdGljIGludCBibnh0X2luaXRfaW50X21vZGUoc3RydWN0IGJueHQgKmJwKVxuIHtcbi1cdGludCBpLCB0b3RhbF92ZWNzLCBtYXgsIHJjID0gMCwgbWluID0gMSwgdWxwX21zaXgsIHR4X2NwLCB0Ymxfc2l6ZTtcbiYjNDM7XHRpbnQgaSwgdG90YWxfdmVjcywgbWF4LCByYywgbWluID0gMSwgdWxwX21zaXgsIHR4X2NwLCB0Ymxfc2l6ZTtcbiBcbiBcdHRvdGFsX3ZlY3MgPSBibnh0X2dldF9udW1fbXNpeChicCk7XG4gXHRtYXggPSBibnh0X2dldF9tYXhfZnVuY19pcnFzKGJwKTtcbkBAIC0xMTYxNywyNiAmIzQzOzExNjE3LDI2IEBAIHN0YXRpYyBpbnQgYm54dF9pbml0X2ludF9tb2RlKHN0cnVjdCBibnh0ICpicClcbiBcdGlmIChwY2lfbXNpeF9jYW5fYWxsb2NfZHluKGJwLVx1MDAzZXBkZXYpKVxuIFx0XHR0Ymxfc2l6ZSA9IG1heDtcbiBcdGJwLVx1MDAzZWlycV90YmwgPSBremFsbG9jX29ianMoKmJwLVx1MDAzZWlycV90YmwsIHRibF9zaXplKTtcbi1cdGlmIChicC1cdTAwM2VpcnFfdGJsKSB7XG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRvdGFsX3ZlY3M7IGkmIzQzOyYjNDM7KVxuLVx0XHRcdGJwLVx1MDAzZWlycV90YmxbaV0udmVjdG9yID0gcGNpX2lycV92ZWN0b3IoYnAtXHUwMDNlcGRldiwgaSk7XG4tXG4tXHRcdGJwLVx1MDAzZXRvdGFsX2lycXMgPSB0b3RhbF92ZWNzO1xuLVx0XHQvKiBUcmltIHJpbmdzIGJhc2VkIHVwb24gbnVtIG9mIHZlY3RvcnMgYWxsb2NhdGVkICovXG4tXHRcdHJjID0gYm54dF90cmltX3JpbmdzKGJwLCBcdTAwMjZicC1cdTAwM2VyeF9ucl9yaW5ncywgXHUwMDI2YnAtXHUwMDNldHhfbnJfcmluZ3MsXG4tXHRcdFx0XHQgICAgIHRvdGFsX3ZlY3MgLSB1bHBfbXNpeCwgbWluID09IDEpO1xuLVx0XHRpZiAocmMpXG4tXHRcdFx0Z290byBtc2l4X3NldHVwX2V4aXQ7XG4tXG4tXHRcdHR4X2NwID0gYm54dF9udW1fdHhfdG9fY3AoYnAsIGJwLVx1MDAzZXR4X25yX3JpbmdzKTtcbi1cdFx0YnAtXHUwMDNlY3BfbnJfcmluZ3MgPSAobWluID09IDEpID9cbi1cdFx0XHRcdCAgbWF4X3QoaW50LCB0eF9jcCwgYnAtXHUwMDNlcnhfbnJfcmluZ3MpIDpcbi1cdFx0XHRcdCAgdHhfY3AgJiM0MzsgYnAtXHUwMDNlcnhfbnJfcmluZ3M7XG4tXG4tXHR9IGVsc2Uge1xuJiM0MztcdGlmICghYnAtXHUwMDNlaXJxX3RibCkge1xuIFx0XHRyYyA9IC1FTk9NRU07XG4gXHRcdGdvdG8gbXNpeF9zZXR1cF9leGl0O1xuIFx0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0b3RhbF92ZWNzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGJwLVx1MDAzZWlycV90YmxbaV0udmVjdG9yID0gcGNpX2lycV92ZWN0b3IoYnAtXHUwMDNlcGRldiwgaSk7XG4mIzQzO1xuJiM0MztcdGJwLVx1MDAzZXRvdGFsX2lycXMgPSB0b3RhbF92ZWNzO1xuJiM0MztcdC8qIFRyaW0gcmluZ3MgYmFzZWQgdXBvbiBudW0gb2YgdmVjdG9ycyBhbGxvY2F0ZWQgKi9cbiYjNDM7XHRyYyA9IGJueHRfdHJpbV9yaW5ncyhicCwgXHUwMDI2YnAtXHUwMDNlcnhfbnJfcmluZ3MsIFx1MDAyNmJwLVx1MDAzZXR4X25yX3JpbmdzLFxuJiM0MztcdFx0XHQgICAgIHRvdGFsX3ZlY3MgLSB1bHBfbXNpeCwgbWluID09IDEpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdGdvdG8gbXNpeF9zZXR1cF9leGl0O1xuJiM0MztcbiYjNDM7XHR0eF9jcCA9IGJueHRfbnVtX3R4X3RvX2NwKGJwLCBicC1cdTAwM2V0eF9ucl9yaW5ncyk7XG4mIzQzO1x0YnAtXHUwMDNlY3BfbnJfcmluZ3MgPSAobWluID09IDEpID9cbiYjNDM7XHRcdFx0ICBtYXhfdChpbnQsIHR4X2NwLCBicC1cdTAwM2VyeF9ucl9yaW5ncykgOlxuJiM0MztcdFx0XHQgIHR4X2NwICYjNDM7IGJwLVx1MDAzZXJ4X25yX3JpbmdzO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIFxuIG1zaXhfc2V0dXBfZXhpdDpcbkBAIC0xMTc5Miw2ICYjNDM7MTE3OTIsOSBAQCBzdGF0aWMgdm9pZCBibnh0X2lycV9hZmZpbml0eV9ub3RpZnkoc3RydWN0IGlycV9hZmZpbml0eV9ub3RpZnkgKm5vdGlmeSxcbiBcbiBcdGlycSA9IGNvbnRhaW5lcl9vZihub3RpZnksIHN0cnVjdCBibnh0X2lycSwgYWZmaW5pdHlfbm90aWZ5KTtcbiBcbiYjNDM7XHRjcHVtYXNrX2NvcHkoaXJxLVx1MDAzZWJwLVx1MDAzZXJpbmdfY3B1X21hc2tbaXJxLVx1MDAzZXJpbmdfbnJdLCBtYXNrKTtcbiYjNDM7XHRzZXRfYml0KGlycS1cdTAwM2VyaW5nX25yLCBpcnEtXHUwMDNlYnAtXHUwMDNlcmluZ19hZmZpbml0eV9zZXQpO1xuJiM0MztcbiAjaWZkZWYgQ09ORklHX1JGU19BQ0NFTFxuIFx0aWYgKGlycS1cdTAwM2VicC1cdTAwM2VkZXYtXHUwMDNlcnhfY3B1X3JtYXAgXHUwMDI2XHUwMDI2IGlycS1cdTAwM2VyaW5nX25yIFx1MDAzYyBpcnEtXHUwMDNlYnAtXHUwMDNlcnhfbnJfcmluZ3MpIHtcbiBcdFx0aW50IGVycjtcbkBAIC0xMTgwNyw4ICYjNDM7MTE4MTAsNiBAQCBzdGF0aWMgdm9pZCBibnh0X2lycV9hZmZpbml0eV9ub3RpZnkoc3RydWN0IGlycV9hZmZpbml0eV9ub3RpZnkgKm5vdGlmeSxcbiBcdGlmICghaXJxLVx1MDAzZWJwLVx1MDAzZXRwaF9tb2RlKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRjcHVtYXNrX2NvcHkoaXJxLVx1MDAzZWNwdV9tYXNrLCBtYXNrKTtcbi1cbiBcdGlmIChpcnEtXHUwMDNlcmluZ19uciBcdTAwM2U9IGlycS1cdTAwM2VicC1cdTAwM2VyeF9ucl9yaW5ncylcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTExODUwLDEwICYjNDM7MTE4NTEsNiBAQCBzdGF0aWMgdm9pZCBibnh0X3JlZ2lzdGVyX2lycV9ub3RpZmllcihzdHJ1Y3QgYm54dCAqYnAsIHN0cnVjdCBibnh0X2lycSAqaXJxKVxuIFxuIFx0aXJxLVx1MDAzZWJwID0gYnA7XG4gXG4tXHQvKiBOb3RoaW5nIHRvIGRvIGlmIFRQSCBpcyBub3QgZW5hYmxlZCAqL1xuLVx0aWYgKCFicC1cdTAwM2V0cGhfbW9kZSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0LyogUmVnaXN0ZXIgSVJRIGFmZmluaXR5IG5vdGlmaWVyICovXG4gXHRub3RpZnkgPSBcdTAwMjZpcnEtXHUwMDNlYWZmaW5pdHlfbm90aWZ5O1xuIFx0bm90aWZ5LVx1MDAzZWlycSA9IGlycS1cdTAwM2V2ZWN0b3I7XG5AQCAtMTE4NjMsNiAmIzQzOzExODYwLDQxIEBAIHN0YXRpYyB2b2lkIGJueHRfcmVnaXN0ZXJfaXJxX25vdGlmaWVyKHN0cnVjdCBibnh0ICpicCwgc3RydWN0IGJueHRfaXJxICppcnEpXG4gXHRpcnFfc2V0X2FmZmluaXR5X25vdGlmaWVyKGlycS1cdTAwM2V2ZWN0b3IsIG5vdGlmeSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGJueHRfYWxsb2NfcmluZ19jcHVfbWFza3Moc3RydWN0IGJueHQgKmJwKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGJwLVx1MDAzZXJpbmdfY3B1X21hc2sgPSBremFsbG9jX29ianMoKmJwLVx1MDAzZXJpbmdfY3B1X21hc2ssIGJwLVx1MDAzZW1heF9pcnFzKTtcbiYjNDM7XHRpZiAoIWJwLVx1MDAzZXJpbmdfY3B1X21hc2spXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0YnAtXHUwMDNlcmluZ19hZmZpbml0eV9zZXQgPSBiaXRtYXBfemFsbG9jKGJwLVx1MDAzZW1heF9pcnFzLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWJwLVx1MDAzZXJpbmdfYWZmaW5pdHlfc2V0KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGJwLVx1MDAzZW1heF9pcnFzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGlmICghemFsbG9jX2NwdW1hc2tfdmFyKFx1MDAyNmJwLVx1MDAzZXJpbmdfY3B1X21hc2tbaV0sIEdGUF9LRVJORUwpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGJueHRfZnJlZV9yaW5nX2NwdV9tYXNrcyhzdHJ1Y3QgYm54dCAqYnApXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFicC1cdTAwM2VyaW5nX2NwdV9tYXNrKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBicC1cdTAwM2VtYXhfaXJxczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRmcmVlX2NwdW1hc2tfdmFyKGJwLVx1MDAzZXJpbmdfY3B1X21hc2tbaV0pO1xuJiM0MztcbiYjNDM7XHRiaXRtYXBfZnJlZShicC1cdTAwM2VyaW5nX2FmZmluaXR5X3NldCk7XG4mIzQzO1x0YnAtXHUwMDNlcmluZ19hZmZpbml0eV9zZXQgPSBOVUxMO1xuJiM0MztcdGtmcmVlKGJwLVx1MDAzZXJpbmdfY3B1X21hc2spO1xuJiM0MztcdGJwLVx1MDAzZXJpbmdfY3B1X21hc2sgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGJueHRfZnJlZV9pcnEoc3RydWN0IGJueHQgKmJwKVxuIHtcbiBcdHN0cnVjdCBibnh0X2lycSAqaXJxO1xuQEAgLTExODc3LDEzICYjNDM7MTE5MDksNyBAQCBzdGF0aWMgdm9pZCBibnh0X2ZyZWVfaXJxKHN0cnVjdCBibnh0ICpicClcbiBcdFx0aXJxID0gXHUwMDI2YnAtXHUwMDNlaXJxX3RibFttYXBfaWR4XTtcbiBcdFx0aWYgKGlycS1cdTAwM2VyZXF1ZXN0ZWQpIHtcbiBcdFx0XHRibnh0X3JlbGVhc2VfaXJxX25vdGlmaWVyKGlycSk7XG4tXG4tXHRcdFx0aWYgKGlycS1cdTAwM2VoYXZlX2NwdW1hc2spIHtcbi1cdFx0XHRcdGlycV91cGRhdGVfYWZmaW5pdHlfaGludChpcnEtXHUwMDNldmVjdG9yLCBOVUxMKTtcbi1cdFx0XHRcdGZyZWVfY3B1bWFza192YXIoaXJxLVx1MDAzZWNwdV9tYXNrKTtcbi1cdFx0XHRcdGlycS1cdTAwM2VoYXZlX2NwdW1hc2sgPSAwO1xuLVx0XHRcdH1cbi1cbiYjNDM7XHRcdFx0aXJxX3VwZGF0ZV9hZmZpbml0eV9oaW50KGlycS1cdTAwM2V2ZWN0b3IsIE5VTEwpO1xuIFx0XHRcdGZyZWVfaXJxKGlycS1cdTAwM2V2ZWN0b3IsIGJwLVx1MDAzZWJuYXBpW2ldKTtcbiBcdFx0fVxuIFxuQEAgLTExOTI1LDkgJiM0MzsxMTk1MSw5IEBAIHN0YXRpYyBpbnQgYm54dF9yZXF1ZXN0X2lycShzdHJ1Y3QgYm54dCAqYnApXG4gXHRcdGJwLVx1MDAzZXRwaF9tb2RlID0gUENJX1RQSF9TVF9JVl9NT0RFO1xuIFxuIFx0Zm9yIChpID0gMCwgaiA9IDA7IGkgXHUwMDNjIGJwLVx1MDAzZWNwX25yX3JpbmdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IGNwdW1hc2sgKmNwdV9tYXNrID0gYnAtXHUwMDNlcmluZ19jcHVfbWFza1tpXTtcbiBcdFx0aW50IG1hcF9pZHggPSBibnh0X2NwX251bV90b19pcnFfbnVtKGJwLCBpKTtcbiBcdFx0c3RydWN0IGJueHRfaXJxICppcnEgPSBcdTAwMjZicC1cdTAwM2VpcnFfdGJsW21hcF9pZHhdO1xuLVx0XHR1bnNpZ25lZCBpbnQgY3B1X251bTtcbiBcdFx0dTE2IHRhZztcbiBcbiBcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1JGU19BQ0NFTCkgXHUwMDI2XHUwMDI2XG5AQCAtMTE5NDYsMTkgJiM0MzsxMTk3MiwyNCBAQCBzdGF0aWMgaW50IGJueHRfcmVxdWVzdF9pcnEoc3RydWN0IGJueHQgKmJwKVxuIFxuIFx0XHRuZXRpZl9uYXBpX3NldF9pcnFfbG9ja2VkKFx1MDAyNmJwLVx1MDAzZWJuYXBpW2ldLVx1MDAzZW5hcGksIGlycS1cdTAwM2V2ZWN0b3IpO1xuIFx0XHRpcnEtXHUwMDNlcmVxdWVzdGVkID0gMTtcbi1cbi1cdFx0aWYgKCF6YWxsb2NfY3B1bWFza192YXIoXHUwMDI2aXJxLVx1MDAzZWNwdV9tYXNrLCBHRlBfS0VSTkVMKSlcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0aXJxLVx1MDAzZWhhdmVfY3B1bWFzayA9IDE7XG4gXHRcdGlycS1cdTAwM2Vtc2l4X25yID0gbWFwX2lkeDtcbiBcdFx0aXJxLVx1MDAzZXJpbmdfbnIgPSBpO1xuLVx0XHRjcHVfbnVtID0gY3B1bWFza19sb2NhbF9zcHJlYWQoaSwgbnVtYV9ub2RlKTtcbi1cdFx0Y3B1bWFza19zZXRfY3B1KGNwdV9udW0sIGlycS1cdTAwM2VjcHVfbWFzayk7XG4mIzQzO1xuJiM0MztcdFx0LyogUmV1c2UgdGhlIG1hc2sgcmVjb3JkZWQgYmVmb3JlIHRoZSBJUlFzIHdlcmUgZnJlZWQuIE5vdGhpbmdcbiYjNDM7XHRcdCAqIHdhcyByZWNvcmRlZCB5ZXQgb24gdGhlIHZlcnkgZmlyc3QgcmVxdWVzdCwgYW5kIHRoZSBtYXNrXG4mIzQzO1x0XHQgKiBtYXkgaGF2ZSBnb25lIHN0YWxlIGlmIHRoZSBDUFVzIHdlbnQgb2ZmbGluZSBpbiBiZXR3ZWVuLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIXRlc3RfYml0KGksIGJwLVx1MDAzZXJpbmdfYWZmaW5pdHlfc2V0KSB8fFxuJiM0MztcdFx0ICAgICFjcHVtYXNrX2ludGVyc2VjdHMoY3B1X21hc2ssIGNwdV9vbmxpbmVfbWFzaykpIHtcbiYjNDM7XHRcdFx0Y2xlYXJfYml0KGksIGJwLVx1MDAzZXJpbmdfYWZmaW5pdHlfc2V0KTtcbiYjNDM7XHRcdFx0Y3B1bWFza19jbGVhcihjcHVfbWFzayk7XG4mIzQzO1x0XHRcdGNwdW1hc2tfc2V0X2NwdShjcHVtYXNrX2xvY2FsX3NwcmVhZChpLCBudW1hX25vZGUpLFxuJiM0MztcdFx0XHRcdFx0Y3B1X21hc2spO1xuJiM0MztcdFx0fVxuIFxuIFx0XHQvKiBJbml0IFNUIHRhYmxlIGVudHJ5IGlmIHdlIGNhbiBnZXQgdGhlIG1hcHBpbmcgKi9cbiBcdFx0aWYgKCFwY2llX3RwaF9nZXRfY3B1X3N0KGJwLVx1MDAzZXBkZXYsIFRQSF9NRU1fVFlQRV9WTSxcbi1cdFx0XHRcdFx0IGNwdV9udW0sIFx1MDAyNnRhZykpIHtcbiYjNDM7XHRcdFx0XHRcdCBjcHVtYXNrX2ZpcnN0KGNwdV9tYXNrKSwgXHUwMDI2dGFnKSkge1xuIFx0XHRcdHBjaWVfdHBoX3NldF9zdF9lbnRyeShicC1cdTAwM2VwZGV2LCBpcnEtXHUwMDNlbXNpeF9uciwgdGFnKTtcbiBcdFx0XHRpcnEtXHUwMDNldGFnID0gdGFnO1xuIFx0XHRcdGlycS1cdTAwM2VuZXdfdGFnID0gdGFnO1xuQEAgLTExOTY2LDEwICYjNDM7MTE5OTcsMTkgQEAgc3RhdGljIGludCBibnh0X3JlcXVlc3RfaXJxKHN0cnVjdCBibnh0ICpicClcbiBcbiBcdFx0Ym54dF9yZWdpc3Rlcl9pcnFfbm90aWZpZXIoYnAsIGlycSk7XG4gXG4tXHRcdHJjID0gaXJxX3VwZGF0ZV9hZmZpbml0eV9oaW50KGlycS1cdTAwM2V2ZWN0b3IsIGlycS1cdTAwM2VjcHVfbWFzayk7XG4mIzQzO1x0XHQvKiBPbmx5IHB1dCB0aGUgSVJRIGJhY2sgd2hlcmUgaXQgd2FzIGNvbmZpZ3VyZWQgdG8gYmUsIG91ciBvd25cbiYjNDM7XHRcdCAqIHBsYWNlbWVudCBpcyBqdXN0IGEgaGludCwgdGhlIGNvcmUgc3ByZWFkcyB3aXRoaW5cbiYjNDM7XHRcdCAqIGlycV9kZWZhdWx0X2FmZmluaXR5IHdoaWNoIHdlIGtub3cgbm90aGluZyBhYm91dC5cbiYjNDM7XHRcdCAqIFNldCBhZnRlciBpbnN0YWxsaW5nIHRoZSBub3RpZmllciwgaWYgd2UgcmFjZSB3aXRoIHRoZSB1c2VyXG4mIzQzO1x0XHQgKiBpdCYjMzk7cyBiZXR0ZXIgdG8gb3ZlcndyaXRlIHRoYW4gbWlzcyB0aGUgbm90aWZpY2F0aW9uLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAodGVzdF9iaXQoaSwgYnAtXHUwMDNlcmluZ19hZmZpbml0eV9zZXQpKVxuJiM0MztcdFx0XHRyYyA9IGlycV9zZXRfYWZmaW5pdHlfYW5kX2hpbnQoaXJxLVx1MDAzZXZlY3RvciwgY3B1X21hc2spO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRyYyA9IGlycV91cGRhdGVfYWZmaW5pdHlfaGludChpcnEtXHUwMDNldmVjdG9yLCBjcHVfbWFzayk7XG4gXHRcdGlmIChyYykge1xuIFx0XHRcdG5ldGRldl93YXJuKGJwLVx1MDAzZWRldixcbi1cdFx0XHRcdCAgICBcJiMzNDtVcGRhdGUgYWZmaW5pdHkgaGludCBmYWlsZWQsIElSUSA9ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtTZXR0aW5nIElSUSBhZmZpbml0eSBmYWlsZWQsIElSUSA9ICVkXFxuXCYjMzQ7LFxuIFx0XHRcdFx0ICAgIGlycS1cdTAwM2V2ZWN0b3IpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtMTY2MTAsNiAmIzQzOzE2NjUwLDcgQEAgc3RhdGljIHZvaWQgYm54dF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0Ym54dF9zaHV0ZG93bl90YyhicCk7XG4gXG4gXHRibnh0X2NsZWFyX2ludF9tb2RlKGJwKTtcbiYjNDM7XHRibnh0X2ZyZWVfcmluZ19jcHVfbWFza3MoYnApO1xuIFx0Ym54dF9od3JtX2Z1bmNfZHJ2X3Vucmd0cihicCk7XG4gXHRibnh0X2ZyZWVfaHdybV9yZXNvdXJjZXMoYnApO1xuIFx0Ym54dF9od21vbl91bmluaXQoYnApO1xuQEAgLTE3MDQ4LDYgJiM0MzsxNzA4OSwxMSBAQCBzdGF0aWMgaW50IGJueHRfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRicC1cdTAwM2Vtc2dfZW5hYmxlID0gQk5YVF9ERUZfTVNHX0VOQUJMRTtcbiBcdGJueHRfc2V0X21heF9mdW5jX2lycXMoYnAsIG1heF9pcnFzKTtcbiBcbiYjNDM7XHRicC1cdTAwM2VtYXhfaXJxcyA9IG1heF9pcnFzO1xuJiM0MztcdHJjID0gYm54dF9hbGxvY19yaW5nX2NwdV9tYXNrcyhicCk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0Z290byBpbml0X2Vycl9mcmVlO1xuJiM0MztcbiBcdGlmIChibnh0X3ZmX3BjaWlkKGJwLVx1MDAzZWJvYXJkX2lkeCkpXG4gXHRcdGJwLVx1MDAzZWZsYWdzIHw9IEJOWFRfRkxBR19WRjtcbiBcbkBAIC0xNzI5Nyw2ICYjNDM7MTczNDMsNyBAQCBzdGF0aWMgaW50IGJueHRfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRicC1cdTAwM2Vyc3NfaW5kaXJfdGJsID0gTlVMTDtcbiBcbiBpbml0X2Vycl9mcmVlOlxuJiM0MztcdGJueHRfZnJlZV9yaW5nX2NwdV9tYXNrcyhicCk7XG4gXHRmcmVlX25ldGRldihkZXYpO1xuIFx0cmV0dXJuIHJjO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5oXG5pbmRleCBkYzhlYzVlNTczM2U5Li5hYjg5NGY4YWRkZWY1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5oXG5AQCAtMTI2MSw5ICYjNDM7MTI2MSw3IEBAIHN0cnVjdCBibnh0X2lycSB7XG4gXHRpcnFfaGFuZGxlcl90XHRoYW5kbGVyO1xuIFx0dW5zaWduZWQgaW50XHR2ZWN0b3I7XG4gXHR1OFx0XHRyZXF1ZXN0ZWQ6MTtcbi1cdHU4XHRcdGhhdmVfY3B1bWFzazoxO1xuIFx0Y2hhclx0XHRuYW1lW0lGTkFNU0laICYjNDM7IEJOWFRfSVJRX05BTUVfRVhUUkFdO1xuLVx0Y3B1bWFza192YXJfdFx0Y3B1X21hc2s7XG4gXG4gXHRzdHJ1Y3QgYm54dFx0KmJwO1xuIFx0aW50XHRcdG1zaXhfbnI7XG5AQCAtMjQ4Miw2ICYjNDM7MjQ4MCwxNSBAQCBzdHJ1Y3QgYm54dCB7XG4gXHQgcGNpX2NoYW5uZWxfb2ZmbGluZSgoYnApLVx1MDAzZXBkZXYpKVxuIFxuIFx0c3RydWN0IGJueHRfaXJxXHQqaXJxX3RibDtcbiYjNDM7XHQvKiBJUlEgYWZmaW5pdHksIGluZGV4ZWQgYnkgY29tcGxldGlvbiByaW5nLiBLZXB0IGFjcm9zcyBJUlFcbiYjNDM7XHQgKiByZWFsbG9jYXRpb24sIHRoZSBNU0ktWCB2ZWN0b3IgaW5kZXggaXMgbm90IHN0YWJsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRjcHVtYXNrX3Zhcl90XHRcdCpyaW5nX2NwdV9tYXNrO1xuJiM0MztcdC8qIFJpbmdzIGZvciB3aGljaCB0aGUgbWFzayBhYm92ZSB3YXMgY29uZmlndXJlZCBmcm9tIHRoZSBvdXRzaWRlLFxuJiM0MztcdCAqIHJhdGhlciB0aGFuIGJlaW5nIG91ciBvd24gZGVmYXVsdCBwbGFjZW1lbnQuXG4mIzQzO1x0ICovXG4mIzQzO1x0dW5zaWduZWQgbG9uZ1x0XHQqcmluZ19hZmZpbml0eV9zZXQ7XG4mIzQzO1x0aW50XHRcdFx0bWF4X2lycXM7XG4gXHRpbnRcdFx0XHR0b3RhbF9pcnFzO1xuIFx0aW50XHRcdFx0dWxwX251bV9tc2l4X3dhbnQ7XG4gXHR1OFx0XHRcdG1hY19hZGRyW0VUSF9BTEVOXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDo1NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJyb2FkY29tIE5ldFh0cmVtZS1DL0UgKGJueHQpIEV0aGVybmV0IGRyaXZlciB0byBpbXByb3ZlIElSUSBhZmZpbml0eSB0cmFja2luZyBhY3Jvc3MgSVJRIHJlYWxsb2NhdGlvbnMuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGRyaXZlciBmb3IgcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDlhMzI3OTM0OGQxODAxZGU0OTg1M2ZlMDU3NDRiYjNiYTViZDYwMDUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAyMDo1NDozNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMKaW5kZXggMWU0OTQ0ZjNlNjA2NS4uMzU3OTUzNzRhOGRkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMKQEAgLTExNTkyLDcgJiM0MzsxMTU5Miw3IEBAIHN0YXRpYyBpbnQgYm54dF9nZXRfbnVtX21zaXgoc3RydWN0IGJueHQgKmJwKQogCiBzdGF0aWMgaW50IGJueHRfaW5pdF9pbnRfbW9kZShzdHJ1Y3QgYm54dCAqYnApCiB7Ci0JaW50IGksIHRvdGFsX3ZlY3MsIG1heCwgcmMgPSAwLCBtaW4gPSAxLCB1bHBfbXNpeCwgdHhfY3AsIHRibF9zaXplOwomIzQzOwlpbnQgaSwgdG90YWxfdmVjcywgbWF4LCByYywgbWluID0gMSwgdWxwX21zaXgsIHR4X2NwLCB0Ymxfc2l6ZTsKIAogCXRvdGFsX3ZlY3MgPSBibnh0X2dldF9udW1fbXNpeChicCk7CiAJbWF4ID0gYm54dF9nZXRfbWF4X2Z1bmNfaXJxcyhicCk7CkBAIC0xMTYxNywyNiAmIzQzOzExNjE3LDI2IEBAIHN0YXRpYyBpbnQgYm54dF9pbml0X2ludF9tb2RlKHN0cnVjdCBibnh0ICpicCkKIAlpZiAocGNpX21zaXhfY2FuX2FsbG9jX2R5bihicC0mZ3Q7cGRldikpCiAJCXRibF9zaXplID0gbWF4OwogCWJwLSZndDtpcnFfdGJsID0ga3phbGxvY19vYmpzKCpicC0mZ3Q7aXJxX3RibCwgdGJsX3NpemUpOwotCWlmIChicC0mZ3Q7aXJxX3RibCkgewotCQlmb3IgKGkgPSAwOyBpICZsdDsgdG90YWxfdmVjczsgaSYjNDM7JiM0MzspCi0JCQlicC0mZ3Q7aXJxX3RibFtpXS52ZWN0b3IgPSBwY2lfaXJxX3ZlY3RvcihicC0mZ3Q7cGRldiwgaSk7Ci0KLQkJYnAtJmd0O3RvdGFsX2lycXMgPSB0b3RhbF92ZWNzOwotCQkvKiBUcmltIHJpbmdzIGJhc2VkIHVwb24gbnVtIG9mIHZlY3RvcnMgYWxsb2NhdGVkICovCi0JCXJjID0gYm54dF90cmltX3JpbmdzKGJwLCAmYW1wO2JwLSZndDtyeF9ucl9yaW5ncywgJmFtcDticC0mZ3Q7dHhfbnJfcmluZ3MsCi0JCQkJICAgICB0b3RhbF92ZWNzIC0gdWxwX21zaXgsIG1pbiA9PSAxKTsKLQkJaWYgKHJjKQotCQkJZ290byBtc2l4X3NldHVwX2V4aXQ7Ci0KLQkJdHhfY3AgPSBibnh0X251bV90eF90b19jcChicCwgYnAtJmd0O3R4X25yX3JpbmdzKTsKLQkJYnAtJmd0O2NwX25yX3JpbmdzID0gKG1pbiA9PSAxKSA/Ci0JCQkJICBtYXhfdChpbnQsIHR4X2NwLCBicC0mZ3Q7cnhfbnJfcmluZ3MpIDoKLQkJCQkgIHR4X2NwICYjNDM7IGJwLSZndDtyeF9ucl9yaW5nczsKLQotCX0gZWxzZSB7CiYjNDM7CWlmICghYnAtJmd0O2lycV90YmwpIHsKIAkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIG1zaXhfc2V0dXBfZXhpdDsKIAl9CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0b3RhbF92ZWNzOyBpJiM0MzsmIzQzOykKJiM0MzsJCWJwLSZndDtpcnFfdGJsW2ldLnZlY3RvciA9IHBjaV9pcnFfdmVjdG9yKGJwLSZndDtwZGV2LCBpKTsKJiM0MzsKJiM0MzsJYnAtJmd0O3RvdGFsX2lycXMgPSB0b3RhbF92ZWNzOwomIzQzOwkvKiBUcmltIHJpbmdzIGJhc2VkIHVwb24gbnVtIG9mIHZlY3RvcnMgYWxsb2NhdGVkICovCiYjNDM7CXJjID0gYm54dF90cmltX3JpbmdzKGJwLCAmYW1wO2JwLSZndDtyeF9ucl9yaW5ncywgJmFtcDticC0mZ3Q7dHhfbnJfcmluZ3MsCiYjNDM7CQkJICAgICB0b3RhbF92ZWNzIC0gdWxwX21zaXgsIG1pbiA9PSAxKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJZ290byBtc2l4X3NldHVwX2V4aXQ7CiYjNDM7CiYjNDM7CXR4X2NwID0gYm54dF9udW1fdHhfdG9fY3AoYnAsIGJwLSZndDt0eF9ucl9yaW5ncyk7CiYjNDM7CWJwLSZndDtjcF9ucl9yaW5ncyA9IChtaW4gPT0gMSkgPwomIzQzOwkJCSAgbWF4X3QoaW50LCB0eF9jcCwgYnAtJmd0O3J4X25yX3JpbmdzKSA6CiYjNDM7CQkJICB0eF9jcCAmIzQzOyBicC0mZ3Q7cnhfbnJfcmluZ3M7CiYjNDM7CiAJcmV0dXJuIDA7CiAKIG1zaXhfc2V0dXBfZXhpdDoKQEAgLTExNzkyLDYgJiM0MzsxMTc5Miw5IEBAIHN0YXRpYyB2b2lkIGJueHRfaXJxX2FmZmluaXR5X25vdGlmeShzdHJ1Y3QgaXJxX2FmZmluaXR5X25vdGlmeSAqbm90aWZ5LAogCiAJaXJxID0gY29udGFpbmVyX29mKG5vdGlmeSwgc3RydWN0IGJueHRfaXJxLCBhZmZpbml0eV9ub3RpZnkpOwogCiYjNDM7CWNwdW1hc2tfY29weShpcnEtJmd0O2JwLSZndDtyaW5nX2NwdV9tYXNrW2lycS0mZ3Q7cmluZ19ucl0sIG1hc2spOwomIzQzOwlzZXRfYml0KGlycS0mZ3Q7cmluZ19uciwgaXJxLSZndDticC0mZ3Q7cmluZ19hZmZpbml0eV9zZXQpOwomIzQzOwogI2lmZGVmIENPTkZJR19SRlNfQUNDRUwKIAlpZiAoaXJxLSZndDticC0mZ3Q7ZGV2LSZndDtyeF9jcHVfcm1hcCAmYW1wOyZhbXA7IGlycS0mZ3Q7cmluZ19uciAmbHQ7IGlycS0mZ3Q7YnAtJmd0O3J4X25yX3JpbmdzKSB7CiAJCWludCBlcnI7CkBAIC0xMTgwNyw4ICYjNDM7MTE4MTAsNiBAQCBzdGF0aWMgdm9pZCBibnh0X2lycV9hZmZpbml0eV9ub3RpZnkoc3RydWN0IGlycV9hZmZpbml0eV9ub3RpZnkgKm5vdGlmeSwKIAlpZiAoIWlycS0mZ3Q7YnAtJmd0O3RwaF9tb2RlKQogCQlyZXR1cm47CiAKLQljcHVtYXNrX2NvcHkoaXJxLSZndDtjcHVfbWFzaywgbWFzayk7Ci0KIAlpZiAoaXJxLSZndDtyaW5nX25yICZndDs9IGlycS0mZ3Q7YnAtJmd0O3J4X25yX3JpbmdzKQogCQlyZXR1cm47CiAKQEAgLTExODUwLDEwICYjNDM7MTE4NTEsNiBAQCBzdGF0aWMgdm9pZCBibnh0X3JlZ2lzdGVyX2lycV9ub3RpZmllcihzdHJ1Y3QgYm54dCAqYnAsIHN0cnVjdCBibnh0X2lycSAqaXJxKQogCiAJaXJxLSZndDticCA9IGJwOwogCi0JLyogTm90aGluZyB0byBkbyBpZiBUUEggaXMgbm90IGVuYWJsZWQgKi8KLQlpZiAoIWJwLSZndDt0cGhfbW9kZSkKLQkJcmV0dXJuOwotCiAJLyogUmVnaXN0ZXIgSVJRIGFmZmluaXR5IG5vdGlmaWVyICovCiAJbm90aWZ5ID0gJmFtcDtpcnEtJmd0O2FmZmluaXR5X25vdGlmeTsKIAlub3RpZnktJmd0O2lycSA9IGlycS0mZ3Q7dmVjdG9yOwpAQCAtMTE4NjMsNiAmIzQzOzExODYwLDQxIEBAIHN0YXRpYyB2b2lkIGJueHRfcmVnaXN0ZXJfaXJxX25vdGlmaWVyKHN0cnVjdCBibnh0ICpicCwgc3RydWN0IGJueHRfaXJxICppcnEpCiAJaXJxX3NldF9hZmZpbml0eV9ub3RpZmllcihpcnEtJmd0O3ZlY3Rvciwgbm90aWZ5KTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgYm54dF9hbGxvY19yaW5nX2NwdV9tYXNrcyhzdHJ1Y3QgYm54dCAqYnApCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJYnAtJmd0O3JpbmdfY3B1X21hc2sgPSBremFsbG9jX29ianMoKmJwLSZndDtyaW5nX2NwdV9tYXNrLCBicC0mZ3Q7bWF4X2lycXMpOwomIzQzOwlpZiAoIWJwLSZndDtyaW5nX2NwdV9tYXNrKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWJwLSZndDtyaW5nX2FmZmluaXR5X3NldCA9IGJpdG1hcF96YWxsb2MoYnAtJmd0O21heF9pcnFzLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFicC0mZ3Q7cmluZ19hZmZpbml0eV9zZXQpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGJwLSZndDttYXhfaXJxczsgaSYjNDM7JiM0MzspCiYjNDM7CQlpZiAoIXphbGxvY19jcHVtYXNrX3ZhcigmYW1wO2JwLSZndDtyaW5nX2NwdV9tYXNrW2ldLCBHRlBfS0VSTkVMKSkKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGJueHRfZnJlZV9yaW5nX2NwdV9tYXNrcyhzdHJ1Y3QgYm54dCAqYnApCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJaWYgKCFicC0mZ3Q7cmluZ19jcHVfbWFzaykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGJwLSZndDttYXhfaXJxczsgaSYjNDM7JiM0MzspCiYjNDM7CQlmcmVlX2NwdW1hc2tfdmFyKGJwLSZndDtyaW5nX2NwdV9tYXNrW2ldKTsKJiM0MzsKJiM0MzsJYml0bWFwX2ZyZWUoYnAtJmd0O3JpbmdfYWZmaW5pdHlfc2V0KTsKJiM0MzsJYnAtJmd0O3JpbmdfYWZmaW5pdHlfc2V0ID0gTlVMTDsKJiM0MzsJa2ZyZWUoYnAtJmd0O3JpbmdfY3B1X21hc2spOwomIzQzOwlicC0mZ3Q7cmluZ19jcHVfbWFzayA9IE5VTEw7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgYm54dF9mcmVlX2lycShzdHJ1Y3QgYm54dCAqYnApCiB7CiAJc3RydWN0IGJueHRfaXJxICppcnE7CkBAIC0xMTg3NywxMyAmIzQzOzExOTA5LDcgQEAgc3RhdGljIHZvaWQgYm54dF9mcmVlX2lycShzdHJ1Y3QgYm54dCAqYnApCiAJCWlycSA9ICZhbXA7YnAtJmd0O2lycV90YmxbbWFwX2lkeF07CiAJCWlmIChpcnEtJmd0O3JlcXVlc3RlZCkgewogCQkJYm54dF9yZWxlYXNlX2lycV9ub3RpZmllcihpcnEpOwotCi0JCQlpZiAoaXJxLSZndDtoYXZlX2NwdW1hc2spIHsKLQkJCQlpcnFfdXBkYXRlX2FmZmluaXR5X2hpbnQoaXJxLSZndDt2ZWN0b3IsIE5VTEwpOwotCQkJCWZyZWVfY3B1bWFza192YXIoaXJxLSZndDtjcHVfbWFzayk7Ci0JCQkJaXJxLSZndDtoYXZlX2NwdW1hc2sgPSAwOwotCQkJfQotCiYjNDM7CQkJaXJxX3VwZGF0ZV9hZmZpbml0eV9oaW50KGlycS0mZ3Q7dmVjdG9yLCBOVUxMKTsKIAkJCWZyZWVfaXJxKGlycS0mZ3Q7dmVjdG9yLCBicC0mZ3Q7Ym5hcGlbaV0pOwogCQl9CiAKQEAgLTExOTI1LDkgJiM0MzsxMTk1MSw5IEBAIHN0YXRpYyBpbnQgYm54dF9yZXF1ZXN0X2lycShzdHJ1Y3QgYm54dCAqYnApCiAJCWJwLSZndDt0cGhfbW9kZSA9IFBDSV9UUEhfU1RfSVZfTU9ERTsKIAogCWZvciAoaSA9IDAsIGogPSAwOyBpICZsdDsgYnAtJmd0O2NwX25yX3JpbmdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGNwdW1hc2sgKmNwdV9tYXNrID0gYnAtJmd0O3JpbmdfY3B1X21hc2tbaV07CiAJCWludCBtYXBfaWR4ID0gYm54dF9jcF9udW1fdG9faXJxX251bShicCwgaSk7CiAJCXN0cnVjdCBibnh0X2lycSAqaXJxID0gJmFtcDticC0mZ3Q7aXJxX3RibFttYXBfaWR4XTsKLQkJdW5zaWduZWQgaW50IGNwdV9udW07CiAJCXUxNiB0YWc7CiAKIAkJaWYgKElTX0VOQUJMRUQoQ09ORklHX1JGU19BQ0NFTCkgJmFtcDsmYW1wOwpAQCAtMTE5NDYsMTkgJiM0MzsxMTk3MiwyNCBAQCBzdGF0aWMgaW50IGJueHRfcmVxdWVzdF9pcnEoc3RydWN0IGJueHQgKmJwKQogCiAJCW5ldGlmX25hcGlfc2V0X2lycV9sb2NrZWQoJmFtcDticC0mZ3Q7Ym5hcGlbaV0tJmd0O25hcGksIGlycS0mZ3Q7dmVjdG9yKTsKIAkJaXJxLSZndDtyZXF1ZXN0ZWQgPSAxOwotCi0JCWlmICghemFsbG9jX2NwdW1hc2tfdmFyKCZhbXA7aXJxLSZndDtjcHVfbWFzaywgR0ZQX0tFUk5FTCkpCi0JCQljb250aW51ZTsKLQotCQlpcnEtJmd0O2hhdmVfY3B1bWFzayA9IDE7CiAJCWlycS0mZ3Q7bXNpeF9uciA9IG1hcF9pZHg7CiAJCWlycS0mZ3Q7cmluZ19uciA9IGk7Ci0JCWNwdV9udW0gPSBjcHVtYXNrX2xvY2FsX3NwcmVhZChpLCBudW1hX25vZGUpOwotCQljcHVtYXNrX3NldF9jcHUoY3B1X251bSwgaXJxLSZndDtjcHVfbWFzayk7CiYjNDM7CiYjNDM7CQkvKiBSZXVzZSB0aGUgbWFzayByZWNvcmRlZCBiZWZvcmUgdGhlIElSUXMgd2VyZSBmcmVlZC4gTm90aGluZwomIzQzOwkJICogd2FzIHJlY29yZGVkIHlldCBvbiB0aGUgdmVyeSBmaXJzdCByZXF1ZXN0LCBhbmQgdGhlIG1hc2sKJiM0MzsJCSAqIG1heSBoYXZlIGdvbmUgc3RhbGUgaWYgdGhlIENQVXMgd2VudCBvZmZsaW5lIGluIGJldHdlZW4uCiYjNDM7CQkgKi8KJiM0MzsJCWlmICghdGVzdF9iaXQoaSwgYnAtJmd0O3JpbmdfYWZmaW5pdHlfc2V0KSB8fAomIzQzOwkJICAgICFjcHVtYXNrX2ludGVyc2VjdHMoY3B1X21hc2ssIGNwdV9vbmxpbmVfbWFzaykpIHsKJiM0MzsJCQljbGVhcl9iaXQoaSwgYnAtJmd0O3JpbmdfYWZmaW5pdHlfc2V0KTsKJiM0MzsJCQljcHVtYXNrX2NsZWFyKGNwdV9tYXNrKTsKJiM0MzsJCQljcHVtYXNrX3NldF9jcHUoY3B1bWFza19sb2NhbF9zcHJlYWQoaSwgbnVtYV9ub2RlKSwKJiM0MzsJCQkJCWNwdV9tYXNrKTsKJiM0MzsJCX0KIAogCQkvKiBJbml0IFNUIHRhYmxlIGVudHJ5IGlmIHdlIGNhbiBnZXQgdGhlIG1hcHBpbmcgKi8KIAkJaWYgKCFwY2llX3RwaF9nZXRfY3B1X3N0KGJwLSZndDtwZGV2LCBUUEhfTUVNX1RZUEVfVk0sCi0JCQkJCSBjcHVfbnVtLCAmYW1wO3RhZykpIHsKJiM0MzsJCQkJCSBjcHVtYXNrX2ZpcnN0KGNwdV9tYXNrKSwgJmFtcDt0YWcpKSB7CiAJCQlwY2llX3RwaF9zZXRfc3RfZW50cnkoYnAtJmd0O3BkZXYsIGlycS0mZ3Q7bXNpeF9uciwgdGFnKTsKIAkJCWlycS0mZ3Q7dGFnID0gdGFnOwogCQkJaXJxLSZndDtuZXdfdGFnID0gdGFnOwpAQCAtMTE5NjYsMTAgJiM0MzsxMTk5NywxOSBAQCBzdGF0aWMgaW50IGJueHRfcmVxdWVzdF9pcnEoc3RydWN0IGJueHQgKmJwKQogCiAJCWJueHRfcmVnaXN0ZXJfaXJxX25vdGlmaWVyKGJwLCBpcnEpOwogCi0JCXJjID0gaXJxX3VwZGF0ZV9hZmZpbml0eV9oaW50KGlycS0mZ3Q7dmVjdG9yLCBpcnEtJmd0O2NwdV9tYXNrKTsKJiM0MzsJCS8qIE9ubHkgcHV0IHRoZSBJUlEgYmFjayB3aGVyZSBpdCB3YXMgY29uZmlndXJlZCB0byBiZSwgb3VyIG93bgomIzQzOwkJICogcGxhY2VtZW50IGlzIGp1c3QgYSBoaW50LCB0aGUgY29yZSBzcHJlYWRzIHdpdGhpbgomIzQzOwkJICogaXJxX2RlZmF1bHRfYWZmaW5pdHkgd2hpY2ggd2Uga25vdyBub3RoaW5nIGFib3V0LgomIzQzOwkJICogU2V0IGFmdGVyIGluc3RhbGxpbmcgdGhlIG5vdGlmaWVyLCBpZiB3ZSByYWNlIHdpdGggdGhlIHVzZXIKJiM0MzsJCSAqIGl0JiMzOTtzIGJldHRlciB0byBvdmVyd3JpdGUgdGhhbiBtaXNzIHRoZSBub3RpZmljYXRpb24uCiYjNDM7CQkgKi8KJiM0MzsJCWlmICh0ZXN0X2JpdChpLCBicC0mZ3Q7cmluZ19hZmZpbml0eV9zZXQpKQomIzQzOwkJCXJjID0gaXJxX3NldF9hZmZpbml0eV9hbmRfaGludChpcnEtJmd0O3ZlY3RvciwgY3B1X21hc2spOwomIzQzOwkJZWxzZQomIzQzOwkJCXJjID0gaXJxX3VwZGF0ZV9hZmZpbml0eV9oaW50KGlycS0mZ3Q7dmVjdG9yLCBjcHVfbWFzayk7CiAJCWlmIChyYykgewogCQkJbmV0ZGV2X3dhcm4oYnAtJmd0O2RldiwKLQkJCQkgICAgJiMzNDtVcGRhdGUgYWZmaW5pdHkgaGludCBmYWlsZWQsIElSUSA9ICVkXG4mIzM0OywKJiM0MzsJCQkJICAgICYjMzQ7U2V0dGluZyBJUlEgYWZmaW5pdHkgZmFpbGVkLCBJUlEgPSAlZFxuJiMzNDssCiAJCQkJICAgIGlycS0mZ3Q7dmVjdG9yKTsKIAkJCWJyZWFrOwogCQl9CkBAIC0xNjYxMCw2ICYjNDM7MTY2NTAsNyBAQCBzdGF0aWMgdm9pZCBibnh0X3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAJYm54dF9zaHV0ZG93bl90YyhicCk7CiAKIAlibnh0X2NsZWFyX2ludF9tb2RlKGJwKTsKJiM0MzsJYm54dF9mcmVlX3JpbmdfY3B1X21hc2tzKGJwKTsKIAlibnh0X2h3cm1fZnVuY19kcnZfdW5yZ3RyKGJwKTsKIAlibnh0X2ZyZWVfaHdybV9yZXNvdXJjZXMoYnApOwogCWJueHRfaHdtb25fdW5pbml0KGJwKTsKQEAgLTE3MDQ4LDYgJiM0MzsxNzA4OSwxMSBAQCBzdGF0aWMgaW50IGJueHRfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiAJYnAtJmd0O21zZ19lbmFibGUgPSBCTlhUX0RFRl9NU0dfRU5BQkxFOwogCWJueHRfc2V0X21heF9mdW5jX2lycXMoYnAsIG1heF9pcnFzKTsKIAomIzQzOwlicC0mZ3Q7bWF4X2lycXMgPSBtYXhfaXJxczsKJiM0MzsJcmMgPSBibnh0X2FsbG9jX3JpbmdfY3B1X21hc2tzKGJwKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJZ290byBpbml0X2Vycl9mcmVlOwomIzQzOwogCWlmIChibnh0X3ZmX3BjaWlkKGJwLSZndDtib2FyZF9pZHgpKQogCQlicC0mZ3Q7ZmxhZ3MgfD0gQk5YVF9GTEFHX1ZGOwogCkBAIC0xNzI5Nyw2ICYjNDM7MTczNDMsNyBAQCBzdGF0aWMgaW50IGJueHRfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiAJYnAtJmd0O3Jzc19pbmRpcl90YmwgPSBOVUxMOwogCiBpbml0X2Vycl9mcmVlOgomIzQzOwlibnh0X2ZyZWVfcmluZ19jcHVfbWFza3MoYnApOwogCWZyZWVfbmV0ZGV2KGRldik7CiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuaAppbmRleCBkYzhlYzVlNTczM2U5Li5hYjg5NGY4YWRkZWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuaApAQCAtMTI2MSw5ICYjNDM7MTI2MSw3IEBAIHN0cnVjdCBibnh0X2lycSB7CiAJaXJxX2hhbmRsZXJfdAloYW5kbGVyOwogCXVuc2lnbmVkIGludAl2ZWN0b3I7CiAJdTgJCXJlcXVlc3RlZDoxOwotCXU4CQloYXZlX2NwdW1hc2s6MTsKIAljaGFyCQluYW1lW0lGTkFNU0laICYjNDM7IEJOWFRfSVJRX05BTUVfRVhUUkFdOwotCWNwdW1hc2tfdmFyX3QJY3B1X21hc2s7CiAKIAlzdHJ1Y3QgYm54dAkqYnA7CiAJaW50CQltc2l4X25yOwpAQCAtMjQ4Miw2ICYjNDM7MjQ4MCwxNSBAQCBzdHJ1Y3QgYm54dCB7CiAJIHBjaV9jaGFubmVsX29mZmxpbmUoKGJwKS0mZ3Q7cGRldikpCiAKIAlzdHJ1Y3QgYm54dF9pcnEJKmlycV90Ymw7CiYjNDM7CS8qIElSUSBhZmZpbml0eSwgaW5kZXhlZCBieSBjb21wbGV0aW9uIHJpbmcuIEtlcHQgYWNyb3NzIElSUQomIzQzOwkgKiByZWFsbG9jYXRpb24sIHRoZSBNU0ktWCB2ZWN0b3IgaW5kZXggaXMgbm90IHN0YWJsZS4KJiM0MzsJICovCiYjNDM7CWNwdW1hc2tfdmFyX3QJCSpyaW5nX2NwdV9tYXNrOwomIzQzOwkvKiBSaW5ncyBmb3Igd2hpY2ggdGhlIG1hc2sgYWJvdmUgd2FzIGNvbmZpZ3VyZWQgZnJvbSB0aGUgb3V0c2lkZSwKJiM0MzsJICogcmF0aGVyIHRoYW4gYmVpbmcgb3VyIG93biBkZWZhdWx0IHBsYWNlbWVudC4KJiM0MzsJICovCiYjNDM7CXVuc2lnbmVkIGxvbmcJCSpyaW5nX2FmZmluaXR5X3NldDsKJiM0MzsJaW50CQkJbWF4X2lycXM7CiAJaW50CQkJdG90YWxfaXJxczsKIAlpbnQJCQl1bHBfbnVtX21zaXhfd2FudDsKIAl1OAkJCW1hY19hZGRyW0VUSF9BTEVOXTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY1OAoJCQkJCQkJb3V0cHV0OiAxMDIKCQkJCQkJCXRob3VnaHRzOiA2MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nPWZhbHNlOiBCcm9hZGNvbSBibnh0IERyaXZlciBJUlEgQWZmaW5pdHkgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGEgcGF0Y2ggdG91Y2hpbmcgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jYCBhbmQgYGJueHQuaGAsIHdoaWNoIGlzIHRoZSBgYm54dGAgZHJpdmVyLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBob3cgSVJRIGFmZmluaXR5IGlzIGhhbmRsZWQgd2l0aGluIHRoZSBkcml2ZXIsIHNwZWNpZmljYWxseSBob3cgYHJpbmdfY3B1X21hc2tgIGFuZCBgcmluZ19hZmZpbml0eV9zZXRgIGFyZSBtYW5hZ2VkIGFuZCB1c2VkIGluIGBibnh0X2luaXRfb25lYCwgYGJueHRfaXJxX2FmZmluaXR5X25vdGlmeWAsIGFuZCBgYm54dF9yZXF1ZXN0X2lycWAuIEZ1bmRhbWVudGFsbHksIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZTsgaXQgYWx0ZXJzIGhvdyB0aGUgZHJpdmVyIGFzc2lnbnMgYW5kIHJlc3RvcmVzIElSUSBhZmZpbml0eS4KCkJ1dCwgYW5kIHRoaXMgaXMgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uLCBpcyB0aGlzICpyZWFjaGFibGUqIGZvciBmdXp6aW5nPyBXZSYjMzk7cmUgdHlwaWNhbGx5IG9wZXJhdGluZyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBEb2VzIFFFTVUgZW11bGF0ZSB0aGUgaGFyZHdhcmUgdGhpcyBkcml2ZXIgaXMgKmZvcio/IEl0JiMzOTtzIEJyb2FkY29tIE5ldFh0cmVtZS1DL0UgMTAvMjUvNDAvNTAgZ2lnYWJpdCBFdGhlcm5ldCBjYXJkcy4gQSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoZSBgYm54dGAgZGV2aWNlLiBJdCBkb2VzIGVtdWxhdGUgb3RoZXIgTklDcywgYnV0IG5vdCB0aGlzIG9uZS4KClRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IHNheSB3ZSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGZvciAmIzM0O0NvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUmIzM0Oy4gQW5kIHRoYXQmIzM5O3MgZXhhY3RseSB3aGF0IHRoaXMgaXM6IGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciAoQnJvYWRjb20pLCBmb3IgYSBzcGVjaWZpYyBQQ0llIE5JQyAoYGJueHRgKSwgYW5kIGl0JiMzOTtzICpub3QqIGVtdWxhdGVkIGJ5IFFFTVUuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIGVsaW1pbmF0ZSBhbnkgb3RoZXIgcG9zc2libGUgYXR0YWNrIHZlY3RvcnMuIFRoZSBgYm54dF9pbml0X29uZWAgZnVuY3Rpb24gaXMgdGhlIFBDSSBwcm9iZSBmdW5jdGlvbi4gVGhhdCYjMzk7cyBjYWxsZWQgd2hlbiB0aGUgUENJIGRldmljZSBpcyAqZGV0ZWN0ZWQqLiBXaXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBvciBhbiBlbXVsYXRvciwgdGhpcyBjb2RlIHBhdGggaXMgc2ltcGx5IHVucmVhY2hhYmxlLgoKU28sIHRoZSBjb25jbHVzaW9uIGlzIGNsZWFyLiBXZSBzaG91bGQgdXNlIGBzZXQtcmVzdWx0c2AgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJyb2FkY29tIE5ldFh0cmVtZS1DL0UgKGJueHQpIEV0aGVybmV0IGRyaXZlciB0byBpbXByb3ZlIElSUSBhZmZpbml0eSB0cmFja2luZyBhY3Jvc3MgSVJRIHJlYWxsb2NhdGlvbnMuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGRyaXZlciBmb3IgcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJyb2FkY29tIE5ldFh0cmVtZS1DL0UgKGJueHQpIEV0aGVybmV0IGRyaXZlciB0byBpbXByb3ZlIElSUSBhZmZpbml0eSB0cmFja2luZyBhY3Jvc3MgSVJRIHJlYWxsb2NhdGlvbnMuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGRyaXZlciBmb3IgcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6NTQ6MzguMjA3ODM1MjA0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwMzY3NDUwNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQnJvYWRjb20gTmV0WHRyZW1lLUMvRSAoYm54dCkgRXRoZXJuZXQgZHJpdmVyIHRvIGltcHJvdmUgSVJRIGFmZmluaXR5IHRyYWNraW5nIGFjcm9zcyBJUlEgcmVhbGxvY2F0aW9ucy4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgZHJpdmVyIGZvciBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDo1NDozOC4yMDc4NDMzMjRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMTA3MjYyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDlhMzI3OTM0OGQxODAxZGU0OTg1M2ZlMDU3NDRiYjNiYTViZDYwMDVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMjA6NTQ6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuY1xcbmluZGV4IDFlNDk0NGYzZTYwNjUuLjM1Nzk1Mzc0YThkZGEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuY1xcbkBAIC0xMTU5Miw3ICsxMTU5Miw3IEBAIHN0YXRpYyBpbnQgYm54dF9nZXRfbnVtX21zaXgoc3RydWN0IGJueHQgKmJwKVxcbiBcXG4gc3RhdGljIGludCBibnh0X2luaXRfaW50X21vZGUoc3RydWN0IGJueHQgKmJwKVxcbiB7XFxuLVxcdGludCBpLCB0b3RhbF92ZWNzLCBtYXgsIHJjID0gMCwgbWluID0gMSwgdWxwX21zaXgsIHR4X2NwLCB0Ymxfc2l6ZTtcXG4rXFx0aW50IGksIHRvdGFsX3ZlY3MsIG1heCwgcmMsIG1pbiA9IDEsIHVscF9tc2l4LCB0eF9jcCwgdGJsX3NpemU7XFxuIFxcbiBcXHR0b3RhbF92ZWNzID0gYm54dF9nZXRfbnVtX21zaXgoYnApO1xcbiBcXHRtYXggPSBibnh0X2dldF9tYXhfZnVuY19pcnFzKGJwKTtcXG5AQCAtMTE2MTcsMjYgKzExNjE3LDI2IEBAIHN0YXRpYyBpbnQgYm54dF9pbml0X2ludF9tb2RlKHN0cnVjdCBibnh0ICpicClcXG4gXFx0aWYgKHBjaV9tc2l4X2Nhbl9hbGxvY19keW4oYnAtXFx1MDAzZXBkZXYpKVxcbiBcXHRcXHR0Ymxfc2l6ZSA9IG1heDtcXG4gXFx0YnAtXFx1MDAzZWlycV90YmwgPSBremFsbG9jX29ianMoKmJwLVxcdTAwM2VpcnFfdGJsLCB0Ymxfc2l6ZSk7XFxuLVxcdGlmIChicC1cXHUwMDNlaXJxX3RibCkge1xcbi1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdG90YWxfdmVjczsgaSsrKVxcbi1cXHRcXHRcXHRicC1cXHUwMDNlaXJxX3RibFtpXS52ZWN0b3IgPSBwY2lfaXJxX3ZlY3RvcihicC1cXHUwMDNlcGRldiwgaSk7XFxuLVxcbi1cXHRcXHRicC1cXHUwMDNldG90YWxfaXJxcyA9IHRvdGFsX3ZlY3M7XFxuLVxcdFxcdC8qIFRyaW0gcmluZ3MgYmFzZWQgdXBvbiBudW0gb2YgdmVjdG9ycyBhbGxvY2F0ZWQgKi9cXG4tXFx0XFx0cmMgPSBibnh0X3RyaW1fcmluZ3MoYnAsIFxcdTAwMjZicC1cXHUwMDNlcnhfbnJfcmluZ3MsIFxcdTAwMjZicC1cXHUwMDNldHhfbnJfcmluZ3MsXFxuLVxcdFxcdFxcdFxcdCAgICAgdG90YWxfdmVjcyAtIHVscF9tc2l4LCBtaW4gPT0gMSk7XFxuLVxcdFxcdGlmIChyYylcXG4tXFx0XFx0XFx0Z290byBtc2l4X3NldHVwX2V4aXQ7XFxuLVxcbi1cXHRcXHR0eF9jcCA9IGJueHRfbnVtX3R4X3RvX2NwKGJwLCBicC1cXHUwMDNldHhfbnJfcmluZ3MpO1xcbi1cXHRcXHRicC1cXHUwMDNlY3BfbnJfcmluZ3MgPSAobWluID09IDEpID9cXG4tXFx0XFx0XFx0XFx0ICBtYXhfdChpbnQsIHR4X2NwLCBicC1cXHUwMDNlcnhfbnJfcmluZ3MpIDpcXG4tXFx0XFx0XFx0XFx0ICB0eF9jcCArIGJwLVxcdTAwM2VyeF9ucl9yaW5ncztcXG4tXFxuLVxcdH0gZWxzZSB7XFxuK1xcdGlmICghYnAtXFx1MDAzZWlycV90YmwpIHtcXG4gXFx0XFx0cmMgPSAtRU5PTUVNO1xcbiBcXHRcXHRnb3RvIG1zaXhfc2V0dXBfZXhpdDtcXG4gXFx0fVxcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRvdGFsX3ZlY3M7IGkrKylcXG4rXFx0XFx0YnAtXFx1MDAzZWlycV90YmxbaV0udmVjdG9yID0gcGNpX2lycV92ZWN0b3IoYnAtXFx1MDAzZXBkZXYsIGkpO1xcbitcXG4rXFx0YnAtXFx1MDAzZXRvdGFsX2lycXMgPSB0b3RhbF92ZWNzO1xcbitcXHQvKiBUcmltIHJpbmdzIGJhc2VkIHVwb24gbnVtIG9mIHZlY3RvcnMgYWxsb2NhdGVkICovXFxuK1xcdHJjID0gYm54dF90cmltX3JpbmdzKGJwLCBcXHUwMDI2YnAtXFx1MDAzZXJ4X25yX3JpbmdzLCBcXHUwMDI2YnAtXFx1MDAzZXR4X25yX3JpbmdzLFxcbitcXHRcXHRcXHQgICAgIHRvdGFsX3ZlY3MgLSB1bHBfbXNpeCwgbWluID09IDEpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdGdvdG8gbXNpeF9zZXR1cF9leGl0O1xcbitcXG4rXFx0dHhfY3AgPSBibnh0X251bV90eF90b19jcChicCwgYnAtXFx1MDAzZXR4X25yX3JpbmdzKTtcXG4rXFx0YnAtXFx1MDAzZWNwX25yX3JpbmdzID0gKG1pbiA9PSAxKSA/XFxuK1xcdFxcdFxcdCAgbWF4X3QoaW50LCB0eF9jcCwgYnAtXFx1MDAzZXJ4X25yX3JpbmdzKSA6XFxuK1xcdFxcdFxcdCAgdHhfY3AgKyBicC1cXHUwMDNlcnhfbnJfcmluZ3M7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIG1zaXhfc2V0dXBfZXhpdDpcXG5AQCAtMTE3OTIsNiArMTE3OTIsOSBAQCBzdGF0aWMgdm9pZCBibnh0X2lycV9hZmZpbml0eV9ub3RpZnkoc3RydWN0IGlycV9hZmZpbml0eV9ub3RpZnkgKm5vdGlmeSxcXG4gXFxuIFxcdGlycSA9IGNvbnRhaW5lcl9vZihub3RpZnksIHN0cnVjdCBibnh0X2lycSwgYWZmaW5pdHlfbm90aWZ5KTtcXG4gXFxuK1xcdGNwdW1hc2tfY29weShpcnEtXFx1MDAzZWJwLVxcdTAwM2VyaW5nX2NwdV9tYXNrW2lycS1cXHUwMDNlcmluZ19ucl0sIG1hc2spO1xcbitcXHRzZXRfYml0KGlycS1cXHUwMDNlcmluZ19uciwgaXJxLVxcdTAwM2VicC1cXHUwMDNlcmluZ19hZmZpbml0eV9zZXQpO1xcbitcXG4gI2lmZGVmIENPTkZJR19SRlNfQUNDRUxcXG4gXFx0aWYgKGlycS1cXHUwMDNlYnAtXFx1MDAzZWRldi1cXHUwMDNlcnhfY3B1X3JtYXAgXFx1MDAyNlxcdTAwMjYgaXJxLVxcdTAwM2VyaW5nX25yIFxcdTAwM2MgaXJxLVxcdTAwM2VicC1cXHUwMDNlcnhfbnJfcmluZ3MpIHtcXG4gXFx0XFx0aW50IGVycjtcXG5AQCAtMTE4MDcsOCArMTE4MTAsNiBAQCBzdGF0aWMgdm9pZCBibnh0X2lycV9hZmZpbml0eV9ub3RpZnkoc3RydWN0IGlycV9hZmZpbml0eV9ub3RpZnkgKm5vdGlmeSxcXG4gXFx0aWYgKCFpcnEtXFx1MDAzZWJwLVxcdTAwM2V0cGhfbW9kZSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0Y3B1bWFza19jb3B5KGlycS1cXHUwMDNlY3B1X21hc2ssIG1hc2spO1xcbi1cXG4gXFx0aWYgKGlycS1cXHUwMDNlcmluZ19uciBcXHUwMDNlPSBpcnEtXFx1MDAzZWJwLVxcdTAwM2VyeF9ucl9yaW5ncylcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG5AQCAtMTE4NTAsMTAgKzExODUxLDYgQEAgc3RhdGljIHZvaWQgYm54dF9yZWdpc3Rlcl9pcnFfbm90aWZpZXIoc3RydWN0IGJueHQgKmJwLCBzdHJ1Y3QgYm54dF9pcnEgKmlycSlcXG4gXFxuIFxcdGlycS1cXHUwMDNlYnAgPSBicDtcXG4gXFxuLVxcdC8qIE5vdGhpbmcgdG8gZG8gaWYgVFBIIGlzIG5vdCBlbmFibGVkICovXFxuLVxcdGlmICghYnAtXFx1MDAzZXRwaF9tb2RlKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbiBcXHQvKiBSZWdpc3RlciBJUlEgYWZmaW5pdHkgbm90aWZpZXIgKi9cXG4gXFx0bm90aWZ5ID0gXFx1MDAyNmlycS1cXHUwMDNlYWZmaW5pdHlfbm90aWZ5O1xcbiBcXHRub3RpZnktXFx1MDAzZWlycSA9IGlycS1cXHUwMDNldmVjdG9yO1xcbkBAIC0xMTg2Myw2ICsxMTg2MCw0MSBAQCBzdGF0aWMgdm9pZCBibnh0X3JlZ2lzdGVyX2lycV9ub3RpZmllcihzdHJ1Y3QgYm54dCAqYnAsIHN0cnVjdCBibnh0X2lycSAqaXJxKVxcbiBcXHRpcnFfc2V0X2FmZmluaXR5X25vdGlmaWVyKGlycS1cXHUwMDNldmVjdG9yLCBub3RpZnkpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGJueHRfYWxsb2NfcmluZ19jcHVfbWFza3Moc3RydWN0IGJueHQgKmJwKVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0YnAtXFx1MDAzZXJpbmdfY3B1X21hc2sgPSBremFsbG9jX29ianMoKmJwLVxcdTAwM2VyaW5nX2NwdV9tYXNrLCBicC1cXHUwMDNlbWF4X2lycXMpO1xcbitcXHRpZiAoIWJwLVxcdTAwM2VyaW5nX2NwdV9tYXNrKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdGJwLVxcdTAwM2VyaW5nX2FmZmluaXR5X3NldCA9IGJpdG1hcF96YWxsb2MoYnAtXFx1MDAzZW1heF9pcnFzLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFicC1cXHUwMDNlcmluZ19hZmZpbml0eV9zZXQpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGJwLVxcdTAwM2VtYXhfaXJxczsgaSsrKVxcbitcXHRcXHRpZiAoIXphbGxvY19jcHVtYXNrX3ZhcihcXHUwMDI2YnAtXFx1MDAzZXJpbmdfY3B1X21hc2tbaV0sIEdGUF9LRVJORUwpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBibnh0X2ZyZWVfcmluZ19jcHVfbWFza3Moc3RydWN0IGJueHQgKmJwKVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKCFicC1cXHUwMDNlcmluZ19jcHVfbWFzaylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGJwLVxcdTAwM2VtYXhfaXJxczsgaSsrKVxcbitcXHRcXHRmcmVlX2NwdW1hc2tfdmFyKGJwLVxcdTAwM2VyaW5nX2NwdV9tYXNrW2ldKTtcXG4rXFxuK1xcdGJpdG1hcF9mcmVlKGJwLVxcdTAwM2VyaW5nX2FmZmluaXR5X3NldCk7XFxuK1xcdGJwLVxcdTAwM2VyaW5nX2FmZmluaXR5X3NldCA9IE5VTEw7XFxuK1xcdGtmcmVlKGJwLVxcdTAwM2VyaW5nX2NwdV9tYXNrKTtcXG4rXFx0YnAtXFx1MDAzZXJpbmdfY3B1X21hc2sgPSBOVUxMO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBibnh0X2ZyZWVfaXJxKHN0cnVjdCBibnh0ICpicClcXG4ge1xcbiBcXHRzdHJ1Y3QgYm54dF9pcnEgKmlycTtcXG5AQCAtMTE4NzcsMTMgKzExOTA5LDcgQEAgc3RhdGljIHZvaWQgYm54dF9mcmVlX2lycShzdHJ1Y3QgYm54dCAqYnApXFxuIFxcdFxcdGlycSA9IFxcdTAwMjZicC1cXHUwMDNlaXJxX3RibFttYXBfaWR4XTtcXG4gXFx0XFx0aWYgKGlycS1cXHUwMDNlcmVxdWVzdGVkKSB7XFxuIFxcdFxcdFxcdGJueHRfcmVsZWFzZV9pcnFfbm90aWZpZXIoaXJxKTtcXG4tXFxuLVxcdFxcdFxcdGlmIChpcnEtXFx1MDAzZWhhdmVfY3B1bWFzaykge1xcbi1cXHRcXHRcXHRcXHRpcnFfdXBkYXRlX2FmZmluaXR5X2hpbnQoaXJxLVxcdTAwM2V2ZWN0b3IsIE5VTEwpO1xcbi1cXHRcXHRcXHRcXHRmcmVlX2NwdW1hc2tfdmFyKGlycS1cXHUwMDNlY3B1X21hc2spO1xcbi1cXHRcXHRcXHRcXHRpcnEtXFx1MDAzZWhhdmVfY3B1bWFzayA9IDA7XFxuLVxcdFxcdFxcdH1cXG4tXFxuK1xcdFxcdFxcdGlycV91cGRhdGVfYWZmaW5pdHlfaGludChpcnEtXFx1MDAzZXZlY3RvciwgTlVMTCk7XFxuIFxcdFxcdFxcdGZyZWVfaXJxKGlycS1cXHUwMDNldmVjdG9yLCBicC1cXHUwMDNlYm5hcGlbaV0pO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC0xMTkyNSw5ICsxMTk1MSw5IEBAIHN0YXRpYyBpbnQgYm54dF9yZXF1ZXN0X2lycShzdHJ1Y3QgYm54dCAqYnApXFxuIFxcdFxcdGJwLVxcdTAwM2V0cGhfbW9kZSA9IFBDSV9UUEhfU1RfSVZfTU9ERTtcXG4gXFxuIFxcdGZvciAoaSA9IDAsIGogPSAwOyBpIFxcdTAwM2MgYnAtXFx1MDAzZWNwX25yX3JpbmdzOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IGNwdW1hc2sgKmNwdV9tYXNrID0gYnAtXFx1MDAzZXJpbmdfY3B1X21hc2tbaV07XFxuIFxcdFxcdGludCBtYXBfaWR4ID0gYm54dF9jcF9udW1fdG9faXJxX251bShicCwgaSk7XFxuIFxcdFxcdHN0cnVjdCBibnh0X2lycSAqaXJxID0gXFx1MDAyNmJwLVxcdTAwM2VpcnFfdGJsW21hcF9pZHhdO1xcbi1cXHRcXHR1bnNpZ25lZCBpbnQgY3B1X251bTtcXG4gXFx0XFx0dTE2IHRhZztcXG4gXFxuIFxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19SRlNfQUNDRUwpIFxcdTAwMjZcXHUwMDI2XFxuQEAgLTExOTQ2LDE5ICsxMTk3MiwyNCBAQCBzdGF0aWMgaW50IGJueHRfcmVxdWVzdF9pcnEoc3RydWN0IGJueHQgKmJwKVxcbiBcXG4gXFx0XFx0bmV0aWZfbmFwaV9zZXRfaXJxX2xvY2tlZChcXHUwMDI2YnAtXFx1MDAzZWJuYXBpW2ldLVxcdTAwM2VuYXBpLCBpcnEtXFx1MDAzZXZlY3Rvcik7XFxuIFxcdFxcdGlycS1cXHUwMDNlcmVxdWVzdGVkID0gMTtcXG4tXFxuLVxcdFxcdGlmICghemFsbG9jX2NwdW1hc2tfdmFyKFxcdTAwMjZpcnEtXFx1MDAzZWNwdV9tYXNrLCBHRlBfS0VSTkVMKSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcbi1cXHRcXHRpcnEtXFx1MDAzZWhhdmVfY3B1bWFzayA9IDE7XFxuIFxcdFxcdGlycS1cXHUwMDNlbXNpeF9uciA9IG1hcF9pZHg7XFxuIFxcdFxcdGlycS1cXHUwMDNlcmluZ19uciA9IGk7XFxuLVxcdFxcdGNwdV9udW0gPSBjcHVtYXNrX2xvY2FsX3NwcmVhZChpLCBudW1hX25vZGUpO1xcbi1cXHRcXHRjcHVtYXNrX3NldF9jcHUoY3B1X251bSwgaXJxLVxcdTAwM2VjcHVfbWFzayk7XFxuK1xcbitcXHRcXHQvKiBSZXVzZSB0aGUgbWFzayByZWNvcmRlZCBiZWZvcmUgdGhlIElSUXMgd2VyZSBmcmVlZC4gTm90aGluZ1xcbitcXHRcXHQgKiB3YXMgcmVjb3JkZWQgeWV0IG9uIHRoZSB2ZXJ5IGZpcnN0IHJlcXVlc3QsIGFuZCB0aGUgbWFza1xcbitcXHRcXHQgKiBtYXkgaGF2ZSBnb25lIHN0YWxlIGlmIHRoZSBDUFVzIHdlbnQgb2ZmbGluZSBpbiBiZXR3ZWVuLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKCF0ZXN0X2JpdChpLCBicC1cXHUwMDNlcmluZ19hZmZpbml0eV9zZXQpIHx8XFxuK1xcdFxcdCAgICAhY3B1bWFza19pbnRlcnNlY3RzKGNwdV9tYXNrLCBjcHVfb25saW5lX21hc2spKSB7XFxuK1xcdFxcdFxcdGNsZWFyX2JpdChpLCBicC1cXHUwMDNlcmluZ19hZmZpbml0eV9zZXQpO1xcbitcXHRcXHRcXHRjcHVtYXNrX2NsZWFyKGNwdV9tYXNrKTtcXG4rXFx0XFx0XFx0Y3B1bWFza19zZXRfY3B1KGNwdW1hc2tfbG9jYWxfc3ByZWFkKGksIG51bWFfbm9kZSksXFxuK1xcdFxcdFxcdFxcdFxcdGNwdV9tYXNrKTtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0LyogSW5pdCBTVCB0YWJsZSBlbnRyeSBpZiB3ZSBjYW4gZ2V0IHRoZSBtYXBwaW5nICovXFxuIFxcdFxcdGlmICghcGNpZV90cGhfZ2V0X2NwdV9zdChicC1cXHUwMDNlcGRldiwgVFBIX01FTV9UWVBFX1ZNLFxcbi1cXHRcXHRcXHRcXHRcXHQgY3B1X251bSwgXFx1MDAyNnRhZykpIHtcXG4rXFx0XFx0XFx0XFx0XFx0IGNwdW1hc2tfZmlyc3QoY3B1X21hc2spLCBcXHUwMDI2dGFnKSkge1xcbiBcXHRcXHRcXHRwY2llX3RwaF9zZXRfc3RfZW50cnkoYnAtXFx1MDAzZXBkZXYsIGlycS1cXHUwMDNlbXNpeF9uciwgdGFnKTtcXG4gXFx0XFx0XFx0aXJxLVxcdTAwM2V0YWcgPSB0YWc7XFxuIFxcdFxcdFxcdGlycS1cXHUwMDNlbmV3X3RhZyA9IHRhZztcXG5AQCAtMTE5NjYsMTAgKzExOTk3LDE5IEBAIHN0YXRpYyBpbnQgYm54dF9yZXF1ZXN0X2lycShzdHJ1Y3QgYm54dCAqYnApXFxuIFxcbiBcXHRcXHRibnh0X3JlZ2lzdGVyX2lycV9ub3RpZmllcihicCwgaXJxKTtcXG4gXFxuLVxcdFxcdHJjID0gaXJxX3VwZGF0ZV9hZmZpbml0eV9oaW50KGlycS1cXHUwMDNldmVjdG9yLCBpcnEtXFx1MDAzZWNwdV9tYXNrKTtcXG4rXFx0XFx0LyogT25seSBwdXQgdGhlIElSUSBiYWNrIHdoZXJlIGl0IHdhcyBjb25maWd1cmVkIHRvIGJlLCBvdXIgb3duXFxuK1xcdFxcdCAqIHBsYWNlbWVudCBpcyBqdXN0IGEgaGludCwgdGhlIGNvcmUgc3ByZWFkcyB3aXRoaW5cXG4rXFx0XFx0ICogaXJxX2RlZmF1bHRfYWZmaW5pdHkgd2hpY2ggd2Uga25vdyBub3RoaW5nIGFib3V0LlxcbitcXHRcXHQgKiBTZXQgYWZ0ZXIgaW5zdGFsbGluZyB0aGUgbm90aWZpZXIsIGlmIHdlIHJhY2Ugd2l0aCB0aGUgdXNlclxcbitcXHRcXHQgKiBpdCdzIGJldHRlciB0byBvdmVyd3JpdGUgdGhhbiBtaXNzIHRoZSBub3RpZmljYXRpb24uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAodGVzdF9iaXQoaSwgYnAtXFx1MDAzZXJpbmdfYWZmaW5pdHlfc2V0KSlcXG4rXFx0XFx0XFx0cmMgPSBpcnFfc2V0X2FmZmluaXR5X2FuZF9oaW50KGlycS1cXHUwMDNldmVjdG9yLCBjcHVfbWFzayk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cmMgPSBpcnFfdXBkYXRlX2FmZmluaXR5X2hpbnQoaXJxLVxcdTAwM2V2ZWN0b3IsIGNwdV9tYXNrKTtcXG4gXFx0XFx0aWYgKHJjKSB7XFxuIFxcdFxcdFxcdG5ldGRldl93YXJuKGJwLVxcdTAwM2VkZXYsXFxuLVxcdFxcdFxcdFxcdCAgICBcXFwiVXBkYXRlIGFmZmluaXR5IGhpbnQgZmFpbGVkLCBJUlEgPSAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJTZXR0aW5nIElSUSBhZmZpbml0eSBmYWlsZWQsIElSUSA9ICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgICAgaXJxLVxcdTAwM2V2ZWN0b3IpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbkBAIC0xNjYxMCw2ICsxNjY1MCw3IEBAIHN0YXRpYyB2b2lkIGJueHRfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0Ym54dF9zaHV0ZG93bl90YyhicCk7XFxuIFxcbiBcXHRibnh0X2NsZWFyX2ludF9tb2RlKGJwKTtcXG4rXFx0Ym54dF9mcmVlX3JpbmdfY3B1X21hc2tzKGJwKTtcXG4gXFx0Ym54dF9od3JtX2Z1bmNfZHJ2X3Vucmd0cihicCk7XFxuIFxcdGJueHRfZnJlZV9od3JtX3Jlc291cmNlcyhicCk7XFxuIFxcdGJueHRfaHdtb25fdW5pbml0KGJwKTtcXG5AQCAtMTcwNDgsNiArMTcwODksMTEgQEAgc3RhdGljIGludCBibnh0X2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbiBcXHRicC1cXHUwMDNlbXNnX2VuYWJsZSA9IEJOWFRfREVGX01TR19FTkFCTEU7XFxuIFxcdGJueHRfc2V0X21heF9mdW5jX2lycXMoYnAsIG1heF9pcnFzKTtcXG4gXFxuK1xcdGJwLVxcdTAwM2VtYXhfaXJxcyA9IG1heF9pcnFzO1xcbitcXHRyYyA9IGJueHRfYWxsb2NfcmluZ19jcHVfbWFza3MoYnApO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdGdvdG8gaW5pdF9lcnJfZnJlZTtcXG4rXFxuIFxcdGlmIChibnh0X3ZmX3BjaWlkKGJwLVxcdTAwM2Vib2FyZF9pZHgpKVxcbiBcXHRcXHRicC1cXHUwMDNlZmxhZ3MgfD0gQk5YVF9GTEFHX1ZGO1xcbiBcXG5AQCAtMTcyOTcsNiArMTczNDMsNyBAQCBzdGF0aWMgaW50IGJueHRfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuIFxcdGJwLVxcdTAwM2Vyc3NfaW5kaXJfdGJsID0gTlVMTDtcXG4gXFxuIGluaXRfZXJyX2ZyZWU6XFxuK1xcdGJueHRfZnJlZV9yaW5nX2NwdV9tYXNrcyhicCk7XFxuIFxcdGZyZWVfbmV0ZGV2KGRldik7XFxuIFxcdHJldHVybiByYztcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5oXFxuaW5kZXggZGM4ZWM1ZTU3MzNlOS4uYWI4OTRmOGFkZGVmNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5oXFxuQEAgLTEyNjEsOSArMTI2MSw3IEBAIHN0cnVjdCBibnh0X2lycSB7XFxuIFxcdGlycV9oYW5kbGVyX3RcXHRoYW5kbGVyO1xcbiBcXHR1bnNpZ25lZCBpbnRcXHR2ZWN0b3I7XFxuIFxcdHU4XFx0XFx0cmVxdWVzdGVkOjE7XFxuLVxcdHU4XFx0XFx0aGF2ZV9jcHVtYXNrOjE7XFxuIFxcdGNoYXJcXHRcXHRuYW1lW0lGTkFNU0laICsgQk5YVF9JUlFfTkFNRV9FWFRSQV07XFxuLVxcdGNwdW1hc2tfdmFyX3RcXHRjcHVfbWFzaztcXG4gXFxuIFxcdHN0cnVjdCBibnh0XFx0KmJwO1xcbiBcXHRpbnRcXHRcXHRtc2l4X25yO1xcbkBAIC0yNDgyLDYgKzI0ODAsMTUgQEAgc3RydWN0IGJueHQge1xcbiBcXHQgcGNpX2NoYW5uZWxfb2ZmbGluZSgoYnApLVxcdTAwM2VwZGV2KSlcXG4gXFxuIFxcdHN0cnVjdCBibnh0X2lycVxcdCppcnFfdGJsO1xcbitcXHQvKiBJUlEgYWZmaW5pdHksIGluZGV4ZWQgYnkgY29tcGxldGlvbiByaW5nLiBLZXB0IGFjcm9zcyBJUlFcXG4rXFx0ICogcmVhbGxvY2F0aW9uLCB0aGUgTVNJLVggdmVjdG9yIGluZGV4IGlzIG5vdCBzdGFibGUuXFxuK1xcdCAqL1xcbitcXHRjcHVtYXNrX3Zhcl90XFx0XFx0KnJpbmdfY3B1X21hc2s7XFxuK1xcdC8qIFJpbmdzIGZvciB3aGljaCB0aGUgbWFzayBhYm92ZSB3YXMgY29uZmlndXJlZCBmcm9tIHRoZSBvdXRzaWRlLFxcbitcXHQgKiByYXRoZXIgdGhhbiBiZWluZyBvdXIgb3duIGRlZmF1bHQgcGxhY2VtZW50LlxcbitcXHQgKi9cXG4rXFx0dW5zaWduZWQgbG9uZ1xcdFxcdCpyaW5nX2FmZmluaXR5X3NldDtcXG4rXFx0aW50XFx0XFx0XFx0bWF4X2lycXM7XFxuIFxcdGludFxcdFxcdFxcdHRvdGFsX2lycXM7XFxuIFxcdGludFxcdFxcdFxcdHVscF9udW1fbXNpeF93YW50O1xcbiBcXHR1OFxcdFxcdFxcdG1hY19hZGRyW0VUSF9BTEVOXTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6NTQ6MzguODE5NjM2MzExWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTQyNDkzMTI5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJyb2FkY29tIE5ldFh0cmVtZS1DL0UgKGJueHQpIEV0aGVybmV0IGRyaXZlciB0byBpbXByb3ZlIElSUSBhZmZpbml0eSB0cmFja2luZyBhY3Jvc3MgSVJRIHJlYWxsb2NhdGlvbnMuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGRyaXZlciBmb3IgcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWEzMjc5MzQ4ZDE4MDFkZTQ5ODUzZmUwNTc0NGJiM2JhNWJkNjAwNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDIwOjU0OjM3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuY1xuaW5kZXggMWU0OTQ0ZjNlNjA2NS4uMzU3OTUzNzRhOGRkYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuY1xuQEAgLTExNTkyLDcgKzExNTkyLDcgQEAgc3RhdGljIGludCBibnh0X2dldF9udW1fbXNpeChzdHJ1Y3QgYm54dCAqYnApXG4gXG4gc3RhdGljIGludCBibnh0X2luaXRfaW50X21vZGUoc3RydWN0IGJueHQgKmJwKVxuIHtcbi1cdGludCBpLCB0b3RhbF92ZWNzLCBtYXgsIHJjID0gMCwgbWluID0gMSwgdWxwX21zaXgsIHR4X2NwLCB0Ymxfc2l6ZTtcbitcdGludCBpLCB0b3RhbF92ZWNzLCBtYXgsIHJjLCBtaW4gPSAxLCB1bHBfbXNpeCwgdHhfY3AsIHRibF9zaXplO1xuIFxuIFx0dG90YWxfdmVjcyA9IGJueHRfZ2V0X251bV9tc2l4KGJwKTtcbiBcdG1heCA9IGJueHRfZ2V0X21heF9mdW5jX2lycXMoYnApO1xuQEAgLTExNjE3LDI2ICsxMTYxNywyNiBAQCBzdGF0aWMgaW50IGJueHRfaW5pdF9pbnRfbW9kZShzdHJ1Y3QgYm54dCAqYnApXG4gXHRpZiAocGNpX21zaXhfY2FuX2FsbG9jX2R5bihicC1cdTAwM2VwZGV2KSlcbiBcdFx0dGJsX3NpemUgPSBtYXg7XG4gXHRicC1cdTAwM2VpcnFfdGJsID0ga3phbGxvY19vYmpzKCpicC1cdTAwM2VpcnFfdGJsLCB0Ymxfc2l6ZSk7XG4tXHRpZiAoYnAtXHUwMDNlaXJxX3RibCkge1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0b3RhbF92ZWNzOyBpKyspXG4tXHRcdFx0YnAtXHUwMDNlaXJxX3RibFtpXS52ZWN0b3IgPSBwY2lfaXJxX3ZlY3RvcihicC1cdTAwM2VwZGV2LCBpKTtcbi1cbi1cdFx0YnAtXHUwMDNldG90YWxfaXJxcyA9IHRvdGFsX3ZlY3M7XG4tXHRcdC8qIFRyaW0gcmluZ3MgYmFzZWQgdXBvbiBudW0gb2YgdmVjdG9ycyBhbGxvY2F0ZWQgKi9cbi1cdFx0cmMgPSBibnh0X3RyaW1fcmluZ3MoYnAsIFx1MDAyNmJwLVx1MDAzZXJ4X25yX3JpbmdzLCBcdTAwMjZicC1cdTAwM2V0eF9ucl9yaW5ncyxcbi1cdFx0XHRcdCAgICAgdG90YWxfdmVjcyAtIHVscF9tc2l4LCBtaW4gPT0gMSk7XG4tXHRcdGlmIChyYylcbi1cdFx0XHRnb3RvIG1zaXhfc2V0dXBfZXhpdDtcbi1cbi1cdFx0dHhfY3AgPSBibnh0X251bV90eF90b19jcChicCwgYnAtXHUwMDNldHhfbnJfcmluZ3MpO1xuLVx0XHRicC1cdTAwM2VjcF9ucl9yaW5ncyA9IChtaW4gPT0gMSkgP1xuLVx0XHRcdFx0ICBtYXhfdChpbnQsIHR4X2NwLCBicC1cdTAwM2VyeF9ucl9yaW5ncykgOlxuLVx0XHRcdFx0ICB0eF9jcCArIGJwLVx1MDAzZXJ4X25yX3JpbmdzO1xuLVxuLVx0fSBlbHNlIHtcbitcdGlmICghYnAtXHUwMDNlaXJxX3RibCkge1xuIFx0XHRyYyA9IC1FTk9NRU07XG4gXHRcdGdvdG8gbXNpeF9zZXR1cF9leGl0O1xuIFx0fVxuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdG90YWxfdmVjczsgaSsrKVxuK1x0XHRicC1cdTAwM2VpcnFfdGJsW2ldLnZlY3RvciA9IHBjaV9pcnFfdmVjdG9yKGJwLVx1MDAzZXBkZXYsIGkpO1xuK1xuK1x0YnAtXHUwMDNldG90YWxfaXJxcyA9IHRvdGFsX3ZlY3M7XG4rXHQvKiBUcmltIHJpbmdzIGJhc2VkIHVwb24gbnVtIG9mIHZlY3RvcnMgYWxsb2NhdGVkICovXG4rXHRyYyA9IGJueHRfdHJpbV9yaW5ncyhicCwgXHUwMDI2YnAtXHUwMDNlcnhfbnJfcmluZ3MsIFx1MDAyNmJwLVx1MDAzZXR4X25yX3JpbmdzLFxuK1x0XHRcdCAgICAgdG90YWxfdmVjcyAtIHVscF9tc2l4LCBtaW4gPT0gMSk7XG4rXHRpZiAocmMpXG4rXHRcdGdvdG8gbXNpeF9zZXR1cF9leGl0O1xuK1xuK1x0dHhfY3AgPSBibnh0X251bV90eF90b19jcChicCwgYnAtXHUwMDNldHhfbnJfcmluZ3MpO1xuK1x0YnAtXHUwMDNlY3BfbnJfcmluZ3MgPSAobWluID09IDEpID9cbitcdFx0XHQgIG1heF90KGludCwgdHhfY3AsIGJwLVx1MDAzZXJ4X25yX3JpbmdzKSA6XG4rXHRcdFx0ICB0eF9jcCArIGJwLVx1MDAzZXJ4X25yX3JpbmdzO1xuK1xuIFx0cmV0dXJuIDA7XG4gXG4gbXNpeF9zZXR1cF9leGl0OlxuQEAgLTExNzkyLDYgKzExNzkyLDkgQEAgc3RhdGljIHZvaWQgYm54dF9pcnFfYWZmaW5pdHlfbm90aWZ5KHN0cnVjdCBpcnFfYWZmaW5pdHlfbm90aWZ5ICpub3RpZnksXG4gXG4gXHRpcnEgPSBjb250YWluZXJfb2Yobm90aWZ5LCBzdHJ1Y3QgYm54dF9pcnEsIGFmZmluaXR5X25vdGlmeSk7XG4gXG4rXHRjcHVtYXNrX2NvcHkoaXJxLVx1MDAzZWJwLVx1MDAzZXJpbmdfY3B1X21hc2tbaXJxLVx1MDAzZXJpbmdfbnJdLCBtYXNrKTtcbitcdHNldF9iaXQoaXJxLVx1MDAzZXJpbmdfbnIsIGlycS1cdTAwM2VicC1cdTAwM2VyaW5nX2FmZmluaXR5X3NldCk7XG4rXG4gI2lmZGVmIENPTkZJR19SRlNfQUNDRUxcbiBcdGlmIChpcnEtXHUwMDNlYnAtXHUwMDNlZGV2LVx1MDAzZXJ4X2NwdV9ybWFwIFx1MDAyNlx1MDAyNiBpcnEtXHUwMDNlcmluZ19uciBcdTAwM2MgaXJxLVx1MDAzZWJwLVx1MDAzZXJ4X25yX3JpbmdzKSB7XG4gXHRcdGludCBlcnI7XG5AQCAtMTE4MDcsOCArMTE4MTAsNiBAQCBzdGF0aWMgdm9pZCBibnh0X2lycV9hZmZpbml0eV9ub3RpZnkoc3RydWN0IGlycV9hZmZpbml0eV9ub3RpZnkgKm5vdGlmeSxcbiBcdGlmICghaXJxLVx1MDAzZWJwLVx1MDAzZXRwaF9tb2RlKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRjcHVtYXNrX2NvcHkoaXJxLVx1MDAzZWNwdV9tYXNrLCBtYXNrKTtcbi1cbiBcdGlmIChpcnEtXHUwMDNlcmluZ19uciBcdTAwM2U9IGlycS1cdTAwM2VicC1cdTAwM2VyeF9ucl9yaW5ncylcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTExODUwLDEwICsxMTg1MSw2IEBAIHN0YXRpYyB2b2lkIGJueHRfcmVnaXN0ZXJfaXJxX25vdGlmaWVyKHN0cnVjdCBibnh0ICpicCwgc3RydWN0IGJueHRfaXJxICppcnEpXG4gXG4gXHRpcnEtXHUwMDNlYnAgPSBicDtcbiBcbi1cdC8qIE5vdGhpbmcgdG8gZG8gaWYgVFBIIGlzIG5vdCBlbmFibGVkICovXG4tXHRpZiAoIWJwLVx1MDAzZXRwaF9tb2RlKVxuLVx0XHRyZXR1cm47XG4tXG4gXHQvKiBSZWdpc3RlciBJUlEgYWZmaW5pdHkgbm90aWZpZXIgKi9cbiBcdG5vdGlmeSA9IFx1MDAyNmlycS1cdTAwM2VhZmZpbml0eV9ub3RpZnk7XG4gXHRub3RpZnktXHUwMDNlaXJxID0gaXJxLVx1MDAzZXZlY3RvcjtcbkBAIC0xMTg2Myw2ICsxMTg2MCw0MSBAQCBzdGF0aWMgdm9pZCBibnh0X3JlZ2lzdGVyX2lycV9ub3RpZmllcihzdHJ1Y3QgYm54dCAqYnAsIHN0cnVjdCBibnh0X2lycSAqaXJxKVxuIFx0aXJxX3NldF9hZmZpbml0eV9ub3RpZmllcihpcnEtXHUwMDNldmVjdG9yLCBub3RpZnkpO1xuIH1cbiBcbitzdGF0aWMgaW50IGJueHRfYWxsb2NfcmluZ19jcHVfbWFza3Moc3RydWN0IGJueHQgKmJwKVxuK3tcbitcdGludCBpO1xuK1xuK1x0YnAtXHUwMDNlcmluZ19jcHVfbWFzayA9IGt6YWxsb2Nfb2JqcygqYnAtXHUwMDNlcmluZ19jcHVfbWFzaywgYnAtXHUwMDNlbWF4X2lycXMpO1xuK1x0aWYgKCFicC1cdTAwM2VyaW5nX2NwdV9tYXNrKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGJwLVx1MDAzZXJpbmdfYWZmaW5pdHlfc2V0ID0gYml0bWFwX3phbGxvYyhicC1cdTAwM2VtYXhfaXJxcywgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWJwLVx1MDAzZXJpbmdfYWZmaW5pdHlfc2V0KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGJwLVx1MDAzZW1heF9pcnFzOyBpKyspXG4rXHRcdGlmICghemFsbG9jX2NwdW1hc2tfdmFyKFx1MDAyNmJwLVx1MDAzZXJpbmdfY3B1X21hc2tbaV0sIEdGUF9LRVJORUwpKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGJueHRfZnJlZV9yaW5nX2NwdV9tYXNrcyhzdHJ1Y3QgYm54dCAqYnApXG4re1xuK1x0aW50IGk7XG4rXG4rXHRpZiAoIWJwLVx1MDAzZXJpbmdfY3B1X21hc2spXG4rXHRcdHJldHVybjtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGJwLVx1MDAzZW1heF9pcnFzOyBpKyspXG4rXHRcdGZyZWVfY3B1bWFza192YXIoYnAtXHUwMDNlcmluZ19jcHVfbWFza1tpXSk7XG4rXG4rXHRiaXRtYXBfZnJlZShicC1cdTAwM2VyaW5nX2FmZmluaXR5X3NldCk7XG4rXHRicC1cdTAwM2VyaW5nX2FmZmluaXR5X3NldCA9IE5VTEw7XG4rXHRrZnJlZShicC1cdTAwM2VyaW5nX2NwdV9tYXNrKTtcbitcdGJwLVx1MDAzZXJpbmdfY3B1X21hc2sgPSBOVUxMO1xuK31cbitcbiBzdGF0aWMgdm9pZCBibnh0X2ZyZWVfaXJxKHN0cnVjdCBibnh0ICpicClcbiB7XG4gXHRzdHJ1Y3QgYm54dF9pcnEgKmlycTtcbkBAIC0xMTg3NywxMyArMTE5MDksNyBAQCBzdGF0aWMgdm9pZCBibnh0X2ZyZWVfaXJxKHN0cnVjdCBibnh0ICpicClcbiBcdFx0aXJxID0gXHUwMDI2YnAtXHUwMDNlaXJxX3RibFttYXBfaWR4XTtcbiBcdFx0aWYgKGlycS1cdTAwM2VyZXF1ZXN0ZWQpIHtcbiBcdFx0XHRibnh0X3JlbGVhc2VfaXJxX25vdGlmaWVyKGlycSk7XG4tXG4tXHRcdFx0aWYgKGlycS1cdTAwM2VoYXZlX2NwdW1hc2spIHtcbi1cdFx0XHRcdGlycV91cGRhdGVfYWZmaW5pdHlfaGludChpcnEtXHUwMDNldmVjdG9yLCBOVUxMKTtcbi1cdFx0XHRcdGZyZWVfY3B1bWFza192YXIoaXJxLVx1MDAzZWNwdV9tYXNrKTtcbi1cdFx0XHRcdGlycS1cdTAwM2VoYXZlX2NwdW1hc2sgPSAwO1xuLVx0XHRcdH1cbi1cbitcdFx0XHRpcnFfdXBkYXRlX2FmZmluaXR5X2hpbnQoaXJxLVx1MDAzZXZlY3RvciwgTlVMTCk7XG4gXHRcdFx0ZnJlZV9pcnEoaXJxLVx1MDAzZXZlY3RvciwgYnAtXHUwMDNlYm5hcGlbaV0pO1xuIFx0XHR9XG4gXG5AQCAtMTE5MjUsOSArMTE5NTEsOSBAQCBzdGF0aWMgaW50IGJueHRfcmVxdWVzdF9pcnEoc3RydWN0IGJueHQgKmJwKVxuIFx0XHRicC1cdTAwM2V0cGhfbW9kZSA9IFBDSV9UUEhfU1RfSVZfTU9ERTtcbiBcbiBcdGZvciAoaSA9IDAsIGogPSAwOyBpIFx1MDAzYyBicC1cdTAwM2VjcF9ucl9yaW5nczsgaSsrKSB7XG4rXHRcdHN0cnVjdCBjcHVtYXNrICpjcHVfbWFzayA9IGJwLVx1MDAzZXJpbmdfY3B1X21hc2tbaV07XG4gXHRcdGludCBtYXBfaWR4ID0gYm54dF9jcF9udW1fdG9faXJxX251bShicCwgaSk7XG4gXHRcdHN0cnVjdCBibnh0X2lycSAqaXJxID0gXHUwMDI2YnAtXHUwMDNlaXJxX3RibFttYXBfaWR4XTtcbi1cdFx0dW5zaWduZWQgaW50IGNwdV9udW07XG4gXHRcdHUxNiB0YWc7XG4gXG4gXHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19SRlNfQUNDRUwpIFx1MDAyNlx1MDAyNlxuQEAgLTExOTQ2LDE5ICsxMTk3MiwyNCBAQCBzdGF0aWMgaW50IGJueHRfcmVxdWVzdF9pcnEoc3RydWN0IGJueHQgKmJwKVxuIFxuIFx0XHRuZXRpZl9uYXBpX3NldF9pcnFfbG9ja2VkKFx1MDAyNmJwLVx1MDAzZWJuYXBpW2ldLVx1MDAzZW5hcGksIGlycS1cdTAwM2V2ZWN0b3IpO1xuIFx0XHRpcnEtXHUwMDNlcmVxdWVzdGVkID0gMTtcbi1cbi1cdFx0aWYgKCF6YWxsb2NfY3B1bWFza192YXIoXHUwMDI2aXJxLVx1MDAzZWNwdV9tYXNrLCBHRlBfS0VSTkVMKSlcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0aXJxLVx1MDAzZWhhdmVfY3B1bWFzayA9IDE7XG4gXHRcdGlycS1cdTAwM2Vtc2l4X25yID0gbWFwX2lkeDtcbiBcdFx0aXJxLVx1MDAzZXJpbmdfbnIgPSBpO1xuLVx0XHRjcHVfbnVtID0gY3B1bWFza19sb2NhbF9zcHJlYWQoaSwgbnVtYV9ub2RlKTtcbi1cdFx0Y3B1bWFza19zZXRfY3B1KGNwdV9udW0sIGlycS1cdTAwM2VjcHVfbWFzayk7XG4rXG4rXHRcdC8qIFJldXNlIHRoZSBtYXNrIHJlY29yZGVkIGJlZm9yZSB0aGUgSVJRcyB3ZXJlIGZyZWVkLiBOb3RoaW5nXG4rXHRcdCAqIHdhcyByZWNvcmRlZCB5ZXQgb24gdGhlIHZlcnkgZmlyc3QgcmVxdWVzdCwgYW5kIHRoZSBtYXNrXG4rXHRcdCAqIG1heSBoYXZlIGdvbmUgc3RhbGUgaWYgdGhlIENQVXMgd2VudCBvZmZsaW5lIGluIGJldHdlZW4uXG4rXHRcdCAqL1xuK1x0XHRpZiAoIXRlc3RfYml0KGksIGJwLVx1MDAzZXJpbmdfYWZmaW5pdHlfc2V0KSB8fFxuK1x0XHQgICAgIWNwdW1hc2tfaW50ZXJzZWN0cyhjcHVfbWFzaywgY3B1X29ubGluZV9tYXNrKSkge1xuK1x0XHRcdGNsZWFyX2JpdChpLCBicC1cdTAwM2VyaW5nX2FmZmluaXR5X3NldCk7XG4rXHRcdFx0Y3B1bWFza19jbGVhcihjcHVfbWFzayk7XG4rXHRcdFx0Y3B1bWFza19zZXRfY3B1KGNwdW1hc2tfbG9jYWxfc3ByZWFkKGksIG51bWFfbm9kZSksXG4rXHRcdFx0XHRcdGNwdV9tYXNrKTtcbitcdFx0fVxuIFxuIFx0XHQvKiBJbml0IFNUIHRhYmxlIGVudHJ5IGlmIHdlIGNhbiBnZXQgdGhlIG1hcHBpbmcgKi9cbiBcdFx0aWYgKCFwY2llX3RwaF9nZXRfY3B1X3N0KGJwLVx1MDAzZXBkZXYsIFRQSF9NRU1fVFlQRV9WTSxcbi1cdFx0XHRcdFx0IGNwdV9udW0sIFx1MDAyNnRhZykpIHtcbitcdFx0XHRcdFx0IGNwdW1hc2tfZmlyc3QoY3B1X21hc2spLCBcdTAwMjZ0YWcpKSB7XG4gXHRcdFx0cGNpZV90cGhfc2V0X3N0X2VudHJ5KGJwLVx1MDAzZXBkZXYsIGlycS1cdTAwM2Vtc2l4X25yLCB0YWcpO1xuIFx0XHRcdGlycS1cdTAwM2V0YWcgPSB0YWc7XG4gXHRcdFx0aXJxLVx1MDAzZW5ld190YWcgPSB0YWc7XG5AQCAtMTE5NjYsMTAgKzExOTk3LDE5IEBAIHN0YXRpYyBpbnQgYm54dF9yZXF1ZXN0X2lycShzdHJ1Y3QgYm54dCAqYnApXG4gXG4gXHRcdGJueHRfcmVnaXN0ZXJfaXJxX25vdGlmaWVyKGJwLCBpcnEpO1xuIFxuLVx0XHRyYyA9IGlycV91cGRhdGVfYWZmaW5pdHlfaGludChpcnEtXHUwMDNldmVjdG9yLCBpcnEtXHUwMDNlY3B1X21hc2spO1xuK1x0XHQvKiBPbmx5IHB1dCB0aGUgSVJRIGJhY2sgd2hlcmUgaXQgd2FzIGNvbmZpZ3VyZWQgdG8gYmUsIG91ciBvd25cbitcdFx0ICogcGxhY2VtZW50IGlzIGp1c3QgYSBoaW50LCB0aGUgY29yZSBzcHJlYWRzIHdpdGhpblxuK1x0XHQgKiBpcnFfZGVmYXVsdF9hZmZpbml0eSB3aGljaCB3ZSBrbm93IG5vdGhpbmcgYWJvdXQuXG4rXHRcdCAqIFNldCBhZnRlciBpbnN0YWxsaW5nIHRoZSBub3RpZmllciwgaWYgd2UgcmFjZSB3aXRoIHRoZSB1c2VyXG4rXHRcdCAqIGl0J3MgYmV0dGVyIHRvIG92ZXJ3cml0ZSB0aGFuIG1pc3MgdGhlIG5vdGlmaWNhdGlvbi5cbitcdFx0ICovXG4rXHRcdGlmICh0ZXN0X2JpdChpLCBicC1cdTAwM2VyaW5nX2FmZmluaXR5X3NldCkpXG4rXHRcdFx0cmMgPSBpcnFfc2V0X2FmZmluaXR5X2FuZF9oaW50KGlycS1cdTAwM2V2ZWN0b3IsIGNwdV9tYXNrKTtcbitcdFx0ZWxzZVxuK1x0XHRcdHJjID0gaXJxX3VwZGF0ZV9hZmZpbml0eV9oaW50KGlycS1cdTAwM2V2ZWN0b3IsIGNwdV9tYXNrKTtcbiBcdFx0aWYgKHJjKSB7XG4gXHRcdFx0bmV0ZGV2X3dhcm4oYnAtXHUwMDNlZGV2LFxuLVx0XHRcdFx0ICAgIFwiVXBkYXRlIGFmZmluaXR5IGhpbnQgZmFpbGVkLCBJUlEgPSAlZFxcblwiLFxuK1x0XHRcdFx0ICAgIFwiU2V0dGluZyBJUlEgYWZmaW5pdHkgZmFpbGVkLCBJUlEgPSAlZFxcblwiLFxuIFx0XHRcdFx0ICAgIGlycS1cdTAwM2V2ZWN0b3IpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtMTY2MTAsNiArMTY2NTAsNyBAQCBzdGF0aWMgdm9pZCBibnh0X3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRibnh0X3NodXRkb3duX3RjKGJwKTtcbiBcbiBcdGJueHRfY2xlYXJfaW50X21vZGUoYnApO1xuK1x0Ym54dF9mcmVlX3JpbmdfY3B1X21hc2tzKGJwKTtcbiBcdGJueHRfaHdybV9mdW5jX2Rydl91bnJndHIoYnApO1xuIFx0Ym54dF9mcmVlX2h3cm1fcmVzb3VyY2VzKGJwKTtcbiBcdGJueHRfaHdtb25fdW5pbml0KGJwKTtcbkBAIC0xNzA0OCw2ICsxNzA4OSwxMSBAQCBzdGF0aWMgaW50IGJueHRfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRicC1cdTAwM2Vtc2dfZW5hYmxlID0gQk5YVF9ERUZfTVNHX0VOQUJMRTtcbiBcdGJueHRfc2V0X21heF9mdW5jX2lycXMoYnAsIG1heF9pcnFzKTtcbiBcbitcdGJwLVx1MDAzZW1heF9pcnFzID0gbWF4X2lycXM7XG4rXHRyYyA9IGJueHRfYWxsb2NfcmluZ19jcHVfbWFza3MoYnApO1xuK1x0aWYgKHJjKVxuK1x0XHRnb3RvIGluaXRfZXJyX2ZyZWU7XG4rXG4gXHRpZiAoYm54dF92Zl9wY2lpZChicC1cdTAwM2Vib2FyZF9pZHgpKVxuIFx0XHRicC1cdTAwM2VmbGFncyB8PSBCTlhUX0ZMQUdfVkY7XG4gXG5AQCAtMTcyOTcsNiArMTczNDMsNyBAQCBzdGF0aWMgaW50IGJueHRfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRicC1cdTAwM2Vyc3NfaW5kaXJfdGJsID0gTlVMTDtcbiBcbiBpbml0X2Vycl9mcmVlOlxuK1x0Ym54dF9mcmVlX3JpbmdfY3B1X21hc2tzKGJwKTtcbiBcdGZyZWVfbmV0ZGV2KGRldik7XG4gXHRyZXR1cm4gcmM7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmhcbmluZGV4IGRjOGVjNWU1NzMzZTkuLmFiODk0ZjhhZGRlZjUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmhcbkBAIC0xMjYxLDkgKzEyNjEsNyBAQCBzdHJ1Y3QgYm54dF9pcnEge1xuIFx0aXJxX2hhbmRsZXJfdFx0aGFuZGxlcjtcbiBcdHVuc2lnbmVkIGludFx0dmVjdG9yO1xuIFx0dThcdFx0cmVxdWVzdGVkOjE7XG4tXHR1OFx0XHRoYXZlX2NwdW1hc2s6MTtcbiBcdGNoYXJcdFx0bmFtZVtJRk5BTVNJWiArIEJOWFRfSVJRX05BTUVfRVhUUkFdO1xuLVx0Y3B1bWFza192YXJfdFx0Y3B1X21hc2s7XG4gXG4gXHRzdHJ1Y3QgYm54dFx0KmJwO1xuIFx0aW50XHRcdG1zaXhfbnI7XG5AQCAtMjQ4Miw2ICsyNDgwLDE1IEBAIHN0cnVjdCBibnh0IHtcbiBcdCBwY2lfY2hhbm5lbF9vZmZsaW5lKChicCktXHUwMDNlcGRldikpXG4gXG4gXHRzdHJ1Y3QgYm54dF9pcnFcdCppcnFfdGJsO1xuK1x0LyogSVJRIGFmZmluaXR5LCBpbmRleGVkIGJ5IGNvbXBsZXRpb24gcmluZy4gS2VwdCBhY3Jvc3MgSVJRXG4rXHQgKiByZWFsbG9jYXRpb24sIHRoZSBNU0ktWCB2ZWN0b3IgaW5kZXggaXMgbm90IHN0YWJsZS5cbitcdCAqL1xuK1x0Y3B1bWFza192YXJfdFx0XHQqcmluZ19jcHVfbWFzaztcbitcdC8qIFJpbmdzIGZvciB3aGljaCB0aGUgbWFzayBhYm92ZSB3YXMgY29uZmlndXJlZCBmcm9tIHRoZSBvdXRzaWRlLFxuK1x0ICogcmF0aGVyIHRoYW4gYmVpbmcgb3VyIG93biBkZWZhdWx0IHBsYWNlbWVudC5cbitcdCAqL1xuK1x0dW5zaWduZWQgbG9uZ1x0XHQqcmluZ19hZmZpbml0eV9zZXQ7XG4rXHRpbnRcdFx0XHRtYXhfaXJxcztcbiBcdGludFx0XHRcdHRvdGFsX2lycXM7XG4gXHRpbnRcdFx0XHR1bHBfbnVtX21zaXhfd2FudDtcbiBcdHU4XHRcdFx0bWFjX2FkZHJbRVRIX0FMRU5dO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6NTQ6MzguODE5NjM3OTExWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQyNDkwNzQzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmc9ZmFsc2U6IEJyb2FkY29tIGJueHQgRHJpdmVyIElSUSBBZmZpbml0eSBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGEgcGF0Y2ggdG91Y2hpbmcgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jYCBhbmQgYGJueHQuaGAsIHdoaWNoIGlzIHRoZSBgYm54dGAgZHJpdmVyLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBob3cgSVJRIGFmZmluaXR5IGlzIGhhbmRsZWQgd2l0aGluIHRoZSBkcml2ZXIsIHNwZWNpZmljYWxseSBob3cgYHJpbmdfY3B1X21hc2tgIGFuZCBgcmluZ19hZmZpbml0eV9zZXRgIGFyZSBtYW5hZ2VkIGFuZCB1c2VkIGluIGBibnh0X2luaXRfb25lYCwgYGJueHRfaXJxX2FmZmluaXR5X25vdGlmeWAsIGFuZCBgYm54dF9yZXF1ZXN0X2lycWAuIEZ1bmRhbWVudGFsbHksIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZTsgaXQgYWx0ZXJzIGhvdyB0aGUgZHJpdmVyIGFzc2lnbnMgYW5kIHJlc3RvcmVzIElSUSBhZmZpbml0eS5cblxuQnV0LCBhbmQgdGhpcyBpcyB0aGUgY3JpdGljYWwgcXVlc3Rpb24sIGlzIHRoaXMgKnJlYWNoYWJsZSogZm9yIGZ1enppbmc/IFdlJ3JlIHR5cGljYWxseSBvcGVyYXRpbmcgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gRG9lcyBRRU1VIGVtdWxhdGUgdGhlIGhhcmR3YXJlIHRoaXMgZHJpdmVyIGlzICpmb3IqPyBJdCdzIEJyb2FkY29tIE5ldFh0cmVtZS1DL0UgMTAvMjUvNDAvNTAgZ2lnYWJpdCBFdGhlcm5ldCBjYXJkcy4gQSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgUUVNVSBkb2Vzbid0IGVtdWxhdGUgdGhlIGBibnh0YCBkZXZpY2UuIEl0IGRvZXMgZW11bGF0ZSBvdGhlciBOSUNzLCBidXQgbm90IHRoaXMgb25lLlxuXG5UaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBzYXkgd2Ugc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBmb3IgXCJDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLi4uIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VXCIuIEFuZCB0aGF0J3MgZXhhY3RseSB3aGF0IHRoaXMgaXM6IGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciAoQnJvYWRjb20pLCBmb3IgYSBzcGVjaWZpYyBQQ0llIE5JQyAoYGJueHRgKSwgYW5kIGl0J3MgKm5vdCogZW11bGF0ZWQgYnkgUUVNVS5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCdzIGVsaW1pbmF0ZSBhbnkgb3RoZXIgcG9zc2libGUgYXR0YWNrIHZlY3RvcnMuIFRoZSBgYm54dF9pbml0X29uZWAgZnVuY3Rpb24gaXMgdGhlIFBDSSBwcm9iZSBmdW5jdGlvbi4gVGhhdCdzIGNhbGxlZCB3aGVuIHRoZSBQQ0kgZGV2aWNlIGlzICpkZXRlY3RlZCouIFdpdGhvdXQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIG9yIGFuIGVtdWxhdG9yLCB0aGlzIGNvZGUgcGF0aCBpcyBzaW1wbHkgdW5yZWFjaGFibGUuXG5cblNvLCB0aGUgY29uY2x1c2lvbiBpcyBjbGVhci4gV2Ugc2hvdWxkIHVzZSBgc2V0LXJlc3VsdHNgIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY1OCwiT3V0cHV0VG9rZW5zIjoxMDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDo1NDo0OC4yNDQ1NDc2ODZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCcm9hZGNvbSBOZXRYdHJlbWUtQy9FIChibnh0KSBFdGhlcm5ldCBkcml2ZXIgdG8gaW1wcm92ZSBJUlEgYWZmaW5pdHkgdHJhY2tpbmcgYWNyb3NzIElSUSByZWFsbG9jYXRpb25zLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBkcml2ZXIgZm9yIHBoeXNpY2FsIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCcm9hZGNvbSBOZXRYdHJlbWUtQy9FIChibnh0KSBFdGhlcm5ldCBkcml2ZXIgdG8gaW1wcm92ZSBJUlEgYWZmaW5pdHkgdHJhY2tpbmcgYWNyb3NzIElSUSByZWFsbG9jYXRpb25zLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBkcml2ZXIgZm9yIHBoeXNpY2FsIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjU0OjQ4LjI0NDU2OTM1NloiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowl7dxp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 20:36:22 +0000 UTC FinishedAt: 2026-08-13 20:54:49 +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+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJyb2FkY29tIE5ldFh0cmVtZS1DL0UgKGJueHQpIEV0aGVybmV0IGRyaXZlciB0byBpbXByb3ZlIElSUSBhZmZpbml0eSB0cmFja2luZyBhY3Jvc3MgSVJRIHJlYWxsb2NhdGlvbnMuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGRyaXZlciBmb3IgcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDlhMzI3OTM0OGQxODAxZGU0OTg1M2ZlMDU3NDRiYjNiYTViZDYwMDVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAyMDo1NDozNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jXG5pbmRleCAxZTQ5NDRmM2U2MDY1Li4zNTc5NTM3NGE4ZGRhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jXG5AQCAtMTE1OTIsNyAmIzQzOzExNTkyLDcgQEAgc3RhdGljIGludCBibnh0X2dldF9udW1fbXNpeChzdHJ1Y3QgYm54dCAqYnApXG4gXG4gc3RhdGljIGludCBibnh0X2luaXRfaW50X21vZGUoc3RydWN0IGJueHQgKmJwKVxuIHtcbi1cdGludCBpLCB0b3RhbF92ZWNzLCBtYXgsIHJjID0gMCwgbWluID0gMSwgdWxwX21zaXgsIHR4X2NwLCB0Ymxfc2l6ZTtcbiYjNDM7XHRpbnQgaSwgdG90YWxfdmVjcywgbWF4LCByYywgbWluID0gMSwgdWxwX21zaXgsIHR4X2NwLCB0Ymxfc2l6ZTtcbiBcbiBcdHRvdGFsX3ZlY3MgPSBibnh0X2dldF9udW1fbXNpeChicCk7XG4gXHRtYXggPSBibnh0X2dldF9tYXhfZnVuY19pcnFzKGJwKTtcbkBAIC0xMTYxNywyNiAmIzQzOzExNjE3LDI2IEBAIHN0YXRpYyBpbnQgYm54dF9pbml0X2ludF9tb2RlKHN0cnVjdCBibnh0ICpicClcbiBcdGlmIChwY2lfbXNpeF9jYW5fYWxsb2NfZHluKGJwLVx1MDAzZXBkZXYpKVxuIFx0XHR0Ymxfc2l6ZSA9IG1heDtcbiBcdGJwLVx1MDAzZWlycV90YmwgPSBremFsbG9jX29ianMoKmJwLVx1MDAzZWlycV90YmwsIHRibF9zaXplKTtcbi1cdGlmIChicC1cdTAwM2VpcnFfdGJsKSB7XG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRvdGFsX3ZlY3M7IGkmIzQzOyYjNDM7KVxuLVx0XHRcdGJwLVx1MDAzZWlycV90YmxbaV0udmVjdG9yID0gcGNpX2lycV92ZWN0b3IoYnAtXHUwMDNlcGRldiwgaSk7XG4tXG4tXHRcdGJwLVx1MDAzZXRvdGFsX2lycXMgPSB0b3RhbF92ZWNzO1xuLVx0XHQvKiBUcmltIHJpbmdzIGJhc2VkIHVwb24gbnVtIG9mIHZlY3RvcnMgYWxsb2NhdGVkICovXG4tXHRcdHJjID0gYm54dF90cmltX3JpbmdzKGJwLCBcdTAwMjZicC1cdTAwM2VyeF9ucl9yaW5ncywgXHUwMDI2YnAtXHUwMDNldHhfbnJfcmluZ3MsXG4tXHRcdFx0XHQgICAgIHRvdGFsX3ZlY3MgLSB1bHBfbXNpeCwgbWluID09IDEpO1xuLVx0XHRpZiAocmMpXG4tXHRcdFx0Z290byBtc2l4X3NldHVwX2V4aXQ7XG4tXG4tXHRcdHR4X2NwID0gYm54dF9udW1fdHhfdG9fY3AoYnAsIGJwLVx1MDAzZXR4X25yX3JpbmdzKTtcbi1cdFx0YnAtXHUwMDNlY3BfbnJfcmluZ3MgPSAobWluID09IDEpID9cbi1cdFx0XHRcdCAgbWF4X3QoaW50LCB0eF9jcCwgYnAtXHUwMDNlcnhfbnJfcmluZ3MpIDpcbi1cdFx0XHRcdCAgdHhfY3AgJiM0MzsgYnAtXHUwMDNlcnhfbnJfcmluZ3M7XG4tXG4tXHR9IGVsc2Uge1xuJiM0MztcdGlmICghYnAtXHUwMDNlaXJxX3RibCkge1xuIFx0XHRyYyA9IC1FTk9NRU07XG4gXHRcdGdvdG8gbXNpeF9zZXR1cF9leGl0O1xuIFx0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0b3RhbF92ZWNzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGJwLVx1MDAzZWlycV90YmxbaV0udmVjdG9yID0gcGNpX2lycV92ZWN0b3IoYnAtXHUwMDNlcGRldiwgaSk7XG4mIzQzO1xuJiM0MztcdGJwLVx1MDAzZXRvdGFsX2lycXMgPSB0b3RhbF92ZWNzO1xuJiM0MztcdC8qIFRyaW0gcmluZ3MgYmFzZWQgdXBvbiBudW0gb2YgdmVjdG9ycyBhbGxvY2F0ZWQgKi9cbiYjNDM7XHRyYyA9IGJueHRfdHJpbV9yaW5ncyhicCwgXHUwMDI2YnAtXHUwMDNlcnhfbnJfcmluZ3MsIFx1MDAyNmJwLVx1MDAzZXR4X25yX3JpbmdzLFxuJiM0MztcdFx0XHQgICAgIHRvdGFsX3ZlY3MgLSB1bHBfbXNpeCwgbWluID09IDEpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdGdvdG8gbXNpeF9zZXR1cF9leGl0O1xuJiM0MztcbiYjNDM7XHR0eF9jcCA9IGJueHRfbnVtX3R4X3RvX2NwKGJwLCBicC1cdTAwM2V0eF9ucl9yaW5ncyk7XG4mIzQzO1x0YnAtXHUwMDNlY3BfbnJfcmluZ3MgPSAobWluID09IDEpID9cbiYjNDM7XHRcdFx0ICBtYXhfdChpbnQsIHR4X2NwLCBicC1cdTAwM2VyeF9ucl9yaW5ncykgOlxuJiM0MztcdFx0XHQgIHR4X2NwICYjNDM7IGJwLVx1MDAzZXJ4X25yX3JpbmdzO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIFxuIG1zaXhfc2V0dXBfZXhpdDpcbkBAIC0xMTc5Miw2ICYjNDM7MTE3OTIsOSBAQCBzdGF0aWMgdm9pZCBibnh0X2lycV9hZmZpbml0eV9ub3RpZnkoc3RydWN0IGlycV9hZmZpbml0eV9ub3RpZnkgKm5vdGlmeSxcbiBcbiBcdGlycSA9IGNvbnRhaW5lcl9vZihub3RpZnksIHN0cnVjdCBibnh0X2lycSwgYWZmaW5pdHlfbm90aWZ5KTtcbiBcbiYjNDM7XHRjcHVtYXNrX2NvcHkoaXJxLVx1MDAzZWJwLVx1MDAzZXJpbmdfY3B1X21hc2tbaXJxLVx1MDAzZXJpbmdfbnJdLCBtYXNrKTtcbiYjNDM7XHRzZXRfYml0KGlycS1cdTAwM2VyaW5nX25yLCBpcnEtXHUwMDNlYnAtXHUwMDNlcmluZ19hZmZpbml0eV9zZXQpO1xuJiM0MztcbiAjaWZkZWYgQ09ORklHX1JGU19BQ0NFTFxuIFx0aWYgKGlycS1cdTAwM2VicC1cdTAwM2VkZXYtXHUwMDNlcnhfY3B1X3JtYXAgXHUwMDI2XHUwMDI2IGlycS1cdTAwM2VyaW5nX25yIFx1MDAzYyBpcnEtXHUwMDNlYnAtXHUwMDNlcnhfbnJfcmluZ3MpIHtcbiBcdFx0aW50IGVycjtcbkBAIC0xMTgwNyw4ICYjNDM7MTE4MTAsNiBAQCBzdGF0aWMgdm9pZCBibnh0X2lycV9hZmZpbml0eV9ub3RpZnkoc3RydWN0IGlycV9hZmZpbml0eV9ub3RpZnkgKm5vdGlmeSxcbiBcdGlmICghaXJxLVx1MDAzZWJwLVx1MDAzZXRwaF9tb2RlKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRjcHVtYXNrX2NvcHkoaXJxLVx1MDAzZWNwdV9tYXNrLCBtYXNrKTtcbi1cbiBcdGlmIChpcnEtXHUwMDNlcmluZ19uciBcdTAwM2U9IGlycS1cdTAwM2VicC1cdTAwM2VyeF9ucl9yaW5ncylcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTExODUwLDEwICYjNDM7MTE4NTEsNiBAQCBzdGF0aWMgdm9pZCBibnh0X3JlZ2lzdGVyX2lycV9ub3RpZmllcihzdHJ1Y3QgYm54dCAqYnAsIHN0cnVjdCBibnh0X2lycSAqaXJxKVxuIFxuIFx0aXJxLVx1MDAzZWJwID0gYnA7XG4gXG4tXHQvKiBOb3RoaW5nIHRvIGRvIGlmIFRQSCBpcyBub3QgZW5hYmxlZCAqL1xuLVx0aWYgKCFicC1cdTAwM2V0cGhfbW9kZSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0LyogUmVnaXN0ZXIgSVJRIGFmZmluaXR5IG5vdGlmaWVyICovXG4gXHRub3RpZnkgPSBcdTAwMjZpcnEtXHUwMDNlYWZmaW5pdHlfbm90aWZ5O1xuIFx0bm90aWZ5LVx1MDAzZWlycSA9IGlycS1cdTAwM2V2ZWN0b3I7XG5AQCAtMTE4NjMsNiAmIzQzOzExODYwLDQxIEBAIHN0YXRpYyB2b2lkIGJueHRfcmVnaXN0ZXJfaXJxX25vdGlmaWVyKHN0cnVjdCBibnh0ICpicCwgc3RydWN0IGJueHRfaXJxICppcnEpXG4gXHRpcnFfc2V0X2FmZmluaXR5X25vdGlmaWVyKGlycS1cdTAwM2V2ZWN0b3IsIG5vdGlmeSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGJueHRfYWxsb2NfcmluZ19jcHVfbWFza3Moc3RydWN0IGJueHQgKmJwKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGJwLVx1MDAzZXJpbmdfY3B1X21hc2sgPSBremFsbG9jX29ianMoKmJwLVx1MDAzZXJpbmdfY3B1X21hc2ssIGJwLVx1MDAzZW1heF9pcnFzKTtcbiYjNDM7XHRpZiAoIWJwLVx1MDAzZXJpbmdfY3B1X21hc2spXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0YnAtXHUwMDNlcmluZ19hZmZpbml0eV9zZXQgPSBiaXRtYXBfemFsbG9jKGJwLVx1MDAzZW1heF9pcnFzLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWJwLVx1MDAzZXJpbmdfYWZmaW5pdHlfc2V0KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGJwLVx1MDAzZW1heF9pcnFzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGlmICghemFsbG9jX2NwdW1hc2tfdmFyKFx1MDAyNmJwLVx1MDAzZXJpbmdfY3B1X21hc2tbaV0sIEdGUF9LRVJORUwpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGJueHRfZnJlZV9yaW5nX2NwdV9tYXNrcyhzdHJ1Y3QgYm54dCAqYnApXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFicC1cdTAwM2VyaW5nX2NwdV9tYXNrKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBicC1cdTAwM2VtYXhfaXJxczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRmcmVlX2NwdW1hc2tfdmFyKGJwLVx1MDAzZXJpbmdfY3B1X21hc2tbaV0pO1xuJiM0MztcbiYjNDM7XHRiaXRtYXBfZnJlZShicC1cdTAwM2VyaW5nX2FmZmluaXR5X3NldCk7XG4mIzQzO1x0YnAtXHUwMDNlcmluZ19hZmZpbml0eV9zZXQgPSBOVUxMO1xuJiM0MztcdGtmcmVlKGJwLVx1MDAzZXJpbmdfY3B1X21hc2spO1xuJiM0MztcdGJwLVx1MDAzZXJpbmdfY3B1X21hc2sgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGJueHRfZnJlZV9pcnEoc3RydWN0IGJueHQgKmJwKVxuIHtcbiBcdHN0cnVjdCBibnh0X2lycSAqaXJxO1xuQEAgLTExODc3LDEzICYjNDM7MTE5MDksNyBAQCBzdGF0aWMgdm9pZCBibnh0X2ZyZWVfaXJxKHN0cnVjdCBibnh0ICpicClcbiBcdFx0aXJxID0gXHUwMDI2YnAtXHUwMDNlaXJxX3RibFttYXBfaWR4XTtcbiBcdFx0aWYgKGlycS1cdTAwM2VyZXF1ZXN0ZWQpIHtcbiBcdFx0XHRibnh0X3JlbGVhc2VfaXJxX25vdGlmaWVyKGlycSk7XG4tXG4tXHRcdFx0aWYgKGlycS1cdTAwM2VoYXZlX2NwdW1hc2spIHtcbi1cdFx0XHRcdGlycV91cGRhdGVfYWZmaW5pdHlfaGludChpcnEtXHUwMDNldmVjdG9yLCBOVUxMKTtcbi1cdFx0XHRcdGZyZWVfY3B1bWFza192YXIoaXJxLVx1MDAzZWNwdV9tYXNrKTtcbi1cdFx0XHRcdGlycS1cdTAwM2VoYXZlX2NwdW1hc2sgPSAwO1xuLVx0XHRcdH1cbi1cbiYjNDM7XHRcdFx0aXJxX3VwZGF0ZV9hZmZpbml0eV9oaW50KGlycS1cdTAwM2V2ZWN0b3IsIE5VTEwpO1xuIFx0XHRcdGZyZWVfaXJxKGlycS1cdTAwM2V2ZWN0b3IsIGJwLVx1MDAzZWJuYXBpW2ldKTtcbiBcdFx0fVxuIFxuQEAgLTExOTI1LDkgJiM0MzsxMTk1MSw5IEBAIHN0YXRpYyBpbnQgYm54dF9yZXF1ZXN0X2lycShzdHJ1Y3QgYm54dCAqYnApXG4gXHRcdGJwLVx1MDAzZXRwaF9tb2RlID0gUENJX1RQSF9TVF9JVl9NT0RFO1xuIFxuIFx0Zm9yIChpID0gMCwgaiA9IDA7IGkgXHUwMDNjIGJwLVx1MDAzZWNwX25yX3JpbmdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IGNwdW1hc2sgKmNwdV9tYXNrID0gYnAtXHUwMDNlcmluZ19jcHVfbWFza1tpXTtcbiBcdFx0aW50IG1hcF9pZHggPSBibnh0X2NwX251bV90b19pcnFfbnVtKGJwLCBpKTtcbiBcdFx0c3RydWN0IGJueHRfaXJxICppcnEgPSBcdTAwMjZicC1cdTAwM2VpcnFfdGJsW21hcF9pZHhdO1xuLVx0XHR1bnNpZ25lZCBpbnQgY3B1X251bTtcbiBcdFx0dTE2IHRhZztcbiBcbiBcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1JGU19BQ0NFTCkgXHUwMDI2XHUwMDI2XG5AQCAtMTE5NDYsMTkgJiM0MzsxMTk3MiwyNCBAQCBzdGF0aWMgaW50IGJueHRfcmVxdWVzdF9pcnEoc3RydWN0IGJueHQgKmJwKVxuIFxuIFx0XHRuZXRpZl9uYXBpX3NldF9pcnFfbG9ja2VkKFx1MDAyNmJwLVx1MDAzZWJuYXBpW2ldLVx1MDAzZW5hcGksIGlycS1cdTAwM2V2ZWN0b3IpO1xuIFx0XHRpcnEtXHUwMDNlcmVxdWVzdGVkID0gMTtcbi1cbi1cdFx0aWYgKCF6YWxsb2NfY3B1bWFza192YXIoXHUwMDI2aXJxLVx1MDAzZWNwdV9tYXNrLCBHRlBfS0VSTkVMKSlcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0aXJxLVx1MDAzZWhhdmVfY3B1bWFzayA9IDE7XG4gXHRcdGlycS1cdTAwM2Vtc2l4X25yID0gbWFwX2lkeDtcbiBcdFx0aXJxLVx1MDAzZXJpbmdfbnIgPSBpO1xuLVx0XHRjcHVfbnVtID0gY3B1bWFza19sb2NhbF9zcHJlYWQoaSwgbnVtYV9ub2RlKTtcbi1cdFx0Y3B1bWFza19zZXRfY3B1KGNwdV9udW0sIGlycS1cdTAwM2VjcHVfbWFzayk7XG4mIzQzO1xuJiM0MztcdFx0LyogUmV1c2UgdGhlIG1hc2sgcmVjb3JkZWQgYmVmb3JlIHRoZSBJUlFzIHdlcmUgZnJlZWQuIE5vdGhpbmdcbiYjNDM7XHRcdCAqIHdhcyByZWNvcmRlZCB5ZXQgb24gdGhlIHZlcnkgZmlyc3QgcmVxdWVzdCwgYW5kIHRoZSBtYXNrXG4mIzQzO1x0XHQgKiBtYXkgaGF2ZSBnb25lIHN0YWxlIGlmIHRoZSBDUFVzIHdlbnQgb2ZmbGluZSBpbiBiZXR3ZWVuLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIXRlc3RfYml0KGksIGJwLVx1MDAzZXJpbmdfYWZmaW5pdHlfc2V0KSB8fFxuJiM0MztcdFx0ICAgICFjcHVtYXNrX2ludGVyc2VjdHMoY3B1X21hc2ssIGNwdV9vbmxpbmVfbWFzaykpIHtcbiYjNDM7XHRcdFx0Y2xlYXJfYml0KGksIGJwLVx1MDAzZXJpbmdfYWZmaW5pdHlfc2V0KTtcbiYjNDM7XHRcdFx0Y3B1bWFza19jbGVhcihjcHVfbWFzayk7XG4mIzQzO1x0XHRcdGNwdW1hc2tfc2V0X2NwdShjcHVtYXNrX2xvY2FsX3NwcmVhZChpLCBudW1hX25vZGUpLFxuJiM0MztcdFx0XHRcdFx0Y3B1X21hc2spO1xuJiM0MztcdFx0fVxuIFxuIFx0XHQvKiBJbml0IFNUIHRhYmxlIGVudHJ5IGlmIHdlIGNhbiBnZXQgdGhlIG1hcHBpbmcgKi9cbiBcdFx0aWYgKCFwY2llX3RwaF9nZXRfY3B1X3N0KGJwLVx1MDAzZXBkZXYsIFRQSF9NRU1fVFlQRV9WTSxcbi1cdFx0XHRcdFx0IGNwdV9udW0sIFx1MDAyNnRhZykpIHtcbiYjNDM7XHRcdFx0XHRcdCBjcHVtYXNrX2ZpcnN0KGNwdV9tYXNrKSwgXHUwMDI2dGFnKSkge1xuIFx0XHRcdHBjaWVfdHBoX3NldF9zdF9lbnRyeShicC1cdTAwM2VwZGV2LCBpcnEtXHUwMDNlbXNpeF9uciwgdGFnKTtcbiBcdFx0XHRpcnEtXHUwMDNldGFnID0gdGFnO1xuIFx0XHRcdGlycS1cdTAwM2VuZXdfdGFnID0gdGFnO1xuQEAgLTExOTY2LDEwICYjNDM7MTE5OTcsMTkgQEAgc3RhdGljIGludCBibnh0X3JlcXVlc3RfaXJxKHN0cnVjdCBibnh0ICpicClcbiBcbiBcdFx0Ym54dF9yZWdpc3Rlcl9pcnFfbm90aWZpZXIoYnAsIGlycSk7XG4gXG4tXHRcdHJjID0gaXJxX3VwZGF0ZV9hZmZpbml0eV9oaW50KGlycS1cdTAwM2V2ZWN0b3IsIGlycS1cdTAwM2VjcHVfbWFzayk7XG4mIzQzO1x0XHQvKiBPbmx5IHB1dCB0aGUgSVJRIGJhY2sgd2hlcmUgaXQgd2FzIGNvbmZpZ3VyZWQgdG8gYmUsIG91ciBvd25cbiYjNDM7XHRcdCAqIHBsYWNlbWVudCBpcyBqdXN0IGEgaGludCwgdGhlIGNvcmUgc3ByZWFkcyB3aXRoaW5cbiYjNDM7XHRcdCAqIGlycV9kZWZhdWx0X2FmZmluaXR5IHdoaWNoIHdlIGtub3cgbm90aGluZyBhYm91dC5cbiYjNDM7XHRcdCAqIFNldCBhZnRlciBpbnN0YWxsaW5nIHRoZSBub3RpZmllciwgaWYgd2UgcmFjZSB3aXRoIHRoZSB1c2VyXG4mIzQzO1x0XHQgKiBpdCYjMzk7cyBiZXR0ZXIgdG8gb3ZlcndyaXRlIHRoYW4gbWlzcyB0aGUgbm90aWZpY2F0aW9uLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAodGVzdF9iaXQoaSwgYnAtXHUwMDNlcmluZ19hZmZpbml0eV9zZXQpKVxuJiM0MztcdFx0XHRyYyA9IGlycV9zZXRfYWZmaW5pdHlfYW5kX2hpbnQoaXJxLVx1MDAzZXZlY3RvciwgY3B1X21hc2spO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRyYyA9IGlycV91cGRhdGVfYWZmaW5pdHlfaGludChpcnEtXHUwMDNldmVjdG9yLCBjcHVfbWFzayk7XG4gXHRcdGlmIChyYykge1xuIFx0XHRcdG5ldGRldl93YXJuKGJwLVx1MDAzZWRldixcbi1cdFx0XHRcdCAgICBcJiMzNDtVcGRhdGUgYWZmaW5pdHkgaGludCBmYWlsZWQsIElSUSA9ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtTZXR0aW5nIElSUSBhZmZpbml0eSBmYWlsZWQsIElSUSA9ICVkXFxuXCYjMzQ7LFxuIFx0XHRcdFx0ICAgIGlycS1cdTAwM2V2ZWN0b3IpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtMTY2MTAsNiAmIzQzOzE2NjUwLDcgQEAgc3RhdGljIHZvaWQgYm54dF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0Ym54dF9zaHV0ZG93bl90YyhicCk7XG4gXG4gXHRibnh0X2NsZWFyX2ludF9tb2RlKGJwKTtcbiYjNDM7XHRibnh0X2ZyZWVfcmluZ19jcHVfbWFza3MoYnApO1xuIFx0Ym54dF9od3JtX2Z1bmNfZHJ2X3Vucmd0cihicCk7XG4gXHRibnh0X2ZyZWVfaHdybV9yZXNvdXJjZXMoYnApO1xuIFx0Ym54dF9od21vbl91bmluaXQoYnApO1xuQEAgLTE3MDQ4LDYgJiM0MzsxNzA4OSwxMSBAQCBzdGF0aWMgaW50IGJueHRfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRicC1cdTAwM2Vtc2dfZW5hYmxlID0gQk5YVF9ERUZfTVNHX0VOQUJMRTtcbiBcdGJueHRfc2V0X21heF9mdW5jX2lycXMoYnAsIG1heF9pcnFzKTtcbiBcbiYjNDM7XHRicC1cdTAwM2VtYXhfaXJxcyA9IG1heF9pcnFzO1xuJiM0MztcdHJjID0gYm54dF9hbGxvY19yaW5nX2NwdV9tYXNrcyhicCk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0Z290byBpbml0X2Vycl9mcmVlO1xuJiM0MztcbiBcdGlmIChibnh0X3ZmX3BjaWlkKGJwLVx1MDAzZWJvYXJkX2lkeCkpXG4gXHRcdGJwLVx1MDAzZWZsYWdzIHw9IEJOWFRfRkxBR19WRjtcbiBcbkBAIC0xNzI5Nyw2ICYjNDM7MTczNDMsNyBAQCBzdGF0aWMgaW50IGJueHRfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRicC1cdTAwM2Vyc3NfaW5kaXJfdGJsID0gTlVMTDtcbiBcbiBpbml0X2Vycl9mcmVlOlxuJiM0MztcdGJueHRfZnJlZV9yaW5nX2NwdV9tYXNrcyhicCk7XG4gXHRmcmVlX25ldGRldihkZXYpO1xuIFx0cmV0dXJuIHJjO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5oXG5pbmRleCBkYzhlYzVlNTczM2U5Li5hYjg5NGY4YWRkZWY1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5oXG5AQCAtMTI2MSw5ICYjNDM7MTI2MSw3IEBAIHN0cnVjdCBibnh0X2lycSB7XG4gXHRpcnFfaGFuZGxlcl90XHRoYW5kbGVyO1xuIFx0dW5zaWduZWQgaW50XHR2ZWN0b3I7XG4gXHR1OFx0XHRyZXF1ZXN0ZWQ6MTtcbi1cdHU4XHRcdGhhdmVfY3B1bWFzazoxO1xuIFx0Y2hhclx0XHRuYW1lW0lGTkFNU0laICYjNDM7IEJOWFRfSVJRX05BTUVfRVhUUkFdO1xuLVx0Y3B1bWFza192YXJfdFx0Y3B1X21hc2s7XG4gXG4gXHRzdHJ1Y3QgYm54dFx0KmJwO1xuIFx0aW50XHRcdG1zaXhfbnI7XG5AQCAtMjQ4Miw2ICYjNDM7MjQ4MCwxNSBAQCBzdHJ1Y3QgYm54dCB7XG4gXHQgcGNpX2NoYW5uZWxfb2ZmbGluZSgoYnApLVx1MDAzZXBkZXYpKVxuIFxuIFx0c3RydWN0IGJueHRfaXJxXHQqaXJxX3RibDtcbiYjNDM7XHQvKiBJUlEgYWZmaW5pdHksIGluZGV4ZWQgYnkgY29tcGxldGlvbiByaW5nLiBLZXB0IGFjcm9zcyBJUlFcbiYjNDM7XHQgKiByZWFsbG9jYXRpb24sIHRoZSBNU0ktWCB2ZWN0b3IgaW5kZXggaXMgbm90IHN0YWJsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRjcHVtYXNrX3Zhcl90XHRcdCpyaW5nX2NwdV9tYXNrO1xuJiM0MztcdC8qIFJpbmdzIGZvciB3aGljaCB0aGUgbWFzayBhYm92ZSB3YXMgY29uZmlndXJlZCBmcm9tIHRoZSBvdXRzaWRlLFxuJiM0MztcdCAqIHJhdGhlciB0aGFuIGJlaW5nIG91ciBvd24gZGVmYXVsdCBwbGFjZW1lbnQuXG4mIzQzO1x0ICovXG4mIzQzO1x0dW5zaWduZWQgbG9uZ1x0XHQqcmluZ19hZmZpbml0eV9zZXQ7XG4mIzQzO1x0aW50XHRcdFx0bWF4X2lycXM7XG4gXHRpbnRcdFx0XHR0b3RhbF9pcnFzO1xuIFx0aW50XHRcdFx0dWxwX251bV9tc2l4X3dhbnQ7XG4gXHR1OFx0XHRcdG1hY19hZGRyW0VUSF9BTEVOXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDo1NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJyb2FkY29tIE5ldFh0cmVtZS1DL0UgKGJueHQpIEV0aGVybmV0IGRyaXZlciB0byBpbXByb3ZlIElSUSBhZmZpbml0eSB0cmFja2luZyBhY3Jvc3MgSVJRIHJlYWxsb2NhdGlvbnMuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGRyaXZlciBmb3IgcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDlhMzI3OTM0OGQxODAxZGU0OTg1M2ZlMDU3NDRiYjNiYTViZDYwMDUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAyMDo1NDozNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMKaW5kZXggMWU0OTQ0ZjNlNjA2NS4uMzU3OTUzNzRhOGRkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMKQEAgLTExNTkyLDcgJiM0MzsxMTU5Miw3IEBAIHN0YXRpYyBpbnQgYm54dF9nZXRfbnVtX21zaXgoc3RydWN0IGJueHQgKmJwKQogCiBzdGF0aWMgaW50IGJueHRfaW5pdF9pbnRfbW9kZShzdHJ1Y3QgYm54dCAqYnApCiB7Ci0JaW50IGksIHRvdGFsX3ZlY3MsIG1heCwgcmMgPSAwLCBtaW4gPSAxLCB1bHBfbXNpeCwgdHhfY3AsIHRibF9zaXplOwomIzQzOwlpbnQgaSwgdG90YWxfdmVjcywgbWF4LCByYywgbWluID0gMSwgdWxwX21zaXgsIHR4X2NwLCB0Ymxfc2l6ZTsKIAogCXRvdGFsX3ZlY3MgPSBibnh0X2dldF9udW1fbXNpeChicCk7CiAJbWF4ID0gYm54dF9nZXRfbWF4X2Z1bmNfaXJxcyhicCk7CkBAIC0xMTYxNywyNiAmIzQzOzExNjE3LDI2IEBAIHN0YXRpYyBpbnQgYm54dF9pbml0X2ludF9tb2RlKHN0cnVjdCBibnh0ICpicCkKIAlpZiAocGNpX21zaXhfY2FuX2FsbG9jX2R5bihicC0mZ3Q7cGRldikpCiAJCXRibF9zaXplID0gbWF4OwogCWJwLSZndDtpcnFfdGJsID0ga3phbGxvY19vYmpzKCpicC0mZ3Q7aXJxX3RibCwgdGJsX3NpemUpOwotCWlmIChicC0mZ3Q7aXJxX3RibCkgewotCQlmb3IgKGkgPSAwOyBpICZsdDsgdG90YWxfdmVjczsgaSYjNDM7JiM0MzspCi0JCQlicC0mZ3Q7aXJxX3RibFtpXS52ZWN0b3IgPSBwY2lfaXJxX3ZlY3RvcihicC0mZ3Q7cGRldiwgaSk7Ci0KLQkJYnAtJmd0O3RvdGFsX2lycXMgPSB0b3RhbF92ZWNzOwotCQkvKiBUcmltIHJpbmdzIGJhc2VkIHVwb24gbnVtIG9mIHZlY3RvcnMgYWxsb2NhdGVkICovCi0JCXJjID0gYm54dF90cmltX3JpbmdzKGJwLCAmYW1wO2JwLSZndDtyeF9ucl9yaW5ncywgJmFtcDticC0mZ3Q7dHhfbnJfcmluZ3MsCi0JCQkJICAgICB0b3RhbF92ZWNzIC0gdWxwX21zaXgsIG1pbiA9PSAxKTsKLQkJaWYgKHJjKQotCQkJZ290byBtc2l4X3NldHVwX2V4aXQ7Ci0KLQkJdHhfY3AgPSBibnh0X251bV90eF90b19jcChicCwgYnAtJmd0O3R4X25yX3JpbmdzKTsKLQkJYnAtJmd0O2NwX25yX3JpbmdzID0gKG1pbiA9PSAxKSA/Ci0JCQkJICBtYXhfdChpbnQsIHR4X2NwLCBicC0mZ3Q7cnhfbnJfcmluZ3MpIDoKLQkJCQkgIHR4X2NwICYjNDM7IGJwLSZndDtyeF9ucl9yaW5nczsKLQotCX0gZWxzZSB7CiYjNDM7CWlmICghYnAtJmd0O2lycV90YmwpIHsKIAkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIG1zaXhfc2V0dXBfZXhpdDsKIAl9CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0b3RhbF92ZWNzOyBpJiM0MzsmIzQzOykKJiM0MzsJCWJwLSZndDtpcnFfdGJsW2ldLnZlY3RvciA9IHBjaV9pcnFfdmVjdG9yKGJwLSZndDtwZGV2LCBpKTsKJiM0MzsKJiM0MzsJYnAtJmd0O3RvdGFsX2lycXMgPSB0b3RhbF92ZWNzOwomIzQzOwkvKiBUcmltIHJpbmdzIGJhc2VkIHVwb24gbnVtIG9mIHZlY3RvcnMgYWxsb2NhdGVkICovCiYjNDM7CXJjID0gYm54dF90cmltX3JpbmdzKGJwLCAmYW1wO2JwLSZndDtyeF9ucl9yaW5ncywgJmFtcDticC0mZ3Q7dHhfbnJfcmluZ3MsCiYjNDM7CQkJICAgICB0b3RhbF92ZWNzIC0gdWxwX21zaXgsIG1pbiA9PSAxKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJZ290byBtc2l4X3NldHVwX2V4aXQ7CiYjNDM7CiYjNDM7CXR4X2NwID0gYm54dF9udW1fdHhfdG9fY3AoYnAsIGJwLSZndDt0eF9ucl9yaW5ncyk7CiYjNDM7CWJwLSZndDtjcF9ucl9yaW5ncyA9IChtaW4gPT0gMSkgPwomIzQzOwkJCSAgbWF4X3QoaW50LCB0eF9jcCwgYnAtJmd0O3J4X25yX3JpbmdzKSA6CiYjNDM7CQkJICB0eF9jcCAmIzQzOyBicC0mZ3Q7cnhfbnJfcmluZ3M7CiYjNDM7CiAJcmV0dXJuIDA7CiAKIG1zaXhfc2V0dXBfZXhpdDoKQEAgLTExNzkyLDYgJiM0MzsxMTc5Miw5IEBAIHN0YXRpYyB2b2lkIGJueHRfaXJxX2FmZmluaXR5X25vdGlmeShzdHJ1Y3QgaXJxX2FmZmluaXR5X25vdGlmeSAqbm90aWZ5LAogCiAJaXJxID0gY29udGFpbmVyX29mKG5vdGlmeSwgc3RydWN0IGJueHRfaXJxLCBhZmZpbml0eV9ub3RpZnkpOwogCiYjNDM7CWNwdW1hc2tfY29weShpcnEtJmd0O2JwLSZndDtyaW5nX2NwdV9tYXNrW2lycS0mZ3Q7cmluZ19ucl0sIG1hc2spOwomIzQzOwlzZXRfYml0KGlycS0mZ3Q7cmluZ19uciwgaXJxLSZndDticC0mZ3Q7cmluZ19hZmZpbml0eV9zZXQpOwomIzQzOwogI2lmZGVmIENPTkZJR19SRlNfQUNDRUwKIAlpZiAoaXJxLSZndDticC0mZ3Q7ZGV2LSZndDtyeF9jcHVfcm1hcCAmYW1wOyZhbXA7IGlycS0mZ3Q7cmluZ19uciAmbHQ7IGlycS0mZ3Q7YnAtJmd0O3J4X25yX3JpbmdzKSB7CiAJCWludCBlcnI7CkBAIC0xMTgwNyw4ICYjNDM7MTE4MTAsNiBAQCBzdGF0aWMgdm9pZCBibnh0X2lycV9hZmZpbml0eV9ub3RpZnkoc3RydWN0IGlycV9hZmZpbml0eV9ub3RpZnkgKm5vdGlmeSwKIAlpZiAoIWlycS0mZ3Q7YnAtJmd0O3RwaF9tb2RlKQogCQlyZXR1cm47CiAKLQljcHVtYXNrX2NvcHkoaXJxLSZndDtjcHVfbWFzaywgbWFzayk7Ci0KIAlpZiAoaXJxLSZndDtyaW5nX25yICZndDs9IGlycS0mZ3Q7YnAtJmd0O3J4X25yX3JpbmdzKQogCQlyZXR1cm47CiAKQEAgLTExODUwLDEwICYjNDM7MTE4NTEsNiBAQCBzdGF0aWMgdm9pZCBibnh0X3JlZ2lzdGVyX2lycV9ub3RpZmllcihzdHJ1Y3QgYm54dCAqYnAsIHN0cnVjdCBibnh0X2lycSAqaXJxKQogCiAJaXJxLSZndDticCA9IGJwOwogCi0JLyogTm90aGluZyB0byBkbyBpZiBUUEggaXMgbm90IGVuYWJsZWQgKi8KLQlpZiAoIWJwLSZndDt0cGhfbW9kZSkKLQkJcmV0dXJuOwotCiAJLyogUmVnaXN0ZXIgSVJRIGFmZmluaXR5IG5vdGlmaWVyICovCiAJbm90aWZ5ID0gJmFtcDtpcnEtJmd0O2FmZmluaXR5X25vdGlmeTsKIAlub3RpZnktJmd0O2lycSA9IGlycS0mZ3Q7dmVjdG9yOwpAQCAtMTE4NjMsNiAmIzQzOzExODYwLDQxIEBAIHN0YXRpYyB2b2lkIGJueHRfcmVnaXN0ZXJfaXJxX25vdGlmaWVyKHN0cnVjdCBibnh0ICpicCwgc3RydWN0IGJueHRfaXJxICppcnEpCiAJaXJxX3NldF9hZmZpbml0eV9ub3RpZmllcihpcnEtJmd0O3ZlY3Rvciwgbm90aWZ5KTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgYm54dF9hbGxvY19yaW5nX2NwdV9tYXNrcyhzdHJ1Y3QgYm54dCAqYnApCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJYnAtJmd0O3JpbmdfY3B1X21hc2sgPSBremFsbG9jX29ianMoKmJwLSZndDtyaW5nX2NwdV9tYXNrLCBicC0mZ3Q7bWF4X2lycXMpOwomIzQzOwlpZiAoIWJwLSZndDtyaW5nX2NwdV9tYXNrKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWJwLSZndDtyaW5nX2FmZmluaXR5X3NldCA9IGJpdG1hcF96YWxsb2MoYnAtJmd0O21heF9pcnFzLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFicC0mZ3Q7cmluZ19hZmZpbml0eV9zZXQpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGJwLSZndDttYXhfaXJxczsgaSYjNDM7JiM0MzspCiYjNDM7CQlpZiAoIXphbGxvY19jcHVtYXNrX3ZhcigmYW1wO2JwLSZndDtyaW5nX2NwdV9tYXNrW2ldLCBHRlBfS0VSTkVMKSkKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGJueHRfZnJlZV9yaW5nX2NwdV9tYXNrcyhzdHJ1Y3QgYm54dCAqYnApCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJaWYgKCFicC0mZ3Q7cmluZ19jcHVfbWFzaykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGJwLSZndDttYXhfaXJxczsgaSYjNDM7JiM0MzspCiYjNDM7CQlmcmVlX2NwdW1hc2tfdmFyKGJwLSZndDtyaW5nX2NwdV9tYXNrW2ldKTsKJiM0MzsKJiM0MzsJYml0bWFwX2ZyZWUoYnAtJmd0O3JpbmdfYWZmaW5pdHlfc2V0KTsKJiM0MzsJYnAtJmd0O3JpbmdfYWZmaW5pdHlfc2V0ID0gTlVMTDsKJiM0MzsJa2ZyZWUoYnAtJmd0O3JpbmdfY3B1X21hc2spOwomIzQzOwlicC0mZ3Q7cmluZ19jcHVfbWFzayA9IE5VTEw7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgYm54dF9mcmVlX2lycShzdHJ1Y3QgYm54dCAqYnApCiB7CiAJc3RydWN0IGJueHRfaXJxICppcnE7CkBAIC0xMTg3NywxMyAmIzQzOzExOTA5LDcgQEAgc3RhdGljIHZvaWQgYm54dF9mcmVlX2lycShzdHJ1Y3QgYm54dCAqYnApCiAJCWlycSA9ICZhbXA7YnAtJmd0O2lycV90YmxbbWFwX2lkeF07CiAJCWlmIChpcnEtJmd0O3JlcXVlc3RlZCkgewogCQkJYm54dF9yZWxlYXNlX2lycV9ub3RpZmllcihpcnEpOwotCi0JCQlpZiAoaXJxLSZndDtoYXZlX2NwdW1hc2spIHsKLQkJCQlpcnFfdXBkYXRlX2FmZmluaXR5X2hpbnQoaXJxLSZndDt2ZWN0b3IsIE5VTEwpOwotCQkJCWZyZWVfY3B1bWFza192YXIoaXJxLSZndDtjcHVfbWFzayk7Ci0JCQkJaXJxLSZndDtoYXZlX2NwdW1hc2sgPSAwOwotCQkJfQotCiYjNDM7CQkJaXJxX3VwZGF0ZV9hZmZpbml0eV9oaW50KGlycS0mZ3Q7dmVjdG9yLCBOVUxMKTsKIAkJCWZyZWVfaXJxKGlycS0mZ3Q7dmVjdG9yLCBicC0mZ3Q7Ym5hcGlbaV0pOwogCQl9CiAKQEAgLTExOTI1LDkgJiM0MzsxMTk1MSw5IEBAIHN0YXRpYyBpbnQgYm54dF9yZXF1ZXN0X2lycShzdHJ1Y3QgYm54dCAqYnApCiAJCWJwLSZndDt0cGhfbW9kZSA9IFBDSV9UUEhfU1RfSVZfTU9ERTsKIAogCWZvciAoaSA9IDAsIGogPSAwOyBpICZsdDsgYnAtJmd0O2NwX25yX3JpbmdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGNwdW1hc2sgKmNwdV9tYXNrID0gYnAtJmd0O3JpbmdfY3B1X21hc2tbaV07CiAJCWludCBtYXBfaWR4ID0gYm54dF9jcF9udW1fdG9faXJxX251bShicCwgaSk7CiAJCXN0cnVjdCBibnh0X2lycSAqaXJxID0gJmFtcDticC0mZ3Q7aXJxX3RibFttYXBfaWR4XTsKLQkJdW5zaWduZWQgaW50IGNwdV9udW07CiAJCXUxNiB0YWc7CiAKIAkJaWYgKElTX0VOQUJMRUQoQ09ORklHX1JGU19BQ0NFTCkgJmFtcDsmYW1wOwpAQCAtMTE5NDYsMTkgJiM0MzsxMTk3MiwyNCBAQCBzdGF0aWMgaW50IGJueHRfcmVxdWVzdF9pcnEoc3RydWN0IGJueHQgKmJwKQogCiAJCW5ldGlmX25hcGlfc2V0X2lycV9sb2NrZWQoJmFtcDticC0mZ3Q7Ym5hcGlbaV0tJmd0O25hcGksIGlycS0mZ3Q7dmVjdG9yKTsKIAkJaXJxLSZndDtyZXF1ZXN0ZWQgPSAxOwotCi0JCWlmICghemFsbG9jX2NwdW1hc2tfdmFyKCZhbXA7aXJxLSZndDtjcHVfbWFzaywgR0ZQX0tFUk5FTCkpCi0JCQljb250aW51ZTsKLQotCQlpcnEtJmd0O2hhdmVfY3B1bWFzayA9IDE7CiAJCWlycS0mZ3Q7bXNpeF9uciA9IG1hcF9pZHg7CiAJCWlycS0mZ3Q7cmluZ19uciA9IGk7Ci0JCWNwdV9udW0gPSBjcHVtYXNrX2xvY2FsX3NwcmVhZChpLCBudW1hX25vZGUpOwotCQljcHVtYXNrX3NldF9jcHUoY3B1X251bSwgaXJxLSZndDtjcHVfbWFzayk7CiYjNDM7CiYjNDM7CQkvKiBSZXVzZSB0aGUgbWFzayByZWNvcmRlZCBiZWZvcmUgdGhlIElSUXMgd2VyZSBmcmVlZC4gTm90aGluZwomIzQzOwkJICogd2FzIHJlY29yZGVkIHlldCBvbiB0aGUgdmVyeSBmaXJzdCByZXF1ZXN0LCBhbmQgdGhlIG1hc2sKJiM0MzsJCSAqIG1heSBoYXZlIGdvbmUgc3RhbGUgaWYgdGhlIENQVXMgd2VudCBvZmZsaW5lIGluIGJldHdlZW4uCiYjNDM7CQkgKi8KJiM0MzsJCWlmICghdGVzdF9iaXQoaSwgYnAtJmd0O3JpbmdfYWZmaW5pdHlfc2V0KSB8fAomIzQzOwkJICAgICFjcHVtYXNrX2ludGVyc2VjdHMoY3B1X21hc2ssIGNwdV9vbmxpbmVfbWFzaykpIHsKJiM0MzsJCQljbGVhcl9iaXQoaSwgYnAtJmd0O3JpbmdfYWZmaW5pdHlfc2V0KTsKJiM0MzsJCQljcHVtYXNrX2NsZWFyKGNwdV9tYXNrKTsKJiM0MzsJCQljcHVtYXNrX3NldF9jcHUoY3B1bWFza19sb2NhbF9zcHJlYWQoaSwgbnVtYV9ub2RlKSwKJiM0MzsJCQkJCWNwdV9tYXNrKTsKJiM0MzsJCX0KIAogCQkvKiBJbml0IFNUIHRhYmxlIGVudHJ5IGlmIHdlIGNhbiBnZXQgdGhlIG1hcHBpbmcgKi8KIAkJaWYgKCFwY2llX3RwaF9nZXRfY3B1X3N0KGJwLSZndDtwZGV2LCBUUEhfTUVNX1RZUEVfVk0sCi0JCQkJCSBjcHVfbnVtLCAmYW1wO3RhZykpIHsKJiM0MzsJCQkJCSBjcHVtYXNrX2ZpcnN0KGNwdV9tYXNrKSwgJmFtcDt0YWcpKSB7CiAJCQlwY2llX3RwaF9zZXRfc3RfZW50cnkoYnAtJmd0O3BkZXYsIGlycS0mZ3Q7bXNpeF9uciwgdGFnKTsKIAkJCWlycS0mZ3Q7dGFnID0gdGFnOwogCQkJaXJxLSZndDtuZXdfdGFnID0gdGFnOwpAQCAtMTE5NjYsMTAgJiM0MzsxMTk5NywxOSBAQCBzdGF0aWMgaW50IGJueHRfcmVxdWVzdF9pcnEoc3RydWN0IGJueHQgKmJwKQogCiAJCWJueHRfcmVnaXN0ZXJfaXJxX25vdGlmaWVyKGJwLCBpcnEpOwogCi0JCXJjID0gaXJxX3VwZGF0ZV9hZmZpbml0eV9oaW50KGlycS0mZ3Q7dmVjdG9yLCBpcnEtJmd0O2NwdV9tYXNrKTsKJiM0MzsJCS8qIE9ubHkgcHV0IHRoZSBJUlEgYmFjayB3aGVyZSBpdCB3YXMgY29uZmlndXJlZCB0byBiZSwgb3VyIG93bgomIzQzOwkJICogcGxhY2VtZW50IGlzIGp1c3QgYSBoaW50LCB0aGUgY29yZSBzcHJlYWRzIHdpdGhpbgomIzQzOwkJICogaXJxX2RlZmF1bHRfYWZmaW5pdHkgd2hpY2ggd2Uga25vdyBub3RoaW5nIGFib3V0LgomIzQzOwkJICogU2V0IGFmdGVyIGluc3RhbGxpbmcgdGhlIG5vdGlmaWVyLCBpZiB3ZSByYWNlIHdpdGggdGhlIHVzZXIKJiM0MzsJCSAqIGl0JiMzOTtzIGJldHRlciB0byBvdmVyd3JpdGUgdGhhbiBtaXNzIHRoZSBub3RpZmljYXRpb24uCiYjNDM7CQkgKi8KJiM0MzsJCWlmICh0ZXN0X2JpdChpLCBicC0mZ3Q7cmluZ19hZmZpbml0eV9zZXQpKQomIzQzOwkJCXJjID0gaXJxX3NldF9hZmZpbml0eV9hbmRfaGludChpcnEtJmd0O3ZlY3RvciwgY3B1X21hc2spOwomIzQzOwkJZWxzZQomIzQzOwkJCXJjID0gaXJxX3VwZGF0ZV9hZmZpbml0eV9oaW50KGlycS0mZ3Q7dmVjdG9yLCBjcHVfbWFzayk7CiAJCWlmIChyYykgewogCQkJbmV0ZGV2X3dhcm4oYnAtJmd0O2RldiwKLQkJCQkgICAgJiMzNDtVcGRhdGUgYWZmaW5pdHkgaGludCBmYWlsZWQsIElSUSA9ICVkXG4mIzM0OywKJiM0MzsJCQkJICAgICYjMzQ7U2V0dGluZyBJUlEgYWZmaW5pdHkgZmFpbGVkLCBJUlEgPSAlZFxuJiMzNDssCiAJCQkJICAgIGlycS0mZ3Q7dmVjdG9yKTsKIAkJCWJyZWFrOwogCQl9CkBAIC0xNjYxMCw2ICYjNDM7MTY2NTAsNyBAQCBzdGF0aWMgdm9pZCBibnh0X3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAJYm54dF9zaHV0ZG93bl90YyhicCk7CiAKIAlibnh0X2NsZWFyX2ludF9tb2RlKGJwKTsKJiM0MzsJYm54dF9mcmVlX3JpbmdfY3B1X21hc2tzKGJwKTsKIAlibnh0X2h3cm1fZnVuY19kcnZfdW5yZ3RyKGJwKTsKIAlibnh0X2ZyZWVfaHdybV9yZXNvdXJjZXMoYnApOwogCWJueHRfaHdtb25fdW5pbml0KGJwKTsKQEAgLTE3MDQ4LDYgJiM0MzsxNzA4OSwxMSBAQCBzdGF0aWMgaW50IGJueHRfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiAJYnAtJmd0O21zZ19lbmFibGUgPSBCTlhUX0RFRl9NU0dfRU5BQkxFOwogCWJueHRfc2V0X21heF9mdW5jX2lycXMoYnAsIG1heF9pcnFzKTsKIAomIzQzOwlicC0mZ3Q7bWF4X2lycXMgPSBtYXhfaXJxczsKJiM0MzsJcmMgPSBibnh0X2FsbG9jX3JpbmdfY3B1X21hc2tzKGJwKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJZ290byBpbml0X2Vycl9mcmVlOwomIzQzOwogCWlmIChibnh0X3ZmX3BjaWlkKGJwLSZndDtib2FyZF9pZHgpKQogCQlicC0mZ3Q7ZmxhZ3MgfD0gQk5YVF9GTEFHX1ZGOwogCkBAIC0xNzI5Nyw2ICYjNDM7MTczNDMsNyBAQCBzdGF0aWMgaW50IGJueHRfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiAJYnAtJmd0O3Jzc19pbmRpcl90YmwgPSBOVUxMOwogCiBpbml0X2Vycl9mcmVlOgomIzQzOwlibnh0X2ZyZWVfcmluZ19jcHVfbWFza3MoYnApOwogCWZyZWVfbmV0ZGV2KGRldik7CiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuaAppbmRleCBkYzhlYzVlNTczM2U5Li5hYjg5NGY4YWRkZWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuaApAQCAtMTI2MSw5ICYjNDM7MTI2MSw3IEBAIHN0cnVjdCBibnh0X2lycSB7CiAJaXJxX2hhbmRsZXJfdAloYW5kbGVyOwogCXVuc2lnbmVkIGludAl2ZWN0b3I7CiAJdTgJCXJlcXVlc3RlZDoxOwotCXU4CQloYXZlX2NwdW1hc2s6MTsKIAljaGFyCQluYW1lW0lGTkFNU0laICYjNDM7IEJOWFRfSVJRX05BTUVfRVhUUkFdOwotCWNwdW1hc2tfdmFyX3QJY3B1X21hc2s7CiAKIAlzdHJ1Y3QgYm54dAkqYnA7CiAJaW50CQltc2l4X25yOwpAQCAtMjQ4Miw2ICYjNDM7MjQ4MCwxNSBAQCBzdHJ1Y3QgYm54dCB7CiAJIHBjaV9jaGFubmVsX29mZmxpbmUoKGJwKS0mZ3Q7cGRldikpCiAKIAlzdHJ1Y3QgYm54dF9pcnEJKmlycV90Ymw7CiYjNDM7CS8qIElSUSBhZmZpbml0eSwgaW5kZXhlZCBieSBjb21wbGV0aW9uIHJpbmcuIEtlcHQgYWNyb3NzIElSUQomIzQzOwkgKiByZWFsbG9jYXRpb24sIHRoZSBNU0ktWCB2ZWN0b3IgaW5kZXggaXMgbm90IHN0YWJsZS4KJiM0MzsJICovCiYjNDM7CWNwdW1hc2tfdmFyX3QJCSpyaW5nX2NwdV9tYXNrOwomIzQzOwkvKiBSaW5ncyBmb3Igd2hpY2ggdGhlIG1hc2sgYWJvdmUgd2FzIGNvbmZpZ3VyZWQgZnJvbSB0aGUgb3V0c2lkZSwKJiM0MzsJICogcmF0aGVyIHRoYW4gYmVpbmcgb3VyIG93biBkZWZhdWx0IHBsYWNlbWVudC4KJiM0MzsJICovCiYjNDM7CXVuc2lnbmVkIGxvbmcJCSpyaW5nX2FmZmluaXR5X3NldDsKJiM0MzsJaW50CQkJbWF4X2lycXM7CiAJaW50CQkJdG90YWxfaXJxczsKIAlpbnQJCQl1bHBfbnVtX21zaXhfd2FudDsKIAl1OAkJCW1hY19hZGRyW0VUSF9BTEVOXTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY1OAoJCQkJCQkJb3V0cHV0OiAxMDIKCQkJCQkJCXRob3VnaHRzOiA2MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nPWZhbHNlOiBCcm9hZGNvbSBibnh0IERyaXZlciBJUlEgQWZmaW5pdHkgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGEgcGF0Y2ggdG91Y2hpbmcgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jYCBhbmQgYGJueHQuaGAsIHdoaWNoIGlzIHRoZSBgYm54dGAgZHJpdmVyLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBob3cgSVJRIGFmZmluaXR5IGlzIGhhbmRsZWQgd2l0aGluIHRoZSBkcml2ZXIsIHNwZWNpZmljYWxseSBob3cgYHJpbmdfY3B1X21hc2tgIGFuZCBgcmluZ19hZmZpbml0eV9zZXRgIGFyZSBtYW5hZ2VkIGFuZCB1c2VkIGluIGBibnh0X2luaXRfb25lYCwgYGJueHRfaXJxX2FmZmluaXR5X25vdGlmeWAsIGFuZCBgYm54dF9yZXF1ZXN0X2lycWAuIEZ1bmRhbWVudGFsbHksIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZTsgaXQgYWx0ZXJzIGhvdyB0aGUgZHJpdmVyIGFzc2lnbnMgYW5kIHJlc3RvcmVzIElSUSBhZmZpbml0eS4KCkJ1dCwgYW5kIHRoaXMgaXMgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uLCBpcyB0aGlzICpyZWFjaGFibGUqIGZvciBmdXp6aW5nPyBXZSYjMzk7cmUgdHlwaWNhbGx5IG9wZXJhdGluZyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBEb2VzIFFFTVUgZW11bGF0ZSB0aGUgaGFyZHdhcmUgdGhpcyBkcml2ZXIgaXMgKmZvcio/IEl0JiMzOTtzIEJyb2FkY29tIE5ldFh0cmVtZS1DL0UgMTAvMjUvNDAvNTAgZ2lnYWJpdCBFdGhlcm5ldCBjYXJkcy4gQSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoZSBgYm54dGAgZGV2aWNlLiBJdCBkb2VzIGVtdWxhdGUgb3RoZXIgTklDcywgYnV0IG5vdCB0aGlzIG9uZS4KClRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IHNheSB3ZSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGZvciAmIzM0O0NvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUmIzM0Oy4gQW5kIHRoYXQmIzM5O3MgZXhhY3RseSB3aGF0IHRoaXMgaXM6IGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciAoQnJvYWRjb20pLCBmb3IgYSBzcGVjaWZpYyBQQ0llIE5JQyAoYGJueHRgKSwgYW5kIGl0JiMzOTtzICpub3QqIGVtdWxhdGVkIGJ5IFFFTVUuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIGVsaW1pbmF0ZSBhbnkgb3RoZXIgcG9zc2libGUgYXR0YWNrIHZlY3RvcnMuIFRoZSBgYm54dF9pbml0X29uZWAgZnVuY3Rpb24gaXMgdGhlIFBDSSBwcm9iZSBmdW5jdGlvbi4gVGhhdCYjMzk7cyBjYWxsZWQgd2hlbiB0aGUgUENJIGRldmljZSBpcyAqZGV0ZWN0ZWQqLiBXaXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBvciBhbiBlbXVsYXRvciwgdGhpcyBjb2RlIHBhdGggaXMgc2ltcGx5IHVucmVhY2hhYmxlLgoKU28sIHRoZSBjb25jbHVzaW9uIGlzIGNsZWFyLiBXZSBzaG91bGQgdXNlIGBzZXQtcmVzdWx0c2AgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJyb2FkY29tIE5ldFh0cmVtZS1DL0UgKGJueHQpIEV0aGVybmV0IGRyaXZlciB0byBpbXByb3ZlIElSUSBhZmZpbml0eSB0cmFja2luZyBhY3Jvc3MgSVJRIHJlYWxsb2NhdGlvbnMuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGRyaXZlciBmb3IgcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJyb2FkY29tIE5ldFh0cmVtZS1DL0UgKGJueHQpIEV0aGVybmV0IGRyaXZlciB0byBpbXByb3ZlIElSUSBhZmZpbml0eSB0cmFja2luZyBhY3Jvc3MgSVJRIHJlYWxsb2NhdGlvbnMuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGRyaXZlciBmb3IgcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6NTQ6MzguMjA3ODM1MjA0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwMzY3NDUwNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQnJvYWRjb20gTmV0WHRyZW1lLUMvRSAoYm54dCkgRXRoZXJuZXQgZHJpdmVyIHRvIGltcHJvdmUgSVJRIGFmZmluaXR5IHRyYWNraW5nIGFjcm9zcyBJUlEgcmVhbGxvY2F0aW9ucy4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgZHJpdmVyIGZvciBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDo1NDozOC4yMDc4NDMzMjRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMTA3MjYyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDlhMzI3OTM0OGQxODAxZGU0OTg1M2ZlMDU3NDRiYjNiYTViZDYwMDVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMjA6NTQ6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuY1xcbmluZGV4IDFlNDk0NGYzZTYwNjUuLjM1Nzk1Mzc0YThkZGEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuY1xcbkBAIC0xMTU5Miw3ICsxMTU5Miw3IEBAIHN0YXRpYyBpbnQgYm54dF9nZXRfbnVtX21zaXgoc3RydWN0IGJueHQgKmJwKVxcbiBcXG4gc3RhdGljIGludCBibnh0X2luaXRfaW50X21vZGUoc3RydWN0IGJueHQgKmJwKVxcbiB7XFxuLVxcdGludCBpLCB0b3RhbF92ZWNzLCBtYXgsIHJjID0gMCwgbWluID0gMSwgdWxwX21zaXgsIHR4X2NwLCB0Ymxfc2l6ZTtcXG4rXFx0aW50IGksIHRvdGFsX3ZlY3MsIG1heCwgcmMsIG1pbiA9IDEsIHVscF9tc2l4LCB0eF9jcCwgdGJsX3NpemU7XFxuIFxcbiBcXHR0b3RhbF92ZWNzID0gYm54dF9nZXRfbnVtX21zaXgoYnApO1xcbiBcXHRtYXggPSBibnh0X2dldF9tYXhfZnVuY19pcnFzKGJwKTtcXG5AQCAtMTE2MTcsMjYgKzExNjE3LDI2IEBAIHN0YXRpYyBpbnQgYm54dF9pbml0X2ludF9tb2RlKHN0cnVjdCBibnh0ICpicClcXG4gXFx0aWYgKHBjaV9tc2l4X2Nhbl9hbGxvY19keW4oYnAtXFx1MDAzZXBkZXYpKVxcbiBcXHRcXHR0Ymxfc2l6ZSA9IG1heDtcXG4gXFx0YnAtXFx1MDAzZWlycV90YmwgPSBremFsbG9jX29ianMoKmJwLVxcdTAwM2VpcnFfdGJsLCB0Ymxfc2l6ZSk7XFxuLVxcdGlmIChicC1cXHUwMDNlaXJxX3RibCkge1xcbi1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdG90YWxfdmVjczsgaSsrKVxcbi1cXHRcXHRcXHRicC1cXHUwMDNlaXJxX3RibFtpXS52ZWN0b3IgPSBwY2lfaXJxX3ZlY3RvcihicC1cXHUwMDNlcGRldiwgaSk7XFxuLVxcbi1cXHRcXHRicC1cXHUwMDNldG90YWxfaXJxcyA9IHRvdGFsX3ZlY3M7XFxuLVxcdFxcdC8qIFRyaW0gcmluZ3MgYmFzZWQgdXBvbiBudW0gb2YgdmVjdG9ycyBhbGxvY2F0ZWQgKi9cXG4tXFx0XFx0cmMgPSBibnh0X3RyaW1fcmluZ3MoYnAsIFxcdTAwMjZicC1cXHUwMDNlcnhfbnJfcmluZ3MsIFxcdTAwMjZicC1cXHUwMDNldHhfbnJfcmluZ3MsXFxuLVxcdFxcdFxcdFxcdCAgICAgdG90YWxfdmVjcyAtIHVscF9tc2l4LCBtaW4gPT0gMSk7XFxuLVxcdFxcdGlmIChyYylcXG4tXFx0XFx0XFx0Z290byBtc2l4X3NldHVwX2V4aXQ7XFxuLVxcbi1cXHRcXHR0eF9jcCA9IGJueHRfbnVtX3R4X3RvX2NwKGJwLCBicC1cXHUwMDNldHhfbnJfcmluZ3MpO1xcbi1cXHRcXHRicC1cXHUwMDNlY3BfbnJfcmluZ3MgPSAobWluID09IDEpID9cXG4tXFx0XFx0XFx0XFx0ICBtYXhfdChpbnQsIHR4X2NwLCBicC1cXHUwMDNlcnhfbnJfcmluZ3MpIDpcXG4tXFx0XFx0XFx0XFx0ICB0eF9jcCArIGJwLVxcdTAwM2VyeF9ucl9yaW5ncztcXG4tXFxuLVxcdH0gZWxzZSB7XFxuK1xcdGlmICghYnAtXFx1MDAzZWlycV90YmwpIHtcXG4gXFx0XFx0cmMgPSAtRU5PTUVNO1xcbiBcXHRcXHRnb3RvIG1zaXhfc2V0dXBfZXhpdDtcXG4gXFx0fVxcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRvdGFsX3ZlY3M7IGkrKylcXG4rXFx0XFx0YnAtXFx1MDAzZWlycV90YmxbaV0udmVjdG9yID0gcGNpX2lycV92ZWN0b3IoYnAtXFx1MDAzZXBkZXYsIGkpO1xcbitcXG4rXFx0YnAtXFx1MDAzZXRvdGFsX2lycXMgPSB0b3RhbF92ZWNzO1xcbitcXHQvKiBUcmltIHJpbmdzIGJhc2VkIHVwb24gbnVtIG9mIHZlY3RvcnMgYWxsb2NhdGVkICovXFxuK1xcdHJjID0gYm54dF90cmltX3JpbmdzKGJwLCBcXHUwMDI2YnAtXFx1MDAzZXJ4X25yX3JpbmdzLCBcXHUwMDI2YnAtXFx1MDAzZXR4X25yX3JpbmdzLFxcbitcXHRcXHRcXHQgICAgIHRvdGFsX3ZlY3MgLSB1bHBfbXNpeCwgbWluID09IDEpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdGdvdG8gbXNpeF9zZXR1cF9leGl0O1xcbitcXG4rXFx0dHhfY3AgPSBibnh0X251bV90eF90b19jcChicCwgYnAtXFx1MDAzZXR4X25yX3JpbmdzKTtcXG4rXFx0YnAtXFx1MDAzZWNwX25yX3JpbmdzID0gKG1pbiA9PSAxKSA/XFxuK1xcdFxcdFxcdCAgbWF4X3QoaW50LCB0eF9jcCwgYnAtXFx1MDAzZXJ4X25yX3JpbmdzKSA6XFxuK1xcdFxcdFxcdCAgdHhfY3AgKyBicC1cXHUwMDNlcnhfbnJfcmluZ3M7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIG1zaXhfc2V0dXBfZXhpdDpcXG5AQCAtMTE3OTIsNiArMTE3OTIsOSBAQCBzdGF0aWMgdm9pZCBibnh0X2lycV9hZmZpbml0eV9ub3RpZnkoc3RydWN0IGlycV9hZmZpbml0eV9ub3RpZnkgKm5vdGlmeSxcXG4gXFxuIFxcdGlycSA9IGNvbnRhaW5lcl9vZihub3RpZnksIHN0cnVjdCBibnh0X2lycSwgYWZmaW5pdHlfbm90aWZ5KTtcXG4gXFxuK1xcdGNwdW1hc2tfY29weShpcnEtXFx1MDAzZWJwLVxcdTAwM2VyaW5nX2NwdV9tYXNrW2lycS1cXHUwMDNlcmluZ19ucl0sIG1hc2spO1xcbitcXHRzZXRfYml0KGlycS1cXHUwMDNlcmluZ19uciwgaXJxLVxcdTAwM2VicC1cXHUwMDNlcmluZ19hZmZpbml0eV9zZXQpO1xcbitcXG4gI2lmZGVmIENPTkZJR19SRlNfQUNDRUxcXG4gXFx0aWYgKGlycS1cXHUwMDNlYnAtXFx1MDAzZWRldi1cXHUwMDNlcnhfY3B1X3JtYXAgXFx1MDAyNlxcdTAwMjYgaXJxLVxcdTAwM2VyaW5nX25yIFxcdTAwM2MgaXJxLVxcdTAwM2VicC1cXHUwMDNlcnhfbnJfcmluZ3MpIHtcXG4gXFx0XFx0aW50IGVycjtcXG5AQCAtMTE4MDcsOCArMTE4MTAsNiBAQCBzdGF0aWMgdm9pZCBibnh0X2lycV9hZmZpbml0eV9ub3RpZnkoc3RydWN0IGlycV9hZmZpbml0eV9ub3RpZnkgKm5vdGlmeSxcXG4gXFx0aWYgKCFpcnEtXFx1MDAzZWJwLVxcdTAwM2V0cGhfbW9kZSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0Y3B1bWFza19jb3B5KGlycS1cXHUwMDNlY3B1X21hc2ssIG1hc2spO1xcbi1cXG4gXFx0aWYgKGlycS1cXHUwMDNlcmluZ19uciBcXHUwMDNlPSBpcnEtXFx1MDAzZWJwLVxcdTAwM2VyeF9ucl9yaW5ncylcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG5AQCAtMTE4NTAsMTAgKzExODUxLDYgQEAgc3RhdGljIHZvaWQgYm54dF9yZWdpc3Rlcl9pcnFfbm90aWZpZXIoc3RydWN0IGJueHQgKmJwLCBzdHJ1Y3QgYm54dF9pcnEgKmlycSlcXG4gXFxuIFxcdGlycS1cXHUwMDNlYnAgPSBicDtcXG4gXFxuLVxcdC8qIE5vdGhpbmcgdG8gZG8gaWYgVFBIIGlzIG5vdCBlbmFibGVkICovXFxuLVxcdGlmICghYnAtXFx1MDAzZXRwaF9tb2RlKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbiBcXHQvKiBSZWdpc3RlciBJUlEgYWZmaW5pdHkgbm90aWZpZXIgKi9cXG4gXFx0bm90aWZ5ID0gXFx1MDAyNmlycS1cXHUwMDNlYWZmaW5pdHlfbm90aWZ5O1xcbiBcXHRub3RpZnktXFx1MDAzZWlycSA9IGlycS1cXHUwMDNldmVjdG9yO1xcbkBAIC0xMTg2Myw2ICsxMTg2MCw0MSBAQCBzdGF0aWMgdm9pZCBibnh0X3JlZ2lzdGVyX2lycV9ub3RpZmllcihzdHJ1Y3QgYm54dCAqYnAsIHN0cnVjdCBibnh0X2lycSAqaXJxKVxcbiBcXHRpcnFfc2V0X2FmZmluaXR5X25vdGlmaWVyKGlycS1cXHUwMDNldmVjdG9yLCBub3RpZnkpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGJueHRfYWxsb2NfcmluZ19jcHVfbWFza3Moc3RydWN0IGJueHQgKmJwKVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0YnAtXFx1MDAzZXJpbmdfY3B1X21hc2sgPSBremFsbG9jX29ianMoKmJwLVxcdTAwM2VyaW5nX2NwdV9tYXNrLCBicC1cXHUwMDNlbWF4X2lycXMpO1xcbitcXHRpZiAoIWJwLVxcdTAwM2VyaW5nX2NwdV9tYXNrKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdGJwLVxcdTAwM2VyaW5nX2FmZmluaXR5X3NldCA9IGJpdG1hcF96YWxsb2MoYnAtXFx1MDAzZW1heF9pcnFzLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFicC1cXHUwMDNlcmluZ19hZmZpbml0eV9zZXQpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGJwLVxcdTAwM2VtYXhfaXJxczsgaSsrKVxcbitcXHRcXHRpZiAoIXphbGxvY19jcHVtYXNrX3ZhcihcXHUwMDI2YnAtXFx1MDAzZXJpbmdfY3B1X21hc2tbaV0sIEdGUF9LRVJORUwpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBibnh0X2ZyZWVfcmluZ19jcHVfbWFza3Moc3RydWN0IGJueHQgKmJwKVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKCFicC1cXHUwMDNlcmluZ19jcHVfbWFzaylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGJwLVxcdTAwM2VtYXhfaXJxczsgaSsrKVxcbitcXHRcXHRmcmVlX2NwdW1hc2tfdmFyKGJwLVxcdTAwM2VyaW5nX2NwdV9tYXNrW2ldKTtcXG4rXFxuK1xcdGJpdG1hcF9mcmVlKGJwLVxcdTAwM2VyaW5nX2FmZmluaXR5X3NldCk7XFxuK1xcdGJwLVxcdTAwM2VyaW5nX2FmZmluaXR5X3NldCA9IE5VTEw7XFxuK1xcdGtmcmVlKGJwLVxcdTAwM2VyaW5nX2NwdV9tYXNrKTtcXG4rXFx0YnAtXFx1MDAzZXJpbmdfY3B1X21hc2sgPSBOVUxMO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBibnh0X2ZyZWVfaXJxKHN0cnVjdCBibnh0ICpicClcXG4ge1xcbiBcXHRzdHJ1Y3QgYm54dF9pcnEgKmlycTtcXG5AQCAtMTE4NzcsMTMgKzExOTA5LDcgQEAgc3RhdGljIHZvaWQgYm54dF9mcmVlX2lycShzdHJ1Y3QgYm54dCAqYnApXFxuIFxcdFxcdGlycSA9IFxcdTAwMjZicC1cXHUwMDNlaXJxX3RibFttYXBfaWR4XTtcXG4gXFx0XFx0aWYgKGlycS1cXHUwMDNlcmVxdWVzdGVkKSB7XFxuIFxcdFxcdFxcdGJueHRfcmVsZWFzZV9pcnFfbm90aWZpZXIoaXJxKTtcXG4tXFxuLVxcdFxcdFxcdGlmIChpcnEtXFx1MDAzZWhhdmVfY3B1bWFzaykge1xcbi1cXHRcXHRcXHRcXHRpcnFfdXBkYXRlX2FmZmluaXR5X2hpbnQoaXJxLVxcdTAwM2V2ZWN0b3IsIE5VTEwpO1xcbi1cXHRcXHRcXHRcXHRmcmVlX2NwdW1hc2tfdmFyKGlycS1cXHUwMDNlY3B1X21hc2spO1xcbi1cXHRcXHRcXHRcXHRpcnEtXFx1MDAzZWhhdmVfY3B1bWFzayA9IDA7XFxuLVxcdFxcdFxcdH1cXG4tXFxuK1xcdFxcdFxcdGlycV91cGRhdGVfYWZmaW5pdHlfaGludChpcnEtXFx1MDAzZXZlY3RvciwgTlVMTCk7XFxuIFxcdFxcdFxcdGZyZWVfaXJxKGlycS1cXHUwMDNldmVjdG9yLCBicC1cXHUwMDNlYm5hcGlbaV0pO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC0xMTkyNSw5ICsxMTk1MSw5IEBAIHN0YXRpYyBpbnQgYm54dF9yZXF1ZXN0X2lycShzdHJ1Y3QgYm54dCAqYnApXFxuIFxcdFxcdGJwLVxcdTAwM2V0cGhfbW9kZSA9IFBDSV9UUEhfU1RfSVZfTU9ERTtcXG4gXFxuIFxcdGZvciAoaSA9IDAsIGogPSAwOyBpIFxcdTAwM2MgYnAtXFx1MDAzZWNwX25yX3JpbmdzOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IGNwdW1hc2sgKmNwdV9tYXNrID0gYnAtXFx1MDAzZXJpbmdfY3B1X21hc2tbaV07XFxuIFxcdFxcdGludCBtYXBfaWR4ID0gYm54dF9jcF9udW1fdG9faXJxX251bShicCwgaSk7XFxuIFxcdFxcdHN0cnVjdCBibnh0X2lycSAqaXJxID0gXFx1MDAyNmJwLVxcdTAwM2VpcnFfdGJsW21hcF9pZHhdO1xcbi1cXHRcXHR1bnNpZ25lZCBpbnQgY3B1X251bTtcXG4gXFx0XFx0dTE2IHRhZztcXG4gXFxuIFxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19SRlNfQUNDRUwpIFxcdTAwMjZcXHUwMDI2XFxuQEAgLTExOTQ2LDE5ICsxMTk3MiwyNCBAQCBzdGF0aWMgaW50IGJueHRfcmVxdWVzdF9pcnEoc3RydWN0IGJueHQgKmJwKVxcbiBcXG4gXFx0XFx0bmV0aWZfbmFwaV9zZXRfaXJxX2xvY2tlZChcXHUwMDI2YnAtXFx1MDAzZWJuYXBpW2ldLVxcdTAwM2VuYXBpLCBpcnEtXFx1MDAzZXZlY3Rvcik7XFxuIFxcdFxcdGlycS1cXHUwMDNlcmVxdWVzdGVkID0gMTtcXG4tXFxuLVxcdFxcdGlmICghemFsbG9jX2NwdW1hc2tfdmFyKFxcdTAwMjZpcnEtXFx1MDAzZWNwdV9tYXNrLCBHRlBfS0VSTkVMKSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcbi1cXHRcXHRpcnEtXFx1MDAzZWhhdmVfY3B1bWFzayA9IDE7XFxuIFxcdFxcdGlycS1cXHUwMDNlbXNpeF9uciA9IG1hcF9pZHg7XFxuIFxcdFxcdGlycS1cXHUwMDNlcmluZ19uciA9IGk7XFxuLVxcdFxcdGNwdV9udW0gPSBjcHVtYXNrX2xvY2FsX3NwcmVhZChpLCBudW1hX25vZGUpO1xcbi1cXHRcXHRjcHVtYXNrX3NldF9jcHUoY3B1X251bSwgaXJxLVxcdTAwM2VjcHVfbWFzayk7XFxuK1xcbitcXHRcXHQvKiBSZXVzZSB0aGUgbWFzayByZWNvcmRlZCBiZWZvcmUgdGhlIElSUXMgd2VyZSBmcmVlZC4gTm90aGluZ1xcbitcXHRcXHQgKiB3YXMgcmVjb3JkZWQgeWV0IG9uIHRoZSB2ZXJ5IGZpcnN0IHJlcXVlc3QsIGFuZCB0aGUgbWFza1xcbitcXHRcXHQgKiBtYXkgaGF2ZSBnb25lIHN0YWxlIGlmIHRoZSBDUFVzIHdlbnQgb2ZmbGluZSBpbiBiZXR3ZWVuLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKCF0ZXN0X2JpdChpLCBicC1cXHUwMDNlcmluZ19hZmZpbml0eV9zZXQpIHx8XFxuK1xcdFxcdCAgICAhY3B1bWFza19pbnRlcnNlY3RzKGNwdV9tYXNrLCBjcHVfb25saW5lX21hc2spKSB7XFxuK1xcdFxcdFxcdGNsZWFyX2JpdChpLCBicC1cXHUwMDNlcmluZ19hZmZpbml0eV9zZXQpO1xcbitcXHRcXHRcXHRjcHVtYXNrX2NsZWFyKGNwdV9tYXNrKTtcXG4rXFx0XFx0XFx0Y3B1bWFza19zZXRfY3B1KGNwdW1hc2tfbG9jYWxfc3ByZWFkKGksIG51bWFfbm9kZSksXFxuK1xcdFxcdFxcdFxcdFxcdGNwdV9tYXNrKTtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0LyogSW5pdCBTVCB0YWJsZSBlbnRyeSBpZiB3ZSBjYW4gZ2V0IHRoZSBtYXBwaW5nICovXFxuIFxcdFxcdGlmICghcGNpZV90cGhfZ2V0X2NwdV9zdChicC1cXHUwMDNlcGRldiwgVFBIX01FTV9UWVBFX1ZNLFxcbi1cXHRcXHRcXHRcXHRcXHQgY3B1X251bSwgXFx1MDAyNnRhZykpIHtcXG4rXFx0XFx0XFx0XFx0XFx0IGNwdW1hc2tfZmlyc3QoY3B1X21hc2spLCBcXHUwMDI2dGFnKSkge1xcbiBcXHRcXHRcXHRwY2llX3RwaF9zZXRfc3RfZW50cnkoYnAtXFx1MDAzZXBkZXYsIGlycS1cXHUwMDNlbXNpeF9uciwgdGFnKTtcXG4gXFx0XFx0XFx0aXJxLVxcdTAwM2V0YWcgPSB0YWc7XFxuIFxcdFxcdFxcdGlycS1cXHUwMDNlbmV3X3RhZyA9IHRhZztcXG5AQCAtMTE5NjYsMTAgKzExOTk3LDE5IEBAIHN0YXRpYyBpbnQgYm54dF9yZXF1ZXN0X2lycShzdHJ1Y3QgYm54dCAqYnApXFxuIFxcbiBcXHRcXHRibnh0X3JlZ2lzdGVyX2lycV9ub3RpZmllcihicCwgaXJxKTtcXG4gXFxuLVxcdFxcdHJjID0gaXJxX3VwZGF0ZV9hZmZpbml0eV9oaW50KGlycS1cXHUwMDNldmVjdG9yLCBpcnEtXFx1MDAzZWNwdV9tYXNrKTtcXG4rXFx0XFx0LyogT25seSBwdXQgdGhlIElSUSBiYWNrIHdoZXJlIGl0IHdhcyBjb25maWd1cmVkIHRvIGJlLCBvdXIgb3duXFxuK1xcdFxcdCAqIHBsYWNlbWVudCBpcyBqdXN0IGEgaGludCwgdGhlIGNvcmUgc3ByZWFkcyB3aXRoaW5cXG4rXFx0XFx0ICogaXJxX2RlZmF1bHRfYWZmaW5pdHkgd2hpY2ggd2Uga25vdyBub3RoaW5nIGFib3V0LlxcbitcXHRcXHQgKiBTZXQgYWZ0ZXIgaW5zdGFsbGluZyB0aGUgbm90aWZpZXIsIGlmIHdlIHJhY2Ugd2l0aCB0aGUgdXNlclxcbitcXHRcXHQgKiBpdCdzIGJldHRlciB0byBvdmVyd3JpdGUgdGhhbiBtaXNzIHRoZSBub3RpZmljYXRpb24uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAodGVzdF9iaXQoaSwgYnAtXFx1MDAzZXJpbmdfYWZmaW5pdHlfc2V0KSlcXG4rXFx0XFx0XFx0cmMgPSBpcnFfc2V0X2FmZmluaXR5X2FuZF9oaW50KGlycS1cXHUwMDNldmVjdG9yLCBjcHVfbWFzayk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cmMgPSBpcnFfdXBkYXRlX2FmZmluaXR5X2hpbnQoaXJxLVxcdTAwM2V2ZWN0b3IsIGNwdV9tYXNrKTtcXG4gXFx0XFx0aWYgKHJjKSB7XFxuIFxcdFxcdFxcdG5ldGRldl93YXJuKGJwLVxcdTAwM2VkZXYsXFxuLVxcdFxcdFxcdFxcdCAgICBcXFwiVXBkYXRlIGFmZmluaXR5IGhpbnQgZmFpbGVkLCBJUlEgPSAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJTZXR0aW5nIElSUSBhZmZpbml0eSBmYWlsZWQsIElSUSA9ICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgICAgaXJxLVxcdTAwM2V2ZWN0b3IpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbkBAIC0xNjYxMCw2ICsxNjY1MCw3IEBAIHN0YXRpYyB2b2lkIGJueHRfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0Ym54dF9zaHV0ZG93bl90YyhicCk7XFxuIFxcbiBcXHRibnh0X2NsZWFyX2ludF9tb2RlKGJwKTtcXG4rXFx0Ym54dF9mcmVlX3JpbmdfY3B1X21hc2tzKGJwKTtcXG4gXFx0Ym54dF9od3JtX2Z1bmNfZHJ2X3Vucmd0cihicCk7XFxuIFxcdGJueHRfZnJlZV9od3JtX3Jlc291cmNlcyhicCk7XFxuIFxcdGJueHRfaHdtb25fdW5pbml0KGJwKTtcXG5AQCAtMTcwNDgsNiArMTcwODksMTEgQEAgc3RhdGljIGludCBibnh0X2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbiBcXHRicC1cXHUwMDNlbXNnX2VuYWJsZSA9IEJOWFRfREVGX01TR19FTkFCTEU7XFxuIFxcdGJueHRfc2V0X21heF9mdW5jX2lycXMoYnAsIG1heF9pcnFzKTtcXG4gXFxuK1xcdGJwLVxcdTAwM2VtYXhfaXJxcyA9IG1heF9pcnFzO1xcbitcXHRyYyA9IGJueHRfYWxsb2NfcmluZ19jcHVfbWFza3MoYnApO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdGdvdG8gaW5pdF9lcnJfZnJlZTtcXG4rXFxuIFxcdGlmIChibnh0X3ZmX3BjaWlkKGJwLVxcdTAwM2Vib2FyZF9pZHgpKVxcbiBcXHRcXHRicC1cXHUwMDNlZmxhZ3MgfD0gQk5YVF9GTEFHX1ZGO1xcbiBcXG5AQCAtMTcyOTcsNiArMTczNDMsNyBAQCBzdGF0aWMgaW50IGJueHRfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuIFxcdGJwLVxcdTAwM2Vyc3NfaW5kaXJfdGJsID0gTlVMTDtcXG4gXFxuIGluaXRfZXJyX2ZyZWU6XFxuK1xcdGJueHRfZnJlZV9yaW5nX2NwdV9tYXNrcyhicCk7XFxuIFxcdGZyZWVfbmV0ZGV2KGRldik7XFxuIFxcdHJldHVybiByYztcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5oXFxuaW5kZXggZGM4ZWM1ZTU3MzNlOS4uYWI4OTRmOGFkZGVmNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5oXFxuQEAgLTEyNjEsOSArMTI2MSw3IEBAIHN0cnVjdCBibnh0X2lycSB7XFxuIFxcdGlycV9oYW5kbGVyX3RcXHRoYW5kbGVyO1xcbiBcXHR1bnNpZ25lZCBpbnRcXHR2ZWN0b3I7XFxuIFxcdHU4XFx0XFx0cmVxdWVzdGVkOjE7XFxuLVxcdHU4XFx0XFx0aGF2ZV9jcHVtYXNrOjE7XFxuIFxcdGNoYXJcXHRcXHRuYW1lW0lGTkFNU0laICsgQk5YVF9JUlFfTkFNRV9FWFRSQV07XFxuLVxcdGNwdW1hc2tfdmFyX3RcXHRjcHVfbWFzaztcXG4gXFxuIFxcdHN0cnVjdCBibnh0XFx0KmJwO1xcbiBcXHRpbnRcXHRcXHRtc2l4X25yO1xcbkBAIC0yNDgyLDYgKzI0ODAsMTUgQEAgc3RydWN0IGJueHQge1xcbiBcXHQgcGNpX2NoYW5uZWxfb2ZmbGluZSgoYnApLVxcdTAwM2VwZGV2KSlcXG4gXFxuIFxcdHN0cnVjdCBibnh0X2lycVxcdCppcnFfdGJsO1xcbitcXHQvKiBJUlEgYWZmaW5pdHksIGluZGV4ZWQgYnkgY29tcGxldGlvbiByaW5nLiBLZXB0IGFjcm9zcyBJUlFcXG4rXFx0ICogcmVhbGxvY2F0aW9uLCB0aGUgTVNJLVggdmVjdG9yIGluZGV4IGlzIG5vdCBzdGFibGUuXFxuK1xcdCAqL1xcbitcXHRjcHVtYXNrX3Zhcl90XFx0XFx0KnJpbmdfY3B1X21hc2s7XFxuK1xcdC8qIFJpbmdzIGZvciB3aGljaCB0aGUgbWFzayBhYm92ZSB3YXMgY29uZmlndXJlZCBmcm9tIHRoZSBvdXRzaWRlLFxcbitcXHQgKiByYXRoZXIgdGhhbiBiZWluZyBvdXIgb3duIGRlZmF1bHQgcGxhY2VtZW50LlxcbitcXHQgKi9cXG4rXFx0dW5zaWduZWQgbG9uZ1xcdFxcdCpyaW5nX2FmZmluaXR5X3NldDtcXG4rXFx0aW50XFx0XFx0XFx0bWF4X2lycXM7XFxuIFxcdGludFxcdFxcdFxcdHRvdGFsX2lycXM7XFxuIFxcdGludFxcdFxcdFxcdHVscF9udW1fbXNpeF93YW50O1xcbiBcXHR1OFxcdFxcdFxcdG1hY19hZGRyW0VUSF9BTEVOXTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6NTQ6MzguODE5NjM2MzExWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTQyNDkzMTI5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJyb2FkY29tIE5ldFh0cmVtZS1DL0UgKGJueHQpIEV0aGVybmV0IGRyaXZlciB0byBpbXByb3ZlIElSUSBhZmZpbml0eSB0cmFja2luZyBhY3Jvc3MgSVJRIHJlYWxsb2NhdGlvbnMuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGRyaXZlciBmb3IgcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWEzMjc5MzQ4ZDE4MDFkZTQ5ODUzZmUwNTc0NGJiM2JhNWJkNjAwNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDIwOjU0OjM3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuY1xuaW5kZXggMWU0OTQ0ZjNlNjA2NS4uMzU3OTUzNzRhOGRkYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuY1xuQEAgLTExNTkyLDcgKzExNTkyLDcgQEAgc3RhdGljIGludCBibnh0X2dldF9udW1fbXNpeChzdHJ1Y3QgYm54dCAqYnApXG4gXG4gc3RhdGljIGludCBibnh0X2luaXRfaW50X21vZGUoc3RydWN0IGJueHQgKmJwKVxuIHtcbi1cdGludCBpLCB0b3RhbF92ZWNzLCBtYXgsIHJjID0gMCwgbWluID0gMSwgdWxwX21zaXgsIHR4X2NwLCB0Ymxfc2l6ZTtcbitcdGludCBpLCB0b3RhbF92ZWNzLCBtYXgsIHJjLCBtaW4gPSAxLCB1bHBfbXNpeCwgdHhfY3AsIHRibF9zaXplO1xuIFxuIFx0dG90YWxfdmVjcyA9IGJueHRfZ2V0X251bV9tc2l4KGJwKTtcbiBcdG1heCA9IGJueHRfZ2V0X21heF9mdW5jX2lycXMoYnApO1xuQEAgLTExNjE3LDI2ICsxMTYxNywyNiBAQCBzdGF0aWMgaW50IGJueHRfaW5pdF9pbnRfbW9kZShzdHJ1Y3QgYm54dCAqYnApXG4gXHRpZiAocGNpX21zaXhfY2FuX2FsbG9jX2R5bihicC1cdTAwM2VwZGV2KSlcbiBcdFx0dGJsX3NpemUgPSBtYXg7XG4gXHRicC1cdTAwM2VpcnFfdGJsID0ga3phbGxvY19vYmpzKCpicC1cdTAwM2VpcnFfdGJsLCB0Ymxfc2l6ZSk7XG4tXHRpZiAoYnAtXHUwMDNlaXJxX3RibCkge1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0b3RhbF92ZWNzOyBpKyspXG4tXHRcdFx0YnAtXHUwMDNlaXJxX3RibFtpXS52ZWN0b3IgPSBwY2lfaXJxX3ZlY3RvcihicC1cdTAwM2VwZGV2LCBpKTtcbi1cbi1cdFx0YnAtXHUwMDNldG90YWxfaXJxcyA9IHRvdGFsX3ZlY3M7XG4tXHRcdC8qIFRyaW0gcmluZ3MgYmFzZWQgdXBvbiBudW0gb2YgdmVjdG9ycyBhbGxvY2F0ZWQgKi9cbi1cdFx0cmMgPSBibnh0X3RyaW1fcmluZ3MoYnAsIFx1MDAyNmJwLVx1MDAzZXJ4X25yX3JpbmdzLCBcdTAwMjZicC1cdTAwM2V0eF9ucl9yaW5ncyxcbi1cdFx0XHRcdCAgICAgdG90YWxfdmVjcyAtIHVscF9tc2l4LCBtaW4gPT0gMSk7XG4tXHRcdGlmIChyYylcbi1cdFx0XHRnb3RvIG1zaXhfc2V0dXBfZXhpdDtcbi1cbi1cdFx0dHhfY3AgPSBibnh0X251bV90eF90b19jcChicCwgYnAtXHUwMDNldHhfbnJfcmluZ3MpO1xuLVx0XHRicC1cdTAwM2VjcF9ucl9yaW5ncyA9IChtaW4gPT0gMSkgP1xuLVx0XHRcdFx0ICBtYXhfdChpbnQsIHR4X2NwLCBicC1cdTAwM2VyeF9ucl9yaW5ncykgOlxuLVx0XHRcdFx0ICB0eF9jcCArIGJwLVx1MDAzZXJ4X25yX3JpbmdzO1xuLVxuLVx0fSBlbHNlIHtcbitcdGlmICghYnAtXHUwMDNlaXJxX3RibCkge1xuIFx0XHRyYyA9IC1FTk9NRU07XG4gXHRcdGdvdG8gbXNpeF9zZXR1cF9leGl0O1xuIFx0fVxuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdG90YWxfdmVjczsgaSsrKVxuK1x0XHRicC1cdTAwM2VpcnFfdGJsW2ldLnZlY3RvciA9IHBjaV9pcnFfdmVjdG9yKGJwLVx1MDAzZXBkZXYsIGkpO1xuK1xuK1x0YnAtXHUwMDNldG90YWxfaXJxcyA9IHRvdGFsX3ZlY3M7XG4rXHQvKiBUcmltIHJpbmdzIGJhc2VkIHVwb24gbnVtIG9mIHZlY3RvcnMgYWxsb2NhdGVkICovXG4rXHRyYyA9IGJueHRfdHJpbV9yaW5ncyhicCwgXHUwMDI2YnAtXHUwMDNlcnhfbnJfcmluZ3MsIFx1MDAyNmJwLVx1MDAzZXR4X25yX3JpbmdzLFxuK1x0XHRcdCAgICAgdG90YWxfdmVjcyAtIHVscF9tc2l4LCBtaW4gPT0gMSk7XG4rXHRpZiAocmMpXG4rXHRcdGdvdG8gbXNpeF9zZXR1cF9leGl0O1xuK1xuK1x0dHhfY3AgPSBibnh0X251bV90eF90b19jcChicCwgYnAtXHUwMDNldHhfbnJfcmluZ3MpO1xuK1x0YnAtXHUwMDNlY3BfbnJfcmluZ3MgPSAobWluID09IDEpID9cbitcdFx0XHQgIG1heF90KGludCwgdHhfY3AsIGJwLVx1MDAzZXJ4X25yX3JpbmdzKSA6XG4rXHRcdFx0ICB0eF9jcCArIGJwLVx1MDAzZXJ4X25yX3JpbmdzO1xuK1xuIFx0cmV0dXJuIDA7XG4gXG4gbXNpeF9zZXR1cF9leGl0OlxuQEAgLTExNzkyLDYgKzExNzkyLDkgQEAgc3RhdGljIHZvaWQgYm54dF9pcnFfYWZmaW5pdHlfbm90aWZ5KHN0cnVjdCBpcnFfYWZmaW5pdHlfbm90aWZ5ICpub3RpZnksXG4gXG4gXHRpcnEgPSBjb250YWluZXJfb2Yobm90aWZ5LCBzdHJ1Y3QgYm54dF9pcnEsIGFmZmluaXR5X25vdGlmeSk7XG4gXG4rXHRjcHVtYXNrX2NvcHkoaXJxLVx1MDAzZWJwLVx1MDAzZXJpbmdfY3B1X21hc2tbaXJxLVx1MDAzZXJpbmdfbnJdLCBtYXNrKTtcbitcdHNldF9iaXQoaXJxLVx1MDAzZXJpbmdfbnIsIGlycS1cdTAwM2VicC1cdTAwM2VyaW5nX2FmZmluaXR5X3NldCk7XG4rXG4gI2lmZGVmIENPTkZJR19SRlNfQUNDRUxcbiBcdGlmIChpcnEtXHUwMDNlYnAtXHUwMDNlZGV2LVx1MDAzZXJ4X2NwdV9ybWFwIFx1MDAyNlx1MDAyNiBpcnEtXHUwMDNlcmluZ19uciBcdTAwM2MgaXJxLVx1MDAzZWJwLVx1MDAzZXJ4X25yX3JpbmdzKSB7XG4gXHRcdGludCBlcnI7XG5AQCAtMTE4MDcsOCArMTE4MTAsNiBAQCBzdGF0aWMgdm9pZCBibnh0X2lycV9hZmZpbml0eV9ub3RpZnkoc3RydWN0IGlycV9hZmZpbml0eV9ub3RpZnkgKm5vdGlmeSxcbiBcdGlmICghaXJxLVx1MDAzZWJwLVx1MDAzZXRwaF9tb2RlKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRjcHVtYXNrX2NvcHkoaXJxLVx1MDAzZWNwdV9tYXNrLCBtYXNrKTtcbi1cbiBcdGlmIChpcnEtXHUwMDNlcmluZ19uciBcdTAwM2U9IGlycS1cdTAwM2VicC1cdTAwM2VyeF9ucl9yaW5ncylcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTExODUwLDEwICsxMTg1MSw2IEBAIHN0YXRpYyB2b2lkIGJueHRfcmVnaXN0ZXJfaXJxX25vdGlmaWVyKHN0cnVjdCBibnh0ICpicCwgc3RydWN0IGJueHRfaXJxICppcnEpXG4gXG4gXHRpcnEtXHUwMDNlYnAgPSBicDtcbiBcbi1cdC8qIE5vdGhpbmcgdG8gZG8gaWYgVFBIIGlzIG5vdCBlbmFibGVkICovXG4tXHRpZiAoIWJwLVx1MDAzZXRwaF9tb2RlKVxuLVx0XHRyZXR1cm47XG4tXG4gXHQvKiBSZWdpc3RlciBJUlEgYWZmaW5pdHkgbm90aWZpZXIgKi9cbiBcdG5vdGlmeSA9IFx1MDAyNmlycS1cdTAwM2VhZmZpbml0eV9ub3RpZnk7XG4gXHRub3RpZnktXHUwMDNlaXJxID0gaXJxLVx1MDAzZXZlY3RvcjtcbkBAIC0xMTg2Myw2ICsxMTg2MCw0MSBAQCBzdGF0aWMgdm9pZCBibnh0X3JlZ2lzdGVyX2lycV9ub3RpZmllcihzdHJ1Y3QgYm54dCAqYnAsIHN0cnVjdCBibnh0X2lycSAqaXJxKVxuIFx0aXJxX3NldF9hZmZpbml0eV9ub3RpZmllcihpcnEtXHUwMDNldmVjdG9yLCBub3RpZnkpO1xuIH1cbiBcbitzdGF0aWMgaW50IGJueHRfYWxsb2NfcmluZ19jcHVfbWFza3Moc3RydWN0IGJueHQgKmJwKVxuK3tcbitcdGludCBpO1xuK1xuK1x0YnAtXHUwMDNlcmluZ19jcHVfbWFzayA9IGt6YWxsb2Nfb2JqcygqYnAtXHUwMDNlcmluZ19jcHVfbWFzaywgYnAtXHUwMDNlbWF4X2lycXMpO1xuK1x0aWYgKCFicC1cdTAwM2VyaW5nX2NwdV9tYXNrKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGJwLVx1MDAzZXJpbmdfYWZmaW5pdHlfc2V0ID0gYml0bWFwX3phbGxvYyhicC1cdTAwM2VtYXhfaXJxcywgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWJwLVx1MDAzZXJpbmdfYWZmaW5pdHlfc2V0KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGJwLVx1MDAzZW1heF9pcnFzOyBpKyspXG4rXHRcdGlmICghemFsbG9jX2NwdW1hc2tfdmFyKFx1MDAyNmJwLVx1MDAzZXJpbmdfY3B1X21hc2tbaV0sIEdGUF9LRVJORUwpKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGJueHRfZnJlZV9yaW5nX2NwdV9tYXNrcyhzdHJ1Y3QgYm54dCAqYnApXG4re1xuK1x0aW50IGk7XG4rXG4rXHRpZiAoIWJwLVx1MDAzZXJpbmdfY3B1X21hc2spXG4rXHRcdHJldHVybjtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGJwLVx1MDAzZW1heF9pcnFzOyBpKyspXG4rXHRcdGZyZWVfY3B1bWFza192YXIoYnAtXHUwMDNlcmluZ19jcHVfbWFza1tpXSk7XG4rXG4rXHRiaXRtYXBfZnJlZShicC1cdTAwM2VyaW5nX2FmZmluaXR5X3NldCk7XG4rXHRicC1cdTAwM2VyaW5nX2FmZmluaXR5X3NldCA9IE5VTEw7XG4rXHRrZnJlZShicC1cdTAwM2VyaW5nX2NwdV9tYXNrKTtcbitcdGJwLVx1MDAzZXJpbmdfY3B1X21hc2sgPSBOVUxMO1xuK31cbitcbiBzdGF0aWMgdm9pZCBibnh0X2ZyZWVfaXJxKHN0cnVjdCBibnh0ICpicClcbiB7XG4gXHRzdHJ1Y3QgYm54dF9pcnEgKmlycTtcbkBAIC0xMTg3NywxMyArMTE5MDksNyBAQCBzdGF0aWMgdm9pZCBibnh0X2ZyZWVfaXJxKHN0cnVjdCBibnh0ICpicClcbiBcdFx0aXJxID0gXHUwMDI2YnAtXHUwMDNlaXJxX3RibFttYXBfaWR4XTtcbiBcdFx0aWYgKGlycS1cdTAwM2VyZXF1ZXN0ZWQpIHtcbiBcdFx0XHRibnh0X3JlbGVhc2VfaXJxX25vdGlmaWVyKGlycSk7XG4tXG4tXHRcdFx0aWYgKGlycS1cdTAwM2VoYXZlX2NwdW1hc2spIHtcbi1cdFx0XHRcdGlycV91cGRhdGVfYWZmaW5pdHlfaGludChpcnEtXHUwMDNldmVjdG9yLCBOVUxMKTtcbi1cdFx0XHRcdGZyZWVfY3B1bWFza192YXIoaXJxLVx1MDAzZWNwdV9tYXNrKTtcbi1cdFx0XHRcdGlycS1cdTAwM2VoYXZlX2NwdW1hc2sgPSAwO1xuLVx0XHRcdH1cbi1cbitcdFx0XHRpcnFfdXBkYXRlX2FmZmluaXR5X2hpbnQoaXJxLVx1MDAzZXZlY3RvciwgTlVMTCk7XG4gXHRcdFx0ZnJlZV9pcnEoaXJxLVx1MDAzZXZlY3RvciwgYnAtXHUwMDNlYm5hcGlbaV0pO1xuIFx0XHR9XG4gXG5AQCAtMTE5MjUsOSArMTE5NTEsOSBAQCBzdGF0aWMgaW50IGJueHRfcmVxdWVzdF9pcnEoc3RydWN0IGJueHQgKmJwKVxuIFx0XHRicC1cdTAwM2V0cGhfbW9kZSA9IFBDSV9UUEhfU1RfSVZfTU9ERTtcbiBcbiBcdGZvciAoaSA9IDAsIGogPSAwOyBpIFx1MDAzYyBicC1cdTAwM2VjcF9ucl9yaW5nczsgaSsrKSB7XG4rXHRcdHN0cnVjdCBjcHVtYXNrICpjcHVfbWFzayA9IGJwLVx1MDAzZXJpbmdfY3B1X21hc2tbaV07XG4gXHRcdGludCBtYXBfaWR4ID0gYm54dF9jcF9udW1fdG9faXJxX251bShicCwgaSk7XG4gXHRcdHN0cnVjdCBibnh0X2lycSAqaXJxID0gXHUwMDI2YnAtXHUwMDNlaXJxX3RibFttYXBfaWR4XTtcbi1cdFx0dW5zaWduZWQgaW50IGNwdV9udW07XG4gXHRcdHUxNiB0YWc7XG4gXG4gXHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19SRlNfQUNDRUwpIFx1MDAyNlx1MDAyNlxuQEAgLTExOTQ2LDE5ICsxMTk3MiwyNCBAQCBzdGF0aWMgaW50IGJueHRfcmVxdWVzdF9pcnEoc3RydWN0IGJueHQgKmJwKVxuIFxuIFx0XHRuZXRpZl9uYXBpX3NldF9pcnFfbG9ja2VkKFx1MDAyNmJwLVx1MDAzZWJuYXBpW2ldLVx1MDAzZW5hcGksIGlycS1cdTAwM2V2ZWN0b3IpO1xuIFx0XHRpcnEtXHUwMDNlcmVxdWVzdGVkID0gMTtcbi1cbi1cdFx0aWYgKCF6YWxsb2NfY3B1bWFza192YXIoXHUwMDI2aXJxLVx1MDAzZWNwdV9tYXNrLCBHRlBfS0VSTkVMKSlcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0aXJxLVx1MDAzZWhhdmVfY3B1bWFzayA9IDE7XG4gXHRcdGlycS1cdTAwM2Vtc2l4X25yID0gbWFwX2lkeDtcbiBcdFx0aXJxLVx1MDAzZXJpbmdfbnIgPSBpO1xuLVx0XHRjcHVfbnVtID0gY3B1bWFza19sb2NhbF9zcHJlYWQoaSwgbnVtYV9ub2RlKTtcbi1cdFx0Y3B1bWFza19zZXRfY3B1KGNwdV9udW0sIGlycS1cdTAwM2VjcHVfbWFzayk7XG4rXG4rXHRcdC8qIFJldXNlIHRoZSBtYXNrIHJlY29yZGVkIGJlZm9yZSB0aGUgSVJRcyB3ZXJlIGZyZWVkLiBOb3RoaW5nXG4rXHRcdCAqIHdhcyByZWNvcmRlZCB5ZXQgb24gdGhlIHZlcnkgZmlyc3QgcmVxdWVzdCwgYW5kIHRoZSBtYXNrXG4rXHRcdCAqIG1heSBoYXZlIGdvbmUgc3RhbGUgaWYgdGhlIENQVXMgd2VudCBvZmZsaW5lIGluIGJldHdlZW4uXG4rXHRcdCAqL1xuK1x0XHRpZiAoIXRlc3RfYml0KGksIGJwLVx1MDAzZXJpbmdfYWZmaW5pdHlfc2V0KSB8fFxuK1x0XHQgICAgIWNwdW1hc2tfaW50ZXJzZWN0cyhjcHVfbWFzaywgY3B1X29ubGluZV9tYXNrKSkge1xuK1x0XHRcdGNsZWFyX2JpdChpLCBicC1cdTAwM2VyaW5nX2FmZmluaXR5X3NldCk7XG4rXHRcdFx0Y3B1bWFza19jbGVhcihjcHVfbWFzayk7XG4rXHRcdFx0Y3B1bWFza19zZXRfY3B1KGNwdW1hc2tfbG9jYWxfc3ByZWFkKGksIG51bWFfbm9kZSksXG4rXHRcdFx0XHRcdGNwdV9tYXNrKTtcbitcdFx0fVxuIFxuIFx0XHQvKiBJbml0IFNUIHRhYmxlIGVudHJ5IGlmIHdlIGNhbiBnZXQgdGhlIG1hcHBpbmcgKi9cbiBcdFx0aWYgKCFwY2llX3RwaF9nZXRfY3B1X3N0KGJwLVx1MDAzZXBkZXYsIFRQSF9NRU1fVFlQRV9WTSxcbi1cdFx0XHRcdFx0IGNwdV9udW0sIFx1MDAyNnRhZykpIHtcbitcdFx0XHRcdFx0IGNwdW1hc2tfZmlyc3QoY3B1X21hc2spLCBcdTAwMjZ0YWcpKSB7XG4gXHRcdFx0cGNpZV90cGhfc2V0X3N0X2VudHJ5KGJwLVx1MDAzZXBkZXYsIGlycS1cdTAwM2Vtc2l4X25yLCB0YWcpO1xuIFx0XHRcdGlycS1cdTAwM2V0YWcgPSB0YWc7XG4gXHRcdFx0aXJxLVx1MDAzZW5ld190YWcgPSB0YWc7XG5AQCAtMTE5NjYsMTAgKzExOTk3LDE5IEBAIHN0YXRpYyBpbnQgYm54dF9yZXF1ZXN0X2lycShzdHJ1Y3QgYm54dCAqYnApXG4gXG4gXHRcdGJueHRfcmVnaXN0ZXJfaXJxX25vdGlmaWVyKGJwLCBpcnEpO1xuIFxuLVx0XHRyYyA9IGlycV91cGRhdGVfYWZmaW5pdHlfaGludChpcnEtXHUwMDNldmVjdG9yLCBpcnEtXHUwMDNlY3B1X21hc2spO1xuK1x0XHQvKiBPbmx5IHB1dCB0aGUgSVJRIGJhY2sgd2hlcmUgaXQgd2FzIGNvbmZpZ3VyZWQgdG8gYmUsIG91ciBvd25cbitcdFx0ICogcGxhY2VtZW50IGlzIGp1c3QgYSBoaW50LCB0aGUgY29yZSBzcHJlYWRzIHdpdGhpblxuK1x0XHQgKiBpcnFfZGVmYXVsdF9hZmZpbml0eSB3aGljaCB3ZSBrbm93IG5vdGhpbmcgYWJvdXQuXG4rXHRcdCAqIFNldCBhZnRlciBpbnN0YWxsaW5nIHRoZSBub3RpZmllciwgaWYgd2UgcmFjZSB3aXRoIHRoZSB1c2VyXG4rXHRcdCAqIGl0J3MgYmV0dGVyIHRvIG92ZXJ3cml0ZSB0aGFuIG1pc3MgdGhlIG5vdGlmaWNhdGlvbi5cbitcdFx0ICovXG4rXHRcdGlmICh0ZXN0X2JpdChpLCBicC1cdTAwM2VyaW5nX2FmZmluaXR5X3NldCkpXG4rXHRcdFx0cmMgPSBpcnFfc2V0X2FmZmluaXR5X2FuZF9oaW50KGlycS1cdTAwM2V2ZWN0b3IsIGNwdV9tYXNrKTtcbitcdFx0ZWxzZVxuK1x0XHRcdHJjID0gaXJxX3VwZGF0ZV9hZmZpbml0eV9oaW50KGlycS1cdTAwM2V2ZWN0b3IsIGNwdV9tYXNrKTtcbiBcdFx0aWYgKHJjKSB7XG4gXHRcdFx0bmV0ZGV2X3dhcm4oYnAtXHUwMDNlZGV2LFxuLVx0XHRcdFx0ICAgIFwiVXBkYXRlIGFmZmluaXR5IGhpbnQgZmFpbGVkLCBJUlEgPSAlZFxcblwiLFxuK1x0XHRcdFx0ICAgIFwiU2V0dGluZyBJUlEgYWZmaW5pdHkgZmFpbGVkLCBJUlEgPSAlZFxcblwiLFxuIFx0XHRcdFx0ICAgIGlycS1cdTAwM2V2ZWN0b3IpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtMTY2MTAsNiArMTY2NTAsNyBAQCBzdGF0aWMgdm9pZCBibnh0X3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRibnh0X3NodXRkb3duX3RjKGJwKTtcbiBcbiBcdGJueHRfY2xlYXJfaW50X21vZGUoYnApO1xuK1x0Ym54dF9mcmVlX3JpbmdfY3B1X21hc2tzKGJwKTtcbiBcdGJueHRfaHdybV9mdW5jX2Rydl91bnJndHIoYnApO1xuIFx0Ym54dF9mcmVlX2h3cm1fcmVzb3VyY2VzKGJwKTtcbiBcdGJueHRfaHdtb25fdW5pbml0KGJwKTtcbkBAIC0xNzA0OCw2ICsxNzA4OSwxMSBAQCBzdGF0aWMgaW50IGJueHRfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRicC1cdTAwM2Vtc2dfZW5hYmxlID0gQk5YVF9ERUZfTVNHX0VOQUJMRTtcbiBcdGJueHRfc2V0X21heF9mdW5jX2lycXMoYnAsIG1heF9pcnFzKTtcbiBcbitcdGJwLVx1MDAzZW1heF9pcnFzID0gbWF4X2lycXM7XG4rXHRyYyA9IGJueHRfYWxsb2NfcmluZ19jcHVfbWFza3MoYnApO1xuK1x0aWYgKHJjKVxuK1x0XHRnb3RvIGluaXRfZXJyX2ZyZWU7XG4rXG4gXHRpZiAoYm54dF92Zl9wY2lpZChicC1cdTAwM2Vib2FyZF9pZHgpKVxuIFx0XHRicC1cdTAwM2VmbGFncyB8PSBCTlhUX0ZMQUdfVkY7XG4gXG5AQCAtMTcyOTcsNiArMTczNDMsNyBAQCBzdGF0aWMgaW50IGJueHRfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRicC1cdTAwM2Vyc3NfaW5kaXJfdGJsID0gTlVMTDtcbiBcbiBpbml0X2Vycl9mcmVlOlxuK1x0Ym54dF9mcmVlX3JpbmdfY3B1X21hc2tzKGJwKTtcbiBcdGZyZWVfbmV0ZGV2KGRldik7XG4gXHRyZXR1cm4gcmM7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmhcbmluZGV4IGRjOGVjNWU1NzMzZTkuLmFiODk0ZjhhZGRlZjUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmhcbkBAIC0xMjYxLDkgKzEyNjEsNyBAQCBzdHJ1Y3QgYm54dF9pcnEge1xuIFx0aXJxX2hhbmRsZXJfdFx0aGFuZGxlcjtcbiBcdHVuc2lnbmVkIGludFx0dmVjdG9yO1xuIFx0dThcdFx0cmVxdWVzdGVkOjE7XG4tXHR1OFx0XHRoYXZlX2NwdW1hc2s6MTtcbiBcdGNoYXJcdFx0bmFtZVtJRk5BTVNJWiArIEJOWFRfSVJRX05BTUVfRVhUUkFdO1xuLVx0Y3B1bWFza192YXJfdFx0Y3B1X21hc2s7XG4gXG4gXHRzdHJ1Y3QgYm54dFx0KmJwO1xuIFx0aW50XHRcdG1zaXhfbnI7XG5AQCAtMjQ4Miw2ICsyNDgwLDE1IEBAIHN0cnVjdCBibnh0IHtcbiBcdCBwY2lfY2hhbm5lbF9vZmZsaW5lKChicCktXHUwMDNlcGRldikpXG4gXG4gXHRzdHJ1Y3QgYm54dF9pcnFcdCppcnFfdGJsO1xuK1x0LyogSVJRIGFmZmluaXR5LCBpbmRleGVkIGJ5IGNvbXBsZXRpb24gcmluZy4gS2VwdCBhY3Jvc3MgSVJRXG4rXHQgKiByZWFsbG9jYXRpb24sIHRoZSBNU0ktWCB2ZWN0b3IgaW5kZXggaXMgbm90IHN0YWJsZS5cbitcdCAqL1xuK1x0Y3B1bWFza192YXJfdFx0XHQqcmluZ19jcHVfbWFzaztcbitcdC8qIFJpbmdzIGZvciB3aGljaCB0aGUgbWFzayBhYm92ZSB3YXMgY29uZmlndXJlZCBmcm9tIHRoZSBvdXRzaWRlLFxuK1x0ICogcmF0aGVyIHRoYW4gYmVpbmcgb3VyIG93biBkZWZhdWx0IHBsYWNlbWVudC5cbitcdCAqL1xuK1x0dW5zaWduZWQgbG9uZ1x0XHQqcmluZ19hZmZpbml0eV9zZXQ7XG4rXHRpbnRcdFx0XHRtYXhfaXJxcztcbiBcdGludFx0XHRcdHRvdGFsX2lycXM7XG4gXHRpbnRcdFx0XHR1bHBfbnVtX21zaXhfd2FudDtcbiBcdHU4XHRcdFx0bWFjX2FkZHJbRVRIX0FMRU5dO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6NTQ6MzguODE5NjM3OTExWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQyNDkwNzQzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmc9ZmFsc2U6IEJyb2FkY29tIGJueHQgRHJpdmVyIElSUSBBZmZpbml0eSBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGEgcGF0Y2ggdG91Y2hpbmcgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jYCBhbmQgYGJueHQuaGAsIHdoaWNoIGlzIHRoZSBgYm54dGAgZHJpdmVyLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBob3cgSVJRIGFmZmluaXR5IGlzIGhhbmRsZWQgd2l0aGluIHRoZSBkcml2ZXIsIHNwZWNpZmljYWxseSBob3cgYHJpbmdfY3B1X21hc2tgIGFuZCBgcmluZ19hZmZpbml0eV9zZXRgIGFyZSBtYW5hZ2VkIGFuZCB1c2VkIGluIGBibnh0X2luaXRfb25lYCwgYGJueHRfaXJxX2FmZmluaXR5X25vdGlmeWAsIGFuZCBgYm54dF9yZXF1ZXN0X2lycWAuIEZ1bmRhbWVudGFsbHksIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZTsgaXQgYWx0ZXJzIGhvdyB0aGUgZHJpdmVyIGFzc2lnbnMgYW5kIHJlc3RvcmVzIElSUSBhZmZpbml0eS5cblxuQnV0LCBhbmQgdGhpcyBpcyB0aGUgY3JpdGljYWwgcXVlc3Rpb24sIGlzIHRoaXMgKnJlYWNoYWJsZSogZm9yIGZ1enppbmc/IFdlJ3JlIHR5cGljYWxseSBvcGVyYXRpbmcgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gRG9lcyBRRU1VIGVtdWxhdGUgdGhlIGhhcmR3YXJlIHRoaXMgZHJpdmVyIGlzICpmb3IqPyBJdCdzIEJyb2FkY29tIE5ldFh0cmVtZS1DL0UgMTAvMjUvNDAvNTAgZ2lnYWJpdCBFdGhlcm5ldCBjYXJkcy4gQSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgUUVNVSBkb2Vzbid0IGVtdWxhdGUgdGhlIGBibnh0YCBkZXZpY2UuIEl0IGRvZXMgZW11bGF0ZSBvdGhlciBOSUNzLCBidXQgbm90IHRoaXMgb25lLlxuXG5UaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBzYXkgd2Ugc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBmb3IgXCJDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLi4uIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VXCIuIEFuZCB0aGF0J3MgZXhhY3RseSB3aGF0IHRoaXMgaXM6IGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciAoQnJvYWRjb20pLCBmb3IgYSBzcGVjaWZpYyBQQ0llIE5JQyAoYGJueHRgKSwgYW5kIGl0J3MgKm5vdCogZW11bGF0ZWQgYnkgUUVNVS5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCdzIGVsaW1pbmF0ZSBhbnkgb3RoZXIgcG9zc2libGUgYXR0YWNrIHZlY3RvcnMuIFRoZSBgYm54dF9pbml0X29uZWAgZnVuY3Rpb24gaXMgdGhlIFBDSSBwcm9iZSBmdW5jdGlvbi4gVGhhdCdzIGNhbGxlZCB3aGVuIHRoZSBQQ0kgZGV2aWNlIGlzICpkZXRlY3RlZCouIFdpdGhvdXQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIG9yIGFuIGVtdWxhdG9yLCB0aGlzIGNvZGUgcGF0aCBpcyBzaW1wbHkgdW5yZWFjaGFibGUuXG5cblNvLCB0aGUgY29uY2x1c2lvbiBpcyBjbGVhci4gV2Ugc2hvdWxkIHVzZSBgc2V0LXJlc3VsdHNgIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY1OCwiT3V0cHV0VG9rZW5zIjoxMDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDo1NDo0OC4yNDQ1NDc2ODZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCcm9hZGNvbSBOZXRYdHJlbWUtQy9FIChibnh0KSBFdGhlcm5ldCBkcml2ZXIgdG8gaW1wcm92ZSBJUlEgYWZmaW5pdHkgdHJhY2tpbmcgYWNyb3NzIElSUSByZWFsbG9jYXRpb25zLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBkcml2ZXIgZm9yIHBoeXNpY2FsIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCcm9hZGNvbSBOZXRYdHJlbWUtQy9FIChibnh0KSBFdGhlcm5ldCBkcml2ZXIgdG8gaW1wcm92ZSBJUlEgYWZmaW5pdHkgdHJhY2tpbmcgYWNyb3NzIElSUSByZWFsbG9jYXRpb25zLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBkcml2ZXIgZm9yIHBoeXNpY2FsIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjU0OjQ4LjI0NDU2OTM1NloiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowl7dxp[1] Phase: Running StartedAt: 2026-08-13 20:55:12 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl7dxp[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-13 20:55:12 +0000 UTC FinishedAt: 2026-08-13 20:55:19 +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,}