Name: series-workflowcgjk2 Phase: Failed StartedAt: 2026-06-22 11:48:04 +0000 UTC FinishedAt: 2026-06-22 11:56:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgjk2[0] Phase: Succeeded StartedAt: 2026-06-22 11:48:04 +0000 UTC FinishedAt: 2026-06-22 11:56:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgjk2[0].run-triage Phase: Succeeded StartedAt: 2026-06-22 11:48:04 +0000 UTC FinishedAt: 2026-06-22 11:56:07 +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+CgkJCTx0ZD4yMDI2LzA2LzIyIDExOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIExpbnV4IERyaXZlciAoaWNlKS4gVGhpcyBkcml2ZXIgaXMgZm9yIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgYW5kIGxhY2tzIHNvZnR3YXJlIGVtdWxhdGlvbiBpbiBRRU1VIG9yIHRoZSBMaW51eCBrZXJuZWwuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIHRlc3QgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDExOjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2U5MzJhYjZhZThjOTlhZmJjMzNjMTk0MGVlMzNlMWI5MDlhZjdlN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDIyIDExOjU1OjI4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmNcbmluZGV4IDJlNGYwOTY5MDM1Zjc3Li40ODI3M2VmOWY2OWRjOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guY1xuQEAgLTY2LDggJiM0Mzs2NiwxMCBAQCBzdGF0aWMgaW50IGljZV9lc3dpdGNoX3NldHVwX2VudihzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdGljZV9jZmdfZGZsdF92c2kodXBsaW5rX3ZzaS1cdTAwM2Vwb3J0X2luZm8sIHVwbGlua192c2ktXHUwMDNlaWR4LCBmYWxzZSxcbiBcdFx0XHQgSUNFX0ZMVFJfVFgpO1xuIGVycl9kZWZfdHg6XG4tXHRpY2VfY2ZnX2RmbHRfdnNpKHVwbGlua192c2ktXHUwMDNlcG9ydF9pbmZvLCB1cGxpbmtfdnNpLVx1MDAzZWlkeCwgZmFsc2UsXG4tXHRcdFx0IElDRV9GTFRSX1JYKTtcbiYjNDM7XHQvKiBrZWVwIHRoZSBSeCBERkxUIHJ1bGUgaWYgdGhlIHVwbGluayBpcyBwcm9taXNjdW91cyAoc2VlIHJlbGVhc2VfZW52KSAqL1xuJiM0MztcdGlmICghKHVwbGlua192c2ktXHUwMDNlbmV0ZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfUFJPTUlTQykpXG4mIzQzO1x0XHRpY2VfY2ZnX2RmbHRfdnNpKHVwbGlua192c2ktXHUwMDNlcG9ydF9pbmZvLCB1cGxpbmtfdnNpLVx1MDAzZWlkeCxcbiYjNDM7XHRcdFx0XHQgZmFsc2UsIElDRV9GTFRSX1JYKTtcbiBlcnJfZGVmX3J4OlxuIFx0aWNlX3ZzaV9kZWxfdmxhbl96ZXJvKHVwbGlua192c2kpO1xuIGVycl92bGFuX3plcm86XG5AQCAtMjc4LDggJiM0MzsyODAsMTYgQEAgc3RhdGljIHZvaWQgaWNlX2Vzd2l0Y2hfcmVsZWFzZV9lbnYoc3RydWN0IGljZV9wZiAqcGYpXG4gXHR2bGFuX29wcy1cdTAwM2VlbmFfcnhfZmlsdGVyaW5nKHVwbGlua192c2kpO1xuIFx0aWNlX2NmZ19kZmx0X3ZzaSh1cGxpbmtfdnNpLVx1MDAzZXBvcnRfaW5mbywgdXBsaW5rX3ZzaS1cdTAwM2VpZHgsIGZhbHNlLFxuIFx0XHRcdCBJQ0VfRkxUUl9UWCk7XG4tXHRpY2VfY2ZnX2RmbHRfdnNpKHVwbGlua192c2ktXHUwMDNlcG9ydF9pbmZvLCB1cGxpbmtfdnNpLVx1MDAzZWlkeCwgZmFsc2UsXG4tXHRcdFx0IElDRV9GTFRSX1JYKTtcbiYjNDM7XG4mIzQzO1x0LyogS2VlcCB0aGUgUnggREZMVCBydWxlIGlmIHRoZSB1cGxpbmsgaXMgcHJvbWlzY3VvdXM7IGl0IG11c3Qgb3V0bGl2ZVxuJiM0MztcdCAqIHRoZSBzZXNzaW9uLiBUZXN0IHRoZSBsaXZlIG5ldGRldi1cdTAwM2VmbGFncywgdGhlIHNhbWUgdmFsdWVcbiYjNDM7XHQgKiBlbmFfcnhfZmlsdGVyaW5nKCkgLVx1MDAzZSBpY2VfY2ZnX3ZsYW5fcHJ1bmluZygpIGFib3ZlIGtleXMgaXRzIGRlY2lzaW9uXG4mIzQzO1x0ICogb24sIHNvIHRoZSBwcmVzZXJ2ZWQgREZMVCBydWxlIGFuZCB0aGUgcHJ1bmluZyBzdGF0ZSBzdGF5IGNvbnNpc3RlbnQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCEodXBsaW5rX3ZzaS1cdTAwM2VuZXRkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9QUk9NSVNDKSlcbiYjNDM7XHRcdGljZV9jZmdfZGZsdF92c2kodXBsaW5rX3ZzaS1cdTAwM2Vwb3J0X2luZm8sIHVwbGlua192c2ktXHUwMDNlaWR4LFxuJiM0MztcdFx0XHRcdCBmYWxzZSwgSUNFX0ZMVFJfUlgpO1xuJiM0MztcbiBcdGljZV9mbHRyX2FkZF9tYWNfYW5kX2Jyb2FkY2FzdCh1cGxpbmtfdnNpLFxuIFx0XHRcdFx0ICAgICAgIHVwbGlua192c2ktXHUwMDNlcG9ydF9pbmZvLVx1MDAzZW1hYy5wZXJtX2FkZHIsXG4gXHRcdFx0XHQgICAgICAgSUNFX0ZXRF9UT19WU0kpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbmluZGV4IGUyZmJlMTExZjg0OTY5Li5lZmIxZjUzNmRlNmM3YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xuQEAgLTI3NCw3ICYjNDM7Mjc0LDggQEAgc3RhdGljIGludCBpY2Vfc2V0X3Byb21pc2Moc3RydWN0IGljZV92c2kgKnZzaSwgdTggcHJvbWlzY19tKVxuIFx0aWYgKHZzaS1cdTAwM2V0eXBlICE9IElDRV9WU0lfUEYpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKGljZV92c2lfaGFzX25vbl96ZXJvX3ZsYW5zKHZzaSkpIHtcbiYjNDM7XHQvKiBza2lwIHBlci1WSUQgZXhwYW5zaW9uOyB0aGUgREZMVCBSeCBydWxlIGFscmVhZHkgY292ZXJzIGV2ZXJ5IFZJRCAqL1xuJiM0MztcdGlmIChpY2VfdnNpX2hhc19ub25femVyb192bGFucyh2c2kpIFx1MDAyNlx1MDAyNiAhaWNlX2lzX3ZzaV9kZmx0X3ZzaSh2c2kpKSB7XG4gXHRcdHByb21pc2NfbSB8PSAoSUNFX1BST01JU0NfVkxBTl9SWCB8IElDRV9QUk9NSVNDX1ZMQU5fVFgpO1xuIFx0XHRzdGF0dXMgPSBpY2VfZmx0cl9zZXRfdmxhbl92c2lfcHJvbWlzYyhcdTAwMjZ2c2ktXHUwMDNlYmFjay1cdTAwM2VodywgdnNpLFxuIFx0XHRcdFx0XHRcdCAgICAgICBwcm9taXNjX20pO1xuQEAgLTMwNCw5ICYjNDM7MzA1LDE5IEBAIHN0YXRpYyBpbnQgaWNlX2NsZWFyX3Byb21pc2Moc3RydWN0IGljZV92c2kgKnZzaSwgdTggcHJvbWlzY19tKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGlmIChpY2VfdnNpX2hhc19ub25femVyb192bGFucyh2c2kpKSB7XG4tXHRcdHByb21pc2NfbSB8PSAoSUNFX1BST01JU0NfVkxBTl9SWCB8IElDRV9QUk9NSVNDX1ZMQU5fVFgpO1xuJiM0MztcdFx0aW50IHZpZDBfc3RhdHVzO1xuJiM0MztcbiYjNDM7XHRcdC8qIHNldCB0aW1lIHVzZWQgZWl0aGVyIHJlY2lwZSAocGVyLVZJRCBQUk9NSVNDX1ZMQU4sIG9yIHZpZD0wXG4mIzQzO1x0XHQgKiBQUk9NSVNDIHZpYSB0aGUgaWNlX3NldF9wcm9taXNjKCkgZWxzZSBicmFuY2gpLCBzbyBjbGVhclxuJiM0MztcdFx0ICogYm90aDsgY2xlYXJpbmcgYW4gYWJzZW50IHJ1bGUgc3VjY2VlZHNcbiYjNDM7XHRcdCAqL1xuIFx0XHRzdGF0dXMgPSBpY2VfZmx0cl9jbGVhcl92bGFuX3ZzaV9wcm9taXNjKFx1MDAyNnZzaS1cdTAwM2ViYWNrLVx1MDAzZWh3LCB2c2ksXG4tXHRcdFx0XHRcdFx0XHQgcHJvbWlzY19tKTtcbiYjNDM7XHRcdFx0XHRwcm9taXNjX20gfCBJQ0VfUFJPTUlTQ19WTEFOX1JYIHxcbiYjNDM7XHRcdFx0XHRJQ0VfUFJPTUlTQ19WTEFOX1RYKTtcbiYjNDM7XHRcdHZpZDBfc3RhdHVzID0gaWNlX2ZsdHJfY2xlYXJfdnNpX3Byb21pc2MoXHUwMDI2dnNpLVx1MDAzZWJhY2stXHUwMDNlaHcsXG4mIzQzO1x0XHRcdFx0XHRcdFx0IHZzaS1cdTAwM2VpZHgsIHByb21pc2NfbSwgMCk7XG4mIzQzO1x0XHRpZiAoIXN0YXR1cylcbiYjNDM7XHRcdFx0c3RhdHVzID0gdmlkMF9zdGF0dXM7XG4gXHR9IGVsc2Uge1xuIFx0XHRzdGF0dXMgPSBpY2VfZmx0cl9jbGVhcl92c2lfcHJvbWlzYyhcdTAwMjZ2c2ktXHUwMDNlYmFjay1cdTAwM2VodywgdnNpLVx1MDAzZWlkeCxcbiBcdFx0XHRcdFx0XHQgICAgcHJvbWlzY19tLCAwKTtcbkBAIC0zMTcsNiAmIzQzOzMyOCw0OSBAQCBzdGF0aWMgaW50IGljZV9jbGVhcl9wcm9taXNjKHN0cnVjdCBpY2VfdnNpICp2c2ksIHU4IHByb21pc2NfbSlcbiBcdHJldHVybiBzdGF0dXM7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogaWNlX3ZzaV9leGl0X2RmbHRfcHJvbWlzYyAtIGRyb3AgdGhlIGRlZmF1bHQgVlNJIFJ4IHJ1bGUgb24gcHJvbWlzYyBvZmZcbiYjNDM7ICogQHZzaTogdGhlIFZTSSBsZWF2aW5nIHByb21pc2N1b3VzIG1vZGVcbiYjNDM7ICpcbiYjNDM7ICogRm9yIGFuIElGRl9BTExNVUxUSSBWU0kgd2l0aCBWTEFOcyB0aGUgcGVyLVZJRCBtdWx0aWNhc3QgcnVsZXMgYXJlXG4mIzQzOyAqIHJlaW5zdGF0ZWQgYmVmb3JlIHRoZSBkZWZhdWx0IHJ1bGUgaXMgY2xlYXJlZCBzbyBjb3ZlcmFnZSBuZXZlciBsYXBzZXM7XG4mIzQzOyAqIHRoZSB0aGVuIHJlZHVuZGFudCB2aWQ9MCBydWxlIGlzIGRyb3BwZWQgYmVzdC1lZmZvcnQuIFRoZSBjYWxsZWVzIGxvZ1xuJiM0MzsgKiB0aGVpciBvd24gZmFpbHVyZXMsIHNvIGVycm9yIHJldHVybnMgYXJlIG5vdCByZS1sb2dnZWQgaGVyZS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGVycm9yIHdpdGggdGhlIGRlZmF1bHQgcnVsZSBsZWZ0IGluIHBsYWNlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBpY2VfdnNpX2V4aXRfZGZsdF9wcm9taXNjKHN0cnVjdCBpY2VfdnNpICp2c2kpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWNlX3ZzaV92bGFuX29wcyAqdmxhbl9vcHMgPSBpY2VfZ2V0X2NvbXBhdF92c2lfdmxhbl9vcHModnNpKTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdnNpLVx1MDAzZW5ldGRldjtcbiYjNDM7XHRzdHJ1Y3QgaWNlX2h3ICpodyA9IFx1MDAyNnZzaS1cdTAwM2ViYWNrLVx1MDAzZWh3O1xuJiM0MztcdGJvb2wgcmVzdG9yZV9tYztcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRyZXN0b3JlX21jID0gKHZzaS1cdTAwM2VjdXJyZW50X25ldGRldl9mbGFncyBcdTAwMjYgSUZGX0FMTE1VTFRJKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAgaWNlX3ZzaV9oYXNfbm9uX3plcm9fdmxhbnModnNpKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlc3RvcmVfbWMpIHtcbiYjNDM7XHRcdGVyciA9IGljZV9mbHRyX3NldF92bGFuX3ZzaV9wcm9taXNjKGh3LCB2c2ksXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBJQ0VfTUNBU1RfVkxBTl9QUk9NSVNDX0JJVFMpO1xuJiM0MztcdFx0aWYgKGVyciBcdTAwMjZcdTAwMjYgZXJyICE9IC1FRVhJU1QpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBpY2VfY2xlYXJfZGZsdF92c2kodnNpKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKG5ldGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKVxuJiM0MztcdFx0dmxhbl9vcHMtXHUwMDNlZW5hX3J4X2ZpbHRlcmluZyh2c2kpO1xuJiM0MztcbiYjNDM7XHRpZiAocmVzdG9yZV9tYylcbiYjNDM7XHRcdGljZV9mbHRyX2NsZWFyX3ZzaV9wcm9taXNjKGh3LCB2c2ktXHUwMDNlaWR4LCBJQ0VfTUNBU1RfUFJPTUlTQ19CSVRTLFxuJiM0MztcdFx0XHRcdFx0ICAgMCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGljZV92c2lfc3luY19mbHRyIC0gVXBkYXRlIHRoZSBWU0kgZmlsdGVyIGxpc3QgdG8gdGhlIEhXXG4gICogQHZzaTogcHRyIHRvIHRoZSBWU0lcbkBAIC00NDIsMTcgJiM0Mzs0OTYsMTIgQEAgc3RhdGljIGludCBpY2VfdnNpX3N5bmNfZmx0cihzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdC8qIENsZWFyIFJ4IGZpbHRlciB0byByZW1vdmUgdHJhZmZpYyBmcm9tIHdpcmUgKi9cbiBcdFx0XHRpZiAoaWNlX2lzX3ZzaV9kZmx0X3ZzaSh2c2kpKSB7XG4tXHRcdFx0XHRlcnIgPSBpY2VfY2xlYXJfZGZsdF92c2kodnNpKTtcbiYjNDM7XHRcdFx0XHRlcnIgPSBpY2VfdnNpX2V4aXRfZGZsdF9wcm9taXNjKHZzaSk7XG4gXHRcdFx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDtFcnJvciAlZCBjbGVhcmluZyBkZWZhdWx0IFZTSSAlaSBSeCBydWxlXFxuXCYjMzQ7LFxuLVx0XHRcdFx0XHRcdCAgIGVyciwgdnNpLVx1MDAzZXZzaV9udW0pO1xuIFx0XHRcdFx0XHR2c2ktXHUwMDNlY3VycmVudF9uZXRkZXZfZmxhZ3MgfD1cbiBcdFx0XHRcdFx0XHRJRkZfUFJPTUlTQztcbiBcdFx0XHRcdFx0Z290byBvdXRfcHJvbWlzYztcbiBcdFx0XHRcdH1cbi1cdFx0XHRcdGlmICh2c2ktXHUwMDNlbmV0ZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNlxuLVx0XHRcdFx0ICAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUilcbi1cdFx0XHRcdFx0dmxhbl9vcHMtXHUwMDNlZW5hX3J4X2ZpbHRlcmluZyh2c2kpO1xuIFx0XHRcdH1cbiBcbiBcdFx0XHQvKiBkaXNhYmxlIGFsbG11bHRpIGhlcmUsIGJ1dCBvbmx5IGlmIGFsbG11bHRpIGlzIG5vdFxuQEAgLTM2NzUsMTAgJiM0MzszNzI0LDkgQEAgaW50IGljZV92bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgX19iZTE2IHByb3RvLCB1MTYgdmlkKVxuIFx0d2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoSUNFX0NGR19CVVNZLCB2c2ktXHUwMDNlc3RhdGUpKVxuIFx0XHR1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7XG4gXG4tXHQvKiBBZGQgbXVsdGljYXN0IHByb21pc2MgcnVsZSBmb3IgdGhlIFZMQU4gSUQgdG8gYmUgYWRkZWQgaWZcbi1cdCAqIGFsbC1tdWx0aWNhc3QgaXMgY3VycmVudGx5IGVuYWJsZWQuXG4tXHQgKi9cbi1cdGlmICh2c2ktXHUwMDNlY3VycmVudF9uZXRkZXZfZmxhZ3MgXHUwMDI2IElGRl9BTExNVUxUSSkge1xuJiM0MztcdC8qIHNraXAgdGhlIHBlci1WSUQgcnVsZSB3aGVuIHRoZSBERkxUIFJ4IHJ1bGUgYWxyZWFkeSBjb3ZlcnMgdGhpcyBWSUQgKi9cbiYjNDM7XHRpZiAoKHZzaS1cdTAwM2VjdXJyZW50X25ldGRldl9mbGFncyBcdTAwMjYgSUZGX0FMTE1VTFRJKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIWljZV9pc192c2lfZGZsdF92c2kodnNpKSkge1xuIFx0XHRyZXQgPSBpY2VfZmx0cl9zZXRfdnNpX3Byb21pc2MoXHUwMDI2dnNpLVx1MDAzZWJhY2stXHUwMDNlaHcsIHZzaS1cdTAwM2VpZHgsXG4gXHRcdFx0XHRcdCAgICAgICBJQ0VfTUNBU1RfVkxBTl9QUk9NSVNDX0JJVFMsXG4gXHRcdFx0XHRcdCAgICAgICB2aWQpO1xuQEAgLTM2OTYsMTEgJiM0MzszNzQ0LDEyIEBAIGludCBpY2Vfdmxhbl9yeF9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIF9fYmUxNiBwcm90bywgdTE2IHZpZClcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gZmluaXNoO1xuIFxuLVx0LyogSWYgYWxsLW11bHRpY2FzdCBpcyBjdXJyZW50bHkgZW5hYmxlZCBhbmQgdGhpcyBWTEFOIElEIGlzIG9ubHkgb25lXG4tXHQgKiBiZXNpZGVzIFZMQU4tMCB3ZSBoYXZlIHRvIHVwZGF0ZSBsb29rLXVwIHR5cGUgb2YgbXVsdGljYXN0IHByb21pc2Ncbi1cdCAqIHJ1bGUgZm9yIFZMQU4tMCBmcm9tIElDRV9TV19MS1VQX1BST01JU0MgdG8gSUNFX1NXX0xLVVBfUFJPTUlTQ19WTEFOLlxuJiM0MztcdC8qIE9uIHRoZSBmaXJzdCBub24temVybyBWTEFOLCBwcm9tb3RlIHRoZSBWTEFOLTAgbXVsdGljYXN0IHByb21pc2NcbiYjNDM7XHQgKiBydWxlIGZyb20gSUNFX1NXX0xLVVBfUFJPTUlTQyB0byBJQ0VfU1dfTEtVUF9QUk9NSVNDX1ZMQU4uIFNraXAgd2hlblxuJiM0MztcdCAqIHRoZSBERkxUIFJ4IHJ1bGUgaXMgaW5zdGFsbGVkOyBpdCBhbHJlYWR5IGNvdmVycyBldmVyeSBWSUQuXG4gXHQgKi9cbiBcdGlmICgodnNpLVx1MDAzZWN1cnJlbnRfbmV0ZGV2X2ZsYWdzIFx1MDAyNiBJRkZfQUxMTVVMVEkpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhaWNlX2lzX3ZzaV9kZmx0X3ZzaSh2c2kpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGljZV92c2lfbnVtX25vbl96ZXJvX3ZsYW5zKHZzaSkgPT0gMSkge1xuIFx0XHRpY2VfZmx0cl9jbGVhcl92c2lfcHJvbWlzYyhcdTAwMjZ2c2ktXHUwMDNlYmFjay1cdTAwM2VodywgdnNpLVx1MDAzZWlkeCxcbiBcdFx0XHRcdFx0ICAgSUNFX01DQVNUX1BST01JU0NfQklUUywgMCk7XG5AQCAtMzc2MywxMSAmIzQzOzM4MTIsMTIgQEAgaW50IGljZV92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIF9fYmUxNiBwcm90bywgdTE2IHZpZClcbiBcdFx0XHRcdFx0ICAgSUNFX01DQVNUX1ZMQU5fUFJPTUlTQ19CSVRTLCB2aWQpO1xuIFxuIFx0aWYgKCFpY2VfdnNpX2hhc19ub25femVyb192bGFucyh2c2kpKSB7XG4tXHRcdC8qIFVwZGF0ZSBsb29rLXVwIHR5cGUgb2YgbXVsdGljYXN0IHByb21pc2MgcnVsZSBmb3IgVkxBTiAwXG4tXHRcdCAqIGZyb20gSUNFX1NXX0xLVVBfUFJPTUlTQ19WTEFOIHRvIElDRV9TV19MS1VQX1BST01JU0Mgd2hlblxuLVx0XHQgKiBhbGwtbXVsdGljYXN0IGlzIGVuYWJsZWQgYW5kIFZMQU4gMCBpcyB0aGUgb25seSBWTEFOIHJ1bGUuXG4mIzQzO1x0XHQvKiBMYXN0IG5vbi16ZXJvIFZMQU4gZ29uZTogZGVtb3RlIHRoZSBWTEFOLTAgbXVsdGljYXN0IHByb21pc2NcbiYjNDM7XHRcdCAqIHJ1bGUgYmFjayB0byBJQ0VfU1dfTEtVUF9QUk9NSVNDLiBTa2lwIHdoZW4gdGhlIERGTFQgUnggcnVsZVxuJiM0MztcdFx0ICogaXMgaW5zdGFsbGVkOyBubyByZWNpcGUgc3dhcCBpcyBuZWVkZWQuXG4gXHRcdCAqL1xuLVx0XHRpZiAodnNpLVx1MDAzZWN1cnJlbnRfbmV0ZGV2X2ZsYWdzIFx1MDAyNiBJRkZfQUxMTVVMVEkpIHtcbiYjNDM7XHRcdGlmICgodnNpLVx1MDAzZWN1cnJlbnRfbmV0ZGV2X2ZsYWdzIFx1MDAyNiBJRkZfQUxMTVVMVEkpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICFpY2VfaXNfdnNpX2RmbHRfdnNpKHZzaSkpIHtcbiBcdFx0XHRpY2VfZmx0cl9jbGVhcl92c2lfcHJvbWlzYyhcdTAwMjZ2c2ktXHUwMDNlYmFjay1cdTAwM2VodywgdnNpLVx1MDAzZWlkeCxcbiBcdFx0XHRcdFx0XHQgICBJQ0VfTUNBU1RfVkxBTl9QUk9NSVNDX0JJVFMsXG4gXHRcdFx0XHRcdFx0ICAgMCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTE6NTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgTGludXggRHJpdmVyIChpY2UpLiBUaGlzIGRyaXZlciBpcyBmb3IgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBhbmQgbGFja3Mgc29mdHdhcmUgZW11bGF0aW9uIGluIFFFTVUgb3IgdGhlIExpbnV4IGtlcm5lbC4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDdlOTMyYWI2YWU4Yzk5YWZiYzMzYzE5NDBlZTMzZTFiOTA5YWY3ZTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1biAyMiAxMTo1NToyOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmMKaW5kZXggMmU0ZjA5NjkwMzVmNzcuLjQ4MjczZWY5ZjY5ZGM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guYwpAQCAtNjYsOCAmIzQzOzY2LDEwIEBAIHN0YXRpYyBpbnQgaWNlX2Vzd2l0Y2hfc2V0dXBfZW52KHN0cnVjdCBpY2VfcGYgKnBmKQogCWljZV9jZmdfZGZsdF92c2kodXBsaW5rX3ZzaS0mZ3Q7cG9ydF9pbmZvLCB1cGxpbmtfdnNpLSZndDtpZHgsIGZhbHNlLAogCQkJIElDRV9GTFRSX1RYKTsKIGVycl9kZWZfdHg6Ci0JaWNlX2NmZ19kZmx0X3ZzaSh1cGxpbmtfdnNpLSZndDtwb3J0X2luZm8sIHVwbGlua192c2ktJmd0O2lkeCwgZmFsc2UsCi0JCQkgSUNFX0ZMVFJfUlgpOwomIzQzOwkvKiBrZWVwIHRoZSBSeCBERkxUIHJ1bGUgaWYgdGhlIHVwbGluayBpcyBwcm9taXNjdW91cyAoc2VlIHJlbGVhc2VfZW52KSAqLwomIzQzOwlpZiAoISh1cGxpbmtfdnNpLSZndDtuZXRkZXYtJmd0O2ZsYWdzICZhbXA7IElGRl9QUk9NSVNDKSkKJiM0MzsJCWljZV9jZmdfZGZsdF92c2kodXBsaW5rX3ZzaS0mZ3Q7cG9ydF9pbmZvLCB1cGxpbmtfdnNpLSZndDtpZHgsCiYjNDM7CQkJCSBmYWxzZSwgSUNFX0ZMVFJfUlgpOwogZXJyX2RlZl9yeDoKIAlpY2VfdnNpX2RlbF92bGFuX3plcm8odXBsaW5rX3ZzaSk7CiBlcnJfdmxhbl96ZXJvOgpAQCAtMjc4LDggJiM0MzsyODAsMTYgQEAgc3RhdGljIHZvaWQgaWNlX2Vzd2l0Y2hfcmVsZWFzZV9lbnYoc3RydWN0IGljZV9wZiAqcGYpCiAJdmxhbl9vcHMtJmd0O2VuYV9yeF9maWx0ZXJpbmcodXBsaW5rX3ZzaSk7CiAJaWNlX2NmZ19kZmx0X3ZzaSh1cGxpbmtfdnNpLSZndDtwb3J0X2luZm8sIHVwbGlua192c2ktJmd0O2lkeCwgZmFsc2UsCiAJCQkgSUNFX0ZMVFJfVFgpOwotCWljZV9jZmdfZGZsdF92c2kodXBsaW5rX3ZzaS0mZ3Q7cG9ydF9pbmZvLCB1cGxpbmtfdnNpLSZndDtpZHgsIGZhbHNlLAotCQkJIElDRV9GTFRSX1JYKTsKJiM0MzsKJiM0MzsJLyogS2VlcCB0aGUgUnggREZMVCBydWxlIGlmIHRoZSB1cGxpbmsgaXMgcHJvbWlzY3VvdXM7IGl0IG11c3Qgb3V0bGl2ZQomIzQzOwkgKiB0aGUgc2Vzc2lvbi4gVGVzdCB0aGUgbGl2ZSBuZXRkZXYtJmd0O2ZsYWdzLCB0aGUgc2FtZSB2YWx1ZQomIzQzOwkgKiBlbmFfcnhfZmlsdGVyaW5nKCkgLSZndDsgaWNlX2NmZ192bGFuX3BydW5pbmcoKSBhYm92ZSBrZXlzIGl0cyBkZWNpc2lvbgomIzQzOwkgKiBvbiwgc28gdGhlIHByZXNlcnZlZCBERkxUIHJ1bGUgYW5kIHRoZSBwcnVuaW5nIHN0YXRlIHN0YXkgY29uc2lzdGVudC4KJiM0MzsJICovCiYjNDM7CWlmICghKHVwbGlua192c2ktJmd0O25ldGRldi0mZ3Q7ZmxhZ3MgJmFtcDsgSUZGX1BST01JU0MpKQomIzQzOwkJaWNlX2NmZ19kZmx0X3ZzaSh1cGxpbmtfdnNpLSZndDtwb3J0X2luZm8sIHVwbGlua192c2ktJmd0O2lkeCwKJiM0MzsJCQkJIGZhbHNlLCBJQ0VfRkxUUl9SWCk7CiYjNDM7CiAJaWNlX2ZsdHJfYWRkX21hY19hbmRfYnJvYWRjYXN0KHVwbGlua192c2ksCiAJCQkJICAgICAgIHVwbGlua192c2ktJmd0O3BvcnRfaW5mby0mZ3Q7bWFjLnBlcm1fYWRkciwKIAkJCQkgICAgICAgSUNFX0ZXRF9UT19WU0kpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYwppbmRleCBlMmZiZTExMWY4NDk2OS4uZWZiMWY1MzZkZTZjN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jCkBAIC0yNzQsNyAmIzQzOzI3NCw4IEBAIHN0YXRpYyBpbnQgaWNlX3NldF9wcm9taXNjKHN0cnVjdCBpY2VfdnNpICp2c2ksIHU4IHByb21pc2NfbSkKIAlpZiAodnNpLSZndDt0eXBlICE9IElDRV9WU0lfUEYpCiAJCXJldHVybiAwOwogCi0JaWYgKGljZV92c2lfaGFzX25vbl96ZXJvX3ZsYW5zKHZzaSkpIHsKJiM0MzsJLyogc2tpcCBwZXItVklEIGV4cGFuc2lvbjsgdGhlIERGTFQgUnggcnVsZSBhbHJlYWR5IGNvdmVycyBldmVyeSBWSUQgKi8KJiM0MzsJaWYgKGljZV92c2lfaGFzX25vbl96ZXJvX3ZsYW5zKHZzaSkgJmFtcDsmYW1wOyAhaWNlX2lzX3ZzaV9kZmx0X3ZzaSh2c2kpKSB7CiAJCXByb21pc2NfbSB8PSAoSUNFX1BST01JU0NfVkxBTl9SWCB8IElDRV9QUk9NSVNDX1ZMQU5fVFgpOwogCQlzdGF0dXMgPSBpY2VfZmx0cl9zZXRfdmxhbl92c2lfcHJvbWlzYygmYW1wO3ZzaS0mZ3Q7YmFjay0mZ3Q7aHcsIHZzaSwKIAkJCQkJCSAgICAgICBwcm9taXNjX20pOwpAQCAtMzA0LDkgJiM0MzszMDUsMTkgQEAgc3RhdGljIGludCBpY2VfY2xlYXJfcHJvbWlzYyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1OCBwcm9taXNjX20pCiAJCXJldHVybiAwOwogCiAJaWYgKGljZV92c2lfaGFzX25vbl96ZXJvX3ZsYW5zKHZzaSkpIHsKLQkJcHJvbWlzY19tIHw9IChJQ0VfUFJPTUlTQ19WTEFOX1JYIHwgSUNFX1BST01JU0NfVkxBTl9UWCk7CiYjNDM7CQlpbnQgdmlkMF9zdGF0dXM7CiYjNDM7CiYjNDM7CQkvKiBzZXQgdGltZSB1c2VkIGVpdGhlciByZWNpcGUgKHBlci1WSUQgUFJPTUlTQ19WTEFOLCBvciB2aWQ9MAomIzQzOwkJICogUFJPTUlTQyB2aWEgdGhlIGljZV9zZXRfcHJvbWlzYygpIGVsc2UgYnJhbmNoKSwgc28gY2xlYXIKJiM0MzsJCSAqIGJvdGg7IGNsZWFyaW5nIGFuIGFic2VudCBydWxlIHN1Y2NlZWRzCiYjNDM7CQkgKi8KIAkJc3RhdHVzID0gaWNlX2ZsdHJfY2xlYXJfdmxhbl92c2lfcHJvbWlzYygmYW1wO3ZzaS0mZ3Q7YmFjay0mZ3Q7aHcsIHZzaSwKLQkJCQkJCQkgcHJvbWlzY19tKTsKJiM0MzsJCQkJcHJvbWlzY19tIHwgSUNFX1BST01JU0NfVkxBTl9SWCB8CiYjNDM7CQkJCUlDRV9QUk9NSVNDX1ZMQU5fVFgpOwomIzQzOwkJdmlkMF9zdGF0dXMgPSBpY2VfZmx0cl9jbGVhcl92c2lfcHJvbWlzYygmYW1wO3ZzaS0mZ3Q7YmFjay0mZ3Q7aHcsCiYjNDM7CQkJCQkJCSB2c2ktJmd0O2lkeCwgcHJvbWlzY19tLCAwKTsKJiM0MzsJCWlmICghc3RhdHVzKQomIzQzOwkJCXN0YXR1cyA9IHZpZDBfc3RhdHVzOwogCX0gZWxzZSB7CiAJCXN0YXR1cyA9IGljZV9mbHRyX2NsZWFyX3ZzaV9wcm9taXNjKCZhbXA7dnNpLSZndDtiYWNrLSZndDtodywgdnNpLSZndDtpZHgsCiAJCQkJCQkgICAgcHJvbWlzY19tLCAwKTsKQEAgLTMxNyw2ICYjNDM7MzI4LDQ5IEBAIHN0YXRpYyBpbnQgaWNlX2NsZWFyX3Byb21pc2Moc3RydWN0IGljZV92c2kgKnZzaSwgdTggcHJvbWlzY19tKQogCXJldHVybiBzdGF0dXM7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBpY2VfdnNpX2V4aXRfZGZsdF9wcm9taXNjIC0gZHJvcCB0aGUgZGVmYXVsdCBWU0kgUnggcnVsZSBvbiBwcm9taXNjIG9mZgomIzQzOyAqIEB2c2k6IHRoZSBWU0kgbGVhdmluZyBwcm9taXNjdW91cyBtb2RlCiYjNDM7ICoKJiM0MzsgKiBGb3IgYW4gSUZGX0FMTE1VTFRJIFZTSSB3aXRoIFZMQU5zIHRoZSBwZXItVklEIG11bHRpY2FzdCBydWxlcyBhcmUKJiM0MzsgKiByZWluc3RhdGVkIGJlZm9yZSB0aGUgZGVmYXVsdCBydWxlIGlzIGNsZWFyZWQgc28gY292ZXJhZ2UgbmV2ZXIgbGFwc2VzOwomIzQzOyAqIHRoZSB0aGVuIHJlZHVuZGFudCB2aWQ9MCBydWxlIGlzIGRyb3BwZWQgYmVzdC1lZmZvcnQuIFRoZSBjYWxsZWVzIGxvZwomIzQzOyAqIHRoZWlyIG93biBmYWlsdXJlcywgc28gZXJyb3IgcmV0dXJucyBhcmUgbm90IHJlLWxvZ2dlZCBoZXJlLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGVycm9yIHdpdGggdGhlIGRlZmF1bHQgcnVsZSBsZWZ0IGluIHBsYWNlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgaWNlX3ZzaV9leGl0X2RmbHRfcHJvbWlzYyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKQomIzQzO3sKJiM0MzsJc3RydWN0IGljZV92c2lfdmxhbl9vcHMgKnZsYW5fb3BzID0gaWNlX2dldF9jb21wYXRfdnNpX3ZsYW5fb3BzKHZzaSk7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB2c2ktJmd0O25ldGRldjsKJiM0MzsJc3RydWN0IGljZV9odyAqaHcgPSAmYW1wO3ZzaS0mZ3Q7YmFjay0mZ3Q7aHc7CiYjNDM7CWJvb2wgcmVzdG9yZV9tYzsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJcmVzdG9yZV9tYyA9ICh2c2ktJmd0O2N1cnJlbnRfbmV0ZGV2X2ZsYWdzICZhbXA7IElGRl9BTExNVUxUSSkgJmFtcDsmYW1wOwomIzQzOwkJICAgICBpY2VfdnNpX2hhc19ub25femVyb192bGFucyh2c2kpOwomIzQzOwomIzQzOwlpZiAocmVzdG9yZV9tYykgewomIzQzOwkJZXJyID0gaWNlX2ZsdHJfc2V0X3ZsYW5fdnNpX3Byb21pc2MoaHcsIHZzaSwKJiM0MzsJCQkJCQkgICAgSUNFX01DQVNUX1ZMQU5fUFJPTUlTQ19CSVRTKTsKJiM0MzsJCWlmIChlcnIgJmFtcDsmYW1wOyBlcnIgIT0gLUVFWElTVCkKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IGljZV9jbGVhcl9kZmx0X3ZzaSh2c2kpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJaWYgKG5ldGRldi0mZ3Q7ZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKQomIzQzOwkJdmxhbl9vcHMtJmd0O2VuYV9yeF9maWx0ZXJpbmcodnNpKTsKJiM0MzsKJiM0MzsJaWYgKHJlc3RvcmVfbWMpCiYjNDM7CQlpY2VfZmx0cl9jbGVhcl92c2lfcHJvbWlzYyhodywgdnNpLSZndDtpZHgsIElDRV9NQ0FTVF9QUk9NSVNDX0JJVFMsCiYjNDM7CQkJCQkgICAwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBpY2VfdnNpX3N5bmNfZmx0ciAtIFVwZGF0ZSB0aGUgVlNJIGZpbHRlciBsaXN0IHRvIHRoZSBIVwogICogQHZzaTogcHRyIHRvIHRoZSBWU0kKQEAgLTQ0MiwxNyAmIzQzOzQ5NiwxMiBAQCBzdGF0aWMgaW50IGljZV92c2lfc3luY19mbHRyKHN0cnVjdCBpY2VfdnNpICp2c2kpCiAJCX0gZWxzZSB7CiAJCQkvKiBDbGVhciBSeCBmaWx0ZXIgdG8gcmVtb3ZlIHRyYWZmaWMgZnJvbSB3aXJlICovCiAJCQlpZiAoaWNlX2lzX3ZzaV9kZmx0X3ZzaSh2c2kpKSB7Ci0JCQkJZXJyID0gaWNlX2NsZWFyX2RmbHRfdnNpKHZzaSk7CiYjNDM7CQkJCWVyciA9IGljZV92c2lfZXhpdF9kZmx0X3Byb21pc2ModnNpKTsKIAkJCQlpZiAoZXJyKSB7Ci0JCQkJCW5ldGRldl9lcnIobmV0ZGV2LCAmIzM0O0Vycm9yICVkIGNsZWFyaW5nIGRlZmF1bHQgVlNJICVpIFJ4IHJ1bGVcbiYjMzQ7LAotCQkJCQkJICAgZXJyLCB2c2ktJmd0O3ZzaV9udW0pOwogCQkJCQl2c2ktJmd0O2N1cnJlbnRfbmV0ZGV2X2ZsYWdzIHw9CiAJCQkJCQlJRkZfUFJPTUlTQzsKIAkJCQkJZ290byBvdXRfcHJvbWlzYzsKIAkJCQl9Ci0JCQkJaWYgKHZzaS0mZ3Q7bmV0ZGV2LSZndDtmZWF0dXJlcyAmYW1wOwotCQkJCSAgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpCi0JCQkJCXZsYW5fb3BzLSZndDtlbmFfcnhfZmlsdGVyaW5nKHZzaSk7CiAJCQl9CiAKIAkJCS8qIGRpc2FibGUgYWxsbXVsdGkgaGVyZSwgYnV0IG9ubHkgaWYgYWxsbXVsdGkgaXMgbm90CkBAIC0zNjc1LDEwICYjNDM7MzcyNCw5IEBAIGludCBpY2Vfdmxhbl9yeF9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIF9fYmUxNiBwcm90bywgdTE2IHZpZCkKIAl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChJQ0VfQ0ZHX0JVU1ksIHZzaS0mZ3Q7c3RhdGUpKQogCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CiAKLQkvKiBBZGQgbXVsdGljYXN0IHByb21pc2MgcnVsZSBmb3IgdGhlIFZMQU4gSUQgdG8gYmUgYWRkZWQgaWYKLQkgKiBhbGwtbXVsdGljYXN0IGlzIGN1cnJlbnRseSBlbmFibGVkLgotCSAqLwotCWlmICh2c2ktJmd0O2N1cnJlbnRfbmV0ZGV2X2ZsYWdzICZhbXA7IElGRl9BTExNVUxUSSkgewomIzQzOwkvKiBza2lwIHRoZSBwZXItVklEIHJ1bGUgd2hlbiB0aGUgREZMVCBSeCBydWxlIGFscmVhZHkgY292ZXJzIHRoaXMgVklEICovCiYjNDM7CWlmICgodnNpLSZndDtjdXJyZW50X25ldGRldl9mbGFncyAmYW1wOyBJRkZfQUxMTVVMVEkpICZhbXA7JmFtcDsKJiM0MzsJICAgICFpY2VfaXNfdnNpX2RmbHRfdnNpKHZzaSkpIHsKIAkJcmV0ID0gaWNlX2ZsdHJfc2V0X3ZzaV9wcm9taXNjKCZhbXA7dnNpLSZndDtiYWNrLSZndDtodywgdnNpLSZndDtpZHgsCiAJCQkJCSAgICAgICBJQ0VfTUNBU1RfVkxBTl9QUk9NSVNDX0JJVFMsCiAJCQkJCSAgICAgICB2aWQpOwpAQCAtMzY5NiwxMSAmIzQzOzM3NDQsMTIgQEAgaW50IGljZV92bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgX19iZTE2IHByb3RvLCB1MTYgdmlkKQogCWlmIChyZXQpCiAJCWdvdG8gZmluaXNoOwogCi0JLyogSWYgYWxsLW11bHRpY2FzdCBpcyBjdXJyZW50bHkgZW5hYmxlZCBhbmQgdGhpcyBWTEFOIElEIGlzIG9ubHkgb25lCi0JICogYmVzaWRlcyBWTEFOLTAgd2UgaGF2ZSB0byB1cGRhdGUgbG9vay11cCB0eXBlIG9mIG11bHRpY2FzdCBwcm9taXNjCi0JICogcnVsZSBmb3IgVkxBTi0wIGZyb20gSUNFX1NXX0xLVVBfUFJPTUlTQyB0byBJQ0VfU1dfTEtVUF9QUk9NSVNDX1ZMQU4uCiYjNDM7CS8qIE9uIHRoZSBmaXJzdCBub24temVybyBWTEFOLCBwcm9tb3RlIHRoZSBWTEFOLTAgbXVsdGljYXN0IHByb21pc2MKJiM0MzsJICogcnVsZSBmcm9tIElDRV9TV19MS1VQX1BST01JU0MgdG8gSUNFX1NXX0xLVVBfUFJPTUlTQ19WTEFOLiBTa2lwIHdoZW4KJiM0MzsJICogdGhlIERGTFQgUnggcnVsZSBpcyBpbnN0YWxsZWQ7IGl0IGFscmVhZHkgY292ZXJzIGV2ZXJ5IFZJRC4KIAkgKi8KIAlpZiAoKHZzaS0mZ3Q7Y3VycmVudF9uZXRkZXZfZmxhZ3MgJmFtcDsgSUZGX0FMTE1VTFRJKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhaWNlX2lzX3ZzaV9kZmx0X3ZzaSh2c2kpICZhbXA7JmFtcDsKIAkgICAgaWNlX3ZzaV9udW1fbm9uX3plcm9fdmxhbnModnNpKSA9PSAxKSB7CiAJCWljZV9mbHRyX2NsZWFyX3ZzaV9wcm9taXNjKCZhbXA7dnNpLSZndDtiYWNrLSZndDtodywgdnNpLSZndDtpZHgsCiAJCQkJCSAgIElDRV9NQ0FTVF9QUk9NSVNDX0JJVFMsIDApOwpAQCAtMzc2MywxMSAmIzQzOzM4MTIsMTIgQEAgaW50IGljZV92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIF9fYmUxNiBwcm90bywgdTE2IHZpZCkKIAkJCQkJICAgSUNFX01DQVNUX1ZMQU5fUFJPTUlTQ19CSVRTLCB2aWQpOwogCiAJaWYgKCFpY2VfdnNpX2hhc19ub25femVyb192bGFucyh2c2kpKSB7Ci0JCS8qIFVwZGF0ZSBsb29rLXVwIHR5cGUgb2YgbXVsdGljYXN0IHByb21pc2MgcnVsZSBmb3IgVkxBTiAwCi0JCSAqIGZyb20gSUNFX1NXX0xLVVBfUFJPTUlTQ19WTEFOIHRvIElDRV9TV19MS1VQX1BST01JU0Mgd2hlbgotCQkgKiBhbGwtbXVsdGljYXN0IGlzIGVuYWJsZWQgYW5kIFZMQU4gMCBpcyB0aGUgb25seSBWTEFOIHJ1bGUuCiYjNDM7CQkvKiBMYXN0IG5vbi16ZXJvIFZMQU4gZ29uZTogZGVtb3RlIHRoZSBWTEFOLTAgbXVsdGljYXN0IHByb21pc2MKJiM0MzsJCSAqIHJ1bGUgYmFjayB0byBJQ0VfU1dfTEtVUF9QUk9NSVNDLiBTa2lwIHdoZW4gdGhlIERGTFQgUnggcnVsZQomIzQzOwkJICogaXMgaW5zdGFsbGVkOyBubyByZWNpcGUgc3dhcCBpcyBuZWVkZWQuCiAJCSAqLwotCQlpZiAodnNpLSZndDtjdXJyZW50X25ldGRldl9mbGFncyAmYW1wOyBJRkZfQUxMTVVMVEkpIHsKJiM0MzsJCWlmICgodnNpLSZndDtjdXJyZW50X25ldGRldl9mbGFncyAmYW1wOyBJRkZfQUxMTVVMVEkpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhaWNlX2lzX3ZzaV9kZmx0X3ZzaSh2c2kpKSB7CiAJCQlpY2VfZmx0cl9jbGVhcl92c2lfcHJvbWlzYygmYW1wO3ZzaS0mZ3Q7YmFjay0mZ3Q7aHcsIHZzaS0mZ3Q7aWR4LAogCQkJCQkJICAgSUNFX01DQVNUX1ZMQU5fUFJPTUlTQ19CSVRTLAogCQkJCQkJICAgMCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDExOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4ODYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA1MjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGZWFzaWJpbGl0eSBvZiB0aGUgSWNlIERyaXZlciBQYXRjaCoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZy4gVGhpcyBwYXRjaCBzZXJpZXMgdG91Y2hlcyB0aGUgYGljZWAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYGljZV9lc3dpdGNoLmNgIGFuZCBgaWNlX21haW4uY2AuIEl0JiMzOTtzIGFsdGVyaW5nIHByb21pc2N1b3VzIG1vZGUgYW5kIFZMQU4gaGFuZGxpbmcgd2l0aGluIHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIGRyaXZlci4gQ2xlYXJseSwgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgaWYgdGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGluIGEgZnV6emVkIGVudmlyb25tZW50LgoKTXkgZmlyc3QgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgaXMgZWFzaWx5IGZ1enphYmxlLiBJdCYjMzk7cyBhIG5ldHdvcmsgZHJpdmVyIGFuZCB0aGVyZWZvcmUgY291bGQgYmUgdnVsbmVyYWJsZS4gSG93ZXZlciwgaXTigJlzIGZvciB0aGUgSW50ZWwgRTgwMCBzZXJpZXMgaGFyZHdhcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBpZiB0aGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgaW4gYSBmdXp6ZWQgZW52aXJvbm1lbnQuCgpUaGlzIG1lYW5zIGl0JiMzOTtzIGxpa2VseSBhIHBoeXNpY2FsIGhhcmR3YXJlIGRldmljZS4gSWYgaXQmIzM5O3MgYSBwaHlzaWNhbCBkZXZpY2UsIEkgbmVlZCB0byBrbm93IGlmIGl0JiMzOTtzIGVtdWxhdGVkIGluIGFueSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSkgZW11bGF0ZXMgdGhlIEludGVsIEU4MDAgc2VyaWVzIChpY2UpLiBObywgUUVNVSBlbXVsYXRlcyBlMTAwMCwgaWdiLCBhbmQgdmlydGlvLW5ldCwgYnV0IG5vdCBpY2UuCgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBpcyBhbnkgc29mdHdhcmUgZW11bGF0aW9uIG9yIGlmIHRoaXMgaXMgZW50aXJlbHkgaGFyZHdhcmUtZGVwZW5kZW50LiBJZiBpdCYjMzk7cyBoYXJkd2FyZS1kZXBlbmRlbnQsIGl0IHdpbGwgYmUgaGFyZCB0byBmdXp6LCB1bmxlc3Mgd2UgaGF2ZSBQQ0kgcGFzc3Rocm91Z2guCgpUaGUgaW5zdHJ1Y3Rpb25zIEkgaGF2ZSBleHBsaWNpdGx5IHN0YXRlIHRvIG1hcmsgcGF0Y2hlcyBhcyAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7IGlmIHRoZXkgY29udGFpbiBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLgoKU28sIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpczogY2FuIEkgdGVzdCB0aGUgYGljZWAgZHJpdmVyIGluIFFFTVU/IE5vcm1hbGx5LCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2AgcmVxdWlyZXMgYWN0dWFsIEludGVsIEU4MDAgaGFyZHdhcmUuIExldCBtZSBkb3VibGUtY2hlY2sgaWYgdGhlcmUmIzM5O3MgYW55IGBpY2VgIGVtdWxhdGlvbiBpbiBRRU1VLiBOby4gSXMgdGhlcmUgYW55IHdheSB0byB0cmlnZ2VyIHRoaXMgY29kZSB3aXRob3V0IGhhcmR3YXJlPwoKTGV0JiMzOTtzIGNoZWNrIGlmIHRoZXJlJiMzOTtzIGEgbW9jayBvciBzb21lIGtpbmQgb2Ygd29ya2Fyb3VuZC4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCB0byBzZWFyY2ggZm9yIGFueSB0ZXN0cyBvciBtb2NrIGltcGxlbWVudGF0aW9ucyByZWxhdGVkIHRvIHRoZSBgaWNlYCBkcml2ZXIuIFRoaXMgd2lsbCBiZSB0aGUgZGVjaWRpbmcgZmFjdG9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDExOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ljZV9lc3dpdGNoX3NldHVwX2VudiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guYy0xMy0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jOjE0OiAqIGljZV9lc3dpdGNoX3NldHVwX2VudiAtIGNvbmZpZ3VyZSBlc3dpdGNoIEhXIGZpbHRlcnNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jLTE1LSAqIEBwZjogcG9pbnRlciB0byBQRiBzdHJ1Y3Rcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guYy0xOS0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jOjIwOnN0YXRpYyBpbnQgaWNlX2Vzd2l0Y2hfc2V0dXBfZW52KHN0cnVjdCBpY2VfcGYgKnBmKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmMtMjEte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jPTMwMz1zdGF0aWMgaW50IGljZV9lc3dpdGNoX2VuYWJsZV9zd2l0Y2hkZXYoc3RydWN0IGljZV9wZiAqcGYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmMtMzE4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmM6MzE5Olx0aWYgKGljZV9lc3dpdGNoX3NldHVwX2VudihwZikpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guYy0zMjAtXHRcdHJldHVybiAtRU5PREVWO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDExOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMTMKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgaWNlYCBEcml2ZXIgZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGljZWAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIHRob3NlIEludGVsIEU4MDAgc2VyaWVzIFBDSWUgbmV0d29yayBjYXJkcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7VGhpcyBpcyBhICpwaHlzaWNhbCogZGV2aWNlIGRyaXZlci4mIzM0OyBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBkaXJlY3QgaW50ZXJhY3Rpb24gd2l0aCBoYXJkd2FyZSB0aHJvdWdoIHRoZSBQQ0llIGJ1cy4gQW5kIHRoZXJlJiMzOTtzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBJJiMzOTttIGF3YXJlIG9mIGluIFFFTVUgb3IgZXZlbiBiYWtlZCBpbnRvIHRoZSBMaW51eCBrZXJuZWwgaXRzZWxmIOKAkyBub3RoaW5nIGxpa2UgYSBgbWFjODAyMTFfaHdzaW1gIG9yIGEgYG5ldGRldnNpbWAgdG8gbWltaWMgdGhlIGJlaGF2aW9yIG9mIHRoaXMga2luZCBvZiBuZXR3b3JrIGFkYXB0ZXIuCgpHaXZlbiB0aGF0IHJlYWxpdHksIGFuZCBhc3N1bWluZyB0aGlzIGlzIGZvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGxpa2UgR0NFIG9yIFFFTVUsIHRoZSBjb2RlIHBhdGhzIGFyZSBiYXNpY2FsbHkgdW5yZWFjaGFibGUuIEkgY2FuJiMzOTt0IGltYWdpbmUgYSBzY2VuYXJpbyB3aGVyZSBJIGNvdWxkIHRyaWdnZXIgYW55IG1lYW5pbmdmdWwgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGRyaXZlciwgYmVjYXVzZSB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBzaW1wbHkgaXNuJiMzOTt0IHRoZXJlIHRvIHJlc3BvbmQuIEluIG90aGVyIHdvcmRzLCB0aGVyZSYjMzk7cyBub3RoaW5nIHRvICYjMzQ7ZnV6eiYjMzQ7LgoKVGhlcmVmb3JlLCB3aXRob3V0IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiwgbXkgaW5pdGlhbCBjb25jbHVzaW9uIGlzIHRoYXQgdGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gaWYgSSYjMzk7bSBtaXNzaW5nIHNvbWV0aGluZywgdGhvdWdoLi4uIExldCBtZSBkb3VibGUgY2hlY2sgaWYgdGhlcmUmIzM5O3MgYW55IGVtdWxhdGlvbiBmb3IgYGljZWAuLi4gSSYjMzk7bGwgY2hlY2sgbXkgbWVtb3J5IGFuZCBkbyBhIGN1cnNvcnkgc2VhcmNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDExOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19JQ0UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZz01OTI9Q09ORklHX0k0MEU9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZzo1OTM6Q09ORklHX0lDRT15XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnLTU5NC1DT05GSUdfRk0xMEs9eVxuLS1cbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc9NjA4PUNPTkZJR19JNDBFPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc6NjA5OkNPTkZJR19JQ0U9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy02MTAtQ09ORklHX0ZNMTBLPXlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfRk0xMEspICYjNDM7PSBmbTEway9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19JQ0UpICYjNDM7PSBpY2UvXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9NYWtlZmlsZS0yMS1vYmotJChDT05GSUdfSURQRikgJiM0Mzs9IGlkcGYvXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL01ha2VmaWxlPTg9c3ViZGlyLWNjZmxhZ3MteSAmIzQzOz0gLUkkKHNyYylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19JQ0UpICYjNDM7PSBpY2Uub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL01ha2VmaWxlLTEwLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9NYWtlZmlsZT02MD1pY2UtJChDT05GSUdfWERQX1NPQ0tFVFMpICYjNDM7PSBpY2VfeHNrLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9NYWtlZmlsZTo2MTppY2UtJChDT05GSUdfSUNFX1NXSVRDSERFVikgJiM0Mzs9IGljZV9lc3dpdGNoLm8gaWNlX2Vzd2l0Y2hfYnIub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL01ha2VmaWxlLTYyLWljZS0kKENPTkZJR19HTlNTKSAmIzQzOz0gaWNlX2duc3Mub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL01ha2VmaWxlOjYzOmljZS0kKENPTkZJR19JQ0VfSFdNT04pICYjNDM7PSBpY2VfaHdtb24ub1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5oLTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guaDoxMDojaWZkZWYgQ09ORklHX0lDRV9TV0lUQ0hERVZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5oLTExLXZvaWQgaWNlX2Vzd2l0Y2hfZGV0YWNoX3ZmKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3ZmICp2Zik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmg9MzQ9dm9pZCBpY2VfZXN3aXRjaF9kZWNmZ192c2koc3RydWN0IGljZV92c2kgKnZzaSwgY29uc3QgdTggKm1hYyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guaDozNTojZWxzZSAvKiBDT05GSUdfSUNFX1NXSVRDSERFViAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmgtMzYtc3RhdGljIGlubGluZSB2b2lkXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmg9OTg9c3RhdGljIGlubGluZSB2b2lkIGljZV9lc3dpdGNoX2RlY2ZnX3ZzaShzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCBjb25zdCB1OCAqbWFjKSB7IH1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5oOjk5OiNlbmRpZiAvKiBDT05GSUdfSUNFX1NXSVRDSERFViAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmgtMTAwLSNlbmRpZiAvKiBfSUNFX0VTV0lUQ0hfSF8gKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2h3bW9uLmgtNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaHdtb24uaDo3OiNpZmRlZiBDT05GSUdfSUNFX0hXTU9OXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2h3bW9uLmgtOC12b2lkIGljZV9od21vbl9pbml0KHN0cnVjdCBpY2VfcGYgKnBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaHdtb24uaD05PXZvaWQgaWNlX2h3bW9uX2V4aXQoc3RydWN0IGljZV9wZiAqcGYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9od21vbi5oOjEwOiNlbHNlIC8qIENPTkZJR19JQ0VfSFdNT04gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaHdtb24uaC0xMS1zdGF0aWMgaW5saW5lIHZvaWQgaWNlX2h3bW9uX2luaXQoc3RydWN0IGljZV9wZiAqcGYpIHsgfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9od21vbi5oPTEyPXN0YXRpYyBpbmxpbmUgdm9pZCBpY2VfaHdtb25fZXhpdChzdHJ1Y3QgaWNlX3BmICpwZikgeyB9XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2h3bW9uLmg6MTM6I2VuZGlmIC8qIENPTkZJR19JQ0VfSFdNT04gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaHdtb24uaC0xNC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTIwMzY9c3RhdGljIGNvbnN0IHN0cnVjdCBpY2VfY3Jvc3N0c3RhbXBfY2ZnIGljZV9jcm9zc3RzdGFtcF9jZmdfZTgyeCA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTIwNDgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjIwNDk6I2lmZGVmIENPTkZJR19JQ0VfSFdUU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yMDUwLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWNlX2Nyb3NzdHN0YW1wX2NmZyBpY2VfY3Jvc3N0c3RhbXBfY2ZnX2U4MzAgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yMDYyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoyMDYzOiNlbmRpZiAvKiBDT05GSUdfSUNFX0hXVFMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjA2NC0vKipcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTIxNzU9c3RhdGljIGludCBpY2VfcHRwX2dldGNyb3NzdHN0YW1wKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTIxODgtXHRcdGJyZWFrO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoyMTg5OiNpZmRlZiBDT05GSUdfSUNFX0hXVFNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjE5MC1cdGNhc2UgSUNFX01BQ19FODMwOlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjE5Mi1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjIxOTM6I2VuZGlmIC8qIENPTkZJR19JQ0VfSFdUUyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yMTk0LVx0ZGVmYXVsdDpcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTI1MjM9c3RhdGljIHZvaWQgaWNlX3B0cF9zZXRfZnVuY3NfZTgzMChzdHJ1Y3QgaWNlX3BmICpwZilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjUyNC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjI1MjU6I2lmZGVmIENPTkZJR19JQ0VfSFdUU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yNTI2LVx0aWYgKHBjaWVfcHRtX2VuYWJsZWQocGYtXHUwMDNlcGRldikgXHUwMDI2XHUwMDI2IGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BUlQpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjUyOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MjUyOTojZW5kaWYgLyogQ09ORklHX0lDRV9IV1RTICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTI1MzAtXHQvKiBSZXN0IG9mIHRoZSBjb25maWcgaXMgdGhlIHNhbWUgYXMgYmFzZSBFODEwICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTE6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ1MgoJCQkJCQkJb3V0cHV0OiA5MgoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgV29ydGhGdXp6aW5nIEZsYWcgZm9yIHRoZSBgaWNlYCBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgYGljZWAgZHJpdmVyLCB3aGljaCwgYXMgd2Uga25vdywgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciB0aGUgSW50ZWwgRTgwMCBTZXJpZXMgUENJZSBuZXR3b3JrIGNhcmRzLiBUaGlzIG1lYW5zIGl0JiMzOTtzIGEgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVyLCBub3Qgc29tZXRoaW5nIGFic3RyYWN0LiBOb3csIGNvbnNpZGVyaW5nIG15IGV4cGVyaWVuY2Ugd2l0aCB2aXJ0dWFsaXphdGlvbiwgZXNwZWNpYWxseSBpbiBlbnZpcm9ubWVudHMgbGlrZSBHQ0UgYW5kIFFFTVUsIGl0JiMzOTtzIGNsZWFyIHRoZXJlJiMzOTtzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBvZiB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIG9yLCBmb3IgdGhhdCBtYXR0ZXIsIGl0cyBkcml2ZXIgcHJlc2VudCB3aXRoaW4gZWl0aGVyIFFFTVUmIzM5O3Mgb3IgdGhlIHN0YW5kYXJkIExpbnV4IGtlcm5lbCBjb2RlYmFzZS4gSWYgdGhlIGhhcmR3YXJlIGlzIG5vdCBwcmVzZW50LCB0aGVuIGl0cyByZXNwZWN0aXZlIGRyaXZlciYjMzk7cyBmdW5jdGlvbnMgYXJlIG5vdCBsaWtlbHkgdG8gZ2V0IGludm9rZWQuCgpHaXZlbiB0aGF0LCBJJiMzOTttIGZvcmNlZCB0byBjb25jbHVkZSB0aGF0IGFueSBjb2RlIHBhdGhzIHJlbGF0ZWQgdG8gdGhlIGBpY2VgIGRyaXZlciBhcmUgZWZmZWN0aXZlbHkgdW5yZWFjaGFibGUgd2l0aGluIHRoZXNlIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGVyZSYjMzk7cyBubyBwcmFjdGljYWwgdmFsdWUgaW4gZnV6emluZyB0aGlzIGRyaXZlciB3aXRoaW4gYSB2aXJ0dWFsIGNvbnRleHQsIGFzIHRoZSBpbnRlbmRlZCBjb25kaXRpb25zIHRoYXQgd291bGQgdHJpZ2dlciB0aGUgZnV6emluZyBkbyBub3QgZXhpc3QuCgpDb25zZXF1ZW50bHksIEkmIzM5O20gZ29pbmcgdG8gc2V0IHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIHRvIGBmYWxzZWAuIEkgYmVsaWV2ZSBteSByZWFzb25pbmcsIGJhc2VkIG9uIHRoZSBoYXJkd2FyZSBkZXBlbmRlbmNlIGFuZCB0aGUgbGFjayBvZiBlbXVsYXRpb24gaW4gY29tbW9uIHZpcnR1YWxpemF0aW9uIHBsYXRmb3JtcywgaXMgc291bmQuIFRoaXMgaXMgbW9yZSBvZiBhbiBhc3Nlc3NtZW50IG9mIHByYWN0aWNhbCBmZWFzaWJpbGl0eSByYXRoZXIgdGhhbiBhbiBpbnRyaW5zaWMgY2hhcmFjdGVyaXN0aWMgb2YgdGhlIGNvZGUuIFdlIGNhbiYjMzk7dCBzYWZlbHkgdGVzdCB0aGlzIGluIFFFTVUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTE6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBMaW51eCBEcml2ZXIgKGljZSkuIFRoaXMgZHJpdmVyIGlzIGZvciBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGFuZCBsYWNrcyBzb2Z0d2FyZSBlbXVsYXRpb24gaW4gUUVNVSBvciB0aGUgTGludXgga2VybmVsLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCB0ZXN0IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgTGludXggRHJpdmVyIChpY2UpLiBUaGlzIGRyaXZlciBpcyBmb3IgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBhbmQgbGFja3Mgc29mdHdhcmUgZW11bGF0aW9uIGluIFFFTVUgb3IgdGhlIExpbnV4IGtlcm5lbC4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxMTo1NToyOS44MDc1ODc0OTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTU1MTQ4ODEzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgTGludXggRHJpdmVyIChpY2UpLiBUaGlzIGRyaXZlciBpcyBmb3IgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBhbmQgbGFja3Mgc29mdHdhcmUgZW11bGF0aW9uIGluIFFFTVUgb3IgdGhlIExpbnV4IGtlcm5lbC4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDExOjU1OjI5LjgwNzU5NDg2NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgyMzM0Mjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2U5MzJhYjZhZThjOTlhZmJjMzNjMTk0MGVlMzNlMWI5MDlhZjdlN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1biAyMiAxMTo1NToyOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jXFxuaW5kZXggMmU0ZjA5NjkwMzVmNzcuLjQ4MjczZWY5ZjY5ZGM4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmNcXG5AQCAtNjYsOCArNjYsMTAgQEAgc3RhdGljIGludCBpY2VfZXN3aXRjaF9zZXR1cF9lbnYoc3RydWN0IGljZV9wZiAqcGYpXFxuIFxcdGljZV9jZmdfZGZsdF92c2kodXBsaW5rX3ZzaS1cXHUwMDNlcG9ydF9pbmZvLCB1cGxpbmtfdnNpLVxcdTAwM2VpZHgsIGZhbHNlLFxcbiBcXHRcXHRcXHQgSUNFX0ZMVFJfVFgpO1xcbiBlcnJfZGVmX3R4Olxcbi1cXHRpY2VfY2ZnX2RmbHRfdnNpKHVwbGlua192c2ktXFx1MDAzZXBvcnRfaW5mbywgdXBsaW5rX3ZzaS1cXHUwMDNlaWR4LCBmYWxzZSxcXG4tXFx0XFx0XFx0IElDRV9GTFRSX1JYKTtcXG4rXFx0Lyoga2VlcCB0aGUgUnggREZMVCBydWxlIGlmIHRoZSB1cGxpbmsgaXMgcHJvbWlzY3VvdXMgKHNlZSByZWxlYXNlX2VudikgKi9cXG4rXFx0aWYgKCEodXBsaW5rX3ZzaS1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9QUk9NSVNDKSlcXG4rXFx0XFx0aWNlX2NmZ19kZmx0X3ZzaSh1cGxpbmtfdnNpLVxcdTAwM2Vwb3J0X2luZm8sIHVwbGlua192c2ktXFx1MDAzZWlkeCxcXG4rXFx0XFx0XFx0XFx0IGZhbHNlLCBJQ0VfRkxUUl9SWCk7XFxuIGVycl9kZWZfcng6XFxuIFxcdGljZV92c2lfZGVsX3ZsYW5femVybyh1cGxpbmtfdnNpKTtcXG4gZXJyX3ZsYW5femVybzpcXG5AQCAtMjc4LDggKzI4MCwxNiBAQCBzdGF0aWMgdm9pZCBpY2VfZXN3aXRjaF9yZWxlYXNlX2VudihzdHJ1Y3QgaWNlX3BmICpwZilcXG4gXFx0dmxhbl9vcHMtXFx1MDAzZWVuYV9yeF9maWx0ZXJpbmcodXBsaW5rX3ZzaSk7XFxuIFxcdGljZV9jZmdfZGZsdF92c2kodXBsaW5rX3ZzaS1cXHUwMDNlcG9ydF9pbmZvLCB1cGxpbmtfdnNpLVxcdTAwM2VpZHgsIGZhbHNlLFxcbiBcXHRcXHRcXHQgSUNFX0ZMVFJfVFgpO1xcbi1cXHRpY2VfY2ZnX2RmbHRfdnNpKHVwbGlua192c2ktXFx1MDAzZXBvcnRfaW5mbywgdXBsaW5rX3ZzaS1cXHUwMDNlaWR4LCBmYWxzZSxcXG4tXFx0XFx0XFx0IElDRV9GTFRSX1JYKTtcXG4rXFxuK1xcdC8qIEtlZXAgdGhlIFJ4IERGTFQgcnVsZSBpZiB0aGUgdXBsaW5rIGlzIHByb21pc2N1b3VzOyBpdCBtdXN0IG91dGxpdmVcXG4rXFx0ICogdGhlIHNlc3Npb24uIFRlc3QgdGhlIGxpdmUgbmV0ZGV2LVxcdTAwM2VmbGFncywgdGhlIHNhbWUgdmFsdWVcXG4rXFx0ICogZW5hX3J4X2ZpbHRlcmluZygpIC1cXHUwMDNlIGljZV9jZmdfdmxhbl9wcnVuaW5nKCkgYWJvdmUga2V5cyBpdHMgZGVjaXNpb25cXG4rXFx0ICogb24sIHNvIHRoZSBwcmVzZXJ2ZWQgREZMVCBydWxlIGFuZCB0aGUgcHJ1bmluZyBzdGF0ZSBzdGF5IGNvbnNpc3RlbnQuXFxuK1xcdCAqL1xcbitcXHRpZiAoISh1cGxpbmtfdnNpLVxcdTAwM2VuZXRkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1BST01JU0MpKVxcbitcXHRcXHRpY2VfY2ZnX2RmbHRfdnNpKHVwbGlua192c2ktXFx1MDAzZXBvcnRfaW5mbywgdXBsaW5rX3ZzaS1cXHUwMDNlaWR4LFxcbitcXHRcXHRcXHRcXHQgZmFsc2UsIElDRV9GTFRSX1JYKTtcXG4rXFxuIFxcdGljZV9mbHRyX2FkZF9tYWNfYW5kX2Jyb2FkY2FzdCh1cGxpbmtfdnNpLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgdXBsaW5rX3ZzaS1cXHUwMDNlcG9ydF9pbmZvLVxcdTAwM2VtYWMucGVybV9hZGRyLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgSUNFX0ZXRF9UT19WU0kpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXFxuaW5kZXggZTJmYmUxMTFmODQ5NjkuLmVmYjFmNTM2ZGU2YzdhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcXG5AQCAtMjc0LDcgKzI3NCw4IEBAIHN0YXRpYyBpbnQgaWNlX3NldF9wcm9taXNjKHN0cnVjdCBpY2VfdnNpICp2c2ksIHU4IHByb21pc2NfbSlcXG4gXFx0aWYgKHZzaS1cXHUwMDNldHlwZSAhPSBJQ0VfVlNJX1BGKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmIChpY2VfdnNpX2hhc19ub25femVyb192bGFucyh2c2kpKSB7XFxuK1xcdC8qIHNraXAgcGVyLVZJRCBleHBhbnNpb247IHRoZSBERkxUIFJ4IHJ1bGUgYWxyZWFkeSBjb3ZlcnMgZXZlcnkgVklEICovXFxuK1xcdGlmIChpY2VfdnNpX2hhc19ub25femVyb192bGFucyh2c2kpIFxcdTAwMjZcXHUwMDI2ICFpY2VfaXNfdnNpX2RmbHRfdnNpKHZzaSkpIHtcXG4gXFx0XFx0cHJvbWlzY19tIHw9IChJQ0VfUFJPTUlTQ19WTEFOX1JYIHwgSUNFX1BST01JU0NfVkxBTl9UWCk7XFxuIFxcdFxcdHN0YXR1cyA9IGljZV9mbHRyX3NldF92bGFuX3ZzaV9wcm9taXNjKFxcdTAwMjZ2c2ktXFx1MDAzZWJhY2stXFx1MDAzZWh3LCB2c2ksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBwcm9taXNjX20pO1xcbkBAIC0zMDQsOSArMzA1LDE5IEBAIHN0YXRpYyBpbnQgaWNlX2NsZWFyX3Byb21pc2Moc3RydWN0IGljZV92c2kgKnZzaSwgdTggcHJvbWlzY19tKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGlmIChpY2VfdnNpX2hhc19ub25femVyb192bGFucyh2c2kpKSB7XFxuLVxcdFxcdHByb21pc2NfbSB8PSAoSUNFX1BST01JU0NfVkxBTl9SWCB8IElDRV9QUk9NSVNDX1ZMQU5fVFgpO1xcbitcXHRcXHRpbnQgdmlkMF9zdGF0dXM7XFxuK1xcbitcXHRcXHQvKiBzZXQgdGltZSB1c2VkIGVpdGhlciByZWNpcGUgKHBlci1WSUQgUFJPTUlTQ19WTEFOLCBvciB2aWQ9MFxcbitcXHRcXHQgKiBQUk9NSVNDIHZpYSB0aGUgaWNlX3NldF9wcm9taXNjKCkgZWxzZSBicmFuY2gpLCBzbyBjbGVhclxcbitcXHRcXHQgKiBib3RoOyBjbGVhcmluZyBhbiBhYnNlbnQgcnVsZSBzdWNjZWVkc1xcbitcXHRcXHQgKi9cXG4gXFx0XFx0c3RhdHVzID0gaWNlX2ZsdHJfY2xlYXJfdmxhbl92c2lfcHJvbWlzYyhcXHUwMDI2dnNpLVxcdTAwM2ViYWNrLVxcdTAwM2VodywgdnNpLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgcHJvbWlzY19tKTtcXG4rXFx0XFx0XFx0XFx0cHJvbWlzY19tIHwgSUNFX1BST01JU0NfVkxBTl9SWCB8XFxuK1xcdFxcdFxcdFxcdElDRV9QUk9NSVNDX1ZMQU5fVFgpO1xcbitcXHRcXHR2aWQwX3N0YXR1cyA9IGljZV9mbHRyX2NsZWFyX3ZzaV9wcm9taXNjKFxcdTAwMjZ2c2ktXFx1MDAzZWJhY2stXFx1MDAzZWh3LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgdnNpLVxcdTAwM2VpZHgsIHByb21pc2NfbSwgMCk7XFxuK1xcdFxcdGlmICghc3RhdHVzKVxcbitcXHRcXHRcXHRzdGF0dXMgPSB2aWQwX3N0YXR1cztcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0c3RhdHVzID0gaWNlX2ZsdHJfY2xlYXJfdnNpX3Byb21pc2MoXFx1MDAyNnZzaS1cXHUwMDNlYmFjay1cXHUwMDNlaHcsIHZzaS1cXHUwMDNlaWR4LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgcHJvbWlzY19tLCAwKTtcXG5AQCAtMzE3LDYgKzMyOCw0OSBAQCBzdGF0aWMgaW50IGljZV9jbGVhcl9wcm9taXNjKHN0cnVjdCBpY2VfdnNpICp2c2ksIHU4IHByb21pc2NfbSlcXG4gXFx0cmV0dXJuIHN0YXR1cztcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGljZV92c2lfZXhpdF9kZmx0X3Byb21pc2MgLSBkcm9wIHRoZSBkZWZhdWx0IFZTSSBSeCBydWxlIG9uIHByb21pc2Mgb2ZmXFxuKyAqIEB2c2k6IHRoZSBWU0kgbGVhdmluZyBwcm9taXNjdW91cyBtb2RlXFxuKyAqXFxuKyAqIEZvciBhbiBJRkZfQUxMTVVMVEkgVlNJIHdpdGggVkxBTnMgdGhlIHBlci1WSUQgbXVsdGljYXN0IHJ1bGVzIGFyZVxcbisgKiByZWluc3RhdGVkIGJlZm9yZSB0aGUgZGVmYXVsdCBydWxlIGlzIGNsZWFyZWQgc28gY292ZXJhZ2UgbmV2ZXIgbGFwc2VzO1xcbisgKiB0aGUgdGhlbiByZWR1bmRhbnQgdmlkPTAgcnVsZSBpcyBkcm9wcGVkIGJlc3QtZWZmb3J0LiBUaGUgY2FsbGVlcyBsb2dcXG4rICogdGhlaXIgb3duIGZhaWx1cmVzLCBzbyBlcnJvciByZXR1cm5zIGFyZSBub3QgcmUtbG9nZ2VkIGhlcmUuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBlcnJvciB3aXRoIHRoZSBkZWZhdWx0IHJ1bGUgbGVmdCBpbiBwbGFjZS5cXG4rICovXFxuK3N0YXRpYyBpbnQgaWNlX3ZzaV9leGl0X2RmbHRfcHJvbWlzYyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxcbit7XFxuK1xcdHN0cnVjdCBpY2VfdnNpX3ZsYW5fb3BzICp2bGFuX29wcyA9IGljZV9nZXRfY29tcGF0X3ZzaV92bGFuX29wcyh2c2kpO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdnNpLVxcdTAwM2VuZXRkZXY7XFxuK1xcdHN0cnVjdCBpY2VfaHcgKmh3ID0gXFx1MDAyNnZzaS1cXHUwMDNlYmFjay1cXHUwMDNlaHc7XFxuK1xcdGJvb2wgcmVzdG9yZV9tYztcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdHJlc3RvcmVfbWMgPSAodnNpLVxcdTAwM2VjdXJyZW50X25ldGRldl9mbGFncyBcXHUwMDI2IElGRl9BTExNVUxUSSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICBpY2VfdnNpX2hhc19ub25femVyb192bGFucyh2c2kpO1xcbitcXG4rXFx0aWYgKHJlc3RvcmVfbWMpIHtcXG4rXFx0XFx0ZXJyID0gaWNlX2ZsdHJfc2V0X3ZsYW5fdnNpX3Byb21pc2MoaHcsIHZzaSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIElDRV9NQ0FTVF9WTEFOX1BST01JU0NfQklUUyk7XFxuK1xcdFxcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgZXJyICE9IC1FRVhJU1QpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGVyciA9IGljZV9jbGVhcl9kZmx0X3ZzaSh2c2kpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0aWYgKG5ldGRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpXFxuK1xcdFxcdHZsYW5fb3BzLVxcdTAwM2VlbmFfcnhfZmlsdGVyaW5nKHZzaSk7XFxuK1xcbitcXHRpZiAocmVzdG9yZV9tYylcXG4rXFx0XFx0aWNlX2ZsdHJfY2xlYXJfdnNpX3Byb21pc2MoaHcsIHZzaS1cXHUwMDNlaWR4LCBJQ0VfTUNBU1RfUFJPTUlTQ19CSVRTLFxcbitcXHRcXHRcXHRcXHRcXHQgICAwKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAvKipcXG4gICogaWNlX3ZzaV9zeW5jX2ZsdHIgLSBVcGRhdGUgdGhlIFZTSSBmaWx0ZXIgbGlzdCB0byB0aGUgSFdcXG4gICogQHZzaTogcHRyIHRvIHRoZSBWU0lcXG5AQCAtNDQyLDE3ICs0OTYsMTIgQEAgc3RhdGljIGludCBpY2VfdnNpX3N5bmNfZmx0cihzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHQvKiBDbGVhciBSeCBmaWx0ZXIgdG8gcmVtb3ZlIHRyYWZmaWMgZnJvbSB3aXJlICovXFxuIFxcdFxcdFxcdGlmIChpY2VfaXNfdnNpX2RmbHRfdnNpKHZzaSkpIHtcXG4tXFx0XFx0XFx0XFx0ZXJyID0gaWNlX2NsZWFyX2RmbHRfdnNpKHZzaSk7XFxuK1xcdFxcdFxcdFxcdGVyciA9IGljZV92c2lfZXhpdF9kZmx0X3Byb21pc2ModnNpKTtcXG4gXFx0XFx0XFx0XFx0aWYgKGVycikge1xcbi1cXHRcXHRcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcIkVycm9yICVkIGNsZWFyaW5nIGRlZmF1bHQgVlNJICVpIFJ4IHJ1bGVcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgIGVyciwgdnNpLVxcdTAwM2V2c2lfbnVtKTtcXG4gXFx0XFx0XFx0XFx0XFx0dnNpLVxcdTAwM2VjdXJyZW50X25ldGRldl9mbGFncyB8PVxcbiBcXHRcXHRcXHRcXHRcXHRcXHRJRkZfUFJPTUlTQztcXG4gXFx0XFx0XFx0XFx0XFx0Z290byBvdXRfcHJvbWlzYztcXG4gXFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRcXHRpZiAodnNpLVxcdTAwM2VuZXRkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjZcXG4tXFx0XFx0XFx0XFx0ICAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUilcXG4tXFx0XFx0XFx0XFx0XFx0dmxhbl9vcHMtXFx1MDAzZWVuYV9yeF9maWx0ZXJpbmcodnNpKTtcXG4gXFx0XFx0XFx0fVxcbiBcXG4gXFx0XFx0XFx0LyogZGlzYWJsZSBhbGxtdWx0aSBoZXJlLCBidXQgb25seSBpZiBhbGxtdWx0aSBpcyBub3RcXG5AQCAtMzY3NSwxMCArMzcyNCw5IEBAIGludCBpY2Vfdmxhbl9yeF9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIF9fYmUxNiBwcm90bywgdTE2IHZpZClcXG4gXFx0d2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoSUNFX0NGR19CVVNZLCB2c2ktXFx1MDAzZXN0YXRlKSlcXG4gXFx0XFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xcbiBcXG4tXFx0LyogQWRkIG11bHRpY2FzdCBwcm9taXNjIHJ1bGUgZm9yIHRoZSBWTEFOIElEIHRvIGJlIGFkZGVkIGlmXFxuLVxcdCAqIGFsbC1tdWx0aWNhc3QgaXMgY3VycmVudGx5IGVuYWJsZWQuXFxuLVxcdCAqL1xcbi1cXHRpZiAodnNpLVxcdTAwM2VjdXJyZW50X25ldGRldl9mbGFncyBcXHUwMDI2IElGRl9BTExNVUxUSSkge1xcbitcXHQvKiBza2lwIHRoZSBwZXItVklEIHJ1bGUgd2hlbiB0aGUgREZMVCBSeCBydWxlIGFscmVhZHkgY292ZXJzIHRoaXMgVklEICovXFxuK1xcdGlmICgodnNpLVxcdTAwM2VjdXJyZW50X25ldGRldl9mbGFncyBcXHUwMDI2IElGRl9BTExNVUxUSSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFpY2VfaXNfdnNpX2RmbHRfdnNpKHZzaSkpIHtcXG4gXFx0XFx0cmV0ID0gaWNlX2ZsdHJfc2V0X3ZzaV9wcm9taXNjKFxcdTAwMjZ2c2ktXFx1MDAzZWJhY2stXFx1MDAzZWh3LCB2c2ktXFx1MDAzZWlkeCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIElDRV9NQ0FTVF9WTEFOX1BST01JU0NfQklUUyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIHZpZCk7XFxuQEAgLTM2OTYsMTEgKzM3NDQsMTIgQEAgaW50IGljZV92bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgX19iZTE2IHByb3RvLCB1MTYgdmlkKVxcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIGZpbmlzaDtcXG4gXFxuLVxcdC8qIElmIGFsbC1tdWx0aWNhc3QgaXMgY3VycmVudGx5IGVuYWJsZWQgYW5kIHRoaXMgVkxBTiBJRCBpcyBvbmx5IG9uZVxcbi1cXHQgKiBiZXNpZGVzIFZMQU4tMCB3ZSBoYXZlIHRvIHVwZGF0ZSBsb29rLXVwIHR5cGUgb2YgbXVsdGljYXN0IHByb21pc2NcXG4tXFx0ICogcnVsZSBmb3IgVkxBTi0wIGZyb20gSUNFX1NXX0xLVVBfUFJPTUlTQyB0byBJQ0VfU1dfTEtVUF9QUk9NSVNDX1ZMQU4uXFxuK1xcdC8qIE9uIHRoZSBmaXJzdCBub24temVybyBWTEFOLCBwcm9tb3RlIHRoZSBWTEFOLTAgbXVsdGljYXN0IHByb21pc2NcXG4rXFx0ICogcnVsZSBmcm9tIElDRV9TV19MS1VQX1BST01JU0MgdG8gSUNFX1NXX0xLVVBfUFJPTUlTQ19WTEFOLiBTa2lwIHdoZW5cXG4rXFx0ICogdGhlIERGTFQgUnggcnVsZSBpcyBpbnN0YWxsZWQ7IGl0IGFscmVhZHkgY292ZXJzIGV2ZXJ5IFZJRC5cXG4gXFx0ICovXFxuIFxcdGlmICgodnNpLVxcdTAwM2VjdXJyZW50X25ldGRldl9mbGFncyBcXHUwMDI2IElGRl9BTExNVUxUSSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFpY2VfaXNfdnNpX2RmbHRfdnNpKHZzaSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIGljZV92c2lfbnVtX25vbl96ZXJvX3ZsYW5zKHZzaSkgPT0gMSkge1xcbiBcXHRcXHRpY2VfZmx0cl9jbGVhcl92c2lfcHJvbWlzYyhcXHUwMDI2dnNpLVxcdTAwM2ViYWNrLVxcdTAwM2VodywgdnNpLVxcdTAwM2VpZHgsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIElDRV9NQ0FTVF9QUk9NSVNDX0JJVFMsIDApO1xcbkBAIC0zNzYzLDExICszODEyLDEyIEBAIGludCBpY2Vfdmxhbl9yeF9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBfX2JlMTYgcHJvdG8sIHUxNiB2aWQpXFxuIFxcdFxcdFxcdFxcdFxcdCAgIElDRV9NQ0FTVF9WTEFOX1BST01JU0NfQklUUywgdmlkKTtcXG4gXFxuIFxcdGlmICghaWNlX3ZzaV9oYXNfbm9uX3plcm9fdmxhbnModnNpKSkge1xcbi1cXHRcXHQvKiBVcGRhdGUgbG9vay11cCB0eXBlIG9mIG11bHRpY2FzdCBwcm9taXNjIHJ1bGUgZm9yIFZMQU4gMFxcbi1cXHRcXHQgKiBmcm9tIElDRV9TV19MS1VQX1BST01JU0NfVkxBTiB0byBJQ0VfU1dfTEtVUF9QUk9NSVNDIHdoZW5cXG4tXFx0XFx0ICogYWxsLW11bHRpY2FzdCBpcyBlbmFibGVkIGFuZCBWTEFOIDAgaXMgdGhlIG9ubHkgVkxBTiBydWxlLlxcbitcXHRcXHQvKiBMYXN0IG5vbi16ZXJvIFZMQU4gZ29uZTogZGVtb3RlIHRoZSBWTEFOLTAgbXVsdGljYXN0IHByb21pc2NcXG4rXFx0XFx0ICogcnVsZSBiYWNrIHRvIElDRV9TV19MS1VQX1BST01JU0MuIFNraXAgd2hlbiB0aGUgREZMVCBSeCBydWxlXFxuK1xcdFxcdCAqIGlzIGluc3RhbGxlZDsgbm8gcmVjaXBlIHN3YXAgaXMgbmVlZGVkLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKHZzaS1cXHUwMDNlY3VycmVudF9uZXRkZXZfZmxhZ3MgXFx1MDAyNiBJRkZfQUxMTVVMVEkpIHtcXG4rXFx0XFx0aWYgKCh2c2ktXFx1MDAzZWN1cnJlbnRfbmV0ZGV2X2ZsYWdzIFxcdTAwMjYgSUZGX0FMTE1VTFRJKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIWljZV9pc192c2lfZGZsdF92c2kodnNpKSkge1xcbiBcXHRcXHRcXHRpY2VfZmx0cl9jbGVhcl92c2lfcHJvbWlzYyhcXHUwMDI2dnNpLVxcdTAwM2ViYWNrLVxcdTAwM2VodywgdnNpLVxcdTAwM2VpZHgsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIElDRV9NQ0FTVF9WTEFOX1BST01JU0NfQklUUyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgMCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDExOjU1OjMwLjM5MDkzMDE2OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQ5NjgxMzcxOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIExpbnV4IERyaXZlciAoaWNlKS4gVGhpcyBkcml2ZXIgaXMgZm9yIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgYW5kIGxhY2tzIHNvZnR3YXJlIGVtdWxhdGlvbiBpbiBRRU1VIG9yIHRoZSBMaW51eCBrZXJuZWwuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIHRlc3QgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdlOTMyYWI2YWU4Yzk5YWZiYzMzYzE5NDBlZTMzZTFiOTA5YWY3ZTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyMiAxMTo1NToyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmNcbmluZGV4IDJlNGYwOTY5MDM1Zjc3Li40ODI3M2VmOWY2OWRjOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guY1xuQEAgLTY2LDggKzY2LDEwIEBAIHN0YXRpYyBpbnQgaWNlX2Vzd2l0Y2hfc2V0dXBfZW52KHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0aWNlX2NmZ19kZmx0X3ZzaSh1cGxpbmtfdnNpLVx1MDAzZXBvcnRfaW5mbywgdXBsaW5rX3ZzaS1cdTAwM2VpZHgsIGZhbHNlLFxuIFx0XHRcdCBJQ0VfRkxUUl9UWCk7XG4gZXJyX2RlZl90eDpcbi1cdGljZV9jZmdfZGZsdF92c2kodXBsaW5rX3ZzaS1cdTAwM2Vwb3J0X2luZm8sIHVwbGlua192c2ktXHUwMDNlaWR4LCBmYWxzZSxcbi1cdFx0XHQgSUNFX0ZMVFJfUlgpO1xuK1x0Lyoga2VlcCB0aGUgUnggREZMVCBydWxlIGlmIHRoZSB1cGxpbmsgaXMgcHJvbWlzY3VvdXMgKHNlZSByZWxlYXNlX2VudikgKi9cbitcdGlmICghKHVwbGlua192c2ktXHUwMDNlbmV0ZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfUFJPTUlTQykpXG4rXHRcdGljZV9jZmdfZGZsdF92c2kodXBsaW5rX3ZzaS1cdTAwM2Vwb3J0X2luZm8sIHVwbGlua192c2ktXHUwMDNlaWR4LFxuK1x0XHRcdFx0IGZhbHNlLCBJQ0VfRkxUUl9SWCk7XG4gZXJyX2RlZl9yeDpcbiBcdGljZV92c2lfZGVsX3ZsYW5femVybyh1cGxpbmtfdnNpKTtcbiBlcnJfdmxhbl96ZXJvOlxuQEAgLTI3OCw4ICsyODAsMTYgQEAgc3RhdGljIHZvaWQgaWNlX2Vzd2l0Y2hfcmVsZWFzZV9lbnYoc3RydWN0IGljZV9wZiAqcGYpXG4gXHR2bGFuX29wcy1cdTAwM2VlbmFfcnhfZmlsdGVyaW5nKHVwbGlua192c2kpO1xuIFx0aWNlX2NmZ19kZmx0X3ZzaSh1cGxpbmtfdnNpLVx1MDAzZXBvcnRfaW5mbywgdXBsaW5rX3ZzaS1cdTAwM2VpZHgsIGZhbHNlLFxuIFx0XHRcdCBJQ0VfRkxUUl9UWCk7XG4tXHRpY2VfY2ZnX2RmbHRfdnNpKHVwbGlua192c2ktXHUwMDNlcG9ydF9pbmZvLCB1cGxpbmtfdnNpLVx1MDAzZWlkeCwgZmFsc2UsXG4tXHRcdFx0IElDRV9GTFRSX1JYKTtcbitcbitcdC8qIEtlZXAgdGhlIFJ4IERGTFQgcnVsZSBpZiB0aGUgdXBsaW5rIGlzIHByb21pc2N1b3VzOyBpdCBtdXN0IG91dGxpdmVcbitcdCAqIHRoZSBzZXNzaW9uLiBUZXN0IHRoZSBsaXZlIG5ldGRldi1cdTAwM2VmbGFncywgdGhlIHNhbWUgdmFsdWVcbitcdCAqIGVuYV9yeF9maWx0ZXJpbmcoKSAtXHUwMDNlIGljZV9jZmdfdmxhbl9wcnVuaW5nKCkgYWJvdmUga2V5cyBpdHMgZGVjaXNpb25cbitcdCAqIG9uLCBzbyB0aGUgcHJlc2VydmVkIERGTFQgcnVsZSBhbmQgdGhlIHBydW5pbmcgc3RhdGUgc3RheSBjb25zaXN0ZW50LlxuK1x0ICovXG4rXHRpZiAoISh1cGxpbmtfdnNpLVx1MDAzZW5ldGRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1BST01JU0MpKVxuK1x0XHRpY2VfY2ZnX2RmbHRfdnNpKHVwbGlua192c2ktXHUwMDNlcG9ydF9pbmZvLCB1cGxpbmtfdnNpLVx1MDAzZWlkeCxcbitcdFx0XHRcdCBmYWxzZSwgSUNFX0ZMVFJfUlgpO1xuK1xuIFx0aWNlX2ZsdHJfYWRkX21hY19hbmRfYnJvYWRjYXN0KHVwbGlua192c2ksXG4gXHRcdFx0XHQgICAgICAgdXBsaW5rX3ZzaS1cdTAwM2Vwb3J0X2luZm8tXHUwMDNlbWFjLnBlcm1fYWRkcixcbiBcdFx0XHRcdCAgICAgICBJQ0VfRldEX1RPX1ZTSSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xuaW5kZXggZTJmYmUxMTFmODQ5NjkuLmVmYjFmNTM2ZGU2YzdhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5AQCAtMjc0LDcgKzI3NCw4IEBAIHN0YXRpYyBpbnQgaWNlX3NldF9wcm9taXNjKHN0cnVjdCBpY2VfdnNpICp2c2ksIHU4IHByb21pc2NfbSlcbiBcdGlmICh2c2ktXHUwMDNldHlwZSAhPSBJQ0VfVlNJX1BGKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChpY2VfdnNpX2hhc19ub25femVyb192bGFucyh2c2kpKSB7XG4rXHQvKiBza2lwIHBlci1WSUQgZXhwYW5zaW9uOyB0aGUgREZMVCBSeCBydWxlIGFscmVhZHkgY292ZXJzIGV2ZXJ5IFZJRCAqL1xuK1x0aWYgKGljZV92c2lfaGFzX25vbl96ZXJvX3ZsYW5zKHZzaSkgXHUwMDI2XHUwMDI2ICFpY2VfaXNfdnNpX2RmbHRfdnNpKHZzaSkpIHtcbiBcdFx0cHJvbWlzY19tIHw9IChJQ0VfUFJPTUlTQ19WTEFOX1JYIHwgSUNFX1BST01JU0NfVkxBTl9UWCk7XG4gXHRcdHN0YXR1cyA9IGljZV9mbHRyX3NldF92bGFuX3ZzaV9wcm9taXNjKFx1MDAyNnZzaS1cdTAwM2ViYWNrLVx1MDAzZWh3LCB2c2ksXG4gXHRcdFx0XHRcdFx0ICAgICAgIHByb21pc2NfbSk7XG5AQCAtMzA0LDkgKzMwNSwxOSBAQCBzdGF0aWMgaW50IGljZV9jbGVhcl9wcm9taXNjKHN0cnVjdCBpY2VfdnNpICp2c2ksIHU4IHByb21pc2NfbSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAoaWNlX3ZzaV9oYXNfbm9uX3plcm9fdmxhbnModnNpKSkge1xuLVx0XHRwcm9taXNjX20gfD0gKElDRV9QUk9NSVNDX1ZMQU5fUlggfCBJQ0VfUFJPTUlTQ19WTEFOX1RYKTtcbitcdFx0aW50IHZpZDBfc3RhdHVzO1xuK1xuK1x0XHQvKiBzZXQgdGltZSB1c2VkIGVpdGhlciByZWNpcGUgKHBlci1WSUQgUFJPTUlTQ19WTEFOLCBvciB2aWQ9MFxuK1x0XHQgKiBQUk9NSVNDIHZpYSB0aGUgaWNlX3NldF9wcm9taXNjKCkgZWxzZSBicmFuY2gpLCBzbyBjbGVhclxuK1x0XHQgKiBib3RoOyBjbGVhcmluZyBhbiBhYnNlbnQgcnVsZSBzdWNjZWVkc1xuK1x0XHQgKi9cbiBcdFx0c3RhdHVzID0gaWNlX2ZsdHJfY2xlYXJfdmxhbl92c2lfcHJvbWlzYyhcdTAwMjZ2c2ktXHUwMDNlYmFjay1cdTAwM2VodywgdnNpLFxuLVx0XHRcdFx0XHRcdFx0IHByb21pc2NfbSk7XG4rXHRcdFx0XHRwcm9taXNjX20gfCBJQ0VfUFJPTUlTQ19WTEFOX1JYIHxcbitcdFx0XHRcdElDRV9QUk9NSVNDX1ZMQU5fVFgpO1xuK1x0XHR2aWQwX3N0YXR1cyA9IGljZV9mbHRyX2NsZWFyX3ZzaV9wcm9taXNjKFx1MDAyNnZzaS1cdTAwM2ViYWNrLVx1MDAzZWh3LFxuK1x0XHRcdFx0XHRcdFx0IHZzaS1cdTAwM2VpZHgsIHByb21pc2NfbSwgMCk7XG4rXHRcdGlmICghc3RhdHVzKVxuK1x0XHRcdHN0YXR1cyA9IHZpZDBfc3RhdHVzO1xuIFx0fSBlbHNlIHtcbiBcdFx0c3RhdHVzID0gaWNlX2ZsdHJfY2xlYXJfdnNpX3Byb21pc2MoXHUwMDI2dnNpLVx1MDAzZWJhY2stXHUwMDNlaHcsIHZzaS1cdTAwM2VpZHgsXG4gXHRcdFx0XHRcdFx0ICAgIHByb21pc2NfbSwgMCk7XG5AQCAtMzE3LDYgKzMyOCw0OSBAQCBzdGF0aWMgaW50IGljZV9jbGVhcl9wcm9taXNjKHN0cnVjdCBpY2VfdnNpICp2c2ksIHU4IHByb21pc2NfbSlcbiBcdHJldHVybiBzdGF0dXM7XG4gfVxuIFxuKy8qKlxuKyAqIGljZV92c2lfZXhpdF9kZmx0X3Byb21pc2MgLSBkcm9wIHRoZSBkZWZhdWx0IFZTSSBSeCBydWxlIG9uIHByb21pc2Mgb2ZmXG4rICogQHZzaTogdGhlIFZTSSBsZWF2aW5nIHByb21pc2N1b3VzIG1vZGVcbisgKlxuKyAqIEZvciBhbiBJRkZfQUxMTVVMVEkgVlNJIHdpdGggVkxBTnMgdGhlIHBlci1WSUQgbXVsdGljYXN0IHJ1bGVzIGFyZVxuKyAqIHJlaW5zdGF0ZWQgYmVmb3JlIHRoZSBkZWZhdWx0IHJ1bGUgaXMgY2xlYXJlZCBzbyBjb3ZlcmFnZSBuZXZlciBsYXBzZXM7XG4rICogdGhlIHRoZW4gcmVkdW5kYW50IHZpZD0wIHJ1bGUgaXMgZHJvcHBlZCBiZXN0LWVmZm9ydC4gVGhlIGNhbGxlZXMgbG9nXG4rICogdGhlaXIgb3duIGZhaWx1cmVzLCBzbyBlcnJvciByZXR1cm5zIGFyZSBub3QgcmUtbG9nZ2VkIGhlcmUuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZXJyb3Igd2l0aCB0aGUgZGVmYXVsdCBydWxlIGxlZnQgaW4gcGxhY2UuXG4rICovXG4rc3RhdGljIGludCBpY2VfdnNpX2V4aXRfZGZsdF9wcm9taXNjKHN0cnVjdCBpY2VfdnNpICp2c2kpXG4re1xuK1x0c3RydWN0IGljZV92c2lfdmxhbl9vcHMgKnZsYW5fb3BzID0gaWNlX2dldF9jb21wYXRfdnNpX3ZsYW5fb3BzKHZzaSk7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdnNpLVx1MDAzZW5ldGRldjtcbitcdHN0cnVjdCBpY2VfaHcgKmh3ID0gXHUwMDI2dnNpLVx1MDAzZWJhY2stXHUwMDNlaHc7XG4rXHRib29sIHJlc3RvcmVfbWM7XG4rXHRpbnQgZXJyO1xuK1xuK1x0cmVzdG9yZV9tYyA9ICh2c2ktXHUwMDNlY3VycmVudF9uZXRkZXZfZmxhZ3MgXHUwMDI2IElGRl9BTExNVUxUSSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAgaWNlX3ZzaV9oYXNfbm9uX3plcm9fdmxhbnModnNpKTtcbitcbitcdGlmIChyZXN0b3JlX21jKSB7XG4rXHRcdGVyciA9IGljZV9mbHRyX3NldF92bGFuX3ZzaV9wcm9taXNjKGh3LCB2c2ksXG4rXHRcdFx0XHRcdFx0ICAgIElDRV9NQ0FTVF9WTEFOX1BST01JU0NfQklUUyk7XG4rXHRcdGlmIChlcnIgXHUwMDI2XHUwMDI2IGVyciAhPSAtRUVYSVNUKVxuK1x0XHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRlcnIgPSBpY2VfY2xlYXJfZGZsdF92c2kodnNpKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRpZiAobmV0ZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpXG4rXHRcdHZsYW5fb3BzLVx1MDAzZWVuYV9yeF9maWx0ZXJpbmcodnNpKTtcbitcbitcdGlmIChyZXN0b3JlX21jKVxuK1x0XHRpY2VfZmx0cl9jbGVhcl92c2lfcHJvbWlzYyhodywgdnNpLVx1MDAzZWlkeCwgSUNFX01DQVNUX1BST01JU0NfQklUUyxcbitcdFx0XHRcdFx0ICAgMCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyoqXG4gICogaWNlX3ZzaV9zeW5jX2ZsdHIgLSBVcGRhdGUgdGhlIFZTSSBmaWx0ZXIgbGlzdCB0byB0aGUgSFdcbiAgKiBAdnNpOiBwdHIgdG8gdGhlIFZTSVxuQEAgLTQ0MiwxNyArNDk2LDEyIEBAIHN0YXRpYyBpbnQgaWNlX3ZzaV9zeW5jX2ZsdHIoc3RydWN0IGljZV92c2kgKnZzaSlcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHQvKiBDbGVhciBSeCBmaWx0ZXIgdG8gcmVtb3ZlIHRyYWZmaWMgZnJvbSB3aXJlICovXG4gXHRcdFx0aWYgKGljZV9pc192c2lfZGZsdF92c2kodnNpKSkge1xuLVx0XHRcdFx0ZXJyID0gaWNlX2NsZWFyX2RmbHRfdnNpKHZzaSk7XG4rXHRcdFx0XHRlcnIgPSBpY2VfdnNpX2V4aXRfZGZsdF9wcm9taXNjKHZzaSk7XG4gXHRcdFx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIkVycm9yICVkIGNsZWFyaW5nIGRlZmF1bHQgVlNJICVpIFJ4IHJ1bGVcXG5cIixcbi1cdFx0XHRcdFx0XHQgICBlcnIsIHZzaS1cdTAwM2V2c2lfbnVtKTtcbiBcdFx0XHRcdFx0dnNpLVx1MDAzZWN1cnJlbnRfbmV0ZGV2X2ZsYWdzIHw9XG4gXHRcdFx0XHRcdFx0SUZGX1BST01JU0M7XG4gXHRcdFx0XHRcdGdvdG8gb3V0X3Byb21pc2M7XG4gXHRcdFx0XHR9XG4tXHRcdFx0XHRpZiAodnNpLVx1MDAzZW5ldGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjZcbi1cdFx0XHRcdCAgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpXG4tXHRcdFx0XHRcdHZsYW5fb3BzLVx1MDAzZWVuYV9yeF9maWx0ZXJpbmcodnNpKTtcbiBcdFx0XHR9XG4gXG4gXHRcdFx0LyogZGlzYWJsZSBhbGxtdWx0aSBoZXJlLCBidXQgb25seSBpZiBhbGxtdWx0aSBpcyBub3RcbkBAIC0zNjc1LDEwICszNzI0LDkgQEAgaW50IGljZV92bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgX19iZTE2IHByb3RvLCB1MTYgdmlkKVxuIFx0d2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoSUNFX0NGR19CVVNZLCB2c2ktXHUwMDNlc3RhdGUpKVxuIFx0XHR1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7XG4gXG4tXHQvKiBBZGQgbXVsdGljYXN0IHByb21pc2MgcnVsZSBmb3IgdGhlIFZMQU4gSUQgdG8gYmUgYWRkZWQgaWZcbi1cdCAqIGFsbC1tdWx0aWNhc3QgaXMgY3VycmVudGx5IGVuYWJsZWQuXG4tXHQgKi9cbi1cdGlmICh2c2ktXHUwMDNlY3VycmVudF9uZXRkZXZfZmxhZ3MgXHUwMDI2IElGRl9BTExNVUxUSSkge1xuK1x0Lyogc2tpcCB0aGUgcGVyLVZJRCBydWxlIHdoZW4gdGhlIERGTFQgUnggcnVsZSBhbHJlYWR5IGNvdmVycyB0aGlzIFZJRCAqL1xuK1x0aWYgKCh2c2ktXHUwMDNlY3VycmVudF9uZXRkZXZfZmxhZ3MgXHUwMDI2IElGRl9BTExNVUxUSSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWljZV9pc192c2lfZGZsdF92c2kodnNpKSkge1xuIFx0XHRyZXQgPSBpY2VfZmx0cl9zZXRfdnNpX3Byb21pc2MoXHUwMDI2dnNpLVx1MDAzZWJhY2stXHUwMDNlaHcsIHZzaS1cdTAwM2VpZHgsXG4gXHRcdFx0XHRcdCAgICAgICBJQ0VfTUNBU1RfVkxBTl9QUk9NSVNDX0JJVFMsXG4gXHRcdFx0XHRcdCAgICAgICB2aWQpO1xuQEAgLTM2OTYsMTEgKzM3NDQsMTIgQEAgaW50IGljZV92bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgX19iZTE2IHByb3RvLCB1MTYgdmlkKVxuIFx0aWYgKHJldClcbiBcdFx0Z290byBmaW5pc2g7XG4gXG4tXHQvKiBJZiBhbGwtbXVsdGljYXN0IGlzIGN1cnJlbnRseSBlbmFibGVkIGFuZCB0aGlzIFZMQU4gSUQgaXMgb25seSBvbmVcbi1cdCAqIGJlc2lkZXMgVkxBTi0wIHdlIGhhdmUgdG8gdXBkYXRlIGxvb2stdXAgdHlwZSBvZiBtdWx0aWNhc3QgcHJvbWlzY1xuLVx0ICogcnVsZSBmb3IgVkxBTi0wIGZyb20gSUNFX1NXX0xLVVBfUFJPTUlTQyB0byBJQ0VfU1dfTEtVUF9QUk9NSVNDX1ZMQU4uXG4rXHQvKiBPbiB0aGUgZmlyc3Qgbm9uLXplcm8gVkxBTiwgcHJvbW90ZSB0aGUgVkxBTi0wIG11bHRpY2FzdCBwcm9taXNjXG4rXHQgKiBydWxlIGZyb20gSUNFX1NXX0xLVVBfUFJPTUlTQyB0byBJQ0VfU1dfTEtVUF9QUk9NSVNDX1ZMQU4uIFNraXAgd2hlblxuK1x0ICogdGhlIERGTFQgUnggcnVsZSBpcyBpbnN0YWxsZWQ7IGl0IGFscmVhZHkgY292ZXJzIGV2ZXJ5IFZJRC5cbiBcdCAqL1xuIFx0aWYgKCh2c2ktXHUwMDNlY3VycmVudF9uZXRkZXZfZmxhZ3MgXHUwMDI2IElGRl9BTExNVUxUSSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWljZV9pc192c2lfZGZsdF92c2kodnNpKSBcdTAwMjZcdTAwMjZcbiBcdCAgICBpY2VfdnNpX251bV9ub25femVyb192bGFucyh2c2kpID09IDEpIHtcbiBcdFx0aWNlX2ZsdHJfY2xlYXJfdnNpX3Byb21pc2MoXHUwMDI2dnNpLVx1MDAzZWJhY2stXHUwMDNlaHcsIHZzaS1cdTAwM2VpZHgsXG4gXHRcdFx0XHRcdCAgIElDRV9NQ0FTVF9QUk9NSVNDX0JJVFMsIDApO1xuQEAgLTM3NjMsMTEgKzM4MTIsMTIgQEAgaW50IGljZV92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIF9fYmUxNiBwcm90bywgdTE2IHZpZClcbiBcdFx0XHRcdFx0ICAgSUNFX01DQVNUX1ZMQU5fUFJPTUlTQ19CSVRTLCB2aWQpO1xuIFxuIFx0aWYgKCFpY2VfdnNpX2hhc19ub25femVyb192bGFucyh2c2kpKSB7XG4tXHRcdC8qIFVwZGF0ZSBsb29rLXVwIHR5cGUgb2YgbXVsdGljYXN0IHByb21pc2MgcnVsZSBmb3IgVkxBTiAwXG4tXHRcdCAqIGZyb20gSUNFX1NXX0xLVVBfUFJPTUlTQ19WTEFOIHRvIElDRV9TV19MS1VQX1BST01JU0Mgd2hlblxuLVx0XHQgKiBhbGwtbXVsdGljYXN0IGlzIGVuYWJsZWQgYW5kIFZMQU4gMCBpcyB0aGUgb25seSBWTEFOIHJ1bGUuXG4rXHRcdC8qIExhc3Qgbm9uLXplcm8gVkxBTiBnb25lOiBkZW1vdGUgdGhlIFZMQU4tMCBtdWx0aWNhc3QgcHJvbWlzY1xuK1x0XHQgKiBydWxlIGJhY2sgdG8gSUNFX1NXX0xLVVBfUFJPTUlTQy4gU2tpcCB3aGVuIHRoZSBERkxUIFJ4IHJ1bGVcbitcdFx0ICogaXMgaW5zdGFsbGVkOyBubyByZWNpcGUgc3dhcCBpcyBuZWVkZWQuXG4gXHRcdCAqL1xuLVx0XHRpZiAodnNpLVx1MDAzZWN1cnJlbnRfbmV0ZGV2X2ZsYWdzIFx1MDAyNiBJRkZfQUxMTVVMVEkpIHtcbitcdFx0aWYgKCh2c2ktXHUwMDNlY3VycmVudF9uZXRkZXZfZmxhZ3MgXHUwMDI2IElGRl9BTExNVUxUSSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhaWNlX2lzX3ZzaV9kZmx0X3ZzaSh2c2kpKSB7XG4gXHRcdFx0aWNlX2ZsdHJfY2xlYXJfdnNpX3Byb21pc2MoXHUwMDI2dnNpLVx1MDAzZWJhY2stXHUwMDNlaHcsIHZzaS1cdTAwM2VpZHgsXG4gXHRcdFx0XHRcdFx0ICAgSUNFX01DQVNUX1ZMQU5fUFJPTUlTQ19CSVRTLFxuIFx0XHRcdFx0XHRcdCAgIDApO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTE6NTU6MzAuMzkwOTMyNTY5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTAyNzAxNjcyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZlYXNpYmlsaXR5IG9mIHRoZSBJY2UgRHJpdmVyIFBhdGNoKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBUaGlzIHBhdGNoIHNlcmllcyB0b3VjaGVzIHRoZSBgaWNlYCBkcml2ZXIsIHNwZWNpZmljYWxseSBgaWNlX2Vzd2l0Y2guY2AgYW5kIGBpY2VfbWFpbi5jYC4gSXQncyBhbHRlcmluZyBwcm9taXNjdW91cyBtb2RlIGFuZCBWTEFOIGhhbmRsaW5nIHdpdGhpbiB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBkcml2ZXIuIENsZWFybHksIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIHRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBpbiBhIGZ1enplZCBlbnZpcm9ubWVudC5cblxuTXkgZmlyc3QgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgaXMgZWFzaWx5IGZ1enphYmxlLiBJdCdzIGEgbmV0d29yayBkcml2ZXIgYW5kIHRoZXJlZm9yZSBjb3VsZCBiZSB2dWxuZXJhYmxlLiBIb3dldmVyLCBpdOKAmXMgZm9yIHRoZSBJbnRlbCBFODAwIHNlcmllcyBoYXJkd2FyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIHRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBpbiBhIGZ1enplZCBlbnZpcm9ubWVudC5cblxuVGhpcyBtZWFucyBpdCdzIGxpa2VseSBhIHBoeXNpY2FsIGhhcmR3YXJlIGRldmljZS4gSWYgaXQncyBhIHBoeXNpY2FsIGRldmljZSwgSSBuZWVkIHRvIGtub3cgaWYgaXQncyBlbXVsYXRlZCBpbiBhbnkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIExldCBtZSBxdWlja2x5IGNoZWNrIGlmIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpIGVtdWxhdGVzIHRoZSBJbnRlbCBFODAwIHNlcmllcyAoaWNlKS4gTm8sIFFFTVUgZW11bGF0ZXMgZTEwMDAsIGlnYiwgYW5kIHZpcnRpby1uZXQsIGJ1dCBub3QgaWNlLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBpcyBhbnkgc29mdHdhcmUgZW11bGF0aW9uIG9yIGlmIHRoaXMgaXMgZW50aXJlbHkgaGFyZHdhcmUtZGVwZW5kZW50LiBJZiBpdCdzIGhhcmR3YXJlLWRlcGVuZGVudCwgaXQgd2lsbCBiZSBoYXJkIHRvIGZ1enosIHVubGVzcyB3ZSBoYXZlIFBDSSBwYXNzdGhyb3VnaC5cblxuVGhlIGluc3RydWN0aW9ucyBJIGhhdmUgZXhwbGljaXRseSBzdGF0ZSB0byBtYXJrIHBhdGNoZXMgYXMgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIiBpZiB0aGV5IGNvbnRhaW4gY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS5cblxuU28sIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpczogY2FuIEkgdGVzdCB0aGUgYGljZWAgZHJpdmVyIGluIFFFTVU/IE5vcm1hbGx5LCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2AgcmVxdWlyZXMgYWN0dWFsIEludGVsIEU4MDAgaGFyZHdhcmUuIExldCBtZSBkb3VibGUtY2hlY2sgaWYgdGhlcmUncyBhbnkgYGljZWAgZW11bGF0aW9uIGluIFFFTVUuIE5vLiBJcyB0aGVyZSBhbnkgd2F5IHRvIHRyaWdnZXIgdGhpcyBjb2RlIHdpdGhvdXQgaGFyZHdhcmU/XG5cbkxldCdzIGNoZWNrIGlmIHRoZXJlJ3MgYSBtb2NrIG9yIHNvbWUga2luZCBvZiB3b3JrYXJvdW5kLiBJJ2xsIHVzZSBgZ3JlcHBlcmAgdG8gc2VhcmNoIGZvciBhbnkgdGVzdHMgb3IgbW9jayBpbXBsZW1lbnRhdGlvbnMgcmVsYXRlZCB0byB0aGUgYGljZWAgZHJpdmVyLiBUaGlzIHdpbGwgYmUgdGhlIGRlY2lkaW5nIGZhY3Rvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg4NiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDExOjU1OjM5LjQxNzk1MjA3OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjgyODkxNjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImljZV9lc3dpdGNoX3NldHVwX2VudlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guYy0xMy0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guYzoxNDogKiBpY2VfZXN3aXRjaF9zZXR1cF9lbnYgLSBjb25maWd1cmUgZXN3aXRjaCBIVyBmaWx0ZXJzXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmMtMTUtICogQHBmOiBwb2ludGVyIHRvIFBGIHN0cnVjdFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmMtMTktICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmM6MjA6c3RhdGljIGludCBpY2VfZXN3aXRjaF9zZXR1cF9lbnYoc3RydWN0IGljZV9wZiAqcGYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmMtMjEte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmM9MzAzPXN0YXRpYyBpbnQgaWNlX2Vzd2l0Y2hfZW5hYmxlX3N3aXRjaGRldihzdHJ1Y3QgaWNlX3BmICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jLTMxOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guYzozMTk6XFx0aWYgKGljZV9lc3dpdGNoX3NldHVwX2VudihwZikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmMtMzIwLVxcdFxcdHJldHVybiAtRU5PREVWO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxMTo1NTo0MS43MDA4NTA1NjlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzIzMjMwNTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGljZWAgRHJpdmVyIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgaWNlYCBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgdGhvc2UgSW50ZWwgRTgwMCBzZXJpZXMgUENJZSBuZXR3b3JrIGNhcmRzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJUaGlzIGlzIGEgKnBoeXNpY2FsKiBkZXZpY2UgZHJpdmVyLlwiIFdlJ3JlIHRhbGtpbmcgYWJvdXQgZGlyZWN0IGludGVyYWN0aW9uIHdpdGggaGFyZHdhcmUgdGhyb3VnaCB0aGUgUENJZSBidXMuIEFuZCB0aGVyZSdzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBJJ20gYXdhcmUgb2YgaW4gUUVNVSBvciBldmVuIGJha2VkIGludG8gdGhlIExpbnV4IGtlcm5lbCBpdHNlbGYg4oCTIG5vdGhpbmcgbGlrZSBhIGBtYWM4MDIxMV9od3NpbWAgb3IgYSBgbmV0ZGV2c2ltYCB0byBtaW1pYyB0aGUgYmVoYXZpb3Igb2YgdGhpcyBraW5kIG9mIG5ldHdvcmsgYWRhcHRlci5cblxuR2l2ZW4gdGhhdCByZWFsaXR5LCBhbmQgYXNzdW1pbmcgdGhpcyBpcyBmb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBsaWtlIEdDRSBvciBRRU1VLCB0aGUgY29kZSBwYXRocyBhcmUgYmFzaWNhbGx5IHVucmVhY2hhYmxlLiBJIGNhbid0IGltYWdpbmUgYSBzY2VuYXJpbyB3aGVyZSBJIGNvdWxkIHRyaWdnZXIgYW55IG1lYW5pbmdmdWwgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGRyaXZlciwgYmVjYXVzZSB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBzaW1wbHkgaXNuJ3QgdGhlcmUgdG8gcmVzcG9uZC4gSW4gb3RoZXIgd29yZHMsIHRoZXJlJ3Mgbm90aGluZyB0byBcImZ1enpcIi5cblxuVGhlcmVmb3JlLCB3aXRob3V0IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiwgbXkgaW5pdGlhbCBjb25jbHVzaW9uIGlzIHRoYXQgdGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gaWYgSSdtIG1pc3Npbmcgc29tZXRoaW5nLCB0aG91Z2guLi4gTGV0IG1lIGRvdWJsZSBjaGVjayBpZiB0aGVyZSdzIGFueSBlbXVsYXRpb24gZm9yIGBpY2VgLi4uIEknbGwgY2hlY2sgbXkgbWVtb3J5IGFuZCBkbyBhIGN1cnNvcnkgc2VhcmNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjEzLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDExOjU1OjQ2LjAyNDA4MzQzOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDEwMjU0OTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19JQ0VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZz01OTI9Q09ORklHX0k0MEU9eVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc6NTkzOkNPTkZJR19JQ0U9eVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWctNTk0LUNPTkZJR19GTTEwSz15XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnPTYwOD1DT05GSUdfSTQwRT15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZzo2MDk6Q09ORklHX0lDRT15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy02MTAtQ09ORklHX0ZNMTBLPXlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19GTTEwSykgKz0gZm0xMGsvXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX0lDRSkgKz0gaWNlL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL01ha2VmaWxlLTIxLW9iai0kKENPTkZJR19JRFBGKSArPSBpZHBmL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL01ha2VmaWxlPTg9c3ViZGlyLWNjZmxhZ3MteSArPSAtSSQoc3JjKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19JQ0UpICs9IGljZS5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL01ha2VmaWxlLTEwLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL01ha2VmaWxlPTYwPWljZS0kKENPTkZJR19YRFBfU09DS0VUUykgKz0gaWNlX3hzay5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL01ha2VmaWxlOjYxOmljZS0kKENPTkZJR19JQ0VfU1dJVENIREVWKSArPSBpY2VfZXN3aXRjaC5vIGljZV9lc3dpdGNoX2JyLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvTWFrZWZpbGUtNjItaWNlLSQoQ09ORklHX0dOU1MpICs9IGljZV9nbnNzLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvTWFrZWZpbGU6NjM6aWNlLSQoQ09ORklHX0lDRV9IV01PTikgKz0gaWNlX2h3bW9uLm9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5oLTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmg6MTA6I2lmZGVmIENPTkZJR19JQ0VfU1dJVENIREVWXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmgtMTEtdm9pZCBpY2VfZXN3aXRjaF9kZXRhY2hfdmYoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfdmYgKnZmKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5oPTM0PXZvaWQgaWNlX2Vzd2l0Y2hfZGVjZmdfdnNpKHN0cnVjdCBpY2VfdnNpICp2c2ksIGNvbnN0IHU4ICptYWMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5oOjM1OiNlbHNlIC8qIENPTkZJR19JQ0VfU1dJVENIREVWICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmgtMzYtc3RhdGljIGlubGluZSB2b2lkXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guaD05OD1zdGF0aWMgaW5saW5lIHZvaWQgaWNlX2Vzd2l0Y2hfZGVjZmdfdnNpKHN0cnVjdCBpY2VfdnNpICp2c2ksIGNvbnN0IHU4ICptYWMpIHsgfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5oOjk5OiNlbmRpZiAvKiBDT05GSUdfSUNFX1NXSVRDSERFViAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5oLTEwMC0jZW5kaWYgLyogX0lDRV9FU1dJVENIX0hfICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2h3bW9uLmgtNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2h3bW9uLmg6NzojaWZkZWYgQ09ORklHX0lDRV9IV01PTlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaHdtb24uaC04LXZvaWQgaWNlX2h3bW9uX2luaXQoc3RydWN0IGljZV9wZiAqcGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaHdtb24uaD05PXZvaWQgaWNlX2h3bW9uX2V4aXQoc3RydWN0IGljZV9wZiAqcGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaHdtb24uaDoxMDojZWxzZSAvKiBDT05GSUdfSUNFX0hXTU9OICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9od21vbi5oLTExLXN0YXRpYyBpbmxpbmUgdm9pZCBpY2VfaHdtb25faW5pdChzdHJ1Y3QgaWNlX3BmICpwZikgeyB9XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9od21vbi5oPTEyPXN0YXRpYyBpbmxpbmUgdm9pZCBpY2VfaHdtb25fZXhpdChzdHJ1Y3QgaWNlX3BmICpwZikgeyB9XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9od21vbi5oOjEzOiNlbmRpZiAvKiBDT05GSUdfSUNFX0hXTU9OICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9od21vbi5oLTE0LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYz0yMDM2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWNlX2Nyb3NzdHN0YW1wX2NmZyBpY2VfY3Jvc3N0c3RhbXBfY2ZnX2U4MnggPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTIwNDgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoyMDQ5OiNpZmRlZiBDT05GSUdfSUNFX0hXVFNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTIwNTAtc3RhdGljIGNvbnN0IHN0cnVjdCBpY2VfY3Jvc3N0c3RhbXBfY2ZnIGljZV9jcm9zc3RzdGFtcF9jZmdfZTgzMCA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjA2Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjIwNjM6I2VuZGlmIC8qIENPTkZJR19JQ0VfSFdUUyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjA2NC0vKipcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM9MjE3NT1zdGF0aWMgaW50IGljZV9wdHBfZ2V0Y3Jvc3N0c3RhbXAoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yMTg4LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MjE4OTojaWZkZWYgQ09ORklHX0lDRV9IV1RTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yMTkwLVxcdGNhc2UgSUNFX01BQ19FODMwOlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yMTkyLVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MjE5MzojZW5kaWYgLyogQ09ORklHX0lDRV9IV1RTICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yMTk0LVxcdGRlZmF1bHQ6XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTI1MjM9c3RhdGljIHZvaWQgaWNlX3B0cF9zZXRfZnVuY3NfZTgzMChzdHJ1Y3QgaWNlX3BmICpwZilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTI1MjQte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MjUyNTojaWZkZWYgQ09ORklHX0lDRV9IV1RTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yNTI2LVxcdGlmIChwY2llX3B0bV9lbmFibGVkKHBmLVxcdTAwM2VwZGV2KSBcXHUwMDI2XFx1MDAyNiBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVJUKSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjUyOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjI1Mjk6I2VuZGlmIC8qIENPTkZJR19JQ0VfSFdUUyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjUzMC1cXHQvKiBSZXN0IG9mIHRoZSBjb25maWcgaXMgdGhlIHNhbWUgYXMgYmFzZSBFODEwICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDExOjU1OjQ4LjQzNDM0MzU5NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5MjQ2ODI0MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBXb3J0aEZ1enppbmcgRmxhZyBmb3IgdGhlIGBpY2VgIERyaXZlcioqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgYGljZWAgZHJpdmVyLCB3aGljaCwgYXMgd2Uga25vdywgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciB0aGUgSW50ZWwgRTgwMCBTZXJpZXMgUENJZSBuZXR3b3JrIGNhcmRzLiBUaGlzIG1lYW5zIGl0J3MgYSBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXIsIG5vdCBzb21ldGhpbmcgYWJzdHJhY3QuIE5vdywgY29uc2lkZXJpbmcgbXkgZXhwZXJpZW5jZSB3aXRoIHZpcnR1YWxpemF0aW9uLCBlc3BlY2lhbGx5IGluIGVudmlyb25tZW50cyBsaWtlIEdDRSBhbmQgUUVNVSwgaXQncyBjbGVhciB0aGVyZSdzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBvZiB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIG9yLCBmb3IgdGhhdCBtYXR0ZXIsIGl0cyBkcml2ZXIgcHJlc2VudCB3aXRoaW4gZWl0aGVyIFFFTVUncyBvciB0aGUgc3RhbmRhcmQgTGludXgga2VybmVsIGNvZGViYXNlLiBJZiB0aGUgaGFyZHdhcmUgaXMgbm90IHByZXNlbnQsIHRoZW4gaXRzIHJlc3BlY3RpdmUgZHJpdmVyJ3MgZnVuY3Rpb25zIGFyZSBub3QgbGlrZWx5IHRvIGdldCBpbnZva2VkLlxuXG5HaXZlbiB0aGF0LCBJJ20gZm9yY2VkIHRvIGNvbmNsdWRlIHRoYXQgYW55IGNvZGUgcGF0aHMgcmVsYXRlZCB0byB0aGUgYGljZWAgZHJpdmVyIGFyZSBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSB3aXRoaW4gdGhlc2UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZXJlJ3Mgbm8gcHJhY3RpY2FsIHZhbHVlIGluIGZ1enppbmcgdGhpcyBkcml2ZXIgd2l0aGluIGEgdmlydHVhbCBjb250ZXh0LCBhcyB0aGUgaW50ZW5kZWQgY29uZGl0aW9ucyB0aGF0IHdvdWxkIHRyaWdnZXIgdGhlIGZ1enppbmcgZG8gbm90IGV4aXN0LlxuXG5Db25zZXF1ZW50bHksIEknbSBnb2luZyB0byBzZXQgdGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgdG8gYGZhbHNlYC4gSSBiZWxpZXZlIG15IHJlYXNvbmluZywgYmFzZWQgb24gdGhlIGhhcmR3YXJlIGRlcGVuZGVuY2UgYW5kIHRoZSBsYWNrIG9mIGVtdWxhdGlvbiBpbiBjb21tb24gdmlydHVhbGl6YXRpb24gcGxhdGZvcm1zLCBpcyBzb3VuZC4gVGhpcyBpcyBtb3JlIG9mIGFuIGFzc2Vzc21lbnQgb2YgcHJhY3RpY2FsIGZlYXNpYmlsaXR5IHJhdGhlciB0aGFuIGFuIGludHJpbnNpYyBjaGFyYWN0ZXJpc3RpYyBvZiB0aGUgY29kZS4gV2UgY2FuJ3Qgc2FmZWx5IHRlc3QgdGhpcyBpbiBRRU1VLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDUyLCJPdXRwdXRUb2tlbnMiOjkyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTE6NTU6NTUuMzU5MDI4ODI5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBMaW51eCBEcml2ZXIgKGljZSkuIFRoaXMgZHJpdmVyIGlzIGZvciBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGFuZCBsYWNrcyBzb2Z0d2FyZSBlbXVsYXRpb24gaW4gUUVNVSBvciB0aGUgTGludXgga2VybmVsLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCB0ZXN0IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgTGludXggRHJpdmVyIChpY2UpLiBUaGlzIGRyaXZlciBpcyBmb3IgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBhbmQgbGFja3Mgc29mdHdhcmUgZW11bGF0aW9uIGluIFFFTVUgb3IgdGhlIExpbnV4IGtlcm5lbC4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowcgjk2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-22 11:48:04 +0000 UTC FinishedAt: 2026-06-22 11:55:57 +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+CgkJCTx0ZD4yMDI2LzA2LzIyIDExOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIExpbnV4IERyaXZlciAoaWNlKS4gVGhpcyBkcml2ZXIgaXMgZm9yIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgYW5kIGxhY2tzIHNvZnR3YXJlIGVtdWxhdGlvbiBpbiBRRU1VIG9yIHRoZSBMaW51eCBrZXJuZWwuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIHRlc3QgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDExOjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2U5MzJhYjZhZThjOTlhZmJjMzNjMTk0MGVlMzNlMWI5MDlhZjdlN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDIyIDExOjU1OjI4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmNcbmluZGV4IDJlNGYwOTY5MDM1Zjc3Li40ODI3M2VmOWY2OWRjOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guY1xuQEAgLTY2LDggJiM0Mzs2NiwxMCBAQCBzdGF0aWMgaW50IGljZV9lc3dpdGNoX3NldHVwX2VudihzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdGljZV9jZmdfZGZsdF92c2kodXBsaW5rX3ZzaS1cdTAwM2Vwb3J0X2luZm8sIHVwbGlua192c2ktXHUwMDNlaWR4LCBmYWxzZSxcbiBcdFx0XHQgSUNFX0ZMVFJfVFgpO1xuIGVycl9kZWZfdHg6XG4tXHRpY2VfY2ZnX2RmbHRfdnNpKHVwbGlua192c2ktXHUwMDNlcG9ydF9pbmZvLCB1cGxpbmtfdnNpLVx1MDAzZWlkeCwgZmFsc2UsXG4tXHRcdFx0IElDRV9GTFRSX1JYKTtcbiYjNDM7XHQvKiBrZWVwIHRoZSBSeCBERkxUIHJ1bGUgaWYgdGhlIHVwbGluayBpcyBwcm9taXNjdW91cyAoc2VlIHJlbGVhc2VfZW52KSAqL1xuJiM0MztcdGlmICghKHVwbGlua192c2ktXHUwMDNlbmV0ZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfUFJPTUlTQykpXG4mIzQzO1x0XHRpY2VfY2ZnX2RmbHRfdnNpKHVwbGlua192c2ktXHUwMDNlcG9ydF9pbmZvLCB1cGxpbmtfdnNpLVx1MDAzZWlkeCxcbiYjNDM7XHRcdFx0XHQgZmFsc2UsIElDRV9GTFRSX1JYKTtcbiBlcnJfZGVmX3J4OlxuIFx0aWNlX3ZzaV9kZWxfdmxhbl96ZXJvKHVwbGlua192c2kpO1xuIGVycl92bGFuX3plcm86XG5AQCAtMjc4LDggJiM0MzsyODAsMTYgQEAgc3RhdGljIHZvaWQgaWNlX2Vzd2l0Y2hfcmVsZWFzZV9lbnYoc3RydWN0IGljZV9wZiAqcGYpXG4gXHR2bGFuX29wcy1cdTAwM2VlbmFfcnhfZmlsdGVyaW5nKHVwbGlua192c2kpO1xuIFx0aWNlX2NmZ19kZmx0X3ZzaSh1cGxpbmtfdnNpLVx1MDAzZXBvcnRfaW5mbywgdXBsaW5rX3ZzaS1cdTAwM2VpZHgsIGZhbHNlLFxuIFx0XHRcdCBJQ0VfRkxUUl9UWCk7XG4tXHRpY2VfY2ZnX2RmbHRfdnNpKHVwbGlua192c2ktXHUwMDNlcG9ydF9pbmZvLCB1cGxpbmtfdnNpLVx1MDAzZWlkeCwgZmFsc2UsXG4tXHRcdFx0IElDRV9GTFRSX1JYKTtcbiYjNDM7XG4mIzQzO1x0LyogS2VlcCB0aGUgUnggREZMVCBydWxlIGlmIHRoZSB1cGxpbmsgaXMgcHJvbWlzY3VvdXM7IGl0IG11c3Qgb3V0bGl2ZVxuJiM0MztcdCAqIHRoZSBzZXNzaW9uLiBUZXN0IHRoZSBsaXZlIG5ldGRldi1cdTAwM2VmbGFncywgdGhlIHNhbWUgdmFsdWVcbiYjNDM7XHQgKiBlbmFfcnhfZmlsdGVyaW5nKCkgLVx1MDAzZSBpY2VfY2ZnX3ZsYW5fcHJ1bmluZygpIGFib3ZlIGtleXMgaXRzIGRlY2lzaW9uXG4mIzQzO1x0ICogb24sIHNvIHRoZSBwcmVzZXJ2ZWQgREZMVCBydWxlIGFuZCB0aGUgcHJ1bmluZyBzdGF0ZSBzdGF5IGNvbnNpc3RlbnQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCEodXBsaW5rX3ZzaS1cdTAwM2VuZXRkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9QUk9NSVNDKSlcbiYjNDM7XHRcdGljZV9jZmdfZGZsdF92c2kodXBsaW5rX3ZzaS1cdTAwM2Vwb3J0X2luZm8sIHVwbGlua192c2ktXHUwMDNlaWR4LFxuJiM0MztcdFx0XHRcdCBmYWxzZSwgSUNFX0ZMVFJfUlgpO1xuJiM0MztcbiBcdGljZV9mbHRyX2FkZF9tYWNfYW5kX2Jyb2FkY2FzdCh1cGxpbmtfdnNpLFxuIFx0XHRcdFx0ICAgICAgIHVwbGlua192c2ktXHUwMDNlcG9ydF9pbmZvLVx1MDAzZW1hYy5wZXJtX2FkZHIsXG4gXHRcdFx0XHQgICAgICAgSUNFX0ZXRF9UT19WU0kpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbmluZGV4IGUyZmJlMTExZjg0OTY5Li5lZmIxZjUzNmRlNmM3YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xuQEAgLTI3NCw3ICYjNDM7Mjc0LDggQEAgc3RhdGljIGludCBpY2Vfc2V0X3Byb21pc2Moc3RydWN0IGljZV92c2kgKnZzaSwgdTggcHJvbWlzY19tKVxuIFx0aWYgKHZzaS1cdTAwM2V0eXBlICE9IElDRV9WU0lfUEYpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKGljZV92c2lfaGFzX25vbl96ZXJvX3ZsYW5zKHZzaSkpIHtcbiYjNDM7XHQvKiBza2lwIHBlci1WSUQgZXhwYW5zaW9uOyB0aGUgREZMVCBSeCBydWxlIGFscmVhZHkgY292ZXJzIGV2ZXJ5IFZJRCAqL1xuJiM0MztcdGlmIChpY2VfdnNpX2hhc19ub25femVyb192bGFucyh2c2kpIFx1MDAyNlx1MDAyNiAhaWNlX2lzX3ZzaV9kZmx0X3ZzaSh2c2kpKSB7XG4gXHRcdHByb21pc2NfbSB8PSAoSUNFX1BST01JU0NfVkxBTl9SWCB8IElDRV9QUk9NSVNDX1ZMQU5fVFgpO1xuIFx0XHRzdGF0dXMgPSBpY2VfZmx0cl9zZXRfdmxhbl92c2lfcHJvbWlzYyhcdTAwMjZ2c2ktXHUwMDNlYmFjay1cdTAwM2VodywgdnNpLFxuIFx0XHRcdFx0XHRcdCAgICAgICBwcm9taXNjX20pO1xuQEAgLTMwNCw5ICYjNDM7MzA1LDE5IEBAIHN0YXRpYyBpbnQgaWNlX2NsZWFyX3Byb21pc2Moc3RydWN0IGljZV92c2kgKnZzaSwgdTggcHJvbWlzY19tKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGlmIChpY2VfdnNpX2hhc19ub25femVyb192bGFucyh2c2kpKSB7XG4tXHRcdHByb21pc2NfbSB8PSAoSUNFX1BST01JU0NfVkxBTl9SWCB8IElDRV9QUk9NSVNDX1ZMQU5fVFgpO1xuJiM0MztcdFx0aW50IHZpZDBfc3RhdHVzO1xuJiM0MztcbiYjNDM7XHRcdC8qIHNldCB0aW1lIHVzZWQgZWl0aGVyIHJlY2lwZSAocGVyLVZJRCBQUk9NSVNDX1ZMQU4sIG9yIHZpZD0wXG4mIzQzO1x0XHQgKiBQUk9NSVNDIHZpYSB0aGUgaWNlX3NldF9wcm9taXNjKCkgZWxzZSBicmFuY2gpLCBzbyBjbGVhclxuJiM0MztcdFx0ICogYm90aDsgY2xlYXJpbmcgYW4gYWJzZW50IHJ1bGUgc3VjY2VlZHNcbiYjNDM7XHRcdCAqL1xuIFx0XHRzdGF0dXMgPSBpY2VfZmx0cl9jbGVhcl92bGFuX3ZzaV9wcm9taXNjKFx1MDAyNnZzaS1cdTAwM2ViYWNrLVx1MDAzZWh3LCB2c2ksXG4tXHRcdFx0XHRcdFx0XHQgcHJvbWlzY19tKTtcbiYjNDM7XHRcdFx0XHRwcm9taXNjX20gfCBJQ0VfUFJPTUlTQ19WTEFOX1JYIHxcbiYjNDM7XHRcdFx0XHRJQ0VfUFJPTUlTQ19WTEFOX1RYKTtcbiYjNDM7XHRcdHZpZDBfc3RhdHVzID0gaWNlX2ZsdHJfY2xlYXJfdnNpX3Byb21pc2MoXHUwMDI2dnNpLVx1MDAzZWJhY2stXHUwMDNlaHcsXG4mIzQzO1x0XHRcdFx0XHRcdFx0IHZzaS1cdTAwM2VpZHgsIHByb21pc2NfbSwgMCk7XG4mIzQzO1x0XHRpZiAoIXN0YXR1cylcbiYjNDM7XHRcdFx0c3RhdHVzID0gdmlkMF9zdGF0dXM7XG4gXHR9IGVsc2Uge1xuIFx0XHRzdGF0dXMgPSBpY2VfZmx0cl9jbGVhcl92c2lfcHJvbWlzYyhcdTAwMjZ2c2ktXHUwMDNlYmFjay1cdTAwM2VodywgdnNpLVx1MDAzZWlkeCxcbiBcdFx0XHRcdFx0XHQgICAgcHJvbWlzY19tLCAwKTtcbkBAIC0zMTcsNiAmIzQzOzMyOCw0OSBAQCBzdGF0aWMgaW50IGljZV9jbGVhcl9wcm9taXNjKHN0cnVjdCBpY2VfdnNpICp2c2ksIHU4IHByb21pc2NfbSlcbiBcdHJldHVybiBzdGF0dXM7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogaWNlX3ZzaV9leGl0X2RmbHRfcHJvbWlzYyAtIGRyb3AgdGhlIGRlZmF1bHQgVlNJIFJ4IHJ1bGUgb24gcHJvbWlzYyBvZmZcbiYjNDM7ICogQHZzaTogdGhlIFZTSSBsZWF2aW5nIHByb21pc2N1b3VzIG1vZGVcbiYjNDM7ICpcbiYjNDM7ICogRm9yIGFuIElGRl9BTExNVUxUSSBWU0kgd2l0aCBWTEFOcyB0aGUgcGVyLVZJRCBtdWx0aWNhc3QgcnVsZXMgYXJlXG4mIzQzOyAqIHJlaW5zdGF0ZWQgYmVmb3JlIHRoZSBkZWZhdWx0IHJ1bGUgaXMgY2xlYXJlZCBzbyBjb3ZlcmFnZSBuZXZlciBsYXBzZXM7XG4mIzQzOyAqIHRoZSB0aGVuIHJlZHVuZGFudCB2aWQ9MCBydWxlIGlzIGRyb3BwZWQgYmVzdC1lZmZvcnQuIFRoZSBjYWxsZWVzIGxvZ1xuJiM0MzsgKiB0aGVpciBvd24gZmFpbHVyZXMsIHNvIGVycm9yIHJldHVybnMgYXJlIG5vdCByZS1sb2dnZWQgaGVyZS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGVycm9yIHdpdGggdGhlIGRlZmF1bHQgcnVsZSBsZWZ0IGluIHBsYWNlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBpY2VfdnNpX2V4aXRfZGZsdF9wcm9taXNjKHN0cnVjdCBpY2VfdnNpICp2c2kpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWNlX3ZzaV92bGFuX29wcyAqdmxhbl9vcHMgPSBpY2VfZ2V0X2NvbXBhdF92c2lfdmxhbl9vcHModnNpKTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdnNpLVx1MDAzZW5ldGRldjtcbiYjNDM7XHRzdHJ1Y3QgaWNlX2h3ICpodyA9IFx1MDAyNnZzaS1cdTAwM2ViYWNrLVx1MDAzZWh3O1xuJiM0MztcdGJvb2wgcmVzdG9yZV9tYztcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRyZXN0b3JlX21jID0gKHZzaS1cdTAwM2VjdXJyZW50X25ldGRldl9mbGFncyBcdTAwMjYgSUZGX0FMTE1VTFRJKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAgaWNlX3ZzaV9oYXNfbm9uX3plcm9fdmxhbnModnNpKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlc3RvcmVfbWMpIHtcbiYjNDM7XHRcdGVyciA9IGljZV9mbHRyX3NldF92bGFuX3ZzaV9wcm9taXNjKGh3LCB2c2ksXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBJQ0VfTUNBU1RfVkxBTl9QUk9NSVNDX0JJVFMpO1xuJiM0MztcdFx0aWYgKGVyciBcdTAwMjZcdTAwMjYgZXJyICE9IC1FRVhJU1QpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBpY2VfY2xlYXJfZGZsdF92c2kodnNpKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKG5ldGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKVxuJiM0MztcdFx0dmxhbl9vcHMtXHUwMDNlZW5hX3J4X2ZpbHRlcmluZyh2c2kpO1xuJiM0MztcbiYjNDM7XHRpZiAocmVzdG9yZV9tYylcbiYjNDM7XHRcdGljZV9mbHRyX2NsZWFyX3ZzaV9wcm9taXNjKGh3LCB2c2ktXHUwMDNlaWR4LCBJQ0VfTUNBU1RfUFJPTUlTQ19CSVRTLFxuJiM0MztcdFx0XHRcdFx0ICAgMCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGljZV92c2lfc3luY19mbHRyIC0gVXBkYXRlIHRoZSBWU0kgZmlsdGVyIGxpc3QgdG8gdGhlIEhXXG4gICogQHZzaTogcHRyIHRvIHRoZSBWU0lcbkBAIC00NDIsMTcgJiM0Mzs0OTYsMTIgQEAgc3RhdGljIGludCBpY2VfdnNpX3N5bmNfZmx0cihzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdC8qIENsZWFyIFJ4IGZpbHRlciB0byByZW1vdmUgdHJhZmZpYyBmcm9tIHdpcmUgKi9cbiBcdFx0XHRpZiAoaWNlX2lzX3ZzaV9kZmx0X3ZzaSh2c2kpKSB7XG4tXHRcdFx0XHRlcnIgPSBpY2VfY2xlYXJfZGZsdF92c2kodnNpKTtcbiYjNDM7XHRcdFx0XHRlcnIgPSBpY2VfdnNpX2V4aXRfZGZsdF9wcm9taXNjKHZzaSk7XG4gXHRcdFx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDtFcnJvciAlZCBjbGVhcmluZyBkZWZhdWx0IFZTSSAlaSBSeCBydWxlXFxuXCYjMzQ7LFxuLVx0XHRcdFx0XHRcdCAgIGVyciwgdnNpLVx1MDAzZXZzaV9udW0pO1xuIFx0XHRcdFx0XHR2c2ktXHUwMDNlY3VycmVudF9uZXRkZXZfZmxhZ3MgfD1cbiBcdFx0XHRcdFx0XHRJRkZfUFJPTUlTQztcbiBcdFx0XHRcdFx0Z290byBvdXRfcHJvbWlzYztcbiBcdFx0XHRcdH1cbi1cdFx0XHRcdGlmICh2c2ktXHUwMDNlbmV0ZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNlxuLVx0XHRcdFx0ICAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUilcbi1cdFx0XHRcdFx0dmxhbl9vcHMtXHUwMDNlZW5hX3J4X2ZpbHRlcmluZyh2c2kpO1xuIFx0XHRcdH1cbiBcbiBcdFx0XHQvKiBkaXNhYmxlIGFsbG11bHRpIGhlcmUsIGJ1dCBvbmx5IGlmIGFsbG11bHRpIGlzIG5vdFxuQEAgLTM2NzUsMTAgJiM0MzszNzI0LDkgQEAgaW50IGljZV92bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgX19iZTE2IHByb3RvLCB1MTYgdmlkKVxuIFx0d2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoSUNFX0NGR19CVVNZLCB2c2ktXHUwMDNlc3RhdGUpKVxuIFx0XHR1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7XG4gXG4tXHQvKiBBZGQgbXVsdGljYXN0IHByb21pc2MgcnVsZSBmb3IgdGhlIFZMQU4gSUQgdG8gYmUgYWRkZWQgaWZcbi1cdCAqIGFsbC1tdWx0aWNhc3QgaXMgY3VycmVudGx5IGVuYWJsZWQuXG4tXHQgKi9cbi1cdGlmICh2c2ktXHUwMDNlY3VycmVudF9uZXRkZXZfZmxhZ3MgXHUwMDI2IElGRl9BTExNVUxUSSkge1xuJiM0MztcdC8qIHNraXAgdGhlIHBlci1WSUQgcnVsZSB3aGVuIHRoZSBERkxUIFJ4IHJ1bGUgYWxyZWFkeSBjb3ZlcnMgdGhpcyBWSUQgKi9cbiYjNDM7XHRpZiAoKHZzaS1cdTAwM2VjdXJyZW50X25ldGRldl9mbGFncyBcdTAwMjYgSUZGX0FMTE1VTFRJKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIWljZV9pc192c2lfZGZsdF92c2kodnNpKSkge1xuIFx0XHRyZXQgPSBpY2VfZmx0cl9zZXRfdnNpX3Byb21pc2MoXHUwMDI2dnNpLVx1MDAzZWJhY2stXHUwMDNlaHcsIHZzaS1cdTAwM2VpZHgsXG4gXHRcdFx0XHRcdCAgICAgICBJQ0VfTUNBU1RfVkxBTl9QUk9NSVNDX0JJVFMsXG4gXHRcdFx0XHRcdCAgICAgICB2aWQpO1xuQEAgLTM2OTYsMTEgJiM0MzszNzQ0LDEyIEBAIGludCBpY2Vfdmxhbl9yeF9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIF9fYmUxNiBwcm90bywgdTE2IHZpZClcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gZmluaXNoO1xuIFxuLVx0LyogSWYgYWxsLW11bHRpY2FzdCBpcyBjdXJyZW50bHkgZW5hYmxlZCBhbmQgdGhpcyBWTEFOIElEIGlzIG9ubHkgb25lXG4tXHQgKiBiZXNpZGVzIFZMQU4tMCB3ZSBoYXZlIHRvIHVwZGF0ZSBsb29rLXVwIHR5cGUgb2YgbXVsdGljYXN0IHByb21pc2Ncbi1cdCAqIHJ1bGUgZm9yIFZMQU4tMCBmcm9tIElDRV9TV19MS1VQX1BST01JU0MgdG8gSUNFX1NXX0xLVVBfUFJPTUlTQ19WTEFOLlxuJiM0MztcdC8qIE9uIHRoZSBmaXJzdCBub24temVybyBWTEFOLCBwcm9tb3RlIHRoZSBWTEFOLTAgbXVsdGljYXN0IHByb21pc2NcbiYjNDM7XHQgKiBydWxlIGZyb20gSUNFX1NXX0xLVVBfUFJPTUlTQyB0byBJQ0VfU1dfTEtVUF9QUk9NSVNDX1ZMQU4uIFNraXAgd2hlblxuJiM0MztcdCAqIHRoZSBERkxUIFJ4IHJ1bGUgaXMgaW5zdGFsbGVkOyBpdCBhbHJlYWR5IGNvdmVycyBldmVyeSBWSUQuXG4gXHQgKi9cbiBcdGlmICgodnNpLVx1MDAzZWN1cnJlbnRfbmV0ZGV2X2ZsYWdzIFx1MDAyNiBJRkZfQUxMTVVMVEkpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhaWNlX2lzX3ZzaV9kZmx0X3ZzaSh2c2kpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGljZV92c2lfbnVtX25vbl96ZXJvX3ZsYW5zKHZzaSkgPT0gMSkge1xuIFx0XHRpY2VfZmx0cl9jbGVhcl92c2lfcHJvbWlzYyhcdTAwMjZ2c2ktXHUwMDNlYmFjay1cdTAwM2VodywgdnNpLVx1MDAzZWlkeCxcbiBcdFx0XHRcdFx0ICAgSUNFX01DQVNUX1BST01JU0NfQklUUywgMCk7XG5AQCAtMzc2MywxMSAmIzQzOzM4MTIsMTIgQEAgaW50IGljZV92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIF9fYmUxNiBwcm90bywgdTE2IHZpZClcbiBcdFx0XHRcdFx0ICAgSUNFX01DQVNUX1ZMQU5fUFJPTUlTQ19CSVRTLCB2aWQpO1xuIFxuIFx0aWYgKCFpY2VfdnNpX2hhc19ub25femVyb192bGFucyh2c2kpKSB7XG4tXHRcdC8qIFVwZGF0ZSBsb29rLXVwIHR5cGUgb2YgbXVsdGljYXN0IHByb21pc2MgcnVsZSBmb3IgVkxBTiAwXG4tXHRcdCAqIGZyb20gSUNFX1NXX0xLVVBfUFJPTUlTQ19WTEFOIHRvIElDRV9TV19MS1VQX1BST01JU0Mgd2hlblxuLVx0XHQgKiBhbGwtbXVsdGljYXN0IGlzIGVuYWJsZWQgYW5kIFZMQU4gMCBpcyB0aGUgb25seSBWTEFOIHJ1bGUuXG4mIzQzO1x0XHQvKiBMYXN0IG5vbi16ZXJvIFZMQU4gZ29uZTogZGVtb3RlIHRoZSBWTEFOLTAgbXVsdGljYXN0IHByb21pc2NcbiYjNDM7XHRcdCAqIHJ1bGUgYmFjayB0byBJQ0VfU1dfTEtVUF9QUk9NSVNDLiBTa2lwIHdoZW4gdGhlIERGTFQgUnggcnVsZVxuJiM0MztcdFx0ICogaXMgaW5zdGFsbGVkOyBubyByZWNpcGUgc3dhcCBpcyBuZWVkZWQuXG4gXHRcdCAqL1xuLVx0XHRpZiAodnNpLVx1MDAzZWN1cnJlbnRfbmV0ZGV2X2ZsYWdzIFx1MDAyNiBJRkZfQUxMTVVMVEkpIHtcbiYjNDM7XHRcdGlmICgodnNpLVx1MDAzZWN1cnJlbnRfbmV0ZGV2X2ZsYWdzIFx1MDAyNiBJRkZfQUxMTVVMVEkpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICFpY2VfaXNfdnNpX2RmbHRfdnNpKHZzaSkpIHtcbiBcdFx0XHRpY2VfZmx0cl9jbGVhcl92c2lfcHJvbWlzYyhcdTAwMjZ2c2ktXHUwMDNlYmFjay1cdTAwM2VodywgdnNpLVx1MDAzZWlkeCxcbiBcdFx0XHRcdFx0XHQgICBJQ0VfTUNBU1RfVkxBTl9QUk9NSVNDX0JJVFMsXG4gXHRcdFx0XHRcdFx0ICAgMCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTE6NTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgTGludXggRHJpdmVyIChpY2UpLiBUaGlzIGRyaXZlciBpcyBmb3IgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBhbmQgbGFja3Mgc29mdHdhcmUgZW11bGF0aW9uIGluIFFFTVUgb3IgdGhlIExpbnV4IGtlcm5lbC4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDdlOTMyYWI2YWU4Yzk5YWZiYzMzYzE5NDBlZTMzZTFiOTA5YWY3ZTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1biAyMiAxMTo1NToyOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmMKaW5kZXggMmU0ZjA5NjkwMzVmNzcuLjQ4MjczZWY5ZjY5ZGM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guYwpAQCAtNjYsOCAmIzQzOzY2LDEwIEBAIHN0YXRpYyBpbnQgaWNlX2Vzd2l0Y2hfc2V0dXBfZW52KHN0cnVjdCBpY2VfcGYgKnBmKQogCWljZV9jZmdfZGZsdF92c2kodXBsaW5rX3ZzaS0mZ3Q7cG9ydF9pbmZvLCB1cGxpbmtfdnNpLSZndDtpZHgsIGZhbHNlLAogCQkJIElDRV9GTFRSX1RYKTsKIGVycl9kZWZfdHg6Ci0JaWNlX2NmZ19kZmx0X3ZzaSh1cGxpbmtfdnNpLSZndDtwb3J0X2luZm8sIHVwbGlua192c2ktJmd0O2lkeCwgZmFsc2UsCi0JCQkgSUNFX0ZMVFJfUlgpOwomIzQzOwkvKiBrZWVwIHRoZSBSeCBERkxUIHJ1bGUgaWYgdGhlIHVwbGluayBpcyBwcm9taXNjdW91cyAoc2VlIHJlbGVhc2VfZW52KSAqLwomIzQzOwlpZiAoISh1cGxpbmtfdnNpLSZndDtuZXRkZXYtJmd0O2ZsYWdzICZhbXA7IElGRl9QUk9NSVNDKSkKJiM0MzsJCWljZV9jZmdfZGZsdF92c2kodXBsaW5rX3ZzaS0mZ3Q7cG9ydF9pbmZvLCB1cGxpbmtfdnNpLSZndDtpZHgsCiYjNDM7CQkJCSBmYWxzZSwgSUNFX0ZMVFJfUlgpOwogZXJyX2RlZl9yeDoKIAlpY2VfdnNpX2RlbF92bGFuX3plcm8odXBsaW5rX3ZzaSk7CiBlcnJfdmxhbl96ZXJvOgpAQCAtMjc4LDggJiM0MzsyODAsMTYgQEAgc3RhdGljIHZvaWQgaWNlX2Vzd2l0Y2hfcmVsZWFzZV9lbnYoc3RydWN0IGljZV9wZiAqcGYpCiAJdmxhbl9vcHMtJmd0O2VuYV9yeF9maWx0ZXJpbmcodXBsaW5rX3ZzaSk7CiAJaWNlX2NmZ19kZmx0X3ZzaSh1cGxpbmtfdnNpLSZndDtwb3J0X2luZm8sIHVwbGlua192c2ktJmd0O2lkeCwgZmFsc2UsCiAJCQkgSUNFX0ZMVFJfVFgpOwotCWljZV9jZmdfZGZsdF92c2kodXBsaW5rX3ZzaS0mZ3Q7cG9ydF9pbmZvLCB1cGxpbmtfdnNpLSZndDtpZHgsIGZhbHNlLAotCQkJIElDRV9GTFRSX1JYKTsKJiM0MzsKJiM0MzsJLyogS2VlcCB0aGUgUnggREZMVCBydWxlIGlmIHRoZSB1cGxpbmsgaXMgcHJvbWlzY3VvdXM7IGl0IG11c3Qgb3V0bGl2ZQomIzQzOwkgKiB0aGUgc2Vzc2lvbi4gVGVzdCB0aGUgbGl2ZSBuZXRkZXYtJmd0O2ZsYWdzLCB0aGUgc2FtZSB2YWx1ZQomIzQzOwkgKiBlbmFfcnhfZmlsdGVyaW5nKCkgLSZndDsgaWNlX2NmZ192bGFuX3BydW5pbmcoKSBhYm92ZSBrZXlzIGl0cyBkZWNpc2lvbgomIzQzOwkgKiBvbiwgc28gdGhlIHByZXNlcnZlZCBERkxUIHJ1bGUgYW5kIHRoZSBwcnVuaW5nIHN0YXRlIHN0YXkgY29uc2lzdGVudC4KJiM0MzsJICovCiYjNDM7CWlmICghKHVwbGlua192c2ktJmd0O25ldGRldi0mZ3Q7ZmxhZ3MgJmFtcDsgSUZGX1BST01JU0MpKQomIzQzOwkJaWNlX2NmZ19kZmx0X3ZzaSh1cGxpbmtfdnNpLSZndDtwb3J0X2luZm8sIHVwbGlua192c2ktJmd0O2lkeCwKJiM0MzsJCQkJIGZhbHNlLCBJQ0VfRkxUUl9SWCk7CiYjNDM7CiAJaWNlX2ZsdHJfYWRkX21hY19hbmRfYnJvYWRjYXN0KHVwbGlua192c2ksCiAJCQkJICAgICAgIHVwbGlua192c2ktJmd0O3BvcnRfaW5mby0mZ3Q7bWFjLnBlcm1fYWRkciwKIAkJCQkgICAgICAgSUNFX0ZXRF9UT19WU0kpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYwppbmRleCBlMmZiZTExMWY4NDk2OS4uZWZiMWY1MzZkZTZjN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jCkBAIC0yNzQsNyAmIzQzOzI3NCw4IEBAIHN0YXRpYyBpbnQgaWNlX3NldF9wcm9taXNjKHN0cnVjdCBpY2VfdnNpICp2c2ksIHU4IHByb21pc2NfbSkKIAlpZiAodnNpLSZndDt0eXBlICE9IElDRV9WU0lfUEYpCiAJCXJldHVybiAwOwogCi0JaWYgKGljZV92c2lfaGFzX25vbl96ZXJvX3ZsYW5zKHZzaSkpIHsKJiM0MzsJLyogc2tpcCBwZXItVklEIGV4cGFuc2lvbjsgdGhlIERGTFQgUnggcnVsZSBhbHJlYWR5IGNvdmVycyBldmVyeSBWSUQgKi8KJiM0MzsJaWYgKGljZV92c2lfaGFzX25vbl96ZXJvX3ZsYW5zKHZzaSkgJmFtcDsmYW1wOyAhaWNlX2lzX3ZzaV9kZmx0X3ZzaSh2c2kpKSB7CiAJCXByb21pc2NfbSB8PSAoSUNFX1BST01JU0NfVkxBTl9SWCB8IElDRV9QUk9NSVNDX1ZMQU5fVFgpOwogCQlzdGF0dXMgPSBpY2VfZmx0cl9zZXRfdmxhbl92c2lfcHJvbWlzYygmYW1wO3ZzaS0mZ3Q7YmFjay0mZ3Q7aHcsIHZzaSwKIAkJCQkJCSAgICAgICBwcm9taXNjX20pOwpAQCAtMzA0LDkgJiM0MzszMDUsMTkgQEAgc3RhdGljIGludCBpY2VfY2xlYXJfcHJvbWlzYyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1OCBwcm9taXNjX20pCiAJCXJldHVybiAwOwogCiAJaWYgKGljZV92c2lfaGFzX25vbl96ZXJvX3ZsYW5zKHZzaSkpIHsKLQkJcHJvbWlzY19tIHw9IChJQ0VfUFJPTUlTQ19WTEFOX1JYIHwgSUNFX1BST01JU0NfVkxBTl9UWCk7CiYjNDM7CQlpbnQgdmlkMF9zdGF0dXM7CiYjNDM7CiYjNDM7CQkvKiBzZXQgdGltZSB1c2VkIGVpdGhlciByZWNpcGUgKHBlci1WSUQgUFJPTUlTQ19WTEFOLCBvciB2aWQ9MAomIzQzOwkJICogUFJPTUlTQyB2aWEgdGhlIGljZV9zZXRfcHJvbWlzYygpIGVsc2UgYnJhbmNoKSwgc28gY2xlYXIKJiM0MzsJCSAqIGJvdGg7IGNsZWFyaW5nIGFuIGFic2VudCBydWxlIHN1Y2NlZWRzCiYjNDM7CQkgKi8KIAkJc3RhdHVzID0gaWNlX2ZsdHJfY2xlYXJfdmxhbl92c2lfcHJvbWlzYygmYW1wO3ZzaS0mZ3Q7YmFjay0mZ3Q7aHcsIHZzaSwKLQkJCQkJCQkgcHJvbWlzY19tKTsKJiM0MzsJCQkJcHJvbWlzY19tIHwgSUNFX1BST01JU0NfVkxBTl9SWCB8CiYjNDM7CQkJCUlDRV9QUk9NSVNDX1ZMQU5fVFgpOwomIzQzOwkJdmlkMF9zdGF0dXMgPSBpY2VfZmx0cl9jbGVhcl92c2lfcHJvbWlzYygmYW1wO3ZzaS0mZ3Q7YmFjay0mZ3Q7aHcsCiYjNDM7CQkJCQkJCSB2c2ktJmd0O2lkeCwgcHJvbWlzY19tLCAwKTsKJiM0MzsJCWlmICghc3RhdHVzKQomIzQzOwkJCXN0YXR1cyA9IHZpZDBfc3RhdHVzOwogCX0gZWxzZSB7CiAJCXN0YXR1cyA9IGljZV9mbHRyX2NsZWFyX3ZzaV9wcm9taXNjKCZhbXA7dnNpLSZndDtiYWNrLSZndDtodywgdnNpLSZndDtpZHgsCiAJCQkJCQkgICAgcHJvbWlzY19tLCAwKTsKQEAgLTMxNyw2ICYjNDM7MzI4LDQ5IEBAIHN0YXRpYyBpbnQgaWNlX2NsZWFyX3Byb21pc2Moc3RydWN0IGljZV92c2kgKnZzaSwgdTggcHJvbWlzY19tKQogCXJldHVybiBzdGF0dXM7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBpY2VfdnNpX2V4aXRfZGZsdF9wcm9taXNjIC0gZHJvcCB0aGUgZGVmYXVsdCBWU0kgUnggcnVsZSBvbiBwcm9taXNjIG9mZgomIzQzOyAqIEB2c2k6IHRoZSBWU0kgbGVhdmluZyBwcm9taXNjdW91cyBtb2RlCiYjNDM7ICoKJiM0MzsgKiBGb3IgYW4gSUZGX0FMTE1VTFRJIFZTSSB3aXRoIFZMQU5zIHRoZSBwZXItVklEIG11bHRpY2FzdCBydWxlcyBhcmUKJiM0MzsgKiByZWluc3RhdGVkIGJlZm9yZSB0aGUgZGVmYXVsdCBydWxlIGlzIGNsZWFyZWQgc28gY292ZXJhZ2UgbmV2ZXIgbGFwc2VzOwomIzQzOyAqIHRoZSB0aGVuIHJlZHVuZGFudCB2aWQ9MCBydWxlIGlzIGRyb3BwZWQgYmVzdC1lZmZvcnQuIFRoZSBjYWxsZWVzIGxvZwomIzQzOyAqIHRoZWlyIG93biBmYWlsdXJlcywgc28gZXJyb3IgcmV0dXJucyBhcmUgbm90IHJlLWxvZ2dlZCBoZXJlLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGVycm9yIHdpdGggdGhlIGRlZmF1bHQgcnVsZSBsZWZ0IGluIHBsYWNlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgaWNlX3ZzaV9leGl0X2RmbHRfcHJvbWlzYyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKQomIzQzO3sKJiM0MzsJc3RydWN0IGljZV92c2lfdmxhbl9vcHMgKnZsYW5fb3BzID0gaWNlX2dldF9jb21wYXRfdnNpX3ZsYW5fb3BzKHZzaSk7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB2c2ktJmd0O25ldGRldjsKJiM0MzsJc3RydWN0IGljZV9odyAqaHcgPSAmYW1wO3ZzaS0mZ3Q7YmFjay0mZ3Q7aHc7CiYjNDM7CWJvb2wgcmVzdG9yZV9tYzsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJcmVzdG9yZV9tYyA9ICh2c2ktJmd0O2N1cnJlbnRfbmV0ZGV2X2ZsYWdzICZhbXA7IElGRl9BTExNVUxUSSkgJmFtcDsmYW1wOwomIzQzOwkJICAgICBpY2VfdnNpX2hhc19ub25femVyb192bGFucyh2c2kpOwomIzQzOwomIzQzOwlpZiAocmVzdG9yZV9tYykgewomIzQzOwkJZXJyID0gaWNlX2ZsdHJfc2V0X3ZsYW5fdnNpX3Byb21pc2MoaHcsIHZzaSwKJiM0MzsJCQkJCQkgICAgSUNFX01DQVNUX1ZMQU5fUFJPTUlTQ19CSVRTKTsKJiM0MzsJCWlmIChlcnIgJmFtcDsmYW1wOyBlcnIgIT0gLUVFWElTVCkKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IGljZV9jbGVhcl9kZmx0X3ZzaSh2c2kpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJaWYgKG5ldGRldi0mZ3Q7ZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKQomIzQzOwkJdmxhbl9vcHMtJmd0O2VuYV9yeF9maWx0ZXJpbmcodnNpKTsKJiM0MzsKJiM0MzsJaWYgKHJlc3RvcmVfbWMpCiYjNDM7CQlpY2VfZmx0cl9jbGVhcl92c2lfcHJvbWlzYyhodywgdnNpLSZndDtpZHgsIElDRV9NQ0FTVF9QUk9NSVNDX0JJVFMsCiYjNDM7CQkJCQkgICAwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBpY2VfdnNpX3N5bmNfZmx0ciAtIFVwZGF0ZSB0aGUgVlNJIGZpbHRlciBsaXN0IHRvIHRoZSBIVwogICogQHZzaTogcHRyIHRvIHRoZSBWU0kKQEAgLTQ0MiwxNyAmIzQzOzQ5NiwxMiBAQCBzdGF0aWMgaW50IGljZV92c2lfc3luY19mbHRyKHN0cnVjdCBpY2VfdnNpICp2c2kpCiAJCX0gZWxzZSB7CiAJCQkvKiBDbGVhciBSeCBmaWx0ZXIgdG8gcmVtb3ZlIHRyYWZmaWMgZnJvbSB3aXJlICovCiAJCQlpZiAoaWNlX2lzX3ZzaV9kZmx0X3ZzaSh2c2kpKSB7Ci0JCQkJZXJyID0gaWNlX2NsZWFyX2RmbHRfdnNpKHZzaSk7CiYjNDM7CQkJCWVyciA9IGljZV92c2lfZXhpdF9kZmx0X3Byb21pc2ModnNpKTsKIAkJCQlpZiAoZXJyKSB7Ci0JCQkJCW5ldGRldl9lcnIobmV0ZGV2LCAmIzM0O0Vycm9yICVkIGNsZWFyaW5nIGRlZmF1bHQgVlNJICVpIFJ4IHJ1bGVcbiYjMzQ7LAotCQkJCQkJICAgZXJyLCB2c2ktJmd0O3ZzaV9udW0pOwogCQkJCQl2c2ktJmd0O2N1cnJlbnRfbmV0ZGV2X2ZsYWdzIHw9CiAJCQkJCQlJRkZfUFJPTUlTQzsKIAkJCQkJZ290byBvdXRfcHJvbWlzYzsKIAkJCQl9Ci0JCQkJaWYgKHZzaS0mZ3Q7bmV0ZGV2LSZndDtmZWF0dXJlcyAmYW1wOwotCQkJCSAgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpCi0JCQkJCXZsYW5fb3BzLSZndDtlbmFfcnhfZmlsdGVyaW5nKHZzaSk7CiAJCQl9CiAKIAkJCS8qIGRpc2FibGUgYWxsbXVsdGkgaGVyZSwgYnV0IG9ubHkgaWYgYWxsbXVsdGkgaXMgbm90CkBAIC0zNjc1LDEwICYjNDM7MzcyNCw5IEBAIGludCBpY2Vfdmxhbl9yeF9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIF9fYmUxNiBwcm90bywgdTE2IHZpZCkKIAl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChJQ0VfQ0ZHX0JVU1ksIHZzaS0mZ3Q7c3RhdGUpKQogCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CiAKLQkvKiBBZGQgbXVsdGljYXN0IHByb21pc2MgcnVsZSBmb3IgdGhlIFZMQU4gSUQgdG8gYmUgYWRkZWQgaWYKLQkgKiBhbGwtbXVsdGljYXN0IGlzIGN1cnJlbnRseSBlbmFibGVkLgotCSAqLwotCWlmICh2c2ktJmd0O2N1cnJlbnRfbmV0ZGV2X2ZsYWdzICZhbXA7IElGRl9BTExNVUxUSSkgewomIzQzOwkvKiBza2lwIHRoZSBwZXItVklEIHJ1bGUgd2hlbiB0aGUgREZMVCBSeCBydWxlIGFscmVhZHkgY292ZXJzIHRoaXMgVklEICovCiYjNDM7CWlmICgodnNpLSZndDtjdXJyZW50X25ldGRldl9mbGFncyAmYW1wOyBJRkZfQUxMTVVMVEkpICZhbXA7JmFtcDsKJiM0MzsJICAgICFpY2VfaXNfdnNpX2RmbHRfdnNpKHZzaSkpIHsKIAkJcmV0ID0gaWNlX2ZsdHJfc2V0X3ZzaV9wcm9taXNjKCZhbXA7dnNpLSZndDtiYWNrLSZndDtodywgdnNpLSZndDtpZHgsCiAJCQkJCSAgICAgICBJQ0VfTUNBU1RfVkxBTl9QUk9NSVNDX0JJVFMsCiAJCQkJCSAgICAgICB2aWQpOwpAQCAtMzY5NiwxMSAmIzQzOzM3NDQsMTIgQEAgaW50IGljZV92bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgX19iZTE2IHByb3RvLCB1MTYgdmlkKQogCWlmIChyZXQpCiAJCWdvdG8gZmluaXNoOwogCi0JLyogSWYgYWxsLW11bHRpY2FzdCBpcyBjdXJyZW50bHkgZW5hYmxlZCBhbmQgdGhpcyBWTEFOIElEIGlzIG9ubHkgb25lCi0JICogYmVzaWRlcyBWTEFOLTAgd2UgaGF2ZSB0byB1cGRhdGUgbG9vay11cCB0eXBlIG9mIG11bHRpY2FzdCBwcm9taXNjCi0JICogcnVsZSBmb3IgVkxBTi0wIGZyb20gSUNFX1NXX0xLVVBfUFJPTUlTQyB0byBJQ0VfU1dfTEtVUF9QUk9NSVNDX1ZMQU4uCiYjNDM7CS8qIE9uIHRoZSBmaXJzdCBub24temVybyBWTEFOLCBwcm9tb3RlIHRoZSBWTEFOLTAgbXVsdGljYXN0IHByb21pc2MKJiM0MzsJICogcnVsZSBmcm9tIElDRV9TV19MS1VQX1BST01JU0MgdG8gSUNFX1NXX0xLVVBfUFJPTUlTQ19WTEFOLiBTa2lwIHdoZW4KJiM0MzsJICogdGhlIERGTFQgUnggcnVsZSBpcyBpbnN0YWxsZWQ7IGl0IGFscmVhZHkgY292ZXJzIGV2ZXJ5IFZJRC4KIAkgKi8KIAlpZiAoKHZzaS0mZ3Q7Y3VycmVudF9uZXRkZXZfZmxhZ3MgJmFtcDsgSUZGX0FMTE1VTFRJKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhaWNlX2lzX3ZzaV9kZmx0X3ZzaSh2c2kpICZhbXA7JmFtcDsKIAkgICAgaWNlX3ZzaV9udW1fbm9uX3plcm9fdmxhbnModnNpKSA9PSAxKSB7CiAJCWljZV9mbHRyX2NsZWFyX3ZzaV9wcm9taXNjKCZhbXA7dnNpLSZndDtiYWNrLSZndDtodywgdnNpLSZndDtpZHgsCiAJCQkJCSAgIElDRV9NQ0FTVF9QUk9NSVNDX0JJVFMsIDApOwpAQCAtMzc2MywxMSAmIzQzOzM4MTIsMTIgQEAgaW50IGljZV92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIF9fYmUxNiBwcm90bywgdTE2IHZpZCkKIAkJCQkJICAgSUNFX01DQVNUX1ZMQU5fUFJPTUlTQ19CSVRTLCB2aWQpOwogCiAJaWYgKCFpY2VfdnNpX2hhc19ub25femVyb192bGFucyh2c2kpKSB7Ci0JCS8qIFVwZGF0ZSBsb29rLXVwIHR5cGUgb2YgbXVsdGljYXN0IHByb21pc2MgcnVsZSBmb3IgVkxBTiAwCi0JCSAqIGZyb20gSUNFX1NXX0xLVVBfUFJPTUlTQ19WTEFOIHRvIElDRV9TV19MS1VQX1BST01JU0Mgd2hlbgotCQkgKiBhbGwtbXVsdGljYXN0IGlzIGVuYWJsZWQgYW5kIFZMQU4gMCBpcyB0aGUgb25seSBWTEFOIHJ1bGUuCiYjNDM7CQkvKiBMYXN0IG5vbi16ZXJvIFZMQU4gZ29uZTogZGVtb3RlIHRoZSBWTEFOLTAgbXVsdGljYXN0IHByb21pc2MKJiM0MzsJCSAqIHJ1bGUgYmFjayB0byBJQ0VfU1dfTEtVUF9QUk9NSVNDLiBTa2lwIHdoZW4gdGhlIERGTFQgUnggcnVsZQomIzQzOwkJICogaXMgaW5zdGFsbGVkOyBubyByZWNpcGUgc3dhcCBpcyBuZWVkZWQuCiAJCSAqLwotCQlpZiAodnNpLSZndDtjdXJyZW50X25ldGRldl9mbGFncyAmYW1wOyBJRkZfQUxMTVVMVEkpIHsKJiM0MzsJCWlmICgodnNpLSZndDtjdXJyZW50X25ldGRldl9mbGFncyAmYW1wOyBJRkZfQUxMTVVMVEkpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhaWNlX2lzX3ZzaV9kZmx0X3ZzaSh2c2kpKSB7CiAJCQlpY2VfZmx0cl9jbGVhcl92c2lfcHJvbWlzYygmYW1wO3ZzaS0mZ3Q7YmFjay0mZ3Q7aHcsIHZzaS0mZ3Q7aWR4LAogCQkJCQkJICAgSUNFX01DQVNUX1ZMQU5fUFJPTUlTQ19CSVRTLAogCQkJCQkJICAgMCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDExOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4ODYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA1MjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGZWFzaWJpbGl0eSBvZiB0aGUgSWNlIERyaXZlciBQYXRjaCoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZy4gVGhpcyBwYXRjaCBzZXJpZXMgdG91Y2hlcyB0aGUgYGljZWAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYGljZV9lc3dpdGNoLmNgIGFuZCBgaWNlX21haW4uY2AuIEl0JiMzOTtzIGFsdGVyaW5nIHByb21pc2N1b3VzIG1vZGUgYW5kIFZMQU4gaGFuZGxpbmcgd2l0aGluIHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIGRyaXZlci4gQ2xlYXJseSwgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgaWYgdGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGluIGEgZnV6emVkIGVudmlyb25tZW50LgoKTXkgZmlyc3QgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgaXMgZWFzaWx5IGZ1enphYmxlLiBJdCYjMzk7cyBhIG5ldHdvcmsgZHJpdmVyIGFuZCB0aGVyZWZvcmUgY291bGQgYmUgdnVsbmVyYWJsZS4gSG93ZXZlciwgaXTigJlzIGZvciB0aGUgSW50ZWwgRTgwMCBzZXJpZXMgaGFyZHdhcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBpZiB0aGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgaW4gYSBmdXp6ZWQgZW52aXJvbm1lbnQuCgpUaGlzIG1lYW5zIGl0JiMzOTtzIGxpa2VseSBhIHBoeXNpY2FsIGhhcmR3YXJlIGRldmljZS4gSWYgaXQmIzM5O3MgYSBwaHlzaWNhbCBkZXZpY2UsIEkgbmVlZCB0byBrbm93IGlmIGl0JiMzOTtzIGVtdWxhdGVkIGluIGFueSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSkgZW11bGF0ZXMgdGhlIEludGVsIEU4MDAgc2VyaWVzIChpY2UpLiBObywgUUVNVSBlbXVsYXRlcyBlMTAwMCwgaWdiLCBhbmQgdmlydGlvLW5ldCwgYnV0IG5vdCBpY2UuCgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBpcyBhbnkgc29mdHdhcmUgZW11bGF0aW9uIG9yIGlmIHRoaXMgaXMgZW50aXJlbHkgaGFyZHdhcmUtZGVwZW5kZW50LiBJZiBpdCYjMzk7cyBoYXJkd2FyZS1kZXBlbmRlbnQsIGl0IHdpbGwgYmUgaGFyZCB0byBmdXp6LCB1bmxlc3Mgd2UgaGF2ZSBQQ0kgcGFzc3Rocm91Z2guCgpUaGUgaW5zdHJ1Y3Rpb25zIEkgaGF2ZSBleHBsaWNpdGx5IHN0YXRlIHRvIG1hcmsgcGF0Y2hlcyBhcyAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7IGlmIHRoZXkgY29udGFpbiBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLgoKU28sIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpczogY2FuIEkgdGVzdCB0aGUgYGljZWAgZHJpdmVyIGluIFFFTVU/IE5vcm1hbGx5LCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2AgcmVxdWlyZXMgYWN0dWFsIEludGVsIEU4MDAgaGFyZHdhcmUuIExldCBtZSBkb3VibGUtY2hlY2sgaWYgdGhlcmUmIzM5O3MgYW55IGBpY2VgIGVtdWxhdGlvbiBpbiBRRU1VLiBOby4gSXMgdGhlcmUgYW55IHdheSB0byB0cmlnZ2VyIHRoaXMgY29kZSB3aXRob3V0IGhhcmR3YXJlPwoKTGV0JiMzOTtzIGNoZWNrIGlmIHRoZXJlJiMzOTtzIGEgbW9jayBvciBzb21lIGtpbmQgb2Ygd29ya2Fyb3VuZC4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCB0byBzZWFyY2ggZm9yIGFueSB0ZXN0cyBvciBtb2NrIGltcGxlbWVudGF0aW9ucyByZWxhdGVkIHRvIHRoZSBgaWNlYCBkcml2ZXIuIFRoaXMgd2lsbCBiZSB0aGUgZGVjaWRpbmcgZmFjdG9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDExOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ljZV9lc3dpdGNoX3NldHVwX2VudiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guYy0xMy0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jOjE0OiAqIGljZV9lc3dpdGNoX3NldHVwX2VudiAtIGNvbmZpZ3VyZSBlc3dpdGNoIEhXIGZpbHRlcnNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jLTE1LSAqIEBwZjogcG9pbnRlciB0byBQRiBzdHJ1Y3Rcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guYy0xOS0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jOjIwOnN0YXRpYyBpbnQgaWNlX2Vzd2l0Y2hfc2V0dXBfZW52KHN0cnVjdCBpY2VfcGYgKnBmKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmMtMjEte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jPTMwMz1zdGF0aWMgaW50IGljZV9lc3dpdGNoX2VuYWJsZV9zd2l0Y2hkZXYoc3RydWN0IGljZV9wZiAqcGYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmMtMzE4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmM6MzE5Olx0aWYgKGljZV9lc3dpdGNoX3NldHVwX2VudihwZikpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guYy0zMjAtXHRcdHJldHVybiAtRU5PREVWO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDExOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMTMKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgaWNlYCBEcml2ZXIgZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGljZWAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIHRob3NlIEludGVsIEU4MDAgc2VyaWVzIFBDSWUgbmV0d29yayBjYXJkcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7VGhpcyBpcyBhICpwaHlzaWNhbCogZGV2aWNlIGRyaXZlci4mIzM0OyBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBkaXJlY3QgaW50ZXJhY3Rpb24gd2l0aCBoYXJkd2FyZSB0aHJvdWdoIHRoZSBQQ0llIGJ1cy4gQW5kIHRoZXJlJiMzOTtzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBJJiMzOTttIGF3YXJlIG9mIGluIFFFTVUgb3IgZXZlbiBiYWtlZCBpbnRvIHRoZSBMaW51eCBrZXJuZWwgaXRzZWxmIOKAkyBub3RoaW5nIGxpa2UgYSBgbWFjODAyMTFfaHdzaW1gIG9yIGEgYG5ldGRldnNpbWAgdG8gbWltaWMgdGhlIGJlaGF2aW9yIG9mIHRoaXMga2luZCBvZiBuZXR3b3JrIGFkYXB0ZXIuCgpHaXZlbiB0aGF0IHJlYWxpdHksIGFuZCBhc3N1bWluZyB0aGlzIGlzIGZvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGxpa2UgR0NFIG9yIFFFTVUsIHRoZSBjb2RlIHBhdGhzIGFyZSBiYXNpY2FsbHkgdW5yZWFjaGFibGUuIEkgY2FuJiMzOTt0IGltYWdpbmUgYSBzY2VuYXJpbyB3aGVyZSBJIGNvdWxkIHRyaWdnZXIgYW55IG1lYW5pbmdmdWwgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGRyaXZlciwgYmVjYXVzZSB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBzaW1wbHkgaXNuJiMzOTt0IHRoZXJlIHRvIHJlc3BvbmQuIEluIG90aGVyIHdvcmRzLCB0aGVyZSYjMzk7cyBub3RoaW5nIHRvICYjMzQ7ZnV6eiYjMzQ7LgoKVGhlcmVmb3JlLCB3aXRob3V0IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiwgbXkgaW5pdGlhbCBjb25jbHVzaW9uIGlzIHRoYXQgdGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gaWYgSSYjMzk7bSBtaXNzaW5nIHNvbWV0aGluZywgdGhvdWdoLi4uIExldCBtZSBkb3VibGUgY2hlY2sgaWYgdGhlcmUmIzM5O3MgYW55IGVtdWxhdGlvbiBmb3IgYGljZWAuLi4gSSYjMzk7bGwgY2hlY2sgbXkgbWVtb3J5IGFuZCBkbyBhIGN1cnNvcnkgc2VhcmNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDExOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19JQ0UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZz01OTI9Q09ORklHX0k0MEU9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZzo1OTM6Q09ORklHX0lDRT15XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnLTU5NC1DT05GSUdfRk0xMEs9eVxuLS1cbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc9NjA4PUNPTkZJR19JNDBFPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc6NjA5OkNPTkZJR19JQ0U9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy02MTAtQ09ORklHX0ZNMTBLPXlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfRk0xMEspICYjNDM7PSBmbTEway9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19JQ0UpICYjNDM7PSBpY2UvXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9NYWtlZmlsZS0yMS1vYmotJChDT05GSUdfSURQRikgJiM0Mzs9IGlkcGYvXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL01ha2VmaWxlPTg9c3ViZGlyLWNjZmxhZ3MteSAmIzQzOz0gLUkkKHNyYylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19JQ0UpICYjNDM7PSBpY2Uub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL01ha2VmaWxlLTEwLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9NYWtlZmlsZT02MD1pY2UtJChDT05GSUdfWERQX1NPQ0tFVFMpICYjNDM7PSBpY2VfeHNrLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9NYWtlZmlsZTo2MTppY2UtJChDT05GSUdfSUNFX1NXSVRDSERFVikgJiM0Mzs9IGljZV9lc3dpdGNoLm8gaWNlX2Vzd2l0Y2hfYnIub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL01ha2VmaWxlLTYyLWljZS0kKENPTkZJR19HTlNTKSAmIzQzOz0gaWNlX2duc3Mub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL01ha2VmaWxlOjYzOmljZS0kKENPTkZJR19JQ0VfSFdNT04pICYjNDM7PSBpY2VfaHdtb24ub1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5oLTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guaDoxMDojaWZkZWYgQ09ORklHX0lDRV9TV0lUQ0hERVZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5oLTExLXZvaWQgaWNlX2Vzd2l0Y2hfZGV0YWNoX3ZmKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3ZmICp2Zik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmg9MzQ9dm9pZCBpY2VfZXN3aXRjaF9kZWNmZ192c2koc3RydWN0IGljZV92c2kgKnZzaSwgY29uc3QgdTggKm1hYyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guaDozNTojZWxzZSAvKiBDT05GSUdfSUNFX1NXSVRDSERFViAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmgtMzYtc3RhdGljIGlubGluZSB2b2lkXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmg9OTg9c3RhdGljIGlubGluZSB2b2lkIGljZV9lc3dpdGNoX2RlY2ZnX3ZzaShzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCBjb25zdCB1OCAqbWFjKSB7IH1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5oOjk5OiNlbmRpZiAvKiBDT05GSUdfSUNFX1NXSVRDSERFViAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmgtMTAwLSNlbmRpZiAvKiBfSUNFX0VTV0lUQ0hfSF8gKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2h3bW9uLmgtNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaHdtb24uaDo3OiNpZmRlZiBDT05GSUdfSUNFX0hXTU9OXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2h3bW9uLmgtOC12b2lkIGljZV9od21vbl9pbml0KHN0cnVjdCBpY2VfcGYgKnBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaHdtb24uaD05PXZvaWQgaWNlX2h3bW9uX2V4aXQoc3RydWN0IGljZV9wZiAqcGYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9od21vbi5oOjEwOiNlbHNlIC8qIENPTkZJR19JQ0VfSFdNT04gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaHdtb24uaC0xMS1zdGF0aWMgaW5saW5lIHZvaWQgaWNlX2h3bW9uX2luaXQoc3RydWN0IGljZV9wZiAqcGYpIHsgfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9od21vbi5oPTEyPXN0YXRpYyBpbmxpbmUgdm9pZCBpY2VfaHdtb25fZXhpdChzdHJ1Y3QgaWNlX3BmICpwZikgeyB9XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2h3bW9uLmg6MTM6I2VuZGlmIC8qIENPTkZJR19JQ0VfSFdNT04gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaHdtb24uaC0xNC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTIwMzY9c3RhdGljIGNvbnN0IHN0cnVjdCBpY2VfY3Jvc3N0c3RhbXBfY2ZnIGljZV9jcm9zc3RzdGFtcF9jZmdfZTgyeCA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTIwNDgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjIwNDk6I2lmZGVmIENPTkZJR19JQ0VfSFdUU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yMDUwLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWNlX2Nyb3NzdHN0YW1wX2NmZyBpY2VfY3Jvc3N0c3RhbXBfY2ZnX2U4MzAgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yMDYyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoyMDYzOiNlbmRpZiAvKiBDT05GSUdfSUNFX0hXVFMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjA2NC0vKipcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTIxNzU9c3RhdGljIGludCBpY2VfcHRwX2dldGNyb3NzdHN0YW1wKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTIxODgtXHRcdGJyZWFrO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoyMTg5OiNpZmRlZiBDT05GSUdfSUNFX0hXVFNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjE5MC1cdGNhc2UgSUNFX01BQ19FODMwOlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjE5Mi1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjIxOTM6I2VuZGlmIC8qIENPTkZJR19JQ0VfSFdUUyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yMTk0LVx0ZGVmYXVsdDpcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTI1MjM9c3RhdGljIHZvaWQgaWNlX3B0cF9zZXRfZnVuY3NfZTgzMChzdHJ1Y3QgaWNlX3BmICpwZilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjUyNC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjI1MjU6I2lmZGVmIENPTkZJR19JQ0VfSFdUU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yNTI2LVx0aWYgKHBjaWVfcHRtX2VuYWJsZWQocGYtXHUwMDNlcGRldikgXHUwMDI2XHUwMDI2IGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BUlQpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjUyOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MjUyOTojZW5kaWYgLyogQ09ORklHX0lDRV9IV1RTICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTI1MzAtXHQvKiBSZXN0IG9mIHRoZSBjb25maWcgaXMgdGhlIHNhbWUgYXMgYmFzZSBFODEwICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTE6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ1MgoJCQkJCQkJb3V0cHV0OiA5MgoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgV29ydGhGdXp6aW5nIEZsYWcgZm9yIHRoZSBgaWNlYCBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgYGljZWAgZHJpdmVyLCB3aGljaCwgYXMgd2Uga25vdywgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciB0aGUgSW50ZWwgRTgwMCBTZXJpZXMgUENJZSBuZXR3b3JrIGNhcmRzLiBUaGlzIG1lYW5zIGl0JiMzOTtzIGEgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVyLCBub3Qgc29tZXRoaW5nIGFic3RyYWN0LiBOb3csIGNvbnNpZGVyaW5nIG15IGV4cGVyaWVuY2Ugd2l0aCB2aXJ0dWFsaXphdGlvbiwgZXNwZWNpYWxseSBpbiBlbnZpcm9ubWVudHMgbGlrZSBHQ0UgYW5kIFFFTVUsIGl0JiMzOTtzIGNsZWFyIHRoZXJlJiMzOTtzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBvZiB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIG9yLCBmb3IgdGhhdCBtYXR0ZXIsIGl0cyBkcml2ZXIgcHJlc2VudCB3aXRoaW4gZWl0aGVyIFFFTVUmIzM5O3Mgb3IgdGhlIHN0YW5kYXJkIExpbnV4IGtlcm5lbCBjb2RlYmFzZS4gSWYgdGhlIGhhcmR3YXJlIGlzIG5vdCBwcmVzZW50LCB0aGVuIGl0cyByZXNwZWN0aXZlIGRyaXZlciYjMzk7cyBmdW5jdGlvbnMgYXJlIG5vdCBsaWtlbHkgdG8gZ2V0IGludm9rZWQuCgpHaXZlbiB0aGF0LCBJJiMzOTttIGZvcmNlZCB0byBjb25jbHVkZSB0aGF0IGFueSBjb2RlIHBhdGhzIHJlbGF0ZWQgdG8gdGhlIGBpY2VgIGRyaXZlciBhcmUgZWZmZWN0aXZlbHkgdW5yZWFjaGFibGUgd2l0aGluIHRoZXNlIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGVyZSYjMzk7cyBubyBwcmFjdGljYWwgdmFsdWUgaW4gZnV6emluZyB0aGlzIGRyaXZlciB3aXRoaW4gYSB2aXJ0dWFsIGNvbnRleHQsIGFzIHRoZSBpbnRlbmRlZCBjb25kaXRpb25zIHRoYXQgd291bGQgdHJpZ2dlciB0aGUgZnV6emluZyBkbyBub3QgZXhpc3QuCgpDb25zZXF1ZW50bHksIEkmIzM5O20gZ29pbmcgdG8gc2V0IHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIHRvIGBmYWxzZWAuIEkgYmVsaWV2ZSBteSByZWFzb25pbmcsIGJhc2VkIG9uIHRoZSBoYXJkd2FyZSBkZXBlbmRlbmNlIGFuZCB0aGUgbGFjayBvZiBlbXVsYXRpb24gaW4gY29tbW9uIHZpcnR1YWxpemF0aW9uIHBsYXRmb3JtcywgaXMgc291bmQuIFRoaXMgaXMgbW9yZSBvZiBhbiBhc3Nlc3NtZW50IG9mIHByYWN0aWNhbCBmZWFzaWJpbGl0eSByYXRoZXIgdGhhbiBhbiBpbnRyaW5zaWMgY2hhcmFjdGVyaXN0aWMgb2YgdGhlIGNvZGUuIFdlIGNhbiYjMzk7dCBzYWZlbHkgdGVzdCB0aGlzIGluIFFFTVUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTE6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBMaW51eCBEcml2ZXIgKGljZSkuIFRoaXMgZHJpdmVyIGlzIGZvciBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGFuZCBsYWNrcyBzb2Z0d2FyZSBlbXVsYXRpb24gaW4gUUVNVSBvciB0aGUgTGludXgga2VybmVsLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCB0ZXN0IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgTGludXggRHJpdmVyIChpY2UpLiBUaGlzIGRyaXZlciBpcyBmb3IgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBhbmQgbGFja3Mgc29mdHdhcmUgZW11bGF0aW9uIGluIFFFTVUgb3IgdGhlIExpbnV4IGtlcm5lbC4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxMTo1NToyOS44MDc1ODc0OTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTU1MTQ4ODEzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgTGludXggRHJpdmVyIChpY2UpLiBUaGlzIGRyaXZlciBpcyBmb3IgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBhbmQgbGFja3Mgc29mdHdhcmUgZW11bGF0aW9uIGluIFFFTVUgb3IgdGhlIExpbnV4IGtlcm5lbC4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDExOjU1OjI5LjgwNzU5NDg2NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgyMzM0Mjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2U5MzJhYjZhZThjOTlhZmJjMzNjMTk0MGVlMzNlMWI5MDlhZjdlN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1biAyMiAxMTo1NToyOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jXFxuaW5kZXggMmU0ZjA5NjkwMzVmNzcuLjQ4MjczZWY5ZjY5ZGM4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmNcXG5AQCAtNjYsOCArNjYsMTAgQEAgc3RhdGljIGludCBpY2VfZXN3aXRjaF9zZXR1cF9lbnYoc3RydWN0IGljZV9wZiAqcGYpXFxuIFxcdGljZV9jZmdfZGZsdF92c2kodXBsaW5rX3ZzaS1cXHUwMDNlcG9ydF9pbmZvLCB1cGxpbmtfdnNpLVxcdTAwM2VpZHgsIGZhbHNlLFxcbiBcXHRcXHRcXHQgSUNFX0ZMVFJfVFgpO1xcbiBlcnJfZGVmX3R4Olxcbi1cXHRpY2VfY2ZnX2RmbHRfdnNpKHVwbGlua192c2ktXFx1MDAzZXBvcnRfaW5mbywgdXBsaW5rX3ZzaS1cXHUwMDNlaWR4LCBmYWxzZSxcXG4tXFx0XFx0XFx0IElDRV9GTFRSX1JYKTtcXG4rXFx0Lyoga2VlcCB0aGUgUnggREZMVCBydWxlIGlmIHRoZSB1cGxpbmsgaXMgcHJvbWlzY3VvdXMgKHNlZSByZWxlYXNlX2VudikgKi9cXG4rXFx0aWYgKCEodXBsaW5rX3ZzaS1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9QUk9NSVNDKSlcXG4rXFx0XFx0aWNlX2NmZ19kZmx0X3ZzaSh1cGxpbmtfdnNpLVxcdTAwM2Vwb3J0X2luZm8sIHVwbGlua192c2ktXFx1MDAzZWlkeCxcXG4rXFx0XFx0XFx0XFx0IGZhbHNlLCBJQ0VfRkxUUl9SWCk7XFxuIGVycl9kZWZfcng6XFxuIFxcdGljZV92c2lfZGVsX3ZsYW5femVybyh1cGxpbmtfdnNpKTtcXG4gZXJyX3ZsYW5femVybzpcXG5AQCAtMjc4LDggKzI4MCwxNiBAQCBzdGF0aWMgdm9pZCBpY2VfZXN3aXRjaF9yZWxlYXNlX2VudihzdHJ1Y3QgaWNlX3BmICpwZilcXG4gXFx0dmxhbl9vcHMtXFx1MDAzZWVuYV9yeF9maWx0ZXJpbmcodXBsaW5rX3ZzaSk7XFxuIFxcdGljZV9jZmdfZGZsdF92c2kodXBsaW5rX3ZzaS1cXHUwMDNlcG9ydF9pbmZvLCB1cGxpbmtfdnNpLVxcdTAwM2VpZHgsIGZhbHNlLFxcbiBcXHRcXHRcXHQgSUNFX0ZMVFJfVFgpO1xcbi1cXHRpY2VfY2ZnX2RmbHRfdnNpKHVwbGlua192c2ktXFx1MDAzZXBvcnRfaW5mbywgdXBsaW5rX3ZzaS1cXHUwMDNlaWR4LCBmYWxzZSxcXG4tXFx0XFx0XFx0IElDRV9GTFRSX1JYKTtcXG4rXFxuK1xcdC8qIEtlZXAgdGhlIFJ4IERGTFQgcnVsZSBpZiB0aGUgdXBsaW5rIGlzIHByb21pc2N1b3VzOyBpdCBtdXN0IG91dGxpdmVcXG4rXFx0ICogdGhlIHNlc3Npb24uIFRlc3QgdGhlIGxpdmUgbmV0ZGV2LVxcdTAwM2VmbGFncywgdGhlIHNhbWUgdmFsdWVcXG4rXFx0ICogZW5hX3J4X2ZpbHRlcmluZygpIC1cXHUwMDNlIGljZV9jZmdfdmxhbl9wcnVuaW5nKCkgYWJvdmUga2V5cyBpdHMgZGVjaXNpb25cXG4rXFx0ICogb24sIHNvIHRoZSBwcmVzZXJ2ZWQgREZMVCBydWxlIGFuZCB0aGUgcHJ1bmluZyBzdGF0ZSBzdGF5IGNvbnNpc3RlbnQuXFxuK1xcdCAqL1xcbitcXHRpZiAoISh1cGxpbmtfdnNpLVxcdTAwM2VuZXRkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1BST01JU0MpKVxcbitcXHRcXHRpY2VfY2ZnX2RmbHRfdnNpKHVwbGlua192c2ktXFx1MDAzZXBvcnRfaW5mbywgdXBsaW5rX3ZzaS1cXHUwMDNlaWR4LFxcbitcXHRcXHRcXHRcXHQgZmFsc2UsIElDRV9GTFRSX1JYKTtcXG4rXFxuIFxcdGljZV9mbHRyX2FkZF9tYWNfYW5kX2Jyb2FkY2FzdCh1cGxpbmtfdnNpLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgdXBsaW5rX3ZzaS1cXHUwMDNlcG9ydF9pbmZvLVxcdTAwM2VtYWMucGVybV9hZGRyLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgSUNFX0ZXRF9UT19WU0kpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXFxuaW5kZXggZTJmYmUxMTFmODQ5NjkuLmVmYjFmNTM2ZGU2YzdhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcXG5AQCAtMjc0LDcgKzI3NCw4IEBAIHN0YXRpYyBpbnQgaWNlX3NldF9wcm9taXNjKHN0cnVjdCBpY2VfdnNpICp2c2ksIHU4IHByb21pc2NfbSlcXG4gXFx0aWYgKHZzaS1cXHUwMDNldHlwZSAhPSBJQ0VfVlNJX1BGKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmIChpY2VfdnNpX2hhc19ub25femVyb192bGFucyh2c2kpKSB7XFxuK1xcdC8qIHNraXAgcGVyLVZJRCBleHBhbnNpb247IHRoZSBERkxUIFJ4IHJ1bGUgYWxyZWFkeSBjb3ZlcnMgZXZlcnkgVklEICovXFxuK1xcdGlmIChpY2VfdnNpX2hhc19ub25femVyb192bGFucyh2c2kpIFxcdTAwMjZcXHUwMDI2ICFpY2VfaXNfdnNpX2RmbHRfdnNpKHZzaSkpIHtcXG4gXFx0XFx0cHJvbWlzY19tIHw9IChJQ0VfUFJPTUlTQ19WTEFOX1JYIHwgSUNFX1BST01JU0NfVkxBTl9UWCk7XFxuIFxcdFxcdHN0YXR1cyA9IGljZV9mbHRyX3NldF92bGFuX3ZzaV9wcm9taXNjKFxcdTAwMjZ2c2ktXFx1MDAzZWJhY2stXFx1MDAzZWh3LCB2c2ksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBwcm9taXNjX20pO1xcbkBAIC0zMDQsOSArMzA1LDE5IEBAIHN0YXRpYyBpbnQgaWNlX2NsZWFyX3Byb21pc2Moc3RydWN0IGljZV92c2kgKnZzaSwgdTggcHJvbWlzY19tKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGlmIChpY2VfdnNpX2hhc19ub25femVyb192bGFucyh2c2kpKSB7XFxuLVxcdFxcdHByb21pc2NfbSB8PSAoSUNFX1BST01JU0NfVkxBTl9SWCB8IElDRV9QUk9NSVNDX1ZMQU5fVFgpO1xcbitcXHRcXHRpbnQgdmlkMF9zdGF0dXM7XFxuK1xcbitcXHRcXHQvKiBzZXQgdGltZSB1c2VkIGVpdGhlciByZWNpcGUgKHBlci1WSUQgUFJPTUlTQ19WTEFOLCBvciB2aWQ9MFxcbitcXHRcXHQgKiBQUk9NSVNDIHZpYSB0aGUgaWNlX3NldF9wcm9taXNjKCkgZWxzZSBicmFuY2gpLCBzbyBjbGVhclxcbitcXHRcXHQgKiBib3RoOyBjbGVhcmluZyBhbiBhYnNlbnQgcnVsZSBzdWNjZWVkc1xcbitcXHRcXHQgKi9cXG4gXFx0XFx0c3RhdHVzID0gaWNlX2ZsdHJfY2xlYXJfdmxhbl92c2lfcHJvbWlzYyhcXHUwMDI2dnNpLVxcdTAwM2ViYWNrLVxcdTAwM2VodywgdnNpLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgcHJvbWlzY19tKTtcXG4rXFx0XFx0XFx0XFx0cHJvbWlzY19tIHwgSUNFX1BST01JU0NfVkxBTl9SWCB8XFxuK1xcdFxcdFxcdFxcdElDRV9QUk9NSVNDX1ZMQU5fVFgpO1xcbitcXHRcXHR2aWQwX3N0YXR1cyA9IGljZV9mbHRyX2NsZWFyX3ZzaV9wcm9taXNjKFxcdTAwMjZ2c2ktXFx1MDAzZWJhY2stXFx1MDAzZWh3LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgdnNpLVxcdTAwM2VpZHgsIHByb21pc2NfbSwgMCk7XFxuK1xcdFxcdGlmICghc3RhdHVzKVxcbitcXHRcXHRcXHRzdGF0dXMgPSB2aWQwX3N0YXR1cztcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0c3RhdHVzID0gaWNlX2ZsdHJfY2xlYXJfdnNpX3Byb21pc2MoXFx1MDAyNnZzaS1cXHUwMDNlYmFjay1cXHUwMDNlaHcsIHZzaS1cXHUwMDNlaWR4LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgcHJvbWlzY19tLCAwKTtcXG5AQCAtMzE3LDYgKzMyOCw0OSBAQCBzdGF0aWMgaW50IGljZV9jbGVhcl9wcm9taXNjKHN0cnVjdCBpY2VfdnNpICp2c2ksIHU4IHByb21pc2NfbSlcXG4gXFx0cmV0dXJuIHN0YXR1cztcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGljZV92c2lfZXhpdF9kZmx0X3Byb21pc2MgLSBkcm9wIHRoZSBkZWZhdWx0IFZTSSBSeCBydWxlIG9uIHByb21pc2Mgb2ZmXFxuKyAqIEB2c2k6IHRoZSBWU0kgbGVhdmluZyBwcm9taXNjdW91cyBtb2RlXFxuKyAqXFxuKyAqIEZvciBhbiBJRkZfQUxMTVVMVEkgVlNJIHdpdGggVkxBTnMgdGhlIHBlci1WSUQgbXVsdGljYXN0IHJ1bGVzIGFyZVxcbisgKiByZWluc3RhdGVkIGJlZm9yZSB0aGUgZGVmYXVsdCBydWxlIGlzIGNsZWFyZWQgc28gY292ZXJhZ2UgbmV2ZXIgbGFwc2VzO1xcbisgKiB0aGUgdGhlbiByZWR1bmRhbnQgdmlkPTAgcnVsZSBpcyBkcm9wcGVkIGJlc3QtZWZmb3J0LiBUaGUgY2FsbGVlcyBsb2dcXG4rICogdGhlaXIgb3duIGZhaWx1cmVzLCBzbyBlcnJvciByZXR1cm5zIGFyZSBub3QgcmUtbG9nZ2VkIGhlcmUuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBlcnJvciB3aXRoIHRoZSBkZWZhdWx0IHJ1bGUgbGVmdCBpbiBwbGFjZS5cXG4rICovXFxuK3N0YXRpYyBpbnQgaWNlX3ZzaV9leGl0X2RmbHRfcHJvbWlzYyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxcbit7XFxuK1xcdHN0cnVjdCBpY2VfdnNpX3ZsYW5fb3BzICp2bGFuX29wcyA9IGljZV9nZXRfY29tcGF0X3ZzaV92bGFuX29wcyh2c2kpO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdnNpLVxcdTAwM2VuZXRkZXY7XFxuK1xcdHN0cnVjdCBpY2VfaHcgKmh3ID0gXFx1MDAyNnZzaS1cXHUwMDNlYmFjay1cXHUwMDNlaHc7XFxuK1xcdGJvb2wgcmVzdG9yZV9tYztcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdHJlc3RvcmVfbWMgPSAodnNpLVxcdTAwM2VjdXJyZW50X25ldGRldl9mbGFncyBcXHUwMDI2IElGRl9BTExNVUxUSSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICBpY2VfdnNpX2hhc19ub25femVyb192bGFucyh2c2kpO1xcbitcXG4rXFx0aWYgKHJlc3RvcmVfbWMpIHtcXG4rXFx0XFx0ZXJyID0gaWNlX2ZsdHJfc2V0X3ZsYW5fdnNpX3Byb21pc2MoaHcsIHZzaSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIElDRV9NQ0FTVF9WTEFOX1BST01JU0NfQklUUyk7XFxuK1xcdFxcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgZXJyICE9IC1FRVhJU1QpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGVyciA9IGljZV9jbGVhcl9kZmx0X3ZzaSh2c2kpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0aWYgKG5ldGRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpXFxuK1xcdFxcdHZsYW5fb3BzLVxcdTAwM2VlbmFfcnhfZmlsdGVyaW5nKHZzaSk7XFxuK1xcbitcXHRpZiAocmVzdG9yZV9tYylcXG4rXFx0XFx0aWNlX2ZsdHJfY2xlYXJfdnNpX3Byb21pc2MoaHcsIHZzaS1cXHUwMDNlaWR4LCBJQ0VfTUNBU1RfUFJPTUlTQ19CSVRTLFxcbitcXHRcXHRcXHRcXHRcXHQgICAwKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAvKipcXG4gICogaWNlX3ZzaV9zeW5jX2ZsdHIgLSBVcGRhdGUgdGhlIFZTSSBmaWx0ZXIgbGlzdCB0byB0aGUgSFdcXG4gICogQHZzaTogcHRyIHRvIHRoZSBWU0lcXG5AQCAtNDQyLDE3ICs0OTYsMTIgQEAgc3RhdGljIGludCBpY2VfdnNpX3N5bmNfZmx0cihzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHQvKiBDbGVhciBSeCBmaWx0ZXIgdG8gcmVtb3ZlIHRyYWZmaWMgZnJvbSB3aXJlICovXFxuIFxcdFxcdFxcdGlmIChpY2VfaXNfdnNpX2RmbHRfdnNpKHZzaSkpIHtcXG4tXFx0XFx0XFx0XFx0ZXJyID0gaWNlX2NsZWFyX2RmbHRfdnNpKHZzaSk7XFxuK1xcdFxcdFxcdFxcdGVyciA9IGljZV92c2lfZXhpdF9kZmx0X3Byb21pc2ModnNpKTtcXG4gXFx0XFx0XFx0XFx0aWYgKGVycikge1xcbi1cXHRcXHRcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcIkVycm9yICVkIGNsZWFyaW5nIGRlZmF1bHQgVlNJICVpIFJ4IHJ1bGVcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgIGVyciwgdnNpLVxcdTAwM2V2c2lfbnVtKTtcXG4gXFx0XFx0XFx0XFx0XFx0dnNpLVxcdTAwM2VjdXJyZW50X25ldGRldl9mbGFncyB8PVxcbiBcXHRcXHRcXHRcXHRcXHRcXHRJRkZfUFJPTUlTQztcXG4gXFx0XFx0XFx0XFx0XFx0Z290byBvdXRfcHJvbWlzYztcXG4gXFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRcXHRpZiAodnNpLVxcdTAwM2VuZXRkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjZcXG4tXFx0XFx0XFx0XFx0ICAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUilcXG4tXFx0XFx0XFx0XFx0XFx0dmxhbl9vcHMtXFx1MDAzZWVuYV9yeF9maWx0ZXJpbmcodnNpKTtcXG4gXFx0XFx0XFx0fVxcbiBcXG4gXFx0XFx0XFx0LyogZGlzYWJsZSBhbGxtdWx0aSBoZXJlLCBidXQgb25seSBpZiBhbGxtdWx0aSBpcyBub3RcXG5AQCAtMzY3NSwxMCArMzcyNCw5IEBAIGludCBpY2Vfdmxhbl9yeF9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIF9fYmUxNiBwcm90bywgdTE2IHZpZClcXG4gXFx0d2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoSUNFX0NGR19CVVNZLCB2c2ktXFx1MDAzZXN0YXRlKSlcXG4gXFx0XFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xcbiBcXG4tXFx0LyogQWRkIG11bHRpY2FzdCBwcm9taXNjIHJ1bGUgZm9yIHRoZSBWTEFOIElEIHRvIGJlIGFkZGVkIGlmXFxuLVxcdCAqIGFsbC1tdWx0aWNhc3QgaXMgY3VycmVudGx5IGVuYWJsZWQuXFxuLVxcdCAqL1xcbi1cXHRpZiAodnNpLVxcdTAwM2VjdXJyZW50X25ldGRldl9mbGFncyBcXHUwMDI2IElGRl9BTExNVUxUSSkge1xcbitcXHQvKiBza2lwIHRoZSBwZXItVklEIHJ1bGUgd2hlbiB0aGUgREZMVCBSeCBydWxlIGFscmVhZHkgY292ZXJzIHRoaXMgVklEICovXFxuK1xcdGlmICgodnNpLVxcdTAwM2VjdXJyZW50X25ldGRldl9mbGFncyBcXHUwMDI2IElGRl9BTExNVUxUSSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFpY2VfaXNfdnNpX2RmbHRfdnNpKHZzaSkpIHtcXG4gXFx0XFx0cmV0ID0gaWNlX2ZsdHJfc2V0X3ZzaV9wcm9taXNjKFxcdTAwMjZ2c2ktXFx1MDAzZWJhY2stXFx1MDAzZWh3LCB2c2ktXFx1MDAzZWlkeCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIElDRV9NQ0FTVF9WTEFOX1BST01JU0NfQklUUyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIHZpZCk7XFxuQEAgLTM2OTYsMTEgKzM3NDQsMTIgQEAgaW50IGljZV92bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgX19iZTE2IHByb3RvLCB1MTYgdmlkKVxcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIGZpbmlzaDtcXG4gXFxuLVxcdC8qIElmIGFsbC1tdWx0aWNhc3QgaXMgY3VycmVudGx5IGVuYWJsZWQgYW5kIHRoaXMgVkxBTiBJRCBpcyBvbmx5IG9uZVxcbi1cXHQgKiBiZXNpZGVzIFZMQU4tMCB3ZSBoYXZlIHRvIHVwZGF0ZSBsb29rLXVwIHR5cGUgb2YgbXVsdGljYXN0IHByb21pc2NcXG4tXFx0ICogcnVsZSBmb3IgVkxBTi0wIGZyb20gSUNFX1NXX0xLVVBfUFJPTUlTQyB0byBJQ0VfU1dfTEtVUF9QUk9NSVNDX1ZMQU4uXFxuK1xcdC8qIE9uIHRoZSBmaXJzdCBub24temVybyBWTEFOLCBwcm9tb3RlIHRoZSBWTEFOLTAgbXVsdGljYXN0IHByb21pc2NcXG4rXFx0ICogcnVsZSBmcm9tIElDRV9TV19MS1VQX1BST01JU0MgdG8gSUNFX1NXX0xLVVBfUFJPTUlTQ19WTEFOLiBTa2lwIHdoZW5cXG4rXFx0ICogdGhlIERGTFQgUnggcnVsZSBpcyBpbnN0YWxsZWQ7IGl0IGFscmVhZHkgY292ZXJzIGV2ZXJ5IFZJRC5cXG4gXFx0ICovXFxuIFxcdGlmICgodnNpLVxcdTAwM2VjdXJyZW50X25ldGRldl9mbGFncyBcXHUwMDI2IElGRl9BTExNVUxUSSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFpY2VfaXNfdnNpX2RmbHRfdnNpKHZzaSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIGljZV92c2lfbnVtX25vbl96ZXJvX3ZsYW5zKHZzaSkgPT0gMSkge1xcbiBcXHRcXHRpY2VfZmx0cl9jbGVhcl92c2lfcHJvbWlzYyhcXHUwMDI2dnNpLVxcdTAwM2ViYWNrLVxcdTAwM2VodywgdnNpLVxcdTAwM2VpZHgsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIElDRV9NQ0FTVF9QUk9NSVNDX0JJVFMsIDApO1xcbkBAIC0zNzYzLDExICszODEyLDEyIEBAIGludCBpY2Vfdmxhbl9yeF9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBfX2JlMTYgcHJvdG8sIHUxNiB2aWQpXFxuIFxcdFxcdFxcdFxcdFxcdCAgIElDRV9NQ0FTVF9WTEFOX1BST01JU0NfQklUUywgdmlkKTtcXG4gXFxuIFxcdGlmICghaWNlX3ZzaV9oYXNfbm9uX3plcm9fdmxhbnModnNpKSkge1xcbi1cXHRcXHQvKiBVcGRhdGUgbG9vay11cCB0eXBlIG9mIG11bHRpY2FzdCBwcm9taXNjIHJ1bGUgZm9yIFZMQU4gMFxcbi1cXHRcXHQgKiBmcm9tIElDRV9TV19MS1VQX1BST01JU0NfVkxBTiB0byBJQ0VfU1dfTEtVUF9QUk9NSVNDIHdoZW5cXG4tXFx0XFx0ICogYWxsLW11bHRpY2FzdCBpcyBlbmFibGVkIGFuZCBWTEFOIDAgaXMgdGhlIG9ubHkgVkxBTiBydWxlLlxcbitcXHRcXHQvKiBMYXN0IG5vbi16ZXJvIFZMQU4gZ29uZTogZGVtb3RlIHRoZSBWTEFOLTAgbXVsdGljYXN0IHByb21pc2NcXG4rXFx0XFx0ICogcnVsZSBiYWNrIHRvIElDRV9TV19MS1VQX1BST01JU0MuIFNraXAgd2hlbiB0aGUgREZMVCBSeCBydWxlXFxuK1xcdFxcdCAqIGlzIGluc3RhbGxlZDsgbm8gcmVjaXBlIHN3YXAgaXMgbmVlZGVkLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKHZzaS1cXHUwMDNlY3VycmVudF9uZXRkZXZfZmxhZ3MgXFx1MDAyNiBJRkZfQUxMTVVMVEkpIHtcXG4rXFx0XFx0aWYgKCh2c2ktXFx1MDAzZWN1cnJlbnRfbmV0ZGV2X2ZsYWdzIFxcdTAwMjYgSUZGX0FMTE1VTFRJKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIWljZV9pc192c2lfZGZsdF92c2kodnNpKSkge1xcbiBcXHRcXHRcXHRpY2VfZmx0cl9jbGVhcl92c2lfcHJvbWlzYyhcXHUwMDI2dnNpLVxcdTAwM2ViYWNrLVxcdTAwM2VodywgdnNpLVxcdTAwM2VpZHgsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIElDRV9NQ0FTVF9WTEFOX1BST01JU0NfQklUUyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgMCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDExOjU1OjMwLjM5MDkzMDE2OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQ5NjgxMzcxOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIExpbnV4IERyaXZlciAoaWNlKS4gVGhpcyBkcml2ZXIgaXMgZm9yIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgYW5kIGxhY2tzIHNvZnR3YXJlIGVtdWxhdGlvbiBpbiBRRU1VIG9yIHRoZSBMaW51eCBrZXJuZWwuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIHRlc3QgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdlOTMyYWI2YWU4Yzk5YWZiYzMzYzE5NDBlZTMzZTFiOTA5YWY3ZTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyMiAxMTo1NToyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmNcbmluZGV4IDJlNGYwOTY5MDM1Zjc3Li40ODI3M2VmOWY2OWRjOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guY1xuQEAgLTY2LDggKzY2LDEwIEBAIHN0YXRpYyBpbnQgaWNlX2Vzd2l0Y2hfc2V0dXBfZW52KHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0aWNlX2NmZ19kZmx0X3ZzaSh1cGxpbmtfdnNpLVx1MDAzZXBvcnRfaW5mbywgdXBsaW5rX3ZzaS1cdTAwM2VpZHgsIGZhbHNlLFxuIFx0XHRcdCBJQ0VfRkxUUl9UWCk7XG4gZXJyX2RlZl90eDpcbi1cdGljZV9jZmdfZGZsdF92c2kodXBsaW5rX3ZzaS1cdTAwM2Vwb3J0X2luZm8sIHVwbGlua192c2ktXHUwMDNlaWR4LCBmYWxzZSxcbi1cdFx0XHQgSUNFX0ZMVFJfUlgpO1xuK1x0Lyoga2VlcCB0aGUgUnggREZMVCBydWxlIGlmIHRoZSB1cGxpbmsgaXMgcHJvbWlzY3VvdXMgKHNlZSByZWxlYXNlX2VudikgKi9cbitcdGlmICghKHVwbGlua192c2ktXHUwMDNlbmV0ZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfUFJPTUlTQykpXG4rXHRcdGljZV9jZmdfZGZsdF92c2kodXBsaW5rX3ZzaS1cdTAwM2Vwb3J0X2luZm8sIHVwbGlua192c2ktXHUwMDNlaWR4LFxuK1x0XHRcdFx0IGZhbHNlLCBJQ0VfRkxUUl9SWCk7XG4gZXJyX2RlZl9yeDpcbiBcdGljZV92c2lfZGVsX3ZsYW5femVybyh1cGxpbmtfdnNpKTtcbiBlcnJfdmxhbl96ZXJvOlxuQEAgLTI3OCw4ICsyODAsMTYgQEAgc3RhdGljIHZvaWQgaWNlX2Vzd2l0Y2hfcmVsZWFzZV9lbnYoc3RydWN0IGljZV9wZiAqcGYpXG4gXHR2bGFuX29wcy1cdTAwM2VlbmFfcnhfZmlsdGVyaW5nKHVwbGlua192c2kpO1xuIFx0aWNlX2NmZ19kZmx0X3ZzaSh1cGxpbmtfdnNpLVx1MDAzZXBvcnRfaW5mbywgdXBsaW5rX3ZzaS1cdTAwM2VpZHgsIGZhbHNlLFxuIFx0XHRcdCBJQ0VfRkxUUl9UWCk7XG4tXHRpY2VfY2ZnX2RmbHRfdnNpKHVwbGlua192c2ktXHUwMDNlcG9ydF9pbmZvLCB1cGxpbmtfdnNpLVx1MDAzZWlkeCwgZmFsc2UsXG4tXHRcdFx0IElDRV9GTFRSX1JYKTtcbitcbitcdC8qIEtlZXAgdGhlIFJ4IERGTFQgcnVsZSBpZiB0aGUgdXBsaW5rIGlzIHByb21pc2N1b3VzOyBpdCBtdXN0IG91dGxpdmVcbitcdCAqIHRoZSBzZXNzaW9uLiBUZXN0IHRoZSBsaXZlIG5ldGRldi1cdTAwM2VmbGFncywgdGhlIHNhbWUgdmFsdWVcbitcdCAqIGVuYV9yeF9maWx0ZXJpbmcoKSAtXHUwMDNlIGljZV9jZmdfdmxhbl9wcnVuaW5nKCkgYWJvdmUga2V5cyBpdHMgZGVjaXNpb25cbitcdCAqIG9uLCBzbyB0aGUgcHJlc2VydmVkIERGTFQgcnVsZSBhbmQgdGhlIHBydW5pbmcgc3RhdGUgc3RheSBjb25zaXN0ZW50LlxuK1x0ICovXG4rXHRpZiAoISh1cGxpbmtfdnNpLVx1MDAzZW5ldGRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1BST01JU0MpKVxuK1x0XHRpY2VfY2ZnX2RmbHRfdnNpKHVwbGlua192c2ktXHUwMDNlcG9ydF9pbmZvLCB1cGxpbmtfdnNpLVx1MDAzZWlkeCxcbitcdFx0XHRcdCBmYWxzZSwgSUNFX0ZMVFJfUlgpO1xuK1xuIFx0aWNlX2ZsdHJfYWRkX21hY19hbmRfYnJvYWRjYXN0KHVwbGlua192c2ksXG4gXHRcdFx0XHQgICAgICAgdXBsaW5rX3ZzaS1cdTAwM2Vwb3J0X2luZm8tXHUwMDNlbWFjLnBlcm1fYWRkcixcbiBcdFx0XHRcdCAgICAgICBJQ0VfRldEX1RPX1ZTSSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xuaW5kZXggZTJmYmUxMTFmODQ5NjkuLmVmYjFmNTM2ZGU2YzdhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5AQCAtMjc0LDcgKzI3NCw4IEBAIHN0YXRpYyBpbnQgaWNlX3NldF9wcm9taXNjKHN0cnVjdCBpY2VfdnNpICp2c2ksIHU4IHByb21pc2NfbSlcbiBcdGlmICh2c2ktXHUwMDNldHlwZSAhPSBJQ0VfVlNJX1BGKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChpY2VfdnNpX2hhc19ub25femVyb192bGFucyh2c2kpKSB7XG4rXHQvKiBza2lwIHBlci1WSUQgZXhwYW5zaW9uOyB0aGUgREZMVCBSeCBydWxlIGFscmVhZHkgY292ZXJzIGV2ZXJ5IFZJRCAqL1xuK1x0aWYgKGljZV92c2lfaGFzX25vbl96ZXJvX3ZsYW5zKHZzaSkgXHUwMDI2XHUwMDI2ICFpY2VfaXNfdnNpX2RmbHRfdnNpKHZzaSkpIHtcbiBcdFx0cHJvbWlzY19tIHw9IChJQ0VfUFJPTUlTQ19WTEFOX1JYIHwgSUNFX1BST01JU0NfVkxBTl9UWCk7XG4gXHRcdHN0YXR1cyA9IGljZV9mbHRyX3NldF92bGFuX3ZzaV9wcm9taXNjKFx1MDAyNnZzaS1cdTAwM2ViYWNrLVx1MDAzZWh3LCB2c2ksXG4gXHRcdFx0XHRcdFx0ICAgICAgIHByb21pc2NfbSk7XG5AQCAtMzA0LDkgKzMwNSwxOSBAQCBzdGF0aWMgaW50IGljZV9jbGVhcl9wcm9taXNjKHN0cnVjdCBpY2VfdnNpICp2c2ksIHU4IHByb21pc2NfbSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAoaWNlX3ZzaV9oYXNfbm9uX3plcm9fdmxhbnModnNpKSkge1xuLVx0XHRwcm9taXNjX20gfD0gKElDRV9QUk9NSVNDX1ZMQU5fUlggfCBJQ0VfUFJPTUlTQ19WTEFOX1RYKTtcbitcdFx0aW50IHZpZDBfc3RhdHVzO1xuK1xuK1x0XHQvKiBzZXQgdGltZSB1c2VkIGVpdGhlciByZWNpcGUgKHBlci1WSUQgUFJPTUlTQ19WTEFOLCBvciB2aWQ9MFxuK1x0XHQgKiBQUk9NSVNDIHZpYSB0aGUgaWNlX3NldF9wcm9taXNjKCkgZWxzZSBicmFuY2gpLCBzbyBjbGVhclxuK1x0XHQgKiBib3RoOyBjbGVhcmluZyBhbiBhYnNlbnQgcnVsZSBzdWNjZWVkc1xuK1x0XHQgKi9cbiBcdFx0c3RhdHVzID0gaWNlX2ZsdHJfY2xlYXJfdmxhbl92c2lfcHJvbWlzYyhcdTAwMjZ2c2ktXHUwMDNlYmFjay1cdTAwM2VodywgdnNpLFxuLVx0XHRcdFx0XHRcdFx0IHByb21pc2NfbSk7XG4rXHRcdFx0XHRwcm9taXNjX20gfCBJQ0VfUFJPTUlTQ19WTEFOX1JYIHxcbitcdFx0XHRcdElDRV9QUk9NSVNDX1ZMQU5fVFgpO1xuK1x0XHR2aWQwX3N0YXR1cyA9IGljZV9mbHRyX2NsZWFyX3ZzaV9wcm9taXNjKFx1MDAyNnZzaS1cdTAwM2ViYWNrLVx1MDAzZWh3LFxuK1x0XHRcdFx0XHRcdFx0IHZzaS1cdTAwM2VpZHgsIHByb21pc2NfbSwgMCk7XG4rXHRcdGlmICghc3RhdHVzKVxuK1x0XHRcdHN0YXR1cyA9IHZpZDBfc3RhdHVzO1xuIFx0fSBlbHNlIHtcbiBcdFx0c3RhdHVzID0gaWNlX2ZsdHJfY2xlYXJfdnNpX3Byb21pc2MoXHUwMDI2dnNpLVx1MDAzZWJhY2stXHUwMDNlaHcsIHZzaS1cdTAwM2VpZHgsXG4gXHRcdFx0XHRcdFx0ICAgIHByb21pc2NfbSwgMCk7XG5AQCAtMzE3LDYgKzMyOCw0OSBAQCBzdGF0aWMgaW50IGljZV9jbGVhcl9wcm9taXNjKHN0cnVjdCBpY2VfdnNpICp2c2ksIHU4IHByb21pc2NfbSlcbiBcdHJldHVybiBzdGF0dXM7XG4gfVxuIFxuKy8qKlxuKyAqIGljZV92c2lfZXhpdF9kZmx0X3Byb21pc2MgLSBkcm9wIHRoZSBkZWZhdWx0IFZTSSBSeCBydWxlIG9uIHByb21pc2Mgb2ZmXG4rICogQHZzaTogdGhlIFZTSSBsZWF2aW5nIHByb21pc2N1b3VzIG1vZGVcbisgKlxuKyAqIEZvciBhbiBJRkZfQUxMTVVMVEkgVlNJIHdpdGggVkxBTnMgdGhlIHBlci1WSUQgbXVsdGljYXN0IHJ1bGVzIGFyZVxuKyAqIHJlaW5zdGF0ZWQgYmVmb3JlIHRoZSBkZWZhdWx0IHJ1bGUgaXMgY2xlYXJlZCBzbyBjb3ZlcmFnZSBuZXZlciBsYXBzZXM7XG4rICogdGhlIHRoZW4gcmVkdW5kYW50IHZpZD0wIHJ1bGUgaXMgZHJvcHBlZCBiZXN0LWVmZm9ydC4gVGhlIGNhbGxlZXMgbG9nXG4rICogdGhlaXIgb3duIGZhaWx1cmVzLCBzbyBlcnJvciByZXR1cm5zIGFyZSBub3QgcmUtbG9nZ2VkIGhlcmUuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZXJyb3Igd2l0aCB0aGUgZGVmYXVsdCBydWxlIGxlZnQgaW4gcGxhY2UuXG4rICovXG4rc3RhdGljIGludCBpY2VfdnNpX2V4aXRfZGZsdF9wcm9taXNjKHN0cnVjdCBpY2VfdnNpICp2c2kpXG4re1xuK1x0c3RydWN0IGljZV92c2lfdmxhbl9vcHMgKnZsYW5fb3BzID0gaWNlX2dldF9jb21wYXRfdnNpX3ZsYW5fb3BzKHZzaSk7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdnNpLVx1MDAzZW5ldGRldjtcbitcdHN0cnVjdCBpY2VfaHcgKmh3ID0gXHUwMDI2dnNpLVx1MDAzZWJhY2stXHUwMDNlaHc7XG4rXHRib29sIHJlc3RvcmVfbWM7XG4rXHRpbnQgZXJyO1xuK1xuK1x0cmVzdG9yZV9tYyA9ICh2c2ktXHUwMDNlY3VycmVudF9uZXRkZXZfZmxhZ3MgXHUwMDI2IElGRl9BTExNVUxUSSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAgaWNlX3ZzaV9oYXNfbm9uX3plcm9fdmxhbnModnNpKTtcbitcbitcdGlmIChyZXN0b3JlX21jKSB7XG4rXHRcdGVyciA9IGljZV9mbHRyX3NldF92bGFuX3ZzaV9wcm9taXNjKGh3LCB2c2ksXG4rXHRcdFx0XHRcdFx0ICAgIElDRV9NQ0FTVF9WTEFOX1BST01JU0NfQklUUyk7XG4rXHRcdGlmIChlcnIgXHUwMDI2XHUwMDI2IGVyciAhPSAtRUVYSVNUKVxuK1x0XHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRlcnIgPSBpY2VfY2xlYXJfZGZsdF92c2kodnNpKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRpZiAobmV0ZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpXG4rXHRcdHZsYW5fb3BzLVx1MDAzZWVuYV9yeF9maWx0ZXJpbmcodnNpKTtcbitcbitcdGlmIChyZXN0b3JlX21jKVxuK1x0XHRpY2VfZmx0cl9jbGVhcl92c2lfcHJvbWlzYyhodywgdnNpLVx1MDAzZWlkeCwgSUNFX01DQVNUX1BST01JU0NfQklUUyxcbitcdFx0XHRcdFx0ICAgMCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyoqXG4gICogaWNlX3ZzaV9zeW5jX2ZsdHIgLSBVcGRhdGUgdGhlIFZTSSBmaWx0ZXIgbGlzdCB0byB0aGUgSFdcbiAgKiBAdnNpOiBwdHIgdG8gdGhlIFZTSVxuQEAgLTQ0MiwxNyArNDk2LDEyIEBAIHN0YXRpYyBpbnQgaWNlX3ZzaV9zeW5jX2ZsdHIoc3RydWN0IGljZV92c2kgKnZzaSlcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHQvKiBDbGVhciBSeCBmaWx0ZXIgdG8gcmVtb3ZlIHRyYWZmaWMgZnJvbSB3aXJlICovXG4gXHRcdFx0aWYgKGljZV9pc192c2lfZGZsdF92c2kodnNpKSkge1xuLVx0XHRcdFx0ZXJyID0gaWNlX2NsZWFyX2RmbHRfdnNpKHZzaSk7XG4rXHRcdFx0XHRlcnIgPSBpY2VfdnNpX2V4aXRfZGZsdF9wcm9taXNjKHZzaSk7XG4gXHRcdFx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIkVycm9yICVkIGNsZWFyaW5nIGRlZmF1bHQgVlNJICVpIFJ4IHJ1bGVcXG5cIixcbi1cdFx0XHRcdFx0XHQgICBlcnIsIHZzaS1cdTAwM2V2c2lfbnVtKTtcbiBcdFx0XHRcdFx0dnNpLVx1MDAzZWN1cnJlbnRfbmV0ZGV2X2ZsYWdzIHw9XG4gXHRcdFx0XHRcdFx0SUZGX1BST01JU0M7XG4gXHRcdFx0XHRcdGdvdG8gb3V0X3Byb21pc2M7XG4gXHRcdFx0XHR9XG4tXHRcdFx0XHRpZiAodnNpLVx1MDAzZW5ldGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjZcbi1cdFx0XHRcdCAgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpXG4tXHRcdFx0XHRcdHZsYW5fb3BzLVx1MDAzZWVuYV9yeF9maWx0ZXJpbmcodnNpKTtcbiBcdFx0XHR9XG4gXG4gXHRcdFx0LyogZGlzYWJsZSBhbGxtdWx0aSBoZXJlLCBidXQgb25seSBpZiBhbGxtdWx0aSBpcyBub3RcbkBAIC0zNjc1LDEwICszNzI0LDkgQEAgaW50IGljZV92bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgX19iZTE2IHByb3RvLCB1MTYgdmlkKVxuIFx0d2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoSUNFX0NGR19CVVNZLCB2c2ktXHUwMDNlc3RhdGUpKVxuIFx0XHR1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7XG4gXG4tXHQvKiBBZGQgbXVsdGljYXN0IHByb21pc2MgcnVsZSBmb3IgdGhlIFZMQU4gSUQgdG8gYmUgYWRkZWQgaWZcbi1cdCAqIGFsbC1tdWx0aWNhc3QgaXMgY3VycmVudGx5IGVuYWJsZWQuXG4tXHQgKi9cbi1cdGlmICh2c2ktXHUwMDNlY3VycmVudF9uZXRkZXZfZmxhZ3MgXHUwMDI2IElGRl9BTExNVUxUSSkge1xuK1x0Lyogc2tpcCB0aGUgcGVyLVZJRCBydWxlIHdoZW4gdGhlIERGTFQgUnggcnVsZSBhbHJlYWR5IGNvdmVycyB0aGlzIFZJRCAqL1xuK1x0aWYgKCh2c2ktXHUwMDNlY3VycmVudF9uZXRkZXZfZmxhZ3MgXHUwMDI2IElGRl9BTExNVUxUSSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWljZV9pc192c2lfZGZsdF92c2kodnNpKSkge1xuIFx0XHRyZXQgPSBpY2VfZmx0cl9zZXRfdnNpX3Byb21pc2MoXHUwMDI2dnNpLVx1MDAzZWJhY2stXHUwMDNlaHcsIHZzaS1cdTAwM2VpZHgsXG4gXHRcdFx0XHRcdCAgICAgICBJQ0VfTUNBU1RfVkxBTl9QUk9NSVNDX0JJVFMsXG4gXHRcdFx0XHRcdCAgICAgICB2aWQpO1xuQEAgLTM2OTYsMTEgKzM3NDQsMTIgQEAgaW50IGljZV92bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgX19iZTE2IHByb3RvLCB1MTYgdmlkKVxuIFx0aWYgKHJldClcbiBcdFx0Z290byBmaW5pc2g7XG4gXG4tXHQvKiBJZiBhbGwtbXVsdGljYXN0IGlzIGN1cnJlbnRseSBlbmFibGVkIGFuZCB0aGlzIFZMQU4gSUQgaXMgb25seSBvbmVcbi1cdCAqIGJlc2lkZXMgVkxBTi0wIHdlIGhhdmUgdG8gdXBkYXRlIGxvb2stdXAgdHlwZSBvZiBtdWx0aWNhc3QgcHJvbWlzY1xuLVx0ICogcnVsZSBmb3IgVkxBTi0wIGZyb20gSUNFX1NXX0xLVVBfUFJPTUlTQyB0byBJQ0VfU1dfTEtVUF9QUk9NSVNDX1ZMQU4uXG4rXHQvKiBPbiB0aGUgZmlyc3Qgbm9uLXplcm8gVkxBTiwgcHJvbW90ZSB0aGUgVkxBTi0wIG11bHRpY2FzdCBwcm9taXNjXG4rXHQgKiBydWxlIGZyb20gSUNFX1NXX0xLVVBfUFJPTUlTQyB0byBJQ0VfU1dfTEtVUF9QUk9NSVNDX1ZMQU4uIFNraXAgd2hlblxuK1x0ICogdGhlIERGTFQgUnggcnVsZSBpcyBpbnN0YWxsZWQ7IGl0IGFscmVhZHkgY292ZXJzIGV2ZXJ5IFZJRC5cbiBcdCAqL1xuIFx0aWYgKCh2c2ktXHUwMDNlY3VycmVudF9uZXRkZXZfZmxhZ3MgXHUwMDI2IElGRl9BTExNVUxUSSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWljZV9pc192c2lfZGZsdF92c2kodnNpKSBcdTAwMjZcdTAwMjZcbiBcdCAgICBpY2VfdnNpX251bV9ub25femVyb192bGFucyh2c2kpID09IDEpIHtcbiBcdFx0aWNlX2ZsdHJfY2xlYXJfdnNpX3Byb21pc2MoXHUwMDI2dnNpLVx1MDAzZWJhY2stXHUwMDNlaHcsIHZzaS1cdTAwM2VpZHgsXG4gXHRcdFx0XHRcdCAgIElDRV9NQ0FTVF9QUk9NSVNDX0JJVFMsIDApO1xuQEAgLTM3NjMsMTEgKzM4MTIsMTIgQEAgaW50IGljZV92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIF9fYmUxNiBwcm90bywgdTE2IHZpZClcbiBcdFx0XHRcdFx0ICAgSUNFX01DQVNUX1ZMQU5fUFJPTUlTQ19CSVRTLCB2aWQpO1xuIFxuIFx0aWYgKCFpY2VfdnNpX2hhc19ub25femVyb192bGFucyh2c2kpKSB7XG4tXHRcdC8qIFVwZGF0ZSBsb29rLXVwIHR5cGUgb2YgbXVsdGljYXN0IHByb21pc2MgcnVsZSBmb3IgVkxBTiAwXG4tXHRcdCAqIGZyb20gSUNFX1NXX0xLVVBfUFJPTUlTQ19WTEFOIHRvIElDRV9TV19MS1VQX1BST01JU0Mgd2hlblxuLVx0XHQgKiBhbGwtbXVsdGljYXN0IGlzIGVuYWJsZWQgYW5kIFZMQU4gMCBpcyB0aGUgb25seSBWTEFOIHJ1bGUuXG4rXHRcdC8qIExhc3Qgbm9uLXplcm8gVkxBTiBnb25lOiBkZW1vdGUgdGhlIFZMQU4tMCBtdWx0aWNhc3QgcHJvbWlzY1xuK1x0XHQgKiBydWxlIGJhY2sgdG8gSUNFX1NXX0xLVVBfUFJPTUlTQy4gU2tpcCB3aGVuIHRoZSBERkxUIFJ4IHJ1bGVcbitcdFx0ICogaXMgaW5zdGFsbGVkOyBubyByZWNpcGUgc3dhcCBpcyBuZWVkZWQuXG4gXHRcdCAqL1xuLVx0XHRpZiAodnNpLVx1MDAzZWN1cnJlbnRfbmV0ZGV2X2ZsYWdzIFx1MDAyNiBJRkZfQUxMTVVMVEkpIHtcbitcdFx0aWYgKCh2c2ktXHUwMDNlY3VycmVudF9uZXRkZXZfZmxhZ3MgXHUwMDI2IElGRl9BTExNVUxUSSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhaWNlX2lzX3ZzaV9kZmx0X3ZzaSh2c2kpKSB7XG4gXHRcdFx0aWNlX2ZsdHJfY2xlYXJfdnNpX3Byb21pc2MoXHUwMDI2dnNpLVx1MDAzZWJhY2stXHUwMDNlaHcsIHZzaS1cdTAwM2VpZHgsXG4gXHRcdFx0XHRcdFx0ICAgSUNFX01DQVNUX1ZMQU5fUFJPTUlTQ19CSVRTLFxuIFx0XHRcdFx0XHRcdCAgIDApO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTE6NTU6MzAuMzkwOTMyNTY5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTAyNzAxNjcyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZlYXNpYmlsaXR5IG9mIHRoZSBJY2UgRHJpdmVyIFBhdGNoKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBUaGlzIHBhdGNoIHNlcmllcyB0b3VjaGVzIHRoZSBgaWNlYCBkcml2ZXIsIHNwZWNpZmljYWxseSBgaWNlX2Vzd2l0Y2guY2AgYW5kIGBpY2VfbWFpbi5jYC4gSXQncyBhbHRlcmluZyBwcm9taXNjdW91cyBtb2RlIGFuZCBWTEFOIGhhbmRsaW5nIHdpdGhpbiB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBkcml2ZXIuIENsZWFybHksIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIHRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBpbiBhIGZ1enplZCBlbnZpcm9ubWVudC5cblxuTXkgZmlyc3QgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgaXMgZWFzaWx5IGZ1enphYmxlLiBJdCdzIGEgbmV0d29yayBkcml2ZXIgYW5kIHRoZXJlZm9yZSBjb3VsZCBiZSB2dWxuZXJhYmxlLiBIb3dldmVyLCBpdOKAmXMgZm9yIHRoZSBJbnRlbCBFODAwIHNlcmllcyBoYXJkd2FyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIHRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBpbiBhIGZ1enplZCBlbnZpcm9ubWVudC5cblxuVGhpcyBtZWFucyBpdCdzIGxpa2VseSBhIHBoeXNpY2FsIGhhcmR3YXJlIGRldmljZS4gSWYgaXQncyBhIHBoeXNpY2FsIGRldmljZSwgSSBuZWVkIHRvIGtub3cgaWYgaXQncyBlbXVsYXRlZCBpbiBhbnkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIExldCBtZSBxdWlja2x5IGNoZWNrIGlmIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpIGVtdWxhdGVzIHRoZSBJbnRlbCBFODAwIHNlcmllcyAoaWNlKS4gTm8sIFFFTVUgZW11bGF0ZXMgZTEwMDAsIGlnYiwgYW5kIHZpcnRpby1uZXQsIGJ1dCBub3QgaWNlLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBpcyBhbnkgc29mdHdhcmUgZW11bGF0aW9uIG9yIGlmIHRoaXMgaXMgZW50aXJlbHkgaGFyZHdhcmUtZGVwZW5kZW50LiBJZiBpdCdzIGhhcmR3YXJlLWRlcGVuZGVudCwgaXQgd2lsbCBiZSBoYXJkIHRvIGZ1enosIHVubGVzcyB3ZSBoYXZlIFBDSSBwYXNzdGhyb3VnaC5cblxuVGhlIGluc3RydWN0aW9ucyBJIGhhdmUgZXhwbGljaXRseSBzdGF0ZSB0byBtYXJrIHBhdGNoZXMgYXMgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIiBpZiB0aGV5IGNvbnRhaW4gY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS5cblxuU28sIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpczogY2FuIEkgdGVzdCB0aGUgYGljZWAgZHJpdmVyIGluIFFFTVU/IE5vcm1hbGx5LCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2AgcmVxdWlyZXMgYWN0dWFsIEludGVsIEU4MDAgaGFyZHdhcmUuIExldCBtZSBkb3VibGUtY2hlY2sgaWYgdGhlcmUncyBhbnkgYGljZWAgZW11bGF0aW9uIGluIFFFTVUuIE5vLiBJcyB0aGVyZSBhbnkgd2F5IHRvIHRyaWdnZXIgdGhpcyBjb2RlIHdpdGhvdXQgaGFyZHdhcmU/XG5cbkxldCdzIGNoZWNrIGlmIHRoZXJlJ3MgYSBtb2NrIG9yIHNvbWUga2luZCBvZiB3b3JrYXJvdW5kLiBJJ2xsIHVzZSBgZ3JlcHBlcmAgdG8gc2VhcmNoIGZvciBhbnkgdGVzdHMgb3IgbW9jayBpbXBsZW1lbnRhdGlvbnMgcmVsYXRlZCB0byB0aGUgYGljZWAgZHJpdmVyLiBUaGlzIHdpbGwgYmUgdGhlIGRlY2lkaW5nIGZhY3Rvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg4NiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDExOjU1OjM5LjQxNzk1MjA3OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjgyODkxNjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImljZV9lc3dpdGNoX3NldHVwX2VudlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guYy0xMy0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guYzoxNDogKiBpY2VfZXN3aXRjaF9zZXR1cF9lbnYgLSBjb25maWd1cmUgZXN3aXRjaCBIVyBmaWx0ZXJzXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmMtMTUtICogQHBmOiBwb2ludGVyIHRvIFBGIHN0cnVjdFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmMtMTktICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmM6MjA6c3RhdGljIGludCBpY2VfZXN3aXRjaF9zZXR1cF9lbnYoc3RydWN0IGljZV9wZiAqcGYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmMtMjEte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmM9MzAzPXN0YXRpYyBpbnQgaWNlX2Vzd2l0Y2hfZW5hYmxlX3N3aXRjaGRldihzdHJ1Y3QgaWNlX3BmICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jLTMxOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guYzozMTk6XFx0aWYgKGljZV9lc3dpdGNoX3NldHVwX2VudihwZikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmMtMzIwLVxcdFxcdHJldHVybiAtRU5PREVWO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxMTo1NTo0MS43MDA4NTA1NjlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzIzMjMwNTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGljZWAgRHJpdmVyIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgaWNlYCBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgdGhvc2UgSW50ZWwgRTgwMCBzZXJpZXMgUENJZSBuZXR3b3JrIGNhcmRzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJUaGlzIGlzIGEgKnBoeXNpY2FsKiBkZXZpY2UgZHJpdmVyLlwiIFdlJ3JlIHRhbGtpbmcgYWJvdXQgZGlyZWN0IGludGVyYWN0aW9uIHdpdGggaGFyZHdhcmUgdGhyb3VnaCB0aGUgUENJZSBidXMuIEFuZCB0aGVyZSdzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBJJ20gYXdhcmUgb2YgaW4gUUVNVSBvciBldmVuIGJha2VkIGludG8gdGhlIExpbnV4IGtlcm5lbCBpdHNlbGYg4oCTIG5vdGhpbmcgbGlrZSBhIGBtYWM4MDIxMV9od3NpbWAgb3IgYSBgbmV0ZGV2c2ltYCB0byBtaW1pYyB0aGUgYmVoYXZpb3Igb2YgdGhpcyBraW5kIG9mIG5ldHdvcmsgYWRhcHRlci5cblxuR2l2ZW4gdGhhdCByZWFsaXR5LCBhbmQgYXNzdW1pbmcgdGhpcyBpcyBmb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBsaWtlIEdDRSBvciBRRU1VLCB0aGUgY29kZSBwYXRocyBhcmUgYmFzaWNhbGx5IHVucmVhY2hhYmxlLiBJIGNhbid0IGltYWdpbmUgYSBzY2VuYXJpbyB3aGVyZSBJIGNvdWxkIHRyaWdnZXIgYW55IG1lYW5pbmdmdWwgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGRyaXZlciwgYmVjYXVzZSB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBzaW1wbHkgaXNuJ3QgdGhlcmUgdG8gcmVzcG9uZC4gSW4gb3RoZXIgd29yZHMsIHRoZXJlJ3Mgbm90aGluZyB0byBcImZ1enpcIi5cblxuVGhlcmVmb3JlLCB3aXRob3V0IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiwgbXkgaW5pdGlhbCBjb25jbHVzaW9uIGlzIHRoYXQgdGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gaWYgSSdtIG1pc3Npbmcgc29tZXRoaW5nLCB0aG91Z2guLi4gTGV0IG1lIGRvdWJsZSBjaGVjayBpZiB0aGVyZSdzIGFueSBlbXVsYXRpb24gZm9yIGBpY2VgLi4uIEknbGwgY2hlY2sgbXkgbWVtb3J5IGFuZCBkbyBhIGN1cnNvcnkgc2VhcmNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjEzLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDExOjU1OjQ2LjAyNDA4MzQzOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDEwMjU0OTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19JQ0VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZz01OTI9Q09ORklHX0k0MEU9eVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc6NTkzOkNPTkZJR19JQ0U9eVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWctNTk0LUNPTkZJR19GTTEwSz15XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnPTYwOD1DT05GSUdfSTQwRT15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZzo2MDk6Q09ORklHX0lDRT15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy02MTAtQ09ORklHX0ZNMTBLPXlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19GTTEwSykgKz0gZm0xMGsvXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX0lDRSkgKz0gaWNlL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL01ha2VmaWxlLTIxLW9iai0kKENPTkZJR19JRFBGKSArPSBpZHBmL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL01ha2VmaWxlPTg9c3ViZGlyLWNjZmxhZ3MteSArPSAtSSQoc3JjKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19JQ0UpICs9IGljZS5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL01ha2VmaWxlLTEwLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL01ha2VmaWxlPTYwPWljZS0kKENPTkZJR19YRFBfU09DS0VUUykgKz0gaWNlX3hzay5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL01ha2VmaWxlOjYxOmljZS0kKENPTkZJR19JQ0VfU1dJVENIREVWKSArPSBpY2VfZXN3aXRjaC5vIGljZV9lc3dpdGNoX2JyLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvTWFrZWZpbGUtNjItaWNlLSQoQ09ORklHX0dOU1MpICs9IGljZV9nbnNzLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvTWFrZWZpbGU6NjM6aWNlLSQoQ09ORklHX0lDRV9IV01PTikgKz0gaWNlX2h3bW9uLm9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5oLTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmg6MTA6I2lmZGVmIENPTkZJR19JQ0VfU1dJVENIREVWXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmgtMTEtdm9pZCBpY2VfZXN3aXRjaF9kZXRhY2hfdmYoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfdmYgKnZmKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5oPTM0PXZvaWQgaWNlX2Vzd2l0Y2hfZGVjZmdfdnNpKHN0cnVjdCBpY2VfdnNpICp2c2ksIGNvbnN0IHU4ICptYWMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5oOjM1OiNlbHNlIC8qIENPTkZJR19JQ0VfU1dJVENIREVWICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmgtMzYtc3RhdGljIGlubGluZSB2b2lkXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guaD05OD1zdGF0aWMgaW5saW5lIHZvaWQgaWNlX2Vzd2l0Y2hfZGVjZmdfdnNpKHN0cnVjdCBpY2VfdnNpICp2c2ksIGNvbnN0IHU4ICptYWMpIHsgfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5oOjk5OiNlbmRpZiAvKiBDT05GSUdfSUNFX1NXSVRDSERFViAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5oLTEwMC0jZW5kaWYgLyogX0lDRV9FU1dJVENIX0hfICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2h3bW9uLmgtNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2h3bW9uLmg6NzojaWZkZWYgQ09ORklHX0lDRV9IV01PTlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaHdtb24uaC04LXZvaWQgaWNlX2h3bW9uX2luaXQoc3RydWN0IGljZV9wZiAqcGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaHdtb24uaD05PXZvaWQgaWNlX2h3bW9uX2V4aXQoc3RydWN0IGljZV9wZiAqcGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfaHdtb24uaDoxMDojZWxzZSAvKiBDT05GSUdfSUNFX0hXTU9OICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9od21vbi5oLTExLXN0YXRpYyBpbmxpbmUgdm9pZCBpY2VfaHdtb25faW5pdChzdHJ1Y3QgaWNlX3BmICpwZikgeyB9XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9od21vbi5oPTEyPXN0YXRpYyBpbmxpbmUgdm9pZCBpY2VfaHdtb25fZXhpdChzdHJ1Y3QgaWNlX3BmICpwZikgeyB9XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9od21vbi5oOjEzOiNlbmRpZiAvKiBDT05GSUdfSUNFX0hXTU9OICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9od21vbi5oLTE0LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYz0yMDM2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWNlX2Nyb3NzdHN0YW1wX2NmZyBpY2VfY3Jvc3N0c3RhbXBfY2ZnX2U4MnggPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTIwNDgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoyMDQ5OiNpZmRlZiBDT05GSUdfSUNFX0hXVFNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTIwNTAtc3RhdGljIGNvbnN0IHN0cnVjdCBpY2VfY3Jvc3N0c3RhbXBfY2ZnIGljZV9jcm9zc3RzdGFtcF9jZmdfZTgzMCA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjA2Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjIwNjM6I2VuZGlmIC8qIENPTkZJR19JQ0VfSFdUUyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjA2NC0vKipcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM9MjE3NT1zdGF0aWMgaW50IGljZV9wdHBfZ2V0Y3Jvc3N0c3RhbXAoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yMTg4LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MjE4OTojaWZkZWYgQ09ORklHX0lDRV9IV1RTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yMTkwLVxcdGNhc2UgSUNFX01BQ19FODMwOlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yMTkyLVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MjE5MzojZW5kaWYgLyogQ09ORklHX0lDRV9IV1RTICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yMTk0LVxcdGRlZmF1bHQ6XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTI1MjM9c3RhdGljIHZvaWQgaWNlX3B0cF9zZXRfZnVuY3NfZTgzMChzdHJ1Y3QgaWNlX3BmICpwZilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTI1MjQte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MjUyNTojaWZkZWYgQ09ORklHX0lDRV9IV1RTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yNTI2LVxcdGlmIChwY2llX3B0bV9lbmFibGVkKHBmLVxcdTAwM2VwZGV2KSBcXHUwMDI2XFx1MDAyNiBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVJUKSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjUyOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjI1Mjk6I2VuZGlmIC8qIENPTkZJR19JQ0VfSFdUUyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjUzMC1cXHQvKiBSZXN0IG9mIHRoZSBjb25maWcgaXMgdGhlIHNhbWUgYXMgYmFzZSBFODEwICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDExOjU1OjQ4LjQzNDM0MzU5NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5MjQ2ODI0MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBXb3J0aEZ1enppbmcgRmxhZyBmb3IgdGhlIGBpY2VgIERyaXZlcioqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgYGljZWAgZHJpdmVyLCB3aGljaCwgYXMgd2Uga25vdywgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciB0aGUgSW50ZWwgRTgwMCBTZXJpZXMgUENJZSBuZXR3b3JrIGNhcmRzLiBUaGlzIG1lYW5zIGl0J3MgYSBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXIsIG5vdCBzb21ldGhpbmcgYWJzdHJhY3QuIE5vdywgY29uc2lkZXJpbmcgbXkgZXhwZXJpZW5jZSB3aXRoIHZpcnR1YWxpemF0aW9uLCBlc3BlY2lhbGx5IGluIGVudmlyb25tZW50cyBsaWtlIEdDRSBhbmQgUUVNVSwgaXQncyBjbGVhciB0aGVyZSdzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBvZiB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIG9yLCBmb3IgdGhhdCBtYXR0ZXIsIGl0cyBkcml2ZXIgcHJlc2VudCB3aXRoaW4gZWl0aGVyIFFFTVUncyBvciB0aGUgc3RhbmRhcmQgTGludXgga2VybmVsIGNvZGViYXNlLiBJZiB0aGUgaGFyZHdhcmUgaXMgbm90IHByZXNlbnQsIHRoZW4gaXRzIHJlc3BlY3RpdmUgZHJpdmVyJ3MgZnVuY3Rpb25zIGFyZSBub3QgbGlrZWx5IHRvIGdldCBpbnZva2VkLlxuXG5HaXZlbiB0aGF0LCBJJ20gZm9yY2VkIHRvIGNvbmNsdWRlIHRoYXQgYW55IGNvZGUgcGF0aHMgcmVsYXRlZCB0byB0aGUgYGljZWAgZHJpdmVyIGFyZSBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSB3aXRoaW4gdGhlc2UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZXJlJ3Mgbm8gcHJhY3RpY2FsIHZhbHVlIGluIGZ1enppbmcgdGhpcyBkcml2ZXIgd2l0aGluIGEgdmlydHVhbCBjb250ZXh0LCBhcyB0aGUgaW50ZW5kZWQgY29uZGl0aW9ucyB0aGF0IHdvdWxkIHRyaWdnZXIgdGhlIGZ1enppbmcgZG8gbm90IGV4aXN0LlxuXG5Db25zZXF1ZW50bHksIEknbSBnb2luZyB0byBzZXQgdGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgdG8gYGZhbHNlYC4gSSBiZWxpZXZlIG15IHJlYXNvbmluZywgYmFzZWQgb24gdGhlIGhhcmR3YXJlIGRlcGVuZGVuY2UgYW5kIHRoZSBsYWNrIG9mIGVtdWxhdGlvbiBpbiBjb21tb24gdmlydHVhbGl6YXRpb24gcGxhdGZvcm1zLCBpcyBzb3VuZC4gVGhpcyBpcyBtb3JlIG9mIGFuIGFzc2Vzc21lbnQgb2YgcHJhY3RpY2FsIGZlYXNpYmlsaXR5IHJhdGhlciB0aGFuIGFuIGludHJpbnNpYyBjaGFyYWN0ZXJpc3RpYyBvZiB0aGUgY29kZS4gV2UgY2FuJ3Qgc2FmZWx5IHRlc3QgdGhpcyBpbiBRRU1VLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDUyLCJPdXRwdXRUb2tlbnMiOjkyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTE6NTU6NTUuMzU5MDI4ODI5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBMaW51eCBEcml2ZXIgKGljZSkuIFRoaXMgZHJpdmVyIGlzIGZvciBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGFuZCBsYWNrcyBzb2Z0d2FyZSBlbXVsYXRpb24gaW4gUUVNVSBvciB0aGUgTGludXgga2VybmVsLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCB0ZXN0IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgTGludXggRHJpdmVyIChpY2UpLiBUaGlzIGRyaXZlciBpcyBmb3IgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBhbmQgbGFja3Mgc29mdHdhcmUgZW11bGF0aW9uIGluIFFFTVUgb3IgdGhlIExpbnV4IGtlcm5lbC4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowcgjk2[1] Phase: Running StartedAt: 2026-06-22 11:56:07 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgjk2[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-06-22 11:56:07 +0000 UTC FinishedAt: 2026-06-22 11:56:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}