Name: series-workflowc2vxx Phase: Failed StartedAt: 2026-07-15 07:13:11 +0000 UTC FinishedAt: 2026-07-15 08:07:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2vxx[0] Phase: Succeeded StartedAt: 2026-07-15 07:13:11 +0000 UTC FinishedAt: 2026-07-15 08:07:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2vxx[0].run-triage Phase: Succeeded StartedAt: 2026-07-15 07:13:11 +0000 UTC FinishedAt: 2026-07-15 08:07:40 +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+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB1c2FnZSBvZiBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIGluIHRocmVlIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnM6IEFNRCBYRE5BIChgZHJpdmVycy9hY2NlbC9hbWR4ZG5hYCksIEludGVsIFhlIChgZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY2AsIHdoaWNoIGlzIG9ubHkgdXNlZCBieSBgeGVgKSwgYW5kIE5vdXZlYXUgKGBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdWApLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgKEFNRCBYRE5BIE5QVSwgSW50ZWwgWGUgR1BVLCBOVklESUEgR1BVKSB0byBpbml0aWFsaXplIGFuZCBleHBvc2UgdGhlaXIgaW50ZXJmYWNlcy4gU2luY2Ugc3l6a2FsbGVyIG9wZXJhdGVzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoR0NFL1FFTVUpIHdpdGhvdXQgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBvciBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoZW0sIHRoZXNlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enouJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjAzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjVmMmQ4ZDc5MjdmOTIwODdhNDM3ZjAxODJlN2ZmMWE5N2YxNTAyOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDE1IDA4OjAzOjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdFxuaW5kZXggNWM4OGQyY2YwODE4MzMuLmZjMWI4ZGMxOTgyNTBlIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3RcbkBAIC0yMDYsNyAmIzQzOzIwNiw3IEBAIFRoZSB1c2FnZSBwYXR0ZXJuIGlzOjpcbiAgICAgICAgICAgZ290byBvdXRfcHV0O1xuIFxuICAgICAgIHRha2VfbG9jayhkcml2ZXItXHUwMDNldXBkYXRlKTtcbi0gICAgICBpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkoXHUwMDI2aW50ZXJ2YWxfc3ViLCByYW5nZS5ub3RpZmllcl9zZXEpKSB7XG4mIzQzOyAgICAgIGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShyYW5nZS5ub3RpZmllciwgcmFuZ2Uubm90aWZpZXJfc2VxKSkge1xuICAgICAgICAgICByZWxlYXNlX2xvY2soZHJpdmVyLVx1MDAzZXVwZGF0ZSk7XG4gICAgICAgICAgIGdvdG8gYWdhaW47XG4gICAgICAgfVxuQEAgLTIyNSw3ICYjNDM7MjI1LDggQEAgVGhlIHVzYWdlIHBhdHRlcm4gaXM6OlxuIFRoZSBkcml2ZXItXHUwMDNldXBkYXRlIGxvY2sgaXMgdGhlIHNhbWUgbG9jayB0aGF0IHRoZSBkcml2ZXIgdGFrZXMgaW5zaWRlIGl0c1xuIGludmFsaWRhdGUoKSBjYWxsYmFjay4gVGhhdCBsb2NrIG11c3QgYmUgaGVsZCBiZWZvcmUgY2FsbGluZ1xuIG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KCkgdG8gYXZvaWQgYW55IHJhY2Ugd2l0aCBhIGNvbmN1cnJlbnQgQ1BVIHBhZ2UgdGFibGVcbi11cGRhdGUuXG4mIzQzO3VwZGF0ZS4gVGhlIHJldHJ5IGNoZWNrIG11c3QgdXNlIHRoZSBzYW1lIG5vdGlmaWVyIGFuZCBzZXF1ZW5jZSBudW1iZXIgc3RvcmVkXG4mIzQzO2luIGBgcmFuZ2VgYCBieSBgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KClgYC5cbiBcbiBIb2xkaW5nIHRoZSBtbWFwIGxvY2sgYWNyb3NzIEhNTSBmYXVsdHNcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYyBiL2RyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jXG5pbmRleCA1NDhiYTQzMTU1NTRmZi4uMjFmMjgxNzc1MWY5ZTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfY3R4LmNcbkBAIC0xMDM3LDcgJiM0MzsxMDM3LDcgQEAgc3RhdGljIGludCBhaWUyX3BvcHVsYXRlX3JhbmdlKHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKmFibylcbiBcdGJvb2wgZm91bmQ7XG4gXHRpbnQgcmV0O1xuIFxuLVx0dGltZW91dCA9IGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbiYjNDM7XHR0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbiBhZ2FpbjpcbiBcdGZvdW5kID0gZmFsc2U7XG4gXHRkb3duX3dyaXRlKFx1MDAyNnhkbmEtXHUwMDNlbm90aWZpZXJfbG9jayk7XG5AQCAtMTA2MiwxMyAmIzQzOzEwNjIsOSBAQCBzdGF0aWMgaW50IGFpZTJfcG9wdWxhdGVfcmFuZ2Uoc3RydWN0IGFtZHhkbmFfZ2VtX29iaiAqYWJvKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdH1cbiBcbi1cdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNm1hcHAtXHUwMDNlcmFuZ2UsXG4tXHRcdFx0bWF4X3QobG9uZywgdGltZW91dCAtIGppZmZpZXMsIDEpKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0aWYgKHJldCA9PSAtRUJVU1kpXG4tXHRcdFx0cmV0ID0gLUVUSU1FO1xuJiM0MztcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNm1hcHAtXHUwMDNlcmFuZ2UsIHRpbWVvdXQpO1xuJiM0MztcdGlmIChyZXQpXG4gXHRcdGdvdG8gcHV0X21tO1xuLVx0fVxuIFxuIFx0ZG93bl93cml0ZShcdTAwMjZ4ZG5hLVx1MDAzZW5vdGlmaWVyX2xvY2spO1xuIFx0aWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KFx1MDAyNm1hcHAtXHUwMDNlbm90aWZpZXIsIG1hcHAtXHUwMDNlcmFuZ2Uubm90aWZpZXJfc2VxKSkge1xuQEAgLTEwODYsNyAmIzQzOzEwODIsNyBAQCBzdGF0aWMgaW50IGFpZTJfcG9wdWxhdGVfcmFuZ2Uoc3RydWN0IGFtZHhkbmFfZ2VtX29iaiAqYWJvKVxuIHB1dF9tbTpcbiBcdGFtZHhkbmFfdW1hcF9wdXQobWFwcCk7XG4gXHRtbXB1dChtbSk7XG4tXHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldHVybiByZXQgPT0gLUVCVVNZID8gLUVUSU1FIDogcmV0O1xuIH1cbiBcbiBpbnQgYWllMl9jbWRfc3VibWl0KHN0cnVjdCBhbWR4ZG5hX2h3Y3R4ICpod2N0eCwgc3RydWN0IGFtZHhkbmFfc2NoZWRfam9iICpqb2IsIHU2NCAqc2VxKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jXG5pbmRleCBiOGYyZGQ5OTgyZjUzYy4uNzZlOGEwMDI4YzdmYzkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jXG5AQCAtODUyLDggJiM0Mzs4NTIsNyBAQCBlbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgZHJtX2dwdXN2bV9zY2FuX21tKHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSxcbiBcdFx0LmVuZCA9IGVuZCxcbiBcdFx0LmRldl9wcml2YXRlX293bmVyID0gZGV2X3ByaXZhdGVfb3duZXIsXG4gXHR9O1xuLVx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID1cbi1cdFx0amlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XG4gXHRlbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgc3RhdGUgPSBEUk1fR1BVU1ZNX1NDQU5fVU5QT1BVTEFURUQsIG5ld19zdGF0ZTtcbiBcdHVuc2lnbmVkIGxvbmcgKnBmbnM7XG4gXHR1bnNpZ25lZCBsb25nIG5wYWdlcyA9IG5wYWdlc19pbl9yYW5nZShzdGFydCwgZW5kKTtcbkBAIC04NjcsOCAmIzQzOzg2Niw3IEBAIGVudW0gZHJtX2dwdXN2bV9zY2FuX3Jlc3VsdCBkcm1fZ3B1c3ZtX3NjYW5fbW0oc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlLFxuIFx0aG1tX3JhbmdlLmhtbV9wZm5zID0gcGZucztcbiBcbiByZXRyeTpcbi1cdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNmhtbV9yYW5nZSxcbi1cdFx0XHRcdFx0ICAgICAgIG1heCh0aW1lb3V0IC0gamlmZmllcywgMUwpKTtcbiYjNDM7XHRlcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZobW1fcmFuZ2UsIHRpbWVvdXQpO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfZnJlZTtcbiBcbkBAIC0xNDU5LDggJiM0MzsxNDU3LDcgQEAgaW50IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXG4gXHRcdC5kZXZfcHJpdmF0ZV9vd25lciA9IGN0eC1cdTAwM2VkZXZpY2VfcHJpdmF0ZV9wYWdlX293bmVyLFxuIFx0fTtcbiBcdHZvaWQgKnpkZDtcbi1cdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9XG4tXHRcdGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xuIFx0dW5zaWduZWQgbG9uZyBpLCBqO1xuIFx0dW5zaWduZWQgbG9uZyBucGFnZXMgPSBucGFnZXNfaW5fcmFuZ2UocGFnZXNfc3RhcnQsIHBhZ2VzX2VuZCk7XG4gXHR1bnNpZ25lZCBsb25nIG51bV9kbWFfbWFwcGVkO1xuQEAgLTE0NzgsOSAmIzQzOzE0NzUsNiBAQCBpbnQgZHJtX2dwdXN2bV9nZXRfcGFnZXMoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gcmV0cnk6XG4tXHRpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSlcbi1cdFx0cmV0dXJuIC1FQlVTWTtcbi1cbiBcdGhtbV9yYW5nZS5ub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihub3RpZmllcik7XG4gXHRpZiAoZHJtX2dwdXN2bV9wYWdlc192YWxpZF91bmxvY2tlZChncHVzdm0sIHN2bV9wYWdlcykpXG4gXHRcdGdvdG8gc2V0X3NlcW5vO1xuQEAgLTE0OTUsOCAmIzQzOzE0ODksNyBAQCBpbnQgZHJtX2dwdXN2bV9nZXRfcGFnZXMoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbiBcdH1cbiBcbiBcdGhtbV9yYW5nZS5obW1fcGZucyA9IHBmbnM7XG4tXHRlcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZobW1fcmFuZ2UsXG4tXHRcdFx0XHRtYXhfdChsb25nLCB0aW1lb3V0IC0gamlmZmllcywgMSkpO1xuJiM0MztcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNmhtbV9yYW5nZSwgdGltZW91dCk7XG4gXHRtbXB1dChtbSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9mcmVlO1xuQEAgLTE3MTgsOCAmIzQzOzE3MTEsNyBAQCBpbnQgZHJtX2dwdXN2bV9yYW5nZV9ldmljdChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuIFx0XHQuZW5kID0gZHJtX2dwdXN2bV9yYW5nZV9lbmQocmFuZ2UpLFxuIFx0XHQuZGV2X3ByaXZhdGVfb3duZXIgPSBOVUxMLFxuIFx0fTtcbi1cdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9XG4tXHRcdGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xuIFx0dW5zaWduZWQgbG9uZyAqcGZucztcbiBcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzID0gbnBhZ2VzX2luX3JhbmdlKGRybV9ncHVzdm1fcmFuZ2Vfc3RhcnQocmFuZ2UpLFxuIFx0XHRcdFx0XHQgICAgICAgZHJtX2dwdXN2bV9yYW5nZV9lbmQocmFuZ2UpKTtcbkBAIC0xNzM0LDggJiM0MzsxNzI2LDcgQEAgaW50IGRybV9ncHVzdm1fcmFuZ2VfZXZpY3Qoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRobW1fcmFuZ2UuaG1tX3BmbnMgPSBwZm5zO1xuLVx0ZXJyID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2aG1tX3JhbmdlLFxuLVx0XHRcdFx0bWF4X3QobG9uZywgdGltZW91dCAtIGppZmZpZXMsIDEpKTtcbiYjNDM7XHRlcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZobW1fcmFuZ2UsIHRpbWVvdXQpO1xuIFxuIFx0a3ZmcmVlKHBmbnMpO1xuIFx0bW1wdXQobW0pO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jXG5pbmRleCA0Y2ZiNmViN2M3NzE1YS4uNTg3MzU0NDZkNzgzMmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jXG5AQCAtNjc4LDE0ICYjNDM7Njc4LDIwIEBAIHN0YXRpYyBpbnQgbm91dmVhdV9yYW5nZV9mYXVsdChzdHJ1Y3Qgbm91dmVhdV9zdm1tICpzdm1tLFxuIFx0cmFuZ2UuZW5kID0gbm90aWZpZXItXHUwMDNlbm90aWZpZXIuaW50ZXJ2YWxfdHJlZS5sYXN0ICYjNDM7IDE7XG4gXG4gXHR3aGlsZSAodHJ1ZSkge1xuLVx0XHRpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkge1xuJiM0MztcdFx0bG9uZyByZW1haW5pbmcgPSB0aW1lb3V0IC0gamlmZmllcztcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIEhNTSB0aW1lb3V0IG9ubHkgYm91bmRzIHJldHJpZXMgd2hpbGUgSE1NIGlzIHdhbGtpbmcgYW5kXG4mIzQzO1x0XHQgKiBmYXVsdGluZyB0aGUgcmFuZ2UuIFRoaXMgZmF1bHQgaXMgaGFuZGxlZCBieSBhIGtlcm5lbCB3b3JrZXIsXG4mIzQzO1x0XHQgKiBzbyBmYXRhbCBzaWduYWxzIGZyb20gdGhlIGZhdWx0aW5nIHByb2Nlc3MgY2Fubm90IHN0b3AgYW5cbiYjNDM7XHRcdCAqIGVuZGxlc3Mgc3RyZWFtIG9mIGludmFsaWRhdGlvbnMgaGVyZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgdGltZW91dCkpIHtcbiBcdFx0XHRyZXQgPSAtRUJVU1k7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2cmFuZ2UsXG4tXHRcdFx0XHRcdFx0ICAgICAgIG1heCh0aW1lb3V0IC0gamlmZmllcyxcbi1cdFx0XHRcdFx0XHRcdCAgIDFMKSk7XG4mIzQzO1x0XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZyYW5nZSwgcmVtYWluaW5nKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRnb3RvIG91dDtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwODowMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdXNhZ2Ugb2YgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCBpbiB0aHJlZSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzOiBBTUQgWEROQSAoYGRyaXZlcnMvYWNjZWwvYW1keGRuYWApLCBJbnRlbCBYZSAoYGRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNgLCB3aGljaCBpcyBvbmx5IHVzZWQgYnkgYHhlYCksIGFuZCBOb3V2ZWF1IChgZHJpdmVycy9ncHUvZHJtL25vdXZlYXVgKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIChBTUQgWEROQSBOUFUsIEludGVsIFhlIEdQVSwgTlZJRElBIEdQVSkgdG8gaW5pdGlhbGl6ZSBhbmQgZXhwb3NlIHRoZWlyIGludGVyZmFjZXMuIFNpbmNlIHN5emthbGxlciBvcGVyYXRlcyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKEdDRS9RRU1VKSB3aXRob3V0IHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgb3Igc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGVtLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjVmMmQ4ZDc5MjdmOTIwODdhNDM3ZjAxODJlN2ZmMWE5N2YxNTAyOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDE1IDA4OjAzOjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0CmluZGV4IDVjODhkMmNmMDgxODMzLi5mYzFiOGRjMTk4MjUwZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdApAQCAtMjA2LDcgJiM0MzsyMDYsNyBAQCBUaGUgdXNhZ2UgcGF0dGVybiBpczo6CiAgICAgICAgICAgZ290byBvdXRfcHV0OwogCiAgICAgICB0YWtlX2xvY2soZHJpdmVyLSZndDt1cGRhdGUpOwotICAgICAgaWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KCZhbXA7aW50ZXJ2YWxfc3ViLCByYW5nZS5ub3RpZmllcl9zZXEpKSB7CiYjNDM7ICAgICAgaWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KHJhbmdlLm5vdGlmaWVyLCByYW5nZS5ub3RpZmllcl9zZXEpKSB7CiAgICAgICAgICAgcmVsZWFzZV9sb2NrKGRyaXZlci0mZ3Q7dXBkYXRlKTsKICAgICAgICAgICBnb3RvIGFnYWluOwogICAgICAgfQpAQCAtMjI1LDcgJiM0MzsyMjUsOCBAQCBUaGUgdXNhZ2UgcGF0dGVybiBpczo6CiBUaGUgZHJpdmVyLSZndDt1cGRhdGUgbG9jayBpcyB0aGUgc2FtZSBsb2NrIHRoYXQgdGhlIGRyaXZlciB0YWtlcyBpbnNpZGUgaXRzCiBpbnZhbGlkYXRlKCkgY2FsbGJhY2suIFRoYXQgbG9jayBtdXN0IGJlIGhlbGQgYmVmb3JlIGNhbGxpbmcKIG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KCkgdG8gYXZvaWQgYW55IHJhY2Ugd2l0aCBhIGNvbmN1cnJlbnQgQ1BVIHBhZ2UgdGFibGUKLXVwZGF0ZS4KJiM0Mzt1cGRhdGUuIFRoZSByZXRyeSBjaGVjayBtdXN0IHVzZSB0aGUgc2FtZSBub3RpZmllciBhbmQgc2VxdWVuY2UgbnVtYmVyIHN0b3JlZAomIzQzO2luIGBgcmFuZ2VgYCBieSBgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KClgYC4KIAogSG9sZGluZyB0aGUgbW1hcCBsb2NrIGFjcm9zcyBITU0gZmF1bHRzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jIGIvZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfY3R4LmMKaW5kZXggNTQ4YmE0MzE1NTU0ZmYuLjIxZjI4MTc3NTFmOWU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYwpAQCAtMTAzNyw3ICYjNDM7MTAzNyw3IEBAIHN0YXRpYyBpbnQgYWllMl9wb3B1bGF0ZV9yYW5nZShzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICphYm8pCiAJYm9vbCBmb3VuZDsKIAlpbnQgcmV0OwogCi0JdGltZW91dCA9IGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTsKJiM0MzsJdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7CiBhZ2FpbjoKIAlmb3VuZCA9IGZhbHNlOwogCWRvd25fd3JpdGUoJmFtcDt4ZG5hLSZndDtub3RpZmllcl9sb2NrKTsKQEAgLTEwNjIsMTMgJiM0MzsxMDYyLDkgQEAgc3RhdGljIGludCBhaWUyX3BvcHVsYXRlX3JhbmdlKHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKmFibykKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCi0JcmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoJmFtcDttYXBwLSZndDtyYW5nZSwKLQkJCW1heF90KGxvbmcsIHRpbWVvdXQgLSBqaWZmaWVzLCAxKSk7Ci0JaWYgKHJldCkgewotCQlpZiAocmV0ID09IC1FQlVTWSkKLQkJCXJldCA9IC1FVElNRTsKJiM0MzsJcmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoJmFtcDttYXBwLSZndDtyYW5nZSwgdGltZW91dCk7CiYjNDM7CWlmIChyZXQpCiAJCWdvdG8gcHV0X21tOwotCX0KIAogCWRvd25fd3JpdGUoJmFtcDt4ZG5hLSZndDtub3RpZmllcl9sb2NrKTsKIAlpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkoJmFtcDttYXBwLSZndDtub3RpZmllciwgbWFwcC0mZ3Q7cmFuZ2Uubm90aWZpZXJfc2VxKSkgewpAQCAtMTA4Niw3ICYjNDM7MTA4Miw3IEBAIHN0YXRpYyBpbnQgYWllMl9wb3B1bGF0ZV9yYW5nZShzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICphYm8pCiBwdXRfbW06CiAJYW1keGRuYV91bWFwX3B1dChtYXBwKTsKIAltbXB1dChtbSk7Ci0JcmV0dXJuIHJldDsKJiM0MzsJcmV0dXJuIHJldCA9PSAtRUJVU1kgPyAtRVRJTUUgOiByZXQ7CiB9CiAKIGludCBhaWUyX2NtZF9zdWJtaXQoc3RydWN0IGFtZHhkbmFfaHdjdHggKmh3Y3R4LCBzdHJ1Y3QgYW1keGRuYV9zY2hlZF9qb2IgKmpvYiwgdTY0ICpzZXEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYwppbmRleCBiOGYyZGQ5OTgyZjUzYy4uNzZlOGEwMDI4YzdmYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYwpAQCAtODUyLDggJiM0Mzs4NTIsNyBAQCBlbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgZHJtX2dwdXN2bV9zY2FuX21tKHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSwKIAkJLmVuZCA9IGVuZCwKIAkJLmRldl9wcml2YXRlX293bmVyID0gZGV2X3ByaXZhdGVfb3duZXIsCiAJfTsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPQotCQlqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7CiAJZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0IHN0YXRlID0gRFJNX0dQVVNWTV9TQ0FOX1VOUE9QVUxBVEVELCBuZXdfc3RhdGU7CiAJdW5zaWduZWQgbG9uZyAqcGZuczsKIAl1bnNpZ25lZCBsb25nIG5wYWdlcyA9IG5wYWdlc19pbl9yYW5nZShzdGFydCwgZW5kKTsKQEAgLTg2Nyw4ICYjNDM7ODY2LDcgQEAgZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0IGRybV9ncHVzdm1fc2Nhbl9tbShzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UsCiAJaG1tX3JhbmdlLmhtbV9wZm5zID0gcGZuczsKIAogcmV0cnk6Ci0JZXJyID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoJmFtcDtobW1fcmFuZ2UsCi0JCQkJCSAgICAgICBtYXgodGltZW91dCAtIGppZmZpZXMsIDFMKSk7CiYjNDM7CWVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KCZhbXA7aG1tX3JhbmdlLCB0aW1lb3V0KTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9mcmVlOwogCkBAIC0xNDU5LDggJiM0MzsxNDU3LDcgQEAgaW50IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sCiAJCS5kZXZfcHJpdmF0ZV9vd25lciA9IGN0eC0mZ3Q7ZGV2aWNlX3ByaXZhdGVfcGFnZV9vd25lciwKIAl9OwogCXZvaWQgKnpkZDsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPQotCQlqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7CiAJdW5zaWduZWQgbG9uZyBpLCBqOwogCXVuc2lnbmVkIGxvbmcgbnBhZ2VzID0gbnBhZ2VzX2luX3JhbmdlKHBhZ2VzX3N0YXJ0LCBwYWdlc19lbmQpOwogCXVuc2lnbmVkIGxvbmcgbnVtX2RtYV9tYXBwZWQ7CkBAIC0xNDc4LDkgJiM0MzsxNDc1LDYgQEAgaW50IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sCiAJCXJldHVybiAtRUlOVkFMOwogCiByZXRyeToKLQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKLQkJcmV0dXJuIC1FQlVTWTsKLQogCWhtbV9yYW5nZS5ub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihub3RpZmllcik7CiAJaWYgKGRybV9ncHVzdm1fcGFnZXNfdmFsaWRfdW5sb2NrZWQoZ3B1c3ZtLCBzdm1fcGFnZXMpKQogCQlnb3RvIHNldF9zZXFubzsKQEAgLTE0OTUsOCAmIzQzOzE0ODksNyBAQCBpbnQgZHJtX2dwdXN2bV9nZXRfcGFnZXMoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSwKIAl9CiAKIAlobW1fcmFuZ2UuaG1tX3BmbnMgPSBwZm5zOwotCWVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KCZhbXA7aG1tX3JhbmdlLAotCQkJCW1heF90KGxvbmcsIHRpbWVvdXQgLSBqaWZmaWVzLCAxKSk7CiYjNDM7CWVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KCZhbXA7aG1tX3JhbmdlLCB0aW1lb3V0KTsKIAltbXB1dChtbSk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfZnJlZTsKQEAgLTE3MTgsOCAmIzQzOzE3MTEsNyBAQCBpbnQgZHJtX2dwdXN2bV9yYW5nZV9ldmljdChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLAogCQkuZW5kID0gZHJtX2dwdXN2bV9yYW5nZV9lbmQocmFuZ2UpLAogCQkuZGV2X3ByaXZhdGVfb3duZXIgPSBOVUxMLAogCX07Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0KLQkJamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpOwomIzQzOwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpOwogCXVuc2lnbmVkIGxvbmcgKnBmbnM7CiAJdW5zaWduZWQgbG9uZyBucGFnZXMgPSBucGFnZXNfaW5fcmFuZ2UoZHJtX2dwdXN2bV9yYW5nZV9zdGFydChyYW5nZSksCiAJCQkJCSAgICAgICBkcm1fZ3B1c3ZtX3JhbmdlX2VuZChyYW5nZSkpOwpAQCAtMTczNCw4ICYjNDM7MTcyNiw3IEBAIGludCBkcm1fZ3B1c3ZtX3JhbmdlX2V2aWN0KHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sCiAJCXJldHVybiAtRU5PTUVNOwogCiAJaG1tX3JhbmdlLmhtbV9wZm5zID0gcGZuczsKLQllcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgmYW1wO2htbV9yYW5nZSwKLQkJCQltYXhfdChsb25nLCB0aW1lb3V0IC0gamlmZmllcywgMSkpOwomIzQzOwllcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgmYW1wO2htbV9yYW5nZSwgdGltZW91dCk7CiAKIAlrdmZyZWUocGZucyk7CiAJbW1wdXQobW0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmMKaW5kZXggNGNmYjZlYjdjNzcxNWEuLjU4NzM1NDQ2ZDc4MzJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmMKQEAgLTY3OCwxNCAmIzQzOzY3OCwyMCBAQCBzdGF0aWMgaW50IG5vdXZlYXVfcmFuZ2VfZmF1bHQoc3RydWN0IG5vdXZlYXVfc3ZtbSAqc3ZtbSwKIAlyYW5nZS5lbmQgPSBub3RpZmllci0mZ3Q7bm90aWZpZXIuaW50ZXJ2YWxfdHJlZS5sYXN0ICYjNDM7IDE7CiAKIAl3aGlsZSAodHJ1ZSkgewotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgewomIzQzOwkJbG9uZyByZW1haW5pbmcgPSB0aW1lb3V0IC0gamlmZmllczsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgSE1NIHRpbWVvdXQgb25seSBib3VuZHMgcmV0cmllcyB3aGlsZSBITU0gaXMgd2Fsa2luZyBhbmQKJiM0MzsJCSAqIGZhdWx0aW5nIHRoZSByYW5nZS4gVGhpcyBmYXVsdCBpcyBoYW5kbGVkIGJ5IGEga2VybmVsIHdvcmtlciwKJiM0MzsJCSAqIHNvIGZhdGFsIHNpZ25hbHMgZnJvbSB0aGUgZmF1bHRpbmcgcHJvY2VzcyBjYW5ub3Qgc3RvcCBhbgomIzQzOwkJICogZW5kbGVzcyBzdHJlYW0gb2YgaW52YWxpZGF0aW9ucyBoZXJlLgomIzQzOwkJICovCiYjNDM7CQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCB0aW1lb3V0KSkgewogCQkJcmV0ID0gLUVCVVNZOwogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgmYW1wO3JhbmdlLAotCQkJCQkJICAgICAgIG1heCh0aW1lb3V0IC0gamlmZmllcywKLQkJCQkJCQkgICAxTCkpOwomIzQzOwkJcmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoJmFtcDtyYW5nZSwgcmVtYWluaW5nKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gb3V0OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMTkKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA0NDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUaW1lb3V0IENoYW5nZSBpbiBITU0gUmFuZ2UgRmF1bHQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IGFwcGVhcnMgdG8gYmUgbW9kaWZ5aW5nIGhvdyBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIGlzIGNhbGxlZCBhY3Jvc3MgYSBmZXcgZHJpdmVyczogYW1keGRuYSwgZHJtX2dwdXN2bSwgYW5kIG5vdXZlYXVfc3ZtLiBUaGUga2V5IGNoYW5nZSBzZWVtcyB0byBiZSBob3cgdGhlIGB0aW1lb3V0YCBhcmd1bWVudCBpcyBoYW5kbGVkLiBJdCYjMzk7cyBtb3ZpbmcgZnJvbSBiZWluZyBhbiBhYnNvbHV0ZSBqaWZmaWVzIHZhbHVlLCBvciBhIHJlbWFpbmluZyB0aW1lIGNhbGN1bGF0aW9uLCB0byBhICpyZWxhdGl2ZSogdGltZW91dC4gSW5pdGlhbGx5LCBJIHRob3VnaHQgaXQgd2FzIGp1c3QgcGFzc2luZyB0aGUgYHRpbWVvdXRgIHZhcmlhYmxlIHdoaWNoIGlzIG5vdyBpbml0aWFsaXplZCBhcyBgbXNlY3NfdG9famlmZmllcyguLi4pYC4gTGV0IG1lIGRpZyBhIGxpdHRsZSBkZWVwZXIuCgpTcGVjaWZpY2FsbHksIGluIGBhaWUyX2N0eC5jYCwgdGhlIGRpZmYgc2hvd3M6CgpgYGBjCi0JdGltZW91dCA9IGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTsKJiM0MzsJdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7Ci4uLgotCXJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KCZhbXA7bWFwcC0mZ3Q7cmFuZ2UsCi0JCQltYXhfdChsb25nLCB0aW1lb3V0IC0gamlmZmllcywgMSkpOwotCWlmIChyZXQpIHsKLQkJaWYgKHJldCA9PSAtRUJVU1kpCi0JCQlyZXQgPSAtRVRJTUU7CiYjNDM7CXJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KCZhbXA7bWFwcC0mZ3Q7cmFuZ2UsIHRpbWVvdXQpOwomIzQzOwlpZiAocmV0KQogCQlnb3RvIHB1dF9tbTsKLQl9CmBgYAoKT2theSwgc28gdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBhYnNvbHV0ZSB0aW1lb3V0IGlzIGdvbmUgYW5kIG5vdyB3ZSYjMzk7cmUganVzdCBwYXNzaW5nIHRoZSByZXN1bHQgb2YgYG1zZWNzX3RvX2ppZmZpZXMoKWAuIEJ1dCB3YWl0IGEgc2Vjb25kLi4uIGlzIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAgZGVzaWduZWQgdG8gYWNjZXB0IGEgcmVsYXRpdmUgdGltZW91dCBub3c/IE9yIGRpZCB0aGF0IGNoYW5nZSBpbiBhIHByZXZpb3VzIG9yIHNlcGFyYXRlIHBhdGNoPyBUaGUgZGlmZiBpdHNlbGYgZG9lc24mIzM5O3Qgc2hvdyB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBjaGFuZ2luZywgd2hpY2ggaXMgYSBiaXQgb2RkLiBQZXJoYXBzIHRoZSBmdW5jdGlvbiB3YXMgYWxyZWFkeSBjaGFuZ2VkIHRvIGhhbmRsZSByZWxhdGl2ZSB0aW1lb3V0cywgYW5kIHRoaXMgcGF0Y2ggc2ltcGx5IGFsaWducyB0aGUgY2FsbGluZyBjb252ZW50aW9uPyBMZXQgbWUgbG9vayBhdCBzb21lIG90aGVyIGRpZmZzLiBBaCwgdGhlcmUmIzM5O3MgYSByZWxhdGVkIGNoYW5nZSBpbiBgaG1tLnJzdGAgd2hpY2ggcmVtb3ZlcyB0aGUgdXNlIG9mIGBqaWZmaWVzYCBpbiBhIGNvbXBhcmlzb246CgpgYGBjCi0gICAgICBpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkoJmFtcDtpbnRlcnZhbF9zdWIsIHJhbmdlLm5vdGlmaWVyX3NlcSkpIHsKJiM0MzsgICAgICBpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkocmFuZ2Uubm90aWZpZXIsIHJhbmdlLm5vdGlmaWVyX3NlcSkpIHsKYGBgCgpTdGlsbCBub3RoaW5nIGFib3V0IHRoZSBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIGRlZmluaXRpb24uIExldCYjMzk7cyBnbyBsb29rIGF0IHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGl0c2VsZiwgYW5kIGJlIHN1cmUgd2UgaGF2ZSB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2htbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0xNjA9bm9ybWFsIGludGVyZmFjZSBpczo6XG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMTYxLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjE2MjogIGludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0xNjMtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTtcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9MTY5PVRoZSBjYWxsZXIgbXVzdCBub3QgaG9sZCBgYG1tYXBfcmVhZF9sb2NrYGAgYmVmb3JlIHRoZSBjYWxsLlxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjE3MDpgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KClgYCB0YWtlcyB0aGUgbW1hcCByZWFkIGxvY2sgaW50ZXJuYWxseSBhbmRcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0xNzEtYWxsb3dzIGBgaGFuZGxlX21tX2ZhdWx0KClgYCB0byBkcm9wIGl0IGR1cmluZyBmYXVsdCBoYW5kbGluZy4gVGhpcyBpcyByZXF1aXJlZFxuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0xODY9VGhlIHVzYWdlIHBhdHRlcm4gaXM6OlxuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yMDMtIGFnYWluOlxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjIwNDogICAgICByZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZyYW5nZSwgdGltZW91dCk7XG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjA1LSAgICAgIGlmIChyZXQpXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTIyOD11cGRhdGUuIFRoZSByZXRyeSBjaGVjayBtdXN0IHVzZSB0aGUgc2FtZSBub3RpZmllciBhbmQgc2VxdWVuY2UgbnVtYmVyIHN0b3JlZFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjIyOTppbiBgYHJhbmdlYGAgYnkgYGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpYGAuXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjMwLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTIzMT1Ib2xkaW5nIHRoZSBtbWFwIGxvY2sgYWNyb3NzIEhNTSBmYXVsdHNcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjMzLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjIzNDpNb3N0IGNhbGxlcnMgc2hvdWxkIHVzZSBgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KClgYC4gSWYgYSBkcml2ZXJcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yMzUtcmVhbGx5IG5lZWRzIHRvIGhvbGQgdGhlIG1tYXAgbG9jayBhY3Jvc3Mgd29yayBvdXRzaWRlIEhNTSwgaXQgY2FuIHVzZTo6XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTI0MD1pbnRlcmZhY2UgY2Fubm90IHN1cHBvcnQgVk1BcyB3aG9zZSBmYXVsdCBoYW5kbGVycyBuZWVkIHRvIGRyb3AgdGhlIG1tYXAgbG9jay5cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoyNDE6TmV3IGNhbGxlcnMgc2hvdWxkIHByZWZlciBgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KClgYCB1bmxlc3MgdGhleVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTI0Mi1oYXZlIGEgc3BlY2lmaWMgcmVxdWlyZW1lbnQgdG8ga2VlcCB0aGUgbW1hcCBsb2NrIGhlbGQgYWNyb3NzIHRoZSBjYWxsLlxuLS1cbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jPTEwMzE9c3RhdGljIGludCBhaWUyX3BvcHVsYXRlX3JhbmdlKHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKmFibylcbi0tXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYy0xMDY0LVxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfY3R4LmM6MTA2NTpcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNm1hcHAtXHUwMDNlcmFuZ2UsIHRpbWVvdXQpO1xuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfY3R4LmMtMTA2Ni1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz04NDE9ZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0IGRybV9ncHVzdm1fc2Nhbl9tbShzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NjgtcmV0cnk6XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg2OTpcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNmhtbV9yYW5nZSwgdGltZW91dCk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg3MC1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz0xNDQ0PWludCBkcm1fZ3B1c3ZtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTQ5MS1cdGhtbV9yYW5nZS5obW1fcGZucyA9IHBmbnM7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE0OTI6XHRlcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZobW1fcmFuZ2UsIHRpbWVvdXQpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNDkzLVx0bW1wdXQobW0pO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM9MTcwMz1pbnQgZHJtX2dwdXN2bV9yYW5nZV9ldmljdChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTcyOC1cdGhtbV9yYW5nZS5obW1fcGZucyA9IHBmbnM7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE3Mjk6XHRlcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZobW1fcmFuZ2UsIHRpbWVvdXQpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNzMwLVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmM9NjUyPXN0YXRpYyBpbnQgbm91dmVhdV9yYW5nZV9mYXVsdChzdHJ1Y3Qgbm91dmVhdV9zdm1tICpzdm1tLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmMtNjkzLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uYzo2OTQ6XHRcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNnJhbmdlLCByZW1haW5pbmcpO1xuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uYy02OTUtXHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYz0zOTY9c3RhdGljIGludCBtc2h2X3JlZ2lvbl9yYW5nZV9mYXVsdChzdHJ1Y3QgbXNodl9tZW1fcmVnaW9uICpyZWdpb24sXG4tLVxuZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYy00MTUtYWdhaW46XG5kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jOjQxNjpcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNnJhbmdlLCAwKTtcbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmMtNDE3LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jPTMyND1pbnQgaWJfdW1lbV9vZHBfbWFwX2RtYV9hbmRfbG9jayhzdHJ1Y3QgaWJfdW1lbV9vZHAgKnVtZW1fb2RwLCB1NjQgdXNlcl92aXJ0LFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmMtMzY4LXJldHJ5OlxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYzozNjk6XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZyYW5nZSwgdGltZW91dCk7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jLTM3MC1cdGlmICh1bmxpa2VseShyZXQpKVxuLS1cbmluY2x1ZGUvbGludXgvaG1tLmg9MTI1PWludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpO1xuaW5jbHVkZS9saW51eC9obW0uaDoxMjY6aW50IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLFxuaW5jbHVkZS9saW51eC9obW0uaC0xMjctXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCk7XG4tLVxubGliL3Rlc3RfaG1tLmM9MzkyPXN0YXRpYyBpbnQgZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbi0tXG5saWIvdGVzdF9obW0uYy0zOTgtXHR3aGlsZSAodHJ1ZSkge1xubGliL3Rlc3RfaG1tLmM6Mzk5Olx0XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChyYW5nZSwgdGltZW91dCk7XG5saWIvdGVzdF9obW0uYy00MDAtXHRcdGlmIChyZXQpXG4tLVxubW0vaG1tLmM9Njg5PXN0YXRpYyBpbnQgaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSwgYm9vbCAqbG9ja2VkKVxuLS1cbm1tL2htbS5jLTc1My0gKiBUaGUgbW1hcCBsb2NrIG11c3QgYmUgaGVsZCBieSB0aGUgY2FsbGVyIGFuZCB3aWxsIHJlbWFpbiBoZWxkIG9uIHJldHVybi5cbm1tL2htbS5jOjc1NDogKiBOZXcgdXNlcnMgc2hvdWxkIHByZWZlciBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpIHVubGVzcyB0aGV5XG5tbS9obW0uYy03NTUtICogc3BlY2lmaWNhbGx5IG5lZWQgdG8ga2VlcCB0aGUgbW1hcCBsb2NrIGhlbGQgYWNyb3NzIHRoZSBjYWxsLiBUaGlzIGhlbHBlclxuLS1cbm1tL2htbS5jPTc2Mj1FWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV9mYXVsdCk7XG4tLVxubW0vaG1tLmMtNzY0LS8qKlxubW0vaG1tLmM6NzY1OiAqIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0IC0gZmF1bHQgaW4gYSByYW5nZSB3aXRoIGEgcmV0cnkgdGltZW91dFxubW0vaG1tLmMtNzY2LSAqIEByYW5nZTpcdGFyZ3VtZW50IHN0cnVjdHVyZVxuLS1cbm1tL2htbS5jLTc4My0gKi9cbm1tL2htbS5jOjc4NDppbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXG5tbS9obW0uYy03ODUtXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dClcbi0tXG5tbS9obW0uYy04MjQtfVxubW0vaG1tLmM6ODI1OkVYUE9SVF9TWU1CT0woaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQpO1xubW0vaG1tLmMtODI2LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTI5MDQ9VEVTVF9GX1RJTUVPVVQoaG1tLCBiZW5jaG1hcmtfdGhwX21pZ3JhdGlvbiwgMTIwKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTI5NjAtICogVGVzdCB0aGF0IEhNTSBjYW4gZmF1bHQgaW4gcGFnZXMgYmFja2VkIGJ5IHVzZXJmYXVsdGZkIHVzaW5nIHRoZVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6Mjk2MTogKiBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpIHBhdGggd2l0aCBubyB0aW1lb3V0LiBUaGlzIGV4ZXJjaXNlc1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMjk2Mi0gKiB0aGUgbG9jay1kcm9wIHJldHJ5IGxvZ2ljIGluIHRoZSBITU0gZnJhbWV3b3JrLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMzUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA0NzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUaW1lb3V0IFBhcmFtZXRlciBpbiBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgdGhlIGNoYW5nZSB0byBob3cgdGhlIGB0aW1lb3V0YCBwYXJhbWV0ZXIgaXMgaGFuZGxlZCBpbiBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIGNhdGNoZXMgbXkgZXllLiBJdCBhcHBlYXJzIHRoZSBzaWduYXR1cmUgb2YgdGhlIGZ1bmN0aW9uIGlzIGJlaW5nIHRyZWF0ZWQgYXMgdGFraW5nIGFuIGB1bnNpZ25lZCBsb25nIHRpbWVvdXRgIHBhcmFtZXRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBuZXcgYXBwcm9hY2guCgpMb29raW5nIGF0IHRoZSBjb2RlIGRpZmZzLCBzcGVjaWZpY2FsbHkgaW4gYGFpZTJfY3R4LmNgLCBgZHJtX2dwdXN2bS5jYCwgYW5kIGBub3V2ZWF1X3N2bS5jYCwgaXQgc2VlbXMgdGhhdCB0aGUgY29kZSB1c2VkIHRvIGNhbGN1bGF0ZSBhbiAqYWJzb2x1dGUqIHRpbWVvdXQsIG9mdGVuIGJ5IGFkZGluZyBgamlmZmllc2AgdG8gYSBkdXJhdGlvbi4gSW4gZXNzZW5jZSwgdGhleSB3ZXJlIHNldHRpbmcgYW4gKmV4cGlyYXRpb24gdGltZSouIE5vdywgdGhlIHBhdGNoIGlzIHJlbW92aW5nIHRoZSBgamlmZmllc2AgYWRkaXRpb24gYW5kIGRpcmVjdGx5IHBhc3NpbmcgYSB0aW1lb3V0IHZhbHVlIGNhbGN1bGF0ZWQgdXNpbmcgYG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVClgLiBBbHNvLCB0aGUgY2FsbHMgd2VyZSBwcmV2aW91c2x5IHN1YnRyYWN0aW5nIGBqaWZmaWVzYCBmcm9tIHRoZSB0aW1lb3V0IGFuZCB1c2luZyBgbWF4KClgIHRvIGVuc3VyZSB0aGUgdGltZW91dCB3YXMgYXQgbGVhc3QgMSwgYnV0IG5vdyB0aG9zZSBjYWxjdWxhdGlvbnMgYXJlIHJlbW92ZWQuCgpUaGlzIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHRoYXQgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCBub3cgZXhwZWN0cyBhICpyZWxhdGl2ZSogdGltZW91dCDigJMgYSBkdXJhdGlvbiwgbm90IGFuIGFic29sdXRlIHRpbWVzdGFtcC4gSXQmIzM5O3MgZXhwZWN0aW5nIHRoZSBudW1iZXIgb2YgamlmZmllcyB0byB3YWl0LiBJICpuZWVkKiB0byBjb25maXJtIHRoaXMuIFRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIGluIGBtbS9obW0uY2AgdG8gdmVyaWZ5IHdoZXRoZXIgaXQgaW50ZXJwcmV0cyB0aGUgYHRpbWVvdXRgIHBhcmFtZXRlciBhcyBhIHJlbGF0aXZlIHRpbWUgdmFsdWUuIElmIHRoZSBjb2RlIGlzIG5vdyBwYXNzaW5nIGFuIGFic29sdXRlIHRpbWUsIHRoZSBwYXRjaCBpcyB3cm9uZyBhbmQgd2lsbCBicmVhay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwODowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTE2MD1ub3JtYWwgaW50ZXJmYWNlIGlzOjpcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0xNjEtXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MTYyOiAgaW50IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTE2My0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpO1xuLS1cbmluY2x1ZGUvbGludXgvaG1tLmg9MTI1PWludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpO1xuaW5jbHVkZS9saW51eC9obW0uaDoxMjY6aW50IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLFxuaW5jbHVkZS9saW51eC9obW0uaC0xMjctXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCk7XG4tLVxubW0vaG1tLmM9NzYyPUVYUE9SVF9TWU1CT0woaG1tX3JhbmdlX2ZhdWx0KTtcbi0tXG5tbS9obW0uYy03ODMtICovXG5tbS9obW0uYzo3ODQ6aW50IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLFxubW0vaG1tLmMtNzg1LVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ2MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBjb2RlOgoKKipEaXZpbmcgaW50byBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBtbS9obW0uY2AgYW5kIHNwZWNpZmljYWxseSwgdGhhdCBmdW5jdGlvbiwgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YC4gVGhlIG5hbWUgaXRzZWxmIGlzIGludHJpZ3VpbmcuICBJdCBzdWdnZXN0cyBoYW5kbGluZyBhIGZhdWx0IHdpdGhpbiBhIEh5cGVyLU1lbW9yeSBNYW5hZ2VtZW50IChITU0pIHJhbmdlLCBidXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHNpdHVhdGlvbiB3aGVyZSBzb21lIGtpbmQgb2YgbG9jayBpcyAqbm90KiBoZWxkLCBhbmQgd2UmIzM5O3JlIGFsc28gZGVhbGluZyB3aXRoIGEgdGltZW91dC4gIFRoaXMgbGlrZWx5IGluZGljYXRlcyBhIGJhY2tncm91bmQgcHJvY2Vzcywgb3IgbWF5YmUgYXN5bmNocm9ub3VzIG9wZXJhdGlvbiwgYW5kIHdl4oCZcmUgdHJ5aW5nIHRvIHByZXZlbnQgaXQgZnJvbSBibG9ja2luZyBpbmRlZmluaXRlbHkuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCB0aGVzZSB0aW1lb3V0IHNjZW5hcmlvcyBvZnRlbiBwb2ludCB0byBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgcmVzb3VyY2UgY29udGVudGlvbiwgc28gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IHRoYXQmIzM5O3MgYWRkcmVzc2VkLgoKSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkLiBJcyBpdCB0cmlnZ2VyZWQgYnkgYSB0aW1lciwgYW4gaW50ZXJydXB0LCBvciBzb21ldGhpbmcgZWxzZT8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBwcm9ibGVtIGl0JiMzOTtzIGRlc2lnbmVkIHRvIHNvbHZlLgoKSeKAmWxsIGFsc28ga2VlcCBhbiBleWUgb3V0IGZvciBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgSE1NIGNvbXBvbmVudHMsIHN1Y2ggYXMgcmFuZ2UgbWV0YWRhdGEsIHBhZ2UgdGFibGVzLCBhbmQgYW55IHBvdGVudGlhbCBsb2NraW5nIG1lY2hhbmlzbXMgKGV2ZW4gaWYgbm90IGV4cGxpY2l0bHkgaGVsZCBieSB0aGUgY2FsbGVyKS4gR2l2ZW4gdGhhdCBpdCYjMzk7cyAmIzM0O3VubG9ja2VkLCYjMzQ7IHRoZSBmdW5jdGlvbiBwcm9iYWJseSByZWxpZXMgb24gc29tZSBvdGhlciBtZWNoYW5pc20gdG8gZW5zdXJlIGRhdGEgY29uc2lzdGVuY3kuIE1heWJlIGF0b21pYyBvcGVyYXRpb25zPyBQZXJoYXBzIHJlYWQtY29weS11cGRhdGUgdGVjaG5pcXVlcz8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMuIFRoZSAmIzM0O3RpbWVvdXQmIzM0OyBhc3BlY3QgbWFrZXMgbWUgdGhpbmsgYWJvdXQgcG90ZW50aWFsIGRlYWRsb2NrcyBvciBsaXZlbG9ja3Mg4oCTIEkmIzM5O2xsIGJlIGxvb2tpbmcgYXQgd2hldGhlciBpdCB0YWtlcyBzdGVwcyB0byBtaXRpZ2F0ZSB0aG9zZSBwb3NzaWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaG1tLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc4MDpcdCAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG9uZSBvZiB0aGUgZXJyb3IgY29kZXMgZG9jdW1lbnRlZCBmb3JcbiA3ODE6XHQgKiBobW1fcmFuZ2VfZmF1bHQoKS4gLUVJTlRSIGlzIHJldHVybmVkIGlmIG1tYXBfbG9jayBhY3F1aXNpdGlvbiBpc1xuIDc4MjpcdCAqIGludGVycnVwdGVkIG9yIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcgZHVyaW5nIHJldHJ5IGhhbmRsaW5nLlxuIDc4MzpcdCAqL1xuIDc4NDpcdGludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSxcbiA3ODU6XHRcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KVxuIDc4NjpcdHtcbiA3ODc6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcmFuZ2UtXHUwMDNlbm90aWZpZXItXHUwMDNlbW07XG4gNzg4Olx0XHR1bnNpZ25lZCBsb25nIGRlYWRsaW5lID0gMDtcbiA3ODk6XHRcdGJvb2wgbG9ja2VkID0gZmFsc2U7XG4gNzkwOlx0XHRpbnQgcmV0O1xuIDc5MTpcdFxuIDc5MjpcdFx0ZG8ge1xuIDc5MzpcdFx0XHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4gNzk0Olx0XHRcdFx0cmV0dXJuIC1FSU5UUjtcbiA3OTU6XHRcbiA3OTY6XHRcdFx0aWYgKHRpbWVvdXQpIHtcbiA3OTc6XHRcdFx0XHQvKlxuIDc5ODpcdFx0XHRcdCAqIElmIHRoZSBwcmV2aW91cyBmYXVsdCBkcm9wcGVkIG1tYXBfbG9jaywgdGhlbiB0aGUgZmF1bHRcbiA3OTk6XHRcdFx0XHQgKiBoYW5kbGVyIG1hZGUgcHJvZ3Jlc3MuIFJlc3RhcnQgdGhlIHJldHJ5IHRpbWVvdXQgaW4gdGhhdFxuIDgwMDpcdFx0XHRcdCAqIGNhc2UsIGJ1dCBrZWVwIHRoZSBleGlzdGluZyBkZWFkbGluZSBmb3Igb3JkaW5hcnkgLUVCVVNZXG4gODAxOlx0XHRcdFx0ICogcmV0cmllcy5cbiA4MDI6XHRcdFx0XHQgKi9cbiA4MDM6XHRcdFx0XHRpZiAoIWxvY2tlZClcbiA4MDQ6XHRcdFx0XHRcdGRlYWRsaW5lID0gamlmZmllcyAmIzQzOyB0aW1lb3V0O1xuIDgwNTpcdFxuIDgwNjpcdFx0XHRcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRlYWRsaW5lKSlcbiA4MDc6XHRcdFx0XHRcdHJldHVybiAtRUJVU1k7XG4gODA4Olx0XHRcdH1cbiA4MDk6XHRcbiA4MTA6XHRcdFx0cmFuZ2UtXHUwMDNlbm90aWZpZXJfc2VxID1cbiA4MTE6XHRcdFx0XHRtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihyYW5nZS1cdTAwM2Vub3RpZmllcik7XG4gODEyOlx0XG4gODEzOlx0XHRcdHJldCA9IG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKG1tKTtcbiA4MTQ6XHRcdFx0aWYgKHJldClcbiA4MTU6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDgxNjpcdFxuIDgxNzpcdFx0XHRsb2NrZWQgPSB0cnVlO1xuIDgxODpcdFx0XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkKHJhbmdlLCBcdTAwMjZsb2NrZWQpO1xuIDgxOTpcdFx0XHRpZiAobG9ja2VkKVxuIDgyMDpcdFx0XHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuIDgyMTpcdFx0fSB3aGlsZSAocmV0ID09IC1FQlVTWSk7XG4gODIyOlx0XG4gODIzOlx0XHRyZXR1cm4gcmV0O1xuIDgyNDpcdH1cbiA4MjU6XHRFWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KTtcbiA4MjY6XHRcbiA4Mjc6XHQvKipcbiA4Mjg6XHQgKiBobW1fZG1hX21hcF9hbGxvYyAtIEFsbG9jYXRlIEhNTSBtYXAgc3RydWN0dXJlXG4gODI5Olx0ICogQGRldjogZGV2aWNlIHRvIGFsbG9jYXRlIHN0cnVjdHVyZSBmb3JcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwODowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTQ1CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVGltZW91dCBMb2dpYyBpbiBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCwgaXQgZXhwZWN0cyBgdGltZW91dGAgdG8gYmUgYSAqcmVsYXRpdmUqIHRpbWVvdXQsIGxpa2UgdGhlIHJlc3VsdCBvZiBgbXNlY3NfdG9famlmZmllcygxMDApYC4gSW5zaWRlLCBpdCBhZGRzIHRoaXMgcmVsYXRpdmUgdGltZW91dCB0byB0aGUgY3VycmVudCBgamlmZmllc2AgdG8gZ2V0IHRoZSBkZWFkbGluZSwgYnV0IG9ubHkgaWYgdGhlIG1lbW9yeSByZWdpb24gaXNuJiMzOTt0IGxvY2tlZC4gVGhlIGNvZGUgdXNlcyBgZGVhZGxpbmUgPSBqaWZmaWVzICYjNDM7IHRpbWVvdXQ7YCB3aGVuIHRoZSByZWdpb24gaXMgdW5sb2NrZWQsIGFuZCB0aGVuIEkgcmVhbGl6ZWQgdGhhdCBpZiB0aGUgY2FsbGVyIHBhc3NlcyBzb21ldGhpbmcgbGlrZSBgbWF4X3QobG9uZywgdGltZW91dCAtIGppZmZpZXMsIDEpYCwgd2hlcmUgYHRpbWVvdXRgIHdhcyBvcmlnaW5hbGx5IGFuICphYnNvbHV0ZSogamlmZmllcyB2YWx1ZSwgdGhlbiBpdCB3YXMgZWZmZWN0aXZlbHkgY2FsY3VsYXRpbmcgdGhlIHJlbWFpbmluZyB0aW1lIGFuZCBwYXNzaW5nIGl0LgoKQnV0IGhvbGQgb24sIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAgKml0c2VsZiogYWxyZWFkeSBoYW5kbGVzIHRoZSByZXRyeSBsb2dpYyBhbmQgcmVzdGFydHMgdGhlIHRpbWVvdXQgaWYgdGhlIHJlZ2lvbiBpc24mIzM5O3QgbG9ja2VkLCB3aGljaCBtZWFucyBwcm9ncmVzcyB3YXMgbWFkZS4gU28gdGhlIGNhbGxlciBzaG91bGRuJiMzOTt0IGJlIGdpdmluZyBpdCB0aGUgcmVtYWluaW5nIHRpbWUhIEl0IHNob3VsZCBiZSBwYXNzaW5nIHRoZSAqb3JpZ2luYWwqIHJlbGF0aXZlIHRpbWVvdXQsIHNvIHRoYXQgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCBjYW4gcHJvcGVybHkgcmVzdGFydCB0aGUgdGltZW91dCBmcm9tIHNjcmF0Y2guIEl0JiMzOTtzIHN1cHBvc2VkIHRvIG1hbmFnZSB0aGUgcmV0cmllcyBpbnRlcm5hbGx5LgoKTm93LCBhIHF1aWNrIGNoZWNrIG9mIHRoZSBub3V2ZWF1IGRyaXZlciByZXZlYWxzIHNvbWV0aGluZyBpbnRlcmVzdGluZy4gSXQmIzM5O3Mgc3RpbGwgcGFzc2luZyBhIGByZW1haW5pbmdgIHZhbHVlLiBJIHNlZSB0aGlzOgoKYGBgYwotCQlyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgmYW1wO3JhbmdlLAotCQkJCQkJICAgICAgIG1heCh0aW1lb3V0IC0gamlmZmllcywKLQkJCQkJCQkgICAxTCkpOwomIzQzOwkJcmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoJmFtcDtyYW5nZSwgcmVtYWluaW5nKTsKYGBgCgpXYWl0LCBpdCBsb29rcyBsaWtlIGBub3V2ZWF1X3N2bS5jYCBhbHJlYWR5IGhhcyBpdHMgb3duIGxvb3AgYXJvdW5kIHRoZSBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIGZ1bmN0aW9uPyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGBub3V2ZWF1X3N2bS5jYCBjb2RlIHRvIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwODowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY3MDpcdFxuIDY3MTpcdFx0cmV0ID0gbW11X2ludGVydmFsX25vdGlmaWVyX2luc2VydChcdTAwMjZub3RpZmllci1cdTAwM2Vub3RpZmllciwgbW0sXG4gNjcyOlx0XHRcdFx0XHRcdGFyZ3MtXHUwMDNlcC5hZGRyLCBhcmdzLVx1MDAzZXAuc2l6ZSxcbiA2NzM6XHRcdFx0XHRcdFx0XHUwMDI2bm91dmVhdV9zdm1fbW5pX29wcyk7XG4gNjc0Olx0XHRpZiAocmV0KVxuIDY3NTpcdFx0XHRyZXR1cm4gcmV0O1xuIDY3NjpcdFxuIDY3NzpcdFx0cmFuZ2Uuc3RhcnQgPSBub3RpZmllci1cdTAwM2Vub3RpZmllci5pbnRlcnZhbF90cmVlLnN0YXJ0O1xuIDY3ODpcdFx0cmFuZ2UuZW5kID0gbm90aWZpZXItXHUwMDNlbm90aWZpZXIuaW50ZXJ2YWxfdHJlZS5sYXN0ICYjNDM7IDE7XG4gNjc5Olx0XG4gNjgwOlx0XHR3aGlsZSAodHJ1ZSkge1xuIDY4MTpcdFx0XHRsb25nIHJlbWFpbmluZyA9IHRpbWVvdXQgLSBqaWZmaWVzO1xuIDY4MjpcdFxuIDY4MzpcdFx0XHQvKlxuIDY4NDpcdFx0XHQgKiBUaGUgSE1NIHRpbWVvdXQgb25seSBib3VuZHMgcmV0cmllcyB3aGlsZSBITU0gaXMgd2Fsa2luZyBhbmRcbiA2ODU6XHRcdFx0ICogZmF1bHRpbmcgdGhlIHJhbmdlLiBUaGlzIGZhdWx0IGlzIGhhbmRsZWQgYnkgYSBrZXJuZWwgd29ya2VyLFxuIDY4NjpcdFx0XHQgKiBzbyBmYXRhbCBzaWduYWxzIGZyb20gdGhlIGZhdWx0aW5nIHByb2Nlc3MgY2Fubm90IHN0b3AgYW5cbiA2ODc6XHRcdFx0ICogZW5kbGVzcyBzdHJlYW0gb2YgaW52YWxpZGF0aW9ucyBoZXJlLlxuIDY4ODpcdFx0XHQgKi9cbiA2ODk6XHRcdFx0aWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgdGltZW91dCkpIHtcbiA2OTA6XHRcdFx0XHRyZXQgPSAtRUJVU1k7XG4gNjkxOlx0XHRcdFx0Z290byBvdXQ7XG4gNjkyOlx0XHRcdH1cbiA2OTM6XHRcbiA2OTQ6XHRcdFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2cmFuZ2UsIHJlbWFpbmluZyk7XG4gNjk1Olx0XHRcdGlmIChyZXQpXG4gNjk2Olx0XHRcdFx0Z290byBvdXQ7XG4gNjk3Olx0XG4gNjk4Olx0XHRcdG11dGV4X2xvY2soXHUwMDI2c3ZtbS1cdTAwM2VtdXRleCk7XG4gNjk5Olx0XHRcdGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShyYW5nZS5ub3RpZmllcixcbiA3MDA6XHRcdFx0XHRcdFx0ICAgIHJhbmdlLm5vdGlmaWVyX3NlcSkpIHtcbiA3MDE6XHRcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2c3ZtbS1cdTAwM2VtdXRleCk7XG4gNzAyOlx0XHRcdFx0Y29udGludWU7XG4gNzAzOlx0XHRcdH1cbiA3MDQ6XHRcdFx0YnJlYWs7XG4gNzA1Olx0XHR9XG4gNzA2Olx0XG4gNzA3Olx0XHRub3V2ZWF1X2htbV9jb252ZXJ0X3Bmbihkcm0sIFx1MDAyNnJhbmdlLCBhcmdzKTtcbiA3MDg6XHRcbiA3MDk6XHRcdHJldCA9IG52aWZfb2JqZWN0X2lvY3RsKFx1MDAyNnN2bW0tXHUwMDNldm1tLVx1MDAzZXZtbS5vYmplY3QsIGFyZ3MsIHNpemUsIE5VTEwpO1xuIDcxMDpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnN2bW0tXHUwMDNlbXV0ZXgpO1xuIDcxMTpcdFxuIDcxMjpcdG91dDpcbiA3MTM6XHRcdG1tdV9pbnRlcnZhbF9ub3RpZmllcl9yZW1vdmUoXHUwMDI2bm90aWZpZXItXHUwMDNlbm90aWZpZXIpO1xuIDcxNDpcdFxuIDcxNTpcdFx0cmV0dXJuIHJldDtcbiA3MTY6XHR9XG4gNzE3Olx0XG4gNzE4Olx0c3RhdGljIHZvaWRcbiA3MTk6XHRub3V2ZWF1X3N2bV9mYXVsdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDQyCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNTUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVGltZW91dCBDaGFuZ2UgaW4gSE1NIEZhdWx0IEhhbmRsaW5nKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgSSBzZWUgaXQmIzM5O3MgdG91Y2hpbmcgYG5vdXZlYXVfc3ZtLmNgLCBhbmQgdGhhdCYjMzk7cyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IGhhcyBpdHMgb3duIGxvb3AgZHVlIHRvIHRoZSBgbW11X2ludGVydmFsX3JlYWRfcmV0cnlgIGNhbGwuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyB0aGUgdGltZW91dCBpcyBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgd2l0aCBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYG1heCh0aW1lb3V0IC0gamlmZmllcywgMUwpYCB0byBgcmVtYWluaW5nYC4gVGhpcyBzZWVtcyB0byBiZSB0aGUgZml4LgoKSXQmIzM5O3MgY2xlYXIgdGhlIGNoYW5nZSBhZmZlY3RzIGhvdyBgdGltZW91dGAgaXMgcGFzc2VkIHRvIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAuIExvb2tpbmcgYXQgYGFpZTJfY3R4LmNgIGFuZCBgZHJtX2dwdXN2bS5jYCwgSSBzZWUgdGhhdCB0aGUgY29kZSBpcyBjaGFuZ2luZyBmcm9tIHVzaW5nIGBtYXhfdChsb25nLCB0aW1lb3V0IC0gamlmZmllcywgMSlgIHRvIGp1c3QgcGFzc2luZyBgdGltZW91dGAgZGlyZWN0bHkgKHdoaWNoIGlzIG5vdyBhICpyZWxhdGl2ZSogdGltZW91dCkuIFdhaXQsIHRoaXMgaXMga2V5ISBJZiBgdGltZW91dGAgaXMgcmVsYXRpdmUgbm93LCBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIHdpbGwgcmVzdGFydCB0aGUgdGltZW91dCBpZiBgIWxvY2tlZGAuCgpQcmV2aW91c2x5LCB0aGUgY2FsbGVyIHdhcyBwYXNzaW5nIGBtYXhfdChsb25nLCB0aW1lb3V0IC0gamlmZmllcywgMSlgLCB3aGljaCByZXByZXNlbnRlZCB0aGUgcmVtYWluaW5nIHRpbWUuIENvbnNlcXVlbnRseSwgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCB3YXMgZXNzZW50aWFsbHkgcmVzdGFydGluZyB0aGUgdGltZW91dCB3aXRoIHRoZSByZW1haW5pbmcgdGltZSwgbWFraW5nIGl0IGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvICpub3QqIHJlc3RhcnRpbmcgdGhlIHRpbWVvdXQgYXQgYWxsLCBzaW5jZSBgamlmZmllcyAmIzQzOyAodGltZW91dCAtIGppZmZpZXMpYCBpcyBqdXN0IGB0aW1lb3V0YC4KCk5vdywgc2luY2UgdGhlIGNhbGxlciBwYXNzZXMgdGhlIHJlbGF0aXZlIHRpbWVvdXQgKGxpa2UgYG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVClgKSwgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCB3aWxsIHJlc3RhcnQgdGhlIHRpbWVvdXQgd2l0aCB0aGUgKmZ1bGwqIHJlbGF0aXZlIHRpbWVvdXQuIFRoaXMgbWVhbnMgdGhlIHRpbWVvdXQgaXMgZXh0ZW5kZWQgZXZlcnkgdGltZSB0aGUgZmF1bHQgaGFuZGxlciBtYWtlcyBwcm9ncmVzcy4gVGhhdCYjMzk7cyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlLgoKR2l2ZW4gdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBsZXQgbWUgdGhpbmsgYWJvdXQgaG93IGl0JiMzOTtzIHVzZWQuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIGBhaWUyX2N0eC5jYCBpcyBmb3IgdGhlIEFNRCBYRE5BIGRyaXZlciAoYGRyaXZlcnMvYWNjZWwvYW1keGRuYWApLiBgZHJtX2dwdXN2bS5jYCBpcyBmb3IgRFJNIEdQVSBTVk0gKGBkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jYCksIGFuZCBgbm91dmVhdV9zdm0uY2AgaXMgZm9yIE5vdXZlYXUgU1ZNIChgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY2ApLiBUaGlzIGxlYWRzIG1lIHRvIHdhbnQgdG8gc2VlIGlmIGBkcm1fZ3B1c3ZtLmNgIGlzIGZ1enphYmxlLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYGRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwODowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcm1fZ3B1c3ZtX3NjYW5fbW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz03NzA9c3RhdGljIGJvb2wgZHJtX2dwdXN2bV9jaGVja19wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODI1LS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4MjY6ICogZHJtX2dwdXN2bV9zY2FuX21tKCkgLSBDaGVjayB0aGUgbWlncmF0aW9uIHN0YXRlIG9mIGEgZHJtX2dwdXN2bV9yYW5nZVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04MjctICogQHJhbmdlOiBQb2ludGVyIHRvIHRoZSBzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSB0byBjaGVjay5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg0MC0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODQxOmVudW0gZHJtX2dwdXN2bV9zY2FuX3Jlc3VsdCBkcm1fZ3B1c3ZtX3NjYW5fbW0oc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NDItXHRcdFx0XHRcdCAgICAgICB2b2lkICpkZXZfcHJpdmF0ZV9vd25lcixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkyNy19XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjkyODpFWFBPUlRfU1lNQk9MKGRybV9ncHVzdm1fc2Nhbl9tbSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkyOS1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM9MTY0OD1pbnQgeGVfc3ZtX2FsbG9jX3ZyYW0oc3RydWN0IHhlX3N2bV9yYW5nZSAqcmFuZ2UsIGNvbnN0IHN0cnVjdCBkcm1fZ3B1c3ZtX2N0eCAqY3R4LFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xNjY0LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjE2NjU6XHRtaWdyYXRpb25fc3RhdGUgPSBkcm1fZ3B1c3ZtX3NjYW5fbW0oXHUwMDI2cmFuZ2UtXHUwMDNlYmFzZSxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xNjY2LVx0XHRcdFx0XHQgICAgIHhlX3N2bV9wcml2YXRlX3BhZ2Vfb3duZXIodm0sIGZhbHNlKSxcbi0tXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg9MzUwPXN0YXRpYyBpbmxpbmUgdm9pZCBkcm1fZ3B1c3ZtX2luaXRfcGFnZXMoc3RydWN0IGRybV9ncHVzdm1fcGFnZXMgKnN2bV9wYWdlcyxcbi0tXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmgtMzU4LS8qKlxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oOjM1OTogKiBlbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgLSBTY2FuIHJlc3VsdCBmcm9tIHRoZSBkcm1fZ3B1c3ZtX3NjYW5fbW0oKSBmdW5jdGlvbi5cbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0zNjAtICogQERSTV9HUFVTVk1fU0NBTl9VTlBPUFVMQVRFRDogQXQgbGVhc3Qgb25lIHBhZ2Ugd2FzIG5vdCBwcmVzZW50IG9yIGluYWNjZXNzaWJsZS5cbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0zNjEtICogQERSTV9HUFVTVk1fU0NBTl9FUVVBTDogQWxsIHBhZ2VzIGJlbG9uZyB0byB0aGUgc3RydWN0IGRldl9wYWdlbWFwIGluZGljYXRlZCBhc1xuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oOjM2MjogKiB0aGUgQHBhZ2VtYXAgYXJndW1lbnQgdG8gdGhlIGRybV9ncHVzdm1fc2Nhbl9tbSgpIGZ1bmN0aW9uLlxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oLTM2My0gKiBARFJNX0dQVVNWTV9TQ0FOX09USEVSOiBBbGwgcGFnZXMgYmVsb25nIHRvIGV4YWN0bHkgb25lIGRldl9wYWdlbWFwLCB3aGljaCBpc1xuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oOjM2NDogKiAqTk9UKiB0aGUgQHBhZ2VtYXAgYXJndW1lbnQgdG8gdGhlIGRybV9ncHVzdm1fc2Nhbl9tbSgpLiBBbGwgcGFnZXMgYmVsb25nIHRvXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmgtMzY1LSAqIHRoZSBzYW1lIGRldmljZSBwcml2YXRlIG93bmVyLlxuLS1cbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaD0zNzQ9ZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0IHtcbi0tXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmgtMzgyLVxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oOjM4MzplbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgZHJtX2dwdXN2bV9zY2FuX21tKHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSxcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0zODQtXHRcdFx0XHRcdCAgICAgICB2b2lkICpkZXZfcHJpdmF0ZV9vd25lcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxMjkKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEdQVSBWaXJ0dWFsaXphdGlvbiBhbmQgRHJpdmVyIEludGVyYWN0aW9ucyoqCgpPa2F5LCBzbyBgZHJtX2dwdXN2bV9zY2FuX21tYCBpcyBiZWluZyBjYWxsZWQgYnkgYHhlX3N2bV9hbGxvY192cmFtYCB3aXRoaW4gdGhlIGB4ZWAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgaW4gYGRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uY2AuIFRoZSBxdWVzdGlvbiBpbW1lZGlhdGVseSBwb3BwaW5nIGludG8gbXkgaGVhZCBpcywgY2FuIHRoZSBgeGVgIGRyaXZlciwgSW50ZWwmIzM5O3MgWGUgZ3JhcGhpY3MgZHJpdmVyLCBldmVuIGJlIHRyaWdnZXJlZCB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gSXQmIzM5O3MgaGFyZHdhcmUtc3BlY2lmaWMsIHJlcXVpcmluZyBhY3R1YWwgSW50ZWwgWGUgc2lsaWNvbiwgYnV0IHBlcmhhcHMgdGhlcmUmIzM5O3MgYSBmdXp6aW5nIGF2ZW51ZSB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIFZHRU0gb3IgVktNUz8gTm8sIHRoYXQmIzM5O3Mgbm90IHF1aXRlIHJpZ2h0OyBgeGVgIGlzIGEgKmhhcmR3YXJlKiBkcml2ZXIgdGhyb3VnaCBhbmQgdGhyb3VnaC4KClRoZW4gbXkgbWluZCBzaGlmdGVkIHRvIGNvbnNpZGVyIGBub3V2ZWF1X3N2bS5jYC4gTm93LCAqdGhhdCogd291bGQgYmUgaW50ZXJlc3RpbmcuIFRoZSBOVklESUEgZHJpdmVyLCBgbm91dmVhdWAsIGFuZCB0aGUgZ2VuZXJhbCBjb25jZXB0IG9mIEdQVSB2aXJ0dWFsaXphdGlvbi4uLiBob3cgbWlnaHQgdGhhdCBwbGF5IG91dD8gQW55IHJlbGV2YW50IGludGVyYWN0aW9ucyB3aXRoIGBkcm1fZ3B1c3ZtX2dldF9wYWdlc2AgdGhhdCBjb3VsZCBwcm92aWRlIGEgZGlmZmVyZW50IGVudHJ5IHBvaW50IGludG8gdGhlIG92ZXJhbGwgZmxvdz8gSSBzaG91bGQgZGlnIGludG8gdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHJtX2dwdXN2bV9nZXRfcGFnZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3Q9OTE9UG9zc2libGUgZnV0dXJlIGRlc2lnbiBmZWF0dXJlc1xuLS1cbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0LTEwMC0qIFJhbmdlcyB3aXRoIG1peGVkIHN5c3RlbSBhbmQgZGV2aWNlIHBhZ2VzXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdDoxMDE6XHQqIENhbiBiZSBhZGRlZCBpZiByZXF1aXJlZCB0byBkcm1fZ3B1c3ZtX2dldF9wYWdlcyBmYWlybHkgZWFzaWx5LlxuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3QtMTAyLSogTXVsdGktR1BVIHN1cHBvcnRcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTIzNC0gKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyMzU6ICpcdFx0ZXJyID0gZHJtX2dwdXN2bV9nZXRfcGFnZXMoZ3B1c3ZtLCBcdTAwMjZkcmFuZ2UtXHUwMDNlcGFnZXMsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTIzNi0gKlx0XHRcdFx0XHQgICBncHVzdm0tXHUwMDNlbW0sIFx1MDAyNnJhbmdlLVx1MDAzZW5vdGlmaWVyLVx1MDAzZW5vdGlmaWVyLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM9NDM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVyX29wcyBkcm1fZ3B1c3ZtX25vdGlmaWVyX29wcyA9IHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ1Ni0gKiBtYXBwaW5ncyBpcyBib3VuZCBwZXItcGFnZXMgdmlhIGRybV9ncHVzdm1faW5pdF9wYWdlcygpIGJlZm9yZSB0aGUgZmlyc3RcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDU3OiAqIGRybV9ncHVzdm1fZ2V0X3BhZ2VzKCkgY2FsbC4gSG93ZXZlciwgdGhlIHNhbWUgYmFzZVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00NTgtICogQGdwdXN2bSBjYW4gYWxzbyBiZSB1c2VkIHdpdGggYm90aCBtb2RlcyB0b2dldGhlciBpbiB3aGljaCBjYXNlIHRoZSBmdWxsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz05NDg9ZHJtX2dwdXN2bV9yYW5nZV9jaHVua19zaXplKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05OTQtXHRcdCAqIGRybV9wYWdlbWFwX21pZ3JhdGVfdG9fZGV2bWVtIHdpdGggJiMzOTttaWdyYXRlLmNwYWdlcyAhPSBucGFnZXMmIzM5O1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5OTU6XHRcdCAqIGFuZCB0aGVuIHVwb24gZHJtX2dwdXN2bV9nZXRfcGFnZXMgZGV2aWNlIHBhZ2VzIGZyb21cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTk2LVx0XHQgKiBvdGhlciBwcm9jZXNzZXMgYXJlIGNvbGxlY3RlZCAmIzQzOyBmYXVsdGVkIGluIHdoaWNoIGNyZWF0ZXMgYWxsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz0xNDEyPXN0YXRpYyBib29sIGRybV9ncHVzdm1fcGFnZXNfdmFsaWRfdW5sb2NrZWQoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE0MjktLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE0MzA6ICogZHJtX2dwdXN2bV9nZXRfcGFnZXMoKSAtIEdldCBwYWdlcyBhbmQgcG9wdWxhdGUgR1BVIFNWTSBwYWdlcyBzdHJ1Y3RcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTQzMS0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTQ0My0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTQ0NDppbnQgZHJtX2dwdXN2bV9nZXRfcGFnZXMoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTQ0NS1cdFx0XHQgc3RydWN0IGRybV9ncHVzdm1fcGFnZXMgKnN2bV9wYWdlcyxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE2NjEtfVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNjYyOkVYUE9SVF9TWU1CT0xfR1BMKGRybV9ncHVzdm1fZ2V0X3BhZ2VzKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTY2My1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM9MTUzMz1pbnQgeGVfc3ZtX3JhbmdlX2dldF9wYWdlcyhzdHJ1Y3QgeGVfdm0gKnZtLCBzdHJ1Y3QgeGVfc3ZtX3JhbmdlICpyYW5nZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTUzNy1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxNTM4Olx0ZXJyID0gZHJtX2dwdXN2bV9nZXRfcGFnZXMoXHUwMDI2dm0tXHUwMDNlc3ZtLmdwdXN2bSwgXHUwMDI2cmFuZ2UtXHUwMDNlcGFnZXMsXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTUzOS1cdFx0XHRcdCAgIHZtLVx1MDAzZXN2bS5ncHVzdm0ubW0sXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3VzZXJwdHIuYz02MD1pbnQgeGVfdm1hX3VzZXJwdHJfcGluX3BhZ2VzKHN0cnVjdCB4ZV91c2VycHRyX3ZtYSAqdXZtYSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdXNlcnB0ci5jLTc2LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3VzZXJwdHIuYzo3NzpcdHJldHVybiBkcm1fZ3B1c3ZtX2dldF9wYWdlcyhcdTAwMjZ2bS1cdTAwM2Vzdm0uZ3B1c3ZtLCBcdTAwMjZ1dm1hLVx1MDAzZXVzZXJwdHIucGFnZXMsXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdXNlcnB0ci5jLTc4LVx0XHRcdFx0ICAgIHV2bWEtXHUwMDNldXNlcnB0ci5ub3RpZmllci5tbSxcbi0tXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg9MzIwPXZvaWQgZHJtX2dwdXN2bV9yYW5nZV9zZXRfdW5tYXBwZWQoc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlLFxuLS1cbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0zMjQtXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6MzI1OmludCBkcm1fZ3B1c3ZtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oLTMyNi1cdFx0XHQgc3RydWN0IGRybV9ncHVzdm1fcGFnZXMgKnN2bV9wYWdlcyxcbi0tXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg9MzM3PXZvaWQgZHJtX2dwdXN2bV9mcmVlX3BhZ2VzKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXG4tLVxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oLTM0Ny0gKiBzdHJ1Y3R1cmUgbXVzdCBjYWxsIHRoaXMgb25jZSBvbiBlYWNoIHBhZ2VzIGluc3RhbmNlIGFmdGVyIGFsbG9jYXRpb24sXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6MzQ4OiAqIGJlZm9yZSB0aGUgZmlyc3QgZHJtX2dwdXN2bV9nZXRfcGFnZXMoKSAvIHVubWFwIC8gZnJlZS5cbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0zNDktICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTE5CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiBEUk0gR1BVIFNWTSBVc2FnZSBpbiBTeXprYWxsZXIgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGRybV9ncHVzdm1fZ2V0X3BhZ2VzYC4gSXQmIzM5O3MgdXNlZCBieSB0aGUgYHhlYCBkcml2ZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gYHhlX3N2bV9yYW5nZV9nZXRfcGFnZXNgIGFuZCBgeGVfdm1hX3VzZXJwdHJfcGluX3BhZ2VzYC4gUmlnaHQsIGBkcm1fZ3B1c3ZtYCBpcyBhIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9uLCBlc3NlbnRpYWxseSBhIERSTS1sZXZlbCBhYnN0cmFjdGlvbiBmb3IgR1BVIFNoYXJlZCBWaXJ0dWFsIE1lbW9yeS4gSXQgc2VlbXMgbGlrZSB0aGUgYHhlYCBkcml2ZXIgaXMgY3VycmVudGx5IHRoZSBwcmltYXJ5IHVzZXIuIEhvbGQgb24gYSBzZWNvbmQsIHdoYXQgYWJvdXQgdGhlIG90aGVyIGRyaXZlcnM/CgpJIG5lZWQgdG8gcXVpY2tseSBjaGVjayB0aGUgbGFuZHNjYXBlLiBgbm91dmVhdV9zdm0uY2AgaW1wbGVtZW50cyBTVk0gZnVuY3Rpb25hbGl0eSBmb3IgdGhlIGBub3V2ZWF1YCBkcml2ZXIuIEFuZCBJIGFsc28gc2VlIGEgc2ltaWxhciBmaWxlIGZvciB0aGUgYW1keGRuYSBkcml2ZXIgYGFpZTJfY3R4LmNgLgoKTm93IHRoZSBxdWVzdGlvbiBpcywgYXJlIGFueSBvZiB0aGVzZSBkcml2ZXJzIHJlYWNoYWJsZSBieSBzeXprYWxsZXI/IGBub3V2ZWF1YCBpcyBhIHRyaWNreSBvbmUuIFN5emthbGxlciAqY2FuKiBmdXp6IGl0IGlmIHlvdSYjMzk7cmUgdXNpbmcgYSB2aXJ0dWFsIEdQVSBvciBzb21lIGtpbmQgb2YgbW9ja2luZyBzZXR1cCwgYnV0IGl0IHR5cGljYWxseSBuZWVkcyByZWFsIGhhcmR3YXJlIHRvIHJlYWxseSB0ZXN0IHRoZSBmdW5jdGlvbmFsaXR5LiBUaGF0JiMzOTtzIGEgaHVnZSBodXJkbGUgdG8gb3ZlcmNvbWUuCgpUaGlua2luZyBhYm91dCBvdGhlciBkcml2ZXJzLCBJIHNlZSBob3cgdGhleSYjMzk7dmUgbWFuYWdlZCB0byBhY2hpZXZlIHNvbWUgbGV2ZWwgb2Ygc3l6a2FsbGVyIGNvdmVyYWdlLCB3aXRoIHRoZSBsaWtlcyBvZiBgc3l6LXVzYmAgYW5kIGB2aGNpYCBmb3IgVVNCIGRldmljZXMsIGBtYWM4MDIxMV9od3NpbWAgZm9yIHdpZmkuIEFuZCB3aXRoaW4gRFJNLCBzeXprYWxsZXIgbGV2ZXJhZ2VzIGB2a21zYCBhbmQgYHZnZW1gIGFzIGEgdmlydHVhbCBkZXZpY2UuCgpCdXQgYHhlYCwgYG5vdXZlYXVgLCBhbmQgYGFtZHhkbmFgIGFyZSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzLiBUaGF0JiMzOTtzIGEgdG91Z2ggY29uc3RyYWludC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGVhc2lseSBhY2Nlc3NpYmxlLgoKT2gsIGFuZCBoZXJlJiMzOTtzIGEgdGhvdWdodCwgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCBpcyBhIGNvcmUgbW0vaG1tIGZ1bmN0aW9uLiBJcyBpdCB1c2VkIGJ5IGFueSBvdGhlciBkcml2ZXJzIGJlc2lkZXMgdGhlIG9uZXMgSSYjMzk7dmUgYWxyZWFkeSBjb25zaWRlcmVkPyBUaGF0IGNvdWxkIHByb3ZpZGUgYSBtb3JlIGdlbmVyYWxpemVkIGVudHJ5IHBvaW50IGZvciBmdXp6aW5nLiBUaGF0JiMzOTtzIHRoZSBrZXk6IGEgbW9yZSBnZW5lcmljIGFjY2VzcyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTE2MD1ub3JtYWwgaW50ZXJmYWNlIGlzOjpcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0xNjEtXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MTYyOiAgaW50IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTE2My0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpO1xuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0xNjk9VGhlIGNhbGxlciBtdXN0IG5vdCBob2xkIGBgbW1hcF9yZWFkX2xvY2tgYCBiZWZvcmUgdGhlIGNhbGwuXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MTcwOmBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgIHRha2VzIHRoZSBtbWFwIHJlYWQgbG9jayBpbnRlcm5hbGx5IGFuZFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTE3MS1hbGxvd3MgYGBoYW5kbGVfbW1fZmF1bHQoKWBgIHRvIGRyb3AgaXQgZHVyaW5nIGZhdWx0IGhhbmRsaW5nLiBUaGlzIGlzIHJlcXVpcmVkXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTE4Nj1UaGUgdXNhZ2UgcGF0dGVybiBpczo6XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTIwMy0gYWdhaW46XG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjA0OiAgICAgIHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNnJhbmdlLCB0aW1lb3V0KTtcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yMDUtICAgICAgaWYgKHJldClcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9MjI4PXVwZGF0ZS4gVGhlIHJldHJ5IGNoZWNrIG11c3QgdXNlIHRoZSBzYW1lIG5vdGlmaWVyIGFuZCBzZXF1ZW5jZSBudW1iZXIgc3RvcmVkXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjI5OmluIGBgcmFuZ2VgYCBieSBgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KClgYC5cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yMzAtXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9MjMxPUhvbGRpbmcgdGhlIG1tYXAgbG9jayBhY3Jvc3MgSE1NIGZhdWx0c1xuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yMzMtXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjM0Ok1vc3QgY2FsbGVycyBzaG91bGQgdXNlIGBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgLiBJZiBhIGRyaXZlclxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTIzNS1yZWFsbHkgbmVlZHMgdG8gaG9sZCB0aGUgbW1hcCBsb2NrIGFjcm9zcyB3b3JrIG91dHNpZGUgSE1NLCBpdCBjYW4gdXNlOjpcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9MjQwPWludGVyZmFjZSBjYW5ub3Qgc3VwcG9ydCBWTUFzIHdob3NlIGZhdWx0IGhhbmRsZXJzIG5lZWQgdG8gZHJvcCB0aGUgbW1hcCBsb2NrLlxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjI0MTpOZXcgY2FsbGVycyBzaG91bGQgcHJlZmVyIGBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgIHVubGVzcyB0aGV5XG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjQyLWhhdmUgYSBzcGVjaWZpYyByZXF1aXJlbWVudCB0byBrZWVwIHRoZSBtbWFwIGxvY2sgaGVsZCBhY3Jvc3MgdGhlIGNhbGwuXG4tLVxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfY3R4LmM9MTAzMT1zdGF0aWMgaW50IGFpZTJfcG9wdWxhdGVfcmFuZ2Uoc3RydWN0IGFtZHhkbmFfZ2VtX29iaiAqYWJvKVxuLS1cbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jLTEwNjQtXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYzoxMDY1Olx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2bWFwcC1cdTAwM2VyYW5nZSwgdGltZW91dCk7XG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYy0xMDY2LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jPTg0MT1lbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgZHJtX2dwdXN2bV9zY2FuX21tKHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg2OC1yZXRyeTpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODY5Olx0ZXJyID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2aG1tX3JhbmdlLCB0aW1lb3V0KTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODcwLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jPTE0NDQ9aW50IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNDkxLVx0aG1tX3JhbmdlLmhtbV9wZm5zID0gcGZucztcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTQ5MjpcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNmhtbV9yYW5nZSwgdGltZW91dCk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE0OTMtXHRtbXB1dChtbSk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz0xNzAzPWludCBkcm1fZ3B1c3ZtX3JhbmdlX2V2aWN0KHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNzI4LVx0aG1tX3JhbmdlLmhtbV9wZm5zID0gcGZucztcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTcyOTpcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNmhtbV9yYW5nZSwgdGltZW91dCk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE3MzAtXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uYz02NTI9c3RhdGljIGludCBub3V2ZWF1X3JhbmdlX2ZhdWx0KHN0cnVjdCBub3V2ZWF1X3N2bW0gKnN2bW0sXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uYy02OTMtXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jOjY5NDpcdFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2cmFuZ2UsIHJlbWFpbmluZyk7XG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jLTY5NS1cdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jPTM5Nj1zdGF0aWMgaW50IG1zaHZfcmVnaW9uX3JhbmdlX2ZhdWx0KHN0cnVjdCBtc2h2X21lbV9yZWdpb24gKnJlZ2lvbixcbi0tXG5kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jLTQxNS1hZ2FpbjpcbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmM6NDE2Olx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2cmFuZ2UsIDApO1xuZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYy00MTctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmM9MzI0PWludCBpYl91bWVtX29kcF9tYXBfZG1hX2FuZF9sb2NrKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHAsIHU2NCB1c2VyX3ZpcnQsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYy0zNjgtcmV0cnk6XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jOjM2OTpcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNnJhbmdlLCB0aW1lb3V0KTtcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmMtMzcwLVx0aWYgKHVubGlrZWx5KHJldCkpXG4tLVxuaW5jbHVkZS9saW51eC9obW0uaD0xMjU9aW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSk7XG5pbmNsdWRlL2xpbnV4L2htbS5oOjEyNjppbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXG5pbmNsdWRlL2xpbnV4L2htbS5oLTEyNy1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTtcbi0tXG5saWIvdGVzdF9obW0uYz0zOTI9c3RhdGljIGludCBkbWlycm9yX3JhbmdlX2ZhdWx0X3VubG9ja2VkKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxuLS1cbmxpYi90ZXN0X2htbS5jLTM5OC1cdHdoaWxlICh0cnVlKSB7XG5saWIvdGVzdF9obW0uYzozOTk6XHRcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KHJhbmdlLCB0aW1lb3V0KTtcbmxpYi90ZXN0X2htbS5jLTQwMC1cdFx0aWYgKHJldClcbi0tXG5tbS9obW0uYz02ODk9c3RhdGljIGludCBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkKHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLCBib29sICpsb2NrZWQpXG4tLVxubW0vaG1tLmMtNzUzLSAqIFRoZSBtbWFwIGxvY2sgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIgYW5kIHdpbGwgcmVtYWluIGhlbGQgb24gcmV0dXJuLlxubW0vaG1tLmM6NzU0OiAqIE5ldyB1c2VycyBzaG91bGQgcHJlZmVyIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KCkgdW5sZXNzIHRoZXlcbm1tL2htbS5jLTc1NS0gKiBzcGVjaWZpY2FsbHkgbmVlZCB0byBrZWVwIHRoZSBtbWFwIGxvY2sgaGVsZCBhY3Jvc3MgdGhlIGNhbGwuIFRoaXMgaGVscGVyXG4tLVxubW0vaG1tLmM9NzYyPUVYUE9SVF9TWU1CT0woaG1tX3JhbmdlX2ZhdWx0KTtcbi0tXG5tbS9obW0uYy03NjQtLyoqXG5tbS9obW0uYzo3NjU6ICogaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQgLSBmYXVsdCBpbiBhIHJhbmdlIHdpdGggYSByZXRyeSB0aW1lb3V0XG5tbS9obW0uYy03NjYtICogQHJhbmdlOlx0YXJndW1lbnQgc3RydWN0dXJlXG4tLVxubW0vaG1tLmMtNzgzLSAqL1xubW0vaG1tLmM6Nzg0OmludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSxcbm1tL2htbS5jLTc4NS1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KVxuLS1cbm1tL2htbS5jLTgyNC19XG5tbS9obW0uYzo4MjU6RVhQT1JUX1NZTUJPTChobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCk7XG5tbS9obW0uYy04MjYtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MjkwND1URVNUX0ZfVElNRU9VVChobW0sIGJlbmNobWFya190aHBfbWlncmF0aW9uLCAxMjApXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMjk2MC0gKiBUZXN0IHRoYXQgSE1NIGNhbiBmYXVsdCBpbiBwYWdlcyBiYWNrZWQgYnkgdXNlcmZhdWx0ZmQgdXNpbmcgdGhlXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoyOTYxOiAqIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KCkgcGF0aCB3aXRoIG5vIHRpbWVvdXQuIFRoaXMgZXhlcmNpc2VzXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yOTYyLSAqIHRoZSBsb2NrLWRyb3AgcmV0cnkgbG9naWMgaW4gdGhlIEhNTSBmcmFtZXdvcmsuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODUzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBkZWx2ZSBpbnRvIHRoaXMuCgoqKkludmVzdGlnYXRpbmcgYSBUaW1lb3V0IGluIHRoZSBITU0gU3lzdGVtKioKCkFscmlnaHQsIHNvIGBsaWIvdGVzdF9obW0uY2AgaXMgdXNpbmcgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YC4gSG1tLCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgdGhpcyBpcyByZWxldmFudCB0byB0aGUgcGF0Y2ggaW4gcXVlc3Rpb24uIFRoZSBpbml0aWFsIGFzc3VtcHRpb24gd291bGQgYmUgYSBkaXJlY3QgY29ubmVjdGlvbiwgYnV0IHdhaXQsIHRoZSBwYXRjaCAqZGlkbiYjMzk7dCogdG91Y2ggZWl0aGVyIGBsaWIvdGVzdF9obW0uY2Agb3IgYGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmNgLiBUaGF0IG1lYW5zIHRoZSBjb25uZWN0aW9uIGlzbiYjMzk7dCBhcyBvYnZpb3VzIGFzIEkgaW5pdGlhbGx5IHRob3VnaHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdGltZW91dCBwYXJhbWV0ZXIgaXMgYmVpbmcgcGFzc2VkIHdpdGhpbiBgbGliL3Rlc3RfaG1tLmNgLiBTbywgSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGF0IHNwZWNpZmljIHRlc3QgZmlsZSB0byBzZWUgaG93IGl0JiMzOTtzIGFjdHVhbGx5IHVzaW5nIHRoZSBgdGltZW91dGAgdmFyaWFibGUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiwgYW5kIGhvcGVmdWxseSwgdGhhdCB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bGliL3Rlc3RfaG1tLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4MDpcdFx0XHRcdGNvbnRpbnVlO1xuIDM4MTpcdFx0XHR9XG4gMzgyOlx0XHRcdGJyZWFrO1xuIDM4MzpcdFx0fVxuIDM4NDpcdFxuIDM4NTpcdFx0cmV0ID0gZG1pcnJvcl9kb19mYXVsdChkbWlycm9yLCByYW5nZSk7XG4gMzg2Olx0XG4gMzg3Olx0XHRtdXRleF91bmxvY2soXHUwMDI2ZG1pcnJvci1cdTAwM2VtdXRleCk7XG4gMzg4Olx0b3V0OlxuIDM4OTpcdFx0cmV0dXJuIHJldDtcbiAzOTA6XHR9XG4gMzkxOlx0XG4gMzkyOlx0c3RhdGljIGludCBkbWlycm9yX3JhbmdlX2ZhdWx0X3VubG9ja2VkKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxuIDM5MzpcdFx0XHRcdFx0XHRzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSxcbiAzOTQ6XHRcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyB0aW1lb3V0KVxuIDM5NTpcdHtcbiAzOTY6XHRcdGludCByZXQ7XG4gMzk3Olx0XG4gMzk4Olx0XHR3aGlsZSAodHJ1ZSkge1xuIDM5OTpcdFx0XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChyYW5nZSwgdGltZW91dCk7XG4gNDAwOlx0XHRcdGlmIChyZXQpXG4gNDAxOlx0XHRcdFx0Z290byBvdXQ7XG4gNDAyOlx0XG4gNDAzOlx0XHRcdG11dGV4X2xvY2soXHUwMDI2ZG1pcnJvci1cdTAwM2VtdXRleCk7XG4gNDA0Olx0XHRcdGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShyYW5nZS1cdTAwM2Vub3RpZmllcixcbiA0MDU6XHRcdFx0XHRcdFx0ICAgIHJhbmdlLVx1MDAzZW5vdGlmaWVyX3NlcSkpIHtcbiA0MDY6XHRcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2ZG1pcnJvci1cdTAwM2VtdXRleCk7XG4gNDA3Olx0XHRcdFx0Y29udGludWU7XG4gNDA4Olx0XHRcdH1cbiA0MDk6XHRcdFx0YnJlYWs7XG4gNDEwOlx0XHR9XG4gNDExOlx0XG4gNDEyOlx0XHRyZXQgPSBkbWlycm9yX2RvX2ZhdWx0KGRtaXJyb3IsIHJhbmdlKTtcbiA0MTM6XHRcbiA0MTQ6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkbWlycm9yLVx1MDAzZW11dGV4KTtcbiA0MTU6XHRvdXQ6XG4gNDE2Olx0XHRyZXR1cm4gcmV0O1xuIDQxNzpcdH1cbiA0MTg6XHRcbiA0MTk6XHRzdGF0aWMgaW50IGRtaXJyb3JfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXG4gNDIwOlx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gNDIxOlx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sIHdyaXRlLFxuIDQyMjpcdFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpXG4gNDIzOlx0e1xuIDQyNDpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBkbWlycm9yLVx1MDAzZW5vdGlmaWVyLm1tO1xuIDQyNTpcdFx0dW5zaWduZWQgbG9uZyBhZGRyO1xuIDQyNjpcdFx0dW5zaWduZWQgbG9uZyBwZm5zWzMyXTtcbiA0Mjc6XHRcdHN0cnVjdCBobW1fcmFuZ2UgcmFuZ2UgPSB7XG4gNDI4Olx0XHRcdC5ub3RpZmllciA9IFx1MDAyNmRtaXJyb3ItXHUwMDNlbm90aWZpZXIsXG4gNDI5Olx0XHRcdC5obW1fcGZucyA9IHBmbnMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NzkyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIGB0aW1lb3V0YCBWYXJpYWJsZSBpbiBgbGliL3Rlc3RfaG1tLmNgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbGliL3Rlc3RfaG1tLmNgIGFuZCBJIGltbWVkaWF0ZWx5IHNwb3QgdGhlIGB0aW1lb3V0YCB2YXJpYWJsZSBiZWluZyBwYXNzZWQgZGlyZWN0bHksIGFuZCB0aGF0IHRyaWdnZXJzIGEgcXVlc3Rpb24uIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgdGhhdCBgdGltZW91dGAgaXMgcGFzc2VkIHJpZ2h0IGludG8gc29tZSBmdW5jdGlvbiBjYWxsLiBCdXQsIHRoZSBxdWVzdGlvbiBub3cgaXMsIHdoZXJlIHRoZSBoZWNrIGlzIHRoaXMgYHRpbWVvdXRgIHZhcmlhYmxlIGJlaW5nICpkZWZpbmVkKj8gSSBuZWVkIHRvIHRyYWNlIGJhY2sgaXRzIG9yaWdpbi4gSXMgaXQgY29taW5nIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUsIGEgY29uZmlndXJhdGlvbiBmaWxlLCBvciBpcyBpdCBoYXJkY29kZWQgc29tZXdoZXJlIHVwc3RyZWFtIGluIHRoZSBidWlsZCBwcm9jZXNzPyBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRoZSBidWlsZCBzeXN0ZW0gKE1ha2VmaWxlLCBDTWFrZUxpc3RzLnR4dCwgd2hhdGV2ZXIpLCBhbmQgYW55IHJlbGV2YW50IGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIHZhbHVlIGZvciBgdGltZW91dGAgaXMgYmVpbmcgc2V0LiBJdCYjMzk7cyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSB0ZXN0JiMzOTtzIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGlmIHRoaXMgdmFsdWUgaXNuJiMzOTt0IHByb3Blcmx5IGNvbnRyb2xsZWQgb3Igc2FuaXRpemVkLiBJdCYjMzk7cyBhIGNsYXNzaWMgZXhhbXBsZSBvZiBsb29raW5nIGZvciB0aGUgc291cmNlIG9mIGEgcGFyYW1ldGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwODowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDE5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MTk6XHRzdGF0aWMgaW50IGRtaXJyb3JfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXG4gNDIwOlx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gNDIxOlx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sIHdyaXRlLFxuIDQyMjpcdFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpXG4gNDIzOlx0e1xuIDQyNDpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBkbWlycm9yLVx1MDAzZW5vdGlmaWVyLm1tO1xuIDQyNTpcdFx0dW5zaWduZWQgbG9uZyBhZGRyO1xuIDQyNjpcdFx0dW5zaWduZWQgbG9uZyBwZm5zWzMyXTtcbiA0Mjc6XHRcdHN0cnVjdCBobW1fcmFuZ2UgcmFuZ2UgPSB7XG4gNDI4Olx0XHRcdC5ub3RpZmllciA9IFx1MDAyNmRtaXJyb3ItXHUwMDNlbm90aWZpZXIsXG4gNDI5Olx0XHRcdC5obW1fcGZucyA9IHBmbnMsXG4gNDMwOlx0XHRcdC5wZm5fZmxhZ3NfbWFzayA9IDAsXG4gNDMxOlx0XHRcdC5kZWZhdWx0X2ZsYWdzID1cbiA0MzI6XHRcdFx0XHRITU1fUEZOX1JFUV9GQVVMVCB8ICh3cml0ZSA/IEhNTV9QRk5fUkVRX1dSSVRFIDogMCksXG4gNDMzOlx0XHRcdC5kZXZfcHJpdmF0ZV9vd25lciA9IGRtaXJyb3ItXHUwMDNlbWRldmljZSxcbiA0MzQ6XHRcdH07XG4gNDM1Olx0XHRpbnQgcmV0ID0gMDtcbiA0MzY6XHRcbiA0Mzc6XHRcdGlmICghbW1nZXRfbm90X3plcm8obW0pKVxuIDQzODpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiA0Mzk6XHRcbiA0NDA6XHRcdGZvciAoYWRkciA9IHN0YXJ0OyBhZGRyIFx1MDAzYyBlbmQ7IGFkZHIgPSByYW5nZS5lbmQpIHtcbiA0NDE6XHRcdFx0cmFuZ2Uuc3RhcnQgPSBhZGRyO1xuIDQ0MjpcdFx0XHRyYW5nZS5lbmQgPSBtaW4oYWRkciAmIzQzOyAoQVJSQVlfU0laRShwZm5zKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCksIGVuZCk7XG4gNDQzOlx0XG4gNDQ0Olx0XHRcdHJldCA9IGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWQoZG1pcnJvciwgXHUwMDI2cmFuZ2UsIHRpbWVvdXQpO1xuIDQ0NTpcdFx0XHRpZiAocmV0KVxuIDQ0NjpcdFx0XHRcdGJyZWFrO1xuIDQ0NzpcdFx0fVxuIDQ0ODpcdFxuIDQ0OTpcdFx0bW1wdXQobW0pO1xuIDQ1MDpcdFx0cmV0dXJuIHJldDtcbiA0NTE6XHR9XG4gNDUyOlx0XG4gNDUzOlx0c3RhdGljIGludCBkbWlycm9yX2ZhdWx0KHN0cnVjdCBkbWlycm9yICpkbWlycm9yLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIDQ1NDpcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCB3cml0ZSlcbiA0NTU6XHR7XG4gNDU2Olx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGRtaXJyb3ItXHUwMDNlbm90aWZpZXIubW07XG4gNDU3Olx0XHR1bnNpZ25lZCBsb25nIGFkZHI7XG4gNDU4Olx0XHR1bnNpZ25lZCBsb25nIHBmbnNbMzJdO1xuIDQ1OTpcdFx0c3RydWN0IGhtbV9yYW5nZSByYW5nZSA9IHtcbiA0NjA6XHRcdFx0Lm5vdGlmaWVyID0gXHUwMDI2ZG1pcnJvci1cdTAwM2Vub3RpZmllcixcbiA0NjE6XHRcdFx0LmhtbV9wZm5zID0gcGZucyxcbiA0NjI6XHRcdFx0LnBmbl9mbGFnc19tYXNrID0gMCxcbiA0NjM6XHRcdFx0LmRlZmF1bHRfZmxhZ3MgPVxuIDQ2NDpcdFx0XHRcdEhNTV9QRk5fUkVRX0ZBVUxUIHwgKHdyaXRlID8gSE1NX1BGTl9SRVFfV1JJVEUgOiAwKSxcbiA0NjU6XHRcdFx0LmRldl9wcml2YXRlX293bmVyID0gZG1pcnJvci1cdTAwM2VtZGV2aWNlLFxuIDQ2NjpcdFx0fTtcbiA0Njc6XHRcdGludCByZXQgPSAwO1xuIDQ2ODpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwODowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTgyNAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKkZpbmRpbmcgdGhlIENhbGxlcnMgb2YgYGRtaXJyb3JfZmF1bHRfdW5sb2NrZWRgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBkbWlycm9yX2ZhdWx0X3VubG9ja2VkYC4gSXQmIzM5O3MgbmFtZWQgaW4gYSB3YXkgdGhhdCBzdWdnZXN0cyBpdCYjMzk7cyByZWxhdGVkIHRvIHNvbWUga2luZCBvZiBkYXRhIG1pcnJvcmluZywgcGVyaGFwcyBhIGZhdWx0IGNvbmRpdGlvbiwgYW5kIHBvc3NpYmx5IHdvcmtpbmcgd2l0aCBhbiB1bmxvY2tlZCBtdXRleC4gVGhlICYjMzQ7dW5sb2NrZWQmIzM0OyBwYXJ0IGlzIGltcG9ydGFudDsgaXQgaW1wbGllcyBhIGNyaXRpY2FsIHNlY3Rpb24gaXMgKm5vdCogcHJvdGVjdGVkIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLCBzbyBjb25jdXJyZW5jeSBjb25zaWRlcmF0aW9ucyBiZWNvbWUgcGFyYW1vdW50LiBGaXJzdCwgSSBuZWVkIHRvIHBpbnBvaW50IGV2ZXJ5d2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBjYWxsZWQgd2l0aGluIHRoZSBjb2RlYmFzZS4gVGhlIHNoZWVyIG51bWJlciBvZiBsb2NhdGlvbnMgd2lsbCBnaXZlIG1lIGEgZ29vZCBpbmRpY2F0aW9uIG9mIHRoaXMgZnVuY3Rpb24mIzM5O3Mgb3ZlcmFsbCBzaWduaWZpY2FuY2UgdG8gdGhlIHNvZnR3YXJlIGFuZCB3aWxsIGhlbHAgbWUgbmFycm93IGRvd24gd2hlcmUgaXQmIzM5O3MgbW9zdCBpbXBvcnRhbnQgdG8gYW5hbHl6ZS4gT25jZSBJIGtub3cgdGhlIGNhbGxpbmcgcG9pbnRzLCBJIGNhbiBzdGFydCBsb29raW5nIGF0IHRoZSBpbW1lZGlhdGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpYyBvcGVyYXRpb25zIGhhcHBlbmluZyBhcm91bmQgdGhhdCBmYXVsdCBoYW5kbGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG1pcnJvcl9mYXVsdF91bmxvY2tlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvdGVzdF9obW0uYz0zOTI9c3RhdGljIGludCBkbWlycm9yX3JhbmdlX2ZhdWx0X3VubG9ja2VkKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxuLS1cbmxpYi90ZXN0X2htbS5jLTQxOC1cbmxpYi90ZXN0X2htbS5jOjQxOTpzdGF0aWMgaW50IGRtaXJyb3JfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXG5saWIvdGVzdF9obW0uYy00MjAtXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubGliL3Rlc3RfaG1tLmM9NTUyPXN0YXRpYyBpbnQgZG1pcnJvcl9yZWFkX3VubG9ja2VkKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxuLS1cbmxpYi90ZXN0X2htbS5jLTU3Ny1cdFx0c3RhcnQgPSBjbWQtXHUwMDNlYWRkciAmIzQzOyAoYm91bmNlLmNwYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG5saWIvdGVzdF9obW0uYzo1Nzg6XHRcdHJldCA9IGRtaXJyb3JfZmF1bHRfdW5sb2NrZWQoZG1pcnJvciwgc3RhcnQsIGVuZCwgZmFsc2UsIHRpbWVvdXQpO1xubGliL3Rlc3RfaG1tLmMtNTc5LVx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwODowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDI4NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIGB0ZXN0X2htbS5jYCBDb251bmRydW0qKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gYGxpYi90ZXN0X2htbS5jYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoYXQgYGRtaXJyb3JfcmVhZF91bmxvY2tlZGAgZnVuY3Rpb24gY2FsbC4gSSByZWNvZ25pemUgdGhhdCBuYW1pbmcgY29udmVudGlvbiwgc28gSSYjMzk7bSB0aGlua2luZyB0aGlzIGxpa2VseSBpbnZvbHZlcyBzb21lIHNvcnQgb2YgZGlyZWN0IG1lbW9yeSBhY2Nlc3MgcmVsYXRlZCB0byBhIG1pcnJvciBvciBkdXBsaWNhdGUgZGF0YSBzdHJ1Y3R1cmUsIGFuZCB0aGUgJiMzNDt1bmxvY2tlZCYjMzQ7IHBhcnQgc3VnZ2VzdHMgd2UmIzM5O3JlIGJ5cGFzc2luZyB0eXBpY2FsIGNvbmN1cnJlbmN5IGNvbnRyb2xzLiBLbm93aW5nIHRoZSBwcm9qZWN0IGFuZCB0aGUgY29udGV4dCBpcyBrZXkgaGVyZSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljcy4gSXMgdGhpcyBhIHJlYWQtb25seSBhY2Nlc3M/IFdoYXQmIzM5O3MgdGhlIGxvY2sgcHJvdGVjdGluZz8gV2hhdOKAmXMgdGhlIGltcGxpY2F0aW9uIG9mIGJ5cGFzc2luZyB0aGUgbG9jaz8gSXMgaXQgZm9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgb3IgaXMgdGhlcmUgYSByZWFzb24gdGhpcyBwYXJ0aWN1bGFyIGNvZGUgc2VjdGlvbiBkb2VzbiYjMzk7dCBuZWVkIHRoZSBsb2NrPyBJIG5lZWQgdG8gYW5hbHl6ZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCB0aGUgcG90ZW50aWFsIHJpc2tzIG9yIGJlbmVmaXRzIG9mIHVzaW5nIHRoaXMgdW5sb2NrZWQgcmVhZC4gTXkgZXhwZXJ0aXNlIHNob3VsZCBhbGxvdyBtZSB0byBzcG90IGFueSByZWQgZmxhZ3MgcmVsYXRlZCB0byBkYXRhIGNvcnJ1cHRpb24sIHJhY2UgY29uZGl0aW9ucywgb3IgdW5leHBlY3RlZCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvdGVzdF9obW0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTUwOlx0fVxuIDU1MTpcdFxuIDU1MjpcdHN0YXRpYyBpbnQgZG1pcnJvcl9yZWFkX3VubG9ja2VkKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxuIDU1MzpcdFx0XHRcdFx0IHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZCxcbiA1NTQ6XHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpXG4gNTU1Olx0e1xuIDU1NjpcdFx0c3RydWN0IGRtaXJyb3JfYm91bmNlIGJvdW5jZTtcbiA1NTc6XHRcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDtcbiA1NTg6XHRcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGNtZC1cdTAwM2VucGFnZXMgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4gNTU5Olx0XHRpbnQgcmV0O1xuIDU2MDpcdFxuIDU2MTpcdFx0c3RhcnQgPSBjbWQtXHUwMDNlYWRkcjtcbiA1NjI6XHRcdGVuZCA9IHN0YXJ0ICYjNDM7IHNpemU7XG4gNTYzOlx0XHRpZiAoZW5kIFx1MDAzYyBzdGFydClcbiA1NjQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTY1Olx0XG4gNTY2Olx0XHRyZXQgPSBkbWlycm9yX2JvdW5jZV9pbml0KFx1MDAyNmJvdW5jZSwgc3RhcnQsIHNpemUpO1xuIDU2NzpcdFx0aWYgKHJldClcbiA1Njg6XHRcdFx0cmV0dXJuIHJldDtcbiA1Njk6XHRcbiA1NzA6XHRcdHdoaWxlICgxKSB7XG4gNTcxOlx0XHRcdG11dGV4X2xvY2soXHUwMDI2ZG1pcnJvci1cdTAwM2VtdXRleCk7XG4gNTcyOlx0XHRcdHJldCA9IGRtaXJyb3JfZG9fcmVhZChkbWlycm9yLCBzdGFydCwgZW5kLCBcdTAwMjZib3VuY2UpO1xuIDU3MzpcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2ZG1pcnJvci1cdTAwM2VtdXRleCk7XG4gNTc0Olx0XHRcdGlmIChyZXQgIT0gLUVOT0VOVClcbiA1NzU6XHRcdFx0XHRicmVhaztcbiA1NzY6XHRcbiA1Nzc6XHRcdFx0c3RhcnQgPSBjbWQtXHUwMDNlYWRkciAmIzQzOyAoYm91bmNlLmNwYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG4gNTc4Olx0XHRcdHJldCA9IGRtaXJyb3JfZmF1bHRfdW5sb2NrZWQoZG1pcnJvciwgc3RhcnQsIGVuZCwgZmFsc2UsIHRpbWVvdXQpO1xuIDU3OTpcdFx0XHRpZiAocmV0KVxuIDU4MDpcdFx0XHRcdGJyZWFrO1xuIDU4MTpcdFx0XHRjbWQtXHUwMDNlZmF1bHRzJiM0MzsmIzQzOztcbiA1ODI6XHRcdH1cbiA1ODM6XHRcbiA1ODQ6XHRcdGlmIChyZXQgPT0gMCkge1xuIDU4NTpcdFx0XHRpZiAoY29weV90b191c2VyKHU2NF90b191c2VyX3B0cihjbWQtXHUwMDNlcHRyKSwgYm91bmNlLnB0cixcbiA1ODY6XHRcdFx0XHRcdCBib3VuY2Uuc2l6ZSkpXG4gNTg3Olx0XHRcdFx0cmV0ID0gLUVGQVVMVDtcbiA1ODg6XHRcdH1cbiA1ODk6XHRcdGNtZC1cdTAwM2VjcGFnZXMgPSBib3VuY2UuY3BhZ2VzO1xuIDU5MDpcdFx0ZG1pcnJvcl9ib3VuY2VfZmluaShcdTAwMjZib3VuY2UpO1xuIDU5MTpcdFx0cmV0dXJuIHJldDtcbiA1OTI6XHR9XG4gNTkzOlx0XG4gNTk0Olx0c3RhdGljIGludCBkbWlycm9yX2RvX3dyaXRlKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIDU5NTpcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IGRtaXJyb3JfYm91bmNlICpib3VuY2UpXG4gNTk2Olx0e1xuIDU5NzpcdFx0dW5zaWduZWQgbG9uZyBwZm47XG4gNTk4Olx0XHR2b2lkICpwdHI7XG4gNTk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjU2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgcHJvbXB0OgoKKipBbmFseXppbmcgdGhlIENhbGwgU2l0ZXMgb2YgYGRtaXJyb3JfcmVhZF91bmxvY2tlZGAqKgoKT2theSwgc28gdGhlIGluaXRpYWwgZGlyZWN0aW9uIGlzIGNsZWFyOiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYGRtaXJyb3JfcmVhZF91bmxvY2tlZGAgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZC4gVGhpcyBpc24mIzM5O3QganVzdCBhYm91dCAqZmluZGluZyogdGhlIGNhbGxzLCBidXQgdW5kZXJzdGFuZGluZyB0aGVpciBjb250ZXh0LiBJJiMzOTttIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgd2hhdCB0aGF0IGZ1bmN0aW9uIGxpa2VseSBkb2VzIGJhc2VkIG9uIGl0cyBuYW1lLiAmIzM0O01pcnJvciwmIzM0OyAmIzM0O3JlYWQsJiMzNDsgYW5kICYjMzQ7dW5sb2NrZWQmIzM0OyBzdWdnZXN0IHRoaXMgaGFzIHRvIGRvIHdpdGggcmVhZGluZyBmcm9tIGEgbWlycm9yZWQgZGF0YSBzdHJ1Y3R1cmUsIGFuZCB0aGUgJiMzNDt1bmxvY2tlZCYjMzQ7IHBhcnQgdGVsbHMgbWUgdGhlcmUmIzM5O3Mgc29tZSBzb3J0IG9mIGNvbmN1cnJlbmN5IGNvbnNpZGVyYXRpb24uIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBhIHJlYWQgb3BlcmF0aW9uIHdoZXJlIGV4Y2x1c2l2ZSBsb2NrcyBhcmVuJiMzOTt0IG5lY2Vzc2FyeS4KCk15IG5leHQgbW92ZSBpcyBwcm9iYWJseSB0byB1c2UgYSBzdGF0aWMgYW5hbHlzaXMgdG9vbCBvciBhIGdvb2Qgb2xkLWZhc2hpb25lZCBncmVwIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBjYWxsIHNpdGVzLiBJIGNhbiB1c2UgdGhlIHRvb2wgdG8gZmluZCBjcm9zcy1yZWZlcmVuY2VzIGZvciB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBJIG5lZWQgdG8gYmUgZWZmaWNpZW50IGhlcmUg4oCTIGEgcXVpY2sgc2VhcmNoIHRvIGdldCBhIGxpc3QsIGFuZCB0aGVuIEkmIzM5O2xsIHN0YXJ0IHRvIGRpZyBkZWVwZXIuIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUga2luZCBvZiBvdXRwdXQgaW4gdGhlIGZvcm0gb2YgYSBsaXN0IG9mIGxpbmVzIG9mIGNvZGUuCgpPbmNlIEkmIzM5O3ZlIGdvdCB0aGF0IGxpc3QsIEkmIzM5O2xsIG5lZWQgdG8gcmFwaWRseSBzY2FuIHRocm91Z2ggZWFjaCBjYWxsIHNpdGUgdG8gYXNzZXNzIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGJlIG1pbmRmdWwgb2YgaG93IHRoZSByZXR1cm4gdmFsdWUgaXMgdXNlZCwgd2hhdCBsb2NrcyBhcmUgaGVsZCAob3Igbm90IGhlbGQpIGFyb3VuZCB0aGUgY2FsbCwgYW5kIHdoYXQga2luZCBvZiBkYXRhIHRoZSBmdW5jdGlvbiBpcyBvcGVyYXRpbmcgb24uIFRoZSBnb2FsIGlzIHRvIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBzeXN0ZW0uIFVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgZmxvdyB3aWxsIGJlIGNydWNpYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RtaXJyb3JfcmVhZF91bmxvY2tlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvdGVzdF9obW0uYz01MTI9c3RhdGljIGludCBkbWlycm9yX3JlYWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZClcbi0tXG5saWIvdGVzdF9obW0uYy01NTEtXG5saWIvdGVzdF9obW0uYzo1NTI6c3RhdGljIGludCBkbWlycm9yX3JlYWRfdW5sb2NrZWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXG5saWIvdGVzdF9obW0uYy01NTMtXHRcdFx0XHQgc3RydWN0IGhtbV9kbWlycm9yX2NtZCAqY21kLFxuLS1cbmxpYi90ZXN0X2htbS5jPTE2MTY9c3RhdGljIGxvbmcgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbmxpYi90ZXN0X2htbS5jLTE2NzgtXHRjYXNlIEhNTV9ETUlSUk9SX1JFQURfVU5MT0NLRUQ6XG5saWIvdGVzdF9obW0uYzoxNjc5Olx0XHRyZXQgPSBkbWlycm9yX3JlYWRfdW5sb2NrZWQoZG1pcnJvciwgXHUwMDI2Y21kLCAwKTtcbmxpYi90ZXN0X2htbS5jLTE2ODAtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwODowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTg2MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLi4uCgoqKkFuYWx5emluZyB0aGUgZG1pcnJvciBLZXJuZWwgTW9kdWxlJiMzOTtzIFRpbWVvdXQgSGFuZGxpbmcqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBkbWlycm9yX3JlYWRfdW5sb2NrZWRgIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGZyb20gYGRtaXJyb3JfZm9wc191bmxvY2tlZF9pb2N0bGAuIEFuZCBoYW5nIG9uLi4udGhlIGB0aW1lb3V0YCBwYXJhbWV0ZXIgcGFzc2VkIHRvIGBkbWlycm9yX3JlYWRfdW5sb2NrZWRgIGlzIHNldCB0byB6ZXJvIGluIHRoYXQgY2FsbCEgVGhhdCYjMzk7cyBhIGJpdCBvZGQuIElmIGB0aW1lb3V0YCBpcyB6ZXJvLCB0aGVuIHRoZSBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIGZ1bmN0aW9uIHdvbiYjMzk7dCBhY3R1YWxseSBiZSB1c2luZyBhbnkgb2YgaXRzIHRpbWVvdXQgbG9naWMsIHdpbGwgaXQ/IEl0JiMzOTtsbCBieXBhc3MgdGhhdCB3aG9sZSB0aW1lb3V0IG1lY2hhbmlzbSBlbnRpcmVseS4KCkkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgaXMgdGhlIG9ubHkgY2FzZSB3aGVyZSBgZG1pcnJvcl9yZWFkX3VubG9ja2VkYCBpcyBjYWxsZWQgZnJvbSBgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsYC4gSSBzaG91bGQgcmVhbGx5IGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBvdGhlciBjYWxscyB3aXRoaW4gYGRtaXJyb3JfZm9wc191bmxvY2tlZF9pb2N0bGAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHNjZW5hcmlvcyBvciBwb3NzaWJsZSBpc3N1ZXMgdGhhdCBtaWdodCBhcmlzZS4gVGhpcyBuZWVkcyBhIGRlZXBlciBkaXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwODowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjcwOlx0XHRjYXNlIEhNTV9ETUlSUk9SX1JFTEVBU0U6XG4xNjcxOlx0XHRcdGRtaXJyb3JfZGV2aWNlX3JlbW92ZV9jaHVua3MoZG1pcnJvci1cdTAwM2VtZGV2aWNlKTtcbjE2NzI6XHRcdFx0cmV0ID0gMDtcbjE2NzM6XHRcdFx0YnJlYWs7XG4xNjc0Olx0XHRjYXNlIEhNTV9ETUlSUk9SX0ZMQUdTOlxuMTY3NTpcdFx0XHRkbWlycm9yLVx1MDAzZWZsYWdzID0gY21kLm5wYWdlcztcbjE2NzY6XHRcdFx0cmV0ID0gMDtcbjE2Nzc6XHRcdFx0YnJlYWs7XG4xNjc4Olx0XHRjYXNlIEhNTV9ETUlSUk9SX1JFQURfVU5MT0NLRUQ6XG4xNjc5Olx0XHRcdHJldCA9IGRtaXJyb3JfcmVhZF91bmxvY2tlZChkbWlycm9yLCBcdTAwMjZjbWQsIDApO1xuMTY4MDpcdFx0XHRicmVhaztcbjE2ODE6XHRcdGRlZmF1bHQ6XG4xNjgyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTY4MzpcdFx0fVxuMTY4NDpcdFx0aWYgKHJldClcbjE2ODU6XHRcdFx0cmV0dXJuIHJldDtcbjE2ODY6XHRcbjE2ODc6XHRcdGlmIChjb3B5X3RvX3VzZXIodWFyZywgXHUwMDI2Y21kLCBzaXplb2YoY21kKSkpXG4xNjg4Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuMTY4OTpcdFxuMTY5MDpcdFx0cmV0dXJuIDA7XG4xNjkxOlx0fVxuMTY5MjpcdFxuMTY5MzpcdHN0YXRpYyBpbnQgZG1pcnJvcl9mb3BzX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuMTY5NDpcdHtcbjE2OTU6XHRcdHVuc2lnbmVkIGxvbmcgYWRkcjtcbjE2OTY6XHRcbjE2OTc6XHRcdGZvciAoYWRkciA9IHZtYS1cdTAwM2V2bV9zdGFydDsgYWRkciBcdTAwM2Mgdm1hLVx1MDAzZXZtX2VuZDsgYWRkciAmIzQzOz0gUEFHRV9TSVpFKSB7XG4xNjk4Olx0XHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuMTY5OTpcdFx0XHRpbnQgcmV0O1xuMTcwMDpcdFxuMTcwMTpcdFx0XHRwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XG4xNzAyOlx0XHRcdGlmICghcGFnZSlcbjE3MDM6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE3MDQ6XHRcbjE3MDU6XHRcdFx0cmV0ID0gdm1faW5zZXJ0X3BhZ2Uodm1hLCBhZGRyLCBwYWdlKTtcbjE3MDY6XHRcdFx0aWYgKHJldCkge1xuMTcwNzpcdFx0XHRcdF9fZnJlZV9wYWdlKHBhZ2UpO1xuMTcwODpcdFx0XHRcdHJldHVybiByZXQ7XG4xNzA5Olx0XHRcdH1cbjE3MTA6XHRcdFx0cHV0X3BhZ2UocGFnZSk7XG4xNzExOlx0XHR9XG4xNzEyOlx0XG4xNzEzOlx0XHRyZXR1cm4gMDtcbjE3MTQ6XHR9XG4xNzE1Olx0XG4xNzE2Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZG1pcnJvcl9mb3BzID0ge1xuMTcxNzpcdFx0Lm9wZW5cdFx0PSBkbWlycm9yX2ZvcHNfb3BlbixcbjE3MTg6XHRcdC5yZWxlYXNlXHQ9IGRtaXJyb3JfZm9wc19yZWxlYXNlLFxuMTcxOTpcdFx0Lm1tYXBcdFx0PSBkbWlycm9yX2ZvcHNfbW1hcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4OTkKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRpbWVvdXQgTWVjaGFuaXNtKioKCk9rYXksIHNvIEkgc2VlIHRoaXMgYHRpbWVvdXQgPSAwYCBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2FpdCwgemVybyBmb3IgYSB0aW1lb3V0PyBUaGF0IHVzdWFsbHkgbWVhbnMgJiMzOTtubyB0aW1lb3V0JiMzOTsgaW4gcHJvZ3JhbW1pbmcuIElzIHRoYXQgY29uc2lzdGVudCBoZXJlPyYjMzQ7IEkgbmVlZCB0byB2ZXJpZnkgdGhpcyBhc3N1bXB0aW9uLiBUaGUga2V5IGlzIHRvIGZpbmQgYWxsIHRoZSBwbGFjZXMgdGhpcyBgdGltZW91dGAgdmFyaWFibGUgaXMgdXNlZCB0byBzZWUgaWYgdGhlIHplcm8gdmFsdWUgYWx3YXlzIHJlcHJlc2VudHMgdGhpcyBzdGF0ZS4gSSBhbSBnb2luZyB0byBzZWUgaWYgdGhlIGNvZGUgaXMgYWN0dWFsbHkgY29uc2lzdGVudCB3aXRoIG15IHVuZGVyc3RhbmRpbmcgb2YgYHRpbWVvdXQgPSAwYCBiZWluZyBhIGZsYWcgZm9yIG5vIHRpbWVvdXQuCgpJJiMzOTtsbCBzcGVjaWZpY2FsbHkgY2hlY2sgd2hlcmUgdGhpcyB2YXJpYWJsZSBpcyBwYXNzZWQgdG8gYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YC4gVGhlIGNvZGUgc25pcHBldCBkb2VzbiYjMzk7dCBnaXZlIG1lIGNvbnRleHQsIHNvIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjb25zdWx0IHRoZSBsYXJnZXIgY29kZWJhc2UuIEkgaGF2ZSBhIGh1bmNoLCBiYXNlZCBvbiB0aGUgZ3JlcCBvdXRwdXQsIHRoYXQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jYCBtaWdodCBiZSByZWxldmFudC4gTGV0IG1lIG9wZW4gdGhhdCBmaWxlIGFuZCBzZWUgaG93IHRoZSB0aW1lb3V0IHZhbHVlIGlzIGFjdHVhbGx5IGJlaW5nIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGF0IGZ1bmN0aW9uIGNhbGwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUgdG8gYmUgY2VydGFpbiBhYm91dCB0aGlzIHRpbWVvdXQgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI5NTA6XHRcdFx0LyogVGVzdCB3aXRob3V0IFRIUCAqL1xuMjk1MTpcdFx0XHRBU1NFUlRfRVEocnVuX21pZ3JhdGlvbl9iZW5jaG1hcmsoc2VsZi1cdTAwM2VmZCwgMCwgdGVzdF9zaXplc1tpXSxcbjI5NTI6XHRcdFx0XHRcdFx0aXRlcmF0aW9ucywgXHUwMDI2cmVndWxhcl9yZXN1bHRzKSwgMCk7XG4yOTUzOlx0XG4yOTU0Olx0XHRcdC8qIFByaW50IHJlc3VsdHMgKi9cbjI5NTU6XHRcdFx0cHJpbnRfYmVuY2htYXJrX3Jlc3VsdHModGVzdF9uYW1lc1tpXSwgdGVzdF9zaXplc1tpXSxcbjI5NTY6XHRcdFx0XHRcdFx0XHUwMDI2dGhwX3Jlc3VsdHMsIFx1MDAyNnJlZ3VsYXJfcmVzdWx0cyk7XG4yOTU3Olx0XHR9XG4yOTU4Olx0fVxuMjk1OTpcdC8qXG4yOTYwOlx0ICogVGVzdCB0aGF0IEhNTSBjYW4gZmF1bHQgaW4gcGFnZXMgYmFja2VkIGJ5IHVzZXJmYXVsdGZkIHVzaW5nIHRoZVxuMjk2MTpcdCAqIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KCkgcGF0aCB3aXRoIG5vIHRpbWVvdXQuIFRoaXMgZXhlcmNpc2VzXG4yOTYyOlx0ICogdGhlIGxvY2stZHJvcCByZXRyeSBsb2dpYyBpbiB0aGUgSE1NIGZyYW1ld29yay5cbjI5NjM6XHQgKi9cbjI5NjQ6XHRzdHJ1Y3QgdWZmZF90aHJlYWRfYXJncyB7XG4yOTY1Olx0XHRpbnQgdWZmZDtcbjI5NjY6XHRcdGludCBzdG9wX2ZkO1xuMjk2NzpcdFx0dm9pZCAqcGFnZV9idWZmZXI7XG4yOTY4Olx0XHR1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZTtcbjI5Njk6XHR9O1xuMjk3MDpcdFxuMjk3MTpcdHN0YXRpYyB2b2lkICp1ZmZkX2hhbmRsZXJfdGhyZWFkKHZvaWQgKmFyZylcbjI5NzI6XHR7XG4yOTczOlx0XHRzdHJ1Y3QgdWZmZF90aHJlYWRfYXJncyAqYXJncyA9IGFyZztcbjI5NzQ6XHRcdHN0cnVjdCB1ZmZkX21zZyBtc2c7XG4yOTc1Olx0XHRzdHJ1Y3QgdWZmZGlvX2NvcHkgY29weTtcbjI5NzY6XHRcdHN0cnVjdCBwb2xsZmQgcG9sbGZkWzJdO1xuMjk3NzpcdFx0aW50IHJldDtcbjI5Nzg6XHRcbjI5Nzk6XHRcdHBvbGxmZFswXS5mZCA9IGFyZ3MtXHUwMDNldWZmZDtcbjI5ODA6XHRcdHBvbGxmZFswXS5ldmVudHMgPSBQT0xMSU47XG4yOTgxOlx0XHRwb2xsZmRbMV0uZmQgPSBhcmdzLVx1MDAzZXN0b3BfZmQ7XG4yOTgyOlx0XHRwb2xsZmRbMV0uZXZlbnRzID0gUE9MTElOO1xuMjk4MzpcdFxuMjk4NDpcdFx0d2hpbGUgKDEpIHtcbjI5ODU6XHRcdFx0cmV0ID0gcG9sbChwb2xsZmQsIDIsIC0xKTtcbjI5ODY6XHRcdFx0aWYgKHJldCBcdTAwM2M9IDApXG4yOTg3Olx0XHRcdFx0YnJlYWs7XG4yOTg4Olx0XHRcdGlmIChwb2xsZmRbMV0ucmV2ZW50cylcbjI5ODk6XHRcdFx0XHRicmVhaztcbjI5OTA6XHRcdFx0aWYgKCEocG9sbGZkWzBdLnJldmVudHMgXHUwMDI2IFBPTExJTikpXG4yOTkxOlx0XHRcdFx0YnJlYWs7XG4yOTkyOlx0XG4yOTkzOlx0XHRcdHJldCA9IHJlYWQoYXJncy1cdTAwM2V1ZmZkLCBcdTAwMjZtc2csIHNpemVvZihtc2cpKTtcbjI5OTQ6XHRcdFx0aWYgKHJldCAhPSBzaXplb2YobXNnKSlcbjI5OTU6XHRcdFx0XHRicmVhaztcbjI5OTY6XHRcbjI5OTc6XHRcdFx0aWYgKG1zZy5ldmVudCAhPSBVRkZEX0VWRU5UX1BBR0VGQVVMVClcbjI5OTg6XHRcdFx0XHRicmVhaztcbjI5OTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM5NDgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBITU0gVGltZW91dCBDaGFuZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCB3YXMgYWJvdXQgYGhtbS10ZXN0cy5jYCBhbmQgdGhhdCBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgdGhhdCBpdCYjMzk7cyBiZWluZyB0ZXN0ZWQgd2l0aG91dCBhbnkgdGltZW91dC4gQnV0IHRoYXQmIzM5O3MganVzdCBhIHRlc3QsIGFuZCB0aGVuIEkgdGhvdWdodCwgJiMzNDtIb2xkIG9uLCBgbGliL3Rlc3RfaG1tLmNgLi4uaXMgdGhhdCBldmVuICpyZWFjaGFibGUqIGluIGEgc3l6a2FsbGVyIGNvbnRleHQ/JiMzNDsKClJpZ2h0LCB5ZXMsIGl0IHNob3VsZCBiZS4gYENPTkZJR19URVNUX0hNTWAgaXMgdHlwaWNhbGx5IGVuYWJsZWQsIGFuZCBzeXprYWxsZXIgKmRvZXMqIGZ1enogdGhlIGB0ZXN0X2htbWAgZGV2aWNlLCB0aG9zZSBgL2Rldi9obW1fZG1pcnJvcipgIHRoaW5ncy4gVGhhdCYjMzk7cyBnb29kLiBCdXQgbm93IEkmIzM5O20gc2VlaW5nIHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIGB0aW1lb3V0YCBwYXJhbWV0ZXIgb3IgcmVsYXRlZCBsb2dpYyBpbiBgYWllMl9jdHguY2AsIGBkcm1fZ3B1c3ZtLmNgLCBhbmQgYG5vdXZlYXVfc3ZtLmNgLCB3aGljaCBhcmUgcmVhbCwgcHJvZHVjdGlvbiBkcml2ZXJzLi4uYW5kIHRoYXQmIzM5O3MgdGhlIGtleS4KClRoZSBwYXRjaCAqZG9lc24mIzM5O3QqIHRvdWNoIGBsaWIvdGVzdF9obW0uY2AsIHNvIHdoYXRldmVyJiMzOTtzIGhhcHBlbmluZyB3aXRoIHRoZSB0aW1lb3V0IGNoYW5nZSBpc24mIzM5O3QgZGlyZWN0bHkgYWZmZWN0aW5nIHRoYXQgdGVzdC4gT2theSwgbGV0JiMzOTtzIGdvIGJhY2sgYW5kIGxvb2sgYXQgdGhlIGRpZmYgY2xvc2VseSBhZ2Fpbi4gTmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoZXNlIGNoYW5nZXMgYXJlIGJlaW5nIG1hZGUgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggc3l6a2FsbGVyJiMzOTtzIGNvdmVyYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwODowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9MTYwPW5vcm1hbCBpbnRlcmZhY2UgaXM6OlxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTE2MS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoxNjI6ICBpbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMTYzLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCk7XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTE2OT1UaGUgY2FsbGVyIG11c3Qgbm90IGhvbGQgYGBtbWFwX3JlYWRfbG9ja2BgIGJlZm9yZSB0aGUgY2FsbC5cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoxNzA6YGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpYGAgdGFrZXMgdGhlIG1tYXAgcmVhZCBsb2NrIGludGVybmFsbHkgYW5kXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMTcxLWFsbG93cyBgYGhhbmRsZV9tbV9mYXVsdCgpYGAgdG8gZHJvcCBpdCBkdXJpbmcgZmF1bHQgaGFuZGxpbmcuIFRoaXMgaXMgcmVxdWlyZWRcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9MTg2PVRoZSB1c2FnZSBwYXR0ZXJuIGlzOjpcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjAzLSBhZ2FpbjpcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoyMDQ6ICAgICAgcmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2cmFuZ2UsIHRpbWVvdXQpO1xuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTIwNS0gICAgICBpZiAocmV0KVxuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yMjg9dXBkYXRlLiBUaGUgcmV0cnkgY2hlY2sgbXVzdCB1c2UgdGhlIHNhbWUgbm90aWZpZXIgYW5kIHNlcXVlbmNlIG51bWJlciBzdG9yZWRcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoyMjk6aW4gYGByYW5nZWBgIGJ5IGBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgLlxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTIzMC1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yMzE9SG9sZGluZyB0aGUgbW1hcCBsb2NrIGFjcm9zcyBITU0gZmF1bHRzXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTIzMy1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoyMzQ6TW9zdCBjYWxsZXJzIHNob3VsZCB1c2UgYGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpYGAuIElmIGEgZHJpdmVyXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjM1LXJlYWxseSBuZWVkcyB0byBob2xkIHRoZSBtbWFwIGxvY2sgYWNyb3NzIHdvcmsgb3V0c2lkZSBITU0sIGl0IGNhbiB1c2U6OlxuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yNDA9aW50ZXJmYWNlIGNhbm5vdCBzdXBwb3J0IFZNQXMgd2hvc2UgZmF1bHQgaGFuZGxlcnMgbmVlZCB0byBkcm9wIHRoZSBtbWFwIGxvY2suXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjQxOk5ldyBjYWxsZXJzIHNob3VsZCBwcmVmZXIgYGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpYGAgdW5sZXNzIHRoZXlcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yNDItaGF2ZSBhIHNwZWNpZmljIHJlcXVpcmVtZW50IHRvIGtlZXAgdGhlIG1tYXAgbG9jayBoZWxkIGFjcm9zcyB0aGUgY2FsbC5cbi0tXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYz0xMDMxPXN0YXRpYyBpbnQgYWllMl9wb3B1bGF0ZV9yYW5nZShzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICphYm8pXG4tLVxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfY3R4LmMtMTA2NC1cbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jOjEwNjU6XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZtYXBwLVx1MDAzZXJhbmdlLCB0aW1lb3V0KTtcbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jLTEwNjYtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM9ODQxPWVudW0gZHJtX2dwdXN2bV9zY2FuX3Jlc3VsdCBkcm1fZ3B1c3ZtX3NjYW5fbW0oc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODY4LXJldHJ5OlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4Njk6XHRlcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZobW1fcmFuZ2UsIHRpbWVvdXQpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NzAtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM9MTQ0ND1pbnQgZHJtX2dwdXN2bV9nZXRfcGFnZXMoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE0OTEtXHRobW1fcmFuZ2UuaG1tX3BmbnMgPSBwZm5zO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNDkyOlx0ZXJyID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2aG1tX3JhbmdlLCB0aW1lb3V0KTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTQ5My1cdG1tcHV0KG1tKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jPTE3MDM9aW50IGRybV9ncHVzdm1fcmFuZ2VfZXZpY3Qoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE3MjgtXHRobW1fcmFuZ2UuaG1tX3BmbnMgPSBwZm5zO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNzI5Olx0ZXJyID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2aG1tX3JhbmdlLCB0aW1lb3V0KTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTczMC1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jPTY1Mj1zdGF0aWMgaW50IG5vdXZlYXVfcmFuZ2VfZmF1bHQoc3RydWN0IG5vdXZlYXVfc3ZtbSAqc3ZtbSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jLTY5My1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmM6Njk0Olx0XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZyYW5nZSwgcmVtYWluaW5nKTtcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmMtNjk1LVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmM9Mzk2PXN0YXRpYyBpbnQgbXNodl9yZWdpb25fcmFuZ2VfZmF1bHQoc3RydWN0IG1zaHZfbWVtX3JlZ2lvbiAqcmVnaW9uLFxuLS1cbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmMtNDE1LWFnYWluOlxuZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYzo0MTY6XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZyYW5nZSwgMCk7XG5kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jLTQxNy1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYz0zMjQ9aW50IGliX3VtZW1fb2RwX21hcF9kbWFfYW5kX2xvY2soc3RydWN0IGliX3VtZW1fb2RwICp1bWVtX29kcCwgdTY0IHVzZXJfdmlydCxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jLTM2OC1yZXRyeTpcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmM6MzY5Olx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2cmFuZ2UsIHRpbWVvdXQpO1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYy0zNzAtXHRpZiAodW5saWtlbHkocmV0KSlcbi0tXG5pbmNsdWRlL2xpbnV4L2htbS5oPTEyNT1pbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKTtcbmluY2x1ZGUvbGludXgvaG1tLmg6MTI2OmludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSxcbmluY2x1ZGUvbGludXgvaG1tLmgtMTI3LVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpO1xuLS1cbmxpYi90ZXN0X2htbS5jPTM5Mj1zdGF0aWMgaW50IGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXG4tLVxubGliL3Rlc3RfaG1tLmMtMzk4LVx0d2hpbGUgKHRydWUpIHtcbmxpYi90ZXN0X2htbS5jOjM5OTpcdFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQocmFuZ2UsIHRpbWVvdXQpO1xubGliL3Rlc3RfaG1tLmMtNDAwLVx0XHRpZiAocmV0KVxuLS1cbm1tL2htbS5jPTY4OT1zdGF0aWMgaW50IGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsIGJvb2wgKmxvY2tlZClcbi0tXG5tbS9obW0uYy03NTMtICogVGhlIG1tYXAgbG9jayBtdXN0IGJlIGhlbGQgYnkgdGhlIGNhbGxlciBhbmQgd2lsbCByZW1haW4gaGVsZCBvbiByZXR1cm4uXG5tbS9obW0uYzo3NTQ6ICogTmV3IHVzZXJzIHNob3VsZCBwcmVmZXIgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKSB1bmxlc3MgdGhleVxubW0vaG1tLmMtNzU1LSAqIHNwZWNpZmljYWxseSBuZWVkIHRvIGtlZXAgdGhlIG1tYXAgbG9jayBoZWxkIGFjcm9zcyB0aGUgY2FsbC4gVGhpcyBoZWxwZXJcbi0tXG5tbS9obW0uYz03NjI9RVhQT1JUX1NZTUJPTChobW1fcmFuZ2VfZmF1bHQpO1xuLS1cbm1tL2htbS5jLTc2NC0vKipcbm1tL2htbS5jOjc2NTogKiBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCAtIGZhdWx0IGluIGEgcmFuZ2Ugd2l0aCBhIHJldHJ5IHRpbWVvdXRcbm1tL2htbS5jLTc2Ni0gKiBAcmFuZ2U6XHRhcmd1bWVudCBzdHJ1Y3R1cmVcbi0tXG5tbS9obW0uYy03ODMtICovXG5tbS9obW0uYzo3ODQ6aW50IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLFxubW0vaG1tLmMtNzg1LVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpXG4tLVxubW0vaG1tLmMtODI0LX1cbm1tL2htbS5jOjgyNTpFWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KTtcbm1tL2htbS5jLTgyNi1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz0yOTA0PVRFU1RfRl9USU1FT1VUKGhtbSwgYmVuY2htYXJrX3RocF9taWdyYXRpb24sIDEyMClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yOTYwLSAqIFRlc3QgdGhhdCBITU0gY2FuIGZhdWx0IGluIHBhZ2VzIGJhY2tlZCBieSB1c2VyZmF1bHRmZCB1c2luZyB0aGVcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjI5NjE6ICogaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKSBwYXRoIHdpdGggbm8gdGltZW91dC4gVGhpcyBleGVyY2lzZXNcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTI5NjItICogdGhlIGxvY2stZHJvcCByZXRyeSBsb2dpYyBpbiB0aGUgSE1NIGZyYW1ld29yay5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2MDcKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAgaW4gSW5maW5pYmFuZCYjMzk7cyBPRFAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgaGl0IGEgcG9pbnQgd2hlcmUgSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgSW5maW5pYmFuZCBjb2RlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBob3cgdGhlIE9EUCAoT24gRGVtYW5kIFBhZ2luZykgZnVuY3Rpb25hbGl0eSBpcyBpbXBsZW1lbnRlZC4gTXkgaW5pdGlhbCBjb25jZXJuIHN0ZW1tZWQgZnJvbSBzZWVpbmcgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCB1c2VkIGluIGBkcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jYC4gVGhpcyBmdW5jdGlvbiBuYW1lIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIEl0IHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbWVtb3J5IGZhdWx0cyBvciBwYWdlIGZhdWx0cyB3aXRoaW4gdGhlIHVzZXIgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgT0RQLiBUaGUgJiMzNDt1bmxvY2tlZCYjMzQ7IHBhcnQgbWVhbnMgdGhpcyBwcm9iYWJseSBoYXBwZW5zIHdpdGhvdXQgYSBsb2NrIGhlbGQsIHdoaWNoIGlzIHNpZ25pZmljYW50IGZyb20gYSBjb25jdXJyZW5jeSBhbmQgcGVyZm9ybWFuY2UgcGVyc3BlY3RpdmUuIEdpdmVuIG15IGV4cGVydGlzZSBpbiB0aGlzIGRvbWFpbiwgbXkgbmV4dCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgY29kZSBpbiBgZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuY2AgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgbWVjaGFuaWNzIG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHNjZW5hcmlvcyBsZWFkIHRvIHRoaXMgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIHJlZ2FyZGluZyBlcnJvciBoYW5kbGluZywgcGVyZm9ybWFuY2UgYW5kIHJhY2UgY29uZGl0aW9ucyB3aXRoaW4gdGhlIE9EUCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIHBvdGVudGlhbCB0aW1lb3V0IHNpdHVhdGlvbnMgaW4gcmVsYXRpb24gdG8gdGhlIG1lbW9yeSBmYXVsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzUwOlx0XHRcdGdvdG8gb3V0X3B1dF90YXNrO1xuIDM1MTpcdFx0fVxuIDM1MjpcdFxuIDM1MzpcdFx0cmFuZ2Uubm90aWZpZXIgPSBcdTAwMjZ1bWVtX29kcC1cdTAwM2Vub3RpZmllcjtcbiAzNTQ6XHRcdHJhbmdlLnN0YXJ0ID0gQUxJR05fRE9XTih1c2VyX3ZpcnQsIDFVTCBcdTAwM2NcdTAwM2MgcGFnZV9zaGlmdCk7XG4gMzU1Olx0XHRyYW5nZS5lbmQgPSBBTElHTih1c2VyX3ZpcnQgJiM0MzsgYmNudCwgMVVMIFx1MDAzY1x1MDAzYyBwYWdlX3NoaWZ0KTtcbiAzNTY6XHRcdHBmbl9zdGFydF9pZHggPSAocmFuZ2Uuc3RhcnQgLSBpYl91bWVtX3N0YXJ0KHVtZW1fb2RwKSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gMzU3Olx0XHRudW1fcGZucyA9IChyYW5nZS5lbmQgLSByYW5nZS5zdGFydCkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gMzU4Olx0XHRpZiAoZmF1bHQpIHtcbiAzNTk6XHRcdFx0cmFuZ2UuZGVmYXVsdF9mbGFncyA9IEhNTV9QRk5fUkVRX0ZBVUxUO1xuIDM2MDpcdFxuIDM2MTpcdFx0XHRpZiAoYWNjZXNzX21hc2sgXHUwMDI2IEhNTV9QRk5fV1JJVEUpXG4gMzYyOlx0XHRcdFx0cmFuZ2UuZGVmYXVsdF9mbGFncyB8PSBITU1fUEZOX1JFUV9XUklURTtcbiAzNjM6XHRcdH1cbiAzNjQ6XHRcbiAzNjU6XHRcdHJhbmdlLmhtbV9wZm5zID0gXHUwMDI2KHVtZW1fb2RwLVx1MDAzZW1hcC5wZm5fbGlzdFtwZm5fc3RhcnRfaWR4XSk7XG4gMzY2Olx0XHR0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbiAzNjc6XHRcbiAzNjg6XHRyZXRyeTpcbiAzNjk6XHRcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNnJhbmdlLCB0aW1lb3V0KTtcbiAzNzA6XHRcdGlmICh1bmxpa2VseShyZXQpKVxuIDM3MTpcdFx0XHRnb3RvIG91dF9wdXRfbW07XG4gMzcyOlx0XG4gMzczOlx0XHRzdGFydF9pZHggPSAocmFuZ2Uuc3RhcnQgLSBpYl91bWVtX3N0YXJ0KHVtZW1fb2RwKSkgXHUwMDNlXHUwMDNlIHBhZ2Vfc2hpZnQ7XG4gMzc0Olx0XHRkbWFfaW5kZXggPSBzdGFydF9pZHg7XG4gMzc1Olx0XG4gMzc2Olx0XHRtdXRleF9sb2NrKFx1MDAyNnVtZW1fb2RwLVx1MDAzZXVtZW1fbXV0ZXgpO1xuIDM3NzpcdFx0aWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KFx1MDAyNnVtZW1fb2RwLVx1MDAzZW5vdGlmaWVyLCByYW5nZS5ub3RpZmllcl9zZXEpKSB7XG4gMzc4Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZ1bWVtX29kcC1cdTAwM2V1bWVtX211dGV4KTtcbiAzNzk6XHRcdFx0Z290byByZXRyeTtcbiAzODA6XHRcdH1cbiAzODE6XHRcbiAzODI6XHRcdGZvciAocGZuX2luZGV4ID0gMDsgcGZuX2luZGV4IFx1MDAzYyBudW1fcGZucztcbiAzODM6XHRcdFx0cGZuX2luZGV4ICYjNDM7PSAxIFx1MDAzY1x1MDAzYyAocGFnZV9zaGlmdCAtIFBBR0VfU0hJRlQpLCBkbWFfaW5kZXgmIzQzOyYjNDM7KSB7XG4gMzg0Olx0XG4gMzg1Olx0XHRcdC8qXG4gMzg2Olx0XHRcdCAqIFNpbmNlIHdlIGFza2VkIGZvciBobW1fcmFuZ2VfZmF1bHQoKSB0byBwb3B1bGF0ZVxuIDM4NzpcdFx0XHQgKiBwYWdlcyBpdCBzaG91bGRuJiMzOTt0IHJldHVybiBhbiBlcnJvciBlbnRyeSBvbiBzdWNjZXNzLlxuIDM4ODpcdFx0XHQgKi9cbiAzODk6XHRcdFx0V0FSTl9PTihmYXVsdCBcdTAwMjZcdTAwMjYgcmFuZ2UuaG1tX3BmbnNbcGZuX2luZGV4XSBcdTAwMjYgSE1NX1BGTl9FUlJPUik7XG4gMzkwOlx0XHRcdFdBUk5fT04oZmF1bHQgXHUwMDI2XHUwMDI2ICEocmFuZ2UuaG1tX3BmbnNbcGZuX2luZGV4XSBcdTAwMjYgSE1NX1BGTl9WQUxJRCkpO1xuIDM5MTpcdFx0XHRpZiAoIShyYW5nZS5obW1fcGZuc1twZm5faW5kZXhdIFx1MDAyNiBITU1fUEZOX1ZBTElEKSlcbiAzOTI6XHRcdFx0XHRjb250aW51ZTtcbiAzOTM6XHRcbiAzOTQ6XHRcdFx0aWYgKHJhbmdlLmhtbV9wZm5zW3Bmbl9pbmRleF0gXHUwMDI2IEhNTV9QRk5fRE1BX01BUFBFRClcbiAzOTU6XHRcdFx0XHRjb250aW51ZTtcbiAzOTY6XHRcbiAzOTc6XHRcdFx0aG1tX29yZGVyID0gaG1tX3Bmbl90b19tYXBfb3JkZXIocmFuZ2UuaG1tX3BmbnNbcGZuX2luZGV4XSk7XG4gMzk4Olx0XHRcdC8qIElmIGEgaHVnZXBhZ2Ugd2FzIGRldGVjdGVkIGFuZCBPRFAgd2FzbiYjMzk7dCBzZXQgZm9yLCB0aGUgdW1lbVxuIDM5OTpcdFx0XHQgKiBwYWdlX3NoaWZ0IHdpbGwgYmUgdXNlZCwgdGhlIG9wcG9zaXRlIGNhc2UgaXMgYW4gZXJyb3IuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3OTIwCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVGltZW91dCBQYXRjaCBhbmQgUmVhY2hhYmlsaXR5IGluIFN5emthbGxlcioqCgpPa2F5LCBzbyB0aGUgcGF0Y2ggaXMgYWJvdXQgZW5zdXJpbmcgY29uc2lzdGVudCB0aW1lb3V0IGhhbmRsaW5nIHVzaW5nIGBtc2Vjc190b19qaWZmaWVzYCBhY3Jvc3Mgc2V2ZXJhbCBkcml2ZXJzLCBhbmQgSSBzZWUgdGhhdCBgZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuY2AgYWxyZWFkeSBpbXBsZW1lbnRzIHRoaXMgY29ycmVjdGx5LiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpcyBjb3JyZWN0aW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBgYWllMl9jdHguY2AsIGBkcm1fZ3B1c3ZtLmNgLCBhbmQgYG5vdXZlYXVfc3ZtLmNgIHRvIG1hdGNoLiAKClRoZSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHF1aWNrbHkgYXNzZXNzIGB1bWVtX29kcC5jYCBhcyBhbiBlbnRyeSBwb2ludCBzaW5jZSB0aGF0IGxpdmVzIGluIHRoZSBJbmZpbmliYW5kIHN1YnN5c3RlbSB3aGljaCAqaXMqIGtub3duIHRvIGJlIHJlYWNoYWJsZSB0aHJvdWdoIGByZG1hYCBpbiBzeXprYWxsZXIuIEhvd2V2ZXIsIHNpbmNlIHRoZSBwYXRjaCBkb2VzICpub3QqIG1vZGlmeSBgdW1lbV9vZHAuY2AsIHRoYXQmIzM5O3Mgbm90IHRoZSByZWxldmFudCBlbnRyeSBwb2ludCBoZXJlLgoKVGhlIHJlYWwgcXVlc3Rpb24gYmVjb21lczogYXJlIHRoZSBhZmZlY3RlZCBkcml2ZXJzIOKAkyBgYWllMl9jdHguY2AsIGBkcm1fZ3B1c3ZtLmNgLCBhbmQgYG5vdXZlYXVfc3ZtLmNgIOKAkyByZWFjaGFibGUgaW4gc3l6a2FsbGVyPyBMZXQmIzM5O3MgYnJlYWsgdGhlbSBkb3duOgoKKiAgIGBhaWUyX2N0eC5jYDogYGRyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jYCDigJMgVGhpcyByZXF1aXJlcyBBTUQgWEROQSBoYXJkd2FyZS4KKiAgIGBkcm1fZ3B1c3ZtLmNgOiBgZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY2Ag4oCTIFRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZyBzaW5jZSB0aGlzIHVzZXMgdGhlIGBDT05GSUdfRFJNX0dQVVNWTWAgd2hpY2ggaXMgc2VsZWN0ZWQgYnkgYERSTV9YRWAuCiogICBgbm91dmVhdV9zdm0uY2A6IGBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jYCDigJMgVGhpcyByZXF1aXJlcyBOVklESUEgaGFyZHdhcmUuCgpOb3csIGNoZWNraW5nIHRoZSBjb25maWcsIGBkcm1fZ3B1c3ZtLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19EUk1fR1BVU1ZNYCBpcyBlbmFibGVkIGFuZCBpcyBzZWxlY3RlZCBieSBgRFJNX1hFYC4gVGhlIGBEUk1fWEVgIGNvbmZpZyByZXF1aXJlcyBQQ0kgaGFyZHdhcmUgd2hpY2ggaXMsIGFzIGV4cGVjdGVkLCB0aGUgSW50ZWwgWGUgaGFyZHdhcmUuIEJ1dCBzeXprYWxsZXIgZG9lc24mIzM5O3QgaGF2ZSBJbnRlbCBYZSBoYXJkd2FyZSBpbiBpdHMgVk1zLiBUaGUgc2FtZSBhcHBsaWVzIGZvciBOb3V2ZWF1IChOVklESUEpIGFuZCBBTUQgWEROQSBoYXJkd2FyZS4KClNvLCBpdCBkb2VzbiYjMzk7dCBsb29rIGxpa2Ugd2UmIzM5O3JlIGRpcmVjdGx5IHJlYWNoaW5nIGBkcm1fZ3B1c3ZtLmNgIChhbmQgdGh1cyB0aGUgZml4KSB0aHJvdWdoIGhhcmR3YXJlLWRlcGVuZGVudCBjb25maWd1cmF0aW9ucy4gSG93ZXZlciwgd2FpdCBhIG1pbnV0ZSwgYGRybV9ncHVzdm0uY2AgaXMgYSBnZW5lcmljIGhlbHBlci4gSXMgaXQgdXNlZCBieSBhbnl0aGluZyBlbHNlPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBDT05GSUdfRFJNX0dQVVNWTWAgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBvdGhlciByb3V0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IERSTV9HUFVTVk0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWc9Mj1jb25maWcgRFJNX1hFXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWctNDEtXHRzZWxlY3QgRFJNX0VYRUNcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnOjQyOlx0c2VsZWN0IERSTV9HUFVTVk0gaWYgIVVNTFxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWctNDMtXHRzZWxlY3QgRFJNX0dQVVZNXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWc9Nzk9Y29uZmlnIERSTV9YRV9HUFVTVk1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZy04NS1cdHNlbGVjdCBERVZJQ0VfUFJJVkFURVxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWc6ODY6XHRzZWxlY3QgRFJNX0dQVVNWTVxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWctODctXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MTgyCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIERSTV9YRSBhbmQgRFJNX0dQVVNWTSBSZWxhdGlvbnNoaXAqKgoKUmlnaHQsIGxldCBtZSBzZWUuLi4gSXQgbG9va3MgbGlrZSBvbmx5IGBEUk1fWEVgIGlzIGN1cnJlbnRseSBsZXZlcmFnaW5nIGBEUk1fR1BVU1ZNYC4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4gTm93LCBhIGNydWNpYWwgcXVlc3Rpb24gYXJpc2VzOiBjYW4gYERSTV9YRWAgYmUgYWNjZXNzZWQgb3IgdGVzdGVkIHdpdGhvdXQgYWN0dWFsIGhhcmR3YXJlIHByZXNlbnQ/IFRoaXMgaXMgaW1wb3J0YW50IGZvciBkZXZlbG9wbWVudCBhbmQgQ0kuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIGEgbW9jayBvciB2aXJ0dWFsIGRldmljZSBpbXBsZW1lbnRhdGlvbiBhc3NvY2lhdGVkIHdpdGggYERSTV9YRWAuIElmIHRoZXJlIGlzLCB0aGF0IG9wZW5zIHVwIGEgd2hvbGUgcmFuZ2Ugb2YgcG9zc2liaWxpdGllcyBmb3IgZWZmaWNpZW50IHRlc3RpbmcgYW5kIGRlYnVnZ2luZyBpbiBlbnZpcm9ubWVudHMgd2hlcmUgcGh5c2ljYWwgaGFyZHdhcmUgbWlnaHQgbm90IGJlIHJlYWRpbHkgYXZhaWxhYmxlIG9yIGNvbnZlbmllbnQuIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCBzZWUgaWYgd2UgY2FuIGZpbmQgdGhvc2UgY29tcG9uZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZV9tb2NrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0MzIKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBIYXJkd2FyZSBFbXVsYXRpb24gZm9yIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gYXBwcm9hY2ggdGhpcyBwYXRjaC4gRmlyc3QsIEkmIzM5O20gdGhpbmtpbmcsIGNhbiBJIHRyaWdnZXIgdGhpcyBgRFJNX1hFYCBiZWhhdmlvciB0aHJvdWdoIGEgdmlydHVhbCBQQ0kgZGV2aWNlPyBObyBkaWNlLCBzeXprYWxsZXIgZG9lc24mIzM5O3QgZW11bGF0ZSB0aG9zZSBJbnRlbCBYZSBHUFVzLiBBbHJpZ2h0LCBzdHJpa2UgdGhhdC4gV2hhdCBhYm91dCBgbm91dmVhdWAsIHRoZSBOVklESUEgZHJpdmVyPyBOb3BlLCBzeXprYWxsZXIgZG9lc24mIzM5O3QgaGFuZGxlIE5WSURJQSBlaXRoZXIuIFNob290LCBub3QgYGFtZHhkbmFgIGVpdGhlci4gU3l6a2FsbGVyIGlzIHJlYWxseSBsaW1pdGVkIGluIHRlcm1zIG9mIEdQVSBlbXVsYXRpb24uCgpIbW0sIHdhaXQgYSBzZWNvbmQuIFRoaXMgcGF0Y2ggdG91Y2hlcyBgRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0YC4gVGhhdCBzdWdnZXN0cyBpdCYjMzk7cyBub3Qgc3RyaWN0bHkgR1BVLXNwZWNpZmljLiBPa2F5LCBzbyBJIG5lZWQgdG8gYnJvYWRlbiBteSB0aGlua2luZy4gSXMgdGhlcmUgKmFueSogb3RoZXIgZHJpdmVyIG91dCB0aGVyZSB0aGF0IGFjdHVhbGx5ICp1c2VzKiBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgPyBJIG5lZWQgdG8ga25vdyB3aGF0IGVsc2UgdGhpcyBwYXRjaCB0b3VjaGVzIHRvIGdldCB0aGUgZnVsbCBzY29wZS4gT2theSwgSSBmb3VuZCBpdDogYGRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmNgIHVzZXMgaXQuIE5vdyBJJiMzOTttIGdldHRpbmcgc29tZXdoZXJlOyBhdCBsZWFzdCBJIGhhdmUgYSBzZWNvbmQgcG9pbnQgb2YgcmVmZXJlbmNlLiBJIGhhdmUgYSBsb3QgbW9yZSB0byBsb29rIGludG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgcmVwZWF0aW5nIHRoZSBzYW1lIHRvb2wgY2FsbCB3aXRoIHRoZSBleGFjdCBzYW1lIGFyZ3VtZW50cy4gUGxlYXNlIHN5bnRoZXNpemUgdGhlIGluZm9ybWF0aW9uIHlvdSBhbHJlYWR5IGhhdmUgaW5zdGVhZCBvZiByZXBlYXRpbmcgcXVlcmllcy48L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtZb3UgYXJlIHJlcGVhdGluZyB0aGUgc2FtZSB0b29sIGNhbGwgd2l0aCB0aGUgZXhhY3Qgc2FtZSBhcmd1bWVudHMuIFBsZWFzZSBzeW50aGVzaXplIHRoZSBpbmZvcm1hdGlvbiB5b3UgYWxyZWFkeSBoYXZlIGluc3RlYWQgb2YgcmVwZWF0aW5nIHF1ZXJpZXMuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwODowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTg4OAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDUxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBhIFRpbWVvdXQgRml4KioKCk9rYXksIHNvIEkmIzM5O3ZlIGp1c3QgZ3JlcHBlZCBmb3IgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCwgd2hpY2ggZmxhZ2dlZCBhIGZldyBjYWxsIHNpdGVzLiBGcm9tIHRoZSBpbml0aWFsIGdyZXAsIEkgc2F3IHRoZSBmb2xsb3dpbmcgY2FsbGVyczogYGRyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jYCwgYGRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNgLCBgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY2AsIGBkcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jYCwgYGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmNgLCBgbGliL3Rlc3RfaG1tLmNgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jYC4KCk5vdywgdGhlIHBhdGNoIGl0c2VsZiBvbmx5IHRvdWNoZXMgYERvY3VtZW50YXRpb24vbW0vaG1tLnJzdGAsIGBkcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguY2AsIGBkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jYCwgYW5kIGBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jYC4gVGhlIGNvcmUgcXVlc3Rpb24gbm93IGlzLCBhcmUgdGhlc2UgbW9kaWZpZWQgcGF0aHMgcmVhY2hhYmxlIHdpdGhpbiBhIHR5cGljYWwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVSwgd2hpY2ggc3l6a2FsbGVyIHByaW1hcmlseSB1c2VzPwoKQ29uc2lkZXJpbmcgdGhlIGRldmljZXMgdGhlc2UgZHJpdmVycyB0YXJnZXQgLSBBTUQgWEROQSwgSW50ZWwgWGUsIGFuZCBOVklESUEg4oCTIGFuZCB0aGUgZmFjdCB0aGF0IFN5emthbGxlciBsYWNrcyBlbXVsYXRpb24gZm9yIHRoZXNlIHNwZWNpZmljIGhhcmR3YXJlIGNvbXBvbmVudHMsIGl0IGxvb2tzIHVubGlrZWx5LiBMZXQmIzM5O3MgZGVsdmUgZGVlcGVyLgoKYGRybV9ncHVzdm0uY2AgaXMgb25seSBzZWxlY3RlZCBieSBgRFJNX1hFYC4gVGhlIG90aGVycyBhcmUgUENJIGRyaXZlcnMuIFdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUsIGl0JiMzOTtzIGEgZGVhZCBlbmQuIFRoZXJlZm9yZSwgbm8gYG5vdXZlYXVgLCBgYW1keGRuYWAsIG9yIGBEUk1fWEVgIGFyZSByZWFjaGFibGUuIFdoYXQgYWJvdXQgdGhlIHVudG91Y2hlZCBmaWxlcz8gYG1zaHZfcmVnaW9ucy5jYCBpcyBIeXBlci1WLCBzbyBpdCYjMzk7cyBpcnJlbGV2YW50LiBgdW1lbV9vZHAuY2AgYW5kIGB0ZXN0X2htbS5jYCBhbHNvIGdvIHVudG91Y2hlZC4KClNvLCBpdCBhcHBlYXJzIHRoZSBwYXRjaCBleGNsdXNpdmVseSBtb2RpZmllcyBjb2RlIHBhdGhzIHRoYXQgYXJlIGluaGVyZW50bHkgaW5hY2Nlc3NpYmxlIGluIGNvbW1vbiB2aXJ0dWFsaXphdGlvbiBzY2VuYXJpb3MuIFdlJiMzOTtyZSBlZmZlY3RpdmVseSBsb29raW5nIGF0IGhhcmR3YXJlLWRlcGVuZGVudCBmdW5jdGlvbmFsaXR5IHRoYXQgc3l6a2FsbGVyIGxpa2VseSB3b24mIzM5O3QgdHJpZ2dlci4gSSB3aWxsIGRvdWJsZSBjaGVjayBteSBhc3N1bXB0aW9ucy4KCk9rYXksIGxldCBtZSBjb25maXJtLiBDYW4gYG5vdXZlYXVgIHBvc3NpYmx5IGJlIHByb2JlZCB3aXRob3V0IHRoZSBoYXJkd2FyZT8gSXQmIzM5O3MgYSBQQ0kgZHJpdmVyLiBXaXRob3V0IGFuIE5WSURJQSBQQ0kgZGV2aWNlIHByZXNlbnQsIHRoZSBkcml2ZXIgd29uJiMzOTt0IGJpbmQgYW5kIGl0cyBpb2N0bHMgYmVjb21lIGluYWNjZXNzaWJsZS4gU2FtZSBmb3IgdGhlIG90aGVycy4KCklzIGl0ICpwb3NzaWJsZSogdGhhdCBgZHJtX2dwdXN2bWAgaXMgdGVzdGVkIHZpYSBzb21lIG90aGVyIG1lYW5zLCBsaWtlIGEga3VuaXQgdGVzdD8gVGhhdCYjMzk7cyB3aGF0IEkgbmVlZCB0byBjaGVjayBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwODowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcm1fZ3B1c3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxNjgyIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG4uY2xhbmctZm9ybWF0PTcxPUZvckVhY2hNYWNyb3M6XG4tLVxuLmNsYW5nLWZvcm1hdC0xODItICAtICYjMzk7ZHJtX2dlbV9mb3JfZWFjaF9ncHV2bV9ib19zYWZlJiMzOTtcbi5jbGFuZy1mb3JtYXQ6MTgzOiAgLSAmIzM5O2RybV9ncHVzdm1fZm9yX2VhY2hfcmFuZ2UmIzM5O1xuLmNsYW5nLWZvcm1hdC0xODQtICAtICYjMzk7ZHJtX2dwdXZhX2Zvcl9lYWNoX29wJiMzOTtcbi0tXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdD02Nz1PdmVydmlldyBvZiBiYXNlbGluZSBkZXNpZ25cbi0tXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC02OS1cbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0OjcwOi4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC03MS0gICA6ZG9jOiBPdmVydmlld1xuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3QtNzItXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdDo3MzouLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY1xuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3QtNzQtICAgOmRvYzogTG9ja2luZ1xuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3QtNzUtXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdDo3NjouLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY1xuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3QtNzctICAgOmRvYzogUGFydGlhbCBVbm1hcHBpbmcgb2YgUmFuZ2VzXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC03OC1cbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0Ojc5Oi4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC04MC0gICA6ZG9jOiBFeGFtcGxlc1xuLS1cbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0PTkxPVBvc3NpYmxlIGZ1dHVyZSBkZXNpZ24gZmVhdHVyZXNcbi0tXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC0xMDAtKiBSYW5nZXMgd2l0aCBtaXhlZCBzeXN0ZW0gYW5kIGRldmljZSBwYWdlc1xuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3Q6MTAxOlx0KiBDYW4gYmUgYWRkZWQgaWYgcmVxdWlyZWQgdG8gZHJtX2dwdXN2bV9nZXRfcGFnZXMgZmFpcmx5IGVhc2lseS5cbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0LTEwMi0qIE11bHRpLUdQVSBzdXBwb3J0XG4tLVxuTmV4dC9tZXJnZS5sb2c9MTQ1OD1NZXJnZSBtYWRlIGJ5IHRoZSAmIzM5O29ydCYjMzk7IHN0cmF0ZWd5LlxuLS1cbk5leHQvbWVyZ2UubG9nLTE1MTItIGRyaXZlcnMvYmFzZS9hcmNoX251bWEuYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0IC1cbk5leHQvbWVyZ2UubG9nOjE1MTM6IGRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDUyICYjNDM7LVxuTmV4dC9tZXJnZS5sb2ctMTUxNC0gZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW0uYyAgICAgICAgICAgICAgfCAgIDMgJiM0MzstXG4tLVxuTmV4dC9tZXJnZS5sb2c9NTQ1Mj0kIGdpdCBtZXJnZSAtbSBNZXJnZSBicmFuY2ggJiMzOTtmb3ItbGludXgtbmV4dCYjMzk7IG9mIGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9kcm0vbWlzYy9rZXJuZWwuZ2l0IGRybS1taXNjL2Zvci1saW51eC1uZXh0XG5OZXh0L21lcmdlLmxvZzo1NDUzOkF1dG8tbWVyZ2luZyBkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jXG5OZXh0L21lcmdlLmxvZy01NDU0LUF1dG8tbWVyZ2luZyBkcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuY1xuTmV4dC9tZXJnZS5sb2c9NTQ1NT1NZXJnZSBtYWRlIGJ5IHRoZSAmIzM5O29ydCYjMzk7IHN0cmF0ZWd5LlxuTmV4dC9tZXJnZS5sb2c6NTQ1NjogZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYyAgICAgICAgICAgICAgICAgICAgICAgfCAyNDMgJiM0MzsmIzQzOyYjNDM7JiM0MzsmIzQzOyYjNDM7JiM0MzsmIzQzOyYjNDM7JiM0MzsmIzQzOyYjNDM7LS0tLS0tLS0tXG5OZXh0L21lcmdlLmxvZy01NDU3LSAuLi4vZ3B1L2RybS9ub3V2ZWF1L252a20vc3ViZGV2L2dzcC9ybS9yNTM1L2Zic3IuYyB8ICAgMSAmIzQzO1xuLS1cbk5leHQvbWVyZ2UubG9nLTU0NjgtIGRyaXZlcnMvZ3B1L2RybS94ZS94ZV91c2VycHRyLmMgICAgICAgICAgICAgICAgICAgIHwgICA1ICYjNDM7LVxuTmV4dC9tZXJnZS5sb2c6NTQ2OTogaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNjcgJiM0MzsmIzQzOyYjNDM7JiM0MzstLVxuTmV4dC9tZXJnZS5sb2ctNTQ3MC0gMTQgZmlsZXMgY2hhbmdlZCwgMzUwIGluc2VydGlvbnMoJiM0MzspLCAyMTggZGVsZXRpb25zKC0pXG4tLVxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlPTEwNz1vYmotJChDT05GSUdfRFJNX0dQVVZNKSAmIzQzOz0gZHJtX2dwdXZtLm9cbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS0xMDgtXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6MTA5OmRybV9ncHVzdm1faGVscGVyLXkgOj0gXFxcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZToxMTA6XHRkcm1fZ3B1c3ZtLm9cbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZToxMTE6ZHJtX2dwdXN2bV9oZWxwZXItJChDT05GSUdfWk9ORV9ERVZJQ0UpICYjNDM7PSBcXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlLTExMi1cdGRybV9wYWdlbWFwLm9cXFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS0xMTQtXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6MTE1Om9iai0kKENPTkZJR19EUk1fR1BVU1ZNKSAmIzQzOz0gZHJtX2dwdXN2bV9oZWxwZXIub1xuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlLTExNi1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE3LSNpbmNsdWRlIFx1MDAzY2RybS9kcm1fZGV2aWNlLmhcdTAwM2VcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTg6I2luY2x1ZGUgXHUwMDNjZHJtL2RybV9ncHVzdm0uaFx1MDAzZVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xOS0jaW5jbHVkZSBcdTAwM2Nkcm0vZHJtX3BhZ2VtYXAuaFx1MDAzZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTEtICogLSBQYWdlczpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTI6ICpcdHN0cnVjdCBkcm1fZ3B1c3ZtX3BhZ2VzIGhvbGRzIHRoZSBETUEgbWFwcGluZyBzdGF0ZSBmb3IgYSByYW5nZSBvZlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01My0gKlx0Q1BVIHZpcnR1YWwgYWRkcmVzc2VzOiB0aGUgRE1BIG1hcHBlZCBkZXZpY2UgYWRkcmVzc2VzLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTYtICpcdG1hcHBpbmdzLlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1NzogKlx0QSBkcml2ZXIgZW1iZWRzIG9uZSBvciBtb3JlIHN0cnVjdCBkcm1fZ3B1c3ZtX3BhZ2VzIGFsb25nc2lkZSBpdHNcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTg6ICpcdHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlLCBjaG9vc2luZyBvbmUgb2YgdHdvIGxheW91dHM6XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU5LSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjYwOiAqXHQxOjEgLSBvbmUgZHJtX2dwdXN2bV9wYWdlcyBwZXIgcmFuZ2UgKG9uZSBkcm1fZGV2aWNlKS4gU2ltcGxlc3RcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjEtICpcdGxheW91dDsgdG8gbWlycm9yIGEgVkEgcmFuZ2Ugb24gc2V2ZXJhbCBkZXZpY2VzIGEgZHJpdmVyIHVzZXMgYVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjQtICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NjU6ICpcdE46MSAtIG9uZSBkcm1fZ3B1c3ZtX3BhZ2VzIHBlciBkcm1fZGV2aWNlLCBhbGwgc2hhcmluZyBvbmUgcmFuZ2UgYW5kXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY2LSAqXHRub3RpZmllcjsgb25seSB0aGUgcGVyLWRldmljZSBETUEgbWFwcGluZyBkaWZmZXJzLiBUaGUgaW5zdGFuY2VzIG11c3RcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Njc6ICpcdHNpdCBpbiBjb250aWd1b3VzIG1lbW9yeSBzbyBhIHNpbmdsZSBkcm1fZ3B1c3ZtX3JhbmdlX3NldF91bm1hcHBlZCgpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY4LSAqXHRjYW4gbWFyayB0aGVtIGFsbC4gQSBkcml2ZXIgY2FuIGtlZXAgb25lIGluc3RhbmNlIGlubGluZSBmb3IgdGhlIHNpbmdsZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzQtICpcdFx0c3RydWN0IGRyaXZlcl9yYW5nZSB7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjc1OiAqXHRcdFx0c3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgYmFzZTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzYtICpcdFx0XHR1bnNpZ25lZCBpbnQgbnVtX3BhZ2VzO1x0Ly8gMTogaW5saW5lX3BhZ2VzLCBcdTAwM2UxOiBwYWdlc1tdXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTc3LSAqXHRcdFx0dW5pb24ge1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo3ODogKlx0XHRcdFx0c3RydWN0IGRybV9ncHVzdm1fcGFnZXMgaW5saW5lX3BhZ2VzO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo3OTogKlx0XHRcdFx0c3RydWN0IGRybV9ncHVzdm1fcGFnZXMgKnBhZ2VzO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04MC0gKlx0XHRcdH07XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NC0gKlx0YWxsb2NhdG9yIChlLmcuIGtjYWxsb2MobnVtX3BhZ2VzLCAuLi4pKSwgaW5pdGlhbGlzZXMgZWFjaCBlbnRyeSB3aXRoXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg1OiAqXHRkcm1fZ3B1c3ZtX2luaXRfcGFnZXMoKSwgYW5kIGZyZWVzIGVhY2ggZW50cnkgd2l0aFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4NjogKlx0ZHJtX2dwdXN2bV9mcmVlX3BhZ2VzKCkgcGx1cyB0aGUgYXJyYXkgaXRzZWxmLCBmcm9tIGl0cyByYW5nZSBmcmVlXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg3OiAqXHRjYWxsYmFjay4gRWFjaCBkcm1fZ3B1c3ZtX3BhZ2VzIGlzIG1hcHBlZCBpbmRlcGVuZGVudGx5IGJ5IHRoZWlyIG93blxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04OC0gKlx0ZHJtX2RldmljZS5cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODk6ICpcdEVhY2ggZHJtX2dwdXN2bV9wYWdlcyBtdXN0IGJlIHplcm8taW5pdGlhbGlzZWQgYW5kIGluaXRpYWxpc2VkIHdpdGhcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6OTA6ICpcdGRybV9ncHVzdm1faW5pdF9wYWdlcygpLCBjYWxsZWQgb25jZSBwZXIgZW50cnkuXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkxLSAqXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMzUtICogZXhjZXB0IGZvciB0aGUgcmVjaGVjayByYW5nZSYjMzk7cyBwYWdlcyBiZWluZyB2YWxpZFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMzY6ICogKGRybV9ncHVzdm1fcGFnZXNfdmFsaWQpIHdoZW4gdGhlIGRyaXZlciBpcyBjb21taXR0aW5nIEdQVSBiaW5kaW5ncy5cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTM3LSAqIFRoaXMgbG9jayBjb3JyZXNwb25kcyB0byB0aGUgYGBkcml2ZXItXHUwMDNldXBkYXRlYGAgbG9jayBtZW50aW9uZWQgaW5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE0My0gKiBsb2NrIHRvIHNhZmVndWFyZCBjb3JlIEdQVSBTVk0gZnVuY3Rpb24gY2FsbHMgdGhhdCBtb2RpZnkgc3RhdGUsIHN1Y2ggYXNcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTQ0OiAqIGRybV9ncHVzdm1fcmFuZ2VfZmluZF9vcl9pbnNlcnQgYW5kIGRybV9ncHVzdm1fcmFuZ2VfcmVtb3ZlLiBUaGlzIGxvY2sgaXNcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTQ1LSAqIGRlbm90ZWQgYXMgJiMzOTtkcml2ZXJfc3ZtX2xvY2smIzM5OyBpbiBjb2RlIGV4YW1wbGVzLiBGaW5lciBncmFpbmVkIGRyaXZlciBzaWRlXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE0Ni0gKiBsb2NraW5nIHNob3VsZCBhbHNvIGJlIHBvc3NpYmxlIGZvciBjb25jdXJyZW50IEdQVSBmYXVsdCBwcm9jZXNzaW5nIHdpdGhpbiBhXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE0NzogKiBzaW5nbGUgR1BVIFNWTS4gVGhlICYjMzk7ZHJpdmVyX3N2bV9sb2NrJiMzOTsgY2FuIGJlIHZpYSBkcm1fZ3B1c3ZtX2RyaXZlcl9zZXRfbG9ja1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNDgtICogdG8gYWRkIGFubm90YXRpb25zIHRvIEdQVSBTVk0uXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xODQtICpcdHN0cnVjdCBkcml2ZXJfcmFuZ2Uge1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxODU6ICpcdFx0c3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgYmFzZTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTg2OiAqXHRcdHN0cnVjdCBkcm1fZ3B1c3ZtX3BhZ2VzIHBhZ2VzO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xODctICpcdH07XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE4OC0gKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxODk6ICpcdGludCBkcml2ZXJfYmluZF9yYW5nZShzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLCBzdHJ1Y3QgZHJpdmVyX3JhbmdlICpkcmFuZ2UpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE5MC0gKlx0e1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTk0LSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE5NTogKlx0XHRkcm1fZ3B1c3ZtX25vdGlmaWVyX2xvY2soZ3B1c3ZtKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTk2OiAqXHRcdGlmIChkcm1fZ3B1c3ZtX3BhZ2VzX3ZhbGlkKGdwdXN2bSwgXHUwMDI2ZHJhbmdlLVx1MDAzZXBhZ2VzKSlcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTk3LSAqXHRcdFx0ZHJpdmVyX2NvbW1pdF9iaW5kKGdwdXN2bSwgZHJhbmdlKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE5OS0gKlx0XHRcdGVyciA9IC1FQUdBSU47XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjIwMDogKlx0XHRkcm1fZ3B1c3ZtX25vdGlmaWVyX3VubG9jayhncHVzdm0pO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMDEtICpcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTIwNC0gKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyMDU6ICpcdGludCBkcml2ZXJfZ3B1X2ZhdWx0KHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sIHVuc2lnbmVkIGxvbmcgZmF1bHRfYWRkcixcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjA2LSAqXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGdwdXZhX3N0YXJ0LCB1bnNpZ25lZCBsb25nIGdwdXZhX2VuZClcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjA3LSAqXHR7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjIwODogKlx0XHRzdHJ1Y3QgZHJtX2dwdXN2bV9jdHggY3R4ID0ge307XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTIwOS0gKlx0XHRzdHJ1Y3QgZHJpdmVyX3JhbmdlICpkcmFuZ2U7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjIxMDogKlx0XHRzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2U7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTIxMS0gKlx0XHRpbnQgZXJyO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjE3LSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjIxODogKlx0XHRyYW5nZSA9IGRybV9ncHVzdm1fcmFuZ2VfZmluZF9vcl9pbnNlcnQoZ3B1c3ZtLCBmYXVsdF9hZGRyLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMTktICpcdFx0XHRcdFx0XHRcdGdwdXZhX3N0YXJ0LCBncHV2YV9lbmQsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMzQtICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjM1OiAqXHRcdGVyciA9IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKGdwdXN2bSwgXHUwMDI2ZHJhbmdlLVx1MDAzZXBhZ2VzLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMzYtICpcdFx0XHRcdFx0ICAgZ3B1c3ZtLVx1MDAzZW1tLCBcdTAwMjZyYW5nZS1cdTAwM2Vub3RpZmllci1cdTAwM2Vub3RpZmllcixcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjM3OiAqXHRcdFx0XHRcdCAgIGRybV9ncHVzdm1fcmFuZ2Vfc3RhcnQocmFuZ2UpLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyMzg6ICpcdFx0XHRcdFx0ICAgZHJtX2dwdXN2bV9yYW5nZV9lbmQocmFuZ2UpLCBcdTAwMjZjdHgpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMzktICpcdFx0aWYgKGVyciA9PSAtRU9QTk9UU1VQUCB8fCBlcnIgPT0gLUVGQVVMVCB8fCBlcnIgPT0gLUVQRVJNKSB7XHQvLyBDUFUgbWFwcGluZ3MgY2hhbmdlZFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yNDAtICpcdFx0XHRpZiAoZXJyID09IC1FT1BOT1RTVVBQKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyNDE6ICpcdFx0XHRcdGRybV9ncHVzdm1fcmFuZ2VfZXZpY3QoZ3B1c3ZtLCByYW5nZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI0Mi0gKlx0XHRcdGdvdG8gcmV0cnk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yNTktICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjYwOiAqXHQvLyBUaGUgZHJpdmVyIG93bnMgdGhlIGRybV9ncHVzdm1fcGFnZXMgbGlmZWN5Y2xlLiBvcHMtXHUwMDNlcmFuZ2VfZnJlZSBpc1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyNjE6ICpcdC8vIHRoZSBmaW5hbCBmYWxsYmFjazogZHJtX2dwdXN2bV9mcmVlX3BhZ2VzKCkgdW5tYXBzIGFueVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yNjItICpcdC8vIGxpbmdlcmluZyBETUEgbWFwcGluZyBhbmQgYSBuby1vcCBpZiBhbHJlYWR5IHVubWFwcGVkIGFuZCBmcmVlcyB0aGVcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjYzLSAqXHQvLyBkbWFfYWRkciBhcnJheS4gVGhlIG5vcm1hbCBmbG93IGlzIHRvIERNQSB1bm1hcCBiZWZvcmVcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjY0OiAqXHQvLyBkcm1fZ3B1c3ZtX3JhbmdlX3JlbW92ZSgpIChiZWZvcmUgdGhlIHJhbmdlIGxlYXZlcyB0aGUgdHJlZSkuXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjI2NTogKlx0dm9pZCBkcml2ZXJfcmFuZ2VfZnJlZShzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI2Ni0gKlx0e1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjY5LSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjI3MDogKlx0XHRkcm1fZ3B1c3ZtX2ZyZWVfcGFnZXMocmFuZ2UtXHUwMDNlZ3B1c3ZtLCBcdTAwMjZkcmFuZ2UtXHUwMDNlcGFnZXMsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjI3MTogKlx0XHRcdFx0ICAgICAgZHJtX2dwdXN2bV9yYW5nZV9zaXplKHJhbmdlKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI3Mi0gKlx0XHRrZnJlZShkcmFuZ2UpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjc0LSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjI3NTogKlx0dm9pZCBfX2RyaXZlcl9nYXJiYWdlX2NvbGxlY3RvcihzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyNzY6ICpcdFx0XHRcdFx0c3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yNzctICpcdHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI4MS0gKlx0XHRpZiAocmFuZ2UtXHUwMDNlZmxhZ3MucGFydGlhbF91bm1hcClcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjgyOiAqXHRcdFx0ZHJtX2dwdXN2bV9yYW5nZV9ldmljdChncHVzdm0sIHJhbmdlKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjgzLSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI4NC0gKlx0XHRkcml2ZXJfdW5iaW5kX3JhbmdlKHJhbmdlKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Mjg1OiAqXHRcdC8vIFRoZSBwYWdlcyBtdXN0IGJlIERNQSB1bm1hcHBlZCBiZWZvcmUgZHJtX2dwdXN2bV9yYW5nZV9yZW1vdmUoKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yODYtICpcdFx0Ly8gLCBzbyBhIHJhbmdlIGlzIG5ldmVyIG9mZiB0aGUgTU1VIGludGVydmFsIHRyZWUgd2hpbGUgc3RpbGwgRE1BXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yODktICpcdFx0Ly8gZm9yIGRldmljZSBETUEuIFRoaXMgaXMgdGhlIG5vcm1hbCB1bm1hcCBwb2ludC5cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjkwOiAqXHRcdGRybV9ncHVzdm1fdW5tYXBfcGFnZXMoZ3B1c3ZtLCBcdTAwMjZkcmFuZ2UtXHUwMDNlcGFnZXMsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjI5MTogKlx0XHRcdFx0ICAgICAgIGRybV9ncHVzdm1fcmFuZ2Vfc2l6ZShyYW5nZSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjI5MjogKlx0XHRcdFx0ICAgICAgIFx1MDAyNihzdHJ1Y3QgZHJtX2dwdXN2bV9jdHgpeyAuaW5fbm90aWZpZXIgPSBmYWxzZSB9KTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjkzOiAqXHRcdGRybV9ncHVzdm1fcmFuZ2VfcmVtb3ZlKGdwdXN2bSwgcmFuZ2UpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yOTQtICpcdH1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjk1LSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjI5NjogKlx0dm9pZCBkcml2ZXJfZ2FyYmFnZV9jb2xsZWN0b3Ioc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSlcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjk3LSAqXHR7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zMDctICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzA4OiAqXHR2b2lkIGRyaXZlcl9pbnZhbGlkYXRpb24oc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzA5OiAqXHRcdFx0XHQgc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zMTAtICpcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlICptbXVfcmFuZ2UpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMxMS0gKlx0e1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozMTI6ICpcdFx0c3RydWN0IGRybV9ncHVzdm1fY3R4IGN0eCA9IHsgLmluX25vdGlmaWVyID0gdHJ1ZSwgfTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzEzOiAqXHRcdHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSA9IE5VTEw7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMxNC0gKlx0XHRzdHJ1Y3QgZHJpdmVyX3JhbmdlICpkcmFuZ2U7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zMTctICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzE4OiAqXHRcdGRybV9ncHVzdm1fZm9yX2VhY2hfcmFuZ2UocmFuZ2UsIG5vdGlmaWVyLCBtbXVfcmFuZ2UtXHUwMDNlc3RhcnQsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMxOS0gKlx0XHRcdFx0XHQgIG1tdV9yYW5nZS1cdTAwM2VlbmQpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMyMS0gKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozMjI6ICpcdFx0XHRkcm1fZ3B1c3ZtX3VubWFwX3BhZ2VzKGdwdXN2bSwgXHUwMDI2ZHJhbmdlLVx1MDAzZXBhZ2VzLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozMjM6ICpcdFx0XHRcdFx0ICAgICAgIGRybV9ncHVzdm1fcmFuZ2Vfc2l6ZShyYW5nZSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMyNC0gKlx0XHRcdFx0XHQgICAgICAgXHUwMDI2Y3R4KTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMyOC0gKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozMjk6ICpcdFx0XHRkcm1fZ3B1c3ZtX3JhbmdlX3NldF91bm1hcHBlZChyYW5nZSwgXHUwMDI2ZHJhbmdlLVx1MDAzZXBhZ2VzLCAxLCBtbXVfcmFuZ2UpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zMzAtICpcdFx0XHRkcml2ZXJfZ2FyYmFnZV9jb2xsZWN0b3JfYWRkKGdwdXN2bSwgcmFuZ2UpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM9MzQ4PW5wYWdlc19pbl9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM1My0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzU0OiAqIGRybV9ncHVzdm1fbm90aWZpZXJfZmluZCgpIC0gRmluZCBHUFUgU1ZNIG5vdGlmaWVyIGZyb20gR1BVIFNWTVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zNTUtICogQGdwdXN2bTogUG9pbnRlciB0byB0aGUgR1BVIFNWTSBzdHJ1Y3R1cmUuXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zNTgtICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzU5OiAqIFJldHVybjogQSBwb2ludGVyIHRvIHRoZSBkcm1fZ3B1c3ZtX25vdGlmaWVyIGlmIGZvdW5kIG9yIE5VTExcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzYwLSAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozNjE6c3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozNjI6ZHJtX2dwdXN2bV9ub3RpZmllcl9maW5kKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM2My1cdFx0XHQgdW5zaWduZWQgbG9uZyBlbmQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zNjktXHRpZiAoaXRyZWUpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjM3MDpcdFx0cmV0dXJuIGNvbnRhaW5lcl9vZihpdHJlZSwgc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIsIGl0cmVlKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzcxLVx0ZWxzZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzczLX1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Mzc0OkVYUE9SVF9TWU1CT0xfR1BMKGRybV9ncHVzdm1fbm90aWZpZXJfZmluZCk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM3NS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzc2LS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozNzc6ICogZHJtX2dwdXN2bV9yYW5nZV9maW5kKCkgLSBGaW5kIEdQVSBTVk0gcmFuZ2UgZnJvbSBHUFUgU1ZNIG5vdGlmaWVyXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM3OC0gKiBAbm90aWZpZXI6IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gbm90aWZpZXIgc3RydWN0dXJlLlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzgxLSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjM4MjogKiBSZXR1cm46IEEgcG9pbnRlciB0byB0aGUgZHJtX2dwdXN2bV9yYW5nZSBpZiBmb3VuZCBvciBOVUxMXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM4My0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Mzg0OnN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Mzg1OmRybV9ncHVzdm1fcmFuZ2VfZmluZChzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqbm90aWZpZXIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM4Ni1cdFx0ICAgICAgdW5zaWduZWQgbG9uZyBlbmQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zOTItXHRpZiAoaXRyZWUpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjM5MzpcdFx0cmV0dXJuIGNvbnRhaW5lcl9vZihpdHJlZSwgc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UsIGl0cmVlKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzk0LVx0ZWxzZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzk2LX1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Mzk3OkVYUE9SVF9TWU1CT0xfR1BMKGRybV9ncHVzdm1fcmFuZ2VfZmluZCk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM5OC1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzk5LS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0MDA6ICogZHJtX2dwdXN2bV9ub3RpZmllcl9pbnZhbGlkYXRlKCkgLSBJbnZhbGlkYXRlIGEgR1BVIFNWTSBub3RpZmllci5cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDAxLSAqIEBtbmk6IFBvaW50ZXIgdG8gdGhlIG1tdV9pbnRlcnZhbF9ub3RpZmllciBzdHJ1Y3R1cmUuXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz00MTE9c3RhdGljIGJvb2xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDEyOmRybV9ncHVzdm1fbm90aWZpZXJfaW52YWxpZGF0ZShzdHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVyICptbmksXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQxMy1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqbW11X3JhbmdlLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDE1LXtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDE2Olx0c3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyID1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDE3LVx0XHRjb250YWluZXJfb2YobW5pLCB0eXBlb2YoKm5vdGlmaWVyKSwgbm90aWZpZXIpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0MTg6XHRzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtID0gbm90aWZpZXItXHUwMDNlZ3B1c3ZtO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00MTktXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00MzEtLypcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDMyOiAqIGRybV9ncHVzdm1fbm90aWZpZXJfb3BzIC0gTU1VIGludGVydmFsIG5vdGlmaWVyIG9wZXJhdGlvbnMgZm9yIEdQVSBTVk1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDMzLSAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0MzQ6c3RhdGljIGNvbnN0IHN0cnVjdCBtbXVfaW50ZXJ2YWxfbm90aWZpZXJfb3BzIGRybV9ncHVzdm1fbm90aWZpZXJfb3BzID0ge1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0MzU6XHQuaW52YWxpZGF0ZSA9IGRybV9ncHVzdm1fbm90aWZpZXJfaW52YWxpZGF0ZSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDM2LX07XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00MzgtLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQzOTogKiBkcm1fZ3B1c3ZtX2luaXQoKSAtIEluaXRpYWxpemUgdGhlIEdQVSBTVk0uXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ0MC0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZS5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ1My0gKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0NTQ6ICogTm90ZTogSWYgb25seSB1c2luZyB0aGUgc2ltcGxlIGRybV9ncHVzdm1fcGFnZXMgQVBJIChnZXQvdW5tYXAvZnJlZSksXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ1NS0gKiB0aGVuIG9ubHkgQGdwdXN2bSBhbmQgQG5hbWUgYXJlIGV4cGVjdGVkLiBUaGUgQGRybSBkcm1fZGV2aWNlIGZvciBkbWFcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDU2OiAqIG1hcHBpbmdzIGlzIGJvdW5kIHBlci1wYWdlcyB2aWEgZHJtX2dwdXN2bV9pbml0X3BhZ2VzKCkgYmVmb3JlIHRoZSBmaXJzdFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0NTc6ICogZHJtX2dwdXN2bV9nZXRfcGFnZXMoKSBjYWxsLiBIb3dldmVyLCB0aGUgc2FtZSBiYXNlXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ1OC0gKiBAZ3B1c3ZtIGNhbiBhbHNvIGJlIHVzZWQgd2l0aCBib3RoIG1vZGVzIHRvZ2V0aGVyIGluIHdoaWNoIGNhc2UgdGhlIGZ1bGxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDU5OiAqIHNldHVwIGlzIG5lZWRlZCwgd2hlcmUgdGhlIGNvcmUgZHJtX2dwdXN2bV9wYWdlcyBBUEkgd2lsbCBzaW1wbHkgbmV2ZXIgdXNlXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ2MC0gKiB0aGUgb3RoZXIgZmllbGRzLlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDYzLSAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0NjQ6aW50IGRybV9ncHVzdm1faW5pdChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00NjUtXHRcdCAgICBjb25zdCBjaGFyICpuYW1lLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDY4LVx0XHQgICAgdW5zaWduZWQgbG9uZyBub3RpZmllcl9zaXplLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0Njk6XHRcdCAgICBjb25zdCBzdHJ1Y3QgZHJtX2dwdXN2bV9vcHMgKm9wcyxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDcwLVx0XHQgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqY2h1bmtfc2l6ZXMsIGludCBudW1fY2h1bmtzKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDc2LVx0fSBlbHNlIHtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDc3Olx0XHQvKiBObyBmdWxsIFNWTSBtb2RlLCBvbmx5IGNvcmUgZHJtX2dwdXN2bV9wYWdlcyBBUEkuICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ3OC1cdFx0aWYgKG9wcyB8fCBudW1fY2h1bmtzIHx8IG1tX3JhbmdlIHx8IG5vdGlmaWVyX3NpemUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01MDUtfVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1MDY6RVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXN2bV9pbml0KTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTA3LVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01MDgtLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjUwOTogKiB0b19kcm1fZ3B1c3ZtX25vdGlmaWVyKCkgLSByZXRyaWV2ZSB0aGUgY29udGFpbmVyIHN0cnVjdCBmb3IgYSBnaXZlbiByYnRyZWUgbm9kZVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1MTA6ICogQG5vZGU6IGEgcG9pbnRlciB0byB0aGUgcmJ0cmVlIG5vZGUgZW1iZWRkZWQgd2l0aGluIGEgZHJtX2dwdXN2bV9ub3RpZmllciBzdHJ1Y3RcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTExLSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjUxMjogKiBSZXR1cm46IEEgcG9pbnRlciB0byB0aGUgY29udGFpbmluZyBkcm1fZ3B1c3ZtX25vdGlmaWVyIHN0cnVjdHVyZS5cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTEzLSAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1MTQ6c3RhdGljIHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICp0b19kcm1fZ3B1c3ZtX25vdGlmaWVyKHN0cnVjdCByYl9ub2RlICpub2RlKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01MTUte1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1MTY6XHRyZXR1cm4gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyLCBpdHJlZS5yYik7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTUxNy19XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01MTktLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjUyMDogKiBkcm1fZ3B1c3ZtX25vdGlmaWVyX2luc2VydCgpIC0gSW5zZXJ0IEdQVSBTVk0gbm90aWZpZXJcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTIxLSAqIEBncHVzdm06IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gc3RydWN0dXJlXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01MjUtICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjUyNjpzdGF0aWMgdm9pZCBkcm1fZ3B1c3ZtX25vdGlmaWVyX2luc2VydChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1Mjc6XHRcdFx0XHQgICAgICAgc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01Mjgte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTM1LVx0aWYgKG5vZGUpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjUzNjpcdFx0aGVhZCA9IFx1MDAyNih0b19kcm1fZ3B1c3ZtX25vdGlmaWVyKG5vZGUpKS1cdTAwM2VlbnRyeTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTM3LVx0ZWxzZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTQzLS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1NDQ6ICogZHJtX2dwdXN2bV9ub3RpZmllcl9yZW1vdmUoKSAtIFJlbW92ZSBHUFUgU1ZNIG5vdGlmaWVyXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU0NS0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHRydWN0dXJlXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01NDktICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjU1MDpzdGF0aWMgdm9pZCBkcm1fZ3B1c3ZtX25vdGlmaWVyX3JlbW92ZShzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1NTE6XHRcdFx0XHQgICAgICAgc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01NTIte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTU3LS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1NTg6ICogZHJtX2dwdXN2bV9maW5pKCkgLSBGaW5hbGl6ZSB0aGUgR1BVIFNWTS5cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTU5LSAqIEBncHVzdm06IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gc3RydWN0dXJlLlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTYzLSAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1NjQ6dm9pZCBkcm1fZ3B1c3ZtX2Zpbmkoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSlcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTY1LXtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTY2Olx0c3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyLCAqbmV4dDtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTY3LVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1Njg6XHRkcm1fZ3B1c3ZtX2Zvcl9lYWNoX25vdGlmaWVyX3NhZmUobm90aWZpZXIsIG5leHQsIGdwdXN2bSwgMCwgTE9OR19NQVgpIHtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTY5Olx0XHRzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UsICpfX25leHQ7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU3MC1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU3Ni1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTc3Olx0XHRkcm1fZ3B1c3ZtX2Zvcl9lYWNoX3JhbmdlX3NhZmUocmFuZ2UsIF9fbmV4dCwgbm90aWZpZXIsIDAsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU3OC1cdFx0XHRcdFx0ICAgICAgIExPTkdfTUFYKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1Nzk6XHRcdFx0ZHJtX2dwdXN2bV9yYW5nZV9yZW1vdmUoZ3B1c3ZtLCByYW5nZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU4MC1cdH1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU4NS19XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjU4NjpFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1c3ZtX2ZpbmkpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01ODctXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU4OC0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTg5OiAqIGRybV9ncHVzdm1fbm90aWZpZXJfYWxsb2MoKSAtIEFsbG9jYXRlIEdQVSBTVk0gbm90aWZpZXJcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTkwLSAqIEBncHVzdm06IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gc3RydWN0dXJlXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01OTYtICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjU5NzpzdGF0aWMgc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1OTg6ZHJtX2dwdXN2bV9ub3RpZmllcl9hbGxvYyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLCB1bnNpZ25lZCBsb25nIGZhdWx0X2FkZHIpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU5OS17XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjYwMDpcdHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpub3RpZmllcjtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjAxLVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjIwLS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2MjE6ICogZHJtX2dwdXN2bV9ub3RpZmllcl9mcmVlKCkgLSBGcmVlIEdQVSBTVk0gbm90aWZpZXJcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjIyLSAqIEBncHVzdm06IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gc3RydWN0dXJlXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02MjYtICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjYyNzpzdGF0aWMgdm9pZCBkcm1fZ3B1c3ZtX25vdGlmaWVyX2ZyZWUoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NjI4Olx0XHRcdFx0ICAgICBzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqbm90aWZpZXIpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTYyOS17XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02MzgtLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjYzOTogKiB0b19kcm1fZ3B1c3ZtX3JhbmdlKCkgLSByZXRyaWV2ZSB0aGUgY29udGFpbmVyIHN0cnVjdCBmb3IgYSBnaXZlbiByYnRyZWUgbm9kZVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2NDA6ICogQG5vZGU6IGEgcG9pbnRlciB0byB0aGUgcmJ0cmVlIG5vZGUgZW1iZWRkZWQgd2l0aGluIGEgZHJtX2dwdXN2bV9yYW5nZSBzdHJ1Y3RcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjQxLSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjY0MjogKiBSZXR1cm46IEEgcG9pbnRlciB0byB0aGUgY29udGFpbmluZyBkcm1fZ3B1c3ZtX3JhbmdlIHN0cnVjdHVyZS5cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjQzLSAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2NDQ6c3RhdGljIHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICp0b19kcm1fZ3B1c3ZtX3JhbmdlKHN0cnVjdCByYl9ub2RlICpub2RlKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NDUte1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2NDY6XHRyZXR1cm4gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlLCBpdHJlZS5yYik7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY0Ny19XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NDktLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjY1MDogKiBkcm1fZ3B1c3ZtX3JhbmdlX2luc2VydCgpIC0gSW5zZXJ0IEdQVSBTVk0gcmFuZ2VcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjUxLSAqIEBub3RpZmllcjogUG9pbnRlciB0byB0aGUgR1BVIFNWTSBub3RpZmllciBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY1NS0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NjU2OnN0YXRpYyB2b2lkIGRybV9ncHVzdm1fcmFuZ2VfaW5zZXJ0KHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpub3RpZmllcixcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NjU3Olx0XHRcdFx0ICAgIHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSlcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjU4LXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY2MS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NjYyOlx0ZHJtX2dwdXN2bV9ub3RpZmllcl9sb2NrKG5vdGlmaWVyLVx1MDAzZWdwdXN2bSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY2My1cdGludGVydmFsX3RyZWVfaW5zZXJ0KFx1MDAyNnJhbmdlLVx1MDAzZWl0cmVlLCBcdTAwMjZub3RpZmllci1cdTAwM2Vyb290KTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY2Ni1cdGlmIChub2RlKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2Njc6XHRcdGhlYWQgPSBcdTAwMjYodG9fZHJtX2dwdXN2bV9yYW5nZShub2RlKSktXHUwMDNlZW50cnk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY2OC1cdGVsc2Vcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY3MS1cdGxpc3RfYWRkKFx1MDAyNnJhbmdlLVx1MDAzZWVudHJ5LCBoZWFkKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NjcyOlx0ZHJtX2dwdXN2bV9ub3RpZmllcl91bmxvY2sobm90aWZpZXItXHUwMDNlZ3B1c3ZtKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjczLX1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY3NS0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Njc2OiAqIF9fZHJtX2dwdXN2bV9yYW5nZV9yZW1vdmUoKSAtIFJlbW92ZSBHUFUgU1ZNIHJhbmdlXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY3Ny0gKiBAbm90aWZpZXI6IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gbm90aWZpZXIgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02ODEtICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjY4MjpzdGF0aWMgdm9pZCBfX2RybV9ncHVzdm1fcmFuZ2VfcmVtb3ZlKHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpub3RpZmllcixcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NjgzOlx0XHRcdFx0ICAgICAgc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02ODQte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjg5LS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2OTA6ICogZHJtX2dwdXN2bV9yYW5nZV9hbGxvYygpIC0gQWxsb2NhdGUgR1BVIFNWTSByYW5nZVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02OTEtICogQGdwdXN2bTogUG9pbnRlciB0byB0aGUgR1BVIFNWTSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTcwMC0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NzAxOnN0YXRpYyBzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjcwMjpkcm1fZ3B1c3ZtX3JhbmdlX2FsbG9jKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjcwMzpcdFx0ICAgICAgIHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpub3RpZmllcixcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzA0LVx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBmYXVsdF9hZGRyLCB1bnNpZ25lZCBsb25nIGNodW5rX3NpemUsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy03MDYte1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo3MDc6XHRzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2U7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTcwOC1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTcyOC0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NzI5OiAqIGRybV9ncHVzdm1faG1tX3Bmbl90b19vcmRlcigpIC0gR2V0IHRoZSBsYXJnZXN0IENQVSBtYXBwaW5nIG9yZGVyLlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy03MzAtICogQGhtbV9wZm46IFRoZSBjdXJyZW50IGhtbV9wZm4uXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy03NDEtICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjc0MjpzdGF0aWMgdW5zaWduZWQgaW50IGRybV9ncHVzdm1faG1tX3Bmbl90b19vcmRlcih1bnNpZ25lZCBsb25nIGhtbV9wZm4sXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTc0My1cdFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGhtbV9wZm5faW5kZXgsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy03NTctLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjc1ODogKiBkcm1fZ3B1c3ZtX2NoZWNrX3BhZ2VzKCkgLSBDaGVjayBwYWdlc1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy03NTktICogQGdwdXN2bTogUG9pbnRlciB0byB0aGUgR1BVIFNWTSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTc2OS0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NzcwOnN0YXRpYyBib29sIGRybV9ncHVzdm1fY2hlY2tfcGFnZXMoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NzcxOlx0XHRcdFx0ICAgc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy03NzItXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTgxNi1cdFx0fVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4MTc6XHRcdGkgJiM0Mzs9IDB4MSBcdTAwM2NcdTAwM2MgZHJtX2dwdXN2bV9obW1fcGZuX3RvX29yZGVyKHBmbnNbaV0sIGksIG5wYWdlcyk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTgxOC1cdH1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTgyNS0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODI2OiAqIGRybV9ncHVzdm1fc2Nhbl9tbSgpIC0gQ2hlY2sgdGhlIG1pZ3JhdGlvbiBzdGF0ZSBvZiBhIGRybV9ncHVzdm1fcmFuZ2VcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODI3OiAqIEByYW5nZTogUG9pbnRlciB0byB0aGUgc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgdG8gY2hlY2suXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTgyOC0gKiBAZGV2X3ByaXZhdGVfb3duZXI6IFRoZSBzdHJ1Y3QgZGV2X3ByaXZhdGVfb3duZXIgdG8gdXNlIHRvIGRldGVybWluZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODM4LSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjgzOTogKiBSZXR1cm46IFNlZSBcdTAwMjZlbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQuXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg0MC0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODQxOmVudW0gZHJtX2dwdXN2bV9zY2FuX3Jlc3VsdCBkcm1fZ3B1c3ZtX3NjYW5fbW0oc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NDItXHRcdFx0XHRcdCAgICAgICB2b2lkICpkZXZfcHJpdmF0ZV9vd25lcixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg0NS1cdHN0cnVjdCBtbXVfaW50ZXJ2YWxfbm90aWZpZXIgKm5vdGlmaWVyID0gXHUwMDI2cmFuZ2UtXHUwMDNlbm90aWZpZXItXHUwMDNlbm90aWZpZXI7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg0NjpcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBkcm1fZ3B1c3ZtX3JhbmdlX3N0YXJ0KHJhbmdlKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODQ3Olx0dW5zaWduZWQgbG9uZyBlbmQgPSBkcm1fZ3B1c3ZtX3JhbmdlX2VuZChyYW5nZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg0OC1cdHN0cnVjdCBobW1fcmFuZ2UgaG1tX3JhbmdlID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODU1LVx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODU2Olx0ZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0IHN0YXRlID0gRFJNX0dQVVNWTV9TQ0FOX1VOUE9QVUxBVEVELCBuZXdfc3RhdGU7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg1Ny1cdHVuc2lnbmVkIGxvbmcgKnBmbnM7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NzItXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg3MzpcdGRybV9ncHVzdm1fbm90aWZpZXJfbG9jayhyYW5nZS1cdTAwM2VncHVzdm0pO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NzQtXHRpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkobm90aWZpZXIsIGhtbV9yYW5nZS5ub3RpZmllcl9zZXEpKSB7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg3NTpcdFx0ZHJtX2dwdXN2bV9ub3RpZmllcl91bmxvY2socmFuZ2UtXHUwMDNlZ3B1c3ZtKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODc2LVx0XHRnb3RvIHJldHJ5O1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTE4LVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5MTk6XHRcdGkgJiM0Mzs9IDF1bCBcdTAwM2NcdTAwM2MgZHJtX2dwdXN2bV9obW1fcGZuX3RvX29yZGVyKHBmbnNbaV0sIGksIG5wYWdlcyk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkyMC1cdH1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTIxLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5MjI6XHRkcm1fZ3B1c3ZtX25vdGlmaWVyX3VubG9jayhyYW5nZS1cdTAwM2VncHVzdm0pO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05MjMtXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05MjctfVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5Mjg6RVhQT1JUX1NZTUJPTChkcm1fZ3B1c3ZtX3NjYW5fbW0pO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05MjktXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkzMC0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6OTMxOiAqIGRybV9ncHVzdm1fcmFuZ2VfY2h1bmtfc2l6ZSgpIC0gRGV0ZXJtaW5lIGNodW5rIHNpemUgZm9yIEdQVSBTVk0gcmFuZ2VcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTMyLSAqIEBncHVzdm06IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gc3RydWN0dXJlXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz05NDc9c3RhdGljIHVuc2lnbmVkIGxvbmdcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6OTQ4OmRybV9ncHVzdm1fcmFuZ2VfY2h1bmtfc2l6ZShzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5NDk6XHRcdFx0ICAgIHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpub3RpZmllcixcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTUwLVx0XHRcdCAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZhcyxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk2NS1cdFx0aWYgKHN0YXJ0IFx1MDAzZT0gdmFzLVx1MDAzZXZtX3N0YXJ0IFx1MDAyNlx1MDAyNiBlbmQgXHUwMDNjPSB2YXMtXHUwMDNldm1fZW5kIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5NjY6XHRcdCAgICBzdGFydCBcdTAwM2U9IGRybV9ncHVzdm1fbm90aWZpZXJfc3RhcnQobm90aWZpZXIpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5Njc6XHRcdCAgICBlbmQgXHUwMDNjPSBkcm1fZ3B1c3ZtX25vdGlmaWVyX2VuZChub3RpZmllcikgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk2OC1cdFx0ICAgIHN0YXJ0IFx1MDAzZT0gZ3B1dmFfc3RhcnQgXHUwMDI2XHUwMDI2IGVuZCBcdTAwM2M9IGdwdXZhX2VuZClcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk3OS1cdGlmIChlbmQgLSBzdGFydCAhPSBTWl80Sykge1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5ODA6XHRcdHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTgxLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5ODI6XHRcdHJhbmdlID0gZHJtX2dwdXN2bV9yYW5nZV9maW5kKG5vdGlmaWVyLCBzdGFydCwgZW5kKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTgzLVx0XHRpZiAocmFuZ2UpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk5NC1cdFx0ICogZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19kZXZtZW0gd2l0aCAmIzM5O21pZ3JhdGUuY3BhZ2VzICE9IG5wYWdlcyYjMzk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjk5NTpcdFx0ICogYW5kIHRoZW4gdXBvbiBkcm1fZ3B1c3ZtX2dldF9wYWdlcyBkZXZpY2UgcGFnZXMgZnJvbVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05OTYtXHRcdCAqIG90aGVyIHByb2Nlc3NlcyBhcmUgY29sbGVjdGVkICYjNDM7IGZhdWx0ZWQgaW4gd2hpY2ggY3JlYXRlcyBhbGxcbi0tXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM0NzcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqSW52ZXN0aWdhdGluZyBgZHJtX2dwdXN2bWAgVGVzdGluZyoqCgpSaWdodCwgYGRybV9ncHVzdm1gLi4uIHRoYXQmIzM5O3MgYSBoZWxwZXIgbGlicmFyeSwgaXNuJiMzOTt0IGl0PyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCBoYXMgYW55IGFzc29jaWF0ZWQgdGVzdGluZy4gIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgdG8gY2hlY2sgZm9yIEtVbml0IHRlc3RzLiBUaGUgYnVpbGQgb3V0cHV0IHdvdWxkIHVzdWFsbHkgaW5kaWNhdGUgdGhpcy4gSG1tLCBubywgSSBkb24mIzM5O3Qgc2VlIGFueXRoaW5nIGV4cGxpY2l0bHkgbWVudGlvbmluZyAmIzM0O3Rlc3QmIzM0OyBvciAmIzM0O2t1bml0JiMzNDsgaW4gdGhlIGJ1aWxkIG91dHB1dC4gT2theSwgdGhhdCYjMzk7cyBub3QgY29uY2x1c2l2ZSwgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIFNvLCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgYGRybV9ncHVzdm1gIGFjdHVhbGx5IGhhdmUgKmFueSogc2VsZnRlc3RzIG9yIEtVbml0IHRlc3RzPyBUaW1lIHRvIGV4YW1pbmUgdGhlIHNvdXJjZSBjb2RlIGl0c2VsZi4gSSYjMzk7bGwgbmVlZCB0byBnbyBkaXJlY3RseSB0byBgZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY2AgYW5kIHNlYXJjaCB0aGUgY29kZSBmb3IgYW55IG1lbnRpb25zIG9mICYjMzQ7a3VuaXQmIzM0OyBvciAmIzM0O3Rlc3QmIzM0Oy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGRlZmluaXRpdmUgYW5zd2VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwODowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t1bml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzODEyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIFRoaXMgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpc24mIzM5O3QgdG91Y2hpbmcgYW55IGNvZGUgdGhhdCYjMzk7cyBhY3R1YWxseSB0ZXN0ZWQgYnkga3VuaXQsIHdoaWNoIGlzIGEga2V5IHN0YXJ0aW5nIHBvaW50LiBJIGxvb2tlZCBhdCBgZHJtX2dwdXN2bWAsIGBhaWUyX2N0eC5jYCwgYW5kIGBub3V2ZWF1X3N2bS5jYCwgYW5kIG5vbmUgb2YgdGhlbSBhcmUgY292ZXJlZC4gVGhpcyBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnOiBpcyB0aGlzIHB1cmVseSBhIGNoYW5nZSB0byB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbGlrZSBHQ0Ugb3IgUUVNVT8gVGhhdCYjMzk7cyB3aGF0IGl0IGxvb2tzIGxpa2UsIGluaXRpYWxseS4KCkJ1dCB3YWl0LCBJIG5lZWQgdG8gYmUgcHJlY2lzZSBoZXJlLiBJcyBgZHJtX2dwdXN2bWAgKnBvdGVudGlhbGx5KiByZWFjaGFibGUgdGhyb3VnaCB0aGUgYHhlYCBkcml2ZXI/IFN5emthbGxlciBkb2VzbiYjMzk7dCBoYXZlIHRoYXQgc3BlY2lmaWMgSW50ZWwgWGUgaGFyZHdhcmUsIHNvIEkgY2FuJiMzOTt0IGltbWVkaWF0ZWx5IHJ1bGUgaXQgb3V0LiBBbmQgd2hhdCBhYm91dCBgbm91dmVhdWAgYW5kIGBhbWR4ZG5hYD8gU3l6a2FsbGVyJiMzOTtzIGhhcmR3YXJlIGxpbWl0YXRpb25zIGFyZSBkZWZpbml0ZWx5IGEgZmFjdG9yLgoKTm93LCBJIGFsbW9zdCBtaXNzZWQgc29tZXRoaW5nIOKAkyB3aGF0IGFib3V0IGBsaWIvdGVzdF9obW0uY2A/IEFoLCBubywgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IHRvdWNoIHRoYXQuIEdvb2QuIEhvd2V2ZXIsIHdhaXQsIHRoaXMgcGF0Y2ggKmRvZXMqIG1vZGlmeSB1c2FnZSBvZiBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIGluIHRob3NlIGZpbGVzIEkgbWVudGlvbmVkIGVhcmxpZXI6IGBhaWUyX2N0eC5jYCwgYGRybV9ncHVzdm0uY2AsIGFuZCBgbm91dmVhdV9zdm0uY2AuCgpPa2F5LCBkb2VzIGl0IGNoYW5nZSBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIGl0c2VsZj8gSSBkb24mIzM5O3Qgc2VlIGFueSBtb2RpZmljYXRpb25zIHRvIGBtbS9obW0uY2AgaW4gdGhlIGRpZmYsIHNvIHRoYXQmIzM5O3MgYSBuZWdhdGl2ZS4gQnV0IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uLi4gbGV0IG1lIGRvdWJsZS1jaGVjayB0aGlzIGRpZmYgYWdhaW4uIE1ha2luZyBzdXJlIEkgaGF2ZSBhbGwgdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2htbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaG1tLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaG1tLmM9Njg5PXN0YXRpYyBpbnQgaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSwgYm9vbCAqbG9ja2VkKVxuLS1cbm1tL2htbS5jLTc1My0gKiBUaGUgbW1hcCBsb2NrIG11c3QgYmUgaGVsZCBieSB0aGUgY2FsbGVyIGFuZCB3aWxsIHJlbWFpbiBoZWxkIG9uIHJldHVybi5cbm1tL2htbS5jOjc1NDogKiBOZXcgdXNlcnMgc2hvdWxkIHByZWZlciBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpIHVubGVzcyB0aGV5XG5tbS9obW0uYy03NTUtICogc3BlY2lmaWNhbGx5IG5lZWQgdG8ga2VlcCB0aGUgbW1hcCBsb2NrIGhlbGQgYWNyb3NzIHRoZSBjYWxsLiBUaGlzIGhlbHBlclxuLS1cbm1tL2htbS5jPTc2Mj1FWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV9mYXVsdCk7XG4tLVxubW0vaG1tLmMtNzY0LS8qKlxubW0vaG1tLmM6NzY1OiAqIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0IC0gZmF1bHQgaW4gYSByYW5nZSB3aXRoIGEgcmV0cnkgdGltZW91dFxubW0vaG1tLmMtNzY2LSAqIEByYW5nZTpcdGFyZ3VtZW50IHN0cnVjdHVyZVxuLS1cbm1tL2htbS5jLTc4My0gKi9cbm1tL2htbS5jOjc4NDppbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXG5tbS9obW0uYy03ODUtXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dClcbi0tXG5tbS9obW0uYy04MjQtfVxubW0vaG1tLmM6ODI1OkVYUE9SVF9TWU1CT0woaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQpO1xubW0vaG1tLmMtODI2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwODowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDc4NAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDMzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvZGUgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIHRoZSB1c2VyJiMzOTtzIHByb3ZpZGVkIGEgZGlmZiwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgY2hhbmdlZC4mIzM0OyBJIGltbWVkaWF0ZWx5IHNjYW4gdGhlIGZpbGUgcGF0aHM6IGBEb2N1bWVudGF0aW9uL21tL2htbS5yc3RgLCBgZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfY3R4LmNgLCBgZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY2AsIGFuZCBgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY2AuCgpNeSBndXQgcmVhY3Rpb24gaXMgdGhhdCB0aGlzIHByb2JhYmx5IHdvbiYjMzk7dCBiZSByZWFjaGFibGUgdmlhIHN5emthbGxlciBhcyBpcy4gQmFzZWQgb24gdGhlIGZpbGUgcGF0aHMsIG15IG1lbW9yeSBraWNrcyBpbi4gSSBrbm93IHRob3NlIHBhdGhzIHJlcXVpcmUgc3BlY2lmaWMgaGFyZHdhcmU6IEFNRCBYRE5BLCBJbnRlbCBYZSwgYW5kIE5WSURJQSBHUFVzLiBUaGVzZSBhcmUgbm90IHR5cGljYWxseSBwcmVzZW50LCBub3IgZW11bGF0ZWQsIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCB3aGljaCBhcmUgdGhlIHN5emthbGxlciBnby10byYjMzk7cy4KCkJ1dCB3YWl0IGEgbWludXRlLi4uICpkcm1fZ3B1c3ZtLmMqLi4udGhhdCBmaWxlIG5hbWUgaXMgcG9raW5nIGF0IHNvbWV0aGluZyBpbiBteSBtaW5kLiBDb3VsZCB0aGF0IG9uZSBiZSByZWFjaGFibGUgc29tZWhvdyB3aXRoIGEgbW9jayBkcml2ZXI/IEl0JiMzOTtzIHdvcnRoIGEgcXVpY2sgZG91YmxlLWNoZWNrLiBPa2F5LCBmb2N1c2luZyBiYWNrIGluLCBsZXQmIzM5O3Mgc2VlLiBMZXQgbWUgcXVpY2tseSBqb2cgbXkgbWVtb3J5IGFuZCBzZWUgaG93IHRoYXQgaXMgc2VsZWN0ZWQuIE5vcGUsIGl0IGxvb2tzIGxpa2UgYGRybV9ncHVzdm1gIGlzIG9ubHkgc2VsZWN0ZWQgYnkgYERSTV9YRWAgYW5kIGBEUk1fWEVfR1BVU1ZNYC4gU28gdGhhdCYjMzk7cyB0aGUgZW5kIG9mIHRoYXQgdGhvdWdodC4KCkFscmlnaHQsIHNvIHRoZSBjaGFuY2VzIG9mIHRoaXMgYmVpbmcgZGlyZWN0bHkgdGVzdGFibGUgc2VlbSBzbGltLiBMZXQmIzM5O3MgZGlnIGRlZXBlci4gTWF5YmUgaXQgaXMgdXNlZCBieSBzb21ldGhpbmcgZWxzZSBJIGFtIG5vdCB0aGlua2luZyBvZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IERSTV9HUFVTVk0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWc9Mj1jb25maWcgRFJNX1hFXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWctNDEtXHRzZWxlY3QgRFJNX0VYRUNcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnOjQyOlx0c2VsZWN0IERSTV9HUFVTVk0gaWYgIVVNTFxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWctNDMtXHRzZWxlY3QgRFJNX0dQVVZNXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWc9Nzk9Y29uZmlnIERSTV9YRV9HUFVTVk1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZy04NS1cdHNlbGVjdCBERVZJQ0VfUFJJVkFURVxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWc6ODY6XHRzZWxlY3QgRFJNX0dQVVNWTVxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWctODctXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NjY0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZz1mYWxzZTogVW5yZWFjaGFibGUgQ29kZSBQYXRocyBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKgoKT2theSwgc28gbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggSSYjMzk7bSByZXZpZXdpbmcgbW9kaWZpZXMgaG93IGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAgaXMgdXNlZCwgYW5kIGl0IGRvZXMgc28gd2l0aGluIHRocmVlIHNwZWNpZmljIEdQVSBkcml2ZXJzOiBgYW1keGRuYWAsIGBkcm1fZ3B1c3ZtLmNgLCBhbmQgYG5vdXZlYXVgLiBBIHF1aWNrIGxvb2sgYXQgdGhlIGNvZGUgY29uZmlybXMgdGhhdCBgZHJtX2dwdXN2bS5jYCBpcyBleGNsdXNpdmVseSB1c2VkIGJ5IHRoZSBgeGVgIGRyaXZlci4gVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCBgeGVgLCBgYW1keGRuYWAsIGFuZCBgbm91dmVhdWAgYXJlIGFsbCBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzLiBUaGV5IGFyZSBkZXNpZ25lZCB0byBpbnRlcmZhY2Ugd2l0aCBwYXJ0aWN1bGFyIEdQVXPigJRBTUQgWEROQSwgSW50ZWwgWGUsIGFuZCBOVklESUEgR1BVcywgcmVzcGVjdGl2ZWx5LiBUaGVzZSBkcml2ZXJzIGFyZSBub3QgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VIHdpdGhvdXQgaGFyZHdhcmUgcGFzc3Rocm91Z2guCgpJIG5lZWQgdG8gY29uZmlybSBpZiBgbm91dmVhdWAgY2FuIGV2ZW4gYmUgZnV6emVkLCBnaXZlbiBTeXprYWxsZXImIzM5O3MgY3VycmVudCBjb25maWd1cmF0aW9uLiBJIGtub3cgU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgTlZJRElBIEdQVXMgaW4gaXRzIHZpcnR1YWwgbWFjaGluZXMuIEkmIzM5O20gcHJldHR5IGNlcnRhaW4gdGhhdCB0aGUgYG5vdXZlYXVgIGRyaXZlciBjYW4mIzM5O3QgYmUgaW5pdGlhbGl6ZWQgd2l0aG91dCB0aGUgaGFyZHdhcmUuIEl0JiMzOTtzIGEgUENJIGRyaXZlciBhbmQgYmluZHMgdG8gTlZJRElBIFBDSSBkZXZpY2VzLiBXaXRob3V0IHRoZSBzcGVjaWZpYyBoYXJkd2FyZSwgdGhlIGRyaXZlciYjMzk7cyBgcHJvYmVgIGZ1bmN0aW9uIHdvbiYjMzk7dCBiZSBjYWxsZWQsIGFuZCB0aHVzLCBpdHMgaW9jdGxzIHdvbiYjMzk7dCBiZSByZWdpc3RlcmVkLiBUaGUgc2FtZSBsb2dpYyBhcHBsaWVzIHRvIGBhbWR4ZG5hYCBhbmQgYHhlYC4KCkdpdmVuIHRoaXMsIHRoZSBjaGFuZ2VzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCBhcmUsIGluIGVzc2VuY2UsIGRlYWQgY29kZSBpbiBvdXIgY3VycmVudCBmdXp6aW5nIHNldHVwLiBUaGV5JiMzOTtyZSBtb2RpZnlpbmcgY29kZSBwYXRocyB0aGF0IGFyZSBpbmhlcmVudGx5IHVucmVhY2hhYmxlIHdpdGhpbiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdlJiMzOTtyZSB1c2luZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGNvcnJlY3QgYWJvdXQgYGRybV9ncHVzdm0uY2AgYW5kIGl0cyByZWxhdGlvbiB0byBgdmttc2AgYW5kIGB2Z2VtYCBiZWZvcmUgSSYjMzk7bSAxMDAlIHN1cmUuIAoKVGhlcmVmb3JlLCBJIG5lZWQgdG8gZmxhZyB0aGlzIGFzIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGFuZCBwcm92aWRlIHRoZSByZWFzb25pbmc6IHRoZSBwYXRjaCBtb2RpZmllcyBjb2RlIHdpdGhpbiBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzIChgYW1keGRuYWAsIGB4ZWAgdmlhIGBkcm1fZ3B1c3ZtLmNgLCBhbmQgYG5vdXZlYXVgKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIG9yIGhhcmR3YXJlIGVtdWxhdGlvbiB3aGljaCB3ZSBkb24mIzM5O3QgaGF2ZSBhdmFpbGFibGUgaW4gR0NFL1FFTVUsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBpbXBvc3NpYmxlIHRvIGV4ZWN1dGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHJtX2dwdXN2bSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS92a21zJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY1NzgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwODowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RybV9ncHVzdm0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vdmdlbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NjI1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkNvbmZpcm1pbmcgUENJIERyaXZlciBTdGF0dXMqKgoKUmlnaHQsIHNvIEkmIzM5O20gc2VlaW5nIHRoaXMgdGhpbmcsIGFuZCB0aGUga2V5IG9ic2VydmF0aW9uIGlzIHRoYXQgaXQmIzM5O3MgKm5vdCogYmVpbmcgdXRpbGl6ZWQgYnkgdGhlIHRhcmdldCBncm91cC4gVGhhdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgaXNzdWUuCgpOb3csIEkgbmVlZCB0byBnZXQgYSBmaXJtIGdyYXNwIG9uIHRoZSB0ZWNobmljYWwgYXNwZWN0cyBiZWZvcmUgSSBjYW4gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBkcml2ZXIgaXNzdWUsIGEgY29uZmlnIGlzc3VlLCBvciBzb21lIG90aGVyIHByb2JsZW0uIExldCBtZSBxdWlja2x5IGNvbmZpcm0gdGhhdCBgYW1keGRuYWAgaXMgaW5kZWVkIGZ1bmN0aW9uaW5nIGFzIGEgUENJIGRyaXZlci4gVGhpcyBpcyBmdW5kYW1lbnRhbCBmb3IgbWUgdG8gcHJvY2VlZC4gSWYgaXQgaXNuJiMzOTt0LCB0aGVuIGV2ZXJ5dGhpbmcgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYWNjZWwvYW1keGRuYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9wY2lfZHJ2LmM9NDc1PXN0YXRpYyBpbnQgYW1keGRuYV9zcmlvdl9jb25maWd1cmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudW1fdmZzKVxuLS1cbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX3BjaV9kcnYuYy00ODUtXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9wY2lfZHJ2LmM6NDg2OnN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhbWR4ZG5hX3BjaV9kcml2ZXIgPSB7XG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9wY2lfZHJ2LmMtNDg3LVx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcbi0tXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9wY2lfZHJ2LmMtNDk0LVxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfcGNpX2Rydi5jOjQ5NTptb2R1bGVfcGNpX2RyaXZlcihhbWR4ZG5hX3BjaV9kcml2ZXIpO1xuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfcGNpX2Rydi5jLTQ5Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcwNzQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyByZXF1ZXN0ZWQ6CgoqKlBDSSBEcml2ZXIgVmVyaWZpY2F0aW9uIC0gUXVpY2sgVGhvdWdodHMqKgoKQWxyaWdodCwgeWVwLCB0aGF0IGxvb2tzIGxpa2UgYSBQQ0kgZHJpdmVyLCBubyBxdWVzdGlvbiBhYm91dCBpdC4gTm93LCBqdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrLCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IGB4ZWAgaXMgKmRlZmluaXRlbHkqIGFjdGluZyBhcyBhIFBDSSBkcml2ZXIuIEl0JiMzOTtzIGFsd2F5cyBnb29kIHByYWN0aWNlIHRvIGRvdWJsZS1jaGVjayB0aGVzZSBhc3N1bXB0aW9ucyBiZWZvcmUgbW92aW5nIGZvcndhcmQuIEkmIzM5O2xsIGp1c3QgcnVuIGEgcXVpY2sgZGlhZ25vc3RpYywgbm90aGluZyBtYWpvciwganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhlIGluaXRpYWwgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS94ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0veGUvdGVzdHMveGVfcGNpLmM9NDA1PWNvbnN0IHZvaWQgKnhlX3BjaV9saXZlX2RldmljZV9nZW5fcGFyYW0oc3RydWN0IGt1bml0ICp0ZXN0LCBjb25zdCB2b2lkICpwcmV2LCBjaGFyICpkZXNjKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS90ZXN0cy94ZV9wY2kuYy00MTAtXG5kcml2ZXJzL2dwdS9kcm0veGUvdGVzdHMveGVfcGNpLmM6NDExOlx0bmV4dCA9IGRyaXZlcl9maW5kX25leHRfZGV2aWNlKFx1MDAyNnhlX3BjaV9kcml2ZXIuZHJpdmVyLCBkZXYpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3Rlc3RzL3hlX3BjaS5jLTQxMi1cdGlmIChkZXYpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2NvbmZpZ2ZzLmM9MTAwNj1zdGF0aWMgY29uc3Qgc3RydWN0IHhlX2RldmljZV9kZXNjICp4ZV9tYXRjaF9kZXNjKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9jb25maWdmcy5jLTEwMDgtXHRzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyID0gZHJpdmVyX2ZpbmQoXCYjMzQ7eGVcJiMzNDssIFx1MDAyNnBjaV9idXNfdHlwZSk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfY29uZmlnZnMuYzoxMDA5Olx0c3RydWN0IHBjaV9kcml2ZXIgKmRydiA9IHRvX3BjaV9kcml2ZXIoZHJpdmVyKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9jb25maWdmcy5jLTEwMTAtXHRjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWRzID0gZHJ2ID8gZHJ2LVx1MDAzZWlkX3RhYmxlIDogTlVMTDtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfbW9kdWxlLmM9OTY9c3RhdGljIGNvbnN0IHN0cnVjdCBpbml0X2Z1bmNzIGluaXRfZnVuY3NbXSA9IHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfbW9kdWxlLmMtMTEyLVx0e1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX21vZHVsZS5jOjExMzpcdFx0LmluaXQgPSB4ZV9yZWdpc3Rlcl9wY2lfZHJpdmVyLFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX21vZHVsZS5jOjExNDpcdFx0LmV4aXQgPSB4ZV91bnJlZ2lzdGVyX3BjaV9kcml2ZXIsXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfbW9kdWxlLmMtMTE1LVx0fSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmM9MTQyND1zdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgeGVfcG1fb3BzID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xNDI5LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jOjE0MzA6c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHhlX3BjaV9kcml2ZXIgPSB7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmMtMTQzMS1cdC5uYW1lID0gRFJJVkVSX05BTUUsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jPTE0NDk9c3RydWN0IHhlX2RldmljZSAqeGVfcGNpX3RvX3BmX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmMtMTQ1Mi1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYzoxNDUzOlx0ZHJtID0gcGNpX2lvdl9nZXRfcGZfZHJ2ZGF0YShwZGV2LCBcdTAwMjZ4ZV9wY2lfZHJpdmVyKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xNDU0LVx0aWYgKElTX0VSUihkcm0pKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xNDU5LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jOjE0NjA6aW50IHhlX3JlZ2lzdGVyX3BjaV9kcml2ZXIodm9pZClcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xNDYxLXtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYzoxNDYyOlx0cmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoXHUwMDI2eGVfcGNpX2RyaXZlcik7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmMtMTQ2My19XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmMtMTQ2NC1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYzoxNDY1OnZvaWQgeGVfdW5yZWdpc3Rlcl9wY2lfZHJpdmVyKHZvaWQpXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmMtMTQ2Ni17XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmM6MTQ2NzpcdHBjaV91bnJlZ2lzdGVyX2RyaXZlcihcdTAwMjZ4ZV9wY2lfZHJpdmVyKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xNDY4LX1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmg9OT1zdHJ1Y3QgcGNpX2RldjtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuaC0xMC1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuaDoxMTppbnQgeGVfcmVnaXN0ZXJfcGNpX2RyaXZlcih2b2lkKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuaDoxMjp2b2lkIHhlX3VucmVnaXN0ZXJfcGNpX2RyaXZlcih2b2lkKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuaC0xMy1zdHJ1Y3QgeGVfZGV2aWNlICp4ZV9wY2lfdG9fcGZfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpX3NyaW92LmM9MTc2PXN0YXRpYyBpbnQgcGZfZGlzYWJsZV92ZnMoc3RydWN0IHhlX2RldmljZSAqeGUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaV9zcmlvdi5jLTIxMy0gKlxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaV9zcmlvdi5jOjIxNDogKiBUaGlzIGlzIHRoZSBYZSBpbXBsZW1lbnRhdGlvbiBvZiBzdHJ1Y3QgcGNpX2RyaXZlci5zcmlvdl9jb25maWd1cmUgY2FsbGJhY2suXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpX3NyaW92LmMtMjE1LSAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4NTQwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uZmlybWluZyBQQ0kgRHJpdmVyIElkZW50aXR5KioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgUENJIGRyaXZlciwgdGhhdCYjMzk7cyBjbGVhciBlbm91Z2guIE5vdywgSSB3YW50IHRvIHF1aWNrbHkgc29saWRpZnkgdGhhdCB0aGlzICpub3V2ZWF1KiBkcml2ZXIgaXMgaW5kZWVkIHRoZSBvbmUgd2UmIzM5O3JlIGxvb2tpbmcgYXQuIEdvdHRhIGJlIGNlcnRhaW4gYmVmb3JlIEkgZ28gZGVlcGVyIGRvd24gdGhhdCByYWJiaXQgaG9sZS4gSSBrbm93IHRoZSBiYXNpY3MsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSBhbGwgdGhlIHBpZWNlcyBvZiB0aGUgcHV6emxlIGJlZm9yZSBJIHN0YXJ0IHRyeWluZyB0byBwdXQgdGhlbSB0b2dldGhlci4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IHRoZSBtb2R1bGUgbmFtZSBgbm91dmVhdWAgY29ycmVzcG9uZHMgd2l0aCBhIFBDSSBkZXZpY2UgZHJpdmVyLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZS4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjaV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vbm91dmVhdSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RybS5jPTE0MjU9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIG5vdXZlYXVfcG1fb3BzID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJtLmMtMTQzNi1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJtLmM6MTQzNzpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXJcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJtLmM6MTQzODpub3V2ZWF1X2RybV9wY2lfZHJpdmVyID0ge1xuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcm0uYy0xNDM5LVx0Lm5hbWUgPSBcJiMzNDtub3V2ZWF1XCYjMzQ7LFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJtLmM9MTQ4MD1ub3V2ZWF1X2RybV9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcm0uYy0xNTA2LSNpZmRlZiBDT05GSUdfUENJXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RybS5jOjE1MDc6XHRyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKFx1MDAyNm5vdXZlYXVfZHJtX3BjaV9kcml2ZXIpO1xuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcm0uYy0xNTA4LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJtLmM9MTUxOD1ub3V2ZWF1X2RybV9leGl0KHZvaWQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcm0uYy0xNTIzLSNpZmRlZiBDT05GSUdfUENJXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RybS5jOjE1MjQ6XHRwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoXHUwMDI2bm91dmVhdV9kcm1fcGNpX2RyaXZlcik7XG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RybS5jLTE1MjUtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5MTUxCgkJCQkJCQlvdXRwdXQ6IDE3MAoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOgoKKipBbmFseXppbmcgdGhlIFBhdGNoIGFuZCBJdHMgSW1wYWN0KioKCkFscmlnaHQsIHllcCwgdGhhdCBjb25maXJtcyBpdCDigJMgdGhpcyBpcyBkZWZpbml0ZWx5IGEgUENJIGRyaXZlciB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiBBbmQgbG9va2luZyBhdCB0aGUgY29udGV4dCwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHdoZXJlIHRoZSBwcm9ibGVtIGxpZXMuIFRoZSBwYXRjaCB0b3VjaGVzIHRocmVlIGRyaXZlcnMsIGFuZCB0aGV5IGFyZSAqYWxsKiBoYXJkd2FyZS1zcGVjaWZpYyBQQ0kgZHJpdmVycy4gV2hhdCB0aGF0IG1lYW5zIGlzIHRoZXkmIzM5O3JlIGNvZGVkIHRvIGludGVyYWN0IGRpcmVjdGx5IHdpdGggdGhlIHBoeXNpY2FsIGhhcmR3YXJlIGNvbXBvbmVudHMgb24gYSBQQ0kgYnVzLiBUaGV5JiMzOTtyZSBub3QgZ2VuZXJpYywgYW5kIGNydWNpYWxseSwgdGhleSBuZWVkIHRoYXQgKnNwZWNpZmljKiBoYXJkd2FyZSB0byBmdW5jdGlvbi4KCk5vdywgY29uc2lkZXJpbmcgdGhlIGVudmlyb25tZW50IHdlJiMzOTtyZSB3b3JraW5nIHdpdGgsIHN5emthbGxlciwgaXQgYWxsIGZhbGxzIGludG8gcGxhY2UuIFN5emthbGxlciYjMzk7cyBzdHJlbmd0aCBpcyBpdHMgZnV6emluZyBjYXBhYmlsaXRpZXMgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLCB3aGljaCBpcyBwZXJmZWN0IGZvciBpc29sYXRpbmcgYnVncy4gQnV0IGJlY2F1c2UgdGhlc2UgZHJpdmVycyByZXF1aXJlICpyZWFsKiBwaHlzaWNhbCBQQ0kgaGFyZHdhcmUsIGFuZCB0aGVyZSBhcmUgbm8gZHVtbXkgb3IgdmlydHVhbCBkZXZpY2VzIHNldCB1cCB0byBtaW1pYyB0aGF0IGhhcmR3YXJlIHdpdGhpbiBzeXprYWxsZXImIzM5O3MgdmlydHVhbCBlbnZpcm9ubWVudCwgdGhlIGNvZGUgcGF0aHMgdG91Y2hlZCBieSB0aGUgcGF0Y2ggYXJlIHNpbXBseSB1bnJlYWNoYWJsZS4gV2UmIzM5O3JlIGVmZmVjdGl2ZWx5IGRlYWxpbmcgd2l0aCBkZWFkIGNvZGUgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LgoKVGhlcmVmb3JlLCBJJiMzOTttIHJlYWR5IHRvIGZvcm11bGF0ZSBteSByZXNwb25zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdXNhZ2Ugb2YgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCBpbiB0aHJlZSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzOiBBTUQgWEROQSAoYGRyaXZlcnMvYWNjZWwvYW1keGRuYWApLCBJbnRlbCBYZSAoYGRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNgLCB3aGljaCBpcyBvbmx5IHVzZWQgYnkgYHhlYCksIGFuZCBOb3V2ZWF1IChgZHJpdmVycy9ncHUvZHJtL25vdXZlYXVgKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIChBTUQgWEROQSBOUFUsIEludGVsIFhlIEdQVSwgTlZJRElBIEdQVSkgdG8gaW5pdGlhbGl6ZSBhbmQgZXhwb3NlIHRoZWlyIGludGVyZmFjZXMuIFNpbmNlIHN5emthbGxlciBvcGVyYXRlcyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKEdDRS9RRU1VKSB3aXRob3V0IHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgb3Igc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGVtLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHVzYWdlIG9mIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAgaW4gdGhyZWUgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyczogQU1EIFhETkEgKGBkcml2ZXJzL2FjY2VsL2FtZHhkbmFgKSwgSW50ZWwgWGUgKGBkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jYCwgd2hpY2ggaXMgb25seSB1c2VkIGJ5IGB4ZWApLCBhbmQgTm91dmVhdSAoYGRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1YCkuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSAoQU1EIFhETkEgTlBVLCBJbnRlbCBYZSBHUFUsIE5WSURJQSBHUFUpIHRvIGluaXRpYWxpemUgYW5kIGV4cG9zZSB0aGVpciBpbnRlcmZhY2VzLiBTaW5jZSBzeXprYWxsZXIgb3BlcmF0ZXMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChHQ0UvUUVNVSkgd2l0aG91dCB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIG9yIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhlbSwgdGhlc2UgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowMzoyMy43MDUwNjQ3NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDI1NDk2NjIyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHVzYWdlIG9mIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAgaW4gdGhyZWUgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyczogQU1EIFhETkEgKGBkcml2ZXJzL2FjY2VsL2FtZHhkbmFgKSwgSW50ZWwgWGUgKGBkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jYCwgd2hpY2ggaXMgb25seSB1c2VkIGJ5IGB4ZWApLCBhbmQgTm91dmVhdSAoYGRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1YCkuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSAoQU1EIFhETkEgTlBVLCBJbnRlbCBYZSBHUFUsIE5WSURJQSBHUFUpIHRvIGluaXRpYWxpemUgYW5kIGV4cG9zZSB0aGVpciBpbnRlcmZhY2VzLiBTaW5jZSBzeXprYWxsZXIgb3BlcmF0ZXMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChHQ0UvUUVNVSkgd2l0aG91dCB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIG9yIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhlbSwgdGhlc2UgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6ei5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjAzOjIzLjcwNTA2OTk0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzEyNTAxNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiNWYyZDhkNzkyN2Y5MjA4N2E0MzdmMDE4MmU3ZmYxYTk3ZjE1MDI4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDE1IDA4OjAzOjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdFxcbmluZGV4IDVjODhkMmNmMDgxODMzLi5mYzFiOGRjMTk4MjUwZSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3RcXG5AQCAtMjA2LDcgKzIwNiw3IEBAIFRoZSB1c2FnZSBwYXR0ZXJuIGlzOjpcXG4gICAgICAgICAgIGdvdG8gb3V0X3B1dDtcXG4gXFxuICAgICAgIHRha2VfbG9jayhkcml2ZXItXFx1MDAzZXVwZGF0ZSk7XFxuLSAgICAgIGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShcXHUwMDI2aW50ZXJ2YWxfc3ViLCByYW5nZS5ub3RpZmllcl9zZXEpKSB7XFxuKyAgICAgIGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShyYW5nZS5ub3RpZmllciwgcmFuZ2Uubm90aWZpZXJfc2VxKSkge1xcbiAgICAgICAgICAgcmVsZWFzZV9sb2NrKGRyaXZlci1cXHUwMDNldXBkYXRlKTtcXG4gICAgICAgICAgIGdvdG8gYWdhaW47XFxuICAgICAgIH1cXG5AQCAtMjI1LDcgKzIyNSw4IEBAIFRoZSB1c2FnZSBwYXR0ZXJuIGlzOjpcXG4gVGhlIGRyaXZlci1cXHUwMDNldXBkYXRlIGxvY2sgaXMgdGhlIHNhbWUgbG9jayB0aGF0IHRoZSBkcml2ZXIgdGFrZXMgaW5zaWRlIGl0c1xcbiBpbnZhbGlkYXRlKCkgY2FsbGJhY2suIFRoYXQgbG9jayBtdXN0IGJlIGhlbGQgYmVmb3JlIGNhbGxpbmdcXG4gbW11X2ludGVydmFsX3JlYWRfcmV0cnkoKSB0byBhdm9pZCBhbnkgcmFjZSB3aXRoIGEgY29uY3VycmVudCBDUFUgcGFnZSB0YWJsZVxcbi11cGRhdGUuXFxuK3VwZGF0ZS4gVGhlIHJldHJ5IGNoZWNrIG11c3QgdXNlIHRoZSBzYW1lIG5vdGlmaWVyIGFuZCBzZXF1ZW5jZSBudW1iZXIgc3RvcmVkXFxuK2luIGBgcmFuZ2VgYCBieSBgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KClgYC5cXG4gXFxuIEhvbGRpbmcgdGhlIG1tYXAgbG9jayBhY3Jvc3MgSE1NIGZhdWx0c1xcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfY3R4LmMgYi9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguY1xcbmluZGV4IDU0OGJhNDMxNTU1NGZmLi4yMWYyODE3NzUxZjllNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguY1xcbisrKyBiL2RyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jXFxuQEAgLTEwMzcsNyArMTAzNyw3IEBAIHN0YXRpYyBpbnQgYWllMl9wb3B1bGF0ZV9yYW5nZShzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICphYm8pXFxuIFxcdGJvb2wgZm91bmQ7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHR0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XFxuK1xcdHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xcbiBhZ2FpbjpcXG4gXFx0Zm91bmQgPSBmYWxzZTtcXG4gXFx0ZG93bl93cml0ZShcXHUwMDI2eGRuYS1cXHUwMDNlbm90aWZpZXJfbG9jayk7XFxuQEAgLTEwNjIsMTMgKzEwNjIsOSBAQCBzdGF0aWMgaW50IGFpZTJfcG9wdWxhdGVfcmFuZ2Uoc3RydWN0IGFtZHhkbmFfZ2VtX29iaiAqYWJvKVxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFx0fVxcbiBcXG4tXFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXFx1MDAyNm1hcHAtXFx1MDAzZXJhbmdlLFxcbi1cXHRcXHRcXHRtYXhfdChsb25nLCB0aW1lb3V0IC0gamlmZmllcywgMSkpO1xcbi1cXHRpZiAocmV0KSB7XFxuLVxcdFxcdGlmIChyZXQgPT0gLUVCVVNZKVxcbi1cXHRcXHRcXHRyZXQgPSAtRVRJTUU7XFxuK1xcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZtYXBwLVxcdTAwM2VyYW5nZSwgdGltZW91dCk7XFxuK1xcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gcHV0X21tO1xcbi1cXHR9XFxuIFxcbiBcXHRkb3duX3dyaXRlKFxcdTAwMjZ4ZG5hLVxcdTAwM2Vub3RpZmllcl9sb2NrKTtcXG4gXFx0aWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KFxcdTAwMjZtYXBwLVxcdTAwM2Vub3RpZmllciwgbWFwcC1cXHUwMDNlcmFuZ2Uubm90aWZpZXJfc2VxKSkge1xcbkBAIC0xMDg2LDcgKzEwODIsNyBAQCBzdGF0aWMgaW50IGFpZTJfcG9wdWxhdGVfcmFuZ2Uoc3RydWN0IGFtZHhkbmFfZ2VtX29iaiAqYWJvKVxcbiBwdXRfbW06XFxuIFxcdGFtZHhkbmFfdW1hcF9wdXQobWFwcCk7XFxuIFxcdG1tcHV0KG1tKTtcXG4tXFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0dXJuIHJldCA9PSAtRUJVU1kgPyAtRVRJTUUgOiByZXQ7XFxuIH1cXG4gXFxuIGludCBhaWUyX2NtZF9zdWJtaXQoc3RydWN0IGFtZHhkbmFfaHdjdHggKmh3Y3R4LCBzdHJ1Y3QgYW1keGRuYV9zY2hlZF9qb2IgKmpvYiwgdTY0ICpzZXEpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jXFxuaW5kZXggYjhmMmRkOTk4MmY1M2MuLjc2ZThhMDAyOGM3ZmM5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNcXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jXFxuQEAgLTg1Miw4ICs4NTIsNyBAQCBlbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgZHJtX2dwdXN2bV9zY2FuX21tKHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSxcXG4gXFx0XFx0LmVuZCA9IGVuZCxcXG4gXFx0XFx0LmRldl9wcml2YXRlX293bmVyID0gZGV2X3ByaXZhdGVfb3duZXIsXFxuIFxcdH07XFxuLVxcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9XFxuLVxcdFxcdGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xcbitcXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xcbiBcXHRlbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgc3RhdGUgPSBEUk1fR1BVU1ZNX1NDQU5fVU5QT1BVTEFURUQsIG5ld19zdGF0ZTtcXG4gXFx0dW5zaWduZWQgbG9uZyAqcGZucztcXG4gXFx0dW5zaWduZWQgbG9uZyBucGFnZXMgPSBucGFnZXNfaW5fcmFuZ2Uoc3RhcnQsIGVuZCk7XFxuQEAgLTg2Nyw4ICs4NjYsNyBAQCBlbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgZHJtX2dwdXN2bV9zY2FuX21tKHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSxcXG4gXFx0aG1tX3JhbmdlLmhtbV9wZm5zID0gcGZucztcXG4gXFxuIHJldHJ5Olxcbi1cXHRlcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcXHUwMDI2aG1tX3JhbmdlLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgbWF4KHRpbWVvdXQgLSBqaWZmaWVzLCAxTCkpO1xcbitcXHRlcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcXHUwMDI2aG1tX3JhbmdlLCB0aW1lb3V0KTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfZnJlZTtcXG4gXFxuQEAgLTE0NTksOCArMTQ1Nyw3IEBAIGludCBkcm1fZ3B1c3ZtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbiBcXHRcXHQuZGV2X3ByaXZhdGVfb3duZXIgPSBjdHgtXFx1MDAzZWRldmljZV9wcml2YXRlX3BhZ2Vfb3duZXIsXFxuIFxcdH07XFxuIFxcdHZvaWQgKnpkZDtcXG4tXFx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID1cXG4tXFx0XFx0amlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgaSwgajtcXG4gXFx0dW5zaWduZWQgbG9uZyBucGFnZXMgPSBucGFnZXNfaW5fcmFuZ2UocGFnZXNfc3RhcnQsIHBhZ2VzX2VuZCk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnVtX2RtYV9tYXBwZWQ7XFxuQEAgLTE0NzgsOSArMTQ3NSw2IEBAIGludCBkcm1fZ3B1c3ZtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIHJldHJ5Olxcbi1cXHRpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSlcXG4tXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tXFxuIFxcdGhtbV9yYW5nZS5ub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihub3RpZmllcik7XFxuIFxcdGlmIChkcm1fZ3B1c3ZtX3BhZ2VzX3ZhbGlkX3VubG9ja2VkKGdwdXN2bSwgc3ZtX3BhZ2VzKSlcXG4gXFx0XFx0Z290byBzZXRfc2Vxbm87XFxuQEAgLTE0OTUsOCArMTQ4OSw3IEBAIGludCBkcm1fZ3B1c3ZtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbiBcXHR9XFxuIFxcbiBcXHRobW1fcmFuZ2UuaG1tX3BmbnMgPSBwZm5zO1xcbi1cXHRlcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcXHUwMDI2aG1tX3JhbmdlLFxcbi1cXHRcXHRcXHRcXHRtYXhfdChsb25nLCB0aW1lb3V0IC0gamlmZmllcywgMSkpO1xcbitcXHRlcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcXHUwMDI2aG1tX3JhbmdlLCB0aW1lb3V0KTtcXG4gXFx0bW1wdXQobW0pO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGVycl9mcmVlO1xcbkBAIC0xNzE4LDggKzE3MTEsNyBAQCBpbnQgZHJtX2dwdXN2bV9yYW5nZV9ldmljdChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbiBcXHRcXHQuZW5kID0gZHJtX2dwdXN2bV9yYW5nZV9lbmQocmFuZ2UpLFxcbiBcXHRcXHQuZGV2X3ByaXZhdGVfb3duZXIgPSBOVUxMLFxcbiBcXHR9O1xcbi1cXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPVxcbi1cXHRcXHRqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcXG4rXFx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcXG4gXFx0dW5zaWduZWQgbG9uZyAqcGZucztcXG4gXFx0dW5zaWduZWQgbG9uZyBucGFnZXMgPSBucGFnZXNfaW5fcmFuZ2UoZHJtX2dwdXN2bV9yYW5nZV9zdGFydChyYW5nZSksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBkcm1fZ3B1c3ZtX3JhbmdlX2VuZChyYW5nZSkpO1xcbkBAIC0xNzM0LDggKzE3MjYsNyBAQCBpbnQgZHJtX2dwdXN2bV9yYW5nZV9ldmljdChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdGhtbV9yYW5nZS5obW1fcGZucyA9IHBmbnM7XFxuLVxcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZobW1fcmFuZ2UsXFxuLVxcdFxcdFxcdFxcdG1heF90KGxvbmcsIHRpbWVvdXQgLSBqaWZmaWVzLCAxKSk7XFxuK1xcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZobW1fcmFuZ2UsIHRpbWVvdXQpO1xcbiBcXG4gXFx0a3ZmcmVlKHBmbnMpO1xcbiBcXHRtbXB1dChtbSk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jXFxuaW5kZXggNGNmYjZlYjdjNzcxNWEuLjU4NzM1NDQ2ZDc4MzJjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmNcXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jXFxuQEAgLTY3OCwxNCArNjc4LDIwIEBAIHN0YXRpYyBpbnQgbm91dmVhdV9yYW5nZV9mYXVsdChzdHJ1Y3Qgbm91dmVhdV9zdm1tICpzdm1tLFxcbiBcXHRyYW5nZS5lbmQgPSBub3RpZmllci1cXHUwMDNlbm90aWZpZXIuaW50ZXJ2YWxfdHJlZS5sYXN0ICsgMTtcXG4gXFxuIFxcdHdoaWxlICh0cnVlKSB7XFxuLVxcdFxcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7XFxuK1xcdFxcdGxvbmcgcmVtYWluaW5nID0gdGltZW91dCAtIGppZmZpZXM7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBUaGUgSE1NIHRpbWVvdXQgb25seSBib3VuZHMgcmV0cmllcyB3aGlsZSBITU0gaXMgd2Fsa2luZyBhbmRcXG4rXFx0XFx0ICogZmF1bHRpbmcgdGhlIHJhbmdlLiBUaGlzIGZhdWx0IGlzIGhhbmRsZWQgYnkgYSBrZXJuZWwgd29ya2VyLFxcbitcXHRcXHQgKiBzbyBmYXRhbCBzaWduYWxzIGZyb20gdGhlIGZhdWx0aW5nIHByb2Nlc3MgY2Fubm90IHN0b3AgYW5cXG4rXFx0XFx0ICogZW5kbGVzcyBzdHJlYW0gb2YgaW52YWxpZGF0aW9ucyBoZXJlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgdGltZW91dCkpIHtcXG4gXFx0XFx0XFx0cmV0ID0gLUVCVVNZO1xcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXFx1MDAyNnJhbmdlLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgbWF4KHRpbWVvdXQgLSBqaWZmaWVzLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAxTCkpO1xcbitcXHRcXHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcXHUwMDI2cmFuZ2UsIHJlbWFpbmluZyk7XFxuIFxcdFxcdGlmIChyZXQpXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDM6MjQuMjc2OTg4MTE1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjM2ODMwMzc3MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB1c2FnZSBvZiBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIGluIHRocmVlIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnM6IEFNRCBYRE5BIChgZHJpdmVycy9hY2NlbC9hbWR4ZG5hYCksIEludGVsIFhlIChgZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY2AsIHdoaWNoIGlzIG9ubHkgdXNlZCBieSBgeGVgKSwgYW5kIE5vdXZlYXUgKGBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdWApLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgKEFNRCBYRE5BIE5QVSwgSW50ZWwgWGUgR1BVLCBOVklESUEgR1BVKSB0byBpbml0aWFsaXplIGFuZCBleHBvc2UgdGhlaXIgaW50ZXJmYWNlcy4gU2luY2Ugc3l6a2FsbGVyIG9wZXJhdGVzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoR0NFL1FFTVUpIHdpdGhvdXQgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBvciBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoZW0sIHRoZXNlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enouXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGI1ZjJkOGQ3OTI3ZjkyMDg3YTQzN2YwMTgyZTdmZjFhOTdmMTUwMjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxNSAwODowMzoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdFxuaW5kZXggNWM4OGQyY2YwODE4MzMuLmZjMWI4ZGMxOTgyNTBlIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3RcbkBAIC0yMDYsNyArMjA2LDcgQEAgVGhlIHVzYWdlIHBhdHRlcm4gaXM6OlxuICAgICAgICAgICBnb3RvIG91dF9wdXQ7XG4gXG4gICAgICAgdGFrZV9sb2NrKGRyaXZlci1cdTAwM2V1cGRhdGUpO1xuLSAgICAgIGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShcdTAwMjZpbnRlcnZhbF9zdWIsIHJhbmdlLm5vdGlmaWVyX3NlcSkpIHtcbisgICAgICBpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkocmFuZ2Uubm90aWZpZXIsIHJhbmdlLm5vdGlmaWVyX3NlcSkpIHtcbiAgICAgICAgICAgcmVsZWFzZV9sb2NrKGRyaXZlci1cdTAwM2V1cGRhdGUpO1xuICAgICAgICAgICBnb3RvIGFnYWluO1xuICAgICAgIH1cbkBAIC0yMjUsNyArMjI1LDggQEAgVGhlIHVzYWdlIHBhdHRlcm4gaXM6OlxuIFRoZSBkcml2ZXItXHUwMDNldXBkYXRlIGxvY2sgaXMgdGhlIHNhbWUgbG9jayB0aGF0IHRoZSBkcml2ZXIgdGFrZXMgaW5zaWRlIGl0c1xuIGludmFsaWRhdGUoKSBjYWxsYmFjay4gVGhhdCBsb2NrIG11c3QgYmUgaGVsZCBiZWZvcmUgY2FsbGluZ1xuIG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KCkgdG8gYXZvaWQgYW55IHJhY2Ugd2l0aCBhIGNvbmN1cnJlbnQgQ1BVIHBhZ2UgdGFibGVcbi11cGRhdGUuXG4rdXBkYXRlLiBUaGUgcmV0cnkgY2hlY2sgbXVzdCB1c2UgdGhlIHNhbWUgbm90aWZpZXIgYW5kIHNlcXVlbmNlIG51bWJlciBzdG9yZWRcbitpbiBgYHJhbmdlYGAgYnkgYGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpYGAuXG4gXG4gSG9sZGluZyB0aGUgbW1hcCBsb2NrIGFjcm9zcyBITU0gZmF1bHRzXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfY3R4LmMgYi9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguY1xuaW5kZXggNTQ4YmE0MzE1NTU0ZmYuLjIxZjI4MTc3NTFmOWU3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfY3R4LmNcbisrKyBiL2RyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jXG5AQCAtMTAzNyw3ICsxMDM3LDcgQEAgc3RhdGljIGludCBhaWUyX3BvcHVsYXRlX3JhbmdlKHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKmFibylcbiBcdGJvb2wgZm91bmQ7XG4gXHRpbnQgcmV0O1xuIFxuLVx0dGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xuK1x0dGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XG4gYWdhaW46XG4gXHRmb3VuZCA9IGZhbHNlO1xuIFx0ZG93bl93cml0ZShcdTAwMjZ4ZG5hLVx1MDAzZW5vdGlmaWVyX2xvY2spO1xuQEAgLTEwNjIsMTMgKzEwNjIsOSBAQCBzdGF0aWMgaW50IGFpZTJfcG9wdWxhdGVfcmFuZ2Uoc3RydWN0IGFtZHhkbmFfZ2VtX29iaiAqYWJvKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdH1cbiBcbi1cdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNm1hcHAtXHUwMDNlcmFuZ2UsXG4tXHRcdFx0bWF4X3QobG9uZywgdGltZW91dCAtIGppZmZpZXMsIDEpKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0aWYgKHJldCA9PSAtRUJVU1kpXG4tXHRcdFx0cmV0ID0gLUVUSU1FO1xuK1x0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2bWFwcC1cdTAwM2VyYW5nZSwgdGltZW91dCk7XG4rXHRpZiAocmV0KVxuIFx0XHRnb3RvIHB1dF9tbTtcbi1cdH1cbiBcbiBcdGRvd25fd3JpdGUoXHUwMDI2eGRuYS1cdTAwM2Vub3RpZmllcl9sb2NrKTtcbiBcdGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShcdTAwMjZtYXBwLVx1MDAzZW5vdGlmaWVyLCBtYXBwLVx1MDAzZXJhbmdlLm5vdGlmaWVyX3NlcSkpIHtcbkBAIC0xMDg2LDcgKzEwODIsNyBAQCBzdGF0aWMgaW50IGFpZTJfcG9wdWxhdGVfcmFuZ2Uoc3RydWN0IGFtZHhkbmFfZ2VtX29iaiAqYWJvKVxuIHB1dF9tbTpcbiBcdGFtZHhkbmFfdW1hcF9wdXQobWFwcCk7XG4gXHRtbXB1dChtbSk7XG4tXHRyZXR1cm4gcmV0O1xuK1x0cmV0dXJuIHJldCA9PSAtRUJVU1kgPyAtRVRJTUUgOiByZXQ7XG4gfVxuIFxuIGludCBhaWUyX2NtZF9zdWJtaXQoc3RydWN0IGFtZHhkbmFfaHdjdHggKmh3Y3R4LCBzdHJ1Y3QgYW1keGRuYV9zY2hlZF9qb2IgKmpvYiwgdTY0ICpzZXEpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNcbmluZGV4IGI4ZjJkZDk5ODJmNTNjLi43NmU4YTAwMjhjN2ZjOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNcbkBAIC04NTIsOCArODUyLDcgQEAgZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0IGRybV9ncHVzdm1fc2Nhbl9tbShzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UsXG4gXHRcdC5lbmQgPSBlbmQsXG4gXHRcdC5kZXZfcHJpdmF0ZV9vd25lciA9IGRldl9wcml2YXRlX293bmVyLFxuIFx0fTtcbi1cdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9XG4tXHRcdGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xuK1x0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbiBcdGVudW0gZHJtX2dwdXN2bV9zY2FuX3Jlc3VsdCBzdGF0ZSA9IERSTV9HUFVTVk1fU0NBTl9VTlBPUFVMQVRFRCwgbmV3X3N0YXRlO1xuIFx0dW5zaWduZWQgbG9uZyAqcGZucztcbiBcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzID0gbnBhZ2VzX2luX3JhbmdlKHN0YXJ0LCBlbmQpO1xuQEAgLTg2Nyw4ICs4NjYsNyBAQCBlbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgZHJtX2dwdXN2bV9zY2FuX21tKHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSxcbiBcdGhtbV9yYW5nZS5obW1fcGZucyA9IHBmbnM7XG4gXG4gcmV0cnk6XG4tXHRlcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZobW1fcmFuZ2UsXG4tXHRcdFx0XHRcdCAgICAgICBtYXgodGltZW91dCAtIGppZmZpZXMsIDFMKSk7XG4rXHRlcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZobW1fcmFuZ2UsIHRpbWVvdXQpO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfZnJlZTtcbiBcbkBAIC0xNDU5LDggKzE0NTcsNyBAQCBpbnQgZHJtX2dwdXN2bV9nZXRfcGFnZXMoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbiBcdFx0LmRldl9wcml2YXRlX293bmVyID0gY3R4LVx1MDAzZWRldmljZV9wcml2YXRlX3BhZ2Vfb3duZXIsXG4gXHR9O1xuIFx0dm9pZCAqemRkO1xuLVx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID1cbi1cdFx0amlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XG4rXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xuIFx0dW5zaWduZWQgbG9uZyBpLCBqO1xuIFx0dW5zaWduZWQgbG9uZyBucGFnZXMgPSBucGFnZXNfaW5fcmFuZ2UocGFnZXNfc3RhcnQsIHBhZ2VzX2VuZCk7XG4gXHR1bnNpZ25lZCBsb25nIG51bV9kbWFfbWFwcGVkO1xuQEAgLTE0NzgsOSArMTQ3NSw2IEBAIGludCBkcm1fZ3B1c3ZtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiByZXRyeTpcbi1cdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKVxuLVx0XHRyZXR1cm4gLUVCVVNZO1xuLVxuIFx0aG1tX3JhbmdlLm5vdGlmaWVyX3NlcSA9IG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKG5vdGlmaWVyKTtcbiBcdGlmIChkcm1fZ3B1c3ZtX3BhZ2VzX3ZhbGlkX3VubG9ja2VkKGdwdXN2bSwgc3ZtX3BhZ2VzKSlcbiBcdFx0Z290byBzZXRfc2Vxbm87XG5AQCAtMTQ5NSw4ICsxNDg5LDcgQEAgaW50IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXG4gXHR9XG4gXG4gXHRobW1fcmFuZ2UuaG1tX3BmbnMgPSBwZm5zO1xuLVx0ZXJyID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2aG1tX3JhbmdlLFxuLVx0XHRcdFx0bWF4X3QobG9uZywgdGltZW91dCAtIGppZmZpZXMsIDEpKTtcbitcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNmhtbV9yYW5nZSwgdGltZW91dCk7XG4gXHRtbXB1dChtbSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9mcmVlO1xuQEAgLTE3MTgsOCArMTcxMSw3IEBAIGludCBkcm1fZ3B1c3ZtX3JhbmdlX2V2aWN0KHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXG4gXHRcdC5lbmQgPSBkcm1fZ3B1c3ZtX3JhbmdlX2VuZChyYW5nZSksXG4gXHRcdC5kZXZfcHJpdmF0ZV9vd25lciA9IE5VTEwsXG4gXHR9O1xuLVx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID1cbi1cdFx0amlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XG4rXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xuIFx0dW5zaWduZWQgbG9uZyAqcGZucztcbiBcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzID0gbnBhZ2VzX2luX3JhbmdlKGRybV9ncHVzdm1fcmFuZ2Vfc3RhcnQocmFuZ2UpLFxuIFx0XHRcdFx0XHQgICAgICAgZHJtX2dwdXN2bV9yYW5nZV9lbmQocmFuZ2UpKTtcbkBAIC0xNzM0LDggKzE3MjYsNyBAQCBpbnQgZHJtX2dwdXN2bV9yYW5nZV9ldmljdChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdGhtbV9yYW5nZS5obW1fcGZucyA9IHBmbnM7XG4tXHRlcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZobW1fcmFuZ2UsXG4tXHRcdFx0XHRtYXhfdChsb25nLCB0aW1lb3V0IC0gamlmZmllcywgMSkpO1xuK1x0ZXJyID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2aG1tX3JhbmdlLCB0aW1lb3V0KTtcbiBcbiBcdGt2ZnJlZShwZm5zKTtcbiBcdG1tcHV0KG1tKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY1xuaW5kZXggNGNmYjZlYjdjNzcxNWEuLjU4NzM1NDQ2ZDc4MzJjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY1xuKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY1xuQEAgLTY3OCwxNCArNjc4LDIwIEBAIHN0YXRpYyBpbnQgbm91dmVhdV9yYW5nZV9mYXVsdChzdHJ1Y3Qgbm91dmVhdV9zdm1tICpzdm1tLFxuIFx0cmFuZ2UuZW5kID0gbm90aWZpZXItXHUwMDNlbm90aWZpZXIuaW50ZXJ2YWxfdHJlZS5sYXN0ICsgMTtcbiBcbiBcdHdoaWxlICh0cnVlKSB7XG4tXHRcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7XG4rXHRcdGxvbmcgcmVtYWluaW5nID0gdGltZW91dCAtIGppZmZpZXM7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBITU0gdGltZW91dCBvbmx5IGJvdW5kcyByZXRyaWVzIHdoaWxlIEhNTSBpcyB3YWxraW5nIGFuZFxuK1x0XHQgKiBmYXVsdGluZyB0aGUgcmFuZ2UuIFRoaXMgZmF1bHQgaXMgaGFuZGxlZCBieSBhIGtlcm5lbCB3b3JrZXIsXG4rXHRcdCAqIHNvIGZhdGFsIHNpZ25hbHMgZnJvbSB0aGUgZmF1bHRpbmcgcHJvY2VzcyBjYW5ub3Qgc3RvcCBhblxuK1x0XHQgKiBlbmRsZXNzIHN0cmVhbSBvZiBpbnZhbGlkYXRpb25zIGhlcmUuXG4rXHRcdCAqL1xuK1x0XHRpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCB0aW1lb3V0KSkge1xuIFx0XHRcdHJldCA9IC1FQlVTWTtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuLVx0XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZyYW5nZSxcbi1cdFx0XHRcdFx0XHQgICAgICAgbWF4KHRpbWVvdXQgLSBqaWZmaWVzLFxuLVx0XHRcdFx0XHRcdFx0ICAgMUwpKTtcbitcdFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2cmFuZ2UsIHJlbWFpbmluZyk7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0Z290byBvdXQ7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowMzoyNC4yNzY5ODkzNjVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjYzNDkzNDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVGltZW91dCBDaGFuZ2UgaW4gSE1NIFJhbmdlIEZhdWx0IEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgYXBwZWFycyB0byBiZSBtb2RpZnlpbmcgaG93IGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAgaXMgY2FsbGVkIGFjcm9zcyBhIGZldyBkcml2ZXJzOiBhbWR4ZG5hLCBkcm1fZ3B1c3ZtLCBhbmQgbm91dmVhdV9zdm0uIFRoZSBrZXkgY2hhbmdlIHNlZW1zIHRvIGJlIGhvdyB0aGUgYHRpbWVvdXRgIGFyZ3VtZW50IGlzIGhhbmRsZWQuIEl0J3MgbW92aW5nIGZyb20gYmVpbmcgYW4gYWJzb2x1dGUgamlmZmllcyB2YWx1ZSwgb3IgYSByZW1haW5pbmcgdGltZSBjYWxjdWxhdGlvbiwgdG8gYSAqcmVsYXRpdmUqIHRpbWVvdXQuIEluaXRpYWxseSwgSSB0aG91Z2h0IGl0IHdhcyBqdXN0IHBhc3NpbmcgdGhlIGB0aW1lb3V0YCB2YXJpYWJsZSB3aGljaCBpcyBub3cgaW5pdGlhbGl6ZWQgYXMgYG1zZWNzX3RvX2ppZmZpZXMoLi4uKWAuIExldCBtZSBkaWcgYSBsaXR0bGUgZGVlcGVyLlxuXG5TcGVjaWZpY2FsbHksIGluIGBhaWUyX2N0eC5jYCwgdGhlIGRpZmYgc2hvd3M6XG5cbmBgYGNcbi1cdHRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbitcdHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xuLi4uXG4tXHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZtYXBwLVx1MDAzZXJhbmdlLFxuLVx0XHRcdG1heF90KGxvbmcsIHRpbWVvdXQgLSBqaWZmaWVzLCAxKSk7XG4tXHRpZiAocmV0KSB7XG4tXHRcdGlmIChyZXQgPT0gLUVCVVNZKVxuLVx0XHRcdHJldCA9IC1FVElNRTtcbitcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNm1hcHAtXHUwMDNlcmFuZ2UsIHRpbWVvdXQpO1xuK1x0aWYgKHJldClcbiBcdFx0Z290byBwdXRfbW07XG4tXHR9XG5gYGBcblxuT2theSwgc28gdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBhYnNvbHV0ZSB0aW1lb3V0IGlzIGdvbmUgYW5kIG5vdyB3ZSdyZSBqdXN0IHBhc3NpbmcgdGhlIHJlc3VsdCBvZiBgbXNlY3NfdG9famlmZmllcygpYC4gQnV0IHdhaXQgYSBzZWNvbmQuLi4gaXMgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCBkZXNpZ25lZCB0byBhY2NlcHQgYSByZWxhdGl2ZSB0aW1lb3V0IG5vdz8gT3IgZGlkIHRoYXQgY2hhbmdlIGluIGEgcHJldmlvdXMgb3Igc2VwYXJhdGUgcGF0Y2g/IFRoZSBkaWZmIGl0c2VsZiBkb2Vzbid0IHNob3cgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gY2hhbmdpbmcsIHdoaWNoIGlzIGEgYml0IG9kZC4gUGVyaGFwcyB0aGUgZnVuY3Rpb24gd2FzIGFscmVhZHkgY2hhbmdlZCB0byBoYW5kbGUgcmVsYXRpdmUgdGltZW91dHMsIGFuZCB0aGlzIHBhdGNoIHNpbXBseSBhbGlnbnMgdGhlIGNhbGxpbmcgY29udmVudGlvbj8gTGV0IG1lIGxvb2sgYXQgc29tZSBvdGhlciBkaWZmcy4gQWgsIHRoZXJlJ3MgYSByZWxhdGVkIGNoYW5nZSBpbiBgaG1tLnJzdGAgd2hpY2ggcmVtb3ZlcyB0aGUgdXNlIG9mIGBqaWZmaWVzYCBpbiBhIGNvbXBhcmlzb246XG5cbmBgYGNcbi0gICAgICBpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkoXHUwMDI2aW50ZXJ2YWxfc3ViLCByYW5nZS5ub3RpZmllcl9zZXEpKSB7XG4rICAgICAgaWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KHJhbmdlLm5vdGlmaWVyLCByYW5nZS5ub3RpZmllcl9zZXEpKSB7XG5gYGBcblxuU3RpbGwgbm90aGluZyBhYm91dCB0aGUgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCBkZWZpbml0aW9uLiBMZXQncyBnbyBsb29rIGF0IHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGl0c2VsZiwgYW5kIGJlIHN1cmUgd2UgaGF2ZSB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTE5LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDM6MzIuNTQwNDg1MDA5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTAxNzMyMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTE2MD1ub3JtYWwgaW50ZXJmYWNlIGlzOjpcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMTYxLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoxNjI6ICBpbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTE2My0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTE2OT1UaGUgY2FsbGVyIG11c3Qgbm90IGhvbGQgYGBtbWFwX3JlYWRfbG9ja2BgIGJlZm9yZSB0aGUgY2FsbC5cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MTcwOmBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgIHRha2VzIHRoZSBtbWFwIHJlYWQgbG9jayBpbnRlcm5hbGx5IGFuZFxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0xNzEtYWxsb3dzIGBgaGFuZGxlX21tX2ZhdWx0KClgYCB0byBkcm9wIGl0IGR1cmluZyBmYXVsdCBoYW5kbGluZy4gVGhpcyBpcyByZXF1aXJlZFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTE4Nj1UaGUgdXNhZ2UgcGF0dGVybiBpczo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjAzLSBhZ2FpbjpcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjA0OiAgICAgIHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZyYW5nZSwgdGltZW91dCk7XFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTIwNS0gICAgICBpZiAocmV0KVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTIyOD11cGRhdGUuIFRoZSByZXRyeSBjaGVjayBtdXN0IHVzZSB0aGUgc2FtZSBub3RpZmllciBhbmQgc2VxdWVuY2UgbnVtYmVyIHN0b3JlZFxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoyMjk6aW4gYGByYW5nZWBgIGJ5IGBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgLlxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yMzAtXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTIzMT1Ib2xkaW5nIHRoZSBtbWFwIGxvY2sgYWNyb3NzIEhNTSBmYXVsdHNcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yMzMtXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjIzNDpNb3N0IGNhbGxlcnMgc2hvdWxkIHVzZSBgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KClgYC4gSWYgYSBkcml2ZXJcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjM1LXJlYWxseSBuZWVkcyB0byBob2xkIHRoZSBtbWFwIGxvY2sgYWNyb3NzIHdvcmsgb3V0c2lkZSBITU0sIGl0IGNhbiB1c2U6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTI0MD1pbnRlcmZhY2UgY2Fubm90IHN1cHBvcnQgVk1BcyB3aG9zZSBmYXVsdCBoYW5kbGVycyBuZWVkIHRvIGRyb3AgdGhlIG1tYXAgbG9jay5cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjQxOk5ldyBjYWxsZXJzIHNob3VsZCBwcmVmZXIgYGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpYGAgdW5sZXNzIHRoZXlcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjQyLWhhdmUgYSBzcGVjaWZpYyByZXF1aXJlbWVudCB0byBrZWVwIHRoZSBtbWFwIGxvY2sgaGVsZCBhY3Jvc3MgdGhlIGNhbGwuXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYz0xMDMxPXN0YXRpYyBpbnQgYWllMl9wb3B1bGF0ZV9yYW5nZShzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICphYm8pXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYy0xMDY0LVxcbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jOjEwNjU6XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXFx1MDAyNm1hcHAtXFx1MDAzZXJhbmdlLCB0aW1lb3V0KTtcXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYy0xMDY2LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jPTg0MT1lbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgZHJtX2dwdXN2bV9zY2FuX21tKHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODY4LXJldHJ5OlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODY5OlxcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZobW1fcmFuZ2UsIHRpbWVvdXQpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODcwLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jPTE0NDQ9aW50IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE0OTEtXFx0aG1tX3JhbmdlLmhtbV9wZm5zID0gcGZucztcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE0OTI6XFx0ZXJyID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXFx1MDAyNmhtbV9yYW5nZSwgdGltZW91dCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNDkzLVxcdG1tcHV0KG1tKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM9MTcwMz1pbnQgZHJtX2dwdXN2bV9yYW5nZV9ldmljdChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNzI4LVxcdGhtbV9yYW5nZS5obW1fcGZucyA9IHBmbnM7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNzI5OlxcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZobW1fcmFuZ2UsIHRpbWVvdXQpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTczMC1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmM9NjUyPXN0YXRpYyBpbnQgbm91dmVhdV9yYW5nZV9mYXVsdChzdHJ1Y3Qgbm91dmVhdV9zdm1tICpzdm1tLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uYy02OTMtXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uYzo2OTQ6XFx0XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXFx1MDAyNnJhbmdlLCByZW1haW5pbmcpO1xcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmMtNjk1LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jPTM5Nj1zdGF0aWMgaW50IG1zaHZfcmVnaW9uX3JhbmdlX2ZhdWx0KHN0cnVjdCBtc2h2X21lbV9yZWdpb24gKnJlZ2lvbixcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmMtNDE1LWFnYWluOlxcbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmM6NDE2OlxcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZyYW5nZSwgMCk7XFxuZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYy00MTctXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmM9MzI0PWludCBpYl91bWVtX29kcF9tYXBfZG1hX2FuZF9sb2NrKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHAsIHU2NCB1c2VyX3ZpcnQsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jLTM2OC1yZXRyeTpcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jOjM2OTpcXHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcXHUwMDI2cmFuZ2UsIHRpbWVvdXQpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmMtMzcwLVxcdGlmICh1bmxpa2VseShyZXQpKVxcbi0tXFxuaW5jbHVkZS9saW51eC9obW0uaD0xMjU9aW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSk7XFxuaW5jbHVkZS9saW51eC9obW0uaDoxMjY6aW50IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLFxcbmluY2x1ZGUvbGludXgvaG1tLmgtMTI3LVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTtcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTM5Mj1zdGF0aWMgaW50IGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXFxuLS1cXG5saWIvdGVzdF9obW0uYy0zOTgtXFx0d2hpbGUgKHRydWUpIHtcXG5saWIvdGVzdF9obW0uYzozOTk6XFx0XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQocmFuZ2UsIHRpbWVvdXQpO1xcbmxpYi90ZXN0X2htbS5jLTQwMC1cXHRcXHRpZiAocmV0KVxcbi0tXFxubW0vaG1tLmM9Njg5PXN0YXRpYyBpbnQgaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSwgYm9vbCAqbG9ja2VkKVxcbi0tXFxubW0vaG1tLmMtNzUzLSAqIFRoZSBtbWFwIGxvY2sgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIgYW5kIHdpbGwgcmVtYWluIGhlbGQgb24gcmV0dXJuLlxcbm1tL2htbS5jOjc1NDogKiBOZXcgdXNlcnMgc2hvdWxkIHByZWZlciBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpIHVubGVzcyB0aGV5XFxubW0vaG1tLmMtNzU1LSAqIHNwZWNpZmljYWxseSBuZWVkIHRvIGtlZXAgdGhlIG1tYXAgbG9jayBoZWxkIGFjcm9zcyB0aGUgY2FsbC4gVGhpcyBoZWxwZXJcXG4tLVxcbm1tL2htbS5jPTc2Mj1FWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV9mYXVsdCk7XFxuLS1cXG5tbS9obW0uYy03NjQtLyoqXFxubW0vaG1tLmM6NzY1OiAqIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0IC0gZmF1bHQgaW4gYSByYW5nZSB3aXRoIGEgcmV0cnkgdGltZW91dFxcbm1tL2htbS5jLTc2Ni0gKiBAcmFuZ2U6XFx0YXJndW1lbnQgc3RydWN0dXJlXFxuLS1cXG5tbS9obW0uYy03ODMtICovXFxubW0vaG1tLmM6Nzg0OmludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSxcXG5tbS9obW0uYy03ODUtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpXFxuLS1cXG5tbS9obW0uYy04MjQtfVxcbm1tL2htbS5jOjgyNTpFWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KTtcXG5tbS9obW0uYy04MjYtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz0yOTA0PVRFU1RfRl9USU1FT1VUKGhtbSwgYmVuY2htYXJrX3RocF9taWdyYXRpb24sIDEyMClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTI5NjAtICogVGVzdCB0aGF0IEhNTSBjYW4gZmF1bHQgaW4gcGFnZXMgYmFja2VkIGJ5IHVzZXJmYXVsdGZkIHVzaW5nIHRoZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjI5NjE6ICogaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKSBwYXRoIHdpdGggbm8gdGltZW91dC4gVGhpcyBleGVyY2lzZXNcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yOTYyLSAqIHRoZSBsb2NrLWRyb3AgcmV0cnkgbG9naWMgaW4gdGhlIEhNTSBmcmFtZXdvcmsuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjAzOjM1LjAzMDY2NDIwMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MDYxMzU0OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUaW1lb3V0IFBhcmFtZXRlciBpbiBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHRoZSBjaGFuZ2UgdG8gaG93IHRoZSBgdGltZW91dGAgcGFyYW1ldGVyIGlzIGhhbmRsZWQgaW4gYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCBjYXRjaGVzIG15IGV5ZS4gSXQgYXBwZWFycyB0aGUgc2lnbmF0dXJlIG9mIHRoZSBmdW5jdGlvbiBpcyBiZWluZyB0cmVhdGVkIGFzIHRha2luZyBhbiBgdW5zaWduZWQgbG9uZyB0aW1lb3V0YCBwYXJhbWV0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgbmV3IGFwcHJvYWNoLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlIGRpZmZzLCBzcGVjaWZpY2FsbHkgaW4gYGFpZTJfY3R4LmNgLCBgZHJtX2dwdXN2bS5jYCwgYW5kIGBub3V2ZWF1X3N2bS5jYCwgaXQgc2VlbXMgdGhhdCB0aGUgY29kZSB1c2VkIHRvIGNhbGN1bGF0ZSBhbiAqYWJzb2x1dGUqIHRpbWVvdXQsIG9mdGVuIGJ5IGFkZGluZyBgamlmZmllc2AgdG8gYSBkdXJhdGlvbi4gSW4gZXNzZW5jZSwgdGhleSB3ZXJlIHNldHRpbmcgYW4gKmV4cGlyYXRpb24gdGltZSouIE5vdywgdGhlIHBhdGNoIGlzIHJlbW92aW5nIHRoZSBgamlmZmllc2AgYWRkaXRpb24gYW5kIGRpcmVjdGx5IHBhc3NpbmcgYSB0aW1lb3V0IHZhbHVlIGNhbGN1bGF0ZWQgdXNpbmcgYG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVClgLiBBbHNvLCB0aGUgY2FsbHMgd2VyZSBwcmV2aW91c2x5IHN1YnRyYWN0aW5nIGBqaWZmaWVzYCBmcm9tIHRoZSB0aW1lb3V0IGFuZCB1c2luZyBgbWF4KClgIHRvIGVuc3VyZSB0aGUgdGltZW91dCB3YXMgYXQgbGVhc3QgMSwgYnV0IG5vdyB0aG9zZSBjYWxjdWxhdGlvbnMgYXJlIHJlbW92ZWQuXG5cblRoaXMgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgdGhhdCBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIG5vdyBleHBlY3RzIGEgKnJlbGF0aXZlKiB0aW1lb3V0IOKAkyBhIGR1cmF0aW9uLCBub3QgYW4gYWJzb2x1dGUgdGltZXN0YW1wLiBJdCdzIGV4cGVjdGluZyB0aGUgbnVtYmVyIG9mIGppZmZpZXMgdG8gd2FpdC4gSSAqbmVlZCogdG8gY29uZmlybSB0aGlzLiBUbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbSBnb2luZyB0byBqdW1wIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIGluIGBtbS9obW0uY2AgdG8gdmVyaWZ5IHdoZXRoZXIgaXQgaW50ZXJwcmV0cyB0aGUgYHRpbWVvdXRgIHBhcmFtZXRlciBhcyBhIHJlbGF0aXZlIHRpbWUgdmFsdWUuIElmIHRoZSBjb2RlIGlzIG5vdyBwYXNzaW5nIGFuIGFic29sdXRlIHRpbWUsIHRoZSBwYXRjaCBpcyB3cm9uZyBhbmQgd2lsbCBicmVhay5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMzNSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowMzo0My40MzY4MDE4NjlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4MjkwNTg1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTE2MD1ub3JtYWwgaW50ZXJmYWNlIGlzOjpcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMTYxLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoxNjI6ICBpbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTE2My0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9obW0uaD0xMjU9aW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSk7XFxuaW5jbHVkZS9saW51eC9obW0uaDoxMjY6aW50IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLFxcbmluY2x1ZGUvbGludXgvaG1tLmgtMTI3LVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTtcXG4tLVxcbm1tL2htbS5jPTc2Mj1FWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV9mYXVsdCk7XFxuLS1cXG5tbS9obW0uYy03ODMtICovXFxubW0vaG1tLmM6Nzg0OmludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSxcXG5tbS9obW0uYy03ODUtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjAzOjQ1LjYxOTcxMzMxNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NzMwMDM4MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgbW0vaG1tLmNgIGFuZCBzcGVjaWZpY2FsbHksIHRoYXQgZnVuY3Rpb24sIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAuIFRoZSBuYW1lIGl0c2VsZiBpcyBpbnRyaWd1aW5nLiAgSXQgc3VnZ2VzdHMgaGFuZGxpbmcgYSBmYXVsdCB3aXRoaW4gYSBIeXBlci1NZW1vcnkgTWFuYWdlbWVudCAoSE1NKSByYW5nZSwgYnV0IHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHNpdHVhdGlvbiB3aGVyZSBzb21lIGtpbmQgb2YgbG9jayBpcyAqbm90KiBoZWxkLCBhbmQgd2UncmUgYWxzbyBkZWFsaW5nIHdpdGggYSB0aW1lb3V0LiAgVGhpcyBsaWtlbHkgaW5kaWNhdGVzIGEgYmFja2dyb3VuZCBwcm9jZXNzLCBvciBtYXliZSBhc3luY2hyb25vdXMgb3BlcmF0aW9uLCBhbmQgd2XigJlyZSB0cnlpbmcgdG8gcHJldmVudCBpdCBmcm9tIGJsb2NraW5nIGluZGVmaW5pdGVseS4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoZXNlIHRpbWVvdXQgc2NlbmFyaW9zIG9mdGVuIHBvaW50IHRvIGNvbmN1cnJlbmN5IGlzc3VlcyBvciByZXNvdXJjZSBjb250ZW50aW9uLCBzbyBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGF0J3MgYWRkcmVzc2VkLlxuXG5JJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZC4gSXMgaXQgdHJpZ2dlcmVkIGJ5IGEgdGltZXIsIGFuIGludGVycnVwdCwgb3Igc29tZXRoaW5nIGVsc2U/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgcHJvYmxlbSBpdCdzIGRlc2lnbmVkIHRvIHNvbHZlLlxuXG5J4oCZbGwgYWxzbyBrZWVwIGFuIGV5ZSBvdXQgZm9yIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBITU0gY29tcG9uZW50cywgc3VjaCBhcyByYW5nZSBtZXRhZGF0YSwgcGFnZSB0YWJsZXMsIGFuZCBhbnkgcG90ZW50aWFsIGxvY2tpbmcgbWVjaGFuaXNtcyAoZXZlbiBpZiBub3QgZXhwbGljaXRseSBoZWxkIGJ5IHRoZSBjYWxsZXIpLiBHaXZlbiB0aGF0IGl0J3MgXCJ1bmxvY2tlZCxcIiB0aGUgZnVuY3Rpb24gcHJvYmFibHkgcmVsaWVzIG9uIHNvbWUgb3RoZXIgbWVjaGFuaXNtIHRvIGVuc3VyZSBkYXRhIGNvbnNpc3RlbmN5LiBNYXliZSBhdG9taWMgb3BlcmF0aW9ucz8gUGVyaGFwcyByZWFkLWNvcHktdXBkYXRlIHRlY2huaXF1ZXM/IEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMuIFRoZSBcInRpbWVvdXRcIiBhc3BlY3QgbWFrZXMgbWUgdGhpbmsgYWJvdXQgcG90ZW50aWFsIGRlYWRsb2NrcyBvciBsaXZlbG9ja3Mg4oCTIEknbGwgYmUgbG9va2luZyBhdCB3aGV0aGVyIGl0IHRha2VzIHN0ZXBzIHRvIG1pdGlnYXRlIHRob3NlIHBvc3NpYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NjAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowMzo1MC4wOTI3MjAwNTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzYyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaG1tLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzgwOlxcdCAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG9uZSBvZiB0aGUgZXJyb3IgY29kZXMgZG9jdW1lbnRlZCBmb3JcXG4gNzgxOlxcdCAqIGhtbV9yYW5nZV9mYXVsdCgpLiAtRUlOVFIgaXMgcmV0dXJuZWQgaWYgbW1hcF9sb2NrIGFjcXVpc2l0aW9uIGlzXFxuIDc4MjpcXHQgKiBpbnRlcnJ1cHRlZCBvciBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nIGR1cmluZyByZXRyeSBoYW5kbGluZy5cXG4gNzgzOlxcdCAqL1xcbiA3ODQ6XFx0aW50IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLFxcbiA3ODU6XFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpXFxuIDc4NjpcXHR7XFxuIDc4NzpcXHRcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHJhbmdlLVxcdTAwM2Vub3RpZmllci1cXHUwMDNlbW07XFxuIDc4ODpcXHRcXHR1bnNpZ25lZCBsb25nIGRlYWRsaW5lID0gMDtcXG4gNzg5OlxcdFxcdGJvb2wgbG9ja2VkID0gZmFsc2U7XFxuIDc5MDpcXHRcXHRpbnQgcmV0O1xcbiA3OTE6XFx0XFxuIDc5MjpcXHRcXHRkbyB7XFxuIDc5MzpcXHRcXHRcXHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuIDc5NDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlRSO1xcbiA3OTU6XFx0XFxuIDc5NjpcXHRcXHRcXHRpZiAodGltZW91dCkge1xcbiA3OTc6XFx0XFx0XFx0XFx0LypcXG4gNzk4OlxcdFxcdFxcdFxcdCAqIElmIHRoZSBwcmV2aW91cyBmYXVsdCBkcm9wcGVkIG1tYXBfbG9jaywgdGhlbiB0aGUgZmF1bHRcXG4gNzk5OlxcdFxcdFxcdFxcdCAqIGhhbmRsZXIgbWFkZSBwcm9ncmVzcy4gUmVzdGFydCB0aGUgcmV0cnkgdGltZW91dCBpbiB0aGF0XFxuIDgwMDpcXHRcXHRcXHRcXHQgKiBjYXNlLCBidXQga2VlcCB0aGUgZXhpc3RpbmcgZGVhZGxpbmUgZm9yIG9yZGluYXJ5IC1FQlVTWVxcbiA4MDE6XFx0XFx0XFx0XFx0ICogcmV0cmllcy5cXG4gODAyOlxcdFxcdFxcdFxcdCAqL1xcbiA4MDM6XFx0XFx0XFx0XFx0aWYgKCFsb2NrZWQpXFxuIDgwNDpcXHRcXHRcXHRcXHRcXHRkZWFkbGluZSA9IGppZmZpZXMgKyB0aW1lb3V0O1xcbiA4MDU6XFx0XFxuIDgwNjpcXHRcXHRcXHRcXHRpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkZWFkbGluZSkpXFxuIDgwNzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiA4MDg6XFx0XFx0XFx0fVxcbiA4MDk6XFx0XFxuIDgxMDpcXHRcXHRcXHRyYW5nZS1cXHUwMDNlbm90aWZpZXJfc2VxID1cXG4gODExOlxcdFxcdFxcdFxcdG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKHJhbmdlLVxcdTAwM2Vub3RpZmllcik7XFxuIDgxMjpcXHRcXG4gODEzOlxcdFxcdFxcdHJldCA9IG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKG1tKTtcXG4gODE0OlxcdFxcdFxcdGlmIChyZXQpXFxuIDgxNTpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA4MTY6XFx0XFxuIDgxNzpcXHRcXHRcXHRsb2NrZWQgPSB0cnVlO1xcbiA4MTg6XFx0XFx0XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZChyYW5nZSwgXFx1MDAyNmxvY2tlZCk7XFxuIDgxOTpcXHRcXHRcXHRpZiAobG9ja2VkKVxcbiA4MjA6XFx0XFx0XFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuIDgyMTpcXHRcXHR9IHdoaWxlIChyZXQgPT0gLUVCVVNZKTtcXG4gODIyOlxcdFxcbiA4MjM6XFx0XFx0cmV0dXJuIHJldDtcXG4gODI0OlxcdH1cXG4gODI1OlxcdEVYUE9SVF9TWU1CT0woaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQpO1xcbiA4MjY6XFx0XFxuIDgyNzpcXHQvKipcXG4gODI4OlxcdCAqIGhtbV9kbWFfbWFwX2FsbG9jIC0gQWxsb2NhdGUgSE1NIG1hcCBzdHJ1Y3R1cmVcXG4gODI5OlxcdCAqIEBkZXY6IGRldmljZSB0byBhbGxvY2F0ZSBzdHJ1Y3R1cmUgZm9yXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjAzOjUwLjA5Mjg5ODgwMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNTIxNzk1ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUaW1lb3V0IExvZ2ljIGluIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAsIGl0IGV4cGVjdHMgYHRpbWVvdXRgIHRvIGJlIGEgKnJlbGF0aXZlKiB0aW1lb3V0LCBsaWtlIHRoZSByZXN1bHQgb2YgYG1zZWNzX3RvX2ppZmZpZXMoMTAwKWAuIEluc2lkZSwgaXQgYWRkcyB0aGlzIHJlbGF0aXZlIHRpbWVvdXQgdG8gdGhlIGN1cnJlbnQgYGppZmZpZXNgIHRvIGdldCB0aGUgZGVhZGxpbmUsIGJ1dCBvbmx5IGlmIHRoZSBtZW1vcnkgcmVnaW9uIGlzbid0IGxvY2tlZC4gVGhlIGNvZGUgdXNlcyBgZGVhZGxpbmUgPSBqaWZmaWVzICsgdGltZW91dDtgIHdoZW4gdGhlIHJlZ2lvbiBpcyB1bmxvY2tlZCwgYW5kIHRoZW4gSSByZWFsaXplZCB0aGF0IGlmIHRoZSBjYWxsZXIgcGFzc2VzIHNvbWV0aGluZyBsaWtlIGBtYXhfdChsb25nLCB0aW1lb3V0IC0gamlmZmllcywgMSlgLCB3aGVyZSBgdGltZW91dGAgd2FzIG9yaWdpbmFsbHkgYW4gKmFic29sdXRlKiBqaWZmaWVzIHZhbHVlLCB0aGVuIGl0IHdhcyBlZmZlY3RpdmVseSBjYWxjdWxhdGluZyB0aGUgcmVtYWluaW5nIHRpbWUgYW5kIHBhc3NpbmcgaXQuXG5cbkJ1dCBob2xkIG9uLCBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgICppdHNlbGYqIGFscmVhZHkgaGFuZGxlcyB0aGUgcmV0cnkgbG9naWMgYW5kIHJlc3RhcnRzIHRoZSB0aW1lb3V0IGlmIHRoZSByZWdpb24gaXNuJ3QgbG9ja2VkLCB3aGljaCBtZWFucyBwcm9ncmVzcyB3YXMgbWFkZS4gU28gdGhlIGNhbGxlciBzaG91bGRuJ3QgYmUgZ2l2aW5nIGl0IHRoZSByZW1haW5pbmcgdGltZSEgSXQgc2hvdWxkIGJlIHBhc3NpbmcgdGhlICpvcmlnaW5hbCogcmVsYXRpdmUgdGltZW91dCwgc28gdGhhdCBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIGNhbiBwcm9wZXJseSByZXN0YXJ0IHRoZSB0aW1lb3V0IGZyb20gc2NyYXRjaC4gSXQncyBzdXBwb3NlZCB0byBtYW5hZ2UgdGhlIHJldHJpZXMgaW50ZXJuYWxseS5cblxuTm93LCBhIHF1aWNrIGNoZWNrIG9mIHRoZSBub3V2ZWF1IGRyaXZlciByZXZlYWxzIHNvbWV0aGluZyBpbnRlcmVzdGluZy4gSXQncyBzdGlsbCBwYXNzaW5nIGEgYHJlbWFpbmluZ2AgdmFsdWUuIEkgc2VlIHRoaXM6XG5cbmBgYGNcbi1cdFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2cmFuZ2UsXG4tXHRcdFx0XHRcdFx0ICAgICAgIG1heCh0aW1lb3V0IC0gamlmZmllcyxcbi1cdFx0XHRcdFx0XHRcdCAgIDFMKSk7XG4rXHRcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNnJhbmdlLCByZW1haW5pbmcpO1xuYGBgXG5cbldhaXQsIGl0IGxvb2tzIGxpa2UgYG5vdXZlYXVfc3ZtLmNgIGFscmVhZHkgaGFzIGl0cyBvd24gbG9vcCBhcm91bmQgdGhlIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAgZnVuY3Rpb24/IEkgbmVlZCB0byBkaWcgaW50byB0aGUgYG5vdXZlYXVfc3ZtLmNgIGNvZGUgdG8gc2VlIHdoYXQncyBnb2luZyBvbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU0NSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjAzOjU2LjM0NTA4MDUzM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NzA6XFx0XFxuIDY3MTpcXHRcXHRyZXQgPSBtbXVfaW50ZXJ2YWxfbm90aWZpZXJfaW5zZXJ0KFxcdTAwMjZub3RpZmllci1cXHUwMDNlbm90aWZpZXIsIG1tLFxcbiA2NzI6XFx0XFx0XFx0XFx0XFx0XFx0YXJncy1cXHUwMDNlcC5hZGRyLCBhcmdzLVxcdTAwM2VwLnNpemUsXFxuIDY3MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2bm91dmVhdV9zdm1fbW5pX29wcyk7XFxuIDY3NDpcXHRcXHRpZiAocmV0KVxcbiA2NzU6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNjc2OlxcdFxcbiA2Nzc6XFx0XFx0cmFuZ2Uuc3RhcnQgPSBub3RpZmllci1cXHUwMDNlbm90aWZpZXIuaW50ZXJ2YWxfdHJlZS5zdGFydDtcXG4gNjc4OlxcdFxcdHJhbmdlLmVuZCA9IG5vdGlmaWVyLVxcdTAwM2Vub3RpZmllci5pbnRlcnZhbF90cmVlLmxhc3QgKyAxO1xcbiA2Nzk6XFx0XFxuIDY4MDpcXHRcXHR3aGlsZSAodHJ1ZSkge1xcbiA2ODE6XFx0XFx0XFx0bG9uZyByZW1haW5pbmcgPSB0aW1lb3V0IC0gamlmZmllcztcXG4gNjgyOlxcdFxcbiA2ODM6XFx0XFx0XFx0LypcXG4gNjg0OlxcdFxcdFxcdCAqIFRoZSBITU0gdGltZW91dCBvbmx5IGJvdW5kcyByZXRyaWVzIHdoaWxlIEhNTSBpcyB3YWxraW5nIGFuZFxcbiA2ODU6XFx0XFx0XFx0ICogZmF1bHRpbmcgdGhlIHJhbmdlLiBUaGlzIGZhdWx0IGlzIGhhbmRsZWQgYnkgYSBrZXJuZWwgd29ya2VyLFxcbiA2ODY6XFx0XFx0XFx0ICogc28gZmF0YWwgc2lnbmFscyBmcm9tIHRoZSBmYXVsdGluZyBwcm9jZXNzIGNhbm5vdCBzdG9wIGFuXFxuIDY4NzpcXHRcXHRcXHQgKiBlbmRsZXNzIHN0cmVhbSBvZiBpbnZhbGlkYXRpb25zIGhlcmUuXFxuIDY4ODpcXHRcXHRcXHQgKi9cXG4gNjg5OlxcdFxcdFxcdGlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHRpbWVvdXQpKSB7XFxuIDY5MDpcXHRcXHRcXHRcXHRyZXQgPSAtRUJVU1k7XFxuIDY5MTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gNjkyOlxcdFxcdFxcdH1cXG4gNjkzOlxcdFxcbiA2OTQ6XFx0XFx0XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXFx1MDAyNnJhbmdlLCByZW1haW5pbmcpO1xcbiA2OTU6XFx0XFx0XFx0aWYgKHJldClcXG4gNjk2OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiA2OTc6XFx0XFxuIDY5ODpcXHRcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZzdm1tLVxcdTAwM2VtdXRleCk7XFxuIDY5OTpcXHRcXHRcXHRpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkocmFuZ2Uubm90aWZpZXIsXFxuIDcwMDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgcmFuZ2Uubm90aWZpZXJfc2VxKSkge1xcbiA3MDE6XFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzdm1tLVxcdTAwM2VtdXRleCk7XFxuIDcwMjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNzAzOlxcdFxcdFxcdH1cXG4gNzA0OlxcdFxcdFxcdGJyZWFrO1xcbiA3MDU6XFx0XFx0fVxcbiA3MDY6XFx0XFxuIDcwNzpcXHRcXHRub3V2ZWF1X2htbV9jb252ZXJ0X3Bmbihkcm0sIFxcdTAwMjZyYW5nZSwgYXJncyk7XFxuIDcwODpcXHRcXG4gNzA5OlxcdFxcdHJldCA9IG52aWZfb2JqZWN0X2lvY3RsKFxcdTAwMjZzdm1tLVxcdTAwM2V2bW0tXFx1MDAzZXZtbS5vYmplY3QsIGFyZ3MsIHNpemUsIE5VTEwpO1xcbiA3MTA6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzdm1tLVxcdTAwM2VtdXRleCk7XFxuIDcxMTpcXHRcXG4gNzEyOlxcdG91dDpcXG4gNzEzOlxcdFxcdG1tdV9pbnRlcnZhbF9ub3RpZmllcl9yZW1vdmUoXFx1MDAyNm5vdGlmaWVyLVxcdTAwM2Vub3RpZmllcik7XFxuIDcxNDpcXHRcXG4gNzE1OlxcdFxcdHJldHVybiByZXQ7XFxuIDcxNjpcXHR9XFxuIDcxNzpcXHRcXG4gNzE4OlxcdHN0YXRpYyB2b2lkXFxuIDcxOTpcXHRub3V2ZWF1X3N2bV9mYXVsdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjAzOjU2LjM0NTE4NTgyM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDk1MzIxNDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVGltZW91dCBDaGFuZ2UgaW4gSE1NIEZhdWx0IEhhbmRsaW5nKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBJIHNlZSBpdCdzIHRvdWNoaW5nIGBub3V2ZWF1X3N2bS5jYCwgYW5kIHRoYXQncyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IGhhcyBpdHMgb3duIGxvb3AgZHVlIHRvIHRoZSBgbW11X2ludGVydmFsX3JlYWRfcmV0cnlgIGNhbGwuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyB0aGUgdGltZW91dCBpcyBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgd2l0aCBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYG1heCh0aW1lb3V0IC0gamlmZmllcywgMUwpYCB0byBgcmVtYWluaW5nYC4gVGhpcyBzZWVtcyB0byBiZSB0aGUgZml4LlxuXG5JdCdzIGNsZWFyIHRoZSBjaGFuZ2UgYWZmZWN0cyBob3cgYHRpbWVvdXRgIGlzIHBhc3NlZCB0byBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgLiBMb29raW5nIGF0IGBhaWUyX2N0eC5jYCBhbmQgYGRybV9ncHVzdm0uY2AsIEkgc2VlIHRoYXQgdGhlIGNvZGUgaXMgY2hhbmdpbmcgZnJvbSB1c2luZyBgbWF4X3QobG9uZywgdGltZW91dCAtIGppZmZpZXMsIDEpYCB0byBqdXN0IHBhc3NpbmcgYHRpbWVvdXRgIGRpcmVjdGx5ICh3aGljaCBpcyBub3cgYSAqcmVsYXRpdmUqIHRpbWVvdXQpLiBXYWl0LCB0aGlzIGlzIGtleSEgSWYgYHRpbWVvdXRgIGlzIHJlbGF0aXZlIG5vdywgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCB3aWxsIHJlc3RhcnQgdGhlIHRpbWVvdXQgaWYgYCFsb2NrZWRgLlxuXG5QcmV2aW91c2x5LCB0aGUgY2FsbGVyIHdhcyBwYXNzaW5nIGBtYXhfdChsb25nLCB0aW1lb3V0IC0gamlmZmllcywgMSlgLCB3aGljaCByZXByZXNlbnRlZCB0aGUgcmVtYWluaW5nIHRpbWUuIENvbnNlcXVlbnRseSwgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCB3YXMgZXNzZW50aWFsbHkgcmVzdGFydGluZyB0aGUgdGltZW91dCB3aXRoIHRoZSByZW1haW5pbmcgdGltZSwgbWFraW5nIGl0IGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvICpub3QqIHJlc3RhcnRpbmcgdGhlIHRpbWVvdXQgYXQgYWxsLCBzaW5jZSBgamlmZmllcyArICh0aW1lb3V0IC0gamlmZmllcylgIGlzIGp1c3QgYHRpbWVvdXRgLlxuXG5Ob3csIHNpbmNlIHRoZSBjYWxsZXIgcGFzc2VzIHRoZSByZWxhdGl2ZSB0aW1lb3V0IChsaWtlIGBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpYCksIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAgd2lsbCByZXN0YXJ0IHRoZSB0aW1lb3V0IHdpdGggdGhlICpmdWxsKiByZWxhdGl2ZSB0aW1lb3V0LiBUaGlzIG1lYW5zIHRoZSB0aW1lb3V0IGlzIGV4dGVuZGVkIGV2ZXJ5IHRpbWUgdGhlIGZhdWx0IGhhbmRsZXIgbWFrZXMgcHJvZ3Jlc3MuIFRoYXQncyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5HaXZlbiB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGxldCBtZSB0aGluayBhYm91dCBob3cgaXQncyB1c2VkLiBMZXQncyBzZWUgaWYgdGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIGBhaWUyX2N0eC5jYCBpcyBmb3IgdGhlIEFNRCBYRE5BIGRyaXZlciAoYGRyaXZlcnMvYWNjZWwvYW1keGRuYWApLiBgZHJtX2dwdXN2bS5jYCBpcyBmb3IgRFJNIEdQVSBTVk0gKGBkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jYCksIGFuZCBgbm91dmVhdV9zdm0uY2AgaXMgZm9yIE5vdXZlYXUgU1ZNIChgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY2ApLiBUaGlzIGxlYWRzIG1lIHRvIHdhbnQgdG8gc2VlIGlmIGBkcm1fZ3B1c3ZtLmNgIGlzIGZ1enphYmxlLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYGRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA0MiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjA0OjA0Ljg0MDUwOTcyNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU1ODA1MzQxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcm1fZ3B1c3ZtX3NjYW5fbW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz03NzA9c3RhdGljIGJvb2wgZHJtX2dwdXN2bV9jaGVja19wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04MjUtLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4MjY6ICogZHJtX2dwdXN2bV9zY2FuX21tKCkgLSBDaGVjayB0aGUgbWlncmF0aW9uIHN0YXRlIG9mIGEgZHJtX2dwdXN2bV9yYW5nZVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODI3LSAqIEByYW5nZTogUG9pbnRlciB0byB0aGUgc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgdG8gY2hlY2suXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg0MC0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg0MTplbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgZHJtX2dwdXN2bV9zY2FuX21tKHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg0Mi1cXHRcXHRcXHRcXHRcXHQgICAgICAgdm9pZCAqZGV2X3ByaXZhdGVfb3duZXIsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkyNy19XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5Mjg6RVhQT1JUX1NZTUJPTChkcm1fZ3B1c3ZtX3NjYW5fbW0pO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTI5LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jPTE2NDg9aW50IHhlX3N2bV9hbGxvY192cmFtKHN0cnVjdCB4ZV9zdm1fcmFuZ2UgKnJhbmdlLCBjb25zdCBzdHJ1Y3QgZHJtX2dwdXN2bV9jdHggKmN0eCxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xNjY0LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxNjY1OlxcdG1pZ3JhdGlvbl9zdGF0ZSA9IGRybV9ncHVzdm1fc2Nhbl9tbShcXHUwMDI2cmFuZ2UtXFx1MDAzZWJhc2UsXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE2NjYtXFx0XFx0XFx0XFx0XFx0ICAgICB4ZV9zdm1fcHJpdmF0ZV9wYWdlX293bmVyKHZtLCBmYWxzZSksXFxuLS1cXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg9MzUwPXN0YXRpYyBpbmxpbmUgdm9pZCBkcm1fZ3B1c3ZtX2luaXRfcGFnZXMoc3RydWN0IGRybV9ncHVzdm1fcGFnZXMgKnN2bV9wYWdlcyxcXG4tLVxcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0zNTgtLyoqXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oOjM1OTogKiBlbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgLSBTY2FuIHJlc3VsdCBmcm9tIHRoZSBkcm1fZ3B1c3ZtX3NjYW5fbW0oKSBmdW5jdGlvbi5cXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmgtMzYwLSAqIEBEUk1fR1BVU1ZNX1NDQU5fVU5QT1BVTEFURUQ6IEF0IGxlYXN0IG9uZSBwYWdlIHdhcyBub3QgcHJlc2VudCBvciBpbmFjY2Vzc2libGUuXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oLTM2MS0gKiBARFJNX0dQVVNWTV9TQ0FOX0VRVUFMOiBBbGwgcGFnZXMgYmVsb25nIHRvIHRoZSBzdHJ1Y3QgZGV2X3BhZ2VtYXAgaW5kaWNhdGVkIGFzXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oOjM2MjogKiB0aGUgQHBhZ2VtYXAgYXJndW1lbnQgdG8gdGhlIGRybV9ncHVzdm1fc2Nhbl9tbSgpIGZ1bmN0aW9uLlxcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0zNjMtICogQERSTV9HUFVTVk1fU0NBTl9PVEhFUjogQWxsIHBhZ2VzIGJlbG9uZyB0byBleGFjdGx5IG9uZSBkZXZfcGFnZW1hcCwgd2hpY2ggaXNcXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6MzY0OiAqICpOT1QqIHRoZSBAcGFnZW1hcCBhcmd1bWVudCB0byB0aGUgZHJtX2dwdXN2bV9zY2FuX21tKCkuIEFsbCBwYWdlcyBiZWxvbmcgdG9cXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmgtMzY1LSAqIHRoZSBzYW1lIGRldmljZSBwcml2YXRlIG93bmVyLlxcbi0tXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oPTM3ND1lbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQge1xcbi0tXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oLTM4Mi1cXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6MzgzOmVudW0gZHJtX2dwdXN2bV9zY2FuX3Jlc3VsdCBkcm1fZ3B1c3ZtX3NjYW5fbW0oc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlLFxcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0zODQtXFx0XFx0XFx0XFx0XFx0ICAgICAgIHZvaWQgKmRldl9wcml2YXRlX293bmVyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowNDowOC4zOTg1NzM2MTNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY3MzgwMDc0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgR1BVIFZpcnR1YWxpemF0aW9uIGFuZCBEcml2ZXIgSW50ZXJhY3Rpb25zKipcblxuT2theSwgc28gYGRybV9ncHVzdm1fc2Nhbl9tbWAgaXMgYmVpbmcgY2FsbGVkIGJ5IGB4ZV9zdm1fYWxsb2NfdnJhbWAgd2l0aGluIHRoZSBgeGVgIGRyaXZlciwgc3BlY2lmaWNhbGx5IGluIGBkcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmNgLiBUaGUgcXVlc3Rpb24gaW1tZWRpYXRlbHkgcG9wcGluZyBpbnRvIG15IGhlYWQgaXMsIGNhbiB0aGUgYHhlYCBkcml2ZXIsIEludGVsJ3MgWGUgZ3JhcGhpY3MgZHJpdmVyLCBldmVuIGJlIHRyaWdnZXJlZCB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gSXQncyBoYXJkd2FyZS1zcGVjaWZpYywgcmVxdWlyaW5nIGFjdHVhbCBJbnRlbCBYZSBzaWxpY29uLCBidXQgcGVyaGFwcyB0aGVyZSdzIGEgZnV6emluZyBhdmVudWUgdGhyb3VnaCBzb21ldGhpbmcgbGlrZSBWR0VNIG9yIFZLTVM/IE5vLCB0aGF0J3Mgbm90IHF1aXRlIHJpZ2h0OyBgeGVgIGlzIGEgKmhhcmR3YXJlKiBkcml2ZXIgdGhyb3VnaCBhbmQgdGhyb3VnaC5cblxuVGhlbiBteSBtaW5kIHNoaWZ0ZWQgdG8gY29uc2lkZXIgYG5vdXZlYXVfc3ZtLmNgLiBOb3csICp0aGF0KiB3b3VsZCBiZSBpbnRlcmVzdGluZy4gVGhlIE5WSURJQSBkcml2ZXIsIGBub3V2ZWF1YCwgYW5kIHRoZSBnZW5lcmFsIGNvbmNlcHQgb2YgR1BVIHZpcnR1YWxpemF0aW9uLi4uIGhvdyBtaWdodCB0aGF0IHBsYXkgb3V0PyBBbnkgcmVsZXZhbnQgaW50ZXJhY3Rpb25zIHdpdGggYGRybV9ncHVzdm1fZ2V0X3BhZ2VzYCB0aGF0IGNvdWxkIHByb3ZpZGUgYSBkaWZmZXJlbnQgZW50cnkgcG9pbnQgaW50byB0aGUgb3ZlcmFsbCBmbG93PyBJIHNob3VsZCBkaWcgaW50byB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzEyOSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowNDoxMy4wNzIzODE1NDJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzc1MDEwODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHJtX2dwdXN2bV9nZXRfcGFnZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3Q9OTE9UG9zc2libGUgZnV0dXJlIGRlc2lnbiBmZWF0dXJlc1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3QtMTAwLSogUmFuZ2VzIHdpdGggbWl4ZWQgc3lzdGVtIGFuZCBkZXZpY2UgcGFnZXNcXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdDoxMDE6XFx0KiBDYW4gYmUgYWRkZWQgaWYgcmVxdWlyZWQgdG8gZHJtX2dwdXN2bV9nZXRfcGFnZXMgZmFpcmx5IGVhc2lseS5cXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC0xMDItKiBNdWx0aS1HUFUgc3VwcG9ydFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMzQtICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjIzNTogKlxcdFxcdGVyciA9IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKGdwdXN2bSwgXFx1MDAyNmRyYW5nZS1cXHUwMDNlcGFnZXMsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMzYtICpcXHRcXHRcXHRcXHRcXHQgICBncHVzdm0tXFx1MDAzZW1tLCBcXHUwMDI2cmFuZ2UtXFx1MDAzZW5vdGlmaWVyLVxcdTAwM2Vub3RpZmllcixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM9NDM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVyX29wcyBkcm1fZ3B1c3ZtX25vdGlmaWVyX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDU2LSAqIG1hcHBpbmdzIGlzIGJvdW5kIHBlci1wYWdlcyB2aWEgZHJtX2dwdXN2bV9pbml0X3BhZ2VzKCkgYmVmb3JlIHRoZSBmaXJzdFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDU3OiAqIGRybV9ncHVzdm1fZ2V0X3BhZ2VzKCkgY2FsbC4gSG93ZXZlciwgdGhlIHNhbWUgYmFzZVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDU4LSAqIEBncHVzdm0gY2FuIGFsc28gYmUgdXNlZCB3aXRoIGJvdGggbW9kZXMgdG9nZXRoZXIgaW4gd2hpY2ggY2FzZSB0aGUgZnVsbFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz05NDg9ZHJtX2dwdXN2bV9yYW5nZV9jaHVua19zaXplKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk5NC1cXHRcXHQgKiBkcm1fcGFnZW1hcF9taWdyYXRlX3RvX2Rldm1lbSB3aXRoICdtaWdyYXRlLmNwYWdlcyAhPSBucGFnZXMnXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5OTU6XFx0XFx0ICogYW5kIHRoZW4gdXBvbiBkcm1fZ3B1c3ZtX2dldF9wYWdlcyBkZXZpY2UgcGFnZXMgZnJvbVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTk2LVxcdFxcdCAqIG90aGVyIHByb2Nlc3NlcyBhcmUgY29sbGVjdGVkICsgZmF1bHRlZCBpbiB3aGljaCBjcmVhdGVzIGFsbFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz0xNDEyPXN0YXRpYyBib29sIGRybV9ncHVzdm1fcGFnZXNfdmFsaWRfdW5sb2NrZWQoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTQyOS0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE0MzA6ICogZHJtX2dwdXN2bV9nZXRfcGFnZXMoKSAtIEdldCBwYWdlcyBhbmQgcG9wdWxhdGUgR1BVIFNWTSBwYWdlcyBzdHJ1Y3RcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE0MzEtICogQGdwdXN2bTogUG9pbnRlciB0byB0aGUgR1BVIFNWTSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTQ0My0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE0NDQ6aW50IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNDQ1LVxcdFxcdFxcdCBzdHJ1Y3QgZHJtX2dwdXN2bV9wYWdlcyAqc3ZtX3BhZ2VzLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNjYxLX1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE2NjI6RVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXN2bV9nZXRfcGFnZXMpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTY2My1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz0xNTMzPWludCB4ZV9zdm1fcmFuZ2VfZ2V0X3BhZ2VzKHN0cnVjdCB4ZV92bSAqdm0sIHN0cnVjdCB4ZV9zdm1fcmFuZ2UgKnJhbmdlLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE1MzctXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjE1Mzg6XFx0ZXJyID0gZHJtX2dwdXN2bV9nZXRfcGFnZXMoXFx1MDAyNnZtLVxcdTAwM2Vzdm0uZ3B1c3ZtLCBcXHUwMDI2cmFuZ2UtXFx1MDAzZXBhZ2VzLFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xNTM5LVxcdFxcdFxcdFxcdCAgIHZtLVxcdTAwM2Vzdm0uZ3B1c3ZtLm1tLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3VzZXJwdHIuYz02MD1pbnQgeGVfdm1hX3VzZXJwdHJfcGluX3BhZ2VzKHN0cnVjdCB4ZV91c2VycHRyX3ZtYSAqdXZtYSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV91c2VycHRyLmMtNzYtXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3VzZXJwdHIuYzo3NzpcXHRyZXR1cm4gZHJtX2dwdXN2bV9nZXRfcGFnZXMoXFx1MDAyNnZtLVxcdTAwM2Vzdm0uZ3B1c3ZtLCBcXHUwMDI2dXZtYS1cXHUwMDNldXNlcnB0ci5wYWdlcyxcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdXNlcnB0ci5jLTc4LVxcdFxcdFxcdFxcdCAgICB1dm1hLVxcdTAwM2V1c2VycHRyLm5vdGlmaWVyLm1tLFxcbi0tXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oPTMyMD12b2lkIGRybV9ncHVzdm1fcmFuZ2Vfc2V0X3VubWFwcGVkKHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSxcXG4tLVxcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0zMjQtXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oOjMyNTppbnQgZHJtX2dwdXN2bV9nZXRfcGFnZXMoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmgtMzI2LVxcdFxcdFxcdCBzdHJ1Y3QgZHJtX2dwdXN2bV9wYWdlcyAqc3ZtX3BhZ2VzLFxcbi0tXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oPTMzNz12b2lkIGRybV9ncHVzdm1fZnJlZV9wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbi0tXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oLTM0Ny0gKiBzdHJ1Y3R1cmUgbXVzdCBjYWxsIHRoaXMgb25jZSBvbiBlYWNoIHBhZ2VzIGluc3RhbmNlIGFmdGVyIGFsbG9jYXRpb24sXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oOjM0ODogKiBiZWZvcmUgdGhlIGZpcnN0IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKCkgLyB1bm1hcCAvIGZyZWUuXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oLTM0OS0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDQ6MTUuMzA5ODg3OTI1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4ODU0MDMzOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIERSTSBHUFUgU1ZNIFVzYWdlIGluIFN5emthbGxlciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGRybV9ncHVzdm1fZ2V0X3BhZ2VzYC4gSXQncyB1c2VkIGJ5IHRoZSBgeGVgIGRyaXZlciwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgeGVfc3ZtX3JhbmdlX2dldF9wYWdlc2AgYW5kIGB4ZV92bWFfdXNlcnB0cl9waW5fcGFnZXNgLiBSaWdodCwgYGRybV9ncHVzdm1gIGlzIGEgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb24sIGVzc2VudGlhbGx5IGEgRFJNLWxldmVsIGFic3RyYWN0aW9uIGZvciBHUFUgU2hhcmVkIFZpcnR1YWwgTWVtb3J5LiBJdCBzZWVtcyBsaWtlIHRoZSBgeGVgIGRyaXZlciBpcyBjdXJyZW50bHkgdGhlIHByaW1hcnkgdXNlci4gSG9sZCBvbiBhIHNlY29uZCwgd2hhdCBhYm91dCB0aGUgb3RoZXIgZHJpdmVycz9cblxuSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGxhbmRzY2FwZS4gYG5vdXZlYXVfc3ZtLmNgIGltcGxlbWVudHMgU1ZNIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBgbm91dmVhdWAgZHJpdmVyLiBBbmQgSSBhbHNvIHNlZSBhIHNpbWlsYXIgZmlsZSBmb3IgdGhlIGFtZHhkbmEgZHJpdmVyIGBhaWUyX2N0eC5jYC5cblxuTm93IHRoZSBxdWVzdGlvbiBpcywgYXJlIGFueSBvZiB0aGVzZSBkcml2ZXJzIHJlYWNoYWJsZSBieSBzeXprYWxsZXI/IGBub3V2ZWF1YCBpcyBhIHRyaWNreSBvbmUuIFN5emthbGxlciAqY2FuKiBmdXp6IGl0IGlmIHlvdSdyZSB1c2luZyBhIHZpcnR1YWwgR1BVIG9yIHNvbWUga2luZCBvZiBtb2NraW5nIHNldHVwLCBidXQgaXQgdHlwaWNhbGx5IG5lZWRzIHJlYWwgaGFyZHdhcmUgdG8gcmVhbGx5IHRlc3QgdGhlIGZ1bmN0aW9uYWxpdHkuIFRoYXQncyBhIGh1Z2UgaHVyZGxlIHRvIG92ZXJjb21lLlxuXG5UaGlua2luZyBhYm91dCBvdGhlciBkcml2ZXJzLCBJIHNlZSBob3cgdGhleSd2ZSBtYW5hZ2VkIHRvIGFjaGlldmUgc29tZSBsZXZlbCBvZiBzeXprYWxsZXIgY292ZXJhZ2UsIHdpdGggdGhlIGxpa2VzIG9mIGBzeXotdXNiYCBhbmQgYHZoY2lgIGZvciBVU0IgZGV2aWNlcywgYG1hYzgwMjExX2h3c2ltYCBmb3Igd2lmaS4gQW5kIHdpdGhpbiBEUk0sIHN5emthbGxlciBsZXZlcmFnZXMgYHZrbXNgIGFuZCBgdmdlbWAgYXMgYSB2aXJ0dWFsIGRldmljZS5cblxuQnV0IGB4ZWAsIGBub3V2ZWF1YCwgYW5kIGBhbWR4ZG5hYCBhcmUgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycy4gVGhhdCdzIGEgdG91Z2ggY29uc3RyYWludC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGVhc2lseSBhY2Nlc3NpYmxlLlxuXG5PaCwgYW5kIGhlcmUncyBhIHRob3VnaHQsIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAgaXMgYSBjb3JlIG1tL2htbSBmdW5jdGlvbi4gSXMgaXQgdXNlZCBieSBhbnkgb3RoZXIgZHJpdmVycyBiZXNpZGVzIHRoZSBvbmVzIEkndmUgYWxyZWFkeSBjb25zaWRlcmVkPyBUaGF0IGNvdWxkIHByb3ZpZGUgYSBtb3JlIGdlbmVyYWxpemVkIGVudHJ5IHBvaW50IGZvciBmdXp6aW5nLiBUaGF0J3MgdGhlIGtleTogYSBtb3JlIGdlbmVyaWMgYWNjZXNzIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDkxOSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowNDoyMy4xOTUyOTQ5MTVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MTU5ODIxMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTE2MD1ub3JtYWwgaW50ZXJmYWNlIGlzOjpcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMTYxLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoxNjI6ICBpbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTE2My0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTE2OT1UaGUgY2FsbGVyIG11c3Qgbm90IGhvbGQgYGBtbWFwX3JlYWRfbG9ja2BgIGJlZm9yZSB0aGUgY2FsbC5cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MTcwOmBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgIHRha2VzIHRoZSBtbWFwIHJlYWQgbG9jayBpbnRlcm5hbGx5IGFuZFxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0xNzEtYWxsb3dzIGBgaGFuZGxlX21tX2ZhdWx0KClgYCB0byBkcm9wIGl0IGR1cmluZyBmYXVsdCBoYW5kbGluZy4gVGhpcyBpcyByZXF1aXJlZFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTE4Nj1UaGUgdXNhZ2UgcGF0dGVybiBpczo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjAzLSBhZ2FpbjpcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjA0OiAgICAgIHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZyYW5nZSwgdGltZW91dCk7XFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTIwNS0gICAgICBpZiAocmV0KVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTIyOD11cGRhdGUuIFRoZSByZXRyeSBjaGVjayBtdXN0IHVzZSB0aGUgc2FtZSBub3RpZmllciBhbmQgc2VxdWVuY2UgbnVtYmVyIHN0b3JlZFxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoyMjk6aW4gYGByYW5nZWBgIGJ5IGBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgLlxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yMzAtXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTIzMT1Ib2xkaW5nIHRoZSBtbWFwIGxvY2sgYWNyb3NzIEhNTSBmYXVsdHNcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yMzMtXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjIzNDpNb3N0IGNhbGxlcnMgc2hvdWxkIHVzZSBgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KClgYC4gSWYgYSBkcml2ZXJcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjM1LXJlYWxseSBuZWVkcyB0byBob2xkIHRoZSBtbWFwIGxvY2sgYWNyb3NzIHdvcmsgb3V0c2lkZSBITU0sIGl0IGNhbiB1c2U6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTI0MD1pbnRlcmZhY2UgY2Fubm90IHN1cHBvcnQgVk1BcyB3aG9zZSBmYXVsdCBoYW5kbGVycyBuZWVkIHRvIGRyb3AgdGhlIG1tYXAgbG9jay5cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjQxOk5ldyBjYWxsZXJzIHNob3VsZCBwcmVmZXIgYGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpYGAgdW5sZXNzIHRoZXlcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjQyLWhhdmUgYSBzcGVjaWZpYyByZXF1aXJlbWVudCB0byBrZWVwIHRoZSBtbWFwIGxvY2sgaGVsZCBhY3Jvc3MgdGhlIGNhbGwuXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYz0xMDMxPXN0YXRpYyBpbnQgYWllMl9wb3B1bGF0ZV9yYW5nZShzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICphYm8pXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYy0xMDY0LVxcbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jOjEwNjU6XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXFx1MDAyNm1hcHAtXFx1MDAzZXJhbmdlLCB0aW1lb3V0KTtcXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYy0xMDY2LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jPTg0MT1lbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgZHJtX2dwdXN2bV9zY2FuX21tKHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODY4LXJldHJ5OlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODY5OlxcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZobW1fcmFuZ2UsIHRpbWVvdXQpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODcwLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jPTE0NDQ9aW50IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE0OTEtXFx0aG1tX3JhbmdlLmhtbV9wZm5zID0gcGZucztcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE0OTI6XFx0ZXJyID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXFx1MDAyNmhtbV9yYW5nZSwgdGltZW91dCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNDkzLVxcdG1tcHV0KG1tKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM9MTcwMz1pbnQgZHJtX2dwdXN2bV9yYW5nZV9ldmljdChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNzI4LVxcdGhtbV9yYW5nZS5obW1fcGZucyA9IHBmbnM7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNzI5OlxcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZobW1fcmFuZ2UsIHRpbWVvdXQpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTczMC1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmM9NjUyPXN0YXRpYyBpbnQgbm91dmVhdV9yYW5nZV9mYXVsdChzdHJ1Y3Qgbm91dmVhdV9zdm1tICpzdm1tLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uYy02OTMtXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uYzo2OTQ6XFx0XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXFx1MDAyNnJhbmdlLCByZW1haW5pbmcpO1xcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmMtNjk1LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jPTM5Nj1zdGF0aWMgaW50IG1zaHZfcmVnaW9uX3JhbmdlX2ZhdWx0KHN0cnVjdCBtc2h2X21lbV9yZWdpb24gKnJlZ2lvbixcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmMtNDE1LWFnYWluOlxcbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmM6NDE2OlxcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZyYW5nZSwgMCk7XFxuZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYy00MTctXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmM9MzI0PWludCBpYl91bWVtX29kcF9tYXBfZG1hX2FuZF9sb2NrKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHAsIHU2NCB1c2VyX3ZpcnQsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jLTM2OC1yZXRyeTpcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jOjM2OTpcXHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcXHUwMDI2cmFuZ2UsIHRpbWVvdXQpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmMtMzcwLVxcdGlmICh1bmxpa2VseShyZXQpKVxcbi0tXFxuaW5jbHVkZS9saW51eC9obW0uaD0xMjU9aW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSk7XFxuaW5jbHVkZS9saW51eC9obW0uaDoxMjY6aW50IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLFxcbmluY2x1ZGUvbGludXgvaG1tLmgtMTI3LVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTtcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTM5Mj1zdGF0aWMgaW50IGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXFxuLS1cXG5saWIvdGVzdF9obW0uYy0zOTgtXFx0d2hpbGUgKHRydWUpIHtcXG5saWIvdGVzdF9obW0uYzozOTk6XFx0XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQocmFuZ2UsIHRpbWVvdXQpO1xcbmxpYi90ZXN0X2htbS5jLTQwMC1cXHRcXHRpZiAocmV0KVxcbi0tXFxubW0vaG1tLmM9Njg5PXN0YXRpYyBpbnQgaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSwgYm9vbCAqbG9ja2VkKVxcbi0tXFxubW0vaG1tLmMtNzUzLSAqIFRoZSBtbWFwIGxvY2sgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIgYW5kIHdpbGwgcmVtYWluIGhlbGQgb24gcmV0dXJuLlxcbm1tL2htbS5jOjc1NDogKiBOZXcgdXNlcnMgc2hvdWxkIHByZWZlciBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpIHVubGVzcyB0aGV5XFxubW0vaG1tLmMtNzU1LSAqIHNwZWNpZmljYWxseSBuZWVkIHRvIGtlZXAgdGhlIG1tYXAgbG9jayBoZWxkIGFjcm9zcyB0aGUgY2FsbC4gVGhpcyBoZWxwZXJcXG4tLVxcbm1tL2htbS5jPTc2Mj1FWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV9mYXVsdCk7XFxuLS1cXG5tbS9obW0uYy03NjQtLyoqXFxubW0vaG1tLmM6NzY1OiAqIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0IC0gZmF1bHQgaW4gYSByYW5nZSB3aXRoIGEgcmV0cnkgdGltZW91dFxcbm1tL2htbS5jLTc2Ni0gKiBAcmFuZ2U6XFx0YXJndW1lbnQgc3RydWN0dXJlXFxuLS1cXG5tbS9obW0uYy03ODMtICovXFxubW0vaG1tLmM6Nzg0OmludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSxcXG5tbS9obW0uYy03ODUtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpXFxuLS1cXG5tbS9obW0uYy04MjQtfVxcbm1tL2htbS5jOjgyNTpFWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KTtcXG5tbS9obW0uYy04MjYtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz0yOTA0PVRFU1RfRl9USU1FT1VUKGhtbSwgYmVuY2htYXJrX3RocF9taWdyYXRpb24sIDEyMClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTI5NjAtICogVGVzdCB0aGF0IEhNTSBjYW4gZmF1bHQgaW4gcGFnZXMgYmFja2VkIGJ5IHVzZXJmYXVsdGZkIHVzaW5nIHRoZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjI5NjE6ICogaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKSBwYXRoIHdpdGggbm8gdGltZW91dC4gVGhpcyBleGVyY2lzZXNcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yOTYyLSAqIHRoZSBsb2NrLWRyb3AgcmV0cnkgbG9naWMgaW4gdGhlIEhNTSBmcmFtZXdvcmsuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjA0OjI2LjcxMTI4MjkyNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzU1NzIyMzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgZGVsdmUgaW50byB0aGlzLlxuXG4qKkludmVzdGlnYXRpbmcgYSBUaW1lb3V0IGluIHRoZSBITU0gU3lzdGVtKipcblxuQWxyaWdodCwgc28gYGxpYi90ZXN0X2htbS5jYCBpcyB1c2luZyBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgLiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2h5IHRoaXMgaXMgcmVsZXZhbnQgdG8gdGhlIHBhdGNoIGluIHF1ZXN0aW9uLiBUaGUgaW5pdGlhbCBhc3N1bXB0aW9uIHdvdWxkIGJlIGEgZGlyZWN0IGNvbm5lY3Rpb24sIGJ1dCB3YWl0LCB0aGUgcGF0Y2ggKmRpZG4ndCogdG91Y2ggZWl0aGVyIGBsaWIvdGVzdF9obW0uY2Agb3IgYGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmNgLiBUaGF0IG1lYW5zIHRoZSBjb25uZWN0aW9uIGlzbid0IGFzIG9idmlvdXMgYXMgSSBpbml0aWFsbHkgdGhvdWdodC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB0aW1lb3V0IHBhcmFtZXRlciBpcyBiZWluZyBwYXNzZWQgd2l0aGluIGBsaWIvdGVzdF9obW0uY2AuIFNvLCBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhhdCBzcGVjaWZpYyB0ZXN0IGZpbGUgdG8gc2VlIGhvdyBpdCdzIGFjdHVhbGx5IHVzaW5nIHRoZSBgdGltZW91dGAgdmFyaWFibGUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiwgYW5kIGhvcGVmdWxseSwgdGhhdCB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODUzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDQ6MzIuMDY3MDA3OTEzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvdGVzdF9obW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzODA6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDM4MTpcXHRcXHRcXHR9XFxuIDM4MjpcXHRcXHRcXHRicmVhaztcXG4gMzgzOlxcdFxcdH1cXG4gMzg0OlxcdFxcbiAzODU6XFx0XFx0cmV0ID0gZG1pcnJvcl9kb19mYXVsdChkbWlycm9yLCByYW5nZSk7XFxuIDM4NjpcXHRcXG4gMzg3OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZG1pcnJvci1cXHUwMDNlbXV0ZXgpO1xcbiAzODg6XFx0b3V0OlxcbiAzODk6XFx0XFx0cmV0dXJuIHJldDtcXG4gMzkwOlxcdH1cXG4gMzkxOlxcdFxcbiAzOTI6XFx0c3RhdGljIGludCBkbWlycm9yX3JhbmdlX2ZhdWx0X3VubG9ja2VkKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxcbiAzOTM6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXFxuIDM5NDpcXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQpXFxuIDM5NTpcXHR7XFxuIDM5NjpcXHRcXHRpbnQgcmV0O1xcbiAzOTc6XFx0XFxuIDM5ODpcXHRcXHR3aGlsZSAodHJ1ZSkge1xcbiAzOTk6XFx0XFx0XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQocmFuZ2UsIHRpbWVvdXQpO1xcbiA0MDA6XFx0XFx0XFx0aWYgKHJldClcXG4gNDAxOlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiA0MDI6XFx0XFxuIDQwMzpcXHRcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZkbWlycm9yLVxcdTAwM2VtdXRleCk7XFxuIDQwNDpcXHRcXHRcXHRpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkocmFuZ2UtXFx1MDAzZW5vdGlmaWVyLFxcbiA0MDU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHJhbmdlLVxcdTAwM2Vub3RpZmllcl9zZXEpKSB7XFxuIDQwNjpcXHRcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRtaXJyb3ItXFx1MDAzZW11dGV4KTtcXG4gNDA3OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA0MDg6XFx0XFx0XFx0fVxcbiA0MDk6XFx0XFx0XFx0YnJlYWs7XFxuIDQxMDpcXHRcXHR9XFxuIDQxMTpcXHRcXG4gNDEyOlxcdFxcdHJldCA9IGRtaXJyb3JfZG9fZmF1bHQoZG1pcnJvciwgcmFuZ2UpO1xcbiA0MTM6XFx0XFxuIDQxNDpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRtaXJyb3ItXFx1MDAzZW11dGV4KTtcXG4gNDE1OlxcdG91dDpcXG4gNDE2OlxcdFxcdHJldHVybiByZXQ7XFxuIDQxNzpcXHR9XFxuIDQxODpcXHRcXG4gNDE5OlxcdHN0YXRpYyBpbnQgZG1pcnJvcl9mYXVsdF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG4gNDIwOlxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4gNDIxOlxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgd3JpdGUsXFxuIDQyMjpcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgdGltZW91dClcXG4gNDIzOlxcdHtcXG4gNDI0OlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gZG1pcnJvci1cXHUwMDNlbm90aWZpZXIubW07XFxuIDQyNTpcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHI7XFxuIDQyNjpcXHRcXHR1bnNpZ25lZCBsb25nIHBmbnNbMzJdO1xcbiA0Mjc6XFx0XFx0c3RydWN0IGhtbV9yYW5nZSByYW5nZSA9IHtcXG4gNDI4OlxcdFxcdFxcdC5ub3RpZmllciA9IFxcdTAwMjZkbWlycm9yLVxcdTAwM2Vub3RpZmllcixcXG4gNDI5OlxcdFxcdFxcdC5obW1fcGZucyA9IHBmbnMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjA0OjMyLjA2NzEyOTI2M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzEwNDg1NjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYHRpbWVvdXRgIFZhcmlhYmxlIGluIGBsaWIvdGVzdF9obW0uY2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbGliL3Rlc3RfaG1tLmNgIGFuZCBJIGltbWVkaWF0ZWx5IHNwb3QgdGhlIGB0aW1lb3V0YCB2YXJpYWJsZSBiZWluZyBwYXNzZWQgZGlyZWN0bHksIGFuZCB0aGF0IHRyaWdnZXJzIGEgcXVlc3Rpb24uIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgdGhhdCBgdGltZW91dGAgaXMgcGFzc2VkIHJpZ2h0IGludG8gc29tZSBmdW5jdGlvbiBjYWxsLiBCdXQsIHRoZSBxdWVzdGlvbiBub3cgaXMsIHdoZXJlIHRoZSBoZWNrIGlzIHRoaXMgYHRpbWVvdXRgIHZhcmlhYmxlIGJlaW5nICpkZWZpbmVkKj8gSSBuZWVkIHRvIHRyYWNlIGJhY2sgaXRzIG9yaWdpbi4gSXMgaXQgY29taW5nIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUsIGEgY29uZmlndXJhdGlvbiBmaWxlLCBvciBpcyBpdCBoYXJkY29kZWQgc29tZXdoZXJlIHVwc3RyZWFtIGluIHRoZSBidWlsZCBwcm9jZXNzPyBJJ20gZ29pbmcgdG8gaGF2ZSB0byBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSwgdGhlIGJ1aWxkIHN5c3RlbSAoTWFrZWZpbGUsIENNYWtlTGlzdHMudHh0LCB3aGF0ZXZlciksIGFuZCBhbnkgcmVsZXZhbnQgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgdmFsdWUgZm9yIGB0aW1lb3V0YCBpcyBiZWluZyBzZXQuIEl0J3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgdGVzdCdzIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGlmIHRoaXMgdmFsdWUgaXNuJ3QgcHJvcGVybHkgY29udHJvbGxlZCBvciBzYW5pdGl6ZWQuIEl0J3MgYSBjbGFzc2ljIGV4YW1wbGUgb2YgbG9va2luZyBmb3IgdGhlIHNvdXJjZSBvZiBhIHBhcmFtZXRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3OTIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjA0OjM2LjM3NzYxODE2N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL3Rlc3RfaG1tLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDE5LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDE5OlxcdHN0YXRpYyBpbnQgZG1pcnJvcl9mYXVsdF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG4gNDIwOlxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4gNDIxOlxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgd3JpdGUsXFxuIDQyMjpcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgdGltZW91dClcXG4gNDIzOlxcdHtcXG4gNDI0OlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gZG1pcnJvci1cXHUwMDNlbm90aWZpZXIubW07XFxuIDQyNTpcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHI7XFxuIDQyNjpcXHRcXHR1bnNpZ25lZCBsb25nIHBmbnNbMzJdO1xcbiA0Mjc6XFx0XFx0c3RydWN0IGhtbV9yYW5nZSByYW5nZSA9IHtcXG4gNDI4OlxcdFxcdFxcdC5ub3RpZmllciA9IFxcdTAwMjZkbWlycm9yLVxcdTAwM2Vub3RpZmllcixcXG4gNDI5OlxcdFxcdFxcdC5obW1fcGZucyA9IHBmbnMsXFxuIDQzMDpcXHRcXHRcXHQucGZuX2ZsYWdzX21hc2sgPSAwLFxcbiA0MzE6XFx0XFx0XFx0LmRlZmF1bHRfZmxhZ3MgPVxcbiA0MzI6XFx0XFx0XFx0XFx0SE1NX1BGTl9SRVFfRkFVTFQgfCAod3JpdGUgPyBITU1fUEZOX1JFUV9XUklURSA6IDApLFxcbiA0MzM6XFx0XFx0XFx0LmRldl9wcml2YXRlX293bmVyID0gZG1pcnJvci1cXHUwMDNlbWRldmljZSxcXG4gNDM0OlxcdFxcdH07XFxuIDQzNTpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gNDM2OlxcdFxcbiA0Mzc6XFx0XFx0aWYgKCFtbWdldF9ub3RfemVybyhtbSkpXFxuIDQzODpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gNDM5OlxcdFxcbiA0NDA6XFx0XFx0Zm9yIChhZGRyID0gc3RhcnQ7IGFkZHIgXFx1MDAzYyBlbmQ7IGFkZHIgPSByYW5nZS5lbmQpIHtcXG4gNDQxOlxcdFxcdFxcdHJhbmdlLnN0YXJ0ID0gYWRkcjtcXG4gNDQyOlxcdFxcdFxcdHJhbmdlLmVuZCA9IG1pbihhZGRyICsgKEFSUkFZX1NJWkUocGZucykgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCksIGVuZCk7XFxuIDQ0MzpcXHRcXG4gNDQ0OlxcdFxcdFxcdHJldCA9IGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWQoZG1pcnJvciwgXFx1MDAyNnJhbmdlLCB0aW1lb3V0KTtcXG4gNDQ1OlxcdFxcdFxcdGlmIChyZXQpXFxuIDQ0NjpcXHRcXHRcXHRcXHRicmVhaztcXG4gNDQ3OlxcdFxcdH1cXG4gNDQ4OlxcdFxcbiA0NDk6XFx0XFx0bW1wdXQobW0pO1xcbiA0NTA6XFx0XFx0cmV0dXJuIHJldDtcXG4gNDUxOlxcdH1cXG4gNDUyOlxcdFxcbiA0NTM6XFx0c3RhdGljIGludCBkbWlycm9yX2ZhdWx0KHN0cnVjdCBkbWlycm9yICpkbWlycm9yLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbiA0NTQ6XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgZW5kLCBib29sIHdyaXRlKVxcbiA0NTU6XFx0e1xcbiA0NTY6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBkbWlycm9yLVxcdTAwM2Vub3RpZmllci5tbTtcXG4gNDU3OlxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcjtcXG4gNDU4OlxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuc1szMl07XFxuIDQ1OTpcXHRcXHRzdHJ1Y3QgaG1tX3JhbmdlIHJhbmdlID0ge1xcbiA0NjA6XFx0XFx0XFx0Lm5vdGlmaWVyID0gXFx1MDAyNmRtaXJyb3ItXFx1MDAzZW5vdGlmaWVyLFxcbiA0NjE6XFx0XFx0XFx0LmhtbV9wZm5zID0gcGZucyxcXG4gNDYyOlxcdFxcdFxcdC5wZm5fZmxhZ3NfbWFzayA9IDAsXFxuIDQ2MzpcXHRcXHRcXHQuZGVmYXVsdF9mbGFncyA9XFxuIDQ2NDpcXHRcXHRcXHRcXHRITU1fUEZOX1JFUV9GQVVMVCB8ICh3cml0ZSA/IEhNTV9QRk5fUkVRX1dSSVRFIDogMCksXFxuIDQ2NTpcXHRcXHRcXHQuZGV2X3ByaXZhdGVfb3duZXIgPSBkbWlycm9yLVxcdTAwM2VtZGV2aWNlLFxcbiA0NjY6XFx0XFx0fTtcXG4gNDY3OlxcdFxcdGludCByZXQgPSAwO1xcbiA0Njg6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjA0OjM2LjM3Nzc0MDY2N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDUzMzIyNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZTpcblxuKipGaW5kaW5nIHRoZSBDYWxsZXJzIG9mIGBkbWlycm9yX2ZhdWx0X3VubG9ja2VkYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBkbWlycm9yX2ZhdWx0X3VubG9ja2VkYC4gSXQncyBuYW1lZCBpbiBhIHdheSB0aGF0IHN1Z2dlc3RzIGl0J3MgcmVsYXRlZCB0byBzb21lIGtpbmQgb2YgZGF0YSBtaXJyb3JpbmcsIHBlcmhhcHMgYSBmYXVsdCBjb25kaXRpb24sIGFuZCBwb3NzaWJseSB3b3JraW5nIHdpdGggYW4gdW5sb2NrZWQgbXV0ZXguIFRoZSBcInVubG9ja2VkXCIgcGFydCBpcyBpbXBvcnRhbnQ7IGl0IGltcGxpZXMgYSBjcml0aWNhbCBzZWN0aW9uIGlzICpub3QqIHByb3RlY3RlZCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZCwgc28gY29uY3VycmVuY3kgY29uc2lkZXJhdGlvbnMgYmVjb21lIHBhcmFtb3VudC4gRmlyc3QsIEkgbmVlZCB0byBwaW5wb2ludCBldmVyeXdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgY2FsbGVkIHdpdGhpbiB0aGUgY29kZWJhc2UuIFRoZSBzaGVlciBudW1iZXIgb2YgbG9jYXRpb25zIHdpbGwgZ2l2ZSBtZSBhIGdvb2QgaW5kaWNhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uJ3Mgb3ZlcmFsbCBzaWduaWZpY2FuY2UgdG8gdGhlIHNvZnR3YXJlIGFuZCB3aWxsIGhlbHAgbWUgbmFycm93IGRvd24gd2hlcmUgaXQncyBtb3N0IGltcG9ydGFudCB0byBhbmFseXplLiBPbmNlIEkga25vdyB0aGUgY2FsbGluZyBwb2ludHMsIEkgY2FuIHN0YXJ0IGxvb2tpbmcgYXQgdGhlIGltbWVkaWF0ZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljIG9wZXJhdGlvbnMgaGFwcGVuaW5nIGFyb3VuZCB0aGF0IGZhdWx0IGhhbmRsaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTgyNCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDQ6NDIuNDMxMDY2MDM2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzY4NDIzODI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRtaXJyb3JfZmF1bHRfdW5sb2NrZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL3Rlc3RfaG1tLmM9MzkyPXN0YXRpYyBpbnQgZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTQxOC1cXG5saWIvdGVzdF9obW0uYzo0MTk6c3RhdGljIGludCBkbWlycm9yX2ZhdWx0X3VubG9ja2VkKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxcbmxpYi90ZXN0X2htbS5jLTQyMC1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5saWIvdGVzdF9obW0uYz01NTI9c3RhdGljIGludCBkbWlycm9yX3JlYWRfdW5sb2NrZWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXFxuLS1cXG5saWIvdGVzdF9obW0uYy01NzctXFx0XFx0c3RhcnQgPSBjbWQtXFx1MDAzZWFkZHIgKyAoYm91bmNlLmNwYWdlcyBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKTtcXG5saWIvdGVzdF9obW0uYzo1Nzg6XFx0XFx0cmV0ID0gZG1pcnJvcl9mYXVsdF91bmxvY2tlZChkbWlycm9yLCBzdGFydCwgZW5kLCBmYWxzZSwgdGltZW91dCk7XFxubGliL3Rlc3RfaG1tLmMtNTc5LVxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjA0OjQ0Ljc5OTUwMjU1NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDAyNzgwOTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBgdGVzdF9obW0uY2AgQ29udW5kcnVtKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbiBpbiBgbGliL3Rlc3RfaG1tLmNgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhhdCBgZG1pcnJvcl9yZWFkX3VubG9ja2VkYCBmdW5jdGlvbiBjYWxsLiBJIHJlY29nbml6ZSB0aGF0IG5hbWluZyBjb252ZW50aW9uLCBzbyBJJ20gdGhpbmtpbmcgdGhpcyBsaWtlbHkgaW52b2x2ZXMgc29tZSBzb3J0IG9mIGRpcmVjdCBtZW1vcnkgYWNjZXNzIHJlbGF0ZWQgdG8gYSBtaXJyb3Igb3IgZHVwbGljYXRlIGRhdGEgc3RydWN0dXJlLCBhbmQgdGhlIFwidW5sb2NrZWRcIiBwYXJ0IHN1Z2dlc3RzIHdlJ3JlIGJ5cGFzc2luZyB0eXBpY2FsIGNvbmN1cnJlbmN5IGNvbnRyb2xzLiBLbm93aW5nIHRoZSBwcm9qZWN0IGFuZCB0aGUgY29udGV4dCBpcyBrZXkgaGVyZSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljcy4gSXMgdGhpcyBhIHJlYWQtb25seSBhY2Nlc3M/IFdoYXQncyB0aGUgbG9jayBwcm90ZWN0aW5nPyBXaGF04oCZcyB0aGUgaW1wbGljYXRpb24gb2YgYnlwYXNzaW5nIHRoZSBsb2NrPyBJcyBpdCBmb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBvciBpcyB0aGVyZSBhIHJlYXNvbiB0aGlzIHBhcnRpY3VsYXIgY29kZSBzZWN0aW9uIGRvZXNuJ3QgbmVlZCB0aGUgbG9jaz8gSSBuZWVkIHRvIGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgdGhlIHBvdGVudGlhbCByaXNrcyBvciBiZW5lZml0cyBvZiB1c2luZyB0aGlzIHVubG9ja2VkIHJlYWQuIE15IGV4cGVydGlzZSBzaG91bGQgYWxsb3cgbWUgdG8gc3BvdCBhbnkgcmVkIGZsYWdzIHJlbGF0ZWQgdG8gZGF0YSBjb3JydXB0aW9uLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjg0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDQ6NDguODAyMjg1NjYyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvdGVzdF9obW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NTA6XFx0fVxcbiA1NTE6XFx0XFxuIDU1MjpcXHRzdGF0aWMgaW50IGRtaXJyb3JfcmVhZF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG4gNTUzOlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kICpjbWQsXFxuIDU1NDpcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyB0aW1lb3V0KVxcbiA1NTU6XFx0e1xcbiA1NTY6XFx0XFx0c3RydWN0IGRtaXJyb3JfYm91bmNlIGJvdW5jZTtcXG4gNTU3OlxcdFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDtcXG4gNTU4OlxcdFxcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGNtZC1cXHUwMDNlbnBhZ2VzIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxuIDU1OTpcXHRcXHRpbnQgcmV0O1xcbiA1NjA6XFx0XFxuIDU2MTpcXHRcXHRzdGFydCA9IGNtZC1cXHUwMDNlYWRkcjtcXG4gNTYyOlxcdFxcdGVuZCA9IHN0YXJ0ICsgc2l6ZTtcXG4gNTYzOlxcdFxcdGlmIChlbmQgXFx1MDAzYyBzdGFydClcXG4gNTY0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1NjU6XFx0XFxuIDU2NjpcXHRcXHRyZXQgPSBkbWlycm9yX2JvdW5jZV9pbml0KFxcdTAwMjZib3VuY2UsIHN0YXJ0LCBzaXplKTtcXG4gNTY3OlxcdFxcdGlmIChyZXQpXFxuIDU2ODpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA1Njk6XFx0XFxuIDU3MDpcXHRcXHR3aGlsZSAoMSkge1xcbiA1NzE6XFx0XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZG1pcnJvci1cXHUwMDNlbXV0ZXgpO1xcbiA1NzI6XFx0XFx0XFx0cmV0ID0gZG1pcnJvcl9kb19yZWFkKGRtaXJyb3IsIHN0YXJ0LCBlbmQsIFxcdTAwMjZib3VuY2UpO1xcbiA1NzM6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkbWlycm9yLVxcdTAwM2VtdXRleCk7XFxuIDU3NDpcXHRcXHRcXHRpZiAocmV0ICE9IC1FTk9FTlQpXFxuIDU3NTpcXHRcXHRcXHRcXHRicmVhaztcXG4gNTc2OlxcdFxcbiA1Nzc6XFx0XFx0XFx0c3RhcnQgPSBjbWQtXFx1MDAzZWFkZHIgKyAoYm91bmNlLmNwYWdlcyBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKTtcXG4gNTc4OlxcdFxcdFxcdHJldCA9IGRtaXJyb3JfZmF1bHRfdW5sb2NrZWQoZG1pcnJvciwgc3RhcnQsIGVuZCwgZmFsc2UsIHRpbWVvdXQpO1xcbiA1Nzk6XFx0XFx0XFx0aWYgKHJldClcXG4gNTgwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA1ODE6XFx0XFx0XFx0Y21kLVxcdTAwM2VmYXVsdHMrKztcXG4gNTgyOlxcdFxcdH1cXG4gNTgzOlxcdFxcbiA1ODQ6XFx0XFx0aWYgKHJldCA9PSAwKSB7XFxuIDU4NTpcXHRcXHRcXHRpZiAoY29weV90b191c2VyKHU2NF90b191c2VyX3B0cihjbWQtXFx1MDAzZXB0ciksIGJvdW5jZS5wdHIsXFxuIDU4NjpcXHRcXHRcXHRcXHRcXHQgYm91bmNlLnNpemUpKVxcbiA1ODc6XFx0XFx0XFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4gNTg4OlxcdFxcdH1cXG4gNTg5OlxcdFxcdGNtZC1cXHUwMDNlY3BhZ2VzID0gYm91bmNlLmNwYWdlcztcXG4gNTkwOlxcdFxcdGRtaXJyb3JfYm91bmNlX2ZpbmkoXFx1MDAyNmJvdW5jZSk7XFxuIDU5MTpcXHRcXHRyZXR1cm4gcmV0O1xcbiA1OTI6XFx0fVxcbiA1OTM6XFx0XFxuIDU5NDpcXHRzdGF0aWMgaW50IGRtaXJyb3JfZG9fd3JpdGUoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuIDU5NTpcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBkbWlycm9yX2JvdW5jZSAqYm91bmNlKVxcbiA1OTY6XFx0e1xcbiA1OTc6XFx0XFx0dW5zaWduZWQgbG9uZyBwZm47XFxuIDU5ODpcXHRcXHR2b2lkICpwdHI7XFxuIDU5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDQ6NDguODAyNDM5MzkxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5ODM0MjAwNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBwcm9tcHQ6XG5cbioqQW5hbHl6aW5nIHRoZSBDYWxsIFNpdGVzIG9mIGBkbWlycm9yX3JlYWRfdW5sb2NrZWRgKipcblxuT2theSwgc28gdGhlIGluaXRpYWwgZGlyZWN0aW9uIGlzIGNsZWFyOiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYGRtaXJyb3JfcmVhZF91bmxvY2tlZGAgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZC4gVGhpcyBpc24ndCBqdXN0IGFib3V0ICpmaW5kaW5nKiB0aGUgY2FsbHMsIGJ1dCB1bmRlcnN0YW5kaW5nIHRoZWlyIGNvbnRleHQuIEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHdoYXQgdGhhdCBmdW5jdGlvbiBsaWtlbHkgZG9lcyBiYXNlZCBvbiBpdHMgbmFtZS4gXCJNaXJyb3IsXCIgXCJyZWFkLFwiIGFuZCBcInVubG9ja2VkXCIgc3VnZ2VzdCB0aGlzIGhhcyB0byBkbyB3aXRoIHJlYWRpbmcgZnJvbSBhIG1pcnJvcmVkIGRhdGEgc3RydWN0dXJlLCBhbmQgdGhlIFwidW5sb2NrZWRcIiBwYXJ0IHRlbGxzIG1lIHRoZXJlJ3Mgc29tZSBzb3J0IG9mIGNvbmN1cnJlbmN5IGNvbnNpZGVyYXRpb24uIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIGEgcmVhZCBvcGVyYXRpb24gd2hlcmUgZXhjbHVzaXZlIGxvY2tzIGFyZW4ndCBuZWNlc3NhcnkuXG5cbk15IG5leHQgbW92ZSBpcyBwcm9iYWJseSB0byB1c2UgYSBzdGF0aWMgYW5hbHlzaXMgdG9vbCBvciBhIGdvb2Qgb2xkLWZhc2hpb25lZCBncmVwIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBjYWxsIHNpdGVzLiBJIGNhbiB1c2UgdGhlIHRvb2wgdG8gZmluZCBjcm9zcy1yZWZlcmVuY2VzIGZvciB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBJIG5lZWQgdG8gYmUgZWZmaWNpZW50IGhlcmUg4oCTIGEgcXVpY2sgc2VhcmNoIHRvIGdldCBhIGxpc3QsIGFuZCB0aGVuIEknbGwgc3RhcnQgdG8gZGlnIGRlZXBlci4gSSdtIGV4cGVjdGluZyBzb21lIGtpbmQgb2Ygb3V0cHV0IGluIHRoZSBmb3JtIG9mIGEgbGlzdCBvZiBsaW5lcyBvZiBjb2RlLlxuXG5PbmNlIEkndmUgZ290IHRoYXQgbGlzdCwgSSdsbCBuZWVkIHRvIHJhcGlkbHkgc2NhbiB0aHJvdWdoIGVhY2ggY2FsbCBzaXRlIHRvIGFzc2VzcyB0aGUgc3Vycm91bmRpbmcgY29kZS4gSSdsbCBuZWVkIHRvIGJlIG1pbmRmdWwgb2YgaG93IHRoZSByZXR1cm4gdmFsdWUgaXMgdXNlZCwgd2hhdCBsb2NrcyBhcmUgaGVsZCAob3Igbm90IGhlbGQpIGFyb3VuZCB0aGUgY2FsbCwgYW5kIHdoYXQga2luZCBvZiBkYXRhIHRoZSBmdW5jdGlvbiBpcyBvcGVyYXRpbmcgb24uIFRoZSBnb2FsIGlzIHRvIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBzeXN0ZW0uIFVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgZmxvdyB3aWxsIGJlIGNydWNpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjU2LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowNDo1NS43ODU4NjE4NTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjc4NjY4ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG1pcnJvcl9yZWFkX3VubG9ja2VkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi90ZXN0X2htbS5jPTUxMj1zdGF0aWMgaW50IGRtaXJyb3JfcmVhZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwgc3RydWN0IGhtbV9kbWlycm9yX2NtZCAqY21kKVxcbi0tXFxubGliL3Rlc3RfaG1tLmMtNTUxLVxcbmxpYi90ZXN0X2htbS5jOjU1MjpzdGF0aWMgaW50IGRtaXJyb3JfcmVhZF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG5saWIvdGVzdF9obW0uYy01NTMtXFx0XFx0XFx0XFx0IHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZCxcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTE2MTY9c3RhdGljIGxvbmcgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTY3OC1cXHRjYXNlIEhNTV9ETUlSUk9SX1JFQURfVU5MT0NLRUQ6XFxubGliL3Rlc3RfaG1tLmM6MTY3OTpcXHRcXHRyZXQgPSBkbWlycm9yX3JlYWRfdW5sb2NrZWQoZG1pcnJvciwgXFx1MDAyNmNtZCwgMCk7XFxubGliL3Rlc3RfaG1tLmMtMTY4MC1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDQ6NTcuOTEzNzM3NzY5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1ODAyMjQ0MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guLi5cblxuKipBbmFseXppbmcgdGhlIGRtaXJyb3IgS2VybmVsIE1vZHVsZSdzIFRpbWVvdXQgSGFuZGxpbmcqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZG1pcnJvcl9yZWFkX3VubG9ja2VkYCBmdW5jdGlvbiwgYW5kIGl0J3MgYmVpbmcgY2FsbGVkIGZyb20gYGRtaXJyb3JfZm9wc191bmxvY2tlZF9pb2N0bGAuIEFuZCBoYW5nIG9uLi4udGhlIGB0aW1lb3V0YCBwYXJhbWV0ZXIgcGFzc2VkIHRvIGBkbWlycm9yX3JlYWRfdW5sb2NrZWRgIGlzIHNldCB0byB6ZXJvIGluIHRoYXQgY2FsbCEgVGhhdCdzIGEgYml0IG9kZC4gSWYgYHRpbWVvdXRgIGlzIHplcm8sIHRoZW4gdGhlIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAgZnVuY3Rpb24gd29uJ3QgYWN0dWFsbHkgYmUgdXNpbmcgYW55IG9mIGl0cyB0aW1lb3V0IGxvZ2ljLCB3aWxsIGl0PyBJdCdsbCBieXBhc3MgdGhhdCB3aG9sZSB0aW1lb3V0IG1lY2hhbmlzbSBlbnRpcmVseS5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhpcyBpcyB0aGUgb25seSBjYXNlIHdoZXJlIGBkbWlycm9yX3JlYWRfdW5sb2NrZWRgIGlzIGNhbGxlZCBmcm9tIGBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGxgLiBJIHNob3VsZCByZWFsbHkgZ28gYmFjayBhbmQgY2hlY2sgdGhlIG90aGVyIGNhbGxzIHdpdGhpbiBgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciBzY2VuYXJpb3Mgb3IgcG9zc2libGUgaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UuIFRoaXMgbmVlZHMgYSBkZWVwZXIgZGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4NjIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowNTowNS40OTM5NjQzMzJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi90ZXN0X2htbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2NzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2NzA6XFx0XFx0Y2FzZSBITU1fRE1JUlJPUl9SRUxFQVNFOlxcbjE2NzE6XFx0XFx0XFx0ZG1pcnJvcl9kZXZpY2VfcmVtb3ZlX2NodW5rcyhkbWlycm9yLVxcdTAwM2VtZGV2aWNlKTtcXG4xNjcyOlxcdFxcdFxcdHJldCA9IDA7XFxuMTY3MzpcXHRcXHRcXHRicmVhaztcXG4xNjc0OlxcdFxcdGNhc2UgSE1NX0RNSVJST1JfRkxBR1M6XFxuMTY3NTpcXHRcXHRcXHRkbWlycm9yLVxcdTAwM2VmbGFncyA9IGNtZC5ucGFnZXM7XFxuMTY3NjpcXHRcXHRcXHRyZXQgPSAwO1xcbjE2Nzc6XFx0XFx0XFx0YnJlYWs7XFxuMTY3ODpcXHRcXHRjYXNlIEhNTV9ETUlSUk9SX1JFQURfVU5MT0NLRUQ6XFxuMTY3OTpcXHRcXHRcXHRyZXQgPSBkbWlycm9yX3JlYWRfdW5sb2NrZWQoZG1pcnJvciwgXFx1MDAyNmNtZCwgMCk7XFxuMTY4MDpcXHRcXHRcXHRicmVhaztcXG4xNjgxOlxcdFxcdGRlZmF1bHQ6XFxuMTY4MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNjgzOlxcdFxcdH1cXG4xNjg0OlxcdFxcdGlmIChyZXQpXFxuMTY4NTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE2ODY6XFx0XFxuMTY4NzpcXHRcXHRpZiAoY29weV90b191c2VyKHVhcmcsIFxcdTAwMjZjbWQsIHNpemVvZihjbWQpKSlcXG4xNjg4OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjE2ODk6XFx0XFxuMTY5MDpcXHRcXHRyZXR1cm4gMDtcXG4xNjkxOlxcdH1cXG4xNjkyOlxcdFxcbjE2OTM6XFx0c3RhdGljIGludCBkbWlycm9yX2ZvcHNfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuMTY5NDpcXHR7XFxuMTY5NTpcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHI7XFxuMTY5NjpcXHRcXG4xNjk3OlxcdFxcdGZvciAoYWRkciA9IHZtYS1cXHUwMDNldm1fc3RhcnQ7IGFkZHIgXFx1MDAzYyB2bWEtXFx1MDAzZXZtX2VuZDsgYWRkciArPSBQQUdFX1NJWkUpIHtcXG4xNjk4OlxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbjE2OTk6XFx0XFx0XFx0aW50IHJldDtcXG4xNzAwOlxcdFxcbjE3MDE6XFx0XFx0XFx0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xcbjE3MDI6XFx0XFx0XFx0aWYgKCFwYWdlKVxcbjE3MDM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTcwNDpcXHRcXG4xNzA1OlxcdFxcdFxcdHJldCA9IHZtX2luc2VydF9wYWdlKHZtYSwgYWRkciwgcGFnZSk7XFxuMTcwNjpcXHRcXHRcXHRpZiAocmV0KSB7XFxuMTcwNzpcXHRcXHRcXHRcXHRfX2ZyZWVfcGFnZShwYWdlKTtcXG4xNzA4OlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTcwOTpcXHRcXHRcXHR9XFxuMTcxMDpcXHRcXHRcXHRwdXRfcGFnZShwYWdlKTtcXG4xNzExOlxcdFxcdH1cXG4xNzEyOlxcdFxcbjE3MTM6XFx0XFx0cmV0dXJuIDA7XFxuMTcxNDpcXHR9XFxuMTcxNTpcXHRcXG4xNzE2OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRtaXJyb3JfZm9wcyA9IHtcXG4xNzE3OlxcdFxcdC5vcGVuXFx0XFx0PSBkbWlycm9yX2ZvcHNfb3BlbixcXG4xNzE4OlxcdFxcdC5yZWxlYXNlXFx0PSBkbWlycm9yX2ZvcHNfcmVsZWFzZSxcXG4xNzE5OlxcdFxcdC5tbWFwXFx0XFx0PSBkbWlycm9yX2ZvcHNfbW1hcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDU6MDUuNDk0MDkyNTYyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODc5MzQwNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUaW1lb3V0IE1lY2hhbmlzbSoqXG5cbk9rYXksIHNvIEkgc2VlIHRoaXMgYHRpbWVvdXQgPSAwYCBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2FpdCwgemVybyBmb3IgYSB0aW1lb3V0PyBUaGF0IHVzdWFsbHkgbWVhbnMgJ25vIHRpbWVvdXQnIGluIHByb2dyYW1taW5nLiBJcyB0aGF0IGNvbnNpc3RlbnQgaGVyZT9cIiBJIG5lZWQgdG8gdmVyaWZ5IHRoaXMgYXNzdW1wdGlvbi4gVGhlIGtleSBpcyB0byBmaW5kIGFsbCB0aGUgcGxhY2VzIHRoaXMgYHRpbWVvdXRgIHZhcmlhYmxlIGlzIHVzZWQgdG8gc2VlIGlmIHRoZSB6ZXJvIHZhbHVlIGFsd2F5cyByZXByZXNlbnRzIHRoaXMgc3RhdGUuIEkgYW0gZ29pbmcgdG8gc2VlIGlmIHRoZSBjb2RlIGlzIGFjdHVhbGx5IGNvbnNpc3RlbnQgd2l0aCBteSB1bmRlcnN0YW5kaW5nIG9mIGB0aW1lb3V0ID0gMGAgYmVpbmcgYSBmbGFnIGZvciBubyB0aW1lb3V0LlxuXG5JJ2xsIHNwZWNpZmljYWxseSBjaGVjayB3aGVyZSB0aGlzIHZhcmlhYmxlIGlzIHBhc3NlZCB0byBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgLiBUaGUgY29kZSBzbmlwcGV0IGRvZXNuJ3QgZ2l2ZSBtZSBjb250ZXh0LCBzbyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY29uc3VsdCB0aGUgbGFyZ2VyIGNvZGViYXNlLiBJIGhhdmUgYSBodW5jaCwgYmFzZWQgb24gdGhlIGdyZXAgb3V0cHV0LCB0aGF0IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY2AgbWlnaHQgYmUgcmVsZXZhbnQuIExldCBtZSBvcGVuIHRoYXQgZmlsZSBhbmQgc2VlIGhvdyB0aGUgdGltZW91dCB2YWx1ZSBpcyBhY3R1YWxseSBiZWluZyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhhdCBmdW5jdGlvbiBjYWxsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhpcyB0aW1lb3V0IGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjg5OSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDU6MDkuMTgyMDI5MDgzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJ0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyOTUwOlxcdFxcdFxcdC8qIFRlc3Qgd2l0aG91dCBUSFAgKi9cXG4yOTUxOlxcdFxcdFxcdEFTU0VSVF9FUShydW5fbWlncmF0aW9uX2JlbmNobWFyayhzZWxmLVxcdTAwM2VmZCwgMCwgdGVzdF9zaXplc1tpXSxcXG4yOTUyOlxcdFxcdFxcdFxcdFxcdFxcdGl0ZXJhdGlvbnMsIFxcdTAwMjZyZWd1bGFyX3Jlc3VsdHMpLCAwKTtcXG4yOTUzOlxcdFxcbjI5NTQ6XFx0XFx0XFx0LyogUHJpbnQgcmVzdWx0cyAqL1xcbjI5NTU6XFx0XFx0XFx0cHJpbnRfYmVuY2htYXJrX3Jlc3VsdHModGVzdF9uYW1lc1tpXSwgdGVzdF9zaXplc1tpXSxcXG4yOTU2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZ0aHBfcmVzdWx0cywgXFx1MDAyNnJlZ3VsYXJfcmVzdWx0cyk7XFxuMjk1NzpcXHRcXHR9XFxuMjk1ODpcXHR9XFxuMjk1OTpcXHQvKlxcbjI5NjA6XFx0ICogVGVzdCB0aGF0IEhNTSBjYW4gZmF1bHQgaW4gcGFnZXMgYmFja2VkIGJ5IHVzZXJmYXVsdGZkIHVzaW5nIHRoZVxcbjI5NjE6XFx0ICogaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKSBwYXRoIHdpdGggbm8gdGltZW91dC4gVGhpcyBleGVyY2lzZXNcXG4yOTYyOlxcdCAqIHRoZSBsb2NrLWRyb3AgcmV0cnkgbG9naWMgaW4gdGhlIEhNTSBmcmFtZXdvcmsuXFxuMjk2MzpcXHQgKi9cXG4yOTY0OlxcdHN0cnVjdCB1ZmZkX3RocmVhZF9hcmdzIHtcXG4yOTY1OlxcdFxcdGludCB1ZmZkO1xcbjI5NjY6XFx0XFx0aW50IHN0b3BfZmQ7XFxuMjk2NzpcXHRcXHR2b2lkICpwYWdlX2J1ZmZlcjtcXG4yOTY4OlxcdFxcdHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplO1xcbjI5Njk6XFx0fTtcXG4yOTcwOlxcdFxcbjI5NzE6XFx0c3RhdGljIHZvaWQgKnVmZmRfaGFuZGxlcl90aHJlYWQodm9pZCAqYXJnKVxcbjI5NzI6XFx0e1xcbjI5NzM6XFx0XFx0c3RydWN0IHVmZmRfdGhyZWFkX2FyZ3MgKmFyZ3MgPSBhcmc7XFxuMjk3NDpcXHRcXHRzdHJ1Y3QgdWZmZF9tc2cgbXNnO1xcbjI5NzU6XFx0XFx0c3RydWN0IHVmZmRpb19jb3B5IGNvcHk7XFxuMjk3NjpcXHRcXHRzdHJ1Y3QgcG9sbGZkIHBvbGxmZFsyXTtcXG4yOTc3OlxcdFxcdGludCByZXQ7XFxuMjk3ODpcXHRcXG4yOTc5OlxcdFxcdHBvbGxmZFswXS5mZCA9IGFyZ3MtXFx1MDAzZXVmZmQ7XFxuMjk4MDpcXHRcXHRwb2xsZmRbMF0uZXZlbnRzID0gUE9MTElOO1xcbjI5ODE6XFx0XFx0cG9sbGZkWzFdLmZkID0gYXJncy1cXHUwMDNlc3RvcF9mZDtcXG4yOTgyOlxcdFxcdHBvbGxmZFsxXS5ldmVudHMgPSBQT0xMSU47XFxuMjk4MzpcXHRcXG4yOTg0OlxcdFxcdHdoaWxlICgxKSB7XFxuMjk4NTpcXHRcXHRcXHRyZXQgPSBwb2xsKHBvbGxmZCwgMiwgLTEpO1xcbjI5ODY6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbjI5ODc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjk4ODpcXHRcXHRcXHRpZiAocG9sbGZkWzFdLnJldmVudHMpXFxuMjk4OTpcXHRcXHRcXHRcXHRicmVhaztcXG4yOTkwOlxcdFxcdFxcdGlmICghKHBvbGxmZFswXS5yZXZlbnRzIFxcdTAwMjYgUE9MTElOKSlcXG4yOTkxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI5OTI6XFx0XFxuMjk5MzpcXHRcXHRcXHRyZXQgPSByZWFkKGFyZ3MtXFx1MDAzZXVmZmQsIFxcdTAwMjZtc2csIHNpemVvZihtc2cpKTtcXG4yOTk0OlxcdFxcdFxcdGlmIChyZXQgIT0gc2l6ZW9mKG1zZykpXFxuMjk5NTpcXHRcXHRcXHRcXHRicmVhaztcXG4yOTk2OlxcdFxcbjI5OTc6XFx0XFx0XFx0aWYgKG1zZy5ldmVudCAhPSBVRkZEX0VWRU5UX1BBR0VGQVVMVClcXG4yOTk4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI5OTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjA1OjA5LjE4MjE3ODgwM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzYyMTI5ODMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSE1NIFRpbWVvdXQgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IHdhcyBhYm91dCBgaG1tLXRlc3RzLmNgIGFuZCB0aGF0IGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB0aGF0IGl0J3MgYmVpbmcgdGVzdGVkIHdpdGhvdXQgYW55IHRpbWVvdXQuIEJ1dCB0aGF0J3MganVzdCBhIHRlc3QsIGFuZCB0aGVuIEkgdGhvdWdodCwgXCJIb2xkIG9uLCBgbGliL3Rlc3RfaG1tLmNgLi4uaXMgdGhhdCBldmVuICpyZWFjaGFibGUqIGluIGEgc3l6a2FsbGVyIGNvbnRleHQ/XCJcblxuUmlnaHQsIHllcywgaXQgc2hvdWxkIGJlLiBgQ09ORklHX1RFU1RfSE1NYCBpcyB0eXBpY2FsbHkgZW5hYmxlZCwgYW5kIHN5emthbGxlciAqZG9lcyogZnV6eiB0aGUgYHRlc3RfaG1tYCBkZXZpY2UsIHRob3NlIGAvZGV2L2htbV9kbWlycm9yKmAgdGhpbmdzLiBUaGF0J3MgZ29vZC4gQnV0IG5vdyBJJ20gc2VlaW5nIHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIGB0aW1lb3V0YCBwYXJhbWV0ZXIgb3IgcmVsYXRlZCBsb2dpYyBpbiBgYWllMl9jdHguY2AsIGBkcm1fZ3B1c3ZtLmNgLCBhbmQgYG5vdXZlYXVfc3ZtLmNgLCB3aGljaCBhcmUgcmVhbCwgcHJvZHVjdGlvbiBkcml2ZXJzLi4uYW5kIHRoYXQncyB0aGUga2V5LlxuXG5UaGUgcGF0Y2ggKmRvZXNuJ3QqIHRvdWNoIGBsaWIvdGVzdF9obW0uY2AsIHNvIHdoYXRldmVyJ3MgaGFwcGVuaW5nIHdpdGggdGhlIHRpbWVvdXQgY2hhbmdlIGlzbid0IGRpcmVjdGx5IGFmZmVjdGluZyB0aGF0IHRlc3QuIE9rYXksIGxldCdzIGdvIGJhY2sgYW5kIGxvb2sgYXQgdGhlIGRpZmYgY2xvc2VseSBhZ2Fpbi4gTmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhlc2UgY2hhbmdlcyBhcmUgYmVpbmcgbWFkZSBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBzeXprYWxsZXIncyBjb3ZlcmFnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM5NDgsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowNToxNi41NDQzMTA5OTZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTcyNjI2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTE2MD1ub3JtYWwgaW50ZXJmYWNlIGlzOjpcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMTYxLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoxNjI6ICBpbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTE2My0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTE2OT1UaGUgY2FsbGVyIG11c3Qgbm90IGhvbGQgYGBtbWFwX3JlYWRfbG9ja2BgIGJlZm9yZSB0aGUgY2FsbC5cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MTcwOmBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgIHRha2VzIHRoZSBtbWFwIHJlYWQgbG9jayBpbnRlcm5hbGx5IGFuZFxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0xNzEtYWxsb3dzIGBgaGFuZGxlX21tX2ZhdWx0KClgYCB0byBkcm9wIGl0IGR1cmluZyBmYXVsdCBoYW5kbGluZy4gVGhpcyBpcyByZXF1aXJlZFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTE4Nj1UaGUgdXNhZ2UgcGF0dGVybiBpczo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjAzLSBhZ2FpbjpcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjA0OiAgICAgIHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZyYW5nZSwgdGltZW91dCk7XFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTIwNS0gICAgICBpZiAocmV0KVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTIyOD11cGRhdGUuIFRoZSByZXRyeSBjaGVjayBtdXN0IHVzZSB0aGUgc2FtZSBub3RpZmllciBhbmQgc2VxdWVuY2UgbnVtYmVyIHN0b3JlZFxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoyMjk6aW4gYGByYW5nZWBgIGJ5IGBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgLlxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yMzAtXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTIzMT1Ib2xkaW5nIHRoZSBtbWFwIGxvY2sgYWNyb3NzIEhNTSBmYXVsdHNcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yMzMtXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjIzNDpNb3N0IGNhbGxlcnMgc2hvdWxkIHVzZSBgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KClgYC4gSWYgYSBkcml2ZXJcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjM1LXJlYWxseSBuZWVkcyB0byBob2xkIHRoZSBtbWFwIGxvY2sgYWNyb3NzIHdvcmsgb3V0c2lkZSBITU0sIGl0IGNhbiB1c2U6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTI0MD1pbnRlcmZhY2UgY2Fubm90IHN1cHBvcnQgVk1BcyB3aG9zZSBmYXVsdCBoYW5kbGVycyBuZWVkIHRvIGRyb3AgdGhlIG1tYXAgbG9jay5cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjQxOk5ldyBjYWxsZXJzIHNob3VsZCBwcmVmZXIgYGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpYGAgdW5sZXNzIHRoZXlcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjQyLWhhdmUgYSBzcGVjaWZpYyByZXF1aXJlbWVudCB0byBrZWVwIHRoZSBtbWFwIGxvY2sgaGVsZCBhY3Jvc3MgdGhlIGNhbGwuXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYz0xMDMxPXN0YXRpYyBpbnQgYWllMl9wb3B1bGF0ZV9yYW5nZShzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICphYm8pXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYy0xMDY0LVxcbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jOjEwNjU6XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXFx1MDAyNm1hcHAtXFx1MDAzZXJhbmdlLCB0aW1lb3V0KTtcXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYy0xMDY2LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jPTg0MT1lbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgZHJtX2dwdXN2bV9zY2FuX21tKHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODY4LXJldHJ5OlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODY5OlxcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZobW1fcmFuZ2UsIHRpbWVvdXQpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODcwLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jPTE0NDQ9aW50IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE0OTEtXFx0aG1tX3JhbmdlLmhtbV9wZm5zID0gcGZucztcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE0OTI6XFx0ZXJyID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXFx1MDAyNmhtbV9yYW5nZSwgdGltZW91dCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNDkzLVxcdG1tcHV0KG1tKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM9MTcwMz1pbnQgZHJtX2dwdXN2bV9yYW5nZV9ldmljdChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNzI4LVxcdGhtbV9yYW5nZS5obW1fcGZucyA9IHBmbnM7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNzI5OlxcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZobW1fcmFuZ2UsIHRpbWVvdXQpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTczMC1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmM9NjUyPXN0YXRpYyBpbnQgbm91dmVhdV9yYW5nZV9mYXVsdChzdHJ1Y3Qgbm91dmVhdV9zdm1tICpzdm1tLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uYy02OTMtXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uYzo2OTQ6XFx0XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXFx1MDAyNnJhbmdlLCByZW1haW5pbmcpO1xcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmMtNjk1LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jPTM5Nj1zdGF0aWMgaW50IG1zaHZfcmVnaW9uX3JhbmdlX2ZhdWx0KHN0cnVjdCBtc2h2X21lbV9yZWdpb24gKnJlZ2lvbixcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmMtNDE1LWFnYWluOlxcbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmM6NDE2OlxcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZyYW5nZSwgMCk7XFxuZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYy00MTctXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmM9MzI0PWludCBpYl91bWVtX29kcF9tYXBfZG1hX2FuZF9sb2NrKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHAsIHU2NCB1c2VyX3ZpcnQsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jLTM2OC1yZXRyeTpcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jOjM2OTpcXHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcXHUwMDI2cmFuZ2UsIHRpbWVvdXQpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmMtMzcwLVxcdGlmICh1bmxpa2VseShyZXQpKVxcbi0tXFxuaW5jbHVkZS9saW51eC9obW0uaD0xMjU9aW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSk7XFxuaW5jbHVkZS9saW51eC9obW0uaDoxMjY6aW50IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLFxcbmluY2x1ZGUvbGludXgvaG1tLmgtMTI3LVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTtcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTM5Mj1zdGF0aWMgaW50IGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXFxuLS1cXG5saWIvdGVzdF9obW0uYy0zOTgtXFx0d2hpbGUgKHRydWUpIHtcXG5saWIvdGVzdF9obW0uYzozOTk6XFx0XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQocmFuZ2UsIHRpbWVvdXQpO1xcbmxpYi90ZXN0X2htbS5jLTQwMC1cXHRcXHRpZiAocmV0KVxcbi0tXFxubW0vaG1tLmM9Njg5PXN0YXRpYyBpbnQgaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSwgYm9vbCAqbG9ja2VkKVxcbi0tXFxubW0vaG1tLmMtNzUzLSAqIFRoZSBtbWFwIGxvY2sgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIgYW5kIHdpbGwgcmVtYWluIGhlbGQgb24gcmV0dXJuLlxcbm1tL2htbS5jOjc1NDogKiBOZXcgdXNlcnMgc2hvdWxkIHByZWZlciBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpIHVubGVzcyB0aGV5XFxubW0vaG1tLmMtNzU1LSAqIHNwZWNpZmljYWxseSBuZWVkIHRvIGtlZXAgdGhlIG1tYXAgbG9jayBoZWxkIGFjcm9zcyB0aGUgY2FsbC4gVGhpcyBoZWxwZXJcXG4tLVxcbm1tL2htbS5jPTc2Mj1FWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV9mYXVsdCk7XFxuLS1cXG5tbS9obW0uYy03NjQtLyoqXFxubW0vaG1tLmM6NzY1OiAqIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0IC0gZmF1bHQgaW4gYSByYW5nZSB3aXRoIGEgcmV0cnkgdGltZW91dFxcbm1tL2htbS5jLTc2Ni0gKiBAcmFuZ2U6XFx0YXJndW1lbnQgc3RydWN0dXJlXFxuLS1cXG5tbS9obW0uYy03ODMtICovXFxubW0vaG1tLmM6Nzg0OmludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSxcXG5tbS9obW0uYy03ODUtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpXFxuLS1cXG5tbS9obW0uYy04MjQtfVxcbm1tL2htbS5jOjgyNTpFWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KTtcXG5tbS9obW0uYy04MjYtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz0yOTA0PVRFU1RfRl9USU1FT1VUKGhtbSwgYmVuY2htYXJrX3RocF9taWdyYXRpb24sIDEyMClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTI5NjAtICogVGVzdCB0aGF0IEhNTSBjYW4gZmF1bHQgaW4gcGFnZXMgYmFja2VkIGJ5IHVzZXJmYXVsdGZkIHVzaW5nIHRoZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjI5NjE6ICogaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKSBwYXRoIHdpdGggbm8gdGltZW91dC4gVGhpcyBleGVyY2lzZXNcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yOTYyLSAqIHRoZSBsb2NrLWRyb3AgcmV0cnkgbG9naWMgaW4gdGhlIEhNTSBmcmFtZXdvcmsuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjA1OjE4LjQwMTU4MDgxNloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTcwNTY4NTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCBpbiBJbmZpbmliYW5kJ3MgT0RQIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSd2ZSBoaXQgYSBwb2ludCB3aGVyZSBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBJbmZpbmliYW5kIGNvZGUsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyB0aGUgT0RQIChPbiBEZW1hbmQgUGFnaW5nKSBmdW5jdGlvbmFsaXR5IGlzIGltcGxlbWVudGVkLiBNeSBpbml0aWFsIGNvbmNlcm4gc3RlbW1lZCBmcm9tIHNlZWluZyBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIHVzZWQgaW4gYGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmNgLiBUaGlzIGZ1bmN0aW9uIG5hbWUgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gSXQgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIG1lbW9yeSBmYXVsdHMgb3IgcGFnZSBmYXVsdHMgd2l0aGluIHRoZSB1c2VyIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIE9EUC4gVGhlIFwidW5sb2NrZWRcIiBwYXJ0IG1lYW5zIHRoaXMgcHJvYmFibHkgaGFwcGVucyB3aXRob3V0IGEgbG9jayBoZWxkLCB3aGljaCBpcyBzaWduaWZpY2FudCBmcm9tIGEgY29uY3VycmVuY3kgYW5kIHBlcmZvcm1hbmNlIHBlcnNwZWN0aXZlLiBHaXZlbiBteSBleHBlcnRpc2UgaW4gdGhpcyBkb21haW4sIG15IG5leHQgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGNvZGUgaW4gYGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IG1lY2hhbmljcyBvZiB3aGF0J3MgaGFwcGVuaW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHNjZW5hcmlvcyBsZWFkIHRvIHRoaXMgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIHJlZ2FyZGluZyBlcnJvciBoYW5kbGluZywgcGVyZm9ybWFuY2UgYW5kIHJhY2UgY29uZGl0aW9ucyB3aXRoaW4gdGhlIE9EUCBpbXBsZW1lbnRhdGlvbi4gSSdsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSdyZSBoYW5kbGluZyBwb3RlbnRpYWwgdGltZW91dCBzaXR1YXRpb25zIGluIHJlbGF0aW9uIHRvIHRoZSBtZW1vcnkgZmF1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjYwNywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjA1OjI3Ljk3MjE1MjQyM1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM1MDpcXHRcXHRcXHRnb3RvIG91dF9wdXRfdGFzaztcXG4gMzUxOlxcdFxcdH1cXG4gMzUyOlxcdFxcbiAzNTM6XFx0XFx0cmFuZ2Uubm90aWZpZXIgPSBcXHUwMDI2dW1lbV9vZHAtXFx1MDAzZW5vdGlmaWVyO1xcbiAzNTQ6XFx0XFx0cmFuZ2Uuc3RhcnQgPSBBTElHTl9ET1dOKHVzZXJfdmlydCwgMVVMIFxcdTAwM2NcXHUwMDNjIHBhZ2Vfc2hpZnQpO1xcbiAzNTU6XFx0XFx0cmFuZ2UuZW5kID0gQUxJR04odXNlcl92aXJ0ICsgYmNudCwgMVVMIFxcdTAwM2NcXHUwMDNjIHBhZ2Vfc2hpZnQpO1xcbiAzNTY6XFx0XFx0cGZuX3N0YXJ0X2lkeCA9IChyYW5nZS5zdGFydCAtIGliX3VtZW1fc3RhcnQodW1lbV9vZHApKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbiAzNTc6XFx0XFx0bnVtX3BmbnMgPSAocmFuZ2UuZW5kIC0gcmFuZ2Uuc3RhcnQpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuIDM1ODpcXHRcXHRpZiAoZmF1bHQpIHtcXG4gMzU5OlxcdFxcdFxcdHJhbmdlLmRlZmF1bHRfZmxhZ3MgPSBITU1fUEZOX1JFUV9GQVVMVDtcXG4gMzYwOlxcdFxcbiAzNjE6XFx0XFx0XFx0aWYgKGFjY2Vzc19tYXNrIFxcdTAwMjYgSE1NX1BGTl9XUklURSlcXG4gMzYyOlxcdFxcdFxcdFxcdHJhbmdlLmRlZmF1bHRfZmxhZ3MgfD0gSE1NX1BGTl9SRVFfV1JJVEU7XFxuIDM2MzpcXHRcXHR9XFxuIDM2NDpcXHRcXG4gMzY1OlxcdFxcdHJhbmdlLmhtbV9wZm5zID0gXFx1MDAyNih1bWVtX29kcC1cXHUwMDNlbWFwLnBmbl9saXN0W3Bmbl9zdGFydF9pZHhdKTtcXG4gMzY2OlxcdFxcdHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xcbiAzNjc6XFx0XFxuIDM2ODpcXHRyZXRyeTpcXG4gMzY5OlxcdFxcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZyYW5nZSwgdGltZW91dCk7XFxuIDM3MDpcXHRcXHRpZiAodW5saWtlbHkocmV0KSlcXG4gMzcxOlxcdFxcdFxcdGdvdG8gb3V0X3B1dF9tbTtcXG4gMzcyOlxcdFxcbiAzNzM6XFx0XFx0c3RhcnRfaWR4ID0gKHJhbmdlLnN0YXJ0IC0gaWJfdW1lbV9zdGFydCh1bWVtX29kcCkpIFxcdTAwM2VcXHUwMDNlIHBhZ2Vfc2hpZnQ7XFxuIDM3NDpcXHRcXHRkbWFfaW5kZXggPSBzdGFydF9pZHg7XFxuIDM3NTpcXHRcXG4gMzc2OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnVtZW1fb2RwLVxcdTAwM2V1bWVtX211dGV4KTtcXG4gMzc3OlxcdFxcdGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShcXHUwMDI2dW1lbV9vZHAtXFx1MDAzZW5vdGlmaWVyLCByYW5nZS5ub3RpZmllcl9zZXEpKSB7XFxuIDM3ODpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnVtZW1fb2RwLVxcdTAwM2V1bWVtX211dGV4KTtcXG4gMzc5OlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuIDM4MDpcXHRcXHR9XFxuIDM4MTpcXHRcXG4gMzgyOlxcdFxcdGZvciAocGZuX2luZGV4ID0gMDsgcGZuX2luZGV4IFxcdTAwM2MgbnVtX3BmbnM7XFxuIDM4MzpcXHRcXHRcXHRwZm5faW5kZXggKz0gMSBcXHUwMDNjXFx1MDAzYyAocGFnZV9zaGlmdCAtIFBBR0VfU0hJRlQpLCBkbWFfaW5kZXgrKykge1xcbiAzODQ6XFx0XFxuIDM4NTpcXHRcXHRcXHQvKlxcbiAzODY6XFx0XFx0XFx0ICogU2luY2Ugd2UgYXNrZWQgZm9yIGhtbV9yYW5nZV9mYXVsdCgpIHRvIHBvcHVsYXRlXFxuIDM4NzpcXHRcXHRcXHQgKiBwYWdlcyBpdCBzaG91bGRuJ3QgcmV0dXJuIGFuIGVycm9yIGVudHJ5IG9uIHN1Y2Nlc3MuXFxuIDM4ODpcXHRcXHRcXHQgKi9cXG4gMzg5OlxcdFxcdFxcdFdBUk5fT04oZmF1bHQgXFx1MDAyNlxcdTAwMjYgcmFuZ2UuaG1tX3BmbnNbcGZuX2luZGV4XSBcXHUwMDI2IEhNTV9QRk5fRVJST1IpO1xcbiAzOTA6XFx0XFx0XFx0V0FSTl9PTihmYXVsdCBcXHUwMDI2XFx1MDAyNiAhKHJhbmdlLmhtbV9wZm5zW3Bmbl9pbmRleF0gXFx1MDAyNiBITU1fUEZOX1ZBTElEKSk7XFxuIDM5MTpcXHRcXHRcXHRpZiAoIShyYW5nZS5obW1fcGZuc1twZm5faW5kZXhdIFxcdTAwMjYgSE1NX1BGTl9WQUxJRCkpXFxuIDM5MjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMzkzOlxcdFxcbiAzOTQ6XFx0XFx0XFx0aWYgKHJhbmdlLmhtbV9wZm5zW3Bmbl9pbmRleF0gXFx1MDAyNiBITU1fUEZOX0RNQV9NQVBQRUQpXFxuIDM5NTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMzk2OlxcdFxcbiAzOTc6XFx0XFx0XFx0aG1tX29yZGVyID0gaG1tX3Bmbl90b19tYXBfb3JkZXIocmFuZ2UuaG1tX3BmbnNbcGZuX2luZGV4XSk7XFxuIDM5ODpcXHRcXHRcXHQvKiBJZiBhIGh1Z2VwYWdlIHdhcyBkZXRlY3RlZCBhbmQgT0RQIHdhc24ndCBzZXQgZm9yLCB0aGUgdW1lbVxcbiAzOTk6XFx0XFx0XFx0ICogcGFnZV9zaGlmdCB3aWxsIGJlIHVzZWQsIHRoZSBvcHBvc2l0ZSBjYXNlIGlzIGFuIGVycm9yLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowNToyNy45NzIyNTI3MTNaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI4MDI4MTg4OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUaW1lb3V0IFBhdGNoIGFuZCBSZWFjaGFiaWxpdHkgaW4gU3l6a2FsbGVyKipcblxuT2theSwgc28gdGhlIHBhdGNoIGlzIGFib3V0IGVuc3VyaW5nIGNvbnNpc3RlbnQgdGltZW91dCBoYW5kbGluZyB1c2luZyBgbXNlY3NfdG9famlmZmllc2AgYWNyb3NzIHNldmVyYWwgZHJpdmVycywgYW5kIEkgc2VlIHRoYXQgYGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmNgIGFscmVhZHkgaW1wbGVtZW50cyB0aGlzIGNvcnJlY3RseS4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgY29ycmVjdGluZyB0aGUgaW1wbGVtZW50YXRpb24gaW4gYGFpZTJfY3R4LmNgLCBgZHJtX2dwdXN2bS5jYCwgYW5kIGBub3V2ZWF1X3N2bS5jYCB0byBtYXRjaC4gXG5cblRoZSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHF1aWNrbHkgYXNzZXNzIGB1bWVtX29kcC5jYCBhcyBhbiBlbnRyeSBwb2ludCBzaW5jZSB0aGF0IGxpdmVzIGluIHRoZSBJbmZpbmliYW5kIHN1YnN5c3RlbSB3aGljaCAqaXMqIGtub3duIHRvIGJlIHJlYWNoYWJsZSB0aHJvdWdoIGByZG1hYCBpbiBzeXprYWxsZXIuIEhvd2V2ZXIsIHNpbmNlIHRoZSBwYXRjaCBkb2VzICpub3QqIG1vZGlmeSBgdW1lbV9vZHAuY2AsIHRoYXQncyBub3QgdGhlIHJlbGV2YW50IGVudHJ5IHBvaW50IGhlcmUuXG5cblRoZSByZWFsIHF1ZXN0aW9uIGJlY29tZXM6IGFyZSB0aGUgYWZmZWN0ZWQgZHJpdmVycyDigJMgYGFpZTJfY3R4LmNgLCBgZHJtX2dwdXN2bS5jYCwgYW5kIGBub3V2ZWF1X3N2bS5jYCDigJMgcmVhY2hhYmxlIGluIHN5emthbGxlcj8gTGV0J3MgYnJlYWsgdGhlbSBkb3duOlxuXG4qICAgYGFpZTJfY3R4LmNgOiBgZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfY3R4LmNgIOKAkyBUaGlzIHJlcXVpcmVzIEFNRCBYRE5BIGhhcmR3YXJlLlxuKiAgIGBkcm1fZ3B1c3ZtLmNgOiBgZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY2Ag4oCTIFRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZyBzaW5jZSB0aGlzIHVzZXMgdGhlIGBDT05GSUdfRFJNX0dQVVNWTWAgd2hpY2ggaXMgc2VsZWN0ZWQgYnkgYERSTV9YRWAuXG4qICAgYG5vdXZlYXVfc3ZtLmNgOiBgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY2Ag4oCTIFRoaXMgcmVxdWlyZXMgTlZJRElBIGhhcmR3YXJlLlxuXG5Ob3csIGNoZWNraW5nIHRoZSBjb25maWcsIGBkcm1fZ3B1c3ZtLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19EUk1fR1BVU1ZNYCBpcyBlbmFibGVkIGFuZCBpcyBzZWxlY3RlZCBieSBgRFJNX1hFYC4gVGhlIGBEUk1fWEVgIGNvbmZpZyByZXF1aXJlcyBQQ0kgaGFyZHdhcmUgd2hpY2ggaXMsIGFzIGV4cGVjdGVkLCB0aGUgSW50ZWwgWGUgaGFyZHdhcmUuIEJ1dCBzeXprYWxsZXIgZG9lc24ndCBoYXZlIEludGVsIFhlIGhhcmR3YXJlIGluIGl0cyBWTXMuIFRoZSBzYW1lIGFwcGxpZXMgZm9yIE5vdXZlYXUgKE5WSURJQSkgYW5kIEFNRCBYRE5BIGhhcmR3YXJlLlxuXG5TbywgaXQgZG9lc24ndCBsb29rIGxpa2Ugd2UncmUgZGlyZWN0bHkgcmVhY2hpbmcgYGRybV9ncHVzdm0uY2AgKGFuZCB0aHVzIHRoZSBmaXgpIHRocm91Z2ggaGFyZHdhcmUtZGVwZW5kZW50IGNvbmZpZ3VyYXRpb25zLiBIb3dldmVyLCB3YWl0IGEgbWludXRlLCBgZHJtX2dwdXN2bS5jYCBpcyBhIGdlbmVyaWMgaGVscGVyLiBJcyBpdCB1c2VkIGJ5IGFueXRoaW5nIGVsc2U/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYENPTkZJR19EUk1fR1BVU1ZNYCB0byBzZWUgaWYgdGhlcmUncyBhbnkgb3RoZXIgcm91dGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3OTIwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDU6NDAuNzc1MDc0NTcxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU1MzQ3MTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBEUk1fR1BVU1ZNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnPTI9Y29uZmlnIERSTV9YRVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWctNDEtXFx0c2VsZWN0IERSTV9FWEVDXFxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWc6NDI6XFx0c2VsZWN0IERSTV9HUFVTVk0gaWYgIVVNTFxcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnLTQzLVxcdHNlbGVjdCBEUk1fR1BVVk1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnPTc5PWNvbmZpZyBEUk1fWEVfR1BVU1ZNXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZy04NS1cXHRzZWxlY3QgREVWSUNFX1BSSVZBVEVcXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZzo4NjpcXHRzZWxlY3QgRFJNX0dQVVNWTVxcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnLTg3LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDU6NDIuNzMwNDI2MTQ3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NjkxMzEyNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEUk1fWEUgYW5kIERSTV9HUFVTVk0gUmVsYXRpb25zaGlwKipcblxuUmlnaHQsIGxldCBtZSBzZWUuLi4gSXQgbG9va3MgbGlrZSBvbmx5IGBEUk1fWEVgIGlzIGN1cnJlbnRseSBsZXZlcmFnaW5nIGBEUk1fR1BVU1ZNYC4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLiBOb3csIGEgY3J1Y2lhbCBxdWVzdGlvbiBhcmlzZXM6IGNhbiBgRFJNX1hFYCBiZSBhY2Nlc3NlZCBvciB0ZXN0ZWQgd2l0aG91dCBhY3R1YWwgaGFyZHdhcmUgcHJlc2VudD8gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGRldmVsb3BtZW50IGFuZCBDSS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBhIG1vY2sgb3IgdmlydHVhbCBkZXZpY2UgaW1wbGVtZW50YXRpb24gYXNzb2NpYXRlZCB3aXRoIGBEUk1fWEVgLiBJZiB0aGVyZSBpcywgdGhhdCBvcGVucyB1cCBhIHdob2xlIHJhbmdlIG9mIHBvc3NpYmlsaXRpZXMgZm9yIGVmZmljaWVudCB0ZXN0aW5nIGFuZCBkZWJ1Z2dpbmcgaW4gZW52aXJvbm1lbnRzIHdoZXJlIHBoeXNpY2FsIGhhcmR3YXJlIG1pZ2h0IG5vdCBiZSByZWFkaWx5IGF2YWlsYWJsZSBvciBjb252ZW5pZW50LiBMZXQncyBkaWcgZGVlcGVyIGFuZCBzZWUgaWYgd2UgY2FuIGZpbmQgdGhvc2UgY29tcG9uZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkxODIsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowNTo0Ni41OTk1NjEyNloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwMjEyNDMyOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGVfbW9ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDU6NDguNTAxNjkzMTg4WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0NzkzODkzMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBIYXJkd2FyZSBFbXVsYXRpb24gZm9yIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBhcHByb2FjaCB0aGlzIHBhdGNoLiBGaXJzdCwgSSdtIHRoaW5raW5nLCBjYW4gSSB0cmlnZ2VyIHRoaXMgYERSTV9YRWAgYmVoYXZpb3IgdGhyb3VnaCBhIHZpcnR1YWwgUENJIGRldmljZT8gTm8gZGljZSwgc3l6a2FsbGVyIGRvZXNuJ3QgZW11bGF0ZSB0aG9zZSBJbnRlbCBYZSBHUFVzLiBBbHJpZ2h0LCBzdHJpa2UgdGhhdC4gV2hhdCBhYm91dCBgbm91dmVhdWAsIHRoZSBOVklESUEgZHJpdmVyPyBOb3BlLCBzeXprYWxsZXIgZG9lc24ndCBoYW5kbGUgTlZJRElBIGVpdGhlci4gU2hvb3QsIG5vdCBgYW1keGRuYWAgZWl0aGVyLiBTeXprYWxsZXIgaXMgcmVhbGx5IGxpbWl0ZWQgaW4gdGVybXMgb2YgR1BVIGVtdWxhdGlvbi5cblxuSG1tLCB3YWl0IGEgc2Vjb25kLiBUaGlzIHBhdGNoIHRvdWNoZXMgYERvY3VtZW50YXRpb24vbW0vaG1tLnJzdGAuIFRoYXQgc3VnZ2VzdHMgaXQncyBub3Qgc3RyaWN0bHkgR1BVLXNwZWNpZmljLiBPa2F5LCBzbyBJIG5lZWQgdG8gYnJvYWRlbiBteSB0aGlua2luZy4gSXMgdGhlcmUgKmFueSogb3RoZXIgZHJpdmVyIG91dCB0aGVyZSB0aGF0IGFjdHVhbGx5ICp1c2VzKiBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgPyBJIG5lZWQgdG8ga25vdyB3aGF0IGVsc2UgdGhpcyBwYXRjaCB0b3VjaGVzIHRvIGdldCB0aGUgZnVsbCBzY29wZS4gT2theSwgSSBmb3VuZCBpdDogYGRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmNgIHVzZXMgaXQuIE5vdyBJJ20gZ2V0dGluZyBzb21ld2hlcmU7IGF0IGxlYXN0IEkgaGF2ZSBhIHNlY29uZCBwb2ludCBvZiByZWZlcmVuY2UuIEkgaGF2ZSBhIGxvdCBtb3JlIHRvIGxvb2sgaW50by5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk0MzIsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDU6NTUuOTgxMDg1OTE2WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTE4MCwiRXJyb3IiOiJZb3UgYXJlIHJlcGVhdGluZyB0aGUgc2FtZSB0b29sIGNhbGwgd2l0aCB0aGUgZXhhY3Qgc2FtZSBhcmd1bWVudHMuIFBsZWFzZSBzeW50aGVzaXplIHRoZSBpbmZvcm1hdGlvbiB5b3UgYWxyZWFkeSBoYXZlIGluc3RlYWQgb2YgcmVwZWF0aW5nIHF1ZXJpZXMuIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJZb3UgYXJlIHJlcGVhdGluZyB0aGUgc2FtZSB0b29sIGNhbGwgd2l0aCB0aGUgZXhhY3Qgc2FtZSBhcmd1bWVudHMuIFBsZWFzZSBzeW50aGVzaXplIHRoZSBpbmZvcm1hdGlvbiB5b3UgYWxyZWFkeSBoYXZlIGluc3RlYWQgb2YgcmVwZWF0aW5nIHF1ZXJpZXMuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjA1OjU1Ljk4MTEzODcyNloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDk3NzA4NjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGEgVGltZW91dCBGaXgqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGp1c3QgZ3JlcHBlZCBmb3IgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCwgd2hpY2ggZmxhZ2dlZCBhIGZldyBjYWxsIHNpdGVzLiBGcm9tIHRoZSBpbml0aWFsIGdyZXAsIEkgc2F3IHRoZSBmb2xsb3dpbmcgY2FsbGVyczogYGRyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jYCwgYGRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNgLCBgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY2AsIGBkcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jYCwgYGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmNgLCBgbGliL3Rlc3RfaG1tLmNgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jYC5cblxuTm93LCB0aGUgcGF0Y2ggaXRzZWxmIG9ubHkgdG91Y2hlcyBgRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0YCwgYGRyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jYCwgYGRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNgLCBhbmQgYGRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmNgLiBUaGUgY29yZSBxdWVzdGlvbiBub3cgaXMsIGFyZSB0aGVzZSBtb2RpZmllZCBwYXRocyByZWFjaGFibGUgd2l0aGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VLCB3aGljaCBzeXprYWxsZXIgcHJpbWFyaWx5IHVzZXM/XG5cbkNvbnNpZGVyaW5nIHRoZSBkZXZpY2VzIHRoZXNlIGRyaXZlcnMgdGFyZ2V0IC0gQU1EIFhETkEsIEludGVsIFhlLCBhbmQgTlZJRElBIOKAkyBhbmQgdGhlIGZhY3QgdGhhdCBTeXprYWxsZXIgbGFja3MgZW11bGF0aW9uIGZvciB0aGVzZSBzcGVjaWZpYyBoYXJkd2FyZSBjb21wb25lbnRzLCBpdCBsb29rcyB1bmxpa2VseS4gTGV0J3MgZGVsdmUgZGVlcGVyLlxuXG5gZHJtX2dwdXN2bS5jYCBpcyBvbmx5IHNlbGVjdGVkIGJ5IGBEUk1fWEVgLiBUaGUgb3RoZXJzIGFyZSBQQ0kgZHJpdmVycy4gV2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSwgaXQncyBhIGRlYWQgZW5kLiBUaGVyZWZvcmUsIG5vIGBub3V2ZWF1YCwgYGFtZHhkbmFgLCBvciBgRFJNX1hFYCBhcmUgcmVhY2hhYmxlLiBXaGF0IGFib3V0IHRoZSB1bnRvdWNoZWQgZmlsZXM/IGBtc2h2X3JlZ2lvbnMuY2AgaXMgSHlwZXItViwgc28gaXQncyBpcnJlbGV2YW50LiBgdW1lbV9vZHAuY2AgYW5kIGB0ZXN0X2htbS5jYCBhbHNvIGdvIHVudG91Y2hlZC5cblxuU28sIGl0IGFwcGVhcnMgdGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW5oZXJlbnRseSBpbmFjY2Vzc2libGUgaW4gY29tbW9uIHZpcnR1YWxpemF0aW9uIHNjZW5hcmlvcy4gV2UncmUgZWZmZWN0aXZlbHkgbG9va2luZyBhdCBoYXJkd2FyZS1kZXBlbmRlbnQgZnVuY3Rpb25hbGl0eSB0aGF0IHN5emthbGxlciBsaWtlbHkgd29uJ3QgdHJpZ2dlci4gSSB3aWxsIGRvdWJsZSBjaGVjayBteSBhc3N1bXB0aW9ucy5cblxuT2theSwgbGV0IG1lIGNvbmZpcm0uIENhbiBgbm91dmVhdWAgcG9zc2libHkgYmUgcHJvYmVkIHdpdGhvdXQgdGhlIGhhcmR3YXJlPyBJdCdzIGEgUENJIGRyaXZlci4gV2l0aG91dCBhbiBOVklESUEgUENJIGRldmljZSBwcmVzZW50LCB0aGUgZHJpdmVyIHdvbid0IGJpbmQgYW5kIGl0cyBpb2N0bHMgYmVjb21lIGluYWNjZXNzaWJsZS4gU2FtZSBmb3IgdGhlIG90aGVycy5cblxuSXMgaXQgKnBvc3NpYmxlKiB0aGF0IGBkcm1fZ3B1c3ZtYCBpcyB0ZXN0ZWQgdmlhIHNvbWUgb3RoZXIgbWVhbnMsIGxpa2UgYSBrdW5pdCB0ZXN0PyBUaGF0J3Mgd2hhdCBJIG5lZWQgdG8gY2hlY2sgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk4ODgsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDY6MDQuNDc4ODQ5OTI5WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQ2NTc4NTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRybV9ncHVzdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxNjgyIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG4uY2xhbmctZm9ybWF0PTcxPUZvckVhY2hNYWNyb3M6XFxuLS1cXG4uY2xhbmctZm9ybWF0LTE4Mi0gIC0gJ2RybV9nZW1fZm9yX2VhY2hfZ3B1dm1fYm9fc2FmZSdcXG4uY2xhbmctZm9ybWF0OjE4MzogIC0gJ2RybV9ncHVzdm1fZm9yX2VhY2hfcmFuZ2UnXFxuLmNsYW5nLWZvcm1hdC0xODQtICAtICdkcm1fZ3B1dmFfZm9yX2VhY2hfb3AnXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdD02Nz1PdmVydmlldyBvZiBiYXNlbGluZSBkZXNpZ25cXG4tLVxcbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0LTY5LVxcbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0OjcwOi4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jXFxuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3QtNzEtICAgOmRvYzogT3ZlcnZpZXdcXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC03Mi1cXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdDo3MzouLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY1xcbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0LTc0LSAgIDpkb2M6IExvY2tpbmdcXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC03NS1cXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdDo3NjouLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY1xcbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0LTc3LSAgIDpkb2M6IFBhcnRpYWwgVW5tYXBwaW5nIG9mIFJhbmdlc1xcbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0LTc4LVxcbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0Ojc5Oi4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jXFxuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3QtODAtICAgOmRvYzogRXhhbXBsZXNcXG4tLVxcbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0PTkxPVBvc3NpYmxlIGZ1dHVyZSBkZXNpZ24gZmVhdHVyZXNcXG4tLVxcbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0LTEwMC0qIFJhbmdlcyB3aXRoIG1peGVkIHN5c3RlbSBhbmQgZGV2aWNlIHBhZ2VzXFxuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3Q6MTAxOlxcdCogQ2FuIGJlIGFkZGVkIGlmIHJlcXVpcmVkIHRvIGRybV9ncHVzdm1fZ2V0X3BhZ2VzIGZhaXJseSBlYXNpbHkuXFxuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3QtMTAyLSogTXVsdGktR1BVIHN1cHBvcnRcXG4tLVxcbk5leHQvbWVyZ2UubG9nPTE0NTg9TWVyZ2UgbWFkZSBieSB0aGUgJ29ydCcgc3RyYXRlZ3kuXFxuLS1cXG5OZXh0L21lcmdlLmxvZy0xNTEyLSBkcml2ZXJzL2Jhc2UvYXJjaF9udW1hLmMgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNCAtXFxuTmV4dC9tZXJnZS5sb2c6MTUxMzogZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYyAgICAgICAgICAgICAgICAgICAgICAgfCAgNTIgKy1cXG5OZXh0L21lcmdlLmxvZy0xNTE0LSBkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jICAgICAgICAgICAgICB8ICAgMyArLVxcbi0tXFxuTmV4dC9tZXJnZS5sb2c9NTQ1Mj0kIGdpdCBtZXJnZSAtbSBNZXJnZSBicmFuY2ggJ2Zvci1saW51eC1uZXh0JyBvZiBodHRwczovL2dpdGxhYi5mcmVlZGVza3RvcC5vcmcvZHJtL21pc2Mva2VybmVsLmdpdCBkcm0tbWlzYy9mb3ItbGludXgtbmV4dFxcbk5leHQvbWVyZ2UubG9nOjU0NTM6QXV0by1tZXJnaW5nIGRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNcXG5OZXh0L21lcmdlLmxvZy01NDU0LUF1dG8tbWVyZ2luZyBkcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuY1xcbk5leHQvbWVyZ2UubG9nPTU0NTU9TWVyZ2UgbWFkZSBieSB0aGUgJ29ydCcgc3RyYXRlZ3kuXFxuTmV4dC9tZXJnZS5sb2c6NTQ1NjogZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYyAgICAgICAgICAgICAgICAgICAgICAgfCAyNDMgKysrKysrKysrKysrLS0tLS0tLS0tXFxuTmV4dC9tZXJnZS5sb2ctNTQ1Ny0gLi4uL2dwdS9kcm0vbm91dmVhdS9udmttL3N1YmRldi9nc3Avcm0vcjUzNS9mYnNyLmMgfCAgIDEgK1xcbi0tXFxuTmV4dC9tZXJnZS5sb2ctNTQ2OC0gZHJpdmVycy9ncHUvZHJtL3hlL3hlX3VzZXJwdHIuYyAgICAgICAgICAgICAgICAgICAgfCAgIDUgKy1cXG5OZXh0L21lcmdlLmxvZzo1NDY5OiBpbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmggICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2NyArKysrLS1cXG5OZXh0L21lcmdlLmxvZy01NDcwLSAxNCBmaWxlcyBjaGFuZ2VkLCAzNTAgaW5zZXJ0aW9ucygrKSwgMjE4IGRlbGV0aW9ucygtKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlPTEwNz1vYmotJChDT05GSUdfRFJNX0dQVVZNKSArPSBkcm1fZ3B1dm0ub1xcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS0xMDgtXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlOjEwOTpkcm1fZ3B1c3ZtX2hlbHBlci15IDo9IFxcXFxcXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6MTEwOlxcdGRybV9ncHVzdm0ub1xcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZToxMTE6ZHJtX2dwdXN2bV9oZWxwZXItJChDT05GSUdfWk9ORV9ERVZJQ0UpICs9IFxcXFxcXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUtMTEyLVxcdGRybV9wYWdlbWFwLm9cXFxcXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUtMTE0LVxcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZToxMTU6b2JqLSQoQ09ORklHX0RSTV9HUFVTVk0pICs9IGRybV9ncHVzdm1faGVscGVyLm9cXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUtMTE2LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNy0jaW5jbHVkZSBcXHUwMDNjZHJtL2RybV9kZXZpY2UuaFxcdTAwM2VcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE4OiNpbmNsdWRlIFxcdTAwM2Nkcm0vZHJtX2dwdXN2bS5oXFx1MDAzZVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTktI2luY2x1ZGUgXFx1MDAzY2RybS9kcm1fcGFnZW1hcC5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01MS0gKiAtIFBhZ2VzOlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTI6ICpcXHRzdHJ1Y3QgZHJtX2dwdXN2bV9wYWdlcyBob2xkcyB0aGUgRE1BIG1hcHBpbmcgc3RhdGUgZm9yIGEgcmFuZ2Ugb2ZcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTUzLSAqXFx0Q1BVIHZpcnR1YWwgYWRkcmVzc2VzOiB0aGUgRE1BIG1hcHBlZCBkZXZpY2UgYWRkcmVzc2VzLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01Ni0gKlxcdG1hcHBpbmdzLlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTc6ICpcXHRBIGRyaXZlciBlbWJlZHMgb25lIG9yIG1vcmUgc3RydWN0IGRybV9ncHVzdm1fcGFnZXMgYWxvbmdzaWRlIGl0c1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTg6ICpcXHRzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSwgY2hvb3Npbmcgb25lIG9mIHR3byBsYXlvdXRzOlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTktICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjYwOiAqXFx0MToxIC0gb25lIGRybV9ncHVzdm1fcGFnZXMgcGVyIHJhbmdlIChvbmUgZHJtX2RldmljZSkuIFNpbXBsZXN0XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02MS0gKlxcdGxheW91dDsgdG8gbWlycm9yIGEgVkEgcmFuZ2Ugb24gc2V2ZXJhbCBkZXZpY2VzIGEgZHJpdmVyIHVzZXMgYVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NC0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NjU6ICpcXHROOjEgLSBvbmUgZHJtX2dwdXN2bV9wYWdlcyBwZXIgZHJtX2RldmljZSwgYWxsIHNoYXJpbmcgb25lIHJhbmdlIGFuZFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjYtICpcXHRub3RpZmllcjsgb25seSB0aGUgcGVyLWRldmljZSBETUEgbWFwcGluZyBkaWZmZXJzLiBUaGUgaW5zdGFuY2VzIG11c3RcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjY3OiAqXFx0c2l0IGluIGNvbnRpZ3VvdXMgbWVtb3J5IHNvIGEgc2luZ2xlIGRybV9ncHVzdm1fcmFuZ2Vfc2V0X3VubWFwcGVkKClcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY4LSAqXFx0Y2FuIG1hcmsgdGhlbSBhbGwuIEEgZHJpdmVyIGNhbiBrZWVwIG9uZSBpbnN0YW5jZSBpbmxpbmUgZm9yIHRoZSBzaW5nbGVcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzQtICpcXHRcXHRzdHJ1Y3QgZHJpdmVyX3JhbmdlIHtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjc1OiAqXFx0XFx0XFx0c3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgYmFzZTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTc2LSAqXFx0XFx0XFx0dW5zaWduZWQgaW50IG51bV9wYWdlcztcXHQvLyAxOiBpbmxpbmVfcGFnZXMsIFxcdTAwM2UxOiBwYWdlc1tdXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy03Ny0gKlxcdFxcdFxcdHVuaW9uIHtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjc4OiAqXFx0XFx0XFx0XFx0c3RydWN0IGRybV9ncHVzdm1fcGFnZXMgaW5saW5lX3BhZ2VzO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Nzk6ICpcXHRcXHRcXHRcXHRzdHJ1Y3QgZHJtX2dwdXN2bV9wYWdlcyAqcGFnZXM7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04MC0gKlxcdFxcdFxcdH07XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg0LSAqXFx0YWxsb2NhdG9yIChlLmcuIGtjYWxsb2MobnVtX3BhZ2VzLCAuLi4pKSwgaW5pdGlhbGlzZXMgZWFjaCBlbnRyeSB3aXRoXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4NTogKlxcdGRybV9ncHVzdm1faW5pdF9wYWdlcygpLCBhbmQgZnJlZXMgZWFjaCBlbnRyeSB3aXRoXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4NjogKlxcdGRybV9ncHVzdm1fZnJlZV9wYWdlcygpIHBsdXMgdGhlIGFycmF5IGl0c2VsZiwgZnJvbSBpdHMgcmFuZ2UgZnJlZVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODc6ICpcXHRjYWxsYmFjay4gRWFjaCBkcm1fZ3B1c3ZtX3BhZ2VzIGlzIG1hcHBlZCBpbmRlcGVuZGVudGx5IGJ5IHRoZWlyIG93blxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODgtICpcXHRkcm1fZGV2aWNlLlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODk6ICpcXHRFYWNoIGRybV9ncHVzdm1fcGFnZXMgbXVzdCBiZSB6ZXJvLWluaXRpYWxpc2VkIGFuZCBpbml0aWFsaXNlZCB3aXRoXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5MDogKlxcdGRybV9ncHVzdm1faW5pdF9wYWdlcygpLCBjYWxsZWQgb25jZSBwZXIgZW50cnkuXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05MS0gKlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMzUtICogZXhjZXB0IGZvciB0aGUgcmVjaGVjayByYW5nZSdzIHBhZ2VzIGJlaW5nIHZhbGlkXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMzY6ICogKGRybV9ncHVzdm1fcGFnZXNfdmFsaWQpIHdoZW4gdGhlIGRyaXZlciBpcyBjb21taXR0aW5nIEdQVSBiaW5kaW5ncy5cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTEzNy0gKiBUaGlzIGxvY2sgY29ycmVzcG9uZHMgdG8gdGhlIGBgZHJpdmVyLVxcdTAwM2V1cGRhdGVgYCBsb2NrIG1lbnRpb25lZCBpblxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNDMtICogbG9jayB0byBzYWZlZ3VhcmQgY29yZSBHUFUgU1ZNIGZ1bmN0aW9uIGNhbGxzIHRoYXQgbW9kaWZ5IHN0YXRlLCBzdWNoIGFzXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNDQ6ICogZHJtX2dwdXN2bV9yYW5nZV9maW5kX29yX2luc2VydCBhbmQgZHJtX2dwdXN2bV9yYW5nZV9yZW1vdmUuIFRoaXMgbG9jayBpc1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTQ1LSAqIGRlbm90ZWQgYXMgJ2RyaXZlcl9zdm1fbG9jaycgaW4gY29kZSBleGFtcGxlcy4gRmluZXIgZ3JhaW5lZCBkcml2ZXIgc2lkZVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTQ2LSAqIGxvY2tpbmcgc2hvdWxkIGFsc28gYmUgcG9zc2libGUgZm9yIGNvbmN1cnJlbnQgR1BVIGZhdWx0IHByb2Nlc3Npbmcgd2l0aGluIGFcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE0NzogKiBzaW5nbGUgR1BVIFNWTS4gVGhlICdkcml2ZXJfc3ZtX2xvY2snIGNhbiBiZSB2aWEgZHJtX2dwdXN2bV9kcml2ZXJfc2V0X2xvY2tcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE0OC0gKiB0byBhZGQgYW5ub3RhdGlvbnMgdG8gR1BVIFNWTS5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTg0LSAqXFx0c3RydWN0IGRyaXZlcl9yYW5nZSB7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxODU6ICpcXHRcXHRzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSBiYXNlO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTg2OiAqXFx0XFx0c3RydWN0IGRybV9ncHVzdm1fcGFnZXMgcGFnZXM7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xODctICpcXHR9O1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTg4LSAqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxODk6ICpcXHRpbnQgZHJpdmVyX2JpbmRfcmFuZ2Uoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSwgc3RydWN0IGRyaXZlcl9yYW5nZSAqZHJhbmdlKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTkwLSAqXFx0e1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xOTQtICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE5NTogKlxcdFxcdGRybV9ncHVzdm1fbm90aWZpZXJfbG9jayhncHVzdm0pO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTk2OiAqXFx0XFx0aWYgKGRybV9ncHVzdm1fcGFnZXNfdmFsaWQoZ3B1c3ZtLCBcXHUwMDI2ZHJhbmdlLVxcdTAwM2VwYWdlcykpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xOTctICpcXHRcXHRcXHRkcml2ZXJfY29tbWl0X2JpbmQoZ3B1c3ZtLCBkcmFuZ2UpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xOTktICpcXHRcXHRcXHRlcnIgPSAtRUFHQUlOO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjAwOiAqXFx0XFx0ZHJtX2dwdXN2bV9ub3RpZmllcl91bmxvY2soZ3B1c3ZtKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTIwMS0gKlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMDQtICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjIwNTogKlxcdGludCBkcml2ZXJfZ3B1X2ZhdWx0KHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sIHVuc2lnbmVkIGxvbmcgZmF1bHRfYWRkcixcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTIwNi0gKlxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBncHV2YV9zdGFydCwgdW5zaWduZWQgbG9uZyBncHV2YV9lbmQpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMDctICpcXHR7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyMDg6ICpcXHRcXHRzdHJ1Y3QgZHJtX2dwdXN2bV9jdHggY3R4ID0ge307XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMDktICpcXHRcXHRzdHJ1Y3QgZHJpdmVyX3JhbmdlICpkcmFuZ2U7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyMTA6ICpcXHRcXHRzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2U7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMTEtICpcXHRcXHRpbnQgZXJyO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMTctICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjIxODogKlxcdFxcdHJhbmdlID0gZHJtX2dwdXN2bV9yYW5nZV9maW5kX29yX2luc2VydChncHVzdm0sIGZhdWx0X2FkZHIsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMTktICpcXHRcXHRcXHRcXHRcXHRcXHRcXHRncHV2YV9zdGFydCwgZ3B1dmFfZW5kLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMzQtICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjIzNTogKlxcdFxcdGVyciA9IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKGdwdXN2bSwgXFx1MDAyNmRyYW5nZS1cXHUwMDNlcGFnZXMsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMzYtICpcXHRcXHRcXHRcXHRcXHQgICBncHVzdm0tXFx1MDAzZW1tLCBcXHUwMDI2cmFuZ2UtXFx1MDAzZW5vdGlmaWVyLVxcdTAwM2Vub3RpZmllcixcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjIzNzogKlxcdFxcdFxcdFxcdFxcdCAgIGRybV9ncHVzdm1fcmFuZ2Vfc3RhcnQocmFuZ2UpLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjM4OiAqXFx0XFx0XFx0XFx0XFx0ICAgZHJtX2dwdXN2bV9yYW5nZV9lbmQocmFuZ2UpLCBcXHUwMDI2Y3R4KTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTIzOS0gKlxcdFxcdGlmIChlcnIgPT0gLUVPUE5PVFNVUFAgfHwgZXJyID09IC1FRkFVTFQgfHwgZXJyID09IC1FUEVSTSkge1xcdC8vIENQVSBtYXBwaW5ncyBjaGFuZ2VkXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yNDAtICpcXHRcXHRcXHRpZiAoZXJyID09IC1FT1BOT1RTVVBQKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjQxOiAqXFx0XFx0XFx0XFx0ZHJtX2dwdXN2bV9yYW5nZV9ldmljdChncHVzdm0sIHJhbmdlKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI0Mi0gKlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI1OS0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjYwOiAqXFx0Ly8gVGhlIGRyaXZlciBvd25zIHRoZSBkcm1fZ3B1c3ZtX3BhZ2VzIGxpZmVjeWNsZS4gb3BzLVxcdTAwM2VyYW5nZV9mcmVlIGlzXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyNjE6ICpcXHQvLyB0aGUgZmluYWwgZmFsbGJhY2s6IGRybV9ncHVzdm1fZnJlZV9wYWdlcygpIHVubWFwcyBhbnlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI2Mi0gKlxcdC8vIGxpbmdlcmluZyBETUEgbWFwcGluZyBhbmQgYSBuby1vcCBpZiBhbHJlYWR5IHVubWFwcGVkIGFuZCBmcmVlcyB0aGVcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI2My0gKlxcdC8vIGRtYV9hZGRyIGFycmF5LiBUaGUgbm9ybWFsIGZsb3cgaXMgdG8gRE1BIHVubWFwIGJlZm9yZVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjY0OiAqXFx0Ly8gZHJtX2dwdXN2bV9yYW5nZV9yZW1vdmUoKSAoYmVmb3JlIHRoZSByYW5nZSBsZWF2ZXMgdGhlIHRyZWUpLlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjY1OiAqXFx0dm9pZCBkcml2ZXJfcmFuZ2VfZnJlZShzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yNjYtICpcXHR7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI2OS0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjcwOiAqXFx0XFx0ZHJtX2dwdXN2bV9mcmVlX3BhZ2VzKHJhbmdlLVxcdTAwM2VncHVzdm0sIFxcdTAwMjZkcmFuZ2UtXFx1MDAzZXBhZ2VzLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjcxOiAqXFx0XFx0XFx0XFx0ICAgICAgZHJtX2dwdXN2bV9yYW5nZV9zaXplKHJhbmdlKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI3Mi0gKlxcdFxcdGtmcmVlKGRyYW5nZSk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI3NC0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Mjc1OiAqXFx0dm9pZCBfX2RyaXZlcl9nYXJiYWdlX2NvbGxlY3RvcihzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Mjc2OiAqXFx0XFx0XFx0XFx0XFx0c3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjc3LSAqXFx0e1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yODEtICpcXHRcXHRpZiAocmFuZ2UtXFx1MDAzZWZsYWdzLnBhcnRpYWxfdW5tYXApXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyODI6ICpcXHRcXHRcXHRkcm1fZ3B1c3ZtX3JhbmdlX2V2aWN0KGdwdXN2bSwgcmFuZ2UpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjgzLSAqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yODQtICpcXHRcXHRkcml2ZXJfdW5iaW5kX3JhbmdlKHJhbmdlKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjI4NTogKlxcdFxcdC8vIFRoZSBwYWdlcyBtdXN0IGJlIERNQSB1bm1hcHBlZCBiZWZvcmUgZHJtX2dwdXN2bV9yYW5nZV9yZW1vdmUoKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjg2LSAqXFx0XFx0Ly8gLCBzbyBhIHJhbmdlIGlzIG5ldmVyIG9mZiB0aGUgTU1VIGludGVydmFsIHRyZWUgd2hpbGUgc3RpbGwgRE1BXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI4OS0gKlxcdFxcdC8vIGZvciBkZXZpY2UgRE1BLiBUaGlzIGlzIHRoZSBub3JtYWwgdW5tYXAgcG9pbnQuXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyOTA6ICpcXHRcXHRkcm1fZ3B1c3ZtX3VubWFwX3BhZ2VzKGdwdXN2bSwgXFx1MDAyNmRyYW5nZS1cXHUwMDNlcGFnZXMsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyOTE6ICpcXHRcXHRcXHRcXHQgICAgICAgZHJtX2dwdXN2bV9yYW5nZV9zaXplKHJhbmdlKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjkyOiAqXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjYoc3RydWN0IGRybV9ncHVzdm1fY3R4KXsgLmluX25vdGlmaWVyID0gZmFsc2UgfSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyOTM6ICpcXHRcXHRkcm1fZ3B1c3ZtX3JhbmdlX3JlbW92ZShncHVzdm0sIHJhbmdlKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI5NC0gKlxcdH1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI5NS0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Mjk2OiAqXFx0dm9pZCBkcml2ZXJfZ2FyYmFnZV9jb2xsZWN0b3Ioc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI5Ny0gKlxcdHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzA3LSAqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozMDg6ICpcXHR2b2lkIGRyaXZlcl9pbnZhbGlkYXRpb24oc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjMwOTogKlxcdFxcdFxcdFxcdCBzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqbm90aWZpZXIsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zMTAtICpcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqbW11X3JhbmdlKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzExLSAqXFx0e1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzEyOiAqXFx0XFx0c3RydWN0IGRybV9ncHVzdm1fY3R4IGN0eCA9IHsgLmluX25vdGlmaWVyID0gdHJ1ZSwgfTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjMxMzogKlxcdFxcdHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSA9IE5VTEw7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zMTQtICpcXHRcXHRzdHJ1Y3QgZHJpdmVyX3JhbmdlICpkcmFuZ2U7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMxNy0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzE4OiAqXFx0XFx0ZHJtX2dwdXN2bV9mb3JfZWFjaF9yYW5nZShyYW5nZSwgbm90aWZpZXIsIG1tdV9yYW5nZS1cXHUwMDNlc3RhcnQsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zMTktICpcXHRcXHRcXHRcXHRcXHQgIG1tdV9yYW5nZS1cXHUwMDNlZW5kKSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMyMS0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzIyOiAqXFx0XFx0XFx0ZHJtX2dwdXN2bV91bm1hcF9wYWdlcyhncHVzdm0sIFxcdTAwMjZkcmFuZ2UtXFx1MDAzZXBhZ2VzLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzIzOiAqXFx0XFx0XFx0XFx0XFx0ICAgICAgIGRybV9ncHVzdm1fcmFuZ2Vfc2l6ZShyYW5nZSkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMyNC0gKlxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2Y3R4KTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzI4LSAqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozMjk6ICpcXHRcXHRcXHRkcm1fZ3B1c3ZtX3JhbmdlX3NldF91bm1hcHBlZChyYW5nZSwgXFx1MDAyNmRyYW5nZS1cXHUwMDNlcGFnZXMsIDEsIG1tdV9yYW5nZSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zMzAtICpcXHRcXHRcXHRkcml2ZXJfZ2FyYmFnZV9jb2xsZWN0b3JfYWRkKGdwdXN2bSwgcmFuZ2UpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz0zNDg9bnBhZ2VzX2luX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zNTMtLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozNTQ6ICogZHJtX2dwdXN2bV9ub3RpZmllcl9maW5kKCkgLSBGaW5kIEdQVSBTVk0gbm90aWZpZXIgZnJvbSBHUFUgU1ZNXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zNTUtICogQGdwdXN2bTogUG9pbnRlciB0byB0aGUgR1BVIFNWTSBzdHJ1Y3R1cmUuXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM1OC0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzU5OiAqIFJldHVybjogQSBwb2ludGVyIHRvIHRoZSBkcm1fZ3B1c3ZtX25vdGlmaWVyIGlmIGZvdW5kIG9yIE5VTExcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM2MC0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjM2MTpzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozNjI6ZHJtX2dwdXN2bV9ub3RpZmllcl9maW5kKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zNjMtXFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgZW5kKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zNjktXFx0aWYgKGl0cmVlKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzcwOlxcdFxcdHJldHVybiBjb250YWluZXJfb2YoaXRyZWUsIHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyLCBpdHJlZSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zNzEtXFx0ZWxzZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zNzMtfVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Mzc0OkVYUE9SVF9TWU1CT0xfR1BMKGRybV9ncHVzdm1fbm90aWZpZXJfZmluZCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zNzUtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zNzYtLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozNzc6ICogZHJtX2dwdXN2bV9yYW5nZV9maW5kKCkgLSBGaW5kIEdQVSBTVk0gcmFuZ2UgZnJvbSBHUFUgU1ZNIG5vdGlmaWVyXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zNzgtICogQG5vdGlmaWVyOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIG5vdGlmaWVyIHN0cnVjdHVyZS5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzgxLSAqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozODI6ICogUmV0dXJuOiBBIHBvaW50ZXIgdG8gdGhlIGRybV9ncHVzdm1fcmFuZ2UgaWYgZm91bmQgb3IgTlVMTFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzgzLSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Mzg0OnN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjM4NTpkcm1fZ3B1c3ZtX3JhbmdlX2ZpbmQoc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzg2LVxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zOTItXFx0aWYgKGl0cmVlKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzkzOlxcdFxcdHJldHVybiBjb250YWluZXJfb2YoaXRyZWUsIHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlLCBpdHJlZSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zOTQtXFx0ZWxzZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zOTYtfVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Mzk3OkVYUE9SVF9TWU1CT0xfR1BMKGRybV9ncHVzdm1fcmFuZ2VfZmluZCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zOTgtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zOTktLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0MDA6ICogZHJtX2dwdXN2bV9ub3RpZmllcl9pbnZhbGlkYXRlKCkgLSBJbnZhbGlkYXRlIGEgR1BVIFNWTSBub3RpZmllci5cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQwMS0gKiBAbW5pOiBQb2ludGVyIHRvIHRoZSBtbXVfaW50ZXJ2YWxfbm90aWZpZXIgc3RydWN0dXJlLlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz00MTE9c3RhdGljIGJvb2xcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQxMjpkcm1fZ3B1c3ZtX25vdGlmaWVyX2ludmFsaWRhdGUoc3RydWN0IG1tdV9pbnRlcnZhbF9ub3RpZmllciAqbW5pLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDEzLVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlICptbXVfcmFuZ2UsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQxNS17XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0MTY6XFx0c3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyID1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQxNy1cXHRcXHRjb250YWluZXJfb2YobW5pLCB0eXBlb2YoKm5vdGlmaWVyKSwgbm90aWZpZXIpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDE4OlxcdHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0gPSBub3RpZmllci1cXHUwMDNlZ3B1c3ZtO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDE5LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00MzEtLypcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQzMjogKiBkcm1fZ3B1c3ZtX25vdGlmaWVyX29wcyAtIE1NVSBpbnRlcnZhbCBub3RpZmllciBvcGVyYXRpb25zIGZvciBHUFUgU1ZNXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00MzMtICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0MzQ6c3RhdGljIGNvbnN0IHN0cnVjdCBtbXVfaW50ZXJ2YWxfbm90aWZpZXJfb3BzIGRybV9ncHVzdm1fbm90aWZpZXJfb3BzID0ge1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDM1OlxcdC5pbnZhbGlkYXRlID0gZHJtX2dwdXN2bV9ub3RpZmllcl9pbnZhbGlkYXRlLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDM2LX07XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQzOC0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQzOTogKiBkcm1fZ3B1c3ZtX2luaXQoKSAtIEluaXRpYWxpemUgdGhlIEdQVSBTVk0uXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00NDAtICogQGdwdXN2bTogUG9pbnRlciB0byB0aGUgR1BVIFNWTSBzdHJ1Y3R1cmUuXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ1My0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDU0OiAqIE5vdGU6IElmIG9ubHkgdXNpbmcgdGhlIHNpbXBsZSBkcm1fZ3B1c3ZtX3BhZ2VzIEFQSSAoZ2V0L3VubWFwL2ZyZWUpLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDU1LSAqIHRoZW4gb25seSBAZ3B1c3ZtIGFuZCBAbmFtZSBhcmUgZXhwZWN0ZWQuIFRoZSBAZHJtIGRybV9kZXZpY2UgZm9yIGRtYVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDU2OiAqIG1hcHBpbmdzIGlzIGJvdW5kIHBlci1wYWdlcyB2aWEgZHJtX2dwdXN2bV9pbml0X3BhZ2VzKCkgYmVmb3JlIHRoZSBmaXJzdFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDU3OiAqIGRybV9ncHVzdm1fZ2V0X3BhZ2VzKCkgY2FsbC4gSG93ZXZlciwgdGhlIHNhbWUgYmFzZVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDU4LSAqIEBncHVzdm0gY2FuIGFsc28gYmUgdXNlZCB3aXRoIGJvdGggbW9kZXMgdG9nZXRoZXIgaW4gd2hpY2ggY2FzZSB0aGUgZnVsbFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDU5OiAqIHNldHVwIGlzIG5lZWRlZCwgd2hlcmUgdGhlIGNvcmUgZHJtX2dwdXN2bV9wYWdlcyBBUEkgd2lsbCBzaW1wbHkgbmV2ZXIgdXNlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00NjAtICogdGhlIG90aGVyIGZpZWxkcy5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDYzLSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDY0OmludCBkcm1fZ3B1c3ZtX2luaXQoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ2NS1cXHRcXHQgICAgY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDY4LVxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5vdGlmaWVyX3NpemUsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0Njk6XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBkcm1fZ3B1c3ZtX29wcyAqb3BzLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDcwLVxcdFxcdCAgICBjb25zdCB1bnNpZ25lZCBsb25nICpjaHVua19zaXplcywgaW50IG51bV9jaHVua3MpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ3Ni1cXHR9IGVsc2Uge1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDc3OlxcdFxcdC8qIE5vIGZ1bGwgU1ZNIG1vZGUsIG9ubHkgY29yZSBkcm1fZ3B1c3ZtX3BhZ2VzIEFQSS4gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ3OC1cXHRcXHRpZiAob3BzIHx8IG51bV9jaHVua3MgfHwgbW1fcmFuZ2UgfHwgbm90aWZpZXJfc2l6ZSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTA1LX1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjUwNjpFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1c3ZtX2luaXQpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTA3LVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTA4LS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTA5OiAqIHRvX2RybV9ncHVzdm1fbm90aWZpZXIoKSAtIHJldHJpZXZlIHRoZSBjb250YWluZXIgc3RydWN0IGZvciBhIGdpdmVuIHJidHJlZSBub2RlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1MTA6ICogQG5vZGU6IGEgcG9pbnRlciB0byB0aGUgcmJ0cmVlIG5vZGUgZW1iZWRkZWQgd2l0aGluIGEgZHJtX2dwdXN2bV9ub3RpZmllciBzdHJ1Y3RcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTUxMS0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTEyOiAqIFJldHVybjogQSBwb2ludGVyIHRvIHRoZSBjb250YWluaW5nIGRybV9ncHVzdm1fbm90aWZpZXIgc3RydWN0dXJlLlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTEzLSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTE0OnN0YXRpYyBzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqdG9fZHJtX2dwdXN2bV9ub3RpZmllcihzdHJ1Y3QgcmJfbm9kZSAqbm9kZSlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTUxNS17XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1MTY6XFx0cmV0dXJuIGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciwgaXRyZWUucmIpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTE3LX1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTE5LS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTIwOiAqIGRybV9ncHVzdm1fbm90aWZpZXJfaW5zZXJ0KCkgLSBJbnNlcnQgR1BVIFNWTSBub3RpZmllclxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTIxLSAqIEBncHVzdm06IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTUyNS0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjUyNjpzdGF0aWMgdm9pZCBkcm1fZ3B1c3ZtX25vdGlmaWVyX2luc2VydChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTI3OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqbm90aWZpZXIpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01Mjgte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01MzUtXFx0aWYgKG5vZGUpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1MzY6XFx0XFx0aGVhZCA9IFxcdTAwMjYodG9fZHJtX2dwdXN2bV9ub3RpZmllcihub2RlKSktXFx1MDAzZWVudHJ5O1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTM3LVxcdGVsc2VcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTQzLS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTQ0OiAqIGRybV9ncHVzdm1fbm90aWZpZXJfcmVtb3ZlKCkgLSBSZW1vdmUgR1BVIFNWTSBub3RpZmllclxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTQ1LSAqIEBncHVzdm06IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTQ5LSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTUwOnN0YXRpYyB2b2lkIGRybV9ncHVzdm1fbm90aWZpZXJfcmVtb3ZlKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1NTE6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpub3RpZmllcilcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU1Mi17XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU1Ny0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjU1ODogKiBkcm1fZ3B1c3ZtX2ZpbmkoKSAtIEZpbmFsaXplIHRoZSBHUFUgU1ZNLlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTU5LSAqIEBncHVzdm06IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gc3RydWN0dXJlLlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01NjMtICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1NjQ6dm9pZCBkcm1fZ3B1c3ZtX2Zpbmkoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU2NS17XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1NjY6XFx0c3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyLCAqbmV4dDtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU2Ny1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjU2ODpcXHRkcm1fZ3B1c3ZtX2Zvcl9lYWNoX25vdGlmaWVyX3NhZmUobm90aWZpZXIsIG5leHQsIGdwdXN2bSwgMCwgTE9OR19NQVgpIHtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjU2OTpcXHRcXHRzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UsICpfX25leHQ7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01NzAtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU3Ni1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjU3NzpcXHRcXHRkcm1fZ3B1c3ZtX2Zvcl9lYWNoX3JhbmdlX3NhZmUocmFuZ2UsIF9fbmV4dCwgbm90aWZpZXIsIDAsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01NzgtXFx0XFx0XFx0XFx0XFx0ICAgICAgIExPTkdfTUFYKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTc5OlxcdFxcdFxcdGRybV9ncHVzdm1fcmFuZ2VfcmVtb3ZlKGdwdXN2bSwgcmFuZ2UpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTgwLVxcdH1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTg1LX1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjU4NjpFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1c3ZtX2ZpbmkpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTg3LVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTg4LS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTg5OiAqIGRybV9ncHVzdm1fbm90aWZpZXJfYWxsb2MoKSAtIEFsbG9jYXRlIEdQVSBTVk0gbm90aWZpZXJcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU5MC0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01OTYtICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1OTc6c3RhdGljIHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjU5ODpkcm1fZ3B1c3ZtX25vdGlmaWVyX2FsbG9jKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sIHVuc2lnbmVkIGxvbmcgZmF1bHRfYWRkcilcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU5OS17XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2MDA6XFx0c3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjAxLVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02MjAtLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2MjE6ICogZHJtX2dwdXN2bV9ub3RpZmllcl9mcmVlKCkgLSBGcmVlIEdQVSBTVk0gbm90aWZpZXJcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTYyMi0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02MjYtICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2Mjc6c3RhdGljIHZvaWQgZHJtX2dwdXN2bV9ub3RpZmllcl9mcmVlKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2Mjg6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqbm90aWZpZXIpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02Mjkte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02MzgtLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2Mzk6ICogdG9fZHJtX2dwdXN2bV9yYW5nZSgpIC0gcmV0cmlldmUgdGhlIGNvbnRhaW5lciBzdHJ1Y3QgZm9yIGEgZ2l2ZW4gcmJ0cmVlIG5vZGVcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjY0MDogKiBAbm9kZTogYSBwb2ludGVyIHRvIHRoZSByYnRyZWUgbm9kZSBlbWJlZGRlZCB3aXRoaW4gYSBkcm1fZ3B1c3ZtX3JhbmdlIHN0cnVjdFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjQxLSAqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2NDI6ICogUmV0dXJuOiBBIHBvaW50ZXIgdG8gdGhlIGNvbnRhaW5pbmcgZHJtX2dwdXN2bV9yYW5nZSBzdHJ1Y3R1cmUuXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NDMtICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2NDQ6c3RhdGljIHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICp0b19kcm1fZ3B1c3ZtX3JhbmdlKHN0cnVjdCByYl9ub2RlICpub2RlKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjQ1LXtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjY0NjpcXHRyZXR1cm4gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlLCBpdHJlZS5yYik7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NDctfVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NDktLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2NTA6ICogZHJtX2dwdXN2bV9yYW5nZV9pbnNlcnQoKSAtIEluc2VydCBHUFUgU1ZNIHJhbmdlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NTEtICogQG5vdGlmaWVyOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIG5vdGlmaWVyIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NTUtICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2NTY6c3RhdGljIHZvaWQgZHJtX2dwdXN2bV9yYW5nZV9pbnNlcnQoc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NjU3OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NTgte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NjEtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2NjI6XFx0ZHJtX2dwdXN2bV9ub3RpZmllcl9sb2NrKG5vdGlmaWVyLVxcdTAwM2VncHVzdm0pO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjYzLVxcdGludGVydmFsX3RyZWVfaW5zZXJ0KFxcdTAwMjZyYW5nZS1cXHUwMDNlaXRyZWUsIFxcdTAwMjZub3RpZmllci1cXHUwMDNlcm9vdCk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY2Ni1cXHRpZiAobm9kZSlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjY2NzpcXHRcXHRoZWFkID0gXFx1MDAyNih0b19kcm1fZ3B1c3ZtX3JhbmdlKG5vZGUpKS1cXHUwMDNlZW50cnk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NjgtXFx0ZWxzZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NzEtXFx0bGlzdF9hZGQoXFx1MDAyNnJhbmdlLVxcdTAwM2VlbnRyeSwgaGVhZCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2NzI6XFx0ZHJtX2dwdXN2bV9ub3RpZmllcl91bmxvY2sobm90aWZpZXItXFx1MDAzZWdwdXN2bSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NzMtfVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NzUtLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2NzY6ICogX19kcm1fZ3B1c3ZtX3JhbmdlX3JlbW92ZSgpIC0gUmVtb3ZlIEdQVSBTVk0gcmFuZ2VcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY3Ny0gKiBAbm90aWZpZXI6IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gbm90aWZpZXIgc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY4MS0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjY4MjpzdGF0aWMgdm9pZCBfX2RybV9ncHVzdm1fcmFuZ2VfcmVtb3ZlKHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpub3RpZmllcixcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjY4MzpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02ODQte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02ODktLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2OTA6ICogZHJtX2dwdXN2bV9yYW5nZV9hbGxvYygpIC0gQWxsb2NhdGUgR1BVIFNWTSByYW5nZVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjkxLSAqIEBncHVzdm06IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTcwMC0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjcwMTpzdGF0aWMgc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NzAyOmRybV9ncHVzdm1fcmFuZ2VfYWxsb2Moc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjcwMzpcXHRcXHQgICAgICAgc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzA0LVxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGZhdWx0X2FkZHIsIHVuc2lnbmVkIGxvbmcgY2h1bmtfc2l6ZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzA2LXtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjcwNzpcXHRzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2U7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy03MDgtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTcyOC0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjcyOTogKiBkcm1fZ3B1c3ZtX2htbV9wZm5fdG9fb3JkZXIoKSAtIEdldCB0aGUgbGFyZ2VzdCBDUFUgbWFwcGluZyBvcmRlci5cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTczMC0gKiBAaG1tX3BmbjogVGhlIGN1cnJlbnQgaG1tX3Bmbi5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzQxLSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NzQyOnN0YXRpYyB1bnNpZ25lZCBpbnQgZHJtX2dwdXN2bV9obW1fcGZuX3RvX29yZGVyKHVuc2lnbmVkIGxvbmcgaG1tX3BmbixcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTc0My1cXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGhtbV9wZm5faW5kZXgsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTc1Ny0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjc1ODogKiBkcm1fZ3B1c3ZtX2NoZWNrX3BhZ2VzKCkgLSBDaGVjayBwYWdlc1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzU5LSAqIEBncHVzdm06IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTc2OS0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjc3MDpzdGF0aWMgYm9vbCBkcm1fZ3B1c3ZtX2NoZWNrX3BhZ2VzKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo3NzE6XFx0XFx0XFx0XFx0ICAgc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzcyLVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04MTYtXFx0XFx0fVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODE3OlxcdFxcdGkgKz0gMHgxIFxcdTAwM2NcXHUwMDNjIGRybV9ncHVzdm1faG1tX3Bmbl90b19vcmRlcihwZm5zW2ldLCBpLCBucGFnZXMpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODE4LVxcdH1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODI1LS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODI2OiAqIGRybV9ncHVzdm1fc2Nhbl9tbSgpIC0gQ2hlY2sgdGhlIG1pZ3JhdGlvbiBzdGF0ZSBvZiBhIGRybV9ncHVzdm1fcmFuZ2VcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjgyNzogKiBAcmFuZ2U6IFBvaW50ZXIgdG8gdGhlIHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlIHRvIGNoZWNrLlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODI4LSAqIEBkZXZfcHJpdmF0ZV9vd25lcjogVGhlIHN0cnVjdCBkZXZfcHJpdmF0ZV9vd25lciB0byB1c2UgdG8gZGV0ZXJtaW5lXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTgzOC0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODM5OiAqIFJldHVybjogU2VlIFxcdTAwMjZlbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQuXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NDAtICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4NDE6ZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0IGRybV9ncHVzdm1fc2Nhbl9tbShzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NDItXFx0XFx0XFx0XFx0XFx0ICAgICAgIHZvaWQgKmRldl9wcml2YXRlX293bmVyLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NDUtXFx0c3RydWN0IG1tdV9pbnRlcnZhbF9ub3RpZmllciAqbm90aWZpZXIgPSBcXHUwMDI2cmFuZ2UtXFx1MDAzZW5vdGlmaWVyLVxcdTAwM2Vub3RpZmllcjtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg0NjpcXHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gZHJtX2dwdXN2bV9yYW5nZV9zdGFydChyYW5nZSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4NDc6XFx0dW5zaWduZWQgbG9uZyBlbmQgPSBkcm1fZ3B1c3ZtX3JhbmdlX2VuZChyYW5nZSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NDgtXFx0c3RydWN0IGhtbV9yYW5nZSBobW1fcmFuZ2UgPSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg1NS1cXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODU2OlxcdGVudW0gZHJtX2dwdXN2bV9zY2FuX3Jlc3VsdCBzdGF0ZSA9IERSTV9HUFVTVk1fU0NBTl9VTlBPUFVMQVRFRCwgbmV3X3N0YXRlO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODU3LVxcdHVuc2lnbmVkIGxvbmcgKnBmbnM7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg3Mi1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg3MzpcXHRkcm1fZ3B1c3ZtX25vdGlmaWVyX2xvY2socmFuZ2UtXFx1MDAzZWdwdXN2bSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NzQtXFx0aWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KG5vdGlmaWVyLCBobW1fcmFuZ2Uubm90aWZpZXJfc2VxKSkge1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODc1OlxcdFxcdGRybV9ncHVzdm1fbm90aWZpZXJfdW5sb2NrKHJhbmdlLVxcdTAwM2VncHVzdm0pO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODc2LVxcdFxcdGdvdG8gcmV0cnk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkxOC1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjkxOTpcXHRcXHRpICs9IDF1bCBcXHUwMDNjXFx1MDAzYyBkcm1fZ3B1c3ZtX2htbV9wZm5fdG9fb3JkZXIocGZuc1tpXSwgaSwgbnBhZ2VzKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkyMC1cXHR9XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05MjEtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5MjI6XFx0ZHJtX2dwdXN2bV9ub3RpZmllcl91bmxvY2socmFuZ2UtXFx1MDAzZWdwdXN2bSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05MjMtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkyNy19XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5Mjg6RVhQT1JUX1NZTUJPTChkcm1fZ3B1c3ZtX3NjYW5fbW0pO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTI5LVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTMwLS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6OTMxOiAqIGRybV9ncHVzdm1fcmFuZ2VfY2h1bmtfc2l6ZSgpIC0gRGV0ZXJtaW5lIGNodW5rIHNpemUgZm9yIEdQVSBTVk0gcmFuZ2VcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkzMi0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz05NDc9c3RhdGljIHVuc2lnbmVkIGxvbmdcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjk0ODpkcm1fZ3B1c3ZtX3JhbmdlX2NodW5rX3NpemUoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjk0OTpcXHRcXHRcXHQgICAgc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTUwLVxcdFxcdFxcdCAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZhcyxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTY1LVxcdFxcdGlmIChzdGFydCBcXHUwMDNlPSB2YXMtXFx1MDAzZXZtX3N0YXJ0IFxcdTAwMjZcXHUwMDI2IGVuZCBcXHUwMDNjPSB2YXMtXFx1MDAzZXZtX2VuZCBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6OTY2OlxcdFxcdCAgICBzdGFydCBcXHUwMDNlPSBkcm1fZ3B1c3ZtX25vdGlmaWVyX3N0YXJ0KG5vdGlmaWVyKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6OTY3OlxcdFxcdCAgICBlbmQgXFx1MDAzYz0gZHJtX2dwdXN2bV9ub3RpZmllcl9lbmQobm90aWZpZXIpIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05NjgtXFx0XFx0ICAgIHN0YXJ0IFxcdTAwM2U9IGdwdXZhX3N0YXJ0IFxcdTAwMjZcXHUwMDI2IGVuZCBcXHUwMDNjPSBncHV2YV9lbmQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk3OS1cXHRpZiAoZW5kIC0gc3RhcnQgIT0gU1pfNEspIHtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjk4MDpcXHRcXHRzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2U7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05ODEtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5ODI6XFx0XFx0cmFuZ2UgPSBkcm1fZ3B1c3ZtX3JhbmdlX2ZpbmQobm90aWZpZXIsIHN0YXJ0LCBlbmQpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTgzLVxcdFxcdGlmIChyYW5nZSkge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05OTQtXFx0XFx0ICogZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19kZXZtZW0gd2l0aCAnbWlncmF0ZS5jcGFnZXMgIT0gbnBhZ2VzJ1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6OTk1OlxcdFxcdCAqIGFuZCB0aGVuIHVwb24gZHJtX2dwdXN2bV9nZXRfcGFnZXMgZGV2aWNlIHBhZ2VzIGZyb21cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk5Ni1cXHRcXHQgKiBvdGhlciBwcm9jZXNzZXMgYXJlIGNvbGxlY3RlZCArIGZhdWx0ZWQgaW4gd2hpY2ggY3JlYXRlcyBhbGxcXG4tLVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowNjowNi42MjU0Mzc0NzdaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAyODk3OTQyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipJbnZlc3RpZ2F0aW5nIGBkcm1fZ3B1c3ZtYCBUZXN0aW5nKipcblxuUmlnaHQsIGBkcm1fZ3B1c3ZtYC4uLiB0aGF0J3MgYSBoZWxwZXIgbGlicmFyeSwgaXNuJ3QgaXQ/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0IGhhcyBhbnkgYXNzb2NpYXRlZCB0ZXN0aW5nLiAgTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0byBjaGVjayBmb3IgS1VuaXQgdGVzdHMuIFRoZSBidWlsZCBvdXRwdXQgd291bGQgdXN1YWxseSBpbmRpY2F0ZSB0aGlzLiBIbW0sIG5vLCBJIGRvbid0IHNlZSBhbnl0aGluZyBleHBsaWNpdGx5IG1lbnRpb25pbmcgXCJ0ZXN0XCIgb3IgXCJrdW5pdFwiIGluIHRoZSBidWlsZCBvdXRwdXQuIE9rYXksIHRoYXQncyBub3QgY29uY2x1c2l2ZSwgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIFNvLCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgYGRybV9ncHVzdm1gIGFjdHVhbGx5IGhhdmUgKmFueSogc2VsZnRlc3RzIG9yIEtVbml0IHRlc3RzPyBUaW1lIHRvIGV4YW1pbmUgdGhlIHNvdXJjZSBjb2RlIGl0c2VsZi4gSSdsbCBuZWVkIHRvIGdvIGRpcmVjdGx5IHRvIGBkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jYCBhbmQgc2VhcmNoIHRoZSBjb2RlIGZvciBhbnkgbWVudGlvbnMgb2YgXCJrdW5pdFwiIG9yIFwidGVzdFwiLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZGVmaW5pdGl2ZSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNDc3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDY6MTEuNjU0NDE5NTZaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzk0OTg2NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3VuaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDY6MTEuNzgyMzgwNDM0WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMTg2OTAzNzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIFRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzbid0IHRvdWNoaW5nIGFueSBjb2RlIHRoYXQncyBhY3R1YWxseSB0ZXN0ZWQgYnkga3VuaXQsIHdoaWNoIGlzIGEga2V5IHN0YXJ0aW5nIHBvaW50LiBJIGxvb2tlZCBhdCBgZHJtX2dwdXN2bWAsIGBhaWUyX2N0eC5jYCwgYW5kIGBub3V2ZWF1X3N2bS5jYCwgYW5kIG5vbmUgb2YgdGhlbSBhcmUgY292ZXJlZC4gVGhpcyBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnOiBpcyB0aGlzIHB1cmVseSBhIGNoYW5nZSB0byB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbGlrZSBHQ0Ugb3IgUUVNVT8gVGhhdCdzIHdoYXQgaXQgbG9va3MgbGlrZSwgaW5pdGlhbGx5LlxuXG5CdXQgd2FpdCwgSSBuZWVkIHRvIGJlIHByZWNpc2UgaGVyZS4gSXMgYGRybV9ncHVzdm1gICpwb3RlbnRpYWxseSogcmVhY2hhYmxlIHRocm91Z2ggdGhlIGB4ZWAgZHJpdmVyPyBTeXprYWxsZXIgZG9lc24ndCBoYXZlIHRoYXQgc3BlY2lmaWMgSW50ZWwgWGUgaGFyZHdhcmUsIHNvIEkgY2FuJ3QgaW1tZWRpYXRlbHkgcnVsZSBpdCBvdXQuIEFuZCB3aGF0IGFib3V0IGBub3V2ZWF1YCBhbmQgYGFtZHhkbmFgPyBTeXprYWxsZXIncyBoYXJkd2FyZSBsaW1pdGF0aW9ucyBhcmUgZGVmaW5pdGVseSBhIGZhY3Rvci5cblxuTm93LCBJIGFsbW9zdCBtaXNzZWQgc29tZXRoaW5nIOKAkyB3aGF0IGFib3V0IGBsaWIvdGVzdF9obW0uY2A/IEFoLCBubywgdGhlIHBhdGNoIGRvZXNuJ3QgdG91Y2ggdGhhdC4gR29vZC4gSG93ZXZlciwgd2FpdCwgdGhpcyBwYXRjaCAqZG9lcyogbW9kaWZ5IHVzYWdlIG9mIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAgaW4gdGhvc2UgZmlsZXMgSSBtZW50aW9uZWQgZWFybGllcjogYGFpZTJfY3R4LmNgLCBgZHJtX2dwdXN2bS5jYCwgYW5kIGBub3V2ZWF1X3N2bS5jYC5cblxuT2theSwgZG9lcyBpdCBjaGFuZ2UgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCBpdHNlbGY/IEkgZG9uJ3Qgc2VlIGFueSBtb2RpZmljYXRpb25zIHRvIGBtbS9obW0uY2AgaW4gdGhlIGRpZmYsIHNvIHRoYXQncyBhIG5lZ2F0aXZlLiBCdXQgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4uLiBsZXQgbWUgZG91YmxlLWNoZWNrIHRoaXMgZGlmZiBhZ2Fpbi4gTWFraW5nIHN1cmUgSSBoYXZlIGFsbCB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM4MTIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDY6MjIuOTY5Mjg4MzQyWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzcyODgzMzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2htbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2htbS5jPTY4OT1zdGF0aWMgaW50IGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsIGJvb2wgKmxvY2tlZClcXG4tLVxcbm1tL2htbS5jLTc1My0gKiBUaGUgbW1hcCBsb2NrIG11c3QgYmUgaGVsZCBieSB0aGUgY2FsbGVyIGFuZCB3aWxsIHJlbWFpbiBoZWxkIG9uIHJldHVybi5cXG5tbS9obW0uYzo3NTQ6ICogTmV3IHVzZXJzIHNob3VsZCBwcmVmZXIgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKSB1bmxlc3MgdGhleVxcbm1tL2htbS5jLTc1NS0gKiBzcGVjaWZpY2FsbHkgbmVlZCB0byBrZWVwIHRoZSBtbWFwIGxvY2sgaGVsZCBhY3Jvc3MgdGhlIGNhbGwuIFRoaXMgaGVscGVyXFxuLS1cXG5tbS9obW0uYz03NjI9RVhQT1JUX1NZTUJPTChobW1fcmFuZ2VfZmF1bHQpO1xcbi0tXFxubW0vaG1tLmMtNzY0LS8qKlxcbm1tL2htbS5jOjc2NTogKiBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCAtIGZhdWx0IGluIGEgcmFuZ2Ugd2l0aCBhIHJldHJ5IHRpbWVvdXRcXG5tbS9obW0uYy03NjYtICogQHJhbmdlOlxcdGFyZ3VtZW50IHN0cnVjdHVyZVxcbi0tXFxubW0vaG1tLmMtNzgzLSAqL1xcbm1tL2htbS5jOjc4NDppbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXFxubW0vaG1tLmMtNzg1LVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KVxcbi0tXFxubW0vaG1tLmMtODI0LX1cXG5tbS9obW0uYzo4MjU6RVhQT1JUX1NZTUJPTChobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCk7XFxubW0vaG1tLmMtODI2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowNjoyNC43NDIxNzY2NTZaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzIyMTMxNjg0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvZGUgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gdGhlIHVzZXIncyBwcm92aWRlZCBhIGRpZmYsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiQWxyaWdodCwgbGV0J3Mgc2VlIHdoYXQncyBjaGFuZ2VkLlwiIEkgaW1tZWRpYXRlbHkgc2NhbiB0aGUgZmlsZSBwYXRoczogYERvY3VtZW50YXRpb24vbW0vaG1tLnJzdGAsIGBkcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguY2AsIGBkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jYCwgYW5kIGBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jYC5cblxuTXkgZ3V0IHJlYWN0aW9uIGlzIHRoYXQgdGhpcyBwcm9iYWJseSB3b24ndCBiZSByZWFjaGFibGUgdmlhIHN5emthbGxlciBhcyBpcy4gQmFzZWQgb24gdGhlIGZpbGUgcGF0aHMsIG15IG1lbW9yeSBraWNrcyBpbi4gSSBrbm93IHRob3NlIHBhdGhzIHJlcXVpcmUgc3BlY2lmaWMgaGFyZHdhcmU6IEFNRCBYRE5BLCBJbnRlbCBYZSwgYW5kIE5WSURJQSBHUFVzLiBUaGVzZSBhcmUgbm90IHR5cGljYWxseSBwcmVzZW50LCBub3IgZW11bGF0ZWQsIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCB3aGljaCBhcmUgdGhlIHN5emthbGxlciBnby10bydzLlxuXG5CdXQgd2FpdCBhIG1pbnV0ZS4uLiAqZHJtX2dwdXN2bS5jKi4uLnRoYXQgZmlsZSBuYW1lIGlzIHBva2luZyBhdCBzb21ldGhpbmcgaW4gbXkgbWluZC4gQ291bGQgdGhhdCBvbmUgYmUgcmVhY2hhYmxlIHNvbWVob3cgd2l0aCBhIG1vY2sgZHJpdmVyPyBJdCdzIHdvcnRoIGEgcXVpY2sgZG91YmxlLWNoZWNrLiBPa2F5LCBmb2N1c2luZyBiYWNrIGluLCBsZXQncyBzZWUuIExldCBtZSBxdWlja2x5IGpvZyBteSBtZW1vcnkgYW5kIHNlZSBob3cgdGhhdCBpcyBzZWxlY3RlZC4gTm9wZSwgaXQgbG9va3MgbGlrZSBgZHJtX2dwdXN2bWAgaXMgb25seSBzZWxlY3RlZCBieSBgRFJNX1hFYCBhbmQgYERSTV9YRV9HUFVTVk1gLiBTbyB0aGF0J3MgdGhlIGVuZCBvZiB0aGF0IHRob3VnaHQuXG5cbkFscmlnaHQsIHNvIHRoZSBjaGFuY2VzIG9mIHRoaXMgYmVpbmcgZGlyZWN0bHkgdGVzdGFibGUgc2VlbSBzbGltLiBMZXQncyBkaWcgZGVlcGVyLiBNYXliZSBpdCBpcyB1c2VkIGJ5IHNvbWV0aGluZyBlbHNlIEkgYW0gbm90IHRoaW5raW5nIG9mLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDc4NCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowNjozMS45NjM0OTY0MDRaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjcyNTA4NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IERSTV9HUFVTVk1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWc9Mj1jb25maWcgRFJNX1hFXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZy00MS1cXHRzZWxlY3QgRFJNX0VYRUNcXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZzo0MjpcXHRzZWxlY3QgRFJNX0dQVVNWTSBpZiAhVU1MXFxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWctNDMtXFx0c2VsZWN0IERSTV9HUFVWTVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWc9Nzk9Y29uZmlnIERSTV9YRV9HUFVTVk1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnLTg1LVxcdHNlbGVjdCBERVZJQ0VfUFJJVkFURVxcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnOjg2OlxcdHNlbGVjdCBEUk1fR1BVU1ZNXFxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWctODctXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowNjozNC4yMzA3NTMwMDdaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI4MTMxMDk2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmc9ZmFsc2U6IFVucmVhY2hhYmxlIENvZGUgUGF0aHMgaW4gVmlydHVhbGl6ZWQgRW52aXJvbm1lbnRzKipcblxuT2theSwgc28gbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBJJ20gcmV2aWV3aW5nIG1vZGlmaWVzIGhvdyBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIGlzIHVzZWQsIGFuZCBpdCBkb2VzIHNvIHdpdGhpbiB0aHJlZSBzcGVjaWZpYyBHUFUgZHJpdmVyczogYGFtZHhkbmFgLCBgZHJtX2dwdXN2bS5jYCwgYW5kIGBub3V2ZWF1YC4gQSBxdWljayBsb29rIGF0IHRoZSBjb2RlIGNvbmZpcm1zIHRoYXQgYGRybV9ncHVzdm0uY2AgaXMgZXhjbHVzaXZlbHkgdXNlZCBieSB0aGUgYHhlYCBkcml2ZXIuIFRoZSBjcnVjaWFsIHBvaW50IGlzIHRoYXQgYHhlYCwgYGFtZHhkbmFgLCBhbmQgYG5vdXZlYXVgIGFyZSBhbGwgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycy4gVGhleSBhcmUgZGVzaWduZWQgdG8gaW50ZXJmYWNlIHdpdGggcGFydGljdWxhciBHUFVz4oCUQU1EIFhETkEsIEludGVsIFhlLCBhbmQgTlZJRElBIEdQVXMsIHJlc3BlY3RpdmVseS4gVGhlc2UgZHJpdmVycyBhcmUgbm90IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSB3aXRob3V0IGhhcmR3YXJlIHBhc3N0aHJvdWdoLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBgbm91dmVhdWAgY2FuIGV2ZW4gYmUgZnV6emVkLCBnaXZlbiBTeXprYWxsZXIncyBjdXJyZW50IGNvbmZpZ3VyYXRpb24uIEkga25vdyBTeXprYWxsZXIgZG9lc24ndCBoYXZlIE5WSURJQSBHUFVzIGluIGl0cyB2aXJ0dWFsIG1hY2hpbmVzLiBJJ20gcHJldHR5IGNlcnRhaW4gdGhhdCB0aGUgYG5vdXZlYXVgIGRyaXZlciBjYW4ndCBiZSBpbml0aWFsaXplZCB3aXRob3V0IHRoZSBoYXJkd2FyZS4gSXQncyBhIFBDSSBkcml2ZXIgYW5kIGJpbmRzIHRvIE5WSURJQSBQQ0kgZGV2aWNlcy4gV2l0aG91dCB0aGUgc3BlY2lmaWMgaGFyZHdhcmUsIHRoZSBkcml2ZXIncyBgcHJvYmVgIGZ1bmN0aW9uIHdvbid0IGJlIGNhbGxlZCwgYW5kIHRodXMsIGl0cyBpb2N0bHMgd29uJ3QgYmUgcmVnaXN0ZXJlZC4gVGhlIHNhbWUgbG9naWMgYXBwbGllcyB0byBgYW1keGRuYWAgYW5kIGB4ZWAuXG5cbkdpdmVuIHRoaXMsIHRoZSBjaGFuZ2VzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCBhcmUsIGluIGVzc2VuY2UsIGRlYWQgY29kZSBpbiBvdXIgY3VycmVudCBmdXp6aW5nIHNldHVwLiBUaGV5J3JlIG1vZGlmeWluZyBjb2RlIHBhdGhzIHRoYXQgYXJlIGluaGVyZW50bHkgdW5yZWFjaGFibGUgd2l0aGluIHRoZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2UncmUgdXNpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGNvcnJlY3QgYWJvdXQgYGRybV9ncHVzdm0uY2AgYW5kIGl0cyByZWxhdGlvbiB0byBgdmttc2AgYW5kIGB2Z2VtYCBiZWZvcmUgSSdtIDEwMCUgc3VyZS4gXG5cblRoZXJlZm9yZSwgSSBuZWVkIHRvIGZsYWcgdGhpcyBhcyBgV29ydGhGdXp6aW5nPWZhbHNlYCBhbmQgcHJvdmlkZSB0aGUgcmVhc29uaW5nOiB0aGUgcGF0Y2ggbW9kaWZpZXMgY29kZSB3aXRoaW4gaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycyAoYGFtZHhkbmFgLCBgeGVgIHZpYSBgZHJtX2dwdXN2bS5jYCwgYW5kIGBub3V2ZWF1YCkuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZSBvciBoYXJkd2FyZSBlbXVsYXRpb24gd2hpY2ggd2UgZG9uJ3QgaGF2ZSBhdmFpbGFibGUgaW4gR0NFL1FFTVUsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBpbXBvc3NpYmxlIHRvIGV4ZWN1dGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NjY0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjA2OjQxLjUxMjA2NzU2M1oiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI1MDkyMjYxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcm1fZ3B1c3ZtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZ3B1L2RybS92a21zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowNjo0MS45MzcxNzA3NDVaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg4NTI3MjM0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjQ2NTc4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowNjo0Ni44MjI0NDYxMjRaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODk5MzMyNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHJtX2dwdXN2bVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2dwdS9kcm0vdmdlbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDY6NDYuOTMxNDQ5NjU5WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMTY5NDg4NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipDb25maXJtaW5nIFBDSSBEcml2ZXIgU3RhdHVzKipcblxuUmlnaHQsIHNvIEknbSBzZWVpbmcgdGhpcyB0aGluZywgYW5kIHRoZSBrZXkgb2JzZXJ2YXRpb24gaXMgdGhhdCBpdCdzICpub3QqIGJlaW5nIHV0aWxpemVkIGJ5IHRoZSB0YXJnZXQgZ3JvdXAuIFRoYXQncyB0aGUgY29yZSBvZiB0aGUgaXNzdWUuXG5cbk5vdywgSSBuZWVkIHRvIGdldCBhIGZpcm0gZ3Jhc3Agb24gdGhlIHRlY2huaWNhbCBhc3BlY3RzIGJlZm9yZSBJIGNhbiBkZXRlcm1pbmUgaWYgdGhpcyBpcyBhIGRyaXZlciBpc3N1ZSwgYSBjb25maWcgaXNzdWUsIG9yIHNvbWUgb3RoZXIgcHJvYmxlbS4gTGV0IG1lIHF1aWNrbHkgY29uZmlybSB0aGF0IGBhbWR4ZG5hYCBpcyBpbmRlZWQgZnVuY3Rpb25pbmcgYXMgYSBQQ0kgZHJpdmVyLiBUaGlzIGlzIGZ1bmRhbWVudGFsIGZvciBtZSB0byBwcm9jZWVkLiBJZiBpdCBpc24ndCwgdGhlbiBldmVyeXRoaW5nIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NjI1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDY6NDkuOTQ4NDAwOTc5WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTY0NTI3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2lfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYWNjZWwvYW1keGRuYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9wY2lfZHJ2LmM9NDc1PXN0YXRpYyBpbnQgYW1keGRuYV9zcmlvdl9jb25maWd1cmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudW1fdmZzKVxcbi0tXFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfcGNpX2Rydi5jLTQ4NS1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9wY2lfZHJ2LmM6NDg2OnN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhbWR4ZG5hX3BjaV9kcml2ZXIgPSB7XFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfcGNpX2Rydi5jLTQ4Ny1cXHQubmFtZSA9IEtCVUlMRF9NT0ROQU1FLFxcbi0tXFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfcGNpX2Rydi5jLTQ5NC1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9wY2lfZHJ2LmM6NDk1Om1vZHVsZV9wY2lfZHJpdmVyKGFtZHhkbmFfcGNpX2RyaXZlcik7XFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfcGNpX2Rydi5jLTQ5Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDY6NTAuMDA4MDUxNDM3WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNDk3MDY2NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyByZXF1ZXN0ZWQ6XG5cbioqUENJIERyaXZlciBWZXJpZmljYXRpb24gLSBRdWljayBUaG91Z2h0cyoqXG5cbkFscmlnaHQsIHllcCwgdGhhdCBsb29rcyBsaWtlIGEgUENJIGRyaXZlciwgbm8gcXVlc3Rpb24gYWJvdXQgaXQuIE5vdywganVzdCBhIHF1aWNrIHNhbml0eSBjaGVjaywgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCBgeGVgIGlzICpkZWZpbml0ZWx5KiBhY3RpbmcgYXMgYSBQQ0kgZHJpdmVyLiBJdCdzIGFsd2F5cyBnb29kIHByYWN0aWNlIHRvIGRvdWJsZS1jaGVjayB0aGVzZSBhc3N1bXB0aW9ucyBiZWZvcmUgbW92aW5nIGZvcndhcmQuIEknbGwganVzdCBydW4gYSBxdWljayBkaWFnbm9zdGljLCBub3RoaW5nIG1ham9yLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzA3NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjA2OjU2LjI1Nzc2MDQyN1oiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQzMzU1MTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ncHUvZHJtL3hlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZ3B1L2RybS94ZS90ZXN0cy94ZV9wY2kuYz00MDU9Y29uc3Qgdm9pZCAqeGVfcGNpX2xpdmVfZGV2aWNlX2dlbl9wYXJhbShzdHJ1Y3Qga3VuaXQgKnRlc3QsIGNvbnN0IHZvaWQgKnByZXYsIGNoYXIgKmRlc2MpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUvdGVzdHMveGVfcGNpLmMtNDEwLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS90ZXN0cy94ZV9wY2kuYzo0MTE6XFx0bmV4dCA9IGRyaXZlcl9maW5kX25leHRfZGV2aWNlKFxcdTAwMjZ4ZV9wY2lfZHJpdmVyLmRyaXZlciwgZGV2KTtcXG5kcml2ZXJzL2dwdS9kcm0veGUvdGVzdHMveGVfcGNpLmMtNDEyLVxcdGlmIChkZXYpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfY29uZmlnZnMuYz0xMDA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGVfZGV2aWNlX2Rlc2MgKnhlX21hdGNoX2Rlc2Moc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfY29uZmlnZnMuYy0xMDA4LVxcdHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXIgPSBkcml2ZXJfZmluZChcXFwieGVcXFwiLCBcXHUwMDI2cGNpX2J1c190eXBlKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfY29uZmlnZnMuYzoxMDA5OlxcdHN0cnVjdCBwY2lfZHJpdmVyICpkcnYgPSB0b19wY2lfZHJpdmVyKGRyaXZlcik7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2NvbmZpZ2ZzLmMtMTAxMC1cXHRjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWRzID0gZHJ2ID8gZHJ2LVxcdTAwM2VpZF90YWJsZSA6IE5VTEw7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfbW9kdWxlLmM9OTY9c3RhdGljIGNvbnN0IHN0cnVjdCBpbml0X2Z1bmNzIGluaXRfZnVuY3NbXSA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9tb2R1bGUuYy0xMTItXFx0e1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9tb2R1bGUuYzoxMTM6XFx0XFx0LmluaXQgPSB4ZV9yZWdpc3Rlcl9wY2lfZHJpdmVyLFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9tb2R1bGUuYzoxMTQ6XFx0XFx0LmV4aXQgPSB4ZV91bnJlZ2lzdGVyX3BjaV9kcml2ZXIsXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX21vZHVsZS5jLTExNS1cXHR9LFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jPTE0MjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHhlX3BtX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xNDI5LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYzoxNDMwOnN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB4ZV9wY2lfZHJpdmVyID0ge1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xNDMxLVxcdC5uYW1lID0gRFJJVkVSX05BTUUsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmM9MTQ0OT1zdHJ1Y3QgeGVfZGV2aWNlICp4ZV9wY2lfdG9fcGZfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jLTE0NTItXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jOjE0NTM6XFx0ZHJtID0gcGNpX2lvdl9nZXRfcGZfZHJ2ZGF0YShwZGV2LCBcXHUwMDI2eGVfcGNpX2RyaXZlcik7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jLTE0NTQtXFx0aWYgKElTX0VSUihkcm0pKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jLTE0NTktXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jOjE0NjA6aW50IHhlX3JlZ2lzdGVyX3BjaV9kcml2ZXIodm9pZClcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmMtMTQ2MS17XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jOjE0NjI6XFx0cmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoXFx1MDAyNnhlX3BjaV9kcml2ZXIpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xNDYzLX1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmMtMTQ2NC1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmM6MTQ2NTp2b2lkIHhlX3VucmVnaXN0ZXJfcGNpX2RyaXZlcih2b2lkKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xNDY2LXtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmM6MTQ2NzpcXHRwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoXFx1MDAyNnhlX3BjaV9kcml2ZXIpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xNDY4LX1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuaD05PXN0cnVjdCBwY2lfZGV2O1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuaC0xMC1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmg6MTE6aW50IHhlX3JlZ2lzdGVyX3BjaV9kcml2ZXIodm9pZCk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5oOjEyOnZvaWQgeGVfdW5yZWdpc3Rlcl9wY2lfZHJpdmVyKHZvaWQpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuaC0xMy1zdHJ1Y3QgeGVfZGV2aWNlICp4ZV9wY2lfdG9fcGZfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2lfc3Jpb3YuYz0xNzY9c3RhdGljIGludCBwZl9kaXNhYmxlX3ZmcyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2lfc3Jpb3YuYy0yMTMtICpcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpX3NyaW92LmM6MjE0OiAqIFRoaXMgaXMgdGhlIFhlIGltcGxlbWVudGF0aW9uIG9mIHN0cnVjdCBwY2lfZHJpdmVyLnNyaW92X2NvbmZpZ3VyZSBjYWxsYmFjay5cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpX3NyaW92LmMtMjE1LSAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjA2OjU2LjYwMTEyMTIzM1oiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODQwMTcxMDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDb25maXJtaW5nIFBDSSBEcml2ZXIgSWRlbnRpdHkqKlxuXG5SaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIGEgUENJIGRyaXZlciwgdGhhdCdzIGNsZWFyIGVub3VnaC4gTm93LCBJIHdhbnQgdG8gcXVpY2tseSBzb2xpZGlmeSB0aGF0IHRoaXMgKm5vdXZlYXUqIGRyaXZlciBpcyBpbmRlZWQgdGhlIG9uZSB3ZSdyZSBsb29raW5nIGF0LiBHb3R0YSBiZSBjZXJ0YWluIGJlZm9yZSBJIGdvIGRlZXBlciBkb3duIHRoYXQgcmFiYml0IGhvbGUuIEkga25vdyB0aGUgYmFzaWNzLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgYWxsIHRoZSBwaWVjZXMgb2YgdGhlIHB1enpsZSBiZWZvcmUgSSBzdGFydCB0cnlpbmcgdG8gcHV0IHRoZW0gdG9nZXRoZXIuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCB0aGUgbW9kdWxlIG5hbWUgYG5vdXZlYXVgIGNvcnJlc3BvbmRzIHdpdGggYSBQQ0kgZGV2aWNlIGRyaXZlciwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIEdvdHRhIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODU0MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjA2OjU5LjQ0MTI5NDM1WiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTYzODY3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2lfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJtLmM9MTQyNT1zdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgbm91dmVhdV9wbV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RybS5jLTE0MzYtXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcm0uYzoxNDM3OnN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlclxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJtLmM6MTQzODpub3V2ZWF1X2RybV9wY2lfZHJpdmVyID0ge1xcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJtLmMtMTQzOS1cXHQubmFtZSA9IFxcXCJub3V2ZWF1XFxcIixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJtLmM9MTQ4MD1ub3V2ZWF1X2RybV9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RybS5jLTE1MDYtI2lmZGVmIENPTkZJR19QQ0lcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RybS5jOjE1MDc6XFx0cmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcihcXHUwMDI2bm91dmVhdV9kcm1fcGNpX2RyaXZlcik7XFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcm0uYy0xNTA4LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJtLmM9MTUxOD1ub3V2ZWF1X2RybV9leGl0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RybS5jLTE1MjMtI2lmZGVmIENPTkZJR19QQ0lcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RybS5jOjE1MjQ6XFx0cGNpX3VucmVnaXN0ZXJfZHJpdmVyKFxcdTAwMjZub3V2ZWF1X2RybV9wY2lfZHJpdmVyKTtcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RybS5jLTE1MjUtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjA2OjU5LjUxNjk0MjE1N1oiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDQzMDU2MDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqQW5hbHl6aW5nIHRoZSBQYXRjaCBhbmQgSXRzIEltcGFjdCoqXG5cbkFscmlnaHQsIHllcCwgdGhhdCBjb25maXJtcyBpdCDigJMgdGhpcyBpcyBkZWZpbml0ZWx5IGEgUENJIGRyaXZlciB3ZSdyZSBkZWFsaW5nIHdpdGguIEFuZCBsb29raW5nIGF0IHRoZSBjb250ZXh0LCBpdCdzIHByZXR0eSBjbGVhciB3aGVyZSB0aGUgcHJvYmxlbSBsaWVzLiBUaGUgcGF0Y2ggdG91Y2hlcyB0aHJlZSBkcml2ZXJzLCBhbmQgdGhleSBhcmUgKmFsbCogaGFyZHdhcmUtc3BlY2lmaWMgUENJIGRyaXZlcnMuIFdoYXQgdGhhdCBtZWFucyBpcyB0aGV5J3JlIGNvZGVkIHRvIGludGVyYWN0IGRpcmVjdGx5IHdpdGggdGhlIHBoeXNpY2FsIGhhcmR3YXJlIGNvbXBvbmVudHMgb24gYSBQQ0kgYnVzLiBUaGV5J3JlIG5vdCBnZW5lcmljLCBhbmQgY3J1Y2lhbGx5LCB0aGV5IG5lZWQgdGhhdCAqc3BlY2lmaWMqIGhhcmR3YXJlIHRvIGZ1bmN0aW9uLlxuXG5Ob3csIGNvbnNpZGVyaW5nIHRoZSBlbnZpcm9ubWVudCB3ZSdyZSB3b3JraW5nIHdpdGgsIHN5emthbGxlciwgaXQgYWxsIGZhbGxzIGludG8gcGxhY2UuIFN5emthbGxlcidzIHN0cmVuZ3RoIGlzIGl0cyBmdXp6aW5nIGNhcGFiaWxpdGllcyBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcsIHdoaWNoIGlzIHBlcmZlY3QgZm9yIGlzb2xhdGluZyBidWdzLiBCdXQgYmVjYXVzZSB0aGVzZSBkcml2ZXJzIHJlcXVpcmUgKnJlYWwqIHBoeXNpY2FsIFBDSSBoYXJkd2FyZSwgYW5kIHRoZXJlIGFyZSBubyBkdW1teSBvciB2aXJ0dWFsIGRldmljZXMgc2V0IHVwIHRvIG1pbWljIHRoYXQgaGFyZHdhcmUgd2l0aGluIHN5emthbGxlcidzIHZpcnR1YWwgZW52aXJvbm1lbnQsIHRoZSBjb2RlIHBhdGhzIHRvdWNoZWQgYnkgdGhlIHBhdGNoIGFyZSBzaW1wbHkgdW5yZWFjaGFibGUuIFdlJ3JlIGVmZmVjdGl2ZWx5IGRlYWxpbmcgd2l0aCBkZWFkIGNvZGUgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LlxuXG5UaGVyZWZvcmUsIEknbSByZWFkeSB0byBmb3JtdWxhdGUgbXkgcmVzcG9uc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MTUxLCJPdXRwdXRUb2tlbnMiOjE3MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjA3OjA3Ljk2MDAwMTE1M1oiLCJTZXEiOjYwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB1c2FnZSBvZiBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIGluIHRocmVlIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnM6IEFNRCBYRE5BIChgZHJpdmVycy9hY2NlbC9hbWR4ZG5hYCksIEludGVsIFhlIChgZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY2AsIHdoaWNoIGlzIG9ubHkgdXNlZCBieSBgeGVgKSwgYW5kIE5vdXZlYXUgKGBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdWApLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgKEFNRCBYRE5BIE5QVSwgSW50ZWwgWGUgR1BVLCBOVklESUEgR1BVKSB0byBpbml0aWFsaXplIGFuZCBleHBvc2UgdGhlaXIgaW50ZXJmYWNlcy4gU2luY2Ugc3l6a2FsbGVyIG9wZXJhdGVzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoR0NFL1FFTVUpIHdpdGhvdXQgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBvciBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoZW0sIHRoZXNlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enouXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdXNhZ2Ugb2YgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCBpbiB0aHJlZSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzOiBBTUQgWEROQSAoYGRyaXZlcnMvYWNjZWwvYW1keGRuYWApLCBJbnRlbCBYZSAoYGRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNgLCB3aGljaCBpcyBvbmx5IHVzZWQgYnkgYHhlYCksIGFuZCBOb3V2ZWF1IChgZHJpdmVycy9ncHUvZHJtL25vdXZlYXVgKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIChBTUQgWEROQSBOUFUsIEludGVsIFhlIEdQVSwgTlZJRElBIEdQVSkgdG8gaW5pdGlhbGl6ZSBhbmQgZXhwb3NlIHRoZWlyIGludGVyZmFjZXMuIFNpbmNlIHN5emthbGxlciBvcGVyYXRlcyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKEdDRS9RRU1VKSB3aXRob3V0IHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgb3Igc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGVtLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowc2vxx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-15 07:13:11 +0000 UTC FinishedAt: 2026-07-15 08:07:09 +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+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB1c2FnZSBvZiBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIGluIHRocmVlIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnM6IEFNRCBYRE5BIChgZHJpdmVycy9hY2NlbC9hbWR4ZG5hYCksIEludGVsIFhlIChgZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY2AsIHdoaWNoIGlzIG9ubHkgdXNlZCBieSBgeGVgKSwgYW5kIE5vdXZlYXUgKGBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdWApLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgKEFNRCBYRE5BIE5QVSwgSW50ZWwgWGUgR1BVLCBOVklESUEgR1BVKSB0byBpbml0aWFsaXplIGFuZCBleHBvc2UgdGhlaXIgaW50ZXJmYWNlcy4gU2luY2Ugc3l6a2FsbGVyIG9wZXJhdGVzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoR0NFL1FFTVUpIHdpdGhvdXQgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBvciBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoZW0sIHRoZXNlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enouJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjAzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjVmMmQ4ZDc5MjdmOTIwODdhNDM3ZjAxODJlN2ZmMWE5N2YxNTAyOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDE1IDA4OjAzOjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdFxuaW5kZXggNWM4OGQyY2YwODE4MzMuLmZjMWI4ZGMxOTgyNTBlIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3RcbkBAIC0yMDYsNyAmIzQzOzIwNiw3IEBAIFRoZSB1c2FnZSBwYXR0ZXJuIGlzOjpcbiAgICAgICAgICAgZ290byBvdXRfcHV0O1xuIFxuICAgICAgIHRha2VfbG9jayhkcml2ZXItXHUwMDNldXBkYXRlKTtcbi0gICAgICBpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkoXHUwMDI2aW50ZXJ2YWxfc3ViLCByYW5nZS5ub3RpZmllcl9zZXEpKSB7XG4mIzQzOyAgICAgIGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShyYW5nZS5ub3RpZmllciwgcmFuZ2Uubm90aWZpZXJfc2VxKSkge1xuICAgICAgICAgICByZWxlYXNlX2xvY2soZHJpdmVyLVx1MDAzZXVwZGF0ZSk7XG4gICAgICAgICAgIGdvdG8gYWdhaW47XG4gICAgICAgfVxuQEAgLTIyNSw3ICYjNDM7MjI1LDggQEAgVGhlIHVzYWdlIHBhdHRlcm4gaXM6OlxuIFRoZSBkcml2ZXItXHUwMDNldXBkYXRlIGxvY2sgaXMgdGhlIHNhbWUgbG9jayB0aGF0IHRoZSBkcml2ZXIgdGFrZXMgaW5zaWRlIGl0c1xuIGludmFsaWRhdGUoKSBjYWxsYmFjay4gVGhhdCBsb2NrIG11c3QgYmUgaGVsZCBiZWZvcmUgY2FsbGluZ1xuIG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KCkgdG8gYXZvaWQgYW55IHJhY2Ugd2l0aCBhIGNvbmN1cnJlbnQgQ1BVIHBhZ2UgdGFibGVcbi11cGRhdGUuXG4mIzQzO3VwZGF0ZS4gVGhlIHJldHJ5IGNoZWNrIG11c3QgdXNlIHRoZSBzYW1lIG5vdGlmaWVyIGFuZCBzZXF1ZW5jZSBudW1iZXIgc3RvcmVkXG4mIzQzO2luIGBgcmFuZ2VgYCBieSBgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KClgYC5cbiBcbiBIb2xkaW5nIHRoZSBtbWFwIGxvY2sgYWNyb3NzIEhNTSBmYXVsdHNcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYyBiL2RyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jXG5pbmRleCA1NDhiYTQzMTU1NTRmZi4uMjFmMjgxNzc1MWY5ZTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfY3R4LmNcbkBAIC0xMDM3LDcgJiM0MzsxMDM3LDcgQEAgc3RhdGljIGludCBhaWUyX3BvcHVsYXRlX3JhbmdlKHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKmFibylcbiBcdGJvb2wgZm91bmQ7XG4gXHRpbnQgcmV0O1xuIFxuLVx0dGltZW91dCA9IGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbiYjNDM7XHR0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbiBhZ2FpbjpcbiBcdGZvdW5kID0gZmFsc2U7XG4gXHRkb3duX3dyaXRlKFx1MDAyNnhkbmEtXHUwMDNlbm90aWZpZXJfbG9jayk7XG5AQCAtMTA2MiwxMyAmIzQzOzEwNjIsOSBAQCBzdGF0aWMgaW50IGFpZTJfcG9wdWxhdGVfcmFuZ2Uoc3RydWN0IGFtZHhkbmFfZ2VtX29iaiAqYWJvKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdH1cbiBcbi1cdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNm1hcHAtXHUwMDNlcmFuZ2UsXG4tXHRcdFx0bWF4X3QobG9uZywgdGltZW91dCAtIGppZmZpZXMsIDEpKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0aWYgKHJldCA9PSAtRUJVU1kpXG4tXHRcdFx0cmV0ID0gLUVUSU1FO1xuJiM0MztcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNm1hcHAtXHUwMDNlcmFuZ2UsIHRpbWVvdXQpO1xuJiM0MztcdGlmIChyZXQpXG4gXHRcdGdvdG8gcHV0X21tO1xuLVx0fVxuIFxuIFx0ZG93bl93cml0ZShcdTAwMjZ4ZG5hLVx1MDAzZW5vdGlmaWVyX2xvY2spO1xuIFx0aWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KFx1MDAyNm1hcHAtXHUwMDNlbm90aWZpZXIsIG1hcHAtXHUwMDNlcmFuZ2Uubm90aWZpZXJfc2VxKSkge1xuQEAgLTEwODYsNyAmIzQzOzEwODIsNyBAQCBzdGF0aWMgaW50IGFpZTJfcG9wdWxhdGVfcmFuZ2Uoc3RydWN0IGFtZHhkbmFfZ2VtX29iaiAqYWJvKVxuIHB1dF9tbTpcbiBcdGFtZHhkbmFfdW1hcF9wdXQobWFwcCk7XG4gXHRtbXB1dChtbSk7XG4tXHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldHVybiByZXQgPT0gLUVCVVNZID8gLUVUSU1FIDogcmV0O1xuIH1cbiBcbiBpbnQgYWllMl9jbWRfc3VibWl0KHN0cnVjdCBhbWR4ZG5hX2h3Y3R4ICpod2N0eCwgc3RydWN0IGFtZHhkbmFfc2NoZWRfam9iICpqb2IsIHU2NCAqc2VxKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jXG5pbmRleCBiOGYyZGQ5OTgyZjUzYy4uNzZlOGEwMDI4YzdmYzkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jXG5AQCAtODUyLDggJiM0Mzs4NTIsNyBAQCBlbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgZHJtX2dwdXN2bV9zY2FuX21tKHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSxcbiBcdFx0LmVuZCA9IGVuZCxcbiBcdFx0LmRldl9wcml2YXRlX293bmVyID0gZGV2X3ByaXZhdGVfb3duZXIsXG4gXHR9O1xuLVx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID1cbi1cdFx0amlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XG4gXHRlbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgc3RhdGUgPSBEUk1fR1BVU1ZNX1NDQU5fVU5QT1BVTEFURUQsIG5ld19zdGF0ZTtcbiBcdHVuc2lnbmVkIGxvbmcgKnBmbnM7XG4gXHR1bnNpZ25lZCBsb25nIG5wYWdlcyA9IG5wYWdlc19pbl9yYW5nZShzdGFydCwgZW5kKTtcbkBAIC04NjcsOCAmIzQzOzg2Niw3IEBAIGVudW0gZHJtX2dwdXN2bV9zY2FuX3Jlc3VsdCBkcm1fZ3B1c3ZtX3NjYW5fbW0oc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlLFxuIFx0aG1tX3JhbmdlLmhtbV9wZm5zID0gcGZucztcbiBcbiByZXRyeTpcbi1cdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNmhtbV9yYW5nZSxcbi1cdFx0XHRcdFx0ICAgICAgIG1heCh0aW1lb3V0IC0gamlmZmllcywgMUwpKTtcbiYjNDM7XHRlcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZobW1fcmFuZ2UsIHRpbWVvdXQpO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfZnJlZTtcbiBcbkBAIC0xNDU5LDggJiM0MzsxNDU3LDcgQEAgaW50IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXG4gXHRcdC5kZXZfcHJpdmF0ZV9vd25lciA9IGN0eC1cdTAwM2VkZXZpY2VfcHJpdmF0ZV9wYWdlX293bmVyLFxuIFx0fTtcbiBcdHZvaWQgKnpkZDtcbi1cdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9XG4tXHRcdGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xuIFx0dW5zaWduZWQgbG9uZyBpLCBqO1xuIFx0dW5zaWduZWQgbG9uZyBucGFnZXMgPSBucGFnZXNfaW5fcmFuZ2UocGFnZXNfc3RhcnQsIHBhZ2VzX2VuZCk7XG4gXHR1bnNpZ25lZCBsb25nIG51bV9kbWFfbWFwcGVkO1xuQEAgLTE0NzgsOSAmIzQzOzE0NzUsNiBAQCBpbnQgZHJtX2dwdXN2bV9nZXRfcGFnZXMoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gcmV0cnk6XG4tXHRpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSlcbi1cdFx0cmV0dXJuIC1FQlVTWTtcbi1cbiBcdGhtbV9yYW5nZS5ub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihub3RpZmllcik7XG4gXHRpZiAoZHJtX2dwdXN2bV9wYWdlc192YWxpZF91bmxvY2tlZChncHVzdm0sIHN2bV9wYWdlcykpXG4gXHRcdGdvdG8gc2V0X3NlcW5vO1xuQEAgLTE0OTUsOCAmIzQzOzE0ODksNyBAQCBpbnQgZHJtX2dwdXN2bV9nZXRfcGFnZXMoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbiBcdH1cbiBcbiBcdGhtbV9yYW5nZS5obW1fcGZucyA9IHBmbnM7XG4tXHRlcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZobW1fcmFuZ2UsXG4tXHRcdFx0XHRtYXhfdChsb25nLCB0aW1lb3V0IC0gamlmZmllcywgMSkpO1xuJiM0MztcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNmhtbV9yYW5nZSwgdGltZW91dCk7XG4gXHRtbXB1dChtbSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9mcmVlO1xuQEAgLTE3MTgsOCAmIzQzOzE3MTEsNyBAQCBpbnQgZHJtX2dwdXN2bV9yYW5nZV9ldmljdChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuIFx0XHQuZW5kID0gZHJtX2dwdXN2bV9yYW5nZV9lbmQocmFuZ2UpLFxuIFx0XHQuZGV2X3ByaXZhdGVfb3duZXIgPSBOVUxMLFxuIFx0fTtcbi1cdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9XG4tXHRcdGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xuIFx0dW5zaWduZWQgbG9uZyAqcGZucztcbiBcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzID0gbnBhZ2VzX2luX3JhbmdlKGRybV9ncHVzdm1fcmFuZ2Vfc3RhcnQocmFuZ2UpLFxuIFx0XHRcdFx0XHQgICAgICAgZHJtX2dwdXN2bV9yYW5nZV9lbmQocmFuZ2UpKTtcbkBAIC0xNzM0LDggJiM0MzsxNzI2LDcgQEAgaW50IGRybV9ncHVzdm1fcmFuZ2VfZXZpY3Qoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRobW1fcmFuZ2UuaG1tX3BmbnMgPSBwZm5zO1xuLVx0ZXJyID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2aG1tX3JhbmdlLFxuLVx0XHRcdFx0bWF4X3QobG9uZywgdGltZW91dCAtIGppZmZpZXMsIDEpKTtcbiYjNDM7XHRlcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZobW1fcmFuZ2UsIHRpbWVvdXQpO1xuIFxuIFx0a3ZmcmVlKHBmbnMpO1xuIFx0bW1wdXQobW0pO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jXG5pbmRleCA0Y2ZiNmViN2M3NzE1YS4uNTg3MzU0NDZkNzgzMmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jXG5AQCAtNjc4LDE0ICYjNDM7Njc4LDIwIEBAIHN0YXRpYyBpbnQgbm91dmVhdV9yYW5nZV9mYXVsdChzdHJ1Y3Qgbm91dmVhdV9zdm1tICpzdm1tLFxuIFx0cmFuZ2UuZW5kID0gbm90aWZpZXItXHUwMDNlbm90aWZpZXIuaW50ZXJ2YWxfdHJlZS5sYXN0ICYjNDM7IDE7XG4gXG4gXHR3aGlsZSAodHJ1ZSkge1xuLVx0XHRpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkge1xuJiM0MztcdFx0bG9uZyByZW1haW5pbmcgPSB0aW1lb3V0IC0gamlmZmllcztcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIEhNTSB0aW1lb3V0IG9ubHkgYm91bmRzIHJldHJpZXMgd2hpbGUgSE1NIGlzIHdhbGtpbmcgYW5kXG4mIzQzO1x0XHQgKiBmYXVsdGluZyB0aGUgcmFuZ2UuIFRoaXMgZmF1bHQgaXMgaGFuZGxlZCBieSBhIGtlcm5lbCB3b3JrZXIsXG4mIzQzO1x0XHQgKiBzbyBmYXRhbCBzaWduYWxzIGZyb20gdGhlIGZhdWx0aW5nIHByb2Nlc3MgY2Fubm90IHN0b3AgYW5cbiYjNDM7XHRcdCAqIGVuZGxlc3Mgc3RyZWFtIG9mIGludmFsaWRhdGlvbnMgaGVyZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgdGltZW91dCkpIHtcbiBcdFx0XHRyZXQgPSAtRUJVU1k7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2cmFuZ2UsXG4tXHRcdFx0XHRcdFx0ICAgICAgIG1heCh0aW1lb3V0IC0gamlmZmllcyxcbi1cdFx0XHRcdFx0XHRcdCAgIDFMKSk7XG4mIzQzO1x0XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZyYW5nZSwgcmVtYWluaW5nKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRnb3RvIG91dDtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwODowMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdXNhZ2Ugb2YgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCBpbiB0aHJlZSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzOiBBTUQgWEROQSAoYGRyaXZlcnMvYWNjZWwvYW1keGRuYWApLCBJbnRlbCBYZSAoYGRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNgLCB3aGljaCBpcyBvbmx5IHVzZWQgYnkgYHhlYCksIGFuZCBOb3V2ZWF1IChgZHJpdmVycy9ncHUvZHJtL25vdXZlYXVgKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIChBTUQgWEROQSBOUFUsIEludGVsIFhlIEdQVSwgTlZJRElBIEdQVSkgdG8gaW5pdGlhbGl6ZSBhbmQgZXhwb3NlIHRoZWlyIGludGVyZmFjZXMuIFNpbmNlIHN5emthbGxlciBvcGVyYXRlcyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKEdDRS9RRU1VKSB3aXRob3V0IHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgb3Igc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGVtLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjVmMmQ4ZDc5MjdmOTIwODdhNDM3ZjAxODJlN2ZmMWE5N2YxNTAyOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDE1IDA4OjAzOjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0CmluZGV4IDVjODhkMmNmMDgxODMzLi5mYzFiOGRjMTk4MjUwZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdApAQCAtMjA2LDcgJiM0MzsyMDYsNyBAQCBUaGUgdXNhZ2UgcGF0dGVybiBpczo6CiAgICAgICAgICAgZ290byBvdXRfcHV0OwogCiAgICAgICB0YWtlX2xvY2soZHJpdmVyLSZndDt1cGRhdGUpOwotICAgICAgaWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KCZhbXA7aW50ZXJ2YWxfc3ViLCByYW5nZS5ub3RpZmllcl9zZXEpKSB7CiYjNDM7ICAgICAgaWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KHJhbmdlLm5vdGlmaWVyLCByYW5nZS5ub3RpZmllcl9zZXEpKSB7CiAgICAgICAgICAgcmVsZWFzZV9sb2NrKGRyaXZlci0mZ3Q7dXBkYXRlKTsKICAgICAgICAgICBnb3RvIGFnYWluOwogICAgICAgfQpAQCAtMjI1LDcgJiM0MzsyMjUsOCBAQCBUaGUgdXNhZ2UgcGF0dGVybiBpczo6CiBUaGUgZHJpdmVyLSZndDt1cGRhdGUgbG9jayBpcyB0aGUgc2FtZSBsb2NrIHRoYXQgdGhlIGRyaXZlciB0YWtlcyBpbnNpZGUgaXRzCiBpbnZhbGlkYXRlKCkgY2FsbGJhY2suIFRoYXQgbG9jayBtdXN0IGJlIGhlbGQgYmVmb3JlIGNhbGxpbmcKIG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KCkgdG8gYXZvaWQgYW55IHJhY2Ugd2l0aCBhIGNvbmN1cnJlbnQgQ1BVIHBhZ2UgdGFibGUKLXVwZGF0ZS4KJiM0Mzt1cGRhdGUuIFRoZSByZXRyeSBjaGVjayBtdXN0IHVzZSB0aGUgc2FtZSBub3RpZmllciBhbmQgc2VxdWVuY2UgbnVtYmVyIHN0b3JlZAomIzQzO2luIGBgcmFuZ2VgYCBieSBgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KClgYC4KIAogSG9sZGluZyB0aGUgbW1hcCBsb2NrIGFjcm9zcyBITU0gZmF1bHRzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jIGIvZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfY3R4LmMKaW5kZXggNTQ4YmE0MzE1NTU0ZmYuLjIxZjI4MTc3NTFmOWU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYwpAQCAtMTAzNyw3ICYjNDM7MTAzNyw3IEBAIHN0YXRpYyBpbnQgYWllMl9wb3B1bGF0ZV9yYW5nZShzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICphYm8pCiAJYm9vbCBmb3VuZDsKIAlpbnQgcmV0OwogCi0JdGltZW91dCA9IGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTsKJiM0MzsJdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7CiBhZ2FpbjoKIAlmb3VuZCA9IGZhbHNlOwogCWRvd25fd3JpdGUoJmFtcDt4ZG5hLSZndDtub3RpZmllcl9sb2NrKTsKQEAgLTEwNjIsMTMgJiM0MzsxMDYyLDkgQEAgc3RhdGljIGludCBhaWUyX3BvcHVsYXRlX3JhbmdlKHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKmFibykKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCi0JcmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoJmFtcDttYXBwLSZndDtyYW5nZSwKLQkJCW1heF90KGxvbmcsIHRpbWVvdXQgLSBqaWZmaWVzLCAxKSk7Ci0JaWYgKHJldCkgewotCQlpZiAocmV0ID09IC1FQlVTWSkKLQkJCXJldCA9IC1FVElNRTsKJiM0MzsJcmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoJmFtcDttYXBwLSZndDtyYW5nZSwgdGltZW91dCk7CiYjNDM7CWlmIChyZXQpCiAJCWdvdG8gcHV0X21tOwotCX0KIAogCWRvd25fd3JpdGUoJmFtcDt4ZG5hLSZndDtub3RpZmllcl9sb2NrKTsKIAlpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkoJmFtcDttYXBwLSZndDtub3RpZmllciwgbWFwcC0mZ3Q7cmFuZ2Uubm90aWZpZXJfc2VxKSkgewpAQCAtMTA4Niw3ICYjNDM7MTA4Miw3IEBAIHN0YXRpYyBpbnQgYWllMl9wb3B1bGF0ZV9yYW5nZShzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICphYm8pCiBwdXRfbW06CiAJYW1keGRuYV91bWFwX3B1dChtYXBwKTsKIAltbXB1dChtbSk7Ci0JcmV0dXJuIHJldDsKJiM0MzsJcmV0dXJuIHJldCA9PSAtRUJVU1kgPyAtRVRJTUUgOiByZXQ7CiB9CiAKIGludCBhaWUyX2NtZF9zdWJtaXQoc3RydWN0IGFtZHhkbmFfaHdjdHggKmh3Y3R4LCBzdHJ1Y3QgYW1keGRuYV9zY2hlZF9qb2IgKmpvYiwgdTY0ICpzZXEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYwppbmRleCBiOGYyZGQ5OTgyZjUzYy4uNzZlOGEwMDI4YzdmYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYwpAQCAtODUyLDggJiM0Mzs4NTIsNyBAQCBlbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgZHJtX2dwdXN2bV9zY2FuX21tKHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSwKIAkJLmVuZCA9IGVuZCwKIAkJLmRldl9wcml2YXRlX293bmVyID0gZGV2X3ByaXZhdGVfb3duZXIsCiAJfTsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPQotCQlqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7CiAJZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0IHN0YXRlID0gRFJNX0dQVVNWTV9TQ0FOX1VOUE9QVUxBVEVELCBuZXdfc3RhdGU7CiAJdW5zaWduZWQgbG9uZyAqcGZuczsKIAl1bnNpZ25lZCBsb25nIG5wYWdlcyA9IG5wYWdlc19pbl9yYW5nZShzdGFydCwgZW5kKTsKQEAgLTg2Nyw4ICYjNDM7ODY2LDcgQEAgZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0IGRybV9ncHVzdm1fc2Nhbl9tbShzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UsCiAJaG1tX3JhbmdlLmhtbV9wZm5zID0gcGZuczsKIAogcmV0cnk6Ci0JZXJyID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoJmFtcDtobW1fcmFuZ2UsCi0JCQkJCSAgICAgICBtYXgodGltZW91dCAtIGppZmZpZXMsIDFMKSk7CiYjNDM7CWVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KCZhbXA7aG1tX3JhbmdlLCB0aW1lb3V0KTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9mcmVlOwogCkBAIC0xNDU5LDggJiM0MzsxNDU3LDcgQEAgaW50IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sCiAJCS5kZXZfcHJpdmF0ZV9vd25lciA9IGN0eC0mZ3Q7ZGV2aWNlX3ByaXZhdGVfcGFnZV9vd25lciwKIAl9OwogCXZvaWQgKnpkZDsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPQotCQlqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7CiAJdW5zaWduZWQgbG9uZyBpLCBqOwogCXVuc2lnbmVkIGxvbmcgbnBhZ2VzID0gbnBhZ2VzX2luX3JhbmdlKHBhZ2VzX3N0YXJ0LCBwYWdlc19lbmQpOwogCXVuc2lnbmVkIGxvbmcgbnVtX2RtYV9tYXBwZWQ7CkBAIC0xNDc4LDkgJiM0MzsxNDc1LDYgQEAgaW50IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sCiAJCXJldHVybiAtRUlOVkFMOwogCiByZXRyeToKLQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKLQkJcmV0dXJuIC1FQlVTWTsKLQogCWhtbV9yYW5nZS5ub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihub3RpZmllcik7CiAJaWYgKGRybV9ncHVzdm1fcGFnZXNfdmFsaWRfdW5sb2NrZWQoZ3B1c3ZtLCBzdm1fcGFnZXMpKQogCQlnb3RvIHNldF9zZXFubzsKQEAgLTE0OTUsOCAmIzQzOzE0ODksNyBAQCBpbnQgZHJtX2dwdXN2bV9nZXRfcGFnZXMoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSwKIAl9CiAKIAlobW1fcmFuZ2UuaG1tX3BmbnMgPSBwZm5zOwotCWVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KCZhbXA7aG1tX3JhbmdlLAotCQkJCW1heF90KGxvbmcsIHRpbWVvdXQgLSBqaWZmaWVzLCAxKSk7CiYjNDM7CWVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KCZhbXA7aG1tX3JhbmdlLCB0aW1lb3V0KTsKIAltbXB1dChtbSk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfZnJlZTsKQEAgLTE3MTgsOCAmIzQzOzE3MTEsNyBAQCBpbnQgZHJtX2dwdXN2bV9yYW5nZV9ldmljdChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLAogCQkuZW5kID0gZHJtX2dwdXN2bV9yYW5nZV9lbmQocmFuZ2UpLAogCQkuZGV2X3ByaXZhdGVfb3duZXIgPSBOVUxMLAogCX07Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0KLQkJamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpOwomIzQzOwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpOwogCXVuc2lnbmVkIGxvbmcgKnBmbnM7CiAJdW5zaWduZWQgbG9uZyBucGFnZXMgPSBucGFnZXNfaW5fcmFuZ2UoZHJtX2dwdXN2bV9yYW5nZV9zdGFydChyYW5nZSksCiAJCQkJCSAgICAgICBkcm1fZ3B1c3ZtX3JhbmdlX2VuZChyYW5nZSkpOwpAQCAtMTczNCw4ICYjNDM7MTcyNiw3IEBAIGludCBkcm1fZ3B1c3ZtX3JhbmdlX2V2aWN0KHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sCiAJCXJldHVybiAtRU5PTUVNOwogCiAJaG1tX3JhbmdlLmhtbV9wZm5zID0gcGZuczsKLQllcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgmYW1wO2htbV9yYW5nZSwKLQkJCQltYXhfdChsb25nLCB0aW1lb3V0IC0gamlmZmllcywgMSkpOwomIzQzOwllcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgmYW1wO2htbV9yYW5nZSwgdGltZW91dCk7CiAKIAlrdmZyZWUocGZucyk7CiAJbW1wdXQobW0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmMKaW5kZXggNGNmYjZlYjdjNzcxNWEuLjU4NzM1NDQ2ZDc4MzJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmMKQEAgLTY3OCwxNCAmIzQzOzY3OCwyMCBAQCBzdGF0aWMgaW50IG5vdXZlYXVfcmFuZ2VfZmF1bHQoc3RydWN0IG5vdXZlYXVfc3ZtbSAqc3ZtbSwKIAlyYW5nZS5lbmQgPSBub3RpZmllci0mZ3Q7bm90aWZpZXIuaW50ZXJ2YWxfdHJlZS5sYXN0ICYjNDM7IDE7CiAKIAl3aGlsZSAodHJ1ZSkgewotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgewomIzQzOwkJbG9uZyByZW1haW5pbmcgPSB0aW1lb3V0IC0gamlmZmllczsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgSE1NIHRpbWVvdXQgb25seSBib3VuZHMgcmV0cmllcyB3aGlsZSBITU0gaXMgd2Fsa2luZyBhbmQKJiM0MzsJCSAqIGZhdWx0aW5nIHRoZSByYW5nZS4gVGhpcyBmYXVsdCBpcyBoYW5kbGVkIGJ5IGEga2VybmVsIHdvcmtlciwKJiM0MzsJCSAqIHNvIGZhdGFsIHNpZ25hbHMgZnJvbSB0aGUgZmF1bHRpbmcgcHJvY2VzcyBjYW5ub3Qgc3RvcCBhbgomIzQzOwkJICogZW5kbGVzcyBzdHJlYW0gb2YgaW52YWxpZGF0aW9ucyBoZXJlLgomIzQzOwkJICovCiYjNDM7CQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCB0aW1lb3V0KSkgewogCQkJcmV0ID0gLUVCVVNZOwogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgmYW1wO3JhbmdlLAotCQkJCQkJICAgICAgIG1heCh0aW1lb3V0IC0gamlmZmllcywKLQkJCQkJCQkgICAxTCkpOwomIzQzOwkJcmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoJmFtcDtyYW5nZSwgcmVtYWluaW5nKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gb3V0OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMTkKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA0NDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUaW1lb3V0IENoYW5nZSBpbiBITU0gUmFuZ2UgRmF1bHQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IGFwcGVhcnMgdG8gYmUgbW9kaWZ5aW5nIGhvdyBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIGlzIGNhbGxlZCBhY3Jvc3MgYSBmZXcgZHJpdmVyczogYW1keGRuYSwgZHJtX2dwdXN2bSwgYW5kIG5vdXZlYXVfc3ZtLiBUaGUga2V5IGNoYW5nZSBzZWVtcyB0byBiZSBob3cgdGhlIGB0aW1lb3V0YCBhcmd1bWVudCBpcyBoYW5kbGVkLiBJdCYjMzk7cyBtb3ZpbmcgZnJvbSBiZWluZyBhbiBhYnNvbHV0ZSBqaWZmaWVzIHZhbHVlLCBvciBhIHJlbWFpbmluZyB0aW1lIGNhbGN1bGF0aW9uLCB0byBhICpyZWxhdGl2ZSogdGltZW91dC4gSW5pdGlhbGx5LCBJIHRob3VnaHQgaXQgd2FzIGp1c3QgcGFzc2luZyB0aGUgYHRpbWVvdXRgIHZhcmlhYmxlIHdoaWNoIGlzIG5vdyBpbml0aWFsaXplZCBhcyBgbXNlY3NfdG9famlmZmllcyguLi4pYC4gTGV0IG1lIGRpZyBhIGxpdHRsZSBkZWVwZXIuCgpTcGVjaWZpY2FsbHksIGluIGBhaWUyX2N0eC5jYCwgdGhlIGRpZmYgc2hvd3M6CgpgYGBjCi0JdGltZW91dCA9IGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTsKJiM0MzsJdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7Ci4uLgotCXJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KCZhbXA7bWFwcC0mZ3Q7cmFuZ2UsCi0JCQltYXhfdChsb25nLCB0aW1lb3V0IC0gamlmZmllcywgMSkpOwotCWlmIChyZXQpIHsKLQkJaWYgKHJldCA9PSAtRUJVU1kpCi0JCQlyZXQgPSAtRVRJTUU7CiYjNDM7CXJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KCZhbXA7bWFwcC0mZ3Q7cmFuZ2UsIHRpbWVvdXQpOwomIzQzOwlpZiAocmV0KQogCQlnb3RvIHB1dF9tbTsKLQl9CmBgYAoKT2theSwgc28gdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBhYnNvbHV0ZSB0aW1lb3V0IGlzIGdvbmUgYW5kIG5vdyB3ZSYjMzk7cmUganVzdCBwYXNzaW5nIHRoZSByZXN1bHQgb2YgYG1zZWNzX3RvX2ppZmZpZXMoKWAuIEJ1dCB3YWl0IGEgc2Vjb25kLi4uIGlzIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAgZGVzaWduZWQgdG8gYWNjZXB0IGEgcmVsYXRpdmUgdGltZW91dCBub3c/IE9yIGRpZCB0aGF0IGNoYW5nZSBpbiBhIHByZXZpb3VzIG9yIHNlcGFyYXRlIHBhdGNoPyBUaGUgZGlmZiBpdHNlbGYgZG9lc24mIzM5O3Qgc2hvdyB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBjaGFuZ2luZywgd2hpY2ggaXMgYSBiaXQgb2RkLiBQZXJoYXBzIHRoZSBmdW5jdGlvbiB3YXMgYWxyZWFkeSBjaGFuZ2VkIHRvIGhhbmRsZSByZWxhdGl2ZSB0aW1lb3V0cywgYW5kIHRoaXMgcGF0Y2ggc2ltcGx5IGFsaWducyB0aGUgY2FsbGluZyBjb252ZW50aW9uPyBMZXQgbWUgbG9vayBhdCBzb21lIG90aGVyIGRpZmZzLiBBaCwgdGhlcmUmIzM5O3MgYSByZWxhdGVkIGNoYW5nZSBpbiBgaG1tLnJzdGAgd2hpY2ggcmVtb3ZlcyB0aGUgdXNlIG9mIGBqaWZmaWVzYCBpbiBhIGNvbXBhcmlzb246CgpgYGBjCi0gICAgICBpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkoJmFtcDtpbnRlcnZhbF9zdWIsIHJhbmdlLm5vdGlmaWVyX3NlcSkpIHsKJiM0MzsgICAgICBpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkocmFuZ2Uubm90aWZpZXIsIHJhbmdlLm5vdGlmaWVyX3NlcSkpIHsKYGBgCgpTdGlsbCBub3RoaW5nIGFib3V0IHRoZSBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIGRlZmluaXRpb24uIExldCYjMzk7cyBnbyBsb29rIGF0IHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGl0c2VsZiwgYW5kIGJlIHN1cmUgd2UgaGF2ZSB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2htbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0xNjA9bm9ybWFsIGludGVyZmFjZSBpczo6XG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMTYxLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjE2MjogIGludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0xNjMtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTtcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9MTY5PVRoZSBjYWxsZXIgbXVzdCBub3QgaG9sZCBgYG1tYXBfcmVhZF9sb2NrYGAgYmVmb3JlIHRoZSBjYWxsLlxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjE3MDpgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KClgYCB0YWtlcyB0aGUgbW1hcCByZWFkIGxvY2sgaW50ZXJuYWxseSBhbmRcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0xNzEtYWxsb3dzIGBgaGFuZGxlX21tX2ZhdWx0KClgYCB0byBkcm9wIGl0IGR1cmluZyBmYXVsdCBoYW5kbGluZy4gVGhpcyBpcyByZXF1aXJlZFxuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0xODY9VGhlIHVzYWdlIHBhdHRlcm4gaXM6OlxuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yMDMtIGFnYWluOlxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjIwNDogICAgICByZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZyYW5nZSwgdGltZW91dCk7XG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjA1LSAgICAgIGlmIChyZXQpXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTIyOD11cGRhdGUuIFRoZSByZXRyeSBjaGVjayBtdXN0IHVzZSB0aGUgc2FtZSBub3RpZmllciBhbmQgc2VxdWVuY2UgbnVtYmVyIHN0b3JlZFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjIyOTppbiBgYHJhbmdlYGAgYnkgYGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpYGAuXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjMwLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTIzMT1Ib2xkaW5nIHRoZSBtbWFwIGxvY2sgYWNyb3NzIEhNTSBmYXVsdHNcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjMzLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjIzNDpNb3N0IGNhbGxlcnMgc2hvdWxkIHVzZSBgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KClgYC4gSWYgYSBkcml2ZXJcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yMzUtcmVhbGx5IG5lZWRzIHRvIGhvbGQgdGhlIG1tYXAgbG9jayBhY3Jvc3Mgd29yayBvdXRzaWRlIEhNTSwgaXQgY2FuIHVzZTo6XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTI0MD1pbnRlcmZhY2UgY2Fubm90IHN1cHBvcnQgVk1BcyB3aG9zZSBmYXVsdCBoYW5kbGVycyBuZWVkIHRvIGRyb3AgdGhlIG1tYXAgbG9jay5cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoyNDE6TmV3IGNhbGxlcnMgc2hvdWxkIHByZWZlciBgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KClgYCB1bmxlc3MgdGhleVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTI0Mi1oYXZlIGEgc3BlY2lmaWMgcmVxdWlyZW1lbnQgdG8ga2VlcCB0aGUgbW1hcCBsb2NrIGhlbGQgYWNyb3NzIHRoZSBjYWxsLlxuLS1cbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jPTEwMzE9c3RhdGljIGludCBhaWUyX3BvcHVsYXRlX3JhbmdlKHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKmFibylcbi0tXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYy0xMDY0LVxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfY3R4LmM6MTA2NTpcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNm1hcHAtXHUwMDNlcmFuZ2UsIHRpbWVvdXQpO1xuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfY3R4LmMtMTA2Ni1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz04NDE9ZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0IGRybV9ncHVzdm1fc2Nhbl9tbShzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NjgtcmV0cnk6XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg2OTpcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNmhtbV9yYW5nZSwgdGltZW91dCk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg3MC1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz0xNDQ0PWludCBkcm1fZ3B1c3ZtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTQ5MS1cdGhtbV9yYW5nZS5obW1fcGZucyA9IHBmbnM7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE0OTI6XHRlcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZobW1fcmFuZ2UsIHRpbWVvdXQpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNDkzLVx0bW1wdXQobW0pO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM9MTcwMz1pbnQgZHJtX2dwdXN2bV9yYW5nZV9ldmljdChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTcyOC1cdGhtbV9yYW5nZS5obW1fcGZucyA9IHBmbnM7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE3Mjk6XHRlcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZobW1fcmFuZ2UsIHRpbWVvdXQpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNzMwLVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmM9NjUyPXN0YXRpYyBpbnQgbm91dmVhdV9yYW5nZV9mYXVsdChzdHJ1Y3Qgbm91dmVhdV9zdm1tICpzdm1tLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmMtNjkzLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uYzo2OTQ6XHRcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNnJhbmdlLCByZW1haW5pbmcpO1xuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uYy02OTUtXHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYz0zOTY9c3RhdGljIGludCBtc2h2X3JlZ2lvbl9yYW5nZV9mYXVsdChzdHJ1Y3QgbXNodl9tZW1fcmVnaW9uICpyZWdpb24sXG4tLVxuZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYy00MTUtYWdhaW46XG5kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jOjQxNjpcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNnJhbmdlLCAwKTtcbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmMtNDE3LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jPTMyND1pbnQgaWJfdW1lbV9vZHBfbWFwX2RtYV9hbmRfbG9jayhzdHJ1Y3QgaWJfdW1lbV9vZHAgKnVtZW1fb2RwLCB1NjQgdXNlcl92aXJ0LFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmMtMzY4LXJldHJ5OlxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYzozNjk6XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZyYW5nZSwgdGltZW91dCk7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jLTM3MC1cdGlmICh1bmxpa2VseShyZXQpKVxuLS1cbmluY2x1ZGUvbGludXgvaG1tLmg9MTI1PWludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpO1xuaW5jbHVkZS9saW51eC9obW0uaDoxMjY6aW50IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLFxuaW5jbHVkZS9saW51eC9obW0uaC0xMjctXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCk7XG4tLVxubGliL3Rlc3RfaG1tLmM9MzkyPXN0YXRpYyBpbnQgZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbi0tXG5saWIvdGVzdF9obW0uYy0zOTgtXHR3aGlsZSAodHJ1ZSkge1xubGliL3Rlc3RfaG1tLmM6Mzk5Olx0XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChyYW5nZSwgdGltZW91dCk7XG5saWIvdGVzdF9obW0uYy00MDAtXHRcdGlmIChyZXQpXG4tLVxubW0vaG1tLmM9Njg5PXN0YXRpYyBpbnQgaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSwgYm9vbCAqbG9ja2VkKVxuLS1cbm1tL2htbS5jLTc1My0gKiBUaGUgbW1hcCBsb2NrIG11c3QgYmUgaGVsZCBieSB0aGUgY2FsbGVyIGFuZCB3aWxsIHJlbWFpbiBoZWxkIG9uIHJldHVybi5cbm1tL2htbS5jOjc1NDogKiBOZXcgdXNlcnMgc2hvdWxkIHByZWZlciBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpIHVubGVzcyB0aGV5XG5tbS9obW0uYy03NTUtICogc3BlY2lmaWNhbGx5IG5lZWQgdG8ga2VlcCB0aGUgbW1hcCBsb2NrIGhlbGQgYWNyb3NzIHRoZSBjYWxsLiBUaGlzIGhlbHBlclxuLS1cbm1tL2htbS5jPTc2Mj1FWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV9mYXVsdCk7XG4tLVxubW0vaG1tLmMtNzY0LS8qKlxubW0vaG1tLmM6NzY1OiAqIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0IC0gZmF1bHQgaW4gYSByYW5nZSB3aXRoIGEgcmV0cnkgdGltZW91dFxubW0vaG1tLmMtNzY2LSAqIEByYW5nZTpcdGFyZ3VtZW50IHN0cnVjdHVyZVxuLS1cbm1tL2htbS5jLTc4My0gKi9cbm1tL2htbS5jOjc4NDppbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXG5tbS9obW0uYy03ODUtXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dClcbi0tXG5tbS9obW0uYy04MjQtfVxubW0vaG1tLmM6ODI1OkVYUE9SVF9TWU1CT0woaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQpO1xubW0vaG1tLmMtODI2LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTI5MDQ9VEVTVF9GX1RJTUVPVVQoaG1tLCBiZW5jaG1hcmtfdGhwX21pZ3JhdGlvbiwgMTIwKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTI5NjAtICogVGVzdCB0aGF0IEhNTSBjYW4gZmF1bHQgaW4gcGFnZXMgYmFja2VkIGJ5IHVzZXJmYXVsdGZkIHVzaW5nIHRoZVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6Mjk2MTogKiBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpIHBhdGggd2l0aCBubyB0aW1lb3V0LiBUaGlzIGV4ZXJjaXNlc1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMjk2Mi0gKiB0aGUgbG9jay1kcm9wIHJldHJ5IGxvZ2ljIGluIHRoZSBITU0gZnJhbWV3b3JrLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMzUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA0NzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUaW1lb3V0IFBhcmFtZXRlciBpbiBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgdGhlIGNoYW5nZSB0byBob3cgdGhlIGB0aW1lb3V0YCBwYXJhbWV0ZXIgaXMgaGFuZGxlZCBpbiBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIGNhdGNoZXMgbXkgZXllLiBJdCBhcHBlYXJzIHRoZSBzaWduYXR1cmUgb2YgdGhlIGZ1bmN0aW9uIGlzIGJlaW5nIHRyZWF0ZWQgYXMgdGFraW5nIGFuIGB1bnNpZ25lZCBsb25nIHRpbWVvdXRgIHBhcmFtZXRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBuZXcgYXBwcm9hY2guCgpMb29raW5nIGF0IHRoZSBjb2RlIGRpZmZzLCBzcGVjaWZpY2FsbHkgaW4gYGFpZTJfY3R4LmNgLCBgZHJtX2dwdXN2bS5jYCwgYW5kIGBub3V2ZWF1X3N2bS5jYCwgaXQgc2VlbXMgdGhhdCB0aGUgY29kZSB1c2VkIHRvIGNhbGN1bGF0ZSBhbiAqYWJzb2x1dGUqIHRpbWVvdXQsIG9mdGVuIGJ5IGFkZGluZyBgamlmZmllc2AgdG8gYSBkdXJhdGlvbi4gSW4gZXNzZW5jZSwgdGhleSB3ZXJlIHNldHRpbmcgYW4gKmV4cGlyYXRpb24gdGltZSouIE5vdywgdGhlIHBhdGNoIGlzIHJlbW92aW5nIHRoZSBgamlmZmllc2AgYWRkaXRpb24gYW5kIGRpcmVjdGx5IHBhc3NpbmcgYSB0aW1lb3V0IHZhbHVlIGNhbGN1bGF0ZWQgdXNpbmcgYG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVClgLiBBbHNvLCB0aGUgY2FsbHMgd2VyZSBwcmV2aW91c2x5IHN1YnRyYWN0aW5nIGBqaWZmaWVzYCBmcm9tIHRoZSB0aW1lb3V0IGFuZCB1c2luZyBgbWF4KClgIHRvIGVuc3VyZSB0aGUgdGltZW91dCB3YXMgYXQgbGVhc3QgMSwgYnV0IG5vdyB0aG9zZSBjYWxjdWxhdGlvbnMgYXJlIHJlbW92ZWQuCgpUaGlzIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHRoYXQgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCBub3cgZXhwZWN0cyBhICpyZWxhdGl2ZSogdGltZW91dCDigJMgYSBkdXJhdGlvbiwgbm90IGFuIGFic29sdXRlIHRpbWVzdGFtcC4gSXQmIzM5O3MgZXhwZWN0aW5nIHRoZSBudW1iZXIgb2YgamlmZmllcyB0byB3YWl0LiBJICpuZWVkKiB0byBjb25maXJtIHRoaXMuIFRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIGluIGBtbS9obW0uY2AgdG8gdmVyaWZ5IHdoZXRoZXIgaXQgaW50ZXJwcmV0cyB0aGUgYHRpbWVvdXRgIHBhcmFtZXRlciBhcyBhIHJlbGF0aXZlIHRpbWUgdmFsdWUuIElmIHRoZSBjb2RlIGlzIG5vdyBwYXNzaW5nIGFuIGFic29sdXRlIHRpbWUsIHRoZSBwYXRjaCBpcyB3cm9uZyBhbmQgd2lsbCBicmVhay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwODowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTE2MD1ub3JtYWwgaW50ZXJmYWNlIGlzOjpcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0xNjEtXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MTYyOiAgaW50IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTE2My0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpO1xuLS1cbmluY2x1ZGUvbGludXgvaG1tLmg9MTI1PWludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpO1xuaW5jbHVkZS9saW51eC9obW0uaDoxMjY6aW50IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLFxuaW5jbHVkZS9saW51eC9obW0uaC0xMjctXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCk7XG4tLVxubW0vaG1tLmM9NzYyPUVYUE9SVF9TWU1CT0woaG1tX3JhbmdlX2ZhdWx0KTtcbi0tXG5tbS9obW0uYy03ODMtICovXG5tbS9obW0uYzo3ODQ6aW50IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLFxubW0vaG1tLmMtNzg1LVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ2MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBjb2RlOgoKKipEaXZpbmcgaW50byBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBtbS9obW0uY2AgYW5kIHNwZWNpZmljYWxseSwgdGhhdCBmdW5jdGlvbiwgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YC4gVGhlIG5hbWUgaXRzZWxmIGlzIGludHJpZ3VpbmcuICBJdCBzdWdnZXN0cyBoYW5kbGluZyBhIGZhdWx0IHdpdGhpbiBhIEh5cGVyLU1lbW9yeSBNYW5hZ2VtZW50IChITU0pIHJhbmdlLCBidXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHNpdHVhdGlvbiB3aGVyZSBzb21lIGtpbmQgb2YgbG9jayBpcyAqbm90KiBoZWxkLCBhbmQgd2UmIzM5O3JlIGFsc28gZGVhbGluZyB3aXRoIGEgdGltZW91dC4gIFRoaXMgbGlrZWx5IGluZGljYXRlcyBhIGJhY2tncm91bmQgcHJvY2Vzcywgb3IgbWF5YmUgYXN5bmNocm9ub3VzIG9wZXJhdGlvbiwgYW5kIHdl4oCZcmUgdHJ5aW5nIHRvIHByZXZlbnQgaXQgZnJvbSBibG9ja2luZyBpbmRlZmluaXRlbHkuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCB0aGVzZSB0aW1lb3V0IHNjZW5hcmlvcyBvZnRlbiBwb2ludCB0byBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgcmVzb3VyY2UgY29udGVudGlvbiwgc28gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IHRoYXQmIzM5O3MgYWRkcmVzc2VkLgoKSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkLiBJcyBpdCB0cmlnZ2VyZWQgYnkgYSB0aW1lciwgYW4gaW50ZXJydXB0LCBvciBzb21ldGhpbmcgZWxzZT8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBwcm9ibGVtIGl0JiMzOTtzIGRlc2lnbmVkIHRvIHNvbHZlLgoKSeKAmWxsIGFsc28ga2VlcCBhbiBleWUgb3V0IGZvciBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgSE1NIGNvbXBvbmVudHMsIHN1Y2ggYXMgcmFuZ2UgbWV0YWRhdGEsIHBhZ2UgdGFibGVzLCBhbmQgYW55IHBvdGVudGlhbCBsb2NraW5nIG1lY2hhbmlzbXMgKGV2ZW4gaWYgbm90IGV4cGxpY2l0bHkgaGVsZCBieSB0aGUgY2FsbGVyKS4gR2l2ZW4gdGhhdCBpdCYjMzk7cyAmIzM0O3VubG9ja2VkLCYjMzQ7IHRoZSBmdW5jdGlvbiBwcm9iYWJseSByZWxpZXMgb24gc29tZSBvdGhlciBtZWNoYW5pc20gdG8gZW5zdXJlIGRhdGEgY29uc2lzdGVuY3kuIE1heWJlIGF0b21pYyBvcGVyYXRpb25zPyBQZXJoYXBzIHJlYWQtY29weS11cGRhdGUgdGVjaG5pcXVlcz8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMuIFRoZSAmIzM0O3RpbWVvdXQmIzM0OyBhc3BlY3QgbWFrZXMgbWUgdGhpbmsgYWJvdXQgcG90ZW50aWFsIGRlYWRsb2NrcyBvciBsaXZlbG9ja3Mg4oCTIEkmIzM5O2xsIGJlIGxvb2tpbmcgYXQgd2hldGhlciBpdCB0YWtlcyBzdGVwcyB0byBtaXRpZ2F0ZSB0aG9zZSBwb3NzaWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaG1tLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc4MDpcdCAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG9uZSBvZiB0aGUgZXJyb3IgY29kZXMgZG9jdW1lbnRlZCBmb3JcbiA3ODE6XHQgKiBobW1fcmFuZ2VfZmF1bHQoKS4gLUVJTlRSIGlzIHJldHVybmVkIGlmIG1tYXBfbG9jayBhY3F1aXNpdGlvbiBpc1xuIDc4MjpcdCAqIGludGVycnVwdGVkIG9yIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcgZHVyaW5nIHJldHJ5IGhhbmRsaW5nLlxuIDc4MzpcdCAqL1xuIDc4NDpcdGludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSxcbiA3ODU6XHRcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KVxuIDc4NjpcdHtcbiA3ODc6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcmFuZ2UtXHUwMDNlbm90aWZpZXItXHUwMDNlbW07XG4gNzg4Olx0XHR1bnNpZ25lZCBsb25nIGRlYWRsaW5lID0gMDtcbiA3ODk6XHRcdGJvb2wgbG9ja2VkID0gZmFsc2U7XG4gNzkwOlx0XHRpbnQgcmV0O1xuIDc5MTpcdFxuIDc5MjpcdFx0ZG8ge1xuIDc5MzpcdFx0XHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4gNzk0Olx0XHRcdFx0cmV0dXJuIC1FSU5UUjtcbiA3OTU6XHRcbiA3OTY6XHRcdFx0aWYgKHRpbWVvdXQpIHtcbiA3OTc6XHRcdFx0XHQvKlxuIDc5ODpcdFx0XHRcdCAqIElmIHRoZSBwcmV2aW91cyBmYXVsdCBkcm9wcGVkIG1tYXBfbG9jaywgdGhlbiB0aGUgZmF1bHRcbiA3OTk6XHRcdFx0XHQgKiBoYW5kbGVyIG1hZGUgcHJvZ3Jlc3MuIFJlc3RhcnQgdGhlIHJldHJ5IHRpbWVvdXQgaW4gdGhhdFxuIDgwMDpcdFx0XHRcdCAqIGNhc2UsIGJ1dCBrZWVwIHRoZSBleGlzdGluZyBkZWFkbGluZSBmb3Igb3JkaW5hcnkgLUVCVVNZXG4gODAxOlx0XHRcdFx0ICogcmV0cmllcy5cbiA4MDI6XHRcdFx0XHQgKi9cbiA4MDM6XHRcdFx0XHRpZiAoIWxvY2tlZClcbiA4MDQ6XHRcdFx0XHRcdGRlYWRsaW5lID0gamlmZmllcyAmIzQzOyB0aW1lb3V0O1xuIDgwNTpcdFxuIDgwNjpcdFx0XHRcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRlYWRsaW5lKSlcbiA4MDc6XHRcdFx0XHRcdHJldHVybiAtRUJVU1k7XG4gODA4Olx0XHRcdH1cbiA4MDk6XHRcbiA4MTA6XHRcdFx0cmFuZ2UtXHUwMDNlbm90aWZpZXJfc2VxID1cbiA4MTE6XHRcdFx0XHRtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihyYW5nZS1cdTAwM2Vub3RpZmllcik7XG4gODEyOlx0XG4gODEzOlx0XHRcdHJldCA9IG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKG1tKTtcbiA4MTQ6XHRcdFx0aWYgKHJldClcbiA4MTU6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDgxNjpcdFxuIDgxNzpcdFx0XHRsb2NrZWQgPSB0cnVlO1xuIDgxODpcdFx0XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkKHJhbmdlLCBcdTAwMjZsb2NrZWQpO1xuIDgxOTpcdFx0XHRpZiAobG9ja2VkKVxuIDgyMDpcdFx0XHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuIDgyMTpcdFx0fSB3aGlsZSAocmV0ID09IC1FQlVTWSk7XG4gODIyOlx0XG4gODIzOlx0XHRyZXR1cm4gcmV0O1xuIDgyNDpcdH1cbiA4MjU6XHRFWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KTtcbiA4MjY6XHRcbiA4Mjc6XHQvKipcbiA4Mjg6XHQgKiBobW1fZG1hX21hcF9hbGxvYyAtIEFsbG9jYXRlIEhNTSBtYXAgc3RydWN0dXJlXG4gODI5Olx0ICogQGRldjogZGV2aWNlIHRvIGFsbG9jYXRlIHN0cnVjdHVyZSBmb3JcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwODowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTQ1CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVGltZW91dCBMb2dpYyBpbiBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCwgaXQgZXhwZWN0cyBgdGltZW91dGAgdG8gYmUgYSAqcmVsYXRpdmUqIHRpbWVvdXQsIGxpa2UgdGhlIHJlc3VsdCBvZiBgbXNlY3NfdG9famlmZmllcygxMDApYC4gSW5zaWRlLCBpdCBhZGRzIHRoaXMgcmVsYXRpdmUgdGltZW91dCB0byB0aGUgY3VycmVudCBgamlmZmllc2AgdG8gZ2V0IHRoZSBkZWFkbGluZSwgYnV0IG9ubHkgaWYgdGhlIG1lbW9yeSByZWdpb24gaXNuJiMzOTt0IGxvY2tlZC4gVGhlIGNvZGUgdXNlcyBgZGVhZGxpbmUgPSBqaWZmaWVzICYjNDM7IHRpbWVvdXQ7YCB3aGVuIHRoZSByZWdpb24gaXMgdW5sb2NrZWQsIGFuZCB0aGVuIEkgcmVhbGl6ZWQgdGhhdCBpZiB0aGUgY2FsbGVyIHBhc3NlcyBzb21ldGhpbmcgbGlrZSBgbWF4X3QobG9uZywgdGltZW91dCAtIGppZmZpZXMsIDEpYCwgd2hlcmUgYHRpbWVvdXRgIHdhcyBvcmlnaW5hbGx5IGFuICphYnNvbHV0ZSogamlmZmllcyB2YWx1ZSwgdGhlbiBpdCB3YXMgZWZmZWN0aXZlbHkgY2FsY3VsYXRpbmcgdGhlIHJlbWFpbmluZyB0aW1lIGFuZCBwYXNzaW5nIGl0LgoKQnV0IGhvbGQgb24sIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAgKml0c2VsZiogYWxyZWFkeSBoYW5kbGVzIHRoZSByZXRyeSBsb2dpYyBhbmQgcmVzdGFydHMgdGhlIHRpbWVvdXQgaWYgdGhlIHJlZ2lvbiBpc24mIzM5O3QgbG9ja2VkLCB3aGljaCBtZWFucyBwcm9ncmVzcyB3YXMgbWFkZS4gU28gdGhlIGNhbGxlciBzaG91bGRuJiMzOTt0IGJlIGdpdmluZyBpdCB0aGUgcmVtYWluaW5nIHRpbWUhIEl0IHNob3VsZCBiZSBwYXNzaW5nIHRoZSAqb3JpZ2luYWwqIHJlbGF0aXZlIHRpbWVvdXQsIHNvIHRoYXQgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCBjYW4gcHJvcGVybHkgcmVzdGFydCB0aGUgdGltZW91dCBmcm9tIHNjcmF0Y2guIEl0JiMzOTtzIHN1cHBvc2VkIHRvIG1hbmFnZSB0aGUgcmV0cmllcyBpbnRlcm5hbGx5LgoKTm93LCBhIHF1aWNrIGNoZWNrIG9mIHRoZSBub3V2ZWF1IGRyaXZlciByZXZlYWxzIHNvbWV0aGluZyBpbnRlcmVzdGluZy4gSXQmIzM5O3Mgc3RpbGwgcGFzc2luZyBhIGByZW1haW5pbmdgIHZhbHVlLiBJIHNlZSB0aGlzOgoKYGBgYwotCQlyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgmYW1wO3JhbmdlLAotCQkJCQkJICAgICAgIG1heCh0aW1lb3V0IC0gamlmZmllcywKLQkJCQkJCQkgICAxTCkpOwomIzQzOwkJcmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoJmFtcDtyYW5nZSwgcmVtYWluaW5nKTsKYGBgCgpXYWl0LCBpdCBsb29rcyBsaWtlIGBub3V2ZWF1X3N2bS5jYCBhbHJlYWR5IGhhcyBpdHMgb3duIGxvb3AgYXJvdW5kIHRoZSBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIGZ1bmN0aW9uPyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGBub3V2ZWF1X3N2bS5jYCBjb2RlIHRvIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwODowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY3MDpcdFxuIDY3MTpcdFx0cmV0ID0gbW11X2ludGVydmFsX25vdGlmaWVyX2luc2VydChcdTAwMjZub3RpZmllci1cdTAwM2Vub3RpZmllciwgbW0sXG4gNjcyOlx0XHRcdFx0XHRcdGFyZ3MtXHUwMDNlcC5hZGRyLCBhcmdzLVx1MDAzZXAuc2l6ZSxcbiA2NzM6XHRcdFx0XHRcdFx0XHUwMDI2bm91dmVhdV9zdm1fbW5pX29wcyk7XG4gNjc0Olx0XHRpZiAocmV0KVxuIDY3NTpcdFx0XHRyZXR1cm4gcmV0O1xuIDY3NjpcdFxuIDY3NzpcdFx0cmFuZ2Uuc3RhcnQgPSBub3RpZmllci1cdTAwM2Vub3RpZmllci5pbnRlcnZhbF90cmVlLnN0YXJ0O1xuIDY3ODpcdFx0cmFuZ2UuZW5kID0gbm90aWZpZXItXHUwMDNlbm90aWZpZXIuaW50ZXJ2YWxfdHJlZS5sYXN0ICYjNDM7IDE7XG4gNjc5Olx0XG4gNjgwOlx0XHR3aGlsZSAodHJ1ZSkge1xuIDY4MTpcdFx0XHRsb25nIHJlbWFpbmluZyA9IHRpbWVvdXQgLSBqaWZmaWVzO1xuIDY4MjpcdFxuIDY4MzpcdFx0XHQvKlxuIDY4NDpcdFx0XHQgKiBUaGUgSE1NIHRpbWVvdXQgb25seSBib3VuZHMgcmV0cmllcyB3aGlsZSBITU0gaXMgd2Fsa2luZyBhbmRcbiA2ODU6XHRcdFx0ICogZmF1bHRpbmcgdGhlIHJhbmdlLiBUaGlzIGZhdWx0IGlzIGhhbmRsZWQgYnkgYSBrZXJuZWwgd29ya2VyLFxuIDY4NjpcdFx0XHQgKiBzbyBmYXRhbCBzaWduYWxzIGZyb20gdGhlIGZhdWx0aW5nIHByb2Nlc3MgY2Fubm90IHN0b3AgYW5cbiA2ODc6XHRcdFx0ICogZW5kbGVzcyBzdHJlYW0gb2YgaW52YWxpZGF0aW9ucyBoZXJlLlxuIDY4ODpcdFx0XHQgKi9cbiA2ODk6XHRcdFx0aWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgdGltZW91dCkpIHtcbiA2OTA6XHRcdFx0XHRyZXQgPSAtRUJVU1k7XG4gNjkxOlx0XHRcdFx0Z290byBvdXQ7XG4gNjkyOlx0XHRcdH1cbiA2OTM6XHRcbiA2OTQ6XHRcdFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2cmFuZ2UsIHJlbWFpbmluZyk7XG4gNjk1Olx0XHRcdGlmIChyZXQpXG4gNjk2Olx0XHRcdFx0Z290byBvdXQ7XG4gNjk3Olx0XG4gNjk4Olx0XHRcdG11dGV4X2xvY2soXHUwMDI2c3ZtbS1cdTAwM2VtdXRleCk7XG4gNjk5Olx0XHRcdGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShyYW5nZS5ub3RpZmllcixcbiA3MDA6XHRcdFx0XHRcdFx0ICAgIHJhbmdlLm5vdGlmaWVyX3NlcSkpIHtcbiA3MDE6XHRcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2c3ZtbS1cdTAwM2VtdXRleCk7XG4gNzAyOlx0XHRcdFx0Y29udGludWU7XG4gNzAzOlx0XHRcdH1cbiA3MDQ6XHRcdFx0YnJlYWs7XG4gNzA1Olx0XHR9XG4gNzA2Olx0XG4gNzA3Olx0XHRub3V2ZWF1X2htbV9jb252ZXJ0X3Bmbihkcm0sIFx1MDAyNnJhbmdlLCBhcmdzKTtcbiA3MDg6XHRcbiA3MDk6XHRcdHJldCA9IG52aWZfb2JqZWN0X2lvY3RsKFx1MDAyNnN2bW0tXHUwMDNldm1tLVx1MDAzZXZtbS5vYmplY3QsIGFyZ3MsIHNpemUsIE5VTEwpO1xuIDcxMDpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnN2bW0tXHUwMDNlbXV0ZXgpO1xuIDcxMTpcdFxuIDcxMjpcdG91dDpcbiA3MTM6XHRcdG1tdV9pbnRlcnZhbF9ub3RpZmllcl9yZW1vdmUoXHUwMDI2bm90aWZpZXItXHUwMDNlbm90aWZpZXIpO1xuIDcxNDpcdFxuIDcxNTpcdFx0cmV0dXJuIHJldDtcbiA3MTY6XHR9XG4gNzE3Olx0XG4gNzE4Olx0c3RhdGljIHZvaWRcbiA3MTk6XHRub3V2ZWF1X3N2bV9mYXVsdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDQyCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNTUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVGltZW91dCBDaGFuZ2UgaW4gSE1NIEZhdWx0IEhhbmRsaW5nKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgSSBzZWUgaXQmIzM5O3MgdG91Y2hpbmcgYG5vdXZlYXVfc3ZtLmNgLCBhbmQgdGhhdCYjMzk7cyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IGhhcyBpdHMgb3duIGxvb3AgZHVlIHRvIHRoZSBgbW11X2ludGVydmFsX3JlYWRfcmV0cnlgIGNhbGwuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyB0aGUgdGltZW91dCBpcyBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgd2l0aCBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYG1heCh0aW1lb3V0IC0gamlmZmllcywgMUwpYCB0byBgcmVtYWluaW5nYC4gVGhpcyBzZWVtcyB0byBiZSB0aGUgZml4LgoKSXQmIzM5O3MgY2xlYXIgdGhlIGNoYW5nZSBhZmZlY3RzIGhvdyBgdGltZW91dGAgaXMgcGFzc2VkIHRvIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAuIExvb2tpbmcgYXQgYGFpZTJfY3R4LmNgIGFuZCBgZHJtX2dwdXN2bS5jYCwgSSBzZWUgdGhhdCB0aGUgY29kZSBpcyBjaGFuZ2luZyBmcm9tIHVzaW5nIGBtYXhfdChsb25nLCB0aW1lb3V0IC0gamlmZmllcywgMSlgIHRvIGp1c3QgcGFzc2luZyBgdGltZW91dGAgZGlyZWN0bHkgKHdoaWNoIGlzIG5vdyBhICpyZWxhdGl2ZSogdGltZW91dCkuIFdhaXQsIHRoaXMgaXMga2V5ISBJZiBgdGltZW91dGAgaXMgcmVsYXRpdmUgbm93LCBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIHdpbGwgcmVzdGFydCB0aGUgdGltZW91dCBpZiBgIWxvY2tlZGAuCgpQcmV2aW91c2x5LCB0aGUgY2FsbGVyIHdhcyBwYXNzaW5nIGBtYXhfdChsb25nLCB0aW1lb3V0IC0gamlmZmllcywgMSlgLCB3aGljaCByZXByZXNlbnRlZCB0aGUgcmVtYWluaW5nIHRpbWUuIENvbnNlcXVlbnRseSwgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCB3YXMgZXNzZW50aWFsbHkgcmVzdGFydGluZyB0aGUgdGltZW91dCB3aXRoIHRoZSByZW1haW5pbmcgdGltZSwgbWFraW5nIGl0IGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvICpub3QqIHJlc3RhcnRpbmcgdGhlIHRpbWVvdXQgYXQgYWxsLCBzaW5jZSBgamlmZmllcyAmIzQzOyAodGltZW91dCAtIGppZmZpZXMpYCBpcyBqdXN0IGB0aW1lb3V0YC4KCk5vdywgc2luY2UgdGhlIGNhbGxlciBwYXNzZXMgdGhlIHJlbGF0aXZlIHRpbWVvdXQgKGxpa2UgYG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVClgKSwgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCB3aWxsIHJlc3RhcnQgdGhlIHRpbWVvdXQgd2l0aCB0aGUgKmZ1bGwqIHJlbGF0aXZlIHRpbWVvdXQuIFRoaXMgbWVhbnMgdGhlIHRpbWVvdXQgaXMgZXh0ZW5kZWQgZXZlcnkgdGltZSB0aGUgZmF1bHQgaGFuZGxlciBtYWtlcyBwcm9ncmVzcy4gVGhhdCYjMzk7cyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlLgoKR2l2ZW4gdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBsZXQgbWUgdGhpbmsgYWJvdXQgaG93IGl0JiMzOTtzIHVzZWQuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIGBhaWUyX2N0eC5jYCBpcyBmb3IgdGhlIEFNRCBYRE5BIGRyaXZlciAoYGRyaXZlcnMvYWNjZWwvYW1keGRuYWApLiBgZHJtX2dwdXN2bS5jYCBpcyBmb3IgRFJNIEdQVSBTVk0gKGBkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jYCksIGFuZCBgbm91dmVhdV9zdm0uY2AgaXMgZm9yIE5vdXZlYXUgU1ZNIChgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY2ApLiBUaGlzIGxlYWRzIG1lIHRvIHdhbnQgdG8gc2VlIGlmIGBkcm1fZ3B1c3ZtLmNgIGlzIGZ1enphYmxlLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYGRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwODowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcm1fZ3B1c3ZtX3NjYW5fbW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz03NzA9c3RhdGljIGJvb2wgZHJtX2dwdXN2bV9jaGVja19wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODI1LS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4MjY6ICogZHJtX2dwdXN2bV9zY2FuX21tKCkgLSBDaGVjayB0aGUgbWlncmF0aW9uIHN0YXRlIG9mIGEgZHJtX2dwdXN2bV9yYW5nZVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04MjctICogQHJhbmdlOiBQb2ludGVyIHRvIHRoZSBzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSB0byBjaGVjay5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg0MC0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODQxOmVudW0gZHJtX2dwdXN2bV9zY2FuX3Jlc3VsdCBkcm1fZ3B1c3ZtX3NjYW5fbW0oc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NDItXHRcdFx0XHRcdCAgICAgICB2b2lkICpkZXZfcHJpdmF0ZV9vd25lcixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkyNy19XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjkyODpFWFBPUlRfU1lNQk9MKGRybV9ncHVzdm1fc2Nhbl9tbSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkyOS1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM9MTY0OD1pbnQgeGVfc3ZtX2FsbG9jX3ZyYW0oc3RydWN0IHhlX3N2bV9yYW5nZSAqcmFuZ2UsIGNvbnN0IHN0cnVjdCBkcm1fZ3B1c3ZtX2N0eCAqY3R4LFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xNjY0LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjE2NjU6XHRtaWdyYXRpb25fc3RhdGUgPSBkcm1fZ3B1c3ZtX3NjYW5fbW0oXHUwMDI2cmFuZ2UtXHUwMDNlYmFzZSxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xNjY2LVx0XHRcdFx0XHQgICAgIHhlX3N2bV9wcml2YXRlX3BhZ2Vfb3duZXIodm0sIGZhbHNlKSxcbi0tXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg9MzUwPXN0YXRpYyBpbmxpbmUgdm9pZCBkcm1fZ3B1c3ZtX2luaXRfcGFnZXMoc3RydWN0IGRybV9ncHVzdm1fcGFnZXMgKnN2bV9wYWdlcyxcbi0tXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmgtMzU4LS8qKlxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oOjM1OTogKiBlbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgLSBTY2FuIHJlc3VsdCBmcm9tIHRoZSBkcm1fZ3B1c3ZtX3NjYW5fbW0oKSBmdW5jdGlvbi5cbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0zNjAtICogQERSTV9HUFVTVk1fU0NBTl9VTlBPUFVMQVRFRDogQXQgbGVhc3Qgb25lIHBhZ2Ugd2FzIG5vdCBwcmVzZW50IG9yIGluYWNjZXNzaWJsZS5cbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0zNjEtICogQERSTV9HUFVTVk1fU0NBTl9FUVVBTDogQWxsIHBhZ2VzIGJlbG9uZyB0byB0aGUgc3RydWN0IGRldl9wYWdlbWFwIGluZGljYXRlZCBhc1xuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oOjM2MjogKiB0aGUgQHBhZ2VtYXAgYXJndW1lbnQgdG8gdGhlIGRybV9ncHVzdm1fc2Nhbl9tbSgpIGZ1bmN0aW9uLlxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oLTM2My0gKiBARFJNX0dQVVNWTV9TQ0FOX09USEVSOiBBbGwgcGFnZXMgYmVsb25nIHRvIGV4YWN0bHkgb25lIGRldl9wYWdlbWFwLCB3aGljaCBpc1xuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oOjM2NDogKiAqTk9UKiB0aGUgQHBhZ2VtYXAgYXJndW1lbnQgdG8gdGhlIGRybV9ncHVzdm1fc2Nhbl9tbSgpLiBBbGwgcGFnZXMgYmVsb25nIHRvXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmgtMzY1LSAqIHRoZSBzYW1lIGRldmljZSBwcml2YXRlIG93bmVyLlxuLS1cbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaD0zNzQ9ZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0IHtcbi0tXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmgtMzgyLVxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oOjM4MzplbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgZHJtX2dwdXN2bV9zY2FuX21tKHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSxcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0zODQtXHRcdFx0XHRcdCAgICAgICB2b2lkICpkZXZfcHJpdmF0ZV9vd25lcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxMjkKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEdQVSBWaXJ0dWFsaXphdGlvbiBhbmQgRHJpdmVyIEludGVyYWN0aW9ucyoqCgpPa2F5LCBzbyBgZHJtX2dwdXN2bV9zY2FuX21tYCBpcyBiZWluZyBjYWxsZWQgYnkgYHhlX3N2bV9hbGxvY192cmFtYCB3aXRoaW4gdGhlIGB4ZWAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgaW4gYGRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uY2AuIFRoZSBxdWVzdGlvbiBpbW1lZGlhdGVseSBwb3BwaW5nIGludG8gbXkgaGVhZCBpcywgY2FuIHRoZSBgeGVgIGRyaXZlciwgSW50ZWwmIzM5O3MgWGUgZ3JhcGhpY3MgZHJpdmVyLCBldmVuIGJlIHRyaWdnZXJlZCB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gSXQmIzM5O3MgaGFyZHdhcmUtc3BlY2lmaWMsIHJlcXVpcmluZyBhY3R1YWwgSW50ZWwgWGUgc2lsaWNvbiwgYnV0IHBlcmhhcHMgdGhlcmUmIzM5O3MgYSBmdXp6aW5nIGF2ZW51ZSB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIFZHRU0gb3IgVktNUz8gTm8sIHRoYXQmIzM5O3Mgbm90IHF1aXRlIHJpZ2h0OyBgeGVgIGlzIGEgKmhhcmR3YXJlKiBkcml2ZXIgdGhyb3VnaCBhbmQgdGhyb3VnaC4KClRoZW4gbXkgbWluZCBzaGlmdGVkIHRvIGNvbnNpZGVyIGBub3V2ZWF1X3N2bS5jYC4gTm93LCAqdGhhdCogd291bGQgYmUgaW50ZXJlc3RpbmcuIFRoZSBOVklESUEgZHJpdmVyLCBgbm91dmVhdWAsIGFuZCB0aGUgZ2VuZXJhbCBjb25jZXB0IG9mIEdQVSB2aXJ0dWFsaXphdGlvbi4uLiBob3cgbWlnaHQgdGhhdCBwbGF5IG91dD8gQW55IHJlbGV2YW50IGludGVyYWN0aW9ucyB3aXRoIGBkcm1fZ3B1c3ZtX2dldF9wYWdlc2AgdGhhdCBjb3VsZCBwcm92aWRlIGEgZGlmZmVyZW50IGVudHJ5IHBvaW50IGludG8gdGhlIG92ZXJhbGwgZmxvdz8gSSBzaG91bGQgZGlnIGludG8gdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHJtX2dwdXN2bV9nZXRfcGFnZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3Q9OTE9UG9zc2libGUgZnV0dXJlIGRlc2lnbiBmZWF0dXJlc1xuLS1cbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0LTEwMC0qIFJhbmdlcyB3aXRoIG1peGVkIHN5c3RlbSBhbmQgZGV2aWNlIHBhZ2VzXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdDoxMDE6XHQqIENhbiBiZSBhZGRlZCBpZiByZXF1aXJlZCB0byBkcm1fZ3B1c3ZtX2dldF9wYWdlcyBmYWlybHkgZWFzaWx5LlxuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3QtMTAyLSogTXVsdGktR1BVIHN1cHBvcnRcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTIzNC0gKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyMzU6ICpcdFx0ZXJyID0gZHJtX2dwdXN2bV9nZXRfcGFnZXMoZ3B1c3ZtLCBcdTAwMjZkcmFuZ2UtXHUwMDNlcGFnZXMsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTIzNi0gKlx0XHRcdFx0XHQgICBncHVzdm0tXHUwMDNlbW0sIFx1MDAyNnJhbmdlLVx1MDAzZW5vdGlmaWVyLVx1MDAzZW5vdGlmaWVyLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM9NDM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVyX29wcyBkcm1fZ3B1c3ZtX25vdGlmaWVyX29wcyA9IHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ1Ni0gKiBtYXBwaW5ncyBpcyBib3VuZCBwZXItcGFnZXMgdmlhIGRybV9ncHVzdm1faW5pdF9wYWdlcygpIGJlZm9yZSB0aGUgZmlyc3RcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDU3OiAqIGRybV9ncHVzdm1fZ2V0X3BhZ2VzKCkgY2FsbC4gSG93ZXZlciwgdGhlIHNhbWUgYmFzZVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00NTgtICogQGdwdXN2bSBjYW4gYWxzbyBiZSB1c2VkIHdpdGggYm90aCBtb2RlcyB0b2dldGhlciBpbiB3aGljaCBjYXNlIHRoZSBmdWxsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz05NDg9ZHJtX2dwdXN2bV9yYW5nZV9jaHVua19zaXplKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05OTQtXHRcdCAqIGRybV9wYWdlbWFwX21pZ3JhdGVfdG9fZGV2bWVtIHdpdGggJiMzOTttaWdyYXRlLmNwYWdlcyAhPSBucGFnZXMmIzM5O1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5OTU6XHRcdCAqIGFuZCB0aGVuIHVwb24gZHJtX2dwdXN2bV9nZXRfcGFnZXMgZGV2aWNlIHBhZ2VzIGZyb21cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTk2LVx0XHQgKiBvdGhlciBwcm9jZXNzZXMgYXJlIGNvbGxlY3RlZCAmIzQzOyBmYXVsdGVkIGluIHdoaWNoIGNyZWF0ZXMgYWxsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz0xNDEyPXN0YXRpYyBib29sIGRybV9ncHVzdm1fcGFnZXNfdmFsaWRfdW5sb2NrZWQoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE0MjktLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE0MzA6ICogZHJtX2dwdXN2bV9nZXRfcGFnZXMoKSAtIEdldCBwYWdlcyBhbmQgcG9wdWxhdGUgR1BVIFNWTSBwYWdlcyBzdHJ1Y3RcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTQzMS0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTQ0My0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTQ0NDppbnQgZHJtX2dwdXN2bV9nZXRfcGFnZXMoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTQ0NS1cdFx0XHQgc3RydWN0IGRybV9ncHVzdm1fcGFnZXMgKnN2bV9wYWdlcyxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE2NjEtfVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNjYyOkVYUE9SVF9TWU1CT0xfR1BMKGRybV9ncHVzdm1fZ2V0X3BhZ2VzKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTY2My1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM9MTUzMz1pbnQgeGVfc3ZtX3JhbmdlX2dldF9wYWdlcyhzdHJ1Y3QgeGVfdm0gKnZtLCBzdHJ1Y3QgeGVfc3ZtX3JhbmdlICpyYW5nZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTUzNy1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxNTM4Olx0ZXJyID0gZHJtX2dwdXN2bV9nZXRfcGFnZXMoXHUwMDI2dm0tXHUwMDNlc3ZtLmdwdXN2bSwgXHUwMDI2cmFuZ2UtXHUwMDNlcGFnZXMsXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTUzOS1cdFx0XHRcdCAgIHZtLVx1MDAzZXN2bS5ncHVzdm0ubW0sXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3VzZXJwdHIuYz02MD1pbnQgeGVfdm1hX3VzZXJwdHJfcGluX3BhZ2VzKHN0cnVjdCB4ZV91c2VycHRyX3ZtYSAqdXZtYSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdXNlcnB0ci5jLTc2LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3VzZXJwdHIuYzo3NzpcdHJldHVybiBkcm1fZ3B1c3ZtX2dldF9wYWdlcyhcdTAwMjZ2bS1cdTAwM2Vzdm0uZ3B1c3ZtLCBcdTAwMjZ1dm1hLVx1MDAzZXVzZXJwdHIucGFnZXMsXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdXNlcnB0ci5jLTc4LVx0XHRcdFx0ICAgIHV2bWEtXHUwMDNldXNlcnB0ci5ub3RpZmllci5tbSxcbi0tXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg9MzIwPXZvaWQgZHJtX2dwdXN2bV9yYW5nZV9zZXRfdW5tYXBwZWQoc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlLFxuLS1cbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0zMjQtXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6MzI1OmludCBkcm1fZ3B1c3ZtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oLTMyNi1cdFx0XHQgc3RydWN0IGRybV9ncHVzdm1fcGFnZXMgKnN2bV9wYWdlcyxcbi0tXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg9MzM3PXZvaWQgZHJtX2dwdXN2bV9mcmVlX3BhZ2VzKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXG4tLVxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oLTM0Ny0gKiBzdHJ1Y3R1cmUgbXVzdCBjYWxsIHRoaXMgb25jZSBvbiBlYWNoIHBhZ2VzIGluc3RhbmNlIGFmdGVyIGFsbG9jYXRpb24sXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6MzQ4OiAqIGJlZm9yZSB0aGUgZmlyc3QgZHJtX2dwdXN2bV9nZXRfcGFnZXMoKSAvIHVubWFwIC8gZnJlZS5cbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0zNDktICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTE5CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiBEUk0gR1BVIFNWTSBVc2FnZSBpbiBTeXprYWxsZXIgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGRybV9ncHVzdm1fZ2V0X3BhZ2VzYC4gSXQmIzM5O3MgdXNlZCBieSB0aGUgYHhlYCBkcml2ZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gYHhlX3N2bV9yYW5nZV9nZXRfcGFnZXNgIGFuZCBgeGVfdm1hX3VzZXJwdHJfcGluX3BhZ2VzYC4gUmlnaHQsIGBkcm1fZ3B1c3ZtYCBpcyBhIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9uLCBlc3NlbnRpYWxseSBhIERSTS1sZXZlbCBhYnN0cmFjdGlvbiBmb3IgR1BVIFNoYXJlZCBWaXJ0dWFsIE1lbW9yeS4gSXQgc2VlbXMgbGlrZSB0aGUgYHhlYCBkcml2ZXIgaXMgY3VycmVudGx5IHRoZSBwcmltYXJ5IHVzZXIuIEhvbGQgb24gYSBzZWNvbmQsIHdoYXQgYWJvdXQgdGhlIG90aGVyIGRyaXZlcnM/CgpJIG5lZWQgdG8gcXVpY2tseSBjaGVjayB0aGUgbGFuZHNjYXBlLiBgbm91dmVhdV9zdm0uY2AgaW1wbGVtZW50cyBTVk0gZnVuY3Rpb25hbGl0eSBmb3IgdGhlIGBub3V2ZWF1YCBkcml2ZXIuIEFuZCBJIGFsc28gc2VlIGEgc2ltaWxhciBmaWxlIGZvciB0aGUgYW1keGRuYSBkcml2ZXIgYGFpZTJfY3R4LmNgLgoKTm93IHRoZSBxdWVzdGlvbiBpcywgYXJlIGFueSBvZiB0aGVzZSBkcml2ZXJzIHJlYWNoYWJsZSBieSBzeXprYWxsZXI/IGBub3V2ZWF1YCBpcyBhIHRyaWNreSBvbmUuIFN5emthbGxlciAqY2FuKiBmdXp6IGl0IGlmIHlvdSYjMzk7cmUgdXNpbmcgYSB2aXJ0dWFsIEdQVSBvciBzb21lIGtpbmQgb2YgbW9ja2luZyBzZXR1cCwgYnV0IGl0IHR5cGljYWxseSBuZWVkcyByZWFsIGhhcmR3YXJlIHRvIHJlYWxseSB0ZXN0IHRoZSBmdW5jdGlvbmFsaXR5LiBUaGF0JiMzOTtzIGEgaHVnZSBodXJkbGUgdG8gb3ZlcmNvbWUuCgpUaGlua2luZyBhYm91dCBvdGhlciBkcml2ZXJzLCBJIHNlZSBob3cgdGhleSYjMzk7dmUgbWFuYWdlZCB0byBhY2hpZXZlIHNvbWUgbGV2ZWwgb2Ygc3l6a2FsbGVyIGNvdmVyYWdlLCB3aXRoIHRoZSBsaWtlcyBvZiBgc3l6LXVzYmAgYW5kIGB2aGNpYCBmb3IgVVNCIGRldmljZXMsIGBtYWM4MDIxMV9od3NpbWAgZm9yIHdpZmkuIEFuZCB3aXRoaW4gRFJNLCBzeXprYWxsZXIgbGV2ZXJhZ2VzIGB2a21zYCBhbmQgYHZnZW1gIGFzIGEgdmlydHVhbCBkZXZpY2UuCgpCdXQgYHhlYCwgYG5vdXZlYXVgLCBhbmQgYGFtZHhkbmFgIGFyZSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzLiBUaGF0JiMzOTtzIGEgdG91Z2ggY29uc3RyYWludC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGVhc2lseSBhY2Nlc3NpYmxlLgoKT2gsIGFuZCBoZXJlJiMzOTtzIGEgdGhvdWdodCwgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCBpcyBhIGNvcmUgbW0vaG1tIGZ1bmN0aW9uLiBJcyBpdCB1c2VkIGJ5IGFueSBvdGhlciBkcml2ZXJzIGJlc2lkZXMgdGhlIG9uZXMgSSYjMzk7dmUgYWxyZWFkeSBjb25zaWRlcmVkPyBUaGF0IGNvdWxkIHByb3ZpZGUgYSBtb3JlIGdlbmVyYWxpemVkIGVudHJ5IHBvaW50IGZvciBmdXp6aW5nLiBUaGF0JiMzOTtzIHRoZSBrZXk6IGEgbW9yZSBnZW5lcmljIGFjY2VzcyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTE2MD1ub3JtYWwgaW50ZXJmYWNlIGlzOjpcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0xNjEtXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MTYyOiAgaW50IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTE2My0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpO1xuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0xNjk9VGhlIGNhbGxlciBtdXN0IG5vdCBob2xkIGBgbW1hcF9yZWFkX2xvY2tgYCBiZWZvcmUgdGhlIGNhbGwuXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MTcwOmBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgIHRha2VzIHRoZSBtbWFwIHJlYWQgbG9jayBpbnRlcm5hbGx5IGFuZFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTE3MS1hbGxvd3MgYGBoYW5kbGVfbW1fZmF1bHQoKWBgIHRvIGRyb3AgaXQgZHVyaW5nIGZhdWx0IGhhbmRsaW5nLiBUaGlzIGlzIHJlcXVpcmVkXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTE4Nj1UaGUgdXNhZ2UgcGF0dGVybiBpczo6XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTIwMy0gYWdhaW46XG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjA0OiAgICAgIHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNnJhbmdlLCB0aW1lb3V0KTtcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yMDUtICAgICAgaWYgKHJldClcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9MjI4PXVwZGF0ZS4gVGhlIHJldHJ5IGNoZWNrIG11c3QgdXNlIHRoZSBzYW1lIG5vdGlmaWVyIGFuZCBzZXF1ZW5jZSBudW1iZXIgc3RvcmVkXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjI5OmluIGBgcmFuZ2VgYCBieSBgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KClgYC5cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yMzAtXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9MjMxPUhvbGRpbmcgdGhlIG1tYXAgbG9jayBhY3Jvc3MgSE1NIGZhdWx0c1xuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yMzMtXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjM0Ok1vc3QgY2FsbGVycyBzaG91bGQgdXNlIGBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgLiBJZiBhIGRyaXZlclxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTIzNS1yZWFsbHkgbmVlZHMgdG8gaG9sZCB0aGUgbW1hcCBsb2NrIGFjcm9zcyB3b3JrIG91dHNpZGUgSE1NLCBpdCBjYW4gdXNlOjpcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9MjQwPWludGVyZmFjZSBjYW5ub3Qgc3VwcG9ydCBWTUFzIHdob3NlIGZhdWx0IGhhbmRsZXJzIG5lZWQgdG8gZHJvcCB0aGUgbW1hcCBsb2NrLlxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjI0MTpOZXcgY2FsbGVycyBzaG91bGQgcHJlZmVyIGBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgIHVubGVzcyB0aGV5XG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjQyLWhhdmUgYSBzcGVjaWZpYyByZXF1aXJlbWVudCB0byBrZWVwIHRoZSBtbWFwIGxvY2sgaGVsZCBhY3Jvc3MgdGhlIGNhbGwuXG4tLVxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfY3R4LmM9MTAzMT1zdGF0aWMgaW50IGFpZTJfcG9wdWxhdGVfcmFuZ2Uoc3RydWN0IGFtZHhkbmFfZ2VtX29iaiAqYWJvKVxuLS1cbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jLTEwNjQtXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYzoxMDY1Olx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2bWFwcC1cdTAwM2VyYW5nZSwgdGltZW91dCk7XG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYy0xMDY2LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jPTg0MT1lbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgZHJtX2dwdXN2bV9zY2FuX21tKHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg2OC1yZXRyeTpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODY5Olx0ZXJyID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2aG1tX3JhbmdlLCB0aW1lb3V0KTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODcwLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jPTE0NDQ9aW50IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNDkxLVx0aG1tX3JhbmdlLmhtbV9wZm5zID0gcGZucztcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTQ5MjpcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNmhtbV9yYW5nZSwgdGltZW91dCk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE0OTMtXHRtbXB1dChtbSk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz0xNzAzPWludCBkcm1fZ3B1c3ZtX3JhbmdlX2V2aWN0KHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNzI4LVx0aG1tX3JhbmdlLmhtbV9wZm5zID0gcGZucztcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTcyOTpcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNmhtbV9yYW5nZSwgdGltZW91dCk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE3MzAtXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uYz02NTI9c3RhdGljIGludCBub3V2ZWF1X3JhbmdlX2ZhdWx0KHN0cnVjdCBub3V2ZWF1X3N2bW0gKnN2bW0sXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uYy02OTMtXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jOjY5NDpcdFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2cmFuZ2UsIHJlbWFpbmluZyk7XG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jLTY5NS1cdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jPTM5Nj1zdGF0aWMgaW50IG1zaHZfcmVnaW9uX3JhbmdlX2ZhdWx0KHN0cnVjdCBtc2h2X21lbV9yZWdpb24gKnJlZ2lvbixcbi0tXG5kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jLTQxNS1hZ2FpbjpcbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmM6NDE2Olx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2cmFuZ2UsIDApO1xuZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYy00MTctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmM9MzI0PWludCBpYl91bWVtX29kcF9tYXBfZG1hX2FuZF9sb2NrKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHAsIHU2NCB1c2VyX3ZpcnQsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYy0zNjgtcmV0cnk6XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jOjM2OTpcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNnJhbmdlLCB0aW1lb3V0KTtcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmMtMzcwLVx0aWYgKHVubGlrZWx5KHJldCkpXG4tLVxuaW5jbHVkZS9saW51eC9obW0uaD0xMjU9aW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSk7XG5pbmNsdWRlL2xpbnV4L2htbS5oOjEyNjppbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXG5pbmNsdWRlL2xpbnV4L2htbS5oLTEyNy1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTtcbi0tXG5saWIvdGVzdF9obW0uYz0zOTI9c3RhdGljIGludCBkbWlycm9yX3JhbmdlX2ZhdWx0X3VubG9ja2VkKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxuLS1cbmxpYi90ZXN0X2htbS5jLTM5OC1cdHdoaWxlICh0cnVlKSB7XG5saWIvdGVzdF9obW0uYzozOTk6XHRcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KHJhbmdlLCB0aW1lb3V0KTtcbmxpYi90ZXN0X2htbS5jLTQwMC1cdFx0aWYgKHJldClcbi0tXG5tbS9obW0uYz02ODk9c3RhdGljIGludCBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkKHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLCBib29sICpsb2NrZWQpXG4tLVxubW0vaG1tLmMtNzUzLSAqIFRoZSBtbWFwIGxvY2sgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIgYW5kIHdpbGwgcmVtYWluIGhlbGQgb24gcmV0dXJuLlxubW0vaG1tLmM6NzU0OiAqIE5ldyB1c2VycyBzaG91bGQgcHJlZmVyIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KCkgdW5sZXNzIHRoZXlcbm1tL2htbS5jLTc1NS0gKiBzcGVjaWZpY2FsbHkgbmVlZCB0byBrZWVwIHRoZSBtbWFwIGxvY2sgaGVsZCBhY3Jvc3MgdGhlIGNhbGwuIFRoaXMgaGVscGVyXG4tLVxubW0vaG1tLmM9NzYyPUVYUE9SVF9TWU1CT0woaG1tX3JhbmdlX2ZhdWx0KTtcbi0tXG5tbS9obW0uYy03NjQtLyoqXG5tbS9obW0uYzo3NjU6ICogaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQgLSBmYXVsdCBpbiBhIHJhbmdlIHdpdGggYSByZXRyeSB0aW1lb3V0XG5tbS9obW0uYy03NjYtICogQHJhbmdlOlx0YXJndW1lbnQgc3RydWN0dXJlXG4tLVxubW0vaG1tLmMtNzgzLSAqL1xubW0vaG1tLmM6Nzg0OmludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSxcbm1tL2htbS5jLTc4NS1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KVxuLS1cbm1tL2htbS5jLTgyNC19XG5tbS9obW0uYzo4MjU6RVhQT1JUX1NZTUJPTChobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCk7XG5tbS9obW0uYy04MjYtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MjkwND1URVNUX0ZfVElNRU9VVChobW0sIGJlbmNobWFya190aHBfbWlncmF0aW9uLCAxMjApXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMjk2MC0gKiBUZXN0IHRoYXQgSE1NIGNhbiBmYXVsdCBpbiBwYWdlcyBiYWNrZWQgYnkgdXNlcmZhdWx0ZmQgdXNpbmcgdGhlXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoyOTYxOiAqIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KCkgcGF0aCB3aXRoIG5vIHRpbWVvdXQuIFRoaXMgZXhlcmNpc2VzXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yOTYyLSAqIHRoZSBsb2NrLWRyb3AgcmV0cnkgbG9naWMgaW4gdGhlIEhNTSBmcmFtZXdvcmsuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODUzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBkZWx2ZSBpbnRvIHRoaXMuCgoqKkludmVzdGlnYXRpbmcgYSBUaW1lb3V0IGluIHRoZSBITU0gU3lzdGVtKioKCkFscmlnaHQsIHNvIGBsaWIvdGVzdF9obW0uY2AgaXMgdXNpbmcgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YC4gSG1tLCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgdGhpcyBpcyByZWxldmFudCB0byB0aGUgcGF0Y2ggaW4gcXVlc3Rpb24uIFRoZSBpbml0aWFsIGFzc3VtcHRpb24gd291bGQgYmUgYSBkaXJlY3QgY29ubmVjdGlvbiwgYnV0IHdhaXQsIHRoZSBwYXRjaCAqZGlkbiYjMzk7dCogdG91Y2ggZWl0aGVyIGBsaWIvdGVzdF9obW0uY2Agb3IgYGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmNgLiBUaGF0IG1lYW5zIHRoZSBjb25uZWN0aW9uIGlzbiYjMzk7dCBhcyBvYnZpb3VzIGFzIEkgaW5pdGlhbGx5IHRob3VnaHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdGltZW91dCBwYXJhbWV0ZXIgaXMgYmVpbmcgcGFzc2VkIHdpdGhpbiBgbGliL3Rlc3RfaG1tLmNgLiBTbywgSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGF0IHNwZWNpZmljIHRlc3QgZmlsZSB0byBzZWUgaG93IGl0JiMzOTtzIGFjdHVhbGx5IHVzaW5nIHRoZSBgdGltZW91dGAgdmFyaWFibGUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiwgYW5kIGhvcGVmdWxseSwgdGhhdCB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bGliL3Rlc3RfaG1tLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4MDpcdFx0XHRcdGNvbnRpbnVlO1xuIDM4MTpcdFx0XHR9XG4gMzgyOlx0XHRcdGJyZWFrO1xuIDM4MzpcdFx0fVxuIDM4NDpcdFxuIDM4NTpcdFx0cmV0ID0gZG1pcnJvcl9kb19mYXVsdChkbWlycm9yLCByYW5nZSk7XG4gMzg2Olx0XG4gMzg3Olx0XHRtdXRleF91bmxvY2soXHUwMDI2ZG1pcnJvci1cdTAwM2VtdXRleCk7XG4gMzg4Olx0b3V0OlxuIDM4OTpcdFx0cmV0dXJuIHJldDtcbiAzOTA6XHR9XG4gMzkxOlx0XG4gMzkyOlx0c3RhdGljIGludCBkbWlycm9yX3JhbmdlX2ZhdWx0X3VubG9ja2VkKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxuIDM5MzpcdFx0XHRcdFx0XHRzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSxcbiAzOTQ6XHRcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyB0aW1lb3V0KVxuIDM5NTpcdHtcbiAzOTY6XHRcdGludCByZXQ7XG4gMzk3Olx0XG4gMzk4Olx0XHR3aGlsZSAodHJ1ZSkge1xuIDM5OTpcdFx0XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChyYW5nZSwgdGltZW91dCk7XG4gNDAwOlx0XHRcdGlmIChyZXQpXG4gNDAxOlx0XHRcdFx0Z290byBvdXQ7XG4gNDAyOlx0XG4gNDAzOlx0XHRcdG11dGV4X2xvY2soXHUwMDI2ZG1pcnJvci1cdTAwM2VtdXRleCk7XG4gNDA0Olx0XHRcdGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShyYW5nZS1cdTAwM2Vub3RpZmllcixcbiA0MDU6XHRcdFx0XHRcdFx0ICAgIHJhbmdlLVx1MDAzZW5vdGlmaWVyX3NlcSkpIHtcbiA0MDY6XHRcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2ZG1pcnJvci1cdTAwM2VtdXRleCk7XG4gNDA3Olx0XHRcdFx0Y29udGludWU7XG4gNDA4Olx0XHRcdH1cbiA0MDk6XHRcdFx0YnJlYWs7XG4gNDEwOlx0XHR9XG4gNDExOlx0XG4gNDEyOlx0XHRyZXQgPSBkbWlycm9yX2RvX2ZhdWx0KGRtaXJyb3IsIHJhbmdlKTtcbiA0MTM6XHRcbiA0MTQ6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkbWlycm9yLVx1MDAzZW11dGV4KTtcbiA0MTU6XHRvdXQ6XG4gNDE2Olx0XHRyZXR1cm4gcmV0O1xuIDQxNzpcdH1cbiA0MTg6XHRcbiA0MTk6XHRzdGF0aWMgaW50IGRtaXJyb3JfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXG4gNDIwOlx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gNDIxOlx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sIHdyaXRlLFxuIDQyMjpcdFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpXG4gNDIzOlx0e1xuIDQyNDpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBkbWlycm9yLVx1MDAzZW5vdGlmaWVyLm1tO1xuIDQyNTpcdFx0dW5zaWduZWQgbG9uZyBhZGRyO1xuIDQyNjpcdFx0dW5zaWduZWQgbG9uZyBwZm5zWzMyXTtcbiA0Mjc6XHRcdHN0cnVjdCBobW1fcmFuZ2UgcmFuZ2UgPSB7XG4gNDI4Olx0XHRcdC5ub3RpZmllciA9IFx1MDAyNmRtaXJyb3ItXHUwMDNlbm90aWZpZXIsXG4gNDI5Olx0XHRcdC5obW1fcGZucyA9IHBmbnMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NzkyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIGB0aW1lb3V0YCBWYXJpYWJsZSBpbiBgbGliL3Rlc3RfaG1tLmNgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbGliL3Rlc3RfaG1tLmNgIGFuZCBJIGltbWVkaWF0ZWx5IHNwb3QgdGhlIGB0aW1lb3V0YCB2YXJpYWJsZSBiZWluZyBwYXNzZWQgZGlyZWN0bHksIGFuZCB0aGF0IHRyaWdnZXJzIGEgcXVlc3Rpb24uIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgdGhhdCBgdGltZW91dGAgaXMgcGFzc2VkIHJpZ2h0IGludG8gc29tZSBmdW5jdGlvbiBjYWxsLiBCdXQsIHRoZSBxdWVzdGlvbiBub3cgaXMsIHdoZXJlIHRoZSBoZWNrIGlzIHRoaXMgYHRpbWVvdXRgIHZhcmlhYmxlIGJlaW5nICpkZWZpbmVkKj8gSSBuZWVkIHRvIHRyYWNlIGJhY2sgaXRzIG9yaWdpbi4gSXMgaXQgY29taW5nIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUsIGEgY29uZmlndXJhdGlvbiBmaWxlLCBvciBpcyBpdCBoYXJkY29kZWQgc29tZXdoZXJlIHVwc3RyZWFtIGluIHRoZSBidWlsZCBwcm9jZXNzPyBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRoZSBidWlsZCBzeXN0ZW0gKE1ha2VmaWxlLCBDTWFrZUxpc3RzLnR4dCwgd2hhdGV2ZXIpLCBhbmQgYW55IHJlbGV2YW50IGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIHZhbHVlIGZvciBgdGltZW91dGAgaXMgYmVpbmcgc2V0LiBJdCYjMzk7cyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSB0ZXN0JiMzOTtzIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGlmIHRoaXMgdmFsdWUgaXNuJiMzOTt0IHByb3Blcmx5IGNvbnRyb2xsZWQgb3Igc2FuaXRpemVkLiBJdCYjMzk7cyBhIGNsYXNzaWMgZXhhbXBsZSBvZiBsb29raW5nIGZvciB0aGUgc291cmNlIG9mIGEgcGFyYW1ldGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwODowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDE5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MTk6XHRzdGF0aWMgaW50IGRtaXJyb3JfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXG4gNDIwOlx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gNDIxOlx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sIHdyaXRlLFxuIDQyMjpcdFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpXG4gNDIzOlx0e1xuIDQyNDpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBkbWlycm9yLVx1MDAzZW5vdGlmaWVyLm1tO1xuIDQyNTpcdFx0dW5zaWduZWQgbG9uZyBhZGRyO1xuIDQyNjpcdFx0dW5zaWduZWQgbG9uZyBwZm5zWzMyXTtcbiA0Mjc6XHRcdHN0cnVjdCBobW1fcmFuZ2UgcmFuZ2UgPSB7XG4gNDI4Olx0XHRcdC5ub3RpZmllciA9IFx1MDAyNmRtaXJyb3ItXHUwMDNlbm90aWZpZXIsXG4gNDI5Olx0XHRcdC5obW1fcGZucyA9IHBmbnMsXG4gNDMwOlx0XHRcdC5wZm5fZmxhZ3NfbWFzayA9IDAsXG4gNDMxOlx0XHRcdC5kZWZhdWx0X2ZsYWdzID1cbiA0MzI6XHRcdFx0XHRITU1fUEZOX1JFUV9GQVVMVCB8ICh3cml0ZSA/IEhNTV9QRk5fUkVRX1dSSVRFIDogMCksXG4gNDMzOlx0XHRcdC5kZXZfcHJpdmF0ZV9vd25lciA9IGRtaXJyb3ItXHUwMDNlbWRldmljZSxcbiA0MzQ6XHRcdH07XG4gNDM1Olx0XHRpbnQgcmV0ID0gMDtcbiA0MzY6XHRcbiA0Mzc6XHRcdGlmICghbW1nZXRfbm90X3plcm8obW0pKVxuIDQzODpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiA0Mzk6XHRcbiA0NDA6XHRcdGZvciAoYWRkciA9IHN0YXJ0OyBhZGRyIFx1MDAzYyBlbmQ7IGFkZHIgPSByYW5nZS5lbmQpIHtcbiA0NDE6XHRcdFx0cmFuZ2Uuc3RhcnQgPSBhZGRyO1xuIDQ0MjpcdFx0XHRyYW5nZS5lbmQgPSBtaW4oYWRkciAmIzQzOyAoQVJSQVlfU0laRShwZm5zKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCksIGVuZCk7XG4gNDQzOlx0XG4gNDQ0Olx0XHRcdHJldCA9IGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWQoZG1pcnJvciwgXHUwMDI2cmFuZ2UsIHRpbWVvdXQpO1xuIDQ0NTpcdFx0XHRpZiAocmV0KVxuIDQ0NjpcdFx0XHRcdGJyZWFrO1xuIDQ0NzpcdFx0fVxuIDQ0ODpcdFxuIDQ0OTpcdFx0bW1wdXQobW0pO1xuIDQ1MDpcdFx0cmV0dXJuIHJldDtcbiA0NTE6XHR9XG4gNDUyOlx0XG4gNDUzOlx0c3RhdGljIGludCBkbWlycm9yX2ZhdWx0KHN0cnVjdCBkbWlycm9yICpkbWlycm9yLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIDQ1NDpcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCB3cml0ZSlcbiA0NTU6XHR7XG4gNDU2Olx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGRtaXJyb3ItXHUwMDNlbm90aWZpZXIubW07XG4gNDU3Olx0XHR1bnNpZ25lZCBsb25nIGFkZHI7XG4gNDU4Olx0XHR1bnNpZ25lZCBsb25nIHBmbnNbMzJdO1xuIDQ1OTpcdFx0c3RydWN0IGhtbV9yYW5nZSByYW5nZSA9IHtcbiA0NjA6XHRcdFx0Lm5vdGlmaWVyID0gXHUwMDI2ZG1pcnJvci1cdTAwM2Vub3RpZmllcixcbiA0NjE6XHRcdFx0LmhtbV9wZm5zID0gcGZucyxcbiA0NjI6XHRcdFx0LnBmbl9mbGFnc19tYXNrID0gMCxcbiA0NjM6XHRcdFx0LmRlZmF1bHRfZmxhZ3MgPVxuIDQ2NDpcdFx0XHRcdEhNTV9QRk5fUkVRX0ZBVUxUIHwgKHdyaXRlID8gSE1NX1BGTl9SRVFfV1JJVEUgOiAwKSxcbiA0NjU6XHRcdFx0LmRldl9wcml2YXRlX293bmVyID0gZG1pcnJvci1cdTAwM2VtZGV2aWNlLFxuIDQ2NjpcdFx0fTtcbiA0Njc6XHRcdGludCByZXQgPSAwO1xuIDQ2ODpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwODowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTgyNAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKkZpbmRpbmcgdGhlIENhbGxlcnMgb2YgYGRtaXJyb3JfZmF1bHRfdW5sb2NrZWRgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBkbWlycm9yX2ZhdWx0X3VubG9ja2VkYC4gSXQmIzM5O3MgbmFtZWQgaW4gYSB3YXkgdGhhdCBzdWdnZXN0cyBpdCYjMzk7cyByZWxhdGVkIHRvIHNvbWUga2luZCBvZiBkYXRhIG1pcnJvcmluZywgcGVyaGFwcyBhIGZhdWx0IGNvbmRpdGlvbiwgYW5kIHBvc3NpYmx5IHdvcmtpbmcgd2l0aCBhbiB1bmxvY2tlZCBtdXRleC4gVGhlICYjMzQ7dW5sb2NrZWQmIzM0OyBwYXJ0IGlzIGltcG9ydGFudDsgaXQgaW1wbGllcyBhIGNyaXRpY2FsIHNlY3Rpb24gaXMgKm5vdCogcHJvdGVjdGVkIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLCBzbyBjb25jdXJyZW5jeSBjb25zaWRlcmF0aW9ucyBiZWNvbWUgcGFyYW1vdW50LiBGaXJzdCwgSSBuZWVkIHRvIHBpbnBvaW50IGV2ZXJ5d2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBjYWxsZWQgd2l0aGluIHRoZSBjb2RlYmFzZS4gVGhlIHNoZWVyIG51bWJlciBvZiBsb2NhdGlvbnMgd2lsbCBnaXZlIG1lIGEgZ29vZCBpbmRpY2F0aW9uIG9mIHRoaXMgZnVuY3Rpb24mIzM5O3Mgb3ZlcmFsbCBzaWduaWZpY2FuY2UgdG8gdGhlIHNvZnR3YXJlIGFuZCB3aWxsIGhlbHAgbWUgbmFycm93IGRvd24gd2hlcmUgaXQmIzM5O3MgbW9zdCBpbXBvcnRhbnQgdG8gYW5hbHl6ZS4gT25jZSBJIGtub3cgdGhlIGNhbGxpbmcgcG9pbnRzLCBJIGNhbiBzdGFydCBsb29raW5nIGF0IHRoZSBpbW1lZGlhdGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpYyBvcGVyYXRpb25zIGhhcHBlbmluZyBhcm91bmQgdGhhdCBmYXVsdCBoYW5kbGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG1pcnJvcl9mYXVsdF91bmxvY2tlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvdGVzdF9obW0uYz0zOTI9c3RhdGljIGludCBkbWlycm9yX3JhbmdlX2ZhdWx0X3VubG9ja2VkKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxuLS1cbmxpYi90ZXN0X2htbS5jLTQxOC1cbmxpYi90ZXN0X2htbS5jOjQxOTpzdGF0aWMgaW50IGRtaXJyb3JfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXG5saWIvdGVzdF9obW0uYy00MjAtXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubGliL3Rlc3RfaG1tLmM9NTUyPXN0YXRpYyBpbnQgZG1pcnJvcl9yZWFkX3VubG9ja2VkKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxuLS1cbmxpYi90ZXN0X2htbS5jLTU3Ny1cdFx0c3RhcnQgPSBjbWQtXHUwMDNlYWRkciAmIzQzOyAoYm91bmNlLmNwYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG5saWIvdGVzdF9obW0uYzo1Nzg6XHRcdHJldCA9IGRtaXJyb3JfZmF1bHRfdW5sb2NrZWQoZG1pcnJvciwgc3RhcnQsIGVuZCwgZmFsc2UsIHRpbWVvdXQpO1xubGliL3Rlc3RfaG1tLmMtNTc5LVx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwODowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDI4NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIGB0ZXN0X2htbS5jYCBDb251bmRydW0qKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gYGxpYi90ZXN0X2htbS5jYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoYXQgYGRtaXJyb3JfcmVhZF91bmxvY2tlZGAgZnVuY3Rpb24gY2FsbC4gSSByZWNvZ25pemUgdGhhdCBuYW1pbmcgY29udmVudGlvbiwgc28gSSYjMzk7bSB0aGlua2luZyB0aGlzIGxpa2VseSBpbnZvbHZlcyBzb21lIHNvcnQgb2YgZGlyZWN0IG1lbW9yeSBhY2Nlc3MgcmVsYXRlZCB0byBhIG1pcnJvciBvciBkdXBsaWNhdGUgZGF0YSBzdHJ1Y3R1cmUsIGFuZCB0aGUgJiMzNDt1bmxvY2tlZCYjMzQ7IHBhcnQgc3VnZ2VzdHMgd2UmIzM5O3JlIGJ5cGFzc2luZyB0eXBpY2FsIGNvbmN1cnJlbmN5IGNvbnRyb2xzLiBLbm93aW5nIHRoZSBwcm9qZWN0IGFuZCB0aGUgY29udGV4dCBpcyBrZXkgaGVyZSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljcy4gSXMgdGhpcyBhIHJlYWQtb25seSBhY2Nlc3M/IFdoYXQmIzM5O3MgdGhlIGxvY2sgcHJvdGVjdGluZz8gV2hhdOKAmXMgdGhlIGltcGxpY2F0aW9uIG9mIGJ5cGFzc2luZyB0aGUgbG9jaz8gSXMgaXQgZm9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgb3IgaXMgdGhlcmUgYSByZWFzb24gdGhpcyBwYXJ0aWN1bGFyIGNvZGUgc2VjdGlvbiBkb2VzbiYjMzk7dCBuZWVkIHRoZSBsb2NrPyBJIG5lZWQgdG8gYW5hbHl6ZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCB0aGUgcG90ZW50aWFsIHJpc2tzIG9yIGJlbmVmaXRzIG9mIHVzaW5nIHRoaXMgdW5sb2NrZWQgcmVhZC4gTXkgZXhwZXJ0aXNlIHNob3VsZCBhbGxvdyBtZSB0byBzcG90IGFueSByZWQgZmxhZ3MgcmVsYXRlZCB0byBkYXRhIGNvcnJ1cHRpb24sIHJhY2UgY29uZGl0aW9ucywgb3IgdW5leHBlY3RlZCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvdGVzdF9obW0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTUwOlx0fVxuIDU1MTpcdFxuIDU1MjpcdHN0YXRpYyBpbnQgZG1pcnJvcl9yZWFkX3VubG9ja2VkKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxuIDU1MzpcdFx0XHRcdFx0IHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZCxcbiA1NTQ6XHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpXG4gNTU1Olx0e1xuIDU1NjpcdFx0c3RydWN0IGRtaXJyb3JfYm91bmNlIGJvdW5jZTtcbiA1NTc6XHRcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDtcbiA1NTg6XHRcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGNtZC1cdTAwM2VucGFnZXMgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4gNTU5Olx0XHRpbnQgcmV0O1xuIDU2MDpcdFxuIDU2MTpcdFx0c3RhcnQgPSBjbWQtXHUwMDNlYWRkcjtcbiA1NjI6XHRcdGVuZCA9IHN0YXJ0ICYjNDM7IHNpemU7XG4gNTYzOlx0XHRpZiAoZW5kIFx1MDAzYyBzdGFydClcbiA1NjQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTY1Olx0XG4gNTY2Olx0XHRyZXQgPSBkbWlycm9yX2JvdW5jZV9pbml0KFx1MDAyNmJvdW5jZSwgc3RhcnQsIHNpemUpO1xuIDU2NzpcdFx0aWYgKHJldClcbiA1Njg6XHRcdFx0cmV0dXJuIHJldDtcbiA1Njk6XHRcbiA1NzA6XHRcdHdoaWxlICgxKSB7XG4gNTcxOlx0XHRcdG11dGV4X2xvY2soXHUwMDI2ZG1pcnJvci1cdTAwM2VtdXRleCk7XG4gNTcyOlx0XHRcdHJldCA9IGRtaXJyb3JfZG9fcmVhZChkbWlycm9yLCBzdGFydCwgZW5kLCBcdTAwMjZib3VuY2UpO1xuIDU3MzpcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2ZG1pcnJvci1cdTAwM2VtdXRleCk7XG4gNTc0Olx0XHRcdGlmIChyZXQgIT0gLUVOT0VOVClcbiA1NzU6XHRcdFx0XHRicmVhaztcbiA1NzY6XHRcbiA1Nzc6XHRcdFx0c3RhcnQgPSBjbWQtXHUwMDNlYWRkciAmIzQzOyAoYm91bmNlLmNwYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG4gNTc4Olx0XHRcdHJldCA9IGRtaXJyb3JfZmF1bHRfdW5sb2NrZWQoZG1pcnJvciwgc3RhcnQsIGVuZCwgZmFsc2UsIHRpbWVvdXQpO1xuIDU3OTpcdFx0XHRpZiAocmV0KVxuIDU4MDpcdFx0XHRcdGJyZWFrO1xuIDU4MTpcdFx0XHRjbWQtXHUwMDNlZmF1bHRzJiM0MzsmIzQzOztcbiA1ODI6XHRcdH1cbiA1ODM6XHRcbiA1ODQ6XHRcdGlmIChyZXQgPT0gMCkge1xuIDU4NTpcdFx0XHRpZiAoY29weV90b191c2VyKHU2NF90b191c2VyX3B0cihjbWQtXHUwMDNlcHRyKSwgYm91bmNlLnB0cixcbiA1ODY6XHRcdFx0XHRcdCBib3VuY2Uuc2l6ZSkpXG4gNTg3Olx0XHRcdFx0cmV0ID0gLUVGQVVMVDtcbiA1ODg6XHRcdH1cbiA1ODk6XHRcdGNtZC1cdTAwM2VjcGFnZXMgPSBib3VuY2UuY3BhZ2VzO1xuIDU5MDpcdFx0ZG1pcnJvcl9ib3VuY2VfZmluaShcdTAwMjZib3VuY2UpO1xuIDU5MTpcdFx0cmV0dXJuIHJldDtcbiA1OTI6XHR9XG4gNTkzOlx0XG4gNTk0Olx0c3RhdGljIGludCBkbWlycm9yX2RvX3dyaXRlKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIDU5NTpcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IGRtaXJyb3JfYm91bmNlICpib3VuY2UpXG4gNTk2Olx0e1xuIDU5NzpcdFx0dW5zaWduZWQgbG9uZyBwZm47XG4gNTk4Olx0XHR2b2lkICpwdHI7XG4gNTk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjU2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgcHJvbXB0OgoKKipBbmFseXppbmcgdGhlIENhbGwgU2l0ZXMgb2YgYGRtaXJyb3JfcmVhZF91bmxvY2tlZGAqKgoKT2theSwgc28gdGhlIGluaXRpYWwgZGlyZWN0aW9uIGlzIGNsZWFyOiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYGRtaXJyb3JfcmVhZF91bmxvY2tlZGAgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZC4gVGhpcyBpc24mIzM5O3QganVzdCBhYm91dCAqZmluZGluZyogdGhlIGNhbGxzLCBidXQgdW5kZXJzdGFuZGluZyB0aGVpciBjb250ZXh0LiBJJiMzOTttIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgd2hhdCB0aGF0IGZ1bmN0aW9uIGxpa2VseSBkb2VzIGJhc2VkIG9uIGl0cyBuYW1lLiAmIzM0O01pcnJvciwmIzM0OyAmIzM0O3JlYWQsJiMzNDsgYW5kICYjMzQ7dW5sb2NrZWQmIzM0OyBzdWdnZXN0IHRoaXMgaGFzIHRvIGRvIHdpdGggcmVhZGluZyBmcm9tIGEgbWlycm9yZWQgZGF0YSBzdHJ1Y3R1cmUsIGFuZCB0aGUgJiMzNDt1bmxvY2tlZCYjMzQ7IHBhcnQgdGVsbHMgbWUgdGhlcmUmIzM5O3Mgc29tZSBzb3J0IG9mIGNvbmN1cnJlbmN5IGNvbnNpZGVyYXRpb24uIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBhIHJlYWQgb3BlcmF0aW9uIHdoZXJlIGV4Y2x1c2l2ZSBsb2NrcyBhcmVuJiMzOTt0IG5lY2Vzc2FyeS4KCk15IG5leHQgbW92ZSBpcyBwcm9iYWJseSB0byB1c2UgYSBzdGF0aWMgYW5hbHlzaXMgdG9vbCBvciBhIGdvb2Qgb2xkLWZhc2hpb25lZCBncmVwIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBjYWxsIHNpdGVzLiBJIGNhbiB1c2UgdGhlIHRvb2wgdG8gZmluZCBjcm9zcy1yZWZlcmVuY2VzIGZvciB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBJIG5lZWQgdG8gYmUgZWZmaWNpZW50IGhlcmUg4oCTIGEgcXVpY2sgc2VhcmNoIHRvIGdldCBhIGxpc3QsIGFuZCB0aGVuIEkmIzM5O2xsIHN0YXJ0IHRvIGRpZyBkZWVwZXIuIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUga2luZCBvZiBvdXRwdXQgaW4gdGhlIGZvcm0gb2YgYSBsaXN0IG9mIGxpbmVzIG9mIGNvZGUuCgpPbmNlIEkmIzM5O3ZlIGdvdCB0aGF0IGxpc3QsIEkmIzM5O2xsIG5lZWQgdG8gcmFwaWRseSBzY2FuIHRocm91Z2ggZWFjaCBjYWxsIHNpdGUgdG8gYXNzZXNzIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGJlIG1pbmRmdWwgb2YgaG93IHRoZSByZXR1cm4gdmFsdWUgaXMgdXNlZCwgd2hhdCBsb2NrcyBhcmUgaGVsZCAob3Igbm90IGhlbGQpIGFyb3VuZCB0aGUgY2FsbCwgYW5kIHdoYXQga2luZCBvZiBkYXRhIHRoZSBmdW5jdGlvbiBpcyBvcGVyYXRpbmcgb24uIFRoZSBnb2FsIGlzIHRvIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBzeXN0ZW0uIFVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgZmxvdyB3aWxsIGJlIGNydWNpYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RtaXJyb3JfcmVhZF91bmxvY2tlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvdGVzdF9obW0uYz01MTI9c3RhdGljIGludCBkbWlycm9yX3JlYWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZClcbi0tXG5saWIvdGVzdF9obW0uYy01NTEtXG5saWIvdGVzdF9obW0uYzo1NTI6c3RhdGljIGludCBkbWlycm9yX3JlYWRfdW5sb2NrZWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXG5saWIvdGVzdF9obW0uYy01NTMtXHRcdFx0XHQgc3RydWN0IGhtbV9kbWlycm9yX2NtZCAqY21kLFxuLS1cbmxpYi90ZXN0X2htbS5jPTE2MTY9c3RhdGljIGxvbmcgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbmxpYi90ZXN0X2htbS5jLTE2NzgtXHRjYXNlIEhNTV9ETUlSUk9SX1JFQURfVU5MT0NLRUQ6XG5saWIvdGVzdF9obW0uYzoxNjc5Olx0XHRyZXQgPSBkbWlycm9yX3JlYWRfdW5sb2NrZWQoZG1pcnJvciwgXHUwMDI2Y21kLCAwKTtcbmxpYi90ZXN0X2htbS5jLTE2ODAtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwODowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTg2MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLi4uCgoqKkFuYWx5emluZyB0aGUgZG1pcnJvciBLZXJuZWwgTW9kdWxlJiMzOTtzIFRpbWVvdXQgSGFuZGxpbmcqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBkbWlycm9yX3JlYWRfdW5sb2NrZWRgIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGZyb20gYGRtaXJyb3JfZm9wc191bmxvY2tlZF9pb2N0bGAuIEFuZCBoYW5nIG9uLi4udGhlIGB0aW1lb3V0YCBwYXJhbWV0ZXIgcGFzc2VkIHRvIGBkbWlycm9yX3JlYWRfdW5sb2NrZWRgIGlzIHNldCB0byB6ZXJvIGluIHRoYXQgY2FsbCEgVGhhdCYjMzk7cyBhIGJpdCBvZGQuIElmIGB0aW1lb3V0YCBpcyB6ZXJvLCB0aGVuIHRoZSBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIGZ1bmN0aW9uIHdvbiYjMzk7dCBhY3R1YWxseSBiZSB1c2luZyBhbnkgb2YgaXRzIHRpbWVvdXQgbG9naWMsIHdpbGwgaXQ/IEl0JiMzOTtsbCBieXBhc3MgdGhhdCB3aG9sZSB0aW1lb3V0IG1lY2hhbmlzbSBlbnRpcmVseS4KCkkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgaXMgdGhlIG9ubHkgY2FzZSB3aGVyZSBgZG1pcnJvcl9yZWFkX3VubG9ja2VkYCBpcyBjYWxsZWQgZnJvbSBgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsYC4gSSBzaG91bGQgcmVhbGx5IGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBvdGhlciBjYWxscyB3aXRoaW4gYGRtaXJyb3JfZm9wc191bmxvY2tlZF9pb2N0bGAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHNjZW5hcmlvcyBvciBwb3NzaWJsZSBpc3N1ZXMgdGhhdCBtaWdodCBhcmlzZS4gVGhpcyBuZWVkcyBhIGRlZXBlciBkaXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwODowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjcwOlx0XHRjYXNlIEhNTV9ETUlSUk9SX1JFTEVBU0U6XG4xNjcxOlx0XHRcdGRtaXJyb3JfZGV2aWNlX3JlbW92ZV9jaHVua3MoZG1pcnJvci1cdTAwM2VtZGV2aWNlKTtcbjE2NzI6XHRcdFx0cmV0ID0gMDtcbjE2NzM6XHRcdFx0YnJlYWs7XG4xNjc0Olx0XHRjYXNlIEhNTV9ETUlSUk9SX0ZMQUdTOlxuMTY3NTpcdFx0XHRkbWlycm9yLVx1MDAzZWZsYWdzID0gY21kLm5wYWdlcztcbjE2NzY6XHRcdFx0cmV0ID0gMDtcbjE2Nzc6XHRcdFx0YnJlYWs7XG4xNjc4Olx0XHRjYXNlIEhNTV9ETUlSUk9SX1JFQURfVU5MT0NLRUQ6XG4xNjc5Olx0XHRcdHJldCA9IGRtaXJyb3JfcmVhZF91bmxvY2tlZChkbWlycm9yLCBcdTAwMjZjbWQsIDApO1xuMTY4MDpcdFx0XHRicmVhaztcbjE2ODE6XHRcdGRlZmF1bHQ6XG4xNjgyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTY4MzpcdFx0fVxuMTY4NDpcdFx0aWYgKHJldClcbjE2ODU6XHRcdFx0cmV0dXJuIHJldDtcbjE2ODY6XHRcbjE2ODc6XHRcdGlmIChjb3B5X3RvX3VzZXIodWFyZywgXHUwMDI2Y21kLCBzaXplb2YoY21kKSkpXG4xNjg4Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuMTY4OTpcdFxuMTY5MDpcdFx0cmV0dXJuIDA7XG4xNjkxOlx0fVxuMTY5MjpcdFxuMTY5MzpcdHN0YXRpYyBpbnQgZG1pcnJvcl9mb3BzX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuMTY5NDpcdHtcbjE2OTU6XHRcdHVuc2lnbmVkIGxvbmcgYWRkcjtcbjE2OTY6XHRcbjE2OTc6XHRcdGZvciAoYWRkciA9IHZtYS1cdTAwM2V2bV9zdGFydDsgYWRkciBcdTAwM2Mgdm1hLVx1MDAzZXZtX2VuZDsgYWRkciAmIzQzOz0gUEFHRV9TSVpFKSB7XG4xNjk4Olx0XHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuMTY5OTpcdFx0XHRpbnQgcmV0O1xuMTcwMDpcdFxuMTcwMTpcdFx0XHRwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XG4xNzAyOlx0XHRcdGlmICghcGFnZSlcbjE3MDM6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE3MDQ6XHRcbjE3MDU6XHRcdFx0cmV0ID0gdm1faW5zZXJ0X3BhZ2Uodm1hLCBhZGRyLCBwYWdlKTtcbjE3MDY6XHRcdFx0aWYgKHJldCkge1xuMTcwNzpcdFx0XHRcdF9fZnJlZV9wYWdlKHBhZ2UpO1xuMTcwODpcdFx0XHRcdHJldHVybiByZXQ7XG4xNzA5Olx0XHRcdH1cbjE3MTA6XHRcdFx0cHV0X3BhZ2UocGFnZSk7XG4xNzExOlx0XHR9XG4xNzEyOlx0XG4xNzEzOlx0XHRyZXR1cm4gMDtcbjE3MTQ6XHR9XG4xNzE1Olx0XG4xNzE2Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZG1pcnJvcl9mb3BzID0ge1xuMTcxNzpcdFx0Lm9wZW5cdFx0PSBkbWlycm9yX2ZvcHNfb3BlbixcbjE3MTg6XHRcdC5yZWxlYXNlXHQ9IGRtaXJyb3JfZm9wc19yZWxlYXNlLFxuMTcxOTpcdFx0Lm1tYXBcdFx0PSBkbWlycm9yX2ZvcHNfbW1hcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4OTkKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRpbWVvdXQgTWVjaGFuaXNtKioKCk9rYXksIHNvIEkgc2VlIHRoaXMgYHRpbWVvdXQgPSAwYCBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2FpdCwgemVybyBmb3IgYSB0aW1lb3V0PyBUaGF0IHVzdWFsbHkgbWVhbnMgJiMzOTtubyB0aW1lb3V0JiMzOTsgaW4gcHJvZ3JhbW1pbmcuIElzIHRoYXQgY29uc2lzdGVudCBoZXJlPyYjMzQ7IEkgbmVlZCB0byB2ZXJpZnkgdGhpcyBhc3N1bXB0aW9uLiBUaGUga2V5IGlzIHRvIGZpbmQgYWxsIHRoZSBwbGFjZXMgdGhpcyBgdGltZW91dGAgdmFyaWFibGUgaXMgdXNlZCB0byBzZWUgaWYgdGhlIHplcm8gdmFsdWUgYWx3YXlzIHJlcHJlc2VudHMgdGhpcyBzdGF0ZS4gSSBhbSBnb2luZyB0byBzZWUgaWYgdGhlIGNvZGUgaXMgYWN0dWFsbHkgY29uc2lzdGVudCB3aXRoIG15IHVuZGVyc3RhbmRpbmcgb2YgYHRpbWVvdXQgPSAwYCBiZWluZyBhIGZsYWcgZm9yIG5vIHRpbWVvdXQuCgpJJiMzOTtsbCBzcGVjaWZpY2FsbHkgY2hlY2sgd2hlcmUgdGhpcyB2YXJpYWJsZSBpcyBwYXNzZWQgdG8gYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YC4gVGhlIGNvZGUgc25pcHBldCBkb2VzbiYjMzk7dCBnaXZlIG1lIGNvbnRleHQsIHNvIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjb25zdWx0IHRoZSBsYXJnZXIgY29kZWJhc2UuIEkgaGF2ZSBhIGh1bmNoLCBiYXNlZCBvbiB0aGUgZ3JlcCBvdXRwdXQsIHRoYXQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jYCBtaWdodCBiZSByZWxldmFudC4gTGV0IG1lIG9wZW4gdGhhdCBmaWxlIGFuZCBzZWUgaG93IHRoZSB0aW1lb3V0IHZhbHVlIGlzIGFjdHVhbGx5IGJlaW5nIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGF0IGZ1bmN0aW9uIGNhbGwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUgdG8gYmUgY2VydGFpbiBhYm91dCB0aGlzIHRpbWVvdXQgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI5NTA6XHRcdFx0LyogVGVzdCB3aXRob3V0IFRIUCAqL1xuMjk1MTpcdFx0XHRBU1NFUlRfRVEocnVuX21pZ3JhdGlvbl9iZW5jaG1hcmsoc2VsZi1cdTAwM2VmZCwgMCwgdGVzdF9zaXplc1tpXSxcbjI5NTI6XHRcdFx0XHRcdFx0aXRlcmF0aW9ucywgXHUwMDI2cmVndWxhcl9yZXN1bHRzKSwgMCk7XG4yOTUzOlx0XG4yOTU0Olx0XHRcdC8qIFByaW50IHJlc3VsdHMgKi9cbjI5NTU6XHRcdFx0cHJpbnRfYmVuY2htYXJrX3Jlc3VsdHModGVzdF9uYW1lc1tpXSwgdGVzdF9zaXplc1tpXSxcbjI5NTY6XHRcdFx0XHRcdFx0XHUwMDI2dGhwX3Jlc3VsdHMsIFx1MDAyNnJlZ3VsYXJfcmVzdWx0cyk7XG4yOTU3Olx0XHR9XG4yOTU4Olx0fVxuMjk1OTpcdC8qXG4yOTYwOlx0ICogVGVzdCB0aGF0IEhNTSBjYW4gZmF1bHQgaW4gcGFnZXMgYmFja2VkIGJ5IHVzZXJmYXVsdGZkIHVzaW5nIHRoZVxuMjk2MTpcdCAqIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KCkgcGF0aCB3aXRoIG5vIHRpbWVvdXQuIFRoaXMgZXhlcmNpc2VzXG4yOTYyOlx0ICogdGhlIGxvY2stZHJvcCByZXRyeSBsb2dpYyBpbiB0aGUgSE1NIGZyYW1ld29yay5cbjI5NjM6XHQgKi9cbjI5NjQ6XHRzdHJ1Y3QgdWZmZF90aHJlYWRfYXJncyB7XG4yOTY1Olx0XHRpbnQgdWZmZDtcbjI5NjY6XHRcdGludCBzdG9wX2ZkO1xuMjk2NzpcdFx0dm9pZCAqcGFnZV9idWZmZXI7XG4yOTY4Olx0XHR1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZTtcbjI5Njk6XHR9O1xuMjk3MDpcdFxuMjk3MTpcdHN0YXRpYyB2b2lkICp1ZmZkX2hhbmRsZXJfdGhyZWFkKHZvaWQgKmFyZylcbjI5NzI6XHR7XG4yOTczOlx0XHRzdHJ1Y3QgdWZmZF90aHJlYWRfYXJncyAqYXJncyA9IGFyZztcbjI5NzQ6XHRcdHN0cnVjdCB1ZmZkX21zZyBtc2c7XG4yOTc1Olx0XHRzdHJ1Y3QgdWZmZGlvX2NvcHkgY29weTtcbjI5NzY6XHRcdHN0cnVjdCBwb2xsZmQgcG9sbGZkWzJdO1xuMjk3NzpcdFx0aW50IHJldDtcbjI5Nzg6XHRcbjI5Nzk6XHRcdHBvbGxmZFswXS5mZCA9IGFyZ3MtXHUwMDNldWZmZDtcbjI5ODA6XHRcdHBvbGxmZFswXS5ldmVudHMgPSBQT0xMSU47XG4yOTgxOlx0XHRwb2xsZmRbMV0uZmQgPSBhcmdzLVx1MDAzZXN0b3BfZmQ7XG4yOTgyOlx0XHRwb2xsZmRbMV0uZXZlbnRzID0gUE9MTElOO1xuMjk4MzpcdFxuMjk4NDpcdFx0d2hpbGUgKDEpIHtcbjI5ODU6XHRcdFx0cmV0ID0gcG9sbChwb2xsZmQsIDIsIC0xKTtcbjI5ODY6XHRcdFx0aWYgKHJldCBcdTAwM2M9IDApXG4yOTg3Olx0XHRcdFx0YnJlYWs7XG4yOTg4Olx0XHRcdGlmIChwb2xsZmRbMV0ucmV2ZW50cylcbjI5ODk6XHRcdFx0XHRicmVhaztcbjI5OTA6XHRcdFx0aWYgKCEocG9sbGZkWzBdLnJldmVudHMgXHUwMDI2IFBPTExJTikpXG4yOTkxOlx0XHRcdFx0YnJlYWs7XG4yOTkyOlx0XG4yOTkzOlx0XHRcdHJldCA9IHJlYWQoYXJncy1cdTAwM2V1ZmZkLCBcdTAwMjZtc2csIHNpemVvZihtc2cpKTtcbjI5OTQ6XHRcdFx0aWYgKHJldCAhPSBzaXplb2YobXNnKSlcbjI5OTU6XHRcdFx0XHRicmVhaztcbjI5OTY6XHRcbjI5OTc6XHRcdFx0aWYgKG1zZy5ldmVudCAhPSBVRkZEX0VWRU5UX1BBR0VGQVVMVClcbjI5OTg6XHRcdFx0XHRicmVhaztcbjI5OTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM5NDgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBITU0gVGltZW91dCBDaGFuZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCB3YXMgYWJvdXQgYGhtbS10ZXN0cy5jYCBhbmQgdGhhdCBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgdGhhdCBpdCYjMzk7cyBiZWluZyB0ZXN0ZWQgd2l0aG91dCBhbnkgdGltZW91dC4gQnV0IHRoYXQmIzM5O3MganVzdCBhIHRlc3QsIGFuZCB0aGVuIEkgdGhvdWdodCwgJiMzNDtIb2xkIG9uLCBgbGliL3Rlc3RfaG1tLmNgLi4uaXMgdGhhdCBldmVuICpyZWFjaGFibGUqIGluIGEgc3l6a2FsbGVyIGNvbnRleHQ/JiMzNDsKClJpZ2h0LCB5ZXMsIGl0IHNob3VsZCBiZS4gYENPTkZJR19URVNUX0hNTWAgaXMgdHlwaWNhbGx5IGVuYWJsZWQsIGFuZCBzeXprYWxsZXIgKmRvZXMqIGZ1enogdGhlIGB0ZXN0X2htbWAgZGV2aWNlLCB0aG9zZSBgL2Rldi9obW1fZG1pcnJvcipgIHRoaW5ncy4gVGhhdCYjMzk7cyBnb29kLiBCdXQgbm93IEkmIzM5O20gc2VlaW5nIHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIGB0aW1lb3V0YCBwYXJhbWV0ZXIgb3IgcmVsYXRlZCBsb2dpYyBpbiBgYWllMl9jdHguY2AsIGBkcm1fZ3B1c3ZtLmNgLCBhbmQgYG5vdXZlYXVfc3ZtLmNgLCB3aGljaCBhcmUgcmVhbCwgcHJvZHVjdGlvbiBkcml2ZXJzLi4uYW5kIHRoYXQmIzM5O3MgdGhlIGtleS4KClRoZSBwYXRjaCAqZG9lc24mIzM5O3QqIHRvdWNoIGBsaWIvdGVzdF9obW0uY2AsIHNvIHdoYXRldmVyJiMzOTtzIGhhcHBlbmluZyB3aXRoIHRoZSB0aW1lb3V0IGNoYW5nZSBpc24mIzM5O3QgZGlyZWN0bHkgYWZmZWN0aW5nIHRoYXQgdGVzdC4gT2theSwgbGV0JiMzOTtzIGdvIGJhY2sgYW5kIGxvb2sgYXQgdGhlIGRpZmYgY2xvc2VseSBhZ2Fpbi4gTmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoZXNlIGNoYW5nZXMgYXJlIGJlaW5nIG1hZGUgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggc3l6a2FsbGVyJiMzOTtzIGNvdmVyYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwODowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9MTYwPW5vcm1hbCBpbnRlcmZhY2UgaXM6OlxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTE2MS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoxNjI6ICBpbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMTYzLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCk7XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTE2OT1UaGUgY2FsbGVyIG11c3Qgbm90IGhvbGQgYGBtbWFwX3JlYWRfbG9ja2BgIGJlZm9yZSB0aGUgY2FsbC5cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoxNzA6YGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpYGAgdGFrZXMgdGhlIG1tYXAgcmVhZCBsb2NrIGludGVybmFsbHkgYW5kXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMTcxLWFsbG93cyBgYGhhbmRsZV9tbV9mYXVsdCgpYGAgdG8gZHJvcCBpdCBkdXJpbmcgZmF1bHQgaGFuZGxpbmcuIFRoaXMgaXMgcmVxdWlyZWRcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9MTg2PVRoZSB1c2FnZSBwYXR0ZXJuIGlzOjpcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjAzLSBhZ2FpbjpcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoyMDQ6ICAgICAgcmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2cmFuZ2UsIHRpbWVvdXQpO1xuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTIwNS0gICAgICBpZiAocmV0KVxuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yMjg9dXBkYXRlLiBUaGUgcmV0cnkgY2hlY2sgbXVzdCB1c2UgdGhlIHNhbWUgbm90aWZpZXIgYW5kIHNlcXVlbmNlIG51bWJlciBzdG9yZWRcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoyMjk6aW4gYGByYW5nZWBgIGJ5IGBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgLlxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTIzMC1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yMzE9SG9sZGluZyB0aGUgbW1hcCBsb2NrIGFjcm9zcyBITU0gZmF1bHRzXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTIzMy1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoyMzQ6TW9zdCBjYWxsZXJzIHNob3VsZCB1c2UgYGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpYGAuIElmIGEgZHJpdmVyXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjM1LXJlYWxseSBuZWVkcyB0byBob2xkIHRoZSBtbWFwIGxvY2sgYWNyb3NzIHdvcmsgb3V0c2lkZSBITU0sIGl0IGNhbiB1c2U6OlxuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yNDA9aW50ZXJmYWNlIGNhbm5vdCBzdXBwb3J0IFZNQXMgd2hvc2UgZmF1bHQgaGFuZGxlcnMgbmVlZCB0byBkcm9wIHRoZSBtbWFwIGxvY2suXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjQxOk5ldyBjYWxsZXJzIHNob3VsZCBwcmVmZXIgYGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpYGAgdW5sZXNzIHRoZXlcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yNDItaGF2ZSBhIHNwZWNpZmljIHJlcXVpcmVtZW50IHRvIGtlZXAgdGhlIG1tYXAgbG9jayBoZWxkIGFjcm9zcyB0aGUgY2FsbC5cbi0tXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYz0xMDMxPXN0YXRpYyBpbnQgYWllMl9wb3B1bGF0ZV9yYW5nZShzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICphYm8pXG4tLVxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfY3R4LmMtMTA2NC1cbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jOjEwNjU6XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZtYXBwLVx1MDAzZXJhbmdlLCB0aW1lb3V0KTtcbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jLTEwNjYtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM9ODQxPWVudW0gZHJtX2dwdXN2bV9zY2FuX3Jlc3VsdCBkcm1fZ3B1c3ZtX3NjYW5fbW0oc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODY4LXJldHJ5OlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4Njk6XHRlcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZobW1fcmFuZ2UsIHRpbWVvdXQpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NzAtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM9MTQ0ND1pbnQgZHJtX2dwdXN2bV9nZXRfcGFnZXMoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE0OTEtXHRobW1fcmFuZ2UuaG1tX3BmbnMgPSBwZm5zO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNDkyOlx0ZXJyID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2aG1tX3JhbmdlLCB0aW1lb3V0KTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTQ5My1cdG1tcHV0KG1tKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jPTE3MDM9aW50IGRybV9ncHVzdm1fcmFuZ2VfZXZpY3Qoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE3MjgtXHRobW1fcmFuZ2UuaG1tX3BmbnMgPSBwZm5zO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNzI5Olx0ZXJyID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2aG1tX3JhbmdlLCB0aW1lb3V0KTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTczMC1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jPTY1Mj1zdGF0aWMgaW50IG5vdXZlYXVfcmFuZ2VfZmF1bHQoc3RydWN0IG5vdXZlYXVfc3ZtbSAqc3ZtbSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jLTY5My1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmM6Njk0Olx0XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZyYW5nZSwgcmVtYWluaW5nKTtcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmMtNjk1LVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmM9Mzk2PXN0YXRpYyBpbnQgbXNodl9yZWdpb25fcmFuZ2VfZmF1bHQoc3RydWN0IG1zaHZfbWVtX3JlZ2lvbiAqcmVnaW9uLFxuLS1cbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmMtNDE1LWFnYWluOlxuZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYzo0MTY6XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZyYW5nZSwgMCk7XG5kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jLTQxNy1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYz0zMjQ9aW50IGliX3VtZW1fb2RwX21hcF9kbWFfYW5kX2xvY2soc3RydWN0IGliX3VtZW1fb2RwICp1bWVtX29kcCwgdTY0IHVzZXJfdmlydCxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jLTM2OC1yZXRyeTpcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmM6MzY5Olx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2cmFuZ2UsIHRpbWVvdXQpO1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYy0zNzAtXHRpZiAodW5saWtlbHkocmV0KSlcbi0tXG5pbmNsdWRlL2xpbnV4L2htbS5oPTEyNT1pbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKTtcbmluY2x1ZGUvbGludXgvaG1tLmg6MTI2OmludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSxcbmluY2x1ZGUvbGludXgvaG1tLmgtMTI3LVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpO1xuLS1cbmxpYi90ZXN0X2htbS5jPTM5Mj1zdGF0aWMgaW50IGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXG4tLVxubGliL3Rlc3RfaG1tLmMtMzk4LVx0d2hpbGUgKHRydWUpIHtcbmxpYi90ZXN0X2htbS5jOjM5OTpcdFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQocmFuZ2UsIHRpbWVvdXQpO1xubGliL3Rlc3RfaG1tLmMtNDAwLVx0XHRpZiAocmV0KVxuLS1cbm1tL2htbS5jPTY4OT1zdGF0aWMgaW50IGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsIGJvb2wgKmxvY2tlZClcbi0tXG5tbS9obW0uYy03NTMtICogVGhlIG1tYXAgbG9jayBtdXN0IGJlIGhlbGQgYnkgdGhlIGNhbGxlciBhbmQgd2lsbCByZW1haW4gaGVsZCBvbiByZXR1cm4uXG5tbS9obW0uYzo3NTQ6ICogTmV3IHVzZXJzIHNob3VsZCBwcmVmZXIgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKSB1bmxlc3MgdGhleVxubW0vaG1tLmMtNzU1LSAqIHNwZWNpZmljYWxseSBuZWVkIHRvIGtlZXAgdGhlIG1tYXAgbG9jayBoZWxkIGFjcm9zcyB0aGUgY2FsbC4gVGhpcyBoZWxwZXJcbi0tXG5tbS9obW0uYz03NjI9RVhQT1JUX1NZTUJPTChobW1fcmFuZ2VfZmF1bHQpO1xuLS1cbm1tL2htbS5jLTc2NC0vKipcbm1tL2htbS5jOjc2NTogKiBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCAtIGZhdWx0IGluIGEgcmFuZ2Ugd2l0aCBhIHJldHJ5IHRpbWVvdXRcbm1tL2htbS5jLTc2Ni0gKiBAcmFuZ2U6XHRhcmd1bWVudCBzdHJ1Y3R1cmVcbi0tXG5tbS9obW0uYy03ODMtICovXG5tbS9obW0uYzo3ODQ6aW50IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLFxubW0vaG1tLmMtNzg1LVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpXG4tLVxubW0vaG1tLmMtODI0LX1cbm1tL2htbS5jOjgyNTpFWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KTtcbm1tL2htbS5jLTgyNi1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz0yOTA0PVRFU1RfRl9USU1FT1VUKGhtbSwgYmVuY2htYXJrX3RocF9taWdyYXRpb24sIDEyMClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yOTYwLSAqIFRlc3QgdGhhdCBITU0gY2FuIGZhdWx0IGluIHBhZ2VzIGJhY2tlZCBieSB1c2VyZmF1bHRmZCB1c2luZyB0aGVcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjI5NjE6ICogaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKSBwYXRoIHdpdGggbm8gdGltZW91dC4gVGhpcyBleGVyY2lzZXNcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTI5NjItICogdGhlIGxvY2stZHJvcCByZXRyeSBsb2dpYyBpbiB0aGUgSE1NIGZyYW1ld29yay5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2MDcKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAgaW4gSW5maW5pYmFuZCYjMzk7cyBPRFAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgaGl0IGEgcG9pbnQgd2hlcmUgSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgSW5maW5pYmFuZCBjb2RlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBob3cgdGhlIE9EUCAoT24gRGVtYW5kIFBhZ2luZykgZnVuY3Rpb25hbGl0eSBpcyBpbXBsZW1lbnRlZC4gTXkgaW5pdGlhbCBjb25jZXJuIHN0ZW1tZWQgZnJvbSBzZWVpbmcgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCB1c2VkIGluIGBkcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jYC4gVGhpcyBmdW5jdGlvbiBuYW1lIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIEl0IHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbWVtb3J5IGZhdWx0cyBvciBwYWdlIGZhdWx0cyB3aXRoaW4gdGhlIHVzZXIgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgT0RQLiBUaGUgJiMzNDt1bmxvY2tlZCYjMzQ7IHBhcnQgbWVhbnMgdGhpcyBwcm9iYWJseSBoYXBwZW5zIHdpdGhvdXQgYSBsb2NrIGhlbGQsIHdoaWNoIGlzIHNpZ25pZmljYW50IGZyb20gYSBjb25jdXJyZW5jeSBhbmQgcGVyZm9ybWFuY2UgcGVyc3BlY3RpdmUuIEdpdmVuIG15IGV4cGVydGlzZSBpbiB0aGlzIGRvbWFpbiwgbXkgbmV4dCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgY29kZSBpbiBgZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuY2AgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgbWVjaGFuaWNzIG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHNjZW5hcmlvcyBsZWFkIHRvIHRoaXMgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIHJlZ2FyZGluZyBlcnJvciBoYW5kbGluZywgcGVyZm9ybWFuY2UgYW5kIHJhY2UgY29uZGl0aW9ucyB3aXRoaW4gdGhlIE9EUCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIHBvdGVudGlhbCB0aW1lb3V0IHNpdHVhdGlvbnMgaW4gcmVsYXRpb24gdG8gdGhlIG1lbW9yeSBmYXVsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzUwOlx0XHRcdGdvdG8gb3V0X3B1dF90YXNrO1xuIDM1MTpcdFx0fVxuIDM1MjpcdFxuIDM1MzpcdFx0cmFuZ2Uubm90aWZpZXIgPSBcdTAwMjZ1bWVtX29kcC1cdTAwM2Vub3RpZmllcjtcbiAzNTQ6XHRcdHJhbmdlLnN0YXJ0ID0gQUxJR05fRE9XTih1c2VyX3ZpcnQsIDFVTCBcdTAwM2NcdTAwM2MgcGFnZV9zaGlmdCk7XG4gMzU1Olx0XHRyYW5nZS5lbmQgPSBBTElHTih1c2VyX3ZpcnQgJiM0MzsgYmNudCwgMVVMIFx1MDAzY1x1MDAzYyBwYWdlX3NoaWZ0KTtcbiAzNTY6XHRcdHBmbl9zdGFydF9pZHggPSAocmFuZ2Uuc3RhcnQgLSBpYl91bWVtX3N0YXJ0KHVtZW1fb2RwKSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gMzU3Olx0XHRudW1fcGZucyA9IChyYW5nZS5lbmQgLSByYW5nZS5zdGFydCkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gMzU4Olx0XHRpZiAoZmF1bHQpIHtcbiAzNTk6XHRcdFx0cmFuZ2UuZGVmYXVsdF9mbGFncyA9IEhNTV9QRk5fUkVRX0ZBVUxUO1xuIDM2MDpcdFxuIDM2MTpcdFx0XHRpZiAoYWNjZXNzX21hc2sgXHUwMDI2IEhNTV9QRk5fV1JJVEUpXG4gMzYyOlx0XHRcdFx0cmFuZ2UuZGVmYXVsdF9mbGFncyB8PSBITU1fUEZOX1JFUV9XUklURTtcbiAzNjM6XHRcdH1cbiAzNjQ6XHRcbiAzNjU6XHRcdHJhbmdlLmhtbV9wZm5zID0gXHUwMDI2KHVtZW1fb2RwLVx1MDAzZW1hcC5wZm5fbGlzdFtwZm5fc3RhcnRfaWR4XSk7XG4gMzY2Olx0XHR0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbiAzNjc6XHRcbiAzNjg6XHRyZXRyeTpcbiAzNjk6XHRcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNnJhbmdlLCB0aW1lb3V0KTtcbiAzNzA6XHRcdGlmICh1bmxpa2VseShyZXQpKVxuIDM3MTpcdFx0XHRnb3RvIG91dF9wdXRfbW07XG4gMzcyOlx0XG4gMzczOlx0XHRzdGFydF9pZHggPSAocmFuZ2Uuc3RhcnQgLSBpYl91bWVtX3N0YXJ0KHVtZW1fb2RwKSkgXHUwMDNlXHUwMDNlIHBhZ2Vfc2hpZnQ7XG4gMzc0Olx0XHRkbWFfaW5kZXggPSBzdGFydF9pZHg7XG4gMzc1Olx0XG4gMzc2Olx0XHRtdXRleF9sb2NrKFx1MDAyNnVtZW1fb2RwLVx1MDAzZXVtZW1fbXV0ZXgpO1xuIDM3NzpcdFx0aWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KFx1MDAyNnVtZW1fb2RwLVx1MDAzZW5vdGlmaWVyLCByYW5nZS5ub3RpZmllcl9zZXEpKSB7XG4gMzc4Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZ1bWVtX29kcC1cdTAwM2V1bWVtX211dGV4KTtcbiAzNzk6XHRcdFx0Z290byByZXRyeTtcbiAzODA6XHRcdH1cbiAzODE6XHRcbiAzODI6XHRcdGZvciAocGZuX2luZGV4ID0gMDsgcGZuX2luZGV4IFx1MDAzYyBudW1fcGZucztcbiAzODM6XHRcdFx0cGZuX2luZGV4ICYjNDM7PSAxIFx1MDAzY1x1MDAzYyAocGFnZV9zaGlmdCAtIFBBR0VfU0hJRlQpLCBkbWFfaW5kZXgmIzQzOyYjNDM7KSB7XG4gMzg0Olx0XG4gMzg1Olx0XHRcdC8qXG4gMzg2Olx0XHRcdCAqIFNpbmNlIHdlIGFza2VkIGZvciBobW1fcmFuZ2VfZmF1bHQoKSB0byBwb3B1bGF0ZVxuIDM4NzpcdFx0XHQgKiBwYWdlcyBpdCBzaG91bGRuJiMzOTt0IHJldHVybiBhbiBlcnJvciBlbnRyeSBvbiBzdWNjZXNzLlxuIDM4ODpcdFx0XHQgKi9cbiAzODk6XHRcdFx0V0FSTl9PTihmYXVsdCBcdTAwMjZcdTAwMjYgcmFuZ2UuaG1tX3BmbnNbcGZuX2luZGV4XSBcdTAwMjYgSE1NX1BGTl9FUlJPUik7XG4gMzkwOlx0XHRcdFdBUk5fT04oZmF1bHQgXHUwMDI2XHUwMDI2ICEocmFuZ2UuaG1tX3BmbnNbcGZuX2luZGV4XSBcdTAwMjYgSE1NX1BGTl9WQUxJRCkpO1xuIDM5MTpcdFx0XHRpZiAoIShyYW5nZS5obW1fcGZuc1twZm5faW5kZXhdIFx1MDAyNiBITU1fUEZOX1ZBTElEKSlcbiAzOTI6XHRcdFx0XHRjb250aW51ZTtcbiAzOTM6XHRcbiAzOTQ6XHRcdFx0aWYgKHJhbmdlLmhtbV9wZm5zW3Bmbl9pbmRleF0gXHUwMDI2IEhNTV9QRk5fRE1BX01BUFBFRClcbiAzOTU6XHRcdFx0XHRjb250aW51ZTtcbiAzOTY6XHRcbiAzOTc6XHRcdFx0aG1tX29yZGVyID0gaG1tX3Bmbl90b19tYXBfb3JkZXIocmFuZ2UuaG1tX3BmbnNbcGZuX2luZGV4XSk7XG4gMzk4Olx0XHRcdC8qIElmIGEgaHVnZXBhZ2Ugd2FzIGRldGVjdGVkIGFuZCBPRFAgd2FzbiYjMzk7dCBzZXQgZm9yLCB0aGUgdW1lbVxuIDM5OTpcdFx0XHQgKiBwYWdlX3NoaWZ0IHdpbGwgYmUgdXNlZCwgdGhlIG9wcG9zaXRlIGNhc2UgaXMgYW4gZXJyb3IuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3OTIwCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVGltZW91dCBQYXRjaCBhbmQgUmVhY2hhYmlsaXR5IGluIFN5emthbGxlcioqCgpPa2F5LCBzbyB0aGUgcGF0Y2ggaXMgYWJvdXQgZW5zdXJpbmcgY29uc2lzdGVudCB0aW1lb3V0IGhhbmRsaW5nIHVzaW5nIGBtc2Vjc190b19qaWZmaWVzYCBhY3Jvc3Mgc2V2ZXJhbCBkcml2ZXJzLCBhbmQgSSBzZWUgdGhhdCBgZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuY2AgYWxyZWFkeSBpbXBsZW1lbnRzIHRoaXMgY29ycmVjdGx5LiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpcyBjb3JyZWN0aW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBgYWllMl9jdHguY2AsIGBkcm1fZ3B1c3ZtLmNgLCBhbmQgYG5vdXZlYXVfc3ZtLmNgIHRvIG1hdGNoLiAKClRoZSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHF1aWNrbHkgYXNzZXNzIGB1bWVtX29kcC5jYCBhcyBhbiBlbnRyeSBwb2ludCBzaW5jZSB0aGF0IGxpdmVzIGluIHRoZSBJbmZpbmliYW5kIHN1YnN5c3RlbSB3aGljaCAqaXMqIGtub3duIHRvIGJlIHJlYWNoYWJsZSB0aHJvdWdoIGByZG1hYCBpbiBzeXprYWxsZXIuIEhvd2V2ZXIsIHNpbmNlIHRoZSBwYXRjaCBkb2VzICpub3QqIG1vZGlmeSBgdW1lbV9vZHAuY2AsIHRoYXQmIzM5O3Mgbm90IHRoZSByZWxldmFudCBlbnRyeSBwb2ludCBoZXJlLgoKVGhlIHJlYWwgcXVlc3Rpb24gYmVjb21lczogYXJlIHRoZSBhZmZlY3RlZCBkcml2ZXJzIOKAkyBgYWllMl9jdHguY2AsIGBkcm1fZ3B1c3ZtLmNgLCBhbmQgYG5vdXZlYXVfc3ZtLmNgIOKAkyByZWFjaGFibGUgaW4gc3l6a2FsbGVyPyBMZXQmIzM5O3MgYnJlYWsgdGhlbSBkb3duOgoKKiAgIGBhaWUyX2N0eC5jYDogYGRyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jYCDigJMgVGhpcyByZXF1aXJlcyBBTUQgWEROQSBoYXJkd2FyZS4KKiAgIGBkcm1fZ3B1c3ZtLmNgOiBgZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY2Ag4oCTIFRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZyBzaW5jZSB0aGlzIHVzZXMgdGhlIGBDT05GSUdfRFJNX0dQVVNWTWAgd2hpY2ggaXMgc2VsZWN0ZWQgYnkgYERSTV9YRWAuCiogICBgbm91dmVhdV9zdm0uY2A6IGBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jYCDigJMgVGhpcyByZXF1aXJlcyBOVklESUEgaGFyZHdhcmUuCgpOb3csIGNoZWNraW5nIHRoZSBjb25maWcsIGBkcm1fZ3B1c3ZtLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19EUk1fR1BVU1ZNYCBpcyBlbmFibGVkIGFuZCBpcyBzZWxlY3RlZCBieSBgRFJNX1hFYC4gVGhlIGBEUk1fWEVgIGNvbmZpZyByZXF1aXJlcyBQQ0kgaGFyZHdhcmUgd2hpY2ggaXMsIGFzIGV4cGVjdGVkLCB0aGUgSW50ZWwgWGUgaGFyZHdhcmUuIEJ1dCBzeXprYWxsZXIgZG9lc24mIzM5O3QgaGF2ZSBJbnRlbCBYZSBoYXJkd2FyZSBpbiBpdHMgVk1zLiBUaGUgc2FtZSBhcHBsaWVzIGZvciBOb3V2ZWF1IChOVklESUEpIGFuZCBBTUQgWEROQSBoYXJkd2FyZS4KClNvLCBpdCBkb2VzbiYjMzk7dCBsb29rIGxpa2Ugd2UmIzM5O3JlIGRpcmVjdGx5IHJlYWNoaW5nIGBkcm1fZ3B1c3ZtLmNgIChhbmQgdGh1cyB0aGUgZml4KSB0aHJvdWdoIGhhcmR3YXJlLWRlcGVuZGVudCBjb25maWd1cmF0aW9ucy4gSG93ZXZlciwgd2FpdCBhIG1pbnV0ZSwgYGRybV9ncHVzdm0uY2AgaXMgYSBnZW5lcmljIGhlbHBlci4gSXMgaXQgdXNlZCBieSBhbnl0aGluZyBlbHNlPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBDT05GSUdfRFJNX0dQVVNWTWAgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBvdGhlciByb3V0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IERSTV9HUFVTVk0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWc9Mj1jb25maWcgRFJNX1hFXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWctNDEtXHRzZWxlY3QgRFJNX0VYRUNcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnOjQyOlx0c2VsZWN0IERSTV9HUFVTVk0gaWYgIVVNTFxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWctNDMtXHRzZWxlY3QgRFJNX0dQVVZNXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWc9Nzk9Y29uZmlnIERSTV9YRV9HUFVTVk1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZy04NS1cdHNlbGVjdCBERVZJQ0VfUFJJVkFURVxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWc6ODY6XHRzZWxlY3QgRFJNX0dQVVNWTVxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWctODctXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MTgyCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIERSTV9YRSBhbmQgRFJNX0dQVVNWTSBSZWxhdGlvbnNoaXAqKgoKUmlnaHQsIGxldCBtZSBzZWUuLi4gSXQgbG9va3MgbGlrZSBvbmx5IGBEUk1fWEVgIGlzIGN1cnJlbnRseSBsZXZlcmFnaW5nIGBEUk1fR1BVU1ZNYC4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4gTm93LCBhIGNydWNpYWwgcXVlc3Rpb24gYXJpc2VzOiBjYW4gYERSTV9YRWAgYmUgYWNjZXNzZWQgb3IgdGVzdGVkIHdpdGhvdXQgYWN0dWFsIGhhcmR3YXJlIHByZXNlbnQ/IFRoaXMgaXMgaW1wb3J0YW50IGZvciBkZXZlbG9wbWVudCBhbmQgQ0kuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIGEgbW9jayBvciB2aXJ0dWFsIGRldmljZSBpbXBsZW1lbnRhdGlvbiBhc3NvY2lhdGVkIHdpdGggYERSTV9YRWAuIElmIHRoZXJlIGlzLCB0aGF0IG9wZW5zIHVwIGEgd2hvbGUgcmFuZ2Ugb2YgcG9zc2liaWxpdGllcyBmb3IgZWZmaWNpZW50IHRlc3RpbmcgYW5kIGRlYnVnZ2luZyBpbiBlbnZpcm9ubWVudHMgd2hlcmUgcGh5c2ljYWwgaGFyZHdhcmUgbWlnaHQgbm90IGJlIHJlYWRpbHkgYXZhaWxhYmxlIG9yIGNvbnZlbmllbnQuIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCBzZWUgaWYgd2UgY2FuIGZpbmQgdGhvc2UgY29tcG9uZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZV9tb2NrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0MzIKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBIYXJkd2FyZSBFbXVsYXRpb24gZm9yIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gYXBwcm9hY2ggdGhpcyBwYXRjaC4gRmlyc3QsIEkmIzM5O20gdGhpbmtpbmcsIGNhbiBJIHRyaWdnZXIgdGhpcyBgRFJNX1hFYCBiZWhhdmlvciB0aHJvdWdoIGEgdmlydHVhbCBQQ0kgZGV2aWNlPyBObyBkaWNlLCBzeXprYWxsZXIgZG9lc24mIzM5O3QgZW11bGF0ZSB0aG9zZSBJbnRlbCBYZSBHUFVzLiBBbHJpZ2h0LCBzdHJpa2UgdGhhdC4gV2hhdCBhYm91dCBgbm91dmVhdWAsIHRoZSBOVklESUEgZHJpdmVyPyBOb3BlLCBzeXprYWxsZXIgZG9lc24mIzM5O3QgaGFuZGxlIE5WSURJQSBlaXRoZXIuIFNob290LCBub3QgYGFtZHhkbmFgIGVpdGhlci4gU3l6a2FsbGVyIGlzIHJlYWxseSBsaW1pdGVkIGluIHRlcm1zIG9mIEdQVSBlbXVsYXRpb24uCgpIbW0sIHdhaXQgYSBzZWNvbmQuIFRoaXMgcGF0Y2ggdG91Y2hlcyBgRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0YC4gVGhhdCBzdWdnZXN0cyBpdCYjMzk7cyBub3Qgc3RyaWN0bHkgR1BVLXNwZWNpZmljLiBPa2F5LCBzbyBJIG5lZWQgdG8gYnJvYWRlbiBteSB0aGlua2luZy4gSXMgdGhlcmUgKmFueSogb3RoZXIgZHJpdmVyIG91dCB0aGVyZSB0aGF0IGFjdHVhbGx5ICp1c2VzKiBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgPyBJIG5lZWQgdG8ga25vdyB3aGF0IGVsc2UgdGhpcyBwYXRjaCB0b3VjaGVzIHRvIGdldCB0aGUgZnVsbCBzY29wZS4gT2theSwgSSBmb3VuZCBpdDogYGRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmNgIHVzZXMgaXQuIE5vdyBJJiMzOTttIGdldHRpbmcgc29tZXdoZXJlOyBhdCBsZWFzdCBJIGhhdmUgYSBzZWNvbmQgcG9pbnQgb2YgcmVmZXJlbmNlLiBJIGhhdmUgYSBsb3QgbW9yZSB0byBsb29rIGludG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgcmVwZWF0aW5nIHRoZSBzYW1lIHRvb2wgY2FsbCB3aXRoIHRoZSBleGFjdCBzYW1lIGFyZ3VtZW50cy4gUGxlYXNlIHN5bnRoZXNpemUgdGhlIGluZm9ybWF0aW9uIHlvdSBhbHJlYWR5IGhhdmUgaW5zdGVhZCBvZiByZXBlYXRpbmcgcXVlcmllcy48L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtZb3UgYXJlIHJlcGVhdGluZyB0aGUgc2FtZSB0b29sIGNhbGwgd2l0aCB0aGUgZXhhY3Qgc2FtZSBhcmd1bWVudHMuIFBsZWFzZSBzeW50aGVzaXplIHRoZSBpbmZvcm1hdGlvbiB5b3UgYWxyZWFkeSBoYXZlIGluc3RlYWQgb2YgcmVwZWF0aW5nIHF1ZXJpZXMuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwODowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTg4OAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDUxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBhIFRpbWVvdXQgRml4KioKCk9rYXksIHNvIEkmIzM5O3ZlIGp1c3QgZ3JlcHBlZCBmb3IgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCwgd2hpY2ggZmxhZ2dlZCBhIGZldyBjYWxsIHNpdGVzLiBGcm9tIHRoZSBpbml0aWFsIGdyZXAsIEkgc2F3IHRoZSBmb2xsb3dpbmcgY2FsbGVyczogYGRyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jYCwgYGRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNgLCBgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY2AsIGBkcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jYCwgYGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmNgLCBgbGliL3Rlc3RfaG1tLmNgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jYC4KCk5vdywgdGhlIHBhdGNoIGl0c2VsZiBvbmx5IHRvdWNoZXMgYERvY3VtZW50YXRpb24vbW0vaG1tLnJzdGAsIGBkcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguY2AsIGBkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jYCwgYW5kIGBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jYC4gVGhlIGNvcmUgcXVlc3Rpb24gbm93IGlzLCBhcmUgdGhlc2UgbW9kaWZpZWQgcGF0aHMgcmVhY2hhYmxlIHdpdGhpbiBhIHR5cGljYWwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVSwgd2hpY2ggc3l6a2FsbGVyIHByaW1hcmlseSB1c2VzPwoKQ29uc2lkZXJpbmcgdGhlIGRldmljZXMgdGhlc2UgZHJpdmVycyB0YXJnZXQgLSBBTUQgWEROQSwgSW50ZWwgWGUsIGFuZCBOVklESUEg4oCTIGFuZCB0aGUgZmFjdCB0aGF0IFN5emthbGxlciBsYWNrcyBlbXVsYXRpb24gZm9yIHRoZXNlIHNwZWNpZmljIGhhcmR3YXJlIGNvbXBvbmVudHMsIGl0IGxvb2tzIHVubGlrZWx5LiBMZXQmIzM5O3MgZGVsdmUgZGVlcGVyLgoKYGRybV9ncHVzdm0uY2AgaXMgb25seSBzZWxlY3RlZCBieSBgRFJNX1hFYC4gVGhlIG90aGVycyBhcmUgUENJIGRyaXZlcnMuIFdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUsIGl0JiMzOTtzIGEgZGVhZCBlbmQuIFRoZXJlZm9yZSwgbm8gYG5vdXZlYXVgLCBgYW1keGRuYWAsIG9yIGBEUk1fWEVgIGFyZSByZWFjaGFibGUuIFdoYXQgYWJvdXQgdGhlIHVudG91Y2hlZCBmaWxlcz8gYG1zaHZfcmVnaW9ucy5jYCBpcyBIeXBlci1WLCBzbyBpdCYjMzk7cyBpcnJlbGV2YW50LiBgdW1lbV9vZHAuY2AgYW5kIGB0ZXN0X2htbS5jYCBhbHNvIGdvIHVudG91Y2hlZC4KClNvLCBpdCBhcHBlYXJzIHRoZSBwYXRjaCBleGNsdXNpdmVseSBtb2RpZmllcyBjb2RlIHBhdGhzIHRoYXQgYXJlIGluaGVyZW50bHkgaW5hY2Nlc3NpYmxlIGluIGNvbW1vbiB2aXJ0dWFsaXphdGlvbiBzY2VuYXJpb3MuIFdlJiMzOTtyZSBlZmZlY3RpdmVseSBsb29raW5nIGF0IGhhcmR3YXJlLWRlcGVuZGVudCBmdW5jdGlvbmFsaXR5IHRoYXQgc3l6a2FsbGVyIGxpa2VseSB3b24mIzM5O3QgdHJpZ2dlci4gSSB3aWxsIGRvdWJsZSBjaGVjayBteSBhc3N1bXB0aW9ucy4KCk9rYXksIGxldCBtZSBjb25maXJtLiBDYW4gYG5vdXZlYXVgIHBvc3NpYmx5IGJlIHByb2JlZCB3aXRob3V0IHRoZSBoYXJkd2FyZT8gSXQmIzM5O3MgYSBQQ0kgZHJpdmVyLiBXaXRob3V0IGFuIE5WSURJQSBQQ0kgZGV2aWNlIHByZXNlbnQsIHRoZSBkcml2ZXIgd29uJiMzOTt0IGJpbmQgYW5kIGl0cyBpb2N0bHMgYmVjb21lIGluYWNjZXNzaWJsZS4gU2FtZSBmb3IgdGhlIG90aGVycy4KCklzIGl0ICpwb3NzaWJsZSogdGhhdCBgZHJtX2dwdXN2bWAgaXMgdGVzdGVkIHZpYSBzb21lIG90aGVyIG1lYW5zLCBsaWtlIGEga3VuaXQgdGVzdD8gVGhhdCYjMzk7cyB3aGF0IEkgbmVlZCB0byBjaGVjayBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwODowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcm1fZ3B1c3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxNjgyIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG4uY2xhbmctZm9ybWF0PTcxPUZvckVhY2hNYWNyb3M6XG4tLVxuLmNsYW5nLWZvcm1hdC0xODItICAtICYjMzk7ZHJtX2dlbV9mb3JfZWFjaF9ncHV2bV9ib19zYWZlJiMzOTtcbi5jbGFuZy1mb3JtYXQ6MTgzOiAgLSAmIzM5O2RybV9ncHVzdm1fZm9yX2VhY2hfcmFuZ2UmIzM5O1xuLmNsYW5nLWZvcm1hdC0xODQtICAtICYjMzk7ZHJtX2dwdXZhX2Zvcl9lYWNoX29wJiMzOTtcbi0tXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdD02Nz1PdmVydmlldyBvZiBiYXNlbGluZSBkZXNpZ25cbi0tXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC02OS1cbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0OjcwOi4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC03MS0gICA6ZG9jOiBPdmVydmlld1xuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3QtNzItXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdDo3MzouLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY1xuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3QtNzQtICAgOmRvYzogTG9ja2luZ1xuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3QtNzUtXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdDo3NjouLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY1xuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3QtNzctICAgOmRvYzogUGFydGlhbCBVbm1hcHBpbmcgb2YgUmFuZ2VzXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC03OC1cbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0Ojc5Oi4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC04MC0gICA6ZG9jOiBFeGFtcGxlc1xuLS1cbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0PTkxPVBvc3NpYmxlIGZ1dHVyZSBkZXNpZ24gZmVhdHVyZXNcbi0tXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC0xMDAtKiBSYW5nZXMgd2l0aCBtaXhlZCBzeXN0ZW0gYW5kIGRldmljZSBwYWdlc1xuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3Q6MTAxOlx0KiBDYW4gYmUgYWRkZWQgaWYgcmVxdWlyZWQgdG8gZHJtX2dwdXN2bV9nZXRfcGFnZXMgZmFpcmx5IGVhc2lseS5cbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0LTEwMi0qIE11bHRpLUdQVSBzdXBwb3J0XG4tLVxuTmV4dC9tZXJnZS5sb2c9MTQ1OD1NZXJnZSBtYWRlIGJ5IHRoZSAmIzM5O29ydCYjMzk7IHN0cmF0ZWd5LlxuLS1cbk5leHQvbWVyZ2UubG9nLTE1MTItIGRyaXZlcnMvYmFzZS9hcmNoX251bWEuYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0IC1cbk5leHQvbWVyZ2UubG9nOjE1MTM6IGRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDUyICYjNDM7LVxuTmV4dC9tZXJnZS5sb2ctMTUxNC0gZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW0uYyAgICAgICAgICAgICAgfCAgIDMgJiM0MzstXG4tLVxuTmV4dC9tZXJnZS5sb2c9NTQ1Mj0kIGdpdCBtZXJnZSAtbSBNZXJnZSBicmFuY2ggJiMzOTtmb3ItbGludXgtbmV4dCYjMzk7IG9mIGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9kcm0vbWlzYy9rZXJuZWwuZ2l0IGRybS1taXNjL2Zvci1saW51eC1uZXh0XG5OZXh0L21lcmdlLmxvZzo1NDUzOkF1dG8tbWVyZ2luZyBkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jXG5OZXh0L21lcmdlLmxvZy01NDU0LUF1dG8tbWVyZ2luZyBkcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuY1xuTmV4dC9tZXJnZS5sb2c9NTQ1NT1NZXJnZSBtYWRlIGJ5IHRoZSAmIzM5O29ydCYjMzk7IHN0cmF0ZWd5LlxuTmV4dC9tZXJnZS5sb2c6NTQ1NjogZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYyAgICAgICAgICAgICAgICAgICAgICAgfCAyNDMgJiM0MzsmIzQzOyYjNDM7JiM0MzsmIzQzOyYjNDM7JiM0MzsmIzQzOyYjNDM7JiM0MzsmIzQzOyYjNDM7LS0tLS0tLS0tXG5OZXh0L21lcmdlLmxvZy01NDU3LSAuLi4vZ3B1L2RybS9ub3V2ZWF1L252a20vc3ViZGV2L2dzcC9ybS9yNTM1L2Zic3IuYyB8ICAgMSAmIzQzO1xuLS1cbk5leHQvbWVyZ2UubG9nLTU0NjgtIGRyaXZlcnMvZ3B1L2RybS94ZS94ZV91c2VycHRyLmMgICAgICAgICAgICAgICAgICAgIHwgICA1ICYjNDM7LVxuTmV4dC9tZXJnZS5sb2c6NTQ2OTogaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNjcgJiM0MzsmIzQzOyYjNDM7JiM0MzstLVxuTmV4dC9tZXJnZS5sb2ctNTQ3MC0gMTQgZmlsZXMgY2hhbmdlZCwgMzUwIGluc2VydGlvbnMoJiM0MzspLCAyMTggZGVsZXRpb25zKC0pXG4tLVxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlPTEwNz1vYmotJChDT05GSUdfRFJNX0dQVVZNKSAmIzQzOz0gZHJtX2dwdXZtLm9cbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS0xMDgtXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6MTA5OmRybV9ncHVzdm1faGVscGVyLXkgOj0gXFxcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZToxMTA6XHRkcm1fZ3B1c3ZtLm9cbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZToxMTE6ZHJtX2dwdXN2bV9oZWxwZXItJChDT05GSUdfWk9ORV9ERVZJQ0UpICYjNDM7PSBcXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlLTExMi1cdGRybV9wYWdlbWFwLm9cXFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS0xMTQtXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6MTE1Om9iai0kKENPTkZJR19EUk1fR1BVU1ZNKSAmIzQzOz0gZHJtX2dwdXN2bV9oZWxwZXIub1xuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlLTExNi1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE3LSNpbmNsdWRlIFx1MDAzY2RybS9kcm1fZGV2aWNlLmhcdTAwM2VcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTg6I2luY2x1ZGUgXHUwMDNjZHJtL2RybV9ncHVzdm0uaFx1MDAzZVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xOS0jaW5jbHVkZSBcdTAwM2Nkcm0vZHJtX3BhZ2VtYXAuaFx1MDAzZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTEtICogLSBQYWdlczpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTI6ICpcdHN0cnVjdCBkcm1fZ3B1c3ZtX3BhZ2VzIGhvbGRzIHRoZSBETUEgbWFwcGluZyBzdGF0ZSBmb3IgYSByYW5nZSBvZlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01My0gKlx0Q1BVIHZpcnR1YWwgYWRkcmVzc2VzOiB0aGUgRE1BIG1hcHBlZCBkZXZpY2UgYWRkcmVzc2VzLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTYtICpcdG1hcHBpbmdzLlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1NzogKlx0QSBkcml2ZXIgZW1iZWRzIG9uZSBvciBtb3JlIHN0cnVjdCBkcm1fZ3B1c3ZtX3BhZ2VzIGFsb25nc2lkZSBpdHNcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTg6ICpcdHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlLCBjaG9vc2luZyBvbmUgb2YgdHdvIGxheW91dHM6XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU5LSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjYwOiAqXHQxOjEgLSBvbmUgZHJtX2dwdXN2bV9wYWdlcyBwZXIgcmFuZ2UgKG9uZSBkcm1fZGV2aWNlKS4gU2ltcGxlc3RcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjEtICpcdGxheW91dDsgdG8gbWlycm9yIGEgVkEgcmFuZ2Ugb24gc2V2ZXJhbCBkZXZpY2VzIGEgZHJpdmVyIHVzZXMgYVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjQtICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NjU6ICpcdE46MSAtIG9uZSBkcm1fZ3B1c3ZtX3BhZ2VzIHBlciBkcm1fZGV2aWNlLCBhbGwgc2hhcmluZyBvbmUgcmFuZ2UgYW5kXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY2LSAqXHRub3RpZmllcjsgb25seSB0aGUgcGVyLWRldmljZSBETUEgbWFwcGluZyBkaWZmZXJzLiBUaGUgaW5zdGFuY2VzIG11c3RcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Njc6ICpcdHNpdCBpbiBjb250aWd1b3VzIG1lbW9yeSBzbyBhIHNpbmdsZSBkcm1fZ3B1c3ZtX3JhbmdlX3NldF91bm1hcHBlZCgpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY4LSAqXHRjYW4gbWFyayB0aGVtIGFsbC4gQSBkcml2ZXIgY2FuIGtlZXAgb25lIGluc3RhbmNlIGlubGluZSBmb3IgdGhlIHNpbmdsZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzQtICpcdFx0c3RydWN0IGRyaXZlcl9yYW5nZSB7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjc1OiAqXHRcdFx0c3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgYmFzZTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzYtICpcdFx0XHR1bnNpZ25lZCBpbnQgbnVtX3BhZ2VzO1x0Ly8gMTogaW5saW5lX3BhZ2VzLCBcdTAwM2UxOiBwYWdlc1tdXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTc3LSAqXHRcdFx0dW5pb24ge1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo3ODogKlx0XHRcdFx0c3RydWN0IGRybV9ncHVzdm1fcGFnZXMgaW5saW5lX3BhZ2VzO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo3OTogKlx0XHRcdFx0c3RydWN0IGRybV9ncHVzdm1fcGFnZXMgKnBhZ2VzO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04MC0gKlx0XHRcdH07XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NC0gKlx0YWxsb2NhdG9yIChlLmcuIGtjYWxsb2MobnVtX3BhZ2VzLCAuLi4pKSwgaW5pdGlhbGlzZXMgZWFjaCBlbnRyeSB3aXRoXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg1OiAqXHRkcm1fZ3B1c3ZtX2luaXRfcGFnZXMoKSwgYW5kIGZyZWVzIGVhY2ggZW50cnkgd2l0aFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4NjogKlx0ZHJtX2dwdXN2bV9mcmVlX3BhZ2VzKCkgcGx1cyB0aGUgYXJyYXkgaXRzZWxmLCBmcm9tIGl0cyByYW5nZSBmcmVlXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg3OiAqXHRjYWxsYmFjay4gRWFjaCBkcm1fZ3B1c3ZtX3BhZ2VzIGlzIG1hcHBlZCBpbmRlcGVuZGVudGx5IGJ5IHRoZWlyIG93blxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04OC0gKlx0ZHJtX2RldmljZS5cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODk6ICpcdEVhY2ggZHJtX2dwdXN2bV9wYWdlcyBtdXN0IGJlIHplcm8taW5pdGlhbGlzZWQgYW5kIGluaXRpYWxpc2VkIHdpdGhcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6OTA6ICpcdGRybV9ncHVzdm1faW5pdF9wYWdlcygpLCBjYWxsZWQgb25jZSBwZXIgZW50cnkuXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkxLSAqXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMzUtICogZXhjZXB0IGZvciB0aGUgcmVjaGVjayByYW5nZSYjMzk7cyBwYWdlcyBiZWluZyB2YWxpZFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMzY6ICogKGRybV9ncHVzdm1fcGFnZXNfdmFsaWQpIHdoZW4gdGhlIGRyaXZlciBpcyBjb21taXR0aW5nIEdQVSBiaW5kaW5ncy5cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTM3LSAqIFRoaXMgbG9jayBjb3JyZXNwb25kcyB0byB0aGUgYGBkcml2ZXItXHUwMDNldXBkYXRlYGAgbG9jayBtZW50aW9uZWQgaW5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE0My0gKiBsb2NrIHRvIHNhZmVndWFyZCBjb3JlIEdQVSBTVk0gZnVuY3Rpb24gY2FsbHMgdGhhdCBtb2RpZnkgc3RhdGUsIHN1Y2ggYXNcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTQ0OiAqIGRybV9ncHVzdm1fcmFuZ2VfZmluZF9vcl9pbnNlcnQgYW5kIGRybV9ncHVzdm1fcmFuZ2VfcmVtb3ZlLiBUaGlzIGxvY2sgaXNcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTQ1LSAqIGRlbm90ZWQgYXMgJiMzOTtkcml2ZXJfc3ZtX2xvY2smIzM5OyBpbiBjb2RlIGV4YW1wbGVzLiBGaW5lciBncmFpbmVkIGRyaXZlciBzaWRlXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE0Ni0gKiBsb2NraW5nIHNob3VsZCBhbHNvIGJlIHBvc3NpYmxlIGZvciBjb25jdXJyZW50IEdQVSBmYXVsdCBwcm9jZXNzaW5nIHdpdGhpbiBhXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE0NzogKiBzaW5nbGUgR1BVIFNWTS4gVGhlICYjMzk7ZHJpdmVyX3N2bV9sb2NrJiMzOTsgY2FuIGJlIHZpYSBkcm1fZ3B1c3ZtX2RyaXZlcl9zZXRfbG9ja1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNDgtICogdG8gYWRkIGFubm90YXRpb25zIHRvIEdQVSBTVk0uXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xODQtICpcdHN0cnVjdCBkcml2ZXJfcmFuZ2Uge1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxODU6ICpcdFx0c3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgYmFzZTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTg2OiAqXHRcdHN0cnVjdCBkcm1fZ3B1c3ZtX3BhZ2VzIHBhZ2VzO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xODctICpcdH07XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE4OC0gKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxODk6ICpcdGludCBkcml2ZXJfYmluZF9yYW5nZShzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLCBzdHJ1Y3QgZHJpdmVyX3JhbmdlICpkcmFuZ2UpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE5MC0gKlx0e1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTk0LSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE5NTogKlx0XHRkcm1fZ3B1c3ZtX25vdGlmaWVyX2xvY2soZ3B1c3ZtKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTk2OiAqXHRcdGlmIChkcm1fZ3B1c3ZtX3BhZ2VzX3ZhbGlkKGdwdXN2bSwgXHUwMDI2ZHJhbmdlLVx1MDAzZXBhZ2VzKSlcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTk3LSAqXHRcdFx0ZHJpdmVyX2NvbW1pdF9iaW5kKGdwdXN2bSwgZHJhbmdlKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE5OS0gKlx0XHRcdGVyciA9IC1FQUdBSU47XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjIwMDogKlx0XHRkcm1fZ3B1c3ZtX25vdGlmaWVyX3VubG9jayhncHVzdm0pO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMDEtICpcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTIwNC0gKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyMDU6ICpcdGludCBkcml2ZXJfZ3B1X2ZhdWx0KHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sIHVuc2lnbmVkIGxvbmcgZmF1bHRfYWRkcixcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjA2LSAqXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGdwdXZhX3N0YXJ0LCB1bnNpZ25lZCBsb25nIGdwdXZhX2VuZClcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjA3LSAqXHR7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjIwODogKlx0XHRzdHJ1Y3QgZHJtX2dwdXN2bV9jdHggY3R4ID0ge307XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTIwOS0gKlx0XHRzdHJ1Y3QgZHJpdmVyX3JhbmdlICpkcmFuZ2U7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjIxMDogKlx0XHRzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2U7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTIxMS0gKlx0XHRpbnQgZXJyO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjE3LSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjIxODogKlx0XHRyYW5nZSA9IGRybV9ncHVzdm1fcmFuZ2VfZmluZF9vcl9pbnNlcnQoZ3B1c3ZtLCBmYXVsdF9hZGRyLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMTktICpcdFx0XHRcdFx0XHRcdGdwdXZhX3N0YXJ0LCBncHV2YV9lbmQsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMzQtICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjM1OiAqXHRcdGVyciA9IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKGdwdXN2bSwgXHUwMDI2ZHJhbmdlLVx1MDAzZXBhZ2VzLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMzYtICpcdFx0XHRcdFx0ICAgZ3B1c3ZtLVx1MDAzZW1tLCBcdTAwMjZyYW5nZS1cdTAwM2Vub3RpZmllci1cdTAwM2Vub3RpZmllcixcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjM3OiAqXHRcdFx0XHRcdCAgIGRybV9ncHVzdm1fcmFuZ2Vfc3RhcnQocmFuZ2UpLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyMzg6ICpcdFx0XHRcdFx0ICAgZHJtX2dwdXN2bV9yYW5nZV9lbmQocmFuZ2UpLCBcdTAwMjZjdHgpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMzktICpcdFx0aWYgKGVyciA9PSAtRU9QTk9UU1VQUCB8fCBlcnIgPT0gLUVGQVVMVCB8fCBlcnIgPT0gLUVQRVJNKSB7XHQvLyBDUFUgbWFwcGluZ3MgY2hhbmdlZFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yNDAtICpcdFx0XHRpZiAoZXJyID09IC1FT1BOT1RTVVBQKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyNDE6ICpcdFx0XHRcdGRybV9ncHVzdm1fcmFuZ2VfZXZpY3QoZ3B1c3ZtLCByYW5nZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI0Mi0gKlx0XHRcdGdvdG8gcmV0cnk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yNTktICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjYwOiAqXHQvLyBUaGUgZHJpdmVyIG93bnMgdGhlIGRybV9ncHVzdm1fcGFnZXMgbGlmZWN5Y2xlLiBvcHMtXHUwMDNlcmFuZ2VfZnJlZSBpc1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyNjE6ICpcdC8vIHRoZSBmaW5hbCBmYWxsYmFjazogZHJtX2dwdXN2bV9mcmVlX3BhZ2VzKCkgdW5tYXBzIGFueVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yNjItICpcdC8vIGxpbmdlcmluZyBETUEgbWFwcGluZyBhbmQgYSBuby1vcCBpZiBhbHJlYWR5IHVubWFwcGVkIGFuZCBmcmVlcyB0aGVcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjYzLSAqXHQvLyBkbWFfYWRkciBhcnJheS4gVGhlIG5vcm1hbCBmbG93IGlzIHRvIERNQSB1bm1hcCBiZWZvcmVcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjY0OiAqXHQvLyBkcm1fZ3B1c3ZtX3JhbmdlX3JlbW92ZSgpIChiZWZvcmUgdGhlIHJhbmdlIGxlYXZlcyB0aGUgdHJlZSkuXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjI2NTogKlx0dm9pZCBkcml2ZXJfcmFuZ2VfZnJlZShzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI2Ni0gKlx0e1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjY5LSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjI3MDogKlx0XHRkcm1fZ3B1c3ZtX2ZyZWVfcGFnZXMocmFuZ2UtXHUwMDNlZ3B1c3ZtLCBcdTAwMjZkcmFuZ2UtXHUwMDNlcGFnZXMsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjI3MTogKlx0XHRcdFx0ICAgICAgZHJtX2dwdXN2bV9yYW5nZV9zaXplKHJhbmdlKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI3Mi0gKlx0XHRrZnJlZShkcmFuZ2UpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjc0LSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjI3NTogKlx0dm9pZCBfX2RyaXZlcl9nYXJiYWdlX2NvbGxlY3RvcihzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyNzY6ICpcdFx0XHRcdFx0c3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yNzctICpcdHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI4MS0gKlx0XHRpZiAocmFuZ2UtXHUwMDNlZmxhZ3MucGFydGlhbF91bm1hcClcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjgyOiAqXHRcdFx0ZHJtX2dwdXN2bV9yYW5nZV9ldmljdChncHVzdm0sIHJhbmdlKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjgzLSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI4NC0gKlx0XHRkcml2ZXJfdW5iaW5kX3JhbmdlKHJhbmdlKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Mjg1OiAqXHRcdC8vIFRoZSBwYWdlcyBtdXN0IGJlIERNQSB1bm1hcHBlZCBiZWZvcmUgZHJtX2dwdXN2bV9yYW5nZV9yZW1vdmUoKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yODYtICpcdFx0Ly8gLCBzbyBhIHJhbmdlIGlzIG5ldmVyIG9mZiB0aGUgTU1VIGludGVydmFsIHRyZWUgd2hpbGUgc3RpbGwgRE1BXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yODktICpcdFx0Ly8gZm9yIGRldmljZSBETUEuIFRoaXMgaXMgdGhlIG5vcm1hbCB1bm1hcCBwb2ludC5cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjkwOiAqXHRcdGRybV9ncHVzdm1fdW5tYXBfcGFnZXMoZ3B1c3ZtLCBcdTAwMjZkcmFuZ2UtXHUwMDNlcGFnZXMsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjI5MTogKlx0XHRcdFx0ICAgICAgIGRybV9ncHVzdm1fcmFuZ2Vfc2l6ZShyYW5nZSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjI5MjogKlx0XHRcdFx0ICAgICAgIFx1MDAyNihzdHJ1Y3QgZHJtX2dwdXN2bV9jdHgpeyAuaW5fbm90aWZpZXIgPSBmYWxzZSB9KTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjkzOiAqXHRcdGRybV9ncHVzdm1fcmFuZ2VfcmVtb3ZlKGdwdXN2bSwgcmFuZ2UpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yOTQtICpcdH1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjk1LSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjI5NjogKlx0dm9pZCBkcml2ZXJfZ2FyYmFnZV9jb2xsZWN0b3Ioc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSlcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjk3LSAqXHR7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zMDctICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzA4OiAqXHR2b2lkIGRyaXZlcl9pbnZhbGlkYXRpb24oc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzA5OiAqXHRcdFx0XHQgc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zMTAtICpcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlICptbXVfcmFuZ2UpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMxMS0gKlx0e1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozMTI6ICpcdFx0c3RydWN0IGRybV9ncHVzdm1fY3R4IGN0eCA9IHsgLmluX25vdGlmaWVyID0gdHJ1ZSwgfTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzEzOiAqXHRcdHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSA9IE5VTEw7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMxNC0gKlx0XHRzdHJ1Y3QgZHJpdmVyX3JhbmdlICpkcmFuZ2U7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zMTctICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzE4OiAqXHRcdGRybV9ncHVzdm1fZm9yX2VhY2hfcmFuZ2UocmFuZ2UsIG5vdGlmaWVyLCBtbXVfcmFuZ2UtXHUwMDNlc3RhcnQsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMxOS0gKlx0XHRcdFx0XHQgIG1tdV9yYW5nZS1cdTAwM2VlbmQpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMyMS0gKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozMjI6ICpcdFx0XHRkcm1fZ3B1c3ZtX3VubWFwX3BhZ2VzKGdwdXN2bSwgXHUwMDI2ZHJhbmdlLVx1MDAzZXBhZ2VzLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozMjM6ICpcdFx0XHRcdFx0ICAgICAgIGRybV9ncHVzdm1fcmFuZ2Vfc2l6ZShyYW5nZSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMyNC0gKlx0XHRcdFx0XHQgICAgICAgXHUwMDI2Y3R4KTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMyOC0gKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozMjk6ICpcdFx0XHRkcm1fZ3B1c3ZtX3JhbmdlX3NldF91bm1hcHBlZChyYW5nZSwgXHUwMDI2ZHJhbmdlLVx1MDAzZXBhZ2VzLCAxLCBtbXVfcmFuZ2UpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zMzAtICpcdFx0XHRkcml2ZXJfZ2FyYmFnZV9jb2xsZWN0b3JfYWRkKGdwdXN2bSwgcmFuZ2UpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM9MzQ4PW5wYWdlc19pbl9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM1My0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzU0OiAqIGRybV9ncHVzdm1fbm90aWZpZXJfZmluZCgpIC0gRmluZCBHUFUgU1ZNIG5vdGlmaWVyIGZyb20gR1BVIFNWTVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zNTUtICogQGdwdXN2bTogUG9pbnRlciB0byB0aGUgR1BVIFNWTSBzdHJ1Y3R1cmUuXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zNTgtICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzU5OiAqIFJldHVybjogQSBwb2ludGVyIHRvIHRoZSBkcm1fZ3B1c3ZtX25vdGlmaWVyIGlmIGZvdW5kIG9yIE5VTExcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzYwLSAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozNjE6c3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozNjI6ZHJtX2dwdXN2bV9ub3RpZmllcl9maW5kKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM2My1cdFx0XHQgdW5zaWduZWQgbG9uZyBlbmQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zNjktXHRpZiAoaXRyZWUpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjM3MDpcdFx0cmV0dXJuIGNvbnRhaW5lcl9vZihpdHJlZSwgc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIsIGl0cmVlKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzcxLVx0ZWxzZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzczLX1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Mzc0OkVYUE9SVF9TWU1CT0xfR1BMKGRybV9ncHVzdm1fbm90aWZpZXJfZmluZCk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM3NS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzc2LS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozNzc6ICogZHJtX2dwdXN2bV9yYW5nZV9maW5kKCkgLSBGaW5kIEdQVSBTVk0gcmFuZ2UgZnJvbSBHUFUgU1ZNIG5vdGlmaWVyXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM3OC0gKiBAbm90aWZpZXI6IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gbm90aWZpZXIgc3RydWN0dXJlLlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzgxLSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjM4MjogKiBSZXR1cm46IEEgcG9pbnRlciB0byB0aGUgZHJtX2dwdXN2bV9yYW5nZSBpZiBmb3VuZCBvciBOVUxMXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM4My0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Mzg0OnN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Mzg1OmRybV9ncHVzdm1fcmFuZ2VfZmluZChzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqbm90aWZpZXIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM4Ni1cdFx0ICAgICAgdW5zaWduZWQgbG9uZyBlbmQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zOTItXHRpZiAoaXRyZWUpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjM5MzpcdFx0cmV0dXJuIGNvbnRhaW5lcl9vZihpdHJlZSwgc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UsIGl0cmVlKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzk0LVx0ZWxzZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzk2LX1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Mzk3OkVYUE9SVF9TWU1CT0xfR1BMKGRybV9ncHVzdm1fcmFuZ2VfZmluZCk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM5OC1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzk5LS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0MDA6ICogZHJtX2dwdXN2bV9ub3RpZmllcl9pbnZhbGlkYXRlKCkgLSBJbnZhbGlkYXRlIGEgR1BVIFNWTSBub3RpZmllci5cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDAxLSAqIEBtbmk6IFBvaW50ZXIgdG8gdGhlIG1tdV9pbnRlcnZhbF9ub3RpZmllciBzdHJ1Y3R1cmUuXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz00MTE9c3RhdGljIGJvb2xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDEyOmRybV9ncHVzdm1fbm90aWZpZXJfaW52YWxpZGF0ZShzdHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVyICptbmksXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQxMy1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqbW11X3JhbmdlLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDE1LXtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDE2Olx0c3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyID1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDE3LVx0XHRjb250YWluZXJfb2YobW5pLCB0eXBlb2YoKm5vdGlmaWVyKSwgbm90aWZpZXIpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0MTg6XHRzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtID0gbm90aWZpZXItXHUwMDNlZ3B1c3ZtO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00MTktXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00MzEtLypcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDMyOiAqIGRybV9ncHVzdm1fbm90aWZpZXJfb3BzIC0gTU1VIGludGVydmFsIG5vdGlmaWVyIG9wZXJhdGlvbnMgZm9yIEdQVSBTVk1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDMzLSAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0MzQ6c3RhdGljIGNvbnN0IHN0cnVjdCBtbXVfaW50ZXJ2YWxfbm90aWZpZXJfb3BzIGRybV9ncHVzdm1fbm90aWZpZXJfb3BzID0ge1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0MzU6XHQuaW52YWxpZGF0ZSA9IGRybV9ncHVzdm1fbm90aWZpZXJfaW52YWxpZGF0ZSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDM2LX07XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00MzgtLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQzOTogKiBkcm1fZ3B1c3ZtX2luaXQoKSAtIEluaXRpYWxpemUgdGhlIEdQVSBTVk0uXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ0MC0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZS5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ1My0gKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0NTQ6ICogTm90ZTogSWYgb25seSB1c2luZyB0aGUgc2ltcGxlIGRybV9ncHVzdm1fcGFnZXMgQVBJIChnZXQvdW5tYXAvZnJlZSksXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ1NS0gKiB0aGVuIG9ubHkgQGdwdXN2bSBhbmQgQG5hbWUgYXJlIGV4cGVjdGVkLiBUaGUgQGRybSBkcm1fZGV2aWNlIGZvciBkbWFcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDU2OiAqIG1hcHBpbmdzIGlzIGJvdW5kIHBlci1wYWdlcyB2aWEgZHJtX2dwdXN2bV9pbml0X3BhZ2VzKCkgYmVmb3JlIHRoZSBmaXJzdFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0NTc6ICogZHJtX2dwdXN2bV9nZXRfcGFnZXMoKSBjYWxsLiBIb3dldmVyLCB0aGUgc2FtZSBiYXNlXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ1OC0gKiBAZ3B1c3ZtIGNhbiBhbHNvIGJlIHVzZWQgd2l0aCBib3RoIG1vZGVzIHRvZ2V0aGVyIGluIHdoaWNoIGNhc2UgdGhlIGZ1bGxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDU5OiAqIHNldHVwIGlzIG5lZWRlZCwgd2hlcmUgdGhlIGNvcmUgZHJtX2dwdXN2bV9wYWdlcyBBUEkgd2lsbCBzaW1wbHkgbmV2ZXIgdXNlXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ2MC0gKiB0aGUgb3RoZXIgZmllbGRzLlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDYzLSAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0NjQ6aW50IGRybV9ncHVzdm1faW5pdChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00NjUtXHRcdCAgICBjb25zdCBjaGFyICpuYW1lLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDY4LVx0XHQgICAgdW5zaWduZWQgbG9uZyBub3RpZmllcl9zaXplLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0Njk6XHRcdCAgICBjb25zdCBzdHJ1Y3QgZHJtX2dwdXN2bV9vcHMgKm9wcyxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDcwLVx0XHQgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqY2h1bmtfc2l6ZXMsIGludCBudW1fY2h1bmtzKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDc2LVx0fSBlbHNlIHtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDc3Olx0XHQvKiBObyBmdWxsIFNWTSBtb2RlLCBvbmx5IGNvcmUgZHJtX2dwdXN2bV9wYWdlcyBBUEkuICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ3OC1cdFx0aWYgKG9wcyB8fCBudW1fY2h1bmtzIHx8IG1tX3JhbmdlIHx8IG5vdGlmaWVyX3NpemUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01MDUtfVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1MDY6RVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXN2bV9pbml0KTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTA3LVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01MDgtLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjUwOTogKiB0b19kcm1fZ3B1c3ZtX25vdGlmaWVyKCkgLSByZXRyaWV2ZSB0aGUgY29udGFpbmVyIHN0cnVjdCBmb3IgYSBnaXZlbiByYnRyZWUgbm9kZVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1MTA6ICogQG5vZGU6IGEgcG9pbnRlciB0byB0aGUgcmJ0cmVlIG5vZGUgZW1iZWRkZWQgd2l0aGluIGEgZHJtX2dwdXN2bV9ub3RpZmllciBzdHJ1Y3RcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTExLSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjUxMjogKiBSZXR1cm46IEEgcG9pbnRlciB0byB0aGUgY29udGFpbmluZyBkcm1fZ3B1c3ZtX25vdGlmaWVyIHN0cnVjdHVyZS5cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTEzLSAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1MTQ6c3RhdGljIHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICp0b19kcm1fZ3B1c3ZtX25vdGlmaWVyKHN0cnVjdCByYl9ub2RlICpub2RlKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01MTUte1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1MTY6XHRyZXR1cm4gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyLCBpdHJlZS5yYik7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTUxNy19XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01MTktLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjUyMDogKiBkcm1fZ3B1c3ZtX25vdGlmaWVyX2luc2VydCgpIC0gSW5zZXJ0IEdQVSBTVk0gbm90aWZpZXJcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTIxLSAqIEBncHVzdm06IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gc3RydWN0dXJlXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01MjUtICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjUyNjpzdGF0aWMgdm9pZCBkcm1fZ3B1c3ZtX25vdGlmaWVyX2luc2VydChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1Mjc6XHRcdFx0XHQgICAgICAgc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01Mjgte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTM1LVx0aWYgKG5vZGUpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjUzNjpcdFx0aGVhZCA9IFx1MDAyNih0b19kcm1fZ3B1c3ZtX25vdGlmaWVyKG5vZGUpKS1cdTAwM2VlbnRyeTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTM3LVx0ZWxzZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTQzLS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1NDQ6ICogZHJtX2dwdXN2bV9ub3RpZmllcl9yZW1vdmUoKSAtIFJlbW92ZSBHUFUgU1ZNIG5vdGlmaWVyXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU0NS0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHRydWN0dXJlXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01NDktICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjU1MDpzdGF0aWMgdm9pZCBkcm1fZ3B1c3ZtX25vdGlmaWVyX3JlbW92ZShzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1NTE6XHRcdFx0XHQgICAgICAgc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01NTIte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTU3LS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1NTg6ICogZHJtX2dwdXN2bV9maW5pKCkgLSBGaW5hbGl6ZSB0aGUgR1BVIFNWTS5cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTU5LSAqIEBncHVzdm06IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gc3RydWN0dXJlLlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTYzLSAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1NjQ6dm9pZCBkcm1fZ3B1c3ZtX2Zpbmkoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSlcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTY1LXtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTY2Olx0c3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyLCAqbmV4dDtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTY3LVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1Njg6XHRkcm1fZ3B1c3ZtX2Zvcl9lYWNoX25vdGlmaWVyX3NhZmUobm90aWZpZXIsIG5leHQsIGdwdXN2bSwgMCwgTE9OR19NQVgpIHtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTY5Olx0XHRzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UsICpfX25leHQ7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU3MC1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU3Ni1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTc3Olx0XHRkcm1fZ3B1c3ZtX2Zvcl9lYWNoX3JhbmdlX3NhZmUocmFuZ2UsIF9fbmV4dCwgbm90aWZpZXIsIDAsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU3OC1cdFx0XHRcdFx0ICAgICAgIExPTkdfTUFYKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1Nzk6XHRcdFx0ZHJtX2dwdXN2bV9yYW5nZV9yZW1vdmUoZ3B1c3ZtLCByYW5nZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU4MC1cdH1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU4NS19XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjU4NjpFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1c3ZtX2ZpbmkpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01ODctXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU4OC0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTg5OiAqIGRybV9ncHVzdm1fbm90aWZpZXJfYWxsb2MoKSAtIEFsbG9jYXRlIEdQVSBTVk0gbm90aWZpZXJcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTkwLSAqIEBncHVzdm06IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gc3RydWN0dXJlXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01OTYtICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjU5NzpzdGF0aWMgc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1OTg6ZHJtX2dwdXN2bV9ub3RpZmllcl9hbGxvYyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLCB1bnNpZ25lZCBsb25nIGZhdWx0X2FkZHIpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU5OS17XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjYwMDpcdHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpub3RpZmllcjtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjAxLVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjIwLS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2MjE6ICogZHJtX2dwdXN2bV9ub3RpZmllcl9mcmVlKCkgLSBGcmVlIEdQVSBTVk0gbm90aWZpZXJcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjIyLSAqIEBncHVzdm06IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gc3RydWN0dXJlXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02MjYtICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjYyNzpzdGF0aWMgdm9pZCBkcm1fZ3B1c3ZtX25vdGlmaWVyX2ZyZWUoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NjI4Olx0XHRcdFx0ICAgICBzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqbm90aWZpZXIpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTYyOS17XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02MzgtLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjYzOTogKiB0b19kcm1fZ3B1c3ZtX3JhbmdlKCkgLSByZXRyaWV2ZSB0aGUgY29udGFpbmVyIHN0cnVjdCBmb3IgYSBnaXZlbiByYnRyZWUgbm9kZVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2NDA6ICogQG5vZGU6IGEgcG9pbnRlciB0byB0aGUgcmJ0cmVlIG5vZGUgZW1iZWRkZWQgd2l0aGluIGEgZHJtX2dwdXN2bV9yYW5nZSBzdHJ1Y3RcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjQxLSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjY0MjogKiBSZXR1cm46IEEgcG9pbnRlciB0byB0aGUgY29udGFpbmluZyBkcm1fZ3B1c3ZtX3JhbmdlIHN0cnVjdHVyZS5cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjQzLSAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2NDQ6c3RhdGljIHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICp0b19kcm1fZ3B1c3ZtX3JhbmdlKHN0cnVjdCByYl9ub2RlICpub2RlKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NDUte1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2NDY6XHRyZXR1cm4gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlLCBpdHJlZS5yYik7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY0Ny19XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NDktLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjY1MDogKiBkcm1fZ3B1c3ZtX3JhbmdlX2luc2VydCgpIC0gSW5zZXJ0IEdQVSBTVk0gcmFuZ2VcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjUxLSAqIEBub3RpZmllcjogUG9pbnRlciB0byB0aGUgR1BVIFNWTSBub3RpZmllciBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY1NS0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NjU2OnN0YXRpYyB2b2lkIGRybV9ncHVzdm1fcmFuZ2VfaW5zZXJ0KHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpub3RpZmllcixcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NjU3Olx0XHRcdFx0ICAgIHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSlcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjU4LXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY2MS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NjYyOlx0ZHJtX2dwdXN2bV9ub3RpZmllcl9sb2NrKG5vdGlmaWVyLVx1MDAzZWdwdXN2bSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY2My1cdGludGVydmFsX3RyZWVfaW5zZXJ0KFx1MDAyNnJhbmdlLVx1MDAzZWl0cmVlLCBcdTAwMjZub3RpZmllci1cdTAwM2Vyb290KTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY2Ni1cdGlmIChub2RlKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2Njc6XHRcdGhlYWQgPSBcdTAwMjYodG9fZHJtX2dwdXN2bV9yYW5nZShub2RlKSktXHUwMDNlZW50cnk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY2OC1cdGVsc2Vcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY3MS1cdGxpc3RfYWRkKFx1MDAyNnJhbmdlLVx1MDAzZWVudHJ5LCBoZWFkKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NjcyOlx0ZHJtX2dwdXN2bV9ub3RpZmllcl91bmxvY2sobm90aWZpZXItXHUwMDNlZ3B1c3ZtKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjczLX1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY3NS0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Njc2OiAqIF9fZHJtX2dwdXN2bV9yYW5nZV9yZW1vdmUoKSAtIFJlbW92ZSBHUFUgU1ZNIHJhbmdlXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY3Ny0gKiBAbm90aWZpZXI6IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gbm90aWZpZXIgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02ODEtICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjY4MjpzdGF0aWMgdm9pZCBfX2RybV9ncHVzdm1fcmFuZ2VfcmVtb3ZlKHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpub3RpZmllcixcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NjgzOlx0XHRcdFx0ICAgICAgc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02ODQte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjg5LS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2OTA6ICogZHJtX2dwdXN2bV9yYW5nZV9hbGxvYygpIC0gQWxsb2NhdGUgR1BVIFNWTSByYW5nZVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02OTEtICogQGdwdXN2bTogUG9pbnRlciB0byB0aGUgR1BVIFNWTSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTcwMC0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NzAxOnN0YXRpYyBzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjcwMjpkcm1fZ3B1c3ZtX3JhbmdlX2FsbG9jKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjcwMzpcdFx0ICAgICAgIHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpub3RpZmllcixcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzA0LVx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBmYXVsdF9hZGRyLCB1bnNpZ25lZCBsb25nIGNodW5rX3NpemUsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy03MDYte1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo3MDc6XHRzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2U7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTcwOC1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTcyOC0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NzI5OiAqIGRybV9ncHVzdm1faG1tX3Bmbl90b19vcmRlcigpIC0gR2V0IHRoZSBsYXJnZXN0IENQVSBtYXBwaW5nIG9yZGVyLlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy03MzAtICogQGhtbV9wZm46IFRoZSBjdXJyZW50IGhtbV9wZm4uXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy03NDEtICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjc0MjpzdGF0aWMgdW5zaWduZWQgaW50IGRybV9ncHVzdm1faG1tX3Bmbl90b19vcmRlcih1bnNpZ25lZCBsb25nIGhtbV9wZm4sXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTc0My1cdFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGhtbV9wZm5faW5kZXgsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy03NTctLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjc1ODogKiBkcm1fZ3B1c3ZtX2NoZWNrX3BhZ2VzKCkgLSBDaGVjayBwYWdlc1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy03NTktICogQGdwdXN2bTogUG9pbnRlciB0byB0aGUgR1BVIFNWTSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTc2OS0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NzcwOnN0YXRpYyBib29sIGRybV9ncHVzdm1fY2hlY2tfcGFnZXMoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NzcxOlx0XHRcdFx0ICAgc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy03NzItXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTgxNi1cdFx0fVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4MTc6XHRcdGkgJiM0Mzs9IDB4MSBcdTAwM2NcdTAwM2MgZHJtX2dwdXN2bV9obW1fcGZuX3RvX29yZGVyKHBmbnNbaV0sIGksIG5wYWdlcyk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTgxOC1cdH1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTgyNS0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODI2OiAqIGRybV9ncHVzdm1fc2Nhbl9tbSgpIC0gQ2hlY2sgdGhlIG1pZ3JhdGlvbiBzdGF0ZSBvZiBhIGRybV9ncHVzdm1fcmFuZ2VcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODI3OiAqIEByYW5nZTogUG9pbnRlciB0byB0aGUgc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgdG8gY2hlY2suXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTgyOC0gKiBAZGV2X3ByaXZhdGVfb3duZXI6IFRoZSBzdHJ1Y3QgZGV2X3ByaXZhdGVfb3duZXIgdG8gdXNlIHRvIGRldGVybWluZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODM4LSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjgzOTogKiBSZXR1cm46IFNlZSBcdTAwMjZlbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQuXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg0MC0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODQxOmVudW0gZHJtX2dwdXN2bV9zY2FuX3Jlc3VsdCBkcm1fZ3B1c3ZtX3NjYW5fbW0oc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NDItXHRcdFx0XHRcdCAgICAgICB2b2lkICpkZXZfcHJpdmF0ZV9vd25lcixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg0NS1cdHN0cnVjdCBtbXVfaW50ZXJ2YWxfbm90aWZpZXIgKm5vdGlmaWVyID0gXHUwMDI2cmFuZ2UtXHUwMDNlbm90aWZpZXItXHUwMDNlbm90aWZpZXI7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg0NjpcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBkcm1fZ3B1c3ZtX3JhbmdlX3N0YXJ0KHJhbmdlKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODQ3Olx0dW5zaWduZWQgbG9uZyBlbmQgPSBkcm1fZ3B1c3ZtX3JhbmdlX2VuZChyYW5nZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg0OC1cdHN0cnVjdCBobW1fcmFuZ2UgaG1tX3JhbmdlID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODU1LVx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODU2Olx0ZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0IHN0YXRlID0gRFJNX0dQVVNWTV9TQ0FOX1VOUE9QVUxBVEVELCBuZXdfc3RhdGU7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg1Ny1cdHVuc2lnbmVkIGxvbmcgKnBmbnM7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NzItXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg3MzpcdGRybV9ncHVzdm1fbm90aWZpZXJfbG9jayhyYW5nZS1cdTAwM2VncHVzdm0pO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NzQtXHRpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkobm90aWZpZXIsIGhtbV9yYW5nZS5ub3RpZmllcl9zZXEpKSB7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg3NTpcdFx0ZHJtX2dwdXN2bV9ub3RpZmllcl91bmxvY2socmFuZ2UtXHUwMDNlZ3B1c3ZtKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODc2LVx0XHRnb3RvIHJldHJ5O1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTE4LVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5MTk6XHRcdGkgJiM0Mzs9IDF1bCBcdTAwM2NcdTAwM2MgZHJtX2dwdXN2bV9obW1fcGZuX3RvX29yZGVyKHBmbnNbaV0sIGksIG5wYWdlcyk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkyMC1cdH1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTIxLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5MjI6XHRkcm1fZ3B1c3ZtX25vdGlmaWVyX3VubG9jayhyYW5nZS1cdTAwM2VncHVzdm0pO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05MjMtXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05MjctfVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5Mjg6RVhQT1JUX1NZTUJPTChkcm1fZ3B1c3ZtX3NjYW5fbW0pO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05MjktXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkzMC0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6OTMxOiAqIGRybV9ncHVzdm1fcmFuZ2VfY2h1bmtfc2l6ZSgpIC0gRGV0ZXJtaW5lIGNodW5rIHNpemUgZm9yIEdQVSBTVk0gcmFuZ2VcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTMyLSAqIEBncHVzdm06IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gc3RydWN0dXJlXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz05NDc9c3RhdGljIHVuc2lnbmVkIGxvbmdcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6OTQ4OmRybV9ncHVzdm1fcmFuZ2VfY2h1bmtfc2l6ZShzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5NDk6XHRcdFx0ICAgIHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpub3RpZmllcixcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTUwLVx0XHRcdCAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZhcyxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk2NS1cdFx0aWYgKHN0YXJ0IFx1MDAzZT0gdmFzLVx1MDAzZXZtX3N0YXJ0IFx1MDAyNlx1MDAyNiBlbmQgXHUwMDNjPSB2YXMtXHUwMDNldm1fZW5kIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5NjY6XHRcdCAgICBzdGFydCBcdTAwM2U9IGRybV9ncHVzdm1fbm90aWZpZXJfc3RhcnQobm90aWZpZXIpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5Njc6XHRcdCAgICBlbmQgXHUwMDNjPSBkcm1fZ3B1c3ZtX25vdGlmaWVyX2VuZChub3RpZmllcikgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk2OC1cdFx0ICAgIHN0YXJ0IFx1MDAzZT0gZ3B1dmFfc3RhcnQgXHUwMDI2XHUwMDI2IGVuZCBcdTAwM2M9IGdwdXZhX2VuZClcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk3OS1cdGlmIChlbmQgLSBzdGFydCAhPSBTWl80Sykge1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5ODA6XHRcdHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTgxLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5ODI6XHRcdHJhbmdlID0gZHJtX2dwdXN2bV9yYW5nZV9maW5kKG5vdGlmaWVyLCBzdGFydCwgZW5kKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTgzLVx0XHRpZiAocmFuZ2UpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk5NC1cdFx0ICogZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19kZXZtZW0gd2l0aCAmIzM5O21pZ3JhdGUuY3BhZ2VzICE9IG5wYWdlcyYjMzk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjk5NTpcdFx0ICogYW5kIHRoZW4gdXBvbiBkcm1fZ3B1c3ZtX2dldF9wYWdlcyBkZXZpY2UgcGFnZXMgZnJvbVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05OTYtXHRcdCAqIG90aGVyIHByb2Nlc3NlcyBhcmUgY29sbGVjdGVkICYjNDM7IGZhdWx0ZWQgaW4gd2hpY2ggY3JlYXRlcyBhbGxcbi0tXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM0NzcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqSW52ZXN0aWdhdGluZyBgZHJtX2dwdXN2bWAgVGVzdGluZyoqCgpSaWdodCwgYGRybV9ncHVzdm1gLi4uIHRoYXQmIzM5O3MgYSBoZWxwZXIgbGlicmFyeSwgaXNuJiMzOTt0IGl0PyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCBoYXMgYW55IGFzc29jaWF0ZWQgdGVzdGluZy4gIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgdG8gY2hlY2sgZm9yIEtVbml0IHRlc3RzLiBUaGUgYnVpbGQgb3V0cHV0IHdvdWxkIHVzdWFsbHkgaW5kaWNhdGUgdGhpcy4gSG1tLCBubywgSSBkb24mIzM5O3Qgc2VlIGFueXRoaW5nIGV4cGxpY2l0bHkgbWVudGlvbmluZyAmIzM0O3Rlc3QmIzM0OyBvciAmIzM0O2t1bml0JiMzNDsgaW4gdGhlIGJ1aWxkIG91dHB1dC4gT2theSwgdGhhdCYjMzk7cyBub3QgY29uY2x1c2l2ZSwgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIFNvLCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgYGRybV9ncHVzdm1gIGFjdHVhbGx5IGhhdmUgKmFueSogc2VsZnRlc3RzIG9yIEtVbml0IHRlc3RzPyBUaW1lIHRvIGV4YW1pbmUgdGhlIHNvdXJjZSBjb2RlIGl0c2VsZi4gSSYjMzk7bGwgbmVlZCB0byBnbyBkaXJlY3RseSB0byBgZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY2AgYW5kIHNlYXJjaCB0aGUgY29kZSBmb3IgYW55IG1lbnRpb25zIG9mICYjMzQ7a3VuaXQmIzM0OyBvciAmIzM0O3Rlc3QmIzM0Oy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGRlZmluaXRpdmUgYW5zd2VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwODowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t1bml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzODEyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIFRoaXMgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpc24mIzM5O3QgdG91Y2hpbmcgYW55IGNvZGUgdGhhdCYjMzk7cyBhY3R1YWxseSB0ZXN0ZWQgYnkga3VuaXQsIHdoaWNoIGlzIGEga2V5IHN0YXJ0aW5nIHBvaW50LiBJIGxvb2tlZCBhdCBgZHJtX2dwdXN2bWAsIGBhaWUyX2N0eC5jYCwgYW5kIGBub3V2ZWF1X3N2bS5jYCwgYW5kIG5vbmUgb2YgdGhlbSBhcmUgY292ZXJlZC4gVGhpcyBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnOiBpcyB0aGlzIHB1cmVseSBhIGNoYW5nZSB0byB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbGlrZSBHQ0Ugb3IgUUVNVT8gVGhhdCYjMzk7cyB3aGF0IGl0IGxvb2tzIGxpa2UsIGluaXRpYWxseS4KCkJ1dCB3YWl0LCBJIG5lZWQgdG8gYmUgcHJlY2lzZSBoZXJlLiBJcyBgZHJtX2dwdXN2bWAgKnBvdGVudGlhbGx5KiByZWFjaGFibGUgdGhyb3VnaCB0aGUgYHhlYCBkcml2ZXI/IFN5emthbGxlciBkb2VzbiYjMzk7dCBoYXZlIHRoYXQgc3BlY2lmaWMgSW50ZWwgWGUgaGFyZHdhcmUsIHNvIEkgY2FuJiMzOTt0IGltbWVkaWF0ZWx5IHJ1bGUgaXQgb3V0LiBBbmQgd2hhdCBhYm91dCBgbm91dmVhdWAgYW5kIGBhbWR4ZG5hYD8gU3l6a2FsbGVyJiMzOTtzIGhhcmR3YXJlIGxpbWl0YXRpb25zIGFyZSBkZWZpbml0ZWx5IGEgZmFjdG9yLgoKTm93LCBJIGFsbW9zdCBtaXNzZWQgc29tZXRoaW5nIOKAkyB3aGF0IGFib3V0IGBsaWIvdGVzdF9obW0uY2A/IEFoLCBubywgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IHRvdWNoIHRoYXQuIEdvb2QuIEhvd2V2ZXIsIHdhaXQsIHRoaXMgcGF0Y2ggKmRvZXMqIG1vZGlmeSB1c2FnZSBvZiBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIGluIHRob3NlIGZpbGVzIEkgbWVudGlvbmVkIGVhcmxpZXI6IGBhaWUyX2N0eC5jYCwgYGRybV9ncHVzdm0uY2AsIGFuZCBgbm91dmVhdV9zdm0uY2AuCgpPa2F5LCBkb2VzIGl0IGNoYW5nZSBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIGl0c2VsZj8gSSBkb24mIzM5O3Qgc2VlIGFueSBtb2RpZmljYXRpb25zIHRvIGBtbS9obW0uY2AgaW4gdGhlIGRpZmYsIHNvIHRoYXQmIzM5O3MgYSBuZWdhdGl2ZS4gQnV0IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uLi4gbGV0IG1lIGRvdWJsZS1jaGVjayB0aGlzIGRpZmYgYWdhaW4uIE1ha2luZyBzdXJlIEkgaGF2ZSBhbGwgdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2htbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaG1tLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaG1tLmM9Njg5PXN0YXRpYyBpbnQgaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSwgYm9vbCAqbG9ja2VkKVxuLS1cbm1tL2htbS5jLTc1My0gKiBUaGUgbW1hcCBsb2NrIG11c3QgYmUgaGVsZCBieSB0aGUgY2FsbGVyIGFuZCB3aWxsIHJlbWFpbiBoZWxkIG9uIHJldHVybi5cbm1tL2htbS5jOjc1NDogKiBOZXcgdXNlcnMgc2hvdWxkIHByZWZlciBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpIHVubGVzcyB0aGV5XG5tbS9obW0uYy03NTUtICogc3BlY2lmaWNhbGx5IG5lZWQgdG8ga2VlcCB0aGUgbW1hcCBsb2NrIGhlbGQgYWNyb3NzIHRoZSBjYWxsLiBUaGlzIGhlbHBlclxuLS1cbm1tL2htbS5jPTc2Mj1FWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV9mYXVsdCk7XG4tLVxubW0vaG1tLmMtNzY0LS8qKlxubW0vaG1tLmM6NzY1OiAqIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0IC0gZmF1bHQgaW4gYSByYW5nZSB3aXRoIGEgcmV0cnkgdGltZW91dFxubW0vaG1tLmMtNzY2LSAqIEByYW5nZTpcdGFyZ3VtZW50IHN0cnVjdHVyZVxuLS1cbm1tL2htbS5jLTc4My0gKi9cbm1tL2htbS5jOjc4NDppbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXG5tbS9obW0uYy03ODUtXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dClcbi0tXG5tbS9obW0uYy04MjQtfVxubW0vaG1tLmM6ODI1OkVYUE9SVF9TWU1CT0woaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQpO1xubW0vaG1tLmMtODI2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwODowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDc4NAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDMzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvZGUgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIHRoZSB1c2VyJiMzOTtzIHByb3ZpZGVkIGEgZGlmZiwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgY2hhbmdlZC4mIzM0OyBJIGltbWVkaWF0ZWx5IHNjYW4gdGhlIGZpbGUgcGF0aHM6IGBEb2N1bWVudGF0aW9uL21tL2htbS5yc3RgLCBgZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfY3R4LmNgLCBgZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY2AsIGFuZCBgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY2AuCgpNeSBndXQgcmVhY3Rpb24gaXMgdGhhdCB0aGlzIHByb2JhYmx5IHdvbiYjMzk7dCBiZSByZWFjaGFibGUgdmlhIHN5emthbGxlciBhcyBpcy4gQmFzZWQgb24gdGhlIGZpbGUgcGF0aHMsIG15IG1lbW9yeSBraWNrcyBpbi4gSSBrbm93IHRob3NlIHBhdGhzIHJlcXVpcmUgc3BlY2lmaWMgaGFyZHdhcmU6IEFNRCBYRE5BLCBJbnRlbCBYZSwgYW5kIE5WSURJQSBHUFVzLiBUaGVzZSBhcmUgbm90IHR5cGljYWxseSBwcmVzZW50LCBub3IgZW11bGF0ZWQsIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCB3aGljaCBhcmUgdGhlIHN5emthbGxlciBnby10byYjMzk7cy4KCkJ1dCB3YWl0IGEgbWludXRlLi4uICpkcm1fZ3B1c3ZtLmMqLi4udGhhdCBmaWxlIG5hbWUgaXMgcG9raW5nIGF0IHNvbWV0aGluZyBpbiBteSBtaW5kLiBDb3VsZCB0aGF0IG9uZSBiZSByZWFjaGFibGUgc29tZWhvdyB3aXRoIGEgbW9jayBkcml2ZXI/IEl0JiMzOTtzIHdvcnRoIGEgcXVpY2sgZG91YmxlLWNoZWNrLiBPa2F5LCBmb2N1c2luZyBiYWNrIGluLCBsZXQmIzM5O3Mgc2VlLiBMZXQgbWUgcXVpY2tseSBqb2cgbXkgbWVtb3J5IGFuZCBzZWUgaG93IHRoYXQgaXMgc2VsZWN0ZWQuIE5vcGUsIGl0IGxvb2tzIGxpa2UgYGRybV9ncHVzdm1gIGlzIG9ubHkgc2VsZWN0ZWQgYnkgYERSTV9YRWAgYW5kIGBEUk1fWEVfR1BVU1ZNYC4gU28gdGhhdCYjMzk7cyB0aGUgZW5kIG9mIHRoYXQgdGhvdWdodC4KCkFscmlnaHQsIHNvIHRoZSBjaGFuY2VzIG9mIHRoaXMgYmVpbmcgZGlyZWN0bHkgdGVzdGFibGUgc2VlbSBzbGltLiBMZXQmIzM5O3MgZGlnIGRlZXBlci4gTWF5YmUgaXQgaXMgdXNlZCBieSBzb21ldGhpbmcgZWxzZSBJIGFtIG5vdCB0aGlua2luZyBvZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IERSTV9HUFVTVk0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWc9Mj1jb25maWcgRFJNX1hFXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWctNDEtXHRzZWxlY3QgRFJNX0VYRUNcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnOjQyOlx0c2VsZWN0IERSTV9HUFVTVk0gaWYgIVVNTFxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWctNDMtXHRzZWxlY3QgRFJNX0dQVVZNXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWc9Nzk9Y29uZmlnIERSTV9YRV9HUFVTVk1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZy04NS1cdHNlbGVjdCBERVZJQ0VfUFJJVkFURVxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWc6ODY6XHRzZWxlY3QgRFJNX0dQVVNWTVxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWctODctXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NjY0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZz1mYWxzZTogVW5yZWFjaGFibGUgQ29kZSBQYXRocyBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKgoKT2theSwgc28gbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggSSYjMzk7bSByZXZpZXdpbmcgbW9kaWZpZXMgaG93IGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAgaXMgdXNlZCwgYW5kIGl0IGRvZXMgc28gd2l0aGluIHRocmVlIHNwZWNpZmljIEdQVSBkcml2ZXJzOiBgYW1keGRuYWAsIGBkcm1fZ3B1c3ZtLmNgLCBhbmQgYG5vdXZlYXVgLiBBIHF1aWNrIGxvb2sgYXQgdGhlIGNvZGUgY29uZmlybXMgdGhhdCBgZHJtX2dwdXN2bS5jYCBpcyBleGNsdXNpdmVseSB1c2VkIGJ5IHRoZSBgeGVgIGRyaXZlci4gVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCBgeGVgLCBgYW1keGRuYWAsIGFuZCBgbm91dmVhdWAgYXJlIGFsbCBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzLiBUaGV5IGFyZSBkZXNpZ25lZCB0byBpbnRlcmZhY2Ugd2l0aCBwYXJ0aWN1bGFyIEdQVXPigJRBTUQgWEROQSwgSW50ZWwgWGUsIGFuZCBOVklESUEgR1BVcywgcmVzcGVjdGl2ZWx5LiBUaGVzZSBkcml2ZXJzIGFyZSBub3QgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VIHdpdGhvdXQgaGFyZHdhcmUgcGFzc3Rocm91Z2guCgpJIG5lZWQgdG8gY29uZmlybSBpZiBgbm91dmVhdWAgY2FuIGV2ZW4gYmUgZnV6emVkLCBnaXZlbiBTeXprYWxsZXImIzM5O3MgY3VycmVudCBjb25maWd1cmF0aW9uLiBJIGtub3cgU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgTlZJRElBIEdQVXMgaW4gaXRzIHZpcnR1YWwgbWFjaGluZXMuIEkmIzM5O20gcHJldHR5IGNlcnRhaW4gdGhhdCB0aGUgYG5vdXZlYXVgIGRyaXZlciBjYW4mIzM5O3QgYmUgaW5pdGlhbGl6ZWQgd2l0aG91dCB0aGUgaGFyZHdhcmUuIEl0JiMzOTtzIGEgUENJIGRyaXZlciBhbmQgYmluZHMgdG8gTlZJRElBIFBDSSBkZXZpY2VzLiBXaXRob3V0IHRoZSBzcGVjaWZpYyBoYXJkd2FyZSwgdGhlIGRyaXZlciYjMzk7cyBgcHJvYmVgIGZ1bmN0aW9uIHdvbiYjMzk7dCBiZSBjYWxsZWQsIGFuZCB0aHVzLCBpdHMgaW9jdGxzIHdvbiYjMzk7dCBiZSByZWdpc3RlcmVkLiBUaGUgc2FtZSBsb2dpYyBhcHBsaWVzIHRvIGBhbWR4ZG5hYCBhbmQgYHhlYC4KCkdpdmVuIHRoaXMsIHRoZSBjaGFuZ2VzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCBhcmUsIGluIGVzc2VuY2UsIGRlYWQgY29kZSBpbiBvdXIgY3VycmVudCBmdXp6aW5nIHNldHVwLiBUaGV5JiMzOTtyZSBtb2RpZnlpbmcgY29kZSBwYXRocyB0aGF0IGFyZSBpbmhlcmVudGx5IHVucmVhY2hhYmxlIHdpdGhpbiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdlJiMzOTtyZSB1c2luZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGNvcnJlY3QgYWJvdXQgYGRybV9ncHVzdm0uY2AgYW5kIGl0cyByZWxhdGlvbiB0byBgdmttc2AgYW5kIGB2Z2VtYCBiZWZvcmUgSSYjMzk7bSAxMDAlIHN1cmUuIAoKVGhlcmVmb3JlLCBJIG5lZWQgdG8gZmxhZyB0aGlzIGFzIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGFuZCBwcm92aWRlIHRoZSByZWFzb25pbmc6IHRoZSBwYXRjaCBtb2RpZmllcyBjb2RlIHdpdGhpbiBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzIChgYW1keGRuYWAsIGB4ZWAgdmlhIGBkcm1fZ3B1c3ZtLmNgLCBhbmQgYG5vdXZlYXVgKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIG9yIGhhcmR3YXJlIGVtdWxhdGlvbiB3aGljaCB3ZSBkb24mIzM5O3QgaGF2ZSBhdmFpbGFibGUgaW4gR0NFL1FFTVUsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBpbXBvc3NpYmxlIHRvIGV4ZWN1dGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHJtX2dwdXN2bSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS92a21zJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY1NzgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwODowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RybV9ncHVzdm0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vdmdlbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NjI1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkNvbmZpcm1pbmcgUENJIERyaXZlciBTdGF0dXMqKgoKUmlnaHQsIHNvIEkmIzM5O20gc2VlaW5nIHRoaXMgdGhpbmcsIGFuZCB0aGUga2V5IG9ic2VydmF0aW9uIGlzIHRoYXQgaXQmIzM5O3MgKm5vdCogYmVpbmcgdXRpbGl6ZWQgYnkgdGhlIHRhcmdldCBncm91cC4gVGhhdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgaXNzdWUuCgpOb3csIEkgbmVlZCB0byBnZXQgYSBmaXJtIGdyYXNwIG9uIHRoZSB0ZWNobmljYWwgYXNwZWN0cyBiZWZvcmUgSSBjYW4gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBkcml2ZXIgaXNzdWUsIGEgY29uZmlnIGlzc3VlLCBvciBzb21lIG90aGVyIHByb2JsZW0uIExldCBtZSBxdWlja2x5IGNvbmZpcm0gdGhhdCBgYW1keGRuYWAgaXMgaW5kZWVkIGZ1bmN0aW9uaW5nIGFzIGEgUENJIGRyaXZlci4gVGhpcyBpcyBmdW5kYW1lbnRhbCBmb3IgbWUgdG8gcHJvY2VlZC4gSWYgaXQgaXNuJiMzOTt0LCB0aGVuIGV2ZXJ5dGhpbmcgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYWNjZWwvYW1keGRuYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9wY2lfZHJ2LmM9NDc1PXN0YXRpYyBpbnQgYW1keGRuYV9zcmlvdl9jb25maWd1cmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudW1fdmZzKVxuLS1cbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX3BjaV9kcnYuYy00ODUtXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9wY2lfZHJ2LmM6NDg2OnN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhbWR4ZG5hX3BjaV9kcml2ZXIgPSB7XG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9wY2lfZHJ2LmMtNDg3LVx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcbi0tXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9wY2lfZHJ2LmMtNDk0LVxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfcGNpX2Rydi5jOjQ5NTptb2R1bGVfcGNpX2RyaXZlcihhbWR4ZG5hX3BjaV9kcml2ZXIpO1xuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfcGNpX2Rydi5jLTQ5Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcwNzQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyByZXF1ZXN0ZWQ6CgoqKlBDSSBEcml2ZXIgVmVyaWZpY2F0aW9uIC0gUXVpY2sgVGhvdWdodHMqKgoKQWxyaWdodCwgeWVwLCB0aGF0IGxvb2tzIGxpa2UgYSBQQ0kgZHJpdmVyLCBubyBxdWVzdGlvbiBhYm91dCBpdC4gTm93LCBqdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrLCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IGB4ZWAgaXMgKmRlZmluaXRlbHkqIGFjdGluZyBhcyBhIFBDSSBkcml2ZXIuIEl0JiMzOTtzIGFsd2F5cyBnb29kIHByYWN0aWNlIHRvIGRvdWJsZS1jaGVjayB0aGVzZSBhc3N1bXB0aW9ucyBiZWZvcmUgbW92aW5nIGZvcndhcmQuIEkmIzM5O2xsIGp1c3QgcnVuIGEgcXVpY2sgZGlhZ25vc3RpYywgbm90aGluZyBtYWpvciwganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhlIGluaXRpYWwgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS94ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0veGUvdGVzdHMveGVfcGNpLmM9NDA1PWNvbnN0IHZvaWQgKnhlX3BjaV9saXZlX2RldmljZV9nZW5fcGFyYW0oc3RydWN0IGt1bml0ICp0ZXN0LCBjb25zdCB2b2lkICpwcmV2LCBjaGFyICpkZXNjKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS90ZXN0cy94ZV9wY2kuYy00MTAtXG5kcml2ZXJzL2dwdS9kcm0veGUvdGVzdHMveGVfcGNpLmM6NDExOlx0bmV4dCA9IGRyaXZlcl9maW5kX25leHRfZGV2aWNlKFx1MDAyNnhlX3BjaV9kcml2ZXIuZHJpdmVyLCBkZXYpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3Rlc3RzL3hlX3BjaS5jLTQxMi1cdGlmIChkZXYpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2NvbmZpZ2ZzLmM9MTAwNj1zdGF0aWMgY29uc3Qgc3RydWN0IHhlX2RldmljZV9kZXNjICp4ZV9tYXRjaF9kZXNjKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9jb25maWdmcy5jLTEwMDgtXHRzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyID0gZHJpdmVyX2ZpbmQoXCYjMzQ7eGVcJiMzNDssIFx1MDAyNnBjaV9idXNfdHlwZSk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfY29uZmlnZnMuYzoxMDA5Olx0c3RydWN0IHBjaV9kcml2ZXIgKmRydiA9IHRvX3BjaV9kcml2ZXIoZHJpdmVyKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9jb25maWdmcy5jLTEwMTAtXHRjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWRzID0gZHJ2ID8gZHJ2LVx1MDAzZWlkX3RhYmxlIDogTlVMTDtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfbW9kdWxlLmM9OTY9c3RhdGljIGNvbnN0IHN0cnVjdCBpbml0X2Z1bmNzIGluaXRfZnVuY3NbXSA9IHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfbW9kdWxlLmMtMTEyLVx0e1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX21vZHVsZS5jOjExMzpcdFx0LmluaXQgPSB4ZV9yZWdpc3Rlcl9wY2lfZHJpdmVyLFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX21vZHVsZS5jOjExNDpcdFx0LmV4aXQgPSB4ZV91bnJlZ2lzdGVyX3BjaV9kcml2ZXIsXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfbW9kdWxlLmMtMTE1LVx0fSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmM9MTQyND1zdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgeGVfcG1fb3BzID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xNDI5LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jOjE0MzA6c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHhlX3BjaV9kcml2ZXIgPSB7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmMtMTQzMS1cdC5uYW1lID0gRFJJVkVSX05BTUUsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jPTE0NDk9c3RydWN0IHhlX2RldmljZSAqeGVfcGNpX3RvX3BmX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmMtMTQ1Mi1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYzoxNDUzOlx0ZHJtID0gcGNpX2lvdl9nZXRfcGZfZHJ2ZGF0YShwZGV2LCBcdTAwMjZ4ZV9wY2lfZHJpdmVyKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xNDU0LVx0aWYgKElTX0VSUihkcm0pKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xNDU5LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jOjE0NjA6aW50IHhlX3JlZ2lzdGVyX3BjaV9kcml2ZXIodm9pZClcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xNDYxLXtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYzoxNDYyOlx0cmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoXHUwMDI2eGVfcGNpX2RyaXZlcik7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmMtMTQ2My19XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmMtMTQ2NC1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYzoxNDY1OnZvaWQgeGVfdW5yZWdpc3Rlcl9wY2lfZHJpdmVyKHZvaWQpXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmMtMTQ2Ni17XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmM6MTQ2NzpcdHBjaV91bnJlZ2lzdGVyX2RyaXZlcihcdTAwMjZ4ZV9wY2lfZHJpdmVyKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xNDY4LX1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmg9OT1zdHJ1Y3QgcGNpX2RldjtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuaC0xMC1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuaDoxMTppbnQgeGVfcmVnaXN0ZXJfcGNpX2RyaXZlcih2b2lkKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuaDoxMjp2b2lkIHhlX3VucmVnaXN0ZXJfcGNpX2RyaXZlcih2b2lkKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuaC0xMy1zdHJ1Y3QgeGVfZGV2aWNlICp4ZV9wY2lfdG9fcGZfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpX3NyaW92LmM9MTc2PXN0YXRpYyBpbnQgcGZfZGlzYWJsZV92ZnMoc3RydWN0IHhlX2RldmljZSAqeGUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaV9zcmlvdi5jLTIxMy0gKlxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaV9zcmlvdi5jOjIxNDogKiBUaGlzIGlzIHRoZSBYZSBpbXBsZW1lbnRhdGlvbiBvZiBzdHJ1Y3QgcGNpX2RyaXZlci5zcmlvdl9jb25maWd1cmUgY2FsbGJhY2suXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpX3NyaW92LmMtMjE1LSAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4NTQwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uZmlybWluZyBQQ0kgRHJpdmVyIElkZW50aXR5KioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgUENJIGRyaXZlciwgdGhhdCYjMzk7cyBjbGVhciBlbm91Z2guIE5vdywgSSB3YW50IHRvIHF1aWNrbHkgc29saWRpZnkgdGhhdCB0aGlzICpub3V2ZWF1KiBkcml2ZXIgaXMgaW5kZWVkIHRoZSBvbmUgd2UmIzM5O3JlIGxvb2tpbmcgYXQuIEdvdHRhIGJlIGNlcnRhaW4gYmVmb3JlIEkgZ28gZGVlcGVyIGRvd24gdGhhdCByYWJiaXQgaG9sZS4gSSBrbm93IHRoZSBiYXNpY3MsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSBhbGwgdGhlIHBpZWNlcyBvZiB0aGUgcHV6emxlIGJlZm9yZSBJIHN0YXJ0IHRyeWluZyB0byBwdXQgdGhlbSB0b2dldGhlci4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IHRoZSBtb2R1bGUgbmFtZSBgbm91dmVhdWAgY29ycmVzcG9uZHMgd2l0aCBhIFBDSSBkZXZpY2UgZHJpdmVyLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZS4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjaV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vbm91dmVhdSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RybS5jPTE0MjU9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIG5vdXZlYXVfcG1fb3BzID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJtLmMtMTQzNi1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJtLmM6MTQzNzpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXJcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJtLmM6MTQzODpub3V2ZWF1X2RybV9wY2lfZHJpdmVyID0ge1xuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcm0uYy0xNDM5LVx0Lm5hbWUgPSBcJiMzNDtub3V2ZWF1XCYjMzQ7LFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJtLmM9MTQ4MD1ub3V2ZWF1X2RybV9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcm0uYy0xNTA2LSNpZmRlZiBDT05GSUdfUENJXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RybS5jOjE1MDc6XHRyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKFx1MDAyNm5vdXZlYXVfZHJtX3BjaV9kcml2ZXIpO1xuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcm0uYy0xNTA4LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJtLmM9MTUxOD1ub3V2ZWF1X2RybV9leGl0KHZvaWQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcm0uYy0xNTIzLSNpZmRlZiBDT05GSUdfUENJXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RybS5jOjE1MjQ6XHRwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoXHUwMDI2bm91dmVhdV9kcm1fcGNpX2RyaXZlcik7XG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RybS5jLTE1MjUtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA4OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5MTUxCgkJCQkJCQlvdXRwdXQ6IDE3MAoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOgoKKipBbmFseXppbmcgdGhlIFBhdGNoIGFuZCBJdHMgSW1wYWN0KioKCkFscmlnaHQsIHllcCwgdGhhdCBjb25maXJtcyBpdCDigJMgdGhpcyBpcyBkZWZpbml0ZWx5IGEgUENJIGRyaXZlciB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiBBbmQgbG9va2luZyBhdCB0aGUgY29udGV4dCwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHdoZXJlIHRoZSBwcm9ibGVtIGxpZXMuIFRoZSBwYXRjaCB0b3VjaGVzIHRocmVlIGRyaXZlcnMsIGFuZCB0aGV5IGFyZSAqYWxsKiBoYXJkd2FyZS1zcGVjaWZpYyBQQ0kgZHJpdmVycy4gV2hhdCB0aGF0IG1lYW5zIGlzIHRoZXkmIzM5O3JlIGNvZGVkIHRvIGludGVyYWN0IGRpcmVjdGx5IHdpdGggdGhlIHBoeXNpY2FsIGhhcmR3YXJlIGNvbXBvbmVudHMgb24gYSBQQ0kgYnVzLiBUaGV5JiMzOTtyZSBub3QgZ2VuZXJpYywgYW5kIGNydWNpYWxseSwgdGhleSBuZWVkIHRoYXQgKnNwZWNpZmljKiBoYXJkd2FyZSB0byBmdW5jdGlvbi4KCk5vdywgY29uc2lkZXJpbmcgdGhlIGVudmlyb25tZW50IHdlJiMzOTtyZSB3b3JraW5nIHdpdGgsIHN5emthbGxlciwgaXQgYWxsIGZhbGxzIGludG8gcGxhY2UuIFN5emthbGxlciYjMzk7cyBzdHJlbmd0aCBpcyBpdHMgZnV6emluZyBjYXBhYmlsaXRpZXMgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLCB3aGljaCBpcyBwZXJmZWN0IGZvciBpc29sYXRpbmcgYnVncy4gQnV0IGJlY2F1c2UgdGhlc2UgZHJpdmVycyByZXF1aXJlICpyZWFsKiBwaHlzaWNhbCBQQ0kgaGFyZHdhcmUsIGFuZCB0aGVyZSBhcmUgbm8gZHVtbXkgb3IgdmlydHVhbCBkZXZpY2VzIHNldCB1cCB0byBtaW1pYyB0aGF0IGhhcmR3YXJlIHdpdGhpbiBzeXprYWxsZXImIzM5O3MgdmlydHVhbCBlbnZpcm9ubWVudCwgdGhlIGNvZGUgcGF0aHMgdG91Y2hlZCBieSB0aGUgcGF0Y2ggYXJlIHNpbXBseSB1bnJlYWNoYWJsZS4gV2UmIzM5O3JlIGVmZmVjdGl2ZWx5IGRlYWxpbmcgd2l0aCBkZWFkIGNvZGUgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LgoKVGhlcmVmb3JlLCBJJiMzOTttIHJlYWR5IHRvIGZvcm11bGF0ZSBteSByZXNwb25zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDg6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdXNhZ2Ugb2YgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCBpbiB0aHJlZSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzOiBBTUQgWEROQSAoYGRyaXZlcnMvYWNjZWwvYW1keGRuYWApLCBJbnRlbCBYZSAoYGRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNgLCB3aGljaCBpcyBvbmx5IHVzZWQgYnkgYHhlYCksIGFuZCBOb3V2ZWF1IChgZHJpdmVycy9ncHUvZHJtL25vdXZlYXVgKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIChBTUQgWEROQSBOUFUsIEludGVsIFhlIEdQVSwgTlZJRElBIEdQVSkgdG8gaW5pdGlhbGl6ZSBhbmQgZXhwb3NlIHRoZWlyIGludGVyZmFjZXMuIFNpbmNlIHN5emthbGxlciBvcGVyYXRlcyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKEdDRS9RRU1VKSB3aXRob3V0IHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgb3Igc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGVtLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHVzYWdlIG9mIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAgaW4gdGhyZWUgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyczogQU1EIFhETkEgKGBkcml2ZXJzL2FjY2VsL2FtZHhkbmFgKSwgSW50ZWwgWGUgKGBkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jYCwgd2hpY2ggaXMgb25seSB1c2VkIGJ5IGB4ZWApLCBhbmQgTm91dmVhdSAoYGRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1YCkuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSAoQU1EIFhETkEgTlBVLCBJbnRlbCBYZSBHUFUsIE5WSURJQSBHUFUpIHRvIGluaXRpYWxpemUgYW5kIGV4cG9zZSB0aGVpciBpbnRlcmZhY2VzLiBTaW5jZSBzeXprYWxsZXIgb3BlcmF0ZXMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChHQ0UvUUVNVSkgd2l0aG91dCB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIG9yIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhlbSwgdGhlc2UgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowMzoyMy43MDUwNjQ3NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDI1NDk2NjIyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHVzYWdlIG9mIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAgaW4gdGhyZWUgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyczogQU1EIFhETkEgKGBkcml2ZXJzL2FjY2VsL2FtZHhkbmFgKSwgSW50ZWwgWGUgKGBkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jYCwgd2hpY2ggaXMgb25seSB1c2VkIGJ5IGB4ZWApLCBhbmQgTm91dmVhdSAoYGRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1YCkuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSAoQU1EIFhETkEgTlBVLCBJbnRlbCBYZSBHUFUsIE5WSURJQSBHUFUpIHRvIGluaXRpYWxpemUgYW5kIGV4cG9zZSB0aGVpciBpbnRlcmZhY2VzLiBTaW5jZSBzeXprYWxsZXIgb3BlcmF0ZXMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChHQ0UvUUVNVSkgd2l0aG91dCB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIG9yIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhlbSwgdGhlc2UgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6ei5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjAzOjIzLjcwNTA2OTk0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzEyNTAxNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiNWYyZDhkNzkyN2Y5MjA4N2E0MzdmMDE4MmU3ZmYxYTk3ZjE1MDI4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDE1IDA4OjAzOjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdFxcbmluZGV4IDVjODhkMmNmMDgxODMzLi5mYzFiOGRjMTk4MjUwZSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3RcXG5AQCAtMjA2LDcgKzIwNiw3IEBAIFRoZSB1c2FnZSBwYXR0ZXJuIGlzOjpcXG4gICAgICAgICAgIGdvdG8gb3V0X3B1dDtcXG4gXFxuICAgICAgIHRha2VfbG9jayhkcml2ZXItXFx1MDAzZXVwZGF0ZSk7XFxuLSAgICAgIGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShcXHUwMDI2aW50ZXJ2YWxfc3ViLCByYW5nZS5ub3RpZmllcl9zZXEpKSB7XFxuKyAgICAgIGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShyYW5nZS5ub3RpZmllciwgcmFuZ2Uubm90aWZpZXJfc2VxKSkge1xcbiAgICAgICAgICAgcmVsZWFzZV9sb2NrKGRyaXZlci1cXHUwMDNldXBkYXRlKTtcXG4gICAgICAgICAgIGdvdG8gYWdhaW47XFxuICAgICAgIH1cXG5AQCAtMjI1LDcgKzIyNSw4IEBAIFRoZSB1c2FnZSBwYXR0ZXJuIGlzOjpcXG4gVGhlIGRyaXZlci1cXHUwMDNldXBkYXRlIGxvY2sgaXMgdGhlIHNhbWUgbG9jayB0aGF0IHRoZSBkcml2ZXIgdGFrZXMgaW5zaWRlIGl0c1xcbiBpbnZhbGlkYXRlKCkgY2FsbGJhY2suIFRoYXQgbG9jayBtdXN0IGJlIGhlbGQgYmVmb3JlIGNhbGxpbmdcXG4gbW11X2ludGVydmFsX3JlYWRfcmV0cnkoKSB0byBhdm9pZCBhbnkgcmFjZSB3aXRoIGEgY29uY3VycmVudCBDUFUgcGFnZSB0YWJsZVxcbi11cGRhdGUuXFxuK3VwZGF0ZS4gVGhlIHJldHJ5IGNoZWNrIG11c3QgdXNlIHRoZSBzYW1lIG5vdGlmaWVyIGFuZCBzZXF1ZW5jZSBudW1iZXIgc3RvcmVkXFxuK2luIGBgcmFuZ2VgYCBieSBgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KClgYC5cXG4gXFxuIEhvbGRpbmcgdGhlIG1tYXAgbG9jayBhY3Jvc3MgSE1NIGZhdWx0c1xcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfY3R4LmMgYi9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguY1xcbmluZGV4IDU0OGJhNDMxNTU1NGZmLi4yMWYyODE3NzUxZjllNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguY1xcbisrKyBiL2RyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jXFxuQEAgLTEwMzcsNyArMTAzNyw3IEBAIHN0YXRpYyBpbnQgYWllMl9wb3B1bGF0ZV9yYW5nZShzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICphYm8pXFxuIFxcdGJvb2wgZm91bmQ7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHR0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XFxuK1xcdHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xcbiBhZ2FpbjpcXG4gXFx0Zm91bmQgPSBmYWxzZTtcXG4gXFx0ZG93bl93cml0ZShcXHUwMDI2eGRuYS1cXHUwMDNlbm90aWZpZXJfbG9jayk7XFxuQEAgLTEwNjIsMTMgKzEwNjIsOSBAQCBzdGF0aWMgaW50IGFpZTJfcG9wdWxhdGVfcmFuZ2Uoc3RydWN0IGFtZHhkbmFfZ2VtX29iaiAqYWJvKVxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFx0fVxcbiBcXG4tXFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXFx1MDAyNm1hcHAtXFx1MDAzZXJhbmdlLFxcbi1cXHRcXHRcXHRtYXhfdChsb25nLCB0aW1lb3V0IC0gamlmZmllcywgMSkpO1xcbi1cXHRpZiAocmV0KSB7XFxuLVxcdFxcdGlmIChyZXQgPT0gLUVCVVNZKVxcbi1cXHRcXHRcXHRyZXQgPSAtRVRJTUU7XFxuK1xcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZtYXBwLVxcdTAwM2VyYW5nZSwgdGltZW91dCk7XFxuK1xcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gcHV0X21tO1xcbi1cXHR9XFxuIFxcbiBcXHRkb3duX3dyaXRlKFxcdTAwMjZ4ZG5hLVxcdTAwM2Vub3RpZmllcl9sb2NrKTtcXG4gXFx0aWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KFxcdTAwMjZtYXBwLVxcdTAwM2Vub3RpZmllciwgbWFwcC1cXHUwMDNlcmFuZ2Uubm90aWZpZXJfc2VxKSkge1xcbkBAIC0xMDg2LDcgKzEwODIsNyBAQCBzdGF0aWMgaW50IGFpZTJfcG9wdWxhdGVfcmFuZ2Uoc3RydWN0IGFtZHhkbmFfZ2VtX29iaiAqYWJvKVxcbiBwdXRfbW06XFxuIFxcdGFtZHhkbmFfdW1hcF9wdXQobWFwcCk7XFxuIFxcdG1tcHV0KG1tKTtcXG4tXFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0dXJuIHJldCA9PSAtRUJVU1kgPyAtRVRJTUUgOiByZXQ7XFxuIH1cXG4gXFxuIGludCBhaWUyX2NtZF9zdWJtaXQoc3RydWN0IGFtZHhkbmFfaHdjdHggKmh3Y3R4LCBzdHJ1Y3QgYW1keGRuYV9zY2hlZF9qb2IgKmpvYiwgdTY0ICpzZXEpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jXFxuaW5kZXggYjhmMmRkOTk4MmY1M2MuLjc2ZThhMDAyOGM3ZmM5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNcXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jXFxuQEAgLTg1Miw4ICs4NTIsNyBAQCBlbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgZHJtX2dwdXN2bV9zY2FuX21tKHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSxcXG4gXFx0XFx0LmVuZCA9IGVuZCxcXG4gXFx0XFx0LmRldl9wcml2YXRlX293bmVyID0gZGV2X3ByaXZhdGVfb3duZXIsXFxuIFxcdH07XFxuLVxcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9XFxuLVxcdFxcdGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xcbitcXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xcbiBcXHRlbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgc3RhdGUgPSBEUk1fR1BVU1ZNX1NDQU5fVU5QT1BVTEFURUQsIG5ld19zdGF0ZTtcXG4gXFx0dW5zaWduZWQgbG9uZyAqcGZucztcXG4gXFx0dW5zaWduZWQgbG9uZyBucGFnZXMgPSBucGFnZXNfaW5fcmFuZ2Uoc3RhcnQsIGVuZCk7XFxuQEAgLTg2Nyw4ICs4NjYsNyBAQCBlbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgZHJtX2dwdXN2bV9zY2FuX21tKHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSxcXG4gXFx0aG1tX3JhbmdlLmhtbV9wZm5zID0gcGZucztcXG4gXFxuIHJldHJ5Olxcbi1cXHRlcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcXHUwMDI2aG1tX3JhbmdlLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgbWF4KHRpbWVvdXQgLSBqaWZmaWVzLCAxTCkpO1xcbitcXHRlcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcXHUwMDI2aG1tX3JhbmdlLCB0aW1lb3V0KTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfZnJlZTtcXG4gXFxuQEAgLTE0NTksOCArMTQ1Nyw3IEBAIGludCBkcm1fZ3B1c3ZtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbiBcXHRcXHQuZGV2X3ByaXZhdGVfb3duZXIgPSBjdHgtXFx1MDAzZWRldmljZV9wcml2YXRlX3BhZ2Vfb3duZXIsXFxuIFxcdH07XFxuIFxcdHZvaWQgKnpkZDtcXG4tXFx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID1cXG4tXFx0XFx0amlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgaSwgajtcXG4gXFx0dW5zaWduZWQgbG9uZyBucGFnZXMgPSBucGFnZXNfaW5fcmFuZ2UocGFnZXNfc3RhcnQsIHBhZ2VzX2VuZCk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnVtX2RtYV9tYXBwZWQ7XFxuQEAgLTE0NzgsOSArMTQ3NSw2IEBAIGludCBkcm1fZ3B1c3ZtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIHJldHJ5Olxcbi1cXHRpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSlcXG4tXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tXFxuIFxcdGhtbV9yYW5nZS5ub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihub3RpZmllcik7XFxuIFxcdGlmIChkcm1fZ3B1c3ZtX3BhZ2VzX3ZhbGlkX3VubG9ja2VkKGdwdXN2bSwgc3ZtX3BhZ2VzKSlcXG4gXFx0XFx0Z290byBzZXRfc2Vxbm87XFxuQEAgLTE0OTUsOCArMTQ4OSw3IEBAIGludCBkcm1fZ3B1c3ZtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbiBcXHR9XFxuIFxcbiBcXHRobW1fcmFuZ2UuaG1tX3BmbnMgPSBwZm5zO1xcbi1cXHRlcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcXHUwMDI2aG1tX3JhbmdlLFxcbi1cXHRcXHRcXHRcXHRtYXhfdChsb25nLCB0aW1lb3V0IC0gamlmZmllcywgMSkpO1xcbitcXHRlcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcXHUwMDI2aG1tX3JhbmdlLCB0aW1lb3V0KTtcXG4gXFx0bW1wdXQobW0pO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGVycl9mcmVlO1xcbkBAIC0xNzE4LDggKzE3MTEsNyBAQCBpbnQgZHJtX2dwdXN2bV9yYW5nZV9ldmljdChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbiBcXHRcXHQuZW5kID0gZHJtX2dwdXN2bV9yYW5nZV9lbmQocmFuZ2UpLFxcbiBcXHRcXHQuZGV2X3ByaXZhdGVfb3duZXIgPSBOVUxMLFxcbiBcXHR9O1xcbi1cXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPVxcbi1cXHRcXHRqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcXG4rXFx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcXG4gXFx0dW5zaWduZWQgbG9uZyAqcGZucztcXG4gXFx0dW5zaWduZWQgbG9uZyBucGFnZXMgPSBucGFnZXNfaW5fcmFuZ2UoZHJtX2dwdXN2bV9yYW5nZV9zdGFydChyYW5nZSksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBkcm1fZ3B1c3ZtX3JhbmdlX2VuZChyYW5nZSkpO1xcbkBAIC0xNzM0LDggKzE3MjYsNyBAQCBpbnQgZHJtX2dwdXN2bV9yYW5nZV9ldmljdChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdGhtbV9yYW5nZS5obW1fcGZucyA9IHBmbnM7XFxuLVxcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZobW1fcmFuZ2UsXFxuLVxcdFxcdFxcdFxcdG1heF90KGxvbmcsIHRpbWVvdXQgLSBqaWZmaWVzLCAxKSk7XFxuK1xcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZobW1fcmFuZ2UsIHRpbWVvdXQpO1xcbiBcXG4gXFx0a3ZmcmVlKHBmbnMpO1xcbiBcXHRtbXB1dChtbSk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jXFxuaW5kZXggNGNmYjZlYjdjNzcxNWEuLjU4NzM1NDQ2ZDc4MzJjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmNcXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jXFxuQEAgLTY3OCwxNCArNjc4LDIwIEBAIHN0YXRpYyBpbnQgbm91dmVhdV9yYW5nZV9mYXVsdChzdHJ1Y3Qgbm91dmVhdV9zdm1tICpzdm1tLFxcbiBcXHRyYW5nZS5lbmQgPSBub3RpZmllci1cXHUwMDNlbm90aWZpZXIuaW50ZXJ2YWxfdHJlZS5sYXN0ICsgMTtcXG4gXFxuIFxcdHdoaWxlICh0cnVlKSB7XFxuLVxcdFxcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7XFxuK1xcdFxcdGxvbmcgcmVtYWluaW5nID0gdGltZW91dCAtIGppZmZpZXM7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBUaGUgSE1NIHRpbWVvdXQgb25seSBib3VuZHMgcmV0cmllcyB3aGlsZSBITU0gaXMgd2Fsa2luZyBhbmRcXG4rXFx0XFx0ICogZmF1bHRpbmcgdGhlIHJhbmdlLiBUaGlzIGZhdWx0IGlzIGhhbmRsZWQgYnkgYSBrZXJuZWwgd29ya2VyLFxcbitcXHRcXHQgKiBzbyBmYXRhbCBzaWduYWxzIGZyb20gdGhlIGZhdWx0aW5nIHByb2Nlc3MgY2Fubm90IHN0b3AgYW5cXG4rXFx0XFx0ICogZW5kbGVzcyBzdHJlYW0gb2YgaW52YWxpZGF0aW9ucyBoZXJlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgdGltZW91dCkpIHtcXG4gXFx0XFx0XFx0cmV0ID0gLUVCVVNZO1xcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXFx1MDAyNnJhbmdlLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgbWF4KHRpbWVvdXQgLSBqaWZmaWVzLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAxTCkpO1xcbitcXHRcXHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcXHUwMDI2cmFuZ2UsIHJlbWFpbmluZyk7XFxuIFxcdFxcdGlmIChyZXQpXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDM6MjQuMjc2OTg4MTE1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjM2ODMwMzc3MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB1c2FnZSBvZiBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIGluIHRocmVlIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnM6IEFNRCBYRE5BIChgZHJpdmVycy9hY2NlbC9hbWR4ZG5hYCksIEludGVsIFhlIChgZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY2AsIHdoaWNoIGlzIG9ubHkgdXNlZCBieSBgeGVgKSwgYW5kIE5vdXZlYXUgKGBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdWApLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgKEFNRCBYRE5BIE5QVSwgSW50ZWwgWGUgR1BVLCBOVklESUEgR1BVKSB0byBpbml0aWFsaXplIGFuZCBleHBvc2UgdGhlaXIgaW50ZXJmYWNlcy4gU2luY2Ugc3l6a2FsbGVyIG9wZXJhdGVzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoR0NFL1FFTVUpIHdpdGhvdXQgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBvciBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoZW0sIHRoZXNlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enouXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGI1ZjJkOGQ3OTI3ZjkyMDg3YTQzN2YwMTgyZTdmZjFhOTdmMTUwMjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxNSAwODowMzoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdFxuaW5kZXggNWM4OGQyY2YwODE4MzMuLmZjMWI4ZGMxOTgyNTBlIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3RcbkBAIC0yMDYsNyArMjA2LDcgQEAgVGhlIHVzYWdlIHBhdHRlcm4gaXM6OlxuICAgICAgICAgICBnb3RvIG91dF9wdXQ7XG4gXG4gICAgICAgdGFrZV9sb2NrKGRyaXZlci1cdTAwM2V1cGRhdGUpO1xuLSAgICAgIGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShcdTAwMjZpbnRlcnZhbF9zdWIsIHJhbmdlLm5vdGlmaWVyX3NlcSkpIHtcbisgICAgICBpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkocmFuZ2Uubm90aWZpZXIsIHJhbmdlLm5vdGlmaWVyX3NlcSkpIHtcbiAgICAgICAgICAgcmVsZWFzZV9sb2NrKGRyaXZlci1cdTAwM2V1cGRhdGUpO1xuICAgICAgICAgICBnb3RvIGFnYWluO1xuICAgICAgIH1cbkBAIC0yMjUsNyArMjI1LDggQEAgVGhlIHVzYWdlIHBhdHRlcm4gaXM6OlxuIFRoZSBkcml2ZXItXHUwMDNldXBkYXRlIGxvY2sgaXMgdGhlIHNhbWUgbG9jayB0aGF0IHRoZSBkcml2ZXIgdGFrZXMgaW5zaWRlIGl0c1xuIGludmFsaWRhdGUoKSBjYWxsYmFjay4gVGhhdCBsb2NrIG11c3QgYmUgaGVsZCBiZWZvcmUgY2FsbGluZ1xuIG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KCkgdG8gYXZvaWQgYW55IHJhY2Ugd2l0aCBhIGNvbmN1cnJlbnQgQ1BVIHBhZ2UgdGFibGVcbi11cGRhdGUuXG4rdXBkYXRlLiBUaGUgcmV0cnkgY2hlY2sgbXVzdCB1c2UgdGhlIHNhbWUgbm90aWZpZXIgYW5kIHNlcXVlbmNlIG51bWJlciBzdG9yZWRcbitpbiBgYHJhbmdlYGAgYnkgYGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpYGAuXG4gXG4gSG9sZGluZyB0aGUgbW1hcCBsb2NrIGFjcm9zcyBITU0gZmF1bHRzXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfY3R4LmMgYi9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguY1xuaW5kZXggNTQ4YmE0MzE1NTU0ZmYuLjIxZjI4MTc3NTFmOWU3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfY3R4LmNcbisrKyBiL2RyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jXG5AQCAtMTAzNyw3ICsxMDM3LDcgQEAgc3RhdGljIGludCBhaWUyX3BvcHVsYXRlX3JhbmdlKHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKmFibylcbiBcdGJvb2wgZm91bmQ7XG4gXHRpbnQgcmV0O1xuIFxuLVx0dGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xuK1x0dGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XG4gYWdhaW46XG4gXHRmb3VuZCA9IGZhbHNlO1xuIFx0ZG93bl93cml0ZShcdTAwMjZ4ZG5hLVx1MDAzZW5vdGlmaWVyX2xvY2spO1xuQEAgLTEwNjIsMTMgKzEwNjIsOSBAQCBzdGF0aWMgaW50IGFpZTJfcG9wdWxhdGVfcmFuZ2Uoc3RydWN0IGFtZHhkbmFfZ2VtX29iaiAqYWJvKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdH1cbiBcbi1cdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNm1hcHAtXHUwMDNlcmFuZ2UsXG4tXHRcdFx0bWF4X3QobG9uZywgdGltZW91dCAtIGppZmZpZXMsIDEpKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0aWYgKHJldCA9PSAtRUJVU1kpXG4tXHRcdFx0cmV0ID0gLUVUSU1FO1xuK1x0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2bWFwcC1cdTAwM2VyYW5nZSwgdGltZW91dCk7XG4rXHRpZiAocmV0KVxuIFx0XHRnb3RvIHB1dF9tbTtcbi1cdH1cbiBcbiBcdGRvd25fd3JpdGUoXHUwMDI2eGRuYS1cdTAwM2Vub3RpZmllcl9sb2NrKTtcbiBcdGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShcdTAwMjZtYXBwLVx1MDAzZW5vdGlmaWVyLCBtYXBwLVx1MDAzZXJhbmdlLm5vdGlmaWVyX3NlcSkpIHtcbkBAIC0xMDg2LDcgKzEwODIsNyBAQCBzdGF0aWMgaW50IGFpZTJfcG9wdWxhdGVfcmFuZ2Uoc3RydWN0IGFtZHhkbmFfZ2VtX29iaiAqYWJvKVxuIHB1dF9tbTpcbiBcdGFtZHhkbmFfdW1hcF9wdXQobWFwcCk7XG4gXHRtbXB1dChtbSk7XG4tXHRyZXR1cm4gcmV0O1xuK1x0cmV0dXJuIHJldCA9PSAtRUJVU1kgPyAtRVRJTUUgOiByZXQ7XG4gfVxuIFxuIGludCBhaWUyX2NtZF9zdWJtaXQoc3RydWN0IGFtZHhkbmFfaHdjdHggKmh3Y3R4LCBzdHJ1Y3QgYW1keGRuYV9zY2hlZF9qb2IgKmpvYiwgdTY0ICpzZXEpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNcbmluZGV4IGI4ZjJkZDk5ODJmNTNjLi43NmU4YTAwMjhjN2ZjOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNcbkBAIC04NTIsOCArODUyLDcgQEAgZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0IGRybV9ncHVzdm1fc2Nhbl9tbShzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UsXG4gXHRcdC5lbmQgPSBlbmQsXG4gXHRcdC5kZXZfcHJpdmF0ZV9vd25lciA9IGRldl9wcml2YXRlX293bmVyLFxuIFx0fTtcbi1cdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9XG4tXHRcdGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xuK1x0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbiBcdGVudW0gZHJtX2dwdXN2bV9zY2FuX3Jlc3VsdCBzdGF0ZSA9IERSTV9HUFVTVk1fU0NBTl9VTlBPUFVMQVRFRCwgbmV3X3N0YXRlO1xuIFx0dW5zaWduZWQgbG9uZyAqcGZucztcbiBcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzID0gbnBhZ2VzX2luX3JhbmdlKHN0YXJ0LCBlbmQpO1xuQEAgLTg2Nyw4ICs4NjYsNyBAQCBlbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgZHJtX2dwdXN2bV9zY2FuX21tKHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSxcbiBcdGhtbV9yYW5nZS5obW1fcGZucyA9IHBmbnM7XG4gXG4gcmV0cnk6XG4tXHRlcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZobW1fcmFuZ2UsXG4tXHRcdFx0XHRcdCAgICAgICBtYXgodGltZW91dCAtIGppZmZpZXMsIDFMKSk7XG4rXHRlcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZobW1fcmFuZ2UsIHRpbWVvdXQpO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfZnJlZTtcbiBcbkBAIC0xNDU5LDggKzE0NTcsNyBAQCBpbnQgZHJtX2dwdXN2bV9nZXRfcGFnZXMoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbiBcdFx0LmRldl9wcml2YXRlX293bmVyID0gY3R4LVx1MDAzZWRldmljZV9wcml2YXRlX3BhZ2Vfb3duZXIsXG4gXHR9O1xuIFx0dm9pZCAqemRkO1xuLVx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID1cbi1cdFx0amlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XG4rXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xuIFx0dW5zaWduZWQgbG9uZyBpLCBqO1xuIFx0dW5zaWduZWQgbG9uZyBucGFnZXMgPSBucGFnZXNfaW5fcmFuZ2UocGFnZXNfc3RhcnQsIHBhZ2VzX2VuZCk7XG4gXHR1bnNpZ25lZCBsb25nIG51bV9kbWFfbWFwcGVkO1xuQEAgLTE0NzgsOSArMTQ3NSw2IEBAIGludCBkcm1fZ3B1c3ZtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiByZXRyeTpcbi1cdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKVxuLVx0XHRyZXR1cm4gLUVCVVNZO1xuLVxuIFx0aG1tX3JhbmdlLm5vdGlmaWVyX3NlcSA9IG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKG5vdGlmaWVyKTtcbiBcdGlmIChkcm1fZ3B1c3ZtX3BhZ2VzX3ZhbGlkX3VubG9ja2VkKGdwdXN2bSwgc3ZtX3BhZ2VzKSlcbiBcdFx0Z290byBzZXRfc2Vxbm87XG5AQCAtMTQ5NSw4ICsxNDg5LDcgQEAgaW50IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXG4gXHR9XG4gXG4gXHRobW1fcmFuZ2UuaG1tX3BmbnMgPSBwZm5zO1xuLVx0ZXJyID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2aG1tX3JhbmdlLFxuLVx0XHRcdFx0bWF4X3QobG9uZywgdGltZW91dCAtIGppZmZpZXMsIDEpKTtcbitcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNmhtbV9yYW5nZSwgdGltZW91dCk7XG4gXHRtbXB1dChtbSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9mcmVlO1xuQEAgLTE3MTgsOCArMTcxMSw3IEBAIGludCBkcm1fZ3B1c3ZtX3JhbmdlX2V2aWN0KHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXG4gXHRcdC5lbmQgPSBkcm1fZ3B1c3ZtX3JhbmdlX2VuZChyYW5nZSksXG4gXHRcdC5kZXZfcHJpdmF0ZV9vd25lciA9IE5VTEwsXG4gXHR9O1xuLVx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID1cbi1cdFx0amlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XG4rXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xuIFx0dW5zaWduZWQgbG9uZyAqcGZucztcbiBcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzID0gbnBhZ2VzX2luX3JhbmdlKGRybV9ncHVzdm1fcmFuZ2Vfc3RhcnQocmFuZ2UpLFxuIFx0XHRcdFx0XHQgICAgICAgZHJtX2dwdXN2bV9yYW5nZV9lbmQocmFuZ2UpKTtcbkBAIC0xNzM0LDggKzE3MjYsNyBAQCBpbnQgZHJtX2dwdXN2bV9yYW5nZV9ldmljdChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdGhtbV9yYW5nZS5obW1fcGZucyA9IHBmbnM7XG4tXHRlcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZobW1fcmFuZ2UsXG4tXHRcdFx0XHRtYXhfdChsb25nLCB0aW1lb3V0IC0gamlmZmllcywgMSkpO1xuK1x0ZXJyID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2aG1tX3JhbmdlLCB0aW1lb3V0KTtcbiBcbiBcdGt2ZnJlZShwZm5zKTtcbiBcdG1tcHV0KG1tKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY1xuaW5kZXggNGNmYjZlYjdjNzcxNWEuLjU4NzM1NDQ2ZDc4MzJjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY1xuKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY1xuQEAgLTY3OCwxNCArNjc4LDIwIEBAIHN0YXRpYyBpbnQgbm91dmVhdV9yYW5nZV9mYXVsdChzdHJ1Y3Qgbm91dmVhdV9zdm1tICpzdm1tLFxuIFx0cmFuZ2UuZW5kID0gbm90aWZpZXItXHUwMDNlbm90aWZpZXIuaW50ZXJ2YWxfdHJlZS5sYXN0ICsgMTtcbiBcbiBcdHdoaWxlICh0cnVlKSB7XG4tXHRcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7XG4rXHRcdGxvbmcgcmVtYWluaW5nID0gdGltZW91dCAtIGppZmZpZXM7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBITU0gdGltZW91dCBvbmx5IGJvdW5kcyByZXRyaWVzIHdoaWxlIEhNTSBpcyB3YWxraW5nIGFuZFxuK1x0XHQgKiBmYXVsdGluZyB0aGUgcmFuZ2UuIFRoaXMgZmF1bHQgaXMgaGFuZGxlZCBieSBhIGtlcm5lbCB3b3JrZXIsXG4rXHRcdCAqIHNvIGZhdGFsIHNpZ25hbHMgZnJvbSB0aGUgZmF1bHRpbmcgcHJvY2VzcyBjYW5ub3Qgc3RvcCBhblxuK1x0XHQgKiBlbmRsZXNzIHN0cmVhbSBvZiBpbnZhbGlkYXRpb25zIGhlcmUuXG4rXHRcdCAqL1xuK1x0XHRpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCB0aW1lb3V0KSkge1xuIFx0XHRcdHJldCA9IC1FQlVTWTtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuLVx0XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZyYW5nZSxcbi1cdFx0XHRcdFx0XHQgICAgICAgbWF4KHRpbWVvdXQgLSBqaWZmaWVzLFxuLVx0XHRcdFx0XHRcdFx0ICAgMUwpKTtcbitcdFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2cmFuZ2UsIHJlbWFpbmluZyk7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0Z290byBvdXQ7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowMzoyNC4yNzY5ODkzNjVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjYzNDkzNDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVGltZW91dCBDaGFuZ2UgaW4gSE1NIFJhbmdlIEZhdWx0IEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgYXBwZWFycyB0byBiZSBtb2RpZnlpbmcgaG93IGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAgaXMgY2FsbGVkIGFjcm9zcyBhIGZldyBkcml2ZXJzOiBhbWR4ZG5hLCBkcm1fZ3B1c3ZtLCBhbmQgbm91dmVhdV9zdm0uIFRoZSBrZXkgY2hhbmdlIHNlZW1zIHRvIGJlIGhvdyB0aGUgYHRpbWVvdXRgIGFyZ3VtZW50IGlzIGhhbmRsZWQuIEl0J3MgbW92aW5nIGZyb20gYmVpbmcgYW4gYWJzb2x1dGUgamlmZmllcyB2YWx1ZSwgb3IgYSByZW1haW5pbmcgdGltZSBjYWxjdWxhdGlvbiwgdG8gYSAqcmVsYXRpdmUqIHRpbWVvdXQuIEluaXRpYWxseSwgSSB0aG91Z2h0IGl0IHdhcyBqdXN0IHBhc3NpbmcgdGhlIGB0aW1lb3V0YCB2YXJpYWJsZSB3aGljaCBpcyBub3cgaW5pdGlhbGl6ZWQgYXMgYG1zZWNzX3RvX2ppZmZpZXMoLi4uKWAuIExldCBtZSBkaWcgYSBsaXR0bGUgZGVlcGVyLlxuXG5TcGVjaWZpY2FsbHksIGluIGBhaWUyX2N0eC5jYCwgdGhlIGRpZmYgc2hvd3M6XG5cbmBgYGNcbi1cdHRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbitcdHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xuLi4uXG4tXHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZtYXBwLVx1MDAzZXJhbmdlLFxuLVx0XHRcdG1heF90KGxvbmcsIHRpbWVvdXQgLSBqaWZmaWVzLCAxKSk7XG4tXHRpZiAocmV0KSB7XG4tXHRcdGlmIChyZXQgPT0gLUVCVVNZKVxuLVx0XHRcdHJldCA9IC1FVElNRTtcbitcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNm1hcHAtXHUwMDNlcmFuZ2UsIHRpbWVvdXQpO1xuK1x0aWYgKHJldClcbiBcdFx0Z290byBwdXRfbW07XG4tXHR9XG5gYGBcblxuT2theSwgc28gdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBhYnNvbHV0ZSB0aW1lb3V0IGlzIGdvbmUgYW5kIG5vdyB3ZSdyZSBqdXN0IHBhc3NpbmcgdGhlIHJlc3VsdCBvZiBgbXNlY3NfdG9famlmZmllcygpYC4gQnV0IHdhaXQgYSBzZWNvbmQuLi4gaXMgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCBkZXNpZ25lZCB0byBhY2NlcHQgYSByZWxhdGl2ZSB0aW1lb3V0IG5vdz8gT3IgZGlkIHRoYXQgY2hhbmdlIGluIGEgcHJldmlvdXMgb3Igc2VwYXJhdGUgcGF0Y2g/IFRoZSBkaWZmIGl0c2VsZiBkb2Vzbid0IHNob3cgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gY2hhbmdpbmcsIHdoaWNoIGlzIGEgYml0IG9kZC4gUGVyaGFwcyB0aGUgZnVuY3Rpb24gd2FzIGFscmVhZHkgY2hhbmdlZCB0byBoYW5kbGUgcmVsYXRpdmUgdGltZW91dHMsIGFuZCB0aGlzIHBhdGNoIHNpbXBseSBhbGlnbnMgdGhlIGNhbGxpbmcgY29udmVudGlvbj8gTGV0IG1lIGxvb2sgYXQgc29tZSBvdGhlciBkaWZmcy4gQWgsIHRoZXJlJ3MgYSByZWxhdGVkIGNoYW5nZSBpbiBgaG1tLnJzdGAgd2hpY2ggcmVtb3ZlcyB0aGUgdXNlIG9mIGBqaWZmaWVzYCBpbiBhIGNvbXBhcmlzb246XG5cbmBgYGNcbi0gICAgICBpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkoXHUwMDI2aW50ZXJ2YWxfc3ViLCByYW5nZS5ub3RpZmllcl9zZXEpKSB7XG4rICAgICAgaWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KHJhbmdlLm5vdGlmaWVyLCByYW5nZS5ub3RpZmllcl9zZXEpKSB7XG5gYGBcblxuU3RpbGwgbm90aGluZyBhYm91dCB0aGUgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCBkZWZpbml0aW9uLiBMZXQncyBnbyBsb29rIGF0IHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGl0c2VsZiwgYW5kIGJlIHN1cmUgd2UgaGF2ZSB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTE5LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDM6MzIuNTQwNDg1MDA5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTAxNzMyMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTE2MD1ub3JtYWwgaW50ZXJmYWNlIGlzOjpcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMTYxLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoxNjI6ICBpbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTE2My0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTE2OT1UaGUgY2FsbGVyIG11c3Qgbm90IGhvbGQgYGBtbWFwX3JlYWRfbG9ja2BgIGJlZm9yZSB0aGUgY2FsbC5cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MTcwOmBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgIHRha2VzIHRoZSBtbWFwIHJlYWQgbG9jayBpbnRlcm5hbGx5IGFuZFxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0xNzEtYWxsb3dzIGBgaGFuZGxlX21tX2ZhdWx0KClgYCB0byBkcm9wIGl0IGR1cmluZyBmYXVsdCBoYW5kbGluZy4gVGhpcyBpcyByZXF1aXJlZFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTE4Nj1UaGUgdXNhZ2UgcGF0dGVybiBpczo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjAzLSBhZ2FpbjpcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjA0OiAgICAgIHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZyYW5nZSwgdGltZW91dCk7XFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTIwNS0gICAgICBpZiAocmV0KVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTIyOD11cGRhdGUuIFRoZSByZXRyeSBjaGVjayBtdXN0IHVzZSB0aGUgc2FtZSBub3RpZmllciBhbmQgc2VxdWVuY2UgbnVtYmVyIHN0b3JlZFxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoyMjk6aW4gYGByYW5nZWBgIGJ5IGBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgLlxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yMzAtXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTIzMT1Ib2xkaW5nIHRoZSBtbWFwIGxvY2sgYWNyb3NzIEhNTSBmYXVsdHNcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yMzMtXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjIzNDpNb3N0IGNhbGxlcnMgc2hvdWxkIHVzZSBgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KClgYC4gSWYgYSBkcml2ZXJcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjM1LXJlYWxseSBuZWVkcyB0byBob2xkIHRoZSBtbWFwIGxvY2sgYWNyb3NzIHdvcmsgb3V0c2lkZSBITU0sIGl0IGNhbiB1c2U6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTI0MD1pbnRlcmZhY2UgY2Fubm90IHN1cHBvcnQgVk1BcyB3aG9zZSBmYXVsdCBoYW5kbGVycyBuZWVkIHRvIGRyb3AgdGhlIG1tYXAgbG9jay5cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjQxOk5ldyBjYWxsZXJzIHNob3VsZCBwcmVmZXIgYGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpYGAgdW5sZXNzIHRoZXlcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjQyLWhhdmUgYSBzcGVjaWZpYyByZXF1aXJlbWVudCB0byBrZWVwIHRoZSBtbWFwIGxvY2sgaGVsZCBhY3Jvc3MgdGhlIGNhbGwuXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYz0xMDMxPXN0YXRpYyBpbnQgYWllMl9wb3B1bGF0ZV9yYW5nZShzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICphYm8pXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYy0xMDY0LVxcbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jOjEwNjU6XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXFx1MDAyNm1hcHAtXFx1MDAzZXJhbmdlLCB0aW1lb3V0KTtcXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYy0xMDY2LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jPTg0MT1lbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgZHJtX2dwdXN2bV9zY2FuX21tKHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODY4LXJldHJ5OlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODY5OlxcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZobW1fcmFuZ2UsIHRpbWVvdXQpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODcwLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jPTE0NDQ9aW50IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE0OTEtXFx0aG1tX3JhbmdlLmhtbV9wZm5zID0gcGZucztcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE0OTI6XFx0ZXJyID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXFx1MDAyNmhtbV9yYW5nZSwgdGltZW91dCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNDkzLVxcdG1tcHV0KG1tKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM9MTcwMz1pbnQgZHJtX2dwdXN2bV9yYW5nZV9ldmljdChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNzI4LVxcdGhtbV9yYW5nZS5obW1fcGZucyA9IHBmbnM7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNzI5OlxcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZobW1fcmFuZ2UsIHRpbWVvdXQpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTczMC1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmM9NjUyPXN0YXRpYyBpbnQgbm91dmVhdV9yYW5nZV9mYXVsdChzdHJ1Y3Qgbm91dmVhdV9zdm1tICpzdm1tLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uYy02OTMtXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uYzo2OTQ6XFx0XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXFx1MDAyNnJhbmdlLCByZW1haW5pbmcpO1xcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmMtNjk1LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jPTM5Nj1zdGF0aWMgaW50IG1zaHZfcmVnaW9uX3JhbmdlX2ZhdWx0KHN0cnVjdCBtc2h2X21lbV9yZWdpb24gKnJlZ2lvbixcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmMtNDE1LWFnYWluOlxcbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmM6NDE2OlxcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZyYW5nZSwgMCk7XFxuZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYy00MTctXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmM9MzI0PWludCBpYl91bWVtX29kcF9tYXBfZG1hX2FuZF9sb2NrKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHAsIHU2NCB1c2VyX3ZpcnQsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jLTM2OC1yZXRyeTpcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jOjM2OTpcXHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcXHUwMDI2cmFuZ2UsIHRpbWVvdXQpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmMtMzcwLVxcdGlmICh1bmxpa2VseShyZXQpKVxcbi0tXFxuaW5jbHVkZS9saW51eC9obW0uaD0xMjU9aW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSk7XFxuaW5jbHVkZS9saW51eC9obW0uaDoxMjY6aW50IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLFxcbmluY2x1ZGUvbGludXgvaG1tLmgtMTI3LVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTtcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTM5Mj1zdGF0aWMgaW50IGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXFxuLS1cXG5saWIvdGVzdF9obW0uYy0zOTgtXFx0d2hpbGUgKHRydWUpIHtcXG5saWIvdGVzdF9obW0uYzozOTk6XFx0XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQocmFuZ2UsIHRpbWVvdXQpO1xcbmxpYi90ZXN0X2htbS5jLTQwMC1cXHRcXHRpZiAocmV0KVxcbi0tXFxubW0vaG1tLmM9Njg5PXN0YXRpYyBpbnQgaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSwgYm9vbCAqbG9ja2VkKVxcbi0tXFxubW0vaG1tLmMtNzUzLSAqIFRoZSBtbWFwIGxvY2sgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIgYW5kIHdpbGwgcmVtYWluIGhlbGQgb24gcmV0dXJuLlxcbm1tL2htbS5jOjc1NDogKiBOZXcgdXNlcnMgc2hvdWxkIHByZWZlciBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpIHVubGVzcyB0aGV5XFxubW0vaG1tLmMtNzU1LSAqIHNwZWNpZmljYWxseSBuZWVkIHRvIGtlZXAgdGhlIG1tYXAgbG9jayBoZWxkIGFjcm9zcyB0aGUgY2FsbC4gVGhpcyBoZWxwZXJcXG4tLVxcbm1tL2htbS5jPTc2Mj1FWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV9mYXVsdCk7XFxuLS1cXG5tbS9obW0uYy03NjQtLyoqXFxubW0vaG1tLmM6NzY1OiAqIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0IC0gZmF1bHQgaW4gYSByYW5nZSB3aXRoIGEgcmV0cnkgdGltZW91dFxcbm1tL2htbS5jLTc2Ni0gKiBAcmFuZ2U6XFx0YXJndW1lbnQgc3RydWN0dXJlXFxuLS1cXG5tbS9obW0uYy03ODMtICovXFxubW0vaG1tLmM6Nzg0OmludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSxcXG5tbS9obW0uYy03ODUtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpXFxuLS1cXG5tbS9obW0uYy04MjQtfVxcbm1tL2htbS5jOjgyNTpFWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KTtcXG5tbS9obW0uYy04MjYtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz0yOTA0PVRFU1RfRl9USU1FT1VUKGhtbSwgYmVuY2htYXJrX3RocF9taWdyYXRpb24sIDEyMClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTI5NjAtICogVGVzdCB0aGF0IEhNTSBjYW4gZmF1bHQgaW4gcGFnZXMgYmFja2VkIGJ5IHVzZXJmYXVsdGZkIHVzaW5nIHRoZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjI5NjE6ICogaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKSBwYXRoIHdpdGggbm8gdGltZW91dC4gVGhpcyBleGVyY2lzZXNcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yOTYyLSAqIHRoZSBsb2NrLWRyb3AgcmV0cnkgbG9naWMgaW4gdGhlIEhNTSBmcmFtZXdvcmsuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjAzOjM1LjAzMDY2NDIwMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MDYxMzU0OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUaW1lb3V0IFBhcmFtZXRlciBpbiBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHRoZSBjaGFuZ2UgdG8gaG93IHRoZSBgdGltZW91dGAgcGFyYW1ldGVyIGlzIGhhbmRsZWQgaW4gYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCBjYXRjaGVzIG15IGV5ZS4gSXQgYXBwZWFycyB0aGUgc2lnbmF0dXJlIG9mIHRoZSBmdW5jdGlvbiBpcyBiZWluZyB0cmVhdGVkIGFzIHRha2luZyBhbiBgdW5zaWduZWQgbG9uZyB0aW1lb3V0YCBwYXJhbWV0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgbmV3IGFwcHJvYWNoLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlIGRpZmZzLCBzcGVjaWZpY2FsbHkgaW4gYGFpZTJfY3R4LmNgLCBgZHJtX2dwdXN2bS5jYCwgYW5kIGBub3V2ZWF1X3N2bS5jYCwgaXQgc2VlbXMgdGhhdCB0aGUgY29kZSB1c2VkIHRvIGNhbGN1bGF0ZSBhbiAqYWJzb2x1dGUqIHRpbWVvdXQsIG9mdGVuIGJ5IGFkZGluZyBgamlmZmllc2AgdG8gYSBkdXJhdGlvbi4gSW4gZXNzZW5jZSwgdGhleSB3ZXJlIHNldHRpbmcgYW4gKmV4cGlyYXRpb24gdGltZSouIE5vdywgdGhlIHBhdGNoIGlzIHJlbW92aW5nIHRoZSBgamlmZmllc2AgYWRkaXRpb24gYW5kIGRpcmVjdGx5IHBhc3NpbmcgYSB0aW1lb3V0IHZhbHVlIGNhbGN1bGF0ZWQgdXNpbmcgYG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVClgLiBBbHNvLCB0aGUgY2FsbHMgd2VyZSBwcmV2aW91c2x5IHN1YnRyYWN0aW5nIGBqaWZmaWVzYCBmcm9tIHRoZSB0aW1lb3V0IGFuZCB1c2luZyBgbWF4KClgIHRvIGVuc3VyZSB0aGUgdGltZW91dCB3YXMgYXQgbGVhc3QgMSwgYnV0IG5vdyB0aG9zZSBjYWxjdWxhdGlvbnMgYXJlIHJlbW92ZWQuXG5cblRoaXMgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgdGhhdCBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIG5vdyBleHBlY3RzIGEgKnJlbGF0aXZlKiB0aW1lb3V0IOKAkyBhIGR1cmF0aW9uLCBub3QgYW4gYWJzb2x1dGUgdGltZXN0YW1wLiBJdCdzIGV4cGVjdGluZyB0aGUgbnVtYmVyIG9mIGppZmZpZXMgdG8gd2FpdC4gSSAqbmVlZCogdG8gY29uZmlybSB0aGlzLiBUbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbSBnb2luZyB0byBqdW1wIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIGluIGBtbS9obW0uY2AgdG8gdmVyaWZ5IHdoZXRoZXIgaXQgaW50ZXJwcmV0cyB0aGUgYHRpbWVvdXRgIHBhcmFtZXRlciBhcyBhIHJlbGF0aXZlIHRpbWUgdmFsdWUuIElmIHRoZSBjb2RlIGlzIG5vdyBwYXNzaW5nIGFuIGFic29sdXRlIHRpbWUsIHRoZSBwYXRjaCBpcyB3cm9uZyBhbmQgd2lsbCBicmVhay5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMzNSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowMzo0My40MzY4MDE4NjlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4MjkwNTg1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTE2MD1ub3JtYWwgaW50ZXJmYWNlIGlzOjpcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMTYxLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoxNjI6ICBpbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTE2My0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9obW0uaD0xMjU9aW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSk7XFxuaW5jbHVkZS9saW51eC9obW0uaDoxMjY6aW50IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLFxcbmluY2x1ZGUvbGludXgvaG1tLmgtMTI3LVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTtcXG4tLVxcbm1tL2htbS5jPTc2Mj1FWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV9mYXVsdCk7XFxuLS1cXG5tbS9obW0uYy03ODMtICovXFxubW0vaG1tLmM6Nzg0OmludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSxcXG5tbS9obW0uYy03ODUtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjAzOjQ1LjYxOTcxMzMxNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NzMwMDM4MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgbW0vaG1tLmNgIGFuZCBzcGVjaWZpY2FsbHksIHRoYXQgZnVuY3Rpb24sIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAuIFRoZSBuYW1lIGl0c2VsZiBpcyBpbnRyaWd1aW5nLiAgSXQgc3VnZ2VzdHMgaGFuZGxpbmcgYSBmYXVsdCB3aXRoaW4gYSBIeXBlci1NZW1vcnkgTWFuYWdlbWVudCAoSE1NKSByYW5nZSwgYnV0IHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHNpdHVhdGlvbiB3aGVyZSBzb21lIGtpbmQgb2YgbG9jayBpcyAqbm90KiBoZWxkLCBhbmQgd2UncmUgYWxzbyBkZWFsaW5nIHdpdGggYSB0aW1lb3V0LiAgVGhpcyBsaWtlbHkgaW5kaWNhdGVzIGEgYmFja2dyb3VuZCBwcm9jZXNzLCBvciBtYXliZSBhc3luY2hyb25vdXMgb3BlcmF0aW9uLCBhbmQgd2XigJlyZSB0cnlpbmcgdG8gcHJldmVudCBpdCBmcm9tIGJsb2NraW5nIGluZGVmaW5pdGVseS4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoZXNlIHRpbWVvdXQgc2NlbmFyaW9zIG9mdGVuIHBvaW50IHRvIGNvbmN1cnJlbmN5IGlzc3VlcyBvciByZXNvdXJjZSBjb250ZW50aW9uLCBzbyBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGF0J3MgYWRkcmVzc2VkLlxuXG5JJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZC4gSXMgaXQgdHJpZ2dlcmVkIGJ5IGEgdGltZXIsIGFuIGludGVycnVwdCwgb3Igc29tZXRoaW5nIGVsc2U/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgcHJvYmxlbSBpdCdzIGRlc2lnbmVkIHRvIHNvbHZlLlxuXG5J4oCZbGwgYWxzbyBrZWVwIGFuIGV5ZSBvdXQgZm9yIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBITU0gY29tcG9uZW50cywgc3VjaCBhcyByYW5nZSBtZXRhZGF0YSwgcGFnZSB0YWJsZXMsIGFuZCBhbnkgcG90ZW50aWFsIGxvY2tpbmcgbWVjaGFuaXNtcyAoZXZlbiBpZiBub3QgZXhwbGljaXRseSBoZWxkIGJ5IHRoZSBjYWxsZXIpLiBHaXZlbiB0aGF0IGl0J3MgXCJ1bmxvY2tlZCxcIiB0aGUgZnVuY3Rpb24gcHJvYmFibHkgcmVsaWVzIG9uIHNvbWUgb3RoZXIgbWVjaGFuaXNtIHRvIGVuc3VyZSBkYXRhIGNvbnNpc3RlbmN5LiBNYXliZSBhdG9taWMgb3BlcmF0aW9ucz8gUGVyaGFwcyByZWFkLWNvcHktdXBkYXRlIHRlY2huaXF1ZXM/IEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMuIFRoZSBcInRpbWVvdXRcIiBhc3BlY3QgbWFrZXMgbWUgdGhpbmsgYWJvdXQgcG90ZW50aWFsIGRlYWRsb2NrcyBvciBsaXZlbG9ja3Mg4oCTIEknbGwgYmUgbG9va2luZyBhdCB3aGV0aGVyIGl0IHRha2VzIHN0ZXBzIHRvIG1pdGlnYXRlIHRob3NlIHBvc3NpYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NjAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowMzo1MC4wOTI3MjAwNTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzYyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaG1tLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzgwOlxcdCAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG9uZSBvZiB0aGUgZXJyb3IgY29kZXMgZG9jdW1lbnRlZCBmb3JcXG4gNzgxOlxcdCAqIGhtbV9yYW5nZV9mYXVsdCgpLiAtRUlOVFIgaXMgcmV0dXJuZWQgaWYgbW1hcF9sb2NrIGFjcXVpc2l0aW9uIGlzXFxuIDc4MjpcXHQgKiBpbnRlcnJ1cHRlZCBvciBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nIGR1cmluZyByZXRyeSBoYW5kbGluZy5cXG4gNzgzOlxcdCAqL1xcbiA3ODQ6XFx0aW50IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLFxcbiA3ODU6XFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpXFxuIDc4NjpcXHR7XFxuIDc4NzpcXHRcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHJhbmdlLVxcdTAwM2Vub3RpZmllci1cXHUwMDNlbW07XFxuIDc4ODpcXHRcXHR1bnNpZ25lZCBsb25nIGRlYWRsaW5lID0gMDtcXG4gNzg5OlxcdFxcdGJvb2wgbG9ja2VkID0gZmFsc2U7XFxuIDc5MDpcXHRcXHRpbnQgcmV0O1xcbiA3OTE6XFx0XFxuIDc5MjpcXHRcXHRkbyB7XFxuIDc5MzpcXHRcXHRcXHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuIDc5NDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlRSO1xcbiA3OTU6XFx0XFxuIDc5NjpcXHRcXHRcXHRpZiAodGltZW91dCkge1xcbiA3OTc6XFx0XFx0XFx0XFx0LypcXG4gNzk4OlxcdFxcdFxcdFxcdCAqIElmIHRoZSBwcmV2aW91cyBmYXVsdCBkcm9wcGVkIG1tYXBfbG9jaywgdGhlbiB0aGUgZmF1bHRcXG4gNzk5OlxcdFxcdFxcdFxcdCAqIGhhbmRsZXIgbWFkZSBwcm9ncmVzcy4gUmVzdGFydCB0aGUgcmV0cnkgdGltZW91dCBpbiB0aGF0XFxuIDgwMDpcXHRcXHRcXHRcXHQgKiBjYXNlLCBidXQga2VlcCB0aGUgZXhpc3RpbmcgZGVhZGxpbmUgZm9yIG9yZGluYXJ5IC1FQlVTWVxcbiA4MDE6XFx0XFx0XFx0XFx0ICogcmV0cmllcy5cXG4gODAyOlxcdFxcdFxcdFxcdCAqL1xcbiA4MDM6XFx0XFx0XFx0XFx0aWYgKCFsb2NrZWQpXFxuIDgwNDpcXHRcXHRcXHRcXHRcXHRkZWFkbGluZSA9IGppZmZpZXMgKyB0aW1lb3V0O1xcbiA4MDU6XFx0XFxuIDgwNjpcXHRcXHRcXHRcXHRpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkZWFkbGluZSkpXFxuIDgwNzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiA4MDg6XFx0XFx0XFx0fVxcbiA4MDk6XFx0XFxuIDgxMDpcXHRcXHRcXHRyYW5nZS1cXHUwMDNlbm90aWZpZXJfc2VxID1cXG4gODExOlxcdFxcdFxcdFxcdG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKHJhbmdlLVxcdTAwM2Vub3RpZmllcik7XFxuIDgxMjpcXHRcXG4gODEzOlxcdFxcdFxcdHJldCA9IG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKG1tKTtcXG4gODE0OlxcdFxcdFxcdGlmIChyZXQpXFxuIDgxNTpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA4MTY6XFx0XFxuIDgxNzpcXHRcXHRcXHRsb2NrZWQgPSB0cnVlO1xcbiA4MTg6XFx0XFx0XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZChyYW5nZSwgXFx1MDAyNmxvY2tlZCk7XFxuIDgxOTpcXHRcXHRcXHRpZiAobG9ja2VkKVxcbiA4MjA6XFx0XFx0XFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuIDgyMTpcXHRcXHR9IHdoaWxlIChyZXQgPT0gLUVCVVNZKTtcXG4gODIyOlxcdFxcbiA4MjM6XFx0XFx0cmV0dXJuIHJldDtcXG4gODI0OlxcdH1cXG4gODI1OlxcdEVYUE9SVF9TWU1CT0woaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQpO1xcbiA4MjY6XFx0XFxuIDgyNzpcXHQvKipcXG4gODI4OlxcdCAqIGhtbV9kbWFfbWFwX2FsbG9jIC0gQWxsb2NhdGUgSE1NIG1hcCBzdHJ1Y3R1cmVcXG4gODI5OlxcdCAqIEBkZXY6IGRldmljZSB0byBhbGxvY2F0ZSBzdHJ1Y3R1cmUgZm9yXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjAzOjUwLjA5Mjg5ODgwMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNTIxNzk1ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUaW1lb3V0IExvZ2ljIGluIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAsIGl0IGV4cGVjdHMgYHRpbWVvdXRgIHRvIGJlIGEgKnJlbGF0aXZlKiB0aW1lb3V0LCBsaWtlIHRoZSByZXN1bHQgb2YgYG1zZWNzX3RvX2ppZmZpZXMoMTAwKWAuIEluc2lkZSwgaXQgYWRkcyB0aGlzIHJlbGF0aXZlIHRpbWVvdXQgdG8gdGhlIGN1cnJlbnQgYGppZmZpZXNgIHRvIGdldCB0aGUgZGVhZGxpbmUsIGJ1dCBvbmx5IGlmIHRoZSBtZW1vcnkgcmVnaW9uIGlzbid0IGxvY2tlZC4gVGhlIGNvZGUgdXNlcyBgZGVhZGxpbmUgPSBqaWZmaWVzICsgdGltZW91dDtgIHdoZW4gdGhlIHJlZ2lvbiBpcyB1bmxvY2tlZCwgYW5kIHRoZW4gSSByZWFsaXplZCB0aGF0IGlmIHRoZSBjYWxsZXIgcGFzc2VzIHNvbWV0aGluZyBsaWtlIGBtYXhfdChsb25nLCB0aW1lb3V0IC0gamlmZmllcywgMSlgLCB3aGVyZSBgdGltZW91dGAgd2FzIG9yaWdpbmFsbHkgYW4gKmFic29sdXRlKiBqaWZmaWVzIHZhbHVlLCB0aGVuIGl0IHdhcyBlZmZlY3RpdmVseSBjYWxjdWxhdGluZyB0aGUgcmVtYWluaW5nIHRpbWUgYW5kIHBhc3NpbmcgaXQuXG5cbkJ1dCBob2xkIG9uLCBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgICppdHNlbGYqIGFscmVhZHkgaGFuZGxlcyB0aGUgcmV0cnkgbG9naWMgYW5kIHJlc3RhcnRzIHRoZSB0aW1lb3V0IGlmIHRoZSByZWdpb24gaXNuJ3QgbG9ja2VkLCB3aGljaCBtZWFucyBwcm9ncmVzcyB3YXMgbWFkZS4gU28gdGhlIGNhbGxlciBzaG91bGRuJ3QgYmUgZ2l2aW5nIGl0IHRoZSByZW1haW5pbmcgdGltZSEgSXQgc2hvdWxkIGJlIHBhc3NpbmcgdGhlICpvcmlnaW5hbCogcmVsYXRpdmUgdGltZW91dCwgc28gdGhhdCBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIGNhbiBwcm9wZXJseSByZXN0YXJ0IHRoZSB0aW1lb3V0IGZyb20gc2NyYXRjaC4gSXQncyBzdXBwb3NlZCB0byBtYW5hZ2UgdGhlIHJldHJpZXMgaW50ZXJuYWxseS5cblxuTm93LCBhIHF1aWNrIGNoZWNrIG9mIHRoZSBub3V2ZWF1IGRyaXZlciByZXZlYWxzIHNvbWV0aGluZyBpbnRlcmVzdGluZy4gSXQncyBzdGlsbCBwYXNzaW5nIGEgYHJlbWFpbmluZ2AgdmFsdWUuIEkgc2VlIHRoaXM6XG5cbmBgYGNcbi1cdFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2cmFuZ2UsXG4tXHRcdFx0XHRcdFx0ICAgICAgIG1heCh0aW1lb3V0IC0gamlmZmllcyxcbi1cdFx0XHRcdFx0XHRcdCAgIDFMKSk7XG4rXHRcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNnJhbmdlLCByZW1haW5pbmcpO1xuYGBgXG5cbldhaXQsIGl0IGxvb2tzIGxpa2UgYG5vdXZlYXVfc3ZtLmNgIGFscmVhZHkgaGFzIGl0cyBvd24gbG9vcCBhcm91bmQgdGhlIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAgZnVuY3Rpb24/IEkgbmVlZCB0byBkaWcgaW50byB0aGUgYG5vdXZlYXVfc3ZtLmNgIGNvZGUgdG8gc2VlIHdoYXQncyBnb2luZyBvbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU0NSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjAzOjU2LjM0NTA4MDUzM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NzA6XFx0XFxuIDY3MTpcXHRcXHRyZXQgPSBtbXVfaW50ZXJ2YWxfbm90aWZpZXJfaW5zZXJ0KFxcdTAwMjZub3RpZmllci1cXHUwMDNlbm90aWZpZXIsIG1tLFxcbiA2NzI6XFx0XFx0XFx0XFx0XFx0XFx0YXJncy1cXHUwMDNlcC5hZGRyLCBhcmdzLVxcdTAwM2VwLnNpemUsXFxuIDY3MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2bm91dmVhdV9zdm1fbW5pX29wcyk7XFxuIDY3NDpcXHRcXHRpZiAocmV0KVxcbiA2NzU6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNjc2OlxcdFxcbiA2Nzc6XFx0XFx0cmFuZ2Uuc3RhcnQgPSBub3RpZmllci1cXHUwMDNlbm90aWZpZXIuaW50ZXJ2YWxfdHJlZS5zdGFydDtcXG4gNjc4OlxcdFxcdHJhbmdlLmVuZCA9IG5vdGlmaWVyLVxcdTAwM2Vub3RpZmllci5pbnRlcnZhbF90cmVlLmxhc3QgKyAxO1xcbiA2Nzk6XFx0XFxuIDY4MDpcXHRcXHR3aGlsZSAodHJ1ZSkge1xcbiA2ODE6XFx0XFx0XFx0bG9uZyByZW1haW5pbmcgPSB0aW1lb3V0IC0gamlmZmllcztcXG4gNjgyOlxcdFxcbiA2ODM6XFx0XFx0XFx0LypcXG4gNjg0OlxcdFxcdFxcdCAqIFRoZSBITU0gdGltZW91dCBvbmx5IGJvdW5kcyByZXRyaWVzIHdoaWxlIEhNTSBpcyB3YWxraW5nIGFuZFxcbiA2ODU6XFx0XFx0XFx0ICogZmF1bHRpbmcgdGhlIHJhbmdlLiBUaGlzIGZhdWx0IGlzIGhhbmRsZWQgYnkgYSBrZXJuZWwgd29ya2VyLFxcbiA2ODY6XFx0XFx0XFx0ICogc28gZmF0YWwgc2lnbmFscyBmcm9tIHRoZSBmYXVsdGluZyBwcm9jZXNzIGNhbm5vdCBzdG9wIGFuXFxuIDY4NzpcXHRcXHRcXHQgKiBlbmRsZXNzIHN0cmVhbSBvZiBpbnZhbGlkYXRpb25zIGhlcmUuXFxuIDY4ODpcXHRcXHRcXHQgKi9cXG4gNjg5OlxcdFxcdFxcdGlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHRpbWVvdXQpKSB7XFxuIDY5MDpcXHRcXHRcXHRcXHRyZXQgPSAtRUJVU1k7XFxuIDY5MTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gNjkyOlxcdFxcdFxcdH1cXG4gNjkzOlxcdFxcbiA2OTQ6XFx0XFx0XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXFx1MDAyNnJhbmdlLCByZW1haW5pbmcpO1xcbiA2OTU6XFx0XFx0XFx0aWYgKHJldClcXG4gNjk2OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiA2OTc6XFx0XFxuIDY5ODpcXHRcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZzdm1tLVxcdTAwM2VtdXRleCk7XFxuIDY5OTpcXHRcXHRcXHRpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkocmFuZ2Uubm90aWZpZXIsXFxuIDcwMDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgcmFuZ2Uubm90aWZpZXJfc2VxKSkge1xcbiA3MDE6XFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzdm1tLVxcdTAwM2VtdXRleCk7XFxuIDcwMjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNzAzOlxcdFxcdFxcdH1cXG4gNzA0OlxcdFxcdFxcdGJyZWFrO1xcbiA3MDU6XFx0XFx0fVxcbiA3MDY6XFx0XFxuIDcwNzpcXHRcXHRub3V2ZWF1X2htbV9jb252ZXJ0X3Bmbihkcm0sIFxcdTAwMjZyYW5nZSwgYXJncyk7XFxuIDcwODpcXHRcXG4gNzA5OlxcdFxcdHJldCA9IG52aWZfb2JqZWN0X2lvY3RsKFxcdTAwMjZzdm1tLVxcdTAwM2V2bW0tXFx1MDAzZXZtbS5vYmplY3QsIGFyZ3MsIHNpemUsIE5VTEwpO1xcbiA3MTA6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzdm1tLVxcdTAwM2VtdXRleCk7XFxuIDcxMTpcXHRcXG4gNzEyOlxcdG91dDpcXG4gNzEzOlxcdFxcdG1tdV9pbnRlcnZhbF9ub3RpZmllcl9yZW1vdmUoXFx1MDAyNm5vdGlmaWVyLVxcdTAwM2Vub3RpZmllcik7XFxuIDcxNDpcXHRcXG4gNzE1OlxcdFxcdHJldHVybiByZXQ7XFxuIDcxNjpcXHR9XFxuIDcxNzpcXHRcXG4gNzE4OlxcdHN0YXRpYyB2b2lkXFxuIDcxOTpcXHRub3V2ZWF1X3N2bV9mYXVsdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjAzOjU2LjM0NTE4NTgyM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDk1MzIxNDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVGltZW91dCBDaGFuZ2UgaW4gSE1NIEZhdWx0IEhhbmRsaW5nKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBJIHNlZSBpdCdzIHRvdWNoaW5nIGBub3V2ZWF1X3N2bS5jYCwgYW5kIHRoYXQncyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IGhhcyBpdHMgb3duIGxvb3AgZHVlIHRvIHRoZSBgbW11X2ludGVydmFsX3JlYWRfcmV0cnlgIGNhbGwuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyB0aGUgdGltZW91dCBpcyBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgd2l0aCBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYG1heCh0aW1lb3V0IC0gamlmZmllcywgMUwpYCB0byBgcmVtYWluaW5nYC4gVGhpcyBzZWVtcyB0byBiZSB0aGUgZml4LlxuXG5JdCdzIGNsZWFyIHRoZSBjaGFuZ2UgYWZmZWN0cyBob3cgYHRpbWVvdXRgIGlzIHBhc3NlZCB0byBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgLiBMb29raW5nIGF0IGBhaWUyX2N0eC5jYCBhbmQgYGRybV9ncHVzdm0uY2AsIEkgc2VlIHRoYXQgdGhlIGNvZGUgaXMgY2hhbmdpbmcgZnJvbSB1c2luZyBgbWF4X3QobG9uZywgdGltZW91dCAtIGppZmZpZXMsIDEpYCB0byBqdXN0IHBhc3NpbmcgYHRpbWVvdXRgIGRpcmVjdGx5ICh3aGljaCBpcyBub3cgYSAqcmVsYXRpdmUqIHRpbWVvdXQpLiBXYWl0LCB0aGlzIGlzIGtleSEgSWYgYHRpbWVvdXRgIGlzIHJlbGF0aXZlIG5vdywgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCB3aWxsIHJlc3RhcnQgdGhlIHRpbWVvdXQgaWYgYCFsb2NrZWRgLlxuXG5QcmV2aW91c2x5LCB0aGUgY2FsbGVyIHdhcyBwYXNzaW5nIGBtYXhfdChsb25nLCB0aW1lb3V0IC0gamlmZmllcywgMSlgLCB3aGljaCByZXByZXNlbnRlZCB0aGUgcmVtYWluaW5nIHRpbWUuIENvbnNlcXVlbnRseSwgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCB3YXMgZXNzZW50aWFsbHkgcmVzdGFydGluZyB0aGUgdGltZW91dCB3aXRoIHRoZSByZW1haW5pbmcgdGltZSwgbWFraW5nIGl0IGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvICpub3QqIHJlc3RhcnRpbmcgdGhlIHRpbWVvdXQgYXQgYWxsLCBzaW5jZSBgamlmZmllcyArICh0aW1lb3V0IC0gamlmZmllcylgIGlzIGp1c3QgYHRpbWVvdXRgLlxuXG5Ob3csIHNpbmNlIHRoZSBjYWxsZXIgcGFzc2VzIHRoZSByZWxhdGl2ZSB0aW1lb3V0IChsaWtlIGBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpYCksIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAgd2lsbCByZXN0YXJ0IHRoZSB0aW1lb3V0IHdpdGggdGhlICpmdWxsKiByZWxhdGl2ZSB0aW1lb3V0LiBUaGlzIG1lYW5zIHRoZSB0aW1lb3V0IGlzIGV4dGVuZGVkIGV2ZXJ5IHRpbWUgdGhlIGZhdWx0IGhhbmRsZXIgbWFrZXMgcHJvZ3Jlc3MuIFRoYXQncyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5HaXZlbiB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGxldCBtZSB0aGluayBhYm91dCBob3cgaXQncyB1c2VkLiBMZXQncyBzZWUgaWYgdGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIGBhaWUyX2N0eC5jYCBpcyBmb3IgdGhlIEFNRCBYRE5BIGRyaXZlciAoYGRyaXZlcnMvYWNjZWwvYW1keGRuYWApLiBgZHJtX2dwdXN2bS5jYCBpcyBmb3IgRFJNIEdQVSBTVk0gKGBkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jYCksIGFuZCBgbm91dmVhdV9zdm0uY2AgaXMgZm9yIE5vdXZlYXUgU1ZNIChgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY2ApLiBUaGlzIGxlYWRzIG1lIHRvIHdhbnQgdG8gc2VlIGlmIGBkcm1fZ3B1c3ZtLmNgIGlzIGZ1enphYmxlLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYGRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA0MiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjA0OjA0Ljg0MDUwOTcyNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU1ODA1MzQxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcm1fZ3B1c3ZtX3NjYW5fbW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz03NzA9c3RhdGljIGJvb2wgZHJtX2dwdXN2bV9jaGVja19wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04MjUtLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4MjY6ICogZHJtX2dwdXN2bV9zY2FuX21tKCkgLSBDaGVjayB0aGUgbWlncmF0aW9uIHN0YXRlIG9mIGEgZHJtX2dwdXN2bV9yYW5nZVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODI3LSAqIEByYW5nZTogUG9pbnRlciB0byB0aGUgc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgdG8gY2hlY2suXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg0MC0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg0MTplbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgZHJtX2dwdXN2bV9zY2FuX21tKHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg0Mi1cXHRcXHRcXHRcXHRcXHQgICAgICAgdm9pZCAqZGV2X3ByaXZhdGVfb3duZXIsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkyNy19XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5Mjg6RVhQT1JUX1NZTUJPTChkcm1fZ3B1c3ZtX3NjYW5fbW0pO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTI5LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jPTE2NDg9aW50IHhlX3N2bV9hbGxvY192cmFtKHN0cnVjdCB4ZV9zdm1fcmFuZ2UgKnJhbmdlLCBjb25zdCBzdHJ1Y3QgZHJtX2dwdXN2bV9jdHggKmN0eCxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xNjY0LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxNjY1OlxcdG1pZ3JhdGlvbl9zdGF0ZSA9IGRybV9ncHVzdm1fc2Nhbl9tbShcXHUwMDI2cmFuZ2UtXFx1MDAzZWJhc2UsXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE2NjYtXFx0XFx0XFx0XFx0XFx0ICAgICB4ZV9zdm1fcHJpdmF0ZV9wYWdlX293bmVyKHZtLCBmYWxzZSksXFxuLS1cXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg9MzUwPXN0YXRpYyBpbmxpbmUgdm9pZCBkcm1fZ3B1c3ZtX2luaXRfcGFnZXMoc3RydWN0IGRybV9ncHVzdm1fcGFnZXMgKnN2bV9wYWdlcyxcXG4tLVxcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0zNTgtLyoqXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oOjM1OTogKiBlbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgLSBTY2FuIHJlc3VsdCBmcm9tIHRoZSBkcm1fZ3B1c3ZtX3NjYW5fbW0oKSBmdW5jdGlvbi5cXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmgtMzYwLSAqIEBEUk1fR1BVU1ZNX1NDQU5fVU5QT1BVTEFURUQ6IEF0IGxlYXN0IG9uZSBwYWdlIHdhcyBub3QgcHJlc2VudCBvciBpbmFjY2Vzc2libGUuXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oLTM2MS0gKiBARFJNX0dQVVNWTV9TQ0FOX0VRVUFMOiBBbGwgcGFnZXMgYmVsb25nIHRvIHRoZSBzdHJ1Y3QgZGV2X3BhZ2VtYXAgaW5kaWNhdGVkIGFzXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oOjM2MjogKiB0aGUgQHBhZ2VtYXAgYXJndW1lbnQgdG8gdGhlIGRybV9ncHVzdm1fc2Nhbl9tbSgpIGZ1bmN0aW9uLlxcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0zNjMtICogQERSTV9HUFVTVk1fU0NBTl9PVEhFUjogQWxsIHBhZ2VzIGJlbG9uZyB0byBleGFjdGx5IG9uZSBkZXZfcGFnZW1hcCwgd2hpY2ggaXNcXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6MzY0OiAqICpOT1QqIHRoZSBAcGFnZW1hcCBhcmd1bWVudCB0byB0aGUgZHJtX2dwdXN2bV9zY2FuX21tKCkuIEFsbCBwYWdlcyBiZWxvbmcgdG9cXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmgtMzY1LSAqIHRoZSBzYW1lIGRldmljZSBwcml2YXRlIG93bmVyLlxcbi0tXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oPTM3ND1lbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQge1xcbi0tXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oLTM4Mi1cXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6MzgzOmVudW0gZHJtX2dwdXN2bV9zY2FuX3Jlc3VsdCBkcm1fZ3B1c3ZtX3NjYW5fbW0oc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlLFxcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0zODQtXFx0XFx0XFx0XFx0XFx0ICAgICAgIHZvaWQgKmRldl9wcml2YXRlX293bmVyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowNDowOC4zOTg1NzM2MTNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY3MzgwMDc0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgR1BVIFZpcnR1YWxpemF0aW9uIGFuZCBEcml2ZXIgSW50ZXJhY3Rpb25zKipcblxuT2theSwgc28gYGRybV9ncHVzdm1fc2Nhbl9tbWAgaXMgYmVpbmcgY2FsbGVkIGJ5IGB4ZV9zdm1fYWxsb2NfdnJhbWAgd2l0aGluIHRoZSBgeGVgIGRyaXZlciwgc3BlY2lmaWNhbGx5IGluIGBkcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmNgLiBUaGUgcXVlc3Rpb24gaW1tZWRpYXRlbHkgcG9wcGluZyBpbnRvIG15IGhlYWQgaXMsIGNhbiB0aGUgYHhlYCBkcml2ZXIsIEludGVsJ3MgWGUgZ3JhcGhpY3MgZHJpdmVyLCBldmVuIGJlIHRyaWdnZXJlZCB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gSXQncyBoYXJkd2FyZS1zcGVjaWZpYywgcmVxdWlyaW5nIGFjdHVhbCBJbnRlbCBYZSBzaWxpY29uLCBidXQgcGVyaGFwcyB0aGVyZSdzIGEgZnV6emluZyBhdmVudWUgdGhyb3VnaCBzb21ldGhpbmcgbGlrZSBWR0VNIG9yIFZLTVM/IE5vLCB0aGF0J3Mgbm90IHF1aXRlIHJpZ2h0OyBgeGVgIGlzIGEgKmhhcmR3YXJlKiBkcml2ZXIgdGhyb3VnaCBhbmQgdGhyb3VnaC5cblxuVGhlbiBteSBtaW5kIHNoaWZ0ZWQgdG8gY29uc2lkZXIgYG5vdXZlYXVfc3ZtLmNgLiBOb3csICp0aGF0KiB3b3VsZCBiZSBpbnRlcmVzdGluZy4gVGhlIE5WSURJQSBkcml2ZXIsIGBub3V2ZWF1YCwgYW5kIHRoZSBnZW5lcmFsIGNvbmNlcHQgb2YgR1BVIHZpcnR1YWxpemF0aW9uLi4uIGhvdyBtaWdodCB0aGF0IHBsYXkgb3V0PyBBbnkgcmVsZXZhbnQgaW50ZXJhY3Rpb25zIHdpdGggYGRybV9ncHVzdm1fZ2V0X3BhZ2VzYCB0aGF0IGNvdWxkIHByb3ZpZGUgYSBkaWZmZXJlbnQgZW50cnkgcG9pbnQgaW50byB0aGUgb3ZlcmFsbCBmbG93PyBJIHNob3VsZCBkaWcgaW50byB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzEyOSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowNDoxMy4wNzIzODE1NDJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzc1MDEwODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHJtX2dwdXN2bV9nZXRfcGFnZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3Q9OTE9UG9zc2libGUgZnV0dXJlIGRlc2lnbiBmZWF0dXJlc1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3QtMTAwLSogUmFuZ2VzIHdpdGggbWl4ZWQgc3lzdGVtIGFuZCBkZXZpY2UgcGFnZXNcXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdDoxMDE6XFx0KiBDYW4gYmUgYWRkZWQgaWYgcmVxdWlyZWQgdG8gZHJtX2dwdXN2bV9nZXRfcGFnZXMgZmFpcmx5IGVhc2lseS5cXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC0xMDItKiBNdWx0aS1HUFUgc3VwcG9ydFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMzQtICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjIzNTogKlxcdFxcdGVyciA9IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKGdwdXN2bSwgXFx1MDAyNmRyYW5nZS1cXHUwMDNlcGFnZXMsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMzYtICpcXHRcXHRcXHRcXHRcXHQgICBncHVzdm0tXFx1MDAzZW1tLCBcXHUwMDI2cmFuZ2UtXFx1MDAzZW5vdGlmaWVyLVxcdTAwM2Vub3RpZmllcixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM9NDM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVyX29wcyBkcm1fZ3B1c3ZtX25vdGlmaWVyX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDU2LSAqIG1hcHBpbmdzIGlzIGJvdW5kIHBlci1wYWdlcyB2aWEgZHJtX2dwdXN2bV9pbml0X3BhZ2VzKCkgYmVmb3JlIHRoZSBmaXJzdFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDU3OiAqIGRybV9ncHVzdm1fZ2V0X3BhZ2VzKCkgY2FsbC4gSG93ZXZlciwgdGhlIHNhbWUgYmFzZVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDU4LSAqIEBncHVzdm0gY2FuIGFsc28gYmUgdXNlZCB3aXRoIGJvdGggbW9kZXMgdG9nZXRoZXIgaW4gd2hpY2ggY2FzZSB0aGUgZnVsbFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz05NDg9ZHJtX2dwdXN2bV9yYW5nZV9jaHVua19zaXplKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk5NC1cXHRcXHQgKiBkcm1fcGFnZW1hcF9taWdyYXRlX3RvX2Rldm1lbSB3aXRoICdtaWdyYXRlLmNwYWdlcyAhPSBucGFnZXMnXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5OTU6XFx0XFx0ICogYW5kIHRoZW4gdXBvbiBkcm1fZ3B1c3ZtX2dldF9wYWdlcyBkZXZpY2UgcGFnZXMgZnJvbVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTk2LVxcdFxcdCAqIG90aGVyIHByb2Nlc3NlcyBhcmUgY29sbGVjdGVkICsgZmF1bHRlZCBpbiB3aGljaCBjcmVhdGVzIGFsbFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz0xNDEyPXN0YXRpYyBib29sIGRybV9ncHVzdm1fcGFnZXNfdmFsaWRfdW5sb2NrZWQoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTQyOS0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE0MzA6ICogZHJtX2dwdXN2bV9nZXRfcGFnZXMoKSAtIEdldCBwYWdlcyBhbmQgcG9wdWxhdGUgR1BVIFNWTSBwYWdlcyBzdHJ1Y3RcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE0MzEtICogQGdwdXN2bTogUG9pbnRlciB0byB0aGUgR1BVIFNWTSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTQ0My0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE0NDQ6aW50IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNDQ1LVxcdFxcdFxcdCBzdHJ1Y3QgZHJtX2dwdXN2bV9wYWdlcyAqc3ZtX3BhZ2VzLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNjYxLX1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE2NjI6RVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXN2bV9nZXRfcGFnZXMpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTY2My1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz0xNTMzPWludCB4ZV9zdm1fcmFuZ2VfZ2V0X3BhZ2VzKHN0cnVjdCB4ZV92bSAqdm0sIHN0cnVjdCB4ZV9zdm1fcmFuZ2UgKnJhbmdlLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE1MzctXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjE1Mzg6XFx0ZXJyID0gZHJtX2dwdXN2bV9nZXRfcGFnZXMoXFx1MDAyNnZtLVxcdTAwM2Vzdm0uZ3B1c3ZtLCBcXHUwMDI2cmFuZ2UtXFx1MDAzZXBhZ2VzLFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xNTM5LVxcdFxcdFxcdFxcdCAgIHZtLVxcdTAwM2Vzdm0uZ3B1c3ZtLm1tLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3VzZXJwdHIuYz02MD1pbnQgeGVfdm1hX3VzZXJwdHJfcGluX3BhZ2VzKHN0cnVjdCB4ZV91c2VycHRyX3ZtYSAqdXZtYSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV91c2VycHRyLmMtNzYtXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3VzZXJwdHIuYzo3NzpcXHRyZXR1cm4gZHJtX2dwdXN2bV9nZXRfcGFnZXMoXFx1MDAyNnZtLVxcdTAwM2Vzdm0uZ3B1c3ZtLCBcXHUwMDI2dXZtYS1cXHUwMDNldXNlcnB0ci5wYWdlcyxcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdXNlcnB0ci5jLTc4LVxcdFxcdFxcdFxcdCAgICB1dm1hLVxcdTAwM2V1c2VycHRyLm5vdGlmaWVyLm1tLFxcbi0tXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oPTMyMD12b2lkIGRybV9ncHVzdm1fcmFuZ2Vfc2V0X3VubWFwcGVkKHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSxcXG4tLVxcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0zMjQtXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oOjMyNTppbnQgZHJtX2dwdXN2bV9nZXRfcGFnZXMoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmgtMzI2LVxcdFxcdFxcdCBzdHJ1Y3QgZHJtX2dwdXN2bV9wYWdlcyAqc3ZtX3BhZ2VzLFxcbi0tXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oPTMzNz12b2lkIGRybV9ncHVzdm1fZnJlZV9wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbi0tXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oLTM0Ny0gKiBzdHJ1Y3R1cmUgbXVzdCBjYWxsIHRoaXMgb25jZSBvbiBlYWNoIHBhZ2VzIGluc3RhbmNlIGFmdGVyIGFsbG9jYXRpb24sXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oOjM0ODogKiBiZWZvcmUgdGhlIGZpcnN0IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKCkgLyB1bm1hcCAvIGZyZWUuXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oLTM0OS0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDQ6MTUuMzA5ODg3OTI1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4ODU0MDMzOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIERSTSBHUFUgU1ZNIFVzYWdlIGluIFN5emthbGxlciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGRybV9ncHVzdm1fZ2V0X3BhZ2VzYC4gSXQncyB1c2VkIGJ5IHRoZSBgeGVgIGRyaXZlciwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgeGVfc3ZtX3JhbmdlX2dldF9wYWdlc2AgYW5kIGB4ZV92bWFfdXNlcnB0cl9waW5fcGFnZXNgLiBSaWdodCwgYGRybV9ncHVzdm1gIGlzIGEgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb24sIGVzc2VudGlhbGx5IGEgRFJNLWxldmVsIGFic3RyYWN0aW9uIGZvciBHUFUgU2hhcmVkIFZpcnR1YWwgTWVtb3J5LiBJdCBzZWVtcyBsaWtlIHRoZSBgeGVgIGRyaXZlciBpcyBjdXJyZW50bHkgdGhlIHByaW1hcnkgdXNlci4gSG9sZCBvbiBhIHNlY29uZCwgd2hhdCBhYm91dCB0aGUgb3RoZXIgZHJpdmVycz9cblxuSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGxhbmRzY2FwZS4gYG5vdXZlYXVfc3ZtLmNgIGltcGxlbWVudHMgU1ZNIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBgbm91dmVhdWAgZHJpdmVyLiBBbmQgSSBhbHNvIHNlZSBhIHNpbWlsYXIgZmlsZSBmb3IgdGhlIGFtZHhkbmEgZHJpdmVyIGBhaWUyX2N0eC5jYC5cblxuTm93IHRoZSBxdWVzdGlvbiBpcywgYXJlIGFueSBvZiB0aGVzZSBkcml2ZXJzIHJlYWNoYWJsZSBieSBzeXprYWxsZXI/IGBub3V2ZWF1YCBpcyBhIHRyaWNreSBvbmUuIFN5emthbGxlciAqY2FuKiBmdXp6IGl0IGlmIHlvdSdyZSB1c2luZyBhIHZpcnR1YWwgR1BVIG9yIHNvbWUga2luZCBvZiBtb2NraW5nIHNldHVwLCBidXQgaXQgdHlwaWNhbGx5IG5lZWRzIHJlYWwgaGFyZHdhcmUgdG8gcmVhbGx5IHRlc3QgdGhlIGZ1bmN0aW9uYWxpdHkuIFRoYXQncyBhIGh1Z2UgaHVyZGxlIHRvIG92ZXJjb21lLlxuXG5UaGlua2luZyBhYm91dCBvdGhlciBkcml2ZXJzLCBJIHNlZSBob3cgdGhleSd2ZSBtYW5hZ2VkIHRvIGFjaGlldmUgc29tZSBsZXZlbCBvZiBzeXprYWxsZXIgY292ZXJhZ2UsIHdpdGggdGhlIGxpa2VzIG9mIGBzeXotdXNiYCBhbmQgYHZoY2lgIGZvciBVU0IgZGV2aWNlcywgYG1hYzgwMjExX2h3c2ltYCBmb3Igd2lmaS4gQW5kIHdpdGhpbiBEUk0sIHN5emthbGxlciBsZXZlcmFnZXMgYHZrbXNgIGFuZCBgdmdlbWAgYXMgYSB2aXJ0dWFsIGRldmljZS5cblxuQnV0IGB4ZWAsIGBub3V2ZWF1YCwgYW5kIGBhbWR4ZG5hYCBhcmUgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycy4gVGhhdCdzIGEgdG91Z2ggY29uc3RyYWludC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGVhc2lseSBhY2Nlc3NpYmxlLlxuXG5PaCwgYW5kIGhlcmUncyBhIHRob3VnaHQsIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAgaXMgYSBjb3JlIG1tL2htbSBmdW5jdGlvbi4gSXMgaXQgdXNlZCBieSBhbnkgb3RoZXIgZHJpdmVycyBiZXNpZGVzIHRoZSBvbmVzIEkndmUgYWxyZWFkeSBjb25zaWRlcmVkPyBUaGF0IGNvdWxkIHByb3ZpZGUgYSBtb3JlIGdlbmVyYWxpemVkIGVudHJ5IHBvaW50IGZvciBmdXp6aW5nLiBUaGF0J3MgdGhlIGtleTogYSBtb3JlIGdlbmVyaWMgYWNjZXNzIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDkxOSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowNDoyMy4xOTUyOTQ5MTVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MTU5ODIxMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTE2MD1ub3JtYWwgaW50ZXJmYWNlIGlzOjpcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMTYxLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoxNjI6ICBpbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTE2My0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTE2OT1UaGUgY2FsbGVyIG11c3Qgbm90IGhvbGQgYGBtbWFwX3JlYWRfbG9ja2BgIGJlZm9yZSB0aGUgY2FsbC5cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MTcwOmBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgIHRha2VzIHRoZSBtbWFwIHJlYWQgbG9jayBpbnRlcm5hbGx5IGFuZFxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0xNzEtYWxsb3dzIGBgaGFuZGxlX21tX2ZhdWx0KClgYCB0byBkcm9wIGl0IGR1cmluZyBmYXVsdCBoYW5kbGluZy4gVGhpcyBpcyByZXF1aXJlZFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTE4Nj1UaGUgdXNhZ2UgcGF0dGVybiBpczo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjAzLSBhZ2FpbjpcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjA0OiAgICAgIHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZyYW5nZSwgdGltZW91dCk7XFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTIwNS0gICAgICBpZiAocmV0KVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTIyOD11cGRhdGUuIFRoZSByZXRyeSBjaGVjayBtdXN0IHVzZSB0aGUgc2FtZSBub3RpZmllciBhbmQgc2VxdWVuY2UgbnVtYmVyIHN0b3JlZFxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoyMjk6aW4gYGByYW5nZWBgIGJ5IGBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgLlxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yMzAtXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTIzMT1Ib2xkaW5nIHRoZSBtbWFwIGxvY2sgYWNyb3NzIEhNTSBmYXVsdHNcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yMzMtXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjIzNDpNb3N0IGNhbGxlcnMgc2hvdWxkIHVzZSBgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KClgYC4gSWYgYSBkcml2ZXJcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjM1LXJlYWxseSBuZWVkcyB0byBob2xkIHRoZSBtbWFwIGxvY2sgYWNyb3NzIHdvcmsgb3V0c2lkZSBITU0sIGl0IGNhbiB1c2U6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTI0MD1pbnRlcmZhY2UgY2Fubm90IHN1cHBvcnQgVk1BcyB3aG9zZSBmYXVsdCBoYW5kbGVycyBuZWVkIHRvIGRyb3AgdGhlIG1tYXAgbG9jay5cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjQxOk5ldyBjYWxsZXJzIHNob3VsZCBwcmVmZXIgYGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpYGAgdW5sZXNzIHRoZXlcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjQyLWhhdmUgYSBzcGVjaWZpYyByZXF1aXJlbWVudCB0byBrZWVwIHRoZSBtbWFwIGxvY2sgaGVsZCBhY3Jvc3MgdGhlIGNhbGwuXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYz0xMDMxPXN0YXRpYyBpbnQgYWllMl9wb3B1bGF0ZV9yYW5nZShzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICphYm8pXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYy0xMDY0LVxcbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jOjEwNjU6XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXFx1MDAyNm1hcHAtXFx1MDAzZXJhbmdlLCB0aW1lb3V0KTtcXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYy0xMDY2LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jPTg0MT1lbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgZHJtX2dwdXN2bV9zY2FuX21tKHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODY4LXJldHJ5OlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODY5OlxcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZobW1fcmFuZ2UsIHRpbWVvdXQpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODcwLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jPTE0NDQ9aW50IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE0OTEtXFx0aG1tX3JhbmdlLmhtbV9wZm5zID0gcGZucztcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE0OTI6XFx0ZXJyID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXFx1MDAyNmhtbV9yYW5nZSwgdGltZW91dCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNDkzLVxcdG1tcHV0KG1tKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM9MTcwMz1pbnQgZHJtX2dwdXN2bV9yYW5nZV9ldmljdChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNzI4LVxcdGhtbV9yYW5nZS5obW1fcGZucyA9IHBmbnM7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNzI5OlxcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZobW1fcmFuZ2UsIHRpbWVvdXQpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTczMC1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmM9NjUyPXN0YXRpYyBpbnQgbm91dmVhdV9yYW5nZV9mYXVsdChzdHJ1Y3Qgbm91dmVhdV9zdm1tICpzdm1tLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uYy02OTMtXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uYzo2OTQ6XFx0XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXFx1MDAyNnJhbmdlLCByZW1haW5pbmcpO1xcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmMtNjk1LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jPTM5Nj1zdGF0aWMgaW50IG1zaHZfcmVnaW9uX3JhbmdlX2ZhdWx0KHN0cnVjdCBtc2h2X21lbV9yZWdpb24gKnJlZ2lvbixcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmMtNDE1LWFnYWluOlxcbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmM6NDE2OlxcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZyYW5nZSwgMCk7XFxuZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYy00MTctXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmM9MzI0PWludCBpYl91bWVtX29kcF9tYXBfZG1hX2FuZF9sb2NrKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHAsIHU2NCB1c2VyX3ZpcnQsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jLTM2OC1yZXRyeTpcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jOjM2OTpcXHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcXHUwMDI2cmFuZ2UsIHRpbWVvdXQpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmMtMzcwLVxcdGlmICh1bmxpa2VseShyZXQpKVxcbi0tXFxuaW5jbHVkZS9saW51eC9obW0uaD0xMjU9aW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSk7XFxuaW5jbHVkZS9saW51eC9obW0uaDoxMjY6aW50IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLFxcbmluY2x1ZGUvbGludXgvaG1tLmgtMTI3LVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTtcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTM5Mj1zdGF0aWMgaW50IGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXFxuLS1cXG5saWIvdGVzdF9obW0uYy0zOTgtXFx0d2hpbGUgKHRydWUpIHtcXG5saWIvdGVzdF9obW0uYzozOTk6XFx0XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQocmFuZ2UsIHRpbWVvdXQpO1xcbmxpYi90ZXN0X2htbS5jLTQwMC1cXHRcXHRpZiAocmV0KVxcbi0tXFxubW0vaG1tLmM9Njg5PXN0YXRpYyBpbnQgaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSwgYm9vbCAqbG9ja2VkKVxcbi0tXFxubW0vaG1tLmMtNzUzLSAqIFRoZSBtbWFwIGxvY2sgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIgYW5kIHdpbGwgcmVtYWluIGhlbGQgb24gcmV0dXJuLlxcbm1tL2htbS5jOjc1NDogKiBOZXcgdXNlcnMgc2hvdWxkIHByZWZlciBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpIHVubGVzcyB0aGV5XFxubW0vaG1tLmMtNzU1LSAqIHNwZWNpZmljYWxseSBuZWVkIHRvIGtlZXAgdGhlIG1tYXAgbG9jayBoZWxkIGFjcm9zcyB0aGUgY2FsbC4gVGhpcyBoZWxwZXJcXG4tLVxcbm1tL2htbS5jPTc2Mj1FWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV9mYXVsdCk7XFxuLS1cXG5tbS9obW0uYy03NjQtLyoqXFxubW0vaG1tLmM6NzY1OiAqIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0IC0gZmF1bHQgaW4gYSByYW5nZSB3aXRoIGEgcmV0cnkgdGltZW91dFxcbm1tL2htbS5jLTc2Ni0gKiBAcmFuZ2U6XFx0YXJndW1lbnQgc3RydWN0dXJlXFxuLS1cXG5tbS9obW0uYy03ODMtICovXFxubW0vaG1tLmM6Nzg0OmludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSxcXG5tbS9obW0uYy03ODUtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpXFxuLS1cXG5tbS9obW0uYy04MjQtfVxcbm1tL2htbS5jOjgyNTpFWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KTtcXG5tbS9obW0uYy04MjYtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz0yOTA0PVRFU1RfRl9USU1FT1VUKGhtbSwgYmVuY2htYXJrX3RocF9taWdyYXRpb24sIDEyMClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTI5NjAtICogVGVzdCB0aGF0IEhNTSBjYW4gZmF1bHQgaW4gcGFnZXMgYmFja2VkIGJ5IHVzZXJmYXVsdGZkIHVzaW5nIHRoZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjI5NjE6ICogaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKSBwYXRoIHdpdGggbm8gdGltZW91dC4gVGhpcyBleGVyY2lzZXNcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yOTYyLSAqIHRoZSBsb2NrLWRyb3AgcmV0cnkgbG9naWMgaW4gdGhlIEhNTSBmcmFtZXdvcmsuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjA0OjI2LjcxMTI4MjkyNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzU1NzIyMzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgZGVsdmUgaW50byB0aGlzLlxuXG4qKkludmVzdGlnYXRpbmcgYSBUaW1lb3V0IGluIHRoZSBITU0gU3lzdGVtKipcblxuQWxyaWdodCwgc28gYGxpYi90ZXN0X2htbS5jYCBpcyB1c2luZyBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgLiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2h5IHRoaXMgaXMgcmVsZXZhbnQgdG8gdGhlIHBhdGNoIGluIHF1ZXN0aW9uLiBUaGUgaW5pdGlhbCBhc3N1bXB0aW9uIHdvdWxkIGJlIGEgZGlyZWN0IGNvbm5lY3Rpb24sIGJ1dCB3YWl0LCB0aGUgcGF0Y2ggKmRpZG4ndCogdG91Y2ggZWl0aGVyIGBsaWIvdGVzdF9obW0uY2Agb3IgYGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmNgLiBUaGF0IG1lYW5zIHRoZSBjb25uZWN0aW9uIGlzbid0IGFzIG9idmlvdXMgYXMgSSBpbml0aWFsbHkgdGhvdWdodC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB0aW1lb3V0IHBhcmFtZXRlciBpcyBiZWluZyBwYXNzZWQgd2l0aGluIGBsaWIvdGVzdF9obW0uY2AuIFNvLCBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhhdCBzcGVjaWZpYyB0ZXN0IGZpbGUgdG8gc2VlIGhvdyBpdCdzIGFjdHVhbGx5IHVzaW5nIHRoZSBgdGltZW91dGAgdmFyaWFibGUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiwgYW5kIGhvcGVmdWxseSwgdGhhdCB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODUzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDQ6MzIuMDY3MDA3OTEzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvdGVzdF9obW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzODA6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDM4MTpcXHRcXHRcXHR9XFxuIDM4MjpcXHRcXHRcXHRicmVhaztcXG4gMzgzOlxcdFxcdH1cXG4gMzg0OlxcdFxcbiAzODU6XFx0XFx0cmV0ID0gZG1pcnJvcl9kb19mYXVsdChkbWlycm9yLCByYW5nZSk7XFxuIDM4NjpcXHRcXG4gMzg3OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZG1pcnJvci1cXHUwMDNlbXV0ZXgpO1xcbiAzODg6XFx0b3V0OlxcbiAzODk6XFx0XFx0cmV0dXJuIHJldDtcXG4gMzkwOlxcdH1cXG4gMzkxOlxcdFxcbiAzOTI6XFx0c3RhdGljIGludCBkbWlycm9yX3JhbmdlX2ZhdWx0X3VubG9ja2VkKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxcbiAzOTM6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXFxuIDM5NDpcXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQpXFxuIDM5NTpcXHR7XFxuIDM5NjpcXHRcXHRpbnQgcmV0O1xcbiAzOTc6XFx0XFxuIDM5ODpcXHRcXHR3aGlsZSAodHJ1ZSkge1xcbiAzOTk6XFx0XFx0XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQocmFuZ2UsIHRpbWVvdXQpO1xcbiA0MDA6XFx0XFx0XFx0aWYgKHJldClcXG4gNDAxOlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiA0MDI6XFx0XFxuIDQwMzpcXHRcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZkbWlycm9yLVxcdTAwM2VtdXRleCk7XFxuIDQwNDpcXHRcXHRcXHRpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkocmFuZ2UtXFx1MDAzZW5vdGlmaWVyLFxcbiA0MDU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHJhbmdlLVxcdTAwM2Vub3RpZmllcl9zZXEpKSB7XFxuIDQwNjpcXHRcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRtaXJyb3ItXFx1MDAzZW11dGV4KTtcXG4gNDA3OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA0MDg6XFx0XFx0XFx0fVxcbiA0MDk6XFx0XFx0XFx0YnJlYWs7XFxuIDQxMDpcXHRcXHR9XFxuIDQxMTpcXHRcXG4gNDEyOlxcdFxcdHJldCA9IGRtaXJyb3JfZG9fZmF1bHQoZG1pcnJvciwgcmFuZ2UpO1xcbiA0MTM6XFx0XFxuIDQxNDpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRtaXJyb3ItXFx1MDAzZW11dGV4KTtcXG4gNDE1OlxcdG91dDpcXG4gNDE2OlxcdFxcdHJldHVybiByZXQ7XFxuIDQxNzpcXHR9XFxuIDQxODpcXHRcXG4gNDE5OlxcdHN0YXRpYyBpbnQgZG1pcnJvcl9mYXVsdF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG4gNDIwOlxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4gNDIxOlxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgd3JpdGUsXFxuIDQyMjpcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgdGltZW91dClcXG4gNDIzOlxcdHtcXG4gNDI0OlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gZG1pcnJvci1cXHUwMDNlbm90aWZpZXIubW07XFxuIDQyNTpcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHI7XFxuIDQyNjpcXHRcXHR1bnNpZ25lZCBsb25nIHBmbnNbMzJdO1xcbiA0Mjc6XFx0XFx0c3RydWN0IGhtbV9yYW5nZSByYW5nZSA9IHtcXG4gNDI4OlxcdFxcdFxcdC5ub3RpZmllciA9IFxcdTAwMjZkbWlycm9yLVxcdTAwM2Vub3RpZmllcixcXG4gNDI5OlxcdFxcdFxcdC5obW1fcGZucyA9IHBmbnMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjA0OjMyLjA2NzEyOTI2M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzEwNDg1NjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYHRpbWVvdXRgIFZhcmlhYmxlIGluIGBsaWIvdGVzdF9obW0uY2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbGliL3Rlc3RfaG1tLmNgIGFuZCBJIGltbWVkaWF0ZWx5IHNwb3QgdGhlIGB0aW1lb3V0YCB2YXJpYWJsZSBiZWluZyBwYXNzZWQgZGlyZWN0bHksIGFuZCB0aGF0IHRyaWdnZXJzIGEgcXVlc3Rpb24uIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgdGhhdCBgdGltZW91dGAgaXMgcGFzc2VkIHJpZ2h0IGludG8gc29tZSBmdW5jdGlvbiBjYWxsLiBCdXQsIHRoZSBxdWVzdGlvbiBub3cgaXMsIHdoZXJlIHRoZSBoZWNrIGlzIHRoaXMgYHRpbWVvdXRgIHZhcmlhYmxlIGJlaW5nICpkZWZpbmVkKj8gSSBuZWVkIHRvIHRyYWNlIGJhY2sgaXRzIG9yaWdpbi4gSXMgaXQgY29taW5nIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUsIGEgY29uZmlndXJhdGlvbiBmaWxlLCBvciBpcyBpdCBoYXJkY29kZWQgc29tZXdoZXJlIHVwc3RyZWFtIGluIHRoZSBidWlsZCBwcm9jZXNzPyBJJ20gZ29pbmcgdG8gaGF2ZSB0byBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSwgdGhlIGJ1aWxkIHN5c3RlbSAoTWFrZWZpbGUsIENNYWtlTGlzdHMudHh0LCB3aGF0ZXZlciksIGFuZCBhbnkgcmVsZXZhbnQgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgdmFsdWUgZm9yIGB0aW1lb3V0YCBpcyBiZWluZyBzZXQuIEl0J3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgdGVzdCdzIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGlmIHRoaXMgdmFsdWUgaXNuJ3QgcHJvcGVybHkgY29udHJvbGxlZCBvciBzYW5pdGl6ZWQuIEl0J3MgYSBjbGFzc2ljIGV4YW1wbGUgb2YgbG9va2luZyBmb3IgdGhlIHNvdXJjZSBvZiBhIHBhcmFtZXRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3OTIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjA0OjM2LjM3NzYxODE2N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL3Rlc3RfaG1tLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDE5LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDE5OlxcdHN0YXRpYyBpbnQgZG1pcnJvcl9mYXVsdF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG4gNDIwOlxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4gNDIxOlxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgd3JpdGUsXFxuIDQyMjpcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgdGltZW91dClcXG4gNDIzOlxcdHtcXG4gNDI0OlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gZG1pcnJvci1cXHUwMDNlbm90aWZpZXIubW07XFxuIDQyNTpcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHI7XFxuIDQyNjpcXHRcXHR1bnNpZ25lZCBsb25nIHBmbnNbMzJdO1xcbiA0Mjc6XFx0XFx0c3RydWN0IGhtbV9yYW5nZSByYW5nZSA9IHtcXG4gNDI4OlxcdFxcdFxcdC5ub3RpZmllciA9IFxcdTAwMjZkbWlycm9yLVxcdTAwM2Vub3RpZmllcixcXG4gNDI5OlxcdFxcdFxcdC5obW1fcGZucyA9IHBmbnMsXFxuIDQzMDpcXHRcXHRcXHQucGZuX2ZsYWdzX21hc2sgPSAwLFxcbiA0MzE6XFx0XFx0XFx0LmRlZmF1bHRfZmxhZ3MgPVxcbiA0MzI6XFx0XFx0XFx0XFx0SE1NX1BGTl9SRVFfRkFVTFQgfCAod3JpdGUgPyBITU1fUEZOX1JFUV9XUklURSA6IDApLFxcbiA0MzM6XFx0XFx0XFx0LmRldl9wcml2YXRlX293bmVyID0gZG1pcnJvci1cXHUwMDNlbWRldmljZSxcXG4gNDM0OlxcdFxcdH07XFxuIDQzNTpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gNDM2OlxcdFxcbiA0Mzc6XFx0XFx0aWYgKCFtbWdldF9ub3RfemVybyhtbSkpXFxuIDQzODpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gNDM5OlxcdFxcbiA0NDA6XFx0XFx0Zm9yIChhZGRyID0gc3RhcnQ7IGFkZHIgXFx1MDAzYyBlbmQ7IGFkZHIgPSByYW5nZS5lbmQpIHtcXG4gNDQxOlxcdFxcdFxcdHJhbmdlLnN0YXJ0ID0gYWRkcjtcXG4gNDQyOlxcdFxcdFxcdHJhbmdlLmVuZCA9IG1pbihhZGRyICsgKEFSUkFZX1NJWkUocGZucykgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCksIGVuZCk7XFxuIDQ0MzpcXHRcXG4gNDQ0OlxcdFxcdFxcdHJldCA9IGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWQoZG1pcnJvciwgXFx1MDAyNnJhbmdlLCB0aW1lb3V0KTtcXG4gNDQ1OlxcdFxcdFxcdGlmIChyZXQpXFxuIDQ0NjpcXHRcXHRcXHRcXHRicmVhaztcXG4gNDQ3OlxcdFxcdH1cXG4gNDQ4OlxcdFxcbiA0NDk6XFx0XFx0bW1wdXQobW0pO1xcbiA0NTA6XFx0XFx0cmV0dXJuIHJldDtcXG4gNDUxOlxcdH1cXG4gNDUyOlxcdFxcbiA0NTM6XFx0c3RhdGljIGludCBkbWlycm9yX2ZhdWx0KHN0cnVjdCBkbWlycm9yICpkbWlycm9yLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbiA0NTQ6XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgZW5kLCBib29sIHdyaXRlKVxcbiA0NTU6XFx0e1xcbiA0NTY6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBkbWlycm9yLVxcdTAwM2Vub3RpZmllci5tbTtcXG4gNDU3OlxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcjtcXG4gNDU4OlxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuc1szMl07XFxuIDQ1OTpcXHRcXHRzdHJ1Y3QgaG1tX3JhbmdlIHJhbmdlID0ge1xcbiA0NjA6XFx0XFx0XFx0Lm5vdGlmaWVyID0gXFx1MDAyNmRtaXJyb3ItXFx1MDAzZW5vdGlmaWVyLFxcbiA0NjE6XFx0XFx0XFx0LmhtbV9wZm5zID0gcGZucyxcXG4gNDYyOlxcdFxcdFxcdC5wZm5fZmxhZ3NfbWFzayA9IDAsXFxuIDQ2MzpcXHRcXHRcXHQuZGVmYXVsdF9mbGFncyA9XFxuIDQ2NDpcXHRcXHRcXHRcXHRITU1fUEZOX1JFUV9GQVVMVCB8ICh3cml0ZSA/IEhNTV9QRk5fUkVRX1dSSVRFIDogMCksXFxuIDQ2NTpcXHRcXHRcXHQuZGV2X3ByaXZhdGVfb3duZXIgPSBkbWlycm9yLVxcdTAwM2VtZGV2aWNlLFxcbiA0NjY6XFx0XFx0fTtcXG4gNDY3OlxcdFxcdGludCByZXQgPSAwO1xcbiA0Njg6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjA0OjM2LjM3Nzc0MDY2N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDUzMzIyNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZTpcblxuKipGaW5kaW5nIHRoZSBDYWxsZXJzIG9mIGBkbWlycm9yX2ZhdWx0X3VubG9ja2VkYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBkbWlycm9yX2ZhdWx0X3VubG9ja2VkYC4gSXQncyBuYW1lZCBpbiBhIHdheSB0aGF0IHN1Z2dlc3RzIGl0J3MgcmVsYXRlZCB0byBzb21lIGtpbmQgb2YgZGF0YSBtaXJyb3JpbmcsIHBlcmhhcHMgYSBmYXVsdCBjb25kaXRpb24sIGFuZCBwb3NzaWJseSB3b3JraW5nIHdpdGggYW4gdW5sb2NrZWQgbXV0ZXguIFRoZSBcInVubG9ja2VkXCIgcGFydCBpcyBpbXBvcnRhbnQ7IGl0IGltcGxpZXMgYSBjcml0aWNhbCBzZWN0aW9uIGlzICpub3QqIHByb3RlY3RlZCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZCwgc28gY29uY3VycmVuY3kgY29uc2lkZXJhdGlvbnMgYmVjb21lIHBhcmFtb3VudC4gRmlyc3QsIEkgbmVlZCB0byBwaW5wb2ludCBldmVyeXdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgY2FsbGVkIHdpdGhpbiB0aGUgY29kZWJhc2UuIFRoZSBzaGVlciBudW1iZXIgb2YgbG9jYXRpb25zIHdpbGwgZ2l2ZSBtZSBhIGdvb2QgaW5kaWNhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uJ3Mgb3ZlcmFsbCBzaWduaWZpY2FuY2UgdG8gdGhlIHNvZnR3YXJlIGFuZCB3aWxsIGhlbHAgbWUgbmFycm93IGRvd24gd2hlcmUgaXQncyBtb3N0IGltcG9ydGFudCB0byBhbmFseXplLiBPbmNlIEkga25vdyB0aGUgY2FsbGluZyBwb2ludHMsIEkgY2FuIHN0YXJ0IGxvb2tpbmcgYXQgdGhlIGltbWVkaWF0ZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljIG9wZXJhdGlvbnMgaGFwcGVuaW5nIGFyb3VuZCB0aGF0IGZhdWx0IGhhbmRsaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTgyNCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDQ6NDIuNDMxMDY2MDM2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzY4NDIzODI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRtaXJyb3JfZmF1bHRfdW5sb2NrZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL3Rlc3RfaG1tLmM9MzkyPXN0YXRpYyBpbnQgZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTQxOC1cXG5saWIvdGVzdF9obW0uYzo0MTk6c3RhdGljIGludCBkbWlycm9yX2ZhdWx0X3VubG9ja2VkKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxcbmxpYi90ZXN0X2htbS5jLTQyMC1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5saWIvdGVzdF9obW0uYz01NTI9c3RhdGljIGludCBkbWlycm9yX3JlYWRfdW5sb2NrZWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXFxuLS1cXG5saWIvdGVzdF9obW0uYy01NzctXFx0XFx0c3RhcnQgPSBjbWQtXFx1MDAzZWFkZHIgKyAoYm91bmNlLmNwYWdlcyBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKTtcXG5saWIvdGVzdF9obW0uYzo1Nzg6XFx0XFx0cmV0ID0gZG1pcnJvcl9mYXVsdF91bmxvY2tlZChkbWlycm9yLCBzdGFydCwgZW5kLCBmYWxzZSwgdGltZW91dCk7XFxubGliL3Rlc3RfaG1tLmMtNTc5LVxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjA0OjQ0Ljc5OTUwMjU1NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDAyNzgwOTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBgdGVzdF9obW0uY2AgQ29udW5kcnVtKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbiBpbiBgbGliL3Rlc3RfaG1tLmNgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhhdCBgZG1pcnJvcl9yZWFkX3VubG9ja2VkYCBmdW5jdGlvbiBjYWxsLiBJIHJlY29nbml6ZSB0aGF0IG5hbWluZyBjb252ZW50aW9uLCBzbyBJJ20gdGhpbmtpbmcgdGhpcyBsaWtlbHkgaW52b2x2ZXMgc29tZSBzb3J0IG9mIGRpcmVjdCBtZW1vcnkgYWNjZXNzIHJlbGF0ZWQgdG8gYSBtaXJyb3Igb3IgZHVwbGljYXRlIGRhdGEgc3RydWN0dXJlLCBhbmQgdGhlIFwidW5sb2NrZWRcIiBwYXJ0IHN1Z2dlc3RzIHdlJ3JlIGJ5cGFzc2luZyB0eXBpY2FsIGNvbmN1cnJlbmN5IGNvbnRyb2xzLiBLbm93aW5nIHRoZSBwcm9qZWN0IGFuZCB0aGUgY29udGV4dCBpcyBrZXkgaGVyZSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljcy4gSXMgdGhpcyBhIHJlYWQtb25seSBhY2Nlc3M/IFdoYXQncyB0aGUgbG9jayBwcm90ZWN0aW5nPyBXaGF04oCZcyB0aGUgaW1wbGljYXRpb24gb2YgYnlwYXNzaW5nIHRoZSBsb2NrPyBJcyBpdCBmb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBvciBpcyB0aGVyZSBhIHJlYXNvbiB0aGlzIHBhcnRpY3VsYXIgY29kZSBzZWN0aW9uIGRvZXNuJ3QgbmVlZCB0aGUgbG9jaz8gSSBuZWVkIHRvIGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgdGhlIHBvdGVudGlhbCByaXNrcyBvciBiZW5lZml0cyBvZiB1c2luZyB0aGlzIHVubG9ja2VkIHJlYWQuIE15IGV4cGVydGlzZSBzaG91bGQgYWxsb3cgbWUgdG8gc3BvdCBhbnkgcmVkIGZsYWdzIHJlbGF0ZWQgdG8gZGF0YSBjb3JydXB0aW9uLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjg0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDQ6NDguODAyMjg1NjYyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvdGVzdF9obW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NTA6XFx0fVxcbiA1NTE6XFx0XFxuIDU1MjpcXHRzdGF0aWMgaW50IGRtaXJyb3JfcmVhZF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG4gNTUzOlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kICpjbWQsXFxuIDU1NDpcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyB0aW1lb3V0KVxcbiA1NTU6XFx0e1xcbiA1NTY6XFx0XFx0c3RydWN0IGRtaXJyb3JfYm91bmNlIGJvdW5jZTtcXG4gNTU3OlxcdFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDtcXG4gNTU4OlxcdFxcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGNtZC1cXHUwMDNlbnBhZ2VzIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxuIDU1OTpcXHRcXHRpbnQgcmV0O1xcbiA1NjA6XFx0XFxuIDU2MTpcXHRcXHRzdGFydCA9IGNtZC1cXHUwMDNlYWRkcjtcXG4gNTYyOlxcdFxcdGVuZCA9IHN0YXJ0ICsgc2l6ZTtcXG4gNTYzOlxcdFxcdGlmIChlbmQgXFx1MDAzYyBzdGFydClcXG4gNTY0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1NjU6XFx0XFxuIDU2NjpcXHRcXHRyZXQgPSBkbWlycm9yX2JvdW5jZV9pbml0KFxcdTAwMjZib3VuY2UsIHN0YXJ0LCBzaXplKTtcXG4gNTY3OlxcdFxcdGlmIChyZXQpXFxuIDU2ODpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA1Njk6XFx0XFxuIDU3MDpcXHRcXHR3aGlsZSAoMSkge1xcbiA1NzE6XFx0XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZG1pcnJvci1cXHUwMDNlbXV0ZXgpO1xcbiA1NzI6XFx0XFx0XFx0cmV0ID0gZG1pcnJvcl9kb19yZWFkKGRtaXJyb3IsIHN0YXJ0LCBlbmQsIFxcdTAwMjZib3VuY2UpO1xcbiA1NzM6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkbWlycm9yLVxcdTAwM2VtdXRleCk7XFxuIDU3NDpcXHRcXHRcXHRpZiAocmV0ICE9IC1FTk9FTlQpXFxuIDU3NTpcXHRcXHRcXHRcXHRicmVhaztcXG4gNTc2OlxcdFxcbiA1Nzc6XFx0XFx0XFx0c3RhcnQgPSBjbWQtXFx1MDAzZWFkZHIgKyAoYm91bmNlLmNwYWdlcyBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKTtcXG4gNTc4OlxcdFxcdFxcdHJldCA9IGRtaXJyb3JfZmF1bHRfdW5sb2NrZWQoZG1pcnJvciwgc3RhcnQsIGVuZCwgZmFsc2UsIHRpbWVvdXQpO1xcbiA1Nzk6XFx0XFx0XFx0aWYgKHJldClcXG4gNTgwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA1ODE6XFx0XFx0XFx0Y21kLVxcdTAwM2VmYXVsdHMrKztcXG4gNTgyOlxcdFxcdH1cXG4gNTgzOlxcdFxcbiA1ODQ6XFx0XFx0aWYgKHJldCA9PSAwKSB7XFxuIDU4NTpcXHRcXHRcXHRpZiAoY29weV90b191c2VyKHU2NF90b191c2VyX3B0cihjbWQtXFx1MDAzZXB0ciksIGJvdW5jZS5wdHIsXFxuIDU4NjpcXHRcXHRcXHRcXHRcXHQgYm91bmNlLnNpemUpKVxcbiA1ODc6XFx0XFx0XFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4gNTg4OlxcdFxcdH1cXG4gNTg5OlxcdFxcdGNtZC1cXHUwMDNlY3BhZ2VzID0gYm91bmNlLmNwYWdlcztcXG4gNTkwOlxcdFxcdGRtaXJyb3JfYm91bmNlX2ZpbmkoXFx1MDAyNmJvdW5jZSk7XFxuIDU5MTpcXHRcXHRyZXR1cm4gcmV0O1xcbiA1OTI6XFx0fVxcbiA1OTM6XFx0XFxuIDU5NDpcXHRzdGF0aWMgaW50IGRtaXJyb3JfZG9fd3JpdGUoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuIDU5NTpcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBkbWlycm9yX2JvdW5jZSAqYm91bmNlKVxcbiA1OTY6XFx0e1xcbiA1OTc6XFx0XFx0dW5zaWduZWQgbG9uZyBwZm47XFxuIDU5ODpcXHRcXHR2b2lkICpwdHI7XFxuIDU5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDQ6NDguODAyNDM5MzkxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5ODM0MjAwNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBwcm9tcHQ6XG5cbioqQW5hbHl6aW5nIHRoZSBDYWxsIFNpdGVzIG9mIGBkbWlycm9yX3JlYWRfdW5sb2NrZWRgKipcblxuT2theSwgc28gdGhlIGluaXRpYWwgZGlyZWN0aW9uIGlzIGNsZWFyOiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYGRtaXJyb3JfcmVhZF91bmxvY2tlZGAgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZC4gVGhpcyBpc24ndCBqdXN0IGFib3V0ICpmaW5kaW5nKiB0aGUgY2FsbHMsIGJ1dCB1bmRlcnN0YW5kaW5nIHRoZWlyIGNvbnRleHQuIEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHdoYXQgdGhhdCBmdW5jdGlvbiBsaWtlbHkgZG9lcyBiYXNlZCBvbiBpdHMgbmFtZS4gXCJNaXJyb3IsXCIgXCJyZWFkLFwiIGFuZCBcInVubG9ja2VkXCIgc3VnZ2VzdCB0aGlzIGhhcyB0byBkbyB3aXRoIHJlYWRpbmcgZnJvbSBhIG1pcnJvcmVkIGRhdGEgc3RydWN0dXJlLCBhbmQgdGhlIFwidW5sb2NrZWRcIiBwYXJ0IHRlbGxzIG1lIHRoZXJlJ3Mgc29tZSBzb3J0IG9mIGNvbmN1cnJlbmN5IGNvbnNpZGVyYXRpb24uIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIGEgcmVhZCBvcGVyYXRpb24gd2hlcmUgZXhjbHVzaXZlIGxvY2tzIGFyZW4ndCBuZWNlc3NhcnkuXG5cbk15IG5leHQgbW92ZSBpcyBwcm9iYWJseSB0byB1c2UgYSBzdGF0aWMgYW5hbHlzaXMgdG9vbCBvciBhIGdvb2Qgb2xkLWZhc2hpb25lZCBncmVwIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBjYWxsIHNpdGVzLiBJIGNhbiB1c2UgdGhlIHRvb2wgdG8gZmluZCBjcm9zcy1yZWZlcmVuY2VzIGZvciB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBJIG5lZWQgdG8gYmUgZWZmaWNpZW50IGhlcmUg4oCTIGEgcXVpY2sgc2VhcmNoIHRvIGdldCBhIGxpc3QsIGFuZCB0aGVuIEknbGwgc3RhcnQgdG8gZGlnIGRlZXBlci4gSSdtIGV4cGVjdGluZyBzb21lIGtpbmQgb2Ygb3V0cHV0IGluIHRoZSBmb3JtIG9mIGEgbGlzdCBvZiBsaW5lcyBvZiBjb2RlLlxuXG5PbmNlIEkndmUgZ290IHRoYXQgbGlzdCwgSSdsbCBuZWVkIHRvIHJhcGlkbHkgc2NhbiB0aHJvdWdoIGVhY2ggY2FsbCBzaXRlIHRvIGFzc2VzcyB0aGUgc3Vycm91bmRpbmcgY29kZS4gSSdsbCBuZWVkIHRvIGJlIG1pbmRmdWwgb2YgaG93IHRoZSByZXR1cm4gdmFsdWUgaXMgdXNlZCwgd2hhdCBsb2NrcyBhcmUgaGVsZCAob3Igbm90IGhlbGQpIGFyb3VuZCB0aGUgY2FsbCwgYW5kIHdoYXQga2luZCBvZiBkYXRhIHRoZSBmdW5jdGlvbiBpcyBvcGVyYXRpbmcgb24uIFRoZSBnb2FsIGlzIHRvIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBzeXN0ZW0uIFVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgZmxvdyB3aWxsIGJlIGNydWNpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjU2LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowNDo1NS43ODU4NjE4NTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjc4NjY4ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG1pcnJvcl9yZWFkX3VubG9ja2VkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi90ZXN0X2htbS5jPTUxMj1zdGF0aWMgaW50IGRtaXJyb3JfcmVhZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwgc3RydWN0IGhtbV9kbWlycm9yX2NtZCAqY21kKVxcbi0tXFxubGliL3Rlc3RfaG1tLmMtNTUxLVxcbmxpYi90ZXN0X2htbS5jOjU1MjpzdGF0aWMgaW50IGRtaXJyb3JfcmVhZF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG5saWIvdGVzdF9obW0uYy01NTMtXFx0XFx0XFx0XFx0IHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZCxcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTE2MTY9c3RhdGljIGxvbmcgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTY3OC1cXHRjYXNlIEhNTV9ETUlSUk9SX1JFQURfVU5MT0NLRUQ6XFxubGliL3Rlc3RfaG1tLmM6MTY3OTpcXHRcXHRyZXQgPSBkbWlycm9yX3JlYWRfdW5sb2NrZWQoZG1pcnJvciwgXFx1MDAyNmNtZCwgMCk7XFxubGliL3Rlc3RfaG1tLmMtMTY4MC1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDQ6NTcuOTEzNzM3NzY5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1ODAyMjQ0MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guLi5cblxuKipBbmFseXppbmcgdGhlIGRtaXJyb3IgS2VybmVsIE1vZHVsZSdzIFRpbWVvdXQgSGFuZGxpbmcqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZG1pcnJvcl9yZWFkX3VubG9ja2VkYCBmdW5jdGlvbiwgYW5kIGl0J3MgYmVpbmcgY2FsbGVkIGZyb20gYGRtaXJyb3JfZm9wc191bmxvY2tlZF9pb2N0bGAuIEFuZCBoYW5nIG9uLi4udGhlIGB0aW1lb3V0YCBwYXJhbWV0ZXIgcGFzc2VkIHRvIGBkbWlycm9yX3JlYWRfdW5sb2NrZWRgIGlzIHNldCB0byB6ZXJvIGluIHRoYXQgY2FsbCEgVGhhdCdzIGEgYml0IG9kZC4gSWYgYHRpbWVvdXRgIGlzIHplcm8sIHRoZW4gdGhlIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAgZnVuY3Rpb24gd29uJ3QgYWN0dWFsbHkgYmUgdXNpbmcgYW55IG9mIGl0cyB0aW1lb3V0IGxvZ2ljLCB3aWxsIGl0PyBJdCdsbCBieXBhc3MgdGhhdCB3aG9sZSB0aW1lb3V0IG1lY2hhbmlzbSBlbnRpcmVseS5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhpcyBpcyB0aGUgb25seSBjYXNlIHdoZXJlIGBkbWlycm9yX3JlYWRfdW5sb2NrZWRgIGlzIGNhbGxlZCBmcm9tIGBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGxgLiBJIHNob3VsZCByZWFsbHkgZ28gYmFjayBhbmQgY2hlY2sgdGhlIG90aGVyIGNhbGxzIHdpdGhpbiBgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciBzY2VuYXJpb3Mgb3IgcG9zc2libGUgaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UuIFRoaXMgbmVlZHMgYSBkZWVwZXIgZGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4NjIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowNTowNS40OTM5NjQzMzJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi90ZXN0X2htbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2NzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2NzA6XFx0XFx0Y2FzZSBITU1fRE1JUlJPUl9SRUxFQVNFOlxcbjE2NzE6XFx0XFx0XFx0ZG1pcnJvcl9kZXZpY2VfcmVtb3ZlX2NodW5rcyhkbWlycm9yLVxcdTAwM2VtZGV2aWNlKTtcXG4xNjcyOlxcdFxcdFxcdHJldCA9IDA7XFxuMTY3MzpcXHRcXHRcXHRicmVhaztcXG4xNjc0OlxcdFxcdGNhc2UgSE1NX0RNSVJST1JfRkxBR1M6XFxuMTY3NTpcXHRcXHRcXHRkbWlycm9yLVxcdTAwM2VmbGFncyA9IGNtZC5ucGFnZXM7XFxuMTY3NjpcXHRcXHRcXHRyZXQgPSAwO1xcbjE2Nzc6XFx0XFx0XFx0YnJlYWs7XFxuMTY3ODpcXHRcXHRjYXNlIEhNTV9ETUlSUk9SX1JFQURfVU5MT0NLRUQ6XFxuMTY3OTpcXHRcXHRcXHRyZXQgPSBkbWlycm9yX3JlYWRfdW5sb2NrZWQoZG1pcnJvciwgXFx1MDAyNmNtZCwgMCk7XFxuMTY4MDpcXHRcXHRcXHRicmVhaztcXG4xNjgxOlxcdFxcdGRlZmF1bHQ6XFxuMTY4MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNjgzOlxcdFxcdH1cXG4xNjg0OlxcdFxcdGlmIChyZXQpXFxuMTY4NTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE2ODY6XFx0XFxuMTY4NzpcXHRcXHRpZiAoY29weV90b191c2VyKHVhcmcsIFxcdTAwMjZjbWQsIHNpemVvZihjbWQpKSlcXG4xNjg4OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjE2ODk6XFx0XFxuMTY5MDpcXHRcXHRyZXR1cm4gMDtcXG4xNjkxOlxcdH1cXG4xNjkyOlxcdFxcbjE2OTM6XFx0c3RhdGljIGludCBkbWlycm9yX2ZvcHNfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuMTY5NDpcXHR7XFxuMTY5NTpcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHI7XFxuMTY5NjpcXHRcXG4xNjk3OlxcdFxcdGZvciAoYWRkciA9IHZtYS1cXHUwMDNldm1fc3RhcnQ7IGFkZHIgXFx1MDAzYyB2bWEtXFx1MDAzZXZtX2VuZDsgYWRkciArPSBQQUdFX1NJWkUpIHtcXG4xNjk4OlxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbjE2OTk6XFx0XFx0XFx0aW50IHJldDtcXG4xNzAwOlxcdFxcbjE3MDE6XFx0XFx0XFx0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xcbjE3MDI6XFx0XFx0XFx0aWYgKCFwYWdlKVxcbjE3MDM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTcwNDpcXHRcXG4xNzA1OlxcdFxcdFxcdHJldCA9IHZtX2luc2VydF9wYWdlKHZtYSwgYWRkciwgcGFnZSk7XFxuMTcwNjpcXHRcXHRcXHRpZiAocmV0KSB7XFxuMTcwNzpcXHRcXHRcXHRcXHRfX2ZyZWVfcGFnZShwYWdlKTtcXG4xNzA4OlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTcwOTpcXHRcXHRcXHR9XFxuMTcxMDpcXHRcXHRcXHRwdXRfcGFnZShwYWdlKTtcXG4xNzExOlxcdFxcdH1cXG4xNzEyOlxcdFxcbjE3MTM6XFx0XFx0cmV0dXJuIDA7XFxuMTcxNDpcXHR9XFxuMTcxNTpcXHRcXG4xNzE2OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRtaXJyb3JfZm9wcyA9IHtcXG4xNzE3OlxcdFxcdC5vcGVuXFx0XFx0PSBkbWlycm9yX2ZvcHNfb3BlbixcXG4xNzE4OlxcdFxcdC5yZWxlYXNlXFx0PSBkbWlycm9yX2ZvcHNfcmVsZWFzZSxcXG4xNzE5OlxcdFxcdC5tbWFwXFx0XFx0PSBkbWlycm9yX2ZvcHNfbW1hcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDU6MDUuNDk0MDkyNTYyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODc5MzQwNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUaW1lb3V0IE1lY2hhbmlzbSoqXG5cbk9rYXksIHNvIEkgc2VlIHRoaXMgYHRpbWVvdXQgPSAwYCBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2FpdCwgemVybyBmb3IgYSB0aW1lb3V0PyBUaGF0IHVzdWFsbHkgbWVhbnMgJ25vIHRpbWVvdXQnIGluIHByb2dyYW1taW5nLiBJcyB0aGF0IGNvbnNpc3RlbnQgaGVyZT9cIiBJIG5lZWQgdG8gdmVyaWZ5IHRoaXMgYXNzdW1wdGlvbi4gVGhlIGtleSBpcyB0byBmaW5kIGFsbCB0aGUgcGxhY2VzIHRoaXMgYHRpbWVvdXRgIHZhcmlhYmxlIGlzIHVzZWQgdG8gc2VlIGlmIHRoZSB6ZXJvIHZhbHVlIGFsd2F5cyByZXByZXNlbnRzIHRoaXMgc3RhdGUuIEkgYW0gZ29pbmcgdG8gc2VlIGlmIHRoZSBjb2RlIGlzIGFjdHVhbGx5IGNvbnNpc3RlbnQgd2l0aCBteSB1bmRlcnN0YW5kaW5nIG9mIGB0aW1lb3V0ID0gMGAgYmVpbmcgYSBmbGFnIGZvciBubyB0aW1lb3V0LlxuXG5JJ2xsIHNwZWNpZmljYWxseSBjaGVjayB3aGVyZSB0aGlzIHZhcmlhYmxlIGlzIHBhc3NlZCB0byBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgLiBUaGUgY29kZSBzbmlwcGV0IGRvZXNuJ3QgZ2l2ZSBtZSBjb250ZXh0LCBzbyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY29uc3VsdCB0aGUgbGFyZ2VyIGNvZGViYXNlLiBJIGhhdmUgYSBodW5jaCwgYmFzZWQgb24gdGhlIGdyZXAgb3V0cHV0LCB0aGF0IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY2AgbWlnaHQgYmUgcmVsZXZhbnQuIExldCBtZSBvcGVuIHRoYXQgZmlsZSBhbmQgc2VlIGhvdyB0aGUgdGltZW91dCB2YWx1ZSBpcyBhY3R1YWxseSBiZWluZyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhhdCBmdW5jdGlvbiBjYWxsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhpcyB0aW1lb3V0IGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjg5OSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDU6MDkuMTgyMDI5MDgzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJ0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyOTUwOlxcdFxcdFxcdC8qIFRlc3Qgd2l0aG91dCBUSFAgKi9cXG4yOTUxOlxcdFxcdFxcdEFTU0VSVF9FUShydW5fbWlncmF0aW9uX2JlbmNobWFyayhzZWxmLVxcdTAwM2VmZCwgMCwgdGVzdF9zaXplc1tpXSxcXG4yOTUyOlxcdFxcdFxcdFxcdFxcdFxcdGl0ZXJhdGlvbnMsIFxcdTAwMjZyZWd1bGFyX3Jlc3VsdHMpLCAwKTtcXG4yOTUzOlxcdFxcbjI5NTQ6XFx0XFx0XFx0LyogUHJpbnQgcmVzdWx0cyAqL1xcbjI5NTU6XFx0XFx0XFx0cHJpbnRfYmVuY2htYXJrX3Jlc3VsdHModGVzdF9uYW1lc1tpXSwgdGVzdF9zaXplc1tpXSxcXG4yOTU2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZ0aHBfcmVzdWx0cywgXFx1MDAyNnJlZ3VsYXJfcmVzdWx0cyk7XFxuMjk1NzpcXHRcXHR9XFxuMjk1ODpcXHR9XFxuMjk1OTpcXHQvKlxcbjI5NjA6XFx0ICogVGVzdCB0aGF0IEhNTSBjYW4gZmF1bHQgaW4gcGFnZXMgYmFja2VkIGJ5IHVzZXJmYXVsdGZkIHVzaW5nIHRoZVxcbjI5NjE6XFx0ICogaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKSBwYXRoIHdpdGggbm8gdGltZW91dC4gVGhpcyBleGVyY2lzZXNcXG4yOTYyOlxcdCAqIHRoZSBsb2NrLWRyb3AgcmV0cnkgbG9naWMgaW4gdGhlIEhNTSBmcmFtZXdvcmsuXFxuMjk2MzpcXHQgKi9cXG4yOTY0OlxcdHN0cnVjdCB1ZmZkX3RocmVhZF9hcmdzIHtcXG4yOTY1OlxcdFxcdGludCB1ZmZkO1xcbjI5NjY6XFx0XFx0aW50IHN0b3BfZmQ7XFxuMjk2NzpcXHRcXHR2b2lkICpwYWdlX2J1ZmZlcjtcXG4yOTY4OlxcdFxcdHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplO1xcbjI5Njk6XFx0fTtcXG4yOTcwOlxcdFxcbjI5NzE6XFx0c3RhdGljIHZvaWQgKnVmZmRfaGFuZGxlcl90aHJlYWQodm9pZCAqYXJnKVxcbjI5NzI6XFx0e1xcbjI5NzM6XFx0XFx0c3RydWN0IHVmZmRfdGhyZWFkX2FyZ3MgKmFyZ3MgPSBhcmc7XFxuMjk3NDpcXHRcXHRzdHJ1Y3QgdWZmZF9tc2cgbXNnO1xcbjI5NzU6XFx0XFx0c3RydWN0IHVmZmRpb19jb3B5IGNvcHk7XFxuMjk3NjpcXHRcXHRzdHJ1Y3QgcG9sbGZkIHBvbGxmZFsyXTtcXG4yOTc3OlxcdFxcdGludCByZXQ7XFxuMjk3ODpcXHRcXG4yOTc5OlxcdFxcdHBvbGxmZFswXS5mZCA9IGFyZ3MtXFx1MDAzZXVmZmQ7XFxuMjk4MDpcXHRcXHRwb2xsZmRbMF0uZXZlbnRzID0gUE9MTElOO1xcbjI5ODE6XFx0XFx0cG9sbGZkWzFdLmZkID0gYXJncy1cXHUwMDNlc3RvcF9mZDtcXG4yOTgyOlxcdFxcdHBvbGxmZFsxXS5ldmVudHMgPSBQT0xMSU47XFxuMjk4MzpcXHRcXG4yOTg0OlxcdFxcdHdoaWxlICgxKSB7XFxuMjk4NTpcXHRcXHRcXHRyZXQgPSBwb2xsKHBvbGxmZCwgMiwgLTEpO1xcbjI5ODY6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbjI5ODc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjk4ODpcXHRcXHRcXHRpZiAocG9sbGZkWzFdLnJldmVudHMpXFxuMjk4OTpcXHRcXHRcXHRcXHRicmVhaztcXG4yOTkwOlxcdFxcdFxcdGlmICghKHBvbGxmZFswXS5yZXZlbnRzIFxcdTAwMjYgUE9MTElOKSlcXG4yOTkxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI5OTI6XFx0XFxuMjk5MzpcXHRcXHRcXHRyZXQgPSByZWFkKGFyZ3MtXFx1MDAzZXVmZmQsIFxcdTAwMjZtc2csIHNpemVvZihtc2cpKTtcXG4yOTk0OlxcdFxcdFxcdGlmIChyZXQgIT0gc2l6ZW9mKG1zZykpXFxuMjk5NTpcXHRcXHRcXHRcXHRicmVhaztcXG4yOTk2OlxcdFxcbjI5OTc6XFx0XFx0XFx0aWYgKG1zZy5ldmVudCAhPSBVRkZEX0VWRU5UX1BBR0VGQVVMVClcXG4yOTk4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI5OTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjA1OjA5LjE4MjE3ODgwM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzYyMTI5ODMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSE1NIFRpbWVvdXQgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IHdhcyBhYm91dCBgaG1tLXRlc3RzLmNgIGFuZCB0aGF0IGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB0aGF0IGl0J3MgYmVpbmcgdGVzdGVkIHdpdGhvdXQgYW55IHRpbWVvdXQuIEJ1dCB0aGF0J3MganVzdCBhIHRlc3QsIGFuZCB0aGVuIEkgdGhvdWdodCwgXCJIb2xkIG9uLCBgbGliL3Rlc3RfaG1tLmNgLi4uaXMgdGhhdCBldmVuICpyZWFjaGFibGUqIGluIGEgc3l6a2FsbGVyIGNvbnRleHQ/XCJcblxuUmlnaHQsIHllcywgaXQgc2hvdWxkIGJlLiBgQ09ORklHX1RFU1RfSE1NYCBpcyB0eXBpY2FsbHkgZW5hYmxlZCwgYW5kIHN5emthbGxlciAqZG9lcyogZnV6eiB0aGUgYHRlc3RfaG1tYCBkZXZpY2UsIHRob3NlIGAvZGV2L2htbV9kbWlycm9yKmAgdGhpbmdzLiBUaGF0J3MgZ29vZC4gQnV0IG5vdyBJJ20gc2VlaW5nIHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIGB0aW1lb3V0YCBwYXJhbWV0ZXIgb3IgcmVsYXRlZCBsb2dpYyBpbiBgYWllMl9jdHguY2AsIGBkcm1fZ3B1c3ZtLmNgLCBhbmQgYG5vdXZlYXVfc3ZtLmNgLCB3aGljaCBhcmUgcmVhbCwgcHJvZHVjdGlvbiBkcml2ZXJzLi4uYW5kIHRoYXQncyB0aGUga2V5LlxuXG5UaGUgcGF0Y2ggKmRvZXNuJ3QqIHRvdWNoIGBsaWIvdGVzdF9obW0uY2AsIHNvIHdoYXRldmVyJ3MgaGFwcGVuaW5nIHdpdGggdGhlIHRpbWVvdXQgY2hhbmdlIGlzbid0IGRpcmVjdGx5IGFmZmVjdGluZyB0aGF0IHRlc3QuIE9rYXksIGxldCdzIGdvIGJhY2sgYW5kIGxvb2sgYXQgdGhlIGRpZmYgY2xvc2VseSBhZ2Fpbi4gTmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhlc2UgY2hhbmdlcyBhcmUgYmVpbmcgbWFkZSBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBzeXprYWxsZXIncyBjb3ZlcmFnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM5NDgsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowNToxNi41NDQzMTA5OTZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTcyNjI2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTE2MD1ub3JtYWwgaW50ZXJmYWNlIGlzOjpcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMTYxLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoxNjI6ICBpbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTE2My0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTE2OT1UaGUgY2FsbGVyIG11c3Qgbm90IGhvbGQgYGBtbWFwX3JlYWRfbG9ja2BgIGJlZm9yZSB0aGUgY2FsbC5cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MTcwOmBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgIHRha2VzIHRoZSBtbWFwIHJlYWQgbG9jayBpbnRlcm5hbGx5IGFuZFxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0xNzEtYWxsb3dzIGBgaGFuZGxlX21tX2ZhdWx0KClgYCB0byBkcm9wIGl0IGR1cmluZyBmYXVsdCBoYW5kbGluZy4gVGhpcyBpcyByZXF1aXJlZFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTE4Nj1UaGUgdXNhZ2UgcGF0dGVybiBpczo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjAzLSBhZ2FpbjpcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjA0OiAgICAgIHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZyYW5nZSwgdGltZW91dCk7XFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTIwNS0gICAgICBpZiAocmV0KVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTIyOD11cGRhdGUuIFRoZSByZXRyeSBjaGVjayBtdXN0IHVzZSB0aGUgc2FtZSBub3RpZmllciBhbmQgc2VxdWVuY2UgbnVtYmVyIHN0b3JlZFxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoyMjk6aW4gYGByYW5nZWBgIGJ5IGBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgLlxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yMzAtXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTIzMT1Ib2xkaW5nIHRoZSBtbWFwIGxvY2sgYWNyb3NzIEhNTSBmYXVsdHNcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yMzMtXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjIzNDpNb3N0IGNhbGxlcnMgc2hvdWxkIHVzZSBgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KClgYC4gSWYgYSBkcml2ZXJcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjM1LXJlYWxseSBuZWVkcyB0byBob2xkIHRoZSBtbWFwIGxvY2sgYWNyb3NzIHdvcmsgb3V0c2lkZSBITU0sIGl0IGNhbiB1c2U6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTI0MD1pbnRlcmZhY2UgY2Fubm90IHN1cHBvcnQgVk1BcyB3aG9zZSBmYXVsdCBoYW5kbGVycyBuZWVkIHRvIGRyb3AgdGhlIG1tYXAgbG9jay5cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjQxOk5ldyBjYWxsZXJzIHNob3VsZCBwcmVmZXIgYGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpYGAgdW5sZXNzIHRoZXlcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjQyLWhhdmUgYSBzcGVjaWZpYyByZXF1aXJlbWVudCB0byBrZWVwIHRoZSBtbWFwIGxvY2sgaGVsZCBhY3Jvc3MgdGhlIGNhbGwuXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYz0xMDMxPXN0YXRpYyBpbnQgYWllMl9wb3B1bGF0ZV9yYW5nZShzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICphYm8pXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYy0xMDY0LVxcbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jOjEwNjU6XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXFx1MDAyNm1hcHAtXFx1MDAzZXJhbmdlLCB0aW1lb3V0KTtcXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYy0xMDY2LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jPTg0MT1lbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgZHJtX2dwdXN2bV9zY2FuX21tKHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODY4LXJldHJ5OlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODY5OlxcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZobW1fcmFuZ2UsIHRpbWVvdXQpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODcwLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jPTE0NDQ9aW50IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE0OTEtXFx0aG1tX3JhbmdlLmhtbV9wZm5zID0gcGZucztcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE0OTI6XFx0ZXJyID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXFx1MDAyNmhtbV9yYW5nZSwgdGltZW91dCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNDkzLVxcdG1tcHV0KG1tKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM9MTcwMz1pbnQgZHJtX2dwdXN2bV9yYW5nZV9ldmljdChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNzI4LVxcdGhtbV9yYW5nZS5obW1fcGZucyA9IHBmbnM7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNzI5OlxcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZobW1fcmFuZ2UsIHRpbWVvdXQpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTczMC1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmM9NjUyPXN0YXRpYyBpbnQgbm91dmVhdV9yYW5nZV9mYXVsdChzdHJ1Y3Qgbm91dmVhdV9zdm1tICpzdm1tLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uYy02OTMtXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uYzo2OTQ6XFx0XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXFx1MDAyNnJhbmdlLCByZW1haW5pbmcpO1xcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmMtNjk1LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jPTM5Nj1zdGF0aWMgaW50IG1zaHZfcmVnaW9uX3JhbmdlX2ZhdWx0KHN0cnVjdCBtc2h2X21lbV9yZWdpb24gKnJlZ2lvbixcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmMtNDE1LWFnYWluOlxcbmRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmM6NDE2OlxcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZyYW5nZSwgMCk7XFxuZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYy00MTctXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmM9MzI0PWludCBpYl91bWVtX29kcF9tYXBfZG1hX2FuZF9sb2NrKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHAsIHU2NCB1c2VyX3ZpcnQsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jLTM2OC1yZXRyeTpcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jOjM2OTpcXHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcXHUwMDI2cmFuZ2UsIHRpbWVvdXQpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmMtMzcwLVxcdGlmICh1bmxpa2VseShyZXQpKVxcbi0tXFxuaW5jbHVkZS9saW51eC9obW0uaD0xMjU9aW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSk7XFxuaW5jbHVkZS9saW51eC9obW0uaDoxMjY6aW50IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLFxcbmluY2x1ZGUvbGludXgvaG1tLmgtMTI3LVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTtcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTM5Mj1zdGF0aWMgaW50IGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXFxuLS1cXG5saWIvdGVzdF9obW0uYy0zOTgtXFx0d2hpbGUgKHRydWUpIHtcXG5saWIvdGVzdF9obW0uYzozOTk6XFx0XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQocmFuZ2UsIHRpbWVvdXQpO1xcbmxpYi90ZXN0X2htbS5jLTQwMC1cXHRcXHRpZiAocmV0KVxcbi0tXFxubW0vaG1tLmM9Njg5PXN0YXRpYyBpbnQgaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSwgYm9vbCAqbG9ja2VkKVxcbi0tXFxubW0vaG1tLmMtNzUzLSAqIFRoZSBtbWFwIGxvY2sgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIgYW5kIHdpbGwgcmVtYWluIGhlbGQgb24gcmV0dXJuLlxcbm1tL2htbS5jOjc1NDogKiBOZXcgdXNlcnMgc2hvdWxkIHByZWZlciBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpIHVubGVzcyB0aGV5XFxubW0vaG1tLmMtNzU1LSAqIHNwZWNpZmljYWxseSBuZWVkIHRvIGtlZXAgdGhlIG1tYXAgbG9jayBoZWxkIGFjcm9zcyB0aGUgY2FsbC4gVGhpcyBoZWxwZXJcXG4tLVxcbm1tL2htbS5jPTc2Mj1FWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV9mYXVsdCk7XFxuLS1cXG5tbS9obW0uYy03NjQtLyoqXFxubW0vaG1tLmM6NzY1OiAqIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0IC0gZmF1bHQgaW4gYSByYW5nZSB3aXRoIGEgcmV0cnkgdGltZW91dFxcbm1tL2htbS5jLTc2Ni0gKiBAcmFuZ2U6XFx0YXJndW1lbnQgc3RydWN0dXJlXFxuLS1cXG5tbS9obW0uYy03ODMtICovXFxubW0vaG1tLmM6Nzg0OmludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSxcXG5tbS9obW0uYy03ODUtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpXFxuLS1cXG5tbS9obW0uYy04MjQtfVxcbm1tL2htbS5jOjgyNTpFWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KTtcXG5tbS9obW0uYy04MjYtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz0yOTA0PVRFU1RfRl9USU1FT1VUKGhtbSwgYmVuY2htYXJrX3RocF9taWdyYXRpb24sIDEyMClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTI5NjAtICogVGVzdCB0aGF0IEhNTSBjYW4gZmF1bHQgaW4gcGFnZXMgYmFja2VkIGJ5IHVzZXJmYXVsdGZkIHVzaW5nIHRoZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjI5NjE6ICogaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKSBwYXRoIHdpdGggbm8gdGltZW91dC4gVGhpcyBleGVyY2lzZXNcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0yOTYyLSAqIHRoZSBsb2NrLWRyb3AgcmV0cnkgbG9naWMgaW4gdGhlIEhNTSBmcmFtZXdvcmsuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjA1OjE4LjQwMTU4MDgxNloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTcwNTY4NTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCBpbiBJbmZpbmliYW5kJ3MgT0RQIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSd2ZSBoaXQgYSBwb2ludCB3aGVyZSBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBJbmZpbmliYW5kIGNvZGUsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyB0aGUgT0RQIChPbiBEZW1hbmQgUGFnaW5nKSBmdW5jdGlvbmFsaXR5IGlzIGltcGxlbWVudGVkLiBNeSBpbml0aWFsIGNvbmNlcm4gc3RlbW1lZCBmcm9tIHNlZWluZyBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIHVzZWQgaW4gYGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmNgLiBUaGlzIGZ1bmN0aW9uIG5hbWUgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gSXQgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIG1lbW9yeSBmYXVsdHMgb3IgcGFnZSBmYXVsdHMgd2l0aGluIHRoZSB1c2VyIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIE9EUC4gVGhlIFwidW5sb2NrZWRcIiBwYXJ0IG1lYW5zIHRoaXMgcHJvYmFibHkgaGFwcGVucyB3aXRob3V0IGEgbG9jayBoZWxkLCB3aGljaCBpcyBzaWduaWZpY2FudCBmcm9tIGEgY29uY3VycmVuY3kgYW5kIHBlcmZvcm1hbmNlIHBlcnNwZWN0aXZlLiBHaXZlbiBteSBleHBlcnRpc2UgaW4gdGhpcyBkb21haW4sIG15IG5leHQgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGNvZGUgaW4gYGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IG1lY2hhbmljcyBvZiB3aGF0J3MgaGFwcGVuaW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHNjZW5hcmlvcyBsZWFkIHRvIHRoaXMgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIHJlZ2FyZGluZyBlcnJvciBoYW5kbGluZywgcGVyZm9ybWFuY2UgYW5kIHJhY2UgY29uZGl0aW9ucyB3aXRoaW4gdGhlIE9EUCBpbXBsZW1lbnRhdGlvbi4gSSdsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSdyZSBoYW5kbGluZyBwb3RlbnRpYWwgdGltZW91dCBzaXR1YXRpb25zIGluIHJlbGF0aW9uIHRvIHRoZSBtZW1vcnkgZmF1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjYwNywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjA1OjI3Ljk3MjE1MjQyM1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM1MDpcXHRcXHRcXHRnb3RvIG91dF9wdXRfdGFzaztcXG4gMzUxOlxcdFxcdH1cXG4gMzUyOlxcdFxcbiAzNTM6XFx0XFx0cmFuZ2Uubm90aWZpZXIgPSBcXHUwMDI2dW1lbV9vZHAtXFx1MDAzZW5vdGlmaWVyO1xcbiAzNTQ6XFx0XFx0cmFuZ2Uuc3RhcnQgPSBBTElHTl9ET1dOKHVzZXJfdmlydCwgMVVMIFxcdTAwM2NcXHUwMDNjIHBhZ2Vfc2hpZnQpO1xcbiAzNTU6XFx0XFx0cmFuZ2UuZW5kID0gQUxJR04odXNlcl92aXJ0ICsgYmNudCwgMVVMIFxcdTAwM2NcXHUwMDNjIHBhZ2Vfc2hpZnQpO1xcbiAzNTY6XFx0XFx0cGZuX3N0YXJ0X2lkeCA9IChyYW5nZS5zdGFydCAtIGliX3VtZW1fc3RhcnQodW1lbV9vZHApKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbiAzNTc6XFx0XFx0bnVtX3BmbnMgPSAocmFuZ2UuZW5kIC0gcmFuZ2Uuc3RhcnQpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuIDM1ODpcXHRcXHRpZiAoZmF1bHQpIHtcXG4gMzU5OlxcdFxcdFxcdHJhbmdlLmRlZmF1bHRfZmxhZ3MgPSBITU1fUEZOX1JFUV9GQVVMVDtcXG4gMzYwOlxcdFxcbiAzNjE6XFx0XFx0XFx0aWYgKGFjY2Vzc19tYXNrIFxcdTAwMjYgSE1NX1BGTl9XUklURSlcXG4gMzYyOlxcdFxcdFxcdFxcdHJhbmdlLmRlZmF1bHRfZmxhZ3MgfD0gSE1NX1BGTl9SRVFfV1JJVEU7XFxuIDM2MzpcXHRcXHR9XFxuIDM2NDpcXHRcXG4gMzY1OlxcdFxcdHJhbmdlLmhtbV9wZm5zID0gXFx1MDAyNih1bWVtX29kcC1cXHUwMDNlbWFwLnBmbl9saXN0W3Bmbl9zdGFydF9pZHhdKTtcXG4gMzY2OlxcdFxcdHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xcbiAzNjc6XFx0XFxuIDM2ODpcXHRyZXRyeTpcXG4gMzY5OlxcdFxcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZyYW5nZSwgdGltZW91dCk7XFxuIDM3MDpcXHRcXHRpZiAodW5saWtlbHkocmV0KSlcXG4gMzcxOlxcdFxcdFxcdGdvdG8gb3V0X3B1dF9tbTtcXG4gMzcyOlxcdFxcbiAzNzM6XFx0XFx0c3RhcnRfaWR4ID0gKHJhbmdlLnN0YXJ0IC0gaWJfdW1lbV9zdGFydCh1bWVtX29kcCkpIFxcdTAwM2VcXHUwMDNlIHBhZ2Vfc2hpZnQ7XFxuIDM3NDpcXHRcXHRkbWFfaW5kZXggPSBzdGFydF9pZHg7XFxuIDM3NTpcXHRcXG4gMzc2OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnVtZW1fb2RwLVxcdTAwM2V1bWVtX211dGV4KTtcXG4gMzc3OlxcdFxcdGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShcXHUwMDI2dW1lbV9vZHAtXFx1MDAzZW5vdGlmaWVyLCByYW5nZS5ub3RpZmllcl9zZXEpKSB7XFxuIDM3ODpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnVtZW1fb2RwLVxcdTAwM2V1bWVtX211dGV4KTtcXG4gMzc5OlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuIDM4MDpcXHRcXHR9XFxuIDM4MTpcXHRcXG4gMzgyOlxcdFxcdGZvciAocGZuX2luZGV4ID0gMDsgcGZuX2luZGV4IFxcdTAwM2MgbnVtX3BmbnM7XFxuIDM4MzpcXHRcXHRcXHRwZm5faW5kZXggKz0gMSBcXHUwMDNjXFx1MDAzYyAocGFnZV9zaGlmdCAtIFBBR0VfU0hJRlQpLCBkbWFfaW5kZXgrKykge1xcbiAzODQ6XFx0XFxuIDM4NTpcXHRcXHRcXHQvKlxcbiAzODY6XFx0XFx0XFx0ICogU2luY2Ugd2UgYXNrZWQgZm9yIGhtbV9yYW5nZV9mYXVsdCgpIHRvIHBvcHVsYXRlXFxuIDM4NzpcXHRcXHRcXHQgKiBwYWdlcyBpdCBzaG91bGRuJ3QgcmV0dXJuIGFuIGVycm9yIGVudHJ5IG9uIHN1Y2Nlc3MuXFxuIDM4ODpcXHRcXHRcXHQgKi9cXG4gMzg5OlxcdFxcdFxcdFdBUk5fT04oZmF1bHQgXFx1MDAyNlxcdTAwMjYgcmFuZ2UuaG1tX3BmbnNbcGZuX2luZGV4XSBcXHUwMDI2IEhNTV9QRk5fRVJST1IpO1xcbiAzOTA6XFx0XFx0XFx0V0FSTl9PTihmYXVsdCBcXHUwMDI2XFx1MDAyNiAhKHJhbmdlLmhtbV9wZm5zW3Bmbl9pbmRleF0gXFx1MDAyNiBITU1fUEZOX1ZBTElEKSk7XFxuIDM5MTpcXHRcXHRcXHRpZiAoIShyYW5nZS5obW1fcGZuc1twZm5faW5kZXhdIFxcdTAwMjYgSE1NX1BGTl9WQUxJRCkpXFxuIDM5MjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMzkzOlxcdFxcbiAzOTQ6XFx0XFx0XFx0aWYgKHJhbmdlLmhtbV9wZm5zW3Bmbl9pbmRleF0gXFx1MDAyNiBITU1fUEZOX0RNQV9NQVBQRUQpXFxuIDM5NTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMzk2OlxcdFxcbiAzOTc6XFx0XFx0XFx0aG1tX29yZGVyID0gaG1tX3Bmbl90b19tYXBfb3JkZXIocmFuZ2UuaG1tX3BmbnNbcGZuX2luZGV4XSk7XFxuIDM5ODpcXHRcXHRcXHQvKiBJZiBhIGh1Z2VwYWdlIHdhcyBkZXRlY3RlZCBhbmQgT0RQIHdhc24ndCBzZXQgZm9yLCB0aGUgdW1lbVxcbiAzOTk6XFx0XFx0XFx0ICogcGFnZV9zaGlmdCB3aWxsIGJlIHVzZWQsIHRoZSBvcHBvc2l0ZSBjYXNlIGlzIGFuIGVycm9yLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowNToyNy45NzIyNTI3MTNaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI4MDI4MTg4OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUaW1lb3V0IFBhdGNoIGFuZCBSZWFjaGFiaWxpdHkgaW4gU3l6a2FsbGVyKipcblxuT2theSwgc28gdGhlIHBhdGNoIGlzIGFib3V0IGVuc3VyaW5nIGNvbnNpc3RlbnQgdGltZW91dCBoYW5kbGluZyB1c2luZyBgbXNlY3NfdG9famlmZmllc2AgYWNyb3NzIHNldmVyYWwgZHJpdmVycywgYW5kIEkgc2VlIHRoYXQgYGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmNgIGFscmVhZHkgaW1wbGVtZW50cyB0aGlzIGNvcnJlY3RseS4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgY29ycmVjdGluZyB0aGUgaW1wbGVtZW50YXRpb24gaW4gYGFpZTJfY3R4LmNgLCBgZHJtX2dwdXN2bS5jYCwgYW5kIGBub3V2ZWF1X3N2bS5jYCB0byBtYXRjaC4gXG5cblRoZSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHF1aWNrbHkgYXNzZXNzIGB1bWVtX29kcC5jYCBhcyBhbiBlbnRyeSBwb2ludCBzaW5jZSB0aGF0IGxpdmVzIGluIHRoZSBJbmZpbmliYW5kIHN1YnN5c3RlbSB3aGljaCAqaXMqIGtub3duIHRvIGJlIHJlYWNoYWJsZSB0aHJvdWdoIGByZG1hYCBpbiBzeXprYWxsZXIuIEhvd2V2ZXIsIHNpbmNlIHRoZSBwYXRjaCBkb2VzICpub3QqIG1vZGlmeSBgdW1lbV9vZHAuY2AsIHRoYXQncyBub3QgdGhlIHJlbGV2YW50IGVudHJ5IHBvaW50IGhlcmUuXG5cblRoZSByZWFsIHF1ZXN0aW9uIGJlY29tZXM6IGFyZSB0aGUgYWZmZWN0ZWQgZHJpdmVycyDigJMgYGFpZTJfY3R4LmNgLCBgZHJtX2dwdXN2bS5jYCwgYW5kIGBub3V2ZWF1X3N2bS5jYCDigJMgcmVhY2hhYmxlIGluIHN5emthbGxlcj8gTGV0J3MgYnJlYWsgdGhlbSBkb3duOlxuXG4qICAgYGFpZTJfY3R4LmNgOiBgZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfY3R4LmNgIOKAkyBUaGlzIHJlcXVpcmVzIEFNRCBYRE5BIGhhcmR3YXJlLlxuKiAgIGBkcm1fZ3B1c3ZtLmNgOiBgZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY2Ag4oCTIFRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZyBzaW5jZSB0aGlzIHVzZXMgdGhlIGBDT05GSUdfRFJNX0dQVVNWTWAgd2hpY2ggaXMgc2VsZWN0ZWQgYnkgYERSTV9YRWAuXG4qICAgYG5vdXZlYXVfc3ZtLmNgOiBgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY2Ag4oCTIFRoaXMgcmVxdWlyZXMgTlZJRElBIGhhcmR3YXJlLlxuXG5Ob3csIGNoZWNraW5nIHRoZSBjb25maWcsIGBkcm1fZ3B1c3ZtLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19EUk1fR1BVU1ZNYCBpcyBlbmFibGVkIGFuZCBpcyBzZWxlY3RlZCBieSBgRFJNX1hFYC4gVGhlIGBEUk1fWEVgIGNvbmZpZyByZXF1aXJlcyBQQ0kgaGFyZHdhcmUgd2hpY2ggaXMsIGFzIGV4cGVjdGVkLCB0aGUgSW50ZWwgWGUgaGFyZHdhcmUuIEJ1dCBzeXprYWxsZXIgZG9lc24ndCBoYXZlIEludGVsIFhlIGhhcmR3YXJlIGluIGl0cyBWTXMuIFRoZSBzYW1lIGFwcGxpZXMgZm9yIE5vdXZlYXUgKE5WSURJQSkgYW5kIEFNRCBYRE5BIGhhcmR3YXJlLlxuXG5TbywgaXQgZG9lc24ndCBsb29rIGxpa2Ugd2UncmUgZGlyZWN0bHkgcmVhY2hpbmcgYGRybV9ncHVzdm0uY2AgKGFuZCB0aHVzIHRoZSBmaXgpIHRocm91Z2ggaGFyZHdhcmUtZGVwZW5kZW50IGNvbmZpZ3VyYXRpb25zLiBIb3dldmVyLCB3YWl0IGEgbWludXRlLCBgZHJtX2dwdXN2bS5jYCBpcyBhIGdlbmVyaWMgaGVscGVyLiBJcyBpdCB1c2VkIGJ5IGFueXRoaW5nIGVsc2U/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYENPTkZJR19EUk1fR1BVU1ZNYCB0byBzZWUgaWYgdGhlcmUncyBhbnkgb3RoZXIgcm91dGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3OTIwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDU6NDAuNzc1MDc0NTcxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU1MzQ3MTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBEUk1fR1BVU1ZNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnPTI9Y29uZmlnIERSTV9YRVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWctNDEtXFx0c2VsZWN0IERSTV9FWEVDXFxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWc6NDI6XFx0c2VsZWN0IERSTV9HUFVTVk0gaWYgIVVNTFxcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnLTQzLVxcdHNlbGVjdCBEUk1fR1BVVk1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnPTc5PWNvbmZpZyBEUk1fWEVfR1BVU1ZNXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZy04NS1cXHRzZWxlY3QgREVWSUNFX1BSSVZBVEVcXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZzo4NjpcXHRzZWxlY3QgRFJNX0dQVVNWTVxcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnLTg3LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDU6NDIuNzMwNDI2MTQ3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NjkxMzEyNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEUk1fWEUgYW5kIERSTV9HUFVTVk0gUmVsYXRpb25zaGlwKipcblxuUmlnaHQsIGxldCBtZSBzZWUuLi4gSXQgbG9va3MgbGlrZSBvbmx5IGBEUk1fWEVgIGlzIGN1cnJlbnRseSBsZXZlcmFnaW5nIGBEUk1fR1BVU1ZNYC4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLiBOb3csIGEgY3J1Y2lhbCBxdWVzdGlvbiBhcmlzZXM6IGNhbiBgRFJNX1hFYCBiZSBhY2Nlc3NlZCBvciB0ZXN0ZWQgd2l0aG91dCBhY3R1YWwgaGFyZHdhcmUgcHJlc2VudD8gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGRldmVsb3BtZW50IGFuZCBDSS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBhIG1vY2sgb3IgdmlydHVhbCBkZXZpY2UgaW1wbGVtZW50YXRpb24gYXNzb2NpYXRlZCB3aXRoIGBEUk1fWEVgLiBJZiB0aGVyZSBpcywgdGhhdCBvcGVucyB1cCBhIHdob2xlIHJhbmdlIG9mIHBvc3NpYmlsaXRpZXMgZm9yIGVmZmljaWVudCB0ZXN0aW5nIGFuZCBkZWJ1Z2dpbmcgaW4gZW52aXJvbm1lbnRzIHdoZXJlIHBoeXNpY2FsIGhhcmR3YXJlIG1pZ2h0IG5vdCBiZSByZWFkaWx5IGF2YWlsYWJsZSBvciBjb252ZW5pZW50LiBMZXQncyBkaWcgZGVlcGVyIGFuZCBzZWUgaWYgd2UgY2FuIGZpbmQgdGhvc2UgY29tcG9uZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkxODIsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowNTo0Ni41OTk1NjEyNloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwMjEyNDMyOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGVfbW9ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDU6NDguNTAxNjkzMTg4WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0NzkzODkzMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBIYXJkd2FyZSBFbXVsYXRpb24gZm9yIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBhcHByb2FjaCB0aGlzIHBhdGNoLiBGaXJzdCwgSSdtIHRoaW5raW5nLCBjYW4gSSB0cmlnZ2VyIHRoaXMgYERSTV9YRWAgYmVoYXZpb3IgdGhyb3VnaCBhIHZpcnR1YWwgUENJIGRldmljZT8gTm8gZGljZSwgc3l6a2FsbGVyIGRvZXNuJ3QgZW11bGF0ZSB0aG9zZSBJbnRlbCBYZSBHUFVzLiBBbHJpZ2h0LCBzdHJpa2UgdGhhdC4gV2hhdCBhYm91dCBgbm91dmVhdWAsIHRoZSBOVklESUEgZHJpdmVyPyBOb3BlLCBzeXprYWxsZXIgZG9lc24ndCBoYW5kbGUgTlZJRElBIGVpdGhlci4gU2hvb3QsIG5vdCBgYW1keGRuYWAgZWl0aGVyLiBTeXprYWxsZXIgaXMgcmVhbGx5IGxpbWl0ZWQgaW4gdGVybXMgb2YgR1BVIGVtdWxhdGlvbi5cblxuSG1tLCB3YWl0IGEgc2Vjb25kLiBUaGlzIHBhdGNoIHRvdWNoZXMgYERvY3VtZW50YXRpb24vbW0vaG1tLnJzdGAuIFRoYXQgc3VnZ2VzdHMgaXQncyBub3Qgc3RyaWN0bHkgR1BVLXNwZWNpZmljLiBPa2F5LCBzbyBJIG5lZWQgdG8gYnJvYWRlbiBteSB0aGlua2luZy4gSXMgdGhlcmUgKmFueSogb3RoZXIgZHJpdmVyIG91dCB0aGVyZSB0aGF0IGFjdHVhbGx5ICp1c2VzKiBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgPyBJIG5lZWQgdG8ga25vdyB3aGF0IGVsc2UgdGhpcyBwYXRjaCB0b3VjaGVzIHRvIGdldCB0aGUgZnVsbCBzY29wZS4gT2theSwgSSBmb3VuZCBpdDogYGRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmNgIHVzZXMgaXQuIE5vdyBJJ20gZ2V0dGluZyBzb21ld2hlcmU7IGF0IGxlYXN0IEkgaGF2ZSBhIHNlY29uZCBwb2ludCBvZiByZWZlcmVuY2UuIEkgaGF2ZSBhIGxvdCBtb3JlIHRvIGxvb2sgaW50by5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk0MzIsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDU6NTUuOTgxMDg1OTE2WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTE4MCwiRXJyb3IiOiJZb3UgYXJlIHJlcGVhdGluZyB0aGUgc2FtZSB0b29sIGNhbGwgd2l0aCB0aGUgZXhhY3Qgc2FtZSBhcmd1bWVudHMuIFBsZWFzZSBzeW50aGVzaXplIHRoZSBpbmZvcm1hdGlvbiB5b3UgYWxyZWFkeSBoYXZlIGluc3RlYWQgb2YgcmVwZWF0aW5nIHF1ZXJpZXMuIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJZb3UgYXJlIHJlcGVhdGluZyB0aGUgc2FtZSB0b29sIGNhbGwgd2l0aCB0aGUgZXhhY3Qgc2FtZSBhcmd1bWVudHMuIFBsZWFzZSBzeW50aGVzaXplIHRoZSBpbmZvcm1hdGlvbiB5b3UgYWxyZWFkeSBoYXZlIGluc3RlYWQgb2YgcmVwZWF0aW5nIHF1ZXJpZXMuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjA1OjU1Ljk4MTEzODcyNloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDk3NzA4NjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGEgVGltZW91dCBGaXgqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGp1c3QgZ3JlcHBlZCBmb3IgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCwgd2hpY2ggZmxhZ2dlZCBhIGZldyBjYWxsIHNpdGVzLiBGcm9tIHRoZSBpbml0aWFsIGdyZXAsIEkgc2F3IHRoZSBmb2xsb3dpbmcgY2FsbGVyczogYGRyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jYCwgYGRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNgLCBgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY2AsIGBkcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jYCwgYGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmNgLCBgbGliL3Rlc3RfaG1tLmNgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jYC5cblxuTm93LCB0aGUgcGF0Y2ggaXRzZWxmIG9ubHkgdG91Y2hlcyBgRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0YCwgYGRyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jYCwgYGRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNgLCBhbmQgYGRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmNgLiBUaGUgY29yZSBxdWVzdGlvbiBub3cgaXMsIGFyZSB0aGVzZSBtb2RpZmllZCBwYXRocyByZWFjaGFibGUgd2l0aGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VLCB3aGljaCBzeXprYWxsZXIgcHJpbWFyaWx5IHVzZXM/XG5cbkNvbnNpZGVyaW5nIHRoZSBkZXZpY2VzIHRoZXNlIGRyaXZlcnMgdGFyZ2V0IC0gQU1EIFhETkEsIEludGVsIFhlLCBhbmQgTlZJRElBIOKAkyBhbmQgdGhlIGZhY3QgdGhhdCBTeXprYWxsZXIgbGFja3MgZW11bGF0aW9uIGZvciB0aGVzZSBzcGVjaWZpYyBoYXJkd2FyZSBjb21wb25lbnRzLCBpdCBsb29rcyB1bmxpa2VseS4gTGV0J3MgZGVsdmUgZGVlcGVyLlxuXG5gZHJtX2dwdXN2bS5jYCBpcyBvbmx5IHNlbGVjdGVkIGJ5IGBEUk1fWEVgLiBUaGUgb3RoZXJzIGFyZSBQQ0kgZHJpdmVycy4gV2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSwgaXQncyBhIGRlYWQgZW5kLiBUaGVyZWZvcmUsIG5vIGBub3V2ZWF1YCwgYGFtZHhkbmFgLCBvciBgRFJNX1hFYCBhcmUgcmVhY2hhYmxlLiBXaGF0IGFib3V0IHRoZSB1bnRvdWNoZWQgZmlsZXM/IGBtc2h2X3JlZ2lvbnMuY2AgaXMgSHlwZXItViwgc28gaXQncyBpcnJlbGV2YW50LiBgdW1lbV9vZHAuY2AgYW5kIGB0ZXN0X2htbS5jYCBhbHNvIGdvIHVudG91Y2hlZC5cblxuU28sIGl0IGFwcGVhcnMgdGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW5oZXJlbnRseSBpbmFjY2Vzc2libGUgaW4gY29tbW9uIHZpcnR1YWxpemF0aW9uIHNjZW5hcmlvcy4gV2UncmUgZWZmZWN0aXZlbHkgbG9va2luZyBhdCBoYXJkd2FyZS1kZXBlbmRlbnQgZnVuY3Rpb25hbGl0eSB0aGF0IHN5emthbGxlciBsaWtlbHkgd29uJ3QgdHJpZ2dlci4gSSB3aWxsIGRvdWJsZSBjaGVjayBteSBhc3N1bXB0aW9ucy5cblxuT2theSwgbGV0IG1lIGNvbmZpcm0uIENhbiBgbm91dmVhdWAgcG9zc2libHkgYmUgcHJvYmVkIHdpdGhvdXQgdGhlIGhhcmR3YXJlPyBJdCdzIGEgUENJIGRyaXZlci4gV2l0aG91dCBhbiBOVklESUEgUENJIGRldmljZSBwcmVzZW50LCB0aGUgZHJpdmVyIHdvbid0IGJpbmQgYW5kIGl0cyBpb2N0bHMgYmVjb21lIGluYWNjZXNzaWJsZS4gU2FtZSBmb3IgdGhlIG90aGVycy5cblxuSXMgaXQgKnBvc3NpYmxlKiB0aGF0IGBkcm1fZ3B1c3ZtYCBpcyB0ZXN0ZWQgdmlhIHNvbWUgb3RoZXIgbWVhbnMsIGxpa2UgYSBrdW5pdCB0ZXN0PyBUaGF0J3Mgd2hhdCBJIG5lZWQgdG8gY2hlY2sgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk4ODgsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDY6MDQuNDc4ODQ5OTI5WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQ2NTc4NTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRybV9ncHVzdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxNjgyIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG4uY2xhbmctZm9ybWF0PTcxPUZvckVhY2hNYWNyb3M6XFxuLS1cXG4uY2xhbmctZm9ybWF0LTE4Mi0gIC0gJ2RybV9nZW1fZm9yX2VhY2hfZ3B1dm1fYm9fc2FmZSdcXG4uY2xhbmctZm9ybWF0OjE4MzogIC0gJ2RybV9ncHVzdm1fZm9yX2VhY2hfcmFuZ2UnXFxuLmNsYW5nLWZvcm1hdC0xODQtICAtICdkcm1fZ3B1dmFfZm9yX2VhY2hfb3AnXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdD02Nz1PdmVydmlldyBvZiBiYXNlbGluZSBkZXNpZ25cXG4tLVxcbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0LTY5LVxcbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0OjcwOi4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jXFxuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3QtNzEtICAgOmRvYzogT3ZlcnZpZXdcXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC03Mi1cXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdDo3MzouLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY1xcbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0LTc0LSAgIDpkb2M6IExvY2tpbmdcXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC03NS1cXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdDo3NjouLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY1xcbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0LTc3LSAgIDpkb2M6IFBhcnRpYWwgVW5tYXBwaW5nIG9mIFJhbmdlc1xcbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0LTc4LVxcbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0Ojc5Oi4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jXFxuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3QtODAtICAgOmRvYzogRXhhbXBsZXNcXG4tLVxcbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0PTkxPVBvc3NpYmxlIGZ1dHVyZSBkZXNpZ24gZmVhdHVyZXNcXG4tLVxcbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0LTEwMC0qIFJhbmdlcyB3aXRoIG1peGVkIHN5c3RlbSBhbmQgZGV2aWNlIHBhZ2VzXFxuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3Q6MTAxOlxcdCogQ2FuIGJlIGFkZGVkIGlmIHJlcXVpcmVkIHRvIGRybV9ncHVzdm1fZ2V0X3BhZ2VzIGZhaXJseSBlYXNpbHkuXFxuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3QtMTAyLSogTXVsdGktR1BVIHN1cHBvcnRcXG4tLVxcbk5leHQvbWVyZ2UubG9nPTE0NTg9TWVyZ2UgbWFkZSBieSB0aGUgJ29ydCcgc3RyYXRlZ3kuXFxuLS1cXG5OZXh0L21lcmdlLmxvZy0xNTEyLSBkcml2ZXJzL2Jhc2UvYXJjaF9udW1hLmMgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNCAtXFxuTmV4dC9tZXJnZS5sb2c6MTUxMzogZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYyAgICAgICAgICAgICAgICAgICAgICAgfCAgNTIgKy1cXG5OZXh0L21lcmdlLmxvZy0xNTE0LSBkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jICAgICAgICAgICAgICB8ICAgMyArLVxcbi0tXFxuTmV4dC9tZXJnZS5sb2c9NTQ1Mj0kIGdpdCBtZXJnZSAtbSBNZXJnZSBicmFuY2ggJ2Zvci1saW51eC1uZXh0JyBvZiBodHRwczovL2dpdGxhYi5mcmVlZGVza3RvcC5vcmcvZHJtL21pc2Mva2VybmVsLmdpdCBkcm0tbWlzYy9mb3ItbGludXgtbmV4dFxcbk5leHQvbWVyZ2UubG9nOjU0NTM6QXV0by1tZXJnaW5nIGRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNcXG5OZXh0L21lcmdlLmxvZy01NDU0LUF1dG8tbWVyZ2luZyBkcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuY1xcbk5leHQvbWVyZ2UubG9nPTU0NTU9TWVyZ2UgbWFkZSBieSB0aGUgJ29ydCcgc3RyYXRlZ3kuXFxuTmV4dC9tZXJnZS5sb2c6NTQ1NjogZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYyAgICAgICAgICAgICAgICAgICAgICAgfCAyNDMgKysrKysrKysrKysrLS0tLS0tLS0tXFxuTmV4dC9tZXJnZS5sb2ctNTQ1Ny0gLi4uL2dwdS9kcm0vbm91dmVhdS9udmttL3N1YmRldi9nc3Avcm0vcjUzNS9mYnNyLmMgfCAgIDEgK1xcbi0tXFxuTmV4dC9tZXJnZS5sb2ctNTQ2OC0gZHJpdmVycy9ncHUvZHJtL3hlL3hlX3VzZXJwdHIuYyAgICAgICAgICAgICAgICAgICAgfCAgIDUgKy1cXG5OZXh0L21lcmdlLmxvZzo1NDY5OiBpbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmggICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2NyArKysrLS1cXG5OZXh0L21lcmdlLmxvZy01NDcwLSAxNCBmaWxlcyBjaGFuZ2VkLCAzNTAgaW5zZXJ0aW9ucygrKSwgMjE4IGRlbGV0aW9ucygtKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlPTEwNz1vYmotJChDT05GSUdfRFJNX0dQVVZNKSArPSBkcm1fZ3B1dm0ub1xcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS0xMDgtXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlOjEwOTpkcm1fZ3B1c3ZtX2hlbHBlci15IDo9IFxcXFxcXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6MTEwOlxcdGRybV9ncHVzdm0ub1xcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZToxMTE6ZHJtX2dwdXN2bV9oZWxwZXItJChDT05GSUdfWk9ORV9ERVZJQ0UpICs9IFxcXFxcXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUtMTEyLVxcdGRybV9wYWdlbWFwLm9cXFxcXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUtMTE0LVxcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZToxMTU6b2JqLSQoQ09ORklHX0RSTV9HUFVTVk0pICs9IGRybV9ncHVzdm1faGVscGVyLm9cXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUtMTE2LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNy0jaW5jbHVkZSBcXHUwMDNjZHJtL2RybV9kZXZpY2UuaFxcdTAwM2VcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE4OiNpbmNsdWRlIFxcdTAwM2Nkcm0vZHJtX2dwdXN2bS5oXFx1MDAzZVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTktI2luY2x1ZGUgXFx1MDAzY2RybS9kcm1fcGFnZW1hcC5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01MS0gKiAtIFBhZ2VzOlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTI6ICpcXHRzdHJ1Y3QgZHJtX2dwdXN2bV9wYWdlcyBob2xkcyB0aGUgRE1BIG1hcHBpbmcgc3RhdGUgZm9yIGEgcmFuZ2Ugb2ZcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTUzLSAqXFx0Q1BVIHZpcnR1YWwgYWRkcmVzc2VzOiB0aGUgRE1BIG1hcHBlZCBkZXZpY2UgYWRkcmVzc2VzLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01Ni0gKlxcdG1hcHBpbmdzLlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTc6ICpcXHRBIGRyaXZlciBlbWJlZHMgb25lIG9yIG1vcmUgc3RydWN0IGRybV9ncHVzdm1fcGFnZXMgYWxvbmdzaWRlIGl0c1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTg6ICpcXHRzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSwgY2hvb3Npbmcgb25lIG9mIHR3byBsYXlvdXRzOlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTktICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjYwOiAqXFx0MToxIC0gb25lIGRybV9ncHVzdm1fcGFnZXMgcGVyIHJhbmdlIChvbmUgZHJtX2RldmljZSkuIFNpbXBsZXN0XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02MS0gKlxcdGxheW91dDsgdG8gbWlycm9yIGEgVkEgcmFuZ2Ugb24gc2V2ZXJhbCBkZXZpY2VzIGEgZHJpdmVyIHVzZXMgYVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NC0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NjU6ICpcXHROOjEgLSBvbmUgZHJtX2dwdXN2bV9wYWdlcyBwZXIgZHJtX2RldmljZSwgYWxsIHNoYXJpbmcgb25lIHJhbmdlIGFuZFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjYtICpcXHRub3RpZmllcjsgb25seSB0aGUgcGVyLWRldmljZSBETUEgbWFwcGluZyBkaWZmZXJzLiBUaGUgaW5zdGFuY2VzIG11c3RcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjY3OiAqXFx0c2l0IGluIGNvbnRpZ3VvdXMgbWVtb3J5IHNvIGEgc2luZ2xlIGRybV9ncHVzdm1fcmFuZ2Vfc2V0X3VubWFwcGVkKClcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY4LSAqXFx0Y2FuIG1hcmsgdGhlbSBhbGwuIEEgZHJpdmVyIGNhbiBrZWVwIG9uZSBpbnN0YW5jZSBpbmxpbmUgZm9yIHRoZSBzaW5nbGVcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzQtICpcXHRcXHRzdHJ1Y3QgZHJpdmVyX3JhbmdlIHtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjc1OiAqXFx0XFx0XFx0c3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgYmFzZTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTc2LSAqXFx0XFx0XFx0dW5zaWduZWQgaW50IG51bV9wYWdlcztcXHQvLyAxOiBpbmxpbmVfcGFnZXMsIFxcdTAwM2UxOiBwYWdlc1tdXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy03Ny0gKlxcdFxcdFxcdHVuaW9uIHtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjc4OiAqXFx0XFx0XFx0XFx0c3RydWN0IGRybV9ncHVzdm1fcGFnZXMgaW5saW5lX3BhZ2VzO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Nzk6ICpcXHRcXHRcXHRcXHRzdHJ1Y3QgZHJtX2dwdXN2bV9wYWdlcyAqcGFnZXM7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04MC0gKlxcdFxcdFxcdH07XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg0LSAqXFx0YWxsb2NhdG9yIChlLmcuIGtjYWxsb2MobnVtX3BhZ2VzLCAuLi4pKSwgaW5pdGlhbGlzZXMgZWFjaCBlbnRyeSB3aXRoXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4NTogKlxcdGRybV9ncHVzdm1faW5pdF9wYWdlcygpLCBhbmQgZnJlZXMgZWFjaCBlbnRyeSB3aXRoXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4NjogKlxcdGRybV9ncHVzdm1fZnJlZV9wYWdlcygpIHBsdXMgdGhlIGFycmF5IGl0c2VsZiwgZnJvbSBpdHMgcmFuZ2UgZnJlZVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODc6ICpcXHRjYWxsYmFjay4gRWFjaCBkcm1fZ3B1c3ZtX3BhZ2VzIGlzIG1hcHBlZCBpbmRlcGVuZGVudGx5IGJ5IHRoZWlyIG93blxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODgtICpcXHRkcm1fZGV2aWNlLlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODk6ICpcXHRFYWNoIGRybV9ncHVzdm1fcGFnZXMgbXVzdCBiZSB6ZXJvLWluaXRpYWxpc2VkIGFuZCBpbml0aWFsaXNlZCB3aXRoXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5MDogKlxcdGRybV9ncHVzdm1faW5pdF9wYWdlcygpLCBjYWxsZWQgb25jZSBwZXIgZW50cnkuXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05MS0gKlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMzUtICogZXhjZXB0IGZvciB0aGUgcmVjaGVjayByYW5nZSdzIHBhZ2VzIGJlaW5nIHZhbGlkXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMzY6ICogKGRybV9ncHVzdm1fcGFnZXNfdmFsaWQpIHdoZW4gdGhlIGRyaXZlciBpcyBjb21taXR0aW5nIEdQVSBiaW5kaW5ncy5cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTEzNy0gKiBUaGlzIGxvY2sgY29ycmVzcG9uZHMgdG8gdGhlIGBgZHJpdmVyLVxcdTAwM2V1cGRhdGVgYCBsb2NrIG1lbnRpb25lZCBpblxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNDMtICogbG9jayB0byBzYWZlZ3VhcmQgY29yZSBHUFUgU1ZNIGZ1bmN0aW9uIGNhbGxzIHRoYXQgbW9kaWZ5IHN0YXRlLCBzdWNoIGFzXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNDQ6ICogZHJtX2dwdXN2bV9yYW5nZV9maW5kX29yX2luc2VydCBhbmQgZHJtX2dwdXN2bV9yYW5nZV9yZW1vdmUuIFRoaXMgbG9jayBpc1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTQ1LSAqIGRlbm90ZWQgYXMgJ2RyaXZlcl9zdm1fbG9jaycgaW4gY29kZSBleGFtcGxlcy4gRmluZXIgZ3JhaW5lZCBkcml2ZXIgc2lkZVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTQ2LSAqIGxvY2tpbmcgc2hvdWxkIGFsc28gYmUgcG9zc2libGUgZm9yIGNvbmN1cnJlbnQgR1BVIGZhdWx0IHByb2Nlc3Npbmcgd2l0aGluIGFcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE0NzogKiBzaW5nbGUgR1BVIFNWTS4gVGhlICdkcml2ZXJfc3ZtX2xvY2snIGNhbiBiZSB2aWEgZHJtX2dwdXN2bV9kcml2ZXJfc2V0X2xvY2tcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE0OC0gKiB0byBhZGQgYW5ub3RhdGlvbnMgdG8gR1BVIFNWTS5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTg0LSAqXFx0c3RydWN0IGRyaXZlcl9yYW5nZSB7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxODU6ICpcXHRcXHRzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSBiYXNlO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTg2OiAqXFx0XFx0c3RydWN0IGRybV9ncHVzdm1fcGFnZXMgcGFnZXM7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xODctICpcXHR9O1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTg4LSAqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxODk6ICpcXHRpbnQgZHJpdmVyX2JpbmRfcmFuZ2Uoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSwgc3RydWN0IGRyaXZlcl9yYW5nZSAqZHJhbmdlKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTkwLSAqXFx0e1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xOTQtICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE5NTogKlxcdFxcdGRybV9ncHVzdm1fbm90aWZpZXJfbG9jayhncHVzdm0pO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTk2OiAqXFx0XFx0aWYgKGRybV9ncHVzdm1fcGFnZXNfdmFsaWQoZ3B1c3ZtLCBcXHUwMDI2ZHJhbmdlLVxcdTAwM2VwYWdlcykpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xOTctICpcXHRcXHRcXHRkcml2ZXJfY29tbWl0X2JpbmQoZ3B1c3ZtLCBkcmFuZ2UpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xOTktICpcXHRcXHRcXHRlcnIgPSAtRUFHQUlOO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjAwOiAqXFx0XFx0ZHJtX2dwdXN2bV9ub3RpZmllcl91bmxvY2soZ3B1c3ZtKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTIwMS0gKlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMDQtICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjIwNTogKlxcdGludCBkcml2ZXJfZ3B1X2ZhdWx0KHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sIHVuc2lnbmVkIGxvbmcgZmF1bHRfYWRkcixcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTIwNi0gKlxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBncHV2YV9zdGFydCwgdW5zaWduZWQgbG9uZyBncHV2YV9lbmQpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMDctICpcXHR7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyMDg6ICpcXHRcXHRzdHJ1Y3QgZHJtX2dwdXN2bV9jdHggY3R4ID0ge307XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMDktICpcXHRcXHRzdHJ1Y3QgZHJpdmVyX3JhbmdlICpkcmFuZ2U7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyMTA6ICpcXHRcXHRzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2U7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMTEtICpcXHRcXHRpbnQgZXJyO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMTctICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjIxODogKlxcdFxcdHJhbmdlID0gZHJtX2dwdXN2bV9yYW5nZV9maW5kX29yX2luc2VydChncHVzdm0sIGZhdWx0X2FkZHIsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMTktICpcXHRcXHRcXHRcXHRcXHRcXHRcXHRncHV2YV9zdGFydCwgZ3B1dmFfZW5kLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMzQtICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjIzNTogKlxcdFxcdGVyciA9IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKGdwdXN2bSwgXFx1MDAyNmRyYW5nZS1cXHUwMDNlcGFnZXMsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMzYtICpcXHRcXHRcXHRcXHRcXHQgICBncHVzdm0tXFx1MDAzZW1tLCBcXHUwMDI2cmFuZ2UtXFx1MDAzZW5vdGlmaWVyLVxcdTAwM2Vub3RpZmllcixcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjIzNzogKlxcdFxcdFxcdFxcdFxcdCAgIGRybV9ncHVzdm1fcmFuZ2Vfc3RhcnQocmFuZ2UpLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjM4OiAqXFx0XFx0XFx0XFx0XFx0ICAgZHJtX2dwdXN2bV9yYW5nZV9lbmQocmFuZ2UpLCBcXHUwMDI2Y3R4KTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTIzOS0gKlxcdFxcdGlmIChlcnIgPT0gLUVPUE5PVFNVUFAgfHwgZXJyID09IC1FRkFVTFQgfHwgZXJyID09IC1FUEVSTSkge1xcdC8vIENQVSBtYXBwaW5ncyBjaGFuZ2VkXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yNDAtICpcXHRcXHRcXHRpZiAoZXJyID09IC1FT1BOT1RTVVBQKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjQxOiAqXFx0XFx0XFx0XFx0ZHJtX2dwdXN2bV9yYW5nZV9ldmljdChncHVzdm0sIHJhbmdlKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI0Mi0gKlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI1OS0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjYwOiAqXFx0Ly8gVGhlIGRyaXZlciBvd25zIHRoZSBkcm1fZ3B1c3ZtX3BhZ2VzIGxpZmVjeWNsZS4gb3BzLVxcdTAwM2VyYW5nZV9mcmVlIGlzXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyNjE6ICpcXHQvLyB0aGUgZmluYWwgZmFsbGJhY2s6IGRybV9ncHVzdm1fZnJlZV9wYWdlcygpIHVubWFwcyBhbnlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI2Mi0gKlxcdC8vIGxpbmdlcmluZyBETUEgbWFwcGluZyBhbmQgYSBuby1vcCBpZiBhbHJlYWR5IHVubWFwcGVkIGFuZCBmcmVlcyB0aGVcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI2My0gKlxcdC8vIGRtYV9hZGRyIGFycmF5LiBUaGUgbm9ybWFsIGZsb3cgaXMgdG8gRE1BIHVubWFwIGJlZm9yZVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjY0OiAqXFx0Ly8gZHJtX2dwdXN2bV9yYW5nZV9yZW1vdmUoKSAoYmVmb3JlIHRoZSByYW5nZSBsZWF2ZXMgdGhlIHRyZWUpLlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjY1OiAqXFx0dm9pZCBkcml2ZXJfcmFuZ2VfZnJlZShzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yNjYtICpcXHR7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI2OS0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjcwOiAqXFx0XFx0ZHJtX2dwdXN2bV9mcmVlX3BhZ2VzKHJhbmdlLVxcdTAwM2VncHVzdm0sIFxcdTAwMjZkcmFuZ2UtXFx1MDAzZXBhZ2VzLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjcxOiAqXFx0XFx0XFx0XFx0ICAgICAgZHJtX2dwdXN2bV9yYW5nZV9zaXplKHJhbmdlKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI3Mi0gKlxcdFxcdGtmcmVlKGRyYW5nZSk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI3NC0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Mjc1OiAqXFx0dm9pZCBfX2RyaXZlcl9nYXJiYWdlX2NvbGxlY3RvcihzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Mjc2OiAqXFx0XFx0XFx0XFx0XFx0c3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjc3LSAqXFx0e1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yODEtICpcXHRcXHRpZiAocmFuZ2UtXFx1MDAzZWZsYWdzLnBhcnRpYWxfdW5tYXApXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyODI6ICpcXHRcXHRcXHRkcm1fZ3B1c3ZtX3JhbmdlX2V2aWN0KGdwdXN2bSwgcmFuZ2UpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjgzLSAqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yODQtICpcXHRcXHRkcml2ZXJfdW5iaW5kX3JhbmdlKHJhbmdlKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjI4NTogKlxcdFxcdC8vIFRoZSBwYWdlcyBtdXN0IGJlIERNQSB1bm1hcHBlZCBiZWZvcmUgZHJtX2dwdXN2bV9yYW5nZV9yZW1vdmUoKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjg2LSAqXFx0XFx0Ly8gLCBzbyBhIHJhbmdlIGlzIG5ldmVyIG9mZiB0aGUgTU1VIGludGVydmFsIHRyZWUgd2hpbGUgc3RpbGwgRE1BXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI4OS0gKlxcdFxcdC8vIGZvciBkZXZpY2UgRE1BLiBUaGlzIGlzIHRoZSBub3JtYWwgdW5tYXAgcG9pbnQuXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyOTA6ICpcXHRcXHRkcm1fZ3B1c3ZtX3VubWFwX3BhZ2VzKGdwdXN2bSwgXFx1MDAyNmRyYW5nZS1cXHUwMDNlcGFnZXMsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyOTE6ICpcXHRcXHRcXHRcXHQgICAgICAgZHJtX2dwdXN2bV9yYW5nZV9zaXplKHJhbmdlKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjkyOiAqXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjYoc3RydWN0IGRybV9ncHVzdm1fY3R4KXsgLmluX25vdGlmaWVyID0gZmFsc2UgfSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyOTM6ICpcXHRcXHRkcm1fZ3B1c3ZtX3JhbmdlX3JlbW92ZShncHVzdm0sIHJhbmdlKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI5NC0gKlxcdH1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI5NS0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Mjk2OiAqXFx0dm9pZCBkcml2ZXJfZ2FyYmFnZV9jb2xsZWN0b3Ioc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI5Ny0gKlxcdHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzA3LSAqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozMDg6ICpcXHR2b2lkIGRyaXZlcl9pbnZhbGlkYXRpb24oc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjMwOTogKlxcdFxcdFxcdFxcdCBzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqbm90aWZpZXIsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zMTAtICpcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqbW11X3JhbmdlKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzExLSAqXFx0e1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzEyOiAqXFx0XFx0c3RydWN0IGRybV9ncHVzdm1fY3R4IGN0eCA9IHsgLmluX25vdGlmaWVyID0gdHJ1ZSwgfTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjMxMzogKlxcdFxcdHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSA9IE5VTEw7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zMTQtICpcXHRcXHRzdHJ1Y3QgZHJpdmVyX3JhbmdlICpkcmFuZ2U7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMxNy0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzE4OiAqXFx0XFx0ZHJtX2dwdXN2bV9mb3JfZWFjaF9yYW5nZShyYW5nZSwgbm90aWZpZXIsIG1tdV9yYW5nZS1cXHUwMDNlc3RhcnQsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zMTktICpcXHRcXHRcXHRcXHRcXHQgIG1tdV9yYW5nZS1cXHUwMDNlZW5kKSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMyMS0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzIyOiAqXFx0XFx0XFx0ZHJtX2dwdXN2bV91bm1hcF9wYWdlcyhncHVzdm0sIFxcdTAwMjZkcmFuZ2UtXFx1MDAzZXBhZ2VzLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzIzOiAqXFx0XFx0XFx0XFx0XFx0ICAgICAgIGRybV9ncHVzdm1fcmFuZ2Vfc2l6ZShyYW5nZSkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMyNC0gKlxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2Y3R4KTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzI4LSAqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozMjk6ICpcXHRcXHRcXHRkcm1fZ3B1c3ZtX3JhbmdlX3NldF91bm1hcHBlZChyYW5nZSwgXFx1MDAyNmRyYW5nZS1cXHUwMDNlcGFnZXMsIDEsIG1tdV9yYW5nZSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zMzAtICpcXHRcXHRcXHRkcml2ZXJfZ2FyYmFnZV9jb2xsZWN0b3JfYWRkKGdwdXN2bSwgcmFuZ2UpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz0zNDg9bnBhZ2VzX2luX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zNTMtLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozNTQ6ICogZHJtX2dwdXN2bV9ub3RpZmllcl9maW5kKCkgLSBGaW5kIEdQVSBTVk0gbm90aWZpZXIgZnJvbSBHUFUgU1ZNXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zNTUtICogQGdwdXN2bTogUG9pbnRlciB0byB0aGUgR1BVIFNWTSBzdHJ1Y3R1cmUuXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM1OC0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzU5OiAqIFJldHVybjogQSBwb2ludGVyIHRvIHRoZSBkcm1fZ3B1c3ZtX25vdGlmaWVyIGlmIGZvdW5kIG9yIE5VTExcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM2MC0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjM2MTpzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozNjI6ZHJtX2dwdXN2bV9ub3RpZmllcl9maW5kKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zNjMtXFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgZW5kKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zNjktXFx0aWYgKGl0cmVlKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzcwOlxcdFxcdHJldHVybiBjb250YWluZXJfb2YoaXRyZWUsIHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyLCBpdHJlZSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zNzEtXFx0ZWxzZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zNzMtfVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Mzc0OkVYUE9SVF9TWU1CT0xfR1BMKGRybV9ncHVzdm1fbm90aWZpZXJfZmluZCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zNzUtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zNzYtLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozNzc6ICogZHJtX2dwdXN2bV9yYW5nZV9maW5kKCkgLSBGaW5kIEdQVSBTVk0gcmFuZ2UgZnJvbSBHUFUgU1ZNIG5vdGlmaWVyXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zNzgtICogQG5vdGlmaWVyOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIG5vdGlmaWVyIHN0cnVjdHVyZS5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzgxLSAqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozODI6ICogUmV0dXJuOiBBIHBvaW50ZXIgdG8gdGhlIGRybV9ncHVzdm1fcmFuZ2UgaWYgZm91bmQgb3IgTlVMTFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzgzLSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Mzg0OnN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjM4NTpkcm1fZ3B1c3ZtX3JhbmdlX2ZpbmQoc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzg2LVxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zOTItXFx0aWYgKGl0cmVlKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzkzOlxcdFxcdHJldHVybiBjb250YWluZXJfb2YoaXRyZWUsIHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlLCBpdHJlZSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zOTQtXFx0ZWxzZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zOTYtfVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Mzk3OkVYUE9SVF9TWU1CT0xfR1BMKGRybV9ncHVzdm1fcmFuZ2VfZmluZCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zOTgtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zOTktLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0MDA6ICogZHJtX2dwdXN2bV9ub3RpZmllcl9pbnZhbGlkYXRlKCkgLSBJbnZhbGlkYXRlIGEgR1BVIFNWTSBub3RpZmllci5cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQwMS0gKiBAbW5pOiBQb2ludGVyIHRvIHRoZSBtbXVfaW50ZXJ2YWxfbm90aWZpZXIgc3RydWN0dXJlLlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz00MTE9c3RhdGljIGJvb2xcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQxMjpkcm1fZ3B1c3ZtX25vdGlmaWVyX2ludmFsaWRhdGUoc3RydWN0IG1tdV9pbnRlcnZhbF9ub3RpZmllciAqbW5pLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDEzLVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlICptbXVfcmFuZ2UsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQxNS17XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0MTY6XFx0c3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyID1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQxNy1cXHRcXHRjb250YWluZXJfb2YobW5pLCB0eXBlb2YoKm5vdGlmaWVyKSwgbm90aWZpZXIpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDE4OlxcdHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0gPSBub3RpZmllci1cXHUwMDNlZ3B1c3ZtO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDE5LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00MzEtLypcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQzMjogKiBkcm1fZ3B1c3ZtX25vdGlmaWVyX29wcyAtIE1NVSBpbnRlcnZhbCBub3RpZmllciBvcGVyYXRpb25zIGZvciBHUFUgU1ZNXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00MzMtICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0MzQ6c3RhdGljIGNvbnN0IHN0cnVjdCBtbXVfaW50ZXJ2YWxfbm90aWZpZXJfb3BzIGRybV9ncHVzdm1fbm90aWZpZXJfb3BzID0ge1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDM1OlxcdC5pbnZhbGlkYXRlID0gZHJtX2dwdXN2bV9ub3RpZmllcl9pbnZhbGlkYXRlLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDM2LX07XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQzOC0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQzOTogKiBkcm1fZ3B1c3ZtX2luaXQoKSAtIEluaXRpYWxpemUgdGhlIEdQVSBTVk0uXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00NDAtICogQGdwdXN2bTogUG9pbnRlciB0byB0aGUgR1BVIFNWTSBzdHJ1Y3R1cmUuXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ1My0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDU0OiAqIE5vdGU6IElmIG9ubHkgdXNpbmcgdGhlIHNpbXBsZSBkcm1fZ3B1c3ZtX3BhZ2VzIEFQSSAoZ2V0L3VubWFwL2ZyZWUpLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDU1LSAqIHRoZW4gb25seSBAZ3B1c3ZtIGFuZCBAbmFtZSBhcmUgZXhwZWN0ZWQuIFRoZSBAZHJtIGRybV9kZXZpY2UgZm9yIGRtYVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDU2OiAqIG1hcHBpbmdzIGlzIGJvdW5kIHBlci1wYWdlcyB2aWEgZHJtX2dwdXN2bV9pbml0X3BhZ2VzKCkgYmVmb3JlIHRoZSBmaXJzdFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDU3OiAqIGRybV9ncHVzdm1fZ2V0X3BhZ2VzKCkgY2FsbC4gSG93ZXZlciwgdGhlIHNhbWUgYmFzZVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDU4LSAqIEBncHVzdm0gY2FuIGFsc28gYmUgdXNlZCB3aXRoIGJvdGggbW9kZXMgdG9nZXRoZXIgaW4gd2hpY2ggY2FzZSB0aGUgZnVsbFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDU5OiAqIHNldHVwIGlzIG5lZWRlZCwgd2hlcmUgdGhlIGNvcmUgZHJtX2dwdXN2bV9wYWdlcyBBUEkgd2lsbCBzaW1wbHkgbmV2ZXIgdXNlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00NjAtICogdGhlIG90aGVyIGZpZWxkcy5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDYzLSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDY0OmludCBkcm1fZ3B1c3ZtX2luaXQoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ2NS1cXHRcXHQgICAgY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDY4LVxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5vdGlmaWVyX3NpemUsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0Njk6XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBkcm1fZ3B1c3ZtX29wcyAqb3BzLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDcwLVxcdFxcdCAgICBjb25zdCB1bnNpZ25lZCBsb25nICpjaHVua19zaXplcywgaW50IG51bV9jaHVua3MpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ3Ni1cXHR9IGVsc2Uge1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDc3OlxcdFxcdC8qIE5vIGZ1bGwgU1ZNIG1vZGUsIG9ubHkgY29yZSBkcm1fZ3B1c3ZtX3BhZ2VzIEFQSS4gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ3OC1cXHRcXHRpZiAob3BzIHx8IG51bV9jaHVua3MgfHwgbW1fcmFuZ2UgfHwgbm90aWZpZXJfc2l6ZSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTA1LX1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjUwNjpFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1c3ZtX2luaXQpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTA3LVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTA4LS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTA5OiAqIHRvX2RybV9ncHVzdm1fbm90aWZpZXIoKSAtIHJldHJpZXZlIHRoZSBjb250YWluZXIgc3RydWN0IGZvciBhIGdpdmVuIHJidHJlZSBub2RlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1MTA6ICogQG5vZGU6IGEgcG9pbnRlciB0byB0aGUgcmJ0cmVlIG5vZGUgZW1iZWRkZWQgd2l0aGluIGEgZHJtX2dwdXN2bV9ub3RpZmllciBzdHJ1Y3RcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTUxMS0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTEyOiAqIFJldHVybjogQSBwb2ludGVyIHRvIHRoZSBjb250YWluaW5nIGRybV9ncHVzdm1fbm90aWZpZXIgc3RydWN0dXJlLlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTEzLSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTE0OnN0YXRpYyBzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqdG9fZHJtX2dwdXN2bV9ub3RpZmllcihzdHJ1Y3QgcmJfbm9kZSAqbm9kZSlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTUxNS17XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1MTY6XFx0cmV0dXJuIGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciwgaXRyZWUucmIpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTE3LX1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTE5LS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTIwOiAqIGRybV9ncHVzdm1fbm90aWZpZXJfaW5zZXJ0KCkgLSBJbnNlcnQgR1BVIFNWTSBub3RpZmllclxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTIxLSAqIEBncHVzdm06IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTUyNS0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjUyNjpzdGF0aWMgdm9pZCBkcm1fZ3B1c3ZtX25vdGlmaWVyX2luc2VydChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTI3OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqbm90aWZpZXIpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01Mjgte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01MzUtXFx0aWYgKG5vZGUpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1MzY6XFx0XFx0aGVhZCA9IFxcdTAwMjYodG9fZHJtX2dwdXN2bV9ub3RpZmllcihub2RlKSktXFx1MDAzZWVudHJ5O1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTM3LVxcdGVsc2VcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTQzLS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTQ0OiAqIGRybV9ncHVzdm1fbm90aWZpZXJfcmVtb3ZlKCkgLSBSZW1vdmUgR1BVIFNWTSBub3RpZmllclxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTQ1LSAqIEBncHVzdm06IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTQ5LSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTUwOnN0YXRpYyB2b2lkIGRybV9ncHVzdm1fbm90aWZpZXJfcmVtb3ZlKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1NTE6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpub3RpZmllcilcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU1Mi17XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU1Ny0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjU1ODogKiBkcm1fZ3B1c3ZtX2ZpbmkoKSAtIEZpbmFsaXplIHRoZSBHUFUgU1ZNLlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTU5LSAqIEBncHVzdm06IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gc3RydWN0dXJlLlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01NjMtICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1NjQ6dm9pZCBkcm1fZ3B1c3ZtX2Zpbmkoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU2NS17XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1NjY6XFx0c3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyLCAqbmV4dDtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU2Ny1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjU2ODpcXHRkcm1fZ3B1c3ZtX2Zvcl9lYWNoX25vdGlmaWVyX3NhZmUobm90aWZpZXIsIG5leHQsIGdwdXN2bSwgMCwgTE9OR19NQVgpIHtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjU2OTpcXHRcXHRzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UsICpfX25leHQ7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01NzAtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU3Ni1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjU3NzpcXHRcXHRkcm1fZ3B1c3ZtX2Zvcl9lYWNoX3JhbmdlX3NhZmUocmFuZ2UsIF9fbmV4dCwgbm90aWZpZXIsIDAsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01NzgtXFx0XFx0XFx0XFx0XFx0ICAgICAgIExPTkdfTUFYKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTc5OlxcdFxcdFxcdGRybV9ncHVzdm1fcmFuZ2VfcmVtb3ZlKGdwdXN2bSwgcmFuZ2UpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTgwLVxcdH1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTg1LX1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjU4NjpFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1c3ZtX2ZpbmkpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTg3LVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTg4LS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTg5OiAqIGRybV9ncHVzdm1fbm90aWZpZXJfYWxsb2MoKSAtIEFsbG9jYXRlIEdQVSBTVk0gbm90aWZpZXJcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU5MC0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01OTYtICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1OTc6c3RhdGljIHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjU5ODpkcm1fZ3B1c3ZtX25vdGlmaWVyX2FsbG9jKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sIHVuc2lnbmVkIGxvbmcgZmF1bHRfYWRkcilcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU5OS17XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2MDA6XFx0c3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjAxLVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02MjAtLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2MjE6ICogZHJtX2dwdXN2bV9ub3RpZmllcl9mcmVlKCkgLSBGcmVlIEdQVSBTVk0gbm90aWZpZXJcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTYyMi0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02MjYtICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2Mjc6c3RhdGljIHZvaWQgZHJtX2dwdXN2bV9ub3RpZmllcl9mcmVlKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2Mjg6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqbm90aWZpZXIpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02Mjkte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02MzgtLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2Mzk6ICogdG9fZHJtX2dwdXN2bV9yYW5nZSgpIC0gcmV0cmlldmUgdGhlIGNvbnRhaW5lciBzdHJ1Y3QgZm9yIGEgZ2l2ZW4gcmJ0cmVlIG5vZGVcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjY0MDogKiBAbm9kZTogYSBwb2ludGVyIHRvIHRoZSByYnRyZWUgbm9kZSBlbWJlZGRlZCB3aXRoaW4gYSBkcm1fZ3B1c3ZtX3JhbmdlIHN0cnVjdFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjQxLSAqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2NDI6ICogUmV0dXJuOiBBIHBvaW50ZXIgdG8gdGhlIGNvbnRhaW5pbmcgZHJtX2dwdXN2bV9yYW5nZSBzdHJ1Y3R1cmUuXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NDMtICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2NDQ6c3RhdGljIHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICp0b19kcm1fZ3B1c3ZtX3JhbmdlKHN0cnVjdCByYl9ub2RlICpub2RlKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjQ1LXtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjY0NjpcXHRyZXR1cm4gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlLCBpdHJlZS5yYik7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NDctfVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NDktLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2NTA6ICogZHJtX2dwdXN2bV9yYW5nZV9pbnNlcnQoKSAtIEluc2VydCBHUFUgU1ZNIHJhbmdlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NTEtICogQG5vdGlmaWVyOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIG5vdGlmaWVyIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NTUtICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2NTY6c3RhdGljIHZvaWQgZHJtX2dwdXN2bV9yYW5nZV9pbnNlcnQoc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NjU3OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NTgte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NjEtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2NjI6XFx0ZHJtX2dwdXN2bV9ub3RpZmllcl9sb2NrKG5vdGlmaWVyLVxcdTAwM2VncHVzdm0pO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjYzLVxcdGludGVydmFsX3RyZWVfaW5zZXJ0KFxcdTAwMjZyYW5nZS1cXHUwMDNlaXRyZWUsIFxcdTAwMjZub3RpZmllci1cXHUwMDNlcm9vdCk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY2Ni1cXHRpZiAobm9kZSlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjY2NzpcXHRcXHRoZWFkID0gXFx1MDAyNih0b19kcm1fZ3B1c3ZtX3JhbmdlKG5vZGUpKS1cXHUwMDNlZW50cnk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NjgtXFx0ZWxzZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NzEtXFx0bGlzdF9hZGQoXFx1MDAyNnJhbmdlLVxcdTAwM2VlbnRyeSwgaGVhZCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2NzI6XFx0ZHJtX2dwdXN2bV9ub3RpZmllcl91bmxvY2sobm90aWZpZXItXFx1MDAzZWdwdXN2bSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NzMtfVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NzUtLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2NzY6ICogX19kcm1fZ3B1c3ZtX3JhbmdlX3JlbW92ZSgpIC0gUmVtb3ZlIEdQVSBTVk0gcmFuZ2VcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY3Ny0gKiBAbm90aWZpZXI6IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gbm90aWZpZXIgc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY4MS0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjY4MjpzdGF0aWMgdm9pZCBfX2RybV9ncHVzdm1fcmFuZ2VfcmVtb3ZlKHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpub3RpZmllcixcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjY4MzpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02ODQte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02ODktLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2OTA6ICogZHJtX2dwdXN2bV9yYW5nZV9hbGxvYygpIC0gQWxsb2NhdGUgR1BVIFNWTSByYW5nZVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjkxLSAqIEBncHVzdm06IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTcwMC0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjcwMTpzdGF0aWMgc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NzAyOmRybV9ncHVzdm1fcmFuZ2VfYWxsb2Moc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjcwMzpcXHRcXHQgICAgICAgc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzA0LVxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGZhdWx0X2FkZHIsIHVuc2lnbmVkIGxvbmcgY2h1bmtfc2l6ZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzA2LXtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjcwNzpcXHRzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2U7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy03MDgtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTcyOC0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjcyOTogKiBkcm1fZ3B1c3ZtX2htbV9wZm5fdG9fb3JkZXIoKSAtIEdldCB0aGUgbGFyZ2VzdCBDUFUgbWFwcGluZyBvcmRlci5cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTczMC0gKiBAaG1tX3BmbjogVGhlIGN1cnJlbnQgaG1tX3Bmbi5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzQxLSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NzQyOnN0YXRpYyB1bnNpZ25lZCBpbnQgZHJtX2dwdXN2bV9obW1fcGZuX3RvX29yZGVyKHVuc2lnbmVkIGxvbmcgaG1tX3BmbixcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTc0My1cXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGhtbV9wZm5faW5kZXgsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTc1Ny0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjc1ODogKiBkcm1fZ3B1c3ZtX2NoZWNrX3BhZ2VzKCkgLSBDaGVjayBwYWdlc1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzU5LSAqIEBncHVzdm06IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTc2OS0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjc3MDpzdGF0aWMgYm9vbCBkcm1fZ3B1c3ZtX2NoZWNrX3BhZ2VzKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo3NzE6XFx0XFx0XFx0XFx0ICAgc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzcyLVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04MTYtXFx0XFx0fVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODE3OlxcdFxcdGkgKz0gMHgxIFxcdTAwM2NcXHUwMDNjIGRybV9ncHVzdm1faG1tX3Bmbl90b19vcmRlcihwZm5zW2ldLCBpLCBucGFnZXMpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODE4LVxcdH1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODI1LS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODI2OiAqIGRybV9ncHVzdm1fc2Nhbl9tbSgpIC0gQ2hlY2sgdGhlIG1pZ3JhdGlvbiBzdGF0ZSBvZiBhIGRybV9ncHVzdm1fcmFuZ2VcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjgyNzogKiBAcmFuZ2U6IFBvaW50ZXIgdG8gdGhlIHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlIHRvIGNoZWNrLlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODI4LSAqIEBkZXZfcHJpdmF0ZV9vd25lcjogVGhlIHN0cnVjdCBkZXZfcHJpdmF0ZV9vd25lciB0byB1c2UgdG8gZGV0ZXJtaW5lXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTgzOC0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODM5OiAqIFJldHVybjogU2VlIFxcdTAwMjZlbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQuXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NDAtICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4NDE6ZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0IGRybV9ncHVzdm1fc2Nhbl9tbShzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NDItXFx0XFx0XFx0XFx0XFx0ICAgICAgIHZvaWQgKmRldl9wcml2YXRlX293bmVyLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NDUtXFx0c3RydWN0IG1tdV9pbnRlcnZhbF9ub3RpZmllciAqbm90aWZpZXIgPSBcXHUwMDI2cmFuZ2UtXFx1MDAzZW5vdGlmaWVyLVxcdTAwM2Vub3RpZmllcjtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg0NjpcXHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gZHJtX2dwdXN2bV9yYW5nZV9zdGFydChyYW5nZSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4NDc6XFx0dW5zaWduZWQgbG9uZyBlbmQgPSBkcm1fZ3B1c3ZtX3JhbmdlX2VuZChyYW5nZSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NDgtXFx0c3RydWN0IGhtbV9yYW5nZSBobW1fcmFuZ2UgPSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg1NS1cXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODU2OlxcdGVudW0gZHJtX2dwdXN2bV9zY2FuX3Jlc3VsdCBzdGF0ZSA9IERSTV9HUFVTVk1fU0NBTl9VTlBPUFVMQVRFRCwgbmV3X3N0YXRlO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODU3LVxcdHVuc2lnbmVkIGxvbmcgKnBmbnM7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg3Mi1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg3MzpcXHRkcm1fZ3B1c3ZtX25vdGlmaWVyX2xvY2socmFuZ2UtXFx1MDAzZWdwdXN2bSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NzQtXFx0aWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KG5vdGlmaWVyLCBobW1fcmFuZ2Uubm90aWZpZXJfc2VxKSkge1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODc1OlxcdFxcdGRybV9ncHVzdm1fbm90aWZpZXJfdW5sb2NrKHJhbmdlLVxcdTAwM2VncHVzdm0pO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODc2LVxcdFxcdGdvdG8gcmV0cnk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkxOC1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjkxOTpcXHRcXHRpICs9IDF1bCBcXHUwMDNjXFx1MDAzYyBkcm1fZ3B1c3ZtX2htbV9wZm5fdG9fb3JkZXIocGZuc1tpXSwgaSwgbnBhZ2VzKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkyMC1cXHR9XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05MjEtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5MjI6XFx0ZHJtX2dwdXN2bV9ub3RpZmllcl91bmxvY2socmFuZ2UtXFx1MDAzZWdwdXN2bSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05MjMtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkyNy19XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5Mjg6RVhQT1JUX1NZTUJPTChkcm1fZ3B1c3ZtX3NjYW5fbW0pO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTI5LVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTMwLS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6OTMxOiAqIGRybV9ncHVzdm1fcmFuZ2VfY2h1bmtfc2l6ZSgpIC0gRGV0ZXJtaW5lIGNodW5rIHNpemUgZm9yIEdQVSBTVk0gcmFuZ2VcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkzMi0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz05NDc9c3RhdGljIHVuc2lnbmVkIGxvbmdcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjk0ODpkcm1fZ3B1c3ZtX3JhbmdlX2NodW5rX3NpemUoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjk0OTpcXHRcXHRcXHQgICAgc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTUwLVxcdFxcdFxcdCAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZhcyxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTY1LVxcdFxcdGlmIChzdGFydCBcXHUwMDNlPSB2YXMtXFx1MDAzZXZtX3N0YXJ0IFxcdTAwMjZcXHUwMDI2IGVuZCBcXHUwMDNjPSB2YXMtXFx1MDAzZXZtX2VuZCBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6OTY2OlxcdFxcdCAgICBzdGFydCBcXHUwMDNlPSBkcm1fZ3B1c3ZtX25vdGlmaWVyX3N0YXJ0KG5vdGlmaWVyKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6OTY3OlxcdFxcdCAgICBlbmQgXFx1MDAzYz0gZHJtX2dwdXN2bV9ub3RpZmllcl9lbmQobm90aWZpZXIpIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05NjgtXFx0XFx0ICAgIHN0YXJ0IFxcdTAwM2U9IGdwdXZhX3N0YXJ0IFxcdTAwMjZcXHUwMDI2IGVuZCBcXHUwMDNjPSBncHV2YV9lbmQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk3OS1cXHRpZiAoZW5kIC0gc3RhcnQgIT0gU1pfNEspIHtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjk4MDpcXHRcXHRzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2U7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05ODEtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5ODI6XFx0XFx0cmFuZ2UgPSBkcm1fZ3B1c3ZtX3JhbmdlX2ZpbmQobm90aWZpZXIsIHN0YXJ0LCBlbmQpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTgzLVxcdFxcdGlmIChyYW5nZSkge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05OTQtXFx0XFx0ICogZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19kZXZtZW0gd2l0aCAnbWlncmF0ZS5jcGFnZXMgIT0gbnBhZ2VzJ1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6OTk1OlxcdFxcdCAqIGFuZCB0aGVuIHVwb24gZHJtX2dwdXN2bV9nZXRfcGFnZXMgZGV2aWNlIHBhZ2VzIGZyb21cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk5Ni1cXHRcXHQgKiBvdGhlciBwcm9jZXNzZXMgYXJlIGNvbGxlY3RlZCArIGZhdWx0ZWQgaW4gd2hpY2ggY3JlYXRlcyBhbGxcXG4tLVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowNjowNi42MjU0Mzc0NzdaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAyODk3OTQyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipJbnZlc3RpZ2F0aW5nIGBkcm1fZ3B1c3ZtYCBUZXN0aW5nKipcblxuUmlnaHQsIGBkcm1fZ3B1c3ZtYC4uLiB0aGF0J3MgYSBoZWxwZXIgbGlicmFyeSwgaXNuJ3QgaXQ/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0IGhhcyBhbnkgYXNzb2NpYXRlZCB0ZXN0aW5nLiAgTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0byBjaGVjayBmb3IgS1VuaXQgdGVzdHMuIFRoZSBidWlsZCBvdXRwdXQgd291bGQgdXN1YWxseSBpbmRpY2F0ZSB0aGlzLiBIbW0sIG5vLCBJIGRvbid0IHNlZSBhbnl0aGluZyBleHBsaWNpdGx5IG1lbnRpb25pbmcgXCJ0ZXN0XCIgb3IgXCJrdW5pdFwiIGluIHRoZSBidWlsZCBvdXRwdXQuIE9rYXksIHRoYXQncyBub3QgY29uY2x1c2l2ZSwgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIFNvLCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgYGRybV9ncHVzdm1gIGFjdHVhbGx5IGhhdmUgKmFueSogc2VsZnRlc3RzIG9yIEtVbml0IHRlc3RzPyBUaW1lIHRvIGV4YW1pbmUgdGhlIHNvdXJjZSBjb2RlIGl0c2VsZi4gSSdsbCBuZWVkIHRvIGdvIGRpcmVjdGx5IHRvIGBkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jYCBhbmQgc2VhcmNoIHRoZSBjb2RlIGZvciBhbnkgbWVudGlvbnMgb2YgXCJrdW5pdFwiIG9yIFwidGVzdFwiLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZGVmaW5pdGl2ZSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNDc3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDY6MTEuNjU0NDE5NTZaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzk0OTg2NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3VuaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDY6MTEuNzgyMzgwNDM0WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMTg2OTAzNzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIFRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzbid0IHRvdWNoaW5nIGFueSBjb2RlIHRoYXQncyBhY3R1YWxseSB0ZXN0ZWQgYnkga3VuaXQsIHdoaWNoIGlzIGEga2V5IHN0YXJ0aW5nIHBvaW50LiBJIGxvb2tlZCBhdCBgZHJtX2dwdXN2bWAsIGBhaWUyX2N0eC5jYCwgYW5kIGBub3V2ZWF1X3N2bS5jYCwgYW5kIG5vbmUgb2YgdGhlbSBhcmUgY292ZXJlZC4gVGhpcyBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnOiBpcyB0aGlzIHB1cmVseSBhIGNoYW5nZSB0byB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbGlrZSBHQ0Ugb3IgUUVNVT8gVGhhdCdzIHdoYXQgaXQgbG9va3MgbGlrZSwgaW5pdGlhbGx5LlxuXG5CdXQgd2FpdCwgSSBuZWVkIHRvIGJlIHByZWNpc2UgaGVyZS4gSXMgYGRybV9ncHVzdm1gICpwb3RlbnRpYWxseSogcmVhY2hhYmxlIHRocm91Z2ggdGhlIGB4ZWAgZHJpdmVyPyBTeXprYWxsZXIgZG9lc24ndCBoYXZlIHRoYXQgc3BlY2lmaWMgSW50ZWwgWGUgaGFyZHdhcmUsIHNvIEkgY2FuJ3QgaW1tZWRpYXRlbHkgcnVsZSBpdCBvdXQuIEFuZCB3aGF0IGFib3V0IGBub3V2ZWF1YCBhbmQgYGFtZHhkbmFgPyBTeXprYWxsZXIncyBoYXJkd2FyZSBsaW1pdGF0aW9ucyBhcmUgZGVmaW5pdGVseSBhIGZhY3Rvci5cblxuTm93LCBJIGFsbW9zdCBtaXNzZWQgc29tZXRoaW5nIOKAkyB3aGF0IGFib3V0IGBsaWIvdGVzdF9obW0uY2A/IEFoLCBubywgdGhlIHBhdGNoIGRvZXNuJ3QgdG91Y2ggdGhhdC4gR29vZC4gSG93ZXZlciwgd2FpdCwgdGhpcyBwYXRjaCAqZG9lcyogbW9kaWZ5IHVzYWdlIG9mIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAgaW4gdGhvc2UgZmlsZXMgSSBtZW50aW9uZWQgZWFybGllcjogYGFpZTJfY3R4LmNgLCBgZHJtX2dwdXN2bS5jYCwgYW5kIGBub3V2ZWF1X3N2bS5jYC5cblxuT2theSwgZG9lcyBpdCBjaGFuZ2UgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCBpdHNlbGY/IEkgZG9uJ3Qgc2VlIGFueSBtb2RpZmljYXRpb25zIHRvIGBtbS9obW0uY2AgaW4gdGhlIGRpZmYsIHNvIHRoYXQncyBhIG5lZ2F0aXZlLiBCdXQgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4uLiBsZXQgbWUgZG91YmxlLWNoZWNrIHRoaXMgZGlmZiBhZ2Fpbi4gTWFraW5nIHN1cmUgSSBoYXZlIGFsbCB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM4MTIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDY6MjIuOTY5Mjg4MzQyWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzcyODgzMzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2htbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2htbS5jPTY4OT1zdGF0aWMgaW50IGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsIGJvb2wgKmxvY2tlZClcXG4tLVxcbm1tL2htbS5jLTc1My0gKiBUaGUgbW1hcCBsb2NrIG11c3QgYmUgaGVsZCBieSB0aGUgY2FsbGVyIGFuZCB3aWxsIHJlbWFpbiBoZWxkIG9uIHJldHVybi5cXG5tbS9obW0uYzo3NTQ6ICogTmV3IHVzZXJzIHNob3VsZCBwcmVmZXIgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKSB1bmxlc3MgdGhleVxcbm1tL2htbS5jLTc1NS0gKiBzcGVjaWZpY2FsbHkgbmVlZCB0byBrZWVwIHRoZSBtbWFwIGxvY2sgaGVsZCBhY3Jvc3MgdGhlIGNhbGwuIFRoaXMgaGVscGVyXFxuLS1cXG5tbS9obW0uYz03NjI9RVhQT1JUX1NZTUJPTChobW1fcmFuZ2VfZmF1bHQpO1xcbi0tXFxubW0vaG1tLmMtNzY0LS8qKlxcbm1tL2htbS5jOjc2NTogKiBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCAtIGZhdWx0IGluIGEgcmFuZ2Ugd2l0aCBhIHJldHJ5IHRpbWVvdXRcXG5tbS9obW0uYy03NjYtICogQHJhbmdlOlxcdGFyZ3VtZW50IHN0cnVjdHVyZVxcbi0tXFxubW0vaG1tLmMtNzgzLSAqL1xcbm1tL2htbS5jOjc4NDppbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXFxubW0vaG1tLmMtNzg1LVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KVxcbi0tXFxubW0vaG1tLmMtODI0LX1cXG5tbS9obW0uYzo4MjU6RVhQT1JUX1NZTUJPTChobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCk7XFxubW0vaG1tLmMtODI2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowNjoyNC43NDIxNzY2NTZaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzIyMTMxNjg0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvZGUgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gdGhlIHVzZXIncyBwcm92aWRlZCBhIGRpZmYsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiQWxyaWdodCwgbGV0J3Mgc2VlIHdoYXQncyBjaGFuZ2VkLlwiIEkgaW1tZWRpYXRlbHkgc2NhbiB0aGUgZmlsZSBwYXRoczogYERvY3VtZW50YXRpb24vbW0vaG1tLnJzdGAsIGBkcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguY2AsIGBkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jYCwgYW5kIGBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jYC5cblxuTXkgZ3V0IHJlYWN0aW9uIGlzIHRoYXQgdGhpcyBwcm9iYWJseSB3b24ndCBiZSByZWFjaGFibGUgdmlhIHN5emthbGxlciBhcyBpcy4gQmFzZWQgb24gdGhlIGZpbGUgcGF0aHMsIG15IG1lbW9yeSBraWNrcyBpbi4gSSBrbm93IHRob3NlIHBhdGhzIHJlcXVpcmUgc3BlY2lmaWMgaGFyZHdhcmU6IEFNRCBYRE5BLCBJbnRlbCBYZSwgYW5kIE5WSURJQSBHUFVzLiBUaGVzZSBhcmUgbm90IHR5cGljYWxseSBwcmVzZW50LCBub3IgZW11bGF0ZWQsIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCB3aGljaCBhcmUgdGhlIHN5emthbGxlciBnby10bydzLlxuXG5CdXQgd2FpdCBhIG1pbnV0ZS4uLiAqZHJtX2dwdXN2bS5jKi4uLnRoYXQgZmlsZSBuYW1lIGlzIHBva2luZyBhdCBzb21ldGhpbmcgaW4gbXkgbWluZC4gQ291bGQgdGhhdCBvbmUgYmUgcmVhY2hhYmxlIHNvbWVob3cgd2l0aCBhIG1vY2sgZHJpdmVyPyBJdCdzIHdvcnRoIGEgcXVpY2sgZG91YmxlLWNoZWNrLiBPa2F5LCBmb2N1c2luZyBiYWNrIGluLCBsZXQncyBzZWUuIExldCBtZSBxdWlja2x5IGpvZyBteSBtZW1vcnkgYW5kIHNlZSBob3cgdGhhdCBpcyBzZWxlY3RlZC4gTm9wZSwgaXQgbG9va3MgbGlrZSBgZHJtX2dwdXN2bWAgaXMgb25seSBzZWxlY3RlZCBieSBgRFJNX1hFYCBhbmQgYERSTV9YRV9HUFVTVk1gLiBTbyB0aGF0J3MgdGhlIGVuZCBvZiB0aGF0IHRob3VnaHQuXG5cbkFscmlnaHQsIHNvIHRoZSBjaGFuY2VzIG9mIHRoaXMgYmVpbmcgZGlyZWN0bHkgdGVzdGFibGUgc2VlbSBzbGltLiBMZXQncyBkaWcgZGVlcGVyLiBNYXliZSBpdCBpcyB1c2VkIGJ5IHNvbWV0aGluZyBlbHNlIEkgYW0gbm90IHRoaW5raW5nIG9mLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDc4NCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowNjozMS45NjM0OTY0MDRaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjcyNTA4NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IERSTV9HUFVTVk1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWc9Mj1jb25maWcgRFJNX1hFXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZy00MS1cXHRzZWxlY3QgRFJNX0VYRUNcXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZzo0MjpcXHRzZWxlY3QgRFJNX0dQVVNWTSBpZiAhVU1MXFxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWctNDMtXFx0c2VsZWN0IERSTV9HUFVWTVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWc9Nzk9Y29uZmlnIERSTV9YRV9HUFVTVk1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnLTg1LVxcdHNlbGVjdCBERVZJQ0VfUFJJVkFURVxcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnOjg2OlxcdHNlbGVjdCBEUk1fR1BVU1ZNXFxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWctODctXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowNjozNC4yMzA3NTMwMDdaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI4MTMxMDk2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmc9ZmFsc2U6IFVucmVhY2hhYmxlIENvZGUgUGF0aHMgaW4gVmlydHVhbGl6ZWQgRW52aXJvbm1lbnRzKipcblxuT2theSwgc28gbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBJJ20gcmV2aWV3aW5nIG1vZGlmaWVzIGhvdyBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIGlzIHVzZWQsIGFuZCBpdCBkb2VzIHNvIHdpdGhpbiB0aHJlZSBzcGVjaWZpYyBHUFUgZHJpdmVyczogYGFtZHhkbmFgLCBgZHJtX2dwdXN2bS5jYCwgYW5kIGBub3V2ZWF1YC4gQSBxdWljayBsb29rIGF0IHRoZSBjb2RlIGNvbmZpcm1zIHRoYXQgYGRybV9ncHVzdm0uY2AgaXMgZXhjbHVzaXZlbHkgdXNlZCBieSB0aGUgYHhlYCBkcml2ZXIuIFRoZSBjcnVjaWFsIHBvaW50IGlzIHRoYXQgYHhlYCwgYGFtZHhkbmFgLCBhbmQgYG5vdXZlYXVgIGFyZSBhbGwgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycy4gVGhleSBhcmUgZGVzaWduZWQgdG8gaW50ZXJmYWNlIHdpdGggcGFydGljdWxhciBHUFVz4oCUQU1EIFhETkEsIEludGVsIFhlLCBhbmQgTlZJRElBIEdQVXMsIHJlc3BlY3RpdmVseS4gVGhlc2UgZHJpdmVycyBhcmUgbm90IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSB3aXRob3V0IGhhcmR3YXJlIHBhc3N0aHJvdWdoLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBgbm91dmVhdWAgY2FuIGV2ZW4gYmUgZnV6emVkLCBnaXZlbiBTeXprYWxsZXIncyBjdXJyZW50IGNvbmZpZ3VyYXRpb24uIEkga25vdyBTeXprYWxsZXIgZG9lc24ndCBoYXZlIE5WSURJQSBHUFVzIGluIGl0cyB2aXJ0dWFsIG1hY2hpbmVzLiBJJ20gcHJldHR5IGNlcnRhaW4gdGhhdCB0aGUgYG5vdXZlYXVgIGRyaXZlciBjYW4ndCBiZSBpbml0aWFsaXplZCB3aXRob3V0IHRoZSBoYXJkd2FyZS4gSXQncyBhIFBDSSBkcml2ZXIgYW5kIGJpbmRzIHRvIE5WSURJQSBQQ0kgZGV2aWNlcy4gV2l0aG91dCB0aGUgc3BlY2lmaWMgaGFyZHdhcmUsIHRoZSBkcml2ZXIncyBgcHJvYmVgIGZ1bmN0aW9uIHdvbid0IGJlIGNhbGxlZCwgYW5kIHRodXMsIGl0cyBpb2N0bHMgd29uJ3QgYmUgcmVnaXN0ZXJlZC4gVGhlIHNhbWUgbG9naWMgYXBwbGllcyB0byBgYW1keGRuYWAgYW5kIGB4ZWAuXG5cbkdpdmVuIHRoaXMsIHRoZSBjaGFuZ2VzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCBhcmUsIGluIGVzc2VuY2UsIGRlYWQgY29kZSBpbiBvdXIgY3VycmVudCBmdXp6aW5nIHNldHVwLiBUaGV5J3JlIG1vZGlmeWluZyBjb2RlIHBhdGhzIHRoYXQgYXJlIGluaGVyZW50bHkgdW5yZWFjaGFibGUgd2l0aGluIHRoZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2UncmUgdXNpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGNvcnJlY3QgYWJvdXQgYGRybV9ncHVzdm0uY2AgYW5kIGl0cyByZWxhdGlvbiB0byBgdmttc2AgYW5kIGB2Z2VtYCBiZWZvcmUgSSdtIDEwMCUgc3VyZS4gXG5cblRoZXJlZm9yZSwgSSBuZWVkIHRvIGZsYWcgdGhpcyBhcyBgV29ydGhGdXp6aW5nPWZhbHNlYCBhbmQgcHJvdmlkZSB0aGUgcmVhc29uaW5nOiB0aGUgcGF0Y2ggbW9kaWZpZXMgY29kZSB3aXRoaW4gaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycyAoYGFtZHhkbmFgLCBgeGVgIHZpYSBgZHJtX2dwdXN2bS5jYCwgYW5kIGBub3V2ZWF1YCkuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZSBvciBoYXJkd2FyZSBlbXVsYXRpb24gd2hpY2ggd2UgZG9uJ3QgaGF2ZSBhdmFpbGFibGUgaW4gR0NFL1FFTVUsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBpbXBvc3NpYmxlIHRvIGV4ZWN1dGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NjY0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjA2OjQxLjUxMjA2NzU2M1oiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI1MDkyMjYxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcm1fZ3B1c3ZtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZ3B1L2RybS92a21zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowNjo0MS45MzcxNzA3NDVaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg4NTI3MjM0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjQ2NTc4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwODowNjo0Ni44MjI0NDYxMjRaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODk5MzMyNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHJtX2dwdXN2bVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2dwdS9kcm0vdmdlbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDY6NDYuOTMxNDQ5NjU5WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMTY5NDg4NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipDb25maXJtaW5nIFBDSSBEcml2ZXIgU3RhdHVzKipcblxuUmlnaHQsIHNvIEknbSBzZWVpbmcgdGhpcyB0aGluZywgYW5kIHRoZSBrZXkgb2JzZXJ2YXRpb24gaXMgdGhhdCBpdCdzICpub3QqIGJlaW5nIHV0aWxpemVkIGJ5IHRoZSB0YXJnZXQgZ3JvdXAuIFRoYXQncyB0aGUgY29yZSBvZiB0aGUgaXNzdWUuXG5cbk5vdywgSSBuZWVkIHRvIGdldCBhIGZpcm0gZ3Jhc3Agb24gdGhlIHRlY2huaWNhbCBhc3BlY3RzIGJlZm9yZSBJIGNhbiBkZXRlcm1pbmUgaWYgdGhpcyBpcyBhIGRyaXZlciBpc3N1ZSwgYSBjb25maWcgaXNzdWUsIG9yIHNvbWUgb3RoZXIgcHJvYmxlbS4gTGV0IG1lIHF1aWNrbHkgY29uZmlybSB0aGF0IGBhbWR4ZG5hYCBpcyBpbmRlZWQgZnVuY3Rpb25pbmcgYXMgYSBQQ0kgZHJpdmVyLiBUaGlzIGlzIGZ1bmRhbWVudGFsIGZvciBtZSB0byBwcm9jZWVkLiBJZiBpdCBpc24ndCwgdGhlbiBldmVyeXRoaW5nIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NjI1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDY6NDkuOTQ4NDAwOTc5WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTY0NTI3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2lfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYWNjZWwvYW1keGRuYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9wY2lfZHJ2LmM9NDc1PXN0YXRpYyBpbnQgYW1keGRuYV9zcmlvdl9jb25maWd1cmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudW1fdmZzKVxcbi0tXFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfcGNpX2Rydi5jLTQ4NS1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9wY2lfZHJ2LmM6NDg2OnN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhbWR4ZG5hX3BjaV9kcml2ZXIgPSB7XFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfcGNpX2Rydi5jLTQ4Ny1cXHQubmFtZSA9IEtCVUlMRF9NT0ROQU1FLFxcbi0tXFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfcGNpX2Rydi5jLTQ5NC1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9wY2lfZHJ2LmM6NDk1Om1vZHVsZV9wY2lfZHJpdmVyKGFtZHhkbmFfcGNpX2RyaXZlcik7XFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfcGNpX2Rydi5jLTQ5Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDg6MDY6NTAuMDA4MDUxNDM3WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNDk3MDY2NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyByZXF1ZXN0ZWQ6XG5cbioqUENJIERyaXZlciBWZXJpZmljYXRpb24gLSBRdWljayBUaG91Z2h0cyoqXG5cbkFscmlnaHQsIHllcCwgdGhhdCBsb29rcyBsaWtlIGEgUENJIGRyaXZlciwgbm8gcXVlc3Rpb24gYWJvdXQgaXQuIE5vdywganVzdCBhIHF1aWNrIHNhbml0eSBjaGVjaywgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCBgeGVgIGlzICpkZWZpbml0ZWx5KiBhY3RpbmcgYXMgYSBQQ0kgZHJpdmVyLiBJdCdzIGFsd2F5cyBnb29kIHByYWN0aWNlIHRvIGRvdWJsZS1jaGVjayB0aGVzZSBhc3N1bXB0aW9ucyBiZWZvcmUgbW92aW5nIGZvcndhcmQuIEknbGwganVzdCBydW4gYSBxdWljayBkaWFnbm9zdGljLCBub3RoaW5nIG1ham9yLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzA3NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjA2OjU2LjI1Nzc2MDQyN1oiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQzMzU1MTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ncHUvZHJtL3hlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZ3B1L2RybS94ZS90ZXN0cy94ZV9wY2kuYz00MDU9Y29uc3Qgdm9pZCAqeGVfcGNpX2xpdmVfZGV2aWNlX2dlbl9wYXJhbShzdHJ1Y3Qga3VuaXQgKnRlc3QsIGNvbnN0IHZvaWQgKnByZXYsIGNoYXIgKmRlc2MpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUvdGVzdHMveGVfcGNpLmMtNDEwLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS90ZXN0cy94ZV9wY2kuYzo0MTE6XFx0bmV4dCA9IGRyaXZlcl9maW5kX25leHRfZGV2aWNlKFxcdTAwMjZ4ZV9wY2lfZHJpdmVyLmRyaXZlciwgZGV2KTtcXG5kcml2ZXJzL2dwdS9kcm0veGUvdGVzdHMveGVfcGNpLmMtNDEyLVxcdGlmIChkZXYpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfY29uZmlnZnMuYz0xMDA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGVfZGV2aWNlX2Rlc2MgKnhlX21hdGNoX2Rlc2Moc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfY29uZmlnZnMuYy0xMDA4LVxcdHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXIgPSBkcml2ZXJfZmluZChcXFwieGVcXFwiLCBcXHUwMDI2cGNpX2J1c190eXBlKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfY29uZmlnZnMuYzoxMDA5OlxcdHN0cnVjdCBwY2lfZHJpdmVyICpkcnYgPSB0b19wY2lfZHJpdmVyKGRyaXZlcik7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2NvbmZpZ2ZzLmMtMTAxMC1cXHRjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWRzID0gZHJ2ID8gZHJ2LVxcdTAwM2VpZF90YWJsZSA6IE5VTEw7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfbW9kdWxlLmM9OTY9c3RhdGljIGNvbnN0IHN0cnVjdCBpbml0X2Z1bmNzIGluaXRfZnVuY3NbXSA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9tb2R1bGUuYy0xMTItXFx0e1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9tb2R1bGUuYzoxMTM6XFx0XFx0LmluaXQgPSB4ZV9yZWdpc3Rlcl9wY2lfZHJpdmVyLFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9tb2R1bGUuYzoxMTQ6XFx0XFx0LmV4aXQgPSB4ZV91bnJlZ2lzdGVyX3BjaV9kcml2ZXIsXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX21vZHVsZS5jLTExNS1cXHR9LFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jPTE0MjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHhlX3BtX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xNDI5LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYzoxNDMwOnN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB4ZV9wY2lfZHJpdmVyID0ge1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xNDMxLVxcdC5uYW1lID0gRFJJVkVSX05BTUUsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmM9MTQ0OT1zdHJ1Y3QgeGVfZGV2aWNlICp4ZV9wY2lfdG9fcGZfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jLTE0NTItXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jOjE0NTM6XFx0ZHJtID0gcGNpX2lvdl9nZXRfcGZfZHJ2ZGF0YShwZGV2LCBcXHUwMDI2eGVfcGNpX2RyaXZlcik7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jLTE0NTQtXFx0aWYgKElTX0VSUihkcm0pKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jLTE0NTktXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jOjE0NjA6aW50IHhlX3JlZ2lzdGVyX3BjaV9kcml2ZXIodm9pZClcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmMtMTQ2MS17XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5jOjE0NjI6XFx0cmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoXFx1MDAyNnhlX3BjaV9kcml2ZXIpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xNDYzLX1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmMtMTQ2NC1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmM6MTQ2NTp2b2lkIHhlX3VucmVnaXN0ZXJfcGNpX2RyaXZlcih2b2lkKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xNDY2LXtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmM6MTQ2NzpcXHRwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoXFx1MDAyNnhlX3BjaV9kcml2ZXIpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuYy0xNDY4LX1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuaD05PXN0cnVjdCBwY2lfZGV2O1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuaC0xMC1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpLmg6MTE6aW50IHhlX3JlZ2lzdGVyX3BjaV9kcml2ZXIodm9pZCk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3BjaS5oOjEyOnZvaWQgeGVfdW5yZWdpc3Rlcl9wY2lfZHJpdmVyKHZvaWQpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2kuaC0xMy1zdHJ1Y3QgeGVfZGV2aWNlICp4ZV9wY2lfdG9fcGZfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2lfc3Jpb3YuYz0xNzY9c3RhdGljIGludCBwZl9kaXNhYmxlX3ZmcyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wY2lfc3Jpb3YuYy0yMTMtICpcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpX3NyaW92LmM6MjE0OiAqIFRoaXMgaXMgdGhlIFhlIGltcGxlbWVudGF0aW9uIG9mIHN0cnVjdCBwY2lfZHJpdmVyLnNyaW92X2NvbmZpZ3VyZSBjYWxsYmFjay5cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcGNpX3NyaW92LmMtMjE1LSAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjA2OjU2LjYwMTEyMTIzM1oiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODQwMTcxMDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDb25maXJtaW5nIFBDSSBEcml2ZXIgSWRlbnRpdHkqKlxuXG5SaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIGEgUENJIGRyaXZlciwgdGhhdCdzIGNsZWFyIGVub3VnaC4gTm93LCBJIHdhbnQgdG8gcXVpY2tseSBzb2xpZGlmeSB0aGF0IHRoaXMgKm5vdXZlYXUqIGRyaXZlciBpcyBpbmRlZWQgdGhlIG9uZSB3ZSdyZSBsb29raW5nIGF0LiBHb3R0YSBiZSBjZXJ0YWluIGJlZm9yZSBJIGdvIGRlZXBlciBkb3duIHRoYXQgcmFiYml0IGhvbGUuIEkga25vdyB0aGUgYmFzaWNzLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgYWxsIHRoZSBwaWVjZXMgb2YgdGhlIHB1enpsZSBiZWZvcmUgSSBzdGFydCB0cnlpbmcgdG8gcHV0IHRoZW0gdG9nZXRoZXIuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCB0aGUgbW9kdWxlIG5hbWUgYG5vdXZlYXVgIGNvcnJlc3BvbmRzIHdpdGggYSBQQ0kgZGV2aWNlIGRyaXZlciwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIEdvdHRhIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODU0MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjA2OjU5LjQ0MTI5NDM1WiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTYzODY3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2lfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJtLmM9MTQyNT1zdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgbm91dmVhdV9wbV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RybS5jLTE0MzYtXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcm0uYzoxNDM3OnN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlclxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJtLmM6MTQzODpub3V2ZWF1X2RybV9wY2lfZHJpdmVyID0ge1xcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJtLmMtMTQzOS1cXHQubmFtZSA9IFxcXCJub3V2ZWF1XFxcIixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJtLmM9MTQ4MD1ub3V2ZWF1X2RybV9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RybS5jLTE1MDYtI2lmZGVmIENPTkZJR19QQ0lcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RybS5jOjE1MDc6XFx0cmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcihcXHUwMDI2bm91dmVhdV9kcm1fcGNpX2RyaXZlcik7XFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcm0uYy0xNTA4LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJtLmM9MTUxOD1ub3V2ZWF1X2RybV9leGl0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RybS5jLTE1MjMtI2lmZGVmIENPTkZJR19QQ0lcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RybS5jOjE1MjQ6XFx0cGNpX3VucmVnaXN0ZXJfZHJpdmVyKFxcdTAwMjZub3V2ZWF1X2RybV9wY2lfZHJpdmVyKTtcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RybS5jLTE1MjUtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjA2OjU5LjUxNjk0MjE1N1oiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDQzMDU2MDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqQW5hbHl6aW5nIHRoZSBQYXRjaCBhbmQgSXRzIEltcGFjdCoqXG5cbkFscmlnaHQsIHllcCwgdGhhdCBjb25maXJtcyBpdCDigJMgdGhpcyBpcyBkZWZpbml0ZWx5IGEgUENJIGRyaXZlciB3ZSdyZSBkZWFsaW5nIHdpdGguIEFuZCBsb29raW5nIGF0IHRoZSBjb250ZXh0LCBpdCdzIHByZXR0eSBjbGVhciB3aGVyZSB0aGUgcHJvYmxlbSBsaWVzLiBUaGUgcGF0Y2ggdG91Y2hlcyB0aHJlZSBkcml2ZXJzLCBhbmQgdGhleSBhcmUgKmFsbCogaGFyZHdhcmUtc3BlY2lmaWMgUENJIGRyaXZlcnMuIFdoYXQgdGhhdCBtZWFucyBpcyB0aGV5J3JlIGNvZGVkIHRvIGludGVyYWN0IGRpcmVjdGx5IHdpdGggdGhlIHBoeXNpY2FsIGhhcmR3YXJlIGNvbXBvbmVudHMgb24gYSBQQ0kgYnVzLiBUaGV5J3JlIG5vdCBnZW5lcmljLCBhbmQgY3J1Y2lhbGx5LCB0aGV5IG5lZWQgdGhhdCAqc3BlY2lmaWMqIGhhcmR3YXJlIHRvIGZ1bmN0aW9uLlxuXG5Ob3csIGNvbnNpZGVyaW5nIHRoZSBlbnZpcm9ubWVudCB3ZSdyZSB3b3JraW5nIHdpdGgsIHN5emthbGxlciwgaXQgYWxsIGZhbGxzIGludG8gcGxhY2UuIFN5emthbGxlcidzIHN0cmVuZ3RoIGlzIGl0cyBmdXp6aW5nIGNhcGFiaWxpdGllcyBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcsIHdoaWNoIGlzIHBlcmZlY3QgZm9yIGlzb2xhdGluZyBidWdzLiBCdXQgYmVjYXVzZSB0aGVzZSBkcml2ZXJzIHJlcXVpcmUgKnJlYWwqIHBoeXNpY2FsIFBDSSBoYXJkd2FyZSwgYW5kIHRoZXJlIGFyZSBubyBkdW1teSBvciB2aXJ0dWFsIGRldmljZXMgc2V0IHVwIHRvIG1pbWljIHRoYXQgaGFyZHdhcmUgd2l0aGluIHN5emthbGxlcidzIHZpcnR1YWwgZW52aXJvbm1lbnQsIHRoZSBjb2RlIHBhdGhzIHRvdWNoZWQgYnkgdGhlIHBhdGNoIGFyZSBzaW1wbHkgdW5yZWFjaGFibGUuIFdlJ3JlIGVmZmVjdGl2ZWx5IGRlYWxpbmcgd2l0aCBkZWFkIGNvZGUgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LlxuXG5UaGVyZWZvcmUsIEknbSByZWFkeSB0byBmb3JtdWxhdGUgbXkgcmVzcG9uc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MTUxLCJPdXRwdXRUb2tlbnMiOjE3MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA4OjA3OjA3Ljk2MDAwMTE1M1oiLCJTZXEiOjYwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB1c2FnZSBvZiBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgIGluIHRocmVlIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnM6IEFNRCBYRE5BIChgZHJpdmVycy9hY2NlbC9hbWR4ZG5hYCksIEludGVsIFhlIChgZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY2AsIHdoaWNoIGlzIG9ubHkgdXNlZCBieSBgeGVgKSwgYW5kIE5vdXZlYXUgKGBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdWApLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgKEFNRCBYRE5BIE5QVSwgSW50ZWwgWGUgR1BVLCBOVklESUEgR1BVKSB0byBpbml0aWFsaXplIGFuZCBleHBvc2UgdGhlaXIgaW50ZXJmYWNlcy4gU2luY2Ugc3l6a2FsbGVyIG9wZXJhdGVzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoR0NFL1FFTVUpIHdpdGhvdXQgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBvciBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoZW0sIHRoZXNlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enouXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdXNhZ2Ugb2YgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCBpbiB0aHJlZSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzOiBBTUQgWEROQSAoYGRyaXZlcnMvYWNjZWwvYW1keGRuYWApLCBJbnRlbCBYZSAoYGRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNgLCB3aGljaCBpcyBvbmx5IHVzZWQgYnkgYHhlYCksIGFuZCBOb3V2ZWF1IChgZHJpdmVycy9ncHUvZHJtL25vdXZlYXVgKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIChBTUQgWEROQSBOUFUsIEludGVsIFhlIEdQVSwgTlZJRElBIEdQVSkgdG8gaW5pdGlhbGl6ZSBhbmQgZXhwb3NlIHRoZWlyIGludGVyZmFjZXMuIFNpbmNlIHN5emthbGxlciBvcGVyYXRlcyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKEdDRS9RRU1VKSB3aXRob3V0IHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgb3Igc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGVtLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowc2vxx[1] Phase: Running StartedAt: 2026-07-15 08:07:40 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2vxx[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-15 08:07:40 +0000 UTC FinishedAt: 2026-07-15 08:07:45 +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,}