Name: series-workflow5k2rf Phase: Failed StartedAt: 2026-07-01 18:26:58 +0000 UTC FinishedAt: 2026-07-01 18:41:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5k2rf[0] Phase: Succeeded StartedAt: 2026-07-01 18:26:58 +0000 UTC FinishedAt: 2026-07-01 18:40:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5k2rf[0].run-triage Phase: Succeeded StartedAt: 2026-07-01 18:26:58 +0000 UTC FinishedAt: 2026-07-01 18:40:47 +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+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBpcyBhIHRyZWUtd2lkZSBBUEkgcmVmYWN0b3JpbmcgdGhhdCByZW1vdmVzIHRoZSByZWR1bmRhbnQgJiMzOTtleGNsJiMzOTsgYXJndW1lbnQgZnJvbSB0aGUgJiMzOTtjcmVhdGUmIzM5OyBpbm9kZSBvcGVyYXRpb24uIFZGUyBwcmV2aW91c2x5IHBhc3NlZCAmIzM5O3RydWUmIzM5OyBmcm9tIHZmc19jcmVhdGUoKSBhbmQgJiMzOTtvcGVuX2ZsYWcgXHUwMDI2IE9fRVhDTCYjMzk7IGZyb20gbG9va3VwX29wZW4oKS4gSG93ZXZlciwgZm9yIGxvY2FsIGZpbGVzeXN0ZW1zLCBWRlMgaG9sZHMgdGhlIGlub2RlX2xvY2sgZHVyaW5nIGNyZWF0ZSwgbWFraW5nIGNvbmN1cnJlbnQgY3JlYXRpb24gaW1wb3NzaWJsZSBhbmQgdGhlICYjMzk7ZXhjbCYjMzk7IGFyZ3VtZW50IHJlZHVuZGFudC4gRm9yIG5ldHdvcmsgZmlsZXN5c3RlbXMsIG5vbi1leGNsdXNpdmUgY3JlYXRlcyBhcmUgaGFuZGxlZCB2aWEgYXRvbWljX29wZW4oKS4gVGhlIGZpbGVzeXN0ZW1zIHRoYXQgdXNlZCB0aGUgYXJndW1lbnQgaW50ZXJuYWxseSAobGlrZSBnZnMyLCBuZnMsIHZib3hzZikgbm93IGhhcmRjb2RlICYjMzk7dHJ1ZSYjMzk7IG9yICYjMzk7T19FWENMJiMzOTssIHdoaWNoIGV4YWN0bHkgbWF0Y2hlcyB0aGUgcHJldmlvdXMgYmVoYXZpb3Igd2hlbiBjYWxsZWQgZnJvbSB2ZnNfY3JlYXRlLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDA0MmRkZWNmM2NlZDIwNzc3YmU1Mzg3NGQxZDlhMDMzN2ZiNDJiOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMTg6Mzg6MTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3RcbmluZGV4IGQxM2YwYTIzYzg4MmZjLi4wMjUyMmZiZmQ5Njg2ZiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3RcbkBAIC0xNDAxLDMgJiM0MzsxNDAxLDExIEBAIGFzIHdpdGggZF9kaXNwb3NlX2lmX3VudXNlZCgpIHRoZXNlIGFyZSBub3QgdHJpdmlhbDsgd2l0aCB0aGlzIHZhcmlhbnRcbiBvZiBBUEkgaXQmIzM5O3MgbW9yZSBleHBsaWNpdCwgc2luY2UgZ3JhYmJpbmcgLVx1MDAzZWRfbG9jayBpcyBjYWxsZXItc2lkZSwgYnV0XG4gZF9kaXNwb3NlX2lmX3VudXNlZCgpIGhhZCBhbGwgdGhlIHNhbWUgaXNzdWVzLiAgSXQmIzM5O3MgYSBsb3ctbGV2ZWwgcHJpbWl0aXZlO1xuIHVzZSBvbmx5IGlmIHlvdSBoYXZlIG5vIGFsdGVybmF0aXZlLlxuJiM0MztcbiYjNDM7LS0tXG4mIzQzO1xuJiM0MzsqKm1hbmRhdG9yeSoqXG4mIzQzO1xuJiM0MztUaGUgLmNyZWF0ZSBpbm9kZV9vcGVyYXRpb24gbm8gbG9uZ2VyIHJlY2VpdmVzIHRoZSAmIzM5O2V4Y2wmIzM5OyBhcmcuICBJdCBtdXN0XG4mIzQzO2Fsd2F5cyBhc3N1bWUgdGhlIGZpbGUgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4gIElmIHRoZSBmaWxlc3lzdGVtIG5lZWRzXG4mIzQzO3RvIGJlIGludm9sdmVkIGluIG5vbi1leGNsdXNpdmUgY3JlYXRlLCBpdCBzaG91bGQgcHJvdmlkZSBhdG9taWNfb3Blbi5cbmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGUuYyBiL2ZzLzlwL3Zmc19pbm9kZS5jXG5pbmRleCA1NzgzZDAzMzZmOTZhYy4uZTQ3YjkwZTcwODM3NjggMTAwNjQ0XG4tLS0gYS9mcy85cC92ZnNfaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvOXAvdmZzX2lub2RlLmNcbkBAIC02NDUsNyAmIzQzOzY0NSw2IEBAIHY5ZnNfY3JlYXRlKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMsIHN0cnVjdCBpbm9kZSAqZGlyLFxuICAqIEBkaXI6IFRoZSBwYXJlbnQgZGlyZWN0b3J5XG4gICogQGRlbnRyeTogVGhlIG5hbWUgb2YgZmlsZSB0byBiZSBjcmVhdGVkXG4gICogQG1vZGU6IFRoZSBVTklYIGZpbGUgbW9kZSB0byBzZXRcbi0gKiBAZXhjbDogVHJ1ZSBpZiB0aGUgZmlsZSBtdXN0IG5vdCB5ZXQgZXhpc3RcbiAgKlxuICAqIG9wZW4oLi4sIE9fQ1JFQVQpIGlzIGhhbmRsZWQgaW4gdjlmc192ZnNfYXRvbWljX29wZW4oKS4gIFRoaXMgaXMgb25seSBjYWxsZWRcbiAgKiBmb3IgbWtub2QoMikuXG5AQCAtNjU0LDcgJiM0Mzs2NTMsNyBAQCB2OWZzX2NyZWF0ZShzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcbiBzdGF0aWMgaW50XG4gdjlmc192ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGRpcik7XG4gXHR1MzIgcGVybSA9IHVuaXhtb2RlMnA5bW9kZSh2OXNlcywgbW9kZSk7XG5kaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlX2RvdGwuYyBiL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmNcbmluZGV4IGY3Mzk2ZDIwY2I2Y2RjLi5kMTdjM2I2ZWViYjIyZCAxMDA2NDRcbi0tLSBhL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmNcbkBAIC0yMTMsMTIgJiM0MzsyMTMsMTEgQEAgaW50IHY5ZnNfb3Blbl90b19kb3RsX2ZsYWdzKGludCBmbGFncylcbiAgKiBAZGlyOiBkaXJlY3RvcnkgaW5vZGUgdGhhdCBpcyBiZWluZyBjcmVhdGVkXG4gICogQGRlbnRyeTogIGRlbnRyeSB0aGF0IGlzIGJlaW5nIGRlbGV0ZWRcbiAgKiBAb21vZGU6IGNyZWF0ZSBwZXJtaXNzaW9uc1xuLSAqIEBleGNsOiBUcnVlIGlmIHRoZSBmaWxlIG11c3Qgbm90IHlldCBleGlzdFxuICAqXG4gICovXG4gc3RhdGljIGludFxuIHY5ZnNfdmZzX2NyZWF0ZV9kb3RsKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3Qgb21vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG9tb2RlKVxuIHtcbiBcdHJldHVybiB2OWZzX3Zmc19ta25vZF9kb3RsKGlkbWFwLCBkaXIsIGRlbnRyeSwgb21vZGUsIDApO1xuIH1cbmRpZmYgLS1naXQgYS9mcy9hZmZzL2FmZnMuaCBiL2ZzL2FmZnMvYWZmcy5oXG5pbmRleCA0NGEzZjY5ZDI3NWY5Ni4uZDZiMzM5MzYzM2YyZDkgMTAwNjQ0XG4tLS0gYS9mcy9hZmZzL2FmZnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZmcy9hZmZzLmhcbkBAIC0xNjksNyAmIzQzOzE2OSw3IEBAIGV4dGVybiBpbnRcdGFmZnNfaGFzaF9uYW1lKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHU4ICpuYW1lLCB1bnNpZ25lZCBpbnQgbFxuIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICphZmZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bnNpZ25lZCBpbnQpO1xuIGV4dGVybiBpbnRcdGFmZnNfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuIGV4dGVybiBpbnRcdGFmZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCk7XG4mIzQzO1x0XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbiBleHRlcm4gc3RydWN0IGRlbnRyeSAqYWZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xuIGV4dGVybiBpbnRcdGFmZnNfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9uYW1laS5jIGIvZnMvYWZmcy9uYW1laS5jXG5pbmRleCBjM2M2NTMyZGE0YjBkYS4uYjAwMDEwODQ3MjdhNWQgMTAwNjQ0XG4tLS0gYS9mcy9hZmZzL25hbWVpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2FmZnMvbmFtZWkuY1xuQEAgLTI0Myw3ICYjNDM7MjQzLDcgQEAgYWZmc191bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcbiBpbnRcbiBhZmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHQgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHQgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRpci1cdTAwM2VpX3NiO1xuIFx0c3RydWN0IGlub2RlXHQqaW5vZGU7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpci5jIGIvZnMvYWZzL2Rpci5jXG5pbmRleCA0OThiOTljY2RmMGUyNy4uNjZjYzMzMzJlZjMxOWEgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9kaXIuY1xuQEAgLTMyLDcgJiM0MzszMiw3IEBAIHN0YXRpYyBib29sIGFmc19sb29rdXBfb25lX2ZpbGxkaXIoc3RydWN0IGRpcl9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsIGluXG4gc3RhdGljIGJvb2wgYWZzX2xvb2t1cF9maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmxlbixcbiBcdFx0XHQgICAgICBsb2ZmX3QgZnBvcywgdTY0IGlubywgdW5zaWduZWQgZHR5cGUpO1xuIHN0YXRpYyBpbnQgYWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpO1xuJiM0MztcdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xuIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xuIHN0YXRpYyBpbnQgYWZzX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuQEAgLTE2MjMsNyAmIzQzOzE2MjMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFmc19vcGVyYXRpb25fb3BzIGFmc19jcmVhdGVfb3BlcmF0aW9uID0ge1xuICAqIGNyZWF0ZSBhIHJlZ3VsYXIgZmlsZSBvbiBhbiBBRlMgZmlsZXN5c3RlbVxuICAqL1xuIHN0YXRpYyBpbnQgYWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG4mIzQzO1x0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3A7XG4gXHRzdHJ1Y3QgYWZzX3Zub2RlICpkdm5vZGUgPSBBRlNfRlNfSShkaXIpO1xuZGlmZiAtLWdpdCBhL2ZzL2JhZF9pbm9kZS5jIGIvZnMvYmFkX2lub2RlLmNcbmluZGV4IGFjZjg2MTNmNWUzNjhlLi40ODZjNDBmNzNlNTFlMCAxMDA2NDRcbi0tLSBhL2ZzL2JhZF9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9iYWRfaW5vZGUuY1xuQEAgLTI5LDcgJiM0MzsyOSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJhZF9maWxlX29wcyA9XG4gXG4gc3RhdGljIGludCBiYWRfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdCAgICB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdFx0ICAgIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRyZXR1cm4gLUVJTztcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvYmZzL2Rpci5jIGIvZnMvYmZzL2Rpci5jXG5pbmRleCA1YjQwYWIwOWE3OTZkZS4uNGMzYjRkYjA4Y2RlZmMgMTAwNjQ0XG4tLS0gYS9mcy9iZnMvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Jmcy9kaXIuY1xuQEAgLTgzLDcgJiM0Mzs4Myw3IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmZzX2Rpcl9vcGVyYXRpb25zID0ge1xuIH07XG4gXG4gc3RhdGljIGludCBiZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdGludCBlcnI7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2lub2RlLmMgYi9mcy9idHJmcy9pbm9kZS5jXG5pbmRleCAyNzI1OThmNmFlNzdhZi4uMjJjMGEwZTI0MWU1MzMgMTAwNjQ0XG4tLS0gYS9mcy9idHJmcy9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9idHJmcy9pbm9kZS5jXG5AQCAtNjgzMiw3ICYjNDM7NjgzMiw3IEBAIHN0YXRpYyBpbnQgYnRyZnNfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIH1cbiBcbiBzdGF0aWMgaW50IGJ0cmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbiBcbmRpZmYgLS1naXQgYS9mcy9jZXBoL2Rpci5jIGIvZnMvY2VwaC9kaXIuY1xuaW5kZXggMjdjZTllNTVlOTQ3NjguLmRlZTQ1MjRjMjMzNjIzIDEwMDY0NFxuLS0tIGEvZnMvY2VwaC9kaXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvY2VwaC9kaXIuY1xuQEAgLTk3OCw3ICYjNDM7OTc4LDcgQEAgc3RhdGljIGludCBjZXBoX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiB9XG4gXG4gc3RhdGljIGludCBjZXBoX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuJiM0MztcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdHJldHVybiBjZXBoX21rbm9kKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgMCk7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL2NvZGEvZGlyLmMgYi9mcy9jb2RhL2Rpci5jXG5pbmRleCA4MzVlYjdmZGZkYWQwMC4uZWE3MTBhNWRiYmI3NGIgMTAwNjQ0XG4tLS0gYS9mcy9jb2RhL2Rpci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9jb2RhL2Rpci5jXG5AQCAtMTM0LDcgJiM0MzsxMzQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY29kYV9kaXJfZHJvcF9ubGluayhzdHJ1Y3QgaW5vZGUgKmRpcilcbiBcbiAvKiBjcmVhdGlvbiByb3V0aW5lczogY3JlYXRlLCBta25vZCwgbWtkaXIsIGxpbmssIHN5bWxpbmsgKi9cbiBzdGF0aWMgaW50IGNvZGFfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlLCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdGludCBlcnJvcjtcbiBcdGNvbnN0IGNoYXIgKm5hbWU9ZGUtXHUwMDNlZF9uYW1lLm5hbWU7XG5kaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvaW5vZGUuYyBiL2ZzL2VjcnlwdGZzL2lub2RlLmNcbmluZGV4IDdhYWYxOTEzZjljNmQzLi41MjUyOTdjN2ViZDhjNCAxMDA2NDRcbi0tLSBhL2ZzL2VjcnlwdGZzL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2VjcnlwdGZzL2lub2RlLmNcbkBAIC0yNjgsNyAmIzQzOzI2OCw3IEBAIGludCBlY3J5cHRmc19pbml0aWFsaXplX2ZpbGUoc3RydWN0IGRlbnRyeSAqZWNyeXB0ZnNfZGVudHJ5LFxuIHN0YXRpYyBpbnRcbiBlY3J5cHRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdHN0cnVjdCBpbm9kZSAqZGlyZWN0b3J5X2lub2RlLCBzdHJ1Y3QgZGVudHJ5ICplY3J5cHRmc19kZW50cnksXG4tXHRcdHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuJiM0MztcdFx0dW1vZGVfdCBtb2RlKVxuIHtcbiBcdHN0cnVjdCBpbm9kZSAqZWNyeXB0ZnNfaW5vZGU7XG4gXHRpbnQgcmM7XG5kaWZmIC0tZ2l0IGEvZnMvZWZpdmFyZnMvaW5vZGUuYyBiL2ZzL2VmaXZhcmZzL2lub2RlLmNcbmluZGV4IDk1ZGNhZDgzZGExMWJlLi5mMGQwMDk1NTVmYzY2MCAxMDA2NDRcbi0tLSBhL2ZzL2VmaXZhcmZzL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2VmaXZhcmZzL2lub2RlLmNcbkBAIC03NSw3ICYjNDM7NzUsNyBAQCBzdGF0aWMgYm9vbCBlZml2YXJmc192YWxpZF9uYW1lKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbilcbiB9XG4gXG4gc3RhdGljIGludCBlZml2YXJmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMO1xuIFx0c3RydWN0IGVmaXZhcl9lbnRyeSAqdmFyO1xuZGlmZiAtLWdpdCBhL2ZzL2V4ZmF0L25hbWVpLmMgYi9mcy9leGZhdC9uYW1laS5jXG5pbmRleCBiN2Q1ZTQ0YWQzOGVlZS4uY2Q5YzllY2E1OGY4NmUgMTAwNjQ0XG4tLS0gYS9mcy9leGZhdC9uYW1laS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leGZhdC9uYW1laS5jXG5AQCAtNTM4LDcgJiM0Mzs1MzgsNyBAQCBzdGF0aWMgaW50IGV4ZmF0X2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpwYXRoLFxuIH1cbiBcbiBzdGF0aWMgaW50IGV4ZmF0X2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRpci1cdTAwM2VpX3NiO1xuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbmRpZmYgLS1naXQgYS9mcy9leHQyL25hbWVpLmMgYi9mcy9leHQyL25hbWVpLmNcbmluZGV4IDBkMDlkMjJmZTcwODYyLi43NDJhNzhlMTY1ZDQ4ZSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDIvbmFtZWkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0Mi9uYW1laS5jXG5AQCAtOTksNyAmIzQzOzk5LDcgQEAgc3RydWN0IGRlbnRyeSAqZXh0Ml9nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxuICAqL1xuIHN0YXRpYyBpbnQgZXh0Ml9jcmVhdGUgKHN0cnVjdCBtbnRfaWRtYXAgKiBpZG1hcCxcbiBcdFx0XHRzdHJ1Y3QgaW5vZGUgKiBkaXIsIHN0cnVjdCBkZW50cnkgKiBkZW50cnksXG4tXHRcdFx0dW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG4mIzQzO1x0XHRcdHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuIFx0aW50IGVycjtcbmRpZmYgLS1naXQgYS9mcy9leHQ0L25hbWVpLmMgYi9mcy9leHQ0L25hbWVpLmNcbmluZGV4IGNjNDlhZTA0YTZmNjQ5Li5jM2RlNjRkMmEyZGYyMCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvbmFtZWkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9uYW1laS5jXG5AQCAtMjgxMSw3ICYjNDM7MjgxMSw3IEBAIHN0YXRpYyBpbnQgZXh0NF9hZGRfbm9uZGlyKGhhbmRsZV90ICpoYW5kbGUsXG4gICogd2l0aCBkX2luc3RhbnRpYXRlKCkuXG4gICovXG4gc3RhdGljIGludCBleHQ0X2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuJiM0MztcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdGhhbmRsZV90ICpoYW5kbGU7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuZGlmZiAtLWdpdCBhL2ZzL2YyZnMvbmFtZWkuYyBiL2ZzL2YyZnMvbmFtZWkuY1xuaW5kZXggY2FjMDNiOGU5MWExNWUuLjY0ODY4MWM1YmE1MDE2IDEwMDY0NFxuLS0tIGEvZnMvZjJmcy9uYW1laS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9mMmZzL25hbWVpLmNcbkBAIC0zNjYsNyAmIzQzOzM2Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmYyZnNfbmV3X2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIH1cbiBcbiBzdGF0aWMgaW50IGYyZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG4mIzQzO1x0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpID0gRjJGU19JX1NCKGRpcik7XG4gXHRzdHJ1Y3QgZjJmc19sb2NrX2NvbnRleHQgbGM7XG5kaWZmIC0tZ2l0IGEvZnMvZmF0L25hbWVpX21zZG9zLmMgYi9mcy9mYXQvbmFtZWlfbXNkb3MuY1xuaW5kZXggMGZkMjk3MWFkNGIxMzEuLjlmMmEyZTlhOWNlOGVhIDEwMDY0NFxuLS0tIGEvZnMvZmF0L25hbWVpX21zZG9zLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZhdC9uYW1laV9tc2Rvcy5jXG5AQCAtMjYyLDcgJiM0MzsyNjIsNyBAQCBzdGF0aWMgaW50IG1zZG9zX2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSxcbiBcbiAvKioqKiogQ3JlYXRlIGEgZmlsZSAqL1xuIHN0YXRpYyBpbnQgbXNkb3NfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuJiM0MztcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGlyLVx1MDAzZWlfc2I7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDtcbmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfdmZhdC5jIGIvZnMvZmF0L25hbWVpX3ZmYXQuY1xuaW5kZXggZTkwOTQ0Nzg3M2UzNjQuLjEzOWQzZWY0YmZhZWI4IDEwMDY0NFxuLS0tIGEvZnMvZmF0L25hbWVpX3ZmYXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L25hbWVpX3ZmYXQuY1xuQEAgLTc1NSw3ICYjNDM7NzU1LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKnZmYXRfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gfVxuIFxuIHN0YXRpYyBpbnQgdmZhdF9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGlyLVx1MDAzZWlfc2I7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZGlyLmMgYi9mcy9mdXNlL2Rpci5jXG5pbmRleCAwZTJhMTAzOWZhNDNlYS4uMGVmYjMxNDFmN2Y3MGEgMTAwNjQ0XG4tLS0gYS9mcy9mdXNlL2Rpci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9mdXNlL2Rpci5jXG5AQCAtMTA4NCw3ICYjNDM7MTA4NCw3IEBAIHN0YXRpYyBpbnQgZnVzZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gfVxuIFxuIHN0YXRpYyBpbnQgZnVzZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuJiM0MztcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0cmV0dXJuIGZ1c2VfbWtub2QoaWRtYXAsIGRpciwgZW50cnksIG1vZGUsIDApO1xuIH1cbmRpZmYgLS1naXQgYS9mcy9nZnMyL2lub2RlLmMgYi9mcy9nZnMyL2lub2RlLmNcbmluZGV4IDhhNzc3OTRiYmQ0YWZjLi45ZTIzYzhkNTU5NjIzZCAxMDA2NDRcbi0tLSBhL2ZzL2dmczIvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZ2ZzMi9pbm9kZS5jXG5AQCAtOTY5LDkgJiM0Mzs5NjksOSBAQCBzdGF0aWMgaW50IGdmczJfY3JlYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gICovXG4gXG4gc3RhdGljIGludCBnZnMyX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuJiM0MztcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbi1cdHJldHVybiBnZnMyX2NyZWF0ZV9pbm9kZShkaXIsIGRlbnRyeSwgTlVMTCwgU19JRlJFRyB8IG1vZGUsIDAsIE5VTEwsIDAsIGV4Y2wpO1xuJiM0MztcdHJldHVybiBnZnMyX2NyZWF0ZV9pbm9kZShkaXIsIGRlbnRyeSwgTlVMTCwgU19JRlJFRyB8IG1vZGUsIDAsIE5VTEwsIDAsIDEpO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9mcy9oZnMvZGlyLmMgYi9mcy9oZnMvZGlyLmNcbmluZGV4IGUxMzQ1MGJiOTMzZWJkLi45M2VkYzVhODBjODEzZCAxMDA2NDRcbi0tLSBhL2ZzL2hmcy9kaXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzL2Rpci5jXG5AQCAtMTg0LDcgJiM0MzsxODQsNyBAQCBzdGF0aWMgaW50IGhmc19kaXJfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiAgKiB0aGUgZGlyZWN0b3J5IGFuZCB0aGUgbmFtZSAoYW5kIGl0cyBsZW5ndGgpIG9mIHRoZSBuZXcgZmlsZS5cbiAgKi9cbiBzdGF0aWMgaW50IGhmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuJiM0MztcdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbiBcdGludCByZXM7XG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9kaXIuYyBiL2ZzL2hmc3BsdXMvZGlyLmNcbmluZGV4IDhiZjZjN2NkZDlhODY1Li5mMGFhZTJjZDZmY2ZkYyAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvZGlyLmNcbkBAIC01NjIsNyAmIzQzOzU2Miw3IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gfVxuIFxuIHN0YXRpYyBpbnQgaGZzcGx1c19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRyZXR1cm4gaGZzcGx1c19ta25vZChcdTAwMjZub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgMCk7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jIGIvZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmNcbmluZGV4IGFiZTg2ZDcyZDllZjc1Li43YWRkMDU2ZDQ3ZDhmMCAxMDA2NDRcbi0tLSBhL2ZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uY1xuQEAgLTU5Myw3ICYjNDM7NTkzLDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqaG9zdGZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY2hhciAqbmFtZSlcbiB9XG4gXG4gc3RhdGljIGludCBob3N0ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4gXHRjaGFyICpuYW1lO1xuZGlmZiAtLWdpdCBhL2ZzL2hwZnMvbmFtZWkuYyBiL2ZzL2hwZnMvbmFtZWkuY1xuaW5kZXggMzUzZTEzYTYxNWY1NjYuLjgwOTExM2Q4MjQ4ZDUwIDEwMDY0NFxuLS0tIGEvZnMvaHBmcy9uYW1laS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9ocGZzL25hbWVpLmNcbkBAIC0xMjksNyAmIzQzOzEyOSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpocGZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiB9XG4gXG4gc3RhdGljIGludCBocGZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuJiM0MztcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUgPSBkZW50cnktXHUwMDNlZF9uYW1lLm5hbWU7XG4gXHR1bnNpZ25lZCBsZW4gPSBkZW50cnktXHUwMDNlZF9uYW1lLmxlbjtcbmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5pbmRleCAyMTZlMWEwZGQwYjIzNy4uMTZkODQzN2FlZDUxYmIgMTAwNjQ0XG4tLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcbkBAIC05NzksNyAmIzQzOzk3OSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpodWdldGxiZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyXG4gXG4gc3RhdGljIGludCBodWdldGxiZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdCAgICB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdFx0ICAgIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRyZXR1cm4gaHVnZXRsYmZzX21rbm9kKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSB8IFNfSUZSRUcsIDApO1xuIH1cbmRpZmYgLS1naXQgYS9mcy9qZmZzMi9kaXIuYyBiL2ZzL2pmZnMyL2Rpci5jXG5pbmRleCBjNDA4OGMzYjRhYzAzNi4uM2Q0Njk1YjgzOGVkMDYgMTAwNjQ0XG4tLS0gYS9mcy9qZmZzMi9kaXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvamZmczIvZGlyLmNcbkBAIC0yNiw3ICYjNDM7MjYsNyBAQFxuIHN0YXRpYyBpbnQgamZmczJfcmVhZGRpciAoc3RydWN0IGZpbGUgKiwgc3RydWN0IGRpcl9jb250ZXh0ICopO1xuIFxuIHN0YXRpYyBpbnQgamZmczJfY3JlYXRlIChzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLFxuLVx0XHQgICAgICAgICBzdHJ1Y3QgZGVudHJ5ICosIHVtb2RlX3QsIGJvb2wpO1xuJiM0MztcdFx0ICAgICAgICAgc3RydWN0IGRlbnRyeSAqLCB1bW9kZV90KTtcbiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqamZmczJfbG9va3VwIChzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICosXG4gXHRcdFx0XHQgICAgdW5zaWduZWQgaW50KTtcbiBzdGF0aWMgaW50IGpmZnMyX2xpbmsgKHN0cnVjdCBkZW50cnkgKixzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICopO1xuQEAgLTE2Myw3ICYjNDM7MTYzLDcgQEAgc3RhdGljIGludCBqZmZzMl9yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcbiBcbiBcbiBzdGF0aWMgaW50IGpmZnMyX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXJfaSxcbi1cdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuJiM0MztcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3QgamZmczJfcmF3X2lub2RlICpyaTtcbiBcdHN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvICpmLCAqZGlyX2Y7XG5kaWZmIC0tZ2l0IGEvZnMvamZzL25hbWVpLmMgYi9mcy9qZnMvbmFtZWkuY1xuaW5kZXggNDQyZDYyNjc5MjYyMjcuLjJjZjRlMjgwZWUxODVhIDEwMDY0NFxuLS0tIGEvZnMvamZzL25hbWVpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2pmcy9uYW1laS5jXG5AQCAtNjEsNyAmIzQzOzYxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZyZWVfZWFfd21hcChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuICAqXG4gICovXG4gc3RhdGljIGludCBqZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcCxcbi1cdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdGludCByYyA9IDA7XG4gXHR0aWRfdCB0aWQ7XHRcdC8qIHRyYW5zYWN0aW9uIGlkICovXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvbmFtZWkuYyBiL2ZzL21pbml4L25hbWVpLmNcbmluZGV4IDI2M2U0YmE4YjFjODIyLi43OWU1OTFiZGZkYzEwZCAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L25hbWVpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L25hbWVpLmNcbkBAIC02NCw3ICYjNDM7NjQsNyBAQCBzdGF0aWMgaW50IG1pbml4X3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIH1cbiBcbiBzdGF0aWMgaW50IG1pbml4X2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0cmV0dXJuIG1pbml4X21rbm9kKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCAwKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmNcbmluZGV4IDVjYzlmMGY0NjZiODMwLi44ZDgxZmMzMDFlOTg5NyAxMDA2NDRcbi0tLSBhL2ZzL25hbWVpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25hbWVpLmNcbkBAIC00MTk5LDcgJiM0Mzs0MTk5LDcgQEAgaW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuIFx0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbi1cdGVycm9yID0gZGlyLVx1MDAzZWlfb3AtXHUwMDNlY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgdHJ1ZSk7XG4mIzQzO1x0ZXJyb3IgPSBkaXItXHUwMDNlaV9vcC1cdTAwM2VjcmVhdGUoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiBcdGlmICghZXJyb3IpXG4gXHRcdGZzbm90aWZ5X2NyZWF0ZShkaXIsIGRlbnRyeSk7XG4gXHRyZXR1cm4gZXJyb3I7XG5AQCAtNDUwNSw4ICYjNDM7NDUwNSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdFx0Z290byBvdXRfZHB1dDtcbiBcdFx0fVxuIFxuLVx0XHRlcnJvciA9IGRpcl9pbm9kZS1cdTAwM2VpX29wLVx1MDAzZWNyZWF0ZShpZG1hcCwgZGlyX2lub2RlLCBkZW50cnksXG4tXHRcdFx0XHRcdFx0bW9kZSwgb3Blbl9mbGFnIFx1MDAyNiBPX0VYQ0wpO1xuJiM0MztcdFx0ZXJyb3IgPSBkaXJfaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2VjcmVhdGUoaWRtYXAsIGRpcl9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcbiBcdFx0aWYgKGVycm9yKVxuIFx0XHRcdGdvdG8gb3V0X2RwdXQ7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZnMvbmZzL2Rpci5jIGIvZnMvbmZzL2Rpci5jXG5pbmRleCBjN2I3MjNjMTg2MjBjOS4uMjgzMGRkYzQxNmNmNzUgMTAwNjQ0XG4tLS0gYS9mcy9uZnMvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25mcy9kaXIuY1xuQEAgLTI0MjcsOSAmIzQzOzI0MjcsOSBAQCBzdGF0aWMgaW50IG5mc19kb19jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiB9XG4gXG4gaW50IG5mc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG4mIzQzO1x0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbi1cdHJldHVybiBuZnNfZG9fY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlLCBleGNsID8gT19FWENMIDogMCk7XG4mIzQzO1x0cmV0dXJuIG5mc19kb19jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUsIE9fRVhDTCk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mc19jcmVhdGUpO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL25mcy9pbnRlcm5hbC5oIGIvZnMvbmZzL2ludGVybmFsLmhcbmluZGV4IGFjYWVmZjdkZGZkZjcwLi5kZDc3ZDVlODBkN2I5MyAxMDA2NDRcbi0tLSBhL2ZzL25mcy9pbnRlcm5hbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9uZnMvaW50ZXJuYWwuaFxuQEAgLTM5NSw3ICYjNDM7Mzk1LDcgQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbmZzX2FjY2Vzc19jYWNoZV9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuIHN0cnVjdCBkZW50cnkgKm5mc19sb29rdXAoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwgdW5zaWduZWQgaW50KTtcbiB2b2lkIG5mc19kX3BydW5lX2Nhc2VfaW5zZW5zaXRpdmVfYWxpYXNlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBpbnQgbmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosXG4tXHQgICAgICAgdW1vZGVfdCwgYm9vbCk7XG4mIzQzO1x0ICAgICAgIHVtb2RlX3QpO1xuIHN0cnVjdCBkZW50cnkgKm5mc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosXG4gXHRcdFx0IHVtb2RlX3QpO1xuIGludCBuZnNfcm1kaXIoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKik7XG5kaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL25hbWVpLmMgYi9mcy9uaWxmczIvbmFtZWkuY1xuaW5kZXggZTJmZTk1ZGUzZDcxY2EuLjBlMGE5ODUwZmY3NmRjIDEwMDY0NFxuLS0tIGEvZnMvbmlsZnMyL25hbWVpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25pbGZzMi9uYW1laS5jXG5AQCAtODYsNyAmIzQzOzg2LDcgQEAgbmlsZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVuc2lnbmVkIGludCBmbGFncylcbiAgKiB3aXRoIGRfaW5zdGFudGlhdGUoKS5cbiAgKi9cbiBzdGF0aWMgaW50IG5pbGZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbiBcdHN0cnVjdCBuaWxmc190cmFuc2FjdGlvbl9pbmZvIHRpO1xuZGlmZiAtLWdpdCBhL2ZzL250ZnMvbmFtZWkuYyBiL2ZzL250ZnMvbmFtZWkuY1xuaW5kZXggYTE5NjI2YTEzNWJkN2YuLmI0ZGM2ZGEyMjY1OTZiIDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9uYW1laS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzL25hbWVpLmNcbkBAIC03MzYsNyAmIzQzOzczNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgbnRmc19pbm9kZSAqX19udGZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkXG4gfVxuIFxuIHN0YXRpYyBpbnQgbnRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuJiM0MztcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IG50ZnNfdm9sdW1lICp2b2wgPSBOVEZTX1NCKGRpci1cdTAwM2VpX3NiKTtcbiBcdHN0cnVjdCBudGZzX2lub2RlICpuaTtcbmRpZmYgLS1naXQgYS9mcy9udGZzMy9uYW1laS5jIGIvZnMvbnRmczMvbmFtZWkuY1xuaW5kZXggYzU5ZGU1ZjJmYTk3NzEuLjZkMDMyYjIyYzk3ZGFmIDEwMDY0NFxuLS0tIGEvZnMvbnRmczMvbmFtZWkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmczMvbmFtZWkuY1xuQEAgLTEwNSw3ICYjNDM7MTA1LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKm50ZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gICogbnRmc19jcmVhdGUgLSBpbm9kZV9vcGVyYXRpb25zOjpjcmVhdGVcbiAgKi9cbiBzdGF0aWMgaW50IG50ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG4mIzQzO1x0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0cmV0dXJuIG50ZnNfY3JlYXRlX2lub2RlKGlkbWFwLCBkaXIsIGRlbnRyeSwgTlVMTCwgU19JRlJFRyB8IG1vZGUsIDAsXG4gXHRcdFx0XHQgTlVMTCwgMCwgTlVMTCk7XG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtZnMvZGxtZnMuYyBiL2ZzL29jZnMyL2RsbWZzL2RsbWZzLmNcbmluZGV4IDU4MjFlMzNkZjc4ZmQ5Li5mMDEyNGY4MWRmMjliMCAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL2RsbWZzL2RsbWZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL2RsbWZzL2RsbWZzLmNcbkBAIC00NTMsOCAmIzQzOzQ1Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkbG1mc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICogaWRtYXAsXG4gc3RhdGljIGludCBkbG1mc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0c3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdHVtb2RlX3QgbW9kZSxcbi1cdFx0XHRib29sIGV4Y2wpXG4mIzQzO1x0XHRcdHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRpbnQgc3RhdHVzID0gMDtcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvbmFtZWkuYyBiL2ZzL29jZnMyL25hbWVpLmNcbmluZGV4IDEyNzc2NjZjNzdjZDJkLi4xMmExZmVmM2VlNzRlNiAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL25hbWVpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL25hbWVpLmNcbkBAIC02NjcsOCAmIzQzOzY2Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvY2ZzMl9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBzdGF0aWMgaW50IG9jZnMyX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHRzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0dW1vZGVfdCBtb2RlLFxuLVx0XHRcdGJvb2wgZXhjbClcbiYjNDM7XHRcdFx0dW1vZGVfdCBtb2RlKVxuIHtcbiBcdGludCByZXQ7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvb21mcy9kaXIuYyBiL2ZzL29tZnMvZGlyLmNcbmluZGV4IDJlZDU0MWZjY2YzMzFkLi5hMDlhOThmN2UzMGJjNiAxMDA2NDRcbi0tLSBhL2ZzL29tZnMvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29tZnMvZGlyLmNcbkBAIC0yODYsNyAmIzQzOzI4Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvbWZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiB9XG4gXG4gc3RhdGljIGludCBvbWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuJiM0MztcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdHJldHVybiBvbWZzX2FkZF9ub2RlKGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRlJFRyk7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL29yYW5nZWZzL25hbWVpLmMgYi9mcy9vcmFuZ2Vmcy9uYW1laS5jXG5pbmRleCA3NWU2NWU3MmMyZDY0Ni4uOTFmOTdkYjE4OTcxYmYgMTAwNjQ0XG4tLS0gYS9mcy9vcmFuZ2Vmcy9uYW1laS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9vcmFuZ2Vmcy9uYW1laS5jXG5AQCAtMTgsOCAmIzQzOzE4LDcgQEBcbiBzdGF0aWMgaW50IG9yYW5nZWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHRzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0dW1vZGVfdCBtb2RlLFxuLVx0XHRcdGJvb2wgZXhjbHVzaXZlKVxuJiM0MztcdFx0XHR1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IG9yYW5nZWZzX2lub2RlX3MgKnBhcmVudCA9IE9SQU5HRUZTX0koZGlyKTtcbiBcdHN0cnVjdCBvcmFuZ2Vmc19rZXJuZWxfb3BfcyAqbmV3X29wO1xuZGlmZiAtLWdpdCBhL2ZzL292ZXJsYXlmcy9kaXIuYyBiL2ZzL292ZXJsYXlmcy9kaXIuY1xuaW5kZXggYTAzMzc0M2RiZjUxNTkuLjg4YmNmOThkMjg3ZDFlIDEwMDY0NFxuLS0tIGEvZnMvb3ZlcmxheWZzL2Rpci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9vdmVybGF5ZnMvZGlyLmNcbkBAIC03MzIsNyAmIzQzOzczMiw3IEBAIHN0YXRpYyBpbnQgb3ZsX2NyZWF0ZV9vYmplY3Qoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSwgZGV2X3QgcmRldixcbiB9XG4gXG4gc3RhdGljIGludCBvdmxfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdHJldHVybiBvdmxfY3JlYXRlX29iamVjdChkZW50cnksIChtb2RlIFx1MDAyNiAwNzc3NykgfCBTX0lGUkVHLCAwLCBOVUxMKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvcmFtZnMvaW5vZGUuYyBiL2ZzL3JhbWZzL2lub2RlLmNcbmluZGV4IDM5ODc2MzllZDEzMmM2Li4wZjUyYmEyMmFhYzA0YyAxMDA2NDRcbi0tLSBhL2ZzL3JhbWZzL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3JhbWZzL2lub2RlLmNcbkBAIC0xMjgsNyAmIzQzOzEyOCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpyYW1mc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gfVxuIFxuIHN0YXRpYyBpbnQgcmFtZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuJiM0MztcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRyZXR1cm4gcmFtZnNfbWtub2QoXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLCBkZW50cnksIG1vZGUgfCBTX0lGUkVHLCAwKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvc21iL2NsaWVudC9jaWZzZnMuaCBiL2ZzL3NtYi9jbGllbnQvY2lmc2ZzLmhcbmluZGV4IDkwMWUxMzQwYzk4NmZiLi5iY2YyZmY4N2RhMmQ1YyAxMDA2NDRcbi0tLSBhL2ZzL3NtYi9jbGllbnQvY2lmc2ZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3NtYi9jbGllbnQvY2lmc2ZzLmhcbkBAIC01NCw3ICYjNDM7NTQsNyBAQCB2b2lkIGNpZnNfc2JfZGVhY3RpdmUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNpZnNfZGlyX2lub2RlX29wcztcbiBzdHJ1Y3QgaW5vZGUgKmNpZnNfcm9vdF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuIGludCBjaWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbCk7XG4mIzQzO1x0XHRzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbiBpbnQgY2lmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGlyZW50cnksXG4gXHRcdCAgICAgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBvZmxhZ3MsIHVtb2RlX3QgbW9kZSk7XG4gaW50IGNpZnNfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG5kaWZmIC0tZ2l0IGEvZnMvc21iL2NsaWVudC9kaXIuYyBiL2ZzL3NtYi9jbGllbnQvZGlyLmNcbmluZGV4IDg4YTRhMTc4N2ZmMDQ3Li43ODAzYmQ1YmQwMWY4MCAxMDA2NDRcbi0tLSBhL2ZzL3NtYi9jbGllbnQvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3NtYi9jbGllbnQvZGlyLmNcbkBAIC02NDUsNyAmIzQzOzY0NSw3IEBAIGludCBjaWZzX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSxcbiAgKiBoYXNoZWQtcG9zaXRpdmUgYnkgY2FsbGluZyBkX2luc3RhbnRpYXRlKCkuXG4gICovXG4gaW50IGNpZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0c3RydWN0IGRlbnRyeSAqZGlyZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuJiM0MztcdFx0c3RydWN0IGRlbnRyeSAqZGlyZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiID0gQ0lGU19TQihkaXIpO1xuIFx0aW50IHJjO1xuZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2Rpci5jIGIvZnMvdWJpZnMvZGlyLmNcbmluZGV4IDg2ZDQxZTA3N2U0ZDYyLi5mZDhkZjEwNTQ3YmY0MiAxMDA2NDRcbi0tLSBhL2ZzL3ViaWZzL2Rpci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy91Ymlmcy9kaXIuY1xuQEAgLTMwMyw3ICYjNDM7MzAzLDcgQEAgc3RhdGljIGludCB1Ymlmc19wcmVwYXJlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIH1cbiBcbiBzdGF0aWMgaW50IHViaWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbiBcdHN0cnVjdCB1Ymlmc19pbmZvICpjID0gZGlyLVx1MDAzZWlfc2ItXHUwMDNlc19mc19pbmZvO1xuZGlmZiAtLWdpdCBhL2ZzL3VkZi9uYW1laS5jIGIvZnMvdWRmL25hbWVpLmNcbmluZGV4IDlhM2I3Y2VmMzYwNjQ4Li5mZDliNmYxNmY2MTQ2MiAxMDA2NDRcbi0tLSBhL2ZzL3VkZi9uYW1laS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy91ZGYvbmFtZWkuY1xuQEAgLTM3MSw3ICYjNDM7MzcxLDcgQEAgc3RhdGljIGludCB1ZGZfYWRkX25vbmRpcihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gfVxuIFxuIHN0YXRpYyBpbnQgdWRmX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG4mIzQzO1x0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gdWRmX25ld19pbm9kZShkaXIsIG1vZGUpO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL3Vmcy9uYW1laS5jIGIvZnMvdWZzL25hbWVpLmNcbmluZGV4IDViM2M4NWM5MzI0Mjk4Li41MDEyZTA1NjIwMGFjYSAxMDA2NDRcbi0tLSBhL2ZzL3Vmcy9uYW1laS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy91ZnMvbmFtZWkuY1xuQEAgLTcwLDggJiM0Mzs3MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp1ZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqIGRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bnNpXG4gICogd2l0aCBkX2luc3RhbnRpYXRlKCkuIFxuICAqL1xuIHN0YXRpYyBpbnQgdWZzX2NyZWF0ZSAoc3RydWN0IG1udF9pZG1hcCAqIGlkbWFwLFxuLVx0XHRzdHJ1Y3QgaW5vZGUgKiBkaXIsIHN0cnVjdCBkZW50cnkgKiBkZW50cnksIHVtb2RlX3QgbW9kZSxcbi1cdFx0Ym9vbCBleGNsKVxuJiM0MztcdFx0c3RydWN0IGlub2RlICogZGlyLCBzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbiBcbmRpZmYgLS1naXQgYS9mcy92Ym94c2YvZGlyLmMgYi9mcy92Ym94c2YvZGlyLmNcbmluZGV4IGM1YmQzMjcxYWE5NjE2Li4wYjllYWIxNTc0MzJkZiAxMDA2NDRcbi0tLSBhL2ZzL3Zib3hzZi9kaXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvdmJveHNmL2Rpci5jXG5AQCAtMjk4LDkgJiM0MzsyOTgsOSBAQCBzdGF0aWMgaW50IHZib3hzZl9kaXJfY3JlYXRlKHN0cnVjdCBpbm9kZSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXG4gc3RhdGljIGludCB2Ym94c2ZfZGlyX21rZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHQgICAgIHN0cnVjdCBpbm9kZSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0ICAgICB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdFx0ICAgICB1bW9kZV90IG1vZGUpXG4ge1xuLVx0cmV0dXJuIHZib3hzZl9kaXJfY3JlYXRlKHBhcmVudCwgZGVudHJ5LCBtb2RlLCBmYWxzZSwgZXhjbCwgTlVMTCk7XG4mIzQzO1x0cmV0dXJuIHZib3hzZl9kaXJfY3JlYXRlKHBhcmVudCwgZGVudHJ5LCBtb2RlLCBmYWxzZSwgdHJ1ZSwgTlVMTCk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp2Ym94c2ZfZGlyX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9wcy5jIGIvZnMveGZzL3hmc19pb3BzLmNcbmluZGV4IDYzMzlmNDk1NmVjYjM5Li5lNDhmOWU1YTFiOGExOCAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfaW9wcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2lvcHMuY1xuQEAgLTI5Myw4ICYjNDM7MjkzLDcgQEAgeGZzX3ZuX2NyZWF0ZShcbiBcdHN0cnVjdCBtbnRfaWRtYXBcdCppZG1hcCxcbiBcdHN0cnVjdCBpbm9kZVx0XHQqZGlyLFxuIFx0c3RydWN0IGRlbnRyeVx0XHQqZGVudHJ5LFxuLVx0dW1vZGVfdFx0XHRcdG1vZGUsXG4tXHRib29sXHRcdFx0ZmxhZ3MpXG4mIzQzO1x0dW1vZGVfdFx0XHRcdG1vZGUpXG4ge1xuIFx0cmV0dXJuIHhmc19nZW5lcmljX2NyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIDAsIE5VTEwpO1xuIH1cbkBAIC0zMzgsNyAmIzQzOzMzNyw3IEBAIFNUQVRJQyBzdHJ1Y3QgZGVudHJ5ICpcbiB4ZnNfdm5fY2lfbG9va3VwKFxuIFx0c3RydWN0IGlub2RlXHQqZGlyLFxuIFx0c3RydWN0IGRlbnRyeVx0KmRlbnRyeSxcbi1cdHVuc2lnbmVkIGludCBmbGFncylcbiYjNDM7XHR1bnNpZ25lZCBpbnRcdGZsYWdzKVxuIHtcbiBcdHN0cnVjdCB4ZnNfaW5vZGUgKmlwO1xuIFx0c3RydWN0IHhmc19uYW1lXHR4bmFtZTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmhcbmluZGV4IGQxMDg5N2IzYTFlMzUwLi4xYjdjNDBiMmZhNmRlMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mcy5oXG5AQCAtMjAwMiw3ICYjNDM7MjAwMiw3IEBAIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHtcbiBcdGludCAoKnJlYWRsaW5rKSAoc3RydWN0IGRlbnRyeSAqLCBjaGFyIF9fdXNlciAqLGludCk7XG4gXG4gXHRpbnQgKCpjcmVhdGUpIChzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKixcbi1cdFx0ICAgICAgIHVtb2RlX3QsIGJvb2wpO1xuJiM0MztcdFx0ICAgICAgIHVtb2RlX3QpO1xuIFx0aW50ICgqbGluaykgKHN0cnVjdCBkZW50cnkgKixzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICopO1xuIFx0aW50ICgqdW5saW5rKSAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqKTtcbiBcdGludCAoKnN5bWxpbmspIChzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKixcbmRpZmYgLS1naXQgYS9pcGMvbXF1ZXVlLmMgYi9pcGMvbXF1ZXVlLmNcbmluZGV4IDQ3OThiMzc1OTcyYmY0Li4yZGRkYjk3ZjJmOGE1NSAxMDA2NDRcbi0tLSBhL2lwYy9tcXVldWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvaXBjL21xdWV1ZS5jXG5AQCAtNjA4LDcgJiM0Mzs2MDgsNyBAQCBzdGF0aWMgaW50IG1xdWV1ZV9jcmVhdGVfYXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgdm9pZCAqYXJnKVxuIH1cbiBcbiBzdGF0aWMgaW50IG1xdWV1ZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuJiM0MztcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0cmV0dXJuIG1xdWV1ZV9jcmVhdGVfYXR0cihkZW50cnksIG1vZGUsIE5VTEwpO1xuIH1cbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggYjUxZjgzYzk3MGJiMzcuLjU3ODlhMGY1YTM0NjNiIDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uY1xuQEAgLTM4NjQsNyAmIzQzOzM4NjQsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqc2htZW1fbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIH1cbiBcbiBzdGF0aWMgaW50IHNobWVtX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0cmV0dXJuIHNobWVtX21rbm9kKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSB8IFNfSUZSRUcsIDApO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoaXMgcGF0Y2ggaXMgYSB0cmVlLXdpZGUgQVBJIHJlZmFjdG9yaW5nIHRoYXQgcmVtb3ZlcyB0aGUgcmVkdW5kYW50ICYjMzk7ZXhjbCYjMzk7IGFyZ3VtZW50IGZyb20gdGhlICYjMzk7Y3JlYXRlJiMzOTsgaW5vZGUgb3BlcmF0aW9uLiBWRlMgcHJldmlvdXNseSBwYXNzZWQgJiMzOTt0cnVlJiMzOTsgZnJvbSB2ZnNfY3JlYXRlKCkgYW5kICYjMzk7b3Blbl9mbGFnIFx1MDAyNiBPX0VYQ0wmIzM5OyBmcm9tIGxvb2t1cF9vcGVuKCkuIEhvd2V2ZXIsIGZvciBsb2NhbCBmaWxlc3lzdGVtcywgVkZTIGhvbGRzIHRoZSBpbm9kZV9sb2NrIGR1cmluZyBjcmVhdGUsIG1ha2luZyBjb25jdXJyZW50IGNyZWF0aW9uIGltcG9zc2libGUgYW5kIHRoZSAmIzM5O2V4Y2wmIzM5OyBhcmd1bWVudCByZWR1bmRhbnQuIEZvciBuZXR3b3JrIGZpbGVzeXN0ZW1zLCBub24tZXhjbHVzaXZlIGNyZWF0ZXMgYXJlIGhhbmRsZWQgdmlhIGF0b21pY19vcGVuKCkuIFRoZSBmaWxlc3lzdGVtcyB0aGF0IHVzZWQgdGhlIGFyZ3VtZW50IGludGVybmFsbHkgKGxpa2UgZ2ZzMiwgbmZzLCB2Ym94c2YpIG5vdyBoYXJkY29kZSAmIzM5O3RydWUmIzM5OyBvciAmIzM5O09fRVhDTCYjMzk7LCB3aGljaCBleGFjdGx5IG1hdGNoZXMgdGhlIHByZXZpb3VzIGJlaGF2aW9yIHdoZW4gY2FsbGVkIGZyb20gdmZzX2NyZWF0ZS4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDA0MmRkZWNmM2NlZDIwNzc3YmU1Mzg3NGQxZDlhMDMzN2ZiNDJiOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDEgMTg6Mzg6MTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdAppbmRleCBkMTNmMGEyM2M4ODJmYy4uMDI1MjJmYmZkOTY4NmYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdApAQCAtMTQwMSwzICYjNDM7MTQwMSwxMSBAQCBhcyB3aXRoIGRfZGlzcG9zZV9pZl91bnVzZWQoKSB0aGVzZSBhcmUgbm90IHRyaXZpYWw7IHdpdGggdGhpcyB2YXJpYW50CiBvZiBBUEkgaXQmIzM5O3MgbW9yZSBleHBsaWNpdCwgc2luY2UgZ3JhYmJpbmcgLSZndDtkX2xvY2sgaXMgY2FsbGVyLXNpZGUsIGJ1dAogZF9kaXNwb3NlX2lmX3VudXNlZCgpIGhhZCBhbGwgdGhlIHNhbWUgaXNzdWVzLiAgSXQmIzM5O3MgYSBsb3ctbGV2ZWwgcHJpbWl0aXZlOwogdXNlIG9ubHkgaWYgeW91IGhhdmUgbm8gYWx0ZXJuYXRpdmUuCiYjNDM7CiYjNDM7LS0tCiYjNDM7CiYjNDM7KiptYW5kYXRvcnkqKgomIzQzOwomIzQzO1RoZSAuY3JlYXRlIGlub2RlX29wZXJhdGlvbiBubyBsb25nZXIgcmVjZWl2ZXMgdGhlICYjMzk7ZXhjbCYjMzk7IGFyZy4gIEl0IG11c3QKJiM0MzthbHdheXMgYXNzdW1lIHRoZSBmaWxlIGRvZXMgbm90IGFscmVhZHkgZXhpc3QuICBJZiB0aGUgZmlsZXN5c3RlbSBuZWVkcwomIzQzO3RvIGJlIGludm9sdmVkIGluIG5vbi1leGNsdXNpdmUgY3JlYXRlLCBpdCBzaG91bGQgcHJvdmlkZSBhdG9taWNfb3Blbi4KZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19pbm9kZS5jIGIvZnMvOXAvdmZzX2lub2RlLmMKaW5kZXggNTc4M2QwMzM2Zjk2YWMuLmU0N2I5MGU3MDgzNzY4IDEwMDY0NAotLS0gYS9mcy85cC92ZnNfaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy85cC92ZnNfaW5vZGUuYwpAQCAtNjQ1LDcgJiM0Mzs2NDUsNiBAQCB2OWZzX2NyZWF0ZShzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzLCBzdHJ1Y3QgaW5vZGUgKmRpciwKICAqIEBkaXI6IFRoZSBwYXJlbnQgZGlyZWN0b3J5CiAgKiBAZGVudHJ5OiBUaGUgbmFtZSBvZiBmaWxlIHRvIGJlIGNyZWF0ZWQKICAqIEBtb2RlOiBUaGUgVU5JWCBmaWxlIG1vZGUgdG8gc2V0Ci0gKiBAZXhjbDogVHJ1ZSBpZiB0aGUgZmlsZSBtdXN0IG5vdCB5ZXQgZXhpc3QKICAqCiAgKiBvcGVuKC4uLCBPX0NSRUFUKSBpcyBoYW5kbGVkIGluIHY5ZnNfdmZzX2F0b21pY19vcGVuKCkuICBUaGlzIGlzIG9ubHkgY2FsbGVkCiAgKiBmb3IgbWtub2QoMikuCkBAIC02NTQsNyAmIzQzOzY1Myw3IEBAIHY5ZnNfY3JlYXRlKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMsIHN0cnVjdCBpbm9kZSAqZGlyLAogCiBzdGF0aWMgaW50CiB2OWZzX3Zmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAotCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiB7CiAJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcyA9IHY5ZnNfaW5vZGUydjlzZXMoZGlyKTsKIAl1MzIgcGVybSA9IHVuaXhtb2RlMnA5bW9kZSh2OXNlcywgbW9kZSk7CmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGVfZG90bC5jIGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuYwppbmRleCBmNzM5NmQyMGNiNmNkYy4uZDE3YzNiNmVlYmIyMmQgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuYwpAQCAtMjEzLDEyICYjNDM7MjEzLDExIEBAIGludCB2OWZzX29wZW5fdG9fZG90bF9mbGFncyhpbnQgZmxhZ3MpCiAgKiBAZGlyOiBkaXJlY3RvcnkgaW5vZGUgdGhhdCBpcyBiZWluZyBjcmVhdGVkCiAgKiBAZGVudHJ5OiAgZGVudHJ5IHRoYXQgaXMgYmVpbmcgZGVsZXRlZAogICogQG9tb2RlOiBjcmVhdGUgcGVybWlzc2lvbnMKLSAqIEBleGNsOiBUcnVlIGlmIHRoZSBmaWxlIG11c3Qgbm90IHlldCBleGlzdAogICoKICAqLwogc3RhdGljIGludAogdjlmc192ZnNfY3JlYXRlX2RvdGwoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBvbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3Qgb21vZGUpCiB7CiAJcmV0dXJuIHY5ZnNfdmZzX21rbm9kX2RvdGwoaWRtYXAsIGRpciwgZGVudHJ5LCBvbW9kZSwgMCk7CiB9CmRpZmYgLS1naXQgYS9mcy9hZmZzL2FmZnMuaCBiL2ZzL2FmZnMvYWZmcy5oCmluZGV4IDQ0YTNmNjlkMjc1Zjk2Li5kNmIzMzkzNjMzZjJkOSAxMDA2NDQKLS0tIGEvZnMvYWZmcy9hZmZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZmcy9hZmZzLmgKQEAgLTE2OSw3ICYjNDM7MTY5LDcgQEAgZXh0ZXJuIGludAlhZmZzX2hhc2hfbmFtZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCB1OCAqbmFtZSwgdW5zaWduZWQgaW50IGwKIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICphZmZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIGludAlhZmZzX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIGV4dGVybiBpbnQJYWZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wpOwomIzQzOwkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTsKIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICphZmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTsKIGV4dGVybiBpbnQJYWZmc19ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKZGlmZiAtLWdpdCBhL2ZzL2FmZnMvbmFtZWkuYyBiL2ZzL2FmZnMvbmFtZWkuYwppbmRleCBjM2M2NTMyZGE0YjBkYS4uYjAwMDEwODQ3MjdhNWQgMTAwNjQ0Ci0tLSBhL2ZzL2FmZnMvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZmZzL25hbWVpLmMKQEAgLTI0Myw3ICYjNDM7MjQzLDcgQEAgYWZmc191bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAogaW50CiBhZmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCi0JICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpCiYjNDM7CSAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGlyLSZndDtpX3NiOwogCXN0cnVjdCBpbm9kZQkqaW5vZGU7CmRpZmYgLS1naXQgYS9mcy9hZnMvZGlyLmMgYi9mcy9hZnMvZGlyLmMKaW5kZXggNDk4Yjk5Y2NkZjBlMjcuLjY2Y2MzMzMyZWYzMTlhIDEwMDY0NAotLS0gYS9mcy9hZnMvZGlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2Rpci5jCkBAIC0zMiw3ICYjNDM7MzIsNyBAQCBzdGF0aWMgYm9vbCBhZnNfbG9va3VwX29uZV9maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBpbgogc3RhdGljIGJvb2wgYWZzX2xvb2t1cF9maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmxlbiwKIAkJCSAgICAgIGxvZmZfdCBmcG9zLCB1NjQgaW5vLCB1bnNpZ25lZCBkdHlwZSk7CiBzdGF0aWMgaW50IGFmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKTsKJiM0MzsJCSAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTsKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTsKIHN0YXRpYyBpbnQgYWZzX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwpAQCAtMTYyMyw3ICYjNDM7MTYyMyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWZzX29wZXJhdGlvbl9vcHMgYWZzX2NyZWF0ZV9vcGVyYXRpb24gPSB7CiAgKiBjcmVhdGUgYSByZWd1bGFyIGZpbGUgb24gYW4gQUZTIGZpbGVzeXN0ZW0KICAqLwogc3RhdGljIGludCBhZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbCkKJiM0MzsJCSAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCXN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcDsKIAlzdHJ1Y3QgYWZzX3Zub2RlICpkdm5vZGUgPSBBRlNfRlNfSShkaXIpOwpkaWZmIC0tZ2l0IGEvZnMvYmFkX2lub2RlLmMgYi9mcy9iYWRfaW5vZGUuYwppbmRleCBhY2Y4NjEzZjVlMzY4ZS4uNDg2YzQwZjczZTUxZTAgMTAwNjQ0Ci0tLSBhL2ZzL2JhZF9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2JhZF9pbm9kZS5jCkBAIC0yOSw3ICYjNDM7MjksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiYWRfZmlsZV9vcHMgPQogCiBzdGF0aWMgaW50IGJhZF9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJCQkgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCSAgICB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbCkKJiM0MzsJCQkgICAgdW1vZGVfdCBtb2RlKQogewogCXJldHVybiAtRUlPOwogfQpkaWZmIC0tZ2l0IGEvZnMvYmZzL2Rpci5jIGIvZnMvYmZzL2Rpci5jCmluZGV4IDViNDBhYjA5YTc5NmRlLi40YzNiNGRiMDhjZGVmYyAxMDA2NDQKLS0tIGEvZnMvYmZzL2Rpci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Jmcy9kaXIuYwpAQCAtODMsNyAmIzQzOzgzLDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiZnNfZGlyX29wZXJhdGlvbnMgPSB7CiB9OwogCiBzdGF0aWMgaW50IGJmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW5vZGUuYyBiL2ZzL2J0cmZzL2lub2RlLmMKaW5kZXggMjcyNTk4ZjZhZTc3YWYuLjIyYzBhMGUyNDFlNTMzIDEwMDY0NAotLS0gYS9mcy9idHJmcy9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2J0cmZzL2lub2RlLmMKQEAgLTY4MzIsNyAmIzQzOzY4MzIsNyBAQCBzdGF0aWMgaW50IGJ0cmZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIH0KIAogc3RhdGljIGludCBidHJmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbCkKJiM0MzsJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCmRpZmYgLS1naXQgYS9mcy9jZXBoL2Rpci5jIGIvZnMvY2VwaC9kaXIuYwppbmRleCAyN2NlOWU1NWU5NDc2OC4uZGVlNDUyNGMyMzM2MjMgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvZGlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvY2VwaC9kaXIuYwpAQCAtOTc4LDcgJiM0Mzs5NzgsNyBAQCBzdGF0aWMgaW50IGNlcGhfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogfQogCiBzdGF0aWMgaW50IGNlcGhfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpCiYjNDM7CQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiB7CiAJcmV0dXJuIGNlcGhfbWtub2QoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCAwKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL2NvZGEvZGlyLmMgYi9mcy9jb2RhL2Rpci5jCmluZGV4IDgzNWViN2ZkZmRhZDAwLi5lYTcxMGE1ZGJiYjc0YiAxMDA2NDQKLS0tIGEvZnMvY29kYS9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9jb2RhL2Rpci5jCkBAIC0xMzQsNyAmIzQzOzEzNCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb2RhX2Rpcl9kcm9wX25saW5rKHN0cnVjdCBpbm9kZSAqZGlyKQogCiAvKiBjcmVhdGlvbiByb3V0aW5lczogY3JlYXRlLCBta25vZCwgbWtkaXIsIGxpbmssIHN5bWxpbmsgKi8KIHN0YXRpYyBpbnQgY29kYV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGUsIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlLCB1bW9kZV90IG1vZGUpCiB7CiAJaW50IGVycm9yOwogCWNvbnN0IGNoYXIgKm5hbWU9ZGUtJmd0O2RfbmFtZS5uYW1lOwpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvaW5vZGUuYyBiL2ZzL2VjcnlwdGZzL2lub2RlLmMKaW5kZXggN2FhZjE5MTNmOWM2ZDMuLjUyNTI5N2M3ZWJkOGM0IDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2VjcnlwdGZzL2lub2RlLmMKQEAgLTI2OCw3ICYjNDM7MjY4LDcgQEAgaW50IGVjcnlwdGZzX2luaXRpYWxpemVfZmlsZShzdHJ1Y3QgZGVudHJ5ICplY3J5cHRmc19kZW50cnksCiBzdGF0aWMgaW50CiBlY3J5cHRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJCXN0cnVjdCBpbm9kZSAqZGlyZWN0b3J5X2lub2RlLCBzdHJ1Y3QgZGVudHJ5ICplY3J5cHRmc19kZW50cnksCi0JCXVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJdW1vZGVfdCBtb2RlKQogewogCXN0cnVjdCBpbm9kZSAqZWNyeXB0ZnNfaW5vZGU7CiAJaW50IHJjOwpkaWZmIC0tZ2l0IGEvZnMvZWZpdmFyZnMvaW5vZGUuYyBiL2ZzL2VmaXZhcmZzL2lub2RlLmMKaW5kZXggOTVkY2FkODNkYTExYmUuLmYwZDAwOTU1NWZjNjYwIDEwMDY0NAotLS0gYS9mcy9lZml2YXJmcy9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2VmaXZhcmZzL2lub2RlLmMKQEAgLTc1LDcgJiM0Mzs3NSw3IEBAIHN0YXRpYyBib29sIGVmaXZhcmZzX3ZhbGlkX25hbWUoY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKQogfQogCiBzdGF0aWMgaW50IGVmaXZhcmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCi0JCQkgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJCSAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOwogCXN0cnVjdCBlZml2YXJfZW50cnkgKnZhcjsKZGlmZiAtLWdpdCBhL2ZzL2V4ZmF0L25hbWVpLmMgYi9mcy9leGZhdC9uYW1laS5jCmluZGV4IGI3ZDVlNDRhZDM4ZWVlLi5jZDljOWVjYTU4Zjg2ZSAxMDA2NDQKLS0tIGEvZnMvZXhmYXQvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leGZhdC9uYW1laS5jCkBAIC01MzgsNyAmIzQzOzUzOCw3IEBAIHN0YXRpYyBpbnQgZXhmYXRfYWRkX2VudHJ5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKnBhdGgsCiB9CiAKIHN0YXRpYyBpbnQgZXhmYXRfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpCiYjNDM7CQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRpci0mZ3Q7aV9zYjsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9uYW1laS5jIGIvZnMvZXh0Mi9uYW1laS5jCmluZGV4IDBkMDlkMjJmZTcwODYyLi43NDJhNzhlMTY1ZDQ4ZSAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDIvbmFtZWkuYwpAQCAtOTksNyAmIzQzOzk5LDcgQEAgc3RydWN0IGRlbnRyeSAqZXh0Ml9nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKQogICovCiBzdGF0aWMgaW50IGV4dDJfY3JlYXRlIChzdHJ1Y3QgbW50X2lkbWFwICogaWRtYXAsCiAJCQlzdHJ1Y3QgaW5vZGUgKiBkaXIsIHN0cnVjdCBkZW50cnkgKiBkZW50cnksCi0JCQl1bW9kZV90IG1vZGUsIGJvb2wgZXhjbCkKJiM0MzsJCQl1bW9kZV90IG1vZGUpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlpbnQgZXJyOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9uYW1laS5jIGIvZnMvZXh0NC9uYW1laS5jCmluZGV4IGNjNDlhZTA0YTZmNjQ5Li5jM2RlNjRkMmEyZGYyMCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvbmFtZWkuYwpAQCAtMjgxMSw3ICYjNDM7MjgxMSw3IEBAIHN0YXRpYyBpbnQgZXh0NF9hZGRfbm9uZGlyKGhhbmRsZV90ICpoYW5kbGUsCiAgKiB3aXRoIGRfaW5zdGFudGlhdGUoKS4KICAqLwogc3RhdGljIGludCBleHQ0X2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCi0JCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCWhhbmRsZV90ICpoYW5kbGU7CiAJc3RydWN0IGlub2RlICppbm9kZTsKZGlmZiAtLWdpdCBhL2ZzL2YyZnMvbmFtZWkuYyBiL2ZzL2YyZnMvbmFtZWkuYwppbmRleCBjYWMwM2I4ZTkxYTE1ZS4uNjQ4NjgxYzViYTUwMTYgMTAwNjQ0Ci0tLSBhL2ZzL2YyZnMvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9mMmZzL25hbWVpLmMKQEAgLTM2Niw3ICYjNDM7MzY2LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZjJmc19uZXdfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiB9CiAKIHN0YXRpYyBpbnQgZjJmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbCkKJiM0MzsJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKIHsKIAlzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmkgPSBGMkZTX0lfU0IoZGlyKTsKIAlzdHJ1Y3QgZjJmc19sb2NrX2NvbnRleHQgbGM7CmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfbXNkb3MuYyBiL2ZzL2ZhdC9uYW1laV9tc2Rvcy5jCmluZGV4IDBmZDI5NzFhZDRiMTMxLi45ZjJhMmU5YTljZThlYSAxMDA2NDQKLS0tIGEvZnMvZmF0L25hbWVpX21zZG9zLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L25hbWVpX21zZG9zLmMKQEAgLTI2Miw3ICYjNDM7MjYyLDcgQEAgc3RhdGljIGludCBtc2Rvc19hZGRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsCiAKIC8qKioqKiBDcmVhdGUgYSBmaWxlICovCiBzdGF0aWMgaW50IG1zZG9zX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCi0JCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkaXItJmd0O2lfc2I7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IE5VTEw7CmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfdmZhdC5jIGIvZnMvZmF0L25hbWVpX3ZmYXQuYwppbmRleCBlOTA5NDQ3ODczZTM2NC4uMTM5ZDNlZjRiZmFlYjggMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9uYW1laV92ZmF0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L25hbWVpX3ZmYXQuYwpAQCAtNzU1LDcgJiM0Mzs3NTUsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqdmZhdF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIH0KIAogc3RhdGljIGludCB2ZmF0X2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCi0JCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkaXItJmd0O2lfc2I7CiAJc3RydWN0IGlub2RlICppbm9kZTsKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZGlyLmMgYi9mcy9mdXNlL2Rpci5jCmluZGV4IDBlMmExMDM5ZmE0M2VhLi4wZWZiMzE0MWY3ZjcwYSAxMDA2NDQKLS0tIGEvZnMvZnVzZS9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9mdXNlL2Rpci5jCkBAIC0xMDg0LDcgJiM0MzsxMDg0LDcgQEAgc3RhdGljIGludCBmdXNlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIH0KIAogc3RhdGljIGludCBmdXNlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCi0JCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICplbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpCiYjNDM7CQkgICAgICAgc3RydWN0IGRlbnRyeSAqZW50cnksIHVtb2RlX3QgbW9kZSkKIHsKIAlyZXR1cm4gZnVzZV9ta25vZChpZG1hcCwgZGlyLCBlbnRyeSwgbW9kZSwgMCk7CiB9CmRpZmYgLS1naXQgYS9mcy9nZnMyL2lub2RlLmMgYi9mcy9nZnMyL2lub2RlLmMKaW5kZXggOGE3Nzc5NGJiZDRhZmMuLjllMjNjOGQ1NTk2MjNkIDEwMDY0NAotLS0gYS9mcy9nZnMyL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZ2ZzMi9pbm9kZS5jCkBAIC05NjksOSAmIzQzOzk2OSw5IEBAIHN0YXRpYyBpbnQgZ2ZzMl9jcmVhdGVfaW5vZGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKICAqLwogCiBzdGF0aWMgaW50IGdmczJfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpCiYjNDM7CQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiB7Ci0JcmV0dXJuIGdmczJfY3JlYXRlX2lub2RlKGRpciwgZGVudHJ5LCBOVUxMLCBTX0lGUkVHIHwgbW9kZSwgMCwgTlVMTCwgMCwgZXhjbCk7CiYjNDM7CXJldHVybiBnZnMyX2NyZWF0ZV9pbm9kZShkaXIsIGRlbnRyeSwgTlVMTCwgU19JRlJFRyB8IG1vZGUsIDAsIE5VTEwsIDAsIDEpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2ZzL2hmcy9kaXIuYyBiL2ZzL2hmcy9kaXIuYwppbmRleCBlMTM0NTBiYjkzM2ViZC4uOTNlZGM1YTgwYzgxM2QgMTAwNjQ0Ci0tLSBhL2ZzL2hmcy9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnMvZGlyLmMKQEAgLTE4NCw3ICYjNDM7MTg0LDcgQEAgc3RhdGljIGludCBoZnNfZGlyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiAgKiB0aGUgZGlyZWN0b3J5IGFuZCB0aGUgbmFtZSAoYW5kIGl0cyBsZW5ndGgpIG9mIHRoZSBuZXcgZmlsZS4KICAqLwogc3RhdGljIGludCBoZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbCkKJiM0MzsJCSAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJaW50IHJlczsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvZGlyLmMgYi9mcy9oZnNwbHVzL2Rpci5jCmluZGV4IDhiZjZjN2NkZDlhODY1Li5mMGFhZTJjZDZmY2ZkYyAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL2Rpci5jCkBAIC01NjIsNyAmIzQzOzU2Miw3IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiB9CiAKIHN0YXRpYyBpbnQgaGZzcGx1c19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJCSAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiB7CiAJcmV0dXJuIGhmc3BsdXNfbWtub2QoJmFtcDtub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgMCk7CiB9CmRpZmYgLS1naXQgYS9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uYyBiL2ZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jCmluZGV4IGFiZTg2ZDcyZDllZjc1Li43YWRkMDU2ZDQ3ZDhmMCAxMDA2NDQKLS0tIGEvZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmMKQEAgLTU5Myw3ICYjNDM7NTkzLDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqaG9zdGZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY2hhciAqbmFtZSkKIH0KIAogc3RhdGljIGludCBob3N0ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCWNoYXIgKm5hbWU7CmRpZmYgLS1naXQgYS9mcy9ocGZzL25hbWVpLmMgYi9mcy9ocGZzL25hbWVpLmMKaW5kZXggMzUzZTEzYTYxNWY1NjYuLjgwOTExM2Q4MjQ4ZDUwIDEwMDY0NAotLS0gYS9mcy9ocGZzL25hbWVpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaHBmcy9uYW1laS5jCkBAIC0xMjksNyAmIzQzOzEyOSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpocGZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIH0KIAogc3RhdGljIGludCBocGZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCi0JCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUgPSBkZW50cnktJmd0O2RfbmFtZS5uYW1lOwogCXVuc2lnbmVkIGxlbiA9IGRlbnRyeS0mZ3Q7ZF9uYW1lLmxlbjsKZGlmZiAtLWdpdCBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jIGIvZnMvaHVnZXRsYmZzL2lub2RlLmMKaW5kZXggMjE2ZTFhMGRkMGIyMzcuLjE2ZDg0MzdhZWQ1MWJiIDEwMDY0NAotLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9odWdldGxiZnMvaW5vZGUuYwpAQCAtOTc5LDcgJiM0Mzs5NzksNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqaHVnZXRsYmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcgogCiBzdGF0aWMgaW50IGh1Z2V0bGJmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJCQkgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCSAgICB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbCkKJiM0MzsJCQkgICAgdW1vZGVfdCBtb2RlKQogewogCXJldHVybiBodWdldGxiZnNfbWtub2QoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRlJFRywgMCk7CiB9CmRpZmYgLS1naXQgYS9mcy9qZmZzMi9kaXIuYyBiL2ZzL2pmZnMyL2Rpci5jCmluZGV4IGM0MDg4YzNiNGFjMDM2Li4zZDQ2OTViODM4ZWQwNiAxMDA2NDQKLS0tIGEvZnMvamZmczIvZGlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvamZmczIvZGlyLmMKQEAgLTI2LDcgJiM0MzsyNiw3IEBACiBzdGF0aWMgaW50IGpmZnMyX3JlYWRkaXIgKHN0cnVjdCBmaWxlICosIHN0cnVjdCBkaXJfY29udGV4dCAqKTsKIAogc3RhdGljIGludCBqZmZzMl9jcmVhdGUgKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosCi0JCSAgICAgICAgIHN0cnVjdCBkZW50cnkgKiwgdW1vZGVfdCwgYm9vbCk7CiYjNDM7CQkgICAgICAgICBzdHJ1Y3QgZGVudHJ5ICosIHVtb2RlX3QpOwogc3RhdGljIHN0cnVjdCBkZW50cnkgKmpmZnMyX2xvb2t1cCAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqLAogCQkJCSAgICB1bnNpZ25lZCBpbnQpOwogc3RhdGljIGludCBqZmZzMl9saW5rIChzdHJ1Y3QgZGVudHJ5ICosc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqKTsKQEAgLTE2Myw3ICYjNDM7MTYzLDcgQEAgc3RhdGljIGludCBqZmZzMl9yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCkKIAogCiBzdGF0aWMgaW50IGpmZnMyX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXJfaSwKLQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpCiYjNDM7CQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiB7CiAJc3RydWN0IGpmZnMyX3Jhd19pbm9kZSAqcmk7CiAJc3RydWN0IGpmZnMyX2lub2RlX2luZm8gKmYsICpkaXJfZjsKZGlmZiAtLWdpdCBhL2ZzL2pmcy9uYW1laS5jIGIvZnMvamZzL25hbWVpLmMKaW5kZXggNDQyZDYyNjc5MjYyMjcuLjJjZjRlMjgwZWUxODVhIDEwMDY0NAotLS0gYS9mcy9qZnMvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9qZnMvbmFtZWkuYwpAQCAtNjEsNyAmIzQzOzYxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZyZWVfZWFfd21hcChzdHJ1Y3QgaW5vZGUgKmlub2RlKQogICoKICAqLwogc3RhdGljIGludCBqZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcCwKLQkJICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbCkKJiM0MzsJCSAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCWludCByYyA9IDA7CiAJdGlkX3QgdGlkOwkJLyogdHJhbnNhY3Rpb24gaWQgKi8KZGlmZiAtLWdpdCBhL2ZzL21pbml4L25hbWVpLmMgYi9mcy9taW5peC9uYW1laS5jCmluZGV4IDI2M2U0YmE4YjFjODIyLi43OWU1OTFiZGZkYzEwZCAxMDA2NDQKLS0tIGEvZnMvbWluaXgvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9uYW1laS5jCkBAIC02NCw3ICYjNDM7NjQsNyBAQCBzdGF0aWMgaW50IG1pbml4X3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogfQogCiBzdGF0aWMgaW50IG1pbml4X2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCi0JCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCXJldHVybiBtaW5peF9ta25vZCgmYW1wO25vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCAwKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jCmluZGV4IDVjYzlmMGY0NjZiODMwLi44ZDgxZmMzMDFlOTg5NyAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9uYW1laS5jCkBAIC00MTk5LDcgJiM0Mzs0MTk5LDcgQEAgaW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLAogCWVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwotCWVycm9yID0gZGlyLSZndDtpX29wLSZndDtjcmVhdGUoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCB0cnVlKTsKJiM0MzsJZXJyb3IgPSBkaXItJmd0O2lfb3AtJmd0O2NyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpOwogCWlmICghZXJyb3IpCiAJCWZzbm90aWZ5X2NyZWF0ZShkaXIsIGRlbnRyeSk7CiAJcmV0dXJuIGVycm9yOwpAQCAtNDUwNSw4ICYjNDM7NDUwNSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQlnb3RvIG91dF9kcHV0OwogCQl9CiAKLQkJZXJyb3IgPSBkaXJfaW5vZGUtJmd0O2lfb3AtJmd0O2NyZWF0ZShpZG1hcCwgZGlyX2lub2RlLCBkZW50cnksCi0JCQkJCQltb2RlLCBvcGVuX2ZsYWcgJmFtcDsgT19FWENMKTsKJiM0MzsJCWVycm9yID0gZGlyX2lub2RlLSZndDtpX29wLSZndDtjcmVhdGUoaWRtYXAsIGRpcl9pbm9kZSwgZGVudHJ5LCBtb2RlKTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBvdXRfZHB1dDsKIAl9CmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyLmMgYi9mcy9uZnMvZGlyLmMKaW5kZXggYzdiNzIzYzE4NjIwYzkuLjI4MzBkZGM0MTZjZjc1IDEwMDY0NAotLS0gYS9mcy9uZnMvZGlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmZzL2Rpci5jCkBAIC0yNDI3LDkgJiM0MzsyNDI3LDkgQEAgc3RhdGljIGludCBuZnNfZG9fY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiB9CiAKIGludCBuZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbCkKJiM0MzsJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewotCXJldHVybiBuZnNfZG9fY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlLCBleGNsID8gT19FWENMIDogMCk7CiYjNDM7CXJldHVybiBuZnNfZG9fY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlLCBPX0VYQ0wpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobmZzX2NyZWF0ZSk7CiAKZGlmZiAtLWdpdCBhL2ZzL25mcy9pbnRlcm5hbC5oIGIvZnMvbmZzL2ludGVybmFsLmgKaW5kZXggYWNhZWZmN2RkZmRmNzAuLmRkNzdkNWU4MGQ3YjkzIDEwMDY0NAotLS0gYS9mcy9uZnMvaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9uZnMvaW50ZXJuYWwuaApAQCAtMzk1LDcgJiM0MzszOTUsNyBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyBuZnNfYWNjZXNzX2NhY2hlX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssCiBzdHJ1Y3QgZGVudHJ5ICpuZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIHVuc2lnbmVkIGludCk7CiB2b2lkIG5mc19kX3BydW5lX2Nhc2VfaW5zZW5zaXRpdmVfYWxpYXNlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGludCBuZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwKLQkgICAgICAgdW1vZGVfdCwgYm9vbCk7CiYjNDM7CSAgICAgICB1bW9kZV90KTsKIHN0cnVjdCBkZW50cnkgKm5mc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosCiAJCQkgdW1vZGVfdCk7CiBpbnQgbmZzX3JtZGlyKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICopOwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL25hbWVpLmMgYi9mcy9uaWxmczIvbmFtZWkuYwppbmRleCBlMmZlOTVkZTNkNzFjYS4uMGUwYTk4NTBmZjc2ZGMgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25pbGZzMi9uYW1laS5jCkBAIC04Niw3ICYjNDM7ODYsNyBAQCBuaWxmc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW5zaWduZWQgaW50IGZsYWdzKQogICogd2l0aCBkX2luc3RhbnRpYXRlKCkuCiAgKi8KIHN0YXRpYyBpbnQgbmlsZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpCiYjNDM7CQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlzdHJ1Y3QgbmlsZnNfdHJhbnNhY3Rpb25faW5mbyB0aTsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvbmFtZWkuYyBiL2ZzL250ZnMvbmFtZWkuYwppbmRleCBhMTk2MjZhMTM1YmQ3Zi4uYjRkYzZkYTIyNjU5NmIgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzL25hbWVpLmMKQEAgLTczNiw3ICYjNDM7NzM2LDcgQEAgc3RhdGljIHN0cnVjdCBudGZzX2lub2RlICpfX250ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmQKIH0KIAogc3RhdGljIGludCBudGZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCi0JCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpCiYjNDM7CQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKIHsKIAlzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCA9IE5URlNfU0IoZGlyLSZndDtpX3NiKTsKIAlzdHJ1Y3QgbnRmc19pbm9kZSAqbmk7CmRpZmYgLS1naXQgYS9mcy9udGZzMy9uYW1laS5jIGIvZnMvbnRmczMvbmFtZWkuYwppbmRleCBjNTlkZTVmMmZhOTc3MS4uNmQwMzJiMjJjOTdkYWYgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMzL25hbWVpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmczMvbmFtZWkuYwpAQCAtMTA1LDcgJiM0MzsxMDUsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbnRmc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKICAqIG50ZnNfY3JlYXRlIC0gaW5vZGVfb3BlcmF0aW9uczo6Y3JlYXRlCiAgKi8KIHN0YXRpYyBpbnQgbnRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbCkKJiM0MzsJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKIHsKIAlyZXR1cm4gbnRmc19jcmVhdGVfaW5vZGUoaWRtYXAsIGRpciwgZGVudHJ5LCBOVUxMLCBTX0lGUkVHIHwgbW9kZSwgMCwKIAkJCQkgTlVMTCwgMCwgTlVMTCk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG1mcy9kbG1mcy5jIGIvZnMvb2NmczIvZGxtZnMvZGxtZnMuYwppbmRleCA1ODIxZTMzZGY3OGZkOS4uZjAxMjRmODFkZjI5YjAgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbWZzL2RsbWZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIvZGxtZnMvZGxtZnMuYwpAQCAtNDUzLDggJiM0Mzs0NTMsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqZGxtZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqIGlkbWFwLAogc3RhdGljIGludCBkbG1mc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJCQlzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCXVtb2RlX3QgbW9kZSwKLQkJCWJvb2wgZXhjbCkKJiM0MzsJCQl1bW9kZV90IG1vZGUpCiB7CiAJaW50IHN0YXR1cyA9IDA7CiAJc3RydWN0IGlub2RlICppbm9kZTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL25hbWVpLmMgYi9mcy9vY2ZzMi9uYW1laS5jCmluZGV4IDEyNzc2NjZjNzdjZDJkLi4xMmExZmVmM2VlNzRlNiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9vY2ZzMi9uYW1laS5jCkBAIC02NjcsOCAmIzQzOzY2Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvY2ZzMl9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIHN0YXRpYyBpbnQgb2NmczJfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCQkJc3RydWN0IGlub2RlICpkaXIsCiAJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQl1bW9kZV90IG1vZGUsCi0JCQlib29sIGV4Y2wpCiYjNDM7CQkJdW1vZGVfdCBtb2RlKQogewogCWludCByZXQ7CiAKZGlmZiAtLWdpdCBhL2ZzL29tZnMvZGlyLmMgYi9mcy9vbWZzL2Rpci5jCmluZGV4IDJlZDU0MWZjY2YzMzFkLi5hMDlhOThmN2UzMGJjNiAxMDA2NDQKLS0tIGEvZnMvb21mcy9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9vbWZzL2Rpci5jCkBAIC0yODYsNyAmIzQzOzI4Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvbWZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIH0KIAogc3RhdGljIGludCBvbWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCi0JCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCXJldHVybiBvbWZzX2FkZF9ub2RlKGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRlJFRyk7CiB9CmRpZmYgLS1naXQgYS9mcy9vcmFuZ2Vmcy9uYW1laS5jIGIvZnMvb3JhbmdlZnMvbmFtZWkuYwppbmRleCA3NWU2NWU3MmMyZDY0Ni4uOTFmOTdkYjE4OTcxYmYgMTAwNjQ0Ci0tLSBhL2ZzL29yYW5nZWZzL25hbWVpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvb3JhbmdlZnMvbmFtZWkuYwpAQCAtMTgsOCAmIzQzOzE4LDcgQEAKIHN0YXRpYyBpbnQgb3JhbmdlZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCQkJc3RydWN0IGlub2RlICpkaXIsCiAJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQl1bW9kZV90IG1vZGUsCi0JCQlib29sIGV4Y2x1c2l2ZSkKJiM0MzsJCQl1bW9kZV90IG1vZGUpCiB7CiAJc3RydWN0IG9yYW5nZWZzX2lub2RlX3MgKnBhcmVudCA9IE9SQU5HRUZTX0koZGlyKTsKIAlzdHJ1Y3Qgb3JhbmdlZnNfa2VybmVsX29wX3MgKm5ld19vcDsKZGlmZiAtLWdpdCBhL2ZzL292ZXJsYXlmcy9kaXIuYyBiL2ZzL292ZXJsYXlmcy9kaXIuYwppbmRleCBhMDMzNzQzZGJmNTE1OS4uODhiY2Y5OGQyODdkMWUgMTAwNjQ0Ci0tLSBhL2ZzL292ZXJsYXlmcy9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9vdmVybGF5ZnMvZGlyLmMKQEAgLTczMiw3ICYjNDM7NzMyLDcgQEAgc3RhdGljIGludCBvdmxfY3JlYXRlX29iamVjdChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlLCBkZXZfdCByZGV2LAogfQogCiBzdGF0aWMgaW50IG92bF9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiB7CiAJcmV0dXJuIG92bF9jcmVhdGVfb2JqZWN0KGRlbnRyeSwgKG1vZGUgJmFtcDsgMDc3NzcpIHwgU19JRlJFRywgMCwgTlVMTCk7CiB9CmRpZmYgLS1naXQgYS9mcy9yYW1mcy9pbm9kZS5jIGIvZnMvcmFtZnMvaW5vZGUuYwppbmRleCAzOTg3NjM5ZWQxMzJjNi4uMGY1MmJhMjJhYWMwNGMgMTAwNjQ0Ci0tLSBhL2ZzL3JhbWZzL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvcmFtZnMvaW5vZGUuYwpAQCAtMTI4LDcgJiM0MzsxMjgsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqcmFtZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogfQogCiBzdGF0aWMgaW50IHJhbWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCi0JCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCXJldHVybiByYW1mc19ta25vZCgmYW1wO25vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRlJFRywgMCk7CiB9CmRpZmYgLS1naXQgYS9mcy9zbWIvY2xpZW50L2NpZnNmcy5oIGIvZnMvc21iL2NsaWVudC9jaWZzZnMuaAppbmRleCA5MDFlMTM0MGM5ODZmYi4uYmNmMmZmODdkYTJkNWMgMTAwNjQ0Ci0tLSBhL2ZzL3NtYi9jbGllbnQvY2lmc2ZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvc21iL2NsaWVudC9jaWZzZnMuaApAQCAtNTQsNyAmIzQzOzU0LDcgQEAgdm9pZCBjaWZzX3NiX2RlYWN0aXZlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNpZnNfZGlyX2lub2RlX29wczsKIHN0cnVjdCBpbm9kZSAqY2lmc19yb290X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CiBpbnQgY2lmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAotCQlzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpOwomIzQzOwkJc3RydWN0IGRlbnRyeSAqZGlyZW50cnksIHVtb2RlX3QgbW9kZSk7CiBpbnQgY2lmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGlyZW50cnksCiAJCSAgICAgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBvZmxhZ3MsIHVtb2RlX3QgbW9kZSk7CiBpbnQgY2lmc190bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKZGlmZiAtLWdpdCBhL2ZzL3NtYi9jbGllbnQvZGlyLmMgYi9mcy9zbWIvY2xpZW50L2Rpci5jCmluZGV4IDg4YTRhMTc4N2ZmMDQ3Li43ODAzYmQ1YmQwMWY4MCAxMDA2NDQKLS0tIGEvZnMvc21iL2NsaWVudC9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9zbWIvY2xpZW50L2Rpci5jCkBAIC02NDUsNyAmIzQzOzY0NSw3IEBAIGludCBjaWZzX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSwKICAqIGhhc2hlZC1wb3NpdGl2ZSBieSBjYWxsaW5nIGRfaW5zdGFudGlhdGUoKS4KICAqLwogaW50IGNpZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJc3RydWN0IGRlbnRyeSAqZGlyZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJc3RydWN0IGRlbnRyeSAqZGlyZW50cnksIHVtb2RlX3QgbW9kZSkKIHsKIAlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiID0gQ0lGU19TQihkaXIpOwogCWludCByYzsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2Rpci5jIGIvZnMvdWJpZnMvZGlyLmMKaW5kZXggODZkNDFlMDc3ZTRkNjIuLmZkOGRmMTA1NDdiZjQyIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy91Ymlmcy9kaXIuYwpAQCAtMzAzLDcgJiM0MzszMDMsNyBAQCBzdGF0aWMgaW50IHViaWZzX3ByZXBhcmVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiB9CiAKIHN0YXRpYyBpbnQgdWJpZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpCiYjNDM7CQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlzdHJ1Y3QgdWJpZnNfaW5mbyAqYyA9IGRpci0mZ3Q7aV9zYi0mZ3Q7c19mc19pbmZvOwpkaWZmIC0tZ2l0IGEvZnMvdWRmL25hbWVpLmMgYi9mcy91ZGYvbmFtZWkuYwppbmRleCA5YTNiN2NlZjM2MDY0OC4uZmQ5YjZmMTZmNjE0NjIgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3VkZi9uYW1laS5jCkBAIC0zNzEsNyAmIzQzOzM3MSw3IEBAIHN0YXRpYyBpbnQgdWRmX2FkZF9ub25kaXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogfQogCiBzdGF0aWMgaW50IHVkZl9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IHVkZl9uZXdfaW5vZGUoZGlyLCBtb2RlKTsKIApkaWZmIC0tZ2l0IGEvZnMvdWZzL25hbWVpLmMgYi9mcy91ZnMvbmFtZWkuYwppbmRleCA1YjNjODVjOTMyNDI5OC4uNTAxMmUwNTYyMDBhY2EgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Vmcy9uYW1laS5jCkBAIC03MCw4ICYjNDM7NzAsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqdWZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKiBkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW5zaQogICogd2l0aCBkX2luc3RhbnRpYXRlKCkuIAogICovCiBzdGF0aWMgaW50IHVmc19jcmVhdGUgKHN0cnVjdCBtbnRfaWRtYXAgKiBpZG1hcCwKLQkJc3RydWN0IGlub2RlICogZGlyLCBzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5LCB1bW9kZV90IG1vZGUsCi0JCWJvb2wgZXhjbCkKJiM0MzsJCXN0cnVjdCBpbm9kZSAqIGRpciwgc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAKZGlmZiAtLWdpdCBhL2ZzL3Zib3hzZi9kaXIuYyBiL2ZzL3Zib3hzZi9kaXIuYwppbmRleCBjNWJkMzI3MWFhOTYxNi4uMGI5ZWFiMTU3NDMyZGYgMTAwNjQ0Ci0tLSBhL2ZzL3Zib3hzZi9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy92Ym94c2YvZGlyLmMKQEAgLTI5OCw5ICYjNDM7Mjk4LDkgQEAgc3RhdGljIGludCB2Ym94c2ZfZGlyX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCiBzdGF0aWMgaW50IHZib3hzZl9kaXJfbWtmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCQkJICAgICBzdHJ1Y3QgaW5vZGUgKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJICAgICB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbCkKJiM0MzsJCQkgICAgIHVtb2RlX3QgbW9kZSkKIHsKLQlyZXR1cm4gdmJveHNmX2Rpcl9jcmVhdGUocGFyZW50LCBkZW50cnksIG1vZGUsIGZhbHNlLCBleGNsLCBOVUxMKTsKJiM0MzsJcmV0dXJuIHZib3hzZl9kaXJfY3JlYXRlKHBhcmVudCwgZGVudHJ5LCBtb2RlLCBmYWxzZSwgdHJ1ZSwgTlVMTCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp2Ym94c2ZfZGlyX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb3BzLmMgYi9mcy94ZnMveGZzX2lvcHMuYwppbmRleCA2MzM5ZjQ5NTZlY2IzOS4uZTQ4ZjllNWExYjhhMTggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW9wcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfaW9wcy5jCkBAIC0yOTMsOCAmIzQzOzI5Myw3IEBAIHhmc192bl9jcmVhdGUoCiAJc3RydWN0IG1udF9pZG1hcAkqaWRtYXAsCiAJc3RydWN0IGlub2RlCQkqZGlyLAogCXN0cnVjdCBkZW50cnkJCSpkZW50cnksCi0JdW1vZGVfdAkJCW1vZGUsCi0JYm9vbAkJCWZsYWdzKQomIzQzOwl1bW9kZV90CQkJbW9kZSkKIHsKIAlyZXR1cm4geGZzX2dlbmVyaWNfY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgMCwgTlVMTCk7CiB9CkBAIC0zMzgsNyAmIzQzOzMzNyw3IEBAIFNUQVRJQyBzdHJ1Y3QgZGVudHJ5ICoKIHhmc192bl9jaV9sb29rdXAoCiAJc3RydWN0IGlub2RlCSpkaXIsCiAJc3RydWN0IGRlbnRyeQkqZGVudHJ5LAotCXVuc2lnbmVkIGludCBmbGFncykKJiM0MzsJdW5zaWduZWQgaW50CWZsYWdzKQogewogCXN0cnVjdCB4ZnNfaW5vZGUgKmlwOwogCXN0cnVjdCB4ZnNfbmFtZQl4bmFtZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCBkMTA4OTdiM2ExZTM1MC4uMWI3YzQwYjJmYTZkZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTIwMDIsNyAmIzQzOzIwMDIsNyBAQCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB7CiAJaW50ICgqcmVhZGxpbmspIChzdHJ1Y3QgZGVudHJ5ICosIGNoYXIgX191c2VyICosaW50KTsKIAogCWludCAoKmNyZWF0ZSkgKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqLAotCQkgICAgICAgdW1vZGVfdCwgYm9vbCk7CiYjNDM7CQkgICAgICAgdW1vZGVfdCk7CiAJaW50ICgqbGluaykgKHN0cnVjdCBkZW50cnkgKixzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICopOwogCWludCAoKnVubGluaykgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKik7CiAJaW50ICgqc3ltbGluaykgKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqLApkaWZmIC0tZ2l0IGEvaXBjL21xdWV1ZS5jIGIvaXBjL21xdWV1ZS5jCmluZGV4IDQ3OThiMzc1OTcyYmY0Li4yZGRkYjk3ZjJmOGE1NSAxMDA2NDQKLS0tIGEvaXBjL21xdWV1ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2lwYy9tcXVldWUuYwpAQCAtNjA4LDcgJiM0Mzs2MDgsNyBAQCBzdGF0aWMgaW50IG1xdWV1ZV9jcmVhdGVfYXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgdm9pZCAqYXJnKQogfQogCiBzdGF0aWMgaW50IG1xdWV1ZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpCiYjNDM7CQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCXJldHVybiBtcXVldWVfY3JlYXRlX2F0dHIoZGVudHJ5LCBtb2RlLCBOVUxMKTsKIH0KZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IGI1MWY4M2M5NzBiYjM3Li41Nzg5YTBmNWEzNDYzYiAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jCkBAIC0zODY0LDcgJiM0MzszODY0LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKnNobWVtX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIH0KIAogc3RhdGljIGludCBzaG1lbV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbCkKJiM0MzsJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKIHsKIAlyZXR1cm4gc2htZW1fbWtub2QoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRlJFRywgMCk7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzYwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTIwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZGUyBBUEkgQ2hhbmdlIGZvciBgY3JlYXRlYCBJbm9kZSBPcGVyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBmdW5kYW1lbnRhbGx5IGFsdGVycyB0aGUgYGNyZWF0ZWAgaW5vZGUgb3BlcmF0aW9uIGluIHRoZSBWRlMgbGF5ZXIuIFNwZWNpZmljYWxseSwgdGhlIGBleGNsYCBhcmd1bWVudCwgd2hpY2ggaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGZpbGUgbXVzdCBiZSBjcmVhdGVkIGV4Y2x1c2l2ZWx5LCBpcyBiZWluZyByZW1vdmVkIGZyb20gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZS4gVGhpcyBjaGFuZ2UgcmlwcGxlcyB0aHJvdWdoIHRoZSBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9ucywgYWZmZWN0aW5nIGhvdyB0aGV5IGhhbmRsZSBmaWxlIGNyZWF0aW9uLiBUaGUgY2hhbmdlcyBpbmNsdWRlIHVwZGF0ZXMgdG8gdGhlIGRvY3VtZW50YXRpb24gKGBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0YCksIHRoZSBoZWFkZXIgZmlsZSAoYGluY2x1ZGUvbGludXgvZnMuaGApLCBhbmQgYSBtdWx0aXR1ZGUgb2YgZmlsZXN5c3RlbS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgKGxpa2UgYDlwYCwgYGV4dDRgLCBgYnRyZnNgLCBldGMuKS4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbGllcyBpbiBgZnMvbmFtZWkuY2AsIHdoZXJlIGB2ZnNfY3JlYXRlYCBhbmQgYGxvb2t1cF9vcGVuYCBjYWxsIHRoZSBgY3JlYXRlYCBmdW5jdGlvbi4gQmVmb3JlLCBgbG9va3VwX29wZW5gIHdvdWxkIHBhc3MgdGhlIGBPX0VYQ0xgIGZsYWcgdmlhIHRoZSBgZXhjbGAgYXJndW1lbnQuIE5vdywgdGhhdCBhcmd1bWVudCBpcyBnb25lLiBUaGUgY29tbWl0IG1lc3NhZ2UgY2xhcmlmaWVzIHRoYXQgdGhlIGBjcmVhdGVgIGZ1bmN0aW9uICptdXN0KiBhc3N1bWUgZXhjbHVzaXZpdHkgYnkgZGVmYXVsdC4gSWYgYSBmaWxlc3lzdGVtIG5lZWRzIHRvIGhhbmRsZSBub24tZXhjbHVzaXZlIGNyZWF0ZXMsIHRoZSBzdWdnZXN0aW9uIGlzIHRvIGltcGxlbWVudCBgYXRvbWljX29wZW5gLgoKVGhpcyBpcyBhIHN0cnVjdHVyYWwgQVBJIGNoYW5nZSwgcmVtb3ZpbmcgYW4gYXJndW1lbnQgZnJvbSB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlLiBJdCYjMzk7cyBub3QgaW50cm9kdWNpbmcgYW55IG5ldyBmdW5kYW1lbnRhbCBmdW5jdGlvbmFsaXR5LCBidXQgcmF0aGVyIHNoaWZ0aW5nIHRoZSByZXNwb25zaWJpbGl0eSBmb3IgZXhjbHVzaXZlIGNyZWF0aW9uLiBUaGUgbG9naWMgb2YgdGhlIGZpbGVzeXN0ZW1zIHRoZW1zZWx2ZXMgYXBwZWFycyBtb3N0bHkgdW5jaGFuZ2VkLCB0aGV5JiMzOTtyZSBzaW1wbHkgYWRhcHRpbmcgdG8gdGhlIG5ldyBzaWduYXR1cmUuIFRoZSBpbXBvcnRhbnQgYml0IGlzIHRoYXQgdGhlIFZGUyAqbm93KiBoYW5kbGVzIHRoZSBleGNsdXNpdml0eSBjaGVjazsgYmVmb3JlLCBpdCB3YXMgcGFydGlhbGx5IGRlbGVnYXRlZC4KCkl0IGRvZXMgbG9vayBsaWtlIHNvbWUgZmlsZXN5c3RlbXMgYXJlIGhhcmRjb2RpbmcgdGhlIGV4Y2x1c2l2ZSBjcmVhdGUgYmVoYXZpb3IsIGZvciBleGFtcGxlLCBgZ2ZzMmAgbm93IGV4cGxpY2l0bHkgc2V0cyBgZXhjbCA9IDFgIGluIGl0cyBjYWxsIHRvIGBnZnMyX2NyZWF0ZV9pbm9kZWAuIFRoZSBzYW1lIHBhdHRlcm4gYXBwbGllcyB0byBgbmZzYCBhbmQgYHZib3hzZmAuIFRoaXMgaXMgd2hlcmUgdGhlIHBvdGVudGlhbCBmb3IgaW50ZXJlc3RpbmcgYmVoYXZpb3IgZW1lcmdlczogZmlsZXN5c3RlbXMgcHJldmlvdXNseSByZWx5aW5nIG9uIHRoZSBgZXhjbGAgYXJndW1lbnQgdG8ga25vdyAqaWYqIGl0IHdhcyBhbiBleGNsdXNpdmUgY3JlYXRlIG5vdyAqYWx3YXlzKiBiZWhhdmUgYXMgaWYgdGhlIGZpbGUgbmVlZHMgdG8gYmUgY3JlYXRlZCBleGNsdXNpdmVseS4gVGhpcyBtaWdodCBjcmVhdGUgcmVncmVzc2lvbnMuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGEgcmVmYWN0b3JpbmcsIGJ1dCBhIHZlcnkgKndpZGUqIG9uZS4gSXMgaXQgd29ydGggc3BlY2lhbGl6ZWQgZnV6emluZz8gUHJvYmFibHkgbm90IGEgKm5ldyogc2V0IG9mIGZ1enplcnMsIGJ1dCBWRlMgY2hhbmdlcyBhcmUgYWx3YXlzIHVuZGVyIHNjcnV0aW55LiBXZSYjMzk7cmUgbm90IGFkZGluZyAqbmV3KiBmdW5jdGlvbmFsaXR5LCBidXQgd2UmIzM5O3JlIGNoYW5naW5nIHRoZSBiZWhhdmlvciBvZiBob3cgYGxvb2t1cF9vcGVuYCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBmaWxlc3lzdGVtcy4gVGhpcyBjaGFuZ2UgKmNvdWxkKiBhZmZlY3QgZmlsZXN5c3RlbXMgdGhhdCAqZG9uJiMzOTt0KiBpbXBsZW1lbnQgYGF0b21pY19vcGVuYCBhbmQgaGFkIGJlZW4gcmVseWluZyBvbiB0aGUgYGV4Y2xgIGFyZ3VtZW50IHRvIGNvbnRyb2wgd2hldGhlciB0byBjcmVhdGUgZXhjbHVzaXZlbHkgb3Igbm90LiBUaGlzIGlzIHNvbWV0aGluZyB3b3J0aCBhIGNsb3NlciBsb29rOiBBcmUgd2UgYnJlYWtpbmcgY29tcGF0aWJpbGl0eT8gSXMgdGhlcmUgYSBzdWJ0bGUgc2VtYW50aWMgZGlmZmVyZW5jZSBoZXJlPwoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhvc2UgZmlsZXN5c3RlbXMsIGxpa2UgYGdmczJgLCBhY3R1YWxseSAqZG8qIGltcGxlbWVudCBgYXRvbWljX29wZW5gIGJlY2F1c2UgaWYgdGhleSBkbywgdGhlbiB0aGlzIGVudGlyZSBzaGlmdCBpcyBsYXJnZWx5IHRyYW5zcGFyZW50LiBJZiB0aGV5IGRvbiYjMzk7dCwgdGhlbiB0aGlzIGlzIHNpZ25pZmljYW50LCBhbmQgd2UgbmVlZCB0byBsb29rIGZvciByZWdyZXNzaW9ucy4gTGV0IG1lIGNoZWNrIGlmIGBnZnMyYCBoYXMgaW1wbGVtZW50ZWQgYGF0b21pY19vcGVuYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdG9taWNfb3BlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2dmczIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2dmczIvZmlsZS5jPTU5MT1zdGF0aWMgaW50IGdmczJfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxuZnMvZ2ZzMi9maWxlLmMtNjEzLS8qKlxuZnMvZ2ZzMi9maWxlLmM6NjE0OiAqIGdmczJfb3Blbl9jb21tb24gLSBUaGlzIGlzIGNvbW1vbiB0byBvcGVuIGFuZCBhdG9taWNfb3BlblxuZnMvZ2ZzMi9maWxlLmMtNjE1LSAqIEBpbm9kZTogVGhlIGlub2RlIGJlaW5nIG9wZW5lZFxuLS1cbmZzL2dmczIvZmlsZS5jPTYyNj1pbnQgZ2ZzMl9vcGVuX2NvbW1vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5mcy9nZnMyL2ZpbGUuYy02NjUtICpcbmZzL2dmczIvZmlsZS5jOjY2NjogKiBBZnRlciBhdG9taWNfb3BlbiwgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IHVzZWQgZm9yIG9wZW5pbmcgZmlsZXNcbmZzL2dmczIvZmlsZS5jLTY2Ny0gKiB3aGljaCBhcmUgYWxyZWFkeSBjYWNoZWQuIFdlIG11c3Qgc3RpbGwgZ2V0IHRoZSBnbG9jayBmb3IgcmVndWxhclxuLS1cbmZzL2dmczIvaW5vZGUuYz0xMzY3PXN0YXRpYyBpbnQgZ2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvZ2ZzMi9pbm9kZS5jLTEzNzMtLyoqXG5mcy9nZnMyL2lub2RlLmM6MTM3NDogKiBnZnMyX2F0b21pY19vcGVuIC0gQXRvbWljYWxseSBvcGVuIGEgZmlsZVxuZnMvZ2ZzMi9pbm9kZS5jLTEzNzUtICogQGRpcjogVGhlIGRpcmVjdG9yeVxuLS1cbmZzL2dmczIvaW5vZGUuYy0xMzgzLVxuZnMvZ2ZzMi9pbm9kZS5jOjEzODQ6c3RhdGljIGludCBnZnMyX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5mcy9nZnMyL2lub2RlLmMtMTM4NS1cdFx0XHQgICAgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGZsYWdzLFxuLS1cbmZzL2dmczIvaW5vZGUuYz0yMzA4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBnZnMyX2Rpcl9pb3BzID0ge1xuLS1cbmZzL2dmczIvaW5vZGUuYy0yMzI1LVx0LnVwZGF0ZV90aW1lID0gZ2ZzMl91cGRhdGVfdGltZSxcbmZzL2dmczIvaW5vZGUuYzoyMzI2Olx0LmF0b21pY19vcGVuID0gZ2ZzMl9hdG9taWNfb3BlbixcbmZzL2dmczIvaW5vZGUuYy0yMzI3LVx0LmZpbGVhdHRyX2dldCA9IGdmczJfZmlsZWF0dHJfZ2V0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjA0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkZpbGUgU3lzdGVtIEF0b21pYyBPcGVuczogQSBRdWljayBNZW50YWwgQ2hlY2sqKgoKUmlnaHQsICpnZnMyKiBoYXMgYGF0b21pY19vcGVuYCBpbXBsZW1lbnRlZCwgdGhhdCYjMzk7cyBjbGVhci4gTm8gc3VycHJpc2VzIHRoZXJlOyBpdCYjMzk7cyBkZXNpZ25lZCBmb3IgdGhhdCBraW5kIG9mIHJvYnVzdCwgY2x1c3RlcmVkIGVudmlyb25tZW50LiBCdXQgbm93IEkmIzM5O20gc2hpZnRpbmcgZ2VhcnMsIGFuZCBhIG5ldyBxdWVzdGlvbiBwb3BzIHVwOiBXaGF0IGFib3V0IE5GUz8gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSBORlMgcHJvdG9jb2wgYW5kIHNlZSBpZiBpdCBwcm92aWRlcyBhbnkgaW5oZXJlbnQgc3VwcG9ydCBvciBpZiBpdCByZWxpZXMgb24gdW5kZXJseWluZyBtZWNoYW5pc21zIGZvciBzb21ldGhpbmcgbGlrZSBhdG9taWMgb3BlbnMuIEl0JiMzOTtzIGEga2V5IGRldGFpbCB3aGVuIGNvbnNpZGVyaW5nIGRpc3RyaWJ1dGVkIGZpbGUgc3lzdGVtIGRlc2lnbiwgYXMgSSYjMzk7bSBzdXJlIGl0JiMzOTtsbCBpbXBhY3QgaG93IHRoZSBzeXN0ZW0gYXMgYSB3aG9sZSBkZWFscyB3aXRoIGZpbGUgYWNjZXNzZXMuIERvZXMgaXQgZGVmZXIgdG8gdGhlIHVuZGVybHlpbmcgc3RvcmFnZSBmb3IgYXRvbWljaXR5PyBPciBkb2VzIHRoZSBjbGllbnQtc2lkZSBpbnRlcmFjdGlvbiBzb21laG93IGhhbmRsZSB0aGlzPyBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgc3BlY3MuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdG9taWNfb3BlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25mcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmZzL2Rpci5jPTIwODc9c3RhdGljIGludCBuZnNfZmluaXNoX29wZW4oc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCxcbi0tXG5mcy9uZnMvZGlyLmMtMjEwMy1cbmZzL25mcy9kaXIuYzoyMTA0OmludCBuZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbmZzL25mcy9kaXIuYy0yMTA1LVx0XHQgICAgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIG9wZW5fZmxhZ3MsXG4tLVxuZnMvbmZzL2Rpci5jLTIxMjAtXG5mcy9uZnMvZGlyLmM6MjEyMTpcdGRmcHJpbnRrKFZGUywgXCYjMzQ7TkZTOiBhdG9taWNfb3Blbiglcy8lbGx1KSwgJXBkXFxuXCYjMzQ7LFxuZnMvbmZzL2Rpci5jLTIxMjItXHRcdFx0ZGlyLVx1MDAzZWlfc2ItXHUwMDNlc19pZCwgZGlyLVx1MDAzZWlfaW5vLCBkZW50cnkpO1xuLS1cbmZzL25mcy9kaXIuYy0yMTc0LVxuZnMvbmZzL2Rpci5jOjIxNzU6XHR0cmFjZV9uZnNfYXRvbWljX29wZW5fZW50ZXIoZGlyLCBjdHgsIG9wZW5fZmxhZ3MpO1xuZnMvbmZzL2Rpci5jLTIxNzYtXHRpbm9kZSA9IE5GU19QUk9UTyhkaXIpLVx1MDAzZW9wZW5fY29udGV4dChkaXIsIGN0eCwgb3Blbl9mbGFncywgXHUwMDI2YXR0ciwgXHUwMDI2Y3JlYXRlZCk7XG4tLVxuZnMvbmZzL2Rpci5jLTIxODAtXHRcdGVyciA9IFBUUl9FUlIoaW5vZGUpO1xuZnMvbmZzL2Rpci5jOjIxODE6XHRcdHRyYWNlX25mc19hdG9taWNfb3Blbl9leGl0KGRpciwgY3R4LCBvcGVuX2ZsYWdzLCBlcnIpO1xuZnMvbmZzL2Rpci5jLTIxODItXHRcdHB1dF9uZnNfb3Blbl9jb250ZXh0KGN0eCk7XG4tLVxuZnMvbmZzL2Rpci5jLTIyMTItXHRlcnIgPSBuZnNfZmluaXNoX29wZW4oY3R4LCBjdHgtXHUwMDNlZGVudHJ5LCBmaWxlLCBvcGVuX2ZsYWdzKTtcbmZzL25mcy9kaXIuYzoyMjEzOlx0dHJhY2VfbmZzX2F0b21pY19vcGVuX2V4aXQoZGlyLCBjdHgsIG9wZW5fZmxhZ3MsIGVycik7XG5mcy9uZnMvZGlyLmMtMjIxNC1cdHB1dF9uZnNfb3Blbl9jb250ZXh0KGN0eCk7XG4tLVxuZnMvbmZzL2Rpci5jLTIyNTAtfVxuZnMvbmZzL2Rpci5jOjIyNTE6RVhQT1JUX1NZTUJPTF9HUEwobmZzX2F0b21pY19vcGVuKTtcbmZzL25mcy9kaXIuYy0yMjUyLVxuLS1cbmZzL25mcy9kaXIuYz0yMjU0PW5mczRfbG9va3VwX3JldmFsaWRhdGUoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuLS1cbmZzL25mcy9kaXIuYy0yMzA1LVxuZnMvbmZzL2Rpci5jOjIzMDY6aW50IG5mc19hdG9taWNfb3Blbl92MjMoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbmZzL25mcy9kaXIuYy0yMzA3LVx0XHRcdHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgb3Blbl9mbGFncyxcbi0tXG5mcy9uZnMvZGlyLmMtMjMzNi19XG5mcy9uZnMvZGlyLmM6MjMzNzpFWFBPUlRfU1lNQk9MX0dQTChuZnNfYXRvbWljX29wZW5fdjIzKTtcbmZzL25mcy9kaXIuYy0yMzM4LVxuLS1cbmZzL25mcy9uZnMzcHJvYy5jPTEwNDI9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG5mczNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XG5mcy9uZnMvbmZzM3Byb2MuYy0xMDQzLVx0LmNyZWF0ZVx0XHQ9IG5mc19jcmVhdGUsXG5mcy9uZnMvbmZzM3Byb2MuYzoxMDQ0Olx0LmF0b21pY19vcGVuXHQ9IG5mc19hdG9taWNfb3Blbl92MjMsXG5mcy9uZnMvbmZzM3Byb2MuYy0xMDQ1LVx0Lmxvb2t1cFx0XHQ9IG5mc19sb29rdXAsXG4tLVxuZnMvbmZzL25mczRfZnMuaD0yODI9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBuZnM0X2RlbnRyeV9vcGVyYXRpb25zO1xuLS1cbmZzL25mcy9uZnM0X2ZzLmgtMjg0LS8qIGRpci5jICovXG5mcy9uZnMvbmZzNF9mcy5oOjI4NTppbnQgbmZzX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBmaWxlICosXG5mcy9uZnMvbmZzNF9mcy5oLTI4Ni1cdFx0ICAgIHVuc2lnbmVkLCB1bW9kZV90KTtcbi0tXG5mcy9uZnMvbmZzNHByb2MuYz0xMjYxPXN0cnVjdCBuZnM0X29wZW5fY3JlYXRlYXR0cnMge1xuLS1cbmZzL25mcy9uZnM0cHJvYy5jLTEyNjYtXG5mcy9uZnMvbmZzNHByb2MuYzoxMjY3OnN0YXRpYyBib29sIG5mczRfY2xlYXJfY2FwX2F0b21pY19vcGVuX3YxKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsXG5mcy9uZnMvbmZzNHByb2MuYy0xMjY4LVx0XHRpbnQgZXJyLCBzdHJ1Y3QgbmZzNF9leGNlcHRpb24gKmV4Y2VwdGlvbilcbi0tXG5mcy9uZnMvbmZzNHByb2MuYz0xMzA5PXN0YXRpYyB1MzJcbmZzL25mcy9uZnM0cHJvYy5jOjEzMTA6bmZzNF9tYXBfYXRvbWljX29wZW5fc2hhcmUoc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlcixcbmZzL25mcy9uZnM0cHJvYy5jLTEzMTEtXHRcdGZtb2RlX3QgZm1vZGUsIGludCBvcGVuZmxhZ3MpXG4tLVxuZnMvbmZzL25mczRwcm9jLmM9MTMzMT1zdGF0aWMgZW51bSBvcGVuX2NsYWltX3R5cGU0XG5mcy9uZnMvbmZzNHByb2MuYzoxMzMyOm5mczRfbWFwX2F0b21pY19vcGVuX2NsYWltKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsXG5mcy9uZnMvbmZzNHByb2MuYy0xMzMzLVx0XHRlbnVtIG9wZW5fY2xhaW1fdHlwZTQgY2xhaW0pXG4tLVxuZnMvbmZzL25mczRwcm9jLmM9MTM2MD1zdGF0aWMgc3RydWN0IG5mczRfb3BlbmRhdGEgKm5mczRfb3BlbmRhdGFfYWxsb2Moc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL25mcy9uZnM0cHJvYy5jLTEzOTUtXHRwLVx1MDAzZW9fYXJnLmZtb2RlID0gZm1vZGUgXHUwMDI2IChGTU9ERV9SRUFEfEZNT0RFX1dSSVRFKTtcbmZzL25mcy9uZnM0cHJvYy5jOjEzOTY6XHRwLVx1MDAzZW9fYXJnLmNsYWltID0gbmZzNF9tYXBfYXRvbWljX29wZW5fY2xhaW0oc2VydmVyLCBjbGFpbSk7XG5mcy9uZnMvbmZzNHByb2MuYzoxMzk3Olx0cC1cdTAwM2VvX2FyZy5zaGFyZV9hY2Nlc3MgPSBuZnM0X21hcF9hdG9taWNfb3Blbl9zaGFyZShzZXJ2ZXIsXG5mcy9uZnMvbmZzNHByb2MuYy0xMzk4LVx0XHRcdGZtb2RlLCBmbGFncyk7XG4tLVxuZnMvbmZzL25mczRwcm9jLmM9MjE2Nj1zdGF0aWMgaW50IG5mczRfb3Blbl9yZWNvdmVyX2hlbHBlcihzdHJ1Y3QgbmZzNF9vcGVuZGF0YSAqb3BlbmRhdGEsXG4tLVxuZnMvbmZzL25mczRwcm9jLmMtMjE3Ny1cdG9wZW5kYXRhLVx1MDAzZW9fYXJnLnNoYXJlX2FjY2VzcyA9XG5mcy9uZnMvbmZzNHByb2MuYzoyMTc4Olx0XHRuZnM0X21hcF9hdG9taWNfb3Blbl9zaGFyZShzZXJ2ZXIsIGZtb2RlLCBvcGVuZmxhZ3MpO1xuZnMvbmZzL25mczRwcm9jLmMtMjE3OS1cdG1lbXNldChcdTAwMjZvcGVuZGF0YS1cdTAwM2VvX3JlcywgMCwgc2l6ZW9mKG9wZW5kYXRhLVx1MDAzZW9fcmVzKSk7XG4tLVxuZnMvbmZzL25mczRwcm9jLmM9MjI2MT1zdGF0aWMgaW50IG5mczRfZG9fb3Blbl9yZWNsYWltKHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgsIHN0cnVjdCBuZnM0X3N0YXRlICpzdGF0ZSlcbi0tXG5mcy9uZnMvbmZzNHByb2MuYy0yMjY4LVx0XHR0cmFjZV9uZnM0X29wZW5fcmVjbGFpbShjdHgsIDAsIGVycik7XG5mcy9uZnMvbmZzNHByb2MuYzoyMjY5Olx0XHRpZiAobmZzNF9jbGVhcl9jYXBfYXRvbWljX29wZW5fdjEoc2VydmVyLCBlcnIsIFx1MDAyNmV4Y2VwdGlvbikpXG5mcy9uZnMvbmZzNHByb2MuYy0yMjcwLVx0XHRcdGNvbnRpbnVlO1xuLS1cbmZzL25mcy9uZnM0cHJvYy5jPTI3ODY9c3RhdGljIGludCBuZnM0X2RvX29wZW5fZXhwaXJlZChzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4LCBzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUpXG4tLVxuZnMvbmZzL25mczRwcm9jLmMtMjc5NC1cdFx0dHJhY2VfbmZzNF9vcGVuX2V4cGlyZWQoY3R4LCAwLCBlcnIpO1xuZnMvbmZzL25mczRwcm9jLmM6Mjc5NTpcdFx0aWYgKG5mczRfY2xlYXJfY2FwX2F0b21pY19vcGVuX3YxKHNlcnZlciwgZXJyLCBcdTAwMjZleGNlcHRpb24pKVxuZnMvbmZzL25mczRwcm9jLmMtMjc5Ni1cdFx0XHRjb250aW51ZTtcbi0tXG5mcy9uZnMvbmZzNHByb2MuYz0zMjM0PXN0YXRpYyBzdHJ1Y3QgbmZzNF9zdGF0ZSAqbmZzNF9kb19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL25mcy9uZnM0cHJvYy5jLTMyOTktXHRcdH1cbmZzL25mcy9uZnM0cHJvYy5jOjMzMDA6XHRcdGlmIChuZnM0X2NsZWFyX2NhcF9hdG9taWNfb3Blbl92MShzZXJ2ZXIsIHN0YXR1cywgXHUwMDI2ZXhjZXB0aW9uKSlcbmZzL25mcy9uZnM0cHJvYy5jLTMzMDEtXHRcdFx0Y29udGludWU7XG4tLVxuZnMvbmZzL25mczRwcm9jLmM9MzgyNj1zdGF0aWMgc3RydWN0IGlub2RlICpcbmZzL25mcy9uZnM0cHJvYy5jOjM4Mjc6bmZzNF9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCxcbmZzL25mcy9uZnM0cHJvYy5jLTM4MjgtXHRcdGludCBvcGVuX2ZsYWdzLCBzdHJ1Y3QgaWF0dHIgKmF0dHIsIGludCAqb3BlbmVkKVxuLS1cbmZzL25mcy9uZnM0cHJvYy5jPTEwNjM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBuZnM0X2Rpcl9pbm9kZV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL25mcy9uZnM0cHJvYy5jLTEwNjM3LVx0Lmxvb2t1cFx0XHQ9IG5mc19sb29rdXAsXG5mcy9uZnMvbmZzNHByb2MuYzoxMDYzODpcdC5hdG9taWNfb3Blblx0PSBuZnNfYXRvbWljX29wZW4sXG5mcy9uZnMvbmZzNHByb2MuYy0xMDYzOS1cdC5saW5rXHRcdD0gbmZzX2xpbmssXG4tLVxuZnMvbmZzL25mczRwcm9jLmM9MTA2ODQ9Y29uc3Qgc3RydWN0IG5mc19ycGNfb3BzIG5mc192NF9jbGllbnRvcHMgPSB7XG4tLVxuZnMvbmZzL25mczRwcm9jLmMtMTA3MjgtXHQuY2xvc2VfY29udGV4dCAgPSBuZnM0X2Nsb3NlX2NvbnRleHQsXG5mcy9uZnMvbmZzNHByb2MuYzoxMDcyOTpcdC5vcGVuX2NvbnRleHRcdD0gbmZzNF9hdG9taWNfb3BlbixcbmZzL25mcy9uZnM0cHJvYy5jLTEwNzMwLVx0LmhhdmVfZGVsZWdhdGlvbiA9IG5mczRfaGF2ZV9kZWxlZ2F0aW9uLFxuLS1cbmZzL25mcy9uZnN0cmFjZS5oPTUxND1ERUZJTkVfTkZTX0xPT0tVUF9FVkVOVF9ET05FKG5mc19yZWFkZGlyX2xvb2t1cF9yZXZhbGlkYXRlKTtcbmZzL25mcy9uZnN0cmFjZS5oLTUxNS1cbmZzL25mcy9uZnN0cmFjZS5oOjUxNjpUUkFDRV9FVkVOVChuZnNfYXRvbWljX29wZW5fZW50ZXIsXG5mcy9uZnMvbmZzdHJhY2UuaC01MTctXHRcdFRQX1BST1RPKFxuLS1cbmZzL25mcy9uZnN0cmFjZS5oLTU1MS1cbmZzL25mcy9uZnN0cmFjZS5oOjU1MjpUUkFDRV9FVkVOVChuZnNfYXRvbWljX29wZW5fZXhpdCxcbmZzL25mcy9uZnN0cmFjZS5oLTU1My1cdFx0VFBfUFJPVE8oXG4tLVxuZnMvbmZzL3Byb2MuYz03MDg9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG5mc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9uZnMvcHJvYy5jLTcxMC1cdC5sb29rdXBcdFx0PSBuZnNfbG9va3VwLFxuZnMvbmZzL3Byb2MuYzo3MTE6XHQuYXRvbWljX29wZW5cdD0gbmZzX2F0b21pY19vcGVuX3YyMyxcbmZzL25mcy9wcm9jLmMtNzEyLVx0LmxpbmtcdFx0PSBuZnNfbGluayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTIwMwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UmIzM5O3ZlIGRlc2NyaWJlZDoKCioqQ29uc2lkZXJpbmcgQXRvbWljIE9wZW5zIGluIE5ldHdvcmsgRmlsZXN5c3RlbXMqKgoKSG1tLCBzbyBpdCBzZWVtcyBgbmZzYCBhY3R1YWxseSBwcm92aWRlcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBgYXRvbWljX29wZW5gLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgZ29vZCB0byBrbm93LiBCdXQsIHdoYXQgYWJvdXQgdGhlIHZpcnR1YWxib3ggc2hhcmVkIGZvbGRlciBmaWxlc3lzdGVtLCBgdmJveHNmYD8gSSB3b25kZXIgaWYgaXQgYWxzbyBwcm92aWRlcyBzdWNoIGEgZnVuY3Rpb25hbGl0eT8gVGhlIGltcGxpY2F0aW9ucyBvZiBoYXZpbmcgYXRvbWljIG9wZW4gb3BlcmF0aW9ucywgb3Igbm90LCBhcmUgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGZpbGUgc3lzdGVtIGNvbnNpc3RlbmN5IGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIHZhcmlvdXMgYXBwbGljYXRpb25zLCBlc3BlY2lhbGx5IGluIGEgdmlydHVhbGl6ZWQgb3IgbmV0d29ya2VkIGNvbnRleHQuIFRoaXMgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCBhcyBpdHMgaW1wbGVtZW50YXRpb24gb3IgbGFjayB0aGVyZW9mIGNhbiBjZXJ0YWlubHkgaW1wYWN0IHRoZSBzdGFiaWxpdHkgb2YgYXBwbGljYXRpb25zIHJlbHlpbmcgb24gdGhhdCBwYXJ0aWN1bGFyIEZTLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0b21pY19vcGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvdmJveHNmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy92Ym94c2YvZGlyLmM9MzA2PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp2Ym94c2ZfZGlyX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL3Zib3hzZi9kaXIuYy0zMTItXG5mcy92Ym94c2YvZGlyLmM6MzEzOnN0YXRpYyBpbnQgdmJveHNmX2Rpcl9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuZnMvdmJveHNmL2Rpci5jLTMxNC1cdFx0XHRcdCAgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBmbGFncywgdW1vZGVfdCBtb2RlKVxuLS1cbmZzL3Zib3hzZi9kaXIuYz00Njk9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdmJveHNmX2Rpcl9pb3BzID0ge1xuLS1cbmZzL3Zib3hzZi9kaXIuYy00NzItXHQubWtkaXIgICA9IHZib3hzZl9kaXJfbWtkaXIsXG5mcy92Ym94c2YvZGlyLmM6NDczOlx0LmF0b21pY19vcGVuID0gdmJveHNmX2Rpcl9hdG9taWNfb3BlbixcbmZzL3Zib3hzZi9kaXIuYy00NzQtXHQucm1kaXIgICA9IHZib3hzZl9kaXJfdW5saW5rLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NjU0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBBdG9taWMgT3BlbiBJbXBsZW1lbnRhdGlvbnMgaW4gTmV0d29yayBGaWxlc3lzdGVtcyoqCgpIbW0sIHNvIGB2Ym94c2ZgIGlzIGFjdHVhbGx5IGltcGxlbWVudGluZyBgYXRvbWljX29wZW5gIG5vdywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIGdvb2QgdG8gc2VlIHRoaXMgZnVuY3Rpb25hbGl0eSBiZWluZyBhZGRyZXNzZWQsIGFuZCBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIG9mIGNvdXJzZS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBob3cgZG9lcyB0aGlzIGNvbXBhcmUgdG8gb3RoZXIgdmlydHVhbCBmaWxlc3lzdGVtIHR5cGVzPyBJcyB0aGUgaW1wbGVtZW50YXRpb24gcm9idXN0IGFuZCBwZXJmb3JtYW50PwoKQnV0IHdoYXQgYWJvdXQgYGNpZnNgPyAqVGhhdCYjMzk7cyogdGhlIGJpZyBvbmUuIEkgd29uZGVyIGlmIHRoZSBgY2lmc2AgZmlsZXN5c3RlbSBoYXMgYWRkcmVzc2VkIHRoaXM/IFRoaXMgaXMgY3JpdGljYWwgZm9yIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5IGR1cmluZyB3cml0ZXMgaW4gbmV0d29ya2VkIGVudmlyb25tZW50cy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgY2lmc2AgY29kZSB0byBzZWUgaWYgdGhleSBhcmUgZG9pbmcgaXQsIGFuZCBhbHNvIGZpZ3VyZSBvdXQgaG93IHdlbGwgYGNpZnNgIGRlYWxzIHdpdGggdmFyaW91cyBmaWxlIHN5c3RlbSBvcGVyYXRpb25zIGluIGEgbWFubmVyIHRoYXQmIzM5O3MgdHJhbnNhY3Rpb25hbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTg6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRvbWljX29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50L2NpZnNmcy5jPTEyMjg9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2lmc19kaXJfaW5vZGVfb3BzID0ge1xuZnMvc21iL2NsaWVudC9jaWZzZnMuYy0xMjI5LVx0LmNyZWF0ZSA9IGNpZnNfY3JlYXRlLFxuZnMvc21iL2NsaWVudC9jaWZzZnMuYzoxMjMwOlx0LmF0b21pY19vcGVuID0gY2lmc19hdG9taWNfb3BlbixcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmMtMTIzMS1cdC50bXBmaWxlID0gY2lmc190bXBmaWxlLFxuLS1cbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmg9NTY9aW50IGNpZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmgtNTctXHRcdHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LCB1bW9kZV90IG1vZGUpO1xuZnMvc21iL2NsaWVudC9jaWZzZnMuaDo1ODppbnQgY2lmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGlyZW50cnksXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5oLTU5LVx0XHQgICAgIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgb2ZsYWdzLCB1bW9kZV90IG1vZGUpO1xuLS1cbmZzL3NtYi9jbGllbnQvZGlyLmM9NDg5PXN0YXRpYyBpbnQgY2lmc19kb19jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LFxuLS1cbmZzL3NtYi9jbGllbnQvZGlyLmMtNTE5LSAqL1xuZnMvc21iL2NsaWVudC9kaXIuYzo1MjA6aW50IGNpZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LFxuZnMvc21iL2NsaWVudC9kaXIuYy01MjEtXHRcdCAgICAgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBvZmxhZ3MsIHVtb2RlX3QgbW9kZSlcbi0tXG5mcy9zbWIvY2xpZW50L2Rpci5jLTU0Ni1cdCAqIHRvIGJlIGEgZGlyLiBGb3IgZmlsZSBvcGVucywgd2Ugd2FpdCB0byBjYWxsIHBvc2l4IG9wZW4gdGlsbFxuZnMvc21iL2NsaWVudC9kaXIuYzo1NDc6XHQgKiBjaWZzX29wZW4uICBJdCBjb3VsZCBiZSBhZGRlZCB0byBhdG9taWNfb3BlbiBpbiB0aGUgZnV0dXJlIGJ1dCB0aGVcbmZzL3NtYi9jbGllbnQvZGlyLmMtNTQ4LVx0ICogcGVyZm9ybWFuY2UgdHJhZGVvZmYgb2YgdGhlIGV4dHJhIG5ldHdvcmsgcmVxdWVzdCB3aGVuIEVJU0RJUiBvclxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQxMQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipGaWxlIFN5c3RlbSBJbnRlcm5hbHM6IEF0b21pYyBPcGVucyBhbmQgdGhlIDlQIFByb3RvY29sKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgZGlmZmVyZW50IGZpbGUgc3lzdGVtcyBoYW5kbGUgYXRvbWljIG9wZW4gb3BlcmF0aW9ucy4gSSBrbm93IGBjaWZzYCBhY3R1YWxseSBoYXMgYSBwcmV0dHkgZ29vZCBpbXBsZW1lbnRhdGlvbiBvZiBgYXRvbWljX29wZW5gLiBCdXQgdGhhdCBnZXRzIG1lIHRoaW5raW5nLi4uIHdoYXQgYWJvdXQgYDlwYD8gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIGlmIGl0cyBhcmNoaXRlY3R1cmUgbmF0dXJhbGx5IGxlbmRzIGl0c2VsZiB0byBhdG9taWMgb3BlbnMsIG9yIGlmIGl0IHJlcXVpcmVzIGEgbW9yZSBkZWxpYmVyYXRlIGFwcHJvYWNoLiBJIHNob3VsZCBjaGVjayB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgaW1wbGVtZW50YXRpb25zIGZvciBgOXBgIHRvIHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgc3RhdGUgYW5kIHNlZSBpZiBpdCBjYW4gYmUgZWFzaWx5IGltcHJvdmVkLiBUaGlzIHdpbGwgZGV0ZXJtaW5lIGhvdyBpdCBmdW5jdGlvbnMgaW4gaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTg6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRvbWljX29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy85cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvOXAvdmZzX2lub2RlLmM9NTc5PXY5ZnNfY3JlYXRlKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzLzlwL3Zmc19pbm9kZS5jLTY0OC0gKlxuZnMvOXAvdmZzX2lub2RlLmM6NjQ5OiAqIG9wZW4oLi4sIE9fQ1JFQVQpIGlzIGhhbmRsZWQgaW4gdjlmc192ZnNfYXRvbWljX29wZW4oKS4gIFRoaXMgaXMgb25seSBjYWxsZWRcbmZzLzlwL3Zmc19pbm9kZS5jLTY1MC0gKiBmb3IgbWtub2QoMikuXG4tLVxuZnMvOXAvdmZzX2lub2RlLmM9NzY3PXN0YXRpYyBpbnRcbmZzLzlwL3Zmc19pbm9kZS5jOjc2ODp2OWZzX3Zmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuZnMvOXAvdmZzX2lub2RlLmMtNzY5LVx0XHQgICAgIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSlcbi0tXG5mcy85cC92ZnNfaW5vZGUuYz0xMzY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB2OWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zX2RvdHUgPSB7XG4tLVxuZnMvOXAvdmZzX2lub2RlLmMtMTM2Ny1cdC5sb29rdXAgPSB2OWZzX3Zmc19sb29rdXAsXG5mcy85cC92ZnNfaW5vZGUuYzoxMzY4Olx0LmF0b21pY19vcGVuID0gdjlmc192ZnNfYXRvbWljX29wZW4sXG5mcy85cC92ZnNfaW5vZGUuYy0xMzY5LVx0LnN5bWxpbmsgPSB2OWZzX3Zmc19zeW1saW5rLFxuLS1cbmZzLzlwL3Zmc19pbm9kZS5jPTEzODA9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHY5ZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvOXAvdmZzX2lub2RlLmMtMTM4Mi1cdC5sb29rdXAgPSB2OWZzX3Zmc19sb29rdXAsXG5mcy85cC92ZnNfaW5vZGUuYzoxMzgzOlx0LmF0b21pY19vcGVuID0gdjlmc192ZnNfYXRvbWljX29wZW4sXG5mcy85cC92ZnNfaW5vZGUuYy0xMzg0LVx0LnVubGluayA9IHY5ZnNfdmZzX3VubGluayxcbi0tXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jPTIyNT1zdGF0aWMgaW50XG5mcy85cC92ZnNfaW5vZGVfZG90bC5jOjIyNjp2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jLTIyNy1cdFx0XHQgIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHVtb2RlX3Qgb21vZGUpXG4tLVxuZnMvOXAvdmZzX2lub2RlX2RvdGwuYz05NjI9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdjlmc19kaXJfaW5vZGVfb3BlcmF0aW9uc19kb3RsID0ge1xuZnMvOXAvdmZzX2lub2RlX2RvdGwuYy05NjMtXHQuY3JlYXRlID0gdjlmc192ZnNfY3JlYXRlX2RvdGwsXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jOjk2NDpcdC5hdG9taWNfb3BlbiA9IHY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGwsXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jLTk2NS1cdC5sb29rdXAgPSB2OWZzX3Zmc19sb29rdXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzc3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IEF0b21pYyBPcGVuIGFuZCBGVVNFIENvbXBhdGliaWxpdHkqKgoKQWxyaWdodCwgc28gdGhlIGA5cGAgZmlsZSBzeXN0ZW0gaW1wbGVtZW50cyBgYXRvbWljX29wZW5gLCB3aGljaCBpcyBnb29kIHRvIHNlZS4gQnV0IHRoYXQgZ290IG1lIHRoaW5raW5nLCB3aGF0JiMzOTtzIHRoZSBzdG9yeSB3aXRoIGBmdXNlYD8gSXMgdGhpcyBjYXBhYmlsaXR5IG1pcnJvcmVkIGluIGBmdXNlYCYjMzk7cyBpbXBsZW1lbnRhdGlvbiwgb3IgYXJlIHRoZXJlIHNpZ25pZmljYW50IGRpZmZlcmVuY2VzIGluIGhvdyB0aG9zZSB0d28gaGFuZGxlIHRoaXMgY3JpdGljYWwgb3BlcmF0aW9uPyBBcmUgdGhlcmUgYW55IHBlcmZvcm1hbmNlIGJlbmVmaXRzIG9uIG9uZSB2cyB0aGUgb3RoZXI/IEkgd29uZGVyIGhvdyB0aGV5IGRlYWwgd2l0aCBjb25jdXJyZW5jeSwgb3IgaWYgb25lIGlzIGluaGVyZW50bHkgYSBiZXR0ZXIgY2hvaWNlIHdoZW4gZGVhbGluZyB3aXRoIHJhY2UgY29uZGl0aW9ucy4gSSBuZWVkIHRvIGRpdmUgZGVlcGVyIG9uIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyBhdG9taWNpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0b21pY19vcGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZnVzZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZnVzZS9kaXIuYz05Mjg9c3RhdGljIGludCBmdXNlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKixcbmZzL2Z1c2UvZGlyLmMtOTI5LVx0XHQgICAgICB1bW9kZV90LCBkZXZfdCk7XG5mcy9mdXNlL2Rpci5jOjkzMDpzdGF0aWMgaW50IGZ1c2VfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmVudHJ5LFxuZnMvZnVzZS9kaXIuYy05MzEtXHRcdFx0ICAgIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBmbGFncyxcbi0tXG5mcy9mdXNlL2Rpci5jPTIzOTY9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGZ1c2VfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvZnVzZS9kaXIuYy0yNDA1LVx0LmNyZWF0ZVx0XHQ9IGZ1c2VfY3JlYXRlLFxuZnMvZnVzZS9kaXIuYzoyNDA2Olx0LmF0b21pY19vcGVuXHQ9IGZ1c2VfYXRvbWljX29wZW4sXG5mcy9mdXNlL2Rpci5jLTI0MDctXHQudG1wZmlsZVx0PSBmdXNlX3RtcGZpbGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODA3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgQXRvbWljIE9wZW4gSW1wbGVtZW50YXRpb25zKioKClJpZ2h0LCBzbyBgZnVzZWAgaW5jbHVkZXMgYW4gYGF0b21pY19vcGVuYCBpbXBsZW1lbnRhdGlvbi4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3csIGFuZCBpdCYjMzk7cyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB3aGVuIGNvbXBhcmluZyBkaWZmZXJlbnQgZmlsZSBzeXN0ZW1zLiBUaGUgaW1wbGljYXRpb25zIGhlcmUgYXJlIHNpZ25pZmljYW50IGZvciBkYXRhIGNvbnNpc3RlbmN5IGFuZCBob3cgd2UgaGFuZGxlIGNvbmN1cnJlbnQgYWNjZXNzLiBOb3csIHRoZSBrZXkgcXVlc3Rpb24gaXMsIHdoYXQgYWJvdXQgYG9yYW5nZWZzYD8gRG9lcyBpdCBvZmZlciBhIHNpbWlsYXIgbWVjaGFuaXNtIGZvciBhdG9taWMgb3BlbnM/IEkgbmVlZCB0byBkaWcgaW50byBpdHMgYXJjaGl0ZWN0dXJlIGFuZCBkb2N1bWVudGF0aW9uIHRvIHVuZGVyc3RhbmQgaG93IGl0IGhhbmRsZXMgZmlsZSBjcmVhdGlvbiBhbmQgbW9kaWZpY2F0aW9uIHdpdGggcmVzcGVjdCB0byBhdG9taWNpdHkuIFRoYXQmIzM5O3MgYSBjcnVjaWFsIGFzcGVjdCBmb3IgaXRzIG92ZXJhbGwgcmVsaWFiaWxpdHkgYW5kIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcywgZXNwZWNpYWxseSBpbiBhIGRpc3RyaWJ1dGVkIGVudmlyb25tZW50LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlYmFzZSBhbmQgdGhlIGRvY3VtZW50YXRpb24gdG8gY2hlY2sgaWYgdGhpcyBpcyBzdXBwb3J0ZWQsIGFuZCBpZiBzbywgaG93IGl0IGlzIGltcGxlbWVudGVkLiBJcyBpdCBsZXZlcmFnaW5nIGtlcm5lbCBzdXBwb3J0LCB1c2Vyc3BhY2UgdHJpY2tzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIG51YW5jZXMgb2YgaXRzIGFwcHJvYWNoIHdpbGwgaW5mbHVlbmNlIG15IGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRvbWljX29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vcmFuZ2Vmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjA3NQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGlnZ2luZyBpbnRvIE9yYW5nZUZTJiMzOTtzIEF0b21pY2l0eSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBgb3JhbmdlZnNgIGhhbmRsZXMgb3BlbmluZyBmaWxlcyBhdG9taWNhbGx5LCBhbmQgSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCAqZG9lc24mIzM5O3QqIGhhdmUgYW4gYGF0b21pY19vcGVuYCBjYWxsIGltcGxlbWVudGVkIGRpcmVjdGx5LiBUaGF0JiMzOTtzIGEgY29tbW9uIGNoYXJhY3RlcmlzdGljIGZvciBkaXN0cmlidXRlZCBmaWxlIHN5c3RlbXMsIGVzcGVjaWFsbHkgd2hlbiBjb25zaWRlcmluZyBjb25zaXN0ZW5jeSBtb2RlbHMgYW5kIHBlcmZvcm1hbmNlIHRyYWRlb2Zmcy4gTm93LCByYXRoZXIgdGhhbiBqdXN0IGFzc3VtZSwgSSBuZWVkIHRvIHZlcmlmeSBob3cgaXQgYWN0dWFsbHkgaGFuZGxlcyB0aGUgY3JlYXRlIG9wZXJhdGlvbi4gTGV0IG1lIHNoaWZ0IG15IGZvY3VzLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGxvb2sgaW50byB0aGUgYG9yYW5nZWZzX2NyZWF0ZWAgZnVuY3Rpb24uIEkmIzM5O2xsIGJldCB0aGF0JiMzOTtzIHdoZXJlIHRoZSBhdG9taWMgYXNwZWN0cywgb3IgbGFjayB0aGVyZW9mLCBhcmUgaGFuZGxlZC4gVGhpcyBzaG91bGQgb2ZmZXIgY2x1ZXMgdG8gdW5kZXJzdGFuZCBob3cgaXQgZGVhbHMgd2l0aCB0aGUgcGFydGlhbCB3cml0ZXMgYW5kIHBvdGVudGlhbCBjb25mbGljdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29yYW5nZWZzX2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL29yYW5nZWZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9vcmFuZ2Vmcy9kb3duY2FsbC5oPTIzPXN0cnVjdCBvcmFuZ2Vmc19sb29rdXBfcmVzcG9uc2Uge1xuLS1cbmZzL29yYW5nZWZzL2Rvd25jYWxsLmgtMjYtXG5mcy9vcmFuZ2Vmcy9kb3duY2FsbC5oOjI3OnN0cnVjdCBvcmFuZ2Vmc19jcmVhdGVfcmVzcG9uc2Uge1xuZnMvb3JhbmdlZnMvZG93bmNhbGwuaC0yOC1cdHN0cnVjdCBvcmFuZ2Vmc19vYmplY3Rfa3JlZiByZWZuO1xuLS1cbmZzL29yYW5nZWZzL2Rvd25jYWxsLmg9MTAwPXN0cnVjdCBvcmFuZ2Vmc19kb3duY2FsbF9zIHtcbi0tXG5mcy9vcmFuZ2Vmcy9kb3duY2FsbC5oLTEwOS1cdFx0c3RydWN0IG9yYW5nZWZzX2xvb2t1cF9yZXNwb25zZSBsb29rdXA7XG5mcy9vcmFuZ2Vmcy9kb3duY2FsbC5oOjExMDpcdFx0c3RydWN0IG9yYW5nZWZzX2NyZWF0ZV9yZXNwb25zZSBjcmVhdGU7XG5mcy9vcmFuZ2Vmcy9kb3duY2FsbC5oLTExMS1cdFx0c3RydWN0IG9yYW5nZWZzX3N5bWxpbmtfcmVzcG9uc2Ugc3ltO1xuLS1cbmZzL29yYW5nZWZzL25hbWVpLmMtMTctICovXG5mcy9vcmFuZ2Vmcy9uYW1laS5jOjE4OnN0YXRpYyBpbnQgb3JhbmdlZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuZnMvb3JhbmdlZnMvbmFtZWkuYy0xOS1cdFx0XHRzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9vcmFuZ2Vmcy9uYW1laS5jPTQxNj1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBvcmFuZ2Vmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9vcmFuZ2Vmcy9uYW1laS5jLTQxOS1cdC5zZXRfYWNsID0gb3JhbmdlZnNfc2V0X2FjbCxcbmZzL29yYW5nZWZzL25hbWVpLmM6NDIwOlx0LmNyZWF0ZSA9IG9yYW5nZWZzX2NyZWF0ZSxcbmZzL29yYW5nZWZzL25hbWVpLmMtNDIxLVx0LnVubGluayA9IG9yYW5nZWZzX3VubGluayxcbi0tXG5mcy9vcmFuZ2Vmcy91cGNhbGwuaD0yNz1zdHJ1Y3Qgb3JhbmdlZnNfbG9va3VwX3JlcXVlc3RfcyB7XG4tLVxuZnMvb3JhbmdlZnMvdXBjYWxsLmgtMzMtXG5mcy9vcmFuZ2Vmcy91cGNhbGwuaDozNDpzdHJ1Y3Qgb3JhbmdlZnNfY3JlYXRlX3JlcXVlc3RfcyB7XG5mcy9vcmFuZ2Vmcy91cGNhbGwuaC0zNS1cdHN0cnVjdCBvcmFuZ2Vmc19vYmplY3Rfa3JlZiBwYXJlbnRfcmVmbjtcbi0tXG5mcy9vcmFuZ2Vmcy91cGNhbGwuaD0yMjA9c3RydWN0IG9yYW5nZWZzX3VwY2FsbF9zIHtcbi0tXG5mcy9vcmFuZ2Vmcy91cGNhbGwuaC0yMzItXHRcdHN0cnVjdCBvcmFuZ2Vmc19sb29rdXBfcmVxdWVzdF9zIGxvb2t1cDtcbmZzL29yYW5nZWZzL3VwY2FsbC5oOjIzMzpcdFx0c3RydWN0IG9yYW5nZWZzX2NyZWF0ZV9yZXF1ZXN0X3MgY3JlYXRlO1xuZnMvb3JhbmdlZnMvdXBjYWxsLmgtMjM0LVx0XHRzdHJ1Y3Qgb3JhbmdlZnNfc3ltbGlua19yZXF1ZXN0X3Mgc3ltO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjg4MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEV4YW1pbmF0aW9uIG9mIGBvcmFuZ2Vmc19jcmVhdGVgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgb3JhbmdlZnNfY3JlYXRlYCBmdW5jdGlvbi4gSSYjMzk7bSBpbW1lZGlhdGVseSBjdXJpb3VzIGFib3V0IGl0cyByb2xlIHdpdGhpbiB0aGUgT3JhbmdlRlMgZmlsZSBzeXN0ZW0uIE15IGluaXRpYWwgdGhvdWdodHMgYXJlOiB3aGF0JiMzOTtzIHRoZSB0eXBpY2FsIGltcGxlbWVudGF0aW9uPyBIb3cgZG9lcyBpdCBoYW5kbGUgaW5vZGUgYWxsb2NhdGlvbiBhbmQgbWV0YWRhdGEgdXBkYXRlcz8gSXMgaXQgYSBzaW5nbGUtZnVuY3Rpb24gY2FsbCBvciBhIHdyYXBwZXIgZm9yIHNldmVyYWwgYWN0aW9ucz8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHVuZGVybHlpbmcgc3RvcmFnZSBhbmQgbmV0d29yayBsYXllcnMg4oCTIHByb2JhYmx5IHNvbWUgUlBDIGNhbGxzIHRvIG1ldGFkYXRhIHNlcnZlcnMsIHBvdGVudGlhbGx5IGRhdGEgc2VydmVyIGludGVyYWN0aW9ucyBkZXBlbmRpbmcgb24gdGhlIGZpbGUgc2l6ZSwgYW5kIGRlZmluaXRlbHkgc29tZSBsb2NraW5nIG1lY2hhbmlzbXMgaW52b2x2ZWQuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgYW55IG9wdGltaXphdGlvbnMg4oCTIGRlZmVycmVkIHVwZGF0ZXMsIGNhY2hpbmcgc3RyYXRlZ2llcywgb3IgcGVyaGFwcyBhIHR3by1waGFzZSBjb21taXQgYXBwcm9hY2ggZm9yIGF0b21pY2l0eS4gSeKAmW0gdGhpbmtpbmcgZXJyb3IgaGFuZGxpbmcgYW5kIHJlY292ZXJ5IGFyZSBwYXJhbW91bnQ7IGl0JiMzOTtzIGEgY3JpdGljYWwgcG9pbnQgaW4gZmlsZSBzeXN0ZW0gb3BlcmF0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgc2lnbnMgb2YgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIHJhY2UgY29uZGl0aW9ucy4gVGhpcyBzaG91bGQgYmUgaW50ZXJlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvb3JhbmdlZnMvbmFtZWkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMTg6XHRzdGF0aWMgaW50IG9yYW5nZWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiAgMTk6XHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmRpcixcbiAgMjA6XHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gIDIxOlx0XHRcdFx0dW1vZGVfdCBtb2RlKVxuICAyMjpcdHtcbiAgMjM6XHRcdHN0cnVjdCBvcmFuZ2Vmc19pbm9kZV9zICpwYXJlbnQgPSBPUkFOR0VGU19JKGRpcik7XG4gIDI0Olx0XHRzdHJ1Y3Qgb3JhbmdlZnNfa2VybmVsX29wX3MgKm5ld19vcDtcbiAgMjU6XHRcdHN0cnVjdCBvcmFuZ2Vmc19vYmplY3Rfa3JlZiByZWY7XG4gIDI2Olx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuICAyNzpcdFx0c3RydWN0IGlhdHRyIGlhdHRyO1xuICAyODpcdFx0aW50IHJldDtcbiAgMjk6XHRcbiAgMzA6XHRcdGdvc3NpcF9kZWJ1ZyhHT1NTSVBfTkFNRV9ERUJVRywgXCYjMzQ7JXM6ICVwZFxcblwmIzM0OyxcbiAgMzE6XHRcdFx0ICAgICBfX2Z1bmNfXyxcbiAgMzI6XHRcdFx0ICAgICBkZW50cnkpO1xuICAzMzpcdFxuICAzNDpcdFx0bmV3X29wID0gb3BfYWxsb2MoT1JBTkdFRlNfVkZTX09QX0NSRUFURSk7XG4gIDM1Olx0XHRpZiAoIW5ld19vcClcbiAgMzY6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gIDM3Olx0XG4gIDM4Olx0XHRuZXdfb3AtXHUwMDNldXBjYWxsLnJlcS5jcmVhdGUucGFyZW50X3JlZm4gPSBwYXJlbnQtXHUwMDNlcmVmbjtcbiAgMzk6XHRcbiAgNDA6XHRcdGZpbGxfZGVmYXVsdF9zeXNfYXR0cnMobmV3X29wLVx1MDAzZXVwY2FsbC5yZXEuY3JlYXRlLmF0dHJpYnV0ZXMsIG1vZGUpO1xuICA0MTpcdFxuICA0MjpcdFx0c3Ryc2NweShuZXdfb3AtXHUwMDNldXBjYWxsLnJlcS5jcmVhdGUuZF9uYW1lLCBkZW50cnktXHUwMDNlZF9uYW1lLm5hbWUpO1xuICA0MzpcdFxuICA0NDpcdFx0cmV0ID0gc2VydmljZV9vcGVyYXRpb24obmV3X29wLCBfX2Z1bmNfXywgZ2V0X2ludGVycnVwdGlibGVfZmxhZyhkaXIpKTtcbiAgNDU6XHRcbiAgNDY6XHRcdGdvc3NpcF9kZWJ1ZyhHT1NTSVBfTkFNRV9ERUJVRyxcbiAgNDc6XHRcdFx0ICAgICBcJiMzNDslczogJXBkOiBoYW5kbGU6JXBVOiBmc2lkOiVkOiBuZXdfb3A6JXA6IHJldDolZDpcXG5cJiMzNDssXG4gIDQ4Olx0XHRcdCAgICAgX19mdW5jX18sXG4gIDQ5Olx0XHRcdCAgICAgZGVudHJ5LFxuICA1MDpcdFx0XHQgICAgIFx1MDAyNm5ld19vcC1cdTAwM2Vkb3duY2FsbC5yZXNwLmNyZWF0ZS5yZWZuLmtoYW5kbGUsXG4gIDUxOlx0XHRcdCAgICAgbmV3X29wLVx1MDAzZWRvd25jYWxsLnJlc3AuY3JlYXRlLnJlZm4uZnNfaWQsXG4gIDUyOlx0XHRcdCAgICAgbmV3X29wLFxuICA1MzpcdFx0XHQgICAgIHJldCk7XG4gIDU0Olx0XG4gIDU1Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuICA1NjpcdFx0XHRnb3RvIG91dDtcbiAgNTc6XHRcbiAgNTg6XHRcdHJlZiA9IG5ld19vcC1cdTAwM2Vkb3duY2FsbC5yZXNwLmNyZWF0ZS5yZWZuO1xuICA1OTpcdFxuICA2MDpcdFx0aW5vZGUgPSBvcmFuZ2Vmc19uZXdfaW5vZGUoZGlyLVx1MDAzZWlfc2IsIGRpciwgU19JRlJFRyB8IG1vZGUsIDAsIFx1MDAyNnJlZik7XG4gIDYxOlx0XHRpZiAoSVNfRVJSKGlub2RlKSkge1xuICA2MjpcdFx0XHRnb3NzaXBfZXJyKFwmIzM0OyVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgaW5vZGUgZm9yIGZpbGUgOiVwZDpcXG5cJiMzNDssXG4gIDYzOlx0XHRcdFx0ICAgX19mdW5jX18sXG4gIDY0Olx0XHRcdFx0ICAgZGVudHJ5KTtcbiAgNjU6XHRcdFx0cmV0ID0gUFRSX0VSUihpbm9kZSk7XG4gIDY2Olx0XHRcdGdvdG8gb3V0O1xuICA2NzpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzg5OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgb3JhbmdlZnNfY3JlYXRlYCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgSSYjMzk7bSBpbW1lZGlhdGVseSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjaGFuZ2VzIHRvIGBvcmFuZ2Vmc19jcmVhdGVgLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBJIG5lZWQgdG8gYW5zd2VyIGlzIHdoZXRoZXIgdGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uIGFjdHVhbGx5ICp1dGlsaXplZCogdGhlIGBib29sIGV4Y2x1c2l2ZWAgYXJndW1lbnQuICBUaGF0IGFyZ3VtZW50IGlzIGtleSwgYmVjYXVzZSBpdCBzdWdnZXN0cyB0aGUgZnVuY3Rpb24gbWlnaHQgaGF2ZSBiZWVuIGFibGUgdG8gY3JlYXRlIGZpbGVzIHdpdGggc3BlY2lmaWMgZXhjbHVzaXZpdHkgZ3VhcmFudGVlcywgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlIG9sZGVyIHZlcnNpb24gdXNlZCB0aGlzIGZlYXR1cmUgb3Igbm90LiBJZiBpdCBkaWRuJiMzOTt0LCB0aGUgcGF0Y2ggbWlnaHQgaW50cm9kdWNlIGEgcGVyZm9ybWFuY2UgdHJhZGUtb2ZmIHRvIGFkZCBhIGZlYXR1cmUgd2hpY2ggd2FzIG5vdCBwcmV2aW91c2x5IHByZXNlbnQuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgb2xkIGNvZGUgYW5kIHZlcmlmeSBpdHMgYmVoYXZpb3VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4Y2x1c2l2ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL29yYW5nZWZzL25hbWVpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDEyNQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgT0NGUzIgQVBJKioKCkhtbSwgbm8sIEkgZG9uJiMzOTt0IHRoaW5rIHRoYXQgY29kZSBwYXRoIHV0aWxpemVkIHRoZSBleHBlY3RlZCBmdW5jdGlvbiBmb3IgZmlsZSBjcmVhdGlvbi4gSSBuZWVkIHRvIHJlLWV4YW1pbmUgdGhlIGNvbnRleHQuIFRoZSBwcm9ibGVtIGxpZXMgZWxzZXdoZXJlLgoKT2theSwgbGV0JiMzOTtzIHN0ZXAgYmFjaywgYW5kIHF1aWNrbHkgcmV0cmFjZSBteSBtZW50YWwgc3RlcHMuIFRoZSBtb3JlIGZ1bmRhbWVudGFsIHF1ZXN0aW9uIGlzLCB3aGF0IGFib3V0IGBvY2ZzMl9jcmVhdGVgPyBJdCYjMzk7cyB0aGUgc3RhbmRhcmQgT0NGUzIgZmlsZSBjcmVhdGlvbiByb3V0aW5lLiBJIG5lZWQgdG8gY29uc2lkZXIsIGZyb20gZmlyc3QgcHJpbmNpcGxlcywgd2hlcmUgdGhhdCByb3V0aW5lIHdvdWxkIGhhdmUgYmVlbiBjYWxsZWQgKG9yIG5vdCBjYWxsZWQhKSB3aXRoaW4gdGhlIGtlcm5lbCBtb2R1bGUuIFdoYXQgYXJlIHRoZSBjYWxsaW5nIGNvbnZlbnRpb25zPyBJcyB0aGlzIHJlbGF0ZWQgdG8gaW5vZGUgY3JlYXRpb24sIGRpcmVjdG9yeSBlbnRyeSBjcmVhdGlvbiwgb3IgcGVyaGFwcyBzb21lIHNwZWNpZmljIE9DRlMyLXNwZWNpZmljIG1ldGFkYXRhIHVwZGF0ZT8gVGhlIGlzc3VlIHdpdGggbXkgcHJpb3IgYXNzdW1wdGlvbiBpcyB0aGF0IEkgY291bGQgaGF2ZSBtaXNzZWQgYSByZWxldmFudCBwYXJ0LCBwZXJoYXBzIHRoZSBsb2dpYyBhcm91bmQgdGhlIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvb2NmczIvbmFtZWkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY2NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjY3Olx0c3RhdGljIGludCBvY2ZzMl9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gNjY4Olx0XHRcdFx0c3RydWN0IGlub2RlICpkaXIsXG4gNjY5Olx0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIDY3MDpcdFx0XHRcdHVtb2RlX3QgbW9kZSlcbiA2NzE6XHR7XG4gNjcyOlx0XHRpbnQgcmV0O1xuIDY3MzpcdFxuIDY3NDpcdFx0dHJhY2Vfb2NmczJfY3JlYXRlKGRpciwgZGVudHJ5LCBkZW50cnktXHUwMDNlZF9uYW1lLmxlbiwgZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lLFxuIDY3NTpcdFx0XHRcdCAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLVx1MDAzZWlwX2Jsa25vLCBtb2RlKTtcbiA2NzY6XHRcdHJldCA9IG9jZnMyX21rbm9kKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRlJFRywgMCk7XG4gNjc3Olx0XHRpZiAocmV0KVxuIDY3ODpcdFx0XHRtbG9nX2Vycm5vKHJldCk7XG4gNjc5Olx0XG4gNjgwOlx0XHRyZXR1cm4gcmV0O1xuIDY4MTpcdH1cbiA2ODI6XHRcbiA2ODM6XHRzdGF0aWMgaW50IG9jZnMyX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiA2ODQ6XHRcdFx0ICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4gNjg1Olx0XHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiA2ODY6XHR7XG4gNjg3Olx0XHRoYW5kbGVfdCAqaGFuZGxlO1xuIDY4ODpcdFx0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUob2xkX2RlbnRyeSk7XG4gNjg5Olx0XHRzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIgPSBkX2lub2RlKG9sZF9kZW50cnktXHUwMDNlZF9wYXJlbnQpO1xuIDY5MDpcdFx0aW50IGVycjtcbiA2OTE6XHRcdHN0cnVjdCBidWZmZXJfaGVhZCAqZmVfYmggPSBOVUxMO1xuIDY5MjpcdFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpvbGRfZGlyX2JoID0gTlVMTDtcbiA2OTM6XHRcdHN0cnVjdCBidWZmZXJfaGVhZCAqcGFyZW50X2ZlX2JoID0gTlVMTDtcbiA2OTQ6XHRcdHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlID0gTlVMTDtcbiA2OTU6XHRcdHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZGlyLVx1MDAzZWlfc2IpO1xuIDY5NjpcdFx0c3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0IGxvb2t1cCA9IHsgTlVMTCwgfTtcbiA2OTc6XHRcdHNpZ3NldF90IG9sZHNldDtcbiA2OTg6XHRcdHU2NCBvbGRfZGVfaW5vO1xuIDY5OTpcdFxuIDcwMDpcdFx0dHJhY2Vfb2NmczJfbGluaygodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLVx1MDAzZWlwX2Jsa25vLFxuIDcwMTpcdFx0XHRcdCBvbGRfZGVudHJ5LVx1MDAzZWRfbmFtZS5sZW4sIG9sZF9kZW50cnktXHUwMDNlZF9uYW1lLm5hbWUsXG4gNzAyOlx0XHRcdFx0IGRlbnRyeS1cdTAwM2VkX25hbWUubGVuLCBkZW50cnktXHUwMDNlZF9uYW1lLm5hbWUpO1xuIDcwMzpcdFxuIDcwNDpcdFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbiA3MDU6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiA3MDY6XHRcbiA3MDc6XHRcdGVyciA9IGRxdW90X2luaXRpYWxpemUoZGlyKTtcbiA3MDg6XHRcdGlmIChlcnIpIHtcbiA3MDk6XHRcdFx0bWxvZ19lcnJubyhlcnIpO1xuIDcxMDpcdFx0XHRyZXR1cm4gZXJyO1xuIDcxMTpcdFx0fVxuIDcxMjpcdFxuIDcxMzpcdFx0ZXJyID0gb2NmczJfZG91YmxlX2xvY2sob3NiLCBcdTAwMjZvbGRfZGlyX2JoLCBvbGRfZGlyLFxuIDcxNDpcdFx0XHRcdFx1MDAyNnBhcmVudF9mZV9iaCwgZGlyLCAwKTtcbiA3MTU6XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbiA3MTY6XHRcdFx0aWYgKGVyciAhPSAtRU5PRU5UKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTIyMAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDc2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlbW92YWwgb2YgdGhlIGBleGNsYCBBcmd1bWVudCBmcm9tIGBjcmVhdGVgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgcmVtb3ZlcyB0aGUgYGV4Y2xgIGFyZ3VtZW50IGZyb20gdGhlIGBjcmVhdGVgIGlub2RlIG9wZXJhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGBvY2ZzMl9jcmVhdGVgIGRpZG4mIzM5O3QgdXNlIGBleGNsYCBlaXRoZXIsIHNvIEkgbmVlZCB0byBnbyBkZWVwZXIuIEkmIzM5O20gY2hlY2tpbmcgYGZzL25hbWVpLmNgIGFnYWluLCBhbmQgc3BlY2lmaWNhbGx5IGBsb29rdXBfb3BlbmAuIEl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGBsb29rdXBfb3BlbmAgaXMgaW52b2x2ZWQgd2hlbiBvcGVuaW5nIGEgZmlsZS4gSWYgYE9fQ1JFQVRgIGlzIHNldCwgdGhlIGNvZGUgY2FsbHMgYGF0b21pY19vcGVuYCBpZiB0aGUgZmlsZXN5c3RlbSBpbXBsZW1lbnRzIGl0LiBJZiBub3QsIGl0IGZhbGxzIGJhY2sgdG8gYGNyZWF0ZWAuCgpOb3csIGJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgY29kZSBwYXNzZWQgYG9wZW5fZmxhZyAmYW1wOyBPX0VYQ0xgIHRvIGBjcmVhdGVgLiBCdXQgbm93IGl0IGRvZXNuJiMzOTt0LiBNeSBpbW1lZGlhdGUgcXVlc3Rpb246IGlmIHRoZSBmaWxlc3lzdGVtICpkb2VzbiYjMzk7dCogaW1wbGVtZW50IGBhdG9taWNfb3BlbmAsIGRvZXMgdGhhdCBtZWFuIGl0ICpkb2VzbiYjMzk7dCogc3VwcG9ydCBleGNsdXNpdmUgY3JlYXRlPyBObywgSSBxdWlja2x5IHJlYWxpemVkIHRoYXQgYGNyZWF0ZWAgd2FzIHVzZWQgZm9yIGJvdGggZXhjbHVzaXZlIGFuZCBub24tZXhjbHVzaXZlIGNyZWF0ZSB3aGVuIGBhdG9taWNfb3BlbmAgd2FzbiYjMzk7dCBwcm92aWRlZC4KClRoZSBjb21taXQgbWVzc2FnZSBjbGFyaWZpZXM6IHRoZSBgLmNyZWF0ZWAgaW5vZGUgb3BlcmF0aW9uIG5vIGxvbmdlciByZWNlaXZlcyBgZXhjbGAuIEl0ICphbHdheXMqIGFzc3VtZXMgdGhlIGZpbGUgZG9lc24mIzM5O3QgZXhpc3QuIElmIHRoZSBmaWxlc3lzdGVtICpuZWVkcyogdG8gYmUgaW52b2x2ZWQgaW4gYSBub24tZXhjbHVzaXZlIGNyZWF0ZSwgaXQgc2hvdWxkIGltcGxlbWVudCBgYXRvbWljX29wZW5gLgoKSGVyZSYjMzk7cyB0aGUgcHJvYmxlbTogaWYgYSBmaWxlc3lzdGVtICpkb2VzbiYjMzk7dCogcHJvdmlkZSBgYXRvbWljX29wZW5gLCBWRlMgaGFuZGxlcyBub24tZXhjbHVzaXZlIGNyZWF0ZSBieSBmaXJzdCBkb2luZyBhIGxvb2t1cCwgYW5kIGlmIGl0JiMzOTtzIG5vdCBmb3VuZCwgKnRoZW4qIGNhbGxpbmcgYGNyZWF0ZWAuIEJ1dCB0aGVyZSYjMzk7cyBhIHJhY2UgY29uZGl0aW9uIHRoZXJlOiBiZXR3ZWVuIHRoZSBsb29rdXAgYW5kIHRoZSBgY3JlYXRlYCBjYWxsLCBzb21lb25lIGVsc2UgY291bGQgY3JlYXRlIHRoZSBmaWxlLiBTbywgaWYgYGNyZWF0ZWAgYXNzdW1lcyB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgaXQgd2lsbCBqdXN0IGNyZWF0ZSBpdCwgYW5kIGl0IGNvdWxkIG92ZXJ3cml0ZSBhbiBleGlzdGluZyBmaWxlLiBCdXQgd2FpdCwgVkZTIGhhbmRsZXMgYEVFWElTVGAgaWYgYE9fRVhDTGAgaXMgc2V0LiBPa2F5LCBWRlMgYWxyZWFkeSBkaWQgYSBsb29rdXAgYW5kIGZvdW5kIGEgbmVnYXRpdmUgZGVudHJ5ICh0aGUgZmlsZSBkb2VzbiYjMzk7dCBleGlzdCB5ZXQpIGJlZm9yZSBgY3JlYXRlYCBpcyBjYWxsZWQuIFNvLCB0aGUgZmlsZXN5c3RlbSYjMzk7cyBgY3JlYXRlYCBvcGVyYXRpb24gKnNob3VsZCogY3JlYXRlIHRoZSBmaWxlLiBJZiBhbm90aGVyIHByb2Nlc3MgY3JlYXRlZCB0aGUgZmlsZSBjb25jdXJyZW50bHksIHRoZSBmaWxlc3lzdGVtJiMzOTtzIGBjcmVhdGVgICh3aGljaCBsaWtlbHkgZG9lcyBhbiBpbnRlcm5hbCBleGNsdXNpdmUgY3JlYXRlLCBsaWtlIGBta25vZGApIHdpbGwgcmV0dXJuIGBFRVhJU1RgLCBhbmQgdGhlbiBWRlMgd2lsbCBoYW5kbGUgdGhhdCBlcnJvci4KCk5vdyBJIG5lZWQgdG8gc2VlIGlmIGFueSBmaWxlc3lzdGVtICphY3R1YWxseSogdXNlZCB0aGUgYGV4Y2xgIGFyZ3VtZW50IGluIGBjcmVhdGVgIGJlZm9yZSB0aGlzIGNoYW5nZS4gTGV0JiMzOTtzIGxvb2sgYXQgYGdmczJgLCBgbmZzYCwgYW5kIGB2Ym94c2ZgIHdoaWNoIEkgc2F3IGhhZCBpbnRlcm5hbCBjaGFuZ2VzLiBDaGVja2luZyBgZ2ZzMl9jcmVhdGVgIGNvbmZpcm1zIG15IHN1c3BpY2lvbjoKCmBgYGMKLQlyZXR1cm4gZ2ZzMl9jcmVhdGVfaW5vZGUoZGlyLCBkZW50cnksIE5VTEwsIFNfSUZSRUcgfCBtb2RlLCAwLCBOVUxMLCAwLCBleGNsKTsKJiM0MzsJcmV0dXJuIGdmczJfY3JlYXRlX2lub2RlKGRpciwgZGVudHJ5LCBOVUxMLCBTX0lGUkVHIHwgbW9kZSwgMCwgTlVMTCwgMCwgMSk7CmBgYAoKT2theSwgYGdmczJfY3JlYXRlX2lub2RlYCAqZG9lcyogdGFrZSBgZXhjbGAgYXMgaXRzIGxhc3QgYXJndW1lbnQuIE5vdyBJIG5lZWQgdG8gY2hlY2sgd2hhdCBgZ2ZzMl9jcmVhdGVfaW5vZGVgIGRvZXMgd2l0aCB0aGUgYGV4Y2xgIGFyZ3VtZW50IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTg6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2ZzMl9jcmVhdGVfaW5vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9nZnMyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9nZnMyL2lub2RlLmM9NjY0PXN0YXRpYyBpbnQgZ2ZzMl9pbml0eGF0dHJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHN0cnVjdCB4YXR0ciAqeGF0dHJfYXJyYXksXG4tLVxuZnMvZ2ZzMi9pbm9kZS5jLTY4MC0vKipcbmZzL2dmczIvaW5vZGUuYzo2ODE6ICogZ2ZzMl9jcmVhdGVfaW5vZGUgLSBDcmVhdGUgYSBuZXcgaW5vZGVcbmZzL2dmczIvaW5vZGUuYy02ODItICogQGRpcjogVGhlIHBhcmVudCBkaXJlY3Rvcnlcbi0tXG5mcy9nZnMyL2lub2RlLmMtNjk5LVxuZnMvZ2ZzMi9pbm9kZS5jOjcwMDpzdGF0aWMgaW50IGdmczJfY3JlYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5mcy9nZnMyL2lub2RlLmMtNzAxLVx0XHRcdCAgICAgc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZnMvZ2ZzMi9pbm9kZS5jPTk3MT1zdGF0aWMgaW50IGdmczJfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9nZnMyL2lub2RlLmMtOTczLXtcbmZzL2dmczIvaW5vZGUuYzo5NzQ6XHRyZXR1cm4gZ2ZzMl9jcmVhdGVfaW5vZGUoZGlyLCBkZW50cnksIE5VTEwsIFNfSUZSRUcgfCBtb2RlLCAwLCBOVUxMLCAwLCAxKTtcbmZzL2dmczIvaW5vZGUuYy05NzUtfVxuLS1cbmZzL2dmczIvaW5vZGUuYz0xMzI3PXN0YXRpYyBpbnQgZ2ZzMl9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9nZnMyL2lub2RlLmMtMTMzNS1cbmZzL2dmczIvaW5vZGUuYzoxMzM2Olx0cmV0dXJuIGdmczJfY3JlYXRlX2lub2RlKGRpciwgZGVudHJ5LCBOVUxMLCBTX0lGTE5LIHwgU19JUldYVUdPLCAwLCBzeW1uYW1lLCBzaXplLCAwKTtcbmZzL2dmczIvaW5vZGUuYy0xMzM3LX1cbi0tXG5mcy9nZnMyL2lub2RlLmM9MTM0OT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZ2ZzMl9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvZ2ZzMi9pbm9kZS5jLTEzNTMtXG5mcy9nZnMyL2lub2RlLmM6MTM1NDpcdHJldHVybiBFUlJfUFRSKGdmczJfY3JlYXRlX2lub2RlKGRpciwgZGVudHJ5LCBOVUxMLCBTX0lGRElSIHwgbW9kZSwgMCwgTlVMTCwgZHNpemUsIDApKTtcbmZzL2dmczIvaW5vZGUuYy0xMzU1LX1cbi0tXG5mcy9nZnMyL2lub2RlLmM9MTM2Nz1zdGF0aWMgaW50IGdmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2dmczIvaW5vZGUuYy0xMzY5LXtcbmZzL2dmczIvaW5vZGUuYzoxMzcwOlx0cmV0dXJuIGdmczJfY3JlYXRlX2lub2RlKGRpciwgZGVudHJ5LCBOVUxMLCBtb2RlLCBkZXYsIE5VTEwsIDAsIDApO1xuZnMvZ2ZzMi9pbm9kZS5jLTEzNzEtfVxuLS1cbmZzL2dmczIvaW5vZGUuYz0xMzg0PXN0YXRpYyBpbnQgZ2ZzMl9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL2dmczIvaW5vZGUuYy0xNDAzLVxuZnMvZ2ZzMi9pbm9kZS5jOjE0MDQ6XHRyZXR1cm4gZ2ZzMl9jcmVhdGVfaW5vZGUoZGlyLCBkZW50cnksIGZpbGUsIFNfSUZSRUcgfCBtb2RlLCAwLCBOVUxMLCAwLCBleGNsKTtcbmZzL2dmczIvaW5vZGUuYy0xNDA1LX1cbi0tXG5mcy9nZnMyL3N1cGVyLmM9MTI4OT1zdGF0aWMgaW50IGV2aWN0X3VubGlua2VkX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBnZnMyX2hvbGRlciAqZ2gpXG4tLVxuZnMvZ2ZzMi9zdXBlci5jLTEzMTgtXHQvKlxuZnMvZ2ZzMi9zdXBlci5jOjEzMTk6XHQgKiBBcyBzb29uIGFzIHdlIGNsZWFyIHRoZSBiaXRtYXAgZm9yIHRoZSBkaW5vZGUsIGdmczJfY3JlYXRlX2lub2RlKClcbmZzL2dmczIvc3VwZXIuYy0xMzIwLVx0ICogY2FuIGdldCBjYWxsZWQgdG8gcmVjcmVhdGUgaXQsIG9yIGV2ZW4gZ2ZzMl9pbm9kZV9sb29rdXAoKSBpZiB0aGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTg6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc2OTQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgYGdmczJfY3JlYXRlX2lub2RlYCBhbmQgYGF0b21pY19vcGVuYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgZ2ZzMl9hdG9taWNfb3BlbmAgZnVuY3Rpb24uIEl0JiMzOTtzIGNhbGxpbmcgYGdmczJfY3JlYXRlX2lub2RlYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGF0IGZ1bmN0aW9uIGlzIGFsc28gY2VudHJhbCB0byBob3cgR0ZTMiBjcmVhdGVzIGlub2Rlcy4gSSYjMzk7bSBub3RpbmcgdGhhdCBgZ2ZzMl9hdG9taWNfb3BlbmAgcGFzc2VzIHRoZSBgZXhjbGAgZmxhZyBkaXJlY3RseSB0byBgZ2ZzMl9jcmVhdGVfaW5vZGVgLCBhbmQgdGhhdCB0aGUgYGV4Y2xgIGZsYWcgaW5kaWNhdGVzIGV4Y2x1c2l2ZSBhY2Nlc3MuCgpJIHNlZSB0aGF0IHRoZSBvbGQgdmVyc2lvbiBvZiB0aGUgYGdmczJfY3JlYXRlX2lub2RlYCBmdW5jdGlvbiB3YXMgdXNlZCBieSBib3RoLCBidXQgdGhlIHBhdGNoIGhhcmRjb2RlcyB0aGUgYGV4Y2xgIGZsYWcgYXMgdHJ1ZS4gV2FpdCwgdGhhdCBtYWtlcyBzZW5zZS4gVGhlIGNvbW1lbnQgc2F5cyB0aGF0IHRoZSBgLmNyZWF0ZWAgaW5vZGUgb3BlcmF0aW9uIG5vIGxvbmdlciBnZXRzIHRoZSBgZXhjbGAgYXJndW1lbnQgYW5kIHRoYXQgaXQgYXNzdW1lcyB0aGUgZmlsZSBkb2VzbiYjMzk7dCBhbHJlYWR5IGV4aXN0LiBUaGUgY29tbWl0IHNlZW1zIHBlcmZlY3RseSBhbGlnbmVkIHdpdGggdGhlIHBhdGNoLiBTaW5jZSBgZ2ZzMl9jcmVhdGVgIG5vdyAqb25seSogZ2V0cyBjYWxsZWQgZm9yIGV4Y2x1c2l2ZSBjcmVhdGVzLCBoYXJkY29kaW5nIGBleGNsPXRydWVgIGlzIHRoZSByaWdodCB0aGluZyB0byBkbywgb3Igd2hlbiBWRlMgaGFuZGxlcyB0aGUgbm9uLWV4Y2x1c2l2ZSBwYXJ0LiBJdCYjMzk7cyBlc3NlbnRpYWxseSBzaW1wbGlmeWluZyB0aGUgY29kZSBwYXRoIGJlY2F1c2UgYGdmczJfY3JlYXRlYCBub3cgYXNzdW1lcyB0aGF0IGV4Y2x1c2l2aXR5IGlzIHBhcnQgb2YgdGhlIGNhbGxpbmcgY29udGV4dC4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBORlMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mc19kb19jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9uZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25mcy9kaXIuYz01Nz1zdGF0aWMgdm9pZCBuZnNfcmVhZGRpcl9jbGVhcl9hcnJheShzdHJ1Y3QgZm9saW8gKik7XG5mcy9uZnMvZGlyLmM6NTg6c3RhdGljIGludCBuZnNfZG9fY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5mcy9uZnMvZGlyLmMtNTktXHRcdFx0IHVtb2RlX3QgbW9kZSwgaW50IG9wZW5fZmxhZ3MpO1xuLS1cbmZzL25mcy9kaXIuYz0yMzA2PWludCBuZnNfYXRvbWljX29wZW5fdjIzKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvbmZzL2Rpci5jLTIzMTktXHRpZiAob3Blbl9mbGFncyBcdTAwMjYgT19DUkVBVCkge1xuZnMvbmZzL2Rpci5jOjIzMjA6XHRcdGVycm9yID0gbmZzX2RvX2NyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSwgb3Blbl9mbGFncyk7XG5mcy9uZnMvZGlyLmMtMjMyMS1cdFx0aWYgKCFlcnJvcikge1xuLS1cbmZzL25mcy9kaXIuYz0yMzkyPUVYUE9SVF9TWU1CT0xfR1BMKG5mc19pbnN0YW50aWF0ZSk7XG4tLVxuZnMvbmZzL2Rpci5jLTIzOTktICovXG5mcy9uZnMvZGlyLmM6MjQwMDpzdGF0aWMgaW50IG5mc19kb19jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbmZzL25mcy9kaXIuYy0yNDAxLVx0XHRcdCB1bW9kZV90IG1vZGUsIGludCBvcGVuX2ZsYWdzKVxuLS1cbmZzL25mcy9kaXIuYz0yNDI5PWludCBuZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9uZnMvZGlyLmMtMjQzMS17XG5mcy9uZnMvZGlyLmM6MjQzMjpcdHJldHVybiBuZnNfZG9fY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlLCBPX0VYQ0wpO1xuZnMvbmZzL2Rpci5jLTI0MzMtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODczOAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipBbmFseXppbmcgTkZTIEZpbGUgQ3JlYXRpb24gYW5kIGB2Ym94c2ZgIEltcGxpY2F0aW9ucyoqCgpSaWdodCwgc28gYG5mc19kb19jcmVhdGVgIGlzIGRlZmluaXRlbHkgdXNlZCBpbiBgbmZzX2F0b21pY19vcGVuX3YyM2AsIGFuZCBjcnVjaWFsbHksIHRoYXQgZnVuY3Rpb24gaXMgcGFzc2luZyB0aHJvdWdoIGBvcGVuX2ZsYWdzYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQuIEl0IGNvbmZpcm1zIG15IHVuZGVyc3RhbmRpbmcgdGhhdCB0aGUgdXNlIG9mIGBPX0VYQ0xgIHdpdGhpbiBgbmZzX2NyZWF0ZWAgaXMsIGluIGZhY3QsIGNvcnJlY3QsIGdpdmVuIHRoYXQgcGF0aC4gV2UmIzM5O3JlIGVmZmVjdGl2ZWx5IHJldXNpbmcgYSBsb3dlci1sZXZlbCBmdW5jdGlvbiB3aXRoIGFkZGVkIGZ1bmN0aW9uYWxpdHkuCgpCdXQsIGEgdGhvdWdodCwgd2hhdCBhYm91dCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBgdmJveHNmYD8gSSBuZWVkIHRvIGNvbnNpZGVyIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBhcHByb2FjaC4gRG9lcyBgdmJveHNmYCB1c2UgYSBzaW1pbGFyIHBhdHRlcm4/IERvZXMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBkaWZmZXJlbnQgZmxhZyB1c2UgY2F1c2UgYW55IGlzc3Vlcywgb3IgaXMgaXQgYWxyZWFkeSBoYW5kbGVkPyBJIHJlYWxseSBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgdGhpcyBpbnRlcmFjdHMgaW4gdGhlIGNvbnRleHQgb2YgYHZib3hzZmAsIGFzIHRoYXQgaXMgYW4gYXJlYSB3aGljaCBoYXMgc29tZXRpbWVzIHNob3duIHVuZXhwZWN0ZWQgYmVoYXZpb3VyLiBUaGF0JiMzOTtzIHRoZSBuZXh0IHN0ZXA7IG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSB2Ym94c2YgY29kZSBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2Ym94c2ZfZGlyX2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Zib3hzZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvdmJveHNmL2Rpci5jPTIzNj1zdGF0aWMgaW50IHZib3hzZl9kaXJfaW5zdGFudGlhdGUoc3RydWN0IGlub2RlICpwYXJlbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy92Ym94c2YvZGlyLmMtMjU2LVxuZnMvdmJveHNmL2Rpci5jOjI1NzpzdGF0aWMgaW50IHZib3hzZl9kaXJfY3JlYXRlKHN0cnVjdCBpbm9kZSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5mcy92Ym94c2YvZGlyLmMtMjU4LVx0XHRcdCAgICAgdW1vZGVfdCBtb2RlLCBib29sIGlzX2RpciwgYm9vbCBleGNsLCB1NjQgKmhhbmRsZV9yZXQpXG4tLVxuZnMvdmJveHNmL2Rpci5jPTI5OT1zdGF0aWMgaW50IHZib3hzZl9kaXJfbWtmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL3Zib3hzZi9kaXIuYy0zMDIte1xuZnMvdmJveHNmL2Rpci5jOjMwMzpcdHJldHVybiB2Ym94c2ZfZGlyX2NyZWF0ZShwYXJlbnQsIGRlbnRyeSwgbW9kZSwgZmFsc2UsIHRydWUsIE5VTEwpO1xuZnMvdmJveHNmL2Rpci5jLTMwNC19XG4tLVxuZnMvdmJveHNmL2Rpci5jPTMwNj1zdGF0aWMgc3RydWN0IGRlbnRyeSAqdmJveHNmX2Rpcl9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy92Ym94c2YvZGlyLmMtMzA5LXtcbmZzL3Zib3hzZi9kaXIuYzozMTA6XHRyZXR1cm4gRVJSX1BUUih2Ym94c2ZfZGlyX2NyZWF0ZShwYXJlbnQsIGRlbnRyeSwgbW9kZSwgdHJ1ZSwgdHJ1ZSwgTlVMTCkpO1xuZnMvdmJveHNmL2Rpci5jLTMxMS19XG4tLVxuZnMvdmJveHNmL2Rpci5jPTMxMz1zdGF0aWMgaW50IHZib3hzZl9kaXJfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpwYXJlbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy92Ym94c2YvZGlyLmMtMzMwLVxuZnMvdmJveHNmL2Rpci5jOjMzMTpcdGVyciA9IHZib3hzZl9kaXJfY3JlYXRlKHBhcmVudCwgZGVudHJ5LCBtb2RlLCBmYWxzZSwgZmxhZ3MgXHUwMDI2IE9fRVhDTCwgXHUwMDI2aGFuZGxlKTtcbmZzL3Zib3hzZi9kaXIuYy0zMzItXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTUzMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9ucyBvZiBhIEZpbGVzeXN0ZW0gUmVmYWN0b3IqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgdmJveHNmX2Rpcl9jcmVhdGVgIGlzIGJlaW5nIHVzZWQgYnkgYHZib3hzZl9kaXJfYXRvbWljX29wZW5gLCB3aGljaCBpcyBhbHJlYWR5IGhhbmRsaW5nIGBPX0VYQ0xgIGZsYWdzLiBBbHNvLCB0aGUgYHZib3hzZl9kaXJfbWtmaWxlYCAod2hpY2ggaXMgdGhlIGFjdHVhbCBgLmNyZWF0ZWAgb3BlcmF0aW9uKSBwYXNzZXMgYHRydWVgIGZvciBleGNsdXNpdmUgY3JlYXRpb24uIFNvLCB0aGUgYC5jcmVhdGVgIGlub2RlIG9wZXJhdGlvbiBpcyBub3cgKnN0cmljdGx5KiBmb3IgZXhjbHVzaXZlIGNyZWF0ZXMuIEl0IHNlZW1zIHRoZSBWRlMgbGF5ZXIgaXMgdGFraW5nIHJlc3BvbnNpYmlsaXR5IGZvciBoYW5kbGluZyBub24tZXhjbHVzaXZlIHNjZW5hcmlvcywgYW5kIHRoZSBmaWxlc3lzdGVtIGNvZGUgY2FuIGp1c3QgYXNzdW1lIHRoZSBmaWxlIGRvZXNuJiMzOTt0IGV4aXN0LgoKVGhpcyBmZWVscyBsaWtlIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCB0aGUgaW1wbGljYXRpb24gaXMgdGhhdCB3ZSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gZnV6emluZyB0aGlzLiBJdCYjMzk7cyBub3QgYSBsb2NhbGl6ZWQgY2hhbmdlOyBpdOKAmXMgYSB0cmVlLXdpZGUgcmVmYWN0b3JpbmcgdGhhdCBhZmZlY3RzIHRoZSBiZWhhdmlvciBvZiBgdmZzX2NyZWF0ZWAgYW5kIGBsb29rdXBfb3BlbmAgaW4gaG93IHRoZXkgY2FsbCBgY3JlYXRlYC4gVGhlIGNoYW5nZXMgYXJlIHN1YnRsZSwgYnV0IHRoZXkgY291bGQgaGF2ZSBzZXJpb3VzIGNvbnNlcXVlbmNlcy4KCldhaXQgYSBzZWNvbmTigKYgYHZmc19jcmVhdGVgICp1c2VkKiB0byBwYXNzIGB0cnVlYCBmb3IgZXhjbHVzaXZlIGNyZWF0aW9uIChgZXhjbGApLCBhbmQgbm93IGl0IGRvZXNuJiMzOTt0IHBhc3MgYW55dGhpbmcuIFRoZSBmaWxlc3lzdGVtIG5vdyBpbXBsaWNpdGx5IGFzc3VtZXMgYHRydWVgLiBBbmQgYGxvb2t1cF9vcGVuYCAqdXNlZCogdG8gcGFzcyBgb3Blbl9mbGFnICZhbXA7IE9fRVhDTGAuIE5vdywgaXQgZG9lc24mIzM5O3QgcGFzcyBhbnl0aGluZywgYW5kIHRoZSBmaWxlc3lzdGVtIHN0aWxsIGltcGxpY2l0bHkgYXNzdW1lcyBgdHJ1ZWAuCgpIb2xkIG9uLi4uIGlmIGBsb29rdXBfb3BlbmAgKnVzZWQqIHRvIHBhc3MgdGhlIGJpdHdpc2UgQU5EIG9mIHRoZSBgb3Blbl9mbGFnYCBhbmQgYE9fRVhDTGAsIGFuZCBub3cgaXQmIzM5O3MgKm5vdCogcGFzc2luZyBhbnl0aGluZywgYW5kIHRoZSBmaWxlc3lzdGVtIGFsd2F5cyBhc3N1bWVzIGB0cnVlYCwgdGhlbiBmb3Igbm9uLWV4Y2x1c2l2ZSBjcmVhdGVzIChgT19DUkVBVGAgd2l0aG91dCBgT19FWENMYCksIHRoZSBmaWxlc3lzdGVtJiMzOTtzIGBjcmVhdGVgIG1ldGhvZCBpcyAqbm93KiBiZWhhdmluZyBhcyBpZiBgT19FWENMYCAqd2FzKiBwYXNzZWQhIFRoYXQmIzM5O3MgYSBicmVha2luZyBjaGFuZ2UuCgpJcyB0aGF0IHJlYWxseSB3aGF0IHRoaXMgbWVhbnM/IEFtIEkgdW5kZXJzdGFuZGluZyB0aGlzIGNvcnJlY3RseT8gSSBiZXR0ZXIgZG91YmxlLWNoZWNrIGBsb29rdXBfb3BlbmAgaW4gYGZzL25hbWVpLmNgIHRvIGJlIGNlcnRhaW4uIEdvdHRhIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL25hbWVpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ0ODA6XHRcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7XG40NDgxOlx0XHRcdHN0cnVjdCBkZW50cnkgKnJlcyA9IGRpcl9pbm9kZS1cdTAwM2VpX29wLVx1MDAzZWxvb2t1cChkaXJfaW5vZGUsIGRlbnRyeSxcbjQ0ODI6XHRcdFx0XHRcdFx0XHRcdCAgICAgbmQtXHUwMDNlZmxhZ3MpO1xuNDQ4MzpcdFx0XHRkX2xvb2t1cF9kb25lKGRlbnRyeSk7XG40NDg0Olx0XHRcdGlmICh1bmxpa2VseShyZXMpKSB7XG40NDg1Olx0XHRcdFx0aWYgKElTX0VSUihyZXMpKSB7XG40NDg2Olx0XHRcdFx0XHRlcnJvciA9IFBUUl9FUlIocmVzKTtcbjQ0ODc6XHRcdFx0XHRcdGdvdG8gb3V0X2RwdXQ7XG40NDg4Olx0XHRcdFx0fVxuNDQ4OTpcdFx0XHRcdGRwdXQoZGVudHJ5KTtcbjQ0OTA6XHRcdFx0XHRkZW50cnkgPSByZXM7XG40NDkxOlx0XHRcdH1cbjQ0OTI6XHRcdH1cbjQ0OTM6XHRcbjQ0OTQ6XHRcdC8qIE5lZ2F0aXZlIGRlbnRyeSwganVzdCBjcmVhdGUgdGhlIGZpbGUgKi9cbjQ0OTU6XHRcdGlmICghZGVudHJ5LVx1MDAzZWRfaW5vZGUgXHUwMDI2XHUwMDI2IChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpKSB7XG40NDk2Olx0XHRcdC8qIGJ1dCBicmVhayB0aGUgZGlyZWN0b3J5IGxlYXNlIGZpcnN0ISAqL1xuNDQ5NzpcdFx0XHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXJfaW5vZGUsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRlbGVnYXRlZF9pbm9kZSk7XG40NDk4Olx0XHRcdGlmIChlcnJvcilcbjQ0OTk6XHRcdFx0XHRnb3RvIG91dF9kcHV0O1xuNDUwMDpcdFxuNDUwMTpcdFx0XHRmaWxlLVx1MDAzZWZfbW9kZSB8PSBGTU9ERV9DUkVBVEVEO1xuNDUwMjpcdFx0XHRhdWRpdF9pbm9kZV9jaGlsZChkaXJfaW5vZGUsIGRlbnRyeSwgQVVESVRfVFlQRV9DSElMRF9DUkVBVEUpO1xuNDUwMzpcdFx0XHRpZiAoIWRpcl9pbm9kZS1cdTAwM2VpX29wLVx1MDAzZWNyZWF0ZSkge1xuNDUwNDpcdFx0XHRcdGVycm9yID0gLUVBQ0NFUztcbjQ1MDU6XHRcdFx0XHRnb3RvIG91dF9kcHV0O1xuNDUwNjpcdFx0XHR9XG40NTA3Olx0XG40NTA4Olx0XHRcdGVycm9yID0gZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlY3JlYXRlKGlkbWFwLCBkaXJfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XG40NTA5Olx0XHRcdGlmIChlcnJvcilcbjQ1MTA6XHRcdFx0XHRnb3RvIG91dF9kcHV0O1xuNDUxMTpcdFx0fVxuNDUxMjpcdFx0aWYgKHVubGlrZWx5KGNyZWF0ZV9lcnJvcikgXHUwMDI2XHUwMDI2ICFkZW50cnktXHUwMDNlZF9pbm9kZSkge1xuNDUxMzpcdFx0XHRlcnJvciA9IGNyZWF0ZV9lcnJvcjtcbjQ1MTQ6XHRcdFx0Z290byBvdXRfZHB1dDtcbjQ1MTU6XHRcdH1cbjQ1MTY6XHRcdHJldHVybiBkZW50cnk7XG40NTE3Olx0XG40NTE4Olx0b3V0X2RwdXQ6XG40NTE5Olx0XHRkcHV0KGRlbnRyeSk7XG40NTIwOlx0XHRyZXR1cm4gRVJSX1BUUihlcnJvcik7XG40NTIxOlx0fVxuNDUyMjpcdFxuNDUyMzpcdHN0YXRpYyBpbmxpbmUgYm9vbCB0cmFpbGluZ19zbGFzaGVzKHN0cnVjdCBuYW1laWRhdGEgKm5kKVxuNDUyNDpcdHtcbjQ1MjU6XHRcdHJldHVybiAoYm9vbCluZC1cdTAwM2VsYXN0Lm5hbWVbbmQtXHUwMDNlbGFzdC5sZW5dO1xuNDUyNjpcdH1cbjQ1Mjc6XHRcbjQ1Mjg6XHRzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX2Zhc3RfZm9yX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIGludCBvcGVuX2ZsYWcpXG40NTI5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTA1OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipBbmFseXppbmcgdGhlIGBsb29rdXBfb3BlbmAgRnVuY3Rpb24qKgoKSG1tLCB0aGUgY29kZSByZW1pbmRzIG1lIHRoYXQgYGxvb2t1cF9vcGVuYCBnZXRzIGludm9rZWQgd2hlbiBgT19DUkVBVGAgaXMgc2V0LiBOb3cgdGhhdCYjMzk7cyBhIGtleSBkZXRhaWwgdG8ga2VlcCBpbiBtaW5kLiBUaGUgaW50ZXJlc3RpbmcgdGhpbmcgaXMsIHRoYXQgaWYgdGhlIGZpbGVzeXN0ZW0gaGFzIGFuIGBhdG9taWNfb3BlbmAgaW1wbGVtZW50YXRpb24sIGl0IHNob3VsZCBhY3R1YWxseSBiZSBjYWxsZWQgKmVhcmxpZXIqIHdpdGhpbiBgbG9va3VwX29wZW5gLiBTbywgdGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBhbmFseXNpcy4gTGV0IG1lIGp1c3QgcXVpY2tseSB0cmFjZSBiYWNrIHRocm91Z2ggYGxvb2t1cF9vcGVuYCwgYW5kIGdldCBteSBiZWFyaW5ncyBvbiB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgdGhhdCBlYXJseSBjYWxsIHdvdWxkIGZpdCBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTg6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9uYW1laS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NDAwOlx0ICogaGFkbiYjMzk7dCBiZWVuIHNwZWNpZmllZC5cbjQ0MDE6XHQgKlxuNDQwMjpcdCAqIEFuIGVycm9yIGNvZGUgaXMgcmV0dXJuZWQgb24gZmFpbHVyZS5cbjQ0MDM6XHQgKi9cbjQ0MDQ6XHRzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuNDQwNTpcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3AsXG40NDA2Olx0XHRcdFx0XHQgIGJvb2wgZ290X3dyaXRlLCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkZWxlZ2F0ZWRfaW5vZGUpXG40NDA3Olx0e1xuNDQwODpcdFx0c3RydWN0IG1udF9pZG1hcCAqaWRtYXA7XG40NDA5Olx0XHRzdHJ1Y3QgZGVudHJ5ICpkaXIgPSBuZC1cdTAwM2VwYXRoLmRlbnRyeTtcbjQ0MTA6XHRcdHN0cnVjdCBpbm9kZSAqZGlyX2lub2RlID0gZGlyLVx1MDAzZWRfaW5vZGU7XG40NDExOlx0XHRpbnQgb3Blbl9mbGFnID0gb3AtXHUwMDNlb3Blbl9mbGFnO1xuNDQxMjpcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xuNDQxMzpcdFx0aW50IGVycm9yLCBjcmVhdGVfZXJyb3IgPSAwO1xuNDQxNDpcdFx0dW1vZGVfdCBtb2RlID0gb3AtXHUwMDNlbW9kZTtcbjQ0MTU6XHRcbjQ0MTY6XHRcdGlmICh1bmxpa2VseShJU19ERUFERElSKGRpcl9pbm9kZSkpKVxuNDQxNzpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcbjQ0MTg6XHRcbjQ0MTk6XHRcdGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNj0gfkZNT0RFX0NSRUFURUQ7XG40NDIwOlx0XHRkZW50cnkgPSBkX2xvb2t1cChkaXIsIFx1MDAyNm5kLVx1MDAzZWxhc3QpO1xuNDQyMTpcdFx0Zm9yICg7Oykge1xuNDQyMjpcdFx0XHRpZiAoIWRlbnRyeSkge1xuNDQyMzpcdFx0XHRcdGRlbnRyeSA9IGRfYWxsb2NfcGFyYWxsZWwoZGlyLCBcdTAwMjZuZC1cdTAwM2VsYXN0KTtcbjQ0MjQ6XHRcdFx0XHRpZiAoSVNfRVJSKGRlbnRyeSkpXG40NDI1Olx0XHRcdFx0XHRyZXR1cm4gZGVudHJ5O1xuNDQyNjpcdFx0XHR9XG40NDI3Olx0XHRcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKVxuNDQyODpcdFx0XHRcdGJyZWFrO1xuNDQyOTpcdFxuNDQzMDpcdFx0XHRlcnJvciA9IGRfcmV2YWxpZGF0ZShkaXJfaW5vZGUsIFx1MDAyNm5kLVx1MDAzZWxhc3QsIGRlbnRyeSwgbmQtXHUwMDNlZmxhZ3MpO1xuNDQzMTpcdFx0XHRpZiAobGlrZWx5KGVycm9yIFx1MDAzZSAwKSlcbjQ0MzI6XHRcdFx0XHRicmVhaztcbjQ0MzM6XHRcdFx0aWYgKGVycm9yKVxuNDQzNDpcdFx0XHRcdGdvdG8gb3V0X2RwdXQ7XG40NDM1Olx0XHRcdGRfaW52YWxpZGF0ZShkZW50cnkpO1xuNDQzNjpcdFx0XHRkcHV0KGRlbnRyeSk7XG40NDM3Olx0XHRcdGRlbnRyeSA9IE5VTEw7XG40NDM4Olx0XHR9XG40NDM5Olx0XHRpZiAoZGVudHJ5LVx1MDAzZWRfaW5vZGUpIHtcbjQ0NDA6XHRcdFx0LyogQ2FjaGVkIHBvc2l0aXZlIGRlbnRyeTogd2lsbCBvcGVuIGluIGZfb3AtXHUwMDNlb3BlbiAqL1xuNDQ0MTpcdFx0XHRyZXR1cm4gZGVudHJ5O1xuNDQ0MjpcdFx0fVxuNDQ0MzpcdFxuNDQ0NDpcdFx0aWYgKG9wZW5fZmxhZyBcdTAwMjYgT19DUkVBVClcbjQ0NDU6XHRcdFx0YXVkaXRfaW5vZGUobmQtXHUwMDNlbmFtZSwgZGlyLCBBVURJVF9JTk9ERV9QQVJFTlQpO1xuNDQ0NjpcdFxuNDQ0NzpcdFx0LypcbjQ0NDg6XHRcdCAqIENoZWNraW5nIHdyaXRlIHBlcm1pc3Npb24gaXMgdHJpY2t5LCBiYWN1c2Ugd2UgZG9uJiMzOTt0IGtub3cgaWYgd2UgYXJlXG40NDQ5Olx0XHQgKiBnb2luZyB0byBhY3R1YWxseSBuZWVkIGl0OiBPX0NSRUFUIG9wZW5zIHNob3VsZCB3b3JrIGFzIGxvbmcgYXMgdGhlXG40NDUwOlx0XHQgKiBmaWxlIGV4aXN0cy4gIEJ1dCBjaGVja2luZyBleGlzdGVuY2UgYnJlYWtzIGF0b21pY2l0eS4gIFRoZSB0cmljayBpc1xuNDQ1MTpcdFx0ICogdG8gY2hlY2sgYWNjZXNzIGFuZCBpZiBub3QgZ3JhbnRlZCBjbGVhciBPX0NSRUFUIGZyb20gdGhlIGZsYWdzLlxuNDQ1MjpcdFx0ICpcbjQ0NTM6XHRcdCAqIEFub3RoZXIgcHJvYmxlbSBpcyByZXR1cmluZyB0aGUgXCYjMzQ7cmlnaHRcJiMzNDsgZXJyb3IgdmFsdWUgKGUuZy4gZm9yIGFuXG40NDU0Olx0XHQgKiBPX0VYQ0wgb3BlbiB3ZSB3YW50IHRvIHJldHVybiBFRVhJU1Qgbm90IEVST0ZTKS5cbjQ0NTU6XHRcdCAqL1xuNDQ1NjpcdFx0aWYgKHVubGlrZWx5KCFnb3Rfd3JpdGUpKVxuNDQ1NzpcdFx0XHRvcGVuX2ZsYWcgXHUwMDI2PSB+T19UUlVOQztcbjQ0NTg6XHRcdGlkbWFwID0gbW50X2lkbWFwKG5kLVx1MDAzZXBhdGgubW50KTtcbjQ0NTk6XHRcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpIHtcbjQ0NjA6XHRcdFx0aWYgKG9wZW5fZmxhZyBcdTAwMjYgT19FWENMKVxuNDQ2MTpcdFx0XHRcdG9wZW5fZmxhZyBcdTAwMjY9IH5PX1RSVU5DO1xuNDQ2MjpcdFx0XHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLVx1MDAzZWRfaW5vZGUsIG1vZGUsIG1vZGUsIG1vZGUpO1xuNDQ2MzpcdFx0XHRpZiAobGlrZWx5KGdvdF93cml0ZSkpXG40NDY0Olx0XHRcdFx0Y3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCBcdTAwMjZuZC1cdTAwM2VwYXRoLFxuNDQ2NTpcdFx0XHRcdFx0XHRcdCAgICBkZW50cnksIG1vZGUpO1xuNDQ2NjpcdFx0XHRlbHNlXG40NDY3Olx0XHRcdFx0Y3JlYXRlX2Vycm9yID0gLUVST0ZTO1xuNDQ2ODpcdFx0fVxuNDQ2OTpcdFx0aWYgKGNyZWF0ZV9lcnJvcilcbjQ0NzA6XHRcdFx0b3Blbl9mbGFnIFx1MDAyNj0gfk9fQ1JFQVQ7XG40NDcxOlx0XHRpZiAoZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlYXRvbWljX29wZW4pIHtcbjQ0NzI6XHRcdFx0aWYgKG5kLVx1MDAzZWZsYWdzIFx1MDAyNiBMT09LVVBfRElSRUNUT1JZKVxuNDQ3MzpcdFx0XHRcdG9wZW5fZmxhZyB8PSBPX0RJUkVDVE9SWTtcbjQ0NzQ6XHRcdFx0ZGVudHJ5ID0gYXRvbWljX29wZW4oXHUwMDI2bmQtXHUwMDNlcGF0aCwgZGVudHJ5LCBmaWxlLCBvcGVuX2ZsYWcsIG1vZGUpO1xuNDQ3NTpcdFx0XHRpZiAodW5saWtlbHkoY3JlYXRlX2Vycm9yKSBcdTAwMjZcdTAwMjYgZGVudHJ5ID09IEVSUl9QVFIoLUVOT0VOVCkpXG40NDc2Olx0XHRcdFx0ZGVudHJ5ID0gRVJSX1BUUihjcmVhdGVfZXJyb3IpO1xuNDQ3NzpcdFx0XHRyZXR1cm4gZGVudHJ5O1xuNDQ3ODpcdFx0fVxuNDQ3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjU3MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEF0b21pYyBPcGVuIGFuZCBOb24tRXhjbHVzaXZlIENyZWF0ZSBGbG93KioKCk9rYXksIHNvIGBhdG9taWNfb3BlbmAgZ2V0cyBjYWxsZWQgZmlyc3QsIGlmIGl0JiMzOTtzIHRoZXJlLiBNYWtlcyBzZW5zZS4gSWYgaXQmIzM5O3MgKm5vdCogcHJlc2VudCwgdGhlIGZsb3cgZ29lcyB0aHJvdWdoIGBsb29rdXBgIOKAkyBhc3N1bWluZywgb2YgY291cnNlLCB0aGF0IGBkX2luX2xvb2t1cChkZW50cnkpYCByZXR1cm5zIHRydWUuIElmIHRoYXQgc3RpbGwgcmVzdWx0cyBpbiBhIG5lZ2F0aXZlIG91dGNvbWUsIGFuZCBgT19DUkVBVGAgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBzeXN0ZW0gY2FsbHMgYGNyZWF0ZWAuIFNvLCB3aGVuIGBhdG9taWNfb3BlbmAgaXNuJiMzOTt0IGltcGxlbWVudGVkLCB0aGUgVkZTIGRvZXMgYSBzaW1wbGU6IDEuIGBsb29rdXBgLCBhbmQgMi4gaWYgbmVnYXRpdmUsIGBjcmVhdGVgLgoKTm93LCBpZiBpdCYjMzk7cyBhIG5vbi1leGNsdXNpdmUgY3JlYXRlIChgT19DUkVBVGAgKndpdGhvdXQqIGBPX0VYQ0xgKSwgYW5kIHRoZSBmaWxlIGRvZXNuJiMzOTt0IGV4aXN0LCBpdCB1c2VzIGBjcmVhdGVgLiBCZWZvcmUgdGhpcyBwYXRjaCwgd2UgcGFzc2VkIGBleGNsID0gZmFsc2VgIHRvIGBjcmVhdGVgLiBOb3csIHdlIHBhc3Mgbm90aGluZywgbGV0dGluZyB0aGUgZmlsZXN5c3RlbSBhc3N1bWUgYGV4Y2wgPSB0cnVlYC4gV2FpdC4uLiBpZiB0aGUgZmlsZXN5c3RlbSAqYXNzdW1lcyogYGV4Y2wgPSB0cnVlYCwgZG9lc24mIzM5O3QgdGhhdCBtZWFuIGl0JiMzOTtzIGdvaW5nIHRvIGZhaWwgaWYgdGhlIGZpbGUgYWxyZWFkeSBleGlzdHM/CgpZZXMsIGJ1dCB3YWl0LiBUaGUgVkZTIGFscmVhZHkgY29uZmlybWVkIHRoYXQgdGhlIGZpbGUgKmRvZXNuJiMzOTt0KiBleGlzdC4gSXQmIzM5O3MgYSBuZWdhdGl2ZSBkZW50cnkuIEJ1dCB3aGF0IGlmIHRoZXJlJiMzOTtzIGEgcmFjZT8gV2hhdCBpZiB0aGUgZmlsZSBnZXRzIGNyZWF0ZWQgKmNvbmN1cnJlbnRseSogYmV0d2VlbiBgbG9va3VwYCBhbmQgYGNyZWF0ZWA/IElmIHRoZSBmaWxlc3lzdGVtIGlzIHVzaW5nIGFuIGV4Y2x1c2l2ZSBjcmVhdGUgKGUuZy4sIGBta25vZGApIGJlY2F1c2UgaXQgYXNzdW1lcyBgZXhjbCA9IHRydWVgLCBpdCB3aWxsIGZhaWwgd2l0aCBgRUVYSVNUYC4gVGhlbiB3aGF0IGRvZXMgdGhlIFZGUyBkbz8KCkhvbGQgb24uIElmIGBjcmVhdGVgIHJldHVybnMgYEVFWElTVGAsIGBsb29rdXBfb3BlbmAgcmV0dXJucyBgRVJSX1BUUigtRUVYSVNUKWAuIEJ1dCBpbiBhIG5vbi1leGNsdXNpdmUgY3JlYXRlIHNpdHVhdGlvbiwgd2UgKnNob3VsZG4mIzM5O3QqIGZhaWwgd2l0aCBgRUVYSVNUYCBpZiB0aGUgZmlsZSBpcyBjcmVhdGVkIGNvbmN1cnJlbnRseSEgV2Ugc2hvdWxkIGp1c3Qgb3BlbiB0aGUgZXhpc3RpbmcgZmlsZS4gU28sIEkgbmVlZCB0byBjaGVjayBob3cgdGhlIFZGUyBoYW5kbGVzIGBFRVhJU1RgIHJldHVybmVkIGZyb20gYGxvb2t1cF9vcGVuYCB3aXRoaW4gYG9wZW5fbGFzdF9sb29rdXBzYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcHJvYmxlbSBsaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL25hbWVpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NTMwOlx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XG40NTMxOlx0XG40NTMyOlx0XHRpZiAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSB7XG40NTMzOlx0XHRcdGlmICh0cmFpbGluZ19zbGFzaGVzKG5kKSlcbjQ1MzQ6XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUlTRElSKTtcbjQ1MzU6XHRcbjQ1MzY6XHRcdFx0LyogRG9uJiMzOTt0IGJvdGhlciBvbiBhbiBPX0VYQ0wgY3JlYXRlICovXG40NTM3Olx0XHRcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fRVhDTClcbjQ1Mzg6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbjQ1Mzk6XHRcdH1cbjQ1NDA6XHRcbjQ1NDE6XHRcdGlmICh0cmFpbGluZ19zbGFzaGVzKG5kKSlcbjQ1NDI6XHRcdFx0bmQtXHUwMDNlZmxhZ3MgfD0gTE9PS1VQX0ZPTExPVyB8IExPT0tVUF9ESVJFQ1RPUlk7XG40NTQzOlx0XG40NTQ0Olx0XHRkZW50cnkgPSBsb29rdXBfZmFzdChuZCk7XG40NTQ1Olx0XHRpZiAoSVNfRVJSX09SX05VTEwoZGVudHJ5KSlcbjQ1NDY6XHRcdFx0cmV0dXJuIGRlbnRyeTtcbjQ1NDc6XHRcbjQ1NDg6XHRcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpIHtcbjQ1NDk6XHRcdFx0LyogRGlzY2FyZCBuZWdhdGl2ZSBkZW50cmllcy4gTmVlZCBpbm9kZV9sb2NrIHRvIGRvIHRoZSBjcmVhdGUgKi9cbjQ1NTA6XHRcdFx0aWYgKCFkZW50cnktXHUwMDNlZF9pbm9kZSkge1xuNDU1MTpcdFx0XHRcdGlmICghKG5kLVx1MDAzZWZsYWdzIFx1MDAyNiBMT09LVVBfUkNVKSlcbjQ1NTI6XHRcdFx0XHRcdGRwdXQoZGVudHJ5KTtcbjQ1NTM6XHRcdFx0XHRkZW50cnkgPSBOVUxMO1xuNDU1NDpcdFx0XHR9XG40NTU1Olx0XHR9XG40NTU2Olx0XHRyZXR1cm4gZGVudHJ5O1xuNDU1NzpcdH1cbjQ1NTg6XHRcbjQ1NTk6XHRzdGF0aWMgY29uc3QgY2hhciAqb3Blbl9sYXN0X2xvb2t1cHMoc3RydWN0IG5hbWVpZGF0YSAqbmQsXG40NTYwOlx0XHRcdCAgIHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApXG40NTYxOlx0e1xuNDU2MjpcdFx0c3RydWN0IGRlbGVnYXRlZF9pbm9kZSBkZWxlZ2F0ZWRfaW5vZGUgPSB7IH07XG40NTYzOlx0XHRzdHJ1Y3QgZGVudHJ5ICpkaXIgPSBuZC1cdTAwM2VwYXRoLmRlbnRyeTtcbjQ1NjQ6XHRcdGludCBvcGVuX2ZsYWcgPSBvcC1cdTAwM2VvcGVuX2ZsYWc7XG40NTY1Olx0XHRib29sIGdvdF93cml0ZSA9IGZhbHNlO1xuNDU2NjpcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xuNDU2NzpcdFx0Y29uc3QgY2hhciAqcmVzO1xuNDU2ODpcdFxuNDU2OTpcdFx0bmQtXHUwMDNlZmxhZ3MgfD0gb3AtXHUwMDNlaW50ZW50O1xuNDU3MDpcdFxuNDU3MTpcdFx0aWYgKG5kLVx1MDAzZWxhc3RfdHlwZSAhPSBMQVNUX05PUk0pIHtcbjQ1NzI6XHRcdFx0aWYgKG5kLVx1MDAzZWRlcHRoKVxuNDU3MzpcdFx0XHRcdHB1dF9saW5rKG5kKTtcbjQ1NzQ6XHRcdFx0cmV0dXJuIGhhbmRsZV9kb3RzKG5kLCBuZC1cdTAwM2VsYXN0X3R5cGUpO1xuNDU3NTpcdFx0fVxuNDU3NjpcdFxuNDU3NzpcdFx0LyogV2UgX2Nhbl8gYmUgaW4gUkNVIG1vZGUgaGVyZSAqL1xuNDU3ODpcdFx0ZGVudHJ5ID0gbG9va3VwX2Zhc3RfZm9yX29wZW4obmQsIG9wZW5fZmxhZyk7XG40NTc5Olx0XHRpZiAoSVNfRVJSKGRlbnRyeSkpXG40NTgwOlx0XHRcdHJldHVybiBFUlJfQ0FTVChkZW50cnkpO1xuNDU4MTpcdFxuNDU4MjpcdFx0aWYgKGxpa2VseShkZW50cnkpKVxuNDU4MzpcdFx0XHRnb3RvIGZpbmlzaF9sb29rdXA7XG40NTg0Olx0XG40NTg1Olx0XHRpZiAoIShvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpKSB7XG40NTg2Olx0XHRcdGlmIChXQVJOX09OX09OQ0UobmQtXHUwMDNlZmxhZ3MgXHUwMDI2IExPT0tVUF9SQ1UpKVxuNDU4NzpcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FQ0hJTEQpO1xuNDU4ODpcdFx0fSBlbHNlIHtcbjQ1ODk6XHRcdFx0aWYgKG5kLVx1MDAzZWZsYWdzIFx1MDAyNiBMT09LVVBfUkNVKSB7XG40NTkwOlx0XHRcdFx0aWYgKCF0cnlfdG9fdW5sYXp5KG5kKSlcbjQ1OTE6XHRcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FQ0hJTEQpO1xuNDU5MjpcdFx0XHR9XG40NTkzOlx0XHR9XG40NTk0Olx0cmV0cnk6XG40NTk1Olx0XHRpZiAob3Blbl9mbGFnIFx1MDAyNiAoT19DUkVBVCB8IE9fVFJVTkMgfCBPX1dST05MWSB8IE9fUkRXUikpIHtcbjQ1OTY6XHRcdFx0Z290X3dyaXRlID0gIW1udF93YW50X3dyaXRlKG5kLVx1MDAzZXBhdGgubW50KTtcbjQ1OTc6XHRcdFx0LypcbjQ1OTg6XHRcdFx0ICogZG8gX25vdF8gZmFpbCB5ZXQgLSB3ZSBtaWdodCBub3QgbmVlZCB0aGF0IG9yIGZhaWwgd2l0aFxuNDU5OTpcdFx0XHQgKiBhIGRpZmZlcmVudCBlcnJvcjsgbGV0IGxvb2t1cF9vcGVuKCkgZGVjaWRlOyB3ZSYjMzk7bGwgYmVcbjQ2MDA6XHRcdFx0ICogZHJvcHBpbmcgdGhpcyBvbmUgYW55d2F5LlxuNDYwMTpcdFx0XHQgKi9cbjQ2MDI6XHRcdH1cbjQ2MDM6XHRcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpXG40NjA0Olx0XHRcdGlub2RlX2xvY2soZGlyLVx1MDAzZWRfaW5vZGUpO1xuNDYwNTpcdFx0ZWxzZVxuNDYwNjpcdFx0XHRpbm9kZV9sb2NrX3NoYXJlZChkaXItXHUwMDNlZF9pbm9kZSk7XG40NjA3Olx0XHRkZW50cnkgPSBsb29rdXBfb3BlbihuZCwgZmlsZSwgb3AsIGdvdF93cml0ZSwgXHUwMDI2ZGVsZWdhdGVkX2lub2RlKTtcbjQ2MDg6XHRcdGlmICghSVNfRVJSKGRlbnRyeSkpIHtcbjQ2MDk6XHRcdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9DUkVBVEVEKVxuNDYxMDpcdFx0XHRcdGZzbm90aWZ5X2NyZWF0ZShkaXItXHUwMDNlZF9pbm9kZSwgZGVudHJ5KTtcbjQ2MTE6XHRcdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9PUEVORUQpXG40NjEyOlx0XHRcdFx0ZnNub3RpZnlfb3BlbihmaWxlKTtcbjQ2MTM6XHRcdH1cbjQ2MTQ6XHRcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpXG40NjE1Olx0XHRcdGlub2RlX3VubG9jayhkaXItXHUwMDNlZF9pbm9kZSk7XG40NjE2Olx0XHRlbHNlXG40NjE3Olx0XHRcdGlub2RlX3VubG9ja19zaGFyZWQoZGlyLVx1MDAzZWRfaW5vZGUpO1xuNDYxODpcdFxuNDYxOTpcdFx0aWYgKGdvdF93cml0ZSlcbjQ2MjA6XHRcdFx0bW50X2Ryb3Bfd3JpdGUobmQtXHUwMDNlcGF0aC5tbnQpO1xuNDYyMTpcdFxuNDYyMjpcdFx0aWYgKElTX0VSUihkZW50cnkpKSB7XG40NjIzOlx0XHRcdGlmIChpc19kZWxlZ2F0ZWQoXHUwMDI2ZGVsZWdhdGVkX2lub2RlKSkge1xuNDYyNDpcdFx0XHRcdGludCBlcnJvciA9IGJyZWFrX2RlbGVnX3dhaXQoXHUwMDI2ZGVsZWdhdGVkX2lub2RlKTtcbjQ2MjU6XHRcbjQ2MjY6XHRcdFx0XHRpZiAoIWVycm9yKVxuNDYyNzpcdFx0XHRcdFx0Z290byByZXRyeTtcbjQ2Mjg6XHRcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnJvcik7XG40NjI5Olx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTg6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ4NzcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludGVybmFsIFJldmlldyBvZiBgb3Blbl9sYXN0X2xvb2t1cHNgIEZ1bmN0aW9uYWxpdHkqKgoKSG1tLCBob2xkIG9uLiBEb2VzIGBvcGVuX2xhc3RfbG9va3Vwc2AgYWN0dWFsbHkgYWNjb3VudCBmb3IgYEVFWElTVGAgZXJyb3JzPyBUaGF0JiMzOTtzIGEgY3JpdGljYWwgZGV0YWlsIEkgbmVlZCB0byB2ZXJpZnkuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCBmdW5jdGlvbiBiZWhhdmVzIGFzIGV4cGVjdGVkIGluIHRoYXQgcGFydGljdWxhciBzY2VuYXJpby4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJlLWV4YW1pbmUgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBvcGVuX2xhc3RfbG9va3Vwc2AgdG8gY29uZmlybSBpdCBoYW5kbGVzIHRoYXQgZWRnZSBjYXNlIGNvcnJlY3RseS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoYXQgc2VjdGlvbiBvZiBjb2RlIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gZmlsZSBhbHJlYWR5IGV4aXN0cyBlcnJvcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDYzMDpcdFx0XHRyZXR1cm4gRVJSX0NBU1QoZGVudHJ5KTtcbjQ2MzE6XHRcdH1cbjQ2MzI6XHRcbjQ2MzM6XHRcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgKEZNT0RFX09QRU5FRCB8IEZNT0RFX0NSRUFURUQpKSB7XG40NjM0Olx0XHRcdGRwdXQobmQtXHUwMDNlcGF0aC5kZW50cnkpO1xuNDYzNTpcdFx0XHRuZC1cdTAwM2VwYXRoLmRlbnRyeSA9IGRlbnRyeTtcbjQ2MzY6XHRcdFx0cmV0dXJuIE5VTEw7XG40NjM3Olx0XHR9XG40NjM4Olx0XG40NjM5Olx0ZmluaXNoX2xvb2t1cDpcbjQ2NDA6XHRcdGlmIChuZC1cdTAwM2VkZXB0aClcbjQ2NDE6XHRcdFx0cHV0X2xpbmsobmQpO1xuNDY0MjpcdFx0cmVzID0gc3RlcF9pbnRvKG5kLCBXQUxLX1RSQUlMSU5HLCBkZW50cnkpO1xuNDY0MzpcdFx0aWYgKHVubGlrZWx5KHJlcykpXG40NjQ0Olx0XHRcdG5kLVx1MDAzZWZsYWdzIFx1MDAyNj0gfihMT09LVVBfT1BFTnxMT09LVVBfQ1JFQVRFfExPT0tVUF9FWENMKTtcbjQ2NDU6XHRcdHJldHVybiByZXM7XG40NjQ2Olx0fVxuNDY0NzpcdFxuNDY0ODpcdC8qXG40NjQ5Olx0ICogSGFuZGxlIHRoZSBsYXN0IHN0ZXAgb2Ygb3BlbigpXG40NjUwOlx0ICovXG40NjUxOlx0c3RhdGljIGludCBkb19vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuNDY1MjpcdFx0XHQgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgc3RydWN0IG9wZW5fZmxhZ3MgKm9wKVxuNDY1MzpcdHtcbjQ2NTQ6XHRcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwO1xuNDY1NTpcdFx0aW50IG9wZW5fZmxhZyA9IG9wLVx1MDAzZW9wZW5fZmxhZztcbjQ2NTY6XHRcdGJvb2wgZG9fdHJ1bmNhdGU7XG40NjU3Olx0XHRpbnQgYWNjX21vZGU7XG40NjU4Olx0XHRpbnQgZXJyb3I7XG40NjU5Olx0XG40NjYwOlx0XHRpZiAoIShmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgKEZNT0RFX09QRU5FRCB8IEZNT0RFX0NSRUFURUQpKSkge1xuNDY2MTpcdFx0XHRlcnJvciA9IGNvbXBsZXRlX3dhbGsobmQpO1xuNDY2MjpcdFx0XHRpZiAoZXJyb3IpXG40NjYzOlx0XHRcdFx0cmV0dXJuIGVycm9yO1xuNDY2NDpcdFx0fVxuNDY2NTpcdFx0aWYgKCEoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX0NSRUFURUQpKVxuNDY2NjpcdFx0XHRhdWRpdF9pbm9kZShuZC1cdTAwM2VuYW1lLCBuZC1cdTAwM2VwYXRoLmRlbnRyeSwgMCk7XG40NjY3Olx0XHRpZG1hcCA9IG1udF9pZG1hcChuZC1cdTAwM2VwYXRoLm1udCk7XG40NjY4Olx0XHRpZiAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSB7XG40NjY5Olx0XHRcdGlmICgob3Blbl9mbGFnIFx1MDAyNiBPX0VYQ0wpIFx1MDAyNlx1MDAyNiAhKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9DUkVBVEVEKSlcbjQ2NzA6XHRcdFx0XHRyZXR1cm4gLUVFWElTVDtcbjQ2NzE6XHRcdFx0aWYgKGRfaXNfZGlyKG5kLVx1MDAzZXBhdGguZGVudHJ5KSlcbjQ2NzI6XHRcdFx0XHRyZXR1cm4gLUVJU0RJUjtcbjQ2NzM6XHRcdFx0ZXJyb3IgPSBtYXlfY3JlYXRlX2luX3N0aWNreShpZG1hcCwgbmQsXG40Njc0Olx0XHRcdFx0XHRcdCAgICAgZF9iYWNraW5nX2lub2RlKG5kLVx1MDAzZXBhdGguZGVudHJ5KSk7XG40Njc1Olx0XHRcdGlmICh1bmxpa2VseShlcnJvcikpXG40Njc2Olx0XHRcdFx0cmV0dXJuIGVycm9yO1xuNDY3NzpcdFx0fVxuNDY3ODpcdFxuNDY3OTpcdFx0aWYgKChvcGVuX2ZsYWcgXHUwMDI2IF9fT19SRUdVTEFSKSBcdTAwMjZcdTAwMjYgIWRfaXNfcmVnKG5kLVx1MDAzZXBhdGguZGVudHJ5KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTg6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU4NTYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA3MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWZhY3RvcmluZyBvZiB0aGUgYGNyZWF0ZWAgSW5vZGUgT3BlcmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGlzc3VlIGlzIHRoZSBgZXhjbGAgYXJndW1lbnQgcGFzc2VkIHRvIHRoZSBgY3JlYXRlYCBpbm9kZSBvcGVyYXRpb24uIEluaXRpYWxseSwgSSB0aG91Z2h0IHRoYXQgaWYgYGxvb2t1cF9vcGVuYCByZXR1cm5zIGBFRVhJU1RgLCBpdCBzaW1wbHkgcmV0dXJucyBgRUVYSVNUYC4gQnV0IHdhaXQsIGlmIGBjcmVhdGVgIHJldHVybnMgYEVFWElTVGAsIGl0IHN1Z2dlc3RzIGEgY29uY3VycmVudCBjcmVhdGlvbi4gSWYgYE9fRVhDTGAgd2FzbiYjMzk7dCBzZXQsIHRoZW4gYG9wZW5gIHNob3VsZG4mIzM5O3QgZmFpbCB3aXRoIGBFRVhJU1RgIHdoZW4gb3BlbmluZy4gSG93ZXZlciwgY29uc2lkZXJpbmcgdGhhdCBgaW5vZGVfbG9jayhkaXItJmd0O2RfaW5vZGUpYCBpcyBoZWxkIHdoZW4gYGNyZWF0ZWAgaXMgY2FsbGVkIGJ5IHRoZSBWRlMsIG5vIG90aGVyIHByb2Nlc3Mgb24gdGhlICpzYW1lKiBtYWNoaW5lIGNhbiBjb25jdXJyZW50bHkgY3JlYXRlIHRoZSBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4gVGhlIGBpbm9kZV9sb2NrKGRpci0mZ3Q7ZF9pbm9kZSlgIGNvbmZpcm1zIHRoaXM7IHRoZSBsb29rdXAgYW5kIGNyZWF0aW9uIGFyZSBlZmZlY3RpdmVseSBhdG9taWMgZm9yIGxvY2FsIGZpbGVzeXN0ZW1zLgoKVGhlbiB0aGUgdGhvdWdodCBjcm9zc2VkIG15IG1pbmQsIHdoYXQgYWJvdXQgYSBuZXR3b3JrIGZpbGVzeXN0ZW0gYW5kIGEgZmlsZSBjcmVhdGVkIGNvbmN1cnJlbnRseSBieSBhbm90aGVyIG1hY2hpbmU/IElmIGl0JiMzOTtzIGEgbmV0d29yayBmaWxlc3lzdGVtLCBpdCAqc2hvdWxkKiBpbXBsZW1lbnQgYGF0b21pY19vcGVuYC4gT3RoZXJ3aXNlLCBpZiBpdCBkb2VzbiYjMzk7dCBpbXBsZW1lbnQgYGF0b21pY19vcGVuYCwgaXQgY2FuJiMzOTt0IGhhbmRsZSBjb25jdXJyZW50IGNyZWF0ZXMgZnJvbSBvdGhlciBtYWNoaW5lcyBwcm9wZXJseSBhbnl3YXksIG9yIGp1c3QgcmV0dXJucyBgRUVYSVNUYCBhbmQgZmFpbHMgdGhlIG9wZW4uCgpUaGVyZWZvcmUsIHRoZSBgZXhjbGAgYXJndW1lbnQgdG8gYGNyZWF0ZWAgd2FzIGxhcmdlbHkgcG9pbnRsZXNzIGZvciBsb2NhbCBmaWxlc3lzdGVtcyBzaW5jZSB0aGUgYGlub2RlX2xvY2tgIGd1YXJhbnRlZXMgdGhlIGZpbGUgZG9lc24mIzM5O3QgZXhpc3Qgd2hlbiBgY3JlYXRlYCBpcyBjYWxsZWQuIE5ldHdvcmsgZmlsZXN5c3RlbXMgYXJlIHRoZSBvbmVzIHRoYXQgc2hvdWxkIHVzZSBgYXRvbWljX29wZW5gIHRvIGRlYWwgd2l0aCBjb25jdXJyZW5jeSBmcm9tIG90aGVyIG1hY2hpbmVzLiBUaGlzIHBlcmZlY3RseSBhbGlnbnMgd2l0aCB0aGUgcG9ydGluZyBkb2N1bWVudGF0aW9uJiMzOTtzIGd1aWRhbmNlOiAmIzM0Oy5jcmVhdGUgaW5vZGVfb3BlcmF0aW9uIG5vIGxvbmdlciByZWNlaXZlcyB0aGUgJiMzOTtleGNsJiMzOTsgYXJnLiBJdCBtdXN0IGFsd2F5cyBhc3N1bWUgdGhlIGZpbGUgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4gSWYgdGhlIGZpbGVzeXN0ZW0gbmVlZHMgdG8gYmUgaW52b2x2ZWQgaW4gbm9uLWV4Y2x1c2l2ZSBjcmVhdGUsIGl0IHNob3VsZCBwcm92aWRlIGF0b21pY19vcGVuLiYjMzQ7CgpTbywgdGhpcyBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcuIEl0IGVsaW1pbmF0ZXMgYW4gYXJndW1lbnQgdGhhdCB3YXMgZXNzZW50aWFsbHkgYWx3YXlzIGB0cnVlYCAob3IsIHNob3VsZCBiZSB0cmVhdGVkIGFzIHN1Y2gpIGZvciBsb2NhbCBmaWxlc3lzdGVtcywgYW5kIGZvciBuZXR3b3JrIGZpbGVzeXN0ZW1zIHRoZXkgYXJlIHN1cHBvc2VkIHRvIHVzZSBgYXRvbWljX29wZW5gIHRvIGhhbmRsZSBjb25jdXJyZW5jeS4gVGhlIGNoYW5nZXMgYXJlIGxhcmdlbHkgY29zbWV0aWMuIERvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IG5ldyBmdW5jdGlvbmFsIGxvZ2ljIHRoYXQgd291bGQgbmVlZCBmdXp6aW5nPyBOby4gSXQmIzM5O3Mgc2ltcGx5IHJlbW92aW5nIGEgcmVkdW5kYW50IGFyZ3VtZW50IGZyb20gYSBWRlMgY2FsbGJhY2sgYW5kIHVwZGF0aW5nIGFsbCB0aGUgZmlsZXN5c3RlbXMgdG8gZml0IHRoZSBuZXcgc2lnbmF0dXJlLiBUaGUgdW5kZXJseWluZyBsb2dpYyBvZiB0aGUgZmlsZXN5c3RlbXMgcmVtYWlucyB1bmNoYW5nZWQ7IHRoZXkgc2ltcGx5IGRyb3AgdGhlIGBleGNsYCBhcmd1bWVudC4gRm9yIGluc3RhbmNlLCBgZXh0NF9jcmVhdGVgLCBgYnRyZnNfY3JlYXRlYCBhbmQgYHZmc19jcmVhdGVgIGFsbCBqdXN0IGRyb3BwZWQgdGhlIGBleGNsYCBhcmd1bWVudC4gYGxvb2t1cF9vcGVuYCBhbHNvIGRyb3BwZWQgYG9wZW5fZmxhZyAmYW1wOyBPX0VYQ0xgLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZSBubyBmaWxlc3lzdGVtIHVuZXhwZWN0ZWRseSBjaGFuZ2VkIGl0cyBiZWhhdmlvci4gYGdmczJfY3JlYXRlYCBub3cgcGFzc2VzIGAxYCBpbnN0ZWFkIG9mIGBleGNsYCwgYnV0IHNpbmNlIGBnZnMyYCBpbXBsZW1lbnRzIGBhdG9taWNfb3BlbmAsIGBnZnMyX2NyZWF0ZWAgaXMgb25seSBjYWxsZWQgYnkgYHZmc19jcmVhdGVgICh3aGljaCBhbHdheXMgcGFzc2VkIGB0cnVlYCBiZWZvcmUpIG9yIGJ5IGBsb29rdXBfb3BlbmAgaWYgYGF0b21pY19vcGVuYCBpcyBub3QgdXNlZCAoYnV0IGl0IGlzIHVzZWQpLiBUaGVuIEkgcmVtZW1iZXJlZCB0aGF0IGB2ZnNfY3JlYXRlYCBpcyBjYWxsZWQgYnkgYG1rbm9kYCBhbmQgYG9wZW4oT19DUkVBVClgIGlmIGBhdG9taWNfb3BlbmAgaXMgbm90IHVzZWQuIEhvd2V2ZXIsIGBvcGVuYCB1c2VzIGBsb29rdXBfb3BlbmAsIHNvIEkmIzM5O20gY292ZXJlZC4gQW5kIGB2ZnNfY3JlYXRlYCBpcyBhIHNlcGFyYXRlIGZ1bmN0aW9uLCBzbyBJJiMzOTttIG5vdCBjb25mdXNpbmcgdGhpcyB3aXRoIGB2ZnNfbWtub2RgLiBUaGlzIGNvbmZpcm1zIHRoYXQgdGhpcyBpcyB0cnVseSBqdXN0IGEgY2xlYW51cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTg6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZzX2NyZWF0ZVxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy85cC92ZnNfaW5vZGUuYz02NTQ9c3RhdGljIGludFxuZnMvOXAvdmZzX2lub2RlLmM6NjU1OnY5ZnNfdmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG5mcy85cC92ZnNfaW5vZGUuYy02NTYtXHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuLS1cbmZzL2VjcnlwdGZzL2lub2RlLmM9MTg1PWVjcnlwdGZzX2RvX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpcmVjdG9yeV9pbm9kZSxcbi0tXG5mcy9lY3J5cHRmcy9pbm9kZS5jLTE5Ni1cdGxvd2VyX2RpciA9IGxvd2VyX2RlbnRyeS1cdTAwM2VkX3BhcmVudC1cdTAwM2VkX2lub2RlO1xuZnMvZWNyeXB0ZnMvaW5vZGUuYzoxOTc6XHRyYyA9IHZmc19jcmVhdGUoXHUwMDI2bm9wX21udF9pZG1hcCwgbG93ZXJfZGVudHJ5LCBtb2RlLCBOVUxMKTtcbmZzL2VjcnlwdGZzL2lub2RlLmMtMTk4LVx0aWYgKHJjKSB7XG4tLVxuZnMvbGliZnMuYz0yMjY3PXZvaWQgc3Rhc2hlZF9kZW50cnlfcHJ1bmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbmZzL2xpYmZzLmMtMjI5My0gKlxuZnMvbGliZnMuYzoyMjk0OiAqIFJldHVybnM6IGEgbmVnYXRpdmUgZGVudHJ5IG9uIHdoaWNoIHZmc19jcmVhdGUoKSBvciBzaW1pbGFyIG1heVxuZnMvbGliZnMuYy0yMjk1LSAqICBiZSBhdHRlbXB0ZWQsIG9yIGFuIGVycm9yLlxuLS1cbmZzL25hbWVpLmM9NDE1MD1zdGF0aWMgaW5saW5lIHVtb2RlX3QgdmZzX3ByZXBhcmVfbW9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9uYW1laS5jLTQxODEtICovXG5mcy9uYW1laS5jOjQxODI6aW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuZnMvbmFtZWkuYy00MTgzLVx0ICAgICAgIHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKmRpKVxuLS1cbmZzL25hbWVpLmM9NTAyMj1zdHJ1Y3QgZmlsZSAqZGVudHJ5X2NyZWF0ZShzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUsXG4tLVxuZnMvbmFtZWkuYy01MDcxLVx0fSBlbHNlIHtcbmZzL25hbWVpLmM6NTA3MjpcdFx0ZXJyb3IgPSB2ZnNfY3JlYXRlKG1udF9pZG1hcChwYXRoLVx1MDAzZW1udCksIHBhdGgtXHUwMDNlZGVudHJ5LCBtb2RlLCBOVUxMKTtcbmZzL25hbWVpLmMtNTA3My1cdFx0aWYgKCFlcnJvcilcbi0tXG5mcy9uYW1laS5jPTUxNTQ9aW50IGZpbGVuYW1lX21rbm9kYXQoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bW9kZV90IG1vZGUsXG4tLVxuZnMvbmFtZWkuYy01MTc5LVx0XHRjYXNlIDA6IGNhc2UgU19JRlJFRzpcbmZzL25hbWVpLmM6NTE4MDpcdFx0XHRlcnJvciA9IHZmc19jcmVhdGUoaWRtYXAsIGRlbnRyeSwgbW9kZSwgXHUwMDI2ZGkpO1xuZnMvbmFtZWkuYy01MTgxLVx0XHRcdGlmICghZXJyb3IpXG4tLVxuZnMvbmZzZC9uZnMzcHJvYy5jPTI1Mz1uZnNkM19jcmVhdGVfZmlsZShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXG4tLVxuZnMvbmZzZC9uZnMzcHJvYy5jLTI2NS1cbmZzL25mc2QvbmZzM3Byb2MuYzoyNjY6XHR0cmFjZV9uZnNkX3Zmc19jcmVhdGUocnFzdHAsIGZocCwgU19JRlJFRywgYXJncC1cdTAwM2VuYW1lLCBhcmdwLVx1MDAzZWxlbik7XG5mcy9uZnNkL25mczNwcm9jLmMtMjY3LVxuLS1cbmZzL25mc2QvbmZzM3Byb2MuYy0zNDMtXHRcdGdvdG8gb3V0O1xuZnMvbmZzZC9uZnMzcHJvYy5jOjM0NDpcdGhvc3RfZXJyID0gdmZzX2NyZWF0ZShcdTAwMjZub3BfbW50X2lkbWFwLCBjaGlsZCwgaWFwLVx1MDAzZWlhX21vZGUsIE5VTEwpO1xuZnMvbmZzZC9uZnMzcHJvYy5jLTM0NS1cdGlmIChob3N0X2VyciBcdTAwM2MgMCkge1xuLS1cbmZzL25mc2QvbmZzNHByb2MuYz0yMDQ9c3RhdGljIF9fYmUzMlxuZnMvbmZzZC9uZnM0cHJvYy5jOjIwNTpuZnNkNF92ZnNfY3JlYXRlKHN0cnVjdCBzdmNfZmggKmZocCwgc3RydWN0IGRlbnRyeSAqKmNoaWxkLFxuZnMvbmZzZC9uZnM0cHJvYy5jLTIwNi1cdFx0IHN0cnVjdCBuZnNkNF9vcGVuICpvcGVuKVxuLS1cbmZzL25mc2QvbmZzNHByb2MuYz0yNDg9bmZzZDRfY3JlYXRlX2ZpbGUoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqZmhwLFxuLS1cbmZzL25mc2QvbmZzNHByb2MuYy0zODEtXHRcdGdvdG8gb3V0O1xuZnMvbmZzZC9uZnM0cHJvYy5jOjM4MjpcdHN0YXR1cyA9IG5mc2Q0X3Zmc19jcmVhdGUoZmhwLCBcdTAwMjZjaGlsZCwgb3Blbik7XG5mcy9uZnNkL25mczRwcm9jLmMtMzgzLVx0aWYgKHN0YXR1cyAhPSBuZnNfb2spXG4tLVxuZnMvbmZzZC92ZnMuYz0xNzI3PW5mc2RfY3JlYXRlX3NldGF0dHIoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqZmhwLFxuLS1cbmZzL25mc2QvdmZzLmMtMTc3Ny0gKlxuZnMvbmZzZC92ZnMuYzoxNzc4OiAqIGNhbGwgdGhpcyBvbmx5IGFmdGVyIHZmc19jcmVhdGUoKSBpcyBjYWxsZWQuXG5mcy9uZnNkL3Zmcy5jLTE3NzktICogKi9cbi0tXG5mcy9uZnNkL3Zmcy5jPTE3ODk9bmZzZF9jcmVhdGVfbG9ja2VkKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmZocCxcbi0tXG5mcy9uZnNkL3Zmcy5jLTE4MTctXHRjYXNlIFNfSUZSRUc6XG5mcy9uZnNkL3Zmcy5jOjE4MTg6XHRcdGhvc3RfZXJyID0gdmZzX2NyZWF0ZShcdTAwMjZub3BfbW50X2lkbWFwLCBkY2hpbGQsIGlhcC1cdTAwM2VpYV9tb2RlLCBOVUxMKTtcbmZzL25mc2QvdmZzLmMtMTgxOS1cdFx0aWYgKCFob3N0X2Vycilcbi0tXG5mcy9uZnNkL3Zmcy5jPTE4Njk9bmZzZF9jcmVhdGUoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqZmhwLFxuLS1cbmZzL25mc2QvdmZzLmMtMTg3Ni1cbmZzL25mc2QvdmZzLmM6MTg3NzpcdHRyYWNlX25mc2RfdmZzX2NyZWF0ZShycXN0cCwgZmhwLCB0eXBlLCBmbmFtZSwgZmxlbik7XG5mcy9uZnNkL3Zmcy5jLTE4NzgtXG4tLVxuZnMvb3ZlcmxheWZzL292ZXJsYXlmcy5oPTI0MD1zdGF0aWMgaW5saW5lIGludCBvdmxfZG9fY3JlYXRlKHN0cnVjdCBvdmxfZnMgKm9mcyxcbi0tXG5mcy9vdmVybGF5ZnMvb3ZlcmxheWZzLmgtMjQzLXtcbmZzL292ZXJsYXlmcy9vdmVybGF5ZnMuaDoyNDQ6XHRpbnQgZXJyID0gdmZzX2NyZWF0ZShvdmxfdXBwZXJfbW50X2lkbWFwKG9mcyksIGRlbnRyeSwgbW9kZSwgTlVMTCk7XG5mcy9vdmVybGF5ZnMvb3ZlcmxheWZzLmgtMjQ1LVxuLS1cbmZzL3NtYi9zZXJ2ZXIvc21iMnBkdS5jPTI3OTg9c3RhdGljIGludCBzbWIyX2NyZWF0KHN0cnVjdCBrc21iZF93b3JrICp3b3JrLFxuLS1cbmZzL3NtYi9zZXJ2ZXIvc21iMnBkdS5jLTI4MjEtXHRcdG1vZGUgPSBzaGFyZV9jb25maWdfY3JlYXRlX21vZGUoc2hhcmUsIHBvc2l4X21vZGUpO1xuZnMvc21iL3NlcnZlci9zbWIycGR1LmM6MjgyMjpcdFx0cmMgPSBrc21iZF92ZnNfY3JlYXRlKHdvcmssIG5hbWUsIG1vZGUpO1xuZnMvc21iL3NlcnZlci9zbWIycGR1LmMtMjgyMy1cdFx0aWYgKHJjKVxuLS1cbmZzL3NtYi9zZXJ2ZXIvdmZzLmM9MTE2PXZvaWQga3NtYmRfdmZzX3F1ZXJ5X21heGltYWxfYWNjZXNzKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL3NtYi9zZXJ2ZXIvdmZzLmMtMTM3LS8qKlxuZnMvc21iL3NlcnZlci92ZnMuYzoxMzg6ICoga3NtYmRfdmZzX2NyZWF0ZSgpIC0gdmZzIGhlbHBlciBmb3Igc21iIGNyZWF0ZSBmaWxlXG5mcy9zbWIvc2VydmVyL3Zmcy5jLTEzOS0gKiBAd29yazpcdHdvcmtcbi0tXG5mcy9zbWIvc2VydmVyL3Zmcy5jLTE0NC0gKi9cbmZzL3NtYi9zZXJ2ZXIvdmZzLmM6MTQ1OmludCBrc21iZF92ZnNfY3JlYXRlKHN0cnVjdCBrc21iZF93b3JrICp3b3JrLCBjb25zdCBjaGFyICpuYW1lLCB1bW9kZV90IG1vZGUpXG5mcy9zbWIvc2VydmVyL3Zmcy5jLTE0Ni17XG4tLVxuZnMvc21iL3NlcnZlci92ZnMuYy0xNjEtXHRtb2RlIHw9IFNfSUZSRUc7XG5mcy9zbWIvc2VydmVyL3Zmcy5jOjE2MjpcdGVyciA9IHZmc19jcmVhdGUobW50X2lkbWFwKHBhdGgubW50KSwgZGVudHJ5LCBtb2RlLCBOVUxMKTtcbmZzL3NtYi9zZXJ2ZXIvdmZzLmMtMTYzLVx0aWYgKCFlcnIpIHtcbi0tXG5mcy9zbWIvc2VydmVyL3Zmcy5oPTc2PXZvaWQga3NtYmRfdmZzX3F1ZXJ5X21heGltYWxfYWNjZXNzKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuZnMvc21iL3NlcnZlci92ZnMuaC03Ny1cdFx0XHRcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgX19sZTMyICpkYWNjZXNzKTtcbmZzL3NtYi9zZXJ2ZXIvdmZzLmg6Nzg6aW50IGtzbWJkX3Zmc19jcmVhdGUoc3RydWN0IGtzbWJkX3dvcmsgKndvcmssIGNvbnN0IGNoYXIgKm5hbWUsIHVtb2RlX3QgbW9kZSk7XG5mcy9zbWIvc2VydmVyL3Zmcy5oLTc5LWludCBrc21iZF92ZnNfbWtkaXIoc3RydWN0IGtzbWJkX3dvcmsgKndvcmssIGNvbnN0IGNoYXIgKm5hbWUsIHVtb2RlX3QgbW9kZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NTg0CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlbHZpbmcgaW50byB0aGUgS2VybmVsJiMzOTtzIEZpbGUgU3lzdGVtIENyZWF0aW9uIE1lY2hhbmlzbXMqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoZSBvcmlnaW5zIG9mIGB2ZnNfY3JlYXRlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGl0JiMzOTtzIGNhbGxlZCBieSBgZmlsZW5hbWVfbWtub2RhdGAsIHdoaWNoIGlzIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIGZvciB0aGUgYG1rbm9kYCBzeXN0ZW0gY2FsbC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBCdXQgdGhlbiBJIHN0YXJ0ZWQgdGhpbmtpbmcgYWJvdXQgYGRlbnRyeV9jcmVhdGVgLiBNeSBtZW1vcnkgaXMgYSBiaXQgZnV6enkgb24gdGhpcywgYW5kIEkgbmVlZCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nLiBJIGluaXRpYWxseSBjb25zaWRlcmVkIGlmIGBkZW50cnlfY3JlYXRlYCB3YXMgaW52b2x2ZWQgaW4gYG9wZW5gIGluIHNvbWUgY2FzZXMg4oCTIHRoYXQgZmVlbHMgd3JvbmcuIEFoLCByaWdodCEgSSByZWNhbGwgYGRlbnRyeV9jcmVhdGVgIGlzIHVzZWQgYnkgYHBhdGhfb3BlbmF0YC4gV2FpdCwgbm8gdGhhdCBpc24mIzM5O3QgY29ycmVjdC4gSSBrbm93IEkgaGF2ZSBzZWVuIGl0IGluIG90aGVyIGNvZGUgcGF0aHMuIE9rYXksIGxldCBtZSB0aGluay4gQWghIGBjYWNoZWZpbGVzYCwgYG92ZXJsYXlmc2AsIGBuZnNkYCwgYW5kIGBrc21iZGAgYWxsIHVzZSBgZGVudHJ5X2NyZWF0ZWAuIFRob3NlIGFyZSBhbGwgaW50ZXJlc3RpbmcgdXNlIGNhc2VzLiBgY2FjaGVmaWxlc2AsIG5vdyB0aGF0JiMzOTtzIGludHJpZ3VpbmcuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIG9mIGBjYWNoZWZpbGVzYCBhbmQgdGhlIGRpcmVjdG9yeSBlbnRyeSBjYWNoZS4gSSYjMzk7ZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBjb2RlIHRvIGNvbmZpcm0gaWYgbXkgdW5kZXJzdGFuZGluZyBpcyBjb3JyZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZW50cnlfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25hbWVpLmM9NTAwMz1FWFBPUlRfU1lNQk9MKHN0YXJ0X2NyZWF0aW5nX3VzZXJfcGF0aCk7XG4tLVxuZnMvbmFtZWkuYy01MDA1LS8qKlxuZnMvbmFtZWkuYzo1MDA2OiAqIGRlbnRyeV9jcmVhdGUgLSBDcmVhdGUgYW5kIG9wZW4gYSBmaWxlXG5mcy9uYW1laS5jLTUwMDctICogQHBhdGg6IHBhdGggdG8gY3JlYXRlXG4tLVxuZnMvbmFtZWkuYy01MDIxLSAqL1xuZnMvbmFtZWkuYzo1MDIyOnN0cnVjdCBmaWxlICpkZW50cnlfY3JlYXRlKHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSxcbmZzL25hbWVpLmMtNTAyMy1cdFx0XHQgICBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZClcbi0tXG5mcy9uYW1laS5jLTUwODAtfVxuZnMvbmFtZWkuYzo1MDgxOkVYUE9SVF9TWU1CT0woZGVudHJ5X2NyZWF0ZSk7XG5mcy9uYW1laS5jLTUwODItXG4tLVxuZnMvbmZzZC9uZnM0cHJvYy5jPTIwNT1uZnNkNF92ZnNfY3JlYXRlKHN0cnVjdCBzdmNfZmggKmZocCwgc3RydWN0IGRlbnRyeSAqKmNoaWxkLFxuLS1cbmZzL25mc2QvbmZzNHByb2MuYy0yMjgtXHRwYXRoLmRlbnRyeSA9ICpjaGlsZDtcbmZzL25mc2QvbmZzNHByb2MuYzoyMjk6XHRmaWxwID0gZGVudHJ5X2NyZWF0ZShcdTAwMjZwYXRoLCBvZmxhZ3MsIG9wZW4tXHUwMDNlb3BfaWF0dHIuaWFfbW9kZSxcbmZzL25mc2QvbmZzNHByb2MuYy0yMzAtXHRcdFx0ICAgICBjdXJyZW50X2NyZWQoKSk7XG4tLVxuZnMvb3ZlcmxheWZzL2Rpci5jPTU5OT1zdGF0aWMgY29uc3Qgc3RydWN0IGNyZWQgKm92bF9vdmVycmlkZV9jcmVhdG9yX2NyZWRzKGNvbnN0IHN0cnVjdCBjcmVkICpvcmlnaW5hbF9jcmVkcyxcbi0tXG5mcy9vdmVybGF5ZnMvZGlyLmMtNjEzLVxuZnMvb3ZlcmxheWZzL2Rpci5jOjYxNDpcdGVyciA9IHNlY3VyaXR5X2RlbnRyeV9jcmVhdGVfZmlsZXNfYXMoZGVudHJ5LCBtb2RlLCBcdTAwMjZkZW50cnktXHUwMDNlZF9uYW1lLFxuZnMvb3ZlcmxheWZzL2Rpci5jLTYxNS1cdFx0XHRcdFx0ICAgICAgb3JpZ2luYWxfY3JlZHMsIG92ZXJyaWRlX2NyZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDQ1NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDk2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlZHVuZGFudCAmIzM5O2V4Y2wmIzM5OyBBcmd1bWVudCBpbiBgdmZzX2NyZWF0ZWAqKgoKUmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIGBuZnNkYCB1c2VzIGBkZW50cnlfY3JlYXRlYCBhbmQgYm90aCBgbmZzZGAsIGBrc21iZGAsIGBvdmVybGF5ZnNgLCBgZWNyeXB0ZnNgLCBhbmQgYG1rbm9kYCB1c2UgYHZmc19jcmVhdGVgLiBBbmQgYmVmb3JlIHRoaXMgcGF0Y2gsIHRoZXkgd2VyZSAqYWxsKiBwYXNzaW5nIGB0cnVlYCB0byBgdmZzX2NyZWF0ZWAgZm9yIHRoZSBgZXhjbGAgYXJndW1lbnQuICBXYWl0LCBob2xkIG9uLCB3YXNuJiMzOTt0IGB2ZnNfY3JlYXRlYCYjMzk7cyBzaWduYXR1cmUgZGlmZmVyZW50IGJlZm9yZSB0aGUgcGF0Y2g/IExldCBtZSBjaGVja+KApiBZZWFoLCBgaW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIHdhbnRfZXhjbClgLiBCdXQgdGhlIHBhdGNoIGRpZmYgaW4gYGZzL25hbWVpLmNgIHNob3dzIHRoZSBgdmZzX2NyZWF0ZWAgY2FsbCBjaGFuZ2UhIEl0JiMzOTtzIG5vdCB0YWtpbmcgdGhhdCBhcmd1bWVudCBhdCBhbGwgbm93ISBJdCB3YXMgKmFsd2F5cyogcGFzc2luZyBgdHJ1ZWAhCgpTbywgdGhlIG9yaWdpbmFsIGB2ZnNfY3JlYXRlYCBpbXBsZW1lbnRhdGlvbiBkaWRuJiMzOTt0IGV2ZW4gKmhhdmUqIHRoYXQgYHdhbnRfZXhjbGAgYXJndW1lbnQuIEl0IHdhcyBqdXN0IGltcGxpY2l0bHkgcGFzc2luZyBgdHJ1ZWAgdG8gYGRpci0mZ3Q7aV9vcC0mZ3Q7Y3JlYXRlYC4gTWVhbndoaWxlLCBgbG9va3VwX29wZW5gIHdhcyB0YWtpbmcgdGhlIGBvcGVuX2ZsYWcgJmFtcDsgT19FWENMYCB2YWx1ZS4KClNvLCB0aGUgKm9ubHkqIHBsYWNlIHRoZSBgZXhjbGAgdmFsdWUgY291bGQgYmUgYGZhbHNlYCB3YXMgaW4gYGxvb2t1cF9vcGVuYCBpZiBgT19FWENMYCB3YXNuJiMzOTt0IHNldC4gIEFuZCBjcml0aWNhbGx5LCB3aGVuIGBsb29rdXBfb3BlbmAgaXMgY2FsbGVkLCB0aGUgVkZTIGlzIGhvbGRpbmcgYGlub2RlX2xvY2soZGlyLSZndDtkX2lub2RlKWAuIFRoaXMgbWVhbnMgY29uY3VycmVudCBjcmVhdGlvbiBvbiB0aGUgc2FtZSBtYWNoaW5lIGlzIGltcG9zc2libGUuICBJZiBpdCYjMzk7cyBhIGxvY2FsIGZpbGVzeXN0ZW0sIGBjcmVhdGVgIGp1c3TigKYgY3JlYXRlcyB0aGUgZmlsZS4gVGhlIGBleGNsYCBhcmd1bWVudCBpcyBpcnJlbGV2YW50LCBzaW5jZSB0aGUgZmlsZSBkb2VzbiYjMzk7dCBleGlzdCB5ZXQgYW55d2F5ISAgSWYgaXQmIzM5O3MgYSBuZXR3b3JrIGZpbGVzeXN0ZW0sIGl0ICpzaG91bGQqIGJlIHVzaW5nIGBhdG9taWNfb3BlbmAgdG8gaGFuZGxlIGNvbmN1cnJlbnQgY3JlYXRpb25zIGZyb20gZGlmZmVyZW50IG1hY2hpbmVzLiBJZiBpdCBkb2VzbiYjMzk7dCwgaXQganVzdCBjYWxscyBgY3JlYXRlYCwgYW5kIGlmIGl0IGZhaWxzIHdpdGggYEVFWElTVGAsIGBsb29rdXBfb3BlbmAgcmV0dXJucyBgRUVYSVNUYC4gKFdoaWNoIGlzIGluY29ycmVjdCBmb3IgYSBub24tZXhjbHVzaXZlIGNyZWF0aW9uLCBidXQgdGhhdCYjMzk7cyBhIGZpbGVzeXN0ZW0gYnVnIGZvciBub3QgaW1wbGVtZW50aW5nIGBhdG9taWNfb3BlbmApLgoKVGhlcmVmb3JlLCB0aGF0IGBleGNsYCBhcmd1bWVudCB0byBgY3JlYXRlYCB3YXMgZW50aXJlbHkgcmVkdW5kYW50LiBJdCYjMzk7cyB1c2VsZXNzLiBUaGF0JiMzOTtzIHdoeSBpdCB3YXMgcmVtb3ZlZC4gIE5vIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgbmVlZGVkIHRvIGJlIGZ1enplZCBoZXJlOyBpdCYjMzk7cyBhIHB1cmUgQVBJIHJlZmFjdG9yaW5nLCByZW1vdmluZyBhIHVzZWxlc3MgYXJndW1lbnQuIFRoZSBrZXJuZWwmIzM5O3MgKmJlaGF2aW9yKiBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIGJlZm9yZS4KClRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCBmaWxlc3lzdGVtcyB0aGF0IHByZXZpb3VzbHkgKmNoZWNrZWQqIHRoYXQgYGV4Y2xgIHZhbHVlIOKAkyBsaWtlIGBnZnMyYCwgYG5mc2AsIGFuZCBgdmJveHNmYCDigJMgYXJlIG5vdyBqdXN0IGhhcmRjb2RpbmcgYDFgLCBgT19FWENMYCwgb3IgYHRydWVgIGluIHRoZWlyIGludGVybmFsIGNhbGxzIHdoZW4gY2FsbGVkIGZyb20gYGNyZWF0ZWAuCgpXYWl0LCBidXQgYGdmczJfY3JlYXRlYCBub3cgcGFzc2VzIGAxYCB0byBgZ2ZzMl9jcmVhdGVfaW5vZGVgLiBQcmV2aW91c2x5LCBpdCBwYXNzZWQgYGV4Y2xgLiBgZ2ZzMl9jcmVhdGVgIHdhcyAqb25seSogY2FsbGVkIGZyb20gYHZmc19jcmVhdGVgICh3aGljaCBwYXNzZWQgYHRydWVgKSBvciBgbG9va3VwX29wZW5gICh3aGljaCBwYXNzZWQgYG9wZW5fZmxhZyAmYW1wOyBPX0VYQ0xgKS4gQWghICBJZiBgbG9va3VwX29wZW5gIHBhc3NlZCBgb3Blbl9mbGFnICZhbXA7IE9fRVhDTGAgdG8gYGdmczJfY3JlYXRlYCBhbmQgYE9fRVhDTGAgd2FzICpub3QqIHNldCwgYGdmczJfY3JlYXRlYCB3b3VsZCByZWNlaXZlIGBmYWxzZWAuIFRoZW4gaXQgd291bGQgcGFzcyBgMGAgdG8gYGdmczJfY3JlYXRlX2lub2RlYC4gTm93LCBpdCBhbHdheXMgcGFzc2VzIGAxYC4gRG9lcyBgZ2ZzMl9jcmVhdGVfaW5vZGVgIGJlaGF2ZSBkaWZmZXJlbnRseSBpZiBgZXhjbGAgaXMgYDFgIHZlcnN1cyBgMGA/IExldCYjMzk7cyBjaGVjayBgZ2ZzMl9jcmVhdGVfaW5vZGVg4oCmCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZ2ZzMi9pbm9kZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzAwOlx0c3RhdGljIGludCBnZnMyX2NyZWF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIDcwMTpcdFx0XHRcdCAgICAgc3RydWN0IGZpbGUgKmZpbGUsXG4gNzAyOlx0XHRcdFx0ICAgICB1bW9kZV90IG1vZGUsIGRldl90IGRldiwgY29uc3QgY2hhciAqc3ltbmFtZSxcbiA3MDM6XHRcdFx0XHQgICAgIHVuc2lnbmVkIGludCBzaXplLCBpbnQgZXhjbClcbiA3MDQ6XHR7XG4gNzA1Olx0XHRjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSA9IFx1MDAyNmRlbnRyeS1cdTAwM2VkX25hbWU7XG4gNzA2Olx0XHRzdHJ1Y3QgcG9zaXhfYWNsICpkZWZhdWx0X2FjbCwgKmFjbDtcbiA3MDc6XHRcdHN0cnVjdCBnZnMyX2hvbGRlciBkX2doLCBnaDtcbiA3MDg6XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMO1xuIDcwOTpcdFx0c3RydWN0IGdmczJfaW5vZGUgKmRpcCA9IEdGUzJfSShkaXIpLCAqaXA7XG4gNzEwOlx0XHRzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoXHUwMDI2ZGlwLVx1MDAzZWlfaW5vZGUpO1xuIDcxMTpcdFx0c3RydWN0IGdmczJfZ2xvY2sgKmlvX2dsO1xuIDcxMjpcdFx0aW50IGVycm9yLCBkZWFsbG9jX2Vycm9yO1xuIDcxMzpcdFx0dTMyIGFmbGFncyA9IDA7XG4gNzE0Olx0XHR1bnNpZ25lZCBibG9ja3MgPSAxO1xuIDcxNTpcdFx0c3RydWN0IGdmczJfZGlyYWRkIGRhID0geyAuYmggPSBOVUxMLCAuc2F2ZV9sb2MgPSAxLCB9O1xuIDcxNjpcdFx0Ym9vbCB4YXR0cl9pbml0aWFsaXplZCA9IGZhbHNlO1xuIDcxNzpcdFxuIDcxODpcdFx0aWYgKCFuYW1lLVx1MDAzZWxlbiB8fCBuYW1lLVx1MDAzZWxlbiBcdTAwM2UgR0ZTMl9GTkFNRVNJWkUpXG4gNzE5Olx0XHRcdHJldHVybiAtRU5BTUVUT09MT05HO1xuIDcyMDpcdFxuIDcyMTpcdFx0ZXJyb3IgPSBnZnMyX3FhX2dldChkaXApO1xuIDcyMjpcdFx0aWYgKGVycm9yKVxuIDcyMzpcdFx0XHRyZXR1cm4gZXJyb3I7XG4gNzI0Olx0XG4gNzI1Olx0XHRlcnJvciA9IGdmczJfcmluZGV4X3VwZGF0ZShzZHApO1xuIDcyNjpcdFx0aWYgKGVycm9yKVxuIDcyNzpcdFx0XHRnb3RvIGZhaWw7XG4gNzI4Olx0XG4gNzI5Olx0XHRlcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChkaXAtXHUwMDNlaV9nbCwgTE1fU1RfRVhDTFVTSVZFLCAwLCBcdTAwMjZkX2doKTtcbiA3MzA6XHRcdGlmIChlcnJvcilcbiA3MzE6XHRcdFx0Z290byBmYWlsO1xuIDczMjpcdFx0Z2ZzMl9ob2xkZXJfbWFya191bmluaXRpYWxpemVkKFx1MDAyNmdoKTtcbiA3MzM6XHRcbiA3MzQ6XHRcdGVycm9yID0gY3JlYXRlX29rKGRpcCwgbmFtZSwgbW9kZSk7XG4gNzM1Olx0XHRpZiAoZXJyb3IpXG4gNzM2Olx0XHRcdGdvdG8gZmFpbF9ndW5sb2NrO1xuIDczNzpcdFxuIDczODpcdFx0aW5vZGUgPSBnZnMyX2Rpcl9zZWFyY2goZGlyLCBcdTAwMjZkZW50cnktXHUwMDNlZF9uYW1lLCAhU19JU1JFRyhtb2RlKSB8fCBleGNsKTtcbiA3Mzk6XHRcdGVycm9yID0gUFRSX0VSUihpbm9kZSk7XG4gNzQwOlx0XHRpZiAoIUlTX0VSUihpbm9kZSkpIHtcbiA3NDE6XHRcdFx0aWYgKGZpbGUgXHUwMDI2XHUwMDI2IChmaWxlLVx1MDAzZWZfZmxhZ3MgXHUwMDI2IF9fT19SRUdVTEFSKSBcdTAwMjZcdTAwMjZcbiA3NDI6XHRcdFx0ICAgICFTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiA3NDM6XHRcdFx0XHRpcHV0KGlub2RlKTtcbiA3NDQ6XHRcdFx0XHRpbm9kZSA9IE5VTEw7XG4gNzQ1Olx0XHRcdFx0ZXJyb3IgPSAtRUZUWVBFO1xuIDc0NjpcdFx0XHRcdGdvdG8gZmFpbF9ndW5sb2NrO1xuIDc0NzpcdFx0XHR9XG4gNzQ4Olx0XHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiA3NDk6XHRcdFx0XHRpcHV0KGlub2RlKTtcbiA3NTA6XHRcdFx0XHRpbm9kZSA9IE5VTEw7XG4gNzUxOlx0XHRcdFx0ZXJyb3IgPSAtRUlTRElSO1xuIDc1MjpcdFx0XHRcdGdvdG8gZmFpbF9ndW5sb2NrO1xuIDc1MzpcdFx0XHR9XG4gNzU0Olx0XHRcdGRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7XG4gNzU1Olx0XHRcdGVycm9yID0gMDtcbiA3NTY6XHRcdFx0aWYgKGZpbGUpIHtcbiA3NTc6XHRcdFx0XHRpZiAoU19JU1JFRyhpbm9kZS1cdTAwM2VpX21vZGUpKVxuIDc1ODpcdFx0XHRcdFx0ZXJyb3IgPSBmaW5pc2hfb3BlbihmaWxlLCBkZW50cnksIGdmczJfb3Blbl9jb21tb24pO1xuIDc1OTpcdFx0XHRcdGVsc2VcbiA3NjA6XHRcdFx0XHRcdGVycm9yID0gZmluaXNoX25vX29wZW4oZmlsZSwgTlVMTCk7XG4gNzYxOlx0XHRcdH1cbiA3NjI6XHRcdFx0Z2ZzMl9nbG9ja19kcV91bmluaXQoXHUwMDI2ZF9naCk7XG4gNzYzOlx0XHRcdGdvdG8gZmFpbDtcbiA3NjQ6XHRcdH0gZWxzZSBpZiAoZXJyb3IgIT0gLUVOT0VOVCkge1xuIDc2NTpcdFx0XHRnb3RvIGZhaWxfZ3VubG9jaztcbiA3NjY6XHRcdH1cbiA3Njc6XHRcbiA3Njg6XHRcdGVycm9yID0gZ2ZzMl9kaXJhZGRfYWxsb2NfcmVxdWlyZWQoZGlyLCBuYW1lLCBcdTAwMjZkYSk7XG4gNzY5Olx0XHRpZiAoZXJyb3IgXHUwMDNjIDApXG4gNzcwOlx0XHRcdGdvdG8gZmFpbF9ndW5sb2NrO1xuIDc3MTpcdFxuIDc3MjpcdFx0aW5vZGUgPSBuZXdfaW5vZGUoc2RwLVx1MDAzZXNkX3Zmcyk7XG4gNzczOlx0XHRlcnJvciA9IC1FTk9NRU07XG4gNzc0Olx0XHRpZiAoIWlub2RlKVxuIDc3NTpcdFx0XHRnb3RvIGZhaWxfZ3VubG9jaztcbiA3NzY6XHRcdGdmczJfc2V0dXBfaW5vZGUoaW5vZGUpO1xuIDc3NzpcdFx0aXAgPSBHRlMyX0koaW5vZGUpO1xuIDc3ODpcdFxuIDc3OTpcdFx0ZXJyb3IgPSBwb3NpeF9hY2xfY3JlYXRlKGRpciwgXHUwMDI2bW9kZSwgXHUwMDI2ZGVmYXVsdF9hY2wsIFx1MDAyNmFjbCk7XG4gNzgwOlx0XHRpZiAoZXJyb3IpXG4gNzgxOlx0XHRcdGdvdG8gZmFpbF9ndW5sb2NrO1xuIDc4MjpcdFxuIDc4MzpcdFx0ZXJyb3IgPSBnZnMyX3FhX2dldChpcCk7XG4gNzg0Olx0XHRpZiAoZXJyb3IpXG4gNzg1Olx0XHRcdGdvdG8gZmFpbF9mcmVlX2FjbHM7XG4gNzg2Olx0XG4gNzg3Olx0XHRpbm9kZS1cdTAwM2VpX21vZGUgPSBtb2RlO1xuIDc4ODpcdFx0c2V0X25saW5rKGlub2RlLCBTX0lTRElSKG1vZGUpID8gMiA6IDEpO1xuIDc4OTpcdFx0aW5vZGUtXHUwMDNlaV9yZGV2ID0gZGV2O1xuIDc5MDpcdFx0aW5vZGUtXHUwMDNlaV9zaXplID0gc2l6ZTtcbiA3OTE6XHRcdHNpbXBsZV9pbm9kZV9pbml0X3RzKGlub2RlKTtcbiA3OTI6XHRcdG11bmdlX21vZGVfdWlkX2dpZChkaXAsIGlub2RlKTtcbiA3OTM6XHRcdGNoZWNrX2FuZF91cGRhdGVfZ29hbChkaXApO1xuIDc5NDpcdFx0aXAtXHUwMDNlaV9nb2FsID0gZGlwLVx1MDAzZWlfZ29hbDtcbiA3OTU6XHRcdGlwLVx1MDAzZWlfZGlza2ZsYWdzID0gMDtcbiA3OTY6XHRcdGlwLVx1MDAzZWlfZWF0dHIgPSAwO1xuIDc5NzpcdFx0aXAtXHUwMDNlaV9oZWlnaHQgPSAwO1xuIDc5ODpcdFx0aXAtXHUwMDNlaV9kZXB0aCA9IDA7XG4gNzk5Olx0XHRpcC1cdTAwM2VpX2VudHJpZXMgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mzg2MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDU3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9ucyBvZiBgZXhjbGAgaW4gRmlsZSBDcmVhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoaXMgYGV4Y2xgIGZsYWcgaXMgYmVpbmcgcGFzc2VkIGFyb3VuZCBpbiB0aGUgZmlsZSBjcmVhdGlvbiBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgaW4gcmVsYXRpb24gdG8gYGdmczJfY3JlYXRlX2lub2RlYC4gSSBzZWUgaXQgYmVpbmcgdXNlZCBpbiBgZ2ZzMl9kaXJfc2VhcmNoYCB2aWE6CmBgYGMKCWlub2RlID0gZ2ZzMl9kaXJfc2VhcmNoKGRpciwgJmFtcDtkZW50cnktJmd0O2RfbmFtZSwgIVNfSVNSRUcobW9kZSkgfHwgZXhjbCk7CmBgYApNeSBpbml0aWFsIHRob3VnaHQgd2FzLCAmIzM0O0hleSwgaWYgYGdmczJfY3JlYXRlYCBnZXRzIGNhbGxlZCBieSBgbG9va3VwX29wZW5gIHdpdGggYGV4Y2wgPSBmYWxzZWAsIHdvdWxkbiYjMzk7dCB0aGF0IG1lYW4gYGdmczJfY3JlYXRlX2lub2RlYCB3b3VsZCBnZXQgYGV4Y2wgPSAwYD8mIzM0OyBCdXQgdGhlbiwgSSByZW1lbWJlcmVkIHRoYXQgYGdmczJgIGltcGxlbWVudHMgYGF0b21pY19vcGVuYC4gCgpBaGEhIFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsLiBgbG9va3VwX29wZW5gIGNhbGxzIGBnZnMyX2F0b21pY19vcGVuYCwgTk9UIGBnZnMyX2NyZWF0ZWAuIExldCYjMzk7cyBjaGVjayBgZ2ZzMl9hdG9taWNfb3BlbmA6CmBgYGMKc3RhdGljIGludCBnZnMyX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCgkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgZmxhZ3MsCgkJCSAgICB1bW9kZV90IG1vZGUpCnsKCWJvb2wgZXhjbCA9ICEhKGZsYWdzICZhbXA7IE9fRVhDTCk7CgoJaWYgKCFkX2luX2xvb2t1cChkZW50cnkpKQoJCWdvdG8gc2tpcF9sb29rdXA7CgoJcmV0dXJuIGdmczJfY3JlYXRlX2lub2RlKGRpciwgZGVudHJ5LCBmaWxlLCBTX0lGUkVHIHwgbW9kZSwgMCwgTlVMTCwgMCwgZXhjbCk7CmBgYApPa2F5LCBzbyBgZ2ZzMl9hdG9taWNfb3BlbmAgZG9lcyBwYXNzIHRoZSBjb3JyZWN0IGBleGNsYCB2YWx1ZS4gQW5kIHRoaW5raW5nIGl0IHRocm91Z2gsIGBnZnMyX2NyZWF0ZWAgaXMgT05MWSBjYWxsZWQgYnkgYHZmc19jcmVhdGVgLiBBbmQgYHZmc19jcmVhdGVgICphbHdheXMqIHBhc3NlcyBgdHJ1ZWAgZm9yIGBleGNsYC4gU28gdGhlIHNpdHVhdGlvbiwgd2l0aCBgZ2ZzMl9jcmVhdGVgIHBhc3NpbmcgYDFgLCBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIGJlZm9yZS4gVGhhdCBtYWtlcyBzZW5zZS4KCk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgb3RoZXIgZmlsZXN5c3RlbXMuIExldCYjMzk7cyBzdGFydCB3aXRoIGBuZnNgLiBgbmZzYCBpbXBsZW1lbnRzIGBhdG9taWNfb3BlbmAgdG9vLiBUaGUgc2FtZSBsb2dpYyBzaG91bGQgYXBwbHk6IGBuZnNfY3JlYXRlYCBpcyBvbmx5IGNhbGxlZCBieSBgdmZzX2NyZWF0ZWAsIHdoaWNoIGFsd2F5cyBwYXNzZXMgYHRydWVgLiBUaGVyZWZvcmUsIHBhc3NpbmcgYE9fRVhDTGAgaW4gYG5mc19jcmVhdGVgIGlzIGV4YWN0bHkgdGhlIHNhbWUgYmVoYXZpb3IgYXMgYmVmb3JlLiAKCk5vdywgb24gdG8gYHZib3hzZmAuIFNhbWUgcGF0dGVybi4gYHZib3hzZmAgaW1wbGVtZW50cyBgYXRvbWljX29wZW5gLCBzbyBgdmJveHNmX2Rpcl9ta2ZpbGVgIGlzIGNhbGxlZCBieSBgdmZzX2NyZWF0ZWAsIHdoaWNoICphbHdheXMqIHBhc3NlcyBgdHJ1ZWAuIFNvLCBwYXNzaW5nIGB0cnVlYCBpcyB0aGUgc2FtZSBiZWhhdmlvci4KCkZpbmFsbHksIGBjaWZzYC4gYGNpZnNgIGFsc28gaW1wbGVtZW50cyBgYXRvbWljX29wZW5gLiBUaGlzIG1lYW5zIGBjaWZzX2NyZWF0ZWAgaXMgKmFsc28qIGNhbGxlZCBvbmx5IGJ5IGB2ZnNfY3JlYXRlYC4gV2hpY2ggYWx3YXlzIHBhc3NlZCBgdHJ1ZWAgZm9yIGBleGNsYC4gQnV0LCB3YWl0IGEgbWludXRlLCBJIGRvbiYjMzk7dCByZW1lbWJlciBgY2lmc19jcmVhdGVgIGV2ZW4gKnVzaW5nKiBgZXhjbGAgYmVmb3JlLiBOZWVkIHRvIHZlcmlmeSB0aGF0Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NpZnNfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvc21iL2NsaWVudC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvc21iL2NsaWVudC9jYWNoZWRfZGlyLmM9MTM0PWludCBvcGVuX2NhY2hlZF9kaXIodW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfdGNvbiAqdGNvbixcbi0tXG5mcy9zbWIvY2xpZW50L2NhY2hlZF9kaXIuYy0yNzUtXHRcdC5wYXRoID0gcGF0aCxcbmZzL3NtYi9jbGllbnQvY2FjaGVkX2Rpci5jOjI3NjpcdFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCBDUkVBVEVfTk9UX0ZJTEUpLFxuZnMvc21iL2NsaWVudC9jYWNoZWRfZGlyLmMtMjc3LVx0XHQuZGVzaXJlZF9hY2Nlc3MgPSAgRklMRV9SRUFEX0RBVEEgfCBGSUxFX1JFQURfQVRUUklCVVRFUyB8XG4tLVxuZnMvc21iL2NsaWVudC9jaWZzYWNsLmM9MTU3NT1zdGF0aWMgc3RydWN0IHNtYl9udHNkICpnZXRfY2lmc19hY2xfYnlfcGF0aChzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiLFxuLS1cbmZzL3NtYi9jbGllbnQvY2lmc2FjbC5jLTE1OTYtXHRcdC5kZXNpcmVkX2FjY2VzcyA9IFJFQURfQ09OVFJPTCxcbmZzL3NtYi9jbGllbnQvY2lmc2FjbC5jOjE1OTc6XHRcdC5jcmVhdGVfb3B0aW9ucyA9IGNpZnNfY3JlYXRlX29wdGlvbnMoY2lmc19zYiwgMCksXG5mcy9zbWIvY2xpZW50L2NpZnNhY2wuYy0xNTk4LVx0XHQuZGlzcG9zaXRpb24gPSBGSUxFX09QRU4sXG4tLVxuZnMvc21iL2NsaWVudC9jaWZzYWNsLmM9MTY0MD1pbnQgc2V0X2NpZnNfYWNsKHN0cnVjdCBzbWJfbnRzZCAqcG5udHNkLCBfX3UzMiBhY2xsZW4sXG4tLVxuZnMvc21iL2NsaWVudC9jaWZzYWNsLmMtMTY2OC1cdFx0LmRlc2lyZWRfYWNjZXNzID0gYWNjZXNzX2ZsYWdzLFxuZnMvc21iL2NsaWVudC9jaWZzYWNsLmM6MTY2OTpcdFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCAwKSxcbmZzL3NtYi9jbGllbnQvY2lmc2FjbC5jLTE2NzAtXHRcdC5kaXNwb3NpdGlvbiA9IEZJTEVfT1BFTixcbi0tXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jPTEyMjg9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2lmc19kaXJfaW5vZGVfb3BzID0ge1xuZnMvc21iL2NsaWVudC9jaWZzZnMuYzoxMjI5Olx0LmNyZWF0ZSA9IGNpZnNfY3JlYXRlLFxuZnMvc21iL2NsaWVudC9jaWZzZnMuYy0xMjMwLVx0LmF0b21pY19vcGVuID0gY2lmc19hdG9taWNfb3Blbixcbi0tXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5oPTU1PXN0cnVjdCBpbm9kZSAqY2lmc19yb290X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG5mcy9zbWIvY2xpZW50L2NpZnNmcy5oOjU2OmludCBjaWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5oLTU3LVx0XHRzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbi0tXG5mcy9zbWIvY2xpZW50L2NpZnNnbG9iLmg9MjIzMj1zdGF0aWMgaW5saW5lIHZvaWQgbW92ZV9jaWZzX2luZm9fdG9fc21iMihzdHJ1Y3Qgc21iMl9maWxlX2FsbF9pbmZvICpkc3QsIGNvbnN0IEZJTEVfQUxMX0lORk8gKnNyYylcbi0tXG5mcy9zbWIvY2xpZW50L2NpZnNnbG9iLmgtMjI0OS1cdFx0LmRpc3Bvc2l0aW9uID0gKF9jZCksIFxcXG5mcy9zbWIvY2xpZW50L2NpZnNnbG9iLmg6MjI1MDpcdFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhfY2lmc19zYiwgKF9jbykpLCBcXFxuZnMvc21iL2NsaWVudC9jaWZzZ2xvYi5oLTIyNTEtXHRcdC5tb2RlID0gKF9tb2RlKSwgXFxcbi0tXG5mcy9zbWIvY2xpZW50L2NpZnNwcm90by5oPTM0MD1pbnQgY2lmc19xdWVyeV9tZl9zeW1saW5rKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sXG4tLVxuZnMvc21iL2NsaWVudC9jaWZzcHJvdG8uaC0zNDMtXHRcdFx0ICB1bnNpZ25lZCBpbnQgKnBieXRlc19yZWFkKTtcbmZzL3NtYi9jbGllbnQvY2lmc3Byb3RvLmg6MzQ0OmludCBjaWZzX2NyZWF0ZV9tZl9zeW1saW5rKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sXG5mcy9zbWIvY2xpZW50L2NpZnNwcm90by5oLTM0NS1cdFx0XHQgICBzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiLFxuLS1cbmZzL3NtYi9jbGllbnQvY2lmc3Byb3RvLmg9NDIxPXN0YXRpYyBpbmxpbmUgaW50IGNpZnNfaW52YWxfbmFtZV9kZnNfbGlua19lcnJvcihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLFxuLS1cbmZzL3NtYi9jbGllbnQvY2lmc3Byb3RvLmgtNDMxLVxuZnMvc21iL2NsaWVudC9jaWZzcHJvdG8uaDo0MzI6c3RhdGljIGlubGluZSBpbnQgY2lmc19jcmVhdGVfb3B0aW9ucyhzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiLCBpbnQgb3B0aW9ucylcbmZzL3NtYi9jbGllbnQvY2lmc3Byb3RvLmgtNDMzLXtcbi0tXG5mcy9zbWIvY2xpZW50L2NpZnNzbWIuYz0yOTU0PWludCBjaWZzX3F1ZXJ5X3JlcGFyc2VfcG9pbnQoY29uc3QgdW5zaWduZWQgaW50IHhpZCxcbi0tXG5mcy9zbWIvY2xpZW50L2NpZnNzbWIuYy0yOTg0LVx0XHQuZGVzaXJlZF9hY2Nlc3MgPSBGSUxFX1JFQURfQVRUUklCVVRFUyxcbmZzL3NtYi9jbGllbnQvY2lmc3NtYi5jOjI5ODU6XHRcdC5jcmVhdGVfb3B0aW9ucyA9IGNpZnNfY3JlYXRlX29wdGlvbnMoY2lmc19zYixcbmZzL3NtYi9jbGllbnQvY2lmc3NtYi5jLTI5ODYtXHRcdFx0XHRcdFx0ICAgICAgT1BFTl9SRVBBUlNFX1BPSU5UKSxcbi0tXG5mcy9zbWIvY2xpZW50L2NpZnNzbWIuYy0zMDg0LVxuZnMvc21iL2NsaWVudC9jaWZzc21iLmM6MzA4NTpzdHJ1Y3QgaW5vZGUgKmNpZnNfY3JlYXRlX3JlcGFyc2VfaW5vZGUoc3RydWN0IGNpZnNfb3Blbl9pbmZvX2RhdGEgKmRhdGEsXG5mcy9zbWIvY2xpZW50L2NpZnNzbWIuYy0zMDg2LVx0XHRcdFx0XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL3NtYi9jbGllbnQvY2lmc3NtYi5jPTU4MzM9Q0lGU1NNQlNldFBhdGhJbmZvRkIoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfdGNvbiAqdGNvbixcbi0tXG5mcy9zbWIvY2xpZW50L2NpZnNzbWIuYy01ODQ2LVx0XHQuZGVzaXJlZF9hY2Nlc3MgPSBHRU5FUklDX1dSSVRFLFxuZnMvc21iL2NsaWVudC9jaWZzc21iLmM6NTg0NzpcdFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCAwKSxcbmZzL3NtYi9jbGllbnQvY2lmc3NtYi5jLTU4NDgtXHRcdC5kaXNwb3NpdGlvbiA9IEZJTEVfT1BFTixcbi0tXG5mcy9zbWIvY2xpZW50L2Rpci5jPTIwMT1zdGF0aWMgaW50IF9fY2lmc19kb19jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LFxuLS1cbmZzL3NtYi9jbGllbnQvZGlyLmMtMjQwLVx0XHRcdFx0LyogcXVlcnkgaW5vZGUgaW5mbyAqL1xuZnMvc21iL2NsaWVudC9kaXIuYzoyNDE6XHRcdFx0XHRnb3RvIGNpZnNfY3JlYXRlX2dldF9maWxlX2luZm87XG5mcy9zbWIvY2xpZW50L2Rpci5jLTI0Mi1cdFx0XHR9XG4tLVxuZnMvc21iL2NsaWVudC9kaXIuYy0yNjQtXHRcdFx0XHRDSUZTU01CQ2xvc2UoeGlkLCB0Y29uLCBmaWQtXHUwMDNlbmV0ZmlkKTtcbmZzL3NtYi9jbGllbnQvZGlyLmM6MjY1Olx0XHRcdFx0Z290byBjaWZzX2NyZWF0ZV9nZXRfZmlsZV9pbmZvO1xuZnMvc21iL2NsaWVudC9kaXIuYy0yNjYtXHRcdFx0fVxuZnMvc21iL2NsaWVudC9kaXIuYy0yNjctXHRcdFx0Lyogc3VjY2Vzcywgbm8gbmVlZCB0byBxdWVyeSAqL1xuZnMvc21iL2NsaWVudC9kaXIuYzoyNjg6XHRcdFx0Z290byBjaWZzX2NyZWF0ZV9zZXRfZGVudHJ5O1xuZnMvc21iL2NsaWVudC9kaXIuYy0yNjktXG5mcy9zbWIvY2xpZW50L2Rpci5jLTI3MC1cdFx0Y2FzZSAtRU5PRU5UOlxuZnMvc21iL2NsaWVudC9kaXIuYzoyNzE6XHRcdFx0Z290byBjaWZzX2NyZWF0ZV9nZXRfZmlsZV9pbmZvO1xuZnMvc21iL2NsaWVudC9kaXIuYy0yNzItXG4tLVxuZnMvc21iL2NsaWVudC9kaXIuYy0zNzMtXHRcdC5kZXNpcmVkX2FjY2VzcyA9IGRlc2lyZWRfYWNjZXNzLFxuZnMvc21iL2NsaWVudC9kaXIuYzozNzQ6XHRcdC5jcmVhdGVfb3B0aW9ucyA9IGNpZnNfY3JlYXRlX29wdGlvbnMoY2lmc19zYiwgY3JlYXRlX29wdGlvbnMpLFxuZnMvc21iL2NsaWVudC9kaXIuYy0zNzUtXHRcdC5kaXNwb3NpdGlvbiA9IGRpc3Bvc2l0aW9uLFxuLS1cbmZzL3NtYi9jbGllbnQvZGlyLmMtMzgyLVx0aWYgKHJjKSB7XG5mcy9zbWIvY2xpZW50L2Rpci5jOjM4MzpcdFx0Y2lmc19kYmcoRllJLCBcJiMzNDtjaWZzX2NyZWF0ZSByZXR1cm5lZCAweCV4XFxuXCYjMzQ7LCByYyk7XG5mcy9zbWIvY2xpZW50L2Rpci5jLTM4NC1cdFx0aWYgKHJjID09IC1FQUNDRVMgXHUwMDI2XHUwMDI2IHJkd3JfZm9yX2ZzY2FjaGUgPT0gMSkge1xuLS1cbmZzL3NtYi9jbGllbnQvZGlyLmMtNDI5LVxuZnMvc21iL2NsaWVudC9kaXIuYzo0MzA6Y2lmc19jcmVhdGVfZ2V0X2ZpbGVfaW5mbzpcbmZzL3NtYi9jbGllbnQvZGlyLmMtNDMxLVx0Lyogc2VydmVyIG1pZ2h0IG1hc2sgbW9kZSBzbyB3ZSBoYXZlIHRvIHF1ZXJ5IGZvciBpdCAqL1xuLS1cbmZzL3NtYi9jbGllbnQvZGlyLmMtNDU4LSNpZmRlZiBDT05GSUdfQ0lGU19BTExPV19JTlNFQ1VSRV9MRUdBQ1lcbmZzL3NtYi9jbGllbnQvZGlyLmM6NDU5OmNpZnNfY3JlYXRlX3NldF9kZW50cnk6XG5mcy9zbWIvY2xpZW50L2Rpci5jLTQ2MC0jZW5kaWYgLyogQ09ORklHX0NJRlNfQUxMT1dfSU5TRUNVUkVfTEVHQUNZICovXG4tLVxuZnMvc21iL2NsaWVudC9kaXIuYz01MjA9aW50IGNpZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LFxuLS1cbmZzL3NtYi9jbGllbnQvZGlyLmMtNjQ2LSAqL1xuZnMvc21iL2NsaWVudC9kaXIuYzo2NDc6aW50IGNpZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbmZzL3NtYi9jbGllbnQvZGlyLmMtNjQ4LVx0XHRzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSwgdW1vZGVfdCBtb2RlKVxuLS1cbmZzL3NtYi9jbGllbnQvZGlyLmMtNjY4LVxuZnMvc21iL2NsaWVudC9kaXIuYzo2Njk6XHRjaWZzX2RiZyhGWUksIFwmIzM0O2NpZnNfY3JlYXRlIHBhcmVudCBpbm9kZSA9IDB4JXAgbmFtZSBpczogJXBkIGFuZCBkZW50cnkgPSAweCVwXFxuXCYjMzQ7LFxuZnMvc21iL2NsaWVudC9kaXIuYy02NzAtXHRcdCBkaXIsIGRpcmVudHJ5LCBkaXJlbnRyeSk7XG4tLVxuZnMvc21iL2NsaWVudC9maWxlLmM9NTQ3PXN0YXRpYyBpbnQgY2lmc19udF9vcGVuKGNvbnN0IGNoYXIgKmZ1bGxfcGF0aCwgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYixcbi0tXG5mcy9zbWIvY2xpZW50L2ZpbGUuYy02MDAtXHRcdC5kZXNpcmVkX2FjY2VzcyA9IGRlc2lyZWRfYWNjZXNzLFxuZnMvc21iL2NsaWVudC9maWxlLmM6NjAxOlx0XHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIGNyZWF0ZV9vcHRpb25zKSxcbmZzL3NtYi9jbGllbnQvZmlsZS5jLTYwMi1cdFx0LmRpc3Bvc2l0aW9uID0gZGlzcG9zaXRpb24sXG4tLVxuZnMvc21iL2NsaWVudC9maWxlLmM9MTIzMz1jaWZzX3Jlb3Blbl9maWxlKHN0cnVjdCBjaWZzRmlsZUluZm8gKmNmaWxlLCBib29sIGNhbl9mbHVzaClcbi0tXG5mcy9zbWIvY2xpZW50L2ZpbGUuYy0xMzI4LVx0XHQuZGVzaXJlZF9hY2Nlc3MgPSBkZXNpcmVkX2FjY2VzcyxcbmZzL3NtYi9jbGllbnQvZmlsZS5jOjEzMjk6XHRcdC5jcmVhdGVfb3B0aW9ucyA9IGNpZnNfY3JlYXRlX29wdGlvbnMoY2lmc19zYiwgY3JlYXRlX29wdGlvbnMpLFxuZnMvc21iL2NsaWVudC9maWxlLmMtMTMzMC1cdFx0LmRpc3Bvc2l0aW9uID0gZGlzcG9zaXRpb24sXG4tLVxuZnMvc21iL2NsaWVudC9pbm9kZS5jPTI2OT1jaWZzX3VuaXhfYmFzaWNfdG9fZmF0dHIoc3RydWN0IGNpZnNfZmF0dHIgKmZhdHRyLCBGSUxFX1VOSVhfQkFTSUNfSU5GTyAqaW5mbyxcbi0tXG5mcy9zbWIvY2xpZW50L2lub2RlLmMtMzYyLSAqL1xuZnMvc21iL2NsaWVudC9pbm9kZS5jOjM2MzpzdGF0aWMgdm9pZCBjaWZzX2NyZWF0ZV9qdW5jdGlvbl9mYXR0cihzdHJ1Y3QgY2lmc19mYXR0ciAqZmF0dHIsXG5mcy9zbWIvY2xpZW50L2lub2RlLmMtMzY0LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvc21iL2NsaWVudC9pbm9kZS5jPTQwOD1jaWZzX2dldF9maWxlX2luZm9fdW5peChzdHJ1Y3QgZmlsZSAqZmlscClcbi0tXG5mcy9zbWIvY2xpZW50L2lub2RlLmMtNDMyLVx0fSBlbHNlIGlmIChyYyA9PSAtRVJFTU9URSkge1xuZnMvc21iL2NsaWVudC9pbm9kZS5jOjQzMzpcdFx0Y2lmc19jcmVhdGVfanVuY3Rpb25fZmF0dHIoXHUwMDI2ZmF0dHIsIGlub2RlLVx1MDAzZWlfc2IpO1xuZnMvc21iL2NsaWVudC9pbm9kZS5jLTQzNC1cdH0gZWxzZVxuLS1cbmZzL3NtYi9jbGllbnQvaW5vZGUuYz00NDQ9c3RhdGljIGludCBjaWZzX2dldF91bml4X2ZhdHRyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZ1bGxfcGF0aCxcbi0tXG5mcy9zbWIvY2xpZW50L2lub2RlLmMtNDczLVx0fSBlbHNlIGlmIChyYyA9PSAtRVJFTU9URSkge1xuZnMvc21iL2NsaWVudC9pbm9kZS5jOjQ3NDpcdFx0Y2lmc19jcmVhdGVfanVuY3Rpb25fZmF0dHIoZmF0dHIsIHNiKTtcbmZzL3NtYi9jbGllbnQvaW5vZGUuYy00NzUtXHRcdHJjID0gMDtcbi0tXG5mcy9zbWIvY2xpZW50L2lub2RlLmM9NTM1PWNpZnNfc2Z1X3R5cGUoc3RydWN0IGNpZnNfZmF0dHIgKmZhdHRyLCBjb25zdCBjaGFyICpwYXRoLFxuLS1cbmZzL3NtYi9jbGllbnQvaW5vZGUuYy01NzUtXHRcdC5kZXNpcmVkX2FjY2VzcyA9IEdFTkVSSUNfUkVBRCxcbmZzL3NtYi9jbGllbnQvaW5vZGUuYzo1NzY6XHRcdC5jcmVhdGVfb3B0aW9ucyA9IGNpZnNfY3JlYXRlX29wdGlvbnMoY2lmc19zYiwgQ1JFQVRFX05PVF9ESVIpLFxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTU3Ny1cdFx0LmRpc3Bvc2l0aW9uID0gRklMRV9PUEVOLFxuLS1cbmZzL3NtYi9jbGllbnQvaW5vZGUuYz05ODA9Y2lmc19nZXRfZmlsZV9pbmZvKHN0cnVjdCBmaWxlICpmaWxwKVxuLS1cbmZzL3NtYi9jbGllbnQvaW5vZGUuYy0xMDE4LVx0Y2FzZSAtRVJFTU9URTpcbmZzL3NtYi9jbGllbnQvaW5vZGUuYzoxMDE5Olx0XHRjaWZzX2NyZWF0ZV9qdW5jdGlvbl9mYXR0cihcdTAwMjZmYXR0ciwgaW5vZGUtXHUwMDNlaV9zYik7XG5mcy9zbWIvY2xpZW50L2lub2RlLmMtMTAyMC1cdFx0YnJlYWs7XG4tLVxuZnMvc21iL2NsaWVudC9pbm9kZS5jPTExNzI9c3RhdGljIGludCByZXBhcnNlX2luZm9fdG9fZmF0dHIoc3RydWN0IGNpZnNfb3Blbl9pbmZvX2RhdGEgKmRhdGEsXG4tLVxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTEyMTQtXHRcdGlmIChsZTMyX3RvX2NwdShkYXRhLVx1MDAzZWZpLkF0dHJpYnV0ZXMpIFx1MDAyNiBBVFRSX0RJUkVDVE9SWSkge1xuZnMvc21iL2NsaWVudC9pbm9kZS5jOjEyMTU6XHRcdFx0Y2lmc19jcmVhdGVfanVuY3Rpb25fZmF0dHIoZmF0dHIsIHNiKTtcbmZzL3NtYi9jbGllbnQvaW5vZGUuYy0xMjE2LVx0XHRcdGdvdG8gb3V0O1xuLS1cbmZzL3NtYi9jbGllbnQvaW5vZGUuYy0xMjM5LVx0XHRcdFx0cmMgPSAwO1xuZnMvc21iL2NsaWVudC9pbm9kZS5jOjEyNDA6XHRcdFx0XHRjaWZzX2NyZWF0ZV9qdW5jdGlvbl9mYXR0cihmYXR0ciwgc2IpO1xuZnMvc21iL2NsaWVudC9pbm9kZS5jLTEyNDEtXHRcdFx0XHRnb3RvIG91dDtcbi0tXG5mcy9zbWIvY2xpZW50L2lub2RlLmM9MTI3Mj1zdGF0aWMgaW50IGNpZnNfZ2V0X2ZhdHRyKHN0cnVjdCBjaWZzX29wZW5faW5mb19kYXRhICpkYXRhLFxuLS1cbmZzL3NtYi9jbGllbnQvaW5vZGUuYy0xMzI3LVx0XHQvKiBERlMgbGluaywgbm8gbWV0YWRhdGEgYXZhaWxhYmxlIG9uIHRoaXMgc2VydmVyICovXG5mcy9zbWIvY2xpZW50L2lub2RlLmM6MTMyODpcdFx0Y2lmc19jcmVhdGVfanVuY3Rpb25fZmF0dHIoZmF0dHIsIHNiKTtcbmZzL3NtYi9jbGllbnQvaW5vZGUuYy0xMzI5LVx0XHRyYyA9IDA7XG4tLVxuZnMvc21iL2NsaWVudC9pbm9kZS5jPTE0NjM9c3RhdGljIGludCBzbWIzMTFfcG9zaXhfZ2V0X2ZhdHRyKHN0cnVjdCBjaWZzX29wZW5faW5mb19kYXRhICpkYXRhLFxuLS1cbmZzL3NtYi9jbGllbnQvaW5vZGUuYy0xNTA2LVx0XHQvKiBERlMgbGluaywgbm8gbWV0YWRhdGEgYXZhaWxhYmxlIG9uIHRoaXMgc2VydmVyICovXG5mcy9zbWIvY2xpZW50L2lub2RlLmM6MTUwNzpcdFx0Y2lmc19jcmVhdGVfanVuY3Rpb25fZmF0dHIoZmF0dHIsIHNiKTtcbmZzL3NtYi9jbGllbnQvaW5vZGUuYy0xNTA4LVx0XHRyYyA9IDA7XG4tLVxuZnMvc21iL2NsaWVudC9pbm9kZS5jPTE4MDU9Y2lmc19yZW5hbWVfcGVuZGluZ19kZWxldGUoY29uc3QgY2hhciAqZnVsbF9wYXRoLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTE4MzctXHRcdC5kZXNpcmVkX2FjY2VzcyA9IERFTEVURSB8IEZJTEVfV1JJVEVfQVRUUklCVVRFUyxcbmZzL3NtYi9jbGllbnQvaW5vZGUuYzoxODM4Olx0XHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIENSRUFURV9OT1RfRElSKSxcbmZzL3NtYi9jbGllbnQvaW5vZGUuYy0xODM5LVx0XHQuZGlzcG9zaXRpb24gPSBGSUxFX09QRU4sXG4tLVxuZnMvc21iL2NsaWVudC9pbm9kZS5jPTI0MzU9Y2lmc19kb19yZW5hbWUoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGRlbnRyeSAqZnJvbV9kZW50cnksXG4tLVxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTI0OTMtXHRcdC5kZXNpcmVkX2FjY2VzcyA9IERFTEVURSxcbmZzL3NtYi9jbGllbnQvaW5vZGUuYzoyNDk0Olx0XHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIENSRUFURV9OT1RfRElSKSxcbmZzL3NtYi9jbGllbnQvaW5vZGUuYy0yNDk1LVx0XHQuZGlzcG9zaXRpb24gPSBGSUxFX09QRU4sXG4tLVxuZnMvc21iL2NsaWVudC9saW5rLmM9MjI3PWNpZnNfcXVlcnlfbWZfc3ltbGluayh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxuLS1cbmZzL3NtYi9jbGllbnQvbGluay5jLTI0Mi1cdFx0LmRlc2lyZWRfYWNjZXNzID0gR0VORVJJQ19SRUFELFxuZnMvc21iL2NsaWVudC9saW5rLmM6MjQzOlx0XHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIENSRUFURV9OT1RfRElSKSxcbmZzL3NtYi9jbGllbnQvbGluay5jLTI0NC1cdFx0LmRpc3Bvc2l0aW9uID0gRklMRV9PUEVOLFxuLS1cbmZzL3NtYi9jbGllbnQvbGluay5jPTI3MT1pbnRcbmZzL3NtYi9jbGllbnQvbGluay5jOjI3MjpjaWZzX2NyZWF0ZV9tZl9zeW1saW5rKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sXG5mcy9zbWIvY2xpZW50L2xpbmsuYy0yNzMtXHRcdCAgICAgICBzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiLCBjb25zdCB1bnNpZ25lZCBjaGFyICpwYXRoLFxuLS1cbmZzL3NtYi9jbGllbnQvbGluay5jLTI4NS1cdFx0LmRlc2lyZWRfYWNjZXNzID0gR0VORVJJQ19XUklURSxcbmZzL3NtYi9jbGllbnQvbGluay5jOjI4NjpcdFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCBDUkVBVEVfTk9UX0RJUiksXG5mcy9zbWIvY2xpZW50L2xpbmsuYy0yODctXHRcdC5kaXNwb3NpdGlvbiA9IEZJTEVfQ1JFQVRFLFxuLS1cbmZzL3NtYi9jbGllbnQvbGluay5jPTMxMj1zbWIzX3F1ZXJ5X21mX3N5bWxpbmsodW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfdGNvbiAqdGNvbixcbi0tXG5mcy9zbWIvY2xpZW50L2xpbmsuYy0zMjktXHRcdC5kZXNpcmVkX2FjY2VzcyA9IEdFTkVSSUNfUkVBRCxcbmZzL3NtYi9jbGllbnQvbGluay5jOjMzMDpcdFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCBDUkVBVEVfTk9UX0RJUiksXG5mcy9zbWIvY2xpZW50L2xpbmsuYy0zMzEtXHRcdC5kaXNwb3NpdGlvbiA9IEZJTEVfT1BFTixcbi0tXG5mcy9zbWIvY2xpZW50L2xpbmsuYz0zNzU9c21iM19jcmVhdGVfbWZfc3ltbGluayh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxuLS1cbmZzL3NtYi9jbGllbnQvbGluay5jLTM5Ny1cdFx0LmRlc2lyZWRfYWNjZXNzID0gR0VORVJJQ19XUklURSxcbmZzL3NtYi9jbGllbnQvbGluay5jOjM5ODpcdFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCBDUkVBVEVfTk9UX0RJUiksXG5mcy9zbWIvY2xpZW50L2xpbmsuYy0zOTktXHRcdC5kaXNwb3NpdGlvbiA9IEZJTEVfQ1JFQVRFLFxuLS1cbmZzL3NtYi9jbGllbnQvcmVwYXJzZS5jPTI0Nz1zdGF0aWMgaW50IGRldGVjdF9kaXJlY3Rvcnlfc3ltbGlua190YXJnZXQoc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYixcbi0tXG5mcy9zbWIvY2xpZW50L3JlcGFyc2UuYy0zMzItXHRvcGxvY2sgPSAwO1xuZnMvc21iL2NsaWVudC9yZXBhcnNlLmM6MzMzOlx0b3Bhcm1zLmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLFxuZnMvc21iL2NsaWVudC9yZXBhcnNlLmMtMzM0LVx0XHRcdFx0XHRcdCAgICBDUkVBVEVfTk9UX0ZJTEUgfCBPUEVOX1JFUEFSU0VfUE9JTlQpO1xuLS1cbmZzL3NtYi9jbGllbnQvcmVwYXJzZS5jLTM1MS1cdFx0b3Bsb2NrID0gMDtcbmZzL3NtYi9jbGllbnQvcmVwYXJzZS5jOjM1MjpcdFx0b3Bhcm1zLmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLFxuZnMvc21iL2NsaWVudC9yZXBhcnNlLmMtMzUzLVx0XHRcdFx0XHRcdFx0ICAgIENSRUFURV9OT1RfRElSIHwgT1BFTl9SRVBBUlNFX1BPSU5UKTtcbi0tXG5mcy9zbWIvY2xpZW50L3JlcGFyc2UuYz0xMjM1PWJvb2wgY2lmc19yZXBhcnNlX3BvaW50X3RvX2ZhdHRyKHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IsXG4tLVxuZnMvc21iL2NsaWVudC9yZXBhcnNlLmMtMTI2Ni1cdFx0XHRyZXR1cm4gZmFsc2U7XG5mcy9zbWIvY2xpZW50L3JlcGFyc2UuYzoxMjY3Olx0XHQvKiBTZWUgY2lmc19jcmVhdGVfanVuY3Rpb25fZmF0dHIoKSAqL1xuZnMvc21iL2NsaWVudC9yZXBhcnNlLmMtMTI2OC1cdFx0ZmF0dHItXHUwMDNlY2ZfbW9kZSA9IFNfSUZESVIgfCAwNzExO1xuLS1cbmZzL3NtYi9jbGllbnQvc21iMW9wcy5jPTk0Mj1zbWJfc2V0X2ZpbGVfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpmdWxsX3BhdGgsXG4tLVxuZnMvc21iL2NsaWVudC9zbWIxb3BzLmMtMTAyNi1cdFx0LmRlc2lyZWRfYWNjZXNzID0gU1lOQ0hST05JWkUgfCBGSUxFX1dSSVRFX0FUVFJJQlVURVMsXG5mcy9zbWIvY2xpZW50L3NtYjFvcHMuYzoxMDI3Olx0XHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIDApLFxuZnMvc21iL2NsaWVudC9zbWIxb3BzLmMtMTAyOC1cdFx0LmRpc3Bvc2l0aW9uID0gRklMRV9PUEVOLFxuLS1cbmZzL3NtYi9jbGllbnQvc21iMW9wcy5jPTEzODc9c3RydWN0IHNtYl92ZXJzaW9uX29wZXJhdGlvbnMgc21iMV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL3NtYi9jbGllbnQvc21iMW9wcy5jLTE0MzktXHQuZ2V0X3JlcGFyc2VfcG9pbnRfYnVmZmVyID0gY2lmc19nZXRfcmVwYXJzZV9wb2ludF9idWZmZXIsXG5mcy9zbWIvY2xpZW50L3NtYjFvcHMuYzoxNDQwOlx0LmNyZWF0ZV9yZXBhcnNlX2lub2RlID0gY2lmc19jcmVhdGVfcmVwYXJzZV9pbm9kZSxcbmZzL3NtYi9jbGllbnQvc21iMW9wcy5jLTE0NDEtXHQub3BlbiA9IGNpZnNfb3Blbl9maWxlLFxuLS1cbmZzL3NtYi9jbGllbnQvc21iMW9wcy5jLTE0NTgtXHQucXVlcnlfbWZfc3ltbGluayA9IGNpZnNfcXVlcnlfbWZfc3ltbGluayxcbmZzL3NtYi9jbGllbnQvc21iMW9wcy5jOjE0NTk6XHQuY3JlYXRlX21mX3N5bWxpbmsgPSBjaWZzX2NyZWF0ZV9tZl9zeW1saW5rLFxuZnMvc21iL2NsaWVudC9zbWIxb3BzLmMtMTQ2MC1cdC5pc19yZWFkX29wID0gY2lmc19pc19yZWFkX29wLFxuLS1cbmZzL3NtYi9jbGllbnQvc21iMXByb3RvLmg9MTA4PWludCBjaWZzX3F1ZXJ5X3JlcGFyc2VfcG9pbnQoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfdGNvbiAqdGNvbixcbi0tXG5mcy9zbWIvY2xpZW50L3NtYjFwcm90by5oLTExMS1cdFx0XHQgICAgIGludCAqcnNwX2J1ZnR5cGUpO1xuZnMvc21iL2NsaWVudC9zbWIxcHJvdG8uaDoxMTI6c3RydWN0IGlub2RlICpjaWZzX2NyZWF0ZV9yZXBhcnNlX2lub2RlKHN0cnVjdCBjaWZzX29wZW5faW5mb19kYXRhICpkYXRhLFxuZnMvc21iL2NsaWVudC9zbWIxcHJvdG8uaC0xMTMtXHRcdFx0XHRcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM9ODgzPXNtYjNfcWZzX3Rjb24oY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfdGNvbiAqdGNvbixcbi0tXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy04OTctXHRcdC5kaXNwb3NpdGlvbiA9IEZJTEVfT1BFTixcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jOjg5ODpcdFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCAwKSxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jLTg5OS1cdFx0LmZpZCA9IFx1MDAyNmZpZCxcbi0tXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYz05Mjg9c21iMl9xZnNfdGNvbihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxuLS1cbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jLTk0MS1cdFx0LmRpc3Bvc2l0aW9uID0gRklMRV9PUEVOLFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM6OTQyOlx0XHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIDApLFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtOTQzLVx0XHQuZmlkID0gXHUwMDI2ZmlkLFxuLS1cbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jPTk1OT1zbWIyX2lzX3BhdGhfYWNjZXNzaWJsZShjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxuLS1cbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jLTk4Ni1cdFx0LmRpc3Bvc2l0aW9uID0gRklMRV9PUEVOLFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM6OTg3Olx0XHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIDApLFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtOTg4LVx0XHQuZmlkID0gXHUwMDI2ZmlkLFxuLS1cbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jPTExODE9c21iMl9zZXRfZWEoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfdGNvbiAqdGNvbixcbi0tXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0xMjgzLVx0XHQuZGlzcG9zaXRpb24gPSBGSUxFX09QRU4sXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYzoxMjg0Olx0XHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIDApLFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMTI4NS1cdFx0LmZpZCA9IFx1MDAyNmZpZCxcbi0tXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYz0xNTc3PXNtYjJfaW9jdGxfcXVlcnlfaW5mbyhjb25zdCB1bnNpZ25lZCBpbnQgeGlkLFxuLS1cbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jLTE2NTItXHRcdC5kaXNwb3NpdGlvbiA9IEZJTEVfT1BFTixcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jOjE2NTM6XHRcdC5jcmVhdGVfb3B0aW9ucyA9IGNpZnNfY3JlYXRlX29wdGlvbnMoY2lmc19zYiwgY3JlYXRlX29wdGlvbnMpLFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMTY1NC1cdFx0LmZpZCA9IFx1MDAyNmZpZCxcbi0tXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYz0yMzcxPXNtYjNfbm90aWZ5KGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBmaWxlICpwZmlsZSxcbi0tXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0yNDIwLVx0XHQuZGlzcG9zaXRpb24gPSBGSUxFX09QRU4sXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYzoyNDIxOlx0XHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIDApLFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMjQyMi1cdFx0LmZpZCA9IFx1MDAyNmZpZCxcbi0tXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYz0yNDU0PXNtYjJfcXVlcnlfZGlyX2ZpcnN0KGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sXG4tLVxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMjQ5OS1cdFx0LmRpc3Bvc2l0aW9uID0gRklMRV9PUEVOLFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM6MjUwMDpcdFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCAwKSxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jLTI1MDEtXHRcdC5maWQgPSBmaWQsXG4tLVxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM9MjgzMD1zbWIyX3F1ZXJ5X2luZm9fY29tcG91bmQoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfdGNvbiAqdGNvbixcbi0tXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0yODkwLVx0XHQuZGlzcG9zaXRpb24gPSBGSUxFX09QRU4sXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYzoyODkxOlx0XHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIDApLFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMjg5Mi1cdFx0LmZpZCA9IFx1MDAyNmZpZCxcbi0tXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYz0zMDI3PXNtYjMxMV9xdWVyeWZzKGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sXG4tLVxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMzA0My1cdFx0LmRpc3Bvc2l0aW9uID0gRklMRV9PUEVOLFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM6MzA0NDpcdFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCAwKSxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jLTMwNDUtXHRcdC5maWQgPSBcdTAwMjZmaWQsXG4tLVxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM9MzIzOD1nZXRfc21iMl9hY2xfYnlfcGF0aChzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiLFxuLS1cbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jLTMyNzQtXHRcdCAqL1xuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM6MzI3NTpcdFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCAwKSB8XG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0zMjc2LVx0XHRcdFx0ICBPUEVOX1JFUEFSU0VfUE9JTlQsXG4tLVxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM9MzMwND1zZXRfc21iMl9hY2woc3RydWN0IHNtYl9udHNkICpwbm50c2QsIF9fdTMyIGFjbGxlbixcbi0tXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0zMzM5LVx0XHQuZGVzaXJlZF9hY2Nlc3MgPSBhY2Nlc3NfZmxhZ3MsXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYzozMzQwOlx0XHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIDApLFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMzM0MS1cdFx0LmRpc3Bvc2l0aW9uID0gRklMRV9PUEVOLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjMyOAoJCQkJCQkJb3V0cHV0OiAxOTAKCQkJCQkJCXRob3VnaHRzOiA0MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIENJRlMgQ3JlYXRlIE9wZXJhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBsb29rZWQgYXQgdGhpcyBwYXRjaCByZW1vdmluZyB0aGUgYGV4Y2xgIGFyZ3VtZW50IGZyb20gdGhlIGBjaWZzX2NyZWF0ZWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGJlZm9yZSB0aGlzIG1vZGlmaWNhdGlvbiwgdGhlIGBjaWZzX2NyZWF0ZWAgZnVuY3Rpb24gaXRzZWxmIGRpZG4mIzM5O3QgZXZlbiAqdXNlKiB0aGUgYGV4Y2xgIHBhcmFtZXRlciwgcmlnaHQ/IEl0IHdhcyBlZmZlY3RpdmVseSBiZWluZyBpZ25vcmVkOgpgYGBjCmludCBjaWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCgkJc3RydWN0IGRlbnRyeSAqZGlyZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQpgYGAKU28sIGFzIEkgdW5kZXJzdGFuZCBpdCwgdGhpcyBwYXRjaCBpcyBwdXJlbHkgYSByZWZhY3RvcmluZyBvcGVyYXRpb24uIEl0JiMzOTtzIGFib3V0IGNsZWFuaW5nIHVwIHRoZSBBUEksIG1ha2luZyB0aGluZ3MgbW9yZSBzdHJlYW1saW5lZC4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gbm90ZTsgaXQmIzM5O3MgKm5vdCogYSBmdW5jdGlvbmFsIGNoYW5nZS4KCkxldCBtZSBicmVhayBkb3duIG15IHVuZGVyc3RhbmRpbmcgZm9yIGNsYXJpdHk6CiogICBUaGUgcHJpbWFyeSBjaGFuZ2UgaXMgdGhlIHJlbW92YWwgb2YgdGhlIGBleGNsYCBhcmd1bWVudCBmcm9tIHRoZSBgY3JlYXRlYCBpbm9kZSBvcGVyYXRpb24uCiogICBUaGUgVkZTIGZ1bmN0aW9ucyBgdmZzX2NyZWF0ZWAgYW5kIGBsb29rdXBfb3BlbmAgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gKm5vIGxvbmdlciogcGFzcyB0aGlzIGBleGNsYCBmbGFnLgoqICAgRmlsZXN5c3RlbXMgYXJlIGJlaW5nIHVwZGF0ZWQgdG8gZHJvcCB0aGUgYGV4Y2xgIGFyZ3VtZW50IGZyb20gdGhlaXIgY29ycmVzcG9uZGluZyBpbXBsZW1lbnRhdGlvbnMgYXMgd2VsbC4KKiAgIFRoZSBmZXcgZmlsZXN5c3RlbXMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgZm9yd2FyZGluZyBhbiBgZXhjbGAgYXJndW1lbnQgaW4gY2FsbHMgdG8gaW50ZXJuYWwgZnVuY3Rpb25zIHN1Y2ggYXMgYGdmczJgLCBgbmZzYCwgYW5kIGB2Ym94c2ZgLCBub3cgY29uc2lzdGVudGx5IHBhc3MgYSB2YWx1ZSBsaWtlIGAxYCwgYHRydWVgLCBvciBgT19FWENMYCwgaW4gYWxpZ25tZW50IHdpdGggdGhlIHByZXZpb3VzIGJlaGF2aW9yLiBTaW5jZSBgdmZzX2NyZWF0ZWAgYWx3YXlzIHBhc3NlZCBgdHJ1ZWAgYW5kIHRoZSBvcmlnaW5hbCBgbG9va3VwX29wZW5gIHBhc3NlZCBgb3Blbl9mbGFnICZhbXA7IE9fRVhDTGAgYW5kIHRoZXJlIGlzIGBpbm9kZV9sb2NrYCBvbiBub24tZXhjbHVzaXZlIGNyZWF0ZXMsIHRoZSBwYXJhbWV0ZXIgd2FzIHJlZHVuZGFudC4KKiAgIE5ldHdvcmsgZmlsZXN5c3RlbXMsIHdoaWNoIHNob3VsZCB1c2UgYGF0b21pY19vcGVuYCBmb3Igbm9uLWV4Y2x1c2l2ZSBjcmVhdGVzLCBhcmUgYWxyZWFkeSBkb2luZyBzbyAoZS5nLiBgZ2ZzMmAsIGBuZnNgLCBgdmJveHNmYCwgYGNpZnNgLCBgOXBgLCBhbmQgYGZ1c2VgKS4KClRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gY2hhbmdlIGluIHRoZSBrZXJuZWwmIzM5O3MgbG9naWNhbCBiZWhhdmlvciB0aGF0IG5lY2Vzc2l0YXRlcyBmdXp6aW5nLiBJdCYjMzk7cyBhIHB1cmUgQVBJIHJlZmFjdG9yIGFuZCBJJiMzOTttIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYCBhbmQgZXhwbGFpbiB0aGF0IHRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgQVBJIHJlZmFjdG9yaW5nIG9mIHRoZSBWRlMgYGNyZWF0ZWAgaW5vZGUgb3BlcmF0aW9uLiBUaGUgcGF0Y2ggcmVtb3ZlcyBhIHJlZHVuZGFudCBhcmd1bWVudCwgYnV0IGxlYXZlcyB0aGUga2VybmVsIGxvZ2ljIHVudG91Y2hlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTg6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoaXMgcGF0Y2ggaXMgYSB0cmVlLXdpZGUgQVBJIHJlZmFjdG9yaW5nIHRoYXQgcmVtb3ZlcyB0aGUgcmVkdW5kYW50ICYjMzk7ZXhjbCYjMzk7IGFyZ3VtZW50IGZyb20gdGhlICYjMzk7Y3JlYXRlJiMzOTsgaW5vZGUgb3BlcmF0aW9uLiBWRlMgcHJldmlvdXNseSBwYXNzZWQgJiMzOTt0cnVlJiMzOTsgZnJvbSB2ZnNfY3JlYXRlKCkgYW5kICYjMzk7b3Blbl9mbGFnIFx1MDAyNiBPX0VYQ0wmIzM5OyBmcm9tIGxvb2t1cF9vcGVuKCkuIEhvd2V2ZXIsIGZvciBsb2NhbCBmaWxlc3lzdGVtcywgVkZTIGhvbGRzIHRoZSBpbm9kZV9sb2NrIGR1cmluZyBjcmVhdGUsIG1ha2luZyBjb25jdXJyZW50IGNyZWF0aW9uIGltcG9zc2libGUgYW5kIHRoZSAmIzM5O2V4Y2wmIzM5OyBhcmd1bWVudCByZWR1bmRhbnQuIEZvciBuZXR3b3JrIGZpbGVzeXN0ZW1zLCBub24tZXhjbHVzaXZlIGNyZWF0ZXMgYXJlIGhhbmRsZWQgdmlhIGF0b21pY19vcGVuKCkuIFRoZSBmaWxlc3lzdGVtcyB0aGF0IHVzZWQgdGhlIGFyZ3VtZW50IGludGVybmFsbHkgKGxpa2UgZ2ZzMiwgbmZzLCB2Ym94c2YpIG5vdyBoYXJkY29kZSAmIzM5O3RydWUmIzM5OyBvciAmIzM5O09fRVhDTCYjMzk7LCB3aGljaCBleGFjdGx5IG1hdGNoZXMgdGhlIHByZXZpb3VzIGJlaGF2aW9yIHdoZW4gY2FsbGVkIGZyb20gdmZzX2NyZWF0ZS4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIGlzIGEgdHJlZS13aWRlIEFQSSByZWZhY3RvcmluZyB0aGF0IHJlbW92ZXMgdGhlIHJlZHVuZGFudCAmIzM5O2V4Y2wmIzM5OyBhcmd1bWVudCBmcm9tIHRoZSAmIzM5O2NyZWF0ZSYjMzk7IGlub2RlIG9wZXJhdGlvbi4gVkZTIHByZXZpb3VzbHkgcGFzc2VkICYjMzk7dHJ1ZSYjMzk7IGZyb20gdmZzX2NyZWF0ZSgpIGFuZCAmIzM5O29wZW5fZmxhZyBcdTAwMjYgT19FWENMJiMzOTsgZnJvbSBsb29rdXBfb3BlbigpLiBIb3dldmVyLCBmb3IgbG9jYWwgZmlsZXN5c3RlbXMsIFZGUyBob2xkcyB0aGUgaW5vZGVfbG9jayBkdXJpbmcgY3JlYXRlLCBtYWtpbmcgY29uY3VycmVudCBjcmVhdGlvbiBpbXBvc3NpYmxlIGFuZCB0aGUgJiMzOTtleGNsJiMzOTsgYXJndW1lbnQgcmVkdW5kYW50LiBGb3IgbmV0d29yayBmaWxlc3lzdGVtcywgbm9uLWV4Y2x1c2l2ZSBjcmVhdGVzIGFyZSBoYW5kbGVkIHZpYSBhdG9taWNfb3BlbigpLiBUaGUgZmlsZXN5c3RlbXMgdGhhdCB1c2VkIHRoZSBhcmd1bWVudCBpbnRlcm5hbGx5IChsaWtlIGdmczIsIG5mcywgdmJveHNmKSBub3cgaGFyZGNvZGUgJiMzOTt0cnVlJiMzOTsgb3IgJiMzOTtPX0VYQ0wmIzM5Oywgd2hpY2ggZXhhY3RseSBtYXRjaGVzIHRoZSBwcmV2aW91cyBiZWhhdmlvciB3aGVuIGNhbGxlZCBmcm9tIHZmc19jcmVhdGUuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODozODoxNC40ODE2NTE4MjdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDAyMzcwMTE0MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBpcyBhIHRyZWUtd2lkZSBBUEkgcmVmYWN0b3JpbmcgdGhhdCByZW1vdmVzIHRoZSByZWR1bmRhbnQgJ2V4Y2wnIGFyZ3VtZW50IGZyb20gdGhlICdjcmVhdGUnIGlub2RlIG9wZXJhdGlvbi4gVkZTIHByZXZpb3VzbHkgcGFzc2VkICd0cnVlJyBmcm9tIHZmc19jcmVhdGUoKSBhbmQgJ29wZW5fZmxhZyBcXHUwMDI2IE9fRVhDTCcgZnJvbSBsb29rdXBfb3BlbigpLiBIb3dldmVyLCBmb3IgbG9jYWwgZmlsZXN5c3RlbXMsIFZGUyBob2xkcyB0aGUgaW5vZGVfbG9jayBkdXJpbmcgY3JlYXRlLCBtYWtpbmcgY29uY3VycmVudCBjcmVhdGlvbiBpbXBvc3NpYmxlIGFuZCB0aGUgJ2V4Y2wnIGFyZ3VtZW50IHJlZHVuZGFudC4gRm9yIG5ldHdvcmsgZmlsZXN5c3RlbXMsIG5vbi1leGNsdXNpdmUgY3JlYXRlcyBhcmUgaGFuZGxlZCB2aWEgYXRvbWljX29wZW4oKS4gVGhlIGZpbGVzeXN0ZW1zIHRoYXQgdXNlZCB0aGUgYXJndW1lbnQgaW50ZXJuYWxseSAobGlrZSBnZnMyLCBuZnMsIHZib3hzZikgbm93IGhhcmRjb2RlICd0cnVlJyBvciAnT19FWENMJywgd2hpY2ggZXhhY3RseSBtYXRjaGVzIHRoZSBwcmV2aW91cyBiZWhhdmlvciB3aGVuIGNhbGxlZCBmcm9tIHZmc19jcmVhdGUuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE4OjM4OjE0LjQ4MTY1OTAyN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NDAzMzIzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQwNDJkZGVjZjNjZWQyMDc3N2JlNTM4NzRkMWQ5YTAzMzdmYjQyYjlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMSAxODozODoxMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdFxcbmluZGV4IGQxM2YwYTIzYzg4MmZjLi4wMjUyMmZiZmQ5Njg2ZiAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdFxcbkBAIC0xNDAxLDMgKzE0MDEsMTEgQEAgYXMgd2l0aCBkX2Rpc3Bvc2VfaWZfdW51c2VkKCkgdGhlc2UgYXJlIG5vdCB0cml2aWFsOyB3aXRoIHRoaXMgdmFyaWFudFxcbiBvZiBBUEkgaXQncyBtb3JlIGV4cGxpY2l0LCBzaW5jZSBncmFiYmluZyAtXFx1MDAzZWRfbG9jayBpcyBjYWxsZXItc2lkZSwgYnV0XFxuIGRfZGlzcG9zZV9pZl91bnVzZWQoKSBoYWQgYWxsIHRoZSBzYW1lIGlzc3Vlcy4gIEl0J3MgYSBsb3ctbGV2ZWwgcHJpbWl0aXZlO1xcbiB1c2Ugb25seSBpZiB5b3UgaGF2ZSBubyBhbHRlcm5hdGl2ZS5cXG4rXFxuKy0tLVxcbitcXG4rKiptYW5kYXRvcnkqKlxcbitcXG4rVGhlIC5jcmVhdGUgaW5vZGVfb3BlcmF0aW9uIG5vIGxvbmdlciByZWNlaXZlcyB0aGUgJ2V4Y2wnIGFyZy4gIEl0IG11c3RcXG4rYWx3YXlzIGFzc3VtZSB0aGUgZmlsZSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LiAgSWYgdGhlIGZpbGVzeXN0ZW0gbmVlZHNcXG4rdG8gYmUgaW52b2x2ZWQgaW4gbm9uLWV4Y2x1c2l2ZSBjcmVhdGUsIGl0IHNob3VsZCBwcm92aWRlIGF0b21pY19vcGVuLlxcbmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGUuYyBiL2ZzLzlwL3Zmc19pbm9kZS5jXFxuaW5kZXggNTc4M2QwMzM2Zjk2YWMuLmU0N2I5MGU3MDgzNzY4IDEwMDY0NFxcbi0tLSBhL2ZzLzlwL3Zmc19pbm9kZS5jXFxuKysrIGIvZnMvOXAvdmZzX2lub2RlLmNcXG5AQCAtNjQ1LDcgKzY0NSw2IEBAIHY5ZnNfY3JlYXRlKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiAgKiBAZGlyOiBUaGUgcGFyZW50IGRpcmVjdG9yeVxcbiAgKiBAZGVudHJ5OiBUaGUgbmFtZSBvZiBmaWxlIHRvIGJlIGNyZWF0ZWRcXG4gICogQG1vZGU6IFRoZSBVTklYIGZpbGUgbW9kZSB0byBzZXRcXG4tICogQGV4Y2w6IFRydWUgaWYgdGhlIGZpbGUgbXVzdCBub3QgeWV0IGV4aXN0XFxuICAqXFxuICAqIG9wZW4oLi4sIE9fQ1JFQVQpIGlzIGhhbmRsZWQgaW4gdjlmc192ZnNfYXRvbWljX29wZW4oKS4gIFRoaXMgaXMgb25seSBjYWxsZWRcXG4gICogZm9yIG1rbm9kKDIpLlxcbkBAIC02NTQsNyArNjUzLDcgQEAgdjlmc19jcmVhdGUoc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcywgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcbiBzdGF0aWMgaW50XFxuIHY5ZnNfdmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXFxuK1xcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGRpcik7XFxuIFxcdHUzMiBwZXJtID0gdW5peG1vZGUycDltb2RlKHY5c2VzLCBtb2RlKTtcXG5kaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlX2RvdGwuYyBiL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmNcXG5pbmRleCBmNzM5NmQyMGNiNmNkYy4uZDE3YzNiNmVlYmIyMmQgMTAwNjQ0XFxuLS0tIGEvZnMvOXAvdmZzX2lub2RlX2RvdGwuY1xcbisrKyBiL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmNcXG5AQCAtMjEzLDEyICsyMTMsMTEgQEAgaW50IHY5ZnNfb3Blbl90b19kb3RsX2ZsYWdzKGludCBmbGFncylcXG4gICogQGRpcjogZGlyZWN0b3J5IGlub2RlIHRoYXQgaXMgYmVpbmcgY3JlYXRlZFxcbiAgKiBAZGVudHJ5OiAgZGVudHJ5IHRoYXQgaXMgYmVpbmcgZGVsZXRlZFxcbiAgKiBAb21vZGU6IGNyZWF0ZSBwZXJtaXNzaW9uc1xcbi0gKiBAZXhjbDogVHJ1ZSBpZiB0aGUgZmlsZSBtdXN0IG5vdCB5ZXQgZXhpc3RcXG4gICpcXG4gICovXFxuIHN0YXRpYyBpbnRcXG4gdjlmc192ZnNfY3JlYXRlX2RvdGwoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBvbW9kZSwgYm9vbCBleGNsKVxcbitcXHRcXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBvbW9kZSlcXG4ge1xcbiBcXHRyZXR1cm4gdjlmc192ZnNfbWtub2RfZG90bChpZG1hcCwgZGlyLCBkZW50cnksIG9tb2RlLCAwKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9mcy9hZmZzL2FmZnMuaCBiL2ZzL2FmZnMvYWZmcy5oXFxuaW5kZXggNDRhM2Y2OWQyNzVmOTYuLmQ2YjMzOTM2MzNmMmQ5IDEwMDY0NFxcbi0tLSBhL2ZzL2FmZnMvYWZmcy5oXFxuKysrIGIvZnMvYWZmcy9hZmZzLmhcXG5AQCAtMTY5LDcgKzE2OSw3IEBAIGV4dGVybiBpbnRcXHRhZmZzX2hhc2hfbmFtZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCB1OCAqbmFtZSwgdW5zaWduZWQgaW50IGxcXG4gZXh0ZXJuIHN0cnVjdCBkZW50cnkgKmFmZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVuc2lnbmVkIGludCk7XFxuIGV4dGVybiBpbnRcXHRhZmZzX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcXG4gZXh0ZXJuIGludFxcdGFmZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wpO1xcbitcXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XFxuIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICphZmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xcbiBleHRlcm4gaW50XFx0YWZmc19ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcXG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9uYW1laS5jIGIvZnMvYWZmcy9uYW1laS5jXFxuaW5kZXggYzNjNjUzMmRhNGIwZGEuLmIwMDAxMDg0NzI3YTVkIDEwMDY0NFxcbi0tLSBhL2ZzL2FmZnMvbmFtZWkuY1xcbisrKyBiL2ZzL2FmZnMvbmFtZWkuY1xcbkBAIC0yNDMsNyArMjQzLDcgQEAgYWZmc191bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gXFxuIGludFxcbiBhZmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdCAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbitcXHQgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuIHtcXG4gXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRpci1cXHUwMDNlaV9zYjtcXG4gXFx0c3RydWN0IGlub2RlXFx0Kmlub2RlO1xcbmRpZmYgLS1naXQgYS9mcy9hZnMvZGlyLmMgYi9mcy9hZnMvZGlyLmNcXG5pbmRleCA0OThiOTljY2RmMGUyNy4uNjZjYzMzMzJlZjMxOWEgMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL2Rpci5jXFxuKysrIGIvZnMvYWZzL2Rpci5jXFxuQEAgLTMyLDcgKzMyLDcgQEAgc3RhdGljIGJvb2wgYWZzX2xvb2t1cF9vbmVfZmlsbGRpcihzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqbmFtZSwgaW5cXG4gc3RhdGljIGJvb2wgYWZzX2xvb2t1cF9maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmxlbixcXG4gXFx0XFx0XFx0ICAgICAgbG9mZl90IGZwb3MsIHU2NCBpbm8sIHVuc2lnbmVkIGR0eXBlKTtcXG4gc3RhdGljIGludCBhZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbCk7XFxuK1xcdFxcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcXG4gc3RhdGljIHN0cnVjdCBkZW50cnkgKmFmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcXG4gc3RhdGljIGludCBhZnNfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XFxuQEAgLTE2MjMsNyArMTYyMyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWZzX29wZXJhdGlvbl9vcHMgYWZzX2NyZWF0ZV9vcGVyYXRpb24gPSB7XFxuICAqIGNyZWF0ZSBhIHJlZ3VsYXIgZmlsZSBvbiBhbiBBRlMgZmlsZXN5c3RlbVxcbiAgKi9cXG4gc3RhdGljIGludCBhZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcXG4rXFx0XFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuIHtcXG4gXFx0c3RydWN0IGFmc19vcGVyYXRpb24gKm9wO1xcbiBcXHRzdHJ1Y3QgYWZzX3Zub2RlICpkdm5vZGUgPSBBRlNfRlNfSShkaXIpO1xcbmRpZmYgLS1naXQgYS9mcy9iYWRfaW5vZGUuYyBiL2ZzL2JhZF9pbm9kZS5jXFxuaW5kZXggYWNmODYxM2Y1ZTM2OGUuLjQ4NmM0MGY3M2U1MWUwIDEwMDY0NFxcbi0tLSBhL2ZzL2JhZF9pbm9kZS5jXFxuKysrIGIvZnMvYmFkX2lub2RlLmNcXG5AQCAtMjksNyArMjksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiYWRfZmlsZV9vcHMgPVxcbiBcXG4gc3RhdGljIGludCBiYWRfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tXFx0XFx0XFx0ICAgIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbitcXHRcXHRcXHQgICAgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHJldHVybiAtRUlPO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2ZzL2Jmcy9kaXIuYyBiL2ZzL2Jmcy9kaXIuY1xcbmluZGV4IDViNDBhYjA5YTc5NmRlLi40YzNiNGRiMDhjZGVmYyAxMDA2NDRcXG4tLS0gYS9mcy9iZnMvZGlyLmNcXG4rKysgYi9mcy9iZnMvZGlyLmNcXG5AQCAtODMsNyArODMsNyBAQCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJmc19kaXJfb3BlcmF0aW9ucyA9IHtcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbnQgYmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXFxuK1xcdFxcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdGludCBlcnI7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2lub2RlLmMgYi9mcy9idHJmcy9pbm9kZS5jXFxuaW5kZXggMjcyNTk4ZjZhZTc3YWYuLjIyYzBhMGUyNDFlNTMzIDEwMDY0NFxcbi0tLSBhL2ZzL2J0cmZzL2lub2RlLmNcXG4rKysgYi9mcy9idHJmcy9pbm9kZS5jXFxuQEAgLTY4MzIsNyArNjgzMiw3IEBAIHN0YXRpYyBpbnQgYnRyZnNfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGJ0cmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXFxuK1xcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9jZXBoL2Rpci5jIGIvZnMvY2VwaC9kaXIuY1xcbmluZGV4IDI3Y2U5ZTU1ZTk0NzY4Li5kZWU0NTI0YzIzMzYyMyAxMDA2NDRcXG4tLS0gYS9mcy9jZXBoL2Rpci5jXFxuKysrIGIvZnMvY2VwaC9kaXIuY1xcbkBAIC05NzgsNyArOTc4LDcgQEAgc3RhdGljIGludCBjZXBoX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gfVxcbiBcXG4gc3RhdGljIGludCBjZXBoX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbitcXHRcXHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuIHtcXG4gXFx0cmV0dXJuIGNlcGhfbWtub2QoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCAwKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9mcy9jb2RhL2Rpci5jIGIvZnMvY29kYS9kaXIuY1xcbmluZGV4IDgzNWViN2ZkZmRhZDAwLi5lYTcxMGE1ZGJiYjc0YiAxMDA2NDRcXG4tLS0gYS9mcy9jb2RhL2Rpci5jXFxuKysrIGIvZnMvY29kYS9kaXIuY1xcbkBAIC0xMzQsNyArMTM0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvZGFfZGlyX2Ryb3Bfbmxpbmsoc3RydWN0IGlub2RlICpkaXIpXFxuIFxcbiAvKiBjcmVhdGlvbiByb3V0aW5lczogY3JlYXRlLCBta25vZCwgbWtkaXIsIGxpbmssIHN5bWxpbmsgKi9cXG4gc3RhdGljIGludCBjb2RhX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXFxuK1xcdFxcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdGludCBlcnJvcjtcXG4gXFx0Y29uc3QgY2hhciAqbmFtZT1kZS1cXHUwMDNlZF9uYW1lLm5hbWU7XFxuZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL2lub2RlLmMgYi9mcy9lY3J5cHRmcy9pbm9kZS5jXFxuaW5kZXggN2FhZjE5MTNmOWM2ZDMuLjUyNTI5N2M3ZWJkOGM0IDEwMDY0NFxcbi0tLSBhL2ZzL2VjcnlwdGZzL2lub2RlLmNcXG4rKysgYi9mcy9lY3J5cHRmcy9pbm9kZS5jXFxuQEAgLTI2OCw3ICsyNjgsNyBAQCBpbnQgZWNyeXB0ZnNfaW5pdGlhbGl6ZV9maWxlKHN0cnVjdCBkZW50cnkgKmVjcnlwdGZzX2RlbnRyeSxcXG4gc3RhdGljIGludFxcbiBlY3J5cHRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdFxcdHN0cnVjdCBpbm9kZSAqZGlyZWN0b3J5X2lub2RlLCBzdHJ1Y3QgZGVudHJ5ICplY3J5cHRmc19kZW50cnksXFxuLVxcdFxcdHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbitcXHRcXHR1bW9kZV90IG1vZGUpXFxuIHtcXG4gXFx0c3RydWN0IGlub2RlICplY3J5cHRmc19pbm9kZTtcXG4gXFx0aW50IHJjO1xcbmRpZmYgLS1naXQgYS9mcy9lZml2YXJmcy9pbm9kZS5jIGIvZnMvZWZpdmFyZnMvaW5vZGUuY1xcbmluZGV4IDk1ZGNhZDgzZGExMWJlLi5mMGQwMDk1NTVmYzY2MCAxMDA2NDRcXG4tLS0gYS9mcy9lZml2YXJmcy9pbm9kZS5jXFxuKysrIGIvZnMvZWZpdmFyZnMvaW5vZGUuY1xcbkBAIC03NSw3ICs3NSw3IEBAIHN0YXRpYyBib29sIGVmaXZhcmZzX3ZhbGlkX25hbWUoY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKVxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGVmaXZhcmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgZWZpdmFyX2VudHJ5ICp2YXI7XFxuZGlmZiAtLWdpdCBhL2ZzL2V4ZmF0L25hbWVpLmMgYi9mcy9leGZhdC9uYW1laS5jXFxuaW5kZXggYjdkNWU0NGFkMzhlZWUuLmNkOWM5ZWNhNThmODZlIDEwMDY0NFxcbi0tLSBhL2ZzL2V4ZmF0L25hbWVpLmNcXG4rKysgYi9mcy9leGZhdC9uYW1laS5jXFxuQEAgLTUzOCw3ICs1MzgsNyBAQCBzdGF0aWMgaW50IGV4ZmF0X2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpwYXRoLFxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGV4ZmF0X2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXFxuK1xcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkaXItXFx1MDAzZWlfc2I7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDIvbmFtZWkuYyBiL2ZzL2V4dDIvbmFtZWkuY1xcbmluZGV4IDBkMDlkMjJmZTcwODYyLi43NDJhNzhlMTY1ZDQ4ZSAxMDA2NDRcXG4tLS0gYS9mcy9leHQyL25hbWVpLmNcXG4rKysgYi9mcy9leHQyL25hbWVpLmNcXG5AQCAtOTksNyArOTksNyBAQCBzdHJ1Y3QgZGVudHJ5ICpleHQyX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGQpXFxuICAqL1xcbiBzdGF0aWMgaW50IGV4dDJfY3JlYXRlIChzdHJ1Y3QgbW50X2lkbWFwICogaWRtYXAsXFxuIFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqIGRpciwgc3RydWN0IGRlbnRyeSAqIGRlbnRyeSxcXG4tXFx0XFx0XFx0dW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXFxuK1xcdFxcdFxcdHVtb2RlX3QgbW9kZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xcbiBcXHRpbnQgZXJyO1xcbmRpZmYgLS1naXQgYS9mcy9leHQ0L25hbWVpLmMgYi9mcy9leHQ0L25hbWVpLmNcXG5pbmRleCBjYzQ5YWUwNGE2ZjY0OS4uYzNkZTY0ZDJhMmRmMjAgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9uYW1laS5jXFxuKysrIGIvZnMvZXh0NC9uYW1laS5jXFxuQEAgLTI4MTEsNyArMjgxMSw3IEBAIHN0YXRpYyBpbnQgZXh0NF9hZGRfbm9uZGlyKGhhbmRsZV90ICpoYW5kbGUsXFxuICAqIHdpdGggZF9pbnN0YW50aWF0ZSgpLlxcbiAgKi9cXG4gc3RhdGljIGludCBleHQ0X2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbitcXHRcXHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuIHtcXG4gXFx0aGFuZGxlX3QgKmhhbmRsZTtcXG4gXFx0c3RydWN0IGlub2RlICppbm9kZTtcXG5kaWZmIC0tZ2l0IGEvZnMvZjJmcy9uYW1laS5jIGIvZnMvZjJmcy9uYW1laS5jXFxuaW5kZXggY2FjMDNiOGU5MWExNWUuLjY0ODY4MWM1YmE1MDE2IDEwMDY0NFxcbi0tLSBhL2ZzL2YyZnMvbmFtZWkuY1xcbisrKyBiL2ZzL2YyZnMvbmFtZWkuY1xcbkBAIC0zNjYsNyArMzY2LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZjJmc19uZXdfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgZjJmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSA9IEYyRlNfSV9TQihkaXIpO1xcbiBcXHRzdHJ1Y3QgZjJmc19sb2NrX2NvbnRleHQgbGM7XFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9uYW1laV9tc2Rvcy5jIGIvZnMvZmF0L25hbWVpX21zZG9zLmNcXG5pbmRleCAwZmQyOTcxYWQ0YjEzMS4uOWYyYTJlOWE5Y2U4ZWEgMTAwNjQ0XFxuLS0tIGEvZnMvZmF0L25hbWVpX21zZG9zLmNcXG4rKysgYi9mcy9mYXQvbmFtZWlfbXNkb3MuY1xcbkBAIC0yNjIsNyArMjYyLDcgQEAgc3RhdGljIGludCBtc2Rvc19hZGRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsXFxuIFxcbiAvKioqKiogQ3JlYXRlIGEgZmlsZSAqL1xcbiBzdGF0aWMgaW50IG1zZG9zX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXFxuK1xcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkaXItXFx1MDAzZWlfc2I7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMO1xcbmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfdmZhdC5jIGIvZnMvZmF0L25hbWVpX3ZmYXQuY1xcbmluZGV4IGU5MDk0NDc4NzNlMzY0Li4xMzlkM2VmNGJmYWViOCAxMDA2NDRcXG4tLS0gYS9mcy9mYXQvbmFtZWlfdmZhdC5jXFxuKysrIGIvZnMvZmF0L25hbWVpX3ZmYXQuY1xcbkBAIC03NTUsNyArNzU1LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKnZmYXRfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgdmZhdF9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkaXItXFx1MDAzZWlfc2I7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZGlyLmMgYi9mcy9mdXNlL2Rpci5jXFxuaW5kZXggMGUyYTEwMzlmYTQzZWEuLjBlZmIzMTQxZjdmNzBhIDEwMDY0NFxcbi0tLSBhL2ZzL2Z1c2UvZGlyLmNcXG4rKysgYi9mcy9mdXNlL2Rpci5jXFxuQEAgLTEwODQsNyArMTA4NCw3IEBAIHN0YXRpYyBpbnQgZnVzZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgZnVzZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHQgICAgICAgc3RydWN0IGRlbnRyeSAqZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbitcXHRcXHQgICAgICAgc3RydWN0IGRlbnRyeSAqZW50cnksIHVtb2RlX3QgbW9kZSlcXG4ge1xcbiBcXHRyZXR1cm4gZnVzZV9ta25vZChpZG1hcCwgZGlyLCBlbnRyeSwgbW9kZSwgMCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbm9kZS5jIGIvZnMvZ2ZzMi9pbm9kZS5jXFxuaW5kZXggOGE3Nzc5NGJiZDRhZmMuLjllMjNjOGQ1NTk2MjNkIDEwMDY0NFxcbi0tLSBhL2ZzL2dmczIvaW5vZGUuY1xcbisrKyBiL2ZzL2dmczIvaW5vZGUuY1xcbkBAIC05NjksOSArOTY5LDkgQEAgc3RhdGljIGludCBnZnMyX2NyZWF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiAgKi9cXG4gXFxuIHN0YXRpYyBpbnQgZ2ZzMl9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuLVxcdHJldHVybiBnZnMyX2NyZWF0ZV9pbm9kZShkaXIsIGRlbnRyeSwgTlVMTCwgU19JRlJFRyB8IG1vZGUsIDAsIE5VTEwsIDAsIGV4Y2wpO1xcbitcXHRyZXR1cm4gZ2ZzMl9jcmVhdGVfaW5vZGUoZGlyLCBkZW50cnksIE5VTEwsIFNfSUZSRUcgfCBtb2RlLCAwLCBOVUxMLCAwLCAxKTtcXG4gfVxcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL2ZzL2hmcy9kaXIuYyBiL2ZzL2hmcy9kaXIuY1xcbmluZGV4IGUxMzQ1MGJiOTMzZWJkLi45M2VkYzVhODBjODEzZCAxMDA2NDRcXG4tLS0gYS9mcy9oZnMvZGlyLmNcXG4rKysgYi9mcy9oZnMvZGlyLmNcXG5AQCAtMTg0LDcgKzE4NCw3IEBAIHN0YXRpYyBpbnQgaGZzX2Rpcl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbiAgKiB0aGUgZGlyZWN0b3J5IGFuZCB0aGUgbmFtZSAoYW5kIGl0cyBsZW5ndGgpIG9mIHRoZSBuZXcgZmlsZS5cXG4gICovXFxuIHN0YXRpYyBpbnQgaGZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXFxuK1xcdFxcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuIFxcdGludCByZXM7XFxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvZGlyLmMgYi9mcy9oZnNwbHVzL2Rpci5jXFxuaW5kZXggOGJmNmM3Y2RkOWE4NjUuLmYwYWFlMmNkNmZjZmRjIDEwMDY0NFxcbi0tLSBhL2ZzL2hmc3BsdXMvZGlyLmNcXG4rKysgYi9mcy9oZnNwbHVzL2Rpci5jXFxuQEAgLTU2Miw3ICs1NjIsNyBAQCBzdGF0aWMgaW50IGhmc3BsdXNfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGhmc3BsdXNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0XFx0ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbitcXHRcXHRcXHQgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHJldHVybiBoZnNwbHVzX21rbm9kKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgMCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmMgYi9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uY1xcbmluZGV4IGFiZTg2ZDcyZDllZjc1Li43YWRkMDU2ZDQ3ZDhmMCAxMDA2NDRcXG4tLS0gYS9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uY1xcbisrKyBiL2ZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jXFxuQEAgLTU5Myw3ICs1OTMsNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpob3N0ZnNfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjaGFyICpuYW1lKVxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGhvc3Rmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcXG4rXFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuIFxcdGNoYXIgKm5hbWU7XFxuZGlmZiAtLWdpdCBhL2ZzL2hwZnMvbmFtZWkuYyBiL2ZzL2hwZnMvbmFtZWkuY1xcbmluZGV4IDM1M2UxM2E2MTVmNTY2Li44MDkxMTNkODI0OGQ1MCAxMDA2NDRcXG4tLS0gYS9mcy9ocGZzL25hbWVpLmNcXG4rKysgYi9mcy9ocGZzL25hbWVpLmNcXG5AQCAtMTI5LDcgKzEyOSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpocGZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gfVxcbiBcXG4gc3RhdGljIGludCBocGZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbitcXHRcXHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuIHtcXG4gXFx0Y29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSA9IGRlbnRyeS1cXHUwMDNlZF9uYW1lLm5hbWU7XFxuIFxcdHVuc2lnbmVkIGxlbiA9IGRlbnRyeS1cXHUwMDNlZF9uYW1lLmxlbjtcXG5kaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuY1xcbmluZGV4IDIxNmUxYTBkZDBiMjM3Li4xNmQ4NDM3YWVkNTFiYiAxMDA2NDRcXG4tLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuY1xcbisrKyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXFxuQEAgLTk3OSw3ICs5NzksNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqaHVnZXRsYmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpclxcbiBcXG4gc3RhdGljIGludCBodWdldGxiZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tXFx0XFx0XFx0ICAgIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbitcXHRcXHRcXHQgICAgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHJldHVybiBodWdldGxiZnNfbWtub2QoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRlJFRywgMCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZnMvamZmczIvZGlyLmMgYi9mcy9qZmZzMi9kaXIuY1xcbmluZGV4IGM0MDg4YzNiNGFjMDM2Li4zZDQ2OTViODM4ZWQwNiAxMDA2NDRcXG4tLS0gYS9mcy9qZmZzMi9kaXIuY1xcbisrKyBiL2ZzL2pmZnMyL2Rpci5jXFxuQEAgLTI2LDcgKzI2LDcgQEBcXG4gc3RhdGljIGludCBqZmZzMl9yZWFkZGlyIChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKik7XFxuIFxcbiBzdGF0aWMgaW50IGpmZnMyX2NyZWF0ZSAoc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKixcXG4tXFx0XFx0ICAgICAgICAgc3RydWN0IGRlbnRyeSAqLCB1bW9kZV90LCBib29sKTtcXG4rXFx0XFx0ICAgICAgICAgc3RydWN0IGRlbnRyeSAqLCB1bW9kZV90KTtcXG4gc3RhdGljIHN0cnVjdCBkZW50cnkgKmpmZnMyX2xvb2t1cCAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqLFxcbiBcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50KTtcXG4gc3RhdGljIGludCBqZmZzMl9saW5rIChzdHJ1Y3QgZGVudHJ5ICosc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqKTtcXG5AQCAtMTYzLDcgKzE2Myw3IEBAIHN0YXRpYyBpbnQgamZmczJfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXFxuIFxcbiBcXG4gc3RhdGljIGludCBqZmZzMl9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyX2ksXFxuLVxcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXFxuK1xcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBqZmZzMl9yYXdfaW5vZGUgKnJpO1xcbiBcXHRzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyAqZiwgKmRpcl9mO1xcbmRpZmYgLS1naXQgYS9mcy9qZnMvbmFtZWkuYyBiL2ZzL2pmcy9uYW1laS5jXFxuaW5kZXggNDQyZDYyNjc5MjYyMjcuLjJjZjRlMjgwZWUxODVhIDEwMDY0NFxcbi0tLSBhL2ZzL2pmcy9uYW1laS5jXFxuKysrIGIvZnMvamZzL25hbWVpLmNcXG5AQCAtNjEsNyArNjEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9lYV93bWFwKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuICAqXFxuICAqL1xcbiBzdGF0aWMgaW50IGpmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlwLFxcbi1cXHRcXHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbitcXHRcXHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcXG4ge1xcbiBcXHRpbnQgcmMgPSAwO1xcbiBcXHR0aWRfdCB0aWQ7XFx0XFx0LyogdHJhbnNhY3Rpb24gaWQgKi9cXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvbmFtZWkuYyBiL2ZzL21pbml4L25hbWVpLmNcXG5pbmRleCAyNjNlNGJhOGIxYzgyMi4uNzllNTkxYmRmZGMxMGQgMTAwNjQ0XFxuLS0tIGEvZnMvbWluaXgvbmFtZWkuY1xcbisrKyBiL2ZzL21pbml4L25hbWVpLmNcXG5AQCAtNjQsNyArNjQsNyBAQCBzdGF0aWMgaW50IG1pbml4X3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IG1pbml4X2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXFxuK1xcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHJldHVybiBtaW5peF9ta25vZChcXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIDApO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jXFxuaW5kZXggNWNjOWYwZjQ2NmI4MzAuLjhkODFmYzMwMWU5ODk3IDEwMDY0NFxcbi0tLSBhL2ZzL25hbWVpLmNcXG4rKysgYi9mcy9uYW1laS5jXFxuQEAgLTQxOTksNyArNDE5OSw3IEBAIGludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcXG4gXFx0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7XFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbi1cXHRlcnJvciA9IGRpci1cXHUwMDNlaV9vcC1cXHUwMDNlY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgdHJ1ZSk7XFxuK1xcdGVycm9yID0gZGlyLVxcdTAwM2VpX29wLVxcdTAwM2VjcmVhdGUoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcXG4gXFx0aWYgKCFlcnJvcilcXG4gXFx0XFx0ZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTtcXG4gXFx0cmV0dXJuIGVycm9yO1xcbkBAIC00NTA1LDggKzQ1MDUsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxcbiBcXHRcXHRcXHRnb3RvIG91dF9kcHV0O1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRlcnJvciA9IGRpcl9pbm9kZS1cXHUwMDNlaV9vcC1cXHUwMDNlY3JlYXRlKGlkbWFwLCBkaXJfaW5vZGUsIGRlbnRyeSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0bW9kZSwgb3Blbl9mbGFnIFxcdTAwMjYgT19FWENMKTtcXG4rXFx0XFx0ZXJyb3IgPSBkaXJfaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWNyZWF0ZShpZG1hcCwgZGlyX2lub2RlLCBkZW50cnksIG1vZGUpO1xcbiBcXHRcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdFxcdGdvdG8gb3V0X2RwdXQ7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZnMvbmZzL2Rpci5jIGIvZnMvbmZzL2Rpci5jXFxuaW5kZXggYzdiNzIzYzE4NjIwYzkuLjI4MzBkZGM0MTZjZjc1IDEwMDY0NFxcbi0tLSBhL2ZzL25mcy9kaXIuY1xcbisrKyBiL2ZzL25mcy9kaXIuY1xcbkBAIC0yNDI3LDkgKzI0MjcsOSBAQCBzdGF0aWMgaW50IG5mc19kb19jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4gfVxcbiBcXG4gaW50IG5mc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcXG4rXFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuLVxcdHJldHVybiBuZnNfZG9fY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlLCBleGNsID8gT19FWENMIDogMCk7XFxuK1xcdHJldHVybiBuZnNfZG9fY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlLCBPX0VYQ0wpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mc19jcmVhdGUpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvbmZzL2ludGVybmFsLmggYi9mcy9uZnMvaW50ZXJuYWwuaFxcbmluZGV4IGFjYWVmZjdkZGZkZjcwLi5kZDc3ZDVlODBkN2I5MyAxMDA2NDRcXG4tLS0gYS9mcy9uZnMvaW50ZXJuYWwuaFxcbisrKyBiL2ZzL25mcy9pbnRlcm5hbC5oXFxuQEAgLTM5NSw3ICszOTUsNyBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyBuZnNfYWNjZXNzX2NhY2hlX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXFxuIHN0cnVjdCBkZW50cnkgKm5mc19sb29rdXAoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwgdW5zaWduZWQgaW50KTtcXG4gdm9pZCBuZnNfZF9wcnVuZV9jYXNlX2luc2Vuc2l0aXZlX2FsaWFzZXMoc3RydWN0IGlub2RlICppbm9kZSk7XFxuIGludCBuZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKixcXG4tXFx0ICAgICAgIHVtb2RlX3QsIGJvb2wpO1xcbitcXHQgICAgICAgdW1vZGVfdCk7XFxuIHN0cnVjdCBkZW50cnkgKm5mc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosXFxuIFxcdFxcdFxcdCB1bW9kZV90KTtcXG4gaW50IG5mc19ybWRpcihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKTtcXG5kaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL25hbWVpLmMgYi9mcy9uaWxmczIvbmFtZWkuY1xcbmluZGV4IGUyZmU5NWRlM2Q3MWNhLi4wZTBhOTg1MGZmNzZkYyAxMDA2NDRcXG4tLS0gYS9mcy9uaWxmczIvbmFtZWkuY1xcbisrKyBiL2ZzL25pbGZzMi9uYW1laS5jXFxuQEAgLTg2LDcgKzg2LDcgQEAgbmlsZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVuc2lnbmVkIGludCBmbGFncylcXG4gICogd2l0aCBkX2luc3RhbnRpYXRlKCkuXFxuICAqL1xcbiBzdGF0aWMgaW50IG5pbGZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXFxuK1xcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuIFxcdHN0cnVjdCBuaWxmc190cmFuc2FjdGlvbl9pbmZvIHRpO1xcbmRpZmYgLS1naXQgYS9mcy9udGZzL25hbWVpLmMgYi9mcy9udGZzL25hbWVpLmNcXG5pbmRleCBhMTk2MjZhMTM1YmQ3Zi4uYjRkYzZkYTIyNjU5NmIgMTAwNjQ0XFxuLS0tIGEvZnMvbnRmcy9uYW1laS5jXFxuKysrIGIvZnMvbnRmcy9uYW1laS5jXFxuQEAgLTczNiw3ICs3MzYsNyBAQCBzdGF0aWMgc3RydWN0IG50ZnNfaW5vZGUgKl9fbnRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZFxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IG50ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcXG4rXFx0XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuIHtcXG4gXFx0c3RydWN0IG50ZnNfdm9sdW1lICp2b2wgPSBOVEZTX1NCKGRpci1cXHUwMDNlaV9zYik7XFxuIFxcdHN0cnVjdCBudGZzX2lub2RlICpuaTtcXG5kaWZmIC0tZ2l0IGEvZnMvbnRmczMvbmFtZWkuYyBiL2ZzL250ZnMzL25hbWVpLmNcXG5pbmRleCBjNTlkZTVmMmZhOTc3MS4uNmQwMzJiMjJjOTdkYWYgMTAwNjQ0XFxuLS0tIGEvZnMvbnRmczMvbmFtZWkuY1xcbisrKyBiL2ZzL250ZnMzL25hbWVpLmNcXG5AQCAtMTA1LDcgKzEwNSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpudGZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiAgKiBudGZzX2NyZWF0ZSAtIGlub2RlX29wZXJhdGlvbnM6OmNyZWF0ZVxcbiAgKi9cXG4gc3RhdGljIGludCBudGZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbitcXHRcXHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuIHtcXG4gXFx0cmV0dXJuIG50ZnNfY3JlYXRlX2lub2RlKGlkbWFwLCBkaXIsIGRlbnRyeSwgTlVMTCwgU19JRlJFRyB8IG1vZGUsIDAsXFxuIFxcdFxcdFxcdFxcdCBOVUxMLCAwLCBOVUxMKTtcXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtZnMvZGxtZnMuYyBiL2ZzL29jZnMyL2RsbWZzL2RsbWZzLmNcXG5pbmRleCA1ODIxZTMzZGY3OGZkOS4uZjAxMjRmODFkZjI5YjAgMTAwNjQ0XFxuLS0tIGEvZnMvb2NmczIvZGxtZnMvZGxtZnMuY1xcbisrKyBiL2ZzL29jZnMyL2RsbWZzL2RsbWZzLmNcXG5AQCAtNDUzLDggKzQ1Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkbG1mc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICogaWRtYXAsXFxuIHN0YXRpYyBpbnQgZGxtZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi1cXHRcXHRcXHR1bW9kZV90IG1vZGUsXFxuLVxcdFxcdFxcdGJvb2wgZXhjbClcXG4rXFx0XFx0XFx0dW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdGludCBzdGF0dXMgPSAwO1xcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9uYW1laS5jIGIvZnMvb2NmczIvbmFtZWkuY1xcbmluZGV4IDEyNzc2NjZjNzdjZDJkLi4xMmExZmVmM2VlNzRlNiAxMDA2NDRcXG4tLS0gYS9mcy9vY2ZzMi9uYW1laS5jXFxuKysrIGIvZnMvb2NmczIvbmFtZWkuY1xcbkBAIC02NjcsOCArNjY3LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKm9jZnMyX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBzdGF0aWMgaW50IG9jZnMyX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0XFx0XFx0c3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tXFx0XFx0XFx0dW1vZGVfdCBtb2RlLFxcbi1cXHRcXHRcXHRib29sIGV4Y2wpXFxuK1xcdFxcdFxcdHVtb2RlX3QgbW9kZSlcXG4ge1xcbiBcXHRpbnQgcmV0O1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvb21mcy9kaXIuYyBiL2ZzL29tZnMvZGlyLmNcXG5pbmRleCAyZWQ1NDFmY2NmMzMxZC4uYTA5YTk4ZjdlMzBiYzYgMTAwNjQ0XFxuLS0tIGEvZnMvb21mcy9kaXIuY1xcbisrKyBiL2ZzL29tZnMvZGlyLmNcXG5AQCAtMjg2LDcgKzI4Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvbWZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gfVxcbiBcXG4gc3RhdGljIGludCBvbWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbitcXHRcXHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuIHtcXG4gXFx0cmV0dXJuIG9tZnNfYWRkX25vZGUoZGlyLCBkZW50cnksIG1vZGUgfCBTX0lGUkVHKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9mcy9vcmFuZ2Vmcy9uYW1laS5jIGIvZnMvb3JhbmdlZnMvbmFtZWkuY1xcbmluZGV4IDc1ZTY1ZTcyYzJkNjQ2Li45MWY5N2RiMTg5NzFiZiAxMDA2NDRcXG4tLS0gYS9mcy9vcmFuZ2Vmcy9uYW1laS5jXFxuKysrIGIvZnMvb3JhbmdlZnMvbmFtZWkuY1xcbkBAIC0xOCw4ICsxOCw3IEBAXFxuIHN0YXRpYyBpbnQgb3JhbmdlZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi1cXHRcXHRcXHR1bW9kZV90IG1vZGUsXFxuLVxcdFxcdFxcdGJvb2wgZXhjbHVzaXZlKVxcbitcXHRcXHRcXHR1bW9kZV90IG1vZGUpXFxuIHtcXG4gXFx0c3RydWN0IG9yYW5nZWZzX2lub2RlX3MgKnBhcmVudCA9IE9SQU5HRUZTX0koZGlyKTtcXG4gXFx0c3RydWN0IG9yYW5nZWZzX2tlcm5lbF9vcF9zICpuZXdfb3A7XFxuZGlmZiAtLWdpdCBhL2ZzL292ZXJsYXlmcy9kaXIuYyBiL2ZzL292ZXJsYXlmcy9kaXIuY1xcbmluZGV4IGEwMzM3NDNkYmY1MTU5Li44OGJjZjk4ZDI4N2QxZSAxMDA2NDRcXG4tLS0gYS9mcy9vdmVybGF5ZnMvZGlyLmNcXG4rKysgYi9mcy9vdmVybGF5ZnMvZGlyLmNcXG5AQCAtNzMyLDcgKzczMiw3IEBAIHN0YXRpYyBpbnQgb3ZsX2NyZWF0ZV9vYmplY3Qoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSwgZGV2X3QgcmRldixcXG4gfVxcbiBcXG4gc3RhdGljIGludCBvdmxfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcXG4rXFx0XFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuIHtcXG4gXFx0cmV0dXJuIG92bF9jcmVhdGVfb2JqZWN0KGRlbnRyeSwgKG1vZGUgXFx1MDAyNiAwNzc3NykgfCBTX0lGUkVHLCAwLCBOVUxMKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9mcy9yYW1mcy9pbm9kZS5jIGIvZnMvcmFtZnMvaW5vZGUuY1xcbmluZGV4IDM5ODc2MzllZDEzMmM2Li4wZjUyYmEyMmFhYzA0YyAxMDA2NDRcXG4tLS0gYS9mcy9yYW1mcy9pbm9kZS5jXFxuKysrIGIvZnMvcmFtZnMvaW5vZGUuY1xcbkBAIC0xMjgsNyArMTI4LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKnJhbWZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gfVxcbiBcXG4gc3RhdGljIGludCByYW1mc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbitcXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcXG4ge1xcbiBcXHRyZXR1cm4gcmFtZnNfbWtub2QoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRlJFRywgMCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZnMvc21iL2NsaWVudC9jaWZzZnMuaCBiL2ZzL3NtYi9jbGllbnQvY2lmc2ZzLmhcXG5pbmRleCA5MDFlMTM0MGM5ODZmYi4uYmNmMmZmODdkYTJkNWMgMTAwNjQ0XFxuLS0tIGEvZnMvc21iL2NsaWVudC9jaWZzZnMuaFxcbisrKyBiL2ZzL3NtYi9jbGllbnQvY2lmc2ZzLmhcXG5AQCAtNTQsNyArNTQsNyBAQCB2b2lkIGNpZnNfc2JfZGVhY3RpdmUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBjaWZzX2Rpcl9pbm9kZV9vcHM7XFxuIHN0cnVjdCBpbm9kZSAqY2lmc19yb290X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XFxuIGludCBjaWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbCk7XFxuK1xcdFxcdHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LCB1bW9kZV90IG1vZGUpO1xcbiBpbnQgY2lmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGlyZW50cnksXFxuIFxcdFxcdCAgICAgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBvZmxhZ3MsIHVtb2RlX3QgbW9kZSk7XFxuIGludCBjaWZzX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbmRpZmYgLS1naXQgYS9mcy9zbWIvY2xpZW50L2Rpci5jIGIvZnMvc21iL2NsaWVudC9kaXIuY1xcbmluZGV4IDg4YTRhMTc4N2ZmMDQ3Li43ODAzYmQ1YmQwMWY4MCAxMDA2NDRcXG4tLS0gYS9mcy9zbWIvY2xpZW50L2Rpci5jXFxuKysrIGIvZnMvc21iL2NsaWVudC9kaXIuY1xcbkBAIC02NDUsNyArNjQ1LDcgQEAgaW50IGNpZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LFxcbiAgKiBoYXNoZWQtcG9zaXRpdmUgYnkgY2FsbGluZyBkX2luc3RhbnRpYXRlKCkuXFxuICAqL1xcbiBpbnQgY2lmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXFxuK1xcdFxcdHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LCB1bW9kZV90IG1vZGUpXFxuIHtcXG4gXFx0c3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiA9IENJRlNfU0IoZGlyKTtcXG4gXFx0aW50IHJjO1xcbmRpZmYgLS1naXQgYS9mcy91Ymlmcy9kaXIuYyBiL2ZzL3ViaWZzL2Rpci5jXFxuaW5kZXggODZkNDFlMDc3ZTRkNjIuLmZkOGRmMTA1NDdiZjQyIDEwMDY0NFxcbi0tLSBhL2ZzL3ViaWZzL2Rpci5jXFxuKysrIGIvZnMvdWJpZnMvZGlyLmNcXG5AQCAtMzAzLDcgKzMwMyw3IEBAIHN0YXRpYyBpbnQgdWJpZnNfcHJlcGFyZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4gfVxcbiBcXG4gc3RhdGljIGludCB1Ymlmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbitcXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xcbiBcXHRzdHJ1Y3QgdWJpZnNfaW5mbyAqYyA9IGRpci1cXHUwMDNlaV9zYi1cXHUwMDNlc19mc19pbmZvO1xcbmRpZmYgLS1naXQgYS9mcy91ZGYvbmFtZWkuYyBiL2ZzL3VkZi9uYW1laS5jXFxuaW5kZXggOWEzYjdjZWYzNjA2NDguLmZkOWI2ZjE2ZjYxNDYyIDEwMDY0NFxcbi0tLSBhL2ZzL3VkZi9uYW1laS5jXFxuKysrIGIvZnMvdWRmL25hbWVpLmNcXG5AQCAtMzcxLDcgKzM3MSw3IEBAIHN0YXRpYyBpbnQgdWRmX2FkZF9ub25kaXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHVkZl9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbitcXHRcXHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gdWRmX25ld19pbm9kZShkaXIsIG1vZGUpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvdWZzL25hbWVpLmMgYi9mcy91ZnMvbmFtZWkuY1xcbmluZGV4IDViM2M4NWM5MzI0Mjk4Li41MDEyZTA1NjIwMGFjYSAxMDA2NDRcXG4tLS0gYS9mcy91ZnMvbmFtZWkuY1xcbisrKyBiL2ZzL3Vmcy9uYW1laS5jXFxuQEAgLTcwLDggKzcwLDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKnVmc19sb29rdXAoc3RydWN0IGlub2RlICogZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVuc2lcXG4gICogd2l0aCBkX2luc3RhbnRpYXRlKCkuIFxcbiAgKi9cXG4gc3RhdGljIGludCB1ZnNfY3JlYXRlIChzdHJ1Y3QgbW50X2lkbWFwICogaWRtYXAsXFxuLVxcdFxcdHN0cnVjdCBpbm9kZSAqIGRpciwgc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwgdW1vZGVfdCBtb2RlLFxcbi1cXHRcXHRib29sIGV4Y2wpXFxuK1xcdFxcdHN0cnVjdCBpbm9kZSAqIGRpciwgc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy92Ym94c2YvZGlyLmMgYi9mcy92Ym94c2YvZGlyLmNcXG5pbmRleCBjNWJkMzI3MWFhOTYxNi4uMGI5ZWFiMTU3NDMyZGYgMTAwNjQ0XFxuLS0tIGEvZnMvdmJveHNmL2Rpci5jXFxuKysrIGIvZnMvdmJveHNmL2Rpci5jXFxuQEAgLTI5OCw5ICsyOTgsOSBAQCBzdGF0aWMgaW50IHZib3hzZl9kaXJfY3JlYXRlKHN0cnVjdCBpbm9kZSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIFxcbiBzdGF0aWMgaW50IHZib3hzZl9kaXJfbWtmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBpbm9kZSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLVxcdFxcdFxcdCAgICAgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXFxuK1xcdFxcdFxcdCAgICAgdW1vZGVfdCBtb2RlKVxcbiB7XFxuLVxcdHJldHVybiB2Ym94c2ZfZGlyX2NyZWF0ZShwYXJlbnQsIGRlbnRyeSwgbW9kZSwgZmFsc2UsIGV4Y2wsIE5VTEwpO1xcbitcXHRyZXR1cm4gdmJveHNmX2Rpcl9jcmVhdGUocGFyZW50LCBkZW50cnksIG1vZGUsIGZhbHNlLCB0cnVlLCBOVUxMKTtcXG4gfVxcbiBcXG4gc3RhdGljIHN0cnVjdCBkZW50cnkgKnZib3hzZl9kaXJfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9wcy5jIGIvZnMveGZzL3hmc19pb3BzLmNcXG5pbmRleCA2MzM5ZjQ5NTZlY2IzOS4uZTQ4ZjllNWExYjhhMTggMTAwNjQ0XFxuLS0tIGEvZnMveGZzL3hmc19pb3BzLmNcXG4rKysgYi9mcy94ZnMveGZzX2lvcHMuY1xcbkBAIC0yOTMsOCArMjkzLDcgQEAgeGZzX3ZuX2NyZWF0ZShcXG4gXFx0c3RydWN0IG1udF9pZG1hcFxcdCppZG1hcCxcXG4gXFx0c3RydWN0IGlub2RlXFx0XFx0KmRpcixcXG4gXFx0c3RydWN0IGRlbnRyeVxcdFxcdCpkZW50cnksXFxuLVxcdHVtb2RlX3RcXHRcXHRcXHRtb2RlLFxcbi1cXHRib29sXFx0XFx0XFx0ZmxhZ3MpXFxuK1xcdHVtb2RlX3RcXHRcXHRcXHRtb2RlKVxcbiB7XFxuIFxcdHJldHVybiB4ZnNfZ2VuZXJpY19jcmVhdGUoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCAwLCBOVUxMKTtcXG4gfVxcbkBAIC0zMzgsNyArMzM3LDcgQEAgU1RBVElDIHN0cnVjdCBkZW50cnkgKlxcbiB4ZnNfdm5fY2lfbG9va3VwKFxcbiBcXHRzdHJ1Y3QgaW5vZGVcXHQqZGlyLFxcbiBcXHRzdHJ1Y3QgZGVudHJ5XFx0KmRlbnRyeSxcXG4tXFx0dW5zaWduZWQgaW50IGZsYWdzKVxcbitcXHR1bnNpZ25lZCBpbnRcXHRmbGFncylcXG4ge1xcbiBcXHRzdHJ1Y3QgeGZzX2lub2RlICppcDtcXG4gXFx0c3RydWN0IHhmc19uYW1lXFx0eG5hbWU7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaFxcbmluZGV4IGQxMDg5N2IzYTFlMzUwLi4xYjdjNDBiMmZhNmRlMyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmhcXG5AQCAtMjAwMiw3ICsyMDAyLDcgQEAgc3RydWN0IGlub2RlX29wZXJhdGlvbnMge1xcbiBcXHRpbnQgKCpyZWFkbGluaykgKHN0cnVjdCBkZW50cnkgKiwgY2hhciBfX3VzZXIgKixpbnQpO1xcbiBcXG4gXFx0aW50ICgqY3JlYXRlKSAoc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICosXFxuLVxcdFxcdCAgICAgICB1bW9kZV90LCBib29sKTtcXG4rXFx0XFx0ICAgICAgIHVtb2RlX3QpO1xcbiBcXHRpbnQgKCpsaW5rKSAoc3RydWN0IGRlbnRyeSAqLHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKik7XFxuIFxcdGludCAoKnVubGluaykgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKik7XFxuIFxcdGludCAoKnN5bWxpbmspIChzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKixcXG5kaWZmIC0tZ2l0IGEvaXBjL21xdWV1ZS5jIGIvaXBjL21xdWV1ZS5jXFxuaW5kZXggNDc5OGIzNzU5NzJiZjQuLjJkZGRiOTdmMmY4YTU1IDEwMDY0NFxcbi0tLSBhL2lwYy9tcXVldWUuY1xcbisrKyBiL2lwYy9tcXVldWUuY1xcbkBAIC02MDgsNyArNjA4LDcgQEAgc3RhdGljIGludCBtcXVldWVfY3JlYXRlX2F0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIHZvaWQgKmFyZylcXG4gfVxcbiBcXG4gc3RhdGljIGludCBtcXVldWVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXFxuK1xcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcXG4ge1xcbiBcXHRyZXR1cm4gbXF1ZXVlX2NyZWF0ZV9hdHRyKGRlbnRyeSwgbW9kZSwgTlVMTCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmNcXG5pbmRleCBiNTFmODNjOTcwYmIzNy4uNTc4OWEwZjVhMzQ2M2IgMTAwNjQ0XFxuLS0tIGEvbW0vc2htZW0uY1xcbisrKyBiL21tL3NobWVtLmNcXG5AQCAtMzg2NCw3ICszODY0LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKnNobWVtX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gfVxcbiBcXG4gc3RhdGljIGludCBzaG1lbV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbitcXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcXG4ge1xcbiBcXHRyZXR1cm4gc2htZW1fbWtub2QoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRlJFRywgMCk7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTg6Mzg6MTUuNTQ2NzU2MzE1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzkxNzE4OTY3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBpcyBhIHRyZWUtd2lkZSBBUEkgcmVmYWN0b3JpbmcgdGhhdCByZW1vdmVzIHRoZSByZWR1bmRhbnQgJ2V4Y2wnIGFyZ3VtZW50IGZyb20gdGhlICdjcmVhdGUnIGlub2RlIG9wZXJhdGlvbi4gVkZTIHByZXZpb3VzbHkgcGFzc2VkICd0cnVlJyBmcm9tIHZmc19jcmVhdGUoKSBhbmQgJ29wZW5fZmxhZyBcXHUwMDI2IE9fRVhDTCcgZnJvbSBsb29rdXBfb3BlbigpLiBIb3dldmVyLCBmb3IgbG9jYWwgZmlsZXN5c3RlbXMsIFZGUyBob2xkcyB0aGUgaW5vZGVfbG9jayBkdXJpbmcgY3JlYXRlLCBtYWtpbmcgY29uY3VycmVudCBjcmVhdGlvbiBpbXBvc3NpYmxlIGFuZCB0aGUgJ2V4Y2wnIGFyZ3VtZW50IHJlZHVuZGFudC4gRm9yIG5ldHdvcmsgZmlsZXN5c3RlbXMsIG5vbi1leGNsdXNpdmUgY3JlYXRlcyBhcmUgaGFuZGxlZCB2aWEgYXRvbWljX29wZW4oKS4gVGhlIGZpbGVzeXN0ZW1zIHRoYXQgdXNlZCB0aGUgYXJndW1lbnQgaW50ZXJuYWxseSAobGlrZSBnZnMyLCBuZnMsIHZib3hzZikgbm93IGhhcmRjb2RlICd0cnVlJyBvciAnT19FWENMJywgd2hpY2ggZXhhY3RseSBtYXRjaGVzIHRoZSBwcmV2aW91cyBiZWhhdmlvciB3aGVuIGNhbGxlZCBmcm9tIHZmc19jcmVhdGUuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDA0MmRkZWNmM2NlZDIwNzc3YmU1Mzg3NGQxZDlhMDMzN2ZiNDJiOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMTg6Mzg6MTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdFxuaW5kZXggZDEzZjBhMjNjODgyZmMuLjAyNTIyZmJmZDk2ODZmIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdFxuQEAgLTE0MDEsMyArMTQwMSwxMSBAQCBhcyB3aXRoIGRfZGlzcG9zZV9pZl91bnVzZWQoKSB0aGVzZSBhcmUgbm90IHRyaXZpYWw7IHdpdGggdGhpcyB2YXJpYW50XG4gb2YgQVBJIGl0J3MgbW9yZSBleHBsaWNpdCwgc2luY2UgZ3JhYmJpbmcgLVx1MDAzZWRfbG9jayBpcyBjYWxsZXItc2lkZSwgYnV0XG4gZF9kaXNwb3NlX2lmX3VudXNlZCgpIGhhZCBhbGwgdGhlIHNhbWUgaXNzdWVzLiAgSXQncyBhIGxvdy1sZXZlbCBwcmltaXRpdmU7XG4gdXNlIG9ubHkgaWYgeW91IGhhdmUgbm8gYWx0ZXJuYXRpdmUuXG4rXG4rLS0tXG4rXG4rKiptYW5kYXRvcnkqKlxuK1xuK1RoZSAuY3JlYXRlIGlub2RlX29wZXJhdGlvbiBubyBsb25nZXIgcmVjZWl2ZXMgdGhlICdleGNsJyBhcmcuICBJdCBtdXN0XG4rYWx3YXlzIGFzc3VtZSB0aGUgZmlsZSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LiAgSWYgdGhlIGZpbGVzeXN0ZW0gbmVlZHNcbit0byBiZSBpbnZvbHZlZCBpbiBub24tZXhjbHVzaXZlIGNyZWF0ZSwgaXQgc2hvdWxkIHByb3ZpZGUgYXRvbWljX29wZW4uXG5kaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlLmMgYi9mcy85cC92ZnNfaW5vZGUuY1xuaW5kZXggNTc4M2QwMzM2Zjk2YWMuLmU0N2I5MGU3MDgzNzY4IDEwMDY0NFxuLS0tIGEvZnMvOXAvdmZzX2lub2RlLmNcbisrKyBiL2ZzLzlwL3Zmc19pbm9kZS5jXG5AQCAtNjQ1LDcgKzY0NSw2IEBAIHY5ZnNfY3JlYXRlKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMsIHN0cnVjdCBpbm9kZSAqZGlyLFxuICAqIEBkaXI6IFRoZSBwYXJlbnQgZGlyZWN0b3J5XG4gICogQGRlbnRyeTogVGhlIG5hbWUgb2YgZmlsZSB0byBiZSBjcmVhdGVkXG4gICogQG1vZGU6IFRoZSBVTklYIGZpbGUgbW9kZSB0byBzZXRcbi0gKiBAZXhjbDogVHJ1ZSBpZiB0aGUgZmlsZSBtdXN0IG5vdCB5ZXQgZXhpc3RcbiAgKlxuICAqIG9wZW4oLi4sIE9fQ1JFQVQpIGlzIGhhbmRsZWQgaW4gdjlmc192ZnNfYXRvbWljX29wZW4oKS4gIFRoaXMgaXMgb25seSBjYWxsZWRcbiAgKiBmb3IgbWtub2QoMikuXG5AQCAtNjU0LDcgKzY1Myw3IEBAIHY5ZnNfY3JlYXRlKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFxuIHN0YXRpYyBpbnRcbiB2OWZzX3Zmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuK1x0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzID0gdjlmc19pbm9kZTJ2OXNlcyhkaXIpO1xuIFx0dTMyIHBlcm0gPSB1bml4bW9kZTJwOW1vZGUodjlzZXMsIG1vZGUpO1xuZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmMgYi9mcy85cC92ZnNfaW5vZGVfZG90bC5jXG5pbmRleCBmNzM5NmQyMGNiNmNkYy4uZDE3YzNiNmVlYmIyMmQgMTAwNjQ0XG4tLS0gYS9mcy85cC92ZnNfaW5vZGVfZG90bC5jXG4rKysgYi9mcy85cC92ZnNfaW5vZGVfZG90bC5jXG5AQCAtMjEzLDEyICsyMTMsMTEgQEAgaW50IHY5ZnNfb3Blbl90b19kb3RsX2ZsYWdzKGludCBmbGFncylcbiAgKiBAZGlyOiBkaXJlY3RvcnkgaW5vZGUgdGhhdCBpcyBiZWluZyBjcmVhdGVkXG4gICogQGRlbnRyeTogIGRlbnRyeSB0aGF0IGlzIGJlaW5nIGRlbGV0ZWRcbiAgKiBAb21vZGU6IGNyZWF0ZSBwZXJtaXNzaW9uc1xuLSAqIEBleGNsOiBUcnVlIGlmIHRoZSBmaWxlIG11c3Qgbm90IHlldCBleGlzdFxuICAqXG4gICovXG4gc3RhdGljIGludFxuIHY5ZnNfdmZzX2NyZWF0ZV9kb3RsKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3Qgb21vZGUsIGJvb2wgZXhjbClcbitcdFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3Qgb21vZGUpXG4ge1xuIFx0cmV0dXJuIHY5ZnNfdmZzX21rbm9kX2RvdGwoaWRtYXAsIGRpciwgZGVudHJ5LCBvbW9kZSwgMCk7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvYWZmcy5oIGIvZnMvYWZmcy9hZmZzLmhcbmluZGV4IDQ0YTNmNjlkMjc1Zjk2Li5kNmIzMzkzNjMzZjJkOSAxMDA2NDRcbi0tLSBhL2ZzL2FmZnMvYWZmcy5oXG4rKysgYi9mcy9hZmZzL2FmZnMuaFxuQEAgLTE2OSw3ICsxNjksNyBAQCBleHRlcm4gaW50XHRhZmZzX2hhc2hfbmFtZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCB1OCAqbmFtZSwgdW5zaWduZWQgaW50IGxcbiBleHRlcm4gc3RydWN0IGRlbnRyeSAqYWZmc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW5zaWduZWQgaW50KTtcbiBleHRlcm4gaW50XHRhZmZzX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbiBleHRlcm4gaW50XHRhZmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wpO1xuK1x0XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbiBleHRlcm4gc3RydWN0IGRlbnRyeSAqYWZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xuIGV4dGVybiBpbnRcdGFmZnNfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9uYW1laS5jIGIvZnMvYWZmcy9uYW1laS5jXG5pbmRleCBjM2M2NTMyZGE0YjBkYS4uYjAwMDEwODQ3MjdhNWQgMTAwNjQ0XG4tLS0gYS9mcy9hZmZzL25hbWVpLmNcbisrKyBiL2ZzL2FmZnMvbmFtZWkuY1xuQEAgLTI0Myw3ICsyNDMsNyBAQCBhZmZzX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFxuIGludFxuIGFmZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdCAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuK1x0ICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkaXItXHUwMDNlaV9zYjtcbiBcdHN0cnVjdCBpbm9kZVx0Kmlub2RlO1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9kaXIuYyBiL2ZzL2Fmcy9kaXIuY1xuaW5kZXggNDk4Yjk5Y2NkZjBlMjcuLjY2Y2MzMzMyZWYzMTlhIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2Rpci5jXG4rKysgYi9mcy9hZnMvZGlyLmNcbkBAIC0zMiw3ICszMiw3IEBAIHN0YXRpYyBib29sIGFmc19sb29rdXBfb25lX2ZpbGxkaXIoc3RydWN0IGRpcl9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsIGluXG4gc3RhdGljIGJvb2wgYWZzX2xvb2t1cF9maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmxlbixcbiBcdFx0XHQgICAgICBsb2ZmX3QgZnBvcywgdTY0IGlubywgdW5zaWduZWQgZHR5cGUpO1xuIHN0YXRpYyBpbnQgYWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpO1xuK1x0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XG4gc3RhdGljIHN0cnVjdCBkZW50cnkgKmFmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XG4gc3RhdGljIGludCBhZnNfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG5AQCAtMTYyMyw3ICsxNjIzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhZnNfb3BlcmF0aW9uX29wcyBhZnNfY3JlYXRlX29wZXJhdGlvbiA9IHtcbiAgKiBjcmVhdGUgYSByZWd1bGFyIGZpbGUgb24gYW4gQUZTIGZpbGVzeXN0ZW1cbiAgKi9cbiBzdGF0aWMgaW50IGFmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuK1x0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3A7XG4gXHRzdHJ1Y3QgYWZzX3Zub2RlICpkdm5vZGUgPSBBRlNfRlNfSShkaXIpO1xuZGlmZiAtLWdpdCBhL2ZzL2JhZF9pbm9kZS5jIGIvZnMvYmFkX2lub2RlLmNcbmluZGV4IGFjZjg2MTNmNWUzNjhlLi40ODZjNDBmNzNlNTFlMCAxMDA2NDRcbi0tLSBhL2ZzL2JhZF9pbm9kZS5jXG4rKysgYi9mcy9iYWRfaW5vZGUuY1xuQEAgLTI5LDcgKzI5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmFkX2ZpbGVfb3BzID1cbiBcbiBzdGF0aWMgaW50IGJhZF9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0ICAgIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuK1x0XHRcdCAgICB1bW9kZV90IG1vZGUpXG4ge1xuIFx0cmV0dXJuIC1FSU87XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL2Jmcy9kaXIuYyBiL2ZzL2Jmcy9kaXIuY1xuaW5kZXggNWI0MGFiMDlhNzk2ZGUuLjRjM2I0ZGIwOGNkZWZjIDEwMDY0NFxuLS0tIGEvZnMvYmZzL2Rpci5jXG4rKysgYi9mcy9iZnMvZGlyLmNcbkBAIC04Myw3ICs4Myw3IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmZzX2Rpcl9vcGVyYXRpb25zID0ge1xuIH07XG4gXG4gc3RhdGljIGludCBiZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbitcdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0aW50IGVycjtcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG5kaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW5vZGUuYyBiL2ZzL2J0cmZzL2lub2RlLmNcbmluZGV4IDI3MjU5OGY2YWU3N2FmLi4yMmMwYTBlMjQxZTUzMyAxMDA2NDRcbi0tLSBhL2ZzL2J0cmZzL2lub2RlLmNcbisrKyBiL2ZzL2J0cmZzL2lub2RlLmNcbkBAIC02ODMyLDcgKzY4MzIsNyBAQCBzdGF0aWMgaW50IGJ0cmZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiB9XG4gXG4gc3RhdGljIGludCBidHJmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG4rXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbiBcbmRpZmYgLS1naXQgYS9mcy9jZXBoL2Rpci5jIGIvZnMvY2VwaC9kaXIuY1xuaW5kZXggMjdjZTllNTVlOTQ3NjguLmRlZTQ1MjRjMjMzNjIzIDEwMDY0NFxuLS0tIGEvZnMvY2VwaC9kaXIuY1xuKysrIGIvZnMvY2VwaC9kaXIuY1xuQEAgLTk3OCw3ICs5NzgsNyBAQCBzdGF0aWMgaW50IGNlcGhfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIH1cbiBcbiBzdGF0aWMgaW50IGNlcGhfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG4rXHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRyZXR1cm4gY2VwaF9ta25vZChpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIDApO1xuIH1cbmRpZmYgLS1naXQgYS9mcy9jb2RhL2Rpci5jIGIvZnMvY29kYS9kaXIuY1xuaW5kZXggODM1ZWI3ZmRmZGFkMDAuLmVhNzEwYTVkYmJiNzRiIDEwMDY0NFxuLS0tIGEvZnMvY29kYS9kaXIuY1xuKysrIGIvZnMvY29kYS9kaXIuY1xuQEAgLTEzNCw3ICsxMzQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY29kYV9kaXJfZHJvcF9ubGluayhzdHJ1Y3QgaW5vZGUgKmRpcilcbiBcbiAvKiBjcmVhdGlvbiByb3V0aW5lczogY3JlYXRlLCBta25vZCwgbWtkaXIsIGxpbmssIHN5bWxpbmsgKi9cbiBzdGF0aWMgaW50IGNvZGFfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlLCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbitcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlLCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0aW50IGVycm9yO1xuIFx0Y29uc3QgY2hhciAqbmFtZT1kZS1cdTAwM2VkX25hbWUubmFtZTtcbmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9pbm9kZS5jIGIvZnMvZWNyeXB0ZnMvaW5vZGUuY1xuaW5kZXggN2FhZjE5MTNmOWM2ZDMuLjUyNTI5N2M3ZWJkOGM0IDEwMDY0NFxuLS0tIGEvZnMvZWNyeXB0ZnMvaW5vZGUuY1xuKysrIGIvZnMvZWNyeXB0ZnMvaW5vZGUuY1xuQEAgLTI2OCw3ICsyNjgsNyBAQCBpbnQgZWNyeXB0ZnNfaW5pdGlhbGl6ZV9maWxlKHN0cnVjdCBkZW50cnkgKmVjcnlwdGZzX2RlbnRyeSxcbiBzdGF0aWMgaW50XG4gZWNyeXB0ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRzdHJ1Y3QgaW5vZGUgKmRpcmVjdG9yeV9pbm9kZSwgc3RydWN0IGRlbnRyeSAqZWNyeXB0ZnNfZGVudHJ5LFxuLVx0XHR1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbitcdFx0dW1vZGVfdCBtb2RlKVxuIHtcbiBcdHN0cnVjdCBpbm9kZSAqZWNyeXB0ZnNfaW5vZGU7XG4gXHRpbnQgcmM7XG5kaWZmIC0tZ2l0IGEvZnMvZWZpdmFyZnMvaW5vZGUuYyBiL2ZzL2VmaXZhcmZzL2lub2RlLmNcbmluZGV4IDk1ZGNhZDgzZGExMWJlLi5mMGQwMDk1NTVmYzY2MCAxMDA2NDRcbi0tLSBhL2ZzL2VmaXZhcmZzL2lub2RlLmNcbisrKyBiL2ZzL2VmaXZhcmZzL2lub2RlLmNcbkBAIC03NSw3ICs3NSw3IEBAIHN0YXRpYyBib29sIGVmaXZhcmZzX3ZhbGlkX25hbWUoY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKVxuIH1cbiBcbiBzdGF0aWMgaW50IGVmaXZhcmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbitcdFx0XHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDtcbiBcdHN0cnVjdCBlZml2YXJfZW50cnkgKnZhcjtcbmRpZmYgLS1naXQgYS9mcy9leGZhdC9uYW1laS5jIGIvZnMvZXhmYXQvbmFtZWkuY1xuaW5kZXggYjdkNWU0NGFkMzhlZWUuLmNkOWM5ZWNhNThmODZlIDEwMDY0NFxuLS0tIGEvZnMvZXhmYXQvbmFtZWkuY1xuKysrIGIvZnMvZXhmYXQvbmFtZWkuY1xuQEAgLTUzOCw3ICs1MzgsNyBAQCBzdGF0aWMgaW50IGV4ZmF0X2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpwYXRoLFxuIH1cbiBcbiBzdGF0aWMgaW50IGV4ZmF0X2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbitcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGlyLVx1MDAzZWlfc2I7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDIvbmFtZWkuYyBiL2ZzL2V4dDIvbmFtZWkuY1xuaW5kZXggMGQwOWQyMmZlNzA4NjIuLjc0MmE3OGUxNjVkNDhlIDEwMDY0NFxuLS0tIGEvZnMvZXh0Mi9uYW1laS5jXG4rKysgYi9mcy9leHQyL25hbWVpLmNcbkBAIC05OSw3ICs5OSw3IEBAIHN0cnVjdCBkZW50cnkgKmV4dDJfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpjaGlsZClcbiAgKi9cbiBzdGF0aWMgaW50IGV4dDJfY3JlYXRlIChzdHJ1Y3QgbW50X2lkbWFwICogaWRtYXAsXG4gXHRcdFx0c3RydWN0IGlub2RlICogZGlyLCBzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5LFxuLVx0XHRcdHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuK1x0XHRcdHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuIFx0aW50IGVycjtcbmRpZmYgLS1naXQgYS9mcy9leHQ0L25hbWVpLmMgYi9mcy9leHQ0L25hbWVpLmNcbmluZGV4IGNjNDlhZTA0YTZmNjQ5Li5jM2RlNjRkMmEyZGYyMCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvbmFtZWkuY1xuKysrIGIvZnMvZXh0NC9uYW1laS5jXG5AQCAtMjgxMSw3ICsyODExLDcgQEAgc3RhdGljIGludCBleHQ0X2FkZF9ub25kaXIoaGFuZGxlX3QgKmhhbmRsZSxcbiAgKiB3aXRoIGRfaW5zdGFudGlhdGUoKS5cbiAgKi9cbiBzdGF0aWMgaW50IGV4dDRfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG4rXHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRoYW5kbGVfdCAqaGFuZGxlO1xuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbmRpZmYgLS1naXQgYS9mcy9mMmZzL25hbWVpLmMgYi9mcy9mMmZzL25hbWVpLmNcbmluZGV4IGNhYzAzYjhlOTFhMTVlLi42NDg2ODFjNWJhNTAxNiAxMDA2NDRcbi0tLSBhL2ZzL2YyZnMvbmFtZWkuY1xuKysrIGIvZnMvZjJmcy9uYW1laS5jXG5AQCAtMzY2LDcgKzM2Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmYyZnNfbmV3X2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIH1cbiBcbiBzdGF0aWMgaW50IGYyZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG4rXHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmkgPSBGMkZTX0lfU0IoZGlyKTtcbiBcdHN0cnVjdCBmMmZzX2xvY2tfY29udGV4dCBsYztcbmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfbXNkb3MuYyBiL2ZzL2ZhdC9uYW1laV9tc2Rvcy5jXG5pbmRleCAwZmQyOTcxYWQ0YjEzMS4uOWYyYTJlOWE5Y2U4ZWEgMTAwNjQ0XG4tLS0gYS9mcy9mYXQvbmFtZWlfbXNkb3MuY1xuKysrIGIvZnMvZmF0L25hbWVpX21zZG9zLmNcbkBAIC0yNjIsNyArMjYyLDcgQEAgc3RhdGljIGludCBtc2Rvc19hZGRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsXG4gXG4gLyoqKioqIENyZWF0ZSBhIGZpbGUgKi9cbiBzdGF0aWMgaW50IG1zZG9zX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbitcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGlyLVx1MDAzZWlfc2I7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDtcbmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfdmZhdC5jIGIvZnMvZmF0L25hbWVpX3ZmYXQuY1xuaW5kZXggZTkwOTQ0Nzg3M2UzNjQuLjEzOWQzZWY0YmZhZWI4IDEwMDY0NFxuLS0tIGEvZnMvZmF0L25hbWVpX3ZmYXQuY1xuKysrIGIvZnMvZmF0L25hbWVpX3ZmYXQuY1xuQEAgLTc1NSw3ICs3NTUsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqdmZhdF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiB9XG4gXG4gc3RhdGljIGludCB2ZmF0X2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuK1x0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRpci1cdTAwM2VpX3NiO1xuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuY1xuaW5kZXggMGUyYTEwMzlmYTQzZWEuLjBlZmIzMTQxZjdmNzBhIDEwMDY0NFxuLS0tIGEvZnMvZnVzZS9kaXIuY1xuKysrIGIvZnMvZnVzZS9kaXIuY1xuQEAgLTEwODQsNyArMTA4NCw3IEBAIHN0YXRpYyBpbnQgZnVzZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gfVxuIFxuIHN0YXRpYyBpbnQgZnVzZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuK1x0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRyZXR1cm4gZnVzZV9ta25vZChpZG1hcCwgZGlyLCBlbnRyeSwgbW9kZSwgMCk7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL2dmczIvaW5vZGUuYyBiL2ZzL2dmczIvaW5vZGUuY1xuaW5kZXggOGE3Nzc5NGJiZDRhZmMuLjllMjNjOGQ1NTk2MjNkIDEwMDY0NFxuLS0tIGEvZnMvZ2ZzMi9pbm9kZS5jXG4rKysgYi9mcy9nZnMyL2lub2RlLmNcbkBAIC05NjksOSArOTY5LDkgQEAgc3RhdGljIGludCBnZnMyX2NyZWF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuICAqL1xuIFxuIHN0YXRpYyBpbnQgZ2ZzMl9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbitcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbi1cdHJldHVybiBnZnMyX2NyZWF0ZV9pbm9kZShkaXIsIGRlbnRyeSwgTlVMTCwgU19JRlJFRyB8IG1vZGUsIDAsIE5VTEwsIDAsIGV4Y2wpO1xuK1x0cmV0dXJuIGdmczJfY3JlYXRlX2lub2RlKGRpciwgZGVudHJ5LCBOVUxMLCBTX0lGUkVHIHwgbW9kZSwgMCwgTlVMTCwgMCwgMSk7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2ZzL2hmcy9kaXIuYyBiL2ZzL2hmcy9kaXIuY1xuaW5kZXggZTEzNDUwYmI5MzNlYmQuLjkzZWRjNWE4MGM4MTNkIDEwMDY0NFxuLS0tIGEvZnMvaGZzL2Rpci5jXG4rKysgYi9mcy9oZnMvZGlyLmNcbkBAIC0xODQsNyArMTg0LDcgQEAgc3RhdGljIGludCBoZnNfZGlyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gICogdGhlIGRpcmVjdG9yeSBhbmQgdGhlIG5hbWUgKGFuZCBpdHMgbGVuZ3RoKSBvZiB0aGUgbmV3IGZpbGUuXG4gICovXG4gc3RhdGljIGludCBoZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbitcdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbiBcdGludCByZXM7XG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9kaXIuYyBiL2ZzL2hmc3BsdXMvZGlyLmNcbmluZGV4IDhiZjZjN2NkZDlhODY1Li5mMGFhZTJjZDZmY2ZkYyAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvZGlyLmNcbisrKyBiL2ZzL2hmc3BsdXMvZGlyLmNcbkBAIC01NjIsNyArNTYyLDcgQEAgc3RhdGljIGludCBoZnNwbHVzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiB9XG4gXG4gc3RhdGljIGludCBoZnNwbHVzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuK1x0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0cmV0dXJuIGhmc3BsdXNfbWtub2QoXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIDApO1xuIH1cbmRpZmYgLS1naXQgYS9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uYyBiL2ZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jXG5pbmRleCBhYmU4NmQ3MmQ5ZWY3NS4uN2FkZDA1NmQ0N2Q4ZjAgMTAwNjQ0XG4tLS0gYS9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uY1xuKysrIGIvZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmNcbkBAIC01OTMsNyArNTkzLDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqaG9zdGZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY2hhciAqbmFtZSlcbiB9XG4gXG4gc3RhdGljIGludCBob3N0ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbitcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbiBcdGNoYXIgKm5hbWU7XG5kaWZmIC0tZ2l0IGEvZnMvaHBmcy9uYW1laS5jIGIvZnMvaHBmcy9uYW1laS5jXG5pbmRleCAzNTNlMTNhNjE1ZjU2Ni4uODA5MTEzZDgyNDhkNTAgMTAwNjQ0XG4tLS0gYS9mcy9ocGZzL25hbWVpLmNcbisrKyBiL2ZzL2hwZnMvbmFtZWkuY1xuQEAgLTEyOSw3ICsxMjksNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqaHBmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gfVxuIFxuIHN0YXRpYyBpbnQgaHBmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbitcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUgPSBkZW50cnktXHUwMDNlZF9uYW1lLm5hbWU7XG4gXHR1bnNpZ25lZCBsZW4gPSBkZW50cnktXHUwMDNlZF9uYW1lLmxlbjtcbmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5pbmRleCAyMTZlMWEwZGQwYjIzNy4uMTZkODQzN2FlZDUxYmIgMTAwNjQ0XG4tLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuY1xuKysrIGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcbkBAIC05NzksNyArOTc5LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmh1Z2V0bGJmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXJcbiBcbiBzdGF0aWMgaW50IGh1Z2V0bGJmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0ICAgIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuK1x0XHRcdCAgICB1bW9kZV90IG1vZGUpXG4ge1xuIFx0cmV0dXJuIGh1Z2V0bGJmc19ta25vZChpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUgfCBTX0lGUkVHLCAwKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvamZmczIvZGlyLmMgYi9mcy9qZmZzMi9kaXIuY1xuaW5kZXggYzQwODhjM2I0YWMwMzYuLjNkNDY5NWI4MzhlZDA2IDEwMDY0NFxuLS0tIGEvZnMvamZmczIvZGlyLmNcbisrKyBiL2ZzL2pmZnMyL2Rpci5jXG5AQCAtMjYsNyArMjYsNyBAQFxuIHN0YXRpYyBpbnQgamZmczJfcmVhZGRpciAoc3RydWN0IGZpbGUgKiwgc3RydWN0IGRpcl9jb250ZXh0ICopO1xuIFxuIHN0YXRpYyBpbnQgamZmczJfY3JlYXRlIChzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLFxuLVx0XHQgICAgICAgICBzdHJ1Y3QgZGVudHJ5ICosIHVtb2RlX3QsIGJvb2wpO1xuK1x0XHQgICAgICAgICBzdHJ1Y3QgZGVudHJ5ICosIHVtb2RlX3QpO1xuIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpqZmZzMl9sb29rdXAgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKixcbiBcdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQpO1xuIHN0YXRpYyBpbnQgamZmczJfbGluayAoc3RydWN0IGRlbnRyeSAqLHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKik7XG5AQCAtMTYzLDcgKzE2Myw3IEBAIHN0YXRpYyBpbnQgamZmczJfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4gXG4gXG4gc3RhdGljIGludCBqZmZzMl9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyX2ksXG4tXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbitcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3QgamZmczJfcmF3X2lub2RlICpyaTtcbiBcdHN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvICpmLCAqZGlyX2Y7XG5kaWZmIC0tZ2l0IGEvZnMvamZzL25hbWVpLmMgYi9mcy9qZnMvbmFtZWkuY1xuaW5kZXggNDQyZDYyNjc5MjYyMjcuLjJjZjRlMjgwZWUxODVhIDEwMDY0NFxuLS0tIGEvZnMvamZzL25hbWVpLmNcbisrKyBiL2ZzL2pmcy9uYW1laS5jXG5AQCAtNjEsNyArNjEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9lYV93bWFwKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gICpcbiAgKi9cbiBzdGF0aWMgaW50IGpmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlwLFxuLVx0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuK1x0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRpbnQgcmMgPSAwO1xuIFx0dGlkX3QgdGlkO1x0XHQvKiB0cmFuc2FjdGlvbiBpZCAqL1xuZGlmZiAtLWdpdCBhL2ZzL21pbml4L25hbWVpLmMgYi9mcy9taW5peC9uYW1laS5jXG5pbmRleCAyNjNlNGJhOGIxYzgyMi4uNzllNTkxYmRmZGMxMGQgMTAwNjQ0XG4tLS0gYS9mcy9taW5peC9uYW1laS5jXG4rKysgYi9mcy9taW5peC9uYW1laS5jXG5AQCAtNjQsNyArNjQsNyBAQCBzdGF0aWMgaW50IG1pbml4X3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIH1cbiBcbiBzdGF0aWMgaW50IG1pbml4X2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbitcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRyZXR1cm4gbWluaXhfbWtub2QoXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIDApO1xuIH1cbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xuaW5kZXggNWNjOWYwZjQ2NmI4MzAuLjhkODFmYzMwMWU5ODk3IDEwMDY0NFxuLS0tIGEvZnMvbmFtZWkuY1xuKysrIGIvZnMvbmFtZWkuY1xuQEAgLTQxOTksNyArNDE5OSw3IEBAIGludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcbiBcdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4tXHRlcnJvciA9IGRpci1cdTAwM2VpX29wLVx1MDAzZWNyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIHRydWUpO1xuK1x0ZXJyb3IgPSBkaXItXHUwMDNlaV9vcC1cdTAwM2VjcmVhdGUoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiBcdGlmICghZXJyb3IpXG4gXHRcdGZzbm90aWZ5X2NyZWF0ZShkaXIsIGRlbnRyeSk7XG4gXHRyZXR1cm4gZXJyb3I7XG5AQCAtNDUwNSw4ICs0NTA1LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0XHRnb3RvIG91dF9kcHV0O1xuIFx0XHR9XG4gXG4tXHRcdGVycm9yID0gZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlY3JlYXRlKGlkbWFwLCBkaXJfaW5vZGUsIGRlbnRyeSxcbi1cdFx0XHRcdFx0XHRtb2RlLCBvcGVuX2ZsYWcgXHUwMDI2IE9fRVhDTCk7XG4rXHRcdGVycm9yID0gZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlY3JlYXRlKGlkbWFwLCBkaXJfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XG4gXHRcdGlmIChlcnJvcilcbiBcdFx0XHRnb3RvIG91dF9kcHV0O1xuIFx0fVxuZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXIuYyBiL2ZzL25mcy9kaXIuY1xuaW5kZXggYzdiNzIzYzE4NjIwYzkuLjI4MzBkZGM0MTZjZjc1IDEwMDY0NFxuLS0tIGEvZnMvbmZzL2Rpci5jXG4rKysgYi9mcy9uZnMvZGlyLmNcbkBAIC0yNDI3LDkgKzI0MjcsOSBAQCBzdGF0aWMgaW50IG5mc19kb19jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiB9XG4gXG4gaW50IG5mc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG4rXHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuLVx0cmV0dXJuIG5mc19kb19jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUsIGV4Y2wgPyBPX0VYQ0wgOiAwKTtcbitcdHJldHVybiBuZnNfZG9fY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlLCBPX0VYQ0wpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChuZnNfY3JlYXRlKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9uZnMvaW50ZXJuYWwuaCBiL2ZzL25mcy9pbnRlcm5hbC5oXG5pbmRleCBhY2FlZmY3ZGRmZGY3MC4uZGQ3N2Q1ZTgwZDdiOTMgMTAwNjQ0XG4tLS0gYS9mcy9uZnMvaW50ZXJuYWwuaFxuKysrIGIvZnMvbmZzL2ludGVybmFsLmhcbkBAIC0zOTUsNyArMzk1LDcgQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbmZzX2FjY2Vzc19jYWNoZV9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuIHN0cnVjdCBkZW50cnkgKm5mc19sb29rdXAoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwgdW5zaWduZWQgaW50KTtcbiB2b2lkIG5mc19kX3BydW5lX2Nhc2VfaW5zZW5zaXRpdmVfYWxpYXNlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBpbnQgbmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosXG4tXHQgICAgICAgdW1vZGVfdCwgYm9vbCk7XG4rXHQgICAgICAgdW1vZGVfdCk7XG4gc3RydWN0IGRlbnRyeSAqbmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKixcbiBcdFx0XHQgdW1vZGVfdCk7XG4gaW50IG5mc19ybWRpcihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKTtcbmRpZmYgLS1naXQgYS9mcy9uaWxmczIvbmFtZWkuYyBiL2ZzL25pbGZzMi9uYW1laS5jXG5pbmRleCBlMmZlOTVkZTNkNzFjYS4uMGUwYTk4NTBmZjc2ZGMgMTAwNjQ0XG4tLS0gYS9mcy9uaWxmczIvbmFtZWkuY1xuKysrIGIvZnMvbmlsZnMyL25hbWVpLmNcbkBAIC04Niw3ICs4Niw3IEBAIG5pbGZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4gICogd2l0aCBkX2luc3RhbnRpYXRlKCkuXG4gICovXG4gc3RhdGljIGludCBuaWxmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG4rXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbiBcdHN0cnVjdCBuaWxmc190cmFuc2FjdGlvbl9pbmZvIHRpO1xuZGlmZiAtLWdpdCBhL2ZzL250ZnMvbmFtZWkuYyBiL2ZzL250ZnMvbmFtZWkuY1xuaW5kZXggYTE5NjI2YTEzNWJkN2YuLmI0ZGM2ZGEyMjY1OTZiIDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9uYW1laS5jXG4rKysgYi9mcy9udGZzL25hbWVpLmNcbkBAIC03MzYsNyArNzM2LDcgQEAgc3RhdGljIHN0cnVjdCBudGZzX2lub2RlICpfX250ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRcbiB9XG4gXG4gc3RhdGljIGludCBudGZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG4rXHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sID0gTlRGU19TQihkaXItXHUwMDNlaV9zYik7XG4gXHRzdHJ1Y3QgbnRmc19pbm9kZSAqbmk7XG5kaWZmIC0tZ2l0IGEvZnMvbnRmczMvbmFtZWkuYyBiL2ZzL250ZnMzL25hbWVpLmNcbmluZGV4IGM1OWRlNWYyZmE5NzcxLi42ZDAzMmIyMmM5N2RhZiAxMDA2NDRcbi0tLSBhL2ZzL250ZnMzL25hbWVpLmNcbisrKyBiL2ZzL250ZnMzL25hbWVpLmNcbkBAIC0xMDUsNyArMTA1LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKm50ZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gICogbnRmc19jcmVhdGUgLSBpbm9kZV9vcGVyYXRpb25zOjpjcmVhdGVcbiAgKi9cbiBzdGF0aWMgaW50IG50ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG4rXHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRyZXR1cm4gbnRmc19jcmVhdGVfaW5vZGUoaWRtYXAsIGRpciwgZGVudHJ5LCBOVUxMLCBTX0lGUkVHIHwgbW9kZSwgMCxcbiBcdFx0XHRcdCBOVUxMLCAwLCBOVUxMKTtcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG1mcy9kbG1mcy5jIGIvZnMvb2NmczIvZGxtZnMvZGxtZnMuY1xuaW5kZXggNTgyMWUzM2RmNzhmZDkuLmYwMTI0ZjgxZGYyOWIwIDEwMDY0NFxuLS0tIGEvZnMvb2NmczIvZGxtZnMvZGxtZnMuY1xuKysrIGIvZnMvb2NmczIvZGxtZnMvZGxtZnMuY1xuQEAgLTQ1Myw4ICs0NTMsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqZGxtZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqIGlkbWFwLFxuIHN0YXRpYyBpbnQgZGxtZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRcdHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHR1bW9kZV90IG1vZGUsXG4tXHRcdFx0Ym9vbCBleGNsKVxuK1x0XHRcdHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRpbnQgc3RhdHVzID0gMDtcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvbmFtZWkuYyBiL2ZzL29jZnMyL25hbWVpLmNcbmluZGV4IDEyNzc2NjZjNzdjZDJkLi4xMmExZmVmM2VlNzRlNiAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL25hbWVpLmNcbisrKyBiL2ZzL29jZnMyL25hbWVpLmNcbkBAIC02NjcsOCArNjY3LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKm9jZnMyX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIHN0YXRpYyBpbnQgb2NmczJfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRcdHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHR1bW9kZV90IG1vZGUsXG4tXHRcdFx0Ym9vbCBleGNsKVxuK1x0XHRcdHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRpbnQgcmV0O1xuIFxuZGlmZiAtLWdpdCBhL2ZzL29tZnMvZGlyLmMgYi9mcy9vbWZzL2Rpci5jXG5pbmRleCAyZWQ1NDFmY2NmMzMxZC4uYTA5YTk4ZjdlMzBiYzYgMTAwNjQ0XG4tLS0gYS9mcy9vbWZzL2Rpci5jXG4rKysgYi9mcy9vbWZzL2Rpci5jXG5AQCAtMjg2LDcgKzI4Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvbWZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiB9XG4gXG4gc3RhdGljIGludCBvbWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuK1x0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0cmV0dXJuIG9tZnNfYWRkX25vZGUoZGlyLCBkZW50cnksIG1vZGUgfCBTX0lGUkVHKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvb3JhbmdlZnMvbmFtZWkuYyBiL2ZzL29yYW5nZWZzL25hbWVpLmNcbmluZGV4IDc1ZTY1ZTcyYzJkNjQ2Li45MWY5N2RiMTg5NzFiZiAxMDA2NDRcbi0tLSBhL2ZzL29yYW5nZWZzL25hbWVpLmNcbisrKyBiL2ZzL29yYW5nZWZzL25hbWVpLmNcbkBAIC0xOCw4ICsxOCw3IEBAXG4gc3RhdGljIGludCBvcmFuZ2Vmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0c3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdHVtb2RlX3QgbW9kZSxcbi1cdFx0XHRib29sIGV4Y2x1c2l2ZSlcbitcdFx0XHR1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IG9yYW5nZWZzX2lub2RlX3MgKnBhcmVudCA9IE9SQU5HRUZTX0koZGlyKTtcbiBcdHN0cnVjdCBvcmFuZ2Vmc19rZXJuZWxfb3BfcyAqbmV3X29wO1xuZGlmZiAtLWdpdCBhL2ZzL292ZXJsYXlmcy9kaXIuYyBiL2ZzL292ZXJsYXlmcy9kaXIuY1xuaW5kZXggYTAzMzc0M2RiZjUxNTkuLjg4YmNmOThkMjg3ZDFlIDEwMDY0NFxuLS0tIGEvZnMvb3ZlcmxheWZzL2Rpci5jXG4rKysgYi9mcy9vdmVybGF5ZnMvZGlyLmNcbkBAIC03MzIsNyArNzMyLDcgQEAgc3RhdGljIGludCBvdmxfY3JlYXRlX29iamVjdChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlLCBkZXZfdCByZGV2LFxuIH1cbiBcbiBzdGF0aWMgaW50IG92bF9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuK1x0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRyZXR1cm4gb3ZsX2NyZWF0ZV9vYmplY3QoZGVudHJ5LCAobW9kZSBcdTAwMjYgMDc3NzcpIHwgU19JRlJFRywgMCwgTlVMTCk7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL3JhbWZzL2lub2RlLmMgYi9mcy9yYW1mcy9pbm9kZS5jXG5pbmRleCAzOTg3NjM5ZWQxMzJjNi4uMGY1MmJhMjJhYWMwNGMgMTAwNjQ0XG4tLS0gYS9mcy9yYW1mcy9pbm9kZS5jXG4rKysgYi9mcy9yYW1mcy9pbm9kZS5jXG5AQCAtMTI4LDcgKzEyOCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpyYW1mc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gfVxuIFxuIHN0YXRpYyBpbnQgcmFtZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuK1x0XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdHJldHVybiByYW1mc19ta25vZChcdTAwMjZub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSB8IFNfSUZSRUcsIDApO1xuIH1cbmRpZmYgLS1naXQgYS9mcy9zbWIvY2xpZW50L2NpZnNmcy5oIGIvZnMvc21iL2NsaWVudC9jaWZzZnMuaFxuaW5kZXggOTAxZTEzNDBjOTg2ZmIuLmJjZjJmZjg3ZGEyZDVjIDEwMDY0NFxuLS0tIGEvZnMvc21iL2NsaWVudC9jaWZzZnMuaFxuKysrIGIvZnMvc21iL2NsaWVudC9jaWZzZnMuaFxuQEAgLTU0LDcgKzU0LDcgQEAgdm9pZCBjaWZzX3NiX2RlYWN0aXZlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBjaWZzX2Rpcl9pbm9kZV9vcHM7XG4gc3RydWN0IGlub2RlICpjaWZzX3Jvb3RfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbiBpbnQgY2lmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpO1xuK1x0XHRzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbiBpbnQgY2lmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGlyZW50cnksXG4gXHRcdCAgICAgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBvZmxhZ3MsIHVtb2RlX3QgbW9kZSk7XG4gaW50IGNpZnNfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG5kaWZmIC0tZ2l0IGEvZnMvc21iL2NsaWVudC9kaXIuYyBiL2ZzL3NtYi9jbGllbnQvZGlyLmNcbmluZGV4IDg4YTRhMTc4N2ZmMDQ3Li43ODAzYmQ1YmQwMWY4MCAxMDA2NDRcbi0tLSBhL2ZzL3NtYi9jbGllbnQvZGlyLmNcbisrKyBiL2ZzL3NtYi9jbGllbnQvZGlyLmNcbkBAIC02NDUsNyArNjQ1LDcgQEAgaW50IGNpZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LFxuICAqIGhhc2hlZC1wb3NpdGl2ZSBieSBjYWxsaW5nIGRfaW5zdGFudGlhdGUoKS5cbiAgKi9cbiBpbnQgY2lmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG4rXHRcdHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiA9IENJRlNfU0IoZGlyKTtcbiBcdGludCByYztcbmRpZmYgLS1naXQgYS9mcy91Ymlmcy9kaXIuYyBiL2ZzL3ViaWZzL2Rpci5jXG5pbmRleCA4NmQ0MWUwNzdlNGQ2Mi4uZmQ4ZGYxMDU0N2JmNDIgMTAwNjQ0XG4tLS0gYS9mcy91Ymlmcy9kaXIuY1xuKysrIGIvZnMvdWJpZnMvZGlyLmNcbkBAIC0zMDMsNyArMzAzLDcgQEAgc3RhdGljIGludCB1Ymlmc19wcmVwYXJlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIH1cbiBcbiBzdGF0aWMgaW50IHViaWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbitcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuIFx0c3RydWN0IHViaWZzX2luZm8gKmMgPSBkaXItXHUwMDNlaV9zYi1cdTAwM2VzX2ZzX2luZm87XG5kaWZmIC0tZ2l0IGEvZnMvdWRmL25hbWVpLmMgYi9mcy91ZGYvbmFtZWkuY1xuaW5kZXggOWEzYjdjZWYzNjA2NDguLmZkOWI2ZjE2ZjYxNDYyIDEwMDY0NFxuLS0tIGEvZnMvdWRmL25hbWVpLmNcbisrKyBiL2ZzL3VkZi9uYW1laS5jXG5AQCAtMzcxLDcgKzM3MSw3IEBAIHN0YXRpYyBpbnQgdWRmX2FkZF9ub25kaXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIH1cbiBcbiBzdGF0aWMgaW50IHVkZl9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuK1x0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gdWRmX25ld19pbm9kZShkaXIsIG1vZGUpO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL3Vmcy9uYW1laS5jIGIvZnMvdWZzL25hbWVpLmNcbmluZGV4IDViM2M4NWM5MzI0Mjk4Li41MDEyZTA1NjIwMGFjYSAxMDA2NDRcbi0tLSBhL2ZzL3Vmcy9uYW1laS5jXG4rKysgYi9mcy91ZnMvbmFtZWkuY1xuQEAgLTcwLDggKzcwLDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKnVmc19sb29rdXAoc3RydWN0IGlub2RlICogZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVuc2lcbiAgKiB3aXRoIGRfaW5zdGFudGlhdGUoKS4gXG4gICovXG4gc3RhdGljIGludCB1ZnNfY3JlYXRlIChzdHJ1Y3QgbW50X2lkbWFwICogaWRtYXAsXG4tXHRcdHN0cnVjdCBpbm9kZSAqIGRpciwgc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuLVx0XHRib29sIGV4Y2wpXG4rXHRcdHN0cnVjdCBpbm9kZSAqIGRpciwgc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvdmJveHNmL2Rpci5jIGIvZnMvdmJveHNmL2Rpci5jXG5pbmRleCBjNWJkMzI3MWFhOTYxNi4uMGI5ZWFiMTU3NDMyZGYgMTAwNjQ0XG4tLS0gYS9mcy92Ym94c2YvZGlyLmNcbisrKyBiL2ZzL3Zib3hzZi9kaXIuY1xuQEAgLTI5OCw5ICsyOTgsOSBAQCBzdGF0aWMgaW50IHZib3hzZl9kaXJfY3JlYXRlKHN0cnVjdCBpbm9kZSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXG4gc3RhdGljIGludCB2Ym94c2ZfZGlyX21rZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHQgICAgIHN0cnVjdCBpbm9kZSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0ICAgICB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbitcdFx0XHQgICAgIHVtb2RlX3QgbW9kZSlcbiB7XG4tXHRyZXR1cm4gdmJveHNmX2Rpcl9jcmVhdGUocGFyZW50LCBkZW50cnksIG1vZGUsIGZhbHNlLCBleGNsLCBOVUxMKTtcbitcdHJldHVybiB2Ym94c2ZfZGlyX2NyZWF0ZShwYXJlbnQsIGRlbnRyeSwgbW9kZSwgZmFsc2UsIHRydWUsIE5VTEwpO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqdmJveHNmX2Rpcl9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvcHMuYyBiL2ZzL3hmcy94ZnNfaW9wcy5jXG5pbmRleCA2MzM5ZjQ5NTZlY2IzOS4uZTQ4ZjllNWExYjhhMTggMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2lvcHMuY1xuKysrIGIvZnMveGZzL3hmc19pb3BzLmNcbkBAIC0yOTMsOCArMjkzLDcgQEAgeGZzX3ZuX2NyZWF0ZShcbiBcdHN0cnVjdCBtbnRfaWRtYXBcdCppZG1hcCxcbiBcdHN0cnVjdCBpbm9kZVx0XHQqZGlyLFxuIFx0c3RydWN0IGRlbnRyeVx0XHQqZGVudHJ5LFxuLVx0dW1vZGVfdFx0XHRcdG1vZGUsXG4tXHRib29sXHRcdFx0ZmxhZ3MpXG4rXHR1bW9kZV90XHRcdFx0bW9kZSlcbiB7XG4gXHRyZXR1cm4geGZzX2dlbmVyaWNfY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgMCwgTlVMTCk7XG4gfVxuQEAgLTMzOCw3ICszMzcsNyBAQCBTVEFUSUMgc3RydWN0IGRlbnRyeSAqXG4geGZzX3ZuX2NpX2xvb2t1cChcbiBcdHN0cnVjdCBpbm9kZVx0KmRpcixcbiBcdHN0cnVjdCBkZW50cnlcdCpkZW50cnksXG4tXHR1bnNpZ25lZCBpbnQgZmxhZ3MpXG4rXHR1bnNpZ25lZCBpbnRcdGZsYWdzKVxuIHtcbiBcdHN0cnVjdCB4ZnNfaW5vZGUgKmlwO1xuIFx0c3RydWN0IHhmc19uYW1lXHR4bmFtZTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmhcbmluZGV4IGQxMDg5N2IzYTFlMzUwLi4xYjdjNDBiMmZhNmRlMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZnMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9mcy5oXG5AQCAtMjAwMiw3ICsyMDAyLDcgQEAgc3RydWN0IGlub2RlX29wZXJhdGlvbnMge1xuIFx0aW50ICgqcmVhZGxpbmspIChzdHJ1Y3QgZGVudHJ5ICosIGNoYXIgX191c2VyICosaW50KTtcbiBcbiBcdGludCAoKmNyZWF0ZSkgKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqLFxuLVx0XHQgICAgICAgdW1vZGVfdCwgYm9vbCk7XG4rXHRcdCAgICAgICB1bW9kZV90KTtcbiBcdGludCAoKmxpbmspIChzdHJ1Y3QgZGVudHJ5ICosc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqKTtcbiBcdGludCAoKnVubGluaykgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKik7XG4gXHRpbnQgKCpzeW1saW5rKSAoc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICosXG5kaWZmIC0tZ2l0IGEvaXBjL21xdWV1ZS5jIGIvaXBjL21xdWV1ZS5jXG5pbmRleCA0Nzk4YjM3NTk3MmJmNC4uMmRkZGI5N2YyZjhhNTUgMTAwNjQ0XG4tLS0gYS9pcGMvbXF1ZXVlLmNcbisrKyBiL2lwYy9tcXVldWUuY1xuQEAgLTYwOCw3ICs2MDgsNyBAQCBzdGF0aWMgaW50IG1xdWV1ZV9jcmVhdGVfYXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgdm9pZCAqYXJnKVxuIH1cbiBcbiBzdGF0aWMgaW50IG1xdWV1ZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuK1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRyZXR1cm4gbXF1ZXVlX2NyZWF0ZV9hdHRyKGRlbnRyeSwgbW9kZSwgTlVMTCk7XG4gfVxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCBiNTFmODNjOTcwYmIzNy4uNTc4OWEwZjVhMzQ2M2IgMTAwNjQ0XG4tLS0gYS9tbS9zaG1lbS5jXG4rKysgYi9tbS9zaG1lbS5jXG5AQCAtMzg2NCw3ICszODY0LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKnNobWVtX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiB9XG4gXG4gc3RhdGljIGludCBzaG1lbV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG4rXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0cmV0dXJuIHNobWVtX21rbm9kKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSB8IFNfSUZSRUcsIDApO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE4OjM4OjE1LjU0Njc1OTY5NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNzA0ODQ0MjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVkZTIEFQSSBDaGFuZ2UgZm9yIGBjcmVhdGVgIElub2RlIE9wZXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBmdW5kYW1lbnRhbGx5IGFsdGVycyB0aGUgYGNyZWF0ZWAgaW5vZGUgb3BlcmF0aW9uIGluIHRoZSBWRlMgbGF5ZXIuIFNwZWNpZmljYWxseSwgdGhlIGBleGNsYCBhcmd1bWVudCwgd2hpY2ggaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGZpbGUgbXVzdCBiZSBjcmVhdGVkIGV4Y2x1c2l2ZWx5LCBpcyBiZWluZyByZW1vdmVkIGZyb20gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZS4gVGhpcyBjaGFuZ2UgcmlwcGxlcyB0aHJvdWdoIHRoZSBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9ucywgYWZmZWN0aW5nIGhvdyB0aGV5IGhhbmRsZSBmaWxlIGNyZWF0aW9uLiBUaGUgY2hhbmdlcyBpbmNsdWRlIHVwZGF0ZXMgdG8gdGhlIGRvY3VtZW50YXRpb24gKGBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0YCksIHRoZSBoZWFkZXIgZmlsZSAoYGluY2x1ZGUvbGludXgvZnMuaGApLCBhbmQgYSBtdWx0aXR1ZGUgb2YgZmlsZXN5c3RlbS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgKGxpa2UgYDlwYCwgYGV4dDRgLCBgYnRyZnNgLCBldGMuKS5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsaWVzIGluIGBmcy9uYW1laS5jYCwgd2hlcmUgYHZmc19jcmVhdGVgIGFuZCBgbG9va3VwX29wZW5gIGNhbGwgdGhlIGBjcmVhdGVgIGZ1bmN0aW9uLiBCZWZvcmUsIGBsb29rdXBfb3BlbmAgd291bGQgcGFzcyB0aGUgYE9fRVhDTGAgZmxhZyB2aWEgdGhlIGBleGNsYCBhcmd1bWVudC4gTm93LCB0aGF0IGFyZ3VtZW50IGlzIGdvbmUuIFRoZSBjb21taXQgbWVzc2FnZSBjbGFyaWZpZXMgdGhhdCB0aGUgYGNyZWF0ZWAgZnVuY3Rpb24gKm11c3QqIGFzc3VtZSBleGNsdXNpdml0eSBieSBkZWZhdWx0LiBJZiBhIGZpbGVzeXN0ZW0gbmVlZHMgdG8gaGFuZGxlIG5vbi1leGNsdXNpdmUgY3JlYXRlcywgdGhlIHN1Z2dlc3Rpb24gaXMgdG8gaW1wbGVtZW50IGBhdG9taWNfb3BlbmAuXG5cblRoaXMgaXMgYSBzdHJ1Y3R1cmFsIEFQSSBjaGFuZ2UsIHJlbW92aW5nIGFuIGFyZ3VtZW50IGZyb20gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZS4gSXQncyBub3QgaW50cm9kdWNpbmcgYW55IG5ldyBmdW5kYW1lbnRhbCBmdW5jdGlvbmFsaXR5LCBidXQgcmF0aGVyIHNoaWZ0aW5nIHRoZSByZXNwb25zaWJpbGl0eSBmb3IgZXhjbHVzaXZlIGNyZWF0aW9uLiBUaGUgbG9naWMgb2YgdGhlIGZpbGVzeXN0ZW1zIHRoZW1zZWx2ZXMgYXBwZWFycyBtb3N0bHkgdW5jaGFuZ2VkLCB0aGV5J3JlIHNpbXBseSBhZGFwdGluZyB0byB0aGUgbmV3IHNpZ25hdHVyZS4gVGhlIGltcG9ydGFudCBiaXQgaXMgdGhhdCB0aGUgVkZTICpub3cqIGhhbmRsZXMgdGhlIGV4Y2x1c2l2aXR5IGNoZWNrOyBiZWZvcmUsIGl0IHdhcyBwYXJ0aWFsbHkgZGVsZWdhdGVkLlxuXG5JdCBkb2VzIGxvb2sgbGlrZSBzb21lIGZpbGVzeXN0ZW1zIGFyZSBoYXJkY29kaW5nIHRoZSBleGNsdXNpdmUgY3JlYXRlIGJlaGF2aW9yLCBmb3IgZXhhbXBsZSwgYGdmczJgIG5vdyBleHBsaWNpdGx5IHNldHMgYGV4Y2wgPSAxYCBpbiBpdHMgY2FsbCB0byBgZ2ZzMl9jcmVhdGVfaW5vZGVgLiBUaGUgc2FtZSBwYXR0ZXJuIGFwcGxpZXMgdG8gYG5mc2AgYW5kIGB2Ym94c2ZgLiBUaGlzIGlzIHdoZXJlIHRoZSBwb3RlbnRpYWwgZm9yIGludGVyZXN0aW5nIGJlaGF2aW9yIGVtZXJnZXM6IGZpbGVzeXN0ZW1zIHByZXZpb3VzbHkgcmVseWluZyBvbiB0aGUgYGV4Y2xgIGFyZ3VtZW50IHRvIGtub3cgKmlmKiBpdCB3YXMgYW4gZXhjbHVzaXZlIGNyZWF0ZSBub3cgKmFsd2F5cyogYmVoYXZlIGFzIGlmIHRoZSBmaWxlIG5lZWRzIHRvIGJlIGNyZWF0ZWQgZXhjbHVzaXZlbHkuIFRoaXMgbWlnaHQgY3JlYXRlIHJlZ3Jlc3Npb25zLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGEgcmVmYWN0b3JpbmcsIGJ1dCBhIHZlcnkgKndpZGUqIG9uZS4gSXMgaXQgd29ydGggc3BlY2lhbGl6ZWQgZnV6emluZz8gUHJvYmFibHkgbm90IGEgKm5ldyogc2V0IG9mIGZ1enplcnMsIGJ1dCBWRlMgY2hhbmdlcyBhcmUgYWx3YXlzIHVuZGVyIHNjcnV0aW55LiBXZSdyZSBub3QgYWRkaW5nICpuZXcqIGZ1bmN0aW9uYWxpdHksIGJ1dCB3ZSdyZSBjaGFuZ2luZyB0aGUgYmVoYXZpb3Igb2YgaG93IGBsb29rdXBfb3BlbmAgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgZmlsZXN5c3RlbXMuIFRoaXMgY2hhbmdlICpjb3VsZCogYWZmZWN0IGZpbGVzeXN0ZW1zIHRoYXQgKmRvbid0KiBpbXBsZW1lbnQgYGF0b21pY19vcGVuYCBhbmQgaGFkIGJlZW4gcmVseWluZyBvbiB0aGUgYGV4Y2xgIGFyZ3VtZW50IHRvIGNvbnRyb2wgd2hldGhlciB0byBjcmVhdGUgZXhjbHVzaXZlbHkgb3Igbm90LiBUaGlzIGlzIHNvbWV0aGluZyB3b3J0aCBhIGNsb3NlciBsb29rOiBBcmUgd2UgYnJlYWtpbmcgY29tcGF0aWJpbGl0eT8gSXMgdGhlcmUgYSBzdWJ0bGUgc2VtYW50aWMgZGlmZmVyZW5jZSBoZXJlP1xuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aG9zZSBmaWxlc3lzdGVtcywgbGlrZSBgZ2ZzMmAsIGFjdHVhbGx5ICpkbyogaW1wbGVtZW50IGBhdG9taWNfb3BlbmAgYmVjYXVzZSBpZiB0aGV5IGRvLCB0aGVuIHRoaXMgZW50aXJlIHNoaWZ0IGlzIGxhcmdlbHkgdHJhbnNwYXJlbnQuIElmIHRoZXkgZG9uJ3QsIHRoZW4gdGhpcyBpcyBzaWduaWZpY2FudCwgYW5kIHdlIG5lZWQgdG8gbG9vayBmb3IgcmVncmVzc2lvbnMuIExldCBtZSBjaGVjayBpZiBgZ2ZzMmAgaGFzIGltcGxlbWVudGVkIGBhdG9taWNfb3BlbmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzYwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIwMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE4OjM4OjI5LjI1MTYwNjY2MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA0NTU3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRvbWljX29wZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZ2ZzMi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZ2ZzMi9maWxlLmM9NTkxPXN0YXRpYyBpbnQgZ2ZzMl9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmZzL2dmczIvZmlsZS5jLTYxMy0vKipcXG5mcy9nZnMyL2ZpbGUuYzo2MTQ6ICogZ2ZzMl9vcGVuX2NvbW1vbiAtIFRoaXMgaXMgY29tbW9uIHRvIG9wZW4gYW5kIGF0b21pY19vcGVuXFxuZnMvZ2ZzMi9maWxlLmMtNjE1LSAqIEBpbm9kZTogVGhlIGlub2RlIGJlaW5nIG9wZW5lZFxcbi0tXFxuZnMvZ2ZzMi9maWxlLmM9NjI2PWludCBnZnMyX29wZW5fY29tbW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZnMvZ2ZzMi9maWxlLmMtNjY1LSAqXFxuZnMvZ2ZzMi9maWxlLmM6NjY2OiAqIEFmdGVyIGF0b21pY19vcGVuLCB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgdXNlZCBmb3Igb3BlbmluZyBmaWxlc1xcbmZzL2dmczIvZmlsZS5jLTY2Ny0gKiB3aGljaCBhcmUgYWxyZWFkeSBjYWNoZWQuIFdlIG11c3Qgc3RpbGwgZ2V0IHRoZSBnbG9jayBmb3IgcmVndWxhclxcbi0tXFxuZnMvZ2ZzMi9pbm9kZS5jPTEzNjc9c3RhdGljIGludCBnZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL2dmczIvaW5vZGUuYy0xMzczLS8qKlxcbmZzL2dmczIvaW5vZGUuYzoxMzc0OiAqIGdmczJfYXRvbWljX29wZW4gLSBBdG9taWNhbGx5IG9wZW4gYSBmaWxlXFxuZnMvZ2ZzMi9pbm9kZS5jLTEzNzUtICogQGRpcjogVGhlIGRpcmVjdG9yeVxcbi0tXFxuZnMvZ2ZzMi9pbm9kZS5jLTEzODMtXFxuZnMvZ2ZzMi9pbm9kZS5jOjEzODQ6c3RhdGljIGludCBnZnMyX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuZnMvZ2ZzMi9pbm9kZS5jLTEzODUtXFx0XFx0XFx0ICAgIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBmbGFncyxcXG4tLVxcbmZzL2dmczIvaW5vZGUuYz0yMzA4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBnZnMyX2Rpcl9pb3BzID0ge1xcbi0tXFxuZnMvZ2ZzMi9pbm9kZS5jLTIzMjUtXFx0LnVwZGF0ZV90aW1lID0gZ2ZzMl91cGRhdGVfdGltZSxcXG5mcy9nZnMyL2lub2RlLmM6MjMyNjpcXHQuYXRvbWljX29wZW4gPSBnZnMyX2F0b21pY19vcGVuLFxcbmZzL2dmczIvaW5vZGUuYy0yMzI3LVxcdC5maWxlYXR0cl9nZXQgPSBnZnMyX2ZpbGVhdHRyX2dldCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTg6Mzg6MjkuMzYyMDY4OTUxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzExNTY0NDQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRmlsZSBTeXN0ZW0gQXRvbWljIE9wZW5zOiBBIFF1aWNrIE1lbnRhbCBDaGVjayoqXG5cblJpZ2h0LCAqZ2ZzMiogaGFzIGBhdG9taWNfb3BlbmAgaW1wbGVtZW50ZWQsIHRoYXQncyBjbGVhci4gTm8gc3VycHJpc2VzIHRoZXJlOyBpdCdzIGRlc2lnbmVkIGZvciB0aGF0IGtpbmQgb2Ygcm9idXN0LCBjbHVzdGVyZWQgZW52aXJvbm1lbnQuIEJ1dCBub3cgSSdtIHNoaWZ0aW5nIGdlYXJzLCBhbmQgYSBuZXcgcXVlc3Rpb24gcG9wcyB1cDogV2hhdCBhYm91dCBORlM/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgTkZTIHByb3RvY29sIGFuZCBzZWUgaWYgaXQgcHJvdmlkZXMgYW55IGluaGVyZW50IHN1cHBvcnQgb3IgaWYgaXQgcmVsaWVzIG9uIHVuZGVybHlpbmcgbWVjaGFuaXNtcyBmb3Igc29tZXRoaW5nIGxpa2UgYXRvbWljIG9wZW5zLiBJdCdzIGEga2V5IGRldGFpbCB3aGVuIGNvbnNpZGVyaW5nIGRpc3RyaWJ1dGVkIGZpbGUgc3lzdGVtIGRlc2lnbiwgYXMgSSdtIHN1cmUgaXQnbGwgaW1wYWN0IGhvdyB0aGUgc3lzdGVtIGFzIGEgd2hvbGUgZGVhbHMgd2l0aCBmaWxlIGFjY2Vzc2VzLiBEb2VzIGl0IGRlZmVyIHRvIHRoZSB1bmRlcmx5aW5nIHN0b3JhZ2UgZm9yIGF0b21pY2l0eT8gT3IgZG9lcyB0aGUgY2xpZW50LXNpZGUgaW50ZXJhY3Rpb24gc29tZWhvdyBoYW5kbGUgdGhpcz8gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgc3BlY3MuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyMDQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODozODozMi40Nzc3MTU0MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIzOTc0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRvbWljX29wZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZnMvZGlyLmM9MjA4Nz1zdGF0aWMgaW50IG5mc19maW5pc2hfb3BlbihzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4LFxcbi0tXFxuZnMvbmZzL2Rpci5jLTIxMDMtXFxuZnMvbmZzL2Rpci5jOjIxMDQ6aW50IG5mc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbmZzL25mcy9kaXIuYy0yMTA1LVxcdFxcdCAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgb3Blbl9mbGFncyxcXG4tLVxcbmZzL25mcy9kaXIuYy0yMTIwLVxcbmZzL25mcy9kaXIuYzoyMTIxOlxcdGRmcHJpbnRrKFZGUywgXFxcIk5GUzogYXRvbWljX29wZW4oJXMvJWxsdSksICVwZFxcXFxuXFxcIixcXG5mcy9uZnMvZGlyLmMtMjEyMi1cXHRcXHRcXHRkaXItXFx1MDAzZWlfc2ItXFx1MDAzZXNfaWQsIGRpci1cXHUwMDNlaV9pbm8sIGRlbnRyeSk7XFxuLS1cXG5mcy9uZnMvZGlyLmMtMjE3NC1cXG5mcy9uZnMvZGlyLmM6MjE3NTpcXHR0cmFjZV9uZnNfYXRvbWljX29wZW5fZW50ZXIoZGlyLCBjdHgsIG9wZW5fZmxhZ3MpO1xcbmZzL25mcy9kaXIuYy0yMTc2LVxcdGlub2RlID0gTkZTX1BST1RPKGRpciktXFx1MDAzZW9wZW5fY29udGV4dChkaXIsIGN0eCwgb3Blbl9mbGFncywgXFx1MDAyNmF0dHIsIFxcdTAwMjZjcmVhdGVkKTtcXG4tLVxcbmZzL25mcy9kaXIuYy0yMTgwLVxcdFxcdGVyciA9IFBUUl9FUlIoaW5vZGUpO1xcbmZzL25mcy9kaXIuYzoyMTgxOlxcdFxcdHRyYWNlX25mc19hdG9taWNfb3Blbl9leGl0KGRpciwgY3R4LCBvcGVuX2ZsYWdzLCBlcnIpO1xcbmZzL25mcy9kaXIuYy0yMTgyLVxcdFxcdHB1dF9uZnNfb3Blbl9jb250ZXh0KGN0eCk7XFxuLS1cXG5mcy9uZnMvZGlyLmMtMjIxMi1cXHRlcnIgPSBuZnNfZmluaXNoX29wZW4oY3R4LCBjdHgtXFx1MDAzZWRlbnRyeSwgZmlsZSwgb3Blbl9mbGFncyk7XFxuZnMvbmZzL2Rpci5jOjIyMTM6XFx0dHJhY2VfbmZzX2F0b21pY19vcGVuX2V4aXQoZGlyLCBjdHgsIG9wZW5fZmxhZ3MsIGVycik7XFxuZnMvbmZzL2Rpci5jLTIyMTQtXFx0cHV0X25mc19vcGVuX2NvbnRleHQoY3R4KTtcXG4tLVxcbmZzL25mcy9kaXIuYy0yMjUwLX1cXG5mcy9uZnMvZGlyLmM6MjI1MTpFWFBPUlRfU1lNQk9MX0dQTChuZnNfYXRvbWljX29wZW4pO1xcbmZzL25mcy9kaXIuYy0yMjUyLVxcbi0tXFxuZnMvbmZzL2Rpci5jPTIyNTQ9bmZzNF9sb29rdXBfcmV2YWxpZGF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXFxuLS1cXG5mcy9uZnMvZGlyLmMtMjMwNS1cXG5mcy9uZnMvZGlyLmM6MjMwNjppbnQgbmZzX2F0b21pY19vcGVuX3YyMyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbmZzL25mcy9kaXIuYy0yMzA3LVxcdFxcdFxcdHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgb3Blbl9mbGFncyxcXG4tLVxcbmZzL25mcy9kaXIuYy0yMzM2LX1cXG5mcy9uZnMvZGlyLmM6MjMzNzpFWFBPUlRfU1lNQk9MX0dQTChuZnNfYXRvbWljX29wZW5fdjIzKTtcXG5mcy9uZnMvZGlyLmMtMjMzOC1cXG4tLVxcbmZzL25mcy9uZnMzcHJvYy5jPTEwNDI9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG5mczNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuZnMvbmZzL25mczNwcm9jLmMtMTA0My1cXHQuY3JlYXRlXFx0XFx0PSBuZnNfY3JlYXRlLFxcbmZzL25mcy9uZnMzcHJvYy5jOjEwNDQ6XFx0LmF0b21pY19vcGVuXFx0PSBuZnNfYXRvbWljX29wZW5fdjIzLFxcbmZzL25mcy9uZnMzcHJvYy5jLTEwNDUtXFx0Lmxvb2t1cFxcdFxcdD0gbmZzX2xvb2t1cCxcXG4tLVxcbmZzL25mcy9uZnM0X2ZzLmg9MjgyPWV4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgbmZzNF9kZW50cnlfb3BlcmF0aW9ucztcXG4tLVxcbmZzL25mcy9uZnM0X2ZzLmgtMjg0LS8qIGRpci5jICovXFxuZnMvbmZzL25mczRfZnMuaDoyODU6aW50IG5mc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgZmlsZSAqLFxcbmZzL25mcy9uZnM0X2ZzLmgtMjg2LVxcdFxcdCAgICB1bnNpZ25lZCwgdW1vZGVfdCk7XFxuLS1cXG5mcy9uZnMvbmZzNHByb2MuYz0xMjYxPXN0cnVjdCBuZnM0X29wZW5fY3JlYXRlYXR0cnMge1xcbi0tXFxuZnMvbmZzL25mczRwcm9jLmMtMTI2Ni1cXG5mcy9uZnMvbmZzNHByb2MuYzoxMjY3OnN0YXRpYyBib29sIG5mczRfY2xlYXJfY2FwX2F0b21pY19vcGVuX3YxKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsXFxuZnMvbmZzL25mczRwcm9jLmMtMTI2OC1cXHRcXHRpbnQgZXJyLCBzdHJ1Y3QgbmZzNF9leGNlcHRpb24gKmV4Y2VwdGlvbilcXG4tLVxcbmZzL25mcy9uZnM0cHJvYy5jPTEzMDk9c3RhdGljIHUzMlxcbmZzL25mcy9uZnM0cHJvYy5jOjEzMTA6bmZzNF9tYXBfYXRvbWljX29wZW5fc2hhcmUoc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlcixcXG5mcy9uZnMvbmZzNHByb2MuYy0xMzExLVxcdFxcdGZtb2RlX3QgZm1vZGUsIGludCBvcGVuZmxhZ3MpXFxuLS1cXG5mcy9uZnMvbmZzNHByb2MuYz0xMzMxPXN0YXRpYyBlbnVtIG9wZW5fY2xhaW1fdHlwZTRcXG5mcy9uZnMvbmZzNHByb2MuYzoxMzMyOm5mczRfbWFwX2F0b21pY19vcGVuX2NsYWltKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsXFxuZnMvbmZzL25mczRwcm9jLmMtMTMzMy1cXHRcXHRlbnVtIG9wZW5fY2xhaW1fdHlwZTQgY2xhaW0pXFxuLS1cXG5mcy9uZnMvbmZzNHByb2MuYz0xMzYwPXN0YXRpYyBzdHJ1Y3QgbmZzNF9vcGVuZGF0YSAqbmZzNF9vcGVuZGF0YV9hbGxvYyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9uZnMvbmZzNHByb2MuYy0xMzk1LVxcdHAtXFx1MDAzZW9fYXJnLmZtb2RlID0gZm1vZGUgXFx1MDAyNiAoRk1PREVfUkVBRHxGTU9ERV9XUklURSk7XFxuZnMvbmZzL25mczRwcm9jLmM6MTM5NjpcXHRwLVxcdTAwM2VvX2FyZy5jbGFpbSA9IG5mczRfbWFwX2F0b21pY19vcGVuX2NsYWltKHNlcnZlciwgY2xhaW0pO1xcbmZzL25mcy9uZnM0cHJvYy5jOjEzOTc6XFx0cC1cXHUwMDNlb19hcmcuc2hhcmVfYWNjZXNzID0gbmZzNF9tYXBfYXRvbWljX29wZW5fc2hhcmUoc2VydmVyLFxcbmZzL25mcy9uZnM0cHJvYy5jLTEzOTgtXFx0XFx0XFx0Zm1vZGUsIGZsYWdzKTtcXG4tLVxcbmZzL25mcy9uZnM0cHJvYy5jPTIxNjY9c3RhdGljIGludCBuZnM0X29wZW5fcmVjb3Zlcl9oZWxwZXIoc3RydWN0IG5mczRfb3BlbmRhdGEgKm9wZW5kYXRhLFxcbi0tXFxuZnMvbmZzL25mczRwcm9jLmMtMjE3Ny1cXHRvcGVuZGF0YS1cXHUwMDNlb19hcmcuc2hhcmVfYWNjZXNzID1cXG5mcy9uZnMvbmZzNHByb2MuYzoyMTc4OlxcdFxcdG5mczRfbWFwX2F0b21pY19vcGVuX3NoYXJlKHNlcnZlciwgZm1vZGUsIG9wZW5mbGFncyk7XFxuZnMvbmZzL25mczRwcm9jLmMtMjE3OS1cXHRtZW1zZXQoXFx1MDAyNm9wZW5kYXRhLVxcdTAwM2VvX3JlcywgMCwgc2l6ZW9mKG9wZW5kYXRhLVxcdTAwM2VvX3JlcykpO1xcbi0tXFxuZnMvbmZzL25mczRwcm9jLmM9MjI2MT1zdGF0aWMgaW50IG5mczRfZG9fb3Blbl9yZWNsYWltKHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgsIHN0cnVjdCBuZnM0X3N0YXRlICpzdGF0ZSlcXG4tLVxcbmZzL25mcy9uZnM0cHJvYy5jLTIyNjgtXFx0XFx0dHJhY2VfbmZzNF9vcGVuX3JlY2xhaW0oY3R4LCAwLCBlcnIpO1xcbmZzL25mcy9uZnM0cHJvYy5jOjIyNjk6XFx0XFx0aWYgKG5mczRfY2xlYXJfY2FwX2F0b21pY19vcGVuX3YxKHNlcnZlciwgZXJyLCBcXHUwMDI2ZXhjZXB0aW9uKSlcXG5mcy9uZnMvbmZzNHByb2MuYy0yMjcwLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxuZnMvbmZzL25mczRwcm9jLmM9Mjc4Nj1zdGF0aWMgaW50IG5mczRfZG9fb3Blbl9leHBpcmVkKHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgsIHN0cnVjdCBuZnM0X3N0YXRlICpzdGF0ZSlcXG4tLVxcbmZzL25mcy9uZnM0cHJvYy5jLTI3OTQtXFx0XFx0dHJhY2VfbmZzNF9vcGVuX2V4cGlyZWQoY3R4LCAwLCBlcnIpO1xcbmZzL25mcy9uZnM0cHJvYy5jOjI3OTU6XFx0XFx0aWYgKG5mczRfY2xlYXJfY2FwX2F0b21pY19vcGVuX3YxKHNlcnZlciwgZXJyLCBcXHUwMDI2ZXhjZXB0aW9uKSlcXG5mcy9uZnMvbmZzNHByb2MuYy0yNzk2LVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxuZnMvbmZzL25mczRwcm9jLmM9MzIzND1zdGF0aWMgc3RydWN0IG5mczRfc3RhdGUgKm5mczRfZG9fb3BlbihzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL25mcy9uZnM0cHJvYy5jLTMyOTktXFx0XFx0fVxcbmZzL25mcy9uZnM0cHJvYy5jOjMzMDA6XFx0XFx0aWYgKG5mczRfY2xlYXJfY2FwX2F0b21pY19vcGVuX3YxKHNlcnZlciwgc3RhdHVzLCBcXHUwMDI2ZXhjZXB0aW9uKSlcXG5mcy9uZnMvbmZzNHByb2MuYy0zMzAxLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxuZnMvbmZzL25mczRwcm9jLmM9MzgyNj1zdGF0aWMgc3RydWN0IGlub2RlICpcXG5mcy9uZnMvbmZzNHByb2MuYzozODI3Om5mczRfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgsXFxuZnMvbmZzL25mczRwcm9jLmMtMzgyOC1cXHRcXHRpbnQgb3Blbl9mbGFncywgc3RydWN0IGlhdHRyICphdHRyLCBpbnQgKm9wZW5lZClcXG4tLVxcbmZzL25mcy9uZnM0cHJvYy5jPTEwNjM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBuZnM0X2Rpcl9pbm9kZV9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvbmZzL25mczRwcm9jLmMtMTA2MzctXFx0Lmxvb2t1cFxcdFxcdD0gbmZzX2xvb2t1cCxcXG5mcy9uZnMvbmZzNHByb2MuYzoxMDYzODpcXHQuYXRvbWljX29wZW5cXHQ9IG5mc19hdG9taWNfb3BlbixcXG5mcy9uZnMvbmZzNHByb2MuYy0xMDYzOS1cXHQubGlua1xcdFxcdD0gbmZzX2xpbmssXFxuLS1cXG5mcy9uZnMvbmZzNHByb2MuYz0xMDY4ND1jb25zdCBzdHJ1Y3QgbmZzX3JwY19vcHMgbmZzX3Y0X2NsaWVudG9wcyA9IHtcXG4tLVxcbmZzL25mcy9uZnM0cHJvYy5jLTEwNzI4LVxcdC5jbG9zZV9jb250ZXh0ICA9IG5mczRfY2xvc2VfY29udGV4dCxcXG5mcy9uZnMvbmZzNHByb2MuYzoxMDcyOTpcXHQub3Blbl9jb250ZXh0XFx0PSBuZnM0X2F0b21pY19vcGVuLFxcbmZzL25mcy9uZnM0cHJvYy5jLTEwNzMwLVxcdC5oYXZlX2RlbGVnYXRpb24gPSBuZnM0X2hhdmVfZGVsZWdhdGlvbixcXG4tLVxcbmZzL25mcy9uZnN0cmFjZS5oPTUxND1ERUZJTkVfTkZTX0xPT0tVUF9FVkVOVF9ET05FKG5mc19yZWFkZGlyX2xvb2t1cF9yZXZhbGlkYXRlKTtcXG5mcy9uZnMvbmZzdHJhY2UuaC01MTUtXFxuZnMvbmZzL25mc3RyYWNlLmg6NTE2OlRSQUNFX0VWRU5UKG5mc19hdG9taWNfb3Blbl9lbnRlcixcXG5mcy9uZnMvbmZzdHJhY2UuaC01MTctXFx0XFx0VFBfUFJPVE8oXFxuLS1cXG5mcy9uZnMvbmZzdHJhY2UuaC01NTEtXFxuZnMvbmZzL25mc3RyYWNlLmg6NTUyOlRSQUNFX0VWRU5UKG5mc19hdG9taWNfb3Blbl9leGl0LFxcbmZzL25mcy9uZnN0cmFjZS5oLTU1My1cXHRcXHRUUF9QUk9UTyhcXG4tLVxcbmZzL25mcy9wcm9jLmM9NzA4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBuZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9uZnMvcHJvYy5jLTcxMC1cXHQubG9va3VwXFx0XFx0PSBuZnNfbG9va3VwLFxcbmZzL25mcy9wcm9jLmM6NzExOlxcdC5hdG9taWNfb3BlblxcdD0gbmZzX2F0b21pY19vcGVuX3YyMyxcXG5mcy9uZnMvcHJvYy5jLTcxMi1cXHQubGlua1xcdFxcdD0gbmZzX2xpbmssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE4OjM4OjMyLjU4MDExODc2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQyMzI2ODIwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UndmUgZGVzY3JpYmVkOlxuXG4qKkNvbnNpZGVyaW5nIEF0b21pYyBPcGVucyBpbiBOZXR3b3JrIEZpbGVzeXN0ZW1zKipcblxuSG1tLCBzbyBpdCBzZWVtcyBgbmZzYCBhY3R1YWxseSBwcm92aWRlcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBgYXRvbWljX29wZW5gLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBnb29kIHRvIGtub3cuIEJ1dCwgd2hhdCBhYm91dCB0aGUgdmlydHVhbGJveCBzaGFyZWQgZm9sZGVyIGZpbGVzeXN0ZW0sIGB2Ym94c2ZgPyBJIHdvbmRlciBpZiBpdCBhbHNvIHByb3ZpZGVzIHN1Y2ggYSBmdW5jdGlvbmFsaXR5PyBUaGUgaW1wbGljYXRpb25zIG9mIGhhdmluZyBhdG9taWMgb3BlbiBvcGVyYXRpb25zLCBvciBub3QsIGFyZSBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgZmlsZSBzeXN0ZW0gY29uc2lzdGVuY3kgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gdmFyaW91cyBhcHBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgaW4gYSB2aXJ0dWFsaXplZCBvciBuZXR3b3JrZWQgY29udGV4dC4gVGhpcyB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24sIGFzIGl0cyBpbXBsZW1lbnRhdGlvbiBvciBsYWNrIHRoZXJlb2YgY2FuIGNlcnRhaW5seSBpbXBhY3QgdGhlIHN0YWJpbGl0eSBvZiBhcHBsaWNhdGlvbnMgcmVseWluZyBvbiB0aGF0IHBhcnRpY3VsYXIgRlMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MjAzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTg6Mzg6MzcuMDAzMzg5ODQzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjAxOTg0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdG9taWNfb3BlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy92Ym94c2YvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Zib3hzZi9kaXIuYz0zMDY9c3RhdGljIHN0cnVjdCBkZW50cnkgKnZib3hzZl9kaXJfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy92Ym94c2YvZGlyLmMtMzEyLVxcbmZzL3Zib3hzZi9kaXIuYzozMTM6c3RhdGljIGludCB2Ym94c2ZfZGlyX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuZnMvdmJveHNmL2Rpci5jLTMxNC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSlcXG4tLVxcbmZzL3Zib3hzZi9kaXIuYz00Njk9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdmJveHNmX2Rpcl9pb3BzID0ge1xcbi0tXFxuZnMvdmJveHNmL2Rpci5jLTQ3Mi1cXHQubWtkaXIgICA9IHZib3hzZl9kaXJfbWtkaXIsXFxuZnMvdmJveHNmL2Rpci5jOjQ3MzpcXHQuYXRvbWljX29wZW4gPSB2Ym94c2ZfZGlyX2F0b21pY19vcGVuLFxcbmZzL3Zib3hzZi9kaXIuYy00NzQtXFx0LnJtZGlyICAgPSB2Ym94c2ZfZGlyX3VubGluayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTg6Mzg6MzcuMTE1NDE1OTAyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkyNzU2MTM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBBdG9taWMgT3BlbiBJbXBsZW1lbnRhdGlvbnMgaW4gTmV0d29yayBGaWxlc3lzdGVtcyoqXG5cbkhtbSwgc28gYHZib3hzZmAgaXMgYWN0dWFsbHkgaW1wbGVtZW50aW5nIGBhdG9taWNfb3BlbmAgbm93LCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSXQncyBnb29kIHRvIHNlZSB0aGlzIGZ1bmN0aW9uYWxpdHkgYmVpbmcgYWRkcmVzc2VkLCBhbmQgSSdtIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIG9mIGNvdXJzZS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBob3cgZG9lcyB0aGlzIGNvbXBhcmUgdG8gb3RoZXIgdmlydHVhbCBmaWxlc3lzdGVtIHR5cGVzPyBJcyB0aGUgaW1wbGVtZW50YXRpb24gcm9idXN0IGFuZCBwZXJmb3JtYW50P1xuXG5CdXQgd2hhdCBhYm91dCBgY2lmc2A/ICpUaGF0J3MqIHRoZSBiaWcgb25lLiBJIHdvbmRlciBpZiB0aGUgYGNpZnNgIGZpbGVzeXN0ZW0gaGFzIGFkZHJlc3NlZCB0aGlzPyBUaGlzIGlzIGNyaXRpY2FsIGZvciBlbnN1cmluZyBkYXRhIGludGVncml0eSBkdXJpbmcgd3JpdGVzIGluIG5ldHdvcmtlZCBlbnZpcm9ubWVudHMuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgYGNpZnNgIGNvZGUgdG8gc2VlIGlmIHRoZXkgYXJlIGRvaW5nIGl0LCBhbmQgYWxzbyBmaWd1cmUgb3V0IGhvdyB3ZWxsIGBjaWZzYCBkZWFscyB3aXRoIHZhcmlvdXMgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucyBpbiBhIG1hbm5lciB0aGF0J3MgdHJhbnNhY3Rpb25hbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk2NTQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODozODo0MC4wNDI5ODIyN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzMTk3MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0b21pY19vcGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3NtYi9jbGllbnQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3NtYi9jbGllbnQvY2lmc2ZzLmM9MTIyOD1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBjaWZzX2Rpcl9pbm9kZV9vcHMgPSB7XFxuZnMvc21iL2NsaWVudC9jaWZzZnMuYy0xMjI5LVxcdC5jcmVhdGUgPSBjaWZzX2NyZWF0ZSxcXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jOjEyMzA6XFx0LmF0b21pY19vcGVuID0gY2lmc19hdG9taWNfb3BlbixcXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTEyMzEtXFx0LnRtcGZpbGUgPSBjaWZzX3RtcGZpbGUsXFxuLS1cXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5oPTU2PWludCBjaWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuZnMvc21iL2NsaWVudC9jaWZzZnMuaC01Ny1cXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSwgdW1vZGVfdCBtb2RlKTtcXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5oOjU4OmludCBjaWZzX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSxcXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5oLTU5LVxcdFxcdCAgICAgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBvZmxhZ3MsIHVtb2RlX3QgbW9kZSk7XFxuLS1cXG5mcy9zbWIvY2xpZW50L2Rpci5jPTQ4OT1zdGF0aWMgaW50IGNpZnNfZG9fY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSxcXG4tLVxcbmZzL3NtYi9jbGllbnQvZGlyLmMtNTE5LSAqL1xcbmZzL3NtYi9jbGllbnQvZGlyLmM6NTIwOmludCBjaWZzX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSxcXG5mcy9zbWIvY2xpZW50L2Rpci5jLTUyMS1cXHRcXHQgICAgIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgb2ZsYWdzLCB1bW9kZV90IG1vZGUpXFxuLS1cXG5mcy9zbWIvY2xpZW50L2Rpci5jLTU0Ni1cXHQgKiB0byBiZSBhIGRpci4gRm9yIGZpbGUgb3BlbnMsIHdlIHdhaXQgdG8gY2FsbCBwb3NpeCBvcGVuIHRpbGxcXG5mcy9zbWIvY2xpZW50L2Rpci5jOjU0NzpcXHQgKiBjaWZzX29wZW4uICBJdCBjb3VsZCBiZSBhZGRlZCB0byBhdG9taWNfb3BlbiBpbiB0aGUgZnV0dXJlIGJ1dCB0aGVcXG5mcy9zbWIvY2xpZW50L2Rpci5jLTU0OC1cXHQgKiBwZXJmb3JtYW5jZSB0cmFkZW9mZiBvZiB0aGUgZXh0cmEgbmV0d29yayByZXF1ZXN0IHdoZW4gRUlTRElSIG9yXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE4OjM4OjQwLjE1NjE4NTI4OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjIyMTQyMjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipGaWxlIFN5c3RlbSBJbnRlcm5hbHM6IEF0b21pYyBPcGVucyBhbmQgdGhlIDlQIFByb3RvY29sKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGRpZmZlcmVudCBmaWxlIHN5c3RlbXMgaGFuZGxlIGF0b21pYyBvcGVuIG9wZXJhdGlvbnMuIEkga25vdyBgY2lmc2AgYWN0dWFsbHkgaGFzIGEgcHJldHR5IGdvb2QgaW1wbGVtZW50YXRpb24gb2YgYGF0b21pY19vcGVuYC4gQnV0IHRoYXQgZ2V0cyBtZSB0aGlua2luZy4uLiB3aGF0IGFib3V0IGA5cGA/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCBpZiBpdHMgYXJjaGl0ZWN0dXJlIG5hdHVyYWxseSBsZW5kcyBpdHNlbGYgdG8gYXRvbWljIG9wZW5zLCBvciBpZiBpdCByZXF1aXJlcyBhIG1vcmUgZGVsaWJlcmF0ZSBhcHByb2FjaC4gSSBzaG91bGQgY2hlY2sgdGhlIHNwZWNpZmljYXRpb24gYW5kIGltcGxlbWVudGF0aW9ucyBmb3IgYDlwYCB0byB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IHN0YXRlIGFuZCBzZWUgaWYgaXQgY2FuIGJlIGVhc2lseSBpbXByb3ZlZC4gVGhpcyB3aWxsIGRldGVybWluZSBob3cgaXQgZnVuY3Rpb25zIGluIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDExLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTg6Mzg6NDIuNzc4MzI5NTk1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Njk2MjY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdG9taWNfb3BlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy85cC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvOXAvdmZzX2lub2RlLmM9NTc5PXY5ZnNfY3JlYXRlKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvOXAvdmZzX2lub2RlLmMtNjQ4LSAqXFxuZnMvOXAvdmZzX2lub2RlLmM6NjQ5OiAqIG9wZW4oLi4sIE9fQ1JFQVQpIGlzIGhhbmRsZWQgaW4gdjlmc192ZnNfYXRvbWljX29wZW4oKS4gIFRoaXMgaXMgb25seSBjYWxsZWRcXG5mcy85cC92ZnNfaW5vZGUuYy02NTAtICogZm9yIG1rbm9kKDIpLlxcbi0tXFxuZnMvOXAvdmZzX2lub2RlLmM9NzY3PXN0YXRpYyBpbnRcXG5mcy85cC92ZnNfaW5vZGUuYzo3Njg6djlmc192ZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG5mcy85cC92ZnNfaW5vZGUuYy03NjktXFx0XFx0ICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUpXFxuLS1cXG5mcy85cC92ZnNfaW5vZGUuYz0xMzY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB2OWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zX2RvdHUgPSB7XFxuLS1cXG5mcy85cC92ZnNfaW5vZGUuYy0xMzY3LVxcdC5sb29rdXAgPSB2OWZzX3Zmc19sb29rdXAsXFxuZnMvOXAvdmZzX2lub2RlLmM6MTM2ODpcXHQuYXRvbWljX29wZW4gPSB2OWZzX3Zmc19hdG9taWNfb3BlbixcXG5mcy85cC92ZnNfaW5vZGUuYy0xMzY5LVxcdC5zeW1saW5rID0gdjlmc192ZnNfc3ltbGluayxcXG4tLVxcbmZzLzlwL3Zmc19pbm9kZS5jPTEzODA9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHY5ZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy85cC92ZnNfaW5vZGUuYy0xMzgyLVxcdC5sb29rdXAgPSB2OWZzX3Zmc19sb29rdXAsXFxuZnMvOXAvdmZzX2lub2RlLmM6MTM4MzpcXHQuYXRvbWljX29wZW4gPSB2OWZzX3Zmc19hdG9taWNfb3BlbixcXG5mcy85cC92ZnNfaW5vZGUuYy0xMzg0LVxcdC51bmxpbmsgPSB2OWZzX3Zmc191bmxpbmssXFxuLS1cXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jPTIyNT1zdGF0aWMgaW50XFxuZnMvOXAvdmZzX2lub2RlX2RvdGwuYzoyMjY6djlmc192ZnNfYXRvbWljX29wZW5fZG90bChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbmZzLzlwL3Zmc19pbm9kZV9kb3RsLmMtMjI3LVxcdFxcdFxcdCAgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBmbGFncywgdW1vZGVfdCBvbW9kZSlcXG4tLVxcbmZzLzlwL3Zmc19pbm9kZV9kb3RsLmM9OTYyPWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHY5ZnNfZGlyX2lub2RlX29wZXJhdGlvbnNfZG90bCA9IHtcXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jLTk2My1cXHQuY3JlYXRlID0gdjlmc192ZnNfY3JlYXRlX2RvdGwsXFxuZnMvOXAvdmZzX2lub2RlX2RvdGwuYzo5NjQ6XFx0LmF0b21pY19vcGVuID0gdjlmc192ZnNfYXRvbWljX29wZW5fZG90bCxcXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jLTk2NS1cXHQubG9va3VwID0gdjlmc192ZnNfbG9va3VwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODozODo0Mi44NzUzMDE4MTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAxODYzMDQ0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IEF0b21pYyBPcGVuIGFuZCBGVVNFIENvbXBhdGliaWxpdHkqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgYDlwYCBmaWxlIHN5c3RlbSBpbXBsZW1lbnRzIGBhdG9taWNfb3BlbmAsIHdoaWNoIGlzIGdvb2QgdG8gc2VlLiBCdXQgdGhhdCBnb3QgbWUgdGhpbmtpbmcsIHdoYXQncyB0aGUgc3Rvcnkgd2l0aCBgZnVzZWA/IElzIHRoaXMgY2FwYWJpbGl0eSBtaXJyb3JlZCBpbiBgZnVzZWAncyBpbXBsZW1lbnRhdGlvbiwgb3IgYXJlIHRoZXJlIHNpZ25pZmljYW50IGRpZmZlcmVuY2VzIGluIGhvdyB0aG9zZSB0d28gaGFuZGxlIHRoaXMgY3JpdGljYWwgb3BlcmF0aW9uPyBBcmUgdGhlcmUgYW55IHBlcmZvcm1hbmNlIGJlbmVmaXRzIG9uIG9uZSB2cyB0aGUgb3RoZXI/IEkgd29uZGVyIGhvdyB0aGV5IGRlYWwgd2l0aCBjb25jdXJyZW5jeSwgb3IgaWYgb25lIGlzIGluaGVyZW50bHkgYSBiZXR0ZXIgY2hvaWNlIHdoZW4gZGVhbGluZyB3aXRoIHJhY2UgY29uZGl0aW9ucy4gSSBuZWVkIHRvIGRpdmUgZGVlcGVyIG9uIGhvdyB0aGV5J3JlIGhhbmRsaW5nIGF0b21pY2l0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEzNzcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODozODo0OS44OTM5MzY3MjlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODQ1NTEwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdG9taWNfb3BlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mdXNlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mdXNlL2Rpci5jPTkyOD1zdGF0aWMgaW50IGZ1c2VfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLFxcbmZzL2Z1c2UvZGlyLmMtOTI5LVxcdFxcdCAgICAgIHVtb2RlX3QsIGRldl90KTtcXG5mcy9mdXNlL2Rpci5jOjkzMDpzdGF0aWMgaW50IGZ1c2VfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmVudHJ5LFxcbmZzL2Z1c2UvZGlyLmMtOTMxLVxcdFxcdFxcdCAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgZmxhZ3MsXFxuLS1cXG5mcy9mdXNlL2Rpci5jPTIzOTY9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGZ1c2VfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9mdXNlL2Rpci5jLTI0MDUtXFx0LmNyZWF0ZVxcdFxcdD0gZnVzZV9jcmVhdGUsXFxuZnMvZnVzZS9kaXIuYzoyNDA2OlxcdC5hdG9taWNfb3BlblxcdD0gZnVzZV9hdG9taWNfb3BlbixcXG5mcy9mdXNlL2Rpci5jLTI0MDctXFx0LnRtcGZpbGVcXHQ9IGZ1c2VfdG1wZmlsZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTg6Mzg6NTAuMDMyMzk4NDg2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzM3NDgyMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgQXRvbWljIE9wZW4gSW1wbGVtZW50YXRpb25zKipcblxuUmlnaHQsIHNvIGBmdXNlYCBpbmNsdWRlcyBhbiBgYXRvbWljX29wZW5gIGltcGxlbWVudGF0aW9uLiBUaGF0J3MgZ29vZCB0byBrbm93LCBhbmQgaXQncyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB3aGVuIGNvbXBhcmluZyBkaWZmZXJlbnQgZmlsZSBzeXN0ZW1zLiBUaGUgaW1wbGljYXRpb25zIGhlcmUgYXJlIHNpZ25pZmljYW50IGZvciBkYXRhIGNvbnNpc3RlbmN5IGFuZCBob3cgd2UgaGFuZGxlIGNvbmN1cnJlbnQgYWNjZXNzLiBOb3csIHRoZSBrZXkgcXVlc3Rpb24gaXMsIHdoYXQgYWJvdXQgYG9yYW5nZWZzYD8gRG9lcyBpdCBvZmZlciBhIHNpbWlsYXIgbWVjaGFuaXNtIGZvciBhdG9taWMgb3BlbnM/IEkgbmVlZCB0byBkaWcgaW50byBpdHMgYXJjaGl0ZWN0dXJlIGFuZCBkb2N1bWVudGF0aW9uIHRvIHVuZGVyc3RhbmQgaG93IGl0IGhhbmRsZXMgZmlsZSBjcmVhdGlvbiBhbmQgbW9kaWZpY2F0aW9uIHdpdGggcmVzcGVjdCB0byBhdG9taWNpdHkuIFRoYXQncyBhIGNydWNpYWwgYXNwZWN0IGZvciBpdHMgb3ZlcmFsbCByZWxpYWJpbGl0eSBhbmQgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLCBlc3BlY2lhbGx5IGluIGEgZGlzdHJpYnV0ZWQgZW52aXJvbm1lbnQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29kZWJhc2UgYW5kIHRoZSBkb2N1bWVudGF0aW9uIHRvIGNoZWNrIGlmIHRoaXMgaXMgc3VwcG9ydGVkLCBhbmQgaWYgc28sIGhvdyBpdCBpcyBpbXBsZW1lbnRlZC4gSXMgaXQgbGV2ZXJhZ2luZyBrZXJuZWwgc3VwcG9ydCwgdXNlcnNwYWNlIHRyaWNrcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBudWFuY2VzIG9mIGl0cyBhcHByb2FjaCB3aWxsIGluZmx1ZW5jZSBteSBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTgwNywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE4OjM4OjUzLjM2NjE0ODk0NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NDgzNzE5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdG9taWNfb3BlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vcmFuZ2Vmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE4OjM4OjUzLjQ3MzY0Mjk2M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQ3OTM4NTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpZ2dpbmcgaW50byBPcmFuZ2VGUydzIEF0b21pY2l0eSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgYG9yYW5nZWZzYCBoYW5kbGVzIG9wZW5pbmcgZmlsZXMgYXRvbWljYWxseSwgYW5kIEknbSBwcmV0dHkgc3VyZSBpdCAqZG9lc24ndCogaGF2ZSBhbiBgYXRvbWljX29wZW5gIGNhbGwgaW1wbGVtZW50ZWQgZGlyZWN0bHkuIFRoYXQncyBhIGNvbW1vbiBjaGFyYWN0ZXJpc3RpYyBmb3IgZGlzdHJpYnV0ZWQgZmlsZSBzeXN0ZW1zLCBlc3BlY2lhbGx5IHdoZW4gY29uc2lkZXJpbmcgY29uc2lzdGVuY3kgbW9kZWxzIGFuZCBwZXJmb3JtYW5jZSB0cmFkZW9mZnMuIE5vdywgcmF0aGVyIHRoYW4ganVzdCBhc3N1bWUsIEkgbmVlZCB0byB2ZXJpZnkgaG93IGl0IGFjdHVhbGx5IGhhbmRsZXMgdGhlIGNyZWF0ZSBvcGVyYXRpb24uIExldCBtZSBzaGlmdCBteSBmb2N1cy4gSSdsbCBuZWVkIHRvIGdvIGxvb2sgaW50byB0aGUgYG9yYW5nZWZzX2NyZWF0ZWAgZnVuY3Rpb24uIEknbGwgYmV0IHRoYXQncyB3aGVyZSB0aGUgYXRvbWljIGFzcGVjdHMsIG9yIGxhY2sgdGhlcmVvZiwgYXJlIGhhbmRsZWQuIFRoaXMgc2hvdWxkIG9mZmVyIGNsdWVzIHRvIHVuZGVyc3RhbmQgaG93IGl0IGRlYWxzIHdpdGggdGhlIHBhcnRpYWwgd3JpdGVzIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjA3NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE4OjM4OjU2LjUyMTU4NDY2OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA4MDEwNjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3JhbmdlZnNfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29yYW5nZWZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vcmFuZ2Vmcy9kb3duY2FsbC5oPTIzPXN0cnVjdCBvcmFuZ2Vmc19sb29rdXBfcmVzcG9uc2Uge1xcbi0tXFxuZnMvb3JhbmdlZnMvZG93bmNhbGwuaC0yNi1cXG5mcy9vcmFuZ2Vmcy9kb3duY2FsbC5oOjI3OnN0cnVjdCBvcmFuZ2Vmc19jcmVhdGVfcmVzcG9uc2Uge1xcbmZzL29yYW5nZWZzL2Rvd25jYWxsLmgtMjgtXFx0c3RydWN0IG9yYW5nZWZzX29iamVjdF9rcmVmIHJlZm47XFxuLS1cXG5mcy9vcmFuZ2Vmcy9kb3duY2FsbC5oPTEwMD1zdHJ1Y3Qgb3JhbmdlZnNfZG93bmNhbGxfcyB7XFxuLS1cXG5mcy9vcmFuZ2Vmcy9kb3duY2FsbC5oLTEwOS1cXHRcXHRzdHJ1Y3Qgb3JhbmdlZnNfbG9va3VwX3Jlc3BvbnNlIGxvb2t1cDtcXG5mcy9vcmFuZ2Vmcy9kb3duY2FsbC5oOjExMDpcXHRcXHRzdHJ1Y3Qgb3JhbmdlZnNfY3JlYXRlX3Jlc3BvbnNlIGNyZWF0ZTtcXG5mcy9vcmFuZ2Vmcy9kb3duY2FsbC5oLTExMS1cXHRcXHRzdHJ1Y3Qgb3JhbmdlZnNfc3ltbGlua19yZXNwb25zZSBzeW07XFxuLS1cXG5mcy9vcmFuZ2Vmcy9uYW1laS5jLTE3LSAqL1xcbmZzL29yYW5nZWZzL25hbWVpLmM6MTg6c3RhdGljIGludCBvcmFuZ2Vmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuZnMvb3JhbmdlZnMvbmFtZWkuYy0xOS1cXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL29yYW5nZWZzL25hbWVpLmM9NDE2PWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9yYW5nZWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvb3JhbmdlZnMvbmFtZWkuYy00MTktXFx0LnNldF9hY2wgPSBvcmFuZ2Vmc19zZXRfYWNsLFxcbmZzL29yYW5nZWZzL25hbWVpLmM6NDIwOlxcdC5jcmVhdGUgPSBvcmFuZ2Vmc19jcmVhdGUsXFxuZnMvb3JhbmdlZnMvbmFtZWkuYy00MjEtXFx0LnVubGluayA9IG9yYW5nZWZzX3VubGluayxcXG4tLVxcbmZzL29yYW5nZWZzL3VwY2FsbC5oPTI3PXN0cnVjdCBvcmFuZ2Vmc19sb29rdXBfcmVxdWVzdF9zIHtcXG4tLVxcbmZzL29yYW5nZWZzL3VwY2FsbC5oLTMzLVxcbmZzL29yYW5nZWZzL3VwY2FsbC5oOjM0OnN0cnVjdCBvcmFuZ2Vmc19jcmVhdGVfcmVxdWVzdF9zIHtcXG5mcy9vcmFuZ2Vmcy91cGNhbGwuaC0zNS1cXHRzdHJ1Y3Qgb3JhbmdlZnNfb2JqZWN0X2tyZWYgcGFyZW50X3JlZm47XFxuLS1cXG5mcy9vcmFuZ2Vmcy91cGNhbGwuaD0yMjA9c3RydWN0IG9yYW5nZWZzX3VwY2FsbF9zIHtcXG4tLVxcbmZzL29yYW5nZWZzL3VwY2FsbC5oLTIzMi1cXHRcXHRzdHJ1Y3Qgb3JhbmdlZnNfbG9va3VwX3JlcXVlc3RfcyBsb29rdXA7XFxuZnMvb3JhbmdlZnMvdXBjYWxsLmg6MjMzOlxcdFxcdHN0cnVjdCBvcmFuZ2Vmc19jcmVhdGVfcmVxdWVzdF9zIGNyZWF0ZTtcXG5mcy9vcmFuZ2Vmcy91cGNhbGwuaC0yMzQtXFx0XFx0c3RydWN0IG9yYW5nZWZzX3N5bWxpbmtfcmVxdWVzdF9zIHN5bTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTg6Mzg6NTYuNjEyNDA4NDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDczNTA5NDg0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgRXhhbWluYXRpb24gb2YgYG9yYW5nZWZzX2NyZWF0ZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgb3JhbmdlZnNfY3JlYXRlYCBmdW5jdGlvbi4gSSdtIGltbWVkaWF0ZWx5IGN1cmlvdXMgYWJvdXQgaXRzIHJvbGUgd2l0aGluIHRoZSBPcmFuZ2VGUyBmaWxlIHN5c3RlbS4gTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmU6IHdoYXQncyB0aGUgdHlwaWNhbCBpbXBsZW1lbnRhdGlvbj8gSG93IGRvZXMgaXQgaGFuZGxlIGlub2RlIGFsbG9jYXRpb24gYW5kIG1ldGFkYXRhIHVwZGF0ZXM/IElzIGl0IGEgc2luZ2xlLWZ1bmN0aW9uIGNhbGwgb3IgYSB3cmFwcGVyIGZvciBzZXZlcmFsIGFjdGlvbnM/IEknbSBhbnRpY2lwYXRpbmcgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHVuZGVybHlpbmcgc3RvcmFnZSBhbmQgbmV0d29yayBsYXllcnMg4oCTIHByb2JhYmx5IHNvbWUgUlBDIGNhbGxzIHRvIG1ldGFkYXRhIHNlcnZlcnMsIHBvdGVudGlhbGx5IGRhdGEgc2VydmVyIGludGVyYWN0aW9ucyBkZXBlbmRpbmcgb24gdGhlIGZpbGUgc2l6ZSwgYW5kIGRlZmluaXRlbHkgc29tZSBsb2NraW5nIG1lY2hhbmlzbXMgaW52b2x2ZWQuIEknbGwgbmVlZCB0byBsb29rIGZvciBhbnkgb3B0aW1pemF0aW9ucyDigJMgZGVmZXJyZWQgdXBkYXRlcywgY2FjaGluZyBzdHJhdGVnaWVzLCBvciBwZXJoYXBzIGEgdHdvLXBoYXNlIGNvbW1pdCBhcHByb2FjaCBmb3IgYXRvbWljaXR5LiBJ4oCZbSB0aGlua2luZyBlcnJvciBoYW5kbGluZyBhbmQgcmVjb3ZlcnkgYXJlIHBhcmFtb3VudDsgaXQncyBhIGNyaXRpY2FsIHBvaW50IGluIGZpbGUgc3lzdGVtIG9wZXJhdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgc2lnbnMgb2YgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIHJhY2UgY29uZGl0aW9ucy4gVGhpcyBzaG91bGQgYmUgaW50ZXJlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODgwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTg6Mzk6MDEuMzQ3NTA2MjYzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9vcmFuZ2Vmcy9uYW1laS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDE4OlxcdHN0YXRpYyBpbnQgb3JhbmdlZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiAgMTk6XFx0XFx0XFx0XFx0c3RydWN0IGlub2RlICpkaXIsXFxuICAyMDpcXHRcXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuICAyMTpcXHRcXHRcXHRcXHR1bW9kZV90IG1vZGUpXFxuICAyMjpcXHR7XFxuICAyMzpcXHRcXHRzdHJ1Y3Qgb3JhbmdlZnNfaW5vZGVfcyAqcGFyZW50ID0gT1JBTkdFRlNfSShkaXIpO1xcbiAgMjQ6XFx0XFx0c3RydWN0IG9yYW5nZWZzX2tlcm5lbF9vcF9zICpuZXdfb3A7XFxuICAyNTpcXHRcXHRzdHJ1Y3Qgb3JhbmdlZnNfb2JqZWN0X2tyZWYgcmVmO1xcbiAgMjY6XFx0XFx0c3RydWN0IGlub2RlICppbm9kZTtcXG4gIDI3OlxcdFxcdHN0cnVjdCBpYXR0ciBpYXR0cjtcXG4gIDI4OlxcdFxcdGludCByZXQ7XFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdGdvc3NpcF9kZWJ1ZyhHT1NTSVBfTkFNRV9ERUJVRywgXFxcIiVzOiAlcGRcXFxcblxcXCIsXFxuICAzMTpcXHRcXHRcXHQgICAgIF9fZnVuY19fLFxcbiAgMzI6XFx0XFx0XFx0ICAgICBkZW50cnkpO1xcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHRuZXdfb3AgPSBvcF9hbGxvYyhPUkFOR0VGU19WRlNfT1BfQ1JFQVRFKTtcXG4gIDM1OlxcdFxcdGlmICghbmV3X29wKVxcbiAgMzY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuICAzNzpcXHRcXG4gIDM4OlxcdFxcdG5ld19vcC1cXHUwMDNldXBjYWxsLnJlcS5jcmVhdGUucGFyZW50X3JlZm4gPSBwYXJlbnQtXFx1MDAzZXJlZm47XFxuICAzOTpcXHRcXG4gIDQwOlxcdFxcdGZpbGxfZGVmYXVsdF9zeXNfYXR0cnMobmV3X29wLVxcdTAwM2V1cGNhbGwucmVxLmNyZWF0ZS5hdHRyaWJ1dGVzLCBtb2RlKTtcXG4gIDQxOlxcdFxcbiAgNDI6XFx0XFx0c3Ryc2NweShuZXdfb3AtXFx1MDAzZXVwY2FsbC5yZXEuY3JlYXRlLmRfbmFtZSwgZGVudHJ5LVxcdTAwM2VkX25hbWUubmFtZSk7XFxuICA0MzpcXHRcXG4gIDQ0OlxcdFxcdHJldCA9IHNlcnZpY2Vfb3BlcmF0aW9uKG5ld19vcCwgX19mdW5jX18sIGdldF9pbnRlcnJ1cHRpYmxlX2ZsYWcoZGlyKSk7XFxuICA0NTpcXHRcXG4gIDQ2OlxcdFxcdGdvc3NpcF9kZWJ1ZyhHT1NTSVBfTkFNRV9ERUJVRyxcXG4gIDQ3OlxcdFxcdFxcdCAgICAgXFxcIiVzOiAlcGQ6IGhhbmRsZTolcFU6IGZzaWQ6JWQ6IG5ld19vcDolcDogcmV0OiVkOlxcXFxuXFxcIixcXG4gIDQ4OlxcdFxcdFxcdCAgICAgX19mdW5jX18sXFxuICA0OTpcXHRcXHRcXHQgICAgIGRlbnRyeSxcXG4gIDUwOlxcdFxcdFxcdCAgICAgXFx1MDAyNm5ld19vcC1cXHUwMDNlZG93bmNhbGwucmVzcC5jcmVhdGUucmVmbi5raGFuZGxlLFxcbiAgNTE6XFx0XFx0XFx0ICAgICBuZXdfb3AtXFx1MDAzZWRvd25jYWxsLnJlc3AuY3JlYXRlLnJlZm4uZnNfaWQsXFxuICA1MjpcXHRcXHRcXHQgICAgIG5ld19vcCxcXG4gIDUzOlxcdFxcdFxcdCAgICAgcmV0KTtcXG4gIDU0OlxcdFxcbiAgNTU6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuICA1NjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDU3OlxcdFxcbiAgNTg6XFx0XFx0cmVmID0gbmV3X29wLVxcdTAwM2Vkb3duY2FsbC5yZXNwLmNyZWF0ZS5yZWZuO1xcbiAgNTk6XFx0XFxuICA2MDpcXHRcXHRpbm9kZSA9IG9yYW5nZWZzX25ld19pbm9kZShkaXItXFx1MDAzZWlfc2IsIGRpciwgU19JRlJFRyB8IG1vZGUsIDAsIFxcdTAwMjZyZWYpO1xcbiAgNjE6XFx0XFx0aWYgKElTX0VSUihpbm9kZSkpIHtcXG4gIDYyOlxcdFxcdFxcdGdvc3NpcF9lcnIoXFxcIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgaW5vZGUgZm9yIGZpbGUgOiVwZDpcXFxcblxcXCIsXFxuICA2MzpcXHRcXHRcXHRcXHQgICBfX2Z1bmNfXyxcXG4gIDY0OlxcdFxcdFxcdFxcdCAgIGRlbnRyeSk7XFxuICA2NTpcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKGlub2RlKTtcXG4gIDY2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAgNjc6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODozOTowMS4zNDc2NTM2MzNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4MjUxOTE0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBvcmFuZ2Vmc19jcmVhdGVgIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgSSdtIGltbWVkaWF0ZWx5IHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMgdG8gYG9yYW5nZWZzX2NyZWF0ZWAuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIEkgbmVlZCB0byBhbnN3ZXIgaXMgd2hldGhlciB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24gYWN0dWFsbHkgKnV0aWxpemVkKiB0aGUgYGJvb2wgZXhjbHVzaXZlYCBhcmd1bWVudC4gIFRoYXQgYXJndW1lbnQgaXMga2V5LCBiZWNhdXNlIGl0IHN1Z2dlc3RzIHRoZSBmdW5jdGlvbiBtaWdodCBoYXZlIGJlZW4gYWJsZSB0byBjcmVhdGUgZmlsZXMgd2l0aCBzcGVjaWZpYyBleGNsdXNpdml0eSBndWFyYW50ZWVzLCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGUgb2xkZXIgdmVyc2lvbiB1c2VkIHRoaXMgZmVhdHVyZSBvciBub3QuIElmIGl0IGRpZG4ndCwgdGhlIHBhdGNoIG1pZ2h0IGludHJvZHVjZSBhIHBlcmZvcm1hbmNlIHRyYWRlLW9mZiB0byBhZGQgYSBmZWF0dXJlIHdoaWNoIHdhcyBub3QgcHJldmlvdXNseSBwcmVzZW50LiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIG9sZCBjb2RlIGFuZCB2ZXJpZnkgaXRzIGJlaGF2aW91ci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM4OTksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE4OjM5OjA0LjMzMDE3NjIzNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY2ODI5NjEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4Y2x1c2l2ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vcmFuZ2Vmcy9uYW1laS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODozOTowNC40MTY4Njk4NzdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0NDQ0NTQzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBPQ0ZTMiBBUEkqKlxuXG5IbW0sIG5vLCBJIGRvbid0IHRoaW5rIHRoYXQgY29kZSBwYXRoIHV0aWxpemVkIHRoZSBleHBlY3RlZCBmdW5jdGlvbiBmb3IgZmlsZSBjcmVhdGlvbi4gSSBuZWVkIHRvIHJlLWV4YW1pbmUgdGhlIGNvbnRleHQuIFRoZSBwcm9ibGVtIGxpZXMgZWxzZXdoZXJlLlxuXG5Pa2F5LCBsZXQncyBzdGVwIGJhY2ssIGFuZCBxdWlja2x5IHJldHJhY2UgbXkgbWVudGFsIHN0ZXBzLiBUaGUgbW9yZSBmdW5kYW1lbnRhbCBxdWVzdGlvbiBpcywgd2hhdCBhYm91dCBgb2NmczJfY3JlYXRlYD8gSXQncyB0aGUgc3RhbmRhcmQgT0NGUzIgZmlsZSBjcmVhdGlvbiByb3V0aW5lLiBJIG5lZWQgdG8gY29uc2lkZXIsIGZyb20gZmlyc3QgcHJpbmNpcGxlcywgd2hlcmUgdGhhdCByb3V0aW5lIHdvdWxkIGhhdmUgYmVlbiBjYWxsZWQgKG9yIG5vdCBjYWxsZWQhKSB3aXRoaW4gdGhlIGtlcm5lbCBtb2R1bGUuIFdoYXQgYXJlIHRoZSBjYWxsaW5nIGNvbnZlbnRpb25zPyBJcyB0aGlzIHJlbGF0ZWQgdG8gaW5vZGUgY3JlYXRpb24sIGRpcmVjdG9yeSBlbnRyeSBjcmVhdGlvbiwgb3IgcGVyaGFwcyBzb21lIHNwZWNpZmljIE9DRlMyLXNwZWNpZmljIG1ldGFkYXRhIHVwZGF0ZT8gVGhlIGlzc3VlIHdpdGggbXkgcHJpb3IgYXNzdW1wdGlvbiBpcyB0aGF0IEkgY291bGQgaGF2ZSBtaXNzZWQgYSByZWxldmFudCBwYXJ0LCBwZXJoYXBzIHRoZSBsb2dpYyBhcm91bmQgdGhlIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MTI1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTg6Mzk6MDcuNDYxMzE4MDQzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9vY2ZzMi9uYW1laS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY2NyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY2NzpcXHRzdGF0aWMgaW50IG9jZnMyX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gNjY4OlxcdFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqZGlyLFxcbiA2Njk6XFx0XFx0XFx0XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiA2NzA6XFx0XFx0XFx0XFx0dW1vZGVfdCBtb2RlKVxcbiA2NzE6XFx0e1xcbiA2NzI6XFx0XFx0aW50IHJldDtcXG4gNjczOlxcdFxcbiA2NzQ6XFx0XFx0dHJhY2Vfb2NmczJfY3JlYXRlKGRpciwgZGVudHJ5LCBkZW50cnktXFx1MDAzZWRfbmFtZS5sZW4sIGRlbnRyeS1cXHUwMDNlZF9uYW1lLm5hbWUsXFxuIDY3NTpcXHRcXHRcXHRcXHQgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS1cXHUwMDNlaXBfYmxrbm8sIG1vZGUpO1xcbiA2NzY6XFx0XFx0cmV0ID0gb2NmczJfbWtub2QoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRlJFRywgMCk7XFxuIDY3NzpcXHRcXHRpZiAocmV0KVxcbiA2Nzg6XFx0XFx0XFx0bWxvZ19lcnJubyhyZXQpO1xcbiA2Nzk6XFx0XFxuIDY4MDpcXHRcXHRyZXR1cm4gcmV0O1xcbiA2ODE6XFx0fVxcbiA2ODI6XFx0XFxuIDY4MzpcXHRzdGF0aWMgaW50IG9jZnMyX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcXG4gNjg0OlxcdFxcdFxcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiA2ODU6XFx0XFx0XFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbiA2ODY6XFx0e1xcbiA2ODc6XFx0XFx0aGFuZGxlX3QgKmhhbmRsZTtcXG4gNjg4OlxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKG9sZF9kZW50cnkpO1xcbiA2ODk6XFx0XFx0c3RydWN0IGlub2RlICpvbGRfZGlyID0gZF9pbm9kZShvbGRfZGVudHJ5LVxcdTAwM2VkX3BhcmVudCk7XFxuIDY5MDpcXHRcXHRpbnQgZXJyO1xcbiA2OTE6XFx0XFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpmZV9iaCA9IE5VTEw7XFxuIDY5MjpcXHRcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9sZF9kaXJfYmggPSBOVUxMO1xcbiA2OTM6XFx0XFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpwYXJlbnRfZmVfYmggPSBOVUxMO1xcbiA2OTQ6XFx0XFx0c3RydWN0IG9jZnMyX2Rpbm9kZSAqZmUgPSBOVUxMO1xcbiA2OTU6XFx0XFx0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItXFx1MDAzZWlfc2IpO1xcbiA2OTY6XFx0XFx0c3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0IGxvb2t1cCA9IHsgTlVMTCwgfTtcXG4gNjk3OlxcdFxcdHNpZ3NldF90IG9sZHNldDtcXG4gNjk4OlxcdFxcdHU2NCBvbGRfZGVfaW5vO1xcbiA2OTk6XFx0XFxuIDcwMDpcXHRcXHR0cmFjZV9vY2ZzMl9saW5rKCh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShpbm9kZSktXFx1MDAzZWlwX2Jsa25vLFxcbiA3MDE6XFx0XFx0XFx0XFx0IG9sZF9kZW50cnktXFx1MDAzZWRfbmFtZS5sZW4sIG9sZF9kZW50cnktXFx1MDAzZWRfbmFtZS5uYW1lLFxcbiA3MDI6XFx0XFx0XFx0XFx0IGRlbnRyeS1cXHUwMDNlZF9uYW1lLmxlbiwgZGVudHJ5LVxcdTAwM2VkX25hbWUubmFtZSk7XFxuIDcwMzpcXHRcXG4gNzA0OlxcdFxcdGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKVxcbiA3MDU6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gNzA2OlxcdFxcbiA3MDc6XFx0XFx0ZXJyID0gZHF1b3RfaW5pdGlhbGl6ZShkaXIpO1xcbiA3MDg6XFx0XFx0aWYgKGVycikge1xcbiA3MDk6XFx0XFx0XFx0bWxvZ19lcnJubyhlcnIpO1xcbiA3MTA6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNzExOlxcdFxcdH1cXG4gNzEyOlxcdFxcbiA3MTM6XFx0XFx0ZXJyID0gb2NmczJfZG91YmxlX2xvY2sob3NiLCBcXHUwMDI2b2xkX2Rpcl9iaCwgb2xkX2RpcixcXG4gNzE0OlxcdFxcdFxcdFxcdFxcdTAwMjZwYXJlbnRfZmVfYmgsIGRpciwgMCk7XFxuIDcxNTpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiA3MTY6XFx0XFx0XFx0aWYgKGVyciAhPSAtRU5PRU5UKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODozOTowNy40NjE1MTc5MzJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2OTU2OTgwODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZW1vdmFsIG9mIHRoZSBgZXhjbGAgQXJndW1lbnQgZnJvbSBgY3JlYXRlYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCByZW1vdmVzIHRoZSBgZXhjbGAgYXJndW1lbnQgZnJvbSB0aGUgYGNyZWF0ZWAgaW5vZGUgb3BlcmF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYG9jZnMyX2NyZWF0ZWAgZGlkbid0IHVzZSBgZXhjbGAgZWl0aGVyLCBzbyBJIG5lZWQgdG8gZ28gZGVlcGVyLiBJJ20gY2hlY2tpbmcgYGZzL25hbWVpLmNgIGFnYWluLCBhbmQgc3BlY2lmaWNhbGx5IGBsb29rdXBfb3BlbmAuIEl0J3MgcHJldHR5IGNsZWFyIHRoYXQgYGxvb2t1cF9vcGVuYCBpcyBpbnZvbHZlZCB3aGVuIG9wZW5pbmcgYSBmaWxlLiBJZiBgT19DUkVBVGAgaXMgc2V0LCB0aGUgY29kZSBjYWxscyBgYXRvbWljX29wZW5gIGlmIHRoZSBmaWxlc3lzdGVtIGltcGxlbWVudHMgaXQuIElmIG5vdCwgaXQgZmFsbHMgYmFjayB0byBgY3JlYXRlYC5cblxuTm93LCBiZWZvcmUgdGhpcyBwYXRjaCwgdGhlIGNvZGUgcGFzc2VkIGBvcGVuX2ZsYWcgXHUwMDI2IE9fRVhDTGAgdG8gYGNyZWF0ZWAuIEJ1dCBub3cgaXQgZG9lc24ndC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uOiBpZiB0aGUgZmlsZXN5c3RlbSAqZG9lc24ndCogaW1wbGVtZW50IGBhdG9taWNfb3BlbmAsIGRvZXMgdGhhdCBtZWFuIGl0ICpkb2Vzbid0KiBzdXBwb3J0IGV4Y2x1c2l2ZSBjcmVhdGU/IE5vLCBJIHF1aWNrbHkgcmVhbGl6ZWQgdGhhdCBgY3JlYXRlYCB3YXMgdXNlZCBmb3IgYm90aCBleGNsdXNpdmUgYW5kIG5vbi1leGNsdXNpdmUgY3JlYXRlIHdoZW4gYGF0b21pY19vcGVuYCB3YXNuJ3QgcHJvdmlkZWQuXG5cblRoZSBjb21taXQgbWVzc2FnZSBjbGFyaWZpZXM6IHRoZSBgLmNyZWF0ZWAgaW5vZGUgb3BlcmF0aW9uIG5vIGxvbmdlciByZWNlaXZlcyBgZXhjbGAuIEl0ICphbHdheXMqIGFzc3VtZXMgdGhlIGZpbGUgZG9lc24ndCBleGlzdC4gSWYgdGhlIGZpbGVzeXN0ZW0gKm5lZWRzKiB0byBiZSBpbnZvbHZlZCBpbiBhIG5vbi1leGNsdXNpdmUgY3JlYXRlLCBpdCBzaG91bGQgaW1wbGVtZW50IGBhdG9taWNfb3BlbmAuXG5cbkhlcmUncyB0aGUgcHJvYmxlbTogaWYgYSBmaWxlc3lzdGVtICpkb2Vzbid0KiBwcm92aWRlIGBhdG9taWNfb3BlbmAsIFZGUyBoYW5kbGVzIG5vbi1leGNsdXNpdmUgY3JlYXRlIGJ5IGZpcnN0IGRvaW5nIGEgbG9va3VwLCBhbmQgaWYgaXQncyBub3QgZm91bmQsICp0aGVuKiBjYWxsaW5nIGBjcmVhdGVgLiBCdXQgdGhlcmUncyBhIHJhY2UgY29uZGl0aW9uIHRoZXJlOiBiZXR3ZWVuIHRoZSBsb29rdXAgYW5kIHRoZSBgY3JlYXRlYCBjYWxsLCBzb21lb25lIGVsc2UgY291bGQgY3JlYXRlIHRoZSBmaWxlLiBTbywgaWYgYGNyZWF0ZWAgYXNzdW1lcyB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgaXQgd2lsbCBqdXN0IGNyZWF0ZSBpdCwgYW5kIGl0IGNvdWxkIG92ZXJ3cml0ZSBhbiBleGlzdGluZyBmaWxlLiBCdXQgd2FpdCwgVkZTIGhhbmRsZXMgYEVFWElTVGAgaWYgYE9fRVhDTGAgaXMgc2V0LiBPa2F5LCBWRlMgYWxyZWFkeSBkaWQgYSBsb29rdXAgYW5kIGZvdW5kIGEgbmVnYXRpdmUgZGVudHJ5ICh0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IHlldCkgYmVmb3JlIGBjcmVhdGVgIGlzIGNhbGxlZC4gU28sIHRoZSBmaWxlc3lzdGVtJ3MgYGNyZWF0ZWAgb3BlcmF0aW9uICpzaG91bGQqIGNyZWF0ZSB0aGUgZmlsZS4gSWYgYW5vdGhlciBwcm9jZXNzIGNyZWF0ZWQgdGhlIGZpbGUgY29uY3VycmVudGx5LCB0aGUgZmlsZXN5c3RlbSdzIGBjcmVhdGVgICh3aGljaCBsaWtlbHkgZG9lcyBhbiBpbnRlcm5hbCBleGNsdXNpdmUgY3JlYXRlLCBsaWtlIGBta25vZGApIHdpbGwgcmV0dXJuIGBFRVhJU1RgLCBhbmQgdGhlbiBWRlMgd2lsbCBoYW5kbGUgdGhhdCBlcnJvci5cblxuTm93IEkgbmVlZCB0byBzZWUgaWYgYW55IGZpbGVzeXN0ZW0gKmFjdHVhbGx5KiB1c2VkIHRoZSBgZXhjbGAgYXJndW1lbnQgaW4gYGNyZWF0ZWAgYmVmb3JlIHRoaXMgY2hhbmdlLiBMZXQncyBsb29rIGF0IGBnZnMyYCwgYG5mc2AsIGFuZCBgdmJveHNmYCB3aGljaCBJIHNhdyBoYWQgaW50ZXJuYWwgY2hhbmdlcy4gQ2hlY2tpbmcgYGdmczJfY3JlYXRlYCBjb25maXJtcyBteSBzdXNwaWNpb246XG5cbmBgYGNcbi1cdHJldHVybiBnZnMyX2NyZWF0ZV9pbm9kZShkaXIsIGRlbnRyeSwgTlVMTCwgU19JRlJFRyB8IG1vZGUsIDAsIE5VTEwsIDAsIGV4Y2wpO1xuK1x0cmV0dXJuIGdmczJfY3JlYXRlX2lub2RlKGRpciwgZGVudHJ5LCBOVUxMLCBTX0lGUkVHIHwgbW9kZSwgMCwgTlVMTCwgMCwgMSk7XG5gYGBcblxuT2theSwgYGdmczJfY3JlYXRlX2lub2RlYCAqZG9lcyogdGFrZSBgZXhjbGAgYXMgaXRzIGxhc3QgYXJndW1lbnQuIE5vdyBJIG5lZWQgdG8gY2hlY2sgd2hhdCBgZ2ZzMl9jcmVhdGVfaW5vZGVgIGRvZXMgd2l0aCB0aGUgYGV4Y2xgIGFyZ3VtZW50IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUyMjAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODozOToxOC4xNTcyMTg3OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE5NzczMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdmczJfY3JlYXRlX2lub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2dmczIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2dmczIvaW5vZGUuYz02NjQ9c3RhdGljIGludCBnZnMyX2luaXR4YXR0cnMoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgc3RydWN0IHhhdHRyICp4YXR0cl9hcnJheSxcXG4tLVxcbmZzL2dmczIvaW5vZGUuYy02ODAtLyoqXFxuZnMvZ2ZzMi9pbm9kZS5jOjY4MTogKiBnZnMyX2NyZWF0ZV9pbm9kZSAtIENyZWF0ZSBhIG5ldyBpbm9kZVxcbmZzL2dmczIvaW5vZGUuYy02ODItICogQGRpcjogVGhlIHBhcmVudCBkaXJlY3RvcnlcXG4tLVxcbmZzL2dmczIvaW5vZGUuYy02OTktXFxuZnMvZ2ZzMi9pbm9kZS5jOjcwMDpzdGF0aWMgaW50IGdmczJfY3JlYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuZnMvZ2ZzMi9pbm9kZS5jLTcwMS1cXHRcXHRcXHQgICAgIHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZnMvZ2ZzMi9pbm9kZS5jPTk3MT1zdGF0aWMgaW50IGdmczJfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL2dmczIvaW5vZGUuYy05NzMte1xcbmZzL2dmczIvaW5vZGUuYzo5NzQ6XFx0cmV0dXJuIGdmczJfY3JlYXRlX2lub2RlKGRpciwgZGVudHJ5LCBOVUxMLCBTX0lGUkVHIHwgbW9kZSwgMCwgTlVMTCwgMCwgMSk7XFxuZnMvZ2ZzMi9pbm9kZS5jLTk3NS19XFxuLS1cXG5mcy9nZnMyL2lub2RlLmM9MTMyNz1zdGF0aWMgaW50IGdmczJfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9nZnMyL2lub2RlLmMtMTMzNS1cXG5mcy9nZnMyL2lub2RlLmM6MTMzNjpcXHRyZXR1cm4gZ2ZzMl9jcmVhdGVfaW5vZGUoZGlyLCBkZW50cnksIE5VTEwsIFNfSUZMTksgfCBTX0lSV1hVR08sIDAsIHN5bW5hbWUsIHNpemUsIDApO1xcbmZzL2dmczIvaW5vZGUuYy0xMzM3LX1cXG4tLVxcbmZzL2dmczIvaW5vZGUuYz0xMzQ5PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpnZnMyX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL2dmczIvaW5vZGUuYy0xMzUzLVxcbmZzL2dmczIvaW5vZGUuYzoxMzU0OlxcdHJldHVybiBFUlJfUFRSKGdmczJfY3JlYXRlX2lub2RlKGRpciwgZGVudHJ5LCBOVUxMLCBTX0lGRElSIHwgbW9kZSwgMCwgTlVMTCwgZHNpemUsIDApKTtcXG5mcy9nZnMyL2lub2RlLmMtMTM1NS19XFxuLS1cXG5mcy9nZnMyL2lub2RlLmM9MTM2Nz1zdGF0aWMgaW50IGdmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvZ2ZzMi9pbm9kZS5jLTEzNjkte1xcbmZzL2dmczIvaW5vZGUuYzoxMzcwOlxcdHJldHVybiBnZnMyX2NyZWF0ZV9pbm9kZShkaXIsIGRlbnRyeSwgTlVMTCwgbW9kZSwgZGV2LCBOVUxMLCAwLCAwKTtcXG5mcy9nZnMyL2lub2RlLmMtMTM3MS19XFxuLS1cXG5mcy9nZnMyL2lub2RlLmM9MTM4ND1zdGF0aWMgaW50IGdmczJfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL2dmczIvaW5vZGUuYy0xNDAzLVxcbmZzL2dmczIvaW5vZGUuYzoxNDA0OlxcdHJldHVybiBnZnMyX2NyZWF0ZV9pbm9kZShkaXIsIGRlbnRyeSwgZmlsZSwgU19JRlJFRyB8IG1vZGUsIDAsIE5VTEwsIDAsIGV4Y2wpO1xcbmZzL2dmczIvaW5vZGUuYy0xNDA1LX1cXG4tLVxcbmZzL2dmczIvc3VwZXIuYz0xMjg5PXN0YXRpYyBpbnQgZXZpY3RfdW5saW5rZWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGdmczJfaG9sZGVyICpnaClcXG4tLVxcbmZzL2dmczIvc3VwZXIuYy0xMzE4LVxcdC8qXFxuZnMvZ2ZzMi9zdXBlci5jOjEzMTk6XFx0ICogQXMgc29vbiBhcyB3ZSBjbGVhciB0aGUgYml0bWFwIGZvciB0aGUgZGlub2RlLCBnZnMyX2NyZWF0ZV9pbm9kZSgpXFxuZnMvZ2ZzMi9zdXBlci5jLTEzMjAtXFx0ICogY2FuIGdldCBjYWxsZWQgdG8gcmVjcmVhdGUgaXQsIG9yIGV2ZW4gZ2ZzMl9pbm9kZV9sb29rdXAoKSBpZiB0aGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTg6Mzk6MTguNjc2OTk5OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzU5MTI4MTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIGBnZnMyX2NyZWF0ZV9pbm9kZWAgYW5kIGBhdG9taWNfb3BlbmAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBnZnMyX2F0b21pY19vcGVuYCBmdW5jdGlvbi4gSXQncyBjYWxsaW5nIGBnZnMyX2NyZWF0ZV9pbm9kZWAsIHdoaWNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhhdCBmdW5jdGlvbiBpcyBhbHNvIGNlbnRyYWwgdG8gaG93IEdGUzIgY3JlYXRlcyBpbm9kZXMuIEknbSBub3RpbmcgdGhhdCBgZ2ZzMl9hdG9taWNfb3BlbmAgcGFzc2VzIHRoZSBgZXhjbGAgZmxhZyBkaXJlY3RseSB0byBgZ2ZzMl9jcmVhdGVfaW5vZGVgLCBhbmQgdGhhdCB0aGUgYGV4Y2xgIGZsYWcgaW5kaWNhdGVzIGV4Y2x1c2l2ZSBhY2Nlc3MuXG5cbkkgc2VlIHRoYXQgdGhlIG9sZCB2ZXJzaW9uIG9mIHRoZSBgZ2ZzMl9jcmVhdGVfaW5vZGVgIGZ1bmN0aW9uIHdhcyB1c2VkIGJ5IGJvdGgsIGJ1dCB0aGUgcGF0Y2ggaGFyZGNvZGVzIHRoZSBgZXhjbGAgZmxhZyBhcyB0cnVlLiBXYWl0LCB0aGF0IG1ha2VzIHNlbnNlLiBUaGUgY29tbWVudCBzYXlzIHRoYXQgdGhlIGAuY3JlYXRlYCBpbm9kZSBvcGVyYXRpb24gbm8gbG9uZ2VyIGdldHMgdGhlIGBleGNsYCBhcmd1bWVudCBhbmQgdGhhdCBpdCBhc3N1bWVzIHRoZSBmaWxlIGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4gVGhlIGNvbW1pdCBzZWVtcyBwZXJmZWN0bHkgYWxpZ25lZCB3aXRoIHRoZSBwYXRjaC4gU2luY2UgYGdmczJfY3JlYXRlYCBub3cgKm9ubHkqIGdldHMgY2FsbGVkIGZvciBleGNsdXNpdmUgY3JlYXRlcywgaGFyZGNvZGluZyBgZXhjbD10cnVlYCBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8sIG9yIHdoZW4gVkZTIGhhbmRsZXMgdGhlIG5vbi1leGNsdXNpdmUgcGFydC4gSXQncyBlc3NlbnRpYWxseSBzaW1wbGlmeWluZyB0aGUgY29kZSBwYXRoIGJlY2F1c2UgYGdmczJfY3JlYXRlYCBub3cgYXNzdW1lcyB0aGF0IGV4Y2x1c2l2aXR5IGlzIHBhcnQgb2YgdGhlIGNhbGxpbmcgY29udGV4dC5cblxuTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgTkZTLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzY5NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODozOToyNS4wMzYxMzA4NjZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDA4NDY1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnNfZG9fY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25mcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmZzL2Rpci5jPTU3PXN0YXRpYyB2b2lkIG5mc19yZWFkZGlyX2NsZWFyX2FycmF5KHN0cnVjdCBmb2xpbyAqKTtcXG5mcy9uZnMvZGlyLmM6NTg6c3RhdGljIGludCBuZnNfZG9fY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuZnMvbmZzL2Rpci5jLTU5LVxcdFxcdFxcdCB1bW9kZV90IG1vZGUsIGludCBvcGVuX2ZsYWdzKTtcXG4tLVxcbmZzL25mcy9kaXIuYz0yMzA2PWludCBuZnNfYXRvbWljX29wZW5fdjIzKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9uZnMvZGlyLmMtMjMxOS1cXHRpZiAob3Blbl9mbGFncyBcXHUwMDI2IE9fQ1JFQVQpIHtcXG5mcy9uZnMvZGlyLmM6MjMyMDpcXHRcXHRlcnJvciA9IG5mc19kb19jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUsIG9wZW5fZmxhZ3MpO1xcbmZzL25mcy9kaXIuYy0yMzIxLVxcdFxcdGlmICghZXJyb3IpIHtcXG4tLVxcbmZzL25mcy9kaXIuYz0yMzkyPUVYUE9SVF9TWU1CT0xfR1BMKG5mc19pbnN0YW50aWF0ZSk7XFxuLS1cXG5mcy9uZnMvZGlyLmMtMjM5OS0gKi9cXG5mcy9uZnMvZGlyLmM6MjQwMDpzdGF0aWMgaW50IG5mc19kb19jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG5mcy9uZnMvZGlyLmMtMjQwMS1cXHRcXHRcXHQgdW1vZGVfdCBtb2RlLCBpbnQgb3Blbl9mbGFncylcXG4tLVxcbmZzL25mcy9kaXIuYz0yNDI5PWludCBuZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL25mcy9kaXIuYy0yNDMxLXtcXG5mcy9uZnMvZGlyLmM6MjQzMjpcXHRyZXR1cm4gbmZzX2RvX2NyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSwgT19FWENMKTtcXG5mcy9uZnMvZGlyLmMtMjQzMy19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE4OjM5OjI1LjE3NjIyMTY1M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzE4Njc5ODgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkFuYWx5emluZyBORlMgRmlsZSBDcmVhdGlvbiBhbmQgYHZib3hzZmAgSW1wbGljYXRpb25zKipcblxuUmlnaHQsIHNvIGBuZnNfZG9fY3JlYXRlYCBpcyBkZWZpbml0ZWx5IHVzZWQgaW4gYG5mc19hdG9taWNfb3Blbl92MjNgLCBhbmQgY3J1Y2lhbGx5LCB0aGF0IGZ1bmN0aW9uIGlzIHBhc3NpbmcgdGhyb3VnaCBgb3Blbl9mbGFnc2AuIFRoYXQncyBpbXBvcnRhbnQuIEl0IGNvbmZpcm1zIG15IHVuZGVyc3RhbmRpbmcgdGhhdCB0aGUgdXNlIG9mIGBPX0VYQ0xgIHdpdGhpbiBgbmZzX2NyZWF0ZWAgaXMsIGluIGZhY3QsIGNvcnJlY3QsIGdpdmVuIHRoYXQgcGF0aC4gV2UncmUgZWZmZWN0aXZlbHkgcmV1c2luZyBhIGxvd2VyLWxldmVsIGZ1bmN0aW9uIHdpdGggYWRkZWQgZnVuY3Rpb25hbGl0eS5cblxuQnV0LCBhIHRob3VnaHQsIHdoYXQgYWJvdXQgdGhlIGludGVyYWN0aW9uIHdpdGggYHZib3hzZmA/IEkgbmVlZCB0byBjb25zaWRlciBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoaXMgYXBwcm9hY2guIERvZXMgYHZib3hzZmAgdXNlIGEgc2ltaWxhciBwYXR0ZXJuPyBEb2VzIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgZGlmZmVyZW50IGZsYWcgdXNlIGNhdXNlIGFueSBpc3N1ZXMsIG9yIGlzIGl0IGFscmVhZHkgaGFuZGxlZD8gSSByZWFsbHkgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IHRoaXMgaW50ZXJhY3RzIGluIHRoZSBjb250ZXh0IG9mIGB2Ym94c2ZgLCBhcyB0aGF0IGlzIGFuIGFyZWEgd2hpY2ggaGFzIHNvbWV0aW1lcyBzaG93biB1bmV4cGVjdGVkIGJlaGF2aW91ci4gVGhhdCdzIHRoZSBuZXh0IHN0ZXA7IG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSB2Ym94c2YgY29kZSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODczOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE4OjM5OjI4Ljg5NDkwNDY2M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY4OTYyNDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmJveHNmX2Rpcl9jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvdmJveHNmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy92Ym94c2YvZGlyLmM9MjM2PXN0YXRpYyBpbnQgdmJveHNmX2Rpcl9pbnN0YW50aWF0ZShzdHJ1Y3QgaW5vZGUgKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvdmJveHNmL2Rpci5jLTI1Ni1cXG5mcy92Ym94c2YvZGlyLmM6MjU3OnN0YXRpYyBpbnQgdmJveHNmX2Rpcl9jcmVhdGUoc3RydWN0IGlub2RlICpwYXJlbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG5mcy92Ym94c2YvZGlyLmMtMjU4LVxcdFxcdFxcdCAgICAgdW1vZGVfdCBtb2RlLCBib29sIGlzX2RpciwgYm9vbCBleGNsLCB1NjQgKmhhbmRsZV9yZXQpXFxuLS1cXG5mcy92Ym94c2YvZGlyLmM9Mjk5PXN0YXRpYyBpbnQgdmJveHNmX2Rpcl9ta2ZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy92Ym94c2YvZGlyLmMtMzAyLXtcXG5mcy92Ym94c2YvZGlyLmM6MzAzOlxcdHJldHVybiB2Ym94c2ZfZGlyX2NyZWF0ZShwYXJlbnQsIGRlbnRyeSwgbW9kZSwgZmFsc2UsIHRydWUsIE5VTEwpO1xcbmZzL3Zib3hzZi9kaXIuYy0zMDQtfVxcbi0tXFxuZnMvdmJveHNmL2Rpci5jPTMwNj1zdGF0aWMgc3RydWN0IGRlbnRyeSAqdmJveHNmX2Rpcl9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL3Zib3hzZi9kaXIuYy0zMDkte1xcbmZzL3Zib3hzZi9kaXIuYzozMTA6XFx0cmV0dXJuIEVSUl9QVFIodmJveHNmX2Rpcl9jcmVhdGUocGFyZW50LCBkZW50cnksIG1vZGUsIHRydWUsIHRydWUsIE5VTEwpKTtcXG5mcy92Ym94c2YvZGlyLmMtMzExLX1cXG4tLVxcbmZzL3Zib3hzZi9kaXIuYz0zMTM9c3RhdGljIGludCB2Ym94c2ZfZGlyX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy92Ym94c2YvZGlyLmMtMzMwLVxcbmZzL3Zib3hzZi9kaXIuYzozMzE6XFx0ZXJyID0gdmJveHNmX2Rpcl9jcmVhdGUocGFyZW50LCBkZW50cnksIG1vZGUsIGZhbHNlLCBmbGFncyBcXHUwMDI2IE9fRVhDTCwgXFx1MDAyNmhhbmRsZSk7XFxuZnMvdmJveHNmL2Rpci5jLTMzMi1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODozOToyOC45OTE4MDY1NjRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUwNzEyNzgzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9ucyBvZiBhIEZpbGVzeXN0ZW0gUmVmYWN0b3IqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGB2Ym94c2ZfZGlyX2NyZWF0ZWAgaXMgYmVpbmcgdXNlZCBieSBgdmJveHNmX2Rpcl9hdG9taWNfb3BlbmAsIHdoaWNoIGlzIGFscmVhZHkgaGFuZGxpbmcgYE9fRVhDTGAgZmxhZ3MuIEFsc28sIHRoZSBgdmJveHNmX2Rpcl9ta2ZpbGVgICh3aGljaCBpcyB0aGUgYWN0dWFsIGAuY3JlYXRlYCBvcGVyYXRpb24pIHBhc3NlcyBgdHJ1ZWAgZm9yIGV4Y2x1c2l2ZSBjcmVhdGlvbi4gU28sIHRoZSBgLmNyZWF0ZWAgaW5vZGUgb3BlcmF0aW9uIGlzIG5vdyAqc3RyaWN0bHkqIGZvciBleGNsdXNpdmUgY3JlYXRlcy4gSXQgc2VlbXMgdGhlIFZGUyBsYXllciBpcyB0YWtpbmcgcmVzcG9uc2liaWxpdHkgZm9yIGhhbmRsaW5nIG5vbi1leGNsdXNpdmUgc2NlbmFyaW9zLCBhbmQgdGhlIGZpbGVzeXN0ZW0gY29kZSBjYW4ganVzdCBhc3N1bWUgdGhlIGZpbGUgZG9lc24ndCBleGlzdC5cblxuVGhpcyBmZWVscyBsaWtlIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCB0aGUgaW1wbGljYXRpb24gaXMgdGhhdCB3ZSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gZnV6emluZyB0aGlzLiBJdCdzIG5vdCBhIGxvY2FsaXplZCBjaGFuZ2U7IGl04oCZcyBhIHRyZWUtd2lkZSByZWZhY3RvcmluZyB0aGF0IGFmZmVjdHMgdGhlIGJlaGF2aW9yIG9mIGB2ZnNfY3JlYXRlYCBhbmQgYGxvb2t1cF9vcGVuYCBpbiBob3cgdGhleSBjYWxsIGBjcmVhdGVgLiBUaGUgY2hhbmdlcyBhcmUgc3VidGxlLCBidXQgdGhleSBjb3VsZCBoYXZlIHNlcmlvdXMgY29uc2VxdWVuY2VzLlxuXG5XYWl0IGEgc2Vjb25k4oCmIGB2ZnNfY3JlYXRlYCAqdXNlZCogdG8gcGFzcyBgdHJ1ZWAgZm9yIGV4Y2x1c2l2ZSBjcmVhdGlvbiAoYGV4Y2xgKSwgYW5kIG5vdyBpdCBkb2Vzbid0IHBhc3MgYW55dGhpbmcuIFRoZSBmaWxlc3lzdGVtIG5vdyBpbXBsaWNpdGx5IGFzc3VtZXMgYHRydWVgLiBBbmQgYGxvb2t1cF9vcGVuYCAqdXNlZCogdG8gcGFzcyBgb3Blbl9mbGFnIFx1MDAyNiBPX0VYQ0xgLiBOb3csIGl0IGRvZXNuJ3QgcGFzcyBhbnl0aGluZywgYW5kIHRoZSBmaWxlc3lzdGVtIHN0aWxsIGltcGxpY2l0bHkgYXNzdW1lcyBgdHJ1ZWAuXG5cbkhvbGQgb24uLi4gaWYgYGxvb2t1cF9vcGVuYCAqdXNlZCogdG8gcGFzcyB0aGUgYml0d2lzZSBBTkQgb2YgdGhlIGBvcGVuX2ZsYWdgIGFuZCBgT19FWENMYCwgYW5kIG5vdyBpdCdzICpub3QqIHBhc3NpbmcgYW55dGhpbmcsIGFuZCB0aGUgZmlsZXN5c3RlbSBhbHdheXMgYXNzdW1lcyBgdHJ1ZWAsIHRoZW4gZm9yIG5vbi1leGNsdXNpdmUgY3JlYXRlcyAoYE9fQ1JFQVRgIHdpdGhvdXQgYE9fRVhDTGApLCB0aGUgZmlsZXN5c3RlbSdzIGBjcmVhdGVgIG1ldGhvZCBpcyAqbm93KiBiZWhhdmluZyBhcyBpZiBgT19FWENMYCAqd2FzKiBwYXNzZWQhIFRoYXQncyBhIGJyZWFraW5nIGNoYW5nZS5cblxuSXMgdGhhdCByZWFsbHkgd2hhdCB0aGlzIG1lYW5zPyBBbSBJIHVuZGVyc3RhbmRpbmcgdGhpcyBjb3JyZWN0bHk/IEkgYmV0dGVyIGRvdWJsZS1jaGVjayBgbG9va3VwX29wZW5gIGluIGBmcy9uYW1laS5jYCB0byBiZSBjZXJ0YWluLiBHb3R0YSBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTUzMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODozOTozNS40OTg5Mzc1ODZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1OTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9uYW1laS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ0ODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ0ODA6XFx0XFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHtcXG40NDgxOlxcdFxcdFxcdHN0cnVjdCBkZW50cnkgKnJlcyA9IGRpcl9pbm9kZS1cXHUwMDNlaV9vcC1cXHUwMDNlbG9va3VwKGRpcl9pbm9kZSwgZGVudHJ5LFxcbjQ0ODI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBuZC1cXHUwMDNlZmxhZ3MpO1xcbjQ0ODM6XFx0XFx0XFx0ZF9sb29rdXBfZG9uZShkZW50cnkpO1xcbjQ0ODQ6XFx0XFx0XFx0aWYgKHVubGlrZWx5KHJlcykpIHtcXG40NDg1OlxcdFxcdFxcdFxcdGlmIChJU19FUlIocmVzKSkge1xcbjQ0ODY6XFx0XFx0XFx0XFx0XFx0ZXJyb3IgPSBQVFJfRVJSKHJlcyk7XFxuNDQ4NzpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF9kcHV0O1xcbjQ0ODg6XFx0XFx0XFx0XFx0fVxcbjQ0ODk6XFx0XFx0XFx0XFx0ZHB1dChkZW50cnkpO1xcbjQ0OTA6XFx0XFx0XFx0XFx0ZGVudHJ5ID0gcmVzO1xcbjQ0OTE6XFx0XFx0XFx0fVxcbjQ0OTI6XFx0XFx0fVxcbjQ0OTM6XFx0XFxuNDQ5NDpcXHRcXHQvKiBOZWdhdGl2ZSBkZW50cnksIGp1c3QgY3JlYXRlIHRoZSBmaWxlICovXFxuNDQ5NTpcXHRcXHRpZiAoIWRlbnRyeS1cXHUwMDNlZF9pbm9kZSBcXHUwMDI2XFx1MDAyNiAob3Blbl9mbGFnIFxcdTAwMjYgT19DUkVBVCkpIHtcXG40NDk2OlxcdFxcdFxcdC8qIGJ1dCBicmVhayB0aGUgZGlyZWN0b3J5IGxlYXNlIGZpcnN0ISAqL1xcbjQ0OTc6XFx0XFx0XFx0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyX2lub2RlLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkZWxlZ2F0ZWRfaW5vZGUpO1xcbjQ0OTg6XFx0XFx0XFx0aWYgKGVycm9yKVxcbjQ0OTk6XFx0XFx0XFx0XFx0Z290byBvdXRfZHB1dDtcXG40NTAwOlxcdFxcbjQ1MDE6XFx0XFx0XFx0ZmlsZS1cXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NSRUFURUQ7XFxuNDUwMjpcXHRcXHRcXHRhdWRpdF9pbm9kZV9jaGlsZChkaXJfaW5vZGUsIGRlbnRyeSwgQVVESVRfVFlQRV9DSElMRF9DUkVBVEUpO1xcbjQ1MDM6XFx0XFx0XFx0aWYgKCFkaXJfaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWNyZWF0ZSkge1xcbjQ1MDQ6XFx0XFx0XFx0XFx0ZXJyb3IgPSAtRUFDQ0VTO1xcbjQ1MDU6XFx0XFx0XFx0XFx0Z290byBvdXRfZHB1dDtcXG40NTA2OlxcdFxcdFxcdH1cXG40NTA3OlxcdFxcbjQ1MDg6XFx0XFx0XFx0ZXJyb3IgPSBkaXJfaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWNyZWF0ZShpZG1hcCwgZGlyX2lub2RlLCBkZW50cnksIG1vZGUpO1xcbjQ1MDk6XFx0XFx0XFx0aWYgKGVycm9yKVxcbjQ1MTA6XFx0XFx0XFx0XFx0Z290byBvdXRfZHB1dDtcXG40NTExOlxcdFxcdH1cXG40NTEyOlxcdFxcdGlmICh1bmxpa2VseShjcmVhdGVfZXJyb3IpIFxcdTAwMjZcXHUwMDI2ICFkZW50cnktXFx1MDAzZWRfaW5vZGUpIHtcXG40NTEzOlxcdFxcdFxcdGVycm9yID0gY3JlYXRlX2Vycm9yO1xcbjQ1MTQ6XFx0XFx0XFx0Z290byBvdXRfZHB1dDtcXG40NTE1OlxcdFxcdH1cXG40NTE2OlxcdFxcdHJldHVybiBkZW50cnk7XFxuNDUxNzpcXHRcXG40NTE4OlxcdG91dF9kcHV0OlxcbjQ1MTk6XFx0XFx0ZHB1dChkZW50cnkpO1xcbjQ1MjA6XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyb3IpO1xcbjQ1MjE6XFx0fVxcbjQ1MjI6XFx0XFxuNDUyMzpcXHRzdGF0aWMgaW5saW5lIGJvb2wgdHJhaWxpbmdfc2xhc2hlcyhzdHJ1Y3QgbmFtZWlkYXRhICpuZClcXG40NTI0OlxcdHtcXG40NTI1OlxcdFxcdHJldHVybiAoYm9vbCluZC1cXHUwMDNlbGFzdC5uYW1lW25kLVxcdTAwM2VsYXN0Lmxlbl07XFxuNDUyNjpcXHR9XFxuNDUyNzpcXHRcXG40NTI4OlxcdHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfZmFzdF9mb3Jfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgaW50IG9wZW5fZmxhZylcXG40NTI5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTg6Mzk6MzUuNTAwMzAwNzM2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTYwNTU4NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guXG5cbioqQW5hbHl6aW5nIHRoZSBgbG9va3VwX29wZW5gIEZ1bmN0aW9uKipcblxuSG1tLCB0aGUgY29kZSByZW1pbmRzIG1lIHRoYXQgYGxvb2t1cF9vcGVuYCBnZXRzIGludm9rZWQgd2hlbiBgT19DUkVBVGAgaXMgc2V0LiBOb3cgdGhhdCdzIGEga2V5IGRldGFpbCB0byBrZWVwIGluIG1pbmQuIFRoZSBpbnRlcmVzdGluZyB0aGluZyBpcywgdGhhdCBpZiB0aGUgZmlsZXN5c3RlbSBoYXMgYW4gYGF0b21pY19vcGVuYCBpbXBsZW1lbnRhdGlvbiwgaXQgc2hvdWxkIGFjdHVhbGx5IGJlIGNhbGxlZCAqZWFybGllciogd2l0aGluIGBsb29rdXBfb3BlbmAuIFNvLCB0aGF0IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGFuYWx5c2lzLiBMZXQgbWUganVzdCBxdWlja2x5IHRyYWNlIGJhY2sgdGhyb3VnaCBgbG9va3VwX29wZW5gLCBhbmQgZ2V0IG15IGJlYXJpbmdzIG9uIHdoYXQncyBoYXBwZW5pbmcgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZnVuY3Rpb24uIEkgd2FudCB0byBzZWUgaG93IHRoYXQgZWFybHkgY2FsbCB3b3VsZCBmaXQgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMDU4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODozOTozOC44MTYzNTk4MDZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEzNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL25hbWVpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDQwMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDQwMDpcXHQgKiBoYWRuJ3QgYmVlbiBzcGVjaWZpZWQuXFxuNDQwMTpcXHQgKlxcbjQ0MDI6XFx0ICogQW4gZXJyb3IgY29kZSBpcyByZXR1cm5lZCBvbiBmYWlsdXJlLlxcbjQ0MDM6XFx0ICovXFxuNDQwNDpcXHRzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxcbjQ0MDU6XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3AsXFxuNDQwNjpcXHRcXHRcXHRcXHRcXHQgIGJvb2wgZ290X3dyaXRlLCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkZWxlZ2F0ZWRfaW5vZGUpXFxuNDQwNzpcXHR7XFxuNDQwODpcXHRcXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcDtcXG40NDA5OlxcdFxcdHN0cnVjdCBkZW50cnkgKmRpciA9IG5kLVxcdTAwM2VwYXRoLmRlbnRyeTtcXG40NDEwOlxcdFxcdHN0cnVjdCBpbm9kZSAqZGlyX2lub2RlID0gZGlyLVxcdTAwM2VkX2lub2RlO1xcbjQ0MTE6XFx0XFx0aW50IG9wZW5fZmxhZyA9IG9wLVxcdTAwM2VvcGVuX2ZsYWc7XFxuNDQxMjpcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XFxuNDQxMzpcXHRcXHRpbnQgZXJyb3IsIGNyZWF0ZV9lcnJvciA9IDA7XFxuNDQxNDpcXHRcXHR1bW9kZV90IG1vZGUgPSBvcC1cXHUwMDNlbW9kZTtcXG40NDE1OlxcdFxcbjQ0MTY6XFx0XFx0aWYgKHVubGlrZWx5KElTX0RFQURESVIoZGlyX2lub2RlKSkpXFxuNDQxNzpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcXG40NDE4OlxcdFxcbjQ0MTk6XFx0XFx0ZmlsZS1cXHUwMDNlZl9tb2RlIFxcdTAwMjY9IH5GTU9ERV9DUkVBVEVEO1xcbjQ0MjA6XFx0XFx0ZGVudHJ5ID0gZF9sb29rdXAoZGlyLCBcXHUwMDI2bmQtXFx1MDAzZWxhc3QpO1xcbjQ0MjE6XFx0XFx0Zm9yICg7Oykge1xcbjQ0MjI6XFx0XFx0XFx0aWYgKCFkZW50cnkpIHtcXG40NDIzOlxcdFxcdFxcdFxcdGRlbnRyeSA9IGRfYWxsb2NfcGFyYWxsZWwoZGlyLCBcXHUwMDI2bmQtXFx1MDAzZWxhc3QpO1xcbjQ0MjQ6XFx0XFx0XFx0XFx0aWYgKElTX0VSUihkZW50cnkpKVxcbjQ0MjU6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGRlbnRyeTtcXG40NDI2OlxcdFxcdFxcdH1cXG40NDI3OlxcdFxcdFxcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKVxcbjQ0Mjg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNDQyOTpcXHRcXG40NDMwOlxcdFxcdFxcdGVycm9yID0gZF9yZXZhbGlkYXRlKGRpcl9pbm9kZSwgXFx1MDAyNm5kLVxcdTAwM2VsYXN0LCBkZW50cnksIG5kLVxcdTAwM2VmbGFncyk7XFxuNDQzMTpcXHRcXHRcXHRpZiAobGlrZWx5KGVycm9yIFxcdTAwM2UgMCkpXFxuNDQzMjpcXHRcXHRcXHRcXHRicmVhaztcXG40NDMzOlxcdFxcdFxcdGlmIChlcnJvcilcXG40NDM0OlxcdFxcdFxcdFxcdGdvdG8gb3V0X2RwdXQ7XFxuNDQzNTpcXHRcXHRcXHRkX2ludmFsaWRhdGUoZGVudHJ5KTtcXG40NDM2OlxcdFxcdFxcdGRwdXQoZGVudHJ5KTtcXG40NDM3OlxcdFxcdFxcdGRlbnRyeSA9IE5VTEw7XFxuNDQzODpcXHRcXHR9XFxuNDQzOTpcXHRcXHRpZiAoZGVudHJ5LVxcdTAwM2VkX2lub2RlKSB7XFxuNDQ0MDpcXHRcXHRcXHQvKiBDYWNoZWQgcG9zaXRpdmUgZGVudHJ5OiB3aWxsIG9wZW4gaW4gZl9vcC1cXHUwMDNlb3BlbiAqL1xcbjQ0NDE6XFx0XFx0XFx0cmV0dXJuIGRlbnRyeTtcXG40NDQyOlxcdFxcdH1cXG40NDQzOlxcdFxcbjQ0NDQ6XFx0XFx0aWYgKG9wZW5fZmxhZyBcXHUwMDI2IE9fQ1JFQVQpXFxuNDQ0NTpcXHRcXHRcXHRhdWRpdF9pbm9kZShuZC1cXHUwMDNlbmFtZSwgZGlyLCBBVURJVF9JTk9ERV9QQVJFTlQpO1xcbjQ0NDY6XFx0XFxuNDQ0NzpcXHRcXHQvKlxcbjQ0NDg6XFx0XFx0ICogQ2hlY2tpbmcgd3JpdGUgcGVybWlzc2lvbiBpcyB0cmlja3ksIGJhY3VzZSB3ZSBkb24ndCBrbm93IGlmIHdlIGFyZVxcbjQ0NDk6XFx0XFx0ICogZ29pbmcgdG8gYWN0dWFsbHkgbmVlZCBpdDogT19DUkVBVCBvcGVucyBzaG91bGQgd29yayBhcyBsb25nIGFzIHRoZVxcbjQ0NTA6XFx0XFx0ICogZmlsZSBleGlzdHMuICBCdXQgY2hlY2tpbmcgZXhpc3RlbmNlIGJyZWFrcyBhdG9taWNpdHkuICBUaGUgdHJpY2sgaXNcXG40NDUxOlxcdFxcdCAqIHRvIGNoZWNrIGFjY2VzcyBhbmQgaWYgbm90IGdyYW50ZWQgY2xlYXIgT19DUkVBVCBmcm9tIHRoZSBmbGFncy5cXG40NDUyOlxcdFxcdCAqXFxuNDQ1MzpcXHRcXHQgKiBBbm90aGVyIHByb2JsZW0gaXMgcmV0dXJpbmcgdGhlIFxcXCJyaWdodFxcXCIgZXJyb3IgdmFsdWUgKGUuZy4gZm9yIGFuXFxuNDQ1NDpcXHRcXHQgKiBPX0VYQ0wgb3BlbiB3ZSB3YW50IHRvIHJldHVybiBFRVhJU1Qgbm90IEVST0ZTKS5cXG40NDU1OlxcdFxcdCAqL1xcbjQ0NTY6XFx0XFx0aWYgKHVubGlrZWx5KCFnb3Rfd3JpdGUpKVxcbjQ0NTc6XFx0XFx0XFx0b3Blbl9mbGFnIFxcdTAwMjY9IH5PX1RSVU5DO1xcbjQ0NTg6XFx0XFx0aWRtYXAgPSBtbnRfaWRtYXAobmQtXFx1MDAzZXBhdGgubW50KTtcXG40NDU5OlxcdFxcdGlmIChvcGVuX2ZsYWcgXFx1MDAyNiBPX0NSRUFUKSB7XFxuNDQ2MDpcXHRcXHRcXHRpZiAob3Blbl9mbGFnIFxcdTAwMjYgT19FWENMKVxcbjQ0NjE6XFx0XFx0XFx0XFx0b3Blbl9mbGFnIFxcdTAwMjY9IH5PX1RSVU5DO1xcbjQ0NjI6XFx0XFx0XFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpci1cXHUwMDNlZF9pbm9kZSwgbW9kZSwgbW9kZSwgbW9kZSk7XFxuNDQ2MzpcXHRcXHRcXHRpZiAobGlrZWx5KGdvdF93cml0ZSkpXFxuNDQ2NDpcXHRcXHRcXHRcXHRjcmVhdGVfZXJyb3IgPSBtYXlfb19jcmVhdGUoaWRtYXAsIFxcdTAwMjZuZC1cXHUwMDNlcGF0aCxcXG40NDY1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBkZW50cnksIG1vZGUpO1xcbjQ0NjY6XFx0XFx0XFx0ZWxzZVxcbjQ0Njc6XFx0XFx0XFx0XFx0Y3JlYXRlX2Vycm9yID0gLUVST0ZTO1xcbjQ0Njg6XFx0XFx0fVxcbjQ0Njk6XFx0XFx0aWYgKGNyZWF0ZV9lcnJvcilcXG40NDcwOlxcdFxcdFxcdG9wZW5fZmxhZyBcXHUwMDI2PSB+T19DUkVBVDtcXG40NDcxOlxcdFxcdGlmIChkaXJfaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWF0b21pY19vcGVuKSB7XFxuNDQ3MjpcXHRcXHRcXHRpZiAobmQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTE9PS1VQX0RJUkVDVE9SWSlcXG40NDczOlxcdFxcdFxcdFxcdG9wZW5fZmxhZyB8PSBPX0RJUkVDVE9SWTtcXG40NDc0OlxcdFxcdFxcdGRlbnRyeSA9IGF0b21pY19vcGVuKFxcdTAwMjZuZC1cXHUwMDNlcGF0aCwgZGVudHJ5LCBmaWxlLCBvcGVuX2ZsYWcsIG1vZGUpO1xcbjQ0NzU6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGNyZWF0ZV9lcnJvcikgXFx1MDAyNlxcdTAwMjYgZGVudHJ5ID09IEVSUl9QVFIoLUVOT0VOVCkpXFxuNDQ3NjpcXHRcXHRcXHRcXHRkZW50cnkgPSBFUlJfUFRSKGNyZWF0ZV9lcnJvcik7XFxuNDQ3NzpcXHRcXHRcXHRyZXR1cm4gZGVudHJ5O1xcbjQ0Nzg6XFx0XFx0fVxcbjQ0Nzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE4OjM5OjM4LjgxNjg3NzIzNloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTMzODg1MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQXRvbWljIE9wZW4gYW5kIE5vbi1FeGNsdXNpdmUgQ3JlYXRlIEZsb3cqKlxuXG5Pa2F5LCBzbyBgYXRvbWljX29wZW5gIGdldHMgY2FsbGVkIGZpcnN0LCBpZiBpdCdzIHRoZXJlLiBNYWtlcyBzZW5zZS4gSWYgaXQncyAqbm90KiBwcmVzZW50LCB0aGUgZmxvdyBnb2VzIHRocm91Z2ggYGxvb2t1cGAg4oCTIGFzc3VtaW5nLCBvZiBjb3Vyc2UsIHRoYXQgYGRfaW5fbG9va3VwKGRlbnRyeSlgIHJldHVybnMgdHJ1ZS4gSWYgdGhhdCBzdGlsbCByZXN1bHRzIGluIGEgbmVnYXRpdmUgb3V0Y29tZSwgYW5kIGBPX0NSRUFUYCBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIHN5c3RlbSBjYWxscyBgY3JlYXRlYC4gU28sIHdoZW4gYGF0b21pY19vcGVuYCBpc24ndCBpbXBsZW1lbnRlZCwgdGhlIFZGUyBkb2VzIGEgc2ltcGxlOiAxLiBgbG9va3VwYCwgYW5kIDIuIGlmIG5lZ2F0aXZlLCBgY3JlYXRlYC5cblxuTm93LCBpZiBpdCdzIGEgbm9uLWV4Y2x1c2l2ZSBjcmVhdGUgKGBPX0NSRUFUYCAqd2l0aG91dCogYE9fRVhDTGApLCBhbmQgdGhlIGZpbGUgZG9lc24ndCBleGlzdCwgaXQgdXNlcyBgY3JlYXRlYC4gQmVmb3JlIHRoaXMgcGF0Y2gsIHdlIHBhc3NlZCBgZXhjbCA9IGZhbHNlYCB0byBgY3JlYXRlYC4gTm93LCB3ZSBwYXNzIG5vdGhpbmcsIGxldHRpbmcgdGhlIGZpbGVzeXN0ZW0gYXNzdW1lIGBleGNsID0gdHJ1ZWAuIFdhaXQuLi4gaWYgdGhlIGZpbGVzeXN0ZW0gKmFzc3VtZXMqIGBleGNsID0gdHJ1ZWAsIGRvZXNuJ3QgdGhhdCBtZWFuIGl0J3MgZ29pbmcgdG8gZmFpbCBpZiB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cz9cblxuWWVzLCBidXQgd2FpdC4gVGhlIFZGUyBhbHJlYWR5IGNvbmZpcm1lZCB0aGF0IHRoZSBmaWxlICpkb2Vzbid0KiBleGlzdC4gSXQncyBhIG5lZ2F0aXZlIGRlbnRyeS4gQnV0IHdoYXQgaWYgdGhlcmUncyBhIHJhY2U/IFdoYXQgaWYgdGhlIGZpbGUgZ2V0cyBjcmVhdGVkICpjb25jdXJyZW50bHkqIGJldHdlZW4gYGxvb2t1cGAgYW5kIGBjcmVhdGVgPyBJZiB0aGUgZmlsZXN5c3RlbSBpcyB1c2luZyBhbiBleGNsdXNpdmUgY3JlYXRlIChlLmcuLCBgbWtub2RgKSBiZWNhdXNlIGl0IGFzc3VtZXMgYGV4Y2wgPSB0cnVlYCwgaXQgd2lsbCBmYWlsIHdpdGggYEVFWElTVGAuIFRoZW4gd2hhdCBkb2VzIHRoZSBWRlMgZG8/XG5cbkhvbGQgb24uIElmIGBjcmVhdGVgIHJldHVybnMgYEVFWElTVGAsIGBsb29rdXBfb3BlbmAgcmV0dXJucyBgRVJSX1BUUigtRUVYSVNUKWAuIEJ1dCBpbiBhIG5vbi1leGNsdXNpdmUgY3JlYXRlIHNpdHVhdGlvbiwgd2UgKnNob3VsZG4ndCogZmFpbCB3aXRoIGBFRVhJU1RgIGlmIHRoZSBmaWxlIGlzIGNyZWF0ZWQgY29uY3VycmVudGx5ISBXZSBzaG91bGQganVzdCBvcGVuIHRoZSBleGlzdGluZyBmaWxlLiBTbywgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgVkZTIGhhbmRsZXMgYEVFWElTVGAgcmV0dXJuZWQgZnJvbSBgbG9va3VwX29wZW5gIHdpdGhpbiBgb3Blbl9sYXN0X2xvb2t1cHNgLiBUaGF0J3Mgd2hlcmUgdGhlIHByb2JsZW0gbGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI1NzEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODozOTo0NS43NTA3Njg5MzZaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1ODkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9uYW1laS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1MzAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NTMwOlxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcXG40NTMxOlxcdFxcbjQ1MzI6XFx0XFx0aWYgKG9wZW5fZmxhZyBcXHUwMDI2IE9fQ1JFQVQpIHtcXG40NTMzOlxcdFxcdFxcdGlmICh0cmFpbGluZ19zbGFzaGVzKG5kKSlcXG40NTM0OlxcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSVNESVIpO1xcbjQ1MzU6XFx0XFxuNDUzNjpcXHRcXHRcXHQvKiBEb24ndCBib3RoZXIgb24gYW4gT19FWENMIGNyZWF0ZSAqL1xcbjQ1Mzc6XFx0XFx0XFx0aWYgKG9wZW5fZmxhZyBcXHUwMDI2IE9fRVhDTClcXG40NTM4OlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjQ1Mzk6XFx0XFx0fVxcbjQ1NDA6XFx0XFxuNDU0MTpcXHRcXHRpZiAodHJhaWxpbmdfc2xhc2hlcyhuZCkpXFxuNDU0MjpcXHRcXHRcXHRuZC1cXHUwMDNlZmxhZ3MgfD0gTE9PS1VQX0ZPTExPVyB8IExPT0tVUF9ESVJFQ1RPUlk7XFxuNDU0MzpcXHRcXG40NTQ0OlxcdFxcdGRlbnRyeSA9IGxvb2t1cF9mYXN0KG5kKTtcXG40NTQ1OlxcdFxcdGlmIChJU19FUlJfT1JfTlVMTChkZW50cnkpKVxcbjQ1NDY6XFx0XFx0XFx0cmV0dXJuIGRlbnRyeTtcXG40NTQ3OlxcdFxcbjQ1NDg6XFx0XFx0aWYgKG9wZW5fZmxhZyBcXHUwMDI2IE9fQ1JFQVQpIHtcXG40NTQ5OlxcdFxcdFxcdC8qIERpc2NhcmQgbmVnYXRpdmUgZGVudHJpZXMuIE5lZWQgaW5vZGVfbG9jayB0byBkbyB0aGUgY3JlYXRlICovXFxuNDU1MDpcXHRcXHRcXHRpZiAoIWRlbnRyeS1cXHUwMDNlZF9pbm9kZSkge1xcbjQ1NTE6XFx0XFx0XFx0XFx0aWYgKCEobmQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTE9PS1VQX1JDVSkpXFxuNDU1MjpcXHRcXHRcXHRcXHRcXHRkcHV0KGRlbnRyeSk7XFxuNDU1MzpcXHRcXHRcXHRcXHRkZW50cnkgPSBOVUxMO1xcbjQ1NTQ6XFx0XFx0XFx0fVxcbjQ1NTU6XFx0XFx0fVxcbjQ1NTY6XFx0XFx0cmV0dXJuIGRlbnRyeTtcXG40NTU3OlxcdH1cXG40NTU4OlxcdFxcbjQ1NTk6XFx0c3RhdGljIGNvbnN0IGNoYXIgKm9wZW5fbGFzdF9sb29rdXBzKHN0cnVjdCBuYW1laWRhdGEgKm5kLFxcbjQ1NjA6XFx0XFx0XFx0ICAgc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBvcGVuX2ZsYWdzICpvcClcXG40NTYxOlxcdHtcXG40NTYyOlxcdFxcdHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgZGVsZWdhdGVkX2lub2RlID0geyB9O1xcbjQ1NjM6XFx0XFx0c3RydWN0IGRlbnRyeSAqZGlyID0gbmQtXFx1MDAzZXBhdGguZGVudHJ5O1xcbjQ1NjQ6XFx0XFx0aW50IG9wZW5fZmxhZyA9IG9wLVxcdTAwM2VvcGVuX2ZsYWc7XFxuNDU2NTpcXHRcXHRib29sIGdvdF93cml0ZSA9IGZhbHNlO1xcbjQ1NjY6XFx0XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xcbjQ1Njc6XFx0XFx0Y29uc3QgY2hhciAqcmVzO1xcbjQ1Njg6XFx0XFxuNDU2OTpcXHRcXHRuZC1cXHUwMDNlZmxhZ3MgfD0gb3AtXFx1MDAzZWludGVudDtcXG40NTcwOlxcdFxcbjQ1NzE6XFx0XFx0aWYgKG5kLVxcdTAwM2VsYXN0X3R5cGUgIT0gTEFTVF9OT1JNKSB7XFxuNDU3MjpcXHRcXHRcXHRpZiAobmQtXFx1MDAzZWRlcHRoKVxcbjQ1NzM6XFx0XFx0XFx0XFx0cHV0X2xpbmsobmQpO1xcbjQ1NzQ6XFx0XFx0XFx0cmV0dXJuIGhhbmRsZV9kb3RzKG5kLCBuZC1cXHUwMDNlbGFzdF90eXBlKTtcXG40NTc1OlxcdFxcdH1cXG40NTc2OlxcdFxcbjQ1Nzc6XFx0XFx0LyogV2UgX2Nhbl8gYmUgaW4gUkNVIG1vZGUgaGVyZSAqL1xcbjQ1Nzg6XFx0XFx0ZGVudHJ5ID0gbG9va3VwX2Zhc3RfZm9yX29wZW4obmQsIG9wZW5fZmxhZyk7XFxuNDU3OTpcXHRcXHRpZiAoSVNfRVJSKGRlbnRyeSkpXFxuNDU4MDpcXHRcXHRcXHRyZXR1cm4gRVJSX0NBU1QoZGVudHJ5KTtcXG40NTgxOlxcdFxcbjQ1ODI6XFx0XFx0aWYgKGxpa2VseShkZW50cnkpKVxcbjQ1ODM6XFx0XFx0XFx0Z290byBmaW5pc2hfbG9va3VwO1xcbjQ1ODQ6XFx0XFxuNDU4NTpcXHRcXHRpZiAoIShvcGVuX2ZsYWcgXFx1MDAyNiBPX0NSRUFUKSkge1xcbjQ1ODY6XFx0XFx0XFx0aWYgKFdBUk5fT05fT05DRShuZC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBMT09LVVBfUkNVKSlcXG40NTg3OlxcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FQ0hJTEQpO1xcbjQ1ODg6XFx0XFx0fSBlbHNlIHtcXG40NTg5OlxcdFxcdFxcdGlmIChuZC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBMT09LVVBfUkNVKSB7XFxuNDU5MDpcXHRcXHRcXHRcXHRpZiAoIXRyeV90b191bmxhenkobmQpKVxcbjQ1OTE6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVDSElMRCk7XFxuNDU5MjpcXHRcXHRcXHR9XFxuNDU5MzpcXHRcXHR9XFxuNDU5NDpcXHRyZXRyeTpcXG40NTk1OlxcdFxcdGlmIChvcGVuX2ZsYWcgXFx1MDAyNiAoT19DUkVBVCB8IE9fVFJVTkMgfCBPX1dST05MWSB8IE9fUkRXUikpIHtcXG40NTk2OlxcdFxcdFxcdGdvdF93cml0ZSA9ICFtbnRfd2FudF93cml0ZShuZC1cXHUwMDNlcGF0aC5tbnQpO1xcbjQ1OTc6XFx0XFx0XFx0LypcXG40NTk4OlxcdFxcdFxcdCAqIGRvIF9ub3RfIGZhaWwgeWV0IC0gd2UgbWlnaHQgbm90IG5lZWQgdGhhdCBvciBmYWlsIHdpdGhcXG40NTk5OlxcdFxcdFxcdCAqIGEgZGlmZmVyZW50IGVycm9yOyBsZXQgbG9va3VwX29wZW4oKSBkZWNpZGU7IHdlJ2xsIGJlXFxuNDYwMDpcXHRcXHRcXHQgKiBkcm9wcGluZyB0aGlzIG9uZSBhbnl3YXkuXFxuNDYwMTpcXHRcXHRcXHQgKi9cXG40NjAyOlxcdFxcdH1cXG40NjAzOlxcdFxcdGlmIChvcGVuX2ZsYWcgXFx1MDAyNiBPX0NSRUFUKVxcbjQ2MDQ6XFx0XFx0XFx0aW5vZGVfbG9jayhkaXItXFx1MDAzZWRfaW5vZGUpO1xcbjQ2MDU6XFx0XFx0ZWxzZVxcbjQ2MDY6XFx0XFx0XFx0aW5vZGVfbG9ja19zaGFyZWQoZGlyLVxcdTAwM2VkX2lub2RlKTtcXG40NjA3OlxcdFxcdGRlbnRyeSA9IGxvb2t1cF9vcGVuKG5kLCBmaWxlLCBvcCwgZ290X3dyaXRlLCBcXHUwMDI2ZGVsZWdhdGVkX2lub2RlKTtcXG40NjA4OlxcdFxcdGlmICghSVNfRVJSKGRlbnRyeSkpIHtcXG40NjA5OlxcdFxcdFxcdGlmIChmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9DUkVBVEVEKVxcbjQ2MTA6XFx0XFx0XFx0XFx0ZnNub3RpZnlfY3JlYXRlKGRpci1cXHUwMDNlZF9pbm9kZSwgZGVudHJ5KTtcXG40NjExOlxcdFxcdFxcdGlmIChmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9PUEVORUQpXFxuNDYxMjpcXHRcXHRcXHRcXHRmc25vdGlmeV9vcGVuKGZpbGUpO1xcbjQ2MTM6XFx0XFx0fVxcbjQ2MTQ6XFx0XFx0aWYgKG9wZW5fZmxhZyBcXHUwMDI2IE9fQ1JFQVQpXFxuNDYxNTpcXHRcXHRcXHRpbm9kZV91bmxvY2soZGlyLVxcdTAwM2VkX2lub2RlKTtcXG40NjE2OlxcdFxcdGVsc2VcXG40NjE3OlxcdFxcdFxcdGlub2RlX3VubG9ja19zaGFyZWQoZGlyLVxcdTAwM2VkX2lub2RlKTtcXG40NjE4OlxcdFxcbjQ2MTk6XFx0XFx0aWYgKGdvdF93cml0ZSlcXG40NjIwOlxcdFxcdFxcdG1udF9kcm9wX3dyaXRlKG5kLVxcdTAwM2VwYXRoLm1udCk7XFxuNDYyMTpcXHRcXG40NjIyOlxcdFxcdGlmIChJU19FUlIoZGVudHJ5KSkge1xcbjQ2MjM6XFx0XFx0XFx0aWYgKGlzX2RlbGVnYXRlZChcXHUwMDI2ZGVsZWdhdGVkX2lub2RlKSkge1xcbjQ2MjQ6XFx0XFx0XFx0XFx0aW50IGVycm9yID0gYnJlYWtfZGVsZWdfd2FpdChcXHUwMDI2ZGVsZWdhdGVkX2lub2RlKTtcXG40NjI1OlxcdFxcbjQ2MjY6XFx0XFx0XFx0XFx0aWYgKCFlcnJvcilcXG40NjI3OlxcdFxcdFxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuNDYyODpcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnJvcik7XFxuNDYyOTpcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE4OjM5OjQ1Ljc1MjMzNTAzNloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjE4NTUwMzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW50ZXJuYWwgUmV2aWV3IG9mIGBvcGVuX2xhc3RfbG9va3Vwc2AgRnVuY3Rpb25hbGl0eSoqXG5cbkhtbSwgaG9sZCBvbi4gRG9lcyBgb3Blbl9sYXN0X2xvb2t1cHNgIGFjdHVhbGx5IGFjY291bnQgZm9yIGBFRVhJU1RgIGVycm9ycz8gVGhhdCdzIGEgY3JpdGljYWwgZGV0YWlsIEkgbmVlZCB0byB2ZXJpZnkuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCBmdW5jdGlvbiBiZWhhdmVzIGFzIGV4cGVjdGVkIGluIHRoYXQgcGFydGljdWxhciBzY2VuYXJpby4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmUtZXhhbWluZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYG9wZW5fbGFzdF9sb29rdXBzYCB0byBjb25maXJtIGl0IGhhbmRsZXMgdGhhdCBlZGdlIGNhc2UgY29ycmVjdGx5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhhdCBzZWN0aW9uIG9mIGNvZGUgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIGZpbGUgYWxyZWFkeSBleGlzdHMgZXJyb3JzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDg3NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTg6Mzk6NDguOTcwODg3ODQ1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3Mjg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9uYW1laS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2MzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ2MzA6XFx0XFx0XFx0cmV0dXJuIEVSUl9DQVNUKGRlbnRyeSk7XFxuNDYzMTpcXHRcXHR9XFxuNDYzMjpcXHRcXG40NjMzOlxcdFxcdGlmIChmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiAoRk1PREVfT1BFTkVEIHwgRk1PREVfQ1JFQVRFRCkpIHtcXG40NjM0OlxcdFxcdFxcdGRwdXQobmQtXFx1MDAzZXBhdGguZGVudHJ5KTtcXG40NjM1OlxcdFxcdFxcdG5kLVxcdTAwM2VwYXRoLmRlbnRyeSA9IGRlbnRyeTtcXG40NjM2OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjQ2Mzc6XFx0XFx0fVxcbjQ2Mzg6XFx0XFxuNDYzOTpcXHRmaW5pc2hfbG9va3VwOlxcbjQ2NDA6XFx0XFx0aWYgKG5kLVxcdTAwM2VkZXB0aClcXG40NjQxOlxcdFxcdFxcdHB1dF9saW5rKG5kKTtcXG40NjQyOlxcdFxcdHJlcyA9IHN0ZXBfaW50byhuZCwgV0FMS19UUkFJTElORywgZGVudHJ5KTtcXG40NjQzOlxcdFxcdGlmICh1bmxpa2VseShyZXMpKVxcbjQ2NDQ6XFx0XFx0XFx0bmQtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH4oTE9PS1VQX09QRU58TE9PS1VQX0NSRUFURXxMT09LVVBfRVhDTCk7XFxuNDY0NTpcXHRcXHRyZXR1cm4gcmVzO1xcbjQ2NDY6XFx0fVxcbjQ2NDc6XFx0XFxuNDY0ODpcXHQvKlxcbjQ2NDk6XFx0ICogSGFuZGxlIHRoZSBsYXN0IHN0ZXAgb2Ygb3BlbigpXFxuNDY1MDpcXHQgKi9cXG40NjUxOlxcdHN0YXRpYyBpbnQgZG9fb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcXG40NjUyOlxcdFxcdFxcdCAgIHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApXFxuNDY1MzpcXHR7XFxuNDY1NDpcXHRcXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcDtcXG40NjU1OlxcdFxcdGludCBvcGVuX2ZsYWcgPSBvcC1cXHUwMDNlb3Blbl9mbGFnO1xcbjQ2NTY6XFx0XFx0Ym9vbCBkb190cnVuY2F0ZTtcXG40NjU3OlxcdFxcdGludCBhY2NfbW9kZTtcXG40NjU4OlxcdFxcdGludCBlcnJvcjtcXG40NjU5OlxcdFxcbjQ2NjA6XFx0XFx0aWYgKCEoZmlsZS1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgKEZNT0RFX09QRU5FRCB8IEZNT0RFX0NSRUFURUQpKSkge1xcbjQ2NjE6XFx0XFx0XFx0ZXJyb3IgPSBjb21wbGV0ZV93YWxrKG5kKTtcXG40NjYyOlxcdFxcdFxcdGlmIChlcnJvcilcXG40NjYzOlxcdFxcdFxcdFxcdHJldHVybiBlcnJvcjtcXG40NjY0OlxcdFxcdH1cXG40NjY1OlxcdFxcdGlmICghKGZpbGUtXFx1MDAzZWZfbW9kZSBcXHUwMDI2IEZNT0RFX0NSRUFURUQpKVxcbjQ2NjY6XFx0XFx0XFx0YXVkaXRfaW5vZGUobmQtXFx1MDAzZW5hbWUsIG5kLVxcdTAwM2VwYXRoLmRlbnRyeSwgMCk7XFxuNDY2NzpcXHRcXHRpZG1hcCA9IG1udF9pZG1hcChuZC1cXHUwMDNlcGF0aC5tbnQpO1xcbjQ2Njg6XFx0XFx0aWYgKG9wZW5fZmxhZyBcXHUwMDI2IE9fQ1JFQVQpIHtcXG40NjY5OlxcdFxcdFxcdGlmICgob3Blbl9mbGFnIFxcdTAwMjYgT19FWENMKSBcXHUwMDI2XFx1MDAyNiAhKGZpbGUtXFx1MDAzZWZfbW9kZSBcXHUwMDI2IEZNT0RFX0NSRUFURUQpKVxcbjQ2NzA6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuNDY3MTpcXHRcXHRcXHRpZiAoZF9pc19kaXIobmQtXFx1MDAzZXBhdGguZGVudHJ5KSlcXG40NjcyOlxcdFxcdFxcdFxcdHJldHVybiAtRUlTRElSO1xcbjQ2NzM6XFx0XFx0XFx0ZXJyb3IgPSBtYXlfY3JlYXRlX2luX3N0aWNreShpZG1hcCwgbmQsXFxuNDY3NDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGRfYmFja2luZ19pbm9kZShuZC1cXHUwMDNlcGF0aC5kZW50cnkpKTtcXG40Njc1OlxcdFxcdFxcdGlmICh1bmxpa2VseShlcnJvcikpXFxuNDY3NjpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyb3I7XFxuNDY3NzpcXHRcXHR9XFxuNDY3ODpcXHRcXG40Njc5OlxcdFxcdGlmICgob3Blbl9mbGFnIFxcdTAwMjYgX19PX1JFR1VMQVIpIFxcdTAwMjZcXHUwMDI2ICFkX2lzX3JlZyhuZC1cXHUwMDNlcGF0aC5kZW50cnkpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODozOTo0OC45NzExNjI3NDVaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2ODU2MjQ3MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWZhY3RvcmluZyBvZiB0aGUgYGNyZWF0ZWAgSW5vZGUgT3BlcmF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGUgYGV4Y2xgIGFyZ3VtZW50IHBhc3NlZCB0byB0aGUgYGNyZWF0ZWAgaW5vZGUgb3BlcmF0aW9uLiBJbml0aWFsbHksIEkgdGhvdWdodCB0aGF0IGlmIGBsb29rdXBfb3BlbmAgcmV0dXJucyBgRUVYSVNUYCwgaXQgc2ltcGx5IHJldHVybnMgYEVFWElTVGAuIEJ1dCB3YWl0LCBpZiBgY3JlYXRlYCByZXR1cm5zIGBFRVhJU1RgLCBpdCBzdWdnZXN0cyBhIGNvbmN1cnJlbnQgY3JlYXRpb24uIElmIGBPX0VYQ0xgIHdhc24ndCBzZXQsIHRoZW4gYG9wZW5gIHNob3VsZG4ndCBmYWlsIHdpdGggYEVFWElTVGAgd2hlbiBvcGVuaW5nLiBIb3dldmVyLCBjb25zaWRlcmluZyB0aGF0IGBpbm9kZV9sb2NrKGRpci1cdTAwM2VkX2lub2RlKWAgaXMgaGVsZCB3aGVuIGBjcmVhdGVgIGlzIGNhbGxlZCBieSB0aGUgVkZTLCBubyBvdGhlciBwcm9jZXNzIG9uIHRoZSAqc2FtZSogbWFjaGluZSBjYW4gY29uY3VycmVudGx5IGNyZWF0ZSB0aGUgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuIFRoZSBgaW5vZGVfbG9jayhkaXItXHUwMDNlZF9pbm9kZSlgIGNvbmZpcm1zIHRoaXM7IHRoZSBsb29rdXAgYW5kIGNyZWF0aW9uIGFyZSBlZmZlY3RpdmVseSBhdG9taWMgZm9yIGxvY2FsIGZpbGVzeXN0ZW1zLlxuXG5UaGVuIHRoZSB0aG91Z2h0IGNyb3NzZWQgbXkgbWluZCwgd2hhdCBhYm91dCBhIG5ldHdvcmsgZmlsZXN5c3RlbSBhbmQgYSBmaWxlIGNyZWF0ZWQgY29uY3VycmVudGx5IGJ5IGFub3RoZXIgbWFjaGluZT8gSWYgaXQncyBhIG5ldHdvcmsgZmlsZXN5c3RlbSwgaXQgKnNob3VsZCogaW1wbGVtZW50IGBhdG9taWNfb3BlbmAuIE90aGVyd2lzZSwgaWYgaXQgZG9lc24ndCBpbXBsZW1lbnQgYGF0b21pY19vcGVuYCwgaXQgY2FuJ3QgaGFuZGxlIGNvbmN1cnJlbnQgY3JlYXRlcyBmcm9tIG90aGVyIG1hY2hpbmVzIHByb3Blcmx5IGFueXdheSwgb3IganVzdCByZXR1cm5zIGBFRVhJU1RgIGFuZCBmYWlscyB0aGUgb3Blbi5cblxuVGhlcmVmb3JlLCB0aGUgYGV4Y2xgIGFyZ3VtZW50IHRvIGBjcmVhdGVgIHdhcyBsYXJnZWx5IHBvaW50bGVzcyBmb3IgbG9jYWwgZmlsZXN5c3RlbXMgc2luY2UgdGhlIGBpbm9kZV9sb2NrYCBndWFyYW50ZWVzIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3Qgd2hlbiBgY3JlYXRlYCBpcyBjYWxsZWQuIE5ldHdvcmsgZmlsZXN5c3RlbXMgYXJlIHRoZSBvbmVzIHRoYXQgc2hvdWxkIHVzZSBgYXRvbWljX29wZW5gIHRvIGRlYWwgd2l0aCBjb25jdXJyZW5jeSBmcm9tIG90aGVyIG1hY2hpbmVzLiBUaGlzIHBlcmZlY3RseSBhbGlnbnMgd2l0aCB0aGUgcG9ydGluZyBkb2N1bWVudGF0aW9uJ3MgZ3VpZGFuY2U6IFwiLmNyZWF0ZSBpbm9kZV9vcGVyYXRpb24gbm8gbG9uZ2VyIHJlY2VpdmVzIHRoZSAnZXhjbCcgYXJnLiBJdCBtdXN0IGFsd2F5cyBhc3N1bWUgdGhlIGZpbGUgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4gSWYgdGhlIGZpbGVzeXN0ZW0gbmVlZHMgdG8gYmUgaW52b2x2ZWQgaW4gbm9uLWV4Y2x1c2l2ZSBjcmVhdGUsIGl0IHNob3VsZCBwcm92aWRlIGF0b21pY19vcGVuLlwiXG5cblNvLCB0aGlzIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZy4gSXQgZWxpbWluYXRlcyBhbiBhcmd1bWVudCB0aGF0IHdhcyBlc3NlbnRpYWxseSBhbHdheXMgYHRydWVgIChvciwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgc3VjaCkgZm9yIGxvY2FsIGZpbGVzeXN0ZW1zLCBhbmQgZm9yIG5ldHdvcmsgZmlsZXN5c3RlbXMgdGhleSBhcmUgc3VwcG9zZWQgdG8gdXNlIGBhdG9taWNfb3BlbmAgdG8gaGFuZGxlIGNvbmN1cnJlbmN5LiBUaGUgY2hhbmdlcyBhcmUgbGFyZ2VseSBjb3NtZXRpYy4gRG9lcyB0aGlzIGludHJvZHVjZSBhbnkgbmV3IGZ1bmN0aW9uYWwgbG9naWMgdGhhdCB3b3VsZCBuZWVkIGZ1enppbmc/IE5vLiBJdCdzIHNpbXBseSByZW1vdmluZyBhIHJlZHVuZGFudCBhcmd1bWVudCBmcm9tIGEgVkZTIGNhbGxiYWNrIGFuZCB1cGRhdGluZyBhbGwgdGhlIGZpbGVzeXN0ZW1zIHRvIGZpdCB0aGUgbmV3IHNpZ25hdHVyZS4gVGhlIHVuZGVybHlpbmcgbG9naWMgb2YgdGhlIGZpbGVzeXN0ZW1zIHJlbWFpbnMgdW5jaGFuZ2VkOyB0aGV5IHNpbXBseSBkcm9wIHRoZSBgZXhjbGAgYXJndW1lbnQuIEZvciBpbnN0YW5jZSwgYGV4dDRfY3JlYXRlYCwgYGJ0cmZzX2NyZWF0ZWAgYW5kIGB2ZnNfY3JlYXRlYCBhbGwganVzdCBkcm9wcGVkIHRoZSBgZXhjbGAgYXJndW1lbnQuIGBsb29rdXBfb3BlbmAgYWxzbyBkcm9wcGVkIGBvcGVuX2ZsYWcgXHUwMDI2IE9fRVhDTGAuXG5cbkxldCdzIGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZSBubyBmaWxlc3lzdGVtIHVuZXhwZWN0ZWRseSBjaGFuZ2VkIGl0cyBiZWhhdmlvci4gYGdmczJfY3JlYXRlYCBub3cgcGFzc2VzIGAxYCBpbnN0ZWFkIG9mIGBleGNsYCwgYnV0IHNpbmNlIGBnZnMyYCBpbXBsZW1lbnRzIGBhdG9taWNfb3BlbmAsIGBnZnMyX2NyZWF0ZWAgaXMgb25seSBjYWxsZWQgYnkgYHZmc19jcmVhdGVgICh3aGljaCBhbHdheXMgcGFzc2VkIGB0cnVlYCBiZWZvcmUpIG9yIGJ5IGBsb29rdXBfb3BlbmAgaWYgYGF0b21pY19vcGVuYCBpcyBub3QgdXNlZCAoYnV0IGl0IGlzIHVzZWQpLiBUaGVuIEkgcmVtZW1iZXJlZCB0aGF0IGB2ZnNfY3JlYXRlYCBpcyBjYWxsZWQgYnkgYG1rbm9kYCBhbmQgYG9wZW4oT19DUkVBVClgIGlmIGBhdG9taWNfb3BlbmAgaXMgbm90IHVzZWQuIEhvd2V2ZXIsIGBvcGVuYCB1c2VzIGBsb29rdXBfb3BlbmAsIHNvIEknbSBjb3ZlcmVkLiBBbmQgYHZmc19jcmVhdGVgIGlzIGEgc2VwYXJhdGUgZnVuY3Rpb24sIHNvIEknbSBub3QgY29uZnVzaW5nIHRoaXMgd2l0aCBgdmZzX21rbm9kYC4gVGhpcyBjb25maXJtcyB0aGF0IHRoaXMgaXMgdHJ1bHkganVzdCBhIGNsZWFudXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1ODU2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTg6Mzk6NTkuNjU2NzkxMDg0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTM3MjE3MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZzX2NyZWF0ZVxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy85cC92ZnNfaW5vZGUuYz02NTQ9c3RhdGljIGludFxcbmZzLzlwL3Zmc19pbm9kZS5jOjY1NTp2OWZzX3Zmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbmZzLzlwL3Zmc19pbm9kZS5jLTY1Ni1cXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcXG4tLVxcbmZzL2VjcnlwdGZzL2lub2RlLmM9MTg1PWVjcnlwdGZzX2RvX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpcmVjdG9yeV9pbm9kZSxcXG4tLVxcbmZzL2VjcnlwdGZzL2lub2RlLmMtMTk2LVxcdGxvd2VyX2RpciA9IGxvd2VyX2RlbnRyeS1cXHUwMDNlZF9wYXJlbnQtXFx1MDAzZWRfaW5vZGU7XFxuZnMvZWNyeXB0ZnMvaW5vZGUuYzoxOTc6XFx0cmMgPSB2ZnNfY3JlYXRlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBsb3dlcl9kZW50cnksIG1vZGUsIE5VTEwpO1xcbmZzL2VjcnlwdGZzL2lub2RlLmMtMTk4LVxcdGlmIChyYykge1xcbi0tXFxuZnMvbGliZnMuYz0yMjY3PXZvaWQgc3Rhc2hlZF9kZW50cnlfcHJ1bmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbi0tXFxuZnMvbGliZnMuYy0yMjkzLSAqXFxuZnMvbGliZnMuYzoyMjk0OiAqIFJldHVybnM6IGEgbmVnYXRpdmUgZGVudHJ5IG9uIHdoaWNoIHZmc19jcmVhdGUoKSBvciBzaW1pbGFyIG1heVxcbmZzL2xpYmZzLmMtMjI5NS0gKiAgYmUgYXR0ZW1wdGVkLCBvciBhbiBlcnJvci5cXG4tLVxcbmZzL25hbWVpLmM9NDE1MD1zdGF0aWMgaW5saW5lIHVtb2RlX3QgdmZzX3ByZXBhcmVfbW9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL25hbWVpLmMtNDE4MS0gKi9cXG5mcy9uYW1laS5jOjQxODI6aW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxcbmZzL25hbWVpLmMtNDE4My1cXHQgICAgICAgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqZGkpXFxuLS1cXG5mcy9uYW1laS5jPTUwMjI9c3RydWN0IGZpbGUgKmRlbnRyeV9jcmVhdGUoc3RydWN0IHBhdGggKnBhdGgsIGludCBmbGFncywgdW1vZGVfdCBtb2RlLFxcbi0tXFxuZnMvbmFtZWkuYy01MDcxLVxcdH0gZWxzZSB7XFxuZnMvbmFtZWkuYzo1MDcyOlxcdFxcdGVycm9yID0gdmZzX2NyZWF0ZShtbnRfaWRtYXAocGF0aC1cXHUwMDNlbW50KSwgcGF0aC1cXHUwMDNlZGVudHJ5LCBtb2RlLCBOVUxMKTtcXG5mcy9uYW1laS5jLTUwNzMtXFx0XFx0aWYgKCFlcnJvcilcXG4tLVxcbmZzL25hbWVpLmM9NTE1ND1pbnQgZmlsZW5hbWVfbWtub2RhdChpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsIHVtb2RlX3QgbW9kZSxcXG4tLVxcbmZzL25hbWVpLmMtNTE3OS1cXHRcXHRjYXNlIDA6IGNhc2UgU19JRlJFRzpcXG5mcy9uYW1laS5jOjUxODA6XFx0XFx0XFx0ZXJyb3IgPSB2ZnNfY3JlYXRlKGlkbWFwLCBkZW50cnksIG1vZGUsIFxcdTAwMjZkaSk7XFxuZnMvbmFtZWkuYy01MTgxLVxcdFxcdFxcdGlmICghZXJyb3IpXFxuLS1cXG5mcy9uZnNkL25mczNwcm9jLmM9MjUzPW5mc2QzX2NyZWF0ZV9maWxlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmZocCxcXG4tLVxcbmZzL25mc2QvbmZzM3Byb2MuYy0yNjUtXFxuZnMvbmZzZC9uZnMzcHJvYy5jOjI2NjpcXHR0cmFjZV9uZnNkX3Zmc19jcmVhdGUocnFzdHAsIGZocCwgU19JRlJFRywgYXJncC1cXHUwMDNlbmFtZSwgYXJncC1cXHUwMDNlbGVuKTtcXG5mcy9uZnNkL25mczNwcm9jLmMtMjY3LVxcbi0tXFxuZnMvbmZzZC9uZnMzcHJvYy5jLTM0My1cXHRcXHRnb3RvIG91dDtcXG5mcy9uZnNkL25mczNwcm9jLmM6MzQ0OlxcdGhvc3RfZXJyID0gdmZzX2NyZWF0ZShcXHUwMDI2bm9wX21udF9pZG1hcCwgY2hpbGQsIGlhcC1cXHUwMDNlaWFfbW9kZSwgTlVMTCk7XFxuZnMvbmZzZC9uZnMzcHJvYy5jLTM0NS1cXHRpZiAoaG9zdF9lcnIgXFx1MDAzYyAwKSB7XFxuLS1cXG5mcy9uZnNkL25mczRwcm9jLmM9MjA0PXN0YXRpYyBfX2JlMzJcXG5mcy9uZnNkL25mczRwcm9jLmM6MjA1Om5mc2Q0X3Zmc19jcmVhdGUoc3RydWN0IHN2Y19maCAqZmhwLCBzdHJ1Y3QgZGVudHJ5ICoqY2hpbGQsXFxuZnMvbmZzZC9uZnM0cHJvYy5jLTIwNi1cXHRcXHQgc3RydWN0IG5mc2Q0X29wZW4gKm9wZW4pXFxuLS1cXG5mcy9uZnNkL25mczRwcm9jLmM9MjQ4PW5mc2Q0X2NyZWF0ZV9maWxlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmZocCxcXG4tLVxcbmZzL25mc2QvbmZzNHByb2MuYy0zODEtXFx0XFx0Z290byBvdXQ7XFxuZnMvbmZzZC9uZnM0cHJvYy5jOjM4MjpcXHRzdGF0dXMgPSBuZnNkNF92ZnNfY3JlYXRlKGZocCwgXFx1MDAyNmNoaWxkLCBvcGVuKTtcXG5mcy9uZnNkL25mczRwcm9jLmMtMzgzLVxcdGlmIChzdGF0dXMgIT0gbmZzX29rKVxcbi0tXFxuZnMvbmZzZC92ZnMuYz0xNzI3PW5mc2RfY3JlYXRlX3NldGF0dHIoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqZmhwLFxcbi0tXFxuZnMvbmZzZC92ZnMuYy0xNzc3LSAqXFxuZnMvbmZzZC92ZnMuYzoxNzc4OiAqIGNhbGwgdGhpcyBvbmx5IGFmdGVyIHZmc19jcmVhdGUoKSBpcyBjYWxsZWQuXFxuZnMvbmZzZC92ZnMuYy0xNzc5LSAqICovXFxuLS1cXG5mcy9uZnNkL3Zmcy5jPTE3ODk9bmZzZF9jcmVhdGVfbG9ja2VkKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmZocCxcXG4tLVxcbmZzL25mc2QvdmZzLmMtMTgxNy1cXHRjYXNlIFNfSUZSRUc6XFxuZnMvbmZzZC92ZnMuYzoxODE4OlxcdFxcdGhvc3RfZXJyID0gdmZzX2NyZWF0ZShcXHUwMDI2bm9wX21udF9pZG1hcCwgZGNoaWxkLCBpYXAtXFx1MDAzZWlhX21vZGUsIE5VTEwpO1xcbmZzL25mc2QvdmZzLmMtMTgxOS1cXHRcXHRpZiAoIWhvc3RfZXJyKVxcbi0tXFxuZnMvbmZzZC92ZnMuYz0xODY5PW5mc2RfY3JlYXRlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmZocCxcXG4tLVxcbmZzL25mc2QvdmZzLmMtMTg3Ni1cXG5mcy9uZnNkL3Zmcy5jOjE4Nzc6XFx0dHJhY2VfbmZzZF92ZnNfY3JlYXRlKHJxc3RwLCBmaHAsIHR5cGUsIGZuYW1lLCBmbGVuKTtcXG5mcy9uZnNkL3Zmcy5jLTE4NzgtXFxuLS1cXG5mcy9vdmVybGF5ZnMvb3ZlcmxheWZzLmg9MjQwPXN0YXRpYyBpbmxpbmUgaW50IG92bF9kb19jcmVhdGUoc3RydWN0IG92bF9mcyAqb2ZzLFxcbi0tXFxuZnMvb3ZlcmxheWZzL292ZXJsYXlmcy5oLTI0My17XFxuZnMvb3ZlcmxheWZzL292ZXJsYXlmcy5oOjI0NDpcXHRpbnQgZXJyID0gdmZzX2NyZWF0ZShvdmxfdXBwZXJfbW50X2lkbWFwKG9mcyksIGRlbnRyeSwgbW9kZSwgTlVMTCk7XFxuZnMvb3ZlcmxheWZzL292ZXJsYXlmcy5oLTI0NS1cXG4tLVxcbmZzL3NtYi9zZXJ2ZXIvc21iMnBkdS5jPTI3OTg9c3RhdGljIGludCBzbWIyX2NyZWF0KHN0cnVjdCBrc21iZF93b3JrICp3b3JrLFxcbi0tXFxuZnMvc21iL3NlcnZlci9zbWIycGR1LmMtMjgyMS1cXHRcXHRtb2RlID0gc2hhcmVfY29uZmlnX2NyZWF0ZV9tb2RlKHNoYXJlLCBwb3NpeF9tb2RlKTtcXG5mcy9zbWIvc2VydmVyL3NtYjJwZHUuYzoyODIyOlxcdFxcdHJjID0ga3NtYmRfdmZzX2NyZWF0ZSh3b3JrLCBuYW1lLCBtb2RlKTtcXG5mcy9zbWIvc2VydmVyL3NtYjJwZHUuYy0yODIzLVxcdFxcdGlmIChyYylcXG4tLVxcbmZzL3NtYi9zZXJ2ZXIvdmZzLmM9MTE2PXZvaWQga3NtYmRfdmZzX3F1ZXJ5X21heGltYWxfYWNjZXNzKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvc21iL3NlcnZlci92ZnMuYy0xMzctLyoqXFxuZnMvc21iL3NlcnZlci92ZnMuYzoxMzg6ICoga3NtYmRfdmZzX2NyZWF0ZSgpIC0gdmZzIGhlbHBlciBmb3Igc21iIGNyZWF0ZSBmaWxlXFxuZnMvc21iL3NlcnZlci92ZnMuYy0xMzktICogQHdvcms6XFx0d29ya1xcbi0tXFxuZnMvc21iL3NlcnZlci92ZnMuYy0xNDQtICovXFxuZnMvc21iL3NlcnZlci92ZnMuYzoxNDU6aW50IGtzbWJkX3Zmc19jcmVhdGUoc3RydWN0IGtzbWJkX3dvcmsgKndvcmssIGNvbnN0IGNoYXIgKm5hbWUsIHVtb2RlX3QgbW9kZSlcXG5mcy9zbWIvc2VydmVyL3Zmcy5jLTE0Ni17XFxuLS1cXG5mcy9zbWIvc2VydmVyL3Zmcy5jLTE2MS1cXHRtb2RlIHw9IFNfSUZSRUc7XFxuZnMvc21iL3NlcnZlci92ZnMuYzoxNjI6XFx0ZXJyID0gdmZzX2NyZWF0ZShtbnRfaWRtYXAocGF0aC5tbnQpLCBkZW50cnksIG1vZGUsIE5VTEwpO1xcbmZzL3NtYi9zZXJ2ZXIvdmZzLmMtMTYzLVxcdGlmICghZXJyKSB7XFxuLS1cXG5mcy9zbWIvc2VydmVyL3Zmcy5oPTc2PXZvaWQga3NtYmRfdmZzX3F1ZXJ5X21heGltYWxfYWNjZXNzKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbmZzL3NtYi9zZXJ2ZXIvdmZzLmgtNzctXFx0XFx0XFx0XFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBfX2xlMzIgKmRhY2Nlc3MpO1xcbmZzL3NtYi9zZXJ2ZXIvdmZzLmg6Nzg6aW50IGtzbWJkX3Zmc19jcmVhdGUoc3RydWN0IGtzbWJkX3dvcmsgKndvcmssIGNvbnN0IGNoYXIgKm5hbWUsIHVtb2RlX3QgbW9kZSk7XFxuZnMvc21iL3NlcnZlci92ZnMuaC03OS1pbnQga3NtYmRfdmZzX21rZGlyKHN0cnVjdCBrc21iZF93b3JrICp3b3JrLCBjb25zdCBjaGFyICpuYW1lLCB1bW9kZV90IG1vZGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODozOTo1OS44NzA1MTk2MjNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM4MzMwNzQxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWx2aW5nIGludG8gdGhlIEtlcm5lbCdzIEZpbGUgU3lzdGVtIENyZWF0aW9uIE1lY2hhbmlzbXMqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgb3JpZ2lucyBvZiBgdmZzX2NyZWF0ZWAuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBpdCdzIGNhbGxlZCBieSBgZmlsZW5hbWVfbWtub2RhdGAsIHdoaWNoIGlzIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIGZvciB0aGUgYG1rbm9kYCBzeXN0ZW0gY2FsbC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBCdXQgdGhlbiBJIHN0YXJ0ZWQgdGhpbmtpbmcgYWJvdXQgYGRlbnRyeV9jcmVhdGVgLiBNeSBtZW1vcnkgaXMgYSBiaXQgZnV6enkgb24gdGhpcywgYW5kIEkgbmVlZCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nLiBJIGluaXRpYWxseSBjb25zaWRlcmVkIGlmIGBkZW50cnlfY3JlYXRlYCB3YXMgaW52b2x2ZWQgaW4gYG9wZW5gIGluIHNvbWUgY2FzZXMg4oCTIHRoYXQgZmVlbHMgd3JvbmcuIEFoLCByaWdodCEgSSByZWNhbGwgYGRlbnRyeV9jcmVhdGVgIGlzIHVzZWQgYnkgYHBhdGhfb3BlbmF0YC4gV2FpdCwgbm8gdGhhdCBpc24ndCBjb3JyZWN0LiBJIGtub3cgSSBoYXZlIHNlZW4gaXQgaW4gb3RoZXIgY29kZSBwYXRocy4gT2theSwgbGV0IG1lIHRoaW5rLiBBaCEgYGNhY2hlZmlsZXNgLCBgb3ZlcmxheWZzYCwgYG5mc2RgLCBhbmQgYGtzbWJkYCBhbGwgdXNlIGBkZW50cnlfY3JlYXRlYC4gVGhvc2UgYXJlIGFsbCBpbnRlcmVzdGluZyB1c2UgY2FzZXMuIGBjYWNoZWZpbGVzYCwgbm93IHRoYXQncyBpbnRyaWd1aW5nLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBvZiBgY2FjaGVmaWxlc2AgYW5kIHRoZSBkaXJlY3RvcnkgZW50cnkgY2FjaGUuIEknZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBjb2RlIHRvIGNvbmZpcm0gaWYgbXkgdW5kZXJzdGFuZGluZyBpcyBjb3JyZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTU4NCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODo0MDowNC4yNTM4MzAxNloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0NzEyMTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlbnRyeV9jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25hbWVpLmM9NTAwMz1FWFBPUlRfU1lNQk9MKHN0YXJ0X2NyZWF0aW5nX3VzZXJfcGF0aCk7XFxuLS1cXG5mcy9uYW1laS5jLTUwMDUtLyoqXFxuZnMvbmFtZWkuYzo1MDA2OiAqIGRlbnRyeV9jcmVhdGUgLSBDcmVhdGUgYW5kIG9wZW4gYSBmaWxlXFxuZnMvbmFtZWkuYy01MDA3LSAqIEBwYXRoOiBwYXRoIHRvIGNyZWF0ZVxcbi0tXFxuZnMvbmFtZWkuYy01MDIxLSAqL1xcbmZzL25hbWVpLmM6NTAyMjpzdHJ1Y3QgZmlsZSAqZGVudHJ5X2NyZWF0ZShzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUsXFxuZnMvbmFtZWkuYy01MDIzLVxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKVxcbi0tXFxuZnMvbmFtZWkuYy01MDgwLX1cXG5mcy9uYW1laS5jOjUwODE6RVhQT1JUX1NZTUJPTChkZW50cnlfY3JlYXRlKTtcXG5mcy9uYW1laS5jLTUwODItXFxuLS1cXG5mcy9uZnNkL25mczRwcm9jLmM9MjA1PW5mc2Q0X3Zmc19jcmVhdGUoc3RydWN0IHN2Y19maCAqZmhwLCBzdHJ1Y3QgZGVudHJ5ICoqY2hpbGQsXFxuLS1cXG5mcy9uZnNkL25mczRwcm9jLmMtMjI4LVxcdHBhdGguZGVudHJ5ID0gKmNoaWxkO1xcbmZzL25mc2QvbmZzNHByb2MuYzoyMjk6XFx0ZmlscCA9IGRlbnRyeV9jcmVhdGUoXFx1MDAyNnBhdGgsIG9mbGFncywgb3Blbi1cXHUwMDNlb3BfaWF0dHIuaWFfbW9kZSxcXG5mcy9uZnNkL25mczRwcm9jLmMtMjMwLVxcdFxcdFxcdCAgICAgY3VycmVudF9jcmVkKCkpO1xcbi0tXFxuZnMvb3ZlcmxheWZzL2Rpci5jPTU5OT1zdGF0aWMgY29uc3Qgc3RydWN0IGNyZWQgKm92bF9vdmVycmlkZV9jcmVhdG9yX2NyZWRzKGNvbnN0IHN0cnVjdCBjcmVkICpvcmlnaW5hbF9jcmVkcyxcXG4tLVxcbmZzL292ZXJsYXlmcy9kaXIuYy02MTMtXFxuZnMvb3ZlcmxheWZzL2Rpci5jOjYxNDpcXHRlcnIgPSBzZWN1cml0eV9kZW50cnlfY3JlYXRlX2ZpbGVzX2FzKGRlbnRyeSwgbW9kZSwgXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9uYW1lLFxcbmZzL292ZXJsYXlmcy9kaXIuYy02MTUtXFx0XFx0XFx0XFx0XFx0ICAgICAgb3JpZ2luYWxfY3JlZHMsIG92ZXJyaWRlX2NyZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODo0MDowNC40NTg1NDgzNloiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjA1OTY2MjMyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlZHVuZGFudCAnZXhjbCcgQXJndW1lbnQgaW4gYHZmc19jcmVhdGVgKipcblxuUmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgYG5mc2RgIHVzZXMgYGRlbnRyeV9jcmVhdGVgIGFuZCBib3RoIGBuZnNkYCwgYGtzbWJkYCwgYG92ZXJsYXlmc2AsIGBlY3J5cHRmc2AsIGFuZCBgbWtub2RgIHVzZSBgdmZzX2NyZWF0ZWAuIEFuZCBiZWZvcmUgdGhpcyBwYXRjaCwgdGhleSB3ZXJlICphbGwqIHBhc3NpbmcgYHRydWVgIHRvIGB2ZnNfY3JlYXRlYCBmb3IgdGhlIGBleGNsYCBhcmd1bWVudC4gIFdhaXQsIGhvbGQgb24sIHdhc24ndCBgdmZzX2NyZWF0ZWAncyBzaWduYXR1cmUgZGlmZmVyZW50IGJlZm9yZSB0aGUgcGF0Y2g/IExldCBtZSBjaGVja+KApiBZZWFoLCBgaW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIHdhbnRfZXhjbClgLiBCdXQgdGhlIHBhdGNoIGRpZmYgaW4gYGZzL25hbWVpLmNgIHNob3dzIHRoZSBgdmZzX2NyZWF0ZWAgY2FsbCBjaGFuZ2UhIEl0J3Mgbm90IHRha2luZyB0aGF0IGFyZ3VtZW50IGF0IGFsbCBub3chIEl0IHdhcyAqYWx3YXlzKiBwYXNzaW5nIGB0cnVlYCFcblxuU28sIHRoZSBvcmlnaW5hbCBgdmZzX2NyZWF0ZWAgaW1wbGVtZW50YXRpb24gZGlkbid0IGV2ZW4gKmhhdmUqIHRoYXQgYHdhbnRfZXhjbGAgYXJndW1lbnQuIEl0IHdhcyBqdXN0IGltcGxpY2l0bHkgcGFzc2luZyBgdHJ1ZWAgdG8gYGRpci1cdTAwM2VpX29wLVx1MDAzZWNyZWF0ZWAuIE1lYW53aGlsZSwgYGxvb2t1cF9vcGVuYCB3YXMgdGFraW5nIHRoZSBgb3Blbl9mbGFnIFx1MDAyNiBPX0VYQ0xgIHZhbHVlLlxuXG5TbywgdGhlICpvbmx5KiBwbGFjZSB0aGUgYGV4Y2xgIHZhbHVlIGNvdWxkIGJlIGBmYWxzZWAgd2FzIGluIGBsb29rdXBfb3BlbmAgaWYgYE9fRVhDTGAgd2Fzbid0IHNldC4gIEFuZCBjcml0aWNhbGx5LCB3aGVuIGBsb29rdXBfb3BlbmAgaXMgY2FsbGVkLCB0aGUgVkZTIGlzIGhvbGRpbmcgYGlub2RlX2xvY2soZGlyLVx1MDAzZWRfaW5vZGUpYC4gVGhpcyBtZWFucyBjb25jdXJyZW50IGNyZWF0aW9uIG9uIHRoZSBzYW1lIG1hY2hpbmUgaXMgaW1wb3NzaWJsZS4gIElmIGl0J3MgYSBsb2NhbCBmaWxlc3lzdGVtLCBgY3JlYXRlYCBqdXN04oCmIGNyZWF0ZXMgdGhlIGZpbGUuIFRoZSBgZXhjbGAgYXJndW1lbnQgaXMgaXJyZWxldmFudCwgc2luY2UgdGhlIGZpbGUgZG9lc24ndCBleGlzdCB5ZXQgYW55d2F5ISAgSWYgaXQncyBhIG5ldHdvcmsgZmlsZXN5c3RlbSwgaXQgKnNob3VsZCogYmUgdXNpbmcgYGF0b21pY19vcGVuYCB0byBoYW5kbGUgY29uY3VycmVudCBjcmVhdGlvbnMgZnJvbSBkaWZmZXJlbnQgbWFjaGluZXMuIElmIGl0IGRvZXNuJ3QsIGl0IGp1c3QgY2FsbHMgYGNyZWF0ZWAsIGFuZCBpZiBpdCBmYWlscyB3aXRoIGBFRVhJU1RgLCBgbG9va3VwX29wZW5gIHJldHVybnMgYEVFWElTVGAuIChXaGljaCBpcyBpbmNvcnJlY3QgZm9yIGEgbm9uLWV4Y2x1c2l2ZSBjcmVhdGlvbiwgYnV0IHRoYXQncyBhIGZpbGVzeXN0ZW0gYnVnIGZvciBub3QgaW1wbGVtZW50aW5nIGBhdG9taWNfb3BlbmApLlxuXG5UaGVyZWZvcmUsIHRoYXQgYGV4Y2xgIGFyZ3VtZW50IHRvIGBjcmVhdGVgIHdhcyBlbnRpcmVseSByZWR1bmRhbnQuIEl0J3MgdXNlbGVzcy4gVGhhdCdzIHdoeSBpdCB3YXMgcmVtb3ZlZC4gIE5vIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgbmVlZGVkIHRvIGJlIGZ1enplZCBoZXJlOyBpdCdzIGEgcHVyZSBBUEkgcmVmYWN0b3JpbmcsIHJlbW92aW5nIGEgdXNlbGVzcyBhcmd1bWVudC4gVGhlIGtlcm5lbCdzICpiZWhhdmlvciogaXMgZXhhY3RseSB0aGUgc2FtZSBhcyBiZWZvcmUuXG5cblRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCBmaWxlc3lzdGVtcyB0aGF0IHByZXZpb3VzbHkgKmNoZWNrZWQqIHRoYXQgYGV4Y2xgIHZhbHVlIOKAkyBsaWtlIGBnZnMyYCwgYG5mc2AsIGFuZCBgdmJveHNmYCDigJMgYXJlIG5vdyBqdXN0IGhhcmRjb2RpbmcgYDFgLCBgT19FWENMYCwgb3IgYHRydWVgIGluIHRoZWlyIGludGVybmFsIGNhbGxzIHdoZW4gY2FsbGVkIGZyb20gYGNyZWF0ZWAuXG5cbldhaXQsIGJ1dCBgZ2ZzMl9jcmVhdGVgIG5vdyBwYXNzZXMgYDFgIHRvIGBnZnMyX2NyZWF0ZV9pbm9kZWAuIFByZXZpb3VzbHksIGl0IHBhc3NlZCBgZXhjbGAuIGBnZnMyX2NyZWF0ZWAgd2FzICpvbmx5KiBjYWxsZWQgZnJvbSBgdmZzX2NyZWF0ZWAgKHdoaWNoIHBhc3NlZCBgdHJ1ZWApIG9yIGBsb29rdXBfb3BlbmAgKHdoaWNoIHBhc3NlZCBgb3Blbl9mbGFnIFx1MDAyNiBPX0VYQ0xgKS4gQWghICBJZiBgbG9va3VwX29wZW5gIHBhc3NlZCBgb3Blbl9mbGFnIFx1MDAyNiBPX0VYQ0xgIHRvIGBnZnMyX2NyZWF0ZWAgYW5kIGBPX0VYQ0xgIHdhcyAqbm90KiBzZXQsIGBnZnMyX2NyZWF0ZWAgd291bGQgcmVjZWl2ZSBgZmFsc2VgLiBUaGVuIGl0IHdvdWxkIHBhc3MgYDBgIHRvIGBnZnMyX2NyZWF0ZV9pbm9kZWAuIE5vdywgaXQgYWx3YXlzIHBhc3NlcyBgMWAuIERvZXMgYGdmczJfY3JlYXRlX2lub2RlYCBiZWhhdmUgZGlmZmVyZW50bHkgaWYgYGV4Y2xgIGlzIGAxYCB2ZXJzdXMgYDBgPyBMZXQncyBjaGVjayBgZ2ZzMl9jcmVhdGVfaW5vZGVg4oCmXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNDU2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE4OjQwOjE2LjUxODIxNTY0NVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDIzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZ2ZzMi9pbm9kZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MDA6XFx0c3RhdGljIGludCBnZnMyX2NyZWF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiA3MDE6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gNzAyOlxcdFxcdFxcdFxcdCAgICAgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYsIGNvbnN0IGNoYXIgKnN5bW5hbWUsXFxuIDcwMzpcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBzaXplLCBpbnQgZXhjbClcXG4gNzA0OlxcdHtcXG4gNzA1OlxcdFxcdGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lID0gXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9uYW1lO1xcbiA3MDY6XFx0XFx0c3RydWN0IHBvc2l4X2FjbCAqZGVmYXVsdF9hY2wsICphY2w7XFxuIDcwNzpcXHRcXHRzdHJ1Y3QgZ2ZzMl9ob2xkZXIgZF9naCwgZ2g7XFxuIDcwODpcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDtcXG4gNzA5OlxcdFxcdHN0cnVjdCBnZnMyX2lub2RlICpkaXAgPSBHRlMyX0koZGlyKSwgKmlwO1xcbiA3MTA6XFx0XFx0c3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKFxcdTAwMjZkaXAtXFx1MDAzZWlfaW5vZGUpO1xcbiA3MTE6XFx0XFx0c3RydWN0IGdmczJfZ2xvY2sgKmlvX2dsO1xcbiA3MTI6XFx0XFx0aW50IGVycm9yLCBkZWFsbG9jX2Vycm9yO1xcbiA3MTM6XFx0XFx0dTMyIGFmbGFncyA9IDA7XFxuIDcxNDpcXHRcXHR1bnNpZ25lZCBibG9ja3MgPSAxO1xcbiA3MTU6XFx0XFx0c3RydWN0IGdmczJfZGlyYWRkIGRhID0geyAuYmggPSBOVUxMLCAuc2F2ZV9sb2MgPSAxLCB9O1xcbiA3MTY6XFx0XFx0Ym9vbCB4YXR0cl9pbml0aWFsaXplZCA9IGZhbHNlO1xcbiA3MTc6XFx0XFxuIDcxODpcXHRcXHRpZiAoIW5hbWUtXFx1MDAzZWxlbiB8fCBuYW1lLVxcdTAwM2VsZW4gXFx1MDAzZSBHRlMyX0ZOQU1FU0laRSlcXG4gNzE5OlxcdFxcdFxcdHJldHVybiAtRU5BTUVUT09MT05HO1xcbiA3MjA6XFx0XFxuIDcyMTpcXHRcXHRlcnJvciA9IGdmczJfcWFfZ2V0KGRpcCk7XFxuIDcyMjpcXHRcXHRpZiAoZXJyb3IpXFxuIDcyMzpcXHRcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIDcyNDpcXHRcXG4gNzI1OlxcdFxcdGVycm9yID0gZ2ZzMl9yaW5kZXhfdXBkYXRlKHNkcCk7XFxuIDcyNjpcXHRcXHRpZiAoZXJyb3IpXFxuIDcyNzpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuIDcyODpcXHRcXG4gNzI5OlxcdFxcdGVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KGRpcC1cXHUwMDNlaV9nbCwgTE1fU1RfRVhDTFVTSVZFLCAwLCBcXHUwMDI2ZF9naCk7XFxuIDczMDpcXHRcXHRpZiAoZXJyb3IpXFxuIDczMTpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuIDczMjpcXHRcXHRnZnMyX2hvbGRlcl9tYXJrX3VuaW5pdGlhbGl6ZWQoXFx1MDAyNmdoKTtcXG4gNzMzOlxcdFxcbiA3MzQ6XFx0XFx0ZXJyb3IgPSBjcmVhdGVfb2soZGlwLCBuYW1lLCBtb2RlKTtcXG4gNzM1OlxcdFxcdGlmIChlcnJvcilcXG4gNzM2OlxcdFxcdFxcdGdvdG8gZmFpbF9ndW5sb2NrO1xcbiA3Mzc6XFx0XFxuIDczODpcXHRcXHRpbm9kZSA9IGdmczJfZGlyX3NlYXJjaChkaXIsIFxcdTAwMjZkZW50cnktXFx1MDAzZWRfbmFtZSwgIVNfSVNSRUcobW9kZSkgfHwgZXhjbCk7XFxuIDczOTpcXHRcXHRlcnJvciA9IFBUUl9FUlIoaW5vZGUpO1xcbiA3NDA6XFx0XFx0aWYgKCFJU19FUlIoaW5vZGUpKSB7XFxuIDc0MTpcXHRcXHRcXHRpZiAoZmlsZSBcXHUwMDI2XFx1MDAyNiAoZmlsZS1cXHUwMDNlZl9mbGFncyBcXHUwMDI2IF9fT19SRUdVTEFSKSBcXHUwMDI2XFx1MDAyNlxcbiA3NDI6XFx0XFx0XFx0ICAgICFTX0lTUkVHKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuIDc0MzpcXHRcXHRcXHRcXHRpcHV0KGlub2RlKTtcXG4gNzQ0OlxcdFxcdFxcdFxcdGlub2RlID0gTlVMTDtcXG4gNzQ1OlxcdFxcdFxcdFxcdGVycm9yID0gLUVGVFlQRTtcXG4gNzQ2OlxcdFxcdFxcdFxcdGdvdG8gZmFpbF9ndW5sb2NrO1xcbiA3NDc6XFx0XFx0XFx0fVxcbiA3NDg6XFx0XFx0XFx0aWYgKFNfSVNESVIoaW5vZGUtXFx1MDAzZWlfbW9kZSkpIHtcXG4gNzQ5OlxcdFxcdFxcdFxcdGlwdXQoaW5vZGUpO1xcbiA3NTA6XFx0XFx0XFx0XFx0aW5vZGUgPSBOVUxMO1xcbiA3NTE6XFx0XFx0XFx0XFx0ZXJyb3IgPSAtRUlTRElSO1xcbiA3NTI6XFx0XFx0XFx0XFx0Z290byBmYWlsX2d1bmxvY2s7XFxuIDc1MzpcXHRcXHRcXHR9XFxuIDc1NDpcXHRcXHRcXHRkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpO1xcbiA3NTU6XFx0XFx0XFx0ZXJyb3IgPSAwO1xcbiA3NTY6XFx0XFx0XFx0aWYgKGZpbGUpIHtcXG4gNzU3OlxcdFxcdFxcdFxcdGlmIChTX0lTUkVHKGlub2RlLVxcdTAwM2VpX21vZGUpKVxcbiA3NTg6XFx0XFx0XFx0XFx0XFx0ZXJyb3IgPSBmaW5pc2hfb3BlbihmaWxlLCBkZW50cnksIGdmczJfb3Blbl9jb21tb24pO1xcbiA3NTk6XFx0XFx0XFx0XFx0ZWxzZVxcbiA3NjA6XFx0XFx0XFx0XFx0XFx0ZXJyb3IgPSBmaW5pc2hfbm9fb3BlbihmaWxlLCBOVUxMKTtcXG4gNzYxOlxcdFxcdFxcdH1cXG4gNzYyOlxcdFxcdFxcdGdmczJfZ2xvY2tfZHFfdW5pbml0KFxcdTAwMjZkX2doKTtcXG4gNzYzOlxcdFxcdFxcdGdvdG8gZmFpbDtcXG4gNzY0OlxcdFxcdH0gZWxzZSBpZiAoZXJyb3IgIT0gLUVOT0VOVCkge1xcbiA3NjU6XFx0XFx0XFx0Z290byBmYWlsX2d1bmxvY2s7XFxuIDc2NjpcXHRcXHR9XFxuIDc2NzpcXHRcXG4gNzY4OlxcdFxcdGVycm9yID0gZ2ZzMl9kaXJhZGRfYWxsb2NfcmVxdWlyZWQoZGlyLCBuYW1lLCBcXHUwMDI2ZGEpO1xcbiA3Njk6XFx0XFx0aWYgKGVycm9yIFxcdTAwM2MgMClcXG4gNzcwOlxcdFxcdFxcdGdvdG8gZmFpbF9ndW5sb2NrO1xcbiA3NzE6XFx0XFxuIDc3MjpcXHRcXHRpbm9kZSA9IG5ld19pbm9kZShzZHAtXFx1MDAzZXNkX3Zmcyk7XFxuIDc3MzpcXHRcXHRlcnJvciA9IC1FTk9NRU07XFxuIDc3NDpcXHRcXHRpZiAoIWlub2RlKVxcbiA3NzU6XFx0XFx0XFx0Z290byBmYWlsX2d1bmxvY2s7XFxuIDc3NjpcXHRcXHRnZnMyX3NldHVwX2lub2RlKGlub2RlKTtcXG4gNzc3OlxcdFxcdGlwID0gR0ZTMl9JKGlub2RlKTtcXG4gNzc4OlxcdFxcbiA3Nzk6XFx0XFx0ZXJyb3IgPSBwb3NpeF9hY2xfY3JlYXRlKGRpciwgXFx1MDAyNm1vZGUsIFxcdTAwMjZkZWZhdWx0X2FjbCwgXFx1MDAyNmFjbCk7XFxuIDc4MDpcXHRcXHRpZiAoZXJyb3IpXFxuIDc4MTpcXHRcXHRcXHRnb3RvIGZhaWxfZ3VubG9jaztcXG4gNzgyOlxcdFxcbiA3ODM6XFx0XFx0ZXJyb3IgPSBnZnMyX3FhX2dldChpcCk7XFxuIDc4NDpcXHRcXHRpZiAoZXJyb3IpXFxuIDc4NTpcXHRcXHRcXHRnb3RvIGZhaWxfZnJlZV9hY2xzO1xcbiA3ODY6XFx0XFxuIDc4NzpcXHRcXHRpbm9kZS1cXHUwMDNlaV9tb2RlID0gbW9kZTtcXG4gNzg4OlxcdFxcdHNldF9ubGluayhpbm9kZSwgU19JU0RJUihtb2RlKSA/IDIgOiAxKTtcXG4gNzg5OlxcdFxcdGlub2RlLVxcdTAwM2VpX3JkZXYgPSBkZXY7XFxuIDc5MDpcXHRcXHRpbm9kZS1cXHUwMDNlaV9zaXplID0gc2l6ZTtcXG4gNzkxOlxcdFxcdHNpbXBsZV9pbm9kZV9pbml0X3RzKGlub2RlKTtcXG4gNzkyOlxcdFxcdG11bmdlX21vZGVfdWlkX2dpZChkaXAsIGlub2RlKTtcXG4gNzkzOlxcdFxcdGNoZWNrX2FuZF91cGRhdGVfZ29hbChkaXApO1xcbiA3OTQ6XFx0XFx0aXAtXFx1MDAzZWlfZ29hbCA9IGRpcC1cXHUwMDNlaV9nb2FsO1xcbiA3OTU6XFx0XFx0aXAtXFx1MDAzZWlfZGlza2ZsYWdzID0gMDtcXG4gNzk2OlxcdFxcdGlwLVxcdTAwM2VpX2VhdHRyID0gMDtcXG4gNzk3OlxcdFxcdGlwLVxcdTAwM2VpX2hlaWdodCA9IDA7XFxuIDc5ODpcXHRcXHRpcC1cXHUwMDNlaV9kZXB0aCA9IDA7XFxuIDc5OTpcXHRcXHRpcC1cXHUwMDNlaV9lbnRyaWVzID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTg6NDA6MTYuNTE4NTYyNjg1WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2NDYzNzQ0NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBsaWNhdGlvbnMgb2YgYGV4Y2xgIGluIEZpbGUgQ3JlYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhpcyBgZXhjbGAgZmxhZyBpcyBiZWluZyBwYXNzZWQgYXJvdW5kIGluIHRoZSBmaWxlIGNyZWF0aW9uIHByb2Nlc3MsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBgZ2ZzMl9jcmVhdGVfaW5vZGVgLiBJIHNlZSBpdCBiZWluZyB1c2VkIGluIGBnZnMyX2Rpcl9zZWFyY2hgIHZpYTpcbmBgYGNcblx0aW5vZGUgPSBnZnMyX2Rpcl9zZWFyY2goZGlyLCBcdTAwMjZkZW50cnktXHUwMDNlZF9uYW1lLCAhU19JU1JFRyhtb2RlKSB8fCBleGNsKTtcbmBgYFxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgXCJIZXksIGlmIGBnZnMyX2NyZWF0ZWAgZ2V0cyBjYWxsZWQgYnkgYGxvb2t1cF9vcGVuYCB3aXRoIGBleGNsID0gZmFsc2VgLCB3b3VsZG4ndCB0aGF0IG1lYW4gYGdmczJfY3JlYXRlX2lub2RlYCB3b3VsZCBnZXQgYGV4Y2wgPSAwYD9cIiBCdXQgdGhlbiwgSSByZW1lbWJlcmVkIHRoYXQgYGdmczJgIGltcGxlbWVudHMgYGF0b21pY19vcGVuYC4gXG5cbkFoYSEgVGhhdCdzIGEga2V5IGRldGFpbC4gYGxvb2t1cF9vcGVuYCBjYWxscyBgZ2ZzMl9hdG9taWNfb3BlbmAsIE5PVCBgZ2ZzMl9jcmVhdGVgLiBMZXQncyBjaGVjayBgZ2ZzMl9hdG9taWNfb3BlbmA6XG5gYGBjXG5zdGF0aWMgaW50IGdmczJfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcblx0XHRcdCAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgZmxhZ3MsXG5cdFx0XHQgICAgdW1vZGVfdCBtb2RlKVxue1xuXHRib29sIGV4Y2wgPSAhIShmbGFncyBcdTAwMjYgT19FWENMKTtcblxuXHRpZiAoIWRfaW5fbG9va3VwKGRlbnRyeSkpXG5cdFx0Z290byBza2lwX2xvb2t1cDtcblxuXHRyZXR1cm4gZ2ZzMl9jcmVhdGVfaW5vZGUoZGlyLCBkZW50cnksIGZpbGUsIFNfSUZSRUcgfCBtb2RlLCAwLCBOVUxMLCAwLCBleGNsKTtcbmBgYFxuT2theSwgc28gYGdmczJfYXRvbWljX29wZW5gIGRvZXMgcGFzcyB0aGUgY29ycmVjdCBgZXhjbGAgdmFsdWUuIEFuZCB0aGlua2luZyBpdCB0aHJvdWdoLCBgZ2ZzMl9jcmVhdGVgIGlzIE9OTFkgY2FsbGVkIGJ5IGB2ZnNfY3JlYXRlYC4gQW5kIGB2ZnNfY3JlYXRlYCAqYWx3YXlzKiBwYXNzZXMgYHRydWVgIGZvciBgZXhjbGAuIFNvIHRoZSBzaXR1YXRpb24sIHdpdGggYGdmczJfY3JlYXRlYCBwYXNzaW5nIGAxYCwgaXMgZXhhY3RseSB0aGUgc2FtZSBhcyBiZWZvcmUuIFRoYXQgbWFrZXMgc2Vuc2UuXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgb3RoZXIgZmlsZXN5c3RlbXMuIExldCdzIHN0YXJ0IHdpdGggYG5mc2AuIGBuZnNgIGltcGxlbWVudHMgYGF0b21pY19vcGVuYCB0b28uIFRoZSBzYW1lIGxvZ2ljIHNob3VsZCBhcHBseTogYG5mc19jcmVhdGVgIGlzIG9ubHkgY2FsbGVkIGJ5IGB2ZnNfY3JlYXRlYCwgd2hpY2ggYWx3YXlzIHBhc3NlcyBgdHJ1ZWAuIFRoZXJlZm9yZSwgcGFzc2luZyBgT19FWENMYCBpbiBgbmZzX2NyZWF0ZWAgaXMgZXhhY3RseSB0aGUgc2FtZSBiZWhhdmlvciBhcyBiZWZvcmUuIFxuXG5Ob3csIG9uIHRvIGB2Ym94c2ZgLiBTYW1lIHBhdHRlcm4uIGB2Ym94c2ZgIGltcGxlbWVudHMgYGF0b21pY19vcGVuYCwgc28gYHZib3hzZl9kaXJfbWtmaWxlYCBpcyBjYWxsZWQgYnkgYHZmc19jcmVhdGVgLCB3aGljaCAqYWx3YXlzKiBwYXNzZXMgYHRydWVgLiBTbywgcGFzc2luZyBgdHJ1ZWAgaXMgdGhlIHNhbWUgYmVoYXZpb3IuXG5cbkZpbmFsbHksIGBjaWZzYC4gYGNpZnNgIGFsc28gaW1wbGVtZW50cyBgYXRvbWljX29wZW5gLiBUaGlzIG1lYW5zIGBjaWZzX2NyZWF0ZWAgaXMgKmFsc28qIGNhbGxlZCBvbmx5IGJ5IGB2ZnNfY3JlYXRlYC4gV2hpY2ggYWx3YXlzIHBhc3NlZCBgdHJ1ZWAgZm9yIGBleGNsYC4gQnV0LCB3YWl0IGEgbWludXRlLCBJIGRvbid0IHJlbWVtYmVyIGBjaWZzX2NyZWF0ZWAgZXZlbiAqdXNpbmcqIGBleGNsYCBiZWZvcmUuIE5lZWQgdG8gdmVyaWZ5IHRoYXQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM4NjEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODo0MDoyNS4xNjQ5NDEwNloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk4NzMzMzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNpZnNfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3NtYi9jbGllbnQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3NtYi9jbGllbnQvY2FjaGVkX2Rpci5jPTEzND1pbnQgb3Blbl9jYWNoZWRfZGlyKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sXFxuLS1cXG5mcy9zbWIvY2xpZW50L2NhY2hlZF9kaXIuYy0yNzUtXFx0XFx0LnBhdGggPSBwYXRoLFxcbmZzL3NtYi9jbGllbnQvY2FjaGVkX2Rpci5jOjI3NjpcXHRcXHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIENSRUFURV9OT1RfRklMRSksXFxuZnMvc21iL2NsaWVudC9jYWNoZWRfZGlyLmMtMjc3LVxcdFxcdC5kZXNpcmVkX2FjY2VzcyA9ICBGSUxFX1JFQURfREFUQSB8IEZJTEVfUkVBRF9BVFRSSUJVVEVTIHxcXG4tLVxcbmZzL3NtYi9jbGllbnQvY2lmc2FjbC5jPTE1NzU9c3RhdGljIHN0cnVjdCBzbWJfbnRzZCAqZ2V0X2NpZnNfYWNsX2J5X3BhdGgoc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYixcXG4tLVxcbmZzL3NtYi9jbGllbnQvY2lmc2FjbC5jLTE1OTYtXFx0XFx0LmRlc2lyZWRfYWNjZXNzID0gUkVBRF9DT05UUk9MLFxcbmZzL3NtYi9jbGllbnQvY2lmc2FjbC5jOjE1OTc6XFx0XFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCAwKSxcXG5mcy9zbWIvY2xpZW50L2NpZnNhY2wuYy0xNTk4LVxcdFxcdC5kaXNwb3NpdGlvbiA9IEZJTEVfT1BFTixcXG4tLVxcbmZzL3NtYi9jbGllbnQvY2lmc2FjbC5jPTE2NDA9aW50IHNldF9jaWZzX2FjbChzdHJ1Y3Qgc21iX250c2QgKnBubnRzZCwgX191MzIgYWNsbGVuLFxcbi0tXFxuZnMvc21iL2NsaWVudC9jaWZzYWNsLmMtMTY2OC1cXHRcXHQuZGVzaXJlZF9hY2Nlc3MgPSBhY2Nlc3NfZmxhZ3MsXFxuZnMvc21iL2NsaWVudC9jaWZzYWNsLmM6MTY2OTpcXHRcXHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIDApLFxcbmZzL3NtYi9jbGllbnQvY2lmc2FjbC5jLTE2NzAtXFx0XFx0LmRpc3Bvc2l0aW9uID0gRklMRV9PUEVOLFxcbi0tXFxuZnMvc21iL2NsaWVudC9jaWZzZnMuYz0xMjI4PWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNpZnNfZGlyX2lub2RlX29wcyA9IHtcXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jOjEyMjk6XFx0LmNyZWF0ZSA9IGNpZnNfY3JlYXRlLFxcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmMtMTIzMC1cXHQuYXRvbWljX29wZW4gPSBjaWZzX2F0b21pY19vcGVuLFxcbi0tXFxuZnMvc21iL2NsaWVudC9jaWZzZnMuaD01NT1zdHJ1Y3QgaW5vZGUgKmNpZnNfcm9vdF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmg6NTY6aW50IGNpZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5oLTU3LVxcdFxcdHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LCB1bW9kZV90IG1vZGUpO1xcbi0tXFxuZnMvc21iL2NsaWVudC9jaWZzZ2xvYi5oPTIyMzI9c3RhdGljIGlubGluZSB2b2lkIG1vdmVfY2lmc19pbmZvX3RvX3NtYjIoc3RydWN0IHNtYjJfZmlsZV9hbGxfaW5mbyAqZHN0LCBjb25zdCBGSUxFX0FMTF9JTkZPICpzcmMpXFxuLS1cXG5mcy9zbWIvY2xpZW50L2NpZnNnbG9iLmgtMjI0OS1cXHRcXHQuZGlzcG9zaXRpb24gPSAoX2NkKSwgXFxcXFxcbmZzL3NtYi9jbGllbnQvY2lmc2dsb2IuaDoyMjUwOlxcdFxcdC5jcmVhdGVfb3B0aW9ucyA9IGNpZnNfY3JlYXRlX29wdGlvbnMoX2NpZnNfc2IsIChfY28pKSwgXFxcXFxcbmZzL3NtYi9jbGllbnQvY2lmc2dsb2IuaC0yMjUxLVxcdFxcdC5tb2RlID0gKF9tb2RlKSwgXFxcXFxcbi0tXFxuZnMvc21iL2NsaWVudC9jaWZzcHJvdG8uaD0zNDA9aW50IGNpZnNfcXVlcnlfbWZfc3ltbGluayh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxcbi0tXFxuZnMvc21iL2NsaWVudC9jaWZzcHJvdG8uaC0zNDMtXFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgKnBieXRlc19yZWFkKTtcXG5mcy9zbWIvY2xpZW50L2NpZnNwcm90by5oOjM0NDppbnQgY2lmc19jcmVhdGVfbWZfc3ltbGluayh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxcbmZzL3NtYi9jbGllbnQvY2lmc3Byb3RvLmgtMzQ1LVxcdFxcdFxcdCAgIHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IsXFxuLS1cXG5mcy9zbWIvY2xpZW50L2NpZnNwcm90by5oPTQyMT1zdGF0aWMgaW5saW5lIGludCBjaWZzX2ludmFsX25hbWVfZGZzX2xpbmtfZXJyb3IoY29uc3QgdW5zaWduZWQgaW50IHhpZCxcXG4tLVxcbmZzL3NtYi9jbGllbnQvY2lmc3Byb3RvLmgtNDMxLVxcbmZzL3NtYi9jbGllbnQvY2lmc3Byb3RvLmg6NDMyOnN0YXRpYyBpbmxpbmUgaW50IGNpZnNfY3JlYXRlX29wdGlvbnMoc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiwgaW50IG9wdGlvbnMpXFxuZnMvc21iL2NsaWVudC9jaWZzcHJvdG8uaC00MzMte1xcbi0tXFxuZnMvc21iL2NsaWVudC9jaWZzc21iLmM9Mjk1ND1pbnQgY2lmc19xdWVyeV9yZXBhcnNlX3BvaW50KGNvbnN0IHVuc2lnbmVkIGludCB4aWQsXFxuLS1cXG5mcy9zbWIvY2xpZW50L2NpZnNzbWIuYy0yOTg0LVxcdFxcdC5kZXNpcmVkX2FjY2VzcyA9IEZJTEVfUkVBRF9BVFRSSUJVVEVTLFxcbmZzL3NtYi9jbGllbnQvY2lmc3NtYi5jOjI5ODU6XFx0XFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLFxcbmZzL3NtYi9jbGllbnQvY2lmc3NtYi5jLTI5ODYtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgT1BFTl9SRVBBUlNFX1BPSU5UKSxcXG4tLVxcbmZzL3NtYi9jbGllbnQvY2lmc3NtYi5jLTMwODQtXFxuZnMvc21iL2NsaWVudC9jaWZzc21iLmM6MzA4NTpzdHJ1Y3QgaW5vZGUgKmNpZnNfY3JlYXRlX3JlcGFyc2VfaW5vZGUoc3RydWN0IGNpZnNfb3Blbl9pbmZvX2RhdGEgKmRhdGEsXFxuZnMvc21iL2NsaWVudC9jaWZzc21iLmMtMzA4Ni1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvc21iL2NsaWVudC9jaWZzc21iLmM9NTgzMz1DSUZTU01CU2V0UGF0aEluZm9GQihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxcbi0tXFxuZnMvc21iL2NsaWVudC9jaWZzc21iLmMtNTg0Ni1cXHRcXHQuZGVzaXJlZF9hY2Nlc3MgPSBHRU5FUklDX1dSSVRFLFxcbmZzL3NtYi9jbGllbnQvY2lmc3NtYi5jOjU4NDc6XFx0XFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCAwKSxcXG5mcy9zbWIvY2xpZW50L2NpZnNzbWIuYy01ODQ4LVxcdFxcdC5kaXNwb3NpdGlvbiA9IEZJTEVfT1BFTixcXG4tLVxcbmZzL3NtYi9jbGllbnQvZGlyLmM9MjAxPXN0YXRpYyBpbnQgX19jaWZzX2RvX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGlyZW50cnksXFxuLS1cXG5mcy9zbWIvY2xpZW50L2Rpci5jLTI0MC1cXHRcXHRcXHRcXHQvKiBxdWVyeSBpbm9kZSBpbmZvICovXFxuZnMvc21iL2NsaWVudC9kaXIuYzoyNDE6XFx0XFx0XFx0XFx0Z290byBjaWZzX2NyZWF0ZV9nZXRfZmlsZV9pbmZvO1xcbmZzL3NtYi9jbGllbnQvZGlyLmMtMjQyLVxcdFxcdFxcdH1cXG4tLVxcbmZzL3NtYi9jbGllbnQvZGlyLmMtMjY0LVxcdFxcdFxcdFxcdENJRlNTTUJDbG9zZSh4aWQsIHRjb24sIGZpZC1cXHUwMDNlbmV0ZmlkKTtcXG5mcy9zbWIvY2xpZW50L2Rpci5jOjI2NTpcXHRcXHRcXHRcXHRnb3RvIGNpZnNfY3JlYXRlX2dldF9maWxlX2luZm87XFxuZnMvc21iL2NsaWVudC9kaXIuYy0yNjYtXFx0XFx0XFx0fVxcbmZzL3NtYi9jbGllbnQvZGlyLmMtMjY3LVxcdFxcdFxcdC8qIHN1Y2Nlc3MsIG5vIG5lZWQgdG8gcXVlcnkgKi9cXG5mcy9zbWIvY2xpZW50L2Rpci5jOjI2ODpcXHRcXHRcXHRnb3RvIGNpZnNfY3JlYXRlX3NldF9kZW50cnk7XFxuZnMvc21iL2NsaWVudC9kaXIuYy0yNjktXFxuZnMvc21iL2NsaWVudC9kaXIuYy0yNzAtXFx0XFx0Y2FzZSAtRU5PRU5UOlxcbmZzL3NtYi9jbGllbnQvZGlyLmM6MjcxOlxcdFxcdFxcdGdvdG8gY2lmc19jcmVhdGVfZ2V0X2ZpbGVfaW5mbztcXG5mcy9zbWIvY2xpZW50L2Rpci5jLTI3Mi1cXG4tLVxcbmZzL3NtYi9jbGllbnQvZGlyLmMtMzczLVxcdFxcdC5kZXNpcmVkX2FjY2VzcyA9IGRlc2lyZWRfYWNjZXNzLFxcbmZzL3NtYi9jbGllbnQvZGlyLmM6Mzc0OlxcdFxcdC5jcmVhdGVfb3B0aW9ucyA9IGNpZnNfY3JlYXRlX29wdGlvbnMoY2lmc19zYiwgY3JlYXRlX29wdGlvbnMpLFxcbmZzL3NtYi9jbGllbnQvZGlyLmMtMzc1LVxcdFxcdC5kaXNwb3NpdGlvbiA9IGRpc3Bvc2l0aW9uLFxcbi0tXFxuZnMvc21iL2NsaWVudC9kaXIuYy0zODItXFx0aWYgKHJjKSB7XFxuZnMvc21iL2NsaWVudC9kaXIuYzozODM6XFx0XFx0Y2lmc19kYmcoRllJLCBcXFwiY2lmc19jcmVhdGUgcmV0dXJuZWQgMHgleFxcXFxuXFxcIiwgcmMpO1xcbmZzL3NtYi9jbGllbnQvZGlyLmMtMzg0LVxcdFxcdGlmIChyYyA9PSAtRUFDQ0VTIFxcdTAwMjZcXHUwMDI2IHJkd3JfZm9yX2ZzY2FjaGUgPT0gMSkge1xcbi0tXFxuZnMvc21iL2NsaWVudC9kaXIuYy00MjktXFxuZnMvc21iL2NsaWVudC9kaXIuYzo0MzA6Y2lmc19jcmVhdGVfZ2V0X2ZpbGVfaW5mbzpcXG5mcy9zbWIvY2xpZW50L2Rpci5jLTQzMS1cXHQvKiBzZXJ2ZXIgbWlnaHQgbWFzayBtb2RlIHNvIHdlIGhhdmUgdG8gcXVlcnkgZm9yIGl0ICovXFxuLS1cXG5mcy9zbWIvY2xpZW50L2Rpci5jLTQ1OC0jaWZkZWYgQ09ORklHX0NJRlNfQUxMT1dfSU5TRUNVUkVfTEVHQUNZXFxuZnMvc21iL2NsaWVudC9kaXIuYzo0NTk6Y2lmc19jcmVhdGVfc2V0X2RlbnRyeTpcXG5mcy9zbWIvY2xpZW50L2Rpci5jLTQ2MC0jZW5kaWYgLyogQ09ORklHX0NJRlNfQUxMT1dfSU5TRUNVUkVfTEVHQUNZICovXFxuLS1cXG5mcy9zbWIvY2xpZW50L2Rpci5jPTUyMD1pbnQgY2lmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGlyZW50cnksXFxuLS1cXG5mcy9zbWIvY2xpZW50L2Rpci5jLTY0Ni0gKi9cXG5mcy9zbWIvY2xpZW50L2Rpci5jOjY0NzppbnQgY2lmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbmZzL3NtYi9jbGllbnQvZGlyLmMtNjQ4LVxcdFxcdHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LCB1bW9kZV90IG1vZGUpXFxuLS1cXG5mcy9zbWIvY2xpZW50L2Rpci5jLTY2OC1cXG5mcy9zbWIvY2xpZW50L2Rpci5jOjY2OTpcXHRjaWZzX2RiZyhGWUksIFxcXCJjaWZzX2NyZWF0ZSBwYXJlbnQgaW5vZGUgPSAweCVwIG5hbWUgaXM6ICVwZCBhbmQgZGVudHJ5ID0gMHglcFxcXFxuXFxcIixcXG5mcy9zbWIvY2xpZW50L2Rpci5jLTY3MC1cXHRcXHQgZGlyLCBkaXJlbnRyeSwgZGlyZW50cnkpO1xcbi0tXFxuZnMvc21iL2NsaWVudC9maWxlLmM9NTQ3PXN0YXRpYyBpbnQgY2lmc19udF9vcGVuKGNvbnN0IGNoYXIgKmZ1bGxfcGF0aCwgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYixcXG4tLVxcbmZzL3NtYi9jbGllbnQvZmlsZS5jLTYwMC1cXHRcXHQuZGVzaXJlZF9hY2Nlc3MgPSBkZXNpcmVkX2FjY2VzcyxcXG5mcy9zbWIvY2xpZW50L2ZpbGUuYzo2MDE6XFx0XFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCBjcmVhdGVfb3B0aW9ucyksXFxuZnMvc21iL2NsaWVudC9maWxlLmMtNjAyLVxcdFxcdC5kaXNwb3NpdGlvbiA9IGRpc3Bvc2l0aW9uLFxcbi0tXFxuZnMvc21iL2NsaWVudC9maWxlLmM9MTIzMz1jaWZzX3Jlb3Blbl9maWxlKHN0cnVjdCBjaWZzRmlsZUluZm8gKmNmaWxlLCBib29sIGNhbl9mbHVzaClcXG4tLVxcbmZzL3NtYi9jbGllbnQvZmlsZS5jLTEzMjgtXFx0XFx0LmRlc2lyZWRfYWNjZXNzID0gZGVzaXJlZF9hY2Nlc3MsXFxuZnMvc21iL2NsaWVudC9maWxlLmM6MTMyOTpcXHRcXHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIGNyZWF0ZV9vcHRpb25zKSxcXG5mcy9zbWIvY2xpZW50L2ZpbGUuYy0xMzMwLVxcdFxcdC5kaXNwb3NpdGlvbiA9IGRpc3Bvc2l0aW9uLFxcbi0tXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jPTI2OT1jaWZzX3VuaXhfYmFzaWNfdG9fZmF0dHIoc3RydWN0IGNpZnNfZmF0dHIgKmZhdHRyLCBGSUxFX1VOSVhfQkFTSUNfSU5GTyAqaW5mbyxcXG4tLVxcbmZzL3NtYi9jbGllbnQvaW5vZGUuYy0zNjItICovXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jOjM2MzpzdGF0aWMgdm9pZCBjaWZzX2NyZWF0ZV9qdW5jdGlvbl9mYXR0cihzdHJ1Y3QgY2lmc19mYXR0ciAqZmF0dHIsXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTM2NC1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL3NtYi9jbGllbnQvaW5vZGUuYz00MDg9Y2lmc19nZXRfZmlsZV9pbmZvX3VuaXgoc3RydWN0IGZpbGUgKmZpbHApXFxuLS1cXG5mcy9zbWIvY2xpZW50L2lub2RlLmMtNDMyLVxcdH0gZWxzZSBpZiAocmMgPT0gLUVSRU1PVEUpIHtcXG5mcy9zbWIvY2xpZW50L2lub2RlLmM6NDMzOlxcdFxcdGNpZnNfY3JlYXRlX2p1bmN0aW9uX2ZhdHRyKFxcdTAwMjZmYXR0ciwgaW5vZGUtXFx1MDAzZWlfc2IpO1xcbmZzL3NtYi9jbGllbnQvaW5vZGUuYy00MzQtXFx0fSBlbHNlXFxuLS1cXG5mcy9zbWIvY2xpZW50L2lub2RlLmM9NDQ0PXN0YXRpYyBpbnQgY2lmc19nZXRfdW5peF9mYXR0cihjb25zdCB1bnNpZ25lZCBjaGFyICpmdWxsX3BhdGgsXFxuLS1cXG5mcy9zbWIvY2xpZW50L2lub2RlLmMtNDczLVxcdH0gZWxzZSBpZiAocmMgPT0gLUVSRU1PVEUpIHtcXG5mcy9zbWIvY2xpZW50L2lub2RlLmM6NDc0OlxcdFxcdGNpZnNfY3JlYXRlX2p1bmN0aW9uX2ZhdHRyKGZhdHRyLCBzYik7XFxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTQ3NS1cXHRcXHRyYyA9IDA7XFxuLS1cXG5mcy9zbWIvY2xpZW50L2lub2RlLmM9NTM1PWNpZnNfc2Z1X3R5cGUoc3RydWN0IGNpZnNfZmF0dHIgKmZhdHRyLCBjb25zdCBjaGFyICpwYXRoLFxcbi0tXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTU3NS1cXHRcXHQuZGVzaXJlZF9hY2Nlc3MgPSBHRU5FUklDX1JFQUQsXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jOjU3NjpcXHRcXHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIENSRUFURV9OT1RfRElSKSxcXG5mcy9zbWIvY2xpZW50L2lub2RlLmMtNTc3LVxcdFxcdC5kaXNwb3NpdGlvbiA9IEZJTEVfT1BFTixcXG4tLVxcbmZzL3NtYi9jbGllbnQvaW5vZGUuYz05ODA9Y2lmc19nZXRfZmlsZV9pbmZvKHN0cnVjdCBmaWxlICpmaWxwKVxcbi0tXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTEwMTgtXFx0Y2FzZSAtRVJFTU9URTpcXG5mcy9zbWIvY2xpZW50L2lub2RlLmM6MTAxOTpcXHRcXHRjaWZzX2NyZWF0ZV9qdW5jdGlvbl9mYXR0cihcXHUwMDI2ZmF0dHIsIGlub2RlLVxcdTAwM2VpX3NiKTtcXG5mcy9zbWIvY2xpZW50L2lub2RlLmMtMTAyMC1cXHRcXHRicmVhaztcXG4tLVxcbmZzL3NtYi9jbGllbnQvaW5vZGUuYz0xMTcyPXN0YXRpYyBpbnQgcmVwYXJzZV9pbmZvX3RvX2ZhdHRyKHN0cnVjdCBjaWZzX29wZW5faW5mb19kYXRhICpkYXRhLFxcbi0tXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTEyMTQtXFx0XFx0aWYgKGxlMzJfdG9fY3B1KGRhdGEtXFx1MDAzZWZpLkF0dHJpYnV0ZXMpIFxcdTAwMjYgQVRUUl9ESVJFQ1RPUlkpIHtcXG5mcy9zbWIvY2xpZW50L2lub2RlLmM6MTIxNTpcXHRcXHRcXHRjaWZzX2NyZWF0ZV9qdW5jdGlvbl9mYXR0cihmYXR0ciwgc2IpO1xcbmZzL3NtYi9jbGllbnQvaW5vZGUuYy0xMjE2LVxcdFxcdFxcdGdvdG8gb3V0O1xcbi0tXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTEyMzktXFx0XFx0XFx0XFx0cmMgPSAwO1xcbmZzL3NtYi9jbGllbnQvaW5vZGUuYzoxMjQwOlxcdFxcdFxcdFxcdGNpZnNfY3JlYXRlX2p1bmN0aW9uX2ZhdHRyKGZhdHRyLCBzYik7XFxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTEyNDEtXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuLS1cXG5mcy9zbWIvY2xpZW50L2lub2RlLmM9MTI3Mj1zdGF0aWMgaW50IGNpZnNfZ2V0X2ZhdHRyKHN0cnVjdCBjaWZzX29wZW5faW5mb19kYXRhICpkYXRhLFxcbi0tXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTEzMjctXFx0XFx0LyogREZTIGxpbmssIG5vIG1ldGFkYXRhIGF2YWlsYWJsZSBvbiB0aGlzIHNlcnZlciAqL1xcbmZzL3NtYi9jbGllbnQvaW5vZGUuYzoxMzI4OlxcdFxcdGNpZnNfY3JlYXRlX2p1bmN0aW9uX2ZhdHRyKGZhdHRyLCBzYik7XFxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTEzMjktXFx0XFx0cmMgPSAwO1xcbi0tXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jPTE0NjM9c3RhdGljIGludCBzbWIzMTFfcG9zaXhfZ2V0X2ZhdHRyKHN0cnVjdCBjaWZzX29wZW5faW5mb19kYXRhICpkYXRhLFxcbi0tXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTE1MDYtXFx0XFx0LyogREZTIGxpbmssIG5vIG1ldGFkYXRhIGF2YWlsYWJsZSBvbiB0aGlzIHNlcnZlciAqL1xcbmZzL3NtYi9jbGllbnQvaW5vZGUuYzoxNTA3OlxcdFxcdGNpZnNfY3JlYXRlX2p1bmN0aW9uX2ZhdHRyKGZhdHRyLCBzYik7XFxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTE1MDgtXFx0XFx0cmMgPSAwO1xcbi0tXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jPTE4MDU9Y2lmc19yZW5hbWVfcGVuZGluZ19kZWxldGUoY29uc3QgY2hhciAqZnVsbF9wYXRoLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9zbWIvY2xpZW50L2lub2RlLmMtMTgzNy1cXHRcXHQuZGVzaXJlZF9hY2Nlc3MgPSBERUxFVEUgfCBGSUxFX1dSSVRFX0FUVFJJQlVURVMsXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jOjE4Mzg6XFx0XFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCBDUkVBVEVfTk9UX0RJUiksXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTE4MzktXFx0XFx0LmRpc3Bvc2l0aW9uID0gRklMRV9PUEVOLFxcbi0tXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jPTI0MzU9Y2lmc19kb19yZW5hbWUoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGRlbnRyeSAqZnJvbV9kZW50cnksXFxuLS1cXG5mcy9zbWIvY2xpZW50L2lub2RlLmMtMjQ5My1cXHRcXHQuZGVzaXJlZF9hY2Nlc3MgPSBERUxFVEUsXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jOjI0OTQ6XFx0XFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCBDUkVBVEVfTk9UX0RJUiksXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTI0OTUtXFx0XFx0LmRpc3Bvc2l0aW9uID0gRklMRV9PUEVOLFxcbi0tXFxuZnMvc21iL2NsaWVudC9saW5rLmM9MjI3PWNpZnNfcXVlcnlfbWZfc3ltbGluayh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxcbi0tXFxuZnMvc21iL2NsaWVudC9saW5rLmMtMjQyLVxcdFxcdC5kZXNpcmVkX2FjY2VzcyA9IEdFTkVSSUNfUkVBRCxcXG5mcy9zbWIvY2xpZW50L2xpbmsuYzoyNDM6XFx0XFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCBDUkVBVEVfTk9UX0RJUiksXFxuZnMvc21iL2NsaWVudC9saW5rLmMtMjQ0LVxcdFxcdC5kaXNwb3NpdGlvbiA9IEZJTEVfT1BFTixcXG4tLVxcbmZzL3NtYi9jbGllbnQvbGluay5jPTI3MT1pbnRcXG5mcy9zbWIvY2xpZW50L2xpbmsuYzoyNzI6Y2lmc19jcmVhdGVfbWZfc3ltbGluayh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxcbmZzL3NtYi9jbGllbnQvbGluay5jLTI3My1cXHRcXHQgICAgICAgc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiwgY29uc3QgdW5zaWduZWQgY2hhciAqcGF0aCxcXG4tLVxcbmZzL3NtYi9jbGllbnQvbGluay5jLTI4NS1cXHRcXHQuZGVzaXJlZF9hY2Nlc3MgPSBHRU5FUklDX1dSSVRFLFxcbmZzL3NtYi9jbGllbnQvbGluay5jOjI4NjpcXHRcXHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIENSRUFURV9OT1RfRElSKSxcXG5mcy9zbWIvY2xpZW50L2xpbmsuYy0yODctXFx0XFx0LmRpc3Bvc2l0aW9uID0gRklMRV9DUkVBVEUsXFxuLS1cXG5mcy9zbWIvY2xpZW50L2xpbmsuYz0zMTI9c21iM19xdWVyeV9tZl9zeW1saW5rKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sXFxuLS1cXG5mcy9zbWIvY2xpZW50L2xpbmsuYy0zMjktXFx0XFx0LmRlc2lyZWRfYWNjZXNzID0gR0VORVJJQ19SRUFELFxcbmZzL3NtYi9jbGllbnQvbGluay5jOjMzMDpcXHRcXHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIENSRUFURV9OT1RfRElSKSxcXG5mcy9zbWIvY2xpZW50L2xpbmsuYy0zMzEtXFx0XFx0LmRpc3Bvc2l0aW9uID0gRklMRV9PUEVOLFxcbi0tXFxuZnMvc21iL2NsaWVudC9saW5rLmM9Mzc1PXNtYjNfY3JlYXRlX21mX3N5bWxpbmsodW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfdGNvbiAqdGNvbixcXG4tLVxcbmZzL3NtYi9jbGllbnQvbGluay5jLTM5Ny1cXHRcXHQuZGVzaXJlZF9hY2Nlc3MgPSBHRU5FUklDX1dSSVRFLFxcbmZzL3NtYi9jbGllbnQvbGluay5jOjM5ODpcXHRcXHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIENSRUFURV9OT1RfRElSKSxcXG5mcy9zbWIvY2xpZW50L2xpbmsuYy0zOTktXFx0XFx0LmRpc3Bvc2l0aW9uID0gRklMRV9DUkVBVEUsXFxuLS1cXG5mcy9zbWIvY2xpZW50L3JlcGFyc2UuYz0yNDc9c3RhdGljIGludCBkZXRlY3RfZGlyZWN0b3J5X3N5bWxpbmtfdGFyZ2V0KHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IsXFxuLS1cXG5mcy9zbWIvY2xpZW50L3JlcGFyc2UuYy0zMzItXFx0b3Bsb2NrID0gMDtcXG5mcy9zbWIvY2xpZW50L3JlcGFyc2UuYzozMzM6XFx0b3Bhcm1zLmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLFxcbmZzL3NtYi9jbGllbnQvcmVwYXJzZS5jLTMzNC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgQ1JFQVRFX05PVF9GSUxFIHwgT1BFTl9SRVBBUlNFX1BPSU5UKTtcXG4tLVxcbmZzL3NtYi9jbGllbnQvcmVwYXJzZS5jLTM1MS1cXHRcXHRvcGxvY2sgPSAwO1xcbmZzL3NtYi9jbGllbnQvcmVwYXJzZS5jOjM1MjpcXHRcXHRvcGFybXMuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsXFxuZnMvc21iL2NsaWVudC9yZXBhcnNlLmMtMzUzLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBDUkVBVEVfTk9UX0RJUiB8IE9QRU5fUkVQQVJTRV9QT0lOVCk7XFxuLS1cXG5mcy9zbWIvY2xpZW50L3JlcGFyc2UuYz0xMjM1PWJvb2wgY2lmc19yZXBhcnNlX3BvaW50X3RvX2ZhdHRyKHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IsXFxuLS1cXG5mcy9zbWIvY2xpZW50L3JlcGFyc2UuYy0xMjY2LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5mcy9zbWIvY2xpZW50L3JlcGFyc2UuYzoxMjY3OlxcdFxcdC8qIFNlZSBjaWZzX2NyZWF0ZV9qdW5jdGlvbl9mYXR0cigpICovXFxuZnMvc21iL2NsaWVudC9yZXBhcnNlLmMtMTI2OC1cXHRcXHRmYXR0ci1cXHUwMDNlY2ZfbW9kZSA9IFNfSUZESVIgfCAwNzExO1xcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIxb3BzLmM9OTQyPXNtYl9zZXRfZmlsZV9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKmZ1bGxfcGF0aCxcXG4tLVxcbmZzL3NtYi9jbGllbnQvc21iMW9wcy5jLTEwMjYtXFx0XFx0LmRlc2lyZWRfYWNjZXNzID0gU1lOQ0hST05JWkUgfCBGSUxFX1dSSVRFX0FUVFJJQlVURVMsXFxuZnMvc21iL2NsaWVudC9zbWIxb3BzLmM6MTAyNzpcXHRcXHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIDApLFxcbmZzL3NtYi9jbGllbnQvc21iMW9wcy5jLTEwMjgtXFx0XFx0LmRpc3Bvc2l0aW9uID0gRklMRV9PUEVOLFxcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIxb3BzLmM9MTM4Nz1zdHJ1Y3Qgc21iX3ZlcnNpb25fb3BlcmF0aW9ucyBzbWIxX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9zbWIvY2xpZW50L3NtYjFvcHMuYy0xNDM5LVxcdC5nZXRfcmVwYXJzZV9wb2ludF9idWZmZXIgPSBjaWZzX2dldF9yZXBhcnNlX3BvaW50X2J1ZmZlcixcXG5mcy9zbWIvY2xpZW50L3NtYjFvcHMuYzoxNDQwOlxcdC5jcmVhdGVfcmVwYXJzZV9pbm9kZSA9IGNpZnNfY3JlYXRlX3JlcGFyc2VfaW5vZGUsXFxuZnMvc21iL2NsaWVudC9zbWIxb3BzLmMtMTQ0MS1cXHQub3BlbiA9IGNpZnNfb3Blbl9maWxlLFxcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIxb3BzLmMtMTQ1OC1cXHQucXVlcnlfbWZfc3ltbGluayA9IGNpZnNfcXVlcnlfbWZfc3ltbGluayxcXG5mcy9zbWIvY2xpZW50L3NtYjFvcHMuYzoxNDU5OlxcdC5jcmVhdGVfbWZfc3ltbGluayA9IGNpZnNfY3JlYXRlX21mX3N5bWxpbmssXFxuZnMvc21iL2NsaWVudC9zbWIxb3BzLmMtMTQ2MC1cXHQuaXNfcmVhZF9vcCA9IGNpZnNfaXNfcmVhZF9vcCxcXG4tLVxcbmZzL3NtYi9jbGllbnQvc21iMXByb3RvLmg9MTA4PWludCBjaWZzX3F1ZXJ5X3JlcGFyc2VfcG9pbnQoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfdGNvbiAqdGNvbixcXG4tLVxcbmZzL3NtYi9jbGllbnQvc21iMXByb3RvLmgtMTExLVxcdFxcdFxcdCAgICAgaW50ICpyc3BfYnVmdHlwZSk7XFxuZnMvc21iL2NsaWVudC9zbWIxcHJvdG8uaDoxMTI6c3RydWN0IGlub2RlICpjaWZzX2NyZWF0ZV9yZXBhcnNlX2lub2RlKHN0cnVjdCBjaWZzX29wZW5faW5mb19kYXRhICpkYXRhLFxcbmZzL3NtYi9jbGllbnQvc21iMXByb3RvLmgtMTEzLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYz04ODM9c21iM19xZnNfdGNvbihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtODk3LVxcdFxcdC5kaXNwb3NpdGlvbiA9IEZJTEVfT1BFTixcXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYzo4OTg6XFx0XFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCAwKSxcXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy04OTktXFx0XFx0LmZpZCA9IFxcdTAwMjZmaWQsXFxuLS1cXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYz05Mjg9c21iMl9xZnNfdGNvbihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtOTQxLVxcdFxcdC5kaXNwb3NpdGlvbiA9IEZJTEVfT1BFTixcXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYzo5NDI6XFx0XFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCAwKSxcXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy05NDMtXFx0XFx0LmZpZCA9IFxcdTAwMjZmaWQsXFxuLS1cXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYz05NTk9c21iMl9pc19wYXRoX2FjY2Vzc2libGUoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfdGNvbiAqdGNvbixcXG4tLVxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jLTk4Ni1cXHRcXHQuZGlzcG9zaXRpb24gPSBGSUxFX09QRU4sXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM6OTg3OlxcdFxcdC5jcmVhdGVfb3B0aW9ucyA9IGNpZnNfY3JlYXRlX29wdGlvbnMoY2lmc19zYiwgMCksXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtOTg4LVxcdFxcdC5maWQgPSBcXHUwMDI2ZmlkLFxcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM9MTE4MT1zbWIyX3NldF9lYShjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMTI4My1cXHRcXHQuZGlzcG9zaXRpb24gPSBGSUxFX09QRU4sXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM6MTI4NDpcXHRcXHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIDApLFxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jLTEyODUtXFx0XFx0LmZpZCA9IFxcdTAwMjZmaWQsXFxuLS1cXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYz0xNTc3PXNtYjJfaW9jdGxfcXVlcnlfaW5mbyhjb25zdCB1bnNpZ25lZCBpbnQgeGlkLFxcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMTY1Mi1cXHRcXHQuZGlzcG9zaXRpb24gPSBGSUxFX09QRU4sXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM6MTY1MzpcXHRcXHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIGNyZWF0ZV9vcHRpb25zKSxcXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0xNjU0LVxcdFxcdC5maWQgPSBcXHUwMDI2ZmlkLFxcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM9MjM3MT1zbWIzX25vdGlmeShjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZmlsZSAqcGZpbGUsXFxuLS1cXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0yNDIwLVxcdFxcdC5kaXNwb3NpdGlvbiA9IEZJTEVfT1BFTixcXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYzoyNDIxOlxcdFxcdC5jcmVhdGVfb3B0aW9ucyA9IGNpZnNfY3JlYXRlX29wdGlvbnMoY2lmc19zYiwgMCksXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMjQyMi1cXHRcXHQuZmlkID0gXFx1MDAyNmZpZCxcXG4tLVxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jPTI0NTQ9c21iMl9xdWVyeV9kaXJfZmlyc3QoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfdGNvbiAqdGNvbixcXG4tLVxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jLTI0OTktXFx0XFx0LmRpc3Bvc2l0aW9uID0gRklMRV9PUEVOLFxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jOjI1MDA6XFx0XFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCAwKSxcXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0yNTAxLVxcdFxcdC5maWQgPSBmaWQsXFxuLS1cXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYz0yODMwPXNtYjJfcXVlcnlfaW5mb19jb21wb3VuZChjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMjg5MC1cXHRcXHQuZGlzcG9zaXRpb24gPSBGSUxFX09QRU4sXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM6Mjg5MTpcXHRcXHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIDApLFxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jLTI4OTItXFx0XFx0LmZpZCA9IFxcdTAwMjZmaWQsXFxuLS1cXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYz0zMDI3PXNtYjMxMV9xdWVyeWZzKGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sXFxuLS1cXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0zMDQzLVxcdFxcdC5kaXNwb3NpdGlvbiA9IEZJTEVfT1BFTixcXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYzozMDQ0OlxcdFxcdC5jcmVhdGVfb3B0aW9ucyA9IGNpZnNfY3JlYXRlX29wdGlvbnMoY2lmc19zYiwgMCksXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMzA0NS1cXHRcXHQuZmlkID0gXFx1MDAyNmZpZCxcXG4tLVxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jPTMyMzg9Z2V0X3NtYjJfYWNsX2J5X3BhdGgoc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYixcXG4tLVxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jLTMyNzQtXFx0XFx0ICovXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM6MzI3NTpcXHRcXHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIDApIHxcXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0zMjc2LVxcdFxcdFxcdFxcdCAgT1BFTl9SRVBBUlNFX1BPSU5ULFxcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM9MzMwND1zZXRfc21iMl9hY2woc3RydWN0IHNtYl9udHNkICpwbm50c2QsIF9fdTMyIGFjbGxlbixcXG4tLVxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jLTMzMzktXFx0XFx0LmRlc2lyZWRfYWNjZXNzID0gYWNjZXNzX2ZsYWdzLFxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jOjMzNDA6XFx0XFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCAwKSxcXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0zMzQxLVxcdFxcdC5kaXNwb3NpdGlvbiA9IEZJTEVfT1BFTixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTg6NDA6MjUuNjYzNjg1MDQyWiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwNTQ5MjYwODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIENJRlMgQ3JlYXRlIE9wZXJhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIGF0IHRoaXMgcGF0Y2ggcmVtb3ZpbmcgdGhlIGBleGNsYCBhcmd1bWVudCBmcm9tIHRoZSBgY2lmc19jcmVhdGVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBiZWZvcmUgdGhpcyBtb2RpZmljYXRpb24sIHRoZSBgY2lmc19jcmVhdGVgIGZ1bmN0aW9uIGl0c2VsZiBkaWRuJ3QgZXZlbiAqdXNlKiB0aGUgYGV4Y2xgIHBhcmFtZXRlciwgcmlnaHQ/IEl0IHdhcyBlZmZlY3RpdmVseSBiZWluZyBpZ25vcmVkOlxuYGBgY1xuaW50IGNpZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcblx0XHRzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG5gYGBcblNvLCBhcyBJIHVuZGVyc3RhbmQgaXQsIHRoaXMgcGF0Y2ggaXMgcHVyZWx5IGEgcmVmYWN0b3Jpbmcgb3BlcmF0aW9uLiBJdCdzIGFib3V0IGNsZWFuaW5nIHVwIHRoZSBBUEksIG1ha2luZyB0aGluZ3MgbW9yZSBzdHJlYW1saW5lZC4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gbm90ZTsgaXQncyAqbm90KiBhIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5MZXQgbWUgYnJlYWsgZG93biBteSB1bmRlcnN0YW5kaW5nIGZvciBjbGFyaXR5OlxuKiAgIFRoZSBwcmltYXJ5IGNoYW5nZSBpcyB0aGUgcmVtb3ZhbCBvZiB0aGUgYGV4Y2xgIGFyZ3VtZW50IGZyb20gdGhlIGBjcmVhdGVgIGlub2RlIG9wZXJhdGlvbi5cbiogICBUaGUgVkZTIGZ1bmN0aW9ucyBgdmZzX2NyZWF0ZWAgYW5kIGBsb29rdXBfb3BlbmAgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gKm5vIGxvbmdlciogcGFzcyB0aGlzIGBleGNsYCBmbGFnLlxuKiAgIEZpbGVzeXN0ZW1zIGFyZSBiZWluZyB1cGRhdGVkIHRvIGRyb3AgdGhlIGBleGNsYCBhcmd1bWVudCBmcm9tIHRoZWlyIGNvcnJlc3BvbmRpbmcgaW1wbGVtZW50YXRpb25zIGFzIHdlbGwuXG4qICAgVGhlIGZldyBmaWxlc3lzdGVtcyB0aGF0IHdlcmUgcHJldmlvdXNseSBmb3J3YXJkaW5nIGFuIGBleGNsYCBhcmd1bWVudCBpbiBjYWxscyB0byBpbnRlcm5hbCBmdW5jdGlvbnMgc3VjaCBhcyBgZ2ZzMmAsIGBuZnNgLCBhbmQgYHZib3hzZmAsIG5vdyBjb25zaXN0ZW50bHkgcGFzcyBhIHZhbHVlIGxpa2UgYDFgLCBgdHJ1ZWAsIG9yIGBPX0VYQ0xgLCBpbiBhbGlnbm1lbnQgd2l0aCB0aGUgcHJldmlvdXMgYmVoYXZpb3IuIFNpbmNlIGB2ZnNfY3JlYXRlYCBhbHdheXMgcGFzc2VkIGB0cnVlYCBhbmQgdGhlIG9yaWdpbmFsIGBsb29rdXBfb3BlbmAgcGFzc2VkIGBvcGVuX2ZsYWcgXHUwMDI2IE9fRVhDTGAgYW5kIHRoZXJlIGlzIGBpbm9kZV9sb2NrYCBvbiBub24tZXhjbHVzaXZlIGNyZWF0ZXMsIHRoZSBwYXJhbWV0ZXIgd2FzIHJlZHVuZGFudC5cbiogICBOZXR3b3JrIGZpbGVzeXN0ZW1zLCB3aGljaCBzaG91bGQgdXNlIGBhdG9taWNfb3BlbmAgZm9yIG5vbi1leGNsdXNpdmUgY3JlYXRlcywgYXJlIGFscmVhZHkgZG9pbmcgc28gKGUuZy4gYGdmczJgLCBgbmZzYCwgYHZib3hzZmAsIGBjaWZzYCwgYDlwYCwgYW5kIGBmdXNlYCkuXG5cblRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gY2hhbmdlIGluIHRoZSBrZXJuZWwncyBsb2dpY2FsIGJlaGF2aW9yIHRoYXQgbmVjZXNzaXRhdGVzIGZ1enppbmcuIEl0J3MgYSBwdXJlIEFQSSByZWZhY3RvciBhbmQgSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYCBhbmQgZXhwbGFpbiB0aGF0IHRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgQVBJIHJlZmFjdG9yaW5nIG9mIHRoZSBWRlMgYGNyZWF0ZWAgaW5vZGUgb3BlcmF0aW9uLiBUaGUgcGF0Y2ggcmVtb3ZlcyBhIHJlZHVuZGFudCBhcmd1bWVudCwgYnV0IGxlYXZlcyB0aGUga2VybmVsIGxvZ2ljIHVudG91Y2hlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIzMjgsIk91dHB1dFRva2VucyI6MTkwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE4OjQwOjM0LjcxODYxNDM4N1oiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2MDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBpcyBhIHRyZWUtd2lkZSBBUEkgcmVmYWN0b3JpbmcgdGhhdCByZW1vdmVzIHRoZSByZWR1bmRhbnQgJ2V4Y2wnIGFyZ3VtZW50IGZyb20gdGhlICdjcmVhdGUnIGlub2RlIG9wZXJhdGlvbi4gVkZTIHByZXZpb3VzbHkgcGFzc2VkICd0cnVlJyBmcm9tIHZmc19jcmVhdGUoKSBhbmQgJ29wZW5fZmxhZyBcXHUwMDI2IE9fRVhDTCcgZnJvbSBsb29rdXBfb3BlbigpLiBIb3dldmVyLCBmb3IgbG9jYWwgZmlsZXN5c3RlbXMsIFZGUyBob2xkcyB0aGUgaW5vZGVfbG9jayBkdXJpbmcgY3JlYXRlLCBtYWtpbmcgY29uY3VycmVudCBjcmVhdGlvbiBpbXBvc3NpYmxlIGFuZCB0aGUgJ2V4Y2wnIGFyZ3VtZW50IHJlZHVuZGFudC4gRm9yIG5ldHdvcmsgZmlsZXN5c3RlbXMsIG5vbi1leGNsdXNpdmUgY3JlYXRlcyBhcmUgaGFuZGxlZCB2aWEgYXRvbWljX29wZW4oKS4gVGhlIGZpbGVzeXN0ZW1zIHRoYXQgdXNlZCB0aGUgYXJndW1lbnQgaW50ZXJuYWxseSAobGlrZSBnZnMyLCBuZnMsIHZib3hzZikgbm93IGhhcmRjb2RlICd0cnVlJyBvciAnT19FWENMJywgd2hpY2ggZXhhY3RseSBtYXRjaGVzIHRoZSBwcmV2aW91cyBiZWhhdmlvciB3aGVuIGNhbGxlZCBmcm9tIHZmc19jcmVhdGUuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBpcyBhIHRyZWUtd2lkZSBBUEkgcmVmYWN0b3JpbmcgdGhhdCByZW1vdmVzIHRoZSByZWR1bmRhbnQgJ2V4Y2wnIGFyZ3VtZW50IGZyb20gdGhlICdjcmVhdGUnIGlub2RlIG9wZXJhdGlvbi4gVkZTIHByZXZpb3VzbHkgcGFzc2VkICd0cnVlJyBmcm9tIHZmc19jcmVhdGUoKSBhbmQgJ29wZW5fZmxhZyBcXHUwMDI2IE9fRVhDTCcgZnJvbSBsb29rdXBfb3BlbigpLiBIb3dldmVyLCBmb3IgbG9jYWwgZmlsZXN5c3RlbXMsIFZGUyBob2xkcyB0aGUgaW5vZGVfbG9jayBkdXJpbmcgY3JlYXRlLCBtYWtpbmcgY29uY3VycmVudCBjcmVhdGlvbiBpbXBvc3NpYmxlIGFuZCB0aGUgJ2V4Y2wnIGFyZ3VtZW50IHJlZHVuZGFudC4gRm9yIG5ldHdvcmsgZmlsZXN5c3RlbXMsIG5vbi1leGNsdXNpdmUgY3JlYXRlcyBhcmUgaGFuZGxlZCB2aWEgYXRvbWljX29wZW4oKS4gVGhlIGZpbGVzeXN0ZW1zIHRoYXQgdXNlZCB0aGUgYXJndW1lbnQgaW50ZXJuYWxseSAobGlrZSBnZnMyLCBuZnMsIHZib3hzZikgbm93IGhhcmRjb2RlICd0cnVlJyBvciAnT19FWENMJywgd2hpY2ggZXhhY3RseSBtYXRjaGVzIHRoZSBwcmV2aW91cyBiZWhhdmlvciB3aGVuIGNhbGxlZCBmcm9tIHZmc19jcmVhdGUuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5k2rf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-01 18:26:58 +0000 UTC FinishedAt: 2026-07-01 18:40:36 +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+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBpcyBhIHRyZWUtd2lkZSBBUEkgcmVmYWN0b3JpbmcgdGhhdCByZW1vdmVzIHRoZSByZWR1bmRhbnQgJiMzOTtleGNsJiMzOTsgYXJndW1lbnQgZnJvbSB0aGUgJiMzOTtjcmVhdGUmIzM5OyBpbm9kZSBvcGVyYXRpb24uIFZGUyBwcmV2aW91c2x5IHBhc3NlZCAmIzM5O3RydWUmIzM5OyBmcm9tIHZmc19jcmVhdGUoKSBhbmQgJiMzOTtvcGVuX2ZsYWcgXHUwMDI2IE9fRVhDTCYjMzk7IGZyb20gbG9va3VwX29wZW4oKS4gSG93ZXZlciwgZm9yIGxvY2FsIGZpbGVzeXN0ZW1zLCBWRlMgaG9sZHMgdGhlIGlub2RlX2xvY2sgZHVyaW5nIGNyZWF0ZSwgbWFraW5nIGNvbmN1cnJlbnQgY3JlYXRpb24gaW1wb3NzaWJsZSBhbmQgdGhlICYjMzk7ZXhjbCYjMzk7IGFyZ3VtZW50IHJlZHVuZGFudC4gRm9yIG5ldHdvcmsgZmlsZXN5c3RlbXMsIG5vbi1leGNsdXNpdmUgY3JlYXRlcyBhcmUgaGFuZGxlZCB2aWEgYXRvbWljX29wZW4oKS4gVGhlIGZpbGVzeXN0ZW1zIHRoYXQgdXNlZCB0aGUgYXJndW1lbnQgaW50ZXJuYWxseSAobGlrZSBnZnMyLCBuZnMsIHZib3hzZikgbm93IGhhcmRjb2RlICYjMzk7dHJ1ZSYjMzk7IG9yICYjMzk7T19FWENMJiMzOTssIHdoaWNoIGV4YWN0bHkgbWF0Y2hlcyB0aGUgcHJldmlvdXMgYmVoYXZpb3Igd2hlbiBjYWxsZWQgZnJvbSB2ZnNfY3JlYXRlLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDA0MmRkZWNmM2NlZDIwNzc3YmU1Mzg3NGQxZDlhMDMzN2ZiNDJiOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMTg6Mzg6MTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3RcbmluZGV4IGQxM2YwYTIzYzg4MmZjLi4wMjUyMmZiZmQ5Njg2ZiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3RcbkBAIC0xNDAxLDMgJiM0MzsxNDAxLDExIEBAIGFzIHdpdGggZF9kaXNwb3NlX2lmX3VudXNlZCgpIHRoZXNlIGFyZSBub3QgdHJpdmlhbDsgd2l0aCB0aGlzIHZhcmlhbnRcbiBvZiBBUEkgaXQmIzM5O3MgbW9yZSBleHBsaWNpdCwgc2luY2UgZ3JhYmJpbmcgLVx1MDAzZWRfbG9jayBpcyBjYWxsZXItc2lkZSwgYnV0XG4gZF9kaXNwb3NlX2lmX3VudXNlZCgpIGhhZCBhbGwgdGhlIHNhbWUgaXNzdWVzLiAgSXQmIzM5O3MgYSBsb3ctbGV2ZWwgcHJpbWl0aXZlO1xuIHVzZSBvbmx5IGlmIHlvdSBoYXZlIG5vIGFsdGVybmF0aXZlLlxuJiM0MztcbiYjNDM7LS0tXG4mIzQzO1xuJiM0MzsqKm1hbmRhdG9yeSoqXG4mIzQzO1xuJiM0MztUaGUgLmNyZWF0ZSBpbm9kZV9vcGVyYXRpb24gbm8gbG9uZ2VyIHJlY2VpdmVzIHRoZSAmIzM5O2V4Y2wmIzM5OyBhcmcuICBJdCBtdXN0XG4mIzQzO2Fsd2F5cyBhc3N1bWUgdGhlIGZpbGUgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4gIElmIHRoZSBmaWxlc3lzdGVtIG5lZWRzXG4mIzQzO3RvIGJlIGludm9sdmVkIGluIG5vbi1leGNsdXNpdmUgY3JlYXRlLCBpdCBzaG91bGQgcHJvdmlkZSBhdG9taWNfb3Blbi5cbmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGUuYyBiL2ZzLzlwL3Zmc19pbm9kZS5jXG5pbmRleCA1NzgzZDAzMzZmOTZhYy4uZTQ3YjkwZTcwODM3NjggMTAwNjQ0XG4tLS0gYS9mcy85cC92ZnNfaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvOXAvdmZzX2lub2RlLmNcbkBAIC02NDUsNyAmIzQzOzY0NSw2IEBAIHY5ZnNfY3JlYXRlKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMsIHN0cnVjdCBpbm9kZSAqZGlyLFxuICAqIEBkaXI6IFRoZSBwYXJlbnQgZGlyZWN0b3J5XG4gICogQGRlbnRyeTogVGhlIG5hbWUgb2YgZmlsZSB0byBiZSBjcmVhdGVkXG4gICogQG1vZGU6IFRoZSBVTklYIGZpbGUgbW9kZSB0byBzZXRcbi0gKiBAZXhjbDogVHJ1ZSBpZiB0aGUgZmlsZSBtdXN0IG5vdCB5ZXQgZXhpc3RcbiAgKlxuICAqIG9wZW4oLi4sIE9fQ1JFQVQpIGlzIGhhbmRsZWQgaW4gdjlmc192ZnNfYXRvbWljX29wZW4oKS4gIFRoaXMgaXMgb25seSBjYWxsZWRcbiAgKiBmb3IgbWtub2QoMikuXG5AQCAtNjU0LDcgJiM0Mzs2NTMsNyBAQCB2OWZzX2NyZWF0ZShzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcbiBzdGF0aWMgaW50XG4gdjlmc192ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGRpcik7XG4gXHR1MzIgcGVybSA9IHVuaXhtb2RlMnA5bW9kZSh2OXNlcywgbW9kZSk7XG5kaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlX2RvdGwuYyBiL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmNcbmluZGV4IGY3Mzk2ZDIwY2I2Y2RjLi5kMTdjM2I2ZWViYjIyZCAxMDA2NDRcbi0tLSBhL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmNcbkBAIC0yMTMsMTIgJiM0MzsyMTMsMTEgQEAgaW50IHY5ZnNfb3Blbl90b19kb3RsX2ZsYWdzKGludCBmbGFncylcbiAgKiBAZGlyOiBkaXJlY3RvcnkgaW5vZGUgdGhhdCBpcyBiZWluZyBjcmVhdGVkXG4gICogQGRlbnRyeTogIGRlbnRyeSB0aGF0IGlzIGJlaW5nIGRlbGV0ZWRcbiAgKiBAb21vZGU6IGNyZWF0ZSBwZXJtaXNzaW9uc1xuLSAqIEBleGNsOiBUcnVlIGlmIHRoZSBmaWxlIG11c3Qgbm90IHlldCBleGlzdFxuICAqXG4gICovXG4gc3RhdGljIGludFxuIHY5ZnNfdmZzX2NyZWF0ZV9kb3RsKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3Qgb21vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG9tb2RlKVxuIHtcbiBcdHJldHVybiB2OWZzX3Zmc19ta25vZF9kb3RsKGlkbWFwLCBkaXIsIGRlbnRyeSwgb21vZGUsIDApO1xuIH1cbmRpZmYgLS1naXQgYS9mcy9hZmZzL2FmZnMuaCBiL2ZzL2FmZnMvYWZmcy5oXG5pbmRleCA0NGEzZjY5ZDI3NWY5Ni4uZDZiMzM5MzYzM2YyZDkgMTAwNjQ0XG4tLS0gYS9mcy9hZmZzL2FmZnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZmcy9hZmZzLmhcbkBAIC0xNjksNyAmIzQzOzE2OSw3IEBAIGV4dGVybiBpbnRcdGFmZnNfaGFzaF9uYW1lKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHU4ICpuYW1lLCB1bnNpZ25lZCBpbnQgbFxuIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICphZmZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bnNpZ25lZCBpbnQpO1xuIGV4dGVybiBpbnRcdGFmZnNfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuIGV4dGVybiBpbnRcdGFmZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCk7XG4mIzQzO1x0XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbiBleHRlcm4gc3RydWN0IGRlbnRyeSAqYWZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xuIGV4dGVybiBpbnRcdGFmZnNfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9uYW1laS5jIGIvZnMvYWZmcy9uYW1laS5jXG5pbmRleCBjM2M2NTMyZGE0YjBkYS4uYjAwMDEwODQ3MjdhNWQgMTAwNjQ0XG4tLS0gYS9mcy9hZmZzL25hbWVpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2FmZnMvbmFtZWkuY1xuQEAgLTI0Myw3ICYjNDM7MjQzLDcgQEAgYWZmc191bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcbiBpbnRcbiBhZmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHQgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHQgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRpci1cdTAwM2VpX3NiO1xuIFx0c3RydWN0IGlub2RlXHQqaW5vZGU7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpci5jIGIvZnMvYWZzL2Rpci5jXG5pbmRleCA0OThiOTljY2RmMGUyNy4uNjZjYzMzMzJlZjMxOWEgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9kaXIuY1xuQEAgLTMyLDcgJiM0MzszMiw3IEBAIHN0YXRpYyBib29sIGFmc19sb29rdXBfb25lX2ZpbGxkaXIoc3RydWN0IGRpcl9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsIGluXG4gc3RhdGljIGJvb2wgYWZzX2xvb2t1cF9maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmxlbixcbiBcdFx0XHQgICAgICBsb2ZmX3QgZnBvcywgdTY0IGlubywgdW5zaWduZWQgZHR5cGUpO1xuIHN0YXRpYyBpbnQgYWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpO1xuJiM0MztcdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xuIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xuIHN0YXRpYyBpbnQgYWZzX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuQEAgLTE2MjMsNyAmIzQzOzE2MjMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFmc19vcGVyYXRpb25fb3BzIGFmc19jcmVhdGVfb3BlcmF0aW9uID0ge1xuICAqIGNyZWF0ZSBhIHJlZ3VsYXIgZmlsZSBvbiBhbiBBRlMgZmlsZXN5c3RlbVxuICAqL1xuIHN0YXRpYyBpbnQgYWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG4mIzQzO1x0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3A7XG4gXHRzdHJ1Y3QgYWZzX3Zub2RlICpkdm5vZGUgPSBBRlNfRlNfSShkaXIpO1xuZGlmZiAtLWdpdCBhL2ZzL2JhZF9pbm9kZS5jIGIvZnMvYmFkX2lub2RlLmNcbmluZGV4IGFjZjg2MTNmNWUzNjhlLi40ODZjNDBmNzNlNTFlMCAxMDA2NDRcbi0tLSBhL2ZzL2JhZF9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9iYWRfaW5vZGUuY1xuQEAgLTI5LDcgJiM0MzsyOSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJhZF9maWxlX29wcyA9XG4gXG4gc3RhdGljIGludCBiYWRfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdCAgICB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdFx0ICAgIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRyZXR1cm4gLUVJTztcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvYmZzL2Rpci5jIGIvZnMvYmZzL2Rpci5jXG5pbmRleCA1YjQwYWIwOWE3OTZkZS4uNGMzYjRkYjA4Y2RlZmMgMTAwNjQ0XG4tLS0gYS9mcy9iZnMvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Jmcy9kaXIuY1xuQEAgLTgzLDcgJiM0Mzs4Myw3IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmZzX2Rpcl9vcGVyYXRpb25zID0ge1xuIH07XG4gXG4gc3RhdGljIGludCBiZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdGludCBlcnI7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2lub2RlLmMgYi9mcy9idHJmcy9pbm9kZS5jXG5pbmRleCAyNzI1OThmNmFlNzdhZi4uMjJjMGEwZTI0MWU1MzMgMTAwNjQ0XG4tLS0gYS9mcy9idHJmcy9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9idHJmcy9pbm9kZS5jXG5AQCAtNjgzMiw3ICYjNDM7NjgzMiw3IEBAIHN0YXRpYyBpbnQgYnRyZnNfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIH1cbiBcbiBzdGF0aWMgaW50IGJ0cmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbiBcbmRpZmYgLS1naXQgYS9mcy9jZXBoL2Rpci5jIGIvZnMvY2VwaC9kaXIuY1xuaW5kZXggMjdjZTllNTVlOTQ3NjguLmRlZTQ1MjRjMjMzNjIzIDEwMDY0NFxuLS0tIGEvZnMvY2VwaC9kaXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvY2VwaC9kaXIuY1xuQEAgLTk3OCw3ICYjNDM7OTc4LDcgQEAgc3RhdGljIGludCBjZXBoX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiB9XG4gXG4gc3RhdGljIGludCBjZXBoX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuJiM0MztcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdHJldHVybiBjZXBoX21rbm9kKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgMCk7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL2NvZGEvZGlyLmMgYi9mcy9jb2RhL2Rpci5jXG5pbmRleCA4MzVlYjdmZGZkYWQwMC4uZWE3MTBhNWRiYmI3NGIgMTAwNjQ0XG4tLS0gYS9mcy9jb2RhL2Rpci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9jb2RhL2Rpci5jXG5AQCAtMTM0LDcgJiM0MzsxMzQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY29kYV9kaXJfZHJvcF9ubGluayhzdHJ1Y3QgaW5vZGUgKmRpcilcbiBcbiAvKiBjcmVhdGlvbiByb3V0aW5lczogY3JlYXRlLCBta25vZCwgbWtkaXIsIGxpbmssIHN5bWxpbmsgKi9cbiBzdGF0aWMgaW50IGNvZGFfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlLCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdGludCBlcnJvcjtcbiBcdGNvbnN0IGNoYXIgKm5hbWU9ZGUtXHUwMDNlZF9uYW1lLm5hbWU7XG5kaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvaW5vZGUuYyBiL2ZzL2VjcnlwdGZzL2lub2RlLmNcbmluZGV4IDdhYWYxOTEzZjljNmQzLi41MjUyOTdjN2ViZDhjNCAxMDA2NDRcbi0tLSBhL2ZzL2VjcnlwdGZzL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2VjcnlwdGZzL2lub2RlLmNcbkBAIC0yNjgsNyAmIzQzOzI2OCw3IEBAIGludCBlY3J5cHRmc19pbml0aWFsaXplX2ZpbGUoc3RydWN0IGRlbnRyeSAqZWNyeXB0ZnNfZGVudHJ5LFxuIHN0YXRpYyBpbnRcbiBlY3J5cHRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdHN0cnVjdCBpbm9kZSAqZGlyZWN0b3J5X2lub2RlLCBzdHJ1Y3QgZGVudHJ5ICplY3J5cHRmc19kZW50cnksXG4tXHRcdHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuJiM0MztcdFx0dW1vZGVfdCBtb2RlKVxuIHtcbiBcdHN0cnVjdCBpbm9kZSAqZWNyeXB0ZnNfaW5vZGU7XG4gXHRpbnQgcmM7XG5kaWZmIC0tZ2l0IGEvZnMvZWZpdmFyZnMvaW5vZGUuYyBiL2ZzL2VmaXZhcmZzL2lub2RlLmNcbmluZGV4IDk1ZGNhZDgzZGExMWJlLi5mMGQwMDk1NTVmYzY2MCAxMDA2NDRcbi0tLSBhL2ZzL2VmaXZhcmZzL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2VmaXZhcmZzL2lub2RlLmNcbkBAIC03NSw3ICYjNDM7NzUsNyBAQCBzdGF0aWMgYm9vbCBlZml2YXJmc192YWxpZF9uYW1lKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbilcbiB9XG4gXG4gc3RhdGljIGludCBlZml2YXJmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMO1xuIFx0c3RydWN0IGVmaXZhcl9lbnRyeSAqdmFyO1xuZGlmZiAtLWdpdCBhL2ZzL2V4ZmF0L25hbWVpLmMgYi9mcy9leGZhdC9uYW1laS5jXG5pbmRleCBiN2Q1ZTQ0YWQzOGVlZS4uY2Q5YzllY2E1OGY4NmUgMTAwNjQ0XG4tLS0gYS9mcy9leGZhdC9uYW1laS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leGZhdC9uYW1laS5jXG5AQCAtNTM4LDcgJiM0Mzs1MzgsNyBAQCBzdGF0aWMgaW50IGV4ZmF0X2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpwYXRoLFxuIH1cbiBcbiBzdGF0aWMgaW50IGV4ZmF0X2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRpci1cdTAwM2VpX3NiO1xuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbmRpZmYgLS1naXQgYS9mcy9leHQyL25hbWVpLmMgYi9mcy9leHQyL25hbWVpLmNcbmluZGV4IDBkMDlkMjJmZTcwODYyLi43NDJhNzhlMTY1ZDQ4ZSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDIvbmFtZWkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0Mi9uYW1laS5jXG5AQCAtOTksNyAmIzQzOzk5LDcgQEAgc3RydWN0IGRlbnRyeSAqZXh0Ml9nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxuICAqL1xuIHN0YXRpYyBpbnQgZXh0Ml9jcmVhdGUgKHN0cnVjdCBtbnRfaWRtYXAgKiBpZG1hcCxcbiBcdFx0XHRzdHJ1Y3QgaW5vZGUgKiBkaXIsIHN0cnVjdCBkZW50cnkgKiBkZW50cnksXG4tXHRcdFx0dW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG4mIzQzO1x0XHRcdHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuIFx0aW50IGVycjtcbmRpZmYgLS1naXQgYS9mcy9leHQ0L25hbWVpLmMgYi9mcy9leHQ0L25hbWVpLmNcbmluZGV4IGNjNDlhZTA0YTZmNjQ5Li5jM2RlNjRkMmEyZGYyMCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvbmFtZWkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9uYW1laS5jXG5AQCAtMjgxMSw3ICYjNDM7MjgxMSw3IEBAIHN0YXRpYyBpbnQgZXh0NF9hZGRfbm9uZGlyKGhhbmRsZV90ICpoYW5kbGUsXG4gICogd2l0aCBkX2luc3RhbnRpYXRlKCkuXG4gICovXG4gc3RhdGljIGludCBleHQ0X2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuJiM0MztcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdGhhbmRsZV90ICpoYW5kbGU7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuZGlmZiAtLWdpdCBhL2ZzL2YyZnMvbmFtZWkuYyBiL2ZzL2YyZnMvbmFtZWkuY1xuaW5kZXggY2FjMDNiOGU5MWExNWUuLjY0ODY4MWM1YmE1MDE2IDEwMDY0NFxuLS0tIGEvZnMvZjJmcy9uYW1laS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9mMmZzL25hbWVpLmNcbkBAIC0zNjYsNyAmIzQzOzM2Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmYyZnNfbmV3X2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIH1cbiBcbiBzdGF0aWMgaW50IGYyZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG4mIzQzO1x0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpID0gRjJGU19JX1NCKGRpcik7XG4gXHRzdHJ1Y3QgZjJmc19sb2NrX2NvbnRleHQgbGM7XG5kaWZmIC0tZ2l0IGEvZnMvZmF0L25hbWVpX21zZG9zLmMgYi9mcy9mYXQvbmFtZWlfbXNkb3MuY1xuaW5kZXggMGZkMjk3MWFkNGIxMzEuLjlmMmEyZTlhOWNlOGVhIDEwMDY0NFxuLS0tIGEvZnMvZmF0L25hbWVpX21zZG9zLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZhdC9uYW1laV9tc2Rvcy5jXG5AQCAtMjYyLDcgJiM0MzsyNjIsNyBAQCBzdGF0aWMgaW50IG1zZG9zX2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSxcbiBcbiAvKioqKiogQ3JlYXRlIGEgZmlsZSAqL1xuIHN0YXRpYyBpbnQgbXNkb3NfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuJiM0MztcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGlyLVx1MDAzZWlfc2I7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDtcbmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfdmZhdC5jIGIvZnMvZmF0L25hbWVpX3ZmYXQuY1xuaW5kZXggZTkwOTQ0Nzg3M2UzNjQuLjEzOWQzZWY0YmZhZWI4IDEwMDY0NFxuLS0tIGEvZnMvZmF0L25hbWVpX3ZmYXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L25hbWVpX3ZmYXQuY1xuQEAgLTc1NSw3ICYjNDM7NzU1LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKnZmYXRfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gfVxuIFxuIHN0YXRpYyBpbnQgdmZhdF9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGlyLVx1MDAzZWlfc2I7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZGlyLmMgYi9mcy9mdXNlL2Rpci5jXG5pbmRleCAwZTJhMTAzOWZhNDNlYS4uMGVmYjMxNDFmN2Y3MGEgMTAwNjQ0XG4tLS0gYS9mcy9mdXNlL2Rpci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9mdXNlL2Rpci5jXG5AQCAtMTA4NCw3ICYjNDM7MTA4NCw3IEBAIHN0YXRpYyBpbnQgZnVzZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gfVxuIFxuIHN0YXRpYyBpbnQgZnVzZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuJiM0MztcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0cmV0dXJuIGZ1c2VfbWtub2QoaWRtYXAsIGRpciwgZW50cnksIG1vZGUsIDApO1xuIH1cbmRpZmYgLS1naXQgYS9mcy9nZnMyL2lub2RlLmMgYi9mcy9nZnMyL2lub2RlLmNcbmluZGV4IDhhNzc3OTRiYmQ0YWZjLi45ZTIzYzhkNTU5NjIzZCAxMDA2NDRcbi0tLSBhL2ZzL2dmczIvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZ2ZzMi9pbm9kZS5jXG5AQCAtOTY5LDkgJiM0Mzs5NjksOSBAQCBzdGF0aWMgaW50IGdmczJfY3JlYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gICovXG4gXG4gc3RhdGljIGludCBnZnMyX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuJiM0MztcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbi1cdHJldHVybiBnZnMyX2NyZWF0ZV9pbm9kZShkaXIsIGRlbnRyeSwgTlVMTCwgU19JRlJFRyB8IG1vZGUsIDAsIE5VTEwsIDAsIGV4Y2wpO1xuJiM0MztcdHJldHVybiBnZnMyX2NyZWF0ZV9pbm9kZShkaXIsIGRlbnRyeSwgTlVMTCwgU19JRlJFRyB8IG1vZGUsIDAsIE5VTEwsIDAsIDEpO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9mcy9oZnMvZGlyLmMgYi9mcy9oZnMvZGlyLmNcbmluZGV4IGUxMzQ1MGJiOTMzZWJkLi45M2VkYzVhODBjODEzZCAxMDA2NDRcbi0tLSBhL2ZzL2hmcy9kaXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzL2Rpci5jXG5AQCAtMTg0LDcgJiM0MzsxODQsNyBAQCBzdGF0aWMgaW50IGhmc19kaXJfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiAgKiB0aGUgZGlyZWN0b3J5IGFuZCB0aGUgbmFtZSAoYW5kIGl0cyBsZW5ndGgpIG9mIHRoZSBuZXcgZmlsZS5cbiAgKi9cbiBzdGF0aWMgaW50IGhmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuJiM0MztcdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbiBcdGludCByZXM7XG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9kaXIuYyBiL2ZzL2hmc3BsdXMvZGlyLmNcbmluZGV4IDhiZjZjN2NkZDlhODY1Li5mMGFhZTJjZDZmY2ZkYyAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvZGlyLmNcbkBAIC01NjIsNyAmIzQzOzU2Miw3IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gfVxuIFxuIHN0YXRpYyBpbnQgaGZzcGx1c19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRyZXR1cm4gaGZzcGx1c19ta25vZChcdTAwMjZub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgMCk7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jIGIvZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmNcbmluZGV4IGFiZTg2ZDcyZDllZjc1Li43YWRkMDU2ZDQ3ZDhmMCAxMDA2NDRcbi0tLSBhL2ZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uY1xuQEAgLTU5Myw3ICYjNDM7NTkzLDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqaG9zdGZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY2hhciAqbmFtZSlcbiB9XG4gXG4gc3RhdGljIGludCBob3N0ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4gXHRjaGFyICpuYW1lO1xuZGlmZiAtLWdpdCBhL2ZzL2hwZnMvbmFtZWkuYyBiL2ZzL2hwZnMvbmFtZWkuY1xuaW5kZXggMzUzZTEzYTYxNWY1NjYuLjgwOTExM2Q4MjQ4ZDUwIDEwMDY0NFxuLS0tIGEvZnMvaHBmcy9uYW1laS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9ocGZzL25hbWVpLmNcbkBAIC0xMjksNyAmIzQzOzEyOSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpocGZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiB9XG4gXG4gc3RhdGljIGludCBocGZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuJiM0MztcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUgPSBkZW50cnktXHUwMDNlZF9uYW1lLm5hbWU7XG4gXHR1bnNpZ25lZCBsZW4gPSBkZW50cnktXHUwMDNlZF9uYW1lLmxlbjtcbmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5pbmRleCAyMTZlMWEwZGQwYjIzNy4uMTZkODQzN2FlZDUxYmIgMTAwNjQ0XG4tLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcbkBAIC05NzksNyAmIzQzOzk3OSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpodWdldGxiZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyXG4gXG4gc3RhdGljIGludCBodWdldGxiZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdCAgICB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdFx0ICAgIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRyZXR1cm4gaHVnZXRsYmZzX21rbm9kKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSB8IFNfSUZSRUcsIDApO1xuIH1cbmRpZmYgLS1naXQgYS9mcy9qZmZzMi9kaXIuYyBiL2ZzL2pmZnMyL2Rpci5jXG5pbmRleCBjNDA4OGMzYjRhYzAzNi4uM2Q0Njk1YjgzOGVkMDYgMTAwNjQ0XG4tLS0gYS9mcy9qZmZzMi9kaXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvamZmczIvZGlyLmNcbkBAIC0yNiw3ICYjNDM7MjYsNyBAQFxuIHN0YXRpYyBpbnQgamZmczJfcmVhZGRpciAoc3RydWN0IGZpbGUgKiwgc3RydWN0IGRpcl9jb250ZXh0ICopO1xuIFxuIHN0YXRpYyBpbnQgamZmczJfY3JlYXRlIChzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLFxuLVx0XHQgICAgICAgICBzdHJ1Y3QgZGVudHJ5ICosIHVtb2RlX3QsIGJvb2wpO1xuJiM0MztcdFx0ICAgICAgICAgc3RydWN0IGRlbnRyeSAqLCB1bW9kZV90KTtcbiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqamZmczJfbG9va3VwIChzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICosXG4gXHRcdFx0XHQgICAgdW5zaWduZWQgaW50KTtcbiBzdGF0aWMgaW50IGpmZnMyX2xpbmsgKHN0cnVjdCBkZW50cnkgKixzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICopO1xuQEAgLTE2Myw3ICYjNDM7MTYzLDcgQEAgc3RhdGljIGludCBqZmZzMl9yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcbiBcbiBcbiBzdGF0aWMgaW50IGpmZnMyX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXJfaSxcbi1cdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuJiM0MztcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3QgamZmczJfcmF3X2lub2RlICpyaTtcbiBcdHN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvICpmLCAqZGlyX2Y7XG5kaWZmIC0tZ2l0IGEvZnMvamZzL25hbWVpLmMgYi9mcy9qZnMvbmFtZWkuY1xuaW5kZXggNDQyZDYyNjc5MjYyMjcuLjJjZjRlMjgwZWUxODVhIDEwMDY0NFxuLS0tIGEvZnMvamZzL25hbWVpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2pmcy9uYW1laS5jXG5AQCAtNjEsNyAmIzQzOzYxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZyZWVfZWFfd21hcChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuICAqXG4gICovXG4gc3RhdGljIGludCBqZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcCxcbi1cdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdGludCByYyA9IDA7XG4gXHR0aWRfdCB0aWQ7XHRcdC8qIHRyYW5zYWN0aW9uIGlkICovXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvbmFtZWkuYyBiL2ZzL21pbml4L25hbWVpLmNcbmluZGV4IDI2M2U0YmE4YjFjODIyLi43OWU1OTFiZGZkYzEwZCAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L25hbWVpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L25hbWVpLmNcbkBAIC02NCw3ICYjNDM7NjQsNyBAQCBzdGF0aWMgaW50IG1pbml4X3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIH1cbiBcbiBzdGF0aWMgaW50IG1pbml4X2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0cmV0dXJuIG1pbml4X21rbm9kKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCAwKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmNcbmluZGV4IDVjYzlmMGY0NjZiODMwLi44ZDgxZmMzMDFlOTg5NyAxMDA2NDRcbi0tLSBhL2ZzL25hbWVpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25hbWVpLmNcbkBAIC00MTk5LDcgJiM0Mzs0MTk5LDcgQEAgaW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuIFx0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbi1cdGVycm9yID0gZGlyLVx1MDAzZWlfb3AtXHUwMDNlY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgdHJ1ZSk7XG4mIzQzO1x0ZXJyb3IgPSBkaXItXHUwMDNlaV9vcC1cdTAwM2VjcmVhdGUoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiBcdGlmICghZXJyb3IpXG4gXHRcdGZzbm90aWZ5X2NyZWF0ZShkaXIsIGRlbnRyeSk7XG4gXHRyZXR1cm4gZXJyb3I7XG5AQCAtNDUwNSw4ICYjNDM7NDUwNSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdFx0Z290byBvdXRfZHB1dDtcbiBcdFx0fVxuIFxuLVx0XHRlcnJvciA9IGRpcl9pbm9kZS1cdTAwM2VpX29wLVx1MDAzZWNyZWF0ZShpZG1hcCwgZGlyX2lub2RlLCBkZW50cnksXG4tXHRcdFx0XHRcdFx0bW9kZSwgb3Blbl9mbGFnIFx1MDAyNiBPX0VYQ0wpO1xuJiM0MztcdFx0ZXJyb3IgPSBkaXJfaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2VjcmVhdGUoaWRtYXAsIGRpcl9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcbiBcdFx0aWYgKGVycm9yKVxuIFx0XHRcdGdvdG8gb3V0X2RwdXQ7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZnMvbmZzL2Rpci5jIGIvZnMvbmZzL2Rpci5jXG5pbmRleCBjN2I3MjNjMTg2MjBjOS4uMjgzMGRkYzQxNmNmNzUgMTAwNjQ0XG4tLS0gYS9mcy9uZnMvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25mcy9kaXIuY1xuQEAgLTI0MjcsOSAmIzQzOzI0MjcsOSBAQCBzdGF0aWMgaW50IG5mc19kb19jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiB9XG4gXG4gaW50IG5mc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG4mIzQzO1x0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbi1cdHJldHVybiBuZnNfZG9fY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlLCBleGNsID8gT19FWENMIDogMCk7XG4mIzQzO1x0cmV0dXJuIG5mc19kb19jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUsIE9fRVhDTCk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mc19jcmVhdGUpO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL25mcy9pbnRlcm5hbC5oIGIvZnMvbmZzL2ludGVybmFsLmhcbmluZGV4IGFjYWVmZjdkZGZkZjcwLi5kZDc3ZDVlODBkN2I5MyAxMDA2NDRcbi0tLSBhL2ZzL25mcy9pbnRlcm5hbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9uZnMvaW50ZXJuYWwuaFxuQEAgLTM5NSw3ICYjNDM7Mzk1LDcgQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbmZzX2FjY2Vzc19jYWNoZV9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuIHN0cnVjdCBkZW50cnkgKm5mc19sb29rdXAoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwgdW5zaWduZWQgaW50KTtcbiB2b2lkIG5mc19kX3BydW5lX2Nhc2VfaW5zZW5zaXRpdmVfYWxpYXNlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBpbnQgbmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosXG4tXHQgICAgICAgdW1vZGVfdCwgYm9vbCk7XG4mIzQzO1x0ICAgICAgIHVtb2RlX3QpO1xuIHN0cnVjdCBkZW50cnkgKm5mc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosXG4gXHRcdFx0IHVtb2RlX3QpO1xuIGludCBuZnNfcm1kaXIoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKik7XG5kaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL25hbWVpLmMgYi9mcy9uaWxmczIvbmFtZWkuY1xuaW5kZXggZTJmZTk1ZGUzZDcxY2EuLjBlMGE5ODUwZmY3NmRjIDEwMDY0NFxuLS0tIGEvZnMvbmlsZnMyL25hbWVpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25pbGZzMi9uYW1laS5jXG5AQCAtODYsNyAmIzQzOzg2LDcgQEAgbmlsZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVuc2lnbmVkIGludCBmbGFncylcbiAgKiB3aXRoIGRfaW5zdGFudGlhdGUoKS5cbiAgKi9cbiBzdGF0aWMgaW50IG5pbGZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbiBcdHN0cnVjdCBuaWxmc190cmFuc2FjdGlvbl9pbmZvIHRpO1xuZGlmZiAtLWdpdCBhL2ZzL250ZnMvbmFtZWkuYyBiL2ZzL250ZnMvbmFtZWkuY1xuaW5kZXggYTE5NjI2YTEzNWJkN2YuLmI0ZGM2ZGEyMjY1OTZiIDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9uYW1laS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzL25hbWVpLmNcbkBAIC03MzYsNyAmIzQzOzczNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgbnRmc19pbm9kZSAqX19udGZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkXG4gfVxuIFxuIHN0YXRpYyBpbnQgbnRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuJiM0MztcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IG50ZnNfdm9sdW1lICp2b2wgPSBOVEZTX1NCKGRpci1cdTAwM2VpX3NiKTtcbiBcdHN0cnVjdCBudGZzX2lub2RlICpuaTtcbmRpZmYgLS1naXQgYS9mcy9udGZzMy9uYW1laS5jIGIvZnMvbnRmczMvbmFtZWkuY1xuaW5kZXggYzU5ZGU1ZjJmYTk3NzEuLjZkMDMyYjIyYzk3ZGFmIDEwMDY0NFxuLS0tIGEvZnMvbnRmczMvbmFtZWkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmczMvbmFtZWkuY1xuQEAgLTEwNSw3ICYjNDM7MTA1LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKm50ZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gICogbnRmc19jcmVhdGUgLSBpbm9kZV9vcGVyYXRpb25zOjpjcmVhdGVcbiAgKi9cbiBzdGF0aWMgaW50IG50ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG4mIzQzO1x0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0cmV0dXJuIG50ZnNfY3JlYXRlX2lub2RlKGlkbWFwLCBkaXIsIGRlbnRyeSwgTlVMTCwgU19JRlJFRyB8IG1vZGUsIDAsXG4gXHRcdFx0XHQgTlVMTCwgMCwgTlVMTCk7XG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtZnMvZGxtZnMuYyBiL2ZzL29jZnMyL2RsbWZzL2RsbWZzLmNcbmluZGV4IDU4MjFlMzNkZjc4ZmQ5Li5mMDEyNGY4MWRmMjliMCAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL2RsbWZzL2RsbWZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL2RsbWZzL2RsbWZzLmNcbkBAIC00NTMsOCAmIzQzOzQ1Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkbG1mc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICogaWRtYXAsXG4gc3RhdGljIGludCBkbG1mc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0c3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdHVtb2RlX3QgbW9kZSxcbi1cdFx0XHRib29sIGV4Y2wpXG4mIzQzO1x0XHRcdHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRpbnQgc3RhdHVzID0gMDtcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvbmFtZWkuYyBiL2ZzL29jZnMyL25hbWVpLmNcbmluZGV4IDEyNzc2NjZjNzdjZDJkLi4xMmExZmVmM2VlNzRlNiAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL25hbWVpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL25hbWVpLmNcbkBAIC02NjcsOCAmIzQzOzY2Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvY2ZzMl9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBzdGF0aWMgaW50IG9jZnMyX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHRzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0dW1vZGVfdCBtb2RlLFxuLVx0XHRcdGJvb2wgZXhjbClcbiYjNDM7XHRcdFx0dW1vZGVfdCBtb2RlKVxuIHtcbiBcdGludCByZXQ7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvb21mcy9kaXIuYyBiL2ZzL29tZnMvZGlyLmNcbmluZGV4IDJlZDU0MWZjY2YzMzFkLi5hMDlhOThmN2UzMGJjNiAxMDA2NDRcbi0tLSBhL2ZzL29tZnMvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29tZnMvZGlyLmNcbkBAIC0yODYsNyAmIzQzOzI4Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvbWZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiB9XG4gXG4gc3RhdGljIGludCBvbWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuJiM0MztcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdHJldHVybiBvbWZzX2FkZF9ub2RlKGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRlJFRyk7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL29yYW5nZWZzL25hbWVpLmMgYi9mcy9vcmFuZ2Vmcy9uYW1laS5jXG5pbmRleCA3NWU2NWU3MmMyZDY0Ni4uOTFmOTdkYjE4OTcxYmYgMTAwNjQ0XG4tLS0gYS9mcy9vcmFuZ2Vmcy9uYW1laS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9vcmFuZ2Vmcy9uYW1laS5jXG5AQCAtMTgsOCAmIzQzOzE4LDcgQEBcbiBzdGF0aWMgaW50IG9yYW5nZWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHRzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0dW1vZGVfdCBtb2RlLFxuLVx0XHRcdGJvb2wgZXhjbHVzaXZlKVxuJiM0MztcdFx0XHR1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IG9yYW5nZWZzX2lub2RlX3MgKnBhcmVudCA9IE9SQU5HRUZTX0koZGlyKTtcbiBcdHN0cnVjdCBvcmFuZ2Vmc19rZXJuZWxfb3BfcyAqbmV3X29wO1xuZGlmZiAtLWdpdCBhL2ZzL292ZXJsYXlmcy9kaXIuYyBiL2ZzL292ZXJsYXlmcy9kaXIuY1xuaW5kZXggYTAzMzc0M2RiZjUxNTkuLjg4YmNmOThkMjg3ZDFlIDEwMDY0NFxuLS0tIGEvZnMvb3ZlcmxheWZzL2Rpci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9vdmVybGF5ZnMvZGlyLmNcbkBAIC03MzIsNyAmIzQzOzczMiw3IEBAIHN0YXRpYyBpbnQgb3ZsX2NyZWF0ZV9vYmplY3Qoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSwgZGV2X3QgcmRldixcbiB9XG4gXG4gc3RhdGljIGludCBvdmxfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdHJldHVybiBvdmxfY3JlYXRlX29iamVjdChkZW50cnksIChtb2RlIFx1MDAyNiAwNzc3NykgfCBTX0lGUkVHLCAwLCBOVUxMKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvcmFtZnMvaW5vZGUuYyBiL2ZzL3JhbWZzL2lub2RlLmNcbmluZGV4IDM5ODc2MzllZDEzMmM2Li4wZjUyYmEyMmFhYzA0YyAxMDA2NDRcbi0tLSBhL2ZzL3JhbWZzL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3JhbWZzL2lub2RlLmNcbkBAIC0xMjgsNyAmIzQzOzEyOCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpyYW1mc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gfVxuIFxuIHN0YXRpYyBpbnQgcmFtZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuJiM0MztcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRyZXR1cm4gcmFtZnNfbWtub2QoXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLCBkZW50cnksIG1vZGUgfCBTX0lGUkVHLCAwKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvc21iL2NsaWVudC9jaWZzZnMuaCBiL2ZzL3NtYi9jbGllbnQvY2lmc2ZzLmhcbmluZGV4IDkwMWUxMzQwYzk4NmZiLi5iY2YyZmY4N2RhMmQ1YyAxMDA2NDRcbi0tLSBhL2ZzL3NtYi9jbGllbnQvY2lmc2ZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3NtYi9jbGllbnQvY2lmc2ZzLmhcbkBAIC01NCw3ICYjNDM7NTQsNyBAQCB2b2lkIGNpZnNfc2JfZGVhY3RpdmUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNpZnNfZGlyX2lub2RlX29wcztcbiBzdHJ1Y3QgaW5vZGUgKmNpZnNfcm9vdF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuIGludCBjaWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbCk7XG4mIzQzO1x0XHRzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbiBpbnQgY2lmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGlyZW50cnksXG4gXHRcdCAgICAgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBvZmxhZ3MsIHVtb2RlX3QgbW9kZSk7XG4gaW50IGNpZnNfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG5kaWZmIC0tZ2l0IGEvZnMvc21iL2NsaWVudC9kaXIuYyBiL2ZzL3NtYi9jbGllbnQvZGlyLmNcbmluZGV4IDg4YTRhMTc4N2ZmMDQ3Li43ODAzYmQ1YmQwMWY4MCAxMDA2NDRcbi0tLSBhL2ZzL3NtYi9jbGllbnQvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3NtYi9jbGllbnQvZGlyLmNcbkBAIC02NDUsNyAmIzQzOzY0NSw3IEBAIGludCBjaWZzX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSxcbiAgKiBoYXNoZWQtcG9zaXRpdmUgYnkgY2FsbGluZyBkX2luc3RhbnRpYXRlKCkuXG4gICovXG4gaW50IGNpZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0c3RydWN0IGRlbnRyeSAqZGlyZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuJiM0MztcdFx0c3RydWN0IGRlbnRyeSAqZGlyZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiID0gQ0lGU19TQihkaXIpO1xuIFx0aW50IHJjO1xuZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2Rpci5jIGIvZnMvdWJpZnMvZGlyLmNcbmluZGV4IDg2ZDQxZTA3N2U0ZDYyLi5mZDhkZjEwNTQ3YmY0MiAxMDA2NDRcbi0tLSBhL2ZzL3ViaWZzL2Rpci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy91Ymlmcy9kaXIuY1xuQEAgLTMwMyw3ICYjNDM7MzAzLDcgQEAgc3RhdGljIGludCB1Ymlmc19wcmVwYXJlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIH1cbiBcbiBzdGF0aWMgaW50IHViaWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbiBcdHN0cnVjdCB1Ymlmc19pbmZvICpjID0gZGlyLVx1MDAzZWlfc2ItXHUwMDNlc19mc19pbmZvO1xuZGlmZiAtLWdpdCBhL2ZzL3VkZi9uYW1laS5jIGIvZnMvdWRmL25hbWVpLmNcbmluZGV4IDlhM2I3Y2VmMzYwNjQ4Li5mZDliNmYxNmY2MTQ2MiAxMDA2NDRcbi0tLSBhL2ZzL3VkZi9uYW1laS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy91ZGYvbmFtZWkuY1xuQEAgLTM3MSw3ICYjNDM7MzcxLDcgQEAgc3RhdGljIGludCB1ZGZfYWRkX25vbmRpcihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gfVxuIFxuIHN0YXRpYyBpbnQgdWRmX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG4mIzQzO1x0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gdWRmX25ld19pbm9kZShkaXIsIG1vZGUpO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL3Vmcy9uYW1laS5jIGIvZnMvdWZzL25hbWVpLmNcbmluZGV4IDViM2M4NWM5MzI0Mjk4Li41MDEyZTA1NjIwMGFjYSAxMDA2NDRcbi0tLSBhL2ZzL3Vmcy9uYW1laS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy91ZnMvbmFtZWkuY1xuQEAgLTcwLDggJiM0Mzs3MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp1ZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqIGRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bnNpXG4gICogd2l0aCBkX2luc3RhbnRpYXRlKCkuIFxuICAqL1xuIHN0YXRpYyBpbnQgdWZzX2NyZWF0ZSAoc3RydWN0IG1udF9pZG1hcCAqIGlkbWFwLFxuLVx0XHRzdHJ1Y3QgaW5vZGUgKiBkaXIsIHN0cnVjdCBkZW50cnkgKiBkZW50cnksIHVtb2RlX3QgbW9kZSxcbi1cdFx0Ym9vbCBleGNsKVxuJiM0MztcdFx0c3RydWN0IGlub2RlICogZGlyLCBzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbiBcbmRpZmYgLS1naXQgYS9mcy92Ym94c2YvZGlyLmMgYi9mcy92Ym94c2YvZGlyLmNcbmluZGV4IGM1YmQzMjcxYWE5NjE2Li4wYjllYWIxNTc0MzJkZiAxMDA2NDRcbi0tLSBhL2ZzL3Zib3hzZi9kaXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvdmJveHNmL2Rpci5jXG5AQCAtMjk4LDkgJiM0MzsyOTgsOSBAQCBzdGF0aWMgaW50IHZib3hzZl9kaXJfY3JlYXRlKHN0cnVjdCBpbm9kZSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXG4gc3RhdGljIGludCB2Ym94c2ZfZGlyX21rZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHQgICAgIHN0cnVjdCBpbm9kZSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0ICAgICB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdFx0ICAgICB1bW9kZV90IG1vZGUpXG4ge1xuLVx0cmV0dXJuIHZib3hzZl9kaXJfY3JlYXRlKHBhcmVudCwgZGVudHJ5LCBtb2RlLCBmYWxzZSwgZXhjbCwgTlVMTCk7XG4mIzQzO1x0cmV0dXJuIHZib3hzZl9kaXJfY3JlYXRlKHBhcmVudCwgZGVudHJ5LCBtb2RlLCBmYWxzZSwgdHJ1ZSwgTlVMTCk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp2Ym94c2ZfZGlyX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9wcy5jIGIvZnMveGZzL3hmc19pb3BzLmNcbmluZGV4IDYzMzlmNDk1NmVjYjM5Li5lNDhmOWU1YTFiOGExOCAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfaW9wcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2lvcHMuY1xuQEAgLTI5Myw4ICYjNDM7MjkzLDcgQEAgeGZzX3ZuX2NyZWF0ZShcbiBcdHN0cnVjdCBtbnRfaWRtYXBcdCppZG1hcCxcbiBcdHN0cnVjdCBpbm9kZVx0XHQqZGlyLFxuIFx0c3RydWN0IGRlbnRyeVx0XHQqZGVudHJ5LFxuLVx0dW1vZGVfdFx0XHRcdG1vZGUsXG4tXHRib29sXHRcdFx0ZmxhZ3MpXG4mIzQzO1x0dW1vZGVfdFx0XHRcdG1vZGUpXG4ge1xuIFx0cmV0dXJuIHhmc19nZW5lcmljX2NyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIDAsIE5VTEwpO1xuIH1cbkBAIC0zMzgsNyAmIzQzOzMzNyw3IEBAIFNUQVRJQyBzdHJ1Y3QgZGVudHJ5ICpcbiB4ZnNfdm5fY2lfbG9va3VwKFxuIFx0c3RydWN0IGlub2RlXHQqZGlyLFxuIFx0c3RydWN0IGRlbnRyeVx0KmRlbnRyeSxcbi1cdHVuc2lnbmVkIGludCBmbGFncylcbiYjNDM7XHR1bnNpZ25lZCBpbnRcdGZsYWdzKVxuIHtcbiBcdHN0cnVjdCB4ZnNfaW5vZGUgKmlwO1xuIFx0c3RydWN0IHhmc19uYW1lXHR4bmFtZTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmhcbmluZGV4IGQxMDg5N2IzYTFlMzUwLi4xYjdjNDBiMmZhNmRlMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mcy5oXG5AQCAtMjAwMiw3ICYjNDM7MjAwMiw3IEBAIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHtcbiBcdGludCAoKnJlYWRsaW5rKSAoc3RydWN0IGRlbnRyeSAqLCBjaGFyIF9fdXNlciAqLGludCk7XG4gXG4gXHRpbnQgKCpjcmVhdGUpIChzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKixcbi1cdFx0ICAgICAgIHVtb2RlX3QsIGJvb2wpO1xuJiM0MztcdFx0ICAgICAgIHVtb2RlX3QpO1xuIFx0aW50ICgqbGluaykgKHN0cnVjdCBkZW50cnkgKixzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICopO1xuIFx0aW50ICgqdW5saW5rKSAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqKTtcbiBcdGludCAoKnN5bWxpbmspIChzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKixcbmRpZmYgLS1naXQgYS9pcGMvbXF1ZXVlLmMgYi9pcGMvbXF1ZXVlLmNcbmluZGV4IDQ3OThiMzc1OTcyYmY0Li4yZGRkYjk3ZjJmOGE1NSAxMDA2NDRcbi0tLSBhL2lwYy9tcXVldWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvaXBjL21xdWV1ZS5jXG5AQCAtNjA4LDcgJiM0Mzs2MDgsNyBAQCBzdGF0aWMgaW50IG1xdWV1ZV9jcmVhdGVfYXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgdm9pZCAqYXJnKVxuIH1cbiBcbiBzdGF0aWMgaW50IG1xdWV1ZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuJiM0MztcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0cmV0dXJuIG1xdWV1ZV9jcmVhdGVfYXR0cihkZW50cnksIG1vZGUsIE5VTEwpO1xuIH1cbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggYjUxZjgzYzk3MGJiMzcuLjU3ODlhMGY1YTM0NjNiIDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uY1xuQEAgLTM4NjQsNyAmIzQzOzM4NjQsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqc2htZW1fbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIH1cbiBcbiBzdGF0aWMgaW50IHNobWVtX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbiYjNDM7XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0cmV0dXJuIHNobWVtX21rbm9kKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSB8IFNfSUZSRUcsIDApO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoaXMgcGF0Y2ggaXMgYSB0cmVlLXdpZGUgQVBJIHJlZmFjdG9yaW5nIHRoYXQgcmVtb3ZlcyB0aGUgcmVkdW5kYW50ICYjMzk7ZXhjbCYjMzk7IGFyZ3VtZW50IGZyb20gdGhlICYjMzk7Y3JlYXRlJiMzOTsgaW5vZGUgb3BlcmF0aW9uLiBWRlMgcHJldmlvdXNseSBwYXNzZWQgJiMzOTt0cnVlJiMzOTsgZnJvbSB2ZnNfY3JlYXRlKCkgYW5kICYjMzk7b3Blbl9mbGFnIFx1MDAyNiBPX0VYQ0wmIzM5OyBmcm9tIGxvb2t1cF9vcGVuKCkuIEhvd2V2ZXIsIGZvciBsb2NhbCBmaWxlc3lzdGVtcywgVkZTIGhvbGRzIHRoZSBpbm9kZV9sb2NrIGR1cmluZyBjcmVhdGUsIG1ha2luZyBjb25jdXJyZW50IGNyZWF0aW9uIGltcG9zc2libGUgYW5kIHRoZSAmIzM5O2V4Y2wmIzM5OyBhcmd1bWVudCByZWR1bmRhbnQuIEZvciBuZXR3b3JrIGZpbGVzeXN0ZW1zLCBub24tZXhjbHVzaXZlIGNyZWF0ZXMgYXJlIGhhbmRsZWQgdmlhIGF0b21pY19vcGVuKCkuIFRoZSBmaWxlc3lzdGVtcyB0aGF0IHVzZWQgdGhlIGFyZ3VtZW50IGludGVybmFsbHkgKGxpa2UgZ2ZzMiwgbmZzLCB2Ym94c2YpIG5vdyBoYXJkY29kZSAmIzM5O3RydWUmIzM5OyBvciAmIzM5O09fRVhDTCYjMzk7LCB3aGljaCBleGFjdGx5IG1hdGNoZXMgdGhlIHByZXZpb3VzIGJlaGF2aW9yIHdoZW4gY2FsbGVkIGZyb20gdmZzX2NyZWF0ZS4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDA0MmRkZWNmM2NlZDIwNzc3YmU1Mzg3NGQxZDlhMDMzN2ZiNDJiOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDEgMTg6Mzg6MTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdAppbmRleCBkMTNmMGEyM2M4ODJmYy4uMDI1MjJmYmZkOTY4NmYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdApAQCAtMTQwMSwzICYjNDM7MTQwMSwxMSBAQCBhcyB3aXRoIGRfZGlzcG9zZV9pZl91bnVzZWQoKSB0aGVzZSBhcmUgbm90IHRyaXZpYWw7IHdpdGggdGhpcyB2YXJpYW50CiBvZiBBUEkgaXQmIzM5O3MgbW9yZSBleHBsaWNpdCwgc2luY2UgZ3JhYmJpbmcgLSZndDtkX2xvY2sgaXMgY2FsbGVyLXNpZGUsIGJ1dAogZF9kaXNwb3NlX2lmX3VudXNlZCgpIGhhZCBhbGwgdGhlIHNhbWUgaXNzdWVzLiAgSXQmIzM5O3MgYSBsb3ctbGV2ZWwgcHJpbWl0aXZlOwogdXNlIG9ubHkgaWYgeW91IGhhdmUgbm8gYWx0ZXJuYXRpdmUuCiYjNDM7CiYjNDM7LS0tCiYjNDM7CiYjNDM7KiptYW5kYXRvcnkqKgomIzQzOwomIzQzO1RoZSAuY3JlYXRlIGlub2RlX29wZXJhdGlvbiBubyBsb25nZXIgcmVjZWl2ZXMgdGhlICYjMzk7ZXhjbCYjMzk7IGFyZy4gIEl0IG11c3QKJiM0MzthbHdheXMgYXNzdW1lIHRoZSBmaWxlIGRvZXMgbm90IGFscmVhZHkgZXhpc3QuICBJZiB0aGUgZmlsZXN5c3RlbSBuZWVkcwomIzQzO3RvIGJlIGludm9sdmVkIGluIG5vbi1leGNsdXNpdmUgY3JlYXRlLCBpdCBzaG91bGQgcHJvdmlkZSBhdG9taWNfb3Blbi4KZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19pbm9kZS5jIGIvZnMvOXAvdmZzX2lub2RlLmMKaW5kZXggNTc4M2QwMzM2Zjk2YWMuLmU0N2I5MGU3MDgzNzY4IDEwMDY0NAotLS0gYS9mcy85cC92ZnNfaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy85cC92ZnNfaW5vZGUuYwpAQCAtNjQ1LDcgJiM0Mzs2NDUsNiBAQCB2OWZzX2NyZWF0ZShzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzLCBzdHJ1Y3QgaW5vZGUgKmRpciwKICAqIEBkaXI6IFRoZSBwYXJlbnQgZGlyZWN0b3J5CiAgKiBAZGVudHJ5OiBUaGUgbmFtZSBvZiBmaWxlIHRvIGJlIGNyZWF0ZWQKICAqIEBtb2RlOiBUaGUgVU5JWCBmaWxlIG1vZGUgdG8gc2V0Ci0gKiBAZXhjbDogVHJ1ZSBpZiB0aGUgZmlsZSBtdXN0IG5vdCB5ZXQgZXhpc3QKICAqCiAgKiBvcGVuKC4uLCBPX0NSRUFUKSBpcyBoYW5kbGVkIGluIHY5ZnNfdmZzX2F0b21pY19vcGVuKCkuICBUaGlzIGlzIG9ubHkgY2FsbGVkCiAgKiBmb3IgbWtub2QoMikuCkBAIC02NTQsNyAmIzQzOzY1Myw3IEBAIHY5ZnNfY3JlYXRlKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMsIHN0cnVjdCBpbm9kZSAqZGlyLAogCiBzdGF0aWMgaW50CiB2OWZzX3Zmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAotCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiB7CiAJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcyA9IHY5ZnNfaW5vZGUydjlzZXMoZGlyKTsKIAl1MzIgcGVybSA9IHVuaXhtb2RlMnA5bW9kZSh2OXNlcywgbW9kZSk7CmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGVfZG90bC5jIGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuYwppbmRleCBmNzM5NmQyMGNiNmNkYy4uZDE3YzNiNmVlYmIyMmQgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuYwpAQCAtMjEzLDEyICYjNDM7MjEzLDExIEBAIGludCB2OWZzX29wZW5fdG9fZG90bF9mbGFncyhpbnQgZmxhZ3MpCiAgKiBAZGlyOiBkaXJlY3RvcnkgaW5vZGUgdGhhdCBpcyBiZWluZyBjcmVhdGVkCiAgKiBAZGVudHJ5OiAgZGVudHJ5IHRoYXQgaXMgYmVpbmcgZGVsZXRlZAogICogQG9tb2RlOiBjcmVhdGUgcGVybWlzc2lvbnMKLSAqIEBleGNsOiBUcnVlIGlmIHRoZSBmaWxlIG11c3Qgbm90IHlldCBleGlzdAogICoKICAqLwogc3RhdGljIGludAogdjlmc192ZnNfY3JlYXRlX2RvdGwoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBvbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3Qgb21vZGUpCiB7CiAJcmV0dXJuIHY5ZnNfdmZzX21rbm9kX2RvdGwoaWRtYXAsIGRpciwgZGVudHJ5LCBvbW9kZSwgMCk7CiB9CmRpZmYgLS1naXQgYS9mcy9hZmZzL2FmZnMuaCBiL2ZzL2FmZnMvYWZmcy5oCmluZGV4IDQ0YTNmNjlkMjc1Zjk2Li5kNmIzMzkzNjMzZjJkOSAxMDA2NDQKLS0tIGEvZnMvYWZmcy9hZmZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZmcy9hZmZzLmgKQEAgLTE2OSw3ICYjNDM7MTY5LDcgQEAgZXh0ZXJuIGludAlhZmZzX2hhc2hfbmFtZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCB1OCAqbmFtZSwgdW5zaWduZWQgaW50IGwKIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICphZmZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIGludAlhZmZzX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIGV4dGVybiBpbnQJYWZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wpOwomIzQzOwkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTsKIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICphZmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTsKIGV4dGVybiBpbnQJYWZmc19ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKZGlmZiAtLWdpdCBhL2ZzL2FmZnMvbmFtZWkuYyBiL2ZzL2FmZnMvbmFtZWkuYwppbmRleCBjM2M2NTMyZGE0YjBkYS4uYjAwMDEwODQ3MjdhNWQgMTAwNjQ0Ci0tLSBhL2ZzL2FmZnMvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZmZzL25hbWVpLmMKQEAgLTI0Myw3ICYjNDM7MjQzLDcgQEAgYWZmc191bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAogaW50CiBhZmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCi0JICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpCiYjNDM7CSAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGlyLSZndDtpX3NiOwogCXN0cnVjdCBpbm9kZQkqaW5vZGU7CmRpZmYgLS1naXQgYS9mcy9hZnMvZGlyLmMgYi9mcy9hZnMvZGlyLmMKaW5kZXggNDk4Yjk5Y2NkZjBlMjcuLjY2Y2MzMzMyZWYzMTlhIDEwMDY0NAotLS0gYS9mcy9hZnMvZGlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2Rpci5jCkBAIC0zMiw3ICYjNDM7MzIsNyBAQCBzdGF0aWMgYm9vbCBhZnNfbG9va3VwX29uZV9maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBpbgogc3RhdGljIGJvb2wgYWZzX2xvb2t1cF9maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmxlbiwKIAkJCSAgICAgIGxvZmZfdCBmcG9zLCB1NjQgaW5vLCB1bnNpZ25lZCBkdHlwZSk7CiBzdGF0aWMgaW50IGFmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKTsKJiM0MzsJCSAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTsKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTsKIHN0YXRpYyBpbnQgYWZzX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwpAQCAtMTYyMyw3ICYjNDM7MTYyMyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWZzX29wZXJhdGlvbl9vcHMgYWZzX2NyZWF0ZV9vcGVyYXRpb24gPSB7CiAgKiBjcmVhdGUgYSByZWd1bGFyIGZpbGUgb24gYW4gQUZTIGZpbGVzeXN0ZW0KICAqLwogc3RhdGljIGludCBhZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbCkKJiM0MzsJCSAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCXN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcDsKIAlzdHJ1Y3QgYWZzX3Zub2RlICpkdm5vZGUgPSBBRlNfRlNfSShkaXIpOwpkaWZmIC0tZ2l0IGEvZnMvYmFkX2lub2RlLmMgYi9mcy9iYWRfaW5vZGUuYwppbmRleCBhY2Y4NjEzZjVlMzY4ZS4uNDg2YzQwZjczZTUxZTAgMTAwNjQ0Ci0tLSBhL2ZzL2JhZF9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2JhZF9pbm9kZS5jCkBAIC0yOSw3ICYjNDM7MjksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiYWRfZmlsZV9vcHMgPQogCiBzdGF0aWMgaW50IGJhZF9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJCQkgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCSAgICB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbCkKJiM0MzsJCQkgICAgdW1vZGVfdCBtb2RlKQogewogCXJldHVybiAtRUlPOwogfQpkaWZmIC0tZ2l0IGEvZnMvYmZzL2Rpci5jIGIvZnMvYmZzL2Rpci5jCmluZGV4IDViNDBhYjA5YTc5NmRlLi40YzNiNGRiMDhjZGVmYyAxMDA2NDQKLS0tIGEvZnMvYmZzL2Rpci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Jmcy9kaXIuYwpAQCAtODMsNyAmIzQzOzgzLDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiZnNfZGlyX29wZXJhdGlvbnMgPSB7CiB9OwogCiBzdGF0aWMgaW50IGJmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW5vZGUuYyBiL2ZzL2J0cmZzL2lub2RlLmMKaW5kZXggMjcyNTk4ZjZhZTc3YWYuLjIyYzBhMGUyNDFlNTMzIDEwMDY0NAotLS0gYS9mcy9idHJmcy9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2J0cmZzL2lub2RlLmMKQEAgLTY4MzIsNyAmIzQzOzY4MzIsNyBAQCBzdGF0aWMgaW50IGJ0cmZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIH0KIAogc3RhdGljIGludCBidHJmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbCkKJiM0MzsJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCmRpZmYgLS1naXQgYS9mcy9jZXBoL2Rpci5jIGIvZnMvY2VwaC9kaXIuYwppbmRleCAyN2NlOWU1NWU5NDc2OC4uZGVlNDUyNGMyMzM2MjMgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvZGlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvY2VwaC9kaXIuYwpAQCAtOTc4LDcgJiM0Mzs5NzgsNyBAQCBzdGF0aWMgaW50IGNlcGhfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogfQogCiBzdGF0aWMgaW50IGNlcGhfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpCiYjNDM7CQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiB7CiAJcmV0dXJuIGNlcGhfbWtub2QoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCAwKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL2NvZGEvZGlyLmMgYi9mcy9jb2RhL2Rpci5jCmluZGV4IDgzNWViN2ZkZmRhZDAwLi5lYTcxMGE1ZGJiYjc0YiAxMDA2NDQKLS0tIGEvZnMvY29kYS9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9jb2RhL2Rpci5jCkBAIC0xMzQsNyAmIzQzOzEzNCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb2RhX2Rpcl9kcm9wX25saW5rKHN0cnVjdCBpbm9kZSAqZGlyKQogCiAvKiBjcmVhdGlvbiByb3V0aW5lczogY3JlYXRlLCBta25vZCwgbWtkaXIsIGxpbmssIHN5bWxpbmsgKi8KIHN0YXRpYyBpbnQgY29kYV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGUsIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlLCB1bW9kZV90IG1vZGUpCiB7CiAJaW50IGVycm9yOwogCWNvbnN0IGNoYXIgKm5hbWU9ZGUtJmd0O2RfbmFtZS5uYW1lOwpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvaW5vZGUuYyBiL2ZzL2VjcnlwdGZzL2lub2RlLmMKaW5kZXggN2FhZjE5MTNmOWM2ZDMuLjUyNTI5N2M3ZWJkOGM0IDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2VjcnlwdGZzL2lub2RlLmMKQEAgLTI2OCw3ICYjNDM7MjY4LDcgQEAgaW50IGVjcnlwdGZzX2luaXRpYWxpemVfZmlsZShzdHJ1Y3QgZGVudHJ5ICplY3J5cHRmc19kZW50cnksCiBzdGF0aWMgaW50CiBlY3J5cHRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJCXN0cnVjdCBpbm9kZSAqZGlyZWN0b3J5X2lub2RlLCBzdHJ1Y3QgZGVudHJ5ICplY3J5cHRmc19kZW50cnksCi0JCXVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJdW1vZGVfdCBtb2RlKQogewogCXN0cnVjdCBpbm9kZSAqZWNyeXB0ZnNfaW5vZGU7CiAJaW50IHJjOwpkaWZmIC0tZ2l0IGEvZnMvZWZpdmFyZnMvaW5vZGUuYyBiL2ZzL2VmaXZhcmZzL2lub2RlLmMKaW5kZXggOTVkY2FkODNkYTExYmUuLmYwZDAwOTU1NWZjNjYwIDEwMDY0NAotLS0gYS9mcy9lZml2YXJmcy9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2VmaXZhcmZzL2lub2RlLmMKQEAgLTc1LDcgJiM0Mzs3NSw3IEBAIHN0YXRpYyBib29sIGVmaXZhcmZzX3ZhbGlkX25hbWUoY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKQogfQogCiBzdGF0aWMgaW50IGVmaXZhcmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCi0JCQkgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJCSAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOwogCXN0cnVjdCBlZml2YXJfZW50cnkgKnZhcjsKZGlmZiAtLWdpdCBhL2ZzL2V4ZmF0L25hbWVpLmMgYi9mcy9leGZhdC9uYW1laS5jCmluZGV4IGI3ZDVlNDRhZDM4ZWVlLi5jZDljOWVjYTU4Zjg2ZSAxMDA2NDQKLS0tIGEvZnMvZXhmYXQvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leGZhdC9uYW1laS5jCkBAIC01MzgsNyAmIzQzOzUzOCw3IEBAIHN0YXRpYyBpbnQgZXhmYXRfYWRkX2VudHJ5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKnBhdGgsCiB9CiAKIHN0YXRpYyBpbnQgZXhmYXRfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpCiYjNDM7CQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRpci0mZ3Q7aV9zYjsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9uYW1laS5jIGIvZnMvZXh0Mi9uYW1laS5jCmluZGV4IDBkMDlkMjJmZTcwODYyLi43NDJhNzhlMTY1ZDQ4ZSAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDIvbmFtZWkuYwpAQCAtOTksNyAmIzQzOzk5LDcgQEAgc3RydWN0IGRlbnRyeSAqZXh0Ml9nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKQogICovCiBzdGF0aWMgaW50IGV4dDJfY3JlYXRlIChzdHJ1Y3QgbW50X2lkbWFwICogaWRtYXAsCiAJCQlzdHJ1Y3QgaW5vZGUgKiBkaXIsIHN0cnVjdCBkZW50cnkgKiBkZW50cnksCi0JCQl1bW9kZV90IG1vZGUsIGJvb2wgZXhjbCkKJiM0MzsJCQl1bW9kZV90IG1vZGUpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlpbnQgZXJyOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9uYW1laS5jIGIvZnMvZXh0NC9uYW1laS5jCmluZGV4IGNjNDlhZTA0YTZmNjQ5Li5jM2RlNjRkMmEyZGYyMCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvbmFtZWkuYwpAQCAtMjgxMSw3ICYjNDM7MjgxMSw3IEBAIHN0YXRpYyBpbnQgZXh0NF9hZGRfbm9uZGlyKGhhbmRsZV90ICpoYW5kbGUsCiAgKiB3aXRoIGRfaW5zdGFudGlhdGUoKS4KICAqLwogc3RhdGljIGludCBleHQ0X2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCi0JCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCWhhbmRsZV90ICpoYW5kbGU7CiAJc3RydWN0IGlub2RlICppbm9kZTsKZGlmZiAtLWdpdCBhL2ZzL2YyZnMvbmFtZWkuYyBiL2ZzL2YyZnMvbmFtZWkuYwppbmRleCBjYWMwM2I4ZTkxYTE1ZS4uNjQ4NjgxYzViYTUwMTYgMTAwNjQ0Ci0tLSBhL2ZzL2YyZnMvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9mMmZzL25hbWVpLmMKQEAgLTM2Niw3ICYjNDM7MzY2LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZjJmc19uZXdfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiB9CiAKIHN0YXRpYyBpbnQgZjJmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbCkKJiM0MzsJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKIHsKIAlzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmkgPSBGMkZTX0lfU0IoZGlyKTsKIAlzdHJ1Y3QgZjJmc19sb2NrX2NvbnRleHQgbGM7CmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfbXNkb3MuYyBiL2ZzL2ZhdC9uYW1laV9tc2Rvcy5jCmluZGV4IDBmZDI5NzFhZDRiMTMxLi45ZjJhMmU5YTljZThlYSAxMDA2NDQKLS0tIGEvZnMvZmF0L25hbWVpX21zZG9zLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L25hbWVpX21zZG9zLmMKQEAgLTI2Miw3ICYjNDM7MjYyLDcgQEAgc3RhdGljIGludCBtc2Rvc19hZGRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsCiAKIC8qKioqKiBDcmVhdGUgYSBmaWxlICovCiBzdGF0aWMgaW50IG1zZG9zX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCi0JCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkaXItJmd0O2lfc2I7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IE5VTEw7CmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfdmZhdC5jIGIvZnMvZmF0L25hbWVpX3ZmYXQuYwppbmRleCBlOTA5NDQ3ODczZTM2NC4uMTM5ZDNlZjRiZmFlYjggMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9uYW1laV92ZmF0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L25hbWVpX3ZmYXQuYwpAQCAtNzU1LDcgJiM0Mzs3NTUsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqdmZhdF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIH0KIAogc3RhdGljIGludCB2ZmF0X2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCi0JCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkaXItJmd0O2lfc2I7CiAJc3RydWN0IGlub2RlICppbm9kZTsKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZGlyLmMgYi9mcy9mdXNlL2Rpci5jCmluZGV4IDBlMmExMDM5ZmE0M2VhLi4wZWZiMzE0MWY3ZjcwYSAxMDA2NDQKLS0tIGEvZnMvZnVzZS9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9mdXNlL2Rpci5jCkBAIC0xMDg0LDcgJiM0MzsxMDg0LDcgQEAgc3RhdGljIGludCBmdXNlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIH0KIAogc3RhdGljIGludCBmdXNlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCi0JCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICplbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpCiYjNDM7CQkgICAgICAgc3RydWN0IGRlbnRyeSAqZW50cnksIHVtb2RlX3QgbW9kZSkKIHsKIAlyZXR1cm4gZnVzZV9ta25vZChpZG1hcCwgZGlyLCBlbnRyeSwgbW9kZSwgMCk7CiB9CmRpZmYgLS1naXQgYS9mcy9nZnMyL2lub2RlLmMgYi9mcy9nZnMyL2lub2RlLmMKaW5kZXggOGE3Nzc5NGJiZDRhZmMuLjllMjNjOGQ1NTk2MjNkIDEwMDY0NAotLS0gYS9mcy9nZnMyL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZ2ZzMi9pbm9kZS5jCkBAIC05NjksOSAmIzQzOzk2OSw5IEBAIHN0YXRpYyBpbnQgZ2ZzMl9jcmVhdGVfaW5vZGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKICAqLwogCiBzdGF0aWMgaW50IGdmczJfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpCiYjNDM7CQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiB7Ci0JcmV0dXJuIGdmczJfY3JlYXRlX2lub2RlKGRpciwgZGVudHJ5LCBOVUxMLCBTX0lGUkVHIHwgbW9kZSwgMCwgTlVMTCwgMCwgZXhjbCk7CiYjNDM7CXJldHVybiBnZnMyX2NyZWF0ZV9pbm9kZShkaXIsIGRlbnRyeSwgTlVMTCwgU19JRlJFRyB8IG1vZGUsIDAsIE5VTEwsIDAsIDEpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2ZzL2hmcy9kaXIuYyBiL2ZzL2hmcy9kaXIuYwppbmRleCBlMTM0NTBiYjkzM2ViZC4uOTNlZGM1YTgwYzgxM2QgMTAwNjQ0Ci0tLSBhL2ZzL2hmcy9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnMvZGlyLmMKQEAgLTE4NCw3ICYjNDM7MTg0LDcgQEAgc3RhdGljIGludCBoZnNfZGlyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiAgKiB0aGUgZGlyZWN0b3J5IGFuZCB0aGUgbmFtZSAoYW5kIGl0cyBsZW5ndGgpIG9mIHRoZSBuZXcgZmlsZS4KICAqLwogc3RhdGljIGludCBoZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbCkKJiM0MzsJCSAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJaW50IHJlczsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvZGlyLmMgYi9mcy9oZnNwbHVzL2Rpci5jCmluZGV4IDhiZjZjN2NkZDlhODY1Li5mMGFhZTJjZDZmY2ZkYyAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL2Rpci5jCkBAIC01NjIsNyAmIzQzOzU2Miw3IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiB9CiAKIHN0YXRpYyBpbnQgaGZzcGx1c19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJCSAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiB7CiAJcmV0dXJuIGhmc3BsdXNfbWtub2QoJmFtcDtub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgMCk7CiB9CmRpZmYgLS1naXQgYS9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uYyBiL2ZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jCmluZGV4IGFiZTg2ZDcyZDllZjc1Li43YWRkMDU2ZDQ3ZDhmMCAxMDA2NDQKLS0tIGEvZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmMKQEAgLTU5Myw3ICYjNDM7NTkzLDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqaG9zdGZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY2hhciAqbmFtZSkKIH0KIAogc3RhdGljIGludCBob3N0ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCWNoYXIgKm5hbWU7CmRpZmYgLS1naXQgYS9mcy9ocGZzL25hbWVpLmMgYi9mcy9ocGZzL25hbWVpLmMKaW5kZXggMzUzZTEzYTYxNWY1NjYuLjgwOTExM2Q4MjQ4ZDUwIDEwMDY0NAotLS0gYS9mcy9ocGZzL25hbWVpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaHBmcy9uYW1laS5jCkBAIC0xMjksNyAmIzQzOzEyOSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpocGZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIH0KIAogc3RhdGljIGludCBocGZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCi0JCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUgPSBkZW50cnktJmd0O2RfbmFtZS5uYW1lOwogCXVuc2lnbmVkIGxlbiA9IGRlbnRyeS0mZ3Q7ZF9uYW1lLmxlbjsKZGlmZiAtLWdpdCBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jIGIvZnMvaHVnZXRsYmZzL2lub2RlLmMKaW5kZXggMjE2ZTFhMGRkMGIyMzcuLjE2ZDg0MzdhZWQ1MWJiIDEwMDY0NAotLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9odWdldGxiZnMvaW5vZGUuYwpAQCAtOTc5LDcgJiM0Mzs5NzksNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqaHVnZXRsYmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcgogCiBzdGF0aWMgaW50IGh1Z2V0bGJmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJCQkgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCSAgICB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbCkKJiM0MzsJCQkgICAgdW1vZGVfdCBtb2RlKQogewogCXJldHVybiBodWdldGxiZnNfbWtub2QoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRlJFRywgMCk7CiB9CmRpZmYgLS1naXQgYS9mcy9qZmZzMi9kaXIuYyBiL2ZzL2pmZnMyL2Rpci5jCmluZGV4IGM0MDg4YzNiNGFjMDM2Li4zZDQ2OTViODM4ZWQwNiAxMDA2NDQKLS0tIGEvZnMvamZmczIvZGlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvamZmczIvZGlyLmMKQEAgLTI2LDcgJiM0MzsyNiw3IEBACiBzdGF0aWMgaW50IGpmZnMyX3JlYWRkaXIgKHN0cnVjdCBmaWxlICosIHN0cnVjdCBkaXJfY29udGV4dCAqKTsKIAogc3RhdGljIGludCBqZmZzMl9jcmVhdGUgKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosCi0JCSAgICAgICAgIHN0cnVjdCBkZW50cnkgKiwgdW1vZGVfdCwgYm9vbCk7CiYjNDM7CQkgICAgICAgICBzdHJ1Y3QgZGVudHJ5ICosIHVtb2RlX3QpOwogc3RhdGljIHN0cnVjdCBkZW50cnkgKmpmZnMyX2xvb2t1cCAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqLAogCQkJCSAgICB1bnNpZ25lZCBpbnQpOwogc3RhdGljIGludCBqZmZzMl9saW5rIChzdHJ1Y3QgZGVudHJ5ICosc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqKTsKQEAgLTE2Myw3ICYjNDM7MTYzLDcgQEAgc3RhdGljIGludCBqZmZzMl9yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCkKIAogCiBzdGF0aWMgaW50IGpmZnMyX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXJfaSwKLQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpCiYjNDM7CQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiB7CiAJc3RydWN0IGpmZnMyX3Jhd19pbm9kZSAqcmk7CiAJc3RydWN0IGpmZnMyX2lub2RlX2luZm8gKmYsICpkaXJfZjsKZGlmZiAtLWdpdCBhL2ZzL2pmcy9uYW1laS5jIGIvZnMvamZzL25hbWVpLmMKaW5kZXggNDQyZDYyNjc5MjYyMjcuLjJjZjRlMjgwZWUxODVhIDEwMDY0NAotLS0gYS9mcy9qZnMvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9qZnMvbmFtZWkuYwpAQCAtNjEsNyAmIzQzOzYxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZyZWVfZWFfd21hcChzdHJ1Y3QgaW5vZGUgKmlub2RlKQogICoKICAqLwogc3RhdGljIGludCBqZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcCwKLQkJICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbCkKJiM0MzsJCSAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCWludCByYyA9IDA7CiAJdGlkX3QgdGlkOwkJLyogdHJhbnNhY3Rpb24gaWQgKi8KZGlmZiAtLWdpdCBhL2ZzL21pbml4L25hbWVpLmMgYi9mcy9taW5peC9uYW1laS5jCmluZGV4IDI2M2U0YmE4YjFjODIyLi43OWU1OTFiZGZkYzEwZCAxMDA2NDQKLS0tIGEvZnMvbWluaXgvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9uYW1laS5jCkBAIC02NCw3ICYjNDM7NjQsNyBAQCBzdGF0aWMgaW50IG1pbml4X3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogfQogCiBzdGF0aWMgaW50IG1pbml4X2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCi0JCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCXJldHVybiBtaW5peF9ta25vZCgmYW1wO25vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCAwKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jCmluZGV4IDVjYzlmMGY0NjZiODMwLi44ZDgxZmMzMDFlOTg5NyAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9uYW1laS5jCkBAIC00MTk5LDcgJiM0Mzs0MTk5LDcgQEAgaW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLAogCWVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwotCWVycm9yID0gZGlyLSZndDtpX29wLSZndDtjcmVhdGUoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCB0cnVlKTsKJiM0MzsJZXJyb3IgPSBkaXItJmd0O2lfb3AtJmd0O2NyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpOwogCWlmICghZXJyb3IpCiAJCWZzbm90aWZ5X2NyZWF0ZShkaXIsIGRlbnRyeSk7CiAJcmV0dXJuIGVycm9yOwpAQCAtNDUwNSw4ICYjNDM7NDUwNSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQlnb3RvIG91dF9kcHV0OwogCQl9CiAKLQkJZXJyb3IgPSBkaXJfaW5vZGUtJmd0O2lfb3AtJmd0O2NyZWF0ZShpZG1hcCwgZGlyX2lub2RlLCBkZW50cnksCi0JCQkJCQltb2RlLCBvcGVuX2ZsYWcgJmFtcDsgT19FWENMKTsKJiM0MzsJCWVycm9yID0gZGlyX2lub2RlLSZndDtpX29wLSZndDtjcmVhdGUoaWRtYXAsIGRpcl9pbm9kZSwgZGVudHJ5LCBtb2RlKTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBvdXRfZHB1dDsKIAl9CmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyLmMgYi9mcy9uZnMvZGlyLmMKaW5kZXggYzdiNzIzYzE4NjIwYzkuLjI4MzBkZGM0MTZjZjc1IDEwMDY0NAotLS0gYS9mcy9uZnMvZGlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmZzL2Rpci5jCkBAIC0yNDI3LDkgJiM0MzsyNDI3LDkgQEAgc3RhdGljIGludCBuZnNfZG9fY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiB9CiAKIGludCBuZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbCkKJiM0MzsJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewotCXJldHVybiBuZnNfZG9fY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlLCBleGNsID8gT19FWENMIDogMCk7CiYjNDM7CXJldHVybiBuZnNfZG9fY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlLCBPX0VYQ0wpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobmZzX2NyZWF0ZSk7CiAKZGlmZiAtLWdpdCBhL2ZzL25mcy9pbnRlcm5hbC5oIGIvZnMvbmZzL2ludGVybmFsLmgKaW5kZXggYWNhZWZmN2RkZmRmNzAuLmRkNzdkNWU4MGQ3YjkzIDEwMDY0NAotLS0gYS9mcy9uZnMvaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9uZnMvaW50ZXJuYWwuaApAQCAtMzk1LDcgJiM0MzszOTUsNyBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyBuZnNfYWNjZXNzX2NhY2hlX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssCiBzdHJ1Y3QgZGVudHJ5ICpuZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIHVuc2lnbmVkIGludCk7CiB2b2lkIG5mc19kX3BydW5lX2Nhc2VfaW5zZW5zaXRpdmVfYWxpYXNlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGludCBuZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwKLQkgICAgICAgdW1vZGVfdCwgYm9vbCk7CiYjNDM7CSAgICAgICB1bW9kZV90KTsKIHN0cnVjdCBkZW50cnkgKm5mc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosCiAJCQkgdW1vZGVfdCk7CiBpbnQgbmZzX3JtZGlyKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICopOwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL25hbWVpLmMgYi9mcy9uaWxmczIvbmFtZWkuYwppbmRleCBlMmZlOTVkZTNkNzFjYS4uMGUwYTk4NTBmZjc2ZGMgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25pbGZzMi9uYW1laS5jCkBAIC04Niw3ICYjNDM7ODYsNyBAQCBuaWxmc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW5zaWduZWQgaW50IGZsYWdzKQogICogd2l0aCBkX2luc3RhbnRpYXRlKCkuCiAgKi8KIHN0YXRpYyBpbnQgbmlsZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpCiYjNDM7CQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlzdHJ1Y3QgbmlsZnNfdHJhbnNhY3Rpb25faW5mbyB0aTsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvbmFtZWkuYyBiL2ZzL250ZnMvbmFtZWkuYwppbmRleCBhMTk2MjZhMTM1YmQ3Zi4uYjRkYzZkYTIyNjU5NmIgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzL25hbWVpLmMKQEAgLTczNiw3ICYjNDM7NzM2LDcgQEAgc3RhdGljIHN0cnVjdCBudGZzX2lub2RlICpfX250ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmQKIH0KIAogc3RhdGljIGludCBudGZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCi0JCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpCiYjNDM7CQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKIHsKIAlzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCA9IE5URlNfU0IoZGlyLSZndDtpX3NiKTsKIAlzdHJ1Y3QgbnRmc19pbm9kZSAqbmk7CmRpZmYgLS1naXQgYS9mcy9udGZzMy9uYW1laS5jIGIvZnMvbnRmczMvbmFtZWkuYwppbmRleCBjNTlkZTVmMmZhOTc3MS4uNmQwMzJiMjJjOTdkYWYgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMzL25hbWVpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmczMvbmFtZWkuYwpAQCAtMTA1LDcgJiM0MzsxMDUsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbnRmc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKICAqIG50ZnNfY3JlYXRlIC0gaW5vZGVfb3BlcmF0aW9uczo6Y3JlYXRlCiAgKi8KIHN0YXRpYyBpbnQgbnRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbCkKJiM0MzsJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKIHsKIAlyZXR1cm4gbnRmc19jcmVhdGVfaW5vZGUoaWRtYXAsIGRpciwgZGVudHJ5LCBOVUxMLCBTX0lGUkVHIHwgbW9kZSwgMCwKIAkJCQkgTlVMTCwgMCwgTlVMTCk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG1mcy9kbG1mcy5jIGIvZnMvb2NmczIvZGxtZnMvZGxtZnMuYwppbmRleCA1ODIxZTMzZGY3OGZkOS4uZjAxMjRmODFkZjI5YjAgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbWZzL2RsbWZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIvZGxtZnMvZGxtZnMuYwpAQCAtNDUzLDggJiM0Mzs0NTMsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqZGxtZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqIGlkbWFwLAogc3RhdGljIGludCBkbG1mc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJCQlzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCXVtb2RlX3QgbW9kZSwKLQkJCWJvb2wgZXhjbCkKJiM0MzsJCQl1bW9kZV90IG1vZGUpCiB7CiAJaW50IHN0YXR1cyA9IDA7CiAJc3RydWN0IGlub2RlICppbm9kZTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL25hbWVpLmMgYi9mcy9vY2ZzMi9uYW1laS5jCmluZGV4IDEyNzc2NjZjNzdjZDJkLi4xMmExZmVmM2VlNzRlNiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9vY2ZzMi9uYW1laS5jCkBAIC02NjcsOCAmIzQzOzY2Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvY2ZzMl9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIHN0YXRpYyBpbnQgb2NmczJfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCQkJc3RydWN0IGlub2RlICpkaXIsCiAJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQl1bW9kZV90IG1vZGUsCi0JCQlib29sIGV4Y2wpCiYjNDM7CQkJdW1vZGVfdCBtb2RlKQogewogCWludCByZXQ7CiAKZGlmZiAtLWdpdCBhL2ZzL29tZnMvZGlyLmMgYi9mcy9vbWZzL2Rpci5jCmluZGV4IDJlZDU0MWZjY2YzMzFkLi5hMDlhOThmN2UzMGJjNiAxMDA2NDQKLS0tIGEvZnMvb21mcy9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9vbWZzL2Rpci5jCkBAIC0yODYsNyAmIzQzOzI4Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvbWZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIH0KIAogc3RhdGljIGludCBvbWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCi0JCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCXJldHVybiBvbWZzX2FkZF9ub2RlKGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRlJFRyk7CiB9CmRpZmYgLS1naXQgYS9mcy9vcmFuZ2Vmcy9uYW1laS5jIGIvZnMvb3JhbmdlZnMvbmFtZWkuYwppbmRleCA3NWU2NWU3MmMyZDY0Ni4uOTFmOTdkYjE4OTcxYmYgMTAwNjQ0Ci0tLSBhL2ZzL29yYW5nZWZzL25hbWVpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvb3JhbmdlZnMvbmFtZWkuYwpAQCAtMTgsOCAmIzQzOzE4LDcgQEAKIHN0YXRpYyBpbnQgb3JhbmdlZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCQkJc3RydWN0IGlub2RlICpkaXIsCiAJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQl1bW9kZV90IG1vZGUsCi0JCQlib29sIGV4Y2x1c2l2ZSkKJiM0MzsJCQl1bW9kZV90IG1vZGUpCiB7CiAJc3RydWN0IG9yYW5nZWZzX2lub2RlX3MgKnBhcmVudCA9IE9SQU5HRUZTX0koZGlyKTsKIAlzdHJ1Y3Qgb3JhbmdlZnNfa2VybmVsX29wX3MgKm5ld19vcDsKZGlmZiAtLWdpdCBhL2ZzL292ZXJsYXlmcy9kaXIuYyBiL2ZzL292ZXJsYXlmcy9kaXIuYwppbmRleCBhMDMzNzQzZGJmNTE1OS4uODhiY2Y5OGQyODdkMWUgMTAwNjQ0Ci0tLSBhL2ZzL292ZXJsYXlmcy9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9vdmVybGF5ZnMvZGlyLmMKQEAgLTczMiw3ICYjNDM7NzMyLDcgQEAgc3RhdGljIGludCBvdmxfY3JlYXRlX29iamVjdChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlLCBkZXZfdCByZGV2LAogfQogCiBzdGF0aWMgaW50IG92bF9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiB7CiAJcmV0dXJuIG92bF9jcmVhdGVfb2JqZWN0KGRlbnRyeSwgKG1vZGUgJmFtcDsgMDc3NzcpIHwgU19JRlJFRywgMCwgTlVMTCk7CiB9CmRpZmYgLS1naXQgYS9mcy9yYW1mcy9pbm9kZS5jIGIvZnMvcmFtZnMvaW5vZGUuYwppbmRleCAzOTg3NjM5ZWQxMzJjNi4uMGY1MmJhMjJhYWMwNGMgMTAwNjQ0Ci0tLSBhL2ZzL3JhbWZzL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvcmFtZnMvaW5vZGUuYwpAQCAtMTI4LDcgJiM0MzsxMjgsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqcmFtZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogfQogCiBzdGF0aWMgaW50IHJhbWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCi0JCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCXJldHVybiByYW1mc19ta25vZCgmYW1wO25vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRlJFRywgMCk7CiB9CmRpZmYgLS1naXQgYS9mcy9zbWIvY2xpZW50L2NpZnNmcy5oIGIvZnMvc21iL2NsaWVudC9jaWZzZnMuaAppbmRleCA5MDFlMTM0MGM5ODZmYi4uYmNmMmZmODdkYTJkNWMgMTAwNjQ0Ci0tLSBhL2ZzL3NtYi9jbGllbnQvY2lmc2ZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvc21iL2NsaWVudC9jaWZzZnMuaApAQCAtNTQsNyAmIzQzOzU0LDcgQEAgdm9pZCBjaWZzX3NiX2RlYWN0aXZlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNpZnNfZGlyX2lub2RlX29wczsKIHN0cnVjdCBpbm9kZSAqY2lmc19yb290X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CiBpbnQgY2lmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAotCQlzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpOwomIzQzOwkJc3RydWN0IGRlbnRyeSAqZGlyZW50cnksIHVtb2RlX3QgbW9kZSk7CiBpbnQgY2lmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGlyZW50cnksCiAJCSAgICAgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBvZmxhZ3MsIHVtb2RlX3QgbW9kZSk7CiBpbnQgY2lmc190bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKZGlmZiAtLWdpdCBhL2ZzL3NtYi9jbGllbnQvZGlyLmMgYi9mcy9zbWIvY2xpZW50L2Rpci5jCmluZGV4IDg4YTRhMTc4N2ZmMDQ3Li43ODAzYmQ1YmQwMWY4MCAxMDA2NDQKLS0tIGEvZnMvc21iL2NsaWVudC9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9zbWIvY2xpZW50L2Rpci5jCkBAIC02NDUsNyAmIzQzOzY0NSw3IEBAIGludCBjaWZzX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSwKICAqIGhhc2hlZC1wb3NpdGl2ZSBieSBjYWxsaW5nIGRfaW5zdGFudGlhdGUoKS4KICAqLwogaW50IGNpZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJc3RydWN0IGRlbnRyeSAqZGlyZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJc3RydWN0IGRlbnRyeSAqZGlyZW50cnksIHVtb2RlX3QgbW9kZSkKIHsKIAlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiID0gQ0lGU19TQihkaXIpOwogCWludCByYzsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2Rpci5jIGIvZnMvdWJpZnMvZGlyLmMKaW5kZXggODZkNDFlMDc3ZTRkNjIuLmZkOGRmMTA1NDdiZjQyIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy91Ymlmcy9kaXIuYwpAQCAtMzAzLDcgJiM0MzszMDMsNyBAQCBzdGF0aWMgaW50IHViaWZzX3ByZXBhcmVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiB9CiAKIHN0YXRpYyBpbnQgdWJpZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpCiYjNDM7CQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlzdHJ1Y3QgdWJpZnNfaW5mbyAqYyA9IGRpci0mZ3Q7aV9zYi0mZ3Q7c19mc19pbmZvOwpkaWZmIC0tZ2l0IGEvZnMvdWRmL25hbWVpLmMgYi9mcy91ZGYvbmFtZWkuYwppbmRleCA5YTNiN2NlZjM2MDY0OC4uZmQ5YjZmMTZmNjE0NjIgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3VkZi9uYW1laS5jCkBAIC0zNzEsNyAmIzQzOzM3MSw3IEBAIHN0YXRpYyBpbnQgdWRmX2FkZF9ub25kaXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogfQogCiBzdGF0aWMgaW50IHVkZl9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQomIzQzOwkJICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IHVkZl9uZXdfaW5vZGUoZGlyLCBtb2RlKTsKIApkaWZmIC0tZ2l0IGEvZnMvdWZzL25hbWVpLmMgYi9mcy91ZnMvbmFtZWkuYwppbmRleCA1YjNjODVjOTMyNDI5OC4uNTAxMmUwNTYyMDBhY2EgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Vmcy9uYW1laS5jCkBAIC03MCw4ICYjNDM7NzAsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqdWZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKiBkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW5zaQogICogd2l0aCBkX2luc3RhbnRpYXRlKCkuIAogICovCiBzdGF0aWMgaW50IHVmc19jcmVhdGUgKHN0cnVjdCBtbnRfaWRtYXAgKiBpZG1hcCwKLQkJc3RydWN0IGlub2RlICogZGlyLCBzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5LCB1bW9kZV90IG1vZGUsCi0JCWJvb2wgZXhjbCkKJiM0MzsJCXN0cnVjdCBpbm9kZSAqIGRpciwgc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAKZGlmZiAtLWdpdCBhL2ZzL3Zib3hzZi9kaXIuYyBiL2ZzL3Zib3hzZi9kaXIuYwppbmRleCBjNWJkMzI3MWFhOTYxNi4uMGI5ZWFiMTU3NDMyZGYgMTAwNjQ0Ci0tLSBhL2ZzL3Zib3hzZi9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy92Ym94c2YvZGlyLmMKQEAgLTI5OCw5ICYjNDM7Mjk4LDkgQEAgc3RhdGljIGludCB2Ym94c2ZfZGlyX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCiBzdGF0aWMgaW50IHZib3hzZl9kaXJfbWtmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCQkJICAgICBzdHJ1Y3QgaW5vZGUgKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJICAgICB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbCkKJiM0MzsJCQkgICAgIHVtb2RlX3QgbW9kZSkKIHsKLQlyZXR1cm4gdmJveHNmX2Rpcl9jcmVhdGUocGFyZW50LCBkZW50cnksIG1vZGUsIGZhbHNlLCBleGNsLCBOVUxMKTsKJiM0MzsJcmV0dXJuIHZib3hzZl9kaXJfY3JlYXRlKHBhcmVudCwgZGVudHJ5LCBtb2RlLCBmYWxzZSwgdHJ1ZSwgTlVMTCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp2Ym94c2ZfZGlyX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb3BzLmMgYi9mcy94ZnMveGZzX2lvcHMuYwppbmRleCA2MzM5ZjQ5NTZlY2IzOS4uZTQ4ZjllNWExYjhhMTggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW9wcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfaW9wcy5jCkBAIC0yOTMsOCAmIzQzOzI5Myw3IEBAIHhmc192bl9jcmVhdGUoCiAJc3RydWN0IG1udF9pZG1hcAkqaWRtYXAsCiAJc3RydWN0IGlub2RlCQkqZGlyLAogCXN0cnVjdCBkZW50cnkJCSpkZW50cnksCi0JdW1vZGVfdAkJCW1vZGUsCi0JYm9vbAkJCWZsYWdzKQomIzQzOwl1bW9kZV90CQkJbW9kZSkKIHsKIAlyZXR1cm4geGZzX2dlbmVyaWNfY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgMCwgTlVMTCk7CiB9CkBAIC0zMzgsNyAmIzQzOzMzNyw3IEBAIFNUQVRJQyBzdHJ1Y3QgZGVudHJ5ICoKIHhmc192bl9jaV9sb29rdXAoCiAJc3RydWN0IGlub2RlCSpkaXIsCiAJc3RydWN0IGRlbnRyeQkqZGVudHJ5LAotCXVuc2lnbmVkIGludCBmbGFncykKJiM0MzsJdW5zaWduZWQgaW50CWZsYWdzKQogewogCXN0cnVjdCB4ZnNfaW5vZGUgKmlwOwogCXN0cnVjdCB4ZnNfbmFtZQl4bmFtZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCBkMTA4OTdiM2ExZTM1MC4uMWI3YzQwYjJmYTZkZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTIwMDIsNyAmIzQzOzIwMDIsNyBAQCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB7CiAJaW50ICgqcmVhZGxpbmspIChzdHJ1Y3QgZGVudHJ5ICosIGNoYXIgX191c2VyICosaW50KTsKIAogCWludCAoKmNyZWF0ZSkgKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqLAotCQkgICAgICAgdW1vZGVfdCwgYm9vbCk7CiYjNDM7CQkgICAgICAgdW1vZGVfdCk7CiAJaW50ICgqbGluaykgKHN0cnVjdCBkZW50cnkgKixzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICopOwogCWludCAoKnVubGluaykgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKik7CiAJaW50ICgqc3ltbGluaykgKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqLApkaWZmIC0tZ2l0IGEvaXBjL21xdWV1ZS5jIGIvaXBjL21xdWV1ZS5jCmluZGV4IDQ3OThiMzc1OTcyYmY0Li4yZGRkYjk3ZjJmOGE1NSAxMDA2NDQKLS0tIGEvaXBjL21xdWV1ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2lwYy9tcXVldWUuYwpAQCAtNjA4LDcgJiM0Mzs2MDgsNyBAQCBzdGF0aWMgaW50IG1xdWV1ZV9jcmVhdGVfYXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgdm9pZCAqYXJnKQogfQogCiBzdGF0aWMgaW50IG1xdWV1ZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpCiYjNDM7CQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCXJldHVybiBtcXVldWVfY3JlYXRlX2F0dHIoZGVudHJ5LCBtb2RlLCBOVUxMKTsKIH0KZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IGI1MWY4M2M5NzBiYjM3Li41Nzg5YTBmNWEzNDYzYiAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jCkBAIC0zODY0LDcgJiM0MzszODY0LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKnNobWVtX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIH0KIAogc3RhdGljIGludCBzaG1lbV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbCkKJiM0MzsJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKIHsKIAlyZXR1cm4gc2htZW1fbWtub2QoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRlJFRywgMCk7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzYwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTIwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZGUyBBUEkgQ2hhbmdlIGZvciBgY3JlYXRlYCBJbm9kZSBPcGVyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBmdW5kYW1lbnRhbGx5IGFsdGVycyB0aGUgYGNyZWF0ZWAgaW5vZGUgb3BlcmF0aW9uIGluIHRoZSBWRlMgbGF5ZXIuIFNwZWNpZmljYWxseSwgdGhlIGBleGNsYCBhcmd1bWVudCwgd2hpY2ggaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGZpbGUgbXVzdCBiZSBjcmVhdGVkIGV4Y2x1c2l2ZWx5LCBpcyBiZWluZyByZW1vdmVkIGZyb20gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZS4gVGhpcyBjaGFuZ2UgcmlwcGxlcyB0aHJvdWdoIHRoZSBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9ucywgYWZmZWN0aW5nIGhvdyB0aGV5IGhhbmRsZSBmaWxlIGNyZWF0aW9uLiBUaGUgY2hhbmdlcyBpbmNsdWRlIHVwZGF0ZXMgdG8gdGhlIGRvY3VtZW50YXRpb24gKGBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0YCksIHRoZSBoZWFkZXIgZmlsZSAoYGluY2x1ZGUvbGludXgvZnMuaGApLCBhbmQgYSBtdWx0aXR1ZGUgb2YgZmlsZXN5c3RlbS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgKGxpa2UgYDlwYCwgYGV4dDRgLCBgYnRyZnNgLCBldGMuKS4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbGllcyBpbiBgZnMvbmFtZWkuY2AsIHdoZXJlIGB2ZnNfY3JlYXRlYCBhbmQgYGxvb2t1cF9vcGVuYCBjYWxsIHRoZSBgY3JlYXRlYCBmdW5jdGlvbi4gQmVmb3JlLCBgbG9va3VwX29wZW5gIHdvdWxkIHBhc3MgdGhlIGBPX0VYQ0xgIGZsYWcgdmlhIHRoZSBgZXhjbGAgYXJndW1lbnQuIE5vdywgdGhhdCBhcmd1bWVudCBpcyBnb25lLiBUaGUgY29tbWl0IG1lc3NhZ2UgY2xhcmlmaWVzIHRoYXQgdGhlIGBjcmVhdGVgIGZ1bmN0aW9uICptdXN0KiBhc3N1bWUgZXhjbHVzaXZpdHkgYnkgZGVmYXVsdC4gSWYgYSBmaWxlc3lzdGVtIG5lZWRzIHRvIGhhbmRsZSBub24tZXhjbHVzaXZlIGNyZWF0ZXMsIHRoZSBzdWdnZXN0aW9uIGlzIHRvIGltcGxlbWVudCBgYXRvbWljX29wZW5gLgoKVGhpcyBpcyBhIHN0cnVjdHVyYWwgQVBJIGNoYW5nZSwgcmVtb3ZpbmcgYW4gYXJndW1lbnQgZnJvbSB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlLiBJdCYjMzk7cyBub3QgaW50cm9kdWNpbmcgYW55IG5ldyBmdW5kYW1lbnRhbCBmdW5jdGlvbmFsaXR5LCBidXQgcmF0aGVyIHNoaWZ0aW5nIHRoZSByZXNwb25zaWJpbGl0eSBmb3IgZXhjbHVzaXZlIGNyZWF0aW9uLiBUaGUgbG9naWMgb2YgdGhlIGZpbGVzeXN0ZW1zIHRoZW1zZWx2ZXMgYXBwZWFycyBtb3N0bHkgdW5jaGFuZ2VkLCB0aGV5JiMzOTtyZSBzaW1wbHkgYWRhcHRpbmcgdG8gdGhlIG5ldyBzaWduYXR1cmUuIFRoZSBpbXBvcnRhbnQgYml0IGlzIHRoYXQgdGhlIFZGUyAqbm93KiBoYW5kbGVzIHRoZSBleGNsdXNpdml0eSBjaGVjazsgYmVmb3JlLCBpdCB3YXMgcGFydGlhbGx5IGRlbGVnYXRlZC4KCkl0IGRvZXMgbG9vayBsaWtlIHNvbWUgZmlsZXN5c3RlbXMgYXJlIGhhcmRjb2RpbmcgdGhlIGV4Y2x1c2l2ZSBjcmVhdGUgYmVoYXZpb3IsIGZvciBleGFtcGxlLCBgZ2ZzMmAgbm93IGV4cGxpY2l0bHkgc2V0cyBgZXhjbCA9IDFgIGluIGl0cyBjYWxsIHRvIGBnZnMyX2NyZWF0ZV9pbm9kZWAuIFRoZSBzYW1lIHBhdHRlcm4gYXBwbGllcyB0byBgbmZzYCBhbmQgYHZib3hzZmAuIFRoaXMgaXMgd2hlcmUgdGhlIHBvdGVudGlhbCBmb3IgaW50ZXJlc3RpbmcgYmVoYXZpb3IgZW1lcmdlczogZmlsZXN5c3RlbXMgcHJldmlvdXNseSByZWx5aW5nIG9uIHRoZSBgZXhjbGAgYXJndW1lbnQgdG8ga25vdyAqaWYqIGl0IHdhcyBhbiBleGNsdXNpdmUgY3JlYXRlIG5vdyAqYWx3YXlzKiBiZWhhdmUgYXMgaWYgdGhlIGZpbGUgbmVlZHMgdG8gYmUgY3JlYXRlZCBleGNsdXNpdmVseS4gVGhpcyBtaWdodCBjcmVhdGUgcmVncmVzc2lvbnMuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGEgcmVmYWN0b3JpbmcsIGJ1dCBhIHZlcnkgKndpZGUqIG9uZS4gSXMgaXQgd29ydGggc3BlY2lhbGl6ZWQgZnV6emluZz8gUHJvYmFibHkgbm90IGEgKm5ldyogc2V0IG9mIGZ1enplcnMsIGJ1dCBWRlMgY2hhbmdlcyBhcmUgYWx3YXlzIHVuZGVyIHNjcnV0aW55LiBXZSYjMzk7cmUgbm90IGFkZGluZyAqbmV3KiBmdW5jdGlvbmFsaXR5LCBidXQgd2UmIzM5O3JlIGNoYW5naW5nIHRoZSBiZWhhdmlvciBvZiBob3cgYGxvb2t1cF9vcGVuYCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBmaWxlc3lzdGVtcy4gVGhpcyBjaGFuZ2UgKmNvdWxkKiBhZmZlY3QgZmlsZXN5c3RlbXMgdGhhdCAqZG9uJiMzOTt0KiBpbXBsZW1lbnQgYGF0b21pY19vcGVuYCBhbmQgaGFkIGJlZW4gcmVseWluZyBvbiB0aGUgYGV4Y2xgIGFyZ3VtZW50IHRvIGNvbnRyb2wgd2hldGhlciB0byBjcmVhdGUgZXhjbHVzaXZlbHkgb3Igbm90LiBUaGlzIGlzIHNvbWV0aGluZyB3b3J0aCBhIGNsb3NlciBsb29rOiBBcmUgd2UgYnJlYWtpbmcgY29tcGF0aWJpbGl0eT8gSXMgdGhlcmUgYSBzdWJ0bGUgc2VtYW50aWMgZGlmZmVyZW5jZSBoZXJlPwoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhvc2UgZmlsZXN5c3RlbXMsIGxpa2UgYGdmczJgLCBhY3R1YWxseSAqZG8qIGltcGxlbWVudCBgYXRvbWljX29wZW5gIGJlY2F1c2UgaWYgdGhleSBkbywgdGhlbiB0aGlzIGVudGlyZSBzaGlmdCBpcyBsYXJnZWx5IHRyYW5zcGFyZW50LiBJZiB0aGV5IGRvbiYjMzk7dCwgdGhlbiB0aGlzIGlzIHNpZ25pZmljYW50LCBhbmQgd2UgbmVlZCB0byBsb29rIGZvciByZWdyZXNzaW9ucy4gTGV0IG1lIGNoZWNrIGlmIGBnZnMyYCBoYXMgaW1wbGVtZW50ZWQgYGF0b21pY19vcGVuYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdG9taWNfb3BlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2dmczIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2dmczIvZmlsZS5jPTU5MT1zdGF0aWMgaW50IGdmczJfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxuZnMvZ2ZzMi9maWxlLmMtNjEzLS8qKlxuZnMvZ2ZzMi9maWxlLmM6NjE0OiAqIGdmczJfb3Blbl9jb21tb24gLSBUaGlzIGlzIGNvbW1vbiB0byBvcGVuIGFuZCBhdG9taWNfb3BlblxuZnMvZ2ZzMi9maWxlLmMtNjE1LSAqIEBpbm9kZTogVGhlIGlub2RlIGJlaW5nIG9wZW5lZFxuLS1cbmZzL2dmczIvZmlsZS5jPTYyNj1pbnQgZ2ZzMl9vcGVuX2NvbW1vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5mcy9nZnMyL2ZpbGUuYy02NjUtICpcbmZzL2dmczIvZmlsZS5jOjY2NjogKiBBZnRlciBhdG9taWNfb3BlbiwgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IHVzZWQgZm9yIG9wZW5pbmcgZmlsZXNcbmZzL2dmczIvZmlsZS5jLTY2Ny0gKiB3aGljaCBhcmUgYWxyZWFkeSBjYWNoZWQuIFdlIG11c3Qgc3RpbGwgZ2V0IHRoZSBnbG9jayBmb3IgcmVndWxhclxuLS1cbmZzL2dmczIvaW5vZGUuYz0xMzY3PXN0YXRpYyBpbnQgZ2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvZ2ZzMi9pbm9kZS5jLTEzNzMtLyoqXG5mcy9nZnMyL2lub2RlLmM6MTM3NDogKiBnZnMyX2F0b21pY19vcGVuIC0gQXRvbWljYWxseSBvcGVuIGEgZmlsZVxuZnMvZ2ZzMi9pbm9kZS5jLTEzNzUtICogQGRpcjogVGhlIGRpcmVjdG9yeVxuLS1cbmZzL2dmczIvaW5vZGUuYy0xMzgzLVxuZnMvZ2ZzMi9pbm9kZS5jOjEzODQ6c3RhdGljIGludCBnZnMyX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5mcy9nZnMyL2lub2RlLmMtMTM4NS1cdFx0XHQgICAgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGZsYWdzLFxuLS1cbmZzL2dmczIvaW5vZGUuYz0yMzA4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBnZnMyX2Rpcl9pb3BzID0ge1xuLS1cbmZzL2dmczIvaW5vZGUuYy0yMzI1LVx0LnVwZGF0ZV90aW1lID0gZ2ZzMl91cGRhdGVfdGltZSxcbmZzL2dmczIvaW5vZGUuYzoyMzI2Olx0LmF0b21pY19vcGVuID0gZ2ZzMl9hdG9taWNfb3BlbixcbmZzL2dmczIvaW5vZGUuYy0yMzI3LVx0LmZpbGVhdHRyX2dldCA9IGdmczJfZmlsZWF0dHJfZ2V0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjA0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkZpbGUgU3lzdGVtIEF0b21pYyBPcGVuczogQSBRdWljayBNZW50YWwgQ2hlY2sqKgoKUmlnaHQsICpnZnMyKiBoYXMgYGF0b21pY19vcGVuYCBpbXBsZW1lbnRlZCwgdGhhdCYjMzk7cyBjbGVhci4gTm8gc3VycHJpc2VzIHRoZXJlOyBpdCYjMzk7cyBkZXNpZ25lZCBmb3IgdGhhdCBraW5kIG9mIHJvYnVzdCwgY2x1c3RlcmVkIGVudmlyb25tZW50LiBCdXQgbm93IEkmIzM5O20gc2hpZnRpbmcgZ2VhcnMsIGFuZCBhIG5ldyBxdWVzdGlvbiBwb3BzIHVwOiBXaGF0IGFib3V0IE5GUz8gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSBORlMgcHJvdG9jb2wgYW5kIHNlZSBpZiBpdCBwcm92aWRlcyBhbnkgaW5oZXJlbnQgc3VwcG9ydCBvciBpZiBpdCByZWxpZXMgb24gdW5kZXJseWluZyBtZWNoYW5pc21zIGZvciBzb21ldGhpbmcgbGlrZSBhdG9taWMgb3BlbnMuIEl0JiMzOTtzIGEga2V5IGRldGFpbCB3aGVuIGNvbnNpZGVyaW5nIGRpc3RyaWJ1dGVkIGZpbGUgc3lzdGVtIGRlc2lnbiwgYXMgSSYjMzk7bSBzdXJlIGl0JiMzOTtsbCBpbXBhY3QgaG93IHRoZSBzeXN0ZW0gYXMgYSB3aG9sZSBkZWFscyB3aXRoIGZpbGUgYWNjZXNzZXMuIERvZXMgaXQgZGVmZXIgdG8gdGhlIHVuZGVybHlpbmcgc3RvcmFnZSBmb3IgYXRvbWljaXR5PyBPciBkb2VzIHRoZSBjbGllbnQtc2lkZSBpbnRlcmFjdGlvbiBzb21laG93IGhhbmRsZSB0aGlzPyBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgc3BlY3MuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdG9taWNfb3BlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25mcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmZzL2Rpci5jPTIwODc9c3RhdGljIGludCBuZnNfZmluaXNoX29wZW4oc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCxcbi0tXG5mcy9uZnMvZGlyLmMtMjEwMy1cbmZzL25mcy9kaXIuYzoyMTA0OmludCBuZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbmZzL25mcy9kaXIuYy0yMTA1LVx0XHQgICAgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIG9wZW5fZmxhZ3MsXG4tLVxuZnMvbmZzL2Rpci5jLTIxMjAtXG5mcy9uZnMvZGlyLmM6MjEyMTpcdGRmcHJpbnRrKFZGUywgXCYjMzQ7TkZTOiBhdG9taWNfb3Blbiglcy8lbGx1KSwgJXBkXFxuXCYjMzQ7LFxuZnMvbmZzL2Rpci5jLTIxMjItXHRcdFx0ZGlyLVx1MDAzZWlfc2ItXHUwMDNlc19pZCwgZGlyLVx1MDAzZWlfaW5vLCBkZW50cnkpO1xuLS1cbmZzL25mcy9kaXIuYy0yMTc0LVxuZnMvbmZzL2Rpci5jOjIxNzU6XHR0cmFjZV9uZnNfYXRvbWljX29wZW5fZW50ZXIoZGlyLCBjdHgsIG9wZW5fZmxhZ3MpO1xuZnMvbmZzL2Rpci5jLTIxNzYtXHRpbm9kZSA9IE5GU19QUk9UTyhkaXIpLVx1MDAzZW9wZW5fY29udGV4dChkaXIsIGN0eCwgb3Blbl9mbGFncywgXHUwMDI2YXR0ciwgXHUwMDI2Y3JlYXRlZCk7XG4tLVxuZnMvbmZzL2Rpci5jLTIxODAtXHRcdGVyciA9IFBUUl9FUlIoaW5vZGUpO1xuZnMvbmZzL2Rpci5jOjIxODE6XHRcdHRyYWNlX25mc19hdG9taWNfb3Blbl9leGl0KGRpciwgY3R4LCBvcGVuX2ZsYWdzLCBlcnIpO1xuZnMvbmZzL2Rpci5jLTIxODItXHRcdHB1dF9uZnNfb3Blbl9jb250ZXh0KGN0eCk7XG4tLVxuZnMvbmZzL2Rpci5jLTIyMTItXHRlcnIgPSBuZnNfZmluaXNoX29wZW4oY3R4LCBjdHgtXHUwMDNlZGVudHJ5LCBmaWxlLCBvcGVuX2ZsYWdzKTtcbmZzL25mcy9kaXIuYzoyMjEzOlx0dHJhY2VfbmZzX2F0b21pY19vcGVuX2V4aXQoZGlyLCBjdHgsIG9wZW5fZmxhZ3MsIGVycik7XG5mcy9uZnMvZGlyLmMtMjIxNC1cdHB1dF9uZnNfb3Blbl9jb250ZXh0KGN0eCk7XG4tLVxuZnMvbmZzL2Rpci5jLTIyNTAtfVxuZnMvbmZzL2Rpci5jOjIyNTE6RVhQT1JUX1NZTUJPTF9HUEwobmZzX2F0b21pY19vcGVuKTtcbmZzL25mcy9kaXIuYy0yMjUyLVxuLS1cbmZzL25mcy9kaXIuYz0yMjU0PW5mczRfbG9va3VwX3JldmFsaWRhdGUoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuLS1cbmZzL25mcy9kaXIuYy0yMzA1LVxuZnMvbmZzL2Rpci5jOjIzMDY6aW50IG5mc19hdG9taWNfb3Blbl92MjMoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbmZzL25mcy9kaXIuYy0yMzA3LVx0XHRcdHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgb3Blbl9mbGFncyxcbi0tXG5mcy9uZnMvZGlyLmMtMjMzNi19XG5mcy9uZnMvZGlyLmM6MjMzNzpFWFBPUlRfU1lNQk9MX0dQTChuZnNfYXRvbWljX29wZW5fdjIzKTtcbmZzL25mcy9kaXIuYy0yMzM4LVxuLS1cbmZzL25mcy9uZnMzcHJvYy5jPTEwNDI9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG5mczNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XG5mcy9uZnMvbmZzM3Byb2MuYy0xMDQzLVx0LmNyZWF0ZVx0XHQ9IG5mc19jcmVhdGUsXG5mcy9uZnMvbmZzM3Byb2MuYzoxMDQ0Olx0LmF0b21pY19vcGVuXHQ9IG5mc19hdG9taWNfb3Blbl92MjMsXG5mcy9uZnMvbmZzM3Byb2MuYy0xMDQ1LVx0Lmxvb2t1cFx0XHQ9IG5mc19sb29rdXAsXG4tLVxuZnMvbmZzL25mczRfZnMuaD0yODI9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBuZnM0X2RlbnRyeV9vcGVyYXRpb25zO1xuLS1cbmZzL25mcy9uZnM0X2ZzLmgtMjg0LS8qIGRpci5jICovXG5mcy9uZnMvbmZzNF9mcy5oOjI4NTppbnQgbmZzX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBmaWxlICosXG5mcy9uZnMvbmZzNF9mcy5oLTI4Ni1cdFx0ICAgIHVuc2lnbmVkLCB1bW9kZV90KTtcbi0tXG5mcy9uZnMvbmZzNHByb2MuYz0xMjYxPXN0cnVjdCBuZnM0X29wZW5fY3JlYXRlYXR0cnMge1xuLS1cbmZzL25mcy9uZnM0cHJvYy5jLTEyNjYtXG5mcy9uZnMvbmZzNHByb2MuYzoxMjY3OnN0YXRpYyBib29sIG5mczRfY2xlYXJfY2FwX2F0b21pY19vcGVuX3YxKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsXG5mcy9uZnMvbmZzNHByb2MuYy0xMjY4LVx0XHRpbnQgZXJyLCBzdHJ1Y3QgbmZzNF9leGNlcHRpb24gKmV4Y2VwdGlvbilcbi0tXG5mcy9uZnMvbmZzNHByb2MuYz0xMzA5PXN0YXRpYyB1MzJcbmZzL25mcy9uZnM0cHJvYy5jOjEzMTA6bmZzNF9tYXBfYXRvbWljX29wZW5fc2hhcmUoc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlcixcbmZzL25mcy9uZnM0cHJvYy5jLTEzMTEtXHRcdGZtb2RlX3QgZm1vZGUsIGludCBvcGVuZmxhZ3MpXG4tLVxuZnMvbmZzL25mczRwcm9jLmM9MTMzMT1zdGF0aWMgZW51bSBvcGVuX2NsYWltX3R5cGU0XG5mcy9uZnMvbmZzNHByb2MuYzoxMzMyOm5mczRfbWFwX2F0b21pY19vcGVuX2NsYWltKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsXG5mcy9uZnMvbmZzNHByb2MuYy0xMzMzLVx0XHRlbnVtIG9wZW5fY2xhaW1fdHlwZTQgY2xhaW0pXG4tLVxuZnMvbmZzL25mczRwcm9jLmM9MTM2MD1zdGF0aWMgc3RydWN0IG5mczRfb3BlbmRhdGEgKm5mczRfb3BlbmRhdGFfYWxsb2Moc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL25mcy9uZnM0cHJvYy5jLTEzOTUtXHRwLVx1MDAzZW9fYXJnLmZtb2RlID0gZm1vZGUgXHUwMDI2IChGTU9ERV9SRUFEfEZNT0RFX1dSSVRFKTtcbmZzL25mcy9uZnM0cHJvYy5jOjEzOTY6XHRwLVx1MDAzZW9fYXJnLmNsYWltID0gbmZzNF9tYXBfYXRvbWljX29wZW5fY2xhaW0oc2VydmVyLCBjbGFpbSk7XG5mcy9uZnMvbmZzNHByb2MuYzoxMzk3Olx0cC1cdTAwM2VvX2FyZy5zaGFyZV9hY2Nlc3MgPSBuZnM0X21hcF9hdG9taWNfb3Blbl9zaGFyZShzZXJ2ZXIsXG5mcy9uZnMvbmZzNHByb2MuYy0xMzk4LVx0XHRcdGZtb2RlLCBmbGFncyk7XG4tLVxuZnMvbmZzL25mczRwcm9jLmM9MjE2Nj1zdGF0aWMgaW50IG5mczRfb3Blbl9yZWNvdmVyX2hlbHBlcihzdHJ1Y3QgbmZzNF9vcGVuZGF0YSAqb3BlbmRhdGEsXG4tLVxuZnMvbmZzL25mczRwcm9jLmMtMjE3Ny1cdG9wZW5kYXRhLVx1MDAzZW9fYXJnLnNoYXJlX2FjY2VzcyA9XG5mcy9uZnMvbmZzNHByb2MuYzoyMTc4Olx0XHRuZnM0X21hcF9hdG9taWNfb3Blbl9zaGFyZShzZXJ2ZXIsIGZtb2RlLCBvcGVuZmxhZ3MpO1xuZnMvbmZzL25mczRwcm9jLmMtMjE3OS1cdG1lbXNldChcdTAwMjZvcGVuZGF0YS1cdTAwM2VvX3JlcywgMCwgc2l6ZW9mKG9wZW5kYXRhLVx1MDAzZW9fcmVzKSk7XG4tLVxuZnMvbmZzL25mczRwcm9jLmM9MjI2MT1zdGF0aWMgaW50IG5mczRfZG9fb3Blbl9yZWNsYWltKHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgsIHN0cnVjdCBuZnM0X3N0YXRlICpzdGF0ZSlcbi0tXG5mcy9uZnMvbmZzNHByb2MuYy0yMjY4LVx0XHR0cmFjZV9uZnM0X29wZW5fcmVjbGFpbShjdHgsIDAsIGVycik7XG5mcy9uZnMvbmZzNHByb2MuYzoyMjY5Olx0XHRpZiAobmZzNF9jbGVhcl9jYXBfYXRvbWljX29wZW5fdjEoc2VydmVyLCBlcnIsIFx1MDAyNmV4Y2VwdGlvbikpXG5mcy9uZnMvbmZzNHByb2MuYy0yMjcwLVx0XHRcdGNvbnRpbnVlO1xuLS1cbmZzL25mcy9uZnM0cHJvYy5jPTI3ODY9c3RhdGljIGludCBuZnM0X2RvX29wZW5fZXhwaXJlZChzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4LCBzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUpXG4tLVxuZnMvbmZzL25mczRwcm9jLmMtMjc5NC1cdFx0dHJhY2VfbmZzNF9vcGVuX2V4cGlyZWQoY3R4LCAwLCBlcnIpO1xuZnMvbmZzL25mczRwcm9jLmM6Mjc5NTpcdFx0aWYgKG5mczRfY2xlYXJfY2FwX2F0b21pY19vcGVuX3YxKHNlcnZlciwgZXJyLCBcdTAwMjZleGNlcHRpb24pKVxuZnMvbmZzL25mczRwcm9jLmMtMjc5Ni1cdFx0XHRjb250aW51ZTtcbi0tXG5mcy9uZnMvbmZzNHByb2MuYz0zMjM0PXN0YXRpYyBzdHJ1Y3QgbmZzNF9zdGF0ZSAqbmZzNF9kb19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL25mcy9uZnM0cHJvYy5jLTMyOTktXHRcdH1cbmZzL25mcy9uZnM0cHJvYy5jOjMzMDA6XHRcdGlmIChuZnM0X2NsZWFyX2NhcF9hdG9taWNfb3Blbl92MShzZXJ2ZXIsIHN0YXR1cywgXHUwMDI2ZXhjZXB0aW9uKSlcbmZzL25mcy9uZnM0cHJvYy5jLTMzMDEtXHRcdFx0Y29udGludWU7XG4tLVxuZnMvbmZzL25mczRwcm9jLmM9MzgyNj1zdGF0aWMgc3RydWN0IGlub2RlICpcbmZzL25mcy9uZnM0cHJvYy5jOjM4Mjc6bmZzNF9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCxcbmZzL25mcy9uZnM0cHJvYy5jLTM4MjgtXHRcdGludCBvcGVuX2ZsYWdzLCBzdHJ1Y3QgaWF0dHIgKmF0dHIsIGludCAqb3BlbmVkKVxuLS1cbmZzL25mcy9uZnM0cHJvYy5jPTEwNjM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBuZnM0X2Rpcl9pbm9kZV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL25mcy9uZnM0cHJvYy5jLTEwNjM3LVx0Lmxvb2t1cFx0XHQ9IG5mc19sb29rdXAsXG5mcy9uZnMvbmZzNHByb2MuYzoxMDYzODpcdC5hdG9taWNfb3Blblx0PSBuZnNfYXRvbWljX29wZW4sXG5mcy9uZnMvbmZzNHByb2MuYy0xMDYzOS1cdC5saW5rXHRcdD0gbmZzX2xpbmssXG4tLVxuZnMvbmZzL25mczRwcm9jLmM9MTA2ODQ9Y29uc3Qgc3RydWN0IG5mc19ycGNfb3BzIG5mc192NF9jbGllbnRvcHMgPSB7XG4tLVxuZnMvbmZzL25mczRwcm9jLmMtMTA3MjgtXHQuY2xvc2VfY29udGV4dCAgPSBuZnM0X2Nsb3NlX2NvbnRleHQsXG5mcy9uZnMvbmZzNHByb2MuYzoxMDcyOTpcdC5vcGVuX2NvbnRleHRcdD0gbmZzNF9hdG9taWNfb3BlbixcbmZzL25mcy9uZnM0cHJvYy5jLTEwNzMwLVx0LmhhdmVfZGVsZWdhdGlvbiA9IG5mczRfaGF2ZV9kZWxlZ2F0aW9uLFxuLS1cbmZzL25mcy9uZnN0cmFjZS5oPTUxND1ERUZJTkVfTkZTX0xPT0tVUF9FVkVOVF9ET05FKG5mc19yZWFkZGlyX2xvb2t1cF9yZXZhbGlkYXRlKTtcbmZzL25mcy9uZnN0cmFjZS5oLTUxNS1cbmZzL25mcy9uZnN0cmFjZS5oOjUxNjpUUkFDRV9FVkVOVChuZnNfYXRvbWljX29wZW5fZW50ZXIsXG5mcy9uZnMvbmZzdHJhY2UuaC01MTctXHRcdFRQX1BST1RPKFxuLS1cbmZzL25mcy9uZnN0cmFjZS5oLTU1MS1cbmZzL25mcy9uZnN0cmFjZS5oOjU1MjpUUkFDRV9FVkVOVChuZnNfYXRvbWljX29wZW5fZXhpdCxcbmZzL25mcy9uZnN0cmFjZS5oLTU1My1cdFx0VFBfUFJPVE8oXG4tLVxuZnMvbmZzL3Byb2MuYz03MDg9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG5mc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9uZnMvcHJvYy5jLTcxMC1cdC5sb29rdXBcdFx0PSBuZnNfbG9va3VwLFxuZnMvbmZzL3Byb2MuYzo3MTE6XHQuYXRvbWljX29wZW5cdD0gbmZzX2F0b21pY19vcGVuX3YyMyxcbmZzL25mcy9wcm9jLmMtNzEyLVx0LmxpbmtcdFx0PSBuZnNfbGluayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTIwMwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UmIzM5O3ZlIGRlc2NyaWJlZDoKCioqQ29uc2lkZXJpbmcgQXRvbWljIE9wZW5zIGluIE5ldHdvcmsgRmlsZXN5c3RlbXMqKgoKSG1tLCBzbyBpdCBzZWVtcyBgbmZzYCBhY3R1YWxseSBwcm92aWRlcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBgYXRvbWljX29wZW5gLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgZ29vZCB0byBrbm93LiBCdXQsIHdoYXQgYWJvdXQgdGhlIHZpcnR1YWxib3ggc2hhcmVkIGZvbGRlciBmaWxlc3lzdGVtLCBgdmJveHNmYD8gSSB3b25kZXIgaWYgaXQgYWxzbyBwcm92aWRlcyBzdWNoIGEgZnVuY3Rpb25hbGl0eT8gVGhlIGltcGxpY2F0aW9ucyBvZiBoYXZpbmcgYXRvbWljIG9wZW4gb3BlcmF0aW9ucywgb3Igbm90LCBhcmUgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGZpbGUgc3lzdGVtIGNvbnNpc3RlbmN5IGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIHZhcmlvdXMgYXBwbGljYXRpb25zLCBlc3BlY2lhbGx5IGluIGEgdmlydHVhbGl6ZWQgb3IgbmV0d29ya2VkIGNvbnRleHQuIFRoaXMgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCBhcyBpdHMgaW1wbGVtZW50YXRpb24gb3IgbGFjayB0aGVyZW9mIGNhbiBjZXJ0YWlubHkgaW1wYWN0IHRoZSBzdGFiaWxpdHkgb2YgYXBwbGljYXRpb25zIHJlbHlpbmcgb24gdGhhdCBwYXJ0aWN1bGFyIEZTLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0b21pY19vcGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvdmJveHNmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy92Ym94c2YvZGlyLmM9MzA2PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp2Ym94c2ZfZGlyX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL3Zib3hzZi9kaXIuYy0zMTItXG5mcy92Ym94c2YvZGlyLmM6MzEzOnN0YXRpYyBpbnQgdmJveHNmX2Rpcl9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuZnMvdmJveHNmL2Rpci5jLTMxNC1cdFx0XHRcdCAgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBmbGFncywgdW1vZGVfdCBtb2RlKVxuLS1cbmZzL3Zib3hzZi9kaXIuYz00Njk9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdmJveHNmX2Rpcl9pb3BzID0ge1xuLS1cbmZzL3Zib3hzZi9kaXIuYy00NzItXHQubWtkaXIgICA9IHZib3hzZl9kaXJfbWtkaXIsXG5mcy92Ym94c2YvZGlyLmM6NDczOlx0LmF0b21pY19vcGVuID0gdmJveHNmX2Rpcl9hdG9taWNfb3BlbixcbmZzL3Zib3hzZi9kaXIuYy00NzQtXHQucm1kaXIgICA9IHZib3hzZl9kaXJfdW5saW5rLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NjU0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBBdG9taWMgT3BlbiBJbXBsZW1lbnRhdGlvbnMgaW4gTmV0d29yayBGaWxlc3lzdGVtcyoqCgpIbW0sIHNvIGB2Ym94c2ZgIGlzIGFjdHVhbGx5IGltcGxlbWVudGluZyBgYXRvbWljX29wZW5gIG5vdywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIGdvb2QgdG8gc2VlIHRoaXMgZnVuY3Rpb25hbGl0eSBiZWluZyBhZGRyZXNzZWQsIGFuZCBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIG9mIGNvdXJzZS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBob3cgZG9lcyB0aGlzIGNvbXBhcmUgdG8gb3RoZXIgdmlydHVhbCBmaWxlc3lzdGVtIHR5cGVzPyBJcyB0aGUgaW1wbGVtZW50YXRpb24gcm9idXN0IGFuZCBwZXJmb3JtYW50PwoKQnV0IHdoYXQgYWJvdXQgYGNpZnNgPyAqVGhhdCYjMzk7cyogdGhlIGJpZyBvbmUuIEkgd29uZGVyIGlmIHRoZSBgY2lmc2AgZmlsZXN5c3RlbSBoYXMgYWRkcmVzc2VkIHRoaXM/IFRoaXMgaXMgY3JpdGljYWwgZm9yIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5IGR1cmluZyB3cml0ZXMgaW4gbmV0d29ya2VkIGVudmlyb25tZW50cy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgY2lmc2AgY29kZSB0byBzZWUgaWYgdGhleSBhcmUgZG9pbmcgaXQsIGFuZCBhbHNvIGZpZ3VyZSBvdXQgaG93IHdlbGwgYGNpZnNgIGRlYWxzIHdpdGggdmFyaW91cyBmaWxlIHN5c3RlbSBvcGVyYXRpb25zIGluIGEgbWFubmVyIHRoYXQmIzM5O3MgdHJhbnNhY3Rpb25hbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTg6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRvbWljX29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50L2NpZnNmcy5jPTEyMjg9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2lmc19kaXJfaW5vZGVfb3BzID0ge1xuZnMvc21iL2NsaWVudC9jaWZzZnMuYy0xMjI5LVx0LmNyZWF0ZSA9IGNpZnNfY3JlYXRlLFxuZnMvc21iL2NsaWVudC9jaWZzZnMuYzoxMjMwOlx0LmF0b21pY19vcGVuID0gY2lmc19hdG9taWNfb3BlbixcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmMtMTIzMS1cdC50bXBmaWxlID0gY2lmc190bXBmaWxlLFxuLS1cbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmg9NTY9aW50IGNpZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmgtNTctXHRcdHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LCB1bW9kZV90IG1vZGUpO1xuZnMvc21iL2NsaWVudC9jaWZzZnMuaDo1ODppbnQgY2lmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGlyZW50cnksXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5oLTU5LVx0XHQgICAgIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgb2ZsYWdzLCB1bW9kZV90IG1vZGUpO1xuLS1cbmZzL3NtYi9jbGllbnQvZGlyLmM9NDg5PXN0YXRpYyBpbnQgY2lmc19kb19jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LFxuLS1cbmZzL3NtYi9jbGllbnQvZGlyLmMtNTE5LSAqL1xuZnMvc21iL2NsaWVudC9kaXIuYzo1MjA6aW50IGNpZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LFxuZnMvc21iL2NsaWVudC9kaXIuYy01MjEtXHRcdCAgICAgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBvZmxhZ3MsIHVtb2RlX3QgbW9kZSlcbi0tXG5mcy9zbWIvY2xpZW50L2Rpci5jLTU0Ni1cdCAqIHRvIGJlIGEgZGlyLiBGb3IgZmlsZSBvcGVucywgd2Ugd2FpdCB0byBjYWxsIHBvc2l4IG9wZW4gdGlsbFxuZnMvc21iL2NsaWVudC9kaXIuYzo1NDc6XHQgKiBjaWZzX29wZW4uICBJdCBjb3VsZCBiZSBhZGRlZCB0byBhdG9taWNfb3BlbiBpbiB0aGUgZnV0dXJlIGJ1dCB0aGVcbmZzL3NtYi9jbGllbnQvZGlyLmMtNTQ4LVx0ICogcGVyZm9ybWFuY2UgdHJhZGVvZmYgb2YgdGhlIGV4dHJhIG5ldHdvcmsgcmVxdWVzdCB3aGVuIEVJU0RJUiBvclxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQxMQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipGaWxlIFN5c3RlbSBJbnRlcm5hbHM6IEF0b21pYyBPcGVucyBhbmQgdGhlIDlQIFByb3RvY29sKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgZGlmZmVyZW50IGZpbGUgc3lzdGVtcyBoYW5kbGUgYXRvbWljIG9wZW4gb3BlcmF0aW9ucy4gSSBrbm93IGBjaWZzYCBhY3R1YWxseSBoYXMgYSBwcmV0dHkgZ29vZCBpbXBsZW1lbnRhdGlvbiBvZiBgYXRvbWljX29wZW5gLiBCdXQgdGhhdCBnZXRzIG1lIHRoaW5raW5nLi4uIHdoYXQgYWJvdXQgYDlwYD8gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIGlmIGl0cyBhcmNoaXRlY3R1cmUgbmF0dXJhbGx5IGxlbmRzIGl0c2VsZiB0byBhdG9taWMgb3BlbnMsIG9yIGlmIGl0IHJlcXVpcmVzIGEgbW9yZSBkZWxpYmVyYXRlIGFwcHJvYWNoLiBJIHNob3VsZCBjaGVjayB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgaW1wbGVtZW50YXRpb25zIGZvciBgOXBgIHRvIHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgc3RhdGUgYW5kIHNlZSBpZiBpdCBjYW4gYmUgZWFzaWx5IGltcHJvdmVkLiBUaGlzIHdpbGwgZGV0ZXJtaW5lIGhvdyBpdCBmdW5jdGlvbnMgaW4gaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTg6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRvbWljX29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy85cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvOXAvdmZzX2lub2RlLmM9NTc5PXY5ZnNfY3JlYXRlKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzLzlwL3Zmc19pbm9kZS5jLTY0OC0gKlxuZnMvOXAvdmZzX2lub2RlLmM6NjQ5OiAqIG9wZW4oLi4sIE9fQ1JFQVQpIGlzIGhhbmRsZWQgaW4gdjlmc192ZnNfYXRvbWljX29wZW4oKS4gIFRoaXMgaXMgb25seSBjYWxsZWRcbmZzLzlwL3Zmc19pbm9kZS5jLTY1MC0gKiBmb3IgbWtub2QoMikuXG4tLVxuZnMvOXAvdmZzX2lub2RlLmM9NzY3PXN0YXRpYyBpbnRcbmZzLzlwL3Zmc19pbm9kZS5jOjc2ODp2OWZzX3Zmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuZnMvOXAvdmZzX2lub2RlLmMtNzY5LVx0XHQgICAgIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSlcbi0tXG5mcy85cC92ZnNfaW5vZGUuYz0xMzY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB2OWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zX2RvdHUgPSB7XG4tLVxuZnMvOXAvdmZzX2lub2RlLmMtMTM2Ny1cdC5sb29rdXAgPSB2OWZzX3Zmc19sb29rdXAsXG5mcy85cC92ZnNfaW5vZGUuYzoxMzY4Olx0LmF0b21pY19vcGVuID0gdjlmc192ZnNfYXRvbWljX29wZW4sXG5mcy85cC92ZnNfaW5vZGUuYy0xMzY5LVx0LnN5bWxpbmsgPSB2OWZzX3Zmc19zeW1saW5rLFxuLS1cbmZzLzlwL3Zmc19pbm9kZS5jPTEzODA9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHY5ZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvOXAvdmZzX2lub2RlLmMtMTM4Mi1cdC5sb29rdXAgPSB2OWZzX3Zmc19sb29rdXAsXG5mcy85cC92ZnNfaW5vZGUuYzoxMzgzOlx0LmF0b21pY19vcGVuID0gdjlmc192ZnNfYXRvbWljX29wZW4sXG5mcy85cC92ZnNfaW5vZGUuYy0xMzg0LVx0LnVubGluayA9IHY5ZnNfdmZzX3VubGluayxcbi0tXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jPTIyNT1zdGF0aWMgaW50XG5mcy85cC92ZnNfaW5vZGVfZG90bC5jOjIyNjp2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jLTIyNy1cdFx0XHQgIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHVtb2RlX3Qgb21vZGUpXG4tLVxuZnMvOXAvdmZzX2lub2RlX2RvdGwuYz05NjI9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdjlmc19kaXJfaW5vZGVfb3BlcmF0aW9uc19kb3RsID0ge1xuZnMvOXAvdmZzX2lub2RlX2RvdGwuYy05NjMtXHQuY3JlYXRlID0gdjlmc192ZnNfY3JlYXRlX2RvdGwsXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jOjk2NDpcdC5hdG9taWNfb3BlbiA9IHY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGwsXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jLTk2NS1cdC5sb29rdXAgPSB2OWZzX3Zmc19sb29rdXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzc3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IEF0b21pYyBPcGVuIGFuZCBGVVNFIENvbXBhdGliaWxpdHkqKgoKQWxyaWdodCwgc28gdGhlIGA5cGAgZmlsZSBzeXN0ZW0gaW1wbGVtZW50cyBgYXRvbWljX29wZW5gLCB3aGljaCBpcyBnb29kIHRvIHNlZS4gQnV0IHRoYXQgZ290IG1lIHRoaW5raW5nLCB3aGF0JiMzOTtzIHRoZSBzdG9yeSB3aXRoIGBmdXNlYD8gSXMgdGhpcyBjYXBhYmlsaXR5IG1pcnJvcmVkIGluIGBmdXNlYCYjMzk7cyBpbXBsZW1lbnRhdGlvbiwgb3IgYXJlIHRoZXJlIHNpZ25pZmljYW50IGRpZmZlcmVuY2VzIGluIGhvdyB0aG9zZSB0d28gaGFuZGxlIHRoaXMgY3JpdGljYWwgb3BlcmF0aW9uPyBBcmUgdGhlcmUgYW55IHBlcmZvcm1hbmNlIGJlbmVmaXRzIG9uIG9uZSB2cyB0aGUgb3RoZXI/IEkgd29uZGVyIGhvdyB0aGV5IGRlYWwgd2l0aCBjb25jdXJyZW5jeSwgb3IgaWYgb25lIGlzIGluaGVyZW50bHkgYSBiZXR0ZXIgY2hvaWNlIHdoZW4gZGVhbGluZyB3aXRoIHJhY2UgY29uZGl0aW9ucy4gSSBuZWVkIHRvIGRpdmUgZGVlcGVyIG9uIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyBhdG9taWNpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0b21pY19vcGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZnVzZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZnVzZS9kaXIuYz05Mjg9c3RhdGljIGludCBmdXNlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKixcbmZzL2Z1c2UvZGlyLmMtOTI5LVx0XHQgICAgICB1bW9kZV90LCBkZXZfdCk7XG5mcy9mdXNlL2Rpci5jOjkzMDpzdGF0aWMgaW50IGZ1c2VfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmVudHJ5LFxuZnMvZnVzZS9kaXIuYy05MzEtXHRcdFx0ICAgIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBmbGFncyxcbi0tXG5mcy9mdXNlL2Rpci5jPTIzOTY9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGZ1c2VfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvZnVzZS9kaXIuYy0yNDA1LVx0LmNyZWF0ZVx0XHQ9IGZ1c2VfY3JlYXRlLFxuZnMvZnVzZS9kaXIuYzoyNDA2Olx0LmF0b21pY19vcGVuXHQ9IGZ1c2VfYXRvbWljX29wZW4sXG5mcy9mdXNlL2Rpci5jLTI0MDctXHQudG1wZmlsZVx0PSBmdXNlX3RtcGZpbGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODA3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgQXRvbWljIE9wZW4gSW1wbGVtZW50YXRpb25zKioKClJpZ2h0LCBzbyBgZnVzZWAgaW5jbHVkZXMgYW4gYGF0b21pY19vcGVuYCBpbXBsZW1lbnRhdGlvbi4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3csIGFuZCBpdCYjMzk7cyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB3aGVuIGNvbXBhcmluZyBkaWZmZXJlbnQgZmlsZSBzeXN0ZW1zLiBUaGUgaW1wbGljYXRpb25zIGhlcmUgYXJlIHNpZ25pZmljYW50IGZvciBkYXRhIGNvbnNpc3RlbmN5IGFuZCBob3cgd2UgaGFuZGxlIGNvbmN1cnJlbnQgYWNjZXNzLiBOb3csIHRoZSBrZXkgcXVlc3Rpb24gaXMsIHdoYXQgYWJvdXQgYG9yYW5nZWZzYD8gRG9lcyBpdCBvZmZlciBhIHNpbWlsYXIgbWVjaGFuaXNtIGZvciBhdG9taWMgb3BlbnM/IEkgbmVlZCB0byBkaWcgaW50byBpdHMgYXJjaGl0ZWN0dXJlIGFuZCBkb2N1bWVudGF0aW9uIHRvIHVuZGVyc3RhbmQgaG93IGl0IGhhbmRsZXMgZmlsZSBjcmVhdGlvbiBhbmQgbW9kaWZpY2F0aW9uIHdpdGggcmVzcGVjdCB0byBhdG9taWNpdHkuIFRoYXQmIzM5O3MgYSBjcnVjaWFsIGFzcGVjdCBmb3IgaXRzIG92ZXJhbGwgcmVsaWFiaWxpdHkgYW5kIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcywgZXNwZWNpYWxseSBpbiBhIGRpc3RyaWJ1dGVkIGVudmlyb25tZW50LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlYmFzZSBhbmQgdGhlIGRvY3VtZW50YXRpb24gdG8gY2hlY2sgaWYgdGhpcyBpcyBzdXBwb3J0ZWQsIGFuZCBpZiBzbywgaG93IGl0IGlzIGltcGxlbWVudGVkLiBJcyBpdCBsZXZlcmFnaW5nIGtlcm5lbCBzdXBwb3J0LCB1c2Vyc3BhY2UgdHJpY2tzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIG51YW5jZXMgb2YgaXRzIGFwcHJvYWNoIHdpbGwgaW5mbHVlbmNlIG15IGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRvbWljX29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vcmFuZ2Vmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjA3NQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGlnZ2luZyBpbnRvIE9yYW5nZUZTJiMzOTtzIEF0b21pY2l0eSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBgb3JhbmdlZnNgIGhhbmRsZXMgb3BlbmluZyBmaWxlcyBhdG9taWNhbGx5LCBhbmQgSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCAqZG9lc24mIzM5O3QqIGhhdmUgYW4gYGF0b21pY19vcGVuYCBjYWxsIGltcGxlbWVudGVkIGRpcmVjdGx5LiBUaGF0JiMzOTtzIGEgY29tbW9uIGNoYXJhY3RlcmlzdGljIGZvciBkaXN0cmlidXRlZCBmaWxlIHN5c3RlbXMsIGVzcGVjaWFsbHkgd2hlbiBjb25zaWRlcmluZyBjb25zaXN0ZW5jeSBtb2RlbHMgYW5kIHBlcmZvcm1hbmNlIHRyYWRlb2Zmcy4gTm93LCByYXRoZXIgdGhhbiBqdXN0IGFzc3VtZSwgSSBuZWVkIHRvIHZlcmlmeSBob3cgaXQgYWN0dWFsbHkgaGFuZGxlcyB0aGUgY3JlYXRlIG9wZXJhdGlvbi4gTGV0IG1lIHNoaWZ0IG15IGZvY3VzLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGxvb2sgaW50byB0aGUgYG9yYW5nZWZzX2NyZWF0ZWAgZnVuY3Rpb24uIEkmIzM5O2xsIGJldCB0aGF0JiMzOTtzIHdoZXJlIHRoZSBhdG9taWMgYXNwZWN0cywgb3IgbGFjayB0aGVyZW9mLCBhcmUgaGFuZGxlZC4gVGhpcyBzaG91bGQgb2ZmZXIgY2x1ZXMgdG8gdW5kZXJzdGFuZCBob3cgaXQgZGVhbHMgd2l0aCB0aGUgcGFydGlhbCB3cml0ZXMgYW5kIHBvdGVudGlhbCBjb25mbGljdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29yYW5nZWZzX2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL29yYW5nZWZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9vcmFuZ2Vmcy9kb3duY2FsbC5oPTIzPXN0cnVjdCBvcmFuZ2Vmc19sb29rdXBfcmVzcG9uc2Uge1xuLS1cbmZzL29yYW5nZWZzL2Rvd25jYWxsLmgtMjYtXG5mcy9vcmFuZ2Vmcy9kb3duY2FsbC5oOjI3OnN0cnVjdCBvcmFuZ2Vmc19jcmVhdGVfcmVzcG9uc2Uge1xuZnMvb3JhbmdlZnMvZG93bmNhbGwuaC0yOC1cdHN0cnVjdCBvcmFuZ2Vmc19vYmplY3Rfa3JlZiByZWZuO1xuLS1cbmZzL29yYW5nZWZzL2Rvd25jYWxsLmg9MTAwPXN0cnVjdCBvcmFuZ2Vmc19kb3duY2FsbF9zIHtcbi0tXG5mcy9vcmFuZ2Vmcy9kb3duY2FsbC5oLTEwOS1cdFx0c3RydWN0IG9yYW5nZWZzX2xvb2t1cF9yZXNwb25zZSBsb29rdXA7XG5mcy9vcmFuZ2Vmcy9kb3duY2FsbC5oOjExMDpcdFx0c3RydWN0IG9yYW5nZWZzX2NyZWF0ZV9yZXNwb25zZSBjcmVhdGU7XG5mcy9vcmFuZ2Vmcy9kb3duY2FsbC5oLTExMS1cdFx0c3RydWN0IG9yYW5nZWZzX3N5bWxpbmtfcmVzcG9uc2Ugc3ltO1xuLS1cbmZzL29yYW5nZWZzL25hbWVpLmMtMTctICovXG5mcy9vcmFuZ2Vmcy9uYW1laS5jOjE4OnN0YXRpYyBpbnQgb3JhbmdlZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuZnMvb3JhbmdlZnMvbmFtZWkuYy0xOS1cdFx0XHRzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9vcmFuZ2Vmcy9uYW1laS5jPTQxNj1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBvcmFuZ2Vmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9vcmFuZ2Vmcy9uYW1laS5jLTQxOS1cdC5zZXRfYWNsID0gb3JhbmdlZnNfc2V0X2FjbCxcbmZzL29yYW5nZWZzL25hbWVpLmM6NDIwOlx0LmNyZWF0ZSA9IG9yYW5nZWZzX2NyZWF0ZSxcbmZzL29yYW5nZWZzL25hbWVpLmMtNDIxLVx0LnVubGluayA9IG9yYW5nZWZzX3VubGluayxcbi0tXG5mcy9vcmFuZ2Vmcy91cGNhbGwuaD0yNz1zdHJ1Y3Qgb3JhbmdlZnNfbG9va3VwX3JlcXVlc3RfcyB7XG4tLVxuZnMvb3JhbmdlZnMvdXBjYWxsLmgtMzMtXG5mcy9vcmFuZ2Vmcy91cGNhbGwuaDozNDpzdHJ1Y3Qgb3JhbmdlZnNfY3JlYXRlX3JlcXVlc3RfcyB7XG5mcy9vcmFuZ2Vmcy91cGNhbGwuaC0zNS1cdHN0cnVjdCBvcmFuZ2Vmc19vYmplY3Rfa3JlZiBwYXJlbnRfcmVmbjtcbi0tXG5mcy9vcmFuZ2Vmcy91cGNhbGwuaD0yMjA9c3RydWN0IG9yYW5nZWZzX3VwY2FsbF9zIHtcbi0tXG5mcy9vcmFuZ2Vmcy91cGNhbGwuaC0yMzItXHRcdHN0cnVjdCBvcmFuZ2Vmc19sb29rdXBfcmVxdWVzdF9zIGxvb2t1cDtcbmZzL29yYW5nZWZzL3VwY2FsbC5oOjIzMzpcdFx0c3RydWN0IG9yYW5nZWZzX2NyZWF0ZV9yZXF1ZXN0X3MgY3JlYXRlO1xuZnMvb3JhbmdlZnMvdXBjYWxsLmgtMjM0LVx0XHRzdHJ1Y3Qgb3JhbmdlZnNfc3ltbGlua19yZXF1ZXN0X3Mgc3ltO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjg4MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEV4YW1pbmF0aW9uIG9mIGBvcmFuZ2Vmc19jcmVhdGVgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgb3JhbmdlZnNfY3JlYXRlYCBmdW5jdGlvbi4gSSYjMzk7bSBpbW1lZGlhdGVseSBjdXJpb3VzIGFib3V0IGl0cyByb2xlIHdpdGhpbiB0aGUgT3JhbmdlRlMgZmlsZSBzeXN0ZW0uIE15IGluaXRpYWwgdGhvdWdodHMgYXJlOiB3aGF0JiMzOTtzIHRoZSB0eXBpY2FsIGltcGxlbWVudGF0aW9uPyBIb3cgZG9lcyBpdCBoYW5kbGUgaW5vZGUgYWxsb2NhdGlvbiBhbmQgbWV0YWRhdGEgdXBkYXRlcz8gSXMgaXQgYSBzaW5nbGUtZnVuY3Rpb24gY2FsbCBvciBhIHdyYXBwZXIgZm9yIHNldmVyYWwgYWN0aW9ucz8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHVuZGVybHlpbmcgc3RvcmFnZSBhbmQgbmV0d29yayBsYXllcnMg4oCTIHByb2JhYmx5IHNvbWUgUlBDIGNhbGxzIHRvIG1ldGFkYXRhIHNlcnZlcnMsIHBvdGVudGlhbGx5IGRhdGEgc2VydmVyIGludGVyYWN0aW9ucyBkZXBlbmRpbmcgb24gdGhlIGZpbGUgc2l6ZSwgYW5kIGRlZmluaXRlbHkgc29tZSBsb2NraW5nIG1lY2hhbmlzbXMgaW52b2x2ZWQuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgYW55IG9wdGltaXphdGlvbnMg4oCTIGRlZmVycmVkIHVwZGF0ZXMsIGNhY2hpbmcgc3RyYXRlZ2llcywgb3IgcGVyaGFwcyBhIHR3by1waGFzZSBjb21taXQgYXBwcm9hY2ggZm9yIGF0b21pY2l0eS4gSeKAmW0gdGhpbmtpbmcgZXJyb3IgaGFuZGxpbmcgYW5kIHJlY292ZXJ5IGFyZSBwYXJhbW91bnQ7IGl0JiMzOTtzIGEgY3JpdGljYWwgcG9pbnQgaW4gZmlsZSBzeXN0ZW0gb3BlcmF0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgc2lnbnMgb2YgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIHJhY2UgY29uZGl0aW9ucy4gVGhpcyBzaG91bGQgYmUgaW50ZXJlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvb3JhbmdlZnMvbmFtZWkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMTg6XHRzdGF0aWMgaW50IG9yYW5nZWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiAgMTk6XHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmRpcixcbiAgMjA6XHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gIDIxOlx0XHRcdFx0dW1vZGVfdCBtb2RlKVxuICAyMjpcdHtcbiAgMjM6XHRcdHN0cnVjdCBvcmFuZ2Vmc19pbm9kZV9zICpwYXJlbnQgPSBPUkFOR0VGU19JKGRpcik7XG4gIDI0Olx0XHRzdHJ1Y3Qgb3JhbmdlZnNfa2VybmVsX29wX3MgKm5ld19vcDtcbiAgMjU6XHRcdHN0cnVjdCBvcmFuZ2Vmc19vYmplY3Rfa3JlZiByZWY7XG4gIDI2Olx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuICAyNzpcdFx0c3RydWN0IGlhdHRyIGlhdHRyO1xuICAyODpcdFx0aW50IHJldDtcbiAgMjk6XHRcbiAgMzA6XHRcdGdvc3NpcF9kZWJ1ZyhHT1NTSVBfTkFNRV9ERUJVRywgXCYjMzQ7JXM6ICVwZFxcblwmIzM0OyxcbiAgMzE6XHRcdFx0ICAgICBfX2Z1bmNfXyxcbiAgMzI6XHRcdFx0ICAgICBkZW50cnkpO1xuICAzMzpcdFxuICAzNDpcdFx0bmV3X29wID0gb3BfYWxsb2MoT1JBTkdFRlNfVkZTX09QX0NSRUFURSk7XG4gIDM1Olx0XHRpZiAoIW5ld19vcClcbiAgMzY6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gIDM3Olx0XG4gIDM4Olx0XHRuZXdfb3AtXHUwMDNldXBjYWxsLnJlcS5jcmVhdGUucGFyZW50X3JlZm4gPSBwYXJlbnQtXHUwMDNlcmVmbjtcbiAgMzk6XHRcbiAgNDA6XHRcdGZpbGxfZGVmYXVsdF9zeXNfYXR0cnMobmV3X29wLVx1MDAzZXVwY2FsbC5yZXEuY3JlYXRlLmF0dHJpYnV0ZXMsIG1vZGUpO1xuICA0MTpcdFxuICA0MjpcdFx0c3Ryc2NweShuZXdfb3AtXHUwMDNldXBjYWxsLnJlcS5jcmVhdGUuZF9uYW1lLCBkZW50cnktXHUwMDNlZF9uYW1lLm5hbWUpO1xuICA0MzpcdFxuICA0NDpcdFx0cmV0ID0gc2VydmljZV9vcGVyYXRpb24obmV3X29wLCBfX2Z1bmNfXywgZ2V0X2ludGVycnVwdGlibGVfZmxhZyhkaXIpKTtcbiAgNDU6XHRcbiAgNDY6XHRcdGdvc3NpcF9kZWJ1ZyhHT1NTSVBfTkFNRV9ERUJVRyxcbiAgNDc6XHRcdFx0ICAgICBcJiMzNDslczogJXBkOiBoYW5kbGU6JXBVOiBmc2lkOiVkOiBuZXdfb3A6JXA6IHJldDolZDpcXG5cJiMzNDssXG4gIDQ4Olx0XHRcdCAgICAgX19mdW5jX18sXG4gIDQ5Olx0XHRcdCAgICAgZGVudHJ5LFxuICA1MDpcdFx0XHQgICAgIFx1MDAyNm5ld19vcC1cdTAwM2Vkb3duY2FsbC5yZXNwLmNyZWF0ZS5yZWZuLmtoYW5kbGUsXG4gIDUxOlx0XHRcdCAgICAgbmV3X29wLVx1MDAzZWRvd25jYWxsLnJlc3AuY3JlYXRlLnJlZm4uZnNfaWQsXG4gIDUyOlx0XHRcdCAgICAgbmV3X29wLFxuICA1MzpcdFx0XHQgICAgIHJldCk7XG4gIDU0Olx0XG4gIDU1Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuICA1NjpcdFx0XHRnb3RvIG91dDtcbiAgNTc6XHRcbiAgNTg6XHRcdHJlZiA9IG5ld19vcC1cdTAwM2Vkb3duY2FsbC5yZXNwLmNyZWF0ZS5yZWZuO1xuICA1OTpcdFxuICA2MDpcdFx0aW5vZGUgPSBvcmFuZ2Vmc19uZXdfaW5vZGUoZGlyLVx1MDAzZWlfc2IsIGRpciwgU19JRlJFRyB8IG1vZGUsIDAsIFx1MDAyNnJlZik7XG4gIDYxOlx0XHRpZiAoSVNfRVJSKGlub2RlKSkge1xuICA2MjpcdFx0XHRnb3NzaXBfZXJyKFwmIzM0OyVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgaW5vZGUgZm9yIGZpbGUgOiVwZDpcXG5cJiMzNDssXG4gIDYzOlx0XHRcdFx0ICAgX19mdW5jX18sXG4gIDY0Olx0XHRcdFx0ICAgZGVudHJ5KTtcbiAgNjU6XHRcdFx0cmV0ID0gUFRSX0VSUihpbm9kZSk7XG4gIDY2Olx0XHRcdGdvdG8gb3V0O1xuICA2NzpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzg5OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgb3JhbmdlZnNfY3JlYXRlYCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgSSYjMzk7bSBpbW1lZGlhdGVseSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjaGFuZ2VzIHRvIGBvcmFuZ2Vmc19jcmVhdGVgLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBJIG5lZWQgdG8gYW5zd2VyIGlzIHdoZXRoZXIgdGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uIGFjdHVhbGx5ICp1dGlsaXplZCogdGhlIGBib29sIGV4Y2x1c2l2ZWAgYXJndW1lbnQuICBUaGF0IGFyZ3VtZW50IGlzIGtleSwgYmVjYXVzZSBpdCBzdWdnZXN0cyB0aGUgZnVuY3Rpb24gbWlnaHQgaGF2ZSBiZWVuIGFibGUgdG8gY3JlYXRlIGZpbGVzIHdpdGggc3BlY2lmaWMgZXhjbHVzaXZpdHkgZ3VhcmFudGVlcywgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlIG9sZGVyIHZlcnNpb24gdXNlZCB0aGlzIGZlYXR1cmUgb3Igbm90LiBJZiBpdCBkaWRuJiMzOTt0LCB0aGUgcGF0Y2ggbWlnaHQgaW50cm9kdWNlIGEgcGVyZm9ybWFuY2UgdHJhZGUtb2ZmIHRvIGFkZCBhIGZlYXR1cmUgd2hpY2ggd2FzIG5vdCBwcmV2aW91c2x5IHByZXNlbnQuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgb2xkIGNvZGUgYW5kIHZlcmlmeSBpdHMgYmVoYXZpb3VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4Y2x1c2l2ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL29yYW5nZWZzL25hbWVpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDEyNQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgT0NGUzIgQVBJKioKCkhtbSwgbm8sIEkgZG9uJiMzOTt0IHRoaW5rIHRoYXQgY29kZSBwYXRoIHV0aWxpemVkIHRoZSBleHBlY3RlZCBmdW5jdGlvbiBmb3IgZmlsZSBjcmVhdGlvbi4gSSBuZWVkIHRvIHJlLWV4YW1pbmUgdGhlIGNvbnRleHQuIFRoZSBwcm9ibGVtIGxpZXMgZWxzZXdoZXJlLgoKT2theSwgbGV0JiMzOTtzIHN0ZXAgYmFjaywgYW5kIHF1aWNrbHkgcmV0cmFjZSBteSBtZW50YWwgc3RlcHMuIFRoZSBtb3JlIGZ1bmRhbWVudGFsIHF1ZXN0aW9uIGlzLCB3aGF0IGFib3V0IGBvY2ZzMl9jcmVhdGVgPyBJdCYjMzk7cyB0aGUgc3RhbmRhcmQgT0NGUzIgZmlsZSBjcmVhdGlvbiByb3V0aW5lLiBJIG5lZWQgdG8gY29uc2lkZXIsIGZyb20gZmlyc3QgcHJpbmNpcGxlcywgd2hlcmUgdGhhdCByb3V0aW5lIHdvdWxkIGhhdmUgYmVlbiBjYWxsZWQgKG9yIG5vdCBjYWxsZWQhKSB3aXRoaW4gdGhlIGtlcm5lbCBtb2R1bGUuIFdoYXQgYXJlIHRoZSBjYWxsaW5nIGNvbnZlbnRpb25zPyBJcyB0aGlzIHJlbGF0ZWQgdG8gaW5vZGUgY3JlYXRpb24sIGRpcmVjdG9yeSBlbnRyeSBjcmVhdGlvbiwgb3IgcGVyaGFwcyBzb21lIHNwZWNpZmljIE9DRlMyLXNwZWNpZmljIG1ldGFkYXRhIHVwZGF0ZT8gVGhlIGlzc3VlIHdpdGggbXkgcHJpb3IgYXNzdW1wdGlvbiBpcyB0aGF0IEkgY291bGQgaGF2ZSBtaXNzZWQgYSByZWxldmFudCBwYXJ0LCBwZXJoYXBzIHRoZSBsb2dpYyBhcm91bmQgdGhlIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvb2NmczIvbmFtZWkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY2NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjY3Olx0c3RhdGljIGludCBvY2ZzMl9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gNjY4Olx0XHRcdFx0c3RydWN0IGlub2RlICpkaXIsXG4gNjY5Olx0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIDY3MDpcdFx0XHRcdHVtb2RlX3QgbW9kZSlcbiA2NzE6XHR7XG4gNjcyOlx0XHRpbnQgcmV0O1xuIDY3MzpcdFxuIDY3NDpcdFx0dHJhY2Vfb2NmczJfY3JlYXRlKGRpciwgZGVudHJ5LCBkZW50cnktXHUwMDNlZF9uYW1lLmxlbiwgZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lLFxuIDY3NTpcdFx0XHRcdCAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLVx1MDAzZWlwX2Jsa25vLCBtb2RlKTtcbiA2NzY6XHRcdHJldCA9IG9jZnMyX21rbm9kKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRlJFRywgMCk7XG4gNjc3Olx0XHRpZiAocmV0KVxuIDY3ODpcdFx0XHRtbG9nX2Vycm5vKHJldCk7XG4gNjc5Olx0XG4gNjgwOlx0XHRyZXR1cm4gcmV0O1xuIDY4MTpcdH1cbiA2ODI6XHRcbiA2ODM6XHRzdGF0aWMgaW50IG9jZnMyX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiA2ODQ6XHRcdFx0ICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4gNjg1Olx0XHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiA2ODY6XHR7XG4gNjg3Olx0XHRoYW5kbGVfdCAqaGFuZGxlO1xuIDY4ODpcdFx0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUob2xkX2RlbnRyeSk7XG4gNjg5Olx0XHRzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIgPSBkX2lub2RlKG9sZF9kZW50cnktXHUwMDNlZF9wYXJlbnQpO1xuIDY5MDpcdFx0aW50IGVycjtcbiA2OTE6XHRcdHN0cnVjdCBidWZmZXJfaGVhZCAqZmVfYmggPSBOVUxMO1xuIDY5MjpcdFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpvbGRfZGlyX2JoID0gTlVMTDtcbiA2OTM6XHRcdHN0cnVjdCBidWZmZXJfaGVhZCAqcGFyZW50X2ZlX2JoID0gTlVMTDtcbiA2OTQ6XHRcdHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlID0gTlVMTDtcbiA2OTU6XHRcdHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZGlyLVx1MDAzZWlfc2IpO1xuIDY5NjpcdFx0c3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0IGxvb2t1cCA9IHsgTlVMTCwgfTtcbiA2OTc6XHRcdHNpZ3NldF90IG9sZHNldDtcbiA2OTg6XHRcdHU2NCBvbGRfZGVfaW5vO1xuIDY5OTpcdFxuIDcwMDpcdFx0dHJhY2Vfb2NmczJfbGluaygodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLVx1MDAzZWlwX2Jsa25vLFxuIDcwMTpcdFx0XHRcdCBvbGRfZGVudHJ5LVx1MDAzZWRfbmFtZS5sZW4sIG9sZF9kZW50cnktXHUwMDNlZF9uYW1lLm5hbWUsXG4gNzAyOlx0XHRcdFx0IGRlbnRyeS1cdTAwM2VkX25hbWUubGVuLCBkZW50cnktXHUwMDNlZF9uYW1lLm5hbWUpO1xuIDcwMzpcdFxuIDcwNDpcdFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbiA3MDU6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiA3MDY6XHRcbiA3MDc6XHRcdGVyciA9IGRxdW90X2luaXRpYWxpemUoZGlyKTtcbiA3MDg6XHRcdGlmIChlcnIpIHtcbiA3MDk6XHRcdFx0bWxvZ19lcnJubyhlcnIpO1xuIDcxMDpcdFx0XHRyZXR1cm4gZXJyO1xuIDcxMTpcdFx0fVxuIDcxMjpcdFxuIDcxMzpcdFx0ZXJyID0gb2NmczJfZG91YmxlX2xvY2sob3NiLCBcdTAwMjZvbGRfZGlyX2JoLCBvbGRfZGlyLFxuIDcxNDpcdFx0XHRcdFx1MDAyNnBhcmVudF9mZV9iaCwgZGlyLCAwKTtcbiA3MTU6XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbiA3MTY6XHRcdFx0aWYgKGVyciAhPSAtRU5PRU5UKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTIyMAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDc2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlbW92YWwgb2YgdGhlIGBleGNsYCBBcmd1bWVudCBmcm9tIGBjcmVhdGVgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgcmVtb3ZlcyB0aGUgYGV4Y2xgIGFyZ3VtZW50IGZyb20gdGhlIGBjcmVhdGVgIGlub2RlIG9wZXJhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGBvY2ZzMl9jcmVhdGVgIGRpZG4mIzM5O3QgdXNlIGBleGNsYCBlaXRoZXIsIHNvIEkgbmVlZCB0byBnbyBkZWVwZXIuIEkmIzM5O20gY2hlY2tpbmcgYGZzL25hbWVpLmNgIGFnYWluLCBhbmQgc3BlY2lmaWNhbGx5IGBsb29rdXBfb3BlbmAuIEl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGBsb29rdXBfb3BlbmAgaXMgaW52b2x2ZWQgd2hlbiBvcGVuaW5nIGEgZmlsZS4gSWYgYE9fQ1JFQVRgIGlzIHNldCwgdGhlIGNvZGUgY2FsbHMgYGF0b21pY19vcGVuYCBpZiB0aGUgZmlsZXN5c3RlbSBpbXBsZW1lbnRzIGl0LiBJZiBub3QsIGl0IGZhbGxzIGJhY2sgdG8gYGNyZWF0ZWAuCgpOb3csIGJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgY29kZSBwYXNzZWQgYG9wZW5fZmxhZyAmYW1wOyBPX0VYQ0xgIHRvIGBjcmVhdGVgLiBCdXQgbm93IGl0IGRvZXNuJiMzOTt0LiBNeSBpbW1lZGlhdGUgcXVlc3Rpb246IGlmIHRoZSBmaWxlc3lzdGVtICpkb2VzbiYjMzk7dCogaW1wbGVtZW50IGBhdG9taWNfb3BlbmAsIGRvZXMgdGhhdCBtZWFuIGl0ICpkb2VzbiYjMzk7dCogc3VwcG9ydCBleGNsdXNpdmUgY3JlYXRlPyBObywgSSBxdWlja2x5IHJlYWxpemVkIHRoYXQgYGNyZWF0ZWAgd2FzIHVzZWQgZm9yIGJvdGggZXhjbHVzaXZlIGFuZCBub24tZXhjbHVzaXZlIGNyZWF0ZSB3aGVuIGBhdG9taWNfb3BlbmAgd2FzbiYjMzk7dCBwcm92aWRlZC4KClRoZSBjb21taXQgbWVzc2FnZSBjbGFyaWZpZXM6IHRoZSBgLmNyZWF0ZWAgaW5vZGUgb3BlcmF0aW9uIG5vIGxvbmdlciByZWNlaXZlcyBgZXhjbGAuIEl0ICphbHdheXMqIGFzc3VtZXMgdGhlIGZpbGUgZG9lc24mIzM5O3QgZXhpc3QuIElmIHRoZSBmaWxlc3lzdGVtICpuZWVkcyogdG8gYmUgaW52b2x2ZWQgaW4gYSBub24tZXhjbHVzaXZlIGNyZWF0ZSwgaXQgc2hvdWxkIGltcGxlbWVudCBgYXRvbWljX29wZW5gLgoKSGVyZSYjMzk7cyB0aGUgcHJvYmxlbTogaWYgYSBmaWxlc3lzdGVtICpkb2VzbiYjMzk7dCogcHJvdmlkZSBgYXRvbWljX29wZW5gLCBWRlMgaGFuZGxlcyBub24tZXhjbHVzaXZlIGNyZWF0ZSBieSBmaXJzdCBkb2luZyBhIGxvb2t1cCwgYW5kIGlmIGl0JiMzOTtzIG5vdCBmb3VuZCwgKnRoZW4qIGNhbGxpbmcgYGNyZWF0ZWAuIEJ1dCB0aGVyZSYjMzk7cyBhIHJhY2UgY29uZGl0aW9uIHRoZXJlOiBiZXR3ZWVuIHRoZSBsb29rdXAgYW5kIHRoZSBgY3JlYXRlYCBjYWxsLCBzb21lb25lIGVsc2UgY291bGQgY3JlYXRlIHRoZSBmaWxlLiBTbywgaWYgYGNyZWF0ZWAgYXNzdW1lcyB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgaXQgd2lsbCBqdXN0IGNyZWF0ZSBpdCwgYW5kIGl0IGNvdWxkIG92ZXJ3cml0ZSBhbiBleGlzdGluZyBmaWxlLiBCdXQgd2FpdCwgVkZTIGhhbmRsZXMgYEVFWElTVGAgaWYgYE9fRVhDTGAgaXMgc2V0LiBPa2F5LCBWRlMgYWxyZWFkeSBkaWQgYSBsb29rdXAgYW5kIGZvdW5kIGEgbmVnYXRpdmUgZGVudHJ5ICh0aGUgZmlsZSBkb2VzbiYjMzk7dCBleGlzdCB5ZXQpIGJlZm9yZSBgY3JlYXRlYCBpcyBjYWxsZWQuIFNvLCB0aGUgZmlsZXN5c3RlbSYjMzk7cyBgY3JlYXRlYCBvcGVyYXRpb24gKnNob3VsZCogY3JlYXRlIHRoZSBmaWxlLiBJZiBhbm90aGVyIHByb2Nlc3MgY3JlYXRlZCB0aGUgZmlsZSBjb25jdXJyZW50bHksIHRoZSBmaWxlc3lzdGVtJiMzOTtzIGBjcmVhdGVgICh3aGljaCBsaWtlbHkgZG9lcyBhbiBpbnRlcm5hbCBleGNsdXNpdmUgY3JlYXRlLCBsaWtlIGBta25vZGApIHdpbGwgcmV0dXJuIGBFRVhJU1RgLCBhbmQgdGhlbiBWRlMgd2lsbCBoYW5kbGUgdGhhdCBlcnJvci4KCk5vdyBJIG5lZWQgdG8gc2VlIGlmIGFueSBmaWxlc3lzdGVtICphY3R1YWxseSogdXNlZCB0aGUgYGV4Y2xgIGFyZ3VtZW50IGluIGBjcmVhdGVgIGJlZm9yZSB0aGlzIGNoYW5nZS4gTGV0JiMzOTtzIGxvb2sgYXQgYGdmczJgLCBgbmZzYCwgYW5kIGB2Ym94c2ZgIHdoaWNoIEkgc2F3IGhhZCBpbnRlcm5hbCBjaGFuZ2VzLiBDaGVja2luZyBgZ2ZzMl9jcmVhdGVgIGNvbmZpcm1zIG15IHN1c3BpY2lvbjoKCmBgYGMKLQlyZXR1cm4gZ2ZzMl9jcmVhdGVfaW5vZGUoZGlyLCBkZW50cnksIE5VTEwsIFNfSUZSRUcgfCBtb2RlLCAwLCBOVUxMLCAwLCBleGNsKTsKJiM0MzsJcmV0dXJuIGdmczJfY3JlYXRlX2lub2RlKGRpciwgZGVudHJ5LCBOVUxMLCBTX0lGUkVHIHwgbW9kZSwgMCwgTlVMTCwgMCwgMSk7CmBgYAoKT2theSwgYGdmczJfY3JlYXRlX2lub2RlYCAqZG9lcyogdGFrZSBgZXhjbGAgYXMgaXRzIGxhc3QgYXJndW1lbnQuIE5vdyBJIG5lZWQgdG8gY2hlY2sgd2hhdCBgZ2ZzMl9jcmVhdGVfaW5vZGVgIGRvZXMgd2l0aCB0aGUgYGV4Y2xgIGFyZ3VtZW50IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTg6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2ZzMl9jcmVhdGVfaW5vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9nZnMyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9nZnMyL2lub2RlLmM9NjY0PXN0YXRpYyBpbnQgZ2ZzMl9pbml0eGF0dHJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHN0cnVjdCB4YXR0ciAqeGF0dHJfYXJyYXksXG4tLVxuZnMvZ2ZzMi9pbm9kZS5jLTY4MC0vKipcbmZzL2dmczIvaW5vZGUuYzo2ODE6ICogZ2ZzMl9jcmVhdGVfaW5vZGUgLSBDcmVhdGUgYSBuZXcgaW5vZGVcbmZzL2dmczIvaW5vZGUuYy02ODItICogQGRpcjogVGhlIHBhcmVudCBkaXJlY3Rvcnlcbi0tXG5mcy9nZnMyL2lub2RlLmMtNjk5LVxuZnMvZ2ZzMi9pbm9kZS5jOjcwMDpzdGF0aWMgaW50IGdmczJfY3JlYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5mcy9nZnMyL2lub2RlLmMtNzAxLVx0XHRcdCAgICAgc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZnMvZ2ZzMi9pbm9kZS5jPTk3MT1zdGF0aWMgaW50IGdmczJfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9nZnMyL2lub2RlLmMtOTczLXtcbmZzL2dmczIvaW5vZGUuYzo5NzQ6XHRyZXR1cm4gZ2ZzMl9jcmVhdGVfaW5vZGUoZGlyLCBkZW50cnksIE5VTEwsIFNfSUZSRUcgfCBtb2RlLCAwLCBOVUxMLCAwLCAxKTtcbmZzL2dmczIvaW5vZGUuYy05NzUtfVxuLS1cbmZzL2dmczIvaW5vZGUuYz0xMzI3PXN0YXRpYyBpbnQgZ2ZzMl9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9nZnMyL2lub2RlLmMtMTMzNS1cbmZzL2dmczIvaW5vZGUuYzoxMzM2Olx0cmV0dXJuIGdmczJfY3JlYXRlX2lub2RlKGRpciwgZGVudHJ5LCBOVUxMLCBTX0lGTE5LIHwgU19JUldYVUdPLCAwLCBzeW1uYW1lLCBzaXplLCAwKTtcbmZzL2dmczIvaW5vZGUuYy0xMzM3LX1cbi0tXG5mcy9nZnMyL2lub2RlLmM9MTM0OT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZ2ZzMl9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvZ2ZzMi9pbm9kZS5jLTEzNTMtXG5mcy9nZnMyL2lub2RlLmM6MTM1NDpcdHJldHVybiBFUlJfUFRSKGdmczJfY3JlYXRlX2lub2RlKGRpciwgZGVudHJ5LCBOVUxMLCBTX0lGRElSIHwgbW9kZSwgMCwgTlVMTCwgZHNpemUsIDApKTtcbmZzL2dmczIvaW5vZGUuYy0xMzU1LX1cbi0tXG5mcy9nZnMyL2lub2RlLmM9MTM2Nz1zdGF0aWMgaW50IGdmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2dmczIvaW5vZGUuYy0xMzY5LXtcbmZzL2dmczIvaW5vZGUuYzoxMzcwOlx0cmV0dXJuIGdmczJfY3JlYXRlX2lub2RlKGRpciwgZGVudHJ5LCBOVUxMLCBtb2RlLCBkZXYsIE5VTEwsIDAsIDApO1xuZnMvZ2ZzMi9pbm9kZS5jLTEzNzEtfVxuLS1cbmZzL2dmczIvaW5vZGUuYz0xMzg0PXN0YXRpYyBpbnQgZ2ZzMl9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL2dmczIvaW5vZGUuYy0xNDAzLVxuZnMvZ2ZzMi9pbm9kZS5jOjE0MDQ6XHRyZXR1cm4gZ2ZzMl9jcmVhdGVfaW5vZGUoZGlyLCBkZW50cnksIGZpbGUsIFNfSUZSRUcgfCBtb2RlLCAwLCBOVUxMLCAwLCBleGNsKTtcbmZzL2dmczIvaW5vZGUuYy0xNDA1LX1cbi0tXG5mcy9nZnMyL3N1cGVyLmM9MTI4OT1zdGF0aWMgaW50IGV2aWN0X3VubGlua2VkX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBnZnMyX2hvbGRlciAqZ2gpXG4tLVxuZnMvZ2ZzMi9zdXBlci5jLTEzMTgtXHQvKlxuZnMvZ2ZzMi9zdXBlci5jOjEzMTk6XHQgKiBBcyBzb29uIGFzIHdlIGNsZWFyIHRoZSBiaXRtYXAgZm9yIHRoZSBkaW5vZGUsIGdmczJfY3JlYXRlX2lub2RlKClcbmZzL2dmczIvc3VwZXIuYy0xMzIwLVx0ICogY2FuIGdldCBjYWxsZWQgdG8gcmVjcmVhdGUgaXQsIG9yIGV2ZW4gZ2ZzMl9pbm9kZV9sb29rdXAoKSBpZiB0aGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTg6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc2OTQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgYGdmczJfY3JlYXRlX2lub2RlYCBhbmQgYGF0b21pY19vcGVuYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgZ2ZzMl9hdG9taWNfb3BlbmAgZnVuY3Rpb24uIEl0JiMzOTtzIGNhbGxpbmcgYGdmczJfY3JlYXRlX2lub2RlYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGF0IGZ1bmN0aW9uIGlzIGFsc28gY2VudHJhbCB0byBob3cgR0ZTMiBjcmVhdGVzIGlub2Rlcy4gSSYjMzk7bSBub3RpbmcgdGhhdCBgZ2ZzMl9hdG9taWNfb3BlbmAgcGFzc2VzIHRoZSBgZXhjbGAgZmxhZyBkaXJlY3RseSB0byBgZ2ZzMl9jcmVhdGVfaW5vZGVgLCBhbmQgdGhhdCB0aGUgYGV4Y2xgIGZsYWcgaW5kaWNhdGVzIGV4Y2x1c2l2ZSBhY2Nlc3MuCgpJIHNlZSB0aGF0IHRoZSBvbGQgdmVyc2lvbiBvZiB0aGUgYGdmczJfY3JlYXRlX2lub2RlYCBmdW5jdGlvbiB3YXMgdXNlZCBieSBib3RoLCBidXQgdGhlIHBhdGNoIGhhcmRjb2RlcyB0aGUgYGV4Y2xgIGZsYWcgYXMgdHJ1ZS4gV2FpdCwgdGhhdCBtYWtlcyBzZW5zZS4gVGhlIGNvbW1lbnQgc2F5cyB0aGF0IHRoZSBgLmNyZWF0ZWAgaW5vZGUgb3BlcmF0aW9uIG5vIGxvbmdlciBnZXRzIHRoZSBgZXhjbGAgYXJndW1lbnQgYW5kIHRoYXQgaXQgYXNzdW1lcyB0aGUgZmlsZSBkb2VzbiYjMzk7dCBhbHJlYWR5IGV4aXN0LiBUaGUgY29tbWl0IHNlZW1zIHBlcmZlY3RseSBhbGlnbmVkIHdpdGggdGhlIHBhdGNoLiBTaW5jZSBgZ2ZzMl9jcmVhdGVgIG5vdyAqb25seSogZ2V0cyBjYWxsZWQgZm9yIGV4Y2x1c2l2ZSBjcmVhdGVzLCBoYXJkY29kaW5nIGBleGNsPXRydWVgIGlzIHRoZSByaWdodCB0aGluZyB0byBkbywgb3Igd2hlbiBWRlMgaGFuZGxlcyB0aGUgbm9uLWV4Y2x1c2l2ZSBwYXJ0LiBJdCYjMzk7cyBlc3NlbnRpYWxseSBzaW1wbGlmeWluZyB0aGUgY29kZSBwYXRoIGJlY2F1c2UgYGdmczJfY3JlYXRlYCBub3cgYXNzdW1lcyB0aGF0IGV4Y2x1c2l2aXR5IGlzIHBhcnQgb2YgdGhlIGNhbGxpbmcgY29udGV4dC4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBORlMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mc19kb19jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9uZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25mcy9kaXIuYz01Nz1zdGF0aWMgdm9pZCBuZnNfcmVhZGRpcl9jbGVhcl9hcnJheShzdHJ1Y3QgZm9saW8gKik7XG5mcy9uZnMvZGlyLmM6NTg6c3RhdGljIGludCBuZnNfZG9fY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5mcy9uZnMvZGlyLmMtNTktXHRcdFx0IHVtb2RlX3QgbW9kZSwgaW50IG9wZW5fZmxhZ3MpO1xuLS1cbmZzL25mcy9kaXIuYz0yMzA2PWludCBuZnNfYXRvbWljX29wZW5fdjIzKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvbmZzL2Rpci5jLTIzMTktXHRpZiAob3Blbl9mbGFncyBcdTAwMjYgT19DUkVBVCkge1xuZnMvbmZzL2Rpci5jOjIzMjA6XHRcdGVycm9yID0gbmZzX2RvX2NyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSwgb3Blbl9mbGFncyk7XG5mcy9uZnMvZGlyLmMtMjMyMS1cdFx0aWYgKCFlcnJvcikge1xuLS1cbmZzL25mcy9kaXIuYz0yMzkyPUVYUE9SVF9TWU1CT0xfR1BMKG5mc19pbnN0YW50aWF0ZSk7XG4tLVxuZnMvbmZzL2Rpci5jLTIzOTktICovXG5mcy9uZnMvZGlyLmM6MjQwMDpzdGF0aWMgaW50IG5mc19kb19jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbmZzL25mcy9kaXIuYy0yNDAxLVx0XHRcdCB1bW9kZV90IG1vZGUsIGludCBvcGVuX2ZsYWdzKVxuLS1cbmZzL25mcy9kaXIuYz0yNDI5PWludCBuZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9uZnMvZGlyLmMtMjQzMS17XG5mcy9uZnMvZGlyLmM6MjQzMjpcdHJldHVybiBuZnNfZG9fY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlLCBPX0VYQ0wpO1xuZnMvbmZzL2Rpci5jLTI0MzMtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODczOAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipBbmFseXppbmcgTkZTIEZpbGUgQ3JlYXRpb24gYW5kIGB2Ym94c2ZgIEltcGxpY2F0aW9ucyoqCgpSaWdodCwgc28gYG5mc19kb19jcmVhdGVgIGlzIGRlZmluaXRlbHkgdXNlZCBpbiBgbmZzX2F0b21pY19vcGVuX3YyM2AsIGFuZCBjcnVjaWFsbHksIHRoYXQgZnVuY3Rpb24gaXMgcGFzc2luZyB0aHJvdWdoIGBvcGVuX2ZsYWdzYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQuIEl0IGNvbmZpcm1zIG15IHVuZGVyc3RhbmRpbmcgdGhhdCB0aGUgdXNlIG9mIGBPX0VYQ0xgIHdpdGhpbiBgbmZzX2NyZWF0ZWAgaXMsIGluIGZhY3QsIGNvcnJlY3QsIGdpdmVuIHRoYXQgcGF0aC4gV2UmIzM5O3JlIGVmZmVjdGl2ZWx5IHJldXNpbmcgYSBsb3dlci1sZXZlbCBmdW5jdGlvbiB3aXRoIGFkZGVkIGZ1bmN0aW9uYWxpdHkuCgpCdXQsIGEgdGhvdWdodCwgd2hhdCBhYm91dCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBgdmJveHNmYD8gSSBuZWVkIHRvIGNvbnNpZGVyIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBhcHByb2FjaC4gRG9lcyBgdmJveHNmYCB1c2UgYSBzaW1pbGFyIHBhdHRlcm4/IERvZXMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBkaWZmZXJlbnQgZmxhZyB1c2UgY2F1c2UgYW55IGlzc3Vlcywgb3IgaXMgaXQgYWxyZWFkeSBoYW5kbGVkPyBJIHJlYWxseSBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgdGhpcyBpbnRlcmFjdHMgaW4gdGhlIGNvbnRleHQgb2YgYHZib3hzZmAsIGFzIHRoYXQgaXMgYW4gYXJlYSB3aGljaCBoYXMgc29tZXRpbWVzIHNob3duIHVuZXhwZWN0ZWQgYmVoYXZpb3VyLiBUaGF0JiMzOTtzIHRoZSBuZXh0IHN0ZXA7IG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSB2Ym94c2YgY29kZSBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2Ym94c2ZfZGlyX2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Zib3hzZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvdmJveHNmL2Rpci5jPTIzNj1zdGF0aWMgaW50IHZib3hzZl9kaXJfaW5zdGFudGlhdGUoc3RydWN0IGlub2RlICpwYXJlbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy92Ym94c2YvZGlyLmMtMjU2LVxuZnMvdmJveHNmL2Rpci5jOjI1NzpzdGF0aWMgaW50IHZib3hzZl9kaXJfY3JlYXRlKHN0cnVjdCBpbm9kZSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5mcy92Ym94c2YvZGlyLmMtMjU4LVx0XHRcdCAgICAgdW1vZGVfdCBtb2RlLCBib29sIGlzX2RpciwgYm9vbCBleGNsLCB1NjQgKmhhbmRsZV9yZXQpXG4tLVxuZnMvdmJveHNmL2Rpci5jPTI5OT1zdGF0aWMgaW50IHZib3hzZl9kaXJfbWtmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL3Zib3hzZi9kaXIuYy0zMDIte1xuZnMvdmJveHNmL2Rpci5jOjMwMzpcdHJldHVybiB2Ym94c2ZfZGlyX2NyZWF0ZShwYXJlbnQsIGRlbnRyeSwgbW9kZSwgZmFsc2UsIHRydWUsIE5VTEwpO1xuZnMvdmJveHNmL2Rpci5jLTMwNC19XG4tLVxuZnMvdmJveHNmL2Rpci5jPTMwNj1zdGF0aWMgc3RydWN0IGRlbnRyeSAqdmJveHNmX2Rpcl9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy92Ym94c2YvZGlyLmMtMzA5LXtcbmZzL3Zib3hzZi9kaXIuYzozMTA6XHRyZXR1cm4gRVJSX1BUUih2Ym94c2ZfZGlyX2NyZWF0ZShwYXJlbnQsIGRlbnRyeSwgbW9kZSwgdHJ1ZSwgdHJ1ZSwgTlVMTCkpO1xuZnMvdmJveHNmL2Rpci5jLTMxMS19XG4tLVxuZnMvdmJveHNmL2Rpci5jPTMxMz1zdGF0aWMgaW50IHZib3hzZl9kaXJfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpwYXJlbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy92Ym94c2YvZGlyLmMtMzMwLVxuZnMvdmJveHNmL2Rpci5jOjMzMTpcdGVyciA9IHZib3hzZl9kaXJfY3JlYXRlKHBhcmVudCwgZGVudHJ5LCBtb2RlLCBmYWxzZSwgZmxhZ3MgXHUwMDI2IE9fRVhDTCwgXHUwMDI2aGFuZGxlKTtcbmZzL3Zib3hzZi9kaXIuYy0zMzItXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTUzMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9ucyBvZiBhIEZpbGVzeXN0ZW0gUmVmYWN0b3IqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgdmJveHNmX2Rpcl9jcmVhdGVgIGlzIGJlaW5nIHVzZWQgYnkgYHZib3hzZl9kaXJfYXRvbWljX29wZW5gLCB3aGljaCBpcyBhbHJlYWR5IGhhbmRsaW5nIGBPX0VYQ0xgIGZsYWdzLiBBbHNvLCB0aGUgYHZib3hzZl9kaXJfbWtmaWxlYCAod2hpY2ggaXMgdGhlIGFjdHVhbCBgLmNyZWF0ZWAgb3BlcmF0aW9uKSBwYXNzZXMgYHRydWVgIGZvciBleGNsdXNpdmUgY3JlYXRpb24uIFNvLCB0aGUgYC5jcmVhdGVgIGlub2RlIG9wZXJhdGlvbiBpcyBub3cgKnN0cmljdGx5KiBmb3IgZXhjbHVzaXZlIGNyZWF0ZXMuIEl0IHNlZW1zIHRoZSBWRlMgbGF5ZXIgaXMgdGFraW5nIHJlc3BvbnNpYmlsaXR5IGZvciBoYW5kbGluZyBub24tZXhjbHVzaXZlIHNjZW5hcmlvcywgYW5kIHRoZSBmaWxlc3lzdGVtIGNvZGUgY2FuIGp1c3QgYXNzdW1lIHRoZSBmaWxlIGRvZXNuJiMzOTt0IGV4aXN0LgoKVGhpcyBmZWVscyBsaWtlIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCB0aGUgaW1wbGljYXRpb24gaXMgdGhhdCB3ZSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gZnV6emluZyB0aGlzLiBJdCYjMzk7cyBub3QgYSBsb2NhbGl6ZWQgY2hhbmdlOyBpdOKAmXMgYSB0cmVlLXdpZGUgcmVmYWN0b3JpbmcgdGhhdCBhZmZlY3RzIHRoZSBiZWhhdmlvciBvZiBgdmZzX2NyZWF0ZWAgYW5kIGBsb29rdXBfb3BlbmAgaW4gaG93IHRoZXkgY2FsbCBgY3JlYXRlYC4gVGhlIGNoYW5nZXMgYXJlIHN1YnRsZSwgYnV0IHRoZXkgY291bGQgaGF2ZSBzZXJpb3VzIGNvbnNlcXVlbmNlcy4KCldhaXQgYSBzZWNvbmTigKYgYHZmc19jcmVhdGVgICp1c2VkKiB0byBwYXNzIGB0cnVlYCBmb3IgZXhjbHVzaXZlIGNyZWF0aW9uIChgZXhjbGApLCBhbmQgbm93IGl0IGRvZXNuJiMzOTt0IHBhc3MgYW55dGhpbmcuIFRoZSBmaWxlc3lzdGVtIG5vdyBpbXBsaWNpdGx5IGFzc3VtZXMgYHRydWVgLiBBbmQgYGxvb2t1cF9vcGVuYCAqdXNlZCogdG8gcGFzcyBgb3Blbl9mbGFnICZhbXA7IE9fRVhDTGAuIE5vdywgaXQgZG9lc24mIzM5O3QgcGFzcyBhbnl0aGluZywgYW5kIHRoZSBmaWxlc3lzdGVtIHN0aWxsIGltcGxpY2l0bHkgYXNzdW1lcyBgdHJ1ZWAuCgpIb2xkIG9uLi4uIGlmIGBsb29rdXBfb3BlbmAgKnVzZWQqIHRvIHBhc3MgdGhlIGJpdHdpc2UgQU5EIG9mIHRoZSBgb3Blbl9mbGFnYCBhbmQgYE9fRVhDTGAsIGFuZCBub3cgaXQmIzM5O3MgKm5vdCogcGFzc2luZyBhbnl0aGluZywgYW5kIHRoZSBmaWxlc3lzdGVtIGFsd2F5cyBhc3N1bWVzIGB0cnVlYCwgdGhlbiBmb3Igbm9uLWV4Y2x1c2l2ZSBjcmVhdGVzIChgT19DUkVBVGAgd2l0aG91dCBgT19FWENMYCksIHRoZSBmaWxlc3lzdGVtJiMzOTtzIGBjcmVhdGVgIG1ldGhvZCBpcyAqbm93KiBiZWhhdmluZyBhcyBpZiBgT19FWENMYCAqd2FzKiBwYXNzZWQhIFRoYXQmIzM5O3MgYSBicmVha2luZyBjaGFuZ2UuCgpJcyB0aGF0IHJlYWxseSB3aGF0IHRoaXMgbWVhbnM/IEFtIEkgdW5kZXJzdGFuZGluZyB0aGlzIGNvcnJlY3RseT8gSSBiZXR0ZXIgZG91YmxlLWNoZWNrIGBsb29rdXBfb3BlbmAgaW4gYGZzL25hbWVpLmNgIHRvIGJlIGNlcnRhaW4uIEdvdHRhIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL25hbWVpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ0ODA6XHRcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7XG40NDgxOlx0XHRcdHN0cnVjdCBkZW50cnkgKnJlcyA9IGRpcl9pbm9kZS1cdTAwM2VpX29wLVx1MDAzZWxvb2t1cChkaXJfaW5vZGUsIGRlbnRyeSxcbjQ0ODI6XHRcdFx0XHRcdFx0XHRcdCAgICAgbmQtXHUwMDNlZmxhZ3MpO1xuNDQ4MzpcdFx0XHRkX2xvb2t1cF9kb25lKGRlbnRyeSk7XG40NDg0Olx0XHRcdGlmICh1bmxpa2VseShyZXMpKSB7XG40NDg1Olx0XHRcdFx0aWYgKElTX0VSUihyZXMpKSB7XG40NDg2Olx0XHRcdFx0XHRlcnJvciA9IFBUUl9FUlIocmVzKTtcbjQ0ODc6XHRcdFx0XHRcdGdvdG8gb3V0X2RwdXQ7XG40NDg4Olx0XHRcdFx0fVxuNDQ4OTpcdFx0XHRcdGRwdXQoZGVudHJ5KTtcbjQ0OTA6XHRcdFx0XHRkZW50cnkgPSByZXM7XG40NDkxOlx0XHRcdH1cbjQ0OTI6XHRcdH1cbjQ0OTM6XHRcbjQ0OTQ6XHRcdC8qIE5lZ2F0aXZlIGRlbnRyeSwganVzdCBjcmVhdGUgdGhlIGZpbGUgKi9cbjQ0OTU6XHRcdGlmICghZGVudHJ5LVx1MDAzZWRfaW5vZGUgXHUwMDI2XHUwMDI2IChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpKSB7XG40NDk2Olx0XHRcdC8qIGJ1dCBicmVhayB0aGUgZGlyZWN0b3J5IGxlYXNlIGZpcnN0ISAqL1xuNDQ5NzpcdFx0XHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXJfaW5vZGUsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRlbGVnYXRlZF9pbm9kZSk7XG40NDk4Olx0XHRcdGlmIChlcnJvcilcbjQ0OTk6XHRcdFx0XHRnb3RvIG91dF9kcHV0O1xuNDUwMDpcdFxuNDUwMTpcdFx0XHRmaWxlLVx1MDAzZWZfbW9kZSB8PSBGTU9ERV9DUkVBVEVEO1xuNDUwMjpcdFx0XHRhdWRpdF9pbm9kZV9jaGlsZChkaXJfaW5vZGUsIGRlbnRyeSwgQVVESVRfVFlQRV9DSElMRF9DUkVBVEUpO1xuNDUwMzpcdFx0XHRpZiAoIWRpcl9pbm9kZS1cdTAwM2VpX29wLVx1MDAzZWNyZWF0ZSkge1xuNDUwNDpcdFx0XHRcdGVycm9yID0gLUVBQ0NFUztcbjQ1MDU6XHRcdFx0XHRnb3RvIG91dF9kcHV0O1xuNDUwNjpcdFx0XHR9XG40NTA3Olx0XG40NTA4Olx0XHRcdGVycm9yID0gZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlY3JlYXRlKGlkbWFwLCBkaXJfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XG40NTA5Olx0XHRcdGlmIChlcnJvcilcbjQ1MTA6XHRcdFx0XHRnb3RvIG91dF9kcHV0O1xuNDUxMTpcdFx0fVxuNDUxMjpcdFx0aWYgKHVubGlrZWx5KGNyZWF0ZV9lcnJvcikgXHUwMDI2XHUwMDI2ICFkZW50cnktXHUwMDNlZF9pbm9kZSkge1xuNDUxMzpcdFx0XHRlcnJvciA9IGNyZWF0ZV9lcnJvcjtcbjQ1MTQ6XHRcdFx0Z290byBvdXRfZHB1dDtcbjQ1MTU6XHRcdH1cbjQ1MTY6XHRcdHJldHVybiBkZW50cnk7XG40NTE3Olx0XG40NTE4Olx0b3V0X2RwdXQ6XG40NTE5Olx0XHRkcHV0KGRlbnRyeSk7XG40NTIwOlx0XHRyZXR1cm4gRVJSX1BUUihlcnJvcik7XG40NTIxOlx0fVxuNDUyMjpcdFxuNDUyMzpcdHN0YXRpYyBpbmxpbmUgYm9vbCB0cmFpbGluZ19zbGFzaGVzKHN0cnVjdCBuYW1laWRhdGEgKm5kKVxuNDUyNDpcdHtcbjQ1MjU6XHRcdHJldHVybiAoYm9vbCluZC1cdTAwM2VsYXN0Lm5hbWVbbmQtXHUwMDNlbGFzdC5sZW5dO1xuNDUyNjpcdH1cbjQ1Mjc6XHRcbjQ1Mjg6XHRzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX2Zhc3RfZm9yX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIGludCBvcGVuX2ZsYWcpXG40NTI5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTA1OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipBbmFseXppbmcgdGhlIGBsb29rdXBfb3BlbmAgRnVuY3Rpb24qKgoKSG1tLCB0aGUgY29kZSByZW1pbmRzIG1lIHRoYXQgYGxvb2t1cF9vcGVuYCBnZXRzIGludm9rZWQgd2hlbiBgT19DUkVBVGAgaXMgc2V0LiBOb3cgdGhhdCYjMzk7cyBhIGtleSBkZXRhaWwgdG8ga2VlcCBpbiBtaW5kLiBUaGUgaW50ZXJlc3RpbmcgdGhpbmcgaXMsIHRoYXQgaWYgdGhlIGZpbGVzeXN0ZW0gaGFzIGFuIGBhdG9taWNfb3BlbmAgaW1wbGVtZW50YXRpb24sIGl0IHNob3VsZCBhY3R1YWxseSBiZSBjYWxsZWQgKmVhcmxpZXIqIHdpdGhpbiBgbG9va3VwX29wZW5gLiBTbywgdGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBhbmFseXNpcy4gTGV0IG1lIGp1c3QgcXVpY2tseSB0cmFjZSBiYWNrIHRocm91Z2ggYGxvb2t1cF9vcGVuYCwgYW5kIGdldCBteSBiZWFyaW5ncyBvbiB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgdGhhdCBlYXJseSBjYWxsIHdvdWxkIGZpdCBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTg6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9uYW1laS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NDAwOlx0ICogaGFkbiYjMzk7dCBiZWVuIHNwZWNpZmllZC5cbjQ0MDE6XHQgKlxuNDQwMjpcdCAqIEFuIGVycm9yIGNvZGUgaXMgcmV0dXJuZWQgb24gZmFpbHVyZS5cbjQ0MDM6XHQgKi9cbjQ0MDQ6XHRzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuNDQwNTpcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3AsXG40NDA2Olx0XHRcdFx0XHQgIGJvb2wgZ290X3dyaXRlLCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkZWxlZ2F0ZWRfaW5vZGUpXG40NDA3Olx0e1xuNDQwODpcdFx0c3RydWN0IG1udF9pZG1hcCAqaWRtYXA7XG40NDA5Olx0XHRzdHJ1Y3QgZGVudHJ5ICpkaXIgPSBuZC1cdTAwM2VwYXRoLmRlbnRyeTtcbjQ0MTA6XHRcdHN0cnVjdCBpbm9kZSAqZGlyX2lub2RlID0gZGlyLVx1MDAzZWRfaW5vZGU7XG40NDExOlx0XHRpbnQgb3Blbl9mbGFnID0gb3AtXHUwMDNlb3Blbl9mbGFnO1xuNDQxMjpcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xuNDQxMzpcdFx0aW50IGVycm9yLCBjcmVhdGVfZXJyb3IgPSAwO1xuNDQxNDpcdFx0dW1vZGVfdCBtb2RlID0gb3AtXHUwMDNlbW9kZTtcbjQ0MTU6XHRcbjQ0MTY6XHRcdGlmICh1bmxpa2VseShJU19ERUFERElSKGRpcl9pbm9kZSkpKVxuNDQxNzpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcbjQ0MTg6XHRcbjQ0MTk6XHRcdGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNj0gfkZNT0RFX0NSRUFURUQ7XG40NDIwOlx0XHRkZW50cnkgPSBkX2xvb2t1cChkaXIsIFx1MDAyNm5kLVx1MDAzZWxhc3QpO1xuNDQyMTpcdFx0Zm9yICg7Oykge1xuNDQyMjpcdFx0XHRpZiAoIWRlbnRyeSkge1xuNDQyMzpcdFx0XHRcdGRlbnRyeSA9IGRfYWxsb2NfcGFyYWxsZWwoZGlyLCBcdTAwMjZuZC1cdTAwM2VsYXN0KTtcbjQ0MjQ6XHRcdFx0XHRpZiAoSVNfRVJSKGRlbnRyeSkpXG40NDI1Olx0XHRcdFx0XHRyZXR1cm4gZGVudHJ5O1xuNDQyNjpcdFx0XHR9XG40NDI3Olx0XHRcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKVxuNDQyODpcdFx0XHRcdGJyZWFrO1xuNDQyOTpcdFxuNDQzMDpcdFx0XHRlcnJvciA9IGRfcmV2YWxpZGF0ZShkaXJfaW5vZGUsIFx1MDAyNm5kLVx1MDAzZWxhc3QsIGRlbnRyeSwgbmQtXHUwMDNlZmxhZ3MpO1xuNDQzMTpcdFx0XHRpZiAobGlrZWx5KGVycm9yIFx1MDAzZSAwKSlcbjQ0MzI6XHRcdFx0XHRicmVhaztcbjQ0MzM6XHRcdFx0aWYgKGVycm9yKVxuNDQzNDpcdFx0XHRcdGdvdG8gb3V0X2RwdXQ7XG40NDM1Olx0XHRcdGRfaW52YWxpZGF0ZShkZW50cnkpO1xuNDQzNjpcdFx0XHRkcHV0KGRlbnRyeSk7XG40NDM3Olx0XHRcdGRlbnRyeSA9IE5VTEw7XG40NDM4Olx0XHR9XG40NDM5Olx0XHRpZiAoZGVudHJ5LVx1MDAzZWRfaW5vZGUpIHtcbjQ0NDA6XHRcdFx0LyogQ2FjaGVkIHBvc2l0aXZlIGRlbnRyeTogd2lsbCBvcGVuIGluIGZfb3AtXHUwMDNlb3BlbiAqL1xuNDQ0MTpcdFx0XHRyZXR1cm4gZGVudHJ5O1xuNDQ0MjpcdFx0fVxuNDQ0MzpcdFxuNDQ0NDpcdFx0aWYgKG9wZW5fZmxhZyBcdTAwMjYgT19DUkVBVClcbjQ0NDU6XHRcdFx0YXVkaXRfaW5vZGUobmQtXHUwMDNlbmFtZSwgZGlyLCBBVURJVF9JTk9ERV9QQVJFTlQpO1xuNDQ0NjpcdFxuNDQ0NzpcdFx0LypcbjQ0NDg6XHRcdCAqIENoZWNraW5nIHdyaXRlIHBlcm1pc3Npb24gaXMgdHJpY2t5LCBiYWN1c2Ugd2UgZG9uJiMzOTt0IGtub3cgaWYgd2UgYXJlXG40NDQ5Olx0XHQgKiBnb2luZyB0byBhY3R1YWxseSBuZWVkIGl0OiBPX0NSRUFUIG9wZW5zIHNob3VsZCB3b3JrIGFzIGxvbmcgYXMgdGhlXG40NDUwOlx0XHQgKiBmaWxlIGV4aXN0cy4gIEJ1dCBjaGVja2luZyBleGlzdGVuY2UgYnJlYWtzIGF0b21pY2l0eS4gIFRoZSB0cmljayBpc1xuNDQ1MTpcdFx0ICogdG8gY2hlY2sgYWNjZXNzIGFuZCBpZiBub3QgZ3JhbnRlZCBjbGVhciBPX0NSRUFUIGZyb20gdGhlIGZsYWdzLlxuNDQ1MjpcdFx0ICpcbjQ0NTM6XHRcdCAqIEFub3RoZXIgcHJvYmxlbSBpcyByZXR1cmluZyB0aGUgXCYjMzQ7cmlnaHRcJiMzNDsgZXJyb3IgdmFsdWUgKGUuZy4gZm9yIGFuXG40NDU0Olx0XHQgKiBPX0VYQ0wgb3BlbiB3ZSB3YW50IHRvIHJldHVybiBFRVhJU1Qgbm90IEVST0ZTKS5cbjQ0NTU6XHRcdCAqL1xuNDQ1NjpcdFx0aWYgKHVubGlrZWx5KCFnb3Rfd3JpdGUpKVxuNDQ1NzpcdFx0XHRvcGVuX2ZsYWcgXHUwMDI2PSB+T19UUlVOQztcbjQ0NTg6XHRcdGlkbWFwID0gbW50X2lkbWFwKG5kLVx1MDAzZXBhdGgubW50KTtcbjQ0NTk6XHRcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpIHtcbjQ0NjA6XHRcdFx0aWYgKG9wZW5fZmxhZyBcdTAwMjYgT19FWENMKVxuNDQ2MTpcdFx0XHRcdG9wZW5fZmxhZyBcdTAwMjY9IH5PX1RSVU5DO1xuNDQ2MjpcdFx0XHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLVx1MDAzZWRfaW5vZGUsIG1vZGUsIG1vZGUsIG1vZGUpO1xuNDQ2MzpcdFx0XHRpZiAobGlrZWx5KGdvdF93cml0ZSkpXG40NDY0Olx0XHRcdFx0Y3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCBcdTAwMjZuZC1cdTAwM2VwYXRoLFxuNDQ2NTpcdFx0XHRcdFx0XHRcdCAgICBkZW50cnksIG1vZGUpO1xuNDQ2NjpcdFx0XHRlbHNlXG40NDY3Olx0XHRcdFx0Y3JlYXRlX2Vycm9yID0gLUVST0ZTO1xuNDQ2ODpcdFx0fVxuNDQ2OTpcdFx0aWYgKGNyZWF0ZV9lcnJvcilcbjQ0NzA6XHRcdFx0b3Blbl9mbGFnIFx1MDAyNj0gfk9fQ1JFQVQ7XG40NDcxOlx0XHRpZiAoZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlYXRvbWljX29wZW4pIHtcbjQ0NzI6XHRcdFx0aWYgKG5kLVx1MDAzZWZsYWdzIFx1MDAyNiBMT09LVVBfRElSRUNUT1JZKVxuNDQ3MzpcdFx0XHRcdG9wZW5fZmxhZyB8PSBPX0RJUkVDVE9SWTtcbjQ0NzQ6XHRcdFx0ZGVudHJ5ID0gYXRvbWljX29wZW4oXHUwMDI2bmQtXHUwMDNlcGF0aCwgZGVudHJ5LCBmaWxlLCBvcGVuX2ZsYWcsIG1vZGUpO1xuNDQ3NTpcdFx0XHRpZiAodW5saWtlbHkoY3JlYXRlX2Vycm9yKSBcdTAwMjZcdTAwMjYgZGVudHJ5ID09IEVSUl9QVFIoLUVOT0VOVCkpXG40NDc2Olx0XHRcdFx0ZGVudHJ5ID0gRVJSX1BUUihjcmVhdGVfZXJyb3IpO1xuNDQ3NzpcdFx0XHRyZXR1cm4gZGVudHJ5O1xuNDQ3ODpcdFx0fVxuNDQ3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjU3MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEF0b21pYyBPcGVuIGFuZCBOb24tRXhjbHVzaXZlIENyZWF0ZSBGbG93KioKCk9rYXksIHNvIGBhdG9taWNfb3BlbmAgZ2V0cyBjYWxsZWQgZmlyc3QsIGlmIGl0JiMzOTtzIHRoZXJlLiBNYWtlcyBzZW5zZS4gSWYgaXQmIzM5O3MgKm5vdCogcHJlc2VudCwgdGhlIGZsb3cgZ29lcyB0aHJvdWdoIGBsb29rdXBgIOKAkyBhc3N1bWluZywgb2YgY291cnNlLCB0aGF0IGBkX2luX2xvb2t1cChkZW50cnkpYCByZXR1cm5zIHRydWUuIElmIHRoYXQgc3RpbGwgcmVzdWx0cyBpbiBhIG5lZ2F0aXZlIG91dGNvbWUsIGFuZCBgT19DUkVBVGAgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBzeXN0ZW0gY2FsbHMgYGNyZWF0ZWAuIFNvLCB3aGVuIGBhdG9taWNfb3BlbmAgaXNuJiMzOTt0IGltcGxlbWVudGVkLCB0aGUgVkZTIGRvZXMgYSBzaW1wbGU6IDEuIGBsb29rdXBgLCBhbmQgMi4gaWYgbmVnYXRpdmUsIGBjcmVhdGVgLgoKTm93LCBpZiBpdCYjMzk7cyBhIG5vbi1leGNsdXNpdmUgY3JlYXRlIChgT19DUkVBVGAgKndpdGhvdXQqIGBPX0VYQ0xgKSwgYW5kIHRoZSBmaWxlIGRvZXNuJiMzOTt0IGV4aXN0LCBpdCB1c2VzIGBjcmVhdGVgLiBCZWZvcmUgdGhpcyBwYXRjaCwgd2UgcGFzc2VkIGBleGNsID0gZmFsc2VgIHRvIGBjcmVhdGVgLiBOb3csIHdlIHBhc3Mgbm90aGluZywgbGV0dGluZyB0aGUgZmlsZXN5c3RlbSBhc3N1bWUgYGV4Y2wgPSB0cnVlYC4gV2FpdC4uLiBpZiB0aGUgZmlsZXN5c3RlbSAqYXNzdW1lcyogYGV4Y2wgPSB0cnVlYCwgZG9lc24mIzM5O3QgdGhhdCBtZWFuIGl0JiMzOTtzIGdvaW5nIHRvIGZhaWwgaWYgdGhlIGZpbGUgYWxyZWFkeSBleGlzdHM/CgpZZXMsIGJ1dCB3YWl0LiBUaGUgVkZTIGFscmVhZHkgY29uZmlybWVkIHRoYXQgdGhlIGZpbGUgKmRvZXNuJiMzOTt0KiBleGlzdC4gSXQmIzM5O3MgYSBuZWdhdGl2ZSBkZW50cnkuIEJ1dCB3aGF0IGlmIHRoZXJlJiMzOTtzIGEgcmFjZT8gV2hhdCBpZiB0aGUgZmlsZSBnZXRzIGNyZWF0ZWQgKmNvbmN1cnJlbnRseSogYmV0d2VlbiBgbG9va3VwYCBhbmQgYGNyZWF0ZWA/IElmIHRoZSBmaWxlc3lzdGVtIGlzIHVzaW5nIGFuIGV4Y2x1c2l2ZSBjcmVhdGUgKGUuZy4sIGBta25vZGApIGJlY2F1c2UgaXQgYXNzdW1lcyBgZXhjbCA9IHRydWVgLCBpdCB3aWxsIGZhaWwgd2l0aCBgRUVYSVNUYC4gVGhlbiB3aGF0IGRvZXMgdGhlIFZGUyBkbz8KCkhvbGQgb24uIElmIGBjcmVhdGVgIHJldHVybnMgYEVFWElTVGAsIGBsb29rdXBfb3BlbmAgcmV0dXJucyBgRVJSX1BUUigtRUVYSVNUKWAuIEJ1dCBpbiBhIG5vbi1leGNsdXNpdmUgY3JlYXRlIHNpdHVhdGlvbiwgd2UgKnNob3VsZG4mIzM5O3QqIGZhaWwgd2l0aCBgRUVYSVNUYCBpZiB0aGUgZmlsZSBpcyBjcmVhdGVkIGNvbmN1cnJlbnRseSEgV2Ugc2hvdWxkIGp1c3Qgb3BlbiB0aGUgZXhpc3RpbmcgZmlsZS4gU28sIEkgbmVlZCB0byBjaGVjayBob3cgdGhlIFZGUyBoYW5kbGVzIGBFRVhJU1RgIHJldHVybmVkIGZyb20gYGxvb2t1cF9vcGVuYCB3aXRoaW4gYG9wZW5fbGFzdF9sb29rdXBzYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcHJvYmxlbSBsaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL25hbWVpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NTMwOlx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XG40NTMxOlx0XG40NTMyOlx0XHRpZiAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSB7XG40NTMzOlx0XHRcdGlmICh0cmFpbGluZ19zbGFzaGVzKG5kKSlcbjQ1MzQ6XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUlTRElSKTtcbjQ1MzU6XHRcbjQ1MzY6XHRcdFx0LyogRG9uJiMzOTt0IGJvdGhlciBvbiBhbiBPX0VYQ0wgY3JlYXRlICovXG40NTM3Olx0XHRcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fRVhDTClcbjQ1Mzg6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbjQ1Mzk6XHRcdH1cbjQ1NDA6XHRcbjQ1NDE6XHRcdGlmICh0cmFpbGluZ19zbGFzaGVzKG5kKSlcbjQ1NDI6XHRcdFx0bmQtXHUwMDNlZmxhZ3MgfD0gTE9PS1VQX0ZPTExPVyB8IExPT0tVUF9ESVJFQ1RPUlk7XG40NTQzOlx0XG40NTQ0Olx0XHRkZW50cnkgPSBsb29rdXBfZmFzdChuZCk7XG40NTQ1Olx0XHRpZiAoSVNfRVJSX09SX05VTEwoZGVudHJ5KSlcbjQ1NDY6XHRcdFx0cmV0dXJuIGRlbnRyeTtcbjQ1NDc6XHRcbjQ1NDg6XHRcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpIHtcbjQ1NDk6XHRcdFx0LyogRGlzY2FyZCBuZWdhdGl2ZSBkZW50cmllcy4gTmVlZCBpbm9kZV9sb2NrIHRvIGRvIHRoZSBjcmVhdGUgKi9cbjQ1NTA6XHRcdFx0aWYgKCFkZW50cnktXHUwMDNlZF9pbm9kZSkge1xuNDU1MTpcdFx0XHRcdGlmICghKG5kLVx1MDAzZWZsYWdzIFx1MDAyNiBMT09LVVBfUkNVKSlcbjQ1NTI6XHRcdFx0XHRcdGRwdXQoZGVudHJ5KTtcbjQ1NTM6XHRcdFx0XHRkZW50cnkgPSBOVUxMO1xuNDU1NDpcdFx0XHR9XG40NTU1Olx0XHR9XG40NTU2Olx0XHRyZXR1cm4gZGVudHJ5O1xuNDU1NzpcdH1cbjQ1NTg6XHRcbjQ1NTk6XHRzdGF0aWMgY29uc3QgY2hhciAqb3Blbl9sYXN0X2xvb2t1cHMoc3RydWN0IG5hbWVpZGF0YSAqbmQsXG40NTYwOlx0XHRcdCAgIHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApXG40NTYxOlx0e1xuNDU2MjpcdFx0c3RydWN0IGRlbGVnYXRlZF9pbm9kZSBkZWxlZ2F0ZWRfaW5vZGUgPSB7IH07XG40NTYzOlx0XHRzdHJ1Y3QgZGVudHJ5ICpkaXIgPSBuZC1cdTAwM2VwYXRoLmRlbnRyeTtcbjQ1NjQ6XHRcdGludCBvcGVuX2ZsYWcgPSBvcC1cdTAwM2VvcGVuX2ZsYWc7XG40NTY1Olx0XHRib29sIGdvdF93cml0ZSA9IGZhbHNlO1xuNDU2NjpcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xuNDU2NzpcdFx0Y29uc3QgY2hhciAqcmVzO1xuNDU2ODpcdFxuNDU2OTpcdFx0bmQtXHUwMDNlZmxhZ3MgfD0gb3AtXHUwMDNlaW50ZW50O1xuNDU3MDpcdFxuNDU3MTpcdFx0aWYgKG5kLVx1MDAzZWxhc3RfdHlwZSAhPSBMQVNUX05PUk0pIHtcbjQ1NzI6XHRcdFx0aWYgKG5kLVx1MDAzZWRlcHRoKVxuNDU3MzpcdFx0XHRcdHB1dF9saW5rKG5kKTtcbjQ1NzQ6XHRcdFx0cmV0dXJuIGhhbmRsZV9kb3RzKG5kLCBuZC1cdTAwM2VsYXN0X3R5cGUpO1xuNDU3NTpcdFx0fVxuNDU3NjpcdFxuNDU3NzpcdFx0LyogV2UgX2Nhbl8gYmUgaW4gUkNVIG1vZGUgaGVyZSAqL1xuNDU3ODpcdFx0ZGVudHJ5ID0gbG9va3VwX2Zhc3RfZm9yX29wZW4obmQsIG9wZW5fZmxhZyk7XG40NTc5Olx0XHRpZiAoSVNfRVJSKGRlbnRyeSkpXG40NTgwOlx0XHRcdHJldHVybiBFUlJfQ0FTVChkZW50cnkpO1xuNDU4MTpcdFxuNDU4MjpcdFx0aWYgKGxpa2VseShkZW50cnkpKVxuNDU4MzpcdFx0XHRnb3RvIGZpbmlzaF9sb29rdXA7XG40NTg0Olx0XG40NTg1Olx0XHRpZiAoIShvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpKSB7XG40NTg2Olx0XHRcdGlmIChXQVJOX09OX09OQ0UobmQtXHUwMDNlZmxhZ3MgXHUwMDI2IExPT0tVUF9SQ1UpKVxuNDU4NzpcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FQ0hJTEQpO1xuNDU4ODpcdFx0fSBlbHNlIHtcbjQ1ODk6XHRcdFx0aWYgKG5kLVx1MDAzZWZsYWdzIFx1MDAyNiBMT09LVVBfUkNVKSB7XG40NTkwOlx0XHRcdFx0aWYgKCF0cnlfdG9fdW5sYXp5KG5kKSlcbjQ1OTE6XHRcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FQ0hJTEQpO1xuNDU5MjpcdFx0XHR9XG40NTkzOlx0XHR9XG40NTk0Olx0cmV0cnk6XG40NTk1Olx0XHRpZiAob3Blbl9mbGFnIFx1MDAyNiAoT19DUkVBVCB8IE9fVFJVTkMgfCBPX1dST05MWSB8IE9fUkRXUikpIHtcbjQ1OTY6XHRcdFx0Z290X3dyaXRlID0gIW1udF93YW50X3dyaXRlKG5kLVx1MDAzZXBhdGgubW50KTtcbjQ1OTc6XHRcdFx0LypcbjQ1OTg6XHRcdFx0ICogZG8gX25vdF8gZmFpbCB5ZXQgLSB3ZSBtaWdodCBub3QgbmVlZCB0aGF0IG9yIGZhaWwgd2l0aFxuNDU5OTpcdFx0XHQgKiBhIGRpZmZlcmVudCBlcnJvcjsgbGV0IGxvb2t1cF9vcGVuKCkgZGVjaWRlOyB3ZSYjMzk7bGwgYmVcbjQ2MDA6XHRcdFx0ICogZHJvcHBpbmcgdGhpcyBvbmUgYW55d2F5LlxuNDYwMTpcdFx0XHQgKi9cbjQ2MDI6XHRcdH1cbjQ2MDM6XHRcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpXG40NjA0Olx0XHRcdGlub2RlX2xvY2soZGlyLVx1MDAzZWRfaW5vZGUpO1xuNDYwNTpcdFx0ZWxzZVxuNDYwNjpcdFx0XHRpbm9kZV9sb2NrX3NoYXJlZChkaXItXHUwMDNlZF9pbm9kZSk7XG40NjA3Olx0XHRkZW50cnkgPSBsb29rdXBfb3BlbihuZCwgZmlsZSwgb3AsIGdvdF93cml0ZSwgXHUwMDI2ZGVsZWdhdGVkX2lub2RlKTtcbjQ2MDg6XHRcdGlmICghSVNfRVJSKGRlbnRyeSkpIHtcbjQ2MDk6XHRcdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9DUkVBVEVEKVxuNDYxMDpcdFx0XHRcdGZzbm90aWZ5X2NyZWF0ZShkaXItXHUwMDNlZF9pbm9kZSwgZGVudHJ5KTtcbjQ2MTE6XHRcdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9PUEVORUQpXG40NjEyOlx0XHRcdFx0ZnNub3RpZnlfb3BlbihmaWxlKTtcbjQ2MTM6XHRcdH1cbjQ2MTQ6XHRcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpXG40NjE1Olx0XHRcdGlub2RlX3VubG9jayhkaXItXHUwMDNlZF9pbm9kZSk7XG40NjE2Olx0XHRlbHNlXG40NjE3Olx0XHRcdGlub2RlX3VubG9ja19zaGFyZWQoZGlyLVx1MDAzZWRfaW5vZGUpO1xuNDYxODpcdFxuNDYxOTpcdFx0aWYgKGdvdF93cml0ZSlcbjQ2MjA6XHRcdFx0bW50X2Ryb3Bfd3JpdGUobmQtXHUwMDNlcGF0aC5tbnQpO1xuNDYyMTpcdFxuNDYyMjpcdFx0aWYgKElTX0VSUihkZW50cnkpKSB7XG40NjIzOlx0XHRcdGlmIChpc19kZWxlZ2F0ZWQoXHUwMDI2ZGVsZWdhdGVkX2lub2RlKSkge1xuNDYyNDpcdFx0XHRcdGludCBlcnJvciA9IGJyZWFrX2RlbGVnX3dhaXQoXHUwMDI2ZGVsZWdhdGVkX2lub2RlKTtcbjQ2MjU6XHRcbjQ2MjY6XHRcdFx0XHRpZiAoIWVycm9yKVxuNDYyNzpcdFx0XHRcdFx0Z290byByZXRyeTtcbjQ2Mjg6XHRcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnJvcik7XG40NjI5Olx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTg6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ4NzcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludGVybmFsIFJldmlldyBvZiBgb3Blbl9sYXN0X2xvb2t1cHNgIEZ1bmN0aW9uYWxpdHkqKgoKSG1tLCBob2xkIG9uLiBEb2VzIGBvcGVuX2xhc3RfbG9va3Vwc2AgYWN0dWFsbHkgYWNjb3VudCBmb3IgYEVFWElTVGAgZXJyb3JzPyBUaGF0JiMzOTtzIGEgY3JpdGljYWwgZGV0YWlsIEkgbmVlZCB0byB2ZXJpZnkuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCBmdW5jdGlvbiBiZWhhdmVzIGFzIGV4cGVjdGVkIGluIHRoYXQgcGFydGljdWxhciBzY2VuYXJpby4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJlLWV4YW1pbmUgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBvcGVuX2xhc3RfbG9va3Vwc2AgdG8gY29uZmlybSBpdCBoYW5kbGVzIHRoYXQgZWRnZSBjYXNlIGNvcnJlY3RseS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoYXQgc2VjdGlvbiBvZiBjb2RlIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gZmlsZSBhbHJlYWR5IGV4aXN0cyBlcnJvcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDYzMDpcdFx0XHRyZXR1cm4gRVJSX0NBU1QoZGVudHJ5KTtcbjQ2MzE6XHRcdH1cbjQ2MzI6XHRcbjQ2MzM6XHRcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgKEZNT0RFX09QRU5FRCB8IEZNT0RFX0NSRUFURUQpKSB7XG40NjM0Olx0XHRcdGRwdXQobmQtXHUwMDNlcGF0aC5kZW50cnkpO1xuNDYzNTpcdFx0XHRuZC1cdTAwM2VwYXRoLmRlbnRyeSA9IGRlbnRyeTtcbjQ2MzY6XHRcdFx0cmV0dXJuIE5VTEw7XG40NjM3Olx0XHR9XG40NjM4Olx0XG40NjM5Olx0ZmluaXNoX2xvb2t1cDpcbjQ2NDA6XHRcdGlmIChuZC1cdTAwM2VkZXB0aClcbjQ2NDE6XHRcdFx0cHV0X2xpbmsobmQpO1xuNDY0MjpcdFx0cmVzID0gc3RlcF9pbnRvKG5kLCBXQUxLX1RSQUlMSU5HLCBkZW50cnkpO1xuNDY0MzpcdFx0aWYgKHVubGlrZWx5KHJlcykpXG40NjQ0Olx0XHRcdG5kLVx1MDAzZWZsYWdzIFx1MDAyNj0gfihMT09LVVBfT1BFTnxMT09LVVBfQ1JFQVRFfExPT0tVUF9FWENMKTtcbjQ2NDU6XHRcdHJldHVybiByZXM7XG40NjQ2Olx0fVxuNDY0NzpcdFxuNDY0ODpcdC8qXG40NjQ5Olx0ICogSGFuZGxlIHRoZSBsYXN0IHN0ZXAgb2Ygb3BlbigpXG40NjUwOlx0ICovXG40NjUxOlx0c3RhdGljIGludCBkb19vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuNDY1MjpcdFx0XHQgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgc3RydWN0IG9wZW5fZmxhZ3MgKm9wKVxuNDY1MzpcdHtcbjQ2NTQ6XHRcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwO1xuNDY1NTpcdFx0aW50IG9wZW5fZmxhZyA9IG9wLVx1MDAzZW9wZW5fZmxhZztcbjQ2NTY6XHRcdGJvb2wgZG9fdHJ1bmNhdGU7XG40NjU3Olx0XHRpbnQgYWNjX21vZGU7XG40NjU4Olx0XHRpbnQgZXJyb3I7XG40NjU5Olx0XG40NjYwOlx0XHRpZiAoIShmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgKEZNT0RFX09QRU5FRCB8IEZNT0RFX0NSRUFURUQpKSkge1xuNDY2MTpcdFx0XHRlcnJvciA9IGNvbXBsZXRlX3dhbGsobmQpO1xuNDY2MjpcdFx0XHRpZiAoZXJyb3IpXG40NjYzOlx0XHRcdFx0cmV0dXJuIGVycm9yO1xuNDY2NDpcdFx0fVxuNDY2NTpcdFx0aWYgKCEoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX0NSRUFURUQpKVxuNDY2NjpcdFx0XHRhdWRpdF9pbm9kZShuZC1cdTAwM2VuYW1lLCBuZC1cdTAwM2VwYXRoLmRlbnRyeSwgMCk7XG40NjY3Olx0XHRpZG1hcCA9IG1udF9pZG1hcChuZC1cdTAwM2VwYXRoLm1udCk7XG40NjY4Olx0XHRpZiAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSB7XG40NjY5Olx0XHRcdGlmICgob3Blbl9mbGFnIFx1MDAyNiBPX0VYQ0wpIFx1MDAyNlx1MDAyNiAhKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9DUkVBVEVEKSlcbjQ2NzA6XHRcdFx0XHRyZXR1cm4gLUVFWElTVDtcbjQ2NzE6XHRcdFx0aWYgKGRfaXNfZGlyKG5kLVx1MDAzZXBhdGguZGVudHJ5KSlcbjQ2NzI6XHRcdFx0XHRyZXR1cm4gLUVJU0RJUjtcbjQ2NzM6XHRcdFx0ZXJyb3IgPSBtYXlfY3JlYXRlX2luX3N0aWNreShpZG1hcCwgbmQsXG40Njc0Olx0XHRcdFx0XHRcdCAgICAgZF9iYWNraW5nX2lub2RlKG5kLVx1MDAzZXBhdGguZGVudHJ5KSk7XG40Njc1Olx0XHRcdGlmICh1bmxpa2VseShlcnJvcikpXG40Njc2Olx0XHRcdFx0cmV0dXJuIGVycm9yO1xuNDY3NzpcdFx0fVxuNDY3ODpcdFxuNDY3OTpcdFx0aWYgKChvcGVuX2ZsYWcgXHUwMDI2IF9fT19SRUdVTEFSKSBcdTAwMjZcdTAwMjYgIWRfaXNfcmVnKG5kLVx1MDAzZXBhdGguZGVudHJ5KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTg6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU4NTYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA3MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWZhY3RvcmluZyBvZiB0aGUgYGNyZWF0ZWAgSW5vZGUgT3BlcmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGlzc3VlIGlzIHRoZSBgZXhjbGAgYXJndW1lbnQgcGFzc2VkIHRvIHRoZSBgY3JlYXRlYCBpbm9kZSBvcGVyYXRpb24uIEluaXRpYWxseSwgSSB0aG91Z2h0IHRoYXQgaWYgYGxvb2t1cF9vcGVuYCByZXR1cm5zIGBFRVhJU1RgLCBpdCBzaW1wbHkgcmV0dXJucyBgRUVYSVNUYC4gQnV0IHdhaXQsIGlmIGBjcmVhdGVgIHJldHVybnMgYEVFWElTVGAsIGl0IHN1Z2dlc3RzIGEgY29uY3VycmVudCBjcmVhdGlvbi4gSWYgYE9fRVhDTGAgd2FzbiYjMzk7dCBzZXQsIHRoZW4gYG9wZW5gIHNob3VsZG4mIzM5O3QgZmFpbCB3aXRoIGBFRVhJU1RgIHdoZW4gb3BlbmluZy4gSG93ZXZlciwgY29uc2lkZXJpbmcgdGhhdCBgaW5vZGVfbG9jayhkaXItJmd0O2RfaW5vZGUpYCBpcyBoZWxkIHdoZW4gYGNyZWF0ZWAgaXMgY2FsbGVkIGJ5IHRoZSBWRlMsIG5vIG90aGVyIHByb2Nlc3Mgb24gdGhlICpzYW1lKiBtYWNoaW5lIGNhbiBjb25jdXJyZW50bHkgY3JlYXRlIHRoZSBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4gVGhlIGBpbm9kZV9sb2NrKGRpci0mZ3Q7ZF9pbm9kZSlgIGNvbmZpcm1zIHRoaXM7IHRoZSBsb29rdXAgYW5kIGNyZWF0aW9uIGFyZSBlZmZlY3RpdmVseSBhdG9taWMgZm9yIGxvY2FsIGZpbGVzeXN0ZW1zLgoKVGhlbiB0aGUgdGhvdWdodCBjcm9zc2VkIG15IG1pbmQsIHdoYXQgYWJvdXQgYSBuZXR3b3JrIGZpbGVzeXN0ZW0gYW5kIGEgZmlsZSBjcmVhdGVkIGNvbmN1cnJlbnRseSBieSBhbm90aGVyIG1hY2hpbmU/IElmIGl0JiMzOTtzIGEgbmV0d29yayBmaWxlc3lzdGVtLCBpdCAqc2hvdWxkKiBpbXBsZW1lbnQgYGF0b21pY19vcGVuYC4gT3RoZXJ3aXNlLCBpZiBpdCBkb2VzbiYjMzk7dCBpbXBsZW1lbnQgYGF0b21pY19vcGVuYCwgaXQgY2FuJiMzOTt0IGhhbmRsZSBjb25jdXJyZW50IGNyZWF0ZXMgZnJvbSBvdGhlciBtYWNoaW5lcyBwcm9wZXJseSBhbnl3YXksIG9yIGp1c3QgcmV0dXJucyBgRUVYSVNUYCBhbmQgZmFpbHMgdGhlIG9wZW4uCgpUaGVyZWZvcmUsIHRoZSBgZXhjbGAgYXJndW1lbnQgdG8gYGNyZWF0ZWAgd2FzIGxhcmdlbHkgcG9pbnRsZXNzIGZvciBsb2NhbCBmaWxlc3lzdGVtcyBzaW5jZSB0aGUgYGlub2RlX2xvY2tgIGd1YXJhbnRlZXMgdGhlIGZpbGUgZG9lc24mIzM5O3QgZXhpc3Qgd2hlbiBgY3JlYXRlYCBpcyBjYWxsZWQuIE5ldHdvcmsgZmlsZXN5c3RlbXMgYXJlIHRoZSBvbmVzIHRoYXQgc2hvdWxkIHVzZSBgYXRvbWljX29wZW5gIHRvIGRlYWwgd2l0aCBjb25jdXJyZW5jeSBmcm9tIG90aGVyIG1hY2hpbmVzLiBUaGlzIHBlcmZlY3RseSBhbGlnbnMgd2l0aCB0aGUgcG9ydGluZyBkb2N1bWVudGF0aW9uJiMzOTtzIGd1aWRhbmNlOiAmIzM0Oy5jcmVhdGUgaW5vZGVfb3BlcmF0aW9uIG5vIGxvbmdlciByZWNlaXZlcyB0aGUgJiMzOTtleGNsJiMzOTsgYXJnLiBJdCBtdXN0IGFsd2F5cyBhc3N1bWUgdGhlIGZpbGUgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4gSWYgdGhlIGZpbGVzeXN0ZW0gbmVlZHMgdG8gYmUgaW52b2x2ZWQgaW4gbm9uLWV4Y2x1c2l2ZSBjcmVhdGUsIGl0IHNob3VsZCBwcm92aWRlIGF0b21pY19vcGVuLiYjMzQ7CgpTbywgdGhpcyBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcuIEl0IGVsaW1pbmF0ZXMgYW4gYXJndW1lbnQgdGhhdCB3YXMgZXNzZW50aWFsbHkgYWx3YXlzIGB0cnVlYCAob3IsIHNob3VsZCBiZSB0cmVhdGVkIGFzIHN1Y2gpIGZvciBsb2NhbCBmaWxlc3lzdGVtcywgYW5kIGZvciBuZXR3b3JrIGZpbGVzeXN0ZW1zIHRoZXkgYXJlIHN1cHBvc2VkIHRvIHVzZSBgYXRvbWljX29wZW5gIHRvIGhhbmRsZSBjb25jdXJyZW5jeS4gVGhlIGNoYW5nZXMgYXJlIGxhcmdlbHkgY29zbWV0aWMuIERvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IG5ldyBmdW5jdGlvbmFsIGxvZ2ljIHRoYXQgd291bGQgbmVlZCBmdXp6aW5nPyBOby4gSXQmIzM5O3Mgc2ltcGx5IHJlbW92aW5nIGEgcmVkdW5kYW50IGFyZ3VtZW50IGZyb20gYSBWRlMgY2FsbGJhY2sgYW5kIHVwZGF0aW5nIGFsbCB0aGUgZmlsZXN5c3RlbXMgdG8gZml0IHRoZSBuZXcgc2lnbmF0dXJlLiBUaGUgdW5kZXJseWluZyBsb2dpYyBvZiB0aGUgZmlsZXN5c3RlbXMgcmVtYWlucyB1bmNoYW5nZWQ7IHRoZXkgc2ltcGx5IGRyb3AgdGhlIGBleGNsYCBhcmd1bWVudC4gRm9yIGluc3RhbmNlLCBgZXh0NF9jcmVhdGVgLCBgYnRyZnNfY3JlYXRlYCBhbmQgYHZmc19jcmVhdGVgIGFsbCBqdXN0IGRyb3BwZWQgdGhlIGBleGNsYCBhcmd1bWVudC4gYGxvb2t1cF9vcGVuYCBhbHNvIGRyb3BwZWQgYG9wZW5fZmxhZyAmYW1wOyBPX0VYQ0xgLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZSBubyBmaWxlc3lzdGVtIHVuZXhwZWN0ZWRseSBjaGFuZ2VkIGl0cyBiZWhhdmlvci4gYGdmczJfY3JlYXRlYCBub3cgcGFzc2VzIGAxYCBpbnN0ZWFkIG9mIGBleGNsYCwgYnV0IHNpbmNlIGBnZnMyYCBpbXBsZW1lbnRzIGBhdG9taWNfb3BlbmAsIGBnZnMyX2NyZWF0ZWAgaXMgb25seSBjYWxsZWQgYnkgYHZmc19jcmVhdGVgICh3aGljaCBhbHdheXMgcGFzc2VkIGB0cnVlYCBiZWZvcmUpIG9yIGJ5IGBsb29rdXBfb3BlbmAgaWYgYGF0b21pY19vcGVuYCBpcyBub3QgdXNlZCAoYnV0IGl0IGlzIHVzZWQpLiBUaGVuIEkgcmVtZW1iZXJlZCB0aGF0IGB2ZnNfY3JlYXRlYCBpcyBjYWxsZWQgYnkgYG1rbm9kYCBhbmQgYG9wZW4oT19DUkVBVClgIGlmIGBhdG9taWNfb3BlbmAgaXMgbm90IHVzZWQuIEhvd2V2ZXIsIGBvcGVuYCB1c2VzIGBsb29rdXBfb3BlbmAsIHNvIEkmIzM5O20gY292ZXJlZC4gQW5kIGB2ZnNfY3JlYXRlYCBpcyBhIHNlcGFyYXRlIGZ1bmN0aW9uLCBzbyBJJiMzOTttIG5vdCBjb25mdXNpbmcgdGhpcyB3aXRoIGB2ZnNfbWtub2RgLiBUaGlzIGNvbmZpcm1zIHRoYXQgdGhpcyBpcyB0cnVseSBqdXN0IGEgY2xlYW51cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTg6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZzX2NyZWF0ZVxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy85cC92ZnNfaW5vZGUuYz02NTQ9c3RhdGljIGludFxuZnMvOXAvdmZzX2lub2RlLmM6NjU1OnY5ZnNfdmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG5mcy85cC92ZnNfaW5vZGUuYy02NTYtXHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuLS1cbmZzL2VjcnlwdGZzL2lub2RlLmM9MTg1PWVjcnlwdGZzX2RvX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpcmVjdG9yeV9pbm9kZSxcbi0tXG5mcy9lY3J5cHRmcy9pbm9kZS5jLTE5Ni1cdGxvd2VyX2RpciA9IGxvd2VyX2RlbnRyeS1cdTAwM2VkX3BhcmVudC1cdTAwM2VkX2lub2RlO1xuZnMvZWNyeXB0ZnMvaW5vZGUuYzoxOTc6XHRyYyA9IHZmc19jcmVhdGUoXHUwMDI2bm9wX21udF9pZG1hcCwgbG93ZXJfZGVudHJ5LCBtb2RlLCBOVUxMKTtcbmZzL2VjcnlwdGZzL2lub2RlLmMtMTk4LVx0aWYgKHJjKSB7XG4tLVxuZnMvbGliZnMuYz0yMjY3PXZvaWQgc3Rhc2hlZF9kZW50cnlfcHJ1bmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbmZzL2xpYmZzLmMtMjI5My0gKlxuZnMvbGliZnMuYzoyMjk0OiAqIFJldHVybnM6IGEgbmVnYXRpdmUgZGVudHJ5IG9uIHdoaWNoIHZmc19jcmVhdGUoKSBvciBzaW1pbGFyIG1heVxuZnMvbGliZnMuYy0yMjk1LSAqICBiZSBhdHRlbXB0ZWQsIG9yIGFuIGVycm9yLlxuLS1cbmZzL25hbWVpLmM9NDE1MD1zdGF0aWMgaW5saW5lIHVtb2RlX3QgdmZzX3ByZXBhcmVfbW9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9uYW1laS5jLTQxODEtICovXG5mcy9uYW1laS5jOjQxODI6aW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuZnMvbmFtZWkuYy00MTgzLVx0ICAgICAgIHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKmRpKVxuLS1cbmZzL25hbWVpLmM9NTAyMj1zdHJ1Y3QgZmlsZSAqZGVudHJ5X2NyZWF0ZShzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUsXG4tLVxuZnMvbmFtZWkuYy01MDcxLVx0fSBlbHNlIHtcbmZzL25hbWVpLmM6NTA3MjpcdFx0ZXJyb3IgPSB2ZnNfY3JlYXRlKG1udF9pZG1hcChwYXRoLVx1MDAzZW1udCksIHBhdGgtXHUwMDNlZGVudHJ5LCBtb2RlLCBOVUxMKTtcbmZzL25hbWVpLmMtNTA3My1cdFx0aWYgKCFlcnJvcilcbi0tXG5mcy9uYW1laS5jPTUxNTQ9aW50IGZpbGVuYW1lX21rbm9kYXQoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bW9kZV90IG1vZGUsXG4tLVxuZnMvbmFtZWkuYy01MTc5LVx0XHRjYXNlIDA6IGNhc2UgU19JRlJFRzpcbmZzL25hbWVpLmM6NTE4MDpcdFx0XHRlcnJvciA9IHZmc19jcmVhdGUoaWRtYXAsIGRlbnRyeSwgbW9kZSwgXHUwMDI2ZGkpO1xuZnMvbmFtZWkuYy01MTgxLVx0XHRcdGlmICghZXJyb3IpXG4tLVxuZnMvbmZzZC9uZnMzcHJvYy5jPTI1Mz1uZnNkM19jcmVhdGVfZmlsZShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXG4tLVxuZnMvbmZzZC9uZnMzcHJvYy5jLTI2NS1cbmZzL25mc2QvbmZzM3Byb2MuYzoyNjY6XHR0cmFjZV9uZnNkX3Zmc19jcmVhdGUocnFzdHAsIGZocCwgU19JRlJFRywgYXJncC1cdTAwM2VuYW1lLCBhcmdwLVx1MDAzZWxlbik7XG5mcy9uZnNkL25mczNwcm9jLmMtMjY3LVxuLS1cbmZzL25mc2QvbmZzM3Byb2MuYy0zNDMtXHRcdGdvdG8gb3V0O1xuZnMvbmZzZC9uZnMzcHJvYy5jOjM0NDpcdGhvc3RfZXJyID0gdmZzX2NyZWF0ZShcdTAwMjZub3BfbW50X2lkbWFwLCBjaGlsZCwgaWFwLVx1MDAzZWlhX21vZGUsIE5VTEwpO1xuZnMvbmZzZC9uZnMzcHJvYy5jLTM0NS1cdGlmIChob3N0X2VyciBcdTAwM2MgMCkge1xuLS1cbmZzL25mc2QvbmZzNHByb2MuYz0yMDQ9c3RhdGljIF9fYmUzMlxuZnMvbmZzZC9uZnM0cHJvYy5jOjIwNTpuZnNkNF92ZnNfY3JlYXRlKHN0cnVjdCBzdmNfZmggKmZocCwgc3RydWN0IGRlbnRyeSAqKmNoaWxkLFxuZnMvbmZzZC9uZnM0cHJvYy5jLTIwNi1cdFx0IHN0cnVjdCBuZnNkNF9vcGVuICpvcGVuKVxuLS1cbmZzL25mc2QvbmZzNHByb2MuYz0yNDg9bmZzZDRfY3JlYXRlX2ZpbGUoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqZmhwLFxuLS1cbmZzL25mc2QvbmZzNHByb2MuYy0zODEtXHRcdGdvdG8gb3V0O1xuZnMvbmZzZC9uZnM0cHJvYy5jOjM4MjpcdHN0YXR1cyA9IG5mc2Q0X3Zmc19jcmVhdGUoZmhwLCBcdTAwMjZjaGlsZCwgb3Blbik7XG5mcy9uZnNkL25mczRwcm9jLmMtMzgzLVx0aWYgKHN0YXR1cyAhPSBuZnNfb2spXG4tLVxuZnMvbmZzZC92ZnMuYz0xNzI3PW5mc2RfY3JlYXRlX3NldGF0dHIoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqZmhwLFxuLS1cbmZzL25mc2QvdmZzLmMtMTc3Ny0gKlxuZnMvbmZzZC92ZnMuYzoxNzc4OiAqIGNhbGwgdGhpcyBvbmx5IGFmdGVyIHZmc19jcmVhdGUoKSBpcyBjYWxsZWQuXG5mcy9uZnNkL3Zmcy5jLTE3NzktICogKi9cbi0tXG5mcy9uZnNkL3Zmcy5jPTE3ODk9bmZzZF9jcmVhdGVfbG9ja2VkKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmZocCxcbi0tXG5mcy9uZnNkL3Zmcy5jLTE4MTctXHRjYXNlIFNfSUZSRUc6XG5mcy9uZnNkL3Zmcy5jOjE4MTg6XHRcdGhvc3RfZXJyID0gdmZzX2NyZWF0ZShcdTAwMjZub3BfbW50X2lkbWFwLCBkY2hpbGQsIGlhcC1cdTAwM2VpYV9tb2RlLCBOVUxMKTtcbmZzL25mc2QvdmZzLmMtMTgxOS1cdFx0aWYgKCFob3N0X2Vycilcbi0tXG5mcy9uZnNkL3Zmcy5jPTE4Njk9bmZzZF9jcmVhdGUoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqZmhwLFxuLS1cbmZzL25mc2QvdmZzLmMtMTg3Ni1cbmZzL25mc2QvdmZzLmM6MTg3NzpcdHRyYWNlX25mc2RfdmZzX2NyZWF0ZShycXN0cCwgZmhwLCB0eXBlLCBmbmFtZSwgZmxlbik7XG5mcy9uZnNkL3Zmcy5jLTE4NzgtXG4tLVxuZnMvb3ZlcmxheWZzL292ZXJsYXlmcy5oPTI0MD1zdGF0aWMgaW5saW5lIGludCBvdmxfZG9fY3JlYXRlKHN0cnVjdCBvdmxfZnMgKm9mcyxcbi0tXG5mcy9vdmVybGF5ZnMvb3ZlcmxheWZzLmgtMjQzLXtcbmZzL292ZXJsYXlmcy9vdmVybGF5ZnMuaDoyNDQ6XHRpbnQgZXJyID0gdmZzX2NyZWF0ZShvdmxfdXBwZXJfbW50X2lkbWFwKG9mcyksIGRlbnRyeSwgbW9kZSwgTlVMTCk7XG5mcy9vdmVybGF5ZnMvb3ZlcmxheWZzLmgtMjQ1LVxuLS1cbmZzL3NtYi9zZXJ2ZXIvc21iMnBkdS5jPTI3OTg9c3RhdGljIGludCBzbWIyX2NyZWF0KHN0cnVjdCBrc21iZF93b3JrICp3b3JrLFxuLS1cbmZzL3NtYi9zZXJ2ZXIvc21iMnBkdS5jLTI4MjEtXHRcdG1vZGUgPSBzaGFyZV9jb25maWdfY3JlYXRlX21vZGUoc2hhcmUsIHBvc2l4X21vZGUpO1xuZnMvc21iL3NlcnZlci9zbWIycGR1LmM6MjgyMjpcdFx0cmMgPSBrc21iZF92ZnNfY3JlYXRlKHdvcmssIG5hbWUsIG1vZGUpO1xuZnMvc21iL3NlcnZlci9zbWIycGR1LmMtMjgyMy1cdFx0aWYgKHJjKVxuLS1cbmZzL3NtYi9zZXJ2ZXIvdmZzLmM9MTE2PXZvaWQga3NtYmRfdmZzX3F1ZXJ5X21heGltYWxfYWNjZXNzKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL3NtYi9zZXJ2ZXIvdmZzLmMtMTM3LS8qKlxuZnMvc21iL3NlcnZlci92ZnMuYzoxMzg6ICoga3NtYmRfdmZzX2NyZWF0ZSgpIC0gdmZzIGhlbHBlciBmb3Igc21iIGNyZWF0ZSBmaWxlXG5mcy9zbWIvc2VydmVyL3Zmcy5jLTEzOS0gKiBAd29yazpcdHdvcmtcbi0tXG5mcy9zbWIvc2VydmVyL3Zmcy5jLTE0NC0gKi9cbmZzL3NtYi9zZXJ2ZXIvdmZzLmM6MTQ1OmludCBrc21iZF92ZnNfY3JlYXRlKHN0cnVjdCBrc21iZF93b3JrICp3b3JrLCBjb25zdCBjaGFyICpuYW1lLCB1bW9kZV90IG1vZGUpXG5mcy9zbWIvc2VydmVyL3Zmcy5jLTE0Ni17XG4tLVxuZnMvc21iL3NlcnZlci92ZnMuYy0xNjEtXHRtb2RlIHw9IFNfSUZSRUc7XG5mcy9zbWIvc2VydmVyL3Zmcy5jOjE2MjpcdGVyciA9IHZmc19jcmVhdGUobW50X2lkbWFwKHBhdGgubW50KSwgZGVudHJ5LCBtb2RlLCBOVUxMKTtcbmZzL3NtYi9zZXJ2ZXIvdmZzLmMtMTYzLVx0aWYgKCFlcnIpIHtcbi0tXG5mcy9zbWIvc2VydmVyL3Zmcy5oPTc2PXZvaWQga3NtYmRfdmZzX3F1ZXJ5X21heGltYWxfYWNjZXNzKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuZnMvc21iL3NlcnZlci92ZnMuaC03Ny1cdFx0XHRcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgX19sZTMyICpkYWNjZXNzKTtcbmZzL3NtYi9zZXJ2ZXIvdmZzLmg6Nzg6aW50IGtzbWJkX3Zmc19jcmVhdGUoc3RydWN0IGtzbWJkX3dvcmsgKndvcmssIGNvbnN0IGNoYXIgKm5hbWUsIHVtb2RlX3QgbW9kZSk7XG5mcy9zbWIvc2VydmVyL3Zmcy5oLTc5LWludCBrc21iZF92ZnNfbWtkaXIoc3RydWN0IGtzbWJkX3dvcmsgKndvcmssIGNvbnN0IGNoYXIgKm5hbWUsIHVtb2RlX3QgbW9kZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NTg0CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlbHZpbmcgaW50byB0aGUgS2VybmVsJiMzOTtzIEZpbGUgU3lzdGVtIENyZWF0aW9uIE1lY2hhbmlzbXMqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoZSBvcmlnaW5zIG9mIGB2ZnNfY3JlYXRlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGl0JiMzOTtzIGNhbGxlZCBieSBgZmlsZW5hbWVfbWtub2RhdGAsIHdoaWNoIGlzIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIGZvciB0aGUgYG1rbm9kYCBzeXN0ZW0gY2FsbC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBCdXQgdGhlbiBJIHN0YXJ0ZWQgdGhpbmtpbmcgYWJvdXQgYGRlbnRyeV9jcmVhdGVgLiBNeSBtZW1vcnkgaXMgYSBiaXQgZnV6enkgb24gdGhpcywgYW5kIEkgbmVlZCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nLiBJIGluaXRpYWxseSBjb25zaWRlcmVkIGlmIGBkZW50cnlfY3JlYXRlYCB3YXMgaW52b2x2ZWQgaW4gYG9wZW5gIGluIHNvbWUgY2FzZXMg4oCTIHRoYXQgZmVlbHMgd3JvbmcuIEFoLCByaWdodCEgSSByZWNhbGwgYGRlbnRyeV9jcmVhdGVgIGlzIHVzZWQgYnkgYHBhdGhfb3BlbmF0YC4gV2FpdCwgbm8gdGhhdCBpc24mIzM5O3QgY29ycmVjdC4gSSBrbm93IEkgaGF2ZSBzZWVuIGl0IGluIG90aGVyIGNvZGUgcGF0aHMuIE9rYXksIGxldCBtZSB0aGluay4gQWghIGBjYWNoZWZpbGVzYCwgYG92ZXJsYXlmc2AsIGBuZnNkYCwgYW5kIGBrc21iZGAgYWxsIHVzZSBgZGVudHJ5X2NyZWF0ZWAuIFRob3NlIGFyZSBhbGwgaW50ZXJlc3RpbmcgdXNlIGNhc2VzLiBgY2FjaGVmaWxlc2AsIG5vdyB0aGF0JiMzOTtzIGludHJpZ3VpbmcuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIG9mIGBjYWNoZWZpbGVzYCBhbmQgdGhlIGRpcmVjdG9yeSBlbnRyeSBjYWNoZS4gSSYjMzk7ZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBjb2RlIHRvIGNvbmZpcm0gaWYgbXkgdW5kZXJzdGFuZGluZyBpcyBjb3JyZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZW50cnlfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25hbWVpLmM9NTAwMz1FWFBPUlRfU1lNQk9MKHN0YXJ0X2NyZWF0aW5nX3VzZXJfcGF0aCk7XG4tLVxuZnMvbmFtZWkuYy01MDA1LS8qKlxuZnMvbmFtZWkuYzo1MDA2OiAqIGRlbnRyeV9jcmVhdGUgLSBDcmVhdGUgYW5kIG9wZW4gYSBmaWxlXG5mcy9uYW1laS5jLTUwMDctICogQHBhdGg6IHBhdGggdG8gY3JlYXRlXG4tLVxuZnMvbmFtZWkuYy01MDIxLSAqL1xuZnMvbmFtZWkuYzo1MDIyOnN0cnVjdCBmaWxlICpkZW50cnlfY3JlYXRlKHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSxcbmZzL25hbWVpLmMtNTAyMy1cdFx0XHQgICBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZClcbi0tXG5mcy9uYW1laS5jLTUwODAtfVxuZnMvbmFtZWkuYzo1MDgxOkVYUE9SVF9TWU1CT0woZGVudHJ5X2NyZWF0ZSk7XG5mcy9uYW1laS5jLTUwODItXG4tLVxuZnMvbmZzZC9uZnM0cHJvYy5jPTIwNT1uZnNkNF92ZnNfY3JlYXRlKHN0cnVjdCBzdmNfZmggKmZocCwgc3RydWN0IGRlbnRyeSAqKmNoaWxkLFxuLS1cbmZzL25mc2QvbmZzNHByb2MuYy0yMjgtXHRwYXRoLmRlbnRyeSA9ICpjaGlsZDtcbmZzL25mc2QvbmZzNHByb2MuYzoyMjk6XHRmaWxwID0gZGVudHJ5X2NyZWF0ZShcdTAwMjZwYXRoLCBvZmxhZ3MsIG9wZW4tXHUwMDNlb3BfaWF0dHIuaWFfbW9kZSxcbmZzL25mc2QvbmZzNHByb2MuYy0yMzAtXHRcdFx0ICAgICBjdXJyZW50X2NyZWQoKSk7XG4tLVxuZnMvb3ZlcmxheWZzL2Rpci5jPTU5OT1zdGF0aWMgY29uc3Qgc3RydWN0IGNyZWQgKm92bF9vdmVycmlkZV9jcmVhdG9yX2NyZWRzKGNvbnN0IHN0cnVjdCBjcmVkICpvcmlnaW5hbF9jcmVkcyxcbi0tXG5mcy9vdmVybGF5ZnMvZGlyLmMtNjEzLVxuZnMvb3ZlcmxheWZzL2Rpci5jOjYxNDpcdGVyciA9IHNlY3VyaXR5X2RlbnRyeV9jcmVhdGVfZmlsZXNfYXMoZGVudHJ5LCBtb2RlLCBcdTAwMjZkZW50cnktXHUwMDNlZF9uYW1lLFxuZnMvb3ZlcmxheWZzL2Rpci5jLTYxNS1cdFx0XHRcdFx0ICAgICAgb3JpZ2luYWxfY3JlZHMsIG92ZXJyaWRlX2NyZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDQ1NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDk2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlZHVuZGFudCAmIzM5O2V4Y2wmIzM5OyBBcmd1bWVudCBpbiBgdmZzX2NyZWF0ZWAqKgoKUmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIGBuZnNkYCB1c2VzIGBkZW50cnlfY3JlYXRlYCBhbmQgYm90aCBgbmZzZGAsIGBrc21iZGAsIGBvdmVybGF5ZnNgLCBgZWNyeXB0ZnNgLCBhbmQgYG1rbm9kYCB1c2UgYHZmc19jcmVhdGVgLiBBbmQgYmVmb3JlIHRoaXMgcGF0Y2gsIHRoZXkgd2VyZSAqYWxsKiBwYXNzaW5nIGB0cnVlYCB0byBgdmZzX2NyZWF0ZWAgZm9yIHRoZSBgZXhjbGAgYXJndW1lbnQuICBXYWl0LCBob2xkIG9uLCB3YXNuJiMzOTt0IGB2ZnNfY3JlYXRlYCYjMzk7cyBzaWduYXR1cmUgZGlmZmVyZW50IGJlZm9yZSB0aGUgcGF0Y2g/IExldCBtZSBjaGVja+KApiBZZWFoLCBgaW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIHdhbnRfZXhjbClgLiBCdXQgdGhlIHBhdGNoIGRpZmYgaW4gYGZzL25hbWVpLmNgIHNob3dzIHRoZSBgdmZzX2NyZWF0ZWAgY2FsbCBjaGFuZ2UhIEl0JiMzOTtzIG5vdCB0YWtpbmcgdGhhdCBhcmd1bWVudCBhdCBhbGwgbm93ISBJdCB3YXMgKmFsd2F5cyogcGFzc2luZyBgdHJ1ZWAhCgpTbywgdGhlIG9yaWdpbmFsIGB2ZnNfY3JlYXRlYCBpbXBsZW1lbnRhdGlvbiBkaWRuJiMzOTt0IGV2ZW4gKmhhdmUqIHRoYXQgYHdhbnRfZXhjbGAgYXJndW1lbnQuIEl0IHdhcyBqdXN0IGltcGxpY2l0bHkgcGFzc2luZyBgdHJ1ZWAgdG8gYGRpci0mZ3Q7aV9vcC0mZ3Q7Y3JlYXRlYC4gTWVhbndoaWxlLCBgbG9va3VwX29wZW5gIHdhcyB0YWtpbmcgdGhlIGBvcGVuX2ZsYWcgJmFtcDsgT19FWENMYCB2YWx1ZS4KClNvLCB0aGUgKm9ubHkqIHBsYWNlIHRoZSBgZXhjbGAgdmFsdWUgY291bGQgYmUgYGZhbHNlYCB3YXMgaW4gYGxvb2t1cF9vcGVuYCBpZiBgT19FWENMYCB3YXNuJiMzOTt0IHNldC4gIEFuZCBjcml0aWNhbGx5LCB3aGVuIGBsb29rdXBfb3BlbmAgaXMgY2FsbGVkLCB0aGUgVkZTIGlzIGhvbGRpbmcgYGlub2RlX2xvY2soZGlyLSZndDtkX2lub2RlKWAuIFRoaXMgbWVhbnMgY29uY3VycmVudCBjcmVhdGlvbiBvbiB0aGUgc2FtZSBtYWNoaW5lIGlzIGltcG9zc2libGUuICBJZiBpdCYjMzk7cyBhIGxvY2FsIGZpbGVzeXN0ZW0sIGBjcmVhdGVgIGp1c3TigKYgY3JlYXRlcyB0aGUgZmlsZS4gVGhlIGBleGNsYCBhcmd1bWVudCBpcyBpcnJlbGV2YW50LCBzaW5jZSB0aGUgZmlsZSBkb2VzbiYjMzk7dCBleGlzdCB5ZXQgYW55d2F5ISAgSWYgaXQmIzM5O3MgYSBuZXR3b3JrIGZpbGVzeXN0ZW0sIGl0ICpzaG91bGQqIGJlIHVzaW5nIGBhdG9taWNfb3BlbmAgdG8gaGFuZGxlIGNvbmN1cnJlbnQgY3JlYXRpb25zIGZyb20gZGlmZmVyZW50IG1hY2hpbmVzLiBJZiBpdCBkb2VzbiYjMzk7dCwgaXQganVzdCBjYWxscyBgY3JlYXRlYCwgYW5kIGlmIGl0IGZhaWxzIHdpdGggYEVFWElTVGAsIGBsb29rdXBfb3BlbmAgcmV0dXJucyBgRUVYSVNUYC4gKFdoaWNoIGlzIGluY29ycmVjdCBmb3IgYSBub24tZXhjbHVzaXZlIGNyZWF0aW9uLCBidXQgdGhhdCYjMzk7cyBhIGZpbGVzeXN0ZW0gYnVnIGZvciBub3QgaW1wbGVtZW50aW5nIGBhdG9taWNfb3BlbmApLgoKVGhlcmVmb3JlLCB0aGF0IGBleGNsYCBhcmd1bWVudCB0byBgY3JlYXRlYCB3YXMgZW50aXJlbHkgcmVkdW5kYW50LiBJdCYjMzk7cyB1c2VsZXNzLiBUaGF0JiMzOTtzIHdoeSBpdCB3YXMgcmVtb3ZlZC4gIE5vIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgbmVlZGVkIHRvIGJlIGZ1enplZCBoZXJlOyBpdCYjMzk7cyBhIHB1cmUgQVBJIHJlZmFjdG9yaW5nLCByZW1vdmluZyBhIHVzZWxlc3MgYXJndW1lbnQuIFRoZSBrZXJuZWwmIzM5O3MgKmJlaGF2aW9yKiBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIGJlZm9yZS4KClRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCBmaWxlc3lzdGVtcyB0aGF0IHByZXZpb3VzbHkgKmNoZWNrZWQqIHRoYXQgYGV4Y2xgIHZhbHVlIOKAkyBsaWtlIGBnZnMyYCwgYG5mc2AsIGFuZCBgdmJveHNmYCDigJMgYXJlIG5vdyBqdXN0IGhhcmRjb2RpbmcgYDFgLCBgT19FWENMYCwgb3IgYHRydWVgIGluIHRoZWlyIGludGVybmFsIGNhbGxzIHdoZW4gY2FsbGVkIGZyb20gYGNyZWF0ZWAuCgpXYWl0LCBidXQgYGdmczJfY3JlYXRlYCBub3cgcGFzc2VzIGAxYCB0byBgZ2ZzMl9jcmVhdGVfaW5vZGVgLiBQcmV2aW91c2x5LCBpdCBwYXNzZWQgYGV4Y2xgLiBgZ2ZzMl9jcmVhdGVgIHdhcyAqb25seSogY2FsbGVkIGZyb20gYHZmc19jcmVhdGVgICh3aGljaCBwYXNzZWQgYHRydWVgKSBvciBgbG9va3VwX29wZW5gICh3aGljaCBwYXNzZWQgYG9wZW5fZmxhZyAmYW1wOyBPX0VYQ0xgKS4gQWghICBJZiBgbG9va3VwX29wZW5gIHBhc3NlZCBgb3Blbl9mbGFnICZhbXA7IE9fRVhDTGAgdG8gYGdmczJfY3JlYXRlYCBhbmQgYE9fRVhDTGAgd2FzICpub3QqIHNldCwgYGdmczJfY3JlYXRlYCB3b3VsZCByZWNlaXZlIGBmYWxzZWAuIFRoZW4gaXQgd291bGQgcGFzcyBgMGAgdG8gYGdmczJfY3JlYXRlX2lub2RlYC4gTm93LCBpdCBhbHdheXMgcGFzc2VzIGAxYC4gRG9lcyBgZ2ZzMl9jcmVhdGVfaW5vZGVgIGJlaGF2ZSBkaWZmZXJlbnRseSBpZiBgZXhjbGAgaXMgYDFgIHZlcnN1cyBgMGA/IExldCYjMzk7cyBjaGVjayBgZ2ZzMl9jcmVhdGVfaW5vZGVg4oCmCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZ2ZzMi9pbm9kZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzAwOlx0c3RhdGljIGludCBnZnMyX2NyZWF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIDcwMTpcdFx0XHRcdCAgICAgc3RydWN0IGZpbGUgKmZpbGUsXG4gNzAyOlx0XHRcdFx0ICAgICB1bW9kZV90IG1vZGUsIGRldl90IGRldiwgY29uc3QgY2hhciAqc3ltbmFtZSxcbiA3MDM6XHRcdFx0XHQgICAgIHVuc2lnbmVkIGludCBzaXplLCBpbnQgZXhjbClcbiA3MDQ6XHR7XG4gNzA1Olx0XHRjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSA9IFx1MDAyNmRlbnRyeS1cdTAwM2VkX25hbWU7XG4gNzA2Olx0XHRzdHJ1Y3QgcG9zaXhfYWNsICpkZWZhdWx0X2FjbCwgKmFjbDtcbiA3MDc6XHRcdHN0cnVjdCBnZnMyX2hvbGRlciBkX2doLCBnaDtcbiA3MDg6XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMO1xuIDcwOTpcdFx0c3RydWN0IGdmczJfaW5vZGUgKmRpcCA9IEdGUzJfSShkaXIpLCAqaXA7XG4gNzEwOlx0XHRzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoXHUwMDI2ZGlwLVx1MDAzZWlfaW5vZGUpO1xuIDcxMTpcdFx0c3RydWN0IGdmczJfZ2xvY2sgKmlvX2dsO1xuIDcxMjpcdFx0aW50IGVycm9yLCBkZWFsbG9jX2Vycm9yO1xuIDcxMzpcdFx0dTMyIGFmbGFncyA9IDA7XG4gNzE0Olx0XHR1bnNpZ25lZCBibG9ja3MgPSAxO1xuIDcxNTpcdFx0c3RydWN0IGdmczJfZGlyYWRkIGRhID0geyAuYmggPSBOVUxMLCAuc2F2ZV9sb2MgPSAxLCB9O1xuIDcxNjpcdFx0Ym9vbCB4YXR0cl9pbml0aWFsaXplZCA9IGZhbHNlO1xuIDcxNzpcdFxuIDcxODpcdFx0aWYgKCFuYW1lLVx1MDAzZWxlbiB8fCBuYW1lLVx1MDAzZWxlbiBcdTAwM2UgR0ZTMl9GTkFNRVNJWkUpXG4gNzE5Olx0XHRcdHJldHVybiAtRU5BTUVUT09MT05HO1xuIDcyMDpcdFxuIDcyMTpcdFx0ZXJyb3IgPSBnZnMyX3FhX2dldChkaXApO1xuIDcyMjpcdFx0aWYgKGVycm9yKVxuIDcyMzpcdFx0XHRyZXR1cm4gZXJyb3I7XG4gNzI0Olx0XG4gNzI1Olx0XHRlcnJvciA9IGdmczJfcmluZGV4X3VwZGF0ZShzZHApO1xuIDcyNjpcdFx0aWYgKGVycm9yKVxuIDcyNzpcdFx0XHRnb3RvIGZhaWw7XG4gNzI4Olx0XG4gNzI5Olx0XHRlcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChkaXAtXHUwMDNlaV9nbCwgTE1fU1RfRVhDTFVTSVZFLCAwLCBcdTAwMjZkX2doKTtcbiA3MzA6XHRcdGlmIChlcnJvcilcbiA3MzE6XHRcdFx0Z290byBmYWlsO1xuIDczMjpcdFx0Z2ZzMl9ob2xkZXJfbWFya191bmluaXRpYWxpemVkKFx1MDAyNmdoKTtcbiA3MzM6XHRcbiA3MzQ6XHRcdGVycm9yID0gY3JlYXRlX29rKGRpcCwgbmFtZSwgbW9kZSk7XG4gNzM1Olx0XHRpZiAoZXJyb3IpXG4gNzM2Olx0XHRcdGdvdG8gZmFpbF9ndW5sb2NrO1xuIDczNzpcdFxuIDczODpcdFx0aW5vZGUgPSBnZnMyX2Rpcl9zZWFyY2goZGlyLCBcdTAwMjZkZW50cnktXHUwMDNlZF9uYW1lLCAhU19JU1JFRyhtb2RlKSB8fCBleGNsKTtcbiA3Mzk6XHRcdGVycm9yID0gUFRSX0VSUihpbm9kZSk7XG4gNzQwOlx0XHRpZiAoIUlTX0VSUihpbm9kZSkpIHtcbiA3NDE6XHRcdFx0aWYgKGZpbGUgXHUwMDI2XHUwMDI2IChmaWxlLVx1MDAzZWZfZmxhZ3MgXHUwMDI2IF9fT19SRUdVTEFSKSBcdTAwMjZcdTAwMjZcbiA3NDI6XHRcdFx0ICAgICFTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiA3NDM6XHRcdFx0XHRpcHV0KGlub2RlKTtcbiA3NDQ6XHRcdFx0XHRpbm9kZSA9IE5VTEw7XG4gNzQ1Olx0XHRcdFx0ZXJyb3IgPSAtRUZUWVBFO1xuIDc0NjpcdFx0XHRcdGdvdG8gZmFpbF9ndW5sb2NrO1xuIDc0NzpcdFx0XHR9XG4gNzQ4Olx0XHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiA3NDk6XHRcdFx0XHRpcHV0KGlub2RlKTtcbiA3NTA6XHRcdFx0XHRpbm9kZSA9IE5VTEw7XG4gNzUxOlx0XHRcdFx0ZXJyb3IgPSAtRUlTRElSO1xuIDc1MjpcdFx0XHRcdGdvdG8gZmFpbF9ndW5sb2NrO1xuIDc1MzpcdFx0XHR9XG4gNzU0Olx0XHRcdGRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7XG4gNzU1Olx0XHRcdGVycm9yID0gMDtcbiA3NTY6XHRcdFx0aWYgKGZpbGUpIHtcbiA3NTc6XHRcdFx0XHRpZiAoU19JU1JFRyhpbm9kZS1cdTAwM2VpX21vZGUpKVxuIDc1ODpcdFx0XHRcdFx0ZXJyb3IgPSBmaW5pc2hfb3BlbihmaWxlLCBkZW50cnksIGdmczJfb3Blbl9jb21tb24pO1xuIDc1OTpcdFx0XHRcdGVsc2VcbiA3NjA6XHRcdFx0XHRcdGVycm9yID0gZmluaXNoX25vX29wZW4oZmlsZSwgTlVMTCk7XG4gNzYxOlx0XHRcdH1cbiA3NjI6XHRcdFx0Z2ZzMl9nbG9ja19kcV91bmluaXQoXHUwMDI2ZF9naCk7XG4gNzYzOlx0XHRcdGdvdG8gZmFpbDtcbiA3NjQ6XHRcdH0gZWxzZSBpZiAoZXJyb3IgIT0gLUVOT0VOVCkge1xuIDc2NTpcdFx0XHRnb3RvIGZhaWxfZ3VubG9jaztcbiA3NjY6XHRcdH1cbiA3Njc6XHRcbiA3Njg6XHRcdGVycm9yID0gZ2ZzMl9kaXJhZGRfYWxsb2NfcmVxdWlyZWQoZGlyLCBuYW1lLCBcdTAwMjZkYSk7XG4gNzY5Olx0XHRpZiAoZXJyb3IgXHUwMDNjIDApXG4gNzcwOlx0XHRcdGdvdG8gZmFpbF9ndW5sb2NrO1xuIDc3MTpcdFxuIDc3MjpcdFx0aW5vZGUgPSBuZXdfaW5vZGUoc2RwLVx1MDAzZXNkX3Zmcyk7XG4gNzczOlx0XHRlcnJvciA9IC1FTk9NRU07XG4gNzc0Olx0XHRpZiAoIWlub2RlKVxuIDc3NTpcdFx0XHRnb3RvIGZhaWxfZ3VubG9jaztcbiA3NzY6XHRcdGdmczJfc2V0dXBfaW5vZGUoaW5vZGUpO1xuIDc3NzpcdFx0aXAgPSBHRlMyX0koaW5vZGUpO1xuIDc3ODpcdFxuIDc3OTpcdFx0ZXJyb3IgPSBwb3NpeF9hY2xfY3JlYXRlKGRpciwgXHUwMDI2bW9kZSwgXHUwMDI2ZGVmYXVsdF9hY2wsIFx1MDAyNmFjbCk7XG4gNzgwOlx0XHRpZiAoZXJyb3IpXG4gNzgxOlx0XHRcdGdvdG8gZmFpbF9ndW5sb2NrO1xuIDc4MjpcdFxuIDc4MzpcdFx0ZXJyb3IgPSBnZnMyX3FhX2dldChpcCk7XG4gNzg0Olx0XHRpZiAoZXJyb3IpXG4gNzg1Olx0XHRcdGdvdG8gZmFpbF9mcmVlX2FjbHM7XG4gNzg2Olx0XG4gNzg3Olx0XHRpbm9kZS1cdTAwM2VpX21vZGUgPSBtb2RlO1xuIDc4ODpcdFx0c2V0X25saW5rKGlub2RlLCBTX0lTRElSKG1vZGUpID8gMiA6IDEpO1xuIDc4OTpcdFx0aW5vZGUtXHUwMDNlaV9yZGV2ID0gZGV2O1xuIDc5MDpcdFx0aW5vZGUtXHUwMDNlaV9zaXplID0gc2l6ZTtcbiA3OTE6XHRcdHNpbXBsZV9pbm9kZV9pbml0X3RzKGlub2RlKTtcbiA3OTI6XHRcdG11bmdlX21vZGVfdWlkX2dpZChkaXAsIGlub2RlKTtcbiA3OTM6XHRcdGNoZWNrX2FuZF91cGRhdGVfZ29hbChkaXApO1xuIDc5NDpcdFx0aXAtXHUwMDNlaV9nb2FsID0gZGlwLVx1MDAzZWlfZ29hbDtcbiA3OTU6XHRcdGlwLVx1MDAzZWlfZGlza2ZsYWdzID0gMDtcbiA3OTY6XHRcdGlwLVx1MDAzZWlfZWF0dHIgPSAwO1xuIDc5NzpcdFx0aXAtXHUwMDNlaV9oZWlnaHQgPSAwO1xuIDc5ODpcdFx0aXAtXHUwMDNlaV9kZXB0aCA9IDA7XG4gNzk5Olx0XHRpcC1cdTAwM2VpX2VudHJpZXMgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mzg2MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDU3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9ucyBvZiBgZXhjbGAgaW4gRmlsZSBDcmVhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoaXMgYGV4Y2xgIGZsYWcgaXMgYmVpbmcgcGFzc2VkIGFyb3VuZCBpbiB0aGUgZmlsZSBjcmVhdGlvbiBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgaW4gcmVsYXRpb24gdG8gYGdmczJfY3JlYXRlX2lub2RlYC4gSSBzZWUgaXQgYmVpbmcgdXNlZCBpbiBgZ2ZzMl9kaXJfc2VhcmNoYCB2aWE6CmBgYGMKCWlub2RlID0gZ2ZzMl9kaXJfc2VhcmNoKGRpciwgJmFtcDtkZW50cnktJmd0O2RfbmFtZSwgIVNfSVNSRUcobW9kZSkgfHwgZXhjbCk7CmBgYApNeSBpbml0aWFsIHRob3VnaHQgd2FzLCAmIzM0O0hleSwgaWYgYGdmczJfY3JlYXRlYCBnZXRzIGNhbGxlZCBieSBgbG9va3VwX29wZW5gIHdpdGggYGV4Y2wgPSBmYWxzZWAsIHdvdWxkbiYjMzk7dCB0aGF0IG1lYW4gYGdmczJfY3JlYXRlX2lub2RlYCB3b3VsZCBnZXQgYGV4Y2wgPSAwYD8mIzM0OyBCdXQgdGhlbiwgSSByZW1lbWJlcmVkIHRoYXQgYGdmczJgIGltcGxlbWVudHMgYGF0b21pY19vcGVuYC4gCgpBaGEhIFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsLiBgbG9va3VwX29wZW5gIGNhbGxzIGBnZnMyX2F0b21pY19vcGVuYCwgTk9UIGBnZnMyX2NyZWF0ZWAuIExldCYjMzk7cyBjaGVjayBgZ2ZzMl9hdG9taWNfb3BlbmA6CmBgYGMKc3RhdGljIGludCBnZnMyX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCgkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgZmxhZ3MsCgkJCSAgICB1bW9kZV90IG1vZGUpCnsKCWJvb2wgZXhjbCA9ICEhKGZsYWdzICZhbXA7IE9fRVhDTCk7CgoJaWYgKCFkX2luX2xvb2t1cChkZW50cnkpKQoJCWdvdG8gc2tpcF9sb29rdXA7CgoJcmV0dXJuIGdmczJfY3JlYXRlX2lub2RlKGRpciwgZGVudHJ5LCBmaWxlLCBTX0lGUkVHIHwgbW9kZSwgMCwgTlVMTCwgMCwgZXhjbCk7CmBgYApPa2F5LCBzbyBgZ2ZzMl9hdG9taWNfb3BlbmAgZG9lcyBwYXNzIHRoZSBjb3JyZWN0IGBleGNsYCB2YWx1ZS4gQW5kIHRoaW5raW5nIGl0IHRocm91Z2gsIGBnZnMyX2NyZWF0ZWAgaXMgT05MWSBjYWxsZWQgYnkgYHZmc19jcmVhdGVgLiBBbmQgYHZmc19jcmVhdGVgICphbHdheXMqIHBhc3NlcyBgdHJ1ZWAgZm9yIGBleGNsYC4gU28gdGhlIHNpdHVhdGlvbiwgd2l0aCBgZ2ZzMl9jcmVhdGVgIHBhc3NpbmcgYDFgLCBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIGJlZm9yZS4gVGhhdCBtYWtlcyBzZW5zZS4KCk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgb3RoZXIgZmlsZXN5c3RlbXMuIExldCYjMzk7cyBzdGFydCB3aXRoIGBuZnNgLiBgbmZzYCBpbXBsZW1lbnRzIGBhdG9taWNfb3BlbmAgdG9vLiBUaGUgc2FtZSBsb2dpYyBzaG91bGQgYXBwbHk6IGBuZnNfY3JlYXRlYCBpcyBvbmx5IGNhbGxlZCBieSBgdmZzX2NyZWF0ZWAsIHdoaWNoIGFsd2F5cyBwYXNzZXMgYHRydWVgLiBUaGVyZWZvcmUsIHBhc3NpbmcgYE9fRVhDTGAgaW4gYG5mc19jcmVhdGVgIGlzIGV4YWN0bHkgdGhlIHNhbWUgYmVoYXZpb3IgYXMgYmVmb3JlLiAKCk5vdywgb24gdG8gYHZib3hzZmAuIFNhbWUgcGF0dGVybi4gYHZib3hzZmAgaW1wbGVtZW50cyBgYXRvbWljX29wZW5gLCBzbyBgdmJveHNmX2Rpcl9ta2ZpbGVgIGlzIGNhbGxlZCBieSBgdmZzX2NyZWF0ZWAsIHdoaWNoICphbHdheXMqIHBhc3NlcyBgdHJ1ZWAuIFNvLCBwYXNzaW5nIGB0cnVlYCBpcyB0aGUgc2FtZSBiZWhhdmlvci4KCkZpbmFsbHksIGBjaWZzYC4gYGNpZnNgIGFsc28gaW1wbGVtZW50cyBgYXRvbWljX29wZW5gLiBUaGlzIG1lYW5zIGBjaWZzX2NyZWF0ZWAgaXMgKmFsc28qIGNhbGxlZCBvbmx5IGJ5IGB2ZnNfY3JlYXRlYC4gV2hpY2ggYWx3YXlzIHBhc3NlZCBgdHJ1ZWAgZm9yIGBleGNsYC4gQnV0LCB3YWl0IGEgbWludXRlLCBJIGRvbiYjMzk7dCByZW1lbWJlciBgY2lmc19jcmVhdGVgIGV2ZW4gKnVzaW5nKiBgZXhjbGAgYmVmb3JlLiBOZWVkIHRvIHZlcmlmeSB0aGF0Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE4OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NpZnNfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvc21iL2NsaWVudC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvc21iL2NsaWVudC9jYWNoZWRfZGlyLmM9MTM0PWludCBvcGVuX2NhY2hlZF9kaXIodW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfdGNvbiAqdGNvbixcbi0tXG5mcy9zbWIvY2xpZW50L2NhY2hlZF9kaXIuYy0yNzUtXHRcdC5wYXRoID0gcGF0aCxcbmZzL3NtYi9jbGllbnQvY2FjaGVkX2Rpci5jOjI3NjpcdFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCBDUkVBVEVfTk9UX0ZJTEUpLFxuZnMvc21iL2NsaWVudC9jYWNoZWRfZGlyLmMtMjc3LVx0XHQuZGVzaXJlZF9hY2Nlc3MgPSAgRklMRV9SRUFEX0RBVEEgfCBGSUxFX1JFQURfQVRUUklCVVRFUyB8XG4tLVxuZnMvc21iL2NsaWVudC9jaWZzYWNsLmM9MTU3NT1zdGF0aWMgc3RydWN0IHNtYl9udHNkICpnZXRfY2lmc19hY2xfYnlfcGF0aChzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiLFxuLS1cbmZzL3NtYi9jbGllbnQvY2lmc2FjbC5jLTE1OTYtXHRcdC5kZXNpcmVkX2FjY2VzcyA9IFJFQURfQ09OVFJPTCxcbmZzL3NtYi9jbGllbnQvY2lmc2FjbC5jOjE1OTc6XHRcdC5jcmVhdGVfb3B0aW9ucyA9IGNpZnNfY3JlYXRlX29wdGlvbnMoY2lmc19zYiwgMCksXG5mcy9zbWIvY2xpZW50L2NpZnNhY2wuYy0xNTk4LVx0XHQuZGlzcG9zaXRpb24gPSBGSUxFX09QRU4sXG4tLVxuZnMvc21iL2NsaWVudC9jaWZzYWNsLmM9MTY0MD1pbnQgc2V0X2NpZnNfYWNsKHN0cnVjdCBzbWJfbnRzZCAqcG5udHNkLCBfX3UzMiBhY2xsZW4sXG4tLVxuZnMvc21iL2NsaWVudC9jaWZzYWNsLmMtMTY2OC1cdFx0LmRlc2lyZWRfYWNjZXNzID0gYWNjZXNzX2ZsYWdzLFxuZnMvc21iL2NsaWVudC9jaWZzYWNsLmM6MTY2OTpcdFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCAwKSxcbmZzL3NtYi9jbGllbnQvY2lmc2FjbC5jLTE2NzAtXHRcdC5kaXNwb3NpdGlvbiA9IEZJTEVfT1BFTixcbi0tXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jPTEyMjg9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2lmc19kaXJfaW5vZGVfb3BzID0ge1xuZnMvc21iL2NsaWVudC9jaWZzZnMuYzoxMjI5Olx0LmNyZWF0ZSA9IGNpZnNfY3JlYXRlLFxuZnMvc21iL2NsaWVudC9jaWZzZnMuYy0xMjMwLVx0LmF0b21pY19vcGVuID0gY2lmc19hdG9taWNfb3Blbixcbi0tXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5oPTU1PXN0cnVjdCBpbm9kZSAqY2lmc19yb290X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG5mcy9zbWIvY2xpZW50L2NpZnNmcy5oOjU2OmludCBjaWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5oLTU3LVx0XHRzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbi0tXG5mcy9zbWIvY2xpZW50L2NpZnNnbG9iLmg9MjIzMj1zdGF0aWMgaW5saW5lIHZvaWQgbW92ZV9jaWZzX2luZm9fdG9fc21iMihzdHJ1Y3Qgc21iMl9maWxlX2FsbF9pbmZvICpkc3QsIGNvbnN0IEZJTEVfQUxMX0lORk8gKnNyYylcbi0tXG5mcy9zbWIvY2xpZW50L2NpZnNnbG9iLmgtMjI0OS1cdFx0LmRpc3Bvc2l0aW9uID0gKF9jZCksIFxcXG5mcy9zbWIvY2xpZW50L2NpZnNnbG9iLmg6MjI1MDpcdFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhfY2lmc19zYiwgKF9jbykpLCBcXFxuZnMvc21iL2NsaWVudC9jaWZzZ2xvYi5oLTIyNTEtXHRcdC5tb2RlID0gKF9tb2RlKSwgXFxcbi0tXG5mcy9zbWIvY2xpZW50L2NpZnNwcm90by5oPTM0MD1pbnQgY2lmc19xdWVyeV9tZl9zeW1saW5rKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sXG4tLVxuZnMvc21iL2NsaWVudC9jaWZzcHJvdG8uaC0zNDMtXHRcdFx0ICB1bnNpZ25lZCBpbnQgKnBieXRlc19yZWFkKTtcbmZzL3NtYi9jbGllbnQvY2lmc3Byb3RvLmg6MzQ0OmludCBjaWZzX2NyZWF0ZV9tZl9zeW1saW5rKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sXG5mcy9zbWIvY2xpZW50L2NpZnNwcm90by5oLTM0NS1cdFx0XHQgICBzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiLFxuLS1cbmZzL3NtYi9jbGllbnQvY2lmc3Byb3RvLmg9NDIxPXN0YXRpYyBpbmxpbmUgaW50IGNpZnNfaW52YWxfbmFtZV9kZnNfbGlua19lcnJvcihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLFxuLS1cbmZzL3NtYi9jbGllbnQvY2lmc3Byb3RvLmgtNDMxLVxuZnMvc21iL2NsaWVudC9jaWZzcHJvdG8uaDo0MzI6c3RhdGljIGlubGluZSBpbnQgY2lmc19jcmVhdGVfb3B0aW9ucyhzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiLCBpbnQgb3B0aW9ucylcbmZzL3NtYi9jbGllbnQvY2lmc3Byb3RvLmgtNDMzLXtcbi0tXG5mcy9zbWIvY2xpZW50L2NpZnNzbWIuYz0yOTU0PWludCBjaWZzX3F1ZXJ5X3JlcGFyc2VfcG9pbnQoY29uc3QgdW5zaWduZWQgaW50IHhpZCxcbi0tXG5mcy9zbWIvY2xpZW50L2NpZnNzbWIuYy0yOTg0LVx0XHQuZGVzaXJlZF9hY2Nlc3MgPSBGSUxFX1JFQURfQVRUUklCVVRFUyxcbmZzL3NtYi9jbGllbnQvY2lmc3NtYi5jOjI5ODU6XHRcdC5jcmVhdGVfb3B0aW9ucyA9IGNpZnNfY3JlYXRlX29wdGlvbnMoY2lmc19zYixcbmZzL3NtYi9jbGllbnQvY2lmc3NtYi5jLTI5ODYtXHRcdFx0XHRcdFx0ICAgICAgT1BFTl9SRVBBUlNFX1BPSU5UKSxcbi0tXG5mcy9zbWIvY2xpZW50L2NpZnNzbWIuYy0zMDg0LVxuZnMvc21iL2NsaWVudC9jaWZzc21iLmM6MzA4NTpzdHJ1Y3QgaW5vZGUgKmNpZnNfY3JlYXRlX3JlcGFyc2VfaW5vZGUoc3RydWN0IGNpZnNfb3Blbl9pbmZvX2RhdGEgKmRhdGEsXG5mcy9zbWIvY2xpZW50L2NpZnNzbWIuYy0zMDg2LVx0XHRcdFx0XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL3NtYi9jbGllbnQvY2lmc3NtYi5jPTU4MzM9Q0lGU1NNQlNldFBhdGhJbmZvRkIoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfdGNvbiAqdGNvbixcbi0tXG5mcy9zbWIvY2xpZW50L2NpZnNzbWIuYy01ODQ2LVx0XHQuZGVzaXJlZF9hY2Nlc3MgPSBHRU5FUklDX1dSSVRFLFxuZnMvc21iL2NsaWVudC9jaWZzc21iLmM6NTg0NzpcdFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCAwKSxcbmZzL3NtYi9jbGllbnQvY2lmc3NtYi5jLTU4NDgtXHRcdC5kaXNwb3NpdGlvbiA9IEZJTEVfT1BFTixcbi0tXG5mcy9zbWIvY2xpZW50L2Rpci5jPTIwMT1zdGF0aWMgaW50IF9fY2lmc19kb19jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LFxuLS1cbmZzL3NtYi9jbGllbnQvZGlyLmMtMjQwLVx0XHRcdFx0LyogcXVlcnkgaW5vZGUgaW5mbyAqL1xuZnMvc21iL2NsaWVudC9kaXIuYzoyNDE6XHRcdFx0XHRnb3RvIGNpZnNfY3JlYXRlX2dldF9maWxlX2luZm87XG5mcy9zbWIvY2xpZW50L2Rpci5jLTI0Mi1cdFx0XHR9XG4tLVxuZnMvc21iL2NsaWVudC9kaXIuYy0yNjQtXHRcdFx0XHRDSUZTU01CQ2xvc2UoeGlkLCB0Y29uLCBmaWQtXHUwMDNlbmV0ZmlkKTtcbmZzL3NtYi9jbGllbnQvZGlyLmM6MjY1Olx0XHRcdFx0Z290byBjaWZzX2NyZWF0ZV9nZXRfZmlsZV9pbmZvO1xuZnMvc21iL2NsaWVudC9kaXIuYy0yNjYtXHRcdFx0fVxuZnMvc21iL2NsaWVudC9kaXIuYy0yNjctXHRcdFx0Lyogc3VjY2Vzcywgbm8gbmVlZCB0byBxdWVyeSAqL1xuZnMvc21iL2NsaWVudC9kaXIuYzoyNjg6XHRcdFx0Z290byBjaWZzX2NyZWF0ZV9zZXRfZGVudHJ5O1xuZnMvc21iL2NsaWVudC9kaXIuYy0yNjktXG5mcy9zbWIvY2xpZW50L2Rpci5jLTI3MC1cdFx0Y2FzZSAtRU5PRU5UOlxuZnMvc21iL2NsaWVudC9kaXIuYzoyNzE6XHRcdFx0Z290byBjaWZzX2NyZWF0ZV9nZXRfZmlsZV9pbmZvO1xuZnMvc21iL2NsaWVudC9kaXIuYy0yNzItXG4tLVxuZnMvc21iL2NsaWVudC9kaXIuYy0zNzMtXHRcdC5kZXNpcmVkX2FjY2VzcyA9IGRlc2lyZWRfYWNjZXNzLFxuZnMvc21iL2NsaWVudC9kaXIuYzozNzQ6XHRcdC5jcmVhdGVfb3B0aW9ucyA9IGNpZnNfY3JlYXRlX29wdGlvbnMoY2lmc19zYiwgY3JlYXRlX29wdGlvbnMpLFxuZnMvc21iL2NsaWVudC9kaXIuYy0zNzUtXHRcdC5kaXNwb3NpdGlvbiA9IGRpc3Bvc2l0aW9uLFxuLS1cbmZzL3NtYi9jbGllbnQvZGlyLmMtMzgyLVx0aWYgKHJjKSB7XG5mcy9zbWIvY2xpZW50L2Rpci5jOjM4MzpcdFx0Y2lmc19kYmcoRllJLCBcJiMzNDtjaWZzX2NyZWF0ZSByZXR1cm5lZCAweCV4XFxuXCYjMzQ7LCByYyk7XG5mcy9zbWIvY2xpZW50L2Rpci5jLTM4NC1cdFx0aWYgKHJjID09IC1FQUNDRVMgXHUwMDI2XHUwMDI2IHJkd3JfZm9yX2ZzY2FjaGUgPT0gMSkge1xuLS1cbmZzL3NtYi9jbGllbnQvZGlyLmMtNDI5LVxuZnMvc21iL2NsaWVudC9kaXIuYzo0MzA6Y2lmc19jcmVhdGVfZ2V0X2ZpbGVfaW5mbzpcbmZzL3NtYi9jbGllbnQvZGlyLmMtNDMxLVx0Lyogc2VydmVyIG1pZ2h0IG1hc2sgbW9kZSBzbyB3ZSBoYXZlIHRvIHF1ZXJ5IGZvciBpdCAqL1xuLS1cbmZzL3NtYi9jbGllbnQvZGlyLmMtNDU4LSNpZmRlZiBDT05GSUdfQ0lGU19BTExPV19JTlNFQ1VSRV9MRUdBQ1lcbmZzL3NtYi9jbGllbnQvZGlyLmM6NDU5OmNpZnNfY3JlYXRlX3NldF9kZW50cnk6XG5mcy9zbWIvY2xpZW50L2Rpci5jLTQ2MC0jZW5kaWYgLyogQ09ORklHX0NJRlNfQUxMT1dfSU5TRUNVUkVfTEVHQUNZICovXG4tLVxuZnMvc21iL2NsaWVudC9kaXIuYz01MjA9aW50IGNpZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LFxuLS1cbmZzL3NtYi9jbGllbnQvZGlyLmMtNjQ2LSAqL1xuZnMvc21iL2NsaWVudC9kaXIuYzo2NDc6aW50IGNpZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbmZzL3NtYi9jbGllbnQvZGlyLmMtNjQ4LVx0XHRzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSwgdW1vZGVfdCBtb2RlKVxuLS1cbmZzL3NtYi9jbGllbnQvZGlyLmMtNjY4LVxuZnMvc21iL2NsaWVudC9kaXIuYzo2Njk6XHRjaWZzX2RiZyhGWUksIFwmIzM0O2NpZnNfY3JlYXRlIHBhcmVudCBpbm9kZSA9IDB4JXAgbmFtZSBpczogJXBkIGFuZCBkZW50cnkgPSAweCVwXFxuXCYjMzQ7LFxuZnMvc21iL2NsaWVudC9kaXIuYy02NzAtXHRcdCBkaXIsIGRpcmVudHJ5LCBkaXJlbnRyeSk7XG4tLVxuZnMvc21iL2NsaWVudC9maWxlLmM9NTQ3PXN0YXRpYyBpbnQgY2lmc19udF9vcGVuKGNvbnN0IGNoYXIgKmZ1bGxfcGF0aCwgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYixcbi0tXG5mcy9zbWIvY2xpZW50L2ZpbGUuYy02MDAtXHRcdC5kZXNpcmVkX2FjY2VzcyA9IGRlc2lyZWRfYWNjZXNzLFxuZnMvc21iL2NsaWVudC9maWxlLmM6NjAxOlx0XHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIGNyZWF0ZV9vcHRpb25zKSxcbmZzL3NtYi9jbGllbnQvZmlsZS5jLTYwMi1cdFx0LmRpc3Bvc2l0aW9uID0gZGlzcG9zaXRpb24sXG4tLVxuZnMvc21iL2NsaWVudC9maWxlLmM9MTIzMz1jaWZzX3Jlb3Blbl9maWxlKHN0cnVjdCBjaWZzRmlsZUluZm8gKmNmaWxlLCBib29sIGNhbl9mbHVzaClcbi0tXG5mcy9zbWIvY2xpZW50L2ZpbGUuYy0xMzI4LVx0XHQuZGVzaXJlZF9hY2Nlc3MgPSBkZXNpcmVkX2FjY2VzcyxcbmZzL3NtYi9jbGllbnQvZmlsZS5jOjEzMjk6XHRcdC5jcmVhdGVfb3B0aW9ucyA9IGNpZnNfY3JlYXRlX29wdGlvbnMoY2lmc19zYiwgY3JlYXRlX29wdGlvbnMpLFxuZnMvc21iL2NsaWVudC9maWxlLmMtMTMzMC1cdFx0LmRpc3Bvc2l0aW9uID0gZGlzcG9zaXRpb24sXG4tLVxuZnMvc21iL2NsaWVudC9pbm9kZS5jPTI2OT1jaWZzX3VuaXhfYmFzaWNfdG9fZmF0dHIoc3RydWN0IGNpZnNfZmF0dHIgKmZhdHRyLCBGSUxFX1VOSVhfQkFTSUNfSU5GTyAqaW5mbyxcbi0tXG5mcy9zbWIvY2xpZW50L2lub2RlLmMtMzYyLSAqL1xuZnMvc21iL2NsaWVudC9pbm9kZS5jOjM2MzpzdGF0aWMgdm9pZCBjaWZzX2NyZWF0ZV9qdW5jdGlvbl9mYXR0cihzdHJ1Y3QgY2lmc19mYXR0ciAqZmF0dHIsXG5mcy9zbWIvY2xpZW50L2lub2RlLmMtMzY0LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvc21iL2NsaWVudC9pbm9kZS5jPTQwOD1jaWZzX2dldF9maWxlX2luZm9fdW5peChzdHJ1Y3QgZmlsZSAqZmlscClcbi0tXG5mcy9zbWIvY2xpZW50L2lub2RlLmMtNDMyLVx0fSBlbHNlIGlmIChyYyA9PSAtRVJFTU9URSkge1xuZnMvc21iL2NsaWVudC9pbm9kZS5jOjQzMzpcdFx0Y2lmc19jcmVhdGVfanVuY3Rpb25fZmF0dHIoXHUwMDI2ZmF0dHIsIGlub2RlLVx1MDAzZWlfc2IpO1xuZnMvc21iL2NsaWVudC9pbm9kZS5jLTQzNC1cdH0gZWxzZVxuLS1cbmZzL3NtYi9jbGllbnQvaW5vZGUuYz00NDQ9c3RhdGljIGludCBjaWZzX2dldF91bml4X2ZhdHRyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZ1bGxfcGF0aCxcbi0tXG5mcy9zbWIvY2xpZW50L2lub2RlLmMtNDczLVx0fSBlbHNlIGlmIChyYyA9PSAtRVJFTU9URSkge1xuZnMvc21iL2NsaWVudC9pbm9kZS5jOjQ3NDpcdFx0Y2lmc19jcmVhdGVfanVuY3Rpb25fZmF0dHIoZmF0dHIsIHNiKTtcbmZzL3NtYi9jbGllbnQvaW5vZGUuYy00NzUtXHRcdHJjID0gMDtcbi0tXG5mcy9zbWIvY2xpZW50L2lub2RlLmM9NTM1PWNpZnNfc2Z1X3R5cGUoc3RydWN0IGNpZnNfZmF0dHIgKmZhdHRyLCBjb25zdCBjaGFyICpwYXRoLFxuLS1cbmZzL3NtYi9jbGllbnQvaW5vZGUuYy01NzUtXHRcdC5kZXNpcmVkX2FjY2VzcyA9IEdFTkVSSUNfUkVBRCxcbmZzL3NtYi9jbGllbnQvaW5vZGUuYzo1NzY6XHRcdC5jcmVhdGVfb3B0aW9ucyA9IGNpZnNfY3JlYXRlX29wdGlvbnMoY2lmc19zYiwgQ1JFQVRFX05PVF9ESVIpLFxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTU3Ny1cdFx0LmRpc3Bvc2l0aW9uID0gRklMRV9PUEVOLFxuLS1cbmZzL3NtYi9jbGllbnQvaW5vZGUuYz05ODA9Y2lmc19nZXRfZmlsZV9pbmZvKHN0cnVjdCBmaWxlICpmaWxwKVxuLS1cbmZzL3NtYi9jbGllbnQvaW5vZGUuYy0xMDE4LVx0Y2FzZSAtRVJFTU9URTpcbmZzL3NtYi9jbGllbnQvaW5vZGUuYzoxMDE5Olx0XHRjaWZzX2NyZWF0ZV9qdW5jdGlvbl9mYXR0cihcdTAwMjZmYXR0ciwgaW5vZGUtXHUwMDNlaV9zYik7XG5mcy9zbWIvY2xpZW50L2lub2RlLmMtMTAyMC1cdFx0YnJlYWs7XG4tLVxuZnMvc21iL2NsaWVudC9pbm9kZS5jPTExNzI9c3RhdGljIGludCByZXBhcnNlX2luZm9fdG9fZmF0dHIoc3RydWN0IGNpZnNfb3Blbl9pbmZvX2RhdGEgKmRhdGEsXG4tLVxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTEyMTQtXHRcdGlmIChsZTMyX3RvX2NwdShkYXRhLVx1MDAzZWZpLkF0dHJpYnV0ZXMpIFx1MDAyNiBBVFRSX0RJUkVDVE9SWSkge1xuZnMvc21iL2NsaWVudC9pbm9kZS5jOjEyMTU6XHRcdFx0Y2lmc19jcmVhdGVfanVuY3Rpb25fZmF0dHIoZmF0dHIsIHNiKTtcbmZzL3NtYi9jbGllbnQvaW5vZGUuYy0xMjE2LVx0XHRcdGdvdG8gb3V0O1xuLS1cbmZzL3NtYi9jbGllbnQvaW5vZGUuYy0xMjM5LVx0XHRcdFx0cmMgPSAwO1xuZnMvc21iL2NsaWVudC9pbm9kZS5jOjEyNDA6XHRcdFx0XHRjaWZzX2NyZWF0ZV9qdW5jdGlvbl9mYXR0cihmYXR0ciwgc2IpO1xuZnMvc21iL2NsaWVudC9pbm9kZS5jLTEyNDEtXHRcdFx0XHRnb3RvIG91dDtcbi0tXG5mcy9zbWIvY2xpZW50L2lub2RlLmM9MTI3Mj1zdGF0aWMgaW50IGNpZnNfZ2V0X2ZhdHRyKHN0cnVjdCBjaWZzX29wZW5faW5mb19kYXRhICpkYXRhLFxuLS1cbmZzL3NtYi9jbGllbnQvaW5vZGUuYy0xMzI3LVx0XHQvKiBERlMgbGluaywgbm8gbWV0YWRhdGEgYXZhaWxhYmxlIG9uIHRoaXMgc2VydmVyICovXG5mcy9zbWIvY2xpZW50L2lub2RlLmM6MTMyODpcdFx0Y2lmc19jcmVhdGVfanVuY3Rpb25fZmF0dHIoZmF0dHIsIHNiKTtcbmZzL3NtYi9jbGllbnQvaW5vZGUuYy0xMzI5LVx0XHRyYyA9IDA7XG4tLVxuZnMvc21iL2NsaWVudC9pbm9kZS5jPTE0NjM9c3RhdGljIGludCBzbWIzMTFfcG9zaXhfZ2V0X2ZhdHRyKHN0cnVjdCBjaWZzX29wZW5faW5mb19kYXRhICpkYXRhLFxuLS1cbmZzL3NtYi9jbGllbnQvaW5vZGUuYy0xNTA2LVx0XHQvKiBERlMgbGluaywgbm8gbWV0YWRhdGEgYXZhaWxhYmxlIG9uIHRoaXMgc2VydmVyICovXG5mcy9zbWIvY2xpZW50L2lub2RlLmM6MTUwNzpcdFx0Y2lmc19jcmVhdGVfanVuY3Rpb25fZmF0dHIoZmF0dHIsIHNiKTtcbmZzL3NtYi9jbGllbnQvaW5vZGUuYy0xNTA4LVx0XHRyYyA9IDA7XG4tLVxuZnMvc21iL2NsaWVudC9pbm9kZS5jPTE4MDU9Y2lmc19yZW5hbWVfcGVuZGluZ19kZWxldGUoY29uc3QgY2hhciAqZnVsbF9wYXRoLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTE4MzctXHRcdC5kZXNpcmVkX2FjY2VzcyA9IERFTEVURSB8IEZJTEVfV1JJVEVfQVRUUklCVVRFUyxcbmZzL3NtYi9jbGllbnQvaW5vZGUuYzoxODM4Olx0XHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIENSRUFURV9OT1RfRElSKSxcbmZzL3NtYi9jbGllbnQvaW5vZGUuYy0xODM5LVx0XHQuZGlzcG9zaXRpb24gPSBGSUxFX09QRU4sXG4tLVxuZnMvc21iL2NsaWVudC9pbm9kZS5jPTI0MzU9Y2lmc19kb19yZW5hbWUoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGRlbnRyeSAqZnJvbV9kZW50cnksXG4tLVxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTI0OTMtXHRcdC5kZXNpcmVkX2FjY2VzcyA9IERFTEVURSxcbmZzL3NtYi9jbGllbnQvaW5vZGUuYzoyNDk0Olx0XHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIENSRUFURV9OT1RfRElSKSxcbmZzL3NtYi9jbGllbnQvaW5vZGUuYy0yNDk1LVx0XHQuZGlzcG9zaXRpb24gPSBGSUxFX09QRU4sXG4tLVxuZnMvc21iL2NsaWVudC9saW5rLmM9MjI3PWNpZnNfcXVlcnlfbWZfc3ltbGluayh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxuLS1cbmZzL3NtYi9jbGllbnQvbGluay5jLTI0Mi1cdFx0LmRlc2lyZWRfYWNjZXNzID0gR0VORVJJQ19SRUFELFxuZnMvc21iL2NsaWVudC9saW5rLmM6MjQzOlx0XHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIENSRUFURV9OT1RfRElSKSxcbmZzL3NtYi9jbGllbnQvbGluay5jLTI0NC1cdFx0LmRpc3Bvc2l0aW9uID0gRklMRV9PUEVOLFxuLS1cbmZzL3NtYi9jbGllbnQvbGluay5jPTI3MT1pbnRcbmZzL3NtYi9jbGllbnQvbGluay5jOjI3MjpjaWZzX2NyZWF0ZV9tZl9zeW1saW5rKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sXG5mcy9zbWIvY2xpZW50L2xpbmsuYy0yNzMtXHRcdCAgICAgICBzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiLCBjb25zdCB1bnNpZ25lZCBjaGFyICpwYXRoLFxuLS1cbmZzL3NtYi9jbGllbnQvbGluay5jLTI4NS1cdFx0LmRlc2lyZWRfYWNjZXNzID0gR0VORVJJQ19XUklURSxcbmZzL3NtYi9jbGllbnQvbGluay5jOjI4NjpcdFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCBDUkVBVEVfTk9UX0RJUiksXG5mcy9zbWIvY2xpZW50L2xpbmsuYy0yODctXHRcdC5kaXNwb3NpdGlvbiA9IEZJTEVfQ1JFQVRFLFxuLS1cbmZzL3NtYi9jbGllbnQvbGluay5jPTMxMj1zbWIzX3F1ZXJ5X21mX3N5bWxpbmsodW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfdGNvbiAqdGNvbixcbi0tXG5mcy9zbWIvY2xpZW50L2xpbmsuYy0zMjktXHRcdC5kZXNpcmVkX2FjY2VzcyA9IEdFTkVSSUNfUkVBRCxcbmZzL3NtYi9jbGllbnQvbGluay5jOjMzMDpcdFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCBDUkVBVEVfTk9UX0RJUiksXG5mcy9zbWIvY2xpZW50L2xpbmsuYy0zMzEtXHRcdC5kaXNwb3NpdGlvbiA9IEZJTEVfT1BFTixcbi0tXG5mcy9zbWIvY2xpZW50L2xpbmsuYz0zNzU9c21iM19jcmVhdGVfbWZfc3ltbGluayh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxuLS1cbmZzL3NtYi9jbGllbnQvbGluay5jLTM5Ny1cdFx0LmRlc2lyZWRfYWNjZXNzID0gR0VORVJJQ19XUklURSxcbmZzL3NtYi9jbGllbnQvbGluay5jOjM5ODpcdFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCBDUkVBVEVfTk9UX0RJUiksXG5mcy9zbWIvY2xpZW50L2xpbmsuYy0zOTktXHRcdC5kaXNwb3NpdGlvbiA9IEZJTEVfQ1JFQVRFLFxuLS1cbmZzL3NtYi9jbGllbnQvcmVwYXJzZS5jPTI0Nz1zdGF0aWMgaW50IGRldGVjdF9kaXJlY3Rvcnlfc3ltbGlua190YXJnZXQoc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYixcbi0tXG5mcy9zbWIvY2xpZW50L3JlcGFyc2UuYy0zMzItXHRvcGxvY2sgPSAwO1xuZnMvc21iL2NsaWVudC9yZXBhcnNlLmM6MzMzOlx0b3Bhcm1zLmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLFxuZnMvc21iL2NsaWVudC9yZXBhcnNlLmMtMzM0LVx0XHRcdFx0XHRcdCAgICBDUkVBVEVfTk9UX0ZJTEUgfCBPUEVOX1JFUEFSU0VfUE9JTlQpO1xuLS1cbmZzL3NtYi9jbGllbnQvcmVwYXJzZS5jLTM1MS1cdFx0b3Bsb2NrID0gMDtcbmZzL3NtYi9jbGllbnQvcmVwYXJzZS5jOjM1MjpcdFx0b3Bhcm1zLmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLFxuZnMvc21iL2NsaWVudC9yZXBhcnNlLmMtMzUzLVx0XHRcdFx0XHRcdFx0ICAgIENSRUFURV9OT1RfRElSIHwgT1BFTl9SRVBBUlNFX1BPSU5UKTtcbi0tXG5mcy9zbWIvY2xpZW50L3JlcGFyc2UuYz0xMjM1PWJvb2wgY2lmc19yZXBhcnNlX3BvaW50X3RvX2ZhdHRyKHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IsXG4tLVxuZnMvc21iL2NsaWVudC9yZXBhcnNlLmMtMTI2Ni1cdFx0XHRyZXR1cm4gZmFsc2U7XG5mcy9zbWIvY2xpZW50L3JlcGFyc2UuYzoxMjY3Olx0XHQvKiBTZWUgY2lmc19jcmVhdGVfanVuY3Rpb25fZmF0dHIoKSAqL1xuZnMvc21iL2NsaWVudC9yZXBhcnNlLmMtMTI2OC1cdFx0ZmF0dHItXHUwMDNlY2ZfbW9kZSA9IFNfSUZESVIgfCAwNzExO1xuLS1cbmZzL3NtYi9jbGllbnQvc21iMW9wcy5jPTk0Mj1zbWJfc2V0X2ZpbGVfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpmdWxsX3BhdGgsXG4tLVxuZnMvc21iL2NsaWVudC9zbWIxb3BzLmMtMTAyNi1cdFx0LmRlc2lyZWRfYWNjZXNzID0gU1lOQ0hST05JWkUgfCBGSUxFX1dSSVRFX0FUVFJJQlVURVMsXG5mcy9zbWIvY2xpZW50L3NtYjFvcHMuYzoxMDI3Olx0XHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIDApLFxuZnMvc21iL2NsaWVudC9zbWIxb3BzLmMtMTAyOC1cdFx0LmRpc3Bvc2l0aW9uID0gRklMRV9PUEVOLFxuLS1cbmZzL3NtYi9jbGllbnQvc21iMW9wcy5jPTEzODc9c3RydWN0IHNtYl92ZXJzaW9uX29wZXJhdGlvbnMgc21iMV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL3NtYi9jbGllbnQvc21iMW9wcy5jLTE0MzktXHQuZ2V0X3JlcGFyc2VfcG9pbnRfYnVmZmVyID0gY2lmc19nZXRfcmVwYXJzZV9wb2ludF9idWZmZXIsXG5mcy9zbWIvY2xpZW50L3NtYjFvcHMuYzoxNDQwOlx0LmNyZWF0ZV9yZXBhcnNlX2lub2RlID0gY2lmc19jcmVhdGVfcmVwYXJzZV9pbm9kZSxcbmZzL3NtYi9jbGllbnQvc21iMW9wcy5jLTE0NDEtXHQub3BlbiA9IGNpZnNfb3Blbl9maWxlLFxuLS1cbmZzL3NtYi9jbGllbnQvc21iMW9wcy5jLTE0NTgtXHQucXVlcnlfbWZfc3ltbGluayA9IGNpZnNfcXVlcnlfbWZfc3ltbGluayxcbmZzL3NtYi9jbGllbnQvc21iMW9wcy5jOjE0NTk6XHQuY3JlYXRlX21mX3N5bWxpbmsgPSBjaWZzX2NyZWF0ZV9tZl9zeW1saW5rLFxuZnMvc21iL2NsaWVudC9zbWIxb3BzLmMtMTQ2MC1cdC5pc19yZWFkX29wID0gY2lmc19pc19yZWFkX29wLFxuLS1cbmZzL3NtYi9jbGllbnQvc21iMXByb3RvLmg9MTA4PWludCBjaWZzX3F1ZXJ5X3JlcGFyc2VfcG9pbnQoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfdGNvbiAqdGNvbixcbi0tXG5mcy9zbWIvY2xpZW50L3NtYjFwcm90by5oLTExMS1cdFx0XHQgICAgIGludCAqcnNwX2J1ZnR5cGUpO1xuZnMvc21iL2NsaWVudC9zbWIxcHJvdG8uaDoxMTI6c3RydWN0IGlub2RlICpjaWZzX2NyZWF0ZV9yZXBhcnNlX2lub2RlKHN0cnVjdCBjaWZzX29wZW5faW5mb19kYXRhICpkYXRhLFxuZnMvc21iL2NsaWVudC9zbWIxcHJvdG8uaC0xMTMtXHRcdFx0XHRcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM9ODgzPXNtYjNfcWZzX3Rjb24oY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfdGNvbiAqdGNvbixcbi0tXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy04OTctXHRcdC5kaXNwb3NpdGlvbiA9IEZJTEVfT1BFTixcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jOjg5ODpcdFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCAwKSxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jLTg5OS1cdFx0LmZpZCA9IFx1MDAyNmZpZCxcbi0tXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYz05Mjg9c21iMl9xZnNfdGNvbihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxuLS1cbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jLTk0MS1cdFx0LmRpc3Bvc2l0aW9uID0gRklMRV9PUEVOLFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM6OTQyOlx0XHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIDApLFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtOTQzLVx0XHQuZmlkID0gXHUwMDI2ZmlkLFxuLS1cbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jPTk1OT1zbWIyX2lzX3BhdGhfYWNjZXNzaWJsZShjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxuLS1cbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jLTk4Ni1cdFx0LmRpc3Bvc2l0aW9uID0gRklMRV9PUEVOLFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM6OTg3Olx0XHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIDApLFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtOTg4LVx0XHQuZmlkID0gXHUwMDI2ZmlkLFxuLS1cbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jPTExODE9c21iMl9zZXRfZWEoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfdGNvbiAqdGNvbixcbi0tXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0xMjgzLVx0XHQuZGlzcG9zaXRpb24gPSBGSUxFX09QRU4sXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYzoxMjg0Olx0XHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIDApLFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMTI4NS1cdFx0LmZpZCA9IFx1MDAyNmZpZCxcbi0tXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYz0xNTc3PXNtYjJfaW9jdGxfcXVlcnlfaW5mbyhjb25zdCB1bnNpZ25lZCBpbnQgeGlkLFxuLS1cbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jLTE2NTItXHRcdC5kaXNwb3NpdGlvbiA9IEZJTEVfT1BFTixcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jOjE2NTM6XHRcdC5jcmVhdGVfb3B0aW9ucyA9IGNpZnNfY3JlYXRlX29wdGlvbnMoY2lmc19zYiwgY3JlYXRlX29wdGlvbnMpLFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMTY1NC1cdFx0LmZpZCA9IFx1MDAyNmZpZCxcbi0tXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYz0yMzcxPXNtYjNfbm90aWZ5KGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBmaWxlICpwZmlsZSxcbi0tXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0yNDIwLVx0XHQuZGlzcG9zaXRpb24gPSBGSUxFX09QRU4sXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYzoyNDIxOlx0XHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIDApLFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMjQyMi1cdFx0LmZpZCA9IFx1MDAyNmZpZCxcbi0tXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYz0yNDU0PXNtYjJfcXVlcnlfZGlyX2ZpcnN0KGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sXG4tLVxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMjQ5OS1cdFx0LmRpc3Bvc2l0aW9uID0gRklMRV9PUEVOLFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM6MjUwMDpcdFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCAwKSxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jLTI1MDEtXHRcdC5maWQgPSBmaWQsXG4tLVxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM9MjgzMD1zbWIyX3F1ZXJ5X2luZm9fY29tcG91bmQoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfdGNvbiAqdGNvbixcbi0tXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0yODkwLVx0XHQuZGlzcG9zaXRpb24gPSBGSUxFX09QRU4sXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYzoyODkxOlx0XHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIDApLFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMjg5Mi1cdFx0LmZpZCA9IFx1MDAyNmZpZCxcbi0tXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYz0zMDI3PXNtYjMxMV9xdWVyeWZzKGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sXG4tLVxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMzA0My1cdFx0LmRpc3Bvc2l0aW9uID0gRklMRV9PUEVOLFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM6MzA0NDpcdFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCAwKSxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jLTMwNDUtXHRcdC5maWQgPSBcdTAwMjZmaWQsXG4tLVxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM9MzIzOD1nZXRfc21iMl9hY2xfYnlfcGF0aChzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiLFxuLS1cbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jLTMyNzQtXHRcdCAqL1xuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM6MzI3NTpcdFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCAwKSB8XG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0zMjc2LVx0XHRcdFx0ICBPUEVOX1JFUEFSU0VfUE9JTlQsXG4tLVxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM9MzMwND1zZXRfc21iMl9hY2woc3RydWN0IHNtYl9udHNkICpwbm50c2QsIF9fdTMyIGFjbGxlbixcbi0tXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0zMzM5LVx0XHQuZGVzaXJlZF9hY2Nlc3MgPSBhY2Nlc3NfZmxhZ3MsXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYzozMzQwOlx0XHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIDApLFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMzM0MS1cdFx0LmRpc3Bvc2l0aW9uID0gRklMRV9PUEVOLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxODo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjMyOAoJCQkJCQkJb3V0cHV0OiAxOTAKCQkJCQkJCXRob3VnaHRzOiA0MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIENJRlMgQ3JlYXRlIE9wZXJhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBsb29rZWQgYXQgdGhpcyBwYXRjaCByZW1vdmluZyB0aGUgYGV4Y2xgIGFyZ3VtZW50IGZyb20gdGhlIGBjaWZzX2NyZWF0ZWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGJlZm9yZSB0aGlzIG1vZGlmaWNhdGlvbiwgdGhlIGBjaWZzX2NyZWF0ZWAgZnVuY3Rpb24gaXRzZWxmIGRpZG4mIzM5O3QgZXZlbiAqdXNlKiB0aGUgYGV4Y2xgIHBhcmFtZXRlciwgcmlnaHQ/IEl0IHdhcyBlZmZlY3RpdmVseSBiZWluZyBpZ25vcmVkOgpgYGBjCmludCBjaWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCgkJc3RydWN0IGRlbnRyeSAqZGlyZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKQpgYGAKU28sIGFzIEkgdW5kZXJzdGFuZCBpdCwgdGhpcyBwYXRjaCBpcyBwdXJlbHkgYSByZWZhY3RvcmluZyBvcGVyYXRpb24uIEl0JiMzOTtzIGFib3V0IGNsZWFuaW5nIHVwIHRoZSBBUEksIG1ha2luZyB0aGluZ3MgbW9yZSBzdHJlYW1saW5lZC4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gbm90ZTsgaXQmIzM5O3MgKm5vdCogYSBmdW5jdGlvbmFsIGNoYW5nZS4KCkxldCBtZSBicmVhayBkb3duIG15IHVuZGVyc3RhbmRpbmcgZm9yIGNsYXJpdHk6CiogICBUaGUgcHJpbWFyeSBjaGFuZ2UgaXMgdGhlIHJlbW92YWwgb2YgdGhlIGBleGNsYCBhcmd1bWVudCBmcm9tIHRoZSBgY3JlYXRlYCBpbm9kZSBvcGVyYXRpb24uCiogICBUaGUgVkZTIGZ1bmN0aW9ucyBgdmZzX2NyZWF0ZWAgYW5kIGBsb29rdXBfb3BlbmAgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gKm5vIGxvbmdlciogcGFzcyB0aGlzIGBleGNsYCBmbGFnLgoqICAgRmlsZXN5c3RlbXMgYXJlIGJlaW5nIHVwZGF0ZWQgdG8gZHJvcCB0aGUgYGV4Y2xgIGFyZ3VtZW50IGZyb20gdGhlaXIgY29ycmVzcG9uZGluZyBpbXBsZW1lbnRhdGlvbnMgYXMgd2VsbC4KKiAgIFRoZSBmZXcgZmlsZXN5c3RlbXMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgZm9yd2FyZGluZyBhbiBgZXhjbGAgYXJndW1lbnQgaW4gY2FsbHMgdG8gaW50ZXJuYWwgZnVuY3Rpb25zIHN1Y2ggYXMgYGdmczJgLCBgbmZzYCwgYW5kIGB2Ym94c2ZgLCBub3cgY29uc2lzdGVudGx5IHBhc3MgYSB2YWx1ZSBsaWtlIGAxYCwgYHRydWVgLCBvciBgT19FWENMYCwgaW4gYWxpZ25tZW50IHdpdGggdGhlIHByZXZpb3VzIGJlaGF2aW9yLiBTaW5jZSBgdmZzX2NyZWF0ZWAgYWx3YXlzIHBhc3NlZCBgdHJ1ZWAgYW5kIHRoZSBvcmlnaW5hbCBgbG9va3VwX29wZW5gIHBhc3NlZCBgb3Blbl9mbGFnICZhbXA7IE9fRVhDTGAgYW5kIHRoZXJlIGlzIGBpbm9kZV9sb2NrYCBvbiBub24tZXhjbHVzaXZlIGNyZWF0ZXMsIHRoZSBwYXJhbWV0ZXIgd2FzIHJlZHVuZGFudC4KKiAgIE5ldHdvcmsgZmlsZXN5c3RlbXMsIHdoaWNoIHNob3VsZCB1c2UgYGF0b21pY19vcGVuYCBmb3Igbm9uLWV4Y2x1c2l2ZSBjcmVhdGVzLCBhcmUgYWxyZWFkeSBkb2luZyBzbyAoZS5nLiBgZ2ZzMmAsIGBuZnNgLCBgdmJveHNmYCwgYGNpZnNgLCBgOXBgLCBhbmQgYGZ1c2VgKS4KClRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gY2hhbmdlIGluIHRoZSBrZXJuZWwmIzM5O3MgbG9naWNhbCBiZWhhdmlvciB0aGF0IG5lY2Vzc2l0YXRlcyBmdXp6aW5nLiBJdCYjMzk7cyBhIHB1cmUgQVBJIHJlZmFjdG9yIGFuZCBJJiMzOTttIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYCBhbmQgZXhwbGFpbiB0aGF0IHRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgQVBJIHJlZmFjdG9yaW5nIG9mIHRoZSBWRlMgYGNyZWF0ZWAgaW5vZGUgb3BlcmF0aW9uLiBUaGUgcGF0Y2ggcmVtb3ZlcyBhIHJlZHVuZGFudCBhcmd1bWVudCwgYnV0IGxlYXZlcyB0aGUga2VybmVsIGxvZ2ljIHVudG91Y2hlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTg6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoaXMgcGF0Y2ggaXMgYSB0cmVlLXdpZGUgQVBJIHJlZmFjdG9yaW5nIHRoYXQgcmVtb3ZlcyB0aGUgcmVkdW5kYW50ICYjMzk7ZXhjbCYjMzk7IGFyZ3VtZW50IGZyb20gdGhlICYjMzk7Y3JlYXRlJiMzOTsgaW5vZGUgb3BlcmF0aW9uLiBWRlMgcHJldmlvdXNseSBwYXNzZWQgJiMzOTt0cnVlJiMzOTsgZnJvbSB2ZnNfY3JlYXRlKCkgYW5kICYjMzk7b3Blbl9mbGFnIFx1MDAyNiBPX0VYQ0wmIzM5OyBmcm9tIGxvb2t1cF9vcGVuKCkuIEhvd2V2ZXIsIGZvciBsb2NhbCBmaWxlc3lzdGVtcywgVkZTIGhvbGRzIHRoZSBpbm9kZV9sb2NrIGR1cmluZyBjcmVhdGUsIG1ha2luZyBjb25jdXJyZW50IGNyZWF0aW9uIGltcG9zc2libGUgYW5kIHRoZSAmIzM5O2V4Y2wmIzM5OyBhcmd1bWVudCByZWR1bmRhbnQuIEZvciBuZXR3b3JrIGZpbGVzeXN0ZW1zLCBub24tZXhjbHVzaXZlIGNyZWF0ZXMgYXJlIGhhbmRsZWQgdmlhIGF0b21pY19vcGVuKCkuIFRoZSBmaWxlc3lzdGVtcyB0aGF0IHVzZWQgdGhlIGFyZ3VtZW50IGludGVybmFsbHkgKGxpa2UgZ2ZzMiwgbmZzLCB2Ym94c2YpIG5vdyBoYXJkY29kZSAmIzM5O3RydWUmIzM5OyBvciAmIzM5O09fRVhDTCYjMzk7LCB3aGljaCBleGFjdGx5IG1hdGNoZXMgdGhlIHByZXZpb3VzIGJlaGF2aW9yIHdoZW4gY2FsbGVkIGZyb20gdmZzX2NyZWF0ZS4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIGlzIGEgdHJlZS13aWRlIEFQSSByZWZhY3RvcmluZyB0aGF0IHJlbW92ZXMgdGhlIHJlZHVuZGFudCAmIzM5O2V4Y2wmIzM5OyBhcmd1bWVudCBmcm9tIHRoZSAmIzM5O2NyZWF0ZSYjMzk7IGlub2RlIG9wZXJhdGlvbi4gVkZTIHByZXZpb3VzbHkgcGFzc2VkICYjMzk7dHJ1ZSYjMzk7IGZyb20gdmZzX2NyZWF0ZSgpIGFuZCAmIzM5O29wZW5fZmxhZyBcdTAwMjYgT19FWENMJiMzOTsgZnJvbSBsb29rdXBfb3BlbigpLiBIb3dldmVyLCBmb3IgbG9jYWwgZmlsZXN5c3RlbXMsIFZGUyBob2xkcyB0aGUgaW5vZGVfbG9jayBkdXJpbmcgY3JlYXRlLCBtYWtpbmcgY29uY3VycmVudCBjcmVhdGlvbiBpbXBvc3NpYmxlIGFuZCB0aGUgJiMzOTtleGNsJiMzOTsgYXJndW1lbnQgcmVkdW5kYW50LiBGb3IgbmV0d29yayBmaWxlc3lzdGVtcywgbm9uLWV4Y2x1c2l2ZSBjcmVhdGVzIGFyZSBoYW5kbGVkIHZpYSBhdG9taWNfb3BlbigpLiBUaGUgZmlsZXN5c3RlbXMgdGhhdCB1c2VkIHRoZSBhcmd1bWVudCBpbnRlcm5hbGx5IChsaWtlIGdmczIsIG5mcywgdmJveHNmKSBub3cgaGFyZGNvZGUgJiMzOTt0cnVlJiMzOTsgb3IgJiMzOTtPX0VYQ0wmIzM5Oywgd2hpY2ggZXhhY3RseSBtYXRjaGVzIHRoZSBwcmV2aW91cyBiZWhhdmlvciB3aGVuIGNhbGxlZCBmcm9tIHZmc19jcmVhdGUuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODozODoxNC40ODE2NTE4MjdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDAyMzcwMTE0MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBpcyBhIHRyZWUtd2lkZSBBUEkgcmVmYWN0b3JpbmcgdGhhdCByZW1vdmVzIHRoZSByZWR1bmRhbnQgJ2V4Y2wnIGFyZ3VtZW50IGZyb20gdGhlICdjcmVhdGUnIGlub2RlIG9wZXJhdGlvbi4gVkZTIHByZXZpb3VzbHkgcGFzc2VkICd0cnVlJyBmcm9tIHZmc19jcmVhdGUoKSBhbmQgJ29wZW5fZmxhZyBcXHUwMDI2IE9fRVhDTCcgZnJvbSBsb29rdXBfb3BlbigpLiBIb3dldmVyLCBmb3IgbG9jYWwgZmlsZXN5c3RlbXMsIFZGUyBob2xkcyB0aGUgaW5vZGVfbG9jayBkdXJpbmcgY3JlYXRlLCBtYWtpbmcgY29uY3VycmVudCBjcmVhdGlvbiBpbXBvc3NpYmxlIGFuZCB0aGUgJ2V4Y2wnIGFyZ3VtZW50IHJlZHVuZGFudC4gRm9yIG5ldHdvcmsgZmlsZXN5c3RlbXMsIG5vbi1leGNsdXNpdmUgY3JlYXRlcyBhcmUgaGFuZGxlZCB2aWEgYXRvbWljX29wZW4oKS4gVGhlIGZpbGVzeXN0ZW1zIHRoYXQgdXNlZCB0aGUgYXJndW1lbnQgaW50ZXJuYWxseSAobGlrZSBnZnMyLCBuZnMsIHZib3hzZikgbm93IGhhcmRjb2RlICd0cnVlJyBvciAnT19FWENMJywgd2hpY2ggZXhhY3RseSBtYXRjaGVzIHRoZSBwcmV2aW91cyBiZWhhdmlvciB3aGVuIGNhbGxlZCBmcm9tIHZmc19jcmVhdGUuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE4OjM4OjE0LjQ4MTY1OTAyN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NDAzMzIzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQwNDJkZGVjZjNjZWQyMDc3N2JlNTM4NzRkMWQ5YTAzMzdmYjQyYjlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMSAxODozODoxMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdFxcbmluZGV4IGQxM2YwYTIzYzg4MmZjLi4wMjUyMmZiZmQ5Njg2ZiAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdFxcbkBAIC0xNDAxLDMgKzE0MDEsMTEgQEAgYXMgd2l0aCBkX2Rpc3Bvc2VfaWZfdW51c2VkKCkgdGhlc2UgYXJlIG5vdCB0cml2aWFsOyB3aXRoIHRoaXMgdmFyaWFudFxcbiBvZiBBUEkgaXQncyBtb3JlIGV4cGxpY2l0LCBzaW5jZSBncmFiYmluZyAtXFx1MDAzZWRfbG9jayBpcyBjYWxsZXItc2lkZSwgYnV0XFxuIGRfZGlzcG9zZV9pZl91bnVzZWQoKSBoYWQgYWxsIHRoZSBzYW1lIGlzc3Vlcy4gIEl0J3MgYSBsb3ctbGV2ZWwgcHJpbWl0aXZlO1xcbiB1c2Ugb25seSBpZiB5b3UgaGF2ZSBubyBhbHRlcm5hdGl2ZS5cXG4rXFxuKy0tLVxcbitcXG4rKiptYW5kYXRvcnkqKlxcbitcXG4rVGhlIC5jcmVhdGUgaW5vZGVfb3BlcmF0aW9uIG5vIGxvbmdlciByZWNlaXZlcyB0aGUgJ2V4Y2wnIGFyZy4gIEl0IG11c3RcXG4rYWx3YXlzIGFzc3VtZSB0aGUgZmlsZSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LiAgSWYgdGhlIGZpbGVzeXN0ZW0gbmVlZHNcXG4rdG8gYmUgaW52b2x2ZWQgaW4gbm9uLWV4Y2x1c2l2ZSBjcmVhdGUsIGl0IHNob3VsZCBwcm92aWRlIGF0b21pY19vcGVuLlxcbmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGUuYyBiL2ZzLzlwL3Zmc19pbm9kZS5jXFxuaW5kZXggNTc4M2QwMzM2Zjk2YWMuLmU0N2I5MGU3MDgzNzY4IDEwMDY0NFxcbi0tLSBhL2ZzLzlwL3Zmc19pbm9kZS5jXFxuKysrIGIvZnMvOXAvdmZzX2lub2RlLmNcXG5AQCAtNjQ1LDcgKzY0NSw2IEBAIHY5ZnNfY3JlYXRlKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiAgKiBAZGlyOiBUaGUgcGFyZW50IGRpcmVjdG9yeVxcbiAgKiBAZGVudHJ5OiBUaGUgbmFtZSBvZiBmaWxlIHRvIGJlIGNyZWF0ZWRcXG4gICogQG1vZGU6IFRoZSBVTklYIGZpbGUgbW9kZSB0byBzZXRcXG4tICogQGV4Y2w6IFRydWUgaWYgdGhlIGZpbGUgbXVzdCBub3QgeWV0IGV4aXN0XFxuICAqXFxuICAqIG9wZW4oLi4sIE9fQ1JFQVQpIGlzIGhhbmRsZWQgaW4gdjlmc192ZnNfYXRvbWljX29wZW4oKS4gIFRoaXMgaXMgb25seSBjYWxsZWRcXG4gICogZm9yIG1rbm9kKDIpLlxcbkBAIC02NTQsNyArNjUzLDcgQEAgdjlmc19jcmVhdGUoc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcywgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcbiBzdGF0aWMgaW50XFxuIHY5ZnNfdmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXFxuK1xcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGRpcik7XFxuIFxcdHUzMiBwZXJtID0gdW5peG1vZGUycDltb2RlKHY5c2VzLCBtb2RlKTtcXG5kaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlX2RvdGwuYyBiL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmNcXG5pbmRleCBmNzM5NmQyMGNiNmNkYy4uZDE3YzNiNmVlYmIyMmQgMTAwNjQ0XFxuLS0tIGEvZnMvOXAvdmZzX2lub2RlX2RvdGwuY1xcbisrKyBiL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmNcXG5AQCAtMjEzLDEyICsyMTMsMTEgQEAgaW50IHY5ZnNfb3Blbl90b19kb3RsX2ZsYWdzKGludCBmbGFncylcXG4gICogQGRpcjogZGlyZWN0b3J5IGlub2RlIHRoYXQgaXMgYmVpbmcgY3JlYXRlZFxcbiAgKiBAZGVudHJ5OiAgZGVudHJ5IHRoYXQgaXMgYmVpbmcgZGVsZXRlZFxcbiAgKiBAb21vZGU6IGNyZWF0ZSBwZXJtaXNzaW9uc1xcbi0gKiBAZXhjbDogVHJ1ZSBpZiB0aGUgZmlsZSBtdXN0IG5vdCB5ZXQgZXhpc3RcXG4gICpcXG4gICovXFxuIHN0YXRpYyBpbnRcXG4gdjlmc192ZnNfY3JlYXRlX2RvdGwoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBvbW9kZSwgYm9vbCBleGNsKVxcbitcXHRcXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBvbW9kZSlcXG4ge1xcbiBcXHRyZXR1cm4gdjlmc192ZnNfbWtub2RfZG90bChpZG1hcCwgZGlyLCBkZW50cnksIG9tb2RlLCAwKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9mcy9hZmZzL2FmZnMuaCBiL2ZzL2FmZnMvYWZmcy5oXFxuaW5kZXggNDRhM2Y2OWQyNzVmOTYuLmQ2YjMzOTM2MzNmMmQ5IDEwMDY0NFxcbi0tLSBhL2ZzL2FmZnMvYWZmcy5oXFxuKysrIGIvZnMvYWZmcy9hZmZzLmhcXG5AQCAtMTY5LDcgKzE2OSw3IEBAIGV4dGVybiBpbnRcXHRhZmZzX2hhc2hfbmFtZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCB1OCAqbmFtZSwgdW5zaWduZWQgaW50IGxcXG4gZXh0ZXJuIHN0cnVjdCBkZW50cnkgKmFmZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVuc2lnbmVkIGludCk7XFxuIGV4dGVybiBpbnRcXHRhZmZzX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcXG4gZXh0ZXJuIGludFxcdGFmZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wpO1xcbitcXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XFxuIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICphZmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xcbiBleHRlcm4gaW50XFx0YWZmc19ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcXG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9uYW1laS5jIGIvZnMvYWZmcy9uYW1laS5jXFxuaW5kZXggYzNjNjUzMmRhNGIwZGEuLmIwMDAxMDg0NzI3YTVkIDEwMDY0NFxcbi0tLSBhL2ZzL2FmZnMvbmFtZWkuY1xcbisrKyBiL2ZzL2FmZnMvbmFtZWkuY1xcbkBAIC0yNDMsNyArMjQzLDcgQEAgYWZmc191bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gXFxuIGludFxcbiBhZmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdCAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbitcXHQgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuIHtcXG4gXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRpci1cXHUwMDNlaV9zYjtcXG4gXFx0c3RydWN0IGlub2RlXFx0Kmlub2RlO1xcbmRpZmYgLS1naXQgYS9mcy9hZnMvZGlyLmMgYi9mcy9hZnMvZGlyLmNcXG5pbmRleCA0OThiOTljY2RmMGUyNy4uNjZjYzMzMzJlZjMxOWEgMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL2Rpci5jXFxuKysrIGIvZnMvYWZzL2Rpci5jXFxuQEAgLTMyLDcgKzMyLDcgQEAgc3RhdGljIGJvb2wgYWZzX2xvb2t1cF9vbmVfZmlsbGRpcihzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqbmFtZSwgaW5cXG4gc3RhdGljIGJvb2wgYWZzX2xvb2t1cF9maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmxlbixcXG4gXFx0XFx0XFx0ICAgICAgbG9mZl90IGZwb3MsIHU2NCBpbm8sIHVuc2lnbmVkIGR0eXBlKTtcXG4gc3RhdGljIGludCBhZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbCk7XFxuK1xcdFxcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcXG4gc3RhdGljIHN0cnVjdCBkZW50cnkgKmFmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcXG4gc3RhdGljIGludCBhZnNfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XFxuQEAgLTE2MjMsNyArMTYyMyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWZzX29wZXJhdGlvbl9vcHMgYWZzX2NyZWF0ZV9vcGVyYXRpb24gPSB7XFxuICAqIGNyZWF0ZSBhIHJlZ3VsYXIgZmlsZSBvbiBhbiBBRlMgZmlsZXN5c3RlbVxcbiAgKi9cXG4gc3RhdGljIGludCBhZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcXG4rXFx0XFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuIHtcXG4gXFx0c3RydWN0IGFmc19vcGVyYXRpb24gKm9wO1xcbiBcXHRzdHJ1Y3QgYWZzX3Zub2RlICpkdm5vZGUgPSBBRlNfRlNfSShkaXIpO1xcbmRpZmYgLS1naXQgYS9mcy9iYWRfaW5vZGUuYyBiL2ZzL2JhZF9pbm9kZS5jXFxuaW5kZXggYWNmODYxM2Y1ZTM2OGUuLjQ4NmM0MGY3M2U1MWUwIDEwMDY0NFxcbi0tLSBhL2ZzL2JhZF9pbm9kZS5jXFxuKysrIGIvZnMvYmFkX2lub2RlLmNcXG5AQCAtMjksNyArMjksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiYWRfZmlsZV9vcHMgPVxcbiBcXG4gc3RhdGljIGludCBiYWRfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tXFx0XFx0XFx0ICAgIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbitcXHRcXHRcXHQgICAgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHJldHVybiAtRUlPO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2ZzL2Jmcy9kaXIuYyBiL2ZzL2Jmcy9kaXIuY1xcbmluZGV4IDViNDBhYjA5YTc5NmRlLi40YzNiNGRiMDhjZGVmYyAxMDA2NDRcXG4tLS0gYS9mcy9iZnMvZGlyLmNcXG4rKysgYi9mcy9iZnMvZGlyLmNcXG5AQCAtODMsNyArODMsNyBAQCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJmc19kaXJfb3BlcmF0aW9ucyA9IHtcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbnQgYmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXFxuK1xcdFxcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdGludCBlcnI7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2lub2RlLmMgYi9mcy9idHJmcy9pbm9kZS5jXFxuaW5kZXggMjcyNTk4ZjZhZTc3YWYuLjIyYzBhMGUyNDFlNTMzIDEwMDY0NFxcbi0tLSBhL2ZzL2J0cmZzL2lub2RlLmNcXG4rKysgYi9mcy9idHJmcy9pbm9kZS5jXFxuQEAgLTY4MzIsNyArNjgzMiw3IEBAIHN0YXRpYyBpbnQgYnRyZnNfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGJ0cmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXFxuK1xcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9jZXBoL2Rpci5jIGIvZnMvY2VwaC9kaXIuY1xcbmluZGV4IDI3Y2U5ZTU1ZTk0NzY4Li5kZWU0NTI0YzIzMzYyMyAxMDA2NDRcXG4tLS0gYS9mcy9jZXBoL2Rpci5jXFxuKysrIGIvZnMvY2VwaC9kaXIuY1xcbkBAIC05NzgsNyArOTc4LDcgQEAgc3RhdGljIGludCBjZXBoX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gfVxcbiBcXG4gc3RhdGljIGludCBjZXBoX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbitcXHRcXHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuIHtcXG4gXFx0cmV0dXJuIGNlcGhfbWtub2QoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCAwKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9mcy9jb2RhL2Rpci5jIGIvZnMvY29kYS9kaXIuY1xcbmluZGV4IDgzNWViN2ZkZmRhZDAwLi5lYTcxMGE1ZGJiYjc0YiAxMDA2NDRcXG4tLS0gYS9mcy9jb2RhL2Rpci5jXFxuKysrIGIvZnMvY29kYS9kaXIuY1xcbkBAIC0xMzQsNyArMTM0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvZGFfZGlyX2Ryb3Bfbmxpbmsoc3RydWN0IGlub2RlICpkaXIpXFxuIFxcbiAvKiBjcmVhdGlvbiByb3V0aW5lczogY3JlYXRlLCBta25vZCwgbWtkaXIsIGxpbmssIHN5bWxpbmsgKi9cXG4gc3RhdGljIGludCBjb2RhX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXFxuK1xcdFxcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdGludCBlcnJvcjtcXG4gXFx0Y29uc3QgY2hhciAqbmFtZT1kZS1cXHUwMDNlZF9uYW1lLm5hbWU7XFxuZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL2lub2RlLmMgYi9mcy9lY3J5cHRmcy9pbm9kZS5jXFxuaW5kZXggN2FhZjE5MTNmOWM2ZDMuLjUyNTI5N2M3ZWJkOGM0IDEwMDY0NFxcbi0tLSBhL2ZzL2VjcnlwdGZzL2lub2RlLmNcXG4rKysgYi9mcy9lY3J5cHRmcy9pbm9kZS5jXFxuQEAgLTI2OCw3ICsyNjgsNyBAQCBpbnQgZWNyeXB0ZnNfaW5pdGlhbGl6ZV9maWxlKHN0cnVjdCBkZW50cnkgKmVjcnlwdGZzX2RlbnRyeSxcXG4gc3RhdGljIGludFxcbiBlY3J5cHRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdFxcdHN0cnVjdCBpbm9kZSAqZGlyZWN0b3J5X2lub2RlLCBzdHJ1Y3QgZGVudHJ5ICplY3J5cHRmc19kZW50cnksXFxuLVxcdFxcdHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbitcXHRcXHR1bW9kZV90IG1vZGUpXFxuIHtcXG4gXFx0c3RydWN0IGlub2RlICplY3J5cHRmc19pbm9kZTtcXG4gXFx0aW50IHJjO1xcbmRpZmYgLS1naXQgYS9mcy9lZml2YXJmcy9pbm9kZS5jIGIvZnMvZWZpdmFyZnMvaW5vZGUuY1xcbmluZGV4IDk1ZGNhZDgzZGExMWJlLi5mMGQwMDk1NTVmYzY2MCAxMDA2NDRcXG4tLS0gYS9mcy9lZml2YXJmcy9pbm9kZS5jXFxuKysrIGIvZnMvZWZpdmFyZnMvaW5vZGUuY1xcbkBAIC03NSw3ICs3NSw3IEBAIHN0YXRpYyBib29sIGVmaXZhcmZzX3ZhbGlkX25hbWUoY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKVxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGVmaXZhcmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgZWZpdmFyX2VudHJ5ICp2YXI7XFxuZGlmZiAtLWdpdCBhL2ZzL2V4ZmF0L25hbWVpLmMgYi9mcy9leGZhdC9uYW1laS5jXFxuaW5kZXggYjdkNWU0NGFkMzhlZWUuLmNkOWM5ZWNhNThmODZlIDEwMDY0NFxcbi0tLSBhL2ZzL2V4ZmF0L25hbWVpLmNcXG4rKysgYi9mcy9leGZhdC9uYW1laS5jXFxuQEAgLTUzOCw3ICs1MzgsNyBAQCBzdGF0aWMgaW50IGV4ZmF0X2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpwYXRoLFxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGV4ZmF0X2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXFxuK1xcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkaXItXFx1MDAzZWlfc2I7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDIvbmFtZWkuYyBiL2ZzL2V4dDIvbmFtZWkuY1xcbmluZGV4IDBkMDlkMjJmZTcwODYyLi43NDJhNzhlMTY1ZDQ4ZSAxMDA2NDRcXG4tLS0gYS9mcy9leHQyL25hbWVpLmNcXG4rKysgYi9mcy9leHQyL25hbWVpLmNcXG5AQCAtOTksNyArOTksNyBAQCBzdHJ1Y3QgZGVudHJ5ICpleHQyX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGQpXFxuICAqL1xcbiBzdGF0aWMgaW50IGV4dDJfY3JlYXRlIChzdHJ1Y3QgbW50X2lkbWFwICogaWRtYXAsXFxuIFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqIGRpciwgc3RydWN0IGRlbnRyeSAqIGRlbnRyeSxcXG4tXFx0XFx0XFx0dW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXFxuK1xcdFxcdFxcdHVtb2RlX3QgbW9kZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xcbiBcXHRpbnQgZXJyO1xcbmRpZmYgLS1naXQgYS9mcy9leHQ0L25hbWVpLmMgYi9mcy9leHQ0L25hbWVpLmNcXG5pbmRleCBjYzQ5YWUwNGE2ZjY0OS4uYzNkZTY0ZDJhMmRmMjAgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9uYW1laS5jXFxuKysrIGIvZnMvZXh0NC9uYW1laS5jXFxuQEAgLTI4MTEsNyArMjgxMSw3IEBAIHN0YXRpYyBpbnQgZXh0NF9hZGRfbm9uZGlyKGhhbmRsZV90ICpoYW5kbGUsXFxuICAqIHdpdGggZF9pbnN0YW50aWF0ZSgpLlxcbiAgKi9cXG4gc3RhdGljIGludCBleHQ0X2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbitcXHRcXHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuIHtcXG4gXFx0aGFuZGxlX3QgKmhhbmRsZTtcXG4gXFx0c3RydWN0IGlub2RlICppbm9kZTtcXG5kaWZmIC0tZ2l0IGEvZnMvZjJmcy9uYW1laS5jIGIvZnMvZjJmcy9uYW1laS5jXFxuaW5kZXggY2FjMDNiOGU5MWExNWUuLjY0ODY4MWM1YmE1MDE2IDEwMDY0NFxcbi0tLSBhL2ZzL2YyZnMvbmFtZWkuY1xcbisrKyBiL2ZzL2YyZnMvbmFtZWkuY1xcbkBAIC0zNjYsNyArMzY2LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZjJmc19uZXdfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgZjJmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSA9IEYyRlNfSV9TQihkaXIpO1xcbiBcXHRzdHJ1Y3QgZjJmc19sb2NrX2NvbnRleHQgbGM7XFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9uYW1laV9tc2Rvcy5jIGIvZnMvZmF0L25hbWVpX21zZG9zLmNcXG5pbmRleCAwZmQyOTcxYWQ0YjEzMS4uOWYyYTJlOWE5Y2U4ZWEgMTAwNjQ0XFxuLS0tIGEvZnMvZmF0L25hbWVpX21zZG9zLmNcXG4rKysgYi9mcy9mYXQvbmFtZWlfbXNkb3MuY1xcbkBAIC0yNjIsNyArMjYyLDcgQEAgc3RhdGljIGludCBtc2Rvc19hZGRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsXFxuIFxcbiAvKioqKiogQ3JlYXRlIGEgZmlsZSAqL1xcbiBzdGF0aWMgaW50IG1zZG9zX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXFxuK1xcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkaXItXFx1MDAzZWlfc2I7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMO1xcbmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfdmZhdC5jIGIvZnMvZmF0L25hbWVpX3ZmYXQuY1xcbmluZGV4IGU5MDk0NDc4NzNlMzY0Li4xMzlkM2VmNGJmYWViOCAxMDA2NDRcXG4tLS0gYS9mcy9mYXQvbmFtZWlfdmZhdC5jXFxuKysrIGIvZnMvZmF0L25hbWVpX3ZmYXQuY1xcbkBAIC03NTUsNyArNzU1LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKnZmYXRfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgdmZhdF9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkaXItXFx1MDAzZWlfc2I7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZGlyLmMgYi9mcy9mdXNlL2Rpci5jXFxuaW5kZXggMGUyYTEwMzlmYTQzZWEuLjBlZmIzMTQxZjdmNzBhIDEwMDY0NFxcbi0tLSBhL2ZzL2Z1c2UvZGlyLmNcXG4rKysgYi9mcy9mdXNlL2Rpci5jXFxuQEAgLTEwODQsNyArMTA4NCw3IEBAIHN0YXRpYyBpbnQgZnVzZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgZnVzZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHQgICAgICAgc3RydWN0IGRlbnRyeSAqZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbitcXHRcXHQgICAgICAgc3RydWN0IGRlbnRyeSAqZW50cnksIHVtb2RlX3QgbW9kZSlcXG4ge1xcbiBcXHRyZXR1cm4gZnVzZV9ta25vZChpZG1hcCwgZGlyLCBlbnRyeSwgbW9kZSwgMCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbm9kZS5jIGIvZnMvZ2ZzMi9pbm9kZS5jXFxuaW5kZXggOGE3Nzc5NGJiZDRhZmMuLjllMjNjOGQ1NTk2MjNkIDEwMDY0NFxcbi0tLSBhL2ZzL2dmczIvaW5vZGUuY1xcbisrKyBiL2ZzL2dmczIvaW5vZGUuY1xcbkBAIC05NjksOSArOTY5LDkgQEAgc3RhdGljIGludCBnZnMyX2NyZWF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiAgKi9cXG4gXFxuIHN0YXRpYyBpbnQgZ2ZzMl9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuLVxcdHJldHVybiBnZnMyX2NyZWF0ZV9pbm9kZShkaXIsIGRlbnRyeSwgTlVMTCwgU19JRlJFRyB8IG1vZGUsIDAsIE5VTEwsIDAsIGV4Y2wpO1xcbitcXHRyZXR1cm4gZ2ZzMl9jcmVhdGVfaW5vZGUoZGlyLCBkZW50cnksIE5VTEwsIFNfSUZSRUcgfCBtb2RlLCAwLCBOVUxMLCAwLCAxKTtcXG4gfVxcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL2ZzL2hmcy9kaXIuYyBiL2ZzL2hmcy9kaXIuY1xcbmluZGV4IGUxMzQ1MGJiOTMzZWJkLi45M2VkYzVhODBjODEzZCAxMDA2NDRcXG4tLS0gYS9mcy9oZnMvZGlyLmNcXG4rKysgYi9mcy9oZnMvZGlyLmNcXG5AQCAtMTg0LDcgKzE4NCw3IEBAIHN0YXRpYyBpbnQgaGZzX2Rpcl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbiAgKiB0aGUgZGlyZWN0b3J5IGFuZCB0aGUgbmFtZSAoYW5kIGl0cyBsZW5ndGgpIG9mIHRoZSBuZXcgZmlsZS5cXG4gICovXFxuIHN0YXRpYyBpbnQgaGZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXFxuK1xcdFxcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuIFxcdGludCByZXM7XFxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvZGlyLmMgYi9mcy9oZnNwbHVzL2Rpci5jXFxuaW5kZXggOGJmNmM3Y2RkOWE4NjUuLmYwYWFlMmNkNmZjZmRjIDEwMDY0NFxcbi0tLSBhL2ZzL2hmc3BsdXMvZGlyLmNcXG4rKysgYi9mcy9oZnNwbHVzL2Rpci5jXFxuQEAgLTU2Miw3ICs1NjIsNyBAQCBzdGF0aWMgaW50IGhmc3BsdXNfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGhmc3BsdXNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0XFx0ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbitcXHRcXHRcXHQgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHJldHVybiBoZnNwbHVzX21rbm9kKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgMCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmMgYi9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uY1xcbmluZGV4IGFiZTg2ZDcyZDllZjc1Li43YWRkMDU2ZDQ3ZDhmMCAxMDA2NDRcXG4tLS0gYS9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uY1xcbisrKyBiL2ZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jXFxuQEAgLTU5Myw3ICs1OTMsNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpob3N0ZnNfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjaGFyICpuYW1lKVxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGhvc3Rmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcXG4rXFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuIFxcdGNoYXIgKm5hbWU7XFxuZGlmZiAtLWdpdCBhL2ZzL2hwZnMvbmFtZWkuYyBiL2ZzL2hwZnMvbmFtZWkuY1xcbmluZGV4IDM1M2UxM2E2MTVmNTY2Li44MDkxMTNkODI0OGQ1MCAxMDA2NDRcXG4tLS0gYS9mcy9ocGZzL25hbWVpLmNcXG4rKysgYi9mcy9ocGZzL25hbWVpLmNcXG5AQCAtMTI5LDcgKzEyOSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpocGZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gfVxcbiBcXG4gc3RhdGljIGludCBocGZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbitcXHRcXHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuIHtcXG4gXFx0Y29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSA9IGRlbnRyeS1cXHUwMDNlZF9uYW1lLm5hbWU7XFxuIFxcdHVuc2lnbmVkIGxlbiA9IGRlbnRyeS1cXHUwMDNlZF9uYW1lLmxlbjtcXG5kaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuY1xcbmluZGV4IDIxNmUxYTBkZDBiMjM3Li4xNmQ4NDM3YWVkNTFiYiAxMDA2NDRcXG4tLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuY1xcbisrKyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXFxuQEAgLTk3OSw3ICs5NzksNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqaHVnZXRsYmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpclxcbiBcXG4gc3RhdGljIGludCBodWdldGxiZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tXFx0XFx0XFx0ICAgIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbitcXHRcXHRcXHQgICAgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHJldHVybiBodWdldGxiZnNfbWtub2QoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRlJFRywgMCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZnMvamZmczIvZGlyLmMgYi9mcy9qZmZzMi9kaXIuY1xcbmluZGV4IGM0MDg4YzNiNGFjMDM2Li4zZDQ2OTViODM4ZWQwNiAxMDA2NDRcXG4tLS0gYS9mcy9qZmZzMi9kaXIuY1xcbisrKyBiL2ZzL2pmZnMyL2Rpci5jXFxuQEAgLTI2LDcgKzI2LDcgQEBcXG4gc3RhdGljIGludCBqZmZzMl9yZWFkZGlyIChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKik7XFxuIFxcbiBzdGF0aWMgaW50IGpmZnMyX2NyZWF0ZSAoc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKixcXG4tXFx0XFx0ICAgICAgICAgc3RydWN0IGRlbnRyeSAqLCB1bW9kZV90LCBib29sKTtcXG4rXFx0XFx0ICAgICAgICAgc3RydWN0IGRlbnRyeSAqLCB1bW9kZV90KTtcXG4gc3RhdGljIHN0cnVjdCBkZW50cnkgKmpmZnMyX2xvb2t1cCAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqLFxcbiBcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50KTtcXG4gc3RhdGljIGludCBqZmZzMl9saW5rIChzdHJ1Y3QgZGVudHJ5ICosc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqKTtcXG5AQCAtMTYzLDcgKzE2Myw3IEBAIHN0YXRpYyBpbnQgamZmczJfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXFxuIFxcbiBcXG4gc3RhdGljIGludCBqZmZzMl9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyX2ksXFxuLVxcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXFxuK1xcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBqZmZzMl9yYXdfaW5vZGUgKnJpO1xcbiBcXHRzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyAqZiwgKmRpcl9mO1xcbmRpZmYgLS1naXQgYS9mcy9qZnMvbmFtZWkuYyBiL2ZzL2pmcy9uYW1laS5jXFxuaW5kZXggNDQyZDYyNjc5MjYyMjcuLjJjZjRlMjgwZWUxODVhIDEwMDY0NFxcbi0tLSBhL2ZzL2pmcy9uYW1laS5jXFxuKysrIGIvZnMvamZzL25hbWVpLmNcXG5AQCAtNjEsNyArNjEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9lYV93bWFwKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuICAqXFxuICAqL1xcbiBzdGF0aWMgaW50IGpmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlwLFxcbi1cXHRcXHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbitcXHRcXHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcXG4ge1xcbiBcXHRpbnQgcmMgPSAwO1xcbiBcXHR0aWRfdCB0aWQ7XFx0XFx0LyogdHJhbnNhY3Rpb24gaWQgKi9cXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvbmFtZWkuYyBiL2ZzL21pbml4L25hbWVpLmNcXG5pbmRleCAyNjNlNGJhOGIxYzgyMi4uNzllNTkxYmRmZGMxMGQgMTAwNjQ0XFxuLS0tIGEvZnMvbWluaXgvbmFtZWkuY1xcbisrKyBiL2ZzL21pbml4L25hbWVpLmNcXG5AQCAtNjQsNyArNjQsNyBAQCBzdGF0aWMgaW50IG1pbml4X3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IG1pbml4X2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXFxuK1xcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHJldHVybiBtaW5peF9ta25vZChcXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIDApO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jXFxuaW5kZXggNWNjOWYwZjQ2NmI4MzAuLjhkODFmYzMwMWU5ODk3IDEwMDY0NFxcbi0tLSBhL2ZzL25hbWVpLmNcXG4rKysgYi9mcy9uYW1laS5jXFxuQEAgLTQxOTksNyArNDE5OSw3IEBAIGludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcXG4gXFx0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7XFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbi1cXHRlcnJvciA9IGRpci1cXHUwMDNlaV9vcC1cXHUwMDNlY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgdHJ1ZSk7XFxuK1xcdGVycm9yID0gZGlyLVxcdTAwM2VpX29wLVxcdTAwM2VjcmVhdGUoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcXG4gXFx0aWYgKCFlcnJvcilcXG4gXFx0XFx0ZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTtcXG4gXFx0cmV0dXJuIGVycm9yO1xcbkBAIC00NTA1LDggKzQ1MDUsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxcbiBcXHRcXHRcXHRnb3RvIG91dF9kcHV0O1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRlcnJvciA9IGRpcl9pbm9kZS1cXHUwMDNlaV9vcC1cXHUwMDNlY3JlYXRlKGlkbWFwLCBkaXJfaW5vZGUsIGRlbnRyeSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0bW9kZSwgb3Blbl9mbGFnIFxcdTAwMjYgT19FWENMKTtcXG4rXFx0XFx0ZXJyb3IgPSBkaXJfaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWNyZWF0ZShpZG1hcCwgZGlyX2lub2RlLCBkZW50cnksIG1vZGUpO1xcbiBcXHRcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdFxcdGdvdG8gb3V0X2RwdXQ7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZnMvbmZzL2Rpci5jIGIvZnMvbmZzL2Rpci5jXFxuaW5kZXggYzdiNzIzYzE4NjIwYzkuLjI4MzBkZGM0MTZjZjc1IDEwMDY0NFxcbi0tLSBhL2ZzL25mcy9kaXIuY1xcbisrKyBiL2ZzL25mcy9kaXIuY1xcbkBAIC0yNDI3LDkgKzI0MjcsOSBAQCBzdGF0aWMgaW50IG5mc19kb19jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4gfVxcbiBcXG4gaW50IG5mc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcXG4rXFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuLVxcdHJldHVybiBuZnNfZG9fY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlLCBleGNsID8gT19FWENMIDogMCk7XFxuK1xcdHJldHVybiBuZnNfZG9fY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlLCBPX0VYQ0wpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mc19jcmVhdGUpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvbmZzL2ludGVybmFsLmggYi9mcy9uZnMvaW50ZXJuYWwuaFxcbmluZGV4IGFjYWVmZjdkZGZkZjcwLi5kZDc3ZDVlODBkN2I5MyAxMDA2NDRcXG4tLS0gYS9mcy9uZnMvaW50ZXJuYWwuaFxcbisrKyBiL2ZzL25mcy9pbnRlcm5hbC5oXFxuQEAgLTM5NSw3ICszOTUsNyBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyBuZnNfYWNjZXNzX2NhY2hlX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXFxuIHN0cnVjdCBkZW50cnkgKm5mc19sb29rdXAoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwgdW5zaWduZWQgaW50KTtcXG4gdm9pZCBuZnNfZF9wcnVuZV9jYXNlX2luc2Vuc2l0aXZlX2FsaWFzZXMoc3RydWN0IGlub2RlICppbm9kZSk7XFxuIGludCBuZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKixcXG4tXFx0ICAgICAgIHVtb2RlX3QsIGJvb2wpO1xcbitcXHQgICAgICAgdW1vZGVfdCk7XFxuIHN0cnVjdCBkZW50cnkgKm5mc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosXFxuIFxcdFxcdFxcdCB1bW9kZV90KTtcXG4gaW50IG5mc19ybWRpcihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKTtcXG5kaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL25hbWVpLmMgYi9mcy9uaWxmczIvbmFtZWkuY1xcbmluZGV4IGUyZmU5NWRlM2Q3MWNhLi4wZTBhOTg1MGZmNzZkYyAxMDA2NDRcXG4tLS0gYS9mcy9uaWxmczIvbmFtZWkuY1xcbisrKyBiL2ZzL25pbGZzMi9uYW1laS5jXFxuQEAgLTg2LDcgKzg2LDcgQEAgbmlsZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVuc2lnbmVkIGludCBmbGFncylcXG4gICogd2l0aCBkX2luc3RhbnRpYXRlKCkuXFxuICAqL1xcbiBzdGF0aWMgaW50IG5pbGZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXFxuK1xcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuIFxcdHN0cnVjdCBuaWxmc190cmFuc2FjdGlvbl9pbmZvIHRpO1xcbmRpZmYgLS1naXQgYS9mcy9udGZzL25hbWVpLmMgYi9mcy9udGZzL25hbWVpLmNcXG5pbmRleCBhMTk2MjZhMTM1YmQ3Zi4uYjRkYzZkYTIyNjU5NmIgMTAwNjQ0XFxuLS0tIGEvZnMvbnRmcy9uYW1laS5jXFxuKysrIGIvZnMvbnRmcy9uYW1laS5jXFxuQEAgLTczNiw3ICs3MzYsNyBAQCBzdGF0aWMgc3RydWN0IG50ZnNfaW5vZGUgKl9fbnRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZFxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IG50ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcXG4rXFx0XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuIHtcXG4gXFx0c3RydWN0IG50ZnNfdm9sdW1lICp2b2wgPSBOVEZTX1NCKGRpci1cXHUwMDNlaV9zYik7XFxuIFxcdHN0cnVjdCBudGZzX2lub2RlICpuaTtcXG5kaWZmIC0tZ2l0IGEvZnMvbnRmczMvbmFtZWkuYyBiL2ZzL250ZnMzL25hbWVpLmNcXG5pbmRleCBjNTlkZTVmMmZhOTc3MS4uNmQwMzJiMjJjOTdkYWYgMTAwNjQ0XFxuLS0tIGEvZnMvbnRmczMvbmFtZWkuY1xcbisrKyBiL2ZzL250ZnMzL25hbWVpLmNcXG5AQCAtMTA1LDcgKzEwNSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpudGZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiAgKiBudGZzX2NyZWF0ZSAtIGlub2RlX29wZXJhdGlvbnM6OmNyZWF0ZVxcbiAgKi9cXG4gc3RhdGljIGludCBudGZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbitcXHRcXHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuIHtcXG4gXFx0cmV0dXJuIG50ZnNfY3JlYXRlX2lub2RlKGlkbWFwLCBkaXIsIGRlbnRyeSwgTlVMTCwgU19JRlJFRyB8IG1vZGUsIDAsXFxuIFxcdFxcdFxcdFxcdCBOVUxMLCAwLCBOVUxMKTtcXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtZnMvZGxtZnMuYyBiL2ZzL29jZnMyL2RsbWZzL2RsbWZzLmNcXG5pbmRleCA1ODIxZTMzZGY3OGZkOS4uZjAxMjRmODFkZjI5YjAgMTAwNjQ0XFxuLS0tIGEvZnMvb2NmczIvZGxtZnMvZGxtZnMuY1xcbisrKyBiL2ZzL29jZnMyL2RsbWZzL2RsbWZzLmNcXG5AQCAtNDUzLDggKzQ1Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkbG1mc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICogaWRtYXAsXFxuIHN0YXRpYyBpbnQgZGxtZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi1cXHRcXHRcXHR1bW9kZV90IG1vZGUsXFxuLVxcdFxcdFxcdGJvb2wgZXhjbClcXG4rXFx0XFx0XFx0dW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdGludCBzdGF0dXMgPSAwO1xcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9uYW1laS5jIGIvZnMvb2NmczIvbmFtZWkuY1xcbmluZGV4IDEyNzc2NjZjNzdjZDJkLi4xMmExZmVmM2VlNzRlNiAxMDA2NDRcXG4tLS0gYS9mcy9vY2ZzMi9uYW1laS5jXFxuKysrIGIvZnMvb2NmczIvbmFtZWkuY1xcbkBAIC02NjcsOCArNjY3LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKm9jZnMyX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBzdGF0aWMgaW50IG9jZnMyX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0XFx0XFx0c3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tXFx0XFx0XFx0dW1vZGVfdCBtb2RlLFxcbi1cXHRcXHRcXHRib29sIGV4Y2wpXFxuK1xcdFxcdFxcdHVtb2RlX3QgbW9kZSlcXG4ge1xcbiBcXHRpbnQgcmV0O1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvb21mcy9kaXIuYyBiL2ZzL29tZnMvZGlyLmNcXG5pbmRleCAyZWQ1NDFmY2NmMzMxZC4uYTA5YTk4ZjdlMzBiYzYgMTAwNjQ0XFxuLS0tIGEvZnMvb21mcy9kaXIuY1xcbisrKyBiL2ZzL29tZnMvZGlyLmNcXG5AQCAtMjg2LDcgKzI4Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvbWZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gfVxcbiBcXG4gc3RhdGljIGludCBvbWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbitcXHRcXHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuIHtcXG4gXFx0cmV0dXJuIG9tZnNfYWRkX25vZGUoZGlyLCBkZW50cnksIG1vZGUgfCBTX0lGUkVHKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9mcy9vcmFuZ2Vmcy9uYW1laS5jIGIvZnMvb3JhbmdlZnMvbmFtZWkuY1xcbmluZGV4IDc1ZTY1ZTcyYzJkNjQ2Li45MWY5N2RiMTg5NzFiZiAxMDA2NDRcXG4tLS0gYS9mcy9vcmFuZ2Vmcy9uYW1laS5jXFxuKysrIGIvZnMvb3JhbmdlZnMvbmFtZWkuY1xcbkBAIC0xOCw4ICsxOCw3IEBAXFxuIHN0YXRpYyBpbnQgb3JhbmdlZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi1cXHRcXHRcXHR1bW9kZV90IG1vZGUsXFxuLVxcdFxcdFxcdGJvb2wgZXhjbHVzaXZlKVxcbitcXHRcXHRcXHR1bW9kZV90IG1vZGUpXFxuIHtcXG4gXFx0c3RydWN0IG9yYW5nZWZzX2lub2RlX3MgKnBhcmVudCA9IE9SQU5HRUZTX0koZGlyKTtcXG4gXFx0c3RydWN0IG9yYW5nZWZzX2tlcm5lbF9vcF9zICpuZXdfb3A7XFxuZGlmZiAtLWdpdCBhL2ZzL292ZXJsYXlmcy9kaXIuYyBiL2ZzL292ZXJsYXlmcy9kaXIuY1xcbmluZGV4IGEwMzM3NDNkYmY1MTU5Li44OGJjZjk4ZDI4N2QxZSAxMDA2NDRcXG4tLS0gYS9mcy9vdmVybGF5ZnMvZGlyLmNcXG4rKysgYi9mcy9vdmVybGF5ZnMvZGlyLmNcXG5AQCAtNzMyLDcgKzczMiw3IEBAIHN0YXRpYyBpbnQgb3ZsX2NyZWF0ZV9vYmplY3Qoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSwgZGV2X3QgcmRldixcXG4gfVxcbiBcXG4gc3RhdGljIGludCBvdmxfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcXG4rXFx0XFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuIHtcXG4gXFx0cmV0dXJuIG92bF9jcmVhdGVfb2JqZWN0KGRlbnRyeSwgKG1vZGUgXFx1MDAyNiAwNzc3NykgfCBTX0lGUkVHLCAwLCBOVUxMKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9mcy9yYW1mcy9pbm9kZS5jIGIvZnMvcmFtZnMvaW5vZGUuY1xcbmluZGV4IDM5ODc2MzllZDEzMmM2Li4wZjUyYmEyMmFhYzA0YyAxMDA2NDRcXG4tLS0gYS9mcy9yYW1mcy9pbm9kZS5jXFxuKysrIGIvZnMvcmFtZnMvaW5vZGUuY1xcbkBAIC0xMjgsNyArMTI4LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKnJhbWZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gfVxcbiBcXG4gc3RhdGljIGludCByYW1mc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbitcXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcXG4ge1xcbiBcXHRyZXR1cm4gcmFtZnNfbWtub2QoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRlJFRywgMCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZnMvc21iL2NsaWVudC9jaWZzZnMuaCBiL2ZzL3NtYi9jbGllbnQvY2lmc2ZzLmhcXG5pbmRleCA5MDFlMTM0MGM5ODZmYi4uYmNmMmZmODdkYTJkNWMgMTAwNjQ0XFxuLS0tIGEvZnMvc21iL2NsaWVudC9jaWZzZnMuaFxcbisrKyBiL2ZzL3NtYi9jbGllbnQvY2lmc2ZzLmhcXG5AQCAtNTQsNyArNTQsNyBAQCB2b2lkIGNpZnNfc2JfZGVhY3RpdmUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBjaWZzX2Rpcl9pbm9kZV9vcHM7XFxuIHN0cnVjdCBpbm9kZSAqY2lmc19yb290X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XFxuIGludCBjaWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbCk7XFxuK1xcdFxcdHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LCB1bW9kZV90IG1vZGUpO1xcbiBpbnQgY2lmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGlyZW50cnksXFxuIFxcdFxcdCAgICAgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBvZmxhZ3MsIHVtb2RlX3QgbW9kZSk7XFxuIGludCBjaWZzX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbmRpZmYgLS1naXQgYS9mcy9zbWIvY2xpZW50L2Rpci5jIGIvZnMvc21iL2NsaWVudC9kaXIuY1xcbmluZGV4IDg4YTRhMTc4N2ZmMDQ3Li43ODAzYmQ1YmQwMWY4MCAxMDA2NDRcXG4tLS0gYS9mcy9zbWIvY2xpZW50L2Rpci5jXFxuKysrIGIvZnMvc21iL2NsaWVudC9kaXIuY1xcbkBAIC02NDUsNyArNjQ1LDcgQEAgaW50IGNpZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LFxcbiAgKiBoYXNoZWQtcG9zaXRpdmUgYnkgY2FsbGluZyBkX2luc3RhbnRpYXRlKCkuXFxuICAqL1xcbiBpbnQgY2lmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXFxuK1xcdFxcdHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LCB1bW9kZV90IG1vZGUpXFxuIHtcXG4gXFx0c3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiA9IENJRlNfU0IoZGlyKTtcXG4gXFx0aW50IHJjO1xcbmRpZmYgLS1naXQgYS9mcy91Ymlmcy9kaXIuYyBiL2ZzL3ViaWZzL2Rpci5jXFxuaW5kZXggODZkNDFlMDc3ZTRkNjIuLmZkOGRmMTA1NDdiZjQyIDEwMDY0NFxcbi0tLSBhL2ZzL3ViaWZzL2Rpci5jXFxuKysrIGIvZnMvdWJpZnMvZGlyLmNcXG5AQCAtMzAzLDcgKzMwMyw3IEBAIHN0YXRpYyBpbnQgdWJpZnNfcHJlcGFyZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4gfVxcbiBcXG4gc3RhdGljIGludCB1Ymlmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbitcXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xcbiBcXHRzdHJ1Y3QgdWJpZnNfaW5mbyAqYyA9IGRpci1cXHUwMDNlaV9zYi1cXHUwMDNlc19mc19pbmZvO1xcbmRpZmYgLS1naXQgYS9mcy91ZGYvbmFtZWkuYyBiL2ZzL3VkZi9uYW1laS5jXFxuaW5kZXggOWEzYjdjZWYzNjA2NDguLmZkOWI2ZjE2ZjYxNDYyIDEwMDY0NFxcbi0tLSBhL2ZzL3VkZi9uYW1laS5jXFxuKysrIGIvZnMvdWRmL25hbWVpLmNcXG5AQCAtMzcxLDcgKzM3MSw3IEBAIHN0YXRpYyBpbnQgdWRmX2FkZF9ub25kaXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHVkZl9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbitcXHRcXHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gdWRmX25ld19pbm9kZShkaXIsIG1vZGUpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvdWZzL25hbWVpLmMgYi9mcy91ZnMvbmFtZWkuY1xcbmluZGV4IDViM2M4NWM5MzI0Mjk4Li41MDEyZTA1NjIwMGFjYSAxMDA2NDRcXG4tLS0gYS9mcy91ZnMvbmFtZWkuY1xcbisrKyBiL2ZzL3Vmcy9uYW1laS5jXFxuQEAgLTcwLDggKzcwLDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKnVmc19sb29rdXAoc3RydWN0IGlub2RlICogZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVuc2lcXG4gICogd2l0aCBkX2luc3RhbnRpYXRlKCkuIFxcbiAgKi9cXG4gc3RhdGljIGludCB1ZnNfY3JlYXRlIChzdHJ1Y3QgbW50X2lkbWFwICogaWRtYXAsXFxuLVxcdFxcdHN0cnVjdCBpbm9kZSAqIGRpciwgc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwgdW1vZGVfdCBtb2RlLFxcbi1cXHRcXHRib29sIGV4Y2wpXFxuK1xcdFxcdHN0cnVjdCBpbm9kZSAqIGRpciwgc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy92Ym94c2YvZGlyLmMgYi9mcy92Ym94c2YvZGlyLmNcXG5pbmRleCBjNWJkMzI3MWFhOTYxNi4uMGI5ZWFiMTU3NDMyZGYgMTAwNjQ0XFxuLS0tIGEvZnMvdmJveHNmL2Rpci5jXFxuKysrIGIvZnMvdmJveHNmL2Rpci5jXFxuQEAgLTI5OCw5ICsyOTgsOSBAQCBzdGF0aWMgaW50IHZib3hzZl9kaXJfY3JlYXRlKHN0cnVjdCBpbm9kZSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIFxcbiBzdGF0aWMgaW50IHZib3hzZl9kaXJfbWtmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBpbm9kZSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLVxcdFxcdFxcdCAgICAgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXFxuK1xcdFxcdFxcdCAgICAgdW1vZGVfdCBtb2RlKVxcbiB7XFxuLVxcdHJldHVybiB2Ym94c2ZfZGlyX2NyZWF0ZShwYXJlbnQsIGRlbnRyeSwgbW9kZSwgZmFsc2UsIGV4Y2wsIE5VTEwpO1xcbitcXHRyZXR1cm4gdmJveHNmX2Rpcl9jcmVhdGUocGFyZW50LCBkZW50cnksIG1vZGUsIGZhbHNlLCB0cnVlLCBOVUxMKTtcXG4gfVxcbiBcXG4gc3RhdGljIHN0cnVjdCBkZW50cnkgKnZib3hzZl9kaXJfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9wcy5jIGIvZnMveGZzL3hmc19pb3BzLmNcXG5pbmRleCA2MzM5ZjQ5NTZlY2IzOS4uZTQ4ZjllNWExYjhhMTggMTAwNjQ0XFxuLS0tIGEvZnMveGZzL3hmc19pb3BzLmNcXG4rKysgYi9mcy94ZnMveGZzX2lvcHMuY1xcbkBAIC0yOTMsOCArMjkzLDcgQEAgeGZzX3ZuX2NyZWF0ZShcXG4gXFx0c3RydWN0IG1udF9pZG1hcFxcdCppZG1hcCxcXG4gXFx0c3RydWN0IGlub2RlXFx0XFx0KmRpcixcXG4gXFx0c3RydWN0IGRlbnRyeVxcdFxcdCpkZW50cnksXFxuLVxcdHVtb2RlX3RcXHRcXHRcXHRtb2RlLFxcbi1cXHRib29sXFx0XFx0XFx0ZmxhZ3MpXFxuK1xcdHVtb2RlX3RcXHRcXHRcXHRtb2RlKVxcbiB7XFxuIFxcdHJldHVybiB4ZnNfZ2VuZXJpY19jcmVhdGUoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCAwLCBOVUxMKTtcXG4gfVxcbkBAIC0zMzgsNyArMzM3LDcgQEAgU1RBVElDIHN0cnVjdCBkZW50cnkgKlxcbiB4ZnNfdm5fY2lfbG9va3VwKFxcbiBcXHRzdHJ1Y3QgaW5vZGVcXHQqZGlyLFxcbiBcXHRzdHJ1Y3QgZGVudHJ5XFx0KmRlbnRyeSxcXG4tXFx0dW5zaWduZWQgaW50IGZsYWdzKVxcbitcXHR1bnNpZ25lZCBpbnRcXHRmbGFncylcXG4ge1xcbiBcXHRzdHJ1Y3QgeGZzX2lub2RlICppcDtcXG4gXFx0c3RydWN0IHhmc19uYW1lXFx0eG5hbWU7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaFxcbmluZGV4IGQxMDg5N2IzYTFlMzUwLi4xYjdjNDBiMmZhNmRlMyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmhcXG5AQCAtMjAwMiw3ICsyMDAyLDcgQEAgc3RydWN0IGlub2RlX29wZXJhdGlvbnMge1xcbiBcXHRpbnQgKCpyZWFkbGluaykgKHN0cnVjdCBkZW50cnkgKiwgY2hhciBfX3VzZXIgKixpbnQpO1xcbiBcXG4gXFx0aW50ICgqY3JlYXRlKSAoc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICosXFxuLVxcdFxcdCAgICAgICB1bW9kZV90LCBib29sKTtcXG4rXFx0XFx0ICAgICAgIHVtb2RlX3QpO1xcbiBcXHRpbnQgKCpsaW5rKSAoc3RydWN0IGRlbnRyeSAqLHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKik7XFxuIFxcdGludCAoKnVubGluaykgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKik7XFxuIFxcdGludCAoKnN5bWxpbmspIChzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKixcXG5kaWZmIC0tZ2l0IGEvaXBjL21xdWV1ZS5jIGIvaXBjL21xdWV1ZS5jXFxuaW5kZXggNDc5OGIzNzU5NzJiZjQuLjJkZGRiOTdmMmY4YTU1IDEwMDY0NFxcbi0tLSBhL2lwYy9tcXVldWUuY1xcbisrKyBiL2lwYy9tcXVldWUuY1xcbkBAIC02MDgsNyArNjA4LDcgQEAgc3RhdGljIGludCBtcXVldWVfY3JlYXRlX2F0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIHZvaWQgKmFyZylcXG4gfVxcbiBcXG4gc3RhdGljIGludCBtcXVldWVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXFxuK1xcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcXG4ge1xcbiBcXHRyZXR1cm4gbXF1ZXVlX2NyZWF0ZV9hdHRyKGRlbnRyeSwgbW9kZSwgTlVMTCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmNcXG5pbmRleCBiNTFmODNjOTcwYmIzNy4uNTc4OWEwZjVhMzQ2M2IgMTAwNjQ0XFxuLS0tIGEvbW0vc2htZW0uY1xcbisrKyBiL21tL3NobWVtLmNcXG5AQCAtMzg2NCw3ICszODY0LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKnNobWVtX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gfVxcbiBcXG4gc3RhdGljIGludCBzaG1lbV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbitcXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcXG4ge1xcbiBcXHRyZXR1cm4gc2htZW1fbWtub2QoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRlJFRywgMCk7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTg6Mzg6MTUuNTQ2NzU2MzE1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzkxNzE4OTY3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBpcyBhIHRyZWUtd2lkZSBBUEkgcmVmYWN0b3JpbmcgdGhhdCByZW1vdmVzIHRoZSByZWR1bmRhbnQgJ2V4Y2wnIGFyZ3VtZW50IGZyb20gdGhlICdjcmVhdGUnIGlub2RlIG9wZXJhdGlvbi4gVkZTIHByZXZpb3VzbHkgcGFzc2VkICd0cnVlJyBmcm9tIHZmc19jcmVhdGUoKSBhbmQgJ29wZW5fZmxhZyBcXHUwMDI2IE9fRVhDTCcgZnJvbSBsb29rdXBfb3BlbigpLiBIb3dldmVyLCBmb3IgbG9jYWwgZmlsZXN5c3RlbXMsIFZGUyBob2xkcyB0aGUgaW5vZGVfbG9jayBkdXJpbmcgY3JlYXRlLCBtYWtpbmcgY29uY3VycmVudCBjcmVhdGlvbiBpbXBvc3NpYmxlIGFuZCB0aGUgJ2V4Y2wnIGFyZ3VtZW50IHJlZHVuZGFudC4gRm9yIG5ldHdvcmsgZmlsZXN5c3RlbXMsIG5vbi1leGNsdXNpdmUgY3JlYXRlcyBhcmUgaGFuZGxlZCB2aWEgYXRvbWljX29wZW4oKS4gVGhlIGZpbGVzeXN0ZW1zIHRoYXQgdXNlZCB0aGUgYXJndW1lbnQgaW50ZXJuYWxseSAobGlrZSBnZnMyLCBuZnMsIHZib3hzZikgbm93IGhhcmRjb2RlICd0cnVlJyBvciAnT19FWENMJywgd2hpY2ggZXhhY3RseSBtYXRjaGVzIHRoZSBwcmV2aW91cyBiZWhhdmlvciB3aGVuIGNhbGxlZCBmcm9tIHZmc19jcmVhdGUuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDA0MmRkZWNmM2NlZDIwNzc3YmU1Mzg3NGQxZDlhMDMzN2ZiNDJiOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMTg6Mzg6MTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdFxuaW5kZXggZDEzZjBhMjNjODgyZmMuLjAyNTIyZmJmZDk2ODZmIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdFxuQEAgLTE0MDEsMyArMTQwMSwxMSBAQCBhcyB3aXRoIGRfZGlzcG9zZV9pZl91bnVzZWQoKSB0aGVzZSBhcmUgbm90IHRyaXZpYWw7IHdpdGggdGhpcyB2YXJpYW50XG4gb2YgQVBJIGl0J3MgbW9yZSBleHBsaWNpdCwgc2luY2UgZ3JhYmJpbmcgLVx1MDAzZWRfbG9jayBpcyBjYWxsZXItc2lkZSwgYnV0XG4gZF9kaXNwb3NlX2lmX3VudXNlZCgpIGhhZCBhbGwgdGhlIHNhbWUgaXNzdWVzLiAgSXQncyBhIGxvdy1sZXZlbCBwcmltaXRpdmU7XG4gdXNlIG9ubHkgaWYgeW91IGhhdmUgbm8gYWx0ZXJuYXRpdmUuXG4rXG4rLS0tXG4rXG4rKiptYW5kYXRvcnkqKlxuK1xuK1RoZSAuY3JlYXRlIGlub2RlX29wZXJhdGlvbiBubyBsb25nZXIgcmVjZWl2ZXMgdGhlICdleGNsJyBhcmcuICBJdCBtdXN0XG4rYWx3YXlzIGFzc3VtZSB0aGUgZmlsZSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LiAgSWYgdGhlIGZpbGVzeXN0ZW0gbmVlZHNcbit0byBiZSBpbnZvbHZlZCBpbiBub24tZXhjbHVzaXZlIGNyZWF0ZSwgaXQgc2hvdWxkIHByb3ZpZGUgYXRvbWljX29wZW4uXG5kaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlLmMgYi9mcy85cC92ZnNfaW5vZGUuY1xuaW5kZXggNTc4M2QwMzM2Zjk2YWMuLmU0N2I5MGU3MDgzNzY4IDEwMDY0NFxuLS0tIGEvZnMvOXAvdmZzX2lub2RlLmNcbisrKyBiL2ZzLzlwL3Zmc19pbm9kZS5jXG5AQCAtNjQ1LDcgKzY0NSw2IEBAIHY5ZnNfY3JlYXRlKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMsIHN0cnVjdCBpbm9kZSAqZGlyLFxuICAqIEBkaXI6IFRoZSBwYXJlbnQgZGlyZWN0b3J5XG4gICogQGRlbnRyeTogVGhlIG5hbWUgb2YgZmlsZSB0byBiZSBjcmVhdGVkXG4gICogQG1vZGU6IFRoZSBVTklYIGZpbGUgbW9kZSB0byBzZXRcbi0gKiBAZXhjbDogVHJ1ZSBpZiB0aGUgZmlsZSBtdXN0IG5vdCB5ZXQgZXhpc3RcbiAgKlxuICAqIG9wZW4oLi4sIE9fQ1JFQVQpIGlzIGhhbmRsZWQgaW4gdjlmc192ZnNfYXRvbWljX29wZW4oKS4gIFRoaXMgaXMgb25seSBjYWxsZWRcbiAgKiBmb3IgbWtub2QoMikuXG5AQCAtNjU0LDcgKzY1Myw3IEBAIHY5ZnNfY3JlYXRlKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFxuIHN0YXRpYyBpbnRcbiB2OWZzX3Zmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuK1x0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzID0gdjlmc19pbm9kZTJ2OXNlcyhkaXIpO1xuIFx0dTMyIHBlcm0gPSB1bml4bW9kZTJwOW1vZGUodjlzZXMsIG1vZGUpO1xuZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmMgYi9mcy85cC92ZnNfaW5vZGVfZG90bC5jXG5pbmRleCBmNzM5NmQyMGNiNmNkYy4uZDE3YzNiNmVlYmIyMmQgMTAwNjQ0XG4tLS0gYS9mcy85cC92ZnNfaW5vZGVfZG90bC5jXG4rKysgYi9mcy85cC92ZnNfaW5vZGVfZG90bC5jXG5AQCAtMjEzLDEyICsyMTMsMTEgQEAgaW50IHY5ZnNfb3Blbl90b19kb3RsX2ZsYWdzKGludCBmbGFncylcbiAgKiBAZGlyOiBkaXJlY3RvcnkgaW5vZGUgdGhhdCBpcyBiZWluZyBjcmVhdGVkXG4gICogQGRlbnRyeTogIGRlbnRyeSB0aGF0IGlzIGJlaW5nIGRlbGV0ZWRcbiAgKiBAb21vZGU6IGNyZWF0ZSBwZXJtaXNzaW9uc1xuLSAqIEBleGNsOiBUcnVlIGlmIHRoZSBmaWxlIG11c3Qgbm90IHlldCBleGlzdFxuICAqXG4gICovXG4gc3RhdGljIGludFxuIHY5ZnNfdmZzX2NyZWF0ZV9kb3RsKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3Qgb21vZGUsIGJvb2wgZXhjbClcbitcdFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3Qgb21vZGUpXG4ge1xuIFx0cmV0dXJuIHY5ZnNfdmZzX21rbm9kX2RvdGwoaWRtYXAsIGRpciwgZGVudHJ5LCBvbW9kZSwgMCk7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvYWZmcy5oIGIvZnMvYWZmcy9hZmZzLmhcbmluZGV4IDQ0YTNmNjlkMjc1Zjk2Li5kNmIzMzkzNjMzZjJkOSAxMDA2NDRcbi0tLSBhL2ZzL2FmZnMvYWZmcy5oXG4rKysgYi9mcy9hZmZzL2FmZnMuaFxuQEAgLTE2OSw3ICsxNjksNyBAQCBleHRlcm4gaW50XHRhZmZzX2hhc2hfbmFtZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCB1OCAqbmFtZSwgdW5zaWduZWQgaW50IGxcbiBleHRlcm4gc3RydWN0IGRlbnRyeSAqYWZmc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW5zaWduZWQgaW50KTtcbiBleHRlcm4gaW50XHRhZmZzX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbiBleHRlcm4gaW50XHRhZmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wpO1xuK1x0XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbiBleHRlcm4gc3RydWN0IGRlbnRyeSAqYWZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xuIGV4dGVybiBpbnRcdGFmZnNfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9uYW1laS5jIGIvZnMvYWZmcy9uYW1laS5jXG5pbmRleCBjM2M2NTMyZGE0YjBkYS4uYjAwMDEwODQ3MjdhNWQgMTAwNjQ0XG4tLS0gYS9mcy9hZmZzL25hbWVpLmNcbisrKyBiL2ZzL2FmZnMvbmFtZWkuY1xuQEAgLTI0Myw3ICsyNDMsNyBAQCBhZmZzX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFxuIGludFxuIGFmZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdCAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuK1x0ICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkaXItXHUwMDNlaV9zYjtcbiBcdHN0cnVjdCBpbm9kZVx0Kmlub2RlO1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9kaXIuYyBiL2ZzL2Fmcy9kaXIuY1xuaW5kZXggNDk4Yjk5Y2NkZjBlMjcuLjY2Y2MzMzMyZWYzMTlhIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2Rpci5jXG4rKysgYi9mcy9hZnMvZGlyLmNcbkBAIC0zMiw3ICszMiw3IEBAIHN0YXRpYyBib29sIGFmc19sb29rdXBfb25lX2ZpbGxkaXIoc3RydWN0IGRpcl9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsIGluXG4gc3RhdGljIGJvb2wgYWZzX2xvb2t1cF9maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmxlbixcbiBcdFx0XHQgICAgICBsb2ZmX3QgZnBvcywgdTY0IGlubywgdW5zaWduZWQgZHR5cGUpO1xuIHN0YXRpYyBpbnQgYWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpO1xuK1x0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XG4gc3RhdGljIHN0cnVjdCBkZW50cnkgKmFmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XG4gc3RhdGljIGludCBhZnNfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG5AQCAtMTYyMyw3ICsxNjIzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhZnNfb3BlcmF0aW9uX29wcyBhZnNfY3JlYXRlX29wZXJhdGlvbiA9IHtcbiAgKiBjcmVhdGUgYSByZWd1bGFyIGZpbGUgb24gYW4gQUZTIGZpbGVzeXN0ZW1cbiAgKi9cbiBzdGF0aWMgaW50IGFmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuK1x0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3A7XG4gXHRzdHJ1Y3QgYWZzX3Zub2RlICpkdm5vZGUgPSBBRlNfRlNfSShkaXIpO1xuZGlmZiAtLWdpdCBhL2ZzL2JhZF9pbm9kZS5jIGIvZnMvYmFkX2lub2RlLmNcbmluZGV4IGFjZjg2MTNmNWUzNjhlLi40ODZjNDBmNzNlNTFlMCAxMDA2NDRcbi0tLSBhL2ZzL2JhZF9pbm9kZS5jXG4rKysgYi9mcy9iYWRfaW5vZGUuY1xuQEAgLTI5LDcgKzI5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmFkX2ZpbGVfb3BzID1cbiBcbiBzdGF0aWMgaW50IGJhZF9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0ICAgIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuK1x0XHRcdCAgICB1bW9kZV90IG1vZGUpXG4ge1xuIFx0cmV0dXJuIC1FSU87XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL2Jmcy9kaXIuYyBiL2ZzL2Jmcy9kaXIuY1xuaW5kZXggNWI0MGFiMDlhNzk2ZGUuLjRjM2I0ZGIwOGNkZWZjIDEwMDY0NFxuLS0tIGEvZnMvYmZzL2Rpci5jXG4rKysgYi9mcy9iZnMvZGlyLmNcbkBAIC04Myw3ICs4Myw3IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmZzX2Rpcl9vcGVyYXRpb25zID0ge1xuIH07XG4gXG4gc3RhdGljIGludCBiZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbitcdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0aW50IGVycjtcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG5kaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW5vZGUuYyBiL2ZzL2J0cmZzL2lub2RlLmNcbmluZGV4IDI3MjU5OGY2YWU3N2FmLi4yMmMwYTBlMjQxZTUzMyAxMDA2NDRcbi0tLSBhL2ZzL2J0cmZzL2lub2RlLmNcbisrKyBiL2ZzL2J0cmZzL2lub2RlLmNcbkBAIC02ODMyLDcgKzY4MzIsNyBAQCBzdGF0aWMgaW50IGJ0cmZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiB9XG4gXG4gc3RhdGljIGludCBidHJmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG4rXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbiBcbmRpZmYgLS1naXQgYS9mcy9jZXBoL2Rpci5jIGIvZnMvY2VwaC9kaXIuY1xuaW5kZXggMjdjZTllNTVlOTQ3NjguLmRlZTQ1MjRjMjMzNjIzIDEwMDY0NFxuLS0tIGEvZnMvY2VwaC9kaXIuY1xuKysrIGIvZnMvY2VwaC9kaXIuY1xuQEAgLTk3OCw3ICs5NzgsNyBAQCBzdGF0aWMgaW50IGNlcGhfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIH1cbiBcbiBzdGF0aWMgaW50IGNlcGhfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG4rXHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRyZXR1cm4gY2VwaF9ta25vZChpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIDApO1xuIH1cbmRpZmYgLS1naXQgYS9mcy9jb2RhL2Rpci5jIGIvZnMvY29kYS9kaXIuY1xuaW5kZXggODM1ZWI3ZmRmZGFkMDAuLmVhNzEwYTVkYmJiNzRiIDEwMDY0NFxuLS0tIGEvZnMvY29kYS9kaXIuY1xuKysrIGIvZnMvY29kYS9kaXIuY1xuQEAgLTEzNCw3ICsxMzQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY29kYV9kaXJfZHJvcF9ubGluayhzdHJ1Y3QgaW5vZGUgKmRpcilcbiBcbiAvKiBjcmVhdGlvbiByb3V0aW5lczogY3JlYXRlLCBta25vZCwgbWtkaXIsIGxpbmssIHN5bWxpbmsgKi9cbiBzdGF0aWMgaW50IGNvZGFfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlLCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbitcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlLCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0aW50IGVycm9yO1xuIFx0Y29uc3QgY2hhciAqbmFtZT1kZS1cdTAwM2VkX25hbWUubmFtZTtcbmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9pbm9kZS5jIGIvZnMvZWNyeXB0ZnMvaW5vZGUuY1xuaW5kZXggN2FhZjE5MTNmOWM2ZDMuLjUyNTI5N2M3ZWJkOGM0IDEwMDY0NFxuLS0tIGEvZnMvZWNyeXB0ZnMvaW5vZGUuY1xuKysrIGIvZnMvZWNyeXB0ZnMvaW5vZGUuY1xuQEAgLTI2OCw3ICsyNjgsNyBAQCBpbnQgZWNyeXB0ZnNfaW5pdGlhbGl6ZV9maWxlKHN0cnVjdCBkZW50cnkgKmVjcnlwdGZzX2RlbnRyeSxcbiBzdGF0aWMgaW50XG4gZWNyeXB0ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRzdHJ1Y3QgaW5vZGUgKmRpcmVjdG9yeV9pbm9kZSwgc3RydWN0IGRlbnRyeSAqZWNyeXB0ZnNfZGVudHJ5LFxuLVx0XHR1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbitcdFx0dW1vZGVfdCBtb2RlKVxuIHtcbiBcdHN0cnVjdCBpbm9kZSAqZWNyeXB0ZnNfaW5vZGU7XG4gXHRpbnQgcmM7XG5kaWZmIC0tZ2l0IGEvZnMvZWZpdmFyZnMvaW5vZGUuYyBiL2ZzL2VmaXZhcmZzL2lub2RlLmNcbmluZGV4IDk1ZGNhZDgzZGExMWJlLi5mMGQwMDk1NTVmYzY2MCAxMDA2NDRcbi0tLSBhL2ZzL2VmaXZhcmZzL2lub2RlLmNcbisrKyBiL2ZzL2VmaXZhcmZzL2lub2RlLmNcbkBAIC03NSw3ICs3NSw3IEBAIHN0YXRpYyBib29sIGVmaXZhcmZzX3ZhbGlkX25hbWUoY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKVxuIH1cbiBcbiBzdGF0aWMgaW50IGVmaXZhcmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbitcdFx0XHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDtcbiBcdHN0cnVjdCBlZml2YXJfZW50cnkgKnZhcjtcbmRpZmYgLS1naXQgYS9mcy9leGZhdC9uYW1laS5jIGIvZnMvZXhmYXQvbmFtZWkuY1xuaW5kZXggYjdkNWU0NGFkMzhlZWUuLmNkOWM5ZWNhNThmODZlIDEwMDY0NFxuLS0tIGEvZnMvZXhmYXQvbmFtZWkuY1xuKysrIGIvZnMvZXhmYXQvbmFtZWkuY1xuQEAgLTUzOCw3ICs1MzgsNyBAQCBzdGF0aWMgaW50IGV4ZmF0X2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpwYXRoLFxuIH1cbiBcbiBzdGF0aWMgaW50IGV4ZmF0X2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbitcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGlyLVx1MDAzZWlfc2I7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDIvbmFtZWkuYyBiL2ZzL2V4dDIvbmFtZWkuY1xuaW5kZXggMGQwOWQyMmZlNzA4NjIuLjc0MmE3OGUxNjVkNDhlIDEwMDY0NFxuLS0tIGEvZnMvZXh0Mi9uYW1laS5jXG4rKysgYi9mcy9leHQyL25hbWVpLmNcbkBAIC05OSw3ICs5OSw3IEBAIHN0cnVjdCBkZW50cnkgKmV4dDJfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpjaGlsZClcbiAgKi9cbiBzdGF0aWMgaW50IGV4dDJfY3JlYXRlIChzdHJ1Y3QgbW50X2lkbWFwICogaWRtYXAsXG4gXHRcdFx0c3RydWN0IGlub2RlICogZGlyLCBzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5LFxuLVx0XHRcdHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuK1x0XHRcdHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuIFx0aW50IGVycjtcbmRpZmYgLS1naXQgYS9mcy9leHQ0L25hbWVpLmMgYi9mcy9leHQ0L25hbWVpLmNcbmluZGV4IGNjNDlhZTA0YTZmNjQ5Li5jM2RlNjRkMmEyZGYyMCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvbmFtZWkuY1xuKysrIGIvZnMvZXh0NC9uYW1laS5jXG5AQCAtMjgxMSw3ICsyODExLDcgQEAgc3RhdGljIGludCBleHQ0X2FkZF9ub25kaXIoaGFuZGxlX3QgKmhhbmRsZSxcbiAgKiB3aXRoIGRfaW5zdGFudGlhdGUoKS5cbiAgKi9cbiBzdGF0aWMgaW50IGV4dDRfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG4rXHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRoYW5kbGVfdCAqaGFuZGxlO1xuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbmRpZmYgLS1naXQgYS9mcy9mMmZzL25hbWVpLmMgYi9mcy9mMmZzL25hbWVpLmNcbmluZGV4IGNhYzAzYjhlOTFhMTVlLi42NDg2ODFjNWJhNTAxNiAxMDA2NDRcbi0tLSBhL2ZzL2YyZnMvbmFtZWkuY1xuKysrIGIvZnMvZjJmcy9uYW1laS5jXG5AQCAtMzY2LDcgKzM2Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmYyZnNfbmV3X2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIH1cbiBcbiBzdGF0aWMgaW50IGYyZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG4rXHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmkgPSBGMkZTX0lfU0IoZGlyKTtcbiBcdHN0cnVjdCBmMmZzX2xvY2tfY29udGV4dCBsYztcbmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfbXNkb3MuYyBiL2ZzL2ZhdC9uYW1laV9tc2Rvcy5jXG5pbmRleCAwZmQyOTcxYWQ0YjEzMS4uOWYyYTJlOWE5Y2U4ZWEgMTAwNjQ0XG4tLS0gYS9mcy9mYXQvbmFtZWlfbXNkb3MuY1xuKysrIGIvZnMvZmF0L25hbWVpX21zZG9zLmNcbkBAIC0yNjIsNyArMjYyLDcgQEAgc3RhdGljIGludCBtc2Rvc19hZGRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsXG4gXG4gLyoqKioqIENyZWF0ZSBhIGZpbGUgKi9cbiBzdGF0aWMgaW50IG1zZG9zX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbitcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGlyLVx1MDAzZWlfc2I7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDtcbmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfdmZhdC5jIGIvZnMvZmF0L25hbWVpX3ZmYXQuY1xuaW5kZXggZTkwOTQ0Nzg3M2UzNjQuLjEzOWQzZWY0YmZhZWI4IDEwMDY0NFxuLS0tIGEvZnMvZmF0L25hbWVpX3ZmYXQuY1xuKysrIGIvZnMvZmF0L25hbWVpX3ZmYXQuY1xuQEAgLTc1NSw3ICs3NTUsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqdmZhdF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiB9XG4gXG4gc3RhdGljIGludCB2ZmF0X2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuK1x0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRpci1cdTAwM2VpX3NiO1xuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuY1xuaW5kZXggMGUyYTEwMzlmYTQzZWEuLjBlZmIzMTQxZjdmNzBhIDEwMDY0NFxuLS0tIGEvZnMvZnVzZS9kaXIuY1xuKysrIGIvZnMvZnVzZS9kaXIuY1xuQEAgLTEwODQsNyArMTA4NCw3IEBAIHN0YXRpYyBpbnQgZnVzZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gfVxuIFxuIHN0YXRpYyBpbnQgZnVzZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuK1x0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRyZXR1cm4gZnVzZV9ta25vZChpZG1hcCwgZGlyLCBlbnRyeSwgbW9kZSwgMCk7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL2dmczIvaW5vZGUuYyBiL2ZzL2dmczIvaW5vZGUuY1xuaW5kZXggOGE3Nzc5NGJiZDRhZmMuLjllMjNjOGQ1NTk2MjNkIDEwMDY0NFxuLS0tIGEvZnMvZ2ZzMi9pbm9kZS5jXG4rKysgYi9mcy9nZnMyL2lub2RlLmNcbkBAIC05NjksOSArOTY5LDkgQEAgc3RhdGljIGludCBnZnMyX2NyZWF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuICAqL1xuIFxuIHN0YXRpYyBpbnQgZ2ZzMl9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbitcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbi1cdHJldHVybiBnZnMyX2NyZWF0ZV9pbm9kZShkaXIsIGRlbnRyeSwgTlVMTCwgU19JRlJFRyB8IG1vZGUsIDAsIE5VTEwsIDAsIGV4Y2wpO1xuK1x0cmV0dXJuIGdmczJfY3JlYXRlX2lub2RlKGRpciwgZGVudHJ5LCBOVUxMLCBTX0lGUkVHIHwgbW9kZSwgMCwgTlVMTCwgMCwgMSk7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2ZzL2hmcy9kaXIuYyBiL2ZzL2hmcy9kaXIuY1xuaW5kZXggZTEzNDUwYmI5MzNlYmQuLjkzZWRjNWE4MGM4MTNkIDEwMDY0NFxuLS0tIGEvZnMvaGZzL2Rpci5jXG4rKysgYi9mcy9oZnMvZGlyLmNcbkBAIC0xODQsNyArMTg0LDcgQEAgc3RhdGljIGludCBoZnNfZGlyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gICogdGhlIGRpcmVjdG9yeSBhbmQgdGhlIG5hbWUgKGFuZCBpdHMgbGVuZ3RoKSBvZiB0aGUgbmV3IGZpbGUuXG4gICovXG4gc3RhdGljIGludCBoZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbitcdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbiBcdGludCByZXM7XG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9kaXIuYyBiL2ZzL2hmc3BsdXMvZGlyLmNcbmluZGV4IDhiZjZjN2NkZDlhODY1Li5mMGFhZTJjZDZmY2ZkYyAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvZGlyLmNcbisrKyBiL2ZzL2hmc3BsdXMvZGlyLmNcbkBAIC01NjIsNyArNTYyLDcgQEAgc3RhdGljIGludCBoZnNwbHVzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiB9XG4gXG4gc3RhdGljIGludCBoZnNwbHVzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuK1x0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0cmV0dXJuIGhmc3BsdXNfbWtub2QoXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIDApO1xuIH1cbmRpZmYgLS1naXQgYS9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uYyBiL2ZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jXG5pbmRleCBhYmU4NmQ3MmQ5ZWY3NS4uN2FkZDA1NmQ0N2Q4ZjAgMTAwNjQ0XG4tLS0gYS9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uY1xuKysrIGIvZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmNcbkBAIC01OTMsNyArNTkzLDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqaG9zdGZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY2hhciAqbmFtZSlcbiB9XG4gXG4gc3RhdGljIGludCBob3N0ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbitcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbiBcdGNoYXIgKm5hbWU7XG5kaWZmIC0tZ2l0IGEvZnMvaHBmcy9uYW1laS5jIGIvZnMvaHBmcy9uYW1laS5jXG5pbmRleCAzNTNlMTNhNjE1ZjU2Ni4uODA5MTEzZDgyNDhkNTAgMTAwNjQ0XG4tLS0gYS9mcy9ocGZzL25hbWVpLmNcbisrKyBiL2ZzL2hwZnMvbmFtZWkuY1xuQEAgLTEyOSw3ICsxMjksNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqaHBmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gfVxuIFxuIHN0YXRpYyBpbnQgaHBmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbitcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUgPSBkZW50cnktXHUwMDNlZF9uYW1lLm5hbWU7XG4gXHR1bnNpZ25lZCBsZW4gPSBkZW50cnktXHUwMDNlZF9uYW1lLmxlbjtcbmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5pbmRleCAyMTZlMWEwZGQwYjIzNy4uMTZkODQzN2FlZDUxYmIgMTAwNjQ0XG4tLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuY1xuKysrIGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcbkBAIC05NzksNyArOTc5LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmh1Z2V0bGJmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXJcbiBcbiBzdGF0aWMgaW50IGh1Z2V0bGJmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0ICAgIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuK1x0XHRcdCAgICB1bW9kZV90IG1vZGUpXG4ge1xuIFx0cmV0dXJuIGh1Z2V0bGJmc19ta25vZChpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUgfCBTX0lGUkVHLCAwKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvamZmczIvZGlyLmMgYi9mcy9qZmZzMi9kaXIuY1xuaW5kZXggYzQwODhjM2I0YWMwMzYuLjNkNDY5NWI4MzhlZDA2IDEwMDY0NFxuLS0tIGEvZnMvamZmczIvZGlyLmNcbisrKyBiL2ZzL2pmZnMyL2Rpci5jXG5AQCAtMjYsNyArMjYsNyBAQFxuIHN0YXRpYyBpbnQgamZmczJfcmVhZGRpciAoc3RydWN0IGZpbGUgKiwgc3RydWN0IGRpcl9jb250ZXh0ICopO1xuIFxuIHN0YXRpYyBpbnQgamZmczJfY3JlYXRlIChzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLFxuLVx0XHQgICAgICAgICBzdHJ1Y3QgZGVudHJ5ICosIHVtb2RlX3QsIGJvb2wpO1xuK1x0XHQgICAgICAgICBzdHJ1Y3QgZGVudHJ5ICosIHVtb2RlX3QpO1xuIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpqZmZzMl9sb29rdXAgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKixcbiBcdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQpO1xuIHN0YXRpYyBpbnQgamZmczJfbGluayAoc3RydWN0IGRlbnRyeSAqLHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKik7XG5AQCAtMTYzLDcgKzE2Myw3IEBAIHN0YXRpYyBpbnQgamZmczJfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4gXG4gXG4gc3RhdGljIGludCBqZmZzMl9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyX2ksXG4tXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbitcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3QgamZmczJfcmF3X2lub2RlICpyaTtcbiBcdHN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvICpmLCAqZGlyX2Y7XG5kaWZmIC0tZ2l0IGEvZnMvamZzL25hbWVpLmMgYi9mcy9qZnMvbmFtZWkuY1xuaW5kZXggNDQyZDYyNjc5MjYyMjcuLjJjZjRlMjgwZWUxODVhIDEwMDY0NFxuLS0tIGEvZnMvamZzL25hbWVpLmNcbisrKyBiL2ZzL2pmcy9uYW1laS5jXG5AQCAtNjEsNyArNjEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9lYV93bWFwKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gICpcbiAgKi9cbiBzdGF0aWMgaW50IGpmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlwLFxuLVx0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuK1x0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRpbnQgcmMgPSAwO1xuIFx0dGlkX3QgdGlkO1x0XHQvKiB0cmFuc2FjdGlvbiBpZCAqL1xuZGlmZiAtLWdpdCBhL2ZzL21pbml4L25hbWVpLmMgYi9mcy9taW5peC9uYW1laS5jXG5pbmRleCAyNjNlNGJhOGIxYzgyMi4uNzllNTkxYmRmZGMxMGQgMTAwNjQ0XG4tLS0gYS9mcy9taW5peC9uYW1laS5jXG4rKysgYi9mcy9taW5peC9uYW1laS5jXG5AQCAtNjQsNyArNjQsNyBAQCBzdGF0aWMgaW50IG1pbml4X3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIH1cbiBcbiBzdGF0aWMgaW50IG1pbml4X2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbitcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRyZXR1cm4gbWluaXhfbWtub2QoXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIDApO1xuIH1cbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xuaW5kZXggNWNjOWYwZjQ2NmI4MzAuLjhkODFmYzMwMWU5ODk3IDEwMDY0NFxuLS0tIGEvZnMvbmFtZWkuY1xuKysrIGIvZnMvbmFtZWkuY1xuQEAgLTQxOTksNyArNDE5OSw3IEBAIGludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcbiBcdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4tXHRlcnJvciA9IGRpci1cdTAwM2VpX29wLVx1MDAzZWNyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIHRydWUpO1xuK1x0ZXJyb3IgPSBkaXItXHUwMDNlaV9vcC1cdTAwM2VjcmVhdGUoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiBcdGlmICghZXJyb3IpXG4gXHRcdGZzbm90aWZ5X2NyZWF0ZShkaXIsIGRlbnRyeSk7XG4gXHRyZXR1cm4gZXJyb3I7XG5AQCAtNDUwNSw4ICs0NTA1LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0XHRnb3RvIG91dF9kcHV0O1xuIFx0XHR9XG4gXG4tXHRcdGVycm9yID0gZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlY3JlYXRlKGlkbWFwLCBkaXJfaW5vZGUsIGRlbnRyeSxcbi1cdFx0XHRcdFx0XHRtb2RlLCBvcGVuX2ZsYWcgXHUwMDI2IE9fRVhDTCk7XG4rXHRcdGVycm9yID0gZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlY3JlYXRlKGlkbWFwLCBkaXJfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XG4gXHRcdGlmIChlcnJvcilcbiBcdFx0XHRnb3RvIG91dF9kcHV0O1xuIFx0fVxuZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXIuYyBiL2ZzL25mcy9kaXIuY1xuaW5kZXggYzdiNzIzYzE4NjIwYzkuLjI4MzBkZGM0MTZjZjc1IDEwMDY0NFxuLS0tIGEvZnMvbmZzL2Rpci5jXG4rKysgYi9mcy9uZnMvZGlyLmNcbkBAIC0yNDI3LDkgKzI0MjcsOSBAQCBzdGF0aWMgaW50IG5mc19kb19jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiB9XG4gXG4gaW50IG5mc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG4rXHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuLVx0cmV0dXJuIG5mc19kb19jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUsIGV4Y2wgPyBPX0VYQ0wgOiAwKTtcbitcdHJldHVybiBuZnNfZG9fY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlLCBPX0VYQ0wpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChuZnNfY3JlYXRlKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9uZnMvaW50ZXJuYWwuaCBiL2ZzL25mcy9pbnRlcm5hbC5oXG5pbmRleCBhY2FlZmY3ZGRmZGY3MC4uZGQ3N2Q1ZTgwZDdiOTMgMTAwNjQ0XG4tLS0gYS9mcy9uZnMvaW50ZXJuYWwuaFxuKysrIGIvZnMvbmZzL2ludGVybmFsLmhcbkBAIC0zOTUsNyArMzk1LDcgQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbmZzX2FjY2Vzc19jYWNoZV9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuIHN0cnVjdCBkZW50cnkgKm5mc19sb29rdXAoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwgdW5zaWduZWQgaW50KTtcbiB2b2lkIG5mc19kX3BydW5lX2Nhc2VfaW5zZW5zaXRpdmVfYWxpYXNlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBpbnQgbmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosXG4tXHQgICAgICAgdW1vZGVfdCwgYm9vbCk7XG4rXHQgICAgICAgdW1vZGVfdCk7XG4gc3RydWN0IGRlbnRyeSAqbmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKixcbiBcdFx0XHQgdW1vZGVfdCk7XG4gaW50IG5mc19ybWRpcihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKTtcbmRpZmYgLS1naXQgYS9mcy9uaWxmczIvbmFtZWkuYyBiL2ZzL25pbGZzMi9uYW1laS5jXG5pbmRleCBlMmZlOTVkZTNkNzFjYS4uMGUwYTk4NTBmZjc2ZGMgMTAwNjQ0XG4tLS0gYS9mcy9uaWxmczIvbmFtZWkuY1xuKysrIGIvZnMvbmlsZnMyL25hbWVpLmNcbkBAIC04Niw3ICs4Niw3IEBAIG5pbGZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4gICogd2l0aCBkX2luc3RhbnRpYXRlKCkuXG4gICovXG4gc3RhdGljIGludCBuaWxmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG4rXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbiBcdHN0cnVjdCBuaWxmc190cmFuc2FjdGlvbl9pbmZvIHRpO1xuZGlmZiAtLWdpdCBhL2ZzL250ZnMvbmFtZWkuYyBiL2ZzL250ZnMvbmFtZWkuY1xuaW5kZXggYTE5NjI2YTEzNWJkN2YuLmI0ZGM2ZGEyMjY1OTZiIDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9uYW1laS5jXG4rKysgYi9mcy9udGZzL25hbWVpLmNcbkBAIC03MzYsNyArNzM2LDcgQEAgc3RhdGljIHN0cnVjdCBudGZzX2lub2RlICpfX250ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRcbiB9XG4gXG4gc3RhdGljIGludCBudGZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG4rXHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sID0gTlRGU19TQihkaXItXHUwMDNlaV9zYik7XG4gXHRzdHJ1Y3QgbnRmc19pbm9kZSAqbmk7XG5kaWZmIC0tZ2l0IGEvZnMvbnRmczMvbmFtZWkuYyBiL2ZzL250ZnMzL25hbWVpLmNcbmluZGV4IGM1OWRlNWYyZmE5NzcxLi42ZDAzMmIyMmM5N2RhZiAxMDA2NDRcbi0tLSBhL2ZzL250ZnMzL25hbWVpLmNcbisrKyBiL2ZzL250ZnMzL25hbWVpLmNcbkBAIC0xMDUsNyArMTA1LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKm50ZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gICogbnRmc19jcmVhdGUgLSBpbm9kZV9vcGVyYXRpb25zOjpjcmVhdGVcbiAgKi9cbiBzdGF0aWMgaW50IG50ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG4rXHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRyZXR1cm4gbnRmc19jcmVhdGVfaW5vZGUoaWRtYXAsIGRpciwgZGVudHJ5LCBOVUxMLCBTX0lGUkVHIHwgbW9kZSwgMCxcbiBcdFx0XHRcdCBOVUxMLCAwLCBOVUxMKTtcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG1mcy9kbG1mcy5jIGIvZnMvb2NmczIvZGxtZnMvZGxtZnMuY1xuaW5kZXggNTgyMWUzM2RmNzhmZDkuLmYwMTI0ZjgxZGYyOWIwIDEwMDY0NFxuLS0tIGEvZnMvb2NmczIvZGxtZnMvZGxtZnMuY1xuKysrIGIvZnMvb2NmczIvZGxtZnMvZGxtZnMuY1xuQEAgLTQ1Myw4ICs0NTMsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqZGxtZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqIGlkbWFwLFxuIHN0YXRpYyBpbnQgZGxtZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRcdHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHR1bW9kZV90IG1vZGUsXG4tXHRcdFx0Ym9vbCBleGNsKVxuK1x0XHRcdHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRpbnQgc3RhdHVzID0gMDtcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvbmFtZWkuYyBiL2ZzL29jZnMyL25hbWVpLmNcbmluZGV4IDEyNzc2NjZjNzdjZDJkLi4xMmExZmVmM2VlNzRlNiAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL25hbWVpLmNcbisrKyBiL2ZzL29jZnMyL25hbWVpLmNcbkBAIC02NjcsOCArNjY3LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKm9jZnMyX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIHN0YXRpYyBpbnQgb2NmczJfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRcdHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHR1bW9kZV90IG1vZGUsXG4tXHRcdFx0Ym9vbCBleGNsKVxuK1x0XHRcdHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRpbnQgcmV0O1xuIFxuZGlmZiAtLWdpdCBhL2ZzL29tZnMvZGlyLmMgYi9mcy9vbWZzL2Rpci5jXG5pbmRleCAyZWQ1NDFmY2NmMzMxZC4uYTA5YTk4ZjdlMzBiYzYgMTAwNjQ0XG4tLS0gYS9mcy9vbWZzL2Rpci5jXG4rKysgYi9mcy9vbWZzL2Rpci5jXG5AQCAtMjg2LDcgKzI4Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvbWZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiB9XG4gXG4gc3RhdGljIGludCBvbWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuK1x0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0cmV0dXJuIG9tZnNfYWRkX25vZGUoZGlyLCBkZW50cnksIG1vZGUgfCBTX0lGUkVHKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvb3JhbmdlZnMvbmFtZWkuYyBiL2ZzL29yYW5nZWZzL25hbWVpLmNcbmluZGV4IDc1ZTY1ZTcyYzJkNjQ2Li45MWY5N2RiMTg5NzFiZiAxMDA2NDRcbi0tLSBhL2ZzL29yYW5nZWZzL25hbWVpLmNcbisrKyBiL2ZzL29yYW5nZWZzL25hbWVpLmNcbkBAIC0xOCw4ICsxOCw3IEBAXG4gc3RhdGljIGludCBvcmFuZ2Vmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0c3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdHVtb2RlX3QgbW9kZSxcbi1cdFx0XHRib29sIGV4Y2x1c2l2ZSlcbitcdFx0XHR1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IG9yYW5nZWZzX2lub2RlX3MgKnBhcmVudCA9IE9SQU5HRUZTX0koZGlyKTtcbiBcdHN0cnVjdCBvcmFuZ2Vmc19rZXJuZWxfb3BfcyAqbmV3X29wO1xuZGlmZiAtLWdpdCBhL2ZzL292ZXJsYXlmcy9kaXIuYyBiL2ZzL292ZXJsYXlmcy9kaXIuY1xuaW5kZXggYTAzMzc0M2RiZjUxNTkuLjg4YmNmOThkMjg3ZDFlIDEwMDY0NFxuLS0tIGEvZnMvb3ZlcmxheWZzL2Rpci5jXG4rKysgYi9mcy9vdmVybGF5ZnMvZGlyLmNcbkBAIC03MzIsNyArNzMyLDcgQEAgc3RhdGljIGludCBvdmxfY3JlYXRlX29iamVjdChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlLCBkZXZfdCByZGV2LFxuIH1cbiBcbiBzdGF0aWMgaW50IG92bF9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuK1x0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRyZXR1cm4gb3ZsX2NyZWF0ZV9vYmplY3QoZGVudHJ5LCAobW9kZSBcdTAwMjYgMDc3NzcpIHwgU19JRlJFRywgMCwgTlVMTCk7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL3JhbWZzL2lub2RlLmMgYi9mcy9yYW1mcy9pbm9kZS5jXG5pbmRleCAzOTg3NjM5ZWQxMzJjNi4uMGY1MmJhMjJhYWMwNGMgMTAwNjQ0XG4tLS0gYS9mcy9yYW1mcy9pbm9kZS5jXG4rKysgYi9mcy9yYW1mcy9pbm9kZS5jXG5AQCAtMTI4LDcgKzEyOCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpyYW1mc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gfVxuIFxuIHN0YXRpYyBpbnQgcmFtZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuK1x0XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdHJldHVybiByYW1mc19ta25vZChcdTAwMjZub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSB8IFNfSUZSRUcsIDApO1xuIH1cbmRpZmYgLS1naXQgYS9mcy9zbWIvY2xpZW50L2NpZnNmcy5oIGIvZnMvc21iL2NsaWVudC9jaWZzZnMuaFxuaW5kZXggOTAxZTEzNDBjOTg2ZmIuLmJjZjJmZjg3ZGEyZDVjIDEwMDY0NFxuLS0tIGEvZnMvc21iL2NsaWVudC9jaWZzZnMuaFxuKysrIGIvZnMvc21iL2NsaWVudC9jaWZzZnMuaFxuQEAgLTU0LDcgKzU0LDcgQEAgdm9pZCBjaWZzX3NiX2RlYWN0aXZlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBjaWZzX2Rpcl9pbm9kZV9vcHM7XG4gc3RydWN0IGlub2RlICpjaWZzX3Jvb3RfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbiBpbnQgY2lmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpO1xuK1x0XHRzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbiBpbnQgY2lmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGlyZW50cnksXG4gXHRcdCAgICAgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBvZmxhZ3MsIHVtb2RlX3QgbW9kZSk7XG4gaW50IGNpZnNfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG5kaWZmIC0tZ2l0IGEvZnMvc21iL2NsaWVudC9kaXIuYyBiL2ZzL3NtYi9jbGllbnQvZGlyLmNcbmluZGV4IDg4YTRhMTc4N2ZmMDQ3Li43ODAzYmQ1YmQwMWY4MCAxMDA2NDRcbi0tLSBhL2ZzL3NtYi9jbGllbnQvZGlyLmNcbisrKyBiL2ZzL3NtYi9jbGllbnQvZGlyLmNcbkBAIC02NDUsNyArNjQ1LDcgQEAgaW50IGNpZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LFxuICAqIGhhc2hlZC1wb3NpdGl2ZSBieSBjYWxsaW5nIGRfaW5zdGFudGlhdGUoKS5cbiAgKi9cbiBpbnQgY2lmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG4rXHRcdHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0c3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiA9IENJRlNfU0IoZGlyKTtcbiBcdGludCByYztcbmRpZmYgLS1naXQgYS9mcy91Ymlmcy9kaXIuYyBiL2ZzL3ViaWZzL2Rpci5jXG5pbmRleCA4NmQ0MWUwNzdlNGQ2Mi4uZmQ4ZGYxMDU0N2JmNDIgMTAwNjQ0XG4tLS0gYS9mcy91Ymlmcy9kaXIuY1xuKysrIGIvZnMvdWJpZnMvZGlyLmNcbkBAIC0zMDMsNyArMzAzLDcgQEAgc3RhdGljIGludCB1Ymlmc19wcmVwYXJlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIH1cbiBcbiBzdGF0aWMgaW50IHViaWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbitcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuIFx0c3RydWN0IHViaWZzX2luZm8gKmMgPSBkaXItXHUwMDNlaV9zYi1cdTAwM2VzX2ZzX2luZm87XG5kaWZmIC0tZ2l0IGEvZnMvdWRmL25hbWVpLmMgYi9mcy91ZGYvbmFtZWkuY1xuaW5kZXggOWEzYjdjZWYzNjA2NDguLmZkOWI2ZjE2ZjYxNDYyIDEwMDY0NFxuLS0tIGEvZnMvdWRmL25hbWVpLmNcbisrKyBiL2ZzL3VkZi9uYW1laS5jXG5AQCAtMzcxLDcgKzM3MSw3IEBAIHN0YXRpYyBpbnQgdWRmX2FkZF9ub25kaXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIH1cbiBcbiBzdGF0aWMgaW50IHVkZl9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuK1x0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gdWRmX25ld19pbm9kZShkaXIsIG1vZGUpO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL3Vmcy9uYW1laS5jIGIvZnMvdWZzL25hbWVpLmNcbmluZGV4IDViM2M4NWM5MzI0Mjk4Li41MDEyZTA1NjIwMGFjYSAxMDA2NDRcbi0tLSBhL2ZzL3Vmcy9uYW1laS5jXG4rKysgYi9mcy91ZnMvbmFtZWkuY1xuQEAgLTcwLDggKzcwLDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKnVmc19sb29rdXAoc3RydWN0IGlub2RlICogZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVuc2lcbiAgKiB3aXRoIGRfaW5zdGFudGlhdGUoKS4gXG4gICovXG4gc3RhdGljIGludCB1ZnNfY3JlYXRlIChzdHJ1Y3QgbW50X2lkbWFwICogaWRtYXAsXG4tXHRcdHN0cnVjdCBpbm9kZSAqIGRpciwgc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuLVx0XHRib29sIGV4Y2wpXG4rXHRcdHN0cnVjdCBpbm9kZSAqIGRpciwgc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvdmJveHNmL2Rpci5jIGIvZnMvdmJveHNmL2Rpci5jXG5pbmRleCBjNWJkMzI3MWFhOTYxNi4uMGI5ZWFiMTU3NDMyZGYgMTAwNjQ0XG4tLS0gYS9mcy92Ym94c2YvZGlyLmNcbisrKyBiL2ZzL3Zib3hzZi9kaXIuY1xuQEAgLTI5OCw5ICsyOTgsOSBAQCBzdGF0aWMgaW50IHZib3hzZl9kaXJfY3JlYXRlKHN0cnVjdCBpbm9kZSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXG4gc3RhdGljIGludCB2Ym94c2ZfZGlyX21rZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHQgICAgIHN0cnVjdCBpbm9kZSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0ICAgICB1bW9kZV90IG1vZGUsIGJvb2wgZXhjbClcbitcdFx0XHQgICAgIHVtb2RlX3QgbW9kZSlcbiB7XG4tXHRyZXR1cm4gdmJveHNmX2Rpcl9jcmVhdGUocGFyZW50LCBkZW50cnksIG1vZGUsIGZhbHNlLCBleGNsLCBOVUxMKTtcbitcdHJldHVybiB2Ym94c2ZfZGlyX2NyZWF0ZShwYXJlbnQsIGRlbnRyeSwgbW9kZSwgZmFsc2UsIHRydWUsIE5VTEwpO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqdmJveHNmX2Rpcl9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvcHMuYyBiL2ZzL3hmcy94ZnNfaW9wcy5jXG5pbmRleCA2MzM5ZjQ5NTZlY2IzOS4uZTQ4ZjllNWExYjhhMTggMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2lvcHMuY1xuKysrIGIvZnMveGZzL3hmc19pb3BzLmNcbkBAIC0yOTMsOCArMjkzLDcgQEAgeGZzX3ZuX2NyZWF0ZShcbiBcdHN0cnVjdCBtbnRfaWRtYXBcdCppZG1hcCxcbiBcdHN0cnVjdCBpbm9kZVx0XHQqZGlyLFxuIFx0c3RydWN0IGRlbnRyeVx0XHQqZGVudHJ5LFxuLVx0dW1vZGVfdFx0XHRcdG1vZGUsXG4tXHRib29sXHRcdFx0ZmxhZ3MpXG4rXHR1bW9kZV90XHRcdFx0bW9kZSlcbiB7XG4gXHRyZXR1cm4geGZzX2dlbmVyaWNfY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgMCwgTlVMTCk7XG4gfVxuQEAgLTMzOCw3ICszMzcsNyBAQCBTVEFUSUMgc3RydWN0IGRlbnRyeSAqXG4geGZzX3ZuX2NpX2xvb2t1cChcbiBcdHN0cnVjdCBpbm9kZVx0KmRpcixcbiBcdHN0cnVjdCBkZW50cnlcdCpkZW50cnksXG4tXHR1bnNpZ25lZCBpbnQgZmxhZ3MpXG4rXHR1bnNpZ25lZCBpbnRcdGZsYWdzKVxuIHtcbiBcdHN0cnVjdCB4ZnNfaW5vZGUgKmlwO1xuIFx0c3RydWN0IHhmc19uYW1lXHR4bmFtZTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmhcbmluZGV4IGQxMDg5N2IzYTFlMzUwLi4xYjdjNDBiMmZhNmRlMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZnMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9mcy5oXG5AQCAtMjAwMiw3ICsyMDAyLDcgQEAgc3RydWN0IGlub2RlX29wZXJhdGlvbnMge1xuIFx0aW50ICgqcmVhZGxpbmspIChzdHJ1Y3QgZGVudHJ5ICosIGNoYXIgX191c2VyICosaW50KTtcbiBcbiBcdGludCAoKmNyZWF0ZSkgKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqLFxuLVx0XHQgICAgICAgdW1vZGVfdCwgYm9vbCk7XG4rXHRcdCAgICAgICB1bW9kZV90KTtcbiBcdGludCAoKmxpbmspIChzdHJ1Y3QgZGVudHJ5ICosc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqKTtcbiBcdGludCAoKnVubGluaykgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKik7XG4gXHRpbnQgKCpzeW1saW5rKSAoc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICosXG5kaWZmIC0tZ2l0IGEvaXBjL21xdWV1ZS5jIGIvaXBjL21xdWV1ZS5jXG5pbmRleCA0Nzk4YjM3NTk3MmJmNC4uMmRkZGI5N2YyZjhhNTUgMTAwNjQ0XG4tLS0gYS9pcGMvbXF1ZXVlLmNcbisrKyBiL2lwYy9tcXVldWUuY1xuQEAgLTYwOCw3ICs2MDgsNyBAQCBzdGF0aWMgaW50IG1xdWV1ZV9jcmVhdGVfYXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgdm9pZCAqYXJnKVxuIH1cbiBcbiBzdGF0aWMgaW50IG1xdWV1ZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuK1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRyZXR1cm4gbXF1ZXVlX2NyZWF0ZV9hdHRyKGRlbnRyeSwgbW9kZSwgTlVMTCk7XG4gfVxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCBiNTFmODNjOTcwYmIzNy4uNTc4OWEwZjVhMzQ2M2IgMTAwNjQ0XG4tLS0gYS9tbS9zaG1lbS5jXG4rKysgYi9tbS9zaG1lbS5jXG5AQCAtMzg2NCw3ICszODY0LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKnNobWVtX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiB9XG4gXG4gc3RhdGljIGludCBzaG1lbV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG4rXHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0cmV0dXJuIHNobWVtX21rbm9kKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSB8IFNfSUZSRUcsIDApO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE4OjM4OjE1LjU0Njc1OTY5NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNzA0ODQ0MjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVkZTIEFQSSBDaGFuZ2UgZm9yIGBjcmVhdGVgIElub2RlIE9wZXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBmdW5kYW1lbnRhbGx5IGFsdGVycyB0aGUgYGNyZWF0ZWAgaW5vZGUgb3BlcmF0aW9uIGluIHRoZSBWRlMgbGF5ZXIuIFNwZWNpZmljYWxseSwgdGhlIGBleGNsYCBhcmd1bWVudCwgd2hpY2ggaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGZpbGUgbXVzdCBiZSBjcmVhdGVkIGV4Y2x1c2l2ZWx5LCBpcyBiZWluZyByZW1vdmVkIGZyb20gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZS4gVGhpcyBjaGFuZ2UgcmlwcGxlcyB0aHJvdWdoIHRoZSBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9ucywgYWZmZWN0aW5nIGhvdyB0aGV5IGhhbmRsZSBmaWxlIGNyZWF0aW9uLiBUaGUgY2hhbmdlcyBpbmNsdWRlIHVwZGF0ZXMgdG8gdGhlIGRvY3VtZW50YXRpb24gKGBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0YCksIHRoZSBoZWFkZXIgZmlsZSAoYGluY2x1ZGUvbGludXgvZnMuaGApLCBhbmQgYSBtdWx0aXR1ZGUgb2YgZmlsZXN5c3RlbS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgKGxpa2UgYDlwYCwgYGV4dDRgLCBgYnRyZnNgLCBldGMuKS5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsaWVzIGluIGBmcy9uYW1laS5jYCwgd2hlcmUgYHZmc19jcmVhdGVgIGFuZCBgbG9va3VwX29wZW5gIGNhbGwgdGhlIGBjcmVhdGVgIGZ1bmN0aW9uLiBCZWZvcmUsIGBsb29rdXBfb3BlbmAgd291bGQgcGFzcyB0aGUgYE9fRVhDTGAgZmxhZyB2aWEgdGhlIGBleGNsYCBhcmd1bWVudC4gTm93LCB0aGF0IGFyZ3VtZW50IGlzIGdvbmUuIFRoZSBjb21taXQgbWVzc2FnZSBjbGFyaWZpZXMgdGhhdCB0aGUgYGNyZWF0ZWAgZnVuY3Rpb24gKm11c3QqIGFzc3VtZSBleGNsdXNpdml0eSBieSBkZWZhdWx0LiBJZiBhIGZpbGVzeXN0ZW0gbmVlZHMgdG8gaGFuZGxlIG5vbi1leGNsdXNpdmUgY3JlYXRlcywgdGhlIHN1Z2dlc3Rpb24gaXMgdG8gaW1wbGVtZW50IGBhdG9taWNfb3BlbmAuXG5cblRoaXMgaXMgYSBzdHJ1Y3R1cmFsIEFQSSBjaGFuZ2UsIHJlbW92aW5nIGFuIGFyZ3VtZW50IGZyb20gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZS4gSXQncyBub3QgaW50cm9kdWNpbmcgYW55IG5ldyBmdW5kYW1lbnRhbCBmdW5jdGlvbmFsaXR5LCBidXQgcmF0aGVyIHNoaWZ0aW5nIHRoZSByZXNwb25zaWJpbGl0eSBmb3IgZXhjbHVzaXZlIGNyZWF0aW9uLiBUaGUgbG9naWMgb2YgdGhlIGZpbGVzeXN0ZW1zIHRoZW1zZWx2ZXMgYXBwZWFycyBtb3N0bHkgdW5jaGFuZ2VkLCB0aGV5J3JlIHNpbXBseSBhZGFwdGluZyB0byB0aGUgbmV3IHNpZ25hdHVyZS4gVGhlIGltcG9ydGFudCBiaXQgaXMgdGhhdCB0aGUgVkZTICpub3cqIGhhbmRsZXMgdGhlIGV4Y2x1c2l2aXR5IGNoZWNrOyBiZWZvcmUsIGl0IHdhcyBwYXJ0aWFsbHkgZGVsZWdhdGVkLlxuXG5JdCBkb2VzIGxvb2sgbGlrZSBzb21lIGZpbGVzeXN0ZW1zIGFyZSBoYXJkY29kaW5nIHRoZSBleGNsdXNpdmUgY3JlYXRlIGJlaGF2aW9yLCBmb3IgZXhhbXBsZSwgYGdmczJgIG5vdyBleHBsaWNpdGx5IHNldHMgYGV4Y2wgPSAxYCBpbiBpdHMgY2FsbCB0byBgZ2ZzMl9jcmVhdGVfaW5vZGVgLiBUaGUgc2FtZSBwYXR0ZXJuIGFwcGxpZXMgdG8gYG5mc2AgYW5kIGB2Ym94c2ZgLiBUaGlzIGlzIHdoZXJlIHRoZSBwb3RlbnRpYWwgZm9yIGludGVyZXN0aW5nIGJlaGF2aW9yIGVtZXJnZXM6IGZpbGVzeXN0ZW1zIHByZXZpb3VzbHkgcmVseWluZyBvbiB0aGUgYGV4Y2xgIGFyZ3VtZW50IHRvIGtub3cgKmlmKiBpdCB3YXMgYW4gZXhjbHVzaXZlIGNyZWF0ZSBub3cgKmFsd2F5cyogYmVoYXZlIGFzIGlmIHRoZSBmaWxlIG5lZWRzIHRvIGJlIGNyZWF0ZWQgZXhjbHVzaXZlbHkuIFRoaXMgbWlnaHQgY3JlYXRlIHJlZ3Jlc3Npb25zLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGEgcmVmYWN0b3JpbmcsIGJ1dCBhIHZlcnkgKndpZGUqIG9uZS4gSXMgaXQgd29ydGggc3BlY2lhbGl6ZWQgZnV6emluZz8gUHJvYmFibHkgbm90IGEgKm5ldyogc2V0IG9mIGZ1enplcnMsIGJ1dCBWRlMgY2hhbmdlcyBhcmUgYWx3YXlzIHVuZGVyIHNjcnV0aW55LiBXZSdyZSBub3QgYWRkaW5nICpuZXcqIGZ1bmN0aW9uYWxpdHksIGJ1dCB3ZSdyZSBjaGFuZ2luZyB0aGUgYmVoYXZpb3Igb2YgaG93IGBsb29rdXBfb3BlbmAgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgZmlsZXN5c3RlbXMuIFRoaXMgY2hhbmdlICpjb3VsZCogYWZmZWN0IGZpbGVzeXN0ZW1zIHRoYXQgKmRvbid0KiBpbXBsZW1lbnQgYGF0b21pY19vcGVuYCBhbmQgaGFkIGJlZW4gcmVseWluZyBvbiB0aGUgYGV4Y2xgIGFyZ3VtZW50IHRvIGNvbnRyb2wgd2hldGhlciB0byBjcmVhdGUgZXhjbHVzaXZlbHkgb3Igbm90LiBUaGlzIGlzIHNvbWV0aGluZyB3b3J0aCBhIGNsb3NlciBsb29rOiBBcmUgd2UgYnJlYWtpbmcgY29tcGF0aWJpbGl0eT8gSXMgdGhlcmUgYSBzdWJ0bGUgc2VtYW50aWMgZGlmZmVyZW5jZSBoZXJlP1xuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aG9zZSBmaWxlc3lzdGVtcywgbGlrZSBgZ2ZzMmAsIGFjdHVhbGx5ICpkbyogaW1wbGVtZW50IGBhdG9taWNfb3BlbmAgYmVjYXVzZSBpZiB0aGV5IGRvLCB0aGVuIHRoaXMgZW50aXJlIHNoaWZ0IGlzIGxhcmdlbHkgdHJhbnNwYXJlbnQuIElmIHRoZXkgZG9uJ3QsIHRoZW4gdGhpcyBpcyBzaWduaWZpY2FudCwgYW5kIHdlIG5lZWQgdG8gbG9vayBmb3IgcmVncmVzc2lvbnMuIExldCBtZSBjaGVjayBpZiBgZ2ZzMmAgaGFzIGltcGxlbWVudGVkIGBhdG9taWNfb3BlbmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzYwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIwMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE4OjM4OjI5LjI1MTYwNjY2MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA0NTU3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRvbWljX29wZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZ2ZzMi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZ2ZzMi9maWxlLmM9NTkxPXN0YXRpYyBpbnQgZ2ZzMl9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmZzL2dmczIvZmlsZS5jLTYxMy0vKipcXG5mcy9nZnMyL2ZpbGUuYzo2MTQ6ICogZ2ZzMl9vcGVuX2NvbW1vbiAtIFRoaXMgaXMgY29tbW9uIHRvIG9wZW4gYW5kIGF0b21pY19vcGVuXFxuZnMvZ2ZzMi9maWxlLmMtNjE1LSAqIEBpbm9kZTogVGhlIGlub2RlIGJlaW5nIG9wZW5lZFxcbi0tXFxuZnMvZ2ZzMi9maWxlLmM9NjI2PWludCBnZnMyX29wZW5fY29tbW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZnMvZ2ZzMi9maWxlLmMtNjY1LSAqXFxuZnMvZ2ZzMi9maWxlLmM6NjY2OiAqIEFmdGVyIGF0b21pY19vcGVuLCB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgdXNlZCBmb3Igb3BlbmluZyBmaWxlc1xcbmZzL2dmczIvZmlsZS5jLTY2Ny0gKiB3aGljaCBhcmUgYWxyZWFkeSBjYWNoZWQuIFdlIG11c3Qgc3RpbGwgZ2V0IHRoZSBnbG9jayBmb3IgcmVndWxhclxcbi0tXFxuZnMvZ2ZzMi9pbm9kZS5jPTEzNjc9c3RhdGljIGludCBnZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL2dmczIvaW5vZGUuYy0xMzczLS8qKlxcbmZzL2dmczIvaW5vZGUuYzoxMzc0OiAqIGdmczJfYXRvbWljX29wZW4gLSBBdG9taWNhbGx5IG9wZW4gYSBmaWxlXFxuZnMvZ2ZzMi9pbm9kZS5jLTEzNzUtICogQGRpcjogVGhlIGRpcmVjdG9yeVxcbi0tXFxuZnMvZ2ZzMi9pbm9kZS5jLTEzODMtXFxuZnMvZ2ZzMi9pbm9kZS5jOjEzODQ6c3RhdGljIGludCBnZnMyX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuZnMvZ2ZzMi9pbm9kZS5jLTEzODUtXFx0XFx0XFx0ICAgIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBmbGFncyxcXG4tLVxcbmZzL2dmczIvaW5vZGUuYz0yMzA4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBnZnMyX2Rpcl9pb3BzID0ge1xcbi0tXFxuZnMvZ2ZzMi9pbm9kZS5jLTIzMjUtXFx0LnVwZGF0ZV90aW1lID0gZ2ZzMl91cGRhdGVfdGltZSxcXG5mcy9nZnMyL2lub2RlLmM6MjMyNjpcXHQuYXRvbWljX29wZW4gPSBnZnMyX2F0b21pY19vcGVuLFxcbmZzL2dmczIvaW5vZGUuYy0yMzI3LVxcdC5maWxlYXR0cl9nZXQgPSBnZnMyX2ZpbGVhdHRyX2dldCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTg6Mzg6MjkuMzYyMDY4OTUxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzExNTY0NDQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRmlsZSBTeXN0ZW0gQXRvbWljIE9wZW5zOiBBIFF1aWNrIE1lbnRhbCBDaGVjayoqXG5cblJpZ2h0LCAqZ2ZzMiogaGFzIGBhdG9taWNfb3BlbmAgaW1wbGVtZW50ZWQsIHRoYXQncyBjbGVhci4gTm8gc3VycHJpc2VzIHRoZXJlOyBpdCdzIGRlc2lnbmVkIGZvciB0aGF0IGtpbmQgb2Ygcm9idXN0LCBjbHVzdGVyZWQgZW52aXJvbm1lbnQuIEJ1dCBub3cgSSdtIHNoaWZ0aW5nIGdlYXJzLCBhbmQgYSBuZXcgcXVlc3Rpb24gcG9wcyB1cDogV2hhdCBhYm91dCBORlM/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgTkZTIHByb3RvY29sIGFuZCBzZWUgaWYgaXQgcHJvdmlkZXMgYW55IGluaGVyZW50IHN1cHBvcnQgb3IgaWYgaXQgcmVsaWVzIG9uIHVuZGVybHlpbmcgbWVjaGFuaXNtcyBmb3Igc29tZXRoaW5nIGxpa2UgYXRvbWljIG9wZW5zLiBJdCdzIGEga2V5IGRldGFpbCB3aGVuIGNvbnNpZGVyaW5nIGRpc3RyaWJ1dGVkIGZpbGUgc3lzdGVtIGRlc2lnbiwgYXMgSSdtIHN1cmUgaXQnbGwgaW1wYWN0IGhvdyB0aGUgc3lzdGVtIGFzIGEgd2hvbGUgZGVhbHMgd2l0aCBmaWxlIGFjY2Vzc2VzLiBEb2VzIGl0IGRlZmVyIHRvIHRoZSB1bmRlcmx5aW5nIHN0b3JhZ2UgZm9yIGF0b21pY2l0eT8gT3IgZG9lcyB0aGUgY2xpZW50LXNpZGUgaW50ZXJhY3Rpb24gc29tZWhvdyBoYW5kbGUgdGhpcz8gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgc3BlY3MuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyMDQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODozODozMi40Nzc3MTU0MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIzOTc0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRvbWljX29wZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZnMvZGlyLmM9MjA4Nz1zdGF0aWMgaW50IG5mc19maW5pc2hfb3BlbihzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4LFxcbi0tXFxuZnMvbmZzL2Rpci5jLTIxMDMtXFxuZnMvbmZzL2Rpci5jOjIxMDQ6aW50IG5mc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbmZzL25mcy9kaXIuYy0yMTA1LVxcdFxcdCAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgb3Blbl9mbGFncyxcXG4tLVxcbmZzL25mcy9kaXIuYy0yMTIwLVxcbmZzL25mcy9kaXIuYzoyMTIxOlxcdGRmcHJpbnRrKFZGUywgXFxcIk5GUzogYXRvbWljX29wZW4oJXMvJWxsdSksICVwZFxcXFxuXFxcIixcXG5mcy9uZnMvZGlyLmMtMjEyMi1cXHRcXHRcXHRkaXItXFx1MDAzZWlfc2ItXFx1MDAzZXNfaWQsIGRpci1cXHUwMDNlaV9pbm8sIGRlbnRyeSk7XFxuLS1cXG5mcy9uZnMvZGlyLmMtMjE3NC1cXG5mcy9uZnMvZGlyLmM6MjE3NTpcXHR0cmFjZV9uZnNfYXRvbWljX29wZW5fZW50ZXIoZGlyLCBjdHgsIG9wZW5fZmxhZ3MpO1xcbmZzL25mcy9kaXIuYy0yMTc2LVxcdGlub2RlID0gTkZTX1BST1RPKGRpciktXFx1MDAzZW9wZW5fY29udGV4dChkaXIsIGN0eCwgb3Blbl9mbGFncywgXFx1MDAyNmF0dHIsIFxcdTAwMjZjcmVhdGVkKTtcXG4tLVxcbmZzL25mcy9kaXIuYy0yMTgwLVxcdFxcdGVyciA9IFBUUl9FUlIoaW5vZGUpO1xcbmZzL25mcy9kaXIuYzoyMTgxOlxcdFxcdHRyYWNlX25mc19hdG9taWNfb3Blbl9leGl0KGRpciwgY3R4LCBvcGVuX2ZsYWdzLCBlcnIpO1xcbmZzL25mcy9kaXIuYy0yMTgyLVxcdFxcdHB1dF9uZnNfb3Blbl9jb250ZXh0KGN0eCk7XFxuLS1cXG5mcy9uZnMvZGlyLmMtMjIxMi1cXHRlcnIgPSBuZnNfZmluaXNoX29wZW4oY3R4LCBjdHgtXFx1MDAzZWRlbnRyeSwgZmlsZSwgb3Blbl9mbGFncyk7XFxuZnMvbmZzL2Rpci5jOjIyMTM6XFx0dHJhY2VfbmZzX2F0b21pY19vcGVuX2V4aXQoZGlyLCBjdHgsIG9wZW5fZmxhZ3MsIGVycik7XFxuZnMvbmZzL2Rpci5jLTIyMTQtXFx0cHV0X25mc19vcGVuX2NvbnRleHQoY3R4KTtcXG4tLVxcbmZzL25mcy9kaXIuYy0yMjUwLX1cXG5mcy9uZnMvZGlyLmM6MjI1MTpFWFBPUlRfU1lNQk9MX0dQTChuZnNfYXRvbWljX29wZW4pO1xcbmZzL25mcy9kaXIuYy0yMjUyLVxcbi0tXFxuZnMvbmZzL2Rpci5jPTIyNTQ9bmZzNF9sb29rdXBfcmV2YWxpZGF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXFxuLS1cXG5mcy9uZnMvZGlyLmMtMjMwNS1cXG5mcy9uZnMvZGlyLmM6MjMwNjppbnQgbmZzX2F0b21pY19vcGVuX3YyMyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbmZzL25mcy9kaXIuYy0yMzA3LVxcdFxcdFxcdHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgb3Blbl9mbGFncyxcXG4tLVxcbmZzL25mcy9kaXIuYy0yMzM2LX1cXG5mcy9uZnMvZGlyLmM6MjMzNzpFWFBPUlRfU1lNQk9MX0dQTChuZnNfYXRvbWljX29wZW5fdjIzKTtcXG5mcy9uZnMvZGlyLmMtMjMzOC1cXG4tLVxcbmZzL25mcy9uZnMzcHJvYy5jPTEwNDI9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG5mczNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuZnMvbmZzL25mczNwcm9jLmMtMTA0My1cXHQuY3JlYXRlXFx0XFx0PSBuZnNfY3JlYXRlLFxcbmZzL25mcy9uZnMzcHJvYy5jOjEwNDQ6XFx0LmF0b21pY19vcGVuXFx0PSBuZnNfYXRvbWljX29wZW5fdjIzLFxcbmZzL25mcy9uZnMzcHJvYy5jLTEwNDUtXFx0Lmxvb2t1cFxcdFxcdD0gbmZzX2xvb2t1cCxcXG4tLVxcbmZzL25mcy9uZnM0X2ZzLmg9MjgyPWV4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgbmZzNF9kZW50cnlfb3BlcmF0aW9ucztcXG4tLVxcbmZzL25mcy9uZnM0X2ZzLmgtMjg0LS8qIGRpci5jICovXFxuZnMvbmZzL25mczRfZnMuaDoyODU6aW50IG5mc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgZmlsZSAqLFxcbmZzL25mcy9uZnM0X2ZzLmgtMjg2LVxcdFxcdCAgICB1bnNpZ25lZCwgdW1vZGVfdCk7XFxuLS1cXG5mcy9uZnMvbmZzNHByb2MuYz0xMjYxPXN0cnVjdCBuZnM0X29wZW5fY3JlYXRlYXR0cnMge1xcbi0tXFxuZnMvbmZzL25mczRwcm9jLmMtMTI2Ni1cXG5mcy9uZnMvbmZzNHByb2MuYzoxMjY3OnN0YXRpYyBib29sIG5mczRfY2xlYXJfY2FwX2F0b21pY19vcGVuX3YxKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsXFxuZnMvbmZzL25mczRwcm9jLmMtMTI2OC1cXHRcXHRpbnQgZXJyLCBzdHJ1Y3QgbmZzNF9leGNlcHRpb24gKmV4Y2VwdGlvbilcXG4tLVxcbmZzL25mcy9uZnM0cHJvYy5jPTEzMDk9c3RhdGljIHUzMlxcbmZzL25mcy9uZnM0cHJvYy5jOjEzMTA6bmZzNF9tYXBfYXRvbWljX29wZW5fc2hhcmUoc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlcixcXG5mcy9uZnMvbmZzNHByb2MuYy0xMzExLVxcdFxcdGZtb2RlX3QgZm1vZGUsIGludCBvcGVuZmxhZ3MpXFxuLS1cXG5mcy9uZnMvbmZzNHByb2MuYz0xMzMxPXN0YXRpYyBlbnVtIG9wZW5fY2xhaW1fdHlwZTRcXG5mcy9uZnMvbmZzNHByb2MuYzoxMzMyOm5mczRfbWFwX2F0b21pY19vcGVuX2NsYWltKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsXFxuZnMvbmZzL25mczRwcm9jLmMtMTMzMy1cXHRcXHRlbnVtIG9wZW5fY2xhaW1fdHlwZTQgY2xhaW0pXFxuLS1cXG5mcy9uZnMvbmZzNHByb2MuYz0xMzYwPXN0YXRpYyBzdHJ1Y3QgbmZzNF9vcGVuZGF0YSAqbmZzNF9vcGVuZGF0YV9hbGxvYyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9uZnMvbmZzNHByb2MuYy0xMzk1LVxcdHAtXFx1MDAzZW9fYXJnLmZtb2RlID0gZm1vZGUgXFx1MDAyNiAoRk1PREVfUkVBRHxGTU9ERV9XUklURSk7XFxuZnMvbmZzL25mczRwcm9jLmM6MTM5NjpcXHRwLVxcdTAwM2VvX2FyZy5jbGFpbSA9IG5mczRfbWFwX2F0b21pY19vcGVuX2NsYWltKHNlcnZlciwgY2xhaW0pO1xcbmZzL25mcy9uZnM0cHJvYy5jOjEzOTc6XFx0cC1cXHUwMDNlb19hcmcuc2hhcmVfYWNjZXNzID0gbmZzNF9tYXBfYXRvbWljX29wZW5fc2hhcmUoc2VydmVyLFxcbmZzL25mcy9uZnM0cHJvYy5jLTEzOTgtXFx0XFx0XFx0Zm1vZGUsIGZsYWdzKTtcXG4tLVxcbmZzL25mcy9uZnM0cHJvYy5jPTIxNjY9c3RhdGljIGludCBuZnM0X29wZW5fcmVjb3Zlcl9oZWxwZXIoc3RydWN0IG5mczRfb3BlbmRhdGEgKm9wZW5kYXRhLFxcbi0tXFxuZnMvbmZzL25mczRwcm9jLmMtMjE3Ny1cXHRvcGVuZGF0YS1cXHUwMDNlb19hcmcuc2hhcmVfYWNjZXNzID1cXG5mcy9uZnMvbmZzNHByb2MuYzoyMTc4OlxcdFxcdG5mczRfbWFwX2F0b21pY19vcGVuX3NoYXJlKHNlcnZlciwgZm1vZGUsIG9wZW5mbGFncyk7XFxuZnMvbmZzL25mczRwcm9jLmMtMjE3OS1cXHRtZW1zZXQoXFx1MDAyNm9wZW5kYXRhLVxcdTAwM2VvX3JlcywgMCwgc2l6ZW9mKG9wZW5kYXRhLVxcdTAwM2VvX3JlcykpO1xcbi0tXFxuZnMvbmZzL25mczRwcm9jLmM9MjI2MT1zdGF0aWMgaW50IG5mczRfZG9fb3Blbl9yZWNsYWltKHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgsIHN0cnVjdCBuZnM0X3N0YXRlICpzdGF0ZSlcXG4tLVxcbmZzL25mcy9uZnM0cHJvYy5jLTIyNjgtXFx0XFx0dHJhY2VfbmZzNF9vcGVuX3JlY2xhaW0oY3R4LCAwLCBlcnIpO1xcbmZzL25mcy9uZnM0cHJvYy5jOjIyNjk6XFx0XFx0aWYgKG5mczRfY2xlYXJfY2FwX2F0b21pY19vcGVuX3YxKHNlcnZlciwgZXJyLCBcXHUwMDI2ZXhjZXB0aW9uKSlcXG5mcy9uZnMvbmZzNHByb2MuYy0yMjcwLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxuZnMvbmZzL25mczRwcm9jLmM9Mjc4Nj1zdGF0aWMgaW50IG5mczRfZG9fb3Blbl9leHBpcmVkKHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgsIHN0cnVjdCBuZnM0X3N0YXRlICpzdGF0ZSlcXG4tLVxcbmZzL25mcy9uZnM0cHJvYy5jLTI3OTQtXFx0XFx0dHJhY2VfbmZzNF9vcGVuX2V4cGlyZWQoY3R4LCAwLCBlcnIpO1xcbmZzL25mcy9uZnM0cHJvYy5jOjI3OTU6XFx0XFx0aWYgKG5mczRfY2xlYXJfY2FwX2F0b21pY19vcGVuX3YxKHNlcnZlciwgZXJyLCBcXHUwMDI2ZXhjZXB0aW9uKSlcXG5mcy9uZnMvbmZzNHByb2MuYy0yNzk2LVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxuZnMvbmZzL25mczRwcm9jLmM9MzIzND1zdGF0aWMgc3RydWN0IG5mczRfc3RhdGUgKm5mczRfZG9fb3BlbihzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL25mcy9uZnM0cHJvYy5jLTMyOTktXFx0XFx0fVxcbmZzL25mcy9uZnM0cHJvYy5jOjMzMDA6XFx0XFx0aWYgKG5mczRfY2xlYXJfY2FwX2F0b21pY19vcGVuX3YxKHNlcnZlciwgc3RhdHVzLCBcXHUwMDI2ZXhjZXB0aW9uKSlcXG5mcy9uZnMvbmZzNHByb2MuYy0zMzAxLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxuZnMvbmZzL25mczRwcm9jLmM9MzgyNj1zdGF0aWMgc3RydWN0IGlub2RlICpcXG5mcy9uZnMvbmZzNHByb2MuYzozODI3Om5mczRfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgsXFxuZnMvbmZzL25mczRwcm9jLmMtMzgyOC1cXHRcXHRpbnQgb3Blbl9mbGFncywgc3RydWN0IGlhdHRyICphdHRyLCBpbnQgKm9wZW5lZClcXG4tLVxcbmZzL25mcy9uZnM0cHJvYy5jPTEwNjM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBuZnM0X2Rpcl9pbm9kZV9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvbmZzL25mczRwcm9jLmMtMTA2MzctXFx0Lmxvb2t1cFxcdFxcdD0gbmZzX2xvb2t1cCxcXG5mcy9uZnMvbmZzNHByb2MuYzoxMDYzODpcXHQuYXRvbWljX29wZW5cXHQ9IG5mc19hdG9taWNfb3BlbixcXG5mcy9uZnMvbmZzNHByb2MuYy0xMDYzOS1cXHQubGlua1xcdFxcdD0gbmZzX2xpbmssXFxuLS1cXG5mcy9uZnMvbmZzNHByb2MuYz0xMDY4ND1jb25zdCBzdHJ1Y3QgbmZzX3JwY19vcHMgbmZzX3Y0X2NsaWVudG9wcyA9IHtcXG4tLVxcbmZzL25mcy9uZnM0cHJvYy5jLTEwNzI4LVxcdC5jbG9zZV9jb250ZXh0ICA9IG5mczRfY2xvc2VfY29udGV4dCxcXG5mcy9uZnMvbmZzNHByb2MuYzoxMDcyOTpcXHQub3Blbl9jb250ZXh0XFx0PSBuZnM0X2F0b21pY19vcGVuLFxcbmZzL25mcy9uZnM0cHJvYy5jLTEwNzMwLVxcdC5oYXZlX2RlbGVnYXRpb24gPSBuZnM0X2hhdmVfZGVsZWdhdGlvbixcXG4tLVxcbmZzL25mcy9uZnN0cmFjZS5oPTUxND1ERUZJTkVfTkZTX0xPT0tVUF9FVkVOVF9ET05FKG5mc19yZWFkZGlyX2xvb2t1cF9yZXZhbGlkYXRlKTtcXG5mcy9uZnMvbmZzdHJhY2UuaC01MTUtXFxuZnMvbmZzL25mc3RyYWNlLmg6NTE2OlRSQUNFX0VWRU5UKG5mc19hdG9taWNfb3Blbl9lbnRlcixcXG5mcy9uZnMvbmZzdHJhY2UuaC01MTctXFx0XFx0VFBfUFJPVE8oXFxuLS1cXG5mcy9uZnMvbmZzdHJhY2UuaC01NTEtXFxuZnMvbmZzL25mc3RyYWNlLmg6NTUyOlRSQUNFX0VWRU5UKG5mc19hdG9taWNfb3Blbl9leGl0LFxcbmZzL25mcy9uZnN0cmFjZS5oLTU1My1cXHRcXHRUUF9QUk9UTyhcXG4tLVxcbmZzL25mcy9wcm9jLmM9NzA4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBuZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9uZnMvcHJvYy5jLTcxMC1cXHQubG9va3VwXFx0XFx0PSBuZnNfbG9va3VwLFxcbmZzL25mcy9wcm9jLmM6NzExOlxcdC5hdG9taWNfb3BlblxcdD0gbmZzX2F0b21pY19vcGVuX3YyMyxcXG5mcy9uZnMvcHJvYy5jLTcxMi1cXHQubGlua1xcdFxcdD0gbmZzX2xpbmssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE4OjM4OjMyLjU4MDExODc2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQyMzI2ODIwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UndmUgZGVzY3JpYmVkOlxuXG4qKkNvbnNpZGVyaW5nIEF0b21pYyBPcGVucyBpbiBOZXR3b3JrIEZpbGVzeXN0ZW1zKipcblxuSG1tLCBzbyBpdCBzZWVtcyBgbmZzYCBhY3R1YWxseSBwcm92aWRlcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBgYXRvbWljX29wZW5gLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBnb29kIHRvIGtub3cuIEJ1dCwgd2hhdCBhYm91dCB0aGUgdmlydHVhbGJveCBzaGFyZWQgZm9sZGVyIGZpbGVzeXN0ZW0sIGB2Ym94c2ZgPyBJIHdvbmRlciBpZiBpdCBhbHNvIHByb3ZpZGVzIHN1Y2ggYSBmdW5jdGlvbmFsaXR5PyBUaGUgaW1wbGljYXRpb25zIG9mIGhhdmluZyBhdG9taWMgb3BlbiBvcGVyYXRpb25zLCBvciBub3QsIGFyZSBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgZmlsZSBzeXN0ZW0gY29uc2lzdGVuY3kgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gdmFyaW91cyBhcHBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgaW4gYSB2aXJ0dWFsaXplZCBvciBuZXR3b3JrZWQgY29udGV4dC4gVGhpcyB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24sIGFzIGl0cyBpbXBsZW1lbnRhdGlvbiBvciBsYWNrIHRoZXJlb2YgY2FuIGNlcnRhaW5seSBpbXBhY3QgdGhlIHN0YWJpbGl0eSBvZiBhcHBsaWNhdGlvbnMgcmVseWluZyBvbiB0aGF0IHBhcnRpY3VsYXIgRlMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MjAzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTg6Mzg6MzcuMDAzMzg5ODQzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjAxOTg0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdG9taWNfb3BlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy92Ym94c2YvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Zib3hzZi9kaXIuYz0zMDY9c3RhdGljIHN0cnVjdCBkZW50cnkgKnZib3hzZl9kaXJfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy92Ym94c2YvZGlyLmMtMzEyLVxcbmZzL3Zib3hzZi9kaXIuYzozMTM6c3RhdGljIGludCB2Ym94c2ZfZGlyX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuZnMvdmJveHNmL2Rpci5jLTMxNC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSlcXG4tLVxcbmZzL3Zib3hzZi9kaXIuYz00Njk9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdmJveHNmX2Rpcl9pb3BzID0ge1xcbi0tXFxuZnMvdmJveHNmL2Rpci5jLTQ3Mi1cXHQubWtkaXIgICA9IHZib3hzZl9kaXJfbWtkaXIsXFxuZnMvdmJveHNmL2Rpci5jOjQ3MzpcXHQuYXRvbWljX29wZW4gPSB2Ym94c2ZfZGlyX2F0b21pY19vcGVuLFxcbmZzL3Zib3hzZi9kaXIuYy00NzQtXFx0LnJtZGlyICAgPSB2Ym94c2ZfZGlyX3VubGluayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTg6Mzg6MzcuMTE1NDE1OTAyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkyNzU2MTM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBBdG9taWMgT3BlbiBJbXBsZW1lbnRhdGlvbnMgaW4gTmV0d29yayBGaWxlc3lzdGVtcyoqXG5cbkhtbSwgc28gYHZib3hzZmAgaXMgYWN0dWFsbHkgaW1wbGVtZW50aW5nIGBhdG9taWNfb3BlbmAgbm93LCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSXQncyBnb29kIHRvIHNlZSB0aGlzIGZ1bmN0aW9uYWxpdHkgYmVpbmcgYWRkcmVzc2VkLCBhbmQgSSdtIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIG9mIGNvdXJzZS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBob3cgZG9lcyB0aGlzIGNvbXBhcmUgdG8gb3RoZXIgdmlydHVhbCBmaWxlc3lzdGVtIHR5cGVzPyBJcyB0aGUgaW1wbGVtZW50YXRpb24gcm9idXN0IGFuZCBwZXJmb3JtYW50P1xuXG5CdXQgd2hhdCBhYm91dCBgY2lmc2A/ICpUaGF0J3MqIHRoZSBiaWcgb25lLiBJIHdvbmRlciBpZiB0aGUgYGNpZnNgIGZpbGVzeXN0ZW0gaGFzIGFkZHJlc3NlZCB0aGlzPyBUaGlzIGlzIGNyaXRpY2FsIGZvciBlbnN1cmluZyBkYXRhIGludGVncml0eSBkdXJpbmcgd3JpdGVzIGluIG5ldHdvcmtlZCBlbnZpcm9ubWVudHMuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgYGNpZnNgIGNvZGUgdG8gc2VlIGlmIHRoZXkgYXJlIGRvaW5nIGl0LCBhbmQgYWxzbyBmaWd1cmUgb3V0IGhvdyB3ZWxsIGBjaWZzYCBkZWFscyB3aXRoIHZhcmlvdXMgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucyBpbiBhIG1hbm5lciB0aGF0J3MgdHJhbnNhY3Rpb25hbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk2NTQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODozODo0MC4wNDI5ODIyN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzMTk3MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0b21pY19vcGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3NtYi9jbGllbnQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3NtYi9jbGllbnQvY2lmc2ZzLmM9MTIyOD1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBjaWZzX2Rpcl9pbm9kZV9vcHMgPSB7XFxuZnMvc21iL2NsaWVudC9jaWZzZnMuYy0xMjI5LVxcdC5jcmVhdGUgPSBjaWZzX2NyZWF0ZSxcXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jOjEyMzA6XFx0LmF0b21pY19vcGVuID0gY2lmc19hdG9taWNfb3BlbixcXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTEyMzEtXFx0LnRtcGZpbGUgPSBjaWZzX3RtcGZpbGUsXFxuLS1cXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5oPTU2PWludCBjaWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuZnMvc21iL2NsaWVudC9jaWZzZnMuaC01Ny1cXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSwgdW1vZGVfdCBtb2RlKTtcXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5oOjU4OmludCBjaWZzX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSxcXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5oLTU5LVxcdFxcdCAgICAgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBvZmxhZ3MsIHVtb2RlX3QgbW9kZSk7XFxuLS1cXG5mcy9zbWIvY2xpZW50L2Rpci5jPTQ4OT1zdGF0aWMgaW50IGNpZnNfZG9fY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSxcXG4tLVxcbmZzL3NtYi9jbGllbnQvZGlyLmMtNTE5LSAqL1xcbmZzL3NtYi9jbGllbnQvZGlyLmM6NTIwOmludCBjaWZzX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSxcXG5mcy9zbWIvY2xpZW50L2Rpci5jLTUyMS1cXHRcXHQgICAgIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgb2ZsYWdzLCB1bW9kZV90IG1vZGUpXFxuLS1cXG5mcy9zbWIvY2xpZW50L2Rpci5jLTU0Ni1cXHQgKiB0byBiZSBhIGRpci4gRm9yIGZpbGUgb3BlbnMsIHdlIHdhaXQgdG8gY2FsbCBwb3NpeCBvcGVuIHRpbGxcXG5mcy9zbWIvY2xpZW50L2Rpci5jOjU0NzpcXHQgKiBjaWZzX29wZW4uICBJdCBjb3VsZCBiZSBhZGRlZCB0byBhdG9taWNfb3BlbiBpbiB0aGUgZnV0dXJlIGJ1dCB0aGVcXG5mcy9zbWIvY2xpZW50L2Rpci5jLTU0OC1cXHQgKiBwZXJmb3JtYW5jZSB0cmFkZW9mZiBvZiB0aGUgZXh0cmEgbmV0d29yayByZXF1ZXN0IHdoZW4gRUlTRElSIG9yXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE4OjM4OjQwLjE1NjE4NTI4OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjIyMTQyMjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipGaWxlIFN5c3RlbSBJbnRlcm5hbHM6IEF0b21pYyBPcGVucyBhbmQgdGhlIDlQIFByb3RvY29sKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGRpZmZlcmVudCBmaWxlIHN5c3RlbXMgaGFuZGxlIGF0b21pYyBvcGVuIG9wZXJhdGlvbnMuIEkga25vdyBgY2lmc2AgYWN0dWFsbHkgaGFzIGEgcHJldHR5IGdvb2QgaW1wbGVtZW50YXRpb24gb2YgYGF0b21pY19vcGVuYC4gQnV0IHRoYXQgZ2V0cyBtZSB0aGlua2luZy4uLiB3aGF0IGFib3V0IGA5cGA/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCBpZiBpdHMgYXJjaGl0ZWN0dXJlIG5hdHVyYWxseSBsZW5kcyBpdHNlbGYgdG8gYXRvbWljIG9wZW5zLCBvciBpZiBpdCByZXF1aXJlcyBhIG1vcmUgZGVsaWJlcmF0ZSBhcHByb2FjaC4gSSBzaG91bGQgY2hlY2sgdGhlIHNwZWNpZmljYXRpb24gYW5kIGltcGxlbWVudGF0aW9ucyBmb3IgYDlwYCB0byB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IHN0YXRlIGFuZCBzZWUgaWYgaXQgY2FuIGJlIGVhc2lseSBpbXByb3ZlZC4gVGhpcyB3aWxsIGRldGVybWluZSBob3cgaXQgZnVuY3Rpb25zIGluIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDExLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTg6Mzg6NDIuNzc4MzI5NTk1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Njk2MjY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdG9taWNfb3BlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy85cC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvOXAvdmZzX2lub2RlLmM9NTc5PXY5ZnNfY3JlYXRlKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvOXAvdmZzX2lub2RlLmMtNjQ4LSAqXFxuZnMvOXAvdmZzX2lub2RlLmM6NjQ5OiAqIG9wZW4oLi4sIE9fQ1JFQVQpIGlzIGhhbmRsZWQgaW4gdjlmc192ZnNfYXRvbWljX29wZW4oKS4gIFRoaXMgaXMgb25seSBjYWxsZWRcXG5mcy85cC92ZnNfaW5vZGUuYy02NTAtICogZm9yIG1rbm9kKDIpLlxcbi0tXFxuZnMvOXAvdmZzX2lub2RlLmM9NzY3PXN0YXRpYyBpbnRcXG5mcy85cC92ZnNfaW5vZGUuYzo3Njg6djlmc192ZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG5mcy85cC92ZnNfaW5vZGUuYy03NjktXFx0XFx0ICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUpXFxuLS1cXG5mcy85cC92ZnNfaW5vZGUuYz0xMzY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB2OWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zX2RvdHUgPSB7XFxuLS1cXG5mcy85cC92ZnNfaW5vZGUuYy0xMzY3LVxcdC5sb29rdXAgPSB2OWZzX3Zmc19sb29rdXAsXFxuZnMvOXAvdmZzX2lub2RlLmM6MTM2ODpcXHQuYXRvbWljX29wZW4gPSB2OWZzX3Zmc19hdG9taWNfb3BlbixcXG5mcy85cC92ZnNfaW5vZGUuYy0xMzY5LVxcdC5zeW1saW5rID0gdjlmc192ZnNfc3ltbGluayxcXG4tLVxcbmZzLzlwL3Zmc19pbm9kZS5jPTEzODA9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHY5ZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy85cC92ZnNfaW5vZGUuYy0xMzgyLVxcdC5sb29rdXAgPSB2OWZzX3Zmc19sb29rdXAsXFxuZnMvOXAvdmZzX2lub2RlLmM6MTM4MzpcXHQuYXRvbWljX29wZW4gPSB2OWZzX3Zmc19hdG9taWNfb3BlbixcXG5mcy85cC92ZnNfaW5vZGUuYy0xMzg0LVxcdC51bmxpbmsgPSB2OWZzX3Zmc191bmxpbmssXFxuLS1cXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jPTIyNT1zdGF0aWMgaW50XFxuZnMvOXAvdmZzX2lub2RlX2RvdGwuYzoyMjY6djlmc192ZnNfYXRvbWljX29wZW5fZG90bChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbmZzLzlwL3Zmc19pbm9kZV9kb3RsLmMtMjI3LVxcdFxcdFxcdCAgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBmbGFncywgdW1vZGVfdCBvbW9kZSlcXG4tLVxcbmZzLzlwL3Zmc19pbm9kZV9kb3RsLmM9OTYyPWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHY5ZnNfZGlyX2lub2RlX29wZXJhdGlvbnNfZG90bCA9IHtcXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jLTk2My1cXHQuY3JlYXRlID0gdjlmc192ZnNfY3JlYXRlX2RvdGwsXFxuZnMvOXAvdmZzX2lub2RlX2RvdGwuYzo5NjQ6XFx0LmF0b21pY19vcGVuID0gdjlmc192ZnNfYXRvbWljX29wZW5fZG90bCxcXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jLTk2NS1cXHQubG9va3VwID0gdjlmc192ZnNfbG9va3VwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODozODo0Mi44NzUzMDE4MTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAxODYzMDQ0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IEF0b21pYyBPcGVuIGFuZCBGVVNFIENvbXBhdGliaWxpdHkqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgYDlwYCBmaWxlIHN5c3RlbSBpbXBsZW1lbnRzIGBhdG9taWNfb3BlbmAsIHdoaWNoIGlzIGdvb2QgdG8gc2VlLiBCdXQgdGhhdCBnb3QgbWUgdGhpbmtpbmcsIHdoYXQncyB0aGUgc3Rvcnkgd2l0aCBgZnVzZWA/IElzIHRoaXMgY2FwYWJpbGl0eSBtaXJyb3JlZCBpbiBgZnVzZWAncyBpbXBsZW1lbnRhdGlvbiwgb3IgYXJlIHRoZXJlIHNpZ25pZmljYW50IGRpZmZlcmVuY2VzIGluIGhvdyB0aG9zZSB0d28gaGFuZGxlIHRoaXMgY3JpdGljYWwgb3BlcmF0aW9uPyBBcmUgdGhlcmUgYW55IHBlcmZvcm1hbmNlIGJlbmVmaXRzIG9uIG9uZSB2cyB0aGUgb3RoZXI/IEkgd29uZGVyIGhvdyB0aGV5IGRlYWwgd2l0aCBjb25jdXJyZW5jeSwgb3IgaWYgb25lIGlzIGluaGVyZW50bHkgYSBiZXR0ZXIgY2hvaWNlIHdoZW4gZGVhbGluZyB3aXRoIHJhY2UgY29uZGl0aW9ucy4gSSBuZWVkIHRvIGRpdmUgZGVlcGVyIG9uIGhvdyB0aGV5J3JlIGhhbmRsaW5nIGF0b21pY2l0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEzNzcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODozODo0OS44OTM5MzY3MjlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODQ1NTEwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdG9taWNfb3BlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mdXNlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mdXNlL2Rpci5jPTkyOD1zdGF0aWMgaW50IGZ1c2VfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLFxcbmZzL2Z1c2UvZGlyLmMtOTI5LVxcdFxcdCAgICAgIHVtb2RlX3QsIGRldl90KTtcXG5mcy9mdXNlL2Rpci5jOjkzMDpzdGF0aWMgaW50IGZ1c2VfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmVudHJ5LFxcbmZzL2Z1c2UvZGlyLmMtOTMxLVxcdFxcdFxcdCAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgZmxhZ3MsXFxuLS1cXG5mcy9mdXNlL2Rpci5jPTIzOTY9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGZ1c2VfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9mdXNlL2Rpci5jLTI0MDUtXFx0LmNyZWF0ZVxcdFxcdD0gZnVzZV9jcmVhdGUsXFxuZnMvZnVzZS9kaXIuYzoyNDA2OlxcdC5hdG9taWNfb3BlblxcdD0gZnVzZV9hdG9taWNfb3BlbixcXG5mcy9mdXNlL2Rpci5jLTI0MDctXFx0LnRtcGZpbGVcXHQ9IGZ1c2VfdG1wZmlsZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTg6Mzg6NTAuMDMyMzk4NDg2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzM3NDgyMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgQXRvbWljIE9wZW4gSW1wbGVtZW50YXRpb25zKipcblxuUmlnaHQsIHNvIGBmdXNlYCBpbmNsdWRlcyBhbiBgYXRvbWljX29wZW5gIGltcGxlbWVudGF0aW9uLiBUaGF0J3MgZ29vZCB0byBrbm93LCBhbmQgaXQncyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB3aGVuIGNvbXBhcmluZyBkaWZmZXJlbnQgZmlsZSBzeXN0ZW1zLiBUaGUgaW1wbGljYXRpb25zIGhlcmUgYXJlIHNpZ25pZmljYW50IGZvciBkYXRhIGNvbnNpc3RlbmN5IGFuZCBob3cgd2UgaGFuZGxlIGNvbmN1cnJlbnQgYWNjZXNzLiBOb3csIHRoZSBrZXkgcXVlc3Rpb24gaXMsIHdoYXQgYWJvdXQgYG9yYW5nZWZzYD8gRG9lcyBpdCBvZmZlciBhIHNpbWlsYXIgbWVjaGFuaXNtIGZvciBhdG9taWMgb3BlbnM/IEkgbmVlZCB0byBkaWcgaW50byBpdHMgYXJjaGl0ZWN0dXJlIGFuZCBkb2N1bWVudGF0aW9uIHRvIHVuZGVyc3RhbmQgaG93IGl0IGhhbmRsZXMgZmlsZSBjcmVhdGlvbiBhbmQgbW9kaWZpY2F0aW9uIHdpdGggcmVzcGVjdCB0byBhdG9taWNpdHkuIFRoYXQncyBhIGNydWNpYWwgYXNwZWN0IGZvciBpdHMgb3ZlcmFsbCByZWxpYWJpbGl0eSBhbmQgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLCBlc3BlY2lhbGx5IGluIGEgZGlzdHJpYnV0ZWQgZW52aXJvbm1lbnQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29kZWJhc2UgYW5kIHRoZSBkb2N1bWVudGF0aW9uIHRvIGNoZWNrIGlmIHRoaXMgaXMgc3VwcG9ydGVkLCBhbmQgaWYgc28sIGhvdyBpdCBpcyBpbXBsZW1lbnRlZC4gSXMgaXQgbGV2ZXJhZ2luZyBrZXJuZWwgc3VwcG9ydCwgdXNlcnNwYWNlIHRyaWNrcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBudWFuY2VzIG9mIGl0cyBhcHByb2FjaCB3aWxsIGluZmx1ZW5jZSBteSBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTgwNywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE4OjM4OjUzLjM2NjE0ODk0NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NDgzNzE5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdG9taWNfb3BlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vcmFuZ2Vmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE4OjM4OjUzLjQ3MzY0Mjk2M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQ3OTM4NTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpZ2dpbmcgaW50byBPcmFuZ2VGUydzIEF0b21pY2l0eSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgYG9yYW5nZWZzYCBoYW5kbGVzIG9wZW5pbmcgZmlsZXMgYXRvbWljYWxseSwgYW5kIEknbSBwcmV0dHkgc3VyZSBpdCAqZG9lc24ndCogaGF2ZSBhbiBgYXRvbWljX29wZW5gIGNhbGwgaW1wbGVtZW50ZWQgZGlyZWN0bHkuIFRoYXQncyBhIGNvbW1vbiBjaGFyYWN0ZXJpc3RpYyBmb3IgZGlzdHJpYnV0ZWQgZmlsZSBzeXN0ZW1zLCBlc3BlY2lhbGx5IHdoZW4gY29uc2lkZXJpbmcgY29uc2lzdGVuY3kgbW9kZWxzIGFuZCBwZXJmb3JtYW5jZSB0cmFkZW9mZnMuIE5vdywgcmF0aGVyIHRoYW4ganVzdCBhc3N1bWUsIEkgbmVlZCB0byB2ZXJpZnkgaG93IGl0IGFjdHVhbGx5IGhhbmRsZXMgdGhlIGNyZWF0ZSBvcGVyYXRpb24uIExldCBtZSBzaGlmdCBteSBmb2N1cy4gSSdsbCBuZWVkIHRvIGdvIGxvb2sgaW50byB0aGUgYG9yYW5nZWZzX2NyZWF0ZWAgZnVuY3Rpb24uIEknbGwgYmV0IHRoYXQncyB3aGVyZSB0aGUgYXRvbWljIGFzcGVjdHMsIG9yIGxhY2sgdGhlcmVvZiwgYXJlIGhhbmRsZWQuIFRoaXMgc2hvdWxkIG9mZmVyIGNsdWVzIHRvIHVuZGVyc3RhbmQgaG93IGl0IGRlYWxzIHdpdGggdGhlIHBhcnRpYWwgd3JpdGVzIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjA3NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE4OjM4OjU2LjUyMTU4NDY2OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA4MDEwNjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3JhbmdlZnNfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29yYW5nZWZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vcmFuZ2Vmcy9kb3duY2FsbC5oPTIzPXN0cnVjdCBvcmFuZ2Vmc19sb29rdXBfcmVzcG9uc2Uge1xcbi0tXFxuZnMvb3JhbmdlZnMvZG93bmNhbGwuaC0yNi1cXG5mcy9vcmFuZ2Vmcy9kb3duY2FsbC5oOjI3OnN0cnVjdCBvcmFuZ2Vmc19jcmVhdGVfcmVzcG9uc2Uge1xcbmZzL29yYW5nZWZzL2Rvd25jYWxsLmgtMjgtXFx0c3RydWN0IG9yYW5nZWZzX29iamVjdF9rcmVmIHJlZm47XFxuLS1cXG5mcy9vcmFuZ2Vmcy9kb3duY2FsbC5oPTEwMD1zdHJ1Y3Qgb3JhbmdlZnNfZG93bmNhbGxfcyB7XFxuLS1cXG5mcy9vcmFuZ2Vmcy9kb3duY2FsbC5oLTEwOS1cXHRcXHRzdHJ1Y3Qgb3JhbmdlZnNfbG9va3VwX3Jlc3BvbnNlIGxvb2t1cDtcXG5mcy9vcmFuZ2Vmcy9kb3duY2FsbC5oOjExMDpcXHRcXHRzdHJ1Y3Qgb3JhbmdlZnNfY3JlYXRlX3Jlc3BvbnNlIGNyZWF0ZTtcXG5mcy9vcmFuZ2Vmcy9kb3duY2FsbC5oLTExMS1cXHRcXHRzdHJ1Y3Qgb3JhbmdlZnNfc3ltbGlua19yZXNwb25zZSBzeW07XFxuLS1cXG5mcy9vcmFuZ2Vmcy9uYW1laS5jLTE3LSAqL1xcbmZzL29yYW5nZWZzL25hbWVpLmM6MTg6c3RhdGljIGludCBvcmFuZ2Vmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuZnMvb3JhbmdlZnMvbmFtZWkuYy0xOS1cXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL29yYW5nZWZzL25hbWVpLmM9NDE2PWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9yYW5nZWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvb3JhbmdlZnMvbmFtZWkuYy00MTktXFx0LnNldF9hY2wgPSBvcmFuZ2Vmc19zZXRfYWNsLFxcbmZzL29yYW5nZWZzL25hbWVpLmM6NDIwOlxcdC5jcmVhdGUgPSBvcmFuZ2Vmc19jcmVhdGUsXFxuZnMvb3JhbmdlZnMvbmFtZWkuYy00MjEtXFx0LnVubGluayA9IG9yYW5nZWZzX3VubGluayxcXG4tLVxcbmZzL29yYW5nZWZzL3VwY2FsbC5oPTI3PXN0cnVjdCBvcmFuZ2Vmc19sb29rdXBfcmVxdWVzdF9zIHtcXG4tLVxcbmZzL29yYW5nZWZzL3VwY2FsbC5oLTMzLVxcbmZzL29yYW5nZWZzL3VwY2FsbC5oOjM0OnN0cnVjdCBvcmFuZ2Vmc19jcmVhdGVfcmVxdWVzdF9zIHtcXG5mcy9vcmFuZ2Vmcy91cGNhbGwuaC0zNS1cXHRzdHJ1Y3Qgb3JhbmdlZnNfb2JqZWN0X2tyZWYgcGFyZW50X3JlZm47XFxuLS1cXG5mcy9vcmFuZ2Vmcy91cGNhbGwuaD0yMjA9c3RydWN0IG9yYW5nZWZzX3VwY2FsbF9zIHtcXG4tLVxcbmZzL29yYW5nZWZzL3VwY2FsbC5oLTIzMi1cXHRcXHRzdHJ1Y3Qgb3JhbmdlZnNfbG9va3VwX3JlcXVlc3RfcyBsb29rdXA7XFxuZnMvb3JhbmdlZnMvdXBjYWxsLmg6MjMzOlxcdFxcdHN0cnVjdCBvcmFuZ2Vmc19jcmVhdGVfcmVxdWVzdF9zIGNyZWF0ZTtcXG5mcy9vcmFuZ2Vmcy91cGNhbGwuaC0yMzQtXFx0XFx0c3RydWN0IG9yYW5nZWZzX3N5bWxpbmtfcmVxdWVzdF9zIHN5bTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTg6Mzg6NTYuNjEyNDA4NDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDczNTA5NDg0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgRXhhbWluYXRpb24gb2YgYG9yYW5nZWZzX2NyZWF0ZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgb3JhbmdlZnNfY3JlYXRlYCBmdW5jdGlvbi4gSSdtIGltbWVkaWF0ZWx5IGN1cmlvdXMgYWJvdXQgaXRzIHJvbGUgd2l0aGluIHRoZSBPcmFuZ2VGUyBmaWxlIHN5c3RlbS4gTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmU6IHdoYXQncyB0aGUgdHlwaWNhbCBpbXBsZW1lbnRhdGlvbj8gSG93IGRvZXMgaXQgaGFuZGxlIGlub2RlIGFsbG9jYXRpb24gYW5kIG1ldGFkYXRhIHVwZGF0ZXM/IElzIGl0IGEgc2luZ2xlLWZ1bmN0aW9uIGNhbGwgb3IgYSB3cmFwcGVyIGZvciBzZXZlcmFsIGFjdGlvbnM/IEknbSBhbnRpY2lwYXRpbmcgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHVuZGVybHlpbmcgc3RvcmFnZSBhbmQgbmV0d29yayBsYXllcnMg4oCTIHByb2JhYmx5IHNvbWUgUlBDIGNhbGxzIHRvIG1ldGFkYXRhIHNlcnZlcnMsIHBvdGVudGlhbGx5IGRhdGEgc2VydmVyIGludGVyYWN0aW9ucyBkZXBlbmRpbmcgb24gdGhlIGZpbGUgc2l6ZSwgYW5kIGRlZmluaXRlbHkgc29tZSBsb2NraW5nIG1lY2hhbmlzbXMgaW52b2x2ZWQuIEknbGwgbmVlZCB0byBsb29rIGZvciBhbnkgb3B0aW1pemF0aW9ucyDigJMgZGVmZXJyZWQgdXBkYXRlcywgY2FjaGluZyBzdHJhdGVnaWVzLCBvciBwZXJoYXBzIGEgdHdvLXBoYXNlIGNvbW1pdCBhcHByb2FjaCBmb3IgYXRvbWljaXR5LiBJ4oCZbSB0aGlua2luZyBlcnJvciBoYW5kbGluZyBhbmQgcmVjb3ZlcnkgYXJlIHBhcmFtb3VudDsgaXQncyBhIGNyaXRpY2FsIHBvaW50IGluIGZpbGUgc3lzdGVtIG9wZXJhdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgc2lnbnMgb2YgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIHJhY2UgY29uZGl0aW9ucy4gVGhpcyBzaG91bGQgYmUgaW50ZXJlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODgwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTg6Mzk6MDEuMzQ3NTA2MjYzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9vcmFuZ2Vmcy9uYW1laS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDE4OlxcdHN0YXRpYyBpbnQgb3JhbmdlZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiAgMTk6XFx0XFx0XFx0XFx0c3RydWN0IGlub2RlICpkaXIsXFxuICAyMDpcXHRcXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuICAyMTpcXHRcXHRcXHRcXHR1bW9kZV90IG1vZGUpXFxuICAyMjpcXHR7XFxuICAyMzpcXHRcXHRzdHJ1Y3Qgb3JhbmdlZnNfaW5vZGVfcyAqcGFyZW50ID0gT1JBTkdFRlNfSShkaXIpO1xcbiAgMjQ6XFx0XFx0c3RydWN0IG9yYW5nZWZzX2tlcm5lbF9vcF9zICpuZXdfb3A7XFxuICAyNTpcXHRcXHRzdHJ1Y3Qgb3JhbmdlZnNfb2JqZWN0X2tyZWYgcmVmO1xcbiAgMjY6XFx0XFx0c3RydWN0IGlub2RlICppbm9kZTtcXG4gIDI3OlxcdFxcdHN0cnVjdCBpYXR0ciBpYXR0cjtcXG4gIDI4OlxcdFxcdGludCByZXQ7XFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdGdvc3NpcF9kZWJ1ZyhHT1NTSVBfTkFNRV9ERUJVRywgXFxcIiVzOiAlcGRcXFxcblxcXCIsXFxuICAzMTpcXHRcXHRcXHQgICAgIF9fZnVuY19fLFxcbiAgMzI6XFx0XFx0XFx0ICAgICBkZW50cnkpO1xcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHRuZXdfb3AgPSBvcF9hbGxvYyhPUkFOR0VGU19WRlNfT1BfQ1JFQVRFKTtcXG4gIDM1OlxcdFxcdGlmICghbmV3X29wKVxcbiAgMzY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuICAzNzpcXHRcXG4gIDM4OlxcdFxcdG5ld19vcC1cXHUwMDNldXBjYWxsLnJlcS5jcmVhdGUucGFyZW50X3JlZm4gPSBwYXJlbnQtXFx1MDAzZXJlZm47XFxuICAzOTpcXHRcXG4gIDQwOlxcdFxcdGZpbGxfZGVmYXVsdF9zeXNfYXR0cnMobmV3X29wLVxcdTAwM2V1cGNhbGwucmVxLmNyZWF0ZS5hdHRyaWJ1dGVzLCBtb2RlKTtcXG4gIDQxOlxcdFxcbiAgNDI6XFx0XFx0c3Ryc2NweShuZXdfb3AtXFx1MDAzZXVwY2FsbC5yZXEuY3JlYXRlLmRfbmFtZSwgZGVudHJ5LVxcdTAwM2VkX25hbWUubmFtZSk7XFxuICA0MzpcXHRcXG4gIDQ0OlxcdFxcdHJldCA9IHNlcnZpY2Vfb3BlcmF0aW9uKG5ld19vcCwgX19mdW5jX18sIGdldF9pbnRlcnJ1cHRpYmxlX2ZsYWcoZGlyKSk7XFxuICA0NTpcXHRcXG4gIDQ2OlxcdFxcdGdvc3NpcF9kZWJ1ZyhHT1NTSVBfTkFNRV9ERUJVRyxcXG4gIDQ3OlxcdFxcdFxcdCAgICAgXFxcIiVzOiAlcGQ6IGhhbmRsZTolcFU6IGZzaWQ6JWQ6IG5ld19vcDolcDogcmV0OiVkOlxcXFxuXFxcIixcXG4gIDQ4OlxcdFxcdFxcdCAgICAgX19mdW5jX18sXFxuICA0OTpcXHRcXHRcXHQgICAgIGRlbnRyeSxcXG4gIDUwOlxcdFxcdFxcdCAgICAgXFx1MDAyNm5ld19vcC1cXHUwMDNlZG93bmNhbGwucmVzcC5jcmVhdGUucmVmbi5raGFuZGxlLFxcbiAgNTE6XFx0XFx0XFx0ICAgICBuZXdfb3AtXFx1MDAzZWRvd25jYWxsLnJlc3AuY3JlYXRlLnJlZm4uZnNfaWQsXFxuICA1MjpcXHRcXHRcXHQgICAgIG5ld19vcCxcXG4gIDUzOlxcdFxcdFxcdCAgICAgcmV0KTtcXG4gIDU0OlxcdFxcbiAgNTU6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuICA1NjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDU3OlxcdFxcbiAgNTg6XFx0XFx0cmVmID0gbmV3X29wLVxcdTAwM2Vkb3duY2FsbC5yZXNwLmNyZWF0ZS5yZWZuO1xcbiAgNTk6XFx0XFxuICA2MDpcXHRcXHRpbm9kZSA9IG9yYW5nZWZzX25ld19pbm9kZShkaXItXFx1MDAzZWlfc2IsIGRpciwgU19JRlJFRyB8IG1vZGUsIDAsIFxcdTAwMjZyZWYpO1xcbiAgNjE6XFx0XFx0aWYgKElTX0VSUihpbm9kZSkpIHtcXG4gIDYyOlxcdFxcdFxcdGdvc3NpcF9lcnIoXFxcIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgaW5vZGUgZm9yIGZpbGUgOiVwZDpcXFxcblxcXCIsXFxuICA2MzpcXHRcXHRcXHRcXHQgICBfX2Z1bmNfXyxcXG4gIDY0OlxcdFxcdFxcdFxcdCAgIGRlbnRyeSk7XFxuICA2NTpcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKGlub2RlKTtcXG4gIDY2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAgNjc6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODozOTowMS4zNDc2NTM2MzNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4MjUxOTE0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBvcmFuZ2Vmc19jcmVhdGVgIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgSSdtIGltbWVkaWF0ZWx5IHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMgdG8gYG9yYW5nZWZzX2NyZWF0ZWAuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIEkgbmVlZCB0byBhbnN3ZXIgaXMgd2hldGhlciB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24gYWN0dWFsbHkgKnV0aWxpemVkKiB0aGUgYGJvb2wgZXhjbHVzaXZlYCBhcmd1bWVudC4gIFRoYXQgYXJndW1lbnQgaXMga2V5LCBiZWNhdXNlIGl0IHN1Z2dlc3RzIHRoZSBmdW5jdGlvbiBtaWdodCBoYXZlIGJlZW4gYWJsZSB0byBjcmVhdGUgZmlsZXMgd2l0aCBzcGVjaWZpYyBleGNsdXNpdml0eSBndWFyYW50ZWVzLCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGUgb2xkZXIgdmVyc2lvbiB1c2VkIHRoaXMgZmVhdHVyZSBvciBub3QuIElmIGl0IGRpZG4ndCwgdGhlIHBhdGNoIG1pZ2h0IGludHJvZHVjZSBhIHBlcmZvcm1hbmNlIHRyYWRlLW9mZiB0byBhZGQgYSBmZWF0dXJlIHdoaWNoIHdhcyBub3QgcHJldmlvdXNseSBwcmVzZW50LiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIG9sZCBjb2RlIGFuZCB2ZXJpZnkgaXRzIGJlaGF2aW91ci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM4OTksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE4OjM5OjA0LjMzMDE3NjIzNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY2ODI5NjEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4Y2x1c2l2ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vcmFuZ2Vmcy9uYW1laS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODozOTowNC40MTY4Njk4NzdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0NDQ0NTQzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBPQ0ZTMiBBUEkqKlxuXG5IbW0sIG5vLCBJIGRvbid0IHRoaW5rIHRoYXQgY29kZSBwYXRoIHV0aWxpemVkIHRoZSBleHBlY3RlZCBmdW5jdGlvbiBmb3IgZmlsZSBjcmVhdGlvbi4gSSBuZWVkIHRvIHJlLWV4YW1pbmUgdGhlIGNvbnRleHQuIFRoZSBwcm9ibGVtIGxpZXMgZWxzZXdoZXJlLlxuXG5Pa2F5LCBsZXQncyBzdGVwIGJhY2ssIGFuZCBxdWlja2x5IHJldHJhY2UgbXkgbWVudGFsIHN0ZXBzLiBUaGUgbW9yZSBmdW5kYW1lbnRhbCBxdWVzdGlvbiBpcywgd2hhdCBhYm91dCBgb2NmczJfY3JlYXRlYD8gSXQncyB0aGUgc3RhbmRhcmQgT0NGUzIgZmlsZSBjcmVhdGlvbiByb3V0aW5lLiBJIG5lZWQgdG8gY29uc2lkZXIsIGZyb20gZmlyc3QgcHJpbmNpcGxlcywgd2hlcmUgdGhhdCByb3V0aW5lIHdvdWxkIGhhdmUgYmVlbiBjYWxsZWQgKG9yIG5vdCBjYWxsZWQhKSB3aXRoaW4gdGhlIGtlcm5lbCBtb2R1bGUuIFdoYXQgYXJlIHRoZSBjYWxsaW5nIGNvbnZlbnRpb25zPyBJcyB0aGlzIHJlbGF0ZWQgdG8gaW5vZGUgY3JlYXRpb24sIGRpcmVjdG9yeSBlbnRyeSBjcmVhdGlvbiwgb3IgcGVyaGFwcyBzb21lIHNwZWNpZmljIE9DRlMyLXNwZWNpZmljIG1ldGFkYXRhIHVwZGF0ZT8gVGhlIGlzc3VlIHdpdGggbXkgcHJpb3IgYXNzdW1wdGlvbiBpcyB0aGF0IEkgY291bGQgaGF2ZSBtaXNzZWQgYSByZWxldmFudCBwYXJ0LCBwZXJoYXBzIHRoZSBsb2dpYyBhcm91bmQgdGhlIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MTI1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTg6Mzk6MDcuNDYxMzE4MDQzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9vY2ZzMi9uYW1laS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY2NyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY2NzpcXHRzdGF0aWMgaW50IG9jZnMyX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gNjY4OlxcdFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqZGlyLFxcbiA2Njk6XFx0XFx0XFx0XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiA2NzA6XFx0XFx0XFx0XFx0dW1vZGVfdCBtb2RlKVxcbiA2NzE6XFx0e1xcbiA2NzI6XFx0XFx0aW50IHJldDtcXG4gNjczOlxcdFxcbiA2NzQ6XFx0XFx0dHJhY2Vfb2NmczJfY3JlYXRlKGRpciwgZGVudHJ5LCBkZW50cnktXFx1MDAzZWRfbmFtZS5sZW4sIGRlbnRyeS1cXHUwMDNlZF9uYW1lLm5hbWUsXFxuIDY3NTpcXHRcXHRcXHRcXHQgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS1cXHUwMDNlaXBfYmxrbm8sIG1vZGUpO1xcbiA2NzY6XFx0XFx0cmV0ID0gb2NmczJfbWtub2QoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRlJFRywgMCk7XFxuIDY3NzpcXHRcXHRpZiAocmV0KVxcbiA2Nzg6XFx0XFx0XFx0bWxvZ19lcnJubyhyZXQpO1xcbiA2Nzk6XFx0XFxuIDY4MDpcXHRcXHRyZXR1cm4gcmV0O1xcbiA2ODE6XFx0fVxcbiA2ODI6XFx0XFxuIDY4MzpcXHRzdGF0aWMgaW50IG9jZnMyX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcXG4gNjg0OlxcdFxcdFxcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiA2ODU6XFx0XFx0XFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbiA2ODY6XFx0e1xcbiA2ODc6XFx0XFx0aGFuZGxlX3QgKmhhbmRsZTtcXG4gNjg4OlxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKG9sZF9kZW50cnkpO1xcbiA2ODk6XFx0XFx0c3RydWN0IGlub2RlICpvbGRfZGlyID0gZF9pbm9kZShvbGRfZGVudHJ5LVxcdTAwM2VkX3BhcmVudCk7XFxuIDY5MDpcXHRcXHRpbnQgZXJyO1xcbiA2OTE6XFx0XFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpmZV9iaCA9IE5VTEw7XFxuIDY5MjpcXHRcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9sZF9kaXJfYmggPSBOVUxMO1xcbiA2OTM6XFx0XFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpwYXJlbnRfZmVfYmggPSBOVUxMO1xcbiA2OTQ6XFx0XFx0c3RydWN0IG9jZnMyX2Rpbm9kZSAqZmUgPSBOVUxMO1xcbiA2OTU6XFx0XFx0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItXFx1MDAzZWlfc2IpO1xcbiA2OTY6XFx0XFx0c3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0IGxvb2t1cCA9IHsgTlVMTCwgfTtcXG4gNjk3OlxcdFxcdHNpZ3NldF90IG9sZHNldDtcXG4gNjk4OlxcdFxcdHU2NCBvbGRfZGVfaW5vO1xcbiA2OTk6XFx0XFxuIDcwMDpcXHRcXHR0cmFjZV9vY2ZzMl9saW5rKCh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShpbm9kZSktXFx1MDAzZWlwX2Jsa25vLFxcbiA3MDE6XFx0XFx0XFx0XFx0IG9sZF9kZW50cnktXFx1MDAzZWRfbmFtZS5sZW4sIG9sZF9kZW50cnktXFx1MDAzZWRfbmFtZS5uYW1lLFxcbiA3MDI6XFx0XFx0XFx0XFx0IGRlbnRyeS1cXHUwMDNlZF9uYW1lLmxlbiwgZGVudHJ5LVxcdTAwM2VkX25hbWUubmFtZSk7XFxuIDcwMzpcXHRcXG4gNzA0OlxcdFxcdGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKVxcbiA3MDU6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gNzA2OlxcdFxcbiA3MDc6XFx0XFx0ZXJyID0gZHF1b3RfaW5pdGlhbGl6ZShkaXIpO1xcbiA3MDg6XFx0XFx0aWYgKGVycikge1xcbiA3MDk6XFx0XFx0XFx0bWxvZ19lcnJubyhlcnIpO1xcbiA3MTA6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNzExOlxcdFxcdH1cXG4gNzEyOlxcdFxcbiA3MTM6XFx0XFx0ZXJyID0gb2NmczJfZG91YmxlX2xvY2sob3NiLCBcXHUwMDI2b2xkX2Rpcl9iaCwgb2xkX2RpcixcXG4gNzE0OlxcdFxcdFxcdFxcdFxcdTAwMjZwYXJlbnRfZmVfYmgsIGRpciwgMCk7XFxuIDcxNTpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiA3MTY6XFx0XFx0XFx0aWYgKGVyciAhPSAtRU5PRU5UKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODozOTowNy40NjE1MTc5MzJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2OTU2OTgwODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZW1vdmFsIG9mIHRoZSBgZXhjbGAgQXJndW1lbnQgZnJvbSBgY3JlYXRlYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCByZW1vdmVzIHRoZSBgZXhjbGAgYXJndW1lbnQgZnJvbSB0aGUgYGNyZWF0ZWAgaW5vZGUgb3BlcmF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYG9jZnMyX2NyZWF0ZWAgZGlkbid0IHVzZSBgZXhjbGAgZWl0aGVyLCBzbyBJIG5lZWQgdG8gZ28gZGVlcGVyLiBJJ20gY2hlY2tpbmcgYGZzL25hbWVpLmNgIGFnYWluLCBhbmQgc3BlY2lmaWNhbGx5IGBsb29rdXBfb3BlbmAuIEl0J3MgcHJldHR5IGNsZWFyIHRoYXQgYGxvb2t1cF9vcGVuYCBpcyBpbnZvbHZlZCB3aGVuIG9wZW5pbmcgYSBmaWxlLiBJZiBgT19DUkVBVGAgaXMgc2V0LCB0aGUgY29kZSBjYWxscyBgYXRvbWljX29wZW5gIGlmIHRoZSBmaWxlc3lzdGVtIGltcGxlbWVudHMgaXQuIElmIG5vdCwgaXQgZmFsbHMgYmFjayB0byBgY3JlYXRlYC5cblxuTm93LCBiZWZvcmUgdGhpcyBwYXRjaCwgdGhlIGNvZGUgcGFzc2VkIGBvcGVuX2ZsYWcgXHUwMDI2IE9fRVhDTGAgdG8gYGNyZWF0ZWAuIEJ1dCBub3cgaXQgZG9lc24ndC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uOiBpZiB0aGUgZmlsZXN5c3RlbSAqZG9lc24ndCogaW1wbGVtZW50IGBhdG9taWNfb3BlbmAsIGRvZXMgdGhhdCBtZWFuIGl0ICpkb2Vzbid0KiBzdXBwb3J0IGV4Y2x1c2l2ZSBjcmVhdGU/IE5vLCBJIHF1aWNrbHkgcmVhbGl6ZWQgdGhhdCBgY3JlYXRlYCB3YXMgdXNlZCBmb3IgYm90aCBleGNsdXNpdmUgYW5kIG5vbi1leGNsdXNpdmUgY3JlYXRlIHdoZW4gYGF0b21pY19vcGVuYCB3YXNuJ3QgcHJvdmlkZWQuXG5cblRoZSBjb21taXQgbWVzc2FnZSBjbGFyaWZpZXM6IHRoZSBgLmNyZWF0ZWAgaW5vZGUgb3BlcmF0aW9uIG5vIGxvbmdlciByZWNlaXZlcyBgZXhjbGAuIEl0ICphbHdheXMqIGFzc3VtZXMgdGhlIGZpbGUgZG9lc24ndCBleGlzdC4gSWYgdGhlIGZpbGVzeXN0ZW0gKm5lZWRzKiB0byBiZSBpbnZvbHZlZCBpbiBhIG5vbi1leGNsdXNpdmUgY3JlYXRlLCBpdCBzaG91bGQgaW1wbGVtZW50IGBhdG9taWNfb3BlbmAuXG5cbkhlcmUncyB0aGUgcHJvYmxlbTogaWYgYSBmaWxlc3lzdGVtICpkb2Vzbid0KiBwcm92aWRlIGBhdG9taWNfb3BlbmAsIFZGUyBoYW5kbGVzIG5vbi1leGNsdXNpdmUgY3JlYXRlIGJ5IGZpcnN0IGRvaW5nIGEgbG9va3VwLCBhbmQgaWYgaXQncyBub3QgZm91bmQsICp0aGVuKiBjYWxsaW5nIGBjcmVhdGVgLiBCdXQgdGhlcmUncyBhIHJhY2UgY29uZGl0aW9uIHRoZXJlOiBiZXR3ZWVuIHRoZSBsb29rdXAgYW5kIHRoZSBgY3JlYXRlYCBjYWxsLCBzb21lb25lIGVsc2UgY291bGQgY3JlYXRlIHRoZSBmaWxlLiBTbywgaWYgYGNyZWF0ZWAgYXNzdW1lcyB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgaXQgd2lsbCBqdXN0IGNyZWF0ZSBpdCwgYW5kIGl0IGNvdWxkIG92ZXJ3cml0ZSBhbiBleGlzdGluZyBmaWxlLiBCdXQgd2FpdCwgVkZTIGhhbmRsZXMgYEVFWElTVGAgaWYgYE9fRVhDTGAgaXMgc2V0LiBPa2F5LCBWRlMgYWxyZWFkeSBkaWQgYSBsb29rdXAgYW5kIGZvdW5kIGEgbmVnYXRpdmUgZGVudHJ5ICh0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IHlldCkgYmVmb3JlIGBjcmVhdGVgIGlzIGNhbGxlZC4gU28sIHRoZSBmaWxlc3lzdGVtJ3MgYGNyZWF0ZWAgb3BlcmF0aW9uICpzaG91bGQqIGNyZWF0ZSB0aGUgZmlsZS4gSWYgYW5vdGhlciBwcm9jZXNzIGNyZWF0ZWQgdGhlIGZpbGUgY29uY3VycmVudGx5LCB0aGUgZmlsZXN5c3RlbSdzIGBjcmVhdGVgICh3aGljaCBsaWtlbHkgZG9lcyBhbiBpbnRlcm5hbCBleGNsdXNpdmUgY3JlYXRlLCBsaWtlIGBta25vZGApIHdpbGwgcmV0dXJuIGBFRVhJU1RgLCBhbmQgdGhlbiBWRlMgd2lsbCBoYW5kbGUgdGhhdCBlcnJvci5cblxuTm93IEkgbmVlZCB0byBzZWUgaWYgYW55IGZpbGVzeXN0ZW0gKmFjdHVhbGx5KiB1c2VkIHRoZSBgZXhjbGAgYXJndW1lbnQgaW4gYGNyZWF0ZWAgYmVmb3JlIHRoaXMgY2hhbmdlLiBMZXQncyBsb29rIGF0IGBnZnMyYCwgYG5mc2AsIGFuZCBgdmJveHNmYCB3aGljaCBJIHNhdyBoYWQgaW50ZXJuYWwgY2hhbmdlcy4gQ2hlY2tpbmcgYGdmczJfY3JlYXRlYCBjb25maXJtcyBteSBzdXNwaWNpb246XG5cbmBgYGNcbi1cdHJldHVybiBnZnMyX2NyZWF0ZV9pbm9kZShkaXIsIGRlbnRyeSwgTlVMTCwgU19JRlJFRyB8IG1vZGUsIDAsIE5VTEwsIDAsIGV4Y2wpO1xuK1x0cmV0dXJuIGdmczJfY3JlYXRlX2lub2RlKGRpciwgZGVudHJ5LCBOVUxMLCBTX0lGUkVHIHwgbW9kZSwgMCwgTlVMTCwgMCwgMSk7XG5gYGBcblxuT2theSwgYGdmczJfY3JlYXRlX2lub2RlYCAqZG9lcyogdGFrZSBgZXhjbGAgYXMgaXRzIGxhc3QgYXJndW1lbnQuIE5vdyBJIG5lZWQgdG8gY2hlY2sgd2hhdCBgZ2ZzMl9jcmVhdGVfaW5vZGVgIGRvZXMgd2l0aCB0aGUgYGV4Y2xgIGFyZ3VtZW50IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUyMjAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODozOToxOC4xNTcyMTg3OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE5NzczMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdmczJfY3JlYXRlX2lub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2dmczIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2dmczIvaW5vZGUuYz02NjQ9c3RhdGljIGludCBnZnMyX2luaXR4YXR0cnMoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgc3RydWN0IHhhdHRyICp4YXR0cl9hcnJheSxcXG4tLVxcbmZzL2dmczIvaW5vZGUuYy02ODAtLyoqXFxuZnMvZ2ZzMi9pbm9kZS5jOjY4MTogKiBnZnMyX2NyZWF0ZV9pbm9kZSAtIENyZWF0ZSBhIG5ldyBpbm9kZVxcbmZzL2dmczIvaW5vZGUuYy02ODItICogQGRpcjogVGhlIHBhcmVudCBkaXJlY3RvcnlcXG4tLVxcbmZzL2dmczIvaW5vZGUuYy02OTktXFxuZnMvZ2ZzMi9pbm9kZS5jOjcwMDpzdGF0aWMgaW50IGdmczJfY3JlYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuZnMvZ2ZzMi9pbm9kZS5jLTcwMS1cXHRcXHRcXHQgICAgIHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZnMvZ2ZzMi9pbm9kZS5jPTk3MT1zdGF0aWMgaW50IGdmczJfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL2dmczIvaW5vZGUuYy05NzMte1xcbmZzL2dmczIvaW5vZGUuYzo5NzQ6XFx0cmV0dXJuIGdmczJfY3JlYXRlX2lub2RlKGRpciwgZGVudHJ5LCBOVUxMLCBTX0lGUkVHIHwgbW9kZSwgMCwgTlVMTCwgMCwgMSk7XFxuZnMvZ2ZzMi9pbm9kZS5jLTk3NS19XFxuLS1cXG5mcy9nZnMyL2lub2RlLmM9MTMyNz1zdGF0aWMgaW50IGdmczJfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9nZnMyL2lub2RlLmMtMTMzNS1cXG5mcy9nZnMyL2lub2RlLmM6MTMzNjpcXHRyZXR1cm4gZ2ZzMl9jcmVhdGVfaW5vZGUoZGlyLCBkZW50cnksIE5VTEwsIFNfSUZMTksgfCBTX0lSV1hVR08sIDAsIHN5bW5hbWUsIHNpemUsIDApO1xcbmZzL2dmczIvaW5vZGUuYy0xMzM3LX1cXG4tLVxcbmZzL2dmczIvaW5vZGUuYz0xMzQ5PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpnZnMyX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL2dmczIvaW5vZGUuYy0xMzUzLVxcbmZzL2dmczIvaW5vZGUuYzoxMzU0OlxcdHJldHVybiBFUlJfUFRSKGdmczJfY3JlYXRlX2lub2RlKGRpciwgZGVudHJ5LCBOVUxMLCBTX0lGRElSIHwgbW9kZSwgMCwgTlVMTCwgZHNpemUsIDApKTtcXG5mcy9nZnMyL2lub2RlLmMtMTM1NS19XFxuLS1cXG5mcy9nZnMyL2lub2RlLmM9MTM2Nz1zdGF0aWMgaW50IGdmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvZ2ZzMi9pbm9kZS5jLTEzNjkte1xcbmZzL2dmczIvaW5vZGUuYzoxMzcwOlxcdHJldHVybiBnZnMyX2NyZWF0ZV9pbm9kZShkaXIsIGRlbnRyeSwgTlVMTCwgbW9kZSwgZGV2LCBOVUxMLCAwLCAwKTtcXG5mcy9nZnMyL2lub2RlLmMtMTM3MS19XFxuLS1cXG5mcy9nZnMyL2lub2RlLmM9MTM4ND1zdGF0aWMgaW50IGdmczJfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL2dmczIvaW5vZGUuYy0xNDAzLVxcbmZzL2dmczIvaW5vZGUuYzoxNDA0OlxcdHJldHVybiBnZnMyX2NyZWF0ZV9pbm9kZShkaXIsIGRlbnRyeSwgZmlsZSwgU19JRlJFRyB8IG1vZGUsIDAsIE5VTEwsIDAsIGV4Y2wpO1xcbmZzL2dmczIvaW5vZGUuYy0xNDA1LX1cXG4tLVxcbmZzL2dmczIvc3VwZXIuYz0xMjg5PXN0YXRpYyBpbnQgZXZpY3RfdW5saW5rZWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGdmczJfaG9sZGVyICpnaClcXG4tLVxcbmZzL2dmczIvc3VwZXIuYy0xMzE4LVxcdC8qXFxuZnMvZ2ZzMi9zdXBlci5jOjEzMTk6XFx0ICogQXMgc29vbiBhcyB3ZSBjbGVhciB0aGUgYml0bWFwIGZvciB0aGUgZGlub2RlLCBnZnMyX2NyZWF0ZV9pbm9kZSgpXFxuZnMvZ2ZzMi9zdXBlci5jLTEzMjAtXFx0ICogY2FuIGdldCBjYWxsZWQgdG8gcmVjcmVhdGUgaXQsIG9yIGV2ZW4gZ2ZzMl9pbm9kZV9sb29rdXAoKSBpZiB0aGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTg6Mzk6MTguNjc2OTk5OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzU5MTI4MTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIGBnZnMyX2NyZWF0ZV9pbm9kZWAgYW5kIGBhdG9taWNfb3BlbmAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBnZnMyX2F0b21pY19vcGVuYCBmdW5jdGlvbi4gSXQncyBjYWxsaW5nIGBnZnMyX2NyZWF0ZV9pbm9kZWAsIHdoaWNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhhdCBmdW5jdGlvbiBpcyBhbHNvIGNlbnRyYWwgdG8gaG93IEdGUzIgY3JlYXRlcyBpbm9kZXMuIEknbSBub3RpbmcgdGhhdCBgZ2ZzMl9hdG9taWNfb3BlbmAgcGFzc2VzIHRoZSBgZXhjbGAgZmxhZyBkaXJlY3RseSB0byBgZ2ZzMl9jcmVhdGVfaW5vZGVgLCBhbmQgdGhhdCB0aGUgYGV4Y2xgIGZsYWcgaW5kaWNhdGVzIGV4Y2x1c2l2ZSBhY2Nlc3MuXG5cbkkgc2VlIHRoYXQgdGhlIG9sZCB2ZXJzaW9uIG9mIHRoZSBgZ2ZzMl9jcmVhdGVfaW5vZGVgIGZ1bmN0aW9uIHdhcyB1c2VkIGJ5IGJvdGgsIGJ1dCB0aGUgcGF0Y2ggaGFyZGNvZGVzIHRoZSBgZXhjbGAgZmxhZyBhcyB0cnVlLiBXYWl0LCB0aGF0IG1ha2VzIHNlbnNlLiBUaGUgY29tbWVudCBzYXlzIHRoYXQgdGhlIGAuY3JlYXRlYCBpbm9kZSBvcGVyYXRpb24gbm8gbG9uZ2VyIGdldHMgdGhlIGBleGNsYCBhcmd1bWVudCBhbmQgdGhhdCBpdCBhc3N1bWVzIHRoZSBmaWxlIGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4gVGhlIGNvbW1pdCBzZWVtcyBwZXJmZWN0bHkgYWxpZ25lZCB3aXRoIHRoZSBwYXRjaC4gU2luY2UgYGdmczJfY3JlYXRlYCBub3cgKm9ubHkqIGdldHMgY2FsbGVkIGZvciBleGNsdXNpdmUgY3JlYXRlcywgaGFyZGNvZGluZyBgZXhjbD10cnVlYCBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8sIG9yIHdoZW4gVkZTIGhhbmRsZXMgdGhlIG5vbi1leGNsdXNpdmUgcGFydC4gSXQncyBlc3NlbnRpYWxseSBzaW1wbGlmeWluZyB0aGUgY29kZSBwYXRoIGJlY2F1c2UgYGdmczJfY3JlYXRlYCBub3cgYXNzdW1lcyB0aGF0IGV4Y2x1c2l2aXR5IGlzIHBhcnQgb2YgdGhlIGNhbGxpbmcgY29udGV4dC5cblxuTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgTkZTLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzY5NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODozOToyNS4wMzYxMzA4NjZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDA4NDY1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnNfZG9fY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25mcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmZzL2Rpci5jPTU3PXN0YXRpYyB2b2lkIG5mc19yZWFkZGlyX2NsZWFyX2FycmF5KHN0cnVjdCBmb2xpbyAqKTtcXG5mcy9uZnMvZGlyLmM6NTg6c3RhdGljIGludCBuZnNfZG9fY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuZnMvbmZzL2Rpci5jLTU5LVxcdFxcdFxcdCB1bW9kZV90IG1vZGUsIGludCBvcGVuX2ZsYWdzKTtcXG4tLVxcbmZzL25mcy9kaXIuYz0yMzA2PWludCBuZnNfYXRvbWljX29wZW5fdjIzKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9uZnMvZGlyLmMtMjMxOS1cXHRpZiAob3Blbl9mbGFncyBcXHUwMDI2IE9fQ1JFQVQpIHtcXG5mcy9uZnMvZGlyLmM6MjMyMDpcXHRcXHRlcnJvciA9IG5mc19kb19jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUsIG9wZW5fZmxhZ3MpO1xcbmZzL25mcy9kaXIuYy0yMzIxLVxcdFxcdGlmICghZXJyb3IpIHtcXG4tLVxcbmZzL25mcy9kaXIuYz0yMzkyPUVYUE9SVF9TWU1CT0xfR1BMKG5mc19pbnN0YW50aWF0ZSk7XFxuLS1cXG5mcy9uZnMvZGlyLmMtMjM5OS0gKi9cXG5mcy9uZnMvZGlyLmM6MjQwMDpzdGF0aWMgaW50IG5mc19kb19jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG5mcy9uZnMvZGlyLmMtMjQwMS1cXHRcXHRcXHQgdW1vZGVfdCBtb2RlLCBpbnQgb3Blbl9mbGFncylcXG4tLVxcbmZzL25mcy9kaXIuYz0yNDI5PWludCBuZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL25mcy9kaXIuYy0yNDMxLXtcXG5mcy9uZnMvZGlyLmM6MjQzMjpcXHRyZXR1cm4gbmZzX2RvX2NyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSwgT19FWENMKTtcXG5mcy9uZnMvZGlyLmMtMjQzMy19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE4OjM5OjI1LjE3NjIyMTY1M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzE4Njc5ODgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkFuYWx5emluZyBORlMgRmlsZSBDcmVhdGlvbiBhbmQgYHZib3hzZmAgSW1wbGljYXRpb25zKipcblxuUmlnaHQsIHNvIGBuZnNfZG9fY3JlYXRlYCBpcyBkZWZpbml0ZWx5IHVzZWQgaW4gYG5mc19hdG9taWNfb3Blbl92MjNgLCBhbmQgY3J1Y2lhbGx5LCB0aGF0IGZ1bmN0aW9uIGlzIHBhc3NpbmcgdGhyb3VnaCBgb3Blbl9mbGFnc2AuIFRoYXQncyBpbXBvcnRhbnQuIEl0IGNvbmZpcm1zIG15IHVuZGVyc3RhbmRpbmcgdGhhdCB0aGUgdXNlIG9mIGBPX0VYQ0xgIHdpdGhpbiBgbmZzX2NyZWF0ZWAgaXMsIGluIGZhY3QsIGNvcnJlY3QsIGdpdmVuIHRoYXQgcGF0aC4gV2UncmUgZWZmZWN0aXZlbHkgcmV1c2luZyBhIGxvd2VyLWxldmVsIGZ1bmN0aW9uIHdpdGggYWRkZWQgZnVuY3Rpb25hbGl0eS5cblxuQnV0LCBhIHRob3VnaHQsIHdoYXQgYWJvdXQgdGhlIGludGVyYWN0aW9uIHdpdGggYHZib3hzZmA/IEkgbmVlZCB0byBjb25zaWRlciBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoaXMgYXBwcm9hY2guIERvZXMgYHZib3hzZmAgdXNlIGEgc2ltaWxhciBwYXR0ZXJuPyBEb2VzIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgZGlmZmVyZW50IGZsYWcgdXNlIGNhdXNlIGFueSBpc3N1ZXMsIG9yIGlzIGl0IGFscmVhZHkgaGFuZGxlZD8gSSByZWFsbHkgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IHRoaXMgaW50ZXJhY3RzIGluIHRoZSBjb250ZXh0IG9mIGB2Ym94c2ZgLCBhcyB0aGF0IGlzIGFuIGFyZWEgd2hpY2ggaGFzIHNvbWV0aW1lcyBzaG93biB1bmV4cGVjdGVkIGJlaGF2aW91ci4gVGhhdCdzIHRoZSBuZXh0IHN0ZXA7IG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSB2Ym94c2YgY29kZSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODczOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE4OjM5OjI4Ljg5NDkwNDY2M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY4OTYyNDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmJveHNmX2Rpcl9jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvdmJveHNmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy92Ym94c2YvZGlyLmM9MjM2PXN0YXRpYyBpbnQgdmJveHNmX2Rpcl9pbnN0YW50aWF0ZShzdHJ1Y3QgaW5vZGUgKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvdmJveHNmL2Rpci5jLTI1Ni1cXG5mcy92Ym94c2YvZGlyLmM6MjU3OnN0YXRpYyBpbnQgdmJveHNmX2Rpcl9jcmVhdGUoc3RydWN0IGlub2RlICpwYXJlbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG5mcy92Ym94c2YvZGlyLmMtMjU4LVxcdFxcdFxcdCAgICAgdW1vZGVfdCBtb2RlLCBib29sIGlzX2RpciwgYm9vbCBleGNsLCB1NjQgKmhhbmRsZV9yZXQpXFxuLS1cXG5mcy92Ym94c2YvZGlyLmM9Mjk5PXN0YXRpYyBpbnQgdmJveHNmX2Rpcl9ta2ZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy92Ym94c2YvZGlyLmMtMzAyLXtcXG5mcy92Ym94c2YvZGlyLmM6MzAzOlxcdHJldHVybiB2Ym94c2ZfZGlyX2NyZWF0ZShwYXJlbnQsIGRlbnRyeSwgbW9kZSwgZmFsc2UsIHRydWUsIE5VTEwpO1xcbmZzL3Zib3hzZi9kaXIuYy0zMDQtfVxcbi0tXFxuZnMvdmJveHNmL2Rpci5jPTMwNj1zdGF0aWMgc3RydWN0IGRlbnRyeSAqdmJveHNmX2Rpcl9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL3Zib3hzZi9kaXIuYy0zMDkte1xcbmZzL3Zib3hzZi9kaXIuYzozMTA6XFx0cmV0dXJuIEVSUl9QVFIodmJveHNmX2Rpcl9jcmVhdGUocGFyZW50LCBkZW50cnksIG1vZGUsIHRydWUsIHRydWUsIE5VTEwpKTtcXG5mcy92Ym94c2YvZGlyLmMtMzExLX1cXG4tLVxcbmZzL3Zib3hzZi9kaXIuYz0zMTM9c3RhdGljIGludCB2Ym94c2ZfZGlyX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy92Ym94c2YvZGlyLmMtMzMwLVxcbmZzL3Zib3hzZi9kaXIuYzozMzE6XFx0ZXJyID0gdmJveHNmX2Rpcl9jcmVhdGUocGFyZW50LCBkZW50cnksIG1vZGUsIGZhbHNlLCBmbGFncyBcXHUwMDI2IE9fRVhDTCwgXFx1MDAyNmhhbmRsZSk7XFxuZnMvdmJveHNmL2Rpci5jLTMzMi1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODozOToyOC45OTE4MDY1NjRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUwNzEyNzgzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9ucyBvZiBhIEZpbGVzeXN0ZW0gUmVmYWN0b3IqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGB2Ym94c2ZfZGlyX2NyZWF0ZWAgaXMgYmVpbmcgdXNlZCBieSBgdmJveHNmX2Rpcl9hdG9taWNfb3BlbmAsIHdoaWNoIGlzIGFscmVhZHkgaGFuZGxpbmcgYE9fRVhDTGAgZmxhZ3MuIEFsc28sIHRoZSBgdmJveHNmX2Rpcl9ta2ZpbGVgICh3aGljaCBpcyB0aGUgYWN0dWFsIGAuY3JlYXRlYCBvcGVyYXRpb24pIHBhc3NlcyBgdHJ1ZWAgZm9yIGV4Y2x1c2l2ZSBjcmVhdGlvbi4gU28sIHRoZSBgLmNyZWF0ZWAgaW5vZGUgb3BlcmF0aW9uIGlzIG5vdyAqc3RyaWN0bHkqIGZvciBleGNsdXNpdmUgY3JlYXRlcy4gSXQgc2VlbXMgdGhlIFZGUyBsYXllciBpcyB0YWtpbmcgcmVzcG9uc2liaWxpdHkgZm9yIGhhbmRsaW5nIG5vbi1leGNsdXNpdmUgc2NlbmFyaW9zLCBhbmQgdGhlIGZpbGVzeXN0ZW0gY29kZSBjYW4ganVzdCBhc3N1bWUgdGhlIGZpbGUgZG9lc24ndCBleGlzdC5cblxuVGhpcyBmZWVscyBsaWtlIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCB0aGUgaW1wbGljYXRpb24gaXMgdGhhdCB3ZSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gZnV6emluZyB0aGlzLiBJdCdzIG5vdCBhIGxvY2FsaXplZCBjaGFuZ2U7IGl04oCZcyBhIHRyZWUtd2lkZSByZWZhY3RvcmluZyB0aGF0IGFmZmVjdHMgdGhlIGJlaGF2aW9yIG9mIGB2ZnNfY3JlYXRlYCBhbmQgYGxvb2t1cF9vcGVuYCBpbiBob3cgdGhleSBjYWxsIGBjcmVhdGVgLiBUaGUgY2hhbmdlcyBhcmUgc3VidGxlLCBidXQgdGhleSBjb3VsZCBoYXZlIHNlcmlvdXMgY29uc2VxdWVuY2VzLlxuXG5XYWl0IGEgc2Vjb25k4oCmIGB2ZnNfY3JlYXRlYCAqdXNlZCogdG8gcGFzcyBgdHJ1ZWAgZm9yIGV4Y2x1c2l2ZSBjcmVhdGlvbiAoYGV4Y2xgKSwgYW5kIG5vdyBpdCBkb2Vzbid0IHBhc3MgYW55dGhpbmcuIFRoZSBmaWxlc3lzdGVtIG5vdyBpbXBsaWNpdGx5IGFzc3VtZXMgYHRydWVgLiBBbmQgYGxvb2t1cF9vcGVuYCAqdXNlZCogdG8gcGFzcyBgb3Blbl9mbGFnIFx1MDAyNiBPX0VYQ0xgLiBOb3csIGl0IGRvZXNuJ3QgcGFzcyBhbnl0aGluZywgYW5kIHRoZSBmaWxlc3lzdGVtIHN0aWxsIGltcGxpY2l0bHkgYXNzdW1lcyBgdHJ1ZWAuXG5cbkhvbGQgb24uLi4gaWYgYGxvb2t1cF9vcGVuYCAqdXNlZCogdG8gcGFzcyB0aGUgYml0d2lzZSBBTkQgb2YgdGhlIGBvcGVuX2ZsYWdgIGFuZCBgT19FWENMYCwgYW5kIG5vdyBpdCdzICpub3QqIHBhc3NpbmcgYW55dGhpbmcsIGFuZCB0aGUgZmlsZXN5c3RlbSBhbHdheXMgYXNzdW1lcyBgdHJ1ZWAsIHRoZW4gZm9yIG5vbi1leGNsdXNpdmUgY3JlYXRlcyAoYE9fQ1JFQVRgIHdpdGhvdXQgYE9fRVhDTGApLCB0aGUgZmlsZXN5c3RlbSdzIGBjcmVhdGVgIG1ldGhvZCBpcyAqbm93KiBiZWhhdmluZyBhcyBpZiBgT19FWENMYCAqd2FzKiBwYXNzZWQhIFRoYXQncyBhIGJyZWFraW5nIGNoYW5nZS5cblxuSXMgdGhhdCByZWFsbHkgd2hhdCB0aGlzIG1lYW5zPyBBbSBJIHVuZGVyc3RhbmRpbmcgdGhpcyBjb3JyZWN0bHk/IEkgYmV0dGVyIGRvdWJsZS1jaGVjayBgbG9va3VwX29wZW5gIGluIGBmcy9uYW1laS5jYCB0byBiZSBjZXJ0YWluLiBHb3R0YSBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTUzMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODozOTozNS40OTg5Mzc1ODZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1OTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9uYW1laS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ0ODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ0ODA6XFx0XFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHtcXG40NDgxOlxcdFxcdFxcdHN0cnVjdCBkZW50cnkgKnJlcyA9IGRpcl9pbm9kZS1cXHUwMDNlaV9vcC1cXHUwMDNlbG9va3VwKGRpcl9pbm9kZSwgZGVudHJ5LFxcbjQ0ODI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBuZC1cXHUwMDNlZmxhZ3MpO1xcbjQ0ODM6XFx0XFx0XFx0ZF9sb29rdXBfZG9uZShkZW50cnkpO1xcbjQ0ODQ6XFx0XFx0XFx0aWYgKHVubGlrZWx5KHJlcykpIHtcXG40NDg1OlxcdFxcdFxcdFxcdGlmIChJU19FUlIocmVzKSkge1xcbjQ0ODY6XFx0XFx0XFx0XFx0XFx0ZXJyb3IgPSBQVFJfRVJSKHJlcyk7XFxuNDQ4NzpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF9kcHV0O1xcbjQ0ODg6XFx0XFx0XFx0XFx0fVxcbjQ0ODk6XFx0XFx0XFx0XFx0ZHB1dChkZW50cnkpO1xcbjQ0OTA6XFx0XFx0XFx0XFx0ZGVudHJ5ID0gcmVzO1xcbjQ0OTE6XFx0XFx0XFx0fVxcbjQ0OTI6XFx0XFx0fVxcbjQ0OTM6XFx0XFxuNDQ5NDpcXHRcXHQvKiBOZWdhdGl2ZSBkZW50cnksIGp1c3QgY3JlYXRlIHRoZSBmaWxlICovXFxuNDQ5NTpcXHRcXHRpZiAoIWRlbnRyeS1cXHUwMDNlZF9pbm9kZSBcXHUwMDI2XFx1MDAyNiAob3Blbl9mbGFnIFxcdTAwMjYgT19DUkVBVCkpIHtcXG40NDk2OlxcdFxcdFxcdC8qIGJ1dCBicmVhayB0aGUgZGlyZWN0b3J5IGxlYXNlIGZpcnN0ISAqL1xcbjQ0OTc6XFx0XFx0XFx0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyX2lub2RlLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkZWxlZ2F0ZWRfaW5vZGUpO1xcbjQ0OTg6XFx0XFx0XFx0aWYgKGVycm9yKVxcbjQ0OTk6XFx0XFx0XFx0XFx0Z290byBvdXRfZHB1dDtcXG40NTAwOlxcdFxcbjQ1MDE6XFx0XFx0XFx0ZmlsZS1cXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NSRUFURUQ7XFxuNDUwMjpcXHRcXHRcXHRhdWRpdF9pbm9kZV9jaGlsZChkaXJfaW5vZGUsIGRlbnRyeSwgQVVESVRfVFlQRV9DSElMRF9DUkVBVEUpO1xcbjQ1MDM6XFx0XFx0XFx0aWYgKCFkaXJfaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWNyZWF0ZSkge1xcbjQ1MDQ6XFx0XFx0XFx0XFx0ZXJyb3IgPSAtRUFDQ0VTO1xcbjQ1MDU6XFx0XFx0XFx0XFx0Z290byBvdXRfZHB1dDtcXG40NTA2OlxcdFxcdFxcdH1cXG40NTA3OlxcdFxcbjQ1MDg6XFx0XFx0XFx0ZXJyb3IgPSBkaXJfaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWNyZWF0ZShpZG1hcCwgZGlyX2lub2RlLCBkZW50cnksIG1vZGUpO1xcbjQ1MDk6XFx0XFx0XFx0aWYgKGVycm9yKVxcbjQ1MTA6XFx0XFx0XFx0XFx0Z290byBvdXRfZHB1dDtcXG40NTExOlxcdFxcdH1cXG40NTEyOlxcdFxcdGlmICh1bmxpa2VseShjcmVhdGVfZXJyb3IpIFxcdTAwMjZcXHUwMDI2ICFkZW50cnktXFx1MDAzZWRfaW5vZGUpIHtcXG40NTEzOlxcdFxcdFxcdGVycm9yID0gY3JlYXRlX2Vycm9yO1xcbjQ1MTQ6XFx0XFx0XFx0Z290byBvdXRfZHB1dDtcXG40NTE1OlxcdFxcdH1cXG40NTE2OlxcdFxcdHJldHVybiBkZW50cnk7XFxuNDUxNzpcXHRcXG40NTE4OlxcdG91dF9kcHV0OlxcbjQ1MTk6XFx0XFx0ZHB1dChkZW50cnkpO1xcbjQ1MjA6XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyb3IpO1xcbjQ1MjE6XFx0fVxcbjQ1MjI6XFx0XFxuNDUyMzpcXHRzdGF0aWMgaW5saW5lIGJvb2wgdHJhaWxpbmdfc2xhc2hlcyhzdHJ1Y3QgbmFtZWlkYXRhICpuZClcXG40NTI0OlxcdHtcXG40NTI1OlxcdFxcdHJldHVybiAoYm9vbCluZC1cXHUwMDNlbGFzdC5uYW1lW25kLVxcdTAwM2VsYXN0Lmxlbl07XFxuNDUyNjpcXHR9XFxuNDUyNzpcXHRcXG40NTI4OlxcdHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfZmFzdF9mb3Jfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgaW50IG9wZW5fZmxhZylcXG40NTI5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTg6Mzk6MzUuNTAwMzAwNzM2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTYwNTU4NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guXG5cbioqQW5hbHl6aW5nIHRoZSBgbG9va3VwX29wZW5gIEZ1bmN0aW9uKipcblxuSG1tLCB0aGUgY29kZSByZW1pbmRzIG1lIHRoYXQgYGxvb2t1cF9vcGVuYCBnZXRzIGludm9rZWQgd2hlbiBgT19DUkVBVGAgaXMgc2V0LiBOb3cgdGhhdCdzIGEga2V5IGRldGFpbCB0byBrZWVwIGluIG1pbmQuIFRoZSBpbnRlcmVzdGluZyB0aGluZyBpcywgdGhhdCBpZiB0aGUgZmlsZXN5c3RlbSBoYXMgYW4gYGF0b21pY19vcGVuYCBpbXBsZW1lbnRhdGlvbiwgaXQgc2hvdWxkIGFjdHVhbGx5IGJlIGNhbGxlZCAqZWFybGllciogd2l0aGluIGBsb29rdXBfb3BlbmAuIFNvLCB0aGF0IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGFuYWx5c2lzLiBMZXQgbWUganVzdCBxdWlja2x5IHRyYWNlIGJhY2sgdGhyb3VnaCBgbG9va3VwX29wZW5gLCBhbmQgZ2V0IG15IGJlYXJpbmdzIG9uIHdoYXQncyBoYXBwZW5pbmcgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZnVuY3Rpb24uIEkgd2FudCB0byBzZWUgaG93IHRoYXQgZWFybHkgY2FsbCB3b3VsZCBmaXQgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMDU4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODozOTozOC44MTYzNTk4MDZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEzNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL25hbWVpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDQwMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDQwMDpcXHQgKiBoYWRuJ3QgYmVlbiBzcGVjaWZpZWQuXFxuNDQwMTpcXHQgKlxcbjQ0MDI6XFx0ICogQW4gZXJyb3IgY29kZSBpcyByZXR1cm5lZCBvbiBmYWlsdXJlLlxcbjQ0MDM6XFx0ICovXFxuNDQwNDpcXHRzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxcbjQ0MDU6XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3AsXFxuNDQwNjpcXHRcXHRcXHRcXHRcXHQgIGJvb2wgZ290X3dyaXRlLCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkZWxlZ2F0ZWRfaW5vZGUpXFxuNDQwNzpcXHR7XFxuNDQwODpcXHRcXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcDtcXG40NDA5OlxcdFxcdHN0cnVjdCBkZW50cnkgKmRpciA9IG5kLVxcdTAwM2VwYXRoLmRlbnRyeTtcXG40NDEwOlxcdFxcdHN0cnVjdCBpbm9kZSAqZGlyX2lub2RlID0gZGlyLVxcdTAwM2VkX2lub2RlO1xcbjQ0MTE6XFx0XFx0aW50IG9wZW5fZmxhZyA9IG9wLVxcdTAwM2VvcGVuX2ZsYWc7XFxuNDQxMjpcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XFxuNDQxMzpcXHRcXHRpbnQgZXJyb3IsIGNyZWF0ZV9lcnJvciA9IDA7XFxuNDQxNDpcXHRcXHR1bW9kZV90IG1vZGUgPSBvcC1cXHUwMDNlbW9kZTtcXG40NDE1OlxcdFxcbjQ0MTY6XFx0XFx0aWYgKHVubGlrZWx5KElTX0RFQURESVIoZGlyX2lub2RlKSkpXFxuNDQxNzpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcXG40NDE4OlxcdFxcbjQ0MTk6XFx0XFx0ZmlsZS1cXHUwMDNlZl9tb2RlIFxcdTAwMjY9IH5GTU9ERV9DUkVBVEVEO1xcbjQ0MjA6XFx0XFx0ZGVudHJ5ID0gZF9sb29rdXAoZGlyLCBcXHUwMDI2bmQtXFx1MDAzZWxhc3QpO1xcbjQ0MjE6XFx0XFx0Zm9yICg7Oykge1xcbjQ0MjI6XFx0XFx0XFx0aWYgKCFkZW50cnkpIHtcXG40NDIzOlxcdFxcdFxcdFxcdGRlbnRyeSA9IGRfYWxsb2NfcGFyYWxsZWwoZGlyLCBcXHUwMDI2bmQtXFx1MDAzZWxhc3QpO1xcbjQ0MjQ6XFx0XFx0XFx0XFx0aWYgKElTX0VSUihkZW50cnkpKVxcbjQ0MjU6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGRlbnRyeTtcXG40NDI2OlxcdFxcdFxcdH1cXG40NDI3OlxcdFxcdFxcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKVxcbjQ0Mjg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNDQyOTpcXHRcXG40NDMwOlxcdFxcdFxcdGVycm9yID0gZF9yZXZhbGlkYXRlKGRpcl9pbm9kZSwgXFx1MDAyNm5kLVxcdTAwM2VsYXN0LCBkZW50cnksIG5kLVxcdTAwM2VmbGFncyk7XFxuNDQzMTpcXHRcXHRcXHRpZiAobGlrZWx5KGVycm9yIFxcdTAwM2UgMCkpXFxuNDQzMjpcXHRcXHRcXHRcXHRicmVhaztcXG40NDMzOlxcdFxcdFxcdGlmIChlcnJvcilcXG40NDM0OlxcdFxcdFxcdFxcdGdvdG8gb3V0X2RwdXQ7XFxuNDQzNTpcXHRcXHRcXHRkX2ludmFsaWRhdGUoZGVudHJ5KTtcXG40NDM2OlxcdFxcdFxcdGRwdXQoZGVudHJ5KTtcXG40NDM3OlxcdFxcdFxcdGRlbnRyeSA9IE5VTEw7XFxuNDQzODpcXHRcXHR9XFxuNDQzOTpcXHRcXHRpZiAoZGVudHJ5LVxcdTAwM2VkX2lub2RlKSB7XFxuNDQ0MDpcXHRcXHRcXHQvKiBDYWNoZWQgcG9zaXRpdmUgZGVudHJ5OiB3aWxsIG9wZW4gaW4gZl9vcC1cXHUwMDNlb3BlbiAqL1xcbjQ0NDE6XFx0XFx0XFx0cmV0dXJuIGRlbnRyeTtcXG40NDQyOlxcdFxcdH1cXG40NDQzOlxcdFxcbjQ0NDQ6XFx0XFx0aWYgKG9wZW5fZmxhZyBcXHUwMDI2IE9fQ1JFQVQpXFxuNDQ0NTpcXHRcXHRcXHRhdWRpdF9pbm9kZShuZC1cXHUwMDNlbmFtZSwgZGlyLCBBVURJVF9JTk9ERV9QQVJFTlQpO1xcbjQ0NDY6XFx0XFxuNDQ0NzpcXHRcXHQvKlxcbjQ0NDg6XFx0XFx0ICogQ2hlY2tpbmcgd3JpdGUgcGVybWlzc2lvbiBpcyB0cmlja3ksIGJhY3VzZSB3ZSBkb24ndCBrbm93IGlmIHdlIGFyZVxcbjQ0NDk6XFx0XFx0ICogZ29pbmcgdG8gYWN0dWFsbHkgbmVlZCBpdDogT19DUkVBVCBvcGVucyBzaG91bGQgd29yayBhcyBsb25nIGFzIHRoZVxcbjQ0NTA6XFx0XFx0ICogZmlsZSBleGlzdHMuICBCdXQgY2hlY2tpbmcgZXhpc3RlbmNlIGJyZWFrcyBhdG9taWNpdHkuICBUaGUgdHJpY2sgaXNcXG40NDUxOlxcdFxcdCAqIHRvIGNoZWNrIGFjY2VzcyBhbmQgaWYgbm90IGdyYW50ZWQgY2xlYXIgT19DUkVBVCBmcm9tIHRoZSBmbGFncy5cXG40NDUyOlxcdFxcdCAqXFxuNDQ1MzpcXHRcXHQgKiBBbm90aGVyIHByb2JsZW0gaXMgcmV0dXJpbmcgdGhlIFxcXCJyaWdodFxcXCIgZXJyb3IgdmFsdWUgKGUuZy4gZm9yIGFuXFxuNDQ1NDpcXHRcXHQgKiBPX0VYQ0wgb3BlbiB3ZSB3YW50IHRvIHJldHVybiBFRVhJU1Qgbm90IEVST0ZTKS5cXG40NDU1OlxcdFxcdCAqL1xcbjQ0NTY6XFx0XFx0aWYgKHVubGlrZWx5KCFnb3Rfd3JpdGUpKVxcbjQ0NTc6XFx0XFx0XFx0b3Blbl9mbGFnIFxcdTAwMjY9IH5PX1RSVU5DO1xcbjQ0NTg6XFx0XFx0aWRtYXAgPSBtbnRfaWRtYXAobmQtXFx1MDAzZXBhdGgubW50KTtcXG40NDU5OlxcdFxcdGlmIChvcGVuX2ZsYWcgXFx1MDAyNiBPX0NSRUFUKSB7XFxuNDQ2MDpcXHRcXHRcXHRpZiAob3Blbl9mbGFnIFxcdTAwMjYgT19FWENMKVxcbjQ0NjE6XFx0XFx0XFx0XFx0b3Blbl9mbGFnIFxcdTAwMjY9IH5PX1RSVU5DO1xcbjQ0NjI6XFx0XFx0XFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpci1cXHUwMDNlZF9pbm9kZSwgbW9kZSwgbW9kZSwgbW9kZSk7XFxuNDQ2MzpcXHRcXHRcXHRpZiAobGlrZWx5KGdvdF93cml0ZSkpXFxuNDQ2NDpcXHRcXHRcXHRcXHRjcmVhdGVfZXJyb3IgPSBtYXlfb19jcmVhdGUoaWRtYXAsIFxcdTAwMjZuZC1cXHUwMDNlcGF0aCxcXG40NDY1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBkZW50cnksIG1vZGUpO1xcbjQ0NjY6XFx0XFx0XFx0ZWxzZVxcbjQ0Njc6XFx0XFx0XFx0XFx0Y3JlYXRlX2Vycm9yID0gLUVST0ZTO1xcbjQ0Njg6XFx0XFx0fVxcbjQ0Njk6XFx0XFx0aWYgKGNyZWF0ZV9lcnJvcilcXG40NDcwOlxcdFxcdFxcdG9wZW5fZmxhZyBcXHUwMDI2PSB+T19DUkVBVDtcXG40NDcxOlxcdFxcdGlmIChkaXJfaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWF0b21pY19vcGVuKSB7XFxuNDQ3MjpcXHRcXHRcXHRpZiAobmQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTE9PS1VQX0RJUkVDVE9SWSlcXG40NDczOlxcdFxcdFxcdFxcdG9wZW5fZmxhZyB8PSBPX0RJUkVDVE9SWTtcXG40NDc0OlxcdFxcdFxcdGRlbnRyeSA9IGF0b21pY19vcGVuKFxcdTAwMjZuZC1cXHUwMDNlcGF0aCwgZGVudHJ5LCBmaWxlLCBvcGVuX2ZsYWcsIG1vZGUpO1xcbjQ0NzU6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGNyZWF0ZV9lcnJvcikgXFx1MDAyNlxcdTAwMjYgZGVudHJ5ID09IEVSUl9QVFIoLUVOT0VOVCkpXFxuNDQ3NjpcXHRcXHRcXHRcXHRkZW50cnkgPSBFUlJfUFRSKGNyZWF0ZV9lcnJvcik7XFxuNDQ3NzpcXHRcXHRcXHRyZXR1cm4gZGVudHJ5O1xcbjQ0Nzg6XFx0XFx0fVxcbjQ0Nzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE4OjM5OjM4LjgxNjg3NzIzNloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTMzODg1MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQXRvbWljIE9wZW4gYW5kIE5vbi1FeGNsdXNpdmUgQ3JlYXRlIEZsb3cqKlxuXG5Pa2F5LCBzbyBgYXRvbWljX29wZW5gIGdldHMgY2FsbGVkIGZpcnN0LCBpZiBpdCdzIHRoZXJlLiBNYWtlcyBzZW5zZS4gSWYgaXQncyAqbm90KiBwcmVzZW50LCB0aGUgZmxvdyBnb2VzIHRocm91Z2ggYGxvb2t1cGAg4oCTIGFzc3VtaW5nLCBvZiBjb3Vyc2UsIHRoYXQgYGRfaW5fbG9va3VwKGRlbnRyeSlgIHJldHVybnMgdHJ1ZS4gSWYgdGhhdCBzdGlsbCByZXN1bHRzIGluIGEgbmVnYXRpdmUgb3V0Y29tZSwgYW5kIGBPX0NSRUFUYCBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIHN5c3RlbSBjYWxscyBgY3JlYXRlYC4gU28sIHdoZW4gYGF0b21pY19vcGVuYCBpc24ndCBpbXBsZW1lbnRlZCwgdGhlIFZGUyBkb2VzIGEgc2ltcGxlOiAxLiBgbG9va3VwYCwgYW5kIDIuIGlmIG5lZ2F0aXZlLCBgY3JlYXRlYC5cblxuTm93LCBpZiBpdCdzIGEgbm9uLWV4Y2x1c2l2ZSBjcmVhdGUgKGBPX0NSRUFUYCAqd2l0aG91dCogYE9fRVhDTGApLCBhbmQgdGhlIGZpbGUgZG9lc24ndCBleGlzdCwgaXQgdXNlcyBgY3JlYXRlYC4gQmVmb3JlIHRoaXMgcGF0Y2gsIHdlIHBhc3NlZCBgZXhjbCA9IGZhbHNlYCB0byBgY3JlYXRlYC4gTm93LCB3ZSBwYXNzIG5vdGhpbmcsIGxldHRpbmcgdGhlIGZpbGVzeXN0ZW0gYXNzdW1lIGBleGNsID0gdHJ1ZWAuIFdhaXQuLi4gaWYgdGhlIGZpbGVzeXN0ZW0gKmFzc3VtZXMqIGBleGNsID0gdHJ1ZWAsIGRvZXNuJ3QgdGhhdCBtZWFuIGl0J3MgZ29pbmcgdG8gZmFpbCBpZiB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cz9cblxuWWVzLCBidXQgd2FpdC4gVGhlIFZGUyBhbHJlYWR5IGNvbmZpcm1lZCB0aGF0IHRoZSBmaWxlICpkb2Vzbid0KiBleGlzdC4gSXQncyBhIG5lZ2F0aXZlIGRlbnRyeS4gQnV0IHdoYXQgaWYgdGhlcmUncyBhIHJhY2U/IFdoYXQgaWYgdGhlIGZpbGUgZ2V0cyBjcmVhdGVkICpjb25jdXJyZW50bHkqIGJldHdlZW4gYGxvb2t1cGAgYW5kIGBjcmVhdGVgPyBJZiB0aGUgZmlsZXN5c3RlbSBpcyB1c2luZyBhbiBleGNsdXNpdmUgY3JlYXRlIChlLmcuLCBgbWtub2RgKSBiZWNhdXNlIGl0IGFzc3VtZXMgYGV4Y2wgPSB0cnVlYCwgaXQgd2lsbCBmYWlsIHdpdGggYEVFWElTVGAuIFRoZW4gd2hhdCBkb2VzIHRoZSBWRlMgZG8/XG5cbkhvbGQgb24uIElmIGBjcmVhdGVgIHJldHVybnMgYEVFWElTVGAsIGBsb29rdXBfb3BlbmAgcmV0dXJucyBgRVJSX1BUUigtRUVYSVNUKWAuIEJ1dCBpbiBhIG5vbi1leGNsdXNpdmUgY3JlYXRlIHNpdHVhdGlvbiwgd2UgKnNob3VsZG4ndCogZmFpbCB3aXRoIGBFRVhJU1RgIGlmIHRoZSBmaWxlIGlzIGNyZWF0ZWQgY29uY3VycmVudGx5ISBXZSBzaG91bGQganVzdCBvcGVuIHRoZSBleGlzdGluZyBmaWxlLiBTbywgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgVkZTIGhhbmRsZXMgYEVFWElTVGAgcmV0dXJuZWQgZnJvbSBgbG9va3VwX29wZW5gIHdpdGhpbiBgb3Blbl9sYXN0X2xvb2t1cHNgLiBUaGF0J3Mgd2hlcmUgdGhlIHByb2JsZW0gbGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI1NzEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODozOTo0NS43NTA3Njg5MzZaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1ODkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9uYW1laS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1MzAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NTMwOlxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcXG40NTMxOlxcdFxcbjQ1MzI6XFx0XFx0aWYgKG9wZW5fZmxhZyBcXHUwMDI2IE9fQ1JFQVQpIHtcXG40NTMzOlxcdFxcdFxcdGlmICh0cmFpbGluZ19zbGFzaGVzKG5kKSlcXG40NTM0OlxcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSVNESVIpO1xcbjQ1MzU6XFx0XFxuNDUzNjpcXHRcXHRcXHQvKiBEb24ndCBib3RoZXIgb24gYW4gT19FWENMIGNyZWF0ZSAqL1xcbjQ1Mzc6XFx0XFx0XFx0aWYgKG9wZW5fZmxhZyBcXHUwMDI2IE9fRVhDTClcXG40NTM4OlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjQ1Mzk6XFx0XFx0fVxcbjQ1NDA6XFx0XFxuNDU0MTpcXHRcXHRpZiAodHJhaWxpbmdfc2xhc2hlcyhuZCkpXFxuNDU0MjpcXHRcXHRcXHRuZC1cXHUwMDNlZmxhZ3MgfD0gTE9PS1VQX0ZPTExPVyB8IExPT0tVUF9ESVJFQ1RPUlk7XFxuNDU0MzpcXHRcXG40NTQ0OlxcdFxcdGRlbnRyeSA9IGxvb2t1cF9mYXN0KG5kKTtcXG40NTQ1OlxcdFxcdGlmIChJU19FUlJfT1JfTlVMTChkZW50cnkpKVxcbjQ1NDY6XFx0XFx0XFx0cmV0dXJuIGRlbnRyeTtcXG40NTQ3OlxcdFxcbjQ1NDg6XFx0XFx0aWYgKG9wZW5fZmxhZyBcXHUwMDI2IE9fQ1JFQVQpIHtcXG40NTQ5OlxcdFxcdFxcdC8qIERpc2NhcmQgbmVnYXRpdmUgZGVudHJpZXMuIE5lZWQgaW5vZGVfbG9jayB0byBkbyB0aGUgY3JlYXRlICovXFxuNDU1MDpcXHRcXHRcXHRpZiAoIWRlbnRyeS1cXHUwMDNlZF9pbm9kZSkge1xcbjQ1NTE6XFx0XFx0XFx0XFx0aWYgKCEobmQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTE9PS1VQX1JDVSkpXFxuNDU1MjpcXHRcXHRcXHRcXHRcXHRkcHV0KGRlbnRyeSk7XFxuNDU1MzpcXHRcXHRcXHRcXHRkZW50cnkgPSBOVUxMO1xcbjQ1NTQ6XFx0XFx0XFx0fVxcbjQ1NTU6XFx0XFx0fVxcbjQ1NTY6XFx0XFx0cmV0dXJuIGRlbnRyeTtcXG40NTU3OlxcdH1cXG40NTU4OlxcdFxcbjQ1NTk6XFx0c3RhdGljIGNvbnN0IGNoYXIgKm9wZW5fbGFzdF9sb29rdXBzKHN0cnVjdCBuYW1laWRhdGEgKm5kLFxcbjQ1NjA6XFx0XFx0XFx0ICAgc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBvcGVuX2ZsYWdzICpvcClcXG40NTYxOlxcdHtcXG40NTYyOlxcdFxcdHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgZGVsZWdhdGVkX2lub2RlID0geyB9O1xcbjQ1NjM6XFx0XFx0c3RydWN0IGRlbnRyeSAqZGlyID0gbmQtXFx1MDAzZXBhdGguZGVudHJ5O1xcbjQ1NjQ6XFx0XFx0aW50IG9wZW5fZmxhZyA9IG9wLVxcdTAwM2VvcGVuX2ZsYWc7XFxuNDU2NTpcXHRcXHRib29sIGdvdF93cml0ZSA9IGZhbHNlO1xcbjQ1NjY6XFx0XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xcbjQ1Njc6XFx0XFx0Y29uc3QgY2hhciAqcmVzO1xcbjQ1Njg6XFx0XFxuNDU2OTpcXHRcXHRuZC1cXHUwMDNlZmxhZ3MgfD0gb3AtXFx1MDAzZWludGVudDtcXG40NTcwOlxcdFxcbjQ1NzE6XFx0XFx0aWYgKG5kLVxcdTAwM2VsYXN0X3R5cGUgIT0gTEFTVF9OT1JNKSB7XFxuNDU3MjpcXHRcXHRcXHRpZiAobmQtXFx1MDAzZWRlcHRoKVxcbjQ1NzM6XFx0XFx0XFx0XFx0cHV0X2xpbmsobmQpO1xcbjQ1NzQ6XFx0XFx0XFx0cmV0dXJuIGhhbmRsZV9kb3RzKG5kLCBuZC1cXHUwMDNlbGFzdF90eXBlKTtcXG40NTc1OlxcdFxcdH1cXG40NTc2OlxcdFxcbjQ1Nzc6XFx0XFx0LyogV2UgX2Nhbl8gYmUgaW4gUkNVIG1vZGUgaGVyZSAqL1xcbjQ1Nzg6XFx0XFx0ZGVudHJ5ID0gbG9va3VwX2Zhc3RfZm9yX29wZW4obmQsIG9wZW5fZmxhZyk7XFxuNDU3OTpcXHRcXHRpZiAoSVNfRVJSKGRlbnRyeSkpXFxuNDU4MDpcXHRcXHRcXHRyZXR1cm4gRVJSX0NBU1QoZGVudHJ5KTtcXG40NTgxOlxcdFxcbjQ1ODI6XFx0XFx0aWYgKGxpa2VseShkZW50cnkpKVxcbjQ1ODM6XFx0XFx0XFx0Z290byBmaW5pc2hfbG9va3VwO1xcbjQ1ODQ6XFx0XFxuNDU4NTpcXHRcXHRpZiAoIShvcGVuX2ZsYWcgXFx1MDAyNiBPX0NSRUFUKSkge1xcbjQ1ODY6XFx0XFx0XFx0aWYgKFdBUk5fT05fT05DRShuZC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBMT09LVVBfUkNVKSlcXG40NTg3OlxcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FQ0hJTEQpO1xcbjQ1ODg6XFx0XFx0fSBlbHNlIHtcXG40NTg5OlxcdFxcdFxcdGlmIChuZC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBMT09LVVBfUkNVKSB7XFxuNDU5MDpcXHRcXHRcXHRcXHRpZiAoIXRyeV90b191bmxhenkobmQpKVxcbjQ1OTE6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVDSElMRCk7XFxuNDU5MjpcXHRcXHRcXHR9XFxuNDU5MzpcXHRcXHR9XFxuNDU5NDpcXHRyZXRyeTpcXG40NTk1OlxcdFxcdGlmIChvcGVuX2ZsYWcgXFx1MDAyNiAoT19DUkVBVCB8IE9fVFJVTkMgfCBPX1dST05MWSB8IE9fUkRXUikpIHtcXG40NTk2OlxcdFxcdFxcdGdvdF93cml0ZSA9ICFtbnRfd2FudF93cml0ZShuZC1cXHUwMDNlcGF0aC5tbnQpO1xcbjQ1OTc6XFx0XFx0XFx0LypcXG40NTk4OlxcdFxcdFxcdCAqIGRvIF9ub3RfIGZhaWwgeWV0IC0gd2UgbWlnaHQgbm90IG5lZWQgdGhhdCBvciBmYWlsIHdpdGhcXG40NTk5OlxcdFxcdFxcdCAqIGEgZGlmZmVyZW50IGVycm9yOyBsZXQgbG9va3VwX29wZW4oKSBkZWNpZGU7IHdlJ2xsIGJlXFxuNDYwMDpcXHRcXHRcXHQgKiBkcm9wcGluZyB0aGlzIG9uZSBhbnl3YXkuXFxuNDYwMTpcXHRcXHRcXHQgKi9cXG40NjAyOlxcdFxcdH1cXG40NjAzOlxcdFxcdGlmIChvcGVuX2ZsYWcgXFx1MDAyNiBPX0NSRUFUKVxcbjQ2MDQ6XFx0XFx0XFx0aW5vZGVfbG9jayhkaXItXFx1MDAzZWRfaW5vZGUpO1xcbjQ2MDU6XFx0XFx0ZWxzZVxcbjQ2MDY6XFx0XFx0XFx0aW5vZGVfbG9ja19zaGFyZWQoZGlyLVxcdTAwM2VkX2lub2RlKTtcXG40NjA3OlxcdFxcdGRlbnRyeSA9IGxvb2t1cF9vcGVuKG5kLCBmaWxlLCBvcCwgZ290X3dyaXRlLCBcXHUwMDI2ZGVsZWdhdGVkX2lub2RlKTtcXG40NjA4OlxcdFxcdGlmICghSVNfRVJSKGRlbnRyeSkpIHtcXG40NjA5OlxcdFxcdFxcdGlmIChmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9DUkVBVEVEKVxcbjQ2MTA6XFx0XFx0XFx0XFx0ZnNub3RpZnlfY3JlYXRlKGRpci1cXHUwMDNlZF9pbm9kZSwgZGVudHJ5KTtcXG40NjExOlxcdFxcdFxcdGlmIChmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9PUEVORUQpXFxuNDYxMjpcXHRcXHRcXHRcXHRmc25vdGlmeV9vcGVuKGZpbGUpO1xcbjQ2MTM6XFx0XFx0fVxcbjQ2MTQ6XFx0XFx0aWYgKG9wZW5fZmxhZyBcXHUwMDI2IE9fQ1JFQVQpXFxuNDYxNTpcXHRcXHRcXHRpbm9kZV91bmxvY2soZGlyLVxcdTAwM2VkX2lub2RlKTtcXG40NjE2OlxcdFxcdGVsc2VcXG40NjE3OlxcdFxcdFxcdGlub2RlX3VubG9ja19zaGFyZWQoZGlyLVxcdTAwM2VkX2lub2RlKTtcXG40NjE4OlxcdFxcbjQ2MTk6XFx0XFx0aWYgKGdvdF93cml0ZSlcXG40NjIwOlxcdFxcdFxcdG1udF9kcm9wX3dyaXRlKG5kLVxcdTAwM2VwYXRoLm1udCk7XFxuNDYyMTpcXHRcXG40NjIyOlxcdFxcdGlmIChJU19FUlIoZGVudHJ5KSkge1xcbjQ2MjM6XFx0XFx0XFx0aWYgKGlzX2RlbGVnYXRlZChcXHUwMDI2ZGVsZWdhdGVkX2lub2RlKSkge1xcbjQ2MjQ6XFx0XFx0XFx0XFx0aW50IGVycm9yID0gYnJlYWtfZGVsZWdfd2FpdChcXHUwMDI2ZGVsZWdhdGVkX2lub2RlKTtcXG40NjI1OlxcdFxcbjQ2MjY6XFx0XFx0XFx0XFx0aWYgKCFlcnJvcilcXG40NjI3OlxcdFxcdFxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuNDYyODpcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnJvcik7XFxuNDYyOTpcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE4OjM5OjQ1Ljc1MjMzNTAzNloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjE4NTUwMzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW50ZXJuYWwgUmV2aWV3IG9mIGBvcGVuX2xhc3RfbG9va3Vwc2AgRnVuY3Rpb25hbGl0eSoqXG5cbkhtbSwgaG9sZCBvbi4gRG9lcyBgb3Blbl9sYXN0X2xvb2t1cHNgIGFjdHVhbGx5IGFjY291bnQgZm9yIGBFRVhJU1RgIGVycm9ycz8gVGhhdCdzIGEgY3JpdGljYWwgZGV0YWlsIEkgbmVlZCB0byB2ZXJpZnkuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCBmdW5jdGlvbiBiZWhhdmVzIGFzIGV4cGVjdGVkIGluIHRoYXQgcGFydGljdWxhciBzY2VuYXJpby4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmUtZXhhbWluZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYG9wZW5fbGFzdF9sb29rdXBzYCB0byBjb25maXJtIGl0IGhhbmRsZXMgdGhhdCBlZGdlIGNhc2UgY29ycmVjdGx5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhhdCBzZWN0aW9uIG9mIGNvZGUgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIGZpbGUgYWxyZWFkeSBleGlzdHMgZXJyb3JzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDg3NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTg6Mzk6NDguOTcwODg3ODQ1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3Mjg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9uYW1laS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2MzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ2MzA6XFx0XFx0XFx0cmV0dXJuIEVSUl9DQVNUKGRlbnRyeSk7XFxuNDYzMTpcXHRcXHR9XFxuNDYzMjpcXHRcXG40NjMzOlxcdFxcdGlmIChmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiAoRk1PREVfT1BFTkVEIHwgRk1PREVfQ1JFQVRFRCkpIHtcXG40NjM0OlxcdFxcdFxcdGRwdXQobmQtXFx1MDAzZXBhdGguZGVudHJ5KTtcXG40NjM1OlxcdFxcdFxcdG5kLVxcdTAwM2VwYXRoLmRlbnRyeSA9IGRlbnRyeTtcXG40NjM2OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjQ2Mzc6XFx0XFx0fVxcbjQ2Mzg6XFx0XFxuNDYzOTpcXHRmaW5pc2hfbG9va3VwOlxcbjQ2NDA6XFx0XFx0aWYgKG5kLVxcdTAwM2VkZXB0aClcXG40NjQxOlxcdFxcdFxcdHB1dF9saW5rKG5kKTtcXG40NjQyOlxcdFxcdHJlcyA9IHN0ZXBfaW50byhuZCwgV0FMS19UUkFJTElORywgZGVudHJ5KTtcXG40NjQzOlxcdFxcdGlmICh1bmxpa2VseShyZXMpKVxcbjQ2NDQ6XFx0XFx0XFx0bmQtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH4oTE9PS1VQX09QRU58TE9PS1VQX0NSRUFURXxMT09LVVBfRVhDTCk7XFxuNDY0NTpcXHRcXHRyZXR1cm4gcmVzO1xcbjQ2NDY6XFx0fVxcbjQ2NDc6XFx0XFxuNDY0ODpcXHQvKlxcbjQ2NDk6XFx0ICogSGFuZGxlIHRoZSBsYXN0IHN0ZXAgb2Ygb3BlbigpXFxuNDY1MDpcXHQgKi9cXG40NjUxOlxcdHN0YXRpYyBpbnQgZG9fb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcXG40NjUyOlxcdFxcdFxcdCAgIHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApXFxuNDY1MzpcXHR7XFxuNDY1NDpcXHRcXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcDtcXG40NjU1OlxcdFxcdGludCBvcGVuX2ZsYWcgPSBvcC1cXHUwMDNlb3Blbl9mbGFnO1xcbjQ2NTY6XFx0XFx0Ym9vbCBkb190cnVuY2F0ZTtcXG40NjU3OlxcdFxcdGludCBhY2NfbW9kZTtcXG40NjU4OlxcdFxcdGludCBlcnJvcjtcXG40NjU5OlxcdFxcbjQ2NjA6XFx0XFx0aWYgKCEoZmlsZS1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgKEZNT0RFX09QRU5FRCB8IEZNT0RFX0NSRUFURUQpKSkge1xcbjQ2NjE6XFx0XFx0XFx0ZXJyb3IgPSBjb21wbGV0ZV93YWxrKG5kKTtcXG40NjYyOlxcdFxcdFxcdGlmIChlcnJvcilcXG40NjYzOlxcdFxcdFxcdFxcdHJldHVybiBlcnJvcjtcXG40NjY0OlxcdFxcdH1cXG40NjY1OlxcdFxcdGlmICghKGZpbGUtXFx1MDAzZWZfbW9kZSBcXHUwMDI2IEZNT0RFX0NSRUFURUQpKVxcbjQ2NjY6XFx0XFx0XFx0YXVkaXRfaW5vZGUobmQtXFx1MDAzZW5hbWUsIG5kLVxcdTAwM2VwYXRoLmRlbnRyeSwgMCk7XFxuNDY2NzpcXHRcXHRpZG1hcCA9IG1udF9pZG1hcChuZC1cXHUwMDNlcGF0aC5tbnQpO1xcbjQ2Njg6XFx0XFx0aWYgKG9wZW5fZmxhZyBcXHUwMDI2IE9fQ1JFQVQpIHtcXG40NjY5OlxcdFxcdFxcdGlmICgob3Blbl9mbGFnIFxcdTAwMjYgT19FWENMKSBcXHUwMDI2XFx1MDAyNiAhKGZpbGUtXFx1MDAzZWZfbW9kZSBcXHUwMDI2IEZNT0RFX0NSRUFURUQpKVxcbjQ2NzA6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuNDY3MTpcXHRcXHRcXHRpZiAoZF9pc19kaXIobmQtXFx1MDAzZXBhdGguZGVudHJ5KSlcXG40NjcyOlxcdFxcdFxcdFxcdHJldHVybiAtRUlTRElSO1xcbjQ2NzM6XFx0XFx0XFx0ZXJyb3IgPSBtYXlfY3JlYXRlX2luX3N0aWNreShpZG1hcCwgbmQsXFxuNDY3NDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGRfYmFja2luZ19pbm9kZShuZC1cXHUwMDNlcGF0aC5kZW50cnkpKTtcXG40Njc1OlxcdFxcdFxcdGlmICh1bmxpa2VseShlcnJvcikpXFxuNDY3NjpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyb3I7XFxuNDY3NzpcXHRcXHR9XFxuNDY3ODpcXHRcXG40Njc5OlxcdFxcdGlmICgob3Blbl9mbGFnIFxcdTAwMjYgX19PX1JFR1VMQVIpIFxcdTAwMjZcXHUwMDI2ICFkX2lzX3JlZyhuZC1cXHUwMDNlcGF0aC5kZW50cnkpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODozOTo0OC45NzExNjI3NDVaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2ODU2MjQ3MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWZhY3RvcmluZyBvZiB0aGUgYGNyZWF0ZWAgSW5vZGUgT3BlcmF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGUgYGV4Y2xgIGFyZ3VtZW50IHBhc3NlZCB0byB0aGUgYGNyZWF0ZWAgaW5vZGUgb3BlcmF0aW9uLiBJbml0aWFsbHksIEkgdGhvdWdodCB0aGF0IGlmIGBsb29rdXBfb3BlbmAgcmV0dXJucyBgRUVYSVNUYCwgaXQgc2ltcGx5IHJldHVybnMgYEVFWElTVGAuIEJ1dCB3YWl0LCBpZiBgY3JlYXRlYCByZXR1cm5zIGBFRVhJU1RgLCBpdCBzdWdnZXN0cyBhIGNvbmN1cnJlbnQgY3JlYXRpb24uIElmIGBPX0VYQ0xgIHdhc24ndCBzZXQsIHRoZW4gYG9wZW5gIHNob3VsZG4ndCBmYWlsIHdpdGggYEVFWElTVGAgd2hlbiBvcGVuaW5nLiBIb3dldmVyLCBjb25zaWRlcmluZyB0aGF0IGBpbm9kZV9sb2NrKGRpci1cdTAwM2VkX2lub2RlKWAgaXMgaGVsZCB3aGVuIGBjcmVhdGVgIGlzIGNhbGxlZCBieSB0aGUgVkZTLCBubyBvdGhlciBwcm9jZXNzIG9uIHRoZSAqc2FtZSogbWFjaGluZSBjYW4gY29uY3VycmVudGx5IGNyZWF0ZSB0aGUgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuIFRoZSBgaW5vZGVfbG9jayhkaXItXHUwMDNlZF9pbm9kZSlgIGNvbmZpcm1zIHRoaXM7IHRoZSBsb29rdXAgYW5kIGNyZWF0aW9uIGFyZSBlZmZlY3RpdmVseSBhdG9taWMgZm9yIGxvY2FsIGZpbGVzeXN0ZW1zLlxuXG5UaGVuIHRoZSB0aG91Z2h0IGNyb3NzZWQgbXkgbWluZCwgd2hhdCBhYm91dCBhIG5ldHdvcmsgZmlsZXN5c3RlbSBhbmQgYSBmaWxlIGNyZWF0ZWQgY29uY3VycmVudGx5IGJ5IGFub3RoZXIgbWFjaGluZT8gSWYgaXQncyBhIG5ldHdvcmsgZmlsZXN5c3RlbSwgaXQgKnNob3VsZCogaW1wbGVtZW50IGBhdG9taWNfb3BlbmAuIE90aGVyd2lzZSwgaWYgaXQgZG9lc24ndCBpbXBsZW1lbnQgYGF0b21pY19vcGVuYCwgaXQgY2FuJ3QgaGFuZGxlIGNvbmN1cnJlbnQgY3JlYXRlcyBmcm9tIG90aGVyIG1hY2hpbmVzIHByb3Blcmx5IGFueXdheSwgb3IganVzdCByZXR1cm5zIGBFRVhJU1RgIGFuZCBmYWlscyB0aGUgb3Blbi5cblxuVGhlcmVmb3JlLCB0aGUgYGV4Y2xgIGFyZ3VtZW50IHRvIGBjcmVhdGVgIHdhcyBsYXJnZWx5IHBvaW50bGVzcyBmb3IgbG9jYWwgZmlsZXN5c3RlbXMgc2luY2UgdGhlIGBpbm9kZV9sb2NrYCBndWFyYW50ZWVzIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3Qgd2hlbiBgY3JlYXRlYCBpcyBjYWxsZWQuIE5ldHdvcmsgZmlsZXN5c3RlbXMgYXJlIHRoZSBvbmVzIHRoYXQgc2hvdWxkIHVzZSBgYXRvbWljX29wZW5gIHRvIGRlYWwgd2l0aCBjb25jdXJyZW5jeSBmcm9tIG90aGVyIG1hY2hpbmVzLiBUaGlzIHBlcmZlY3RseSBhbGlnbnMgd2l0aCB0aGUgcG9ydGluZyBkb2N1bWVudGF0aW9uJ3MgZ3VpZGFuY2U6IFwiLmNyZWF0ZSBpbm9kZV9vcGVyYXRpb24gbm8gbG9uZ2VyIHJlY2VpdmVzIHRoZSAnZXhjbCcgYXJnLiBJdCBtdXN0IGFsd2F5cyBhc3N1bWUgdGhlIGZpbGUgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4gSWYgdGhlIGZpbGVzeXN0ZW0gbmVlZHMgdG8gYmUgaW52b2x2ZWQgaW4gbm9uLWV4Y2x1c2l2ZSBjcmVhdGUsIGl0IHNob3VsZCBwcm92aWRlIGF0b21pY19vcGVuLlwiXG5cblNvLCB0aGlzIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZy4gSXQgZWxpbWluYXRlcyBhbiBhcmd1bWVudCB0aGF0IHdhcyBlc3NlbnRpYWxseSBhbHdheXMgYHRydWVgIChvciwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgc3VjaCkgZm9yIGxvY2FsIGZpbGVzeXN0ZW1zLCBhbmQgZm9yIG5ldHdvcmsgZmlsZXN5c3RlbXMgdGhleSBhcmUgc3VwcG9zZWQgdG8gdXNlIGBhdG9taWNfb3BlbmAgdG8gaGFuZGxlIGNvbmN1cnJlbmN5LiBUaGUgY2hhbmdlcyBhcmUgbGFyZ2VseSBjb3NtZXRpYy4gRG9lcyB0aGlzIGludHJvZHVjZSBhbnkgbmV3IGZ1bmN0aW9uYWwgbG9naWMgdGhhdCB3b3VsZCBuZWVkIGZ1enppbmc/IE5vLiBJdCdzIHNpbXBseSByZW1vdmluZyBhIHJlZHVuZGFudCBhcmd1bWVudCBmcm9tIGEgVkZTIGNhbGxiYWNrIGFuZCB1cGRhdGluZyBhbGwgdGhlIGZpbGVzeXN0ZW1zIHRvIGZpdCB0aGUgbmV3IHNpZ25hdHVyZS4gVGhlIHVuZGVybHlpbmcgbG9naWMgb2YgdGhlIGZpbGVzeXN0ZW1zIHJlbWFpbnMgdW5jaGFuZ2VkOyB0aGV5IHNpbXBseSBkcm9wIHRoZSBgZXhjbGAgYXJndW1lbnQuIEZvciBpbnN0YW5jZSwgYGV4dDRfY3JlYXRlYCwgYGJ0cmZzX2NyZWF0ZWAgYW5kIGB2ZnNfY3JlYXRlYCBhbGwganVzdCBkcm9wcGVkIHRoZSBgZXhjbGAgYXJndW1lbnQuIGBsb29rdXBfb3BlbmAgYWxzbyBkcm9wcGVkIGBvcGVuX2ZsYWcgXHUwMDI2IE9fRVhDTGAuXG5cbkxldCdzIGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZSBubyBmaWxlc3lzdGVtIHVuZXhwZWN0ZWRseSBjaGFuZ2VkIGl0cyBiZWhhdmlvci4gYGdmczJfY3JlYXRlYCBub3cgcGFzc2VzIGAxYCBpbnN0ZWFkIG9mIGBleGNsYCwgYnV0IHNpbmNlIGBnZnMyYCBpbXBsZW1lbnRzIGBhdG9taWNfb3BlbmAsIGBnZnMyX2NyZWF0ZWAgaXMgb25seSBjYWxsZWQgYnkgYHZmc19jcmVhdGVgICh3aGljaCBhbHdheXMgcGFzc2VkIGB0cnVlYCBiZWZvcmUpIG9yIGJ5IGBsb29rdXBfb3BlbmAgaWYgYGF0b21pY19vcGVuYCBpcyBub3QgdXNlZCAoYnV0IGl0IGlzIHVzZWQpLiBUaGVuIEkgcmVtZW1iZXJlZCB0aGF0IGB2ZnNfY3JlYXRlYCBpcyBjYWxsZWQgYnkgYG1rbm9kYCBhbmQgYG9wZW4oT19DUkVBVClgIGlmIGBhdG9taWNfb3BlbmAgaXMgbm90IHVzZWQuIEhvd2V2ZXIsIGBvcGVuYCB1c2VzIGBsb29rdXBfb3BlbmAsIHNvIEknbSBjb3ZlcmVkLiBBbmQgYHZmc19jcmVhdGVgIGlzIGEgc2VwYXJhdGUgZnVuY3Rpb24sIHNvIEknbSBub3QgY29uZnVzaW5nIHRoaXMgd2l0aCBgdmZzX21rbm9kYC4gVGhpcyBjb25maXJtcyB0aGF0IHRoaXMgaXMgdHJ1bHkganVzdCBhIGNsZWFudXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1ODU2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTg6Mzk6NTkuNjU2NzkxMDg0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTM3MjE3MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZzX2NyZWF0ZVxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy85cC92ZnNfaW5vZGUuYz02NTQ9c3RhdGljIGludFxcbmZzLzlwL3Zmc19pbm9kZS5jOjY1NTp2OWZzX3Zmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbmZzLzlwL3Zmc19pbm9kZS5jLTY1Ni1cXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcXG4tLVxcbmZzL2VjcnlwdGZzL2lub2RlLmM9MTg1PWVjcnlwdGZzX2RvX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpcmVjdG9yeV9pbm9kZSxcXG4tLVxcbmZzL2VjcnlwdGZzL2lub2RlLmMtMTk2LVxcdGxvd2VyX2RpciA9IGxvd2VyX2RlbnRyeS1cXHUwMDNlZF9wYXJlbnQtXFx1MDAzZWRfaW5vZGU7XFxuZnMvZWNyeXB0ZnMvaW5vZGUuYzoxOTc6XFx0cmMgPSB2ZnNfY3JlYXRlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBsb3dlcl9kZW50cnksIG1vZGUsIE5VTEwpO1xcbmZzL2VjcnlwdGZzL2lub2RlLmMtMTk4LVxcdGlmIChyYykge1xcbi0tXFxuZnMvbGliZnMuYz0yMjY3PXZvaWQgc3Rhc2hlZF9kZW50cnlfcHJ1bmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbi0tXFxuZnMvbGliZnMuYy0yMjkzLSAqXFxuZnMvbGliZnMuYzoyMjk0OiAqIFJldHVybnM6IGEgbmVnYXRpdmUgZGVudHJ5IG9uIHdoaWNoIHZmc19jcmVhdGUoKSBvciBzaW1pbGFyIG1heVxcbmZzL2xpYmZzLmMtMjI5NS0gKiAgYmUgYXR0ZW1wdGVkLCBvciBhbiBlcnJvci5cXG4tLVxcbmZzL25hbWVpLmM9NDE1MD1zdGF0aWMgaW5saW5lIHVtb2RlX3QgdmZzX3ByZXBhcmVfbW9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL25hbWVpLmMtNDE4MS0gKi9cXG5mcy9uYW1laS5jOjQxODI6aW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxcbmZzL25hbWVpLmMtNDE4My1cXHQgICAgICAgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqZGkpXFxuLS1cXG5mcy9uYW1laS5jPTUwMjI9c3RydWN0IGZpbGUgKmRlbnRyeV9jcmVhdGUoc3RydWN0IHBhdGggKnBhdGgsIGludCBmbGFncywgdW1vZGVfdCBtb2RlLFxcbi0tXFxuZnMvbmFtZWkuYy01MDcxLVxcdH0gZWxzZSB7XFxuZnMvbmFtZWkuYzo1MDcyOlxcdFxcdGVycm9yID0gdmZzX2NyZWF0ZShtbnRfaWRtYXAocGF0aC1cXHUwMDNlbW50KSwgcGF0aC1cXHUwMDNlZGVudHJ5LCBtb2RlLCBOVUxMKTtcXG5mcy9uYW1laS5jLTUwNzMtXFx0XFx0aWYgKCFlcnJvcilcXG4tLVxcbmZzL25hbWVpLmM9NTE1ND1pbnQgZmlsZW5hbWVfbWtub2RhdChpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsIHVtb2RlX3QgbW9kZSxcXG4tLVxcbmZzL25hbWVpLmMtNTE3OS1cXHRcXHRjYXNlIDA6IGNhc2UgU19JRlJFRzpcXG5mcy9uYW1laS5jOjUxODA6XFx0XFx0XFx0ZXJyb3IgPSB2ZnNfY3JlYXRlKGlkbWFwLCBkZW50cnksIG1vZGUsIFxcdTAwMjZkaSk7XFxuZnMvbmFtZWkuYy01MTgxLVxcdFxcdFxcdGlmICghZXJyb3IpXFxuLS1cXG5mcy9uZnNkL25mczNwcm9jLmM9MjUzPW5mc2QzX2NyZWF0ZV9maWxlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmZocCxcXG4tLVxcbmZzL25mc2QvbmZzM3Byb2MuYy0yNjUtXFxuZnMvbmZzZC9uZnMzcHJvYy5jOjI2NjpcXHR0cmFjZV9uZnNkX3Zmc19jcmVhdGUocnFzdHAsIGZocCwgU19JRlJFRywgYXJncC1cXHUwMDNlbmFtZSwgYXJncC1cXHUwMDNlbGVuKTtcXG5mcy9uZnNkL25mczNwcm9jLmMtMjY3LVxcbi0tXFxuZnMvbmZzZC9uZnMzcHJvYy5jLTM0My1cXHRcXHRnb3RvIG91dDtcXG5mcy9uZnNkL25mczNwcm9jLmM6MzQ0OlxcdGhvc3RfZXJyID0gdmZzX2NyZWF0ZShcXHUwMDI2bm9wX21udF9pZG1hcCwgY2hpbGQsIGlhcC1cXHUwMDNlaWFfbW9kZSwgTlVMTCk7XFxuZnMvbmZzZC9uZnMzcHJvYy5jLTM0NS1cXHRpZiAoaG9zdF9lcnIgXFx1MDAzYyAwKSB7XFxuLS1cXG5mcy9uZnNkL25mczRwcm9jLmM9MjA0PXN0YXRpYyBfX2JlMzJcXG5mcy9uZnNkL25mczRwcm9jLmM6MjA1Om5mc2Q0X3Zmc19jcmVhdGUoc3RydWN0IHN2Y19maCAqZmhwLCBzdHJ1Y3QgZGVudHJ5ICoqY2hpbGQsXFxuZnMvbmZzZC9uZnM0cHJvYy5jLTIwNi1cXHRcXHQgc3RydWN0IG5mc2Q0X29wZW4gKm9wZW4pXFxuLS1cXG5mcy9uZnNkL25mczRwcm9jLmM9MjQ4PW5mc2Q0X2NyZWF0ZV9maWxlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmZocCxcXG4tLVxcbmZzL25mc2QvbmZzNHByb2MuYy0zODEtXFx0XFx0Z290byBvdXQ7XFxuZnMvbmZzZC9uZnM0cHJvYy5jOjM4MjpcXHRzdGF0dXMgPSBuZnNkNF92ZnNfY3JlYXRlKGZocCwgXFx1MDAyNmNoaWxkLCBvcGVuKTtcXG5mcy9uZnNkL25mczRwcm9jLmMtMzgzLVxcdGlmIChzdGF0dXMgIT0gbmZzX29rKVxcbi0tXFxuZnMvbmZzZC92ZnMuYz0xNzI3PW5mc2RfY3JlYXRlX3NldGF0dHIoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqZmhwLFxcbi0tXFxuZnMvbmZzZC92ZnMuYy0xNzc3LSAqXFxuZnMvbmZzZC92ZnMuYzoxNzc4OiAqIGNhbGwgdGhpcyBvbmx5IGFmdGVyIHZmc19jcmVhdGUoKSBpcyBjYWxsZWQuXFxuZnMvbmZzZC92ZnMuYy0xNzc5LSAqICovXFxuLS1cXG5mcy9uZnNkL3Zmcy5jPTE3ODk9bmZzZF9jcmVhdGVfbG9ja2VkKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmZocCxcXG4tLVxcbmZzL25mc2QvdmZzLmMtMTgxNy1cXHRjYXNlIFNfSUZSRUc6XFxuZnMvbmZzZC92ZnMuYzoxODE4OlxcdFxcdGhvc3RfZXJyID0gdmZzX2NyZWF0ZShcXHUwMDI2bm9wX21udF9pZG1hcCwgZGNoaWxkLCBpYXAtXFx1MDAzZWlhX21vZGUsIE5VTEwpO1xcbmZzL25mc2QvdmZzLmMtMTgxOS1cXHRcXHRpZiAoIWhvc3RfZXJyKVxcbi0tXFxuZnMvbmZzZC92ZnMuYz0xODY5PW5mc2RfY3JlYXRlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmZocCxcXG4tLVxcbmZzL25mc2QvdmZzLmMtMTg3Ni1cXG5mcy9uZnNkL3Zmcy5jOjE4Nzc6XFx0dHJhY2VfbmZzZF92ZnNfY3JlYXRlKHJxc3RwLCBmaHAsIHR5cGUsIGZuYW1lLCBmbGVuKTtcXG5mcy9uZnNkL3Zmcy5jLTE4NzgtXFxuLS1cXG5mcy9vdmVybGF5ZnMvb3ZlcmxheWZzLmg9MjQwPXN0YXRpYyBpbmxpbmUgaW50IG92bF9kb19jcmVhdGUoc3RydWN0IG92bF9mcyAqb2ZzLFxcbi0tXFxuZnMvb3ZlcmxheWZzL292ZXJsYXlmcy5oLTI0My17XFxuZnMvb3ZlcmxheWZzL292ZXJsYXlmcy5oOjI0NDpcXHRpbnQgZXJyID0gdmZzX2NyZWF0ZShvdmxfdXBwZXJfbW50X2lkbWFwKG9mcyksIGRlbnRyeSwgbW9kZSwgTlVMTCk7XFxuZnMvb3ZlcmxheWZzL292ZXJsYXlmcy5oLTI0NS1cXG4tLVxcbmZzL3NtYi9zZXJ2ZXIvc21iMnBkdS5jPTI3OTg9c3RhdGljIGludCBzbWIyX2NyZWF0KHN0cnVjdCBrc21iZF93b3JrICp3b3JrLFxcbi0tXFxuZnMvc21iL3NlcnZlci9zbWIycGR1LmMtMjgyMS1cXHRcXHRtb2RlID0gc2hhcmVfY29uZmlnX2NyZWF0ZV9tb2RlKHNoYXJlLCBwb3NpeF9tb2RlKTtcXG5mcy9zbWIvc2VydmVyL3NtYjJwZHUuYzoyODIyOlxcdFxcdHJjID0ga3NtYmRfdmZzX2NyZWF0ZSh3b3JrLCBuYW1lLCBtb2RlKTtcXG5mcy9zbWIvc2VydmVyL3NtYjJwZHUuYy0yODIzLVxcdFxcdGlmIChyYylcXG4tLVxcbmZzL3NtYi9zZXJ2ZXIvdmZzLmM9MTE2PXZvaWQga3NtYmRfdmZzX3F1ZXJ5X21heGltYWxfYWNjZXNzKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvc21iL3NlcnZlci92ZnMuYy0xMzctLyoqXFxuZnMvc21iL3NlcnZlci92ZnMuYzoxMzg6ICoga3NtYmRfdmZzX2NyZWF0ZSgpIC0gdmZzIGhlbHBlciBmb3Igc21iIGNyZWF0ZSBmaWxlXFxuZnMvc21iL3NlcnZlci92ZnMuYy0xMzktICogQHdvcms6XFx0d29ya1xcbi0tXFxuZnMvc21iL3NlcnZlci92ZnMuYy0xNDQtICovXFxuZnMvc21iL3NlcnZlci92ZnMuYzoxNDU6aW50IGtzbWJkX3Zmc19jcmVhdGUoc3RydWN0IGtzbWJkX3dvcmsgKndvcmssIGNvbnN0IGNoYXIgKm5hbWUsIHVtb2RlX3QgbW9kZSlcXG5mcy9zbWIvc2VydmVyL3Zmcy5jLTE0Ni17XFxuLS1cXG5mcy9zbWIvc2VydmVyL3Zmcy5jLTE2MS1cXHRtb2RlIHw9IFNfSUZSRUc7XFxuZnMvc21iL3NlcnZlci92ZnMuYzoxNjI6XFx0ZXJyID0gdmZzX2NyZWF0ZShtbnRfaWRtYXAocGF0aC5tbnQpLCBkZW50cnksIG1vZGUsIE5VTEwpO1xcbmZzL3NtYi9zZXJ2ZXIvdmZzLmMtMTYzLVxcdGlmICghZXJyKSB7XFxuLS1cXG5mcy9zbWIvc2VydmVyL3Zmcy5oPTc2PXZvaWQga3NtYmRfdmZzX3F1ZXJ5X21heGltYWxfYWNjZXNzKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbmZzL3NtYi9zZXJ2ZXIvdmZzLmgtNzctXFx0XFx0XFx0XFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBfX2xlMzIgKmRhY2Nlc3MpO1xcbmZzL3NtYi9zZXJ2ZXIvdmZzLmg6Nzg6aW50IGtzbWJkX3Zmc19jcmVhdGUoc3RydWN0IGtzbWJkX3dvcmsgKndvcmssIGNvbnN0IGNoYXIgKm5hbWUsIHVtb2RlX3QgbW9kZSk7XFxuZnMvc21iL3NlcnZlci92ZnMuaC03OS1pbnQga3NtYmRfdmZzX21rZGlyKHN0cnVjdCBrc21iZF93b3JrICp3b3JrLCBjb25zdCBjaGFyICpuYW1lLCB1bW9kZV90IG1vZGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODozOTo1OS44NzA1MTk2MjNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM4MzMwNzQxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWx2aW5nIGludG8gdGhlIEtlcm5lbCdzIEZpbGUgU3lzdGVtIENyZWF0aW9uIE1lY2hhbmlzbXMqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgb3JpZ2lucyBvZiBgdmZzX2NyZWF0ZWAuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBpdCdzIGNhbGxlZCBieSBgZmlsZW5hbWVfbWtub2RhdGAsIHdoaWNoIGlzIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIGZvciB0aGUgYG1rbm9kYCBzeXN0ZW0gY2FsbC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBCdXQgdGhlbiBJIHN0YXJ0ZWQgdGhpbmtpbmcgYWJvdXQgYGRlbnRyeV9jcmVhdGVgLiBNeSBtZW1vcnkgaXMgYSBiaXQgZnV6enkgb24gdGhpcywgYW5kIEkgbmVlZCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nLiBJIGluaXRpYWxseSBjb25zaWRlcmVkIGlmIGBkZW50cnlfY3JlYXRlYCB3YXMgaW52b2x2ZWQgaW4gYG9wZW5gIGluIHNvbWUgY2FzZXMg4oCTIHRoYXQgZmVlbHMgd3JvbmcuIEFoLCByaWdodCEgSSByZWNhbGwgYGRlbnRyeV9jcmVhdGVgIGlzIHVzZWQgYnkgYHBhdGhfb3BlbmF0YC4gV2FpdCwgbm8gdGhhdCBpc24ndCBjb3JyZWN0LiBJIGtub3cgSSBoYXZlIHNlZW4gaXQgaW4gb3RoZXIgY29kZSBwYXRocy4gT2theSwgbGV0IG1lIHRoaW5rLiBBaCEgYGNhY2hlZmlsZXNgLCBgb3ZlcmxheWZzYCwgYG5mc2RgLCBhbmQgYGtzbWJkYCBhbGwgdXNlIGBkZW50cnlfY3JlYXRlYC4gVGhvc2UgYXJlIGFsbCBpbnRlcmVzdGluZyB1c2UgY2FzZXMuIGBjYWNoZWZpbGVzYCwgbm93IHRoYXQncyBpbnRyaWd1aW5nLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBvZiBgY2FjaGVmaWxlc2AgYW5kIHRoZSBkaXJlY3RvcnkgZW50cnkgY2FjaGUuIEknZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBjb2RlIHRvIGNvbmZpcm0gaWYgbXkgdW5kZXJzdGFuZGluZyBpcyBjb3JyZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTU4NCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODo0MDowNC4yNTM4MzAxNloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0NzEyMTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlbnRyeV9jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25hbWVpLmM9NTAwMz1FWFBPUlRfU1lNQk9MKHN0YXJ0X2NyZWF0aW5nX3VzZXJfcGF0aCk7XFxuLS1cXG5mcy9uYW1laS5jLTUwMDUtLyoqXFxuZnMvbmFtZWkuYzo1MDA2OiAqIGRlbnRyeV9jcmVhdGUgLSBDcmVhdGUgYW5kIG9wZW4gYSBmaWxlXFxuZnMvbmFtZWkuYy01MDA3LSAqIEBwYXRoOiBwYXRoIHRvIGNyZWF0ZVxcbi0tXFxuZnMvbmFtZWkuYy01MDIxLSAqL1xcbmZzL25hbWVpLmM6NTAyMjpzdHJ1Y3QgZmlsZSAqZGVudHJ5X2NyZWF0ZShzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUsXFxuZnMvbmFtZWkuYy01MDIzLVxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKVxcbi0tXFxuZnMvbmFtZWkuYy01MDgwLX1cXG5mcy9uYW1laS5jOjUwODE6RVhQT1JUX1NZTUJPTChkZW50cnlfY3JlYXRlKTtcXG5mcy9uYW1laS5jLTUwODItXFxuLS1cXG5mcy9uZnNkL25mczRwcm9jLmM9MjA1PW5mc2Q0X3Zmc19jcmVhdGUoc3RydWN0IHN2Y19maCAqZmhwLCBzdHJ1Y3QgZGVudHJ5ICoqY2hpbGQsXFxuLS1cXG5mcy9uZnNkL25mczRwcm9jLmMtMjI4LVxcdHBhdGguZGVudHJ5ID0gKmNoaWxkO1xcbmZzL25mc2QvbmZzNHByb2MuYzoyMjk6XFx0ZmlscCA9IGRlbnRyeV9jcmVhdGUoXFx1MDAyNnBhdGgsIG9mbGFncywgb3Blbi1cXHUwMDNlb3BfaWF0dHIuaWFfbW9kZSxcXG5mcy9uZnNkL25mczRwcm9jLmMtMjMwLVxcdFxcdFxcdCAgICAgY3VycmVudF9jcmVkKCkpO1xcbi0tXFxuZnMvb3ZlcmxheWZzL2Rpci5jPTU5OT1zdGF0aWMgY29uc3Qgc3RydWN0IGNyZWQgKm92bF9vdmVycmlkZV9jcmVhdG9yX2NyZWRzKGNvbnN0IHN0cnVjdCBjcmVkICpvcmlnaW5hbF9jcmVkcyxcXG4tLVxcbmZzL292ZXJsYXlmcy9kaXIuYy02MTMtXFxuZnMvb3ZlcmxheWZzL2Rpci5jOjYxNDpcXHRlcnIgPSBzZWN1cml0eV9kZW50cnlfY3JlYXRlX2ZpbGVzX2FzKGRlbnRyeSwgbW9kZSwgXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9uYW1lLFxcbmZzL292ZXJsYXlmcy9kaXIuYy02MTUtXFx0XFx0XFx0XFx0XFx0ICAgICAgb3JpZ2luYWxfY3JlZHMsIG92ZXJyaWRlX2NyZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODo0MDowNC40NTg1NDgzNloiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjA1OTY2MjMyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlZHVuZGFudCAnZXhjbCcgQXJndW1lbnQgaW4gYHZmc19jcmVhdGVgKipcblxuUmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgYG5mc2RgIHVzZXMgYGRlbnRyeV9jcmVhdGVgIGFuZCBib3RoIGBuZnNkYCwgYGtzbWJkYCwgYG92ZXJsYXlmc2AsIGBlY3J5cHRmc2AsIGFuZCBgbWtub2RgIHVzZSBgdmZzX2NyZWF0ZWAuIEFuZCBiZWZvcmUgdGhpcyBwYXRjaCwgdGhleSB3ZXJlICphbGwqIHBhc3NpbmcgYHRydWVgIHRvIGB2ZnNfY3JlYXRlYCBmb3IgdGhlIGBleGNsYCBhcmd1bWVudC4gIFdhaXQsIGhvbGQgb24sIHdhc24ndCBgdmZzX2NyZWF0ZWAncyBzaWduYXR1cmUgZGlmZmVyZW50IGJlZm9yZSB0aGUgcGF0Y2g/IExldCBtZSBjaGVja+KApiBZZWFoLCBgaW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIHdhbnRfZXhjbClgLiBCdXQgdGhlIHBhdGNoIGRpZmYgaW4gYGZzL25hbWVpLmNgIHNob3dzIHRoZSBgdmZzX2NyZWF0ZWAgY2FsbCBjaGFuZ2UhIEl0J3Mgbm90IHRha2luZyB0aGF0IGFyZ3VtZW50IGF0IGFsbCBub3chIEl0IHdhcyAqYWx3YXlzKiBwYXNzaW5nIGB0cnVlYCFcblxuU28sIHRoZSBvcmlnaW5hbCBgdmZzX2NyZWF0ZWAgaW1wbGVtZW50YXRpb24gZGlkbid0IGV2ZW4gKmhhdmUqIHRoYXQgYHdhbnRfZXhjbGAgYXJndW1lbnQuIEl0IHdhcyBqdXN0IGltcGxpY2l0bHkgcGFzc2luZyBgdHJ1ZWAgdG8gYGRpci1cdTAwM2VpX29wLVx1MDAzZWNyZWF0ZWAuIE1lYW53aGlsZSwgYGxvb2t1cF9vcGVuYCB3YXMgdGFraW5nIHRoZSBgb3Blbl9mbGFnIFx1MDAyNiBPX0VYQ0xgIHZhbHVlLlxuXG5TbywgdGhlICpvbmx5KiBwbGFjZSB0aGUgYGV4Y2xgIHZhbHVlIGNvdWxkIGJlIGBmYWxzZWAgd2FzIGluIGBsb29rdXBfb3BlbmAgaWYgYE9fRVhDTGAgd2Fzbid0IHNldC4gIEFuZCBjcml0aWNhbGx5LCB3aGVuIGBsb29rdXBfb3BlbmAgaXMgY2FsbGVkLCB0aGUgVkZTIGlzIGhvbGRpbmcgYGlub2RlX2xvY2soZGlyLVx1MDAzZWRfaW5vZGUpYC4gVGhpcyBtZWFucyBjb25jdXJyZW50IGNyZWF0aW9uIG9uIHRoZSBzYW1lIG1hY2hpbmUgaXMgaW1wb3NzaWJsZS4gIElmIGl0J3MgYSBsb2NhbCBmaWxlc3lzdGVtLCBgY3JlYXRlYCBqdXN04oCmIGNyZWF0ZXMgdGhlIGZpbGUuIFRoZSBgZXhjbGAgYXJndW1lbnQgaXMgaXJyZWxldmFudCwgc2luY2UgdGhlIGZpbGUgZG9lc24ndCBleGlzdCB5ZXQgYW55d2F5ISAgSWYgaXQncyBhIG5ldHdvcmsgZmlsZXN5c3RlbSwgaXQgKnNob3VsZCogYmUgdXNpbmcgYGF0b21pY19vcGVuYCB0byBoYW5kbGUgY29uY3VycmVudCBjcmVhdGlvbnMgZnJvbSBkaWZmZXJlbnQgbWFjaGluZXMuIElmIGl0IGRvZXNuJ3QsIGl0IGp1c3QgY2FsbHMgYGNyZWF0ZWAsIGFuZCBpZiBpdCBmYWlscyB3aXRoIGBFRVhJU1RgLCBgbG9va3VwX29wZW5gIHJldHVybnMgYEVFWElTVGAuIChXaGljaCBpcyBpbmNvcnJlY3QgZm9yIGEgbm9uLWV4Y2x1c2l2ZSBjcmVhdGlvbiwgYnV0IHRoYXQncyBhIGZpbGVzeXN0ZW0gYnVnIGZvciBub3QgaW1wbGVtZW50aW5nIGBhdG9taWNfb3BlbmApLlxuXG5UaGVyZWZvcmUsIHRoYXQgYGV4Y2xgIGFyZ3VtZW50IHRvIGBjcmVhdGVgIHdhcyBlbnRpcmVseSByZWR1bmRhbnQuIEl0J3MgdXNlbGVzcy4gVGhhdCdzIHdoeSBpdCB3YXMgcmVtb3ZlZC4gIE5vIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgbmVlZGVkIHRvIGJlIGZ1enplZCBoZXJlOyBpdCdzIGEgcHVyZSBBUEkgcmVmYWN0b3JpbmcsIHJlbW92aW5nIGEgdXNlbGVzcyBhcmd1bWVudC4gVGhlIGtlcm5lbCdzICpiZWhhdmlvciogaXMgZXhhY3RseSB0aGUgc2FtZSBhcyBiZWZvcmUuXG5cblRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCBmaWxlc3lzdGVtcyB0aGF0IHByZXZpb3VzbHkgKmNoZWNrZWQqIHRoYXQgYGV4Y2xgIHZhbHVlIOKAkyBsaWtlIGBnZnMyYCwgYG5mc2AsIGFuZCBgdmJveHNmYCDigJMgYXJlIG5vdyBqdXN0IGhhcmRjb2RpbmcgYDFgLCBgT19FWENMYCwgb3IgYHRydWVgIGluIHRoZWlyIGludGVybmFsIGNhbGxzIHdoZW4gY2FsbGVkIGZyb20gYGNyZWF0ZWAuXG5cbldhaXQsIGJ1dCBgZ2ZzMl9jcmVhdGVgIG5vdyBwYXNzZXMgYDFgIHRvIGBnZnMyX2NyZWF0ZV9pbm9kZWAuIFByZXZpb3VzbHksIGl0IHBhc3NlZCBgZXhjbGAuIGBnZnMyX2NyZWF0ZWAgd2FzICpvbmx5KiBjYWxsZWQgZnJvbSBgdmZzX2NyZWF0ZWAgKHdoaWNoIHBhc3NlZCBgdHJ1ZWApIG9yIGBsb29rdXBfb3BlbmAgKHdoaWNoIHBhc3NlZCBgb3Blbl9mbGFnIFx1MDAyNiBPX0VYQ0xgKS4gQWghICBJZiBgbG9va3VwX29wZW5gIHBhc3NlZCBgb3Blbl9mbGFnIFx1MDAyNiBPX0VYQ0xgIHRvIGBnZnMyX2NyZWF0ZWAgYW5kIGBPX0VYQ0xgIHdhcyAqbm90KiBzZXQsIGBnZnMyX2NyZWF0ZWAgd291bGQgcmVjZWl2ZSBgZmFsc2VgLiBUaGVuIGl0IHdvdWxkIHBhc3MgYDBgIHRvIGBnZnMyX2NyZWF0ZV9pbm9kZWAuIE5vdywgaXQgYWx3YXlzIHBhc3NlcyBgMWAuIERvZXMgYGdmczJfY3JlYXRlX2lub2RlYCBiZWhhdmUgZGlmZmVyZW50bHkgaWYgYGV4Y2xgIGlzIGAxYCB2ZXJzdXMgYDBgPyBMZXQncyBjaGVjayBgZ2ZzMl9jcmVhdGVfaW5vZGVg4oCmXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNDU2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE4OjQwOjE2LjUxODIxNTY0NVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDIzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZ2ZzMi9pbm9kZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MDA6XFx0c3RhdGljIGludCBnZnMyX2NyZWF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiA3MDE6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gNzAyOlxcdFxcdFxcdFxcdCAgICAgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYsIGNvbnN0IGNoYXIgKnN5bW5hbWUsXFxuIDcwMzpcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBzaXplLCBpbnQgZXhjbClcXG4gNzA0OlxcdHtcXG4gNzA1OlxcdFxcdGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lID0gXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9uYW1lO1xcbiA3MDY6XFx0XFx0c3RydWN0IHBvc2l4X2FjbCAqZGVmYXVsdF9hY2wsICphY2w7XFxuIDcwNzpcXHRcXHRzdHJ1Y3QgZ2ZzMl9ob2xkZXIgZF9naCwgZ2g7XFxuIDcwODpcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDtcXG4gNzA5OlxcdFxcdHN0cnVjdCBnZnMyX2lub2RlICpkaXAgPSBHRlMyX0koZGlyKSwgKmlwO1xcbiA3MTA6XFx0XFx0c3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKFxcdTAwMjZkaXAtXFx1MDAzZWlfaW5vZGUpO1xcbiA3MTE6XFx0XFx0c3RydWN0IGdmczJfZ2xvY2sgKmlvX2dsO1xcbiA3MTI6XFx0XFx0aW50IGVycm9yLCBkZWFsbG9jX2Vycm9yO1xcbiA3MTM6XFx0XFx0dTMyIGFmbGFncyA9IDA7XFxuIDcxNDpcXHRcXHR1bnNpZ25lZCBibG9ja3MgPSAxO1xcbiA3MTU6XFx0XFx0c3RydWN0IGdmczJfZGlyYWRkIGRhID0geyAuYmggPSBOVUxMLCAuc2F2ZV9sb2MgPSAxLCB9O1xcbiA3MTY6XFx0XFx0Ym9vbCB4YXR0cl9pbml0aWFsaXplZCA9IGZhbHNlO1xcbiA3MTc6XFx0XFxuIDcxODpcXHRcXHRpZiAoIW5hbWUtXFx1MDAzZWxlbiB8fCBuYW1lLVxcdTAwM2VsZW4gXFx1MDAzZSBHRlMyX0ZOQU1FU0laRSlcXG4gNzE5OlxcdFxcdFxcdHJldHVybiAtRU5BTUVUT09MT05HO1xcbiA3MjA6XFx0XFxuIDcyMTpcXHRcXHRlcnJvciA9IGdmczJfcWFfZ2V0KGRpcCk7XFxuIDcyMjpcXHRcXHRpZiAoZXJyb3IpXFxuIDcyMzpcXHRcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIDcyNDpcXHRcXG4gNzI1OlxcdFxcdGVycm9yID0gZ2ZzMl9yaW5kZXhfdXBkYXRlKHNkcCk7XFxuIDcyNjpcXHRcXHRpZiAoZXJyb3IpXFxuIDcyNzpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuIDcyODpcXHRcXG4gNzI5OlxcdFxcdGVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KGRpcC1cXHUwMDNlaV9nbCwgTE1fU1RfRVhDTFVTSVZFLCAwLCBcXHUwMDI2ZF9naCk7XFxuIDczMDpcXHRcXHRpZiAoZXJyb3IpXFxuIDczMTpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuIDczMjpcXHRcXHRnZnMyX2hvbGRlcl9tYXJrX3VuaW5pdGlhbGl6ZWQoXFx1MDAyNmdoKTtcXG4gNzMzOlxcdFxcbiA3MzQ6XFx0XFx0ZXJyb3IgPSBjcmVhdGVfb2soZGlwLCBuYW1lLCBtb2RlKTtcXG4gNzM1OlxcdFxcdGlmIChlcnJvcilcXG4gNzM2OlxcdFxcdFxcdGdvdG8gZmFpbF9ndW5sb2NrO1xcbiA3Mzc6XFx0XFxuIDczODpcXHRcXHRpbm9kZSA9IGdmczJfZGlyX3NlYXJjaChkaXIsIFxcdTAwMjZkZW50cnktXFx1MDAzZWRfbmFtZSwgIVNfSVNSRUcobW9kZSkgfHwgZXhjbCk7XFxuIDczOTpcXHRcXHRlcnJvciA9IFBUUl9FUlIoaW5vZGUpO1xcbiA3NDA6XFx0XFx0aWYgKCFJU19FUlIoaW5vZGUpKSB7XFxuIDc0MTpcXHRcXHRcXHRpZiAoZmlsZSBcXHUwMDI2XFx1MDAyNiAoZmlsZS1cXHUwMDNlZl9mbGFncyBcXHUwMDI2IF9fT19SRUdVTEFSKSBcXHUwMDI2XFx1MDAyNlxcbiA3NDI6XFx0XFx0XFx0ICAgICFTX0lTUkVHKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuIDc0MzpcXHRcXHRcXHRcXHRpcHV0KGlub2RlKTtcXG4gNzQ0OlxcdFxcdFxcdFxcdGlub2RlID0gTlVMTDtcXG4gNzQ1OlxcdFxcdFxcdFxcdGVycm9yID0gLUVGVFlQRTtcXG4gNzQ2OlxcdFxcdFxcdFxcdGdvdG8gZmFpbF9ndW5sb2NrO1xcbiA3NDc6XFx0XFx0XFx0fVxcbiA3NDg6XFx0XFx0XFx0aWYgKFNfSVNESVIoaW5vZGUtXFx1MDAzZWlfbW9kZSkpIHtcXG4gNzQ5OlxcdFxcdFxcdFxcdGlwdXQoaW5vZGUpO1xcbiA3NTA6XFx0XFx0XFx0XFx0aW5vZGUgPSBOVUxMO1xcbiA3NTE6XFx0XFx0XFx0XFx0ZXJyb3IgPSAtRUlTRElSO1xcbiA3NTI6XFx0XFx0XFx0XFx0Z290byBmYWlsX2d1bmxvY2s7XFxuIDc1MzpcXHRcXHRcXHR9XFxuIDc1NDpcXHRcXHRcXHRkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpO1xcbiA3NTU6XFx0XFx0XFx0ZXJyb3IgPSAwO1xcbiA3NTY6XFx0XFx0XFx0aWYgKGZpbGUpIHtcXG4gNzU3OlxcdFxcdFxcdFxcdGlmIChTX0lTUkVHKGlub2RlLVxcdTAwM2VpX21vZGUpKVxcbiA3NTg6XFx0XFx0XFx0XFx0XFx0ZXJyb3IgPSBmaW5pc2hfb3BlbihmaWxlLCBkZW50cnksIGdmczJfb3Blbl9jb21tb24pO1xcbiA3NTk6XFx0XFx0XFx0XFx0ZWxzZVxcbiA3NjA6XFx0XFx0XFx0XFx0XFx0ZXJyb3IgPSBmaW5pc2hfbm9fb3BlbihmaWxlLCBOVUxMKTtcXG4gNzYxOlxcdFxcdFxcdH1cXG4gNzYyOlxcdFxcdFxcdGdmczJfZ2xvY2tfZHFfdW5pbml0KFxcdTAwMjZkX2doKTtcXG4gNzYzOlxcdFxcdFxcdGdvdG8gZmFpbDtcXG4gNzY0OlxcdFxcdH0gZWxzZSBpZiAoZXJyb3IgIT0gLUVOT0VOVCkge1xcbiA3NjU6XFx0XFx0XFx0Z290byBmYWlsX2d1bmxvY2s7XFxuIDc2NjpcXHRcXHR9XFxuIDc2NzpcXHRcXG4gNzY4OlxcdFxcdGVycm9yID0gZ2ZzMl9kaXJhZGRfYWxsb2NfcmVxdWlyZWQoZGlyLCBuYW1lLCBcXHUwMDI2ZGEpO1xcbiA3Njk6XFx0XFx0aWYgKGVycm9yIFxcdTAwM2MgMClcXG4gNzcwOlxcdFxcdFxcdGdvdG8gZmFpbF9ndW5sb2NrO1xcbiA3NzE6XFx0XFxuIDc3MjpcXHRcXHRpbm9kZSA9IG5ld19pbm9kZShzZHAtXFx1MDAzZXNkX3Zmcyk7XFxuIDc3MzpcXHRcXHRlcnJvciA9IC1FTk9NRU07XFxuIDc3NDpcXHRcXHRpZiAoIWlub2RlKVxcbiA3NzU6XFx0XFx0XFx0Z290byBmYWlsX2d1bmxvY2s7XFxuIDc3NjpcXHRcXHRnZnMyX3NldHVwX2lub2RlKGlub2RlKTtcXG4gNzc3OlxcdFxcdGlwID0gR0ZTMl9JKGlub2RlKTtcXG4gNzc4OlxcdFxcbiA3Nzk6XFx0XFx0ZXJyb3IgPSBwb3NpeF9hY2xfY3JlYXRlKGRpciwgXFx1MDAyNm1vZGUsIFxcdTAwMjZkZWZhdWx0X2FjbCwgXFx1MDAyNmFjbCk7XFxuIDc4MDpcXHRcXHRpZiAoZXJyb3IpXFxuIDc4MTpcXHRcXHRcXHRnb3RvIGZhaWxfZ3VubG9jaztcXG4gNzgyOlxcdFxcbiA3ODM6XFx0XFx0ZXJyb3IgPSBnZnMyX3FhX2dldChpcCk7XFxuIDc4NDpcXHRcXHRpZiAoZXJyb3IpXFxuIDc4NTpcXHRcXHRcXHRnb3RvIGZhaWxfZnJlZV9hY2xzO1xcbiA3ODY6XFx0XFxuIDc4NzpcXHRcXHRpbm9kZS1cXHUwMDNlaV9tb2RlID0gbW9kZTtcXG4gNzg4OlxcdFxcdHNldF9ubGluayhpbm9kZSwgU19JU0RJUihtb2RlKSA/IDIgOiAxKTtcXG4gNzg5OlxcdFxcdGlub2RlLVxcdTAwM2VpX3JkZXYgPSBkZXY7XFxuIDc5MDpcXHRcXHRpbm9kZS1cXHUwMDNlaV9zaXplID0gc2l6ZTtcXG4gNzkxOlxcdFxcdHNpbXBsZV9pbm9kZV9pbml0X3RzKGlub2RlKTtcXG4gNzkyOlxcdFxcdG11bmdlX21vZGVfdWlkX2dpZChkaXAsIGlub2RlKTtcXG4gNzkzOlxcdFxcdGNoZWNrX2FuZF91cGRhdGVfZ29hbChkaXApO1xcbiA3OTQ6XFx0XFx0aXAtXFx1MDAzZWlfZ29hbCA9IGRpcC1cXHUwMDNlaV9nb2FsO1xcbiA3OTU6XFx0XFx0aXAtXFx1MDAzZWlfZGlza2ZsYWdzID0gMDtcXG4gNzk2OlxcdFxcdGlwLVxcdTAwM2VpX2VhdHRyID0gMDtcXG4gNzk3OlxcdFxcdGlwLVxcdTAwM2VpX2hlaWdodCA9IDA7XFxuIDc5ODpcXHRcXHRpcC1cXHUwMDNlaV9kZXB0aCA9IDA7XFxuIDc5OTpcXHRcXHRpcC1cXHUwMDNlaV9lbnRyaWVzID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTg6NDA6MTYuNTE4NTYyNjg1WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2NDYzNzQ0NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBsaWNhdGlvbnMgb2YgYGV4Y2xgIGluIEZpbGUgQ3JlYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhpcyBgZXhjbGAgZmxhZyBpcyBiZWluZyBwYXNzZWQgYXJvdW5kIGluIHRoZSBmaWxlIGNyZWF0aW9uIHByb2Nlc3MsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBgZ2ZzMl9jcmVhdGVfaW5vZGVgLiBJIHNlZSBpdCBiZWluZyB1c2VkIGluIGBnZnMyX2Rpcl9zZWFyY2hgIHZpYTpcbmBgYGNcblx0aW5vZGUgPSBnZnMyX2Rpcl9zZWFyY2goZGlyLCBcdTAwMjZkZW50cnktXHUwMDNlZF9uYW1lLCAhU19JU1JFRyhtb2RlKSB8fCBleGNsKTtcbmBgYFxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgXCJIZXksIGlmIGBnZnMyX2NyZWF0ZWAgZ2V0cyBjYWxsZWQgYnkgYGxvb2t1cF9vcGVuYCB3aXRoIGBleGNsID0gZmFsc2VgLCB3b3VsZG4ndCB0aGF0IG1lYW4gYGdmczJfY3JlYXRlX2lub2RlYCB3b3VsZCBnZXQgYGV4Y2wgPSAwYD9cIiBCdXQgdGhlbiwgSSByZW1lbWJlcmVkIHRoYXQgYGdmczJgIGltcGxlbWVudHMgYGF0b21pY19vcGVuYC4gXG5cbkFoYSEgVGhhdCdzIGEga2V5IGRldGFpbC4gYGxvb2t1cF9vcGVuYCBjYWxscyBgZ2ZzMl9hdG9taWNfb3BlbmAsIE5PVCBgZ2ZzMl9jcmVhdGVgLiBMZXQncyBjaGVjayBgZ2ZzMl9hdG9taWNfb3BlbmA6XG5gYGBjXG5zdGF0aWMgaW50IGdmczJfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcblx0XHRcdCAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgZmxhZ3MsXG5cdFx0XHQgICAgdW1vZGVfdCBtb2RlKVxue1xuXHRib29sIGV4Y2wgPSAhIShmbGFncyBcdTAwMjYgT19FWENMKTtcblxuXHRpZiAoIWRfaW5fbG9va3VwKGRlbnRyeSkpXG5cdFx0Z290byBza2lwX2xvb2t1cDtcblxuXHRyZXR1cm4gZ2ZzMl9jcmVhdGVfaW5vZGUoZGlyLCBkZW50cnksIGZpbGUsIFNfSUZSRUcgfCBtb2RlLCAwLCBOVUxMLCAwLCBleGNsKTtcbmBgYFxuT2theSwgc28gYGdmczJfYXRvbWljX29wZW5gIGRvZXMgcGFzcyB0aGUgY29ycmVjdCBgZXhjbGAgdmFsdWUuIEFuZCB0aGlua2luZyBpdCB0aHJvdWdoLCBgZ2ZzMl9jcmVhdGVgIGlzIE9OTFkgY2FsbGVkIGJ5IGB2ZnNfY3JlYXRlYC4gQW5kIGB2ZnNfY3JlYXRlYCAqYWx3YXlzKiBwYXNzZXMgYHRydWVgIGZvciBgZXhjbGAuIFNvIHRoZSBzaXR1YXRpb24sIHdpdGggYGdmczJfY3JlYXRlYCBwYXNzaW5nIGAxYCwgaXMgZXhhY3RseSB0aGUgc2FtZSBhcyBiZWZvcmUuIFRoYXQgbWFrZXMgc2Vuc2UuXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgb3RoZXIgZmlsZXN5c3RlbXMuIExldCdzIHN0YXJ0IHdpdGggYG5mc2AuIGBuZnNgIGltcGxlbWVudHMgYGF0b21pY19vcGVuYCB0b28uIFRoZSBzYW1lIGxvZ2ljIHNob3VsZCBhcHBseTogYG5mc19jcmVhdGVgIGlzIG9ubHkgY2FsbGVkIGJ5IGB2ZnNfY3JlYXRlYCwgd2hpY2ggYWx3YXlzIHBhc3NlcyBgdHJ1ZWAuIFRoZXJlZm9yZSwgcGFzc2luZyBgT19FWENMYCBpbiBgbmZzX2NyZWF0ZWAgaXMgZXhhY3RseSB0aGUgc2FtZSBiZWhhdmlvciBhcyBiZWZvcmUuIFxuXG5Ob3csIG9uIHRvIGB2Ym94c2ZgLiBTYW1lIHBhdHRlcm4uIGB2Ym94c2ZgIGltcGxlbWVudHMgYGF0b21pY19vcGVuYCwgc28gYHZib3hzZl9kaXJfbWtmaWxlYCBpcyBjYWxsZWQgYnkgYHZmc19jcmVhdGVgLCB3aGljaCAqYWx3YXlzKiBwYXNzZXMgYHRydWVgLiBTbywgcGFzc2luZyBgdHJ1ZWAgaXMgdGhlIHNhbWUgYmVoYXZpb3IuXG5cbkZpbmFsbHksIGBjaWZzYC4gYGNpZnNgIGFsc28gaW1wbGVtZW50cyBgYXRvbWljX29wZW5gLiBUaGlzIG1lYW5zIGBjaWZzX2NyZWF0ZWAgaXMgKmFsc28qIGNhbGxlZCBvbmx5IGJ5IGB2ZnNfY3JlYXRlYC4gV2hpY2ggYWx3YXlzIHBhc3NlZCBgdHJ1ZWAgZm9yIGBleGNsYC4gQnV0LCB3YWl0IGEgbWludXRlLCBJIGRvbid0IHJlbWVtYmVyIGBjaWZzX2NyZWF0ZWAgZXZlbiAqdXNpbmcqIGBleGNsYCBiZWZvcmUuIE5lZWQgdG8gdmVyaWZ5IHRoYXQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM4NjEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxODo0MDoyNS4xNjQ5NDEwNloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk4NzMzMzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNpZnNfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3NtYi9jbGllbnQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3NtYi9jbGllbnQvY2FjaGVkX2Rpci5jPTEzND1pbnQgb3Blbl9jYWNoZWRfZGlyKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sXFxuLS1cXG5mcy9zbWIvY2xpZW50L2NhY2hlZF9kaXIuYy0yNzUtXFx0XFx0LnBhdGggPSBwYXRoLFxcbmZzL3NtYi9jbGllbnQvY2FjaGVkX2Rpci5jOjI3NjpcXHRcXHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIENSRUFURV9OT1RfRklMRSksXFxuZnMvc21iL2NsaWVudC9jYWNoZWRfZGlyLmMtMjc3LVxcdFxcdC5kZXNpcmVkX2FjY2VzcyA9ICBGSUxFX1JFQURfREFUQSB8IEZJTEVfUkVBRF9BVFRSSUJVVEVTIHxcXG4tLVxcbmZzL3NtYi9jbGllbnQvY2lmc2FjbC5jPTE1NzU9c3RhdGljIHN0cnVjdCBzbWJfbnRzZCAqZ2V0X2NpZnNfYWNsX2J5X3BhdGgoc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYixcXG4tLVxcbmZzL3NtYi9jbGllbnQvY2lmc2FjbC5jLTE1OTYtXFx0XFx0LmRlc2lyZWRfYWNjZXNzID0gUkVBRF9DT05UUk9MLFxcbmZzL3NtYi9jbGllbnQvY2lmc2FjbC5jOjE1OTc6XFx0XFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCAwKSxcXG5mcy9zbWIvY2xpZW50L2NpZnNhY2wuYy0xNTk4LVxcdFxcdC5kaXNwb3NpdGlvbiA9IEZJTEVfT1BFTixcXG4tLVxcbmZzL3NtYi9jbGllbnQvY2lmc2FjbC5jPTE2NDA9aW50IHNldF9jaWZzX2FjbChzdHJ1Y3Qgc21iX250c2QgKnBubnRzZCwgX191MzIgYWNsbGVuLFxcbi0tXFxuZnMvc21iL2NsaWVudC9jaWZzYWNsLmMtMTY2OC1cXHRcXHQuZGVzaXJlZF9hY2Nlc3MgPSBhY2Nlc3NfZmxhZ3MsXFxuZnMvc21iL2NsaWVudC9jaWZzYWNsLmM6MTY2OTpcXHRcXHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIDApLFxcbmZzL3NtYi9jbGllbnQvY2lmc2FjbC5jLTE2NzAtXFx0XFx0LmRpc3Bvc2l0aW9uID0gRklMRV9PUEVOLFxcbi0tXFxuZnMvc21iL2NsaWVudC9jaWZzZnMuYz0xMjI4PWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNpZnNfZGlyX2lub2RlX29wcyA9IHtcXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jOjEyMjk6XFx0LmNyZWF0ZSA9IGNpZnNfY3JlYXRlLFxcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmMtMTIzMC1cXHQuYXRvbWljX29wZW4gPSBjaWZzX2F0b21pY19vcGVuLFxcbi0tXFxuZnMvc21iL2NsaWVudC9jaWZzZnMuaD01NT1zdHJ1Y3QgaW5vZGUgKmNpZnNfcm9vdF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmg6NTY6aW50IGNpZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5oLTU3LVxcdFxcdHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LCB1bW9kZV90IG1vZGUpO1xcbi0tXFxuZnMvc21iL2NsaWVudC9jaWZzZ2xvYi5oPTIyMzI9c3RhdGljIGlubGluZSB2b2lkIG1vdmVfY2lmc19pbmZvX3RvX3NtYjIoc3RydWN0IHNtYjJfZmlsZV9hbGxfaW5mbyAqZHN0LCBjb25zdCBGSUxFX0FMTF9JTkZPICpzcmMpXFxuLS1cXG5mcy9zbWIvY2xpZW50L2NpZnNnbG9iLmgtMjI0OS1cXHRcXHQuZGlzcG9zaXRpb24gPSAoX2NkKSwgXFxcXFxcbmZzL3NtYi9jbGllbnQvY2lmc2dsb2IuaDoyMjUwOlxcdFxcdC5jcmVhdGVfb3B0aW9ucyA9IGNpZnNfY3JlYXRlX29wdGlvbnMoX2NpZnNfc2IsIChfY28pKSwgXFxcXFxcbmZzL3NtYi9jbGllbnQvY2lmc2dsb2IuaC0yMjUxLVxcdFxcdC5tb2RlID0gKF9tb2RlKSwgXFxcXFxcbi0tXFxuZnMvc21iL2NsaWVudC9jaWZzcHJvdG8uaD0zNDA9aW50IGNpZnNfcXVlcnlfbWZfc3ltbGluayh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxcbi0tXFxuZnMvc21iL2NsaWVudC9jaWZzcHJvdG8uaC0zNDMtXFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgKnBieXRlc19yZWFkKTtcXG5mcy9zbWIvY2xpZW50L2NpZnNwcm90by5oOjM0NDppbnQgY2lmc19jcmVhdGVfbWZfc3ltbGluayh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxcbmZzL3NtYi9jbGllbnQvY2lmc3Byb3RvLmgtMzQ1LVxcdFxcdFxcdCAgIHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IsXFxuLS1cXG5mcy9zbWIvY2xpZW50L2NpZnNwcm90by5oPTQyMT1zdGF0aWMgaW5saW5lIGludCBjaWZzX2ludmFsX25hbWVfZGZzX2xpbmtfZXJyb3IoY29uc3QgdW5zaWduZWQgaW50IHhpZCxcXG4tLVxcbmZzL3NtYi9jbGllbnQvY2lmc3Byb3RvLmgtNDMxLVxcbmZzL3NtYi9jbGllbnQvY2lmc3Byb3RvLmg6NDMyOnN0YXRpYyBpbmxpbmUgaW50IGNpZnNfY3JlYXRlX29wdGlvbnMoc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiwgaW50IG9wdGlvbnMpXFxuZnMvc21iL2NsaWVudC9jaWZzcHJvdG8uaC00MzMte1xcbi0tXFxuZnMvc21iL2NsaWVudC9jaWZzc21iLmM9Mjk1ND1pbnQgY2lmc19xdWVyeV9yZXBhcnNlX3BvaW50KGNvbnN0IHVuc2lnbmVkIGludCB4aWQsXFxuLS1cXG5mcy9zbWIvY2xpZW50L2NpZnNzbWIuYy0yOTg0LVxcdFxcdC5kZXNpcmVkX2FjY2VzcyA9IEZJTEVfUkVBRF9BVFRSSUJVVEVTLFxcbmZzL3NtYi9jbGllbnQvY2lmc3NtYi5jOjI5ODU6XFx0XFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLFxcbmZzL3NtYi9jbGllbnQvY2lmc3NtYi5jLTI5ODYtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgT1BFTl9SRVBBUlNFX1BPSU5UKSxcXG4tLVxcbmZzL3NtYi9jbGllbnQvY2lmc3NtYi5jLTMwODQtXFxuZnMvc21iL2NsaWVudC9jaWZzc21iLmM6MzA4NTpzdHJ1Y3QgaW5vZGUgKmNpZnNfY3JlYXRlX3JlcGFyc2VfaW5vZGUoc3RydWN0IGNpZnNfb3Blbl9pbmZvX2RhdGEgKmRhdGEsXFxuZnMvc21iL2NsaWVudC9jaWZzc21iLmMtMzA4Ni1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvc21iL2NsaWVudC9jaWZzc21iLmM9NTgzMz1DSUZTU01CU2V0UGF0aEluZm9GQihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxcbi0tXFxuZnMvc21iL2NsaWVudC9jaWZzc21iLmMtNTg0Ni1cXHRcXHQuZGVzaXJlZF9hY2Nlc3MgPSBHRU5FUklDX1dSSVRFLFxcbmZzL3NtYi9jbGllbnQvY2lmc3NtYi5jOjU4NDc6XFx0XFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCAwKSxcXG5mcy9zbWIvY2xpZW50L2NpZnNzbWIuYy01ODQ4LVxcdFxcdC5kaXNwb3NpdGlvbiA9IEZJTEVfT1BFTixcXG4tLVxcbmZzL3NtYi9jbGllbnQvZGlyLmM9MjAxPXN0YXRpYyBpbnQgX19jaWZzX2RvX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGlyZW50cnksXFxuLS1cXG5mcy9zbWIvY2xpZW50L2Rpci5jLTI0MC1cXHRcXHRcXHRcXHQvKiBxdWVyeSBpbm9kZSBpbmZvICovXFxuZnMvc21iL2NsaWVudC9kaXIuYzoyNDE6XFx0XFx0XFx0XFx0Z290byBjaWZzX2NyZWF0ZV9nZXRfZmlsZV9pbmZvO1xcbmZzL3NtYi9jbGllbnQvZGlyLmMtMjQyLVxcdFxcdFxcdH1cXG4tLVxcbmZzL3NtYi9jbGllbnQvZGlyLmMtMjY0LVxcdFxcdFxcdFxcdENJRlNTTUJDbG9zZSh4aWQsIHRjb24sIGZpZC1cXHUwMDNlbmV0ZmlkKTtcXG5mcy9zbWIvY2xpZW50L2Rpci5jOjI2NTpcXHRcXHRcXHRcXHRnb3RvIGNpZnNfY3JlYXRlX2dldF9maWxlX2luZm87XFxuZnMvc21iL2NsaWVudC9kaXIuYy0yNjYtXFx0XFx0XFx0fVxcbmZzL3NtYi9jbGllbnQvZGlyLmMtMjY3LVxcdFxcdFxcdC8qIHN1Y2Nlc3MsIG5vIG5lZWQgdG8gcXVlcnkgKi9cXG5mcy9zbWIvY2xpZW50L2Rpci5jOjI2ODpcXHRcXHRcXHRnb3RvIGNpZnNfY3JlYXRlX3NldF9kZW50cnk7XFxuZnMvc21iL2NsaWVudC9kaXIuYy0yNjktXFxuZnMvc21iL2NsaWVudC9kaXIuYy0yNzAtXFx0XFx0Y2FzZSAtRU5PRU5UOlxcbmZzL3NtYi9jbGllbnQvZGlyLmM6MjcxOlxcdFxcdFxcdGdvdG8gY2lmc19jcmVhdGVfZ2V0X2ZpbGVfaW5mbztcXG5mcy9zbWIvY2xpZW50L2Rpci5jLTI3Mi1cXG4tLVxcbmZzL3NtYi9jbGllbnQvZGlyLmMtMzczLVxcdFxcdC5kZXNpcmVkX2FjY2VzcyA9IGRlc2lyZWRfYWNjZXNzLFxcbmZzL3NtYi9jbGllbnQvZGlyLmM6Mzc0OlxcdFxcdC5jcmVhdGVfb3B0aW9ucyA9IGNpZnNfY3JlYXRlX29wdGlvbnMoY2lmc19zYiwgY3JlYXRlX29wdGlvbnMpLFxcbmZzL3NtYi9jbGllbnQvZGlyLmMtMzc1LVxcdFxcdC5kaXNwb3NpdGlvbiA9IGRpc3Bvc2l0aW9uLFxcbi0tXFxuZnMvc21iL2NsaWVudC9kaXIuYy0zODItXFx0aWYgKHJjKSB7XFxuZnMvc21iL2NsaWVudC9kaXIuYzozODM6XFx0XFx0Y2lmc19kYmcoRllJLCBcXFwiY2lmc19jcmVhdGUgcmV0dXJuZWQgMHgleFxcXFxuXFxcIiwgcmMpO1xcbmZzL3NtYi9jbGllbnQvZGlyLmMtMzg0LVxcdFxcdGlmIChyYyA9PSAtRUFDQ0VTIFxcdTAwMjZcXHUwMDI2IHJkd3JfZm9yX2ZzY2FjaGUgPT0gMSkge1xcbi0tXFxuZnMvc21iL2NsaWVudC9kaXIuYy00MjktXFxuZnMvc21iL2NsaWVudC9kaXIuYzo0MzA6Y2lmc19jcmVhdGVfZ2V0X2ZpbGVfaW5mbzpcXG5mcy9zbWIvY2xpZW50L2Rpci5jLTQzMS1cXHQvKiBzZXJ2ZXIgbWlnaHQgbWFzayBtb2RlIHNvIHdlIGhhdmUgdG8gcXVlcnkgZm9yIGl0ICovXFxuLS1cXG5mcy9zbWIvY2xpZW50L2Rpci5jLTQ1OC0jaWZkZWYgQ09ORklHX0NJRlNfQUxMT1dfSU5TRUNVUkVfTEVHQUNZXFxuZnMvc21iL2NsaWVudC9kaXIuYzo0NTk6Y2lmc19jcmVhdGVfc2V0X2RlbnRyeTpcXG5mcy9zbWIvY2xpZW50L2Rpci5jLTQ2MC0jZW5kaWYgLyogQ09ORklHX0NJRlNfQUxMT1dfSU5TRUNVUkVfTEVHQUNZICovXFxuLS1cXG5mcy9zbWIvY2xpZW50L2Rpci5jPTUyMD1pbnQgY2lmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGlyZW50cnksXFxuLS1cXG5mcy9zbWIvY2xpZW50L2Rpci5jLTY0Ni0gKi9cXG5mcy9zbWIvY2xpZW50L2Rpci5jOjY0NzppbnQgY2lmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbmZzL3NtYi9jbGllbnQvZGlyLmMtNjQ4LVxcdFxcdHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LCB1bW9kZV90IG1vZGUpXFxuLS1cXG5mcy9zbWIvY2xpZW50L2Rpci5jLTY2OC1cXG5mcy9zbWIvY2xpZW50L2Rpci5jOjY2OTpcXHRjaWZzX2RiZyhGWUksIFxcXCJjaWZzX2NyZWF0ZSBwYXJlbnQgaW5vZGUgPSAweCVwIG5hbWUgaXM6ICVwZCBhbmQgZGVudHJ5ID0gMHglcFxcXFxuXFxcIixcXG5mcy9zbWIvY2xpZW50L2Rpci5jLTY3MC1cXHRcXHQgZGlyLCBkaXJlbnRyeSwgZGlyZW50cnkpO1xcbi0tXFxuZnMvc21iL2NsaWVudC9maWxlLmM9NTQ3PXN0YXRpYyBpbnQgY2lmc19udF9vcGVuKGNvbnN0IGNoYXIgKmZ1bGxfcGF0aCwgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYixcXG4tLVxcbmZzL3NtYi9jbGllbnQvZmlsZS5jLTYwMC1cXHRcXHQuZGVzaXJlZF9hY2Nlc3MgPSBkZXNpcmVkX2FjY2VzcyxcXG5mcy9zbWIvY2xpZW50L2ZpbGUuYzo2MDE6XFx0XFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCBjcmVhdGVfb3B0aW9ucyksXFxuZnMvc21iL2NsaWVudC9maWxlLmMtNjAyLVxcdFxcdC5kaXNwb3NpdGlvbiA9IGRpc3Bvc2l0aW9uLFxcbi0tXFxuZnMvc21iL2NsaWVudC9maWxlLmM9MTIzMz1jaWZzX3Jlb3Blbl9maWxlKHN0cnVjdCBjaWZzRmlsZUluZm8gKmNmaWxlLCBib29sIGNhbl9mbHVzaClcXG4tLVxcbmZzL3NtYi9jbGllbnQvZmlsZS5jLTEzMjgtXFx0XFx0LmRlc2lyZWRfYWNjZXNzID0gZGVzaXJlZF9hY2Nlc3MsXFxuZnMvc21iL2NsaWVudC9maWxlLmM6MTMyOTpcXHRcXHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIGNyZWF0ZV9vcHRpb25zKSxcXG5mcy9zbWIvY2xpZW50L2ZpbGUuYy0xMzMwLVxcdFxcdC5kaXNwb3NpdGlvbiA9IGRpc3Bvc2l0aW9uLFxcbi0tXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jPTI2OT1jaWZzX3VuaXhfYmFzaWNfdG9fZmF0dHIoc3RydWN0IGNpZnNfZmF0dHIgKmZhdHRyLCBGSUxFX1VOSVhfQkFTSUNfSU5GTyAqaW5mbyxcXG4tLVxcbmZzL3NtYi9jbGllbnQvaW5vZGUuYy0zNjItICovXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jOjM2MzpzdGF0aWMgdm9pZCBjaWZzX2NyZWF0ZV9qdW5jdGlvbl9mYXR0cihzdHJ1Y3QgY2lmc19mYXR0ciAqZmF0dHIsXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTM2NC1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL3NtYi9jbGllbnQvaW5vZGUuYz00MDg9Y2lmc19nZXRfZmlsZV9pbmZvX3VuaXgoc3RydWN0IGZpbGUgKmZpbHApXFxuLS1cXG5mcy9zbWIvY2xpZW50L2lub2RlLmMtNDMyLVxcdH0gZWxzZSBpZiAocmMgPT0gLUVSRU1PVEUpIHtcXG5mcy9zbWIvY2xpZW50L2lub2RlLmM6NDMzOlxcdFxcdGNpZnNfY3JlYXRlX2p1bmN0aW9uX2ZhdHRyKFxcdTAwMjZmYXR0ciwgaW5vZGUtXFx1MDAzZWlfc2IpO1xcbmZzL3NtYi9jbGllbnQvaW5vZGUuYy00MzQtXFx0fSBlbHNlXFxuLS1cXG5mcy9zbWIvY2xpZW50L2lub2RlLmM9NDQ0PXN0YXRpYyBpbnQgY2lmc19nZXRfdW5peF9mYXR0cihjb25zdCB1bnNpZ25lZCBjaGFyICpmdWxsX3BhdGgsXFxuLS1cXG5mcy9zbWIvY2xpZW50L2lub2RlLmMtNDczLVxcdH0gZWxzZSBpZiAocmMgPT0gLUVSRU1PVEUpIHtcXG5mcy9zbWIvY2xpZW50L2lub2RlLmM6NDc0OlxcdFxcdGNpZnNfY3JlYXRlX2p1bmN0aW9uX2ZhdHRyKGZhdHRyLCBzYik7XFxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTQ3NS1cXHRcXHRyYyA9IDA7XFxuLS1cXG5mcy9zbWIvY2xpZW50L2lub2RlLmM9NTM1PWNpZnNfc2Z1X3R5cGUoc3RydWN0IGNpZnNfZmF0dHIgKmZhdHRyLCBjb25zdCBjaGFyICpwYXRoLFxcbi0tXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTU3NS1cXHRcXHQuZGVzaXJlZF9hY2Nlc3MgPSBHRU5FUklDX1JFQUQsXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jOjU3NjpcXHRcXHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIENSRUFURV9OT1RfRElSKSxcXG5mcy9zbWIvY2xpZW50L2lub2RlLmMtNTc3LVxcdFxcdC5kaXNwb3NpdGlvbiA9IEZJTEVfT1BFTixcXG4tLVxcbmZzL3NtYi9jbGllbnQvaW5vZGUuYz05ODA9Y2lmc19nZXRfZmlsZV9pbmZvKHN0cnVjdCBmaWxlICpmaWxwKVxcbi0tXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTEwMTgtXFx0Y2FzZSAtRVJFTU9URTpcXG5mcy9zbWIvY2xpZW50L2lub2RlLmM6MTAxOTpcXHRcXHRjaWZzX2NyZWF0ZV9qdW5jdGlvbl9mYXR0cihcXHUwMDI2ZmF0dHIsIGlub2RlLVxcdTAwM2VpX3NiKTtcXG5mcy9zbWIvY2xpZW50L2lub2RlLmMtMTAyMC1cXHRcXHRicmVhaztcXG4tLVxcbmZzL3NtYi9jbGllbnQvaW5vZGUuYz0xMTcyPXN0YXRpYyBpbnQgcmVwYXJzZV9pbmZvX3RvX2ZhdHRyKHN0cnVjdCBjaWZzX29wZW5faW5mb19kYXRhICpkYXRhLFxcbi0tXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTEyMTQtXFx0XFx0aWYgKGxlMzJfdG9fY3B1KGRhdGEtXFx1MDAzZWZpLkF0dHJpYnV0ZXMpIFxcdTAwMjYgQVRUUl9ESVJFQ1RPUlkpIHtcXG5mcy9zbWIvY2xpZW50L2lub2RlLmM6MTIxNTpcXHRcXHRcXHRjaWZzX2NyZWF0ZV9qdW5jdGlvbl9mYXR0cihmYXR0ciwgc2IpO1xcbmZzL3NtYi9jbGllbnQvaW5vZGUuYy0xMjE2LVxcdFxcdFxcdGdvdG8gb3V0O1xcbi0tXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTEyMzktXFx0XFx0XFx0XFx0cmMgPSAwO1xcbmZzL3NtYi9jbGllbnQvaW5vZGUuYzoxMjQwOlxcdFxcdFxcdFxcdGNpZnNfY3JlYXRlX2p1bmN0aW9uX2ZhdHRyKGZhdHRyLCBzYik7XFxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTEyNDEtXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuLS1cXG5mcy9zbWIvY2xpZW50L2lub2RlLmM9MTI3Mj1zdGF0aWMgaW50IGNpZnNfZ2V0X2ZhdHRyKHN0cnVjdCBjaWZzX29wZW5faW5mb19kYXRhICpkYXRhLFxcbi0tXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTEzMjctXFx0XFx0LyogREZTIGxpbmssIG5vIG1ldGFkYXRhIGF2YWlsYWJsZSBvbiB0aGlzIHNlcnZlciAqL1xcbmZzL3NtYi9jbGllbnQvaW5vZGUuYzoxMzI4OlxcdFxcdGNpZnNfY3JlYXRlX2p1bmN0aW9uX2ZhdHRyKGZhdHRyLCBzYik7XFxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTEzMjktXFx0XFx0cmMgPSAwO1xcbi0tXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jPTE0NjM9c3RhdGljIGludCBzbWIzMTFfcG9zaXhfZ2V0X2ZhdHRyKHN0cnVjdCBjaWZzX29wZW5faW5mb19kYXRhICpkYXRhLFxcbi0tXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTE1MDYtXFx0XFx0LyogREZTIGxpbmssIG5vIG1ldGFkYXRhIGF2YWlsYWJsZSBvbiB0aGlzIHNlcnZlciAqL1xcbmZzL3NtYi9jbGllbnQvaW5vZGUuYzoxNTA3OlxcdFxcdGNpZnNfY3JlYXRlX2p1bmN0aW9uX2ZhdHRyKGZhdHRyLCBzYik7XFxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTE1MDgtXFx0XFx0cmMgPSAwO1xcbi0tXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jPTE4MDU9Y2lmc19yZW5hbWVfcGVuZGluZ19kZWxldGUoY29uc3QgY2hhciAqZnVsbF9wYXRoLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9zbWIvY2xpZW50L2lub2RlLmMtMTgzNy1cXHRcXHQuZGVzaXJlZF9hY2Nlc3MgPSBERUxFVEUgfCBGSUxFX1dSSVRFX0FUVFJJQlVURVMsXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jOjE4Mzg6XFx0XFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCBDUkVBVEVfTk9UX0RJUiksXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTE4MzktXFx0XFx0LmRpc3Bvc2l0aW9uID0gRklMRV9PUEVOLFxcbi0tXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jPTI0MzU9Y2lmc19kb19yZW5hbWUoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGRlbnRyeSAqZnJvbV9kZW50cnksXFxuLS1cXG5mcy9zbWIvY2xpZW50L2lub2RlLmMtMjQ5My1cXHRcXHQuZGVzaXJlZF9hY2Nlc3MgPSBERUxFVEUsXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jOjI0OTQ6XFx0XFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCBDUkVBVEVfTk9UX0RJUiksXFxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTI0OTUtXFx0XFx0LmRpc3Bvc2l0aW9uID0gRklMRV9PUEVOLFxcbi0tXFxuZnMvc21iL2NsaWVudC9saW5rLmM9MjI3PWNpZnNfcXVlcnlfbWZfc3ltbGluayh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxcbi0tXFxuZnMvc21iL2NsaWVudC9saW5rLmMtMjQyLVxcdFxcdC5kZXNpcmVkX2FjY2VzcyA9IEdFTkVSSUNfUkVBRCxcXG5mcy9zbWIvY2xpZW50L2xpbmsuYzoyNDM6XFx0XFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCBDUkVBVEVfTk9UX0RJUiksXFxuZnMvc21iL2NsaWVudC9saW5rLmMtMjQ0LVxcdFxcdC5kaXNwb3NpdGlvbiA9IEZJTEVfT1BFTixcXG4tLVxcbmZzL3NtYi9jbGllbnQvbGluay5jPTI3MT1pbnRcXG5mcy9zbWIvY2xpZW50L2xpbmsuYzoyNzI6Y2lmc19jcmVhdGVfbWZfc3ltbGluayh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxcbmZzL3NtYi9jbGllbnQvbGluay5jLTI3My1cXHRcXHQgICAgICAgc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiwgY29uc3QgdW5zaWduZWQgY2hhciAqcGF0aCxcXG4tLVxcbmZzL3NtYi9jbGllbnQvbGluay5jLTI4NS1cXHRcXHQuZGVzaXJlZF9hY2Nlc3MgPSBHRU5FUklDX1dSSVRFLFxcbmZzL3NtYi9jbGllbnQvbGluay5jOjI4NjpcXHRcXHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIENSRUFURV9OT1RfRElSKSxcXG5mcy9zbWIvY2xpZW50L2xpbmsuYy0yODctXFx0XFx0LmRpc3Bvc2l0aW9uID0gRklMRV9DUkVBVEUsXFxuLS1cXG5mcy9zbWIvY2xpZW50L2xpbmsuYz0zMTI9c21iM19xdWVyeV9tZl9zeW1saW5rKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sXFxuLS1cXG5mcy9zbWIvY2xpZW50L2xpbmsuYy0zMjktXFx0XFx0LmRlc2lyZWRfYWNjZXNzID0gR0VORVJJQ19SRUFELFxcbmZzL3NtYi9jbGllbnQvbGluay5jOjMzMDpcXHRcXHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIENSRUFURV9OT1RfRElSKSxcXG5mcy9zbWIvY2xpZW50L2xpbmsuYy0zMzEtXFx0XFx0LmRpc3Bvc2l0aW9uID0gRklMRV9PUEVOLFxcbi0tXFxuZnMvc21iL2NsaWVudC9saW5rLmM9Mzc1PXNtYjNfY3JlYXRlX21mX3N5bWxpbmsodW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfdGNvbiAqdGNvbixcXG4tLVxcbmZzL3NtYi9jbGllbnQvbGluay5jLTM5Ny1cXHRcXHQuZGVzaXJlZF9hY2Nlc3MgPSBHRU5FUklDX1dSSVRFLFxcbmZzL3NtYi9jbGllbnQvbGluay5jOjM5ODpcXHRcXHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIENSRUFURV9OT1RfRElSKSxcXG5mcy9zbWIvY2xpZW50L2xpbmsuYy0zOTktXFx0XFx0LmRpc3Bvc2l0aW9uID0gRklMRV9DUkVBVEUsXFxuLS1cXG5mcy9zbWIvY2xpZW50L3JlcGFyc2UuYz0yNDc9c3RhdGljIGludCBkZXRlY3RfZGlyZWN0b3J5X3N5bWxpbmtfdGFyZ2V0KHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IsXFxuLS1cXG5mcy9zbWIvY2xpZW50L3JlcGFyc2UuYy0zMzItXFx0b3Bsb2NrID0gMDtcXG5mcy9zbWIvY2xpZW50L3JlcGFyc2UuYzozMzM6XFx0b3Bhcm1zLmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLFxcbmZzL3NtYi9jbGllbnQvcmVwYXJzZS5jLTMzNC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgQ1JFQVRFX05PVF9GSUxFIHwgT1BFTl9SRVBBUlNFX1BPSU5UKTtcXG4tLVxcbmZzL3NtYi9jbGllbnQvcmVwYXJzZS5jLTM1MS1cXHRcXHRvcGxvY2sgPSAwO1xcbmZzL3NtYi9jbGllbnQvcmVwYXJzZS5jOjM1MjpcXHRcXHRvcGFybXMuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsXFxuZnMvc21iL2NsaWVudC9yZXBhcnNlLmMtMzUzLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBDUkVBVEVfTk9UX0RJUiB8IE9QRU5fUkVQQVJTRV9QT0lOVCk7XFxuLS1cXG5mcy9zbWIvY2xpZW50L3JlcGFyc2UuYz0xMjM1PWJvb2wgY2lmc19yZXBhcnNlX3BvaW50X3RvX2ZhdHRyKHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IsXFxuLS1cXG5mcy9zbWIvY2xpZW50L3JlcGFyc2UuYy0xMjY2LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5mcy9zbWIvY2xpZW50L3JlcGFyc2UuYzoxMjY3OlxcdFxcdC8qIFNlZSBjaWZzX2NyZWF0ZV9qdW5jdGlvbl9mYXR0cigpICovXFxuZnMvc21iL2NsaWVudC9yZXBhcnNlLmMtMTI2OC1cXHRcXHRmYXR0ci1cXHUwMDNlY2ZfbW9kZSA9IFNfSUZESVIgfCAwNzExO1xcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIxb3BzLmM9OTQyPXNtYl9zZXRfZmlsZV9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKmZ1bGxfcGF0aCxcXG4tLVxcbmZzL3NtYi9jbGllbnQvc21iMW9wcy5jLTEwMjYtXFx0XFx0LmRlc2lyZWRfYWNjZXNzID0gU1lOQ0hST05JWkUgfCBGSUxFX1dSSVRFX0FUVFJJQlVURVMsXFxuZnMvc21iL2NsaWVudC9zbWIxb3BzLmM6MTAyNzpcXHRcXHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIDApLFxcbmZzL3NtYi9jbGllbnQvc21iMW9wcy5jLTEwMjgtXFx0XFx0LmRpc3Bvc2l0aW9uID0gRklMRV9PUEVOLFxcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIxb3BzLmM9MTM4Nz1zdHJ1Y3Qgc21iX3ZlcnNpb25fb3BlcmF0aW9ucyBzbWIxX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9zbWIvY2xpZW50L3NtYjFvcHMuYy0xNDM5LVxcdC5nZXRfcmVwYXJzZV9wb2ludF9idWZmZXIgPSBjaWZzX2dldF9yZXBhcnNlX3BvaW50X2J1ZmZlcixcXG5mcy9zbWIvY2xpZW50L3NtYjFvcHMuYzoxNDQwOlxcdC5jcmVhdGVfcmVwYXJzZV9pbm9kZSA9IGNpZnNfY3JlYXRlX3JlcGFyc2VfaW5vZGUsXFxuZnMvc21iL2NsaWVudC9zbWIxb3BzLmMtMTQ0MS1cXHQub3BlbiA9IGNpZnNfb3Blbl9maWxlLFxcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIxb3BzLmMtMTQ1OC1cXHQucXVlcnlfbWZfc3ltbGluayA9IGNpZnNfcXVlcnlfbWZfc3ltbGluayxcXG5mcy9zbWIvY2xpZW50L3NtYjFvcHMuYzoxNDU5OlxcdC5jcmVhdGVfbWZfc3ltbGluayA9IGNpZnNfY3JlYXRlX21mX3N5bWxpbmssXFxuZnMvc21iL2NsaWVudC9zbWIxb3BzLmMtMTQ2MC1cXHQuaXNfcmVhZF9vcCA9IGNpZnNfaXNfcmVhZF9vcCxcXG4tLVxcbmZzL3NtYi9jbGllbnQvc21iMXByb3RvLmg9MTA4PWludCBjaWZzX3F1ZXJ5X3JlcGFyc2VfcG9pbnQoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfdGNvbiAqdGNvbixcXG4tLVxcbmZzL3NtYi9jbGllbnQvc21iMXByb3RvLmgtMTExLVxcdFxcdFxcdCAgICAgaW50ICpyc3BfYnVmdHlwZSk7XFxuZnMvc21iL2NsaWVudC9zbWIxcHJvdG8uaDoxMTI6c3RydWN0IGlub2RlICpjaWZzX2NyZWF0ZV9yZXBhcnNlX2lub2RlKHN0cnVjdCBjaWZzX29wZW5faW5mb19kYXRhICpkYXRhLFxcbmZzL3NtYi9jbGllbnQvc21iMXByb3RvLmgtMTEzLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYz04ODM9c21iM19xZnNfdGNvbihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtODk3LVxcdFxcdC5kaXNwb3NpdGlvbiA9IEZJTEVfT1BFTixcXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYzo4OTg6XFx0XFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCAwKSxcXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy04OTktXFx0XFx0LmZpZCA9IFxcdTAwMjZmaWQsXFxuLS1cXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYz05Mjg9c21iMl9xZnNfdGNvbihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtOTQxLVxcdFxcdC5kaXNwb3NpdGlvbiA9IEZJTEVfT1BFTixcXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYzo5NDI6XFx0XFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCAwKSxcXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy05NDMtXFx0XFx0LmZpZCA9IFxcdTAwMjZmaWQsXFxuLS1cXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYz05NTk9c21iMl9pc19wYXRoX2FjY2Vzc2libGUoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfdGNvbiAqdGNvbixcXG4tLVxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jLTk4Ni1cXHRcXHQuZGlzcG9zaXRpb24gPSBGSUxFX09QRU4sXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM6OTg3OlxcdFxcdC5jcmVhdGVfb3B0aW9ucyA9IGNpZnNfY3JlYXRlX29wdGlvbnMoY2lmc19zYiwgMCksXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtOTg4LVxcdFxcdC5maWQgPSBcXHUwMDI2ZmlkLFxcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM9MTE4MT1zbWIyX3NldF9lYShjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMTI4My1cXHRcXHQuZGlzcG9zaXRpb24gPSBGSUxFX09QRU4sXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM6MTI4NDpcXHRcXHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIDApLFxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jLTEyODUtXFx0XFx0LmZpZCA9IFxcdTAwMjZmaWQsXFxuLS1cXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYz0xNTc3PXNtYjJfaW9jdGxfcXVlcnlfaW5mbyhjb25zdCB1bnNpZ25lZCBpbnQgeGlkLFxcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMTY1Mi1cXHRcXHQuZGlzcG9zaXRpb24gPSBGSUxFX09QRU4sXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM6MTY1MzpcXHRcXHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIGNyZWF0ZV9vcHRpb25zKSxcXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0xNjU0LVxcdFxcdC5maWQgPSBcXHUwMDI2ZmlkLFxcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM9MjM3MT1zbWIzX25vdGlmeShjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZmlsZSAqcGZpbGUsXFxuLS1cXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0yNDIwLVxcdFxcdC5kaXNwb3NpdGlvbiA9IEZJTEVfT1BFTixcXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYzoyNDIxOlxcdFxcdC5jcmVhdGVfb3B0aW9ucyA9IGNpZnNfY3JlYXRlX29wdGlvbnMoY2lmc19zYiwgMCksXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMjQyMi1cXHRcXHQuZmlkID0gXFx1MDAyNmZpZCxcXG4tLVxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jPTI0NTQ9c21iMl9xdWVyeV9kaXJfZmlyc3QoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfdGNvbiAqdGNvbixcXG4tLVxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jLTI0OTktXFx0XFx0LmRpc3Bvc2l0aW9uID0gRklMRV9PUEVOLFxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jOjI1MDA6XFx0XFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCAwKSxcXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0yNTAxLVxcdFxcdC5maWQgPSBmaWQsXFxuLS1cXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYz0yODMwPXNtYjJfcXVlcnlfaW5mb19jb21wb3VuZChjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMjg5MC1cXHRcXHQuZGlzcG9zaXRpb24gPSBGSUxFX09QRU4sXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM6Mjg5MTpcXHRcXHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIDApLFxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jLTI4OTItXFx0XFx0LmZpZCA9IFxcdTAwMjZmaWQsXFxuLS1cXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYz0zMDI3PXNtYjMxMV9xdWVyeWZzKGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sXFxuLS1cXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0zMDQzLVxcdFxcdC5kaXNwb3NpdGlvbiA9IEZJTEVfT1BFTixcXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYzozMDQ0OlxcdFxcdC5jcmVhdGVfb3B0aW9ucyA9IGNpZnNfY3JlYXRlX29wdGlvbnMoY2lmc19zYiwgMCksXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtMzA0NS1cXHRcXHQuZmlkID0gXFx1MDAyNmZpZCxcXG4tLVxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jPTMyMzg9Z2V0X3NtYjJfYWNsX2J5X3BhdGgoc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYixcXG4tLVxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jLTMyNzQtXFx0XFx0ICovXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM6MzI3NTpcXHRcXHQuY3JlYXRlX29wdGlvbnMgPSBjaWZzX2NyZWF0ZV9vcHRpb25zKGNpZnNfc2IsIDApIHxcXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0zMjc2LVxcdFxcdFxcdFxcdCAgT1BFTl9SRVBBUlNFX1BPSU5ULFxcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmM9MzMwND1zZXRfc21iMl9hY2woc3RydWN0IHNtYl9udHNkICpwbm50c2QsIF9fdTMyIGFjbGxlbixcXG4tLVxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jLTMzMzktXFx0XFx0LmRlc2lyZWRfYWNjZXNzID0gYWNjZXNzX2ZsYWdzLFxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jOjMzNDA6XFx0XFx0LmNyZWF0ZV9vcHRpb25zID0gY2lmc19jcmVhdGVfb3B0aW9ucyhjaWZzX3NiLCAwKSxcXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy0zMzQxLVxcdFxcdC5kaXNwb3NpdGlvbiA9IEZJTEVfT1BFTixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTg6NDA6MjUuNjYzNjg1MDQyWiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwNTQ5MjYwODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIENJRlMgQ3JlYXRlIE9wZXJhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIGF0IHRoaXMgcGF0Y2ggcmVtb3ZpbmcgdGhlIGBleGNsYCBhcmd1bWVudCBmcm9tIHRoZSBgY2lmc19jcmVhdGVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBiZWZvcmUgdGhpcyBtb2RpZmljYXRpb24sIHRoZSBgY2lmc19jcmVhdGVgIGZ1bmN0aW9uIGl0c2VsZiBkaWRuJ3QgZXZlbiAqdXNlKiB0aGUgYGV4Y2xgIHBhcmFtZXRlciwgcmlnaHQ/IEl0IHdhcyBlZmZlY3RpdmVseSBiZWluZyBpZ25vcmVkOlxuYGBgY1xuaW50IGNpZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcblx0XHRzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpXG5gYGBcblNvLCBhcyBJIHVuZGVyc3RhbmQgaXQsIHRoaXMgcGF0Y2ggaXMgcHVyZWx5IGEgcmVmYWN0b3Jpbmcgb3BlcmF0aW9uLiBJdCdzIGFib3V0IGNsZWFuaW5nIHVwIHRoZSBBUEksIG1ha2luZyB0aGluZ3MgbW9yZSBzdHJlYW1saW5lZC4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gbm90ZTsgaXQncyAqbm90KiBhIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5MZXQgbWUgYnJlYWsgZG93biBteSB1bmRlcnN0YW5kaW5nIGZvciBjbGFyaXR5OlxuKiAgIFRoZSBwcmltYXJ5IGNoYW5nZSBpcyB0aGUgcmVtb3ZhbCBvZiB0aGUgYGV4Y2xgIGFyZ3VtZW50IGZyb20gdGhlIGBjcmVhdGVgIGlub2RlIG9wZXJhdGlvbi5cbiogICBUaGUgVkZTIGZ1bmN0aW9ucyBgdmZzX2NyZWF0ZWAgYW5kIGBsb29rdXBfb3BlbmAgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gKm5vIGxvbmdlciogcGFzcyB0aGlzIGBleGNsYCBmbGFnLlxuKiAgIEZpbGVzeXN0ZW1zIGFyZSBiZWluZyB1cGRhdGVkIHRvIGRyb3AgdGhlIGBleGNsYCBhcmd1bWVudCBmcm9tIHRoZWlyIGNvcnJlc3BvbmRpbmcgaW1wbGVtZW50YXRpb25zIGFzIHdlbGwuXG4qICAgVGhlIGZldyBmaWxlc3lzdGVtcyB0aGF0IHdlcmUgcHJldmlvdXNseSBmb3J3YXJkaW5nIGFuIGBleGNsYCBhcmd1bWVudCBpbiBjYWxscyB0byBpbnRlcm5hbCBmdW5jdGlvbnMgc3VjaCBhcyBgZ2ZzMmAsIGBuZnNgLCBhbmQgYHZib3hzZmAsIG5vdyBjb25zaXN0ZW50bHkgcGFzcyBhIHZhbHVlIGxpa2UgYDFgLCBgdHJ1ZWAsIG9yIGBPX0VYQ0xgLCBpbiBhbGlnbm1lbnQgd2l0aCB0aGUgcHJldmlvdXMgYmVoYXZpb3IuIFNpbmNlIGB2ZnNfY3JlYXRlYCBhbHdheXMgcGFzc2VkIGB0cnVlYCBhbmQgdGhlIG9yaWdpbmFsIGBsb29rdXBfb3BlbmAgcGFzc2VkIGBvcGVuX2ZsYWcgXHUwMDI2IE9fRVhDTGAgYW5kIHRoZXJlIGlzIGBpbm9kZV9sb2NrYCBvbiBub24tZXhjbHVzaXZlIGNyZWF0ZXMsIHRoZSBwYXJhbWV0ZXIgd2FzIHJlZHVuZGFudC5cbiogICBOZXR3b3JrIGZpbGVzeXN0ZW1zLCB3aGljaCBzaG91bGQgdXNlIGBhdG9taWNfb3BlbmAgZm9yIG5vbi1leGNsdXNpdmUgY3JlYXRlcywgYXJlIGFscmVhZHkgZG9pbmcgc28gKGUuZy4gYGdmczJgLCBgbmZzYCwgYHZib3hzZmAsIGBjaWZzYCwgYDlwYCwgYW5kIGBmdXNlYCkuXG5cblRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gY2hhbmdlIGluIHRoZSBrZXJuZWwncyBsb2dpY2FsIGJlaGF2aW9yIHRoYXQgbmVjZXNzaXRhdGVzIGZ1enppbmcuIEl0J3MgYSBwdXJlIEFQSSByZWZhY3RvciBhbmQgSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYCBhbmQgZXhwbGFpbiB0aGF0IHRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgQVBJIHJlZmFjdG9yaW5nIG9mIHRoZSBWRlMgYGNyZWF0ZWAgaW5vZGUgb3BlcmF0aW9uLiBUaGUgcGF0Y2ggcmVtb3ZlcyBhIHJlZHVuZGFudCBhcmd1bWVudCwgYnV0IGxlYXZlcyB0aGUga2VybmVsIGxvZ2ljIHVudG91Y2hlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIzMjgsIk91dHB1dFRva2VucyI6MTkwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE4OjQwOjM0LjcxODYxNDM4N1oiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2MDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBpcyBhIHRyZWUtd2lkZSBBUEkgcmVmYWN0b3JpbmcgdGhhdCByZW1vdmVzIHRoZSByZWR1bmRhbnQgJ2V4Y2wnIGFyZ3VtZW50IGZyb20gdGhlICdjcmVhdGUnIGlub2RlIG9wZXJhdGlvbi4gVkZTIHByZXZpb3VzbHkgcGFzc2VkICd0cnVlJyBmcm9tIHZmc19jcmVhdGUoKSBhbmQgJ29wZW5fZmxhZyBcXHUwMDI2IE9fRVhDTCcgZnJvbSBsb29rdXBfb3BlbigpLiBIb3dldmVyLCBmb3IgbG9jYWwgZmlsZXN5c3RlbXMsIFZGUyBob2xkcyB0aGUgaW5vZGVfbG9jayBkdXJpbmcgY3JlYXRlLCBtYWtpbmcgY29uY3VycmVudCBjcmVhdGlvbiBpbXBvc3NpYmxlIGFuZCB0aGUgJ2V4Y2wnIGFyZ3VtZW50IHJlZHVuZGFudC4gRm9yIG5ldHdvcmsgZmlsZXN5c3RlbXMsIG5vbi1leGNsdXNpdmUgY3JlYXRlcyBhcmUgaGFuZGxlZCB2aWEgYXRvbWljX29wZW4oKS4gVGhlIGZpbGVzeXN0ZW1zIHRoYXQgdXNlZCB0aGUgYXJndW1lbnQgaW50ZXJuYWxseSAobGlrZSBnZnMyLCBuZnMsIHZib3hzZikgbm93IGhhcmRjb2RlICd0cnVlJyBvciAnT19FWENMJywgd2hpY2ggZXhhY3RseSBtYXRjaGVzIHRoZSBwcmV2aW91cyBiZWhhdmlvciB3aGVuIGNhbGxlZCBmcm9tIHZmc19jcmVhdGUuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBpcyBhIHRyZWUtd2lkZSBBUEkgcmVmYWN0b3JpbmcgdGhhdCByZW1vdmVzIHRoZSByZWR1bmRhbnQgJ2V4Y2wnIGFyZ3VtZW50IGZyb20gdGhlICdjcmVhdGUnIGlub2RlIG9wZXJhdGlvbi4gVkZTIHByZXZpb3VzbHkgcGFzc2VkICd0cnVlJyBmcm9tIHZmc19jcmVhdGUoKSBhbmQgJ29wZW5fZmxhZyBcXHUwMDI2IE9fRVhDTCcgZnJvbSBsb29rdXBfb3BlbigpLiBIb3dldmVyLCBmb3IgbG9jYWwgZmlsZXN5c3RlbXMsIFZGUyBob2xkcyB0aGUgaW5vZGVfbG9jayBkdXJpbmcgY3JlYXRlLCBtYWtpbmcgY29uY3VycmVudCBjcmVhdGlvbiBpbXBvc3NpYmxlIGFuZCB0aGUgJ2V4Y2wnIGFyZ3VtZW50IHJlZHVuZGFudC4gRm9yIG5ldHdvcmsgZmlsZXN5c3RlbXMsIG5vbi1leGNsdXNpdmUgY3JlYXRlcyBhcmUgaGFuZGxlZCB2aWEgYXRvbWljX29wZW4oKS4gVGhlIGZpbGVzeXN0ZW1zIHRoYXQgdXNlZCB0aGUgYXJndW1lbnQgaW50ZXJuYWxseSAobGlrZSBnZnMyLCBuZnMsIHZib3hzZikgbm93IGhhcmRjb2RlICd0cnVlJyBvciAnT19FWENMJywgd2hpY2ggZXhhY3RseSBtYXRjaGVzIHRoZSBwcmV2aW91cyBiZWhhdmlvciB3aGVuIGNhbGxlZCBmcm9tIHZmc19jcmVhdGUuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5k2rf[1] Phase: Running StartedAt: 2026-07-01 18:40:47 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5k2rf[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-01 18:40:47 +0000 UTC FinishedAt: 2026-07-01 18:40:55 +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,}