Name: series-workflowjjhjs Phase: Failed StartedAt: 2026-08-18 18:04:06 +0000 UTC FinishedAt: 2026-08-18 18:07:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjjhjs[0] Phase: Succeeded StartedAt: 2026-08-18 18:04:06 +0000 UTC FinishedAt: 2026-08-18 18:06:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjjhjs[0].run-triage Phase: Succeeded StartedAt: 2026-08-18 18:04:06 +0000 UTC FinishedAt: 2026-08-18 18:06:34 +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+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbiAoaWRwZikgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIFNtYXJ0TklDL0lQVSBkcml2ZXIuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIG1ha2luZyBpdCB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiM2ZjYjY4YmM2MDczYjUwOGExYjZjNjI2NjgxNmZhYzBkNmY4ODRjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTg6MDY6MDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaFxuaW5kZXggNDcwYmMyM2M4NDRjMS4uMWU4OTdlMTMxY2IyOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaFxuQEAgLTM4Myw2ICYjNDM7MzgzLDcgQEAgc3RydWN0IGlkcGZfdnBvcnQge1xuIFx0c3RydWN0IGlkcGZfdHhfcXVldWUgKip0eHFzO1xuIFx0dTE2IG51bV90eHE7XG4gXHR1MTYgbnVtX3hkcF90eHE7XG4mIzQzO1x0Ym9vbCB4ZHBzcV9mYjtcbiBcdGJvb2wgeGRwc3Ffc2hhcmU7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jXG5pbmRleCBjM2ZmYjQ0NTI5N2Y4Li43NDMzOTU5NjIwNzdkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY1xuQEAgLTIyNyw3ICYjNDM7MjI3LDcgQEAgc3RhdGljIGludCBpZHBmX3R4X2Rlc2NfYWxsb2MoY29uc3Qgc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0LFxuIFxuIFx0aWRwZl94c2tfc2V0dXBfcXVldWUodnBvcnQsIHR4X3EsIFZJUlRDSE5MMl9RVUVVRV9UWVBFX1RYKTtcbiBcbi1cdGlmICghaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHR4X3EpKVxuJiM0MztcdGlmICghaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHR4X3EpIHx8IGlkcGZfcXVldWVfaGFzKFhEUCwgdHhfcSkpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0cmVmaWxscSA9IHR4X3EtXHUwMDNlcmVmaWxscTtcbkBAIC0xMDU1LDYgJiM0MzsxMDU1LDEzIEBAIHN0YXRpYyB2b2lkIGlkcGZfY2xlYW5fcXVldWVfc2V0KGNvbnN0IHN0cnVjdCBpZHBmX3F1ZXVlX3NldCAqcXMpXG4gXHRcdFx0aWYgKGlkcGZfcXVldWVfaGFzKFhEUCwgcS1cdTAwM2V0eHEpKSB7XG4gXHRcdFx0XHRxLVx1MDAzZXR4cS1cdTAwM2VwZW5kaW5nID0gMDtcbiBcdFx0XHRcdHEtXHUwMDNldHhxLVx1MDAzZXhkcF90eCA9IDA7XG4mIzQzO1xuJiM0MztcdFx0XHRcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmlkcGZfeGRwX2ZiKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHEtXHUwMDNldHhxKSkge1xuJiM0MztcdFx0XHRcdFx0Yml0bWFwX3plcm8ocS1cdTAwM2V0eHEtXHUwMDNlcGVuZGluZ19tYXNrLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgcS1cdTAwM2V0eHEtXHUwMDNlZGVzY19jb3VudCk7XG4mIzQzO1x0XHRcdFx0XHRxLVx1MDAzZXR4cS1cdTAwM2VsYXN0X250dSA9IDA7XG4mIzQzO1x0XHRcdFx0fVxuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRxLVx1MDAzZXR4cS1cdTAwM2V0eHFfZ3JwLVx1MDAzZW51bV9jb21wbGV0aW9uc19wZW5kaW5nID0gMDtcbiBcdFx0XHR9XG5AQCAtMTMxNyw3ICYjNDM7MTMyNCw4IEBAIHN0YXRpYyB2b2lkIGlkcGZfdHhxX2dyb3VwX3JlbChzdHJ1Y3QgaWRwZl9xX3ZlY19yc3JjICpyc3JjKVxuIFx0XHRcdGlmICghdHhxX2dycC1cdTAwM2V0eHFzW2pdKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0aWYgKGlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCB0eHFfZ3JwLVx1MDAzZXR4cXNbal0pKSB7XG4mIzQzO1x0XHRcdGlmIChpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgdHhxX2dycC1cdTAwM2V0eHFzW2pdKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgICFpZHBmX3F1ZXVlX2hhcyhYRFAsIHR4cV9ncnAtXHUwMDNldHhxc1tqXSkpIHtcbiBcdFx0XHRcdGtmcmVlKHR4cV9ncnAtXHUwMDNldHhxc1tqXS1cdTAwM2VyZWZpbGxxKTtcbiBcdFx0XHRcdHR4cV9ncnAtXHUwMDNldHhxc1tqXS1cdTAwM2VyZWZpbGxxID0gTlVMTDtcbiBcdFx0XHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmhcbmluZGV4IDkzNTQ3NTk3ZWZkMmEuLmRjZTA3ZmJiNmU3NzMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oXG5AQCAtNjI1LDEyICYjNDM7NjI1LDE0IEBAIGxpYmV0aF9jYWNoZWxpbmVfc2V0X2Fzc2VydChzdHJ1Y3QgaWRwZl9yeF9xdWV1ZSxcbiAgKiBAY2xlYW5fYnVkZ2V0OiBzaW5nbGVxIG9ubHksIHF1ZXVlIGNsZWFuaW5nIGJ1ZGdldFxuICAqIEBjbGVhbmVkX3BrdHM6IE51bWJlciBvZiBwYWNrZXRzIGNsZWFuZWQgZm9yIHRoZSBhYm92ZSBzYWlkIGNhc2VcbiAgKiBAcmVmaWxscTogUG9pbnRlciB0byByZWZpbGwgcXVldWVcbiYjNDM7ICogQGNhY2hlZF90c3RhbXBfY2FwczogVHggdGltZXN0YW1wIGNhcGFiaWxpdGllcyBuZWdvdGlhdGVkIHdpdGggdGhlIENQXG4mIzQzOyAqIEB0c3RhbXBfdGFzazogV29yayB0aGF0IGhhbmRsZXMgVHggdGltZXN0YW1wIHJlYWRcbiAgKiBAcGVuZGluZzogbnVtYmVyIG9mIHBlbmRpbmcgZGVzY3JpcHRvcnMgdG8gc2VuZCBpbiBRQlxuICAqIEB4ZHBfdHg6IG51bWJlciBvZiBwZW5kaW5nIFx1MDAyNnhkcF9idWZmIG9yIFx1MDAyNnhkcF9mcmFtZSBidWZmZXJzXG4gICogQHRpbWVyOiB0aW1lciBmb3IgWERQIFR4IHF1ZXVlIGNsZWFudXBcbiAgKiBAeGRwX2xvY2s6IGxvY2sgZm9yIFhEUCBUeCBxdWV1ZXMgc2hhcmluZ1xuLSAqIEBjYWNoZWRfdHN0YW1wX2NhcHM6IFR4IHRpbWVzdGFtcCBjYXBhYmlsaXRpZXMgbmVnb3RpYXRlZCB3aXRoIHRoZSBDUFxuLSAqIEB0c3RhbXBfdGFzazogV29yayB0aGF0IGhhbmRsZXMgVHggdGltZXN0YW1wIHJlYWRcbiYjNDM7ICogQHBlbmRpbmdfbWFzazogbWFzayBvZiBidWZmZXJzIHdhaXRpbmcgZm9yIGNvbXBsZXRpb24gaW4gdGhlIEZCIFhEUCBtb2RlXG4mIzQzOyAqIEBsYXN0X250dTogQG5leHRfdG9fdXNlIGZyb20gdGhlIHByZXZpb3VzIGJhdGNoIGluIHRoZSBGQiBYRFAgbW9kZVxuICAqIEBzdGF0c19zeW5jOiBTZWUgc3RydWN0IHU2NF9zdGF0c19zeW5jXG4gICogQHFfc3RhdHM6IFNlZSB1bmlvbiBpZHBmX3R4X3F1ZXVlX3N0YXRzXG4gICogQHFfaWQ6IFF1ZXVlIGlkXG5AQCAtNjg5LDYgJiM0Mzs2OTEsOSBAQCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSB7XG4gXHRcdFx0dTE2IGNsZWFuZWRfcGt0cztcbiBcbiBcdFx0XHRzdHJ1Y3QgaWRwZl9zd19xdWV1ZSAqcmVmaWxscTtcbiYjNDM7XG4mIzQzO1x0XHRcdHN0cnVjdCBpZHBmX3B0cF92cG9ydF90eF90c3RhbXBfY2FwcyAqY2FjaGVkX3RzdGFtcF9jYXBzO1xuJiM0MztcdFx0XHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnRzdGFtcF90YXNrO1xuIFx0XHR9O1xuIFx0XHRzdHJ1Y3Qge1xuIFx0XHRcdHUzMiBwZW5kaW5nO1xuQEAgLTY5NiwxMiAmIzQzOzcwMSwxMiBAQCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSB7XG4gXG4gXHRcdFx0c3RydWN0IGxpYmV0aF94ZHBzcV90aW1lciAqdGltZXI7XG4gXHRcdFx0c3RydWN0IGxpYmV0aF94ZHBzcV9sb2NrIHhkcF9sb2NrO1xuJiM0MztcbiYjNDM7XHRcdFx0dW5zaWduZWQgbG9uZyAqcGVuZGluZ19tYXNrO1xuJiM0MztcdFx0XHR1MzIgbGFzdF9udHU7XG4gXHRcdH07XG4gXHR9O1xuIFxuLVx0c3RydWN0IGlkcGZfcHRwX3Zwb3J0X3R4X3RzdGFtcF9jYXBzICpjYWNoZWRfdHN0YW1wX2NhcHM7XG4tXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnRzdGFtcF90YXNrO1xuLVxuIFx0c3RydWN0IHU2NF9zdGF0c19zeW5jIHN0YXRzX3N5bmM7XG4gXHRzdHJ1Y3QgaWRwZl90eF9xdWV1ZV9zdGF0cyBxX3N0YXRzO1xuIFx0X19jYWNoZWxpbmVfZ3JvdXBfZW5kX2FsaWduZWQocmVhZF93cml0ZSk7XG5AQCAtNzE4LDggJiM0Mzs3MjMsNyBAQCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSB7XG4gXHRfX2NhY2hlbGluZV9ncm91cF9lbmRfYWxpZ25lZChjb2xkKTtcbiB9O1xuIGxpYmV0aF9jYWNoZWxpbmVfc2V0X2Fzc2VydChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgNjQsXG4tXHRcdFx0ICAgIDEwNCAmIzQzO1xuLVx0XHRcdCAgICBvZmZzZXRvZihzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgY2FjaGVkX3RzdGFtcF9jYXBzKSAtXG4mIzQzO1x0XHRcdCAgICA5NiAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgdHN0YW1wX3Rhc2spIC1cbiBcdFx0XHQgICAgb2Zmc2V0b2ZlbmQoc3RydWN0IGlkcGZfdHhfcXVldWUsIHRpbWVyKSAmIzQzO1xuIFx0XHRcdCAgICBvZmZzZXRvZihzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgcV9zdGF0cykgLVxuIFx0XHRcdCAgICBvZmZzZXRvZmVuZChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgdHN0YW1wX3Rhc2spLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL3hkcC5jXG5pbmRleCBjYmNjZDQ1NDY3NjgxLi5jNzcxNjYzNjc3YTUyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuY1xuQEAgLTcsNiAmIzQzOzcsOCBAQFxuICNpbmNsdWRlIFwmIzM0O3hkcC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7eHNrLmhcJiMzNDtcbiBcbiYjNDM7REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoaWRwZl94ZHBfZmIpO1xuJiM0MztcbiBzdGF0aWMgaW50IGlkcGZfcnhxX2Zvcl9lYWNoKGNvbnN0IHN0cnVjdCBpZHBmX3FfdmVjX3JzcmMgKnJzcmMsXG4gXHRcdFx0ICAgICBpbnQgKCpmbikoc3RydWN0IGlkcGZfcnhfcXVldWUgKnJ4cSwgdm9pZCAqYXJnKSxcbiBcdFx0XHQgICAgIHZvaWQgKmFyZylcbkBAIC0xNDksMTAgJiM0MzsxNTEsMTIgQEAgdm9pZCBpZHBmX3hkcF9jb3B5X3Byb2dfdG9fcnFzKGNvbnN0IHN0cnVjdCBpZHBmX3FfdmVjX3JzcmMgKnJzcmMsXG4gXG4gc3RhdGljIHZvaWQgaWRwZl94ZHBfdHhfdGltZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiBcbi1pbnQgaWRwZl94ZHBzcXNfZ2V0KGNvbnN0IHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydClcbiYjNDM7aW50IGlkcGZfeGRwc3FzX2dldChzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpXG4ge1xuIFx0c3RydWN0IGxpYmV0aF94ZHBzcV90aW1lciAqKnRpbWVycyBfX2ZyZWUoa3ZmcmVlKSA9IE5VTEw7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgKiptYXNrcyBfX2ZyZWUoa3ZmcmVlKSA9IE5VTEw7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiYjNDM7XHRib29sIHdhcm47XG4gXHR1MzIgc3FzO1xuIFxuIFx0aWYgKCFpZHBmX3hkcF9lbmFibGVkKHZwb3J0KSlcbkBAIC0xNzYsNiAmIzQzOzE4MCwzNCBAQCBpbnQgaWRwZl94ZHBzcXNfZ2V0KGNvbnN0IHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydClcbiBcdGRldiA9IHZwb3J0LVx1MDAzZW5ldGRldjtcbiBcdHNxcyA9IHZwb3J0LVx1MDAzZWRmbHRfcXZfcnNyYy54ZHBfdHhxX29mZnNldDtcbiBcbiYjNDM7XHR2cG9ydC1cdTAwM2V4ZHBzcV9mYiA9ICFpZHBmX2lzX2NhcF9lbmEodnBvcnQtXHUwMDNlYWRhcHRlciwgSURQRl9PVEhFUl9DQVBTLFxuJiM0MztcdFx0XHRcdFx0ICAgVklSVENITkwyX0NBUF9TUExJVFFfUVNDSEVEKTtcbiYjNDM7XHRpZiAoIXZwb3J0LVx1MDAzZXhkcHNxX2ZiKVxuJiM0MztcdFx0Z290byBzZXR1cDtcbiYjNDM7XG4mIzQzO1x0bWFza3MgPSBrdnphbGxvY19vYmpzKCptYXNrcywgdnBvcnQtXHUwMDNlbnVtX3hkcF90eHEpO1xuJiM0MztcdGlmICghbWFza3MpXG4mIzQzO1x0XHRnb3RvIGVycl9tYXNrcztcbiYjNDM7XG4mIzQzO1x0Zm9yICh1MzIgaSA9IDA7IGkgXHUwMDNjIHZwb3J0LVx1MDAzZW51bV94ZHBfdHhxOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0bWFza3NbaV0gPSBiaXRtYXBfemFsbG9jX25vZGUodnBvcnQtXHUwMDNldHhxc1tzcXMgJiM0MzsgaV0tXHUwMDNlZGVzY19jb3VudCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIEdGUF9LRVJORUwsIGNwdV90b19tZW0oaSkpO1xuJiM0MztcdFx0aWYgKCFtYXNrc1tpXSkge1xuJiM0MztcdFx0XHRmb3IgKGludCBqID0gaSAtIDE7IGogXHUwMDNlPSAwOyBqLS0pXG4mIzQzO1x0XHRcdFx0Yml0bWFwX2ZyZWUobWFza3Nbal0pO1xuJiM0MztcbiYjNDM7XHRcdFx0Z290byBlcnJfbWFza3M7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR3YXJuID0gIXN0YXRpY19rZXlfZW5hYmxlZChcdTAwMjZpZHBmX3hkcF9mYik7XG4mIzQzO1x0c3RhdGljX2JyYW5jaF9pbmMoXHUwMDI2aWRwZl94ZHBfZmIpO1xuJiM0MztcbiYjNDM7XHRpZiAod2FybiBcdTAwMjZcdTAwMjYgbmV0X3JhdGVsaW1pdCgpKVxuJiM0MztcdFx0bmV0ZGV2X3dhcm4oZGV2LFxuJiM0MztcdFx0XHQgICAgXCYjMzQ7VGhlIEZXIGRvZXNuJiMzOTt0IHN1cHBvcnQgVHggaW4gRklGTyBtb2RlLCBYRFAgVHggcGVyZm9ybWFuY2UgbWlnaHQgYmUgc3Vib3B0aW1hbFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztzZXR1cDpcbiBcdGZvciAodTMyIGkgPSBzcXM7IGkgXHUwMDNjIHZwb3J0LVx1MDAzZW51bV90eHE7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp4ZHBzcSA9IHZwb3J0LVx1MDAzZXR4cXNbaV07XG4gXG5AQCAtMTgzLDggJiM0MzsyMTUsOCBAQCBpbnQgaWRwZl94ZHBzcXNfZ2V0KGNvbnN0IHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydClcbiBcdFx0a2ZyZWUoeGRwc3EtXHUwMDNlcmVmaWxscSk7XG4gXHRcdHhkcHNxLVx1MDAzZXJlZmlsbHEgPSBOVUxMO1xuIFxuLVx0XHRpZHBmX3F1ZXVlX2NsZWFyKEZMT1dfU0NIX0VOLCB4ZHBzcSk7XG4tXHRcdGlkcGZfcXVldWVfY2xlYXIoRkxPV19TQ0hfRU4sIHhkcHNxLVx1MDAzZWNvbXBscSk7XG4mIzQzO1x0XHRpZHBmX3F1ZXVlX2Fzc2lnbihGTE9XX1NDSF9FTiwgeGRwc3EsIHZwb3J0LVx1MDAzZXhkcHNxX2ZiKTtcbiYjNDM7XHRcdGlkcGZfcXVldWVfYXNzaWduKEZMT1dfU0NIX0VOLCB4ZHBzcS1cdTAwM2Vjb21wbHEsIHZwb3J0LVx1MDAzZXhkcHNxX2ZiKTtcbiBcdFx0aWRwZl9xdWV1ZV9zZXQoTk9JUlEsIHhkcHNxKTtcbiBcdFx0aWRwZl9xdWV1ZV9zZXQoWERQLCB4ZHBzcSk7XG4gXHRcdGlkcGZfcXVldWVfc2V0KFhEUCwgeGRwc3EtXHUwMDNlY29tcGxxKTtcbkBAIC0xOTcsMTIgJiM0MzsyMjksMjUgQEAgaW50IGlkcGZfeGRwc3FzX2dldChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpXG4gXHRcdHhkcHNxLVx1MDAzZXBlbmRpbmcgPSAwO1xuIFx0XHR4ZHBzcS1cdTAwM2V4ZHBfdHggPSAwO1xuIFx0XHR4ZHBzcS1cdTAwM2V0aHJlc2ggPSBsaWJldGhfeGRwX3F1ZXVlX3RocmVzaG9sZCh4ZHBzcS1cdTAwM2VkZXNjX2NvdW50KTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZpZHBmX3hkcF9mYikgXHUwMDI2XHUwMDI2IHZwb3J0LVx1MDAzZXhkcHNxX2ZiKSB7XG4mIzQzO1x0XHRcdHhkcHNxLVx1MDAzZXBlbmRpbmdfbWFzayA9IG1hc2tzW2kgLSBzcXNdO1xuJiM0MztcdFx0XHR4ZHBzcS1cdTAwM2VsYXN0X250dSA9IDA7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9tYXNrczpcbiYjNDM7XHR2cG9ydC1cdTAwM2V4ZHBzcV9mYiA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRmb3IgKHUzMiBpID0gMDsgaSBcdTAwM2MgdnBvcnQtXHUwMDNlbnVtX3hkcF90eHE7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0a2ZyZWUodGltZXJzW2ldKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FTk9NRU07XG4gfVxuIFxuLXZvaWQgaWRwZl94ZHBzcXNfcHV0KGNvbnN0IHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydClcbiYjNDM7dm9pZCBpZHBmX3hkcHNxc19wdXQoc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KVxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gXHR1MzIgc3FzO1xuQEAgLTIyMiwxMCAmIzQzOzI2NywyMyBAQCB2b2lkIGlkcGZfeGRwc3FzX3B1dChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpXG4gXHRcdGxpYmV0aF94ZHBzcV9kZWluaXRfdGltZXIoeGRwc3EtXHUwMDNldGltZXIpO1xuIFx0XHRsaWJldGhfeGRwc3FfcHV0KFx1MDAyNnhkcHNxLVx1MDAzZXhkcF9sb2NrLCBkZXYpO1xuIFxuJiM0MztcdFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2aWRwZl94ZHBfZmIpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCB4ZHBzcSkpIHtcbiYjNDM7XHRcdFx0Yml0bWFwX2ZyZWUoeGRwc3EtXHUwMDNlcGVuZGluZ19tYXNrKTtcbiYjNDM7XHRcdFx0eGRwc3EtXHUwMDNlcGVuZGluZ19tYXNrID0gTlVMTDtcbiYjNDM7XHRcdFx0eGRwc3EtXHUwMDNlbGFzdF9udHUgPSAwO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0a2ZyZWUoeGRwc3EtXHUwMDNldGltZXIpO1xuIFx0XHR4ZHBzcS1cdTAwM2VyZWZpbGxxID0gTlVMTDtcbiBcdFx0aWRwZl9xdWV1ZV9jbGVhcihOT0lSUSwgeGRwc3EpO1xuIFx0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXZwb3J0LVx1MDAzZXhkcHNxX2ZiKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzdGF0aWNfYnJhbmNoX2RlYyhcdTAwMjZpZHBmX3hkcF9mYik7XG4mIzQzO1x0dnBvcnQtXHUwMDNleGRwc3FfZmIgPSBmYWxzZTtcbiB9XG4gXG4gc3RhdGljIGludCBpZHBmX3hkcF9wYXJzZV9jcWUoY29uc3Qgc3RydWN0IGlkcGZfc3BsaXRxXzRiX3R4X2NvbXBsX2Rlc2MgKmRlc2MsXG5AQCAtMjUwLDYgJiM0MzszMDgsNjUgQEAgc3RhdGljIGludCBpZHBmX3hkcF9wYXJzZV9jcWUoY29uc3Qgc3RydWN0IGlkcGZfc3BsaXRxXzRiX3R4X2NvbXBsX2Rlc2MgKmRlc2MsXG4gXHRyZXR1cm4gdXBwZXJfMTZfYml0cyh2YWwpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHUzMiBpZHBmX3hkcHNxX3BvbGxfZmIoc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxLCB1MzIgYnVkZ2V0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlkcGZfY29tcGxfcXVldWUgKmNxID0geGRwc3EtXHUwMDNlY29tcGxxO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgKm1hc2sgPSB4ZHBzcS1cdTAwM2VwZW5kaW5nX21hc2s7XG4mIzQzO1x0dTMyIGRvbmVfZnJhbWVzLCB0eF9jbnQsIG5ld19udGM7XG4mIzQzO1x0dTMyIG50YyA9IGNxLVx1MDAzZW5leHRfdG9fY2xlYW47XG4mIzQzO1x0dTMyIGNudCA9IGNxLVx1MDAzZWRlc2NfY291bnQ7XG4mIzQzO1x0Ym9vbCBnZW47XG4mIzQzO1xuJiM0MztcdGdlbiA9IGlkcGZfcXVldWVfaGFzKEdFTl9DSEssIGNxKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChkb25lX2ZyYW1lcyA9IDA7IGRvbmVfZnJhbWVzIFx1MDAzYyBidWRnZXQ7ICkge1xuJiM0MztcdFx0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBpZHBmX3hkcF9wYXJzZV9jcWUoXHUwMDI2Y3EtXHUwMDNlY29tcFtudGNdLmNvbW1vbiwgZ2VuKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNlPSAwKSB7XG4mIzQzO1x0XHRcdF9fY2xlYXJfYml0KHJldCwgbWFzayk7XG4mIzQzO1x0XHRcdGRvbmVfZnJhbWVzJiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0XHRcdGdvdG8gbmV4dDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRzd2l0Y2ggKHJldCkge1xuJiM0MztcdFx0Y2FzZSAtRU5PREFUQTpcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRjYXNlIC1FSU5WQUw6XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7bmV4dDpcbiYjNDM7XHRcdGlmICh1bmxpa2VseSgmIzQzOyYjNDM7bnRjID09IGNudCkpIHtcbiYjNDM7XHRcdFx0bnRjID0gMDtcbiYjNDM7XHRcdFx0Z2VuID0gIWdlbjtcbiYjNDM7XHRcdFx0aWRwZl9xdWV1ZV9jaGFuZ2UoR0VOX0NISywgY3EpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRjcS1cdTAwM2VuZXh0X3RvX2NsZWFuID0gbnRjO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkoIWRvbmVfZnJhbWVzKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHR0eF9jbnQgPSB4ZHBzcS1cdTAwM2VkZXNjX2NvdW50O1xuJiM0MztcbiYjNDM7XHQvKiBEb24mIzM5O3QgZ28gcGFzdCBuZXh0X3RvX3VzZSAqL1xuJiM0MztcdF9fc2V0X2JpdCh4ZHBzcS1cdTAwM2VuZXh0X3RvX3VzZSwgbWFzayk7XG4mIzQzO1xuJiM0MztcdG5ld19udGMgPSBmaW5kX25leHRfYml0KG1hc2ssIHR4X2NudCwgeGRwc3EtXHUwMDNlbmV4dF90b19jbGVhbik7XG4mIzQzO1x0ZG9uZV9mcmFtZXMgPSBuZXdfbnRjIC0geGRwc3EtXHUwMDNlbmV4dF90b19jbGVhbjtcbiYjNDM7XG4mIzQzO1x0aWYgKG5ld19udGMgPT0gdHhfY250KVxuJiM0MztcdFx0ZG9uZV9mcmFtZXMgJiM0Mzs9IGZpbmRfZmlyc3RfYml0KG1hc2ssIHR4X2NudCk7XG4mIzQzO1xuJiM0MztcdF9fY2xlYXJfYml0KHhkcHNxLVx1MDAzZW5leHRfdG9fdXNlLCBtYXNrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGRvbmVfZnJhbWVzO1xuJiM0Mzt9XG4mIzQzO1xuIHUzMiBpZHBmX3hkcHNxX3BvbGwoc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxLCB1MzIgYnVkZ2V0KVxuIHtcbiBcdHN0cnVjdCBpZHBmX2NvbXBsX3F1ZXVlICpjcSA9IHhkcHNxLVx1MDAzZWNvbXBscTtcbkBAIC0yNjAsNiAmIzQzOzM3NywxMCBAQCB1MzIgaWRwZl94ZHBzcV9wb2xsKHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp4ZHBzcSwgdTMyIGJ1ZGdldClcbiBcdHUzMiBkb25lX2ZyYW1lcztcbiBcdGJvb2wgZ2VuO1xuIFxuJiM0MztcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmlkcGZfeGRwX2ZiKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHhkcHNxKSlcbiYjNDM7XHRcdHJldHVybiBpZHBmX3hkcHNxX3BvbGxfZmIoeGRwc3EsIGJ1ZGdldCk7XG4mIzQzO1xuIFx0Z2VuID0gaWRwZl9xdWV1ZV9oYXMoR0VOX0NISywgY3EpO1xuIFxuIFx0Zm9yIChkb25lX2ZyYW1lcyA9IDA7IGRvbmVfZnJhbWVzIFx1MDAzYyBidWRnZXQ7ICkge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL3hkcC5oXG5pbmRleCA2M2U1NmY3ZDQzZTAwLi45NWU0N2VhMmNjYmE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuaFxuQEAgLTgsNiAmIzQzOzgsMTAgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDtpZHBmX3R4cnguaFwmIzM0O1xuIFxuJiM0MztzdHJ1Y3QgaWRwZl9xX3ZlY19yc3JjO1xuJiM0MztcbiYjNDM7REVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGlkcGZfeGRwX2ZiKTtcbiYjNDM7XG4gaW50IGlkcGZfeGRwX3J4cV9pbmZvX2luaXQoc3RydWN0IGlkcGZfcnhfcXVldWUgKnJ4cSk7XG4gaW50IGlkcGZfeGRwX3J4cV9pbmZvX2luaXRfYWxsKGNvbnN0IHN0cnVjdCBpZHBmX3FfdmVjX3JzcmMgKnJzcmMpO1xuIHZvaWQgaWRwZl94ZHBfcnhxX2luZm9fZGVpbml0KHN0cnVjdCBpZHBmX3J4X3F1ZXVlICpyeHEsIHUzMiBtb2RlbCk7XG5AQCAtMTUsMTIgJiM0MzsxOSw0MCBAQCB2b2lkIGlkcGZfeGRwX3J4cV9pbmZvX2RlaW5pdF9hbGwoY29uc3Qgc3RydWN0IGlkcGZfcV92ZWNfcnNyYyAqcnNyYyk7XG4gdm9pZCBpZHBmX3hkcF9jb3B5X3Byb2dfdG9fcnFzKGNvbnN0IHN0cnVjdCBpZHBmX3FfdmVjX3JzcmMgKnJzcmMsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2cpO1xuIFxuLWludCBpZHBmX3hkcHNxc19nZXQoY29uc3Qgc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KTtcbi12b2lkIGlkcGZfeGRwc3FzX3B1dChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpO1xuJiM0MztpbnQgaWRwZl94ZHBzcXNfZ2V0KHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCk7XG4mIzQzO3ZvaWQgaWRwZl94ZHBzcXNfcHV0KHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCk7XG4gXG4gdTMyIGlkcGZfeGRwc3FfcG9sbChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EsIHUzMiBidWRnZXQpO1xuIGJvb2wgaWRwZl94ZHBfdHhfZmx1c2hfYnVsayhzdHJ1Y3QgbGliZXRoX3hkcF90eF9idWxrICpicSwgdTMyIGZsYWdzKTtcbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwX3R4X3htaXRfZmIoc3RydWN0IGxpYmV0aF94ZHBfdHhfZGVzYyBkZXNjLCB1MzIgaSxcbiYjNDM7XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGxpYmV0aF94ZHBzcSAqc3EsIHU2NCBwcml2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlkcGZfZmxleF90eF9zY2hlZF9kZXNjICp0eF9kZXNjID0gc3EtXHUwMDNlZGVzY3M7XG4mIzQzO1x0dTMyIGNtZDtcbiYjNDM7XG4mIzQzO1x0Y21kID0gRklFTERfUFJFUChJRFBGX1RYRF9GTEVYX0ZMT1dfRFRZUEVfTSxcbiYjNDM7XHRcdFx0IElEUEZfVFhfREVTQ19EVFlQRV9GTEVYX0ZMT1dfU0NIRSk7XG4mIzQzO1x0aWYgKGRlc2MuZmxhZ3MgXHUwMDI2IExJQkVUSF9YRFBfVFhfTEFTVClcbiYjNDM7XHRcdGNtZCB8PSBJRFBGX1RYRF9GTEVYX0ZMT1dfQ01EX0VPUDtcbiYjNDM7XHRpZiAocHJpdiBcdTAwMjZcdTAwMjYgKGRlc2MuZmxhZ3MgXHUwMDI2IExJQkVUSF9YRFBfVFhfQ1NVTSkpXG4mIzQzO1x0XHRjbWQgfD0gSURQRl9UWERfRkxFWF9GTE9XX0NNRF9DU19FTjtcbiYjNDM7XG4mIzQzO1x0dHhfZGVzYyA9IFx1MDAyNnR4X2Rlc2NbaV07XG4mIzQzO1x0dHhfZGVzYy1cdTAwM2VidWZfYWRkciA9IGNwdV90b19sZTY0KGRlc2MuYWRkcik7XG4mIzQzO1xuJiM0MzsjaWZkZWYgX19MSUJFVEhfV09SRF9BQ0NFU1NcbiYjNDM7XHQqKHU2NCAqKVx1MDAyNnR4X2Rlc2MtXHUwMDNlcXcxID0gKCh1NjQpZGVzYy5sZW4gXHUwMDNjXHUwMDNjIDQ4KSB8ICgodTY0KWkgXHUwMDNjXHUwMDNjIDMyKSB8IGNtZDtcbiYjNDM7I2Vsc2VcbiYjNDM7XHR0eF9kZXNjLVx1MDAzZXF3MS5yeHJfYnVmc2l6ZSA9IGNwdV90b19sZTE2KGRlc2MubGVuKTtcbiYjNDM7XHR0eF9kZXNjLVx1MDAzZXF3MS5jb21wbF90YWcgPSBjcHVfdG9fbGUxNihpKTtcbiYjNDM7XHR0eF9kZXNjLVx1MDAzZXF3MS50c1swXSA9IDA7XG4mIzQzO1x0dHhfZGVzYy1cdTAwM2VxdzEudHNbMV0gPSAwO1xuJiM0MztcdHR4X2Rlc2MtXHUwMDNlcXcxLnRzWzJdID0gMDtcbiYjNDM7XHR0eF9kZXNjLVx1MDAzZXF3MS5jbWRfZHR5cGUgPSBjbWQ7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGlkcGZfeGRwX3R4X3htaXQgLSBwcm9kdWNlIGEgc2luZ2xlIEhXIFR4IGRlc2NyaXB0b3Igb3V0IG9mIFhEUCBkZXNjXG4gICogQGRlc2M6IFhEUCBkZXNjcmlwdG9yIHRvIHB1bGwgdGhlIERNQSBhZGRyZXNzIGFuZCBsZW5ndGggZnJvbVxuQEAgLTM0LDYgJiM0Mzs2NiwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBfdHhfeG1pdChzdHJ1Y3QgbGliZXRoX3hkcF90eF9kZXNjIGRlc2MsIHUzMiBpLFxuIFx0c3RydWN0IGlkcGZfZmxleF90eF9kZXNjICp0eF9kZXNjID0gc3EtXHUwMDNlZGVzY3M7XG4gXHR1MzIgY21kO1xuIFxuJiM0MztcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmlkcGZfeGRwX2ZiKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sXG4mIzQzO1x0XHRcdCAgIGxpYmV0aF94ZHBzcV90b19zcShzcSwgc3RydWN0IGlkcGZfdHhfcXVldWUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBuZXh0X3RvX3VzZSkpKSB7XG4mIzQzO1x0XHRpZHBmX3hkcF90eF94bWl0X2ZiKGRlc2MsIGksIHNxLCBwcml2KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0Y21kID0gRklFTERfUFJFUChJRFBGX0ZMRVhfVFhEX1FXMV9EVFlQRV9NLFxuIFx0XHRcdCBJRFBGX1RYX0RFU0NfRFRZUEVfRkxFWF9MMlRBRzFfTDJUQUcyKTtcbiBcdGlmIChkZXNjLmZsYWdzIFx1MDAyNiBMSUJFVEhfWERQX1RYX0xBU1QpXG5AQCAtNTMsMTIgJiM0Mzs5MywzNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBfdHhfeG1pdChzdHJ1Y3QgbGliZXRoX3hkcF90eF9kZXNjIGRlc2MsIHUzMiBpLFxuICNlbmRpZlxuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBzcV9zZXRfcnMoY29uc3Qgc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxKVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBzcV9zZXRfcnNfZmIoc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIG50dSA9IHhkcHNxLVx1MDAzZW5leHRfdG9fdXNlO1xuJiM0MztcdHUzMiBvbGQgPSB4ZHBzcS1cdTAwM2VsYXN0X250dTtcbiYjNDM7XG4mIzQzO1x0aWYgKG9sZCBcdTAwM2UgbnR1KSB7XG4mIzQzO1x0XHRiaXRtYXBfc2V0KHhkcHNxLVx1MDAzZXBlbmRpbmdfbWFzaywgb2xkLCB4ZHBzcS1cdTAwM2VkZXNjX2NvdW50IC0gb2xkKTtcbiYjNDM7XHRcdGlmIChudHUpXG4mIzQzO1x0XHRcdGJpdG1hcF9zZXQoeGRwc3EtXHUwMDNlcGVuZGluZ19tYXNrLCAwLCBudHUpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRiaXRtYXBfc2V0KHhkcHNxLVx1MDAzZXBlbmRpbmdfbWFzaywgb2xkLCBudHUgLSBvbGQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0eGRwc3EtXHUwMDNlbGFzdF9udHUgPSBudHU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBpZHBmX3hkcHNxX3NldF9ycyhzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EpXG4ge1xuIFx0dTMyIG50dSwgY21kO1xuIFxuJiM0MztcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmlkcGZfeGRwX2ZiKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHhkcHNxKSkge1xuJiM0MztcdFx0aWRwZl94ZHBzcV9zZXRfcnNfZmIoeGRwc3EpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRudHUgPSB4ZHBzcS1cdTAwM2VuZXh0X3RvX3VzZTtcbi1cdGlmICh1bmxpa2VseSghbnR1KSlcbiYjNDM7XHRpZiAoIW50dSlcbiBcdFx0bnR1ID0geGRwc3EtXHUwMDNlZGVzY19jb3VudDtcbiBcbiBcdGNtZCA9IEZJRUxEX1BSRVAoSURQRl9GTEVYX1RYRF9RVzFfQ01EX00sIElEUEZfVFhfREVTQ19DTURfUlMpO1xuQEAgLTg0LDcgJiM0MzsxNDYsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBzcV91cGRhdGVfdGFpbChjb25zdCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EpXG4gICogU2V0IHRoZSBSUyBiaXQgKFwmIzM0O2VuZCBvZiBiYXRjaFwmIzM0OyksIGJ1bXAgdGhlIHRhaWwsIGFuZCBxdWV1ZSB0aGUgY2xlYW51cCB0aW1lci5cbiAgKiBUbyBiZSBjYWxsZWQgYWZ0ZXIgYSBOQVBJIHBvbGxpbmcgbG9vcCwgYXQgdGhlIGVuZCBvZiAubmRvX3hkcF94bWl0KCkgZXRjLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcF90eF9maW5hbGl6ZSh2b2lkICpfeGRwc3EsIGJvb2wgc2VudCwgYm9vbCBmbHVzaClcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGlkcGZfeGRwX3R4X2ZpbmFsaXplKHZvaWQgKl94ZHBzcSwgYm9vbCBzZW50LFxuJiM0MztcdFx0XHRcdFx0XHQgYm9vbCBmbHVzaClcbiB7XG4gXHRzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EgPSBfeGRwc3E7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbGliZXRoL3hkcC5oIGIvaW5jbHVkZS9uZXQvbGliZXRoL3hkcC5oXG5pbmRleCA4OTg3MjNhYjYyZTgxLi5lZDYxZDgzYmRhMmQ3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbGliZXRoL3hkcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9saWJldGgveGRwLmhcbkBAIC00MzAsNiAmIzQzOzQzMCwxOSBAQCBzdHJ1Y3QgbGliZXRoX3hkcHNxIHtcbiBcdHN0cnVjdCBsaWJldGhfeGRwc3FfbG9ja1x0KmxvY2s7XG4gfTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGxpYmV0aF94ZHBzcV90b19zcSAtIGdldCBTUSBwb2ludGVyIGZyb20gYW4gWERQU1EgcG9pbnRlclxuJiM0MzsgKiBAeGRwc3E6IFx1MDAyNmxpYmV0aF94ZHBzcSBjb3JyZXNwb25kaW5nIHRvIHRoZSBxdWV1ZVxuJiM0MzsgKiBAdHlwZTogdHlwZW9mKCkgb2YgdGhlIGRyaXZlciBUeCBxdWV1ZSBzdHJ1Y3R1cmVcbiYjNDM7ICogQG1lbWJlcjogbmFtZSBvZiB0aGUgTlRVIGZpZWxkIGluc2lkZSBAdHlwZVxuJiM0MzsgKlxuJiM0MzsgKiBTb21lIG9mIHRoZSBzZW5kaW5nIGNhbGxiYWNrcyB0YWtlIG9ubHkgXHUwMDI2bGliZXRoX3hkcHNxIHBvaW50ZXIgYW5kIG5vIHBvaW50ZXJcbiYjNDM7ICogdG8gdGhlIGFjdHVhbCBkcml2ZXIgVHggcXVldWUgc3RydWN0dXJlLiBVc2UgdGhpcyBoZWxwZXIgdG8gcXVpY2tseSBqdW1wIHRvXG4mIzQzOyAqIHRoZSBsYXR0ZXIgd2hlbiBuZWVkZWQuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIGxpYmV0aF94ZHBzcV90b19zcSh4ZHBzcSwgdHlwZSwgbWVtYmVyKVx0XHRcdFx0ICAgICAgXFxcbiYjNDM7XHRjb250YWluZXJfb2ZfY29uc3QoKHhkcHNxKS1cdTAwM2VudHUsIHR5cGUsIG1lbWJlcilcbiYjNDM7XG4gLyoqXG4gICogc3RydWN0IGxpYmV0aF94ZHBfdHhfZGVzYyAtIGFic3RyYWN0aW9uIGZvciBhbiBYRFAgVHggZGVzY3JpcHRvclxuICAqIEBhZGRyOiBETUEgYWRkcmVzcyBvZiB0aGUgZnJhbWVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbiAoaWRwZikgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIFNtYXJ0TklDL0lQVSBkcml2ZXIuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIG1ha2luZyBpdCB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiM2ZjYjY4YmM2MDczYjUwOGExYjZjNjI2NjgxNmZhYzBkNmY4ODRjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMTg6MDY6MDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oCmluZGV4IDQ3MGJjMjNjODQ0YzEuLjFlODk3ZTEzMWNiMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oCkBAIC0zODMsNiAmIzQzOzM4Myw3IEBAIHN0cnVjdCBpZHBmX3Zwb3J0IHsKIAlzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqKnR4cXM7CiAJdTE2IG51bV90eHE7CiAJdTE2IG51bV94ZHBfdHhxOwomIzQzOwlib29sIHhkcHNxX2ZiOwogCWJvb2wgeGRwc3Ffc2hhcmU7CiAJc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmMKaW5kZXggYzNmZmI0NDUyOTdmOC4uNzQzMzk1OTYyMDc3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jCkBAIC0yMjcsNyAmIzQzOzIyNyw3IEBAIHN0YXRpYyBpbnQgaWRwZl90eF9kZXNjX2FsbG9jKGNvbnN0IHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCwKIAogCWlkcGZfeHNrX3NldHVwX3F1ZXVlKHZwb3J0LCB0eF9xLCBWSVJUQ0hOTDJfUVVFVUVfVFlQRV9UWCk7CiAKLQlpZiAoIWlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCB0eF9xKSkKJiM0MzsJaWYgKCFpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgdHhfcSkgfHwgaWRwZl9xdWV1ZV9oYXMoWERQLCB0eF9xKSkKIAkJcmV0dXJuIDA7CiAKIAlyZWZpbGxxID0gdHhfcS0mZ3Q7cmVmaWxscTsKQEAgLTEwNTUsNiAmIzQzOzEwNTUsMTMgQEAgc3RhdGljIHZvaWQgaWRwZl9jbGVhbl9xdWV1ZV9zZXQoY29uc3Qgc3RydWN0IGlkcGZfcXVldWVfc2V0ICpxcykKIAkJCWlmIChpZHBmX3F1ZXVlX2hhcyhYRFAsIHEtJmd0O3R4cSkpIHsKIAkJCQlxLSZndDt0eHEtJmd0O3BlbmRpbmcgPSAwOwogCQkJCXEtJmd0O3R4cS0mZ3Q7eGRwX3R4ID0gMDsKJiM0MzsKJiM0MzsJCQkJaWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoJmFtcDtpZHBmX3hkcF9mYikgJmFtcDsmYW1wOwomIzQzOwkJCQkgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHEtJmd0O3R4cSkpIHsKJiM0MzsJCQkJCWJpdG1hcF96ZXJvKHEtJmd0O3R4cS0mZ3Q7cGVuZGluZ19tYXNrLAomIzQzOwkJCQkJCSAgICBxLSZndDt0eHEtJmd0O2Rlc2NfY291bnQpOwomIzQzOwkJCQkJcS0mZ3Q7dHhxLSZndDtsYXN0X250dSA9IDA7CiYjNDM7CQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJcS0mZ3Q7dHhxLSZndDt0eHFfZ3JwLSZndDtudW1fY29tcGxldGlvbnNfcGVuZGluZyA9IDA7CiAJCQl9CkBAIC0xMzE3LDcgJiM0MzsxMzI0LDggQEAgc3RhdGljIHZvaWQgaWRwZl90eHFfZ3JvdXBfcmVsKHN0cnVjdCBpZHBmX3FfdmVjX3JzcmMgKnJzcmMpCiAJCQlpZiAoIXR4cV9ncnAtJmd0O3R4cXNbal0pCiAJCQkJY29udGludWU7CiAKLQkJCWlmIChpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgdHhxX2dycC0mZ3Q7dHhxc1tqXSkpIHsKJiM0MzsJCQlpZiAoaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHR4cV9ncnAtJmd0O3R4cXNbal0pICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgIWlkcGZfcXVldWVfaGFzKFhEUCwgdHhxX2dycC0mZ3Q7dHhxc1tqXSkpIHsKIAkJCQlrZnJlZSh0eHFfZ3JwLSZndDt0eHFzW2pdLSZndDtyZWZpbGxxKTsKIAkJCQl0eHFfZ3JwLSZndDt0eHFzW2pdLSZndDtyZWZpbGxxID0gTlVMTDsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oCmluZGV4IDkzNTQ3NTk3ZWZkMmEuLmRjZTA3ZmJiNmU3NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaApAQCAtNjI1LDEyICYjNDM7NjI1LDE0IEBAIGxpYmV0aF9jYWNoZWxpbmVfc2V0X2Fzc2VydChzdHJ1Y3QgaWRwZl9yeF9xdWV1ZSwKICAqIEBjbGVhbl9idWRnZXQ6IHNpbmdsZXEgb25seSwgcXVldWUgY2xlYW5pbmcgYnVkZ2V0CiAgKiBAY2xlYW5lZF9wa3RzOiBOdW1iZXIgb2YgcGFja2V0cyBjbGVhbmVkIGZvciB0aGUgYWJvdmUgc2FpZCBjYXNlCiAgKiBAcmVmaWxscTogUG9pbnRlciB0byByZWZpbGwgcXVldWUKJiM0MzsgKiBAY2FjaGVkX3RzdGFtcF9jYXBzOiBUeCB0aW1lc3RhbXAgY2FwYWJpbGl0aWVzIG5lZ290aWF0ZWQgd2l0aCB0aGUgQ1AKJiM0MzsgKiBAdHN0YW1wX3Rhc2s6IFdvcmsgdGhhdCBoYW5kbGVzIFR4IHRpbWVzdGFtcCByZWFkCiAgKiBAcGVuZGluZzogbnVtYmVyIG9mIHBlbmRpbmcgZGVzY3JpcHRvcnMgdG8gc2VuZCBpbiBRQgogICogQHhkcF90eDogbnVtYmVyIG9mIHBlbmRpbmcgJmFtcDt4ZHBfYnVmZiBvciAmYW1wO3hkcF9mcmFtZSBidWZmZXJzCiAgKiBAdGltZXI6IHRpbWVyIGZvciBYRFAgVHggcXVldWUgY2xlYW51cAogICogQHhkcF9sb2NrOiBsb2NrIGZvciBYRFAgVHggcXVldWVzIHNoYXJpbmcKLSAqIEBjYWNoZWRfdHN0YW1wX2NhcHM6IFR4IHRpbWVzdGFtcCBjYXBhYmlsaXRpZXMgbmVnb3RpYXRlZCB3aXRoIHRoZSBDUAotICogQHRzdGFtcF90YXNrOiBXb3JrIHRoYXQgaGFuZGxlcyBUeCB0aW1lc3RhbXAgcmVhZAomIzQzOyAqIEBwZW5kaW5nX21hc2s6IG1hc2sgb2YgYnVmZmVycyB3YWl0aW5nIGZvciBjb21wbGV0aW9uIGluIHRoZSBGQiBYRFAgbW9kZQomIzQzOyAqIEBsYXN0X250dTogQG5leHRfdG9fdXNlIGZyb20gdGhlIHByZXZpb3VzIGJhdGNoIGluIHRoZSBGQiBYRFAgbW9kZQogICogQHN0YXRzX3N5bmM6IFNlZSBzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMKICAqIEBxX3N0YXRzOiBTZWUgdW5pb24gaWRwZl90eF9xdWV1ZV9zdGF0cwogICogQHFfaWQ6IFF1ZXVlIGlkCkBAIC02ODksNiAmIzQzOzY5MSw5IEBAIHN0cnVjdCBpZHBmX3R4X3F1ZXVlIHsKIAkJCXUxNiBjbGVhbmVkX3BrdHM7CiAKIAkJCXN0cnVjdCBpZHBmX3N3X3F1ZXVlICpyZWZpbGxxOwomIzQzOwomIzQzOwkJCXN0cnVjdCBpZHBmX3B0cF92cG9ydF90eF90c3RhbXBfY2FwcyAqY2FjaGVkX3RzdGFtcF9jYXBzOwomIzQzOwkJCXN0cnVjdCB3b3JrX3N0cnVjdCAqdHN0YW1wX3Rhc2s7CiAJCX07CiAJCXN0cnVjdCB7CiAJCQl1MzIgcGVuZGluZzsKQEAgLTY5NiwxMiAmIzQzOzcwMSwxMiBAQCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSB7CiAKIAkJCXN0cnVjdCBsaWJldGhfeGRwc3FfdGltZXIgKnRpbWVyOwogCQkJc3RydWN0IGxpYmV0aF94ZHBzcV9sb2NrIHhkcF9sb2NrOwomIzQzOwomIzQzOwkJCXVuc2lnbmVkIGxvbmcgKnBlbmRpbmdfbWFzazsKJiM0MzsJCQl1MzIgbGFzdF9udHU7CiAJCX07CiAJfTsKIAotCXN0cnVjdCBpZHBmX3B0cF92cG9ydF90eF90c3RhbXBfY2FwcyAqY2FjaGVkX3RzdGFtcF9jYXBzOwotCXN0cnVjdCB3b3JrX3N0cnVjdCAqdHN0YW1wX3Rhc2s7Ci0KIAlzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMgc3RhdHNfc3luYzsKIAlzdHJ1Y3QgaWRwZl90eF9xdWV1ZV9zdGF0cyBxX3N0YXRzOwogCV9fY2FjaGVsaW5lX2dyb3VwX2VuZF9hbGlnbmVkKHJlYWRfd3JpdGUpOwpAQCAtNzE4LDggJiM0Mzs3MjMsNyBAQCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSB7CiAJX19jYWNoZWxpbmVfZ3JvdXBfZW5kX2FsaWduZWQoY29sZCk7CiB9OwogbGliZXRoX2NhY2hlbGluZV9zZXRfYXNzZXJ0KHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCA2NCwKLQkJCSAgICAxMDQgJiM0MzsKLQkJCSAgICBvZmZzZXRvZihzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgY2FjaGVkX3RzdGFtcF9jYXBzKSAtCiYjNDM7CQkJICAgIDk2ICYjNDM7IG9mZnNldG9mKHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCB0c3RhbXBfdGFzaykgLQogCQkJICAgIG9mZnNldG9mZW5kKHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCB0aW1lcikgJiM0MzsKIAkJCSAgICBvZmZzZXRvZihzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgcV9zdGF0cykgLQogCQkJICAgIG9mZnNldG9mZW5kKHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCB0c3RhbXBfdGFzayksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL3hkcC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuYwppbmRleCBjYmNjZDQ1NDY3NjgxLi5jNzcxNjYzNjc3YTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL3hkcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmMKQEAgLTcsNiAmIzQzOzcsOCBAQAogI2luY2x1ZGUgJiMzNDt4ZHAuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3hzay5oJiMzNDsKIAomIzQzO0RFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGlkcGZfeGRwX2ZiKTsKJiM0MzsKIHN0YXRpYyBpbnQgaWRwZl9yeHFfZm9yX2VhY2goY29uc3Qgc3RydWN0IGlkcGZfcV92ZWNfcnNyYyAqcnNyYywKIAkJCSAgICAgaW50ICgqZm4pKHN0cnVjdCBpZHBmX3J4X3F1ZXVlICpyeHEsIHZvaWQgKmFyZyksCiAJCQkgICAgIHZvaWQgKmFyZykKQEAgLTE0OSwxMCAmIzQzOzE1MSwxMiBAQCB2b2lkIGlkcGZfeGRwX2NvcHlfcHJvZ190b19ycXMoY29uc3Qgc3RydWN0IGlkcGZfcV92ZWNfcnNyYyAqcnNyYywKIAogc3RhdGljIHZvaWQgaWRwZl94ZHBfdHhfdGltZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAotaW50IGlkcGZfeGRwc3FzX2dldChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpCiYjNDM7aW50IGlkcGZfeGRwc3FzX2dldChzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpCiB7CiAJc3RydWN0IGxpYmV0aF94ZHBzcV90aW1lciAqKnRpbWVycyBfX2ZyZWUoa3ZmcmVlKSA9IE5VTEw7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKJiM0MzsJdW5zaWduZWQgbG9uZyAqKm1hc2tzIF9fZnJlZShrdmZyZWUpID0gTlVMTDsKJiM0MzsJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKJiM0MzsJYm9vbCB3YXJuOwogCXUzMiBzcXM7CiAKIAlpZiAoIWlkcGZfeGRwX2VuYWJsZWQodnBvcnQpKQpAQCAtMTc2LDYgJiM0MzsxODAsMzQgQEAgaW50IGlkcGZfeGRwc3FzX2dldChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpCiAJZGV2ID0gdnBvcnQtJmd0O25ldGRldjsKIAlzcXMgPSB2cG9ydC0mZ3Q7ZGZsdF9xdl9yc3JjLnhkcF90eHFfb2Zmc2V0OwogCiYjNDM7CXZwb3J0LSZndDt4ZHBzcV9mYiA9ICFpZHBmX2lzX2NhcF9lbmEodnBvcnQtJmd0O2FkYXB0ZXIsIElEUEZfT1RIRVJfQ0FQUywKJiM0MzsJCQkJCSAgIFZJUlRDSE5MMl9DQVBfU1BMSVRRX1FTQ0hFRCk7CiYjNDM7CWlmICghdnBvcnQtJmd0O3hkcHNxX2ZiKQomIzQzOwkJZ290byBzZXR1cDsKJiM0MzsKJiM0MzsJbWFza3MgPSBrdnphbGxvY19vYmpzKCptYXNrcywgdnBvcnQtJmd0O251bV94ZHBfdHhxKTsKJiM0MzsJaWYgKCFtYXNrcykKJiM0MzsJCWdvdG8gZXJyX21hc2tzOwomIzQzOwomIzQzOwlmb3IgKHUzMiBpID0gMDsgaSAmbHQ7IHZwb3J0LSZndDtudW1feGRwX3R4cTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCW1hc2tzW2ldID0gYml0bWFwX3phbGxvY19ub2RlKHZwb3J0LSZndDt0eHFzW3NxcyAmIzQzOyBpXS0mZ3Q7ZGVzY19jb3VudCwKJiM0MzsJCQkJCSAgICAgIEdGUF9LRVJORUwsIGNwdV90b19tZW0oaSkpOwomIzQzOwkJaWYgKCFtYXNrc1tpXSkgewomIzQzOwkJCWZvciAoaW50IGogPSBpIC0gMTsgaiAmZ3Q7PSAwOyBqLS0pCiYjNDM7CQkJCWJpdG1hcF9mcmVlKG1hc2tzW2pdKTsKJiM0MzsKJiM0MzsJCQlnb3RvIGVycl9tYXNrczsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwl3YXJuID0gIXN0YXRpY19rZXlfZW5hYmxlZCgmYW1wO2lkcGZfeGRwX2ZiKTsKJiM0MzsJc3RhdGljX2JyYW5jaF9pbmMoJmFtcDtpZHBmX3hkcF9mYik7CiYjNDM7CiYjNDM7CWlmICh3YXJuICZhbXA7JmFtcDsgbmV0X3JhdGVsaW1pdCgpKQomIzQzOwkJbmV0ZGV2X3dhcm4oZGV2LAomIzQzOwkJCSAgICAmIzM0O1RoZSBGVyBkb2VzbiYjMzk7dCBzdXBwb3J0IFR4IGluIEZJRk8gbW9kZSwgWERQIFR4IHBlcmZvcm1hbmNlIG1pZ2h0IGJlIHN1Ym9wdGltYWxcbiYjMzQ7KTsKJiM0MzsKJiM0MztzZXR1cDoKIAlmb3IgKHUzMiBpID0gc3FzOyBpICZsdDsgdnBvcnQtJmd0O251bV90eHE7IGkmIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCBpZHBmX3R4X3F1ZXVlICp4ZHBzcSA9IHZwb3J0LSZndDt0eHFzW2ldOwogCkBAIC0xODMsOCAmIzQzOzIxNSw4IEBAIGludCBpZHBmX3hkcHNxc19nZXQoY29uc3Qgc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KQogCQlrZnJlZSh4ZHBzcS0mZ3Q7cmVmaWxscSk7CiAJCXhkcHNxLSZndDtyZWZpbGxxID0gTlVMTDsKIAotCQlpZHBmX3F1ZXVlX2NsZWFyKEZMT1dfU0NIX0VOLCB4ZHBzcSk7Ci0JCWlkcGZfcXVldWVfY2xlYXIoRkxPV19TQ0hfRU4sIHhkcHNxLSZndDtjb21wbHEpOwomIzQzOwkJaWRwZl9xdWV1ZV9hc3NpZ24oRkxPV19TQ0hfRU4sIHhkcHNxLCB2cG9ydC0mZ3Q7eGRwc3FfZmIpOwomIzQzOwkJaWRwZl9xdWV1ZV9hc3NpZ24oRkxPV19TQ0hfRU4sIHhkcHNxLSZndDtjb21wbHEsIHZwb3J0LSZndDt4ZHBzcV9mYik7CiAJCWlkcGZfcXVldWVfc2V0KE5PSVJRLCB4ZHBzcSk7CiAJCWlkcGZfcXVldWVfc2V0KFhEUCwgeGRwc3EpOwogCQlpZHBmX3F1ZXVlX3NldChYRFAsIHhkcHNxLSZndDtjb21wbHEpOwpAQCAtMTk3LDEyICYjNDM7MjI5LDI1IEBAIGludCBpZHBmX3hkcHNxc19nZXQoY29uc3Qgc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KQogCQl4ZHBzcS0mZ3Q7cGVuZGluZyA9IDA7CiAJCXhkcHNxLSZndDt4ZHBfdHggPSAwOwogCQl4ZHBzcS0mZ3Q7dGhyZXNoID0gbGliZXRoX3hkcF9xdWV1ZV90aHJlc2hvbGQoeGRwc3EtJmd0O2Rlc2NfY291bnQpOwomIzQzOwomIzQzOwkJaWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoJmFtcDtpZHBmX3hkcF9mYikgJmFtcDsmYW1wOyB2cG9ydC0mZ3Q7eGRwc3FfZmIpIHsKJiM0MzsJCQl4ZHBzcS0mZ3Q7cGVuZGluZ19tYXNrID0gbWFza3NbaSAtIHNxc107CiYjNDM7CQkJeGRwc3EtJmd0O2xhc3RfbnR1ID0gMDsKJiM0MzsJCX0KIAl9CiAKIAlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfbWFza3M6CiYjNDM7CXZwb3J0LSZndDt4ZHBzcV9mYiA9IGZhbHNlOwomIzQzOwomIzQzOwlmb3IgKHUzMiBpID0gMDsgaSAmbHQ7IHZwb3J0LSZndDtudW1feGRwX3R4cTsgaSYjNDM7JiM0MzspCiYjNDM7CQlrZnJlZSh0aW1lcnNbaV0pOwomIzQzOwomIzQzOwlyZXR1cm4gLUVOT01FTTsKIH0KIAotdm9pZCBpZHBmX3hkcHNxc19wdXQoY29uc3Qgc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KQomIzQzO3ZvaWQgaWRwZl94ZHBzcXNfcHV0KHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXUzMiBzcXM7CkBAIC0yMjIsMTAgJiM0MzsyNjcsMjMgQEAgdm9pZCBpZHBmX3hkcHNxc19wdXQoY29uc3Qgc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KQogCQlsaWJldGhfeGRwc3FfZGVpbml0X3RpbWVyKHhkcHNxLSZndDt0aW1lcik7CiAJCWxpYmV0aF94ZHBzcV9wdXQoJmFtcDt4ZHBzcS0mZ3Q7eGRwX2xvY2ssIGRldik7CiAKJiM0MzsJCWlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZhbXA7aWRwZl94ZHBfZmIpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgeGRwc3EpKSB7CiYjNDM7CQkJYml0bWFwX2ZyZWUoeGRwc3EtJmd0O3BlbmRpbmdfbWFzayk7CiYjNDM7CQkJeGRwc3EtJmd0O3BlbmRpbmdfbWFzayA9IE5VTEw7CiYjNDM7CQkJeGRwc3EtJmd0O2xhc3RfbnR1ID0gMDsKJiM0MzsJCX0KJiM0MzsKIAkJa2ZyZWUoeGRwc3EtJmd0O3RpbWVyKTsKIAkJeGRwc3EtJmd0O3JlZmlsbHEgPSBOVUxMOwogCQlpZHBmX3F1ZXVlX2NsZWFyKE5PSVJRLCB4ZHBzcSk7CiAJfQomIzQzOwomIzQzOwlpZiAoIXZwb3J0LSZndDt4ZHBzcV9mYikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc3RhdGljX2JyYW5jaF9kZWMoJmFtcDtpZHBmX3hkcF9mYik7CiYjNDM7CXZwb3J0LSZndDt4ZHBzcV9mYiA9IGZhbHNlOwogfQogCiBzdGF0aWMgaW50IGlkcGZfeGRwX3BhcnNlX2NxZShjb25zdCBzdHJ1Y3QgaWRwZl9zcGxpdHFfNGJfdHhfY29tcGxfZGVzYyAqZGVzYywKQEAgLTI1MCw2ICYjNDM7MzA4LDY1IEBAIHN0YXRpYyBpbnQgaWRwZl94ZHBfcGFyc2VfY3FlKGNvbnN0IHN0cnVjdCBpZHBmX3NwbGl0cV80Yl90eF9jb21wbF9kZXNjICpkZXNjLAogCXJldHVybiB1cHBlcl8xNl9iaXRzKHZhbCk7CiB9CiAKJiM0MztzdGF0aWMgdTMyIGlkcGZfeGRwc3FfcG9sbF9mYihzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EsIHUzMiBidWRnZXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWRwZl9jb21wbF9xdWV1ZSAqY3EgPSB4ZHBzcS0mZ3Q7Y29tcGxxOwomIzQzOwl1bnNpZ25lZCBsb25nICptYXNrID0geGRwc3EtJmd0O3BlbmRpbmdfbWFzazsKJiM0MzsJdTMyIGRvbmVfZnJhbWVzLCB0eF9jbnQsIG5ld19udGM7CiYjNDM7CXUzMiBudGMgPSBjcS0mZ3Q7bmV4dF90b19jbGVhbjsKJiM0MzsJdTMyIGNudCA9IGNxLSZndDtkZXNjX2NvdW50OwomIzQzOwlib29sIGdlbjsKJiM0MzsKJiM0MzsJZ2VuID0gaWRwZl9xdWV1ZV9oYXMoR0VOX0NISywgY3EpOwomIzQzOwomIzQzOwlmb3IgKGRvbmVfZnJhbWVzID0gMDsgZG9uZV9mcmFtZXMgJmx0OyBidWRnZXQ7ICkgewomIzQzOwkJaW50IHJldDsKJiM0MzsKJiM0MzsJCXJldCA9IGlkcGZfeGRwX3BhcnNlX2NxZSgmYW1wO2NxLSZndDtjb21wW250Y10uY29tbW9uLCBnZW4pOwomIzQzOwkJaWYgKHJldCAmZ3Q7PSAwKSB7CiYjNDM7CQkJX19jbGVhcl9iaXQocmV0LCBtYXNrKTsKJiM0MzsJCQlkb25lX2ZyYW1lcyYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQkJZ290byBuZXh0OwomIzQzOwkJfQomIzQzOwomIzQzOwkJc3dpdGNoIChyZXQpIHsKJiM0MzsJCWNhc2UgLUVOT0RBVEE6CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQljYXNlIC1FSU5WQUw6CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CiYjNDM7bmV4dDoKJiM0MzsJCWlmICh1bmxpa2VseSgmIzQzOyYjNDM7bnRjID09IGNudCkpIHsKJiM0MzsJCQludGMgPSAwOwomIzQzOwkJCWdlbiA9ICFnZW47CiYjNDM7CQkJaWRwZl9xdWV1ZV9jaGFuZ2UoR0VOX0NISywgY3EpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7b3V0OgomIzQzOwljcS0mZ3Q7bmV4dF90b19jbGVhbiA9IG50YzsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KCFkb25lX2ZyYW1lcykpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJdHhfY250ID0geGRwc3EtJmd0O2Rlc2NfY291bnQ7CiYjNDM7CiYjNDM7CS8qIERvbiYjMzk7dCBnbyBwYXN0IG5leHRfdG9fdXNlICovCiYjNDM7CV9fc2V0X2JpdCh4ZHBzcS0mZ3Q7bmV4dF90b191c2UsIG1hc2spOwomIzQzOwomIzQzOwluZXdfbnRjID0gZmluZF9uZXh0X2JpdChtYXNrLCB0eF9jbnQsIHhkcHNxLSZndDtuZXh0X3RvX2NsZWFuKTsKJiM0MzsJZG9uZV9mcmFtZXMgPSBuZXdfbnRjIC0geGRwc3EtJmd0O25leHRfdG9fY2xlYW47CiYjNDM7CiYjNDM7CWlmIChuZXdfbnRjID09IHR4X2NudCkKJiM0MzsJCWRvbmVfZnJhbWVzICYjNDM7PSBmaW5kX2ZpcnN0X2JpdChtYXNrLCB0eF9jbnQpOwomIzQzOwomIzQzOwlfX2NsZWFyX2JpdCh4ZHBzcS0mZ3Q7bmV4dF90b191c2UsIG1hc2spOwomIzQzOwomIzQzOwlyZXR1cm4gZG9uZV9mcmFtZXM7CiYjNDM7fQomIzQzOwogdTMyIGlkcGZfeGRwc3FfcG9sbChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EsIHUzMiBidWRnZXQpCiB7CiAJc3RydWN0IGlkcGZfY29tcGxfcXVldWUgKmNxID0geGRwc3EtJmd0O2NvbXBscTsKQEAgLTI2MCw2ICYjNDM7Mzc3LDEwIEBAIHUzMiBpZHBmX3hkcHNxX3BvbGwoc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxLCB1MzIgYnVkZ2V0KQogCXUzMiBkb25lX2ZyYW1lczsKIAlib29sIGdlbjsKIAomIzQzOwlpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseSgmYW1wO2lkcGZfeGRwX2ZiKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgeGRwc3EpKQomIzQzOwkJcmV0dXJuIGlkcGZfeGRwc3FfcG9sbF9mYih4ZHBzcSwgYnVkZ2V0KTsKJiM0MzsKIAlnZW4gPSBpZHBmX3F1ZXVlX2hhcyhHRU5fQ0hLLCBjcSk7CiAKIAlmb3IgKGRvbmVfZnJhbWVzID0gMDsgZG9uZV9mcmFtZXMgJmx0OyBidWRnZXQ7ICkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmgKaW5kZXggNjNlNTZmN2Q0M2UwMC4uOTVlNDdlYTJjY2JhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL3hkcC5oCkBAIC04LDYgJiM0Mzs4LDEwIEBACiAKICNpbmNsdWRlICYjMzQ7aWRwZl90eHJ4LmgmIzM0OwogCiYjNDM7c3RydWN0IGlkcGZfcV92ZWNfcnNyYzsKJiM0MzsKJiM0MztERUNMQVJFX1NUQVRJQ19LRVlfRkFMU0UoaWRwZl94ZHBfZmIpOwomIzQzOwogaW50IGlkcGZfeGRwX3J4cV9pbmZvX2luaXQoc3RydWN0IGlkcGZfcnhfcXVldWUgKnJ4cSk7CiBpbnQgaWRwZl94ZHBfcnhxX2luZm9faW5pdF9hbGwoY29uc3Qgc3RydWN0IGlkcGZfcV92ZWNfcnNyYyAqcnNyYyk7CiB2b2lkIGlkcGZfeGRwX3J4cV9pbmZvX2RlaW5pdChzdHJ1Y3QgaWRwZl9yeF9xdWV1ZSAqcnhxLCB1MzIgbW9kZWwpOwpAQCAtMTUsMTIgJiM0MzsxOSw0MCBAQCB2b2lkIGlkcGZfeGRwX3J4cV9pbmZvX2RlaW5pdF9hbGwoY29uc3Qgc3RydWN0IGlkcGZfcV92ZWNfcnNyYyAqcnNyYyk7CiB2b2lkIGlkcGZfeGRwX2NvcHlfcHJvZ190b19ycXMoY29uc3Qgc3RydWN0IGlkcGZfcV92ZWNfcnNyYyAqcnNyYywKIAkJCSAgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nKTsKIAotaW50IGlkcGZfeGRwc3FzX2dldChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpOwotdm9pZCBpZHBmX3hkcHNxc19wdXQoY29uc3Qgc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KTsKJiM0MztpbnQgaWRwZl94ZHBzcXNfZ2V0KHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCk7CiYjNDM7dm9pZCBpZHBmX3hkcHNxc19wdXQoc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KTsKIAogdTMyIGlkcGZfeGRwc3FfcG9sbChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EsIHUzMiBidWRnZXQpOwogYm9vbCBpZHBmX3hkcF90eF9mbHVzaF9idWxrKHN0cnVjdCBsaWJldGhfeGRwX3R4X2J1bGsgKmJxLCB1MzIgZmxhZ3MpOwogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwX3R4X3htaXRfZmIoc3RydWN0IGxpYmV0aF94ZHBfdHhfZGVzYyBkZXNjLCB1MzIgaSwKJiM0MzsJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBsaWJldGhfeGRwc3EgKnNxLCB1NjQgcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZHBmX2ZsZXhfdHhfc2NoZWRfZGVzYyAqdHhfZGVzYyA9IHNxLSZndDtkZXNjczsKJiM0MzsJdTMyIGNtZDsKJiM0MzsKJiM0MzsJY21kID0gRklFTERfUFJFUChJRFBGX1RYRF9GTEVYX0ZMT1dfRFRZUEVfTSwKJiM0MzsJCQkgSURQRl9UWF9ERVNDX0RUWVBFX0ZMRVhfRkxPV19TQ0hFKTsKJiM0MzsJaWYgKGRlc2MuZmxhZ3MgJmFtcDsgTElCRVRIX1hEUF9UWF9MQVNUKQomIzQzOwkJY21kIHw9IElEUEZfVFhEX0ZMRVhfRkxPV19DTURfRU9QOwomIzQzOwlpZiAocHJpdiAmYW1wOyZhbXA7IChkZXNjLmZsYWdzICZhbXA7IExJQkVUSF9YRFBfVFhfQ1NVTSkpCiYjNDM7CQljbWQgfD0gSURQRl9UWERfRkxFWF9GTE9XX0NNRF9DU19FTjsKJiM0MzsKJiM0MzsJdHhfZGVzYyA9ICZhbXA7dHhfZGVzY1tpXTsKJiM0MzsJdHhfZGVzYy0mZ3Q7YnVmX2FkZHIgPSBjcHVfdG9fbGU2NChkZXNjLmFkZHIpOwomIzQzOwomIzQzOyNpZmRlZiBfX0xJQkVUSF9XT1JEX0FDQ0VTUwomIzQzOwkqKHU2NCAqKSZhbXA7dHhfZGVzYy0mZ3Q7cXcxID0gKCh1NjQpZGVzYy5sZW4gJmx0OyZsdDsgNDgpIHwgKCh1NjQpaSAmbHQ7Jmx0OyAzMikgfCBjbWQ7CiYjNDM7I2Vsc2UKJiM0MzsJdHhfZGVzYy0mZ3Q7cXcxLnJ4cl9idWZzaXplID0gY3B1X3RvX2xlMTYoZGVzYy5sZW4pOwomIzQzOwl0eF9kZXNjLSZndDtxdzEuY29tcGxfdGFnID0gY3B1X3RvX2xlMTYoaSk7CiYjNDM7CXR4X2Rlc2MtJmd0O3F3MS50c1swXSA9IDA7CiYjNDM7CXR4X2Rlc2MtJmd0O3F3MS50c1sxXSA9IDA7CiYjNDM7CXR4X2Rlc2MtJmd0O3F3MS50c1syXSA9IDA7CiYjNDM7CXR4X2Rlc2MtJmd0O3F3MS5jbWRfZHR5cGUgPSBjbWQ7CiYjNDM7I2VuZGlmCiYjNDM7fQomIzQzOwogLyoqCiAgKiBpZHBmX3hkcF90eF94bWl0IC0gcHJvZHVjZSBhIHNpbmdsZSBIVyBUeCBkZXNjcmlwdG9yIG91dCBvZiBYRFAgZGVzYwogICogQGRlc2M6IFhEUCBkZXNjcmlwdG9yIHRvIHB1bGwgdGhlIERNQSBhZGRyZXNzIGFuZCBsZW5ndGggZnJvbQpAQCAtMzQsNiAmIzQzOzY2LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcF90eF94bWl0KHN0cnVjdCBsaWJldGhfeGRwX3R4X2Rlc2MgZGVzYywgdTMyIGksCiAJc3RydWN0IGlkcGZfZmxleF90eF9kZXNjICp0eF9kZXNjID0gc3EtJmd0O2Rlc2NzOwogCXUzMiBjbWQ7CiAKJiM0MzsJaWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoJmFtcDtpZHBmX3hkcF9mYikgJmFtcDsmYW1wOwomIzQzOwkgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sCiYjNDM7CQkJICAgbGliZXRoX3hkcHNxX3RvX3NxKHNxLCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwKJiM0MzsJCQkJCSAgICAgIG5leHRfdG9fdXNlKSkpIHsKJiM0MzsJCWlkcGZfeGRwX3R4X3htaXRfZmIoZGVzYywgaSwgc3EsIHByaXYpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiAJY21kID0gRklFTERfUFJFUChJRFBGX0ZMRVhfVFhEX1FXMV9EVFlQRV9NLAogCQkJIElEUEZfVFhfREVTQ19EVFlQRV9GTEVYX0wyVEFHMV9MMlRBRzIpOwogCWlmIChkZXNjLmZsYWdzICZhbXA7IExJQkVUSF9YRFBfVFhfTEFTVCkKQEAgLTUzLDEyICYjNDM7OTMsMzQgQEAgc3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwX3R4X3htaXQoc3RydWN0IGxpYmV0aF94ZHBfdHhfZGVzYyBkZXNjLCB1MzIgaSwKICNlbmRpZgogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBzcV9zZXRfcnMoY29uc3Qgc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcHNxX3NldF9yc19mYihzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EpCiYjNDM7ewomIzQzOwl1MzIgbnR1ID0geGRwc3EtJmd0O25leHRfdG9fdXNlOwomIzQzOwl1MzIgb2xkID0geGRwc3EtJmd0O2xhc3RfbnR1OwomIzQzOwomIzQzOwlpZiAob2xkICZndDsgbnR1KSB7CiYjNDM7CQliaXRtYXBfc2V0KHhkcHNxLSZndDtwZW5kaW5nX21hc2ssIG9sZCwgeGRwc3EtJmd0O2Rlc2NfY291bnQgLSBvbGQpOwomIzQzOwkJaWYgKG50dSkKJiM0MzsJCQliaXRtYXBfc2V0KHhkcHNxLSZndDtwZW5kaW5nX21hc2ssIDAsIG50dSk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQliaXRtYXBfc2V0KHhkcHNxLSZndDtwZW5kaW5nX21hc2ssIG9sZCwgbnR1IC0gb2xkKTsKJiM0MzsJfQomIzQzOwomIzQzOwl4ZHBzcS0mZ3Q7bGFzdF9udHUgPSBudHU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBpZHBmX3hkcHNxX3NldF9ycyhzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EpCiB7CiAJdTMyIG50dSwgY21kOwogCiYjNDM7CWlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZhbXA7aWRwZl94ZHBfZmIpICZhbXA7JmFtcDsKJiM0MzsJICAgIGlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCB4ZHBzcSkpIHsKJiM0MzsJCWlkcGZfeGRwc3Ffc2V0X3JzX2ZiKHhkcHNxKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCW50dSA9IHhkcHNxLSZndDtuZXh0X3RvX3VzZTsKLQlpZiAodW5saWtlbHkoIW50dSkpCiYjNDM7CWlmICghbnR1KQogCQludHUgPSB4ZHBzcS0mZ3Q7ZGVzY19jb3VudDsKIAogCWNtZCA9IEZJRUxEX1BSRVAoSURQRl9GTEVYX1RYRF9RVzFfQ01EX00sIElEUEZfVFhfREVTQ19DTURfUlMpOwpAQCAtODQsNyAmIzQzOzE0Niw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcHNxX3VwZGF0ZV90YWlsKGNvbnN0IHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp4ZHBzcSkKICAqIFNldCB0aGUgUlMgYml0ICgmIzM0O2VuZCBvZiBiYXRjaCYjMzQ7KSwgYnVtcCB0aGUgdGFpbCwgYW5kIHF1ZXVlIHRoZSBjbGVhbnVwIHRpbWVyLgogICogVG8gYmUgY2FsbGVkIGFmdGVyIGEgTkFQSSBwb2xsaW5nIGxvb3AsIGF0IHRoZSBlbmQgb2YgLm5kb194ZHBfeG1pdCgpIGV0Yy4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwX3R4X2ZpbmFsaXplKHZvaWQgKl94ZHBzcSwgYm9vbCBzZW50LCBib29sIGZsdXNoKQomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBpZHBmX3hkcF90eF9maW5hbGl6ZSh2b2lkICpfeGRwc3EsIGJvb2wgc2VudCwKJiM0MzsJCQkJCQkgYm9vbCBmbHVzaCkKIHsKIAlzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EgPSBfeGRwc3E7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2xpYmV0aC94ZHAuaCBiL2luY2x1ZGUvbmV0L2xpYmV0aC94ZHAuaAppbmRleCA4OTg3MjNhYjYyZTgxLi5lZDYxZDgzYmRhMmQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9saWJldGgveGRwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbGliZXRoL3hkcC5oCkBAIC00MzAsNiAmIzQzOzQzMCwxOSBAQCBzdHJ1Y3QgbGliZXRoX3hkcHNxIHsKIAlzdHJ1Y3QgbGliZXRoX3hkcHNxX2xvY2sJKmxvY2s7CiB9OwogCiYjNDM7LyoqCiYjNDM7ICogbGliZXRoX3hkcHNxX3RvX3NxIC0gZ2V0IFNRIHBvaW50ZXIgZnJvbSBhbiBYRFBTUSBwb2ludGVyCiYjNDM7ICogQHhkcHNxOiAmYW1wO2xpYmV0aF94ZHBzcSBjb3JyZXNwb25kaW5nIHRvIHRoZSBxdWV1ZQomIzQzOyAqIEB0eXBlOiB0eXBlb2YoKSBvZiB0aGUgZHJpdmVyIFR4IHF1ZXVlIHN0cnVjdHVyZQomIzQzOyAqIEBtZW1iZXI6IG5hbWUgb2YgdGhlIE5UVSBmaWVsZCBpbnNpZGUgQHR5cGUKJiM0MzsgKgomIzQzOyAqIFNvbWUgb2YgdGhlIHNlbmRpbmcgY2FsbGJhY2tzIHRha2Ugb25seSAmYW1wO2xpYmV0aF94ZHBzcSBwb2ludGVyIGFuZCBubyBwb2ludGVyCiYjNDM7ICogdG8gdGhlIGFjdHVhbCBkcml2ZXIgVHggcXVldWUgc3RydWN0dXJlLiBVc2UgdGhpcyBoZWxwZXIgdG8gcXVpY2tseSBqdW1wIHRvCiYjNDM7ICogdGhlIGxhdHRlciB3aGVuIG5lZWRlZC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIGxpYmV0aF94ZHBzcV90b19zcSh4ZHBzcSwgdHlwZSwgbWVtYmVyKQkJCQkgICAgICBcCiYjNDM7CWNvbnRhaW5lcl9vZl9jb25zdCgoeGRwc3EpLSZndDtudHUsIHR5cGUsIG1lbWJlcikKJiM0MzsKIC8qKgogICogc3RydWN0IGxpYmV0aF94ZHBfdHhfZGVzYyAtIGFic3RyYWN0aW9uIGZvciBhbiBYRFAgVHggZGVzY3JpcHRvcgogICogQGFkZHI6IERNQSBhZGRyZXNzIG9mIHRoZSBmcmFtZQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTAwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgYGlkcGZgIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgZm9yIHRoZSBgaWRwZmAgZHJpdmVyIOKAkyBJbnRlbCYjMzk7cyBJbmZyYXN0cnVjdHVyZSBEYXRhIFBhdGggRnVuY3Rpb24uIEl0JiMzOTtzIGFkZGluZyBYRFAgVHggc3VwcG9ydCBpbiBGSUZPIG1vZGUsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGUgY2hhbmdlcyBhcmUgc3ByZWFkIGFjcm9zcyB0aGUgdXN1YWwgc3VzcGVjdHM6IGhlYWRlcnMsIHRoZSBjb3JlIFRYL1JYIGNvZGUsIGFuZCBYRFAtcmVsYXRlZCBmaWxlcy4gTm90aGluZyB0b28gc3VycHJpc2luZyBvbiB0aGUgc3VyZmFjZS4KCk15IGZpcnN0IHRob3VnaHQsIGFuZCBhIGNyaXRpY2FsIG9uZSBnaXZlbiBteSBleHBlcmllbmNlLCBpcyBhYm91dCB0aGUgZW52aXJvbm1lbnQuIENhbiBJIGFjdHVhbGx5ICp0ZXN0KiB0aGlzPyBgaWRwZmAsIHJpZ2h0PyBUaGF0JiMzOTtzIGFuIEludGVsIElQVSB0aGluZy4gTm93LCBpcyB0aGlzIGEgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVyLCBvciBpcyB0aGVyZSBzb21lIGxldmVsIG9mIHZpcnR1YWxpemF0aW9uIG9yIGVtdWxhdGlvbj8gTXkgaW1tZWRpYXRlIHN1c3BpY2lvbiwgZ2l2ZW4gdGhhdCB0aGlzIGlzIGFuIEludGVsIE5JQyBkcml2ZXIsIGlzIHRoYXQgaXQmIzM5O3MgZ29pbmcgdG8gbmVlZCByZWFsIGhhcmR3YXJlIHRvIG1lYW5pbmdmdWxseSB0ZXN0LiBJIGtub3cgaG93IGZ1c3N5IHRoZXNlIGRyaXZlcnMgY2FuIGJlLiBUaGV5IG9mdGVuIGRlcGVuZCBvbiB2ZXJ5IHNwZWNpZmljIFBDSWUgY29uZmlndXJhdGlvbnMuCgpBaCwgeWVzLCBgaWRwZmAgaXMgYSBQQ0llIGRldmljZSwgYSBTbWFydE5JQy4gU28sIHRoZSBxdWVzdGlvbiBpcywgZG9lcyBRRU1VLCB0aGUgc3RhbmRhcmQgZW11bGF0b3IsIGhhdmUgYSBkZWNlbnQgZW11bGF0aW9uIGZvciB0aGlzPyBQcm9iYWJseSBub3QuIEkmIzM5O3ZlIHdvcmtlZCB3aXRoIEludGVsIE5JQyBkcml2ZXJzIGJlZm9yZSwgYW5kIHRoZXkmIzM5O3JlIHJhcmVseSBmdWxseSBlbXVsYXRlZC4gTXkgZXhwZXJpZW5jZSBzdWdnZXN0cyB0aGF0IHRoaXMgaXMgZ29pbmcgdG8gZmFsbCBpbnRvIHRoYXQgY2F0ZWdvcnkgb2YgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcy4KCkxldCBtZSBjb25maXJtIHRoYXQgYnkgcXVpY2tseSBzZWFyY2hpbmcgdGhlIGtlcm5lbCB0cmVlLiBUaGUgcHJvbXB0IG1lbnRpb25lZCBhIGxpc3Qgb2Ygc2ltaWxhciBkcml2ZXJzLiBJdCBzZWVtcyBsaWtlIHRoaXMgYGlkcGZgIGlzIGRlZmluaXRlbHkgaW4gdGhlIHNhbWUgY2F0ZWdvcnkgYXMgdGhvc2UgZHJpdmVycywgYW5kIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGl0JiMzOTtzIG5vdCBlbXVsYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSURQRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWctMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZzo0OmNvbmZpZyBJRFBGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWctNS1cdHRyaXN0YXRlIFwmIzM0O0ludGVsKFIpIEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbiBTdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnPTE4PWlmIElEUEZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZy0xOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZzoyMDpjb25maWcgSURQRl9TSU5HTEVRXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWctMjEtXHRib29sIFwmIzM0O2lkcGYgc2luZ2xlcSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQzMwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIEludGVsIElEUEYgRW11bGF0aW9uKioKCk9rYXksIHNvICYjMzQ7SW50ZWwoUikgSW5mcmFzdHJ1Y3R1cmUgRGF0YSBQYXRoIEZ1bmN0aW9uIFN1cHBvcnQmIzM0OyDigJMgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyBhIFNtYXJ0TklDIHRoaW5nPyYjMzQ7IFllcywgSW50ZWwgSVBVcyAqYXJlKiBTbWFydE5JQ3MsIHNvIHRoYXQgY2hlY2tzIG91dC4gVGhlIG5leHQgcXVlc3Rpb24gaXMgZW11bGF0aW9uLiBDYW4gSSBzcGluIHRoaXMgdXAgaW4gUUVNVT8gSG1tLCBubywgdGhlcmUgaXNuJiMzOTt0IGFueSBzdGFuZGFyZCBRRU1VIGVtdWxhdGlvbiBmb3IgSW50ZWwgSURQRiwgb3IgYXQgbGVhc3QsIEkmIzM5O20gbm90IGF3YXJlIG9mIGFueSBvZmYgdGhlIHRvcCBvZiBteSBoZWFkLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgbWVudGFsIGNoZWNrLiBJJiMzOTtkIHR5cGljYWxseSB3YW50IHRvIGNoZWNrIHRoZSBRRU1VIHNvdXJjZSBmb3IgJiMzNDtpZHBmLCYjMzQ7IGJ1dCBJIGRvbiYjMzk7dCBoYXZlIHRoYXQgbG9jYWxseS4gRXZlbiB3aXRob3V0IHRoZSBzb3VyY2UsIG15IGd1dCBzYXlzICYjMzQ7aWRwZiYjMzQ7IGlzIGdvaW5nIHRvIGJlIGhhcmR3YXJlLXNwZWNpZmljLCBsaWtlbHkgYSBkcml2ZXIuIEkgc2hvdWxkIGNoZWNrIHRoZSBleGFtcGxlczogJiMzNDttbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdSYjMzQ7IOKAkyBub3QgZXhwbGljaXRseSBJRFBGIGJ1dCBjbGVhcmx5IHdpdGhpbiB0aGUgcmVhbG0gb2YgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlcnMuIEdvb2QuCgpUaGUga2V5IGhlcmUgaXMgdmVyaWZpY2F0aW9uLiBUbyBiZSBjZXJ0YWluLCBjYW4gSSBldmVuIHJlYWNoIElEUEYgaW4gdGhlIGZpcnN0IHBsYWNlPyBJZiBpdCYjMzk7cyBhIFBDSWUgZHJpdmVyIHRoYXQgbWFuYWdlcyB0aGUgSW50ZWwgSVBVLCB0aGVuIGl0IHByZXR0eSBtdWNoICpyZXF1aXJlcyogdGhlIHBoeXNpY2FsIGhhcmR3YXJlIHRvIGZ1bmN0aW9uLiBTbywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRob3VnaHQuCgpMZXQmIzM5O3MgbG9vayBhdCB0aGUgZHJpdmVyIHNvdXJjZSBjb2RlIC0gc3BlY2lmaWNhbGx5LCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uY2AgLSB0aGF0IHNob3VsZCBiZSBhIFBDSSBkcml2ZXIuIFRoYXQgd2lsbCB0ZWxsIG1lIGV2ZXJ5dGhpbmcgdGhhdCBJIG5lZWQgdG8ga25vdyBhYm91dCB0aGUgcmVxdWlyZW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX3JlZ2lzdGVyX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA1MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOgoKKipQQ0kgRHJpdmVyIFJlZ2lzdHJhdGlvbiBDaGVjayoqCgpPa2F5LCBsZXQgbWUgcXVpY2tseSB0aGluayB0aGlzIHRocm91Z2guIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBJJiMzOTttIHByZXR0eSBzdXJlIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBkcml2ZXIgd291bGQgYmUgcmVnaXN0ZXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5zdGluY3QgaXMgdGVsbGluZyBtZSB0aGF0LCBpZiBpdCYjMzk7cyBhIFBDSSBkZXZpY2UsIHRoZXJlJiMzOTtzIGEgc3Ryb25nIGNoYW5jZSBpdCYjMzk7cyBnb2luZyB0byBsZXZlcmFnZSBvbmUgb2YgdGhlIHN0YW5kYXJkIFBDSSBkcml2ZXIgcmVnaXN0cmF0aW9uIG1lY2hhbmlzbXMuIFRoYXQgd291bGQgbGlrZWx5IGJlIGVpdGhlciBgcGNpX3JlZ2lzdGVyX2RyaXZlcmAgb3IgdGhlIG1hY3JvIGBtb2R1bGVfcGNpX2RyaXZlcmAuIEkgbmVlZCB0byBsb29rIGNsb3NlciB0byBjb25maXJtIHdoaWNoIG9uZSwgb3IgaWYgdGhleSBhcmUgaGFuZGxpbmcgdGhlIHJlZ2lzdHJhdGlvbiBpbiBhIG1vcmUgY3VzdG9tIHdheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfcGNpX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmM9Mzc1PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpZHBmX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jLTM4Mi19O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYzozODM6bW9kdWxlX3BjaV9kcml2ZXIoaWRwZl9kcml2ZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzYxCgkJCQkJCQlvdXRwdXQ6IDg3CgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogTm90IFdvcnRoIEZ1enppbmcgaW4gYSBWaXJ0dWFsIEVudmlyb25tZW50KioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFllcCwgdGhpcyBpcyBkZWZpbml0ZWx5IGEgUENJIGRyaXZlciDigJMgdGhhdCBtdWNoIGlzIGNsZWFyLiBUaGUga2V5IGhlcmUgaXMgdGhhdCBpdCYjMzk7cyBzcGVjaWZpY2FsbHkgZm9yIGFuIEludGVsIEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbi4gVHJhbnNsYXRpb246IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBTbWFydE5JQyBvciBJUFUuIEFuZCB0aGF0IG1lYW5zICpwaHlzaWNhbCogaGFyZHdhcmUgaXMgYWJzb2x1dGVseSBlc3NlbnRpYWwuIFdlJiMzOTtyZSB0YWxraW5nIGRlZGljYXRlZCBzaWxpY29uLCBjdXN0b20gaGFyZHdhcmUgaW50ZXJhY3Rpb24uIEdpdmVuIHRoaXMgc2V0dXAsIGF0dGVtcHRpbmcgdG8gZnV6eiB0aGlzIGRyaXZlciB3aXRoaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50IGlzIGEgbm9uLXN0YXJ0ZXIuIFRoZSB2aXJ0dWFsaXplZCBoYXJkd2FyZSBqdXN0IGlzbiYjMzk7dCBnb2luZyB0byBjdXQgaXQuIFRoZXJlZm9yZSwgSeKAmW0gZ29pbmcgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgZXhwbGFuYXRpb24gaXMgc2ltcGxlOiB2ZW5kb3Itc3BlY2lmaWMgU21hcnROSUMgZHJpdmVyIHRoYXQmIzM5O3MgZnVuZGFtZW50YWxseSBkZXBlbmRlbnQgb24gcGh5c2ljYWwgaGFyZHdhcmUgZm9yIGFueSBtZWFuaW5nZnVsIHRlc3RpbmcuIE5vIHdheSBhcm91bmQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbiAoaWRwZikgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIFNtYXJ0TklDL0lQVSBkcml2ZXIuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIG1ha2luZyBpdCB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBJbmZyYXN0cnVjdHVyZSBEYXRhIFBhdGggRnVuY3Rpb24gKGlkcGYpIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBTbWFydE5JQy9JUFUgZHJpdmVyLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBtYWtpbmcgaXQgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODowNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MDY6MDEuNDQxNjk4Mjc0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE5Mjg4OTgwNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgSW5mcmFzdHJ1Y3R1cmUgRGF0YSBQYXRoIEZ1bmN0aW9uIChpZHBmKSBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgU21hcnROSUMvSVBVIGRyaXZlci4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgbWFraW5nIGl0IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MDY6MDEuNDQxNzA0NDQ0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTAxNjY4MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiM2ZjYjY4YmM2MDczYjUwOGExYjZjNjI2NjgxNmZhYzBkNmY4ODRjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDE4IDE4OjA2OjAwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmhcXG5pbmRleCA0NzBiYzIzYzg0NGMxLi4xZTg5N2UxMzFjYjI5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmhcXG5AQCAtMzgzLDYgKzM4Myw3IEBAIHN0cnVjdCBpZHBmX3Zwb3J0IHtcXG4gXFx0c3RydWN0IGlkcGZfdHhfcXVldWUgKip0eHFzO1xcbiBcXHR1MTYgbnVtX3R4cTtcXG4gXFx0dTE2IG51bV94ZHBfdHhxO1xcbitcXHRib29sIHhkcHNxX2ZiO1xcbiBcXHRib29sIHhkcHNxX3NoYXJlO1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmNcXG5pbmRleCBjM2ZmYjQ0NTI5N2Y4Li43NDMzOTU5NjIwNzdkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jXFxuQEAgLTIyNyw3ICsyMjcsNyBAQCBzdGF0aWMgaW50IGlkcGZfdHhfZGVzY19hbGxvYyhjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQsXFxuIFxcbiBcXHRpZHBmX3hza19zZXR1cF9xdWV1ZSh2cG9ydCwgdHhfcSwgVklSVENITkwyX1FVRVVFX1RZUEVfVFgpO1xcbiBcXG4tXFx0aWYgKCFpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgdHhfcSkpXFxuK1xcdGlmICghaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHR4X3EpIHx8IGlkcGZfcXVldWVfaGFzKFhEUCwgdHhfcSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0cmVmaWxscSA9IHR4X3EtXFx1MDAzZXJlZmlsbHE7XFxuQEAgLTEwNTUsNiArMTA1NSwxMyBAQCBzdGF0aWMgdm9pZCBpZHBmX2NsZWFuX3F1ZXVlX3NldChjb25zdCBzdHJ1Y3QgaWRwZl9xdWV1ZV9zZXQgKnFzKVxcbiBcXHRcXHRcXHRpZiAoaWRwZl9xdWV1ZV9oYXMoWERQLCBxLVxcdTAwM2V0eHEpKSB7XFxuIFxcdFxcdFxcdFxcdHEtXFx1MDAzZXR4cS1cXHUwMDNlcGVuZGluZyA9IDA7XFxuIFxcdFxcdFxcdFxcdHEtXFx1MDAzZXR4cS1cXHUwMDNleGRwX3R4ID0gMDtcXG4rXFxuK1xcdFxcdFxcdFxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZpZHBmX3hkcF9mYikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0ICAgIGlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCBxLVxcdTAwM2V0eHEpKSB7XFxuK1xcdFxcdFxcdFxcdFxcdGJpdG1hcF96ZXJvKHEtXFx1MDAzZXR4cS1cXHUwMDNlcGVuZGluZ19tYXNrLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgcS1cXHUwMDNldHhxLVxcdTAwM2VkZXNjX2NvdW50KTtcXG4rXFx0XFx0XFx0XFx0XFx0cS1cXHUwMDNldHhxLVxcdTAwM2VsYXN0X250dSA9IDA7XFxuK1xcdFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0XFx0cS1cXHUwMDNldHhxLVxcdTAwM2V0eHFfZ3JwLVxcdTAwM2VudW1fY29tcGxldGlvbnNfcGVuZGluZyA9IDA7XFxuIFxcdFxcdFxcdH1cXG5AQCAtMTMxNyw3ICsxMzI0LDggQEAgc3RhdGljIHZvaWQgaWRwZl90eHFfZ3JvdXBfcmVsKHN0cnVjdCBpZHBmX3FfdmVjX3JzcmMgKnJzcmMpXFxuIFxcdFxcdFxcdGlmICghdHhxX2dycC1cXHUwMDNldHhxc1tqXSlcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRcXHRpZiAoaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHR4cV9ncnAtXFx1MDAzZXR4cXNbal0pKSB7XFxuK1xcdFxcdFxcdGlmIChpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgdHhxX2dycC1cXHUwMDNldHhxc1tqXSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICFpZHBmX3F1ZXVlX2hhcyhYRFAsIHR4cV9ncnAtXFx1MDAzZXR4cXNbal0pKSB7XFxuIFxcdFxcdFxcdFxcdGtmcmVlKHR4cV9ncnAtXFx1MDAzZXR4cXNbal0tXFx1MDAzZXJlZmlsbHEpO1xcbiBcXHRcXHRcXHRcXHR0eHFfZ3JwLVxcdTAwM2V0eHFzW2pdLVxcdTAwM2VyZWZpbGxxID0gTlVMTDtcXG4gXFx0XFx0XFx0fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaFxcbmluZGV4IDkzNTQ3NTk3ZWZkMmEuLmRjZTA3ZmJiNmU3NzMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmhcXG5AQCAtNjI1LDEyICs2MjUsMTQgQEAgbGliZXRoX2NhY2hlbGluZV9zZXRfYXNzZXJ0KHN0cnVjdCBpZHBmX3J4X3F1ZXVlLFxcbiAgKiBAY2xlYW5fYnVkZ2V0OiBzaW5nbGVxIG9ubHksIHF1ZXVlIGNsZWFuaW5nIGJ1ZGdldFxcbiAgKiBAY2xlYW5lZF9wa3RzOiBOdW1iZXIgb2YgcGFja2V0cyBjbGVhbmVkIGZvciB0aGUgYWJvdmUgc2FpZCBjYXNlXFxuICAqIEByZWZpbGxxOiBQb2ludGVyIHRvIHJlZmlsbCBxdWV1ZVxcbisgKiBAY2FjaGVkX3RzdGFtcF9jYXBzOiBUeCB0aW1lc3RhbXAgY2FwYWJpbGl0aWVzIG5lZ290aWF0ZWQgd2l0aCB0aGUgQ1BcXG4rICogQHRzdGFtcF90YXNrOiBXb3JrIHRoYXQgaGFuZGxlcyBUeCB0aW1lc3RhbXAgcmVhZFxcbiAgKiBAcGVuZGluZzogbnVtYmVyIG9mIHBlbmRpbmcgZGVzY3JpcHRvcnMgdG8gc2VuZCBpbiBRQlxcbiAgKiBAeGRwX3R4OiBudW1iZXIgb2YgcGVuZGluZyBcXHUwMDI2eGRwX2J1ZmYgb3IgXFx1MDAyNnhkcF9mcmFtZSBidWZmZXJzXFxuICAqIEB0aW1lcjogdGltZXIgZm9yIFhEUCBUeCBxdWV1ZSBjbGVhbnVwXFxuICAqIEB4ZHBfbG9jazogbG9jayBmb3IgWERQIFR4IHF1ZXVlcyBzaGFyaW5nXFxuLSAqIEBjYWNoZWRfdHN0YW1wX2NhcHM6IFR4IHRpbWVzdGFtcCBjYXBhYmlsaXRpZXMgbmVnb3RpYXRlZCB3aXRoIHRoZSBDUFxcbi0gKiBAdHN0YW1wX3Rhc2s6IFdvcmsgdGhhdCBoYW5kbGVzIFR4IHRpbWVzdGFtcCByZWFkXFxuKyAqIEBwZW5kaW5nX21hc2s6IG1hc2sgb2YgYnVmZmVycyB3YWl0aW5nIGZvciBjb21wbGV0aW9uIGluIHRoZSBGQiBYRFAgbW9kZVxcbisgKiBAbGFzdF9udHU6IEBuZXh0X3RvX3VzZSBmcm9tIHRoZSBwcmV2aW91cyBiYXRjaCBpbiB0aGUgRkIgWERQIG1vZGVcXG4gICogQHN0YXRzX3N5bmM6IFNlZSBzdHJ1Y3QgdTY0X3N0YXRzX3N5bmNcXG4gICogQHFfc3RhdHM6IFNlZSB1bmlvbiBpZHBmX3R4X3F1ZXVlX3N0YXRzXFxuICAqIEBxX2lkOiBRdWV1ZSBpZFxcbkBAIC02ODksNiArNjkxLDkgQEAgc3RydWN0IGlkcGZfdHhfcXVldWUge1xcbiBcXHRcXHRcXHR1MTYgY2xlYW5lZF9wa3RzO1xcbiBcXG4gXFx0XFx0XFx0c3RydWN0IGlkcGZfc3dfcXVldWUgKnJlZmlsbHE7XFxuK1xcbitcXHRcXHRcXHRzdHJ1Y3QgaWRwZl9wdHBfdnBvcnRfdHhfdHN0YW1wX2NhcHMgKmNhY2hlZF90c3RhbXBfY2FwcztcXG4rXFx0XFx0XFx0c3RydWN0IHdvcmtfc3RydWN0ICp0c3RhbXBfdGFzaztcXG4gXFx0XFx0fTtcXG4gXFx0XFx0c3RydWN0IHtcXG4gXFx0XFx0XFx0dTMyIHBlbmRpbmc7XFxuQEAgLTY5NiwxMiArNzAxLDEyIEBAIHN0cnVjdCBpZHBmX3R4X3F1ZXVlIHtcXG4gXFxuIFxcdFxcdFxcdHN0cnVjdCBsaWJldGhfeGRwc3FfdGltZXIgKnRpbWVyO1xcbiBcXHRcXHRcXHRzdHJ1Y3QgbGliZXRoX3hkcHNxX2xvY2sgeGRwX2xvY2s7XFxuK1xcbitcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpwZW5kaW5nX21hc2s7XFxuK1xcdFxcdFxcdHUzMiBsYXN0X250dTtcXG4gXFx0XFx0fTtcXG4gXFx0fTtcXG4gXFxuLVxcdHN0cnVjdCBpZHBmX3B0cF92cG9ydF90eF90c3RhbXBfY2FwcyAqY2FjaGVkX3RzdGFtcF9jYXBzO1xcbi1cXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnRzdGFtcF90YXNrO1xcbi1cXG4gXFx0c3RydWN0IHU2NF9zdGF0c19zeW5jIHN0YXRzX3N5bmM7XFxuIFxcdHN0cnVjdCBpZHBmX3R4X3F1ZXVlX3N0YXRzIHFfc3RhdHM7XFxuIFxcdF9fY2FjaGVsaW5lX2dyb3VwX2VuZF9hbGlnbmVkKHJlYWRfd3JpdGUpO1xcbkBAIC03MTgsOCArNzIzLDcgQEAgc3RydWN0IGlkcGZfdHhfcXVldWUge1xcbiBcXHRfX2NhY2hlbGluZV9ncm91cF9lbmRfYWxpZ25lZChjb2xkKTtcXG4gfTtcXG4gbGliZXRoX2NhY2hlbGluZV9zZXRfYXNzZXJ0KHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCA2NCxcXG4tXFx0XFx0XFx0ICAgIDEwNCArXFxuLVxcdFxcdFxcdCAgICBvZmZzZXRvZihzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgY2FjaGVkX3RzdGFtcF9jYXBzKSAtXFxuK1xcdFxcdFxcdCAgICA5NiArIG9mZnNldG9mKHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCB0c3RhbXBfdGFzaykgLVxcbiBcXHRcXHRcXHQgICAgb2Zmc2V0b2ZlbmQoc3RydWN0IGlkcGZfdHhfcXVldWUsIHRpbWVyKSArXFxuIFxcdFxcdFxcdCAgICBvZmZzZXRvZihzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgcV9zdGF0cykgLVxcbiBcXHRcXHRcXHQgICAgb2Zmc2V0b2ZlbmQoc3RydWN0IGlkcGZfdHhfcXVldWUsIHRzdGFtcF90YXNrKSxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmNcXG5pbmRleCBjYmNjZDQ1NDY3NjgxLi5jNzcxNjYzNjc3YTUyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL3hkcC5jXFxuQEAgLTcsNiArNyw4IEBAXFxuICNpbmNsdWRlIFxcXCJ4ZHAuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInhzay5oXFxcIlxcbiBcXG4rREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoaWRwZl94ZHBfZmIpO1xcbitcXG4gc3RhdGljIGludCBpZHBmX3J4cV9mb3JfZWFjaChjb25zdCBzdHJ1Y3QgaWRwZl9xX3ZlY19yc3JjICpyc3JjLFxcbiBcXHRcXHRcXHQgICAgIGludCAoKmZuKShzdHJ1Y3QgaWRwZl9yeF9xdWV1ZSAqcnhxLCB2b2lkICphcmcpLFxcbiBcXHRcXHRcXHQgICAgIHZvaWQgKmFyZylcXG5AQCAtMTQ5LDEwICsxNTEsMTIgQEAgdm9pZCBpZHBmX3hkcF9jb3B5X3Byb2dfdG9fcnFzKGNvbnN0IHN0cnVjdCBpZHBmX3FfdmVjX3JzcmMgKnJzcmMsXFxuIFxcbiBzdGF0aWMgdm9pZCBpZHBmX3hkcF90eF90aW1lcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbiBcXG4taW50IGlkcGZfeGRwc3FzX2dldChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpXFxuK2ludCBpZHBmX3hkcHNxc19nZXQoc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KVxcbiB7XFxuIFxcdHN0cnVjdCBsaWJldGhfeGRwc3FfdGltZXIgKip0aW1lcnMgX19mcmVlKGt2ZnJlZSkgPSBOVUxMO1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbitcXHR1bnNpZ25lZCBsb25nICoqbWFza3MgX19mcmVlKGt2ZnJlZSkgPSBOVUxMO1xcbitcXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbitcXHRib29sIHdhcm47XFxuIFxcdHUzMiBzcXM7XFxuIFxcbiBcXHRpZiAoIWlkcGZfeGRwX2VuYWJsZWQodnBvcnQpKVxcbkBAIC0xNzYsNiArMTgwLDM0IEBAIGludCBpZHBmX3hkcHNxc19nZXQoY29uc3Qgc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KVxcbiBcXHRkZXYgPSB2cG9ydC1cXHUwMDNlbmV0ZGV2O1xcbiBcXHRzcXMgPSB2cG9ydC1cXHUwMDNlZGZsdF9xdl9yc3JjLnhkcF90eHFfb2Zmc2V0O1xcbiBcXG4rXFx0dnBvcnQtXFx1MDAzZXhkcHNxX2ZiID0gIWlkcGZfaXNfY2FwX2VuYSh2cG9ydC1cXHUwMDNlYWRhcHRlciwgSURQRl9PVEhFUl9DQVBTLFxcbitcXHRcXHRcXHRcXHRcXHQgICBWSVJUQ0hOTDJfQ0FQX1NQTElUUV9RU0NIRUQpO1xcbitcXHRpZiAoIXZwb3J0LVxcdTAwM2V4ZHBzcV9mYilcXG4rXFx0XFx0Z290byBzZXR1cDtcXG4rXFxuK1xcdG1hc2tzID0ga3Z6YWxsb2Nfb2JqcygqbWFza3MsIHZwb3J0LVxcdTAwM2VudW1feGRwX3R4cSk7XFxuK1xcdGlmICghbWFza3MpXFxuK1xcdFxcdGdvdG8gZXJyX21hc2tzO1xcbitcXG4rXFx0Zm9yICh1MzIgaSA9IDA7IGkgXFx1MDAzYyB2cG9ydC1cXHUwMDNlbnVtX3hkcF90eHE7IGkrKykge1xcbitcXHRcXHRtYXNrc1tpXSA9IGJpdG1hcF96YWxsb2Nfbm9kZSh2cG9ydC1cXHUwMDNldHhxc1tzcXMgKyBpXS1cXHUwMDNlZGVzY19jb3VudCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgR0ZQX0tFUk5FTCwgY3B1X3RvX21lbShpKSk7XFxuK1xcdFxcdGlmICghbWFza3NbaV0pIHtcXG4rXFx0XFx0XFx0Zm9yIChpbnQgaiA9IGkgLSAxOyBqIFxcdTAwM2U9IDA7IGotLSlcXG4rXFx0XFx0XFx0XFx0Yml0bWFwX2ZyZWUobWFza3Nbal0pO1xcbitcXG4rXFx0XFx0XFx0Z290byBlcnJfbWFza3M7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0d2FybiA9ICFzdGF0aWNfa2V5X2VuYWJsZWQoXFx1MDAyNmlkcGZfeGRwX2ZiKTtcXG4rXFx0c3RhdGljX2JyYW5jaF9pbmMoXFx1MDAyNmlkcGZfeGRwX2ZiKTtcXG4rXFxuK1xcdGlmICh3YXJuIFxcdTAwMjZcXHUwMDI2IG5ldF9yYXRlbGltaXQoKSlcXG4rXFx0XFx0bmV0ZGV2X3dhcm4oZGV2LFxcbitcXHRcXHRcXHQgICAgXFxcIlRoZSBGVyBkb2Vzbid0IHN1cHBvcnQgVHggaW4gRklGTyBtb2RlLCBYRFAgVHggcGVyZm9ybWFuY2UgbWlnaHQgYmUgc3Vib3B0aW1hbFxcXFxuXFxcIik7XFxuK1xcbitzZXR1cDpcXG4gXFx0Zm9yICh1MzIgaSA9IHNxczsgaSBcXHUwMDNjIHZwb3J0LVxcdTAwM2VudW1fdHhxOyBpKyspIHtcXG4gXFx0XFx0c3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxID0gdnBvcnQtXFx1MDAzZXR4cXNbaV07XFxuIFxcbkBAIC0xODMsOCArMjE1LDggQEAgaW50IGlkcGZfeGRwc3FzX2dldChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpXFxuIFxcdFxcdGtmcmVlKHhkcHNxLVxcdTAwM2VyZWZpbGxxKTtcXG4gXFx0XFx0eGRwc3EtXFx1MDAzZXJlZmlsbHEgPSBOVUxMO1xcbiBcXG4tXFx0XFx0aWRwZl9xdWV1ZV9jbGVhcihGTE9XX1NDSF9FTiwgeGRwc3EpO1xcbi1cXHRcXHRpZHBmX3F1ZXVlX2NsZWFyKEZMT1dfU0NIX0VOLCB4ZHBzcS1cXHUwMDNlY29tcGxxKTtcXG4rXFx0XFx0aWRwZl9xdWV1ZV9hc3NpZ24oRkxPV19TQ0hfRU4sIHhkcHNxLCB2cG9ydC1cXHUwMDNleGRwc3FfZmIpO1xcbitcXHRcXHRpZHBmX3F1ZXVlX2Fzc2lnbihGTE9XX1NDSF9FTiwgeGRwc3EtXFx1MDAzZWNvbXBscSwgdnBvcnQtXFx1MDAzZXhkcHNxX2ZiKTtcXG4gXFx0XFx0aWRwZl9xdWV1ZV9zZXQoTk9JUlEsIHhkcHNxKTtcXG4gXFx0XFx0aWRwZl9xdWV1ZV9zZXQoWERQLCB4ZHBzcSk7XFxuIFxcdFxcdGlkcGZfcXVldWVfc2V0KFhEUCwgeGRwc3EtXFx1MDAzZWNvbXBscSk7XFxuQEAgLTE5NywxMiArMjI5LDI1IEBAIGludCBpZHBmX3hkcHNxc19nZXQoY29uc3Qgc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KVxcbiBcXHRcXHR4ZHBzcS1cXHUwMDNlcGVuZGluZyA9IDA7XFxuIFxcdFxcdHhkcHNxLVxcdTAwM2V4ZHBfdHggPSAwO1xcbiBcXHRcXHR4ZHBzcS1cXHUwMDNldGhyZXNoID0gbGliZXRoX3hkcF9xdWV1ZV90aHJlc2hvbGQoeGRwc3EtXFx1MDAzZWRlc2NfY291bnQpO1xcbitcXG4rXFx0XFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNmlkcGZfeGRwX2ZiKSBcXHUwMDI2XFx1MDAyNiB2cG9ydC1cXHUwMDNleGRwc3FfZmIpIHtcXG4rXFx0XFx0XFx0eGRwc3EtXFx1MDAzZXBlbmRpbmdfbWFzayA9IG1hc2tzW2kgLSBzcXNdO1xcbitcXHRcXHRcXHR4ZHBzcS1cXHUwMDNlbGFzdF9udHUgPSAwO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbitcXG4rZXJyX21hc2tzOlxcbitcXHR2cG9ydC1cXHUwMDNleGRwc3FfZmIgPSBmYWxzZTtcXG4rXFxuK1xcdGZvciAodTMyIGkgPSAwOyBpIFxcdTAwM2MgdnBvcnQtXFx1MDAzZW51bV94ZHBfdHhxOyBpKyspXFxuK1xcdFxcdGtmcmVlKHRpbWVyc1tpXSk7XFxuK1xcbitcXHRyZXR1cm4gLUVOT01FTTtcXG4gfVxcbiBcXG4tdm9pZCBpZHBmX3hkcHNxc19wdXQoY29uc3Qgc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KVxcbit2b2lkIGlkcGZfeGRwc3FzX3B1dChzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpXFxuIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4gXFx0dTMyIHNxcztcXG5AQCAtMjIyLDEwICsyNjcsMjMgQEAgdm9pZCBpZHBmX3hkcHNxc19wdXQoY29uc3Qgc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KVxcbiBcXHRcXHRsaWJldGhfeGRwc3FfZGVpbml0X3RpbWVyKHhkcHNxLVxcdTAwM2V0aW1lcik7XFxuIFxcdFxcdGxpYmV0aF94ZHBzcV9wdXQoXFx1MDAyNnhkcHNxLVxcdTAwM2V4ZHBfbG9jaywgZGV2KTtcXG4gXFxuK1xcdFxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZpZHBmX3hkcF9mYikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCB4ZHBzcSkpIHtcXG4rXFx0XFx0XFx0Yml0bWFwX2ZyZWUoeGRwc3EtXFx1MDAzZXBlbmRpbmdfbWFzayk7XFxuK1xcdFxcdFxcdHhkcHNxLVxcdTAwM2VwZW5kaW5nX21hc2sgPSBOVUxMO1xcbitcXHRcXHRcXHR4ZHBzcS1cXHUwMDNlbGFzdF9udHUgPSAwO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRrZnJlZSh4ZHBzcS1cXHUwMDNldGltZXIpO1xcbiBcXHRcXHR4ZHBzcS1cXHUwMDNlcmVmaWxscSA9IE5VTEw7XFxuIFxcdFxcdGlkcGZfcXVldWVfY2xlYXIoTk9JUlEsIHhkcHNxKTtcXG4gXFx0fVxcbitcXG4rXFx0aWYgKCF2cG9ydC1cXHUwMDNleGRwc3FfZmIpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHN0YXRpY19icmFuY2hfZGVjKFxcdTAwMjZpZHBmX3hkcF9mYik7XFxuK1xcdHZwb3J0LVxcdTAwM2V4ZHBzcV9mYiA9IGZhbHNlO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGlkcGZfeGRwX3BhcnNlX2NxZShjb25zdCBzdHJ1Y3QgaWRwZl9zcGxpdHFfNGJfdHhfY29tcGxfZGVzYyAqZGVzYyxcXG5AQCAtMjUwLDYgKzMwOCw2NSBAQCBzdGF0aWMgaW50IGlkcGZfeGRwX3BhcnNlX2NxZShjb25zdCBzdHJ1Y3QgaWRwZl9zcGxpdHFfNGJfdHhfY29tcGxfZGVzYyAqZGVzYyxcXG4gXFx0cmV0dXJuIHVwcGVyXzE2X2JpdHModmFsKTtcXG4gfVxcbiBcXG4rc3RhdGljIHUzMiBpZHBmX3hkcHNxX3BvbGxfZmIoc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxLCB1MzIgYnVkZ2V0KVxcbit7XFxuK1xcdHN0cnVjdCBpZHBmX2NvbXBsX3F1ZXVlICpjcSA9IHhkcHNxLVxcdTAwM2Vjb21wbHE7XFxuK1xcdHVuc2lnbmVkIGxvbmcgKm1hc2sgPSB4ZHBzcS1cXHUwMDNlcGVuZGluZ19tYXNrO1xcbitcXHR1MzIgZG9uZV9mcmFtZXMsIHR4X2NudCwgbmV3X250YztcXG4rXFx0dTMyIG50YyA9IGNxLVxcdTAwM2VuZXh0X3RvX2NsZWFuO1xcbitcXHR1MzIgY250ID0gY3EtXFx1MDAzZWRlc2NfY291bnQ7XFxuK1xcdGJvb2wgZ2VuO1xcbitcXG4rXFx0Z2VuID0gaWRwZl9xdWV1ZV9oYXMoR0VOX0NISywgY3EpO1xcbitcXG4rXFx0Zm9yIChkb25lX2ZyYW1lcyA9IDA7IGRvbmVfZnJhbWVzIFxcdTAwM2MgYnVkZ2V0OyApIHtcXG4rXFx0XFx0aW50IHJldDtcXG4rXFxuK1xcdFxcdHJldCA9IGlkcGZfeGRwX3BhcnNlX2NxZShcXHUwMDI2Y3EtXFx1MDAzZWNvbXBbbnRjXS5jb21tb24sIGdlbik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzZT0gMCkge1xcbitcXHRcXHRcXHRfX2NsZWFyX2JpdChyZXQsIG1hc2spO1xcbitcXHRcXHRcXHRkb25lX2ZyYW1lcysrO1xcbitcXG4rXFx0XFx0XFx0Z290byBuZXh0O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRzd2l0Y2ggKHJldCkge1xcbitcXHRcXHRjYXNlIC1FTk9EQVRBOlxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0Y2FzZSAtRUlOVkFMOlxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXG4rbmV4dDpcXG4rXFx0XFx0aWYgKHVubGlrZWx5KCsrbnRjID09IGNudCkpIHtcXG4rXFx0XFx0XFx0bnRjID0gMDtcXG4rXFx0XFx0XFx0Z2VuID0gIWdlbjtcXG4rXFx0XFx0XFx0aWRwZl9xdWV1ZV9jaGFuZ2UoR0VOX0NISywgY3EpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK291dDpcXG4rXFx0Y3EtXFx1MDAzZW5leHRfdG9fY2xlYW4gPSBudGM7XFxuK1xcbitcXHRpZiAodW5saWtlbHkoIWRvbmVfZnJhbWVzKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHR0eF9jbnQgPSB4ZHBzcS1cXHUwMDNlZGVzY19jb3VudDtcXG4rXFxuK1xcdC8qIERvbid0IGdvIHBhc3QgbmV4dF90b191c2UgKi9cXG4rXFx0X19zZXRfYml0KHhkcHNxLVxcdTAwM2VuZXh0X3RvX3VzZSwgbWFzayk7XFxuK1xcbitcXHRuZXdfbnRjID0gZmluZF9uZXh0X2JpdChtYXNrLCB0eF9jbnQsIHhkcHNxLVxcdTAwM2VuZXh0X3RvX2NsZWFuKTtcXG4rXFx0ZG9uZV9mcmFtZXMgPSBuZXdfbnRjIC0geGRwc3EtXFx1MDAzZW5leHRfdG9fY2xlYW47XFxuK1xcbitcXHRpZiAobmV3X250YyA9PSB0eF9jbnQpXFxuK1xcdFxcdGRvbmVfZnJhbWVzICs9IGZpbmRfZmlyc3RfYml0KG1hc2ssIHR4X2NudCk7XFxuK1xcbitcXHRfX2NsZWFyX2JpdCh4ZHBzcS1cXHUwMDNlbmV4dF90b191c2UsIG1hc2spO1xcbitcXG4rXFx0cmV0dXJuIGRvbmVfZnJhbWVzO1xcbit9XFxuK1xcbiB1MzIgaWRwZl94ZHBzcV9wb2xsKHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp4ZHBzcSwgdTMyIGJ1ZGdldClcXG4ge1xcbiBcXHRzdHJ1Y3QgaWRwZl9jb21wbF9xdWV1ZSAqY3EgPSB4ZHBzcS1cXHUwMDNlY29tcGxxO1xcbkBAIC0yNjAsNiArMzc3LDEwIEBAIHUzMiBpZHBmX3hkcHNxX3BvbGwoc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxLCB1MzIgYnVkZ2V0KVxcbiBcXHR1MzIgZG9uZV9mcmFtZXM7XFxuIFxcdGJvb2wgZ2VuO1xcbiBcXG4rXFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNmlkcGZfeGRwX2ZiKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHhkcHNxKSlcXG4rXFx0XFx0cmV0dXJuIGlkcGZfeGRwc3FfcG9sbF9mYih4ZHBzcSwgYnVkZ2V0KTtcXG4rXFxuIFxcdGdlbiA9IGlkcGZfcXVldWVfaGFzKEdFTl9DSEssIGNxKTtcXG4gXFxuIFxcdGZvciAoZG9uZV9mcmFtZXMgPSAwOyBkb25lX2ZyYW1lcyBcXHUwMDNjIGJ1ZGdldDsgKSB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL3hkcC5oXFxuaW5kZXggNjNlNTZmN2Q0M2UwMC4uOTVlNDdlYTJjY2JhOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL3hkcC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuaFxcbkBAIC04LDYgKzgsMTAgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJpZHBmX3R4cnguaFxcXCJcXG4gXFxuK3N0cnVjdCBpZHBmX3FfdmVjX3JzcmM7XFxuK1xcbitERUNMQVJFX1NUQVRJQ19LRVlfRkFMU0UoaWRwZl94ZHBfZmIpO1xcbitcXG4gaW50IGlkcGZfeGRwX3J4cV9pbmZvX2luaXQoc3RydWN0IGlkcGZfcnhfcXVldWUgKnJ4cSk7XFxuIGludCBpZHBmX3hkcF9yeHFfaW5mb19pbml0X2FsbChjb25zdCBzdHJ1Y3QgaWRwZl9xX3ZlY19yc3JjICpyc3JjKTtcXG4gdm9pZCBpZHBmX3hkcF9yeHFfaW5mb19kZWluaXQoc3RydWN0IGlkcGZfcnhfcXVldWUgKnJ4cSwgdTMyIG1vZGVsKTtcXG5AQCAtMTUsMTIgKzE5LDQwIEBAIHZvaWQgaWRwZl94ZHBfcnhxX2luZm9fZGVpbml0X2FsbChjb25zdCBzdHJ1Y3QgaWRwZl9xX3ZlY19yc3JjICpyc3JjKTtcXG4gdm9pZCBpZHBmX3hkcF9jb3B5X3Byb2dfdG9fcnFzKGNvbnN0IHN0cnVjdCBpZHBmX3FfdmVjX3JzcmMgKnJzcmMsXFxuIFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nKTtcXG4gXFxuLWludCBpZHBmX3hkcHNxc19nZXQoY29uc3Qgc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KTtcXG4tdm9pZCBpZHBmX3hkcHNxc19wdXQoY29uc3Qgc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KTtcXG4raW50IGlkcGZfeGRwc3FzX2dldChzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpO1xcbit2b2lkIGlkcGZfeGRwc3FzX3B1dChzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpO1xcbiBcXG4gdTMyIGlkcGZfeGRwc3FfcG9sbChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EsIHUzMiBidWRnZXQpO1xcbiBib29sIGlkcGZfeGRwX3R4X2ZsdXNoX2J1bGsoc3RydWN0IGxpYmV0aF94ZHBfdHhfYnVsayAqYnEsIHUzMiBmbGFncyk7XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBfdHhfeG1pdF9mYihzdHJ1Y3QgbGliZXRoX3hkcF90eF9kZXNjIGRlc2MsIHUzMiBpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGxpYmV0aF94ZHBzcSAqc3EsIHU2NCBwcml2KVxcbit7XFxuK1xcdHN0cnVjdCBpZHBmX2ZsZXhfdHhfc2NoZWRfZGVzYyAqdHhfZGVzYyA9IHNxLVxcdTAwM2VkZXNjcztcXG4rXFx0dTMyIGNtZDtcXG4rXFxuK1xcdGNtZCA9IEZJRUxEX1BSRVAoSURQRl9UWERfRkxFWF9GTE9XX0RUWVBFX00sXFxuK1xcdFxcdFxcdCBJRFBGX1RYX0RFU0NfRFRZUEVfRkxFWF9GTE9XX1NDSEUpO1xcbitcXHRpZiAoZGVzYy5mbGFncyBcXHUwMDI2IExJQkVUSF9YRFBfVFhfTEFTVClcXG4rXFx0XFx0Y21kIHw9IElEUEZfVFhEX0ZMRVhfRkxPV19DTURfRU9QO1xcbitcXHRpZiAocHJpdiBcXHUwMDI2XFx1MDAyNiAoZGVzYy5mbGFncyBcXHUwMDI2IExJQkVUSF9YRFBfVFhfQ1NVTSkpXFxuK1xcdFxcdGNtZCB8PSBJRFBGX1RYRF9GTEVYX0ZMT1dfQ01EX0NTX0VOO1xcbitcXG4rXFx0dHhfZGVzYyA9IFxcdTAwMjZ0eF9kZXNjW2ldO1xcbitcXHR0eF9kZXNjLVxcdTAwM2VidWZfYWRkciA9IGNwdV90b19sZTY0KGRlc2MuYWRkcik7XFxuK1xcbisjaWZkZWYgX19MSUJFVEhfV09SRF9BQ0NFU1NcXG4rXFx0Kih1NjQgKilcXHUwMDI2dHhfZGVzYy1cXHUwMDNlcXcxID0gKCh1NjQpZGVzYy5sZW4gXFx1MDAzY1xcdTAwM2MgNDgpIHwgKCh1NjQpaSBcXHUwMDNjXFx1MDAzYyAzMikgfCBjbWQ7XFxuKyNlbHNlXFxuK1xcdHR4X2Rlc2MtXFx1MDAzZXF3MS5yeHJfYnVmc2l6ZSA9IGNwdV90b19sZTE2KGRlc2MubGVuKTtcXG4rXFx0dHhfZGVzYy1cXHUwMDNlcXcxLmNvbXBsX3RhZyA9IGNwdV90b19sZTE2KGkpO1xcbitcXHR0eF9kZXNjLVxcdTAwM2VxdzEudHNbMF0gPSAwO1xcbitcXHR0eF9kZXNjLVxcdTAwM2VxdzEudHNbMV0gPSAwO1xcbitcXHR0eF9kZXNjLVxcdTAwM2VxdzEudHNbMl0gPSAwO1xcbitcXHR0eF9kZXNjLVxcdTAwM2VxdzEuY21kX2R0eXBlID0gY21kO1xcbisjZW5kaWZcXG4rfVxcbitcXG4gLyoqXFxuICAqIGlkcGZfeGRwX3R4X3htaXQgLSBwcm9kdWNlIGEgc2luZ2xlIEhXIFR4IGRlc2NyaXB0b3Igb3V0IG9mIFhEUCBkZXNjXFxuICAqIEBkZXNjOiBYRFAgZGVzY3JpcHRvciB0byBwdWxsIHRoZSBETUEgYWRkcmVzcyBhbmQgbGVuZ3RoIGZyb21cXG5AQCAtMzQsNiArNjYsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwX3R4X3htaXQoc3RydWN0IGxpYmV0aF94ZHBfdHhfZGVzYyBkZXNjLCB1MzIgaSxcXG4gXFx0c3RydWN0IGlkcGZfZmxleF90eF9kZXNjICp0eF9kZXNjID0gc3EtXFx1MDAzZWRlc2NzO1xcbiBcXHR1MzIgY21kO1xcbiBcXG4rXFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNmlkcGZfeGRwX2ZiKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sXFxuK1xcdFxcdFxcdCAgIGxpYmV0aF94ZHBzcV90b19zcShzcSwgc3RydWN0IGlkcGZfdHhfcXVldWUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIG5leHRfdG9fdXNlKSkpIHtcXG4rXFx0XFx0aWRwZl94ZHBfdHhfeG1pdF9mYihkZXNjLCBpLCBzcSwgcHJpdik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4gXFx0Y21kID0gRklFTERfUFJFUChJRFBGX0ZMRVhfVFhEX1FXMV9EVFlQRV9NLFxcbiBcXHRcXHRcXHQgSURQRl9UWF9ERVNDX0RUWVBFX0ZMRVhfTDJUQUcxX0wyVEFHMik7XFxuIFxcdGlmIChkZXNjLmZsYWdzIFxcdTAwMjYgTElCRVRIX1hEUF9UWF9MQVNUKVxcbkBAIC01MywxMiArOTMsMzQgQEAgc3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwX3R4X3htaXQoc3RydWN0IGxpYmV0aF94ZHBfdHhfZGVzYyBkZXNjLCB1MzIgaSxcXG4gI2VuZGlmXFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcHNxX3NldF9ycyhjb25zdCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EpXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcHNxX3NldF9yc19mYihzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EpXFxuK3tcXG4rXFx0dTMyIG50dSA9IHhkcHNxLVxcdTAwM2VuZXh0X3RvX3VzZTtcXG4rXFx0dTMyIG9sZCA9IHhkcHNxLVxcdTAwM2VsYXN0X250dTtcXG4rXFxuK1xcdGlmIChvbGQgXFx1MDAzZSBudHUpIHtcXG4rXFx0XFx0Yml0bWFwX3NldCh4ZHBzcS1cXHUwMDNlcGVuZGluZ19tYXNrLCBvbGQsIHhkcHNxLVxcdTAwM2VkZXNjX2NvdW50IC0gb2xkKTtcXG4rXFx0XFx0aWYgKG50dSlcXG4rXFx0XFx0XFx0Yml0bWFwX3NldCh4ZHBzcS1cXHUwMDNlcGVuZGluZ19tYXNrLCAwLCBudHUpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRiaXRtYXBfc2V0KHhkcHNxLVxcdTAwM2VwZW5kaW5nX21hc2ssIG9sZCwgbnR1IC0gb2xkKTtcXG4rXFx0fVxcbitcXG4rXFx0eGRwc3EtXFx1MDAzZWxhc3RfbnR1ID0gbnR1O1xcbit9XFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgaWRwZl94ZHBzcV9zZXRfcnMoc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxKVxcbiB7XFxuIFxcdHUzMiBudHUsIGNtZDtcXG4gXFxuK1xcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZpZHBmX3hkcF9mYikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCB4ZHBzcSkpIHtcXG4rXFx0XFx0aWRwZl94ZHBzcV9zZXRfcnNfZmIoeGRwc3EpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuIFxcdG50dSA9IHhkcHNxLVxcdTAwM2VuZXh0X3RvX3VzZTtcXG4tXFx0aWYgKHVubGlrZWx5KCFudHUpKVxcbitcXHRpZiAoIW50dSlcXG4gXFx0XFx0bnR1ID0geGRwc3EtXFx1MDAzZWRlc2NfY291bnQ7XFxuIFxcbiBcXHRjbWQgPSBGSUVMRF9QUkVQKElEUEZfRkxFWF9UWERfUVcxX0NNRF9NLCBJRFBGX1RYX0RFU0NfQ01EX1JTKTtcXG5AQCAtODQsNyArMTQ2LDggQEAgc3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwc3FfdXBkYXRlX3RhaWwoY29uc3Qgc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxKVxcbiAgKiBTZXQgdGhlIFJTIGJpdCAoXFxcImVuZCBvZiBiYXRjaFxcXCIpLCBidW1wIHRoZSB0YWlsLCBhbmQgcXVldWUgdGhlIGNsZWFudXAgdGltZXIuXFxuICAqIFRvIGJlIGNhbGxlZCBhZnRlciBhIE5BUEkgcG9sbGluZyBsb29wLCBhdCB0aGUgZW5kIG9mIC5uZG9feGRwX3htaXQoKSBldGMuXFxuICAqL1xcbi1zdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBfdHhfZmluYWxpemUodm9pZCAqX3hkcHNxLCBib29sIHNlbnQsIGJvb2wgZmx1c2gpXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBpZHBmX3hkcF90eF9maW5hbGl6ZSh2b2lkICpfeGRwc3EsIGJvb2wgc2VudCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IGJvb2wgZmx1c2gpXFxuIHtcXG4gXFx0c3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxID0gX3hkcHNxO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbGliZXRoL3hkcC5oIGIvaW5jbHVkZS9uZXQvbGliZXRoL3hkcC5oXFxuaW5kZXggODk4NzIzYWI2MmU4MS4uZWQ2MWQ4M2JkYTJkNyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9saWJldGgveGRwLmhcXG4rKysgYi9pbmNsdWRlL25ldC9saWJldGgveGRwLmhcXG5AQCAtNDMwLDYgKzQzMCwxOSBAQCBzdHJ1Y3QgbGliZXRoX3hkcHNxIHtcXG4gXFx0c3RydWN0IGxpYmV0aF94ZHBzcV9sb2NrXFx0KmxvY2s7XFxuIH07XFxuIFxcbisvKipcXG4rICogbGliZXRoX3hkcHNxX3RvX3NxIC0gZ2V0IFNRIHBvaW50ZXIgZnJvbSBhbiBYRFBTUSBwb2ludGVyXFxuKyAqIEB4ZHBzcTogXFx1MDAyNmxpYmV0aF94ZHBzcSBjb3JyZXNwb25kaW5nIHRvIHRoZSBxdWV1ZVxcbisgKiBAdHlwZTogdHlwZW9mKCkgb2YgdGhlIGRyaXZlciBUeCBxdWV1ZSBzdHJ1Y3R1cmVcXG4rICogQG1lbWJlcjogbmFtZSBvZiB0aGUgTlRVIGZpZWxkIGluc2lkZSBAdHlwZVxcbisgKlxcbisgKiBTb21lIG9mIHRoZSBzZW5kaW5nIGNhbGxiYWNrcyB0YWtlIG9ubHkgXFx1MDAyNmxpYmV0aF94ZHBzcSBwb2ludGVyIGFuZCBubyBwb2ludGVyXFxuKyAqIHRvIHRoZSBhY3R1YWwgZHJpdmVyIFR4IHF1ZXVlIHN0cnVjdHVyZS4gVXNlIHRoaXMgaGVscGVyIHRvIHF1aWNrbHkganVtcCB0b1xcbisgKiB0aGUgbGF0dGVyIHdoZW4gbmVlZGVkLlxcbisgKi9cXG4rI2RlZmluZSBsaWJldGhfeGRwc3FfdG9fc3EoeGRwc3EsIHR5cGUsIG1lbWJlcilcXHRcXHRcXHRcXHQgICAgICBcXFxcXFxuK1xcdGNvbnRhaW5lcl9vZl9jb25zdCgoeGRwc3EpLVxcdTAwM2VudHUsIHR5cGUsIG1lbWJlcilcXG4rXFxuIC8qKlxcbiAgKiBzdHJ1Y3QgbGliZXRoX3hkcF90eF9kZXNjIC0gYWJzdHJhY3Rpb24gZm9yIGFuIFhEUCBUeCBkZXNjcmlwdG9yXFxuICAqIEBhZGRyOiBETUEgYWRkcmVzcyBvZiB0aGUgZnJhbWVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MDY6MDIuMDkyNzA2OTA3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjEyNzc4NzQxMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBJbmZyYXN0cnVjdHVyZSBEYXRhIFBhdGggRnVuY3Rpb24gKGlkcGYpIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBTbWFydE5JQy9JUFUgZHJpdmVyLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBtYWtpbmcgaXQgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiM2ZjYjY4YmM2MDczYjUwOGExYjZjNjI2NjgxNmZhYzBkNmY4ODRjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTg6MDY6MDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oXG5pbmRleCA0NzBiYzIzYzg0NGMxLi4xZTg5N2UxMzFjYjI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oXG5AQCAtMzgzLDYgKzM4Myw3IEBAIHN0cnVjdCBpZHBmX3Zwb3J0IHtcbiBcdHN0cnVjdCBpZHBmX3R4X3F1ZXVlICoqdHhxcztcbiBcdHUxNiBudW1fdHhxO1xuIFx0dTE2IG51bV94ZHBfdHhxO1xuK1x0Ym9vbCB4ZHBzcV9mYjtcbiBcdGJvb2wgeGRwc3Ffc2hhcmU7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jXG5pbmRleCBjM2ZmYjQ0NTI5N2Y4Li43NDMzOTU5NjIwNzdkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY1xuQEAgLTIyNyw3ICsyMjcsNyBAQCBzdGF0aWMgaW50IGlkcGZfdHhfZGVzY19hbGxvYyhjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQsXG4gXG4gXHRpZHBmX3hza19zZXR1cF9xdWV1ZSh2cG9ydCwgdHhfcSwgVklSVENITkwyX1FVRVVFX1RZUEVfVFgpO1xuIFxuLVx0aWYgKCFpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgdHhfcSkpXG4rXHRpZiAoIWlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCB0eF9xKSB8fCBpZHBmX3F1ZXVlX2hhcyhYRFAsIHR4X3EpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdHJlZmlsbHEgPSB0eF9xLVx1MDAzZXJlZmlsbHE7XG5AQCAtMTA1NSw2ICsxMDU1LDEzIEBAIHN0YXRpYyB2b2lkIGlkcGZfY2xlYW5fcXVldWVfc2V0KGNvbnN0IHN0cnVjdCBpZHBmX3F1ZXVlX3NldCAqcXMpXG4gXHRcdFx0aWYgKGlkcGZfcXVldWVfaGFzKFhEUCwgcS1cdTAwM2V0eHEpKSB7XG4gXHRcdFx0XHRxLVx1MDAzZXR4cS1cdTAwM2VwZW5kaW5nID0gMDtcbiBcdFx0XHRcdHEtXHUwMDNldHhxLVx1MDAzZXhkcF90eCA9IDA7XG4rXG4rXHRcdFx0XHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZpZHBmX3hkcF9mYikgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHEtXHUwMDNldHhxKSkge1xuK1x0XHRcdFx0XHRiaXRtYXBfemVybyhxLVx1MDAzZXR4cS1cdTAwM2VwZW5kaW5nX21hc2ssXG4rXHRcdFx0XHRcdFx0ICAgIHEtXHUwMDNldHhxLVx1MDAzZWRlc2NfY291bnQpO1xuK1x0XHRcdFx0XHRxLVx1MDAzZXR4cS1cdTAwM2VsYXN0X250dSA9IDA7XG4rXHRcdFx0XHR9XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdHEtXHUwMDNldHhxLVx1MDAzZXR4cV9ncnAtXHUwMDNlbnVtX2NvbXBsZXRpb25zX3BlbmRpbmcgPSAwO1xuIFx0XHRcdH1cbkBAIC0xMzE3LDcgKzEzMjQsOCBAQCBzdGF0aWMgdm9pZCBpZHBmX3R4cV9ncm91cF9yZWwoc3RydWN0IGlkcGZfcV92ZWNfcnNyYyAqcnNyYylcbiBcdFx0XHRpZiAoIXR4cV9ncnAtXHUwMDNldHhxc1tqXSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdGlmIChpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgdHhxX2dycC1cdTAwM2V0eHFzW2pdKSkge1xuK1x0XHRcdGlmIChpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgdHhxX2dycC1cdTAwM2V0eHFzW2pdKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgIWlkcGZfcXVldWVfaGFzKFhEUCwgdHhxX2dycC1cdTAwM2V0eHFzW2pdKSkge1xuIFx0XHRcdFx0a2ZyZWUodHhxX2dycC1cdTAwM2V0eHFzW2pdLVx1MDAzZXJlZmlsbHEpO1xuIFx0XHRcdFx0dHhxX2dycC1cdTAwM2V0eHFzW2pdLVx1MDAzZXJlZmlsbHEgPSBOVUxMO1xuIFx0XHRcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaFxuaW5kZXggOTM1NDc1OTdlZmQyYS4uZGNlMDdmYmI2ZTc3MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmhcbkBAIC02MjUsMTIgKzYyNSwxNCBAQCBsaWJldGhfY2FjaGVsaW5lX3NldF9hc3NlcnQoc3RydWN0IGlkcGZfcnhfcXVldWUsXG4gICogQGNsZWFuX2J1ZGdldDogc2luZ2xlcSBvbmx5LCBxdWV1ZSBjbGVhbmluZyBidWRnZXRcbiAgKiBAY2xlYW5lZF9wa3RzOiBOdW1iZXIgb2YgcGFja2V0cyBjbGVhbmVkIGZvciB0aGUgYWJvdmUgc2FpZCBjYXNlXG4gICogQHJlZmlsbHE6IFBvaW50ZXIgdG8gcmVmaWxsIHF1ZXVlXG4rICogQGNhY2hlZF90c3RhbXBfY2FwczogVHggdGltZXN0YW1wIGNhcGFiaWxpdGllcyBuZWdvdGlhdGVkIHdpdGggdGhlIENQXG4rICogQHRzdGFtcF90YXNrOiBXb3JrIHRoYXQgaGFuZGxlcyBUeCB0aW1lc3RhbXAgcmVhZFxuICAqIEBwZW5kaW5nOiBudW1iZXIgb2YgcGVuZGluZyBkZXNjcmlwdG9ycyB0byBzZW5kIGluIFFCXG4gICogQHhkcF90eDogbnVtYmVyIG9mIHBlbmRpbmcgXHUwMDI2eGRwX2J1ZmYgb3IgXHUwMDI2eGRwX2ZyYW1lIGJ1ZmZlcnNcbiAgKiBAdGltZXI6IHRpbWVyIGZvciBYRFAgVHggcXVldWUgY2xlYW51cFxuICAqIEB4ZHBfbG9jazogbG9jayBmb3IgWERQIFR4IHF1ZXVlcyBzaGFyaW5nXG4tICogQGNhY2hlZF90c3RhbXBfY2FwczogVHggdGltZXN0YW1wIGNhcGFiaWxpdGllcyBuZWdvdGlhdGVkIHdpdGggdGhlIENQXG4tICogQHRzdGFtcF90YXNrOiBXb3JrIHRoYXQgaGFuZGxlcyBUeCB0aW1lc3RhbXAgcmVhZFxuKyAqIEBwZW5kaW5nX21hc2s6IG1hc2sgb2YgYnVmZmVycyB3YWl0aW5nIGZvciBjb21wbGV0aW9uIGluIHRoZSBGQiBYRFAgbW9kZVxuKyAqIEBsYXN0X250dTogQG5leHRfdG9fdXNlIGZyb20gdGhlIHByZXZpb3VzIGJhdGNoIGluIHRoZSBGQiBYRFAgbW9kZVxuICAqIEBzdGF0c19zeW5jOiBTZWUgc3RydWN0IHU2NF9zdGF0c19zeW5jXG4gICogQHFfc3RhdHM6IFNlZSB1bmlvbiBpZHBmX3R4X3F1ZXVlX3N0YXRzXG4gICogQHFfaWQ6IFF1ZXVlIGlkXG5AQCAtNjg5LDYgKzY5MSw5IEBAIHN0cnVjdCBpZHBmX3R4X3F1ZXVlIHtcbiBcdFx0XHR1MTYgY2xlYW5lZF9wa3RzO1xuIFxuIFx0XHRcdHN0cnVjdCBpZHBmX3N3X3F1ZXVlICpyZWZpbGxxO1xuK1xuK1x0XHRcdHN0cnVjdCBpZHBmX3B0cF92cG9ydF90eF90c3RhbXBfY2FwcyAqY2FjaGVkX3RzdGFtcF9jYXBzO1xuK1x0XHRcdHN0cnVjdCB3b3JrX3N0cnVjdCAqdHN0YW1wX3Rhc2s7XG4gXHRcdH07XG4gXHRcdHN0cnVjdCB7XG4gXHRcdFx0dTMyIHBlbmRpbmc7XG5AQCAtNjk2LDEyICs3MDEsMTIgQEAgc3RydWN0IGlkcGZfdHhfcXVldWUge1xuIFxuIFx0XHRcdHN0cnVjdCBsaWJldGhfeGRwc3FfdGltZXIgKnRpbWVyO1xuIFx0XHRcdHN0cnVjdCBsaWJldGhfeGRwc3FfbG9jayB4ZHBfbG9jaztcbitcbitcdFx0XHR1bnNpZ25lZCBsb25nICpwZW5kaW5nX21hc2s7XG4rXHRcdFx0dTMyIGxhc3RfbnR1O1xuIFx0XHR9O1xuIFx0fTtcbiBcbi1cdHN0cnVjdCBpZHBmX3B0cF92cG9ydF90eF90c3RhbXBfY2FwcyAqY2FjaGVkX3RzdGFtcF9jYXBzO1xuLVx0c3RydWN0IHdvcmtfc3RydWN0ICp0c3RhbXBfdGFzaztcbi1cbiBcdHN0cnVjdCB1NjRfc3RhdHNfc3luYyBzdGF0c19zeW5jO1xuIFx0c3RydWN0IGlkcGZfdHhfcXVldWVfc3RhdHMgcV9zdGF0cztcbiBcdF9fY2FjaGVsaW5lX2dyb3VwX2VuZF9hbGlnbmVkKHJlYWRfd3JpdGUpO1xuQEAgLTcxOCw4ICs3MjMsNyBAQCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSB7XG4gXHRfX2NhY2hlbGluZV9ncm91cF9lbmRfYWxpZ25lZChjb2xkKTtcbiB9O1xuIGxpYmV0aF9jYWNoZWxpbmVfc2V0X2Fzc2VydChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgNjQsXG4tXHRcdFx0ICAgIDEwNCArXG4tXHRcdFx0ICAgIG9mZnNldG9mKHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCBjYWNoZWRfdHN0YW1wX2NhcHMpIC1cbitcdFx0XHQgICAgOTYgKyBvZmZzZXRvZihzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgdHN0YW1wX3Rhc2spIC1cbiBcdFx0XHQgICAgb2Zmc2V0b2ZlbmQoc3RydWN0IGlkcGZfdHhfcXVldWUsIHRpbWVyKSArXG4gXHRcdFx0ICAgIG9mZnNldG9mKHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCBxX3N0YXRzKSAtXG4gXHRcdFx0ICAgIG9mZnNldG9mZW5kKHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCB0c3RhbXBfdGFzayksXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmNcbmluZGV4IGNiY2NkNDU0Njc2ODEuLmM3NzE2NjM2NzdhNTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL3hkcC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL3hkcC5jXG5AQCAtNyw2ICs3LDggQEBcbiAjaW5jbHVkZSBcInhkcC5oXCJcbiAjaW5jbHVkZSBcInhzay5oXCJcbiBcbitERUZJTkVfU1RBVElDX0tFWV9GQUxTRShpZHBmX3hkcF9mYik7XG4rXG4gc3RhdGljIGludCBpZHBmX3J4cV9mb3JfZWFjaChjb25zdCBzdHJ1Y3QgaWRwZl9xX3ZlY19yc3JjICpyc3JjLFxuIFx0XHRcdCAgICAgaW50ICgqZm4pKHN0cnVjdCBpZHBmX3J4X3F1ZXVlICpyeHEsIHZvaWQgKmFyZyksXG4gXHRcdFx0ICAgICB2b2lkICphcmcpXG5AQCAtMTQ5LDEwICsxNTEsMTIgQEAgdm9pZCBpZHBmX3hkcF9jb3B5X3Byb2dfdG9fcnFzKGNvbnN0IHN0cnVjdCBpZHBmX3FfdmVjX3JzcmMgKnJzcmMsXG4gXG4gc3RhdGljIHZvaWQgaWRwZl94ZHBfdHhfdGltZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiBcbi1pbnQgaWRwZl94ZHBzcXNfZ2V0KGNvbnN0IHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydClcbitpbnQgaWRwZl94ZHBzcXNfZ2V0KHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydClcbiB7XG4gXHRzdHJ1Y3QgbGliZXRoX3hkcHNxX3RpbWVyICoqdGltZXJzIF9fZnJlZShrdmZyZWUpID0gTlVMTDtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4rXHR1bnNpZ25lZCBsb25nICoqbWFza3MgX19mcmVlKGt2ZnJlZSkgPSBOVUxMO1xuK1x0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbitcdGJvb2wgd2FybjtcbiBcdHUzMiBzcXM7XG4gXG4gXHRpZiAoIWlkcGZfeGRwX2VuYWJsZWQodnBvcnQpKVxuQEAgLTE3Niw2ICsxODAsMzQgQEAgaW50IGlkcGZfeGRwc3FzX2dldChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpXG4gXHRkZXYgPSB2cG9ydC1cdTAwM2VuZXRkZXY7XG4gXHRzcXMgPSB2cG9ydC1cdTAwM2VkZmx0X3F2X3JzcmMueGRwX3R4cV9vZmZzZXQ7XG4gXG4rXHR2cG9ydC1cdTAwM2V4ZHBzcV9mYiA9ICFpZHBmX2lzX2NhcF9lbmEodnBvcnQtXHUwMDNlYWRhcHRlciwgSURQRl9PVEhFUl9DQVBTLFxuK1x0XHRcdFx0XHQgICBWSVJUQ0hOTDJfQ0FQX1NQTElUUV9RU0NIRUQpO1xuK1x0aWYgKCF2cG9ydC1cdTAwM2V4ZHBzcV9mYilcbitcdFx0Z290byBzZXR1cDtcbitcbitcdG1hc2tzID0ga3Z6YWxsb2Nfb2JqcygqbWFza3MsIHZwb3J0LVx1MDAzZW51bV94ZHBfdHhxKTtcbitcdGlmICghbWFza3MpXG4rXHRcdGdvdG8gZXJyX21hc2tzO1xuK1xuK1x0Zm9yICh1MzIgaSA9IDA7IGkgXHUwMDNjIHZwb3J0LVx1MDAzZW51bV94ZHBfdHhxOyBpKyspIHtcbitcdFx0bWFza3NbaV0gPSBiaXRtYXBfemFsbG9jX25vZGUodnBvcnQtXHUwMDNldHhxc1tzcXMgKyBpXS1cdTAwM2VkZXNjX2NvdW50LFxuK1x0XHRcdFx0XHQgICAgICBHRlBfS0VSTkVMLCBjcHVfdG9fbWVtKGkpKTtcbitcdFx0aWYgKCFtYXNrc1tpXSkge1xuK1x0XHRcdGZvciAoaW50IGogPSBpIC0gMTsgaiBcdTAwM2U9IDA7IGotLSlcbitcdFx0XHRcdGJpdG1hcF9mcmVlKG1hc2tzW2pdKTtcbitcbitcdFx0XHRnb3RvIGVycl9tYXNrcztcbitcdFx0fVxuK1x0fVxuK1xuK1x0d2FybiA9ICFzdGF0aWNfa2V5X2VuYWJsZWQoXHUwMDI2aWRwZl94ZHBfZmIpO1xuK1x0c3RhdGljX2JyYW5jaF9pbmMoXHUwMDI2aWRwZl94ZHBfZmIpO1xuK1xuK1x0aWYgKHdhcm4gXHUwMDI2XHUwMDI2IG5ldF9yYXRlbGltaXQoKSlcbitcdFx0bmV0ZGV2X3dhcm4oZGV2LFxuK1x0XHRcdCAgICBcIlRoZSBGVyBkb2Vzbid0IHN1cHBvcnQgVHggaW4gRklGTyBtb2RlLCBYRFAgVHggcGVyZm9ybWFuY2UgbWlnaHQgYmUgc3Vib3B0aW1hbFxcblwiKTtcbitcbitzZXR1cDpcbiBcdGZvciAodTMyIGkgPSBzcXM7IGkgXHUwMDNjIHZwb3J0LVx1MDAzZW51bV90eHE7IGkrKykge1xuIFx0XHRzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EgPSB2cG9ydC1cdTAwM2V0eHFzW2ldO1xuIFxuQEAgLTE4Myw4ICsyMTUsOCBAQCBpbnQgaWRwZl94ZHBzcXNfZ2V0KGNvbnN0IHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydClcbiBcdFx0a2ZyZWUoeGRwc3EtXHUwMDNlcmVmaWxscSk7XG4gXHRcdHhkcHNxLVx1MDAzZXJlZmlsbHEgPSBOVUxMO1xuIFxuLVx0XHRpZHBmX3F1ZXVlX2NsZWFyKEZMT1dfU0NIX0VOLCB4ZHBzcSk7XG4tXHRcdGlkcGZfcXVldWVfY2xlYXIoRkxPV19TQ0hfRU4sIHhkcHNxLVx1MDAzZWNvbXBscSk7XG4rXHRcdGlkcGZfcXVldWVfYXNzaWduKEZMT1dfU0NIX0VOLCB4ZHBzcSwgdnBvcnQtXHUwMDNleGRwc3FfZmIpO1xuK1x0XHRpZHBmX3F1ZXVlX2Fzc2lnbihGTE9XX1NDSF9FTiwgeGRwc3EtXHUwMDNlY29tcGxxLCB2cG9ydC1cdTAwM2V4ZHBzcV9mYik7XG4gXHRcdGlkcGZfcXVldWVfc2V0KE5PSVJRLCB4ZHBzcSk7XG4gXHRcdGlkcGZfcXVldWVfc2V0KFhEUCwgeGRwc3EpO1xuIFx0XHRpZHBmX3F1ZXVlX3NldChYRFAsIHhkcHNxLVx1MDAzZWNvbXBscSk7XG5AQCAtMTk3LDEyICsyMjksMjUgQEAgaW50IGlkcGZfeGRwc3FzX2dldChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpXG4gXHRcdHhkcHNxLVx1MDAzZXBlbmRpbmcgPSAwO1xuIFx0XHR4ZHBzcS1cdTAwM2V4ZHBfdHggPSAwO1xuIFx0XHR4ZHBzcS1cdTAwM2V0aHJlc2ggPSBsaWJldGhfeGRwX3F1ZXVlX3RocmVzaG9sZCh4ZHBzcS1cdTAwM2VkZXNjX2NvdW50KTtcbitcbitcdFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2aWRwZl94ZHBfZmIpIFx1MDAyNlx1MDAyNiB2cG9ydC1cdTAwM2V4ZHBzcV9mYikge1xuK1x0XHRcdHhkcHNxLVx1MDAzZXBlbmRpbmdfbWFzayA9IG1hc2tzW2kgLSBzcXNdO1xuK1x0XHRcdHhkcHNxLVx1MDAzZWxhc3RfbnR1ID0gMDtcbitcdFx0fVxuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG4rXG4rZXJyX21hc2tzOlxuK1x0dnBvcnQtXHUwMDNleGRwc3FfZmIgPSBmYWxzZTtcbitcbitcdGZvciAodTMyIGkgPSAwOyBpIFx1MDAzYyB2cG9ydC1cdTAwM2VudW1feGRwX3R4cTsgaSsrKVxuK1x0XHRrZnJlZSh0aW1lcnNbaV0pO1xuK1xuK1x0cmV0dXJuIC1FTk9NRU07XG4gfVxuIFxuLXZvaWQgaWRwZl94ZHBzcXNfcHV0KGNvbnN0IHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydClcbit2b2lkIGlkcGZfeGRwc3FzX3B1dChzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiBcdHUzMiBzcXM7XG5AQCAtMjIyLDEwICsyNjcsMjMgQEAgdm9pZCBpZHBmX3hkcHNxc19wdXQoY29uc3Qgc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KVxuIFx0XHRsaWJldGhfeGRwc3FfZGVpbml0X3RpbWVyKHhkcHNxLVx1MDAzZXRpbWVyKTtcbiBcdFx0bGliZXRoX3hkcHNxX3B1dChcdTAwMjZ4ZHBzcS1cdTAwM2V4ZHBfbG9jaywgZGV2KTtcbiBcbitcdFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2aWRwZl94ZHBfZmIpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHhkcHNxKSkge1xuK1x0XHRcdGJpdG1hcF9mcmVlKHhkcHNxLVx1MDAzZXBlbmRpbmdfbWFzayk7XG4rXHRcdFx0eGRwc3EtXHUwMDNlcGVuZGluZ19tYXNrID0gTlVMTDtcbitcdFx0XHR4ZHBzcS1cdTAwM2VsYXN0X250dSA9IDA7XG4rXHRcdH1cbitcbiBcdFx0a2ZyZWUoeGRwc3EtXHUwMDNldGltZXIpO1xuIFx0XHR4ZHBzcS1cdTAwM2VyZWZpbGxxID0gTlVMTDtcbiBcdFx0aWRwZl9xdWV1ZV9jbGVhcihOT0lSUSwgeGRwc3EpO1xuIFx0fVxuK1xuK1x0aWYgKCF2cG9ydC1cdTAwM2V4ZHBzcV9mYilcbitcdFx0cmV0dXJuO1xuK1xuK1x0c3RhdGljX2JyYW5jaF9kZWMoXHUwMDI2aWRwZl94ZHBfZmIpO1xuK1x0dnBvcnQtXHUwMDNleGRwc3FfZmIgPSBmYWxzZTtcbiB9XG4gXG4gc3RhdGljIGludCBpZHBmX3hkcF9wYXJzZV9jcWUoY29uc3Qgc3RydWN0IGlkcGZfc3BsaXRxXzRiX3R4X2NvbXBsX2Rlc2MgKmRlc2MsXG5AQCAtMjUwLDYgKzMwOCw2NSBAQCBzdGF0aWMgaW50IGlkcGZfeGRwX3BhcnNlX2NxZShjb25zdCBzdHJ1Y3QgaWRwZl9zcGxpdHFfNGJfdHhfY29tcGxfZGVzYyAqZGVzYyxcbiBcdHJldHVybiB1cHBlcl8xNl9iaXRzKHZhbCk7XG4gfVxuIFxuK3N0YXRpYyB1MzIgaWRwZl94ZHBzcV9wb2xsX2ZiKHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp4ZHBzcSwgdTMyIGJ1ZGdldClcbit7XG4rXHRzdHJ1Y3QgaWRwZl9jb21wbF9xdWV1ZSAqY3EgPSB4ZHBzcS1cdTAwM2Vjb21wbHE7XG4rXHR1bnNpZ25lZCBsb25nICptYXNrID0geGRwc3EtXHUwMDNlcGVuZGluZ19tYXNrO1xuK1x0dTMyIGRvbmVfZnJhbWVzLCB0eF9jbnQsIG5ld19udGM7XG4rXHR1MzIgbnRjID0gY3EtXHUwMDNlbmV4dF90b19jbGVhbjtcbitcdHUzMiBjbnQgPSBjcS1cdTAwM2VkZXNjX2NvdW50O1xuK1x0Ym9vbCBnZW47XG4rXG4rXHRnZW4gPSBpZHBmX3F1ZXVlX2hhcyhHRU5fQ0hLLCBjcSk7XG4rXG4rXHRmb3IgKGRvbmVfZnJhbWVzID0gMDsgZG9uZV9mcmFtZXMgXHUwMDNjIGJ1ZGdldDsgKSB7XG4rXHRcdGludCByZXQ7XG4rXG4rXHRcdHJldCA9IGlkcGZfeGRwX3BhcnNlX2NxZShcdTAwMjZjcS1cdTAwM2Vjb21wW250Y10uY29tbW9uLCBnZW4pO1xuK1x0XHRpZiAocmV0IFx1MDAzZT0gMCkge1xuK1x0XHRcdF9fY2xlYXJfYml0KHJldCwgbWFzayk7XG4rXHRcdFx0ZG9uZV9mcmFtZXMrKztcbitcbitcdFx0XHRnb3RvIG5leHQ7XG4rXHRcdH1cbitcbitcdFx0c3dpdGNoIChyZXQpIHtcbitcdFx0Y2FzZSAtRU5PREFUQTpcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0Y2FzZSAtRUlOVkFMOlxuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rbmV4dDpcbitcdFx0aWYgKHVubGlrZWx5KCsrbnRjID09IGNudCkpIHtcbitcdFx0XHRudGMgPSAwO1xuK1x0XHRcdGdlbiA9ICFnZW47XG4rXHRcdFx0aWRwZl9xdWV1ZV9jaGFuZ2UoR0VOX0NISywgY3EpO1xuK1x0XHR9XG4rXHR9XG4rXG4rb3V0OlxuK1x0Y3EtXHUwMDNlbmV4dF90b19jbGVhbiA9IG50YztcbitcbitcdGlmICh1bmxpa2VseSghZG9uZV9mcmFtZXMpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHR4X2NudCA9IHhkcHNxLVx1MDAzZWRlc2NfY291bnQ7XG4rXG4rXHQvKiBEb24ndCBnbyBwYXN0IG5leHRfdG9fdXNlICovXG4rXHRfX3NldF9iaXQoeGRwc3EtXHUwMDNlbmV4dF90b191c2UsIG1hc2spO1xuK1xuK1x0bmV3X250YyA9IGZpbmRfbmV4dF9iaXQobWFzaywgdHhfY250LCB4ZHBzcS1cdTAwM2VuZXh0X3RvX2NsZWFuKTtcbitcdGRvbmVfZnJhbWVzID0gbmV3X250YyAtIHhkcHNxLVx1MDAzZW5leHRfdG9fY2xlYW47XG4rXG4rXHRpZiAobmV3X250YyA9PSB0eF9jbnQpXG4rXHRcdGRvbmVfZnJhbWVzICs9IGZpbmRfZmlyc3RfYml0KG1hc2ssIHR4X2NudCk7XG4rXG4rXHRfX2NsZWFyX2JpdCh4ZHBzcS1cdTAwM2VuZXh0X3RvX3VzZSwgbWFzayk7XG4rXG4rXHRyZXR1cm4gZG9uZV9mcmFtZXM7XG4rfVxuK1xuIHUzMiBpZHBmX3hkcHNxX3BvbGwoc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxLCB1MzIgYnVkZ2V0KVxuIHtcbiBcdHN0cnVjdCBpZHBmX2NvbXBsX3F1ZXVlICpjcSA9IHhkcHNxLVx1MDAzZWNvbXBscTtcbkBAIC0yNjAsNiArMzc3LDEwIEBAIHUzMiBpZHBmX3hkcHNxX3BvbGwoc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxLCB1MzIgYnVkZ2V0KVxuIFx0dTMyIGRvbmVfZnJhbWVzO1xuIFx0Ym9vbCBnZW47XG4gXG4rXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZpZHBmX3hkcF9mYikgXHUwMDI2XHUwMDI2XG4rXHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHhkcHNxKSlcbitcdFx0cmV0dXJuIGlkcGZfeGRwc3FfcG9sbF9mYih4ZHBzcSwgYnVkZ2V0KTtcbitcbiBcdGdlbiA9IGlkcGZfcXVldWVfaGFzKEdFTl9DSEssIGNxKTtcbiBcbiBcdGZvciAoZG9uZV9mcmFtZXMgPSAwOyBkb25lX2ZyYW1lcyBcdTAwM2MgYnVkZ2V0OyApIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL3hkcC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuaFxuaW5kZXggNjNlNTZmN2Q0M2UwMC4uOTVlNDdlYTJjY2JhOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmhcbkBAIC04LDYgKzgsMTAgQEBcbiBcbiAjaW5jbHVkZSBcImlkcGZfdHhyeC5oXCJcbiBcbitzdHJ1Y3QgaWRwZl9xX3ZlY19yc3JjO1xuK1xuK0RFQ0xBUkVfU1RBVElDX0tFWV9GQUxTRShpZHBmX3hkcF9mYik7XG4rXG4gaW50IGlkcGZfeGRwX3J4cV9pbmZvX2luaXQoc3RydWN0IGlkcGZfcnhfcXVldWUgKnJ4cSk7XG4gaW50IGlkcGZfeGRwX3J4cV9pbmZvX2luaXRfYWxsKGNvbnN0IHN0cnVjdCBpZHBmX3FfdmVjX3JzcmMgKnJzcmMpO1xuIHZvaWQgaWRwZl94ZHBfcnhxX2luZm9fZGVpbml0KHN0cnVjdCBpZHBmX3J4X3F1ZXVlICpyeHEsIHUzMiBtb2RlbCk7XG5AQCAtMTUsMTIgKzE5LDQwIEBAIHZvaWQgaWRwZl94ZHBfcnhxX2luZm9fZGVpbml0X2FsbChjb25zdCBzdHJ1Y3QgaWRwZl9xX3ZlY19yc3JjICpyc3JjKTtcbiB2b2lkIGlkcGZfeGRwX2NvcHlfcHJvZ190b19ycXMoY29uc3Qgc3RydWN0IGlkcGZfcV92ZWNfcnNyYyAqcnNyYyxcbiBcdFx0XHQgICAgICAgc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZyk7XG4gXG4taW50IGlkcGZfeGRwc3FzX2dldChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpO1xuLXZvaWQgaWRwZl94ZHBzcXNfcHV0KGNvbnN0IHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCk7XG4raW50IGlkcGZfeGRwc3FzX2dldChzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpO1xuK3ZvaWQgaWRwZl94ZHBzcXNfcHV0KHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCk7XG4gXG4gdTMyIGlkcGZfeGRwc3FfcG9sbChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EsIHUzMiBidWRnZXQpO1xuIGJvb2wgaWRwZl94ZHBfdHhfZmx1c2hfYnVsayhzdHJ1Y3QgbGliZXRoX3hkcF90eF9idWxrICpicSwgdTMyIGZsYWdzKTtcbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBfdHhfeG1pdF9mYihzdHJ1Y3QgbGliZXRoX3hkcF90eF9kZXNjIGRlc2MsIHUzMiBpLFxuK1x0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBsaWJldGhfeGRwc3EgKnNxLCB1NjQgcHJpdilcbit7XG4rXHRzdHJ1Y3QgaWRwZl9mbGV4X3R4X3NjaGVkX2Rlc2MgKnR4X2Rlc2MgPSBzcS1cdTAwM2VkZXNjcztcbitcdHUzMiBjbWQ7XG4rXG4rXHRjbWQgPSBGSUVMRF9QUkVQKElEUEZfVFhEX0ZMRVhfRkxPV19EVFlQRV9NLFxuK1x0XHRcdCBJRFBGX1RYX0RFU0NfRFRZUEVfRkxFWF9GTE9XX1NDSEUpO1xuK1x0aWYgKGRlc2MuZmxhZ3MgXHUwMDI2IExJQkVUSF9YRFBfVFhfTEFTVClcbitcdFx0Y21kIHw9IElEUEZfVFhEX0ZMRVhfRkxPV19DTURfRU9QO1xuK1x0aWYgKHByaXYgXHUwMDI2XHUwMDI2IChkZXNjLmZsYWdzIFx1MDAyNiBMSUJFVEhfWERQX1RYX0NTVU0pKVxuK1x0XHRjbWQgfD0gSURQRl9UWERfRkxFWF9GTE9XX0NNRF9DU19FTjtcbitcbitcdHR4X2Rlc2MgPSBcdTAwMjZ0eF9kZXNjW2ldO1xuK1x0dHhfZGVzYy1cdTAwM2VidWZfYWRkciA9IGNwdV90b19sZTY0KGRlc2MuYWRkcik7XG4rXG4rI2lmZGVmIF9fTElCRVRIX1dPUkRfQUNDRVNTXG4rXHQqKHU2NCAqKVx1MDAyNnR4X2Rlc2MtXHUwMDNlcXcxID0gKCh1NjQpZGVzYy5sZW4gXHUwMDNjXHUwMDNjIDQ4KSB8ICgodTY0KWkgXHUwMDNjXHUwMDNjIDMyKSB8IGNtZDtcbisjZWxzZVxuK1x0dHhfZGVzYy1cdTAwM2VxdzEucnhyX2J1ZnNpemUgPSBjcHVfdG9fbGUxNihkZXNjLmxlbik7XG4rXHR0eF9kZXNjLVx1MDAzZXF3MS5jb21wbF90YWcgPSBjcHVfdG9fbGUxNihpKTtcbitcdHR4X2Rlc2MtXHUwMDNlcXcxLnRzWzBdID0gMDtcbitcdHR4X2Rlc2MtXHUwMDNlcXcxLnRzWzFdID0gMDtcbitcdHR4X2Rlc2MtXHUwMDNlcXcxLnRzWzJdID0gMDtcbitcdHR4X2Rlc2MtXHUwMDNlcXcxLmNtZF9kdHlwZSA9IGNtZDtcbisjZW5kaWZcbit9XG4rXG4gLyoqXG4gICogaWRwZl94ZHBfdHhfeG1pdCAtIHByb2R1Y2UgYSBzaW5nbGUgSFcgVHggZGVzY3JpcHRvciBvdXQgb2YgWERQIGRlc2NcbiAgKiBAZGVzYzogWERQIGRlc2NyaXB0b3IgdG8gcHVsbCB0aGUgRE1BIGFkZHJlc3MgYW5kIGxlbmd0aCBmcm9tXG5AQCAtMzQsNiArNjYsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwX3R4X3htaXQoc3RydWN0IGxpYmV0aF94ZHBfdHhfZGVzYyBkZXNjLCB1MzIgaSxcbiBcdHN0cnVjdCBpZHBmX2ZsZXhfdHhfZGVzYyAqdHhfZGVzYyA9IHNxLVx1MDAzZWRlc2NzO1xuIFx0dTMyIGNtZDtcbiBcbitcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmlkcGZfeGRwX2ZiKSBcdTAwMjZcdTAwMjZcbitcdCAgICBpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTixcbitcdFx0XHQgICBsaWJldGhfeGRwc3FfdG9fc3Eoc3EsIHN0cnVjdCBpZHBmX3R4X3F1ZXVlLFxuK1x0XHRcdFx0XHQgICAgICBuZXh0X3RvX3VzZSkpKSB7XG4rXHRcdGlkcGZfeGRwX3R4X3htaXRfZmIoZGVzYywgaSwgc3EsIHByaXYpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHRjbWQgPSBGSUVMRF9QUkVQKElEUEZfRkxFWF9UWERfUVcxX0RUWVBFX00sXG4gXHRcdFx0IElEUEZfVFhfREVTQ19EVFlQRV9GTEVYX0wyVEFHMV9MMlRBRzIpO1xuIFx0aWYgKGRlc2MuZmxhZ3MgXHUwMDI2IExJQkVUSF9YRFBfVFhfTEFTVClcbkBAIC01MywxMiArOTMsMzQgQEAgc3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwX3R4X3htaXQoc3RydWN0IGxpYmV0aF94ZHBfdHhfZGVzYyBkZXNjLCB1MzIgaSxcbiAjZW5kaWZcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwc3Ffc2V0X3JzKGNvbnN0IHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp4ZHBzcSlcbitzdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBzcV9zZXRfcnNfZmIoc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxKVxuK3tcbitcdHUzMiBudHUgPSB4ZHBzcS1cdTAwM2VuZXh0X3RvX3VzZTtcbitcdHUzMiBvbGQgPSB4ZHBzcS1cdTAwM2VsYXN0X250dTtcbitcbitcdGlmIChvbGQgXHUwMDNlIG50dSkge1xuK1x0XHRiaXRtYXBfc2V0KHhkcHNxLVx1MDAzZXBlbmRpbmdfbWFzaywgb2xkLCB4ZHBzcS1cdTAwM2VkZXNjX2NvdW50IC0gb2xkKTtcbitcdFx0aWYgKG50dSlcbitcdFx0XHRiaXRtYXBfc2V0KHhkcHNxLVx1MDAzZXBlbmRpbmdfbWFzaywgMCwgbnR1KTtcbitcdH0gZWxzZSB7XG4rXHRcdGJpdG1hcF9zZXQoeGRwc3EtXHUwMDNlcGVuZGluZ19tYXNrLCBvbGQsIG50dSAtIG9sZCk7XG4rXHR9XG4rXG4rXHR4ZHBzcS1cdTAwM2VsYXN0X250dSA9IG50dTtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGlkcGZfeGRwc3Ffc2V0X3JzKHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp4ZHBzcSlcbiB7XG4gXHR1MzIgbnR1LCBjbWQ7XG4gXG4rXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZpZHBmX3hkcF9mYikgXHUwMDI2XHUwMDI2XG4rXHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHhkcHNxKSkge1xuK1x0XHRpZHBmX3hkcHNxX3NldF9yc19mYih4ZHBzcSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbiBcdG50dSA9IHhkcHNxLVx1MDAzZW5leHRfdG9fdXNlO1xuLVx0aWYgKHVubGlrZWx5KCFudHUpKVxuK1x0aWYgKCFudHUpXG4gXHRcdG50dSA9IHhkcHNxLVx1MDAzZWRlc2NfY291bnQ7XG4gXG4gXHRjbWQgPSBGSUVMRF9QUkVQKElEUEZfRkxFWF9UWERfUVcxX0NNRF9NLCBJRFBGX1RYX0RFU0NfQ01EX1JTKTtcbkBAIC04NCw3ICsxNDYsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBzcV91cGRhdGVfdGFpbChjb25zdCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EpXG4gICogU2V0IHRoZSBSUyBiaXQgKFwiZW5kIG9mIGJhdGNoXCIpLCBidW1wIHRoZSB0YWlsLCBhbmQgcXVldWUgdGhlIGNsZWFudXAgdGltZXIuXG4gICogVG8gYmUgY2FsbGVkIGFmdGVyIGEgTkFQSSBwb2xsaW5nIGxvb3AsIGF0IHRoZSBlbmQgb2YgLm5kb194ZHBfeG1pdCgpIGV0Yy5cbiAgKi9cbi1zdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBfdHhfZmluYWxpemUodm9pZCAqX3hkcHNxLCBib29sIHNlbnQsIGJvb2wgZmx1c2gpXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGlkcGZfeGRwX3R4X2ZpbmFsaXplKHZvaWQgKl94ZHBzcSwgYm9vbCBzZW50LFxuK1x0XHRcdFx0XHRcdCBib29sIGZsdXNoKVxuIHtcbiBcdHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp4ZHBzcSA9IF94ZHBzcTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9saWJldGgveGRwLmggYi9pbmNsdWRlL25ldC9saWJldGgveGRwLmhcbmluZGV4IDg5ODcyM2FiNjJlODEuLmVkNjFkODNiZGEyZDcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9saWJldGgveGRwLmhcbisrKyBiL2luY2x1ZGUvbmV0L2xpYmV0aC94ZHAuaFxuQEAgLTQzMCw2ICs0MzAsMTkgQEAgc3RydWN0IGxpYmV0aF94ZHBzcSB7XG4gXHRzdHJ1Y3QgbGliZXRoX3hkcHNxX2xvY2tcdCpsb2NrO1xuIH07XG4gXG4rLyoqXG4rICogbGliZXRoX3hkcHNxX3RvX3NxIC0gZ2V0IFNRIHBvaW50ZXIgZnJvbSBhbiBYRFBTUSBwb2ludGVyXG4rICogQHhkcHNxOiBcdTAwMjZsaWJldGhfeGRwc3EgY29ycmVzcG9uZGluZyB0byB0aGUgcXVldWVcbisgKiBAdHlwZTogdHlwZW9mKCkgb2YgdGhlIGRyaXZlciBUeCBxdWV1ZSBzdHJ1Y3R1cmVcbisgKiBAbWVtYmVyOiBuYW1lIG9mIHRoZSBOVFUgZmllbGQgaW5zaWRlIEB0eXBlXG4rICpcbisgKiBTb21lIG9mIHRoZSBzZW5kaW5nIGNhbGxiYWNrcyB0YWtlIG9ubHkgXHUwMDI2bGliZXRoX3hkcHNxIHBvaW50ZXIgYW5kIG5vIHBvaW50ZXJcbisgKiB0byB0aGUgYWN0dWFsIGRyaXZlciBUeCBxdWV1ZSBzdHJ1Y3R1cmUuIFVzZSB0aGlzIGhlbHBlciB0byBxdWlja2x5IGp1bXAgdG9cbisgKiB0aGUgbGF0dGVyIHdoZW4gbmVlZGVkLlxuKyAqL1xuKyNkZWZpbmUgbGliZXRoX3hkcHNxX3RvX3NxKHhkcHNxLCB0eXBlLCBtZW1iZXIpXHRcdFx0XHQgICAgICBcXFxuK1x0Y29udGFpbmVyX29mX2NvbnN0KCh4ZHBzcSktXHUwMDNlbnR1LCB0eXBlLCBtZW1iZXIpXG4rXG4gLyoqXG4gICogc3RydWN0IGxpYmV0aF94ZHBfdHhfZGVzYyAtIGFic3RyYWN0aW9uIGZvciBhbiBYRFAgVHggZGVzY3JpcHRvclxuICAqIEBhZGRyOiBETUEgYWRkcmVzcyBvZiB0aGUgZnJhbWVcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjA2OjAyLjA5MjcwODU1N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwMTkyODYzNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBgaWRwZmAgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgZm9yIHRoZSBgaWRwZmAgZHJpdmVyIOKAkyBJbnRlbCdzIEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbi4gSXQncyBhZGRpbmcgWERQIFR4IHN1cHBvcnQgaW4gRklGTyBtb2RlLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhlIGNoYW5nZXMgYXJlIHNwcmVhZCBhY3Jvc3MgdGhlIHVzdWFsIHN1c3BlY3RzOiBoZWFkZXJzLCB0aGUgY29yZSBUWC9SWCBjb2RlLCBhbmQgWERQLXJlbGF0ZWQgZmlsZXMuIE5vdGhpbmcgdG9vIHN1cnByaXNpbmcgb24gdGhlIHN1cmZhY2UuXG5cbk15IGZpcnN0IHRob3VnaHQsIGFuZCBhIGNyaXRpY2FsIG9uZSBnaXZlbiBteSBleHBlcmllbmNlLCBpcyBhYm91dCB0aGUgZW52aXJvbm1lbnQuIENhbiBJIGFjdHVhbGx5ICp0ZXN0KiB0aGlzPyBgaWRwZmAsIHJpZ2h0PyBUaGF0J3MgYW4gSW50ZWwgSVBVIHRoaW5nLiBOb3csIGlzIHRoaXMgYSBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXIsIG9yIGlzIHRoZXJlIHNvbWUgbGV2ZWwgb2YgdmlydHVhbGl6YXRpb24gb3IgZW11bGF0aW9uPyBNeSBpbW1lZGlhdGUgc3VzcGljaW9uLCBnaXZlbiB0aGF0IHRoaXMgaXMgYW4gSW50ZWwgTklDIGRyaXZlciwgaXMgdGhhdCBpdCdzIGdvaW5nIHRvIG5lZWQgcmVhbCBoYXJkd2FyZSB0byBtZWFuaW5nZnVsbHkgdGVzdC4gSSBrbm93IGhvdyBmdXNzeSB0aGVzZSBkcml2ZXJzIGNhbiBiZS4gVGhleSBvZnRlbiBkZXBlbmQgb24gdmVyeSBzcGVjaWZpYyBQQ0llIGNvbmZpZ3VyYXRpb25zLlxuXG5BaCwgeWVzLCBgaWRwZmAgaXMgYSBQQ0llIGRldmljZSwgYSBTbWFydE5JQy4gU28sIHRoZSBxdWVzdGlvbiBpcywgZG9lcyBRRU1VLCB0aGUgc3RhbmRhcmQgZW11bGF0b3IsIGhhdmUgYSBkZWNlbnQgZW11bGF0aW9uIGZvciB0aGlzPyBQcm9iYWJseSBub3QuIEkndmUgd29ya2VkIHdpdGggSW50ZWwgTklDIGRyaXZlcnMgYmVmb3JlLCBhbmQgdGhleSdyZSByYXJlbHkgZnVsbHkgZW11bGF0ZWQuIE15IGV4cGVyaWVuY2Ugc3VnZ2VzdHMgdGhhdCB0aGlzIGlzIGdvaW5nIHRvIGZhbGwgaW50byB0aGF0IGNhdGVnb3J5IG9mIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMuXG5cbkxldCBtZSBjb25maXJtIHRoYXQgYnkgcXVpY2tseSBzZWFyY2hpbmcgdGhlIGtlcm5lbCB0cmVlLiBUaGUgcHJvbXB0IG1lbnRpb25lZCBhIGxpc3Qgb2Ygc2ltaWxhciBkcml2ZXJzLiBJdCBzZWVtcyBsaWtlIHRoaXMgYGlkcGZgIGlzIGRlZmluaXRlbHkgaW4gdGhlIHNhbWUgY2F0ZWdvcnkgYXMgdGhvc2UgZHJpdmVycywgYW5kIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgaXQncyBub3QgZW11bGF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MDAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODowNjowOS4xMTE5OTk0MjFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE5MDgxNzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElEUEZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZy0zLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZzo0OmNvbmZpZyBJRFBGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnLTUtXFx0dHJpc3RhdGUgXFxcIkludGVsKFIpIEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbiBTdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnPTE4PWlmIElEUEZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWctMTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnOjIwOmNvbmZpZyBJRFBGX1NJTkdMRVFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWctMjEtXFx0Ym9vbCBcXFwiaWRwZiBzaW5nbGVxIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjA2OjA5LjE4MzkxNjI0NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMTQ2MTI3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBJbnRlbCBJRFBGIEVtdWxhdGlvbioqXG5cbk9rYXksIHNvIFwiSW50ZWwoUikgSW5mcmFzdHJ1Y3R1cmUgRGF0YSBQYXRoIEZ1bmN0aW9uIFN1cHBvcnRcIiDigJMgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiSXMgdGhpcyBhIFNtYXJ0TklDIHRoaW5nP1wiIFllcywgSW50ZWwgSVBVcyAqYXJlKiBTbWFydE5JQ3MsIHNvIHRoYXQgY2hlY2tzIG91dC4gVGhlIG5leHQgcXVlc3Rpb24gaXMgZW11bGF0aW9uLiBDYW4gSSBzcGluIHRoaXMgdXAgaW4gUUVNVT8gSG1tLCBubywgdGhlcmUgaXNuJ3QgYW55IHN0YW5kYXJkIFFFTVUgZW11bGF0aW9uIGZvciBJbnRlbCBJRFBGLCBvciBhdCBsZWFzdCwgSSdtIG5vdCBhd2FyZSBvZiBhbnkgb2ZmIHRoZSB0b3Agb2YgbXkgaGVhZC5cblxuTGV0J3MgZG8gYSBxdWljayBtZW50YWwgY2hlY2suIEknZCB0eXBpY2FsbHkgd2FudCB0byBjaGVjayB0aGUgUUVNVSBzb3VyY2UgZm9yIFwiaWRwZixcIiBidXQgSSBkb24ndCBoYXZlIHRoYXQgbG9jYWxseS4gRXZlbiB3aXRob3V0IHRoZSBzb3VyY2UsIG15IGd1dCBzYXlzIFwiaWRwZlwiIGlzIGdvaW5nIHRvIGJlIGhhcmR3YXJlLXNwZWNpZmljLCBsaWtlbHkgYSBkcml2ZXIuIEkgc2hvdWxkIGNoZWNrIHRoZSBleGFtcGxlczogXCJtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdVwiIOKAkyBub3QgZXhwbGljaXRseSBJRFBGIGJ1dCBjbGVhcmx5IHdpdGhpbiB0aGUgcmVhbG0gb2YgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlcnMuIEdvb2QuXG5cblRoZSBrZXkgaGVyZSBpcyB2ZXJpZmljYXRpb24uIFRvIGJlIGNlcnRhaW4sIGNhbiBJIGV2ZW4gcmVhY2ggSURQRiBpbiB0aGUgZmlyc3QgcGxhY2U/IElmIGl0J3MgYSBQQ0llIGRyaXZlciB0aGF0IG1hbmFnZXMgdGhlIEludGVsIElQVSwgdGhlbiBpdCBwcmV0dHkgbXVjaCAqcmVxdWlyZXMqIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSB0byBmdW5jdGlvbi4gU28sIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aG91Z2h0LlxuXG5MZXQncyBsb29rIGF0IHRoZSBkcml2ZXIgc291cmNlIGNvZGUgLSBzcGVjaWZpY2FsbHksIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jYCAtIHRoYXQgc2hvdWxkIGJlIGEgUENJIGRyaXZlci4gVGhhdCB3aWxsIHRlbGwgbWUgZXZlcnl0aGluZyB0aGF0IEkgbmVlZCB0byBrbm93IGFib3V0IHRoZSByZXF1aXJlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MzMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MDY6MTUuNDk4NTMyMDcxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMTMyMTMxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2lfcmVnaXN0ZXJfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODowNjoxNS41ODk2NzIxNDFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDM3NDYyNDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqUENJIERyaXZlciBSZWdpc3RyYXRpb24gQ2hlY2sqKlxuXG5Pa2F5LCBsZXQgbWUgcXVpY2tseSB0aGluayB0aGlzIHRocm91Z2guIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBJJ20gcHJldHR5IHN1cmUgSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgZHJpdmVyIHdvdWxkIGJlIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBrZXJuZWwuIE15IGluc3RpbmN0IGlzIHRlbGxpbmcgbWUgdGhhdCwgaWYgaXQncyBhIFBDSSBkZXZpY2UsIHRoZXJlJ3MgYSBzdHJvbmcgY2hhbmNlIGl0J3MgZ29pbmcgdG8gbGV2ZXJhZ2Ugb25lIG9mIHRoZSBzdGFuZGFyZCBQQ0kgZHJpdmVyIHJlZ2lzdHJhdGlvbiBtZWNoYW5pc21zLiBUaGF0IHdvdWxkIGxpa2VseSBiZSBlaXRoZXIgYHBjaV9yZWdpc3Rlcl9kcml2ZXJgIG9yIHRoZSBtYWNybyBgbW9kdWxlX3BjaV9kcml2ZXJgLiBJIG5lZWQgdG8gbG9vayBjbG9zZXIgdG8gY29uZmlybSB3aGljaCBvbmUsIG9yIGlmIHRoZXkgYXJlIGhhbmRsaW5nIHRoZSByZWdpc3RyYXRpb24gaW4gYSBtb3JlIGN1c3RvbSB3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDUwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MDY6MTkuMDI3MTM3OTE2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MTIzMzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV9wY2lfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmM9Mzc1PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpZHBmX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmMtMzgyLX07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYzozODM6bW9kdWxlX3BjaV9kcml2ZXIoaWRwZl9kcml2ZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODowNjoxOS4wOTQyNjY4MjlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjc2MjgyNDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IE5vdCBXb3J0aCBGdXp6aW5nIGluIGEgVmlydHVhbCBFbnZpcm9ubWVudCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gWWVwLCB0aGlzIGlzIGRlZmluaXRlbHkgYSBQQ0kgZHJpdmVyIOKAkyB0aGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGl0J3Mgc3BlY2lmaWNhbGx5IGZvciBhbiBJbnRlbCBJbmZyYXN0cnVjdHVyZSBEYXRhIFBhdGggRnVuY3Rpb24uIFRyYW5zbGF0aW9uOiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBTbWFydE5JQyBvciBJUFUuIEFuZCB0aGF0IG1lYW5zICpwaHlzaWNhbCogaGFyZHdhcmUgaXMgYWJzb2x1dGVseSBlc3NlbnRpYWwuIFdlJ3JlIHRhbGtpbmcgZGVkaWNhdGVkIHNpbGljb24sIGN1c3RvbSBoYXJkd2FyZSBpbnRlcmFjdGlvbi4gR2l2ZW4gdGhpcyBzZXR1cCwgYXR0ZW1wdGluZyB0byBmdXp6IHRoaXMgZHJpdmVyIHdpdGhpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQgaXMgYSBub24tc3RhcnRlci4gVGhlIHZpcnR1YWxpemVkIGhhcmR3YXJlIGp1c3QgaXNuJ3QgZ29pbmcgdG8gY3V0IGl0LiBUaGVyZWZvcmUsIEnigJltIGdvaW5nIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIGV4cGxhbmF0aW9uIGlzIHNpbXBsZTogdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlciB0aGF0J3MgZnVuZGFtZW50YWxseSBkZXBlbmRlbnQgb24gcGh5c2ljYWwgaGFyZHdhcmUgZm9yIGFueSBtZWFuaW5nZnVsIHRlc3RpbmcuIE5vIHdheSBhcm91bmQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzYxLCJPdXRwdXRUb2tlbnMiOjg3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MDY6MjMuMzcwNTUxNjU3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbiAoaWRwZikgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIFNtYXJ0TklDL0lQVSBkcml2ZXIuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIG1ha2luZyBpdCB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBJbmZyYXN0cnVjdHVyZSBEYXRhIFBhdGggRnVuY3Rpb24gKGlkcGYpIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBTbWFydE5JQy9JUFUgZHJpdmVyLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBtYWtpbmcgaXQgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODowNjoyMy4zNzA1ODQ2NDdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowjjhjs[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-18 18:04:06 +0000 UTC FinishedAt: 2026-08-18 18:06:24 +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+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbiAoaWRwZikgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIFNtYXJ0TklDL0lQVSBkcml2ZXIuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIG1ha2luZyBpdCB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiM2ZjYjY4YmM2MDczYjUwOGExYjZjNjI2NjgxNmZhYzBkNmY4ODRjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTg6MDY6MDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaFxuaW5kZXggNDcwYmMyM2M4NDRjMS4uMWU4OTdlMTMxY2IyOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaFxuQEAgLTM4Myw2ICYjNDM7MzgzLDcgQEAgc3RydWN0IGlkcGZfdnBvcnQge1xuIFx0c3RydWN0IGlkcGZfdHhfcXVldWUgKip0eHFzO1xuIFx0dTE2IG51bV90eHE7XG4gXHR1MTYgbnVtX3hkcF90eHE7XG4mIzQzO1x0Ym9vbCB4ZHBzcV9mYjtcbiBcdGJvb2wgeGRwc3Ffc2hhcmU7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jXG5pbmRleCBjM2ZmYjQ0NTI5N2Y4Li43NDMzOTU5NjIwNzdkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY1xuQEAgLTIyNyw3ICYjNDM7MjI3LDcgQEAgc3RhdGljIGludCBpZHBmX3R4X2Rlc2NfYWxsb2MoY29uc3Qgc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0LFxuIFxuIFx0aWRwZl94c2tfc2V0dXBfcXVldWUodnBvcnQsIHR4X3EsIFZJUlRDSE5MMl9RVUVVRV9UWVBFX1RYKTtcbiBcbi1cdGlmICghaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHR4X3EpKVxuJiM0MztcdGlmICghaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHR4X3EpIHx8IGlkcGZfcXVldWVfaGFzKFhEUCwgdHhfcSkpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0cmVmaWxscSA9IHR4X3EtXHUwMDNlcmVmaWxscTtcbkBAIC0xMDU1LDYgJiM0MzsxMDU1LDEzIEBAIHN0YXRpYyB2b2lkIGlkcGZfY2xlYW5fcXVldWVfc2V0KGNvbnN0IHN0cnVjdCBpZHBmX3F1ZXVlX3NldCAqcXMpXG4gXHRcdFx0aWYgKGlkcGZfcXVldWVfaGFzKFhEUCwgcS1cdTAwM2V0eHEpKSB7XG4gXHRcdFx0XHRxLVx1MDAzZXR4cS1cdTAwM2VwZW5kaW5nID0gMDtcbiBcdFx0XHRcdHEtXHUwMDNldHhxLVx1MDAzZXhkcF90eCA9IDA7XG4mIzQzO1xuJiM0MztcdFx0XHRcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmlkcGZfeGRwX2ZiKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHEtXHUwMDNldHhxKSkge1xuJiM0MztcdFx0XHRcdFx0Yml0bWFwX3plcm8ocS1cdTAwM2V0eHEtXHUwMDNlcGVuZGluZ19tYXNrLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgcS1cdTAwM2V0eHEtXHUwMDNlZGVzY19jb3VudCk7XG4mIzQzO1x0XHRcdFx0XHRxLVx1MDAzZXR4cS1cdTAwM2VsYXN0X250dSA9IDA7XG4mIzQzO1x0XHRcdFx0fVxuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRxLVx1MDAzZXR4cS1cdTAwM2V0eHFfZ3JwLVx1MDAzZW51bV9jb21wbGV0aW9uc19wZW5kaW5nID0gMDtcbiBcdFx0XHR9XG5AQCAtMTMxNyw3ICYjNDM7MTMyNCw4IEBAIHN0YXRpYyB2b2lkIGlkcGZfdHhxX2dyb3VwX3JlbChzdHJ1Y3QgaWRwZl9xX3ZlY19yc3JjICpyc3JjKVxuIFx0XHRcdGlmICghdHhxX2dycC1cdTAwM2V0eHFzW2pdKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0aWYgKGlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCB0eHFfZ3JwLVx1MDAzZXR4cXNbal0pKSB7XG4mIzQzO1x0XHRcdGlmIChpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgdHhxX2dycC1cdTAwM2V0eHFzW2pdKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgICFpZHBmX3F1ZXVlX2hhcyhYRFAsIHR4cV9ncnAtXHUwMDNldHhxc1tqXSkpIHtcbiBcdFx0XHRcdGtmcmVlKHR4cV9ncnAtXHUwMDNldHhxc1tqXS1cdTAwM2VyZWZpbGxxKTtcbiBcdFx0XHRcdHR4cV9ncnAtXHUwMDNldHhxc1tqXS1cdTAwM2VyZWZpbGxxID0gTlVMTDtcbiBcdFx0XHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmhcbmluZGV4IDkzNTQ3NTk3ZWZkMmEuLmRjZTA3ZmJiNmU3NzMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oXG5AQCAtNjI1LDEyICYjNDM7NjI1LDE0IEBAIGxpYmV0aF9jYWNoZWxpbmVfc2V0X2Fzc2VydChzdHJ1Y3QgaWRwZl9yeF9xdWV1ZSxcbiAgKiBAY2xlYW5fYnVkZ2V0OiBzaW5nbGVxIG9ubHksIHF1ZXVlIGNsZWFuaW5nIGJ1ZGdldFxuICAqIEBjbGVhbmVkX3BrdHM6IE51bWJlciBvZiBwYWNrZXRzIGNsZWFuZWQgZm9yIHRoZSBhYm92ZSBzYWlkIGNhc2VcbiAgKiBAcmVmaWxscTogUG9pbnRlciB0byByZWZpbGwgcXVldWVcbiYjNDM7ICogQGNhY2hlZF90c3RhbXBfY2FwczogVHggdGltZXN0YW1wIGNhcGFiaWxpdGllcyBuZWdvdGlhdGVkIHdpdGggdGhlIENQXG4mIzQzOyAqIEB0c3RhbXBfdGFzazogV29yayB0aGF0IGhhbmRsZXMgVHggdGltZXN0YW1wIHJlYWRcbiAgKiBAcGVuZGluZzogbnVtYmVyIG9mIHBlbmRpbmcgZGVzY3JpcHRvcnMgdG8gc2VuZCBpbiBRQlxuICAqIEB4ZHBfdHg6IG51bWJlciBvZiBwZW5kaW5nIFx1MDAyNnhkcF9idWZmIG9yIFx1MDAyNnhkcF9mcmFtZSBidWZmZXJzXG4gICogQHRpbWVyOiB0aW1lciBmb3IgWERQIFR4IHF1ZXVlIGNsZWFudXBcbiAgKiBAeGRwX2xvY2s6IGxvY2sgZm9yIFhEUCBUeCBxdWV1ZXMgc2hhcmluZ1xuLSAqIEBjYWNoZWRfdHN0YW1wX2NhcHM6IFR4IHRpbWVzdGFtcCBjYXBhYmlsaXRpZXMgbmVnb3RpYXRlZCB3aXRoIHRoZSBDUFxuLSAqIEB0c3RhbXBfdGFzazogV29yayB0aGF0IGhhbmRsZXMgVHggdGltZXN0YW1wIHJlYWRcbiYjNDM7ICogQHBlbmRpbmdfbWFzazogbWFzayBvZiBidWZmZXJzIHdhaXRpbmcgZm9yIGNvbXBsZXRpb24gaW4gdGhlIEZCIFhEUCBtb2RlXG4mIzQzOyAqIEBsYXN0X250dTogQG5leHRfdG9fdXNlIGZyb20gdGhlIHByZXZpb3VzIGJhdGNoIGluIHRoZSBGQiBYRFAgbW9kZVxuICAqIEBzdGF0c19zeW5jOiBTZWUgc3RydWN0IHU2NF9zdGF0c19zeW5jXG4gICogQHFfc3RhdHM6IFNlZSB1bmlvbiBpZHBmX3R4X3F1ZXVlX3N0YXRzXG4gICogQHFfaWQ6IFF1ZXVlIGlkXG5AQCAtNjg5LDYgJiM0Mzs2OTEsOSBAQCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSB7XG4gXHRcdFx0dTE2IGNsZWFuZWRfcGt0cztcbiBcbiBcdFx0XHRzdHJ1Y3QgaWRwZl9zd19xdWV1ZSAqcmVmaWxscTtcbiYjNDM7XG4mIzQzO1x0XHRcdHN0cnVjdCBpZHBmX3B0cF92cG9ydF90eF90c3RhbXBfY2FwcyAqY2FjaGVkX3RzdGFtcF9jYXBzO1xuJiM0MztcdFx0XHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnRzdGFtcF90YXNrO1xuIFx0XHR9O1xuIFx0XHRzdHJ1Y3Qge1xuIFx0XHRcdHUzMiBwZW5kaW5nO1xuQEAgLTY5NiwxMiAmIzQzOzcwMSwxMiBAQCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSB7XG4gXG4gXHRcdFx0c3RydWN0IGxpYmV0aF94ZHBzcV90aW1lciAqdGltZXI7XG4gXHRcdFx0c3RydWN0IGxpYmV0aF94ZHBzcV9sb2NrIHhkcF9sb2NrO1xuJiM0MztcbiYjNDM7XHRcdFx0dW5zaWduZWQgbG9uZyAqcGVuZGluZ19tYXNrO1xuJiM0MztcdFx0XHR1MzIgbGFzdF9udHU7XG4gXHRcdH07XG4gXHR9O1xuIFxuLVx0c3RydWN0IGlkcGZfcHRwX3Zwb3J0X3R4X3RzdGFtcF9jYXBzICpjYWNoZWRfdHN0YW1wX2NhcHM7XG4tXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnRzdGFtcF90YXNrO1xuLVxuIFx0c3RydWN0IHU2NF9zdGF0c19zeW5jIHN0YXRzX3N5bmM7XG4gXHRzdHJ1Y3QgaWRwZl90eF9xdWV1ZV9zdGF0cyBxX3N0YXRzO1xuIFx0X19jYWNoZWxpbmVfZ3JvdXBfZW5kX2FsaWduZWQocmVhZF93cml0ZSk7XG5AQCAtNzE4LDggJiM0Mzs3MjMsNyBAQCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSB7XG4gXHRfX2NhY2hlbGluZV9ncm91cF9lbmRfYWxpZ25lZChjb2xkKTtcbiB9O1xuIGxpYmV0aF9jYWNoZWxpbmVfc2V0X2Fzc2VydChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgNjQsXG4tXHRcdFx0ICAgIDEwNCAmIzQzO1xuLVx0XHRcdCAgICBvZmZzZXRvZihzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgY2FjaGVkX3RzdGFtcF9jYXBzKSAtXG4mIzQzO1x0XHRcdCAgICA5NiAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgdHN0YW1wX3Rhc2spIC1cbiBcdFx0XHQgICAgb2Zmc2V0b2ZlbmQoc3RydWN0IGlkcGZfdHhfcXVldWUsIHRpbWVyKSAmIzQzO1xuIFx0XHRcdCAgICBvZmZzZXRvZihzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgcV9zdGF0cykgLVxuIFx0XHRcdCAgICBvZmZzZXRvZmVuZChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgdHN0YW1wX3Rhc2spLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL3hkcC5jXG5pbmRleCBjYmNjZDQ1NDY3NjgxLi5jNzcxNjYzNjc3YTUyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuY1xuQEAgLTcsNiAmIzQzOzcsOCBAQFxuICNpbmNsdWRlIFwmIzM0O3hkcC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7eHNrLmhcJiMzNDtcbiBcbiYjNDM7REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoaWRwZl94ZHBfZmIpO1xuJiM0MztcbiBzdGF0aWMgaW50IGlkcGZfcnhxX2Zvcl9lYWNoKGNvbnN0IHN0cnVjdCBpZHBmX3FfdmVjX3JzcmMgKnJzcmMsXG4gXHRcdFx0ICAgICBpbnQgKCpmbikoc3RydWN0IGlkcGZfcnhfcXVldWUgKnJ4cSwgdm9pZCAqYXJnKSxcbiBcdFx0XHQgICAgIHZvaWQgKmFyZylcbkBAIC0xNDksMTAgJiM0MzsxNTEsMTIgQEAgdm9pZCBpZHBmX3hkcF9jb3B5X3Byb2dfdG9fcnFzKGNvbnN0IHN0cnVjdCBpZHBmX3FfdmVjX3JzcmMgKnJzcmMsXG4gXG4gc3RhdGljIHZvaWQgaWRwZl94ZHBfdHhfdGltZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiBcbi1pbnQgaWRwZl94ZHBzcXNfZ2V0KGNvbnN0IHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydClcbiYjNDM7aW50IGlkcGZfeGRwc3FzX2dldChzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpXG4ge1xuIFx0c3RydWN0IGxpYmV0aF94ZHBzcV90aW1lciAqKnRpbWVycyBfX2ZyZWUoa3ZmcmVlKSA9IE5VTEw7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgKiptYXNrcyBfX2ZyZWUoa3ZmcmVlKSA9IE5VTEw7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiYjNDM7XHRib29sIHdhcm47XG4gXHR1MzIgc3FzO1xuIFxuIFx0aWYgKCFpZHBmX3hkcF9lbmFibGVkKHZwb3J0KSlcbkBAIC0xNzYsNiAmIzQzOzE4MCwzNCBAQCBpbnQgaWRwZl94ZHBzcXNfZ2V0KGNvbnN0IHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydClcbiBcdGRldiA9IHZwb3J0LVx1MDAzZW5ldGRldjtcbiBcdHNxcyA9IHZwb3J0LVx1MDAzZWRmbHRfcXZfcnNyYy54ZHBfdHhxX29mZnNldDtcbiBcbiYjNDM7XHR2cG9ydC1cdTAwM2V4ZHBzcV9mYiA9ICFpZHBmX2lzX2NhcF9lbmEodnBvcnQtXHUwMDNlYWRhcHRlciwgSURQRl9PVEhFUl9DQVBTLFxuJiM0MztcdFx0XHRcdFx0ICAgVklSVENITkwyX0NBUF9TUExJVFFfUVNDSEVEKTtcbiYjNDM7XHRpZiAoIXZwb3J0LVx1MDAzZXhkcHNxX2ZiKVxuJiM0MztcdFx0Z290byBzZXR1cDtcbiYjNDM7XG4mIzQzO1x0bWFza3MgPSBrdnphbGxvY19vYmpzKCptYXNrcywgdnBvcnQtXHUwMDNlbnVtX3hkcF90eHEpO1xuJiM0MztcdGlmICghbWFza3MpXG4mIzQzO1x0XHRnb3RvIGVycl9tYXNrcztcbiYjNDM7XG4mIzQzO1x0Zm9yICh1MzIgaSA9IDA7IGkgXHUwMDNjIHZwb3J0LVx1MDAzZW51bV94ZHBfdHhxOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0bWFza3NbaV0gPSBiaXRtYXBfemFsbG9jX25vZGUodnBvcnQtXHUwMDNldHhxc1tzcXMgJiM0MzsgaV0tXHUwMDNlZGVzY19jb3VudCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIEdGUF9LRVJORUwsIGNwdV90b19tZW0oaSkpO1xuJiM0MztcdFx0aWYgKCFtYXNrc1tpXSkge1xuJiM0MztcdFx0XHRmb3IgKGludCBqID0gaSAtIDE7IGogXHUwMDNlPSAwOyBqLS0pXG4mIzQzO1x0XHRcdFx0Yml0bWFwX2ZyZWUobWFza3Nbal0pO1xuJiM0MztcbiYjNDM7XHRcdFx0Z290byBlcnJfbWFza3M7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR3YXJuID0gIXN0YXRpY19rZXlfZW5hYmxlZChcdTAwMjZpZHBmX3hkcF9mYik7XG4mIzQzO1x0c3RhdGljX2JyYW5jaF9pbmMoXHUwMDI2aWRwZl94ZHBfZmIpO1xuJiM0MztcbiYjNDM7XHRpZiAod2FybiBcdTAwMjZcdTAwMjYgbmV0X3JhdGVsaW1pdCgpKVxuJiM0MztcdFx0bmV0ZGV2X3dhcm4oZGV2LFxuJiM0MztcdFx0XHQgICAgXCYjMzQ7VGhlIEZXIGRvZXNuJiMzOTt0IHN1cHBvcnQgVHggaW4gRklGTyBtb2RlLCBYRFAgVHggcGVyZm9ybWFuY2UgbWlnaHQgYmUgc3Vib3B0aW1hbFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztzZXR1cDpcbiBcdGZvciAodTMyIGkgPSBzcXM7IGkgXHUwMDNjIHZwb3J0LVx1MDAzZW51bV90eHE7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp4ZHBzcSA9IHZwb3J0LVx1MDAzZXR4cXNbaV07XG4gXG5AQCAtMTgzLDggJiM0MzsyMTUsOCBAQCBpbnQgaWRwZl94ZHBzcXNfZ2V0KGNvbnN0IHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydClcbiBcdFx0a2ZyZWUoeGRwc3EtXHUwMDNlcmVmaWxscSk7XG4gXHRcdHhkcHNxLVx1MDAzZXJlZmlsbHEgPSBOVUxMO1xuIFxuLVx0XHRpZHBmX3F1ZXVlX2NsZWFyKEZMT1dfU0NIX0VOLCB4ZHBzcSk7XG4tXHRcdGlkcGZfcXVldWVfY2xlYXIoRkxPV19TQ0hfRU4sIHhkcHNxLVx1MDAzZWNvbXBscSk7XG4mIzQzO1x0XHRpZHBmX3F1ZXVlX2Fzc2lnbihGTE9XX1NDSF9FTiwgeGRwc3EsIHZwb3J0LVx1MDAzZXhkcHNxX2ZiKTtcbiYjNDM7XHRcdGlkcGZfcXVldWVfYXNzaWduKEZMT1dfU0NIX0VOLCB4ZHBzcS1cdTAwM2Vjb21wbHEsIHZwb3J0LVx1MDAzZXhkcHNxX2ZiKTtcbiBcdFx0aWRwZl9xdWV1ZV9zZXQoTk9JUlEsIHhkcHNxKTtcbiBcdFx0aWRwZl9xdWV1ZV9zZXQoWERQLCB4ZHBzcSk7XG4gXHRcdGlkcGZfcXVldWVfc2V0KFhEUCwgeGRwc3EtXHUwMDNlY29tcGxxKTtcbkBAIC0xOTcsMTIgJiM0MzsyMjksMjUgQEAgaW50IGlkcGZfeGRwc3FzX2dldChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpXG4gXHRcdHhkcHNxLVx1MDAzZXBlbmRpbmcgPSAwO1xuIFx0XHR4ZHBzcS1cdTAwM2V4ZHBfdHggPSAwO1xuIFx0XHR4ZHBzcS1cdTAwM2V0aHJlc2ggPSBsaWJldGhfeGRwX3F1ZXVlX3RocmVzaG9sZCh4ZHBzcS1cdTAwM2VkZXNjX2NvdW50KTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZpZHBmX3hkcF9mYikgXHUwMDI2XHUwMDI2IHZwb3J0LVx1MDAzZXhkcHNxX2ZiKSB7XG4mIzQzO1x0XHRcdHhkcHNxLVx1MDAzZXBlbmRpbmdfbWFzayA9IG1hc2tzW2kgLSBzcXNdO1xuJiM0MztcdFx0XHR4ZHBzcS1cdTAwM2VsYXN0X250dSA9IDA7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9tYXNrczpcbiYjNDM7XHR2cG9ydC1cdTAwM2V4ZHBzcV9mYiA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRmb3IgKHUzMiBpID0gMDsgaSBcdTAwM2MgdnBvcnQtXHUwMDNlbnVtX3hkcF90eHE7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0a2ZyZWUodGltZXJzW2ldKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FTk9NRU07XG4gfVxuIFxuLXZvaWQgaWRwZl94ZHBzcXNfcHV0KGNvbnN0IHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydClcbiYjNDM7dm9pZCBpZHBmX3hkcHNxc19wdXQoc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KVxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gXHR1MzIgc3FzO1xuQEAgLTIyMiwxMCAmIzQzOzI2NywyMyBAQCB2b2lkIGlkcGZfeGRwc3FzX3B1dChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpXG4gXHRcdGxpYmV0aF94ZHBzcV9kZWluaXRfdGltZXIoeGRwc3EtXHUwMDNldGltZXIpO1xuIFx0XHRsaWJldGhfeGRwc3FfcHV0KFx1MDAyNnhkcHNxLVx1MDAzZXhkcF9sb2NrLCBkZXYpO1xuIFxuJiM0MztcdFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2aWRwZl94ZHBfZmIpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCB4ZHBzcSkpIHtcbiYjNDM7XHRcdFx0Yml0bWFwX2ZyZWUoeGRwc3EtXHUwMDNlcGVuZGluZ19tYXNrKTtcbiYjNDM7XHRcdFx0eGRwc3EtXHUwMDNlcGVuZGluZ19tYXNrID0gTlVMTDtcbiYjNDM7XHRcdFx0eGRwc3EtXHUwMDNlbGFzdF9udHUgPSAwO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0a2ZyZWUoeGRwc3EtXHUwMDNldGltZXIpO1xuIFx0XHR4ZHBzcS1cdTAwM2VyZWZpbGxxID0gTlVMTDtcbiBcdFx0aWRwZl9xdWV1ZV9jbGVhcihOT0lSUSwgeGRwc3EpO1xuIFx0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXZwb3J0LVx1MDAzZXhkcHNxX2ZiKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzdGF0aWNfYnJhbmNoX2RlYyhcdTAwMjZpZHBmX3hkcF9mYik7XG4mIzQzO1x0dnBvcnQtXHUwMDNleGRwc3FfZmIgPSBmYWxzZTtcbiB9XG4gXG4gc3RhdGljIGludCBpZHBmX3hkcF9wYXJzZV9jcWUoY29uc3Qgc3RydWN0IGlkcGZfc3BsaXRxXzRiX3R4X2NvbXBsX2Rlc2MgKmRlc2MsXG5AQCAtMjUwLDYgJiM0MzszMDgsNjUgQEAgc3RhdGljIGludCBpZHBmX3hkcF9wYXJzZV9jcWUoY29uc3Qgc3RydWN0IGlkcGZfc3BsaXRxXzRiX3R4X2NvbXBsX2Rlc2MgKmRlc2MsXG4gXHRyZXR1cm4gdXBwZXJfMTZfYml0cyh2YWwpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHUzMiBpZHBmX3hkcHNxX3BvbGxfZmIoc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxLCB1MzIgYnVkZ2V0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlkcGZfY29tcGxfcXVldWUgKmNxID0geGRwc3EtXHUwMDNlY29tcGxxO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgKm1hc2sgPSB4ZHBzcS1cdTAwM2VwZW5kaW5nX21hc2s7XG4mIzQzO1x0dTMyIGRvbmVfZnJhbWVzLCB0eF9jbnQsIG5ld19udGM7XG4mIzQzO1x0dTMyIG50YyA9IGNxLVx1MDAzZW5leHRfdG9fY2xlYW47XG4mIzQzO1x0dTMyIGNudCA9IGNxLVx1MDAzZWRlc2NfY291bnQ7XG4mIzQzO1x0Ym9vbCBnZW47XG4mIzQzO1xuJiM0MztcdGdlbiA9IGlkcGZfcXVldWVfaGFzKEdFTl9DSEssIGNxKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChkb25lX2ZyYW1lcyA9IDA7IGRvbmVfZnJhbWVzIFx1MDAzYyBidWRnZXQ7ICkge1xuJiM0MztcdFx0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBpZHBmX3hkcF9wYXJzZV9jcWUoXHUwMDI2Y3EtXHUwMDNlY29tcFtudGNdLmNvbW1vbiwgZ2VuKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNlPSAwKSB7XG4mIzQzO1x0XHRcdF9fY2xlYXJfYml0KHJldCwgbWFzayk7XG4mIzQzO1x0XHRcdGRvbmVfZnJhbWVzJiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0XHRcdGdvdG8gbmV4dDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRzd2l0Y2ggKHJldCkge1xuJiM0MztcdFx0Y2FzZSAtRU5PREFUQTpcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRjYXNlIC1FSU5WQUw6XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7bmV4dDpcbiYjNDM7XHRcdGlmICh1bmxpa2VseSgmIzQzOyYjNDM7bnRjID09IGNudCkpIHtcbiYjNDM7XHRcdFx0bnRjID0gMDtcbiYjNDM7XHRcdFx0Z2VuID0gIWdlbjtcbiYjNDM7XHRcdFx0aWRwZl9xdWV1ZV9jaGFuZ2UoR0VOX0NISywgY3EpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRjcS1cdTAwM2VuZXh0X3RvX2NsZWFuID0gbnRjO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkoIWRvbmVfZnJhbWVzKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHR0eF9jbnQgPSB4ZHBzcS1cdTAwM2VkZXNjX2NvdW50O1xuJiM0MztcbiYjNDM7XHQvKiBEb24mIzM5O3QgZ28gcGFzdCBuZXh0X3RvX3VzZSAqL1xuJiM0MztcdF9fc2V0X2JpdCh4ZHBzcS1cdTAwM2VuZXh0X3RvX3VzZSwgbWFzayk7XG4mIzQzO1xuJiM0MztcdG5ld19udGMgPSBmaW5kX25leHRfYml0KG1hc2ssIHR4X2NudCwgeGRwc3EtXHUwMDNlbmV4dF90b19jbGVhbik7XG4mIzQzO1x0ZG9uZV9mcmFtZXMgPSBuZXdfbnRjIC0geGRwc3EtXHUwMDNlbmV4dF90b19jbGVhbjtcbiYjNDM7XG4mIzQzO1x0aWYgKG5ld19udGMgPT0gdHhfY250KVxuJiM0MztcdFx0ZG9uZV9mcmFtZXMgJiM0Mzs9IGZpbmRfZmlyc3RfYml0KG1hc2ssIHR4X2NudCk7XG4mIzQzO1xuJiM0MztcdF9fY2xlYXJfYml0KHhkcHNxLVx1MDAzZW5leHRfdG9fdXNlLCBtYXNrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGRvbmVfZnJhbWVzO1xuJiM0Mzt9XG4mIzQzO1xuIHUzMiBpZHBmX3hkcHNxX3BvbGwoc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxLCB1MzIgYnVkZ2V0KVxuIHtcbiBcdHN0cnVjdCBpZHBmX2NvbXBsX3F1ZXVlICpjcSA9IHhkcHNxLVx1MDAzZWNvbXBscTtcbkBAIC0yNjAsNiAmIzQzOzM3NywxMCBAQCB1MzIgaWRwZl94ZHBzcV9wb2xsKHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp4ZHBzcSwgdTMyIGJ1ZGdldClcbiBcdHUzMiBkb25lX2ZyYW1lcztcbiBcdGJvb2wgZ2VuO1xuIFxuJiM0MztcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmlkcGZfeGRwX2ZiKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHhkcHNxKSlcbiYjNDM7XHRcdHJldHVybiBpZHBmX3hkcHNxX3BvbGxfZmIoeGRwc3EsIGJ1ZGdldCk7XG4mIzQzO1xuIFx0Z2VuID0gaWRwZl9xdWV1ZV9oYXMoR0VOX0NISywgY3EpO1xuIFxuIFx0Zm9yIChkb25lX2ZyYW1lcyA9IDA7IGRvbmVfZnJhbWVzIFx1MDAzYyBidWRnZXQ7ICkge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL3hkcC5oXG5pbmRleCA2M2U1NmY3ZDQzZTAwLi45NWU0N2VhMmNjYmE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuaFxuQEAgLTgsNiAmIzQzOzgsMTAgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDtpZHBmX3R4cnguaFwmIzM0O1xuIFxuJiM0MztzdHJ1Y3QgaWRwZl9xX3ZlY19yc3JjO1xuJiM0MztcbiYjNDM7REVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGlkcGZfeGRwX2ZiKTtcbiYjNDM7XG4gaW50IGlkcGZfeGRwX3J4cV9pbmZvX2luaXQoc3RydWN0IGlkcGZfcnhfcXVldWUgKnJ4cSk7XG4gaW50IGlkcGZfeGRwX3J4cV9pbmZvX2luaXRfYWxsKGNvbnN0IHN0cnVjdCBpZHBmX3FfdmVjX3JzcmMgKnJzcmMpO1xuIHZvaWQgaWRwZl94ZHBfcnhxX2luZm9fZGVpbml0KHN0cnVjdCBpZHBmX3J4X3F1ZXVlICpyeHEsIHUzMiBtb2RlbCk7XG5AQCAtMTUsMTIgJiM0MzsxOSw0MCBAQCB2b2lkIGlkcGZfeGRwX3J4cV9pbmZvX2RlaW5pdF9hbGwoY29uc3Qgc3RydWN0IGlkcGZfcV92ZWNfcnNyYyAqcnNyYyk7XG4gdm9pZCBpZHBmX3hkcF9jb3B5X3Byb2dfdG9fcnFzKGNvbnN0IHN0cnVjdCBpZHBmX3FfdmVjX3JzcmMgKnJzcmMsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2cpO1xuIFxuLWludCBpZHBmX3hkcHNxc19nZXQoY29uc3Qgc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KTtcbi12b2lkIGlkcGZfeGRwc3FzX3B1dChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpO1xuJiM0MztpbnQgaWRwZl94ZHBzcXNfZ2V0KHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCk7XG4mIzQzO3ZvaWQgaWRwZl94ZHBzcXNfcHV0KHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCk7XG4gXG4gdTMyIGlkcGZfeGRwc3FfcG9sbChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EsIHUzMiBidWRnZXQpO1xuIGJvb2wgaWRwZl94ZHBfdHhfZmx1c2hfYnVsayhzdHJ1Y3QgbGliZXRoX3hkcF90eF9idWxrICpicSwgdTMyIGZsYWdzKTtcbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwX3R4X3htaXRfZmIoc3RydWN0IGxpYmV0aF94ZHBfdHhfZGVzYyBkZXNjLCB1MzIgaSxcbiYjNDM7XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGxpYmV0aF94ZHBzcSAqc3EsIHU2NCBwcml2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlkcGZfZmxleF90eF9zY2hlZF9kZXNjICp0eF9kZXNjID0gc3EtXHUwMDNlZGVzY3M7XG4mIzQzO1x0dTMyIGNtZDtcbiYjNDM7XG4mIzQzO1x0Y21kID0gRklFTERfUFJFUChJRFBGX1RYRF9GTEVYX0ZMT1dfRFRZUEVfTSxcbiYjNDM7XHRcdFx0IElEUEZfVFhfREVTQ19EVFlQRV9GTEVYX0ZMT1dfU0NIRSk7XG4mIzQzO1x0aWYgKGRlc2MuZmxhZ3MgXHUwMDI2IExJQkVUSF9YRFBfVFhfTEFTVClcbiYjNDM7XHRcdGNtZCB8PSBJRFBGX1RYRF9GTEVYX0ZMT1dfQ01EX0VPUDtcbiYjNDM7XHRpZiAocHJpdiBcdTAwMjZcdTAwMjYgKGRlc2MuZmxhZ3MgXHUwMDI2IExJQkVUSF9YRFBfVFhfQ1NVTSkpXG4mIzQzO1x0XHRjbWQgfD0gSURQRl9UWERfRkxFWF9GTE9XX0NNRF9DU19FTjtcbiYjNDM7XG4mIzQzO1x0dHhfZGVzYyA9IFx1MDAyNnR4X2Rlc2NbaV07XG4mIzQzO1x0dHhfZGVzYy1cdTAwM2VidWZfYWRkciA9IGNwdV90b19sZTY0KGRlc2MuYWRkcik7XG4mIzQzO1xuJiM0MzsjaWZkZWYgX19MSUJFVEhfV09SRF9BQ0NFU1NcbiYjNDM7XHQqKHU2NCAqKVx1MDAyNnR4X2Rlc2MtXHUwMDNlcXcxID0gKCh1NjQpZGVzYy5sZW4gXHUwMDNjXHUwMDNjIDQ4KSB8ICgodTY0KWkgXHUwMDNjXHUwMDNjIDMyKSB8IGNtZDtcbiYjNDM7I2Vsc2VcbiYjNDM7XHR0eF9kZXNjLVx1MDAzZXF3MS5yeHJfYnVmc2l6ZSA9IGNwdV90b19sZTE2KGRlc2MubGVuKTtcbiYjNDM7XHR0eF9kZXNjLVx1MDAzZXF3MS5jb21wbF90YWcgPSBjcHVfdG9fbGUxNihpKTtcbiYjNDM7XHR0eF9kZXNjLVx1MDAzZXF3MS50c1swXSA9IDA7XG4mIzQzO1x0dHhfZGVzYy1cdTAwM2VxdzEudHNbMV0gPSAwO1xuJiM0MztcdHR4X2Rlc2MtXHUwMDNlcXcxLnRzWzJdID0gMDtcbiYjNDM7XHR0eF9kZXNjLVx1MDAzZXF3MS5jbWRfZHR5cGUgPSBjbWQ7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGlkcGZfeGRwX3R4X3htaXQgLSBwcm9kdWNlIGEgc2luZ2xlIEhXIFR4IGRlc2NyaXB0b3Igb3V0IG9mIFhEUCBkZXNjXG4gICogQGRlc2M6IFhEUCBkZXNjcmlwdG9yIHRvIHB1bGwgdGhlIERNQSBhZGRyZXNzIGFuZCBsZW5ndGggZnJvbVxuQEAgLTM0LDYgJiM0Mzs2NiwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBfdHhfeG1pdChzdHJ1Y3QgbGliZXRoX3hkcF90eF9kZXNjIGRlc2MsIHUzMiBpLFxuIFx0c3RydWN0IGlkcGZfZmxleF90eF9kZXNjICp0eF9kZXNjID0gc3EtXHUwMDNlZGVzY3M7XG4gXHR1MzIgY21kO1xuIFxuJiM0MztcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmlkcGZfeGRwX2ZiKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sXG4mIzQzO1x0XHRcdCAgIGxpYmV0aF94ZHBzcV90b19zcShzcSwgc3RydWN0IGlkcGZfdHhfcXVldWUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBuZXh0X3RvX3VzZSkpKSB7XG4mIzQzO1x0XHRpZHBmX3hkcF90eF94bWl0X2ZiKGRlc2MsIGksIHNxLCBwcml2KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0Y21kID0gRklFTERfUFJFUChJRFBGX0ZMRVhfVFhEX1FXMV9EVFlQRV9NLFxuIFx0XHRcdCBJRFBGX1RYX0RFU0NfRFRZUEVfRkxFWF9MMlRBRzFfTDJUQUcyKTtcbiBcdGlmIChkZXNjLmZsYWdzIFx1MDAyNiBMSUJFVEhfWERQX1RYX0xBU1QpXG5AQCAtNTMsMTIgJiM0Mzs5MywzNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBfdHhfeG1pdChzdHJ1Y3QgbGliZXRoX3hkcF90eF9kZXNjIGRlc2MsIHUzMiBpLFxuICNlbmRpZlxuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBzcV9zZXRfcnMoY29uc3Qgc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxKVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBzcV9zZXRfcnNfZmIoc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIG50dSA9IHhkcHNxLVx1MDAzZW5leHRfdG9fdXNlO1xuJiM0MztcdHUzMiBvbGQgPSB4ZHBzcS1cdTAwM2VsYXN0X250dTtcbiYjNDM7XG4mIzQzO1x0aWYgKG9sZCBcdTAwM2UgbnR1KSB7XG4mIzQzO1x0XHRiaXRtYXBfc2V0KHhkcHNxLVx1MDAzZXBlbmRpbmdfbWFzaywgb2xkLCB4ZHBzcS1cdTAwM2VkZXNjX2NvdW50IC0gb2xkKTtcbiYjNDM7XHRcdGlmIChudHUpXG4mIzQzO1x0XHRcdGJpdG1hcF9zZXQoeGRwc3EtXHUwMDNlcGVuZGluZ19tYXNrLCAwLCBudHUpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRiaXRtYXBfc2V0KHhkcHNxLVx1MDAzZXBlbmRpbmdfbWFzaywgb2xkLCBudHUgLSBvbGQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0eGRwc3EtXHUwMDNlbGFzdF9udHUgPSBudHU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBpZHBmX3hkcHNxX3NldF9ycyhzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EpXG4ge1xuIFx0dTMyIG50dSwgY21kO1xuIFxuJiM0MztcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmlkcGZfeGRwX2ZiKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHhkcHNxKSkge1xuJiM0MztcdFx0aWRwZl94ZHBzcV9zZXRfcnNfZmIoeGRwc3EpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRudHUgPSB4ZHBzcS1cdTAwM2VuZXh0X3RvX3VzZTtcbi1cdGlmICh1bmxpa2VseSghbnR1KSlcbiYjNDM7XHRpZiAoIW50dSlcbiBcdFx0bnR1ID0geGRwc3EtXHUwMDNlZGVzY19jb3VudDtcbiBcbiBcdGNtZCA9IEZJRUxEX1BSRVAoSURQRl9GTEVYX1RYRF9RVzFfQ01EX00sIElEUEZfVFhfREVTQ19DTURfUlMpO1xuQEAgLTg0LDcgJiM0MzsxNDYsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBzcV91cGRhdGVfdGFpbChjb25zdCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EpXG4gICogU2V0IHRoZSBSUyBiaXQgKFwmIzM0O2VuZCBvZiBiYXRjaFwmIzM0OyksIGJ1bXAgdGhlIHRhaWwsIGFuZCBxdWV1ZSB0aGUgY2xlYW51cCB0aW1lci5cbiAgKiBUbyBiZSBjYWxsZWQgYWZ0ZXIgYSBOQVBJIHBvbGxpbmcgbG9vcCwgYXQgdGhlIGVuZCBvZiAubmRvX3hkcF94bWl0KCkgZXRjLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcF90eF9maW5hbGl6ZSh2b2lkICpfeGRwc3EsIGJvb2wgc2VudCwgYm9vbCBmbHVzaClcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGlkcGZfeGRwX3R4X2ZpbmFsaXplKHZvaWQgKl94ZHBzcSwgYm9vbCBzZW50LFxuJiM0MztcdFx0XHRcdFx0XHQgYm9vbCBmbHVzaClcbiB7XG4gXHRzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EgPSBfeGRwc3E7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbGliZXRoL3hkcC5oIGIvaW5jbHVkZS9uZXQvbGliZXRoL3hkcC5oXG5pbmRleCA4OTg3MjNhYjYyZTgxLi5lZDYxZDgzYmRhMmQ3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbGliZXRoL3hkcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9saWJldGgveGRwLmhcbkBAIC00MzAsNiAmIzQzOzQzMCwxOSBAQCBzdHJ1Y3QgbGliZXRoX3hkcHNxIHtcbiBcdHN0cnVjdCBsaWJldGhfeGRwc3FfbG9ja1x0KmxvY2s7XG4gfTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGxpYmV0aF94ZHBzcV90b19zcSAtIGdldCBTUSBwb2ludGVyIGZyb20gYW4gWERQU1EgcG9pbnRlclxuJiM0MzsgKiBAeGRwc3E6IFx1MDAyNmxpYmV0aF94ZHBzcSBjb3JyZXNwb25kaW5nIHRvIHRoZSBxdWV1ZVxuJiM0MzsgKiBAdHlwZTogdHlwZW9mKCkgb2YgdGhlIGRyaXZlciBUeCBxdWV1ZSBzdHJ1Y3R1cmVcbiYjNDM7ICogQG1lbWJlcjogbmFtZSBvZiB0aGUgTlRVIGZpZWxkIGluc2lkZSBAdHlwZVxuJiM0MzsgKlxuJiM0MzsgKiBTb21lIG9mIHRoZSBzZW5kaW5nIGNhbGxiYWNrcyB0YWtlIG9ubHkgXHUwMDI2bGliZXRoX3hkcHNxIHBvaW50ZXIgYW5kIG5vIHBvaW50ZXJcbiYjNDM7ICogdG8gdGhlIGFjdHVhbCBkcml2ZXIgVHggcXVldWUgc3RydWN0dXJlLiBVc2UgdGhpcyBoZWxwZXIgdG8gcXVpY2tseSBqdW1wIHRvXG4mIzQzOyAqIHRoZSBsYXR0ZXIgd2hlbiBuZWVkZWQuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIGxpYmV0aF94ZHBzcV90b19zcSh4ZHBzcSwgdHlwZSwgbWVtYmVyKVx0XHRcdFx0ICAgICAgXFxcbiYjNDM7XHRjb250YWluZXJfb2ZfY29uc3QoKHhkcHNxKS1cdTAwM2VudHUsIHR5cGUsIG1lbWJlcilcbiYjNDM7XG4gLyoqXG4gICogc3RydWN0IGxpYmV0aF94ZHBfdHhfZGVzYyAtIGFic3RyYWN0aW9uIGZvciBhbiBYRFAgVHggZGVzY3JpcHRvclxuICAqIEBhZGRyOiBETUEgYWRkcmVzcyBvZiB0aGUgZnJhbWVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbiAoaWRwZikgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIFNtYXJ0TklDL0lQVSBkcml2ZXIuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIG1ha2luZyBpdCB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiM2ZjYjY4YmM2MDczYjUwOGExYjZjNjI2NjgxNmZhYzBkNmY4ODRjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMTg6MDY6MDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oCmluZGV4IDQ3MGJjMjNjODQ0YzEuLjFlODk3ZTEzMWNiMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oCkBAIC0zODMsNiAmIzQzOzM4Myw3IEBAIHN0cnVjdCBpZHBmX3Zwb3J0IHsKIAlzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqKnR4cXM7CiAJdTE2IG51bV90eHE7CiAJdTE2IG51bV94ZHBfdHhxOwomIzQzOwlib29sIHhkcHNxX2ZiOwogCWJvb2wgeGRwc3Ffc2hhcmU7CiAJc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmMKaW5kZXggYzNmZmI0NDUyOTdmOC4uNzQzMzk1OTYyMDc3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jCkBAIC0yMjcsNyAmIzQzOzIyNyw3IEBAIHN0YXRpYyBpbnQgaWRwZl90eF9kZXNjX2FsbG9jKGNvbnN0IHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCwKIAogCWlkcGZfeHNrX3NldHVwX3F1ZXVlKHZwb3J0LCB0eF9xLCBWSVJUQ0hOTDJfUVVFVUVfVFlQRV9UWCk7CiAKLQlpZiAoIWlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCB0eF9xKSkKJiM0MzsJaWYgKCFpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgdHhfcSkgfHwgaWRwZl9xdWV1ZV9oYXMoWERQLCB0eF9xKSkKIAkJcmV0dXJuIDA7CiAKIAlyZWZpbGxxID0gdHhfcS0mZ3Q7cmVmaWxscTsKQEAgLTEwNTUsNiAmIzQzOzEwNTUsMTMgQEAgc3RhdGljIHZvaWQgaWRwZl9jbGVhbl9xdWV1ZV9zZXQoY29uc3Qgc3RydWN0IGlkcGZfcXVldWVfc2V0ICpxcykKIAkJCWlmIChpZHBmX3F1ZXVlX2hhcyhYRFAsIHEtJmd0O3R4cSkpIHsKIAkJCQlxLSZndDt0eHEtJmd0O3BlbmRpbmcgPSAwOwogCQkJCXEtJmd0O3R4cS0mZ3Q7eGRwX3R4ID0gMDsKJiM0MzsKJiM0MzsJCQkJaWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoJmFtcDtpZHBmX3hkcF9mYikgJmFtcDsmYW1wOwomIzQzOwkJCQkgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHEtJmd0O3R4cSkpIHsKJiM0MzsJCQkJCWJpdG1hcF96ZXJvKHEtJmd0O3R4cS0mZ3Q7cGVuZGluZ19tYXNrLAomIzQzOwkJCQkJCSAgICBxLSZndDt0eHEtJmd0O2Rlc2NfY291bnQpOwomIzQzOwkJCQkJcS0mZ3Q7dHhxLSZndDtsYXN0X250dSA9IDA7CiYjNDM7CQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJcS0mZ3Q7dHhxLSZndDt0eHFfZ3JwLSZndDtudW1fY29tcGxldGlvbnNfcGVuZGluZyA9IDA7CiAJCQl9CkBAIC0xMzE3LDcgJiM0MzsxMzI0LDggQEAgc3RhdGljIHZvaWQgaWRwZl90eHFfZ3JvdXBfcmVsKHN0cnVjdCBpZHBmX3FfdmVjX3JzcmMgKnJzcmMpCiAJCQlpZiAoIXR4cV9ncnAtJmd0O3R4cXNbal0pCiAJCQkJY29udGludWU7CiAKLQkJCWlmIChpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgdHhxX2dycC0mZ3Q7dHhxc1tqXSkpIHsKJiM0MzsJCQlpZiAoaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHR4cV9ncnAtJmd0O3R4cXNbal0pICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgIWlkcGZfcXVldWVfaGFzKFhEUCwgdHhxX2dycC0mZ3Q7dHhxc1tqXSkpIHsKIAkJCQlrZnJlZSh0eHFfZ3JwLSZndDt0eHFzW2pdLSZndDtyZWZpbGxxKTsKIAkJCQl0eHFfZ3JwLSZndDt0eHFzW2pdLSZndDtyZWZpbGxxID0gTlVMTDsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oCmluZGV4IDkzNTQ3NTk3ZWZkMmEuLmRjZTA3ZmJiNmU3NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaApAQCAtNjI1LDEyICYjNDM7NjI1LDE0IEBAIGxpYmV0aF9jYWNoZWxpbmVfc2V0X2Fzc2VydChzdHJ1Y3QgaWRwZl9yeF9xdWV1ZSwKICAqIEBjbGVhbl9idWRnZXQ6IHNpbmdsZXEgb25seSwgcXVldWUgY2xlYW5pbmcgYnVkZ2V0CiAgKiBAY2xlYW5lZF9wa3RzOiBOdW1iZXIgb2YgcGFja2V0cyBjbGVhbmVkIGZvciB0aGUgYWJvdmUgc2FpZCBjYXNlCiAgKiBAcmVmaWxscTogUG9pbnRlciB0byByZWZpbGwgcXVldWUKJiM0MzsgKiBAY2FjaGVkX3RzdGFtcF9jYXBzOiBUeCB0aW1lc3RhbXAgY2FwYWJpbGl0aWVzIG5lZ290aWF0ZWQgd2l0aCB0aGUgQ1AKJiM0MzsgKiBAdHN0YW1wX3Rhc2s6IFdvcmsgdGhhdCBoYW5kbGVzIFR4IHRpbWVzdGFtcCByZWFkCiAgKiBAcGVuZGluZzogbnVtYmVyIG9mIHBlbmRpbmcgZGVzY3JpcHRvcnMgdG8gc2VuZCBpbiBRQgogICogQHhkcF90eDogbnVtYmVyIG9mIHBlbmRpbmcgJmFtcDt4ZHBfYnVmZiBvciAmYW1wO3hkcF9mcmFtZSBidWZmZXJzCiAgKiBAdGltZXI6IHRpbWVyIGZvciBYRFAgVHggcXVldWUgY2xlYW51cAogICogQHhkcF9sb2NrOiBsb2NrIGZvciBYRFAgVHggcXVldWVzIHNoYXJpbmcKLSAqIEBjYWNoZWRfdHN0YW1wX2NhcHM6IFR4IHRpbWVzdGFtcCBjYXBhYmlsaXRpZXMgbmVnb3RpYXRlZCB3aXRoIHRoZSBDUAotICogQHRzdGFtcF90YXNrOiBXb3JrIHRoYXQgaGFuZGxlcyBUeCB0aW1lc3RhbXAgcmVhZAomIzQzOyAqIEBwZW5kaW5nX21hc2s6IG1hc2sgb2YgYnVmZmVycyB3YWl0aW5nIGZvciBjb21wbGV0aW9uIGluIHRoZSBGQiBYRFAgbW9kZQomIzQzOyAqIEBsYXN0X250dTogQG5leHRfdG9fdXNlIGZyb20gdGhlIHByZXZpb3VzIGJhdGNoIGluIHRoZSBGQiBYRFAgbW9kZQogICogQHN0YXRzX3N5bmM6IFNlZSBzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMKICAqIEBxX3N0YXRzOiBTZWUgdW5pb24gaWRwZl90eF9xdWV1ZV9zdGF0cwogICogQHFfaWQ6IFF1ZXVlIGlkCkBAIC02ODksNiAmIzQzOzY5MSw5IEBAIHN0cnVjdCBpZHBmX3R4X3F1ZXVlIHsKIAkJCXUxNiBjbGVhbmVkX3BrdHM7CiAKIAkJCXN0cnVjdCBpZHBmX3N3X3F1ZXVlICpyZWZpbGxxOwomIzQzOwomIzQzOwkJCXN0cnVjdCBpZHBmX3B0cF92cG9ydF90eF90c3RhbXBfY2FwcyAqY2FjaGVkX3RzdGFtcF9jYXBzOwomIzQzOwkJCXN0cnVjdCB3b3JrX3N0cnVjdCAqdHN0YW1wX3Rhc2s7CiAJCX07CiAJCXN0cnVjdCB7CiAJCQl1MzIgcGVuZGluZzsKQEAgLTY5NiwxMiAmIzQzOzcwMSwxMiBAQCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSB7CiAKIAkJCXN0cnVjdCBsaWJldGhfeGRwc3FfdGltZXIgKnRpbWVyOwogCQkJc3RydWN0IGxpYmV0aF94ZHBzcV9sb2NrIHhkcF9sb2NrOwomIzQzOwomIzQzOwkJCXVuc2lnbmVkIGxvbmcgKnBlbmRpbmdfbWFzazsKJiM0MzsJCQl1MzIgbGFzdF9udHU7CiAJCX07CiAJfTsKIAotCXN0cnVjdCBpZHBmX3B0cF92cG9ydF90eF90c3RhbXBfY2FwcyAqY2FjaGVkX3RzdGFtcF9jYXBzOwotCXN0cnVjdCB3b3JrX3N0cnVjdCAqdHN0YW1wX3Rhc2s7Ci0KIAlzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMgc3RhdHNfc3luYzsKIAlzdHJ1Y3QgaWRwZl90eF9xdWV1ZV9zdGF0cyBxX3N0YXRzOwogCV9fY2FjaGVsaW5lX2dyb3VwX2VuZF9hbGlnbmVkKHJlYWRfd3JpdGUpOwpAQCAtNzE4LDggJiM0Mzs3MjMsNyBAQCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSB7CiAJX19jYWNoZWxpbmVfZ3JvdXBfZW5kX2FsaWduZWQoY29sZCk7CiB9OwogbGliZXRoX2NhY2hlbGluZV9zZXRfYXNzZXJ0KHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCA2NCwKLQkJCSAgICAxMDQgJiM0MzsKLQkJCSAgICBvZmZzZXRvZihzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgY2FjaGVkX3RzdGFtcF9jYXBzKSAtCiYjNDM7CQkJICAgIDk2ICYjNDM7IG9mZnNldG9mKHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCB0c3RhbXBfdGFzaykgLQogCQkJICAgIG9mZnNldG9mZW5kKHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCB0aW1lcikgJiM0MzsKIAkJCSAgICBvZmZzZXRvZihzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgcV9zdGF0cykgLQogCQkJICAgIG9mZnNldG9mZW5kKHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCB0c3RhbXBfdGFzayksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL3hkcC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuYwppbmRleCBjYmNjZDQ1NDY3NjgxLi5jNzcxNjYzNjc3YTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL3hkcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmMKQEAgLTcsNiAmIzQzOzcsOCBAQAogI2luY2x1ZGUgJiMzNDt4ZHAuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3hzay5oJiMzNDsKIAomIzQzO0RFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGlkcGZfeGRwX2ZiKTsKJiM0MzsKIHN0YXRpYyBpbnQgaWRwZl9yeHFfZm9yX2VhY2goY29uc3Qgc3RydWN0IGlkcGZfcV92ZWNfcnNyYyAqcnNyYywKIAkJCSAgICAgaW50ICgqZm4pKHN0cnVjdCBpZHBmX3J4X3F1ZXVlICpyeHEsIHZvaWQgKmFyZyksCiAJCQkgICAgIHZvaWQgKmFyZykKQEAgLTE0OSwxMCAmIzQzOzE1MSwxMiBAQCB2b2lkIGlkcGZfeGRwX2NvcHlfcHJvZ190b19ycXMoY29uc3Qgc3RydWN0IGlkcGZfcV92ZWNfcnNyYyAqcnNyYywKIAogc3RhdGljIHZvaWQgaWRwZl94ZHBfdHhfdGltZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAotaW50IGlkcGZfeGRwc3FzX2dldChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpCiYjNDM7aW50IGlkcGZfeGRwc3FzX2dldChzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpCiB7CiAJc3RydWN0IGxpYmV0aF94ZHBzcV90aW1lciAqKnRpbWVycyBfX2ZyZWUoa3ZmcmVlKSA9IE5VTEw7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKJiM0MzsJdW5zaWduZWQgbG9uZyAqKm1hc2tzIF9fZnJlZShrdmZyZWUpID0gTlVMTDsKJiM0MzsJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKJiM0MzsJYm9vbCB3YXJuOwogCXUzMiBzcXM7CiAKIAlpZiAoIWlkcGZfeGRwX2VuYWJsZWQodnBvcnQpKQpAQCAtMTc2LDYgJiM0MzsxODAsMzQgQEAgaW50IGlkcGZfeGRwc3FzX2dldChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpCiAJZGV2ID0gdnBvcnQtJmd0O25ldGRldjsKIAlzcXMgPSB2cG9ydC0mZ3Q7ZGZsdF9xdl9yc3JjLnhkcF90eHFfb2Zmc2V0OwogCiYjNDM7CXZwb3J0LSZndDt4ZHBzcV9mYiA9ICFpZHBmX2lzX2NhcF9lbmEodnBvcnQtJmd0O2FkYXB0ZXIsIElEUEZfT1RIRVJfQ0FQUywKJiM0MzsJCQkJCSAgIFZJUlRDSE5MMl9DQVBfU1BMSVRRX1FTQ0hFRCk7CiYjNDM7CWlmICghdnBvcnQtJmd0O3hkcHNxX2ZiKQomIzQzOwkJZ290byBzZXR1cDsKJiM0MzsKJiM0MzsJbWFza3MgPSBrdnphbGxvY19vYmpzKCptYXNrcywgdnBvcnQtJmd0O251bV94ZHBfdHhxKTsKJiM0MzsJaWYgKCFtYXNrcykKJiM0MzsJCWdvdG8gZXJyX21hc2tzOwomIzQzOwomIzQzOwlmb3IgKHUzMiBpID0gMDsgaSAmbHQ7IHZwb3J0LSZndDtudW1feGRwX3R4cTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCW1hc2tzW2ldID0gYml0bWFwX3phbGxvY19ub2RlKHZwb3J0LSZndDt0eHFzW3NxcyAmIzQzOyBpXS0mZ3Q7ZGVzY19jb3VudCwKJiM0MzsJCQkJCSAgICAgIEdGUF9LRVJORUwsIGNwdV90b19tZW0oaSkpOwomIzQzOwkJaWYgKCFtYXNrc1tpXSkgewomIzQzOwkJCWZvciAoaW50IGogPSBpIC0gMTsgaiAmZ3Q7PSAwOyBqLS0pCiYjNDM7CQkJCWJpdG1hcF9mcmVlKG1hc2tzW2pdKTsKJiM0MzsKJiM0MzsJCQlnb3RvIGVycl9tYXNrczsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwl3YXJuID0gIXN0YXRpY19rZXlfZW5hYmxlZCgmYW1wO2lkcGZfeGRwX2ZiKTsKJiM0MzsJc3RhdGljX2JyYW5jaF9pbmMoJmFtcDtpZHBmX3hkcF9mYik7CiYjNDM7CiYjNDM7CWlmICh3YXJuICZhbXA7JmFtcDsgbmV0X3JhdGVsaW1pdCgpKQomIzQzOwkJbmV0ZGV2X3dhcm4oZGV2LAomIzQzOwkJCSAgICAmIzM0O1RoZSBGVyBkb2VzbiYjMzk7dCBzdXBwb3J0IFR4IGluIEZJRk8gbW9kZSwgWERQIFR4IHBlcmZvcm1hbmNlIG1pZ2h0IGJlIHN1Ym9wdGltYWxcbiYjMzQ7KTsKJiM0MzsKJiM0MztzZXR1cDoKIAlmb3IgKHUzMiBpID0gc3FzOyBpICZsdDsgdnBvcnQtJmd0O251bV90eHE7IGkmIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCBpZHBmX3R4X3F1ZXVlICp4ZHBzcSA9IHZwb3J0LSZndDt0eHFzW2ldOwogCkBAIC0xODMsOCAmIzQzOzIxNSw4IEBAIGludCBpZHBmX3hkcHNxc19nZXQoY29uc3Qgc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KQogCQlrZnJlZSh4ZHBzcS0mZ3Q7cmVmaWxscSk7CiAJCXhkcHNxLSZndDtyZWZpbGxxID0gTlVMTDsKIAotCQlpZHBmX3F1ZXVlX2NsZWFyKEZMT1dfU0NIX0VOLCB4ZHBzcSk7Ci0JCWlkcGZfcXVldWVfY2xlYXIoRkxPV19TQ0hfRU4sIHhkcHNxLSZndDtjb21wbHEpOwomIzQzOwkJaWRwZl9xdWV1ZV9hc3NpZ24oRkxPV19TQ0hfRU4sIHhkcHNxLCB2cG9ydC0mZ3Q7eGRwc3FfZmIpOwomIzQzOwkJaWRwZl9xdWV1ZV9hc3NpZ24oRkxPV19TQ0hfRU4sIHhkcHNxLSZndDtjb21wbHEsIHZwb3J0LSZndDt4ZHBzcV9mYik7CiAJCWlkcGZfcXVldWVfc2V0KE5PSVJRLCB4ZHBzcSk7CiAJCWlkcGZfcXVldWVfc2V0KFhEUCwgeGRwc3EpOwogCQlpZHBmX3F1ZXVlX3NldChYRFAsIHhkcHNxLSZndDtjb21wbHEpOwpAQCAtMTk3LDEyICYjNDM7MjI5LDI1IEBAIGludCBpZHBmX3hkcHNxc19nZXQoY29uc3Qgc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KQogCQl4ZHBzcS0mZ3Q7cGVuZGluZyA9IDA7CiAJCXhkcHNxLSZndDt4ZHBfdHggPSAwOwogCQl4ZHBzcS0mZ3Q7dGhyZXNoID0gbGliZXRoX3hkcF9xdWV1ZV90aHJlc2hvbGQoeGRwc3EtJmd0O2Rlc2NfY291bnQpOwomIzQzOwomIzQzOwkJaWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoJmFtcDtpZHBmX3hkcF9mYikgJmFtcDsmYW1wOyB2cG9ydC0mZ3Q7eGRwc3FfZmIpIHsKJiM0MzsJCQl4ZHBzcS0mZ3Q7cGVuZGluZ19tYXNrID0gbWFza3NbaSAtIHNxc107CiYjNDM7CQkJeGRwc3EtJmd0O2xhc3RfbnR1ID0gMDsKJiM0MzsJCX0KIAl9CiAKIAlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfbWFza3M6CiYjNDM7CXZwb3J0LSZndDt4ZHBzcV9mYiA9IGZhbHNlOwomIzQzOwomIzQzOwlmb3IgKHUzMiBpID0gMDsgaSAmbHQ7IHZwb3J0LSZndDtudW1feGRwX3R4cTsgaSYjNDM7JiM0MzspCiYjNDM7CQlrZnJlZSh0aW1lcnNbaV0pOwomIzQzOwomIzQzOwlyZXR1cm4gLUVOT01FTTsKIH0KIAotdm9pZCBpZHBmX3hkcHNxc19wdXQoY29uc3Qgc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KQomIzQzO3ZvaWQgaWRwZl94ZHBzcXNfcHV0KHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXUzMiBzcXM7CkBAIC0yMjIsMTAgJiM0MzsyNjcsMjMgQEAgdm9pZCBpZHBmX3hkcHNxc19wdXQoY29uc3Qgc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KQogCQlsaWJldGhfeGRwc3FfZGVpbml0X3RpbWVyKHhkcHNxLSZndDt0aW1lcik7CiAJCWxpYmV0aF94ZHBzcV9wdXQoJmFtcDt4ZHBzcS0mZ3Q7eGRwX2xvY2ssIGRldik7CiAKJiM0MzsJCWlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZhbXA7aWRwZl94ZHBfZmIpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgeGRwc3EpKSB7CiYjNDM7CQkJYml0bWFwX2ZyZWUoeGRwc3EtJmd0O3BlbmRpbmdfbWFzayk7CiYjNDM7CQkJeGRwc3EtJmd0O3BlbmRpbmdfbWFzayA9IE5VTEw7CiYjNDM7CQkJeGRwc3EtJmd0O2xhc3RfbnR1ID0gMDsKJiM0MzsJCX0KJiM0MzsKIAkJa2ZyZWUoeGRwc3EtJmd0O3RpbWVyKTsKIAkJeGRwc3EtJmd0O3JlZmlsbHEgPSBOVUxMOwogCQlpZHBmX3F1ZXVlX2NsZWFyKE5PSVJRLCB4ZHBzcSk7CiAJfQomIzQzOwomIzQzOwlpZiAoIXZwb3J0LSZndDt4ZHBzcV9mYikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc3RhdGljX2JyYW5jaF9kZWMoJmFtcDtpZHBmX3hkcF9mYik7CiYjNDM7CXZwb3J0LSZndDt4ZHBzcV9mYiA9IGZhbHNlOwogfQogCiBzdGF0aWMgaW50IGlkcGZfeGRwX3BhcnNlX2NxZShjb25zdCBzdHJ1Y3QgaWRwZl9zcGxpdHFfNGJfdHhfY29tcGxfZGVzYyAqZGVzYywKQEAgLTI1MCw2ICYjNDM7MzA4LDY1IEBAIHN0YXRpYyBpbnQgaWRwZl94ZHBfcGFyc2VfY3FlKGNvbnN0IHN0cnVjdCBpZHBmX3NwbGl0cV80Yl90eF9jb21wbF9kZXNjICpkZXNjLAogCXJldHVybiB1cHBlcl8xNl9iaXRzKHZhbCk7CiB9CiAKJiM0MztzdGF0aWMgdTMyIGlkcGZfeGRwc3FfcG9sbF9mYihzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EsIHUzMiBidWRnZXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWRwZl9jb21wbF9xdWV1ZSAqY3EgPSB4ZHBzcS0mZ3Q7Y29tcGxxOwomIzQzOwl1bnNpZ25lZCBsb25nICptYXNrID0geGRwc3EtJmd0O3BlbmRpbmdfbWFzazsKJiM0MzsJdTMyIGRvbmVfZnJhbWVzLCB0eF9jbnQsIG5ld19udGM7CiYjNDM7CXUzMiBudGMgPSBjcS0mZ3Q7bmV4dF90b19jbGVhbjsKJiM0MzsJdTMyIGNudCA9IGNxLSZndDtkZXNjX2NvdW50OwomIzQzOwlib29sIGdlbjsKJiM0MzsKJiM0MzsJZ2VuID0gaWRwZl9xdWV1ZV9oYXMoR0VOX0NISywgY3EpOwomIzQzOwomIzQzOwlmb3IgKGRvbmVfZnJhbWVzID0gMDsgZG9uZV9mcmFtZXMgJmx0OyBidWRnZXQ7ICkgewomIzQzOwkJaW50IHJldDsKJiM0MzsKJiM0MzsJCXJldCA9IGlkcGZfeGRwX3BhcnNlX2NxZSgmYW1wO2NxLSZndDtjb21wW250Y10uY29tbW9uLCBnZW4pOwomIzQzOwkJaWYgKHJldCAmZ3Q7PSAwKSB7CiYjNDM7CQkJX19jbGVhcl9iaXQocmV0LCBtYXNrKTsKJiM0MzsJCQlkb25lX2ZyYW1lcyYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQkJZ290byBuZXh0OwomIzQzOwkJfQomIzQzOwomIzQzOwkJc3dpdGNoIChyZXQpIHsKJiM0MzsJCWNhc2UgLUVOT0RBVEE6CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQljYXNlIC1FSU5WQUw6CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CiYjNDM7bmV4dDoKJiM0MzsJCWlmICh1bmxpa2VseSgmIzQzOyYjNDM7bnRjID09IGNudCkpIHsKJiM0MzsJCQludGMgPSAwOwomIzQzOwkJCWdlbiA9ICFnZW47CiYjNDM7CQkJaWRwZl9xdWV1ZV9jaGFuZ2UoR0VOX0NISywgY3EpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7b3V0OgomIzQzOwljcS0mZ3Q7bmV4dF90b19jbGVhbiA9IG50YzsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KCFkb25lX2ZyYW1lcykpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJdHhfY250ID0geGRwc3EtJmd0O2Rlc2NfY291bnQ7CiYjNDM7CiYjNDM7CS8qIERvbiYjMzk7dCBnbyBwYXN0IG5leHRfdG9fdXNlICovCiYjNDM7CV9fc2V0X2JpdCh4ZHBzcS0mZ3Q7bmV4dF90b191c2UsIG1hc2spOwomIzQzOwomIzQzOwluZXdfbnRjID0gZmluZF9uZXh0X2JpdChtYXNrLCB0eF9jbnQsIHhkcHNxLSZndDtuZXh0X3RvX2NsZWFuKTsKJiM0MzsJZG9uZV9mcmFtZXMgPSBuZXdfbnRjIC0geGRwc3EtJmd0O25leHRfdG9fY2xlYW47CiYjNDM7CiYjNDM7CWlmIChuZXdfbnRjID09IHR4X2NudCkKJiM0MzsJCWRvbmVfZnJhbWVzICYjNDM7PSBmaW5kX2ZpcnN0X2JpdChtYXNrLCB0eF9jbnQpOwomIzQzOwomIzQzOwlfX2NsZWFyX2JpdCh4ZHBzcS0mZ3Q7bmV4dF90b191c2UsIG1hc2spOwomIzQzOwomIzQzOwlyZXR1cm4gZG9uZV9mcmFtZXM7CiYjNDM7fQomIzQzOwogdTMyIGlkcGZfeGRwc3FfcG9sbChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EsIHUzMiBidWRnZXQpCiB7CiAJc3RydWN0IGlkcGZfY29tcGxfcXVldWUgKmNxID0geGRwc3EtJmd0O2NvbXBscTsKQEAgLTI2MCw2ICYjNDM7Mzc3LDEwIEBAIHUzMiBpZHBmX3hkcHNxX3BvbGwoc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxLCB1MzIgYnVkZ2V0KQogCXUzMiBkb25lX2ZyYW1lczsKIAlib29sIGdlbjsKIAomIzQzOwlpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseSgmYW1wO2lkcGZfeGRwX2ZiKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgeGRwc3EpKQomIzQzOwkJcmV0dXJuIGlkcGZfeGRwc3FfcG9sbF9mYih4ZHBzcSwgYnVkZ2V0KTsKJiM0MzsKIAlnZW4gPSBpZHBmX3F1ZXVlX2hhcyhHRU5fQ0hLLCBjcSk7CiAKIAlmb3IgKGRvbmVfZnJhbWVzID0gMDsgZG9uZV9mcmFtZXMgJmx0OyBidWRnZXQ7ICkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmgKaW5kZXggNjNlNTZmN2Q0M2UwMC4uOTVlNDdlYTJjY2JhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL3hkcC5oCkBAIC04LDYgJiM0Mzs4LDEwIEBACiAKICNpbmNsdWRlICYjMzQ7aWRwZl90eHJ4LmgmIzM0OwogCiYjNDM7c3RydWN0IGlkcGZfcV92ZWNfcnNyYzsKJiM0MzsKJiM0MztERUNMQVJFX1NUQVRJQ19LRVlfRkFMU0UoaWRwZl94ZHBfZmIpOwomIzQzOwogaW50IGlkcGZfeGRwX3J4cV9pbmZvX2luaXQoc3RydWN0IGlkcGZfcnhfcXVldWUgKnJ4cSk7CiBpbnQgaWRwZl94ZHBfcnhxX2luZm9faW5pdF9hbGwoY29uc3Qgc3RydWN0IGlkcGZfcV92ZWNfcnNyYyAqcnNyYyk7CiB2b2lkIGlkcGZfeGRwX3J4cV9pbmZvX2RlaW5pdChzdHJ1Y3QgaWRwZl9yeF9xdWV1ZSAqcnhxLCB1MzIgbW9kZWwpOwpAQCAtMTUsMTIgJiM0MzsxOSw0MCBAQCB2b2lkIGlkcGZfeGRwX3J4cV9pbmZvX2RlaW5pdF9hbGwoY29uc3Qgc3RydWN0IGlkcGZfcV92ZWNfcnNyYyAqcnNyYyk7CiB2b2lkIGlkcGZfeGRwX2NvcHlfcHJvZ190b19ycXMoY29uc3Qgc3RydWN0IGlkcGZfcV92ZWNfcnNyYyAqcnNyYywKIAkJCSAgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nKTsKIAotaW50IGlkcGZfeGRwc3FzX2dldChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpOwotdm9pZCBpZHBmX3hkcHNxc19wdXQoY29uc3Qgc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KTsKJiM0MztpbnQgaWRwZl94ZHBzcXNfZ2V0KHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCk7CiYjNDM7dm9pZCBpZHBmX3hkcHNxc19wdXQoc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KTsKIAogdTMyIGlkcGZfeGRwc3FfcG9sbChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EsIHUzMiBidWRnZXQpOwogYm9vbCBpZHBmX3hkcF90eF9mbHVzaF9idWxrKHN0cnVjdCBsaWJldGhfeGRwX3R4X2J1bGsgKmJxLCB1MzIgZmxhZ3MpOwogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwX3R4X3htaXRfZmIoc3RydWN0IGxpYmV0aF94ZHBfdHhfZGVzYyBkZXNjLCB1MzIgaSwKJiM0MzsJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBsaWJldGhfeGRwc3EgKnNxLCB1NjQgcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZHBmX2ZsZXhfdHhfc2NoZWRfZGVzYyAqdHhfZGVzYyA9IHNxLSZndDtkZXNjczsKJiM0MzsJdTMyIGNtZDsKJiM0MzsKJiM0MzsJY21kID0gRklFTERfUFJFUChJRFBGX1RYRF9GTEVYX0ZMT1dfRFRZUEVfTSwKJiM0MzsJCQkgSURQRl9UWF9ERVNDX0RUWVBFX0ZMRVhfRkxPV19TQ0hFKTsKJiM0MzsJaWYgKGRlc2MuZmxhZ3MgJmFtcDsgTElCRVRIX1hEUF9UWF9MQVNUKQomIzQzOwkJY21kIHw9IElEUEZfVFhEX0ZMRVhfRkxPV19DTURfRU9QOwomIzQzOwlpZiAocHJpdiAmYW1wOyZhbXA7IChkZXNjLmZsYWdzICZhbXA7IExJQkVUSF9YRFBfVFhfQ1NVTSkpCiYjNDM7CQljbWQgfD0gSURQRl9UWERfRkxFWF9GTE9XX0NNRF9DU19FTjsKJiM0MzsKJiM0MzsJdHhfZGVzYyA9ICZhbXA7dHhfZGVzY1tpXTsKJiM0MzsJdHhfZGVzYy0mZ3Q7YnVmX2FkZHIgPSBjcHVfdG9fbGU2NChkZXNjLmFkZHIpOwomIzQzOwomIzQzOyNpZmRlZiBfX0xJQkVUSF9XT1JEX0FDQ0VTUwomIzQzOwkqKHU2NCAqKSZhbXA7dHhfZGVzYy0mZ3Q7cXcxID0gKCh1NjQpZGVzYy5sZW4gJmx0OyZsdDsgNDgpIHwgKCh1NjQpaSAmbHQ7Jmx0OyAzMikgfCBjbWQ7CiYjNDM7I2Vsc2UKJiM0MzsJdHhfZGVzYy0mZ3Q7cXcxLnJ4cl9idWZzaXplID0gY3B1X3RvX2xlMTYoZGVzYy5sZW4pOwomIzQzOwl0eF9kZXNjLSZndDtxdzEuY29tcGxfdGFnID0gY3B1X3RvX2xlMTYoaSk7CiYjNDM7CXR4X2Rlc2MtJmd0O3F3MS50c1swXSA9IDA7CiYjNDM7CXR4X2Rlc2MtJmd0O3F3MS50c1sxXSA9IDA7CiYjNDM7CXR4X2Rlc2MtJmd0O3F3MS50c1syXSA9IDA7CiYjNDM7CXR4X2Rlc2MtJmd0O3F3MS5jbWRfZHR5cGUgPSBjbWQ7CiYjNDM7I2VuZGlmCiYjNDM7fQomIzQzOwogLyoqCiAgKiBpZHBmX3hkcF90eF94bWl0IC0gcHJvZHVjZSBhIHNpbmdsZSBIVyBUeCBkZXNjcmlwdG9yIG91dCBvZiBYRFAgZGVzYwogICogQGRlc2M6IFhEUCBkZXNjcmlwdG9yIHRvIHB1bGwgdGhlIERNQSBhZGRyZXNzIGFuZCBsZW5ndGggZnJvbQpAQCAtMzQsNiAmIzQzOzY2LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcF90eF94bWl0KHN0cnVjdCBsaWJldGhfeGRwX3R4X2Rlc2MgZGVzYywgdTMyIGksCiAJc3RydWN0IGlkcGZfZmxleF90eF9kZXNjICp0eF9kZXNjID0gc3EtJmd0O2Rlc2NzOwogCXUzMiBjbWQ7CiAKJiM0MzsJaWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoJmFtcDtpZHBmX3hkcF9mYikgJmFtcDsmYW1wOwomIzQzOwkgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sCiYjNDM7CQkJICAgbGliZXRoX3hkcHNxX3RvX3NxKHNxLCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwKJiM0MzsJCQkJCSAgICAgIG5leHRfdG9fdXNlKSkpIHsKJiM0MzsJCWlkcGZfeGRwX3R4X3htaXRfZmIoZGVzYywgaSwgc3EsIHByaXYpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiAJY21kID0gRklFTERfUFJFUChJRFBGX0ZMRVhfVFhEX1FXMV9EVFlQRV9NLAogCQkJIElEUEZfVFhfREVTQ19EVFlQRV9GTEVYX0wyVEFHMV9MMlRBRzIpOwogCWlmIChkZXNjLmZsYWdzICZhbXA7IExJQkVUSF9YRFBfVFhfTEFTVCkKQEAgLTUzLDEyICYjNDM7OTMsMzQgQEAgc3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwX3R4X3htaXQoc3RydWN0IGxpYmV0aF94ZHBfdHhfZGVzYyBkZXNjLCB1MzIgaSwKICNlbmRpZgogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBzcV9zZXRfcnMoY29uc3Qgc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcHNxX3NldF9yc19mYihzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EpCiYjNDM7ewomIzQzOwl1MzIgbnR1ID0geGRwc3EtJmd0O25leHRfdG9fdXNlOwomIzQzOwl1MzIgb2xkID0geGRwc3EtJmd0O2xhc3RfbnR1OwomIzQzOwomIzQzOwlpZiAob2xkICZndDsgbnR1KSB7CiYjNDM7CQliaXRtYXBfc2V0KHhkcHNxLSZndDtwZW5kaW5nX21hc2ssIG9sZCwgeGRwc3EtJmd0O2Rlc2NfY291bnQgLSBvbGQpOwomIzQzOwkJaWYgKG50dSkKJiM0MzsJCQliaXRtYXBfc2V0KHhkcHNxLSZndDtwZW5kaW5nX21hc2ssIDAsIG50dSk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQliaXRtYXBfc2V0KHhkcHNxLSZndDtwZW5kaW5nX21hc2ssIG9sZCwgbnR1IC0gb2xkKTsKJiM0MzsJfQomIzQzOwomIzQzOwl4ZHBzcS0mZ3Q7bGFzdF9udHUgPSBudHU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBpZHBmX3hkcHNxX3NldF9ycyhzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EpCiB7CiAJdTMyIG50dSwgY21kOwogCiYjNDM7CWlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZhbXA7aWRwZl94ZHBfZmIpICZhbXA7JmFtcDsKJiM0MzsJICAgIGlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCB4ZHBzcSkpIHsKJiM0MzsJCWlkcGZfeGRwc3Ffc2V0X3JzX2ZiKHhkcHNxKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCW50dSA9IHhkcHNxLSZndDtuZXh0X3RvX3VzZTsKLQlpZiAodW5saWtlbHkoIW50dSkpCiYjNDM7CWlmICghbnR1KQogCQludHUgPSB4ZHBzcS0mZ3Q7ZGVzY19jb3VudDsKIAogCWNtZCA9IEZJRUxEX1BSRVAoSURQRl9GTEVYX1RYRF9RVzFfQ01EX00sIElEUEZfVFhfREVTQ19DTURfUlMpOwpAQCAtODQsNyAmIzQzOzE0Niw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcHNxX3VwZGF0ZV90YWlsKGNvbnN0IHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp4ZHBzcSkKICAqIFNldCB0aGUgUlMgYml0ICgmIzM0O2VuZCBvZiBiYXRjaCYjMzQ7KSwgYnVtcCB0aGUgdGFpbCwgYW5kIHF1ZXVlIHRoZSBjbGVhbnVwIHRpbWVyLgogICogVG8gYmUgY2FsbGVkIGFmdGVyIGEgTkFQSSBwb2xsaW5nIGxvb3AsIGF0IHRoZSBlbmQgb2YgLm5kb194ZHBfeG1pdCgpIGV0Yy4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwX3R4X2ZpbmFsaXplKHZvaWQgKl94ZHBzcSwgYm9vbCBzZW50LCBib29sIGZsdXNoKQomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBpZHBmX3hkcF90eF9maW5hbGl6ZSh2b2lkICpfeGRwc3EsIGJvb2wgc2VudCwKJiM0MzsJCQkJCQkgYm9vbCBmbHVzaCkKIHsKIAlzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EgPSBfeGRwc3E7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2xpYmV0aC94ZHAuaCBiL2luY2x1ZGUvbmV0L2xpYmV0aC94ZHAuaAppbmRleCA4OTg3MjNhYjYyZTgxLi5lZDYxZDgzYmRhMmQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9saWJldGgveGRwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbGliZXRoL3hkcC5oCkBAIC00MzAsNiAmIzQzOzQzMCwxOSBAQCBzdHJ1Y3QgbGliZXRoX3hkcHNxIHsKIAlzdHJ1Y3QgbGliZXRoX3hkcHNxX2xvY2sJKmxvY2s7CiB9OwogCiYjNDM7LyoqCiYjNDM7ICogbGliZXRoX3hkcHNxX3RvX3NxIC0gZ2V0IFNRIHBvaW50ZXIgZnJvbSBhbiBYRFBTUSBwb2ludGVyCiYjNDM7ICogQHhkcHNxOiAmYW1wO2xpYmV0aF94ZHBzcSBjb3JyZXNwb25kaW5nIHRvIHRoZSBxdWV1ZQomIzQzOyAqIEB0eXBlOiB0eXBlb2YoKSBvZiB0aGUgZHJpdmVyIFR4IHF1ZXVlIHN0cnVjdHVyZQomIzQzOyAqIEBtZW1iZXI6IG5hbWUgb2YgdGhlIE5UVSBmaWVsZCBpbnNpZGUgQHR5cGUKJiM0MzsgKgomIzQzOyAqIFNvbWUgb2YgdGhlIHNlbmRpbmcgY2FsbGJhY2tzIHRha2Ugb25seSAmYW1wO2xpYmV0aF94ZHBzcSBwb2ludGVyIGFuZCBubyBwb2ludGVyCiYjNDM7ICogdG8gdGhlIGFjdHVhbCBkcml2ZXIgVHggcXVldWUgc3RydWN0dXJlLiBVc2UgdGhpcyBoZWxwZXIgdG8gcXVpY2tseSBqdW1wIHRvCiYjNDM7ICogdGhlIGxhdHRlciB3aGVuIG5lZWRlZC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIGxpYmV0aF94ZHBzcV90b19zcSh4ZHBzcSwgdHlwZSwgbWVtYmVyKQkJCQkgICAgICBcCiYjNDM7CWNvbnRhaW5lcl9vZl9jb25zdCgoeGRwc3EpLSZndDtudHUsIHR5cGUsIG1lbWJlcikKJiM0MzsKIC8qKgogICogc3RydWN0IGxpYmV0aF94ZHBfdHhfZGVzYyAtIGFic3RyYWN0aW9uIGZvciBhbiBYRFAgVHggZGVzY3JpcHRvcgogICogQGFkZHI6IERNQSBhZGRyZXNzIG9mIHRoZSBmcmFtZQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTAwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgYGlkcGZgIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgZm9yIHRoZSBgaWRwZmAgZHJpdmVyIOKAkyBJbnRlbCYjMzk7cyBJbmZyYXN0cnVjdHVyZSBEYXRhIFBhdGggRnVuY3Rpb24uIEl0JiMzOTtzIGFkZGluZyBYRFAgVHggc3VwcG9ydCBpbiBGSUZPIG1vZGUsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGUgY2hhbmdlcyBhcmUgc3ByZWFkIGFjcm9zcyB0aGUgdXN1YWwgc3VzcGVjdHM6IGhlYWRlcnMsIHRoZSBjb3JlIFRYL1JYIGNvZGUsIGFuZCBYRFAtcmVsYXRlZCBmaWxlcy4gTm90aGluZyB0b28gc3VycHJpc2luZyBvbiB0aGUgc3VyZmFjZS4KCk15IGZpcnN0IHRob3VnaHQsIGFuZCBhIGNyaXRpY2FsIG9uZSBnaXZlbiBteSBleHBlcmllbmNlLCBpcyBhYm91dCB0aGUgZW52aXJvbm1lbnQuIENhbiBJIGFjdHVhbGx5ICp0ZXN0KiB0aGlzPyBgaWRwZmAsIHJpZ2h0PyBUaGF0JiMzOTtzIGFuIEludGVsIElQVSB0aGluZy4gTm93LCBpcyB0aGlzIGEgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVyLCBvciBpcyB0aGVyZSBzb21lIGxldmVsIG9mIHZpcnR1YWxpemF0aW9uIG9yIGVtdWxhdGlvbj8gTXkgaW1tZWRpYXRlIHN1c3BpY2lvbiwgZ2l2ZW4gdGhhdCB0aGlzIGlzIGFuIEludGVsIE5JQyBkcml2ZXIsIGlzIHRoYXQgaXQmIzM5O3MgZ29pbmcgdG8gbmVlZCByZWFsIGhhcmR3YXJlIHRvIG1lYW5pbmdmdWxseSB0ZXN0LiBJIGtub3cgaG93IGZ1c3N5IHRoZXNlIGRyaXZlcnMgY2FuIGJlLiBUaGV5IG9mdGVuIGRlcGVuZCBvbiB2ZXJ5IHNwZWNpZmljIFBDSWUgY29uZmlndXJhdGlvbnMuCgpBaCwgeWVzLCBgaWRwZmAgaXMgYSBQQ0llIGRldmljZSwgYSBTbWFydE5JQy4gU28sIHRoZSBxdWVzdGlvbiBpcywgZG9lcyBRRU1VLCB0aGUgc3RhbmRhcmQgZW11bGF0b3IsIGhhdmUgYSBkZWNlbnQgZW11bGF0aW9uIGZvciB0aGlzPyBQcm9iYWJseSBub3QuIEkmIzM5O3ZlIHdvcmtlZCB3aXRoIEludGVsIE5JQyBkcml2ZXJzIGJlZm9yZSwgYW5kIHRoZXkmIzM5O3JlIHJhcmVseSBmdWxseSBlbXVsYXRlZC4gTXkgZXhwZXJpZW5jZSBzdWdnZXN0cyB0aGF0IHRoaXMgaXMgZ29pbmcgdG8gZmFsbCBpbnRvIHRoYXQgY2F0ZWdvcnkgb2YgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcy4KCkxldCBtZSBjb25maXJtIHRoYXQgYnkgcXVpY2tseSBzZWFyY2hpbmcgdGhlIGtlcm5lbCB0cmVlLiBUaGUgcHJvbXB0IG1lbnRpb25lZCBhIGxpc3Qgb2Ygc2ltaWxhciBkcml2ZXJzLiBJdCBzZWVtcyBsaWtlIHRoaXMgYGlkcGZgIGlzIGRlZmluaXRlbHkgaW4gdGhlIHNhbWUgY2F0ZWdvcnkgYXMgdGhvc2UgZHJpdmVycywgYW5kIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGl0JiMzOTtzIG5vdCBlbXVsYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSURQRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWctMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZzo0OmNvbmZpZyBJRFBGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWctNS1cdHRyaXN0YXRlIFwmIzM0O0ludGVsKFIpIEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbiBTdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnPTE4PWlmIElEUEZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZy0xOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZzoyMDpjb25maWcgSURQRl9TSU5HTEVRXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWctMjEtXHRib29sIFwmIzM0O2lkcGYgc2luZ2xlcSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTg6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQzMwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIEludGVsIElEUEYgRW11bGF0aW9uKioKCk9rYXksIHNvICYjMzQ7SW50ZWwoUikgSW5mcmFzdHJ1Y3R1cmUgRGF0YSBQYXRoIEZ1bmN0aW9uIFN1cHBvcnQmIzM0OyDigJMgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyBhIFNtYXJ0TklDIHRoaW5nPyYjMzQ7IFllcywgSW50ZWwgSVBVcyAqYXJlKiBTbWFydE5JQ3MsIHNvIHRoYXQgY2hlY2tzIG91dC4gVGhlIG5leHQgcXVlc3Rpb24gaXMgZW11bGF0aW9uLiBDYW4gSSBzcGluIHRoaXMgdXAgaW4gUUVNVT8gSG1tLCBubywgdGhlcmUgaXNuJiMzOTt0IGFueSBzdGFuZGFyZCBRRU1VIGVtdWxhdGlvbiBmb3IgSW50ZWwgSURQRiwgb3IgYXQgbGVhc3QsIEkmIzM5O20gbm90IGF3YXJlIG9mIGFueSBvZmYgdGhlIHRvcCBvZiBteSBoZWFkLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgbWVudGFsIGNoZWNrLiBJJiMzOTtkIHR5cGljYWxseSB3YW50IHRvIGNoZWNrIHRoZSBRRU1VIHNvdXJjZSBmb3IgJiMzNDtpZHBmLCYjMzQ7IGJ1dCBJIGRvbiYjMzk7dCBoYXZlIHRoYXQgbG9jYWxseS4gRXZlbiB3aXRob3V0IHRoZSBzb3VyY2UsIG15IGd1dCBzYXlzICYjMzQ7aWRwZiYjMzQ7IGlzIGdvaW5nIHRvIGJlIGhhcmR3YXJlLXNwZWNpZmljLCBsaWtlbHkgYSBkcml2ZXIuIEkgc2hvdWxkIGNoZWNrIHRoZSBleGFtcGxlczogJiMzNDttbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdSYjMzQ7IOKAkyBub3QgZXhwbGljaXRseSBJRFBGIGJ1dCBjbGVhcmx5IHdpdGhpbiB0aGUgcmVhbG0gb2YgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlcnMuIEdvb2QuCgpUaGUga2V5IGhlcmUgaXMgdmVyaWZpY2F0aW9uLiBUbyBiZSBjZXJ0YWluLCBjYW4gSSBldmVuIHJlYWNoIElEUEYgaW4gdGhlIGZpcnN0IHBsYWNlPyBJZiBpdCYjMzk7cyBhIFBDSWUgZHJpdmVyIHRoYXQgbWFuYWdlcyB0aGUgSW50ZWwgSVBVLCB0aGVuIGl0IHByZXR0eSBtdWNoICpyZXF1aXJlcyogdGhlIHBoeXNpY2FsIGhhcmR3YXJlIHRvIGZ1bmN0aW9uLiBTbywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRob3VnaHQuCgpMZXQmIzM5O3MgbG9vayBhdCB0aGUgZHJpdmVyIHNvdXJjZSBjb2RlIC0gc3BlY2lmaWNhbGx5LCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uY2AgLSB0aGF0IHNob3VsZCBiZSBhIFBDSSBkcml2ZXIuIFRoYXQgd2lsbCB0ZWxsIG1lIGV2ZXJ5dGhpbmcgdGhhdCBJIG5lZWQgdG8ga25vdyBhYm91dCB0aGUgcmVxdWlyZW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX3JlZ2lzdGVyX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA1MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOgoKKipQQ0kgRHJpdmVyIFJlZ2lzdHJhdGlvbiBDaGVjayoqCgpPa2F5LCBsZXQgbWUgcXVpY2tseSB0aGluayB0aGlzIHRocm91Z2guIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBJJiMzOTttIHByZXR0eSBzdXJlIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBkcml2ZXIgd291bGQgYmUgcmVnaXN0ZXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5zdGluY3QgaXMgdGVsbGluZyBtZSB0aGF0LCBpZiBpdCYjMzk7cyBhIFBDSSBkZXZpY2UsIHRoZXJlJiMzOTtzIGEgc3Ryb25nIGNoYW5jZSBpdCYjMzk7cyBnb2luZyB0byBsZXZlcmFnZSBvbmUgb2YgdGhlIHN0YW5kYXJkIFBDSSBkcml2ZXIgcmVnaXN0cmF0aW9uIG1lY2hhbmlzbXMuIFRoYXQgd291bGQgbGlrZWx5IGJlIGVpdGhlciBgcGNpX3JlZ2lzdGVyX2RyaXZlcmAgb3IgdGhlIG1hY3JvIGBtb2R1bGVfcGNpX2RyaXZlcmAuIEkgbmVlZCB0byBsb29rIGNsb3NlciB0byBjb25maXJtIHdoaWNoIG9uZSwgb3IgaWYgdGhleSBhcmUgaGFuZGxpbmcgdGhlIHJlZ2lzdHJhdGlvbiBpbiBhIG1vcmUgY3VzdG9tIHdheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfcGNpX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmM9Mzc1PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpZHBmX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jLTM4Mi19O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYzozODM6bW9kdWxlX3BjaV9kcml2ZXIoaWRwZl9kcml2ZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzYxCgkJCQkJCQlvdXRwdXQ6IDg3CgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogTm90IFdvcnRoIEZ1enppbmcgaW4gYSBWaXJ0dWFsIEVudmlyb25tZW50KioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFllcCwgdGhpcyBpcyBkZWZpbml0ZWx5IGEgUENJIGRyaXZlciDigJMgdGhhdCBtdWNoIGlzIGNsZWFyLiBUaGUga2V5IGhlcmUgaXMgdGhhdCBpdCYjMzk7cyBzcGVjaWZpY2FsbHkgZm9yIGFuIEludGVsIEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbi4gVHJhbnNsYXRpb246IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBTbWFydE5JQyBvciBJUFUuIEFuZCB0aGF0IG1lYW5zICpwaHlzaWNhbCogaGFyZHdhcmUgaXMgYWJzb2x1dGVseSBlc3NlbnRpYWwuIFdlJiMzOTtyZSB0YWxraW5nIGRlZGljYXRlZCBzaWxpY29uLCBjdXN0b20gaGFyZHdhcmUgaW50ZXJhY3Rpb24uIEdpdmVuIHRoaXMgc2V0dXAsIGF0dGVtcHRpbmcgdG8gZnV6eiB0aGlzIGRyaXZlciB3aXRoaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50IGlzIGEgbm9uLXN0YXJ0ZXIuIFRoZSB2aXJ0dWFsaXplZCBoYXJkd2FyZSBqdXN0IGlzbiYjMzk7dCBnb2luZyB0byBjdXQgaXQuIFRoZXJlZm9yZSwgSeKAmW0gZ29pbmcgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgZXhwbGFuYXRpb24gaXMgc2ltcGxlOiB2ZW5kb3Itc3BlY2lmaWMgU21hcnROSUMgZHJpdmVyIHRoYXQmIzM5O3MgZnVuZGFtZW50YWxseSBkZXBlbmRlbnQgb24gcGh5c2ljYWwgaGFyZHdhcmUgZm9yIGFueSBtZWFuaW5nZnVsIHRlc3RpbmcuIE5vIHdheSBhcm91bmQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbiAoaWRwZikgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIFNtYXJ0TklDL0lQVSBkcml2ZXIuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIG1ha2luZyBpdCB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBJbmZyYXN0cnVjdHVyZSBEYXRhIFBhdGggRnVuY3Rpb24gKGlkcGYpIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBTbWFydE5JQy9JUFUgZHJpdmVyLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBtYWtpbmcgaXQgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxODowNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MDY6MDEuNDQxNjk4Mjc0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE5Mjg4OTgwNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgSW5mcmFzdHJ1Y3R1cmUgRGF0YSBQYXRoIEZ1bmN0aW9uIChpZHBmKSBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgU21hcnROSUMvSVBVIGRyaXZlci4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgbWFraW5nIGl0IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MDY6MDEuNDQxNzA0NDQ0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTAxNjY4MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiM2ZjYjY4YmM2MDczYjUwOGExYjZjNjI2NjgxNmZhYzBkNmY4ODRjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDE4IDE4OjA2OjAwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmhcXG5pbmRleCA0NzBiYzIzYzg0NGMxLi4xZTg5N2UxMzFjYjI5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmhcXG5AQCAtMzgzLDYgKzM4Myw3IEBAIHN0cnVjdCBpZHBmX3Zwb3J0IHtcXG4gXFx0c3RydWN0IGlkcGZfdHhfcXVldWUgKip0eHFzO1xcbiBcXHR1MTYgbnVtX3R4cTtcXG4gXFx0dTE2IG51bV94ZHBfdHhxO1xcbitcXHRib29sIHhkcHNxX2ZiO1xcbiBcXHRib29sIHhkcHNxX3NoYXJlO1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmNcXG5pbmRleCBjM2ZmYjQ0NTI5N2Y4Li43NDMzOTU5NjIwNzdkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jXFxuQEAgLTIyNyw3ICsyMjcsNyBAQCBzdGF0aWMgaW50IGlkcGZfdHhfZGVzY19hbGxvYyhjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQsXFxuIFxcbiBcXHRpZHBmX3hza19zZXR1cF9xdWV1ZSh2cG9ydCwgdHhfcSwgVklSVENITkwyX1FVRVVFX1RZUEVfVFgpO1xcbiBcXG4tXFx0aWYgKCFpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgdHhfcSkpXFxuK1xcdGlmICghaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHR4X3EpIHx8IGlkcGZfcXVldWVfaGFzKFhEUCwgdHhfcSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0cmVmaWxscSA9IHR4X3EtXFx1MDAzZXJlZmlsbHE7XFxuQEAgLTEwNTUsNiArMTA1NSwxMyBAQCBzdGF0aWMgdm9pZCBpZHBmX2NsZWFuX3F1ZXVlX3NldChjb25zdCBzdHJ1Y3QgaWRwZl9xdWV1ZV9zZXQgKnFzKVxcbiBcXHRcXHRcXHRpZiAoaWRwZl9xdWV1ZV9oYXMoWERQLCBxLVxcdTAwM2V0eHEpKSB7XFxuIFxcdFxcdFxcdFxcdHEtXFx1MDAzZXR4cS1cXHUwMDNlcGVuZGluZyA9IDA7XFxuIFxcdFxcdFxcdFxcdHEtXFx1MDAzZXR4cS1cXHUwMDNleGRwX3R4ID0gMDtcXG4rXFxuK1xcdFxcdFxcdFxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZpZHBmX3hkcF9mYikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0ICAgIGlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCBxLVxcdTAwM2V0eHEpKSB7XFxuK1xcdFxcdFxcdFxcdFxcdGJpdG1hcF96ZXJvKHEtXFx1MDAzZXR4cS1cXHUwMDNlcGVuZGluZ19tYXNrLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgcS1cXHUwMDNldHhxLVxcdTAwM2VkZXNjX2NvdW50KTtcXG4rXFx0XFx0XFx0XFx0XFx0cS1cXHUwMDNldHhxLVxcdTAwM2VsYXN0X250dSA9IDA7XFxuK1xcdFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0XFx0cS1cXHUwMDNldHhxLVxcdTAwM2V0eHFfZ3JwLVxcdTAwM2VudW1fY29tcGxldGlvbnNfcGVuZGluZyA9IDA7XFxuIFxcdFxcdFxcdH1cXG5AQCAtMTMxNyw3ICsxMzI0LDggQEAgc3RhdGljIHZvaWQgaWRwZl90eHFfZ3JvdXBfcmVsKHN0cnVjdCBpZHBmX3FfdmVjX3JzcmMgKnJzcmMpXFxuIFxcdFxcdFxcdGlmICghdHhxX2dycC1cXHUwMDNldHhxc1tqXSlcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRcXHRpZiAoaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHR4cV9ncnAtXFx1MDAzZXR4cXNbal0pKSB7XFxuK1xcdFxcdFxcdGlmIChpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgdHhxX2dycC1cXHUwMDNldHhxc1tqXSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICFpZHBmX3F1ZXVlX2hhcyhYRFAsIHR4cV9ncnAtXFx1MDAzZXR4cXNbal0pKSB7XFxuIFxcdFxcdFxcdFxcdGtmcmVlKHR4cV9ncnAtXFx1MDAzZXR4cXNbal0tXFx1MDAzZXJlZmlsbHEpO1xcbiBcXHRcXHRcXHRcXHR0eHFfZ3JwLVxcdTAwM2V0eHFzW2pdLVxcdTAwM2VyZWZpbGxxID0gTlVMTDtcXG4gXFx0XFx0XFx0fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaFxcbmluZGV4IDkzNTQ3NTk3ZWZkMmEuLmRjZTA3ZmJiNmU3NzMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmhcXG5AQCAtNjI1LDEyICs2MjUsMTQgQEAgbGliZXRoX2NhY2hlbGluZV9zZXRfYXNzZXJ0KHN0cnVjdCBpZHBmX3J4X3F1ZXVlLFxcbiAgKiBAY2xlYW5fYnVkZ2V0OiBzaW5nbGVxIG9ubHksIHF1ZXVlIGNsZWFuaW5nIGJ1ZGdldFxcbiAgKiBAY2xlYW5lZF9wa3RzOiBOdW1iZXIgb2YgcGFja2V0cyBjbGVhbmVkIGZvciB0aGUgYWJvdmUgc2FpZCBjYXNlXFxuICAqIEByZWZpbGxxOiBQb2ludGVyIHRvIHJlZmlsbCBxdWV1ZVxcbisgKiBAY2FjaGVkX3RzdGFtcF9jYXBzOiBUeCB0aW1lc3RhbXAgY2FwYWJpbGl0aWVzIG5lZ290aWF0ZWQgd2l0aCB0aGUgQ1BcXG4rICogQHRzdGFtcF90YXNrOiBXb3JrIHRoYXQgaGFuZGxlcyBUeCB0aW1lc3RhbXAgcmVhZFxcbiAgKiBAcGVuZGluZzogbnVtYmVyIG9mIHBlbmRpbmcgZGVzY3JpcHRvcnMgdG8gc2VuZCBpbiBRQlxcbiAgKiBAeGRwX3R4OiBudW1iZXIgb2YgcGVuZGluZyBcXHUwMDI2eGRwX2J1ZmYgb3IgXFx1MDAyNnhkcF9mcmFtZSBidWZmZXJzXFxuICAqIEB0aW1lcjogdGltZXIgZm9yIFhEUCBUeCBxdWV1ZSBjbGVhbnVwXFxuICAqIEB4ZHBfbG9jazogbG9jayBmb3IgWERQIFR4IHF1ZXVlcyBzaGFyaW5nXFxuLSAqIEBjYWNoZWRfdHN0YW1wX2NhcHM6IFR4IHRpbWVzdGFtcCBjYXBhYmlsaXRpZXMgbmVnb3RpYXRlZCB3aXRoIHRoZSBDUFxcbi0gKiBAdHN0YW1wX3Rhc2s6IFdvcmsgdGhhdCBoYW5kbGVzIFR4IHRpbWVzdGFtcCByZWFkXFxuKyAqIEBwZW5kaW5nX21hc2s6IG1hc2sgb2YgYnVmZmVycyB3YWl0aW5nIGZvciBjb21wbGV0aW9uIGluIHRoZSBGQiBYRFAgbW9kZVxcbisgKiBAbGFzdF9udHU6IEBuZXh0X3RvX3VzZSBmcm9tIHRoZSBwcmV2aW91cyBiYXRjaCBpbiB0aGUgRkIgWERQIG1vZGVcXG4gICogQHN0YXRzX3N5bmM6IFNlZSBzdHJ1Y3QgdTY0X3N0YXRzX3N5bmNcXG4gICogQHFfc3RhdHM6IFNlZSB1bmlvbiBpZHBmX3R4X3F1ZXVlX3N0YXRzXFxuICAqIEBxX2lkOiBRdWV1ZSBpZFxcbkBAIC02ODksNiArNjkxLDkgQEAgc3RydWN0IGlkcGZfdHhfcXVldWUge1xcbiBcXHRcXHRcXHR1MTYgY2xlYW5lZF9wa3RzO1xcbiBcXG4gXFx0XFx0XFx0c3RydWN0IGlkcGZfc3dfcXVldWUgKnJlZmlsbHE7XFxuK1xcbitcXHRcXHRcXHRzdHJ1Y3QgaWRwZl9wdHBfdnBvcnRfdHhfdHN0YW1wX2NhcHMgKmNhY2hlZF90c3RhbXBfY2FwcztcXG4rXFx0XFx0XFx0c3RydWN0IHdvcmtfc3RydWN0ICp0c3RhbXBfdGFzaztcXG4gXFx0XFx0fTtcXG4gXFx0XFx0c3RydWN0IHtcXG4gXFx0XFx0XFx0dTMyIHBlbmRpbmc7XFxuQEAgLTY5NiwxMiArNzAxLDEyIEBAIHN0cnVjdCBpZHBmX3R4X3F1ZXVlIHtcXG4gXFxuIFxcdFxcdFxcdHN0cnVjdCBsaWJldGhfeGRwc3FfdGltZXIgKnRpbWVyO1xcbiBcXHRcXHRcXHRzdHJ1Y3QgbGliZXRoX3hkcHNxX2xvY2sgeGRwX2xvY2s7XFxuK1xcbitcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpwZW5kaW5nX21hc2s7XFxuK1xcdFxcdFxcdHUzMiBsYXN0X250dTtcXG4gXFx0XFx0fTtcXG4gXFx0fTtcXG4gXFxuLVxcdHN0cnVjdCBpZHBmX3B0cF92cG9ydF90eF90c3RhbXBfY2FwcyAqY2FjaGVkX3RzdGFtcF9jYXBzO1xcbi1cXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnRzdGFtcF90YXNrO1xcbi1cXG4gXFx0c3RydWN0IHU2NF9zdGF0c19zeW5jIHN0YXRzX3N5bmM7XFxuIFxcdHN0cnVjdCBpZHBmX3R4X3F1ZXVlX3N0YXRzIHFfc3RhdHM7XFxuIFxcdF9fY2FjaGVsaW5lX2dyb3VwX2VuZF9hbGlnbmVkKHJlYWRfd3JpdGUpO1xcbkBAIC03MTgsOCArNzIzLDcgQEAgc3RydWN0IGlkcGZfdHhfcXVldWUge1xcbiBcXHRfX2NhY2hlbGluZV9ncm91cF9lbmRfYWxpZ25lZChjb2xkKTtcXG4gfTtcXG4gbGliZXRoX2NhY2hlbGluZV9zZXRfYXNzZXJ0KHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCA2NCxcXG4tXFx0XFx0XFx0ICAgIDEwNCArXFxuLVxcdFxcdFxcdCAgICBvZmZzZXRvZihzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgY2FjaGVkX3RzdGFtcF9jYXBzKSAtXFxuK1xcdFxcdFxcdCAgICA5NiArIG9mZnNldG9mKHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCB0c3RhbXBfdGFzaykgLVxcbiBcXHRcXHRcXHQgICAgb2Zmc2V0b2ZlbmQoc3RydWN0IGlkcGZfdHhfcXVldWUsIHRpbWVyKSArXFxuIFxcdFxcdFxcdCAgICBvZmZzZXRvZihzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgcV9zdGF0cykgLVxcbiBcXHRcXHRcXHQgICAgb2Zmc2V0b2ZlbmQoc3RydWN0IGlkcGZfdHhfcXVldWUsIHRzdGFtcF90YXNrKSxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmNcXG5pbmRleCBjYmNjZDQ1NDY3NjgxLi5jNzcxNjYzNjc3YTUyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL3hkcC5jXFxuQEAgLTcsNiArNyw4IEBAXFxuICNpbmNsdWRlIFxcXCJ4ZHAuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInhzay5oXFxcIlxcbiBcXG4rREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoaWRwZl94ZHBfZmIpO1xcbitcXG4gc3RhdGljIGludCBpZHBmX3J4cV9mb3JfZWFjaChjb25zdCBzdHJ1Y3QgaWRwZl9xX3ZlY19yc3JjICpyc3JjLFxcbiBcXHRcXHRcXHQgICAgIGludCAoKmZuKShzdHJ1Y3QgaWRwZl9yeF9xdWV1ZSAqcnhxLCB2b2lkICphcmcpLFxcbiBcXHRcXHRcXHQgICAgIHZvaWQgKmFyZylcXG5AQCAtMTQ5LDEwICsxNTEsMTIgQEAgdm9pZCBpZHBmX3hkcF9jb3B5X3Byb2dfdG9fcnFzKGNvbnN0IHN0cnVjdCBpZHBmX3FfdmVjX3JzcmMgKnJzcmMsXFxuIFxcbiBzdGF0aWMgdm9pZCBpZHBmX3hkcF90eF90aW1lcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbiBcXG4taW50IGlkcGZfeGRwc3FzX2dldChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpXFxuK2ludCBpZHBmX3hkcHNxc19nZXQoc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KVxcbiB7XFxuIFxcdHN0cnVjdCBsaWJldGhfeGRwc3FfdGltZXIgKip0aW1lcnMgX19mcmVlKGt2ZnJlZSkgPSBOVUxMO1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbitcXHR1bnNpZ25lZCBsb25nICoqbWFza3MgX19mcmVlKGt2ZnJlZSkgPSBOVUxMO1xcbitcXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbitcXHRib29sIHdhcm47XFxuIFxcdHUzMiBzcXM7XFxuIFxcbiBcXHRpZiAoIWlkcGZfeGRwX2VuYWJsZWQodnBvcnQpKVxcbkBAIC0xNzYsNiArMTgwLDM0IEBAIGludCBpZHBmX3hkcHNxc19nZXQoY29uc3Qgc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KVxcbiBcXHRkZXYgPSB2cG9ydC1cXHUwMDNlbmV0ZGV2O1xcbiBcXHRzcXMgPSB2cG9ydC1cXHUwMDNlZGZsdF9xdl9yc3JjLnhkcF90eHFfb2Zmc2V0O1xcbiBcXG4rXFx0dnBvcnQtXFx1MDAzZXhkcHNxX2ZiID0gIWlkcGZfaXNfY2FwX2VuYSh2cG9ydC1cXHUwMDNlYWRhcHRlciwgSURQRl9PVEhFUl9DQVBTLFxcbitcXHRcXHRcXHRcXHRcXHQgICBWSVJUQ0hOTDJfQ0FQX1NQTElUUV9RU0NIRUQpO1xcbitcXHRpZiAoIXZwb3J0LVxcdTAwM2V4ZHBzcV9mYilcXG4rXFx0XFx0Z290byBzZXR1cDtcXG4rXFxuK1xcdG1hc2tzID0ga3Z6YWxsb2Nfb2JqcygqbWFza3MsIHZwb3J0LVxcdTAwM2VudW1feGRwX3R4cSk7XFxuK1xcdGlmICghbWFza3MpXFxuK1xcdFxcdGdvdG8gZXJyX21hc2tzO1xcbitcXG4rXFx0Zm9yICh1MzIgaSA9IDA7IGkgXFx1MDAzYyB2cG9ydC1cXHUwMDNlbnVtX3hkcF90eHE7IGkrKykge1xcbitcXHRcXHRtYXNrc1tpXSA9IGJpdG1hcF96YWxsb2Nfbm9kZSh2cG9ydC1cXHUwMDNldHhxc1tzcXMgKyBpXS1cXHUwMDNlZGVzY19jb3VudCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgR0ZQX0tFUk5FTCwgY3B1X3RvX21lbShpKSk7XFxuK1xcdFxcdGlmICghbWFza3NbaV0pIHtcXG4rXFx0XFx0XFx0Zm9yIChpbnQgaiA9IGkgLSAxOyBqIFxcdTAwM2U9IDA7IGotLSlcXG4rXFx0XFx0XFx0XFx0Yml0bWFwX2ZyZWUobWFza3Nbal0pO1xcbitcXG4rXFx0XFx0XFx0Z290byBlcnJfbWFza3M7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0d2FybiA9ICFzdGF0aWNfa2V5X2VuYWJsZWQoXFx1MDAyNmlkcGZfeGRwX2ZiKTtcXG4rXFx0c3RhdGljX2JyYW5jaF9pbmMoXFx1MDAyNmlkcGZfeGRwX2ZiKTtcXG4rXFxuK1xcdGlmICh3YXJuIFxcdTAwMjZcXHUwMDI2IG5ldF9yYXRlbGltaXQoKSlcXG4rXFx0XFx0bmV0ZGV2X3dhcm4oZGV2LFxcbitcXHRcXHRcXHQgICAgXFxcIlRoZSBGVyBkb2Vzbid0IHN1cHBvcnQgVHggaW4gRklGTyBtb2RlLCBYRFAgVHggcGVyZm9ybWFuY2UgbWlnaHQgYmUgc3Vib3B0aW1hbFxcXFxuXFxcIik7XFxuK1xcbitzZXR1cDpcXG4gXFx0Zm9yICh1MzIgaSA9IHNxczsgaSBcXHUwMDNjIHZwb3J0LVxcdTAwM2VudW1fdHhxOyBpKyspIHtcXG4gXFx0XFx0c3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxID0gdnBvcnQtXFx1MDAzZXR4cXNbaV07XFxuIFxcbkBAIC0xODMsOCArMjE1LDggQEAgaW50IGlkcGZfeGRwc3FzX2dldChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpXFxuIFxcdFxcdGtmcmVlKHhkcHNxLVxcdTAwM2VyZWZpbGxxKTtcXG4gXFx0XFx0eGRwc3EtXFx1MDAzZXJlZmlsbHEgPSBOVUxMO1xcbiBcXG4tXFx0XFx0aWRwZl9xdWV1ZV9jbGVhcihGTE9XX1NDSF9FTiwgeGRwc3EpO1xcbi1cXHRcXHRpZHBmX3F1ZXVlX2NsZWFyKEZMT1dfU0NIX0VOLCB4ZHBzcS1cXHUwMDNlY29tcGxxKTtcXG4rXFx0XFx0aWRwZl9xdWV1ZV9hc3NpZ24oRkxPV19TQ0hfRU4sIHhkcHNxLCB2cG9ydC1cXHUwMDNleGRwc3FfZmIpO1xcbitcXHRcXHRpZHBmX3F1ZXVlX2Fzc2lnbihGTE9XX1NDSF9FTiwgeGRwc3EtXFx1MDAzZWNvbXBscSwgdnBvcnQtXFx1MDAzZXhkcHNxX2ZiKTtcXG4gXFx0XFx0aWRwZl9xdWV1ZV9zZXQoTk9JUlEsIHhkcHNxKTtcXG4gXFx0XFx0aWRwZl9xdWV1ZV9zZXQoWERQLCB4ZHBzcSk7XFxuIFxcdFxcdGlkcGZfcXVldWVfc2V0KFhEUCwgeGRwc3EtXFx1MDAzZWNvbXBscSk7XFxuQEAgLTE5NywxMiArMjI5LDI1IEBAIGludCBpZHBmX3hkcHNxc19nZXQoY29uc3Qgc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KVxcbiBcXHRcXHR4ZHBzcS1cXHUwMDNlcGVuZGluZyA9IDA7XFxuIFxcdFxcdHhkcHNxLVxcdTAwM2V4ZHBfdHggPSAwO1xcbiBcXHRcXHR4ZHBzcS1cXHUwMDNldGhyZXNoID0gbGliZXRoX3hkcF9xdWV1ZV90aHJlc2hvbGQoeGRwc3EtXFx1MDAzZWRlc2NfY291bnQpO1xcbitcXG4rXFx0XFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNmlkcGZfeGRwX2ZiKSBcXHUwMDI2XFx1MDAyNiB2cG9ydC1cXHUwMDNleGRwc3FfZmIpIHtcXG4rXFx0XFx0XFx0eGRwc3EtXFx1MDAzZXBlbmRpbmdfbWFzayA9IG1hc2tzW2kgLSBzcXNdO1xcbitcXHRcXHRcXHR4ZHBzcS1cXHUwMDNlbGFzdF9udHUgPSAwO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbitcXG4rZXJyX21hc2tzOlxcbitcXHR2cG9ydC1cXHUwMDNleGRwc3FfZmIgPSBmYWxzZTtcXG4rXFxuK1xcdGZvciAodTMyIGkgPSAwOyBpIFxcdTAwM2MgdnBvcnQtXFx1MDAzZW51bV94ZHBfdHhxOyBpKyspXFxuK1xcdFxcdGtmcmVlKHRpbWVyc1tpXSk7XFxuK1xcbitcXHRyZXR1cm4gLUVOT01FTTtcXG4gfVxcbiBcXG4tdm9pZCBpZHBmX3hkcHNxc19wdXQoY29uc3Qgc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KVxcbit2b2lkIGlkcGZfeGRwc3FzX3B1dChzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpXFxuIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4gXFx0dTMyIHNxcztcXG5AQCAtMjIyLDEwICsyNjcsMjMgQEAgdm9pZCBpZHBmX3hkcHNxc19wdXQoY29uc3Qgc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KVxcbiBcXHRcXHRsaWJldGhfeGRwc3FfZGVpbml0X3RpbWVyKHhkcHNxLVxcdTAwM2V0aW1lcik7XFxuIFxcdFxcdGxpYmV0aF94ZHBzcV9wdXQoXFx1MDAyNnhkcHNxLVxcdTAwM2V4ZHBfbG9jaywgZGV2KTtcXG4gXFxuK1xcdFxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZpZHBmX3hkcF9mYikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCB4ZHBzcSkpIHtcXG4rXFx0XFx0XFx0Yml0bWFwX2ZyZWUoeGRwc3EtXFx1MDAzZXBlbmRpbmdfbWFzayk7XFxuK1xcdFxcdFxcdHhkcHNxLVxcdTAwM2VwZW5kaW5nX21hc2sgPSBOVUxMO1xcbitcXHRcXHRcXHR4ZHBzcS1cXHUwMDNlbGFzdF9udHUgPSAwO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRrZnJlZSh4ZHBzcS1cXHUwMDNldGltZXIpO1xcbiBcXHRcXHR4ZHBzcS1cXHUwMDNlcmVmaWxscSA9IE5VTEw7XFxuIFxcdFxcdGlkcGZfcXVldWVfY2xlYXIoTk9JUlEsIHhkcHNxKTtcXG4gXFx0fVxcbitcXG4rXFx0aWYgKCF2cG9ydC1cXHUwMDNleGRwc3FfZmIpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHN0YXRpY19icmFuY2hfZGVjKFxcdTAwMjZpZHBmX3hkcF9mYik7XFxuK1xcdHZwb3J0LVxcdTAwM2V4ZHBzcV9mYiA9IGZhbHNlO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGlkcGZfeGRwX3BhcnNlX2NxZShjb25zdCBzdHJ1Y3QgaWRwZl9zcGxpdHFfNGJfdHhfY29tcGxfZGVzYyAqZGVzYyxcXG5AQCAtMjUwLDYgKzMwOCw2NSBAQCBzdGF0aWMgaW50IGlkcGZfeGRwX3BhcnNlX2NxZShjb25zdCBzdHJ1Y3QgaWRwZl9zcGxpdHFfNGJfdHhfY29tcGxfZGVzYyAqZGVzYyxcXG4gXFx0cmV0dXJuIHVwcGVyXzE2X2JpdHModmFsKTtcXG4gfVxcbiBcXG4rc3RhdGljIHUzMiBpZHBmX3hkcHNxX3BvbGxfZmIoc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxLCB1MzIgYnVkZ2V0KVxcbit7XFxuK1xcdHN0cnVjdCBpZHBmX2NvbXBsX3F1ZXVlICpjcSA9IHhkcHNxLVxcdTAwM2Vjb21wbHE7XFxuK1xcdHVuc2lnbmVkIGxvbmcgKm1hc2sgPSB4ZHBzcS1cXHUwMDNlcGVuZGluZ19tYXNrO1xcbitcXHR1MzIgZG9uZV9mcmFtZXMsIHR4X2NudCwgbmV3X250YztcXG4rXFx0dTMyIG50YyA9IGNxLVxcdTAwM2VuZXh0X3RvX2NsZWFuO1xcbitcXHR1MzIgY250ID0gY3EtXFx1MDAzZWRlc2NfY291bnQ7XFxuK1xcdGJvb2wgZ2VuO1xcbitcXG4rXFx0Z2VuID0gaWRwZl9xdWV1ZV9oYXMoR0VOX0NISywgY3EpO1xcbitcXG4rXFx0Zm9yIChkb25lX2ZyYW1lcyA9IDA7IGRvbmVfZnJhbWVzIFxcdTAwM2MgYnVkZ2V0OyApIHtcXG4rXFx0XFx0aW50IHJldDtcXG4rXFxuK1xcdFxcdHJldCA9IGlkcGZfeGRwX3BhcnNlX2NxZShcXHUwMDI2Y3EtXFx1MDAzZWNvbXBbbnRjXS5jb21tb24sIGdlbik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzZT0gMCkge1xcbitcXHRcXHRcXHRfX2NsZWFyX2JpdChyZXQsIG1hc2spO1xcbitcXHRcXHRcXHRkb25lX2ZyYW1lcysrO1xcbitcXG4rXFx0XFx0XFx0Z290byBuZXh0O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRzd2l0Y2ggKHJldCkge1xcbitcXHRcXHRjYXNlIC1FTk9EQVRBOlxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0Y2FzZSAtRUlOVkFMOlxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXG4rbmV4dDpcXG4rXFx0XFx0aWYgKHVubGlrZWx5KCsrbnRjID09IGNudCkpIHtcXG4rXFx0XFx0XFx0bnRjID0gMDtcXG4rXFx0XFx0XFx0Z2VuID0gIWdlbjtcXG4rXFx0XFx0XFx0aWRwZl9xdWV1ZV9jaGFuZ2UoR0VOX0NISywgY3EpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK291dDpcXG4rXFx0Y3EtXFx1MDAzZW5leHRfdG9fY2xlYW4gPSBudGM7XFxuK1xcbitcXHRpZiAodW5saWtlbHkoIWRvbmVfZnJhbWVzKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHR0eF9jbnQgPSB4ZHBzcS1cXHUwMDNlZGVzY19jb3VudDtcXG4rXFxuK1xcdC8qIERvbid0IGdvIHBhc3QgbmV4dF90b191c2UgKi9cXG4rXFx0X19zZXRfYml0KHhkcHNxLVxcdTAwM2VuZXh0X3RvX3VzZSwgbWFzayk7XFxuK1xcbitcXHRuZXdfbnRjID0gZmluZF9uZXh0X2JpdChtYXNrLCB0eF9jbnQsIHhkcHNxLVxcdTAwM2VuZXh0X3RvX2NsZWFuKTtcXG4rXFx0ZG9uZV9mcmFtZXMgPSBuZXdfbnRjIC0geGRwc3EtXFx1MDAzZW5leHRfdG9fY2xlYW47XFxuK1xcbitcXHRpZiAobmV3X250YyA9PSB0eF9jbnQpXFxuK1xcdFxcdGRvbmVfZnJhbWVzICs9IGZpbmRfZmlyc3RfYml0KG1hc2ssIHR4X2NudCk7XFxuK1xcbitcXHRfX2NsZWFyX2JpdCh4ZHBzcS1cXHUwMDNlbmV4dF90b191c2UsIG1hc2spO1xcbitcXG4rXFx0cmV0dXJuIGRvbmVfZnJhbWVzO1xcbit9XFxuK1xcbiB1MzIgaWRwZl94ZHBzcV9wb2xsKHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp4ZHBzcSwgdTMyIGJ1ZGdldClcXG4ge1xcbiBcXHRzdHJ1Y3QgaWRwZl9jb21wbF9xdWV1ZSAqY3EgPSB4ZHBzcS1cXHUwMDNlY29tcGxxO1xcbkBAIC0yNjAsNiArMzc3LDEwIEBAIHUzMiBpZHBmX3hkcHNxX3BvbGwoc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxLCB1MzIgYnVkZ2V0KVxcbiBcXHR1MzIgZG9uZV9mcmFtZXM7XFxuIFxcdGJvb2wgZ2VuO1xcbiBcXG4rXFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNmlkcGZfeGRwX2ZiKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHhkcHNxKSlcXG4rXFx0XFx0cmV0dXJuIGlkcGZfeGRwc3FfcG9sbF9mYih4ZHBzcSwgYnVkZ2V0KTtcXG4rXFxuIFxcdGdlbiA9IGlkcGZfcXVldWVfaGFzKEdFTl9DSEssIGNxKTtcXG4gXFxuIFxcdGZvciAoZG9uZV9mcmFtZXMgPSAwOyBkb25lX2ZyYW1lcyBcXHUwMDNjIGJ1ZGdldDsgKSB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL3hkcC5oXFxuaW5kZXggNjNlNTZmN2Q0M2UwMC4uOTVlNDdlYTJjY2JhOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL3hkcC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuaFxcbkBAIC04LDYgKzgsMTAgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJpZHBmX3R4cnguaFxcXCJcXG4gXFxuK3N0cnVjdCBpZHBmX3FfdmVjX3JzcmM7XFxuK1xcbitERUNMQVJFX1NUQVRJQ19LRVlfRkFMU0UoaWRwZl94ZHBfZmIpO1xcbitcXG4gaW50IGlkcGZfeGRwX3J4cV9pbmZvX2luaXQoc3RydWN0IGlkcGZfcnhfcXVldWUgKnJ4cSk7XFxuIGludCBpZHBmX3hkcF9yeHFfaW5mb19pbml0X2FsbChjb25zdCBzdHJ1Y3QgaWRwZl9xX3ZlY19yc3JjICpyc3JjKTtcXG4gdm9pZCBpZHBmX3hkcF9yeHFfaW5mb19kZWluaXQoc3RydWN0IGlkcGZfcnhfcXVldWUgKnJ4cSwgdTMyIG1vZGVsKTtcXG5AQCAtMTUsMTIgKzE5LDQwIEBAIHZvaWQgaWRwZl94ZHBfcnhxX2luZm9fZGVpbml0X2FsbChjb25zdCBzdHJ1Y3QgaWRwZl9xX3ZlY19yc3JjICpyc3JjKTtcXG4gdm9pZCBpZHBmX3hkcF9jb3B5X3Byb2dfdG9fcnFzKGNvbnN0IHN0cnVjdCBpZHBmX3FfdmVjX3JzcmMgKnJzcmMsXFxuIFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nKTtcXG4gXFxuLWludCBpZHBmX3hkcHNxc19nZXQoY29uc3Qgc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KTtcXG4tdm9pZCBpZHBmX3hkcHNxc19wdXQoY29uc3Qgc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KTtcXG4raW50IGlkcGZfeGRwc3FzX2dldChzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpO1xcbit2b2lkIGlkcGZfeGRwc3FzX3B1dChzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpO1xcbiBcXG4gdTMyIGlkcGZfeGRwc3FfcG9sbChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EsIHUzMiBidWRnZXQpO1xcbiBib29sIGlkcGZfeGRwX3R4X2ZsdXNoX2J1bGsoc3RydWN0IGxpYmV0aF94ZHBfdHhfYnVsayAqYnEsIHUzMiBmbGFncyk7XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBfdHhfeG1pdF9mYihzdHJ1Y3QgbGliZXRoX3hkcF90eF9kZXNjIGRlc2MsIHUzMiBpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGxpYmV0aF94ZHBzcSAqc3EsIHU2NCBwcml2KVxcbit7XFxuK1xcdHN0cnVjdCBpZHBmX2ZsZXhfdHhfc2NoZWRfZGVzYyAqdHhfZGVzYyA9IHNxLVxcdTAwM2VkZXNjcztcXG4rXFx0dTMyIGNtZDtcXG4rXFxuK1xcdGNtZCA9IEZJRUxEX1BSRVAoSURQRl9UWERfRkxFWF9GTE9XX0RUWVBFX00sXFxuK1xcdFxcdFxcdCBJRFBGX1RYX0RFU0NfRFRZUEVfRkxFWF9GTE9XX1NDSEUpO1xcbitcXHRpZiAoZGVzYy5mbGFncyBcXHUwMDI2IExJQkVUSF9YRFBfVFhfTEFTVClcXG4rXFx0XFx0Y21kIHw9IElEUEZfVFhEX0ZMRVhfRkxPV19DTURfRU9QO1xcbitcXHRpZiAocHJpdiBcXHUwMDI2XFx1MDAyNiAoZGVzYy5mbGFncyBcXHUwMDI2IExJQkVUSF9YRFBfVFhfQ1NVTSkpXFxuK1xcdFxcdGNtZCB8PSBJRFBGX1RYRF9GTEVYX0ZMT1dfQ01EX0NTX0VOO1xcbitcXG4rXFx0dHhfZGVzYyA9IFxcdTAwMjZ0eF9kZXNjW2ldO1xcbitcXHR0eF9kZXNjLVxcdTAwM2VidWZfYWRkciA9IGNwdV90b19sZTY0KGRlc2MuYWRkcik7XFxuK1xcbisjaWZkZWYgX19MSUJFVEhfV09SRF9BQ0NFU1NcXG4rXFx0Kih1NjQgKilcXHUwMDI2dHhfZGVzYy1cXHUwMDNlcXcxID0gKCh1NjQpZGVzYy5sZW4gXFx1MDAzY1xcdTAwM2MgNDgpIHwgKCh1NjQpaSBcXHUwMDNjXFx1MDAzYyAzMikgfCBjbWQ7XFxuKyNlbHNlXFxuK1xcdHR4X2Rlc2MtXFx1MDAzZXF3MS5yeHJfYnVmc2l6ZSA9IGNwdV90b19sZTE2KGRlc2MubGVuKTtcXG4rXFx0dHhfZGVzYy1cXHUwMDNlcXcxLmNvbXBsX3RhZyA9IGNwdV90b19sZTE2KGkpO1xcbitcXHR0eF9kZXNjLVxcdTAwM2VxdzEudHNbMF0gPSAwO1xcbitcXHR0eF9kZXNjLVxcdTAwM2VxdzEudHNbMV0gPSAwO1xcbitcXHR0eF9kZXNjLVxcdTAwM2VxdzEudHNbMl0gPSAwO1xcbitcXHR0eF9kZXNjLVxcdTAwM2VxdzEuY21kX2R0eXBlID0gY21kO1xcbisjZW5kaWZcXG4rfVxcbitcXG4gLyoqXFxuICAqIGlkcGZfeGRwX3R4X3htaXQgLSBwcm9kdWNlIGEgc2luZ2xlIEhXIFR4IGRlc2NyaXB0b3Igb3V0IG9mIFhEUCBkZXNjXFxuICAqIEBkZXNjOiBYRFAgZGVzY3JpcHRvciB0byBwdWxsIHRoZSBETUEgYWRkcmVzcyBhbmQgbGVuZ3RoIGZyb21cXG5AQCAtMzQsNiArNjYsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwX3R4X3htaXQoc3RydWN0IGxpYmV0aF94ZHBfdHhfZGVzYyBkZXNjLCB1MzIgaSxcXG4gXFx0c3RydWN0IGlkcGZfZmxleF90eF9kZXNjICp0eF9kZXNjID0gc3EtXFx1MDAzZWRlc2NzO1xcbiBcXHR1MzIgY21kO1xcbiBcXG4rXFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNmlkcGZfeGRwX2ZiKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sXFxuK1xcdFxcdFxcdCAgIGxpYmV0aF94ZHBzcV90b19zcShzcSwgc3RydWN0IGlkcGZfdHhfcXVldWUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIG5leHRfdG9fdXNlKSkpIHtcXG4rXFx0XFx0aWRwZl94ZHBfdHhfeG1pdF9mYihkZXNjLCBpLCBzcSwgcHJpdik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4gXFx0Y21kID0gRklFTERfUFJFUChJRFBGX0ZMRVhfVFhEX1FXMV9EVFlQRV9NLFxcbiBcXHRcXHRcXHQgSURQRl9UWF9ERVNDX0RUWVBFX0ZMRVhfTDJUQUcxX0wyVEFHMik7XFxuIFxcdGlmIChkZXNjLmZsYWdzIFxcdTAwMjYgTElCRVRIX1hEUF9UWF9MQVNUKVxcbkBAIC01MywxMiArOTMsMzQgQEAgc3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwX3R4X3htaXQoc3RydWN0IGxpYmV0aF94ZHBfdHhfZGVzYyBkZXNjLCB1MzIgaSxcXG4gI2VuZGlmXFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcHNxX3NldF9ycyhjb25zdCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EpXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcHNxX3NldF9yc19mYihzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EpXFxuK3tcXG4rXFx0dTMyIG50dSA9IHhkcHNxLVxcdTAwM2VuZXh0X3RvX3VzZTtcXG4rXFx0dTMyIG9sZCA9IHhkcHNxLVxcdTAwM2VsYXN0X250dTtcXG4rXFxuK1xcdGlmIChvbGQgXFx1MDAzZSBudHUpIHtcXG4rXFx0XFx0Yml0bWFwX3NldCh4ZHBzcS1cXHUwMDNlcGVuZGluZ19tYXNrLCBvbGQsIHhkcHNxLVxcdTAwM2VkZXNjX2NvdW50IC0gb2xkKTtcXG4rXFx0XFx0aWYgKG50dSlcXG4rXFx0XFx0XFx0Yml0bWFwX3NldCh4ZHBzcS1cXHUwMDNlcGVuZGluZ19tYXNrLCAwLCBudHUpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRiaXRtYXBfc2V0KHhkcHNxLVxcdTAwM2VwZW5kaW5nX21hc2ssIG9sZCwgbnR1IC0gb2xkKTtcXG4rXFx0fVxcbitcXG4rXFx0eGRwc3EtXFx1MDAzZWxhc3RfbnR1ID0gbnR1O1xcbit9XFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgaWRwZl94ZHBzcV9zZXRfcnMoc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxKVxcbiB7XFxuIFxcdHUzMiBudHUsIGNtZDtcXG4gXFxuK1xcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZpZHBmX3hkcF9mYikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCB4ZHBzcSkpIHtcXG4rXFx0XFx0aWRwZl94ZHBzcV9zZXRfcnNfZmIoeGRwc3EpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuIFxcdG50dSA9IHhkcHNxLVxcdTAwM2VuZXh0X3RvX3VzZTtcXG4tXFx0aWYgKHVubGlrZWx5KCFudHUpKVxcbitcXHRpZiAoIW50dSlcXG4gXFx0XFx0bnR1ID0geGRwc3EtXFx1MDAzZWRlc2NfY291bnQ7XFxuIFxcbiBcXHRjbWQgPSBGSUVMRF9QUkVQKElEUEZfRkxFWF9UWERfUVcxX0NNRF9NLCBJRFBGX1RYX0RFU0NfQ01EX1JTKTtcXG5AQCAtODQsNyArMTQ2LDggQEAgc3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwc3FfdXBkYXRlX3RhaWwoY29uc3Qgc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxKVxcbiAgKiBTZXQgdGhlIFJTIGJpdCAoXFxcImVuZCBvZiBiYXRjaFxcXCIpLCBidW1wIHRoZSB0YWlsLCBhbmQgcXVldWUgdGhlIGNsZWFudXAgdGltZXIuXFxuICAqIFRvIGJlIGNhbGxlZCBhZnRlciBhIE5BUEkgcG9sbGluZyBsb29wLCBhdCB0aGUgZW5kIG9mIC5uZG9feGRwX3htaXQoKSBldGMuXFxuICAqL1xcbi1zdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBfdHhfZmluYWxpemUodm9pZCAqX3hkcHNxLCBib29sIHNlbnQsIGJvb2wgZmx1c2gpXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBpZHBmX3hkcF90eF9maW5hbGl6ZSh2b2lkICpfeGRwc3EsIGJvb2wgc2VudCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IGJvb2wgZmx1c2gpXFxuIHtcXG4gXFx0c3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxID0gX3hkcHNxO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbGliZXRoL3hkcC5oIGIvaW5jbHVkZS9uZXQvbGliZXRoL3hkcC5oXFxuaW5kZXggODk4NzIzYWI2MmU4MS4uZWQ2MWQ4M2JkYTJkNyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9saWJldGgveGRwLmhcXG4rKysgYi9pbmNsdWRlL25ldC9saWJldGgveGRwLmhcXG5AQCAtNDMwLDYgKzQzMCwxOSBAQCBzdHJ1Y3QgbGliZXRoX3hkcHNxIHtcXG4gXFx0c3RydWN0IGxpYmV0aF94ZHBzcV9sb2NrXFx0KmxvY2s7XFxuIH07XFxuIFxcbisvKipcXG4rICogbGliZXRoX3hkcHNxX3RvX3NxIC0gZ2V0IFNRIHBvaW50ZXIgZnJvbSBhbiBYRFBTUSBwb2ludGVyXFxuKyAqIEB4ZHBzcTogXFx1MDAyNmxpYmV0aF94ZHBzcSBjb3JyZXNwb25kaW5nIHRvIHRoZSBxdWV1ZVxcbisgKiBAdHlwZTogdHlwZW9mKCkgb2YgdGhlIGRyaXZlciBUeCBxdWV1ZSBzdHJ1Y3R1cmVcXG4rICogQG1lbWJlcjogbmFtZSBvZiB0aGUgTlRVIGZpZWxkIGluc2lkZSBAdHlwZVxcbisgKlxcbisgKiBTb21lIG9mIHRoZSBzZW5kaW5nIGNhbGxiYWNrcyB0YWtlIG9ubHkgXFx1MDAyNmxpYmV0aF94ZHBzcSBwb2ludGVyIGFuZCBubyBwb2ludGVyXFxuKyAqIHRvIHRoZSBhY3R1YWwgZHJpdmVyIFR4IHF1ZXVlIHN0cnVjdHVyZS4gVXNlIHRoaXMgaGVscGVyIHRvIHF1aWNrbHkganVtcCB0b1xcbisgKiB0aGUgbGF0dGVyIHdoZW4gbmVlZGVkLlxcbisgKi9cXG4rI2RlZmluZSBsaWJldGhfeGRwc3FfdG9fc3EoeGRwc3EsIHR5cGUsIG1lbWJlcilcXHRcXHRcXHRcXHQgICAgICBcXFxcXFxuK1xcdGNvbnRhaW5lcl9vZl9jb25zdCgoeGRwc3EpLVxcdTAwM2VudHUsIHR5cGUsIG1lbWJlcilcXG4rXFxuIC8qKlxcbiAgKiBzdHJ1Y3QgbGliZXRoX3hkcF90eF9kZXNjIC0gYWJzdHJhY3Rpb24gZm9yIGFuIFhEUCBUeCBkZXNjcmlwdG9yXFxuICAqIEBhZGRyOiBETUEgYWRkcmVzcyBvZiB0aGUgZnJhbWVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MDY6MDIuMDkyNzA2OTA3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjEyNzc4NzQxMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBJbmZyYXN0cnVjdHVyZSBEYXRhIFBhdGggRnVuY3Rpb24gKGlkcGYpIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBTbWFydE5JQy9JUFUgZHJpdmVyLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBtYWtpbmcgaXQgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiM2ZjYjY4YmM2MDczYjUwOGExYjZjNjI2NjgxNmZhYzBkNmY4ODRjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTg6MDY6MDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oXG5pbmRleCA0NzBiYzIzYzg0NGMxLi4xZTg5N2UxMzFjYjI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oXG5AQCAtMzgzLDYgKzM4Myw3IEBAIHN0cnVjdCBpZHBmX3Zwb3J0IHtcbiBcdHN0cnVjdCBpZHBmX3R4X3F1ZXVlICoqdHhxcztcbiBcdHUxNiBudW1fdHhxO1xuIFx0dTE2IG51bV94ZHBfdHhxO1xuK1x0Ym9vbCB4ZHBzcV9mYjtcbiBcdGJvb2wgeGRwc3Ffc2hhcmU7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jXG5pbmRleCBjM2ZmYjQ0NTI5N2Y4Li43NDMzOTU5NjIwNzdkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY1xuQEAgLTIyNyw3ICsyMjcsNyBAQCBzdGF0aWMgaW50IGlkcGZfdHhfZGVzY19hbGxvYyhjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQsXG4gXG4gXHRpZHBmX3hza19zZXR1cF9xdWV1ZSh2cG9ydCwgdHhfcSwgVklSVENITkwyX1FVRVVFX1RZUEVfVFgpO1xuIFxuLVx0aWYgKCFpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgdHhfcSkpXG4rXHRpZiAoIWlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCB0eF9xKSB8fCBpZHBmX3F1ZXVlX2hhcyhYRFAsIHR4X3EpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdHJlZmlsbHEgPSB0eF9xLVx1MDAzZXJlZmlsbHE7XG5AQCAtMTA1NSw2ICsxMDU1LDEzIEBAIHN0YXRpYyB2b2lkIGlkcGZfY2xlYW5fcXVldWVfc2V0KGNvbnN0IHN0cnVjdCBpZHBmX3F1ZXVlX3NldCAqcXMpXG4gXHRcdFx0aWYgKGlkcGZfcXVldWVfaGFzKFhEUCwgcS1cdTAwM2V0eHEpKSB7XG4gXHRcdFx0XHRxLVx1MDAzZXR4cS1cdTAwM2VwZW5kaW5nID0gMDtcbiBcdFx0XHRcdHEtXHUwMDNldHhxLVx1MDAzZXhkcF90eCA9IDA7XG4rXG4rXHRcdFx0XHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZpZHBmX3hkcF9mYikgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHEtXHUwMDNldHhxKSkge1xuK1x0XHRcdFx0XHRiaXRtYXBfemVybyhxLVx1MDAzZXR4cS1cdTAwM2VwZW5kaW5nX21hc2ssXG4rXHRcdFx0XHRcdFx0ICAgIHEtXHUwMDNldHhxLVx1MDAzZWRlc2NfY291bnQpO1xuK1x0XHRcdFx0XHRxLVx1MDAzZXR4cS1cdTAwM2VsYXN0X250dSA9IDA7XG4rXHRcdFx0XHR9XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdHEtXHUwMDNldHhxLVx1MDAzZXR4cV9ncnAtXHUwMDNlbnVtX2NvbXBsZXRpb25zX3BlbmRpbmcgPSAwO1xuIFx0XHRcdH1cbkBAIC0xMzE3LDcgKzEzMjQsOCBAQCBzdGF0aWMgdm9pZCBpZHBmX3R4cV9ncm91cF9yZWwoc3RydWN0IGlkcGZfcV92ZWNfcnNyYyAqcnNyYylcbiBcdFx0XHRpZiAoIXR4cV9ncnAtXHUwMDNldHhxc1tqXSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdGlmIChpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgdHhxX2dycC1cdTAwM2V0eHFzW2pdKSkge1xuK1x0XHRcdGlmIChpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgdHhxX2dycC1cdTAwM2V0eHFzW2pdKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgIWlkcGZfcXVldWVfaGFzKFhEUCwgdHhxX2dycC1cdTAwM2V0eHFzW2pdKSkge1xuIFx0XHRcdFx0a2ZyZWUodHhxX2dycC1cdTAwM2V0eHFzW2pdLVx1MDAzZXJlZmlsbHEpO1xuIFx0XHRcdFx0dHhxX2dycC1cdTAwM2V0eHFzW2pdLVx1MDAzZXJlZmlsbHEgPSBOVUxMO1xuIFx0XHRcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaFxuaW5kZXggOTM1NDc1OTdlZmQyYS4uZGNlMDdmYmI2ZTc3MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmhcbkBAIC02MjUsMTIgKzYyNSwxNCBAQCBsaWJldGhfY2FjaGVsaW5lX3NldF9hc3NlcnQoc3RydWN0IGlkcGZfcnhfcXVldWUsXG4gICogQGNsZWFuX2J1ZGdldDogc2luZ2xlcSBvbmx5LCBxdWV1ZSBjbGVhbmluZyBidWRnZXRcbiAgKiBAY2xlYW5lZF9wa3RzOiBOdW1iZXIgb2YgcGFja2V0cyBjbGVhbmVkIGZvciB0aGUgYWJvdmUgc2FpZCBjYXNlXG4gICogQHJlZmlsbHE6IFBvaW50ZXIgdG8gcmVmaWxsIHF1ZXVlXG4rICogQGNhY2hlZF90c3RhbXBfY2FwczogVHggdGltZXN0YW1wIGNhcGFiaWxpdGllcyBuZWdvdGlhdGVkIHdpdGggdGhlIENQXG4rICogQHRzdGFtcF90YXNrOiBXb3JrIHRoYXQgaGFuZGxlcyBUeCB0aW1lc3RhbXAgcmVhZFxuICAqIEBwZW5kaW5nOiBudW1iZXIgb2YgcGVuZGluZyBkZXNjcmlwdG9ycyB0byBzZW5kIGluIFFCXG4gICogQHhkcF90eDogbnVtYmVyIG9mIHBlbmRpbmcgXHUwMDI2eGRwX2J1ZmYgb3IgXHUwMDI2eGRwX2ZyYW1lIGJ1ZmZlcnNcbiAgKiBAdGltZXI6IHRpbWVyIGZvciBYRFAgVHggcXVldWUgY2xlYW51cFxuICAqIEB4ZHBfbG9jazogbG9jayBmb3IgWERQIFR4IHF1ZXVlcyBzaGFyaW5nXG4tICogQGNhY2hlZF90c3RhbXBfY2FwczogVHggdGltZXN0YW1wIGNhcGFiaWxpdGllcyBuZWdvdGlhdGVkIHdpdGggdGhlIENQXG4tICogQHRzdGFtcF90YXNrOiBXb3JrIHRoYXQgaGFuZGxlcyBUeCB0aW1lc3RhbXAgcmVhZFxuKyAqIEBwZW5kaW5nX21hc2s6IG1hc2sgb2YgYnVmZmVycyB3YWl0aW5nIGZvciBjb21wbGV0aW9uIGluIHRoZSBGQiBYRFAgbW9kZVxuKyAqIEBsYXN0X250dTogQG5leHRfdG9fdXNlIGZyb20gdGhlIHByZXZpb3VzIGJhdGNoIGluIHRoZSBGQiBYRFAgbW9kZVxuICAqIEBzdGF0c19zeW5jOiBTZWUgc3RydWN0IHU2NF9zdGF0c19zeW5jXG4gICogQHFfc3RhdHM6IFNlZSB1bmlvbiBpZHBmX3R4X3F1ZXVlX3N0YXRzXG4gICogQHFfaWQ6IFF1ZXVlIGlkXG5AQCAtNjg5LDYgKzY5MSw5IEBAIHN0cnVjdCBpZHBmX3R4X3F1ZXVlIHtcbiBcdFx0XHR1MTYgY2xlYW5lZF9wa3RzO1xuIFxuIFx0XHRcdHN0cnVjdCBpZHBmX3N3X3F1ZXVlICpyZWZpbGxxO1xuK1xuK1x0XHRcdHN0cnVjdCBpZHBmX3B0cF92cG9ydF90eF90c3RhbXBfY2FwcyAqY2FjaGVkX3RzdGFtcF9jYXBzO1xuK1x0XHRcdHN0cnVjdCB3b3JrX3N0cnVjdCAqdHN0YW1wX3Rhc2s7XG4gXHRcdH07XG4gXHRcdHN0cnVjdCB7XG4gXHRcdFx0dTMyIHBlbmRpbmc7XG5AQCAtNjk2LDEyICs3MDEsMTIgQEAgc3RydWN0IGlkcGZfdHhfcXVldWUge1xuIFxuIFx0XHRcdHN0cnVjdCBsaWJldGhfeGRwc3FfdGltZXIgKnRpbWVyO1xuIFx0XHRcdHN0cnVjdCBsaWJldGhfeGRwc3FfbG9jayB4ZHBfbG9jaztcbitcbitcdFx0XHR1bnNpZ25lZCBsb25nICpwZW5kaW5nX21hc2s7XG4rXHRcdFx0dTMyIGxhc3RfbnR1O1xuIFx0XHR9O1xuIFx0fTtcbiBcbi1cdHN0cnVjdCBpZHBmX3B0cF92cG9ydF90eF90c3RhbXBfY2FwcyAqY2FjaGVkX3RzdGFtcF9jYXBzO1xuLVx0c3RydWN0IHdvcmtfc3RydWN0ICp0c3RhbXBfdGFzaztcbi1cbiBcdHN0cnVjdCB1NjRfc3RhdHNfc3luYyBzdGF0c19zeW5jO1xuIFx0c3RydWN0IGlkcGZfdHhfcXVldWVfc3RhdHMgcV9zdGF0cztcbiBcdF9fY2FjaGVsaW5lX2dyb3VwX2VuZF9hbGlnbmVkKHJlYWRfd3JpdGUpO1xuQEAgLTcxOCw4ICs3MjMsNyBAQCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSB7XG4gXHRfX2NhY2hlbGluZV9ncm91cF9lbmRfYWxpZ25lZChjb2xkKTtcbiB9O1xuIGxpYmV0aF9jYWNoZWxpbmVfc2V0X2Fzc2VydChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgNjQsXG4tXHRcdFx0ICAgIDEwNCArXG4tXHRcdFx0ICAgIG9mZnNldG9mKHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCBjYWNoZWRfdHN0YW1wX2NhcHMpIC1cbitcdFx0XHQgICAgOTYgKyBvZmZzZXRvZihzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgdHN0YW1wX3Rhc2spIC1cbiBcdFx0XHQgICAgb2Zmc2V0b2ZlbmQoc3RydWN0IGlkcGZfdHhfcXVldWUsIHRpbWVyKSArXG4gXHRcdFx0ICAgIG9mZnNldG9mKHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCBxX3N0YXRzKSAtXG4gXHRcdFx0ICAgIG9mZnNldG9mZW5kKHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCB0c3RhbXBfdGFzayksXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmNcbmluZGV4IGNiY2NkNDU0Njc2ODEuLmM3NzE2NjM2NzdhNTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL3hkcC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL3hkcC5jXG5AQCAtNyw2ICs3LDggQEBcbiAjaW5jbHVkZSBcInhkcC5oXCJcbiAjaW5jbHVkZSBcInhzay5oXCJcbiBcbitERUZJTkVfU1RBVElDX0tFWV9GQUxTRShpZHBmX3hkcF9mYik7XG4rXG4gc3RhdGljIGludCBpZHBmX3J4cV9mb3JfZWFjaChjb25zdCBzdHJ1Y3QgaWRwZl9xX3ZlY19yc3JjICpyc3JjLFxuIFx0XHRcdCAgICAgaW50ICgqZm4pKHN0cnVjdCBpZHBmX3J4X3F1ZXVlICpyeHEsIHZvaWQgKmFyZyksXG4gXHRcdFx0ICAgICB2b2lkICphcmcpXG5AQCAtMTQ5LDEwICsxNTEsMTIgQEAgdm9pZCBpZHBmX3hkcF9jb3B5X3Byb2dfdG9fcnFzKGNvbnN0IHN0cnVjdCBpZHBmX3FfdmVjX3JzcmMgKnJzcmMsXG4gXG4gc3RhdGljIHZvaWQgaWRwZl94ZHBfdHhfdGltZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiBcbi1pbnQgaWRwZl94ZHBzcXNfZ2V0KGNvbnN0IHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydClcbitpbnQgaWRwZl94ZHBzcXNfZ2V0KHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydClcbiB7XG4gXHRzdHJ1Y3QgbGliZXRoX3hkcHNxX3RpbWVyICoqdGltZXJzIF9fZnJlZShrdmZyZWUpID0gTlVMTDtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4rXHR1bnNpZ25lZCBsb25nICoqbWFza3MgX19mcmVlKGt2ZnJlZSkgPSBOVUxMO1xuK1x0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbitcdGJvb2wgd2FybjtcbiBcdHUzMiBzcXM7XG4gXG4gXHRpZiAoIWlkcGZfeGRwX2VuYWJsZWQodnBvcnQpKVxuQEAgLTE3Niw2ICsxODAsMzQgQEAgaW50IGlkcGZfeGRwc3FzX2dldChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpXG4gXHRkZXYgPSB2cG9ydC1cdTAwM2VuZXRkZXY7XG4gXHRzcXMgPSB2cG9ydC1cdTAwM2VkZmx0X3F2X3JzcmMueGRwX3R4cV9vZmZzZXQ7XG4gXG4rXHR2cG9ydC1cdTAwM2V4ZHBzcV9mYiA9ICFpZHBmX2lzX2NhcF9lbmEodnBvcnQtXHUwMDNlYWRhcHRlciwgSURQRl9PVEhFUl9DQVBTLFxuK1x0XHRcdFx0XHQgICBWSVJUQ0hOTDJfQ0FQX1NQTElUUV9RU0NIRUQpO1xuK1x0aWYgKCF2cG9ydC1cdTAwM2V4ZHBzcV9mYilcbitcdFx0Z290byBzZXR1cDtcbitcbitcdG1hc2tzID0ga3Z6YWxsb2Nfb2JqcygqbWFza3MsIHZwb3J0LVx1MDAzZW51bV94ZHBfdHhxKTtcbitcdGlmICghbWFza3MpXG4rXHRcdGdvdG8gZXJyX21hc2tzO1xuK1xuK1x0Zm9yICh1MzIgaSA9IDA7IGkgXHUwMDNjIHZwb3J0LVx1MDAzZW51bV94ZHBfdHhxOyBpKyspIHtcbitcdFx0bWFza3NbaV0gPSBiaXRtYXBfemFsbG9jX25vZGUodnBvcnQtXHUwMDNldHhxc1tzcXMgKyBpXS1cdTAwM2VkZXNjX2NvdW50LFxuK1x0XHRcdFx0XHQgICAgICBHRlBfS0VSTkVMLCBjcHVfdG9fbWVtKGkpKTtcbitcdFx0aWYgKCFtYXNrc1tpXSkge1xuK1x0XHRcdGZvciAoaW50IGogPSBpIC0gMTsgaiBcdTAwM2U9IDA7IGotLSlcbitcdFx0XHRcdGJpdG1hcF9mcmVlKG1hc2tzW2pdKTtcbitcbitcdFx0XHRnb3RvIGVycl9tYXNrcztcbitcdFx0fVxuK1x0fVxuK1xuK1x0d2FybiA9ICFzdGF0aWNfa2V5X2VuYWJsZWQoXHUwMDI2aWRwZl94ZHBfZmIpO1xuK1x0c3RhdGljX2JyYW5jaF9pbmMoXHUwMDI2aWRwZl94ZHBfZmIpO1xuK1xuK1x0aWYgKHdhcm4gXHUwMDI2XHUwMDI2IG5ldF9yYXRlbGltaXQoKSlcbitcdFx0bmV0ZGV2X3dhcm4oZGV2LFxuK1x0XHRcdCAgICBcIlRoZSBGVyBkb2Vzbid0IHN1cHBvcnQgVHggaW4gRklGTyBtb2RlLCBYRFAgVHggcGVyZm9ybWFuY2UgbWlnaHQgYmUgc3Vib3B0aW1hbFxcblwiKTtcbitcbitzZXR1cDpcbiBcdGZvciAodTMyIGkgPSBzcXM7IGkgXHUwMDNjIHZwb3J0LVx1MDAzZW51bV90eHE7IGkrKykge1xuIFx0XHRzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EgPSB2cG9ydC1cdTAwM2V0eHFzW2ldO1xuIFxuQEAgLTE4Myw4ICsyMTUsOCBAQCBpbnQgaWRwZl94ZHBzcXNfZ2V0KGNvbnN0IHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydClcbiBcdFx0a2ZyZWUoeGRwc3EtXHUwMDNlcmVmaWxscSk7XG4gXHRcdHhkcHNxLVx1MDAzZXJlZmlsbHEgPSBOVUxMO1xuIFxuLVx0XHRpZHBmX3F1ZXVlX2NsZWFyKEZMT1dfU0NIX0VOLCB4ZHBzcSk7XG4tXHRcdGlkcGZfcXVldWVfY2xlYXIoRkxPV19TQ0hfRU4sIHhkcHNxLVx1MDAzZWNvbXBscSk7XG4rXHRcdGlkcGZfcXVldWVfYXNzaWduKEZMT1dfU0NIX0VOLCB4ZHBzcSwgdnBvcnQtXHUwMDNleGRwc3FfZmIpO1xuK1x0XHRpZHBmX3F1ZXVlX2Fzc2lnbihGTE9XX1NDSF9FTiwgeGRwc3EtXHUwMDNlY29tcGxxLCB2cG9ydC1cdTAwM2V4ZHBzcV9mYik7XG4gXHRcdGlkcGZfcXVldWVfc2V0KE5PSVJRLCB4ZHBzcSk7XG4gXHRcdGlkcGZfcXVldWVfc2V0KFhEUCwgeGRwc3EpO1xuIFx0XHRpZHBmX3F1ZXVlX3NldChYRFAsIHhkcHNxLVx1MDAzZWNvbXBscSk7XG5AQCAtMTk3LDEyICsyMjksMjUgQEAgaW50IGlkcGZfeGRwc3FzX2dldChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpXG4gXHRcdHhkcHNxLVx1MDAzZXBlbmRpbmcgPSAwO1xuIFx0XHR4ZHBzcS1cdTAwM2V4ZHBfdHggPSAwO1xuIFx0XHR4ZHBzcS1cdTAwM2V0aHJlc2ggPSBsaWJldGhfeGRwX3F1ZXVlX3RocmVzaG9sZCh4ZHBzcS1cdTAwM2VkZXNjX2NvdW50KTtcbitcbitcdFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2aWRwZl94ZHBfZmIpIFx1MDAyNlx1MDAyNiB2cG9ydC1cdTAwM2V4ZHBzcV9mYikge1xuK1x0XHRcdHhkcHNxLVx1MDAzZXBlbmRpbmdfbWFzayA9IG1hc2tzW2kgLSBzcXNdO1xuK1x0XHRcdHhkcHNxLVx1MDAzZWxhc3RfbnR1ID0gMDtcbitcdFx0fVxuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG4rXG4rZXJyX21hc2tzOlxuK1x0dnBvcnQtXHUwMDNleGRwc3FfZmIgPSBmYWxzZTtcbitcbitcdGZvciAodTMyIGkgPSAwOyBpIFx1MDAzYyB2cG9ydC1cdTAwM2VudW1feGRwX3R4cTsgaSsrKVxuK1x0XHRrZnJlZSh0aW1lcnNbaV0pO1xuK1xuK1x0cmV0dXJuIC1FTk9NRU07XG4gfVxuIFxuLXZvaWQgaWRwZl94ZHBzcXNfcHV0KGNvbnN0IHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydClcbit2b2lkIGlkcGZfeGRwc3FzX3B1dChzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiBcdHUzMiBzcXM7XG5AQCAtMjIyLDEwICsyNjcsMjMgQEAgdm9pZCBpZHBmX3hkcHNxc19wdXQoY29uc3Qgc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KVxuIFx0XHRsaWJldGhfeGRwc3FfZGVpbml0X3RpbWVyKHhkcHNxLVx1MDAzZXRpbWVyKTtcbiBcdFx0bGliZXRoX3hkcHNxX3B1dChcdTAwMjZ4ZHBzcS1cdTAwM2V4ZHBfbG9jaywgZGV2KTtcbiBcbitcdFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2aWRwZl94ZHBfZmIpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHhkcHNxKSkge1xuK1x0XHRcdGJpdG1hcF9mcmVlKHhkcHNxLVx1MDAzZXBlbmRpbmdfbWFzayk7XG4rXHRcdFx0eGRwc3EtXHUwMDNlcGVuZGluZ19tYXNrID0gTlVMTDtcbitcdFx0XHR4ZHBzcS1cdTAwM2VsYXN0X250dSA9IDA7XG4rXHRcdH1cbitcbiBcdFx0a2ZyZWUoeGRwc3EtXHUwMDNldGltZXIpO1xuIFx0XHR4ZHBzcS1cdTAwM2VyZWZpbGxxID0gTlVMTDtcbiBcdFx0aWRwZl9xdWV1ZV9jbGVhcihOT0lSUSwgeGRwc3EpO1xuIFx0fVxuK1xuK1x0aWYgKCF2cG9ydC1cdTAwM2V4ZHBzcV9mYilcbitcdFx0cmV0dXJuO1xuK1xuK1x0c3RhdGljX2JyYW5jaF9kZWMoXHUwMDI2aWRwZl94ZHBfZmIpO1xuK1x0dnBvcnQtXHUwMDNleGRwc3FfZmIgPSBmYWxzZTtcbiB9XG4gXG4gc3RhdGljIGludCBpZHBmX3hkcF9wYXJzZV9jcWUoY29uc3Qgc3RydWN0IGlkcGZfc3BsaXRxXzRiX3R4X2NvbXBsX2Rlc2MgKmRlc2MsXG5AQCAtMjUwLDYgKzMwOCw2NSBAQCBzdGF0aWMgaW50IGlkcGZfeGRwX3BhcnNlX2NxZShjb25zdCBzdHJ1Y3QgaWRwZl9zcGxpdHFfNGJfdHhfY29tcGxfZGVzYyAqZGVzYyxcbiBcdHJldHVybiB1cHBlcl8xNl9iaXRzKHZhbCk7XG4gfVxuIFxuK3N0YXRpYyB1MzIgaWRwZl94ZHBzcV9wb2xsX2ZiKHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp4ZHBzcSwgdTMyIGJ1ZGdldClcbit7XG4rXHRzdHJ1Y3QgaWRwZl9jb21wbF9xdWV1ZSAqY3EgPSB4ZHBzcS1cdTAwM2Vjb21wbHE7XG4rXHR1bnNpZ25lZCBsb25nICptYXNrID0geGRwc3EtXHUwMDNlcGVuZGluZ19tYXNrO1xuK1x0dTMyIGRvbmVfZnJhbWVzLCB0eF9jbnQsIG5ld19udGM7XG4rXHR1MzIgbnRjID0gY3EtXHUwMDNlbmV4dF90b19jbGVhbjtcbitcdHUzMiBjbnQgPSBjcS1cdTAwM2VkZXNjX2NvdW50O1xuK1x0Ym9vbCBnZW47XG4rXG4rXHRnZW4gPSBpZHBmX3F1ZXVlX2hhcyhHRU5fQ0hLLCBjcSk7XG4rXG4rXHRmb3IgKGRvbmVfZnJhbWVzID0gMDsgZG9uZV9mcmFtZXMgXHUwMDNjIGJ1ZGdldDsgKSB7XG4rXHRcdGludCByZXQ7XG4rXG4rXHRcdHJldCA9IGlkcGZfeGRwX3BhcnNlX2NxZShcdTAwMjZjcS1cdTAwM2Vjb21wW250Y10uY29tbW9uLCBnZW4pO1xuK1x0XHRpZiAocmV0IFx1MDAzZT0gMCkge1xuK1x0XHRcdF9fY2xlYXJfYml0KHJldCwgbWFzayk7XG4rXHRcdFx0ZG9uZV9mcmFtZXMrKztcbitcbitcdFx0XHRnb3RvIG5leHQ7XG4rXHRcdH1cbitcbitcdFx0c3dpdGNoIChyZXQpIHtcbitcdFx0Y2FzZSAtRU5PREFUQTpcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0Y2FzZSAtRUlOVkFMOlxuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rbmV4dDpcbitcdFx0aWYgKHVubGlrZWx5KCsrbnRjID09IGNudCkpIHtcbitcdFx0XHRudGMgPSAwO1xuK1x0XHRcdGdlbiA9ICFnZW47XG4rXHRcdFx0aWRwZl9xdWV1ZV9jaGFuZ2UoR0VOX0NISywgY3EpO1xuK1x0XHR9XG4rXHR9XG4rXG4rb3V0OlxuK1x0Y3EtXHUwMDNlbmV4dF90b19jbGVhbiA9IG50YztcbitcbitcdGlmICh1bmxpa2VseSghZG9uZV9mcmFtZXMpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHR4X2NudCA9IHhkcHNxLVx1MDAzZWRlc2NfY291bnQ7XG4rXG4rXHQvKiBEb24ndCBnbyBwYXN0IG5leHRfdG9fdXNlICovXG4rXHRfX3NldF9iaXQoeGRwc3EtXHUwMDNlbmV4dF90b191c2UsIG1hc2spO1xuK1xuK1x0bmV3X250YyA9IGZpbmRfbmV4dF9iaXQobWFzaywgdHhfY250LCB4ZHBzcS1cdTAwM2VuZXh0X3RvX2NsZWFuKTtcbitcdGRvbmVfZnJhbWVzID0gbmV3X250YyAtIHhkcHNxLVx1MDAzZW5leHRfdG9fY2xlYW47XG4rXG4rXHRpZiAobmV3X250YyA9PSB0eF9jbnQpXG4rXHRcdGRvbmVfZnJhbWVzICs9IGZpbmRfZmlyc3RfYml0KG1hc2ssIHR4X2NudCk7XG4rXG4rXHRfX2NsZWFyX2JpdCh4ZHBzcS1cdTAwM2VuZXh0X3RvX3VzZSwgbWFzayk7XG4rXG4rXHRyZXR1cm4gZG9uZV9mcmFtZXM7XG4rfVxuK1xuIHUzMiBpZHBmX3hkcHNxX3BvbGwoc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxLCB1MzIgYnVkZ2V0KVxuIHtcbiBcdHN0cnVjdCBpZHBmX2NvbXBsX3F1ZXVlICpjcSA9IHhkcHNxLVx1MDAzZWNvbXBscTtcbkBAIC0yNjAsNiArMzc3LDEwIEBAIHUzMiBpZHBmX3hkcHNxX3BvbGwoc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxLCB1MzIgYnVkZ2V0KVxuIFx0dTMyIGRvbmVfZnJhbWVzO1xuIFx0Ym9vbCBnZW47XG4gXG4rXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZpZHBmX3hkcF9mYikgXHUwMDI2XHUwMDI2XG4rXHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHhkcHNxKSlcbitcdFx0cmV0dXJuIGlkcGZfeGRwc3FfcG9sbF9mYih4ZHBzcSwgYnVkZ2V0KTtcbitcbiBcdGdlbiA9IGlkcGZfcXVldWVfaGFzKEdFTl9DSEssIGNxKTtcbiBcbiBcdGZvciAoZG9uZV9mcmFtZXMgPSAwOyBkb25lX2ZyYW1lcyBcdTAwM2MgYnVkZ2V0OyApIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL3hkcC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuaFxuaW5kZXggNjNlNTZmN2Q0M2UwMC4uOTVlNDdlYTJjY2JhOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmhcbkBAIC04LDYgKzgsMTAgQEBcbiBcbiAjaW5jbHVkZSBcImlkcGZfdHhyeC5oXCJcbiBcbitzdHJ1Y3QgaWRwZl9xX3ZlY19yc3JjO1xuK1xuK0RFQ0xBUkVfU1RBVElDX0tFWV9GQUxTRShpZHBmX3hkcF9mYik7XG4rXG4gaW50IGlkcGZfeGRwX3J4cV9pbmZvX2luaXQoc3RydWN0IGlkcGZfcnhfcXVldWUgKnJ4cSk7XG4gaW50IGlkcGZfeGRwX3J4cV9pbmZvX2luaXRfYWxsKGNvbnN0IHN0cnVjdCBpZHBmX3FfdmVjX3JzcmMgKnJzcmMpO1xuIHZvaWQgaWRwZl94ZHBfcnhxX2luZm9fZGVpbml0KHN0cnVjdCBpZHBmX3J4X3F1ZXVlICpyeHEsIHUzMiBtb2RlbCk7XG5AQCAtMTUsMTIgKzE5LDQwIEBAIHZvaWQgaWRwZl94ZHBfcnhxX2luZm9fZGVpbml0X2FsbChjb25zdCBzdHJ1Y3QgaWRwZl9xX3ZlY19yc3JjICpyc3JjKTtcbiB2b2lkIGlkcGZfeGRwX2NvcHlfcHJvZ190b19ycXMoY29uc3Qgc3RydWN0IGlkcGZfcV92ZWNfcnNyYyAqcnNyYyxcbiBcdFx0XHQgICAgICAgc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZyk7XG4gXG4taW50IGlkcGZfeGRwc3FzX2dldChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpO1xuLXZvaWQgaWRwZl94ZHBzcXNfcHV0KGNvbnN0IHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCk7XG4raW50IGlkcGZfeGRwc3FzX2dldChzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpO1xuK3ZvaWQgaWRwZl94ZHBzcXNfcHV0KHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCk7XG4gXG4gdTMyIGlkcGZfeGRwc3FfcG9sbChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EsIHUzMiBidWRnZXQpO1xuIGJvb2wgaWRwZl94ZHBfdHhfZmx1c2hfYnVsayhzdHJ1Y3QgbGliZXRoX3hkcF90eF9idWxrICpicSwgdTMyIGZsYWdzKTtcbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBfdHhfeG1pdF9mYihzdHJ1Y3QgbGliZXRoX3hkcF90eF9kZXNjIGRlc2MsIHUzMiBpLFxuK1x0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBsaWJldGhfeGRwc3EgKnNxLCB1NjQgcHJpdilcbit7XG4rXHRzdHJ1Y3QgaWRwZl9mbGV4X3R4X3NjaGVkX2Rlc2MgKnR4X2Rlc2MgPSBzcS1cdTAwM2VkZXNjcztcbitcdHUzMiBjbWQ7XG4rXG4rXHRjbWQgPSBGSUVMRF9QUkVQKElEUEZfVFhEX0ZMRVhfRkxPV19EVFlQRV9NLFxuK1x0XHRcdCBJRFBGX1RYX0RFU0NfRFRZUEVfRkxFWF9GTE9XX1NDSEUpO1xuK1x0aWYgKGRlc2MuZmxhZ3MgXHUwMDI2IExJQkVUSF9YRFBfVFhfTEFTVClcbitcdFx0Y21kIHw9IElEUEZfVFhEX0ZMRVhfRkxPV19DTURfRU9QO1xuK1x0aWYgKHByaXYgXHUwMDI2XHUwMDI2IChkZXNjLmZsYWdzIFx1MDAyNiBMSUJFVEhfWERQX1RYX0NTVU0pKVxuK1x0XHRjbWQgfD0gSURQRl9UWERfRkxFWF9GTE9XX0NNRF9DU19FTjtcbitcbitcdHR4X2Rlc2MgPSBcdTAwMjZ0eF9kZXNjW2ldO1xuK1x0dHhfZGVzYy1cdTAwM2VidWZfYWRkciA9IGNwdV90b19sZTY0KGRlc2MuYWRkcik7XG4rXG4rI2lmZGVmIF9fTElCRVRIX1dPUkRfQUNDRVNTXG4rXHQqKHU2NCAqKVx1MDAyNnR4X2Rlc2MtXHUwMDNlcXcxID0gKCh1NjQpZGVzYy5sZW4gXHUwMDNjXHUwMDNjIDQ4KSB8ICgodTY0KWkgXHUwMDNjXHUwMDNjIDMyKSB8IGNtZDtcbisjZWxzZVxuK1x0dHhfZGVzYy1cdTAwM2VxdzEucnhyX2J1ZnNpemUgPSBjcHVfdG9fbGUxNihkZXNjLmxlbik7XG4rXHR0eF9kZXNjLVx1MDAzZXF3MS5jb21wbF90YWcgPSBjcHVfdG9fbGUxNihpKTtcbitcdHR4X2Rlc2MtXHUwMDNlcXcxLnRzWzBdID0gMDtcbitcdHR4X2Rlc2MtXHUwMDNlcXcxLnRzWzFdID0gMDtcbitcdHR4X2Rlc2MtXHUwMDNlcXcxLnRzWzJdID0gMDtcbitcdHR4X2Rlc2MtXHUwMDNlcXcxLmNtZF9kdHlwZSA9IGNtZDtcbisjZW5kaWZcbit9XG4rXG4gLyoqXG4gICogaWRwZl94ZHBfdHhfeG1pdCAtIHByb2R1Y2UgYSBzaW5nbGUgSFcgVHggZGVzY3JpcHRvciBvdXQgb2YgWERQIGRlc2NcbiAgKiBAZGVzYzogWERQIGRlc2NyaXB0b3IgdG8gcHVsbCB0aGUgRE1BIGFkZHJlc3MgYW5kIGxlbmd0aCBmcm9tXG5AQCAtMzQsNiArNjYsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwX3R4X3htaXQoc3RydWN0IGxpYmV0aF94ZHBfdHhfZGVzYyBkZXNjLCB1MzIgaSxcbiBcdHN0cnVjdCBpZHBmX2ZsZXhfdHhfZGVzYyAqdHhfZGVzYyA9IHNxLVx1MDAzZWRlc2NzO1xuIFx0dTMyIGNtZDtcbiBcbitcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmlkcGZfeGRwX2ZiKSBcdTAwMjZcdTAwMjZcbitcdCAgICBpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTixcbitcdFx0XHQgICBsaWJldGhfeGRwc3FfdG9fc3Eoc3EsIHN0cnVjdCBpZHBmX3R4X3F1ZXVlLFxuK1x0XHRcdFx0XHQgICAgICBuZXh0X3RvX3VzZSkpKSB7XG4rXHRcdGlkcGZfeGRwX3R4X3htaXRfZmIoZGVzYywgaSwgc3EsIHByaXYpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHRjbWQgPSBGSUVMRF9QUkVQKElEUEZfRkxFWF9UWERfUVcxX0RUWVBFX00sXG4gXHRcdFx0IElEUEZfVFhfREVTQ19EVFlQRV9GTEVYX0wyVEFHMV9MMlRBRzIpO1xuIFx0aWYgKGRlc2MuZmxhZ3MgXHUwMDI2IExJQkVUSF9YRFBfVFhfTEFTVClcbkBAIC01MywxMiArOTMsMzQgQEAgc3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwX3R4X3htaXQoc3RydWN0IGxpYmV0aF94ZHBfdHhfZGVzYyBkZXNjLCB1MzIgaSxcbiAjZW5kaWZcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwc3Ffc2V0X3JzKGNvbnN0IHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp4ZHBzcSlcbitzdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBzcV9zZXRfcnNfZmIoc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxKVxuK3tcbitcdHUzMiBudHUgPSB4ZHBzcS1cdTAwM2VuZXh0X3RvX3VzZTtcbitcdHUzMiBvbGQgPSB4ZHBzcS1cdTAwM2VsYXN0X250dTtcbitcbitcdGlmIChvbGQgXHUwMDNlIG50dSkge1xuK1x0XHRiaXRtYXBfc2V0KHhkcHNxLVx1MDAzZXBlbmRpbmdfbWFzaywgb2xkLCB4ZHBzcS1cdTAwM2VkZXNjX2NvdW50IC0gb2xkKTtcbitcdFx0aWYgKG50dSlcbitcdFx0XHRiaXRtYXBfc2V0KHhkcHNxLVx1MDAzZXBlbmRpbmdfbWFzaywgMCwgbnR1KTtcbitcdH0gZWxzZSB7XG4rXHRcdGJpdG1hcF9zZXQoeGRwc3EtXHUwMDNlcGVuZGluZ19tYXNrLCBvbGQsIG50dSAtIG9sZCk7XG4rXHR9XG4rXG4rXHR4ZHBzcS1cdTAwM2VsYXN0X250dSA9IG50dTtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGlkcGZfeGRwc3Ffc2V0X3JzKHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp4ZHBzcSlcbiB7XG4gXHR1MzIgbnR1LCBjbWQ7XG4gXG4rXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZpZHBmX3hkcF9mYikgXHUwMDI2XHUwMDI2XG4rXHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHhkcHNxKSkge1xuK1x0XHRpZHBmX3hkcHNxX3NldF9yc19mYih4ZHBzcSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbiBcdG50dSA9IHhkcHNxLVx1MDAzZW5leHRfdG9fdXNlO1xuLVx0aWYgKHVubGlrZWx5KCFudHUpKVxuK1x0aWYgKCFudHUpXG4gXHRcdG50dSA9IHhkcHNxLVx1MDAzZWRlc2NfY291bnQ7XG4gXG4gXHRjbWQgPSBGSUVMRF9QUkVQKElEUEZfRkxFWF9UWERfUVcxX0NNRF9NLCBJRFBGX1RYX0RFU0NfQ01EX1JTKTtcbkBAIC04NCw3ICsxNDYsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBzcV91cGRhdGVfdGFpbChjb25zdCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EpXG4gICogU2V0IHRoZSBSUyBiaXQgKFwiZW5kIG9mIGJhdGNoXCIpLCBidW1wIHRoZSB0YWlsLCBhbmQgcXVldWUgdGhlIGNsZWFudXAgdGltZXIuXG4gICogVG8gYmUgY2FsbGVkIGFmdGVyIGEgTkFQSSBwb2xsaW5nIGxvb3AsIGF0IHRoZSBlbmQgb2YgLm5kb194ZHBfeG1pdCgpIGV0Yy5cbiAgKi9cbi1zdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBfdHhfZmluYWxpemUodm9pZCAqX3hkcHNxLCBib29sIHNlbnQsIGJvb2wgZmx1c2gpXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGlkcGZfeGRwX3R4X2ZpbmFsaXplKHZvaWQgKl94ZHBzcSwgYm9vbCBzZW50LFxuK1x0XHRcdFx0XHRcdCBib29sIGZsdXNoKVxuIHtcbiBcdHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp4ZHBzcSA9IF94ZHBzcTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9saWJldGgveGRwLmggYi9pbmNsdWRlL25ldC9saWJldGgveGRwLmhcbmluZGV4IDg5ODcyM2FiNjJlODEuLmVkNjFkODNiZGEyZDcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9saWJldGgveGRwLmhcbisrKyBiL2luY2x1ZGUvbmV0L2xpYmV0aC94ZHAuaFxuQEAgLTQzMCw2ICs0MzAsMTkgQEAgc3RydWN0IGxpYmV0aF94ZHBzcSB7XG4gXHRzdHJ1Y3QgbGliZXRoX3hkcHNxX2xvY2tcdCpsb2NrO1xuIH07XG4gXG4rLyoqXG4rICogbGliZXRoX3hkcHNxX3RvX3NxIC0gZ2V0IFNRIHBvaW50ZXIgZnJvbSBhbiBYRFBTUSBwb2ludGVyXG4rICogQHhkcHNxOiBcdTAwMjZsaWJldGhfeGRwc3EgY29ycmVzcG9uZGluZyB0byB0aGUgcXVldWVcbisgKiBAdHlwZTogdHlwZW9mKCkgb2YgdGhlIGRyaXZlciBUeCBxdWV1ZSBzdHJ1Y3R1cmVcbisgKiBAbWVtYmVyOiBuYW1lIG9mIHRoZSBOVFUgZmllbGQgaW5zaWRlIEB0eXBlXG4rICpcbisgKiBTb21lIG9mIHRoZSBzZW5kaW5nIGNhbGxiYWNrcyB0YWtlIG9ubHkgXHUwMDI2bGliZXRoX3hkcHNxIHBvaW50ZXIgYW5kIG5vIHBvaW50ZXJcbisgKiB0byB0aGUgYWN0dWFsIGRyaXZlciBUeCBxdWV1ZSBzdHJ1Y3R1cmUuIFVzZSB0aGlzIGhlbHBlciB0byBxdWlja2x5IGp1bXAgdG9cbisgKiB0aGUgbGF0dGVyIHdoZW4gbmVlZGVkLlxuKyAqL1xuKyNkZWZpbmUgbGliZXRoX3hkcHNxX3RvX3NxKHhkcHNxLCB0eXBlLCBtZW1iZXIpXHRcdFx0XHQgICAgICBcXFxuK1x0Y29udGFpbmVyX29mX2NvbnN0KCh4ZHBzcSktXHUwMDNlbnR1LCB0eXBlLCBtZW1iZXIpXG4rXG4gLyoqXG4gICogc3RydWN0IGxpYmV0aF94ZHBfdHhfZGVzYyAtIGFic3RyYWN0aW9uIGZvciBhbiBYRFAgVHggZGVzY3JpcHRvclxuICAqIEBhZGRyOiBETUEgYWRkcmVzcyBvZiB0aGUgZnJhbWVcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjA2OjAyLjA5MjcwODU1N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwMTkyODYzNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBgaWRwZmAgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgZm9yIHRoZSBgaWRwZmAgZHJpdmVyIOKAkyBJbnRlbCdzIEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbi4gSXQncyBhZGRpbmcgWERQIFR4IHN1cHBvcnQgaW4gRklGTyBtb2RlLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhlIGNoYW5nZXMgYXJlIHNwcmVhZCBhY3Jvc3MgdGhlIHVzdWFsIHN1c3BlY3RzOiBoZWFkZXJzLCB0aGUgY29yZSBUWC9SWCBjb2RlLCBhbmQgWERQLXJlbGF0ZWQgZmlsZXMuIE5vdGhpbmcgdG9vIHN1cnByaXNpbmcgb24gdGhlIHN1cmZhY2UuXG5cbk15IGZpcnN0IHRob3VnaHQsIGFuZCBhIGNyaXRpY2FsIG9uZSBnaXZlbiBteSBleHBlcmllbmNlLCBpcyBhYm91dCB0aGUgZW52aXJvbm1lbnQuIENhbiBJIGFjdHVhbGx5ICp0ZXN0KiB0aGlzPyBgaWRwZmAsIHJpZ2h0PyBUaGF0J3MgYW4gSW50ZWwgSVBVIHRoaW5nLiBOb3csIGlzIHRoaXMgYSBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXIsIG9yIGlzIHRoZXJlIHNvbWUgbGV2ZWwgb2YgdmlydHVhbGl6YXRpb24gb3IgZW11bGF0aW9uPyBNeSBpbW1lZGlhdGUgc3VzcGljaW9uLCBnaXZlbiB0aGF0IHRoaXMgaXMgYW4gSW50ZWwgTklDIGRyaXZlciwgaXMgdGhhdCBpdCdzIGdvaW5nIHRvIG5lZWQgcmVhbCBoYXJkd2FyZSB0byBtZWFuaW5nZnVsbHkgdGVzdC4gSSBrbm93IGhvdyBmdXNzeSB0aGVzZSBkcml2ZXJzIGNhbiBiZS4gVGhleSBvZnRlbiBkZXBlbmQgb24gdmVyeSBzcGVjaWZpYyBQQ0llIGNvbmZpZ3VyYXRpb25zLlxuXG5BaCwgeWVzLCBgaWRwZmAgaXMgYSBQQ0llIGRldmljZSwgYSBTbWFydE5JQy4gU28sIHRoZSBxdWVzdGlvbiBpcywgZG9lcyBRRU1VLCB0aGUgc3RhbmRhcmQgZW11bGF0b3IsIGhhdmUgYSBkZWNlbnQgZW11bGF0aW9uIGZvciB0aGlzPyBQcm9iYWJseSBub3QuIEkndmUgd29ya2VkIHdpdGggSW50ZWwgTklDIGRyaXZlcnMgYmVmb3JlLCBhbmQgdGhleSdyZSByYXJlbHkgZnVsbHkgZW11bGF0ZWQuIE15IGV4cGVyaWVuY2Ugc3VnZ2VzdHMgdGhhdCB0aGlzIGlzIGdvaW5nIHRvIGZhbGwgaW50byB0aGF0IGNhdGVnb3J5IG9mIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMuXG5cbkxldCBtZSBjb25maXJtIHRoYXQgYnkgcXVpY2tseSBzZWFyY2hpbmcgdGhlIGtlcm5lbCB0cmVlLiBUaGUgcHJvbXB0IG1lbnRpb25lZCBhIGxpc3Qgb2Ygc2ltaWxhciBkcml2ZXJzLiBJdCBzZWVtcyBsaWtlIHRoaXMgYGlkcGZgIGlzIGRlZmluaXRlbHkgaW4gdGhlIHNhbWUgY2F0ZWdvcnkgYXMgdGhvc2UgZHJpdmVycywgYW5kIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgaXQncyBub3QgZW11bGF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MDAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODowNjowOS4xMTE5OTk0MjFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE5MDgxNzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElEUEZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZy0zLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZzo0OmNvbmZpZyBJRFBGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnLTUtXFx0dHJpc3RhdGUgXFxcIkludGVsKFIpIEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbiBTdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnPTE4PWlmIElEUEZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWctMTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnOjIwOmNvbmZpZyBJRFBGX1NJTkdMRVFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWctMjEtXFx0Ym9vbCBcXFwiaWRwZiBzaW5nbGVxIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE4OjA2OjA5LjE4MzkxNjI0NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMTQ2MTI3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBJbnRlbCBJRFBGIEVtdWxhdGlvbioqXG5cbk9rYXksIHNvIFwiSW50ZWwoUikgSW5mcmFzdHJ1Y3R1cmUgRGF0YSBQYXRoIEZ1bmN0aW9uIFN1cHBvcnRcIiDigJMgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiSXMgdGhpcyBhIFNtYXJ0TklDIHRoaW5nP1wiIFllcywgSW50ZWwgSVBVcyAqYXJlKiBTbWFydE5JQ3MsIHNvIHRoYXQgY2hlY2tzIG91dC4gVGhlIG5leHQgcXVlc3Rpb24gaXMgZW11bGF0aW9uLiBDYW4gSSBzcGluIHRoaXMgdXAgaW4gUUVNVT8gSG1tLCBubywgdGhlcmUgaXNuJ3QgYW55IHN0YW5kYXJkIFFFTVUgZW11bGF0aW9uIGZvciBJbnRlbCBJRFBGLCBvciBhdCBsZWFzdCwgSSdtIG5vdCBhd2FyZSBvZiBhbnkgb2ZmIHRoZSB0b3Agb2YgbXkgaGVhZC5cblxuTGV0J3MgZG8gYSBxdWljayBtZW50YWwgY2hlY2suIEknZCB0eXBpY2FsbHkgd2FudCB0byBjaGVjayB0aGUgUUVNVSBzb3VyY2UgZm9yIFwiaWRwZixcIiBidXQgSSBkb24ndCBoYXZlIHRoYXQgbG9jYWxseS4gRXZlbiB3aXRob3V0IHRoZSBzb3VyY2UsIG15IGd1dCBzYXlzIFwiaWRwZlwiIGlzIGdvaW5nIHRvIGJlIGhhcmR3YXJlLXNwZWNpZmljLCBsaWtlbHkgYSBkcml2ZXIuIEkgc2hvdWxkIGNoZWNrIHRoZSBleGFtcGxlczogXCJtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdVwiIOKAkyBub3QgZXhwbGljaXRseSBJRFBGIGJ1dCBjbGVhcmx5IHdpdGhpbiB0aGUgcmVhbG0gb2YgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlcnMuIEdvb2QuXG5cblRoZSBrZXkgaGVyZSBpcyB2ZXJpZmljYXRpb24uIFRvIGJlIGNlcnRhaW4sIGNhbiBJIGV2ZW4gcmVhY2ggSURQRiBpbiB0aGUgZmlyc3QgcGxhY2U/IElmIGl0J3MgYSBQQ0llIGRyaXZlciB0aGF0IG1hbmFnZXMgdGhlIEludGVsIElQVSwgdGhlbiBpdCBwcmV0dHkgbXVjaCAqcmVxdWlyZXMqIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSB0byBmdW5jdGlvbi4gU28sIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aG91Z2h0LlxuXG5MZXQncyBsb29rIGF0IHRoZSBkcml2ZXIgc291cmNlIGNvZGUgLSBzcGVjaWZpY2FsbHksIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jYCAtIHRoYXQgc2hvdWxkIGJlIGEgUENJIGRyaXZlci4gVGhhdCB3aWxsIHRlbGwgbWUgZXZlcnl0aGluZyB0aGF0IEkgbmVlZCB0byBrbm93IGFib3V0IHRoZSByZXF1aXJlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MzMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MDY6MTUuNDk4NTMyMDcxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMTMyMTMxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2lfcmVnaXN0ZXJfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODowNjoxNS41ODk2NzIxNDFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDM3NDYyNDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqUENJIERyaXZlciBSZWdpc3RyYXRpb24gQ2hlY2sqKlxuXG5Pa2F5LCBsZXQgbWUgcXVpY2tseSB0aGluayB0aGlzIHRocm91Z2guIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBJJ20gcHJldHR5IHN1cmUgSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgZHJpdmVyIHdvdWxkIGJlIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBrZXJuZWwuIE15IGluc3RpbmN0IGlzIHRlbGxpbmcgbWUgdGhhdCwgaWYgaXQncyBhIFBDSSBkZXZpY2UsIHRoZXJlJ3MgYSBzdHJvbmcgY2hhbmNlIGl0J3MgZ29pbmcgdG8gbGV2ZXJhZ2Ugb25lIG9mIHRoZSBzdGFuZGFyZCBQQ0kgZHJpdmVyIHJlZ2lzdHJhdGlvbiBtZWNoYW5pc21zLiBUaGF0IHdvdWxkIGxpa2VseSBiZSBlaXRoZXIgYHBjaV9yZWdpc3Rlcl9kcml2ZXJgIG9yIHRoZSBtYWNybyBgbW9kdWxlX3BjaV9kcml2ZXJgLiBJIG5lZWQgdG8gbG9vayBjbG9zZXIgdG8gY29uZmlybSB3aGljaCBvbmUsIG9yIGlmIHRoZXkgYXJlIGhhbmRsaW5nIHRoZSByZWdpc3RyYXRpb24gaW4gYSBtb3JlIGN1c3RvbSB3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDUwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MDY6MTkuMDI3MTM3OTE2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MTIzMzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV9wY2lfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmM9Mzc1PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpZHBmX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmMtMzgyLX07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYzozODM6bW9kdWxlX3BjaV9kcml2ZXIoaWRwZl9kcml2ZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODowNjoxOS4wOTQyNjY4MjlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjc2MjgyNDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IE5vdCBXb3J0aCBGdXp6aW5nIGluIGEgVmlydHVhbCBFbnZpcm9ubWVudCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gWWVwLCB0aGlzIGlzIGRlZmluaXRlbHkgYSBQQ0kgZHJpdmVyIOKAkyB0aGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGl0J3Mgc3BlY2lmaWNhbGx5IGZvciBhbiBJbnRlbCBJbmZyYXN0cnVjdHVyZSBEYXRhIFBhdGggRnVuY3Rpb24uIFRyYW5zbGF0aW9uOiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBTbWFydE5JQyBvciBJUFUuIEFuZCB0aGF0IG1lYW5zICpwaHlzaWNhbCogaGFyZHdhcmUgaXMgYWJzb2x1dGVseSBlc3NlbnRpYWwuIFdlJ3JlIHRhbGtpbmcgZGVkaWNhdGVkIHNpbGljb24sIGN1c3RvbSBoYXJkd2FyZSBpbnRlcmFjdGlvbi4gR2l2ZW4gdGhpcyBzZXR1cCwgYXR0ZW1wdGluZyB0byBmdXp6IHRoaXMgZHJpdmVyIHdpdGhpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQgaXMgYSBub24tc3RhcnRlci4gVGhlIHZpcnR1YWxpemVkIGhhcmR3YXJlIGp1c3QgaXNuJ3QgZ29pbmcgdG8gY3V0IGl0LiBUaGVyZWZvcmUsIEnigJltIGdvaW5nIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIGV4cGxhbmF0aW9uIGlzIHNpbXBsZTogdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlciB0aGF0J3MgZnVuZGFtZW50YWxseSBkZXBlbmRlbnQgb24gcGh5c2ljYWwgaGFyZHdhcmUgZm9yIGFueSBtZWFuaW5nZnVsIHRlc3RpbmcuIE5vIHdheSBhcm91bmQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzYxLCJPdXRwdXRUb2tlbnMiOjg3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTg6MDY6MjMuMzcwNTUxNjU3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbiAoaWRwZikgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIFNtYXJ0TklDL0lQVSBkcml2ZXIuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIG1ha2luZyBpdCB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBJbmZyYXN0cnVjdHVyZSBEYXRhIFBhdGggRnVuY3Rpb24gKGlkcGYpIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBTbWFydE5JQy9JUFUgZHJpdmVyLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBtYWtpbmcgaXQgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxODowNjoyMy4zNzA1ODQ2NDdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowjjhjs[1] Phase: Running StartedAt: 2026-08-18 18:06:34 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjjhjs[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-18 18:06:34 +0000 UTC FinishedAt: 2026-08-18 18:06:38 +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,}