Name: series-workflow9xb7x Phase: Succeeded StartedAt: 2026-08-05 22:34:14 +0000 UTC FinishedAt: 2026-08-06 02:17:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xb7x[0] Phase: Succeeded StartedAt: 2026-08-05 22:34:14 +0000 UTC FinishedAt: 2026-08-05 22:38:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xb7x[0].run-triage Phase: Succeeded StartedAt: 2026-08-05 22:34:14 +0000 UTC FinishedAt: 2026-08-05 22:38:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a23b36233d4103def55dc8cf65698106d0bd1e62", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETCONSOLE", "NETCONSOLE_DYNAMIC", "IPV6", "CONFIGFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a23b36233d4103def55dc8cf65698106d0bd1e62", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETCONSOLE", "NETCONSOLE_DYNAMIC", "IPV6", "CONFIGFS_FS" ], "series_id": "249de7e2-0a54-4d11-b9d8-30d6aad6a6da" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "local_ip_store", "remote_ip_store", "enabled_store", "netcons_netpoll_setup", "netpoll_send_udp", "netconsole_parser_cmdline", "netpoll_parse_ip_addr" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVENPTlNPTEUmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRV9EWU5BTUlDJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7Q09ORklHRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsb2NhbF9pcF9zdG9yZSYjMzQ7LAogICAgJiMzNDtyZW1vdGVfaXBfc3RvcmUmIzM0OywKICAgICYjMzQ7ZW5hYmxlZF9zdG9yZSYjMzQ7LAogICAgJiMzNDtuZXRjb25zX25ldHBvbGxfc2V0dXAmIzM0OywKICAgICYjMzQ7bmV0cG9sbF9zZW5kX3VkcCYjMzQ7LAogICAgJiMzNDtuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lJiMzNDssCiAgICAmIzM0O25ldHBvbGxfcGFyc2VfaXBfYWRkciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0Y29uc29sZSBkcml2ZXIgdG8gdXNlIGEgbmV3IGBzdHJ1Y3QgaW5ldF9hZGRyYCB0aGF0IGV4cGxpY2l0bHkgdHJhY2tzIHRoZSBJUCBhZGRyZXNzIGZhbWlseSAoQUZfSU5FVCwgQUZfSU5FVDYsIG9yIEFGX1VOU1BFQykgaW5zdGVhZCBvZiByZWx5aW5nIG9uIGEgYm9vbGVhbiBmbGFnIGFuZCB6ZXJvLWNoZWNrcy4gVGhpcyBhZmZlY3RzIGhvdyBsb2NhbCBhbmQgcmVtb3RlIElQIGFkZHJlc3NlcyBhcmUgcGFyc2VkLCBzdG9yZWQsIGFuZCB1c2VkIGZvciBVRFAgZW5jYXBzdWxhdGlvbiBpbiBuZXRwb2xsLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIG1vZHVsZSBwYXJhbWV0ZXJzIGF0IGJvb3QvbG9hZCB0aW1lIGFuZCBkeW5hbWljYWxseSB2aWEgY29uZmlnZnMgYXR0cmlidXRlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIGNvbmZpZ2ZzIHN0b3JlIGNhbGxiYWNrcywgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgcGFyc2VyLCBhbmQgdGhlIG5ldHBvbGwgc2V0dXAgYW5kIHNlbmQgcGF0aHMgdG8gZW5zdXJlIHRoZSBuZXcgYWRkcmVzcyBmYW1pbHkgbG9naWMgaGFuZGxlcyBhbGwgZWRnZSBjYXNlcyBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6MzY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5Nzg2YjU3ODY2NzQ4ZTNkNWFmZjhhMjRkYTAwMTYwODBjMzZjMWRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgNSAyMjozNjowOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbmluZGV4IDAzOTEzMzAyMzI4Y2MuLjY5NjIxNzA1ZDY4ZGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuQEAgLTE4MSw3ICYjNDM7MTgxLDYgQEAgZW51bSB0YXJnZXRfc3RhdGUge1xuICAqXHRcdGxvY2FsX21hY1x0KHJlYWQtb25seSlcbiAgKiBAbG9jYWxfaXA6XHRTb3VyY2UgSVAgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbiAgKiBAcmVtb3RlX2lwOlx0RGVzdGluYXRpb24gSVAgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbi0gKiBAaXB2NjpcdFdoZXRoZXIgdGhlIHRhcmdldCBhZGRyZXNzZXMgYXJlIElQdjYgKHJlYWQtd3JpdGUpLlxuICAqIEBsb2NhbF9wb3J0Olx0U291cmNlIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuICAqIEByZW1vdGVfcG9ydDogRGVzdGluYXRpb24gVURQIHBvcnQgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXG4gICogQHJlbW90ZV9tYWM6XHREZXN0aW5hdGlvbiBldGhlcm5ldCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuQEAgLTIxMiw4ICYjNDM7MjExLDcgQEAgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcbiBcdGJvb2xcdFx0XHRleHRlbmRlZDtcbiBcdGJvb2xcdFx0XHRyZWxlYXNlO1xuIFx0c3RydWN0IG5ldHBvbGxcdFx0bnA7XG4tXHR1bmlvbiBpbmV0X2FkZHJcdFx0bG9jYWxfaXAsIHJlbW90ZV9pcDtcbi1cdGJvb2xcdFx0XHRpcHY2O1xuJiM0MztcdHN0cnVjdCBpbmV0X2FkZHJcdGxvY2FsX2lwLCByZW1vdGVfaXA7XG4gXHR1MTZcdFx0XHRsb2NhbF9wb3J0LCByZW1vdGVfcG9ydDtcbiBcdHU4XHRcdFx0cmVtb3RlX21hY1tFVEhfQUxFTl07XG4gXHQvKiBwcm90ZWN0ZWQgYnkgdGFyZ2V0X2xpc3RfbG9jazsgJiM0MzsxIGdpdmVzIHNjbnByaW50ZigpIHJvb20gZm9yIGl0c1xuQEAgLTQxNSw2ICYjNDM7NDEzLDcgQEAgc3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0LyogR290IHRoZSBJUCwgbGV0JiMzOTtzIHJldHVybiAqL1xuIFx0XHRcdG50LVx1MDAzZWxvY2FsX2lwLmluNiA9IGlmcC1cdTAwM2VhZGRyO1xuJiM0MztcdFx0XHRudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPSBBRl9JTkVUNjtcbiBcdFx0XHRlcnIgPSAwO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtNDU2LDI4ICYjNDM7NDU1LDEyIEBAIHN0YXRpYyBpbnQgbmV0Y29uc190YWtlX2lwdjQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcdH1cbiBcbiBcdG50LVx1MDAzZWxvY2FsX2lwLmlwID0gaWZhLVx1MDAzZWlmYV9sb2NhbDtcbiYjNDM7XHRudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPSBBRl9JTkVUO1xuIFx0bnBfaW5mbyhucCwgXCYjMzQ7bG9jYWwgSVAgJXBJNFxcblwmIzM0OywgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXAuaXApO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLS8qXG4tICogVGVzdCB3aGV0aGVyIHRoZSBjYWxsZXIgbGVmdCBudC1cdTAwM2Vsb2NhbF9pcCB1bnNldCwgc28gdGhhdFxuLSAqIG5ldGNvbnNfbmV0cG9sbF9zZXR1cCgpIHNob3VsZCBhdXRvLXBvcHVsYXRlIGl0IGZyb20gdGhlIGVncmVzcyBkZXZpY2UuXG4tICpcbi0gKiBudC1cdTAwM2Vsb2NhbF9pcCBpcyBhIHVuaW9uIG9mIF9fYmUzMiAoSVB2NCkgYW5kIHN0cnVjdCBpbjZfYWRkciAoSVB2NiksXG4tICogc28gYW4gSVB2NiBhZGRyZXNzIHdob3NlIGZpcnN0IDQgYnl0ZXMgYXJlIHplcm8gKGUuZy4gOjoxLCA6OjIsXG4tICogSVB2NC1tYXBwZWQgOjpmZmZmOmEuYi5jLmQpIG11c3Qgbm90IGJlIHRlc3RlZCB2aWEgdGhlIElQdjQgYXJtIOKAlFxuLSAqIGRvaW5nIHNvIHdvdWxkIG1pc2NsYXNzaWZ5IGEgY2FsbGVyLXN1cHBsaWVkIGFkZHJlc3MgYXMgdW5zZXQgYW5kXG4tICogc2lsZW50bHkgb3ZlcndyaXRlIGl0IHdpdGggd2hhdGV2ZXIgYWRkcmVzcyB0aGUgZGV2aWNlIGV4cG9zZXMuXG4tICovXG4tc3RhdGljIGJvb2wgbmV0Y29uc19sb2NhbF9pcF91bnNldChjb25zdCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuLXtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuLVx0XHRyZXR1cm4gaXB2Nl9hZGRyX2FueShcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pbjYpO1xuLVx0cmV0dXJuICFudC1cdTAwM2Vsb2NhbF9pcC5pcDtcbi19XG4tXG4gc3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBjdXJyZW50LVx1MDAzZW5zcHJveHktXHUwMDNlbmV0X25zO1xuQEAgLTQ4OCw2ICYjNDM7NDcxLDE5IEBAIHN0YXRpYyBpbnQgbmV0Y29uc19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4gXHRpbnQgZXJyO1xuIFxuIFx0cnRubF9sb2NrKCk7XG4mIzQzO1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKSB7XG4mIzQzO1x0XHRucF9lcnIobnAsIFwmIzM0O3JlbW90ZSBJUCBhZGRyZXNzIG5vdCBjb25maWd1cmVkLCBhYm9ydGluZ1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRlcnIgPSAtRURFU1RBRERSUkVRO1xuJiM0MztcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IEFGX1VOU1BFQyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgbnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkpIHtcbiYjNDM7XHRcdG5wX2VycihucCwgXCYjMzQ7bG9jYWwgYW5kIHJlbW90ZSBJUCBhZGRyZXNzIGZhbWlsaWVzIGRpZmZlciwgYWJvcnRpbmdcXG5cJiMzNDspO1xuJiM0MztcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAobnAtXHUwMDNlZGV2X25hbWVbMF0pXG4gXHRcdG5kZXYgPSBfX2Rldl9nZXRfYnlfbmFtZShuZXQsIG5wLVx1MDAzZWRldl9uYW1lKTtcbiBcdGVsc2UgaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIobnAtXHUwMDNlZGV2X21hYykpXG5AQCAtNTIzLDE2ICYjNDM7NTE5LDEzIEBAIHN0YXRpYyBpbnQgbmV0Y29uc19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4gXHRcdHJ0bmxfbG9jaygpO1xuIFx0fVxuIFxuLVx0aWYgKG5ldGNvbnNfbG9jYWxfaXBfdW5zZXQobnQpKSB7XG4tXHRcdGlmICghbnQtXHUwMDNlaXB2Nikge1xuLVx0XHRcdGVyciA9IG5ldGNvbnNfdGFrZV9pcHY0KG50LCBuZGV2KTtcbi1cdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0Z290byBwdXQ7XG4tXHRcdH0gZWxzZSB7XG4mIzQzO1x0aWYgKG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpIHtcbiYjNDM7XHRcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRcdGVyciA9IG5ldGNvbnNfdGFrZV9pcHY2KG50LCBuZGV2KTtcbi1cdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0Z290byBwdXQ7XG4tXHRcdH1cbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0ZXJyID0gbmV0Y29uc190YWtlX2lwdjQobnQsIG5kZXYpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBwdXQ7XG4gXHRcdGlwX292ZXJ3cml0dGVuID0gdHJ1ZTtcbiBcdH1cbiBcbkBAIC03MTQsMjQgJiM0Mzs3MDcsMjQgQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiBcdHN0cnVjdCBuZXRwb2xsICpucCA9IFx1MDAyNm50LVx1MDAzZW5wO1xuIFxuIFx0bnBfaW5mbyhucCwgXCYjMzQ7bG9jYWwgcG9ydCAlZFxcblwmIzM0OywgbnQtXHUwMDNlbG9jYWxfcG9ydCk7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbiYjNDM7XHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRucF9pbmZvKG5wLCBcJiMzNDtsb2NhbCBJUHY2IGFkZHJlc3MgJXBJNmNcXG5cJiMzNDssIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmluNik7XG4gXHRlbHNlXG4gXHRcdG5wX2luZm8obnAsIFwmIzM0O2xvY2FsIElQdjQgYWRkcmVzcyAlcEk0XFxuXCYjMzQ7LCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pcCk7XG4gXHRucF9pbmZvKG5wLCBcJiMzNDtpbnRlcmZhY2UgbmFtZSAmIzM5OyVzJiMzOTtcXG5cJiMzNDssIG5wLVx1MDAzZWRldl9uYW1lKTtcbiBcdG5wX2luZm8obnAsIFwmIzM0O2xvY2FsIGV0aGVybmV0IGFkZHJlc3MgJiMzOTslcE0mIzM5O1xcblwmIzM0OywgbnAtXHUwMDNlZGV2X21hYyk7XG4gXHRucF9pbmZvKG5wLCBcJiMzNDtyZW1vdGUgcG9ydCAlZFxcblwmIzM0OywgbnQtXHUwMDNlcmVtb3RlX3BvcnQpO1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4mIzQzO1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdG5wX2luZm8obnAsIFwmIzM0O3JlbW90ZSBJUHY2IGFkZHJlc3MgJXBJNmNcXG5cJiMzNDssIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcC5pbjYpO1xuIFx0ZWxzZVxuIFx0XHRucF9pbmZvKG5wLCBcJiMzNDtyZW1vdGUgSVB2NCBhZGRyZXNzICVwSTRcXG5cJiMzNDssIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcC5pcCk7XG4gXHRucF9pbmZvKG5wLCBcJiMzNDtyZW1vdGUgZXRoZXJuZXQgYWRkcmVzcyAlcE1cXG5cJiMzNDssIG50LVx1MDAzZXJlbW90ZV9tYWMpO1xuIH1cbiBcbi0vKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgdW5pb24uIFJldHVybiAwIGlmIElQdjQgaXNcbi0gKiBwb3B1bGF0ZWQsIDEgaWYgSVB2NiBpcyBwb3B1bGF0ZWQsIGFuZCAtMSB1cG9uIGZhaWx1cmUuXG4mIzQzOy8qIFBhcnNlIHRoZSBzdHJpbmcgYW5kIHBvcHVsYXRlIHRoZSBgaW5ldF9hZGRyYCBzdHJ1Y3QuIFJldHVybiAwIG9uIHN1Y2Nlc3NcbiYjNDM7ICogYW5kIC0xIHVwb24gZmFpbHVyZS5cbiAgKi9cbi1zdGF0aWMgaW50IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjb25zdCBjaGFyICpzdHIsIHVuaW9uIGluZXRfYWRkciAqYWRkcilcbiYjNDM7c3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgaW5ldF9hZGRyICphZGRyKVxuIHtcbiBcdGNvbnN0IGNoYXIgKmVuZCA9IE5VTEw7XG4gXHRpbnQgbGVuO1xuQEAgLTc0MywxNCAmIzQzOzczNiwxOCBAQCBzdGF0aWMgaW50IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjb25zdCBjaGFyICpzdHIsIHVuaW9uIGluZXRfYWRkciAqYWRkcilcbiBcdGlmIChzdHJbbGVuIC0gMV0gPT0gJiMzOTtcXG4mIzM5OylcbiBcdFx0bGVuIC09IDE7XG4gXG4tXHRpZiAoaW40X3B0b24oc3RyLCBsZW4sICh2b2lkICopYWRkciwgLTEsIFx1MDAyNmVuZCkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4tXHQgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJiMzOTtcXG4mIzM5OykpXG4mIzQzO1x0aWYgKGluNF9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKVx1MDAyNmFkZHItXHUwMDNlaXAsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoIWVuZCB8fCAqZW5kID09IDAgfHwgKmVuZCA9PSAmIzM5O1xcbiYjMzk7KSkge1xuJiM0MztcdFx0YWRkci1cdTAwM2VmYW1pbHkgPSBBRl9JTkVUO1xuIFx0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4gXG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikgXHUwMDI2XHUwMDI2XG4tXHQgICAgaW42X3B0b24oc3RyLCBsZW4sICh2b2lkICopYWRkciwgLTEsIFx1MDAyNmVuZCkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4tXHQgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJiMzOTtcXG4mIzM5OykpXG4tXHRcdHJldHVybiAxO1xuJiM0MztcdCAgICBpbjZfcHRvbihzdHIsIGxlbiwgKHZvaWQgKilcdTAwMjZhZGRyLVx1MDAzZWluNiwgLTEsIFx1MDAyNmVuZCkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICYjMzk7XFxuJiMzOTspKSB7XG4mIzQzO1x0XHRhZGRyLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ2O1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIC0xO1xuIH1cbkBAIC04NTUsMjAgJiM0Mzs4NTIsMjAgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbiB7XG4gXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuIFxuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4mIzQzO1x0aWYgKG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbiBcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslcEk2Y1xcblwmIzM0OywgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXAuaW42KTtcbiBcdGVsc2Vcbi1cdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslcEk0XFxuXCYjMzQ7LCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcCk7XG4mIzQzO1x0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVwSTRcXG5cJiMzNDssIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmlwKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4ge1xuIFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiBcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuJiM0MztcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVwSTZjXFxuXCYjMzQ7LCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXAuaW42KTtcbiBcdGVsc2Vcbi1cdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslcEk0XFxuXCYjMzQ7LCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApO1xuJiM0MztcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslcEk0XFxuXCYjMzQ7LCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXAuaXApO1xuIH1cbiBcbiBzdGF0aWMgc3NpemVfdCBsb2NhbF9tYWNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbkBAIC0xMjEzLDcgJiM0MzsxMjEwLDYgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4ge1xuIFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiBcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbi1cdGludCBpcHY2O1xuIFxuIFx0ZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTtcbiBcdGlmIChudC1cdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKSB7XG5AQCAtMTIyMiwxMCAmIzQzOzEyMTgsOCBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuLVx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwKTtcbi1cdGlmIChpcHY2ID09IC0xKVxuJiM0MztcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcCkgXHUwMDNjIDApXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbi1cdG50LVx1MDAzZWlwdjYgPSAhIWlwdjY7XG4gXG4gXHRyZXQgPSBjb3VudDtcbiBvdXRfdW5sb2NrOlxuQEAgLTEyMzgsNyAmIzQzOzEyMzIsNiBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4ge1xuIFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiBcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbi1cdGludCBpcHY2O1xuIFxuIFx0ZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTtcbiBcdGlmIChudC1cdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKSB7XG5AQCAtMTI0NywxMCAmIzQzOzEyNDAsOCBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbi1cdGlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApO1xuLVx0aWYgKGlwdjYgPT0gLTEpXG4mIzQzO1x0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcCkgXHUwMDNjIDApXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbi1cdG50LVx1MDAzZWlwdjYgPSAhIWlwdjY7XG4gXG4gXHRyZXQgPSBjb3VudDtcbiBvdXRfdW5sb2NrOlxuQEAgLTIwNjEsNyAmIzQzOzIwNTIsNyBAQCBzdGF0aWMgdm9pZCBuZXRwb2xsX3VkcF9jaGVja3N1bShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFxuIFx0LyogY2hlY2sgbmVlZHMgdG8gYmUgc2V0LCBzaW5jZSBpdCB3aWxsIGJlIGNvbnN1bWVkIGluIGNzdW1fcGFydGlhbCAqL1xuIFx0dWRwaC1cdTAwM2VjaGVjayA9IDA7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbiYjNDM7XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbiBcdFx0dWRwaC1cdTAwM2VjaGVjayA9IGNzdW1faXB2Nl9tYWdpYyhcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pbjYsXG4gXHRcdFx0XHRcdCAgICAgIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcC5pbjYsXG4gXHRcdFx0XHRcdCAgICAgIHVkcF9sZW4sIElQUFJPVE9fVURQLFxuQEAgLTIxMDIsNyAmIzQzOzIwOTMsNyBAQCBzdGF0aWMgdm9pZCBwdXNoX2V0aChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbiBcdGV0aGVyX2FkZHJfY29weShldGgtXHUwMDNlaF9zb3VyY2UsIG5wLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcik7XG4gXHRldGhlcl9hZGRyX2NvcHkoZXRoLVx1MDAzZWhfZGVzdCwgbnQtXHUwMDNlcmVtb3RlX21hYyk7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbiYjNDM7XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcbiBcdGVsc2VcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7XG5AQCAtMjE3MSw3ICYjNDM7MjE2Miw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG4gXHRcdFdBUk5fT05fT05DRSghaXJxc19kaXNhYmxlZCgpKTtcbiBcbiBcdHVkcF9sZW4gPSBsZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4mIzQzO1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdGlwX2xlbiA9IHVkcF9sZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcbiBcdGVsc2VcbiBcdFx0aXBfbGVuID0gdWRwX2xlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwaGRyKTtcbkBAIC0yMTg3LDcgJiM0MzsyMTc4LDcgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbiBcdHNrYl9wdXQoc2tiLCBsZW4pO1xuIFxuIFx0cHVzaF91ZHAobnQsIHNrYiwgbGVuKTtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuJiM0MztcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRwdXNoX2lwdjYobnQsIHNrYiwgbGVuKTtcbiBcdGVsc2VcbiBcdFx0cHVzaF9pcHY0KG50LCBza2IsIGxlbik7XG5AQCAtMjUwNywxMCAmIzQzOzI0OTgsOCBAQCBfX3JlbGVhc2VzKFx1MDAyNnRhcmdldF9saXN0X2xvY2spXG4gc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdClcbiB7XG4gXHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcdTAwMjZudC1cdTAwM2VucDtcbi1cdGJvb2wgaXB2ZXJzaW9uX3NldCA9IGZhbHNlO1xuIFx0Y2hhciAqY3VyID0gb3B0O1xuIFx0Y2hhciAqZGVsaW07XG4tXHRpbnQgaXB2NjtcbiBcbiBcdGlmICgqY3VyICE9ICYjMzk7QCYjMzk7KSB7XG4gXHRcdGRlbGltID0gc3RyY2hyKGN1ciwgJiMzOTtAJiMzOTspO1xuQEAgLTI1MjQsMTYgJiM0MzsyNTEzLDEyIEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpXG4gXHRjdXImIzQzOyYjNDM7O1xuIFxuIFx0aWYgKCpjdXIgIT0gJiMzOTsvJiMzOTspIHtcbi1cdFx0aXB2ZXJzaW9uX3NldCA9IHRydWU7XG4gXHRcdGRlbGltID0gc3RyY2hyKGN1ciwgJiMzOTsvJiMzOTspO1xuIFx0XHRpZiAoIWRlbGltKVxuIFx0XHRcdGdvdG8gcGFyc2VfZmFpbGVkO1xuIFx0XHQqZGVsaW0gPSAwO1xuLVx0XHRpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApO1xuLVx0XHRpZiAoaXB2NiBcdTAwM2MgMClcbiYjNDM7XHRcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcCkgXHUwMDNjIDApXG4gXHRcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4tXHRcdGVsc2Vcbi1cdFx0XHRudC1cdTAwM2VpcHY2ID0gKGJvb2wpaXB2NjtcbiBcdFx0Y3VyID0gZGVsaW07XG4gXHR9XG4gXHRjdXImIzQzOyYjNDM7O1xuQEAgLTI1NzUsMTMgJiM0MzsyNTYwLDExIEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpXG4gXHRpZiAoIWRlbGltKVxuIFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbiBcdCpkZWxpbSA9IDA7XG4tXHRpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwKTtcbi1cdGlmIChpcHY2IFx1MDAzYyAwKVxuJiM0MztcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbi1cdGVsc2UgaWYgKGlwdmVyc2lvbl9zZXQgXHUwMDI2XHUwMDI2IG50LVx1MDAzZWlwdjYgIT0gKGJvb2wpaXB2NilcbiYjNDM7XHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IEFGX1VOU1BFQyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgbnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkpXG4gXHRcdGdvdG8gcGFyc2VfZmFpbGVkO1xuLVx0ZWxzZVxuLVx0XHRudC1cdTAwM2VpcHY2ID0gKGJvb2wpaXB2NjtcbiBcdGN1ciA9IGRlbGltICYjNDM7IDE7XG4gXG4gXHRpZiAoKmN1ciAhPSAwKSB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmggYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxuaW5kZXggMWM2YjFlZWM1ZWZkNi4uZGU5N2YwMDFhMGY5YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxuQEAgLTE2LDkgJiM0MzsxNiwxMyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91ZHAuaFx1MDAzZVxuIFxuLXVuaW9uIGluZXRfYWRkciB7XG4tXHRfX2JlMzJcdFx0aXA7XG4tXHRzdHJ1Y3QgaW42X2FkZHJcdGluNjtcbiYjNDM7c3RydWN0IGluZXRfYWRkciB7XG4mIzQzO1x0LyogQWRkcmVzcyBmYW1pbHk6IEFGX1VOU1BFQyB3aGVuIHVuc2V0LCBlbHNlIEFGX0lORVQgb3IgQUZfSU5FVDYgKi9cbiYjNDM7XHR1OFx0XHRcdGZhbWlseTtcbiYjNDM7XHR1bmlvbiB7XG4mIzQzO1x0XHRfX2JlMzJcdFx0aXA7XG4mIzQzO1x0XHRzdHJ1Y3QgaW42X2FkZHJcdGluNjtcbiYjNDM7XHR9O1xuIH07XG4gXG4gc3RydWN0IG5ldHBvbGwge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRDT05TT0xFJiMzNDssCiAgICAmIzM0O05FVENPTlNPTEVfRFlOQU1JQyYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bG9jYWxfaXBfc3RvcmUmIzM0OywKICAgICYjMzQ7cmVtb3RlX2lwX3N0b3JlJiMzNDssCiAgICAmIzM0O2VuYWJsZWRfc3RvcmUmIzM0OywKICAgICYjMzQ7bmV0Y29uc19uZXRwb2xsX3NldHVwJiMzNDssCiAgICAmIzM0O25ldHBvbGxfc2VuZF91ZHAmIzM0OywKICAgICYjMzQ7bmV0Y29uc29sZV9wYXJzZXJfY21kbGluZSYjMzQ7LAogICAgJiMzNDtuZXRwb2xsX3BhcnNlX2lwX2FkZHImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGNvbnNvbGUgZHJpdmVyIHRvIHVzZSBhIG5ldyBgc3RydWN0IGluZXRfYWRkcmAgdGhhdCBleHBsaWNpdGx5IHRyYWNrcyB0aGUgSVAgYWRkcmVzcyBmYW1pbHkgKEFGX0lORVQsIEFGX0lORVQ2LCBvciBBRl9VTlNQRUMpIGluc3RlYWQgb2YgcmVseWluZyBvbiBhIGJvb2xlYW4gZmxhZyBhbmQgemVyby1jaGVja3MuIFRoaXMgYWZmZWN0cyBob3cgbG9jYWwgYW5kIHJlbW90ZSBJUCBhZGRyZXNzZXMgYXJlIHBhcnNlZCwgc3RvcmVkLCBhbmQgdXNlZCBmb3IgVURQIGVuY2Fwc3VsYXRpb24gaW4gbmV0cG9sbC4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBtb2R1bGUgcGFyYW1ldGVycyBhdCBib290L2xvYWQgdGltZSBhbmQgZHluYW1pY2FsbHkgdmlhIGNvbmZpZ2ZzIGF0dHJpYnV0ZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBjb25maWdmcyBzdG9yZSBjYWxsYmFja3MsIHRoZSBtb2R1bGUgcGFyYW1ldGVyIHBhcnNlciwgYW5kIHRoZSBuZXRwb2xsIHNldHVwIGFuZCBzZW5kIHBhdGhzIHRvIGVuc3VyZSB0aGUgbmV3IGFkZHJlc3MgZmFtaWx5IGxvZ2ljIGhhbmRsZXMgYWxsIGVkZ2UgY2FzZXMgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTc4NmI1Nzg2Njc0OGUzZDVhZmY4YTI0ZGEwMDE2MDgwYzM2YzFkZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDUgMjI6MzY6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKaW5kZXggMDM5MTMzMDIzMjhjYy4uNjk2MjE3MDVkNjhkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYwpAQCAtMTgxLDcgJiM0MzsxODEsNiBAQCBlbnVtIHRhcmdldF9zdGF0ZSB7CiAgKgkJbG9jYWxfbWFjCShyZWFkLW9ubHkpCiAgKiBAbG9jYWxfaXA6CVNvdXJjZSBJUCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLgogICogQHJlbW90ZV9pcDoJRGVzdGluYXRpb24gSVAgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS4KLSAqIEBpcHY2OglXaGV0aGVyIHRoZSB0YXJnZXQgYWRkcmVzc2VzIGFyZSBJUHY2IChyZWFkLXdyaXRlKS4KICAqIEBsb2NhbF9wb3J0OglTb3VyY2UgVURQIHBvcnQgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuCiAgKiBAcmVtb3RlX3BvcnQ6IERlc3RpbmF0aW9uIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLgogICogQHJlbW90ZV9tYWM6CURlc3RpbmF0aW9uIGV0aGVybmV0IGFkZHJlc3Mgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuCkBAIC0yMTIsOCAmIzQzOzIxMSw3IEBAIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7CiAJYm9vbAkJCWV4dGVuZGVkOwogCWJvb2wJCQlyZWxlYXNlOwogCXN0cnVjdCBuZXRwb2xsCQlucDsKLQl1bmlvbiBpbmV0X2FkZHIJCWxvY2FsX2lwLCByZW1vdGVfaXA7Ci0JYm9vbAkJCWlwdjY7CiYjNDM7CXN0cnVjdCBpbmV0X2FkZHIJbG9jYWxfaXAsIHJlbW90ZV9pcDsKIAl1MTYJCQlsb2NhbF9wb3J0LCByZW1vdGVfcG9ydDsKIAl1OAkJCXJlbW90ZV9tYWNbRVRIX0FMRU5dOwogCS8qIHByb3RlY3RlZCBieSB0YXJnZXRfbGlzdF9sb2NrOyAmIzQzOzEgZ2l2ZXMgc2NucHJpbnRmKCkgcm9vbSBmb3IgaXRzCkBAIC00MTUsNiAmIzQzOzQxMyw3IEBAIHN0YXRpYyBpbnQgbmV0Y29uc190YWtlX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwKIAkJCQljb250aW51ZTsKIAkJCS8qIEdvdCB0aGUgSVAsIGxldCYjMzk7cyByZXR1cm4gKi8KIAkJCW50LSZndDtsb2NhbF9pcC5pbjYgPSBpZnAtJmd0O2FkZHI7CiYjNDM7CQkJbnQtJmd0O2xvY2FsX2lwLmZhbWlseSA9IEFGX0lORVQ2OwogCQkJZXJyID0gMDsKIAkJCWJyZWFrOwogCQl9CkBAIC00NTYsMjggJiM0Mzs0NTUsMTIgQEAgc3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LAogCX0KIAogCW50LSZndDtsb2NhbF9pcC5pcCA9IGlmYS0mZ3Q7aWZhX2xvY2FsOwomIzQzOwludC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ID0gQUZfSU5FVDsKIAlucF9pbmZvKG5wLCAmIzM0O2xvY2FsIElQICVwSTRcbiYjMzQ7LCAmYW1wO250LSZndDtsb2NhbF9pcC5pcCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFRlc3Qgd2hldGhlciB0aGUgY2FsbGVyIGxlZnQgbnQtJmd0O2xvY2FsX2lwIHVuc2V0LCBzbyB0aGF0Ci0gKiBuZXRjb25zX25ldHBvbGxfc2V0dXAoKSBzaG91bGQgYXV0by1wb3B1bGF0ZSBpdCBmcm9tIHRoZSBlZ3Jlc3MgZGV2aWNlLgotICoKLSAqIG50LSZndDtsb2NhbF9pcCBpcyBhIHVuaW9uIG9mIF9fYmUzMiAoSVB2NCkgYW5kIHN0cnVjdCBpbjZfYWRkciAoSVB2NiksCi0gKiBzbyBhbiBJUHY2IGFkZHJlc3Mgd2hvc2UgZmlyc3QgNCBieXRlcyBhcmUgemVybyAoZS5nLiA6OjEsIDo6MiwKLSAqIElQdjQtbWFwcGVkIDo6ZmZmZjphLmIuYy5kKSBtdXN0IG5vdCBiZSB0ZXN0ZWQgdmlhIHRoZSBJUHY0IGFybSDigJQKLSAqIGRvaW5nIHNvIHdvdWxkIG1pc2NsYXNzaWZ5IGEgY2FsbGVyLXN1cHBsaWVkIGFkZHJlc3MgYXMgdW5zZXQgYW5kCi0gKiBzaWxlbnRseSBvdmVyd3JpdGUgaXQgd2l0aCB3aGF0ZXZlciBhZGRyZXNzIHRoZSBkZXZpY2UgZXhwb3Nlcy4KLSAqLwotc3RhdGljIGJvb2wgbmV0Y29uc19sb2NhbF9pcF91bnNldChjb25zdCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQotewotCWlmIChudC0mZ3Q7aXB2NikKLQkJcmV0dXJuIGlwdjZfYWRkcl9hbnkoJmFtcDtudC0mZ3Q7bG9jYWxfaXAuaW42KTsKLQlyZXR1cm4gIW50LSZndDtsb2NhbF9pcC5pcDsKLX0KLQogc3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBjdXJyZW50LSZndDtuc3Byb3h5LSZndDtuZXRfbnM7CkBAIC00ODgsNiAmIzQzOzQ3MSwxOSBAQCBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQogCWludCBlcnI7CiAKIAlydG5sX2xvY2soKTsKJiM0MzsJaWYgKG50LSZndDtyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykgewomIzQzOwkJbnBfZXJyKG5wLCAmIzM0O3JlbW90ZSBJUCBhZGRyZXNzIG5vdCBjb25maWd1cmVkLCBhYm9ydGluZ1xuJiMzNDspOwomIzQzOwkJZXJyID0gLUVERVNUQUREUlJFUTsKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChudC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ICE9IEFGX1VOU1BFQyAmYW1wOyZhbXA7CiYjNDM7CSAgICBudC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ICE9IG50LSZndDtyZW1vdGVfaXAuZmFtaWx5KSB7CiYjNDM7CQlucF9lcnIobnAsICYjMzQ7bG9jYWwgYW5kIHJlbW90ZSBJUCBhZGRyZXNzIGZhbWlsaWVzIGRpZmZlciwgYWJvcnRpbmdcbiYjMzQ7KTsKJiM0MzsJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsJfQomIzQzOwogCWlmIChucC0mZ3Q7ZGV2X25hbWVbMF0pCiAJCW5kZXYgPSBfX2Rldl9nZXRfYnlfbmFtZShuZXQsIG5wLSZndDtkZXZfbmFtZSk7CiAJZWxzZSBpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihucC0mZ3Q7ZGV2X21hYykpCkBAIC01MjMsMTYgJiM0Mzs1MTksMTMgQEAgc3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIAkJcnRubF9sb2NrKCk7CiAJfQogCi0JaWYgKG5ldGNvbnNfbG9jYWxfaXBfdW5zZXQobnQpKSB7Ci0JCWlmICghbnQtJmd0O2lwdjYpIHsKLQkJCWVyciA9IG5ldGNvbnNfdGFrZV9pcHY0KG50LCBuZGV2KTsKLQkJCWlmIChlcnIpCi0JCQkJZ290byBwdXQ7Ci0JCX0gZWxzZSB7CiYjNDM7CWlmIChudC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykgewomIzQzOwkJaWYgKG50LSZndDtyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KQogCQkJZXJyID0gbmV0Y29uc190YWtlX2lwdjYobnQsIG5kZXYpOwotCQkJaWYgKGVycikKLQkJCQlnb3RvIHB1dDsKLQkJfQomIzQzOwkJZWxzZQomIzQzOwkJCWVyciA9IG5ldGNvbnNfdGFrZV9pcHY0KG50LCBuZGV2KTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBwdXQ7CiAJCWlwX292ZXJ3cml0dGVuID0gdHJ1ZTsKIAl9CiAKQEAgLTcxNCwyNCAmIzQzOzcwNywyNCBAQCBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQogCXN0cnVjdCBuZXRwb2xsICpucCA9ICZhbXA7bnQtJmd0O25wOwogCiAJbnBfaW5mbyhucCwgJiMzNDtsb2NhbCBwb3J0ICVkXG4mIzM0OywgbnQtJmd0O2xvY2FsX3BvcnQpOwotCWlmIChudC0mZ3Q7aXB2NikKJiM0MzsJaWYgKG50LSZndDtsb2NhbF9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgSVB2NiBhZGRyZXNzICVwSTZjXG4mIzM0OywgJmFtcDtudC0mZ3Q7bG9jYWxfaXAuaW42KTsKIAllbHNlCiAJCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgSVB2NCBhZGRyZXNzICVwSTRcbiYjMzQ7LCAmYW1wO250LSZndDtsb2NhbF9pcC5pcCk7CiAJbnBfaW5mbyhucCwgJiMzNDtpbnRlcmZhY2UgbmFtZSAmIzM5OyVzJiMzOTtcbiYjMzQ7LCBucC0mZ3Q7ZGV2X25hbWUpOwogCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgZXRoZXJuZXQgYWRkcmVzcyAmIzM5OyVwTSYjMzk7XG4mIzM0OywgbnAtJmd0O2Rldl9tYWMpOwogCW5wX2luZm8obnAsICYjMzQ7cmVtb3RlIHBvcnQgJWRcbiYjMzQ7LCBudC0mZ3Q7cmVtb3RlX3BvcnQpOwotCWlmIChudC0mZ3Q7aXB2NikKJiM0MzsJaWYgKG50LSZndDtyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KQogCQlucF9pbmZvKG5wLCAmIzM0O3JlbW90ZSBJUHY2IGFkZHJlc3MgJXBJNmNcbiYjMzQ7LCAmYW1wO250LSZndDtyZW1vdGVfaXAuaW42KTsKIAllbHNlCiAJCW5wX2luZm8obnAsICYjMzQ7cmVtb3RlIElQdjQgYWRkcmVzcyAlcEk0XG4mIzM0OywgJmFtcDtudC0mZ3Q7cmVtb3RlX2lwLmlwKTsKIAlucF9pbmZvKG5wLCAmIzM0O3JlbW90ZSBldGhlcm5ldCBhZGRyZXNzICVwTVxuJiMzNDssIG50LSZndDtyZW1vdGVfbWFjKTsKIH0KIAotLyogUGFyc2UgdGhlIHN0cmluZyBhbmQgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHVuaW9uLiBSZXR1cm4gMCBpZiBJUHY0IGlzCi0gKiBwb3B1bGF0ZWQsIDEgaWYgSVB2NiBpcyBwb3B1bGF0ZWQsIGFuZCAtMSB1cG9uIGZhaWx1cmUuCiYjNDM7LyogUGFyc2UgdGhlIHN0cmluZyBhbmQgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHN0cnVjdC4gUmV0dXJuIDAgb24gc3VjY2VzcwomIzQzOyAqIGFuZCAtMSB1cG9uIGZhaWx1cmUuCiAgKi8KLXN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgdW5pb24gaW5ldF9hZGRyICphZGRyKQomIzQzO3N0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IGluZXRfYWRkciAqYWRkcikKIHsKIAljb25zdCBjaGFyICplbmQgPSBOVUxMOwogCWludCBsZW47CkBAIC03NDMsMTQgJiM0Mzs3MzYsMTggQEAgc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCB1bmlvbiBpbmV0X2FkZHIgKmFkZHIpCiAJaWYgKHN0cltsZW4gLSAxXSA9PSAmIzM5O1xuJiMzOTspCiAJCWxlbiAtPSAxOwogCi0JaWYgKGluNF9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKWFkZHIsIC0xLCAmYW1wO2VuZCkgJmd0OyAwICZhbXA7JmFtcDsKLQkgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJiMzOTtcbiYjMzk7KSkKJiM0MzsJaWYgKGluNF9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKSZhbXA7YWRkci0mZ3Q7aXAsIC0xLCAmYW1wO2VuZCkgJmd0OyAwICZhbXA7JmFtcDsKJiM0MzsJICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICYjMzk7XG4mIzM5OykpIHsKJiM0MzsJCWFkZHItJmd0O2ZhbWlseSA9IEFGX0lORVQ7CiAJCXJldHVybiAwOwomIzQzOwl9CiAKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikgJmFtcDsmYW1wOwotCSAgICBpbjZfcHRvbihzdHIsIGxlbiwgKHZvaWQgKilhZGRyLCAtMSwgJmFtcDtlbmQpICZndDsgMCAmYW1wOyZhbXA7Ci0JICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICYjMzk7XG4mIzM5OykpCi0JCXJldHVybiAxOwomIzQzOwkgICAgaW42X3B0b24oc3RyLCBsZW4sICh2b2lkICopJmFtcDthZGRyLSZndDtpbjYsIC0xLCAmYW1wO2VuZCkgJmd0OyAwICZhbXA7JmFtcDsKJiM0MzsJICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICYjMzk7XG4mIzM5OykpIHsKJiM0MzsJCWFkZHItJmd0O2ZhbWlseSA9IEFGX0lORVQ2OwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KIAogCXJldHVybiAtMTsKIH0KQEAgLTg1NSwyMCAmIzQzOzg1MiwyMCBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKQogewogCXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7CiAKLQlpZiAobnQtJmd0O2lwdjYpCiYjNDM7CWlmIChudC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ID09IEFGX0lORVQ2KQogCQlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JXBJNmNcbiYjMzQ7LCAmYW1wO250LSZndDtsb2NhbF9pcC5pbjYpOwogCWVsc2UKLQkJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVwSTRcbiYjMzQ7LCAmYW1wO250LSZndDtsb2NhbF9pcCk7CiYjNDM7CQlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JXBJNFxuJiMzNDssICZhbXA7bnQtJmd0O2xvY2FsX2lwLmlwKTsKIH0KIAogc3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTsKIAotCWlmIChudC0mZ3Q7aXB2NikKJiM0MzsJaWYgKG50LSZndDtyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KQogCQlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JXBJNmNcbiYjMzQ7LCAmYW1wO250LSZndDtyZW1vdGVfaXAuaW42KTsKIAllbHNlCi0JCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslcEk0XG4mIzM0OywgJmFtcDtudC0mZ3Q7cmVtb3RlX2lwKTsKJiM0MzsJCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslcEk0XG4mIzM0OywgJmFtcDtudC0mZ3Q7cmVtb3RlX2lwLmlwKTsKIH0KIAogc3RhdGljIHNzaXplX3QgbG9jYWxfbWFjX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpCkBAIC0xMjEzLDcgJiM0MzsxMjEwLDYgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsCiB7CiAJc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTsKIAlzc2l6ZV90IHJldCA9IC1FSU5WQUw7Ci0JaW50IGlwdjY7CiAKIAlkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jaygpOwogCWlmIChudC0mZ3Q7c3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkgewpAQCAtMTIyMiwxMCAmIzQzOzEyMTgsOCBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZiwKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCWlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCAmYW1wO250LSZndDtsb2NhbF9pcCk7Ci0JaWYgKGlwdjYgPT0gLTEpCiYjNDM7CWlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCAmYW1wO250LSZndDtsb2NhbF9pcCkgJmx0OyAwKQogCQlnb3RvIG91dF91bmxvY2s7Ci0JbnQtJmd0O2lwdjYgPSAhIWlwdjY7CiAKIAlyZXQgPSBjb3VudDsKIG91dF91bmxvY2s6CkBAIC0xMjM4LDcgJiM0MzsxMjMyLDYgQEAgc3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLAogewogCXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7CiAJc3NpemVfdCByZXQgPSAtRUlOVkFMOwotCWludCBpcHY2OwogCiAJZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTsKIAlpZiAobnQtJmd0O3N0YXRlID09IFNUQVRFX0VOQUJMRUQpIHsKQEAgLTEyNDcsMTAgJiM0MzsxMjQwLDggQEAgc3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLAogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCi0JaXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsICZhbXA7bnQtJmd0O3JlbW90ZV9pcCk7Ci0JaWYgKGlwdjYgPT0gLTEpCiYjNDM7CWlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCAmYW1wO250LSZndDtyZW1vdGVfaXApICZsdDsgMCkKIAkJZ290byBvdXRfdW5sb2NrOwotCW50LSZndDtpcHY2ID0gISFpcHY2OwogCiAJcmV0ID0gY291bnQ7CiBvdXRfdW5sb2NrOgpAQCAtMjA2MSw3ICYjNDM7MjA1Miw3IEBAIHN0YXRpYyB2b2lkIG5ldHBvbGxfdWRwX2NoZWNrc3VtKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsCiAKIAkvKiBjaGVjayBuZWVkcyB0byBiZSBzZXQsIHNpbmNlIGl0IHdpbGwgYmUgY29uc3VtZWQgaW4gY3N1bV9wYXJ0aWFsICovCiAJdWRwaC0mZ3Q7Y2hlY2sgPSAwOwotCWlmIChudC0mZ3Q7aXB2NikKJiM0MzsJaWYgKG50LSZndDtyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KQogCQl1ZHBoLSZndDtjaGVjayA9IGNzdW1faXB2Nl9tYWdpYygmYW1wO250LSZndDtsb2NhbF9pcC5pbjYsCiAJCQkJCSAgICAgICZhbXA7bnQtJmd0O3JlbW90ZV9pcC5pbjYsCiAJCQkJCSAgICAgIHVkcF9sZW4sIElQUFJPVE9fVURQLApAQCAtMjEwMiw3ICYjNDM7MjA5Myw3IEBAIHN0YXRpYyB2b2lkIHB1c2hfZXRoKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IpCiAJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKIAlldGhlcl9hZGRyX2NvcHkoZXRoLSZndDtoX3NvdXJjZSwgbnAtJmd0O2Rldi0mZ3Q7ZGV2X2FkZHIpOwogCWV0aGVyX2FkZHJfY29weShldGgtJmd0O2hfZGVzdCwgbnQtJmd0O3JlbW90ZV9tYWMpOwotCWlmIChudC0mZ3Q7aXB2NikKJiM0MzsJaWYgKG50LSZndDtyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KQogCQlldGgtJmd0O2hfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTsKIAllbHNlCiAJCWV0aC0mZ3Q7aF9wcm90byA9IGh0b25zKEVUSF9QX0lQKTsKQEAgLTIxNzEsNyAmIzQzOzIxNjIsNyBAQCBzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLAogCQlXQVJOX09OX09OQ0UoIWlycXNfZGlzYWJsZWQoKSk7CiAKIAl1ZHBfbGVuID0gbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKLQlpZiAobnQtJmd0O2lwdjYpCiYjNDM7CWlmIChudC0mZ3Q7cmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNikKIAkJaXBfbGVuID0gdWRwX2xlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpOwogCWVsc2UKIAkJaXBfbGVuID0gdWRwX2xlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwaGRyKTsKQEAgLTIxODcsNyAmIzQzOzIxNzgsNyBAQCBzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLAogCXNrYl9wdXQoc2tiLCBsZW4pOwogCiAJcHVzaF91ZHAobnQsIHNrYiwgbGVuKTsKLQlpZiAobnQtJmd0O2lwdjYpCiYjNDM7CWlmIChudC0mZ3Q7cmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNikKIAkJcHVzaF9pcHY2KG50LCBza2IsIGxlbik7CiAJZWxzZQogCQlwdXNoX2lwdjQobnQsIHNrYiwgbGVuKTsKQEAgLTI1MDcsMTAgJiM0MzsyNDk4LDggQEAgX19yZWxlYXNlcygmYW1wO3RhcmdldF9saXN0X2xvY2spCiBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KQogewogCXN0cnVjdCBuZXRwb2xsICpucCA9ICZhbXA7bnQtJmd0O25wOwotCWJvb2wgaXB2ZXJzaW9uX3NldCA9IGZhbHNlOwogCWNoYXIgKmN1ciA9IG9wdDsKIAljaGFyICpkZWxpbTsKLQlpbnQgaXB2NjsKIAogCWlmICgqY3VyICE9ICYjMzk7QCYjMzk7KSB7CiAJCWRlbGltID0gc3RyY2hyKGN1ciwgJiMzOTtAJiMzOTspOwpAQCAtMjUyNCwxNiAmIzQzOzI1MTMsMTIgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdCkKIAljdXImIzQzOyYjNDM7OwogCiAJaWYgKCpjdXIgIT0gJiMzOTsvJiMzOTspIHsKLQkJaXB2ZXJzaW9uX3NldCA9IHRydWU7CiAJCWRlbGltID0gc3RyY2hyKGN1ciwgJiMzOTsvJiMzOTspOwogCQlpZiAoIWRlbGltKQogCQkJZ290byBwYXJzZV9mYWlsZWQ7CiAJCSpkZWxpbSA9IDA7Ci0JCWlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCAmYW1wO250LSZndDtsb2NhbF9pcCk7Ci0JCWlmIChpcHY2ICZsdDsgMCkKJiM0MzsJCWlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCAmYW1wO250LSZndDtsb2NhbF9pcCkgJmx0OyAwKQogCQkJZ290byBwYXJzZV9mYWlsZWQ7Ci0JCWVsc2UKLQkJCW50LSZndDtpcHY2ID0gKGJvb2wpaXB2NjsKIAkJY3VyID0gZGVsaW07CiAJfQogCWN1ciYjNDM7JiM0Mzs7CkBAIC0yNTc1LDEzICYjNDM7MjU2MCwxMSBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KQogCWlmICghZGVsaW0pCiAJCWdvdG8gcGFyc2VfZmFpbGVkOwogCSpkZWxpbSA9IDA7Ci0JaXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsICZhbXA7bnQtJmd0O3JlbW90ZV9pcCk7Ci0JaWYgKGlwdjYgJmx0OyAwKQomIzQzOwlpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgJmFtcDtudC0mZ3Q7cmVtb3RlX2lwKSAmbHQ7IDApCiAJCWdvdG8gcGFyc2VfZmFpbGVkOwotCWVsc2UgaWYgKGlwdmVyc2lvbl9zZXQgJmFtcDsmYW1wOyBudC0mZ3Q7aXB2NiAhPSAoYm9vbClpcHY2KQomIzQzOwlpZiAobnQtJmd0O2xvY2FsX2lwLmZhbWlseSAhPSBBRl9VTlNQRUMgJmFtcDsmYW1wOwomIzQzOwkgICAgbnQtJmd0O2xvY2FsX2lwLmZhbWlseSAhPSBudC0mZ3Q7cmVtb3RlX2lwLmZhbWlseSkKIAkJZ290byBwYXJzZV9mYWlsZWQ7Ci0JZWxzZQotCQludC0mZ3Q7aXB2NiA9IChib29sKWlwdjY7CiAJY3VyID0gZGVsaW0gJiM0MzsgMTsKIAogCWlmICgqY3VyICE9IDApIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oIGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmgKaW5kZXggMWM2YjFlZWM1ZWZkNi4uZGU5N2YwMDFhMGY5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmgKQEAgLTE2LDkgJiM0MzsxNiwxMyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2lwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdWRwLmgmZ3Q7CiAKLXVuaW9uIGluZXRfYWRkciB7Ci0JX19iZTMyCQlpcDsKLQlzdHJ1Y3QgaW42X2FkZHIJaW42OwomIzQzO3N0cnVjdCBpbmV0X2FkZHIgewomIzQzOwkvKiBBZGRyZXNzIGZhbWlseTogQUZfVU5TUEVDIHdoZW4gdW5zZXQsIGVsc2UgQUZfSU5FVCBvciBBRl9JTkVUNiAqLwomIzQzOwl1OAkJCWZhbWlseTsKJiM0MzsJdW5pb24gewomIzQzOwkJX19iZTMyCQlpcDsKJiM0MzsJCXN0cnVjdCBpbjZfYWRkcglpbjY7CiYjNDM7CX07CiB9OwogCiBzdHJ1Y3QgbmV0cG9sbCB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyODkKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXRjb25zb2xlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0Y29uc29sZS5jYCBhbmQgYG5ldHBvbGwuaGAuIFNlZW1zIGxpa2UgdGhleSYjMzk7cmUgbWFraW5nIGEgcHJldHR5IGZ1bmRhbWVudGFsIGNoYW5nZSDigJMgcmVwbGFjaW5nIHRoYXQgb2xkIGB1bmlvbiBpbmV0X2FkZHJgIHdpdGggYSBtb3JlIGV4cGxpY2l0IGBzdHJ1Y3QgaW5ldF9hZGRyYC4gR29vZCBtb3ZlLCBhY3R1YWxseTsgYWRkaW5nIHRoYXQgYGZhbWlseWAgZmllbGQgKEFGX1VOU1BFQywgQUZfSU5FVCwgQUZfSU5FVDYpIGlzIGdvaW5nIHRvIG1ha2UgdGhlIGNvZGUgbXVjaCBjbGVhcmVyIGFuZCBsZXNzIHByb25lIHRvIGVycm9ycywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBJUHY2LiBMb29rcyBsaWtlIHRoZXkmIzM5O3ZlIHJlbW92ZWQgdGhlIGBpcHY2YCBib29sZWFuIGZyb20gYG5ldGNvbnNvbGVfdGFyZ2V0YCB0b28sIHdoaWNoIGlzIGxvZ2ljYWwgZ2l2ZW4gdGhlIG5ldyBgZmFtaWx5YCBmaWVsZC4gVGhleSYjMzk7dmUgdXBkYXRlZCB0aGUgcGFyc2luZyBhbmQgc2V0dXAgbG9naWMsIHdoaWNoIEkmIzM5O2xsIG5lZWQgdG8gcmV2aWV3IGNhcmVmdWxseSB0byBlbnN1cmUgdGhlIHRyYW5zaXRpb24gaXMgY2xlYW4gYW5kIGVmZmljaWVudC4KCkZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIHNpZ25pZmljYW50IGNoYW5nZSB0byB0aGUgbmV0Y29uc29sZSBkcml2ZXIuIEdpdmVuIHRoYXQgbmV0Y29uc29sZSBpcyBhIGNyaXRpY2FsIGRlYnVnZ2luZyBhbmQgcmVjb3ZlcnkgdG9vbCwgSSBzaG91bGQgY29uc2lkZXIgdGhlIGltcGFjdCBjYXJlZnVsbHkuIFRoZSBuZXRjb25zb2xlIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUsIHNvIEkgc2hvdWxkIGJlIGFibGUgdG8gdmVyaWZ5IHRoYXQgdGhlIGNoYW5nZSBkb2VzbiYjMzk7dCBicmVhayBhbnl0aGluZy4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyBuZWVkZWQgZm9yIHRoaXMgdG8gd29yay4gSSBhbHJlYWR5IGtub3cgdGhhdCBgQ09ORklHX05FVENPTlNPTEVgIGlzIHJlcXVpcmVkLCBzbyBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIGxvb2sgaW4gS2NvbmZpZyB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgbmV3IG9yIGNoYW5nZWQgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRDT05TT0xFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MzE4PWNvbmZpZyBNQUNTRUNcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyNi1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzI3OmNvbmZpZyBORVRDT05TT0xFXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyOC1cdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzMy1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzM0OmNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcbmRyaXZlcnMvbmV0L0tjb25maWctMzM1LVx0Ym9vbCBcJiMzNDtEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0NC1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzQ1OmNvbmZpZyBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDYtXHRib29sIFwmIzM0O1NldCBrZXJuZWwgZXh0ZW5kZWQgbWVzc2FnZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNTQtXG5kcml2ZXJzL25ldC9LY29uZmlnOjM1NTpjb25maWcgTkVUQ09OU09MRV9QUkVQRU5EX1JFTEVBU0VcbmRyaXZlcnMvbmV0L0tjb25maWctMzU2LVx0Ym9vbCBcJiMzNDtQcmVwZW5kIGtlcm5lbCByZWxlYXNlIHZlcnNpb24gaW4gdGhlIG1lc3NhZ2UgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMDYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGJyYWluIHplcm9lcyBpbiBvbiB0aGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQ6IGBORVRDT05TT0xFYCBhbmQgYE5FVENPTlNPTEVfRFlOQU1JQ2AuIE15IGd1dCB0ZWxscyBtZSB0aGF0IGBORVRDT05TT0xFX0RZTkFNSUNgIGlzIHByb2JhYmx5IHRoZSBrZXkgb25lIGhlcmUsIHNpbmNlIGl0IGRlYWxzIHdpdGggdGhvc2Ugc3lzZnMgY29uZmlnIGl0ZW1zLgoKTm93LCB0aGUgcGF0Y2ggdG91Y2hlcyBgbG9jYWxfaXBfc3RvcmVgIGFuZCBgcmVtb3RlX2lwX3N0b3JlYCwgd2hpY2ggcmluZ3MgYSBiZWxsLiBUaG9zZSBmdW5jdGlvbnMgYXJlIGludGltYXRlbHkgbGlua2VkIHRvIHRoZSBkeW5hbWljIGNvbmZpZ3VyYXRpb24gc3R1ZmYgd2l0aGluIGBORVRDT05TT0xFX0RZTkFNSUNgLiBUbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIHRob3VnaCwgbGV0JiMzOTtzIGp1c3QgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgaW4gYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AuIEkgbmVlZCB0byBjb25maXJtIGlmIGBORVRDT05TT0xFX0RZTkFNSUNgIGlzIGluZGVlZCBhIHByZXJlcXVpc2l0ZSBmb3IgdGhlIHByb3BlciBmdW5jdGlvbmluZyBvZiB0aGVzZSB0d28gZnVuY3Rpb25zLiBJdOKAmXMgYWx3YXlzIGJlc3QgdG8gYmUgcHJlY2lzZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBuZXR3b3JrLXJlbGF0ZWQga2VybmVsIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9jYWxfaXBfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTExODY9c3RhdGljIHNzaXplX3QgcmVtb3RlX3BvcnRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjA3LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyMDg6c3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIwOS1cdFx0c2l6ZV90IGNvdW50KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0MjEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgTmV0d29yayBDb25zb2xlKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIHRoZSBuZXR3b3JrIGNvbnNvbGUsIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBzb3VyY2UgY29kZS4gSSYjMzk7bSBnb2luZyB0byBuYXZpZ2F0ZSBkaXJlY3RseSB0byB0aGUgYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGxpbmUgMTIwOCBpcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4gSXQmIzM5O3Mgb2Z0ZW4gYXQgdGhlc2UgcGl2b3RhbCBwb2ludHMgd2l0aGluIGEgbGFyZ2VyIHBpZWNlIG9mIHNvdXJjZSB0aGF0IHRoZSByZWFsIG1lYXQgb2YgdGhlIG9wZXJhdGlvbiBjYW4gYmUgZm91bmQuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9uYWxpdHkgaXMgaW1wbGVtZW50ZWQgdGhlcmUuIEtub3dpbmcgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgd2lsbCBiZSBrZXksIGJ1dCBzdGFydGluZyB0aGVyZSBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QganVtcGluZy1vZmYgcG9pbnQgdG8gYXNzZXNzIHRoZSBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE4MDpcdFx0cmV0ID0gY291bnQ7XG4xMTgxOlx0b3V0X3VubG9jazpcbjExODI6XHRcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2soKTtcbjExODM6XHRcdHJldHVybiByZXQ7XG4xMTg0Olx0fVxuMTE4NTpcdFxuMTE4NjpcdHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9wb3J0X3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbjExODc6XHRcdFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4xMTg4Olx0e1xuMTE4OTpcdFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbjExOTA6XHRcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbjExOTE6XHRcbjExOTI6XHRcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XG4xMTkzOlx0XHRpZiAobnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkge1xuMTE5NDpcdFx0XHRwcl9lcnIoXCYjMzQ7dGFyZ2V0ICglcykgaXMgZW5hYmxlZCwgZGlzYWJsZSB0byB1cGRhdGUgcGFyYW1ldGVyc1xcblwmIzM0OyxcbjExOTU6XHRcdFx0ICAgICAgIGNvbmZpZ19pdGVtX25hbWUoXHUwMDI2bnQtXHUwMDNlZ3JvdXAuY2dfaXRlbSkpO1xuMTE5NjpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xMTk3Olx0XHR9XG4xMTk4Olx0XG4xMTk5Olx0XHRyZXQgPSBrc3RydG91MTYoYnVmLCAxMCwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX3BvcnQpO1xuMTIwMDpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjEyMDE6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMTIwMjpcdFx0cmV0ID0gY291bnQ7XG4xMjAzOlx0b3V0X3VubG9jazpcbjEyMDQ6XHRcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2soKTtcbjEyMDU6XHRcdHJldHVybiByZXQ7XG4xMjA2Olx0fVxuMTIwNzpcdFxuMTIwODpcdHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuMTIwOTpcdFx0XHRzaXplX3QgY291bnQpXG4xMjEwOlx0e1xuMTIxMTpcdFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbjEyMTI6XHRcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbjEyMTM6XHRcbjEyMTQ6XHRcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XG4xMjE1Olx0XHRpZiAobnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkge1xuMTIxNjpcdFx0XHRwcl9lcnIoXCYjMzQ7dGFyZ2V0ICglcykgaXMgZW5hYmxlZCwgZGlzYWJsZSB0byB1cGRhdGUgcGFyYW1ldGVyc1xcblwmIzM0OyxcbjEyMTc6XHRcdFx0ICAgICAgIGNvbmZpZ19pdGVtX25hbWUoXHUwMDI2bnQtXHUwMDNlZ3JvdXAuY2dfaXRlbSkpO1xuMTIxODpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xMjE5Olx0XHR9XG4xMjIwOlx0XG4xMjIxOlx0XHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApIFx1MDAzYyAwKVxuMTIyMjpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xMjIzOlx0XG4xMjI0Olx0XHRyZXQgPSBjb3VudDtcbjEyMjU6XHRvdXRfdW5sb2NrOlxuMTIyNjpcdFx0ZHluYW1pY19uZXRjb25zb2xlX211dGV4X3VubG9jaygpO1xuMTIyNzpcdFx0cmV0dXJuIHJldDtcbjEyMjg6XHR9XG4xMjI5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM1MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIHdlZWRzIG9mIGtlcm5lbCBuZXR3b3JraW5nIGNvZGU6CgoqKkNoZWNraW5nIHRoZSBTY29wZSBvZiBgbG9jYWxfaXBfc3RvcmVgKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSBwcmV0dHkgc3VyZSBJIHJlbWVtYmVyIGNvbWluZyBhY3Jvc3MgYGxvY2FsX2lwX3N0b3JlYCBpbiB0aGUgbmV0Y29uc29sZSBjb2RlLiBCdXQgd2FpdCwgd2FzIHRoYXQgKmNvbmRpdGlvbmFsbHkqIGNvbXBpbGVkPyBJdCYjMzk7cyBuYWdnaW5nIGF0IG1lIHRoYXQgaXQgbWlnaHQgYmUgdGllZCB0byBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYGxvY2FsX2lwX3N0b3JlYCBpcyBhY3R1YWxseSBkZWZpbmVkIHdpdGhpbiB0aGF0IGAjaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ2AgYmxvY2suIElmIGl0ICppcyogaW5zaWRlIHRoYXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24sIGl0JiMzOTtzIGdvaW5nIHRvIGFmZmVjdCBob3cgSSB1bmRlcnN0YW5kIGl0cyB1c2UgYW5kIGl0cyBwcmVzZW5jZSBpbiB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlLiBJIG5lZWQgdG8gY29uZmlybSBpZiBpdCYjMzk7cyB0aGVyZSBvciBub3QsIGJlY2F1c2UgdGhhdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTk1PXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk2LVx0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxOTc6I2lmZGVmXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk4LVx0c3RydWN0IGNvbmZpZ19ncm91cFx0Z3JvdXA7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyNS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjY6I2lmZGVmXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjI3LVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNjU9c3RhdGljIHZvaWQgZHluYW1pY19uZXRjb25zb2xlX211dGV4X3VubG9jayh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjktXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjcwOiNlbHNlXHQvKiAhQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3MS1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MzAyPXN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2sodm9pZClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzA1LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjMwNjojZW5kaWZcdC8qIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMDctXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTcyNz1zdGF0aWMgaW50IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBpbmV0X2FkZHIgKmFkZHIpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTc1NC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3NTU6I2lmZGVmXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzU2LVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xODc0PXN0YXRpYyBpbnQgcHJlcGFyZV9zeXNkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4OTYtfVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4OTc6I2VuZGlmXHQvKiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg5OC1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjE1ND1zdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTk4LSAqIG9jY3VycmVkIGl0IGluY3JlbWVudHMgc3RhdGlzdGljcyBpbiBudC1cdTAwM2VzdGF0cyBhY2NvcmRpbmdseS5cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTk5OiAqIE9ubHkgY2FsbHMgbmV0cG9sbF9zZW5kX3VkcCBpZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDIGlzIGRpc2FibGVkLlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDAtICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjIwMT1zdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDQtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIwNTpcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMpKSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIwNi1cdFx0aWYgKHJlc3VsdCA9PSBORVRfWE1JVF9EUk9QKSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIyMTg9c3RhdGljIHZvaWQgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjI2LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMjc6I2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjI4LVx0dXNlcmRhdGEgPSBudC1cdTAwM2V1c2VyZGF0YTtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjI2Mz1zdGF0aWMgdm9pZCBzZW5kX2ZyYWdtZW50ZWRfYm9keShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjc0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyNzU6I2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjc2LVx0dXNlcmRhdGFfcHRyID0gbnQtXHUwMDNldXNlcmRhdGE7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIzOTk9c3RhdGljIHZvaWQgc2VuZF9leHRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDA2LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0MDc6I2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDA4LVx0c3lzZGF0YV9sZW4gPSBwcmVwYXJlX3N5c2RhdGEobnQsIHdjdHh0KTtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjU4Nj1zdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19wYXJhbV90YXJnZXQoY2hhciAqdGFyZ2V0X2NvbmZpZyxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYyOS1cdFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjYzMDpcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMpKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2MzEtXHRcdFx0Lyogb25seSBmYWlsIGlmIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIGlzIHNldCxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjY0OD1zdGF0aWMgdm9pZCBmcmVlX3BhcmFtX3RhcmdldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjUzLVx0bmV0cG9sbF9jbGVhbnVwKFx1MDAyNm50LVx1MDAzZW5wKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjU0OiNpZmRlZlx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NTUtXHRrZnJlZShudC1cdTAwM2V1c2VyZGF0YSk7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI2Nzg9c3RhdGljIGludCBfX2luaXQgaW5pdF9uZXRjb25zb2xlKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2OTEtXHRcdFx0aWYgKElTX0VSUihudCkpIHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjkyOlx0XHRcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQykpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY5My1cdFx0XHRcdFx0Y29udGludWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5NDEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXRjb25zb2xlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgY29uZmlybWluZyB0aGF0IGBsb2NhbF9pcF9zdG9yZWAgaXMgaW5kZWVkIG5lc3RlZCB3aXRoaW4gdGhhdCBgI2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNgIGJsb2NrLCB3aGljaCwgYXMgSSByZWNhbGwsIHNwYW5zIGEgcHJldHR5IHNpZ25pZmljYW50IGNodW5rIG9mIGNvZGUsIGZyb20gbGluZXMgNzU1IHRvIDE4OTcuIFRoZXJlZm9yZSwgdG8gbWFrZSB0aGF0IGZ1bmN0aW9uYWxpdHkgYWNjZXNzaWJsZSwgYE5FVENPTlNPTEVfRFlOQU1JQ2AgaXMgZ29pbmcgdG8gYmUgYSByZXF1aXJlbWVudC4gQnV0LCBJIG5lZWQgdG8gYmUgbW9yZSB0aG9yb3VnaCBoZXJlIGFuZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3VyYXRpb25zIG5lZWRlZC4gV2FpdCBhIG1pbnV0ZSwgSSBuZWVkIGBORVRDT05TT0xFYCBpdHNlbGYuCgpJIGFsc28gc2VlIHRoYXQgYENPTkZJR19JUFY2YCBpcyBiZWluZyBjaGVja2VkIHdpdGhpbiBgbmV0cG9sbF9wYXJzZV9pcF9hZGRyYCwgc3BlY2lmaWNhbGx5OgoKYGBgYwoJaWYgKElTX0VOQUJMRUQoQ09ORklHX0lQVjYpICZhbXA7JmFtcDsKCSAgICBpbjZfcHRvbihzdHIsIGxlbiwgKHZvaWQgKikmYW1wO2FkZHItJmd0O2luNiwgLTEsICZhbXA7ZW5kKSAmZ3Q7IDAgJmFtcDsmYW1wOwoJICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICYjMzk7XG4mIzM5OykpIHsKCQlhZGRyLSZndDtmYW1pbHkgPSBBRl9JTkVUNjsKCQlyZXR1cm4gMDsKCX0KYGBgCgpTbywgaWYgc29tZW9uZSB3YW50cyB0byB0ZXN0IG91dCB0aGUgSVB2NiBmdW5jdGlvbmFsaXR5LCB0aGVuIGl0IHdpbGwgcmVxdWlyZSBgSVBWNmAgYXMgd2VsbC4gUmlnaHQsIG5vdyBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYENPTkZJR19ORVRDT05TT0xFYCBkaXJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVENPTlNPTEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MzE4PWNvbmZpZyBNQUNTRUNcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyNi1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzI3OmNvbmZpZyBORVRDT05TT0xFXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyOC1cdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzMy1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzM0OmNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcbmRyaXZlcnMvbmV0L0tjb25maWctMzM1LVx0Ym9vbCBcJiMzNDtEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0NC1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzQ1OmNvbmZpZyBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDYtXHRib29sIFwmIzM0O1NldCBrZXJuZWwgZXh0ZW5kZWQgbWVzc2FnZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNTQtXG5kcml2ZXJzL25ldC9LY29uZmlnOjM1NTpjb25maWcgTkVUQ09OU09MRV9QUkVQRU5EX1JFTEVBU0VcbmRyaXZlcnMvbmV0L0tjb25maWctMzU2LVx0Ym9vbCBcJiMzNDtQcmVwZW5kIGtlcm5lbCByZWxlYXNlIHZlcnNpb24gaW4gdGhlIG1lc3NhZ2UgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDcwOQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnkgZm9yIGFuIGV4cGVydDoKCioqRGl2aW5nIGludG8gdGhlIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGRyaXZlcnMvbmV0L0tjb25maWdgIGZpbGUuIEkmIzM5O20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDMyNyDigJMgdGhhdCYjMzk7cyBvZnRlbiB3aGVyZSB0aGUganVpY3kgYml0cyBhcmUsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggY29yZSBuZXR3b3JraW5nIGZlYXR1cmVzIG9yIHBlcmhhcHMgYSBzcGVjaWZpYyBkcml2ZXIgSSYjMzk7bSB0cnlpbmcgdG8gdW5kZXJzdGFuZC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgYSBoaWdoLWxldmVsIG92ZXJ2aWV3IG9mIGF2YWlsYWJsZSBuZXR3b3JrIGZlYXR1cmVzLCBwZXJoYXBzIHNvbWUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgb3IgbWF5YmUgZXZlbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhIHBhcnRpY3VsYXIgbmV0d29yayBkcml2ZXIgb3IgdGVjaG5vbG9neS4gVGltZSB0byBjcmFjayBpdCBvcGVuIGFuZCBzZWUgd2hhdCByZXZlbGF0aW9ucyBsaW5lIDMyNyBob2xkcyEgTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzIwOlx0XHRzZWxlY3QgQ1JZUFRPXG4gMzIxOlx0XHRzZWxlY3QgQ1JZUFRPX0FFU1xuIDMyMjpcdFx0c2VsZWN0IENSWVBUT19HQ01cbiAzMjM6XHRcdHNlbGVjdCBHUk9fQ0VMTFNcbiAzMjQ6XHRcdGhlbHBcbiAzMjU6XHRcdCAgIE1BQ3NlYyBpcyBhbiBlbmNyeXB0aW9uIHN0YW5kYXJkIGZvciBFdGhlcm5ldC5cbiAzMjY6XHRcbiAzMjc6XHRjb25maWcgTkVUQ09OU09MRVxuIDMyODpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0d29yayBjb25zb2xlIGxvZ2dpbmcgc3VwcG9ydFwmIzM0O1xuIDMyOTpcdFx0ZGVwZW5kcyBvbiBQUklOVEtcbiAzMzA6XHRcdGhlbHBcbiAzMzE6XHRcdCAgSWYgeW91IHdhbnQgdG8gbG9nIGtlcm5lbCBtZXNzYWdlcyBvdmVyIHRoZSBuZXR3b3JrLCBlbmFibGUgdGhpcy5cbiAzMzI6XHRcdCAgU2VlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XHUwMDNlIGZvciBkZXRhaWxzLlxuIDMzMzpcdFxuIDMzNDpcdGNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcbiAzMzU6XHRcdGJvb2wgXCYjMzQ7RHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgbG9nZ2luZyB0YXJnZXRzXCYjMzQ7XG4gMzM2Olx0XHRkZXBlbmRzIG9uIE5FVENPTlNPTEUgXHUwMDI2XHUwMDI2IFNZU0ZTIFx1MDAyNlx1MDAyNiBDT05GSUdGU19GUyBcdTAwMjZcdTAwMjYgXFxcbiAzMzc6XHRcdFx0XHQhKE5FVENPTlNPTEU9eSBcdTAwMjZcdTAwMjYgQ09ORklHRlNfRlM9bSlcbiAzMzg6XHRcdHNlbGVjdCBQUklOVEtfRVhFQ1VUSU9OX0NUWFxuIDMzOTpcdFx0aGVscFxuIDM0MDpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBhYmlsaXR5IHRvIGR5bmFtaWNhbGx5IHJlY29uZmlndXJlIHRhcmdldFxuIDM0MTpcdFx0ICBwYXJhbWV0ZXJzIChpbnRlcmZhY2UsIElQIGFkZHJlc3NlcywgcG9ydCBudW1iZXJzLCBNQUMgYWRkcmVzc2VzKVxuIDM0MjpcdFx0ICBhdCBydW50aW1lIHRocm91Z2ggYSB1c2Vyc3BhY2UgaW50ZXJmYWNlIGV4cG9ydGVkIHVzaW5nIGNvbmZpZ2ZzLlxuIDM0MzpcdFx0ICBTZWUgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcdTAwM2UgZm9yIGRldGFpbHMuXG4gMzQ0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzAyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0Y29uc29sZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBORVRDT05TT0xFYCBtb2R1bGUgYW5kIGhvdyBpdCYjMzk7cyBjb25maWd1cmVkLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgTkVUQ09OU09MRWAgZGVwZW5kcyBvbiBgUFJJTlRLYCwgYW5kIGBORVRDT05TT0xFX0RZTkFNSUNgIGRlcGVuZHMgb24gYE5FVENPTlNPTEVgLCBgU1lTRlNgLCBhbmQgYENPTkZJR0ZTX0ZTYC4gUmlnaHQsIHNvIHRvIGdldCBldmVyeXRoaW5nIHdvcmtpbmcsIEkgbmVlZCB0byBlbmFibGUgYE5FVENPTlNPTEVgLCBgTkVUQ09OU09MRV9EWU5BTUlDYCwgYENPTkZJR0ZTX0ZTYCwgYW5kIGBJUFY2YCwgbmF0dXJhbGx5LiBUaGF0IHNlZW1zIGxvZ2ljYWwuCgpOb3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY3JpdGljYWwgc3ltYm9scyBtb2RpZmllZCBieSB0aGlzIHBhdGNoIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMuIExldCYjMzk7cyBzZWUuLi4gaXQgYWZmZWN0cyBgbmV0Y29uc190YWtlX2lwdjZgLCBgbmV0Y29uc190YWtlX2lwdjRgLCBgbmV0Y29uc19uZXRwb2xsX3NldHVwYCwgYG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyYCwgYG5ldHBvbGxfcGFyc2VfaXBfYWRkcmAsIGFuZCB0aGVuIHRoZSBzeXNmcyBpbnRlcmZhY2UgYml0czogYGxvY2FsX2lwX3Nob3dgLCBgcmVtb3RlX2lwX3Nob3dgLCBgbG9jYWxfaXBfc3RvcmVgLCBgcmVtb3RlX2lwX3N0b3JlYC4gSSBzZWUgYG5ldHBvbGxfdWRwX2NoZWNrc3VtYCwgYHB1c2hfZXRoYCwgYW5kIGBuZXRwb2xsX3NlbmRfdWRwYCBhcyB3ZWxsLiBUaGUgcGFyc2VyIGFuZCBjb21tYW5kLWxpbmUgcGFyc2luZyBpcyB0aGVyZSB0b286IGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYC4KCkFscmlnaHQsIHRoZSBjb3JlIGZ1bmN0aW9ucyBJJiMzOTttIGludGVyZXN0ZWQgaW4sIGJhc2VkIG9uIHRob3NlIG1vZGlmaWNhdGlvbnMsIGFyZTogYGxvY2FsX2lwX3N0b3JlYCwgYHJlbW90ZV9pcF9zdG9yZWAsIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYCwgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAsIGFuZCBgbmV0cG9sbF9zZW5kX3VkcGAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGZvY3VzIGFyZWFzIG9mIHRoZSBjaGFuZ2UuCgpXYWl0IGEgc2Vjb25kLCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgYWJvdXQgdGhpcyBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAgZnVuY3Rpb24uIElzIGl0IHN0YXRpYz8gWWVzLCBpdCYjMzk7cyBzdGF0aWMuIEhtbS4uLiBhY2NvcmRpbmcgdG8gdGhlIGd1aWRlbGluZXMsIEkgc2hvdWxkIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIGRpZyBkZWVwZXIuIFdoYXQgY2FsbHMgYGxvY2FsX2lwX3N0b3JlYD8gQWgsIGl0JiMzOTtzIGEgc3lzZnMvY29uZmlnZnMgc3RvcmUgZnVuY3Rpb24uIFVzdWFsbHkgdGhvc2UgYXJlIHN0YXRpYywgYnV0IEkgYmV0IHRoZXkgYXJlIHJlZ2lzdGVyZWQgdXNpbmcgdGhvc2UgbWFjcm9zLiBUaW1lIHRvIGNoZWNrIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgIGZvciB0aG9zZSBjb25maWdmcyBtYWNyb3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR0ZTX0FUVFImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE1Mjc9c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9jcHVfbnJfZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1NTktXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU2MDpDT05GSUdGU19BVFRSKHVzZXJkYXR1bV8sIHZhbHVlKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTYxOkNPTkZJR0ZTX0FUVFIoc3lzZGF0YV8sIGNwdV9ucl9lbmFibGVkKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTYyOkNPTkZJR0ZTX0FUVFIoc3lzZGF0YV8sIHRhc2tuYW1lX2VuYWJsZWQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1NjM6Q09ORklHRlNfQVRUUihzeXNkYXRhXywgcmVsZWFzZV9lbmFibGVkKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTY0OkNPTkZJR0ZTX0FUVFIoc3lzZGF0YV8sIG1zZ2lkX2VuYWJsZWQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1NjUtXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2MzY9c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIHVzZXJkYXRhX3R5cGUgPSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2NDItXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY0MzpDT05GSUdGU19BVFRSKCwgZW5hYmxlZCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY0NDpDT05GSUdGU19BVFRSKCwgZXh0ZW5kZWQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NDU6Q09ORklHRlNfQVRUUigsIGRldl9uYW1lKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjQ2OkNPTkZJR0ZTX0FUVFIoLCBsb2NhbF9wb3J0KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjQ3OkNPTkZJR0ZTX0FUVFIoLCByZW1vdGVfcG9ydCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY0ODpDT05GSUdGU19BVFRSKCwgbG9jYWxfaXApO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NDk6Q09ORklHRlNfQVRUUigsIHJlbW90ZV9pcCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY1MDpDT05GSUdGU19BVFRSX1JPKCwgbG9jYWxfbWFjKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjUxOkNPTkZJR0ZTX0FUVFIoLCByZW1vdGVfbWFjKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjUyOkNPTkZJR0ZTX0FUVFIoLCByZWxlYXNlKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjUzOkNPTkZJR0ZTX0FUVFJfUk8oLCB0cmFuc21pdF9lcnJvcnMpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2NTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzMxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBDb25maWd1cmF0aW9uIEV4cG9zdXJlKioKCkFscmlnaHQsIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBsb2NhbF9pcF9zdG9yZWAgaXMgYmVpbmcgZXhwb3NlZCB0aHJvdWdoIGNvbmZpZ2ZzLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgYW5kIGl0IGFsaWducyB3aXRoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSYjMzk7cyBhcmNoaXRlY3R1cmUuIE5vdywgdGhlIG1vcmUgaW50ZXJlc3RpbmcgcXVlc3Rpb24gaXMgYXJvdW5kIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYC4gV2hlcmUgaXMgdGhhdCBiZWluZyBjYWxsZWQ/IFdoYXQmIzM5O3MgdGhlIGNvbnRleHQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGNoYWluIHRvIHJlYWxseSBnYXVnZSBpdHMgaW1wYWN0IGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBUcmFjaW5nIHRoZSBvcmlnaW4gb2YgdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGNhbGwgaXMgZ29pbmcgdG8gYmUga2V5IHRvIGV2YWx1YXRpbmcgdGhlIG92ZXJhbGwgcGljdHVyZS4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmlndXJlIG91dCB0aGUgcGFyZW50IGNhbGxzIGFuZCB0aGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0Y29uc29sZV9wYXJzZXJfY21kbGluZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9OTg2PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDM0LVx0XHQvKlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwMzU6XHRcdCAqIFNraXAgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZSgpIC0tIGFsbCB0aGUgYXR0cmlidXRlcyBhcmVcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDM2LVx0XHQgKiBhbHJlYWR5IGNvbmZpZ3VyZWQgdmlhIGNvbmZpZ2ZzLiBKdXN0IHByaW50IHRoZW0gb3V0LlxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNDkzPV9fcmVsZWFzZXMoXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaylcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ5Ny1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDk4OnN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ5OS17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI1ODY9c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2MTMtXHQvKiBQYXJzZSBwYXJhbWV0ZXJzIGFuZCBzZXR1cCBuZXRwb2xsICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjYxNDpcdGVyciA9IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUobnQsIHRhcmdldF9jb25maWcpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2MTUtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI3OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoYXQgc25pcHBldDoKCioqRGVlcCBEaXZlIGludG8gUGFyYW1ldGVyIEFsbG9jYXRpb24gYW5kIE5ldHdvcmsgQ29uc29sZSBQYXJzaW5nKioKCk9rYXksIHNvIGBhbGxvY19wYXJhbV90YXJnZXRgIGlzIGJlaW5nIGNhbGxlZCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBJIGtub3cgdGhhdCBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyBtZW1vcnkgZm9yIGNvbW1hbmQtbGluZSBwYXJhbWV0ZXJzLiBBbmQgc3BlY2lmaWNhbGx5LCBpdCBhcHBlYXJzIGl0JiMzOTtzIGRpcmVjdGx5IGxpbmtlZCB0byBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgdGhlIG5ldHdvcmsgY29uc29sZSBzZXR1cCwgYXMgdGhhdCYjMzk7cyB0aGUgcHJpbWFyeSBjb250ZXh0IGZvciB0aGUgYG5ldGNvbnNvbGVgIGNhbGxzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24sIG9mIGNvdXJzZSwgaXM6ICpXaGF0KiBpcyBhY3R1YWxseSBjYWxsaW5nIGBhbGxvY19wYXJhbV90YXJnZXRgIGluIHRoZSBmaXJzdCBwbGFjZT8gS25vd2luZyB0aGUgY2FsbGVyIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGVudGlyZSBmbG93IGFuZCBwdXJwb3NlIG9mIHRoaXMgYWxsb2NhdGlvbi4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGNhbGwgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGRhdGEgaXMgY29taW5nIGZyb20gYW5kIHdoYXQmIzM5O3MgdHJpZ2dlcmluZyB0aGUgYWxsb2NhdGlvbi4gSXMgaXQgYSBtb2R1bGUgaW5pdGlhbGl6YXRpb24sIGNvbW1hbmQtbGluZSBwYXJzaW5nIGF0IGJvb3QsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaW1lIHRvIGRpZyBkZWVwZXIgYW5kIGZpbmQgdGhhdCBjYWxsaW5nIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19wYXJhbV90YXJnZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI0OTg9c3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjU4NS0vKiBBbGxvY2F0ZSBuZXcgdGFyZ2V0IChmcm9tIGJvb3QvbW9kdWxlIHBhcmFtKSBhbmQgc2V0dXAgbmV0cG9sbCBmb3IgaXQgKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNTg2OnN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX3BhcmFtX3RhcmdldChjaGFyICp0YXJnZXRfY29uZmlnLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1ODctXHRcdFx0XHRcdFx0ICAgIGludCBjbWRsaW5lX2NvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNjc4PXN0YXRpYyBpbnQgX19pbml0IGluaXRfbmV0Y29uc29sZSh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjg5LVx0XHR3aGlsZSAoKHRhcmdldF9jb25maWcgPSBzdHJzZXAoXHUwMDI2aW5wdXQsIFwmIzM0OztcJiMzNDspKSkge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2OTA6XHRcdFx0bnQgPSBhbGxvY19wYXJhbV90YXJnZXQodGFyZ2V0X2NvbmZpZywgY291bnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2OTEtXHRcdFx0aWYgKElTX0VSUihudCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3OTIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldGNvbnNvbGUgTW9kdWxlIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIGBhbGxvY19wYXJhbV90YXJnZXRgIGlzIGluaXRpYXRlZCBmcm9tIGBpbml0X25ldGNvbnNvbGVgLCB3aGljaCBpcyB0aGUgbW9kdWxlJiMzOTtzIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLiBUaGF0IG1lYW5zIGl0IG9ubHkgZ2V0cyBjYWxsZWQgYXQgbW9kdWxlIGxvYWQgdGltZSBvciBkdXJpbmcgdGhlIGJvb3QgcHJvY2Vzcy4gSG1tLCBjb3VsZCB3ZSBhY3R1YWxseSBmdXp6IG1vZHVsZSBsb2FkIHBhcmFtZXRlcnM/IEludGVyZXN0aW5nIHRob3VnaHQuLi4gWWVzLCBzeXprYWxsZXIgZG9lcyBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIGZ1enogbW9kdWxlIHBhcmFtZXRlcnMhIEhvd2V2ZXIsIHRoaW5raW5nIG1vcmUgYWJvdXQgaXQsIGBsb2NhbF9pcF9zdG9yZWAgYW5kIGByZW1vdGVfaXBfc3RvcmVgIHNlZW0gbGlrZSBiZXR0ZXIgdGFyZ2V0cyBmb3IgZnV6emluZyBzaW5jZSB0aG9zZSBjYW4gYmUgaW52b2tlZCBtb3JlIGR5bmFtaWNhbGx5IHRocm91Z2ggY29uZmlnZnMuIFRoYXQgb2ZmZXJzIGEgbXVjaCByaWNoZXIgYXR0YWNrIHN1cmZhY2UuIEFuZCwgd2FpdC4uLiBpc24mIzM5O3QgYGVuYWJsZWRfc3RvcmVgIHBvdGVudGlhbGx5IGNhbGxpbmcgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGA/IEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGBlbmFibGVkX3N0b3JlYCBtb3JlIGNsb3NlbHk7IHRoYXQgc291bmRzIHByb21pc2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW5hYmxlZF9zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9OTY2PXN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfbXNnaWRfZW5hYmxlZF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTg1LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjk4NjpzdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05ODctXHRcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNDMyPXN0YXRpYyB2b2lkIGRpc2FibGVfc3lzZGF0YV9mZWF0dXJlKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0MzgtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTQzOTpzdGF0aWMgc3NpemVfdCBzeXNkYXRhX21zZ2lkX2VuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0NDAtXHRcdFx0XHRcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDY3LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE0Njg6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9yZWxlYXNlX2VuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0NjktXHRcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0OTYtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTQ5NzpzdGF0aWMgc3NpemVfdCBzeXNkYXRhX3Rhc2tuYW1lX2VuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0OTgtXHRcdFx0XHRcdCAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTI2LS8qIGNvbmZpZ2ZzIGhlbHBlciB0byBzeXNkYXRhIGNwdV9uciBmZWF0dXJlICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTUyNzpzdGF0aWMgc3NpemVfdCBzeXNkYXRhX2NwdV9ucl9lbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTI4LVx0XHRcdFx0XHQgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTg4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBjb2RlLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGl0OgoKKipBbmFseXppbmcgdGhlIGBlbmFibGVkX3N0b3JlYCBDYWxscyoqCgpBbHJpZ2h0LCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHVuZGVyc3RhbmQgdGhlIGJlaGF2aW9yIG9mIHRoaXMgY29kZSwgYW5kIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHRoYXQgaXMgYnkgZmlndXJpbmcgb3V0IGhvdyB0aGUgYGVuYWJsZWRfc3RvcmVgIGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQuIEkgbmVlZCB0byB0cmFjZSBldmVyeSBzaW5nbGUgaW5zdGFuY2Ugd2hlcmUgYGVuYWJsZWRfc3RvcmVgIGlzIGNhbGxlZC4gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBicmFuY2hlcyB0aGF0IGNoYW5nZSBob3cgYGVuYWJsZWRfc3RvcmVgIGlzIHV0aWxpemVkPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcGVyZm9ybWFuY2Ugb3IgdGhyZWFkaW5nIGNvbnNpZGVyYXRpb25zIGFzIGEgcmVzdWx0PyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGl0cyB1c2FnZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8ga25vdzogd2hhdCBkYXRhIGlzIHBhc3NlZCB0byBpdD8gV2hhdCBpcyBpdCBkb2luZyB3aXRoIHRoYXQgZGF0YT8gQW5kIGltcG9ydGFudGx5LCB3aGF0IGFyZSB0aGUgcmV0dXJuIHZhbHVlcyBvZiB0aGVzZSBjYWxscz8gVGhpcyB3aWxsIGhlbHAgbWUgcXVpY2tseSB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIHJlc3BvbnNpYmlsaXRpZXMsIGFuZCB0aGUgb3ZlcmFsbCByb2xlIGl0IHBsYXlzIGluIHRoZSBjb2RlLiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIGJlZm9yZSBJIGNhbiBldmFsdWF0ZSB0aGlzIGVmZmljaWVudGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk4NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTg2Olx0c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4gOTg3Olx0XHRcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuIDk4ODpcdHtcbiA5ODk6XHRcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG4gOTkwOlx0XHRib29sIGVuYWJsZWQsIGN1cnJlbnRfZW5hYmxlZDtcbiA5OTE6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gOTkyOlx0XHRzc2l6ZV90IHJldDtcbiA5OTM6XHRcbiA5OTQ6XHRcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XG4gOTk1Olx0XHRyZXQgPSBrc3RydG9ib29sKGJ1ZiwgXHUwMDI2ZW5hYmxlZCk7XG4gOTk2Olx0XHRpZiAocmV0KVxuIDk5NzpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gOTk4Olx0XG4gOTk5Olx0XHQvKiBXaGVuIHRoZSB1c2VyIGV4cGxpY2l0bHkgZW5hYmxlcyBvciBkaXNhYmxlcyBhIHRhcmdldCB0aGF0IGlzXG4xMDAwOlx0XHQgKiBjdXJyZW50bHkgZGVhY3RpdmF0ZWQsIHJlc2V0IGl0cyBzdGF0ZSB0byBkaXNhYmxlZC4gVGhlIERFQUNUSVZBVEVEXG4xMDAxOlx0XHQgKiBzdGF0ZSBvbmx5IHRyYWNrcyBpbnRlcmZhY2UtZHJpdmVuIGRlYWN0aXZhdGlvbiBhbmQgc2hvdWxkIF9ub3RfXG4xMDAyOlx0XHQgKiBwZXJzaXN0IHdoZW4gdGhlIHVzZXIgbWFudWFsbHkgY2hhbmdlcyB0aGUgdGFyZ2V0JiMzOTtzIGVuYWJsZWQgc3RhdGUuXG4xMDAzOlx0XHQgKi9cbjEwMDQ6XHRcdGlmIChudC1cdTAwM2VzdGF0ZSA9PSBTVEFURV9ERUFDVElWQVRFRClcbjEwMDU6XHRcdFx0bnQtXHUwMDNlc3RhdGUgPSBTVEFURV9ESVNBQkxFRDtcbjEwMDY6XHRcbjEwMDc6XHRcdHJldCA9IC1FSU5WQUw7XG4xMDA4Olx0XHRjdXJyZW50X2VuYWJsZWQgPSBudC1cdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEO1xuMTAwOTpcdFx0aWYgKGVuYWJsZWQgPT0gY3VycmVudF9lbmFibGVkKSB7XG4xMDEwOlx0XHRcdHByX2luZm8oXCYjMzQ7bmV0d29yayBsb2dnaW5nIGhhcyBhbHJlYWR5ICVzXFxuXCYjMzQ7LFxuMTAxMTpcdFx0XHRcdGN1cnJlbnRfZW5hYmxlZCA/IFwmIzM0O3N0YXJ0ZWRcJiMzNDsgOiBcJiMzNDtzdG9wcGVkXCYjMzQ7KTtcbjEwMTI6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMTAxMzpcdFx0fVxuMTAxNDpcdFxuMTAxNTpcdFx0aWYgKGVuYWJsZWQpIHtcdC8qIHRydWUgKi9cbjEwMTY6XHRcdFx0aWYgKG50LVx1MDAzZXJlbGVhc2UgXHUwMDI2XHUwMDI2ICFudC1cdTAwM2VleHRlbmRlZCkge1xuMTAxNzpcdFx0XHRcdHByX2VycihcJiMzNDtOb3QgZW5hYmxpbmcgbmV0Y29uc29sZS4gUmVsZWFzZSBmZWF0dXJlIHJlcXVpcmVzIGV4dGVuZGVkIGxvZyBtZXNzYWdlXCYjMzQ7KTtcbjEwMTg6XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xMDE5Olx0XHRcdH1cbjEwMjA6XHRcbjEwMjE6XHRcdFx0aWYgKG50LVx1MDAzZWV4dGVuZGVkIFx1MDAyNlx1MDAyNiAhY29uc29sZV9pc19yZWdpc3RlcmVkKFx1MDAyNm5ldGNvbnNvbGVfZXh0KSkge1xuMTAyMjpcdFx0XHRcdG5ldGNvbnNvbGVfZXh0LmZsYWdzIHw9IENPTl9FTkFCTEVEO1xuMTAyMzpcdFx0XHRcdHJlZ2lzdGVyX2NvbnNvbGUoXHUwMDI2bmV0Y29uc29sZV9leHQpO1xuMTAyNDpcdFx0XHR9XG4xMDI1Olx0XG4xMDI2Olx0XHRcdC8qIFVzZXIgbWlnaHQgYmUgZW5hYmxpbmcgdGhlIGJhc2ljIGZvcm1hdCB0YXJnZXQgZm9yIHRoZSB2ZXJ5XG4xMDI3Olx0XHRcdCAqIGZpcnN0IHRpbWUsIG1ha2Ugc3VyZSB0aGUgY29uc29sZSBpcyByZWdpc3RlcmVkLlxuMTAyODpcdFx0XHQgKi9cbjEwMjk6XHRcdFx0aWYgKCFudC1cdTAwM2VleHRlbmRlZCBcdTAwMjZcdTAwMjYgIWNvbnNvbGVfaXNfcmVnaXN0ZXJlZChcdTAwMjZuZXRjb25zb2xlKSkge1xuMTAzMDpcdFx0XHRcdG5ldGNvbnNvbGUuZmxhZ3MgfD0gQ09OX0VOQUJMRUQ7XG4xMDMxOlx0XHRcdFx0cmVnaXN0ZXJfY29uc29sZShcdTAwMjZuZXRjb25zb2xlKTtcbjEwMzI6XHRcdFx0fVxuMTAzMzpcdFxuMTAzNDpcdFx0XHQvKlxuMTAzNTpcdFx0XHQgKiBTa2lwIG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoKSAtLSBhbGwgdGhlIGF0dHJpYnV0ZXMgYXJlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTc3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgYGVuYWJsZWRfc3RvcmVgIFN0cnVjdHVyZSoqCgpBbHJpZ2h0LCBJJiMzOTttIGRpdmluZyBpbi4gJiMzNDtMZXQmIzM5O3MgcmVhZCB0aGUgcmVzdCBvZiBgZW5hYmxlZF9zdG9yZWAuJiMzNDsgVGhhdCYjMzk7cyB0aGUga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBlbmFibGVkX3N0b3JlYCBvYmplY3QgY29tcGxldGVseS4gVGhlIG5hbWUgaW1wbGllcyBpdCYjMzk7cyBhIGNyaXRpY2FsIGNvbXBvbmVudCwgbGlrZWx5IGhvbGRpbmcgYSBzdGF0dXMgb3IgY29uZmlndXJhdGlvbiB0aGF0IGdvdmVybnMgYWNjZXNzIG9yIGFjdGl2YXRpb24gb2Ygb3RoZXIgcmVzb3VyY2VzLiBXaGF0JiMzOTtzIHdpdGhpbiB0aGlzIHN0b3JlIGlzIGNydWNpYWwuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgb3RoZXIgcHJvcGVydGllcyBhbmQgdGhlIHN0b3JlJiMzOTtzIHJlbGF0aW9uc2hpcHMgd2l0aCBvdGhlciBvYmplY3RzLiBXaGF0IGFyZSB0aGUgc3RvcmUmIzM5O3MgbWV0aG9kcz8gV2hhdCBmb3JtYXQgYXJlIHRoZSBrZXlzL3ZhbHVlcz8gVW5kZXJzdGFuZGluZyB0aGlzIHN0cnVjdHVyZSB3aWxsIGJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlzIGJlaGF2aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMzYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAzNjpcdFx0XHQgKiBhbHJlYWR5IGNvbmZpZ3VyZWQgdmlhIGNvbmZpZ2ZzLiBKdXN0IHByaW50IHRoZW0gb3V0LlxuMTAzNzpcdFx0XHQgKi9cbjEwMzg6XHRcdFx0bmV0Y29uc29sZV9wcmludF9iYW5uZXIobnQpO1xuMTAzOTpcdFxuMTA0MDpcdFx0XHQvKiBJbml0aWFsaXNlIHRoZSBza2IgcG9vbCBiZWZvcmUgbmV0cG9sbF9zZXR1cCgpIHNvIHRoZSBwb29sXG4xMDQxOlx0XHRcdCAqIGlzIHZhbGlkIGFzIHNvb24gYXMgbnQtXHUwMDNlbnAuZGV2IGJlY29tZXMgdmlzaWJsZSB0b1xuMTA0MjpcdFx0XHQgKiB0YXJnZXRfbGlzdCB3YWxrZXJzIChuZXRjb25zb2xlX25ldGRldl9ldmVudCksIHdoaWNoIHdvdWxkXG4xMDQzOlx0XHRcdCAqIG90aGVyd2lzZSBjYWxsIG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2goKSBvbiB1bmluaXRpYWxpc2VkXG4xMDQ0Olx0XHRcdCAqIHN0YXRlLlxuMTA0NTpcdFx0XHQgKi9cbjEwNDY6XHRcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9pbml0KG50KTtcbjEwNDc6XHRcbjEwNDg6XHRcdFx0cmV0ID0gbmV0Y29uc19uZXRwb2xsX3NldHVwKG50KTtcbjEwNDk6XHRcdFx0aWYgKHJldCkge1xuMTA1MDpcdFx0XHRcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpO1xuMTA1MTpcdFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjEwNTI6XHRcdFx0fVxuMTA1MzpcdFxuMTA1NDpcdFx0XHRudC1cdTAwM2VzdGF0ZSA9IFNUQVRFX0VOQUJMRUQ7XG4xMDU1Olx0XHRcdHByX2luZm8oXCYjMzQ7bmV0d29yayBsb2dnaW5nIHN0YXJ0ZWRcXG5cJiMzNDspO1xuMTA1NjpcdFx0fSBlbHNlIHtcdC8qIGZhbHNlICovXG4xMDU3Olx0XHRcdC8qIFdlIG5lZWQgdG8gZGlzYWJsZSB0aGUgbmV0Y29uc29sZSBiZWZvcmUgY2xlYW5pbmcgaXQgdXBcbjEwNTg6XHRcdFx0ICogb3RoZXJ3aXNlIHdlIG1pZ2h0IGVuZCB1cCBpbiB3cml0ZV9tc2coKSB3aXRoXG4xMDU5Olx0XHRcdCAqIG50LVx1MDAzZW5wLmRldiA9PSBOVUxMIGFuZCBudC1cdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEXG4xMDYwOlx0XHRcdCAqL1xuMTA2MTpcdFx0XHRtdXRleF9sb2NrKFx1MDAyNnRhcmdldF9jbGVhbnVwX2xpc3RfbG9jayk7XG4xMDYyOlx0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnRhcmdldF9saXN0X2xvY2ssIGZsYWdzKTtcbjEwNjM6XHRcdFx0bnQtXHUwMDNlc3RhdGUgPSBTVEFURV9ESVNBQkxFRDtcbjEwNjQ6XHRcdFx0LyogUmVtb3ZlIHRoZSB0YXJnZXQgZnJvbSB0aGUgbGlzdCwgd2hpbGUgaG9sZGluZ1xuMTA2NTpcdFx0XHQgKiB0YXJnZXRfbGlzdF9sb2NrXG4xMDY2Olx0XHRcdCAqL1xuMTA2NzpcdFx0XHRsaXN0X21vdmUoXHUwMDI2bnQtXHUwMDNlbGlzdCwgXHUwMDI2dGFyZ2V0X2NsZWFudXBfbGlzdCk7XG4xMDY4Olx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaywgZmxhZ3MpO1xuMTA2OTpcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2dGFyZ2V0X2NsZWFudXBfbGlzdF9sb2NrKTtcbjEwNzA6XHRcdFx0LyogVW5yZWdpc3RlciBjb25zb2xlcywgd2hvc2UgdGhlIGxhc3QgdGFyZ2V0IG9mIHRoYXQgdHlwZSBnb3RcbjEwNzE6XHRcdFx0ICogZGlzYWJsZWQuXG4xMDcyOlx0XHRcdCAqL1xuMTA3MzpcdFx0XHR1bnJlZ2lzdGVyX25ldGNvbnNfY29uc29sZXMoKTtcbjEwNzQ6XHRcdH1cbjEwNzU6XHRcbjEwNzY6XHRcdHJldCA9IGNvdW50O1xuMTA3NzpcdFx0LyogRGVmZXJyZWQgY2xlYW51cCAqL1xuMTA3ODpcdFx0bmV0Y29uc29sZV9wcm9jZXNzX2NsZWFudXBzKCk7XG4xMDc5Olx0b3V0X3VubG9jazpcbjEwODA6XHRcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2soKTtcbjEwODE6XHRcdHJldHVybiByZXQ7XG4xMDgyOlx0fVxuMTA4MzpcdFxuMTA4NDpcdHN0YXRpYyBzc2l6ZV90IHJlbGVhc2Vfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4xMDg1Olx0XHRcdFx0ICAgICBzaXplX3QgY291bnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTM1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCYjMzk7cyBJbXBhY3QqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIHBhdGNoLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBgZW5hYmxlZF9zdG9yZWAgaXMgdGhlIGtleS4gVGhhdCBmdW5jdGlvbiBjYWxsIGRpcmVjdGx5IGxlYWRzIHRvIGBuZXRjb25zX25ldHBvbGxfc2V0dXBgLCB3aGljaCBpcyBhIGZhbnRhc3RpYyAmIzM0O2ZvY3VzIHN5bWJvbCYjMzQ7IOKAkyB0aGF0JiMzOTtzIHdoZXJlIHRoaXMgcGF0Y2gmIzM5O3Mgc2V0dXAgbG9naWMgaXMgaGl0dGluZy4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoYXQgYXJlYS4KCkJ1dCwgYWxyaWdodCwgdGhpbmtpbmcgYnJvYWRlciBub3cuIElmIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGxvZ2dpbmcsIGBuZXRwb2xsX3NlbmRfdWRwYCBzZWVtcyBsaWtlIGFub3RoZXIgaGlnaC1pbXBhY3QgYXJlYSDigJMgdGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gYWN0dWFsbHkgc2VuZGluZyB0aGUgbWVzc2FnZSwgcmlnaHQ/IEdvb2QgdG8gbm90ZS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlICpmdWxsKiBpbXBhY3QuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGtub3cgKndoYXQqIGNhbGxzIGBuZXRwb2xsX3NlbmRfdWRwYC4gTGV0JiMzOTtzIG1hcCB0aGF0IG91dCBhbmQgdGhlbiBjb21wYXJlIHdpdGggbXkgcHJpb3Iga25vd2xlZGdlIG9mIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldHBvbGxfc2VuZF91ZHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxMzA9c3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNTMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE1NDpzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNTUtXHRcdFx0ICAgIGludCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxOTEtLyoqXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE5MjogKiBzZW5kX3VkcCAtIFdyYXBwZXIgZm9yIG5ldHBvbGxfc2VuZF91ZHAgdGhhdCBjb3VudHMgZXJyb3JzXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE5My0gKiBAbnQ6IHRhcmdldCB0byBzZW5kIG1lc3NhZ2UgdG9cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE5Ni0gKlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxOTc6ICogQ2FsbHMgbmV0cG9sbF9zZW5kX3VkcCBhbmQgY2xhc3NpZmllcyB0aGUgcmV0dXJuIHZhbHVlLiBJZiBhbiBlcnJvclxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxOTgtICogb2NjdXJyZWQgaXQgaW5jcmVtZW50cyBzdGF0aXN0aWNzIGluIG50LVx1MDAzZXN0YXRzIGFjY29yZGluZ2x5LlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxOTk6ICogT25seSBjYWxscyBuZXRwb2xsX3NlbmRfdWRwIGlmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgaXMgZGlzYWJsZWQuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIwMC0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMjAxPXN0YXRpYyB2b2lkIHNlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjAyLXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjAzOlx0aW50IHJlc3VsdCA9IG5ldHBvbGxfc2VuZF91ZHAobnQsIG1zZywgbGVuKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjA0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzI0MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKkFuYWx5emluZyB0aGUgVURQIFNlbmRpbmcgRmxvdyoqCgpPa2F5LCBzbyBJIHNlZSBhIGZ1bmN0aW9uIGNhbGxlZCBgc2VuZF91ZHBgLCBhbmQgaW1tZWRpYXRlbHkgbXkgYnJhaW4ganVtcHMgdG86ICYjMzQ7UmlnaHQsIHRoaXMgaXMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSBzZW5kaW5nIG91dCBVRFAgcGFja2V0cy4mIzM0OyBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgcXVlc3Rpb24gaXMsIHdoZXJlIGRvZXMgYHNlbmRfdWRwYCBmaXQgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmU/IFRoZSB0ZXh0IGV4cGxpY2l0bHkgc3RhdGVzIHRoYXQgYHNlbmRfdWRwYCBjYWxscyBgbmV0cG9sbF9zZW5kX3VkcGAuIFRoYXQmIzM5O3MgaW1wb3J0YW50IOKAkyBpdCBlc3RhYmxpc2hlcyBhIGNsZWFyIGNhbGwgaGllcmFyY2h5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHJlbGF0aW9uc2hpcCBhbmQgd2hhdCBoYXBwZW5zIGF0IGVhY2ggbGF5ZXIuIEJ1dCBiZWZvcmUgSSBkaWcgaW50byBgbmV0cG9sbF9zZW5kX3VkcGAsIHdoaWNoIGxpa2VseSBoYW5kbGVzIHRoZSBsb3dlci1sZXZlbCBuZXR3b3JrIGludGVyZmFjZSBpbnRlcmFjdGlvbiwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlICoqb3JpZ2luKiogb2YgdGhpcyBjYWxsLiBUaGUga2V5IHF1ZXN0aW9uIEkmIzM5O20gYXNraW5nIG15c2VsZiBpczogJiMzNDtXaGF0IGhpZ2hlci1sZXZlbCBmdW5jdGlvbiwgcHJvY2Vzcywgb3IgZXZlbnQgdHJpZ2dlcmVkIHRoZSBleGVjdXRpb24gb2YgYHNlbmRfdWRwYCBpbiB0aGUgZmlyc3QgcGxhY2U/JiMzNDsgVW5kZXJzdGFuZGluZyB0aGUgdXBzdHJlYW0gY2FsbGVyKHMpIHdpbGwgZ2l2ZSBtZSBlc3NlbnRpYWwgY29udGV4dCBhYm91dCAqd2h5KiB0aGUgVURQIHBhY2tldCBpcyBiZWluZyBzZW50LCB3aGF0IGRhdGEgaXQgbGlrZWx5IGNvbnRhaW5zLCBhbmQgd2hlcmUgaXQmIzM5O3MgZGVzdGluZWQuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYHNlbmRfdWRwYCB0byBnZXQgdGhlIGluaXRpYXRpbmcgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VuZF91ZHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxMzA9c3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNTMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE1NDpzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNTUtXHRcdFx0ICAgIGludCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxOTEtLyoqXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE5MjogKiBzZW5kX3VkcCAtIFdyYXBwZXIgZm9yIG5ldHBvbGxfc2VuZF91ZHAgdGhhdCBjb3VudHMgZXJyb3JzXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE5My0gKiBAbnQ6IHRhcmdldCB0byBzZW5kIG1lc3NhZ2UgdG9cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE5Ni0gKlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxOTc6ICogQ2FsbHMgbmV0cG9sbF9zZW5kX3VkcCBhbmQgY2xhc3NpZmllcyB0aGUgcmV0dXJuIHZhbHVlLiBJZiBhbiBlcnJvclxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxOTgtICogb2NjdXJyZWQgaXQgaW5jcmVtZW50cyBzdGF0aXN0aWNzIGluIG50LVx1MDAzZXN0YXRzIGFjY29yZGluZ2x5LlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxOTk6ICogT25seSBjYWxscyBuZXRwb2xsX3NlbmRfdWRwIGlmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgaXMgZGlzYWJsZWQuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIwMC0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjAxOnN0YXRpYyB2b2lkIHNlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjAyLXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjAzOlx0aW50IHJlc3VsdCA9IG5ldHBvbGxfc2VuZF91ZHAobnQsIG1zZywgbGVuKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjA0LVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMjE4PXN0YXRpYyB2b2lkIHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjI1MS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjUyOlx0c2VuZF91ZHAobnQsIG50LVx1MDAzZWJ1ZiwgbXNnX2xlbik7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjI1My19XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIyNjM9c3RhdGljIHZvaWQgc2VuZF9mcmFnbWVudGVkX2JvZHkoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjM0OS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMzUwOlx0XHRzZW5kX3VkcChudCwgbnQtXHUwMDNlYnVmLCBidWZfb2Zmc2V0KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzUxLVx0fVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNDIzPXN0YXRpYyB2b2lkIHNlbmRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0MzAtXHRcdGZyYWcgPSBtaW4obGVmdCwgTUFYX1BSSU5UX0NIVU5LKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDMxOlx0XHRzZW5kX3VkcChudCwgdG1wLCBmcmFnKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDMyLVx0XHR0bXAgJiM0Mzs9IGZyYWc7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4Mjc4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVURQIE1lc3NhZ2UgU2VuZGluZyBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBVRFAgbWVzc2FnZSBzZW5kaW5nIGNvZGUuIEl0IGxvb2tzIGxpa2UgYHNlbmRfbXNnX3VkcGAsIGBzZW5kX2ZyYWdtZW50ZWRfYm9keWAsIGFuZCBgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbmAgYWxsIHVsdGltYXRlbHkgY2FsbCBgc2VuZF91ZHBgLiBUaGF0JiMzOTtzIHRoZSBjb3JlIGZ1bmN0aW9uLCByaWdodD8gQW5kIHRob3NlIGludGVybWVkaWFyeSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBmcm9tIGB3cml0ZV9tc2dgIGFuZCBgd3JpdGVfZXh0X21zZ2AuIFRob3NlIGFyZSByZWdpc3RlcmVkIGFzIGNvbnNvbGUgd3JpdGUgZnVuY3Rpb25zLiBTbywgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGRlZXAgZGl2ZSB3b3VsZCBiZSBgbmV0cG9sbF9zZW5kX3VkcGAuCgpXYWl0LCBzaG9vdCEgYG5ldHBvbGxfc2VuZF91ZHBgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhhdCYjMzk7cyBub3QgaWRlYWwgZm9yIGRpcmVjdCBhbmFseXNpcy4gT2theSwgc28gbWF5YmUgSSBzaG91bGQgZm9jdXMgaGlnaGVyIHVwIHRoZW4/IElzIGl0IGJldHRlciB0byBmb2N1cyBvbiBgd3JpdGVfbXNnYCBvciBgd3JpdGVfZXh0X21zZ2A/IEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgaWYgYHdyaXRlX21zZ2AgaXMgYWxzbyBzdGF0aWMsIGp1c3QgdG8gYmUgc3VyZS4gVGhpcyBnaXZlcyBtZSBhIGdvb2QgZW50cnkgcG9pbnQgdG8gc2VlIHdoZXJlIHRoZSBVRFAgc2VuZGluZyBpcyBpbml0aWF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dyaXRlX21zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTA1PXN0YXRpYyBMSVNUX0hFQUQodGFyZ2V0X2NsZWFudXBfbGlzdCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA2LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwNzovKiBUaGlzIG5lZWRzIHRvIGJlIGEgc3BpbmxvY2sgYmVjYXVzZSB3cml0ZV9tc2coKSBjYW5ub3Qgc2xlZXAgKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDgtc3RhdGljIERFRklORV9TUElOTE9DSyh0YXJnZXRfbGlzdF9sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9OTg2PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDU3LVx0XHQvKiBXZSBuZWVkIHRvIGRpc2FibGUgdGhlIG5ldGNvbnNvbGUgYmVmb3JlIGNsZWFuaW5nIGl0IHVwXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTA1ODpcdFx0ICogb3RoZXJ3aXNlIHdlIG1pZ2h0IGVuZCB1cCBpbiB3cml0ZV9tc2coKSB3aXRoXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA1OS1cdFx0ICogbnQtXHUwMDNlbnAuZGV2ID09IE5VTEwgYW5kIG50LVx1MDAzZXN0YXRlID09IFNUQVRFX0VOQUJMRURcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4NzMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqU3RhdGljIEZ1bmN0aW9uIEFsZXJ0ISoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIGp1c3Qgc2F3IHRoYXQgYHdyaXRlX21zZ2AgZnVuY3Rpb24sIGFuZCB0aGF0JiMzOTtzIGEgc3RhdGljIGRlY2xhcmF0aW9uLCB3aGljaCBpcyB1bnVzdWFsIGluIHRoaXMgY29udGV4dC4gSXQmIzM5O3MgbWFraW5nIG1lIHdvbmRlciBhYm91dCB0aGUgc2NvcGUuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gZGVmaW5lZCwgYW5kIG1vcmUgaW1wb3J0YW50bHksIGhvdyBpcyBpdCBiZWluZyBjYWxsZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBmdWxseSB0byBldmFsdWF0ZSBpdC4gTGV0IG1lIGNoZWNrIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIG5ldHdvcmsgY29uc29sZSBkcml2ZXIuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgZ28gZGlnZ2luZyBpbiBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBzdGF0aWMgYHdyaXRlX21zZ2AgaXMgYWxsIGFib3V0LiBIb3BlZnVsbHksIHRoaXMgc2hvdWxkIGNsYXJpZnkgaG93IGl0IGlzIHVzZWQgYW5kIHdoeSBpdCBpcyBzdGF0aWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhdGljIHZvaWQgd3JpdGVfbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxMDEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBDb2RlIEluc3BlY3Rpb24qKgoKSG1tLCBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gcGlucG9pbnQgdGhlIGlzc3VlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoYXQgYHdyaXRlX21zZ2AgZnVuY3Rpb24uIElzIGl0IHBvc3NpYmxlIHRoYXQgdGhlIHByb2JsZW0gbGllcyB3aXRoIHRoZSB3YXkgdGhlIGZ1bmN0aW9uIGlzIGRlY2xhcmVkPyBDb3VsZCBpdCBiZSBhIHNpbXBsZSBjYXNlIG9mIGEgbWlzc2luZyBrZXl3b3JkLCBsaWtlIHRoZSBgc3RhdGljIHZvaWRgIGRlY2xhcmF0aW9uPyBJJiMzOTttIHdvbmRlcmluZyBpZiwgZm9yIHdoYXRldmVyIHJlYXNvbiwgdGhlIG9yaWdpbmFsIHByb2dyYW1tZXIgdGhvdWdodCB0aGUgc3RhdGljIGtleXdvcmQgd2FzIHJlcXVpcmVkIGluIHRoZWlyIGluaXRpYWwgYXR0ZW1wdCB0byBnZXQgaXQgd29ya2luZywgdGhlbiBsZWZ0IGl0IHRoZXJlIGFmdGVyIHRlc3RpbmcsIGFuZCBpdCBpcyBub3cgaW50ZXJmZXJpbmcuIExldCBtZSBnbyBiYWNrIGFuZCByZXZpZXcgaG93IHRoYXQgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dyaXRlX21zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTA1PXN0YXRpYyBMSVNUX0hFQUQodGFyZ2V0X2NsZWFudXBfbGlzdCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA2LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwNzovKiBUaGlzIG5lZWRzIHRvIGJlIGEgc3BpbmxvY2sgYmVjYXVzZSB3cml0ZV9tc2coKSBjYW5ub3Qgc2xlZXAgKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDgtc3RhdGljIERFRklORV9TUElOTE9DSyh0YXJnZXRfbGlzdF9sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9OTg2PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDU3LVx0XHQvKiBXZSBuZWVkIHRvIGRpc2FibGUgdGhlIG5ldGNvbnNvbGUgYmVmb3JlIGNsZWFuaW5nIGl0IHVwXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTA1ODpcdFx0ICogb3RoZXJ3aXNlIHdlIG1pZ2h0IGVuZCB1cCBpbiB3cml0ZV9tc2coKSB3aXRoXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA1OS1cdFx0ICogbnQtXHUwMDNlbnAuZGV2ID09IE5VTEwgYW5kIG50LVx1MDAzZXN0YXRlID09IFNUQVRFX0VOQUJMRURcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1MjcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVidWdnaW5nIE5ldHdvcmsgQ29uc29sZSBPdXRwdXQqKgoKSG1tLCBJIHNlZW0gdG8gYmUgbWlzc2luZyBzb21ldGhpbmcgY3JpdGljYWwgaW4gdGhlIGRlYnVnZ2luZyBvdXRwdXQuIEkgc3VzcGVjdCBJIG5lZWQgbW9yZSBjb250ZXh0IGFyb3VuZCB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gY2FsbCBJIHdhcyBqdXN0IGV4YW1pbmluZy4gTXkgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uIG1pZ2h0IG5vdCBoYXZlIGdpdmVuIG1lIHRoZSBjb21wbGV0ZSBwaWN0dXJlLCBzbyBJIG5lZWQgdG8gYnJvYWRlbiBteSBzY29wZS4gR2l2ZW4gdGhhdCBJJiMzOTttIHdvcmtpbmcgd2l0aCBuZXR3b3JrIGNvbnNvbGUgb3V0cHV0LCB0aGUgYHdyaXRlX21zZ2AgZnVuY3Rpb24gc2VlbXMgbGlrZSBhIGxpa2VseSBjYW5kaWRhdGUgZm9yIGZ1cnRoZXIgZXhhbWluYXRpb24uIEkmIzM5O2xsIHJlYWNoIGZvciBgZ3JlcGAgYW5kIGxldmVyYWdlIGl0cyBjb250ZXh0IGZlYXR1cmUgKC1DIDEpLiBCeSB1c2luZyBgLUMgMWAgSSBzaG91bGQgYmUgYWJsZSB0byB2aWV3IG9uZSBsaW5lIGJlZm9yZSBhbmQgYWZ0ZXIgZWFjaCBtYXRjaCBvZiBgd3JpdGVfbXNnYCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgIGZpbGUuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHBvdGVudGlhbGx5IHJldmVhbCB0aGUgY2F1c2Ugb2YgdGhlIGlzc3VlIG9yIGF0IGxlYXN0IHBvaW50IG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24gZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSYjMzk7bSBob3BpbmcgdGhpcyB3aWxsIHByb3ZpZGUgdGhlIGZ1bGwgcGljdHVyZSB0aGF0IEkmIzM5O20gbWlzc2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d3JpdGVfbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMDU9c3RhdGljIExJU1RfSEVBRCh0YXJnZXRfY2xlYW51cF9saXN0KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDYtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTA3Oi8qIFRoaXMgbmVlZHMgdG8gYmUgYSBzcGlubG9jayBiZWNhdXNlIHdyaXRlX21zZygpIGNhbm5vdCBzbGVlcCAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwOC1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRhcmdldF9saXN0X2xvY2spO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz05ODY9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNTctXHRcdC8qIFdlIG5lZWQgdG8gZGlzYWJsZSB0aGUgbmV0Y29uc29sZSBiZWZvcmUgY2xlYW5pbmcgaXQgdXBcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMDU4Olx0XHQgKiBvdGhlcndpc2Ugd2UgbWlnaHQgZW5kIHVwIGluIHdyaXRlX21zZygpIHdpdGhcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDU5LVx0XHQgKiBudC1cdTAwM2VucC5kZXYgPT0gTlVMTCBhbmQgbnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDAzMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGF0OgoKKipUcm91Ymxlc2hvb3RpbmcgYSBGdW5jdGlvbiBDYWxsKioKCkhtbSwgc3RyYW5nZS4gSSB3YXMgZXhwZWN0aW5nIHRoZSBjb2RlIHRvIHJlY29nbml6ZSBgd3JpdGVfbXNnYCwgYnV0IGl0IHNlZW1zIHRvIGJlIG1pc3NpbmcgdGhlIGRlZmluaXRpb24uIEl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIHdoeSB0aGlzIGlzIGhhcHBlbmluZy4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBuYW1pbmcgY29udmVudGlvbnMgYW5kIHBvdGVudGlhbCBhbHRlcm5hdGl2ZSBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUuIENvdWxkIGl0IGJlIHVzaW5nIGEgc2xpZ2h0bHkgZGlmZmVyZW50LCBwZXJoYXBzIG1vcmUgc3BlY2lmaWMsIG5hbWU/IE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBsb29rIGZvciBhIHNpbWlsYXIgZnVuY3Rpb24gbmFtZSB0aGF0IG1pZ2h0IGJlIHVzZWQgYXMgYW4gaW50ZXJuYWwgY2FsbCB0byByZXBsYWNlIHRoZSBtaXNzaW5nIGRlZmluaXRpb24uIFBlcmhhcHMgaXQmIzM5O3MgdXNpbmcgYW4gZXh0ZW5zaW9uIGZ1bmN0aW9uIG5hbWUsIHNvbWV0aGluZyBsaWtlIGB3cml0ZV9leHRfbXNnYD8gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgbmV4dCBzdGVwLiBJJiMzOTtsbCBjaGVjayBteSBub3RlcyBhbmQgc2VhcmNoIHRoZSBjb2RlYmFzZSBmb3IgdGhhdCBhbHRlcm5hdGl2ZSBuYW1lIHJpZ2h0IGF3YXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d3JpdGVfZXh0X21zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjYzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCBzdW1tYXJpemluZyB0aGUgcHJvdmlkZWQgcHJvbXB0LCBmcmFtaW5nIGl0IGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byBDb25zb2xlIFN0cnVjdCBSZWdpc3RyYXRpb24qKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBhbmFseXplIGBjb25zb2xlYCBzdHJ1Y3QgcmVnaXN0cmF0aW9uLiBUaGF0JiMzOTtzIHRoZSBjb3JlIGZvY3VzLiBOb3csIHdoZW4gSSBzZWUgJiMzNDtyZWdpc3RyYXRpb24sJiMzNDsgbXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgcGFyc2luZyB0aGUgaW1wbGljYXRpb25zLiBXaGF0IGtpbmQgb2YgcmVnaXN0cmF0aW9uIGFyZSB3ZSB0YWxraW5nIGFib3V0PyBJcyBpdCBhIHJ1bnRpbWUgcHJvY2VzcywgYSBjb21waWxlLXRpbWUgbWVjaGFuaXNtLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gV2hhdCBjb250ZXh0IGFyZSB3ZSB3aXRoaW4/IElzIHRoaXMgYSBzcGVjaWZpYyBsaWJyYXJ5LCBhIGN1c3RvbSBmcmFtZXdvcmssIG9yIGEgYnJvYWRlciBzeXN0ZW0tbGV2ZWwgZGVzaWduPyBUaGUgdGVybSAmIzM0O3N0cnVjdCYjMzQ7IGFsc28gYnJpbmdzIHVwIHNvbWUgcXVlc3Rpb25zIGZvciBtZS4gV2hhdCBhdHRyaWJ1dGVzIGFyZSB3ZSB0YWxraW5nIGFib3V0PyBIb3cgaXMgaXQgaW1wbGVtZW50ZWQ/IElzIGl0IGJlaW5nIGNhbGxlZCBieSB0aGUgc3lzdGVtLCBvciB0aGUgdXNlcnM/IEluIG9yZGVyIHRvIGdpdmUgYW4gZXhwZXJ0IGFzc2Vzc21lbnQsIEkgbmVlZCB0byBrbm93IHRoZXNlIGRldGFpbHMuIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGBjb25zb2xlYCBzdHJ1Y3QgaXRzZWxmIGlzIGxpa2VseSBjZW50cmFsIHRvIGhvdyB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MgZnVuY3Rpb25zLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN0cnVjdCBpcyBiZWluZyBkZXNpZ25lZCwgc28gSSBjYW4gc2VlIHdoYXQgaXMgYmVpbmcgY2FsbGVkLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHByb3ZpZGVkIGNvbnRleHQsIHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0aGUgZGVzaWduIGdvYWxzLCBhbmQgYW55IGRvY3VtZW50YXRpb24gcmVsYXRlZCB0byB0aGlzIHByb2Nlc3MuIE9ubHkgdGhlbiBjYW4gSSB0cnVseSBncmFzcCB0aGUgbnVhbmNlcyBhbmQgcG90ZW50aWFsIGNoYWxsZW5nZXMgb3IgYmVuZWZpdHMgYXNzb2NpYXRlZCB3aXRoIGhvdyB0aGlzIGBjb25zb2xlYCBzdHJ1Y3QgaXMgYmVpbmcgcmVnaXN0ZXJlZC4gSSYjMzk7bSByZWFkeSB0byBkaWcgaW4gYW5kIGJyZWFrIGl0IGRvd24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBjb25zb2xlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMTI9c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZXRjb25zb2xlX3dxO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTctICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTE4OnN0YXRpYyBzdHJ1Y3QgY29uc29sZSBuZXRjb25zb2xlX2V4dCwgbmV0Y29uc29sZTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTktXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI0NDQ9c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZShzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQsIGJvb2wgZXh0ZW5kZWQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NzEtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQ3MjpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlX2V4dChzdHJ1Y3QgY29uc29sZSAqY29uIF9fYWx3YXlzX3VudXNlZCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDczLVx0XHRcdFx0IHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ3Ny1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDc4OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGVfYmFzaWMoc3RydWN0IGNvbnNvbGUgKmNvbiBfX2Fsd2F5c191bnVzZWQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ3OS1cdFx0XHRcdCAgIHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ4My1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDg0OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfZGV2aWNlX2xvY2soc3RydWN0IGNvbnNvbGUgKmNvbiBfX2Fsd2F5c191bnVzZWQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ4NS1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI0ODY9X19hY3F1aXJlcyhcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDkwLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0OTE6c3RhdGljIHZvaWQgbmV0Y29uc29sZV9kZXZpY2VfdW5sb2NrKHN0cnVjdCBjb25zb2xlICpjb24gX19hbHdheXNfdW51c2VkLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0OTItXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI2NDg9c3RhdGljIHZvaWQgZnJlZV9wYXJhbV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY1OS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjYwOnN0YXRpYyBzdHJ1Y3QgY29uc29sZSBuZXRjb25zb2xlX2V4dCA9IHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjYxLVx0Lm5hbWUgPSBcJiMzNDtuZXRjb25fZXh0XCYjMzQ7LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjY4LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2Njk6c3RhdGljIHN0cnVjdCBjb25zb2xlIG5ldGNvbnNvbGUgPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY3MC1cdC5uYW1lID0gXCYjMzQ7bmV0Y29uXCYjMzQ7LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTIwNgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDExOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0Y29uc29sZSBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIG5ldGNvbnNvbGUgZnVuY3Rpb25zIOKAkyBzcGVjaWZpY2FsbHkgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBhbmQgYG5ldGNvbnNvbGVfd3JpdGVfYmFzaWNgLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCBoYW5nIG9uLCBpc24mIzM5O3QgdGhlcmUgYSBjb21tb24gZnVuY3Rpb24gaGVyZSwgYSBnZW5lcmFsIGVudHJ5IHBvaW50LCB3aGljaCBJIHJlY2FsbCBhcyBgbmV0Y29uc29sZV93cml0ZWA/IExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0LiBZZXMsIGl0IGxvb2tzIGxpa2UgYG5ldGNvbnNvbGVfd3JpdGVgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uLgoKTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgaWYgYG5ldGNvbnNvbGVfd3JpdGVgIGlzIHN0YXRpYy4gQWxyaWdodCwgeWVwLCBpdCYjMzk7cyBtYXJrZWQgYXMgYHN0YXRpY2AuIFJpZ2h0LCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBndWlkaW5nIHVzIGhlcmU6ICYjMzQ7UHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiYjMzQ7IEhtbSwgd2VsbCwgc2luY2UgdGhlc2Ugc2VlbSB0byBiZSBzdGF0aWMgZnVuY3Rpb25zLCBsZXQmIzM5O3MgZXhwbG9yZSBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGF2YWlsYWJsZS4KCldlIGFyZSBmb3JjZWQgdG8gZW51bWVyYXRlIHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhlcmUgYXJlIG5vIG5vbi1zdGF0aWMgYWx0ZXJuYXRpdmVzLgoKTGV0IG1lIHRha2UgYSBsb29rIGF0IGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgIGFuZCBzZWUgaWYgYW55IGFyZSBleHBvc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1OTIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBDb2RlIEluc3BlY3Rpb24qKgoKQWxyaWdodCwgdGhlIGluaXRpYWwgcHJvbXB0IG1lbnRpb25zICYjMzQ7dm9pZCYjMzQ7IG9yIHNvbWV0aGluZyBzaW1pbGFyLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGhlcmUuIEkmIzM5O20gdGhpbmtpbmcsIHRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gcmV0dXJuIHR5cGVzLCBzcGVjaWZpY2FsbHkgdGhvc2UgdGhhdCBpbmRpY2F0ZSB0aGUgZnVuY3Rpb24gZG9lc24mIzM5O3QgcmV0dXJuIGFueSB2YWx1ZS4gTXkgaW5pdGlhbCBzY2FuIHdpbGwgYmUgdG8gZXhhbWluZSB0aGUgY29kZWJhc2UgZm9yIGluc3RhbmNlcyB3aGVyZSB0aGlzIGlzIGJlaW5nIGhhbmRsZWQgYW5kIGxvb2sgZm9yIHBvdGVudGlhbCBlcnJvcnMgb3IgdW5kZWZpbmVkIGJlaGF2aW9ycy4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hlcmUgYHZvaWRgIG9yIGEgc2ltaWxhciByZXR1cm4gdHlwZSAocGVyaGFwcyBhIGN1c3RvbSB0eXBlIHRoYXQgZWZmZWN0aXZlbHkgYWN0cyBhcyBhICYjMzQ7bm8gcmV0dXJuJiMzNDspIGlzIGJlaW5nIHVzZWQuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGFzc2VzcyBpdHMgdXNhZ2UuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBib3RoIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9ucyAqYW5kKiB0aGUgZnVuY3Rpb24gY2FsbHMuIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSB2aWdpbGFudCBmb3IgcGxhY2VzIHdoZXJlIGEgZnVuY3Rpb24mIzM5O3MgYHZvaWRgIHJldHVybiBtaWdodCBiZSBtaXNpbnRlcnByZXRlZCBvciBtaXN1c2VkLCBzdWNoIGFzIHRyeWluZyB0byBhc3NpZ24gaXRzIHJlc3VsdCB0byBhIHZhcmlhYmxlLCBvciB3aGVyZSBlcnJvciBoYW5kbGluZyBtaWdodCBiZSBpbmFwcHJvcHJpYXRlbHkgYXBwbGllZCBvciBtaXNzaW5nLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGV4Y2VwdGlvbnMsIG1lbW9yeSBsZWFrcywgYW5kIGFueSBwbGFjZSB3aGVyZSB0aGUgYHZvaWRgIGRlc2lnbmF0aW9uIGlzIGJlaW5nIG1pc2hhbmRsZWQuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlICpjb25jZXB0KiBvZiAmIzM0O25vIHJldHVybiYjMzQ7IGFuZCBob3cgdGhhdCYjMzk7cyBiZWluZyBpbXBsZW1lbnRlZCBhbmQgdHJlYXRlZCB3aXRoaW4gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aXzAtOV0mIzQzOyAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDU3NiBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTU2PU1PRFVMRV9JTVBPUlRfTlMoXCYjMzQ7TkVUREVWX0lOVEVSTkFMXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzktXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODA6c3RhdGljIGNoYXIgY29uZmlnW01BWF9QQVJBTV9MRU5HVEhdO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgxLW1vZHVsZV9wYXJhbV9zdHJpbmcobmV0Y29uc29sZSwgY29uZmlnLCBNQVhfUEFSQU1fTEVOR1RILCAwKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz04Mj1NT0RVTEVfUEFSTV9ERVNDKG5ldGNvbnNvbGUsIFwmIzM0OyBuZXRjb25zb2xlPVtzcmMtcG9ydF1AW3NyYy1pcF0vW2Rldl0sW3RndC1wb3J0XUBcdTAwM2N0Z3QtaXBcdTAwM2UvW3RndC1tYWNhZGRyXVwmIzM0Oyk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODQ6c3RhdGljIGJvb2wgb29wc19vbmx5O1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg1LW1vZHVsZV9wYXJhbShvb3BzX29ubHksIGJvb2wsIDA2MDApO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTg2PU1PRFVMRV9QQVJNX0RFU0Mob29wc19vbmx5LCBcJiMzNDtPbmx5IGxvZyBvb3BzIG1lc3NhZ2VzXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTAtI2lmbmRlZlx0TU9EVUxFXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTE6c3RhdGljIGludCBfX2luaXQgb3B0aW9uX3NldHVwKGNoYXIgKm9wdClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05Mi17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTk2PV9fc2V0dXAoXCYjMzQ7bmV0Y29uc29sZT1cJiMzNDssIG9wdGlvbl9zZXR1cCk7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk5LS8qIExpbmtlZCBsaXN0IG9mIGFsbCBjb25maWd1cmVkIHRhcmdldHMgKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMDA6c3RhdGljIExJU1RfSEVBRCh0YXJnZXRfbGlzdCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTAxLS8qIHRhcmdldF9jbGVhbnVwX2xpc3QgaXMgdXNlZCB0byB0cmFjayB0YXJnZXRzIHRoYXQgbmVlZCB0byBiZSBjbGVhbmVkIG91dHNpZGVcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA0LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwNTpzdGF0aWMgTElTVF9IRUFEKHRhcmdldF9jbGVhbnVwX2xpc3QpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNi1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDctLyogVGhpcyBuZWVkcyB0byBiZSBhIHNwaW5sb2NrIGJlY2F1c2Ugd3JpdGVfbXNnKCkgY2Fubm90IHNsZWVwICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTA4OnN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGFyZ2V0X2xpc3RfbG9jayk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA5LS8qIFRoaXMgbmVlZHMgdG8gYmUgYSBtdXRleCBiZWNhdXNlIG5ldHBvbGxfY2xlYW51cCBtaWdodCBzbGVlcCAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExMDpzdGF0aWMgREVGSU5FX01VVEVYKHRhcmdldF9jbGVhbnVwX2xpc3RfbG9jayk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTExLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExMjpzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm5ldGNvbnNvbGVfd3E7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTEzLVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTctICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTE4OnN0YXRpYyBzdHJ1Y3QgY29uc29sZSBuZXRjb25zb2xlX2V4dCwgbmV0Y29uc29sZTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTktXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTIwOnN0cnVjdCBuZXRjb25zb2xlX3RhcmdldF9zdGF0cyAge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyMS1cdHU2NF9zdGF0c190IHhtaXRfZHJvcF9jb3VudDtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI1LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyNjplbnVtIGNvbnNvbGVfdHlwZSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI3LVx0Q09OU19CQVNJQyA9IEJJVCgwKSxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM0LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzNTplbnVtIHN5c2RhdGFfZmVhdHVyZSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM2LVx0LyogUG9wdWxhdGUgdGhlIENQVSB0aGF0IHNlbmRzIHRoZSBtZXNzYWdlICovXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0Ny1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDg6ZW51bSB0YXJnZXRfc3RhdGUge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0OS1cdFNUQVRFX0RJU0FCTEVELFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTQtICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTk1OnN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk2LVx0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjI3LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyODpzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSBuZXRjb25zb2xlX3N1YnN5cztcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjk6c3RhdGljIERFRklORV9NVVRFWChkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXgpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzMC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMzE6c3RhdGljIGludCBfX2luaXQgZHluYW1pY19uZXRjb25zb2xlX2luaXQodm9pZClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzIte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzctXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjM4OnN0YXRpYyB2b2lkIF9fZXhpdCBkeW5hbWljX25ldGNvbnNvbGVfZXhpdCh2b2lkKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzOS17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0Ny0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDg6c3RhdGljIHZvaWQgbmV0Y29uc29sZV90YXJnZXRfZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ5LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjUzLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1NDpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9wdXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTUte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTktXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjYwOnN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKHZvaWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYxLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2NTpzdGF0aWMgdm9pZCBkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfdW5sb2NrKHZvaWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY2LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjcxLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI3MjpzdGF0aWMgaW50IF9faW5pdCBkeW5hbWljX25ldGNvbnNvbGVfaW5pdCh2b2lkKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3My17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3Ni1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNzc6c3RhdGljIHZvaWQgX19leGl0IGR5bmFtaWNfbmV0Y29uc29sZV9leGl0KHZvaWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjc4LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjg0LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI4NTpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9nZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yODYte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yODgtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjg5OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X3B1dChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI5MC17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI5Mi1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyOTM6c3RhdGljIHZvaWQgcG9wdWxhdGVfY29uZmlnZnNfaXRlbShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI5NC1cdFx0XHRcdCAgIGludCBjbWRsaW5lX2NvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yOTctXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjk4OnN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKHZvaWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjk5LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzAxLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjMwMjpzdGF0aWMgdm9pZCBkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfdW5sb2NrKHZvaWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzAzLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzA4LS8qIENoZWNrIGlmIHRoZSB0YXJnZXQgd2FzIGJvdW5kIGJ5IG1hYyBhZGRyZXNzLiAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjMwOTpzdGF0aWMgYm9vbCBib3VuZF9ieV9tYWMoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMTAte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMTMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzE0OnN0YXRpYyB2b2lkIG5ldGNvbnNfcmVsZWFzZV9kZXYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMTUte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMjAtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzIxOnN0YXRpYyB2b2lkIHJlZmlsbF9za2JzKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzIyLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzM0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjMzNTpzdGF0aWMgdm9pZCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMzNi17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM0Ni0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozNDc6c3RhdGljIHZvaWQgbmV0Y29uc29sZV9za2JfcG9vbF9pbml0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzQ4LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzUxLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjM1MjpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzUzLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzU3LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjM1ODpzdGF0aWMgdm9pZCBuZXRjb25zX3dhaXRfY2FycmllcihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM1OS17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM3OC0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozNzk6c3RhdGljIGNoYXIgKm5ldGNvbnNfZWdyZXNzX2RldihzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnN6KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM4MC17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM5MC0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozOTE6c3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM5Mi1cdFx0XHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00MzQtICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDM1OnN0YXRpYyBpbnQgbmV0Y29uc190YWtlX2lwdjQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00MzYtXHRcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDYzLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQ2NDpzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ2NS17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU1NS0vKiBBdHRlbXB0cyB0byByZXN1bWUgbG9nZ2luZyB0byBhIGRlYWN0aXZhdGVkIHRhcmdldC4gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo1NTY6c3RhdGljIHZvaWQgcmVzdW1lX3RhcmdldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU1Ny17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU3Ni0vKiBDaGVja3MgaWYgYSBkZWFjdGl2YXRlZCB0YXJnZXQgbWF0Y2hlcyBhIGRldmljZS4gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo1Nzc6c3RhdGljIGJvb2wgZGVhY3RpdmF0ZWRfdGFyZ2V0X21hdGNoKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTc4LVx0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTg4LS8qIFByb2Nlc3Mgd29yayBzY2hlZHVsZWQgZm9yIHRhcmdldCByZXN1bWUuICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTg5OnN0YXRpYyB2b2lkIHByb2Nlc3NfcmVzdW1lX3RhcmdldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTkwLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjQ5LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjY1MDpzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19hbmRfaW5pdCh2b2lkKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTY1MS17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTY3OS0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo2ODA6c3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcm9jZXNzX2NsZWFudXBzX2NvcmUodm9pZClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02ODEte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03MDQtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzA1OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzA2LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzI2LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjcyNzpzdGF0aWMgaW50IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBpbmV0X2FkZHIgKmFkZHIpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzI4LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzgwLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjc4MTpzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICp0b190YXJnZXQoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTc4Mi17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTc5NC0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3OTU6c3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcm9jZXNzX2NsZWFudXBzKHZvaWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzk2LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODA1LS8qIEdldCByaWQgb2YgcG9zc2libGUgdHJhaWxpbmcgbmV3bGluZSwgcmV0dXJuaW5nIHRoZSBuZXcgbGVuZ3RoICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODA2OnN0YXRpYyB2b2lkIHRyaW1fbmV3bGluZShjaGFyICpzLCBzaXplX3QgbWF4bGVuKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgwNy17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgyMC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4MjE6c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgyMi17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgyNS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4MjY6c3RhdGljIHNzaXplX3QgZXh0ZW5kZWRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04Mjcte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04MzAtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODMxOnN0YXRpYyBzc2l6ZV90IHJlbGVhc2Vfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04MzIte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04MzUtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODM2OnN0YXRpYyBzc2l6ZV90IGRldl9uYW1lX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODM3LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODQwLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg0MTpzdGF0aWMgc3NpemVfdCBsb2NhbF9wb3J0X3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODQyLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODQ1LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg0NjpzdGF0aWMgc3NpemVfdCByZW1vdGVfcG9ydF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg0Ny17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg1MC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4NTE6c3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04NTIte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04NjAtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODYxOnN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg2Mi17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg3MC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4NzE6c3RhdGljIHNzaXplX3QgbG9jYWxfbWFjX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODcyLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODc4LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg3OTpzdGF0aWMgc3NpemVfdCByZW1vdGVfbWFjX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODgwLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODgzLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg4NDpzdGF0aWMgc3NpemVfdCB0cmFuc21pdF9lcnJvcnNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04ODUte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04OTktLyogY29uZmlnZnMgaGVscGVyIHRvIGRpc3BsYXkgaWYgY3B1X25yIHN5c2RhdGEgZmVhdHVyZSBpcyBlbmFibGVkICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTAwOnN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfY3B1X25yX2VuYWJsZWRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05MDEte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05MTItLyogY29uZmlnZnMgaGVscGVyIHRvIGRpc3BsYXkgaWYgdGFza25hbWUgc3lzZGF0YSBmZWF0dXJlIGlzIGVuYWJsZWQgKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5MTM6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV90YXNrbmFtZV9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkxNC1cdFx0XHRcdFx0ICAgICBjaGFyICpidWYpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkyNS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5MjY6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9yZWxlYXNlX2VuYWJsZWRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTI3LVx0XHRcdFx0XHQgICAgY2hhciAqYnVmKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05NDEtICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTQyOnN0YXRpYyB2b2lkIHVucmVnaXN0ZXJfbmV0Y29uc19jb25zb2xlcyh2b2lkKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk0My17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk2NS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5NjY6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9tc2dpZF9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk2Ny1cdFx0XHRcdFx0ICBjaGFyICpidWYpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk4NS0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5ODY6c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTg3LVx0XHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA4My1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMDg0OnN0YXRpYyBzc2l6ZV90IHJlbGVhc2Vfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA4NS1cdFx0XHQgICAgIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTExMC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMTExOnN0YXRpYyBzc2l6ZV90IGV4dGVuZGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExMTItXHRcdHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTEzNi1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMTM3OnN0YXRpYyBzc2l6ZV90IGRldl9uYW1lX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExMzgtXHRcdHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE2My1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMTY0OnN0YXRpYyBzc2l6ZV90IGxvY2FsX3BvcnRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE2NS1cdFx0c2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTg1LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExODY6c3RhdGljIHNzaXplX3QgcmVtb3RlX3BvcnRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExODctXHRcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjA3LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyMDg6c3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIwOS1cdFx0c2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjI5LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyMzA6c3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyMzEtXHQgICAgICAgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjU2LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyNTc6c3RhdGljIHNpemVfdCBjb3VudF91c2VyZGF0YV9lbnRyaWVzKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI1OC17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyNjEtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTI2MjpzdGF0aWMgc3NpemVfdCByZW1vdGVfbWFjX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyNjMtXHRcdHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI4Ny1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMjg4OnN0cnVjdCB1c2VyZGF0dW0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyODktXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gaXRlbTtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI5Mi1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMjkzOnN0YXRpYyBzdHJ1Y3QgdXNlcmRhdHVtICp0b191c2VyZGF0dW0oc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyOTQte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjk3LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyOTg6c3RydWN0IHVzZXJkYXRhIHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjk5LVx0c3RydWN0IGNvbmZpZ19ncm91cCBncm91cDtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTMwMS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMzAyOnN0YXRpYyBzdHJ1Y3QgdXNlcmRhdGEgKnRvX3VzZXJkYXRhKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzAzLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTMwNi1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMzA3OnN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKnVzZXJkYXRhX3RvX3RhcmdldChzdHJ1Y3QgdXNlcmRhdGEgKnVkKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzMDgte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzE0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzMTU6c3RhdGljIHNzaXplX3QgdXNlcmRhdHVtX3ZhbHVlX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTMxNi17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzMjMtICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTMyNDpzdGF0aWMgaW50IGNhbGNfdXNlcmRhdGFfbGVuKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTMyNS17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNDItXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTM0MzpzdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNDQte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzkyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzOTM6c3RhdGljIHNzaXplX3QgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzOTQtXHRcdFx0XHQgICAgIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQzMS0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDMyOnN0YXRpYyB2b2lkIGRpc2FibGVfc3lzZGF0YV9mZWF0dXJlKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQzMy1cdFx0XHRcdCAgICBlbnVtIHN5c2RhdGFfZmVhdHVyZSBmZWF0dXJlKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDM4LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE0Mzk6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9tc2dpZF9lbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDQwLVx0XHRcdFx0XHQgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQ2Ny1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDY4OnN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfcmVsZWFzZV9lbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDY5LVx0XHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDk2LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE0OTc6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV90YXNrbmFtZV9lbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDk4LVx0XHRcdFx0XHQgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTUyNi0vKiBjb25maWdmcyBoZWxwZXIgdG8gc3lzZGF0YSBjcHVfbnIgZmVhdHVyZSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1Mjc6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9jcHVfbnJfZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTUyOC1cdFx0XHRcdFx0ICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNTY0PUNPTkZJR0ZTX0FUVFIoc3lzZGF0YV8sIG1zZ2lkX2VuYWJsZWQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1NjUtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU2NjpzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZSAqdXNlcmRhdHVtX2F0dHJzW10gPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU2Ny1cdFx1MDAyNnVzZXJkYXR1bV9hdHRyX3ZhbHVlLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTcwLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1NzE6c3RhdGljIHZvaWQgdXNlcmRhdHVtX3JlbGVhc2Uoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1NzIte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTc1LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1NzY6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgdXNlcmRhdHVtX29wcyA9IHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTc3LVx0LnJlbGVhc2UgPSB1c2VyZGF0dW1fcmVsZWFzZSxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU3OS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTgwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSB1c2VyZGF0dW1fdHlwZSA9IHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTgxLVx0LmN0X2l0ZW1fb3BzXHQ9IFx1MDAyNnVzZXJkYXR1bV9vcHMsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1ODUtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU4NjpzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICp1c2VyZGF0dW1fbWFrZV9pdGVtKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1ODctXHRcdFx0XHRcdCAgICAgICBjb25zdCBjaGFyICpuYW1lKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjA4LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2MDk6c3RhdGljIHZvaWQgdXNlcmRhdHVtX2Ryb3Aoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsIHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjEwLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTYyMi1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjIzOnN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICp1c2VyZGF0YV9hdHRyc1tdID0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2MjQtXHRcdTAwMjZzeXNkYXRhX2F0dHJfY3B1X25yX2VuYWJsZWQsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2MzAtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTYzMTpzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgdXNlcmRhdGFfb3BzID0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2MzItXHQubWFrZV9pdGVtXHRcdD0gdXNlcmRhdHVtX21ha2VfaXRlbSxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTYzNS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjM2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSB1c2VyZGF0YV90eXBlID0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2MzctXHQuY3RfaXRlbV9vcHNcdD0gXHUwMDI2dXNlcmRhdHVtX29wcyxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTY1Mz1DT05GSUdGU19BVFRSX1JPKCwgdHJhbnNtaXRfZXJyb3JzKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjU0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NTU6c3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm5ldGNvbnNvbGVfdGFyZ2V0X2F0dHJzW10gPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY1Ni1cdFx1MDAyNmF0dHJfZW5hYmxlZCxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY3My1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjc0OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2Uoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2NzUte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjgxLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2ODI6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgbmV0Y29uc29sZV90YXJnZXRfaXRlbV9vcHMgPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY4My1cdC5yZWxlYXNlXHRcdD0gbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZSxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY4NS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjg2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBuZXRjb25zb2xlX3RhcmdldF90eXBlID0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2ODctXHQuY3RfYXR0cnNcdFx0PSBuZXRjb25zb2xlX3RhcmdldF9hdHRycyxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY5MS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjkyOnN0YXRpYyB2b2lkIGluaXRfdGFyZ2V0X2NvbmZpZ19ncm91cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2OTMtXHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3MDAtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTcwMTpzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpmaW5kX2NtZGxpbmVfdGFyZ2V0KGNvbnN0IGNoYXIgKm5hbWUpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcwMi17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3MjEtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTcyMjpzdGF0aWMgc3RydWN0IGNvbmZpZ19ncm91cCAqbWFrZV9uZXRjb25zb2xlX3RhcmdldChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzIzLVx0XHRcdFx0XHRcdCAgIGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3NTUtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTc1NjpzdGF0aWMgdm9pZCBkcm9wX25ldGNvbnNvbGVfdGFyZ2V0KHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3NTctXHRcdFx0XHQgICBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4MDctXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTgwODpzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgbmV0Y29uc29sZV9zdWJzeXNfZ3JvdXBfb3BzID0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4MDktXHQubWFrZV9ncm91cFx0PSBtYWtlX25ldGNvbnNvbGVfdGFyZ2V0LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODEyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4MTM6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIG5ldGNvbnNvbGVfc3Vic3lzX3R5cGUgPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTgxNC1cdC5jdF9ncm91cF9vcHNcdD0gXHUwMDI2bmV0Y29uc29sZV9zdWJzeXNfZ3JvdXBfb3BzLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODE4LS8qIFRoZSBuZXRjb25zb2xlIGNvbmZpZ2ZzIHN1YnN5c3RlbSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4MTk6c3RhdGljIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gbmV0Y29uc29sZV9zdWJzeXMgPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTgyMC1cdC5zdV9ncm91cFx0PSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4MjctXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTgyODpzdGF0aWMgdm9pZCBwb3B1bGF0ZV9jb25maWdmc19pdGVtKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTgyOS1cdFx0XHRcdCAgIGludCBjbWRsaW5lX2NvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODM3LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4Mzg6c3RhdGljIGludCBzeXNkYXRhX2FwcGVuZF9jcHVfbnIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IG9mZnNldCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODM5LVx0XHRcdFx0IHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg0NS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODQ2OnN0YXRpYyBpbnQgc3lzZGF0YV9hcHBlbmRfdGFza25hbWUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IG9mZnNldCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODQ3LVx0XHRcdFx0ICAgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODUzLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4NTQ6c3RhdGljIGludCBzeXNkYXRhX2FwcGVuZF9yZWxlYXNlKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBvZmZzZXQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg1NS17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NjAtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTg2MTpzdGF0aWMgaW50IHN5c2RhdGFfYXBwZW5kX21zZ2lkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBvZmZzZXQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg2Mi17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NzMtICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTg3NDpzdGF0aWMgaW50IHByZXBhcmVfc3lzZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NzUtXHRcdFx0ICAgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODk5LS8qIEhhbmRsZSBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugbm90aWZpY2F0aW9ucyAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE5MDA6c3RhdGljIGludCBuZXRjb25zb2xlX25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTkwMS1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk3Ny1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxOTc4OnN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbmV0Y29uc29sZV9uZXRkZXZfbm90aWZpZXIgPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk3OS1cdC5ub3RpZmllcl9jYWxsICA9IG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTkzLSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE5OTQ6c3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjb25zX3NrYl9wb3Aoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IGxlbilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTk1LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjAxNi1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDE3OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmluZF9za2Ioc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IGxlbixcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDE4LVx0XHRcdFx0aW50IHJlc2VydmUpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwNDMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjA0NDpzdGF0aWMgdm9pZCBuZXRwb2xsX3VkcF9jaGVja3N1bShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwNDUtXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjA2OC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDY5OnN0YXRpYyB2b2lkIHB1c2hfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjA3MC17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwODYtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjA4NzpzdGF0aWMgdm9pZCBwdXNoX2V0aChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwODgte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTAxLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxMDI6c3RhdGljIHZvaWQgcHVzaF9pcHY0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjEwMy1cdFx0ICAgICAgaW50IGxlbilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjEyOS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTMwOnN0YXRpYyB2b2lkIHB1c2hfaXB2NihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxMzEtXHRcdCAgICAgIGludCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNTMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE1NDpzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNTUtXHRcdFx0ICAgIGludCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDAtICovXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA2NjIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMjMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKklkZW50aWZ5aW5nIEtleSBTeW1ib2xzIGFuZCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIG9yIHN5bWJvbHMgdGhhdCBhcmUgcmVsZXZhbnQsIHBhcnRpY3VsYXJseSB0aG9zZSB0aGF0IGFyZSBub3QgaW5saW5lZCwgYW5kIHRob3NlIHRoYXQgYXJlIG1vZGlmaWVkIGJ5IHRoZSBwYXRjaC4gSSBzZWUgdGhhdCBgbmV0cG9sbF9zZW5kX3VkcGAgaXMgc3RhdGljLCB3aGljaCBpbml0aWFsbHkgZ2l2ZXMgbWUgcGF1c2UsIGJ1dCBpdCYjMzk7cyBjbGVhcmx5IG1vZGlmaWVkIGluIHRoZSBkaWZmLiAgYG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50YCBpcyBhbHNvIHN0YXRpYywgYnV0IGl0JiMzOTtzIGEgbm90aWZpZXIgY2FsbGJhY2sgc28gaXQgaXMgdW5saWtlbHkgdG8gYmUgaW5saW5lZCBhbmQgaXMgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQuIFRoZSBvdGhlciBmdW5jdGlvbnMgSSBpZGVudGlmaWVkIChgbmV0Y29uc29sZV93cml0ZWAsIGBuZXRjb25zb2xlX3dyaXRlX2V4dGAsIGBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljYCwgYGluaXRfbmV0Y29uc29sZWAsIGBkeW5hbWljX25ldGNvbnNvbGVfaW5pdGApIGFyZSBlaXRoZXIgc3RhdGljIG9yIGludGVybmFsIGhlbHBlcnMgYW5kIHVubGlrZWx5IHRvIGJlIGdvb2QgdGFyZ2V0cy4KClRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IGd1aWRlIG1lIHRvd2FyZHMgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0IGhlbHBzIHJlZmluZSBteSBmb2N1cy4gTG9va2luZyBhdCB0aGUgY2FsbCBjaGFpbnMsIGBuZXRjb25zb2xlX3dyaXRlX2V4dGAgYW5kIGBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljYCBhcmUgY29uc29sZSBjYWxsYmFja3MuICBUaGV5JiMzOTtyZSAqbm90KiBpbmxpbmVkIGFuZCBhcmUgd29ydGggZXhwbG9yaW5nLiBTaW1pbGFybHksIGBlbmFibGVkX3N0b3JlYCwgYGxvY2FsX2lwX3N0b3JlYCwgYW5kIGByZW1vdGVfaXBfc3RvcmVgIGFyZSBjb25maWdmcyBjYWxsYmFja3MsIGFuZCB0aGVyZWZvcmUgKm5vdCogaW5saW5lZCwgYW5kIGFsc28gcmVwcmVzZW50IGdvb2QgdGFyZ2V0IGVudHJ5cG9pbnRzLgoKSG93ZXZlciwgSSBub3RlIHRoYXQgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBhbmQgYG5ldGNvbnNvbGVfd3JpdGVfYmFzaWNgIGRvbiYjMzk7dCBkaXJlY3RseSBjYWxsIHRoZSBjb2RlIEkmIzM5O20gaW50ZXJlc3RlZCBpbi4gVGhleSBjYWxsIGludG8gYSBkZWVwZXIgY2hhaW46IGBzZW5kX2V4dF9tc2dfdWRwYCAtJmd0OyBgc2VuZF9tc2dfdWRwYCAtJmd0OyBgc2VuZF91ZHBgIC0mZ3Q7IGBuZXRwb2xsX3NlbmRfdWRwYC4gICpDcnVjaWFsbHkqLCBgbmV0cG9sbF9zZW5kX3VkcGAgaXMgd2hlcmUgdGhlIGNvcmUgbW9kaWZpY2F0aW9uIGxpZXMuIFRoaXMgbWFrZXMgYG5ldHBvbGxfc2VuZF91ZHBgIGEgKnZlcnkqIGdvb2QgY2FuZGlkYXRlLCBkZXNwaXRlIGJlaW5nIHN0YXRpYy4gVGhlIHBhdGNoIGNoYW5nZXMgdGhlIGZhbWlseSBjaGVjayB0aGVyZSB3aGljaCBtZWFucyB0aGF0IHRoZSBjb2RlIHNob3VsZCBiZSBtb3JlIGFjdGl2ZSBub3cuICBJIHNob3VsZCBhbHNvIGluY2x1ZGUgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAgYmVjYXVzZSBpdCBjb250YWlucyBzaW1pbGFyIGZhbWlseSBjaGVja3MgaW4gdGhlIHBhdGNoLCBhbmQgYG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVgIGFzIGl0IGlzIGNhbGxlZCBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uLiBUaGUgY29uZmlnZnMgY2FsbGJhY2tzIGFyZSBrZXkuIGBsb2NhbF9pcF9zdG9yZWAgYW5kIGByZW1vdGVfaXBfc3RvcmVgIGFyZSBpbXBvcnRhbnQuIFRoZSBwYXRjaGVzIGFsc28gY29udGFpbiBtb2RpZmljYXRpb25zIHRvIGBuZXRwb2xsX3BhcnNlX2lwX2FkZHJgLiBgZW5hYmxlZF9zdG9yZWAgc2hvdWxkIHRyaWdnZXIgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAuCgpTbyBteSBpbml0aWFsIGxpc3Qgb2Yga2V5IHN5bWJvbHMgdG8gaW52ZXN0aWdhdGUgaXM6CgoqICAgYGxvY2FsX2lwX3N0b3JlYAoqICAgYHJlbW90ZV9pcF9zdG9yZWAKKiAgIGBlbmFibGVkX3N0b3JlYAoqICAgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAKKiAgIGBuZXRwb2xsX3NlbmRfdWRwYAoqICAgYG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVgCgpOZXh0LCBJIG5lZWQgdG8gY29uc2lkZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBmdXp6IG1vZHVsZSBwYXJhbWV0ZXJzLCBzbyBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAgZHVyaW5nIG1vZHVsZSBpbml0IHdpbGwgYmUgZ29vZC4gYGxvY2FsX2lwX3N0b3JlYCBhbmQgYHJlbW90ZV9pcF9zdG9yZWAgbG9vayBpZGVhbCBmb3IgY29uZmlnZnMgZnV6emluZy4gYGVuYWJsZWRfc3RvcmVgIHdpbGwgdHJpZ2dlciBgbmV0Y29uc19uZXRwb2xsX3NldHVwYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQgZm9yIGNvbXByZWhlbnNpdmUgdGVzdGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX05FVENPTlNPTEVgIGlzIGVuYWJsZWQsIGFuZCBgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ2AgdG9vLiBgQ09ORklHX0lQVjZgIGlzIHByb2JhYmx5IG5lZWRlZCB0byBleGVyY2lzZSBJUHY2IHBhdGhzLiBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgQ09ORklHX0NPTkZJR0ZTX0ZTYCBpcyBlbmFibGVkIGFzIHdlbGwgZm9yIGR5bmFtaWMgdXNlLiAgSSBzaG91bGQgZG91YmxlIGNoZWNrIGBORVRDT05TT0xFX0RZTkFNSUNgIGluIGBkcml2ZXJzL25ldC9LY29uZmlnYCB0byBjb25maXJtIHRoZXNlIGRlcGVuZGVuY2llcy4gVGhhdCBtZWFucyBteSBmaW5hbCBjb25maWd1cmF0aW9uIGxpc3QgaXM6CgoqICAgYE5FVENPTlNPTEVgCiogICBgTkVUQ09OU09MRV9EWU5BTUlDYAoqICAgYElQVjZgCiogICBgQ09ORklHRlNfRlNgCgpUaGlzIGdpdmVzIG1lIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGZ1enppbmcgYW5kIHZlcmlmeWluZyB0aGUgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRDT05TT0xFX0RZTkFNSUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MzI3PWNvbmZpZyBORVRDT05TT0xFXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzMtXG5kcml2ZXJzL25ldC9LY29uZmlnOjMzNDpjb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzNS1cdGJvb2wgXCYjMzQ7RHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgbG9nZ2luZyB0YXJnZXRzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyODI3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIG15IG93biB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqQ2hlY2tpbmcgYENPTkZJR19JUFY2YCYjMzk7cyBDb25maWd1cmF0aW9uIFN0YXR1cyoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIGludG8gdGhpcyBmdXJ0aGVyLCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgb2Ygb25lIGNydWNpYWwgdGhpbmc6IFdoYXQmIzM5O3MgdGhlIGRlYWwgd2l0aCBgQ09ORklHX0lQVjZgPyBJcyBpdCBhIHNpbXBsZSBib29sZWFuLCBhIHRydWUvZmFsc2UgZmxhZz8gT3IgaXMgaXQgYSBtb3JlIGNvbXBsZXggdHJpc3RhdGUgdmFyaWFibGUsIGNhcGFibGUgb2YgYmVpbmcgc2V0IHRvICYjMzQ7eWVzLCYjMzQ7ICYjMzQ7bm8sJiMzNDsgb3IgJiMzNDttb2R1bGUmIzM0Oz8gVGhhdCBzZWVtaW5nbHkgc21hbGwgZGlzdGluY3Rpb24gd2lsbCBkaWN0YXRlIGEgbG90IG9mIGhvdyBJIGFwcHJvYWNoIHRoaXMgcGFydGljdWxhciBhc3BlY3Qgb2YgdGhlIHN5c3RlbS4gSSBuZWVkIHRvIGtub3cgaXRzIGNvbmZpZ3VyYXRpb24gdHlwZSB0byBlZmZlY3RpdmVseSByZWFzb24gYWJvdXQgaXRzIGltcGxpY2F0aW9ucyBkb3duIHRoZSBsaW5lLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHF1ZXN0aW9uIHRoYXQgaW1wYWN0cyBteSBuZXh0IHN0ZXBzLiBHb3R0YSBnZXQgdGhpcyBuYWlsZWQgZG93bi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQVjYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWctNS1cbm5ldC9pcHY2L0tjb25maWc6NjptZW51Y29uZmlnIElQVjZcbm5ldC9pcHY2L0tjb25maWctNy1cdGJvb2wgXCYjMzQ7VGhlIElQdjYgcHJvdG9jb2xcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTE5PWlmIElQVjZcbm5ldC9pcHY2L0tjb25maWctMjAtXG5uZXQvaXB2Ni9LY29uZmlnOjIxOmNvbmZpZyBJUFY2X1JPVVRFUl9QUkVGXG5uZXQvaXB2Ni9LY29uZmlnLTIyLVx0Ym9vbCBcJiMzNDtJUHY2OiBSb3V0ZXIgUHJlZmVyZW5jZSAoUkZDIDQxOTEpIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMwLVxubmV0L2lwdjYvS2NvbmZpZzozMTpjb25maWcgSVBWNl9ST1VURV9JTkZPXG5uZXQvaXB2Ni9LY29uZmlnLTMyLVx0Ym9vbCBcJiMzNDtJUHY2OiBSb3V0ZSBJbmZvcm1hdGlvbiAoUkZDIDQxOTEpIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTM4LVxubmV0L2lwdjYvS2NvbmZpZzozOTpjb25maWcgSVBWNl9PUFRJTUlTVElDX0RBRFxubmV0L2lwdjYvS2NvbmZpZy00MC1cdGJvb2wgXCYjMzQ7SVB2NjogRW5hYmxlIFJGQyA0NDI5IE9wdGltaXN0aWMgREFEXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xMDI9Y29uZmlnIElORVQ2X0lQQ09NUFxuLS1cbm5ldC9pcHY2L0tjb25maWctMTExLVxubmV0L2lwdjYvS2NvbmZpZzoxMTI6Y29uZmlnIElQVjZfTUlQNlxubmV0L2lwdjYvS2NvbmZpZy0xMTMtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBNb2JpbGl0eVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTE5LVxubmV0L2lwdjYvS2NvbmZpZzoxMjA6Y29uZmlnIElQVjZfSUxBXG5uZXQvaXB2Ni9LY29uZmlnLTEyMS1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElkZW50aWZpZXIgTG9jYXRvciBBZGRyZXNzaW5nIChJTEEpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xNDY9Y29uZmlnIElORVQ2X1RVTk5FTFxuLS1cbm5ldC9pcHY2L0tjb25maWctMTQ5LVxubmV0L2lwdjYvS2NvbmZpZzoxNTA6Y29uZmlnIElQVjZfVlRJXG5uZXQvaXB2Ni9LY29uZmlnLTE1MS1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgKHNlY3VyZSkgSVB2NjogdHVubmVsaW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNjEtXG5uZXQvaXB2Ni9LY29uZmlnOjE2Mjpjb25maWcgSVBWNl9TSVRcbm5ldC9pcHY2L0tjb25maWctMTYzLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogSVB2Ni1pbi1JUHY0IHR1bm5lbCAoU0lUIGRyaXZlcilcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE3Ni1cbm5ldC9pcHY2L0tjb25maWc6MTc3OmNvbmZpZyBJUFY2X1NJVF82UkRcbm5ldC9pcHY2L0tjb25maWctMTc4LVx0Ym9vbCBcJiMzNDtJUHY2OiBJUHY2IFJhcGlkIERlcGxveW1lbnQgKDZSRClcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE5NS1cbm5ldC9pcHY2L0tjb25maWc6MTk2OmNvbmZpZyBJUFY2X05ESVNDX05PREVUWVBFXG5uZXQvaXB2Ni9LY29uZmlnLTE5Ny1cdGJvb2xcbm5ldC9pcHY2L0tjb25maWctMTk4LVxubmV0L2lwdjYvS2NvbmZpZzoxOTk6Y29uZmlnIElQVjZfVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTIwMC1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElQLWluLUlQdjYgdHVubmVsIChSRkMyNDczKVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjA5LVxubmV0L2lwdjYvS2NvbmZpZzoyMTA6Y29uZmlnIElQVjZfR1JFXG5uZXQvaXB2Ni9LY29uZmlnLTIxMS1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IEdSRSB0dW5uZWxcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIyNy1cbm5ldC9pcHY2L0tjb25maWc6MjI4OmNvbmZpZyBJUFY2X0ZPVVxubmV0L2lwdjYvS2NvbmZpZy0yMjktXHR0cmlzdGF0ZVxuLS1cbm5ldC9pcHY2L0tjb25maWctMjMxLVxubmV0L2lwdjYvS2NvbmZpZzoyMzI6Y29uZmlnIElQVjZfRk9VX1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yMzMtXHR0cmlzdGF0ZVxuLS1cbm5ldC9pcHY2L0tjb25maWctMjM2LVxubmV0L2lwdjYvS2NvbmZpZzoyMzc6Y29uZmlnIElQVjZfTVVMVElQTEVfVEFCTEVTXG5uZXQvaXB2Ni9LY29uZmlnLTIzOC1cdGJvb2wgXCYjMzQ7SVB2NjogTXVsdGlwbGUgUm91dGluZyBUYWJsZXNcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI0Mi1cbm5ldC9pcHY2L0tjb25maWc6MjQzOmNvbmZpZyBJUFY2X1NVQlRSRUVTXG5uZXQvaXB2Ni9LY29uZmlnLTI0NC1cdGJvb2wgXCYjMzQ7SVB2Njogc291cmNlIGFkZHJlc3MgYmFzZWQgcm91dGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjU2LVxubmV0L2lwdjYvS2NvbmZpZzoyNTc6Y29uZmlnIElQVjZfTVJPVVRFXG5uZXQvaXB2Ni9LY29uZmlnLTI1OC1cdGJvb2wgXCYjMzQ7SVB2NjogbXVsdGljYXN0IHJvdXRpbmdcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI2NC1cbm5ldC9pcHY2L0tjb25maWc6MjY1OmNvbmZpZyBJUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY2L0tjb25maWctMjY2LVx0Ym9vbCBcJiMzNDtJUHY2OiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI3OC1cbm5ldC9pcHY2L0tjb25maWc6Mjc5OmNvbmZpZyBJUFY2X1BJTVNNX1YyXG5uZXQvaXB2Ni9LY29uZmlnLTI4MC1cdGJvb2wgXCYjMzQ7SVB2NjogUElNLVNNIHZlcnNpb24gMiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yODUtXG5uZXQvaXB2Ni9LY29uZmlnOjI4Njpjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTI4Ny1cdGJvb2wgXCYjMzQ7SVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI5OS1cbm5ldC9pcHY2L0tjb25maWc6MzAwOmNvbmZpZyBJUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvS2NvbmZpZy0zMDEtXHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMxMS1cbm5ldC9pcHY2L0tjb25maWc6MzEyOmNvbmZpZyBJUFY2X1NFRzZfQlBGXG5uZXQvaXB2Ni9LY29uZmlnLTMxMy1cdGRlZl9ib29sIHlcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMxNi1cbm5ldC9pcHY2L0tjb25maWc6MzE3OmNvbmZpZyBJUFY2X1JQTF9MV1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0zMTgtXHRib29sIFwmIzM0O0lQdjY6IFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMzI3LVxubmV0L2lwdjYvS2NvbmZpZzozMjg6Y29uZmlnIElQVjZfSU9BTTZfTFdUVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMzI5LVx0Ym9vbCBcJiMzNDtJUHY2OiBJT0FNIFByZS1hbGxvY2F0ZWQgVHJhY2UgaW5zZXJ0aW9uIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ1NzkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV0Y29uc29sZSBNb2R1bGUmIzM5O3MgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgSVBWNmAgaXMganVzdCBhIGJvb2xlYW4sIGFuZCBpdCYjMzk7cyBzZXQgY29ycmVjdGx5LiBUaGF0JiMzOTtzIGdvb2QsIG9uZSBsZXNzIHRoaW5nIHRvIHdvcnJ5IGFib3V0LiBOb3csIGxldCYjMzk7cyB0YWtlIHN0b2NrIG9mIHRoZSBrZXkgc3ltYm9scyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGhlcmU6IGBsb2NhbF9pcF9zdG9yZWAsIGByZW1vdGVfaXBfc3RvcmVgLCBgZW5hYmxlZF9zdG9yZWAsIGBuZXRjb25zX25ldHBvbGxfc2V0dXBgLCBgbmV0cG9sbF9zZW5kX3VkcGAsIGFuZCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGNvcmUgY29tcG9uZW50cyBJIG5lZWQgdG8gdW5kZXJzdGFuZC4KCldhaXQgYSBzZWNvbmTigKYgYG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYGFsbG9jX3BhcmFtX3RhcmdldGAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGZyb20gYGluaXRfbmV0Y29uc29sZWAsIHdoaWNoIGlzIHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBmdW5jdGlvbiBpcyBhY2Nlc3NpYmxlIGZyb20gb3V0c2lkZSB0aGUga2VybmVsLiBUaGUgc3RhdGljIGRlY2xhcmF0aW9uIGlzIG5vdCBpZGVhbCwgZGVwZW5kaW5nIG9uIHRoZSBzY29wZS4gQ291bGQgYG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVgIGJlIHJlYWNoZWQgdGhyb3VnaCBjb25maWdmcz8gVGhhdCYjMzk7cyBhIHBvc3NpYmlsaXR5IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBJZiBzbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBwYXJzZXIgaXMgYmVpbmcgYWNjZXNzZWQuCgpUbyBjbGFyaWZ5IG15IHRob3VnaHQgcHJvY2VzcywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGNhbGxlcnMgb2YgYGFsbG9jX3BhcmFtX3RhcmdldGAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYCBpcyB1c2VkLCBhbmQgZnJvbSB3aGVyZS4gVGhpcyBpcyBhIGNyaXRpY2FsIHBvaW50IHRvIHBpbiBkb3duIHRvIGFzc2VzcyB0aGUgcG90ZW50aWFsIGlzc3Vlcywgb3IgaWYgdGhlIHN5c3RlbSBkZXNpZ24gaXMgc291bmQsIGluIHRoZSBuZXRjb25zb2xlIG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfcGFyYW1fdGFyZ2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNDk4PXN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1ODUtLyogQWxsb2NhdGUgbmV3IHRhcmdldCAoZnJvbSBib290L21vZHVsZSBwYXJhbSkgYW5kIHNldHVwIG5ldHBvbGwgZm9yIGl0ICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjU4NjpzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19wYXJhbV90YXJnZXQoY2hhciAqdGFyZ2V0X2NvbmZpZyxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTg3LVx0XHRcdFx0XHRcdCAgICBpbnQgY21kbGluZV9jb3VudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjY3OD1zdGF0aWMgaW50IF9faW5pdCBpbml0X25ldGNvbnNvbGUodm9pZClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY4OS1cdFx0d2hpbGUgKCh0YXJnZXRfY29uZmlnID0gc3Ryc2VwKFx1MDAyNmlucHV0LCBcJiMzNDs7XCYjMzQ7KSkpIHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjkwOlx0XHRcdG50ID0gYWxsb2NfcGFyYW1fdGFyZ2V0KHRhcmdldF9jb25maWcsIGNvdW50KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjkxLVx0XHRcdGlmIChJU19FUlIobnQpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MzM5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBGb2N1cyBmb3IgTmV0Y29uc29sZSBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyB0aGluayB0aGlzIHRocm91Z2ggZm9yIHRoZSBgbmV0Y29uc29sZWAgbW9kdWxlLiBJIHNlZSB0aGF0IGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYCBpcyBvbmx5IGNhbGxlZCBmcm9tIGBpbml0X25ldGNvbnNvbGVgLCBtZWFuaW5nIGl0JiMzOTtzIG9ubHkgYWNjZXNzaWJsZSBkdXJpbmcgbW9kdWxlIGxvYWQuIEdvb2QsIHRoYXQgbWFrZXMgaXQgYSB2aWFibGUgdGFyZ2V0IGZvciBmdXp6aW5nIGJlY2F1c2UgU3l6a2FsbGVyIGNhbiwgb2YgY291cnNlLCBmdXp6IG1vZHVsZSBwYXJhbWV0ZXJzLgoKTm93LCBJIG5lZWQgdG8gY2hvb3NlIHNvbWUgZ29vZCBmb2N1cyBzeW1ib2xzLiBJJiMzOTttIGNvbnNpZGVyaW5nIGBuZXRwb2xsX3BhcnNlX2lwX2FkZHJgLiBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgYnkgYGxvY2FsX2lwX3N0b3JlYCwgYHJlbW90ZV9pcF9zdG9yZWAsIGFuZCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAsIHdoaWNoIGlzIGEgZ29vZCBzaWduLiBJdCAqaXMqIHN0YXRpYywgYnV0IGl0JiMzOTtzIHRoZSBjb3JlIHBhcnNpbmcgZnVuY3Rpb24gdGhhdCYjMzk7cyBiZWluZyBtb2RpZmllZCwgc28gSSYjMzk7bGwga2VlcCBpdCBpbiBmb3Igbm93LgoKTGV0JiMzOTtzIHJlZmluZSB0aGUgbGlzdC4gUmlnaHQgbm93LCBJJiMzOTttIHRoaW5raW5nOgoKKiAgIGBsb2NhbF9pcF9zdG9yZWAKKiAgIGByZW1vdGVfaXBfc3RvcmVgCiogICBgZW5hYmxlZF9zdG9yZWAKKiAgIGBuZXRjb25zX25ldHBvbGxfc2V0dXBgCiogICBgbmV0cG9sbF9zZW5kX3VkcGAKKiAgIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYAoqICAgYG5ldHBvbGxfcGFyc2VfaXBfYWRkcmAKCkhvbGQgb24sIHRoZSBkb2N1bWVudGF0aW9uIGlzIHJlbWluZGluZyBtZSB0byBwcmlvcml0aXplIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhhdCBtYWtlcyBzZW5zZTsgaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIGRvbiYjMzk7dCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIGBuZXRwb2xsX3BhcnNlX2lwX2FkZHJgIGlzIHN0YXRpYywgYW5kIG1heSBiZSBpbmxpbmVkLiBCdXQgZ2l2ZW4gaXQgaXMgY2FsbGVkIGZyb20gbXVsdGlwbGUgbG9jYXRpb25zLCBwZXJoYXBzIG5vdC4gYGxvY2FsX2lwX3N0b3JlYCwgYHJlbW90ZV9pcF9zdG9yZWAsIGFuZCBgZW5hYmxlZF9zdG9yZWAgYXJlIGNvbmZpZ2ZzIGNhbGxiYWNrczsgbm8gd2F5IHRoZXkgYXJlIGlubGluZWQuIGBuZXRjb25zX25ldHBvbGxfc2V0dXBgIGlzIHByb2JhYmx5IHRvbyBsYXJnZSB0byBiZSBpbmxpbmVkIGFuZCB0aGUgc2FtZSBmb3IgYG5ldHBvbGxfc2VuZF91ZHBgIGFuZCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAuCgpZZXAsIEkgdGhpbmsgdGhpcyBsaXN0IGlzIHNvbGlkLgoKRm9yIGNvbmZpZ3VyYXRpb25zLCBJJiMzOTtsbCBuZWVkOgoKKiAgIGBORVRDT05TT0xFYAoqICAgYE5FVENPTlNPTEVfRFlOQU1JQ2AKKiAgIGBJUFY2YAoqICAgYENPTkZJR0ZTX0ZTYAoKSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgQ09ORklHRlNfRlNgIGlzIHRoZSBjb3JyZWN0IG5hbWUgdGhvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ09ORklHRlNfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9jb25maWdmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2NvbmZpZ2ZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2NvbmZpZ2ZzL0tjb25maWc6Mjpjb25maWcgQ09ORklHRlNfRlNcbmZzL2NvbmZpZ2ZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1VzZXJzcGFjZS1kcml2ZW4gY29uZmlndXJhdGlvbiBmaWxlc3lzdGVtXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MzQxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgRGVwZW5kZW5jaWVzIGZvciBOZXR3b3JrIENvbnNvbGUqKgoKT2theSwgeWVzLCBgQ09ORklHRlNfRlNgIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IGZpbGUgc3lzdGVtIGZvciB3aGF0IEkmIzM5O20gZG9pbmcgaGVyZS4gVGltZSB0byBtYWtlIHN1cmUgYE5FVENPTlNPTEVfRFlOQU1JQ2AgaXNuJiMzOTt0IHJlbHlpbmcgb24gYW55dGhpbmcgZWxzZSB1bmV4cGVjdGVkLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBkZXBlbmRlbmN5IHN0cmluZyBsb29rcyBsaWtlOiBgZGVwZW5kcyBvbiBORVRDT05TT0xFICZhbXA7JmFtcDsgU1lTRlMgJmFtcDsmYW1wOyBDT05GSUdGU19GUyAmYW1wOyZhbXA7ICEoTkVUQ09OU09MRT15ICZhbXA7JmFtcDsgQ09ORklHRlNfRlM9bSlgLiBBbHJpZ2h0LCBzbyBpdCYjMzk7cyBkaXJlY3RseSBkZXBlbmRlbnQgb24gYE5FVENPTlNPTEVgLCBgU1lTRlNgLCBhbmQgYENPTkZJR0ZTX0ZTYCwgd2l0aCBhIGNhdmVhdC4gVGhhdCYjMzk7cyBnb29kIHByYWN0aWNlLiBJJiMzOTtsbCBhZGQgYFNZU0ZTYCBqdXN0IHRvIGJlIHNhZmUsIHRob3VnaCBpdCYjMzk7cyB1c3VhbGx5IHBhcnQgb2YgbW9zdCBzZXR1cHMgYW55d2F5LiBXYWl0IGEgc2Vjb25kLi4uIGBTWVNGU2AgaXMgYSAqYm9vbGVhbiosIGlzbiYjMzk7dCBpdD8gT2theSwgbm8gcHJvYmxlbSwgdGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNZU0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvc3lzZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9zeXNmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9zeXNmcy9LY29uZmlnOjI6Y29uZmlnIFNZU0ZTXG5mcy9zeXNmcy9LY29uZmlnLTMtXHRib29sIFwmIzM0O3N5c2ZzIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NzE4CgkJCQkJCQlvdXRwdXQ6IDI0NgoJCQkJCQkJdGhvdWdodHM6IDIzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIHRoZSB0ZXh0IGNvbmZpcm1zIG15IGluaXRpYWwgaHVuY2gg4oCTIHllcywgYFNZU0ZTYCBpcyByZWxldmFudCBoZXJlLiBOb3csIGxldCYjMzk7cyBkaWcgZGVlcGVyIHRvIHNlZSB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBjb21lIGludG8gcGxheSB3aXRoIHRoaXMgcGF0Y2guIEkgYWxyZWFkeSBrbm93IHRoYXQgYENPTkZJR19JTkVUYCBpcyBlc3NlbnRpYWwgZm9yIElQdjQsIGFuZCB1c3VhbGx5LCBpdCYjMzk7cyBlbmFibGVkIGJ5IGRlZmF1bHQgYW55d2F5LiBgQ09ORklHX05FVGAgaXMgYW5vdGhlciBvYnZpb3VzIGRlcGVuZGVuY3ksIGFzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbmV0d29ya2luZy4KClRvIGJlIGNvbXByZWhlbnNpdmUgaW4gbXkgYW5hbHlzaXMsIEkmIzM5O20gZ29pbmcgdG8gZXhwbGljaXRseSBsaXN0IG91dCBhIGZldyBjb25maWd1cmF0aW9ucyB0aGF0IEkgdGhpbmsgYXJlIGdvaW5nIHRvIGJlIG1vc3QgcmVsZXZhbnQgZm9yIGZ1enppbmcgdGhpcyBwYXRjaDogYE5FVENPTlNPTEVgLCBgTkVUQ09OU09MRV9EWU5BTUlDYCwgYElQVjZgLCBhbmQgYENPTkZJR0ZTX0ZTYC4KClRoZSByZWFzb25pbmcgaXMgcHJldHR5IGNsZWFyLiBUaGlzIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgY2hhbmdpbmcgaG93IHRoZSBgbmV0Y29uc29sZWAgZHJpdmVyIGhhbmRsZXMgSVAgYWRkcmVzc2VzIGJ5IHJlcGxhY2luZyB0aGUgYm9vbGVhbiBmbGFnIGFwcHJvYWNoIHdpdGggYSBgc3RydWN0IGluZXRfYWRkcmAgdGhhdCBleHBsaWNpdGx5IHRyYWNrcyB0aGUgYWRkcmVzcyBmYW1pbHkuIFRoaXMgY2hhbmdlIGRpcmVjdGx5IGltcGFjdHMgaG93IHRoZSBkcml2ZXIgcGFyc2VzIGFuZCBtYW5hZ2VzIGxvY2FsIGFuZCByZW1vdGUgSVAgYWRkcmVzc2VzLCBhbmQgaG93IGl0IGhhbmRsZXMgVURQIGVuY2Fwc3VsYXRpb24gd2l0aGluIGBuZXRwb2xsYC4gSSBjYW4gc2VlIHNldmVyYWwgYXJlYXMgdGhhdCBuZWVkIHNjcnV0aW55LgoKU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgYXR0YWNrIHN1cmZhY2VzIHRocm91Z2ggbW9kdWxlIHBhcmFtZXRlcnMgYXQgYm9vdCBhbmQgbG9hZCB0aW1lIGFuZCBkeW5hbWljYWxseSB0aHJvdWdoIGNvbmZpZ2ZzIGF0dHJpYnV0ZXMuIFRoZSBmdXp6aW5nIGVmZm9ydHMgc2hvdWxkIHByaW9yaXRpemUgdGhlIGNvbmZpZ2ZzIHN0b3JlIGNhbGxiYWNrcywgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgcGFyc2VyLCBhbmQgdGhlIG5ldHBvbGwgc2V0dXAgYW5kIHNlbmQgcGF0aHMuIFdlIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgdGhpcyBuZXcgYWRkcmVzcyBmYW1pbHkgbG9naWMgaGFuZGxlcyBhbGwgdGhlIGVkZ2UgY2FzZXMgY29ycmVjdGx5LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGhlcmUsIHNvIHJvYnVzdCBmdXp6aW5nIGlzIGNydWNpYWwuCgpBbHJpZ2h0LCBJJiMzOTttIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRDT05TT0xFJiMzNDssCiAgICAmIzM0O05FVENPTlNPTEVfRFlOQU1JQyYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bG9jYWxfaXBfc3RvcmUmIzM0OywKICAgICYjMzQ7cmVtb3RlX2lwX3N0b3JlJiMzNDssCiAgICAmIzM0O2VuYWJsZWRfc3RvcmUmIzM0OywKICAgICYjMzQ7bmV0Y29uc19uZXRwb2xsX3NldHVwJiMzNDssCiAgICAmIzM0O25ldHBvbGxfc2VuZF91ZHAmIzM0OywKICAgICYjMzQ7bmV0Y29uc29sZV9wYXJzZXJfY21kbGluZSYjMzQ7LAogICAgJiMzNDtuZXRwb2xsX3BhcnNlX2lwX2FkZHImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGNvbnNvbGUgZHJpdmVyIHRvIHVzZSBhIG5ldyBgc3RydWN0IGluZXRfYWRkcmAgdGhhdCBleHBsaWNpdGx5IHRyYWNrcyB0aGUgSVAgYWRkcmVzcyBmYW1pbHkgKEFGX0lORVQsIEFGX0lORVQ2LCBvciBBRl9VTlNQRUMpIGluc3RlYWQgb2YgcmVseWluZyBvbiBhIGJvb2xlYW4gZmxhZyBhbmQgemVyby1jaGVja3MuIFRoaXMgYWZmZWN0cyBob3cgbG9jYWwgYW5kIHJlbW90ZSBJUCBhZGRyZXNzZXMgYXJlIHBhcnNlZCwgc3RvcmVkLCBhbmQgdXNlZCBmb3IgVURQIGVuY2Fwc3VsYXRpb24gaW4gbmV0cG9sbC4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBtb2R1bGUgcGFyYW1ldGVycyBhdCBib290L2xvYWQgdGltZSBhbmQgZHluYW1pY2FsbHkgdmlhIGNvbmZpZ2ZzIGF0dHJpYnV0ZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBjb25maWdmcyBzdG9yZSBjYWxsYmFja3MsIHRoZSBtb2R1bGUgcGFyYW1ldGVyIHBhcnNlciwgYW5kIHRoZSBuZXRwb2xsIHNldHVwIGFuZCBzZW5kIHBhdGhzIHRvIGVuc3VyZSB0aGUgbmV3IGFkZHJlc3MgZmFtaWx5IGxvZ2ljIGhhbmRsZXMgYWxsIGVkZ2UgY2FzZXMgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRDT05TT0xFJiMzNDssCiAgICAmIzM0O05FVENPTlNPTEVfRFlOQU1JQyYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bG9jYWxfaXBfc3RvcmUmIzM0OywKICAgICYjMzQ7cmVtb3RlX2lwX3N0b3JlJiMzNDssCiAgICAmIzM0O2VuYWJsZWRfc3RvcmUmIzM0OywKICAgICYjMzQ7bmV0Y29uc19uZXRwb2xsX3NldHVwJiMzNDssCiAgICAmIzM0O25ldHBvbGxfc2VuZF91ZHAmIzM0OywKICAgICYjMzQ7bmV0Y29uc29sZV9wYXJzZXJfY21kbGluZSYjMzQ7LAogICAgJiMzNDtuZXRwb2xsX3BhcnNlX2lwX2FkZHImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGNvbnNvbGUgZHJpdmVyIHRvIHVzZSBhIG5ldyBgc3RydWN0IGluZXRfYWRkcmAgdGhhdCBleHBsaWNpdGx5IHRyYWNrcyB0aGUgSVAgYWRkcmVzcyBmYW1pbHkgKEFGX0lORVQsIEFGX0lORVQ2LCBvciBBRl9VTlNQRUMpIGluc3RlYWQgb2YgcmVseWluZyBvbiBhIGJvb2xlYW4gZmxhZyBhbmQgemVyby1jaGVja3MuIFRoaXMgYWZmZWN0cyBob3cgbG9jYWwgYW5kIHJlbW90ZSBJUCBhZGRyZXNzZXMgYXJlIHBhcnNlZCwgc3RvcmVkLCBhbmQgdXNlZCBmb3IgVURQIGVuY2Fwc3VsYXRpb24gaW4gbmV0cG9sbC4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBtb2R1bGUgcGFyYW1ldGVycyBhdCBib290L2xvYWQgdGltZSBhbmQgZHluYW1pY2FsbHkgdmlhIGNvbmZpZ2ZzIGF0dHJpYnV0ZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBjb25maWdmcyBzdG9yZSBjYWxsYmFja3MsIHRoZSBtb2R1bGUgcGFyYW1ldGVyIHBhcnNlciwgYW5kIHRoZSBuZXRwb2xsIHNldHVwIGFuZCBzZW5kIHBhdGhzIHRvIGVuc3VyZSB0aGUgbmV3IGFkZHJlc3MgZmFtaWx5IGxvZ2ljIGhhbmRsZXMgYWxsIGVkZ2UgY2FzZXMgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6MzY6MTAuNzU4MDAwNjI5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3NzUxNzIwMDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVENPTlNPTEVcIixcbiAgICBcIk5FVENPTlNPTEVfRFlOQU1JQ1wiLFxuICAgIFwiSVBWNlwiLFxuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsb2NhbF9pcF9zdG9yZVwiLFxuICAgIFwicmVtb3RlX2lwX3N0b3JlXCIsXG4gICAgXCJlbmFibGVkX3N0b3JlXCIsXG4gICAgXCJuZXRjb25zX25ldHBvbGxfc2V0dXBcIixcbiAgICBcIm5ldHBvbGxfc2VuZF91ZHBcIixcbiAgICBcIm5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVcIixcbiAgICBcIm5ldHBvbGxfcGFyc2VfaXBfYWRkclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRjb25zb2xlIGRyaXZlciB0byB1c2UgYSBuZXcgYHN0cnVjdCBpbmV0X2FkZHJgIHRoYXQgZXhwbGljaXRseSB0cmFja3MgdGhlIElQIGFkZHJlc3MgZmFtaWx5IChBRl9JTkVULCBBRl9JTkVUNiwgb3IgQUZfVU5TUEVDKSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gYSBib29sZWFuIGZsYWcgYW5kIHplcm8tY2hlY2tzLiBUaGlzIGFmZmVjdHMgaG93IGxvY2FsIGFuZCByZW1vdGUgSVAgYWRkcmVzc2VzIGFyZSBwYXJzZWQsIHN0b3JlZCwgYW5kIHVzZWQgZm9yIFVEUCBlbmNhcHN1bGF0aW9uIGluIG5ldHBvbGwuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgbW9kdWxlIHBhcmFtZXRlcnMgYXQgYm9vdC9sb2FkIHRpbWUgYW5kIGR5bmFtaWNhbGx5IHZpYSBjb25maWdmcyBhdHRyaWJ1dGVzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgY29uZmlnZnMgc3RvcmUgY2FsbGJhY2tzLCB0aGUgbW9kdWxlIHBhcmFtZXRlciBwYXJzZXIsIGFuZCB0aGUgbmV0cG9sbCBzZXR1cCBhbmQgc2VuZCBwYXRocyB0byBlbnN1cmUgdGhlIG5ldyBhZGRyZXNzIGZhbWlseSBsb2dpYyBoYW5kbGVzIGFsbCBlZGdlIGNhc2VzIGNvcnJlY3RseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6MzY6MTAuNzU4MDA4NjRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMTgxODAxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDk3ODZiNTc4NjY3NDhlM2Q1YWZmOGEyNGRhMDAxNjA4MGMzNmMxZGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgNSAyMjozNjowOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcXG5pbmRleCAwMzkxMzMwMjMyOGNjLi42OTYyMTcwNWQ2OGRiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xcbkBAIC0xODEsNyArMTgxLDYgQEAgZW51bSB0YXJnZXRfc3RhdGUge1xcbiAgKlxcdFxcdGxvY2FsX21hY1xcdChyZWFkLW9ubHkpXFxuICAqIEBsb2NhbF9pcDpcXHRTb3VyY2UgSVAgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cXG4gICogQHJlbW90ZV9pcDpcXHREZXN0aW5hdGlvbiBJUCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxcbi0gKiBAaXB2NjpcXHRXaGV0aGVyIHRoZSB0YXJnZXQgYWRkcmVzc2VzIGFyZSBJUHY2IChyZWFkLXdyaXRlKS5cXG4gICogQGxvY2FsX3BvcnQ6XFx0U291cmNlIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxcbiAgKiBAcmVtb3RlX3BvcnQ6IERlc3RpbmF0aW9uIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxcbiAgKiBAcmVtb3RlX21hYzpcXHREZXN0aW5hdGlvbiBldGhlcm5ldCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxcbkBAIC0yMTIsOCArMjExLDcgQEAgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcXG4gXFx0Ym9vbFxcdFxcdFxcdGV4dGVuZGVkO1xcbiBcXHRib29sXFx0XFx0XFx0cmVsZWFzZTtcXG4gXFx0c3RydWN0IG5ldHBvbGxcXHRcXHRucDtcXG4tXFx0dW5pb24gaW5ldF9hZGRyXFx0XFx0bG9jYWxfaXAsIHJlbW90ZV9pcDtcXG4tXFx0Ym9vbFxcdFxcdFxcdGlwdjY7XFxuK1xcdHN0cnVjdCBpbmV0X2FkZHJcXHRsb2NhbF9pcCwgcmVtb3RlX2lwO1xcbiBcXHR1MTZcXHRcXHRcXHRsb2NhbF9wb3J0LCByZW1vdGVfcG9ydDtcXG4gXFx0dThcXHRcXHRcXHRyZW1vdGVfbWFjW0VUSF9BTEVOXTtcXG4gXFx0LyogcHJvdGVjdGVkIGJ5IHRhcmdldF9saXN0X2xvY2s7ICsxIGdpdmVzIHNjbnByaW50ZigpIHJvb20gZm9yIGl0c1xcbkBAIC00MTUsNiArNDEzLDcgQEAgc3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0XFx0LyogR290IHRoZSBJUCwgbGV0J3MgcmV0dXJuICovXFxuIFxcdFxcdFxcdG50LVxcdTAwM2Vsb2NhbF9pcC5pbjYgPSBpZnAtXFx1MDAzZWFkZHI7XFxuK1xcdFxcdFxcdG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPSBBRl9JTkVUNjtcXG4gXFx0XFx0XFx0ZXJyID0gMDtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG5AQCAtNDU2LDI4ICs0NTUsMTIgQEAgc3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbiBcXHR9XFxuIFxcbiBcXHRudC1cXHUwMDNlbG9jYWxfaXAuaXAgPSBpZmEtXFx1MDAzZWlmYV9sb2NhbDtcXG4rXFx0bnQtXFx1MDAzZWxvY2FsX2lwLmZhbWlseSA9IEFGX0lORVQ7XFxuIFxcdG5wX2luZm8obnAsIFxcXCJsb2NhbCBJUCAlcEk0XFxcXG5cXFwiLCBcXHUwMDI2bnQtXFx1MDAzZWxvY2FsX2lwLmlwKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBUZXN0IHdoZXRoZXIgdGhlIGNhbGxlciBsZWZ0IG50LVxcdTAwM2Vsb2NhbF9pcCB1bnNldCwgc28gdGhhdFxcbi0gKiBuZXRjb25zX25ldHBvbGxfc2V0dXAoKSBzaG91bGQgYXV0by1wb3B1bGF0ZSBpdCBmcm9tIHRoZSBlZ3Jlc3MgZGV2aWNlLlxcbi0gKlxcbi0gKiBudC1cXHUwMDNlbG9jYWxfaXAgaXMgYSB1bmlvbiBvZiBfX2JlMzIgKElQdjQpIGFuZCBzdHJ1Y3QgaW42X2FkZHIgKElQdjYpLFxcbi0gKiBzbyBhbiBJUHY2IGFkZHJlc3Mgd2hvc2UgZmlyc3QgNCBieXRlcyBhcmUgemVybyAoZS5nLiA6OjEsIDo6MixcXG4tICogSVB2NC1tYXBwZWQgOjpmZmZmOmEuYi5jLmQpIG11c3Qgbm90IGJlIHRlc3RlZCB2aWEgdGhlIElQdjQgYXJtIOKAlFxcbi0gKiBkb2luZyBzbyB3b3VsZCBtaXNjbGFzc2lmeSBhIGNhbGxlci1zdXBwbGllZCBhZGRyZXNzIGFzIHVuc2V0IGFuZFxcbi0gKiBzaWxlbnRseSBvdmVyd3JpdGUgaXQgd2l0aCB3aGF0ZXZlciBhZGRyZXNzIHRoZSBkZXZpY2UgZXhwb3Nlcy5cXG4tICovXFxuLXN0YXRpYyBib29sIG5ldGNvbnNfbG9jYWxfaXBfdW5zZXQoY29uc3Qgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4te1xcbi1cXHRpZiAobnQtXFx1MDAzZWlwdjYpXFxuLVxcdFxcdHJldHVybiBpcHY2X2FkZHJfYW55KFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXAuaW42KTtcXG4tXFx0cmV0dXJuICFudC1cXHUwMDNlbG9jYWxfaXAuaXA7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQgbmV0Y29uc19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuIHtcXG4gXFx0c3RydWN0IG5ldCAqbmV0ID0gY3VycmVudC1cXHUwMDNlbnNwcm94eS1cXHUwMDNlbmV0X25zO1xcbkBAIC00ODgsNiArNDcxLDE5IEBAIHN0YXRpYyBpbnQgbmV0Y29uc19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHRydG5sX2xvY2soKTtcXG4rXFx0aWYgKG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykge1xcbitcXHRcXHRucF9lcnIobnAsIFxcXCJyZW1vdGUgSVAgYWRkcmVzcyBub3QgY29uZmlndXJlZCwgYWJvcnRpbmdcXFxcblxcXCIpO1xcbitcXHRcXHRlcnIgPSAtRURFU1RBRERSUkVRO1xcbitcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gQUZfVU5TUEVDIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBudC1cXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5KSB7XFxuK1xcdFxcdG5wX2VycihucCwgXFxcImxvY2FsIGFuZCByZW1vdGUgSVAgYWRkcmVzcyBmYW1pbGllcyBkaWZmZXIsIGFib3J0aW5nXFxcXG5cXFwiKTtcXG4rXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChucC1cXHUwMDNlZGV2X25hbWVbMF0pXFxuIFxcdFxcdG5kZXYgPSBfX2Rldl9nZXRfYnlfbmFtZShuZXQsIG5wLVxcdTAwM2VkZXZfbmFtZSk7XFxuIFxcdGVsc2UgaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIobnAtXFx1MDAzZWRldl9tYWMpKVxcbkBAIC01MjMsMTYgKzUxOSwxMyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbiBcXHRcXHRydG5sX2xvY2soKTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKG5ldGNvbnNfbG9jYWxfaXBfdW5zZXQobnQpKSB7XFxuLVxcdFxcdGlmICghbnQtXFx1MDAzZWlwdjYpIHtcXG4tXFx0XFx0XFx0ZXJyID0gbmV0Y29uc190YWtlX2lwdjQobnQsIG5kZXYpO1xcbi1cXHRcXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRcXHRnb3RvIHB1dDtcXG4tXFx0XFx0fSBlbHNlIHtcXG4rXFx0aWYgKG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKSB7XFxuK1xcdFxcdGlmIChudC1cXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcXG4gXFx0XFx0XFx0ZXJyID0gbmV0Y29uc190YWtlX2lwdjYobnQsIG5kZXYpO1xcbi1cXHRcXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRcXHRnb3RvIHB1dDtcXG4tXFx0XFx0fVxcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGVyciA9IG5ldGNvbnNfdGFrZV9pcHY0KG50LCBuZGV2KTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBwdXQ7XFxuIFxcdFxcdGlwX292ZXJ3cml0dGVuID0gdHJ1ZTtcXG4gXFx0fVxcbiBcXG5AQCAtNzE0LDI0ICs3MDcsMjQgQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4gXFx0c3RydWN0IG5ldHBvbGwgKm5wID0gXFx1MDAyNm50LVxcdTAwM2VucDtcXG4gXFxuIFxcdG5wX2luZm8obnAsIFxcXCJsb2NhbCBwb3J0ICVkXFxcXG5cXFwiLCBudC1cXHUwMDNlbG9jYWxfcG9ydCk7XFxuLVxcdGlmIChudC1cXHUwMDNlaXB2NilcXG4rXFx0aWYgKG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuIFxcdFxcdG5wX2luZm8obnAsIFxcXCJsb2NhbCBJUHY2IGFkZHJlc3MgJXBJNmNcXFxcblxcXCIsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXAuaW42KTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRucF9pbmZvKG5wLCBcXFwibG9jYWwgSVB2NCBhZGRyZXNzICVwSTRcXFxcblxcXCIsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXAuaXApO1xcbiBcXHRucF9pbmZvKG5wLCBcXFwiaW50ZXJmYWNlIG5hbWUgJyVzJ1xcXFxuXFxcIiwgbnAtXFx1MDAzZWRldl9uYW1lKTtcXG4gXFx0bnBfaW5mbyhucCwgXFxcImxvY2FsIGV0aGVybmV0IGFkZHJlc3MgJyVwTSdcXFxcblxcXCIsIG5wLVxcdTAwM2VkZXZfbWFjKTtcXG4gXFx0bnBfaW5mbyhucCwgXFxcInJlbW90ZSBwb3J0ICVkXFxcXG5cXFwiLCBudC1cXHUwMDNlcmVtb3RlX3BvcnQpO1xcbi1cXHRpZiAobnQtXFx1MDAzZWlwdjYpXFxuK1xcdGlmIChudC1cXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcXG4gXFx0XFx0bnBfaW5mbyhucCwgXFxcInJlbW90ZSBJUHY2IGFkZHJlc3MgJXBJNmNcXFxcblxcXCIsIFxcdTAwMjZudC1cXHUwMDNlcmVtb3RlX2lwLmluNik7XFxuIFxcdGVsc2VcXG4gXFx0XFx0bnBfaW5mbyhucCwgXFxcInJlbW90ZSBJUHY0IGFkZHJlc3MgJXBJNFxcXFxuXFxcIiwgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfaXAuaXApO1xcbiBcXHRucF9pbmZvKG5wLCBcXFwicmVtb3RlIGV0aGVybmV0IGFkZHJlc3MgJXBNXFxcXG5cXFwiLCBudC1cXHUwMDNlcmVtb3RlX21hYyk7XFxuIH1cXG4gXFxuLS8qIFBhcnNlIHRoZSBzdHJpbmcgYW5kIHBvcHVsYXRlIHRoZSBgaW5ldF9hZGRyYCB1bmlvbi4gUmV0dXJuIDAgaWYgSVB2NCBpc1xcbi0gKiBwb3B1bGF0ZWQsIDEgaWYgSVB2NiBpcyBwb3B1bGF0ZWQsIGFuZCAtMSB1cG9uIGZhaWx1cmUuXFxuKy8qIFBhcnNlIHRoZSBzdHJpbmcgYW5kIHBvcHVsYXRlIHRoZSBgaW5ldF9hZGRyYCBzdHJ1Y3QuIFJldHVybiAwIG9uIHN1Y2Nlc3NcXG4rICogYW5kIC0xIHVwb24gZmFpbHVyZS5cXG4gICovXFxuLXN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgdW5pb24gaW5ldF9hZGRyICphZGRyKVxcbitzdGF0aWMgaW50IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBpbmV0X2FkZHIgKmFkZHIpXFxuIHtcXG4gXFx0Y29uc3QgY2hhciAqZW5kID0gTlVMTDtcXG4gXFx0aW50IGxlbjtcXG5AQCAtNzQzLDE0ICs3MzYsMTggQEAgc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCB1bmlvbiBpbmV0X2FkZHIgKmFkZHIpXFxuIFxcdGlmIChzdHJbbGVuIC0gMV0gPT0gJ1xcXFxuJylcXG4gXFx0XFx0bGVuIC09IDE7XFxuIFxcbi1cXHRpZiAoaW40X3B0b24oc3RyLCBsZW4sICh2b2lkICopYWRkciwgLTEsIFxcdTAwMjZlbmQpIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJ1xcXFxuJykpXFxuK1xcdGlmIChpbjRfcHRvbihzdHIsIGxlbiwgKHZvaWQgKilcXHUwMDI2YWRkci1cXHUwMDNlaXAsIC0xLCBcXHUwMDI2ZW5kKSBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXFxcbicpKSB7XFxuK1xcdFxcdGFkZHItXFx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XFxuIFxcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIGluNl9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKWFkZHIsIC0xLCBcXHUwMDI2ZW5kKSBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXFxcbicpKVxcbi1cXHRcXHRyZXR1cm4gMTtcXG4rXFx0ICAgIGluNl9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKVxcdTAwMjZhZGRyLVxcdTAwM2VpbjYsIC0xLCBcXHUwMDI2ZW5kKSBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXFxcbicpKSB7XFxuK1xcdFxcdGFkZHItXFx1MDAzZWZhbWlseSA9IEFGX0lORVQ2O1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbiBcXG4gXFx0cmV0dXJuIC0xO1xcbiB9XFxuQEAgLTg1NSwyMCArODUyLDIwIEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuIHtcXG4gXFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcXG4gXFxuLVxcdGlmIChudC1cXHUwMDNlaXB2NilcXG4rXFx0aWYgKG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuIFxcdFxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVwSTZjXFxcXG5cXFwiLCBcXHUwMDI2bnQtXFx1MDAzZWxvY2FsX2lwLmluNik7XFxuIFxcdGVsc2VcXG4tXFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXBJNFxcXFxuXFxcIiwgXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9pcCk7XFxuK1xcdFxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVwSTRcXFxcblxcXCIsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXAuaXApO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xcbiBcXG4tXFx0aWYgKG50LVxcdTAwM2VpcHY2KVxcbitcXHRpZiAobnQtXFx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuIFxcdFxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVwSTZjXFxcXG5cXFwiLCBcXHUwMDI2bnQtXFx1MDAzZXJlbW90ZV9pcC5pbjYpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVwSTRcXFxcblxcXCIsIFxcdTAwMjZudC1cXHUwMDNlcmVtb3RlX2lwKTtcXG4rXFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXBJNFxcXFxuXFxcIiwgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfaXAuaXApO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3NpemVfdCBsb2NhbF9tYWNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG5AQCAtMTIxMyw3ICsxMjEwLDYgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuIHtcXG4gXFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcXG4gXFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xcbi1cXHRpbnQgaXB2NjtcXG4gXFxuIFxcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XFxuIFxcdGlmIChudC1cXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkge1xcbkBAIC0xMjIyLDEwICsxMjE4LDggQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbiBcXG4tXFx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXApO1xcbi1cXHRpZiAoaXB2NiA9PSAtMSlcXG4rXFx0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXApIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbi1cXHRudC1cXHUwMDNlaXB2NiA9ICEhaXB2NjtcXG4gXFxuIFxcdHJldCA9IGNvdW50O1xcbiBvdXRfdW5sb2NrOlxcbkBAIC0xMjM4LDcgKzEyMzIsNiBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuIHtcXG4gXFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcXG4gXFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xcbi1cXHRpbnQgaXB2NjtcXG4gXFxuIFxcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XFxuIFxcdGlmIChudC1cXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkge1xcbkBAIC0xMjQ3LDEwICsxMjQwLDggQEAgc3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG4gXFxuLVxcdGlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCBcXHUwMDI2bnQtXFx1MDAzZXJlbW90ZV9pcCk7XFxuLVxcdGlmIChpcHY2ID09IC0xKVxcbitcXHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfaXApIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbi1cXHRudC1cXHUwMDNlaXB2NiA9ICEhaXB2NjtcXG4gXFxuIFxcdHJldCA9IGNvdW50O1xcbiBvdXRfdW5sb2NrOlxcbkBAIC0yMDYxLDcgKzIwNTIsNyBAQCBzdGF0aWMgdm9pZCBuZXRwb2xsX3VkcF9jaGVja3N1bShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbiBcXG4gXFx0LyogY2hlY2sgbmVlZHMgdG8gYmUgc2V0LCBzaW5jZSBpdCB3aWxsIGJlIGNvbnN1bWVkIGluIGNzdW1fcGFydGlhbCAqL1xcbiBcXHR1ZHBoLVxcdTAwM2VjaGVjayA9IDA7XFxuLVxcdGlmIChudC1cXHUwMDNlaXB2NilcXG4rXFx0aWYgKG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxcbiBcXHRcXHR1ZHBoLVxcdTAwM2VjaGVjayA9IGNzdW1faXB2Nl9tYWdpYyhcXHUwMDI2bnQtXFx1MDAzZWxvY2FsX2lwLmluNixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfaXAuaW42LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICB1ZHBfbGVuLCBJUFBST1RPX1VEUCxcXG5AQCAtMjEwMiw3ICsyMDkzLDcgQEAgc3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4gXFx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cXHUwMDNlaF9zb3VyY2UsIG5wLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyKTtcXG4gXFx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cXHUwMDNlaF9kZXN0LCBudC1cXHUwMDNlcmVtb3RlX21hYyk7XFxuLVxcdGlmIChudC1cXHUwMDNlaXB2NilcXG4rXFx0aWYgKG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxcbiBcXHRcXHRldGgtXFx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRldGgtXFx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7XFxuQEAgLTIxNzEsNyArMjE2Miw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXFxuIFxcdFxcdFdBUk5fT05fT05DRSghaXJxc19kaXNhYmxlZCgpKTtcXG4gXFxuIFxcdHVkcF9sZW4gPSBsZW4gKyBzaXplb2Yoc3RydWN0IHVkcGhkcik7XFxuLVxcdGlmIChudC1cXHUwMDNlaXB2NilcXG4rXFx0aWYgKG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxcbiBcXHRcXHRpcF9sZW4gPSB1ZHBfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRpcF9sZW4gPSB1ZHBfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcGhkcik7XFxuQEAgLTIxODcsNyArMjE3OCw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXFxuIFxcdHNrYl9wdXQoc2tiLCBsZW4pO1xcbiBcXG4gXFx0cHVzaF91ZHAobnQsIHNrYiwgbGVuKTtcXG4tXFx0aWYgKG50LVxcdTAwM2VpcHY2KVxcbitcXHRpZiAobnQtXFx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuIFxcdFxcdHB1c2hfaXB2NihudCwgc2tiLCBsZW4pO1xcbiBcXHRlbHNlXFxuIFxcdFxcdHB1c2hfaXB2NChudCwgc2tiLCBsZW4pO1xcbkBAIC0yNTA3LDEwICsyNDk4LDggQEAgX19yZWxlYXNlcyhcXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaylcXG4gc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdClcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcXHUwMDI2bnQtXFx1MDAzZW5wO1xcbi1cXHRib29sIGlwdmVyc2lvbl9zZXQgPSBmYWxzZTtcXG4gXFx0Y2hhciAqY3VyID0gb3B0O1xcbiBcXHRjaGFyICpkZWxpbTtcXG4tXFx0aW50IGlwdjY7XFxuIFxcbiBcXHRpZiAoKmN1ciAhPSAnQCcpIHtcXG4gXFx0XFx0ZGVsaW0gPSBzdHJjaHIoY3VyLCAnQCcpO1xcbkBAIC0yNTI0LDE2ICsyNTEzLDEyIEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpXFxuIFxcdGN1cisrO1xcbiBcXG4gXFx0aWYgKCpjdXIgIT0gJy8nKSB7XFxuLVxcdFxcdGlwdmVyc2lvbl9zZXQgPSB0cnVlO1xcbiBcXHRcXHRkZWxpbSA9IHN0cmNocihjdXIsICcvJyk7XFxuIFxcdFxcdGlmICghZGVsaW0pXFxuIFxcdFxcdFxcdGdvdG8gcGFyc2VfZmFpbGVkO1xcbiBcXHRcXHQqZGVsaW0gPSAwO1xcbi1cXHRcXHRpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9pcCk7XFxuLVxcdFxcdGlmIChpcHY2IFxcdTAwM2MgMClcXG4rXFx0XFx0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXApIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0Z290byBwYXJzZV9mYWlsZWQ7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0bnQtXFx1MDAzZWlwdjYgPSAoYm9vbClpcHY2O1xcbiBcXHRcXHRjdXIgPSBkZWxpbTtcXG4gXFx0fVxcbiBcXHRjdXIrKztcXG5AQCAtMjU3NSwxMyArMjU2MCwxMSBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxcbiBcXHRpZiAoIWRlbGltKVxcbiBcXHRcXHRnb3RvIHBhcnNlX2ZhaWxlZDtcXG4gXFx0KmRlbGltID0gMDtcXG4tXFx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsIFxcdTAwMjZudC1cXHUwMDNlcmVtb3RlX2lwKTtcXG4tXFx0aWYgKGlwdjYgXFx1MDAzYyAwKVxcbitcXHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfaXApIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBwYXJzZV9mYWlsZWQ7XFxuLVxcdGVsc2UgaWYgKGlwdmVyc2lvbl9zZXQgXFx1MDAyNlxcdTAwMjYgbnQtXFx1MDAzZWlwdjYgIT0gKGJvb2wpaXB2NilcXG4rXFx0aWYgKG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gQUZfVU5TUEVDIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBudC1cXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5KVxcbiBcXHRcXHRnb3RvIHBhcnNlX2ZhaWxlZDtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRudC1cXHUwMDNlaXB2NiA9IChib29sKWlwdjY7XFxuIFxcdGN1ciA9IGRlbGltICsgMTtcXG4gXFxuIFxcdGlmICgqY3VyICE9IDApIHtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmggYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxcbmluZGV4IDFjNmIxZWVjNWVmZDYuLmRlOTdmMDAxYTBmOWMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxcbkBAIC0xNiw5ICsxNiwxMyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VkcC5oXFx1MDAzZVxcbiBcXG4tdW5pb24gaW5ldF9hZGRyIHtcXG4tXFx0X19iZTMyXFx0XFx0aXA7XFxuLVxcdHN0cnVjdCBpbjZfYWRkclxcdGluNjtcXG4rc3RydWN0IGluZXRfYWRkciB7XFxuK1xcdC8qIEFkZHJlc3MgZmFtaWx5OiBBRl9VTlNQRUMgd2hlbiB1bnNldCwgZWxzZSBBRl9JTkVUIG9yIEFGX0lORVQ2ICovXFxuK1xcdHU4XFx0XFx0XFx0ZmFtaWx5O1xcbitcXHR1bmlvbiB7XFxuK1xcdFxcdF9fYmUzMlxcdFxcdGlwO1xcbitcXHRcXHRzdHJ1Y3QgaW42X2FkZHJcXHRpbjY7XFxuK1xcdH07XFxuIH07XFxuIFxcbiBzdHJ1Y3QgbmV0cG9sbCB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM2OjExLjE5MDU0NDE4NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyNzMxOTE2ODI1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRDT05TT0xFXCIsXG4gICAgXCJORVRDT05TT0xFX0RZTkFNSUNcIixcbiAgICBcIklQVjZcIixcbiAgICBcIkNPTkZJR0ZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibG9jYWxfaXBfc3RvcmVcIixcbiAgICBcInJlbW90ZV9pcF9zdG9yZVwiLFxuICAgIFwiZW5hYmxlZF9zdG9yZVwiLFxuICAgIFwibmV0Y29uc19uZXRwb2xsX3NldHVwXCIsXG4gICAgXCJuZXRwb2xsX3NlbmRfdWRwXCIsXG4gICAgXCJuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lXCIsXG4gICAgXCJuZXRwb2xsX3BhcnNlX2lwX2FkZHJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0Y29uc29sZSBkcml2ZXIgdG8gdXNlIGEgbmV3IGBzdHJ1Y3QgaW5ldF9hZGRyYCB0aGF0IGV4cGxpY2l0bHkgdHJhY2tzIHRoZSBJUCBhZGRyZXNzIGZhbWlseSAoQUZfSU5FVCwgQUZfSU5FVDYsIG9yIEFGX1VOU1BFQykgaW5zdGVhZCBvZiByZWx5aW5nIG9uIGEgYm9vbGVhbiBmbGFnIGFuZCB6ZXJvLWNoZWNrcy4gVGhpcyBhZmZlY3RzIGhvdyBsb2NhbCBhbmQgcmVtb3RlIElQIGFkZHJlc3NlcyBhcmUgcGFyc2VkLCBzdG9yZWQsIGFuZCB1c2VkIGZvciBVRFAgZW5jYXBzdWxhdGlvbiBpbiBuZXRwb2xsLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIG1vZHVsZSBwYXJhbWV0ZXJzIGF0IGJvb3QvbG9hZCB0aW1lIGFuZCBkeW5hbWljYWxseSB2aWEgY29uZmlnZnMgYXR0cmlidXRlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIGNvbmZpZ2ZzIHN0b3JlIGNhbGxiYWNrcywgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgcGFyc2VyLCBhbmQgdGhlIG5ldHBvbGwgc2V0dXAgYW5kIHNlbmQgcGF0aHMgdG8gZW5zdXJlIHRoZSBuZXcgYWRkcmVzcyBmYW1pbHkgbG9naWMgaGFuZGxlcyBhbGwgZWRnZSBjYXNlcyBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDk3ODZiNTc4NjY3NDhlM2Q1YWZmOGEyNGRhMDAxNjA4MGMzNmMxZGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyA1IDIyOjM2OjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG5pbmRleCAwMzkxMzMwMjMyOGNjLi42OTYyMTcwNWQ2OGRiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG4rKysgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbkBAIC0xODEsNyArMTgxLDYgQEAgZW51bSB0YXJnZXRfc3RhdGUge1xuICAqXHRcdGxvY2FsX21hY1x0KHJlYWQtb25seSlcbiAgKiBAbG9jYWxfaXA6XHRTb3VyY2UgSVAgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbiAgKiBAcmVtb3RlX2lwOlx0RGVzdGluYXRpb24gSVAgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbi0gKiBAaXB2NjpcdFdoZXRoZXIgdGhlIHRhcmdldCBhZGRyZXNzZXMgYXJlIElQdjYgKHJlYWQtd3JpdGUpLlxuICAqIEBsb2NhbF9wb3J0Olx0U291cmNlIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuICAqIEByZW1vdGVfcG9ydDogRGVzdGluYXRpb24gVURQIHBvcnQgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXG4gICogQHJlbW90ZV9tYWM6XHREZXN0aW5hdGlvbiBldGhlcm5ldCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuQEAgLTIxMiw4ICsyMTEsNyBAQCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xuIFx0Ym9vbFx0XHRcdGV4dGVuZGVkO1xuIFx0Ym9vbFx0XHRcdHJlbGVhc2U7XG4gXHRzdHJ1Y3QgbmV0cG9sbFx0XHRucDtcbi1cdHVuaW9uIGluZXRfYWRkclx0XHRsb2NhbF9pcCwgcmVtb3RlX2lwO1xuLVx0Ym9vbFx0XHRcdGlwdjY7XG4rXHRzdHJ1Y3QgaW5ldF9hZGRyXHRsb2NhbF9pcCwgcmVtb3RlX2lwO1xuIFx0dTE2XHRcdFx0bG9jYWxfcG9ydCwgcmVtb3RlX3BvcnQ7XG4gXHR1OFx0XHRcdHJlbW90ZV9tYWNbRVRIX0FMRU5dO1xuIFx0LyogcHJvdGVjdGVkIGJ5IHRhcmdldF9saXN0X2xvY2s7ICsxIGdpdmVzIHNjbnByaW50ZigpIHJvb20gZm9yIGl0c1xuQEAgLTQxNSw2ICs0MTMsNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfdGFrZV9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHQvKiBHb3QgdGhlIElQLCBsZXQncyByZXR1cm4gKi9cbiBcdFx0XHRudC1cdTAwM2Vsb2NhbF9pcC5pbjYgPSBpZnAtXHUwMDNlYWRkcjtcbitcdFx0XHRudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPSBBRl9JTkVUNjtcbiBcdFx0XHRlcnIgPSAwO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtNDU2LDI4ICs0NTUsMTIgQEAgc3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFx0fVxuIFxuIFx0bnQtXHUwMDNlbG9jYWxfaXAuaXAgPSBpZmEtXHUwMDNlaWZhX2xvY2FsO1xuK1x0bnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID0gQUZfSU5FVDtcbiBcdG5wX2luZm8obnAsIFwibG9jYWwgSVAgJXBJNFxcblwiLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pcCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tLypcbi0gKiBUZXN0IHdoZXRoZXIgdGhlIGNhbGxlciBsZWZ0IG50LVx1MDAzZWxvY2FsX2lwIHVuc2V0LCBzbyB0aGF0XG4tICogbmV0Y29uc19uZXRwb2xsX3NldHVwKCkgc2hvdWxkIGF1dG8tcG9wdWxhdGUgaXQgZnJvbSB0aGUgZWdyZXNzIGRldmljZS5cbi0gKlxuLSAqIG50LVx1MDAzZWxvY2FsX2lwIGlzIGEgdW5pb24gb2YgX19iZTMyIChJUHY0KSBhbmQgc3RydWN0IGluNl9hZGRyIChJUHY2KSxcbi0gKiBzbyBhbiBJUHY2IGFkZHJlc3Mgd2hvc2UgZmlyc3QgNCBieXRlcyBhcmUgemVybyAoZS5nLiA6OjEsIDo6Mixcbi0gKiBJUHY0LW1hcHBlZCA6OmZmZmY6YS5iLmMuZCkgbXVzdCBub3QgYmUgdGVzdGVkIHZpYSB0aGUgSVB2NCBhcm0g4oCUXG4tICogZG9pbmcgc28gd291bGQgbWlzY2xhc3NpZnkgYSBjYWxsZXItc3VwcGxpZWQgYWRkcmVzcyBhcyB1bnNldCBhbmRcbi0gKiBzaWxlbnRseSBvdmVyd3JpdGUgaXQgd2l0aCB3aGF0ZXZlciBhZGRyZXNzIHRoZSBkZXZpY2UgZXhwb3Nlcy5cbi0gKi9cbi1zdGF0aWMgYm9vbCBuZXRjb25zX2xvY2FsX2lwX3Vuc2V0KGNvbnN0IHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4te1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4tXHRcdHJldHVybiBpcHY2X2FkZHJfYW55KFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmluNik7XG4tXHRyZXR1cm4gIW50LVx1MDAzZWxvY2FsX2lwLmlwO1xuLX1cbi1cbiBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGN1cnJlbnQtXHUwMDNlbnNwcm94eS1cdTAwM2VuZXRfbnM7XG5AQCAtNDg4LDYgKzQ3MSwxOSBAQCBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFx0aW50IGVycjtcbiBcbiBcdHJ0bmxfbG9jaygpO1xuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKSB7XG4rXHRcdG5wX2VycihucCwgXCJyZW1vdGUgSVAgYWRkcmVzcyBub3QgY29uZmlndXJlZCwgYWJvcnRpbmdcXG5cIik7XG4rXHRcdGVyciA9IC1FREVTVEFERFJSRVE7XG4rXHRcdGdvdG8gdW5sb2NrO1xuK1x0fVxuK1xuK1x0aWYgKG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSAhPSBBRl9VTlNQRUMgXHUwMDI2XHUwMDI2XG4rXHQgICAgbnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkpIHtcbitcdFx0bnBfZXJyKG5wLCBcImxvY2FsIGFuZCByZW1vdGUgSVAgYWRkcmVzcyBmYW1pbGllcyBkaWZmZXIsIGFib3J0aW5nXFxuXCIpO1xuK1x0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIHVubG9jaztcbitcdH1cbitcbiBcdGlmIChucC1cdTAwM2VkZXZfbmFtZVswXSlcbiBcdFx0bmRldiA9IF9fZGV2X2dldF9ieV9uYW1lKG5ldCwgbnAtXHUwMDNlZGV2X25hbWUpO1xuIFx0ZWxzZSBpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihucC1cdTAwM2VkZXZfbWFjKSlcbkBAIC01MjMsMTYgKzUxOSwxMyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFx0XHRydG5sX2xvY2soKTtcbiBcdH1cbiBcbi1cdGlmIChuZXRjb25zX2xvY2FsX2lwX3Vuc2V0KG50KSkge1xuLVx0XHRpZiAoIW50LVx1MDAzZWlwdjYpIHtcbi1cdFx0XHRlcnIgPSBuZXRjb25zX3Rha2VfaXB2NChudCwgbmRldik7XG4tXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdGdvdG8gcHV0O1xuLVx0XHR9IGVsc2Uge1xuK1x0aWYgKG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpIHtcbitcdFx0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdFx0ZXJyID0gbmV0Y29uc190YWtlX2lwdjYobnQsIG5kZXYpO1xuLVx0XHRcdGlmIChlcnIpXG4tXHRcdFx0XHRnb3RvIHB1dDtcbi1cdFx0fVxuK1x0XHRlbHNlXG4rXHRcdFx0ZXJyID0gbmV0Y29uc190YWtlX2lwdjQobnQsIG5kZXYpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gcHV0O1xuIFx0XHRpcF9vdmVyd3JpdHRlbiA9IHRydWU7XG4gXHR9XG4gXG5AQCAtNzE0LDI0ICs3MDcsMjQgQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiBcdHN0cnVjdCBuZXRwb2xsICpucCA9IFx1MDAyNm50LVx1MDAzZW5wO1xuIFxuIFx0bnBfaW5mbyhucCwgXCJsb2NhbCBwb3J0ICVkXFxuXCIsIG50LVx1MDAzZWxvY2FsX3BvcnQpO1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4rXHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRucF9pbmZvKG5wLCBcImxvY2FsIElQdjYgYWRkcmVzcyAlcEk2Y1xcblwiLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pbjYpO1xuIFx0ZWxzZVxuIFx0XHRucF9pbmZvKG5wLCBcImxvY2FsIElQdjQgYWRkcmVzcyAlcEk0XFxuXCIsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmlwKTtcbiBcdG5wX2luZm8obnAsIFwiaW50ZXJmYWNlIG5hbWUgJyVzJ1xcblwiLCBucC1cdTAwM2VkZXZfbmFtZSk7XG4gXHRucF9pbmZvKG5wLCBcImxvY2FsIGV0aGVybmV0IGFkZHJlc3MgJyVwTSdcXG5cIiwgbnAtXHUwMDNlZGV2X21hYyk7XG4gXHRucF9pbmZvKG5wLCBcInJlbW90ZSBwb3J0ICVkXFxuXCIsIG50LVx1MDAzZXJlbW90ZV9wb3J0KTtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdG5wX2luZm8obnAsIFwicmVtb3RlIElQdjYgYWRkcmVzcyAlcEk2Y1xcblwiLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXAuaW42KTtcbiBcdGVsc2VcbiBcdFx0bnBfaW5mbyhucCwgXCJyZW1vdGUgSVB2NCBhZGRyZXNzICVwSTRcXG5cIiwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmlwKTtcbiBcdG5wX2luZm8obnAsIFwicmVtb3RlIGV0aGVybmV0IGFkZHJlc3MgJXBNXFxuXCIsIG50LVx1MDAzZXJlbW90ZV9tYWMpO1xuIH1cbiBcbi0vKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgdW5pb24uIFJldHVybiAwIGlmIElQdjQgaXNcbi0gKiBwb3B1bGF0ZWQsIDEgaWYgSVB2NiBpcyBwb3B1bGF0ZWQsIGFuZCAtMSB1cG9uIGZhaWx1cmUuXG4rLyogUGFyc2UgdGhlIHN0cmluZyBhbmQgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHN0cnVjdC4gUmV0dXJuIDAgb24gc3VjY2Vzc1xuKyAqIGFuZCAtMSB1cG9uIGZhaWx1cmUuXG4gICovXG4tc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCB1bmlvbiBpbmV0X2FkZHIgKmFkZHIpXG4rc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgaW5ldF9hZGRyICphZGRyKVxuIHtcbiBcdGNvbnN0IGNoYXIgKmVuZCA9IE5VTEw7XG4gXHRpbnQgbGVuO1xuQEAgLTc0MywxNCArNzM2LDE4IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgdW5pb24gaW5ldF9hZGRyICphZGRyKVxuIFx0aWYgKHN0cltsZW4gLSAxXSA9PSAnXFxuJylcbiBcdFx0bGVuIC09IDE7XG4gXG4tXHRpZiAoaW40X3B0b24oc3RyLCBsZW4sICh2b2lkICopYWRkciwgLTEsIFx1MDAyNmVuZCkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4tXHQgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJ1xcbicpKVxuK1x0aWYgKGluNF9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKVx1MDAyNmFkZHItXHUwMDNlaXAsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuK1x0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXG4nKSkge1xuK1x0XHRhZGRyLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XG4gXHRcdHJldHVybiAwO1xuK1x0fVxuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0lQVjYpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGluNl9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKWFkZHIsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuLVx0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXG4nKSlcbi1cdFx0cmV0dXJuIDE7XG4rXHQgICAgaW42X3B0b24oc3RyLCBsZW4sICh2b2lkICopXHUwMDI2YWRkci1cdTAwM2VpbjYsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuK1x0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXG4nKSkge1xuK1x0XHRhZGRyLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ2O1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbiBcbiBcdHJldHVybiAtMTtcbiB9XG5AQCAtODU1LDIwICs4NTIsMjAgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbiB7XG4gXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuIFxuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4rXHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJXBJNmNcXG5cIiwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXAuaW42KTtcbiBcdGVsc2Vcbi1cdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVwSTRcXG5cIiwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApO1xuK1x0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJXBJNFxcblwiLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pcCk7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuIHtcbiBcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG4gXG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbitcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJXBJNmNcXG5cIiwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmluNik7XG4gXHRlbHNlXG4tXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlcEk0XFxuXCIsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcCk7XG4rXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlcEk0XFxuXCIsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcC5pcCk7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IGxvY2FsX21hY19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuQEAgLTEyMTMsNyArMTIxMCw2IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuIHtcbiBcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG4gXHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XG4tXHRpbnQgaXB2NjtcbiBcbiBcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XG4gXHRpZiAobnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkge1xuQEAgLTEyMjIsMTAgKzEyMTgsOCBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuLVx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwKTtcbi1cdGlmIChpcHY2ID09IC0xKVxuK1x0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwKSBcdTAwM2MgMClcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuLVx0bnQtXHUwMDNlaXB2NiA9ICEhaXB2NjtcbiBcbiBcdHJldCA9IGNvdW50O1xuIG91dF91bmxvY2s6XG5AQCAtMTIzOCw3ICsxMjMyLDYgQEAgc3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuIHtcbiBcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG4gXHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XG4tXHRpbnQgaXB2NjtcbiBcbiBcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XG4gXHRpZiAobnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkge1xuQEAgLTEyNDcsMTAgKzEyNDAsOCBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbi1cdGlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApO1xuLVx0aWYgKGlwdjYgPT0gLTEpXG4rXHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwKSBcdTAwM2MgMClcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuLVx0bnQtXHUwMDNlaXB2NiA9ICEhaXB2NjtcbiBcbiBcdHJldCA9IGNvdW50O1xuIG91dF91bmxvY2s6XG5AQCAtMjA2MSw3ICsyMDUyLDcgQEAgc3RhdGljIHZvaWQgbmV0cG9sbF91ZHBfY2hlY2tzdW0oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcbiBcdC8qIGNoZWNrIG5lZWRzIHRvIGJlIHNldCwgc2luY2UgaXQgd2lsbCBiZSBjb25zdW1lZCBpbiBjc3VtX3BhcnRpYWwgKi9cbiBcdHVkcGgtXHUwMDNlY2hlY2sgPSAwO1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4rXHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbiBcdFx0dWRwaC1cdTAwM2VjaGVjayA9IGNzdW1faXB2Nl9tYWdpYyhcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pbjYsXG4gXHRcdFx0XHRcdCAgICAgIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcC5pbjYsXG4gXHRcdFx0XHRcdCAgICAgIHVkcF9sZW4sIElQUFJPVE9fVURQLFxuQEAgLTIxMDIsNyArMjA5Myw3IEBAIHN0YXRpYyB2b2lkIHB1c2hfZXRoKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuIFx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cdTAwM2VoX3NvdXJjZSwgbnAtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyKTtcbiBcdGV0aGVyX2FkZHJfY29weShldGgtXHUwMDNlaF9kZXN0LCBudC1cdTAwM2VyZW1vdGVfbWFjKTtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdGV0aC1cdTAwM2VoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVBWNik7XG4gXHRlbHNlXG4gXHRcdGV0aC1cdTAwM2VoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVApO1xuQEAgLTIxNzEsNyArMjE2Miw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG4gXHRcdFdBUk5fT05fT05DRSghaXJxc19kaXNhYmxlZCgpKTtcbiBcbiBcdHVkcF9sZW4gPSBsZW4gKyBzaXplb2Yoc3RydWN0IHVkcGhkcik7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbitcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRpcF9sZW4gPSB1ZHBfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcbiBcdGVsc2VcbiBcdFx0aXBfbGVuID0gdWRwX2xlbiArIHNpemVvZihzdHJ1Y3QgaXBoZHIpO1xuQEAgLTIxODcsNyArMjE3OCw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG4gXHRza2JfcHV0KHNrYiwgbGVuKTtcbiBcbiBcdHB1c2hfdWRwKG50LCBza2IsIGxlbik7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbitcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRwdXNoX2lwdjYobnQsIHNrYiwgbGVuKTtcbiBcdGVsc2VcbiBcdFx0cHVzaF9pcHY0KG50LCBza2IsIGxlbik7XG5AQCAtMjUwNywxMCArMjQ5OCw4IEBAIF9fcmVsZWFzZXMoXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaylcbiBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxuIHtcbiBcdHN0cnVjdCBuZXRwb2xsICpucCA9IFx1MDAyNm50LVx1MDAzZW5wO1xuLVx0Ym9vbCBpcHZlcnNpb25fc2V0ID0gZmFsc2U7XG4gXHRjaGFyICpjdXIgPSBvcHQ7XG4gXHRjaGFyICpkZWxpbTtcbi1cdGludCBpcHY2O1xuIFxuIFx0aWYgKCpjdXIgIT0gJ0AnKSB7XG4gXHRcdGRlbGltID0gc3RyY2hyKGN1ciwgJ0AnKTtcbkBAIC0yNTI0LDE2ICsyNTEzLDEyIEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpXG4gXHRjdXIrKztcbiBcbiBcdGlmICgqY3VyICE9ICcvJykge1xuLVx0XHRpcHZlcnNpb25fc2V0ID0gdHJ1ZTtcbiBcdFx0ZGVsaW0gPSBzdHJjaHIoY3VyLCAnLycpO1xuIFx0XHRpZiAoIWRlbGltKVxuIFx0XHRcdGdvdG8gcGFyc2VfZmFpbGVkO1xuIFx0XHQqZGVsaW0gPSAwO1xuLVx0XHRpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApO1xuLVx0XHRpZiAoaXB2NiBcdTAwM2MgMClcbitcdFx0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwKSBcdTAwM2MgMClcbiBcdFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbi1cdFx0ZWxzZVxuLVx0XHRcdG50LVx1MDAzZWlwdjYgPSAoYm9vbClpcHY2O1xuIFx0XHRjdXIgPSBkZWxpbTtcbiBcdH1cbiBcdGN1cisrO1xuQEAgLTI1NzUsMTMgKzI1NjAsMTEgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdClcbiBcdGlmICghZGVsaW0pXG4gXHRcdGdvdG8gcGFyc2VfZmFpbGVkO1xuIFx0KmRlbGltID0gMDtcbi1cdGlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApO1xuLVx0aWYgKGlwdjYgXHUwMDNjIDApXG4rXHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwKSBcdTAwM2MgMClcbiBcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4tXHRlbHNlIGlmIChpcHZlcnNpb25fc2V0IFx1MDAyNlx1MDAyNiBudC1cdTAwM2VpcHY2ICE9IChib29sKWlwdjYpXG4rXHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IEFGX1VOU1BFQyBcdTAwMjZcdTAwMjZcbitcdCAgICBudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gbnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSlcbiBcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4tXHRlbHNlXG4tXHRcdG50LVx1MDAzZWlwdjYgPSAoYm9vbClpcHY2O1xuIFx0Y3VyID0gZGVsaW0gKyAxO1xuIFxuIFx0aWYgKCpjdXIgIT0gMCkge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oIGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcbmluZGV4IDFjNmIxZWVjNWVmZDYuLmRlOTdmMDAxYTBmOWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcbkBAIC0xNiw5ICsxNiwxMyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91ZHAuaFx1MDAzZVxuIFxuLXVuaW9uIGluZXRfYWRkciB7XG4tXHRfX2JlMzJcdFx0aXA7XG4tXHRzdHJ1Y3QgaW42X2FkZHJcdGluNjtcbitzdHJ1Y3QgaW5ldF9hZGRyIHtcbitcdC8qIEFkZHJlc3MgZmFtaWx5OiBBRl9VTlNQRUMgd2hlbiB1bnNldCwgZWxzZSBBRl9JTkVUIG9yIEFGX0lORVQ2ICovXG4rXHR1OFx0XHRcdGZhbWlseTtcbitcdHVuaW9uIHtcbitcdFx0X19iZTMyXHRcdGlwO1xuK1x0XHRzdHJ1Y3QgaW42X2FkZHJcdGluNjtcbitcdH07XG4gfTtcbiBcbiBzdHJ1Y3QgbmV0cG9sbCB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozNjoxMS4xOTA1NDU1NzRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzU2NTU4Njg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0Y29uc29sZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXRjb25zb2xlLmNgIGFuZCBgbmV0cG9sbC5oYC4gU2VlbXMgbGlrZSB0aGV5J3JlIG1ha2luZyBhIHByZXR0eSBmdW5kYW1lbnRhbCBjaGFuZ2Ug4oCTIHJlcGxhY2luZyB0aGF0IG9sZCBgdW5pb24gaW5ldF9hZGRyYCB3aXRoIGEgbW9yZSBleHBsaWNpdCBgc3RydWN0IGluZXRfYWRkcmAuIEdvb2QgbW92ZSwgYWN0dWFsbHk7IGFkZGluZyB0aGF0IGBmYW1pbHlgIGZpZWxkIChBRl9VTlNQRUMsIEFGX0lORVQsIEFGX0lORVQ2KSBpcyBnb2luZyB0byBtYWtlIHRoZSBjb2RlIG11Y2ggY2xlYXJlciBhbmQgbGVzcyBwcm9uZSB0byBlcnJvcnMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggSVB2Ni4gTG9va3MgbGlrZSB0aGV5J3ZlIHJlbW92ZWQgdGhlIGBpcHY2YCBib29sZWFuIGZyb20gYG5ldGNvbnNvbGVfdGFyZ2V0YCB0b28sIHdoaWNoIGlzIGxvZ2ljYWwgZ2l2ZW4gdGhlIG5ldyBgZmFtaWx5YCBmaWVsZC4gVGhleSd2ZSB1cGRhdGVkIHRoZSBwYXJzaW5nIGFuZCBzZXR1cCBsb2dpYywgd2hpY2ggSSdsbCBuZWVkIHRvIHJldmlldyBjYXJlZnVsbHkgdG8gZW5zdXJlIHRoZSB0cmFuc2l0aW9uIGlzIGNsZWFuIGFuZCBlZmZpY2llbnQuXG5cbkZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIHNpZ25pZmljYW50IGNoYW5nZSB0byB0aGUgbmV0Y29uc29sZSBkcml2ZXIuIEdpdmVuIHRoYXQgbmV0Y29uc29sZSBpcyBhIGNyaXRpY2FsIGRlYnVnZ2luZyBhbmQgcmVjb3ZlcnkgdG9vbCwgSSBzaG91bGQgY29uc2lkZXIgdGhlIGltcGFjdCBjYXJlZnVsbHkuIFRoZSBuZXRjb25zb2xlIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUsIHNvIEkgc2hvdWxkIGJlIGFibGUgdG8gdmVyaWZ5IHRoYXQgdGhlIGNoYW5nZSBkb2Vzbid0IGJyZWFrIGFueXRoaW5nLlxuXG5Ob3csIGxldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyBuZWVkZWQgZm9yIHRoaXMgdG8gd29yay4gSSBhbHJlYWR5IGtub3cgdGhhdCBgQ09ORklHX05FVENPTlNPTEVgIGlzIHJlcXVpcmVkLCBzbyBsZXQncyB0YWtlIGEgcXVpY2sgbG9vayBpbiBLY29uZmlnIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBuZXcgb3IgY2hhbmdlZCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyODksIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozNjoxNi41NDcxMDc0MDFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0MTczODE1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUQ09OU09MRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0zMTg9Y29uZmlnIE1BQ1NFQ1xcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjYtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozMjc6Y29uZmlnIE5FVENPTlNPTEVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyOC1cXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBjb25zb2xlIGxvZ2dpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzMzLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzM0OmNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzNS1cXHRib29sIFxcXCJEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0NC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjM0NTpjb25maWcgTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0Ni1cXHRib29sIFxcXCJTZXQga2VybmVsIGV4dGVuZGVkIG1lc3NhZ2UgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzU0LVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzU1OmNvbmZpZyBORVRDT05TT0xFX1BSRVBFTkRfUkVMRUFTRVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzU2LVxcdGJvb2wgXFxcIlByZXBlbmQga2VybmVsIHJlbGVhc2UgdmVyc2lvbiBpbiB0aGUgbWVzc2FnZSBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozNjoxOC40ODg4NTAyOThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDkzNjM4Njc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0Y29uc29sZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGJyYWluIHplcm9lcyBpbiBvbiB0aGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQ6IGBORVRDT05TT0xFYCBhbmQgYE5FVENPTlNPTEVfRFlOQU1JQ2AuIE15IGd1dCB0ZWxscyBtZSB0aGF0IGBORVRDT05TT0xFX0RZTkFNSUNgIGlzIHByb2JhYmx5IHRoZSBrZXkgb25lIGhlcmUsIHNpbmNlIGl0IGRlYWxzIHdpdGggdGhvc2Ugc3lzZnMgY29uZmlnIGl0ZW1zLlxuXG5Ob3csIHRoZSBwYXRjaCB0b3VjaGVzIGBsb2NhbF9pcF9zdG9yZWAgYW5kIGByZW1vdGVfaXBfc3RvcmVgLCB3aGljaCByaW5ncyBhIGJlbGwuIFRob3NlIGZ1bmN0aW9ucyBhcmUgaW50aW1hdGVseSBsaW5rZWQgdG8gdGhlIGR5bmFtaWMgY29uZmlndXJhdGlvbiBzdHVmZiB3aXRoaW4gYE5FVENPTlNPTEVfRFlOQU1JQ2AuIFRvIGJlIGFic29sdXRlbHkgc3VyZSwgdGhvdWdoLCBsZXQncyBqdXN0IGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGluIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLiBJIG5lZWQgdG8gY29uZmlybSBpZiBgTkVUQ09OU09MRV9EWU5BTUlDYCBpcyBpbmRlZWQgYSBwcmVyZXF1aXNpdGUgZm9yIHRoZSBwcm9wZXIgZnVuY3Rpb25pbmcgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy4gSXTigJlzIGFsd2F5cyBiZXN0IHRvIGJlIHByZWNpc2UsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbmV0d29yay1yZWxhdGVkIGtlcm5lbCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDA2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6MzY6MjIuOTgyNDkyNTI2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMTkyMjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvY2FsX2lwX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTE4Nj1zdGF0aWMgc3NpemVfdCByZW1vdGVfcG9ydF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIwNy1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTIwODpzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIwOS1cXHRcXHRzaXplX3QgY291bnQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM2OjIzLjAzMjY4OTk2MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzI5NzY0MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBOZXR3b3JrIENvbnNvbGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoIHRoZSBuZXR3b3JrIGNvbnNvbGUsIHNvIGxldCdzIHN0YXJ0IHdpdGggdGhlIHNvdXJjZSBjb2RlLiBJJ20gZ29pbmcgdG8gbmF2aWdhdGUgZGlyZWN0bHkgdG8gdGhlIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGxpbmUgMTIwOCBpcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4gSXQncyBvZnRlbiBhdCB0aGVzZSBwaXZvdGFsIHBvaW50cyB3aXRoaW4gYSBsYXJnZXIgcGllY2Ugb2Ygc291cmNlIHRoYXQgdGhlIHJlYWwgbWVhdCBvZiB0aGUgb3BlcmF0aW9uIGNhbiBiZSBmb3VuZC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGltcGxlbWVudGVkIHRoZXJlLiBLbm93aW5nIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHdpbGwgYmUga2V5LCBidXQgc3RhcnRpbmcgdGhlcmUgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50IHRvIGFzc2VzcyB0aGUgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0MjEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozNjoyNi4yMDU2Njk2OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE4MDpcXHRcXHRyZXQgPSBjb3VudDtcXG4xMTgxOlxcdG91dF91bmxvY2s6XFxuMTE4MjpcXHRcXHRkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfdW5sb2NrKCk7XFxuMTE4MzpcXHRcXHRyZXR1cm4gcmV0O1xcbjExODQ6XFx0fVxcbjExODU6XFx0XFxuMTE4NjpcXHRzdGF0aWMgc3NpemVfdCByZW1vdGVfcG9ydF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuMTE4NzpcXHRcXHRcXHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4xMTg4OlxcdHtcXG4xMTg5OlxcdFxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XFxuMTE5MDpcXHRcXHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XFxuMTE5MTpcXHRcXG4xMTkyOlxcdFxcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XFxuMTE5MzpcXHRcXHRpZiAobnQtXFx1MDAzZXN0YXRlID09IFNUQVRFX0VOQUJMRUQpIHtcXG4xMTk0OlxcdFxcdFxcdHByX2VycihcXFwidGFyZ2V0ICglcykgaXMgZW5hYmxlZCwgZGlzYWJsZSB0byB1cGRhdGUgcGFyYW1ldGVyc1xcXFxuXFxcIixcXG4xMTk1OlxcdFxcdFxcdCAgICAgICBjb25maWdfaXRlbV9uYW1lKFxcdTAwMjZudC1cXHUwMDNlZ3JvdXAuY2dfaXRlbSkpO1xcbjExOTY6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjExOTc6XFx0XFx0fVxcbjExOTg6XFx0XFxuMTE5OTpcXHRcXHRyZXQgPSBrc3RydG91MTYoYnVmLCAxMCwgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfcG9ydCk7XFxuMTIwMDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMjAxOlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xMjAyOlxcdFxcdHJldCA9IGNvdW50O1xcbjEyMDM6XFx0b3V0X3VubG9jazpcXG4xMjA0OlxcdFxcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2soKTtcXG4xMjA1OlxcdFxcdHJldHVybiByZXQ7XFxuMTIwNjpcXHR9XFxuMTIwNzpcXHRcXG4xMjA4OlxcdHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbjEyMDk6XFx0XFx0XFx0c2l6ZV90IGNvdW50KVxcbjEyMTA6XFx0e1xcbjEyMTE6XFx0XFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcXG4xMjEyOlxcdFxcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcXG4xMjEzOlxcdFxcbjEyMTQ6XFx0XFx0ZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTtcXG4xMjE1OlxcdFxcdGlmIChudC1cXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkge1xcbjEyMTY6XFx0XFx0XFx0cHJfZXJyKFxcXCJ0YXJnZXQgKCVzKSBpcyBlbmFibGVkLCBkaXNhYmxlIHRvIHVwZGF0ZSBwYXJhbWV0ZXJzXFxcXG5cXFwiLFxcbjEyMTc6XFx0XFx0XFx0ICAgICAgIGNvbmZpZ19pdGVtX25hbWUoXFx1MDAyNm50LVxcdTAwM2Vncm91cC5jZ19pdGVtKSk7XFxuMTIxODpcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuMTIxOTpcXHRcXHR9XFxuMTIyMDpcXHRcXG4xMjIxOlxcdFxcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCBcXHUwMDI2bnQtXFx1MDAzZWxvY2FsX2lwKSBcXHUwMDNjIDApXFxuMTIyMjpcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuMTIyMzpcXHRcXG4xMjI0OlxcdFxcdHJldCA9IGNvdW50O1xcbjEyMjU6XFx0b3V0X3VubG9jazpcXG4xMjI2OlxcdFxcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2soKTtcXG4xMjI3OlxcdFxcdHJldHVybiByZXQ7XFxuMTIyODpcXHR9XFxuMTIyOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6MzY6MjYuMjA1ODMzMDlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjc0OTk3Nzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgbmV0d29ya2luZyBjb2RlOlxuXG4qKkNoZWNraW5nIHRoZSBTY29wZSBvZiBgbG9jYWxfaXBfc3RvcmVgKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIEknbSBwcmV0dHkgc3VyZSBJIHJlbWVtYmVyIGNvbWluZyBhY3Jvc3MgYGxvY2FsX2lwX3N0b3JlYCBpbiB0aGUgbmV0Y29uc29sZSBjb2RlLiBCdXQgd2FpdCwgd2FzIHRoYXQgKmNvbmRpdGlvbmFsbHkqIGNvbXBpbGVkPyBJdCdzIG5hZ2dpbmcgYXQgbWUgdGhhdCBpdCBtaWdodCBiZSB0aWVkIHRvIGEgY29uZmlndXJhdGlvbiBvcHRpb24uIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBpZiBgbG9jYWxfaXBfc3RvcmVgIGlzIGFjdHVhbGx5IGRlZmluZWQgd2l0aGluIHRoYXQgYCNpZmRlZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDYCBibG9jay4gSWYgaXQgKmlzKiBpbnNpZGUgdGhhdCBjb25kaXRpb25hbCBjb21waWxhdGlvbiwgaXQncyBnb2luZyB0byBhZmZlY3QgaG93IEkgdW5kZXJzdGFuZCBpdHMgdXNlIGFuZCBpdHMgcHJlc2VuY2UgaW4gdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZS4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgaXQncyB0aGVyZSBvciBub3QsIGJlY2F1c2UgdGhhdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB3aGVyZSBpdCdzIGJlaW5nIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM2OjI5LjQ4MDgzMzI2NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE0NDE0MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE5NT1zdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTYtXFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE5NzojaWZkZWZcXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5OC1cXHRzdHJ1Y3QgY29uZmlnX2dyb3VwXFx0Z3JvdXA7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjI1LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjY6I2lmZGVmXFx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjctXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjY1PXN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2sodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjktXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI3MDojZWxzZVxcdC8qICFDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3MS1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0zMDI9c3RhdGljIHZvaWQgZHluYW1pY19uZXRjb25zb2xlX211dGV4X3VubG9jayh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMwNS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzA2OiNlbmRpZlxcdC8qIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzA3LVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTcyNz1zdGF0aWMgaW50IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBpbmV0X2FkZHIgKmFkZHIpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzU0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3NTU6I2lmZGVmXFx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03NTYtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTg3ND1zdGF0aWMgaW50IHByZXBhcmVfc3lzZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4OTYtfVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODk3OiNlbmRpZlxcdC8qIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg5OC1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMTU0PXN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE5OC0gKiBvY2N1cnJlZCBpdCBpbmNyZW1lbnRzIHN0YXRpc3RpY3MgaW4gbnQtXFx1MDAzZXN0YXRzIGFjY29yZGluZ2x5LlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTk5OiAqIE9ubHkgY2FsbHMgbmV0cG9sbF9zZW5kX3VkcCBpZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDIGlzIGRpc2FibGVkLlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjAwLSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMjAxPXN0YXRpYyB2b2lkIHNlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjA0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjA1OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMpKSB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDYtXFx0XFx0aWYgKHJlc3VsdCA9PSBORVRfWE1JVF9EUk9QKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjIxOD1zdGF0aWMgdm9pZCBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIyNi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIyNzojaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjI4LVxcdHVzZXJkYXRhID0gbnQtXFx1MDAzZXVzZXJkYXRhO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIyNjM9c3RhdGljIHZvaWQgc2VuZF9mcmFnbWVudGVkX2JvZHkoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjc0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjc1OiNpZmRlZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyNzYtXFx0dXNlcmRhdGFfcHRyID0gbnQtXFx1MDAzZXVzZXJkYXRhO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIzOTk9c3RhdGljIHZvaWQgc2VuZF9leHRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0MDYtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0MDc6I2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQwOC1cXHRzeXNkYXRhX2xlbiA9IHByZXBhcmVfc3lzZGF0YShudCwgd2N0eHQpO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI1ODY9c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYyOS1cXHRcXHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjYzMDpcXHRcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQykpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2MzEtXFx0XFx0XFx0Lyogb25seSBmYWlsIGlmIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIGlzIHNldCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNjQ4PXN0YXRpYyB2b2lkIGZyZWVfcGFyYW1fdGFyZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY1My1cXHRuZXRwb2xsX2NsZWFudXAoXFx1MDAyNm50LVxcdTAwM2VucCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2NTQ6I2lmZGVmXFx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjU1LVxcdGtmcmVlKG50LVxcdTAwM2V1c2VyZGF0YSk7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjY3OD1zdGF0aWMgaW50IF9faW5pdCBpbml0X25ldGNvbnNvbGUodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjkxLVxcdFxcdFxcdGlmIChJU19FUlIobnQpKSB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2OTI6XFx0XFx0XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQykpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2OTMtXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM2OjI5LjUzMjI4NDA3MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQ1NDQ1NDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0Y29uc29sZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBjb25maXJtaW5nIHRoYXQgYGxvY2FsX2lwX3N0b3JlYCBpcyBpbmRlZWQgbmVzdGVkIHdpdGhpbiB0aGF0IGAjaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ2AgYmxvY2ssIHdoaWNoLCBhcyBJIHJlY2FsbCwgc3BhbnMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2h1bmsgb2YgY29kZSwgZnJvbSBsaW5lcyA3NTUgdG8gMTg5Ny4gVGhlcmVmb3JlLCB0byBtYWtlIHRoYXQgZnVuY3Rpb25hbGl0eSBhY2Nlc3NpYmxlLCBgTkVUQ09OU09MRV9EWU5BTUlDYCBpcyBnb2luZyB0byBiZSBhIHJlcXVpcmVtZW50LiBCdXQsIEkgbmVlZCB0byBiZSBtb3JlIHRob3JvdWdoIGhlcmUgYW5kIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgY29uZmlndXJhdGlvbnMgbmVlZGVkLiBXYWl0IGEgbWludXRlLCBJIG5lZWQgYE5FVENPTlNPTEVgIGl0c2VsZi5cblxuSSBhbHNvIHNlZSB0aGF0IGBDT05GSUdfSVBWNmAgaXMgYmVpbmcgY2hlY2tlZCB3aXRoaW4gYG5ldHBvbGxfcGFyc2VfaXBfYWRkcmAsIHNwZWNpZmljYWxseTpcblxuYGBgY1xuXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikgXHUwMDI2XHUwMDI2XG5cdCAgICBpbjZfcHRvbihzdHIsIGxlbiwgKHZvaWQgKilcdTAwMjZhZGRyLVx1MDAzZWluNiwgLTEsIFx1MDAyNmVuZCkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG5cdCAgICAoIWVuZCB8fCAqZW5kID09IDAgfHwgKmVuZCA9PSAnXFxuJykpIHtcblx0XHRhZGRyLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ2O1xuXHRcdHJldHVybiAwO1xuXHR9XG5gYGBcblxuU28sIGlmIHNvbWVvbmUgd2FudHMgdG8gdGVzdCBvdXQgdGhlIElQdjYgZnVuY3Rpb25hbGl0eSwgdGhlbiBpdCB3aWxsIHJlcXVpcmUgYElQVjZgIGFzIHdlbGwuIFJpZ2h0LCBub3cgSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYENPTkZJR19ORVRDT05TT0xFYCBkaXJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk0MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozNjozMy43Nzc3MzMzMjZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NzI2NzkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUQ09OU09MRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9MzE4PWNvbmZpZyBNQUNTRUNcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzI2LVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzI3OmNvbmZpZyBORVRDT05TT0xFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjgtXFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzMy1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjMzNDpjb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzUtXFx0Ym9vbCBcXFwiRHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgbG9nZ2luZyB0YXJnZXRzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDQtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozNDU6Y29uZmlnIE5FVENPTlNPTEVfRVhURU5ERURfTE9HXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDYtXFx0Ym9vbCBcXFwiU2V0IGtlcm5lbCBleHRlbmRlZCBtZXNzYWdlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTM1NC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjM1NTpjb25maWcgTkVUQ09OU09MRV9QUkVQRU5EX1JFTEVBU0VcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM1Ni1cXHRib29sIFxcXCJQcmVwZW5kIGtlcm5lbCByZWxlYXNlIHZlcnNpb24gaW4gdGhlIG1lc3NhZ2UgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6MzY6MzQuMDY1MDA1NDY2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzk5OTg3NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5IGZvciBhbiBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gdGhlIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgZmlsZS4gSSdtIGZvY3VzaW5nIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAzMjcg4oCTIHRoYXQncyBvZnRlbiB3aGVyZSB0aGUganVpY3kgYml0cyBhcmUsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggY29yZSBuZXR3b3JraW5nIGZlYXR1cmVzIG9yIHBlcmhhcHMgYSBzcGVjaWZpYyBkcml2ZXIgSSdtIHRyeWluZyB0byB1bmRlcnN0YW5kLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZWl0aGVyIGEgaGlnaC1sZXZlbCBvdmVydmlldyBvZiBhdmFpbGFibGUgbmV0d29yayBmZWF0dXJlcywgcGVyaGFwcyBzb21lIGRlcGVuZGVuY2llcyBvbiBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMsIG9yIG1heWJlIGV2ZW4gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYSBwYXJ0aWN1bGFyIG5ldHdvcmsgZHJpdmVyIG9yIHRlY2hub2xvZ3kuIFRpbWUgdG8gY3JhY2sgaXQgb3BlbiBhbmQgc2VlIHdoYXQgcmV2ZWxhdGlvbnMgbGluZSAzMjcgaG9sZHMhIExldCdzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzA5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6MzY6MzcuMjA1MDA3MTc1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzIwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzIwOlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gMzIxOlxcdFxcdHNlbGVjdCBDUllQVE9fQUVTXFxuIDMyMjpcXHRcXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbiAzMjM6XFx0XFx0c2VsZWN0IEdST19DRUxMU1xcbiAzMjQ6XFx0XFx0aGVscFxcbiAzMjU6XFx0XFx0ICAgTUFDc2VjIGlzIGFuIGVuY3J5cHRpb24gc3RhbmRhcmQgZm9yIEV0aGVybmV0LlxcbiAzMjY6XFx0XFxuIDMyNzpcXHRjb25maWcgTkVUQ09OU09MRVxcbiAzMjg6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcXFwiXFxuIDMyOTpcXHRcXHRkZXBlbmRzIG9uIFBSSU5US1xcbiAzMzA6XFx0XFx0aGVscFxcbiAzMzE6XFx0XFx0ICBJZiB5b3Ugd2FudCB0byBsb2cga2VybmVsIG1lc3NhZ2VzIG92ZXIgdGhlIG5ldHdvcmssIGVuYWJsZSB0aGlzLlxcbiAzMzI6XFx0XFx0ICBTZWUgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XFx1MDAzZSBmb3IgZGV0YWlscy5cXG4gMzMzOlxcdFxcbiAzMzQ6XFx0Y29uZmlnIE5FVENPTlNPTEVfRFlOQU1JQ1xcbiAzMzU6XFx0XFx0Ym9vbCBcXFwiRHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgbG9nZ2luZyB0YXJnZXRzXFxcIlxcbiAzMzY6XFx0XFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFIFxcdTAwMjZcXHUwMDI2IFNZU0ZTIFxcdTAwMjZcXHUwMDI2IENPTkZJR0ZTX0ZTIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gMzM3OlxcdFxcdFxcdFxcdCEoTkVUQ09OU09MRT15IFxcdTAwMjZcXHUwMDI2IENPTkZJR0ZTX0ZTPW0pXFxuIDMzODpcXHRcXHRzZWxlY3QgUFJJTlRLX0VYRUNVVElPTl9DVFhcXG4gMzM5OlxcdFxcdGhlbHBcXG4gMzQwOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgYWJpbGl0eSB0byBkeW5hbWljYWxseSByZWNvbmZpZ3VyZSB0YXJnZXRcXG4gMzQxOlxcdFxcdCAgcGFyYW1ldGVycyAoaW50ZXJmYWNlLCBJUCBhZGRyZXNzZXMsIHBvcnQgbnVtYmVycywgTUFDIGFkZHJlc3NlcylcXG4gMzQyOlxcdFxcdCAgYXQgcnVudGltZSB0aHJvdWdoIGEgdXNlcnNwYWNlIGludGVyZmFjZSBleHBvcnRlZCB1c2luZyBjb25maWdmcy5cXG4gMzQzOlxcdFxcdCAgU2VlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFxcdTAwM2UgZm9yIGRldGFpbHMuXFxuIDM0NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6MzY6MzcuMjA1MDg4ODM1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNjAxMTgzMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRjb25zb2xlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBORVRDT05TT0xFYCBtb2R1bGUgYW5kIGhvdyBpdCdzIGNvbmZpZ3VyZWQuIEl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogYE5FVENPTlNPTEVgIGRlcGVuZHMgb24gYFBSSU5US2AsIGFuZCBgTkVUQ09OU09MRV9EWU5BTUlDYCBkZXBlbmRzIG9uIGBORVRDT05TT0xFYCwgYFNZU0ZTYCwgYW5kIGBDT05GSUdGU19GU2AuIFJpZ2h0LCBzbyB0byBnZXQgZXZlcnl0aGluZyB3b3JraW5nLCBJIG5lZWQgdG8gZW5hYmxlIGBORVRDT05TT0xFYCwgYE5FVENPTlNPTEVfRFlOQU1JQ2AsIGBDT05GSUdGU19GU2AsIGFuZCBgSVBWNmAsIG5hdHVyYWxseS4gVGhhdCBzZWVtcyBsb2dpY2FsLlxuXG5Ob3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY3JpdGljYWwgc3ltYm9scyBtb2RpZmllZCBieSB0aGlzIHBhdGNoIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMuIExldCdzIHNlZS4uLiBpdCBhZmZlY3RzIGBuZXRjb25zX3Rha2VfaXB2NmAsIGBuZXRjb25zX3Rha2VfaXB2NGAsIGBuZXRjb25zX25ldHBvbGxfc2V0dXBgLCBgbmV0Y29uc29sZV9wcmludF9iYW5uZXJgLCBgbmV0cG9sbF9wYXJzZV9pcF9hZGRyYCwgYW5kIHRoZW4gdGhlIHN5c2ZzIGludGVyZmFjZSBiaXRzOiBgbG9jYWxfaXBfc2hvd2AsIGByZW1vdGVfaXBfc2hvd2AsIGBsb2NhbF9pcF9zdG9yZWAsIGByZW1vdGVfaXBfc3RvcmVgLiBJIHNlZSBgbmV0cG9sbF91ZHBfY2hlY2tzdW1gLCBgcHVzaF9ldGhgLCBhbmQgYG5ldHBvbGxfc2VuZF91ZHBgIGFzIHdlbGwuIFRoZSBwYXJzZXIgYW5kIGNvbW1hbmQtbGluZSBwYXJzaW5nIGlzIHRoZXJlIHRvbzogYG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVgLlxuXG5BbHJpZ2h0LCB0aGUgY29yZSBmdW5jdGlvbnMgSSdtIGludGVyZXN0ZWQgaW4sIGJhc2VkIG9uIHRob3NlIG1vZGlmaWNhdGlvbnMsIGFyZTogYGxvY2FsX2lwX3N0b3JlYCwgYHJlbW90ZV9pcF9zdG9yZWAsIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYCwgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAsIGFuZCBgbmV0cG9sbF9zZW5kX3VkcGAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGZvY3VzIGFyZWFzIG9mIHRoZSBjaGFuZ2UuXG5cbldhaXQgYSBzZWNvbmQsIGxldCdzIGp1c3QgbWFrZSBzdXJlIGFib3V0IHRoaXMgYG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVgIGZ1bmN0aW9uLiBJcyBpdCBzdGF0aWM/IFllcywgaXQncyBzdGF0aWMuIEhtbS4uLiBhY2NvcmRpbmcgdG8gdGhlIGd1aWRlbGluZXMsIEkgc2hvdWxkIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gTGV0J3MgZGlnIGRlZXBlci4gV2hhdCBjYWxscyBgbG9jYWxfaXBfc3RvcmVgPyBBaCwgaXQncyBhIHN5c2ZzL2NvbmZpZ2ZzIHN0b3JlIGZ1bmN0aW9uLiBVc3VhbGx5IHRob3NlIGFyZSBzdGF0aWMsIGJ1dCBJIGJldCB0aGV5IGFyZSByZWdpc3RlcmVkIHVzaW5nIHRob3NlIG1hY3Jvcy4gVGltZSB0byBjaGVjayBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYCBmb3IgdGhvc2UgY29uZmlnZnMgbWFjcm9zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMwMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM2OjQ0LjM2NTIwOTQ2NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5MzYyMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHRlNfQVRUUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE1Mjc9c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9jcHVfbnJfZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU1OS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU2MDpDT05GSUdGU19BVFRSKHVzZXJkYXR1bV8sIHZhbHVlKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU2MTpDT05GSUdGU19BVFRSKHN5c2RhdGFfLCBjcHVfbnJfZW5hYmxlZCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1NjI6Q09ORklHRlNfQVRUUihzeXNkYXRhXywgdGFza25hbWVfZW5hYmxlZCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1NjM6Q09ORklHRlNfQVRUUihzeXNkYXRhXywgcmVsZWFzZV9lbmFibGVkKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU2NDpDT05GSUdGU19BVFRSKHN5c2RhdGFfLCBtc2dpZF9lbmFibGVkKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU2NS1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNjM2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSB1c2VyZGF0YV90eXBlID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2NDItXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NDM6Q09ORklHRlNfQVRUUigsIGVuYWJsZWQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjQ0OkNPTkZJR0ZTX0FUVFIoLCBleHRlbmRlZCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NDU6Q09ORklHRlNfQVRUUigsIGRldl9uYW1lKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY0NjpDT05GSUdGU19BVFRSKCwgbG9jYWxfcG9ydCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NDc6Q09ORklHRlNfQVRUUigsIHJlbW90ZV9wb3J0KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY0ODpDT05GSUdGU19BVFRSKCwgbG9jYWxfaXApO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjQ5OkNPTkZJR0ZTX0FUVFIoLCByZW1vdGVfaXApO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjUwOkNPTkZJR0ZTX0FUVFJfUk8oLCBsb2NhbF9tYWMpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjUxOkNPTkZJR0ZTX0FUVFIoLCByZW1vdGVfbWFjKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY1MjpDT05GSUdGU19BVFRSKCwgcmVsZWFzZSk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NTM6Q09ORklHRlNfQVRUUl9STygsIHRyYW5zbWl0X2Vycm9ycyk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2NTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM2OjQ0LjQxMzE1MDgwOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDUwNzAxMjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBFeHBvc3VyZSoqXG5cbkFscmlnaHQsIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYGxvY2FsX2lwX3N0b3JlYCBpcyBiZWluZyBleHBvc2VkIHRocm91Z2ggY29uZmlnZnMuIFRoYXQncyBnb29kIHRvIGtub3csIGFuZCBpdCBhbGlnbnMgd2l0aCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0ncyBhcmNoaXRlY3R1cmUuIE5vdywgdGhlIG1vcmUgaW50ZXJlc3RpbmcgcXVlc3Rpb24gaXMgYXJvdW5kIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYC4gV2hlcmUgaXMgdGhhdCBiZWluZyBjYWxsZWQ/IFdoYXQncyB0aGUgY29udGV4dD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgY2hhaW4gdG8gcmVhbGx5IGdhdWdlIGl0cyBpbXBhY3QgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIFRyYWNpbmcgdGhlIG9yaWdpbiBvZiB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gY2FsbCBpcyBnb2luZyB0byBiZSBrZXkgdG8gZXZhbHVhdGluZyB0aGUgb3ZlcmFsbCBwaWN0dXJlLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIHBhcmVudCBjYWxscyBhbmQgdGhlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzMxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6MzY6NDcuNDYzODU1MjQ4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODEwMTY5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9OTg2PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwMzQtXFx0XFx0LypcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTAzNTpcXHRcXHQgKiBTa2lwIG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoKSAtLSBhbGwgdGhlIGF0dHJpYnV0ZXMgYXJlXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwMzYtXFx0XFx0ICogYWxyZWFkeSBjb25maWd1cmVkIHZpYSBjb25maWdmcy4gSnVzdCBwcmludCB0aGVtIG91dC5cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNDkzPV9fcmVsZWFzZXMoXFx1MDAyNnRhcmdldF9saXN0X2xvY2spXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ5Ny1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQ5ODpzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDk5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNTg2PXN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX3BhcmFtX3RhcmdldChjaGFyICp0YXJnZXRfY29uZmlnLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2MTMtXFx0LyogUGFyc2UgcGFyYW1ldGVycyBhbmQgc2V0dXAgbmV0cG9sbCAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjE0OlxcdGVyciA9IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUobnQsIHRhcmdldF9jb25maWcpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjE1LVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM2OjQ3LjUxMTk3NjY1M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzAxNTk1NjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhhdCBzbmlwcGV0OlxuXG4qKkRlZXAgRGl2ZSBpbnRvIFBhcmFtZXRlciBBbGxvY2F0aW9uIGFuZCBOZXR3b3JrIENvbnNvbGUgUGFyc2luZyoqXG5cbk9rYXksIHNvIGBhbGxvY19wYXJhbV90YXJnZXRgIGlzIGJlaW5nIGNhbGxlZCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBJIGtub3cgdGhhdCBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyBtZW1vcnkgZm9yIGNvbW1hbmQtbGluZSBwYXJhbWV0ZXJzLiBBbmQgc3BlY2lmaWNhbGx5LCBpdCBhcHBlYXJzIGl0J3MgZGlyZWN0bHkgbGlua2VkIHRvIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYC4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCB0aGUgbmV0d29yayBjb25zb2xlIHNldHVwLCBhcyB0aGF0J3MgdGhlIHByaW1hcnkgY29udGV4dCBmb3IgdGhlIGBuZXRjb25zb2xlYCBjYWxscy4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uLCBvZiBjb3Vyc2UsIGlzOiAqV2hhdCogaXMgYWN0dWFsbHkgY2FsbGluZyBgYWxsb2NfcGFyYW1fdGFyZ2V0YCBpbiB0aGUgZmlyc3QgcGxhY2U/IEtub3dpbmcgdGhlIGNhbGxlciBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBlbnRpcmUgZmxvdyBhbmQgcHVycG9zZSBvZiB0aGlzIGFsbG9jYXRpb24uIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdCBjYWxsIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBkYXRhIGlzIGNvbWluZyBmcm9tIGFuZCB3aGF0J3MgdHJpZ2dlcmluZyB0aGUgYWxsb2NhdGlvbi4gSXMgaXQgYSBtb2R1bGUgaW5pdGlhbGl6YXRpb24sIGNvbW1hbmQtbGluZSBwYXJzaW5nIGF0IGJvb3QsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaW1lIHRvIGRpZyBkZWVwZXIgYW5kIGZpbmQgdGhhdCBjYWxsaW5nIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI3OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM2OjUwLjgxMzU3NTU4OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwNDMyNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NfcGFyYW1fdGFyZ2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjQ5OD1zdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1ODUtLyogQWxsb2NhdGUgbmV3IHRhcmdldCAoZnJvbSBib290L21vZHVsZSBwYXJhbSkgYW5kIHNldHVwIG5ldHBvbGwgZm9yIGl0ICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1ODY6c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1ODctXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGludCBjbWRsaW5lX2NvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI2Nzg9c3RhdGljIGludCBfX2luaXQgaW5pdF9uZXRjb25zb2xlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY4OS1cXHRcXHR3aGlsZSAoKHRhcmdldF9jb25maWcgPSBzdHJzZXAoXFx1MDAyNmlucHV0LCBcXFwiO1xcXCIpKSkge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjkwOlxcdFxcdFxcdG50ID0gYWxsb2NfcGFyYW1fdGFyZ2V0KHRhcmdldF9jb25maWcsIGNvdW50KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY5MS1cXHRcXHRcXHRpZiAoSVNfRVJSKG50KSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozNjo1MC44NTg2MjQyMDNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzNjYzNzg4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0Y29uc29sZSBNb2R1bGUgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBgYWxsb2NfcGFyYW1fdGFyZ2V0YCBpcyBpbml0aWF0ZWQgZnJvbSBgaW5pdF9uZXRjb25zb2xlYCwgd2hpY2ggaXMgdGhlIG1vZHVsZSdzIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLiBUaGF0IG1lYW5zIGl0IG9ubHkgZ2V0cyBjYWxsZWQgYXQgbW9kdWxlIGxvYWQgdGltZSBvciBkdXJpbmcgdGhlIGJvb3QgcHJvY2Vzcy4gSG1tLCBjb3VsZCB3ZSBhY3R1YWxseSBmdXp6IG1vZHVsZSBsb2FkIHBhcmFtZXRlcnM/IEludGVyZXN0aW5nIHRob3VnaHQuLi4gWWVzLCBzeXprYWxsZXIgZG9lcyBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIGZ1enogbW9kdWxlIHBhcmFtZXRlcnMhIEhvd2V2ZXIsIHRoaW5raW5nIG1vcmUgYWJvdXQgaXQsIGBsb2NhbF9pcF9zdG9yZWAgYW5kIGByZW1vdGVfaXBfc3RvcmVgIHNlZW0gbGlrZSBiZXR0ZXIgdGFyZ2V0cyBmb3IgZnV6emluZyBzaW5jZSB0aG9zZSBjYW4gYmUgaW52b2tlZCBtb3JlIGR5bmFtaWNhbGx5IHRocm91Z2ggY29uZmlnZnMuIFRoYXQgb2ZmZXJzIGEgbXVjaCByaWNoZXIgYXR0YWNrIHN1cmZhY2UuIEFuZCwgd2FpdC4uLiBpc24ndCBgZW5hYmxlZF9zdG9yZWAgcG90ZW50aWFsbHkgY2FsbGluZyBgbmV0Y29uc19uZXRwb2xsX3NldHVwYD8gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYGVuYWJsZWRfc3RvcmVgIG1vcmUgY2xvc2VseTsgdGhhdCBzb3VuZHMgcHJvbWlzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc5MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozNjo1NC40OTUyNjQ2NTFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDE5NDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVuYWJsZWRfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz05NjY9c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9tc2dpZF9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk4NS0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTg2OnN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05ODctXFx0XFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTQzMj1zdGF0aWMgdm9pZCBkaXNhYmxlX3N5c2RhdGFfZmVhdHVyZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0MzgtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE0Mzk6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9tc2dpZF9lbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQ0MC1cXHRcXHRcXHRcXHRcXHQgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDY3LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDY4OnN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfcmVsZWFzZV9lbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQ2OS1cXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0OTYtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE0OTc6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV90YXNrbmFtZV9lbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQ5OC1cXHRcXHRcXHRcXHRcXHQgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTI2LS8qIGNvbmZpZ2ZzIGhlbHBlciB0byBzeXNkYXRhIGNwdV9uciBmZWF0dXJlICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1Mjc6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9jcHVfbnJfZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1MjgtXFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozNjo1NC41NDEyOTEzMDZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE0NDc1Mzg2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4gSGVyZSdzIGhvdyBJJ20gdGhpbmtpbmcgYWJvdXQgaXQ6XG5cbioqQW5hbHl6aW5nIHRoZSBgZW5hYmxlZF9zdG9yZWAgQ2FsbHMqKlxuXG5BbHJpZ2h0LCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHVuZGVyc3RhbmQgdGhlIGJlaGF2aW9yIG9mIHRoaXMgY29kZSwgYW5kIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHRoYXQgaXMgYnkgZmlndXJpbmcgb3V0IGhvdyB0aGUgYGVuYWJsZWRfc3RvcmVgIGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQuIEkgbmVlZCB0byB0cmFjZSBldmVyeSBzaW5nbGUgaW5zdGFuY2Ugd2hlcmUgYGVuYWJsZWRfc3RvcmVgIGlzIGNhbGxlZC4gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBicmFuY2hlcyB0aGF0IGNoYW5nZSBob3cgYGVuYWJsZWRfc3RvcmVgIGlzIHV0aWxpemVkPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcGVyZm9ybWFuY2Ugb3IgdGhyZWFkaW5nIGNvbnNpZGVyYXRpb25zIGFzIGEgcmVzdWx0PyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGl0cyB1c2FnZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEknbGwgbmVlZCB0byBrbm93OiB3aGF0IGRhdGEgaXMgcGFzc2VkIHRvIGl0PyBXaGF0IGlzIGl0IGRvaW5nIHdpdGggdGhhdCBkYXRhPyBBbmQgaW1wb3J0YW50bHksIHdoYXQgYXJlIHRoZSByZXR1cm4gdmFsdWVzIG9mIHRoZXNlIGNhbGxzPyBUaGlzIHdpbGwgaGVscCBtZSBxdWlja2x5IHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgcmVzcG9uc2liaWxpdGllcywgYW5kIHRoZSBvdmVyYWxsIHJvbGUgaXQgcGxheXMgaW4gdGhlIGNvZGUuIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgYmVmb3JlIEkgY2FuIGV2YWx1YXRlIHRoaXMgZWZmaWNpZW50bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTg4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6MzY6NTcuNjg2MDQ3ODA3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTg2LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTg2OlxcdHN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbiA5ODc6XFx0XFx0XFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuIDk4ODpcXHR7XFxuIDk4OTpcXHRcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xcbiA5OTA6XFx0XFx0Ym9vbCBlbmFibGVkLCBjdXJyZW50X2VuYWJsZWQ7XFxuIDk5MTpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiA5OTI6XFx0XFx0c3NpemVfdCByZXQ7XFxuIDk5MzpcXHRcXG4gOTk0OlxcdFxcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XFxuIDk5NTpcXHRcXHRyZXQgPSBrc3RydG9ib29sKGJ1ZiwgXFx1MDAyNmVuYWJsZWQpO1xcbiA5OTY6XFx0XFx0aWYgKHJldClcXG4gOTk3OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gOTk4OlxcdFxcbiA5OTk6XFx0XFx0LyogV2hlbiB0aGUgdXNlciBleHBsaWNpdGx5IGVuYWJsZXMgb3IgZGlzYWJsZXMgYSB0YXJnZXQgdGhhdCBpc1xcbjEwMDA6XFx0XFx0ICogY3VycmVudGx5IGRlYWN0aXZhdGVkLCByZXNldCBpdHMgc3RhdGUgdG8gZGlzYWJsZWQuIFRoZSBERUFDVElWQVRFRFxcbjEwMDE6XFx0XFx0ICogc3RhdGUgb25seSB0cmFja3MgaW50ZXJmYWNlLWRyaXZlbiBkZWFjdGl2YXRpb24gYW5kIHNob3VsZCBfbm90X1xcbjEwMDI6XFx0XFx0ICogcGVyc2lzdCB3aGVuIHRoZSB1c2VyIG1hbnVhbGx5IGNoYW5nZXMgdGhlIHRhcmdldCdzIGVuYWJsZWQgc3RhdGUuXFxuMTAwMzpcXHRcXHQgKi9cXG4xMDA0OlxcdFxcdGlmIChudC1cXHUwMDNlc3RhdGUgPT0gU1RBVEVfREVBQ1RJVkFURUQpXFxuMTAwNTpcXHRcXHRcXHRudC1cXHUwMDNlc3RhdGUgPSBTVEFURV9ESVNBQkxFRDtcXG4xMDA2OlxcdFxcbjEwMDc6XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4xMDA4OlxcdFxcdGN1cnJlbnRfZW5hYmxlZCA9IG50LVxcdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEO1xcbjEwMDk6XFx0XFx0aWYgKGVuYWJsZWQgPT0gY3VycmVudF9lbmFibGVkKSB7XFxuMTAxMDpcXHRcXHRcXHRwcl9pbmZvKFxcXCJuZXR3b3JrIGxvZ2dpbmcgaGFzIGFscmVhZHkgJXNcXFxcblxcXCIsXFxuMTAxMTpcXHRcXHRcXHRcXHRjdXJyZW50X2VuYWJsZWQgPyBcXFwic3RhcnRlZFxcXCIgOiBcXFwic3RvcHBlZFxcXCIpO1xcbjEwMTI6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjEwMTM6XFx0XFx0fVxcbjEwMTQ6XFx0XFxuMTAxNTpcXHRcXHRpZiAoZW5hYmxlZCkge1xcdC8qIHRydWUgKi9cXG4xMDE2OlxcdFxcdFxcdGlmIChudC1cXHUwMDNlcmVsZWFzZSBcXHUwMDI2XFx1MDAyNiAhbnQtXFx1MDAzZWV4dGVuZGVkKSB7XFxuMTAxNzpcXHRcXHRcXHRcXHRwcl9lcnIoXFxcIk5vdCBlbmFibGluZyBuZXRjb25zb2xlLiBSZWxlYXNlIGZlYXR1cmUgcmVxdWlyZXMgZXh0ZW5kZWQgbG9nIG1lc3NhZ2VcXFwiKTtcXG4xMDE4OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xMDE5OlxcdFxcdFxcdH1cXG4xMDIwOlxcdFxcbjEwMjE6XFx0XFx0XFx0aWYgKG50LVxcdTAwM2VleHRlbmRlZCBcXHUwMDI2XFx1MDAyNiAhY29uc29sZV9pc19yZWdpc3RlcmVkKFxcdTAwMjZuZXRjb25zb2xlX2V4dCkpIHtcXG4xMDIyOlxcdFxcdFxcdFxcdG5ldGNvbnNvbGVfZXh0LmZsYWdzIHw9IENPTl9FTkFCTEVEO1xcbjEwMjM6XFx0XFx0XFx0XFx0cmVnaXN0ZXJfY29uc29sZShcXHUwMDI2bmV0Y29uc29sZV9leHQpO1xcbjEwMjQ6XFx0XFx0XFx0fVxcbjEwMjU6XFx0XFxuMTAyNjpcXHRcXHRcXHQvKiBVc2VyIG1pZ2h0IGJlIGVuYWJsaW5nIHRoZSBiYXNpYyBmb3JtYXQgdGFyZ2V0IGZvciB0aGUgdmVyeVxcbjEwMjc6XFx0XFx0XFx0ICogZmlyc3QgdGltZSwgbWFrZSBzdXJlIHRoZSBjb25zb2xlIGlzIHJlZ2lzdGVyZWQuXFxuMTAyODpcXHRcXHRcXHQgKi9cXG4xMDI5OlxcdFxcdFxcdGlmICghbnQtXFx1MDAzZWV4dGVuZGVkIFxcdTAwMjZcXHUwMDI2ICFjb25zb2xlX2lzX3JlZ2lzdGVyZWQoXFx1MDAyNm5ldGNvbnNvbGUpKSB7XFxuMTAzMDpcXHRcXHRcXHRcXHRuZXRjb25zb2xlLmZsYWdzIHw9IENPTl9FTkFCTEVEO1xcbjEwMzE6XFx0XFx0XFx0XFx0cmVnaXN0ZXJfY29uc29sZShcXHUwMDI2bmV0Y29uc29sZSk7XFxuMTAzMjpcXHRcXHRcXHR9XFxuMTAzMzpcXHRcXG4xMDM0OlxcdFxcdFxcdC8qXFxuMTAzNTpcXHRcXHRcXHQgKiBTa2lwIG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoKSAtLSBhbGwgdGhlIGF0dHJpYnV0ZXMgYXJlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM2OjU3LjY4NjE4NDk3N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTc1MzQ4ODc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBgZW5hYmxlZF9zdG9yZWAgU3RydWN0dXJlKipcblxuQWxyaWdodCwgSSdtIGRpdmluZyBpbi4gXCJMZXQncyByZWFkIHRoZSByZXN0IG9mIGBlbmFibGVkX3N0b3JlYC5cIiBUaGF0J3MgdGhlIGtleS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgZW5hYmxlZF9zdG9yZWAgb2JqZWN0IGNvbXBsZXRlbHkuIFRoZSBuYW1lIGltcGxpZXMgaXQncyBhIGNyaXRpY2FsIGNvbXBvbmVudCwgbGlrZWx5IGhvbGRpbmcgYSBzdGF0dXMgb3IgY29uZmlndXJhdGlvbiB0aGF0IGdvdmVybnMgYWNjZXNzIG9yIGFjdGl2YXRpb24gb2Ygb3RoZXIgcmVzb3VyY2VzLiBXaGF0J3Mgd2l0aGluIHRoaXMgc3RvcmUgaXMgY3J1Y2lhbC4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIG90aGVyIHByb3BlcnRpZXMgYW5kIHRoZSBzdG9yZSdzIHJlbGF0aW9uc2hpcHMgd2l0aCBvdGhlciBvYmplY3RzLiBXaGF0IGFyZSB0aGUgc3RvcmUncyBtZXRob2RzPyBXaGF0IGZvcm1hdCBhcmUgdGhlIGtleXMvdmFsdWVzPyBVbmRlcnN0YW5kaW5nIHRoaXMgc3RydWN0dXJlIHdpbGwgYmUgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgYmVoYXZpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTc3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozNzowMC44NjE1MzY4MTRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2MjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDM2LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDM2OlxcdFxcdFxcdCAqIGFscmVhZHkgY29uZmlndXJlZCB2aWEgY29uZmlnZnMuIEp1c3QgcHJpbnQgdGhlbSBvdXQuXFxuMTAzNzpcXHRcXHRcXHQgKi9cXG4xMDM4OlxcdFxcdFxcdG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKG50KTtcXG4xMDM5OlxcdFxcbjEwNDA6XFx0XFx0XFx0LyogSW5pdGlhbGlzZSB0aGUgc2tiIHBvb2wgYmVmb3JlIG5ldHBvbGxfc2V0dXAoKSBzbyB0aGUgcG9vbFxcbjEwNDE6XFx0XFx0XFx0ICogaXMgdmFsaWQgYXMgc29vbiBhcyBudC1cXHUwMDNlbnAuZGV2IGJlY29tZXMgdmlzaWJsZSB0b1xcbjEwNDI6XFx0XFx0XFx0ICogdGFyZ2V0X2xpc3Qgd2Fsa2VycyAobmV0Y29uc29sZV9uZXRkZXZfZXZlbnQpLCB3aGljaCB3b3VsZFxcbjEwNDM6XFx0XFx0XFx0ICogb3RoZXJ3aXNlIGNhbGwgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaCgpIG9uIHVuaW5pdGlhbGlzZWRcXG4xMDQ0OlxcdFxcdFxcdCAqIHN0YXRlLlxcbjEwNDU6XFx0XFx0XFx0ICovXFxuMTA0NjpcXHRcXHRcXHRuZXRjb25zb2xlX3NrYl9wb29sX2luaXQobnQpO1xcbjEwNDc6XFx0XFxuMTA0ODpcXHRcXHRcXHRyZXQgPSBuZXRjb25zX25ldHBvbGxfc2V0dXAobnQpO1xcbjEwNDk6XFx0XFx0XFx0aWYgKHJldCkge1xcbjEwNTA6XFx0XFx0XFx0XFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XFxuMTA1MTpcXHRcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuMTA1MjpcXHRcXHRcXHR9XFxuMTA1MzpcXHRcXG4xMDU0OlxcdFxcdFxcdG50LVxcdTAwM2VzdGF0ZSA9IFNUQVRFX0VOQUJMRUQ7XFxuMTA1NTpcXHRcXHRcXHRwcl9pbmZvKFxcXCJuZXR3b3JrIGxvZ2dpbmcgc3RhcnRlZFxcXFxuXFxcIik7XFxuMTA1NjpcXHRcXHR9IGVsc2Uge1xcdC8qIGZhbHNlICovXFxuMTA1NzpcXHRcXHRcXHQvKiBXZSBuZWVkIHRvIGRpc2FibGUgdGhlIG5ldGNvbnNvbGUgYmVmb3JlIGNsZWFuaW5nIGl0IHVwXFxuMTA1ODpcXHRcXHRcXHQgKiBvdGhlcndpc2Ugd2UgbWlnaHQgZW5kIHVwIGluIHdyaXRlX21zZygpIHdpdGhcXG4xMDU5OlxcdFxcdFxcdCAqIG50LVxcdTAwM2VucC5kZXYgPT0gTlVMTCBhbmQgbnQtXFx1MDAzZXN0YXRlID09IFNUQVRFX0VOQUJMRURcXG4xMDYwOlxcdFxcdFxcdCAqL1xcbjEwNjE6XFx0XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2dGFyZ2V0X2NsZWFudXBfbGlzdF9sb2NrKTtcXG4xMDYyOlxcdFxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrLCBmbGFncyk7XFxuMTA2MzpcXHRcXHRcXHRudC1cXHUwMDNlc3RhdGUgPSBTVEFURV9ESVNBQkxFRDtcXG4xMDY0OlxcdFxcdFxcdC8qIFJlbW92ZSB0aGUgdGFyZ2V0IGZyb20gdGhlIGxpc3QsIHdoaWxlIGhvbGRpbmdcXG4xMDY1OlxcdFxcdFxcdCAqIHRhcmdldF9saXN0X2xvY2tcXG4xMDY2OlxcdFxcdFxcdCAqL1xcbjEwNjc6XFx0XFx0XFx0bGlzdF9tb3ZlKFxcdTAwMjZudC1cXHUwMDNlbGlzdCwgXFx1MDAyNnRhcmdldF9jbGVhbnVwX2xpc3QpO1xcbjEwNjg6XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaywgZmxhZ3MpO1xcbjEwNjk6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ0YXJnZXRfY2xlYW51cF9saXN0X2xvY2spO1xcbjEwNzA6XFx0XFx0XFx0LyogVW5yZWdpc3RlciBjb25zb2xlcywgd2hvc2UgdGhlIGxhc3QgdGFyZ2V0IG9mIHRoYXQgdHlwZSBnb3RcXG4xMDcxOlxcdFxcdFxcdCAqIGRpc2FibGVkLlxcbjEwNzI6XFx0XFx0XFx0ICovXFxuMTA3MzpcXHRcXHRcXHR1bnJlZ2lzdGVyX25ldGNvbnNfY29uc29sZXMoKTtcXG4xMDc0OlxcdFxcdH1cXG4xMDc1OlxcdFxcbjEwNzY6XFx0XFx0cmV0ID0gY291bnQ7XFxuMTA3NzpcXHRcXHQvKiBEZWZlcnJlZCBjbGVhbnVwICovXFxuMTA3ODpcXHRcXHRuZXRjb25zb2xlX3Byb2Nlc3NfY2xlYW51cHMoKTtcXG4xMDc5OlxcdG91dF91bmxvY2s6XFxuMTA4MDpcXHRcXHRkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfdW5sb2NrKCk7XFxuMTA4MTpcXHRcXHRyZXR1cm4gcmV0O1xcbjEwODI6XFx0fVxcbjEwODM6XFx0XFxuMTA4NDpcXHRzdGF0aWMgc3NpemVfdCByZWxlYXNlX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbjEwODU6XFx0XFx0XFx0XFx0ICAgICBzaXplX3QgY291bnQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM3OjAwLjg2MTY3NDY5NFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDgzNDc2NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2gncyBJbXBhY3QqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBwYXRjaCwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgYGVuYWJsZWRfc3RvcmVgIGlzIHRoZSBrZXkuIFRoYXQgZnVuY3Rpb24gY2FsbCBkaXJlY3RseSBsZWFkcyB0byBgbmV0Y29uc19uZXRwb2xsX3NldHVwYCwgd2hpY2ggaXMgYSBmYW50YXN0aWMgXCJmb2N1cyBzeW1ib2xcIiDigJMgdGhhdCdzIHdoZXJlIHRoaXMgcGF0Y2gncyBzZXR1cCBsb2dpYyBpcyBoaXR0aW5nLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGF0IGFyZWEuXG5cbkJ1dCwgYWxyaWdodCwgdGhpbmtpbmcgYnJvYWRlciBub3cuIElmIHdlJ3JlIHRhbGtpbmcgYWJvdXQgbG9nZ2luZywgYG5ldHBvbGxfc2VuZF91ZHBgIHNlZW1zIGxpa2UgYW5vdGhlciBoaWdoLWltcGFjdCBhcmVhIOKAkyB0aGF0J3MgdGhlIGZ1bmN0aW9uIGFjdHVhbGx5IHNlbmRpbmcgdGhlIG1lc3NhZ2UsIHJpZ2h0PyBHb29kIHRvIG5vdGUuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqZnVsbCogaW1wYWN0LiBUaGVyZWZvcmUsIEkgbmVlZCB0byBrbm93ICp3aGF0KiBjYWxscyBgbmV0cG9sbF9zZW5kX3VkcGAuIExldCdzIG1hcCB0aGF0IG91dCBhbmQgdGhlbiBjb21wYXJlIHdpdGggbXkgcHJpb3Iga25vd2xlZGdlIG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTM1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozNzowNC45NDUxNTQxMDRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDAyNzY3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRwb2xsX3NlbmRfdWRwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjEzMD1zdGF0aWMgdm9pZCBwdXNoX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTUzLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTU0OnN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNTUtXFx0XFx0XFx0ICAgIGludCBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE5MS0vKipcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE5MjogKiBzZW5kX3VkcCAtIFdyYXBwZXIgZm9yIG5ldHBvbGxfc2VuZF91ZHAgdGhhdCBjb3VudHMgZXJyb3JzXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxOTMtICogQG50OiB0YXJnZXQgdG8gc2VuZCBtZXNzYWdlIHRvXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE5Ni0gKlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTk3OiAqIENhbGxzIG5ldHBvbGxfc2VuZF91ZHAgYW5kIGNsYXNzaWZpZXMgdGhlIHJldHVybiB2YWx1ZS4gSWYgYW4gZXJyb3JcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE5OC0gKiBvY2N1cnJlZCBpdCBpbmNyZW1lbnRzIHN0YXRpc3RpY3MgaW4gbnQtXFx1MDAzZXN0YXRzIGFjY29yZGluZ2x5LlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTk5OiAqIE9ubHkgY2FsbHMgbmV0cG9sbF9zZW5kX3VkcCBpZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDIGlzIGRpc2FibGVkLlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjAwLSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMjAxPXN0YXRpYyB2b2lkIHNlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIwMi17XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMDM6XFx0aW50IHJlc3VsdCA9IG5ldHBvbGxfc2VuZF91ZHAobnQsIG1zZywgbGVuKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIwNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mzc6MDUuMTA5MTg2Njg3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzk0MzU2MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOlxuXG4qKkFuYWx5emluZyB0aGUgVURQIFNlbmRpbmcgRmxvdyoqXG5cbk9rYXksIHNvIEkgc2VlIGEgZnVuY3Rpb24gY2FsbGVkIGBzZW5kX3VkcGAsIGFuZCBpbW1lZGlhdGVseSBteSBicmFpbiBqdW1wcyB0bzogXCJSaWdodCwgdGhpcyBpcyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5IHNlbmRpbmcgb3V0IFVEUCBwYWNrZXRzLlwiIE5vdywgdGhlIG5leHQgbG9naWNhbCBxdWVzdGlvbiBpcywgd2hlcmUgZG9lcyBgc2VuZF91ZHBgIGZpdCBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZT8gVGhlIHRleHQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBgc2VuZF91ZHBgIGNhbGxzIGBuZXRwb2xsX3NlbmRfdWRwYC4gVGhhdCdzIGltcG9ydGFudCDigJMgaXQgZXN0YWJsaXNoZXMgYSBjbGVhciBjYWxsIGhpZXJhcmNoeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCByZWxhdGlvbnNoaXAgYW5kIHdoYXQgaGFwcGVucyBhdCBlYWNoIGxheWVyLiBCdXQgYmVmb3JlIEkgZGlnIGludG8gYG5ldHBvbGxfc2VuZF91ZHBgLCB3aGljaCBsaWtlbHkgaGFuZGxlcyB0aGUgbG93ZXItbGV2ZWwgbmV0d29yayBpbnRlcmZhY2UgaW50ZXJhY3Rpb24sIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSAqKm9yaWdpbioqIG9mIHRoaXMgY2FsbC4gVGhlIGtleSBxdWVzdGlvbiBJJ20gYXNraW5nIG15c2VsZiBpczogXCJXaGF0IGhpZ2hlci1sZXZlbCBmdW5jdGlvbiwgcHJvY2Vzcywgb3IgZXZlbnQgdHJpZ2dlcmVkIHRoZSBleGVjdXRpb24gb2YgYHNlbmRfdWRwYCBpbiB0aGUgZmlyc3QgcGxhY2U/XCIgVW5kZXJzdGFuZGluZyB0aGUgdXBzdHJlYW0gY2FsbGVyKHMpIHdpbGwgZ2l2ZSBtZSBlc3NlbnRpYWwgY29udGV4dCBhYm91dCAqd2h5KiB0aGUgVURQIHBhY2tldCBpcyBiZWluZyBzZW50LCB3aGF0IGRhdGEgaXQgbGlrZWx5IGNvbnRhaW5zLCBhbmQgd2hlcmUgaXQncyBkZXN0aW5lZC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgc2VuZF91ZHBgIHRvIGdldCB0aGUgaW5pdGlhdGluZyBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzI0MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM3OjA4LjM4ODYyNDc1M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ5OTA3ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VuZF91ZHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMTMwPXN0YXRpYyB2b2lkIHB1c2hfaXB2NihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNTMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxNTQ6c3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE1NS1cXHRcXHRcXHQgICAgaW50IGxlbilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTkxLS8qKlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTkyOiAqIHNlbmRfdWRwIC0gV3JhcHBlciBmb3IgbmV0cG9sbF9zZW5kX3VkcCB0aGF0IGNvdW50cyBlcnJvcnNcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE5My0gKiBAbnQ6IHRhcmdldCB0byBzZW5kIG1lc3NhZ2UgdG9cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTk2LSAqXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxOTc6ICogQ2FsbHMgbmV0cG9sbF9zZW5kX3VkcCBhbmQgY2xhc3NpZmllcyB0aGUgcmV0dXJuIHZhbHVlLiBJZiBhbiBlcnJvclxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTk4LSAqIG9jY3VycmVkIGl0IGluY3JlbWVudHMgc3RhdGlzdGljcyBpbiBudC1cXHUwMDNlc3RhdHMgYWNjb3JkaW5nbHkuXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxOTk6ICogT25seSBjYWxscyBuZXRwb2xsX3NlbmRfdWRwIGlmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgaXMgZGlzYWJsZWQuXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDAtICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMDE6c3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjAyLXtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIwMzpcXHRpbnQgcmVzdWx0ID0gbmV0cG9sbF9zZW5kX3VkcChudCwgbXNnLCBsZW4pO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjA0LVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIyMTg9c3RhdGljIHZvaWQgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyNTEtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyNTI6XFx0c2VuZF91ZHAobnQsIG50LVxcdTAwM2VidWYsIG1zZ19sZW4pO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjUzLX1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMjYzPXN0YXRpYyB2b2lkIHNlbmRfZnJhZ21lbnRlZF9ib2R5KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjM0OS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjM1MDpcXHRcXHRzZW5kX3VkcChudCwgbnQtXFx1MDAzZWJ1ZiwgYnVmX29mZnNldCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzNTEtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI0MjM9c3RhdGljIHZvaWQgc2VuZF9tc2dfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDMwLVxcdFxcdGZyYWcgPSBtaW4obGVmdCwgTUFYX1BSSU5UX0NIVU5LKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQzMTpcXHRcXHRzZW5kX3VkcChudCwgdG1wLCBmcmFnKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQzMi1cXHRcXHR0bXAgKz0gZnJhZztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mzc6MDguNDMzNjIyMTQ4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NTgxNzU1MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVRFAgTWVzc2FnZSBTZW5kaW5nIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBVRFAgbWVzc2FnZSBzZW5kaW5nIGNvZGUuIEl0IGxvb2tzIGxpa2UgYHNlbmRfbXNnX3VkcGAsIGBzZW5kX2ZyYWdtZW50ZWRfYm9keWAsIGFuZCBgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbmAgYWxsIHVsdGltYXRlbHkgY2FsbCBgc2VuZF91ZHBgLiBUaGF0J3MgdGhlIGNvcmUgZnVuY3Rpb24sIHJpZ2h0PyBBbmQgdGhvc2UgaW50ZXJtZWRpYXJ5IGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGZyb20gYHdyaXRlX21zZ2AgYW5kIGB3cml0ZV9leHRfbXNnYC4gVGhvc2UgYXJlIHJlZ2lzdGVyZWQgYXMgY29uc29sZSB3cml0ZSBmdW5jdGlvbnMuIFNvLCBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgZGVlcCBkaXZlIHdvdWxkIGJlIGBuZXRwb2xsX3NlbmRfdWRwYC5cblxuV2FpdCwgc2hvb3QhIGBuZXRwb2xsX3NlbmRfdWRwYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoYXQncyBub3QgaWRlYWwgZm9yIGRpcmVjdCBhbmFseXNpcy4gT2theSwgc28gbWF5YmUgSSBzaG91bGQgZm9jdXMgaGlnaGVyIHVwIHRoZW4/IElzIGl0IGJldHRlciB0byBmb2N1cyBvbiBgd3JpdGVfbXNnYCBvciBgd3JpdGVfZXh0X21zZ2A/IEknbGwgcXVpY2tseSBjaGVjayBpZiBgd3JpdGVfbXNnYCBpcyBhbHNvIHN0YXRpYywganVzdCB0byBiZSBzdXJlLiBUaGlzIGdpdmVzIG1lIGEgZ29vZCBlbnRyeSBwb2ludCB0byBzZWUgd2hlcmUgdGhlIFVEUCBzZW5kaW5nIGlzIGluaXRpYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgyNzgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mzc6MTIuMTkxODAwMTZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNzM4OTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndyaXRlX21zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEwNT1zdGF0aWMgTElTVF9IRUFEKHRhcmdldF9jbGVhbnVwX2xpc3QpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDYtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwNzovKiBUaGlzIG5lZWRzIHRvIGJlIGEgc3BpbmxvY2sgYmVjYXVzZSB3cml0ZV9tc2coKSBjYW5ub3Qgc2xlZXAgKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA4LXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGFyZ2V0X2xpc3RfbG9jayk7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9OTg2PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNTctXFx0XFx0LyogV2UgbmVlZCB0byBkaXNhYmxlIHRoZSBuZXRjb25zb2xlIGJlZm9yZSBjbGVhbmluZyBpdCB1cFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMDU4OlxcdFxcdCAqIG90aGVyd2lzZSB3ZSBtaWdodCBlbmQgdXAgaW4gd3JpdGVfbXNnKCkgd2l0aFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDU5LVxcdFxcdCAqIG50LVxcdTAwM2VucC5kZXYgPT0gTlVMTCBhbmQgbnQtXFx1MDAzZXN0YXRlID09IFNUQVRFX0VOQUJMRURcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mzc6MTIuMjQyNTUwMDA1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNTM3NzcwNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipTdGF0aWMgRnVuY3Rpb24gQWxlcnQhKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBqdXN0IHNhdyB0aGF0IGB3cml0ZV9tc2dgIGZ1bmN0aW9uLCBhbmQgdGhhdCdzIGEgc3RhdGljIGRlY2xhcmF0aW9uLCB3aGljaCBpcyB1bnVzdWFsIGluIHRoaXMgY29udGV4dC4gSXQncyBtYWtpbmcgbWUgd29uZGVyIGFib3V0IHRoZSBzY29wZS4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBkZWZpbmVkLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaG93IGlzIGl0IGJlaW5nIGNhbGxlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGZ1bGx5IHRvIGV2YWx1YXRlIGl0LiBMZXQgbWUgY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGUgbmV0d29yayBjb25zb2xlIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBJJ2xsIGdvIGRpZ2dpbmcgaW4gYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgc3RhdGljIGB3cml0ZV9tc2dgIGlzIGFsbCBhYm91dC4gSG9wZWZ1bGx5LCB0aGlzIHNob3VsZCBjbGFyaWZ5IGhvdyBpdCBpcyB1c2VkIGFuZCB3aHkgaXQgaXMgc3RhdGljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg3MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM3OjE2LjI5NjMzMDIzOFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5MTQ5NjYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyB2b2lkIHdyaXRlX21zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM3OjE2LjM0MDI1NzMwM1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODc3ODE0NDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBDb2RlIEluc3BlY3Rpb24qKlxuXG5IbW0sIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHBpbnBvaW50IHRoZSBpc3N1ZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGF0IGB3cml0ZV9tc2dgIGZ1bmN0aW9uLiBJcyBpdCBwb3NzaWJsZSB0aGF0IHRoZSBwcm9ibGVtIGxpZXMgd2l0aCB0aGUgd2F5IHRoZSBmdW5jdGlvbiBpcyBkZWNsYXJlZD8gQ291bGQgaXQgYmUgYSBzaW1wbGUgY2FzZSBvZiBhIG1pc3Npbmcga2V5d29yZCwgbGlrZSB0aGUgYHN0YXRpYyB2b2lkYCBkZWNsYXJhdGlvbj8gSSdtIHdvbmRlcmluZyBpZiwgZm9yIHdoYXRldmVyIHJlYXNvbiwgdGhlIG9yaWdpbmFsIHByb2dyYW1tZXIgdGhvdWdodCB0aGUgc3RhdGljIGtleXdvcmQgd2FzIHJlcXVpcmVkIGluIHRoZWlyIGluaXRpYWwgYXR0ZW1wdCB0byBnZXQgaXQgd29ya2luZywgdGhlbiBsZWZ0IGl0IHRoZXJlIGFmdGVyIHRlc3RpbmcsIGFuZCBpdCBpcyBub3cgaW50ZXJmZXJpbmcuIExldCBtZSBnbyBiYWNrIGFuZCByZXZpZXcgaG93IHRoYXQgd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTAxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mzc6MTkuMjE4MDc0MTcyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjY2NDg1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3cml0ZV9tc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMDU9c3RhdGljIExJU1RfSEVBRCh0YXJnZXRfY2xlYW51cF9saXN0KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA2LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMDc6LyogVGhpcyBuZWVkcyB0byBiZSBhIHNwaW5sb2NrIGJlY2F1c2Ugd3JpdGVfbXNnKCkgY2Fubm90IHNsZWVwICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwOC1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRhcmdldF9saXN0X2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTk4Nj1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDU3LVxcdFxcdC8qIFdlIG5lZWQgdG8gZGlzYWJsZSB0aGUgbmV0Y29uc29sZSBiZWZvcmUgY2xlYW5pbmcgaXQgdXBcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTA1ODpcXHRcXHQgKiBvdGhlcndpc2Ugd2UgbWlnaHQgZW5kIHVwIGluIHdyaXRlX21zZygpIHdpdGhcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA1OS1cXHRcXHQgKiBudC1cXHUwMDNlbnAuZGV2ID09IE5VTEwgYW5kIG50LVxcdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM3OjE5LjI2NDc0NDc0N1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjcyOTExMjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVidWdnaW5nIE5ldHdvcmsgQ29uc29sZSBPdXRwdXQqKlxuXG5IbW0sIEkgc2VlbSB0byBiZSBtaXNzaW5nIHNvbWV0aGluZyBjcml0aWNhbCBpbiB0aGUgZGVidWdnaW5nIG91dHB1dC4gSSBzdXNwZWN0IEkgbmVlZCBtb3JlIGNvbnRleHQgYXJvdW5kIHRoYXQgcGFydGljdWxhciBmdW5jdGlvbiBjYWxsIEkgd2FzIGp1c3QgZXhhbWluaW5nLiBNeSBpbml0aWFsIGludmVzdGlnYXRpb24gbWlnaHQgbm90IGhhdmUgZ2l2ZW4gbWUgdGhlIGNvbXBsZXRlIHBpY3R1cmUsIHNvIEkgbmVlZCB0byBicm9hZGVuIG15IHNjb3BlLiBHaXZlbiB0aGF0IEknbSB3b3JraW5nIHdpdGggbmV0d29yayBjb25zb2xlIG91dHB1dCwgdGhlIGB3cml0ZV9tc2dgIGZ1bmN0aW9uIHNlZW1zIGxpa2UgYSBsaWtlbHkgY2FuZGlkYXRlIGZvciBmdXJ0aGVyIGV4YW1pbmF0aW9uLiBJJ2xsIHJlYWNoIGZvciBgZ3JlcGAgYW5kIGxldmVyYWdlIGl0cyBjb250ZXh0IGZlYXR1cmUgKC1DIDEpLiBCeSB1c2luZyBgLUMgMWAgSSBzaG91bGQgYmUgYWJsZSB0byB2aWV3IG9uZSBsaW5lIGJlZm9yZSBhbmQgYWZ0ZXIgZWFjaCBtYXRjaCBvZiBgd3JpdGVfbXNnYCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgIGZpbGUuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHBvdGVudGlhbGx5IHJldmVhbCB0aGUgY2F1c2Ugb2YgdGhlIGlzc3VlIG9yIGF0IGxlYXN0IHBvaW50IG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24gZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSdtIGhvcGluZyB0aGlzIHdpbGwgcHJvdmlkZSB0aGUgZnVsbCBwaWN0dXJlIHRoYXQgSSdtIG1pc3NpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTI3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mzc6MjIuNTM3NjU4MjU0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzU3NzEwNDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid3JpdGVfbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTA1PXN0YXRpYyBMSVNUX0hFQUQodGFyZ2V0X2NsZWFudXBfbGlzdCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTA3Oi8qIFRoaXMgbmVlZHMgdG8gYmUgYSBzcGlubG9jayBiZWNhdXNlIHdyaXRlX21zZygpIGNhbm5vdCBzbGVlcCAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDgtc3RhdGljIERFRklORV9TUElOTE9DSyh0YXJnZXRfbGlzdF9sb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz05ODY9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA1Ny1cXHRcXHQvKiBXZSBuZWVkIHRvIGRpc2FibGUgdGhlIG5ldGNvbnNvbGUgYmVmb3JlIGNsZWFuaW5nIGl0IHVwXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwNTg6XFx0XFx0ICogb3RoZXJ3aXNlIHdlIG1pZ2h0IGVuZCB1cCBpbiB3cml0ZV9tc2coKSB3aXRoXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNTktXFx0XFx0ICogbnQtXFx1MDAzZW5wLmRldiA9PSBOVUxMIGFuZCBudC1cXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozNzoyMi44MTM0MzcwODVaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA1ODU5MzE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGF0OlxuXG4qKlRyb3VibGVzaG9vdGluZyBhIEZ1bmN0aW9uIENhbGwqKlxuXG5IbW0sIHN0cmFuZ2UuIEkgd2FzIGV4cGVjdGluZyB0aGUgY29kZSB0byByZWNvZ25pemUgYHdyaXRlX21zZ2AsIGJ1dCBpdCBzZWVtcyB0byBiZSBtaXNzaW5nIHRoZSBkZWZpbml0aW9uLiBJdCdzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIHdoeSB0aGlzIGlzIGhhcHBlbmluZy4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBuYW1pbmcgY29udmVudGlvbnMgYW5kIHBvdGVudGlhbCBhbHRlcm5hdGl2ZSBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUuIENvdWxkIGl0IGJlIHVzaW5nIGEgc2xpZ2h0bHkgZGlmZmVyZW50LCBwZXJoYXBzIG1vcmUgc3BlY2lmaWMsIG5hbWU/IE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBsb29rIGZvciBhIHNpbWlsYXIgZnVuY3Rpb24gbmFtZSB0aGF0IG1pZ2h0IGJlIHVzZWQgYXMgYW4gaW50ZXJuYWwgY2FsbCB0byByZXBsYWNlIHRoZSBtaXNzaW5nIGRlZmluaXRpb24uIFBlcmhhcHMgaXQncyB1c2luZyBhbiBleHRlbnNpb24gZnVuY3Rpb24gbmFtZSwgc29tZXRoaW5nIGxpa2UgYHdyaXRlX2V4dF9tc2dgPyBUaGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBuZXh0IHN0ZXAuIEknbGwgY2hlY2sgbXkgbm90ZXMgYW5kIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIHRoYXQgYWx0ZXJuYXRpdmUgbmFtZSByaWdodCBhd2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDAzMSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM3OjI1Ljg3MjAzMjg0NFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2Mzg4NDYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndyaXRlX2V4dF9tc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozNzoyNS45MTU2Nzg5OFoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDA5MjY4MTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlIHByb3ZpZGVkIHByb21wdCwgZnJhbWluZyBpdCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIENvbnNvbGUgU3RydWN0IFJlZ2lzdHJhdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gYW5hbHl6ZSBgY29uc29sZWAgc3RydWN0IHJlZ2lzdHJhdGlvbi4gVGhhdCdzIHRoZSBjb3JlIGZvY3VzLiBOb3csIHdoZW4gSSBzZWUgXCJyZWdpc3RyYXRpb24sXCIgbXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgcGFyc2luZyB0aGUgaW1wbGljYXRpb25zLiBXaGF0IGtpbmQgb2YgcmVnaXN0cmF0aW9uIGFyZSB3ZSB0YWxraW5nIGFib3V0PyBJcyBpdCBhIHJ1bnRpbWUgcHJvY2VzcywgYSBjb21waWxlLXRpbWUgbWVjaGFuaXNtLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gV2hhdCBjb250ZXh0IGFyZSB3ZSB3aXRoaW4/IElzIHRoaXMgYSBzcGVjaWZpYyBsaWJyYXJ5LCBhIGN1c3RvbSBmcmFtZXdvcmssIG9yIGEgYnJvYWRlciBzeXN0ZW0tbGV2ZWwgZGVzaWduPyBUaGUgdGVybSBcInN0cnVjdFwiIGFsc28gYnJpbmdzIHVwIHNvbWUgcXVlc3Rpb25zIGZvciBtZS4gV2hhdCBhdHRyaWJ1dGVzIGFyZSB3ZSB0YWxraW5nIGFib3V0PyBIb3cgaXMgaXQgaW1wbGVtZW50ZWQ/IElzIGl0IGJlaW5nIGNhbGxlZCBieSB0aGUgc3lzdGVtLCBvciB0aGUgdXNlcnM/IEluIG9yZGVyIHRvIGdpdmUgYW4gZXhwZXJ0IGFzc2Vzc21lbnQsIEkgbmVlZCB0byBrbm93IHRoZXNlIGRldGFpbHMuIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGBjb25zb2xlYCBzdHJ1Y3QgaXRzZWxmIGlzIGxpa2VseSBjZW50cmFsIHRvIGhvdyB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MgZnVuY3Rpb25zLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN0cnVjdCBpcyBiZWluZyBkZXNpZ25lZCwgc28gSSBjYW4gc2VlIHdoYXQgaXMgYmVpbmcgY2FsbGVkLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHByb3ZpZGVkIGNvbnRleHQsIHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0aGUgZGVzaWduIGdvYWxzLCBhbmQgYW55IGRvY3VtZW50YXRpb24gcmVsYXRlZCB0byB0aGlzIHByb2Nlc3MuIE9ubHkgdGhlbiBjYW4gSSB0cnVseSBncmFzcCB0aGUgbnVhbmNlcyBhbmQgcG90ZW50aWFsIGNoYWxsZW5nZXMgb3IgYmVuZWZpdHMgYXNzb2NpYXRlZCB3aXRoIGhvdyB0aGlzIGBjb25zb2xlYCBzdHJ1Y3QgaXMgYmVpbmcgcmVnaXN0ZXJlZC4gSSdtIHJlYWR5IHRvIGRpZyBpbiBhbmQgYnJlYWsgaXQgZG93bi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyNjMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozNzoyOS45MjQ5NTAxMjlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODI0MTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBjb25zb2xlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTEyPXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbmV0Y29uc29sZV93cTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTctICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExODpzdGF0aWMgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZV9leHQsIG5ldGNvbnNvbGU7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExOS1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNDQ0PXN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGUoc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0LCBib29sIGV4dGVuZGVkKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NzEtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0NzI6c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZV9leHQoc3RydWN0IGNvbnNvbGUgKmNvbiBfX2Fsd2F5c191bnVzZWQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NzMtXFx0XFx0XFx0XFx0IHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDc3LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDc4OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGVfYmFzaWMoc3RydWN0IGNvbnNvbGUgKmNvbiBfX2Fsd2F5c191bnVzZWQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NzktXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0ODMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0ODQ6c3RhdGljIHZvaWQgbmV0Y29uc29sZV9kZXZpY2VfbG9jayhzdHJ1Y3QgY29uc29sZSAqY29uIF9fYWx3YXlzX3VudXNlZCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ4NS1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nICpmbGFncylcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjQ4Nj1fX2FjcXVpcmVzKFxcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0OTAtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0OTE6c3RhdGljIHZvaWQgbmV0Y29uc29sZV9kZXZpY2VfdW5sb2NrKHN0cnVjdCBjb25zb2xlICpjb24gX19hbHdheXNfdW51c2VkLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDkyLVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBmbGFncylcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNjQ4PXN0YXRpYyB2b2lkIGZyZWVfcGFyYW1fdGFyZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY1OS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjY2MDpzdGF0aWMgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZV9leHQgPSB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NjEtXFx0Lm5hbWUgPSBcXFwibmV0Y29uX2V4dFxcXCIsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY2OC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjY2OTpzdGF0aWMgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZSA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY3MC1cXHQubmFtZSA9IFxcXCJuZXRjb25cXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozNzoyOS45NzA3Nzk4NjRaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5MjM2NTU5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0Y29uc29sZSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBuZXRjb25zb2xlIGZ1bmN0aW9ucyDigJMgc3BlY2lmaWNhbGx5IGBuZXRjb25zb2xlX3dyaXRlX2V4dGAgYW5kIGBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljYC4gTXkgZmlyc3QgdGhvdWdodCBpcywgaGFuZyBvbiwgaXNuJ3QgdGhlcmUgYSBjb21tb24gZnVuY3Rpb24gaGVyZSwgYSBnZW5lcmFsIGVudHJ5IHBvaW50LCB3aGljaCBJIHJlY2FsbCBhcyBgbmV0Y29uc29sZV93cml0ZWA/IExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0LiBZZXMsIGl0IGxvb2tzIGxpa2UgYG5ldGNvbnNvbGVfd3JpdGVgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uLlxuXG5Ob3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBpZiBgbmV0Y29uc29sZV93cml0ZWAgaXMgc3RhdGljLiBBbHJpZ2h0LCB5ZXAsIGl0J3MgbWFya2VkIGFzIGBzdGF0aWNgLiBSaWdodCwgdGhlIGluc3RydWN0aW9ucyBhcmUgZ3VpZGluZyB1cyBoZXJlOiBcIlByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy5cIiBIbW0sIHdlbGwsIHNpbmNlIHRoZXNlIHNlZW0gdG8gYmUgc3RhdGljIGZ1bmN0aW9ucywgbGV0J3MgZXhwbG9yZSBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGF2YWlsYWJsZS5cblxuV2UgYXJlIGZvcmNlZCB0byBlbnVtZXJhdGUgc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGVyZSBhcmUgbm8gbm9uLXN0YXRpYyBhbHRlcm5hdGl2ZXMuXG5cbkxldCBtZSB0YWtlIGEgbG9vayBhdCBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYCBhbmQgc2VlIGlmIGFueSBhcmUgZXhwb3NlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEyMDYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mzc6MzMuODYzMTQ4NTA1WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDMwNzU1NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozNzozMy45MDc0NjE1MDFaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyOTk5MzE3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQ29kZSBJbnNwZWN0aW9uKipcblxuQWxyaWdodCwgdGhlIGluaXRpYWwgcHJvbXB0IG1lbnRpb25zIFwidm9pZFwiIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGhlcmUuIEknbSB0aGlua2luZywgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byByZXR1cm4gdHlwZXMsIHNwZWNpZmljYWxseSB0aG9zZSB0aGF0IGluZGljYXRlIHRoZSBmdW5jdGlvbiBkb2Vzbid0IHJldHVybiBhbnkgdmFsdWUuIE15IGluaXRpYWwgc2NhbiB3aWxsIGJlIHRvIGV4YW1pbmUgdGhlIGNvZGViYXNlIGZvciBpbnN0YW5jZXMgd2hlcmUgdGhpcyBpcyBiZWluZyBoYW5kbGVkIGFuZCBsb29rIGZvciBwb3RlbnRpYWwgZXJyb3JzIG9yIHVuZGVmaW5lZCBiZWhhdmlvcnMuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHdoZXJlIGB2b2lkYCBvciBhIHNpbWlsYXIgcmV0dXJuIHR5cGUgKHBlcmhhcHMgYSBjdXN0b20gdHlwZSB0aGF0IGVmZmVjdGl2ZWx5IGFjdHMgYXMgYSBcIm5vIHJldHVyblwiKSBpcyBiZWluZyB1c2VkLiBGcm9tIHRoZXJlLCBJJ2xsIGFzc2VzcyBpdHMgdXNhZ2UuIEknbGwgbmVlZCB0byBsb29rIGF0IGJvdGggdGhlIGZ1bmN0aW9uIGRlZmluaXRpb25zICphbmQqIHRoZSBmdW5jdGlvbiBjYWxscy4gSSdsbCBiZSBwYXJ0aWN1bGFybHkgdmlnaWxhbnQgZm9yIHBsYWNlcyB3aGVyZSBhIGZ1bmN0aW9uJ3MgYHZvaWRgIHJldHVybiBtaWdodCBiZSBtaXNpbnRlcnByZXRlZCBvciBtaXN1c2VkLCBzdWNoIGFzIHRyeWluZyB0byBhc3NpZ24gaXRzIHJlc3VsdCB0byBhIHZhcmlhYmxlLCBvciB3aGVyZSBlcnJvciBoYW5kbGluZyBtaWdodCBiZSBpbmFwcHJvcHJpYXRlbHkgYXBwbGllZCBvciBtaXNzaW5nLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZXhjZXB0aW9ucywgbWVtb3J5IGxlYWtzLCBhbmQgYW55IHBsYWNlIHdoZXJlIHRoZSBgdm9pZGAgZGVzaWduYXRpb24gaXMgYmVpbmcgbWlzaGFuZGxlZC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgKmNvbmNlcHQqIG9mIFwibm8gcmV0dXJuXCIgYW5kIGhvdyB0aGF0J3MgYmVpbmcgaW1wbGVtZW50ZWQgYW5kIHRyZWF0ZWQgd2l0aGluIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTU5MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM3OjM3LjQzNzQ1NzMxMloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0ODE4NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfMC05XSsgXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDU3NiBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTU2PU1PRFVMRV9JTVBPUlRfTlMoXFxcIk5FVERFVl9JTlRFUk5BTFxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTc5LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4MDpzdGF0aWMgY2hhciBjb25maWdbTUFYX1BBUkFNX0xFTkdUSF07XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgxLW1vZHVsZV9wYXJhbV9zdHJpbmcobmV0Y29uc29sZSwgY29uZmlnLCBNQVhfUEFSQU1fTEVOR1RILCAwKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9ODI9TU9EVUxFX1BBUk1fREVTQyhuZXRjb25zb2xlLCBcXFwiIG5ldGNvbnNvbGU9W3NyYy1wb3J0XUBbc3JjLWlwXS9bZGV2XSxbdGd0LXBvcnRdQFxcdTAwM2N0Z3QtaXBcXHUwMDNlL1t0Z3QtbWFjYWRkcl1cXFwiKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg0OnN0YXRpYyBib29sIG9vcHNfb25seTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODUtbW9kdWxlX3BhcmFtKG9vcHNfb25seSwgYm9vbCwgMDYwMCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTg2PU1PRFVMRV9QQVJNX0RFU0Mob29wc19vbmx5LCBcXFwiT25seSBsb2cgb29wcyBtZXNzYWdlc1xcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkwLSNpZm5kZWZcXHRNT0RVTEVcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTE6c3RhdGljIGludCBfX2luaXQgb3B0aW9uX3NldHVwKGNoYXIgKm9wdClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTIte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTk2PV9fc2V0dXAoXFxcIm5ldGNvbnNvbGU9XFxcIiwgb3B0aW9uX3NldHVwKTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05OS0vKiBMaW5rZWQgbGlzdCBvZiBhbGwgY29uZmlndXJlZCB0YXJnZXRzICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwMDpzdGF0aWMgTElTVF9IRUFEKHRhcmdldF9saXN0KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTAxLS8qIHRhcmdldF9jbGVhbnVwX2xpc3QgaXMgdXNlZCB0byB0cmFjayB0YXJnZXRzIHRoYXQgbmVlZCB0byBiZSBjbGVhbmVkIG91dHNpZGVcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDQtICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwNTpzdGF0aWMgTElTVF9IRUFEKHRhcmdldF9jbGVhbnVwX2xpc3QpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDYtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNy0vKiBUaGlzIG5lZWRzIHRvIGJlIGEgc3BpbmxvY2sgYmVjYXVzZSB3cml0ZV9tc2coKSBjYW5ub3Qgc2xlZXAgKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTA4OnN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGFyZ2V0X2xpc3RfbG9jayk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwOS0vKiBUaGlzIG5lZWRzIHRvIGJlIGEgbXV0ZXggYmVjYXVzZSBuZXRwb2xsX2NsZWFudXAgbWlnaHQgc2xlZXAgKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTEwOnN0YXRpYyBERUZJTkVfTVVURVgodGFyZ2V0X2NsZWFudXBfbGlzdF9sb2NrKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTExLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMTI6c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZXRjb25zb2xlX3dxO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTMtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE3LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMTg6c3RhdGljIHN0cnVjdCBjb25zb2xlIG5ldGNvbnNvbGVfZXh0LCBuZXRjb25zb2xlO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTktXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyMDpzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRfc3RhdHMgIHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIxLVxcdHU2NF9zdGF0c190IHhtaXRfZHJvcF9jb3VudDtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjUtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyNjplbnVtIGNvbnNvbGVfdHlwZSB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyNy1cXHRDT05TX0JBU0lDID0gQklUKDApLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNC0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTM1OmVudW0gc3lzZGF0YV9mZWF0dXJlIHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM2LVxcdC8qIFBvcHVsYXRlIHRoZSBDUFUgdGhhdCBzZW5kcyB0aGUgbWVzc2FnZSAqL1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0Ny1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTQ4OmVudW0gdGFyZ2V0X3N0YXRlIHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQ5LVxcdFNUQVRFX0RJU0FCTEVELFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5NC0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTk1OnN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5Ni1cXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0bGlzdDtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjctXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyODpzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSBuZXRjb25zb2xlX3N1YnN5cztcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjI5OnN0YXRpYyBERUZJTkVfTVVURVgoZHluYW1pY19uZXRjb25zb2xlX211dGV4KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjMwLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMzE6c3RhdGljIGludCBfX2luaXQgZHluYW1pY19uZXRjb25zb2xlX2luaXQodm9pZClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjMyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzctXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIzODpzdGF0aWMgdm9pZCBfX2V4aXQgZHluYW1pY19uZXRjb25zb2xlX2V4aXQodm9pZClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjM5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDctICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0ODpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9nZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1NDpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9wdXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjU1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTktXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2MDpzdGF0aWMgdm9pZCBkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jayh2b2lkKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjEte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjY1OnN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2sodm9pZClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzEtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI3MjpzdGF0aWMgaW50IF9faW5pdCBkeW5hbWljX25ldGNvbnNvbGVfaW5pdCh2b2lkKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzMte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3Ni1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjc3OnN0YXRpYyB2b2lkIF9fZXhpdCBkeW5hbWljX25ldGNvbnNvbGVfZXhpdCh2b2lkKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzgte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI4NC0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjg1OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X2dldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yODYte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI4OC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjg5OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X3B1dChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yOTAte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI5Mi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjkzOnN0YXRpYyB2b2lkIHBvcHVsYXRlX2NvbmZpZ2ZzX2l0ZW0oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjk0LVxcdFxcdFxcdFxcdCAgIGludCBjbWRsaW5lX2NvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI5Ny1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjk4OnN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKHZvaWQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI5OS17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzAxLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozMDI6c3RhdGljIHZvaWQgZHluYW1pY19uZXRjb25zb2xlX211dGV4X3VubG9jayh2b2lkKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMDMte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMwOC0vKiBDaGVjayBpZiB0aGUgdGFyZ2V0IHdhcyBib3VuZCBieSBtYWMgYWRkcmVzcy4gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzA5OnN0YXRpYyBib29sIGJvdW5kX2J5X21hYyhzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMTAte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMxMy1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzE0OnN0YXRpYyB2b2lkIG5ldGNvbnNfcmVsZWFzZV9kZXYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzE1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMjAtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjMyMTpzdGF0aWMgdm9pZCByZWZpbGxfc2ticyhzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMjIte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMzNC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzM1OnN0YXRpYyB2b2lkIHJlZmlsbF9za2JzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMzNi17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzQ2LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozNDc6c3RhdGljIHZvaWQgbmV0Y29uc29sZV9za2JfcG9vbF9pbml0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM0OC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzUxLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozNTI6c3RhdGljIHZvaWQgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zNTMte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM1Ny1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzU4OnN0YXRpYyB2b2lkIG5ldGNvbnNfd2FpdF9jYXJyaWVyKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM1OS17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzc4LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozNzk6c3RhdGljIGNoYXIgKm5ldGNvbnNfZWdyZXNzX2RldihzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnN6KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zODAte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM5MC0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzkxOnN0YXRpYyBpbnQgbmV0Y29uc190YWtlX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzkyLVxcdFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDM0LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo0MzU6c3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00MzYtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00NjMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQ2NDpzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00NjUte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU1NS0vKiBBdHRlbXB0cyB0byByZXN1bWUgbG9nZ2luZyB0byBhIGRlYWN0aXZhdGVkIHRhcmdldC4gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTU2OnN0YXRpYyB2b2lkIHJlc3VtZV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTU3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NzYtLyogQ2hlY2tzIGlmIGEgZGVhY3RpdmF0ZWQgdGFyZ2V0IG1hdGNoZXMgYSBkZXZpY2UuICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjU3NzpzdGF0aWMgYm9vbCBkZWFjdGl2YXRlZF90YXJnZXRfbWF0Y2goc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTc4LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTg4LS8qIFByb2Nlc3Mgd29yayBzY2hlZHVsZWQgZm9yIHRhcmdldCByZXN1bWUuICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjU4OTpzdGF0aWMgdm9pZCBwcm9jZXNzX3Jlc3VtZV90YXJnZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01OTAte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTY0OS0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NjUwOnN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX2FuZF9pbml0KHZvaWQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTY1MS17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjc5LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo2ODA6c3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcm9jZXNzX2NsZWFudXBzX2NvcmUodm9pZClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjgxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03MDQtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjcwNTpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03MDYte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTcyNi0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzI3OnN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IGluZXRfYWRkciAqYWRkcilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzI4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03ODAtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjc4MTpzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICp0b190YXJnZXQoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03ODIte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTc5NC0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Nzk1OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJvY2Vzc19jbGVhbnVwcyh2b2lkKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03OTYte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgwNS0vKiBHZXQgcmlkIG9mIHBvc3NpYmxlIHRyYWlsaW5nIG5ld2xpbmUsIHJldHVybmluZyB0aGUgbmV3IGxlbmd0aCAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4MDY6c3RhdGljIHZvaWQgdHJpbV9uZXdsaW5lKGNoYXIgKnMsIHNpemVfdCBtYXhsZW4pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgwNy17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODIwLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4MjE6c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04MjIte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgyNS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODI2OnN0YXRpYyBzc2l6ZV90IGV4dGVuZGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgyNy17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODMwLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4MzE6c3RhdGljIHNzaXplX3QgcmVsZWFzZV9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04MzIte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgzNS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODM2OnN0YXRpYyBzc2l6ZV90IGRldl9uYW1lX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgzNy17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODQwLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4NDE6c3RhdGljIHNzaXplX3QgbG9jYWxfcG9ydF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04NDIte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg0NS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODQ2OnN0YXRpYyBzc2l6ZV90IHJlbW90ZV9wb3J0X3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg0Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODUwLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4NTE6c3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODUyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04NjAtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg2MTpzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODYyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04NzAtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg3MTpzdGF0aWMgc3NpemVfdCBsb2NhbF9tYWNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODcyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04NzgtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg3OTpzdGF0aWMgc3NpemVfdCByZW1vdGVfbWFjX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg4MC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODgzLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4ODQ6c3RhdGljIHNzaXplX3QgdHJhbnNtaXRfZXJyb3JzX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg4NS17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODk5LS8qIGNvbmZpZ2ZzIGhlbHBlciB0byBkaXNwbGF5IGlmIGNwdV9uciBzeXNkYXRhIGZlYXR1cmUgaXMgZW5hYmxlZCAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5MDA6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9jcHVfbnJfZW5hYmxlZF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05MDEte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkxMi0vKiBjb25maWdmcyBoZWxwZXIgdG8gZGlzcGxheSBpZiB0YXNrbmFtZSBzeXNkYXRhIGZlYXR1cmUgaXMgZW5hYmxlZCAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5MTM6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV90YXNrbmFtZV9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05MTQtXFx0XFx0XFx0XFx0XFx0ICAgICBjaGFyICpidWYpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTI1LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5MjY6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9yZWxlYXNlX2VuYWJsZWRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkyNy1cXHRcXHRcXHRcXHRcXHQgICAgY2hhciAqYnVmKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk0MS0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTQyOnN0YXRpYyB2b2lkIHVucmVnaXN0ZXJfbmV0Y29uc19jb25zb2xlcyh2b2lkKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05NDMte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk2NS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTY2OnN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfbXNnaWRfZW5hYmxlZF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTY3LVxcdFxcdFxcdFxcdFxcdCAgY2hhciAqYnVmKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk4NS0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTg2OnN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05ODctXFx0XFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA4My1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTA4NDpzdGF0aWMgc3NpemVfdCByZWxlYXNlX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDg1LVxcdFxcdFxcdCAgICAgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExMTAtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExMTE6c3RhdGljIHNzaXplX3QgZXh0ZW5kZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExMTItXFx0XFx0c2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExMzYtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExMzc6c3RhdGljIHNzaXplX3QgZGV2X25hbWVfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExMzgtXFx0XFx0c2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExNjMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExNjQ6c3RhdGljIHNzaXplX3QgbG9jYWxfcG9ydF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE2NS1cXHRcXHRzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE4NS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTE4NjpzdGF0aWMgc3NpemVfdCByZW1vdGVfcG9ydF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExODctXFx0XFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIwNy1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTIwODpzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIwOS1cXHRcXHRzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIyOS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTIzMDpzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyMzEtXFx0ICAgICAgIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjU2LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMjU3OnN0YXRpYyBzaXplX3QgY291bnRfdXNlcmRhdGFfZW50cmllcyhzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjU4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjYxLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMjYyOnN0YXRpYyBzc2l6ZV90IHJlbW90ZV9tYWNfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyNjMtXFx0XFx0c2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyODctXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyODg6c3RydWN0IHVzZXJkYXR1bSB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyODktXFx0c3RydWN0IGNvbmZpZ19pdGVtIGl0ZW07XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI5Mi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTI5MzpzdGF0aWMgc3RydWN0IHVzZXJkYXR1bSAqdG9fdXNlcmRhdHVtKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI5NC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI5Ny1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTI5ODpzdHJ1Y3QgdXNlcmRhdGEge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjk5LVxcdHN0cnVjdCBjb25maWdfZ3JvdXAgZ3JvdXA7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTMwMS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTMwMjpzdGF0aWMgc3RydWN0IHVzZXJkYXRhICp0b191c2VyZGF0YShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzMDMte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzMDYtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzMDc6c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqdXNlcmRhdGFfdG9fdGFyZ2V0KHN0cnVjdCB1c2VyZGF0YSAqdWQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzMDgte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzMTQtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzMTU6c3RhdGljIHNzaXplX3QgdXNlcmRhdHVtX3ZhbHVlX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzMTYte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzMjMtICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzMjQ6c3RhdGljIGludCBjYWxjX3VzZXJkYXRhX2xlbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzI1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzQyLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMzQzOnN0YXRpYyBpbnQgdXBkYXRlX3VzZXJkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNDQte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzOTItXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzOTM6c3RhdGljIHNzaXplX3QgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzk0LVxcdFxcdFxcdFxcdCAgICAgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0MzEtICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE0MzI6c3RhdGljIHZvaWQgZGlzYWJsZV9zeXNkYXRhX2ZlYXR1cmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQzMy1cXHRcXHRcXHRcXHQgICAgZW51bSBzeXNkYXRhX2ZlYXR1cmUgZmVhdHVyZSlcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDM4LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDM5OnN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfbXNnaWRfZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0NDAtXFx0XFx0XFx0XFx0XFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQ2Ny1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTQ2ODpzdGF0aWMgc3NpemVfdCBzeXNkYXRhX3JlbGVhc2VfZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0NjktXFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDk2LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDk3OnN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfdGFza25hbWVfZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0OTgtXFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTUyNi0vKiBjb25maWdmcyBoZWxwZXIgdG8gc3lzZGF0YSBjcHVfbnIgZmVhdHVyZSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTI3OnN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfY3B1X25yX2VuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTI4LVxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNTY0PUNPTkZJR0ZTX0FUVFIoc3lzZGF0YV8sIG1zZ2lkX2VuYWJsZWQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTY1LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTY2OnN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICp1c2VyZGF0dW1fYXR0cnNbXSA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU2Ny1cXHRcXHUwMDI2dXNlcmRhdHVtX2F0dHJfdmFsdWUsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU3MC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU3MTpzdGF0aWMgdm9pZCB1c2VyZGF0dW1fcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1NzIte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1NzUtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1NzY6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgdXNlcmRhdHVtX29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU3Ny1cXHQucmVsZWFzZSA9IHVzZXJkYXR1bV9yZWxlYXNlLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1NzktXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1ODA6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIHVzZXJkYXR1bV90eXBlID0ge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTgxLVxcdC5jdF9pdGVtX29wc1xcdD0gXFx1MDAyNnVzZXJkYXR1bV9vcHMsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU4NS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU4NjpzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICp1c2VyZGF0dW1fbWFrZV9pdGVtKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTg3LVxcdFxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBjaGFyICpuYW1lKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2MDgtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2MDk6c3RhdGljIHZvaWQgdXNlcmRhdHVtX2Ryb3Aoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsIHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTYxMC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTYyMi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTYyMzpzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZSAqdXNlcmRhdGFfYXR0cnNbXSA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTYyNC1cXHRcXHUwMDI2c3lzZGF0YV9hdHRyX2NwdV9ucl9lbmFibGVkLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2MzAtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2MzE6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25zIHVzZXJkYXRhX29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTYzMi1cXHQubWFrZV9pdGVtXFx0XFx0PSB1c2VyZGF0dW1fbWFrZV9pdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2MzUtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2MzY6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIHVzZXJkYXRhX3R5cGUgPSB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2MzctXFx0LmN0X2l0ZW1fb3BzXFx0PSBcXHUwMDI2dXNlcmRhdHVtX29wcyxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNjUzPUNPTkZJR0ZTX0FUVFJfUk8oLCB0cmFuc21pdF9lcnJvcnMpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjU0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjU1OnN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICpuZXRjb25zb2xlX3RhcmdldF9hdHRyc1tdID0ge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjU2LVxcdFxcdTAwMjZhdHRyX2VuYWJsZWQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY3My1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY3NDpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY3NS17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY4MS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY4MjpzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2l0ZW1fb3BlcmF0aW9ucyBuZXRjb25zb2xlX3RhcmdldF9pdGVtX29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY4My1cXHQucmVsZWFzZVxcdFxcdD0gbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZSxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjg1LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjg2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBuZXRjb25zb2xlX3RhcmdldF90eXBlID0ge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjg3LVxcdC5jdF9hdHRyc1xcdFxcdD0gbmV0Y29uc29sZV90YXJnZXRfYXR0cnMsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY5MS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY5MjpzdGF0aWMgdm9pZCBpbml0X3RhcmdldF9jb25maWdfZ3JvdXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY5My1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcwMC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTcwMTpzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpmaW5kX2NtZGxpbmVfdGFyZ2V0KGNvbnN0IGNoYXIgKm5hbWUpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3MDIte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3MjEtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3MjI6c3RhdGljIHN0cnVjdCBjb25maWdfZ3JvdXAgKm1ha2VfbmV0Y29uc29sZV90YXJnZXQoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3MjMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzU1LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzU2OnN0YXRpYyB2b2lkIGRyb3BfbmV0Y29uc29sZV90YXJnZXQoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3NTctXFx0XFx0XFx0XFx0ICAgc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4MDctXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4MDg6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25zIG5ldGNvbnNvbGVfc3Vic3lzX2dyb3VwX29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTgwOS1cXHQubWFrZV9ncm91cFxcdD0gbWFrZV9uZXRjb25zb2xlX3RhcmdldCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODEyLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODEzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBuZXRjb25zb2xlX3N1YnN5c190eXBlID0ge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODE0LVxcdC5jdF9ncm91cF9vcHNcXHQ9IFxcdTAwMjZuZXRjb25zb2xlX3N1YnN5c19ncm91cF9vcHMsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTgxOC0vKiBUaGUgbmV0Y29uc29sZSBjb25maWdmcyBzdWJzeXN0ZW0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTgxOTpzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSBuZXRjb25zb2xlX3N1YnN5cyA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTgyMC1cXHQuc3VfZ3JvdXBcXHQ9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODI3LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODI4OnN0YXRpYyB2b2lkIHBvcHVsYXRlX2NvbmZpZ2ZzX2l0ZW0oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTgyOS1cXHRcXHRcXHRcXHQgICBpbnQgY21kbGluZV9jb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODM3LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODM4OnN0YXRpYyBpbnQgc3lzZGF0YV9hcHBlbmRfY3B1X25yKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBvZmZzZXQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4MzktXFx0XFx0XFx0XFx0IHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODQ1LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODQ2OnN0YXRpYyBpbnQgc3lzZGF0YV9hcHBlbmRfdGFza25hbWUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IG9mZnNldCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg0Ny1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg1My1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTg1NDpzdGF0aWMgaW50IHN5c2RhdGFfYXBwZW5kX3JlbGVhc2Uoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IG9mZnNldClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg1NS17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg2MC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTg2MTpzdGF0aWMgaW50IHN5c2RhdGFfYXBwZW5kX21zZ2lkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBvZmZzZXQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NjIte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NzMtICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4NzQ6c3RhdGljIGludCBwcmVwYXJlX3N5c2RhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg3NS1cXHRcXHRcXHQgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg5OS0vKiBIYW5kbGUgbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIG5vdGlmaWNhdGlvbnMgKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTkwMDpzdGF0aWMgaW50IG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTkwMS1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk3Ny1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTk3ODpzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG5ldGNvbnNvbGVfbmV0ZGV2X25vdGlmaWVyID0ge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTc5LVxcdC5ub3RpZmllcl9jYWxsICA9IG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5OTMtICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE5OTQ6c3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjb25zX3NrYl9wb3Aoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IGxlbilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk5NS17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjAxNi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjAxNzpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZpbmRfc2tiKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBsZW4sXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwMTgtXFx0XFx0XFx0XFx0aW50IHJlc2VydmUpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjA0My1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjA0NDpzdGF0aWMgdm9pZCBuZXRwb2xsX3VkcF9jaGVja3N1bShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDQ1LVxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwNjgtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIwNjk6c3RhdGljIHZvaWQgcHVzaF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjA3MC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjA4Ni1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjA4NzpzdGF0aWMgdm9pZCBwdXNoX2V0aChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDg4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTAxLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTAyOnN0YXRpYyB2b2lkIHB1c2hfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTAzLVxcdFxcdCAgICAgIGludCBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjEyOS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjEzMDpzdGF0aWMgdm9pZCBwdXNoX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjEzMS1cXHRcXHQgICAgICBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNTMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxNTQ6c3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE1NS1cXHRcXHRcXHQgICAgaW50IGxlbilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjAwLSAqL1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozNzozNy40ODQ5NDUyMzhaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM5MjYwNzY3NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSWRlbnRpZnlpbmcgS2V5IFN5bWJvbHMgYW5kIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIG9yIHN5bWJvbHMgdGhhdCBhcmUgcmVsZXZhbnQsIHBhcnRpY3VsYXJseSB0aG9zZSB0aGF0IGFyZSBub3QgaW5saW5lZCwgYW5kIHRob3NlIHRoYXQgYXJlIG1vZGlmaWVkIGJ5IHRoZSBwYXRjaC4gSSBzZWUgdGhhdCBgbmV0cG9sbF9zZW5kX3VkcGAgaXMgc3RhdGljLCB3aGljaCBpbml0aWFsbHkgZ2l2ZXMgbWUgcGF1c2UsIGJ1dCBpdCdzIGNsZWFybHkgbW9kaWZpZWQgaW4gdGhlIGRpZmYuICBgbmV0Y29uc29sZV9uZXRkZXZfZXZlbnRgIGlzIGFsc28gc3RhdGljLCBidXQgaXQncyBhIG5vdGlmaWVyIGNhbGxiYWNrIHNvIGl0IGlzIHVubGlrZWx5IHRvIGJlIGlubGluZWQgYW5kIGlzIGEgcG90ZW50aWFsIGVudHJ5IHBvaW50LiBUaGUgb3RoZXIgZnVuY3Rpb25zIEkgaWRlbnRpZmllZCAoYG5ldGNvbnNvbGVfd3JpdGVgLCBgbmV0Y29uc29sZV93cml0ZV9leHRgLCBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2AsIGBpbml0X25ldGNvbnNvbGVgLCBgZHluYW1pY19uZXRjb25zb2xlX2luaXRgKSBhcmUgZWl0aGVyIHN0YXRpYyBvciBpbnRlcm5hbCBoZWxwZXJzIGFuZCB1bmxpa2VseSB0byBiZSBnb29kIHRhcmdldHMuXG5cblRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IGd1aWRlIG1lIHRvd2FyZHMgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0IGhlbHBzIHJlZmluZSBteSBmb2N1cy4gTG9va2luZyBhdCB0aGUgY2FsbCBjaGFpbnMsIGBuZXRjb25zb2xlX3dyaXRlX2V4dGAgYW5kIGBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljYCBhcmUgY29uc29sZSBjYWxsYmFja3MuICBUaGV5J3JlICpub3QqIGlubGluZWQgYW5kIGFyZSB3b3J0aCBleHBsb3JpbmcuIFNpbWlsYXJseSwgYGVuYWJsZWRfc3RvcmVgLCBgbG9jYWxfaXBfc3RvcmVgLCBhbmQgYHJlbW90ZV9pcF9zdG9yZWAgYXJlIGNvbmZpZ2ZzIGNhbGxiYWNrcywgYW5kIHRoZXJlZm9yZSAqbm90KiBpbmxpbmVkLCBhbmQgYWxzbyByZXByZXNlbnQgZ29vZCB0YXJnZXQgZW50cnlwb2ludHMuXG5cbkhvd2V2ZXIsIEkgbm90ZSB0aGF0IGBuZXRjb25zb2xlX3dyaXRlX2V4dGAgYW5kIGBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljYCBkb24ndCBkaXJlY3RseSBjYWxsIHRoZSBjb2RlIEknbSBpbnRlcmVzdGVkIGluLiBUaGV5IGNhbGwgaW50byBhIGRlZXBlciBjaGFpbjogYHNlbmRfZXh0X21zZ191ZHBgIC1cdTAwM2UgYHNlbmRfbXNnX3VkcGAgLVx1MDAzZSBgc2VuZF91ZHBgIC1cdTAwM2UgYG5ldHBvbGxfc2VuZF91ZHBgLiAgKkNydWNpYWxseSosIGBuZXRwb2xsX3NlbmRfdWRwYCBpcyB3aGVyZSB0aGUgY29yZSBtb2RpZmljYXRpb24gbGllcy4gVGhpcyBtYWtlcyBgbmV0cG9sbF9zZW5kX3VkcGAgYSAqdmVyeSogZ29vZCBjYW5kaWRhdGUsIGRlc3BpdGUgYmVpbmcgc3RhdGljLiBUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgZmFtaWx5IGNoZWNrIHRoZXJlIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGNvZGUgc2hvdWxkIGJlIG1vcmUgYWN0aXZlIG5vdy4gIEkgc2hvdWxkIGFsc28gaW5jbHVkZSBgbmV0Y29uc19uZXRwb2xsX3NldHVwYCBiZWNhdXNlIGl0IGNvbnRhaW5zIHNpbWlsYXIgZmFtaWx5IGNoZWNrcyBpbiB0aGUgcGF0Y2gsIGFuZCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAgYXMgaXQgaXMgY2FsbGVkIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24uIFRoZSBjb25maWdmcyBjYWxsYmFja3MgYXJlIGtleS4gYGxvY2FsX2lwX3N0b3JlYCBhbmQgYHJlbW90ZV9pcF9zdG9yZWAgYXJlIGltcG9ydGFudC4gVGhlIHBhdGNoZXMgYWxzbyBjb250YWluIG1vZGlmaWNhdGlvbnMgdG8gYG5ldHBvbGxfcGFyc2VfaXBfYWRkcmAuIGBlbmFibGVkX3N0b3JlYCBzaG91bGQgdHJpZ2dlciBgbmV0Y29uc19uZXRwb2xsX3NldHVwYC5cblxuU28gbXkgaW5pdGlhbCBsaXN0IG9mIGtleSBzeW1ib2xzIHRvIGludmVzdGlnYXRlIGlzOlxuXG4qICAgYGxvY2FsX2lwX3N0b3JlYFxuKiAgIGByZW1vdGVfaXBfc3RvcmVgXG4qICAgYGVuYWJsZWRfc3RvcmVgXG4qICAgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGBcbiogICBgbmV0cG9sbF9zZW5kX3VkcGBcbiogICBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWBcblxuTmV4dCwgSSBuZWVkIHRvIGNvbnNpZGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBJJ20gZ29pbmcgdG8gd2FudCB0byBmdXp6IG1vZHVsZSBwYXJhbWV0ZXJzLCBzbyBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAgZHVyaW5nIG1vZHVsZSBpbml0IHdpbGwgYmUgZ29vZC4gYGxvY2FsX2lwX3N0b3JlYCBhbmQgYHJlbW90ZV9pcF9zdG9yZWAgbG9vayBpZGVhbCBmb3IgY29uZmlnZnMgZnV6emluZy4gYGVuYWJsZWRfc3RvcmVgIHdpbGwgdHJpZ2dlciBgbmV0Y29uc19uZXRwb2xsX3NldHVwYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQgZm9yIGNvbXByZWhlbnNpdmUgdGVzdGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX05FVENPTlNPTEVgIGlzIGVuYWJsZWQsIGFuZCBgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ2AgdG9vLiBgQ09ORklHX0lQVjZgIGlzIHByb2JhYmx5IG5lZWRlZCB0byBleGVyY2lzZSBJUHY2IHBhdGhzLiBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgQ09ORklHX0NPTkZJR0ZTX0ZTYCBpcyBlbmFibGVkIGFzIHdlbGwgZm9yIGR5bmFtaWMgdXNlLiAgSSBzaG91bGQgZG91YmxlIGNoZWNrIGBORVRDT05TT0xFX0RZTkFNSUNgIGluIGBkcml2ZXJzL25ldC9LY29uZmlnYCB0byBjb25maXJtIHRoZXNlIGRlcGVuZGVuY2llcy4gVGhhdCBtZWFucyBteSBmaW5hbCBjb25maWd1cmF0aW9uIGxpc3QgaXM6XG5cbiogICBgTkVUQ09OU09MRWBcbiogICBgTkVUQ09OU09MRV9EWU5BTUlDYFxuKiAgIGBJUFY2YFxuKiAgIGBDT05GSUdGU19GU2BcblxuVGhpcyBnaXZlcyBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBmdXp6aW5nIGFuZCB2ZXJpZnlpbmcgdGhlIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDY2MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mzc6NTEuNDExMDI0MjA4WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM5MTEyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0zMjc9Y29uZmlnIE5FVENPTlNPTEVcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzMzLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzM0OmNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzNS1cXHRib29sIFxcXCJEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM3OjUxLjQ1ODQyMzkyM1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTQ1Njg5NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIG15IG93biB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipDaGVja2luZyBgQ09ORklHX0lQVjZgJ3MgQ29uZmlndXJhdGlvbiBTdGF0dXMqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIGludG8gdGhpcyBmdXJ0aGVyLCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgb2Ygb25lIGNydWNpYWwgdGhpbmc6IFdoYXQncyB0aGUgZGVhbCB3aXRoIGBDT05GSUdfSVBWNmA/IElzIGl0IGEgc2ltcGxlIGJvb2xlYW4sIGEgdHJ1ZS9mYWxzZSBmbGFnPyBPciBpcyBpdCBhIG1vcmUgY29tcGxleCB0cmlzdGF0ZSB2YXJpYWJsZSwgY2FwYWJsZSBvZiBiZWluZyBzZXQgdG8gXCJ5ZXMsXCIgXCJubyxcIiBvciBcIm1vZHVsZVwiPyBUaGF0IHNlZW1pbmdseSBzbWFsbCBkaXN0aW5jdGlvbiB3aWxsIGRpY3RhdGUgYSBsb3Qgb2YgaG93IEkgYXBwcm9hY2ggdGhpcyBwYXJ0aWN1bGFyIGFzcGVjdCBvZiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8ga25vdyBpdHMgY29uZmlndXJhdGlvbiB0eXBlIHRvIGVmZmVjdGl2ZWx5IHJlYXNvbiBhYm91dCBpdHMgaW1wbGljYXRpb25zIGRvd24gdGhlIGxpbmUuIEl0J3MgYSBmdW5kYW1lbnRhbCBxdWVzdGlvbiB0aGF0IGltcGFjdHMgbXkgbmV4dCBzdGVwcy4gR290dGEgZ2V0IHRoaXMgbmFpbGVkIGRvd24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyODI3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mzc6NTQuNjA0MTE2ODU0WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDg3MDc2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBWNlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L0tjb25maWctNS1cXG5uZXQvaXB2Ni9LY29uZmlnOjY6bWVudWNvbmZpZyBJUFY2XFxubmV0L2lwdjYvS2NvbmZpZy03LVxcdGJvb2wgXFxcIlRoZSBJUHY2IHByb3RvY29sXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0xOT1pZiBJUFY2XFxubmV0L2lwdjYvS2NvbmZpZy0yMC1cXG5uZXQvaXB2Ni9LY29uZmlnOjIxOmNvbmZpZyBJUFY2X1JPVVRFUl9QUkVGXFxubmV0L2lwdjYvS2NvbmZpZy0yMi1cXHRib29sIFxcXCJJUHY2OiBSb3V0ZXIgUHJlZmVyZW5jZSAoUkZDIDQxOTEpIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMwLVxcbm5ldC9pcHY2L0tjb25maWc6MzE6Y29uZmlnIElQVjZfUk9VVEVfSU5GT1xcbm5ldC9pcHY2L0tjb25maWctMzItXFx0Ym9vbCBcXFwiSVB2NjogUm91dGUgSW5mb3JtYXRpb24gKFJGQyA0MTkxKSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zOC1cXG5uZXQvaXB2Ni9LY29uZmlnOjM5OmNvbmZpZyBJUFY2X09QVElNSVNUSUNfREFEXFxubmV0L2lwdjYvS2NvbmZpZy00MC1cXHRib29sIFxcXCJJUHY2OiBFbmFibGUgUkZDIDQ0MjkgT3B0aW1pc3RpYyBEQURcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTEwMj1jb25maWcgSU5FVDZfSVBDT01QXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTExMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjExMjpjb25maWcgSVBWNl9NSVA2XFxubmV0L2lwdjYvS2NvbmZpZy0xMTMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IE1vYmlsaXR5XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xMTktXFxubmV0L2lwdjYvS2NvbmZpZzoxMjA6Y29uZmlnIElQVjZfSUxBXFxubmV0L2lwdjYvS2NvbmZpZy0xMjEtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElkZW50aWZpZXIgTG9jYXRvciBBZGRyZXNzaW5nIChJTEEpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0xNDY9Y29uZmlnIElORVQ2X1RVTk5FTFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xNDktXFxubmV0L2lwdjYvS2NvbmZpZzoxNTA6Y29uZmlnIElQVjZfVlRJXFxubmV0L2lwdjYvS2NvbmZpZy0xNTEtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgKHNlY3VyZSkgSVB2NjogdHVubmVsaW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xNjEtXFxubmV0L2lwdjYvS2NvbmZpZzoxNjI6Y29uZmlnIElQVjZfU0lUXFxubmV0L2lwdjYvS2NvbmZpZy0xNjMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElQdjYtaW4tSVB2NCB0dW5uZWwgKFNJVCBkcml2ZXIpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xNzYtXFxubmV0L2lwdjYvS2NvbmZpZzoxNzc6Y29uZmlnIElQVjZfU0lUXzZSRFxcbm5ldC9pcHY2L0tjb25maWctMTc4LVxcdGJvb2wgXFxcIklQdjY6IElQdjYgUmFwaWQgRGVwbG95bWVudCAoNlJEKVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTk1LVxcbm5ldC9pcHY2L0tjb25maWc6MTk2OmNvbmZpZyBJUFY2X05ESVNDX05PREVUWVBFXFxubmV0L2lwdjYvS2NvbmZpZy0xOTctXFx0Ym9vbFxcbm5ldC9pcHY2L0tjb25maWctMTk4LVxcbm5ldC9pcHY2L0tjb25maWc6MTk5OmNvbmZpZyBJUFY2X1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMjAwLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBJUC1pbi1JUHY2IHR1bm5lbCAoUkZDMjQ3MylcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cXG5uZXQvaXB2Ni9LY29uZmlnOjIxMDpjb25maWcgSVBWNl9HUkVcXG5uZXQvaXB2Ni9LY29uZmlnLTIxMS1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogR1JFIHR1bm5lbFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjI3LVxcbm5ldC9pcHY2L0tjb25maWc6MjI4OmNvbmZpZyBJUFY2X0ZPVVxcbm5ldC9pcHY2L0tjb25maWctMjI5LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIzMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjIzMjpjb25maWcgSVBWNl9GT1VfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yMzMtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjM2LVxcbm5ldC9pcHY2L0tjb25maWc6MjM3OmNvbmZpZyBJUFY2X01VTFRJUExFX1RBQkxFU1xcbm5ldC9pcHY2L0tjb25maWctMjM4LVxcdGJvb2wgXFxcIklQdjY6IE11bHRpcGxlIFJvdXRpbmcgVGFibGVzXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNDItXFxubmV0L2lwdjYvS2NvbmZpZzoyNDM6Y29uZmlnIElQVjZfU1VCVFJFRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTI0NC1cXHRib29sIFxcXCJJUHY2OiBzb3VyY2UgYWRkcmVzcyBiYXNlZCByb3V0aW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNTYtXFxubmV0L2lwdjYvS2NvbmZpZzoyNTc6Y29uZmlnIElQVjZfTVJPVVRFXFxubmV0L2lwdjYvS2NvbmZpZy0yNTgtXFx0Ym9vbCBcXFwiSVB2NjogbXVsdGljYXN0IHJvdXRpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI2NC1cXG5uZXQvaXB2Ni9LY29uZmlnOjI2NTpjb25maWcgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjYvS2NvbmZpZy0yNjYtXFx0Ym9vbCBcXFwiSVB2NjogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNzgtXFxubmV0L2lwdjYvS2NvbmZpZzoyNzk6Y29uZmlnIElQVjZfUElNU01fVjJcXG5uZXQvaXB2Ni9LY29uZmlnLTI4MC1cXHRib29sIFxcXCJJUHY2OiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI4NS1cXG5uZXQvaXB2Ni9LY29uZmlnOjI4Njpjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yODctXFx0Ym9vbCBcXFwiSVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI5OS1cXG5uZXQvaXB2Ni9LY29uZmlnOjMwMDpjb25maWcgSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9LY29uZmlnLTMwMS1cXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSE1BQyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zMTEtXFxubmV0L2lwdjYvS2NvbmZpZzozMTI6Y29uZmlnIElQVjZfU0VHNl9CUEZcXG5uZXQvaXB2Ni9LY29uZmlnLTMxMy1cXHRkZWZfYm9vbCB5XFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMxNi1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxNzpjb25maWcgSVBWNl9SUExfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTMxOC1cXHRib29sIFxcXCJJUHY2OiBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMyNy1cXG5uZXQvaXB2Ni9LY29uZmlnOjMyODpjb25maWcgSVBWNl9JT0FNNl9MV1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMzI5LVxcdGJvb2wgXFxcIklQdjY6IElPQU0gUHJlLWFsbG9jYXRlZCBUcmFjZSBpbnNlcnRpb24gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mzc6NTQuNjQ4OTkyODZaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU0ODA5NDgwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXRjb25zb2xlIE1vZHVsZSdzIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgSVBWNmAgaXMganVzdCBhIGJvb2xlYW4sIGFuZCBpdCdzIHNldCBjb3JyZWN0bHkuIFRoYXQncyBnb29kLCBvbmUgbGVzcyB0aGluZyB0byB3b3JyeSBhYm91dC4gTm93LCBsZXQncyB0YWtlIHN0b2NrIG9mIHRoZSBrZXkgc3ltYm9scyB3ZSdyZSBkZWFsaW5nIHdpdGggaGVyZTogYGxvY2FsX2lwX3N0b3JlYCwgYHJlbW90ZV9pcF9zdG9yZWAsIGBlbmFibGVkX3N0b3JlYCwgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAsIGBuZXRwb2xsX3NlbmRfdWRwYCwgYW5kIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgY29yZSBjb21wb25lbnRzIEkgbmVlZCB0byB1bmRlcnN0YW5kLlxuXG5XYWl0IGEgc2Vjb25k4oCmIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoYXQncyBpbnRlcmVzdGluZy4gSXQncyBjYWxsZWQgZnJvbSBgYWxsb2NfcGFyYW1fdGFyZ2V0YCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgZnJvbSBgaW5pdF9uZXRjb25zb2xlYCwgd2hpY2ggaXMgdGhlIG1vZHVsZSBpbml0aWFsaXphdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGZ1bmN0aW9uIGlzIGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIHRoZSBrZXJuZWwuIFRoZSBzdGF0aWMgZGVjbGFyYXRpb24gaXMgbm90IGlkZWFsLCBkZXBlbmRpbmcgb24gdGhlIHNjb3BlLiBDb3VsZCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAgYmUgcmVhY2hlZCB0aHJvdWdoIGNvbmZpZ2ZzPyBUaGF0J3MgYSBwb3NzaWJpbGl0eSBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgZnVydGhlci4gSWYgc28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcGFyc2VyIGlzIGJlaW5nIGFjY2Vzc2VkLlxuXG5UbyBjbGFyaWZ5IG15IHRob3VnaHQgcHJvY2VzcywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGNhbGxlcnMgb2YgYGFsbG9jX3BhcmFtX3RhcmdldGAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYCBpcyB1c2VkLCBhbmQgZnJvbSB3aGVyZS4gVGhpcyBpcyBhIGNyaXRpY2FsIHBvaW50IHRvIHBpbiBkb3duIHRvIGFzc2VzcyB0aGUgcG90ZW50aWFsIGlzc3Vlcywgb3IgaWYgdGhlIHN5c3RlbSBkZXNpZ24gaXMgc291bmQsIGluIHRoZSBuZXRjb25zb2xlIG1vZHVsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ1NzksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mzc6NTkuMTk3MDkyMDE2WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA1MDM2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19wYXJhbV90YXJnZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNDk4PXN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjU4NS0vKiBBbGxvY2F0ZSBuZXcgdGFyZ2V0IChmcm9tIGJvb3QvbW9kdWxlIHBhcmFtKSBhbmQgc2V0dXAgbmV0cG9sbCBmb3IgaXQgKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjU4NjpzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19wYXJhbV90YXJnZXQoY2hhciAqdGFyZ2V0X2NvbmZpZyxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjU4Ny1cXHRcXHRcXHRcXHRcXHRcXHQgICAgaW50IGNtZGxpbmVfY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjY3OD1zdGF0aWMgaW50IF9faW5pdCBpbml0X25ldGNvbnNvbGUodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjg5LVxcdFxcdHdoaWxlICgodGFyZ2V0X2NvbmZpZyA9IHN0cnNlcChcXHUwMDI2aW5wdXQsIFxcXCI7XFxcIikpKSB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2OTA6XFx0XFx0XFx0bnQgPSBhbGxvY19wYXJhbV90YXJnZXQodGFyZ2V0X2NvbmZpZywgY291bnQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjkxLVxcdFxcdFxcdGlmIChJU19FUlIobnQpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM3OjU5LjI0MjE0ODM4MVoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTgyMjUxMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBGb2N1cyBmb3IgTmV0Y29uc29sZSBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgdGhpbmsgdGhpcyB0aHJvdWdoIGZvciB0aGUgYG5ldGNvbnNvbGVgIG1vZHVsZS4gSSBzZWUgdGhhdCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAgaXMgb25seSBjYWxsZWQgZnJvbSBgaW5pdF9uZXRjb25zb2xlYCwgbWVhbmluZyBpdCdzIG9ubHkgYWNjZXNzaWJsZSBkdXJpbmcgbW9kdWxlIGxvYWQuIEdvb2QsIHRoYXQgbWFrZXMgaXQgYSB2aWFibGUgdGFyZ2V0IGZvciBmdXp6aW5nIGJlY2F1c2UgU3l6a2FsbGVyIGNhbiwgb2YgY291cnNlLCBmdXp6IG1vZHVsZSBwYXJhbWV0ZXJzLlxuXG5Ob3csIEkgbmVlZCB0byBjaG9vc2Ugc29tZSBnb29kIGZvY3VzIHN5bWJvbHMuIEknbSBjb25zaWRlcmluZyBgbmV0cG9sbF9wYXJzZV9pcF9hZGRyYC4gSSBzZWUgaXQncyBjYWxsZWQgYnkgYGxvY2FsX2lwX3N0b3JlYCwgYHJlbW90ZV9pcF9zdG9yZWAsIGFuZCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAsIHdoaWNoIGlzIGEgZ29vZCBzaWduLiBJdCAqaXMqIHN0YXRpYywgYnV0IGl0J3MgdGhlIGNvcmUgcGFyc2luZyBmdW5jdGlvbiB0aGF0J3MgYmVpbmcgbW9kaWZpZWQsIHNvIEknbGwga2VlcCBpdCBpbiBmb3Igbm93LlxuXG5MZXQncyByZWZpbmUgdGhlIGxpc3QuIFJpZ2h0IG5vdywgSSdtIHRoaW5raW5nOlxuXG4qICAgYGxvY2FsX2lwX3N0b3JlYFxuKiAgIGByZW1vdGVfaXBfc3RvcmVgXG4qICAgYGVuYWJsZWRfc3RvcmVgXG4qICAgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGBcbiogICBgbmV0cG9sbF9zZW5kX3VkcGBcbiogICBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWBcbiogICBgbmV0cG9sbF9wYXJzZV9pcF9hZGRyYFxuXG5Ib2xkIG9uLCB0aGUgZG9jdW1lbnRhdGlvbiBpcyByZW1pbmRpbmcgbWUgdG8gcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgbWFrZXMgc2Vuc2U7IGlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyBkb24ndCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIGBuZXRwb2xsX3BhcnNlX2lwX2FkZHJgIGlzIHN0YXRpYywgYW5kIG1heSBiZSBpbmxpbmVkLiBCdXQgZ2l2ZW4gaXQgaXMgY2FsbGVkIGZyb20gbXVsdGlwbGUgbG9jYXRpb25zLCBwZXJoYXBzIG5vdC4gYGxvY2FsX2lwX3N0b3JlYCwgYHJlbW90ZV9pcF9zdG9yZWAsIGFuZCBgZW5hYmxlZF9zdG9yZWAgYXJlIGNvbmZpZ2ZzIGNhbGxiYWNrczsgbm8gd2F5IHRoZXkgYXJlIGlubGluZWQuIGBuZXRjb25zX25ldHBvbGxfc2V0dXBgIGlzIHByb2JhYmx5IHRvbyBsYXJnZSB0byBiZSBpbmxpbmVkIGFuZCB0aGUgc2FtZSBmb3IgYG5ldHBvbGxfc2VuZF91ZHBgIGFuZCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAuXG5cblllcCwgSSB0aGluayB0aGlzIGxpc3QgaXMgc29saWQuXG5cbkZvciBjb25maWd1cmF0aW9ucywgSSdsbCBuZWVkOlxuXG4qICAgYE5FVENPTlNPTEVgXG4qICAgYE5FVENPTlNPTEVfRFlOQU1JQ2BcbiogICBgSVBWNmBcbiogICBgQ09ORklHRlNfRlNgXG5cbkknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgQ09ORklHRlNfRlNgIGlzIHRoZSBjb3JyZWN0IG5hbWUgdGhvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTMzOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozODowNS44MjQ0MDMwMTFaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mzk4NjM0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ09ORklHRlNfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvY29uZmlnZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9jb25maWdmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvY29uZmlnZnMvS2NvbmZpZzoyOmNvbmZpZyBDT05GSUdGU19GU1xcbmZzL2NvbmZpZ2ZzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVXNlcnNwYWNlLWRyaXZlbiBjb25maWd1cmF0aW9uIGZpbGVzeXN0ZW1cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM4OjA1Ljk4ODM5ODc5NFoiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODAxNTUxMjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIERlcGVuZGVuY2llcyBmb3IgTmV0d29yayBDb25zb2xlKipcblxuT2theSwgeWVzLCBgQ09ORklHRlNfRlNgIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IGZpbGUgc3lzdGVtIGZvciB3aGF0IEknbSBkb2luZyBoZXJlLiBUaW1lIHRvIG1ha2Ugc3VyZSBgTkVUQ09OU09MRV9EWU5BTUlDYCBpc24ndCByZWx5aW5nIG9uIGFueXRoaW5nIGVsc2UgdW5leHBlY3RlZC4gTGV0J3Mgc2VlLi4uIHRoZSBkZXBlbmRlbmN5IHN0cmluZyBsb29rcyBsaWtlOiBgZGVwZW5kcyBvbiBORVRDT05TT0xFIFx1MDAyNlx1MDAyNiBTWVNGUyBcdTAwMjZcdTAwMjYgQ09ORklHRlNfRlMgXHUwMDI2XHUwMDI2ICEoTkVUQ09OU09MRT15IFx1MDAyNlx1MDAyNiBDT05GSUdGU19GUz1tKWAuIEFscmlnaHQsIHNvIGl0J3MgZGlyZWN0bHkgZGVwZW5kZW50IG9uIGBORVRDT05TT0xFYCwgYFNZU0ZTYCwgYW5kIGBDT05GSUdGU19GU2AsIHdpdGggYSBjYXZlYXQuIFRoYXQncyBnb29kIHByYWN0aWNlLiBJJ2xsIGFkZCBgU1lTRlNgIGp1c3QgdG8gYmUgc2FmZSwgdGhvdWdoIGl0J3MgdXN1YWxseSBwYXJ0IG9mIG1vc3Qgc2V0dXBzIGFueXdheS4gV2FpdCBhIHNlY29uZC4uLiBgU1lTRlNgIGlzIGEgKmJvb2xlYW4qLCBpc24ndCBpdD8gT2theSwgbm8gcHJvYmxlbSwgdGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYzNDEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozODowOS43ODk5NTI0ODVaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyOTgxMTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTWVNGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9zeXNmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3N5c2ZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9zeXNmcy9LY29uZmlnOjI6Y29uZmlnIFNZU0ZTXFxuZnMvc3lzZnMvS2NvbmZpZy0zLVxcdGJvb2wgXFxcInN5c2ZzIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozODowOS44MzI5MzgxMzFaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODYwMDk4MzcyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gdGhlIHRleHQgY29uZmlybXMgbXkgaW5pdGlhbCBodW5jaCDigJMgeWVzLCBgU1lTRlNgIGlzIHJlbGV2YW50IGhlcmUuIE5vdywgbGV0J3MgZGlnIGRlZXBlciB0byBzZWUgd2hhdCBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgY29tZSBpbnRvIHBsYXkgd2l0aCB0aGlzIHBhdGNoLiBJIGFscmVhZHkga25vdyB0aGF0IGBDT05GSUdfSU5FVGAgaXMgZXNzZW50aWFsIGZvciBJUHY0LCBhbmQgdXN1YWxseSwgaXQncyBlbmFibGVkIGJ5IGRlZmF1bHQgYW55d2F5LiBgQ09ORklHX05FVGAgaXMgYW5vdGhlciBvYnZpb3VzIGRlcGVuZGVuY3ksIGFzIHdlJ3JlIGRlYWxpbmcgd2l0aCBuZXR3b3JraW5nLlxuXG5UbyBiZSBjb21wcmVoZW5zaXZlIGluIG15IGFuYWx5c2lzLCBJJ20gZ29pbmcgdG8gZXhwbGljaXRseSBsaXN0IG91dCBhIGZldyBjb25maWd1cmF0aW9ucyB0aGF0IEkgdGhpbmsgYXJlIGdvaW5nIHRvIGJlIG1vc3QgcmVsZXZhbnQgZm9yIGZ1enppbmcgdGhpcyBwYXRjaDogYE5FVENPTlNPTEVgLCBgTkVUQ09OU09MRV9EWU5BTUlDYCwgYElQVjZgLCBhbmQgYENPTkZJR0ZTX0ZTYC5cblxuVGhlIHJlYXNvbmluZyBpcyBwcmV0dHkgY2xlYXIuIFRoaXMgcGF0Y2ggaXMgZnVuZGFtZW50YWxseSBjaGFuZ2luZyBob3cgdGhlIGBuZXRjb25zb2xlYCBkcml2ZXIgaGFuZGxlcyBJUCBhZGRyZXNzZXMgYnkgcmVwbGFjaW5nIHRoZSBib29sZWFuIGZsYWcgYXBwcm9hY2ggd2l0aCBhIGBzdHJ1Y3QgaW5ldF9hZGRyYCB0aGF0IGV4cGxpY2l0bHkgdHJhY2tzIHRoZSBhZGRyZXNzIGZhbWlseS4gVGhpcyBjaGFuZ2UgZGlyZWN0bHkgaW1wYWN0cyBob3cgdGhlIGRyaXZlciBwYXJzZXMgYW5kIG1hbmFnZXMgbG9jYWwgYW5kIHJlbW90ZSBJUCBhZGRyZXNzZXMsIGFuZCBob3cgaXQgaGFuZGxlcyBVRFAgZW5jYXBzdWxhdGlvbiB3aXRoaW4gYG5ldHBvbGxgLiBJIGNhbiBzZWUgc2V2ZXJhbCBhcmVhcyB0aGF0IG5lZWQgc2NydXRpbnkuXG5cblNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGF0dGFjayBzdXJmYWNlcyB0aHJvdWdoIG1vZHVsZSBwYXJhbWV0ZXJzIGF0IGJvb3QgYW5kIGxvYWQgdGltZSBhbmQgZHluYW1pY2FsbHkgdGhyb3VnaCBjb25maWdmcyBhdHRyaWJ1dGVzLiBUaGUgZnV6emluZyBlZmZvcnRzIHNob3VsZCBwcmlvcml0aXplIHRoZSBjb25maWdmcyBzdG9yZSBjYWxsYmFja3MsIHRoZSBtb2R1bGUgcGFyYW1ldGVyIHBhcnNlciwgYW5kIHRoZSBuZXRwb2xsIHNldHVwIGFuZCBzZW5kIHBhdGhzLiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IHRoaXMgbmV3IGFkZHJlc3MgZmFtaWx5IGxvZ2ljIGhhbmRsZXMgYWxsIHRoZSBlZGdlIGNhc2VzIGNvcnJlY3RseS4gV2UncmUgdGFsa2luZyBhYm91dCBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGhlcmUsIHNvIHJvYnVzdCBmdXp6aW5nIGlzIGNydWNpYWwuXG5cbkFscmlnaHQsIEknbSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2Agbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjcxOCwiT3V0cHV0VG9rZW5zIjoyNDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mzg6MTguNDMzOTI0NDI3WiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU3ODQyNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVENPTlNPTEVcIixcbiAgICBcIk5FVENPTlNPTEVfRFlOQU1JQ1wiLFxuICAgIFwiSVBWNlwiLFxuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsb2NhbF9pcF9zdG9yZVwiLFxuICAgIFwicmVtb3RlX2lwX3N0b3JlXCIsXG4gICAgXCJlbmFibGVkX3N0b3JlXCIsXG4gICAgXCJuZXRjb25zX25ldHBvbGxfc2V0dXBcIixcbiAgICBcIm5ldHBvbGxfc2VuZF91ZHBcIixcbiAgICBcIm5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVcIixcbiAgICBcIm5ldHBvbGxfcGFyc2VfaXBfYWRkclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRjb25zb2xlIGRyaXZlciB0byB1c2UgYSBuZXcgYHN0cnVjdCBpbmV0X2FkZHJgIHRoYXQgZXhwbGljaXRseSB0cmFja3MgdGhlIElQIGFkZHJlc3MgZmFtaWx5IChBRl9JTkVULCBBRl9JTkVUNiwgb3IgQUZfVU5TUEVDKSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gYSBib29sZWFuIGZsYWcgYW5kIHplcm8tY2hlY2tzLiBUaGlzIGFmZmVjdHMgaG93IGxvY2FsIGFuZCByZW1vdGUgSVAgYWRkcmVzc2VzIGFyZSBwYXJzZWQsIHN0b3JlZCwgYW5kIHVzZWQgZm9yIFVEUCBlbmNhcHN1bGF0aW9uIGluIG5ldHBvbGwuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgbW9kdWxlIHBhcmFtZXRlcnMgYXQgYm9vdC9sb2FkIHRpbWUgYW5kIGR5bmFtaWNhbGx5IHZpYSBjb25maWdmcyBhdHRyaWJ1dGVzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgY29uZmlnZnMgc3RvcmUgY2FsbGJhY2tzLCB0aGUgbW9kdWxlIHBhcmFtZXRlciBwYXJzZXIsIGFuZCB0aGUgbmV0cG9sbCBzZXR1cCBhbmQgc2VuZCBwYXRocyB0byBlbnN1cmUgdGhlIG5ldyBhZGRyZXNzIGZhbWlseSBsb2dpYyBoYW5kbGVzIGFsbCBlZGdlIGNhc2VzIGNvcnJlY3RseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRDT05TT0xFXCIsXG4gICAgXCJORVRDT05TT0xFX0RZTkFNSUNcIixcbiAgICBcIklQVjZcIixcbiAgICBcIkNPTkZJR0ZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibG9jYWxfaXBfc3RvcmVcIixcbiAgICBcInJlbW90ZV9pcF9zdG9yZVwiLFxuICAgIFwiZW5hYmxlZF9zdG9yZVwiLFxuICAgIFwibmV0Y29uc19uZXRwb2xsX3NldHVwXCIsXG4gICAgXCJuZXRwb2xsX3NlbmRfdWRwXCIsXG4gICAgXCJuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lXCIsXG4gICAgXCJuZXRwb2xsX3BhcnNlX2lwX2FkZHJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0Y29uc29sZSBkcml2ZXIgdG8gdXNlIGEgbmV3IGBzdHJ1Y3QgaW5ldF9hZGRyYCB0aGF0IGV4cGxpY2l0bHkgdHJhY2tzIHRoZSBJUCBhZGRyZXNzIGZhbWlseSAoQUZfSU5FVCwgQUZfSU5FVDYsIG9yIEFGX1VOU1BFQykgaW5zdGVhZCBvZiByZWx5aW5nIG9uIGEgYm9vbGVhbiBmbGFnIGFuZCB6ZXJvLWNoZWNrcy4gVGhpcyBhZmZlY3RzIGhvdyBsb2NhbCBhbmQgcmVtb3RlIElQIGFkZHJlc3NlcyBhcmUgcGFyc2VkLCBzdG9yZWQsIGFuZCB1c2VkIGZvciBVRFAgZW5jYXBzdWxhdGlvbiBpbiBuZXRwb2xsLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIG1vZHVsZSBwYXJhbWV0ZXJzIGF0IGJvb3QvbG9hZCB0aW1lIGFuZCBkeW5hbWljYWxseSB2aWEgY29uZmlnZnMgYXR0cmlidXRlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIGNvbmZpZ2ZzIHN0b3JlIGNhbGxiYWNrcywgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgcGFyc2VyLCBhbmQgdGhlIG5ldHBvbGwgc2V0dXAgYW5kIHNlbmQgcGF0aHMgdG8gZW5zdXJlIHRoZSBuZXcgYWRkcmVzcyBmYW1pbHkgbG9naWMgaGFuZGxlcyBhbGwgZWRnZSBjYXNlcyBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow9xb7x[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-05 22:34:14 +0000 UTC FinishedAt: 2026-08-05 22:38:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a23b36233d4103def55dc8cf65698106d0bd1e62", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETCONSOLE", "NETCONSOLE_DYNAMIC", "IPV6", "CONFIGFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a23b36233d4103def55dc8cf65698106d0bd1e62", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETCONSOLE", "NETCONSOLE_DYNAMIC", "IPV6", "CONFIGFS_FS" ], "series_id": "249de7e2-0a54-4d11-b9d8-30d6aad6a6da" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "local_ip_store", "remote_ip_store", "enabled_store", "netcons_netpoll_setup", "netpoll_send_udp", "netconsole_parser_cmdline", "netpoll_parse_ip_addr" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVENPTlNPTEUmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRV9EWU5BTUlDJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7Q09ORklHRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsb2NhbF9pcF9zdG9yZSYjMzQ7LAogICAgJiMzNDtyZW1vdGVfaXBfc3RvcmUmIzM0OywKICAgICYjMzQ7ZW5hYmxlZF9zdG9yZSYjMzQ7LAogICAgJiMzNDtuZXRjb25zX25ldHBvbGxfc2V0dXAmIzM0OywKICAgICYjMzQ7bmV0cG9sbF9zZW5kX3VkcCYjMzQ7LAogICAgJiMzNDtuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lJiMzNDssCiAgICAmIzM0O25ldHBvbGxfcGFyc2VfaXBfYWRkciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0Y29uc29sZSBkcml2ZXIgdG8gdXNlIGEgbmV3IGBzdHJ1Y3QgaW5ldF9hZGRyYCB0aGF0IGV4cGxpY2l0bHkgdHJhY2tzIHRoZSBJUCBhZGRyZXNzIGZhbWlseSAoQUZfSU5FVCwgQUZfSU5FVDYsIG9yIEFGX1VOU1BFQykgaW5zdGVhZCBvZiByZWx5aW5nIG9uIGEgYm9vbGVhbiBmbGFnIGFuZCB6ZXJvLWNoZWNrcy4gVGhpcyBhZmZlY3RzIGhvdyBsb2NhbCBhbmQgcmVtb3RlIElQIGFkZHJlc3NlcyBhcmUgcGFyc2VkLCBzdG9yZWQsIGFuZCB1c2VkIGZvciBVRFAgZW5jYXBzdWxhdGlvbiBpbiBuZXRwb2xsLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIG1vZHVsZSBwYXJhbWV0ZXJzIGF0IGJvb3QvbG9hZCB0aW1lIGFuZCBkeW5hbWljYWxseSB2aWEgY29uZmlnZnMgYXR0cmlidXRlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIGNvbmZpZ2ZzIHN0b3JlIGNhbGxiYWNrcywgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgcGFyc2VyLCBhbmQgdGhlIG5ldHBvbGwgc2V0dXAgYW5kIHNlbmQgcGF0aHMgdG8gZW5zdXJlIHRoZSBuZXcgYWRkcmVzcyBmYW1pbHkgbG9naWMgaGFuZGxlcyBhbGwgZWRnZSBjYXNlcyBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6MzY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5Nzg2YjU3ODY2NzQ4ZTNkNWFmZjhhMjRkYTAwMTYwODBjMzZjMWRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgNSAyMjozNjowOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbmluZGV4IDAzOTEzMzAyMzI4Y2MuLjY5NjIxNzA1ZDY4ZGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuQEAgLTE4MSw3ICYjNDM7MTgxLDYgQEAgZW51bSB0YXJnZXRfc3RhdGUge1xuICAqXHRcdGxvY2FsX21hY1x0KHJlYWQtb25seSlcbiAgKiBAbG9jYWxfaXA6XHRTb3VyY2UgSVAgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbiAgKiBAcmVtb3RlX2lwOlx0RGVzdGluYXRpb24gSVAgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbi0gKiBAaXB2NjpcdFdoZXRoZXIgdGhlIHRhcmdldCBhZGRyZXNzZXMgYXJlIElQdjYgKHJlYWQtd3JpdGUpLlxuICAqIEBsb2NhbF9wb3J0Olx0U291cmNlIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuICAqIEByZW1vdGVfcG9ydDogRGVzdGluYXRpb24gVURQIHBvcnQgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXG4gICogQHJlbW90ZV9tYWM6XHREZXN0aW5hdGlvbiBldGhlcm5ldCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuQEAgLTIxMiw4ICYjNDM7MjExLDcgQEAgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcbiBcdGJvb2xcdFx0XHRleHRlbmRlZDtcbiBcdGJvb2xcdFx0XHRyZWxlYXNlO1xuIFx0c3RydWN0IG5ldHBvbGxcdFx0bnA7XG4tXHR1bmlvbiBpbmV0X2FkZHJcdFx0bG9jYWxfaXAsIHJlbW90ZV9pcDtcbi1cdGJvb2xcdFx0XHRpcHY2O1xuJiM0MztcdHN0cnVjdCBpbmV0X2FkZHJcdGxvY2FsX2lwLCByZW1vdGVfaXA7XG4gXHR1MTZcdFx0XHRsb2NhbF9wb3J0LCByZW1vdGVfcG9ydDtcbiBcdHU4XHRcdFx0cmVtb3RlX21hY1tFVEhfQUxFTl07XG4gXHQvKiBwcm90ZWN0ZWQgYnkgdGFyZ2V0X2xpc3RfbG9jazsgJiM0MzsxIGdpdmVzIHNjbnByaW50ZigpIHJvb20gZm9yIGl0c1xuQEAgLTQxNSw2ICYjNDM7NDEzLDcgQEAgc3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0LyogR290IHRoZSBJUCwgbGV0JiMzOTtzIHJldHVybiAqL1xuIFx0XHRcdG50LVx1MDAzZWxvY2FsX2lwLmluNiA9IGlmcC1cdTAwM2VhZGRyO1xuJiM0MztcdFx0XHRudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPSBBRl9JTkVUNjtcbiBcdFx0XHRlcnIgPSAwO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtNDU2LDI4ICYjNDM7NDU1LDEyIEBAIHN0YXRpYyBpbnQgbmV0Y29uc190YWtlX2lwdjQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcdH1cbiBcbiBcdG50LVx1MDAzZWxvY2FsX2lwLmlwID0gaWZhLVx1MDAzZWlmYV9sb2NhbDtcbiYjNDM7XHRudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPSBBRl9JTkVUO1xuIFx0bnBfaW5mbyhucCwgXCYjMzQ7bG9jYWwgSVAgJXBJNFxcblwmIzM0OywgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXAuaXApO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLS8qXG4tICogVGVzdCB3aGV0aGVyIHRoZSBjYWxsZXIgbGVmdCBudC1cdTAwM2Vsb2NhbF9pcCB1bnNldCwgc28gdGhhdFxuLSAqIG5ldGNvbnNfbmV0cG9sbF9zZXR1cCgpIHNob3VsZCBhdXRvLXBvcHVsYXRlIGl0IGZyb20gdGhlIGVncmVzcyBkZXZpY2UuXG4tICpcbi0gKiBudC1cdTAwM2Vsb2NhbF9pcCBpcyBhIHVuaW9uIG9mIF9fYmUzMiAoSVB2NCkgYW5kIHN0cnVjdCBpbjZfYWRkciAoSVB2NiksXG4tICogc28gYW4gSVB2NiBhZGRyZXNzIHdob3NlIGZpcnN0IDQgYnl0ZXMgYXJlIHplcm8gKGUuZy4gOjoxLCA6OjIsXG4tICogSVB2NC1tYXBwZWQgOjpmZmZmOmEuYi5jLmQpIG11c3Qgbm90IGJlIHRlc3RlZCB2aWEgdGhlIElQdjQgYXJtIOKAlFxuLSAqIGRvaW5nIHNvIHdvdWxkIG1pc2NsYXNzaWZ5IGEgY2FsbGVyLXN1cHBsaWVkIGFkZHJlc3MgYXMgdW5zZXQgYW5kXG4tICogc2lsZW50bHkgb3ZlcndyaXRlIGl0IHdpdGggd2hhdGV2ZXIgYWRkcmVzcyB0aGUgZGV2aWNlIGV4cG9zZXMuXG4tICovXG4tc3RhdGljIGJvb2wgbmV0Y29uc19sb2NhbF9pcF91bnNldChjb25zdCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuLXtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuLVx0XHRyZXR1cm4gaXB2Nl9hZGRyX2FueShcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pbjYpO1xuLVx0cmV0dXJuICFudC1cdTAwM2Vsb2NhbF9pcC5pcDtcbi19XG4tXG4gc3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBjdXJyZW50LVx1MDAzZW5zcHJveHktXHUwMDNlbmV0X25zO1xuQEAgLTQ4OCw2ICYjNDM7NDcxLDE5IEBAIHN0YXRpYyBpbnQgbmV0Y29uc19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4gXHRpbnQgZXJyO1xuIFxuIFx0cnRubF9sb2NrKCk7XG4mIzQzO1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKSB7XG4mIzQzO1x0XHRucF9lcnIobnAsIFwmIzM0O3JlbW90ZSBJUCBhZGRyZXNzIG5vdCBjb25maWd1cmVkLCBhYm9ydGluZ1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRlcnIgPSAtRURFU1RBRERSUkVRO1xuJiM0MztcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IEFGX1VOU1BFQyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgbnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkpIHtcbiYjNDM7XHRcdG5wX2VycihucCwgXCYjMzQ7bG9jYWwgYW5kIHJlbW90ZSBJUCBhZGRyZXNzIGZhbWlsaWVzIGRpZmZlciwgYWJvcnRpbmdcXG5cJiMzNDspO1xuJiM0MztcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAobnAtXHUwMDNlZGV2X25hbWVbMF0pXG4gXHRcdG5kZXYgPSBfX2Rldl9nZXRfYnlfbmFtZShuZXQsIG5wLVx1MDAzZWRldl9uYW1lKTtcbiBcdGVsc2UgaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIobnAtXHUwMDNlZGV2X21hYykpXG5AQCAtNTIzLDE2ICYjNDM7NTE5LDEzIEBAIHN0YXRpYyBpbnQgbmV0Y29uc19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4gXHRcdHJ0bmxfbG9jaygpO1xuIFx0fVxuIFxuLVx0aWYgKG5ldGNvbnNfbG9jYWxfaXBfdW5zZXQobnQpKSB7XG4tXHRcdGlmICghbnQtXHUwMDNlaXB2Nikge1xuLVx0XHRcdGVyciA9IG5ldGNvbnNfdGFrZV9pcHY0KG50LCBuZGV2KTtcbi1cdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0Z290byBwdXQ7XG4tXHRcdH0gZWxzZSB7XG4mIzQzO1x0aWYgKG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpIHtcbiYjNDM7XHRcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRcdGVyciA9IG5ldGNvbnNfdGFrZV9pcHY2KG50LCBuZGV2KTtcbi1cdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0Z290byBwdXQ7XG4tXHRcdH1cbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0ZXJyID0gbmV0Y29uc190YWtlX2lwdjQobnQsIG5kZXYpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBwdXQ7XG4gXHRcdGlwX292ZXJ3cml0dGVuID0gdHJ1ZTtcbiBcdH1cbiBcbkBAIC03MTQsMjQgJiM0Mzs3MDcsMjQgQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiBcdHN0cnVjdCBuZXRwb2xsICpucCA9IFx1MDAyNm50LVx1MDAzZW5wO1xuIFxuIFx0bnBfaW5mbyhucCwgXCYjMzQ7bG9jYWwgcG9ydCAlZFxcblwmIzM0OywgbnQtXHUwMDNlbG9jYWxfcG9ydCk7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbiYjNDM7XHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRucF9pbmZvKG5wLCBcJiMzNDtsb2NhbCBJUHY2IGFkZHJlc3MgJXBJNmNcXG5cJiMzNDssIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmluNik7XG4gXHRlbHNlXG4gXHRcdG5wX2luZm8obnAsIFwmIzM0O2xvY2FsIElQdjQgYWRkcmVzcyAlcEk0XFxuXCYjMzQ7LCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pcCk7XG4gXHRucF9pbmZvKG5wLCBcJiMzNDtpbnRlcmZhY2UgbmFtZSAmIzM5OyVzJiMzOTtcXG5cJiMzNDssIG5wLVx1MDAzZWRldl9uYW1lKTtcbiBcdG5wX2luZm8obnAsIFwmIzM0O2xvY2FsIGV0aGVybmV0IGFkZHJlc3MgJiMzOTslcE0mIzM5O1xcblwmIzM0OywgbnAtXHUwMDNlZGV2X21hYyk7XG4gXHRucF9pbmZvKG5wLCBcJiMzNDtyZW1vdGUgcG9ydCAlZFxcblwmIzM0OywgbnQtXHUwMDNlcmVtb3RlX3BvcnQpO1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4mIzQzO1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdG5wX2luZm8obnAsIFwmIzM0O3JlbW90ZSBJUHY2IGFkZHJlc3MgJXBJNmNcXG5cJiMzNDssIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcC5pbjYpO1xuIFx0ZWxzZVxuIFx0XHRucF9pbmZvKG5wLCBcJiMzNDtyZW1vdGUgSVB2NCBhZGRyZXNzICVwSTRcXG5cJiMzNDssIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcC5pcCk7XG4gXHRucF9pbmZvKG5wLCBcJiMzNDtyZW1vdGUgZXRoZXJuZXQgYWRkcmVzcyAlcE1cXG5cJiMzNDssIG50LVx1MDAzZXJlbW90ZV9tYWMpO1xuIH1cbiBcbi0vKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgdW5pb24uIFJldHVybiAwIGlmIElQdjQgaXNcbi0gKiBwb3B1bGF0ZWQsIDEgaWYgSVB2NiBpcyBwb3B1bGF0ZWQsIGFuZCAtMSB1cG9uIGZhaWx1cmUuXG4mIzQzOy8qIFBhcnNlIHRoZSBzdHJpbmcgYW5kIHBvcHVsYXRlIHRoZSBgaW5ldF9hZGRyYCBzdHJ1Y3QuIFJldHVybiAwIG9uIHN1Y2Nlc3NcbiYjNDM7ICogYW5kIC0xIHVwb24gZmFpbHVyZS5cbiAgKi9cbi1zdGF0aWMgaW50IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjb25zdCBjaGFyICpzdHIsIHVuaW9uIGluZXRfYWRkciAqYWRkcilcbiYjNDM7c3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgaW5ldF9hZGRyICphZGRyKVxuIHtcbiBcdGNvbnN0IGNoYXIgKmVuZCA9IE5VTEw7XG4gXHRpbnQgbGVuO1xuQEAgLTc0MywxNCAmIzQzOzczNiwxOCBAQCBzdGF0aWMgaW50IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjb25zdCBjaGFyICpzdHIsIHVuaW9uIGluZXRfYWRkciAqYWRkcilcbiBcdGlmIChzdHJbbGVuIC0gMV0gPT0gJiMzOTtcXG4mIzM5OylcbiBcdFx0bGVuIC09IDE7XG4gXG4tXHRpZiAoaW40X3B0b24oc3RyLCBsZW4sICh2b2lkICopYWRkciwgLTEsIFx1MDAyNmVuZCkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4tXHQgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJiMzOTtcXG4mIzM5OykpXG4mIzQzO1x0aWYgKGluNF9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKVx1MDAyNmFkZHItXHUwMDNlaXAsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoIWVuZCB8fCAqZW5kID09IDAgfHwgKmVuZCA9PSAmIzM5O1xcbiYjMzk7KSkge1xuJiM0MztcdFx0YWRkci1cdTAwM2VmYW1pbHkgPSBBRl9JTkVUO1xuIFx0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4gXG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikgXHUwMDI2XHUwMDI2XG4tXHQgICAgaW42X3B0b24oc3RyLCBsZW4sICh2b2lkICopYWRkciwgLTEsIFx1MDAyNmVuZCkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4tXHQgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJiMzOTtcXG4mIzM5OykpXG4tXHRcdHJldHVybiAxO1xuJiM0MztcdCAgICBpbjZfcHRvbihzdHIsIGxlbiwgKHZvaWQgKilcdTAwMjZhZGRyLVx1MDAzZWluNiwgLTEsIFx1MDAyNmVuZCkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICYjMzk7XFxuJiMzOTspKSB7XG4mIzQzO1x0XHRhZGRyLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ2O1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIC0xO1xuIH1cbkBAIC04NTUsMjAgJiM0Mzs4NTIsMjAgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbiB7XG4gXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuIFxuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4mIzQzO1x0aWYgKG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbiBcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslcEk2Y1xcblwmIzM0OywgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXAuaW42KTtcbiBcdGVsc2Vcbi1cdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslcEk0XFxuXCYjMzQ7LCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcCk7XG4mIzQzO1x0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVwSTRcXG5cJiMzNDssIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmlwKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4ge1xuIFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiBcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuJiM0MztcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVwSTZjXFxuXCYjMzQ7LCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXAuaW42KTtcbiBcdGVsc2Vcbi1cdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslcEk0XFxuXCYjMzQ7LCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApO1xuJiM0MztcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslcEk0XFxuXCYjMzQ7LCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXAuaXApO1xuIH1cbiBcbiBzdGF0aWMgc3NpemVfdCBsb2NhbF9tYWNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbkBAIC0xMjEzLDcgJiM0MzsxMjEwLDYgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4ge1xuIFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiBcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbi1cdGludCBpcHY2O1xuIFxuIFx0ZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTtcbiBcdGlmIChudC1cdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKSB7XG5AQCAtMTIyMiwxMCAmIzQzOzEyMTgsOCBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuLVx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwKTtcbi1cdGlmIChpcHY2ID09IC0xKVxuJiM0MztcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcCkgXHUwMDNjIDApXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbi1cdG50LVx1MDAzZWlwdjYgPSAhIWlwdjY7XG4gXG4gXHRyZXQgPSBjb3VudDtcbiBvdXRfdW5sb2NrOlxuQEAgLTEyMzgsNyAmIzQzOzEyMzIsNiBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4ge1xuIFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiBcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbi1cdGludCBpcHY2O1xuIFxuIFx0ZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTtcbiBcdGlmIChudC1cdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKSB7XG5AQCAtMTI0NywxMCAmIzQzOzEyNDAsOCBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbi1cdGlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApO1xuLVx0aWYgKGlwdjYgPT0gLTEpXG4mIzQzO1x0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcCkgXHUwMDNjIDApXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbi1cdG50LVx1MDAzZWlwdjYgPSAhIWlwdjY7XG4gXG4gXHRyZXQgPSBjb3VudDtcbiBvdXRfdW5sb2NrOlxuQEAgLTIwNjEsNyAmIzQzOzIwNTIsNyBAQCBzdGF0aWMgdm9pZCBuZXRwb2xsX3VkcF9jaGVja3N1bShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFxuIFx0LyogY2hlY2sgbmVlZHMgdG8gYmUgc2V0LCBzaW5jZSBpdCB3aWxsIGJlIGNvbnN1bWVkIGluIGNzdW1fcGFydGlhbCAqL1xuIFx0dWRwaC1cdTAwM2VjaGVjayA9IDA7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbiYjNDM7XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbiBcdFx0dWRwaC1cdTAwM2VjaGVjayA9IGNzdW1faXB2Nl9tYWdpYyhcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pbjYsXG4gXHRcdFx0XHRcdCAgICAgIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcC5pbjYsXG4gXHRcdFx0XHRcdCAgICAgIHVkcF9sZW4sIElQUFJPVE9fVURQLFxuQEAgLTIxMDIsNyAmIzQzOzIwOTMsNyBAQCBzdGF0aWMgdm9pZCBwdXNoX2V0aChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbiBcdGV0aGVyX2FkZHJfY29weShldGgtXHUwMDNlaF9zb3VyY2UsIG5wLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcik7XG4gXHRldGhlcl9hZGRyX2NvcHkoZXRoLVx1MDAzZWhfZGVzdCwgbnQtXHUwMDNlcmVtb3RlX21hYyk7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbiYjNDM7XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcbiBcdGVsc2VcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7XG5AQCAtMjE3MSw3ICYjNDM7MjE2Miw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG4gXHRcdFdBUk5fT05fT05DRSghaXJxc19kaXNhYmxlZCgpKTtcbiBcbiBcdHVkcF9sZW4gPSBsZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4mIzQzO1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdGlwX2xlbiA9IHVkcF9sZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcbiBcdGVsc2VcbiBcdFx0aXBfbGVuID0gdWRwX2xlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwaGRyKTtcbkBAIC0yMTg3LDcgJiM0MzsyMTc4LDcgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbiBcdHNrYl9wdXQoc2tiLCBsZW4pO1xuIFxuIFx0cHVzaF91ZHAobnQsIHNrYiwgbGVuKTtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuJiM0MztcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRwdXNoX2lwdjYobnQsIHNrYiwgbGVuKTtcbiBcdGVsc2VcbiBcdFx0cHVzaF9pcHY0KG50LCBza2IsIGxlbik7XG5AQCAtMjUwNywxMCAmIzQzOzI0OTgsOCBAQCBfX3JlbGVhc2VzKFx1MDAyNnRhcmdldF9saXN0X2xvY2spXG4gc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdClcbiB7XG4gXHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcdTAwMjZudC1cdTAwM2VucDtcbi1cdGJvb2wgaXB2ZXJzaW9uX3NldCA9IGZhbHNlO1xuIFx0Y2hhciAqY3VyID0gb3B0O1xuIFx0Y2hhciAqZGVsaW07XG4tXHRpbnQgaXB2NjtcbiBcbiBcdGlmICgqY3VyICE9ICYjMzk7QCYjMzk7KSB7XG4gXHRcdGRlbGltID0gc3RyY2hyKGN1ciwgJiMzOTtAJiMzOTspO1xuQEAgLTI1MjQsMTYgJiM0MzsyNTEzLDEyIEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpXG4gXHRjdXImIzQzOyYjNDM7O1xuIFxuIFx0aWYgKCpjdXIgIT0gJiMzOTsvJiMzOTspIHtcbi1cdFx0aXB2ZXJzaW9uX3NldCA9IHRydWU7XG4gXHRcdGRlbGltID0gc3RyY2hyKGN1ciwgJiMzOTsvJiMzOTspO1xuIFx0XHRpZiAoIWRlbGltKVxuIFx0XHRcdGdvdG8gcGFyc2VfZmFpbGVkO1xuIFx0XHQqZGVsaW0gPSAwO1xuLVx0XHRpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApO1xuLVx0XHRpZiAoaXB2NiBcdTAwM2MgMClcbiYjNDM7XHRcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcCkgXHUwMDNjIDApXG4gXHRcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4tXHRcdGVsc2Vcbi1cdFx0XHRudC1cdTAwM2VpcHY2ID0gKGJvb2wpaXB2NjtcbiBcdFx0Y3VyID0gZGVsaW07XG4gXHR9XG4gXHRjdXImIzQzOyYjNDM7O1xuQEAgLTI1NzUsMTMgJiM0MzsyNTYwLDExIEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpXG4gXHRpZiAoIWRlbGltKVxuIFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbiBcdCpkZWxpbSA9IDA7XG4tXHRpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwKTtcbi1cdGlmIChpcHY2IFx1MDAzYyAwKVxuJiM0MztcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbi1cdGVsc2UgaWYgKGlwdmVyc2lvbl9zZXQgXHUwMDI2XHUwMDI2IG50LVx1MDAzZWlwdjYgIT0gKGJvb2wpaXB2NilcbiYjNDM7XHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IEFGX1VOU1BFQyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgbnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkpXG4gXHRcdGdvdG8gcGFyc2VfZmFpbGVkO1xuLVx0ZWxzZVxuLVx0XHRudC1cdTAwM2VpcHY2ID0gKGJvb2wpaXB2NjtcbiBcdGN1ciA9IGRlbGltICYjNDM7IDE7XG4gXG4gXHRpZiAoKmN1ciAhPSAwKSB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmggYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxuaW5kZXggMWM2YjFlZWM1ZWZkNi4uZGU5N2YwMDFhMGY5YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxuQEAgLTE2LDkgJiM0MzsxNiwxMyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91ZHAuaFx1MDAzZVxuIFxuLXVuaW9uIGluZXRfYWRkciB7XG4tXHRfX2JlMzJcdFx0aXA7XG4tXHRzdHJ1Y3QgaW42X2FkZHJcdGluNjtcbiYjNDM7c3RydWN0IGluZXRfYWRkciB7XG4mIzQzO1x0LyogQWRkcmVzcyBmYW1pbHk6IEFGX1VOU1BFQyB3aGVuIHVuc2V0LCBlbHNlIEFGX0lORVQgb3IgQUZfSU5FVDYgKi9cbiYjNDM7XHR1OFx0XHRcdGZhbWlseTtcbiYjNDM7XHR1bmlvbiB7XG4mIzQzO1x0XHRfX2JlMzJcdFx0aXA7XG4mIzQzO1x0XHRzdHJ1Y3QgaW42X2FkZHJcdGluNjtcbiYjNDM7XHR9O1xuIH07XG4gXG4gc3RydWN0IG5ldHBvbGwge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRDT05TT0xFJiMzNDssCiAgICAmIzM0O05FVENPTlNPTEVfRFlOQU1JQyYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bG9jYWxfaXBfc3RvcmUmIzM0OywKICAgICYjMzQ7cmVtb3RlX2lwX3N0b3JlJiMzNDssCiAgICAmIzM0O2VuYWJsZWRfc3RvcmUmIzM0OywKICAgICYjMzQ7bmV0Y29uc19uZXRwb2xsX3NldHVwJiMzNDssCiAgICAmIzM0O25ldHBvbGxfc2VuZF91ZHAmIzM0OywKICAgICYjMzQ7bmV0Y29uc29sZV9wYXJzZXJfY21kbGluZSYjMzQ7LAogICAgJiMzNDtuZXRwb2xsX3BhcnNlX2lwX2FkZHImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGNvbnNvbGUgZHJpdmVyIHRvIHVzZSBhIG5ldyBgc3RydWN0IGluZXRfYWRkcmAgdGhhdCBleHBsaWNpdGx5IHRyYWNrcyB0aGUgSVAgYWRkcmVzcyBmYW1pbHkgKEFGX0lORVQsIEFGX0lORVQ2LCBvciBBRl9VTlNQRUMpIGluc3RlYWQgb2YgcmVseWluZyBvbiBhIGJvb2xlYW4gZmxhZyBhbmQgemVyby1jaGVja3MuIFRoaXMgYWZmZWN0cyBob3cgbG9jYWwgYW5kIHJlbW90ZSBJUCBhZGRyZXNzZXMgYXJlIHBhcnNlZCwgc3RvcmVkLCBhbmQgdXNlZCBmb3IgVURQIGVuY2Fwc3VsYXRpb24gaW4gbmV0cG9sbC4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBtb2R1bGUgcGFyYW1ldGVycyBhdCBib290L2xvYWQgdGltZSBhbmQgZHluYW1pY2FsbHkgdmlhIGNvbmZpZ2ZzIGF0dHJpYnV0ZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBjb25maWdmcyBzdG9yZSBjYWxsYmFja3MsIHRoZSBtb2R1bGUgcGFyYW1ldGVyIHBhcnNlciwgYW5kIHRoZSBuZXRwb2xsIHNldHVwIGFuZCBzZW5kIHBhdGhzIHRvIGVuc3VyZSB0aGUgbmV3IGFkZHJlc3MgZmFtaWx5IGxvZ2ljIGhhbmRsZXMgYWxsIGVkZ2UgY2FzZXMgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTc4NmI1Nzg2Njc0OGUzZDVhZmY4YTI0ZGEwMDE2MDgwYzM2YzFkZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDUgMjI6MzY6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKaW5kZXggMDM5MTMzMDIzMjhjYy4uNjk2MjE3MDVkNjhkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYwpAQCAtMTgxLDcgJiM0MzsxODEsNiBAQCBlbnVtIHRhcmdldF9zdGF0ZSB7CiAgKgkJbG9jYWxfbWFjCShyZWFkLW9ubHkpCiAgKiBAbG9jYWxfaXA6CVNvdXJjZSBJUCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLgogICogQHJlbW90ZV9pcDoJRGVzdGluYXRpb24gSVAgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS4KLSAqIEBpcHY2OglXaGV0aGVyIHRoZSB0YXJnZXQgYWRkcmVzc2VzIGFyZSBJUHY2IChyZWFkLXdyaXRlKS4KICAqIEBsb2NhbF9wb3J0OglTb3VyY2UgVURQIHBvcnQgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuCiAgKiBAcmVtb3RlX3BvcnQ6IERlc3RpbmF0aW9uIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLgogICogQHJlbW90ZV9tYWM6CURlc3RpbmF0aW9uIGV0aGVybmV0IGFkZHJlc3Mgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuCkBAIC0yMTIsOCAmIzQzOzIxMSw3IEBAIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7CiAJYm9vbAkJCWV4dGVuZGVkOwogCWJvb2wJCQlyZWxlYXNlOwogCXN0cnVjdCBuZXRwb2xsCQlucDsKLQl1bmlvbiBpbmV0X2FkZHIJCWxvY2FsX2lwLCByZW1vdGVfaXA7Ci0JYm9vbAkJCWlwdjY7CiYjNDM7CXN0cnVjdCBpbmV0X2FkZHIJbG9jYWxfaXAsIHJlbW90ZV9pcDsKIAl1MTYJCQlsb2NhbF9wb3J0LCByZW1vdGVfcG9ydDsKIAl1OAkJCXJlbW90ZV9tYWNbRVRIX0FMRU5dOwogCS8qIHByb3RlY3RlZCBieSB0YXJnZXRfbGlzdF9sb2NrOyAmIzQzOzEgZ2l2ZXMgc2NucHJpbnRmKCkgcm9vbSBmb3IgaXRzCkBAIC00MTUsNiAmIzQzOzQxMyw3IEBAIHN0YXRpYyBpbnQgbmV0Y29uc190YWtlX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwKIAkJCQljb250aW51ZTsKIAkJCS8qIEdvdCB0aGUgSVAsIGxldCYjMzk7cyByZXR1cm4gKi8KIAkJCW50LSZndDtsb2NhbF9pcC5pbjYgPSBpZnAtJmd0O2FkZHI7CiYjNDM7CQkJbnQtJmd0O2xvY2FsX2lwLmZhbWlseSA9IEFGX0lORVQ2OwogCQkJZXJyID0gMDsKIAkJCWJyZWFrOwogCQl9CkBAIC00NTYsMjggJiM0Mzs0NTUsMTIgQEAgc3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LAogCX0KIAogCW50LSZndDtsb2NhbF9pcC5pcCA9IGlmYS0mZ3Q7aWZhX2xvY2FsOwomIzQzOwludC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ID0gQUZfSU5FVDsKIAlucF9pbmZvKG5wLCAmIzM0O2xvY2FsIElQICVwSTRcbiYjMzQ7LCAmYW1wO250LSZndDtsb2NhbF9pcC5pcCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFRlc3Qgd2hldGhlciB0aGUgY2FsbGVyIGxlZnQgbnQtJmd0O2xvY2FsX2lwIHVuc2V0LCBzbyB0aGF0Ci0gKiBuZXRjb25zX25ldHBvbGxfc2V0dXAoKSBzaG91bGQgYXV0by1wb3B1bGF0ZSBpdCBmcm9tIHRoZSBlZ3Jlc3MgZGV2aWNlLgotICoKLSAqIG50LSZndDtsb2NhbF9pcCBpcyBhIHVuaW9uIG9mIF9fYmUzMiAoSVB2NCkgYW5kIHN0cnVjdCBpbjZfYWRkciAoSVB2NiksCi0gKiBzbyBhbiBJUHY2IGFkZHJlc3Mgd2hvc2UgZmlyc3QgNCBieXRlcyBhcmUgemVybyAoZS5nLiA6OjEsIDo6MiwKLSAqIElQdjQtbWFwcGVkIDo6ZmZmZjphLmIuYy5kKSBtdXN0IG5vdCBiZSB0ZXN0ZWQgdmlhIHRoZSBJUHY0IGFybSDigJQKLSAqIGRvaW5nIHNvIHdvdWxkIG1pc2NsYXNzaWZ5IGEgY2FsbGVyLXN1cHBsaWVkIGFkZHJlc3MgYXMgdW5zZXQgYW5kCi0gKiBzaWxlbnRseSBvdmVyd3JpdGUgaXQgd2l0aCB3aGF0ZXZlciBhZGRyZXNzIHRoZSBkZXZpY2UgZXhwb3Nlcy4KLSAqLwotc3RhdGljIGJvb2wgbmV0Y29uc19sb2NhbF9pcF91bnNldChjb25zdCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQotewotCWlmIChudC0mZ3Q7aXB2NikKLQkJcmV0dXJuIGlwdjZfYWRkcl9hbnkoJmFtcDtudC0mZ3Q7bG9jYWxfaXAuaW42KTsKLQlyZXR1cm4gIW50LSZndDtsb2NhbF9pcC5pcDsKLX0KLQogc3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBjdXJyZW50LSZndDtuc3Byb3h5LSZndDtuZXRfbnM7CkBAIC00ODgsNiAmIzQzOzQ3MSwxOSBAQCBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQogCWludCBlcnI7CiAKIAlydG5sX2xvY2soKTsKJiM0MzsJaWYgKG50LSZndDtyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykgewomIzQzOwkJbnBfZXJyKG5wLCAmIzM0O3JlbW90ZSBJUCBhZGRyZXNzIG5vdCBjb25maWd1cmVkLCBhYm9ydGluZ1xuJiMzNDspOwomIzQzOwkJZXJyID0gLUVERVNUQUREUlJFUTsKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChudC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ICE9IEFGX1VOU1BFQyAmYW1wOyZhbXA7CiYjNDM7CSAgICBudC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ICE9IG50LSZndDtyZW1vdGVfaXAuZmFtaWx5KSB7CiYjNDM7CQlucF9lcnIobnAsICYjMzQ7bG9jYWwgYW5kIHJlbW90ZSBJUCBhZGRyZXNzIGZhbWlsaWVzIGRpZmZlciwgYWJvcnRpbmdcbiYjMzQ7KTsKJiM0MzsJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsJfQomIzQzOwogCWlmIChucC0mZ3Q7ZGV2X25hbWVbMF0pCiAJCW5kZXYgPSBfX2Rldl9nZXRfYnlfbmFtZShuZXQsIG5wLSZndDtkZXZfbmFtZSk7CiAJZWxzZSBpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihucC0mZ3Q7ZGV2X21hYykpCkBAIC01MjMsMTYgJiM0Mzs1MTksMTMgQEAgc3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIAkJcnRubF9sb2NrKCk7CiAJfQogCi0JaWYgKG5ldGNvbnNfbG9jYWxfaXBfdW5zZXQobnQpKSB7Ci0JCWlmICghbnQtJmd0O2lwdjYpIHsKLQkJCWVyciA9IG5ldGNvbnNfdGFrZV9pcHY0KG50LCBuZGV2KTsKLQkJCWlmIChlcnIpCi0JCQkJZ290byBwdXQ7Ci0JCX0gZWxzZSB7CiYjNDM7CWlmIChudC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykgewomIzQzOwkJaWYgKG50LSZndDtyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KQogCQkJZXJyID0gbmV0Y29uc190YWtlX2lwdjYobnQsIG5kZXYpOwotCQkJaWYgKGVycikKLQkJCQlnb3RvIHB1dDsKLQkJfQomIzQzOwkJZWxzZQomIzQzOwkJCWVyciA9IG5ldGNvbnNfdGFrZV9pcHY0KG50LCBuZGV2KTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBwdXQ7CiAJCWlwX292ZXJ3cml0dGVuID0gdHJ1ZTsKIAl9CiAKQEAgLTcxNCwyNCAmIzQzOzcwNywyNCBAQCBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQogCXN0cnVjdCBuZXRwb2xsICpucCA9ICZhbXA7bnQtJmd0O25wOwogCiAJbnBfaW5mbyhucCwgJiMzNDtsb2NhbCBwb3J0ICVkXG4mIzM0OywgbnQtJmd0O2xvY2FsX3BvcnQpOwotCWlmIChudC0mZ3Q7aXB2NikKJiM0MzsJaWYgKG50LSZndDtsb2NhbF9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgSVB2NiBhZGRyZXNzICVwSTZjXG4mIzM0OywgJmFtcDtudC0mZ3Q7bG9jYWxfaXAuaW42KTsKIAllbHNlCiAJCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgSVB2NCBhZGRyZXNzICVwSTRcbiYjMzQ7LCAmYW1wO250LSZndDtsb2NhbF9pcC5pcCk7CiAJbnBfaW5mbyhucCwgJiMzNDtpbnRlcmZhY2UgbmFtZSAmIzM5OyVzJiMzOTtcbiYjMzQ7LCBucC0mZ3Q7ZGV2X25hbWUpOwogCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgZXRoZXJuZXQgYWRkcmVzcyAmIzM5OyVwTSYjMzk7XG4mIzM0OywgbnAtJmd0O2Rldl9tYWMpOwogCW5wX2luZm8obnAsICYjMzQ7cmVtb3RlIHBvcnQgJWRcbiYjMzQ7LCBudC0mZ3Q7cmVtb3RlX3BvcnQpOwotCWlmIChudC0mZ3Q7aXB2NikKJiM0MzsJaWYgKG50LSZndDtyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KQogCQlucF9pbmZvKG5wLCAmIzM0O3JlbW90ZSBJUHY2IGFkZHJlc3MgJXBJNmNcbiYjMzQ7LCAmYW1wO250LSZndDtyZW1vdGVfaXAuaW42KTsKIAllbHNlCiAJCW5wX2luZm8obnAsICYjMzQ7cmVtb3RlIElQdjQgYWRkcmVzcyAlcEk0XG4mIzM0OywgJmFtcDtudC0mZ3Q7cmVtb3RlX2lwLmlwKTsKIAlucF9pbmZvKG5wLCAmIzM0O3JlbW90ZSBldGhlcm5ldCBhZGRyZXNzICVwTVxuJiMzNDssIG50LSZndDtyZW1vdGVfbWFjKTsKIH0KIAotLyogUGFyc2UgdGhlIHN0cmluZyBhbmQgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHVuaW9uLiBSZXR1cm4gMCBpZiBJUHY0IGlzCi0gKiBwb3B1bGF0ZWQsIDEgaWYgSVB2NiBpcyBwb3B1bGF0ZWQsIGFuZCAtMSB1cG9uIGZhaWx1cmUuCiYjNDM7LyogUGFyc2UgdGhlIHN0cmluZyBhbmQgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHN0cnVjdC4gUmV0dXJuIDAgb24gc3VjY2VzcwomIzQzOyAqIGFuZCAtMSB1cG9uIGZhaWx1cmUuCiAgKi8KLXN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgdW5pb24gaW5ldF9hZGRyICphZGRyKQomIzQzO3N0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IGluZXRfYWRkciAqYWRkcikKIHsKIAljb25zdCBjaGFyICplbmQgPSBOVUxMOwogCWludCBsZW47CkBAIC03NDMsMTQgJiM0Mzs3MzYsMTggQEAgc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCB1bmlvbiBpbmV0X2FkZHIgKmFkZHIpCiAJaWYgKHN0cltsZW4gLSAxXSA9PSAmIzM5O1xuJiMzOTspCiAJCWxlbiAtPSAxOwogCi0JaWYgKGluNF9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKWFkZHIsIC0xLCAmYW1wO2VuZCkgJmd0OyAwICZhbXA7JmFtcDsKLQkgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJiMzOTtcbiYjMzk7KSkKJiM0MzsJaWYgKGluNF9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKSZhbXA7YWRkci0mZ3Q7aXAsIC0xLCAmYW1wO2VuZCkgJmd0OyAwICZhbXA7JmFtcDsKJiM0MzsJICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICYjMzk7XG4mIzM5OykpIHsKJiM0MzsJCWFkZHItJmd0O2ZhbWlseSA9IEFGX0lORVQ7CiAJCXJldHVybiAwOwomIzQzOwl9CiAKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikgJmFtcDsmYW1wOwotCSAgICBpbjZfcHRvbihzdHIsIGxlbiwgKHZvaWQgKilhZGRyLCAtMSwgJmFtcDtlbmQpICZndDsgMCAmYW1wOyZhbXA7Ci0JICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICYjMzk7XG4mIzM5OykpCi0JCXJldHVybiAxOwomIzQzOwkgICAgaW42X3B0b24oc3RyLCBsZW4sICh2b2lkICopJmFtcDthZGRyLSZndDtpbjYsIC0xLCAmYW1wO2VuZCkgJmd0OyAwICZhbXA7JmFtcDsKJiM0MzsJICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICYjMzk7XG4mIzM5OykpIHsKJiM0MzsJCWFkZHItJmd0O2ZhbWlseSA9IEFGX0lORVQ2OwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KIAogCXJldHVybiAtMTsKIH0KQEAgLTg1NSwyMCAmIzQzOzg1MiwyMCBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKQogewogCXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7CiAKLQlpZiAobnQtJmd0O2lwdjYpCiYjNDM7CWlmIChudC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ID09IEFGX0lORVQ2KQogCQlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JXBJNmNcbiYjMzQ7LCAmYW1wO250LSZndDtsb2NhbF9pcC5pbjYpOwogCWVsc2UKLQkJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVwSTRcbiYjMzQ7LCAmYW1wO250LSZndDtsb2NhbF9pcCk7CiYjNDM7CQlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JXBJNFxuJiMzNDssICZhbXA7bnQtJmd0O2xvY2FsX2lwLmlwKTsKIH0KIAogc3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTsKIAotCWlmIChudC0mZ3Q7aXB2NikKJiM0MzsJaWYgKG50LSZndDtyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KQogCQlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JXBJNmNcbiYjMzQ7LCAmYW1wO250LSZndDtyZW1vdGVfaXAuaW42KTsKIAllbHNlCi0JCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslcEk0XG4mIzM0OywgJmFtcDtudC0mZ3Q7cmVtb3RlX2lwKTsKJiM0MzsJCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslcEk0XG4mIzM0OywgJmFtcDtudC0mZ3Q7cmVtb3RlX2lwLmlwKTsKIH0KIAogc3RhdGljIHNzaXplX3QgbG9jYWxfbWFjX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpCkBAIC0xMjEzLDcgJiM0MzsxMjEwLDYgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsCiB7CiAJc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTsKIAlzc2l6ZV90IHJldCA9IC1FSU5WQUw7Ci0JaW50IGlwdjY7CiAKIAlkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jaygpOwogCWlmIChudC0mZ3Q7c3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkgewpAQCAtMTIyMiwxMCAmIzQzOzEyMTgsOCBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZiwKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCWlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCAmYW1wO250LSZndDtsb2NhbF9pcCk7Ci0JaWYgKGlwdjYgPT0gLTEpCiYjNDM7CWlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCAmYW1wO250LSZndDtsb2NhbF9pcCkgJmx0OyAwKQogCQlnb3RvIG91dF91bmxvY2s7Ci0JbnQtJmd0O2lwdjYgPSAhIWlwdjY7CiAKIAlyZXQgPSBjb3VudDsKIG91dF91bmxvY2s6CkBAIC0xMjM4LDcgJiM0MzsxMjMyLDYgQEAgc3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLAogewogCXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7CiAJc3NpemVfdCByZXQgPSAtRUlOVkFMOwotCWludCBpcHY2OwogCiAJZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTsKIAlpZiAobnQtJmd0O3N0YXRlID09IFNUQVRFX0VOQUJMRUQpIHsKQEAgLTEyNDcsMTAgJiM0MzsxMjQwLDggQEAgc3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLAogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCi0JaXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsICZhbXA7bnQtJmd0O3JlbW90ZV9pcCk7Ci0JaWYgKGlwdjYgPT0gLTEpCiYjNDM7CWlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCAmYW1wO250LSZndDtyZW1vdGVfaXApICZsdDsgMCkKIAkJZ290byBvdXRfdW5sb2NrOwotCW50LSZndDtpcHY2ID0gISFpcHY2OwogCiAJcmV0ID0gY291bnQ7CiBvdXRfdW5sb2NrOgpAQCAtMjA2MSw3ICYjNDM7MjA1Miw3IEBAIHN0YXRpYyB2b2lkIG5ldHBvbGxfdWRwX2NoZWNrc3VtKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsCiAKIAkvKiBjaGVjayBuZWVkcyB0byBiZSBzZXQsIHNpbmNlIGl0IHdpbGwgYmUgY29uc3VtZWQgaW4gY3N1bV9wYXJ0aWFsICovCiAJdWRwaC0mZ3Q7Y2hlY2sgPSAwOwotCWlmIChudC0mZ3Q7aXB2NikKJiM0MzsJaWYgKG50LSZndDtyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KQogCQl1ZHBoLSZndDtjaGVjayA9IGNzdW1faXB2Nl9tYWdpYygmYW1wO250LSZndDtsb2NhbF9pcC5pbjYsCiAJCQkJCSAgICAgICZhbXA7bnQtJmd0O3JlbW90ZV9pcC5pbjYsCiAJCQkJCSAgICAgIHVkcF9sZW4sIElQUFJPVE9fVURQLApAQCAtMjEwMiw3ICYjNDM7MjA5Myw3IEBAIHN0YXRpYyB2b2lkIHB1c2hfZXRoKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IpCiAJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKIAlldGhlcl9hZGRyX2NvcHkoZXRoLSZndDtoX3NvdXJjZSwgbnAtJmd0O2Rldi0mZ3Q7ZGV2X2FkZHIpOwogCWV0aGVyX2FkZHJfY29weShldGgtJmd0O2hfZGVzdCwgbnQtJmd0O3JlbW90ZV9tYWMpOwotCWlmIChudC0mZ3Q7aXB2NikKJiM0MzsJaWYgKG50LSZndDtyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KQogCQlldGgtJmd0O2hfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTsKIAllbHNlCiAJCWV0aC0mZ3Q7aF9wcm90byA9IGh0b25zKEVUSF9QX0lQKTsKQEAgLTIxNzEsNyAmIzQzOzIxNjIsNyBAQCBzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLAogCQlXQVJOX09OX09OQ0UoIWlycXNfZGlzYWJsZWQoKSk7CiAKIAl1ZHBfbGVuID0gbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKLQlpZiAobnQtJmd0O2lwdjYpCiYjNDM7CWlmIChudC0mZ3Q7cmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNikKIAkJaXBfbGVuID0gdWRwX2xlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpOwogCWVsc2UKIAkJaXBfbGVuID0gdWRwX2xlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwaGRyKTsKQEAgLTIxODcsNyAmIzQzOzIxNzgsNyBAQCBzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLAogCXNrYl9wdXQoc2tiLCBsZW4pOwogCiAJcHVzaF91ZHAobnQsIHNrYiwgbGVuKTsKLQlpZiAobnQtJmd0O2lwdjYpCiYjNDM7CWlmIChudC0mZ3Q7cmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNikKIAkJcHVzaF9pcHY2KG50LCBza2IsIGxlbik7CiAJZWxzZQogCQlwdXNoX2lwdjQobnQsIHNrYiwgbGVuKTsKQEAgLTI1MDcsMTAgJiM0MzsyNDk4LDggQEAgX19yZWxlYXNlcygmYW1wO3RhcmdldF9saXN0X2xvY2spCiBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KQogewogCXN0cnVjdCBuZXRwb2xsICpucCA9ICZhbXA7bnQtJmd0O25wOwotCWJvb2wgaXB2ZXJzaW9uX3NldCA9IGZhbHNlOwogCWNoYXIgKmN1ciA9IG9wdDsKIAljaGFyICpkZWxpbTsKLQlpbnQgaXB2NjsKIAogCWlmICgqY3VyICE9ICYjMzk7QCYjMzk7KSB7CiAJCWRlbGltID0gc3RyY2hyKGN1ciwgJiMzOTtAJiMzOTspOwpAQCAtMjUyNCwxNiAmIzQzOzI1MTMsMTIgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdCkKIAljdXImIzQzOyYjNDM7OwogCiAJaWYgKCpjdXIgIT0gJiMzOTsvJiMzOTspIHsKLQkJaXB2ZXJzaW9uX3NldCA9IHRydWU7CiAJCWRlbGltID0gc3RyY2hyKGN1ciwgJiMzOTsvJiMzOTspOwogCQlpZiAoIWRlbGltKQogCQkJZ290byBwYXJzZV9mYWlsZWQ7CiAJCSpkZWxpbSA9IDA7Ci0JCWlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCAmYW1wO250LSZndDtsb2NhbF9pcCk7Ci0JCWlmIChpcHY2ICZsdDsgMCkKJiM0MzsJCWlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCAmYW1wO250LSZndDtsb2NhbF9pcCkgJmx0OyAwKQogCQkJZ290byBwYXJzZV9mYWlsZWQ7Ci0JCWVsc2UKLQkJCW50LSZndDtpcHY2ID0gKGJvb2wpaXB2NjsKIAkJY3VyID0gZGVsaW07CiAJfQogCWN1ciYjNDM7JiM0Mzs7CkBAIC0yNTc1LDEzICYjNDM7MjU2MCwxMSBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KQogCWlmICghZGVsaW0pCiAJCWdvdG8gcGFyc2VfZmFpbGVkOwogCSpkZWxpbSA9IDA7Ci0JaXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsICZhbXA7bnQtJmd0O3JlbW90ZV9pcCk7Ci0JaWYgKGlwdjYgJmx0OyAwKQomIzQzOwlpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgJmFtcDtudC0mZ3Q7cmVtb3RlX2lwKSAmbHQ7IDApCiAJCWdvdG8gcGFyc2VfZmFpbGVkOwotCWVsc2UgaWYgKGlwdmVyc2lvbl9zZXQgJmFtcDsmYW1wOyBudC0mZ3Q7aXB2NiAhPSAoYm9vbClpcHY2KQomIzQzOwlpZiAobnQtJmd0O2xvY2FsX2lwLmZhbWlseSAhPSBBRl9VTlNQRUMgJmFtcDsmYW1wOwomIzQzOwkgICAgbnQtJmd0O2xvY2FsX2lwLmZhbWlseSAhPSBudC0mZ3Q7cmVtb3RlX2lwLmZhbWlseSkKIAkJZ290byBwYXJzZV9mYWlsZWQ7Ci0JZWxzZQotCQludC0mZ3Q7aXB2NiA9IChib29sKWlwdjY7CiAJY3VyID0gZGVsaW0gJiM0MzsgMTsKIAogCWlmICgqY3VyICE9IDApIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oIGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmgKaW5kZXggMWM2YjFlZWM1ZWZkNi4uZGU5N2YwMDFhMGY5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmgKQEAgLTE2LDkgJiM0MzsxNiwxMyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2lwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdWRwLmgmZ3Q7CiAKLXVuaW9uIGluZXRfYWRkciB7Ci0JX19iZTMyCQlpcDsKLQlzdHJ1Y3QgaW42X2FkZHIJaW42OwomIzQzO3N0cnVjdCBpbmV0X2FkZHIgewomIzQzOwkvKiBBZGRyZXNzIGZhbWlseTogQUZfVU5TUEVDIHdoZW4gdW5zZXQsIGVsc2UgQUZfSU5FVCBvciBBRl9JTkVUNiAqLwomIzQzOwl1OAkJCWZhbWlseTsKJiM0MzsJdW5pb24gewomIzQzOwkJX19iZTMyCQlpcDsKJiM0MzsJCXN0cnVjdCBpbjZfYWRkcglpbjY7CiYjNDM7CX07CiB9OwogCiBzdHJ1Y3QgbmV0cG9sbCB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyODkKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXRjb25zb2xlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0Y29uc29sZS5jYCBhbmQgYG5ldHBvbGwuaGAuIFNlZW1zIGxpa2UgdGhleSYjMzk7cmUgbWFraW5nIGEgcHJldHR5IGZ1bmRhbWVudGFsIGNoYW5nZSDigJMgcmVwbGFjaW5nIHRoYXQgb2xkIGB1bmlvbiBpbmV0X2FkZHJgIHdpdGggYSBtb3JlIGV4cGxpY2l0IGBzdHJ1Y3QgaW5ldF9hZGRyYC4gR29vZCBtb3ZlLCBhY3R1YWxseTsgYWRkaW5nIHRoYXQgYGZhbWlseWAgZmllbGQgKEFGX1VOU1BFQywgQUZfSU5FVCwgQUZfSU5FVDYpIGlzIGdvaW5nIHRvIG1ha2UgdGhlIGNvZGUgbXVjaCBjbGVhcmVyIGFuZCBsZXNzIHByb25lIHRvIGVycm9ycywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBJUHY2LiBMb29rcyBsaWtlIHRoZXkmIzM5O3ZlIHJlbW92ZWQgdGhlIGBpcHY2YCBib29sZWFuIGZyb20gYG5ldGNvbnNvbGVfdGFyZ2V0YCB0b28sIHdoaWNoIGlzIGxvZ2ljYWwgZ2l2ZW4gdGhlIG5ldyBgZmFtaWx5YCBmaWVsZC4gVGhleSYjMzk7dmUgdXBkYXRlZCB0aGUgcGFyc2luZyBhbmQgc2V0dXAgbG9naWMsIHdoaWNoIEkmIzM5O2xsIG5lZWQgdG8gcmV2aWV3IGNhcmVmdWxseSB0byBlbnN1cmUgdGhlIHRyYW5zaXRpb24gaXMgY2xlYW4gYW5kIGVmZmljaWVudC4KCkZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIHNpZ25pZmljYW50IGNoYW5nZSB0byB0aGUgbmV0Y29uc29sZSBkcml2ZXIuIEdpdmVuIHRoYXQgbmV0Y29uc29sZSBpcyBhIGNyaXRpY2FsIGRlYnVnZ2luZyBhbmQgcmVjb3ZlcnkgdG9vbCwgSSBzaG91bGQgY29uc2lkZXIgdGhlIGltcGFjdCBjYXJlZnVsbHkuIFRoZSBuZXRjb25zb2xlIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUsIHNvIEkgc2hvdWxkIGJlIGFibGUgdG8gdmVyaWZ5IHRoYXQgdGhlIGNoYW5nZSBkb2VzbiYjMzk7dCBicmVhayBhbnl0aGluZy4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyBuZWVkZWQgZm9yIHRoaXMgdG8gd29yay4gSSBhbHJlYWR5IGtub3cgdGhhdCBgQ09ORklHX05FVENPTlNPTEVgIGlzIHJlcXVpcmVkLCBzbyBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIGxvb2sgaW4gS2NvbmZpZyB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgbmV3IG9yIGNoYW5nZWQgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRDT05TT0xFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MzE4PWNvbmZpZyBNQUNTRUNcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyNi1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzI3OmNvbmZpZyBORVRDT05TT0xFXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyOC1cdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzMy1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzM0OmNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcbmRyaXZlcnMvbmV0L0tjb25maWctMzM1LVx0Ym9vbCBcJiMzNDtEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0NC1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzQ1OmNvbmZpZyBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDYtXHRib29sIFwmIzM0O1NldCBrZXJuZWwgZXh0ZW5kZWQgbWVzc2FnZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNTQtXG5kcml2ZXJzL25ldC9LY29uZmlnOjM1NTpjb25maWcgTkVUQ09OU09MRV9QUkVQRU5EX1JFTEVBU0VcbmRyaXZlcnMvbmV0L0tjb25maWctMzU2LVx0Ym9vbCBcJiMzNDtQcmVwZW5kIGtlcm5lbCByZWxlYXNlIHZlcnNpb24gaW4gdGhlIG1lc3NhZ2UgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMDYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGJyYWluIHplcm9lcyBpbiBvbiB0aGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQ6IGBORVRDT05TT0xFYCBhbmQgYE5FVENPTlNPTEVfRFlOQU1JQ2AuIE15IGd1dCB0ZWxscyBtZSB0aGF0IGBORVRDT05TT0xFX0RZTkFNSUNgIGlzIHByb2JhYmx5IHRoZSBrZXkgb25lIGhlcmUsIHNpbmNlIGl0IGRlYWxzIHdpdGggdGhvc2Ugc3lzZnMgY29uZmlnIGl0ZW1zLgoKTm93LCB0aGUgcGF0Y2ggdG91Y2hlcyBgbG9jYWxfaXBfc3RvcmVgIGFuZCBgcmVtb3RlX2lwX3N0b3JlYCwgd2hpY2ggcmluZ3MgYSBiZWxsLiBUaG9zZSBmdW5jdGlvbnMgYXJlIGludGltYXRlbHkgbGlua2VkIHRvIHRoZSBkeW5hbWljIGNvbmZpZ3VyYXRpb24gc3R1ZmYgd2l0aGluIGBORVRDT05TT0xFX0RZTkFNSUNgLiBUbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIHRob3VnaCwgbGV0JiMzOTtzIGp1c3QgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgaW4gYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AuIEkgbmVlZCB0byBjb25maXJtIGlmIGBORVRDT05TT0xFX0RZTkFNSUNgIGlzIGluZGVlZCBhIHByZXJlcXVpc2l0ZSBmb3IgdGhlIHByb3BlciBmdW5jdGlvbmluZyBvZiB0aGVzZSB0d28gZnVuY3Rpb25zLiBJdOKAmXMgYWx3YXlzIGJlc3QgdG8gYmUgcHJlY2lzZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBuZXR3b3JrLXJlbGF0ZWQga2VybmVsIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9jYWxfaXBfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTExODY9c3RhdGljIHNzaXplX3QgcmVtb3RlX3BvcnRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjA3LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyMDg6c3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIwOS1cdFx0c2l6ZV90IGNvdW50KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0MjEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgTmV0d29yayBDb25zb2xlKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIHRoZSBuZXR3b3JrIGNvbnNvbGUsIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBzb3VyY2UgY29kZS4gSSYjMzk7bSBnb2luZyB0byBuYXZpZ2F0ZSBkaXJlY3RseSB0byB0aGUgYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGxpbmUgMTIwOCBpcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4gSXQmIzM5O3Mgb2Z0ZW4gYXQgdGhlc2UgcGl2b3RhbCBwb2ludHMgd2l0aGluIGEgbGFyZ2VyIHBpZWNlIG9mIHNvdXJjZSB0aGF0IHRoZSByZWFsIG1lYXQgb2YgdGhlIG9wZXJhdGlvbiBjYW4gYmUgZm91bmQuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9uYWxpdHkgaXMgaW1wbGVtZW50ZWQgdGhlcmUuIEtub3dpbmcgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgd2lsbCBiZSBrZXksIGJ1dCBzdGFydGluZyB0aGVyZSBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QganVtcGluZy1vZmYgcG9pbnQgdG8gYXNzZXNzIHRoZSBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE4MDpcdFx0cmV0ID0gY291bnQ7XG4xMTgxOlx0b3V0X3VubG9jazpcbjExODI6XHRcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2soKTtcbjExODM6XHRcdHJldHVybiByZXQ7XG4xMTg0Olx0fVxuMTE4NTpcdFxuMTE4NjpcdHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9wb3J0X3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbjExODc6XHRcdFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4xMTg4Olx0e1xuMTE4OTpcdFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbjExOTA6XHRcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbjExOTE6XHRcbjExOTI6XHRcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XG4xMTkzOlx0XHRpZiAobnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkge1xuMTE5NDpcdFx0XHRwcl9lcnIoXCYjMzQ7dGFyZ2V0ICglcykgaXMgZW5hYmxlZCwgZGlzYWJsZSB0byB1cGRhdGUgcGFyYW1ldGVyc1xcblwmIzM0OyxcbjExOTU6XHRcdFx0ICAgICAgIGNvbmZpZ19pdGVtX25hbWUoXHUwMDI2bnQtXHUwMDNlZ3JvdXAuY2dfaXRlbSkpO1xuMTE5NjpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xMTk3Olx0XHR9XG4xMTk4Olx0XG4xMTk5Olx0XHRyZXQgPSBrc3RydG91MTYoYnVmLCAxMCwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX3BvcnQpO1xuMTIwMDpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjEyMDE6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMTIwMjpcdFx0cmV0ID0gY291bnQ7XG4xMjAzOlx0b3V0X3VubG9jazpcbjEyMDQ6XHRcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2soKTtcbjEyMDU6XHRcdHJldHVybiByZXQ7XG4xMjA2Olx0fVxuMTIwNzpcdFxuMTIwODpcdHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuMTIwOTpcdFx0XHRzaXplX3QgY291bnQpXG4xMjEwOlx0e1xuMTIxMTpcdFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbjEyMTI6XHRcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbjEyMTM6XHRcbjEyMTQ6XHRcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XG4xMjE1Olx0XHRpZiAobnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkge1xuMTIxNjpcdFx0XHRwcl9lcnIoXCYjMzQ7dGFyZ2V0ICglcykgaXMgZW5hYmxlZCwgZGlzYWJsZSB0byB1cGRhdGUgcGFyYW1ldGVyc1xcblwmIzM0OyxcbjEyMTc6XHRcdFx0ICAgICAgIGNvbmZpZ19pdGVtX25hbWUoXHUwMDI2bnQtXHUwMDNlZ3JvdXAuY2dfaXRlbSkpO1xuMTIxODpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xMjE5Olx0XHR9XG4xMjIwOlx0XG4xMjIxOlx0XHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApIFx1MDAzYyAwKVxuMTIyMjpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xMjIzOlx0XG4xMjI0Olx0XHRyZXQgPSBjb3VudDtcbjEyMjU6XHRvdXRfdW5sb2NrOlxuMTIyNjpcdFx0ZHluYW1pY19uZXRjb25zb2xlX211dGV4X3VubG9jaygpO1xuMTIyNzpcdFx0cmV0dXJuIHJldDtcbjEyMjg6XHR9XG4xMjI5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM1MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIHdlZWRzIG9mIGtlcm5lbCBuZXR3b3JraW5nIGNvZGU6CgoqKkNoZWNraW5nIHRoZSBTY29wZSBvZiBgbG9jYWxfaXBfc3RvcmVgKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSBwcmV0dHkgc3VyZSBJIHJlbWVtYmVyIGNvbWluZyBhY3Jvc3MgYGxvY2FsX2lwX3N0b3JlYCBpbiB0aGUgbmV0Y29uc29sZSBjb2RlLiBCdXQgd2FpdCwgd2FzIHRoYXQgKmNvbmRpdGlvbmFsbHkqIGNvbXBpbGVkPyBJdCYjMzk7cyBuYWdnaW5nIGF0IG1lIHRoYXQgaXQgbWlnaHQgYmUgdGllZCB0byBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYGxvY2FsX2lwX3N0b3JlYCBpcyBhY3R1YWxseSBkZWZpbmVkIHdpdGhpbiB0aGF0IGAjaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ2AgYmxvY2suIElmIGl0ICppcyogaW5zaWRlIHRoYXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24sIGl0JiMzOTtzIGdvaW5nIHRvIGFmZmVjdCBob3cgSSB1bmRlcnN0YW5kIGl0cyB1c2UgYW5kIGl0cyBwcmVzZW5jZSBpbiB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlLiBJIG5lZWQgdG8gY29uZmlybSBpZiBpdCYjMzk7cyB0aGVyZSBvciBub3QsIGJlY2F1c2UgdGhhdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTk1PXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk2LVx0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxOTc6I2lmZGVmXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk4LVx0c3RydWN0IGNvbmZpZ19ncm91cFx0Z3JvdXA7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyNS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjY6I2lmZGVmXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjI3LVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNjU9c3RhdGljIHZvaWQgZHluYW1pY19uZXRjb25zb2xlX211dGV4X3VubG9jayh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjktXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjcwOiNlbHNlXHQvKiAhQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3MS1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MzAyPXN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2sodm9pZClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzA1LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjMwNjojZW5kaWZcdC8qIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMDctXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTcyNz1zdGF0aWMgaW50IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBpbmV0X2FkZHIgKmFkZHIpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTc1NC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3NTU6I2lmZGVmXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzU2LVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xODc0PXN0YXRpYyBpbnQgcHJlcGFyZV9zeXNkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4OTYtfVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4OTc6I2VuZGlmXHQvKiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg5OC1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjE1ND1zdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTk4LSAqIG9jY3VycmVkIGl0IGluY3JlbWVudHMgc3RhdGlzdGljcyBpbiBudC1cdTAwM2VzdGF0cyBhY2NvcmRpbmdseS5cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTk5OiAqIE9ubHkgY2FsbHMgbmV0cG9sbF9zZW5kX3VkcCBpZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDIGlzIGRpc2FibGVkLlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDAtICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjIwMT1zdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDQtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIwNTpcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMpKSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIwNi1cdFx0aWYgKHJlc3VsdCA9PSBORVRfWE1JVF9EUk9QKSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIyMTg9c3RhdGljIHZvaWQgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjI2LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMjc6I2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjI4LVx0dXNlcmRhdGEgPSBudC1cdTAwM2V1c2VyZGF0YTtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjI2Mz1zdGF0aWMgdm9pZCBzZW5kX2ZyYWdtZW50ZWRfYm9keShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjc0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyNzU6I2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjc2LVx0dXNlcmRhdGFfcHRyID0gbnQtXHUwMDNldXNlcmRhdGE7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIzOTk9c3RhdGljIHZvaWQgc2VuZF9leHRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDA2LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0MDc6I2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDA4LVx0c3lzZGF0YV9sZW4gPSBwcmVwYXJlX3N5c2RhdGEobnQsIHdjdHh0KTtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjU4Nj1zdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19wYXJhbV90YXJnZXQoY2hhciAqdGFyZ2V0X2NvbmZpZyxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYyOS1cdFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjYzMDpcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMpKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2MzEtXHRcdFx0Lyogb25seSBmYWlsIGlmIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIGlzIHNldCxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjY0OD1zdGF0aWMgdm9pZCBmcmVlX3BhcmFtX3RhcmdldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjUzLVx0bmV0cG9sbF9jbGVhbnVwKFx1MDAyNm50LVx1MDAzZW5wKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjU0OiNpZmRlZlx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NTUtXHRrZnJlZShudC1cdTAwM2V1c2VyZGF0YSk7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI2Nzg9c3RhdGljIGludCBfX2luaXQgaW5pdF9uZXRjb25zb2xlKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2OTEtXHRcdFx0aWYgKElTX0VSUihudCkpIHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjkyOlx0XHRcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQykpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY5My1cdFx0XHRcdFx0Y29udGludWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5NDEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXRjb25zb2xlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgY29uZmlybWluZyB0aGF0IGBsb2NhbF9pcF9zdG9yZWAgaXMgaW5kZWVkIG5lc3RlZCB3aXRoaW4gdGhhdCBgI2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNgIGJsb2NrLCB3aGljaCwgYXMgSSByZWNhbGwsIHNwYW5zIGEgcHJldHR5IHNpZ25pZmljYW50IGNodW5rIG9mIGNvZGUsIGZyb20gbGluZXMgNzU1IHRvIDE4OTcuIFRoZXJlZm9yZSwgdG8gbWFrZSB0aGF0IGZ1bmN0aW9uYWxpdHkgYWNjZXNzaWJsZSwgYE5FVENPTlNPTEVfRFlOQU1JQ2AgaXMgZ29pbmcgdG8gYmUgYSByZXF1aXJlbWVudC4gQnV0LCBJIG5lZWQgdG8gYmUgbW9yZSB0aG9yb3VnaCBoZXJlIGFuZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3VyYXRpb25zIG5lZWRlZC4gV2FpdCBhIG1pbnV0ZSwgSSBuZWVkIGBORVRDT05TT0xFYCBpdHNlbGYuCgpJIGFsc28gc2VlIHRoYXQgYENPTkZJR19JUFY2YCBpcyBiZWluZyBjaGVja2VkIHdpdGhpbiBgbmV0cG9sbF9wYXJzZV9pcF9hZGRyYCwgc3BlY2lmaWNhbGx5OgoKYGBgYwoJaWYgKElTX0VOQUJMRUQoQ09ORklHX0lQVjYpICZhbXA7JmFtcDsKCSAgICBpbjZfcHRvbihzdHIsIGxlbiwgKHZvaWQgKikmYW1wO2FkZHItJmd0O2luNiwgLTEsICZhbXA7ZW5kKSAmZ3Q7IDAgJmFtcDsmYW1wOwoJICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICYjMzk7XG4mIzM5OykpIHsKCQlhZGRyLSZndDtmYW1pbHkgPSBBRl9JTkVUNjsKCQlyZXR1cm4gMDsKCX0KYGBgCgpTbywgaWYgc29tZW9uZSB3YW50cyB0byB0ZXN0IG91dCB0aGUgSVB2NiBmdW5jdGlvbmFsaXR5LCB0aGVuIGl0IHdpbGwgcmVxdWlyZSBgSVBWNmAgYXMgd2VsbC4gUmlnaHQsIG5vdyBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYENPTkZJR19ORVRDT05TT0xFYCBkaXJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVENPTlNPTEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MzE4PWNvbmZpZyBNQUNTRUNcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyNi1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzI3OmNvbmZpZyBORVRDT05TT0xFXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyOC1cdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzMy1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzM0OmNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcbmRyaXZlcnMvbmV0L0tjb25maWctMzM1LVx0Ym9vbCBcJiMzNDtEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0NC1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzQ1OmNvbmZpZyBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDYtXHRib29sIFwmIzM0O1NldCBrZXJuZWwgZXh0ZW5kZWQgbWVzc2FnZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNTQtXG5kcml2ZXJzL25ldC9LY29uZmlnOjM1NTpjb25maWcgTkVUQ09OU09MRV9QUkVQRU5EX1JFTEVBU0VcbmRyaXZlcnMvbmV0L0tjb25maWctMzU2LVx0Ym9vbCBcJiMzNDtQcmVwZW5kIGtlcm5lbCByZWxlYXNlIHZlcnNpb24gaW4gdGhlIG1lc3NhZ2UgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDcwOQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnkgZm9yIGFuIGV4cGVydDoKCioqRGl2aW5nIGludG8gdGhlIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGRyaXZlcnMvbmV0L0tjb25maWdgIGZpbGUuIEkmIzM5O20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDMyNyDigJMgdGhhdCYjMzk7cyBvZnRlbiB3aGVyZSB0aGUganVpY3kgYml0cyBhcmUsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggY29yZSBuZXR3b3JraW5nIGZlYXR1cmVzIG9yIHBlcmhhcHMgYSBzcGVjaWZpYyBkcml2ZXIgSSYjMzk7bSB0cnlpbmcgdG8gdW5kZXJzdGFuZC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgYSBoaWdoLWxldmVsIG92ZXJ2aWV3IG9mIGF2YWlsYWJsZSBuZXR3b3JrIGZlYXR1cmVzLCBwZXJoYXBzIHNvbWUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgb3IgbWF5YmUgZXZlbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhIHBhcnRpY3VsYXIgbmV0d29yayBkcml2ZXIgb3IgdGVjaG5vbG9neS4gVGltZSB0byBjcmFjayBpdCBvcGVuIGFuZCBzZWUgd2hhdCByZXZlbGF0aW9ucyBsaW5lIDMyNyBob2xkcyEgTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzIwOlx0XHRzZWxlY3QgQ1JZUFRPXG4gMzIxOlx0XHRzZWxlY3QgQ1JZUFRPX0FFU1xuIDMyMjpcdFx0c2VsZWN0IENSWVBUT19HQ01cbiAzMjM6XHRcdHNlbGVjdCBHUk9fQ0VMTFNcbiAzMjQ6XHRcdGhlbHBcbiAzMjU6XHRcdCAgIE1BQ3NlYyBpcyBhbiBlbmNyeXB0aW9uIHN0YW5kYXJkIGZvciBFdGhlcm5ldC5cbiAzMjY6XHRcbiAzMjc6XHRjb25maWcgTkVUQ09OU09MRVxuIDMyODpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0d29yayBjb25zb2xlIGxvZ2dpbmcgc3VwcG9ydFwmIzM0O1xuIDMyOTpcdFx0ZGVwZW5kcyBvbiBQUklOVEtcbiAzMzA6XHRcdGhlbHBcbiAzMzE6XHRcdCAgSWYgeW91IHdhbnQgdG8gbG9nIGtlcm5lbCBtZXNzYWdlcyBvdmVyIHRoZSBuZXR3b3JrLCBlbmFibGUgdGhpcy5cbiAzMzI6XHRcdCAgU2VlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XHUwMDNlIGZvciBkZXRhaWxzLlxuIDMzMzpcdFxuIDMzNDpcdGNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcbiAzMzU6XHRcdGJvb2wgXCYjMzQ7RHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgbG9nZ2luZyB0YXJnZXRzXCYjMzQ7XG4gMzM2Olx0XHRkZXBlbmRzIG9uIE5FVENPTlNPTEUgXHUwMDI2XHUwMDI2IFNZU0ZTIFx1MDAyNlx1MDAyNiBDT05GSUdGU19GUyBcdTAwMjZcdTAwMjYgXFxcbiAzMzc6XHRcdFx0XHQhKE5FVENPTlNPTEU9eSBcdTAwMjZcdTAwMjYgQ09ORklHRlNfRlM9bSlcbiAzMzg6XHRcdHNlbGVjdCBQUklOVEtfRVhFQ1VUSU9OX0NUWFxuIDMzOTpcdFx0aGVscFxuIDM0MDpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBhYmlsaXR5IHRvIGR5bmFtaWNhbGx5IHJlY29uZmlndXJlIHRhcmdldFxuIDM0MTpcdFx0ICBwYXJhbWV0ZXJzIChpbnRlcmZhY2UsIElQIGFkZHJlc3NlcywgcG9ydCBudW1iZXJzLCBNQUMgYWRkcmVzc2VzKVxuIDM0MjpcdFx0ICBhdCBydW50aW1lIHRocm91Z2ggYSB1c2Vyc3BhY2UgaW50ZXJmYWNlIGV4cG9ydGVkIHVzaW5nIGNvbmZpZ2ZzLlxuIDM0MzpcdFx0ICBTZWUgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcdTAwM2UgZm9yIGRldGFpbHMuXG4gMzQ0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzAyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0Y29uc29sZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBORVRDT05TT0xFYCBtb2R1bGUgYW5kIGhvdyBpdCYjMzk7cyBjb25maWd1cmVkLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgTkVUQ09OU09MRWAgZGVwZW5kcyBvbiBgUFJJTlRLYCwgYW5kIGBORVRDT05TT0xFX0RZTkFNSUNgIGRlcGVuZHMgb24gYE5FVENPTlNPTEVgLCBgU1lTRlNgLCBhbmQgYENPTkZJR0ZTX0ZTYC4gUmlnaHQsIHNvIHRvIGdldCBldmVyeXRoaW5nIHdvcmtpbmcsIEkgbmVlZCB0byBlbmFibGUgYE5FVENPTlNPTEVgLCBgTkVUQ09OU09MRV9EWU5BTUlDYCwgYENPTkZJR0ZTX0ZTYCwgYW5kIGBJUFY2YCwgbmF0dXJhbGx5LiBUaGF0IHNlZW1zIGxvZ2ljYWwuCgpOb3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY3JpdGljYWwgc3ltYm9scyBtb2RpZmllZCBieSB0aGlzIHBhdGNoIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMuIExldCYjMzk7cyBzZWUuLi4gaXQgYWZmZWN0cyBgbmV0Y29uc190YWtlX2lwdjZgLCBgbmV0Y29uc190YWtlX2lwdjRgLCBgbmV0Y29uc19uZXRwb2xsX3NldHVwYCwgYG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyYCwgYG5ldHBvbGxfcGFyc2VfaXBfYWRkcmAsIGFuZCB0aGVuIHRoZSBzeXNmcyBpbnRlcmZhY2UgYml0czogYGxvY2FsX2lwX3Nob3dgLCBgcmVtb3RlX2lwX3Nob3dgLCBgbG9jYWxfaXBfc3RvcmVgLCBgcmVtb3RlX2lwX3N0b3JlYC4gSSBzZWUgYG5ldHBvbGxfdWRwX2NoZWNrc3VtYCwgYHB1c2hfZXRoYCwgYW5kIGBuZXRwb2xsX3NlbmRfdWRwYCBhcyB3ZWxsLiBUaGUgcGFyc2VyIGFuZCBjb21tYW5kLWxpbmUgcGFyc2luZyBpcyB0aGVyZSB0b286IGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYC4KCkFscmlnaHQsIHRoZSBjb3JlIGZ1bmN0aW9ucyBJJiMzOTttIGludGVyZXN0ZWQgaW4sIGJhc2VkIG9uIHRob3NlIG1vZGlmaWNhdGlvbnMsIGFyZTogYGxvY2FsX2lwX3N0b3JlYCwgYHJlbW90ZV9pcF9zdG9yZWAsIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYCwgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAsIGFuZCBgbmV0cG9sbF9zZW5kX3VkcGAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGZvY3VzIGFyZWFzIG9mIHRoZSBjaGFuZ2UuCgpXYWl0IGEgc2Vjb25kLCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgYWJvdXQgdGhpcyBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAgZnVuY3Rpb24uIElzIGl0IHN0YXRpYz8gWWVzLCBpdCYjMzk7cyBzdGF0aWMuIEhtbS4uLiBhY2NvcmRpbmcgdG8gdGhlIGd1aWRlbGluZXMsIEkgc2hvdWxkIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIGRpZyBkZWVwZXIuIFdoYXQgY2FsbHMgYGxvY2FsX2lwX3N0b3JlYD8gQWgsIGl0JiMzOTtzIGEgc3lzZnMvY29uZmlnZnMgc3RvcmUgZnVuY3Rpb24uIFVzdWFsbHkgdGhvc2UgYXJlIHN0YXRpYywgYnV0IEkgYmV0IHRoZXkgYXJlIHJlZ2lzdGVyZWQgdXNpbmcgdGhvc2UgbWFjcm9zLiBUaW1lIHRvIGNoZWNrIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgIGZvciB0aG9zZSBjb25maWdmcyBtYWNyb3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR0ZTX0FUVFImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE1Mjc9c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9jcHVfbnJfZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1NTktXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU2MDpDT05GSUdGU19BVFRSKHVzZXJkYXR1bV8sIHZhbHVlKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTYxOkNPTkZJR0ZTX0FUVFIoc3lzZGF0YV8sIGNwdV9ucl9lbmFibGVkKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTYyOkNPTkZJR0ZTX0FUVFIoc3lzZGF0YV8sIHRhc2tuYW1lX2VuYWJsZWQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1NjM6Q09ORklHRlNfQVRUUihzeXNkYXRhXywgcmVsZWFzZV9lbmFibGVkKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTY0OkNPTkZJR0ZTX0FUVFIoc3lzZGF0YV8sIG1zZ2lkX2VuYWJsZWQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1NjUtXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2MzY9c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIHVzZXJkYXRhX3R5cGUgPSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2NDItXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY0MzpDT05GSUdGU19BVFRSKCwgZW5hYmxlZCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY0NDpDT05GSUdGU19BVFRSKCwgZXh0ZW5kZWQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NDU6Q09ORklHRlNfQVRUUigsIGRldl9uYW1lKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjQ2OkNPTkZJR0ZTX0FUVFIoLCBsb2NhbF9wb3J0KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjQ3OkNPTkZJR0ZTX0FUVFIoLCByZW1vdGVfcG9ydCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY0ODpDT05GSUdGU19BVFRSKCwgbG9jYWxfaXApO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NDk6Q09ORklHRlNfQVRUUigsIHJlbW90ZV9pcCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY1MDpDT05GSUdGU19BVFRSX1JPKCwgbG9jYWxfbWFjKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjUxOkNPTkZJR0ZTX0FUVFIoLCByZW1vdGVfbWFjKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjUyOkNPTkZJR0ZTX0FUVFIoLCByZWxlYXNlKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjUzOkNPTkZJR0ZTX0FUVFJfUk8oLCB0cmFuc21pdF9lcnJvcnMpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2NTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzMxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBDb25maWd1cmF0aW9uIEV4cG9zdXJlKioKCkFscmlnaHQsIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBsb2NhbF9pcF9zdG9yZWAgaXMgYmVpbmcgZXhwb3NlZCB0aHJvdWdoIGNvbmZpZ2ZzLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgYW5kIGl0IGFsaWducyB3aXRoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSYjMzk7cyBhcmNoaXRlY3R1cmUuIE5vdywgdGhlIG1vcmUgaW50ZXJlc3RpbmcgcXVlc3Rpb24gaXMgYXJvdW5kIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYC4gV2hlcmUgaXMgdGhhdCBiZWluZyBjYWxsZWQ/IFdoYXQmIzM5O3MgdGhlIGNvbnRleHQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGNoYWluIHRvIHJlYWxseSBnYXVnZSBpdHMgaW1wYWN0IGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBUcmFjaW5nIHRoZSBvcmlnaW4gb2YgdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGNhbGwgaXMgZ29pbmcgdG8gYmUga2V5IHRvIGV2YWx1YXRpbmcgdGhlIG92ZXJhbGwgcGljdHVyZS4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmlndXJlIG91dCB0aGUgcGFyZW50IGNhbGxzIGFuZCB0aGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0Y29uc29sZV9wYXJzZXJfY21kbGluZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9OTg2PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDM0LVx0XHQvKlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwMzU6XHRcdCAqIFNraXAgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZSgpIC0tIGFsbCB0aGUgYXR0cmlidXRlcyBhcmVcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDM2LVx0XHQgKiBhbHJlYWR5IGNvbmZpZ3VyZWQgdmlhIGNvbmZpZ2ZzLiBKdXN0IHByaW50IHRoZW0gb3V0LlxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNDkzPV9fcmVsZWFzZXMoXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaylcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ5Ny1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDk4OnN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ5OS17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI1ODY9c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2MTMtXHQvKiBQYXJzZSBwYXJhbWV0ZXJzIGFuZCBzZXR1cCBuZXRwb2xsICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjYxNDpcdGVyciA9IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUobnQsIHRhcmdldF9jb25maWcpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2MTUtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI3OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoYXQgc25pcHBldDoKCioqRGVlcCBEaXZlIGludG8gUGFyYW1ldGVyIEFsbG9jYXRpb24gYW5kIE5ldHdvcmsgQ29uc29sZSBQYXJzaW5nKioKCk9rYXksIHNvIGBhbGxvY19wYXJhbV90YXJnZXRgIGlzIGJlaW5nIGNhbGxlZCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBJIGtub3cgdGhhdCBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyBtZW1vcnkgZm9yIGNvbW1hbmQtbGluZSBwYXJhbWV0ZXJzLiBBbmQgc3BlY2lmaWNhbGx5LCBpdCBhcHBlYXJzIGl0JiMzOTtzIGRpcmVjdGx5IGxpbmtlZCB0byBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgdGhlIG5ldHdvcmsgY29uc29sZSBzZXR1cCwgYXMgdGhhdCYjMzk7cyB0aGUgcHJpbWFyeSBjb250ZXh0IGZvciB0aGUgYG5ldGNvbnNvbGVgIGNhbGxzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24sIG9mIGNvdXJzZSwgaXM6ICpXaGF0KiBpcyBhY3R1YWxseSBjYWxsaW5nIGBhbGxvY19wYXJhbV90YXJnZXRgIGluIHRoZSBmaXJzdCBwbGFjZT8gS25vd2luZyB0aGUgY2FsbGVyIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGVudGlyZSBmbG93IGFuZCBwdXJwb3NlIG9mIHRoaXMgYWxsb2NhdGlvbi4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGNhbGwgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGRhdGEgaXMgY29taW5nIGZyb20gYW5kIHdoYXQmIzM5O3MgdHJpZ2dlcmluZyB0aGUgYWxsb2NhdGlvbi4gSXMgaXQgYSBtb2R1bGUgaW5pdGlhbGl6YXRpb24sIGNvbW1hbmQtbGluZSBwYXJzaW5nIGF0IGJvb3QsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaW1lIHRvIGRpZyBkZWVwZXIgYW5kIGZpbmQgdGhhdCBjYWxsaW5nIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19wYXJhbV90YXJnZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI0OTg9c3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjU4NS0vKiBBbGxvY2F0ZSBuZXcgdGFyZ2V0IChmcm9tIGJvb3QvbW9kdWxlIHBhcmFtKSBhbmQgc2V0dXAgbmV0cG9sbCBmb3IgaXQgKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNTg2OnN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX3BhcmFtX3RhcmdldChjaGFyICp0YXJnZXRfY29uZmlnLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1ODctXHRcdFx0XHRcdFx0ICAgIGludCBjbWRsaW5lX2NvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNjc4PXN0YXRpYyBpbnQgX19pbml0IGluaXRfbmV0Y29uc29sZSh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjg5LVx0XHR3aGlsZSAoKHRhcmdldF9jb25maWcgPSBzdHJzZXAoXHUwMDI2aW5wdXQsIFwmIzM0OztcJiMzNDspKSkge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2OTA6XHRcdFx0bnQgPSBhbGxvY19wYXJhbV90YXJnZXQodGFyZ2V0X2NvbmZpZywgY291bnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2OTEtXHRcdFx0aWYgKElTX0VSUihudCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3OTIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldGNvbnNvbGUgTW9kdWxlIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIGBhbGxvY19wYXJhbV90YXJnZXRgIGlzIGluaXRpYXRlZCBmcm9tIGBpbml0X25ldGNvbnNvbGVgLCB3aGljaCBpcyB0aGUgbW9kdWxlJiMzOTtzIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLiBUaGF0IG1lYW5zIGl0IG9ubHkgZ2V0cyBjYWxsZWQgYXQgbW9kdWxlIGxvYWQgdGltZSBvciBkdXJpbmcgdGhlIGJvb3QgcHJvY2Vzcy4gSG1tLCBjb3VsZCB3ZSBhY3R1YWxseSBmdXp6IG1vZHVsZSBsb2FkIHBhcmFtZXRlcnM/IEludGVyZXN0aW5nIHRob3VnaHQuLi4gWWVzLCBzeXprYWxsZXIgZG9lcyBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIGZ1enogbW9kdWxlIHBhcmFtZXRlcnMhIEhvd2V2ZXIsIHRoaW5raW5nIG1vcmUgYWJvdXQgaXQsIGBsb2NhbF9pcF9zdG9yZWAgYW5kIGByZW1vdGVfaXBfc3RvcmVgIHNlZW0gbGlrZSBiZXR0ZXIgdGFyZ2V0cyBmb3IgZnV6emluZyBzaW5jZSB0aG9zZSBjYW4gYmUgaW52b2tlZCBtb3JlIGR5bmFtaWNhbGx5IHRocm91Z2ggY29uZmlnZnMuIFRoYXQgb2ZmZXJzIGEgbXVjaCByaWNoZXIgYXR0YWNrIHN1cmZhY2UuIEFuZCwgd2FpdC4uLiBpc24mIzM5O3QgYGVuYWJsZWRfc3RvcmVgIHBvdGVudGlhbGx5IGNhbGxpbmcgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGA/IEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGBlbmFibGVkX3N0b3JlYCBtb3JlIGNsb3NlbHk7IHRoYXQgc291bmRzIHByb21pc2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW5hYmxlZF9zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9OTY2PXN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfbXNnaWRfZW5hYmxlZF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTg1LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjk4NjpzdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05ODctXHRcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNDMyPXN0YXRpYyB2b2lkIGRpc2FibGVfc3lzZGF0YV9mZWF0dXJlKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0MzgtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTQzOTpzdGF0aWMgc3NpemVfdCBzeXNkYXRhX21zZ2lkX2VuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0NDAtXHRcdFx0XHRcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDY3LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE0Njg6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9yZWxlYXNlX2VuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0NjktXHRcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0OTYtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTQ5NzpzdGF0aWMgc3NpemVfdCBzeXNkYXRhX3Rhc2tuYW1lX2VuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0OTgtXHRcdFx0XHRcdCAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTI2LS8qIGNvbmZpZ2ZzIGhlbHBlciB0byBzeXNkYXRhIGNwdV9uciBmZWF0dXJlICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTUyNzpzdGF0aWMgc3NpemVfdCBzeXNkYXRhX2NwdV9ucl9lbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTI4LVx0XHRcdFx0XHQgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTg4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBjb2RlLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGl0OgoKKipBbmFseXppbmcgdGhlIGBlbmFibGVkX3N0b3JlYCBDYWxscyoqCgpBbHJpZ2h0LCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHVuZGVyc3RhbmQgdGhlIGJlaGF2aW9yIG9mIHRoaXMgY29kZSwgYW5kIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHRoYXQgaXMgYnkgZmlndXJpbmcgb3V0IGhvdyB0aGUgYGVuYWJsZWRfc3RvcmVgIGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQuIEkgbmVlZCB0byB0cmFjZSBldmVyeSBzaW5nbGUgaW5zdGFuY2Ugd2hlcmUgYGVuYWJsZWRfc3RvcmVgIGlzIGNhbGxlZC4gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBicmFuY2hlcyB0aGF0IGNoYW5nZSBob3cgYGVuYWJsZWRfc3RvcmVgIGlzIHV0aWxpemVkPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcGVyZm9ybWFuY2Ugb3IgdGhyZWFkaW5nIGNvbnNpZGVyYXRpb25zIGFzIGEgcmVzdWx0PyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGl0cyB1c2FnZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8ga25vdzogd2hhdCBkYXRhIGlzIHBhc3NlZCB0byBpdD8gV2hhdCBpcyBpdCBkb2luZyB3aXRoIHRoYXQgZGF0YT8gQW5kIGltcG9ydGFudGx5LCB3aGF0IGFyZSB0aGUgcmV0dXJuIHZhbHVlcyBvZiB0aGVzZSBjYWxscz8gVGhpcyB3aWxsIGhlbHAgbWUgcXVpY2tseSB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIHJlc3BvbnNpYmlsaXRpZXMsIGFuZCB0aGUgb3ZlcmFsbCByb2xlIGl0IHBsYXlzIGluIHRoZSBjb2RlLiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIGJlZm9yZSBJIGNhbiBldmFsdWF0ZSB0aGlzIGVmZmljaWVudGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk4NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTg2Olx0c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4gOTg3Olx0XHRcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuIDk4ODpcdHtcbiA5ODk6XHRcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG4gOTkwOlx0XHRib29sIGVuYWJsZWQsIGN1cnJlbnRfZW5hYmxlZDtcbiA5OTE6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gOTkyOlx0XHRzc2l6ZV90IHJldDtcbiA5OTM6XHRcbiA5OTQ6XHRcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XG4gOTk1Olx0XHRyZXQgPSBrc3RydG9ib29sKGJ1ZiwgXHUwMDI2ZW5hYmxlZCk7XG4gOTk2Olx0XHRpZiAocmV0KVxuIDk5NzpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gOTk4Olx0XG4gOTk5Olx0XHQvKiBXaGVuIHRoZSB1c2VyIGV4cGxpY2l0bHkgZW5hYmxlcyBvciBkaXNhYmxlcyBhIHRhcmdldCB0aGF0IGlzXG4xMDAwOlx0XHQgKiBjdXJyZW50bHkgZGVhY3RpdmF0ZWQsIHJlc2V0IGl0cyBzdGF0ZSB0byBkaXNhYmxlZC4gVGhlIERFQUNUSVZBVEVEXG4xMDAxOlx0XHQgKiBzdGF0ZSBvbmx5IHRyYWNrcyBpbnRlcmZhY2UtZHJpdmVuIGRlYWN0aXZhdGlvbiBhbmQgc2hvdWxkIF9ub3RfXG4xMDAyOlx0XHQgKiBwZXJzaXN0IHdoZW4gdGhlIHVzZXIgbWFudWFsbHkgY2hhbmdlcyB0aGUgdGFyZ2V0JiMzOTtzIGVuYWJsZWQgc3RhdGUuXG4xMDAzOlx0XHQgKi9cbjEwMDQ6XHRcdGlmIChudC1cdTAwM2VzdGF0ZSA9PSBTVEFURV9ERUFDVElWQVRFRClcbjEwMDU6XHRcdFx0bnQtXHUwMDNlc3RhdGUgPSBTVEFURV9ESVNBQkxFRDtcbjEwMDY6XHRcbjEwMDc6XHRcdHJldCA9IC1FSU5WQUw7XG4xMDA4Olx0XHRjdXJyZW50X2VuYWJsZWQgPSBudC1cdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEO1xuMTAwOTpcdFx0aWYgKGVuYWJsZWQgPT0gY3VycmVudF9lbmFibGVkKSB7XG4xMDEwOlx0XHRcdHByX2luZm8oXCYjMzQ7bmV0d29yayBsb2dnaW5nIGhhcyBhbHJlYWR5ICVzXFxuXCYjMzQ7LFxuMTAxMTpcdFx0XHRcdGN1cnJlbnRfZW5hYmxlZCA/IFwmIzM0O3N0YXJ0ZWRcJiMzNDsgOiBcJiMzNDtzdG9wcGVkXCYjMzQ7KTtcbjEwMTI6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMTAxMzpcdFx0fVxuMTAxNDpcdFxuMTAxNTpcdFx0aWYgKGVuYWJsZWQpIHtcdC8qIHRydWUgKi9cbjEwMTY6XHRcdFx0aWYgKG50LVx1MDAzZXJlbGVhc2UgXHUwMDI2XHUwMDI2ICFudC1cdTAwM2VleHRlbmRlZCkge1xuMTAxNzpcdFx0XHRcdHByX2VycihcJiMzNDtOb3QgZW5hYmxpbmcgbmV0Y29uc29sZS4gUmVsZWFzZSBmZWF0dXJlIHJlcXVpcmVzIGV4dGVuZGVkIGxvZyBtZXNzYWdlXCYjMzQ7KTtcbjEwMTg6XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xMDE5Olx0XHRcdH1cbjEwMjA6XHRcbjEwMjE6XHRcdFx0aWYgKG50LVx1MDAzZWV4dGVuZGVkIFx1MDAyNlx1MDAyNiAhY29uc29sZV9pc19yZWdpc3RlcmVkKFx1MDAyNm5ldGNvbnNvbGVfZXh0KSkge1xuMTAyMjpcdFx0XHRcdG5ldGNvbnNvbGVfZXh0LmZsYWdzIHw9IENPTl9FTkFCTEVEO1xuMTAyMzpcdFx0XHRcdHJlZ2lzdGVyX2NvbnNvbGUoXHUwMDI2bmV0Y29uc29sZV9leHQpO1xuMTAyNDpcdFx0XHR9XG4xMDI1Olx0XG4xMDI2Olx0XHRcdC8qIFVzZXIgbWlnaHQgYmUgZW5hYmxpbmcgdGhlIGJhc2ljIGZvcm1hdCB0YXJnZXQgZm9yIHRoZSB2ZXJ5XG4xMDI3Olx0XHRcdCAqIGZpcnN0IHRpbWUsIG1ha2Ugc3VyZSB0aGUgY29uc29sZSBpcyByZWdpc3RlcmVkLlxuMTAyODpcdFx0XHQgKi9cbjEwMjk6XHRcdFx0aWYgKCFudC1cdTAwM2VleHRlbmRlZCBcdTAwMjZcdTAwMjYgIWNvbnNvbGVfaXNfcmVnaXN0ZXJlZChcdTAwMjZuZXRjb25zb2xlKSkge1xuMTAzMDpcdFx0XHRcdG5ldGNvbnNvbGUuZmxhZ3MgfD0gQ09OX0VOQUJMRUQ7XG4xMDMxOlx0XHRcdFx0cmVnaXN0ZXJfY29uc29sZShcdTAwMjZuZXRjb25zb2xlKTtcbjEwMzI6XHRcdFx0fVxuMTAzMzpcdFxuMTAzNDpcdFx0XHQvKlxuMTAzNTpcdFx0XHQgKiBTa2lwIG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoKSAtLSBhbGwgdGhlIGF0dHJpYnV0ZXMgYXJlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTc3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgYGVuYWJsZWRfc3RvcmVgIFN0cnVjdHVyZSoqCgpBbHJpZ2h0LCBJJiMzOTttIGRpdmluZyBpbi4gJiMzNDtMZXQmIzM5O3MgcmVhZCB0aGUgcmVzdCBvZiBgZW5hYmxlZF9zdG9yZWAuJiMzNDsgVGhhdCYjMzk7cyB0aGUga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBlbmFibGVkX3N0b3JlYCBvYmplY3QgY29tcGxldGVseS4gVGhlIG5hbWUgaW1wbGllcyBpdCYjMzk7cyBhIGNyaXRpY2FsIGNvbXBvbmVudCwgbGlrZWx5IGhvbGRpbmcgYSBzdGF0dXMgb3IgY29uZmlndXJhdGlvbiB0aGF0IGdvdmVybnMgYWNjZXNzIG9yIGFjdGl2YXRpb24gb2Ygb3RoZXIgcmVzb3VyY2VzLiBXaGF0JiMzOTtzIHdpdGhpbiB0aGlzIHN0b3JlIGlzIGNydWNpYWwuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgb3RoZXIgcHJvcGVydGllcyBhbmQgdGhlIHN0b3JlJiMzOTtzIHJlbGF0aW9uc2hpcHMgd2l0aCBvdGhlciBvYmplY3RzLiBXaGF0IGFyZSB0aGUgc3RvcmUmIzM5O3MgbWV0aG9kcz8gV2hhdCBmb3JtYXQgYXJlIHRoZSBrZXlzL3ZhbHVlcz8gVW5kZXJzdGFuZGluZyB0aGlzIHN0cnVjdHVyZSB3aWxsIGJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlzIGJlaGF2aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMzYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAzNjpcdFx0XHQgKiBhbHJlYWR5IGNvbmZpZ3VyZWQgdmlhIGNvbmZpZ2ZzLiBKdXN0IHByaW50IHRoZW0gb3V0LlxuMTAzNzpcdFx0XHQgKi9cbjEwMzg6XHRcdFx0bmV0Y29uc29sZV9wcmludF9iYW5uZXIobnQpO1xuMTAzOTpcdFxuMTA0MDpcdFx0XHQvKiBJbml0aWFsaXNlIHRoZSBza2IgcG9vbCBiZWZvcmUgbmV0cG9sbF9zZXR1cCgpIHNvIHRoZSBwb29sXG4xMDQxOlx0XHRcdCAqIGlzIHZhbGlkIGFzIHNvb24gYXMgbnQtXHUwMDNlbnAuZGV2IGJlY29tZXMgdmlzaWJsZSB0b1xuMTA0MjpcdFx0XHQgKiB0YXJnZXRfbGlzdCB3YWxrZXJzIChuZXRjb25zb2xlX25ldGRldl9ldmVudCksIHdoaWNoIHdvdWxkXG4xMDQzOlx0XHRcdCAqIG90aGVyd2lzZSBjYWxsIG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2goKSBvbiB1bmluaXRpYWxpc2VkXG4xMDQ0Olx0XHRcdCAqIHN0YXRlLlxuMTA0NTpcdFx0XHQgKi9cbjEwNDY6XHRcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9pbml0KG50KTtcbjEwNDc6XHRcbjEwNDg6XHRcdFx0cmV0ID0gbmV0Y29uc19uZXRwb2xsX3NldHVwKG50KTtcbjEwNDk6XHRcdFx0aWYgKHJldCkge1xuMTA1MDpcdFx0XHRcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpO1xuMTA1MTpcdFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjEwNTI6XHRcdFx0fVxuMTA1MzpcdFxuMTA1NDpcdFx0XHRudC1cdTAwM2VzdGF0ZSA9IFNUQVRFX0VOQUJMRUQ7XG4xMDU1Olx0XHRcdHByX2luZm8oXCYjMzQ7bmV0d29yayBsb2dnaW5nIHN0YXJ0ZWRcXG5cJiMzNDspO1xuMTA1NjpcdFx0fSBlbHNlIHtcdC8qIGZhbHNlICovXG4xMDU3Olx0XHRcdC8qIFdlIG5lZWQgdG8gZGlzYWJsZSB0aGUgbmV0Y29uc29sZSBiZWZvcmUgY2xlYW5pbmcgaXQgdXBcbjEwNTg6XHRcdFx0ICogb3RoZXJ3aXNlIHdlIG1pZ2h0IGVuZCB1cCBpbiB3cml0ZV9tc2coKSB3aXRoXG4xMDU5Olx0XHRcdCAqIG50LVx1MDAzZW5wLmRldiA9PSBOVUxMIGFuZCBudC1cdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEXG4xMDYwOlx0XHRcdCAqL1xuMTA2MTpcdFx0XHRtdXRleF9sb2NrKFx1MDAyNnRhcmdldF9jbGVhbnVwX2xpc3RfbG9jayk7XG4xMDYyOlx0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnRhcmdldF9saXN0X2xvY2ssIGZsYWdzKTtcbjEwNjM6XHRcdFx0bnQtXHUwMDNlc3RhdGUgPSBTVEFURV9ESVNBQkxFRDtcbjEwNjQ6XHRcdFx0LyogUmVtb3ZlIHRoZSB0YXJnZXQgZnJvbSB0aGUgbGlzdCwgd2hpbGUgaG9sZGluZ1xuMTA2NTpcdFx0XHQgKiB0YXJnZXRfbGlzdF9sb2NrXG4xMDY2Olx0XHRcdCAqL1xuMTA2NzpcdFx0XHRsaXN0X21vdmUoXHUwMDI2bnQtXHUwMDNlbGlzdCwgXHUwMDI2dGFyZ2V0X2NsZWFudXBfbGlzdCk7XG4xMDY4Olx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaywgZmxhZ3MpO1xuMTA2OTpcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2dGFyZ2V0X2NsZWFudXBfbGlzdF9sb2NrKTtcbjEwNzA6XHRcdFx0LyogVW5yZWdpc3RlciBjb25zb2xlcywgd2hvc2UgdGhlIGxhc3QgdGFyZ2V0IG9mIHRoYXQgdHlwZSBnb3RcbjEwNzE6XHRcdFx0ICogZGlzYWJsZWQuXG4xMDcyOlx0XHRcdCAqL1xuMTA3MzpcdFx0XHR1bnJlZ2lzdGVyX25ldGNvbnNfY29uc29sZXMoKTtcbjEwNzQ6XHRcdH1cbjEwNzU6XHRcbjEwNzY6XHRcdHJldCA9IGNvdW50O1xuMTA3NzpcdFx0LyogRGVmZXJyZWQgY2xlYW51cCAqL1xuMTA3ODpcdFx0bmV0Y29uc29sZV9wcm9jZXNzX2NsZWFudXBzKCk7XG4xMDc5Olx0b3V0X3VubG9jazpcbjEwODA6XHRcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2soKTtcbjEwODE6XHRcdHJldHVybiByZXQ7XG4xMDgyOlx0fVxuMTA4MzpcdFxuMTA4NDpcdHN0YXRpYyBzc2l6ZV90IHJlbGVhc2Vfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4xMDg1Olx0XHRcdFx0ICAgICBzaXplX3QgY291bnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTM1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCYjMzk7cyBJbXBhY3QqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIHBhdGNoLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBgZW5hYmxlZF9zdG9yZWAgaXMgdGhlIGtleS4gVGhhdCBmdW5jdGlvbiBjYWxsIGRpcmVjdGx5IGxlYWRzIHRvIGBuZXRjb25zX25ldHBvbGxfc2V0dXBgLCB3aGljaCBpcyBhIGZhbnRhc3RpYyAmIzM0O2ZvY3VzIHN5bWJvbCYjMzQ7IOKAkyB0aGF0JiMzOTtzIHdoZXJlIHRoaXMgcGF0Y2gmIzM5O3Mgc2V0dXAgbG9naWMgaXMgaGl0dGluZy4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoYXQgYXJlYS4KCkJ1dCwgYWxyaWdodCwgdGhpbmtpbmcgYnJvYWRlciBub3cuIElmIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGxvZ2dpbmcsIGBuZXRwb2xsX3NlbmRfdWRwYCBzZWVtcyBsaWtlIGFub3RoZXIgaGlnaC1pbXBhY3QgYXJlYSDigJMgdGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gYWN0dWFsbHkgc2VuZGluZyB0aGUgbWVzc2FnZSwgcmlnaHQ/IEdvb2QgdG8gbm90ZS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlICpmdWxsKiBpbXBhY3QuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGtub3cgKndoYXQqIGNhbGxzIGBuZXRwb2xsX3NlbmRfdWRwYC4gTGV0JiMzOTtzIG1hcCB0aGF0IG91dCBhbmQgdGhlbiBjb21wYXJlIHdpdGggbXkgcHJpb3Iga25vd2xlZGdlIG9mIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldHBvbGxfc2VuZF91ZHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxMzA9c3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNTMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE1NDpzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNTUtXHRcdFx0ICAgIGludCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxOTEtLyoqXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE5MjogKiBzZW5kX3VkcCAtIFdyYXBwZXIgZm9yIG5ldHBvbGxfc2VuZF91ZHAgdGhhdCBjb3VudHMgZXJyb3JzXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE5My0gKiBAbnQ6IHRhcmdldCB0byBzZW5kIG1lc3NhZ2UgdG9cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE5Ni0gKlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxOTc6ICogQ2FsbHMgbmV0cG9sbF9zZW5kX3VkcCBhbmQgY2xhc3NpZmllcyB0aGUgcmV0dXJuIHZhbHVlLiBJZiBhbiBlcnJvclxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxOTgtICogb2NjdXJyZWQgaXQgaW5jcmVtZW50cyBzdGF0aXN0aWNzIGluIG50LVx1MDAzZXN0YXRzIGFjY29yZGluZ2x5LlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxOTk6ICogT25seSBjYWxscyBuZXRwb2xsX3NlbmRfdWRwIGlmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgaXMgZGlzYWJsZWQuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIwMC0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMjAxPXN0YXRpYyB2b2lkIHNlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjAyLXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjAzOlx0aW50IHJlc3VsdCA9IG5ldHBvbGxfc2VuZF91ZHAobnQsIG1zZywgbGVuKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjA0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzI0MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKkFuYWx5emluZyB0aGUgVURQIFNlbmRpbmcgRmxvdyoqCgpPa2F5LCBzbyBJIHNlZSBhIGZ1bmN0aW9uIGNhbGxlZCBgc2VuZF91ZHBgLCBhbmQgaW1tZWRpYXRlbHkgbXkgYnJhaW4ganVtcHMgdG86ICYjMzQ7UmlnaHQsIHRoaXMgaXMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSBzZW5kaW5nIG91dCBVRFAgcGFja2V0cy4mIzM0OyBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgcXVlc3Rpb24gaXMsIHdoZXJlIGRvZXMgYHNlbmRfdWRwYCBmaXQgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmU/IFRoZSB0ZXh0IGV4cGxpY2l0bHkgc3RhdGVzIHRoYXQgYHNlbmRfdWRwYCBjYWxscyBgbmV0cG9sbF9zZW5kX3VkcGAuIFRoYXQmIzM5O3MgaW1wb3J0YW50IOKAkyBpdCBlc3RhYmxpc2hlcyBhIGNsZWFyIGNhbGwgaGllcmFyY2h5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHJlbGF0aW9uc2hpcCBhbmQgd2hhdCBoYXBwZW5zIGF0IGVhY2ggbGF5ZXIuIEJ1dCBiZWZvcmUgSSBkaWcgaW50byBgbmV0cG9sbF9zZW5kX3VkcGAsIHdoaWNoIGxpa2VseSBoYW5kbGVzIHRoZSBsb3dlci1sZXZlbCBuZXR3b3JrIGludGVyZmFjZSBpbnRlcmFjdGlvbiwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlICoqb3JpZ2luKiogb2YgdGhpcyBjYWxsLiBUaGUga2V5IHF1ZXN0aW9uIEkmIzM5O20gYXNraW5nIG15c2VsZiBpczogJiMzNDtXaGF0IGhpZ2hlci1sZXZlbCBmdW5jdGlvbiwgcHJvY2Vzcywgb3IgZXZlbnQgdHJpZ2dlcmVkIHRoZSBleGVjdXRpb24gb2YgYHNlbmRfdWRwYCBpbiB0aGUgZmlyc3QgcGxhY2U/JiMzNDsgVW5kZXJzdGFuZGluZyB0aGUgdXBzdHJlYW0gY2FsbGVyKHMpIHdpbGwgZ2l2ZSBtZSBlc3NlbnRpYWwgY29udGV4dCBhYm91dCAqd2h5KiB0aGUgVURQIHBhY2tldCBpcyBiZWluZyBzZW50LCB3aGF0IGRhdGEgaXQgbGlrZWx5IGNvbnRhaW5zLCBhbmQgd2hlcmUgaXQmIzM5O3MgZGVzdGluZWQuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYHNlbmRfdWRwYCB0byBnZXQgdGhlIGluaXRpYXRpbmcgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VuZF91ZHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxMzA9c3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNTMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE1NDpzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNTUtXHRcdFx0ICAgIGludCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxOTEtLyoqXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE5MjogKiBzZW5kX3VkcCAtIFdyYXBwZXIgZm9yIG5ldHBvbGxfc2VuZF91ZHAgdGhhdCBjb3VudHMgZXJyb3JzXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE5My0gKiBAbnQ6IHRhcmdldCB0byBzZW5kIG1lc3NhZ2UgdG9cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE5Ni0gKlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxOTc6ICogQ2FsbHMgbmV0cG9sbF9zZW5kX3VkcCBhbmQgY2xhc3NpZmllcyB0aGUgcmV0dXJuIHZhbHVlLiBJZiBhbiBlcnJvclxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxOTgtICogb2NjdXJyZWQgaXQgaW5jcmVtZW50cyBzdGF0aXN0aWNzIGluIG50LVx1MDAzZXN0YXRzIGFjY29yZGluZ2x5LlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxOTk6ICogT25seSBjYWxscyBuZXRwb2xsX3NlbmRfdWRwIGlmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgaXMgZGlzYWJsZWQuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIwMC0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjAxOnN0YXRpYyB2b2lkIHNlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjAyLXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjAzOlx0aW50IHJlc3VsdCA9IG5ldHBvbGxfc2VuZF91ZHAobnQsIG1zZywgbGVuKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjA0LVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMjE4PXN0YXRpYyB2b2lkIHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjI1MS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjUyOlx0c2VuZF91ZHAobnQsIG50LVx1MDAzZWJ1ZiwgbXNnX2xlbik7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjI1My19XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIyNjM9c3RhdGljIHZvaWQgc2VuZF9mcmFnbWVudGVkX2JvZHkoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjM0OS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMzUwOlx0XHRzZW5kX3VkcChudCwgbnQtXHUwMDNlYnVmLCBidWZfb2Zmc2V0KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzUxLVx0fVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNDIzPXN0YXRpYyB2b2lkIHNlbmRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0MzAtXHRcdGZyYWcgPSBtaW4obGVmdCwgTUFYX1BSSU5UX0NIVU5LKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDMxOlx0XHRzZW5kX3VkcChudCwgdG1wLCBmcmFnKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDMyLVx0XHR0bXAgJiM0Mzs9IGZyYWc7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4Mjc4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVURQIE1lc3NhZ2UgU2VuZGluZyBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBVRFAgbWVzc2FnZSBzZW5kaW5nIGNvZGUuIEl0IGxvb2tzIGxpa2UgYHNlbmRfbXNnX3VkcGAsIGBzZW5kX2ZyYWdtZW50ZWRfYm9keWAsIGFuZCBgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbmAgYWxsIHVsdGltYXRlbHkgY2FsbCBgc2VuZF91ZHBgLiBUaGF0JiMzOTtzIHRoZSBjb3JlIGZ1bmN0aW9uLCByaWdodD8gQW5kIHRob3NlIGludGVybWVkaWFyeSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBmcm9tIGB3cml0ZV9tc2dgIGFuZCBgd3JpdGVfZXh0X21zZ2AuIFRob3NlIGFyZSByZWdpc3RlcmVkIGFzIGNvbnNvbGUgd3JpdGUgZnVuY3Rpb25zLiBTbywgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGRlZXAgZGl2ZSB3b3VsZCBiZSBgbmV0cG9sbF9zZW5kX3VkcGAuCgpXYWl0LCBzaG9vdCEgYG5ldHBvbGxfc2VuZF91ZHBgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhhdCYjMzk7cyBub3QgaWRlYWwgZm9yIGRpcmVjdCBhbmFseXNpcy4gT2theSwgc28gbWF5YmUgSSBzaG91bGQgZm9jdXMgaGlnaGVyIHVwIHRoZW4/IElzIGl0IGJldHRlciB0byBmb2N1cyBvbiBgd3JpdGVfbXNnYCBvciBgd3JpdGVfZXh0X21zZ2A/IEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgaWYgYHdyaXRlX21zZ2AgaXMgYWxzbyBzdGF0aWMsIGp1c3QgdG8gYmUgc3VyZS4gVGhpcyBnaXZlcyBtZSBhIGdvb2QgZW50cnkgcG9pbnQgdG8gc2VlIHdoZXJlIHRoZSBVRFAgc2VuZGluZyBpcyBpbml0aWF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dyaXRlX21zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTA1PXN0YXRpYyBMSVNUX0hFQUQodGFyZ2V0X2NsZWFudXBfbGlzdCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA2LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwNzovKiBUaGlzIG5lZWRzIHRvIGJlIGEgc3BpbmxvY2sgYmVjYXVzZSB3cml0ZV9tc2coKSBjYW5ub3Qgc2xlZXAgKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDgtc3RhdGljIERFRklORV9TUElOTE9DSyh0YXJnZXRfbGlzdF9sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9OTg2PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDU3LVx0XHQvKiBXZSBuZWVkIHRvIGRpc2FibGUgdGhlIG5ldGNvbnNvbGUgYmVmb3JlIGNsZWFuaW5nIGl0IHVwXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTA1ODpcdFx0ICogb3RoZXJ3aXNlIHdlIG1pZ2h0IGVuZCB1cCBpbiB3cml0ZV9tc2coKSB3aXRoXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA1OS1cdFx0ICogbnQtXHUwMDNlbnAuZGV2ID09IE5VTEwgYW5kIG50LVx1MDAzZXN0YXRlID09IFNUQVRFX0VOQUJMRURcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4NzMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqU3RhdGljIEZ1bmN0aW9uIEFsZXJ0ISoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIGp1c3Qgc2F3IHRoYXQgYHdyaXRlX21zZ2AgZnVuY3Rpb24sIGFuZCB0aGF0JiMzOTtzIGEgc3RhdGljIGRlY2xhcmF0aW9uLCB3aGljaCBpcyB1bnVzdWFsIGluIHRoaXMgY29udGV4dC4gSXQmIzM5O3MgbWFraW5nIG1lIHdvbmRlciBhYm91dCB0aGUgc2NvcGUuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gZGVmaW5lZCwgYW5kIG1vcmUgaW1wb3J0YW50bHksIGhvdyBpcyBpdCBiZWluZyBjYWxsZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBmdWxseSB0byBldmFsdWF0ZSBpdC4gTGV0IG1lIGNoZWNrIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIG5ldHdvcmsgY29uc29sZSBkcml2ZXIuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgZ28gZGlnZ2luZyBpbiBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBzdGF0aWMgYHdyaXRlX21zZ2AgaXMgYWxsIGFib3V0LiBIb3BlZnVsbHksIHRoaXMgc2hvdWxkIGNsYXJpZnkgaG93IGl0IGlzIHVzZWQgYW5kIHdoeSBpdCBpcyBzdGF0aWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhdGljIHZvaWQgd3JpdGVfbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxMDEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBDb2RlIEluc3BlY3Rpb24qKgoKSG1tLCBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gcGlucG9pbnQgdGhlIGlzc3VlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoYXQgYHdyaXRlX21zZ2AgZnVuY3Rpb24uIElzIGl0IHBvc3NpYmxlIHRoYXQgdGhlIHByb2JsZW0gbGllcyB3aXRoIHRoZSB3YXkgdGhlIGZ1bmN0aW9uIGlzIGRlY2xhcmVkPyBDb3VsZCBpdCBiZSBhIHNpbXBsZSBjYXNlIG9mIGEgbWlzc2luZyBrZXl3b3JkLCBsaWtlIHRoZSBgc3RhdGljIHZvaWRgIGRlY2xhcmF0aW9uPyBJJiMzOTttIHdvbmRlcmluZyBpZiwgZm9yIHdoYXRldmVyIHJlYXNvbiwgdGhlIG9yaWdpbmFsIHByb2dyYW1tZXIgdGhvdWdodCB0aGUgc3RhdGljIGtleXdvcmQgd2FzIHJlcXVpcmVkIGluIHRoZWlyIGluaXRpYWwgYXR0ZW1wdCB0byBnZXQgaXQgd29ya2luZywgdGhlbiBsZWZ0IGl0IHRoZXJlIGFmdGVyIHRlc3RpbmcsIGFuZCBpdCBpcyBub3cgaW50ZXJmZXJpbmcuIExldCBtZSBnbyBiYWNrIGFuZCByZXZpZXcgaG93IHRoYXQgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dyaXRlX21zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTA1PXN0YXRpYyBMSVNUX0hFQUQodGFyZ2V0X2NsZWFudXBfbGlzdCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA2LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwNzovKiBUaGlzIG5lZWRzIHRvIGJlIGEgc3BpbmxvY2sgYmVjYXVzZSB3cml0ZV9tc2coKSBjYW5ub3Qgc2xlZXAgKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDgtc3RhdGljIERFRklORV9TUElOTE9DSyh0YXJnZXRfbGlzdF9sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9OTg2PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDU3LVx0XHQvKiBXZSBuZWVkIHRvIGRpc2FibGUgdGhlIG5ldGNvbnNvbGUgYmVmb3JlIGNsZWFuaW5nIGl0IHVwXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTA1ODpcdFx0ICogb3RoZXJ3aXNlIHdlIG1pZ2h0IGVuZCB1cCBpbiB3cml0ZV9tc2coKSB3aXRoXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA1OS1cdFx0ICogbnQtXHUwMDNlbnAuZGV2ID09IE5VTEwgYW5kIG50LVx1MDAzZXN0YXRlID09IFNUQVRFX0VOQUJMRURcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1MjcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVidWdnaW5nIE5ldHdvcmsgQ29uc29sZSBPdXRwdXQqKgoKSG1tLCBJIHNlZW0gdG8gYmUgbWlzc2luZyBzb21ldGhpbmcgY3JpdGljYWwgaW4gdGhlIGRlYnVnZ2luZyBvdXRwdXQuIEkgc3VzcGVjdCBJIG5lZWQgbW9yZSBjb250ZXh0IGFyb3VuZCB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gY2FsbCBJIHdhcyBqdXN0IGV4YW1pbmluZy4gTXkgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uIG1pZ2h0IG5vdCBoYXZlIGdpdmVuIG1lIHRoZSBjb21wbGV0ZSBwaWN0dXJlLCBzbyBJIG5lZWQgdG8gYnJvYWRlbiBteSBzY29wZS4gR2l2ZW4gdGhhdCBJJiMzOTttIHdvcmtpbmcgd2l0aCBuZXR3b3JrIGNvbnNvbGUgb3V0cHV0LCB0aGUgYHdyaXRlX21zZ2AgZnVuY3Rpb24gc2VlbXMgbGlrZSBhIGxpa2VseSBjYW5kaWRhdGUgZm9yIGZ1cnRoZXIgZXhhbWluYXRpb24uIEkmIzM5O2xsIHJlYWNoIGZvciBgZ3JlcGAgYW5kIGxldmVyYWdlIGl0cyBjb250ZXh0IGZlYXR1cmUgKC1DIDEpLiBCeSB1c2luZyBgLUMgMWAgSSBzaG91bGQgYmUgYWJsZSB0byB2aWV3IG9uZSBsaW5lIGJlZm9yZSBhbmQgYWZ0ZXIgZWFjaCBtYXRjaCBvZiBgd3JpdGVfbXNnYCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgIGZpbGUuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHBvdGVudGlhbGx5IHJldmVhbCB0aGUgY2F1c2Ugb2YgdGhlIGlzc3VlIG9yIGF0IGxlYXN0IHBvaW50IG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24gZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSYjMzk7bSBob3BpbmcgdGhpcyB3aWxsIHByb3ZpZGUgdGhlIGZ1bGwgcGljdHVyZSB0aGF0IEkmIzM5O20gbWlzc2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d3JpdGVfbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMDU9c3RhdGljIExJU1RfSEVBRCh0YXJnZXRfY2xlYW51cF9saXN0KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDYtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTA3Oi8qIFRoaXMgbmVlZHMgdG8gYmUgYSBzcGlubG9jayBiZWNhdXNlIHdyaXRlX21zZygpIGNhbm5vdCBzbGVlcCAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwOC1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRhcmdldF9saXN0X2xvY2spO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz05ODY9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNTctXHRcdC8qIFdlIG5lZWQgdG8gZGlzYWJsZSB0aGUgbmV0Y29uc29sZSBiZWZvcmUgY2xlYW5pbmcgaXQgdXBcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMDU4Olx0XHQgKiBvdGhlcndpc2Ugd2UgbWlnaHQgZW5kIHVwIGluIHdyaXRlX21zZygpIHdpdGhcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDU5LVx0XHQgKiBudC1cdTAwM2VucC5kZXYgPT0gTlVMTCBhbmQgbnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDAzMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGF0OgoKKipUcm91Ymxlc2hvb3RpbmcgYSBGdW5jdGlvbiBDYWxsKioKCkhtbSwgc3RyYW5nZS4gSSB3YXMgZXhwZWN0aW5nIHRoZSBjb2RlIHRvIHJlY29nbml6ZSBgd3JpdGVfbXNnYCwgYnV0IGl0IHNlZW1zIHRvIGJlIG1pc3NpbmcgdGhlIGRlZmluaXRpb24uIEl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIHdoeSB0aGlzIGlzIGhhcHBlbmluZy4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBuYW1pbmcgY29udmVudGlvbnMgYW5kIHBvdGVudGlhbCBhbHRlcm5hdGl2ZSBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUuIENvdWxkIGl0IGJlIHVzaW5nIGEgc2xpZ2h0bHkgZGlmZmVyZW50LCBwZXJoYXBzIG1vcmUgc3BlY2lmaWMsIG5hbWU/IE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBsb29rIGZvciBhIHNpbWlsYXIgZnVuY3Rpb24gbmFtZSB0aGF0IG1pZ2h0IGJlIHVzZWQgYXMgYW4gaW50ZXJuYWwgY2FsbCB0byByZXBsYWNlIHRoZSBtaXNzaW5nIGRlZmluaXRpb24uIFBlcmhhcHMgaXQmIzM5O3MgdXNpbmcgYW4gZXh0ZW5zaW9uIGZ1bmN0aW9uIG5hbWUsIHNvbWV0aGluZyBsaWtlIGB3cml0ZV9leHRfbXNnYD8gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgbmV4dCBzdGVwLiBJJiMzOTtsbCBjaGVjayBteSBub3RlcyBhbmQgc2VhcmNoIHRoZSBjb2RlYmFzZSBmb3IgdGhhdCBhbHRlcm5hdGl2ZSBuYW1lIHJpZ2h0IGF3YXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d3JpdGVfZXh0X21zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjYzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCBzdW1tYXJpemluZyB0aGUgcHJvdmlkZWQgcHJvbXB0LCBmcmFtaW5nIGl0IGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byBDb25zb2xlIFN0cnVjdCBSZWdpc3RyYXRpb24qKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBhbmFseXplIGBjb25zb2xlYCBzdHJ1Y3QgcmVnaXN0cmF0aW9uLiBUaGF0JiMzOTtzIHRoZSBjb3JlIGZvY3VzLiBOb3csIHdoZW4gSSBzZWUgJiMzNDtyZWdpc3RyYXRpb24sJiMzNDsgbXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgcGFyc2luZyB0aGUgaW1wbGljYXRpb25zLiBXaGF0IGtpbmQgb2YgcmVnaXN0cmF0aW9uIGFyZSB3ZSB0YWxraW5nIGFib3V0PyBJcyBpdCBhIHJ1bnRpbWUgcHJvY2VzcywgYSBjb21waWxlLXRpbWUgbWVjaGFuaXNtLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gV2hhdCBjb250ZXh0IGFyZSB3ZSB3aXRoaW4/IElzIHRoaXMgYSBzcGVjaWZpYyBsaWJyYXJ5LCBhIGN1c3RvbSBmcmFtZXdvcmssIG9yIGEgYnJvYWRlciBzeXN0ZW0tbGV2ZWwgZGVzaWduPyBUaGUgdGVybSAmIzM0O3N0cnVjdCYjMzQ7IGFsc28gYnJpbmdzIHVwIHNvbWUgcXVlc3Rpb25zIGZvciBtZS4gV2hhdCBhdHRyaWJ1dGVzIGFyZSB3ZSB0YWxraW5nIGFib3V0PyBIb3cgaXMgaXQgaW1wbGVtZW50ZWQ/IElzIGl0IGJlaW5nIGNhbGxlZCBieSB0aGUgc3lzdGVtLCBvciB0aGUgdXNlcnM/IEluIG9yZGVyIHRvIGdpdmUgYW4gZXhwZXJ0IGFzc2Vzc21lbnQsIEkgbmVlZCB0byBrbm93IHRoZXNlIGRldGFpbHMuIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGBjb25zb2xlYCBzdHJ1Y3QgaXRzZWxmIGlzIGxpa2VseSBjZW50cmFsIHRvIGhvdyB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MgZnVuY3Rpb25zLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN0cnVjdCBpcyBiZWluZyBkZXNpZ25lZCwgc28gSSBjYW4gc2VlIHdoYXQgaXMgYmVpbmcgY2FsbGVkLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHByb3ZpZGVkIGNvbnRleHQsIHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0aGUgZGVzaWduIGdvYWxzLCBhbmQgYW55IGRvY3VtZW50YXRpb24gcmVsYXRlZCB0byB0aGlzIHByb2Nlc3MuIE9ubHkgdGhlbiBjYW4gSSB0cnVseSBncmFzcCB0aGUgbnVhbmNlcyBhbmQgcG90ZW50aWFsIGNoYWxsZW5nZXMgb3IgYmVuZWZpdHMgYXNzb2NpYXRlZCB3aXRoIGhvdyB0aGlzIGBjb25zb2xlYCBzdHJ1Y3QgaXMgYmVpbmcgcmVnaXN0ZXJlZC4gSSYjMzk7bSByZWFkeSB0byBkaWcgaW4gYW5kIGJyZWFrIGl0IGRvd24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBjb25zb2xlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMTI9c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZXRjb25zb2xlX3dxO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTctICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTE4OnN0YXRpYyBzdHJ1Y3QgY29uc29sZSBuZXRjb25zb2xlX2V4dCwgbmV0Y29uc29sZTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTktXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI0NDQ9c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZShzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQsIGJvb2wgZXh0ZW5kZWQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NzEtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQ3MjpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlX2V4dChzdHJ1Y3QgY29uc29sZSAqY29uIF9fYWx3YXlzX3VudXNlZCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDczLVx0XHRcdFx0IHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ3Ny1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDc4OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGVfYmFzaWMoc3RydWN0IGNvbnNvbGUgKmNvbiBfX2Fsd2F5c191bnVzZWQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ3OS1cdFx0XHRcdCAgIHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ4My1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDg0OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfZGV2aWNlX2xvY2soc3RydWN0IGNvbnNvbGUgKmNvbiBfX2Fsd2F5c191bnVzZWQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ4NS1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI0ODY9X19hY3F1aXJlcyhcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDkwLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0OTE6c3RhdGljIHZvaWQgbmV0Y29uc29sZV9kZXZpY2VfdW5sb2NrKHN0cnVjdCBjb25zb2xlICpjb24gX19hbHdheXNfdW51c2VkLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0OTItXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI2NDg9c3RhdGljIHZvaWQgZnJlZV9wYXJhbV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY1OS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjYwOnN0YXRpYyBzdHJ1Y3QgY29uc29sZSBuZXRjb25zb2xlX2V4dCA9IHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjYxLVx0Lm5hbWUgPSBcJiMzNDtuZXRjb25fZXh0XCYjMzQ7LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjY4LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2Njk6c3RhdGljIHN0cnVjdCBjb25zb2xlIG5ldGNvbnNvbGUgPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY3MC1cdC5uYW1lID0gXCYjMzQ7bmV0Y29uXCYjMzQ7LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTIwNgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDExOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0Y29uc29sZSBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIG5ldGNvbnNvbGUgZnVuY3Rpb25zIOKAkyBzcGVjaWZpY2FsbHkgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBhbmQgYG5ldGNvbnNvbGVfd3JpdGVfYmFzaWNgLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCBoYW5nIG9uLCBpc24mIzM5O3QgdGhlcmUgYSBjb21tb24gZnVuY3Rpb24gaGVyZSwgYSBnZW5lcmFsIGVudHJ5IHBvaW50LCB3aGljaCBJIHJlY2FsbCBhcyBgbmV0Y29uc29sZV93cml0ZWA/IExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0LiBZZXMsIGl0IGxvb2tzIGxpa2UgYG5ldGNvbnNvbGVfd3JpdGVgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uLgoKTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgaWYgYG5ldGNvbnNvbGVfd3JpdGVgIGlzIHN0YXRpYy4gQWxyaWdodCwgeWVwLCBpdCYjMzk7cyBtYXJrZWQgYXMgYHN0YXRpY2AuIFJpZ2h0LCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBndWlkaW5nIHVzIGhlcmU6ICYjMzQ7UHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiYjMzQ7IEhtbSwgd2VsbCwgc2luY2UgdGhlc2Ugc2VlbSB0byBiZSBzdGF0aWMgZnVuY3Rpb25zLCBsZXQmIzM5O3MgZXhwbG9yZSBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGF2YWlsYWJsZS4KCldlIGFyZSBmb3JjZWQgdG8gZW51bWVyYXRlIHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhlcmUgYXJlIG5vIG5vbi1zdGF0aWMgYWx0ZXJuYXRpdmVzLgoKTGV0IG1lIHRha2UgYSBsb29rIGF0IGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgIGFuZCBzZWUgaWYgYW55IGFyZSBleHBvc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1OTIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBDb2RlIEluc3BlY3Rpb24qKgoKQWxyaWdodCwgdGhlIGluaXRpYWwgcHJvbXB0IG1lbnRpb25zICYjMzQ7dm9pZCYjMzQ7IG9yIHNvbWV0aGluZyBzaW1pbGFyLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGhlcmUuIEkmIzM5O20gdGhpbmtpbmcsIHRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gcmV0dXJuIHR5cGVzLCBzcGVjaWZpY2FsbHkgdGhvc2UgdGhhdCBpbmRpY2F0ZSB0aGUgZnVuY3Rpb24gZG9lc24mIzM5O3QgcmV0dXJuIGFueSB2YWx1ZS4gTXkgaW5pdGlhbCBzY2FuIHdpbGwgYmUgdG8gZXhhbWluZSB0aGUgY29kZWJhc2UgZm9yIGluc3RhbmNlcyB3aGVyZSB0aGlzIGlzIGJlaW5nIGhhbmRsZWQgYW5kIGxvb2sgZm9yIHBvdGVudGlhbCBlcnJvcnMgb3IgdW5kZWZpbmVkIGJlaGF2aW9ycy4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hlcmUgYHZvaWRgIG9yIGEgc2ltaWxhciByZXR1cm4gdHlwZSAocGVyaGFwcyBhIGN1c3RvbSB0eXBlIHRoYXQgZWZmZWN0aXZlbHkgYWN0cyBhcyBhICYjMzQ7bm8gcmV0dXJuJiMzNDspIGlzIGJlaW5nIHVzZWQuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGFzc2VzcyBpdHMgdXNhZ2UuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBib3RoIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9ucyAqYW5kKiB0aGUgZnVuY3Rpb24gY2FsbHMuIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSB2aWdpbGFudCBmb3IgcGxhY2VzIHdoZXJlIGEgZnVuY3Rpb24mIzM5O3MgYHZvaWRgIHJldHVybiBtaWdodCBiZSBtaXNpbnRlcnByZXRlZCBvciBtaXN1c2VkLCBzdWNoIGFzIHRyeWluZyB0byBhc3NpZ24gaXRzIHJlc3VsdCB0byBhIHZhcmlhYmxlLCBvciB3aGVyZSBlcnJvciBoYW5kbGluZyBtaWdodCBiZSBpbmFwcHJvcHJpYXRlbHkgYXBwbGllZCBvciBtaXNzaW5nLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGV4Y2VwdGlvbnMsIG1lbW9yeSBsZWFrcywgYW5kIGFueSBwbGFjZSB3aGVyZSB0aGUgYHZvaWRgIGRlc2lnbmF0aW9uIGlzIGJlaW5nIG1pc2hhbmRsZWQuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlICpjb25jZXB0KiBvZiAmIzM0O25vIHJldHVybiYjMzQ7IGFuZCBob3cgdGhhdCYjMzk7cyBiZWluZyBpbXBsZW1lbnRlZCBhbmQgdHJlYXRlZCB3aXRoaW4gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aXzAtOV0mIzQzOyAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDU3NiBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTU2PU1PRFVMRV9JTVBPUlRfTlMoXCYjMzQ7TkVUREVWX0lOVEVSTkFMXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzktXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODA6c3RhdGljIGNoYXIgY29uZmlnW01BWF9QQVJBTV9MRU5HVEhdO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgxLW1vZHVsZV9wYXJhbV9zdHJpbmcobmV0Y29uc29sZSwgY29uZmlnLCBNQVhfUEFSQU1fTEVOR1RILCAwKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz04Mj1NT0RVTEVfUEFSTV9ERVNDKG5ldGNvbnNvbGUsIFwmIzM0OyBuZXRjb25zb2xlPVtzcmMtcG9ydF1AW3NyYy1pcF0vW2Rldl0sW3RndC1wb3J0XUBcdTAwM2N0Z3QtaXBcdTAwM2UvW3RndC1tYWNhZGRyXVwmIzM0Oyk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODQ6c3RhdGljIGJvb2wgb29wc19vbmx5O1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg1LW1vZHVsZV9wYXJhbShvb3BzX29ubHksIGJvb2wsIDA2MDApO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTg2PU1PRFVMRV9QQVJNX0RFU0Mob29wc19vbmx5LCBcJiMzNDtPbmx5IGxvZyBvb3BzIG1lc3NhZ2VzXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTAtI2lmbmRlZlx0TU9EVUxFXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTE6c3RhdGljIGludCBfX2luaXQgb3B0aW9uX3NldHVwKGNoYXIgKm9wdClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05Mi17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTk2PV9fc2V0dXAoXCYjMzQ7bmV0Y29uc29sZT1cJiMzNDssIG9wdGlvbl9zZXR1cCk7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk5LS8qIExpbmtlZCBsaXN0IG9mIGFsbCBjb25maWd1cmVkIHRhcmdldHMgKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMDA6c3RhdGljIExJU1RfSEVBRCh0YXJnZXRfbGlzdCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTAxLS8qIHRhcmdldF9jbGVhbnVwX2xpc3QgaXMgdXNlZCB0byB0cmFjayB0YXJnZXRzIHRoYXQgbmVlZCB0byBiZSBjbGVhbmVkIG91dHNpZGVcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA0LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwNTpzdGF0aWMgTElTVF9IRUFEKHRhcmdldF9jbGVhbnVwX2xpc3QpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNi1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDctLyogVGhpcyBuZWVkcyB0byBiZSBhIHNwaW5sb2NrIGJlY2F1c2Ugd3JpdGVfbXNnKCkgY2Fubm90IHNsZWVwICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTA4OnN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGFyZ2V0X2xpc3RfbG9jayk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA5LS8qIFRoaXMgbmVlZHMgdG8gYmUgYSBtdXRleCBiZWNhdXNlIG5ldHBvbGxfY2xlYW51cCBtaWdodCBzbGVlcCAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExMDpzdGF0aWMgREVGSU5FX01VVEVYKHRhcmdldF9jbGVhbnVwX2xpc3RfbG9jayk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTExLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExMjpzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm5ldGNvbnNvbGVfd3E7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTEzLVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTctICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTE4OnN0YXRpYyBzdHJ1Y3QgY29uc29sZSBuZXRjb25zb2xlX2V4dCwgbmV0Y29uc29sZTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTktXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTIwOnN0cnVjdCBuZXRjb25zb2xlX3RhcmdldF9zdGF0cyAge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyMS1cdHU2NF9zdGF0c190IHhtaXRfZHJvcF9jb3VudDtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI1LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyNjplbnVtIGNvbnNvbGVfdHlwZSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI3LVx0Q09OU19CQVNJQyA9IEJJVCgwKSxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM0LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzNTplbnVtIHN5c2RhdGFfZmVhdHVyZSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM2LVx0LyogUG9wdWxhdGUgdGhlIENQVSB0aGF0IHNlbmRzIHRoZSBtZXNzYWdlICovXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0Ny1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDg6ZW51bSB0YXJnZXRfc3RhdGUge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0OS1cdFNUQVRFX0RJU0FCTEVELFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTQtICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTk1OnN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk2LVx0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjI3LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyODpzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSBuZXRjb25zb2xlX3N1YnN5cztcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjk6c3RhdGljIERFRklORV9NVVRFWChkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXgpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzMC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMzE6c3RhdGljIGludCBfX2luaXQgZHluYW1pY19uZXRjb25zb2xlX2luaXQodm9pZClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzIte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzctXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjM4OnN0YXRpYyB2b2lkIF9fZXhpdCBkeW5hbWljX25ldGNvbnNvbGVfZXhpdCh2b2lkKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzOS17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0Ny0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDg6c3RhdGljIHZvaWQgbmV0Y29uc29sZV90YXJnZXRfZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ5LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjUzLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1NDpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9wdXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTUte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTktXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjYwOnN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKHZvaWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYxLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2NTpzdGF0aWMgdm9pZCBkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfdW5sb2NrKHZvaWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY2LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjcxLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI3MjpzdGF0aWMgaW50IF9faW5pdCBkeW5hbWljX25ldGNvbnNvbGVfaW5pdCh2b2lkKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3My17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3Ni1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNzc6c3RhdGljIHZvaWQgX19leGl0IGR5bmFtaWNfbmV0Y29uc29sZV9leGl0KHZvaWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjc4LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjg0LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI4NTpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9nZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yODYte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yODgtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjg5OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X3B1dChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI5MC17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI5Mi1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyOTM6c3RhdGljIHZvaWQgcG9wdWxhdGVfY29uZmlnZnNfaXRlbShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI5NC1cdFx0XHRcdCAgIGludCBjbWRsaW5lX2NvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yOTctXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjk4OnN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKHZvaWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjk5LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzAxLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjMwMjpzdGF0aWMgdm9pZCBkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfdW5sb2NrKHZvaWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzAzLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzA4LS8qIENoZWNrIGlmIHRoZSB0YXJnZXQgd2FzIGJvdW5kIGJ5IG1hYyBhZGRyZXNzLiAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjMwOTpzdGF0aWMgYm9vbCBib3VuZF9ieV9tYWMoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMTAte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMTMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzE0OnN0YXRpYyB2b2lkIG5ldGNvbnNfcmVsZWFzZV9kZXYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMTUte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMjAtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzIxOnN0YXRpYyB2b2lkIHJlZmlsbF9za2JzKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzIyLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzM0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjMzNTpzdGF0aWMgdm9pZCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMzNi17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM0Ni0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozNDc6c3RhdGljIHZvaWQgbmV0Y29uc29sZV9za2JfcG9vbF9pbml0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzQ4LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzUxLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjM1MjpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzUzLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzU3LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjM1ODpzdGF0aWMgdm9pZCBuZXRjb25zX3dhaXRfY2FycmllcihzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM1OS17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM3OC0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozNzk6c3RhdGljIGNoYXIgKm5ldGNvbnNfZWdyZXNzX2RldihzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnN6KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM4MC17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM5MC0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozOTE6c3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM5Mi1cdFx0XHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00MzQtICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDM1OnN0YXRpYyBpbnQgbmV0Y29uc190YWtlX2lwdjQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00MzYtXHRcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDYzLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQ2NDpzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ2NS17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU1NS0vKiBBdHRlbXB0cyB0byByZXN1bWUgbG9nZ2luZyB0byBhIGRlYWN0aXZhdGVkIHRhcmdldC4gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo1NTY6c3RhdGljIHZvaWQgcmVzdW1lX3RhcmdldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU1Ny17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU3Ni0vKiBDaGVja3MgaWYgYSBkZWFjdGl2YXRlZCB0YXJnZXQgbWF0Y2hlcyBhIGRldmljZS4gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo1Nzc6c3RhdGljIGJvb2wgZGVhY3RpdmF0ZWRfdGFyZ2V0X21hdGNoKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTc4LVx0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTg4LS8qIFByb2Nlc3Mgd29yayBzY2hlZHVsZWQgZm9yIHRhcmdldCByZXN1bWUuICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTg5OnN0YXRpYyB2b2lkIHByb2Nlc3NfcmVzdW1lX3RhcmdldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTkwLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjQ5LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjY1MDpzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19hbmRfaW5pdCh2b2lkKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTY1MS17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTY3OS0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo2ODA6c3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcm9jZXNzX2NsZWFudXBzX2NvcmUodm9pZClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02ODEte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03MDQtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzA1OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzA2LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzI2LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjcyNzpzdGF0aWMgaW50IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBpbmV0X2FkZHIgKmFkZHIpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzI4LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzgwLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjc4MTpzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICp0b190YXJnZXQoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTc4Mi17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTc5NC0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3OTU6c3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcm9jZXNzX2NsZWFudXBzKHZvaWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzk2LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODA1LS8qIEdldCByaWQgb2YgcG9zc2libGUgdHJhaWxpbmcgbmV3bGluZSwgcmV0dXJuaW5nIHRoZSBuZXcgbGVuZ3RoICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODA2OnN0YXRpYyB2b2lkIHRyaW1fbmV3bGluZShjaGFyICpzLCBzaXplX3QgbWF4bGVuKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgwNy17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgyMC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4MjE6c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgyMi17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgyNS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4MjY6c3RhdGljIHNzaXplX3QgZXh0ZW5kZWRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04Mjcte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04MzAtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODMxOnN0YXRpYyBzc2l6ZV90IHJlbGVhc2Vfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04MzIte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04MzUtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODM2OnN0YXRpYyBzc2l6ZV90IGRldl9uYW1lX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODM3LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODQwLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg0MTpzdGF0aWMgc3NpemVfdCBsb2NhbF9wb3J0X3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODQyLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODQ1LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg0NjpzdGF0aWMgc3NpemVfdCByZW1vdGVfcG9ydF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg0Ny17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg1MC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4NTE6c3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04NTIte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04NjAtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODYxOnN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg2Mi17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg3MC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4NzE6c3RhdGljIHNzaXplX3QgbG9jYWxfbWFjX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODcyLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODc4LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg3OTpzdGF0aWMgc3NpemVfdCByZW1vdGVfbWFjX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODgwLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODgzLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg4NDpzdGF0aWMgc3NpemVfdCB0cmFuc21pdF9lcnJvcnNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04ODUte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04OTktLyogY29uZmlnZnMgaGVscGVyIHRvIGRpc3BsYXkgaWYgY3B1X25yIHN5c2RhdGEgZmVhdHVyZSBpcyBlbmFibGVkICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTAwOnN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfY3B1X25yX2VuYWJsZWRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05MDEte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05MTItLyogY29uZmlnZnMgaGVscGVyIHRvIGRpc3BsYXkgaWYgdGFza25hbWUgc3lzZGF0YSBmZWF0dXJlIGlzIGVuYWJsZWQgKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5MTM6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV90YXNrbmFtZV9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkxNC1cdFx0XHRcdFx0ICAgICBjaGFyICpidWYpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkyNS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5MjY6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9yZWxlYXNlX2VuYWJsZWRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTI3LVx0XHRcdFx0XHQgICAgY2hhciAqYnVmKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05NDEtICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTQyOnN0YXRpYyB2b2lkIHVucmVnaXN0ZXJfbmV0Y29uc19jb25zb2xlcyh2b2lkKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk0My17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk2NS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5NjY6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9tc2dpZF9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk2Ny1cdFx0XHRcdFx0ICBjaGFyICpidWYpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk4NS0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5ODY6c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTg3LVx0XHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA4My1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMDg0OnN0YXRpYyBzc2l6ZV90IHJlbGVhc2Vfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA4NS1cdFx0XHQgICAgIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTExMC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMTExOnN0YXRpYyBzc2l6ZV90IGV4dGVuZGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExMTItXHRcdHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTEzNi1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMTM3OnN0YXRpYyBzc2l6ZV90IGRldl9uYW1lX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExMzgtXHRcdHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE2My1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMTY0OnN0YXRpYyBzc2l6ZV90IGxvY2FsX3BvcnRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE2NS1cdFx0c2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTg1LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExODY6c3RhdGljIHNzaXplX3QgcmVtb3RlX3BvcnRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExODctXHRcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjA3LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyMDg6c3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIwOS1cdFx0c2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjI5LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyMzA6c3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyMzEtXHQgICAgICAgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjU2LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyNTc6c3RhdGljIHNpemVfdCBjb3VudF91c2VyZGF0YV9lbnRyaWVzKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI1OC17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyNjEtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTI2MjpzdGF0aWMgc3NpemVfdCByZW1vdGVfbWFjX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyNjMtXHRcdHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI4Ny1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMjg4OnN0cnVjdCB1c2VyZGF0dW0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyODktXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gaXRlbTtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI5Mi1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMjkzOnN0YXRpYyBzdHJ1Y3QgdXNlcmRhdHVtICp0b191c2VyZGF0dW0oc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyOTQte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjk3LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyOTg6c3RydWN0IHVzZXJkYXRhIHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjk5LVx0c3RydWN0IGNvbmZpZ19ncm91cCBncm91cDtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTMwMS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMzAyOnN0YXRpYyBzdHJ1Y3QgdXNlcmRhdGEgKnRvX3VzZXJkYXRhKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzAzLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTMwNi1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMzA3OnN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKnVzZXJkYXRhX3RvX3RhcmdldChzdHJ1Y3QgdXNlcmRhdGEgKnVkKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzMDgte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzE0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzMTU6c3RhdGljIHNzaXplX3QgdXNlcmRhdHVtX3ZhbHVlX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTMxNi17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzMjMtICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTMyNDpzdGF0aWMgaW50IGNhbGNfdXNlcmRhdGFfbGVuKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTMyNS17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNDItXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTM0MzpzdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNDQte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzkyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzOTM6c3RhdGljIHNzaXplX3QgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzOTQtXHRcdFx0XHQgICAgIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQzMS0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDMyOnN0YXRpYyB2b2lkIGRpc2FibGVfc3lzZGF0YV9mZWF0dXJlKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQzMy1cdFx0XHRcdCAgICBlbnVtIHN5c2RhdGFfZmVhdHVyZSBmZWF0dXJlKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDM4LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE0Mzk6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9tc2dpZF9lbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDQwLVx0XHRcdFx0XHQgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQ2Ny1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDY4OnN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfcmVsZWFzZV9lbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDY5LVx0XHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDk2LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE0OTc6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV90YXNrbmFtZV9lbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDk4LVx0XHRcdFx0XHQgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTUyNi0vKiBjb25maWdmcyBoZWxwZXIgdG8gc3lzZGF0YSBjcHVfbnIgZmVhdHVyZSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1Mjc6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9jcHVfbnJfZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTUyOC1cdFx0XHRcdFx0ICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNTY0PUNPTkZJR0ZTX0FUVFIoc3lzZGF0YV8sIG1zZ2lkX2VuYWJsZWQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1NjUtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU2NjpzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZSAqdXNlcmRhdHVtX2F0dHJzW10gPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU2Ny1cdFx1MDAyNnVzZXJkYXR1bV9hdHRyX3ZhbHVlLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTcwLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1NzE6c3RhdGljIHZvaWQgdXNlcmRhdHVtX3JlbGVhc2Uoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1NzIte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTc1LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1NzY6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgdXNlcmRhdHVtX29wcyA9IHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTc3LVx0LnJlbGVhc2UgPSB1c2VyZGF0dW1fcmVsZWFzZSxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU3OS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTgwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSB1c2VyZGF0dW1fdHlwZSA9IHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTgxLVx0LmN0X2l0ZW1fb3BzXHQ9IFx1MDAyNnVzZXJkYXR1bV9vcHMsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1ODUtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU4NjpzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICp1c2VyZGF0dW1fbWFrZV9pdGVtKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1ODctXHRcdFx0XHRcdCAgICAgICBjb25zdCBjaGFyICpuYW1lKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjA4LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2MDk6c3RhdGljIHZvaWQgdXNlcmRhdHVtX2Ryb3Aoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsIHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjEwLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTYyMi1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjIzOnN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICp1c2VyZGF0YV9hdHRyc1tdID0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2MjQtXHRcdTAwMjZzeXNkYXRhX2F0dHJfY3B1X25yX2VuYWJsZWQsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2MzAtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTYzMTpzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgdXNlcmRhdGFfb3BzID0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2MzItXHQubWFrZV9pdGVtXHRcdD0gdXNlcmRhdHVtX21ha2VfaXRlbSxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTYzNS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjM2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSB1c2VyZGF0YV90eXBlID0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2MzctXHQuY3RfaXRlbV9vcHNcdD0gXHUwMDI2dXNlcmRhdHVtX29wcyxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTY1Mz1DT05GSUdGU19BVFRSX1JPKCwgdHJhbnNtaXRfZXJyb3JzKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjU0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NTU6c3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm5ldGNvbnNvbGVfdGFyZ2V0X2F0dHJzW10gPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY1Ni1cdFx1MDAyNmF0dHJfZW5hYmxlZCxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY3My1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjc0OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2Uoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2NzUte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjgxLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2ODI6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgbmV0Y29uc29sZV90YXJnZXRfaXRlbV9vcHMgPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY4My1cdC5yZWxlYXNlXHRcdD0gbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZSxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY4NS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjg2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBuZXRjb25zb2xlX3RhcmdldF90eXBlID0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2ODctXHQuY3RfYXR0cnNcdFx0PSBuZXRjb25zb2xlX3RhcmdldF9hdHRycyxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY5MS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjkyOnN0YXRpYyB2b2lkIGluaXRfdGFyZ2V0X2NvbmZpZ19ncm91cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2OTMtXHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3MDAtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTcwMTpzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpmaW5kX2NtZGxpbmVfdGFyZ2V0KGNvbnN0IGNoYXIgKm5hbWUpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcwMi17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3MjEtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTcyMjpzdGF0aWMgc3RydWN0IGNvbmZpZ19ncm91cCAqbWFrZV9uZXRjb25zb2xlX3RhcmdldChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzIzLVx0XHRcdFx0XHRcdCAgIGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3NTUtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTc1NjpzdGF0aWMgdm9pZCBkcm9wX25ldGNvbnNvbGVfdGFyZ2V0KHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3NTctXHRcdFx0XHQgICBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4MDctXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTgwODpzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgbmV0Y29uc29sZV9zdWJzeXNfZ3JvdXBfb3BzID0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4MDktXHQubWFrZV9ncm91cFx0PSBtYWtlX25ldGNvbnNvbGVfdGFyZ2V0LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODEyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4MTM6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIG5ldGNvbnNvbGVfc3Vic3lzX3R5cGUgPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTgxNC1cdC5jdF9ncm91cF9vcHNcdD0gXHUwMDI2bmV0Y29uc29sZV9zdWJzeXNfZ3JvdXBfb3BzLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODE4LS8qIFRoZSBuZXRjb25zb2xlIGNvbmZpZ2ZzIHN1YnN5c3RlbSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4MTk6c3RhdGljIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gbmV0Y29uc29sZV9zdWJzeXMgPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTgyMC1cdC5zdV9ncm91cFx0PSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4MjctXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTgyODpzdGF0aWMgdm9pZCBwb3B1bGF0ZV9jb25maWdmc19pdGVtKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTgyOS1cdFx0XHRcdCAgIGludCBjbWRsaW5lX2NvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODM3LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4Mzg6c3RhdGljIGludCBzeXNkYXRhX2FwcGVuZF9jcHVfbnIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IG9mZnNldCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODM5LVx0XHRcdFx0IHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg0NS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODQ2OnN0YXRpYyBpbnQgc3lzZGF0YV9hcHBlbmRfdGFza25hbWUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IG9mZnNldCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODQ3LVx0XHRcdFx0ICAgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODUzLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4NTQ6c3RhdGljIGludCBzeXNkYXRhX2FwcGVuZF9yZWxlYXNlKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBvZmZzZXQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg1NS17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NjAtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTg2MTpzdGF0aWMgaW50IHN5c2RhdGFfYXBwZW5kX21zZ2lkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBvZmZzZXQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg2Mi17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NzMtICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTg3NDpzdGF0aWMgaW50IHByZXBhcmVfc3lzZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NzUtXHRcdFx0ICAgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODk5LS8qIEhhbmRsZSBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugbm90aWZpY2F0aW9ucyAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE5MDA6c3RhdGljIGludCBuZXRjb25zb2xlX25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTkwMS1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk3Ny1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxOTc4OnN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbmV0Y29uc29sZV9uZXRkZXZfbm90aWZpZXIgPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk3OS1cdC5ub3RpZmllcl9jYWxsICA9IG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTkzLSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE5OTQ6c3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjb25zX3NrYl9wb3Aoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IGxlbilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTk1LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjAxNi1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDE3OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmluZF9za2Ioc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IGxlbixcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDE4LVx0XHRcdFx0aW50IHJlc2VydmUpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwNDMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjA0NDpzdGF0aWMgdm9pZCBuZXRwb2xsX3VkcF9jaGVja3N1bShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwNDUtXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjA2OC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDY5OnN0YXRpYyB2b2lkIHB1c2hfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjA3MC17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwODYtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjA4NzpzdGF0aWMgdm9pZCBwdXNoX2V0aChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwODgte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTAxLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxMDI6c3RhdGljIHZvaWQgcHVzaF9pcHY0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjEwMy1cdFx0ICAgICAgaW50IGxlbilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjEyOS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTMwOnN0YXRpYyB2b2lkIHB1c2hfaXB2NihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxMzEtXHRcdCAgICAgIGludCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNTMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE1NDpzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNTUtXHRcdFx0ICAgIGludCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDAtICovXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA2NjIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMjMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKklkZW50aWZ5aW5nIEtleSBTeW1ib2xzIGFuZCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIG9yIHN5bWJvbHMgdGhhdCBhcmUgcmVsZXZhbnQsIHBhcnRpY3VsYXJseSB0aG9zZSB0aGF0IGFyZSBub3QgaW5saW5lZCwgYW5kIHRob3NlIHRoYXQgYXJlIG1vZGlmaWVkIGJ5IHRoZSBwYXRjaC4gSSBzZWUgdGhhdCBgbmV0cG9sbF9zZW5kX3VkcGAgaXMgc3RhdGljLCB3aGljaCBpbml0aWFsbHkgZ2l2ZXMgbWUgcGF1c2UsIGJ1dCBpdCYjMzk7cyBjbGVhcmx5IG1vZGlmaWVkIGluIHRoZSBkaWZmLiAgYG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50YCBpcyBhbHNvIHN0YXRpYywgYnV0IGl0JiMzOTtzIGEgbm90aWZpZXIgY2FsbGJhY2sgc28gaXQgaXMgdW5saWtlbHkgdG8gYmUgaW5saW5lZCBhbmQgaXMgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQuIFRoZSBvdGhlciBmdW5jdGlvbnMgSSBpZGVudGlmaWVkIChgbmV0Y29uc29sZV93cml0ZWAsIGBuZXRjb25zb2xlX3dyaXRlX2V4dGAsIGBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljYCwgYGluaXRfbmV0Y29uc29sZWAsIGBkeW5hbWljX25ldGNvbnNvbGVfaW5pdGApIGFyZSBlaXRoZXIgc3RhdGljIG9yIGludGVybmFsIGhlbHBlcnMgYW5kIHVubGlrZWx5IHRvIGJlIGdvb2QgdGFyZ2V0cy4KClRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IGd1aWRlIG1lIHRvd2FyZHMgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0IGhlbHBzIHJlZmluZSBteSBmb2N1cy4gTG9va2luZyBhdCB0aGUgY2FsbCBjaGFpbnMsIGBuZXRjb25zb2xlX3dyaXRlX2V4dGAgYW5kIGBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljYCBhcmUgY29uc29sZSBjYWxsYmFja3MuICBUaGV5JiMzOTtyZSAqbm90KiBpbmxpbmVkIGFuZCBhcmUgd29ydGggZXhwbG9yaW5nLiBTaW1pbGFybHksIGBlbmFibGVkX3N0b3JlYCwgYGxvY2FsX2lwX3N0b3JlYCwgYW5kIGByZW1vdGVfaXBfc3RvcmVgIGFyZSBjb25maWdmcyBjYWxsYmFja3MsIGFuZCB0aGVyZWZvcmUgKm5vdCogaW5saW5lZCwgYW5kIGFsc28gcmVwcmVzZW50IGdvb2QgdGFyZ2V0IGVudHJ5cG9pbnRzLgoKSG93ZXZlciwgSSBub3RlIHRoYXQgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBhbmQgYG5ldGNvbnNvbGVfd3JpdGVfYmFzaWNgIGRvbiYjMzk7dCBkaXJlY3RseSBjYWxsIHRoZSBjb2RlIEkmIzM5O20gaW50ZXJlc3RlZCBpbi4gVGhleSBjYWxsIGludG8gYSBkZWVwZXIgY2hhaW46IGBzZW5kX2V4dF9tc2dfdWRwYCAtJmd0OyBgc2VuZF9tc2dfdWRwYCAtJmd0OyBgc2VuZF91ZHBgIC0mZ3Q7IGBuZXRwb2xsX3NlbmRfdWRwYC4gICpDcnVjaWFsbHkqLCBgbmV0cG9sbF9zZW5kX3VkcGAgaXMgd2hlcmUgdGhlIGNvcmUgbW9kaWZpY2F0aW9uIGxpZXMuIFRoaXMgbWFrZXMgYG5ldHBvbGxfc2VuZF91ZHBgIGEgKnZlcnkqIGdvb2QgY2FuZGlkYXRlLCBkZXNwaXRlIGJlaW5nIHN0YXRpYy4gVGhlIHBhdGNoIGNoYW5nZXMgdGhlIGZhbWlseSBjaGVjayB0aGVyZSB3aGljaCBtZWFucyB0aGF0IHRoZSBjb2RlIHNob3VsZCBiZSBtb3JlIGFjdGl2ZSBub3cuICBJIHNob3VsZCBhbHNvIGluY2x1ZGUgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAgYmVjYXVzZSBpdCBjb250YWlucyBzaW1pbGFyIGZhbWlseSBjaGVja3MgaW4gdGhlIHBhdGNoLCBhbmQgYG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVgIGFzIGl0IGlzIGNhbGxlZCBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uLiBUaGUgY29uZmlnZnMgY2FsbGJhY2tzIGFyZSBrZXkuIGBsb2NhbF9pcF9zdG9yZWAgYW5kIGByZW1vdGVfaXBfc3RvcmVgIGFyZSBpbXBvcnRhbnQuIFRoZSBwYXRjaGVzIGFsc28gY29udGFpbiBtb2RpZmljYXRpb25zIHRvIGBuZXRwb2xsX3BhcnNlX2lwX2FkZHJgLiBgZW5hYmxlZF9zdG9yZWAgc2hvdWxkIHRyaWdnZXIgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAuCgpTbyBteSBpbml0aWFsIGxpc3Qgb2Yga2V5IHN5bWJvbHMgdG8gaW52ZXN0aWdhdGUgaXM6CgoqICAgYGxvY2FsX2lwX3N0b3JlYAoqICAgYHJlbW90ZV9pcF9zdG9yZWAKKiAgIGBlbmFibGVkX3N0b3JlYAoqICAgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAKKiAgIGBuZXRwb2xsX3NlbmRfdWRwYAoqICAgYG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVgCgpOZXh0LCBJIG5lZWQgdG8gY29uc2lkZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBmdXp6IG1vZHVsZSBwYXJhbWV0ZXJzLCBzbyBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAgZHVyaW5nIG1vZHVsZSBpbml0IHdpbGwgYmUgZ29vZC4gYGxvY2FsX2lwX3N0b3JlYCBhbmQgYHJlbW90ZV9pcF9zdG9yZWAgbG9vayBpZGVhbCBmb3IgY29uZmlnZnMgZnV6emluZy4gYGVuYWJsZWRfc3RvcmVgIHdpbGwgdHJpZ2dlciBgbmV0Y29uc19uZXRwb2xsX3NldHVwYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQgZm9yIGNvbXByZWhlbnNpdmUgdGVzdGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX05FVENPTlNPTEVgIGlzIGVuYWJsZWQsIGFuZCBgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ2AgdG9vLiBgQ09ORklHX0lQVjZgIGlzIHByb2JhYmx5IG5lZWRlZCB0byBleGVyY2lzZSBJUHY2IHBhdGhzLiBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgQ09ORklHX0NPTkZJR0ZTX0ZTYCBpcyBlbmFibGVkIGFzIHdlbGwgZm9yIGR5bmFtaWMgdXNlLiAgSSBzaG91bGQgZG91YmxlIGNoZWNrIGBORVRDT05TT0xFX0RZTkFNSUNgIGluIGBkcml2ZXJzL25ldC9LY29uZmlnYCB0byBjb25maXJtIHRoZXNlIGRlcGVuZGVuY2llcy4gVGhhdCBtZWFucyBteSBmaW5hbCBjb25maWd1cmF0aW9uIGxpc3QgaXM6CgoqICAgYE5FVENPTlNPTEVgCiogICBgTkVUQ09OU09MRV9EWU5BTUlDYAoqICAgYElQVjZgCiogICBgQ09ORklHRlNfRlNgCgpUaGlzIGdpdmVzIG1lIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGZ1enppbmcgYW5kIHZlcmlmeWluZyB0aGUgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRDT05TT0xFX0RZTkFNSUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MzI3PWNvbmZpZyBORVRDT05TT0xFXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzMtXG5kcml2ZXJzL25ldC9LY29uZmlnOjMzNDpjb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzNS1cdGJvb2wgXCYjMzQ7RHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgbG9nZ2luZyB0YXJnZXRzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyODI3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIG15IG93biB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqQ2hlY2tpbmcgYENPTkZJR19JUFY2YCYjMzk7cyBDb25maWd1cmF0aW9uIFN0YXR1cyoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIGludG8gdGhpcyBmdXJ0aGVyLCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgb2Ygb25lIGNydWNpYWwgdGhpbmc6IFdoYXQmIzM5O3MgdGhlIGRlYWwgd2l0aCBgQ09ORklHX0lQVjZgPyBJcyBpdCBhIHNpbXBsZSBib29sZWFuLCBhIHRydWUvZmFsc2UgZmxhZz8gT3IgaXMgaXQgYSBtb3JlIGNvbXBsZXggdHJpc3RhdGUgdmFyaWFibGUsIGNhcGFibGUgb2YgYmVpbmcgc2V0IHRvICYjMzQ7eWVzLCYjMzQ7ICYjMzQ7bm8sJiMzNDsgb3IgJiMzNDttb2R1bGUmIzM0Oz8gVGhhdCBzZWVtaW5nbHkgc21hbGwgZGlzdGluY3Rpb24gd2lsbCBkaWN0YXRlIGEgbG90IG9mIGhvdyBJIGFwcHJvYWNoIHRoaXMgcGFydGljdWxhciBhc3BlY3Qgb2YgdGhlIHN5c3RlbS4gSSBuZWVkIHRvIGtub3cgaXRzIGNvbmZpZ3VyYXRpb24gdHlwZSB0byBlZmZlY3RpdmVseSByZWFzb24gYWJvdXQgaXRzIGltcGxpY2F0aW9ucyBkb3duIHRoZSBsaW5lLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHF1ZXN0aW9uIHRoYXQgaW1wYWN0cyBteSBuZXh0IHN0ZXBzLiBHb3R0YSBnZXQgdGhpcyBuYWlsZWQgZG93bi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQVjYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWctNS1cbm5ldC9pcHY2L0tjb25maWc6NjptZW51Y29uZmlnIElQVjZcbm5ldC9pcHY2L0tjb25maWctNy1cdGJvb2wgXCYjMzQ7VGhlIElQdjYgcHJvdG9jb2xcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTE5PWlmIElQVjZcbm5ldC9pcHY2L0tjb25maWctMjAtXG5uZXQvaXB2Ni9LY29uZmlnOjIxOmNvbmZpZyBJUFY2X1JPVVRFUl9QUkVGXG5uZXQvaXB2Ni9LY29uZmlnLTIyLVx0Ym9vbCBcJiMzNDtJUHY2OiBSb3V0ZXIgUHJlZmVyZW5jZSAoUkZDIDQxOTEpIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMwLVxubmV0L2lwdjYvS2NvbmZpZzozMTpjb25maWcgSVBWNl9ST1VURV9JTkZPXG5uZXQvaXB2Ni9LY29uZmlnLTMyLVx0Ym9vbCBcJiMzNDtJUHY2OiBSb3V0ZSBJbmZvcm1hdGlvbiAoUkZDIDQxOTEpIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTM4LVxubmV0L2lwdjYvS2NvbmZpZzozOTpjb25maWcgSVBWNl9PUFRJTUlTVElDX0RBRFxubmV0L2lwdjYvS2NvbmZpZy00MC1cdGJvb2wgXCYjMzQ7SVB2NjogRW5hYmxlIFJGQyA0NDI5IE9wdGltaXN0aWMgREFEXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xMDI9Y29uZmlnIElORVQ2X0lQQ09NUFxuLS1cbm5ldC9pcHY2L0tjb25maWctMTExLVxubmV0L2lwdjYvS2NvbmZpZzoxMTI6Y29uZmlnIElQVjZfTUlQNlxubmV0L2lwdjYvS2NvbmZpZy0xMTMtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBNb2JpbGl0eVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTE5LVxubmV0L2lwdjYvS2NvbmZpZzoxMjA6Y29uZmlnIElQVjZfSUxBXG5uZXQvaXB2Ni9LY29uZmlnLTEyMS1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElkZW50aWZpZXIgTG9jYXRvciBBZGRyZXNzaW5nIChJTEEpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xNDY9Y29uZmlnIElORVQ2X1RVTk5FTFxuLS1cbm5ldC9pcHY2L0tjb25maWctMTQ5LVxubmV0L2lwdjYvS2NvbmZpZzoxNTA6Y29uZmlnIElQVjZfVlRJXG5uZXQvaXB2Ni9LY29uZmlnLTE1MS1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgKHNlY3VyZSkgSVB2NjogdHVubmVsaW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNjEtXG5uZXQvaXB2Ni9LY29uZmlnOjE2Mjpjb25maWcgSVBWNl9TSVRcbm5ldC9pcHY2L0tjb25maWctMTYzLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogSVB2Ni1pbi1JUHY0IHR1bm5lbCAoU0lUIGRyaXZlcilcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE3Ni1cbm5ldC9pcHY2L0tjb25maWc6MTc3OmNvbmZpZyBJUFY2X1NJVF82UkRcbm5ldC9pcHY2L0tjb25maWctMTc4LVx0Ym9vbCBcJiMzNDtJUHY2OiBJUHY2IFJhcGlkIERlcGxveW1lbnQgKDZSRClcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE5NS1cbm5ldC9pcHY2L0tjb25maWc6MTk2OmNvbmZpZyBJUFY2X05ESVNDX05PREVUWVBFXG5uZXQvaXB2Ni9LY29uZmlnLTE5Ny1cdGJvb2xcbm5ldC9pcHY2L0tjb25maWctMTk4LVxubmV0L2lwdjYvS2NvbmZpZzoxOTk6Y29uZmlnIElQVjZfVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTIwMC1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElQLWluLUlQdjYgdHVubmVsIChSRkMyNDczKVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjA5LVxubmV0L2lwdjYvS2NvbmZpZzoyMTA6Y29uZmlnIElQVjZfR1JFXG5uZXQvaXB2Ni9LY29uZmlnLTIxMS1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IEdSRSB0dW5uZWxcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIyNy1cbm5ldC9pcHY2L0tjb25maWc6MjI4OmNvbmZpZyBJUFY2X0ZPVVxubmV0L2lwdjYvS2NvbmZpZy0yMjktXHR0cmlzdGF0ZVxuLS1cbm5ldC9pcHY2L0tjb25maWctMjMxLVxubmV0L2lwdjYvS2NvbmZpZzoyMzI6Y29uZmlnIElQVjZfRk9VX1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yMzMtXHR0cmlzdGF0ZVxuLS1cbm5ldC9pcHY2L0tjb25maWctMjM2LVxubmV0L2lwdjYvS2NvbmZpZzoyMzc6Y29uZmlnIElQVjZfTVVMVElQTEVfVEFCTEVTXG5uZXQvaXB2Ni9LY29uZmlnLTIzOC1cdGJvb2wgXCYjMzQ7SVB2NjogTXVsdGlwbGUgUm91dGluZyBUYWJsZXNcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI0Mi1cbm5ldC9pcHY2L0tjb25maWc6MjQzOmNvbmZpZyBJUFY2X1NVQlRSRUVTXG5uZXQvaXB2Ni9LY29uZmlnLTI0NC1cdGJvb2wgXCYjMzQ7SVB2Njogc291cmNlIGFkZHJlc3MgYmFzZWQgcm91dGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjU2LVxubmV0L2lwdjYvS2NvbmZpZzoyNTc6Y29uZmlnIElQVjZfTVJPVVRFXG5uZXQvaXB2Ni9LY29uZmlnLTI1OC1cdGJvb2wgXCYjMzQ7SVB2NjogbXVsdGljYXN0IHJvdXRpbmdcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI2NC1cbm5ldC9pcHY2L0tjb25maWc6MjY1OmNvbmZpZyBJUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY2L0tjb25maWctMjY2LVx0Ym9vbCBcJiMzNDtJUHY2OiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI3OC1cbm5ldC9pcHY2L0tjb25maWc6Mjc5OmNvbmZpZyBJUFY2X1BJTVNNX1YyXG5uZXQvaXB2Ni9LY29uZmlnLTI4MC1cdGJvb2wgXCYjMzQ7SVB2NjogUElNLVNNIHZlcnNpb24gMiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yODUtXG5uZXQvaXB2Ni9LY29uZmlnOjI4Njpjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTI4Ny1cdGJvb2wgXCYjMzQ7SVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI5OS1cbm5ldC9pcHY2L0tjb25maWc6MzAwOmNvbmZpZyBJUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvS2NvbmZpZy0zMDEtXHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMxMS1cbm5ldC9pcHY2L0tjb25maWc6MzEyOmNvbmZpZyBJUFY2X1NFRzZfQlBGXG5uZXQvaXB2Ni9LY29uZmlnLTMxMy1cdGRlZl9ib29sIHlcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMxNi1cbm5ldC9pcHY2L0tjb25maWc6MzE3OmNvbmZpZyBJUFY2X1JQTF9MV1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0zMTgtXHRib29sIFwmIzM0O0lQdjY6IFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMzI3LVxubmV0L2lwdjYvS2NvbmZpZzozMjg6Y29uZmlnIElQVjZfSU9BTTZfTFdUVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMzI5LVx0Ym9vbCBcJiMzNDtJUHY2OiBJT0FNIFByZS1hbGxvY2F0ZWQgVHJhY2UgaW5zZXJ0aW9uIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ1NzkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV0Y29uc29sZSBNb2R1bGUmIzM5O3MgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgSVBWNmAgaXMganVzdCBhIGJvb2xlYW4sIGFuZCBpdCYjMzk7cyBzZXQgY29ycmVjdGx5LiBUaGF0JiMzOTtzIGdvb2QsIG9uZSBsZXNzIHRoaW5nIHRvIHdvcnJ5IGFib3V0LiBOb3csIGxldCYjMzk7cyB0YWtlIHN0b2NrIG9mIHRoZSBrZXkgc3ltYm9scyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGhlcmU6IGBsb2NhbF9pcF9zdG9yZWAsIGByZW1vdGVfaXBfc3RvcmVgLCBgZW5hYmxlZF9zdG9yZWAsIGBuZXRjb25zX25ldHBvbGxfc2V0dXBgLCBgbmV0cG9sbF9zZW5kX3VkcGAsIGFuZCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGNvcmUgY29tcG9uZW50cyBJIG5lZWQgdG8gdW5kZXJzdGFuZC4KCldhaXQgYSBzZWNvbmTigKYgYG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYGFsbG9jX3BhcmFtX3RhcmdldGAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGZyb20gYGluaXRfbmV0Y29uc29sZWAsIHdoaWNoIGlzIHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBmdW5jdGlvbiBpcyBhY2Nlc3NpYmxlIGZyb20gb3V0c2lkZSB0aGUga2VybmVsLiBUaGUgc3RhdGljIGRlY2xhcmF0aW9uIGlzIG5vdCBpZGVhbCwgZGVwZW5kaW5nIG9uIHRoZSBzY29wZS4gQ291bGQgYG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVgIGJlIHJlYWNoZWQgdGhyb3VnaCBjb25maWdmcz8gVGhhdCYjMzk7cyBhIHBvc3NpYmlsaXR5IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBJZiBzbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBwYXJzZXIgaXMgYmVpbmcgYWNjZXNzZWQuCgpUbyBjbGFyaWZ5IG15IHRob3VnaHQgcHJvY2VzcywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGNhbGxlcnMgb2YgYGFsbG9jX3BhcmFtX3RhcmdldGAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYCBpcyB1c2VkLCBhbmQgZnJvbSB3aGVyZS4gVGhpcyBpcyBhIGNyaXRpY2FsIHBvaW50IHRvIHBpbiBkb3duIHRvIGFzc2VzcyB0aGUgcG90ZW50aWFsIGlzc3Vlcywgb3IgaWYgdGhlIHN5c3RlbSBkZXNpZ24gaXMgc291bmQsIGluIHRoZSBuZXRjb25zb2xlIG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfcGFyYW1fdGFyZ2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNDk4PXN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1ODUtLyogQWxsb2NhdGUgbmV3IHRhcmdldCAoZnJvbSBib290L21vZHVsZSBwYXJhbSkgYW5kIHNldHVwIG5ldHBvbGwgZm9yIGl0ICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjU4NjpzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19wYXJhbV90YXJnZXQoY2hhciAqdGFyZ2V0X2NvbmZpZyxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTg3LVx0XHRcdFx0XHRcdCAgICBpbnQgY21kbGluZV9jb3VudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjY3OD1zdGF0aWMgaW50IF9faW5pdCBpbml0X25ldGNvbnNvbGUodm9pZClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY4OS1cdFx0d2hpbGUgKCh0YXJnZXRfY29uZmlnID0gc3Ryc2VwKFx1MDAyNmlucHV0LCBcJiMzNDs7XCYjMzQ7KSkpIHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjkwOlx0XHRcdG50ID0gYWxsb2NfcGFyYW1fdGFyZ2V0KHRhcmdldF9jb25maWcsIGNvdW50KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjkxLVx0XHRcdGlmIChJU19FUlIobnQpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MzM5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBGb2N1cyBmb3IgTmV0Y29uc29sZSBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyB0aGluayB0aGlzIHRocm91Z2ggZm9yIHRoZSBgbmV0Y29uc29sZWAgbW9kdWxlLiBJIHNlZSB0aGF0IGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYCBpcyBvbmx5IGNhbGxlZCBmcm9tIGBpbml0X25ldGNvbnNvbGVgLCBtZWFuaW5nIGl0JiMzOTtzIG9ubHkgYWNjZXNzaWJsZSBkdXJpbmcgbW9kdWxlIGxvYWQuIEdvb2QsIHRoYXQgbWFrZXMgaXQgYSB2aWFibGUgdGFyZ2V0IGZvciBmdXp6aW5nIGJlY2F1c2UgU3l6a2FsbGVyIGNhbiwgb2YgY291cnNlLCBmdXp6IG1vZHVsZSBwYXJhbWV0ZXJzLgoKTm93LCBJIG5lZWQgdG8gY2hvb3NlIHNvbWUgZ29vZCBmb2N1cyBzeW1ib2xzLiBJJiMzOTttIGNvbnNpZGVyaW5nIGBuZXRwb2xsX3BhcnNlX2lwX2FkZHJgLiBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgYnkgYGxvY2FsX2lwX3N0b3JlYCwgYHJlbW90ZV9pcF9zdG9yZWAsIGFuZCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAsIHdoaWNoIGlzIGEgZ29vZCBzaWduLiBJdCAqaXMqIHN0YXRpYywgYnV0IGl0JiMzOTtzIHRoZSBjb3JlIHBhcnNpbmcgZnVuY3Rpb24gdGhhdCYjMzk7cyBiZWluZyBtb2RpZmllZCwgc28gSSYjMzk7bGwga2VlcCBpdCBpbiBmb3Igbm93LgoKTGV0JiMzOTtzIHJlZmluZSB0aGUgbGlzdC4gUmlnaHQgbm93LCBJJiMzOTttIHRoaW5raW5nOgoKKiAgIGBsb2NhbF9pcF9zdG9yZWAKKiAgIGByZW1vdGVfaXBfc3RvcmVgCiogICBgZW5hYmxlZF9zdG9yZWAKKiAgIGBuZXRjb25zX25ldHBvbGxfc2V0dXBgCiogICBgbmV0cG9sbF9zZW5kX3VkcGAKKiAgIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYAoqICAgYG5ldHBvbGxfcGFyc2VfaXBfYWRkcmAKCkhvbGQgb24sIHRoZSBkb2N1bWVudGF0aW9uIGlzIHJlbWluZGluZyBtZSB0byBwcmlvcml0aXplIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhhdCBtYWtlcyBzZW5zZTsgaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIGRvbiYjMzk7dCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIGBuZXRwb2xsX3BhcnNlX2lwX2FkZHJgIGlzIHN0YXRpYywgYW5kIG1heSBiZSBpbmxpbmVkLiBCdXQgZ2l2ZW4gaXQgaXMgY2FsbGVkIGZyb20gbXVsdGlwbGUgbG9jYXRpb25zLCBwZXJoYXBzIG5vdC4gYGxvY2FsX2lwX3N0b3JlYCwgYHJlbW90ZV9pcF9zdG9yZWAsIGFuZCBgZW5hYmxlZF9zdG9yZWAgYXJlIGNvbmZpZ2ZzIGNhbGxiYWNrczsgbm8gd2F5IHRoZXkgYXJlIGlubGluZWQuIGBuZXRjb25zX25ldHBvbGxfc2V0dXBgIGlzIHByb2JhYmx5IHRvbyBsYXJnZSB0byBiZSBpbmxpbmVkIGFuZCB0aGUgc2FtZSBmb3IgYG5ldHBvbGxfc2VuZF91ZHBgIGFuZCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAuCgpZZXAsIEkgdGhpbmsgdGhpcyBsaXN0IGlzIHNvbGlkLgoKRm9yIGNvbmZpZ3VyYXRpb25zLCBJJiMzOTtsbCBuZWVkOgoKKiAgIGBORVRDT05TT0xFYAoqICAgYE5FVENPTlNPTEVfRFlOQU1JQ2AKKiAgIGBJUFY2YAoqICAgYENPTkZJR0ZTX0ZTYAoKSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgQ09ORklHRlNfRlNgIGlzIHRoZSBjb3JyZWN0IG5hbWUgdGhvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ09ORklHRlNfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9jb25maWdmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2NvbmZpZ2ZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2NvbmZpZ2ZzL0tjb25maWc6Mjpjb25maWcgQ09ORklHRlNfRlNcbmZzL2NvbmZpZ2ZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1VzZXJzcGFjZS1kcml2ZW4gY29uZmlndXJhdGlvbiBmaWxlc3lzdGVtXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MzQxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgRGVwZW5kZW5jaWVzIGZvciBOZXR3b3JrIENvbnNvbGUqKgoKT2theSwgeWVzLCBgQ09ORklHRlNfRlNgIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IGZpbGUgc3lzdGVtIGZvciB3aGF0IEkmIzM5O20gZG9pbmcgaGVyZS4gVGltZSB0byBtYWtlIHN1cmUgYE5FVENPTlNPTEVfRFlOQU1JQ2AgaXNuJiMzOTt0IHJlbHlpbmcgb24gYW55dGhpbmcgZWxzZSB1bmV4cGVjdGVkLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBkZXBlbmRlbmN5IHN0cmluZyBsb29rcyBsaWtlOiBgZGVwZW5kcyBvbiBORVRDT05TT0xFICZhbXA7JmFtcDsgU1lTRlMgJmFtcDsmYW1wOyBDT05GSUdGU19GUyAmYW1wOyZhbXA7ICEoTkVUQ09OU09MRT15ICZhbXA7JmFtcDsgQ09ORklHRlNfRlM9bSlgLiBBbHJpZ2h0LCBzbyBpdCYjMzk7cyBkaXJlY3RseSBkZXBlbmRlbnQgb24gYE5FVENPTlNPTEVgLCBgU1lTRlNgLCBhbmQgYENPTkZJR0ZTX0ZTYCwgd2l0aCBhIGNhdmVhdC4gVGhhdCYjMzk7cyBnb29kIHByYWN0aWNlLiBJJiMzOTtsbCBhZGQgYFNZU0ZTYCBqdXN0IHRvIGJlIHNhZmUsIHRob3VnaCBpdCYjMzk7cyB1c3VhbGx5IHBhcnQgb2YgbW9zdCBzZXR1cHMgYW55d2F5LiBXYWl0IGEgc2Vjb25kLi4uIGBTWVNGU2AgaXMgYSAqYm9vbGVhbiosIGlzbiYjMzk7dCBpdD8gT2theSwgbm8gcHJvYmxlbSwgdGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNZU0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvc3lzZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9zeXNmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9zeXNmcy9LY29uZmlnOjI6Y29uZmlnIFNZU0ZTXG5mcy9zeXNmcy9LY29uZmlnLTMtXHRib29sIFwmIzM0O3N5c2ZzIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NzE4CgkJCQkJCQlvdXRwdXQ6IDI0NgoJCQkJCQkJdGhvdWdodHM6IDIzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIHRoZSB0ZXh0IGNvbmZpcm1zIG15IGluaXRpYWwgaHVuY2gg4oCTIHllcywgYFNZU0ZTYCBpcyByZWxldmFudCBoZXJlLiBOb3csIGxldCYjMzk7cyBkaWcgZGVlcGVyIHRvIHNlZSB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBjb21lIGludG8gcGxheSB3aXRoIHRoaXMgcGF0Y2guIEkgYWxyZWFkeSBrbm93IHRoYXQgYENPTkZJR19JTkVUYCBpcyBlc3NlbnRpYWwgZm9yIElQdjQsIGFuZCB1c3VhbGx5LCBpdCYjMzk7cyBlbmFibGVkIGJ5IGRlZmF1bHQgYW55d2F5LiBgQ09ORklHX05FVGAgaXMgYW5vdGhlciBvYnZpb3VzIGRlcGVuZGVuY3ksIGFzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbmV0d29ya2luZy4KClRvIGJlIGNvbXByZWhlbnNpdmUgaW4gbXkgYW5hbHlzaXMsIEkmIzM5O20gZ29pbmcgdG8gZXhwbGljaXRseSBsaXN0IG91dCBhIGZldyBjb25maWd1cmF0aW9ucyB0aGF0IEkgdGhpbmsgYXJlIGdvaW5nIHRvIGJlIG1vc3QgcmVsZXZhbnQgZm9yIGZ1enppbmcgdGhpcyBwYXRjaDogYE5FVENPTlNPTEVgLCBgTkVUQ09OU09MRV9EWU5BTUlDYCwgYElQVjZgLCBhbmQgYENPTkZJR0ZTX0ZTYC4KClRoZSByZWFzb25pbmcgaXMgcHJldHR5IGNsZWFyLiBUaGlzIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgY2hhbmdpbmcgaG93IHRoZSBgbmV0Y29uc29sZWAgZHJpdmVyIGhhbmRsZXMgSVAgYWRkcmVzc2VzIGJ5IHJlcGxhY2luZyB0aGUgYm9vbGVhbiBmbGFnIGFwcHJvYWNoIHdpdGggYSBgc3RydWN0IGluZXRfYWRkcmAgdGhhdCBleHBsaWNpdGx5IHRyYWNrcyB0aGUgYWRkcmVzcyBmYW1pbHkuIFRoaXMgY2hhbmdlIGRpcmVjdGx5IGltcGFjdHMgaG93IHRoZSBkcml2ZXIgcGFyc2VzIGFuZCBtYW5hZ2VzIGxvY2FsIGFuZCByZW1vdGUgSVAgYWRkcmVzc2VzLCBhbmQgaG93IGl0IGhhbmRsZXMgVURQIGVuY2Fwc3VsYXRpb24gd2l0aGluIGBuZXRwb2xsYC4gSSBjYW4gc2VlIHNldmVyYWwgYXJlYXMgdGhhdCBuZWVkIHNjcnV0aW55LgoKU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgYXR0YWNrIHN1cmZhY2VzIHRocm91Z2ggbW9kdWxlIHBhcmFtZXRlcnMgYXQgYm9vdCBhbmQgbG9hZCB0aW1lIGFuZCBkeW5hbWljYWxseSB0aHJvdWdoIGNvbmZpZ2ZzIGF0dHJpYnV0ZXMuIFRoZSBmdXp6aW5nIGVmZm9ydHMgc2hvdWxkIHByaW9yaXRpemUgdGhlIGNvbmZpZ2ZzIHN0b3JlIGNhbGxiYWNrcywgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgcGFyc2VyLCBhbmQgdGhlIG5ldHBvbGwgc2V0dXAgYW5kIHNlbmQgcGF0aHMuIFdlIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgdGhpcyBuZXcgYWRkcmVzcyBmYW1pbHkgbG9naWMgaGFuZGxlcyBhbGwgdGhlIGVkZ2UgY2FzZXMgY29ycmVjdGx5LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGhlcmUsIHNvIHJvYnVzdCBmdXp6aW5nIGlzIGNydWNpYWwuCgpBbHJpZ2h0LCBJJiMzOTttIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRDT05TT0xFJiMzNDssCiAgICAmIzM0O05FVENPTlNPTEVfRFlOQU1JQyYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bG9jYWxfaXBfc3RvcmUmIzM0OywKICAgICYjMzQ7cmVtb3RlX2lwX3N0b3JlJiMzNDssCiAgICAmIzM0O2VuYWJsZWRfc3RvcmUmIzM0OywKICAgICYjMzQ7bmV0Y29uc19uZXRwb2xsX3NldHVwJiMzNDssCiAgICAmIzM0O25ldHBvbGxfc2VuZF91ZHAmIzM0OywKICAgICYjMzQ7bmV0Y29uc29sZV9wYXJzZXJfY21kbGluZSYjMzQ7LAogICAgJiMzNDtuZXRwb2xsX3BhcnNlX2lwX2FkZHImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGNvbnNvbGUgZHJpdmVyIHRvIHVzZSBhIG5ldyBgc3RydWN0IGluZXRfYWRkcmAgdGhhdCBleHBsaWNpdGx5IHRyYWNrcyB0aGUgSVAgYWRkcmVzcyBmYW1pbHkgKEFGX0lORVQsIEFGX0lORVQ2LCBvciBBRl9VTlNQRUMpIGluc3RlYWQgb2YgcmVseWluZyBvbiBhIGJvb2xlYW4gZmxhZyBhbmQgemVyby1jaGVja3MuIFRoaXMgYWZmZWN0cyBob3cgbG9jYWwgYW5kIHJlbW90ZSBJUCBhZGRyZXNzZXMgYXJlIHBhcnNlZCwgc3RvcmVkLCBhbmQgdXNlZCBmb3IgVURQIGVuY2Fwc3VsYXRpb24gaW4gbmV0cG9sbC4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBtb2R1bGUgcGFyYW1ldGVycyBhdCBib290L2xvYWQgdGltZSBhbmQgZHluYW1pY2FsbHkgdmlhIGNvbmZpZ2ZzIGF0dHJpYnV0ZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBjb25maWdmcyBzdG9yZSBjYWxsYmFja3MsIHRoZSBtb2R1bGUgcGFyYW1ldGVyIHBhcnNlciwgYW5kIHRoZSBuZXRwb2xsIHNldHVwIGFuZCBzZW5kIHBhdGhzIHRvIGVuc3VyZSB0aGUgbmV3IGFkZHJlc3MgZmFtaWx5IGxvZ2ljIGhhbmRsZXMgYWxsIGVkZ2UgY2FzZXMgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRDT05TT0xFJiMzNDssCiAgICAmIzM0O05FVENPTlNPTEVfRFlOQU1JQyYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bG9jYWxfaXBfc3RvcmUmIzM0OywKICAgICYjMzQ7cmVtb3RlX2lwX3N0b3JlJiMzNDssCiAgICAmIzM0O2VuYWJsZWRfc3RvcmUmIzM0OywKICAgICYjMzQ7bmV0Y29uc19uZXRwb2xsX3NldHVwJiMzNDssCiAgICAmIzM0O25ldHBvbGxfc2VuZF91ZHAmIzM0OywKICAgICYjMzQ7bmV0Y29uc29sZV9wYXJzZXJfY21kbGluZSYjMzQ7LAogICAgJiMzNDtuZXRwb2xsX3BhcnNlX2lwX2FkZHImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGNvbnNvbGUgZHJpdmVyIHRvIHVzZSBhIG5ldyBgc3RydWN0IGluZXRfYWRkcmAgdGhhdCBleHBsaWNpdGx5IHRyYWNrcyB0aGUgSVAgYWRkcmVzcyBmYW1pbHkgKEFGX0lORVQsIEFGX0lORVQ2LCBvciBBRl9VTlNQRUMpIGluc3RlYWQgb2YgcmVseWluZyBvbiBhIGJvb2xlYW4gZmxhZyBhbmQgemVyby1jaGVja3MuIFRoaXMgYWZmZWN0cyBob3cgbG9jYWwgYW5kIHJlbW90ZSBJUCBhZGRyZXNzZXMgYXJlIHBhcnNlZCwgc3RvcmVkLCBhbmQgdXNlZCBmb3IgVURQIGVuY2Fwc3VsYXRpb24gaW4gbmV0cG9sbC4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBtb2R1bGUgcGFyYW1ldGVycyBhdCBib290L2xvYWQgdGltZSBhbmQgZHluYW1pY2FsbHkgdmlhIGNvbmZpZ2ZzIGF0dHJpYnV0ZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBjb25maWdmcyBzdG9yZSBjYWxsYmFja3MsIHRoZSBtb2R1bGUgcGFyYW1ldGVyIHBhcnNlciwgYW5kIHRoZSBuZXRwb2xsIHNldHVwIGFuZCBzZW5kIHBhdGhzIHRvIGVuc3VyZSB0aGUgbmV3IGFkZHJlc3MgZmFtaWx5IGxvZ2ljIGhhbmRsZXMgYWxsIGVkZ2UgY2FzZXMgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6MzY6MTAuNzU4MDAwNjI5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3NzUxNzIwMDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVENPTlNPTEVcIixcbiAgICBcIk5FVENPTlNPTEVfRFlOQU1JQ1wiLFxuICAgIFwiSVBWNlwiLFxuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsb2NhbF9pcF9zdG9yZVwiLFxuICAgIFwicmVtb3RlX2lwX3N0b3JlXCIsXG4gICAgXCJlbmFibGVkX3N0b3JlXCIsXG4gICAgXCJuZXRjb25zX25ldHBvbGxfc2V0dXBcIixcbiAgICBcIm5ldHBvbGxfc2VuZF91ZHBcIixcbiAgICBcIm5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVcIixcbiAgICBcIm5ldHBvbGxfcGFyc2VfaXBfYWRkclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRjb25zb2xlIGRyaXZlciB0byB1c2UgYSBuZXcgYHN0cnVjdCBpbmV0X2FkZHJgIHRoYXQgZXhwbGljaXRseSB0cmFja3MgdGhlIElQIGFkZHJlc3MgZmFtaWx5IChBRl9JTkVULCBBRl9JTkVUNiwgb3IgQUZfVU5TUEVDKSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gYSBib29sZWFuIGZsYWcgYW5kIHplcm8tY2hlY2tzLiBUaGlzIGFmZmVjdHMgaG93IGxvY2FsIGFuZCByZW1vdGUgSVAgYWRkcmVzc2VzIGFyZSBwYXJzZWQsIHN0b3JlZCwgYW5kIHVzZWQgZm9yIFVEUCBlbmNhcHN1bGF0aW9uIGluIG5ldHBvbGwuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgbW9kdWxlIHBhcmFtZXRlcnMgYXQgYm9vdC9sb2FkIHRpbWUgYW5kIGR5bmFtaWNhbGx5IHZpYSBjb25maWdmcyBhdHRyaWJ1dGVzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgY29uZmlnZnMgc3RvcmUgY2FsbGJhY2tzLCB0aGUgbW9kdWxlIHBhcmFtZXRlciBwYXJzZXIsIGFuZCB0aGUgbmV0cG9sbCBzZXR1cCBhbmQgc2VuZCBwYXRocyB0byBlbnN1cmUgdGhlIG5ldyBhZGRyZXNzIGZhbWlseSBsb2dpYyBoYW5kbGVzIGFsbCBlZGdlIGNhc2VzIGNvcnJlY3RseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6MzY6MTAuNzU4MDA4NjRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMTgxODAxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDk3ODZiNTc4NjY3NDhlM2Q1YWZmOGEyNGRhMDAxNjA4MGMzNmMxZGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgNSAyMjozNjowOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcXG5pbmRleCAwMzkxMzMwMjMyOGNjLi42OTYyMTcwNWQ2OGRiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xcbkBAIC0xODEsNyArMTgxLDYgQEAgZW51bSB0YXJnZXRfc3RhdGUge1xcbiAgKlxcdFxcdGxvY2FsX21hY1xcdChyZWFkLW9ubHkpXFxuICAqIEBsb2NhbF9pcDpcXHRTb3VyY2UgSVAgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cXG4gICogQHJlbW90ZV9pcDpcXHREZXN0aW5hdGlvbiBJUCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxcbi0gKiBAaXB2NjpcXHRXaGV0aGVyIHRoZSB0YXJnZXQgYWRkcmVzc2VzIGFyZSBJUHY2IChyZWFkLXdyaXRlKS5cXG4gICogQGxvY2FsX3BvcnQ6XFx0U291cmNlIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxcbiAgKiBAcmVtb3RlX3BvcnQ6IERlc3RpbmF0aW9uIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxcbiAgKiBAcmVtb3RlX21hYzpcXHREZXN0aW5hdGlvbiBldGhlcm5ldCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxcbkBAIC0yMTIsOCArMjExLDcgQEAgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcXG4gXFx0Ym9vbFxcdFxcdFxcdGV4dGVuZGVkO1xcbiBcXHRib29sXFx0XFx0XFx0cmVsZWFzZTtcXG4gXFx0c3RydWN0IG5ldHBvbGxcXHRcXHRucDtcXG4tXFx0dW5pb24gaW5ldF9hZGRyXFx0XFx0bG9jYWxfaXAsIHJlbW90ZV9pcDtcXG4tXFx0Ym9vbFxcdFxcdFxcdGlwdjY7XFxuK1xcdHN0cnVjdCBpbmV0X2FkZHJcXHRsb2NhbF9pcCwgcmVtb3RlX2lwO1xcbiBcXHR1MTZcXHRcXHRcXHRsb2NhbF9wb3J0LCByZW1vdGVfcG9ydDtcXG4gXFx0dThcXHRcXHRcXHRyZW1vdGVfbWFjW0VUSF9BTEVOXTtcXG4gXFx0LyogcHJvdGVjdGVkIGJ5IHRhcmdldF9saXN0X2xvY2s7ICsxIGdpdmVzIHNjbnByaW50ZigpIHJvb20gZm9yIGl0c1xcbkBAIC00MTUsNiArNDEzLDcgQEAgc3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0XFx0LyogR290IHRoZSBJUCwgbGV0J3MgcmV0dXJuICovXFxuIFxcdFxcdFxcdG50LVxcdTAwM2Vsb2NhbF9pcC5pbjYgPSBpZnAtXFx1MDAzZWFkZHI7XFxuK1xcdFxcdFxcdG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPSBBRl9JTkVUNjtcXG4gXFx0XFx0XFx0ZXJyID0gMDtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG5AQCAtNDU2LDI4ICs0NTUsMTIgQEAgc3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbiBcXHR9XFxuIFxcbiBcXHRudC1cXHUwMDNlbG9jYWxfaXAuaXAgPSBpZmEtXFx1MDAzZWlmYV9sb2NhbDtcXG4rXFx0bnQtXFx1MDAzZWxvY2FsX2lwLmZhbWlseSA9IEFGX0lORVQ7XFxuIFxcdG5wX2luZm8obnAsIFxcXCJsb2NhbCBJUCAlcEk0XFxcXG5cXFwiLCBcXHUwMDI2bnQtXFx1MDAzZWxvY2FsX2lwLmlwKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBUZXN0IHdoZXRoZXIgdGhlIGNhbGxlciBsZWZ0IG50LVxcdTAwM2Vsb2NhbF9pcCB1bnNldCwgc28gdGhhdFxcbi0gKiBuZXRjb25zX25ldHBvbGxfc2V0dXAoKSBzaG91bGQgYXV0by1wb3B1bGF0ZSBpdCBmcm9tIHRoZSBlZ3Jlc3MgZGV2aWNlLlxcbi0gKlxcbi0gKiBudC1cXHUwMDNlbG9jYWxfaXAgaXMgYSB1bmlvbiBvZiBfX2JlMzIgKElQdjQpIGFuZCBzdHJ1Y3QgaW42X2FkZHIgKElQdjYpLFxcbi0gKiBzbyBhbiBJUHY2IGFkZHJlc3Mgd2hvc2UgZmlyc3QgNCBieXRlcyBhcmUgemVybyAoZS5nLiA6OjEsIDo6MixcXG4tICogSVB2NC1tYXBwZWQgOjpmZmZmOmEuYi5jLmQpIG11c3Qgbm90IGJlIHRlc3RlZCB2aWEgdGhlIElQdjQgYXJtIOKAlFxcbi0gKiBkb2luZyBzbyB3b3VsZCBtaXNjbGFzc2lmeSBhIGNhbGxlci1zdXBwbGllZCBhZGRyZXNzIGFzIHVuc2V0IGFuZFxcbi0gKiBzaWxlbnRseSBvdmVyd3JpdGUgaXQgd2l0aCB3aGF0ZXZlciBhZGRyZXNzIHRoZSBkZXZpY2UgZXhwb3Nlcy5cXG4tICovXFxuLXN0YXRpYyBib29sIG5ldGNvbnNfbG9jYWxfaXBfdW5zZXQoY29uc3Qgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4te1xcbi1cXHRpZiAobnQtXFx1MDAzZWlwdjYpXFxuLVxcdFxcdHJldHVybiBpcHY2X2FkZHJfYW55KFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXAuaW42KTtcXG4tXFx0cmV0dXJuICFudC1cXHUwMDNlbG9jYWxfaXAuaXA7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQgbmV0Y29uc19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuIHtcXG4gXFx0c3RydWN0IG5ldCAqbmV0ID0gY3VycmVudC1cXHUwMDNlbnNwcm94eS1cXHUwMDNlbmV0X25zO1xcbkBAIC00ODgsNiArNDcxLDE5IEBAIHN0YXRpYyBpbnQgbmV0Y29uc19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHRydG5sX2xvY2soKTtcXG4rXFx0aWYgKG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykge1xcbitcXHRcXHRucF9lcnIobnAsIFxcXCJyZW1vdGUgSVAgYWRkcmVzcyBub3QgY29uZmlndXJlZCwgYWJvcnRpbmdcXFxcblxcXCIpO1xcbitcXHRcXHRlcnIgPSAtRURFU1RBRERSUkVRO1xcbitcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gQUZfVU5TUEVDIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBudC1cXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5KSB7XFxuK1xcdFxcdG5wX2VycihucCwgXFxcImxvY2FsIGFuZCByZW1vdGUgSVAgYWRkcmVzcyBmYW1pbGllcyBkaWZmZXIsIGFib3J0aW5nXFxcXG5cXFwiKTtcXG4rXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChucC1cXHUwMDNlZGV2X25hbWVbMF0pXFxuIFxcdFxcdG5kZXYgPSBfX2Rldl9nZXRfYnlfbmFtZShuZXQsIG5wLVxcdTAwM2VkZXZfbmFtZSk7XFxuIFxcdGVsc2UgaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIobnAtXFx1MDAzZWRldl9tYWMpKVxcbkBAIC01MjMsMTYgKzUxOSwxMyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbiBcXHRcXHRydG5sX2xvY2soKTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKG5ldGNvbnNfbG9jYWxfaXBfdW5zZXQobnQpKSB7XFxuLVxcdFxcdGlmICghbnQtXFx1MDAzZWlwdjYpIHtcXG4tXFx0XFx0XFx0ZXJyID0gbmV0Y29uc190YWtlX2lwdjQobnQsIG5kZXYpO1xcbi1cXHRcXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRcXHRnb3RvIHB1dDtcXG4tXFx0XFx0fSBlbHNlIHtcXG4rXFx0aWYgKG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKSB7XFxuK1xcdFxcdGlmIChudC1cXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcXG4gXFx0XFx0XFx0ZXJyID0gbmV0Y29uc190YWtlX2lwdjYobnQsIG5kZXYpO1xcbi1cXHRcXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRcXHRnb3RvIHB1dDtcXG4tXFx0XFx0fVxcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGVyciA9IG5ldGNvbnNfdGFrZV9pcHY0KG50LCBuZGV2KTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBwdXQ7XFxuIFxcdFxcdGlwX292ZXJ3cml0dGVuID0gdHJ1ZTtcXG4gXFx0fVxcbiBcXG5AQCAtNzE0LDI0ICs3MDcsMjQgQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4gXFx0c3RydWN0IG5ldHBvbGwgKm5wID0gXFx1MDAyNm50LVxcdTAwM2VucDtcXG4gXFxuIFxcdG5wX2luZm8obnAsIFxcXCJsb2NhbCBwb3J0ICVkXFxcXG5cXFwiLCBudC1cXHUwMDNlbG9jYWxfcG9ydCk7XFxuLVxcdGlmIChudC1cXHUwMDNlaXB2NilcXG4rXFx0aWYgKG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuIFxcdFxcdG5wX2luZm8obnAsIFxcXCJsb2NhbCBJUHY2IGFkZHJlc3MgJXBJNmNcXFxcblxcXCIsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXAuaW42KTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRucF9pbmZvKG5wLCBcXFwibG9jYWwgSVB2NCBhZGRyZXNzICVwSTRcXFxcblxcXCIsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXAuaXApO1xcbiBcXHRucF9pbmZvKG5wLCBcXFwiaW50ZXJmYWNlIG5hbWUgJyVzJ1xcXFxuXFxcIiwgbnAtXFx1MDAzZWRldl9uYW1lKTtcXG4gXFx0bnBfaW5mbyhucCwgXFxcImxvY2FsIGV0aGVybmV0IGFkZHJlc3MgJyVwTSdcXFxcblxcXCIsIG5wLVxcdTAwM2VkZXZfbWFjKTtcXG4gXFx0bnBfaW5mbyhucCwgXFxcInJlbW90ZSBwb3J0ICVkXFxcXG5cXFwiLCBudC1cXHUwMDNlcmVtb3RlX3BvcnQpO1xcbi1cXHRpZiAobnQtXFx1MDAzZWlwdjYpXFxuK1xcdGlmIChudC1cXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcXG4gXFx0XFx0bnBfaW5mbyhucCwgXFxcInJlbW90ZSBJUHY2IGFkZHJlc3MgJXBJNmNcXFxcblxcXCIsIFxcdTAwMjZudC1cXHUwMDNlcmVtb3RlX2lwLmluNik7XFxuIFxcdGVsc2VcXG4gXFx0XFx0bnBfaW5mbyhucCwgXFxcInJlbW90ZSBJUHY0IGFkZHJlc3MgJXBJNFxcXFxuXFxcIiwgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfaXAuaXApO1xcbiBcXHRucF9pbmZvKG5wLCBcXFwicmVtb3RlIGV0aGVybmV0IGFkZHJlc3MgJXBNXFxcXG5cXFwiLCBudC1cXHUwMDNlcmVtb3RlX21hYyk7XFxuIH1cXG4gXFxuLS8qIFBhcnNlIHRoZSBzdHJpbmcgYW5kIHBvcHVsYXRlIHRoZSBgaW5ldF9hZGRyYCB1bmlvbi4gUmV0dXJuIDAgaWYgSVB2NCBpc1xcbi0gKiBwb3B1bGF0ZWQsIDEgaWYgSVB2NiBpcyBwb3B1bGF0ZWQsIGFuZCAtMSB1cG9uIGZhaWx1cmUuXFxuKy8qIFBhcnNlIHRoZSBzdHJpbmcgYW5kIHBvcHVsYXRlIHRoZSBgaW5ldF9hZGRyYCBzdHJ1Y3QuIFJldHVybiAwIG9uIHN1Y2Nlc3NcXG4rICogYW5kIC0xIHVwb24gZmFpbHVyZS5cXG4gICovXFxuLXN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgdW5pb24gaW5ldF9hZGRyICphZGRyKVxcbitzdGF0aWMgaW50IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBpbmV0X2FkZHIgKmFkZHIpXFxuIHtcXG4gXFx0Y29uc3QgY2hhciAqZW5kID0gTlVMTDtcXG4gXFx0aW50IGxlbjtcXG5AQCAtNzQzLDE0ICs3MzYsMTggQEAgc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCB1bmlvbiBpbmV0X2FkZHIgKmFkZHIpXFxuIFxcdGlmIChzdHJbbGVuIC0gMV0gPT0gJ1xcXFxuJylcXG4gXFx0XFx0bGVuIC09IDE7XFxuIFxcbi1cXHRpZiAoaW40X3B0b24oc3RyLCBsZW4sICh2b2lkICopYWRkciwgLTEsIFxcdTAwMjZlbmQpIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJ1xcXFxuJykpXFxuK1xcdGlmIChpbjRfcHRvbihzdHIsIGxlbiwgKHZvaWQgKilcXHUwMDI2YWRkci1cXHUwMDNlaXAsIC0xLCBcXHUwMDI2ZW5kKSBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXFxcbicpKSB7XFxuK1xcdFxcdGFkZHItXFx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XFxuIFxcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIGluNl9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKWFkZHIsIC0xLCBcXHUwMDI2ZW5kKSBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXFxcbicpKVxcbi1cXHRcXHRyZXR1cm4gMTtcXG4rXFx0ICAgIGluNl9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKVxcdTAwMjZhZGRyLVxcdTAwM2VpbjYsIC0xLCBcXHUwMDI2ZW5kKSBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXFxcbicpKSB7XFxuK1xcdFxcdGFkZHItXFx1MDAzZWZhbWlseSA9IEFGX0lORVQ2O1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbiBcXG4gXFx0cmV0dXJuIC0xO1xcbiB9XFxuQEAgLTg1NSwyMCArODUyLDIwIEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuIHtcXG4gXFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcXG4gXFxuLVxcdGlmIChudC1cXHUwMDNlaXB2NilcXG4rXFx0aWYgKG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuIFxcdFxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVwSTZjXFxcXG5cXFwiLCBcXHUwMDI2bnQtXFx1MDAzZWxvY2FsX2lwLmluNik7XFxuIFxcdGVsc2VcXG4tXFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXBJNFxcXFxuXFxcIiwgXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9pcCk7XFxuK1xcdFxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVwSTRcXFxcblxcXCIsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXAuaXApO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xcbiBcXG4tXFx0aWYgKG50LVxcdTAwM2VpcHY2KVxcbitcXHRpZiAobnQtXFx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuIFxcdFxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVwSTZjXFxcXG5cXFwiLCBcXHUwMDI2bnQtXFx1MDAzZXJlbW90ZV9pcC5pbjYpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVwSTRcXFxcblxcXCIsIFxcdTAwMjZudC1cXHUwMDNlcmVtb3RlX2lwKTtcXG4rXFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXBJNFxcXFxuXFxcIiwgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfaXAuaXApO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3NpemVfdCBsb2NhbF9tYWNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG5AQCAtMTIxMyw3ICsxMjEwLDYgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuIHtcXG4gXFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcXG4gXFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xcbi1cXHRpbnQgaXB2NjtcXG4gXFxuIFxcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XFxuIFxcdGlmIChudC1cXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkge1xcbkBAIC0xMjIyLDEwICsxMjE4LDggQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbiBcXG4tXFx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXApO1xcbi1cXHRpZiAoaXB2NiA9PSAtMSlcXG4rXFx0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXApIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbi1cXHRudC1cXHUwMDNlaXB2NiA9ICEhaXB2NjtcXG4gXFxuIFxcdHJldCA9IGNvdW50O1xcbiBvdXRfdW5sb2NrOlxcbkBAIC0xMjM4LDcgKzEyMzIsNiBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuIHtcXG4gXFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcXG4gXFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xcbi1cXHRpbnQgaXB2NjtcXG4gXFxuIFxcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XFxuIFxcdGlmIChudC1cXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkge1xcbkBAIC0xMjQ3LDEwICsxMjQwLDggQEAgc3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG4gXFxuLVxcdGlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCBcXHUwMDI2bnQtXFx1MDAzZXJlbW90ZV9pcCk7XFxuLVxcdGlmIChpcHY2ID09IC0xKVxcbitcXHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfaXApIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbi1cXHRudC1cXHUwMDNlaXB2NiA9ICEhaXB2NjtcXG4gXFxuIFxcdHJldCA9IGNvdW50O1xcbiBvdXRfdW5sb2NrOlxcbkBAIC0yMDYxLDcgKzIwNTIsNyBAQCBzdGF0aWMgdm9pZCBuZXRwb2xsX3VkcF9jaGVja3N1bShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbiBcXG4gXFx0LyogY2hlY2sgbmVlZHMgdG8gYmUgc2V0LCBzaW5jZSBpdCB3aWxsIGJlIGNvbnN1bWVkIGluIGNzdW1fcGFydGlhbCAqL1xcbiBcXHR1ZHBoLVxcdTAwM2VjaGVjayA9IDA7XFxuLVxcdGlmIChudC1cXHUwMDNlaXB2NilcXG4rXFx0aWYgKG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxcbiBcXHRcXHR1ZHBoLVxcdTAwM2VjaGVjayA9IGNzdW1faXB2Nl9tYWdpYyhcXHUwMDI2bnQtXFx1MDAzZWxvY2FsX2lwLmluNixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfaXAuaW42LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICB1ZHBfbGVuLCBJUFBST1RPX1VEUCxcXG5AQCAtMjEwMiw3ICsyMDkzLDcgQEAgc3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4gXFx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cXHUwMDNlaF9zb3VyY2UsIG5wLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyKTtcXG4gXFx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cXHUwMDNlaF9kZXN0LCBudC1cXHUwMDNlcmVtb3RlX21hYyk7XFxuLVxcdGlmIChudC1cXHUwMDNlaXB2NilcXG4rXFx0aWYgKG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxcbiBcXHRcXHRldGgtXFx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRldGgtXFx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7XFxuQEAgLTIxNzEsNyArMjE2Miw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXFxuIFxcdFxcdFdBUk5fT05fT05DRSghaXJxc19kaXNhYmxlZCgpKTtcXG4gXFxuIFxcdHVkcF9sZW4gPSBsZW4gKyBzaXplb2Yoc3RydWN0IHVkcGhkcik7XFxuLVxcdGlmIChudC1cXHUwMDNlaXB2NilcXG4rXFx0aWYgKG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxcbiBcXHRcXHRpcF9sZW4gPSB1ZHBfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRpcF9sZW4gPSB1ZHBfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcGhkcik7XFxuQEAgLTIxODcsNyArMjE3OCw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXFxuIFxcdHNrYl9wdXQoc2tiLCBsZW4pO1xcbiBcXG4gXFx0cHVzaF91ZHAobnQsIHNrYiwgbGVuKTtcXG4tXFx0aWYgKG50LVxcdTAwM2VpcHY2KVxcbitcXHRpZiAobnQtXFx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuIFxcdFxcdHB1c2hfaXB2NihudCwgc2tiLCBsZW4pO1xcbiBcXHRlbHNlXFxuIFxcdFxcdHB1c2hfaXB2NChudCwgc2tiLCBsZW4pO1xcbkBAIC0yNTA3LDEwICsyNDk4LDggQEAgX19yZWxlYXNlcyhcXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaylcXG4gc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdClcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcXHUwMDI2bnQtXFx1MDAzZW5wO1xcbi1cXHRib29sIGlwdmVyc2lvbl9zZXQgPSBmYWxzZTtcXG4gXFx0Y2hhciAqY3VyID0gb3B0O1xcbiBcXHRjaGFyICpkZWxpbTtcXG4tXFx0aW50IGlwdjY7XFxuIFxcbiBcXHRpZiAoKmN1ciAhPSAnQCcpIHtcXG4gXFx0XFx0ZGVsaW0gPSBzdHJjaHIoY3VyLCAnQCcpO1xcbkBAIC0yNTI0LDE2ICsyNTEzLDEyIEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpXFxuIFxcdGN1cisrO1xcbiBcXG4gXFx0aWYgKCpjdXIgIT0gJy8nKSB7XFxuLVxcdFxcdGlwdmVyc2lvbl9zZXQgPSB0cnVlO1xcbiBcXHRcXHRkZWxpbSA9IHN0cmNocihjdXIsICcvJyk7XFxuIFxcdFxcdGlmICghZGVsaW0pXFxuIFxcdFxcdFxcdGdvdG8gcGFyc2VfZmFpbGVkO1xcbiBcXHRcXHQqZGVsaW0gPSAwO1xcbi1cXHRcXHRpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9pcCk7XFxuLVxcdFxcdGlmIChpcHY2IFxcdTAwM2MgMClcXG4rXFx0XFx0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXApIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0Z290byBwYXJzZV9mYWlsZWQ7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0bnQtXFx1MDAzZWlwdjYgPSAoYm9vbClpcHY2O1xcbiBcXHRcXHRjdXIgPSBkZWxpbTtcXG4gXFx0fVxcbiBcXHRjdXIrKztcXG5AQCAtMjU3NSwxMyArMjU2MCwxMSBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxcbiBcXHRpZiAoIWRlbGltKVxcbiBcXHRcXHRnb3RvIHBhcnNlX2ZhaWxlZDtcXG4gXFx0KmRlbGltID0gMDtcXG4tXFx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsIFxcdTAwMjZudC1cXHUwMDNlcmVtb3RlX2lwKTtcXG4tXFx0aWYgKGlwdjYgXFx1MDAzYyAwKVxcbitcXHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfaXApIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBwYXJzZV9mYWlsZWQ7XFxuLVxcdGVsc2UgaWYgKGlwdmVyc2lvbl9zZXQgXFx1MDAyNlxcdTAwMjYgbnQtXFx1MDAzZWlwdjYgIT0gKGJvb2wpaXB2NilcXG4rXFx0aWYgKG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gQUZfVU5TUEVDIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBudC1cXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5KVxcbiBcXHRcXHRnb3RvIHBhcnNlX2ZhaWxlZDtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRudC1cXHUwMDNlaXB2NiA9IChib29sKWlwdjY7XFxuIFxcdGN1ciA9IGRlbGltICsgMTtcXG4gXFxuIFxcdGlmICgqY3VyICE9IDApIHtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmggYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxcbmluZGV4IDFjNmIxZWVjNWVmZDYuLmRlOTdmMDAxYTBmOWMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxcbkBAIC0xNiw5ICsxNiwxMyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VkcC5oXFx1MDAzZVxcbiBcXG4tdW5pb24gaW5ldF9hZGRyIHtcXG4tXFx0X19iZTMyXFx0XFx0aXA7XFxuLVxcdHN0cnVjdCBpbjZfYWRkclxcdGluNjtcXG4rc3RydWN0IGluZXRfYWRkciB7XFxuK1xcdC8qIEFkZHJlc3MgZmFtaWx5OiBBRl9VTlNQRUMgd2hlbiB1bnNldCwgZWxzZSBBRl9JTkVUIG9yIEFGX0lORVQ2ICovXFxuK1xcdHU4XFx0XFx0XFx0ZmFtaWx5O1xcbitcXHR1bmlvbiB7XFxuK1xcdFxcdF9fYmUzMlxcdFxcdGlwO1xcbitcXHRcXHRzdHJ1Y3QgaW42X2FkZHJcXHRpbjY7XFxuK1xcdH07XFxuIH07XFxuIFxcbiBzdHJ1Y3QgbmV0cG9sbCB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM2OjExLjE5MDU0NDE4NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyNzMxOTE2ODI1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRDT05TT0xFXCIsXG4gICAgXCJORVRDT05TT0xFX0RZTkFNSUNcIixcbiAgICBcIklQVjZcIixcbiAgICBcIkNPTkZJR0ZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibG9jYWxfaXBfc3RvcmVcIixcbiAgICBcInJlbW90ZV9pcF9zdG9yZVwiLFxuICAgIFwiZW5hYmxlZF9zdG9yZVwiLFxuICAgIFwibmV0Y29uc19uZXRwb2xsX3NldHVwXCIsXG4gICAgXCJuZXRwb2xsX3NlbmRfdWRwXCIsXG4gICAgXCJuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lXCIsXG4gICAgXCJuZXRwb2xsX3BhcnNlX2lwX2FkZHJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0Y29uc29sZSBkcml2ZXIgdG8gdXNlIGEgbmV3IGBzdHJ1Y3QgaW5ldF9hZGRyYCB0aGF0IGV4cGxpY2l0bHkgdHJhY2tzIHRoZSBJUCBhZGRyZXNzIGZhbWlseSAoQUZfSU5FVCwgQUZfSU5FVDYsIG9yIEFGX1VOU1BFQykgaW5zdGVhZCBvZiByZWx5aW5nIG9uIGEgYm9vbGVhbiBmbGFnIGFuZCB6ZXJvLWNoZWNrcy4gVGhpcyBhZmZlY3RzIGhvdyBsb2NhbCBhbmQgcmVtb3RlIElQIGFkZHJlc3NlcyBhcmUgcGFyc2VkLCBzdG9yZWQsIGFuZCB1c2VkIGZvciBVRFAgZW5jYXBzdWxhdGlvbiBpbiBuZXRwb2xsLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIG1vZHVsZSBwYXJhbWV0ZXJzIGF0IGJvb3QvbG9hZCB0aW1lIGFuZCBkeW5hbWljYWxseSB2aWEgY29uZmlnZnMgYXR0cmlidXRlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIGNvbmZpZ2ZzIHN0b3JlIGNhbGxiYWNrcywgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgcGFyc2VyLCBhbmQgdGhlIG5ldHBvbGwgc2V0dXAgYW5kIHNlbmQgcGF0aHMgdG8gZW5zdXJlIHRoZSBuZXcgYWRkcmVzcyBmYW1pbHkgbG9naWMgaGFuZGxlcyBhbGwgZWRnZSBjYXNlcyBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDk3ODZiNTc4NjY3NDhlM2Q1YWZmOGEyNGRhMDAxNjA4MGMzNmMxZGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyA1IDIyOjM2OjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG5pbmRleCAwMzkxMzMwMjMyOGNjLi42OTYyMTcwNWQ2OGRiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG4rKysgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbkBAIC0xODEsNyArMTgxLDYgQEAgZW51bSB0YXJnZXRfc3RhdGUge1xuICAqXHRcdGxvY2FsX21hY1x0KHJlYWQtb25seSlcbiAgKiBAbG9jYWxfaXA6XHRTb3VyY2UgSVAgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbiAgKiBAcmVtb3RlX2lwOlx0RGVzdGluYXRpb24gSVAgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbi0gKiBAaXB2NjpcdFdoZXRoZXIgdGhlIHRhcmdldCBhZGRyZXNzZXMgYXJlIElQdjYgKHJlYWQtd3JpdGUpLlxuICAqIEBsb2NhbF9wb3J0Olx0U291cmNlIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuICAqIEByZW1vdGVfcG9ydDogRGVzdGluYXRpb24gVURQIHBvcnQgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXG4gICogQHJlbW90ZV9tYWM6XHREZXN0aW5hdGlvbiBldGhlcm5ldCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuQEAgLTIxMiw4ICsyMTEsNyBAQCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xuIFx0Ym9vbFx0XHRcdGV4dGVuZGVkO1xuIFx0Ym9vbFx0XHRcdHJlbGVhc2U7XG4gXHRzdHJ1Y3QgbmV0cG9sbFx0XHRucDtcbi1cdHVuaW9uIGluZXRfYWRkclx0XHRsb2NhbF9pcCwgcmVtb3RlX2lwO1xuLVx0Ym9vbFx0XHRcdGlwdjY7XG4rXHRzdHJ1Y3QgaW5ldF9hZGRyXHRsb2NhbF9pcCwgcmVtb3RlX2lwO1xuIFx0dTE2XHRcdFx0bG9jYWxfcG9ydCwgcmVtb3RlX3BvcnQ7XG4gXHR1OFx0XHRcdHJlbW90ZV9tYWNbRVRIX0FMRU5dO1xuIFx0LyogcHJvdGVjdGVkIGJ5IHRhcmdldF9saXN0X2xvY2s7ICsxIGdpdmVzIHNjbnByaW50ZigpIHJvb20gZm9yIGl0c1xuQEAgLTQxNSw2ICs0MTMsNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfdGFrZV9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHQvKiBHb3QgdGhlIElQLCBsZXQncyByZXR1cm4gKi9cbiBcdFx0XHRudC1cdTAwM2Vsb2NhbF9pcC5pbjYgPSBpZnAtXHUwMDNlYWRkcjtcbitcdFx0XHRudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPSBBRl9JTkVUNjtcbiBcdFx0XHRlcnIgPSAwO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtNDU2LDI4ICs0NTUsMTIgQEAgc3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFx0fVxuIFxuIFx0bnQtXHUwMDNlbG9jYWxfaXAuaXAgPSBpZmEtXHUwMDNlaWZhX2xvY2FsO1xuK1x0bnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID0gQUZfSU5FVDtcbiBcdG5wX2luZm8obnAsIFwibG9jYWwgSVAgJXBJNFxcblwiLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pcCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tLypcbi0gKiBUZXN0IHdoZXRoZXIgdGhlIGNhbGxlciBsZWZ0IG50LVx1MDAzZWxvY2FsX2lwIHVuc2V0LCBzbyB0aGF0XG4tICogbmV0Y29uc19uZXRwb2xsX3NldHVwKCkgc2hvdWxkIGF1dG8tcG9wdWxhdGUgaXQgZnJvbSB0aGUgZWdyZXNzIGRldmljZS5cbi0gKlxuLSAqIG50LVx1MDAzZWxvY2FsX2lwIGlzIGEgdW5pb24gb2YgX19iZTMyIChJUHY0KSBhbmQgc3RydWN0IGluNl9hZGRyIChJUHY2KSxcbi0gKiBzbyBhbiBJUHY2IGFkZHJlc3Mgd2hvc2UgZmlyc3QgNCBieXRlcyBhcmUgemVybyAoZS5nLiA6OjEsIDo6Mixcbi0gKiBJUHY0LW1hcHBlZCA6OmZmZmY6YS5iLmMuZCkgbXVzdCBub3QgYmUgdGVzdGVkIHZpYSB0aGUgSVB2NCBhcm0g4oCUXG4tICogZG9pbmcgc28gd291bGQgbWlzY2xhc3NpZnkgYSBjYWxsZXItc3VwcGxpZWQgYWRkcmVzcyBhcyB1bnNldCBhbmRcbi0gKiBzaWxlbnRseSBvdmVyd3JpdGUgaXQgd2l0aCB3aGF0ZXZlciBhZGRyZXNzIHRoZSBkZXZpY2UgZXhwb3Nlcy5cbi0gKi9cbi1zdGF0aWMgYm9vbCBuZXRjb25zX2xvY2FsX2lwX3Vuc2V0KGNvbnN0IHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4te1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4tXHRcdHJldHVybiBpcHY2X2FkZHJfYW55KFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmluNik7XG4tXHRyZXR1cm4gIW50LVx1MDAzZWxvY2FsX2lwLmlwO1xuLX1cbi1cbiBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGN1cnJlbnQtXHUwMDNlbnNwcm94eS1cdTAwM2VuZXRfbnM7XG5AQCAtNDg4LDYgKzQ3MSwxOSBAQCBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFx0aW50IGVycjtcbiBcbiBcdHJ0bmxfbG9jaygpO1xuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKSB7XG4rXHRcdG5wX2VycihucCwgXCJyZW1vdGUgSVAgYWRkcmVzcyBub3QgY29uZmlndXJlZCwgYWJvcnRpbmdcXG5cIik7XG4rXHRcdGVyciA9IC1FREVTVEFERFJSRVE7XG4rXHRcdGdvdG8gdW5sb2NrO1xuK1x0fVxuK1xuK1x0aWYgKG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSAhPSBBRl9VTlNQRUMgXHUwMDI2XHUwMDI2XG4rXHQgICAgbnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkpIHtcbitcdFx0bnBfZXJyKG5wLCBcImxvY2FsIGFuZCByZW1vdGUgSVAgYWRkcmVzcyBmYW1pbGllcyBkaWZmZXIsIGFib3J0aW5nXFxuXCIpO1xuK1x0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIHVubG9jaztcbitcdH1cbitcbiBcdGlmIChucC1cdTAwM2VkZXZfbmFtZVswXSlcbiBcdFx0bmRldiA9IF9fZGV2X2dldF9ieV9uYW1lKG5ldCwgbnAtXHUwMDNlZGV2X25hbWUpO1xuIFx0ZWxzZSBpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihucC1cdTAwM2VkZXZfbWFjKSlcbkBAIC01MjMsMTYgKzUxOSwxMyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFx0XHRydG5sX2xvY2soKTtcbiBcdH1cbiBcbi1cdGlmIChuZXRjb25zX2xvY2FsX2lwX3Vuc2V0KG50KSkge1xuLVx0XHRpZiAoIW50LVx1MDAzZWlwdjYpIHtcbi1cdFx0XHRlcnIgPSBuZXRjb25zX3Rha2VfaXB2NChudCwgbmRldik7XG4tXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdGdvdG8gcHV0O1xuLVx0XHR9IGVsc2Uge1xuK1x0aWYgKG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpIHtcbitcdFx0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdFx0ZXJyID0gbmV0Y29uc190YWtlX2lwdjYobnQsIG5kZXYpO1xuLVx0XHRcdGlmIChlcnIpXG4tXHRcdFx0XHRnb3RvIHB1dDtcbi1cdFx0fVxuK1x0XHRlbHNlXG4rXHRcdFx0ZXJyID0gbmV0Y29uc190YWtlX2lwdjQobnQsIG5kZXYpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gcHV0O1xuIFx0XHRpcF9vdmVyd3JpdHRlbiA9IHRydWU7XG4gXHR9XG4gXG5AQCAtNzE0LDI0ICs3MDcsMjQgQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiBcdHN0cnVjdCBuZXRwb2xsICpucCA9IFx1MDAyNm50LVx1MDAzZW5wO1xuIFxuIFx0bnBfaW5mbyhucCwgXCJsb2NhbCBwb3J0ICVkXFxuXCIsIG50LVx1MDAzZWxvY2FsX3BvcnQpO1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4rXHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRucF9pbmZvKG5wLCBcImxvY2FsIElQdjYgYWRkcmVzcyAlcEk2Y1xcblwiLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pbjYpO1xuIFx0ZWxzZVxuIFx0XHRucF9pbmZvKG5wLCBcImxvY2FsIElQdjQgYWRkcmVzcyAlcEk0XFxuXCIsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmlwKTtcbiBcdG5wX2luZm8obnAsIFwiaW50ZXJmYWNlIG5hbWUgJyVzJ1xcblwiLCBucC1cdTAwM2VkZXZfbmFtZSk7XG4gXHRucF9pbmZvKG5wLCBcImxvY2FsIGV0aGVybmV0IGFkZHJlc3MgJyVwTSdcXG5cIiwgbnAtXHUwMDNlZGV2X21hYyk7XG4gXHRucF9pbmZvKG5wLCBcInJlbW90ZSBwb3J0ICVkXFxuXCIsIG50LVx1MDAzZXJlbW90ZV9wb3J0KTtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdG5wX2luZm8obnAsIFwicmVtb3RlIElQdjYgYWRkcmVzcyAlcEk2Y1xcblwiLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXAuaW42KTtcbiBcdGVsc2VcbiBcdFx0bnBfaW5mbyhucCwgXCJyZW1vdGUgSVB2NCBhZGRyZXNzICVwSTRcXG5cIiwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmlwKTtcbiBcdG5wX2luZm8obnAsIFwicmVtb3RlIGV0aGVybmV0IGFkZHJlc3MgJXBNXFxuXCIsIG50LVx1MDAzZXJlbW90ZV9tYWMpO1xuIH1cbiBcbi0vKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgdW5pb24uIFJldHVybiAwIGlmIElQdjQgaXNcbi0gKiBwb3B1bGF0ZWQsIDEgaWYgSVB2NiBpcyBwb3B1bGF0ZWQsIGFuZCAtMSB1cG9uIGZhaWx1cmUuXG4rLyogUGFyc2UgdGhlIHN0cmluZyBhbmQgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHN0cnVjdC4gUmV0dXJuIDAgb24gc3VjY2Vzc1xuKyAqIGFuZCAtMSB1cG9uIGZhaWx1cmUuXG4gICovXG4tc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCB1bmlvbiBpbmV0X2FkZHIgKmFkZHIpXG4rc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgaW5ldF9hZGRyICphZGRyKVxuIHtcbiBcdGNvbnN0IGNoYXIgKmVuZCA9IE5VTEw7XG4gXHRpbnQgbGVuO1xuQEAgLTc0MywxNCArNzM2LDE4IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgdW5pb24gaW5ldF9hZGRyICphZGRyKVxuIFx0aWYgKHN0cltsZW4gLSAxXSA9PSAnXFxuJylcbiBcdFx0bGVuIC09IDE7XG4gXG4tXHRpZiAoaW40X3B0b24oc3RyLCBsZW4sICh2b2lkICopYWRkciwgLTEsIFx1MDAyNmVuZCkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4tXHQgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJ1xcbicpKVxuK1x0aWYgKGluNF9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKVx1MDAyNmFkZHItXHUwMDNlaXAsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuK1x0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXG4nKSkge1xuK1x0XHRhZGRyLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XG4gXHRcdHJldHVybiAwO1xuK1x0fVxuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0lQVjYpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGluNl9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKWFkZHIsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuLVx0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXG4nKSlcbi1cdFx0cmV0dXJuIDE7XG4rXHQgICAgaW42X3B0b24oc3RyLCBsZW4sICh2b2lkICopXHUwMDI2YWRkci1cdTAwM2VpbjYsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuK1x0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXG4nKSkge1xuK1x0XHRhZGRyLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ2O1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbiBcbiBcdHJldHVybiAtMTtcbiB9XG5AQCAtODU1LDIwICs4NTIsMjAgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbiB7XG4gXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuIFxuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4rXHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJXBJNmNcXG5cIiwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXAuaW42KTtcbiBcdGVsc2Vcbi1cdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVwSTRcXG5cIiwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApO1xuK1x0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJXBJNFxcblwiLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pcCk7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuIHtcbiBcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG4gXG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbitcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJXBJNmNcXG5cIiwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmluNik7XG4gXHRlbHNlXG4tXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlcEk0XFxuXCIsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcCk7XG4rXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlcEk0XFxuXCIsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcC5pcCk7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IGxvY2FsX21hY19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuQEAgLTEyMTMsNyArMTIxMCw2IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuIHtcbiBcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG4gXHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XG4tXHRpbnQgaXB2NjtcbiBcbiBcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XG4gXHRpZiAobnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkge1xuQEAgLTEyMjIsMTAgKzEyMTgsOCBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuLVx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwKTtcbi1cdGlmIChpcHY2ID09IC0xKVxuK1x0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwKSBcdTAwM2MgMClcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuLVx0bnQtXHUwMDNlaXB2NiA9ICEhaXB2NjtcbiBcbiBcdHJldCA9IGNvdW50O1xuIG91dF91bmxvY2s6XG5AQCAtMTIzOCw3ICsxMjMyLDYgQEAgc3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuIHtcbiBcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG4gXHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XG4tXHRpbnQgaXB2NjtcbiBcbiBcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XG4gXHRpZiAobnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkge1xuQEAgLTEyNDcsMTAgKzEyNDAsOCBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbi1cdGlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApO1xuLVx0aWYgKGlwdjYgPT0gLTEpXG4rXHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwKSBcdTAwM2MgMClcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuLVx0bnQtXHUwMDNlaXB2NiA9ICEhaXB2NjtcbiBcbiBcdHJldCA9IGNvdW50O1xuIG91dF91bmxvY2s6XG5AQCAtMjA2MSw3ICsyMDUyLDcgQEAgc3RhdGljIHZvaWQgbmV0cG9sbF91ZHBfY2hlY2tzdW0oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcbiBcdC8qIGNoZWNrIG5lZWRzIHRvIGJlIHNldCwgc2luY2UgaXQgd2lsbCBiZSBjb25zdW1lZCBpbiBjc3VtX3BhcnRpYWwgKi9cbiBcdHVkcGgtXHUwMDNlY2hlY2sgPSAwO1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4rXHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbiBcdFx0dWRwaC1cdTAwM2VjaGVjayA9IGNzdW1faXB2Nl9tYWdpYyhcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pbjYsXG4gXHRcdFx0XHRcdCAgICAgIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcC5pbjYsXG4gXHRcdFx0XHRcdCAgICAgIHVkcF9sZW4sIElQUFJPVE9fVURQLFxuQEAgLTIxMDIsNyArMjA5Myw3IEBAIHN0YXRpYyB2b2lkIHB1c2hfZXRoKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuIFx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cdTAwM2VoX3NvdXJjZSwgbnAtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyKTtcbiBcdGV0aGVyX2FkZHJfY29weShldGgtXHUwMDNlaF9kZXN0LCBudC1cdTAwM2VyZW1vdGVfbWFjKTtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdGV0aC1cdTAwM2VoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVBWNik7XG4gXHRlbHNlXG4gXHRcdGV0aC1cdTAwM2VoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVApO1xuQEAgLTIxNzEsNyArMjE2Miw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG4gXHRcdFdBUk5fT05fT05DRSghaXJxc19kaXNhYmxlZCgpKTtcbiBcbiBcdHVkcF9sZW4gPSBsZW4gKyBzaXplb2Yoc3RydWN0IHVkcGhkcik7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbitcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRpcF9sZW4gPSB1ZHBfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcbiBcdGVsc2VcbiBcdFx0aXBfbGVuID0gdWRwX2xlbiArIHNpemVvZihzdHJ1Y3QgaXBoZHIpO1xuQEAgLTIxODcsNyArMjE3OCw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG4gXHRza2JfcHV0KHNrYiwgbGVuKTtcbiBcbiBcdHB1c2hfdWRwKG50LCBza2IsIGxlbik7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbitcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRwdXNoX2lwdjYobnQsIHNrYiwgbGVuKTtcbiBcdGVsc2VcbiBcdFx0cHVzaF9pcHY0KG50LCBza2IsIGxlbik7XG5AQCAtMjUwNywxMCArMjQ5OCw4IEBAIF9fcmVsZWFzZXMoXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaylcbiBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxuIHtcbiBcdHN0cnVjdCBuZXRwb2xsICpucCA9IFx1MDAyNm50LVx1MDAzZW5wO1xuLVx0Ym9vbCBpcHZlcnNpb25fc2V0ID0gZmFsc2U7XG4gXHRjaGFyICpjdXIgPSBvcHQ7XG4gXHRjaGFyICpkZWxpbTtcbi1cdGludCBpcHY2O1xuIFxuIFx0aWYgKCpjdXIgIT0gJ0AnKSB7XG4gXHRcdGRlbGltID0gc3RyY2hyKGN1ciwgJ0AnKTtcbkBAIC0yNTI0LDE2ICsyNTEzLDEyIEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpXG4gXHRjdXIrKztcbiBcbiBcdGlmICgqY3VyICE9ICcvJykge1xuLVx0XHRpcHZlcnNpb25fc2V0ID0gdHJ1ZTtcbiBcdFx0ZGVsaW0gPSBzdHJjaHIoY3VyLCAnLycpO1xuIFx0XHRpZiAoIWRlbGltKVxuIFx0XHRcdGdvdG8gcGFyc2VfZmFpbGVkO1xuIFx0XHQqZGVsaW0gPSAwO1xuLVx0XHRpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApO1xuLVx0XHRpZiAoaXB2NiBcdTAwM2MgMClcbitcdFx0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwKSBcdTAwM2MgMClcbiBcdFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbi1cdFx0ZWxzZVxuLVx0XHRcdG50LVx1MDAzZWlwdjYgPSAoYm9vbClpcHY2O1xuIFx0XHRjdXIgPSBkZWxpbTtcbiBcdH1cbiBcdGN1cisrO1xuQEAgLTI1NzUsMTMgKzI1NjAsMTEgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdClcbiBcdGlmICghZGVsaW0pXG4gXHRcdGdvdG8gcGFyc2VfZmFpbGVkO1xuIFx0KmRlbGltID0gMDtcbi1cdGlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApO1xuLVx0aWYgKGlwdjYgXHUwMDNjIDApXG4rXHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwKSBcdTAwM2MgMClcbiBcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4tXHRlbHNlIGlmIChpcHZlcnNpb25fc2V0IFx1MDAyNlx1MDAyNiBudC1cdTAwM2VpcHY2ICE9IChib29sKWlwdjYpXG4rXHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IEFGX1VOU1BFQyBcdTAwMjZcdTAwMjZcbitcdCAgICBudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gbnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSlcbiBcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4tXHRlbHNlXG4tXHRcdG50LVx1MDAzZWlwdjYgPSAoYm9vbClpcHY2O1xuIFx0Y3VyID0gZGVsaW0gKyAxO1xuIFxuIFx0aWYgKCpjdXIgIT0gMCkge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oIGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcbmluZGV4IDFjNmIxZWVjNWVmZDYuLmRlOTdmMDAxYTBmOWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcbkBAIC0xNiw5ICsxNiwxMyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91ZHAuaFx1MDAzZVxuIFxuLXVuaW9uIGluZXRfYWRkciB7XG4tXHRfX2JlMzJcdFx0aXA7XG4tXHRzdHJ1Y3QgaW42X2FkZHJcdGluNjtcbitzdHJ1Y3QgaW5ldF9hZGRyIHtcbitcdC8qIEFkZHJlc3MgZmFtaWx5OiBBRl9VTlNQRUMgd2hlbiB1bnNldCwgZWxzZSBBRl9JTkVUIG9yIEFGX0lORVQ2ICovXG4rXHR1OFx0XHRcdGZhbWlseTtcbitcdHVuaW9uIHtcbitcdFx0X19iZTMyXHRcdGlwO1xuK1x0XHRzdHJ1Y3QgaW42X2FkZHJcdGluNjtcbitcdH07XG4gfTtcbiBcbiBzdHJ1Y3QgbmV0cG9sbCB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozNjoxMS4xOTA1NDU1NzRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzU2NTU4Njg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0Y29uc29sZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXRjb25zb2xlLmNgIGFuZCBgbmV0cG9sbC5oYC4gU2VlbXMgbGlrZSB0aGV5J3JlIG1ha2luZyBhIHByZXR0eSBmdW5kYW1lbnRhbCBjaGFuZ2Ug4oCTIHJlcGxhY2luZyB0aGF0IG9sZCBgdW5pb24gaW5ldF9hZGRyYCB3aXRoIGEgbW9yZSBleHBsaWNpdCBgc3RydWN0IGluZXRfYWRkcmAuIEdvb2QgbW92ZSwgYWN0dWFsbHk7IGFkZGluZyB0aGF0IGBmYW1pbHlgIGZpZWxkIChBRl9VTlNQRUMsIEFGX0lORVQsIEFGX0lORVQ2KSBpcyBnb2luZyB0byBtYWtlIHRoZSBjb2RlIG11Y2ggY2xlYXJlciBhbmQgbGVzcyBwcm9uZSB0byBlcnJvcnMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggSVB2Ni4gTG9va3MgbGlrZSB0aGV5J3ZlIHJlbW92ZWQgdGhlIGBpcHY2YCBib29sZWFuIGZyb20gYG5ldGNvbnNvbGVfdGFyZ2V0YCB0b28sIHdoaWNoIGlzIGxvZ2ljYWwgZ2l2ZW4gdGhlIG5ldyBgZmFtaWx5YCBmaWVsZC4gVGhleSd2ZSB1cGRhdGVkIHRoZSBwYXJzaW5nIGFuZCBzZXR1cCBsb2dpYywgd2hpY2ggSSdsbCBuZWVkIHRvIHJldmlldyBjYXJlZnVsbHkgdG8gZW5zdXJlIHRoZSB0cmFuc2l0aW9uIGlzIGNsZWFuIGFuZCBlZmZpY2llbnQuXG5cbkZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIHNpZ25pZmljYW50IGNoYW5nZSB0byB0aGUgbmV0Y29uc29sZSBkcml2ZXIuIEdpdmVuIHRoYXQgbmV0Y29uc29sZSBpcyBhIGNyaXRpY2FsIGRlYnVnZ2luZyBhbmQgcmVjb3ZlcnkgdG9vbCwgSSBzaG91bGQgY29uc2lkZXIgdGhlIGltcGFjdCBjYXJlZnVsbHkuIFRoZSBuZXRjb25zb2xlIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUsIHNvIEkgc2hvdWxkIGJlIGFibGUgdG8gdmVyaWZ5IHRoYXQgdGhlIGNoYW5nZSBkb2Vzbid0IGJyZWFrIGFueXRoaW5nLlxuXG5Ob3csIGxldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyBuZWVkZWQgZm9yIHRoaXMgdG8gd29yay4gSSBhbHJlYWR5IGtub3cgdGhhdCBgQ09ORklHX05FVENPTlNPTEVgIGlzIHJlcXVpcmVkLCBzbyBsZXQncyB0YWtlIGEgcXVpY2sgbG9vayBpbiBLY29uZmlnIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBuZXcgb3IgY2hhbmdlZCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyODksIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozNjoxNi41NDcxMDc0MDFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0MTczODE1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUQ09OU09MRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0zMTg9Y29uZmlnIE1BQ1NFQ1xcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjYtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozMjc6Y29uZmlnIE5FVENPTlNPTEVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyOC1cXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBjb25zb2xlIGxvZ2dpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzMzLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzM0OmNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzNS1cXHRib29sIFxcXCJEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0NC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjM0NTpjb25maWcgTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0Ni1cXHRib29sIFxcXCJTZXQga2VybmVsIGV4dGVuZGVkIG1lc3NhZ2UgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzU0LVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzU1OmNvbmZpZyBORVRDT05TT0xFX1BSRVBFTkRfUkVMRUFTRVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzU2LVxcdGJvb2wgXFxcIlByZXBlbmQga2VybmVsIHJlbGVhc2UgdmVyc2lvbiBpbiB0aGUgbWVzc2FnZSBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozNjoxOC40ODg4NTAyOThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDkzNjM4Njc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0Y29uc29sZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGJyYWluIHplcm9lcyBpbiBvbiB0aGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQ6IGBORVRDT05TT0xFYCBhbmQgYE5FVENPTlNPTEVfRFlOQU1JQ2AuIE15IGd1dCB0ZWxscyBtZSB0aGF0IGBORVRDT05TT0xFX0RZTkFNSUNgIGlzIHByb2JhYmx5IHRoZSBrZXkgb25lIGhlcmUsIHNpbmNlIGl0IGRlYWxzIHdpdGggdGhvc2Ugc3lzZnMgY29uZmlnIGl0ZW1zLlxuXG5Ob3csIHRoZSBwYXRjaCB0b3VjaGVzIGBsb2NhbF9pcF9zdG9yZWAgYW5kIGByZW1vdGVfaXBfc3RvcmVgLCB3aGljaCByaW5ncyBhIGJlbGwuIFRob3NlIGZ1bmN0aW9ucyBhcmUgaW50aW1hdGVseSBsaW5rZWQgdG8gdGhlIGR5bmFtaWMgY29uZmlndXJhdGlvbiBzdHVmZiB3aXRoaW4gYE5FVENPTlNPTEVfRFlOQU1JQ2AuIFRvIGJlIGFic29sdXRlbHkgc3VyZSwgdGhvdWdoLCBsZXQncyBqdXN0IGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGluIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLiBJIG5lZWQgdG8gY29uZmlybSBpZiBgTkVUQ09OU09MRV9EWU5BTUlDYCBpcyBpbmRlZWQgYSBwcmVyZXF1aXNpdGUgZm9yIHRoZSBwcm9wZXIgZnVuY3Rpb25pbmcgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy4gSXTigJlzIGFsd2F5cyBiZXN0IHRvIGJlIHByZWNpc2UsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbmV0d29yay1yZWxhdGVkIGtlcm5lbCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDA2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6MzY6MjIuOTgyNDkyNTI2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMTkyMjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvY2FsX2lwX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTE4Nj1zdGF0aWMgc3NpemVfdCByZW1vdGVfcG9ydF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIwNy1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTIwODpzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIwOS1cXHRcXHRzaXplX3QgY291bnQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM2OjIzLjAzMjY4OTk2MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzI5NzY0MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBOZXR3b3JrIENvbnNvbGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoIHRoZSBuZXR3b3JrIGNvbnNvbGUsIHNvIGxldCdzIHN0YXJ0IHdpdGggdGhlIHNvdXJjZSBjb2RlLiBJJ20gZ29pbmcgdG8gbmF2aWdhdGUgZGlyZWN0bHkgdG8gdGhlIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGxpbmUgMTIwOCBpcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4gSXQncyBvZnRlbiBhdCB0aGVzZSBwaXZvdGFsIHBvaW50cyB3aXRoaW4gYSBsYXJnZXIgcGllY2Ugb2Ygc291cmNlIHRoYXQgdGhlIHJlYWwgbWVhdCBvZiB0aGUgb3BlcmF0aW9uIGNhbiBiZSBmb3VuZC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGltcGxlbWVudGVkIHRoZXJlLiBLbm93aW5nIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHdpbGwgYmUga2V5LCBidXQgc3RhcnRpbmcgdGhlcmUgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50IHRvIGFzc2VzcyB0aGUgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0MjEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozNjoyNi4yMDU2Njk2OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE4MDpcXHRcXHRyZXQgPSBjb3VudDtcXG4xMTgxOlxcdG91dF91bmxvY2s6XFxuMTE4MjpcXHRcXHRkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfdW5sb2NrKCk7XFxuMTE4MzpcXHRcXHRyZXR1cm4gcmV0O1xcbjExODQ6XFx0fVxcbjExODU6XFx0XFxuMTE4NjpcXHRzdGF0aWMgc3NpemVfdCByZW1vdGVfcG9ydF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuMTE4NzpcXHRcXHRcXHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4xMTg4OlxcdHtcXG4xMTg5OlxcdFxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XFxuMTE5MDpcXHRcXHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XFxuMTE5MTpcXHRcXG4xMTkyOlxcdFxcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XFxuMTE5MzpcXHRcXHRpZiAobnQtXFx1MDAzZXN0YXRlID09IFNUQVRFX0VOQUJMRUQpIHtcXG4xMTk0OlxcdFxcdFxcdHByX2VycihcXFwidGFyZ2V0ICglcykgaXMgZW5hYmxlZCwgZGlzYWJsZSB0byB1cGRhdGUgcGFyYW1ldGVyc1xcXFxuXFxcIixcXG4xMTk1OlxcdFxcdFxcdCAgICAgICBjb25maWdfaXRlbV9uYW1lKFxcdTAwMjZudC1cXHUwMDNlZ3JvdXAuY2dfaXRlbSkpO1xcbjExOTY6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjExOTc6XFx0XFx0fVxcbjExOTg6XFx0XFxuMTE5OTpcXHRcXHRyZXQgPSBrc3RydG91MTYoYnVmLCAxMCwgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfcG9ydCk7XFxuMTIwMDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMjAxOlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xMjAyOlxcdFxcdHJldCA9IGNvdW50O1xcbjEyMDM6XFx0b3V0X3VubG9jazpcXG4xMjA0OlxcdFxcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2soKTtcXG4xMjA1OlxcdFxcdHJldHVybiByZXQ7XFxuMTIwNjpcXHR9XFxuMTIwNzpcXHRcXG4xMjA4OlxcdHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbjEyMDk6XFx0XFx0XFx0c2l6ZV90IGNvdW50KVxcbjEyMTA6XFx0e1xcbjEyMTE6XFx0XFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcXG4xMjEyOlxcdFxcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcXG4xMjEzOlxcdFxcbjEyMTQ6XFx0XFx0ZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTtcXG4xMjE1OlxcdFxcdGlmIChudC1cXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkge1xcbjEyMTY6XFx0XFx0XFx0cHJfZXJyKFxcXCJ0YXJnZXQgKCVzKSBpcyBlbmFibGVkLCBkaXNhYmxlIHRvIHVwZGF0ZSBwYXJhbWV0ZXJzXFxcXG5cXFwiLFxcbjEyMTc6XFx0XFx0XFx0ICAgICAgIGNvbmZpZ19pdGVtX25hbWUoXFx1MDAyNm50LVxcdTAwM2Vncm91cC5jZ19pdGVtKSk7XFxuMTIxODpcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuMTIxOTpcXHRcXHR9XFxuMTIyMDpcXHRcXG4xMjIxOlxcdFxcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCBcXHUwMDI2bnQtXFx1MDAzZWxvY2FsX2lwKSBcXHUwMDNjIDApXFxuMTIyMjpcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuMTIyMzpcXHRcXG4xMjI0OlxcdFxcdHJldCA9IGNvdW50O1xcbjEyMjU6XFx0b3V0X3VubG9jazpcXG4xMjI2OlxcdFxcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2soKTtcXG4xMjI3OlxcdFxcdHJldHVybiByZXQ7XFxuMTIyODpcXHR9XFxuMTIyOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6MzY6MjYuMjA1ODMzMDlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjc0OTk3Nzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgbmV0d29ya2luZyBjb2RlOlxuXG4qKkNoZWNraW5nIHRoZSBTY29wZSBvZiBgbG9jYWxfaXBfc3RvcmVgKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIEknbSBwcmV0dHkgc3VyZSBJIHJlbWVtYmVyIGNvbWluZyBhY3Jvc3MgYGxvY2FsX2lwX3N0b3JlYCBpbiB0aGUgbmV0Y29uc29sZSBjb2RlLiBCdXQgd2FpdCwgd2FzIHRoYXQgKmNvbmRpdGlvbmFsbHkqIGNvbXBpbGVkPyBJdCdzIG5hZ2dpbmcgYXQgbWUgdGhhdCBpdCBtaWdodCBiZSB0aWVkIHRvIGEgY29uZmlndXJhdGlvbiBvcHRpb24uIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBpZiBgbG9jYWxfaXBfc3RvcmVgIGlzIGFjdHVhbGx5IGRlZmluZWQgd2l0aGluIHRoYXQgYCNpZmRlZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDYCBibG9jay4gSWYgaXQgKmlzKiBpbnNpZGUgdGhhdCBjb25kaXRpb25hbCBjb21waWxhdGlvbiwgaXQncyBnb2luZyB0byBhZmZlY3QgaG93IEkgdW5kZXJzdGFuZCBpdHMgdXNlIGFuZCBpdHMgcHJlc2VuY2UgaW4gdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZS4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgaXQncyB0aGVyZSBvciBub3QsIGJlY2F1c2UgdGhhdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB3aGVyZSBpdCdzIGJlaW5nIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM2OjI5LjQ4MDgzMzI2NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE0NDE0MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE5NT1zdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTYtXFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE5NzojaWZkZWZcXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5OC1cXHRzdHJ1Y3QgY29uZmlnX2dyb3VwXFx0Z3JvdXA7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjI1LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjY6I2lmZGVmXFx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjctXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjY1PXN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2sodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjktXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI3MDojZWxzZVxcdC8qICFDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3MS1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0zMDI9c3RhdGljIHZvaWQgZHluYW1pY19uZXRjb25zb2xlX211dGV4X3VubG9jayh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMwNS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzA2OiNlbmRpZlxcdC8qIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzA3LVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTcyNz1zdGF0aWMgaW50IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBpbmV0X2FkZHIgKmFkZHIpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzU0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3NTU6I2lmZGVmXFx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03NTYtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTg3ND1zdGF0aWMgaW50IHByZXBhcmVfc3lzZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4OTYtfVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODk3OiNlbmRpZlxcdC8qIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg5OC1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMTU0PXN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE5OC0gKiBvY2N1cnJlZCBpdCBpbmNyZW1lbnRzIHN0YXRpc3RpY3MgaW4gbnQtXFx1MDAzZXN0YXRzIGFjY29yZGluZ2x5LlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTk5OiAqIE9ubHkgY2FsbHMgbmV0cG9sbF9zZW5kX3VkcCBpZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDIGlzIGRpc2FibGVkLlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjAwLSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMjAxPXN0YXRpYyB2b2lkIHNlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjA0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjA1OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMpKSB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDYtXFx0XFx0aWYgKHJlc3VsdCA9PSBORVRfWE1JVF9EUk9QKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjIxOD1zdGF0aWMgdm9pZCBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIyNi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIyNzojaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjI4LVxcdHVzZXJkYXRhID0gbnQtXFx1MDAzZXVzZXJkYXRhO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIyNjM9c3RhdGljIHZvaWQgc2VuZF9mcmFnbWVudGVkX2JvZHkoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjc0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjc1OiNpZmRlZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyNzYtXFx0dXNlcmRhdGFfcHRyID0gbnQtXFx1MDAzZXVzZXJkYXRhO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIzOTk9c3RhdGljIHZvaWQgc2VuZF9leHRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0MDYtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0MDc6I2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQwOC1cXHRzeXNkYXRhX2xlbiA9IHByZXBhcmVfc3lzZGF0YShudCwgd2N0eHQpO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI1ODY9c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYyOS1cXHRcXHRuZXRjb25zb2xlX3NrYl9wb29sX2ZsdXNoKG50KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjYzMDpcXHRcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQykpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2MzEtXFx0XFx0XFx0Lyogb25seSBmYWlsIGlmIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIGlzIHNldCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNjQ4PXN0YXRpYyB2b2lkIGZyZWVfcGFyYW1fdGFyZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY1My1cXHRuZXRwb2xsX2NsZWFudXAoXFx1MDAyNm50LVxcdTAwM2VucCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2NTQ6I2lmZGVmXFx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjU1LVxcdGtmcmVlKG50LVxcdTAwM2V1c2VyZGF0YSk7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjY3OD1zdGF0aWMgaW50IF9faW5pdCBpbml0X25ldGNvbnNvbGUodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjkxLVxcdFxcdFxcdGlmIChJU19FUlIobnQpKSB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2OTI6XFx0XFx0XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQykpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2OTMtXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM2OjI5LjUzMjI4NDA3MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQ1NDQ1NDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0Y29uc29sZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBjb25maXJtaW5nIHRoYXQgYGxvY2FsX2lwX3N0b3JlYCBpcyBpbmRlZWQgbmVzdGVkIHdpdGhpbiB0aGF0IGAjaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ2AgYmxvY2ssIHdoaWNoLCBhcyBJIHJlY2FsbCwgc3BhbnMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2h1bmsgb2YgY29kZSwgZnJvbSBsaW5lcyA3NTUgdG8gMTg5Ny4gVGhlcmVmb3JlLCB0byBtYWtlIHRoYXQgZnVuY3Rpb25hbGl0eSBhY2Nlc3NpYmxlLCBgTkVUQ09OU09MRV9EWU5BTUlDYCBpcyBnb2luZyB0byBiZSBhIHJlcXVpcmVtZW50LiBCdXQsIEkgbmVlZCB0byBiZSBtb3JlIHRob3JvdWdoIGhlcmUgYW5kIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgY29uZmlndXJhdGlvbnMgbmVlZGVkLiBXYWl0IGEgbWludXRlLCBJIG5lZWQgYE5FVENPTlNPTEVgIGl0c2VsZi5cblxuSSBhbHNvIHNlZSB0aGF0IGBDT05GSUdfSVBWNmAgaXMgYmVpbmcgY2hlY2tlZCB3aXRoaW4gYG5ldHBvbGxfcGFyc2VfaXBfYWRkcmAsIHNwZWNpZmljYWxseTpcblxuYGBgY1xuXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikgXHUwMDI2XHUwMDI2XG5cdCAgICBpbjZfcHRvbihzdHIsIGxlbiwgKHZvaWQgKilcdTAwMjZhZGRyLVx1MDAzZWluNiwgLTEsIFx1MDAyNmVuZCkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG5cdCAgICAoIWVuZCB8fCAqZW5kID09IDAgfHwgKmVuZCA9PSAnXFxuJykpIHtcblx0XHRhZGRyLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ2O1xuXHRcdHJldHVybiAwO1xuXHR9XG5gYGBcblxuU28sIGlmIHNvbWVvbmUgd2FudHMgdG8gdGVzdCBvdXQgdGhlIElQdjYgZnVuY3Rpb25hbGl0eSwgdGhlbiBpdCB3aWxsIHJlcXVpcmUgYElQVjZgIGFzIHdlbGwuIFJpZ2h0LCBub3cgSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYENPTkZJR19ORVRDT05TT0xFYCBkaXJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk0MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozNjozMy43Nzc3MzMzMjZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NzI2NzkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUQ09OU09MRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9MzE4PWNvbmZpZyBNQUNTRUNcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzI2LVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzI3OmNvbmZpZyBORVRDT05TT0xFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjgtXFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzMy1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjMzNDpjb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzUtXFx0Ym9vbCBcXFwiRHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgbG9nZ2luZyB0YXJnZXRzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDQtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozNDU6Y29uZmlnIE5FVENPTlNPTEVfRVhURU5ERURfTE9HXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDYtXFx0Ym9vbCBcXFwiU2V0IGtlcm5lbCBleHRlbmRlZCBtZXNzYWdlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTM1NC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjM1NTpjb25maWcgTkVUQ09OU09MRV9QUkVQRU5EX1JFTEVBU0VcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM1Ni1cXHRib29sIFxcXCJQcmVwZW5kIGtlcm5lbCByZWxlYXNlIHZlcnNpb24gaW4gdGhlIG1lc3NhZ2UgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6MzY6MzQuMDY1MDA1NDY2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzk5OTg3NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5IGZvciBhbiBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gdGhlIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgZmlsZS4gSSdtIGZvY3VzaW5nIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAzMjcg4oCTIHRoYXQncyBvZnRlbiB3aGVyZSB0aGUganVpY3kgYml0cyBhcmUsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggY29yZSBuZXR3b3JraW5nIGZlYXR1cmVzIG9yIHBlcmhhcHMgYSBzcGVjaWZpYyBkcml2ZXIgSSdtIHRyeWluZyB0byB1bmRlcnN0YW5kLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZWl0aGVyIGEgaGlnaC1sZXZlbCBvdmVydmlldyBvZiBhdmFpbGFibGUgbmV0d29yayBmZWF0dXJlcywgcGVyaGFwcyBzb21lIGRlcGVuZGVuY2llcyBvbiBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMsIG9yIG1heWJlIGV2ZW4gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYSBwYXJ0aWN1bGFyIG5ldHdvcmsgZHJpdmVyIG9yIHRlY2hub2xvZ3kuIFRpbWUgdG8gY3JhY2sgaXQgb3BlbiBhbmQgc2VlIHdoYXQgcmV2ZWxhdGlvbnMgbGluZSAzMjcgaG9sZHMhIExldCdzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzA5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6MzY6MzcuMjA1MDA3MTc1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzIwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzIwOlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gMzIxOlxcdFxcdHNlbGVjdCBDUllQVE9fQUVTXFxuIDMyMjpcXHRcXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbiAzMjM6XFx0XFx0c2VsZWN0IEdST19DRUxMU1xcbiAzMjQ6XFx0XFx0aGVscFxcbiAzMjU6XFx0XFx0ICAgTUFDc2VjIGlzIGFuIGVuY3J5cHRpb24gc3RhbmRhcmQgZm9yIEV0aGVybmV0LlxcbiAzMjY6XFx0XFxuIDMyNzpcXHRjb25maWcgTkVUQ09OU09MRVxcbiAzMjg6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcXFwiXFxuIDMyOTpcXHRcXHRkZXBlbmRzIG9uIFBSSU5US1xcbiAzMzA6XFx0XFx0aGVscFxcbiAzMzE6XFx0XFx0ICBJZiB5b3Ugd2FudCB0byBsb2cga2VybmVsIG1lc3NhZ2VzIG92ZXIgdGhlIG5ldHdvcmssIGVuYWJsZSB0aGlzLlxcbiAzMzI6XFx0XFx0ICBTZWUgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XFx1MDAzZSBmb3IgZGV0YWlscy5cXG4gMzMzOlxcdFxcbiAzMzQ6XFx0Y29uZmlnIE5FVENPTlNPTEVfRFlOQU1JQ1xcbiAzMzU6XFx0XFx0Ym9vbCBcXFwiRHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgbG9nZ2luZyB0YXJnZXRzXFxcIlxcbiAzMzY6XFx0XFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFIFxcdTAwMjZcXHUwMDI2IFNZU0ZTIFxcdTAwMjZcXHUwMDI2IENPTkZJR0ZTX0ZTIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gMzM3OlxcdFxcdFxcdFxcdCEoTkVUQ09OU09MRT15IFxcdTAwMjZcXHUwMDI2IENPTkZJR0ZTX0ZTPW0pXFxuIDMzODpcXHRcXHRzZWxlY3QgUFJJTlRLX0VYRUNVVElPTl9DVFhcXG4gMzM5OlxcdFxcdGhlbHBcXG4gMzQwOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgYWJpbGl0eSB0byBkeW5hbWljYWxseSByZWNvbmZpZ3VyZSB0YXJnZXRcXG4gMzQxOlxcdFxcdCAgcGFyYW1ldGVycyAoaW50ZXJmYWNlLCBJUCBhZGRyZXNzZXMsIHBvcnQgbnVtYmVycywgTUFDIGFkZHJlc3NlcylcXG4gMzQyOlxcdFxcdCAgYXQgcnVudGltZSB0aHJvdWdoIGEgdXNlcnNwYWNlIGludGVyZmFjZSBleHBvcnRlZCB1c2luZyBjb25maWdmcy5cXG4gMzQzOlxcdFxcdCAgU2VlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFxcdTAwM2UgZm9yIGRldGFpbHMuXFxuIDM0NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6MzY6MzcuMjA1MDg4ODM1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNjAxMTgzMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRjb25zb2xlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBORVRDT05TT0xFYCBtb2R1bGUgYW5kIGhvdyBpdCdzIGNvbmZpZ3VyZWQuIEl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogYE5FVENPTlNPTEVgIGRlcGVuZHMgb24gYFBSSU5US2AsIGFuZCBgTkVUQ09OU09MRV9EWU5BTUlDYCBkZXBlbmRzIG9uIGBORVRDT05TT0xFYCwgYFNZU0ZTYCwgYW5kIGBDT05GSUdGU19GU2AuIFJpZ2h0LCBzbyB0byBnZXQgZXZlcnl0aGluZyB3b3JraW5nLCBJIG5lZWQgdG8gZW5hYmxlIGBORVRDT05TT0xFYCwgYE5FVENPTlNPTEVfRFlOQU1JQ2AsIGBDT05GSUdGU19GU2AsIGFuZCBgSVBWNmAsIG5hdHVyYWxseS4gVGhhdCBzZWVtcyBsb2dpY2FsLlxuXG5Ob3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY3JpdGljYWwgc3ltYm9scyBtb2RpZmllZCBieSB0aGlzIHBhdGNoIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMuIExldCdzIHNlZS4uLiBpdCBhZmZlY3RzIGBuZXRjb25zX3Rha2VfaXB2NmAsIGBuZXRjb25zX3Rha2VfaXB2NGAsIGBuZXRjb25zX25ldHBvbGxfc2V0dXBgLCBgbmV0Y29uc29sZV9wcmludF9iYW5uZXJgLCBgbmV0cG9sbF9wYXJzZV9pcF9hZGRyYCwgYW5kIHRoZW4gdGhlIHN5c2ZzIGludGVyZmFjZSBiaXRzOiBgbG9jYWxfaXBfc2hvd2AsIGByZW1vdGVfaXBfc2hvd2AsIGBsb2NhbF9pcF9zdG9yZWAsIGByZW1vdGVfaXBfc3RvcmVgLiBJIHNlZSBgbmV0cG9sbF91ZHBfY2hlY2tzdW1gLCBgcHVzaF9ldGhgLCBhbmQgYG5ldHBvbGxfc2VuZF91ZHBgIGFzIHdlbGwuIFRoZSBwYXJzZXIgYW5kIGNvbW1hbmQtbGluZSBwYXJzaW5nIGlzIHRoZXJlIHRvbzogYG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVgLlxuXG5BbHJpZ2h0LCB0aGUgY29yZSBmdW5jdGlvbnMgSSdtIGludGVyZXN0ZWQgaW4sIGJhc2VkIG9uIHRob3NlIG1vZGlmaWNhdGlvbnMsIGFyZTogYGxvY2FsX2lwX3N0b3JlYCwgYHJlbW90ZV9pcF9zdG9yZWAsIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYCwgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAsIGFuZCBgbmV0cG9sbF9zZW5kX3VkcGAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGZvY3VzIGFyZWFzIG9mIHRoZSBjaGFuZ2UuXG5cbldhaXQgYSBzZWNvbmQsIGxldCdzIGp1c3QgbWFrZSBzdXJlIGFib3V0IHRoaXMgYG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVgIGZ1bmN0aW9uLiBJcyBpdCBzdGF0aWM/IFllcywgaXQncyBzdGF0aWMuIEhtbS4uLiBhY2NvcmRpbmcgdG8gdGhlIGd1aWRlbGluZXMsIEkgc2hvdWxkIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gTGV0J3MgZGlnIGRlZXBlci4gV2hhdCBjYWxscyBgbG9jYWxfaXBfc3RvcmVgPyBBaCwgaXQncyBhIHN5c2ZzL2NvbmZpZ2ZzIHN0b3JlIGZ1bmN0aW9uLiBVc3VhbGx5IHRob3NlIGFyZSBzdGF0aWMsIGJ1dCBJIGJldCB0aGV5IGFyZSByZWdpc3RlcmVkIHVzaW5nIHRob3NlIG1hY3Jvcy4gVGltZSB0byBjaGVjayBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYCBmb3IgdGhvc2UgY29uZmlnZnMgbWFjcm9zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMwMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM2OjQ0LjM2NTIwOTQ2NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5MzYyMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHRlNfQVRUUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE1Mjc9c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9jcHVfbnJfZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU1OS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU2MDpDT05GSUdGU19BVFRSKHVzZXJkYXR1bV8sIHZhbHVlKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU2MTpDT05GSUdGU19BVFRSKHN5c2RhdGFfLCBjcHVfbnJfZW5hYmxlZCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1NjI6Q09ORklHRlNfQVRUUihzeXNkYXRhXywgdGFza25hbWVfZW5hYmxlZCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1NjM6Q09ORklHRlNfQVRUUihzeXNkYXRhXywgcmVsZWFzZV9lbmFibGVkKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU2NDpDT05GSUdGU19BVFRSKHN5c2RhdGFfLCBtc2dpZF9lbmFibGVkKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU2NS1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNjM2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSB1c2VyZGF0YV90eXBlID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2NDItXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NDM6Q09ORklHRlNfQVRUUigsIGVuYWJsZWQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjQ0OkNPTkZJR0ZTX0FUVFIoLCBleHRlbmRlZCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NDU6Q09ORklHRlNfQVRUUigsIGRldl9uYW1lKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY0NjpDT05GSUdGU19BVFRSKCwgbG9jYWxfcG9ydCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NDc6Q09ORklHRlNfQVRUUigsIHJlbW90ZV9wb3J0KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY0ODpDT05GSUdGU19BVFRSKCwgbG9jYWxfaXApO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjQ5OkNPTkZJR0ZTX0FUVFIoLCByZW1vdGVfaXApO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjUwOkNPTkZJR0ZTX0FUVFJfUk8oLCBsb2NhbF9tYWMpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjUxOkNPTkZJR0ZTX0FUVFIoLCByZW1vdGVfbWFjKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY1MjpDT05GSUdGU19BVFRSKCwgcmVsZWFzZSk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NTM6Q09ORklHRlNfQVRUUl9STygsIHRyYW5zbWl0X2Vycm9ycyk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2NTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM2OjQ0LjQxMzE1MDgwOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDUwNzAxMjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBFeHBvc3VyZSoqXG5cbkFscmlnaHQsIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYGxvY2FsX2lwX3N0b3JlYCBpcyBiZWluZyBleHBvc2VkIHRocm91Z2ggY29uZmlnZnMuIFRoYXQncyBnb29kIHRvIGtub3csIGFuZCBpdCBhbGlnbnMgd2l0aCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0ncyBhcmNoaXRlY3R1cmUuIE5vdywgdGhlIG1vcmUgaW50ZXJlc3RpbmcgcXVlc3Rpb24gaXMgYXJvdW5kIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYC4gV2hlcmUgaXMgdGhhdCBiZWluZyBjYWxsZWQ/IFdoYXQncyB0aGUgY29udGV4dD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgY2hhaW4gdG8gcmVhbGx5IGdhdWdlIGl0cyBpbXBhY3QgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIFRyYWNpbmcgdGhlIG9yaWdpbiBvZiB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gY2FsbCBpcyBnb2luZyB0byBiZSBrZXkgdG8gZXZhbHVhdGluZyB0aGUgb3ZlcmFsbCBwaWN0dXJlLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIHBhcmVudCBjYWxscyBhbmQgdGhlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzMxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6MzY6NDcuNDYzODU1MjQ4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODEwMTY5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9OTg2PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwMzQtXFx0XFx0LypcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTAzNTpcXHRcXHQgKiBTa2lwIG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoKSAtLSBhbGwgdGhlIGF0dHJpYnV0ZXMgYXJlXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwMzYtXFx0XFx0ICogYWxyZWFkeSBjb25maWd1cmVkIHZpYSBjb25maWdmcy4gSnVzdCBwcmludCB0aGVtIG91dC5cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNDkzPV9fcmVsZWFzZXMoXFx1MDAyNnRhcmdldF9saXN0X2xvY2spXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ5Ny1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQ5ODpzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDk5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNTg2PXN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX3BhcmFtX3RhcmdldChjaGFyICp0YXJnZXRfY29uZmlnLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2MTMtXFx0LyogUGFyc2UgcGFyYW1ldGVycyBhbmQgc2V0dXAgbmV0cG9sbCAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjE0OlxcdGVyciA9IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUobnQsIHRhcmdldF9jb25maWcpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjE1LVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM2OjQ3LjUxMTk3NjY1M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzAxNTk1NjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhhdCBzbmlwcGV0OlxuXG4qKkRlZXAgRGl2ZSBpbnRvIFBhcmFtZXRlciBBbGxvY2F0aW9uIGFuZCBOZXR3b3JrIENvbnNvbGUgUGFyc2luZyoqXG5cbk9rYXksIHNvIGBhbGxvY19wYXJhbV90YXJnZXRgIGlzIGJlaW5nIGNhbGxlZCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBJIGtub3cgdGhhdCBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyBtZW1vcnkgZm9yIGNvbW1hbmQtbGluZSBwYXJhbWV0ZXJzLiBBbmQgc3BlY2lmaWNhbGx5LCBpdCBhcHBlYXJzIGl0J3MgZGlyZWN0bHkgbGlua2VkIHRvIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYC4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCB0aGUgbmV0d29yayBjb25zb2xlIHNldHVwLCBhcyB0aGF0J3MgdGhlIHByaW1hcnkgY29udGV4dCBmb3IgdGhlIGBuZXRjb25zb2xlYCBjYWxscy4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uLCBvZiBjb3Vyc2UsIGlzOiAqV2hhdCogaXMgYWN0dWFsbHkgY2FsbGluZyBgYWxsb2NfcGFyYW1fdGFyZ2V0YCBpbiB0aGUgZmlyc3QgcGxhY2U/IEtub3dpbmcgdGhlIGNhbGxlciBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBlbnRpcmUgZmxvdyBhbmQgcHVycG9zZSBvZiB0aGlzIGFsbG9jYXRpb24uIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdCBjYWxsIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBkYXRhIGlzIGNvbWluZyBmcm9tIGFuZCB3aGF0J3MgdHJpZ2dlcmluZyB0aGUgYWxsb2NhdGlvbi4gSXMgaXQgYSBtb2R1bGUgaW5pdGlhbGl6YXRpb24sIGNvbW1hbmQtbGluZSBwYXJzaW5nIGF0IGJvb3QsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaW1lIHRvIGRpZyBkZWVwZXIgYW5kIGZpbmQgdGhhdCBjYWxsaW5nIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI3OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM2OjUwLjgxMzU3NTU4OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwNDMyNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NfcGFyYW1fdGFyZ2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjQ5OD1zdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1ODUtLyogQWxsb2NhdGUgbmV3IHRhcmdldCAoZnJvbSBib290L21vZHVsZSBwYXJhbSkgYW5kIHNldHVwIG5ldHBvbGwgZm9yIGl0ICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1ODY6c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1ODctXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGludCBjbWRsaW5lX2NvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI2Nzg9c3RhdGljIGludCBfX2luaXQgaW5pdF9uZXRjb25zb2xlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY4OS1cXHRcXHR3aGlsZSAoKHRhcmdldF9jb25maWcgPSBzdHJzZXAoXFx1MDAyNmlucHV0LCBcXFwiO1xcXCIpKSkge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjkwOlxcdFxcdFxcdG50ID0gYWxsb2NfcGFyYW1fdGFyZ2V0KHRhcmdldF9jb25maWcsIGNvdW50KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY5MS1cXHRcXHRcXHRpZiAoSVNfRVJSKG50KSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozNjo1MC44NTg2MjQyMDNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzNjYzNzg4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0Y29uc29sZSBNb2R1bGUgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBgYWxsb2NfcGFyYW1fdGFyZ2V0YCBpcyBpbml0aWF0ZWQgZnJvbSBgaW5pdF9uZXRjb25zb2xlYCwgd2hpY2ggaXMgdGhlIG1vZHVsZSdzIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLiBUaGF0IG1lYW5zIGl0IG9ubHkgZ2V0cyBjYWxsZWQgYXQgbW9kdWxlIGxvYWQgdGltZSBvciBkdXJpbmcgdGhlIGJvb3QgcHJvY2Vzcy4gSG1tLCBjb3VsZCB3ZSBhY3R1YWxseSBmdXp6IG1vZHVsZSBsb2FkIHBhcmFtZXRlcnM/IEludGVyZXN0aW5nIHRob3VnaHQuLi4gWWVzLCBzeXprYWxsZXIgZG9lcyBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIGZ1enogbW9kdWxlIHBhcmFtZXRlcnMhIEhvd2V2ZXIsIHRoaW5raW5nIG1vcmUgYWJvdXQgaXQsIGBsb2NhbF9pcF9zdG9yZWAgYW5kIGByZW1vdGVfaXBfc3RvcmVgIHNlZW0gbGlrZSBiZXR0ZXIgdGFyZ2V0cyBmb3IgZnV6emluZyBzaW5jZSB0aG9zZSBjYW4gYmUgaW52b2tlZCBtb3JlIGR5bmFtaWNhbGx5IHRocm91Z2ggY29uZmlnZnMuIFRoYXQgb2ZmZXJzIGEgbXVjaCByaWNoZXIgYXR0YWNrIHN1cmZhY2UuIEFuZCwgd2FpdC4uLiBpc24ndCBgZW5hYmxlZF9zdG9yZWAgcG90ZW50aWFsbHkgY2FsbGluZyBgbmV0Y29uc19uZXRwb2xsX3NldHVwYD8gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYGVuYWJsZWRfc3RvcmVgIG1vcmUgY2xvc2VseTsgdGhhdCBzb3VuZHMgcHJvbWlzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc5MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozNjo1NC40OTUyNjQ2NTFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDE5NDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVuYWJsZWRfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz05NjY9c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9tc2dpZF9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk4NS0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTg2OnN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05ODctXFx0XFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTQzMj1zdGF0aWMgdm9pZCBkaXNhYmxlX3N5c2RhdGFfZmVhdHVyZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0MzgtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE0Mzk6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9tc2dpZF9lbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQ0MC1cXHRcXHRcXHRcXHRcXHQgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDY3LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDY4OnN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfcmVsZWFzZV9lbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQ2OS1cXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0OTYtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE0OTc6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV90YXNrbmFtZV9lbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQ5OC1cXHRcXHRcXHRcXHRcXHQgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTI2LS8qIGNvbmZpZ2ZzIGhlbHBlciB0byBzeXNkYXRhIGNwdV9uciBmZWF0dXJlICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1Mjc6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9jcHVfbnJfZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1MjgtXFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozNjo1NC41NDEyOTEzMDZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE0NDc1Mzg2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4gSGVyZSdzIGhvdyBJJ20gdGhpbmtpbmcgYWJvdXQgaXQ6XG5cbioqQW5hbHl6aW5nIHRoZSBgZW5hYmxlZF9zdG9yZWAgQ2FsbHMqKlxuXG5BbHJpZ2h0LCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHVuZGVyc3RhbmQgdGhlIGJlaGF2aW9yIG9mIHRoaXMgY29kZSwgYW5kIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHRoYXQgaXMgYnkgZmlndXJpbmcgb3V0IGhvdyB0aGUgYGVuYWJsZWRfc3RvcmVgIGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQuIEkgbmVlZCB0byB0cmFjZSBldmVyeSBzaW5nbGUgaW5zdGFuY2Ugd2hlcmUgYGVuYWJsZWRfc3RvcmVgIGlzIGNhbGxlZC4gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBicmFuY2hlcyB0aGF0IGNoYW5nZSBob3cgYGVuYWJsZWRfc3RvcmVgIGlzIHV0aWxpemVkPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcGVyZm9ybWFuY2Ugb3IgdGhyZWFkaW5nIGNvbnNpZGVyYXRpb25zIGFzIGEgcmVzdWx0PyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGl0cyB1c2FnZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEknbGwgbmVlZCB0byBrbm93OiB3aGF0IGRhdGEgaXMgcGFzc2VkIHRvIGl0PyBXaGF0IGlzIGl0IGRvaW5nIHdpdGggdGhhdCBkYXRhPyBBbmQgaW1wb3J0YW50bHksIHdoYXQgYXJlIHRoZSByZXR1cm4gdmFsdWVzIG9mIHRoZXNlIGNhbGxzPyBUaGlzIHdpbGwgaGVscCBtZSBxdWlja2x5IHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgcmVzcG9uc2liaWxpdGllcywgYW5kIHRoZSBvdmVyYWxsIHJvbGUgaXQgcGxheXMgaW4gdGhlIGNvZGUuIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgYmVmb3JlIEkgY2FuIGV2YWx1YXRlIHRoaXMgZWZmaWNpZW50bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTg4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6MzY6NTcuNjg2MDQ3ODA3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTg2LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTg2OlxcdHN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbiA5ODc6XFx0XFx0XFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuIDk4ODpcXHR7XFxuIDk4OTpcXHRcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xcbiA5OTA6XFx0XFx0Ym9vbCBlbmFibGVkLCBjdXJyZW50X2VuYWJsZWQ7XFxuIDk5MTpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiA5OTI6XFx0XFx0c3NpemVfdCByZXQ7XFxuIDk5MzpcXHRcXG4gOTk0OlxcdFxcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XFxuIDk5NTpcXHRcXHRyZXQgPSBrc3RydG9ib29sKGJ1ZiwgXFx1MDAyNmVuYWJsZWQpO1xcbiA5OTY6XFx0XFx0aWYgKHJldClcXG4gOTk3OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gOTk4OlxcdFxcbiA5OTk6XFx0XFx0LyogV2hlbiB0aGUgdXNlciBleHBsaWNpdGx5IGVuYWJsZXMgb3IgZGlzYWJsZXMgYSB0YXJnZXQgdGhhdCBpc1xcbjEwMDA6XFx0XFx0ICogY3VycmVudGx5IGRlYWN0aXZhdGVkLCByZXNldCBpdHMgc3RhdGUgdG8gZGlzYWJsZWQuIFRoZSBERUFDVElWQVRFRFxcbjEwMDE6XFx0XFx0ICogc3RhdGUgb25seSB0cmFja3MgaW50ZXJmYWNlLWRyaXZlbiBkZWFjdGl2YXRpb24gYW5kIHNob3VsZCBfbm90X1xcbjEwMDI6XFx0XFx0ICogcGVyc2lzdCB3aGVuIHRoZSB1c2VyIG1hbnVhbGx5IGNoYW5nZXMgdGhlIHRhcmdldCdzIGVuYWJsZWQgc3RhdGUuXFxuMTAwMzpcXHRcXHQgKi9cXG4xMDA0OlxcdFxcdGlmIChudC1cXHUwMDNlc3RhdGUgPT0gU1RBVEVfREVBQ1RJVkFURUQpXFxuMTAwNTpcXHRcXHRcXHRudC1cXHUwMDNlc3RhdGUgPSBTVEFURV9ESVNBQkxFRDtcXG4xMDA2OlxcdFxcbjEwMDc6XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4xMDA4OlxcdFxcdGN1cnJlbnRfZW5hYmxlZCA9IG50LVxcdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEO1xcbjEwMDk6XFx0XFx0aWYgKGVuYWJsZWQgPT0gY3VycmVudF9lbmFibGVkKSB7XFxuMTAxMDpcXHRcXHRcXHRwcl9pbmZvKFxcXCJuZXR3b3JrIGxvZ2dpbmcgaGFzIGFscmVhZHkgJXNcXFxcblxcXCIsXFxuMTAxMTpcXHRcXHRcXHRcXHRjdXJyZW50X2VuYWJsZWQgPyBcXFwic3RhcnRlZFxcXCIgOiBcXFwic3RvcHBlZFxcXCIpO1xcbjEwMTI6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjEwMTM6XFx0XFx0fVxcbjEwMTQ6XFx0XFxuMTAxNTpcXHRcXHRpZiAoZW5hYmxlZCkge1xcdC8qIHRydWUgKi9cXG4xMDE2OlxcdFxcdFxcdGlmIChudC1cXHUwMDNlcmVsZWFzZSBcXHUwMDI2XFx1MDAyNiAhbnQtXFx1MDAzZWV4dGVuZGVkKSB7XFxuMTAxNzpcXHRcXHRcXHRcXHRwcl9lcnIoXFxcIk5vdCBlbmFibGluZyBuZXRjb25zb2xlLiBSZWxlYXNlIGZlYXR1cmUgcmVxdWlyZXMgZXh0ZW5kZWQgbG9nIG1lc3NhZ2VcXFwiKTtcXG4xMDE4OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xMDE5OlxcdFxcdFxcdH1cXG4xMDIwOlxcdFxcbjEwMjE6XFx0XFx0XFx0aWYgKG50LVxcdTAwM2VleHRlbmRlZCBcXHUwMDI2XFx1MDAyNiAhY29uc29sZV9pc19yZWdpc3RlcmVkKFxcdTAwMjZuZXRjb25zb2xlX2V4dCkpIHtcXG4xMDIyOlxcdFxcdFxcdFxcdG5ldGNvbnNvbGVfZXh0LmZsYWdzIHw9IENPTl9FTkFCTEVEO1xcbjEwMjM6XFx0XFx0XFx0XFx0cmVnaXN0ZXJfY29uc29sZShcXHUwMDI2bmV0Y29uc29sZV9leHQpO1xcbjEwMjQ6XFx0XFx0XFx0fVxcbjEwMjU6XFx0XFxuMTAyNjpcXHRcXHRcXHQvKiBVc2VyIG1pZ2h0IGJlIGVuYWJsaW5nIHRoZSBiYXNpYyBmb3JtYXQgdGFyZ2V0IGZvciB0aGUgdmVyeVxcbjEwMjc6XFx0XFx0XFx0ICogZmlyc3QgdGltZSwgbWFrZSBzdXJlIHRoZSBjb25zb2xlIGlzIHJlZ2lzdGVyZWQuXFxuMTAyODpcXHRcXHRcXHQgKi9cXG4xMDI5OlxcdFxcdFxcdGlmICghbnQtXFx1MDAzZWV4dGVuZGVkIFxcdTAwMjZcXHUwMDI2ICFjb25zb2xlX2lzX3JlZ2lzdGVyZWQoXFx1MDAyNm5ldGNvbnNvbGUpKSB7XFxuMTAzMDpcXHRcXHRcXHRcXHRuZXRjb25zb2xlLmZsYWdzIHw9IENPTl9FTkFCTEVEO1xcbjEwMzE6XFx0XFx0XFx0XFx0cmVnaXN0ZXJfY29uc29sZShcXHUwMDI2bmV0Y29uc29sZSk7XFxuMTAzMjpcXHRcXHRcXHR9XFxuMTAzMzpcXHRcXG4xMDM0OlxcdFxcdFxcdC8qXFxuMTAzNTpcXHRcXHRcXHQgKiBTa2lwIG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoKSAtLSBhbGwgdGhlIGF0dHJpYnV0ZXMgYXJlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM2OjU3LjY4NjE4NDk3N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTc1MzQ4ODc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBgZW5hYmxlZF9zdG9yZWAgU3RydWN0dXJlKipcblxuQWxyaWdodCwgSSdtIGRpdmluZyBpbi4gXCJMZXQncyByZWFkIHRoZSByZXN0IG9mIGBlbmFibGVkX3N0b3JlYC5cIiBUaGF0J3MgdGhlIGtleS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgZW5hYmxlZF9zdG9yZWAgb2JqZWN0IGNvbXBsZXRlbHkuIFRoZSBuYW1lIGltcGxpZXMgaXQncyBhIGNyaXRpY2FsIGNvbXBvbmVudCwgbGlrZWx5IGhvbGRpbmcgYSBzdGF0dXMgb3IgY29uZmlndXJhdGlvbiB0aGF0IGdvdmVybnMgYWNjZXNzIG9yIGFjdGl2YXRpb24gb2Ygb3RoZXIgcmVzb3VyY2VzLiBXaGF0J3Mgd2l0aGluIHRoaXMgc3RvcmUgaXMgY3J1Y2lhbC4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIG90aGVyIHByb3BlcnRpZXMgYW5kIHRoZSBzdG9yZSdzIHJlbGF0aW9uc2hpcHMgd2l0aCBvdGhlciBvYmplY3RzLiBXaGF0IGFyZSB0aGUgc3RvcmUncyBtZXRob2RzPyBXaGF0IGZvcm1hdCBhcmUgdGhlIGtleXMvdmFsdWVzPyBVbmRlcnN0YW5kaW5nIHRoaXMgc3RydWN0dXJlIHdpbGwgYmUgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgYmVoYXZpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTc3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozNzowMC44NjE1MzY4MTRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2MjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDM2LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDM2OlxcdFxcdFxcdCAqIGFscmVhZHkgY29uZmlndXJlZCB2aWEgY29uZmlnZnMuIEp1c3QgcHJpbnQgdGhlbSBvdXQuXFxuMTAzNzpcXHRcXHRcXHQgKi9cXG4xMDM4OlxcdFxcdFxcdG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKG50KTtcXG4xMDM5OlxcdFxcbjEwNDA6XFx0XFx0XFx0LyogSW5pdGlhbGlzZSB0aGUgc2tiIHBvb2wgYmVmb3JlIG5ldHBvbGxfc2V0dXAoKSBzbyB0aGUgcG9vbFxcbjEwNDE6XFx0XFx0XFx0ICogaXMgdmFsaWQgYXMgc29vbiBhcyBudC1cXHUwMDNlbnAuZGV2IGJlY29tZXMgdmlzaWJsZSB0b1xcbjEwNDI6XFx0XFx0XFx0ICogdGFyZ2V0X2xpc3Qgd2Fsa2VycyAobmV0Y29uc29sZV9uZXRkZXZfZXZlbnQpLCB3aGljaCB3b3VsZFxcbjEwNDM6XFx0XFx0XFx0ICogb3RoZXJ3aXNlIGNhbGwgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaCgpIG9uIHVuaW5pdGlhbGlzZWRcXG4xMDQ0OlxcdFxcdFxcdCAqIHN0YXRlLlxcbjEwNDU6XFx0XFx0XFx0ICovXFxuMTA0NjpcXHRcXHRcXHRuZXRjb25zb2xlX3NrYl9wb29sX2luaXQobnQpO1xcbjEwNDc6XFx0XFxuMTA0ODpcXHRcXHRcXHRyZXQgPSBuZXRjb25zX25ldHBvbGxfc2V0dXAobnQpO1xcbjEwNDk6XFx0XFx0XFx0aWYgKHJldCkge1xcbjEwNTA6XFx0XFx0XFx0XFx0bmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChudCk7XFxuMTA1MTpcXHRcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuMTA1MjpcXHRcXHRcXHR9XFxuMTA1MzpcXHRcXG4xMDU0OlxcdFxcdFxcdG50LVxcdTAwM2VzdGF0ZSA9IFNUQVRFX0VOQUJMRUQ7XFxuMTA1NTpcXHRcXHRcXHRwcl9pbmZvKFxcXCJuZXR3b3JrIGxvZ2dpbmcgc3RhcnRlZFxcXFxuXFxcIik7XFxuMTA1NjpcXHRcXHR9IGVsc2Uge1xcdC8qIGZhbHNlICovXFxuMTA1NzpcXHRcXHRcXHQvKiBXZSBuZWVkIHRvIGRpc2FibGUgdGhlIG5ldGNvbnNvbGUgYmVmb3JlIGNsZWFuaW5nIGl0IHVwXFxuMTA1ODpcXHRcXHRcXHQgKiBvdGhlcndpc2Ugd2UgbWlnaHQgZW5kIHVwIGluIHdyaXRlX21zZygpIHdpdGhcXG4xMDU5OlxcdFxcdFxcdCAqIG50LVxcdTAwM2VucC5kZXYgPT0gTlVMTCBhbmQgbnQtXFx1MDAzZXN0YXRlID09IFNUQVRFX0VOQUJMRURcXG4xMDYwOlxcdFxcdFxcdCAqL1xcbjEwNjE6XFx0XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2dGFyZ2V0X2NsZWFudXBfbGlzdF9sb2NrKTtcXG4xMDYyOlxcdFxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrLCBmbGFncyk7XFxuMTA2MzpcXHRcXHRcXHRudC1cXHUwMDNlc3RhdGUgPSBTVEFURV9ESVNBQkxFRDtcXG4xMDY0OlxcdFxcdFxcdC8qIFJlbW92ZSB0aGUgdGFyZ2V0IGZyb20gdGhlIGxpc3QsIHdoaWxlIGhvbGRpbmdcXG4xMDY1OlxcdFxcdFxcdCAqIHRhcmdldF9saXN0X2xvY2tcXG4xMDY2OlxcdFxcdFxcdCAqL1xcbjEwNjc6XFx0XFx0XFx0bGlzdF9tb3ZlKFxcdTAwMjZudC1cXHUwMDNlbGlzdCwgXFx1MDAyNnRhcmdldF9jbGVhbnVwX2xpc3QpO1xcbjEwNjg6XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaywgZmxhZ3MpO1xcbjEwNjk6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ0YXJnZXRfY2xlYW51cF9saXN0X2xvY2spO1xcbjEwNzA6XFx0XFx0XFx0LyogVW5yZWdpc3RlciBjb25zb2xlcywgd2hvc2UgdGhlIGxhc3QgdGFyZ2V0IG9mIHRoYXQgdHlwZSBnb3RcXG4xMDcxOlxcdFxcdFxcdCAqIGRpc2FibGVkLlxcbjEwNzI6XFx0XFx0XFx0ICovXFxuMTA3MzpcXHRcXHRcXHR1bnJlZ2lzdGVyX25ldGNvbnNfY29uc29sZXMoKTtcXG4xMDc0OlxcdFxcdH1cXG4xMDc1OlxcdFxcbjEwNzY6XFx0XFx0cmV0ID0gY291bnQ7XFxuMTA3NzpcXHRcXHQvKiBEZWZlcnJlZCBjbGVhbnVwICovXFxuMTA3ODpcXHRcXHRuZXRjb25zb2xlX3Byb2Nlc3NfY2xlYW51cHMoKTtcXG4xMDc5OlxcdG91dF91bmxvY2s6XFxuMTA4MDpcXHRcXHRkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfdW5sb2NrKCk7XFxuMTA4MTpcXHRcXHRyZXR1cm4gcmV0O1xcbjEwODI6XFx0fVxcbjEwODM6XFx0XFxuMTA4NDpcXHRzdGF0aWMgc3NpemVfdCByZWxlYXNlX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbjEwODU6XFx0XFx0XFx0XFx0ICAgICBzaXplX3QgY291bnQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM3OjAwLjg2MTY3NDY5NFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDgzNDc2NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2gncyBJbXBhY3QqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBwYXRjaCwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgYGVuYWJsZWRfc3RvcmVgIGlzIHRoZSBrZXkuIFRoYXQgZnVuY3Rpb24gY2FsbCBkaXJlY3RseSBsZWFkcyB0byBgbmV0Y29uc19uZXRwb2xsX3NldHVwYCwgd2hpY2ggaXMgYSBmYW50YXN0aWMgXCJmb2N1cyBzeW1ib2xcIiDigJMgdGhhdCdzIHdoZXJlIHRoaXMgcGF0Y2gncyBzZXR1cCBsb2dpYyBpcyBoaXR0aW5nLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGF0IGFyZWEuXG5cbkJ1dCwgYWxyaWdodCwgdGhpbmtpbmcgYnJvYWRlciBub3cuIElmIHdlJ3JlIHRhbGtpbmcgYWJvdXQgbG9nZ2luZywgYG5ldHBvbGxfc2VuZF91ZHBgIHNlZW1zIGxpa2UgYW5vdGhlciBoaWdoLWltcGFjdCBhcmVhIOKAkyB0aGF0J3MgdGhlIGZ1bmN0aW9uIGFjdHVhbGx5IHNlbmRpbmcgdGhlIG1lc3NhZ2UsIHJpZ2h0PyBHb29kIHRvIG5vdGUuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqZnVsbCogaW1wYWN0LiBUaGVyZWZvcmUsIEkgbmVlZCB0byBrbm93ICp3aGF0KiBjYWxscyBgbmV0cG9sbF9zZW5kX3VkcGAuIExldCdzIG1hcCB0aGF0IG91dCBhbmQgdGhlbiBjb21wYXJlIHdpdGggbXkgcHJpb3Iga25vd2xlZGdlIG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTM1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozNzowNC45NDUxNTQxMDRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDAyNzY3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRwb2xsX3NlbmRfdWRwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjEzMD1zdGF0aWMgdm9pZCBwdXNoX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTUzLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTU0OnN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNTUtXFx0XFx0XFx0ICAgIGludCBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE5MS0vKipcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE5MjogKiBzZW5kX3VkcCAtIFdyYXBwZXIgZm9yIG5ldHBvbGxfc2VuZF91ZHAgdGhhdCBjb3VudHMgZXJyb3JzXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxOTMtICogQG50OiB0YXJnZXQgdG8gc2VuZCBtZXNzYWdlIHRvXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE5Ni0gKlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTk3OiAqIENhbGxzIG5ldHBvbGxfc2VuZF91ZHAgYW5kIGNsYXNzaWZpZXMgdGhlIHJldHVybiB2YWx1ZS4gSWYgYW4gZXJyb3JcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE5OC0gKiBvY2N1cnJlZCBpdCBpbmNyZW1lbnRzIHN0YXRpc3RpY3MgaW4gbnQtXFx1MDAzZXN0YXRzIGFjY29yZGluZ2x5LlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTk5OiAqIE9ubHkgY2FsbHMgbmV0cG9sbF9zZW5kX3VkcCBpZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDIGlzIGRpc2FibGVkLlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjAwLSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMjAxPXN0YXRpYyB2b2lkIHNlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIwMi17XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMDM6XFx0aW50IHJlc3VsdCA9IG5ldHBvbGxfc2VuZF91ZHAobnQsIG1zZywgbGVuKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIwNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mzc6MDUuMTA5MTg2Njg3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzk0MzU2MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOlxuXG4qKkFuYWx5emluZyB0aGUgVURQIFNlbmRpbmcgRmxvdyoqXG5cbk9rYXksIHNvIEkgc2VlIGEgZnVuY3Rpb24gY2FsbGVkIGBzZW5kX3VkcGAsIGFuZCBpbW1lZGlhdGVseSBteSBicmFpbiBqdW1wcyB0bzogXCJSaWdodCwgdGhpcyBpcyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5IHNlbmRpbmcgb3V0IFVEUCBwYWNrZXRzLlwiIE5vdywgdGhlIG5leHQgbG9naWNhbCBxdWVzdGlvbiBpcywgd2hlcmUgZG9lcyBgc2VuZF91ZHBgIGZpdCBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZT8gVGhlIHRleHQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBgc2VuZF91ZHBgIGNhbGxzIGBuZXRwb2xsX3NlbmRfdWRwYC4gVGhhdCdzIGltcG9ydGFudCDigJMgaXQgZXN0YWJsaXNoZXMgYSBjbGVhciBjYWxsIGhpZXJhcmNoeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCByZWxhdGlvbnNoaXAgYW5kIHdoYXQgaGFwcGVucyBhdCBlYWNoIGxheWVyLiBCdXQgYmVmb3JlIEkgZGlnIGludG8gYG5ldHBvbGxfc2VuZF91ZHBgLCB3aGljaCBsaWtlbHkgaGFuZGxlcyB0aGUgbG93ZXItbGV2ZWwgbmV0d29yayBpbnRlcmZhY2UgaW50ZXJhY3Rpb24sIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSAqKm9yaWdpbioqIG9mIHRoaXMgY2FsbC4gVGhlIGtleSBxdWVzdGlvbiBJJ20gYXNraW5nIG15c2VsZiBpczogXCJXaGF0IGhpZ2hlci1sZXZlbCBmdW5jdGlvbiwgcHJvY2Vzcywgb3IgZXZlbnQgdHJpZ2dlcmVkIHRoZSBleGVjdXRpb24gb2YgYHNlbmRfdWRwYCBpbiB0aGUgZmlyc3QgcGxhY2U/XCIgVW5kZXJzdGFuZGluZyB0aGUgdXBzdHJlYW0gY2FsbGVyKHMpIHdpbGwgZ2l2ZSBtZSBlc3NlbnRpYWwgY29udGV4dCBhYm91dCAqd2h5KiB0aGUgVURQIHBhY2tldCBpcyBiZWluZyBzZW50LCB3aGF0IGRhdGEgaXQgbGlrZWx5IGNvbnRhaW5zLCBhbmQgd2hlcmUgaXQncyBkZXN0aW5lZC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgc2VuZF91ZHBgIHRvIGdldCB0aGUgaW5pdGlhdGluZyBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzI0MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM3OjA4LjM4ODYyNDc1M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ5OTA3ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VuZF91ZHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMTMwPXN0YXRpYyB2b2lkIHB1c2hfaXB2NihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNTMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxNTQ6c3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE1NS1cXHRcXHRcXHQgICAgaW50IGxlbilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTkxLS8qKlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTkyOiAqIHNlbmRfdWRwIC0gV3JhcHBlciBmb3IgbmV0cG9sbF9zZW5kX3VkcCB0aGF0IGNvdW50cyBlcnJvcnNcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE5My0gKiBAbnQ6IHRhcmdldCB0byBzZW5kIG1lc3NhZ2UgdG9cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTk2LSAqXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxOTc6ICogQ2FsbHMgbmV0cG9sbF9zZW5kX3VkcCBhbmQgY2xhc3NpZmllcyB0aGUgcmV0dXJuIHZhbHVlLiBJZiBhbiBlcnJvclxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTk4LSAqIG9jY3VycmVkIGl0IGluY3JlbWVudHMgc3RhdGlzdGljcyBpbiBudC1cXHUwMDNlc3RhdHMgYWNjb3JkaW5nbHkuXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxOTk6ICogT25seSBjYWxscyBuZXRwb2xsX3NlbmRfdWRwIGlmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgaXMgZGlzYWJsZWQuXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDAtICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMDE6c3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjAyLXtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIwMzpcXHRpbnQgcmVzdWx0ID0gbmV0cG9sbF9zZW5kX3VkcChudCwgbXNnLCBsZW4pO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjA0LVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIyMTg9c3RhdGljIHZvaWQgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyNTEtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyNTI6XFx0c2VuZF91ZHAobnQsIG50LVxcdTAwM2VidWYsIG1zZ19sZW4pO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjUzLX1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMjYzPXN0YXRpYyB2b2lkIHNlbmRfZnJhZ21lbnRlZF9ib2R5KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjM0OS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjM1MDpcXHRcXHRzZW5kX3VkcChudCwgbnQtXFx1MDAzZWJ1ZiwgYnVmX29mZnNldCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzNTEtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI0MjM9c3RhdGljIHZvaWQgc2VuZF9tc2dfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDMwLVxcdFxcdGZyYWcgPSBtaW4obGVmdCwgTUFYX1BSSU5UX0NIVU5LKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQzMTpcXHRcXHRzZW5kX3VkcChudCwgdG1wLCBmcmFnKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQzMi1cXHRcXHR0bXAgKz0gZnJhZztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mzc6MDguNDMzNjIyMTQ4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NTgxNzU1MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVRFAgTWVzc2FnZSBTZW5kaW5nIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBVRFAgbWVzc2FnZSBzZW5kaW5nIGNvZGUuIEl0IGxvb2tzIGxpa2UgYHNlbmRfbXNnX3VkcGAsIGBzZW5kX2ZyYWdtZW50ZWRfYm9keWAsIGFuZCBgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbmAgYWxsIHVsdGltYXRlbHkgY2FsbCBgc2VuZF91ZHBgLiBUaGF0J3MgdGhlIGNvcmUgZnVuY3Rpb24sIHJpZ2h0PyBBbmQgdGhvc2UgaW50ZXJtZWRpYXJ5IGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGZyb20gYHdyaXRlX21zZ2AgYW5kIGB3cml0ZV9leHRfbXNnYC4gVGhvc2UgYXJlIHJlZ2lzdGVyZWQgYXMgY29uc29sZSB3cml0ZSBmdW5jdGlvbnMuIFNvLCBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgZGVlcCBkaXZlIHdvdWxkIGJlIGBuZXRwb2xsX3NlbmRfdWRwYC5cblxuV2FpdCwgc2hvb3QhIGBuZXRwb2xsX3NlbmRfdWRwYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoYXQncyBub3QgaWRlYWwgZm9yIGRpcmVjdCBhbmFseXNpcy4gT2theSwgc28gbWF5YmUgSSBzaG91bGQgZm9jdXMgaGlnaGVyIHVwIHRoZW4/IElzIGl0IGJldHRlciB0byBmb2N1cyBvbiBgd3JpdGVfbXNnYCBvciBgd3JpdGVfZXh0X21zZ2A/IEknbGwgcXVpY2tseSBjaGVjayBpZiBgd3JpdGVfbXNnYCBpcyBhbHNvIHN0YXRpYywganVzdCB0byBiZSBzdXJlLiBUaGlzIGdpdmVzIG1lIGEgZ29vZCBlbnRyeSBwb2ludCB0byBzZWUgd2hlcmUgdGhlIFVEUCBzZW5kaW5nIGlzIGluaXRpYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgyNzgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mzc6MTIuMTkxODAwMTZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNzM4OTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndyaXRlX21zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEwNT1zdGF0aWMgTElTVF9IRUFEKHRhcmdldF9jbGVhbnVwX2xpc3QpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDYtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwNzovKiBUaGlzIG5lZWRzIHRvIGJlIGEgc3BpbmxvY2sgYmVjYXVzZSB3cml0ZV9tc2coKSBjYW5ub3Qgc2xlZXAgKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA4LXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGFyZ2V0X2xpc3RfbG9jayk7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9OTg2PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNTctXFx0XFx0LyogV2UgbmVlZCB0byBkaXNhYmxlIHRoZSBuZXRjb25zb2xlIGJlZm9yZSBjbGVhbmluZyBpdCB1cFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMDU4OlxcdFxcdCAqIG90aGVyd2lzZSB3ZSBtaWdodCBlbmQgdXAgaW4gd3JpdGVfbXNnKCkgd2l0aFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDU5LVxcdFxcdCAqIG50LVxcdTAwM2VucC5kZXYgPT0gTlVMTCBhbmQgbnQtXFx1MDAzZXN0YXRlID09IFNUQVRFX0VOQUJMRURcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mzc6MTIuMjQyNTUwMDA1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNTM3NzcwNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipTdGF0aWMgRnVuY3Rpb24gQWxlcnQhKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBqdXN0IHNhdyB0aGF0IGB3cml0ZV9tc2dgIGZ1bmN0aW9uLCBhbmQgdGhhdCdzIGEgc3RhdGljIGRlY2xhcmF0aW9uLCB3aGljaCBpcyB1bnVzdWFsIGluIHRoaXMgY29udGV4dC4gSXQncyBtYWtpbmcgbWUgd29uZGVyIGFib3V0IHRoZSBzY29wZS4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBkZWZpbmVkLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaG93IGlzIGl0IGJlaW5nIGNhbGxlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGZ1bGx5IHRvIGV2YWx1YXRlIGl0LiBMZXQgbWUgY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGUgbmV0d29yayBjb25zb2xlIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBJJ2xsIGdvIGRpZ2dpbmcgaW4gYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgc3RhdGljIGB3cml0ZV9tc2dgIGlzIGFsbCBhYm91dC4gSG9wZWZ1bGx5LCB0aGlzIHNob3VsZCBjbGFyaWZ5IGhvdyBpdCBpcyB1c2VkIGFuZCB3aHkgaXQgaXMgc3RhdGljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg3MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM3OjE2LjI5NjMzMDIzOFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5MTQ5NjYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyB2b2lkIHdyaXRlX21zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM3OjE2LjM0MDI1NzMwM1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODc3ODE0NDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBDb2RlIEluc3BlY3Rpb24qKlxuXG5IbW0sIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHBpbnBvaW50IHRoZSBpc3N1ZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGF0IGB3cml0ZV9tc2dgIGZ1bmN0aW9uLiBJcyBpdCBwb3NzaWJsZSB0aGF0IHRoZSBwcm9ibGVtIGxpZXMgd2l0aCB0aGUgd2F5IHRoZSBmdW5jdGlvbiBpcyBkZWNsYXJlZD8gQ291bGQgaXQgYmUgYSBzaW1wbGUgY2FzZSBvZiBhIG1pc3Npbmcga2V5d29yZCwgbGlrZSB0aGUgYHN0YXRpYyB2b2lkYCBkZWNsYXJhdGlvbj8gSSdtIHdvbmRlcmluZyBpZiwgZm9yIHdoYXRldmVyIHJlYXNvbiwgdGhlIG9yaWdpbmFsIHByb2dyYW1tZXIgdGhvdWdodCB0aGUgc3RhdGljIGtleXdvcmQgd2FzIHJlcXVpcmVkIGluIHRoZWlyIGluaXRpYWwgYXR0ZW1wdCB0byBnZXQgaXQgd29ya2luZywgdGhlbiBsZWZ0IGl0IHRoZXJlIGFmdGVyIHRlc3RpbmcsIGFuZCBpdCBpcyBub3cgaW50ZXJmZXJpbmcuIExldCBtZSBnbyBiYWNrIGFuZCByZXZpZXcgaG93IHRoYXQgd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTAxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mzc6MTkuMjE4MDc0MTcyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjY2NDg1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3cml0ZV9tc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMDU9c3RhdGljIExJU1RfSEVBRCh0YXJnZXRfY2xlYW51cF9saXN0KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA2LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMDc6LyogVGhpcyBuZWVkcyB0byBiZSBhIHNwaW5sb2NrIGJlY2F1c2Ugd3JpdGVfbXNnKCkgY2Fubm90IHNsZWVwICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwOC1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRhcmdldF9saXN0X2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTk4Nj1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDU3LVxcdFxcdC8qIFdlIG5lZWQgdG8gZGlzYWJsZSB0aGUgbmV0Y29uc29sZSBiZWZvcmUgY2xlYW5pbmcgaXQgdXBcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTA1ODpcXHRcXHQgKiBvdGhlcndpc2Ugd2UgbWlnaHQgZW5kIHVwIGluIHdyaXRlX21zZygpIHdpdGhcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA1OS1cXHRcXHQgKiBudC1cXHUwMDNlbnAuZGV2ID09IE5VTEwgYW5kIG50LVxcdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM3OjE5LjI2NDc0NDc0N1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjcyOTExMjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVidWdnaW5nIE5ldHdvcmsgQ29uc29sZSBPdXRwdXQqKlxuXG5IbW0sIEkgc2VlbSB0byBiZSBtaXNzaW5nIHNvbWV0aGluZyBjcml0aWNhbCBpbiB0aGUgZGVidWdnaW5nIG91dHB1dC4gSSBzdXNwZWN0IEkgbmVlZCBtb3JlIGNvbnRleHQgYXJvdW5kIHRoYXQgcGFydGljdWxhciBmdW5jdGlvbiBjYWxsIEkgd2FzIGp1c3QgZXhhbWluaW5nLiBNeSBpbml0aWFsIGludmVzdGlnYXRpb24gbWlnaHQgbm90IGhhdmUgZ2l2ZW4gbWUgdGhlIGNvbXBsZXRlIHBpY3R1cmUsIHNvIEkgbmVlZCB0byBicm9hZGVuIG15IHNjb3BlLiBHaXZlbiB0aGF0IEknbSB3b3JraW5nIHdpdGggbmV0d29yayBjb25zb2xlIG91dHB1dCwgdGhlIGB3cml0ZV9tc2dgIGZ1bmN0aW9uIHNlZW1zIGxpa2UgYSBsaWtlbHkgY2FuZGlkYXRlIGZvciBmdXJ0aGVyIGV4YW1pbmF0aW9uLiBJJ2xsIHJlYWNoIGZvciBgZ3JlcGAgYW5kIGxldmVyYWdlIGl0cyBjb250ZXh0IGZlYXR1cmUgKC1DIDEpLiBCeSB1c2luZyBgLUMgMWAgSSBzaG91bGQgYmUgYWJsZSB0byB2aWV3IG9uZSBsaW5lIGJlZm9yZSBhbmQgYWZ0ZXIgZWFjaCBtYXRjaCBvZiBgd3JpdGVfbXNnYCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgIGZpbGUuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHBvdGVudGlhbGx5IHJldmVhbCB0aGUgY2F1c2Ugb2YgdGhlIGlzc3VlIG9yIGF0IGxlYXN0IHBvaW50IG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24gZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSdtIGhvcGluZyB0aGlzIHdpbGwgcHJvdmlkZSB0aGUgZnVsbCBwaWN0dXJlIHRoYXQgSSdtIG1pc3NpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTI3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mzc6MjIuNTM3NjU4MjU0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzU3NzEwNDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid3JpdGVfbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTA1PXN0YXRpYyBMSVNUX0hFQUQodGFyZ2V0X2NsZWFudXBfbGlzdCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTA3Oi8qIFRoaXMgbmVlZHMgdG8gYmUgYSBzcGlubG9jayBiZWNhdXNlIHdyaXRlX21zZygpIGNhbm5vdCBzbGVlcCAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDgtc3RhdGljIERFRklORV9TUElOTE9DSyh0YXJnZXRfbGlzdF9sb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz05ODY9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA1Ny1cXHRcXHQvKiBXZSBuZWVkIHRvIGRpc2FibGUgdGhlIG5ldGNvbnNvbGUgYmVmb3JlIGNsZWFuaW5nIGl0IHVwXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwNTg6XFx0XFx0ICogb3RoZXJ3aXNlIHdlIG1pZ2h0IGVuZCB1cCBpbiB3cml0ZV9tc2coKSB3aXRoXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNTktXFx0XFx0ICogbnQtXFx1MDAzZW5wLmRldiA9PSBOVUxMIGFuZCBudC1cXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozNzoyMi44MTM0MzcwODVaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA1ODU5MzE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGF0OlxuXG4qKlRyb3VibGVzaG9vdGluZyBhIEZ1bmN0aW9uIENhbGwqKlxuXG5IbW0sIHN0cmFuZ2UuIEkgd2FzIGV4cGVjdGluZyB0aGUgY29kZSB0byByZWNvZ25pemUgYHdyaXRlX21zZ2AsIGJ1dCBpdCBzZWVtcyB0byBiZSBtaXNzaW5nIHRoZSBkZWZpbml0aW9uLiBJdCdzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIHdoeSB0aGlzIGlzIGhhcHBlbmluZy4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBuYW1pbmcgY29udmVudGlvbnMgYW5kIHBvdGVudGlhbCBhbHRlcm5hdGl2ZSBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUuIENvdWxkIGl0IGJlIHVzaW5nIGEgc2xpZ2h0bHkgZGlmZmVyZW50LCBwZXJoYXBzIG1vcmUgc3BlY2lmaWMsIG5hbWU/IE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBsb29rIGZvciBhIHNpbWlsYXIgZnVuY3Rpb24gbmFtZSB0aGF0IG1pZ2h0IGJlIHVzZWQgYXMgYW4gaW50ZXJuYWwgY2FsbCB0byByZXBsYWNlIHRoZSBtaXNzaW5nIGRlZmluaXRpb24uIFBlcmhhcHMgaXQncyB1c2luZyBhbiBleHRlbnNpb24gZnVuY3Rpb24gbmFtZSwgc29tZXRoaW5nIGxpa2UgYHdyaXRlX2V4dF9tc2dgPyBUaGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBuZXh0IHN0ZXAuIEknbGwgY2hlY2sgbXkgbm90ZXMgYW5kIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIHRoYXQgYWx0ZXJuYXRpdmUgbmFtZSByaWdodCBhd2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDAzMSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM3OjI1Ljg3MjAzMjg0NFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2Mzg4NDYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndyaXRlX2V4dF9tc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozNzoyNS45MTU2Nzg5OFoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDA5MjY4MTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlIHByb3ZpZGVkIHByb21wdCwgZnJhbWluZyBpdCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIENvbnNvbGUgU3RydWN0IFJlZ2lzdHJhdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gYW5hbHl6ZSBgY29uc29sZWAgc3RydWN0IHJlZ2lzdHJhdGlvbi4gVGhhdCdzIHRoZSBjb3JlIGZvY3VzLiBOb3csIHdoZW4gSSBzZWUgXCJyZWdpc3RyYXRpb24sXCIgbXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgcGFyc2luZyB0aGUgaW1wbGljYXRpb25zLiBXaGF0IGtpbmQgb2YgcmVnaXN0cmF0aW9uIGFyZSB3ZSB0YWxraW5nIGFib3V0PyBJcyBpdCBhIHJ1bnRpbWUgcHJvY2VzcywgYSBjb21waWxlLXRpbWUgbWVjaGFuaXNtLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gV2hhdCBjb250ZXh0IGFyZSB3ZSB3aXRoaW4/IElzIHRoaXMgYSBzcGVjaWZpYyBsaWJyYXJ5LCBhIGN1c3RvbSBmcmFtZXdvcmssIG9yIGEgYnJvYWRlciBzeXN0ZW0tbGV2ZWwgZGVzaWduPyBUaGUgdGVybSBcInN0cnVjdFwiIGFsc28gYnJpbmdzIHVwIHNvbWUgcXVlc3Rpb25zIGZvciBtZS4gV2hhdCBhdHRyaWJ1dGVzIGFyZSB3ZSB0YWxraW5nIGFib3V0PyBIb3cgaXMgaXQgaW1wbGVtZW50ZWQ/IElzIGl0IGJlaW5nIGNhbGxlZCBieSB0aGUgc3lzdGVtLCBvciB0aGUgdXNlcnM/IEluIG9yZGVyIHRvIGdpdmUgYW4gZXhwZXJ0IGFzc2Vzc21lbnQsIEkgbmVlZCB0byBrbm93IHRoZXNlIGRldGFpbHMuIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGBjb25zb2xlYCBzdHJ1Y3QgaXRzZWxmIGlzIGxpa2VseSBjZW50cmFsIHRvIGhvdyB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MgZnVuY3Rpb25zLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN0cnVjdCBpcyBiZWluZyBkZXNpZ25lZCwgc28gSSBjYW4gc2VlIHdoYXQgaXMgYmVpbmcgY2FsbGVkLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHByb3ZpZGVkIGNvbnRleHQsIHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0aGUgZGVzaWduIGdvYWxzLCBhbmQgYW55IGRvY3VtZW50YXRpb24gcmVsYXRlZCB0byB0aGlzIHByb2Nlc3MuIE9ubHkgdGhlbiBjYW4gSSB0cnVseSBncmFzcCB0aGUgbnVhbmNlcyBhbmQgcG90ZW50aWFsIGNoYWxsZW5nZXMgb3IgYmVuZWZpdHMgYXNzb2NpYXRlZCB3aXRoIGhvdyB0aGlzIGBjb25zb2xlYCBzdHJ1Y3QgaXMgYmVpbmcgcmVnaXN0ZXJlZC4gSSdtIHJlYWR5IHRvIGRpZyBpbiBhbmQgYnJlYWsgaXQgZG93bi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyNjMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozNzoyOS45MjQ5NTAxMjlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODI0MTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBjb25zb2xlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTEyPXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbmV0Y29uc29sZV93cTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTctICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExODpzdGF0aWMgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZV9leHQsIG5ldGNvbnNvbGU7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExOS1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNDQ0PXN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGUoc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0LCBib29sIGV4dGVuZGVkKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NzEtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0NzI6c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZV9leHQoc3RydWN0IGNvbnNvbGUgKmNvbiBfX2Fsd2F5c191bnVzZWQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NzMtXFx0XFx0XFx0XFx0IHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDc3LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDc4OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGVfYmFzaWMoc3RydWN0IGNvbnNvbGUgKmNvbiBfX2Fsd2F5c191bnVzZWQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NzktXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0ODMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0ODQ6c3RhdGljIHZvaWQgbmV0Y29uc29sZV9kZXZpY2VfbG9jayhzdHJ1Y3QgY29uc29sZSAqY29uIF9fYWx3YXlzX3VudXNlZCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ4NS1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nICpmbGFncylcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjQ4Nj1fX2FjcXVpcmVzKFxcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0OTAtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0OTE6c3RhdGljIHZvaWQgbmV0Y29uc29sZV9kZXZpY2VfdW5sb2NrKHN0cnVjdCBjb25zb2xlICpjb24gX19hbHdheXNfdW51c2VkLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDkyLVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBmbGFncylcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNjQ4PXN0YXRpYyB2b2lkIGZyZWVfcGFyYW1fdGFyZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY1OS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjY2MDpzdGF0aWMgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZV9leHQgPSB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NjEtXFx0Lm5hbWUgPSBcXFwibmV0Y29uX2V4dFxcXCIsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY2OC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjY2OTpzdGF0aWMgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZSA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY3MC1cXHQubmFtZSA9IFxcXCJuZXRjb25cXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozNzoyOS45NzA3Nzk4NjRaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5MjM2NTU5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0Y29uc29sZSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBuZXRjb25zb2xlIGZ1bmN0aW9ucyDigJMgc3BlY2lmaWNhbGx5IGBuZXRjb25zb2xlX3dyaXRlX2V4dGAgYW5kIGBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljYC4gTXkgZmlyc3QgdGhvdWdodCBpcywgaGFuZyBvbiwgaXNuJ3QgdGhlcmUgYSBjb21tb24gZnVuY3Rpb24gaGVyZSwgYSBnZW5lcmFsIGVudHJ5IHBvaW50LCB3aGljaCBJIHJlY2FsbCBhcyBgbmV0Y29uc29sZV93cml0ZWA/IExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0LiBZZXMsIGl0IGxvb2tzIGxpa2UgYG5ldGNvbnNvbGVfd3JpdGVgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uLlxuXG5Ob3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBpZiBgbmV0Y29uc29sZV93cml0ZWAgaXMgc3RhdGljLiBBbHJpZ2h0LCB5ZXAsIGl0J3MgbWFya2VkIGFzIGBzdGF0aWNgLiBSaWdodCwgdGhlIGluc3RydWN0aW9ucyBhcmUgZ3VpZGluZyB1cyBoZXJlOiBcIlByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy5cIiBIbW0sIHdlbGwsIHNpbmNlIHRoZXNlIHNlZW0gdG8gYmUgc3RhdGljIGZ1bmN0aW9ucywgbGV0J3MgZXhwbG9yZSBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGF2YWlsYWJsZS5cblxuV2UgYXJlIGZvcmNlZCB0byBlbnVtZXJhdGUgc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGVyZSBhcmUgbm8gbm9uLXN0YXRpYyBhbHRlcm5hdGl2ZXMuXG5cbkxldCBtZSB0YWtlIGEgbG9vayBhdCBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYCBhbmQgc2VlIGlmIGFueSBhcmUgZXhwb3NlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEyMDYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mzc6MzMuODYzMTQ4NTA1WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDMwNzU1NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozNzozMy45MDc0NjE1MDFaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyOTk5MzE3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQ29kZSBJbnNwZWN0aW9uKipcblxuQWxyaWdodCwgdGhlIGluaXRpYWwgcHJvbXB0IG1lbnRpb25zIFwidm9pZFwiIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGhlcmUuIEknbSB0aGlua2luZywgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byByZXR1cm4gdHlwZXMsIHNwZWNpZmljYWxseSB0aG9zZSB0aGF0IGluZGljYXRlIHRoZSBmdW5jdGlvbiBkb2Vzbid0IHJldHVybiBhbnkgdmFsdWUuIE15IGluaXRpYWwgc2NhbiB3aWxsIGJlIHRvIGV4YW1pbmUgdGhlIGNvZGViYXNlIGZvciBpbnN0YW5jZXMgd2hlcmUgdGhpcyBpcyBiZWluZyBoYW5kbGVkIGFuZCBsb29rIGZvciBwb3RlbnRpYWwgZXJyb3JzIG9yIHVuZGVmaW5lZCBiZWhhdmlvcnMuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHdoZXJlIGB2b2lkYCBvciBhIHNpbWlsYXIgcmV0dXJuIHR5cGUgKHBlcmhhcHMgYSBjdXN0b20gdHlwZSB0aGF0IGVmZmVjdGl2ZWx5IGFjdHMgYXMgYSBcIm5vIHJldHVyblwiKSBpcyBiZWluZyB1c2VkLiBGcm9tIHRoZXJlLCBJJ2xsIGFzc2VzcyBpdHMgdXNhZ2UuIEknbGwgbmVlZCB0byBsb29rIGF0IGJvdGggdGhlIGZ1bmN0aW9uIGRlZmluaXRpb25zICphbmQqIHRoZSBmdW5jdGlvbiBjYWxscy4gSSdsbCBiZSBwYXJ0aWN1bGFybHkgdmlnaWxhbnQgZm9yIHBsYWNlcyB3aGVyZSBhIGZ1bmN0aW9uJ3MgYHZvaWRgIHJldHVybiBtaWdodCBiZSBtaXNpbnRlcnByZXRlZCBvciBtaXN1c2VkLCBzdWNoIGFzIHRyeWluZyB0byBhc3NpZ24gaXRzIHJlc3VsdCB0byBhIHZhcmlhYmxlLCBvciB3aGVyZSBlcnJvciBoYW5kbGluZyBtaWdodCBiZSBpbmFwcHJvcHJpYXRlbHkgYXBwbGllZCBvciBtaXNzaW5nLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZXhjZXB0aW9ucywgbWVtb3J5IGxlYWtzLCBhbmQgYW55IHBsYWNlIHdoZXJlIHRoZSBgdm9pZGAgZGVzaWduYXRpb24gaXMgYmVpbmcgbWlzaGFuZGxlZC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgKmNvbmNlcHQqIG9mIFwibm8gcmV0dXJuXCIgYW5kIGhvdyB0aGF0J3MgYmVpbmcgaW1wbGVtZW50ZWQgYW5kIHRyZWF0ZWQgd2l0aGluIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTU5MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM3OjM3LjQzNzQ1NzMxMloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0ODE4NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfMC05XSsgXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDU3NiBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTU2PU1PRFVMRV9JTVBPUlRfTlMoXFxcIk5FVERFVl9JTlRFUk5BTFxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTc5LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4MDpzdGF0aWMgY2hhciBjb25maWdbTUFYX1BBUkFNX0xFTkdUSF07XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgxLW1vZHVsZV9wYXJhbV9zdHJpbmcobmV0Y29uc29sZSwgY29uZmlnLCBNQVhfUEFSQU1fTEVOR1RILCAwKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9ODI9TU9EVUxFX1BBUk1fREVTQyhuZXRjb25zb2xlLCBcXFwiIG5ldGNvbnNvbGU9W3NyYy1wb3J0XUBbc3JjLWlwXS9bZGV2XSxbdGd0LXBvcnRdQFxcdTAwM2N0Z3QtaXBcXHUwMDNlL1t0Z3QtbWFjYWRkcl1cXFwiKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg0OnN0YXRpYyBib29sIG9vcHNfb25seTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODUtbW9kdWxlX3BhcmFtKG9vcHNfb25seSwgYm9vbCwgMDYwMCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTg2PU1PRFVMRV9QQVJNX0RFU0Mob29wc19vbmx5LCBcXFwiT25seSBsb2cgb29wcyBtZXNzYWdlc1xcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkwLSNpZm5kZWZcXHRNT0RVTEVcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTE6c3RhdGljIGludCBfX2luaXQgb3B0aW9uX3NldHVwKGNoYXIgKm9wdClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTIte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTk2PV9fc2V0dXAoXFxcIm5ldGNvbnNvbGU9XFxcIiwgb3B0aW9uX3NldHVwKTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05OS0vKiBMaW5rZWQgbGlzdCBvZiBhbGwgY29uZmlndXJlZCB0YXJnZXRzICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwMDpzdGF0aWMgTElTVF9IRUFEKHRhcmdldF9saXN0KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTAxLS8qIHRhcmdldF9jbGVhbnVwX2xpc3QgaXMgdXNlZCB0byB0cmFjayB0YXJnZXRzIHRoYXQgbmVlZCB0byBiZSBjbGVhbmVkIG91dHNpZGVcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDQtICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwNTpzdGF0aWMgTElTVF9IRUFEKHRhcmdldF9jbGVhbnVwX2xpc3QpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDYtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNy0vKiBUaGlzIG5lZWRzIHRvIGJlIGEgc3BpbmxvY2sgYmVjYXVzZSB3cml0ZV9tc2coKSBjYW5ub3Qgc2xlZXAgKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTA4OnN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGFyZ2V0X2xpc3RfbG9jayk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwOS0vKiBUaGlzIG5lZWRzIHRvIGJlIGEgbXV0ZXggYmVjYXVzZSBuZXRwb2xsX2NsZWFudXAgbWlnaHQgc2xlZXAgKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTEwOnN0YXRpYyBERUZJTkVfTVVURVgodGFyZ2V0X2NsZWFudXBfbGlzdF9sb2NrKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTExLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMTI6c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZXRjb25zb2xlX3dxO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTMtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE3LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMTg6c3RhdGljIHN0cnVjdCBjb25zb2xlIG5ldGNvbnNvbGVfZXh0LCBuZXRjb25zb2xlO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTktXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyMDpzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRfc3RhdHMgIHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIxLVxcdHU2NF9zdGF0c190IHhtaXRfZHJvcF9jb3VudDtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjUtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyNjplbnVtIGNvbnNvbGVfdHlwZSB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyNy1cXHRDT05TX0JBU0lDID0gQklUKDApLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNC0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTM1OmVudW0gc3lzZGF0YV9mZWF0dXJlIHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM2LVxcdC8qIFBvcHVsYXRlIHRoZSBDUFUgdGhhdCBzZW5kcyB0aGUgbWVzc2FnZSAqL1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0Ny1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTQ4OmVudW0gdGFyZ2V0X3N0YXRlIHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQ5LVxcdFNUQVRFX0RJU0FCTEVELFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5NC0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTk1OnN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5Ni1cXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0bGlzdDtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjctXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyODpzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSBuZXRjb25zb2xlX3N1YnN5cztcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjI5OnN0YXRpYyBERUZJTkVfTVVURVgoZHluYW1pY19uZXRjb25zb2xlX211dGV4KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjMwLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMzE6c3RhdGljIGludCBfX2luaXQgZHluYW1pY19uZXRjb25zb2xlX2luaXQodm9pZClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjMyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzctXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIzODpzdGF0aWMgdm9pZCBfX2V4aXQgZHluYW1pY19uZXRjb25zb2xlX2V4aXQodm9pZClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjM5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDctICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0ODpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9nZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1NDpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9wdXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjU1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTktXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2MDpzdGF0aWMgdm9pZCBkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jayh2b2lkKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjEte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjY1OnN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2sodm9pZClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzEtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI3MjpzdGF0aWMgaW50IF9faW5pdCBkeW5hbWljX25ldGNvbnNvbGVfaW5pdCh2b2lkKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzMte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3Ni1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjc3OnN0YXRpYyB2b2lkIF9fZXhpdCBkeW5hbWljX25ldGNvbnNvbGVfZXhpdCh2b2lkKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzgte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI4NC0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjg1OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X2dldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yODYte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI4OC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjg5OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X3B1dChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yOTAte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI5Mi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjkzOnN0YXRpYyB2b2lkIHBvcHVsYXRlX2NvbmZpZ2ZzX2l0ZW0oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjk0LVxcdFxcdFxcdFxcdCAgIGludCBjbWRsaW5lX2NvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI5Ny1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjk4OnN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKHZvaWQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI5OS17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzAxLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozMDI6c3RhdGljIHZvaWQgZHluYW1pY19uZXRjb25zb2xlX211dGV4X3VubG9jayh2b2lkKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMDMte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMwOC0vKiBDaGVjayBpZiB0aGUgdGFyZ2V0IHdhcyBib3VuZCBieSBtYWMgYWRkcmVzcy4gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzA5OnN0YXRpYyBib29sIGJvdW5kX2J5X21hYyhzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMTAte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMxMy1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzE0OnN0YXRpYyB2b2lkIG5ldGNvbnNfcmVsZWFzZV9kZXYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzE1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMjAtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjMyMTpzdGF0aWMgdm9pZCByZWZpbGxfc2ticyhzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMjIte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMzNC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzM1OnN0YXRpYyB2b2lkIHJlZmlsbF9za2JzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMzNi17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzQ2LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozNDc6c3RhdGljIHZvaWQgbmV0Y29uc29sZV9za2JfcG9vbF9pbml0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM0OC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzUxLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozNTI6c3RhdGljIHZvaWQgbmV0Y29uc29sZV9za2JfcG9vbF9mbHVzaChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zNTMte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM1Ny1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzU4OnN0YXRpYyB2b2lkIG5ldGNvbnNfd2FpdF9jYXJyaWVyKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM1OS17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzc4LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozNzk6c3RhdGljIGNoYXIgKm5ldGNvbnNfZWdyZXNzX2RldihzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnN6KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zODAte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM5MC0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzkxOnN0YXRpYyBpbnQgbmV0Y29uc190YWtlX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzkyLVxcdFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDM0LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo0MzU6c3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00MzYtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00NjMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQ2NDpzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00NjUte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU1NS0vKiBBdHRlbXB0cyB0byByZXN1bWUgbG9nZ2luZyB0byBhIGRlYWN0aXZhdGVkIHRhcmdldC4gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTU2OnN0YXRpYyB2b2lkIHJlc3VtZV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTU3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NzYtLyogQ2hlY2tzIGlmIGEgZGVhY3RpdmF0ZWQgdGFyZ2V0IG1hdGNoZXMgYSBkZXZpY2UuICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjU3NzpzdGF0aWMgYm9vbCBkZWFjdGl2YXRlZF90YXJnZXRfbWF0Y2goc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTc4LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTg4LS8qIFByb2Nlc3Mgd29yayBzY2hlZHVsZWQgZm9yIHRhcmdldCByZXN1bWUuICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjU4OTpzdGF0aWMgdm9pZCBwcm9jZXNzX3Jlc3VtZV90YXJnZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01OTAte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTY0OS0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NjUwOnN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX2FuZF9pbml0KHZvaWQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTY1MS17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjc5LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo2ODA6c3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcm9jZXNzX2NsZWFudXBzX2NvcmUodm9pZClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjgxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03MDQtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjcwNTpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03MDYte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTcyNi0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzI3OnN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IGluZXRfYWRkciAqYWRkcilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzI4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03ODAtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjc4MTpzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICp0b190YXJnZXQoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03ODIte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTc5NC0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Nzk1OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJvY2Vzc19jbGVhbnVwcyh2b2lkKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03OTYte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgwNS0vKiBHZXQgcmlkIG9mIHBvc3NpYmxlIHRyYWlsaW5nIG5ld2xpbmUsIHJldHVybmluZyB0aGUgbmV3IGxlbmd0aCAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4MDY6c3RhdGljIHZvaWQgdHJpbV9uZXdsaW5lKGNoYXIgKnMsIHNpemVfdCBtYXhsZW4pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgwNy17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODIwLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4MjE6c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04MjIte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgyNS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODI2OnN0YXRpYyBzc2l6ZV90IGV4dGVuZGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgyNy17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODMwLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4MzE6c3RhdGljIHNzaXplX3QgcmVsZWFzZV9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04MzIte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgzNS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODM2OnN0YXRpYyBzc2l6ZV90IGRldl9uYW1lX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgzNy17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODQwLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4NDE6c3RhdGljIHNzaXplX3QgbG9jYWxfcG9ydF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04NDIte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg0NS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODQ2OnN0YXRpYyBzc2l6ZV90IHJlbW90ZV9wb3J0X3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg0Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODUwLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4NTE6c3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODUyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04NjAtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg2MTpzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODYyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04NzAtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg3MTpzdGF0aWMgc3NpemVfdCBsb2NhbF9tYWNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODcyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04NzgtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg3OTpzdGF0aWMgc3NpemVfdCByZW1vdGVfbWFjX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg4MC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODgzLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4ODQ6c3RhdGljIHNzaXplX3QgdHJhbnNtaXRfZXJyb3JzX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg4NS17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODk5LS8qIGNvbmZpZ2ZzIGhlbHBlciB0byBkaXNwbGF5IGlmIGNwdV9uciBzeXNkYXRhIGZlYXR1cmUgaXMgZW5hYmxlZCAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5MDA6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9jcHVfbnJfZW5hYmxlZF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05MDEte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkxMi0vKiBjb25maWdmcyBoZWxwZXIgdG8gZGlzcGxheSBpZiB0YXNrbmFtZSBzeXNkYXRhIGZlYXR1cmUgaXMgZW5hYmxlZCAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5MTM6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV90YXNrbmFtZV9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05MTQtXFx0XFx0XFx0XFx0XFx0ICAgICBjaGFyICpidWYpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTI1LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5MjY6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9yZWxlYXNlX2VuYWJsZWRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkyNy1cXHRcXHRcXHRcXHRcXHQgICAgY2hhciAqYnVmKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk0MS0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTQyOnN0YXRpYyB2b2lkIHVucmVnaXN0ZXJfbmV0Y29uc19jb25zb2xlcyh2b2lkKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05NDMte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk2NS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTY2OnN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfbXNnaWRfZW5hYmxlZF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTY3LVxcdFxcdFxcdFxcdFxcdCAgY2hhciAqYnVmKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk4NS0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTg2OnN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05ODctXFx0XFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA4My1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTA4NDpzdGF0aWMgc3NpemVfdCByZWxlYXNlX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDg1LVxcdFxcdFxcdCAgICAgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExMTAtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExMTE6c3RhdGljIHNzaXplX3QgZXh0ZW5kZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExMTItXFx0XFx0c2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExMzYtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExMzc6c3RhdGljIHNzaXplX3QgZGV2X25hbWVfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExMzgtXFx0XFx0c2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExNjMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExNjQ6c3RhdGljIHNzaXplX3QgbG9jYWxfcG9ydF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE2NS1cXHRcXHRzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE4NS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTE4NjpzdGF0aWMgc3NpemVfdCByZW1vdGVfcG9ydF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExODctXFx0XFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIwNy1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTIwODpzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIwOS1cXHRcXHRzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIyOS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTIzMDpzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyMzEtXFx0ICAgICAgIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjU2LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMjU3OnN0YXRpYyBzaXplX3QgY291bnRfdXNlcmRhdGFfZW50cmllcyhzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjU4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjYxLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMjYyOnN0YXRpYyBzc2l6ZV90IHJlbW90ZV9tYWNfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyNjMtXFx0XFx0c2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyODctXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyODg6c3RydWN0IHVzZXJkYXR1bSB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyODktXFx0c3RydWN0IGNvbmZpZ19pdGVtIGl0ZW07XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI5Mi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTI5MzpzdGF0aWMgc3RydWN0IHVzZXJkYXR1bSAqdG9fdXNlcmRhdHVtKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI5NC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI5Ny1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTI5ODpzdHJ1Y3QgdXNlcmRhdGEge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjk5LVxcdHN0cnVjdCBjb25maWdfZ3JvdXAgZ3JvdXA7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTMwMS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTMwMjpzdGF0aWMgc3RydWN0IHVzZXJkYXRhICp0b191c2VyZGF0YShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzMDMte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzMDYtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzMDc6c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqdXNlcmRhdGFfdG9fdGFyZ2V0KHN0cnVjdCB1c2VyZGF0YSAqdWQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzMDgte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzMTQtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzMTU6c3RhdGljIHNzaXplX3QgdXNlcmRhdHVtX3ZhbHVlX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzMTYte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzMjMtICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzMjQ6c3RhdGljIGludCBjYWxjX3VzZXJkYXRhX2xlbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzI1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzQyLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMzQzOnN0YXRpYyBpbnQgdXBkYXRlX3VzZXJkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNDQte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzOTItXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzOTM6c3RhdGljIHNzaXplX3QgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzk0LVxcdFxcdFxcdFxcdCAgICAgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0MzEtICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE0MzI6c3RhdGljIHZvaWQgZGlzYWJsZV9zeXNkYXRhX2ZlYXR1cmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQzMy1cXHRcXHRcXHRcXHQgICAgZW51bSBzeXNkYXRhX2ZlYXR1cmUgZmVhdHVyZSlcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDM4LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDM5OnN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfbXNnaWRfZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0NDAtXFx0XFx0XFx0XFx0XFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQ2Ny1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTQ2ODpzdGF0aWMgc3NpemVfdCBzeXNkYXRhX3JlbGVhc2VfZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0NjktXFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDk2LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDk3OnN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfdGFza25hbWVfZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0OTgtXFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTUyNi0vKiBjb25maWdmcyBoZWxwZXIgdG8gc3lzZGF0YSBjcHVfbnIgZmVhdHVyZSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTI3OnN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfY3B1X25yX2VuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTI4LVxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNTY0PUNPTkZJR0ZTX0FUVFIoc3lzZGF0YV8sIG1zZ2lkX2VuYWJsZWQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTY1LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTY2OnN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICp1c2VyZGF0dW1fYXR0cnNbXSA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU2Ny1cXHRcXHUwMDI2dXNlcmRhdHVtX2F0dHJfdmFsdWUsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU3MC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU3MTpzdGF0aWMgdm9pZCB1c2VyZGF0dW1fcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1NzIte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1NzUtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1NzY6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgdXNlcmRhdHVtX29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU3Ny1cXHQucmVsZWFzZSA9IHVzZXJkYXR1bV9yZWxlYXNlLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1NzktXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1ODA6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIHVzZXJkYXR1bV90eXBlID0ge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTgxLVxcdC5jdF9pdGVtX29wc1xcdD0gXFx1MDAyNnVzZXJkYXR1bV9vcHMsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU4NS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU4NjpzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICp1c2VyZGF0dW1fbWFrZV9pdGVtKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTg3LVxcdFxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBjaGFyICpuYW1lKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2MDgtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2MDk6c3RhdGljIHZvaWQgdXNlcmRhdHVtX2Ryb3Aoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsIHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTYxMC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTYyMi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTYyMzpzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZSAqdXNlcmRhdGFfYXR0cnNbXSA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTYyNC1cXHRcXHUwMDI2c3lzZGF0YV9hdHRyX2NwdV9ucl9lbmFibGVkLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2MzAtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2MzE6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25zIHVzZXJkYXRhX29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTYzMi1cXHQubWFrZV9pdGVtXFx0XFx0PSB1c2VyZGF0dW1fbWFrZV9pdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2MzUtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2MzY6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIHVzZXJkYXRhX3R5cGUgPSB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2MzctXFx0LmN0X2l0ZW1fb3BzXFx0PSBcXHUwMDI2dXNlcmRhdHVtX29wcyxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNjUzPUNPTkZJR0ZTX0FUVFJfUk8oLCB0cmFuc21pdF9lcnJvcnMpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjU0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjU1OnN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICpuZXRjb25zb2xlX3RhcmdldF9hdHRyc1tdID0ge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjU2LVxcdFxcdTAwMjZhdHRyX2VuYWJsZWQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY3My1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY3NDpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY3NS17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY4MS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY4MjpzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2l0ZW1fb3BlcmF0aW9ucyBuZXRjb25zb2xlX3RhcmdldF9pdGVtX29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY4My1cXHQucmVsZWFzZVxcdFxcdD0gbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZSxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjg1LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjg2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBuZXRjb25zb2xlX3RhcmdldF90eXBlID0ge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjg3LVxcdC5jdF9hdHRyc1xcdFxcdD0gbmV0Y29uc29sZV90YXJnZXRfYXR0cnMsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY5MS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY5MjpzdGF0aWMgdm9pZCBpbml0X3RhcmdldF9jb25maWdfZ3JvdXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY5My1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcwMC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTcwMTpzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpmaW5kX2NtZGxpbmVfdGFyZ2V0KGNvbnN0IGNoYXIgKm5hbWUpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3MDIte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3MjEtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3MjI6c3RhdGljIHN0cnVjdCBjb25maWdfZ3JvdXAgKm1ha2VfbmV0Y29uc29sZV90YXJnZXQoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3MjMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzU1LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzU2OnN0YXRpYyB2b2lkIGRyb3BfbmV0Y29uc29sZV90YXJnZXQoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3NTctXFx0XFx0XFx0XFx0ICAgc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4MDctXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4MDg6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25zIG5ldGNvbnNvbGVfc3Vic3lzX2dyb3VwX29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTgwOS1cXHQubWFrZV9ncm91cFxcdD0gbWFrZV9uZXRjb25zb2xlX3RhcmdldCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODEyLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODEzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBuZXRjb25zb2xlX3N1YnN5c190eXBlID0ge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODE0LVxcdC5jdF9ncm91cF9vcHNcXHQ9IFxcdTAwMjZuZXRjb25zb2xlX3N1YnN5c19ncm91cF9vcHMsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTgxOC0vKiBUaGUgbmV0Y29uc29sZSBjb25maWdmcyBzdWJzeXN0ZW0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTgxOTpzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSBuZXRjb25zb2xlX3N1YnN5cyA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTgyMC1cXHQuc3VfZ3JvdXBcXHQ9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODI3LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODI4OnN0YXRpYyB2b2lkIHBvcHVsYXRlX2NvbmZpZ2ZzX2l0ZW0oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTgyOS1cXHRcXHRcXHRcXHQgICBpbnQgY21kbGluZV9jb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODM3LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODM4OnN0YXRpYyBpbnQgc3lzZGF0YV9hcHBlbmRfY3B1X25yKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBvZmZzZXQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4MzktXFx0XFx0XFx0XFx0IHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODQ1LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODQ2OnN0YXRpYyBpbnQgc3lzZGF0YV9hcHBlbmRfdGFza25hbWUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IG9mZnNldCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg0Ny1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg1My1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTg1NDpzdGF0aWMgaW50IHN5c2RhdGFfYXBwZW5kX3JlbGVhc2Uoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IG9mZnNldClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg1NS17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg2MC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTg2MTpzdGF0aWMgaW50IHN5c2RhdGFfYXBwZW5kX21zZ2lkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBvZmZzZXQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NjIte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NzMtICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4NzQ6c3RhdGljIGludCBwcmVwYXJlX3N5c2RhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg3NS1cXHRcXHRcXHQgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg5OS0vKiBIYW5kbGUgbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIG5vdGlmaWNhdGlvbnMgKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTkwMDpzdGF0aWMgaW50IG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTkwMS1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk3Ny1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTk3ODpzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG5ldGNvbnNvbGVfbmV0ZGV2X25vdGlmaWVyID0ge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTc5LVxcdC5ub3RpZmllcl9jYWxsICA9IG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5OTMtICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE5OTQ6c3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjb25zX3NrYl9wb3Aoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IGxlbilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk5NS17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjAxNi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjAxNzpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZpbmRfc2tiKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBsZW4sXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwMTgtXFx0XFx0XFx0XFx0aW50IHJlc2VydmUpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjA0My1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjA0NDpzdGF0aWMgdm9pZCBuZXRwb2xsX3VkcF9jaGVja3N1bShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDQ1LVxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwNjgtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIwNjk6c3RhdGljIHZvaWQgcHVzaF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjA3MC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjA4Ni1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjA4NzpzdGF0aWMgdm9pZCBwdXNoX2V0aChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDg4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTAxLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTAyOnN0YXRpYyB2b2lkIHB1c2hfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTAzLVxcdFxcdCAgICAgIGludCBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjEyOS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjEzMDpzdGF0aWMgdm9pZCBwdXNoX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjEzMS1cXHRcXHQgICAgICBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNTMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxNTQ6c3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE1NS1cXHRcXHRcXHQgICAgaW50IGxlbilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjAwLSAqL1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozNzozNy40ODQ5NDUyMzhaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM5MjYwNzY3NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSWRlbnRpZnlpbmcgS2V5IFN5bWJvbHMgYW5kIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIG9yIHN5bWJvbHMgdGhhdCBhcmUgcmVsZXZhbnQsIHBhcnRpY3VsYXJseSB0aG9zZSB0aGF0IGFyZSBub3QgaW5saW5lZCwgYW5kIHRob3NlIHRoYXQgYXJlIG1vZGlmaWVkIGJ5IHRoZSBwYXRjaC4gSSBzZWUgdGhhdCBgbmV0cG9sbF9zZW5kX3VkcGAgaXMgc3RhdGljLCB3aGljaCBpbml0aWFsbHkgZ2l2ZXMgbWUgcGF1c2UsIGJ1dCBpdCdzIGNsZWFybHkgbW9kaWZpZWQgaW4gdGhlIGRpZmYuICBgbmV0Y29uc29sZV9uZXRkZXZfZXZlbnRgIGlzIGFsc28gc3RhdGljLCBidXQgaXQncyBhIG5vdGlmaWVyIGNhbGxiYWNrIHNvIGl0IGlzIHVubGlrZWx5IHRvIGJlIGlubGluZWQgYW5kIGlzIGEgcG90ZW50aWFsIGVudHJ5IHBvaW50LiBUaGUgb3RoZXIgZnVuY3Rpb25zIEkgaWRlbnRpZmllZCAoYG5ldGNvbnNvbGVfd3JpdGVgLCBgbmV0Y29uc29sZV93cml0ZV9leHRgLCBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2AsIGBpbml0X25ldGNvbnNvbGVgLCBgZHluYW1pY19uZXRjb25zb2xlX2luaXRgKSBhcmUgZWl0aGVyIHN0YXRpYyBvciBpbnRlcm5hbCBoZWxwZXJzIGFuZCB1bmxpa2VseSB0byBiZSBnb29kIHRhcmdldHMuXG5cblRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IGd1aWRlIG1lIHRvd2FyZHMgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0IGhlbHBzIHJlZmluZSBteSBmb2N1cy4gTG9va2luZyBhdCB0aGUgY2FsbCBjaGFpbnMsIGBuZXRjb25zb2xlX3dyaXRlX2V4dGAgYW5kIGBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljYCBhcmUgY29uc29sZSBjYWxsYmFja3MuICBUaGV5J3JlICpub3QqIGlubGluZWQgYW5kIGFyZSB3b3J0aCBleHBsb3JpbmcuIFNpbWlsYXJseSwgYGVuYWJsZWRfc3RvcmVgLCBgbG9jYWxfaXBfc3RvcmVgLCBhbmQgYHJlbW90ZV9pcF9zdG9yZWAgYXJlIGNvbmZpZ2ZzIGNhbGxiYWNrcywgYW5kIHRoZXJlZm9yZSAqbm90KiBpbmxpbmVkLCBhbmQgYWxzbyByZXByZXNlbnQgZ29vZCB0YXJnZXQgZW50cnlwb2ludHMuXG5cbkhvd2V2ZXIsIEkgbm90ZSB0aGF0IGBuZXRjb25zb2xlX3dyaXRlX2V4dGAgYW5kIGBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljYCBkb24ndCBkaXJlY3RseSBjYWxsIHRoZSBjb2RlIEknbSBpbnRlcmVzdGVkIGluLiBUaGV5IGNhbGwgaW50byBhIGRlZXBlciBjaGFpbjogYHNlbmRfZXh0X21zZ191ZHBgIC1cdTAwM2UgYHNlbmRfbXNnX3VkcGAgLVx1MDAzZSBgc2VuZF91ZHBgIC1cdTAwM2UgYG5ldHBvbGxfc2VuZF91ZHBgLiAgKkNydWNpYWxseSosIGBuZXRwb2xsX3NlbmRfdWRwYCBpcyB3aGVyZSB0aGUgY29yZSBtb2RpZmljYXRpb24gbGllcy4gVGhpcyBtYWtlcyBgbmV0cG9sbF9zZW5kX3VkcGAgYSAqdmVyeSogZ29vZCBjYW5kaWRhdGUsIGRlc3BpdGUgYmVpbmcgc3RhdGljLiBUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgZmFtaWx5IGNoZWNrIHRoZXJlIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGNvZGUgc2hvdWxkIGJlIG1vcmUgYWN0aXZlIG5vdy4gIEkgc2hvdWxkIGFsc28gaW5jbHVkZSBgbmV0Y29uc19uZXRwb2xsX3NldHVwYCBiZWNhdXNlIGl0IGNvbnRhaW5zIHNpbWlsYXIgZmFtaWx5IGNoZWNrcyBpbiB0aGUgcGF0Y2gsIGFuZCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAgYXMgaXQgaXMgY2FsbGVkIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24uIFRoZSBjb25maWdmcyBjYWxsYmFja3MgYXJlIGtleS4gYGxvY2FsX2lwX3N0b3JlYCBhbmQgYHJlbW90ZV9pcF9zdG9yZWAgYXJlIGltcG9ydGFudC4gVGhlIHBhdGNoZXMgYWxzbyBjb250YWluIG1vZGlmaWNhdGlvbnMgdG8gYG5ldHBvbGxfcGFyc2VfaXBfYWRkcmAuIGBlbmFibGVkX3N0b3JlYCBzaG91bGQgdHJpZ2dlciBgbmV0Y29uc19uZXRwb2xsX3NldHVwYC5cblxuU28gbXkgaW5pdGlhbCBsaXN0IG9mIGtleSBzeW1ib2xzIHRvIGludmVzdGlnYXRlIGlzOlxuXG4qICAgYGxvY2FsX2lwX3N0b3JlYFxuKiAgIGByZW1vdGVfaXBfc3RvcmVgXG4qICAgYGVuYWJsZWRfc3RvcmVgXG4qICAgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGBcbiogICBgbmV0cG9sbF9zZW5kX3VkcGBcbiogICBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWBcblxuTmV4dCwgSSBuZWVkIHRvIGNvbnNpZGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBJJ20gZ29pbmcgdG8gd2FudCB0byBmdXp6IG1vZHVsZSBwYXJhbWV0ZXJzLCBzbyBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAgZHVyaW5nIG1vZHVsZSBpbml0IHdpbGwgYmUgZ29vZC4gYGxvY2FsX2lwX3N0b3JlYCBhbmQgYHJlbW90ZV9pcF9zdG9yZWAgbG9vayBpZGVhbCBmb3IgY29uZmlnZnMgZnV6emluZy4gYGVuYWJsZWRfc3RvcmVgIHdpbGwgdHJpZ2dlciBgbmV0Y29uc19uZXRwb2xsX3NldHVwYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQgZm9yIGNvbXByZWhlbnNpdmUgdGVzdGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX05FVENPTlNPTEVgIGlzIGVuYWJsZWQsIGFuZCBgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ2AgdG9vLiBgQ09ORklHX0lQVjZgIGlzIHByb2JhYmx5IG5lZWRlZCB0byBleGVyY2lzZSBJUHY2IHBhdGhzLiBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgQ09ORklHX0NPTkZJR0ZTX0ZTYCBpcyBlbmFibGVkIGFzIHdlbGwgZm9yIGR5bmFtaWMgdXNlLiAgSSBzaG91bGQgZG91YmxlIGNoZWNrIGBORVRDT05TT0xFX0RZTkFNSUNgIGluIGBkcml2ZXJzL25ldC9LY29uZmlnYCB0byBjb25maXJtIHRoZXNlIGRlcGVuZGVuY2llcy4gVGhhdCBtZWFucyBteSBmaW5hbCBjb25maWd1cmF0aW9uIGxpc3QgaXM6XG5cbiogICBgTkVUQ09OU09MRWBcbiogICBgTkVUQ09OU09MRV9EWU5BTUlDYFxuKiAgIGBJUFY2YFxuKiAgIGBDT05GSUdGU19GU2BcblxuVGhpcyBnaXZlcyBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBmdXp6aW5nIGFuZCB2ZXJpZnlpbmcgdGhlIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDY2MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mzc6NTEuNDExMDI0MjA4WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM5MTEyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0zMjc9Y29uZmlnIE5FVENPTlNPTEVcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzMzLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzM0OmNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzNS1cXHRib29sIFxcXCJEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM3OjUxLjQ1ODQyMzkyM1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTQ1Njg5NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIG15IG93biB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipDaGVja2luZyBgQ09ORklHX0lQVjZgJ3MgQ29uZmlndXJhdGlvbiBTdGF0dXMqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIGludG8gdGhpcyBmdXJ0aGVyLCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgb2Ygb25lIGNydWNpYWwgdGhpbmc6IFdoYXQncyB0aGUgZGVhbCB3aXRoIGBDT05GSUdfSVBWNmA/IElzIGl0IGEgc2ltcGxlIGJvb2xlYW4sIGEgdHJ1ZS9mYWxzZSBmbGFnPyBPciBpcyBpdCBhIG1vcmUgY29tcGxleCB0cmlzdGF0ZSB2YXJpYWJsZSwgY2FwYWJsZSBvZiBiZWluZyBzZXQgdG8gXCJ5ZXMsXCIgXCJubyxcIiBvciBcIm1vZHVsZVwiPyBUaGF0IHNlZW1pbmdseSBzbWFsbCBkaXN0aW5jdGlvbiB3aWxsIGRpY3RhdGUgYSBsb3Qgb2YgaG93IEkgYXBwcm9hY2ggdGhpcyBwYXJ0aWN1bGFyIGFzcGVjdCBvZiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8ga25vdyBpdHMgY29uZmlndXJhdGlvbiB0eXBlIHRvIGVmZmVjdGl2ZWx5IHJlYXNvbiBhYm91dCBpdHMgaW1wbGljYXRpb25zIGRvd24gdGhlIGxpbmUuIEl0J3MgYSBmdW5kYW1lbnRhbCBxdWVzdGlvbiB0aGF0IGltcGFjdHMgbXkgbmV4dCBzdGVwcy4gR290dGEgZ2V0IHRoaXMgbmFpbGVkIGRvd24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyODI3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mzc6NTQuNjA0MTE2ODU0WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDg3MDc2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBWNlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L0tjb25maWctNS1cXG5uZXQvaXB2Ni9LY29uZmlnOjY6bWVudWNvbmZpZyBJUFY2XFxubmV0L2lwdjYvS2NvbmZpZy03LVxcdGJvb2wgXFxcIlRoZSBJUHY2IHByb3RvY29sXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0xOT1pZiBJUFY2XFxubmV0L2lwdjYvS2NvbmZpZy0yMC1cXG5uZXQvaXB2Ni9LY29uZmlnOjIxOmNvbmZpZyBJUFY2X1JPVVRFUl9QUkVGXFxubmV0L2lwdjYvS2NvbmZpZy0yMi1cXHRib29sIFxcXCJJUHY2OiBSb3V0ZXIgUHJlZmVyZW5jZSAoUkZDIDQxOTEpIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMwLVxcbm5ldC9pcHY2L0tjb25maWc6MzE6Y29uZmlnIElQVjZfUk9VVEVfSU5GT1xcbm5ldC9pcHY2L0tjb25maWctMzItXFx0Ym9vbCBcXFwiSVB2NjogUm91dGUgSW5mb3JtYXRpb24gKFJGQyA0MTkxKSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zOC1cXG5uZXQvaXB2Ni9LY29uZmlnOjM5OmNvbmZpZyBJUFY2X09QVElNSVNUSUNfREFEXFxubmV0L2lwdjYvS2NvbmZpZy00MC1cXHRib29sIFxcXCJJUHY2OiBFbmFibGUgUkZDIDQ0MjkgT3B0aW1pc3RpYyBEQURcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTEwMj1jb25maWcgSU5FVDZfSVBDT01QXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTExMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjExMjpjb25maWcgSVBWNl9NSVA2XFxubmV0L2lwdjYvS2NvbmZpZy0xMTMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IE1vYmlsaXR5XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xMTktXFxubmV0L2lwdjYvS2NvbmZpZzoxMjA6Y29uZmlnIElQVjZfSUxBXFxubmV0L2lwdjYvS2NvbmZpZy0xMjEtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElkZW50aWZpZXIgTG9jYXRvciBBZGRyZXNzaW5nIChJTEEpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0xNDY9Y29uZmlnIElORVQ2X1RVTk5FTFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xNDktXFxubmV0L2lwdjYvS2NvbmZpZzoxNTA6Y29uZmlnIElQVjZfVlRJXFxubmV0L2lwdjYvS2NvbmZpZy0xNTEtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgKHNlY3VyZSkgSVB2NjogdHVubmVsaW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xNjEtXFxubmV0L2lwdjYvS2NvbmZpZzoxNjI6Y29uZmlnIElQVjZfU0lUXFxubmV0L2lwdjYvS2NvbmZpZy0xNjMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElQdjYtaW4tSVB2NCB0dW5uZWwgKFNJVCBkcml2ZXIpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xNzYtXFxubmV0L2lwdjYvS2NvbmZpZzoxNzc6Y29uZmlnIElQVjZfU0lUXzZSRFxcbm5ldC9pcHY2L0tjb25maWctMTc4LVxcdGJvb2wgXFxcIklQdjY6IElQdjYgUmFwaWQgRGVwbG95bWVudCAoNlJEKVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTk1LVxcbm5ldC9pcHY2L0tjb25maWc6MTk2OmNvbmZpZyBJUFY2X05ESVNDX05PREVUWVBFXFxubmV0L2lwdjYvS2NvbmZpZy0xOTctXFx0Ym9vbFxcbm5ldC9pcHY2L0tjb25maWctMTk4LVxcbm5ldC9pcHY2L0tjb25maWc6MTk5OmNvbmZpZyBJUFY2X1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMjAwLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBJUC1pbi1JUHY2IHR1bm5lbCAoUkZDMjQ3MylcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cXG5uZXQvaXB2Ni9LY29uZmlnOjIxMDpjb25maWcgSVBWNl9HUkVcXG5uZXQvaXB2Ni9LY29uZmlnLTIxMS1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogR1JFIHR1bm5lbFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjI3LVxcbm5ldC9pcHY2L0tjb25maWc6MjI4OmNvbmZpZyBJUFY2X0ZPVVxcbm5ldC9pcHY2L0tjb25maWctMjI5LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIzMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjIzMjpjb25maWcgSVBWNl9GT1VfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yMzMtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjM2LVxcbm5ldC9pcHY2L0tjb25maWc6MjM3OmNvbmZpZyBJUFY2X01VTFRJUExFX1RBQkxFU1xcbm5ldC9pcHY2L0tjb25maWctMjM4LVxcdGJvb2wgXFxcIklQdjY6IE11bHRpcGxlIFJvdXRpbmcgVGFibGVzXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNDItXFxubmV0L2lwdjYvS2NvbmZpZzoyNDM6Y29uZmlnIElQVjZfU1VCVFJFRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTI0NC1cXHRib29sIFxcXCJJUHY2OiBzb3VyY2UgYWRkcmVzcyBiYXNlZCByb3V0aW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNTYtXFxubmV0L2lwdjYvS2NvbmZpZzoyNTc6Y29uZmlnIElQVjZfTVJPVVRFXFxubmV0L2lwdjYvS2NvbmZpZy0yNTgtXFx0Ym9vbCBcXFwiSVB2NjogbXVsdGljYXN0IHJvdXRpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI2NC1cXG5uZXQvaXB2Ni9LY29uZmlnOjI2NTpjb25maWcgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjYvS2NvbmZpZy0yNjYtXFx0Ym9vbCBcXFwiSVB2NjogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNzgtXFxubmV0L2lwdjYvS2NvbmZpZzoyNzk6Y29uZmlnIElQVjZfUElNU01fVjJcXG5uZXQvaXB2Ni9LY29uZmlnLTI4MC1cXHRib29sIFxcXCJJUHY2OiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI4NS1cXG5uZXQvaXB2Ni9LY29uZmlnOjI4Njpjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yODctXFx0Ym9vbCBcXFwiSVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI5OS1cXG5uZXQvaXB2Ni9LY29uZmlnOjMwMDpjb25maWcgSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9LY29uZmlnLTMwMS1cXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSE1BQyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zMTEtXFxubmV0L2lwdjYvS2NvbmZpZzozMTI6Y29uZmlnIElQVjZfU0VHNl9CUEZcXG5uZXQvaXB2Ni9LY29uZmlnLTMxMy1cXHRkZWZfYm9vbCB5XFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMxNi1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxNzpjb25maWcgSVBWNl9SUExfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTMxOC1cXHRib29sIFxcXCJJUHY2OiBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMyNy1cXG5uZXQvaXB2Ni9LY29uZmlnOjMyODpjb25maWcgSVBWNl9JT0FNNl9MV1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMzI5LVxcdGJvb2wgXFxcIklQdjY6IElPQU0gUHJlLWFsbG9jYXRlZCBUcmFjZSBpbnNlcnRpb24gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mzc6NTQuNjQ4OTkyODZaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU0ODA5NDgwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXRjb25zb2xlIE1vZHVsZSdzIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgSVBWNmAgaXMganVzdCBhIGJvb2xlYW4sIGFuZCBpdCdzIHNldCBjb3JyZWN0bHkuIFRoYXQncyBnb29kLCBvbmUgbGVzcyB0aGluZyB0byB3b3JyeSBhYm91dC4gTm93LCBsZXQncyB0YWtlIHN0b2NrIG9mIHRoZSBrZXkgc3ltYm9scyB3ZSdyZSBkZWFsaW5nIHdpdGggaGVyZTogYGxvY2FsX2lwX3N0b3JlYCwgYHJlbW90ZV9pcF9zdG9yZWAsIGBlbmFibGVkX3N0b3JlYCwgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAsIGBuZXRwb2xsX3NlbmRfdWRwYCwgYW5kIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgY29yZSBjb21wb25lbnRzIEkgbmVlZCB0byB1bmRlcnN0YW5kLlxuXG5XYWl0IGEgc2Vjb25k4oCmIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoYXQncyBpbnRlcmVzdGluZy4gSXQncyBjYWxsZWQgZnJvbSBgYWxsb2NfcGFyYW1fdGFyZ2V0YCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgZnJvbSBgaW5pdF9uZXRjb25zb2xlYCwgd2hpY2ggaXMgdGhlIG1vZHVsZSBpbml0aWFsaXphdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGZ1bmN0aW9uIGlzIGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIHRoZSBrZXJuZWwuIFRoZSBzdGF0aWMgZGVjbGFyYXRpb24gaXMgbm90IGlkZWFsLCBkZXBlbmRpbmcgb24gdGhlIHNjb3BlLiBDb3VsZCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAgYmUgcmVhY2hlZCB0aHJvdWdoIGNvbmZpZ2ZzPyBUaGF0J3MgYSBwb3NzaWJpbGl0eSBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgZnVydGhlci4gSWYgc28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcGFyc2VyIGlzIGJlaW5nIGFjY2Vzc2VkLlxuXG5UbyBjbGFyaWZ5IG15IHRob3VnaHQgcHJvY2VzcywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGNhbGxlcnMgb2YgYGFsbG9jX3BhcmFtX3RhcmdldGAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYCBpcyB1c2VkLCBhbmQgZnJvbSB3aGVyZS4gVGhpcyBpcyBhIGNyaXRpY2FsIHBvaW50IHRvIHBpbiBkb3duIHRvIGFzc2VzcyB0aGUgcG90ZW50aWFsIGlzc3Vlcywgb3IgaWYgdGhlIHN5c3RlbSBkZXNpZ24gaXMgc291bmQsIGluIHRoZSBuZXRjb25zb2xlIG1vZHVsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ1NzksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mzc6NTkuMTk3MDkyMDE2WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA1MDM2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19wYXJhbV90YXJnZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNDk4PXN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjU4NS0vKiBBbGxvY2F0ZSBuZXcgdGFyZ2V0IChmcm9tIGJvb3QvbW9kdWxlIHBhcmFtKSBhbmQgc2V0dXAgbmV0cG9sbCBmb3IgaXQgKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjU4NjpzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19wYXJhbV90YXJnZXQoY2hhciAqdGFyZ2V0X2NvbmZpZyxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjU4Ny1cXHRcXHRcXHRcXHRcXHRcXHQgICAgaW50IGNtZGxpbmVfY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjY3OD1zdGF0aWMgaW50IF9faW5pdCBpbml0X25ldGNvbnNvbGUodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjg5LVxcdFxcdHdoaWxlICgodGFyZ2V0X2NvbmZpZyA9IHN0cnNlcChcXHUwMDI2aW5wdXQsIFxcXCI7XFxcIikpKSB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2OTA6XFx0XFx0XFx0bnQgPSBhbGxvY19wYXJhbV90YXJnZXQodGFyZ2V0X2NvbmZpZywgY291bnQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjkxLVxcdFxcdFxcdGlmIChJU19FUlIobnQpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM3OjU5LjI0MjE0ODM4MVoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTgyMjUxMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBGb2N1cyBmb3IgTmV0Y29uc29sZSBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgdGhpbmsgdGhpcyB0aHJvdWdoIGZvciB0aGUgYG5ldGNvbnNvbGVgIG1vZHVsZS4gSSBzZWUgdGhhdCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAgaXMgb25seSBjYWxsZWQgZnJvbSBgaW5pdF9uZXRjb25zb2xlYCwgbWVhbmluZyBpdCdzIG9ubHkgYWNjZXNzaWJsZSBkdXJpbmcgbW9kdWxlIGxvYWQuIEdvb2QsIHRoYXQgbWFrZXMgaXQgYSB2aWFibGUgdGFyZ2V0IGZvciBmdXp6aW5nIGJlY2F1c2UgU3l6a2FsbGVyIGNhbiwgb2YgY291cnNlLCBmdXp6IG1vZHVsZSBwYXJhbWV0ZXJzLlxuXG5Ob3csIEkgbmVlZCB0byBjaG9vc2Ugc29tZSBnb29kIGZvY3VzIHN5bWJvbHMuIEknbSBjb25zaWRlcmluZyBgbmV0cG9sbF9wYXJzZV9pcF9hZGRyYC4gSSBzZWUgaXQncyBjYWxsZWQgYnkgYGxvY2FsX2lwX3N0b3JlYCwgYHJlbW90ZV9pcF9zdG9yZWAsIGFuZCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAsIHdoaWNoIGlzIGEgZ29vZCBzaWduLiBJdCAqaXMqIHN0YXRpYywgYnV0IGl0J3MgdGhlIGNvcmUgcGFyc2luZyBmdW5jdGlvbiB0aGF0J3MgYmVpbmcgbW9kaWZpZWQsIHNvIEknbGwga2VlcCBpdCBpbiBmb3Igbm93LlxuXG5MZXQncyByZWZpbmUgdGhlIGxpc3QuIFJpZ2h0IG5vdywgSSdtIHRoaW5raW5nOlxuXG4qICAgYGxvY2FsX2lwX3N0b3JlYFxuKiAgIGByZW1vdGVfaXBfc3RvcmVgXG4qICAgYGVuYWJsZWRfc3RvcmVgXG4qICAgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGBcbiogICBgbmV0cG9sbF9zZW5kX3VkcGBcbiogICBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWBcbiogICBgbmV0cG9sbF9wYXJzZV9pcF9hZGRyYFxuXG5Ib2xkIG9uLCB0aGUgZG9jdW1lbnRhdGlvbiBpcyByZW1pbmRpbmcgbWUgdG8gcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgbWFrZXMgc2Vuc2U7IGlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyBkb24ndCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIGBuZXRwb2xsX3BhcnNlX2lwX2FkZHJgIGlzIHN0YXRpYywgYW5kIG1heSBiZSBpbmxpbmVkLiBCdXQgZ2l2ZW4gaXQgaXMgY2FsbGVkIGZyb20gbXVsdGlwbGUgbG9jYXRpb25zLCBwZXJoYXBzIG5vdC4gYGxvY2FsX2lwX3N0b3JlYCwgYHJlbW90ZV9pcF9zdG9yZWAsIGFuZCBgZW5hYmxlZF9zdG9yZWAgYXJlIGNvbmZpZ2ZzIGNhbGxiYWNrczsgbm8gd2F5IHRoZXkgYXJlIGlubGluZWQuIGBuZXRjb25zX25ldHBvbGxfc2V0dXBgIGlzIHByb2JhYmx5IHRvbyBsYXJnZSB0byBiZSBpbmxpbmVkIGFuZCB0aGUgc2FtZSBmb3IgYG5ldHBvbGxfc2VuZF91ZHBgIGFuZCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAuXG5cblllcCwgSSB0aGluayB0aGlzIGxpc3QgaXMgc29saWQuXG5cbkZvciBjb25maWd1cmF0aW9ucywgSSdsbCBuZWVkOlxuXG4qICAgYE5FVENPTlNPTEVgXG4qICAgYE5FVENPTlNPTEVfRFlOQU1JQ2BcbiogICBgSVBWNmBcbiogICBgQ09ORklHRlNfRlNgXG5cbkknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgQ09ORklHRlNfRlNgIGlzIHRoZSBjb3JyZWN0IG5hbWUgdGhvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTMzOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozODowNS44MjQ0MDMwMTFaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mzk4NjM0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ09ORklHRlNfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvY29uZmlnZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9jb25maWdmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvY29uZmlnZnMvS2NvbmZpZzoyOmNvbmZpZyBDT05GSUdGU19GU1xcbmZzL2NvbmZpZ2ZzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVXNlcnNwYWNlLWRyaXZlbiBjb25maWd1cmF0aW9uIGZpbGVzeXN0ZW1cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjM4OjA1Ljk4ODM5ODc5NFoiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODAxNTUxMjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIERlcGVuZGVuY2llcyBmb3IgTmV0d29yayBDb25zb2xlKipcblxuT2theSwgeWVzLCBgQ09ORklHRlNfRlNgIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IGZpbGUgc3lzdGVtIGZvciB3aGF0IEknbSBkb2luZyBoZXJlLiBUaW1lIHRvIG1ha2Ugc3VyZSBgTkVUQ09OU09MRV9EWU5BTUlDYCBpc24ndCByZWx5aW5nIG9uIGFueXRoaW5nIGVsc2UgdW5leHBlY3RlZC4gTGV0J3Mgc2VlLi4uIHRoZSBkZXBlbmRlbmN5IHN0cmluZyBsb29rcyBsaWtlOiBgZGVwZW5kcyBvbiBORVRDT05TT0xFIFx1MDAyNlx1MDAyNiBTWVNGUyBcdTAwMjZcdTAwMjYgQ09ORklHRlNfRlMgXHUwMDI2XHUwMDI2ICEoTkVUQ09OU09MRT15IFx1MDAyNlx1MDAyNiBDT05GSUdGU19GUz1tKWAuIEFscmlnaHQsIHNvIGl0J3MgZGlyZWN0bHkgZGVwZW5kZW50IG9uIGBORVRDT05TT0xFYCwgYFNZU0ZTYCwgYW5kIGBDT05GSUdGU19GU2AsIHdpdGggYSBjYXZlYXQuIFRoYXQncyBnb29kIHByYWN0aWNlLiBJJ2xsIGFkZCBgU1lTRlNgIGp1c3QgdG8gYmUgc2FmZSwgdGhvdWdoIGl0J3MgdXN1YWxseSBwYXJ0IG9mIG1vc3Qgc2V0dXBzIGFueXdheS4gV2FpdCBhIHNlY29uZC4uLiBgU1lTRlNgIGlzIGEgKmJvb2xlYW4qLCBpc24ndCBpdD8gT2theSwgbm8gcHJvYmxlbSwgdGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYzNDEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozODowOS43ODk5NTI0ODVaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyOTgxMTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTWVNGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9zeXNmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3N5c2ZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9zeXNmcy9LY29uZmlnOjI6Y29uZmlnIFNZU0ZTXFxuZnMvc3lzZnMvS2NvbmZpZy0zLVxcdGJvb2wgXFxcInN5c2ZzIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjozODowOS44MzI5MzgxMzFaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODYwMDk4MzcyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gdGhlIHRleHQgY29uZmlybXMgbXkgaW5pdGlhbCBodW5jaCDigJMgeWVzLCBgU1lTRlNgIGlzIHJlbGV2YW50IGhlcmUuIE5vdywgbGV0J3MgZGlnIGRlZXBlciB0byBzZWUgd2hhdCBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgY29tZSBpbnRvIHBsYXkgd2l0aCB0aGlzIHBhdGNoLiBJIGFscmVhZHkga25vdyB0aGF0IGBDT05GSUdfSU5FVGAgaXMgZXNzZW50aWFsIGZvciBJUHY0LCBhbmQgdXN1YWxseSwgaXQncyBlbmFibGVkIGJ5IGRlZmF1bHQgYW55d2F5LiBgQ09ORklHX05FVGAgaXMgYW5vdGhlciBvYnZpb3VzIGRlcGVuZGVuY3ksIGFzIHdlJ3JlIGRlYWxpbmcgd2l0aCBuZXR3b3JraW5nLlxuXG5UbyBiZSBjb21wcmVoZW5zaXZlIGluIG15IGFuYWx5c2lzLCBJJ20gZ29pbmcgdG8gZXhwbGljaXRseSBsaXN0IG91dCBhIGZldyBjb25maWd1cmF0aW9ucyB0aGF0IEkgdGhpbmsgYXJlIGdvaW5nIHRvIGJlIG1vc3QgcmVsZXZhbnQgZm9yIGZ1enppbmcgdGhpcyBwYXRjaDogYE5FVENPTlNPTEVgLCBgTkVUQ09OU09MRV9EWU5BTUlDYCwgYElQVjZgLCBhbmQgYENPTkZJR0ZTX0ZTYC5cblxuVGhlIHJlYXNvbmluZyBpcyBwcmV0dHkgY2xlYXIuIFRoaXMgcGF0Y2ggaXMgZnVuZGFtZW50YWxseSBjaGFuZ2luZyBob3cgdGhlIGBuZXRjb25zb2xlYCBkcml2ZXIgaGFuZGxlcyBJUCBhZGRyZXNzZXMgYnkgcmVwbGFjaW5nIHRoZSBib29sZWFuIGZsYWcgYXBwcm9hY2ggd2l0aCBhIGBzdHJ1Y3QgaW5ldF9hZGRyYCB0aGF0IGV4cGxpY2l0bHkgdHJhY2tzIHRoZSBhZGRyZXNzIGZhbWlseS4gVGhpcyBjaGFuZ2UgZGlyZWN0bHkgaW1wYWN0cyBob3cgdGhlIGRyaXZlciBwYXJzZXMgYW5kIG1hbmFnZXMgbG9jYWwgYW5kIHJlbW90ZSBJUCBhZGRyZXNzZXMsIGFuZCBob3cgaXQgaGFuZGxlcyBVRFAgZW5jYXBzdWxhdGlvbiB3aXRoaW4gYG5ldHBvbGxgLiBJIGNhbiBzZWUgc2V2ZXJhbCBhcmVhcyB0aGF0IG5lZWQgc2NydXRpbnkuXG5cblNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGF0dGFjayBzdXJmYWNlcyB0aHJvdWdoIG1vZHVsZSBwYXJhbWV0ZXJzIGF0IGJvb3QgYW5kIGxvYWQgdGltZSBhbmQgZHluYW1pY2FsbHkgdGhyb3VnaCBjb25maWdmcyBhdHRyaWJ1dGVzLiBUaGUgZnV6emluZyBlZmZvcnRzIHNob3VsZCBwcmlvcml0aXplIHRoZSBjb25maWdmcyBzdG9yZSBjYWxsYmFja3MsIHRoZSBtb2R1bGUgcGFyYW1ldGVyIHBhcnNlciwgYW5kIHRoZSBuZXRwb2xsIHNldHVwIGFuZCBzZW5kIHBhdGhzLiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IHRoaXMgbmV3IGFkZHJlc3MgZmFtaWx5IGxvZ2ljIGhhbmRsZXMgYWxsIHRoZSBlZGdlIGNhc2VzIGNvcnJlY3RseS4gV2UncmUgdGFsa2luZyBhYm91dCBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGhlcmUsIHNvIHJvYnVzdCBmdXp6aW5nIGlzIGNydWNpYWwuXG5cbkFscmlnaHQsIEknbSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2Agbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjcxOCwiT3V0cHV0VG9rZW5zIjoyNDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6Mzg6MTguNDMzOTI0NDI3WiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU3ODQyNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVENPTlNPTEVcIixcbiAgICBcIk5FVENPTlNPTEVfRFlOQU1JQ1wiLFxuICAgIFwiSVBWNlwiLFxuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsb2NhbF9pcF9zdG9yZVwiLFxuICAgIFwicmVtb3RlX2lwX3N0b3JlXCIsXG4gICAgXCJlbmFibGVkX3N0b3JlXCIsXG4gICAgXCJuZXRjb25zX25ldHBvbGxfc2V0dXBcIixcbiAgICBcIm5ldHBvbGxfc2VuZF91ZHBcIixcbiAgICBcIm5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVcIixcbiAgICBcIm5ldHBvbGxfcGFyc2VfaXBfYWRkclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRjb25zb2xlIGRyaXZlciB0byB1c2UgYSBuZXcgYHN0cnVjdCBpbmV0X2FkZHJgIHRoYXQgZXhwbGljaXRseSB0cmFja3MgdGhlIElQIGFkZHJlc3MgZmFtaWx5IChBRl9JTkVULCBBRl9JTkVUNiwgb3IgQUZfVU5TUEVDKSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gYSBib29sZWFuIGZsYWcgYW5kIHplcm8tY2hlY2tzLiBUaGlzIGFmZmVjdHMgaG93IGxvY2FsIGFuZCByZW1vdGUgSVAgYWRkcmVzc2VzIGFyZSBwYXJzZWQsIHN0b3JlZCwgYW5kIHVzZWQgZm9yIFVEUCBlbmNhcHN1bGF0aW9uIGluIG5ldHBvbGwuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgbW9kdWxlIHBhcmFtZXRlcnMgYXQgYm9vdC9sb2FkIHRpbWUgYW5kIGR5bmFtaWNhbGx5IHZpYSBjb25maWdmcyBhdHRyaWJ1dGVzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgY29uZmlnZnMgc3RvcmUgY2FsbGJhY2tzLCB0aGUgbW9kdWxlIHBhcmFtZXRlciBwYXJzZXIsIGFuZCB0aGUgbmV0cG9sbCBzZXR1cCBhbmQgc2VuZCBwYXRocyB0byBlbnN1cmUgdGhlIG5ldyBhZGRyZXNzIGZhbWlseSBsb2dpYyBoYW5kbGVzIGFsbCBlZGdlIGNhc2VzIGNvcnJlY3RseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRDT05TT0xFXCIsXG4gICAgXCJORVRDT05TT0xFX0RZTkFNSUNcIixcbiAgICBcIklQVjZcIixcbiAgICBcIkNPTkZJR0ZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibG9jYWxfaXBfc3RvcmVcIixcbiAgICBcInJlbW90ZV9pcF9zdG9yZVwiLFxuICAgIFwiZW5hYmxlZF9zdG9yZVwiLFxuICAgIFwibmV0Y29uc19uZXRwb2xsX3NldHVwXCIsXG4gICAgXCJuZXRwb2xsX3NlbmRfdWRwXCIsXG4gICAgXCJuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lXCIsXG4gICAgXCJuZXRwb2xsX3BhcnNlX2lwX2FkZHJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0Y29uc29sZSBkcml2ZXIgdG8gdXNlIGEgbmV3IGBzdHJ1Y3QgaW5ldF9hZGRyYCB0aGF0IGV4cGxpY2l0bHkgdHJhY2tzIHRoZSBJUCBhZGRyZXNzIGZhbWlseSAoQUZfSU5FVCwgQUZfSU5FVDYsIG9yIEFGX1VOU1BFQykgaW5zdGVhZCBvZiByZWx5aW5nIG9uIGEgYm9vbGVhbiBmbGFnIGFuZCB6ZXJvLWNoZWNrcy4gVGhpcyBhZmZlY3RzIGhvdyBsb2NhbCBhbmQgcmVtb3RlIElQIGFkZHJlc3NlcyBhcmUgcGFyc2VkLCBzdG9yZWQsIGFuZCB1c2VkIGZvciBVRFAgZW5jYXBzdWxhdGlvbiBpbiBuZXRwb2xsLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIG1vZHVsZSBwYXJhbWV0ZXJzIGF0IGJvb3QvbG9hZCB0aW1lIGFuZCBkeW5hbWljYWxseSB2aWEgY29uZmlnZnMgYXR0cmlidXRlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIGNvbmZpZ2ZzIHN0b3JlIGNhbGxiYWNrcywgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgcGFyc2VyLCBhbmQgdGhlIG5ldHBvbGwgc2V0dXAgYW5kIHNlbmQgcGF0aHMgdG8gZW5zdXJlIHRoZSBuZXcgYWRkcmVzcyBmYW1pbHkgbG9naWMgaGFuZGxlcyBhbGwgZWRnZSBjYXNlcyBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow9xb7x[1] Phase: Succeeded StartedAt: 2026-08-05 22:38:29 +0000 UTC FinishedAt: 2026-08-05 22:38:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xb7x[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-05 22:38:29 +0000 UTC FinishedAt: 2026-08-05 22:38:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xb7x[2] Phase: Succeeded StartedAt: 2026-08-05 22:38:29 +0000 UTC FinishedAt: 2026-08-06 02:17:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xb7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netpoll_send_udp","netconsole_parser_cmdline","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"249de7e2-0a54-4d11-b9d8-30d6aad6a6da","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-05 22:38:29 +0000 UTC FinishedAt: 2026-08-06 02:17:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netpoll_send_udp","netconsole_parser_cmdline","netpoll_parse_ip_addr"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"249de7e2-0a54-4d11-b9d8-30d6aad6a6da","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow9xb7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netpoll_send_udp","netconsole_parser_cmdline","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"249de7e2-0a54-4d11-b9d8-30d6aad6a6da","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-05 22:38:29 +0000 UTC FinishedAt: 2026-08-05 22:38:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xb7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netpoll_send_udp","netconsole_parser_cmdline","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"249de7e2-0a54-4d11-b9d8-30d6aad6a6da","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-05 22:38:29 +0000 UTC FinishedAt: 2026-08-05 22:38:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9xb7x/series-workflow9xb7x-convert-artifact-4241534082/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9xb7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netpoll_send_udp","netconsole_parser_cmdline","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"249de7e2-0a54-4d11-b9d8-30d6aad6a6da","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-05 22:38:39 +0000 UTC FinishedAt: 2026-08-05 22:55:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xb7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netpoll_send_udp","netconsole_parser_cmdline","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"249de7e2-0a54-4d11-b9d8-30d6aad6a6da","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-05 22:38:39 +0000 UTC FinishedAt: 2026-08-05 22:55:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*7c835fb2-9a7c-4f9c-91be-4d4a6cec01ad,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9xb7x/series-workflow9xb7x-convert-artifact-4241534082/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "11b07c07-e722-4ebf-956b-77729317e0e1", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9xb7x/series-workflow9xb7x-build-action-1622162240/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9xb7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netpoll_send_udp","netconsole_parser_cmdline","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"249de7e2-0a54-4d11-b9d8-30d6aad6a6da","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-05 22:38:39 +0000 UTC FinishedAt: 2026-08-05 22:54:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*7c835fb2-9a7c-4f9c-91be-4d4a6cec01ad,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9xb7x/series-workflow9xb7x-convert-artifact-4241534082/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "11b07c07-e722-4ebf-956b-77729317e0e1", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9xb7x/series-workflow9xb7x-build-action-1622162240/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9xb7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netpoll_send_udp","netconsole_parser_cmdline","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"249de7e2-0a54-4d11-b9d8-30d6aad6a6da","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-05 22:55:02 +0000 UTC FinishedAt: 2026-08-05 22:55:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xb7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netpoll_send_udp","netconsole_parser_cmdline","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"249de7e2-0a54-4d11-b9d8-30d6aad6a6da","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-05 22:55:02 +0000 UTC FinishedAt: 2026-08-05 22:55:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xb7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netpoll_send_udp","netconsole_parser_cmdline","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"249de7e2-0a54-4d11-b9d8-30d6aad6a6da","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-05 22:55:02 +0000 UTC FinishedAt: 2026-08-05 22:55:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xb7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netpoll_send_udp","netconsole_parser_cmdline","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"249de7e2-0a54-4d11-b9d8-30d6aad6a6da","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-05 22:55:02 +0000 UTC FinishedAt: 2026-08-05 22:55:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"249de7e2-0a54-4d11-b9d8-30d6aad6a6da","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9xb7x/series-workflow9xb7x-convert-artifact-775287261/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9xb7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netpoll_send_udp","netconsole_parser_cmdline","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"249de7e2-0a54-4d11-b9d8-30d6aad6a6da","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-05 22:55:13 +0000 UTC FinishedAt: 2026-08-05 22:57:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xb7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netpoll_send_udp","netconsole_parser_cmdline","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"249de7e2-0a54-4d11-b9d8-30d6aad6a6da","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-05 22:55:13 +0000 UTC FinishedAt: 2026-08-05 22:57:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*11b07c07-e722-4ebf-956b-77729317e0e1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9xb7x/series-workflow9xb7x-build-action-1622162240/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflow9xb7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netpoll_send_udp","netconsole_parser_cmdline","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"249de7e2-0a54-4d11-b9d8-30d6aad6a6da","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-05 22:57:26 +0000 UTC FinishedAt: 2026-08-05 22:57:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xb7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netpoll_send_udp","netconsole_parser_cmdline","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"249de7e2-0a54-4d11-b9d8-30d6aad6a6da","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-05 22:57:26 +0000 UTC FinishedAt: 2026-08-05 22:57:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xb7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netpoll_send_udp","netconsole_parser_cmdline","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"249de7e2-0a54-4d11-b9d8-30d6aad6a6da","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-05 22:57:26 +0000 UTC FinishedAt: 2026-08-05 23:13:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xb7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netpoll_send_udp","netconsole_parser_cmdline","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"249de7e2-0a54-4d11-b9d8-30d6aad6a6da","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-05 22:57:26 +0000 UTC FinishedAt: 2026-08-05 23:13:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*7c835fb2-9a7c-4f9c-91be-4d4a6cec01ad,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9xb7x/series-workflow9xb7x-convert-artifact-775287261/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "fac3d3e5-9624-4623-8b8b-af65b62572db", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9xb7x/series-workflow9xb7x-build-action-1502294713/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9xb7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netpoll_send_udp","netconsole_parser_cmdline","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"249de7e2-0a54-4d11-b9d8-30d6aad6a6da","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-05 22:57:26 +0000 UTC FinishedAt: 2026-08-05 23:13:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*7c835fb2-9a7c-4f9c-91be-4d4a6cec01ad,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9xb7x/series-workflow9xb7x-convert-artifact-775287261/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "fac3d3e5-9624-4623-8b8b-af65b62572db", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9xb7x/series-workflow9xb7x-build-action-1502294713/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9xb7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netpoll_send_udp","netconsole_parser_cmdline","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"249de7e2-0a54-4d11-b9d8-30d6aad6a6da","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-05 23:13:31 +0000 UTC FinishedAt: 2026-08-05 23:13:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xb7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netpoll_send_udp","netconsole_parser_cmdline","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"249de7e2-0a54-4d11-b9d8-30d6aad6a6da","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-05 23:13:31 +0000 UTC FinishedAt: 2026-08-05 23:13:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xb7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netpoll_send_udp","netconsole_parser_cmdline","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"249de7e2-0a54-4d11-b9d8-30d6aad6a6da","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-05 23:13:31 +0000 UTC FinishedAt: 2026-08-05 23:15:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xb7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netpoll_send_udp","netconsole_parser_cmdline","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"249de7e2-0a54-4d11-b9d8-30d6aad6a6da","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-05 23:13:31 +0000 UTC FinishedAt: 2026-08-05 23:15:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fac3d3e5-9624-4623-8b8b-af65b62572db,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9xb7x/series-workflow9xb7x-build-action-1502294713/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflow9xb7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netpoll_send_udp","netconsole_parser_cmdline","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"249de7e2-0a54-4d11-b9d8-30d6aad6a6da","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-05 23:15:21 +0000 UTC FinishedAt: 2026-08-06 02:17:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xb7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netpoll_send_udp","netconsole_parser_cmdline","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"249de7e2-0a54-4d11-b9d8-30d6aad6a6da","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-05 23:15:21 +0000 UTC FinishedAt: 2026-08-06 02:17:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netpoll_send_udp","netconsole_parser_cmdline","netpoll_parse_ip_addr"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*11b07c07-e722-4ebf-956b-77729317e0e1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fac3d3e5-9624-4623-8b8b-af65b62572db,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9xb7x/series-workflow9xb7x-build-action-1622162240/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9xb7x/series-workflow9xb7x-build-action-1502294713/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9xb7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netpoll_send_udp","netconsole_parser_cmdline","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"249de7e2-0a54-4d11-b9d8-30d6aad6a6da","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-05 23:15:21 +0000 UTC FinishedAt: 2026-08-05 23:15:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xb7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netpoll_send_udp","netconsole_parser_cmdline","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"249de7e2-0a54-4d11-b9d8-30d6aad6a6da","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-05 23:15:21 +0000 UTC FinishedAt: 2026-08-05 23:15:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netpoll_send_udp","netconsole_parser_cmdline","netpoll_parse_ip_addr"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9xb7x/series-workflow9xb7x-convert-artifact-3918209890/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9xb7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netpoll_send_udp","netconsole_parser_cmdline","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"249de7e2-0a54-4d11-b9d8-30d6aad6a6da","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-05 23:15:21 +0000 UTC FinishedAt: 2026-08-05 23:15:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xb7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netpoll_send_udp","netconsole_parser_cmdline","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"249de7e2-0a54-4d11-b9d8-30d6aad6a6da","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-05 23:15:21 +0000 UTC FinishedAt: 2026-08-05 23:15:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xb7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netpoll_send_udp","netconsole_parser_cmdline","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"249de7e2-0a54-4d11-b9d8-30d6aad6a6da","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-05 23:15:21 +0000 UTC FinishedAt: 2026-08-05 23:15:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xb7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netpoll_send_udp","netconsole_parser_cmdline","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"249de7e2-0a54-4d11-b9d8-30d6aad6a6da","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-05 23:15:31 +0000 UTC FinishedAt: 2026-08-06 02:17:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xb7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["local_ip_store","remote_ip_store","enabled_store","netcons_netpoll_setup","netpoll_send_udp","netconsole_parser_cmdline","netpoll_parse_ip_addr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","IPV6","CONFIGFS_FS"],"series_id":"249de7e2-0a54-4d11-b9d8-30d6aad6a6da","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-05 23:15:31 +0000 UTC FinishedAt: 2026-08-06 02:16:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*11b07c07-e722-4ebf-956b-77729317e0e1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fac3d3e5-9624-4623-8b8b-af65b62572db,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9xb7x/series-workflow9xb7x-build-action-1622162240/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9xb7x/series-workflow9xb7x-build-action-1502294713/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9xb7x/series-workflow9xb7x-convert-artifact-3918209890/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}