Name: series-workflow6bzl4 Phase: Succeeded StartedAt: 2026-08-12 16:34:46 +0000 UTC FinishedAt: 2026-08-12 20:30:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bzl4[0] Phase: Succeeded StartedAt: 2026-08-12 16:34:46 +0000 UTC FinishedAt: 2026-08-12 16:51:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bzl4[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 16:34:46 +0000 UTC FinishedAt: 2026-08-12 16:51:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "07cb86aa50816b070b99c89bf948762ef035a1f2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET_CLS_BPF", "NET_ACT_BPF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "07cb86aa50816b070b99c89bf948762ef035a1f2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET_CLS_BPF", "NET_ACT_BPF" ], "series_id": "773bf86d-a93d-43a0-b4a4-e84e9b2becf4" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_skb_adjust_room" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQlBGJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfQlBGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3NrYl9hZGp1c3Rfcm9vbSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGZsYWdzIGZvciB0aGUgYGJwZl9za2JfYWRqdXN0X3Jvb21gIEJQRiBoZWxwZXIgdG8gc2VsZWN0aXZlbHkgY2xlYXIgR1NPIHR1bm5lbCBmbGFncyBhbmQgdGhlIGBza2ItXHUwMDNlZW5jYXBzdWxhdGlvbmAgZmxhZyBkdXJpbmcgcGFja2V0IGRlY2Fwc3VsYXRpb24uIFRoZSBjaGFuZ2VzIGNvbnNpc3Qgb2YgYml0d2lzZSBvcGVyYXRpb25zIG9uIGV4aXN0aW5nIGBza2Jfc2hhcmVkX2luZm9gIGZpZWxkcyAoYGdzb190eXBlYCkgYW5kIGBza2JgIGZpZWxkcyAoYGVuY2Fwc3VsYXRpb25gKSwgYXMgd2VsbCBhcyBsZW5ndGggdmFsaWRhdGlvbiBjaGVja3MgdG8gZW5zdXJlIHRoZSBwYWNrZXQgaXMgc2hydW5rIGJ5IGF0IGxlYXN0IHRoZSBzaXplIG9mIHRoZSBkZWNhcHN1bGF0ZWQgaGVhZGVycy5cblxuVGhlc2UgbW9kaWZpY2F0aW9ucyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvIG5vdCBleHBvc2Uga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZSwgYW5kIGRvIG5vdCBpbnZvbHZlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgZHVlIHRvIGluY29ycmVjdCBsZW5ndGggY2FsY3VsYXRpb25zKSB3b3VsZCBiZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG5ldyBmbGFncyB0byB0aGUgYnBmX3NrYl9hZGp1c3Rfcm9vbSBCUEYgaGVscGVyIHRvIGNsZWFyIHR1bm5lbC1zcGVjaWZpYyBHU08gZmxhZ3MgZHVyaW5nIGRlY2Fwc3VsYXRpb24uIFRoaXMgbW9kaWZpZXMgY29yZSBCUEYgbmV0d29ya2luZyBsb2dpYyByZWFjaGFibGUgdmlhIFRDIEJQRiBwcm9ncmFtcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjo0OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY1M2I3NWRiMGQ2NDNlMTU0MGI4ZWE4YjE5YmFjMGIzMjhjY2EwOWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxNjo0OTowMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbmluZGV4IGZmZDk2ZThiOTIwYmQuLjczMmIzNWNjMDhkMWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTMwMzgsOCAmIzQzOzMwMzgsMzQgQEAgdW5pb24gYnBmX2F0dHIge1xuICAqXG4gICpcdFx0KiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQqKixcbiAgKlx0XHQgICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNioqOlxuLSAqXHRcdCAgSW5kaWNhdGUgdGhlIG5ldyBJUCBoZWFkZXIgdmVyc2lvbiBhZnRlciBkZWNhcHN1bGF0aW5nIHRoZSBvdXRlclxuLSAqXHRcdCAgSVAgaGVhZGVyLiBVc2VkIHdoZW4gdGhlIGlubmVyIGFuZCBvdXRlciBJUCB2ZXJzaW9ucyBhcmUgZGlmZmVyZW50LlxuJiM0MzsgKlx0XHQgIEluZGljYXRlIHRoZSBuZXcgSVAgaGVhZGVyIHZlcnNpb24gYWZ0ZXIgZGVjYXBzdWxhdGluZyB0aGVcbiYjNDM7ICpcdFx0ICBvdXRlciBJUCBoZWFkZXIuIFVzZWQgd2hlbiB0aGUgaW5uZXIgYW5kIG91dGVyIElQIHZlcnNpb25zXG4mIzQzOyAqXHRcdCAgYXJlIGRpZmZlcmVudC4gVGhlc2UgZmxhZ3Mgb25seSB0cmlnZ2VyIGEgcHJvdG9jb2wgY2hhbmdlXG4mIzQzOyAqXHRcdCAgd2l0aG91dCBjbGVhcmluZyBhbnkgdHVubmVsLXNwZWNpZmljIEdTTyBmbGFncy5cbiYjNDM7ICpcbiYjNDM7ICpcdFx0KiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRSoqOlxuJiM0MzsgKlx0XHQgIENsZWFyIEdSRSB0dW5uZWwgR1NPIGZsYWdzIChTS0JfR1NPX0dSRSBhbmQgU0tCX0dTT19HUkVfQ1NVTSlcbiYjNDM7ICpcdFx0ICB3aGVuIGRlY2Fwc3VsYXRpbmcgYSBHUkUgdHVubmVsLlxuJiM0MzsgKlxuJiM0MzsgKlx0XHQqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKio6XG4mIzQzOyAqXHRcdCAgQ2xlYXIgVURQIHR1bm5lbCBHU08gZmxhZ3MgKFNLQl9HU09fVURQX1RVTk5FTCBhbmRcbiYjNDM7ICpcdFx0ICBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSkgd2hlbiBkZWNhcHN1bGF0aW5nIGEgVURQIHR1bm5lbC5cbiYjNDM7ICpcbiYjNDM7ICpcdFx0KiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCoqOlxuJiM0MzsgKlx0XHQgIENsZWFyIElQSVAvU0lUIHR1bm5lbCBHU08gZmxhZyAoU0tCX0dTT19JUFhJUDQpIHdoZW4gZGVjYXBzdWxhdGluZ1xuJiM0MzsgKlx0XHQgIGEgdHVubmVsIHdpdGggYW4gb3V0ZXIgSVB2NCBoZWFkZXIgKElQdjQtaW4tSVB2NCBvciBJUHY2LWluLUlQdjQpLlxuJiM0MzsgKlxuJiM0MzsgKlx0XHQqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2Kio6XG4mIzQzOyAqXHRcdCAgQ2xlYXIgSVB2NiBlbmNhcHN1bGF0aW9uIHR1bm5lbCBHU08gZmxhZyAoU0tCX0dTT19JUFhJUDYpIHdoZW5cbiYjNDM7ICpcdFx0ICBkZWNhcHN1bGF0aW5nIGEgdHVubmVsIHdpdGggYW4gb3V0ZXIgSVB2NiBoZWFkZXIgKElQdjYtaW4tSVB2NlxuJiM0MzsgKlx0XHQgIG9yIElQdjQtaW4tSVB2NikuXG4mIzQzOyAqXG4mIzQzOyAqXHRcdFdoZW4gdXNpbmcgdGhlIGRlY2Fwc3VsYXRpb24gZmxhZ3MgYWJvdmUsIHRoZSBza2ItXHUwMDNlZW5jYXBzdWxhdGlvblxuJiM0MzsgKlx0XHRmbGFnIGlzIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCBpZiBhbGwgdHVubmVsLXNwZWNpZmljIEdTTyBmbGFnc1xuJiM0MzsgKlx0XHQoU0tCX0dTT19VRFBfVFVOTkVMLCBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSwgU0tCX0dTT19HUkUsXG4mIzQzOyAqXHRcdFNLQl9HU09fR1JFX0NTVU0sIFNLQl9HU09fSVBYSVA0LCBTS0JfR1NPX0lQWElQNikgaGF2ZSBiZWVuXG4mIzQzOyAqXHRcdHJlbW92ZWQgZnJvbSB0aGUgcGFja2V0LiBUaGlzIGhhbmRsZXMgY2FzZXMgd2hlcmUgYWxsIHR1bm5lbFxuJiM0MzsgKlx0XHRsYXllcnMgaGF2ZSBiZWVuIGRlY2Fwc3VsYXRlZC5cbiAgKlxuICAqIFx0XHRBIGNhbGwgdG8gdGhpcyBoZWxwZXIgaXMgc3VzY2VwdGlibGUgdG8gY2hhbmdlIHRoZSB1bmRlcmx5aW5nXG4gICogXHRcdHBhY2tldCBidWZmZXIuIFRoZXJlZm9yZSwgYXQgbG9hZCB0aW1lLCBhbGwgY2hlY2tzIG9uIHBvaW50ZXJzXG5AQCAtNjI4Myw3ICYjNDM7NjMwOSw3IEBAIGVudW0ge1xuIH07XG4gXG4gLyogQlBGX0ZVTkNfc2tiX2FkanVzdF9yb29tIGZsYWdzLiAqL1xuLWVudW0ge1xuJiM0MztlbnVtIGJwZl9hZGpfcm9vbV9mbGFncyB7XG4gXHRCUEZfRl9BREpfUk9PTV9GSVhFRF9HU09cdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDApLFxuIFx0QlBGX0ZfQURKX1JPT01fRU5DQVBfTDNfSVBWNFx0PSAoMVVMTCBcdTAwM2NcdTAwM2MgMSksXG4gXHRCUEZfRl9BREpfUk9PTV9FTkNBUF9MM19JUFY2XHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyAyKSxcbkBAIC02MjkzLDYgJiM0Mzs2MzE5LDEwIEBAIGVudW0ge1xuIFx0QlBGX0ZfQURKX1JPT01fRU5DQVBfTDJfRVRIXHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyA2KSxcbiBcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjRcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDcpLFxuIFx0QlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNlx0PSAoMVVMTCBcdTAwM2NcdTAwM2MgOCksXG4mIzQzO1x0QlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFXHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyA5KSxcbiYjNDM7XHRCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9VRFBcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDEwKSxcbiYjNDM7XHRCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDRcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDExKSxcbiYjNDM7XHRCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDZcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDEyKSxcbiB9O1xuIFxuIGVudW0ge1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDM0MjM3MzQxMjRhNWIuLjg5ZWZmZmYzYmM1MjUgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC01Niw2ICYjNDM7NTYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9zb2NrX3JldXNlcG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2J1c3lfcG9sbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9ncmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC94ZnJtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdWRwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfdHJhY2UuaFx1MDAzZVxuQEAgLTM1NzIsMTQgJiM0MzszNTczLDI3IEBAIHN0YXRpYyB1MzIgYnBmX3NrYl9uZXRfYmFzZV9sZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAjZGVmaW5lIEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX01BU0tcdChCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0IHwgXFxcbiBcdFx0XHRcdFx0IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjYpXG4gXG4tI2RlZmluZSBCUEZfRl9BREpfUk9PTV9NQVNLXHRcdChCUEZfRl9BREpfUk9PTV9GSVhFRF9HU08gfCBcXFxuLVx0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fRU5DQVBfTDNfTUFTSyB8IFxcXG4mIzQzOyNkZWZpbmUgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTS1x0KEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFKVxuJiM0MztcbiYjNDM7I2RlZmluZSBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLXHQoQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0IHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEJQRl9GX0FESl9ST09NX0VOQ0FQX01BU0tcdChCUEZfRl9BREpfUk9PTV9FTkNBUF9MM19NQVNLIHwgXFxcbiBcdFx0XHRcdFx0IEJQRl9GX0FESl9ST09NX0VOQ0FQX0w0X0dSRSB8IFxcXG4gXHRcdFx0XHRcdCBCUEZfRl9BREpfUk9PTV9FTkNBUF9MNF9VRFAgfCBcXFxuIFx0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fRU5DQVBfTDJfRVRIIHwgXFxcbiBcdFx0XHRcdFx0IEJQRl9GX0FESl9ST09NX0VOQ0FQX0wyKCBcXFxuLVx0XHRcdFx0XHQgIEJQRl9BREpfUk9PTV9FTkNBUF9MMl9NQVNLKSB8IFxcXG4tXHRcdFx0XHRcdCBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19NQVNLKVxuJiM0MztcdFx0XHRcdFx0ICBCUEZfQURKX1JPT01fRU5DQVBfTDJfTUFTSykpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEJQRl9GX0FESl9ST09NX0RFQ0FQX01BU0tcdChCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19NQVNLIHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLIHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKVxuJiM0MztcbiYjNDM7I2RlZmluZSBCUEZfRl9BREpfUk9PTV9NQVNLXHRcdChCUEZfRl9BREpfUk9PTV9GSVhFRF9HU08gfCBcXFxuJiM0MztcdFx0XHRcdFx0IEJQRl9GX0FESl9ST09NX0VOQ0FQX01BU0sgfCBcXFxuJiM0MztcdFx0XHRcdFx0IEJQRl9GX0FESl9ST09NX0RFQ0FQX01BU0sgfCBcXFxuJiM0MztcdFx0XHRcdFx0IEJQRl9GX0FESl9ST09NX05PX0NTVU1fUkVTRVQpXG4gXG4gc3RhdGljIGludCBicGZfc2tiX25ldF9ncm93KHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvZmYsIHUzMiBsZW5fZGlmZixcbiBcdFx0XHQgICAgdTY0IGZsYWdzKVxuQEAgLTM3MDIsOCAmIzQzOzM3MTYsOCBAQCBzdGF0aWMgaW50IGJwZl9za2JfbmV0X3NocmluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgb2ZmLCB1MzIgbGVuX2RpZmYsXG4gXHRib29sIGRlY2FwID0gZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX01BU0s7XG4gXHRpbnQgcmV0O1xuIFxuLVx0aWYgKHVubGlrZWx5KGZsYWdzIFx1MDAyNiB+KEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTyB8XG4tXHRcdFx0ICAgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX01BU0sgfFxuJiM0MztcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgfihCUEZfRl9BREpfUk9PTV9ERUNBUF9NQVNLIHxcbiYjNDM7XHRcdFx0ICAgICAgIEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTyB8XG4gXHRcdFx0ICAgICAgIEJQRl9GX0FESl9ST09NX05PX0NTVU1fUkVTRVQpKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG5AQCAtMzc0MCw5ICYjNDM7Mzc1NCw0OCBAQCBzdGF0aWMgaW50IGJwZl9za2JfbmV0X3NocmluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgb2ZmLCB1MzIgbGVuX2RpZmYsXG4gXHRcdGlmICghKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9GSVhFRF9HU08pKVxuIFx0XHRcdHNrYl9pbmNyZWFzZV9nc29fc2l6ZShzaGluZm8sIGxlbl9kaWZmKTtcbiBcbiYjNDM7XHRcdC8qIFNlbGVjdGl2ZSBHU08gZmxhZyBjbGVhcmluZyBiYXNlZCBvbiBkZWNhcCB0eXBlLlxuJiM0MztcdFx0ICogT25seSBjbGVhciB0aGUgZmxhZ3MgZm9yIHRoZSB0dW5uZWwgbGF5ZXIgYmVpbmcgcmVtb3ZlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAoc2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNiAoU0tCX0dTT19VRFBfVFVOTkVMIHxcbiYjNDM7XHRcdFx0XHRcdCBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSkpKVxuJiM0MztcdFx0XHRzaGluZm8tXHUwMDNlZ3NvX3R5cGUgXHUwMDI2PSB+KFNLQl9HU09fVURQX1RVTk5FTCB8XG4mIzQzO1x0XHRcdFx0XHQgICAgICBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSk7XG4mIzQzO1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIChzaGluZm8tXHUwMDNlZ3NvX3R5cGUgXHUwMDI2IChTS0JfR1NPX0dSRSB8IFNLQl9HU09fR1JFX0NTVU0pKSlcbiYjNDM7XHRcdFx0c2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNj0gfihTS0JfR1NPX0dSRSB8XG4mIzQzO1x0XHRcdFx0XHQgICAgICBTS0JfR1NPX0dSRV9DU1VNKTtcbiYjNDM7XHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgKHNoaW5mby1cdTAwM2Vnc29fdHlwZSBcdTAwMjYgU0tCX0dTT19JUFhJUDQpKVxuJiM0MztcdFx0XHRzaGluZm8tXHUwMDNlZ3NvX3R5cGUgXHUwMDI2PSB+U0tCX0dTT19JUFhJUDQ7XG4mIzQzO1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIChzaGluZm8tXHUwMDNlZ3NvX3R5cGUgXHUwMDI2IFNLQl9HU09fSVBYSVA2KSlcbiYjNDM7XHRcdFx0c2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNj0gflNLQl9HU09fSVBYSVA2O1xuJiM0MztcbiYjNDM7XHRcdC8qIENsZWFyIGVuY2Fwc3VsYXRpb24gZmxhZyBvbmx5IHdoZW4gbm8gdHVubmVsIEdTTyBmbGFncyByZW1haW4gKi9cbiYjNDM7XHRcdGlmIChmbGFncyBcdTAwMjYgKEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X01BU0sgfFxuJiM0MztcdFx0XHQgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0spKSB7XG4mIzQzO1x0XHRcdGlmICghKHNoaW5mby1cdTAwM2Vnc29fdHlwZSBcdTAwMjYgKFNLQl9HU09fVURQX1RVTk5FTCB8XG4mIzQzO1x0XHRcdFx0XHRcdCAgU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0gfFxuJiM0MztcdFx0XHRcdFx0XHQgIFNLQl9HU09fR1JFIHxcbiYjNDM7XHRcdFx0XHRcdFx0ICBTS0JfR1NPX0dSRV9DU1VNIHxcbiYjNDM7XHRcdFx0XHRcdFx0ICBTS0JfR1NPX0lQWElQNCB8XG4mIzQzO1x0XHRcdFx0XHRcdCAgU0tCX0dTT19JUFhJUDYgfFxuJiM0MztcdFx0XHRcdFx0XHQgIFNLQl9HU09fRVNQKSkpXG4mIzQzO1x0XHRcdFx0aWYgKHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uKVxuJiM0MztcdFx0XHRcdFx0c2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24gPSAwO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0LyogSGVhZGVyIG11c3QgYmUgY2hlY2tlZCwgYW5kIGdzb19zZWdzIHJlY29tcHV0ZWQuICovXG4gXHRcdHNoaW5mby1cdTAwM2Vnc29fdHlwZSB8PSBTS0JfR1NPX0RPREdZO1xuIFx0XHRzaGluZm8tXHUwMDNlZ3NvX3NlZ3MgPSAwO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBGb3Igbm9uLUdTTyBwYWNrZXRzLCBjbGVhciBlbmNhcHN1bGF0aW9uIGlmIGRlY2FwIGZsYWdzIGFyZSBzZXQgKi9cbiYjNDM7XHRcdGlmICgoZmxhZ3MgXHUwMDI2IChCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLIHxcbiYjNDM7XHRcdFx0ICAgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTSykpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uKVxuJiM0MztcdFx0XHRza2ItXHUwMDNlZW5jYXBzdWxhdGlvbiA9IDA7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0zODAyLDggJiM0MzszODU1LDcgQEAgQlBGX0NBTExfNChicGZfc2tiX2FkanVzdF9yb29tLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHMzMiwgbGVuX2RpZmYsXG4gXHR1MzIgb2ZmO1xuIFx0aW50IHJldDtcbiBcbi1cdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgfihCUEZfRl9BREpfUk9PTV9NQVNLIHxcbi1cdFx0XHQgICAgICAgQlBGX0ZfQURKX1JPT01fTk9fQ1NVTV9SRVNFVCkpKVxuJiM0MztcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgfkJQRl9GX0FESl9ST09NX01BU0spKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdGlmICh1bmxpa2VseShsZW5fZGlmZl9hYnMgXHUwMDNlIDB4ZmZmVSkpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuQEAgLTM4MjIsMjAgJiM0MzszODc0LDUzIEBAIEJQRl9DQUxMXzQoYnBmX3NrYl9hZGp1c3Rfcm9vbSwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBzMzIsIGxlbl9kaWZmLFxuIFx0XHRyZXR1cm4gLUVOT1RTVVBQO1xuIFx0fVxuIFxuLVx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19NQVNLKSB7XG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9NQVNLKSB7XG4mIzQzO1x0XHR1MzIgbGVuX2RlY2FwX21pbiA9IDA7XG4mIzQzO1xuIFx0XHRpZiAoIXNocmluaylcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdFx0c3dpdGNoIChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSykge1xuLVx0XHRjYXNlIEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQ6XG4mIzQzO1x0XHQvKiBSZWplY3QgbXV0dWFsbHkgZXhjbHVzaXZlIGRlY2FwIGZsYWcgcGFpcnMuICovXG4mIzQzO1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19NQVNLKSA9PVxuJiM0MztcdFx0ICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX01BU0spXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X01BU0spID09XG4mIzQzO1x0XHQgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSylcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTSykgPT1cbiYjNDM7XHRcdCAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBSZWplY3QgbXV0dWFsbHkgZXhjbHVzaXZlIGRlY2FwIHR1bm5lbCB0eXBlIGZsYWdzLiAqL1xuJiM0MztcdFx0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLKVxuJiM0MztcdFx0XHRsZW5fZGVjYXBfbWluICYjNDM7PSBicGZfc2tiX25ldF9iYXNlX2xlbihza2IpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKVxuJiM0MztcdFx0XHRsZW5fZGVjYXBfbWluICYjNDM7PSBzaXplb2Yoc3RydWN0IHVkcGhkcik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUpXG4mIzQzO1x0XHRcdGxlbl9kZWNhcF9taW4gJiM0Mzs9IHNpemVvZihzdHJ1Y3QgZ3JlX2Jhc2VfaGRyKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNClcbiYjNDM7XHRcdFx0bGVuX2RlY2FwX21pbiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcGhkcik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYpXG4mIzQzO1x0XHRcdGxlbl9kZWNhcF9taW4gJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGxlbl9kaWZmX2FicyBcdTAwM2MgbGVuX2RlY2FwX21pbilcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0KVxuIFx0XHRcdGxlbl9taW4gPSBzaXplb2Yoc3RydWN0IGlwaGRyKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY2OlxuJiM0MztcbiYjNDM7XHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNilcbiBcdFx0XHRsZW5fbWluID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0fVxuIFx0fVxuIFxuIFx0bGVuX2N1ciA9IHNrYi1cdTAwM2VsZW4gLSBza2JfbmV0d29ya19vZmZzZXQoc2tiKTtcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbmluZGV4IGZmZDk2ZThiOTIwYmQuLjczMmIzNWNjMDhkMWMgMTAwNjQ0XG4tLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTMwMzgsOCAmIzQzOzMwMzgsMzQgQEAgdW5pb24gYnBmX2F0dHIge1xuICAqXG4gICpcdFx0KiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQqKixcbiAgKlx0XHQgICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNioqOlxuLSAqXHRcdCAgSW5kaWNhdGUgdGhlIG5ldyBJUCBoZWFkZXIgdmVyc2lvbiBhZnRlciBkZWNhcHN1bGF0aW5nIHRoZSBvdXRlclxuLSAqXHRcdCAgSVAgaGVhZGVyLiBVc2VkIHdoZW4gdGhlIGlubmVyIGFuZCBvdXRlciBJUCB2ZXJzaW9ucyBhcmUgZGlmZmVyZW50LlxuJiM0MzsgKlx0XHQgIEluZGljYXRlIHRoZSBuZXcgSVAgaGVhZGVyIHZlcnNpb24gYWZ0ZXIgZGVjYXBzdWxhdGluZyB0aGVcbiYjNDM7ICpcdFx0ICBvdXRlciBJUCBoZWFkZXIuIFVzZWQgd2hlbiB0aGUgaW5uZXIgYW5kIG91dGVyIElQIHZlcnNpb25zXG4mIzQzOyAqXHRcdCAgYXJlIGRpZmZlcmVudC4gVGhlc2UgZmxhZ3Mgb25seSB0cmlnZ2VyIGEgcHJvdG9jb2wgY2hhbmdlXG4mIzQzOyAqXHRcdCAgd2l0aG91dCBjbGVhcmluZyBhbnkgdHVubmVsLXNwZWNpZmljIEdTTyBmbGFncy5cbiYjNDM7ICpcbiYjNDM7ICpcdFx0KiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRSoqOlxuJiM0MzsgKlx0XHQgIENsZWFyIEdSRSB0dW5uZWwgR1NPIGZsYWdzIChTS0JfR1NPX0dSRSBhbmQgU0tCX0dTT19HUkVfQ1NVTSlcbiYjNDM7ICpcdFx0ICB3aGVuIGRlY2Fwc3VsYXRpbmcgYSBHUkUgdHVubmVsLlxuJiM0MzsgKlxuJiM0MzsgKlx0XHQqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKio6XG4mIzQzOyAqXHRcdCAgQ2xlYXIgVURQIHR1bm5lbCBHU08gZmxhZ3MgKFNLQl9HU09fVURQX1RVTk5FTCBhbmRcbiYjNDM7ICpcdFx0ICBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSkgd2hlbiBkZWNhcHN1bGF0aW5nIGEgVURQIHR1bm5lbC5cbiYjNDM7ICpcbiYjNDM7ICpcdFx0KiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCoqOlxuJiM0MzsgKlx0XHQgIENsZWFyIElQSVAvU0lUIHR1bm5lbCBHU08gZmxhZyAoU0tCX0dTT19JUFhJUDQpIHdoZW4gZGVjYXBzdWxhdGluZ1xuJiM0MzsgKlx0XHQgIGEgdHVubmVsIHdpdGggYW4gb3V0ZXIgSVB2NCBoZWFkZXIgKElQdjQtaW4tSVB2NCBvciBJUHY2LWluLUlQdjQpLlxuJiM0MzsgKlxuJiM0MzsgKlx0XHQqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2Kio6XG4mIzQzOyAqXHRcdCAgQ2xlYXIgSVB2NiBlbmNhcHN1bGF0aW9uIHR1bm5lbCBHU08gZmxhZyAoU0tCX0dTT19JUFhJUDYpIHdoZW5cbiYjNDM7ICpcdFx0ICBkZWNhcHN1bGF0aW5nIGEgdHVubmVsIHdpdGggYW4gb3V0ZXIgSVB2NiBoZWFkZXIgKElQdjYtaW4tSVB2NlxuJiM0MzsgKlx0XHQgIG9yIElQdjQtaW4tSVB2NikuXG4mIzQzOyAqXG4mIzQzOyAqXHRcdFdoZW4gdXNpbmcgdGhlIGRlY2Fwc3VsYXRpb24gZmxhZ3MgYWJvdmUsIHRoZSBza2ItXHUwMDNlZW5jYXBzdWxhdGlvblxuJiM0MzsgKlx0XHRmbGFnIGlzIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCBpZiBhbGwgdHVubmVsLXNwZWNpZmljIEdTTyBmbGFnc1xuJiM0MzsgKlx0XHQoU0tCX0dTT19VRFBfVFVOTkVMLCBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSwgU0tCX0dTT19HUkUsXG4mIzQzOyAqXHRcdFNLQl9HU09fR1JFX0NTVU0sIFNLQl9HU09fSVBYSVA0LCBTS0JfR1NPX0lQWElQNikgaGF2ZSBiZWVuXG4mIzQzOyAqXHRcdHJlbW92ZWQgZnJvbSB0aGUgcGFja2V0LiBUaGlzIGhhbmRsZXMgY2FzZXMgd2hlcmUgYWxsIHR1bm5lbFxuJiM0MzsgKlx0XHRsYXllcnMgaGF2ZSBiZWVuIGRlY2Fwc3VsYXRlZC5cbiAgKlxuICAqIFx0XHRBIGNhbGwgdG8gdGhpcyBoZWxwZXIgaXMgc3VzY2VwdGlibGUgdG8gY2hhbmdlIHRoZSB1bmRlcmx5aW5nXG4gICogXHRcdHBhY2tldCBidWZmZXIuIFRoZXJlZm9yZSwgYXQgbG9hZCB0aW1lLCBhbGwgY2hlY2tzIG9uIHBvaW50ZXJzXG5AQCAtNjI4Myw3ICYjNDM7NjMwOSw3IEBAIGVudW0ge1xuIH07XG4gXG4gLyogQlBGX0ZVTkNfc2tiX2FkanVzdF9yb29tIGZsYWdzLiAqL1xuLWVudW0ge1xuJiM0MztlbnVtIGJwZl9hZGpfcm9vbV9mbGFncyB7XG4gXHRCUEZfRl9BREpfUk9PTV9GSVhFRF9HU09cdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDApLFxuIFx0QlBGX0ZfQURKX1JPT01fRU5DQVBfTDNfSVBWNFx0PSAoMVVMTCBcdTAwM2NcdTAwM2MgMSksXG4gXHRCUEZfRl9BREpfUk9PTV9FTkNBUF9MM19JUFY2XHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyAyKSxcbkBAIC02MjkzLDYgJiM0Mzs2MzE5LDEwIEBAIGVudW0ge1xuIFx0QlBGX0ZfQURKX1JPT01fRU5DQVBfTDJfRVRIXHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyA2KSxcbiBcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjRcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDcpLFxuIFx0QlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNlx0PSAoMVVMTCBcdTAwM2NcdTAwM2MgOCksXG4mIzQzO1x0QlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFXHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyA5KSxcbiYjNDM7XHRCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9VRFBcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDEwKSxcbiYjNDM7XHRCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDRcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDExKSxcbiYjNDM7XHRCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDZcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDEyKSxcbiB9O1xuIFxuIGVudW0ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfdGNfdHVubmVsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3RjX3R1bm5lbC5jXG5pbmRleCAxYWE3Yzk0NjM5ODBiLi42N2JhMjdkNjkzNDc0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF90Y190dW5uZWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF90Y190dW5uZWwuY1xuQEAgLTQzOCw3ICYjNDM7NDM4LDYgQEAgc3RhdGljIGludCBzZXR1cCh2b2lkKVxuIFx0U1lTKGZhaWxfY2xvc2VfbnNfY2xpZW50LCBcJiMzNDtpcCBsaW5rIGFkZCAlcyB0eXBlIHZldGggcGVlciBuYW1lICVzXCYjMzQ7LFxuIFx0ICAgIFwmIzM0O3ZldGgxIG10dSAxNTAwIG5ldG5zIFwmIzM0OyBDTElFTlRfTlMgXCYjMzQ7IGFkZHJlc3MgXCYjMzQ7IE1BQ19BRERSX1ZFVEgxLFxuIFx0ICAgIFwmIzM0O3ZldGgyIG10dSAxNTAwIG5ldG5zIFwmIzM0OyBTRVJWRVJfTlMgXCYjMzQ7IGFkZHJlc3MgXCYjMzQ7IE1BQ19BRERSX1ZFVEgyKTtcbi1cdFNZUyhmYWlsX2Nsb3NlX25zX2NsaWVudCwgXCYjMzQ7ZXRodG9vbCAtSyB2ZXRoMSB0c28gb2ZmXCYjMzQ7KTtcbiBcdFNZUyhmYWlsX2Nsb3NlX25zX2NsaWVudCwgXCYjMzQ7aXAgbGluayBzZXQgdmV0aDEgdXBcJiMzNDspO1xuIFx0bnN0b2tlbl9zZXJ2ZXIgPSBvcGVuX25ldG5zKFNFUlZFUl9OUyk7XG4gXHRpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbl9zZXJ2ZXIsIFwmIzM0O29wZW4gc2VydmVyIG5zXCYjMzQ7KSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y190dW5uZWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3R1bm5lbC5jXG5pbmRleCA3Mzc2ZGY0MDVhNmJlLi44NTNiY2E5NjI5MTAzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfdHVubmVsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3R1bm5lbC5jXG5AQCAtNiw2ICYjNDM7Niw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2VuZGlhbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfY29yZV9yZWFkLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDticGZfdHJhY2luZ19uZXQuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2JwZl9jb21waWxlci5oXCYjMzQ7XG4gXG5AQCAtMzcsNiAmIzQzOzM4LDIyIEBAIHN0cnVjdCB2eGxhbmhkcl9fX2xvY2FsIHtcbiBcbiAjZGVmaW5lXHRFWFRQUk9UT19WWExBTlx0MHgxXG4gXG4mIzQzOyNkZWZpbmUgU0tCX0dTT19VRFBfVFVOTkVMX01BU0tcdChTS0JfR1NPX1VEUF9UVU5ORUwgfFx0XHRcdFxcXG4mIzQzO1x0XHRcdFx0IFNLQl9HU09fVURQX1RVTk5FTF9DU1VNKVxuJiM0MztcbiYjNDM7I2RlZmluZSBTS0JfR1NPX1RVTk5FTF9NQVNLXHQoU0tCX0dTT19VRFBfVFVOTkVMX01BU0sgfFx0XHRcXFxuJiM0MztcdFx0XHRcdCBTS0JfR1NPX0dSRSB8XHRcdFx0XHRcXFxuJiM0MztcdFx0XHRcdCBTS0JfR1NPX0dSRV9DU1VNIHxcdFx0XHRcXFxuJiM0MztcdFx0XHRcdCBTS0JfR1NPX0lQWElQNCB8XHRcdFx0XFxcbiYjNDM7XHRcdFx0XHQgU0tCX0dTT19JUFhJUDYgfFx0XHRcdFxcXG4mIzQzO1x0XHRcdFx0IFNLQl9HU09fRVNQKVxuJiM0MztcbiYjNDM7I2RlZmluZSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLXHQoQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQIHxcdFxcXG4mIzQzO1x0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFKVxuJiM0MztcbiYjNDM7I2RlZmluZSBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLXHQoQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0IHxcdFxcXG4mIzQzO1x0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KVxuJiM0MztcbiAjZGVmaW5lXHRWWExBTl9GTEFHUyAgICAgYnBmX2h0b25sKDFcdTAwM2NcdTAwM2MyNylcbiAjZGVmaW5lXHRWTklfSURcdFx0MVxuICNkZWZpbmVcdFZYTEFOX1ZOSVx0YnBmX2h0b25sKFZOSV9JRCBcdTAwM2NcdTAwM2MgOClcbkBAIC01ODksOSAmIzQzOzYwNiwxMiBAQCBpbnQgX19lbmNhcF9pcDZ2eGxhbl9ldGgoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuIFx0XHRyZXR1cm4gVENfQUNUX09LO1xuIH1cbiBcbi1zdGF0aWMgaW50IGRlY2FwX2ludGVybmFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiwgaW50IG9mZiwgaW50IGxlbiwgY2hhciBwcm90bylcbiYjNDM7c3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8sXG4mIzQzO1x0XHRcdCAgX191NjQgaXB4aXBfZmxhZylcbiB7XG4gXHRfX3U2NCBmbGFncyA9IEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTztcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqa3NrYjtcbiYjNDM7XHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm87XG4gXHRzdHJ1Y3QgaXB2Nl9vcHRfaGRyIGlwNl9vcHRfaGRyO1xuIFx0c3RydWN0IGdyZV9oZHIgZ3JlaDtcbiBcdHN0cnVjdCB1ZHBoZHIgdWRwaDtcbkBAIC01OTksMTAgJiM0Mzs2MTksMTIgQEAgc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8pXG4gXG4gXHRzd2l0Y2ggKHByb3RvKSB7XG4gXHRjYXNlIElQUFJPVE9fSVBJUDpcbi1cdFx0ZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNDtcbiYjNDM7XHRcdGZsYWdzIHw9IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQgfFxuJiM0MztcdFx0XHQgaXB4aXBfZmxhZztcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElQUFJPVE9fSVBWNjpcbi1cdFx0ZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNjtcbiYjNDM7XHRcdGZsYWdzIHw9IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjYgfFxuJiM0MztcdFx0XHQgaXB4aXBfZmxhZztcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIE5FWFRIRFJfREVTVDpcbiBcdFx0aWYgKGJwZl9za2JfbG9hZF9ieXRlcyhza2IsIG9mZiAmIzQzOyBsZW4sIFx1MDAyNmlwNl9vcHRfaGRyLFxuQEAgLTYxMCwxMCAmIzQzOzYzMiwxMiBAQCBzdGF0aWMgaW50IGRlY2FwX2ludGVybmFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiwgaW50IG9mZiwgaW50IGxlbiwgY2hhciBwcm90bylcbiBcdFx0XHRyZXR1cm4gVENfQUNUX09LO1xuIFx0XHRzd2l0Y2ggKGlwNl9vcHRfaGRyLm5leHRoZHIpIHtcbiBcdFx0Y2FzZSBJUFBST1RPX0lQSVA6XG4tXHRcdFx0ZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNDtcbiYjNDM7XHRcdFx0ZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNCB8XG4mIzQzO1x0XHRcdFx0IGlweGlwX2ZsYWc7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgSVBQUk9UT19JUFY2OlxuLVx0XHRcdGZsYWdzIHw9IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjY7XG4mIzQzO1x0XHRcdGZsYWdzIHw9IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjYgfFxuJiM0MztcdFx0XHRcdCBpcHhpcF9mbGFnO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdHJldHVybiBUQ19BQ1RfT0s7XG5AQCAtNjIxLDYgJiM0Mzs2NDUsMTEgQEAgc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8pXG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBJUFBST1RPX0dSRTpcbiBcdFx0b2xlbiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBncmVfaGRyKTtcbiYjNDM7XHRcdGlmICghYnBmX2NvcmVfZW51bV92YWx1ZV9leGlzdHMoZW51bSBicGZfYWRqX3Jvb21fZmxhZ3MsXG4mIzQzO1x0XHRcdFx0XHRcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRSkpXG4mIzQzO1x0XHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbiYjNDM7XHRcdGZsYWdzIHw9IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRTtcbiYjNDM7XG4gXHRcdGlmIChicGZfc2tiX2xvYWRfYnl0ZXMoc2tiLCBvZmYgJiM0MzsgbGVuLCBcdTAwMjZncmVoLCBzaXplb2YoZ3JlaCkpIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiBUQ19BQ1RfT0s7XG4gXHRcdHN3aXRjaCAoYnBmX250b2hzKGdyZWgucHJvdG9jb2wpKSB7XG5AQCAtNjM0LDYgJiM0Mzs2NjMsMTAgQEAgc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8pXG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBJUFBST1RPX1VEUDpcbiBcdFx0b2xlbiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuJiM0MztcdFx0aWYgKCFicGZfY29yZV9lbnVtX3ZhbHVlX2V4aXN0cyhlbnVtIGJwZl9hZGpfcm9vbV9mbGFncyxcbiYjNDM7XHRcdFx0XHRcdFx0QlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKSlcbiYjNDM7XHRcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuJiM0MztcdFx0ZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQO1xuIFx0XHRpZiAoYnBmX3NrYl9sb2FkX2J5dGVzKHNrYiwgb2ZmICYjNDM7IGxlbiwgXHUwMDI2dWRwaCwgc2l6ZW9mKHVkcGgpKSBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gVENfQUNUX09LO1xuIFx0XHRzd2l0Y2ggKGJwZl9udG9ocyh1ZHBoLmRlc3QpKSB7XG5AQCAtNjU1LDYgJiM0Mzs2ODgsNDAgQEAgc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8pXG4gXHRpZiAoYnBmX3NrYl9hZGp1c3Rfcm9vbShza2IsIC1vbGVuLCBCUEZfQURKX1JPT01fTUFDLCBmbGFncykpXG4gXHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbiBcbiYjNDM7XHRrc2tiID0gYnBmX2Nhc3RfdG9fa2Vybl9jdHgoc2tiKTtcbiYjNDM7XHRzaGluZm8gPSBicGZfY29yZV9jYXN0KGtza2ItXHUwMDNlaGVhZCAmIzQzOyBrc2tiLVx1MDAzZWVuZCwgc3RydWN0IHNrYl9zaGFyZWRfaW5mbyk7XG4mIzQzO1x0aWYgKHNoaW5mby1cdTAwM2Vnc29fc2l6ZSkge1xuJiM0MztcdFx0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAoc2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNiBTS0JfR1NPX1VEUF9UVU5ORUxfTUFTSykpXG4mIzQzO1x0XHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIChzaGluZm8tXHUwMDNlZ3NvX3R5cGUgXHUwMDI2IChTS0JfR1NPX0dSRSB8IFNLQl9HU09fR1JFX0NTVU0pKSlcbiYjNDM7XHRcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuJiM0MztcbiYjNDM7XHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgKHNoaW5mby1cdTAwM2Vnc29fdHlwZSBcdTAwMjYgU0tCX0dTT19JUFhJUDQpKVxuJiM0MztcdFx0XHRyZXR1cm4gVENfQUNUX1NIT1Q7XG4mIzQzO1xuJiM0MztcdFx0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAoc2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNiBTS0JfR1NPX0lQWElQNikpXG4mIzQzO1x0XHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZmxhZ3MgXHUwMDI2IChCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLIHxcbiYjNDM7XHRcdFx0ICAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKSkge1xuJiM0MztcdFx0XHRpZiAoKHNoaW5mby1cdTAwM2Vnc29fdHlwZSBcdTAwMjYgU0tCX0dTT19UVU5ORUxfTUFTSykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICAha3NrYi1cdTAwM2VlbmNhcHN1bGF0aW9uKVxuJiM0MztcdFx0XHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbiYjNDM7XHRcdFx0aWYgKCEoc2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNiBTS0JfR1NPX1RVTk5FTF9NQVNLKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgIGtza2ItXHUwMDNlZW5jYXBzdWxhdGlvbilcbiYjNDM7XHRcdFx0XHRyZXR1cm4gVENfQUNUX1NIT1Q7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIGlmICgoZmxhZ3MgXHUwMDI2IChCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLIHxcbiYjNDM7XHRcdFx0ICAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICBrc2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24pIHtcbiYjNDM7XHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIFRDX0FDVF9PSztcbiB9XG4gXG5AQCAtNjYyLDYgJiM0Mzs3MjksMTAgQEAgc3RhdGljIGludCBkZWNhcF9pcHY0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiB7XG4gXHRzdHJ1Y3QgaXBoZHIgaXBoX291dGVyO1xuIFxuJiM0MztcdGlmICghYnBmX2NvcmVfZW51bV92YWx1ZV9leGlzdHMoZW51bSBicGZfYWRqX3Jvb21fZmxhZ3MsXG4mIzQzO1x0XHRcdFx0XHRCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDQpKVxuJiM0MztcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuJiM0MztcbiBcdGlmIChicGZfc2tiX2xvYWRfYnl0ZXMoc2tiLCBFVEhfSExFTiwgXHUwMDI2aXBoX291dGVyLFxuIFx0XHRcdCAgICAgICBzaXplb2YoaXBoX291dGVyKSkgXHUwMDNjIDApXG4gXHRcdHJldHVybiBUQ19BQ1RfT0s7XG5AQCAtNjcwLDE5ICYjNDM7NzQxLDI1IEBAIHN0YXRpYyBpbnQgZGVjYXBfaXB2NChzdHJ1Y3QgX19za19idWZmICpza2IpXG4gXHRcdHJldHVybiBUQ19BQ1RfT0s7XG4gXG4gXHRyZXR1cm4gZGVjYXBfaW50ZXJuYWwoc2tiLCBFVEhfSExFTiwgc2l6ZW9mKGlwaF9vdXRlciksXG4tXHRcdFx0ICAgICAgaXBoX291dGVyLnByb3RvY29sKTtcbiYjNDM7XHRcdFx0ICAgICAgaXBoX291dGVyLnByb3RvY29sLFxuJiM0MztcdFx0XHQgICAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDQpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGRlY2FwX2lwdjYoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHN0cnVjdCBpcHY2aGRyIGlwaF9vdXRlcjtcbiBcbiYjNDM7XHRpZiAoIWJwZl9jb3JlX2VudW1fdmFsdWVfZXhpc3RzKGVudW0gYnBmX2Fkal9yb29tX2ZsYWdzLFxuJiM0MztcdFx0XHRcdFx0QlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KSlcbiYjNDM7XHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbiYjNDM7XG4gXHRpZiAoYnBmX3NrYl9sb2FkX2J5dGVzKHNrYiwgRVRIX0hMRU4sIFx1MDAyNmlwaF9vdXRlcixcbiBcdFx0XHQgICAgICAgc2l6ZW9mKGlwaF9vdXRlcikpIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gVENfQUNUX09LO1xuIFxuIFx0cmV0dXJuIGRlY2FwX2ludGVybmFsKHNrYiwgRVRIX0hMRU4sIHNpemVvZihpcGhfb3V0ZXIpLFxuLVx0XHRcdCAgICAgIGlwaF9vdXRlci5uZXh0aGRyKTtcbiYjNDM7XHRcdFx0ICAgICAgaXBoX291dGVyLm5leHRoZHIsXG4mIzQzO1x0XHRcdCAgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNik7XG4gfVxuIFxuIFNFQyhcJiMzNDt0Y1wmIzM0OylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TkVUX0NMU19CUEYmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9CUEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc2tiX2FkanVzdF9yb29tJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbmV3IGZsYWdzIHRvIHRoZSBicGZfc2tiX2FkanVzdF9yb29tIEJQRiBoZWxwZXIgdG8gY2xlYXIgdHVubmVsLXNwZWNpZmljIEdTTyBmbGFncyBkdXJpbmcgZGVjYXBzdWxhdGlvbi4gVGhpcyBtb2RpZmllcyBjb3JlIEJQRiBuZXR3b3JraW5nIGxvZ2ljIHJlYWNoYWJsZSB2aWEgVEMgQlBGIHByb2dyYW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjUzYjc1ZGIwZDY0M2UxNTQwYjhlYThiMTliYWMwYjMyOGNjYTA5ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDE2OjQ5OjAwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCmluZGV4IGZmZDk2ZThiOTIwYmQuLjczMmIzNWNjMDhkMWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKQEAgLTMwMzgsOCAmIzQzOzMwMzgsMzQgQEAgdW5pb24gYnBmX2F0dHIgewogICoKICAqCQkqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNCoqLAogICoJCSAgKipCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY2Kio6Ci0gKgkJICBJbmRpY2F0ZSB0aGUgbmV3IElQIGhlYWRlciB2ZXJzaW9uIGFmdGVyIGRlY2Fwc3VsYXRpbmcgdGhlIG91dGVyCi0gKgkJICBJUCBoZWFkZXIuIFVzZWQgd2hlbiB0aGUgaW5uZXIgYW5kIG91dGVyIElQIHZlcnNpb25zIGFyZSBkaWZmZXJlbnQuCiYjNDM7ICoJCSAgSW5kaWNhdGUgdGhlIG5ldyBJUCBoZWFkZXIgdmVyc2lvbiBhZnRlciBkZWNhcHN1bGF0aW5nIHRoZQomIzQzOyAqCQkgIG91dGVyIElQIGhlYWRlci4gVXNlZCB3aGVuIHRoZSBpbm5lciBhbmQgb3V0ZXIgSVAgdmVyc2lvbnMKJiM0MzsgKgkJICBhcmUgZGlmZmVyZW50LiBUaGVzZSBmbGFncyBvbmx5IHRyaWdnZXIgYSBwcm90b2NvbCBjaGFuZ2UKJiM0MzsgKgkJICB3aXRob3V0IGNsZWFyaW5nIGFueSB0dW5uZWwtc3BlY2lmaWMgR1NPIGZsYWdzLgomIzQzOyAqCiYjNDM7ICoJCSogKipCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUqKjoKJiM0MzsgKgkJICBDbGVhciBHUkUgdHVubmVsIEdTTyBmbGFncyAoU0tCX0dTT19HUkUgYW5kIFNLQl9HU09fR1JFX0NTVU0pCiYjNDM7ICoJCSAgd2hlbiBkZWNhcHN1bGF0aW5nIGEgR1JFIHR1bm5lbC4KJiM0MzsgKgomIzQzOyAqCQkqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKio6CiYjNDM7ICoJCSAgQ2xlYXIgVURQIHR1bm5lbCBHU08gZmxhZ3MgKFNLQl9HU09fVURQX1RVTk5FTCBhbmQKJiM0MzsgKgkJICBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSkgd2hlbiBkZWNhcHN1bGF0aW5nIGEgVURQIHR1bm5lbC4KJiM0MzsgKgomIzQzOyAqCQkqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0Kio6CiYjNDM7ICoJCSAgQ2xlYXIgSVBJUC9TSVQgdHVubmVsIEdTTyBmbGFnIChTS0JfR1NPX0lQWElQNCkgd2hlbiBkZWNhcHN1bGF0aW5nCiYjNDM7ICoJCSAgYSB0dW5uZWwgd2l0aCBhbiBvdXRlciBJUHY0IGhlYWRlciAoSVB2NC1pbi1JUHY0IG9yIElQdjYtaW4tSVB2NCkuCiYjNDM7ICoKJiM0MzsgKgkJKiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNioqOgomIzQzOyAqCQkgIENsZWFyIElQdjYgZW5jYXBzdWxhdGlvbiB0dW5uZWwgR1NPIGZsYWcgKFNLQl9HU09fSVBYSVA2KSB3aGVuCiYjNDM7ICoJCSAgZGVjYXBzdWxhdGluZyBhIHR1bm5lbCB3aXRoIGFuIG91dGVyIElQdjYgaGVhZGVyIChJUHY2LWluLUlQdjYKJiM0MzsgKgkJICBvciBJUHY0LWluLUlQdjYpLgomIzQzOyAqCiYjNDM7ICoJCVdoZW4gdXNpbmcgdGhlIGRlY2Fwc3VsYXRpb24gZmxhZ3MgYWJvdmUsIHRoZSBza2ItJmd0O2VuY2Fwc3VsYXRpb24KJiM0MzsgKgkJZmxhZyBpcyBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgaWYgYWxsIHR1bm5lbC1zcGVjaWZpYyBHU08gZmxhZ3MKJiM0MzsgKgkJKFNLQl9HU09fVURQX1RVTk5FTCwgU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0sIFNLQl9HU09fR1JFLAomIzQzOyAqCQlTS0JfR1NPX0dSRV9DU1VNLCBTS0JfR1NPX0lQWElQNCwgU0tCX0dTT19JUFhJUDYpIGhhdmUgYmVlbgomIzQzOyAqCQlyZW1vdmVkIGZyb20gdGhlIHBhY2tldC4gVGhpcyBoYW5kbGVzIGNhc2VzIHdoZXJlIGFsbCB0dW5uZWwKJiM0MzsgKgkJbGF5ZXJzIGhhdmUgYmVlbiBkZWNhcHN1bGF0ZWQuCiAgKgogICogCQlBIGNhbGwgdG8gdGhpcyBoZWxwZXIgaXMgc3VzY2VwdGlibGUgdG8gY2hhbmdlIHRoZSB1bmRlcmx5aW5nCiAgKiAJCXBhY2tldCBidWZmZXIuIFRoZXJlZm9yZSwgYXQgbG9hZCB0aW1lLCBhbGwgY2hlY2tzIG9uIHBvaW50ZXJzCkBAIC02MjgzLDcgJiM0Mzs2MzA5LDcgQEAgZW51bSB7CiB9OwogCiAvKiBCUEZfRlVOQ19za2JfYWRqdXN0X3Jvb20gZmxhZ3MuICovCi1lbnVtIHsKJiM0MztlbnVtIGJwZl9hZGpfcm9vbV9mbGFncyB7CiAJQlBGX0ZfQURKX1JPT01fRklYRURfR1NPCT0gKDFVTEwgJmx0OyZsdDsgMCksCiAJQlBGX0ZfQURKX1JPT01fRU5DQVBfTDNfSVBWNAk9ICgxVUxMICZsdDsmbHQ7IDEpLAogCUJQRl9GX0FESl9ST09NX0VOQ0FQX0wzX0lQVjYJPSAoMVVMTCAmbHQ7Jmx0OyAyKSwKQEAgLTYyOTMsNiAmIzQzOzYzMTksMTAgQEAgZW51bSB7CiAJQlBGX0ZfQURKX1JPT01fRU5DQVBfTDJfRVRICT0gKDFVTEwgJmx0OyZsdDsgNiksCiAJQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNAk9ICgxVUxMICZsdDsmbHQ7IDcpLAogCUJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjYJPSAoMVVMTCAmbHQ7Jmx0OyA4KSwKJiM0MzsJQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFCT0gKDFVTEwgJmx0OyZsdDsgOSksCiYjNDM7CUJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUAk9ICgxVUxMICZsdDsmbHQ7IDEwKSwKJiM0MzsJQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0CT0gKDFVTEwgJmx0OyZsdDsgMTEpLAomIzQzOwlCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYJPSAoMVVMTCAmbHQ7Jmx0OyAxMiksCiB9OwogCiBlbnVtIHsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmMKaW5kZXggMzQyMzczNDEyNGE1Yi4uODllZmZmZjNiYzUyNSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZmlsdGVyLmMKQEAgLTU2LDYgJiM0Mzs1Niw3IEBACiAjaW5jbHVkZSAmbHQ7bmV0L3NvY2tfcmV1c2Vwb3J0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2J1c3lfcG9sbC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC90Y3AuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L2dyZS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC94ZnJtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3VkcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JwZl90cmFjZS5oJmd0OwpAQCAtMzU3MiwxNCAmIzQzOzM1NzMsMjcgQEAgc3RhdGljIHUzMiBicGZfc2tiX25ldF9iYXNlX2xlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogI2RlZmluZSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19NQVNLCShCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0IHwgXAogCQkJCQkgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNikKIAotI2RlZmluZSBCUEZfRl9BREpfUk9PTV9NQVNLCQkoQlBGX0ZfQURKX1JPT01fRklYRURfR1NPIHwgXAotCQkJCQkgQlBGX0ZfQURKX1JPT01fRU5DQVBfTDNfTUFTSyB8IFwKJiM0MzsjZGVmaW5lIEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X01BU0sJKEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCB8IFwKJiM0MzsJCQkJCSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUpCiYjNDM7CiYjNDM7I2RlZmluZSBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLCShCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDQgfCBcCiYjNDM7CQkJCQkgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KQomIzQzOwomIzQzOyNkZWZpbmUgQlBGX0ZfQURKX1JPT01fRU5DQVBfTUFTSwkoQlBGX0ZfQURKX1JPT01fRU5DQVBfTDNfTUFTSyB8IFwKIAkJCQkJIEJQRl9GX0FESl9ST09NX0VOQ0FQX0w0X0dSRSB8IFwKIAkJCQkJIEJQRl9GX0FESl9ST09NX0VOQ0FQX0w0X1VEUCB8IFwKIAkJCQkJIEJQRl9GX0FESl9ST09NX0VOQ0FQX0wyX0VUSCB8IFwKIAkJCQkJIEJQRl9GX0FESl9ST09NX0VOQ0FQX0wyKCBcCi0JCQkJCSAgQlBGX0FESl9ST09NX0VOQ0FQX0wyX01BU0spIHwgXAotCQkJCQkgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSykKJiM0MzsJCQkJCSAgQlBGX0FESl9ST09NX0VOQ0FQX0wyX01BU0spKQomIzQzOwomIzQzOyNkZWZpbmUgQlBGX0ZfQURKX1JPT01fREVDQVBfTUFTSwkoQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSyB8IFwKJiM0MzsJCQkJCSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLIHwgXAomIzQzOwkJCQkJIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0spCiYjNDM7CiYjNDM7I2RlZmluZSBCUEZfRl9BREpfUk9PTV9NQVNLCQkoQlBGX0ZfQURKX1JPT01fRklYRURfR1NPIHwgXAomIzQzOwkJCQkJIEJQRl9GX0FESl9ST09NX0VOQ0FQX01BU0sgfCBcCiYjNDM7CQkJCQkgQlBGX0ZfQURKX1JPT01fREVDQVBfTUFTSyB8IFwKJiM0MzsJCQkJCSBCUEZfRl9BREpfUk9PTV9OT19DU1VNX1JFU0VUKQogCiBzdGF0aWMgaW50IGJwZl9za2JfbmV0X2dyb3coc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG9mZiwgdTMyIGxlbl9kaWZmLAogCQkJICAgIHU2NCBmbGFncykKQEAgLTM3MDIsOCAmIzQzOzM3MTYsOCBAQCBzdGF0aWMgaW50IGJwZl9za2JfbmV0X3NocmluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgb2ZmLCB1MzIgbGVuX2RpZmYsCiAJYm9vbCBkZWNhcCA9IGZsYWdzICZhbXA7IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX01BU0s7CiAJaW50IHJldDsKIAotCWlmICh1bmxpa2VseShmbGFncyAmYW1wOyB+KEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTyB8Ci0JCQkgICAgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSyB8CiYjNDM7CWlmICh1bmxpa2VseShmbGFncyAmYW1wOyB+KEJQRl9GX0FESl9ST09NX0RFQ0FQX01BU0sgfAomIzQzOwkJCSAgICAgICBCUEZfRl9BREpfUk9PTV9GSVhFRF9HU08gfAogCQkJICAgICAgIEJQRl9GX0FESl9ST09NX05PX0NTVU1fUkVTRVQpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTM3NDAsOSAmIzQzOzM3NTQsNDggQEAgc3RhdGljIGludCBicGZfc2tiX25ldF9zaHJpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG9mZiwgdTMyIGxlbl9kaWZmLAogCQlpZiAoIShmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9GSVhFRF9HU08pKQogCQkJc2tiX2luY3JlYXNlX2dzb19zaXplKHNoaW5mbywgbGVuX2RpZmYpOwogCiYjNDM7CQkvKiBTZWxlY3RpdmUgR1NPIGZsYWcgY2xlYXJpbmcgYmFzZWQgb24gZGVjYXAgdHlwZS4KJiM0MzsJCSAqIE9ubHkgY2xlYXIgdGhlIGZsYWdzIGZvciB0aGUgdHVubmVsIGxheWVyIGJlaW5nIHJlbW92ZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICgoZmxhZ3MgJmFtcDsgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKHNoaW5mby0mZ3Q7Z3NvX3R5cGUgJmFtcDsgKFNLQl9HU09fVURQX1RVTk5FTCB8CiYjNDM7CQkJCQkgU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0pKSkKJiM0MzsJCQlzaGluZm8tJmd0O2dzb190eXBlICZhbXA7PSB+KFNLQl9HU09fVURQX1RVTk5FTCB8CiYjNDM7CQkJCQkgICAgICBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSk7CiYjNDM7CQlpZiAoKGZsYWdzICZhbXA7IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRSkgJmFtcDsmYW1wOwomIzQzOwkJICAgIChzaGluZm8tJmd0O2dzb190eXBlICZhbXA7IChTS0JfR1NPX0dSRSB8IFNLQl9HU09fR1JFX0NTVU0pKSkKJiM0MzsJCQlzaGluZm8tJmd0O2dzb190eXBlICZhbXA7PSB+KFNLQl9HU09fR1JFIHwKJiM0MzsJCQkJCSAgICAgIFNLQl9HU09fR1JFX0NTVU0pOwomIzQzOwkJaWYgKChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDQpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoc2hpbmZvLSZndDtnc29fdHlwZSAmYW1wOyBTS0JfR1NPX0lQWElQNCkpCiYjNDM7CQkJc2hpbmZvLSZndDtnc29fdHlwZSAmYW1wOz0gflNLQl9HU09fSVBYSVA0OwomIzQzOwkJaWYgKChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoc2hpbmZvLSZndDtnc29fdHlwZSAmYW1wOyBTS0JfR1NPX0lQWElQNikpCiYjNDM7CQkJc2hpbmZvLSZndDtnc29fdHlwZSAmYW1wOz0gflNLQl9HU09fSVBYSVA2OwomIzQzOwomIzQzOwkJLyogQ2xlYXIgZW5jYXBzdWxhdGlvbiBmbGFnIG9ubHkgd2hlbiBubyB0dW5uZWwgR1NPIGZsYWdzIHJlbWFpbiAqLwomIzQzOwkJaWYgKGZsYWdzICZhbXA7IChCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLIHwKJiM0MzsJCQkgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0spKSB7CiYjNDM7CQkJaWYgKCEoc2hpbmZvLSZndDtnc29fdHlwZSAmYW1wOyAoU0tCX0dTT19VRFBfVFVOTkVMIHwKJiM0MzsJCQkJCQkgIFNLQl9HU09fVURQX1RVTk5FTF9DU1VNIHwKJiM0MzsJCQkJCQkgIFNLQl9HU09fR1JFIHwKJiM0MzsJCQkJCQkgIFNLQl9HU09fR1JFX0NTVU0gfAomIzQzOwkJCQkJCSAgU0tCX0dTT19JUFhJUDQgfAomIzQzOwkJCQkJCSAgU0tCX0dTT19JUFhJUDYgfAomIzQzOwkJCQkJCSAgU0tCX0dTT19FU1ApKSkKJiM0MzsJCQkJaWYgKHNrYi0mZ3Q7ZW5jYXBzdWxhdGlvbikKJiM0MzsJCQkJCXNrYi0mZ3Q7ZW5jYXBzdWxhdGlvbiA9IDA7CiYjNDM7CQl9CiYjNDM7CiAJCS8qIEhlYWRlciBtdXN0IGJlIGNoZWNrZWQsIGFuZCBnc29fc2VncyByZWNvbXB1dGVkLiAqLwogCQlzaGluZm8tJmd0O2dzb190eXBlIHw9IFNLQl9HU09fRE9ER1k7CiAJCXNoaW5mby0mZ3Q7Z3NvX3NlZ3MgPSAwOwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogRm9yIG5vbi1HU08gcGFja2V0cywgY2xlYXIgZW5jYXBzdWxhdGlvbiBpZiBkZWNhcCBmbGFncyBhcmUgc2V0ICovCiYjNDM7CQlpZiAoKGZsYWdzICZhbXA7IChCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLIHwKJiM0MzsJCQkgICAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKSkgJmFtcDsmYW1wOwomIzQzOwkJICAgIHNrYi0mZ3Q7ZW5jYXBzdWxhdGlvbikKJiM0MzsJCQlza2ItJmd0O2VuY2Fwc3VsYXRpb24gPSAwOwogCX0KIAogCXJldHVybiAwOwpAQCAtMzgwMiw4ICYjNDM7Mzg1NSw3IEBAIEJQRl9DQUxMXzQoYnBmX3NrYl9hZGp1c3Rfcm9vbSwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBzMzIsIGxlbl9kaWZmLAogCXUzMiBvZmY7CiAJaW50IHJldDsKIAotCWlmICh1bmxpa2VseShmbGFncyAmYW1wOyB+KEJQRl9GX0FESl9ST09NX01BU0sgfAotCQkJICAgICAgIEJQRl9GX0FESl9ST09NX05PX0NTVU1fUkVTRVQpKSkKJiM0MzsJaWYgKHVubGlrZWx5KGZsYWdzICZhbXA7IH5CUEZfRl9BREpfUk9PTV9NQVNLKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKHVubGlrZWx5KGxlbl9kaWZmX2FicyAmZ3Q7IDB4ZmZmVSkpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMzgyMiwyMCAmIzQzOzM4NzQsNTMgQEAgQlBGX0NBTExfNChicGZfc2tiX2FkanVzdF9yb29tLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHMzMiwgbGVuX2RpZmYsCiAJCXJldHVybiAtRU5PVFNVUFA7CiAJfQogCi0JaWYgKGZsYWdzICZhbXA7IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX01BU0spIHsKJiM0MzsJaWYgKGZsYWdzICZhbXA7IEJQRl9GX0FESl9ST09NX0RFQ0FQX01BU0spIHsKJiM0MzsJCXUzMiBsZW5fZGVjYXBfbWluID0gMDsKJiM0MzsKIAkJaWYgKCFzaHJpbmspCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlzd2l0Y2ggKGZsYWdzICZhbXA7IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX01BU0spIHsKLQkJY2FzZSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0OgomIzQzOwkJLyogUmVqZWN0IG11dHVhbGx5IGV4Y2x1c2l2ZSBkZWNhcCBmbGFnIHBhaXJzLiAqLwomIzQzOwkJaWYgKChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19NQVNLKSA9PQomIzQzOwkJICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX01BU0spCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQlpZiAoKGZsYWdzICZhbXA7IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X01BU0spID09CiYjNDM7CQkgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSykKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCWlmICgoZmxhZ3MgJmFtcDsgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTSykgPT0KJiM0MzsJCSAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJLyogUmVqZWN0IG11dHVhbGx5IGV4Y2x1c2l2ZSBkZWNhcCB0dW5uZWwgdHlwZSBmbGFncy4gKi8KJiM0MzsJCWlmICgoZmxhZ3MgJmFtcDsgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSykgJmFtcDsmYW1wOwomIzQzOwkJICAgIChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCWlmIChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLKQomIzQzOwkJCWxlbl9kZWNhcF9taW4gJiM0Mzs9IGJwZl9za2JfbmV0X2Jhc2VfbGVuKHNrYik7CiYjNDM7CiYjNDM7CQlpZiAoZmxhZ3MgJmFtcDsgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKQomIzQzOwkJCWxlbl9kZWNhcF9taW4gJiM0Mzs9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKJiM0MzsKJiM0MzsJCWlmIChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUpCiYjNDM7CQkJbGVuX2RlY2FwX21pbiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBncmVfYmFzZV9oZHIpOwomIzQzOwomIzQzOwkJaWYgKGZsYWdzICZhbXA7IEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCkKJiM0MzsJCQlsZW5fZGVjYXBfbWluICYjNDM7PSBzaXplb2Yoc3RydWN0IGlwaGRyKTsKJiM0MzsKJiM0MzsJCWlmIChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYpCiYjNDM7CQkJbGVuX2RlY2FwX21pbiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKJiM0MzsKJiM0MzsJCWlmIChsZW5fZGlmZl9hYnMgJmx0OyBsZW5fZGVjYXBfbWluKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJaWYgKGZsYWdzICZhbXA7IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQpCiAJCQlsZW5fbWluID0gc2l6ZW9mKHN0cnVjdCBpcGhkcik7Ci0JCQlicmVhazsKLQkJY2FzZSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY2OgomIzQzOwomIzQzOwkJaWYgKGZsYWdzICZhbXA7IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjYpCiAJCQlsZW5fbWluID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KIAl9CiAKIAlsZW5fY3VyID0gc2tiLSZndDtsZW4gLSBza2JfbmV0d29ya19vZmZzZXQoc2tiKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaAppbmRleCBmZmQ5NmU4YjkyMGJkLi43MzJiMzVjYzA4ZDFjIDEwMDY0NAotLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCkBAIC0zMDM4LDggJiM0MzszMDM4LDM0IEBAIHVuaW9uIGJwZl9hdHRyIHsKICAqCiAgKgkJKiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQqKiwKICAqCQkgICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNioqOgotICoJCSAgSW5kaWNhdGUgdGhlIG5ldyBJUCBoZWFkZXIgdmVyc2lvbiBhZnRlciBkZWNhcHN1bGF0aW5nIHRoZSBvdXRlcgotICoJCSAgSVAgaGVhZGVyLiBVc2VkIHdoZW4gdGhlIGlubmVyIGFuZCBvdXRlciBJUCB2ZXJzaW9ucyBhcmUgZGlmZmVyZW50LgomIzQzOyAqCQkgIEluZGljYXRlIHRoZSBuZXcgSVAgaGVhZGVyIHZlcnNpb24gYWZ0ZXIgZGVjYXBzdWxhdGluZyB0aGUKJiM0MzsgKgkJICBvdXRlciBJUCBoZWFkZXIuIFVzZWQgd2hlbiB0aGUgaW5uZXIgYW5kIG91dGVyIElQIHZlcnNpb25zCiYjNDM7ICoJCSAgYXJlIGRpZmZlcmVudC4gVGhlc2UgZmxhZ3Mgb25seSB0cmlnZ2VyIGEgcHJvdG9jb2wgY2hhbmdlCiYjNDM7ICoJCSAgd2l0aG91dCBjbGVhcmluZyBhbnkgdHVubmVsLXNwZWNpZmljIEdTTyBmbGFncy4KJiM0MzsgKgomIzQzOyAqCQkqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFKio6CiYjNDM7ICoJCSAgQ2xlYXIgR1JFIHR1bm5lbCBHU08gZmxhZ3MgKFNLQl9HU09fR1JFIGFuZCBTS0JfR1NPX0dSRV9DU1VNKQomIzQzOyAqCQkgIHdoZW4gZGVjYXBzdWxhdGluZyBhIEdSRSB0dW5uZWwuCiYjNDM7ICoKJiM0MzsgKgkJKiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCoqOgomIzQzOyAqCQkgIENsZWFyIFVEUCB0dW5uZWwgR1NPIGZsYWdzIChTS0JfR1NPX1VEUF9UVU5ORUwgYW5kCiYjNDM7ICoJCSAgU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0pIHdoZW4gZGVjYXBzdWxhdGluZyBhIFVEUCB0dW5uZWwuCiYjNDM7ICoKJiM0MzsgKgkJKiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCoqOgomIzQzOyAqCQkgIENsZWFyIElQSVAvU0lUIHR1bm5lbCBHU08gZmxhZyAoU0tCX0dTT19JUFhJUDQpIHdoZW4gZGVjYXBzdWxhdGluZwomIzQzOyAqCQkgIGEgdHVubmVsIHdpdGggYW4gb3V0ZXIgSVB2NCBoZWFkZXIgKElQdjQtaW4tSVB2NCBvciBJUHY2LWluLUlQdjQpLgomIzQzOyAqCiYjNDM7ICoJCSogKipCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYqKjoKJiM0MzsgKgkJICBDbGVhciBJUHY2IGVuY2Fwc3VsYXRpb24gdHVubmVsIEdTTyBmbGFnIChTS0JfR1NPX0lQWElQNikgd2hlbgomIzQzOyAqCQkgIGRlY2Fwc3VsYXRpbmcgYSB0dW5uZWwgd2l0aCBhbiBvdXRlciBJUHY2IGhlYWRlciAoSVB2Ni1pbi1JUHY2CiYjNDM7ICoJCSAgb3IgSVB2NC1pbi1JUHY2KS4KJiM0MzsgKgomIzQzOyAqCQlXaGVuIHVzaW5nIHRoZSBkZWNhcHN1bGF0aW9uIGZsYWdzIGFib3ZlLCB0aGUgc2tiLSZndDtlbmNhcHN1bGF0aW9uCiYjNDM7ICoJCWZsYWcgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkIGlmIGFsbCB0dW5uZWwtc3BlY2lmaWMgR1NPIGZsYWdzCiYjNDM7ICoJCShTS0JfR1NPX1VEUF9UVU5ORUwsIFNLQl9HU09fVURQX1RVTk5FTF9DU1VNLCBTS0JfR1NPX0dSRSwKJiM0MzsgKgkJU0tCX0dTT19HUkVfQ1NVTSwgU0tCX0dTT19JUFhJUDQsIFNLQl9HU09fSVBYSVA2KSBoYXZlIGJlZW4KJiM0MzsgKgkJcmVtb3ZlZCBmcm9tIHRoZSBwYWNrZXQuIFRoaXMgaGFuZGxlcyBjYXNlcyB3aGVyZSBhbGwgdHVubmVsCiYjNDM7ICoJCWxheWVycyBoYXZlIGJlZW4gZGVjYXBzdWxhdGVkLgogICoKICAqIAkJQSBjYWxsIHRvIHRoaXMgaGVscGVyIGlzIHN1c2NlcHRpYmxlIHRvIGNoYW5nZSB0aGUgdW5kZXJseWluZwogICogCQlwYWNrZXQgYnVmZmVyLiBUaGVyZWZvcmUsIGF0IGxvYWQgdGltZSwgYWxsIGNoZWNrcyBvbiBwb2ludGVycwpAQCAtNjI4Myw3ICYjNDM7NjMwOSw3IEBAIGVudW0gewogfTsKIAogLyogQlBGX0ZVTkNfc2tiX2FkanVzdF9yb29tIGZsYWdzLiAqLwotZW51bSB7CiYjNDM7ZW51bSBicGZfYWRqX3Jvb21fZmxhZ3MgewogCUJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTwk9ICgxVUxMICZsdDsmbHQ7IDApLAogCUJQRl9GX0FESl9ST09NX0VOQ0FQX0wzX0lQVjQJPSAoMVVMTCAmbHQ7Jmx0OyAxKSwKIAlCUEZfRl9BREpfUk9PTV9FTkNBUF9MM19JUFY2CT0gKDFVTEwgJmx0OyZsdDsgMiksCkBAIC02MjkzLDYgJiM0Mzs2MzE5LDEwIEBAIGVudW0gewogCUJQRl9GX0FESl9ST09NX0VOQ0FQX0wyX0VUSAk9ICgxVUxMICZsdDsmbHQ7IDYpLAogCUJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQJPSAoMVVMTCAmbHQ7Jmx0OyA3KSwKIAlCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY2CT0gKDFVTEwgJmx0OyZsdDsgOCksCiYjNDM7CUJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRQk9ICgxVUxMICZsdDsmbHQ7IDkpLAomIzQzOwlCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9VRFAJPSAoMVVMTCAmbHQ7Jmx0OyAxMCksCiYjNDM7CUJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNAk9ICgxVUxMICZsdDsmbHQ7IDExKSwKJiM0MzsJQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2CT0gKDFVTEwgJmx0OyZsdDsgMTIpLAogfTsKIAogZW51bSB7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3RjX3R1bm5lbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF90Y190dW5uZWwuYwppbmRleCAxYWE3Yzk0NjM5ODBiLi42N2JhMjdkNjkzNDc0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3RjX3R1bm5lbC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfdGNfdHVubmVsLmMKQEAgLTQzOCw3ICYjNDM7NDM4LDYgQEAgc3RhdGljIGludCBzZXR1cCh2b2lkKQogCVNZUyhmYWlsX2Nsb3NlX25zX2NsaWVudCwgJiMzNDtpcCBsaW5rIGFkZCAlcyB0eXBlIHZldGggcGVlciBuYW1lICVzJiMzNDssCiAJICAgICYjMzQ7dmV0aDEgbXR1IDE1MDAgbmV0bnMgJiMzNDsgQ0xJRU5UX05TICYjMzQ7IGFkZHJlc3MgJiMzNDsgTUFDX0FERFJfVkVUSDEsCiAJICAgICYjMzQ7dmV0aDIgbXR1IDE1MDAgbmV0bnMgJiMzNDsgU0VSVkVSX05TICYjMzQ7IGFkZHJlc3MgJiMzNDsgTUFDX0FERFJfVkVUSDIpOwotCVNZUyhmYWlsX2Nsb3NlX25zX2NsaWVudCwgJiMzNDtldGh0b29sIC1LIHZldGgxIHRzbyBvZmYmIzM0Oyk7CiAJU1lTKGZhaWxfY2xvc2VfbnNfY2xpZW50LCAmIzM0O2lwIGxpbmsgc2V0IHZldGgxIHVwJiMzNDspOwogCW5zdG9rZW5fc2VydmVyID0gb3Blbl9uZXRucyhTRVJWRVJfTlMpOwogCWlmICghQVNTRVJUX09LX1BUUihuc3Rva2VuX3NlcnZlciwgJiMzNDtvcGVuIHNlcnZlciBucyYjMzQ7KSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3R1bm5lbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfdHVubmVsLmMKaW5kZXggNzM3NmRmNDA1YTZiZS4uODUzYmNhOTYyOTEwMyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfdHVubmVsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfdHVubmVsLmMKQEAgLTYsNiAmIzQzOzYsNyBAQAogCiAjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YnBmL2JwZl9lbmRpYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9jb3JlX3JlYWQuaCZndDsKICNpbmNsdWRlICYjMzQ7YnBmX3RyYWNpbmdfbmV0LmgmIzM0OwogI2luY2x1ZGUgJiMzNDticGZfY29tcGlsZXIuaCYjMzQ7CiAKQEAgLTM3LDYgJiM0MzszOCwyMiBAQCBzdHJ1Y3QgdnhsYW5oZHJfX19sb2NhbCB7CiAKICNkZWZpbmUJRVhUUFJPVE9fVlhMQU4JMHgxCiAKJiM0MzsjZGVmaW5lIFNLQl9HU09fVURQX1RVTk5FTF9NQVNLCShTS0JfR1NPX1VEUF9UVU5ORUwgfAkJCVwKJiM0MzsJCQkJIFNLQl9HU09fVURQX1RVTk5FTF9DU1VNKQomIzQzOwomIzQzOyNkZWZpbmUgU0tCX0dTT19UVU5ORUxfTUFTSwkoU0tCX0dTT19VRFBfVFVOTkVMX01BU0sgfAkJXAomIzQzOwkJCQkgU0tCX0dTT19HUkUgfAkJCQlcCiYjNDM7CQkJCSBTS0JfR1NPX0dSRV9DU1VNIHwJCQlcCiYjNDM7CQkJCSBTS0JfR1NPX0lQWElQNCB8CQkJXAomIzQzOwkJCQkgU0tCX0dTT19JUFhJUDYgfAkJCVwKJiM0MzsJCQkJIFNLQl9HU09fRVNQKQomIzQzOwomIzQzOyNkZWZpbmUgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSwkoQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQIHwJXAomIzQzOwkJCQkJIEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRSkKJiM0MzsKJiM0MzsjZGVmaW5lIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0sJKEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCB8CVwKJiM0MzsJCQkJCSBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYpCiYjNDM7CiAjZGVmaW5lCVZYTEFOX0ZMQUdTICAgICBicGZfaHRvbmwoMSZsdDsmbHQ7MjcpCiAjZGVmaW5lCVZOSV9JRAkJMQogI2RlZmluZQlWWExBTl9WTkkJYnBmX2h0b25sKFZOSV9JRCAmbHQ7Jmx0OyA4KQpAQCAtNTg5LDkgJiM0Mzs2MDYsMTIgQEAgaW50IF9fZW5jYXBfaXA2dnhsYW5fZXRoKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKIAkJcmV0dXJuIFRDX0FDVF9PSzsKIH0KIAotc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8pCiYjNDM7c3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8sCiYjNDM7CQkJICBfX3U2NCBpcHhpcF9mbGFnKQogewogCV9fdTY0IGZsYWdzID0gQlBGX0ZfQURKX1JPT01fRklYRURfR1NPOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqa3NrYjsKJiM0MzsJc3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2hpbmZvOwogCXN0cnVjdCBpcHY2X29wdF9oZHIgaXA2X29wdF9oZHI7CiAJc3RydWN0IGdyZV9oZHIgZ3JlaDsKIAlzdHJ1Y3QgdWRwaGRyIHVkcGg7CkBAIC01OTksMTAgJiM0Mzs2MTksMTIgQEAgc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8pCiAKIAlzd2l0Y2ggKHByb3RvKSB7CiAJY2FzZSBJUFBST1RPX0lQSVA6Ci0JCWZsYWdzIHw9IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQ7CiYjNDM7CQlmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0IHwKJiM0MzsJCQkgaXB4aXBfZmxhZzsKIAkJYnJlYWs7CiAJY2FzZSBJUFBST1RPX0lQVjY6Ci0JCWZsYWdzIHw9IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjY7CiYjNDM7CQlmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY2IHwKJiM0MzsJCQkgaXB4aXBfZmxhZzsKIAkJYnJlYWs7CiAJY2FzZSBORVhUSERSX0RFU1Q6CiAJCWlmIChicGZfc2tiX2xvYWRfYnl0ZXMoc2tiLCBvZmYgJiM0MzsgbGVuLCAmYW1wO2lwNl9vcHRfaGRyLApAQCAtNjEwLDEwICYjNDM7NjMyLDEyIEBAIHN0YXRpYyBpbnQgZGVjYXBfaW50ZXJuYWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiLCBpbnQgb2ZmLCBpbnQgbGVuLCBjaGFyIHByb3RvKQogCQkJcmV0dXJuIFRDX0FDVF9PSzsKIAkJc3dpdGNoIChpcDZfb3B0X2hkci5uZXh0aGRyKSB7CiAJCWNhc2UgSVBQUk9UT19JUElQOgotCQkJZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNDsKJiM0MzsJCQlmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0IHwKJiM0MzsJCQkJIGlweGlwX2ZsYWc7CiAJCQlicmVhazsKIAkJY2FzZSBJUFBST1RPX0lQVjY6Ci0JCQlmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY2OwomIzQzOwkJCWZsYWdzIHw9IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjYgfAomIzQzOwkJCQkgaXB4aXBfZmxhZzsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcmV0dXJuIFRDX0FDVF9PSzsKQEAgLTYyMSw2ICYjNDM7NjQ1LDExIEBAIHN0YXRpYyBpbnQgZGVjYXBfaW50ZXJuYWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiLCBpbnQgb2ZmLCBpbnQgbGVuLCBjaGFyIHByb3RvKQogCQlicmVhazsKIAljYXNlIElQUFJPVE9fR1JFOgogCQlvbGVuICYjNDM7PSBzaXplb2Yoc3RydWN0IGdyZV9oZHIpOwomIzQzOwkJaWYgKCFicGZfY29yZV9lbnVtX3ZhbHVlX2V4aXN0cyhlbnVtIGJwZl9hZGpfcm9vbV9mbGFncywKJiM0MzsJCQkJCQlCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUpKQomIzQzOwkJCXJldHVybiBUQ19BQ1RfU0hPVDsKJiM0MzsJCWZsYWdzIHw9IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRTsKJiM0MzsKIAkJaWYgKGJwZl9za2JfbG9hZF9ieXRlcyhza2IsIG9mZiAmIzQzOyBsZW4sICZhbXA7Z3JlaCwgc2l6ZW9mKGdyZWgpKSAmbHQ7IDApCiAJCQlyZXR1cm4gVENfQUNUX09LOwogCQlzd2l0Y2ggKGJwZl9udG9ocyhncmVoLnByb3RvY29sKSkgewpAQCAtNjM0LDYgJiM0Mzs2NjMsMTAgQEAgc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8pCiAJCWJyZWFrOwogCWNhc2UgSVBQUk9UT19VRFA6CiAJCW9sZW4gJiM0Mzs9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKJiM0MzsJCWlmICghYnBmX2NvcmVfZW51bV92YWx1ZV9leGlzdHMoZW51bSBicGZfYWRqX3Jvb21fZmxhZ3MsCiYjNDM7CQkJCQkJQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKSkKJiM0MzsJCQlyZXR1cm4gVENfQUNUX1NIT1Q7CiYjNDM7CQlmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9VRFA7CiAJCWlmIChicGZfc2tiX2xvYWRfYnl0ZXMoc2tiLCBvZmYgJiM0MzsgbGVuLCAmYW1wO3VkcGgsIHNpemVvZih1ZHBoKSkgJmx0OyAwKQogCQkJcmV0dXJuIFRDX0FDVF9PSzsKIAkJc3dpdGNoIChicGZfbnRvaHModWRwaC5kZXN0KSkgewpAQCAtNjU1LDYgJiM0Mzs2ODgsNDAgQEAgc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8pCiAJaWYgKGJwZl9za2JfYWRqdXN0X3Jvb20oc2tiLCAtb2xlbiwgQlBGX0FESl9ST09NX01BQywgZmxhZ3MpKQogCQlyZXR1cm4gVENfQUNUX1NIT1Q7CiAKJiM0MzsJa3NrYiA9IGJwZl9jYXN0X3RvX2tlcm5fY3R4KHNrYik7CiYjNDM7CXNoaW5mbyA9IGJwZl9jb3JlX2Nhc3Qoa3NrYi0mZ3Q7aGVhZCAmIzQzOyBrc2tiLSZndDtlbmQsIHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pOwomIzQzOwlpZiAoc2hpbmZvLSZndDtnc29fc2l6ZSkgewomIzQzOwkJaWYgKChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9VRFApICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoc2hpbmZvLSZndDtnc29fdHlwZSAmYW1wOyBTS0JfR1NPX1VEUF9UVU5ORUxfTUFTSykpCiYjNDM7CQkJcmV0dXJuIFRDX0FDVF9TSE9UOwomIzQzOwomIzQzOwkJaWYgKChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoc2hpbmZvLSZndDtnc29fdHlwZSAmYW1wOyAoU0tCX0dTT19HUkUgfCBTS0JfR1NPX0dSRV9DU1VNKSkpCiYjNDM7CQkJcmV0dXJuIFRDX0FDVF9TSE9UOwomIzQzOwomIzQzOwkJaWYgKChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDQpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoc2hpbmZvLSZndDtnc29fdHlwZSAmYW1wOyBTS0JfR1NPX0lQWElQNCkpCiYjNDM7CQkJcmV0dXJuIFRDX0FDVF9TSE9UOwomIzQzOwomIzQzOwkJaWYgKChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoc2hpbmZvLSZndDtnc29fdHlwZSAmYW1wOyBTS0JfR1NPX0lQWElQNikpCiYjNDM7CQkJcmV0dXJuIFRDX0FDVF9TSE9UOwomIzQzOwomIzQzOwkJaWYgKGZsYWdzICZhbXA7IChCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLIHwKJiM0MzsJCQkgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0spKSB7CiYjNDM7CQkJaWYgKChzaGluZm8tJmd0O2dzb190eXBlICZhbXA7IFNLQl9HU09fVFVOTkVMX01BU0spICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgIWtza2ItJmd0O2VuY2Fwc3VsYXRpb24pCiYjNDM7CQkJCXJldHVybiBUQ19BQ1RfU0hPVDsKJiM0MzsJCQlpZiAoIShzaGluZm8tJmd0O2dzb190eXBlICZhbXA7IFNLQl9HU09fVFVOTkVMX01BU0spICZhbXA7JmFtcDsKJiM0MzsJCQkgICAga3NrYi0mZ3Q7ZW5jYXBzdWxhdGlvbikKJiM0MzsJCQkJcmV0dXJuIFRDX0FDVF9TSE9UOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgaWYgKChmbGFncyAmYW1wOyAoQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSyB8CiYjNDM7CQkJICAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKSkgJmFtcDsmYW1wOwomIzQzOwkJICAga3NrYi0mZ3Q7ZW5jYXBzdWxhdGlvbikgewomIzQzOwkJcmV0dXJuIFRDX0FDVF9TSE9UOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIFRDX0FDVF9PSzsKIH0KIApAQCAtNjYyLDYgJiM0Mzs3MjksMTAgQEAgc3RhdGljIGludCBkZWNhcF9pcHY0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaXBoZHIgaXBoX291dGVyOwogCiYjNDM7CWlmICghYnBmX2NvcmVfZW51bV92YWx1ZV9leGlzdHMoZW51bSBicGZfYWRqX3Jvb21fZmxhZ3MsCiYjNDM7CQkJCQlCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDQpKQomIzQzOwkJcmV0dXJuIFRDX0FDVF9TSE9UOwomIzQzOwogCWlmIChicGZfc2tiX2xvYWRfYnl0ZXMoc2tiLCBFVEhfSExFTiwgJmFtcDtpcGhfb3V0ZXIsCiAJCQkgICAgICAgc2l6ZW9mKGlwaF9vdXRlcikpICZsdDsgMCkKIAkJcmV0dXJuIFRDX0FDVF9PSzsKQEAgLTY3MCwxOSAmIzQzOzc0MSwyNSBAQCBzdGF0aWMgaW50IGRlY2FwX2lwdjQoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQogCQlyZXR1cm4gVENfQUNUX09LOwogCiAJcmV0dXJuIGRlY2FwX2ludGVybmFsKHNrYiwgRVRIX0hMRU4sIHNpemVvZihpcGhfb3V0ZXIpLAotCQkJICAgICAgaXBoX291dGVyLnByb3RvY29sKTsKJiM0MzsJCQkgICAgICBpcGhfb3V0ZXIucHJvdG9jb2wsCiYjNDM7CQkJICAgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0KTsKIH0KIAogc3RhdGljIGludCBkZWNhcF9pcHY2KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaXB2NmhkciBpcGhfb3V0ZXI7CiAKJiM0MzsJaWYgKCFicGZfY29yZV9lbnVtX3ZhbHVlX2V4aXN0cyhlbnVtIGJwZl9hZGpfcm9vbV9mbGFncywKJiM0MzsJCQkJCUJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNikpCiYjNDM7CQlyZXR1cm4gVENfQUNUX1NIT1Q7CiYjNDM7CiAJaWYgKGJwZl9za2JfbG9hZF9ieXRlcyhza2IsIEVUSF9ITEVOLCAmYW1wO2lwaF9vdXRlciwKIAkJCSAgICAgICBzaXplb2YoaXBoX291dGVyKSkgJmx0OyAwKQogCQlyZXR1cm4gVENfQUNUX09LOwogCiAJcmV0dXJuIGRlY2FwX2ludGVybmFsKHNrYiwgRVRIX0hMRU4sIHNpemVvZihpcGhfb3V0ZXIpLAotCQkJICAgICAgaXBoX291dGVyLm5leHRoZHIpOwomIzQzOwkJCSAgICAgIGlwaF9vdXRlci5uZXh0aGRyLAomIzQzOwkJCSAgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNik7CiB9CiAKIFNFQygmIzM0O3RjJiMzNDspCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjI5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldyBCUEYgUGF0Y2gqKgoKT2theSwgc28gd2UgaGF2ZSB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBzb21lIG5ldyBmbGFncyBmb3IgYGJwZl9za2JfYWRqdXN0X3Jvb21gOiBgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFYCwgYEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUGAsIGBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDRgLCBhbmQgYEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNmAuIEl0IHNlZW1zIHRoZXNlIGFyZSBzcGVjaWZpY2FsbHkgZm9yIGNsZWFyaW5nIHR1bm5lbC1yZWxhdGVkIEdTTyBmbGFncyBkdXJpbmcgZGVjYXBzdWxhdGlvbi4gU3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgdGhlIGdvYWwgaXMgY2xlYXIuCgpUaGUgcGF0Y2ggdG91Y2hlcyBgYnBmX3NrYl9uZXRfc2hyaW5rYCBhbmQgYGJwZl9za2JfYWRqdXN0X3Jvb21gIHdpdGhpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBUaGF0JiMzOTtzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgQlBGIG5ldHdvcmtpbmcgY29yZSwgd2hpY2ggaW5zdGFudGx5IHJhaXNlcyBhIGZsYWcuIEl0JiMzOTtzIGRlZmluaXRlbHkgaW4gYSBob3QgcGF0aCBhbmQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFdlIGFic29sdXRlbHkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyByb2NrIHNvbGlkLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBleGFjdCBjYWxsIHBvaW50cy4gYGJwZl9za2JfYWRqdXN0X3Jvb21gIGlzIGEgQlBGIGhlbHBlciwgc28gaXQmIzM5O3MgaW52b2tlZCBieSBCUEYgcHJvZ3JhbXMsIHdoaWNoIG1lYW5zIHRoZSBoZWxwZXIgZnVuY3Rpb24gaXRzZWxmLCBpLmUuLCBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgKEJQRl9DQUxMXzQpLCBpcyB0aGUgdGFyZ2V0LiBIYW5nIG9uLCBhcmVuJiMzOTt0IEJQRiBoZWxwZXJzIHVzdWFsbHkgZGVjbGFyZWQgc3RhdGljYWxseSBvciB2aWEgbWFjcm9zPyBHb29kIHByYWN0aWNlIHNheXMgY2hlY2sgdGhlIHNvdXJjZS4gSSBuZWVkIHRvIGJlIHN1cmUgd2hlcmUgYGJwZl9za2JfYWRqdXN0X3Jvb21gIGlzIGFjdHVhbGx5IGRlZmluZWQgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc2tiX2FkanVzdF9yb29tJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MjA5Mz1CUEZfQ0FMTF8yKGJwZl9jc3VtX2xldmVsLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHU2NCwgbGV2ZWwpXG5uZXQvY29yZS9maWx0ZXIuYy0yMDk0LXtcbm5ldC9jb3JlL2ZpbHRlci5jOjIwOTU6XHQvKiBUaGUgaW50ZXJmYWNlIGlzIHRvIGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBicGZfc2tiX2FkanVzdF9yb29tKClcbm5ldC9jb3JlL2ZpbHRlci5jLTIwOTYtXHQgKiBmb3IgZW5jYXAvZGVjYXAgb2YgcGFja2V0IGhlYWRlcnMgd2hlbiBCUEZfRl9BREpfUk9PTV9OT19DU1VNX1JFU0VUXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MzgzNz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIHNrX3NrYl9hZGp1c3Rfcm9vbV9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0zODQ2LVxubmV0L2NvcmUvZmlsdGVyLmM6Mzg0NzpCUEZfQ0FMTF80KGJwZl9za2JfYWRqdXN0X3Jvb20sIHN0cnVjdCBza19idWZmICosIHNrYiwgczMyLCBsZW5fZGlmZixcbm5ldC9jb3JlL2ZpbHRlci5jLTM4NDgtXHQgICB1MzIsIG1vZGUsIHU2NCwgZmxhZ3MpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzk0MS1cbm5ldC9jb3JlL2ZpbHRlci5jOjM5NDI6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2FkanVzdF9yb29tX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6Mzk0MzpcdC5mdW5jXHRcdD0gYnBmX3NrYl9hZGp1c3Rfcm9vbSxcbm5ldC9jb3JlL2ZpbHRlci5jLTM5NDQtXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODYzNj10Y19jbHNfYWN0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODY2OS1cdGNhc2UgQlBGX0ZVTkNfc2tiX2FkanVzdF9yb29tOlxubmV0L2NvcmUvZmlsdGVyLmM6ODY3MDpcdFx0cmV0dXJuIFx1MDAyNmJwZl9za2JfYWRqdXN0X3Jvb21fcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYy04NjcxLVx0Y2FzZSBCUEZfRlVOQ19za2JfY2hhbmdlX3RhaWw6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MDUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gdGhlIGBicGZfc2tiX2FkanVzdF9yb29tYCBGdW5jdGlvbioqCgpSaWdodCwgc28gSSBzZWUgYSBmdW5jdGlvbiBkZWZpbml0aW9uOiBgQlBGX0NBTExfNChicGZfc2tiX2FkanVzdF9yb29tLCAuLi4pYC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIE5vdywga25vd2luZyBob3cgdGhpbmdzIGFyZSBpbiB0aGUga2VybmVsLCB0aGUgYWN0dWFsIGV4cG9ydGVkIHN5bWJvbCBJJiMzOTttIGxpa2VseSB0byBzZWUgd2hlbiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIHNvdXJjZSBjb2RlIG1pZ2h0IGJlIGBfX19fYnBmX3NrYl9hZGp1c3Rfcm9vbWAgb3IganVzdCBwbGFpbiBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAuIFRoZSBuYW1pbmcgY29udmVudGlvbnMgYXJlIHVzdWFsbHkgZmFpcmx5IHByZWRpY3RhYmxlLCBzbyB0aGF0JiMzOTtzIGEgZ29vZCBhc3N1bXB0aW9uIHRvIGhhdmUuCgpUaGUgbmV4dCBsb2dpY2FsIHN0ZXAsIGJlZm9yZSBJIGRpZyBhbnkgZGVlcGVyIGludG8gdGhlIGZ1bmN0aW9uIGl0c2VsZiwgaXMgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIGNoZWNrIGV4YWN0bHkgKmhvdyogYEJQRl9DQUxMXzRgIGlzIGRlZmluZWQuIFVuZGVyc3RhbmRpbmcgdGhhdCBtYWNybyB3aWxsIGdpdmUgbWUgdml0YWwgY29udGV4dDogd2hhdCBpdCBleHBhbmRzIHRvLCBob3cgdGhlIGFyZ3VtZW50cyBhcmUgcGFzc2VkLCBhbmQgdWx0aW1hdGVseSBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgQlBGIGluZnJhc3RydWN0dXJlLiBLbm93aW5nIHRoZSBtYWNybyBkZWZpbml0aW9uIGlzIGtleSB0byB1bnBhY2tpbmcgdGhlIHdob2xlIHRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmaW5lIEJQRl9DQUxMXzQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc1MQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwmIzM5O3MgQlBGIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IG15IGJlYXJpbmdzLiBHaXZlbiB3aGF0IEkmIzM5O20gd29ya2luZyBvbiwgSSBrbm93IHRoZSBjcnVjaWFsIGRlZmluaXRpb25zIGFuZCBzdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gQmVya2VsZXkgUGFja2V0IEZpbHRlciAoQlBGKSBhcmUgZ29pbmcgdG8gYmUgaW4gb25lIG9mIHR3byBwbGFjZXMsIG1vc3QgbGlrZWx5LiBNeSBmaXJzdCBzdG9wIGhhcyB0byBiZSBlaXRoZXIgYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgIG9yLCBwZXJoYXBzIG1vcmUgZGlyZWN0bHksIGBpbmNsdWRlL2xpbnV4L2JwZi5oYC4gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aG9zZSBoZWFkZXJzLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCB0cmVhc3VyZXMgYXdhaXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmaW5lIEJQRl9DQUxMXzQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTQwOT1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX2F0b21pY19pc19sb2FkX2FjcShjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02NTgtI2RlZmluZSBCUEZfQ0FMTF8zKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMywgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2NTk6I2RlZmluZSBCUEZfQ0FMTF80KG5hbWUsIC4uLilcdEJQRl9DQUxMX3goNCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02NjAtI2RlZmluZSBCUEZfQ0FMTF81KG5hbWUsIC4uLilcdEJQRl9DQUxMX3goNSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTEzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgJiMzNDtMZXQmIzM5O3Mgc2VlIGBCUEZfQ0FMTF94YCwmIzM0OyBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBhbiBleHBlcnQgaW4gYSByZWxldmFudCBmaWVsZCAoYXNzdW1pbmcgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgQlBGIGluIGEgbmV0d29ya2luZyBvciBzeXN0ZW1zIGNvbnRleHQpOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIENvcmUqKgoKUmlnaHQsIGBCUEZfQ0FMTF94YC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIEJQRiBoZWxwZXIgZnVuY3Rpb24gY2FsbC4gVGhlIGBCUEZfQ0FMTF9gIHByZWZpeCBpcyBhIGRlYWQgZ2l2ZWF3YXkuIFRoZSAmIzM0O3gmIzM0OyBpcyB0aGUgY3J1Y2lhbCBwYXJ0LCBvZiBjb3Vyc2UuIEl0IHNpZ25pZmllcyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBzcGVjaWZpYyBoZWxwZXIsIGxpa2VseSBvbmUgdGhhdCYjMzk7cyBiZWVuIGNvbXBpbGVkIGluLgoKTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgcnVubmluZyB0aHJvdWdoIHRoZSBwb3NzaWJpbGl0aWVzLiBXaGF0JiMzOTtzIHRoZSBjb250ZXh0PyBXaGF0JiMzOTtzIHRoZSBwcm9ncmFtIHR5cGU/IElzIHRoaXMgYSB0cmFjZXBvaW50LCBhIHNvY2tldCBmaWx0ZXIsIGEgWERQIHByb2dyYW0sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgdHlwZSBvZiBwcm9ncmFtIHdpbGwgZ3JlYXRseSBpbmZsdWVuY2UgdGhlIGF2YWlsYWJsZSBoZWxwZXIgZnVuY3Rpb25zIGFuZCB0aGUgcmVnaXN0ZXJzIEkgaGF2ZSBhdCBteSBkaXNwb3NhbC4KCkkmIzM5O20gcHJvYmFibHkgZ29pbmcgdG8gbmVlZCB0byBsb29rIHVwIGBCUEZfQ0FMTF94YCBpbiB0aGUga2VybmVsIGRvY3VtZW50YXRpb24gb3IgdGhlIHJlbGV2YW50IGhlYWRlcnMgdG8gbmFpbCBkb3duIHRoZSBleGFjdCBmdW5jdGlvbi4gS25vd2luZyAqd2hpY2gqIGBCUEZfQ0FMTF9gIHdlJiMzOTtyZSBsb29raW5nIGF0IGlzIHRoZSBrZXkuIFRoZSAqeCogdGVsbHMgbWUgd2hpY2ggb25lIHRvIGNoZWNrLCBhbmQgYWxzbyB3aGF0IGFyZ3VtZW50cyBpdCB0YWtlcywgYW5kIHdoYXQgaXRzIHJldHVybiB2YWx1ZSBpcy4gSXMgaXQgYSBoZWxwZXIgZm9yIHJlYWRpbmcgYSBwYWNrZXQmIzM5O3MgbWV0YWRhdGEsIG1hbmlwdWxhdGluZyBhIHNvY2tldCwgYWNjZXNzaW5nIGEgdXNlciBzcGFjZSBkYXRhIHN0cnVjdHVyZSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/CgpJJiMzOTtsbCBiZSB0aGlua2luZyBhYm91dCBwb3NzaWJsZSBlZGdlIGNhc2VzLiBEb2VzIGl0IGhhdmUgYW55IGVycm9yIGNvZGVzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSByZXR1cm4gdmFsdWU/IElzIGl0IHNhZmUgdG8gY2FsbCB0aGlzIGhlbHBlciBmcm9tIHdoZXJlIHRoaXMgcHJvZ3JhbSBpcyBydW5uaW5nPyBJZiBpdCBpcyBhIHRyYWNlcG9pbnQsIGhvdyBpcyBpdCBkZWFsaW5nIHdpdGggY29uY3VycmVuY3kgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnM/IElzIGl0IHN1YmplY3QgdG8gcHJpdmlsZWdlIGlzc3Vlcz8KCkFsc28sIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IGNvbmNlcm5zPyBXaGF0IGFyZSB0aGUgaW5wdXRzLCBhbmQgYXJlIHRoZXkgc2FuaXRpemVkPyBDYW4gaXQgYmUgZXhwbG9pdGVkIGluIHNvbWUgd2F5PyBXaGF0JiMzOTtzIHRoZSBpbXBhY3Qgb24gcGVyZm9ybWFuY2U/IEkmIzM5O2xsIGJlIHdhbnRpbmcgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgQlBGX0NBTExfeGAgYWZmZWN0cyB0aGUgb3ZlcmFsbCBCUEYgcHJvZ3JhbSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBrZXJuZWwgYW5kIHRoZSBzdXJyb3VuZGluZyBlbnZpcm9ubWVudC4gU28gbWFueSBkZXRhaWxzIHRvIHF1aWNrbHkgcmVjYWxsIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgQlBGX0NBTExfeCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9maWx0ZXIuaD00MDk9c3RhdGljIGlubGluZSBib29sIGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjQxLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2NDI6I2RlZmluZSBCUEZfQ0FMTF94KHgsIGF0dHIsIG5hbWUsIC4uLilcdFx0XHRcdFx0ICAgICAgIFxcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTY0My1cdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcdFx0XHRcdFx0XHQgICAgICAgXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3MjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipCUEYgRnVuY3Rpb24gUG9pbnRlciBNYWdpYyoqCgpBbHJpZ2h0LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLi4uIHRoZSBgQlBGX0NBTExfeGAgbWFjcm8gZmFtaWx5Li4uIHRoYXQmIzM5O3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZywgaXNuJiMzOTt0IGl0PyBJJiMzOTttIGFsbW9zdCBjZXJ0YWluIHRoYXQgd2hhdCB0aGVzZSBtYWNyb3MgYXJlIGRvaW5nIHVuZGVyIHRoZSBob29kIGlzIGdlbmVyYXRpbmcgdHdvIHRoaW5nczogYSAmIzM0O2hpZGRlbiYjMzQ7IHN5bWJvbCwgcGVyaGFwcyBuYW1lZCBzb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIGBfX19fIyNuYW1lYCAob3IgYSBzaW1pbGFyLCBjb21waWxlci1nZW5lcmF0ZWQgY29uc3RydWN0KSwgYW5kIHRoZW4sIGFsb25nc2lkZSB0aGF0LCB0aGUgaW50ZW5kZWQgYG5hbWVgIGl0c2VsZi4gVGhlICYjMzQ7aGlkZGVuJiMzNDsgbmFtZSB3b3VsZCBsaWtlbHkgYmUgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBCUEYgZnVuY3Rpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZXhhY3QgbWFuZ2xpbmcgcnVsZXMsIGJ1dCB0aGF0JiMzOTtzIHRoZSBiYXNpYyBwYXR0ZXJuIEkmIzM5O20gcmVjYWxsaW5nLCB0aGF0IHRoZSBleHBhbmRlZCBtYWNybyByZXN1bHRzIGluIHRob3NlIHR3byBwYXJ0cyBiZWluZyBjcmVhdGVkIG9yLCBtb3JlIHNwZWNpZmljYWxseSwgdGhlIG1hY3JvIGNvbnN0cnVjdHMgdGhlIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4gSSBuZWVkIHRvIHJldmlzaXQgdGhlIHByZWNpc2UgbWVjaGFuaWNzIG9mIHdoeSB0aGF04oCZcyB0aGUgd2F5IHdlIGhhbmRsZSB0aGUgZnVuY3Rpb24gY2FsbHMsIGJ1dCB0aGUgZ29hbCBpcyB0byBtYWtlIGEgd2F5IHRvIHVzZSBhIEJQRiBmdW5jdGlvbiBjYWxsIGluIHRoZSB1c2VyIHNwYWNlIGNvZGUgd2l0aCBhIGtub3duIGZ1bmN0aW9uLCB3aGlsZSBhbHNvIGRvaW5nIEJQRiB0aGluZ3MgdW5kZXIgdGhlIGhvb2QuIFNvIHRoZSBoaWRkZW4gbmFtZSBpcyB0aGUgaW50ZXJuYWwgcmVmZXJlbmNlLCBhbmQgdGhlIG1vcmUgc3RhbmRhcmQgbmFtZSBpcyB0aGUgb25lIHRoYXQmIzM5O3MgZXhwb3J0ZWQgc28gd2UgY2FuIGFjdHVhbGx5IGNhbGwgaXQgZnJvbSB1c2VyIHNwYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgQlBGX0NBTExfeCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9maWx0ZXIuaD00MDk9c3RhdGljIGlubGluZSBib29sIGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjQxLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2NDI6I2RlZmluZSBCUEZfQ0FMTF94KHgsIGF0dHIsIG5hbWUsIC4uLilcdFx0XHRcdFx0ICAgICAgIFxcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTY0My1cdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcdFx0XHRcdFx0XHQgICAgICAgXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNzQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgY3VycmVudCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGVCUEYgRmlsdGVyIFN0cnVjdHVyZXMqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIGVCUEYgZmlsdGVyIGNvbnN0cnVjdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzcGVjaWZpYyBwb2ludCDigJMgdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpbHRlciBzdHJ1Y3R1cmUgaXRzZWxmLiBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgdG8gYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNjQyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGxheW91dCBvZiB0aGlzIHN0cnVjdDogdGhlIGBzb2NrX2ZpbHRlcmAgYXJyYXkgYW5kIGl0cyBhc3NvY2lhdGVkIG1ldGFkYXRhLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRldGFpbHMgaXMgY3J1Y2lhbCB0byB0cmFjaW5nIGhvdyBmaWx0ZXIgcHJvZ3JhbXMgYXJlIHJlcHJlc2VudGVkIGluIG1lbW9yeSBhbmQgaG93IHRoZSBKSVQgY29tcGlsZXIsIG9yIGludGVycHJldGVyLCB3aWxsIHVsdGltYXRlbHkgcHJvY2VzcyB0aGVtLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHNlZWluZyBob3cgdGhlIGluc3RydWN0aW9uIHBvaW50ZXJzLCBjb25zdGFudHMgYW5kIGp1bXBzIGFyZSBlbmNvZGVkIHdpdGhpbiBlYWNoIGluc3RydWN0aW9uIG9mIHRoZSBhcnJheS4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgaW50ZXJuYWwgY29tbWVudHMgYXJlIHVwIHRvIGRhdGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9maWx0ZXIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjM1Olx0I2RlZmluZSBfX0JQRl9ERUNMX0FSR1ModCwgYSkgdCAgIGFcbiA2MzY6XHQjZGVmaW5lIF9fQlBGX0RFQ0xfUkVHUyh0LCBhKSB1NjQgYVxuIDYzNzpcdFxuIDYzODpcdCNkZWZpbmUgX19CUEZfUEFEKG4pXHRcdFx0XHRcdFx0XHQgICAgICAgXFxcbiA2Mzk6XHRcdF9fQlBGX01BUChuLCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX04sIHU2NCwgX191cl8xLCB1NjQsIF9fdXJfMiwgICAgICAgXFxcbiA2NDA6XHRcdFx0ICB1NjQsIF9fdXJfMywgdTY0LCBfX3VyXzQsIHU2NCwgX191cl81KVxuIDY0MTpcdFxuIDY0MjpcdCNkZWZpbmUgQlBGX0NBTExfeCh4LCBhdHRyLCBuYW1lLCAuLi4pXHRcdFx0XHRcdCAgICAgICBcXFxuIDY0MzpcdFx0c3RhdGljIF9fYWx3YXlzX2lubGluZVx0XHRcdFx0XHRcdCAgICAgICBcXFxuIDY0NDpcdFx0dTY0IF9fX18jI25hbWUoX19CUEZfTUFQKHgsIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfViwgX19WQV9BUkdTX18pKTsgICBcXFxuIDY0NTpcdFx0dHlwZWRlZiB1NjQgKCpidGZfIyNuYW1lKShfX0JQRl9NQVAoeCwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9WLCBfX1ZBX0FSR1NfXykpOyBcXFxuIDY0NjpcdFx0YXR0ciB1NjQgbmFtZShfX0JQRl9SRUcoeCwgX19CUEZfREVDTF9SRUdTLCBfX0JQRl9OLCBfX1ZBX0FSR1NfXykpOyAgICBcXFxuIDY0NzpcdFx0YXR0ciB1NjQgbmFtZShfX0JQRl9SRUcoeCwgX19CUEZfREVDTF9SRUdTLCBfX0JQRl9OLCBfX1ZBX0FSR1NfXykpICAgICBcXFxuIDY0ODpcdFx0e1x0XHRcdFx0XHRcdFx0XHQgICAgICAgXFxcbiA2NDk6XHRcdFx0cmV0dXJuICgoYnRmXyMjbmFtZSlfX19fIyNuYW1lKShfX0JQRl9NQVAoeCxfX0JQRl9DQVNULF9fQlBGX04sX19WQV9BUkdTX18pKTtcXFxuIDY1MDpcdFx0fVx0XHRcdFx0XHRcdFx0XHQgICAgICAgXFxcbiA2NTE6XHRcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcdFx0XHRcdFx0XHQgICAgICAgXFxcbiA2NTI6XHRcdHU2NCBfX19fIyNuYW1lKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSlcbiA2NTM6XHRcbiA2NTQ6XHQjZGVmaW5lIF9fTk9BVFRSXG4gNjU1Olx0I2RlZmluZSBCUEZfQ0FMTF8wKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuIDY1NjpcdCNkZWZpbmUgQlBGX0NBTExfMShuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDEsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiA2NTc6XHQjZGVmaW5lIEJQRl9DQUxMXzIobmFtZSwgLi4uKVx0QlBGX0NBTExfeCgyLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG4gNjU4Olx0I2RlZmluZSBCUEZfQ0FMTF8zKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMywgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuIDY1OTpcdCNkZWZpbmUgQlBGX0NBTExfNChuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDQsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiA2NjA6XHQjZGVmaW5lIEJQRl9DQUxMXzUobmFtZSwgLi4uKVx0QlBGX0NBTExfeCg1LCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG4gNjYxOlx0XG4gNjYyOlx0I2RlZmluZSBOT1RSQUNFX0JQRl9DQUxMXzEobmFtZSwgLi4uKVx0QlBGX0NBTExfeCgxLCBub3RyYWNlLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiA2NjM6XHRcbiA2NjQ6XHQjZGVmaW5lIGJwZl9jdHhfcmFuZ2UoVFlQRSwgTUVNQkVSKVx0XHRcdFx0XHRcdFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0Mjc0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgdGhlIGBicGZfc2tiX2FkanVzdF9yb29tYCBQYXRjaCoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQgZGVmaW5lcyBgbmFtZWAgYXMgYGJwZl9za2JfYWRqdXN0X3Jvb21gLCBhbmQgYF9fX19icGZfc2tiX2FkanVzdF9yb29tYCB3aGljaCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljIF9fYWx3YXlzX2lubGluZWAuIFRoZXJlZm9yZSwgdGhlIGtlcm5lbCBzeW1ib2wgaXRzZWxmLCB0aGUgb25lIGFjdHVhbGx5IGV4cG9zZWQgdG8gdGhlIEJQRiBwcm9ncmFtcywgaXMgaW5kZWVkIGBicGZfc2tiX2FkanVzdF9yb29tYC4gVGhhdCBtdWNoIGlzIGNsZWFyLgoKSSBzZWUgYWxzbyB0aGF0IHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgYnBmX3NrYl9uZXRfc2hyaW5rYC4gSSBzaG91bGQgcXVpY2tseSB2ZXJpZnkgaWYgdGhhdCBmdW5jdGlvbiBpcyBhbHNvIHN0YXRpYyBiZWNhdXNlIHRoYXQgd291bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBjaGFuZ2VzIGludGVyYWN0LiBZZXAsIGBicGZfc2tiX25ldF9zaHJpbmtgIGlzIGRlY2xhcmVkIGBzdGF0aWMgaW50YC4gT2theSwgc28gYGJwZl9za2JfYWRqdXN0X3Jvb21gIGlzIGNsZWFybHkgdGhlIGtleSBlbnRyeSBwb2ludC4KCk5vdywgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuIEFyZSB0aGVyZSBhbnkgcGFydGljdWxhciBgQ09ORklHYCBvcHRpb25zIHRoYXQgYXJlIG5lY2Vzc2FyeSBvciBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZT8gVGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgbmV0L2NvcmUvZmlsdGVyLmNgLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBsb29rLiBJdCYjMzk7cyBjb21waWxlZCB3aGVuIGVpdGhlciBgQ09ORklHX0JQRl9TWVNDQUxMYCBvciBgQ09ORklHX05FVGAgaXMgZW5hYmxlZC4gVGhhdCBtYWtlcyBzZW5zZS4gSSYjMzk7bGwgdGFrZSBhIHF1aWNrIHBlZWsgYXQgYG5ldC9jb3JlL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBjb21waWxhdGlvbiBkZXBlbmRlbmNpZXMgYW5kIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWx0ZXJcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9MTI9b2JqLXlcdFx0ICAgICAmIzQzOz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XHRcdFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVx0XHRcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5MzMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IGFuZCBQdXJwb3NlIG9mIGBmaWx0ZXIub2AqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgZmlsdGVyLm9gIGlzIGFsd2F5cyBidWlsdCB3aGVuIHRoZSBgbmV0L2NvcmUvYCBtb2R1bGUgaXMgZW5hYmxlZCwgd2hpY2ggaW1wbGllcyBgQ09ORklHX05FVD15YC4gVGhhdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHByZXJlcXVpc2l0ZS4gTXkgaW50ZXJlc3QgaGVyZSBpcyBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBuZXcgQlBGIGZsYWdzIOKAkyBgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFYCwgYEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUGAsIGBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDRgLCBhbmQgYEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNmAg4oCTIGZpdCBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4KCkl0JiMzOTtzIGNsZWFyIHRoZXkgYXJlIHNpbXBseSBuZXcgb3B0aW9ucyBmb3IgdGhlIGV4aXN0aW5nIGBicGZfc2tiX2FkanVzdF9yb29tYCBoZWxwZXIuIFRoYXQgdGVsbHMgbWUgdGhpcyBpc24mIzM5O3QgYSByYWRpY2FsIHNoaWZ0LCBidXQgYW4gZW5oYW5jZW1lbnQgdG8gYW4gZXhpc3RpbmcgZnVuY3Rpb25hbGl0eS4gTm93IEkgbmVlZCB0byByZWNhbGwgd2hlcmUgYGJwZl9za2JfYWRqdXN0X3Jvb21gIGlzIGJlaW5nICp1c2VkKi4gUmlnaHQsIGl0IGlzIHBhcnQgb2YgdGhlIGNvbnRleHQgZm9yIEJQRiBwcm9ncmFtcyB3aXRoIGVpdGhlciB0aGUgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYCBvciBgQlBGX1BST0dfVFlQRV9TQ0hFRF9BQ1RgIHR5cGVzIOKAkyBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSB0cmFmZmljIGNvbnRyb2wgKHRjKSBmcmFtZXdvcmsuIFRvIHNvbGlkaWZ5IHRoaXMsIGxldCBtZSBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgdGNfY2xzX2FjdF9mdW5jX3Byb3RvYCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBUaGF0IHNob3VsZCBjbGFyaWZ5IHRoZSBleGFjdCBpbnRlZ3JhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNfY2xzX2FjdF9mdW5jX3Byb3RvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9ODYzNT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcbm5ldC9jb3JlL2ZpbHRlci5jOjg2MzY6dGNfY2xzX2FjdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxubmV0L2NvcmUvZmlsdGVyLmMtODYzNy17XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTE1MTg9Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgdGNfY2xzX2FjdF92ZXJpZmllcl9vcHMgPSB7XG5uZXQvY29yZS9maWx0ZXIuYzoxMTUxOTpcdC5nZXRfZnVuY19wcm90b1x0XHQ9IHRjX2Nsc19hY3RfZnVuY19wcm90byxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTIwLVx0LmlzX3ZhbGlkX2FjY2Vzc1x0PSB0Y19jbHNfYWN0X2lzX3ZhbGlkX2FjY2VzcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2ODUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqVEMgQlBGIGFuZCBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgLSBDb25maWd1cmF0aW9uIENoZWNrKioKCkFscmlnaHQsIHNvIGBicGZfc2tiX2FkanVzdF9yb29tYCBpcyBhcHBhcmVudGx5IGFjY2Vzc2libGUgd2l0aGluIFRDIEJQRiBwcm9ncmFtcyBub3cuIFRoYXTigJlzIGdvb2QgdG8ga25vdy4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHZlcmlmeSB0aGlzIGFuZCBnZXQgaXQgdXAgYW5kIHJ1bm5pbmcuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBlbmFibGVkIGZvciBUQyBCUEYgdG8gd29yayBjb3JyZWN0bHkgd2l0aCB0aGlzIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEkga25vdyBJJiMzOTtsbCBuZWVkIGBDT05GSUdfQlBGX1NZU0NBTEw9eWAsIGFuZCB0aGVuIGVpdGhlciBgQ09ORklHX05FVF9DTFNfQlBGPXlgIG9yIGBDT05GSUdfTkVUX0FDVF9CUEY9eWAgKG9yIHBvdGVudGlhbGx5IGBDT05GSUdfTkVUX1NDSF9JTkdSRVNTPXlgLCBvciBvdGhlcnMgdGhhdCBlbmFibGUgQlBGIGZ1bmN0aW9uYWxpdHkpLiAKClNvLCBteSBpbW1lZGlhdGUgbmV4dCB0YXNrIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIG1pbmltYWwgc2V0IG9mIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkIHRvIHRlc3QgdGhpcyBwcm9wZXJseSB3aXRoaW4gYSBUQyBCUEYgZW52aXJvbm1lbnQuIEkgbmVlZCB0byBkZWx2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlncyBhbmQgZG9jdW1lbnRhdGlvbiB0byBkZXRlcm1pbmUgdGhlIG9wdGltYWwgY29uZmlndXJhdGlvbiBmb3IgYSBzaW1wbGUgdGVzdCBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y19jbHNfYWN0X3ZlcmlmaWVyX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTExNTE0PWNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgc2tfZmlsdGVyX3Byb2dfb3BzID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExNTE3LVxubmV0L2NvcmUvZmlsdGVyLmM6MTE1MTg6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgdGNfY2xzX2FjdF92ZXJpZmllcl9vcHMgPSB7XG5uZXQvY29yZS9maWx0ZXIuYy0xMTUxOS1cdC5nZXRfZnVuY19wcm90b1x0XHQ9IHRjX2Nsc19hY3RfZnVuY19wcm90byxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxNjcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2UgYXJlIG15IGluaXRpYWwgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgdGhlIFVzYWdlIG9mIGB0Y19jbHNfYWN0X3ZlcmlmaWVyX29wc2AqKgoKQWxyaWdodCwgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIGB0Y19jbHNfYWN0X3ZlcmlmaWVyX29wc2Agc3RydWN0dXJlLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZmlndXJlIG91dCAqd2hlcmUqIGl0JiMzOTtzIGFjdHVhbGx5IGJlaW5nIHV0aWxpemVkLiBVbmRlcnN0YW5kaW5nIGl0cyBkZXBlbmRlbmNpZXMgYW5kIHRoZSBjb2RlIHRoYXQgaW50ZXJhY3RzIHdpdGggaXQgaXMgcGFyYW1vdW50IHRvIGdyYXNwaW5nIGl0cyBvdmVyYWxsIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2Ugd2l0aGluIHRoZSBjb2RlYmFzZS4gSXMgaXQgcGFydCBvZiBhIHNwZWNpZmljIHN1YnN5c3RlbSwgb3IgaXMgaXQgaW50ZWdyYXRlZCBtb3JlIGJyb2FkbHk/IFRoaXMgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uIHdpbGwgc2V0IHRoZSBzdGFnZSBmb3IgYW55IGZ1cnRoZXIgYW5hbHlzaXMgSSYjMzk7bGwgbmVlZCB0byBkby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y19jbHNfYWN0X3ZlcmlmaWVyX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzOTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwmIzM5O3MgVHJhZmZpYyBDb250cm9sIFZlcmlmaWVyKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgdHJhZmZpYyBjb250cm9sIHZlcmlmaWVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBzb3VyY2UgY29kZSB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYG5ldC9jb3JlL2ZpbHRlci5jYC4gVGhhdCBmaWxlIHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBsb29rIGZvciB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHRjX2Nsc19hY3RfdmVyaWZpZXJfb3BzYC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBoYW5kbGUgdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzIHRoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCB2YWxpZGF0ZXMgYWN0aW9ucyBhbmQgY2xhc3NpZmllcnMgd2l0aGluIHRoZSB0cmFmZmljIGNvbnRyb2wgZnJhbWV3b3JrLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNfY2xzX2FjdF92ZXJpZmllcl9vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz0xMTUxND1jb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIHNrX2ZpbHRlcl9wcm9nX29wcyA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTUxNy1cbm5ldC9jb3JlL2ZpbHRlci5jOjExNTE4OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIHRjX2Nsc19hY3RfdmVyaWZpZXJfb3BzID0ge1xubmV0L2NvcmUvZmlsdGVyLmMtMTE1MTktXHQuZ2V0X2Z1bmNfcHJvdG9cdFx0PSB0Y19jbHNfYWN0X2Z1bmNfcHJvdG8sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzM0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIEJQRiBUeXBlIERlZmluaXRpb25zKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuZGFtZW50YWwgZGF0YSB0eXBlcyB1c2VkIHdpdGhpbiB0aGUgQlBGIGZyYW1ld29yay4gVGhhdCBtZWFucyBteSBpbW1lZGlhdGUgZm9jdXMgc2hvdWxkIGJlIHRoZSBgaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaGAgaGVhZGVyIGZpbGUuIEl0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBidWlsZGluZyBibG9ja3Mgb2YgYW55IEJQRiBwcm9ncmFtLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBkZWZpbml0aW9ucyBmb3IgdGhpbmdzIGxpa2UgYF9fdTMyYCwgYF9fczY0YCwgdmFyaW91cyBzdHJ1Y3R1cmVzIHVzZWQgZm9yIEJQRiBtYXBzLCBhbmQgYW55dGhpbmcgZWxzZSByZWxhdGVkIHRvIGRhdGEgcmVwcmVzZW50YXRpb25zIGF0IHRoZSBrZXJuZWwgbGV2ZWwgdGhhdCBCUEYgaW50ZXJhY3RzIHdpdGguIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgdXNlIG9mIHRoZXNlIHR5cGVzIHdpdGhpbiBrZXJuZWwgY29udGV4dHMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4uLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIHByb3ZpZGUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBtb3JlIGNvbXBsZXggZXhwbG9yYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjX2Nsc19hY3RfdmVyaWZpZXJfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdHlwZXMuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTgzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCYjMzk7cyBCUEYgSGVhZGVyKioKCkFscmlnaHQsIHRpbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZ2V0IGJhY2sgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSBCUEYgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSB0aGUga2VybmVsJiMzOTtzIGRlZmluaXRpb24uIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBjb3JuZXJzdG9uZTogSSBuZWVkIHRvIG9wZW4gYW5kIGNhcmVmdWxseSBleGFtaW5lIHRoZSBgaW5jbHVkZS9saW51eC9icGYuaGAgaGVhZGVyIGZpbGUuIEl0JiMzOTtzIHRoZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcywgY29uc3RhbnRzLCBhbmQgbWFjcm9zIHRoYXQgdW5kZXJwaW4gdGhlIGVudGlyZSBlQlBGIGZyYW1ld29yay4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKnJlYWxseSogaGFwcGVucy4gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiB0aGUgdmFyaW91cyBlbnVtIGFuZCBzdHJ1Y3QgZGVmaW5pdGlvbnMgZm9yIGNvbnRleHQuIEdvdHRhIG1ha2Ugc3VyZSBub3RoaW5nIGZ1bmRhbWVudGFsIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUgSSB3YXMgdGhpcyBkZWVwLiBJIG5lZWQgYSBjbGVhciBtZW50YWwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y19jbHNfYWN0X3ZlcmlmaWVyX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzIyMgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgTGludXgga2VybmVsIGNvZGU6CgoqKkRpdmluZyBpbnRvIHRoZSBUcmFmZmljIENvbnRyb2wgVmVyaWZpZXIgT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBmb3IgYHRjX2Nsc19hY3RfdmVyaWZpZXJfb3BzYC4gTmF0dXJhbGx5LCBnaXZlbiBteSBleHBlcmllbmNlLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBuYXZpZ2F0ZSB0aGUga2VybmVsIHNvdXJjZSB0cmVlIGRpcmVjdGx5LiBUaGUgc3RhbmRhcmQgcGxhY2UgdG8gYmVnaW4gbG9va2luZyBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBUcmFmZmljIENvbnRyb2wgaXMgdXN1YWxseSB0aGUgYGluY2x1ZGUvbGludXgvYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3Mgd2hlcmUgYSBsb3Qgb2YgdGhlIGNvcmUgc3RydWN0dXJlcywgbWFjcm9zLCBhbmQgZnVuY3Rpb24gcHJvdG90eXBlcyByZWxhdGVkIHRvIHRoZSBrZXJuZWwmIzM5O3MgaW50ZXJuYWwgQVBJcyByZXNpZGUuIEl04oCZcyB0aGUgbG9naWNhbCBmaXJzdCBzdG9wLCBhbmQgdGhlIHBhdGggb2YgbGVhc3QgcmVzaXN0YW5jZSB3aGVuIGRlYWxpbmcgd2l0aCBkZWZpbml0aW9ucyBsaWtlIHRoaXMgb25lLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNfY2xzX2FjdF92ZXJpZmllcl9vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDQyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2Agb3IgYSBzaW1pbGFyIGZpbGUgZGVhbGluZyB3aXRoIEJQRiBzeXNjYWxsIGhhbmRsaW5nLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIHBsYWNlIHRvIHN0YXJ0IHdoZW4gSSYjMzk7bSBsb29raW5nIGF0IEJQRiBwcm9ncmFtIHR5cGVzLiBCdXQgaG9sZCBvbi4uLiBhIHF1aWNrIGNyb3NzLXJlZmVyZW5jZSBtaWdodCBiZSBzbWFydGVyLiBJIHNob3VsZCBjaGVjayB3aGVyZSBgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFNgIGlzIGFjdHVhbGx5ICpkZWZpbmVkKi4gUmlnaHQsIGBicGZfdHlwZXMuaGAuIEFoLCB0aGVyZSBpdCBpcy4gSXQgbWFwcyBgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFNgIGRpcmVjdGx5IHRvIGB0Y19jbHNfYWN0YC4gRXhjZWxsZW50LiBUaGF0IGhlbHBzIG5hcnJvdyBkb3duIHRoZSBzZWFyY2ggY29uc2lkZXJhYmx5LiBLbm93aW5nIHRoYXQgY29ubmVjdGlvbiBpcyBrZXkuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNfY2xzX2FjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdHlwZXMuaD01PUJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLCBza19maWx0ZXIsXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTYtXHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6NzpCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCB0Y19jbHNfYWN0LFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC04LVx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjk6QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1NDSEVEX0FDVCwgdGNfY2xzX2FjdCxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMTAtXHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4OTcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipCUEYgUHJvZ3JhbSBUeXBlIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IGVCUEYgcHJvZ3JhbXMgYXJlIGhhbmRsZWQgaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHdpdGggcmVnYXJkIHRvIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2AgYW5kIGBCUEZfUFJPR19UWVBFX1NDSEVEX0FDVGAuIFJpZ2h0LCBgdGNfY2xzX2FjdGAgaXMgdGhlIGtleSBmdW5jdGlvbiB1c2VkIHRvIG1hbmFnZSB0aG9zZSwgd2hpY2ggSSBrbmV3LiBOb3csIGxldCBtZSByZW1pbmQgbXlzZWxmIC0gdGhlc2UgYXJlIGRlZmluaXRlbHkgZW5hYmxlZCBieSBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYWxzbyBgQ09ORklHX05FVGAsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEhtbSwgSSB3b25kZXIgaWYgd2UgbmVlZCBgQ09ORklHX05FVF9DTFNfQlBGYD8gSSBoYXZlIGEgZmVlbGluZyBpdCBtaWdodCBiZSwgYnV0IGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGJlIGNlcnRhaW4sIHNvIGl0JiMzOTtzIGJlc3QgdG8gdmVyaWZ5IHRoaXMuIEFscmlnaHQsIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBjb2RlLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBpbiBgbmV0L3NjaGVkL2Nsc19icGYuY2AgdG8gYmUgY29tcGxldGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjbHNfYnBmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9NTYyPWNvbmZpZyBORVRfQ0xTX0JQRlxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTU2OS1cdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxubmV0L3NjaGVkL0tjb25maWc6NTcwOlx0ICBiZSBjYWxsZWQgY2xzX2JwZi5cbm5ldC9zY2hlZC9LY29uZmlnLTU3MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzMTUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgY29uc2lkZXJpbmcgSSBuZWVkIHRvIGdldCB0aGlzIEJQRiBwcm9ncmFtIHVwIGFuZCBydW5uaW5nOgoKKipCUEYgUHJvZ3JhbSBEZXBsb3ltZW50ICZhbXA7IFRlc3RpbmcgQ29uc2lkZXJhdGlvbnMqKgoKQWxyaWdodCwgc28gdG8gYWN0dWFsbHkgaW50ZWdyYXRlIHRoaXMgQlBGIHByb2dyYW0gd2l0aCBhIFRyYWZmaWMgQ29udHJvbCAoVEMpIGhvb2ssIGl0JiMzOTtzIHByZXR0eSBjbGVhciBJJiMzOTttIGdvaW5nIHRvIG5lZWQgZWl0aGVyIGBDT05GSUdfTkVUX0NMU19CUEZgIG9yIGBDT05GSUdfTkVUX1NDSF9JTkdSRVNTYCBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlnLiBUaGF0IG1ha2VzIHNlbnNlLCB0aG9zZSBhcmUgdGhlIG5lY2Vzc2FyeSBidWlsZGluZyBibG9ja3MgZm9yIHRoYXQga2luZCBvZiBhdHRhY2htZW50LgoKSG93ZXZlciwgYW5kIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgaWYgSSYjMzk7bSBqdXN0IGxvb2tpbmcgdG8gbG9hZCB0aGUgcHJvZ3JhbSBhbmQgdGVzdCBpdHMgKmV4ZWN1dGlvbiogdXNpbmcgc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyLCBieXBhc3NpbmcgdGhlIFRDIGhvb2sgZm9yIG5vdywgaXQgc2VlbXMgSSBjYW4gYWNoaWV2ZSB0aGF0IHdpdGggYEJQRl9QUk9HX1JVTmAgLSBwcm9iYWJseSB0aHJvdWdoIGEgZnVuY3Rpb24gbGlrZSBgYnBmX3Byb2dfdGVzdF9ydW5gLiBUaGF0IHdvdWxkIGJlIGEgZ29vZCBpbml0aWFsIHZhbGlkYXRpb24gc3RlcC4KCk5vdywgZm9yIHRoYXQgYGJwZl9wcm9nX3Rlc3RfcnVuYCBwYXRoIHRvIHdvcmssIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfTkVUYCBhcmUgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4gVGhhdCBzZWVtcyByZWFzb25hYmxlLCBhcyB0aGVzZSBhcmUgdGhlIGZ1bmRhbWVudGFscyBmb3IgdGhlIEJQRiBzeXN0ZW0gY2FsbCBpbnRlcmZhY2UgYW5kIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0aWVzLCByZXNwZWN0aXZlbHkuCgpGaW5hbGx5LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBicGZfcHJvZ190ZXN0X3J1bmAgc3VwcG9ydHMgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYCBzcGVjaWZpY2FsbHkuIFdlIGNhbiYjMzk7dCBhc3N1bWUgdGhhdCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgd29yaywgdGhlIHNwZWNpZmljIHByb2dyYW0gdHlwZSBtaWdodCBuZWVkIGV4cGxpY2l0IHN1cHBvcnQuIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhhdCBmdW5jdGlvbiB0byBtYWtlIHN1cmUuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRl9QUk9HX1RZUEVfU0NIRURfQ0xTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JwZi90ZXN0X3J1bi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icGYvdGVzdF9ydW4uYz0xMDM1PWludCBicGZfcHJvZ190ZXN0X3J1bl9za2Ioc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTEwNjAtXHRzd2l0Y2ggKHByb2ctXHUwMDNldHlwZSkge1xubmV0L2JwZi90ZXN0X3J1bi5jOjEwNjE6XHRjYXNlIEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTOlxubmV0L2JwZi90ZXN0X3J1bi5jLTEwNjItXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0NIRURfQUNUOlxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYz0xODg4PXN0YXRpYyBpbnQgX19pbml0IGJwZl9wcm9nX3Rlc3RfcnVuX2luaXQodm9pZClcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTkwMi1cdHJldCA9IHJlZ2lzdGVyX2J0Zl9mbW9kcmV0X2lkX3NldChcdTAwMjZicGZfdGVzdF9tb2RpZnlfcmV0dXJuX3NldCk7XG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTkwMzpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCBcdTAwMjZicGZfcHJvZ190ZXN0X2tmdW5jX3NldCk7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTkwNC1cdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXHUwMDI2YnBmX3Byb2dfdGVzdF9rZnVuY19zZXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTE4MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIFNLQiBBZGp1c3RtZW50IGFuZCBHU08gRmxhZ3MgZm9yIFN5emthbGxlciBUZXN0aW5nKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IHRlc3QgdGhlIGBicGZfc2tiX2FkanVzdF9yb29tYCBCUEYgaGVscGVyLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIGl0cyBpbnRlcmFjdGlvbiB3aXRoIEdTTyBmbGFncyBhbmQgZW5jYXBzdWxhdGlvbi4gVGhlIGdvb2QgbmV3cyBpcyB0aGF0IGBicGZfcHJvZ190ZXN0X3J1bl9za2JgIGRvZXMgaW5kZWVkIHN1cHBvcnQgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYCwgd2hpY2ggaXMgZ3JlYXQuIEFuZCwgc2luY2Ugd2UgaGF2ZSBgQ09ORklHX0JQRl9TWVNDQUxMYCwgdGhhdCYjMzk7cyBhIGtleSBzdGFydGluZyBwb2ludC4KCkJ1dCB0aGVuIEkgcmVtZW1iZXJlZCBgYnBmX3NrYl9uZXRfc2hyaW5rYCwgYW5kIGhvdyBpdCBjbGVhcnMgYHNrYi0mZ3Q7ZW5jYXBzdWxhdGlvbmAsIHBsdXMgdGhvc2UgY3J1Y2lhbCBHU08gZmxhZ3M6IGBTS0JfR1NPX1VEUF9UVU5ORUxgLCBgU0tCX0dTT19HUkVgLCBhbmQgdGhlIHJlc3QuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgd2UgY2FuIHRlc3QgdGhlc2Ugc2NlbmFyaW9zLiBJIHNlZSB0aGF0IHRob3NlIGZsYWdzIGFyZSBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYCwgc28gSSYjMzk7bGwga2VlcCB0aGF0IGluIG1pbmQuCgpOb3csIG15IG1pbmQgZ29lcyB0byB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlc2UgdHVubmVscy4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBjb25maWdzIEkgc2hvdWxkIHdhdGNoIG91dCBmb3IgcmVsYXRlZCB0byBHUkUsIFVEUCB0dW5uZWxzLCBJUElQLCBhbmQgU0lUPyBUaGUgcGF0Y2ggcG9pbnRzIHRvIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y190dW5uZWwuY2AsIHdoaWNoIHVzZXMgdGhlIGBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkVgLCBldGMuIGZsYWdzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UgY2FuIGNyZWF0ZSBTS0JzIHdpdGggdGhlc2UgR1NPIHR5cGVzIHVzaW5nIHN5emthbGxlci4gU3l6a2FsbGVyIGNvdWxkIHVzZSBgdHVuYC9gdGFwYCBvciBgdmV0aGAgYW5kIHNlbmQgcGFja2V0cywgYnV0LCBpZiBpdCYjMzk7cyB1c2luZyBgYnBmX3Byb2dfdGVzdF9ydW5gLCB0aGVuIHRoZSBxdWVzdGlvbiBpcywgaG93IGRvZXMgaXQgc2V0IHRoZXNlIEdTTyBmbGFncyBpbiBhIGNyYWZ0ZWQgU0tCPwoKSSB0aG91Z2h0IGBicGZfcHJvZ190ZXN0X3J1bl9za2JgIG1pZ2h0IGxldCBtZSBzZXQgYHNoaW5mbyhza2IpLSZndDtnc29fdHlwZWAgZGlyZWN0bHksIGJ1dCBpdCBsb29rcyBsaWtlIHRoYXQmIzM5O3Mgbm90IHRoZSBjYXNlLiBJdCBtYXkgYmUgc2V0IGlmIGl0IGdvZXMgdGhyb3VnaCB0aGUga2VybmVsIHN0YWNrLiBIb3dldmVyLCB3YWl0LCBpdCBqdXN0IGNsaWNrZWQhIFN5emthbGxlciAqY2FuKiBpbmplY3QgcGFja2V0cyB2aWEgYHR1bmAgb3IgYHBhY2tldGAgc29ja2V0cyB0aGF0IHVzZSBgVk5FVF9IRFJgLCBhbmQgdGhpcyAqZG9lcyogYWxsb3cgc2V0dGluZyBHU08gZmxhZ3MhIFllcywgdGhlIGB2aXJ0aW9fbmV0X2hkcmAgZ2l2ZXMgYWNjZXNzLiBTbywgdGhhdCBtZWFucyBjcmVhdGluZyBTS0JzIHdpdGggYFNLQl9HU09fVURQX1RVTk5FTGAgc2hvdWxkIGJlIGZhaXJseSBlYXN5LgoKSSBzZWUgdGhhdCBzeXprYWxsZXIgYWxyZWFkeSBlbmFibGVzIGBDT05GSUdfVFVOYCwgc28gdGhhdCYjMzk7cyBhIHBvc2l0aXZlLiBXaGF0IGFib3V0IGBDT05GSUdfTkVUX0lQR1JFYCwgYENPTkZJR19JUFY2X1NJVGAsIGFuZCBgQ09ORklHX0lQVjZfVFVOTkVMYD8gVGhleSBtaWdodCBiZSB1c2VmdWwgaWYgc3l6a2FsbGVyIHRyaWVzIHRvIHRyaWdnZXIgdGhpcyB2aWEgYWN0dWFsIHR1bm5lbCBkZXZpY2VzLCBidXQgc2luY2UgdGhpcyBpcyBhIEJQRiBoZWxwZXIsIHN5emthbGxlciB3aWxsIGp1c3QgY2FsbCB0aGUgQlBGIGhlbHBlciBkaXJlY3RseSBvbiB3aGF0ZXZlciBTS0IgaXQgaGFzLiBTbyBpdCBzb3VuZHMgbGlrZSB0aGUgbWFpbiB0YXJnZXQgaXMgdGhlIGBicGZfc2tiX2FkanVzdF9yb29tYCBoZWxwZXIgaXRzZWxmLgoKVGhlcmVmb3JlLCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2UgZnVuY3Rpb25zOiBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgYW5kIGBicGZfc2tiX25ldF9zaHJpbmtgIOKAkyB3aGljaCBpcyBsaWtlbHkgaW5saW5lZCBvciBkaXJlY3RseSBwYXJ0IG9mIHRoZSBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgZnVuY3Rpb24uIEkgd2lsbCBjaGVjayB3aGV0aGVyIGBicGZfc2tiX25ldF9zaHJpbmtgIGlzIGlubGluZWQsIGp1c3QgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3NrYl9uZXRfc2hyaW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MzU5OD1zdGF0aWMgaW50IGJwZl9za2JfbmV0X2dyb3coc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG9mZiwgdTMyIGxlbl9kaWZmLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTM3MTItXG5uZXQvY29yZS9maWx0ZXIuYzozNzEzOnN0YXRpYyBpbnQgYnBmX3NrYl9uZXRfc2hyaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvZmYsIHUzMiBsZW5fZGlmZixcbm5ldC9jb3JlL2ZpbHRlci5jLTM3MTQtXHRcdFx0ICAgICAgdTY0IGZsYWdzKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTM4NDc9QlBGX0NBTExfNChicGZfc2tiX2FkanVzdF9yb29tLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHMzMiwgbGVuX2RpZmYsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzkzMi1cbm5ldC9jb3JlL2ZpbHRlci5jOjM5MzM6XHRyZXQgPSBzaHJpbmsgPyBicGZfc2tiX25ldF9zaHJpbmsoc2tiLCBvZmYsIGxlbl9kaWZmX2FicywgZmxhZ3MpIDpcbm5ldC9jb3JlL2ZpbHRlci5jLTM5MzQtXHRcdCAgICAgICBicGZfc2tiX25ldF9ncm93KHNrYiwgb2ZmLCBsZW5fZGlmZl9hYnMsIGZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5NDEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgRnVuY3Rpb24gQ2FsbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiBjYWxsIOKAkyBpdCYjMzk7cyBzdGF0aWMsIHNvIHRoZXJlJiMzOTtzIGEgZ29vZCBjaGFuY2UgdGhlIGNvbXBpbGVyIG1pZ2h0IGlubGluZSBpdC4gVGhhdCYjMzk7cyB0aGUgZmlyc3QgdGhpbmcgdG8gY29uc2lkZXIuIFRoZXJlZm9yZSwgbXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gYGJwZl9za2JfYWRqdXN0X3Jvb21gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4KCk5vdywgbGV0JiMzOTtzIHNlZS4gUmlnaHQsIHRoZSBzeW1ib2wgbmFtZSBmb3IgYEJQRl9DQUxMXzQoYnBmX3NrYl9hZGp1c3Rfcm9vbSwgLi4uKWAgaXMgYWN0dWFsbHkgdHdvLWZvbGQ6IHdlIGhhdmUgdGhlIHdyYXBwZXIsIGp1c3QgYGJwZl9za2JfYWRqdXN0X3Jvb21gLCBhbmQgdGhlIGlubGluZSB2ZXJzaW9uIGlzIGBfX19fYnBmX3NrYl9hZGp1c3Rfcm9vbWAuIEdlbmVyYWxseSwgaW4gYSBrZXJuZWwgY29udGV4dCwgdGhlIHdyYXBwZXIsIHRoZSBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgdmVyc2lvbiwgKmlzbiYjMzk7dCogaW5saW5lZCBhbmQgc28gc2hvdWxkIGJlIHJlYWRpbHkgdmlzaWJsZSBpbiBga2FsbHN5bXNgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIHByb2JhYmx5IGZpbmQgdGhlIGNyb3NzIHJlZmVyZW5jZXMuCgpIb2xkIG9uIGEgc2Vjb25kLi4udGhpcyBwYXRjaCBhbHNvIHRvdWNoZXMgYGJwZl9za2JfbmV0X2Jhc2VfbGVuYCwgc28gSSYjMzk7bGwgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCB0b28uIEkgY2FuJiMzOTt0IGp1c3QgaXNvbGF0ZSBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgaW4gdGhpcyBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3NrYl9uZXRfYmFzZV9sZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz0zNTUwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9jaGFuZ2VfdHlwZV9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0zNTU3LVxubmV0L2NvcmUvZmlsdGVyLmM6MzU1ODpzdGF0aWMgdTMyIGJwZl9za2JfbmV0X2Jhc2VfbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvY29yZS9maWx0ZXIuYy0zNTU5LXtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0zODQ3PUJQRl9DQUxMXzQoYnBmX3NrYl9hZGp1c3Rfcm9vbSwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBzMzIsIGxlbl9kaWZmLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTM4NTAtXHR1MzIgbGVuX2N1ciwgbGVuX2RpZmZfYWJzID0gYWJzKGxlbl9kaWZmKTtcbm5ldC9jb3JlL2ZpbHRlci5jOjM4NTE6XHR1MzIgbGVuX21pbiA9IGJwZl9za2JfbmV0X2Jhc2VfbGVuKHNrYik7XG5uZXQvY29yZS9maWx0ZXIuYy0zODUyLVx0dTMyIGxlbl9tYXggPSBCUEZfU0tCX01BWF9MRU47XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzg2OC1cdGNhc2UgQlBGX0FESl9ST09NX05FVDpcbm5ldC9jb3JlL2ZpbHRlci5jOjM4Njk6XHRcdG9mZiAmIzQzOz0gYnBmX3NrYl9uZXRfYmFzZV9sZW4oc2tiKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTM4NzAtXHRcdGJyZWFrO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTM5MDEtXHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSylcbm5ldC9jb3JlL2ZpbHRlci5jOjM5MDI6XHRcdFx0bGVuX2RlY2FwX21pbiAmIzQzOz0gYnBmX3NrYl9uZXRfYmFzZV9sZW4oc2tiKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTM5MDMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODI3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNjY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIEFkanVzdG1lbnQgb2YgU0tCIERhdGEqKgoKT2theSwgc28gYGJwZl9za2JfbmV0X2Jhc2VfbGVuYCBpcyBzdGF0aWMsIHdoaWNoIG1lYW5zIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IHRvIGNvbnNpZGVyIGlzIGBicGZfc2tiX2FkanVzdF9yb29tYC4gTGV0JiMzOTtzIGNvbmZpcm0gYW55IG90aGVyIGZpbGVzIGltcGFjdGVkLiBBbHJpZ2h0LCBsb29rcyBsaWtlIGNoYW5nZXMgZXh0ZW5kIHRvOiBgaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oYCwgYG5ldC9jb3JlL2ZpbHRlci5jYCwgYHRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaGAsIGFuZCBzb21lIHNlbGZ0ZXN0IGZpbGVzLgoKU3BlY2lmaWNhbGx5LCBpbiB0aGUga2VybmVsIHNvdXJjZSwgdGhlIG9ubHkgbW9kaWZpY2F0aW9uIHJlc2lkZXMgd2l0aGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIEFuZCB0aGVzZSBjaGFuZ2VzIGFyZSBjb25jZW50cmF0ZWQgd2l0aGluIGBicGZfc2tiX25ldF9zaHJpbmtgIGFuZCwgb2YgY291cnNlLCBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAsIGFzIGJvdGggYXJlIHBhcnQgb2YgdGhlIGJyb2FkZXIgYGJwZl9za2JfYWRqdXN0X3Jvb21gIEJQRiBoZWxwZXIuIFRoZXJlZm9yZSwgYGJwZl9za2JfYWRqdXN0X3Jvb21gIGlzIG91ciBzeW1ib2wgb2YgaW50ZXJlc3Qg4oCTIGFuZCB0aGUgZm9jdXMuCgpIYW5nIG9uLCBpcyBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgcmVhbGx5IHRoZSBwcmVjaXNlIHN5bWJvbD8gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHdpdGggYG5tYCBvciBqdXN0IGFzc3VtZSBiYXNlZCBvbiB0aGUgYEJQRl9DQUxMXzRgIG1hY3JvIGRlZmluaXRpb24gd2UmIzM5O3ZlIGVuY291bnRlcmVkIGVhcmxpZXIuIFllcCwgYWZ0ZXIgY29uc2lkZXJpbmcgdGhlIG1hY3JvIGV4cGFuc2lvbiwgaXQgc2VlbXMgY29ycmVjdC4gVGhlIGZ1bmN0aW9uIG5hbWVkIGlzIGBicGZfc2tiX2FkanVzdF9yb29tYCwgd2hpY2gsIGJhc2VkIG9uIHRoZSBgQlBGX0NBTExfNGAgZGVmaW5pdGlvbiwgaXMgbm9uLXN0YXRpYyBhbmQsIHRoZXJlZm9yZSwgZ2xvYmFsLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgZ2l2ZW47IGl0JiMzOTtzIG5lY2Vzc2FyeSBmb3IgQlBGLiBgQ09ORklHX05FVGAgaXMgcmVxdWlyZWQgZHVlIHRvIGBuZXQvY29yZS9maWx0ZXIuY2AmIzM5O3MgcHJlc2VuY2UuIEhtbSwgYXJlIHRoZXJlIGFueSBvdGhlciBjcnVjaWFsIGNvbmZpZ3VyYXRpb25zPwoKVGhlIHBhdGNoIHNlZW1zIHRvIGVuYWJsZSBoYW5kbGluZyBvZiBHUkUsIFVEUCwgSVBJUCwgYW5kIFNJVCB0dW5uZWxzIOKAkyBkZWNhcHN1bGF0aW9uLCBzcGVjaWZpY2FsbHkuIFNvLCBkb2VzIGl0IGRlcGVuZCBvbiBjb25maWd1cmF0aW9ucyBsaWtlIGBDT05GSUdfTkVUX0lQR1JFYCBvciBgQ09ORklHX0lQVjZfU0lUYD8gTm8sIHRoZSBCUEYgaGVscGVyIGlzIGp1c3QgbWFuaXB1bGF0aW5nIHRoZSBTS0IgZGF0YSBhbmQgY2xlYXJpbmcgR1NPIGZsYWdzLiBJdCYjMzk7cyBub3QgYWN0dWFsbHkgY2FsbGluZyBpbnRvIEdSRSBvciBTSVQgbW9kdWxlcy4gSXQgdXRpbGl6ZXMgYHNpemVvZmAgZm9yIGhlYWRlcnMgbGlrZSBgc3RydWN0IGdyZV9iYXNlX2hkcmAsIGBzdHJ1Y3QgdWRwaGRyYCwgYHN0cnVjdCBpcGhkcmAsIGFuZCBgc3RydWN0IGlwdjZoZHJgLiBUaGVzZSBhcmUgZGVmaW5lZCBpbiBzdGFuZGFyZCBpbmNsdWRlIGZpbGVzIChgbGludXgvZ3JlLmhgLCBgbGludXgvdWRwLmhgLCBgbGludXgvaXAuaGAsIGBsaW51eC9pcHY2LmhgKSwgd2hpY2ggYXJlIGFsd2F5cyBhdmFpbGFibGUuIEFoLCB3YWl0LCBgJmx0O25ldC9jb3JlL2ZpbHRlci5jJmd0O2AgaW5jbHVkZXMgYCZsdDtuZXQvZ3JlLmgmZ3Q7YC4gTGV0IG1lIHF1aWNrbHkgY29uZmlybSBpZiB0aGF0IGhlYWRlciByZXF1aXJlcyBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiB0byBiZSBhY3RpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldC9ncmUuaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jLTU4LSNpbmNsdWRlIFx1MDAzY25ldC90Y3AuaFx1MDAzZVxubmV0L2NvcmUvZmlsdGVyLmM6NTk6I2luY2x1ZGUgXHUwMDNjbmV0L2dyZS5oXHUwMDNlXG5uZXQvY29yZS9maWx0ZXIuYy02MC0jaW5jbHVkZSBcdTAwM2NuZXQveGZybS5oXHUwMDNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTY5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBDb25maWd1cmF0aW9uIENvbnVuZHJ1bSoqCgpBbHJpZ2h0LCBzbyBpdCBsb29rcyBsaWtlIHRoaXMgaXMganVzdCBhYm91dCBpbmNsdWRpbmcgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgaGVhZGVycy4gU2ltcGxlIGVub3VnaC4gV2UgZGVmaW5pdGVseSBuZWVkIGBCUEZfU1lTQ0FMTGAgYW5kLCBzaW5jZSBgTkVUYCBpcyBmb3VuZGF0aW9uYWwsIHdlIGNhbiBqdXN0IGZvY3VzIG9uIHRoYXQgZmlyc3Qgb25lLiBIb2xkIG9uIGEgc2VjLCB0aG91Z2guIFNob3VsZCBJIGFsc28gaW5jbHVkZSBgQ09ORklHX05FVF9DTFNfQlBGYCBvciBgQ09ORklHX05FVF9BQ1RfQlBGYD8KCkkgZGlkIGNoZWNrIGVhcmxpZXIsIGFuZCBgYnBmX3Byb2dfdGVzdF9ydW5gIHNlZW1zIHRvIGRpcmVjdGx5IHN1cHBvcnQgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYC4gQnV0IHN5emthbGxlci4uLml0IG1pZ2h0IHVzZSBgdGNgIHVuZGVyIHRoZSBob29kIHRvIGF0dGFjaCB0aGUgcHJvZ3JhbS4gVGhlIGBzeXpfYnBmYCBkZXNjcmlwdGlvbnMgaW4gc3l6a2FsbGVyICpkbyogcmVmZXJlbmNlIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2AuIExldCYjMzk7cyBqdXN0IGJlIHRob3JvdWdoIGFuZCBjaGVjayB3aGV0aGVyIHN5emthbGxlciAqbmVlZHMqIGBORVRfQ0xTX0JQRmAgdG8gcnVuIHRoZSB0ZXN0IGNvcnJlY3RseS4KCkJlc3QgcHJhY3RpY2UgZGljdGF0ZXMgaGF2aW5nIGBORVRfQ0xTX0JQRmAgZW5hYmxlZCBhbnl3YXksIHNvIGxldCYjMzk7cyBnbyBhaGVhZCBhbmQgaW5jbHVkZSB0aGF0LiBBbmQgZm9yIGdvb2QgbWVhc3VyZSwgbGV0JiMzOTtzIGFsc28gYWRkIGBORVRfQUNUX0JQRmAuIEl0JiMzOTtzIGFsd2F5cyBiZXR0ZXIgdG8gYmUgaW5jbHVzaXZlLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHRoaXMga2luZCBvZiBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0NMU19CUEYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz01NTA9Y29uZmlnIE5FVF9DTFNfQ0dST1VQXG4tLVxubmV0L3NjaGVkL0tjb25maWctNTYxLVxubmV0L3NjaGVkL0tjb25maWc6NTYyOmNvbmZpZyBORVRfQ0xTX0JQRlxubmV0L3NjaGVkL0tjb25maWctNTYzLVx0dHJpc3RhdGUgXCYjMzQ7QlBGLWJhc2VkIGNsYXNzaWZpZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM3NjMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZDoKCioqRGl2aW5nIGludG8gTmV0d29yayBBY3Rpdml0eSB3aXRoIEJQRioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBoYW5kcy1vbi4gV2hlbiBJIHNlZSB0aGF0IG5vdGF0aW9uLCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyAmIzM0O0xldCYjMzk7cyBjaGVjayBgTkVUX0FDVF9CUEZgJiMzNDsuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIGFzc2VzcyBob3cgd2UgYXJlIGludGVyYWN0aW5nIHdpdGggdGhlIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgaG9va3MgcmVsYXRlZCB0byBuZXR3b3JrIGFjdGl2aXR5LiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHBlcmZvcm1hbmNlIG1vbml0b3JpbmcsIHBlcmhhcHMgc29tZSBzZWN1cml0eSBhbmFseXNpcywgb3IgZXZlbiBkZWVwZXIgcGFja2V0IG1hbmlwdWxhdGlvbi4gSSB3aWxsIG5vdyBleGFtaW5lIHRoaXMgc3BlY2lmaWMgZGF0YSBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbnMgcmVsYXRlZCB0byBuZXR3b3JrIGFjdGlvbnMuIFRoaXMgY291bGQgYmUgaW4gdGhlIGNvbnRleHQgb2YgdHJhZmZpYyBzaGFwaW5nLCBpbnRydXNpb24gZGV0ZWN0aW9uLCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIG9yIGFueSBudW1iZXIgb2YgbmV0d29yay1yZWxhdGVkIHRhc2tzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGRhdGEgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9BQ1RfQlBGJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9ODMwPWNvbmZpZyBORVRfQUNUX1ZMQU5cbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy04NDAtXG5uZXQvc2NoZWQvS2NvbmZpZzo4NDE6Y29uZmlnIE5FVF9BQ1RfQlBGXG5uZXQvc2NoZWQvS2NvbmZpZy04NDItXHR0cmlzdGF0ZSBcJiMzNDtCUEYgYmFzZWQgYWN0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MDU3CgkJCQkJCQlvdXRwdXQ6IDExNAoJCQkJCQkJdGhvdWdodHM6IDI0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSBpdHMgcG90ZW50aWFsIGltcGFjdCBhbmQgd2hldGhlciBpdCB3YXJyYW50cyBmdXJ0aGVyIHNjcnV0aW55LCBlc3BlY2lhbGx5IHRocm91Z2ggZnV6emluZy4gTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzIHRoYXQgSSBuZWVkIHRvIGFkZCBgQlBGX1NZU0NBTExgLCBgTkVUX0NMU19CUEZgLCBhbmQgYE5FVF9BQ1RfQlBGYCB0byBteSBtZW50YWwgY2hlY2tsaXN0IGZvciB0aGlzIGFyZWEuCgpGaXJzdCwgbGV0IG1lIGNvbmZpcm0gbXkgaW5pdGlhbCBvYnNlcnZhdGlvbi4gKmJwZl9za2JfYWRqdXN0X3Jvb20qIHNlZW1zIHRvIGJlIHRoZSBvbmx5IGZ1bmN0aW9uIG1vZGlmaWVkIGRpcmVjdGx5LiBZZXAsIGxvb2tzIGxpa2UgaXQuIEdvb2QuIFRoaXMgaXMgbXkgZm9jYWwgcG9pbnQuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBuZXcgZmxhZ3Mgd2l0aGluIGBicGZfc2tiX2FkanVzdF9yb29tYCwgc3BlY2lmaWNhbGx5IGZvciBjbGVhcmluZyB0dW5uZWwtc3BlY2lmaWMgR2VuZXJpYyBTZWdtZW50YXRpb24gT2ZmbG9hZCAoR1NPKSBmbGFncyBkdXJpbmcgZGVjYXBzdWxhdGlvbi4gVGhpcyBzY3JlYW1zICYjMzQ7bmV0d29ya2luZyBCUEYmIzM0OyB0byBtZS4KCkZ1bmN0aW9uYWxseSwgdGhpcyBpbXBhY3RzIHRoZSBjb3JlIEJQRiBuZXR3b3JraW5nIGxvZ2ljLCBhbmQgY3JpdGljYWxseSwgdGhpcyBjaGFuZ2UgKmlzKiB1c2VyLXNwYWNlIHJlYWNoYWJsZSB2aWEgQlBGIHByb2dyYW1zLCBwcmltYXJpbHkgVHJhZmZpYyBDb250cm9sIChUQykgQlBGIHByb2dyYW1zLiBCZWNhdXNlIG9mIGl0cyBwbGFjZSBpbiB0aGUgY29udHJvbCBwbGFuZSwgaXQmIzM5O3Mgd29ydGggZnV6emluZy4gVGhlIGludGVycGxheSB3aXRoIEdTTyBtYWtlcyBpdCBldmVuIG1vcmUgaW50ZXJlc3RpbmcgZm9yIG1lLgoKQWxyaWdodCwgdGltZSB0byBkaXN0aWxsIHRoaXMuIE15IHN1bW1hcnkgaXM6CgoqICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZSAtIFRoaXMgaXMgYSBjaGFuZ2UgdG8gYSBjcml0aWNhbCBCUEYgaGVscGVyIHJlYWNoYWJsZSB2aWEgdXNlci1zcGFjZS4KKiAgICoqRm9jdXNTeW1ib2xzOioqIGBicGZfc2tiX2FkanVzdF9yb29tYCAtIFRoaXMgaXMgdGhlIGNlbnRyYWwgZnVuY3Rpb24gYWZmZWN0ZWQuCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYEJQRl9TWVNDQUxMYCwgYE5FVF9DTFNfQlBGYCwgYE5FVF9BQ1RfQlBGYCAtIFRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSByZWxldmFudCB0byBlbmFibGluZyB0aGlzIGZ1bmN0aW9uYWxpdHkuCiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgZmxhZ3MgdG8gdGhlIGBicGZfc2tiX2FkanVzdF9yb29tYCBCUEYgaGVscGVyIGZvciBjbGVhcmluZyB0dW5uZWwtc3BlY2lmaWMgR1NPIGZsYWdzIGR1cmluZyBkZWNhcHN1bGF0aW9uLiBUaGlzIGNoYW5nZXMgY29yZSBCUEYgbmV0d29ya2luZyBsb2dpYyBhY2Nlc3NpYmxlIHRocm91Z2ggVEMgQlBGIHByb2dyYW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TkVUX0NMU19CUEYmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9CUEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc2tiX2FkanVzdF9yb29tJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbmV3IGZsYWdzIHRvIHRoZSBicGZfc2tiX2FkanVzdF9yb29tIEJQRiBoZWxwZXIgdG8gY2xlYXIgdHVubmVsLXNwZWNpZmljIEdTTyBmbGFncyBkdXJpbmcgZGVjYXBzdWxhdGlvbi4gVGhpcyBtb2RpZmllcyBjb3JlIEJQRiBuZXR3b3JraW5nIGxvZ2ljIHJlYWNoYWJsZSB2aWEgVEMgQlBGIHByb2dyYW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0JQRiYjMzQ7LAogICAgJiMzNDtORVRfQUNUX0JQRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9za2JfYWRqdXN0X3Jvb20mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBuZXcgZmxhZ3MgdG8gdGhlIGJwZl9za2JfYWRqdXN0X3Jvb20gQlBGIGhlbHBlciB0byBjbGVhciB0dW5uZWwtc3BlY2lmaWMgR1NPIGZsYWdzIGR1cmluZyBkZWNhcHN1bGF0aW9uLiBUaGlzIG1vZGlmaWVzIGNvcmUgQlBGIG5ldHdvcmtpbmcgbG9naWMgcmVhY2hhYmxlIHZpYSBUQyBCUEYgcHJvZ3JhbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgZmxhZ3MgZm9yIHRoZSBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgQlBGIGhlbHBlciB0byBzZWxlY3RpdmVseSBjbGVhciBHU08gdHVubmVsIGZsYWdzIGFuZCB0aGUgYHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uYCBmbGFnIGR1cmluZyBwYWNrZXQgZGVjYXBzdWxhdGlvbi4gVGhlIGNoYW5nZXMgY29uc2lzdCBvZiBiaXR3aXNlIG9wZXJhdGlvbnMgb24gZXhpc3RpbmcgYHNrYl9zaGFyZWRfaW5mb2AgZmllbGRzIChgZ3NvX3R5cGVgKSBhbmQgYHNrYmAgZmllbGRzIChgZW5jYXBzdWxhdGlvbmApLCBhcyB3ZWxsIGFzIGxlbmd0aCB2YWxpZGF0aW9uIGNoZWNrcyB0byBlbnN1cmUgdGhlIHBhY2tldCBpcyBzaHJ1bmsgYnkgYXQgbGVhc3QgdGhlIHNpemUgb2YgdGhlIGRlY2Fwc3VsYXRlZCBoZWFkZXJzLlxuXG5UaGVzZSBtb2RpZmljYXRpb25zIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBkdWUgdG8gaW5jb3JyZWN0IGxlbmd0aCBjYWxjdWxhdGlvbnMpIHdvdWxkIGJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY1M2I3NWRiMGQ2NDNlMTU0MGI4ZWE4YjE5YmFjMGIzMjhjY2EwOWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAxNjo0OTowMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaAppbmRleCBmZmQ5NmU4YjkyMGJkLi43MzJiMzVjYzA4ZDFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCkBAIC0zMDM4LDggJiM0MzszMDM4LDM0IEBAIHVuaW9uIGJwZl9hdHRyIHsKICAqCiAgKgkJKiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQqKiwKICAqCQkgICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNioqOgotICoJCSAgSW5kaWNhdGUgdGhlIG5ldyBJUCBoZWFkZXIgdmVyc2lvbiBhZnRlciBkZWNhcHN1bGF0aW5nIHRoZSBvdXRlcgotICoJCSAgSVAgaGVhZGVyLiBVc2VkIHdoZW4gdGhlIGlubmVyIGFuZCBvdXRlciBJUCB2ZXJzaW9ucyBhcmUgZGlmZmVyZW50LgomIzQzOyAqCQkgIEluZGljYXRlIHRoZSBuZXcgSVAgaGVhZGVyIHZlcnNpb24gYWZ0ZXIgZGVjYXBzdWxhdGluZyB0aGUKJiM0MzsgKgkJICBvdXRlciBJUCBoZWFkZXIuIFVzZWQgd2hlbiB0aGUgaW5uZXIgYW5kIG91dGVyIElQIHZlcnNpb25zCiYjNDM7ICoJCSAgYXJlIGRpZmZlcmVudC4gVGhlc2UgZmxhZ3Mgb25seSB0cmlnZ2VyIGEgcHJvdG9jb2wgY2hhbmdlCiYjNDM7ICoJCSAgd2l0aG91dCBjbGVhcmluZyBhbnkgdHVubmVsLXNwZWNpZmljIEdTTyBmbGFncy4KJiM0MzsgKgomIzQzOyAqCQkqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFKio6CiYjNDM7ICoJCSAgQ2xlYXIgR1JFIHR1bm5lbCBHU08gZmxhZ3MgKFNLQl9HU09fR1JFIGFuZCBTS0JfR1NPX0dSRV9DU1VNKQomIzQzOyAqCQkgIHdoZW4gZGVjYXBzdWxhdGluZyBhIEdSRSB0dW5uZWwuCiYjNDM7ICoKJiM0MzsgKgkJKiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCoqOgomIzQzOyAqCQkgIENsZWFyIFVEUCB0dW5uZWwgR1NPIGZsYWdzIChTS0JfR1NPX1VEUF9UVU5ORUwgYW5kCiYjNDM7ICoJCSAgU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0pIHdoZW4gZGVjYXBzdWxhdGluZyBhIFVEUCB0dW5uZWwuCiYjNDM7ICoKJiM0MzsgKgkJKiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCoqOgomIzQzOyAqCQkgIENsZWFyIElQSVAvU0lUIHR1bm5lbCBHU08gZmxhZyAoU0tCX0dTT19JUFhJUDQpIHdoZW4gZGVjYXBzdWxhdGluZwomIzQzOyAqCQkgIGEgdHVubmVsIHdpdGggYW4gb3V0ZXIgSVB2NCBoZWFkZXIgKElQdjQtaW4tSVB2NCBvciBJUHY2LWluLUlQdjQpLgomIzQzOyAqCiYjNDM7ICoJCSogKipCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYqKjoKJiM0MzsgKgkJICBDbGVhciBJUHY2IGVuY2Fwc3VsYXRpb24gdHVubmVsIEdTTyBmbGFnIChTS0JfR1NPX0lQWElQNikgd2hlbgomIzQzOyAqCQkgIGRlY2Fwc3VsYXRpbmcgYSB0dW5uZWwgd2l0aCBhbiBvdXRlciBJUHY2IGhlYWRlciAoSVB2Ni1pbi1JUHY2CiYjNDM7ICoJCSAgb3IgSVB2NC1pbi1JUHY2KS4KJiM0MzsgKgomIzQzOyAqCQlXaGVuIHVzaW5nIHRoZSBkZWNhcHN1bGF0aW9uIGZsYWdzIGFib3ZlLCB0aGUgc2tiLSZndDtlbmNhcHN1bGF0aW9uCiYjNDM7ICoJCWZsYWcgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkIGlmIGFsbCB0dW5uZWwtc3BlY2lmaWMgR1NPIGZsYWdzCiYjNDM7ICoJCShTS0JfR1NPX1VEUF9UVU5ORUwsIFNLQl9HU09fVURQX1RVTk5FTF9DU1VNLCBTS0JfR1NPX0dSRSwKJiM0MzsgKgkJU0tCX0dTT19HUkVfQ1NVTSwgU0tCX0dTT19JUFhJUDQsIFNLQl9HU09fSVBYSVA2KSBoYXZlIGJlZW4KJiM0MzsgKgkJcmVtb3ZlZCBmcm9tIHRoZSBwYWNrZXQuIFRoaXMgaGFuZGxlcyBjYXNlcyB3aGVyZSBhbGwgdHVubmVsCiYjNDM7ICoJCWxheWVycyBoYXZlIGJlZW4gZGVjYXBzdWxhdGVkLgogICoKICAqIAkJQSBjYWxsIHRvIHRoaXMgaGVscGVyIGlzIHN1c2NlcHRpYmxlIHRvIGNoYW5nZSB0aGUgdW5kZXJseWluZwogICogCQlwYWNrZXQgYnVmZmVyLiBUaGVyZWZvcmUsIGF0IGxvYWQgdGltZSwgYWxsIGNoZWNrcyBvbiBwb2ludGVycwpAQCAtNjI4Myw3ICYjNDM7NjMwOSw3IEBAIGVudW0gewogfTsKIAogLyogQlBGX0ZVTkNfc2tiX2FkanVzdF9yb29tIGZsYWdzLiAqLwotZW51bSB7CiYjNDM7ZW51bSBicGZfYWRqX3Jvb21fZmxhZ3MgewogCUJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTwk9ICgxVUxMICZsdDsmbHQ7IDApLAogCUJQRl9GX0FESl9ST09NX0VOQ0FQX0wzX0lQVjQJPSAoMVVMTCAmbHQ7Jmx0OyAxKSwKIAlCUEZfRl9BREpfUk9PTV9FTkNBUF9MM19JUFY2CT0gKDFVTEwgJmx0OyZsdDsgMiksCkBAIC02MjkzLDYgJiM0Mzs2MzE5LDEwIEBAIGVudW0gewogCUJQRl9GX0FESl9ST09NX0VOQ0FQX0wyX0VUSAk9ICgxVUxMICZsdDsmbHQ7IDYpLAogCUJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQJPSAoMVVMTCAmbHQ7Jmx0OyA3KSwKIAlCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY2CT0gKDFVTEwgJmx0OyZsdDsgOCksCiYjNDM7CUJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRQk9ICgxVUxMICZsdDsmbHQ7IDkpLAomIzQzOwlCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9VRFAJPSAoMVVMTCAmbHQ7Jmx0OyAxMCksCiYjNDM7CUJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNAk9ICgxVUxMICZsdDsmbHQ7IDExKSwKJiM0MzsJQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2CT0gKDFVTEwgJmx0OyZsdDsgMTIpLAogfTsKIAogZW51bSB7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDM0MjM3MzQxMjRhNWIuLjg5ZWZmZmYzYmM1MjUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC01Niw2ICYjNDM7NTYsNyBAQAogI2luY2x1ZGUgJmx0O25ldC9zb2NrX3JldXNlcG9ydC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9idXN5X3BvbGwuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvdGNwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9ncmUuaCZndDsKICNpbmNsdWRlICZsdDtuZXQveGZybS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC91ZHAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9icGZfdHJhY2UuaCZndDsKQEAgLTM1NzIsMTQgJiM0MzszNTczLDI3IEBAIHN0YXRpYyB1MzIgYnBmX3NrYl9uZXRfYmFzZV9sZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKICNkZWZpbmUgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSwkoQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNCB8IFwKIAkJCQkJIEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjYpCiAKLSNkZWZpbmUgQlBGX0ZfQURKX1JPT01fTUFTSwkJKEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTyB8IFwKLQkJCQkJIEJQRl9GX0FESl9ST09NX0VOQ0FQX0wzX01BU0sgfCBcCiYjNDM7I2RlZmluZSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLCShCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9VRFAgfCBcCiYjNDM7CQkJCQkgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFKQomIzQzOwomIzQzOyNkZWZpbmUgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTSwkoQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0IHwgXAomIzQzOwkJCQkJIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNikKJiM0MzsKJiM0MzsjZGVmaW5lIEJQRl9GX0FESl9ST09NX0VOQ0FQX01BU0sJKEJQRl9GX0FESl9ST09NX0VOQ0FQX0wzX01BU0sgfCBcCiAJCQkJCSBCUEZfRl9BREpfUk9PTV9FTkNBUF9MNF9HUkUgfCBcCiAJCQkJCSBCUEZfRl9BREpfUk9PTV9FTkNBUF9MNF9VRFAgfCBcCiAJCQkJCSBCUEZfRl9BREpfUk9PTV9FTkNBUF9MMl9FVEggfCBcCiAJCQkJCSBCUEZfRl9BREpfUk9PTV9FTkNBUF9MMiggXAotCQkJCQkgIEJQRl9BREpfUk9PTV9FTkNBUF9MMl9NQVNLKSB8IFwKLQkJCQkJIEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX01BU0spCiYjNDM7CQkJCQkgIEJQRl9BREpfUk9PTV9FTkNBUF9MMl9NQVNLKSkKJiM0MzsKJiM0MzsjZGVmaW5lIEJQRl9GX0FESl9ST09NX0RFQ0FQX01BU0sJKEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX01BU0sgfCBcCiYjNDM7CQkJCQkgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSyB8IFwKJiM0MzsJCQkJCSBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKQomIzQzOwomIzQzOyNkZWZpbmUgQlBGX0ZfQURKX1JPT01fTUFTSwkJKEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTyB8IFwKJiM0MzsJCQkJCSBCUEZfRl9BREpfUk9PTV9FTkNBUF9NQVNLIHwgXAomIzQzOwkJCQkJIEJQRl9GX0FESl9ST09NX0RFQ0FQX01BU0sgfCBcCiYjNDM7CQkJCQkgQlBGX0ZfQURKX1JPT01fTk9fQ1NVTV9SRVNFVCkKIAogc3RhdGljIGludCBicGZfc2tiX25ldF9ncm93KHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvZmYsIHUzMiBsZW5fZGlmZiwKIAkJCSAgICB1NjQgZmxhZ3MpCkBAIC0zNzAyLDggJiM0MzszNzE2LDggQEAgc3RhdGljIGludCBicGZfc2tiX25ldF9zaHJpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG9mZiwgdTMyIGxlbl9kaWZmLAogCWJvb2wgZGVjYXAgPSBmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19NQVNLOwogCWludCByZXQ7CiAKLQlpZiAodW5saWtlbHkoZmxhZ3MgJmFtcDsgfihCUEZfRl9BREpfUk9PTV9GSVhFRF9HU08gfAotCQkJICAgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX01BU0sgfAomIzQzOwlpZiAodW5saWtlbHkoZmxhZ3MgJmFtcDsgfihCUEZfRl9BREpfUk9PTV9ERUNBUF9NQVNLIHwKJiM0MzsJCQkgICAgICAgQlBGX0ZfQURKX1JPT01fRklYRURfR1NPIHwKIAkJCSAgICAgICBCUEZfRl9BREpfUk9PTV9OT19DU1VNX1JFU0VUKSkpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0zNzQwLDkgJiM0MzszNzU0LDQ4IEBAIHN0YXRpYyBpbnQgYnBmX3NrYl9uZXRfc2hyaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvZmYsIHUzMiBsZW5fZGlmZiwKIAkJaWYgKCEoZmxhZ3MgJmFtcDsgQlBGX0ZfQURKX1JPT01fRklYRURfR1NPKSkKIAkJCXNrYl9pbmNyZWFzZV9nc29fc2l6ZShzaGluZm8sIGxlbl9kaWZmKTsKIAomIzQzOwkJLyogU2VsZWN0aXZlIEdTTyBmbGFnIGNsZWFyaW5nIGJhc2VkIG9uIGRlY2FwIHR5cGUuCiYjNDM7CQkgKiBPbmx5IGNsZWFyIHRoZSBmbGFncyBmb3IgdGhlIHR1bm5lbCBsYXllciBiZWluZyByZW1vdmVkLgomIzQzOwkJICovCiYjNDM7CQlpZiAoKGZsYWdzICZhbXA7IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCkgJmFtcDsmYW1wOwomIzQzOwkJICAgIChzaGluZm8tJmd0O2dzb190eXBlICZhbXA7IChTS0JfR1NPX1VEUF9UVU5ORUwgfAomIzQzOwkJCQkJIFNLQl9HU09fVURQX1RVTk5FTF9DU1VNKSkpCiYjNDM7CQkJc2hpbmZvLSZndDtnc29fdHlwZSAmYW1wOz0gfihTS0JfR1NPX1VEUF9UVU5ORUwgfAomIzQzOwkJCQkJICAgICAgU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0pOwomIzQzOwkJaWYgKChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoc2hpbmZvLSZndDtnc29fdHlwZSAmYW1wOyAoU0tCX0dTT19HUkUgfCBTS0JfR1NPX0dSRV9DU1VNKSkpCiYjNDM7CQkJc2hpbmZvLSZndDtnc29fdHlwZSAmYW1wOz0gfihTS0JfR1NPX0dSRSB8CiYjNDM7CQkJCQkgICAgICBTS0JfR1NPX0dSRV9DU1VNKTsKJiM0MzsJCWlmICgoZmxhZ3MgJmFtcDsgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0KSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKHNoaW5mby0mZ3Q7Z3NvX3R5cGUgJmFtcDsgU0tCX0dTT19JUFhJUDQpKQomIzQzOwkJCXNoaW5mby0mZ3Q7Z3NvX3R5cGUgJmFtcDs9IH5TS0JfR1NPX0lQWElQNDsKJiM0MzsJCWlmICgoZmxhZ3MgJmFtcDsgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKHNoaW5mby0mZ3Q7Z3NvX3R5cGUgJmFtcDsgU0tCX0dTT19JUFhJUDYpKQomIzQzOwkJCXNoaW5mby0mZ3Q7Z3NvX3R5cGUgJmFtcDs9IH5TS0JfR1NPX0lQWElQNjsKJiM0MzsKJiM0MzsJCS8qIENsZWFyIGVuY2Fwc3VsYXRpb24gZmxhZyBvbmx5IHdoZW4gbm8gdHVubmVsIEdTTyBmbGFncyByZW1haW4gKi8KJiM0MzsJCWlmIChmbGFncyAmYW1wOyAoQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSyB8CiYjNDM7CQkJICAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKSkgewomIzQzOwkJCWlmICghKHNoaW5mby0mZ3Q7Z3NvX3R5cGUgJmFtcDsgKFNLQl9HU09fVURQX1RVTk5FTCB8CiYjNDM7CQkJCQkJICBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSB8CiYjNDM7CQkJCQkJICBTS0JfR1NPX0dSRSB8CiYjNDM7CQkJCQkJICBTS0JfR1NPX0dSRV9DU1VNIHwKJiM0MzsJCQkJCQkgIFNLQl9HU09fSVBYSVA0IHwKJiM0MzsJCQkJCQkgIFNLQl9HU09fSVBYSVA2IHwKJiM0MzsJCQkJCQkgIFNLQl9HU09fRVNQKSkpCiYjNDM7CQkJCWlmIChza2ItJmd0O2VuY2Fwc3VsYXRpb24pCiYjNDM7CQkJCQlza2ItJmd0O2VuY2Fwc3VsYXRpb24gPSAwOwomIzQzOwkJfQomIzQzOwogCQkvKiBIZWFkZXIgbXVzdCBiZSBjaGVja2VkLCBhbmQgZ3NvX3NlZ3MgcmVjb21wdXRlZC4gKi8KIAkJc2hpbmZvLSZndDtnc29fdHlwZSB8PSBTS0JfR1NPX0RPREdZOwogCQlzaGluZm8tJmd0O2dzb19zZWdzID0gMDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIEZvciBub24tR1NPIHBhY2tldHMsIGNsZWFyIGVuY2Fwc3VsYXRpb24gaWYgZGVjYXAgZmxhZ3MgYXJlIHNldCAqLwomIzQzOwkJaWYgKChmbGFncyAmYW1wOyAoQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSyB8CiYjNDM7CQkJICAgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTSykpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBza2ItJmd0O2VuY2Fwc3VsYXRpb24pCiYjNDM7CQkJc2tiLSZndDtlbmNhcHN1bGF0aW9uID0gMDsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTM4MDIsOCAmIzQzOzM4NTUsNyBAQCBCUEZfQ0FMTF80KGJwZl9za2JfYWRqdXN0X3Jvb20sIHN0cnVjdCBza19idWZmICosIHNrYiwgczMyLCBsZW5fZGlmZiwKIAl1MzIgb2ZmOwogCWludCByZXQ7CiAKLQlpZiAodW5saWtlbHkoZmxhZ3MgJmFtcDsgfihCUEZfRl9BREpfUk9PTV9NQVNLIHwKLQkJCSAgICAgICBCUEZfRl9BREpfUk9PTV9OT19DU1VNX1JFU0VUKSkpCiYjNDM7CWlmICh1bmxpa2VseShmbGFncyAmYW1wOyB+QlBGX0ZfQURKX1JPT01fTUFTSykpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmICh1bmxpa2VseShsZW5fZGlmZl9hYnMgJmd0OyAweGZmZlUpKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTM4MjIsMjAgJiM0MzszODc0LDUzIEBAIEJQRl9DQUxMXzQoYnBmX3NrYl9hZGp1c3Rfcm9vbSwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBzMzIsIGxlbl9kaWZmLAogCQlyZXR1cm4gLUVOT1RTVVBQOwogCX0KIAotCWlmIChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19NQVNLKSB7CiYjNDM7CWlmIChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9NQVNLKSB7CiYjNDM7CQl1MzIgbGVuX2RlY2FwX21pbiA9IDA7CiYjNDM7CiAJCWlmICghc2hyaW5rKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJc3dpdGNoIChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19NQVNLKSB7Ci0JCWNhc2UgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNDoKJiM0MzsJCS8qIFJlamVjdCBtdXR1YWxseSBleGNsdXNpdmUgZGVjYXAgZmxhZyBwYWlycy4gKi8KJiM0MzsJCWlmICgoZmxhZ3MgJmFtcDsgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSykgPT0KJiM0MzsJCSAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19NQVNLKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJaWYgKChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLKSA9PQomIzQzOwkJICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X01BU0spCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQlpZiAoKGZsYWdzICZhbXA7IEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0spID09CiYjNDM7CQkgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTSykKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCS8qIFJlamVjdCBtdXR1YWxseSBleGNsdXNpdmUgZGVjYXAgdHVubmVsIHR5cGUgZmxhZ3MuICovCiYjNDM7CQlpZiAoKGZsYWdzICZhbXA7IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X01BU0spICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoZmxhZ3MgJmFtcDsgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTSykpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQlpZiAoZmxhZ3MgJmFtcDsgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSykKJiM0MzsJCQlsZW5fZGVjYXBfbWluICYjNDM7PSBicGZfc2tiX25ldF9iYXNlX2xlbihza2IpOwomIzQzOwomIzQzOwkJaWYgKGZsYWdzICZhbXA7IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCkKJiM0MzsJCQlsZW5fZGVjYXBfbWluICYjNDM7PSBzaXplb2Yoc3RydWN0IHVkcGhkcik7CiYjNDM7CiYjNDM7CQlpZiAoZmxhZ3MgJmFtcDsgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFKQomIzQzOwkJCWxlbl9kZWNhcF9taW4gJiM0Mzs9IHNpemVvZihzdHJ1Y3QgZ3JlX2Jhc2VfaGRyKTsKJiM0MzsKJiM0MzsJCWlmIChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDQpCiYjNDM7CQkJbGVuX2RlY2FwX21pbiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcGhkcik7CiYjNDM7CiYjNDM7CQlpZiAoZmxhZ3MgJmFtcDsgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KQomIzQzOwkJCWxlbl9kZWNhcF9taW4gJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7CiYjNDM7CiYjNDM7CQlpZiAobGVuX2RpZmZfYWJzICZsdDsgbGVuX2RlY2FwX21pbikKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCWlmIChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0KQogCQkJbGVuX21pbiA9IHNpemVvZihzdHJ1Y3QgaXBoZHIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNjoKJiM0MzsKJiM0MzsJCWlmIChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY2KQogCQkJbGVuX21pbiA9IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9CiAJfQogCiAJbGVuX2N1ciA9IHNrYi0mZ3Q7bGVuIC0gc2tiX25ldHdvcmtfb2Zmc2V0KHNrYik7CmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKaW5kZXggZmZkOTZlOGI5MjBiZC4uNzMyYjM1Y2MwOGQxYyAxMDA2NDQKLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaApAQCAtMzAzOCw4ICYjNDM7MzAzOCwzNCBAQCB1bmlvbiBicGZfYXR0ciB7CiAgKgogICoJCSogKipCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0KiosCiAgKgkJICAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjYqKjoKLSAqCQkgIEluZGljYXRlIHRoZSBuZXcgSVAgaGVhZGVyIHZlcnNpb24gYWZ0ZXIgZGVjYXBzdWxhdGluZyB0aGUgb3V0ZXIKLSAqCQkgIElQIGhlYWRlci4gVXNlZCB3aGVuIHRoZSBpbm5lciBhbmQgb3V0ZXIgSVAgdmVyc2lvbnMgYXJlIGRpZmZlcmVudC4KJiM0MzsgKgkJICBJbmRpY2F0ZSB0aGUgbmV3IElQIGhlYWRlciB2ZXJzaW9uIGFmdGVyIGRlY2Fwc3VsYXRpbmcgdGhlCiYjNDM7ICoJCSAgb3V0ZXIgSVAgaGVhZGVyLiBVc2VkIHdoZW4gdGhlIGlubmVyIGFuZCBvdXRlciBJUCB2ZXJzaW9ucwomIzQzOyAqCQkgIGFyZSBkaWZmZXJlbnQuIFRoZXNlIGZsYWdzIG9ubHkgdHJpZ2dlciBhIHByb3RvY29sIGNoYW5nZQomIzQzOyAqCQkgIHdpdGhvdXQgY2xlYXJpbmcgYW55IHR1bm5lbC1zcGVjaWZpYyBHU08gZmxhZ3MuCiYjNDM7ICoKJiM0MzsgKgkJKiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRSoqOgomIzQzOyAqCQkgIENsZWFyIEdSRSB0dW5uZWwgR1NPIGZsYWdzIChTS0JfR1NPX0dSRSBhbmQgU0tCX0dTT19HUkVfQ1NVTSkKJiM0MzsgKgkJICB3aGVuIGRlY2Fwc3VsYXRpbmcgYSBHUkUgdHVubmVsLgomIzQzOyAqCiYjNDM7ICoJCSogKipCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9VRFAqKjoKJiM0MzsgKgkJICBDbGVhciBVRFAgdHVubmVsIEdTTyBmbGFncyAoU0tCX0dTT19VRFBfVFVOTkVMIGFuZAomIzQzOyAqCQkgIFNLQl9HU09fVURQX1RVTk5FTF9DU1VNKSB3aGVuIGRlY2Fwc3VsYXRpbmcgYSBVRFAgdHVubmVsLgomIzQzOyAqCiYjNDM7ICoJCSogKipCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDQqKjoKJiM0MzsgKgkJICBDbGVhciBJUElQL1NJVCB0dW5uZWwgR1NPIGZsYWcgKFNLQl9HU09fSVBYSVA0KSB3aGVuIGRlY2Fwc3VsYXRpbmcKJiM0MzsgKgkJICBhIHR1bm5lbCB3aXRoIGFuIG91dGVyIElQdjQgaGVhZGVyIChJUHY0LWluLUlQdjQgb3IgSVB2Ni1pbi1JUHY0KS4KJiM0MzsgKgomIzQzOyAqCQkqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2Kio6CiYjNDM7ICoJCSAgQ2xlYXIgSVB2NiBlbmNhcHN1bGF0aW9uIHR1bm5lbCBHU08gZmxhZyAoU0tCX0dTT19JUFhJUDYpIHdoZW4KJiM0MzsgKgkJICBkZWNhcHN1bGF0aW5nIGEgdHVubmVsIHdpdGggYW4gb3V0ZXIgSVB2NiBoZWFkZXIgKElQdjYtaW4tSVB2NgomIzQzOyAqCQkgIG9yIElQdjQtaW4tSVB2NikuCiYjNDM7ICoKJiM0MzsgKgkJV2hlbiB1c2luZyB0aGUgZGVjYXBzdWxhdGlvbiBmbGFncyBhYm92ZSwgdGhlIHNrYi0mZ3Q7ZW5jYXBzdWxhdGlvbgomIzQzOyAqCQlmbGFnIGlzIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCBpZiBhbGwgdHVubmVsLXNwZWNpZmljIEdTTyBmbGFncwomIzQzOyAqCQkoU0tCX0dTT19VRFBfVFVOTkVMLCBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSwgU0tCX0dTT19HUkUsCiYjNDM7ICoJCVNLQl9HU09fR1JFX0NTVU0sIFNLQl9HU09fSVBYSVA0LCBTS0JfR1NPX0lQWElQNikgaGF2ZSBiZWVuCiYjNDM7ICoJCXJlbW92ZWQgZnJvbSB0aGUgcGFja2V0LiBUaGlzIGhhbmRsZXMgY2FzZXMgd2hlcmUgYWxsIHR1bm5lbAomIzQzOyAqCQlsYXllcnMgaGF2ZSBiZWVuIGRlY2Fwc3VsYXRlZC4KICAqCiAgKiAJCUEgY2FsbCB0byB0aGlzIGhlbHBlciBpcyBzdXNjZXB0aWJsZSB0byBjaGFuZ2UgdGhlIHVuZGVybHlpbmcKICAqIAkJcGFja2V0IGJ1ZmZlci4gVGhlcmVmb3JlLCBhdCBsb2FkIHRpbWUsIGFsbCBjaGVja3Mgb24gcG9pbnRlcnMKQEAgLTYyODMsNyAmIzQzOzYzMDksNyBAQCBlbnVtIHsKIH07CiAKIC8qIEJQRl9GVU5DX3NrYl9hZGp1c3Rfcm9vbSBmbGFncy4gKi8KLWVudW0gewomIzQzO2VudW0gYnBmX2Fkal9yb29tX2ZsYWdzIHsKIAlCUEZfRl9BREpfUk9PTV9GSVhFRF9HU08JPSAoMVVMTCAmbHQ7Jmx0OyAwKSwKIAlCUEZfRl9BREpfUk9PTV9FTkNBUF9MM19JUFY0CT0gKDFVTEwgJmx0OyZsdDsgMSksCiAJQlBGX0ZfQURKX1JPT01fRU5DQVBfTDNfSVBWNgk9ICgxVUxMICZsdDsmbHQ7IDIpLApAQCAtNjI5Myw2ICYjNDM7NjMxOSwxMCBAQCBlbnVtIHsKIAlCUEZfRl9BREpfUk9PTV9FTkNBUF9MMl9FVEgJPSAoMVVMTCAmbHQ7Jmx0OyA2KSwKIAlCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0CT0gKDFVTEwgJmx0OyZsdDsgNyksCiAJQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNgk9ICgxVUxMICZsdDsmbHQ7IDgpLAomIzQzOwlCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUJPSAoMVVMTCAmbHQ7Jmx0OyA5KSwKJiM0MzsJQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQCT0gKDFVTEwgJmx0OyZsdDsgMTApLAomIzQzOwlCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDQJPSAoMVVMTCAmbHQ7Jmx0OyAxMSksCiYjNDM7CUJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNgk9ICgxVUxMICZsdDsmbHQ7IDEyKSwKIH07CiAKIGVudW0gewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF90Y190dW5uZWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfdGNfdHVubmVsLmMKaW5kZXggMWFhN2M5NDYzOTgwYi4uNjdiYTI3ZDY5MzQ3NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF90Y190dW5uZWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3RjX3R1bm5lbC5jCkBAIC00MzgsNyAmIzQzOzQzOCw2IEBAIHN0YXRpYyBpbnQgc2V0dXAodm9pZCkKIAlTWVMoZmFpbF9jbG9zZV9uc19jbGllbnQsICYjMzQ7aXAgbGluayBhZGQgJXMgdHlwZSB2ZXRoIHBlZXIgbmFtZSAlcyYjMzQ7LAogCSAgICAmIzM0O3ZldGgxIG10dSAxNTAwIG5ldG5zICYjMzQ7IENMSUVOVF9OUyAmIzM0OyBhZGRyZXNzICYjMzQ7IE1BQ19BRERSX1ZFVEgxLAogCSAgICAmIzM0O3ZldGgyIG10dSAxNTAwIG5ldG5zICYjMzQ7IFNFUlZFUl9OUyAmIzM0OyBhZGRyZXNzICYjMzQ7IE1BQ19BRERSX1ZFVEgyKTsKLQlTWVMoZmFpbF9jbG9zZV9uc19jbGllbnQsICYjMzQ7ZXRodG9vbCAtSyB2ZXRoMSB0c28gb2ZmJiMzNDspOwogCVNZUyhmYWlsX2Nsb3NlX25zX2NsaWVudCwgJiMzNDtpcCBsaW5rIHNldCB2ZXRoMSB1cCYjMzQ7KTsKIAluc3Rva2VuX3NlcnZlciA9IG9wZW5fbmV0bnMoU0VSVkVSX05TKTsKIAlpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbl9zZXJ2ZXIsICYjMzQ7b3BlbiBzZXJ2ZXIgbnMmIzM0OykpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y190dW5uZWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3R1bm5lbC5jCmluZGV4IDczNzZkZjQwNWE2YmUuLjg1M2JjYTk2MjkxMDMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3R1bm5lbC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3R1bm5lbC5jCkBAIC02LDYgJiM0Mzs2LDcgQEAKIAogI2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwogI2luY2x1ZGUgJmx0O2JwZi9icGZfZW5kaWFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfY29yZV9yZWFkLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2JwZl90cmFjaW5nX25ldC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7YnBmX2NvbXBpbGVyLmgmIzM0OwogCkBAIC0zNyw2ICYjNDM7MzgsMjIgQEAgc3RydWN0IHZ4bGFuaGRyX19fbG9jYWwgewogCiAjZGVmaW5lCUVYVFBST1RPX1ZYTEFOCTB4MQogCiYjNDM7I2RlZmluZSBTS0JfR1NPX1VEUF9UVU5ORUxfTUFTSwkoU0tCX0dTT19VRFBfVFVOTkVMIHwJCQlcCiYjNDM7CQkJCSBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSkKJiM0MzsKJiM0MzsjZGVmaW5lIFNLQl9HU09fVFVOTkVMX01BU0sJKFNLQl9HU09fVURQX1RVTk5FTF9NQVNLIHwJCVwKJiM0MzsJCQkJIFNLQl9HU09fR1JFIHwJCQkJXAomIzQzOwkJCQkgU0tCX0dTT19HUkVfQ1NVTSB8CQkJXAomIzQzOwkJCQkgU0tCX0dTT19JUFhJUDQgfAkJCVwKJiM0MzsJCQkJIFNLQl9HU09fSVBYSVA2IHwJCQlcCiYjNDM7CQkJCSBTS0JfR1NPX0VTUCkKJiM0MzsKJiM0MzsjZGVmaW5lIEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X01BU0sJKEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCB8CVwKJiM0MzsJCQkJCSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUpCiYjNDM7CiYjNDM7I2RlZmluZSBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLCShCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDQgfAlcCiYjNDM7CQkJCQkgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KQomIzQzOwogI2RlZmluZQlWWExBTl9GTEFHUyAgICAgYnBmX2h0b25sKDEmbHQ7Jmx0OzI3KQogI2RlZmluZQlWTklfSUQJCTEKICNkZWZpbmUJVlhMQU5fVk5JCWJwZl9odG9ubChWTklfSUQgJmx0OyZsdDsgOCkKQEAgLTU4OSw5ICYjNDM7NjA2LDEyIEBAIGludCBfX2VuY2FwX2lwNnZ4bGFuX2V0aChzdHJ1Y3QgX19za19idWZmICpza2IpCiAJCXJldHVybiBUQ19BQ1RfT0s7CiB9CiAKLXN0YXRpYyBpbnQgZGVjYXBfaW50ZXJuYWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiLCBpbnQgb2ZmLCBpbnQgbGVuLCBjaGFyIHByb3RvKQomIzQzO3N0YXRpYyBpbnQgZGVjYXBfaW50ZXJuYWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiLCBpbnQgb2ZmLCBpbnQgbGVuLCBjaGFyIHByb3RvLAomIzQzOwkJCSAgX191NjQgaXB4aXBfZmxhZykKIHsKIAlfX3U2NCBmbGFncyA9IEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTzsKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKmtza2I7CiYjNDM7CXN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNoaW5mbzsKIAlzdHJ1Y3QgaXB2Nl9vcHRfaGRyIGlwNl9vcHRfaGRyOwogCXN0cnVjdCBncmVfaGRyIGdyZWg7CiAJc3RydWN0IHVkcGhkciB1ZHBoOwpAQCAtNTk5LDEwICYjNDM7NjE5LDEyIEBAIHN0YXRpYyBpbnQgZGVjYXBfaW50ZXJuYWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiLCBpbnQgb2ZmLCBpbnQgbGVuLCBjaGFyIHByb3RvKQogCiAJc3dpdGNoIChwcm90bykgewogCWNhc2UgSVBQUk9UT19JUElQOgotCQlmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0OwomIzQzOwkJZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNCB8CiYjNDM7CQkJIGlweGlwX2ZsYWc7CiAJCWJyZWFrOwogCWNhc2UgSVBQUk9UT19JUFY2OgotCQlmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY2OwomIzQzOwkJZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNiB8CiYjNDM7CQkJIGlweGlwX2ZsYWc7CiAJCWJyZWFrOwogCWNhc2UgTkVYVEhEUl9ERVNUOgogCQlpZiAoYnBmX3NrYl9sb2FkX2J5dGVzKHNrYiwgb2ZmICYjNDM7IGxlbiwgJmFtcDtpcDZfb3B0X2hkciwKQEAgLTYxMCwxMCAmIzQzOzYzMiwxMiBAQCBzdGF0aWMgaW50IGRlY2FwX2ludGVybmFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiwgaW50IG9mZiwgaW50IGxlbiwgY2hhciBwcm90bykKIAkJCXJldHVybiBUQ19BQ1RfT0s7CiAJCXN3aXRjaCAoaXA2X29wdF9oZHIubmV4dGhkcikgewogCQljYXNlIElQUFJPVE9fSVBJUDoKLQkJCWZsYWdzIHw9IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQ7CiYjNDM7CQkJZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNCB8CiYjNDM7CQkJCSBpcHhpcF9mbGFnOwogCQkJYnJlYWs7CiAJCWNhc2UgSVBQUk9UT19JUFY2OgotCQkJZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNjsKJiM0MzsJCQlmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY2IHwKJiM0MzsJCQkJIGlweGlwX2ZsYWc7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXJldHVybiBUQ19BQ1RfT0s7CkBAIC02MjEsNiAmIzQzOzY0NSwxMSBAQCBzdGF0aWMgaW50IGRlY2FwX2ludGVybmFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiwgaW50IG9mZiwgaW50IGxlbiwgY2hhciBwcm90bykKIAkJYnJlYWs7CiAJY2FzZSBJUFBST1RPX0dSRToKIAkJb2xlbiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBncmVfaGRyKTsKJiM0MzsJCWlmICghYnBmX2NvcmVfZW51bV92YWx1ZV9leGlzdHMoZW51bSBicGZfYWRqX3Jvb21fZmxhZ3MsCiYjNDM7CQkJCQkJQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFKSkKJiM0MzsJCQlyZXR1cm4gVENfQUNUX1NIT1Q7CiYjNDM7CQlmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkU7CiYjNDM7CiAJCWlmIChicGZfc2tiX2xvYWRfYnl0ZXMoc2tiLCBvZmYgJiM0MzsgbGVuLCAmYW1wO2dyZWgsIHNpemVvZihncmVoKSkgJmx0OyAwKQogCQkJcmV0dXJuIFRDX0FDVF9PSzsKIAkJc3dpdGNoIChicGZfbnRvaHMoZ3JlaC5wcm90b2NvbCkpIHsKQEAgLTYzNCw2ICYjNDM7NjYzLDEwIEBAIHN0YXRpYyBpbnQgZGVjYXBfaW50ZXJuYWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiLCBpbnQgb2ZmLCBpbnQgbGVuLCBjaGFyIHByb3RvKQogCQlicmVhazsKIAljYXNlIElQUFJPVE9fVURQOgogCQlvbGVuICYjNDM7PSBzaXplb2Yoc3RydWN0IHVkcGhkcik7CiYjNDM7CQlpZiAoIWJwZl9jb3JlX2VudW1fdmFsdWVfZXhpc3RzKGVudW0gYnBmX2Fkal9yb29tX2ZsYWdzLAomIzQzOwkJCQkJCUJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCkpCiYjNDM7CQkJcmV0dXJuIFRDX0FDVF9TSE9UOwomIzQzOwkJZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQOwogCQlpZiAoYnBmX3NrYl9sb2FkX2J5dGVzKHNrYiwgb2ZmICYjNDM7IGxlbiwgJmFtcDt1ZHBoLCBzaXplb2YodWRwaCkpICZsdDsgMCkKIAkJCXJldHVybiBUQ19BQ1RfT0s7CiAJCXN3aXRjaCAoYnBmX250b2hzKHVkcGguZGVzdCkpIHsKQEAgLTY1NSw2ICYjNDM7Njg4LDQwIEBAIHN0YXRpYyBpbnQgZGVjYXBfaW50ZXJuYWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiLCBpbnQgb2ZmLCBpbnQgbGVuLCBjaGFyIHByb3RvKQogCWlmIChicGZfc2tiX2FkanVzdF9yb29tKHNrYiwgLW9sZW4sIEJQRl9BREpfUk9PTV9NQUMsIGZsYWdzKSkKIAkJcmV0dXJuIFRDX0FDVF9TSE9UOwogCiYjNDM7CWtza2IgPSBicGZfY2FzdF90b19rZXJuX2N0eChza2IpOwomIzQzOwlzaGluZm8gPSBicGZfY29yZV9jYXN0KGtza2ItJmd0O2hlYWQgJiM0Mzsga3NrYi0mZ3Q7ZW5kLCBzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvKTsKJiM0MzsJaWYgKHNoaW5mby0mZ3Q7Z3NvX3NpemUpIHsKJiM0MzsJCWlmICgoZmxhZ3MgJmFtcDsgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKHNoaW5mby0mZ3Q7Z3NvX3R5cGUgJmFtcDsgU0tCX0dTT19VRFBfVFVOTkVMX01BU0spKQomIzQzOwkJCXJldHVybiBUQ19BQ1RfU0hPVDsKJiM0MzsKJiM0MzsJCWlmICgoZmxhZ3MgJmFtcDsgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKHNoaW5mby0mZ3Q7Z3NvX3R5cGUgJmFtcDsgKFNLQl9HU09fR1JFIHwgU0tCX0dTT19HUkVfQ1NVTSkpKQomIzQzOwkJCXJldHVybiBUQ19BQ1RfU0hPVDsKJiM0MzsKJiM0MzsJCWlmICgoZmxhZ3MgJmFtcDsgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0KSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKHNoaW5mby0mZ3Q7Z3NvX3R5cGUgJmFtcDsgU0tCX0dTT19JUFhJUDQpKQomIzQzOwkJCXJldHVybiBUQ19BQ1RfU0hPVDsKJiM0MzsKJiM0MzsJCWlmICgoZmxhZ3MgJmFtcDsgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKHNoaW5mby0mZ3Q7Z3NvX3R5cGUgJmFtcDsgU0tCX0dTT19JUFhJUDYpKQomIzQzOwkJCXJldHVybiBUQ19BQ1RfU0hPVDsKJiM0MzsKJiM0MzsJCWlmIChmbGFncyAmYW1wOyAoQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSyB8CiYjNDM7CQkJICAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKSkgewomIzQzOwkJCWlmICgoc2hpbmZvLSZndDtnc29fdHlwZSAmYW1wOyBTS0JfR1NPX1RVTk5FTF9NQVNLKSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgICFrc2tiLSZndDtlbmNhcHN1bGF0aW9uKQomIzQzOwkJCQlyZXR1cm4gVENfQUNUX1NIT1Q7CiYjNDM7CQkJaWYgKCEoc2hpbmZvLSZndDtnc29fdHlwZSAmYW1wOyBTS0JfR1NPX1RVTk5FTF9NQVNLKSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgIGtza2ItJmd0O2VuY2Fwc3VsYXRpb24pCiYjNDM7CQkJCXJldHVybiBUQ19BQ1RfU0hPVDsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIGlmICgoZmxhZ3MgJmFtcDsgKEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X01BU0sgfAomIzQzOwkJCSAgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTSykpICZhbXA7JmFtcDsKJiM0MzsJCSAgIGtza2ItJmd0O2VuY2Fwc3VsYXRpb24pIHsKJiM0MzsJCXJldHVybiBUQ19BQ1RfU0hPVDsKJiM0MzsJfQomIzQzOwogCXJldHVybiBUQ19BQ1RfT0s7CiB9CiAKQEAgLTY2Miw2ICYjNDM7NzI5LDEwIEBAIHN0YXRpYyBpbnQgZGVjYXBfaXB2NChzdHJ1Y3QgX19za19idWZmICpza2IpCiB7CiAJc3RydWN0IGlwaGRyIGlwaF9vdXRlcjsKIAomIzQzOwlpZiAoIWJwZl9jb3JlX2VudW1fdmFsdWVfZXhpc3RzKGVudW0gYnBmX2Fkal9yb29tX2ZsYWdzLAomIzQzOwkJCQkJQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0KSkKJiM0MzsJCXJldHVybiBUQ19BQ1RfU0hPVDsKJiM0MzsKIAlpZiAoYnBmX3NrYl9sb2FkX2J5dGVzKHNrYiwgRVRIX0hMRU4sICZhbXA7aXBoX291dGVyLAogCQkJICAgICAgIHNpemVvZihpcGhfb3V0ZXIpKSAmbHQ7IDApCiAJCXJldHVybiBUQ19BQ1RfT0s7CkBAIC02NzAsMTkgJiM0Mzs3NDEsMjUgQEAgc3RhdGljIGludCBkZWNhcF9pcHY0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKIAkJcmV0dXJuIFRDX0FDVF9PSzsKIAogCXJldHVybiBkZWNhcF9pbnRlcm5hbChza2IsIEVUSF9ITEVOLCBzaXplb2YoaXBoX291dGVyKSwKLQkJCSAgICAgIGlwaF9vdXRlci5wcm90b2NvbCk7CiYjNDM7CQkJICAgICAgaXBoX291dGVyLnByb3RvY29sLAomIzQzOwkJCSAgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCk7CiB9CiAKIHN0YXRpYyBpbnQgZGVjYXBfaXB2NihzdHJ1Y3QgX19za19idWZmICpza2IpCiB7CiAJc3RydWN0IGlwdjZoZHIgaXBoX291dGVyOwogCiYjNDM7CWlmICghYnBmX2NvcmVfZW51bV92YWx1ZV9leGlzdHMoZW51bSBicGZfYWRqX3Jvb21fZmxhZ3MsCiYjNDM7CQkJCQlCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYpKQomIzQzOwkJcmV0dXJuIFRDX0FDVF9TSE9UOwomIzQzOwogCWlmIChicGZfc2tiX2xvYWRfYnl0ZXMoc2tiLCBFVEhfSExFTiwgJmFtcDtpcGhfb3V0ZXIsCiAJCQkgICAgICAgc2l6ZW9mKGlwaF9vdXRlcikpICZsdDsgMCkKIAkJcmV0dXJuIFRDX0FDVF9PSzsKIAogCXJldHVybiBkZWNhcF9pbnRlcm5hbChza2IsIEVUSF9ITEVOLCBzaXplb2YoaXBoX291dGVyKSwKLQkJCSAgICAgIGlwaF9vdXRlci5uZXh0aGRyKTsKJiM0MzsJCQkgICAgICBpcGhfb3V0ZXIubmV4dGhkciwKJiM0MzsJCQkgICAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYpOwogfQogCiBTRUMoJiMzNDt0YyYjMzQ7KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyMjYKCQkJCQkJCW91dHB1dDogMjIyCgkJCQkJCQl0aG91Z2h0czogMTA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBQYXRjaCBmb3IgYGJwZl9za2JfYWRqdXN0X3Jvb21gKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBpbnRyb2R1Y2luZyBzb21lIG5ldyBmbGFncyBmb3IgdGhlIGBicGZfc2tiX2FkanVzdF9yb29tYCBoZWxwZXIgaW4gQlBGLiBTcGVjaWZpY2FsbHksIHRoZXNlIGZsYWdzOiBgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFYCwgYEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUGAsIGBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDRgLCBhbmQgYEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNmAuIEl0IHNlZW1zIHRoZXNlIGFyZSBhbGwgYWJvdXQgc2VsZWN0aXZlbHkgY2xlYXJpbmcgR1NPIHR1bm5lbCBmbGFncyB3aGVuIHdlJiMzOTtyZSBkZWNhcHN1bGF0aW5nIHBhY2tldHMsIHdoaWNoIG1ha2VzIHNlbnNlLiBXZSBjYW4gc2VlIHRoaXMgbG9naWMgYXBwbGllZCB3aXRoaW4gYGJwZl9za2JfbmV0X3Nocmlua2AgYW5kIGBicGZfc2tiX2FkanVzdF9yb29tYC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zLCBzbyBsZXQmIzM5O3MgZGlnIGludG8gdGhlIGRldGFpbHMuIEkgc2VlIHRoYXQgYGJwZl9za2JfbmV0X3Nocmlua2AgaXMgZG9pbmcgY29uZGl0aW9uYWwgR1NPIGZsYWcgY2xlYXJpbmcgYmFzZWQgb24gdGhlICYjMzQ7ZGVjYXAgdHlwZSYjMzQ7LiBJdCYjMzk7cyBvbmx5IGNsZWFyaW5nIHRoZSBHU08gZmxhZ3MgdGhhdCBhcmUgcmVsZXZhbnQgdG8gdGhlIGxheWVyIGJlaW5nIHJlbW92ZWQsIHdoaWNoIGlzIGdvb2QuIFRoZW4gYGJwZl9za2JfYWRqdXN0X3Jvb21gIGlzIGJlaW5nIG1vZGlmaWVkIHRvIGNhbGN1bGF0ZSBgbGVuX2RlY2FwX21pbmAgYW5kIHZhbGlkYXRlIHRoYXQgdGhlIGNoYW5nZSBpbiBsZW5ndGggaXMgc3VmZmljaWVudCBmb3IgdGhlIGRlY2Fwc3VsYXRpb24uCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGludm9sdmUgbW9kaWZ5aW5nIGBzaGluZm8tJmd0O2dzb190eXBlYCBhbmQgYHNrYi0mZ3Q7ZW5jYXBzdWxhdGlvbmAgYmFzZWQgb24gdGhlc2UgbmV3IGZsYWdzLiBJJiMzOTttIGZvY3VzaW5nIG9uIHdoZXRoZXIgdGhlcmUmIzM5O3MgYW55IGNoYW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MsIGluZm9ybWF0aW9uIGxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBiZWluZyBpbnRyb2R1Y2VkLiBGcm9tIHdoYXQgSSBzZWUsIG5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBzZW50IHRvIHVzZXJzcGFjZS4gVGhlcmUmIzM5O3Mgbm8gZmFuY3kgbmV3IGFsbG9jYXRpb24gb2YgY29tcGxleCBzdHJ1Y3R1cmVzLCBhbmQgdGhlIGNoYW5nZSBpcyBsaW1pdGVkIHRvIGJpdHdpc2Ugb3BlcmF0aW9ucyBvbiBgZ3NvX3R5cGVgIGFuZCBgZW5jYXBzdWxhdGlvbmAuIEl0IGFsc28gY2hlY2tzIGBsZW5fZGlmZl9hYnNgIGFnYWluc3QgdGhlIG1pbmltdW0gbGVuZ3RoIHRvIHJlbW92ZS4KCkFscmlnaHQsIHNvIHRoZSBtb2RpZmljYXRpb25zIGFyZSBzdHJhaWdodGZvcndhcmQgYml0d2lzZSBvcGVyYXRpb25zIG9uIGV4aXN0aW5nIGZpZWxkcywgYW5kIHRoZXJlJiMzOTtzIGEgbGVuZ3RoIGNoZWNrIGJlaW5nIGRvbmUuIFRoaXMgc2hvdWxkIHByZXZlbnQgYW55IG91dC1vZi1ib3VuZHMgcmVhZHMuIEkgdGhpbmsgd2UgYXJlIGdvb2QgaGVyZSwgYXMgS01TQU4gc2hvdWxkbiYjMzk7dCBiZSBuZWVkZWQgYmVjYXVzZSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBzaG91bGQgaGFuZGxlIHRoZSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLgoKTGV0IG1lIGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIG1ha2Ugc3VyZS4gSSYjMzk7bGwgZG91YmxlLWNoZWNrIHdoYXQgYGJwZl9za2JfbmV0X2Jhc2VfbGVuYCBkb2VzLCBqdXN0IGluIGNhc2UgdGhhdCYjMzk7cyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBaCwgaXQganVzdCByZWFkcyBgc2tiLSZndDtwcm90b2NvbGAgYW5kIHJldHVybnMgdGhlIGJhc2UgaGVhZGVyIGxlbmd0aC4gSXQgbG9va3MgbGlrZSB0aGUgYGxlbl9kaWZmX2Fic2AgY2hlY2sgaW4gYGJwZl9za2JfYWRqdXN0X3Jvb21gIGVuc3VyZXMgd2UmIzM5O3JlIHNocmlua2luZyB0aGUgcGFja2V0IGJ5IGF0IGxlYXN0IHRoZSByZXF1aXJlZCBhbW91bnQsIGFuZCBLQVNBTiBzaG91bGQgaGFuZGxlIGFueXRoaW5nIHRoYXQgc2xpcHMgdGhyb3VnaC4KClRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IE5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlLiBUaGUgY2hhbmdlcyBzZWVtIGxvY2FsaXplZCBhbmQgc2FmZS4gVGhlIHBhdGNoIGlzIG1hbmlwdWxhdGluZyBleGlzdGluZyBCUEYgaGVscGVycyB0byBzZWxlY3RpdmVseSBjbGVhciBzb21lIGV4aXN0aW5nIGZsYWdzIGR1cmluZyBwYWNrZXQgZGVjYXBzdWxhdGlvbiwgdGhlcmUgYXJlIGFwcHJvcHJpYXRlIHNhZmV0eSBjaGVja3MgaW4gcGxhY2UsIGFuZCB0aGVyZSBhcmUgbm8gY2hhbmdlcyB0byBhbnkgZGF0YSBzdHJ1Y3R1cmUgdGhhdCB3b3VsZCBwb3RlbnRpYWxseSBhbGxvdyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYmUgcmVhZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgZmxhZ3MgZm9yIHRoZSBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgQlBGIGhlbHBlciB0byBzZWxlY3RpdmVseSBjbGVhciBHU08gdHVubmVsIGZsYWdzIGFuZCB0aGUgYHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uYCBmbGFnIGR1cmluZyBwYWNrZXQgZGVjYXBzdWxhdGlvbi4gVGhlIGNoYW5nZXMgY29uc2lzdCBvZiBiaXR3aXNlIG9wZXJhdGlvbnMgb24gZXhpc3RpbmcgYHNrYl9zaGFyZWRfaW5mb2AgZmllbGRzIChgZ3NvX3R5cGVgKSBhbmQgYHNrYmAgZmllbGRzIChgZW5jYXBzdWxhdGlvbmApLCBhcyB3ZWxsIGFzIGxlbmd0aCB2YWxpZGF0aW9uIGNoZWNrcyB0byBlbnN1cmUgdGhlIHBhY2tldCBpcyBzaHJ1bmsgYnkgYXQgbGVhc3QgdGhlIHNpemUgb2YgdGhlIGRlY2Fwc3VsYXRlZCBoZWFkZXJzLlxuXG5UaGVzZSBtb2RpZmljYXRpb25zIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBkdWUgdG8gaW5jb3JyZWN0IGxlbmd0aCBjYWxjdWxhdGlvbnMpIHdvdWxkIGJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBmbGFncyBmb3IgdGhlIGBicGZfc2tiX2FkanVzdF9yb29tYCBCUEYgaGVscGVyIHRvIHNlbGVjdGl2ZWx5IGNsZWFyIEdTTyB0dW5uZWwgZmxhZ3MgYW5kIHRoZSBgc2tiLVx1MDAzZWVuY2Fwc3VsYXRpb25gIGZsYWcgZHVyaW5nIHBhY2tldCBkZWNhcHN1bGF0aW9uLiBUaGUgY2hhbmdlcyBjb25zaXN0IG9mIGJpdHdpc2Ugb3BlcmF0aW9ucyBvbiBleGlzdGluZyBgc2tiX3NoYXJlZF9pbmZvYCBmaWVsZHMgKGBnc29fdHlwZWApIGFuZCBgc2tiYCBmaWVsZHMgKGBlbmNhcHN1bGF0aW9uYCksIGFzIHdlbGwgYXMgbGVuZ3RoIHZhbGlkYXRpb24gY2hlY2tzIHRvIGVuc3VyZSB0aGUgcGFja2V0IGlzIHNocnVuayBieSBhdCBsZWFzdCB0aGUgc2l6ZSBvZiB0aGUgZGVjYXBzdWxhdGVkIGhlYWRlcnMuXG5cblRoZXNlIG1vZGlmaWNhdGlvbnMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGR1ZSB0byBpbmNvcnJlY3QgbGVuZ3RoIGNhbGN1bGF0aW9ucykgd291bGQgYmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6NDk6MDEuMjU3NjQxNzg5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyMTc4MjAyNTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRfQ0xTX0JQRlwiLFxuICAgIFwiTkVUX0FDVF9CUEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc2tiX2FkanVzdF9yb29tXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBmbGFncyBmb3IgdGhlIGBicGZfc2tiX2FkanVzdF9yb29tYCBCUEYgaGVscGVyIHRvIHNlbGVjdGl2ZWx5IGNsZWFyIEdTTyB0dW5uZWwgZmxhZ3MgYW5kIHRoZSBgc2tiLVxcdTAwM2VlbmNhcHN1bGF0aW9uYCBmbGFnIGR1cmluZyBwYWNrZXQgZGVjYXBzdWxhdGlvbi4gVGhlIGNoYW5nZXMgY29uc2lzdCBvZiBiaXR3aXNlIG9wZXJhdGlvbnMgb24gZXhpc3RpbmcgYHNrYl9zaGFyZWRfaW5mb2AgZmllbGRzIChgZ3NvX3R5cGVgKSBhbmQgYHNrYmAgZmllbGRzIChgZW5jYXBzdWxhdGlvbmApLCBhcyB3ZWxsIGFzIGxlbmd0aCB2YWxpZGF0aW9uIGNoZWNrcyB0byBlbnN1cmUgdGhlIHBhY2tldCBpcyBzaHJ1bmsgYnkgYXQgbGVhc3QgdGhlIHNpemUgb2YgdGhlIGRlY2Fwc3VsYXRlZCBoZWFkZXJzLlxcblxcblRoZXNlIG1vZGlmaWNhdGlvbnMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGR1ZSB0byBpbmNvcnJlY3QgbGVuZ3RoIGNhbGN1bGF0aW9ucykgd291bGQgYmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG5ldyBmbGFncyB0byB0aGUgYnBmX3NrYl9hZGp1c3Rfcm9vbSBCUEYgaGVscGVyIHRvIGNsZWFyIHR1bm5lbC1zcGVjaWZpYyBHU08gZmxhZ3MgZHVyaW5nIGRlY2Fwc3VsYXRpb24uIFRoaXMgbW9kaWZpZXMgY29yZSBCUEYgbmV0d29ya2luZyBsb2dpYyByZWFjaGFibGUgdmlhIFRDIEJQRiBwcm9ncmFtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6NDk6MDEuMjU3NjQ4MTQ5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzM4ODgwNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmNTNiNzVkYjBkNjQzZTE1NDBiOGVhOGIxOWJhYzBiMzI4Y2NhMDllXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDEyIDE2OjQ5OjAwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxcbmluZGV4IGZmZDk2ZThiOTIwYmQuLjczMmIzNWNjMDhkMWMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuQEAgLTMwMzgsOCArMzAzOCwzNCBAQCB1bmlvbiBicGZfYXR0ciB7XFxuICAqXFxuICAqXFx0XFx0KiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQqKixcXG4gICpcXHRcXHQgICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNioqOlxcbi0gKlxcdFxcdCAgSW5kaWNhdGUgdGhlIG5ldyBJUCBoZWFkZXIgdmVyc2lvbiBhZnRlciBkZWNhcHN1bGF0aW5nIHRoZSBvdXRlclxcbi0gKlxcdFxcdCAgSVAgaGVhZGVyLiBVc2VkIHdoZW4gdGhlIGlubmVyIGFuZCBvdXRlciBJUCB2ZXJzaW9ucyBhcmUgZGlmZmVyZW50LlxcbisgKlxcdFxcdCAgSW5kaWNhdGUgdGhlIG5ldyBJUCBoZWFkZXIgdmVyc2lvbiBhZnRlciBkZWNhcHN1bGF0aW5nIHRoZVxcbisgKlxcdFxcdCAgb3V0ZXIgSVAgaGVhZGVyLiBVc2VkIHdoZW4gdGhlIGlubmVyIGFuZCBvdXRlciBJUCB2ZXJzaW9uc1xcbisgKlxcdFxcdCAgYXJlIGRpZmZlcmVudC4gVGhlc2UgZmxhZ3Mgb25seSB0cmlnZ2VyIGEgcHJvdG9jb2wgY2hhbmdlXFxuKyAqXFx0XFx0ICB3aXRob3V0IGNsZWFyaW5nIGFueSB0dW5uZWwtc3BlY2lmaWMgR1NPIGZsYWdzLlxcbisgKlxcbisgKlxcdFxcdCogKipCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUqKjpcXG4rICpcXHRcXHQgIENsZWFyIEdSRSB0dW5uZWwgR1NPIGZsYWdzIChTS0JfR1NPX0dSRSBhbmQgU0tCX0dTT19HUkVfQ1NVTSlcXG4rICpcXHRcXHQgIHdoZW4gZGVjYXBzdWxhdGluZyBhIEdSRSB0dW5uZWwuXFxuKyAqXFxuKyAqXFx0XFx0KiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCoqOlxcbisgKlxcdFxcdCAgQ2xlYXIgVURQIHR1bm5lbCBHU08gZmxhZ3MgKFNLQl9HU09fVURQX1RVTk5FTCBhbmRcXG4rICpcXHRcXHQgIFNLQl9HU09fVURQX1RVTk5FTF9DU1VNKSB3aGVuIGRlY2Fwc3VsYXRpbmcgYSBVRFAgdHVubmVsLlxcbisgKlxcbisgKlxcdFxcdCogKipCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDQqKjpcXG4rICpcXHRcXHQgIENsZWFyIElQSVAvU0lUIHR1bm5lbCBHU08gZmxhZyAoU0tCX0dTT19JUFhJUDQpIHdoZW4gZGVjYXBzdWxhdGluZ1xcbisgKlxcdFxcdCAgYSB0dW5uZWwgd2l0aCBhbiBvdXRlciBJUHY0IGhlYWRlciAoSVB2NC1pbi1JUHY0IG9yIElQdjYtaW4tSVB2NCkuXFxuKyAqXFxuKyAqXFx0XFx0KiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNioqOlxcbisgKlxcdFxcdCAgQ2xlYXIgSVB2NiBlbmNhcHN1bGF0aW9uIHR1bm5lbCBHU08gZmxhZyAoU0tCX0dTT19JUFhJUDYpIHdoZW5cXG4rICpcXHRcXHQgIGRlY2Fwc3VsYXRpbmcgYSB0dW5uZWwgd2l0aCBhbiBvdXRlciBJUHY2IGhlYWRlciAoSVB2Ni1pbi1JUHY2XFxuKyAqXFx0XFx0ICBvciBJUHY0LWluLUlQdjYpLlxcbisgKlxcbisgKlxcdFxcdFdoZW4gdXNpbmcgdGhlIGRlY2Fwc3VsYXRpb24gZmxhZ3MgYWJvdmUsIHRoZSBza2ItXFx1MDAzZWVuY2Fwc3VsYXRpb25cXG4rICpcXHRcXHRmbGFnIGlzIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCBpZiBhbGwgdHVubmVsLXNwZWNpZmljIEdTTyBmbGFnc1xcbisgKlxcdFxcdChTS0JfR1NPX1VEUF9UVU5ORUwsIFNLQl9HU09fVURQX1RVTk5FTF9DU1VNLCBTS0JfR1NPX0dSRSxcXG4rICpcXHRcXHRTS0JfR1NPX0dSRV9DU1VNLCBTS0JfR1NPX0lQWElQNCwgU0tCX0dTT19JUFhJUDYpIGhhdmUgYmVlblxcbisgKlxcdFxcdHJlbW92ZWQgZnJvbSB0aGUgcGFja2V0LiBUaGlzIGhhbmRsZXMgY2FzZXMgd2hlcmUgYWxsIHR1bm5lbFxcbisgKlxcdFxcdGxheWVycyBoYXZlIGJlZW4gZGVjYXBzdWxhdGVkLlxcbiAgKlxcbiAgKiBcXHRcXHRBIGNhbGwgdG8gdGhpcyBoZWxwZXIgaXMgc3VzY2VwdGlibGUgdG8gY2hhbmdlIHRoZSB1bmRlcmx5aW5nXFxuICAqIFxcdFxcdHBhY2tldCBidWZmZXIuIFRoZXJlZm9yZSwgYXQgbG9hZCB0aW1lLCBhbGwgY2hlY2tzIG9uIHBvaW50ZXJzXFxuQEAgLTYyODMsNyArNjMwOSw3IEBAIGVudW0ge1xcbiB9O1xcbiBcXG4gLyogQlBGX0ZVTkNfc2tiX2FkanVzdF9yb29tIGZsYWdzLiAqL1xcbi1lbnVtIHtcXG4rZW51bSBicGZfYWRqX3Jvb21fZmxhZ3Mge1xcbiBcXHRCUEZfRl9BREpfUk9PTV9GSVhFRF9HU09cXHQ9ICgxVUxMIFxcdTAwM2NcXHUwMDNjIDApLFxcbiBcXHRCUEZfRl9BREpfUk9PTV9FTkNBUF9MM19JUFY0XFx0PSAoMVVMTCBcXHUwMDNjXFx1MDAzYyAxKSxcXG4gXFx0QlBGX0ZfQURKX1JPT01fRU5DQVBfTDNfSVBWNlxcdD0gKDFVTEwgXFx1MDAzY1xcdTAwM2MgMiksXFxuQEAgLTYyOTMsNiArNjMxOSwxMCBAQCBlbnVtIHtcXG4gXFx0QlBGX0ZfQURKX1JPT01fRU5DQVBfTDJfRVRIXFx0PSAoMVVMTCBcXHUwMDNjXFx1MDAzYyA2KSxcXG4gXFx0QlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNFxcdD0gKDFVTEwgXFx1MDAzY1xcdTAwM2MgNyksXFxuIFxcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjZcXHQ9ICgxVUxMIFxcdTAwM2NcXHUwMDNjIDgpLFxcbitcXHRCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkVcXHQ9ICgxVUxMIFxcdTAwM2NcXHUwMDNjIDkpLFxcbitcXHRCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9VRFBcXHQ9ICgxVUxMIFxcdTAwM2NcXHUwMDNjIDEwKSxcXG4rXFx0QlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0XFx0PSAoMVVMTCBcXHUwMDNjXFx1MDAzYyAxMSksXFxuK1xcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNlxcdD0gKDFVTEwgXFx1MDAzY1xcdTAwM2MgMTIpLFxcbiB9O1xcbiBcXG4gZW51bSB7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcXG5pbmRleCAzNDIzNzM0MTI0YTViLi44OWVmZmZmM2JjNTI1IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXFxuKysrIGIvbmV0L2NvcmUvZmlsdGVyLmNcXG5AQCAtNTYsNiArNTYsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3NvY2tfcmV1c2Vwb3J0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvYnVzeV9wb2xsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvdGNwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvZ3JlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQveGZybS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3VkcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmX3RyYWNlLmhcXHUwMDNlXFxuQEAgLTM1NzIsMTQgKzM1NzMsMjcgQEAgc3RhdGljIHUzMiBicGZfc2tiX25ldF9iYXNlX2xlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAjZGVmaW5lIEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX01BU0tcXHQoQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNCB8IFxcXFxcXG4gXFx0XFx0XFx0XFx0XFx0IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjYpXFxuIFxcbi0jZGVmaW5lIEJQRl9GX0FESl9ST09NX01BU0tcXHRcXHQoQlBGX0ZfQURKX1JPT01fRklYRURfR1NPIHwgXFxcXFxcbi1cXHRcXHRcXHRcXHRcXHQgQlBGX0ZfQURKX1JPT01fRU5DQVBfTDNfTUFTSyB8IFxcXFxcXG4rI2RlZmluZSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLXFx0KEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRSlcXG4rXFxuKyNkZWZpbmUgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTS1xcdChCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDQgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYpXFxuK1xcbisjZGVmaW5lIEJQRl9GX0FESl9ST09NX0VOQ0FQX01BU0tcXHQoQlBGX0ZfQURKX1JPT01fRU5DQVBfTDNfTUFTSyB8IFxcXFxcXG4gXFx0XFx0XFx0XFx0XFx0IEJQRl9GX0FESl9ST09NX0VOQ0FQX0w0X0dSRSB8IFxcXFxcXG4gXFx0XFx0XFx0XFx0XFx0IEJQRl9GX0FESl9ST09NX0VOQ0FQX0w0X1VEUCB8IFxcXFxcXG4gXFx0XFx0XFx0XFx0XFx0IEJQRl9GX0FESl9ST09NX0VOQ0FQX0wyX0VUSCB8IFxcXFxcXG4gXFx0XFx0XFx0XFx0XFx0IEJQRl9GX0FESl9ST09NX0VOQ0FQX0wyKCBcXFxcXFxuLVxcdFxcdFxcdFxcdFxcdCAgQlBGX0FESl9ST09NX0VOQ0FQX0wyX01BU0spIHwgXFxcXFxcbi1cXHRcXHRcXHRcXHRcXHQgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSylcXG4rXFx0XFx0XFx0XFx0XFx0ICBCUEZfQURKX1JPT01fRU5DQVBfTDJfTUFTSykpXFxuK1xcbisjZGVmaW5lIEJQRl9GX0FESl9ST09NX0RFQ0FQX01BU0tcXHQoQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSyB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X01BU0sgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKVxcbitcXG4rI2RlZmluZSBCUEZfRl9BREpfUk9PTV9NQVNLXFx0XFx0KEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTyB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IEJQRl9GX0FESl9ST09NX0VOQ0FQX01BU0sgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBCUEZfRl9BREpfUk9PTV9ERUNBUF9NQVNLIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgQlBGX0ZfQURKX1JPT01fTk9fQ1NVTV9SRVNFVClcXG4gXFxuIHN0YXRpYyBpbnQgYnBmX3NrYl9uZXRfZ3JvdyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgb2ZmLCB1MzIgbGVuX2RpZmYsXFxuIFxcdFxcdFxcdCAgICB1NjQgZmxhZ3MpXFxuQEAgLTM3MDIsOCArMzcxNiw4IEBAIHN0YXRpYyBpbnQgYnBmX3NrYl9uZXRfc2hyaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvZmYsIHUzMiBsZW5fZGlmZixcXG4gXFx0Ym9vbCBkZWNhcCA9IGZsYWdzIFxcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSztcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdGlmICh1bmxpa2VseShmbGFncyBcXHUwMDI2IH4oQlBGX0ZfQURKX1JPT01fRklYRURfR1NPIHxcXG4tXFx0XFx0XFx0ICAgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX01BU0sgfFxcbitcXHRpZiAodW5saWtlbHkoZmxhZ3MgXFx1MDAyNiB+KEJQRl9GX0FESl9ST09NX0RFQ0FQX01BU0sgfFxcbitcXHRcXHRcXHQgICAgICAgQlBGX0ZfQURKX1JPT01fRklYRURfR1NPIHxcXG4gXFx0XFx0XFx0ICAgICAgIEJQRl9GX0FESl9ST09NX05PX0NTVU1fUkVTRVQpKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbkBAIC0zNzQwLDkgKzM3NTQsNDggQEAgc3RhdGljIGludCBicGZfc2tiX25ldF9zaHJpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG9mZiwgdTMyIGxlbl9kaWZmLFxcbiBcXHRcXHRpZiAoIShmbGFncyBcXHUwMDI2IEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTykpXFxuIFxcdFxcdFxcdHNrYl9pbmNyZWFzZV9nc29fc2l6ZShzaGluZm8sIGxlbl9kaWZmKTtcXG4gXFxuK1xcdFxcdC8qIFNlbGVjdGl2ZSBHU08gZmxhZyBjbGVhcmluZyBiYXNlZCBvbiBkZWNhcCB0eXBlLlxcbitcXHRcXHQgKiBPbmx5IGNsZWFyIHRoZSBmbGFncyBmb3IgdGhlIHR1bm5lbCBsYXllciBiZWluZyByZW1vdmVkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIChzaGluZm8tXFx1MDAzZWdzb190eXBlIFxcdTAwMjYgKFNLQl9HU09fVURQX1RVTk5FTCB8XFxuK1xcdFxcdFxcdFxcdFxcdCBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSkpKVxcbitcXHRcXHRcXHRzaGluZm8tXFx1MDAzZWdzb190eXBlIFxcdTAwMjY9IH4oU0tCX0dTT19VRFBfVFVOTkVMIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0pO1xcbitcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgKHNoaW5mby1cXHUwMDNlZ3NvX3R5cGUgXFx1MDAyNiAoU0tCX0dTT19HUkUgfCBTS0JfR1NPX0dSRV9DU1VNKSkpXFxuK1xcdFxcdFxcdHNoaW5mby1cXHUwMDNlZ3NvX3R5cGUgXFx1MDAyNj0gfihTS0JfR1NPX0dSRSB8XFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIFNLQl9HU09fR1JFX0NTVU0pO1xcbitcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0KSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgKHNoaW5mby1cXHUwMDNlZ3NvX3R5cGUgXFx1MDAyNiBTS0JfR1NPX0lQWElQNCkpXFxuK1xcdFxcdFxcdHNoaW5mby1cXHUwMDNlZ3NvX3R5cGUgXFx1MDAyNj0gflNLQl9HU09fSVBYSVA0O1xcbitcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgKHNoaW5mby1cXHUwMDNlZ3NvX3R5cGUgXFx1MDAyNiBTS0JfR1NPX0lQWElQNikpXFxuK1xcdFxcdFxcdHNoaW5mby1cXHUwMDNlZ3NvX3R5cGUgXFx1MDAyNj0gflNLQl9HU09fSVBYSVA2O1xcbitcXG4rXFx0XFx0LyogQ2xlYXIgZW5jYXBzdWxhdGlvbiBmbGFnIG9ubHkgd2hlbiBubyB0dW5uZWwgR1NPIGZsYWdzIHJlbWFpbiAqL1xcbitcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiAoQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSyB8XFxuK1xcdFxcdFxcdCAgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTSykpIHtcXG4rXFx0XFx0XFx0aWYgKCEoc2hpbmZvLVxcdTAwM2Vnc29fdHlwZSBcXHUwMDI2IChTS0JfR1NPX1VEUF9UVU5ORUwgfFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIFNLQl9HU09fVURQX1RVTk5FTF9DU1VNIHxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBTS0JfR1NPX0dSRSB8XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgU0tCX0dTT19HUkVfQ1NVTSB8XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgU0tCX0dTT19JUFhJUDQgfFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIFNLQl9HU09fSVBYSVA2IHxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBTS0JfR1NPX0VTUCkpKVxcbitcXHRcXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2VlbmNhcHN1bGF0aW9uKVxcbitcXHRcXHRcXHRcXHRcXHRza2ItXFx1MDAzZWVuY2Fwc3VsYXRpb24gPSAwO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHQvKiBIZWFkZXIgbXVzdCBiZSBjaGVja2VkLCBhbmQgZ3NvX3NlZ3MgcmVjb21wdXRlZC4gKi9cXG4gXFx0XFx0c2hpbmZvLVxcdTAwM2Vnc29fdHlwZSB8PSBTS0JfR1NPX0RPREdZO1xcbiBcXHRcXHRzaGluZm8tXFx1MDAzZWdzb19zZWdzID0gMDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogRm9yIG5vbi1HU08gcGFja2V0cywgY2xlYXIgZW5jYXBzdWxhdGlvbiBpZiBkZWNhcCBmbGFncyBhcmUgc2V0ICovXFxuK1xcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiAoQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSyB8XFxuK1xcdFxcdFxcdCAgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0spKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgc2tiLVxcdTAwM2VlbmNhcHN1bGF0aW9uKVxcbitcXHRcXHRcXHRza2ItXFx1MDAzZWVuY2Fwc3VsYXRpb24gPSAwO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMzgwMiw4ICszODU1LDcgQEAgQlBGX0NBTExfNChicGZfc2tiX2FkanVzdF9yb29tLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHMzMiwgbGVuX2RpZmYsXFxuIFxcdHUzMiBvZmY7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRpZiAodW5saWtlbHkoZmxhZ3MgXFx1MDAyNiB+KEJQRl9GX0FESl9ST09NX01BU0sgfFxcbi1cXHRcXHRcXHQgICAgICAgQlBGX0ZfQURKX1JPT01fTk9fQ1NVTV9SRVNFVCkpKVxcbitcXHRpZiAodW5saWtlbHkoZmxhZ3MgXFx1MDAyNiB+QlBGX0ZfQURKX1JPT01fTUFTSykpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRpZiAodW5saWtlbHkobGVuX2RpZmZfYWJzIFxcdTAwM2UgMHhmZmZVKSlcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuQEAgLTM4MjIsMjAgKzM4NzQsNTMgQEAgQlBGX0NBTExfNChicGZfc2tiX2FkanVzdF9yb29tLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHMzMiwgbGVuX2RpZmYsXFxuIFxcdFxcdHJldHVybiAtRU5PVFNVUFA7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX01BU0spIHtcXG4rXFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTUFTSykge1xcbitcXHRcXHR1MzIgbGVuX2RlY2FwX21pbiA9IDA7XFxuK1xcbiBcXHRcXHRpZiAoIXNocmluaylcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRcXHRzd2l0Y2ggKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSykge1xcbi1cXHRcXHRjYXNlIEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQ6XFxuK1xcdFxcdC8qIFJlamVjdCBtdXR1YWxseSBleGNsdXNpdmUgZGVjYXAgZmxhZyBwYWlycy4gKi9cXG4rXFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX01BU0spID09XFxuK1xcdFxcdCAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19NQVNLKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLKSA9PVxcbitcXHRcXHQgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSylcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTSykgPT1cXG4rXFx0XFx0ICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0spXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0LyogUmVqZWN0IG11dHVhbGx5IGV4Y2x1c2l2ZSBkZWNhcCB0dW5uZWwgdHlwZSBmbGFncy4gKi9cXG4rXFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X01BU0spIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAoZmxhZ3MgXFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLKVxcbitcXHRcXHRcXHRsZW5fZGVjYXBfbWluICs9IGJwZl9za2JfbmV0X2Jhc2VfbGVuKHNrYik7XFxuK1xcbitcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9VRFApXFxuK1xcdFxcdFxcdGxlbl9kZWNhcF9taW4gKz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xcbitcXG4rXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFKVxcbitcXHRcXHRcXHRsZW5fZGVjYXBfbWluICs9IHNpemVvZihzdHJ1Y3QgZ3JlX2Jhc2VfaGRyKTtcXG4rXFxuK1xcdFxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNClcXG4rXFx0XFx0XFx0bGVuX2RlY2FwX21pbiArPSBzaXplb2Yoc3RydWN0IGlwaGRyKTtcXG4rXFxuK1xcdFxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNilcXG4rXFx0XFx0XFx0bGVuX2RlY2FwX21pbiArPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpO1xcbitcXG4rXFx0XFx0aWYgKGxlbl9kaWZmX2FicyBcXHUwMDNjIGxlbl9kZWNhcF9taW4pXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNClcXG4gXFx0XFx0XFx0bGVuX21pbiA9IHNpemVvZihzdHJ1Y3QgaXBoZHIpO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY2OlxcbitcXG4rXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNilcXG4gXFx0XFx0XFx0bGVuX21pbiA9IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRsZW5fY3VyID0gc2tiLVxcdTAwM2VsZW4gLSBza2JfbmV0d29ya19vZmZzZXQoc2tiKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuaW5kZXggZmZkOTZlOGI5MjBiZC4uNzMyYjM1Y2MwOGQxYyAxMDA2NDRcXG4tLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcXG4rKysgYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcXG5AQCAtMzAzOCw4ICszMDM4LDM0IEBAIHVuaW9uIGJwZl9hdHRyIHtcXG4gICpcXG4gICpcXHRcXHQqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNCoqLFxcbiAgKlxcdFxcdCAgKipCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY2Kio6XFxuLSAqXFx0XFx0ICBJbmRpY2F0ZSB0aGUgbmV3IElQIGhlYWRlciB2ZXJzaW9uIGFmdGVyIGRlY2Fwc3VsYXRpbmcgdGhlIG91dGVyXFxuLSAqXFx0XFx0ICBJUCBoZWFkZXIuIFVzZWQgd2hlbiB0aGUgaW5uZXIgYW5kIG91dGVyIElQIHZlcnNpb25zIGFyZSBkaWZmZXJlbnQuXFxuKyAqXFx0XFx0ICBJbmRpY2F0ZSB0aGUgbmV3IElQIGhlYWRlciB2ZXJzaW9uIGFmdGVyIGRlY2Fwc3VsYXRpbmcgdGhlXFxuKyAqXFx0XFx0ICBvdXRlciBJUCBoZWFkZXIuIFVzZWQgd2hlbiB0aGUgaW5uZXIgYW5kIG91dGVyIElQIHZlcnNpb25zXFxuKyAqXFx0XFx0ICBhcmUgZGlmZmVyZW50LiBUaGVzZSBmbGFncyBvbmx5IHRyaWdnZXIgYSBwcm90b2NvbCBjaGFuZ2VcXG4rICpcXHRcXHQgIHdpdGhvdXQgY2xlYXJpbmcgYW55IHR1bm5lbC1zcGVjaWZpYyBHU08gZmxhZ3MuXFxuKyAqXFxuKyAqXFx0XFx0KiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRSoqOlxcbisgKlxcdFxcdCAgQ2xlYXIgR1JFIHR1bm5lbCBHU08gZmxhZ3MgKFNLQl9HU09fR1JFIGFuZCBTS0JfR1NPX0dSRV9DU1VNKVxcbisgKlxcdFxcdCAgd2hlbiBkZWNhcHN1bGF0aW5nIGEgR1JFIHR1bm5lbC5cXG4rICpcXG4rICpcXHRcXHQqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKio6XFxuKyAqXFx0XFx0ICBDbGVhciBVRFAgdHVubmVsIEdTTyBmbGFncyAoU0tCX0dTT19VRFBfVFVOTkVMIGFuZFxcbisgKlxcdFxcdCAgU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0pIHdoZW4gZGVjYXBzdWxhdGluZyBhIFVEUCB0dW5uZWwuXFxuKyAqXFxuKyAqXFx0XFx0KiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCoqOlxcbisgKlxcdFxcdCAgQ2xlYXIgSVBJUC9TSVQgdHVubmVsIEdTTyBmbGFnIChTS0JfR1NPX0lQWElQNCkgd2hlbiBkZWNhcHN1bGF0aW5nXFxuKyAqXFx0XFx0ICBhIHR1bm5lbCB3aXRoIGFuIG91dGVyIElQdjQgaGVhZGVyIChJUHY0LWluLUlQdjQgb3IgSVB2Ni1pbi1JUHY0KS5cXG4rICpcXG4rICpcXHRcXHQqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2Kio6XFxuKyAqXFx0XFx0ICBDbGVhciBJUHY2IGVuY2Fwc3VsYXRpb24gdHVubmVsIEdTTyBmbGFnIChTS0JfR1NPX0lQWElQNikgd2hlblxcbisgKlxcdFxcdCAgZGVjYXBzdWxhdGluZyBhIHR1bm5lbCB3aXRoIGFuIG91dGVyIElQdjYgaGVhZGVyIChJUHY2LWluLUlQdjZcXG4rICpcXHRcXHQgIG9yIElQdjQtaW4tSVB2NikuXFxuKyAqXFxuKyAqXFx0XFx0V2hlbiB1c2luZyB0aGUgZGVjYXBzdWxhdGlvbiBmbGFncyBhYm92ZSwgdGhlIHNrYi1cXHUwMDNlZW5jYXBzdWxhdGlvblxcbisgKlxcdFxcdGZsYWcgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkIGlmIGFsbCB0dW5uZWwtc3BlY2lmaWMgR1NPIGZsYWdzXFxuKyAqXFx0XFx0KFNLQl9HU09fVURQX1RVTk5FTCwgU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0sIFNLQl9HU09fR1JFLFxcbisgKlxcdFxcdFNLQl9HU09fR1JFX0NTVU0sIFNLQl9HU09fSVBYSVA0LCBTS0JfR1NPX0lQWElQNikgaGF2ZSBiZWVuXFxuKyAqXFx0XFx0cmVtb3ZlZCBmcm9tIHRoZSBwYWNrZXQuIFRoaXMgaGFuZGxlcyBjYXNlcyB3aGVyZSBhbGwgdHVubmVsXFxuKyAqXFx0XFx0bGF5ZXJzIGhhdmUgYmVlbiBkZWNhcHN1bGF0ZWQuXFxuICAqXFxuICAqIFxcdFxcdEEgY2FsbCB0byB0aGlzIGhlbHBlciBpcyBzdXNjZXB0aWJsZSB0byBjaGFuZ2UgdGhlIHVuZGVybHlpbmdcXG4gICogXFx0XFx0cGFja2V0IGJ1ZmZlci4gVGhlcmVmb3JlLCBhdCBsb2FkIHRpbWUsIGFsbCBjaGVja3Mgb24gcG9pbnRlcnNcXG5AQCAtNjI4Myw3ICs2MzA5LDcgQEAgZW51bSB7XFxuIH07XFxuIFxcbiAvKiBCUEZfRlVOQ19za2JfYWRqdXN0X3Jvb20gZmxhZ3MuICovXFxuLWVudW0ge1xcbitlbnVtIGJwZl9hZGpfcm9vbV9mbGFncyB7XFxuIFxcdEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTT1xcdD0gKDFVTEwgXFx1MDAzY1xcdTAwM2MgMCksXFxuIFxcdEJQRl9GX0FESl9ST09NX0VOQ0FQX0wzX0lQVjRcXHQ9ICgxVUxMIFxcdTAwM2NcXHUwMDNjIDEpLFxcbiBcXHRCUEZfRl9BREpfUk9PTV9FTkNBUF9MM19JUFY2XFx0PSAoMVVMTCBcXHUwMDNjXFx1MDAzYyAyKSxcXG5AQCAtNjI5Myw2ICs2MzE5LDEwIEBAIGVudW0ge1xcbiBcXHRCUEZfRl9BREpfUk9PTV9FTkNBUF9MMl9FVEhcXHQ9ICgxVUxMIFxcdTAwM2NcXHUwMDNjIDYpLFxcbiBcXHRCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0XFx0PSAoMVVMTCBcXHUwMDNjXFx1MDAzYyA3KSxcXG4gXFx0QlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNlxcdD0gKDFVTEwgXFx1MDAzY1xcdTAwM2MgOCksXFxuK1xcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRVxcdD0gKDFVTEwgXFx1MDAzY1xcdTAwM2MgOSksXFxuK1xcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUFxcdD0gKDFVTEwgXFx1MDAzY1xcdTAwM2MgMTApLFxcbitcXHRCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDRcXHQ9ICgxVUxMIFxcdTAwM2NcXHUwMDNjIDExKSxcXG4rXFx0QlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2XFx0PSAoMVVMTCBcXHUwMDNjXFx1MDAzYyAxMiksXFxuIH07XFxuIFxcbiBlbnVtIHtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF90Y190dW5uZWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfdGNfdHVubmVsLmNcXG5pbmRleCAxYWE3Yzk0NjM5ODBiLi42N2JhMjdkNjkzNDc0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfdGNfdHVubmVsLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3RjX3R1bm5lbC5jXFxuQEAgLTQzOCw3ICs0MzgsNiBAQCBzdGF0aWMgaW50IHNldHVwKHZvaWQpXFxuIFxcdFNZUyhmYWlsX2Nsb3NlX25zX2NsaWVudCwgXFxcImlwIGxpbmsgYWRkICVzIHR5cGUgdmV0aCBwZWVyIG5hbWUgJXNcXFwiLFxcbiBcXHQgICAgXFxcInZldGgxIG10dSAxNTAwIG5ldG5zIFxcXCIgQ0xJRU5UX05TIFxcXCIgYWRkcmVzcyBcXFwiIE1BQ19BRERSX1ZFVEgxLFxcbiBcXHQgICAgXFxcInZldGgyIG10dSAxNTAwIG5ldG5zIFxcXCIgU0VSVkVSX05TIFxcXCIgYWRkcmVzcyBcXFwiIE1BQ19BRERSX1ZFVEgyKTtcXG4tXFx0U1lTKGZhaWxfY2xvc2VfbnNfY2xpZW50LCBcXFwiZXRodG9vbCAtSyB2ZXRoMSB0c28gb2ZmXFxcIik7XFxuIFxcdFNZUyhmYWlsX2Nsb3NlX25zX2NsaWVudCwgXFxcImlwIGxpbmsgc2V0IHZldGgxIHVwXFxcIik7XFxuIFxcdG5zdG9rZW5fc2VydmVyID0gb3Blbl9uZXRucyhTRVJWRVJfTlMpO1xcbiBcXHRpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbl9zZXJ2ZXIsIFxcXCJvcGVuIHNlcnZlciBuc1xcXCIpKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y190dW5uZWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3R1bm5lbC5jXFxuaW5kZXggNzM3NmRmNDA1YTZiZS4uODUzYmNhOTYyOTEwMyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y190dW5uZWwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3R1bm5lbC5jXFxuQEAgLTYsNiArNiw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2VuZGlhbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9jb3JlX3JlYWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImJwZl90cmFjaW5nX25ldC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiYnBmX2NvbXBpbGVyLmhcXFwiXFxuIFxcbkBAIC0zNyw2ICszOCwyMiBAQCBzdHJ1Y3QgdnhsYW5oZHJfX19sb2NhbCB7XFxuIFxcbiAjZGVmaW5lXFx0RVhUUFJPVE9fVlhMQU5cXHQweDFcXG4gXFxuKyNkZWZpbmUgU0tCX0dTT19VRFBfVFVOTkVMX01BU0tcXHQoU0tCX0dTT19VRFBfVFVOTkVMIHxcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdCBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSlcXG4rXFxuKyNkZWZpbmUgU0tCX0dTT19UVU5ORUxfTUFTS1xcdChTS0JfR1NPX1VEUF9UVU5ORUxfTUFTSyB8XFx0XFx0XFxcXFxcbitcXHRcXHRcXHRcXHQgU0tCX0dTT19HUkUgfFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0IFNLQl9HU09fR1JFX0NTVU0gfFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0IFNLQl9HU09fSVBYSVA0IHxcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdCBTS0JfR1NPX0lQWElQNiB8XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHRcXHQgU0tCX0dTT19FU1ApXFxuK1xcbisjZGVmaW5lIEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X01BU0tcXHQoQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQIHxcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUpXFxuK1xcbisjZGVmaW5lIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0tcXHQoQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0IHxcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYpXFxuK1xcbiAjZGVmaW5lXFx0VlhMQU5fRkxBR1MgICAgIGJwZl9odG9ubCgxXFx1MDAzY1xcdTAwM2MyNylcXG4gI2RlZmluZVxcdFZOSV9JRFxcdFxcdDFcXG4gI2RlZmluZVxcdFZYTEFOX1ZOSVxcdGJwZl9odG9ubChWTklfSUQgXFx1MDAzY1xcdTAwM2MgOClcXG5AQCAtNTg5LDkgKzYwNiwxMiBAQCBpbnQgX19lbmNhcF9pcDZ2eGxhbl9ldGgoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRyZXR1cm4gVENfQUNUX09LO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGRlY2FwX2ludGVybmFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiwgaW50IG9mZiwgaW50IGxlbiwgY2hhciBwcm90bylcXG4rc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8sXFxuK1xcdFxcdFxcdCAgX191NjQgaXB4aXBfZmxhZylcXG4ge1xcbiBcXHRfX3U2NCBmbGFncyA9IEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTztcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKmtza2I7XFxuK1xcdHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNoaW5mbztcXG4gXFx0c3RydWN0IGlwdjZfb3B0X2hkciBpcDZfb3B0X2hkcjtcXG4gXFx0c3RydWN0IGdyZV9oZHIgZ3JlaDtcXG4gXFx0c3RydWN0IHVkcGhkciB1ZHBoO1xcbkBAIC01OTksMTAgKzYxOSwxMiBAQCBzdGF0aWMgaW50IGRlY2FwX2ludGVybmFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiwgaW50IG9mZiwgaW50IGxlbiwgY2hhciBwcm90bylcXG4gXFxuIFxcdHN3aXRjaCAocHJvdG8pIHtcXG4gXFx0Y2FzZSBJUFBST1RPX0lQSVA6XFxuLVxcdFxcdGZsYWdzIHw9IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQ7XFxuK1xcdFxcdGZsYWdzIHw9IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQgfFxcbitcXHRcXHRcXHQgaXB4aXBfZmxhZztcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgSVBQUk9UT19JUFY2Olxcbi1cXHRcXHRmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY2O1xcbitcXHRcXHRmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY2IHxcXG4rXFx0XFx0XFx0IGlweGlwX2ZsYWc7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIE5FWFRIRFJfREVTVDpcXG4gXFx0XFx0aWYgKGJwZl9za2JfbG9hZF9ieXRlcyhza2IsIG9mZiArIGxlbiwgXFx1MDAyNmlwNl9vcHRfaGRyLFxcbkBAIC02MTAsMTAgKzYzMiwxMiBAQCBzdGF0aWMgaW50IGRlY2FwX2ludGVybmFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiwgaW50IG9mZiwgaW50IGxlbiwgY2hhciBwcm90bylcXG4gXFx0XFx0XFx0cmV0dXJuIFRDX0FDVF9PSztcXG4gXFx0XFx0c3dpdGNoIChpcDZfb3B0X2hkci5uZXh0aGRyKSB7XFxuIFxcdFxcdGNhc2UgSVBQUk9UT19JUElQOlxcbi1cXHRcXHRcXHRmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0O1xcbitcXHRcXHRcXHRmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0IHxcXG4rXFx0XFx0XFx0XFx0IGlweGlwX2ZsYWc7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIElQUFJPVE9fSVBWNjpcXG4tXFx0XFx0XFx0ZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNjtcXG4rXFx0XFx0XFx0ZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNiB8XFxuK1xcdFxcdFxcdFxcdCBpcHhpcF9mbGFnO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZGVmYXVsdDpcXG4gXFx0XFx0XFx0cmV0dXJuIFRDX0FDVF9PSztcXG5AQCAtNjIxLDYgKzY0NSwxMSBAQCBzdGF0aWMgaW50IGRlY2FwX2ludGVybmFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiwgaW50IG9mZiwgaW50IGxlbiwgY2hhciBwcm90bylcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgSVBQUk9UT19HUkU6XFxuIFxcdFxcdG9sZW4gKz0gc2l6ZW9mKHN0cnVjdCBncmVfaGRyKTtcXG4rXFx0XFx0aWYgKCFicGZfY29yZV9lbnVtX3ZhbHVlX2V4aXN0cyhlbnVtIGJwZl9hZGpfcm9vbV9mbGFncyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0QlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFKSlcXG4rXFx0XFx0XFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xcbitcXHRcXHRmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkU7XFxuK1xcbiBcXHRcXHRpZiAoYnBmX3NrYl9sb2FkX2J5dGVzKHNrYiwgb2ZmICsgbGVuLCBcXHUwMDI2Z3JlaCwgc2l6ZW9mKGdyZWgpKSBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiBUQ19BQ1RfT0s7XFxuIFxcdFxcdHN3aXRjaCAoYnBmX250b2hzKGdyZWgucHJvdG9jb2wpKSB7XFxuQEAgLTYzNCw2ICs2NjMsMTAgQEAgc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8pXFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIElQUFJPVE9fVURQOlxcbiBcXHRcXHRvbGVuICs9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcXG4rXFx0XFx0aWYgKCFicGZfY29yZV9lbnVtX3ZhbHVlX2V4aXN0cyhlbnVtIGJwZl9hZGpfcm9vbV9mbGFncyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0QlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKSlcXG4rXFx0XFx0XFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xcbitcXHRcXHRmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9VRFA7XFxuIFxcdFxcdGlmIChicGZfc2tiX2xvYWRfYnl0ZXMoc2tiLCBvZmYgKyBsZW4sIFxcdTAwMjZ1ZHBoLCBzaXplb2YodWRwaCkpIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cmV0dXJuIFRDX0FDVF9PSztcXG4gXFx0XFx0c3dpdGNoIChicGZfbnRvaHModWRwaC5kZXN0KSkge1xcbkBAIC02NTUsNiArNjg4LDQwIEBAIHN0YXRpYyBpbnQgZGVjYXBfaW50ZXJuYWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiLCBpbnQgb2ZmLCBpbnQgbGVuLCBjaGFyIHByb3RvKVxcbiBcXHRpZiAoYnBmX3NrYl9hZGp1c3Rfcm9vbShza2IsIC1vbGVuLCBCUEZfQURKX1JPT01fTUFDLCBmbGFncykpXFxuIFxcdFxcdHJldHVybiBUQ19BQ1RfU0hPVDtcXG4gXFxuK1xcdGtza2IgPSBicGZfY2FzdF90b19rZXJuX2N0eChza2IpO1xcbitcXHRzaGluZm8gPSBicGZfY29yZV9jYXN0KGtza2ItXFx1MDAzZWhlYWQgKyBrc2tiLVxcdTAwM2VlbmQsIHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pO1xcbitcXHRpZiAoc2hpbmZvLVxcdTAwM2Vnc29fc2l6ZSkge1xcbitcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgKHNoaW5mby1cXHUwMDNlZ3NvX3R5cGUgXFx1MDAyNiBTS0JfR1NPX1VEUF9UVU5ORUxfTUFTSykpXFxuK1xcdFxcdFxcdHJldHVybiBUQ19BQ1RfU0hPVDtcXG4rXFxuK1xcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAoc2hpbmZvLVxcdTAwM2Vnc29fdHlwZSBcXHUwMDI2IChTS0JfR1NPX0dSRSB8IFNLQl9HU09fR1JFX0NTVU0pKSlcXG4rXFx0XFx0XFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xcbitcXG4rXFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIChzaGluZm8tXFx1MDAzZWdzb190eXBlIFxcdTAwMjYgU0tCX0dTT19JUFhJUDQpKVxcbitcXHRcXHRcXHRyZXR1cm4gVENfQUNUX1NIT1Q7XFxuK1xcbitcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgKHNoaW5mby1cXHUwMDNlZ3NvX3R5cGUgXFx1MDAyNiBTS0JfR1NPX0lQWElQNikpXFxuK1xcdFxcdFxcdHJldHVybiBUQ19BQ1RfU0hPVDtcXG4rXFxuK1xcdFxcdGlmIChmbGFncyBcXHUwMDI2IChCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLIHxcXG4rXFx0XFx0XFx0ICAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKSkge1xcbitcXHRcXHRcXHRpZiAoKHNoaW5mby1cXHUwMDNlZ3NvX3R5cGUgXFx1MDAyNiBTS0JfR1NPX1RVTk5FTF9NQVNLKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgIWtza2ItXFx1MDAzZWVuY2Fwc3VsYXRpb24pXFxuK1xcdFxcdFxcdFxcdHJldHVybiBUQ19BQ1RfU0hPVDtcXG4rXFx0XFx0XFx0aWYgKCEoc2hpbmZvLVxcdTAwM2Vnc29fdHlwZSBcXHUwMDI2IFNLQl9HU09fVFVOTkVMX01BU0spIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICBrc2tiLVxcdTAwM2VlbmNhcHN1bGF0aW9uKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gVENfQUNUX1NIT1Q7XFxuK1xcdFxcdH1cXG4rXFx0fSBlbHNlIGlmICgoZmxhZ3MgXFx1MDAyNiAoQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSyB8XFxuK1xcdFxcdFxcdCAgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTSykpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgIGtza2ItXFx1MDAzZWVuY2Fwc3VsYXRpb24pIHtcXG4rXFx0XFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xcbitcXHR9XFxuK1xcbiBcXHRyZXR1cm4gVENfQUNUX09LO1xcbiB9XFxuIFxcbkBAIC02NjIsNiArNzI5LDEwIEBAIHN0YXRpYyBpbnQgZGVjYXBfaXB2NChzdHJ1Y3QgX19za19idWZmICpza2IpXFxuIHtcXG4gXFx0c3RydWN0IGlwaGRyIGlwaF9vdXRlcjtcXG4gXFxuK1xcdGlmICghYnBmX2NvcmVfZW51bV92YWx1ZV9leGlzdHMoZW51bSBicGZfYWRqX3Jvb21fZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdFxcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCkpXFxuK1xcdFxcdHJldHVybiBUQ19BQ1RfU0hPVDtcXG4rXFxuIFxcdGlmIChicGZfc2tiX2xvYWRfYnl0ZXMoc2tiLCBFVEhfSExFTiwgXFx1MDAyNmlwaF9vdXRlcixcXG4gXFx0XFx0XFx0ICAgICAgIHNpemVvZihpcGhfb3V0ZXIpKSBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiBUQ19BQ1RfT0s7XFxuQEAgLTY3MCwxOSArNzQxLDI1IEBAIHN0YXRpYyBpbnQgZGVjYXBfaXB2NChzdHJ1Y3QgX19za19idWZmICpza2IpXFxuIFxcdFxcdHJldHVybiBUQ19BQ1RfT0s7XFxuIFxcbiBcXHRyZXR1cm4gZGVjYXBfaW50ZXJuYWwoc2tiLCBFVEhfSExFTiwgc2l6ZW9mKGlwaF9vdXRlciksXFxuLVxcdFxcdFxcdCAgICAgIGlwaF9vdXRlci5wcm90b2NvbCk7XFxuK1xcdFxcdFxcdCAgICAgIGlwaF9vdXRlci5wcm90b2NvbCxcXG4rXFx0XFx0XFx0ICAgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0KTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBkZWNhcF9pcHY2KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4ge1xcbiBcXHRzdHJ1Y3QgaXB2NmhkciBpcGhfb3V0ZXI7XFxuIFxcbitcXHRpZiAoIWJwZl9jb3JlX2VudW1fdmFsdWVfZXhpc3RzKGVudW0gYnBmX2Fkal9yb29tX2ZsYWdzLFxcbitcXHRcXHRcXHRcXHRcXHRCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYpKVxcbitcXHRcXHRyZXR1cm4gVENfQUNUX1NIT1Q7XFxuK1xcbiBcXHRpZiAoYnBmX3NrYl9sb2FkX2J5dGVzKHNrYiwgRVRIX0hMRU4sIFxcdTAwMjZpcGhfb3V0ZXIsXFxuIFxcdFxcdFxcdCAgICAgICBzaXplb2YoaXBoX291dGVyKSkgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gVENfQUNUX09LO1xcbiBcXG4gXFx0cmV0dXJuIGRlY2FwX2ludGVybmFsKHNrYiwgRVRIX0hMRU4sIHNpemVvZihpcGhfb3V0ZXIpLFxcbi1cXHRcXHRcXHQgICAgICBpcGhfb3V0ZXIubmV4dGhkcik7XFxuK1xcdFxcdFxcdCAgICAgIGlwaF9vdXRlci5uZXh0aGRyLFxcbitcXHRcXHRcXHQgICAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYpO1xcbiB9XFxuIFxcbiBTRUMoXFxcInRjXFxcIilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6NDk6MDEuNjkyMjUwMjc0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTM3MjE0Mjk0NzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRfQ0xTX0JQRlwiLFxuICAgIFwiTkVUX0FDVF9CUEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc2tiX2FkanVzdF9yb29tXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBuZXcgZmxhZ3MgdG8gdGhlIGJwZl9za2JfYWRqdXN0X3Jvb20gQlBGIGhlbHBlciB0byBjbGVhciB0dW5uZWwtc3BlY2lmaWMgR1NPIGZsYWdzIGR1cmluZyBkZWNhcHN1bGF0aW9uLiBUaGlzIG1vZGlmaWVzIGNvcmUgQlBGIG5ldHdvcmtpbmcgbG9naWMgcmVhY2hhYmxlIHZpYSBUQyBCUEYgcHJvZ3JhbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY1M2I3NWRiMGQ2NDNlMTU0MGI4ZWE4YjE5YmFjMGIzMjhjY2EwOWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxNjo0OTowMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuaW5kZXggZmZkOTZlOGI5MjBiZC4uNzMyYjM1Y2MwOGQxYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5AQCAtMzAzOCw4ICszMDM4LDM0IEBAIHVuaW9uIGJwZl9hdHRyIHtcbiAgKlxuICAqXHRcdCogKipCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0KiosXG4gICpcdFx0ICAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjYqKjpcbi0gKlx0XHQgIEluZGljYXRlIHRoZSBuZXcgSVAgaGVhZGVyIHZlcnNpb24gYWZ0ZXIgZGVjYXBzdWxhdGluZyB0aGUgb3V0ZXJcbi0gKlx0XHQgIElQIGhlYWRlci4gVXNlZCB3aGVuIHRoZSBpbm5lciBhbmQgb3V0ZXIgSVAgdmVyc2lvbnMgYXJlIGRpZmZlcmVudC5cbisgKlx0XHQgIEluZGljYXRlIHRoZSBuZXcgSVAgaGVhZGVyIHZlcnNpb24gYWZ0ZXIgZGVjYXBzdWxhdGluZyB0aGVcbisgKlx0XHQgIG91dGVyIElQIGhlYWRlci4gVXNlZCB3aGVuIHRoZSBpbm5lciBhbmQgb3V0ZXIgSVAgdmVyc2lvbnNcbisgKlx0XHQgIGFyZSBkaWZmZXJlbnQuIFRoZXNlIGZsYWdzIG9ubHkgdHJpZ2dlciBhIHByb3RvY29sIGNoYW5nZVxuKyAqXHRcdCAgd2l0aG91dCBjbGVhcmluZyBhbnkgdHVubmVsLXNwZWNpZmljIEdTTyBmbGFncy5cbisgKlxuKyAqXHRcdCogKipCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUqKjpcbisgKlx0XHQgIENsZWFyIEdSRSB0dW5uZWwgR1NPIGZsYWdzIChTS0JfR1NPX0dSRSBhbmQgU0tCX0dTT19HUkVfQ1NVTSlcbisgKlx0XHQgIHdoZW4gZGVjYXBzdWxhdGluZyBhIEdSRSB0dW5uZWwuXG4rICpcbisgKlx0XHQqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKio6XG4rICpcdFx0ICBDbGVhciBVRFAgdHVubmVsIEdTTyBmbGFncyAoU0tCX0dTT19VRFBfVFVOTkVMIGFuZFxuKyAqXHRcdCAgU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0pIHdoZW4gZGVjYXBzdWxhdGluZyBhIFVEUCB0dW5uZWwuXG4rICpcbisgKlx0XHQqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0Kio6XG4rICpcdFx0ICBDbGVhciBJUElQL1NJVCB0dW5uZWwgR1NPIGZsYWcgKFNLQl9HU09fSVBYSVA0KSB3aGVuIGRlY2Fwc3VsYXRpbmdcbisgKlx0XHQgIGEgdHVubmVsIHdpdGggYW4gb3V0ZXIgSVB2NCBoZWFkZXIgKElQdjQtaW4tSVB2NCBvciBJUHY2LWluLUlQdjQpLlxuKyAqXG4rICpcdFx0KiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNioqOlxuKyAqXHRcdCAgQ2xlYXIgSVB2NiBlbmNhcHN1bGF0aW9uIHR1bm5lbCBHU08gZmxhZyAoU0tCX0dTT19JUFhJUDYpIHdoZW5cbisgKlx0XHQgIGRlY2Fwc3VsYXRpbmcgYSB0dW5uZWwgd2l0aCBhbiBvdXRlciBJUHY2IGhlYWRlciAoSVB2Ni1pbi1JUHY2XG4rICpcdFx0ICBvciBJUHY0LWluLUlQdjYpLlxuKyAqXG4rICpcdFx0V2hlbiB1c2luZyB0aGUgZGVjYXBzdWxhdGlvbiBmbGFncyBhYm92ZSwgdGhlIHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uXG4rICpcdFx0ZmxhZyBpcyBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgaWYgYWxsIHR1bm5lbC1zcGVjaWZpYyBHU08gZmxhZ3NcbisgKlx0XHQoU0tCX0dTT19VRFBfVFVOTkVMLCBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSwgU0tCX0dTT19HUkUsXG4rICpcdFx0U0tCX0dTT19HUkVfQ1NVTSwgU0tCX0dTT19JUFhJUDQsIFNLQl9HU09fSVBYSVA2KSBoYXZlIGJlZW5cbisgKlx0XHRyZW1vdmVkIGZyb20gdGhlIHBhY2tldC4gVGhpcyBoYW5kbGVzIGNhc2VzIHdoZXJlIGFsbCB0dW5uZWxcbisgKlx0XHRsYXllcnMgaGF2ZSBiZWVuIGRlY2Fwc3VsYXRlZC5cbiAgKlxuICAqIFx0XHRBIGNhbGwgdG8gdGhpcyBoZWxwZXIgaXMgc3VzY2VwdGlibGUgdG8gY2hhbmdlIHRoZSB1bmRlcmx5aW5nXG4gICogXHRcdHBhY2tldCBidWZmZXIuIFRoZXJlZm9yZSwgYXQgbG9hZCB0aW1lLCBhbGwgY2hlY2tzIG9uIHBvaW50ZXJzXG5AQCAtNjI4Myw3ICs2MzA5LDcgQEAgZW51bSB7XG4gfTtcbiBcbiAvKiBCUEZfRlVOQ19za2JfYWRqdXN0X3Jvb20gZmxhZ3MuICovXG4tZW51bSB7XG4rZW51bSBicGZfYWRqX3Jvb21fZmxhZ3Mge1xuIFx0QlBGX0ZfQURKX1JPT01fRklYRURfR1NPXHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyAwKSxcbiBcdEJQRl9GX0FESl9ST09NX0VOQ0FQX0wzX0lQVjRcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDEpLFxuIFx0QlBGX0ZfQURKX1JPT01fRU5DQVBfTDNfSVBWNlx0PSAoMVVMTCBcdTAwM2NcdTAwM2MgMiksXG5AQCAtNjI5Myw2ICs2MzE5LDEwIEBAIGVudW0ge1xuIFx0QlBGX0ZfQURKX1JPT01fRU5DQVBfTDJfRVRIXHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyA2KSxcbiBcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjRcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDcpLFxuIFx0QlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNlx0PSAoMVVMTCBcdTAwM2NcdTAwM2MgOCksXG4rXHRCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkVcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDkpLFxuK1x0QlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQXHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyAxMCksXG4rXHRCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDRcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDExKSxcbitcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNlx0PSAoMVVMTCBcdTAwM2NcdTAwM2MgMTIpLFxuIH07XG4gXG4gZW51bSB7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggMzQyMzczNDEyNGE1Yi4uODllZmZmZjNiYzUyNSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTU2LDYgKzU2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29ja19yZXVzZXBvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9idXN5X3BvbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y3AuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9ncmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC94ZnJtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdWRwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfdHJhY2UuaFx1MDAzZVxuQEAgLTM1NzIsMTQgKzM1NzMsMjcgQEAgc3RhdGljIHUzMiBicGZfc2tiX25ldF9iYXNlX2xlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuICNkZWZpbmUgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTS1x0KEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQgfCBcXFxuIFx0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNilcbiBcbi0jZGVmaW5lIEJQRl9GX0FESl9ST09NX01BU0tcdFx0KEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTyB8IFxcXG4tXHRcdFx0XHRcdCBCUEZfRl9BREpfUk9PTV9FTkNBUF9MM19NQVNLIHwgXFxcbisjZGVmaW5lIEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X01BU0tcdChCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9VRFAgfCBcXFxuK1x0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFKVxuK1xuKyNkZWZpbmUgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTS1x0KEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCB8IFxcXG4rXHRcdFx0XHRcdCBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYpXG4rXG4rI2RlZmluZSBCUEZfRl9BREpfUk9PTV9FTkNBUF9NQVNLXHQoQlBGX0ZfQURKX1JPT01fRU5DQVBfTDNfTUFTSyB8IFxcXG4gXHRcdFx0XHRcdCBCUEZfRl9BREpfUk9PTV9FTkNBUF9MNF9HUkUgfCBcXFxuIFx0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fRU5DQVBfTDRfVURQIHwgXFxcbiBcdFx0XHRcdFx0IEJQRl9GX0FESl9ST09NX0VOQ0FQX0wyX0VUSCB8IFxcXG4gXHRcdFx0XHRcdCBCUEZfRl9BREpfUk9PTV9FTkNBUF9MMiggXFxcbi1cdFx0XHRcdFx0ICBCUEZfQURKX1JPT01fRU5DQVBfTDJfTUFTSykgfCBcXFxuLVx0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSylcbitcdFx0XHRcdFx0ICBCUEZfQURKX1JPT01fRU5DQVBfTDJfTUFTSykpXG4rXG4rI2RlZmluZSBCUEZfRl9BREpfUk9PTV9ERUNBUF9NQVNLXHQoQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSyB8IFxcXG4rXHRcdFx0XHRcdCBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLIHwgXFxcbitcdFx0XHRcdFx0IEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0spXG4rXG4rI2RlZmluZSBCUEZfRl9BREpfUk9PTV9NQVNLXHRcdChCUEZfRl9BREpfUk9PTV9GSVhFRF9HU08gfCBcXFxuK1x0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fRU5DQVBfTUFTSyB8IFxcXG4rXHRcdFx0XHRcdCBCUEZfRl9BREpfUk9PTV9ERUNBUF9NQVNLIHwgXFxcbitcdFx0XHRcdFx0IEJQRl9GX0FESl9ST09NX05PX0NTVU1fUkVTRVQpXG4gXG4gc3RhdGljIGludCBicGZfc2tiX25ldF9ncm93KHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvZmYsIHUzMiBsZW5fZGlmZixcbiBcdFx0XHQgICAgdTY0IGZsYWdzKVxuQEAgLTM3MDIsOCArMzcxNiw4IEBAIHN0YXRpYyBpbnQgYnBmX3NrYl9uZXRfc2hyaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvZmYsIHUzMiBsZW5fZGlmZixcbiBcdGJvb2wgZGVjYXAgPSBmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSztcbiBcdGludCByZXQ7XG4gXG4tXHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IH4oQlBGX0ZfQURKX1JPT01fRklYRURfR1NPIHxcbi1cdFx0XHQgICAgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSyB8XG4rXHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IH4oQlBGX0ZfQURKX1JPT01fREVDQVBfTUFTSyB8XG4rXHRcdFx0ICAgICAgIEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTyB8XG4gXHRcdFx0ICAgICAgIEJQRl9GX0FESl9ST09NX05PX0NTVU1fUkVTRVQpKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG5AQCAtMzc0MCw5ICszNzU0LDQ4IEBAIHN0YXRpYyBpbnQgYnBmX3NrYl9uZXRfc2hyaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvZmYsIHUzMiBsZW5fZGlmZixcbiBcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTykpXG4gXHRcdFx0c2tiX2luY3JlYXNlX2dzb19zaXplKHNoaW5mbywgbGVuX2RpZmYpO1xuIFxuK1x0XHQvKiBTZWxlY3RpdmUgR1NPIGZsYWcgY2xlYXJpbmcgYmFzZWQgb24gZGVjYXAgdHlwZS5cbitcdFx0ICogT25seSBjbGVhciB0aGUgZmxhZ3MgZm9yIHRoZSB0dW5uZWwgbGF5ZXIgYmVpbmcgcmVtb3ZlZC5cbitcdFx0ICovXG4rXHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoc2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNiAoU0tCX0dTT19VRFBfVFVOTkVMIHxcbitcdFx0XHRcdFx0IFNLQl9HU09fVURQX1RVTk5FTF9DU1VNKSkpXG4rXHRcdFx0c2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNj0gfihTS0JfR1NPX1VEUF9UVU5ORUwgfFxuK1x0XHRcdFx0XHQgICAgICBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSk7XG4rXHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoc2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNiAoU0tCX0dTT19HUkUgfCBTS0JfR1NPX0dSRV9DU1VNKSkpXG4rXHRcdFx0c2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNj0gfihTS0JfR1NPX0dSRSB8XG4rXHRcdFx0XHRcdCAgICAgIFNLQl9HU09fR1JFX0NTVU0pO1xuK1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDQpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKHNoaW5mby1cdTAwM2Vnc29fdHlwZSBcdTAwMjYgU0tCX0dTT19JUFhJUDQpKVxuK1x0XHRcdHNoaW5mby1cdTAwM2Vnc29fdHlwZSBcdTAwMjY9IH5TS0JfR1NPX0lQWElQNDtcbitcdFx0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIChzaGluZm8tXHUwMDNlZ3NvX3R5cGUgXHUwMDI2IFNLQl9HU09fSVBYSVA2KSlcbitcdFx0XHRzaGluZm8tXHUwMDNlZ3NvX3R5cGUgXHUwMDI2PSB+U0tCX0dTT19JUFhJUDY7XG4rXG4rXHRcdC8qIENsZWFyIGVuY2Fwc3VsYXRpb24gZmxhZyBvbmx5IHdoZW4gbm8gdHVubmVsIEdTTyBmbGFncyByZW1haW4gKi9cbitcdFx0aWYgKGZsYWdzIFx1MDAyNiAoQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSyB8XG4rXHRcdFx0ICAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKSkge1xuK1x0XHRcdGlmICghKHNoaW5mby1cdTAwM2Vnc29fdHlwZSBcdTAwMjYgKFNLQl9HU09fVURQX1RVTk5FTCB8XG4rXHRcdFx0XHRcdFx0ICBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSB8XG4rXHRcdFx0XHRcdFx0ICBTS0JfR1NPX0dSRSB8XG4rXHRcdFx0XHRcdFx0ICBTS0JfR1NPX0dSRV9DU1VNIHxcbitcdFx0XHRcdFx0XHQgIFNLQl9HU09fSVBYSVA0IHxcbitcdFx0XHRcdFx0XHQgIFNLQl9HU09fSVBYSVA2IHxcbitcdFx0XHRcdFx0XHQgIFNLQl9HU09fRVNQKSkpXG4rXHRcdFx0XHRpZiAoc2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24pXG4rXHRcdFx0XHRcdHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uID0gMDtcbitcdFx0fVxuK1xuIFx0XHQvKiBIZWFkZXIgbXVzdCBiZSBjaGVja2VkLCBhbmQgZ3NvX3NlZ3MgcmVjb21wdXRlZC4gKi9cbiBcdFx0c2hpbmZvLVx1MDAzZWdzb190eXBlIHw9IFNLQl9HU09fRE9ER1k7XG4gXHRcdHNoaW5mby1cdTAwM2Vnc29fc2VncyA9IDA7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBGb3Igbm9uLUdTTyBwYWNrZXRzLCBjbGVhciBlbmNhcHN1bGF0aW9uIGlmIGRlY2FwIGZsYWdzIGFyZSBzZXQgKi9cbitcdFx0aWYgKChmbGFncyBcdTAwMjYgKEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X01BU0sgfFxuK1x0XHRcdCAgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0spKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uKVxuK1x0XHRcdHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uID0gMDtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTM4MDIsOCArMzg1NSw3IEBAIEJQRl9DQUxMXzQoYnBmX3NrYl9hZGp1c3Rfcm9vbSwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBzMzIsIGxlbl9kaWZmLFxuIFx0dTMyIG9mZjtcbiBcdGludCByZXQ7XG4gXG4tXHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IH4oQlBGX0ZfQURKX1JPT01fTUFTSyB8XG4tXHRcdFx0ICAgICAgIEJQRl9GX0FESl9ST09NX05PX0NTVU1fUkVTRVQpKSlcbitcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgfkJQRl9GX0FESl9ST09NX01BU0spKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdGlmICh1bmxpa2VseShsZW5fZGlmZl9hYnMgXHUwMDNlIDB4ZmZmVSkpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuQEAgLTM4MjIsMjAgKzM4NzQsNTMgQEAgQlBGX0NBTExfNChicGZfc2tiX2FkanVzdF9yb29tLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHMzMiwgbGVuX2RpZmYsXG4gXHRcdHJldHVybiAtRU5PVFNVUFA7XG4gXHR9XG4gXG4tXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX01BU0spIHtcbitcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTUFTSykge1xuK1x0XHR1MzIgbGVuX2RlY2FwX21pbiA9IDA7XG4rXG4gXHRcdGlmICghc2hyaW5rKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0XHRzd2l0Y2ggKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19NQVNLKSB7XG4tXHRcdGNhc2UgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNDpcbitcdFx0LyogUmVqZWN0IG11dHVhbGx5IGV4Y2x1c2l2ZSBkZWNhcCBmbGFnIHBhaXJzLiAqL1xuK1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19NQVNLKSA9PVxuK1x0XHQgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSylcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSykgPT1cbitcdFx0ICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X01BU0spXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0spID09XG4rXHRcdCAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHQvKiBSZWplY3QgbXV0dWFsbHkgZXhjbHVzaXZlIGRlY2FwIHR1bm5lbCB0eXBlIGZsYWdzLiAqL1xuK1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTSykpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSylcbitcdFx0XHRsZW5fZGVjYXBfbWluICs9IGJwZl9za2JfbmV0X2Jhc2VfbGVuKHNrYik7XG4rXG4rXHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKVxuK1x0XHRcdGxlbl9kZWNhcF9taW4gKz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuK1xuK1x0XHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRSlcbitcdFx0XHRsZW5fZGVjYXBfbWluICs9IHNpemVvZihzdHJ1Y3QgZ3JlX2Jhc2VfaGRyKTtcbitcbitcdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDQpXG4rXHRcdFx0bGVuX2RlY2FwX21pbiArPSBzaXplb2Yoc3RydWN0IGlwaGRyKTtcbitcbitcdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYpXG4rXHRcdFx0bGVuX2RlY2FwX21pbiArPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpO1xuK1xuK1x0XHRpZiAobGVuX2RpZmZfYWJzIFx1MDAzYyBsZW5fZGVjYXBfbWluKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQpXG4gXHRcdFx0bGVuX21pbiA9IHNpemVvZihzdHJ1Y3QgaXBoZHIpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjY6XG4rXG4rXHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNilcbiBcdFx0XHRsZW5fbWluID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0fVxuIFx0fVxuIFxuIFx0bGVuX2N1ciA9IHNrYi1cdTAwM2VsZW4gLSBza2JfbmV0d29ya19vZmZzZXQoc2tiKTtcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbmluZGV4IGZmZDk2ZThiOTIwYmQuLjczMmIzNWNjMDhkMWMgMTAwNjQ0XG4tLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbisrKyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTMwMzgsOCArMzAzOCwzNCBAQCB1bmlvbiBicGZfYXR0ciB7XG4gICpcbiAgKlx0XHQqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNCoqLFxuICAqXHRcdCAgKipCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY2Kio6XG4tICpcdFx0ICBJbmRpY2F0ZSB0aGUgbmV3IElQIGhlYWRlciB2ZXJzaW9uIGFmdGVyIGRlY2Fwc3VsYXRpbmcgdGhlIG91dGVyXG4tICpcdFx0ICBJUCBoZWFkZXIuIFVzZWQgd2hlbiB0aGUgaW5uZXIgYW5kIG91dGVyIElQIHZlcnNpb25zIGFyZSBkaWZmZXJlbnQuXG4rICpcdFx0ICBJbmRpY2F0ZSB0aGUgbmV3IElQIGhlYWRlciB2ZXJzaW9uIGFmdGVyIGRlY2Fwc3VsYXRpbmcgdGhlXG4rICpcdFx0ICBvdXRlciBJUCBoZWFkZXIuIFVzZWQgd2hlbiB0aGUgaW5uZXIgYW5kIG91dGVyIElQIHZlcnNpb25zXG4rICpcdFx0ICBhcmUgZGlmZmVyZW50LiBUaGVzZSBmbGFncyBvbmx5IHRyaWdnZXIgYSBwcm90b2NvbCBjaGFuZ2VcbisgKlx0XHQgIHdpdGhvdXQgY2xlYXJpbmcgYW55IHR1bm5lbC1zcGVjaWZpYyBHU08gZmxhZ3MuXG4rICpcbisgKlx0XHQqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFKio6XG4rICpcdFx0ICBDbGVhciBHUkUgdHVubmVsIEdTTyBmbGFncyAoU0tCX0dTT19HUkUgYW5kIFNLQl9HU09fR1JFX0NTVU0pXG4rICpcdFx0ICB3aGVuIGRlY2Fwc3VsYXRpbmcgYSBHUkUgdHVubmVsLlxuKyAqXG4rICpcdFx0KiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCoqOlxuKyAqXHRcdCAgQ2xlYXIgVURQIHR1bm5lbCBHU08gZmxhZ3MgKFNLQl9HU09fVURQX1RVTk5FTCBhbmRcbisgKlx0XHQgIFNLQl9HU09fVURQX1RVTk5FTF9DU1VNKSB3aGVuIGRlY2Fwc3VsYXRpbmcgYSBVRFAgdHVubmVsLlxuKyAqXG4rICpcdFx0KiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCoqOlxuKyAqXHRcdCAgQ2xlYXIgSVBJUC9TSVQgdHVubmVsIEdTTyBmbGFnIChTS0JfR1NPX0lQWElQNCkgd2hlbiBkZWNhcHN1bGF0aW5nXG4rICpcdFx0ICBhIHR1bm5lbCB3aXRoIGFuIG91dGVyIElQdjQgaGVhZGVyIChJUHY0LWluLUlQdjQgb3IgSVB2Ni1pbi1JUHY0KS5cbisgKlxuKyAqXHRcdCogKipCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYqKjpcbisgKlx0XHQgIENsZWFyIElQdjYgZW5jYXBzdWxhdGlvbiB0dW5uZWwgR1NPIGZsYWcgKFNLQl9HU09fSVBYSVA2KSB3aGVuXG4rICpcdFx0ICBkZWNhcHN1bGF0aW5nIGEgdHVubmVsIHdpdGggYW4gb3V0ZXIgSVB2NiBoZWFkZXIgKElQdjYtaW4tSVB2NlxuKyAqXHRcdCAgb3IgSVB2NC1pbi1JUHY2KS5cbisgKlxuKyAqXHRcdFdoZW4gdXNpbmcgdGhlIGRlY2Fwc3VsYXRpb24gZmxhZ3MgYWJvdmUsIHRoZSBza2ItXHUwMDNlZW5jYXBzdWxhdGlvblxuKyAqXHRcdGZsYWcgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkIGlmIGFsbCB0dW5uZWwtc3BlY2lmaWMgR1NPIGZsYWdzXG4rICpcdFx0KFNLQl9HU09fVURQX1RVTk5FTCwgU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0sIFNLQl9HU09fR1JFLFxuKyAqXHRcdFNLQl9HU09fR1JFX0NTVU0sIFNLQl9HU09fSVBYSVA0LCBTS0JfR1NPX0lQWElQNikgaGF2ZSBiZWVuXG4rICpcdFx0cmVtb3ZlZCBmcm9tIHRoZSBwYWNrZXQuIFRoaXMgaGFuZGxlcyBjYXNlcyB3aGVyZSBhbGwgdHVubmVsXG4rICpcdFx0bGF5ZXJzIGhhdmUgYmVlbiBkZWNhcHN1bGF0ZWQuXG4gICpcbiAgKiBcdFx0QSBjYWxsIHRvIHRoaXMgaGVscGVyIGlzIHN1c2NlcHRpYmxlIHRvIGNoYW5nZSB0aGUgdW5kZXJseWluZ1xuICAqIFx0XHRwYWNrZXQgYnVmZmVyLiBUaGVyZWZvcmUsIGF0IGxvYWQgdGltZSwgYWxsIGNoZWNrcyBvbiBwb2ludGVyc1xuQEAgLTYyODMsNyArNjMwOSw3IEBAIGVudW0ge1xuIH07XG4gXG4gLyogQlBGX0ZVTkNfc2tiX2FkanVzdF9yb29tIGZsYWdzLiAqL1xuLWVudW0ge1xuK2VudW0gYnBmX2Fkal9yb29tX2ZsYWdzIHtcbiBcdEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTT1x0PSAoMVVMTCBcdTAwM2NcdTAwM2MgMCksXG4gXHRCUEZfRl9BREpfUk9PTV9FTkNBUF9MM19JUFY0XHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyAxKSxcbiBcdEJQRl9GX0FESl9ST09NX0VOQ0FQX0wzX0lQVjZcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDIpLFxuQEAgLTYyOTMsNiArNjMxOSwxMCBAQCBlbnVtIHtcbiBcdEJQRl9GX0FESl9ST09NX0VOQ0FQX0wyX0VUSFx0PSAoMVVMTCBcdTAwM2NcdTAwM2MgNiksXG4gXHRCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0XHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyA3KSxcbiBcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjZcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDgpLFxuK1x0QlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFXHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyA5KSxcbitcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUFx0PSAoMVVMTCBcdTAwM2NcdTAwM2MgMTApLFxuK1x0QlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0XHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyAxMSksXG4rXHRCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDZcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDEyKSxcbiB9O1xuIFxuIGVudW0ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfdGNfdHVubmVsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3RjX3R1bm5lbC5jXG5pbmRleCAxYWE3Yzk0NjM5ODBiLi42N2JhMjdkNjkzNDc0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF90Y190dW5uZWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF90Y190dW5uZWwuY1xuQEAgLTQzOCw3ICs0MzgsNiBAQCBzdGF0aWMgaW50IHNldHVwKHZvaWQpXG4gXHRTWVMoZmFpbF9jbG9zZV9uc19jbGllbnQsIFwiaXAgbGluayBhZGQgJXMgdHlwZSB2ZXRoIHBlZXIgbmFtZSAlc1wiLFxuIFx0ICAgIFwidmV0aDEgbXR1IDE1MDAgbmV0bnMgXCIgQ0xJRU5UX05TIFwiIGFkZHJlc3MgXCIgTUFDX0FERFJfVkVUSDEsXG4gXHQgICAgXCJ2ZXRoMiBtdHUgMTUwMCBuZXRucyBcIiBTRVJWRVJfTlMgXCIgYWRkcmVzcyBcIiBNQUNfQUREUl9WRVRIMik7XG4tXHRTWVMoZmFpbF9jbG9zZV9uc19jbGllbnQsIFwiZXRodG9vbCAtSyB2ZXRoMSB0c28gb2ZmXCIpO1xuIFx0U1lTKGZhaWxfY2xvc2VfbnNfY2xpZW50LCBcImlwIGxpbmsgc2V0IHZldGgxIHVwXCIpO1xuIFx0bnN0b2tlbl9zZXJ2ZXIgPSBvcGVuX25ldG5zKFNFUlZFUl9OUyk7XG4gXHRpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbl9zZXJ2ZXIsIFwib3BlbiBzZXJ2ZXIgbnNcIikpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfdHVubmVsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y190dW5uZWwuY1xuaW5kZXggNzM3NmRmNDA1YTZiZS4uODUzYmNhOTYyOTEwMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3R1bm5lbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y190dW5uZWwuY1xuQEAgLTYsNiArNiw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2VuZGlhbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9jb3JlX3JlYWQuaFx1MDAzZVxuICNpbmNsdWRlIFwiYnBmX3RyYWNpbmdfbmV0LmhcIlxuICNpbmNsdWRlIFwiYnBmX2NvbXBpbGVyLmhcIlxuIFxuQEAgLTM3LDYgKzM4LDIyIEBAIHN0cnVjdCB2eGxhbmhkcl9fX2xvY2FsIHtcbiBcbiAjZGVmaW5lXHRFWFRQUk9UT19WWExBTlx0MHgxXG4gXG4rI2RlZmluZSBTS0JfR1NPX1VEUF9UVU5ORUxfTUFTS1x0KFNLQl9HU09fVURQX1RVTk5FTCB8XHRcdFx0XFxcbitcdFx0XHRcdCBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSlcbitcbisjZGVmaW5lIFNLQl9HU09fVFVOTkVMX01BU0tcdChTS0JfR1NPX1VEUF9UVU5ORUxfTUFTSyB8XHRcdFxcXG4rXHRcdFx0XHQgU0tCX0dTT19HUkUgfFx0XHRcdFx0XFxcbitcdFx0XHRcdCBTS0JfR1NPX0dSRV9DU1VNIHxcdFx0XHRcXFxuK1x0XHRcdFx0IFNLQl9HU09fSVBYSVA0IHxcdFx0XHRcXFxuK1x0XHRcdFx0IFNLQl9HU09fSVBYSVA2IHxcdFx0XHRcXFxuK1x0XHRcdFx0IFNLQl9HU09fRVNQKVxuK1xuKyNkZWZpbmUgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTS1x0KEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCB8XHRcXFxuK1x0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFKVxuK1xuKyNkZWZpbmUgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTS1x0KEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCB8XHRcXFxuK1x0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KVxuK1xuICNkZWZpbmVcdFZYTEFOX0ZMQUdTICAgICBicGZfaHRvbmwoMVx1MDAzY1x1MDAzYzI3KVxuICNkZWZpbmVcdFZOSV9JRFx0XHQxXG4gI2RlZmluZVx0VlhMQU5fVk5JXHRicGZfaHRvbmwoVk5JX0lEIFx1MDAzY1x1MDAzYyA4KVxuQEAgLTU4OSw5ICs2MDYsMTIgQEAgaW50IF9fZW5jYXBfaXA2dnhsYW5fZXRoKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiBcdFx0cmV0dXJuIFRDX0FDVF9PSztcbiB9XG4gXG4tc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8pXG4rc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8sXG4rXHRcdFx0ICBfX3U2NCBpcHhpcF9mbGFnKVxuIHtcbiBcdF9fdTY0IGZsYWdzID0gQlBGX0ZfQURKX1JPT01fRklYRURfR1NPO1xuK1x0c3RydWN0IHNrX2J1ZmYgKmtza2I7XG4rXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm87XG4gXHRzdHJ1Y3QgaXB2Nl9vcHRfaGRyIGlwNl9vcHRfaGRyO1xuIFx0c3RydWN0IGdyZV9oZHIgZ3JlaDtcbiBcdHN0cnVjdCB1ZHBoZHIgdWRwaDtcbkBAIC01OTksMTAgKzYxOSwxMiBAQCBzdGF0aWMgaW50IGRlY2FwX2ludGVybmFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiwgaW50IG9mZiwgaW50IGxlbiwgY2hhciBwcm90bylcbiBcbiBcdHN3aXRjaCAocHJvdG8pIHtcbiBcdGNhc2UgSVBQUk9UT19JUElQOlxuLVx0XHRmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0O1xuK1x0XHRmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0IHxcbitcdFx0XHQgaXB4aXBfZmxhZztcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElQUFJPVE9fSVBWNjpcbi1cdFx0ZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNjtcbitcdFx0ZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNiB8XG4rXHRcdFx0IGlweGlwX2ZsYWc7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBORVhUSERSX0RFU1Q6XG4gXHRcdGlmIChicGZfc2tiX2xvYWRfYnl0ZXMoc2tiLCBvZmYgKyBsZW4sIFx1MDAyNmlwNl9vcHRfaGRyLFxuQEAgLTYxMCwxMCArNjMyLDEyIEBAIHN0YXRpYyBpbnQgZGVjYXBfaW50ZXJuYWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiLCBpbnQgb2ZmLCBpbnQgbGVuLCBjaGFyIHByb3RvKVxuIFx0XHRcdHJldHVybiBUQ19BQ1RfT0s7XG4gXHRcdHN3aXRjaCAoaXA2X29wdF9oZHIubmV4dGhkcikge1xuIFx0XHRjYXNlIElQUFJPVE9fSVBJUDpcbi1cdFx0XHRmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0O1xuK1x0XHRcdGZsYWdzIHw9IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQgfFxuK1x0XHRcdFx0IGlweGlwX2ZsYWc7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgSVBQUk9UT19JUFY2OlxuLVx0XHRcdGZsYWdzIHw9IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjY7XG4rXHRcdFx0ZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNiB8XG4rXHRcdFx0XHQgaXB4aXBfZmxhZztcbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHRyZXR1cm4gVENfQUNUX09LO1xuQEAgLTYyMSw2ICs2NDUsMTEgQEAgc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8pXG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBJUFBST1RPX0dSRTpcbiBcdFx0b2xlbiArPSBzaXplb2Yoc3RydWN0IGdyZV9oZHIpO1xuK1x0XHRpZiAoIWJwZl9jb3JlX2VudW1fdmFsdWVfZXhpc3RzKGVudW0gYnBmX2Fkal9yb29tX2ZsYWdzLFxuK1x0XHRcdFx0XHRcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRSkpXG4rXHRcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuK1x0XHRmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkU7XG4rXG4gXHRcdGlmIChicGZfc2tiX2xvYWRfYnl0ZXMoc2tiLCBvZmYgKyBsZW4sIFx1MDAyNmdyZWgsIHNpemVvZihncmVoKSkgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIFRDX0FDVF9PSztcbiBcdFx0c3dpdGNoIChicGZfbnRvaHMoZ3JlaC5wcm90b2NvbCkpIHtcbkBAIC02MzQsNiArNjYzLDEwIEBAIHN0YXRpYyBpbnQgZGVjYXBfaW50ZXJuYWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiLCBpbnQgb2ZmLCBpbnQgbGVuLCBjaGFyIHByb3RvKVxuIFx0XHRicmVhaztcbiBcdGNhc2UgSVBQUk9UT19VRFA6XG4gXHRcdG9sZW4gKz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuK1x0XHRpZiAoIWJwZl9jb3JlX2VudW1fdmFsdWVfZXhpc3RzKGVudW0gYnBmX2Fkal9yb29tX2ZsYWdzLFxuK1x0XHRcdFx0XHRcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCkpXG4rXHRcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuK1x0XHRmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9VRFA7XG4gXHRcdGlmIChicGZfc2tiX2xvYWRfYnl0ZXMoc2tiLCBvZmYgKyBsZW4sIFx1MDAyNnVkcGgsIHNpemVvZih1ZHBoKSkgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIFRDX0FDVF9PSztcbiBcdFx0c3dpdGNoIChicGZfbnRvaHModWRwaC5kZXN0KSkge1xuQEAgLTY1NSw2ICs2ODgsNDAgQEAgc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8pXG4gXHRpZiAoYnBmX3NrYl9hZGp1c3Rfcm9vbShza2IsIC1vbGVuLCBCUEZfQURKX1JPT01fTUFDLCBmbGFncykpXG4gXHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbiBcbitcdGtza2IgPSBicGZfY2FzdF90b19rZXJuX2N0eChza2IpO1xuK1x0c2hpbmZvID0gYnBmX2NvcmVfY2FzdChrc2tiLVx1MDAzZWhlYWQgKyBrc2tiLVx1MDAzZWVuZCwgc3RydWN0IHNrYl9zaGFyZWRfaW5mbyk7XG4rXHRpZiAoc2hpbmZvLVx1MDAzZWdzb19zaXplKSB7XG4rXHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoc2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNiBTS0JfR1NPX1VEUF9UVU5ORUxfTUFTSykpXG4rXHRcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuK1xuK1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKHNoaW5mby1cdTAwM2Vnc29fdHlwZSBcdTAwMjYgKFNLQl9HU09fR1JFIHwgU0tCX0dTT19HUkVfQ1NVTSkpKVxuK1x0XHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbitcbitcdFx0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0KSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIChzaGluZm8tXHUwMDNlZ3NvX3R5cGUgXHUwMDI2IFNLQl9HU09fSVBYSVA0KSlcbitcdFx0XHRyZXR1cm4gVENfQUNUX1NIT1Q7XG4rXG4rXHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNikgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoc2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNiBTS0JfR1NPX0lQWElQNikpXG4rXHRcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuK1xuK1x0XHRpZiAoZmxhZ3MgXHUwMDI2IChCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLIHxcbitcdFx0XHQgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0spKSB7XG4rXHRcdFx0aWYgKChzaGluZm8tXHUwMDNlZ3NvX3R5cGUgXHUwMDI2IFNLQl9HU09fVFVOTkVMX01BU0spIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAha3NrYi1cdTAwM2VlbmNhcHN1bGF0aW9uKVxuK1x0XHRcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuK1x0XHRcdGlmICghKHNoaW5mby1cdTAwM2Vnc29fdHlwZSBcdTAwMjYgU0tCX0dTT19UVU5ORUxfTUFTSykgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIGtza2ItXHUwMDNlZW5jYXBzdWxhdGlvbilcbitcdFx0XHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbitcdFx0fVxuK1x0fSBlbHNlIGlmICgoZmxhZ3MgXHUwMDI2IChCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLIHxcbitcdFx0XHQgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0spKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAga3NrYi1cdTAwM2VlbmNhcHN1bGF0aW9uKSB7XG4rXHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbitcdH1cbitcbiBcdHJldHVybiBUQ19BQ1RfT0s7XG4gfVxuIFxuQEAgLTY2Miw2ICs3MjksMTAgQEAgc3RhdGljIGludCBkZWNhcF9pcHY0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiB7XG4gXHRzdHJ1Y3QgaXBoZHIgaXBoX291dGVyO1xuIFxuK1x0aWYgKCFicGZfY29yZV9lbnVtX3ZhbHVlX2V4aXN0cyhlbnVtIGJwZl9hZGpfcm9vbV9mbGFncyxcbitcdFx0XHRcdFx0QlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0KSlcbitcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuK1xuIFx0aWYgKGJwZl9za2JfbG9hZF9ieXRlcyhza2IsIEVUSF9ITEVOLCBcdTAwMjZpcGhfb3V0ZXIsXG4gXHRcdFx0ICAgICAgIHNpemVvZihpcGhfb3V0ZXIpKSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIFRDX0FDVF9PSztcbkBAIC02NzAsMTkgKzc0MSwyNSBAQCBzdGF0aWMgaW50IGRlY2FwX2lwdjQoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuIFx0XHRyZXR1cm4gVENfQUNUX09LO1xuIFxuIFx0cmV0dXJuIGRlY2FwX2ludGVybmFsKHNrYiwgRVRIX0hMRU4sIHNpemVvZihpcGhfb3V0ZXIpLFxuLVx0XHRcdCAgICAgIGlwaF9vdXRlci5wcm90b2NvbCk7XG4rXHRcdFx0ICAgICAgaXBoX291dGVyLnByb3RvY29sLFxuK1x0XHRcdCAgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgZGVjYXBfaXB2NihzdHJ1Y3QgX19za19idWZmICpza2IpXG4ge1xuIFx0c3RydWN0IGlwdjZoZHIgaXBoX291dGVyO1xuIFxuK1x0aWYgKCFicGZfY29yZV9lbnVtX3ZhbHVlX2V4aXN0cyhlbnVtIGJwZl9hZGpfcm9vbV9mbGFncyxcbitcdFx0XHRcdFx0QlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KSlcbitcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuK1xuIFx0aWYgKGJwZl9za2JfbG9hZF9ieXRlcyhza2IsIEVUSF9ITEVOLCBcdTAwMjZpcGhfb3V0ZXIsXG4gXHRcdFx0ICAgICAgIHNpemVvZihpcGhfb3V0ZXIpKSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIFRDX0FDVF9PSztcbiBcbiBcdHJldHVybiBkZWNhcF9pbnRlcm5hbChza2IsIEVUSF9ITEVOLCBzaXplb2YoaXBoX291dGVyKSxcbi1cdFx0XHQgICAgICBpcGhfb3V0ZXIubmV4dGhkcik7XG4rXHRcdFx0ICAgICAgaXBoX291dGVyLm5leHRoZHIsXG4rXHRcdFx0ICAgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KTtcbiB9XG4gXG4gU0VDKFwidGNcIilcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjQ5OjAxLjY5MjI1MTQ4NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3NDk5Mzc3NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV3IEJQRiBQYXRjaCoqXG5cbk9rYXksIHNvIHdlIGhhdmUgdGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMgc29tZSBuZXcgZmxhZ3MgZm9yIGBicGZfc2tiX2FkanVzdF9yb29tYDogYEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRWAsIGBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9VRFBgLCBgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0YCwgYW5kIGBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDZgLiBJdCBzZWVtcyB0aGVzZSBhcmUgc3BlY2lmaWNhbGx5IGZvciBjbGVhcmluZyB0dW5uZWwtcmVsYXRlZCBHU08gZmxhZ3MgZHVyaW5nIGRlY2Fwc3VsYXRpb24uIFN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIHRoZSBnb2FsIGlzIGNsZWFyLlxuXG5UaGUgcGF0Y2ggdG91Y2hlcyBgYnBmX3NrYl9uZXRfc2hyaW5rYCBhbmQgYGJwZl9za2JfYWRqdXN0X3Jvb21gIHdpdGhpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBUaGF0J3MgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIHRoZSBCUEYgbmV0d29ya2luZyBjb3JlLCB3aGljaCBpbnN0YW50bHkgcmFpc2VzIGEgZmxhZy4gSXQncyBkZWZpbml0ZWx5IGluIGEgaG90IHBhdGggYW5kIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBXZSBhYnNvbHV0ZWx5IG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgcm9jayBzb2xpZC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGV4YWN0IGNhbGwgcG9pbnRzLiBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgaXMgYSBCUEYgaGVscGVyLCBzbyBpdCdzIGludm9rZWQgYnkgQlBGIHByb2dyYW1zLCB3aGljaCBtZWFucyB0aGUgaGVscGVyIGZ1bmN0aW9uIGl0c2VsZiwgaS5lLiwgYGJwZl9za2JfYWRqdXN0X3Jvb21gIChCUEZfQ0FMTF80KSwgaXMgdGhlIHRhcmdldC4gSGFuZyBvbiwgYXJlbid0IEJQRiBoZWxwZXJzIHVzdWFsbHkgZGVjbGFyZWQgc3RhdGljYWxseSBvciB2aWEgbWFjcm9zPyBHb29kIHByYWN0aWNlIHNheXMgY2hlY2sgdGhlIHNvdXJjZS4gSSBuZWVkIHRvIGJlIHN1cmUgd2hlcmUgYGJwZl9za2JfYWRqdXN0X3Jvb21gIGlzIGFjdHVhbGx5IGRlZmluZWQgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyMjksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjo0OTowOC40NDIxOTIxNzJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxMDE0NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3NrYl9hZGp1c3Rfcm9vbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz0yMDkzPUJQRl9DQUxMXzIoYnBmX2NzdW1fbGV2ZWwsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTY0LCBsZXZlbClcXG5uZXQvY29yZS9maWx0ZXIuYy0yMDk0LXtcXG5uZXQvY29yZS9maWx0ZXIuYzoyMDk1OlxcdC8qIFRoZSBpbnRlcmZhY2UgaXMgdG8gYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGJwZl9za2JfYWRqdXN0X3Jvb20oKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTIwOTYtXFx0ICogZm9yIGVuY2FwL2RlY2FwIG9mIHBhY2tldCBoZWFkZXJzIHdoZW4gQlBGX0ZfQURKX1JPT01fTk9fQ1NVTV9SRVNFVFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MzgzNz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIHNrX3NrYl9hZGp1c3Rfcm9vbV9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTM4NDYtXFxubmV0L2NvcmUvZmlsdGVyLmM6Mzg0NzpCUEZfQ0FMTF80KGJwZl9za2JfYWRqdXN0X3Jvb20sIHN0cnVjdCBza19idWZmICosIHNrYiwgczMyLCBsZW5fZGlmZixcXG5uZXQvY29yZS9maWx0ZXIuYy0zODQ4LVxcdCAgIHUzMiwgbW9kZSwgdTY0LCBmbGFncylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTM5NDEtXFxubmV0L2NvcmUvZmlsdGVyLmM6Mzk0MjpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfYWRqdXN0X3Jvb21fcHJvdG8gPSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6Mzk0MzpcXHQuZnVuY1xcdFxcdD0gYnBmX3NrYl9hZGp1c3Rfcm9vbSxcXG5uZXQvY29yZS9maWx0ZXIuYy0zOTQ0LVxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04NjM2PXRjX2Nsc19hY3RfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg2NjktXFx0Y2FzZSBCUEZfRlVOQ19za2JfYWRqdXN0X3Jvb206XFxubmV0L2NvcmUvZmlsdGVyLmM6ODY3MDpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za2JfYWRqdXN0X3Jvb21fcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmMtODY3MS1cXHRjYXNlIEJQRl9GVU5DX3NrYl9jaGFuZ2VfdGFpbDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6NDk6MDguNDg3MzA0Nzg4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwMTk3MTg2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgRnVuY3Rpb24qKlxuXG5SaWdodCwgc28gSSBzZWUgYSBmdW5jdGlvbiBkZWZpbml0aW9uOiBgQlBGX0NBTExfNChicGZfc2tiX2FkanVzdF9yb29tLCAuLi4pYC4gVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gTm93LCBrbm93aW5nIGhvdyB0aGluZ3MgYXJlIGluIHRoZSBrZXJuZWwsIHRoZSBhY3R1YWwgZXhwb3J0ZWQgc3ltYm9sIEknbSBsaWtlbHkgdG8gc2VlIHdoZW4gSSdtIGxvb2tpbmcgYXQgdGhlIHNvdXJjZSBjb2RlIG1pZ2h0IGJlIGBfX19fYnBmX3NrYl9hZGp1c3Rfcm9vbWAgb3IganVzdCBwbGFpbiBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAuIFRoZSBuYW1pbmcgY29udmVudGlvbnMgYXJlIHVzdWFsbHkgZmFpcmx5IHByZWRpY3RhYmxlLCBzbyB0aGF0J3MgYSBnb29kIGFzc3VtcHRpb24gdG8gaGF2ZS5cblxuVGhlIG5leHQgbG9naWNhbCBzdGVwLCBiZWZvcmUgSSBkaWcgYW55IGRlZXBlciBpbnRvIHRoZSBmdW5jdGlvbiBpdHNlbGYsIGlzIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBjaGVjayBleGFjdGx5ICpob3cqIGBCUEZfQ0FMTF80YCBpcyBkZWZpbmVkLiBVbmRlcnN0YW5kaW5nIHRoYXQgbWFjcm8gd2lsbCBnaXZlIG1lIHZpdGFsIGNvbnRleHQ6IHdoYXQgaXQgZXhwYW5kcyB0bywgaG93IHRoZSBhcmd1bWVudHMgYXJlIHBhc3NlZCwgYW5kIHVsdGltYXRlbHkgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIEJQRiBpbmZyYXN0cnVjdHVyZS4gS25vd2luZyB0aGUgbWFjcm8gZGVmaW5pdGlvbiBpcyBrZXkgdG8gdW5wYWNraW5nIHRoZSB3aG9sZSB0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0MDUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjo0OToxMi4zODkyNzg2MDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyNDA2MTUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBCUEZfQ0FMTF80XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjQ5OjEyLjQzNDUzMDIxN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODc1Njk2NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwncyBCUEYgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBteSBiZWFyaW5ncy4gR2l2ZW4gd2hhdCBJJ20gd29ya2luZyBvbiwgSSBrbm93IHRoZSBjcnVjaWFsIGRlZmluaXRpb25zIGFuZCBzdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gQmVya2VsZXkgUGFja2V0IEZpbHRlciAoQlBGKSBhcmUgZ29pbmcgdG8gYmUgaW4gb25lIG9mIHR3byBwbGFjZXMsIG1vc3QgbGlrZWx5LiBNeSBmaXJzdCBzdG9wIGhhcyB0byBiZSBlaXRoZXIgYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgIG9yLCBwZXJoYXBzIG1vcmUgZGlyZWN0bHksIGBpbmNsdWRlL2xpbnV4L2JwZi5oYC4gSSdsbCBzdGFydCB3aXRoIHRob3NlIGhlYWRlcnMuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgdHJlYXN1cmVzIGF3YWl0IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc1MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjQ5OjE1LjYyMjEwMjM5NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjg3Nzk5NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIEJQRl9DQUxMXzRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaD00MDk9c3RhdGljIGlubGluZSBib29sIGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02NTgtI2RlZmluZSBCUEZfQ0FMTF8zKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDMsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjY1OTojZGVmaW5lIEJQRl9DQUxMXzQobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goNCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjYwLSNkZWZpbmUgQlBGX0NBTExfNShuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCg1LCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjQ5OjE1Ljc1MDg4OTkyM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MTU3ODY4NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiBcIkxldCdzIHNlZSBgQlBGX0NBTExfeGAsXCIgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgYW4gZXhwZXJ0IGluIGEgcmVsZXZhbnQgZmllbGQgKGFzc3VtaW5nIHdlJ3JlIHRhbGtpbmcgYWJvdXQgQlBGIGluIGEgbmV0d29ya2luZyBvciBzeXN0ZW1zIGNvbnRleHQpOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgQ29yZSoqXG5cblJpZ2h0LCBgQlBGX0NBTExfeGAuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UncmUgbG9va2luZyBhdCBhIEJQRiBoZWxwZXIgZnVuY3Rpb24gY2FsbC4gVGhlIGBCUEZfQ0FMTF9gIHByZWZpeCBpcyBhIGRlYWQgZ2l2ZWF3YXkuIFRoZSBcInhcIiBpcyB0aGUgY3J1Y2lhbCBwYXJ0LCBvZiBjb3Vyc2UuIEl0IHNpZ25pZmllcyB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHNwZWNpZmljIGhlbHBlciwgbGlrZWx5IG9uZSB0aGF0J3MgYmVlbiBjb21waWxlZCBpbi5cblxuTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgcnVubmluZyB0aHJvdWdoIHRoZSBwb3NzaWJpbGl0aWVzLiBXaGF0J3MgdGhlIGNvbnRleHQ/IFdoYXQncyB0aGUgcHJvZ3JhbSB0eXBlPyBJcyB0aGlzIGEgdHJhY2Vwb2ludCwgYSBzb2NrZXQgZmlsdGVyLCBhIFhEUCBwcm9ncmFtLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIHR5cGUgb2YgcHJvZ3JhbSB3aWxsIGdyZWF0bHkgaW5mbHVlbmNlIHRoZSBhdmFpbGFibGUgaGVscGVyIGZ1bmN0aW9ucyBhbmQgdGhlIHJlZ2lzdGVycyBJIGhhdmUgYXQgbXkgZGlzcG9zYWwuXG5cbkknbSBwcm9iYWJseSBnb2luZyB0byBuZWVkIHRvIGxvb2sgdXAgYEJQRl9DQUxMX3hgIGluIHRoZSBrZXJuZWwgZG9jdW1lbnRhdGlvbiBvciB0aGUgcmVsZXZhbnQgaGVhZGVycyB0byBuYWlsIGRvd24gdGhlIGV4YWN0IGZ1bmN0aW9uLiBLbm93aW5nICp3aGljaCogYEJQRl9DQUxMX2Agd2UncmUgbG9va2luZyBhdCBpcyB0aGUga2V5LiBUaGUgKngqIHRlbGxzIG1lIHdoaWNoIG9uZSB0byBjaGVjaywgYW5kIGFsc28gd2hhdCBhcmd1bWVudHMgaXQgdGFrZXMsIGFuZCB3aGF0IGl0cyByZXR1cm4gdmFsdWUgaXMuIElzIGl0IGEgaGVscGVyIGZvciByZWFkaW5nIGEgcGFja2V0J3MgbWV0YWRhdGEsIG1hbmlwdWxhdGluZyBhIHNvY2tldCwgYWNjZXNzaW5nIGEgdXNlciBzcGFjZSBkYXRhIHN0cnVjdHVyZSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/XG5cbkknbGwgYmUgdGhpbmtpbmcgYWJvdXQgcG9zc2libGUgZWRnZSBjYXNlcy4gRG9lcyBpdCBoYXZlIGFueSBlcnJvciBjb2Rlcz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgcmV0dXJuIHZhbHVlPyBJcyBpdCBzYWZlIHRvIGNhbGwgdGhpcyBoZWxwZXIgZnJvbSB3aGVyZSB0aGlzIHByb2dyYW0gaXMgcnVubmluZz8gSWYgaXQgaXMgYSB0cmFjZXBvaW50LCBob3cgaXMgaXQgZGVhbGluZyB3aXRoIGNvbmN1cnJlbmN5IGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zPyBJcyBpdCBzdWJqZWN0IHRvIHByaXZpbGVnZSBpc3N1ZXM/XG5cbkFsc28sIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IGNvbmNlcm5zPyBXaGF0IGFyZSB0aGUgaW5wdXRzLCBhbmQgYXJlIHRoZXkgc2FuaXRpemVkPyBDYW4gaXQgYmUgZXhwbG9pdGVkIGluIHNvbWUgd2F5PyBXaGF0J3MgdGhlIGltcGFjdCBvbiBwZXJmb3JtYW5jZT8gSSdsbCBiZSB3YW50aW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYEJQRl9DQUxMX3hgIGFmZmVjdHMgdGhlIG92ZXJhbGwgQlBGIHByb2dyYW0gYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsIGFuZCB0aGUgc3Vycm91bmRpbmcgZW52aXJvbm1lbnQuIFNvIG1hbnkgZGV0YWlscyB0byBxdWlja2x5IHJlY2FsbCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTIxMTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjo0OToyMS40NjY2Nzk0ODhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzOTA0NzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBCUEZfQ0FMTF94XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvZmlsdGVyLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaD00MDk9c3RhdGljIGlubGluZSBib29sIGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02NDEtXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2NDI6I2RlZmluZSBCUEZfQ0FMTF94KHgsIGF0dHIsIG5hbWUsIC4uLilcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjQzLVxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjo0OToyMS41MTA1OTI1NTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk5OTg2NzU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQlBGIEZ1bmN0aW9uIFBvaW50ZXIgTWFnaWMqKlxuXG5BbHJpZ2h0LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLi4uIHRoZSBgQlBGX0NBTExfeGAgbWFjcm8gZmFtaWx5Li4uIHRoYXQncyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLCBpc24ndCBpdD8gSSdtIGFsbW9zdCBjZXJ0YWluIHRoYXQgd2hhdCB0aGVzZSBtYWNyb3MgYXJlIGRvaW5nIHVuZGVyIHRoZSBob29kIGlzIGdlbmVyYXRpbmcgdHdvIHRoaW5nczogYSBcImhpZGRlblwiIHN5bWJvbCwgcGVyaGFwcyBuYW1lZCBzb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIGBfX19fIyNuYW1lYCAob3IgYSBzaW1pbGFyLCBjb21waWxlci1nZW5lcmF0ZWQgY29uc3RydWN0KSwgYW5kIHRoZW4sIGFsb25nc2lkZSB0aGF0LCB0aGUgaW50ZW5kZWQgYG5hbWVgIGl0c2VsZi4gVGhlIFwiaGlkZGVuXCIgbmFtZSB3b3VsZCBsaWtlbHkgYmUgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBCUEYgZnVuY3Rpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZXhhY3QgbWFuZ2xpbmcgcnVsZXMsIGJ1dCB0aGF0J3MgdGhlIGJhc2ljIHBhdHRlcm4gSSdtIHJlY2FsbGluZywgdGhhdCB0aGUgZXhwYW5kZWQgbWFjcm8gcmVzdWx0cyBpbiB0aG9zZSB0d28gcGFydHMgYmVpbmcgY3JlYXRlZCBvciwgbW9yZSBzcGVjaWZpY2FsbHksIHRoZSBtYWNybyBjb25zdHJ1Y3RzIHRoZSBhcHByb3ByaWF0ZSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuIEkgbmVlZCB0byByZXZpc2l0IHRoZSBwcmVjaXNlIG1lY2hhbmljcyBvZiB3aHkgdGhhdOKAmXMgdGhlIHdheSB3ZSBoYW5kbGUgdGhlIGZ1bmN0aW9uIGNhbGxzLCBidXQgdGhlIGdvYWwgaXMgdG8gbWFrZSBhIHdheSB0byB1c2UgYSBCUEYgZnVuY3Rpb24gY2FsbCBpbiB0aGUgdXNlciBzcGFjZSBjb2RlIHdpdGggYSBrbm93biBmdW5jdGlvbiwgd2hpbGUgYWxzbyBkb2luZyBCUEYgdGhpbmdzIHVuZGVyIHRoZSBob29kLiBTbyB0aGUgaGlkZGVuIG5hbWUgaXMgdGhlIGludGVybmFsIHJlZmVyZW5jZSwgYW5kIHRoZSBtb3JlIHN0YW5kYXJkIG5hbWUgaXMgdGhlIG9uZSB0aGF0J3MgZXhwb3J0ZWQgc28gd2UgY2FuIGFjdHVhbGx5IGNhbGwgaXQgZnJvbSB1c2VyIHNwYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjcyNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjQ5OjI1LjUxMDQ2MjgyOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4MDk1ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIEJQRl9DQUxMX3hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTQwOT1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX2F0b21pY19pc19sb2FkX2FjcShjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTY0MS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjY0MjojZGVmaW5lIEJQRl9DQUxMX3goeCwgYXR0ciwgbmFtZSwgLi4uKVxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02NDMtXFx0c3RhdGljIF9fYWx3YXlzX2lubGluZVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjQ5OjI1LjU1NTI3Njc0M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDUyMTY2NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGN1cnJlbnQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGVCUEYgRmlsdGVyIFN0cnVjdHVyZXMqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGZvY3VzaW5nIG9uIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiBlQlBGIGZpbHRlciBjb25zdHJ1Y3Rpb24gd2l0aGluIHRoZSBrZXJuZWwuIExldCdzIHN0YXJ0IHdpdGggYSBzcGVjaWZpYyBwb2ludCDigJMgdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpbHRlciBzdHJ1Y3R1cmUgaXRzZWxmLiBJJ20gaGVhZGluZyBzdHJhaWdodCB0byBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA2NDIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgbGF5b3V0IG9mIHRoaXMgc3RydWN0OiB0aGUgYHNvY2tfZmlsdGVyYCBhcnJheSBhbmQgaXRzIGFzc29jaWF0ZWQgbWV0YWRhdGEuIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGV0YWlscyBpcyBjcnVjaWFsIHRvIHRyYWNpbmcgaG93IGZpbHRlciBwcm9ncmFtcyBhcmUgcmVwcmVzZW50ZWQgaW4gbWVtb3J5IGFuZCBob3cgdGhlIEpJVCBjb21waWxlciwgb3IgaW50ZXJwcmV0ZXIsIHdpbGwgdWx0aW1hdGVseSBwcm9jZXNzIHRoZW0uIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgaG93IHRoZSBpbnN0cnVjdGlvbiBwb2ludGVycywgY29uc3RhbnRzIGFuZCBqdW1wcyBhcmUgZW5jb2RlZCB3aXRoaW4gZWFjaCBpbnN0cnVjdGlvbiBvZiB0aGUgYXJyYXkuIExldCdzIHNlZSBpZiB0aGUgaW50ZXJuYWwgY29tbWVudHMgYXJlIHVwIHRvIGRhdGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTc0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6NDk6MjkuNjA3NDQ2MTgyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2ZpbHRlci5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYzNSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYzNTpcXHQjZGVmaW5lIF9fQlBGX0RFQ0xfQVJHUyh0LCBhKSB0ICAgYVxcbiA2MzY6XFx0I2RlZmluZSBfX0JQRl9ERUNMX1JFR1ModCwgYSkgdTY0IGFcXG4gNjM3OlxcdFxcbiA2Mzg6XFx0I2RlZmluZSBfX0JQRl9QQUQobilcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiA2Mzk6XFx0XFx0X19CUEZfTUFQKG4sIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfTiwgdTY0LCBfX3VyXzEsIHU2NCwgX191cl8yLCAgICAgICBcXFxcXFxuIDY0MDpcXHRcXHRcXHQgIHU2NCwgX191cl8zLCB1NjQsIF9fdXJfNCwgdTY0LCBfX3VyXzUpXFxuIDY0MTpcXHRcXG4gNjQyOlxcdCNkZWZpbmUgQlBGX0NBTExfeCh4LCBhdHRyLCBuYW1lLCAuLi4pXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjQzOlxcdFxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiA2NDQ6XFx0XFx0dTY0IF9fX18jI25hbWUoX19CUEZfTUFQKHgsIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfViwgX19WQV9BUkdTX18pKTsgICBcXFxcXFxuIDY0NTpcXHRcXHR0eXBlZGVmIHU2NCAoKmJ0Zl8jI25hbWUpKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSk7IFxcXFxcXG4gNjQ2OlxcdFxcdGF0dHIgdTY0IG5hbWUoX19CUEZfUkVHKHgsIF9fQlBGX0RFQ0xfUkVHUywgX19CUEZfTiwgX19WQV9BUkdTX18pKTsgICAgXFxcXFxcbiA2NDc6XFx0XFx0YXR0ciB1NjQgbmFtZShfX0JQRl9SRUcoeCwgX19CUEZfREVDTF9SRUdTLCBfX0JQRl9OLCBfX1ZBX0FSR1NfXykpICAgICBcXFxcXFxuIDY0ODpcXHRcXHR7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjQ5OlxcdFxcdFxcdHJldHVybiAoKGJ0Zl8jI25hbWUpX19fXyMjbmFtZSkoX19CUEZfTUFQKHgsX19CUEZfQ0FTVCxfX0JQRl9OLF9fVkFfQVJHU19fKSk7XFxcXFxcbiA2NTA6XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIDY1MTpcXHRcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjUyOlxcdFxcdHU2NCBfX19fIyNuYW1lKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSlcXG4gNjUzOlxcdFxcbiA2NTQ6XFx0I2RlZmluZSBfX05PQVRUUlxcbiA2NTU6XFx0I2RlZmluZSBCUEZfQ0FMTF8wKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDAsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG4gNjU2OlxcdCNkZWZpbmUgQlBGX0NBTExfMShuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgxLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuIDY1NzpcXHQjZGVmaW5lIEJQRl9DQUxMXzIobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMiwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbiA2NTg6XFx0I2RlZmluZSBCUEZfQ0FMTF8zKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDMsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG4gNjU5OlxcdCNkZWZpbmUgQlBGX0NBTExfNChuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCg0LCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuIDY2MDpcXHQjZGVmaW5lIEJQRl9DQUxMXzUobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goNSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbiA2NjE6XFx0XFxuIDY2MjpcXHQjZGVmaW5lIE5PVFJBQ0VfQlBGX0NBTExfMShuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgxLCBub3RyYWNlLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG4gNjYzOlxcdFxcbiA2NjQ6XFx0I2RlZmluZSBicGZfY3R4X3JhbmdlKFRZUEUsIE1FTUJFUilcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjQ5OjI5LjYwNzU3NTk3MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Njc2MDE3MzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGUgYGJwZl9za2JfYWRqdXN0X3Jvb21gIFBhdGNoKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQgZGVmaW5lcyBgbmFtZWAgYXMgYGJwZl9za2JfYWRqdXN0X3Jvb21gLCBhbmQgYF9fX19icGZfc2tiX2FkanVzdF9yb29tYCB3aGljaCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljIF9fYWx3YXlzX2lubGluZWAuIFRoZXJlZm9yZSwgdGhlIGtlcm5lbCBzeW1ib2wgaXRzZWxmLCB0aGUgb25lIGFjdHVhbGx5IGV4cG9zZWQgdG8gdGhlIEJQRiBwcm9ncmFtcywgaXMgaW5kZWVkIGBicGZfc2tiX2FkanVzdF9yb29tYC4gVGhhdCBtdWNoIGlzIGNsZWFyLlxuXG5JIHNlZSBhbHNvIHRoYXQgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBicGZfc2tiX25ldF9zaHJpbmtgLiBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBpZiB0aGF0IGZ1bmN0aW9uIGlzIGFsc28gc3RhdGljIGJlY2F1c2UgdGhhdCB3b3VsZCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIGNoYW5nZXMgaW50ZXJhY3QuIFllcCwgYGJwZl9za2JfbmV0X3Nocmlua2AgaXMgZGVjbGFyZWQgYHN0YXRpYyBpbnRgLiBPa2F5LCBzbyBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgaXMgY2xlYXJseSB0aGUga2V5IGVudHJ5IHBvaW50LlxuXG5Ob3csIEkgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzLiBBcmUgdGhlcmUgYW55IHBhcnRpY3VsYXIgYENPTkZJR2Agb3B0aW9ucyB0aGF0IGFyZSBuZWNlc3Nhcnkgb3IgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2U/IFRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgYG5ldC9jb3JlL2ZpbHRlci5jYCwgc28gdGhhdCdzIHdoZXJlIEkgbmVlZCB0byBsb29rLiBJdCdzIGNvbXBpbGVkIHdoZW4gZWl0aGVyIGBDT05GSUdfQlBGX1NZU0NBTExgIG9yIGBDT05GSUdfTkVUYCBpcyBlbmFibGVkLiBUaGF0IG1ha2VzIHNlbnNlLiBJJ2xsIHRha2UgYSBxdWljayBwZWVrIGF0IGBuZXQvY29yZS9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgY29tcGlsYXRpb24gZGVwZW5kZW5jaWVzIGFuZCBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDI3NCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjQ5OjM5LjI4MzU5NjA2NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg1OTI1NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmlsdGVyXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTEyPW9iai15XFx0XFx0ICAgICArPSBkZXYubyBkZXZfYXBpLm8gZGV2X2FkZHJfbGlzdHMubyBkc3QubyBuZXRldmVudC5vIFxcXFxcXG5uZXQvY29yZS9NYWtlZmlsZToxMzpcXHRcXHRcXHRuZWlnaGJvdXIubyBydG5ldGxpbmsubyB1dGlscy5vIGxpbmtfd2F0Y2gubyBmaWx0ZXIubyBcXFxcXFxubmV0L2NvcmUvTWFrZWZpbGUtMTQtXFx0XFx0XFx0c29ja19kaWFnLm8gZGV2X2lvY3RsLm8gdHNvLm8gc29ja19yZXVzZXBvcnQubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjQ5OjM5LjM3MjE5Njg2NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTI4NTk3OTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeSBhbmQgUHVycG9zZSBvZiBgZmlsdGVyLm9gKipcblxuT2theSwgc28gaXQgbG9va3MgbGlrZSBgZmlsdGVyLm9gIGlzIGFsd2F5cyBidWlsdCB3aGVuIHRoZSBgbmV0L2NvcmUvYCBtb2R1bGUgaXMgZW5hYmxlZCwgd2hpY2ggaW1wbGllcyBgQ09ORklHX05FVD15YC4gVGhhdCdzIGEgZnVuZGFtZW50YWwgcHJlcmVxdWlzaXRlLiBNeSBpbnRlcmVzdCBoZXJlIGlzIGluIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIG5ldyBCUEYgZmxhZ3Mg4oCTIGBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkVgLCBgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQYCwgYEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNGAsIGFuZCBgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2YCDigJMgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5JdCdzIGNsZWFyIHRoZXkgYXJlIHNpbXBseSBuZXcgb3B0aW9ucyBmb3IgdGhlIGV4aXN0aW5nIGBicGZfc2tiX2FkanVzdF9yb29tYCBoZWxwZXIuIFRoYXQgdGVsbHMgbWUgdGhpcyBpc24ndCBhIHJhZGljYWwgc2hpZnQsIGJ1dCBhbiBlbmhhbmNlbWVudCB0byBhbiBleGlzdGluZyBmdW5jdGlvbmFsaXR5LiBOb3cgSSBuZWVkIHRvIHJlY2FsbCB3aGVyZSBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgaXMgYmVpbmcgKnVzZWQqLiBSaWdodCwgaXQgaXMgcGFydCBvZiB0aGUgY29udGV4dCBmb3IgQlBGIHByb2dyYW1zIHdpdGggZWl0aGVyIHRoZSBgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFNgIG9yIGBCUEZfUFJPR19UWVBFX1NDSEVEX0FDVGAgdHlwZXMg4oCTIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHRyYWZmaWMgY29udHJvbCAodGMpIGZyYW1ld29yay4gVG8gc29saWRpZnkgdGhpcywgbGV0IG1lIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGB0Y19jbHNfYWN0X2Z1bmNfcHJvdG9gIGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIFRoYXQgc2hvdWxkIGNsYXJpZnkgdGhlIGV4YWN0IGludGVncmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDkzMywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjo0OTo0NS45MDA3OTc0NzdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MjM0MzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjX2Nsc19hY3RfZnVuY19wcm90b1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz04NjM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKlxcbm5ldC9jb3JlL2ZpbHRlci5jOjg2MzY6dGNfY2xzX2FjdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg2Mzcte1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTE1MTg9Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgdGNfY2xzX2FjdF92ZXJpZmllcl9vcHMgPSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE1MTk6XFx0LmdldF9mdW5jX3Byb3RvXFx0XFx0PSB0Y19jbHNfYWN0X2Z1bmNfcHJvdG8sXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE1MjAtXFx0LmlzX3ZhbGlkX2FjY2Vzc1xcdD0gdGNfY2xzX2FjdF9pc192YWxpZF9hY2Nlc3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjQ5OjQ1Ljk0NTAzNzUxMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTkzNzQwNDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqVEMgQlBGIGFuZCBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgLSBDb25maWd1cmF0aW9uIENoZWNrKipcblxuQWxyaWdodCwgc28gYGJwZl9za2JfYWRqdXN0X3Jvb21gIGlzIGFwcGFyZW50bHkgYWNjZXNzaWJsZSB3aXRoaW4gVEMgQlBGIHByb2dyYW1zIG5vdy4gVGhhdOKAmXMgZ29vZCB0byBrbm93LiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdmVyaWZ5IHRoaXMgYW5kIGdldCBpdCB1cCBhbmQgcnVubmluZy5cblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmlnaHQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZCBmb3IgVEMgQlBGIHRvIHdvcmsgY29ycmVjdGx5IHdpdGggdGhpcyBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBJIGtub3cgSSdsbCBuZWVkIGBDT05GSUdfQlBGX1NZU0NBTEw9eWAsIGFuZCB0aGVuIGVpdGhlciBgQ09ORklHX05FVF9DTFNfQlBGPXlgIG9yIGBDT05GSUdfTkVUX0FDVF9CUEY9eWAgKG9yIHBvdGVudGlhbGx5IGBDT05GSUdfTkVUX1NDSF9JTkdSRVNTPXlgLCBvciBvdGhlcnMgdGhhdCBlbmFibGUgQlBGIGZ1bmN0aW9uYWxpdHkpLiBcblxuU28sIG15IGltbWVkaWF0ZSBuZXh0IHRhc2sgaXMgdG8gZmlndXJlIG91dCB0aGUgbWluaW1hbCBzZXQgb2YgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQgdG8gdGVzdCB0aGlzIHByb3Blcmx5IHdpdGhpbiBhIFRDIEJQRiBlbnZpcm9ubWVudC4gSSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGtlcm5lbCBjb25maWdzIGFuZCBkb2N1bWVudGF0aW9uIHRvIGRldGVybWluZSB0aGUgb3B0aW1hbCBjb25maWd1cmF0aW9uIGZvciBhIHNpbXBsZSB0ZXN0IGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1Njg1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6NDk6NTEuNTM4NzgxMDc5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDE5MjI2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y19jbHNfYWN0X3ZlcmlmaWVyX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz0xMTUxND1jb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIHNrX2ZpbHRlcl9wcm9nX29wcyA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTE3LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExNTE4OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIHRjX2Nsc19hY3RfdmVyaWZpZXJfb3BzID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTE5LVxcdC5nZXRfZnVuY19wcm90b1xcdFxcdD0gdGNfY2xzX2FjdF9mdW5jX3Byb3RvLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjo0OTo1MS41ODI5Nzg3ODRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcwMzQzNDY1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2UgYXJlIG15IGluaXRpYWwgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgVXNhZ2Ugb2YgYHRjX2Nsc19hY3RfdmVyaWZpZXJfb3BzYCoqXG5cbkFscmlnaHQsIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcyBgdGNfY2xzX2FjdF92ZXJpZmllcl9vcHNgIHN0cnVjdHVyZS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGZpZ3VyZSBvdXQgKndoZXJlKiBpdCdzIGFjdHVhbGx5IGJlaW5nIHV0aWxpemVkLiBVbmRlcnN0YW5kaW5nIGl0cyBkZXBlbmRlbmNpZXMgYW5kIHRoZSBjb2RlIHRoYXQgaW50ZXJhY3RzIHdpdGggaXQgaXMgcGFyYW1vdW50IHRvIGdyYXNwaW5nIGl0cyBvdmVyYWxsIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2Ugd2l0aGluIHRoZSBjb2RlYmFzZS4gSXMgaXQgcGFydCBvZiBhIHNwZWNpZmljIHN1YnN5c3RlbSwgb3IgaXMgaXQgaW50ZWdyYXRlZCBtb3JlIGJyb2FkbHk/IFRoaXMgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uIHdpbGwgc2V0IHRoZSBzdGFnZSBmb3IgYW55IGZ1cnRoZXIgYW5hbHlzaXMgSSdsbCBuZWVkIHRvIGRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE2NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjQ5OjU2LjI4NjQxNjQ2N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0MzE0MjYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjX2Nsc19hY3RfdmVyaWZpZXJfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjo0OTo1Ni4zMzI4NTQ1MDNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5NTQ2MDAzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsJ3MgVHJhZmZpYyBDb250cm9sIFZlcmlmaWVyKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSB0cmFmZmljIGNvbnRyb2wgdmVyaWZpZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgaW1wbGVtZW50ZWQuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYG5ldC9jb3JlL2ZpbHRlci5jYC4gVGhhdCBmaWxlIHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBsb29rIGZvciB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHRjX2Nsc19hY3RfdmVyaWZpZXJfb3BzYC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSByZWxldmFudCBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyB0aGF0IGhhbmRsZSB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MgdGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIHZhbGlkYXRlcyBhY3Rpb25zIGFuZCBjbGFzc2lmaWVycyB3aXRoaW4gdGhlIHRyYWZmaWMgY29udHJvbCBmcmFtZXdvcmsuIExldCdzIHNlZSB3aGF0IHdlIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzkzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6NDk6NTkuNzI4MzE2OTU3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY1MzU5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y19jbHNfYWN0X3ZlcmlmaWVyX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz0xMTUxND1jb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIHNrX2ZpbHRlcl9wcm9nX29wcyA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTE3LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExNTE4OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIHRjX2Nsc19hY3RfdmVyaWZpZXJfb3BzID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTE5LVxcdC5nZXRfZnVuY19wcm90b1xcdFxcdD0gdGNfY2xzX2FjdF9mdW5jX3Byb3RvLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjo0OTo1OS43NzM5NzcyOTJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc4MTgzNDA3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIEJQRiBUeXBlIERlZmluaXRpb25zKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBkYXRhIHR5cGVzIHVzZWQgd2l0aGluIHRoZSBCUEYgZnJhbWV3b3JrLiBUaGF0IG1lYW5zIG15IGltbWVkaWF0ZSBmb2N1cyBzaG91bGQgYmUgdGhlIGBpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oYCBoZWFkZXIgZmlsZS4gSXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYnVpbGRpbmcgYmxvY2tzIG9mIGFueSBCUEYgcHJvZ3JhbS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBkZWZpbml0aW9ucyBmb3IgdGhpbmdzIGxpa2UgYF9fdTMyYCwgYF9fczY0YCwgdmFyaW91cyBzdHJ1Y3R1cmVzIHVzZWQgZm9yIEJQRiBtYXBzLCBhbmQgYW55dGhpbmcgZWxzZSByZWxhdGVkIHRvIGRhdGEgcmVwcmVzZW50YXRpb25zIGF0IHRoZSBrZXJuZWwgbGV2ZWwgdGhhdCBCUEYgaW50ZXJhY3RzIHdpdGguIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB1c2Ugb2YgdGhlc2UgdHlwZXMgd2l0aGluIGtlcm5lbCBjb250ZXh0cy4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS4uLiBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gcHJvdmlkZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIG1vcmUgY29tcGxleCBleHBsb3JhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzM0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6NTA6MDMuNTU1ODE0MDExWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTkyNDE4NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNfY2xzX2FjdF92ZXJpZmllcl9vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6NTA6MDMuNjAxNzQ4NjM3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNTA0NDkwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwncyBCUEYgSGVhZGVyKipcblxuQWxyaWdodCwgdGltZSB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBnZXQgYmFjayBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgdGhlIEJQRiBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBrZXJuZWwncyBkZWZpbml0aW9uLiBMZXQncyBzdGFydCB3aXRoIHRoZSBjb3JuZXJzdG9uZTogSSBuZWVkIHRvIG9wZW4gYW5kIGNhcmVmdWxseSBleGFtaW5lIHRoZSBgaW5jbHVkZS9saW51eC9icGYuaGAgaGVhZGVyIGZpbGUuIEl0J3MgdGhlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzLCBjb25zdGFudHMsIGFuZCBtYWNyb3MgdGhhdCB1bmRlcnBpbiB0aGUgZW50aXJlIGVCUEYgZnJhbWV3b3JrLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAqcmVhbGx5KiBoYXBwZW5zLiBJIG5lZWQgdG8gcXVpY2tseSBzY2FuIHRoZSB2YXJpb3VzIGVudW0gYW5kIHN0cnVjdCBkZWZpbml0aW9ucyBmb3IgY29udGV4dC4gR290dGEgbWFrZSBzdXJlIG5vdGhpbmcgZnVuZGFtZW50YWwgaGFzIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgdGltZSBJIHdhcyB0aGlzIGRlZXAuIEkgbmVlZCBhIGNsZWFyIG1lbnRhbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk4MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjUwOjA4Ljk1MjIwMDY2NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2MTA2MjUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjX2Nsc19hY3RfdmVyaWZpZXJfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjUwOjA4Ljk5ODgyMDAwOVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjQ0MDM4NTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBMaW51eCBrZXJuZWwgY29kZTpcblxuKipEaXZpbmcgaW50byB0aGUgVHJhZmZpYyBDb250cm9sIFZlcmlmaWVyIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBmb3IgYHRjX2Nsc19hY3RfdmVyaWZpZXJfb3BzYC4gTmF0dXJhbGx5LCBnaXZlbiBteSBleHBlcmllbmNlLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBuYXZpZ2F0ZSB0aGUga2VybmVsIHNvdXJjZSB0cmVlIGRpcmVjdGx5LiBUaGUgc3RhbmRhcmQgcGxhY2UgdG8gYmVnaW4gbG9va2luZyBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBUcmFmZmljIENvbnRyb2wgaXMgdXN1YWxseSB0aGUgYGluY2x1ZGUvbGludXgvYCBkaXJlY3RvcnkuIFRoYXQncyB3aGVyZSBhIGxvdCBvZiB0aGUgY29yZSBzdHJ1Y3R1cmVzLCBtYWNyb3MsIGFuZCBmdW5jdGlvbiBwcm90b3R5cGVzIHJlbGF0ZWQgdG8gdGhlIGtlcm5lbCdzIGludGVybmFsIEFQSXMgcmVzaWRlLiBJdOKAmXMgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RvcCwgYW5kIHRoZSBwYXRoIG9mIGxlYXN0IHJlc2lzdGFuY2Ugd2hlbiBkZWFsaW5nIHdpdGggZGVmaW5pdGlvbnMgbGlrZSB0aGlzIG9uZS4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjIyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6NTA6MTUuNjQyODYxMDAyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjI3OTEyMSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNfY2xzX2FjdF92ZXJpZmllcl9vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjUwOjE1LjcyNTE0NzMzM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjAxMTgzNjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2Agb3IgYSBzaW1pbGFyIGZpbGUgZGVhbGluZyB3aXRoIEJQRiBzeXNjYWxsIGhhbmRsaW5nLiBUaGF0J3MgdXN1YWxseSB0aGUgcGxhY2UgdG8gc3RhcnQgd2hlbiBJJ20gbG9va2luZyBhdCBCUEYgcHJvZ3JhbSB0eXBlcy4gQnV0IGhvbGQgb24uLi4gYSBxdWljayBjcm9zcy1yZWZlcmVuY2UgbWlnaHQgYmUgc21hcnRlci4gSSBzaG91bGQgY2hlY2sgd2hlcmUgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYCBpcyBhY3R1YWxseSAqZGVmaW5lZCouIFJpZ2h0LCBgYnBmX3R5cGVzLmhgLiBBaCwgdGhlcmUgaXQgaXMuIEl0IG1hcHMgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYCBkaXJlY3RseSB0byBgdGNfY2xzX2FjdGAuIEV4Y2VsbGVudC4gVGhhdCBoZWxwcyBuYXJyb3cgZG93biB0aGUgc2VhcmNoIGNvbnNpZGVyYWJseS4gS25vd2luZyB0aGF0IGNvbm5lY3Rpb24gaXMga2V5LiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0NDIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjo1MDoyNS4zMjYzMzUyMjFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTAzNTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjX2Nsc19hY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTU9QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsIHNrX2ZpbHRlcixcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTYtXFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaDo3OkJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIHRjX2Nsc19hY3QsXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC04LVxcdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6OTpCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfU0NIRURfQUNULCB0Y19jbHNfYWN0LFxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMTAtXFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjUwOjI1LjM3MTQ0MjMzNloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzI1NDE5MzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkJQRiBQcm9ncmFtIFR5cGUgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IGVCUEYgcHJvZ3JhbXMgYXJlIGhhbmRsZWQgaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHdpdGggcmVnYXJkIHRvIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2AgYW5kIGBCUEZfUFJPR19UWVBFX1NDSEVEX0FDVGAuIFJpZ2h0LCBgdGNfY2xzX2FjdGAgaXMgdGhlIGtleSBmdW5jdGlvbiB1c2VkIHRvIG1hbmFnZSB0aG9zZSwgd2hpY2ggSSBrbmV3LiBOb3csIGxldCBtZSByZW1pbmQgbXlzZWxmIC0gdGhlc2UgYXJlIGRlZmluaXRlbHkgZW5hYmxlZCBieSBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYWxzbyBgQ09ORklHX05FVGAsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEhtbSwgSSB3b25kZXIgaWYgd2UgbmVlZCBgQ09ORklHX05FVF9DTFNfQlBGYD8gSSBoYXZlIGEgZmVlbGluZyBpdCBtaWdodCBiZSwgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gYmUgY2VydGFpbiwgc28gaXQncyBiZXN0IHRvIHZlcmlmeSB0aGlzLiBBbHJpZ2h0LCBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBjb2RlLiBJJ2xsIHRha2UgYSBsb29rIGluIGBuZXQvc2NoZWQvY2xzX2JwZi5jYCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODk3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6NTA6MzAuMDk2ODY0ODc3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjkzMzY3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjbHNfYnBmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTU2Mj1jb25maWcgTkVUX0NMU19CUEZcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTU2OS1cXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG5uZXQvc2NoZWQvS2NvbmZpZzo1NzA6XFx0ICBiZSBjYWxsZWQgY2xzX2JwZi5cXG5uZXQvc2NoZWQvS2NvbmZpZy01NzEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjUwOjMwLjE0MzgwNzIzM1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjk0MzE0MzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgY29uc2lkZXJpbmcgSSBuZWVkIHRvIGdldCB0aGlzIEJQRiBwcm9ncmFtIHVwIGFuZCBydW5uaW5nOlxuXG4qKkJQRiBQcm9ncmFtIERlcGxveW1lbnQgXHUwMDI2IFRlc3RpbmcgQ29uc2lkZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyB0byBhY3R1YWxseSBpbnRlZ3JhdGUgdGhpcyBCUEYgcHJvZ3JhbSB3aXRoIGEgVHJhZmZpYyBDb250cm9sIChUQykgaG9vaywgaXQncyBwcmV0dHkgY2xlYXIgSSdtIGdvaW5nIHRvIG5lZWQgZWl0aGVyIGBDT05GSUdfTkVUX0NMU19CUEZgIG9yIGBDT05GSUdfTkVUX1NDSF9JTkdSRVNTYCBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlnLiBUaGF0IG1ha2VzIHNlbnNlLCB0aG9zZSBhcmUgdGhlIG5lY2Vzc2FyeSBidWlsZGluZyBibG9ja3MgZm9yIHRoYXQga2luZCBvZiBhdHRhY2htZW50LlxuXG5Ib3dldmVyLCBhbmQgdGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLCBpZiBJJ20ganVzdCBsb29raW5nIHRvIGxvYWQgdGhlIHByb2dyYW0gYW5kIHRlc3QgaXRzICpleGVjdXRpb24qIHVzaW5nIHNvbWV0aGluZyBsaWtlIHN5emthbGxlciwgYnlwYXNzaW5nIHRoZSBUQyBob29rIGZvciBub3csIGl0IHNlZW1zIEkgY2FuIGFjaGlldmUgdGhhdCB3aXRoIGBCUEZfUFJPR19SVU5gIC0gcHJvYmFibHkgdGhyb3VnaCBhIGZ1bmN0aW9uIGxpa2UgYGJwZl9wcm9nX3Rlc3RfcnVuYC4gVGhhdCB3b3VsZCBiZSBhIGdvb2QgaW5pdGlhbCB2YWxpZGF0aW9uIHN0ZXAuXG5cbk5vdywgZm9yIHRoYXQgYGJwZl9wcm9nX3Rlc3RfcnVuYCBwYXRoIHRvIHdvcmssIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfTkVUYCBhcmUgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4gVGhhdCBzZWVtcyByZWFzb25hYmxlLCBhcyB0aGVzZSBhcmUgdGhlIGZ1bmRhbWVudGFscyBmb3IgdGhlIEJQRiBzeXN0ZW0gY2FsbCBpbnRlcmZhY2UgYW5kIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0aWVzLCByZXNwZWN0aXZlbHkuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYGJwZl9wcm9nX3Rlc3RfcnVuYCBzdXBwb3J0cyBgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFNgIHNwZWNpZmljYWxseS4gV2UgY2FuJ3QgYXNzdW1lIHRoYXQgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IHdvcmssIHRoZSBzcGVjaWZpYyBwcm9ncmFtIHR5cGUgbWlnaHQgbmVlZCBleHBsaWNpdCBzdXBwb3J0LiBJIHNob3VsZCBwcm9iYWJseSBkaWcgaW50byB0aGUgc291cmNlIGNvZGUgZm9yIHRoYXQgZnVuY3Rpb24gdG8gbWFrZSBzdXJlLiBUaGF0J3MgYSBjcml0aWNhbCBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzE1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjUwOjM1LjQzODEyNDkyNVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM1MzY1NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JwZi90ZXN0X3J1bi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icGYvdGVzdF9ydW4uYz0xMDM1PWludCBicGZfcHJvZ190ZXN0X3J1bl9za2Ioc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTA2MC1cXHRzd2l0Y2ggKHByb2ctXFx1MDAzZXR5cGUpIHtcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTA2MTpcXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTOlxcbm5ldC9icGYvdGVzdF9ydW4uYy0xMDYyLVxcdGNhc2UgQlBGX1BST0dfVFlQRV9TQ0hFRF9BQ1Q6XFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTg4OD1zdGF0aWMgaW50IF9faW5pdCBicGZfcHJvZ190ZXN0X3J1bl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTkwMi1cXHRyZXQgPSByZWdpc3Rlcl9idGZfZm1vZHJldF9pZF9zZXQoXFx1MDAyNmJwZl90ZXN0X21vZGlmeV9yZXR1cm5fc2V0KTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTkwMzpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXFx1MDAyNmJwZl9wcm9nX3Rlc3Rfa2Z1bmNfc2V0KTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTkwNC1cXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsIFxcdTAwMjZicGZfcHJvZ190ZXN0X2tmdW5jX3NldCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjUwOjM1LjQ4MTY2NTM2MVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTY2OTcwMDUxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIFNLQiBBZGp1c3RtZW50IGFuZCBHU08gRmxhZ3MgZm9yIFN5emthbGxlciBUZXN0aW5nKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBlZmZlY3RpdmVseSB0ZXN0IHRoZSBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgQlBGIGhlbHBlciwgZXNwZWNpYWxseSBjb25zaWRlcmluZyBpdHMgaW50ZXJhY3Rpb24gd2l0aCBHU08gZmxhZ3MgYW5kIGVuY2Fwc3VsYXRpb24uIFRoZSBnb29kIG5ld3MgaXMgdGhhdCBgYnBmX3Byb2dfdGVzdF9ydW5fc2tiYCBkb2VzIGluZGVlZCBzdXBwb3J0IGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2AsIHdoaWNoIGlzIGdyZWF0LiBBbmQsIHNpbmNlIHdlIGhhdmUgYENPTkZJR19CUEZfU1lTQ0FMTGAsIHRoYXQncyBhIGtleSBzdGFydGluZyBwb2ludC5cblxuQnV0IHRoZW4gSSByZW1lbWJlcmVkIGBicGZfc2tiX25ldF9zaHJpbmtgLCBhbmQgaG93IGl0IGNsZWFycyBgc2tiLVx1MDAzZWVuY2Fwc3VsYXRpb25gLCBwbHVzIHRob3NlIGNydWNpYWwgR1NPIGZsYWdzOiBgU0tCX0dTT19VRFBfVFVOTkVMYCwgYFNLQl9HU09fR1JFYCwgYW5kIHRoZSByZXN0LiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHdlIGNhbiB0ZXN0IHRoZXNlIHNjZW5hcmlvcy4gSSBzZWUgdGhhdCB0aG9zZSBmbGFncyBhcmUgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAsIHNvIEknbGwga2VlcCB0aGF0IGluIG1pbmQuXG5cbk5vdywgbXkgbWluZCBnb2VzIHRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGVzZSB0dW5uZWxzLiBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGNvbmZpZ3MgSSBzaG91bGQgd2F0Y2ggb3V0IGZvciByZWxhdGVkIHRvIEdSRSwgVURQIHR1bm5lbHMsIElQSVAsIGFuZCBTSVQ/IFRoZSBwYXRjaCBwb2ludHMgdG8gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3R1bm5lbC5jYCwgd2hpY2ggdXNlcyB0aGUgYEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRWAsIGV0Yy4gZmxhZ3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3ZSBjYW4gY3JlYXRlIFNLQnMgd2l0aCB0aGVzZSBHU08gdHlwZXMgdXNpbmcgc3l6a2FsbGVyLiBTeXprYWxsZXIgY291bGQgdXNlIGB0dW5gL2B0YXBgIG9yIGB2ZXRoYCBhbmQgc2VuZCBwYWNrZXRzLCBidXQsIGlmIGl0J3MgdXNpbmcgYGJwZl9wcm9nX3Rlc3RfcnVuYCwgdGhlbiB0aGUgcXVlc3Rpb24gaXMsIGhvdyBkb2VzIGl0IHNldCB0aGVzZSBHU08gZmxhZ3MgaW4gYSBjcmFmdGVkIFNLQj9cblxuSSB0aG91Z2h0IGBicGZfcHJvZ190ZXN0X3J1bl9za2JgIG1pZ2h0IGxldCBtZSBzZXQgYHNoaW5mbyhza2IpLVx1MDAzZWdzb190eXBlYCBkaXJlY3RseSwgYnV0IGl0IGxvb2tzIGxpa2UgdGhhdCdzIG5vdCB0aGUgY2FzZS4gSXQgbWF5IGJlIHNldCBpZiBpdCBnb2VzIHRocm91Z2ggdGhlIGtlcm5lbCBzdGFjay4gSG93ZXZlciwgd2FpdCwgaXQganVzdCBjbGlja2VkISBTeXprYWxsZXIgKmNhbiogaW5qZWN0IHBhY2tldHMgdmlhIGB0dW5gIG9yIGBwYWNrZXRgIHNvY2tldHMgdGhhdCB1c2UgYFZORVRfSERSYCwgYW5kIHRoaXMgKmRvZXMqIGFsbG93IHNldHRpbmcgR1NPIGZsYWdzISBZZXMsIHRoZSBgdmlydGlvX25ldF9oZHJgIGdpdmVzIGFjY2Vzcy4gU28sIHRoYXQgbWVhbnMgY3JlYXRpbmcgU0tCcyB3aXRoIGBTS0JfR1NPX1VEUF9UVU5ORUxgIHNob3VsZCBiZSBmYWlybHkgZWFzeS5cblxuSSBzZWUgdGhhdCBzeXprYWxsZXIgYWxyZWFkeSBlbmFibGVzIGBDT05GSUdfVFVOYCwgc28gdGhhdCdzIGEgcG9zaXRpdmUuIFdoYXQgYWJvdXQgYENPTkZJR19ORVRfSVBHUkVgLCBgQ09ORklHX0lQVjZfU0lUYCwgYW5kIGBDT05GSUdfSVBWNl9UVU5ORUxgPyBUaGV5IG1pZ2h0IGJlIHVzZWZ1bCBpZiBzeXprYWxsZXIgdHJpZXMgdG8gdHJpZ2dlciB0aGlzIHZpYSBhY3R1YWwgdHVubmVsIGRldmljZXMsIGJ1dCBzaW5jZSB0aGlzIGlzIGEgQlBGIGhlbHBlciwgc3l6a2FsbGVyIHdpbGwganVzdCBjYWxsIHRoZSBCUEYgaGVscGVyIGRpcmVjdGx5IG9uIHdoYXRldmVyIFNLQiBpdCBoYXMuIFNvIGl0IHNvdW5kcyBsaWtlIHRoZSBtYWluIHRhcmdldCBpcyB0aGUgYGJwZl9za2JfYWRqdXN0X3Jvb21gIGhlbHBlciBpdHNlbGYuXG5cblRoZXJlZm9yZSwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIGZ1bmN0aW9uczogYGJwZl9za2JfYWRqdXN0X3Jvb21gIGFuZCBgYnBmX3NrYl9uZXRfc2hyaW5rYCDigJMgd2hpY2ggaXMgbGlrZWx5IGlubGluZWQgb3IgZGlyZWN0bHkgcGFydCBvZiB0aGUgYGJwZl9za2JfYWRqdXN0X3Jvb21gIGZ1bmN0aW9uLiBJIHdpbGwgY2hlY2sgd2hldGhlciBgYnBmX3NrYl9uZXRfc2hyaW5rYCBpcyBpbmxpbmVkLCBqdXN0IHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTgwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjUwOjQ3LjE1MTM2ODA1NFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4MzY1NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3NrYl9uZXRfc2hyaW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTM1OTg9c3RhdGljIGludCBicGZfc2tiX25ldF9ncm93KHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvZmYsIHUzMiBsZW5fZGlmZixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTM3MTItXFxubmV0L2NvcmUvZmlsdGVyLmM6MzcxMzpzdGF0aWMgaW50IGJwZl9za2JfbmV0X3NocmluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgb2ZmLCB1MzIgbGVuX2RpZmYsXFxubmV0L2NvcmUvZmlsdGVyLmMtMzcxNC1cXHRcXHRcXHQgICAgICB1NjQgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0zODQ3PUJQRl9DQUxMXzQoYnBmX3NrYl9hZGp1c3Rfcm9vbSwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBzMzIsIGxlbl9kaWZmLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMzkzMi1cXG5uZXQvY29yZS9maWx0ZXIuYzozOTMzOlxcdHJldCA9IHNocmluayA/IGJwZl9za2JfbmV0X3Nocmluayhza2IsIG9mZiwgbGVuX2RpZmZfYWJzLCBmbGFncykgOlxcbm5ldC9jb3JlL2ZpbHRlci5jLTM5MzQtXFx0XFx0ICAgICAgIGJwZl9za2JfbmV0X2dyb3coc2tiLCBvZmYsIGxlbl9kaWZmX2FicywgZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjo1MDo0Ny4xOTgyMDk1MTlaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUyMzE0NzQxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtlcm5lbCBGdW5jdGlvbiBDYWxsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiBjYWxsIOKAkyBpdCdzIHN0YXRpYywgc28gdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoZSBjb21waWxlciBtaWdodCBpbmxpbmUgaXQuIFRoYXQncyB0aGUgZmlyc3QgdGhpbmcgdG8gY29uc2lkZXIuIFRoZXJlZm9yZSwgbXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gYGJwZl9za2JfYWRqdXN0X3Jvb21gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBiZWluZyB1c2VkLlxuXG5Ob3csIGxldCdzIHNlZS4gUmlnaHQsIHRoZSBzeW1ib2wgbmFtZSBmb3IgYEJQRl9DQUxMXzQoYnBmX3NrYl9hZGp1c3Rfcm9vbSwgLi4uKWAgaXMgYWN0dWFsbHkgdHdvLWZvbGQ6IHdlIGhhdmUgdGhlIHdyYXBwZXIsIGp1c3QgYGJwZl9za2JfYWRqdXN0X3Jvb21gLCBhbmQgdGhlIGlubGluZSB2ZXJzaW9uIGlzIGBfX19fYnBmX3NrYl9hZGp1c3Rfcm9vbWAuIEdlbmVyYWxseSwgaW4gYSBrZXJuZWwgY29udGV4dCwgdGhlIHdyYXBwZXIsIHRoZSBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgdmVyc2lvbiwgKmlzbid0KiBpbmxpbmVkIGFuZCBzbyBzaG91bGQgYmUgcmVhZGlseSB2aXNpYmxlIGluIGBrYWxsc3ltc2AuIFRoYXQncyB3aGVyZSBJJ2xsIHByb2JhYmx5IGZpbmQgdGhlIGNyb3NzIHJlZmVyZW5jZXMuXG5cbkhvbGQgb24gYSBzZWNvbmQuLi50aGlzIHBhdGNoIGFsc28gdG91Y2hlcyBgYnBmX3NrYl9uZXRfYmFzZV9sZW5gLCBzbyBJJ2xsIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgdG9vLiBJIGNhbid0IGp1c3QgaXNvbGF0ZSBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgaW4gdGhpcyBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5NDEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6NTA6NTEuNzIxMzU5NDkyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQxMTExNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc2tiX25ldF9iYXNlX2xlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz0zNTUwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9jaGFuZ2VfdHlwZV9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTM1NTctXFxubmV0L2NvcmUvZmlsdGVyLmM6MzU1ODpzdGF0aWMgdTMyIGJwZl9za2JfbmV0X2Jhc2VfbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2NvcmUvZmlsdGVyLmMtMzU1OS17XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0zODQ3PUJQRl9DQUxMXzQoYnBmX3NrYl9hZGp1c3Rfcm9vbSwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBzMzIsIGxlbl9kaWZmLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMzg1MC1cXHR1MzIgbGVuX2N1ciwgbGVuX2RpZmZfYWJzID0gYWJzKGxlbl9kaWZmKTtcXG5uZXQvY29yZS9maWx0ZXIuYzozODUxOlxcdHUzMiBsZW5fbWluID0gYnBmX3NrYl9uZXRfYmFzZV9sZW4oc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0zODUyLVxcdHUzMiBsZW5fbWF4ID0gQlBGX1NLQl9NQVhfTEVOO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMzg2OC1cXHRjYXNlIEJQRl9BREpfUk9PTV9ORVQ6XFxubmV0L2NvcmUvZmlsdGVyLmM6Mzg2OTpcXHRcXHRvZmYgKz0gYnBmX3NrYl9uZXRfYmFzZV9sZW4oc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0zODcwLVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMzkwMS1cXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLKVxcbm5ldC9jb3JlL2ZpbHRlci5jOjM5MDI6XFx0XFx0XFx0bGVuX2RlY2FwX21pbiArPSBicGZfc2tiX25ldF9iYXNlX2xlbihza2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTM5MDMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjUwOjUxLjc2NTc3NTk3N1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5ODA0NjAwODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIEFkanVzdG1lbnQgb2YgU0tCIERhdGEqKlxuXG5Pa2F5LCBzbyBgYnBmX3NrYl9uZXRfYmFzZV9sZW5gIGlzIHN0YXRpYywgd2hpY2ggbWVhbnMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgdG8gY29uc2lkZXIgaXMgYGJwZl9za2JfYWRqdXN0X3Jvb21gLiBMZXQncyBjb25maXJtIGFueSBvdGhlciBmaWxlcyBpbXBhY3RlZC4gQWxyaWdodCwgbG9va3MgbGlrZSBjaGFuZ2VzIGV4dGVuZCB0bzogYGluY2x1ZGUvdWFwaS9saW51eC9icGYuaGAsIGBuZXQvY29yZS9maWx0ZXIuY2AsIGB0b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhgLCBhbmQgc29tZSBzZWxmdGVzdCBmaWxlcy5cblxuU3BlY2lmaWNhbGx5LCBpbiB0aGUga2VybmVsIHNvdXJjZSwgdGhlIG9ubHkgbW9kaWZpY2F0aW9uIHJlc2lkZXMgd2l0aGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIEFuZCB0aGVzZSBjaGFuZ2VzIGFyZSBjb25jZW50cmF0ZWQgd2l0aGluIGBicGZfc2tiX25ldF9zaHJpbmtgIGFuZCwgb2YgY291cnNlLCBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAsIGFzIGJvdGggYXJlIHBhcnQgb2YgdGhlIGJyb2FkZXIgYGJwZl9za2JfYWRqdXN0X3Jvb21gIEJQRiBoZWxwZXIuIFRoZXJlZm9yZSwgYGJwZl9za2JfYWRqdXN0X3Jvb21gIGlzIG91ciBzeW1ib2wgb2YgaW50ZXJlc3Qg4oCTIGFuZCB0aGUgZm9jdXMuXG5cbkhhbmcgb24sIGlzIGBicGZfc2tiX2FkanVzdF9yb29tYCByZWFsbHkgdGhlIHByZWNpc2Ugc3ltYm9sPyBMZXQgbWUgcXVpY2tseSB2ZXJpZnkgd2l0aCBgbm1gIG9yIGp1c3QgYXNzdW1lIGJhc2VkIG9uIHRoZSBgQlBGX0NBTExfNGAgbWFjcm8gZGVmaW5pdGlvbiB3ZSd2ZSBlbmNvdW50ZXJlZCBlYXJsaWVyLiBZZXAsIGFmdGVyIGNvbnNpZGVyaW5nIHRoZSBtYWNybyBleHBhbnNpb24sIGl0IHNlZW1zIGNvcnJlY3QuIFRoZSBmdW5jdGlvbiBuYW1lZCBpcyBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAsIHdoaWNoLCBiYXNlZCBvbiB0aGUgYEJQRl9DQUxMXzRgIGRlZmluaXRpb24sIGlzIG5vbi1zdGF0aWMgYW5kLCB0aGVyZWZvcmUsIGdsb2JhbC5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBnaXZlbjsgaXQncyBuZWNlc3NhcnkgZm9yIEJQRi4gYENPTkZJR19ORVRgIGlzIHJlcXVpcmVkIGR1ZSB0byBgbmV0L2NvcmUvZmlsdGVyLmNgJ3MgcHJlc2VuY2UuIEhtbSwgYXJlIHRoZXJlIGFueSBvdGhlciBjcnVjaWFsIGNvbmZpZ3VyYXRpb25zP1xuXG5UaGUgcGF0Y2ggc2VlbXMgdG8gZW5hYmxlIGhhbmRsaW5nIG9mIEdSRSwgVURQLCBJUElQLCBhbmQgU0lUIHR1bm5lbHMg4oCTIGRlY2Fwc3VsYXRpb24sIHNwZWNpZmljYWxseS4gU28sIGRvZXMgaXQgZGVwZW5kIG9uIGNvbmZpZ3VyYXRpb25zIGxpa2UgYENPTkZJR19ORVRfSVBHUkVgIG9yIGBDT05GSUdfSVBWNl9TSVRgPyBObywgdGhlIEJQRiBoZWxwZXIgaXMganVzdCBtYW5pcHVsYXRpbmcgdGhlIFNLQiBkYXRhIGFuZCBjbGVhcmluZyBHU08gZmxhZ3MuIEl0J3Mgbm90IGFjdHVhbGx5IGNhbGxpbmcgaW50byBHUkUgb3IgU0lUIG1vZHVsZXMuIEl0IHV0aWxpemVzIGBzaXplb2ZgIGZvciBoZWFkZXJzIGxpa2UgYHN0cnVjdCBncmVfYmFzZV9oZHJgLCBgc3RydWN0IHVkcGhkcmAsIGBzdHJ1Y3QgaXBoZHJgLCBhbmQgYHN0cnVjdCBpcHY2aGRyYC4gVGhlc2UgYXJlIGRlZmluZWQgaW4gc3RhbmRhcmQgaW5jbHVkZSBmaWxlcyAoYGxpbnV4L2dyZS5oYCwgYGxpbnV4L3VkcC5oYCwgYGxpbnV4L2lwLmhgLCBgbGludXgvaXB2Ni5oYCksIHdoaWNoIGFyZSBhbHdheXMgYXZhaWxhYmxlLiBBaCwgd2FpdCwgYFx1MDAzY25ldC9jb3JlL2ZpbHRlci5jXHUwMDNlYCBpbmNsdWRlcyBgXHUwMDNjbmV0L2dyZS5oXHUwMDNlYC4gTGV0IG1lIHF1aWNrbHkgY29uZmlybSBpZiB0aGF0IGhlYWRlciByZXF1aXJlcyBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiB0byBiZSBhY3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxODI3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjUxOjAxLjU3MDM3OTk1M1oiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzOTIzOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0L2dyZS5oXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jLTU4LSNpbmNsdWRlIFxcdTAwM2NuZXQvdGNwLmhcXHUwMDNlXFxubmV0L2NvcmUvZmlsdGVyLmM6NTk6I2luY2x1ZGUgXFx1MDAzY25ldC9ncmUuaFxcdTAwM2VcXG5uZXQvY29yZS9maWx0ZXIuYy02MC0jaW5jbHVkZSBcXHUwMDNjbmV0L3hmcm0uaFxcdTAwM2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6NTE6MDEuNjE4Nzc5ODU4WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NDM0NTExNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKipcblxuQWxyaWdodCwgc28gaXQgbG9va3MgbGlrZSB0aGlzIGlzIGp1c3QgYWJvdXQgaW5jbHVkaW5nIHRoZSBuZWNlc3Nhcnkga2VybmVsIGhlYWRlcnMuIFNpbXBsZSBlbm91Z2guIFdlIGRlZmluaXRlbHkgbmVlZCBgQlBGX1NZU0NBTExgIGFuZCwgc2luY2UgYE5FVGAgaXMgZm91bmRhdGlvbmFsLCB3ZSBjYW4ganVzdCBmb2N1cyBvbiB0aGF0IGZpcnN0IG9uZS4gSG9sZCBvbiBhIHNlYywgdGhvdWdoLiBTaG91bGQgSSBhbHNvIGluY2x1ZGUgYENPTkZJR19ORVRfQ0xTX0JQRmAgb3IgYENPTkZJR19ORVRfQUNUX0JQRmA/XG5cbkkgZGlkIGNoZWNrIGVhcmxpZXIsIGFuZCBgYnBmX3Byb2dfdGVzdF9ydW5gIHNlZW1zIHRvIGRpcmVjdGx5IHN1cHBvcnQgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYC4gQnV0IHN5emthbGxlci4uLml0IG1pZ2h0IHVzZSBgdGNgIHVuZGVyIHRoZSBob29kIHRvIGF0dGFjaCB0aGUgcHJvZ3JhbS4gVGhlIGBzeXpfYnBmYCBkZXNjcmlwdGlvbnMgaW4gc3l6a2FsbGVyICpkbyogcmVmZXJlbmNlIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2AuIExldCdzIGp1c3QgYmUgdGhvcm91Z2ggYW5kIGNoZWNrIHdoZXRoZXIgc3l6a2FsbGVyICpuZWVkcyogYE5FVF9DTFNfQlBGYCB0byBydW4gdGhlIHRlc3QgY29ycmVjdGx5LlxuXG5CZXN0IHByYWN0aWNlIGRpY3RhdGVzIGhhdmluZyBgTkVUX0NMU19CUEZgIGVuYWJsZWQgYW55d2F5LCBzbyBsZXQncyBnbyBhaGVhZCBhbmQgaW5jbHVkZSB0aGF0LiBBbmQgZm9yIGdvb2QgbWVhc3VyZSwgbGV0J3MgYWxzbyBhZGQgYE5FVF9BQ1RfQlBGYC4gSXQncyBhbHdheXMgYmV0dGVyIHRvIGJlIGluY2x1c2l2ZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB0aGlzIGtpbmQgb2YgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxNjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6NTE6MDcuMzYyMjM0OTY1WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTMxMDE1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0NMU19CUEZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9NTUwPWNvbmZpZyBORVRfQ0xTX0NHUk9VUFxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNTYxLVxcbm5ldC9zY2hlZC9LY29uZmlnOjU2Mjpjb25maWcgTkVUX0NMU19CUEZcXG5uZXQvc2NoZWQvS2NvbmZpZy01NjMtXFx0dHJpc3RhdGUgXFxcIkJQRi1iYXNlZCBjbGFzc2lmaWVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjo1MTowNy40MDc1NDg1MVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDM3NDg0MjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZDpcblxuKipEaXZpbmcgaW50byBOZXR3b3JrIEFjdGl2aXR5IHdpdGggQlBGKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgaGFuZHMtb24uIFdoZW4gSSBzZWUgdGhhdCBub3RhdGlvbiwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgXCJMZXQncyBjaGVjayBgTkVUX0FDVF9CUEZgXCIuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIGFzc2VzcyBob3cgd2UgYXJlIGludGVyYWN0aW5nIHdpdGggdGhlIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgaG9va3MgcmVsYXRlZCB0byBuZXR3b3JrIGFjdGl2aXR5LiBJJ20gdGhpbmtpbmcgYWJvdXQgcGVyZm9ybWFuY2UgbW9uaXRvcmluZywgcGVyaGFwcyBzb21lIHNlY3VyaXR5IGFuYWx5c2lzLCBvciBldmVuIGRlZXBlciBwYWNrZXQgbWFuaXB1bGF0aW9uLiBJIHdpbGwgbm93IGV4YW1pbmUgdGhpcyBzcGVjaWZpYyBkYXRhIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9ucyByZWxhdGVkIHRvIG5ldHdvcmsgYWN0aW9ucy4gVGhpcyBjb3VsZCBiZSBpbiB0aGUgY29udGV4dCBvZiB0cmFmZmljIHNoYXBpbmcsIGludHJ1c2lvbiBkZXRlY3Rpb24sIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgb3IgYW55IG51bWJlciBvZiBuZXR3b3JrLXJlbGF0ZWQgdGFza3MuIExldCdzIHNlZSB3aGF0IHRoZSBkYXRhIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzYzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6NTE6MTAuNDQ1MDM1NjI2WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTIwNjQxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0FDVF9CUEZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9ODMwPWNvbmZpZyBORVRfQUNUX1ZMQU5cXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTg0MC1cXG5uZXQvc2NoZWQvS2NvbmZpZzo4NDE6Y29uZmlnIE5FVF9BQ1RfQlBGXFxubmV0L3NjaGVkL0tjb25maWctODQyLVxcdHRyaXN0YXRlIFxcXCJCUEYgYmFzZWQgYWN0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjo1MToxMC40OTAyNDcxODFaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODMzOTQ1MzM1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgaXRzIHBvdGVudGlhbCBpbXBhY3QgYW5kIHdoZXRoZXIgaXQgd2FycmFudHMgZnVydGhlciBzY3J1dGlueSwgZXNwZWNpYWxseSB0aHJvdWdoIGZ1enppbmcuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcyB0aGF0IEkgbmVlZCB0byBhZGQgYEJQRl9TWVNDQUxMYCwgYE5FVF9DTFNfQlBGYCwgYW5kIGBORVRfQUNUX0JQRmAgdG8gbXkgbWVudGFsIGNoZWNrbGlzdCBmb3IgdGhpcyBhcmVhLlxuXG5GaXJzdCwgbGV0IG1lIGNvbmZpcm0gbXkgaW5pdGlhbCBvYnNlcnZhdGlvbi4gKmJwZl9za2JfYWRqdXN0X3Jvb20qIHNlZW1zIHRvIGJlIHRoZSBvbmx5IGZ1bmN0aW9uIG1vZGlmaWVkIGRpcmVjdGx5LiBZZXAsIGxvb2tzIGxpa2UgaXQuIEdvb2QuIFRoaXMgaXMgbXkgZm9jYWwgcG9pbnQuXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIG5ldyBmbGFncyB3aXRoaW4gYGJwZl9za2JfYWRqdXN0X3Jvb21gLCBzcGVjaWZpY2FsbHkgZm9yIGNsZWFyaW5nIHR1bm5lbC1zcGVjaWZpYyBHZW5lcmljIFNlZ21lbnRhdGlvbiBPZmZsb2FkIChHU08pIGZsYWdzIGR1cmluZyBkZWNhcHN1bGF0aW9uLiBUaGlzIHNjcmVhbXMgXCJuZXR3b3JraW5nIEJQRlwiIHRvIG1lLlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgaW1wYWN0cyB0aGUgY29yZSBCUEYgbmV0d29ya2luZyBsb2dpYywgYW5kIGNyaXRpY2FsbHksIHRoaXMgY2hhbmdlICppcyogdXNlci1zcGFjZSByZWFjaGFibGUgdmlhIEJQRiBwcm9ncmFtcywgcHJpbWFyaWx5IFRyYWZmaWMgQ29udHJvbCAoVEMpIEJQRiBwcm9ncmFtcy4gQmVjYXVzZSBvZiBpdHMgcGxhY2UgaW4gdGhlIGNvbnRyb2wgcGxhbmUsIGl0J3Mgd29ydGggZnV6emluZy4gVGhlIGludGVycGxheSB3aXRoIEdTTyBtYWtlcyBpdCBldmVuIG1vcmUgaW50ZXJlc3RpbmcgZm9yIG1lLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpc3RpbGwgdGhpcy4gTXkgc3VtbWFyeSBpczpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUgLSBUaGlzIGlzIGEgY2hhbmdlIHRvIGEgY3JpdGljYWwgQlBGIGhlbHBlciByZWFjaGFibGUgdmlhIHVzZXItc3BhY2UuXG4qICAgKipGb2N1c1N5bWJvbHM6KiogYGJwZl9za2JfYWRqdXN0X3Jvb21gIC0gVGhpcyBpcyB0aGUgY2VudHJhbCBmdW5jdGlvbiBhZmZlY3RlZC5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYEJQRl9TWVNDQUxMYCwgYE5FVF9DTFNfQlBGYCwgYE5FVF9BQ1RfQlBGYCAtIFRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSByZWxldmFudCB0byBlbmFibGluZyB0aGlzIGZ1bmN0aW9uYWxpdHkuXG4qICAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGZsYWdzIHRvIHRoZSBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgQlBGIGhlbHBlciBmb3IgY2xlYXJpbmcgdHVubmVsLXNwZWNpZmljIEdTTyBmbGFncyBkdXJpbmcgZGVjYXBzdWxhdGlvbi4gVGhpcyBjaGFuZ2VzIGNvcmUgQlBGIG5ldHdvcmtpbmcgbG9naWMgYWNjZXNzaWJsZSB0aHJvdWdoIFRDIEJQRiBwcm9ncmFtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwNTcsIk91dHB1dFRva2VucyI6MTE0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjUxOjE4LjgyOTcwMjk1OVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2ODM5NDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUX0NMU19CUEZcIixcbiAgICBcIk5FVF9BQ1RfQlBGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3NrYl9hZGp1c3Rfcm9vbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbmV3IGZsYWdzIHRvIHRoZSBicGZfc2tiX2FkanVzdF9yb29tIEJQRiBoZWxwZXIgdG8gY2xlYXIgdHVubmVsLXNwZWNpZmljIEdTTyBmbGFncyBkdXJpbmcgZGVjYXBzdWxhdGlvbi4gVGhpcyBtb2RpZmllcyBjb3JlIEJQRiBuZXR3b3JraW5nIGxvZ2ljIHJlYWNoYWJsZSB2aWEgVEMgQlBGIHByb2dyYW1zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRfQ0xTX0JQRlwiLFxuICAgIFwiTkVUX0FDVF9CUEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc2tiX2FkanVzdF9yb29tXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBuZXcgZmxhZ3MgdG8gdGhlIGJwZl9za2JfYWRqdXN0X3Jvb20gQlBGIGhlbHBlciB0byBjbGVhciB0dW5uZWwtc3BlY2lmaWMgR1NPIGZsYWdzIGR1cmluZyBkZWNhcHN1bGF0aW9uLiBUaGlzIG1vZGlmaWVzIGNvcmUgQlBGIG5ldHdvcmtpbmcgbG9naWMgcmVhY2hhYmxlIHZpYSBUQyBCUEYgcHJvZ3JhbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjUxOjE4LjkwNjU0ODc1MVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1MjkyODQ2NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjo1MToxOC45MDcxNDYwMzFaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQ1Mjg2ODM1OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGZsYWdzIGZvciB0aGUgYGJwZl9za2JfYWRqdXN0X3Jvb21gIEJQRiBoZWxwZXIgdG8gc2VsZWN0aXZlbHkgY2xlYXIgR1NPIHR1bm5lbCBmbGFncyBhbmQgdGhlIGBza2ItXFx1MDAzZWVuY2Fwc3VsYXRpb25gIGZsYWcgZHVyaW5nIHBhY2tldCBkZWNhcHN1bGF0aW9uLiBUaGUgY2hhbmdlcyBjb25zaXN0IG9mIGJpdHdpc2Ugb3BlcmF0aW9ucyBvbiBleGlzdGluZyBgc2tiX3NoYXJlZF9pbmZvYCBmaWVsZHMgKGBnc29fdHlwZWApIGFuZCBgc2tiYCBmaWVsZHMgKGBlbmNhcHN1bGF0aW9uYCksIGFzIHdlbGwgYXMgbGVuZ3RoIHZhbGlkYXRpb24gY2hlY2tzIHRvIGVuc3VyZSB0aGUgcGFja2V0IGlzIHNocnVuayBieSBhdCBsZWFzdCB0aGUgc2l6ZSBvZiB0aGUgZGVjYXBzdWxhdGVkIGhlYWRlcnMuXFxuXFxuVGhlc2UgbW9kaWZpY2F0aW9ucyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvIG5vdCBleHBvc2Uga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZSwgYW5kIGRvIG5vdCBpbnZvbHZlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgZHVlIHRvIGluY29ycmVjdCBsZW5ndGggY2FsY3VsYXRpb25zKSB3b3VsZCBiZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY1M2I3NWRiMGQ2NDNlMTU0MGI4ZWE4YjE5YmFjMGIzMjhjY2EwOWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxNjo0OTowMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuaW5kZXggZmZkOTZlOGI5MjBiZC4uNzMyYjM1Y2MwOGQxYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5AQCAtMzAzOCw4ICszMDM4LDM0IEBAIHVuaW9uIGJwZl9hdHRyIHtcbiAgKlxuICAqXHRcdCogKipCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0KiosXG4gICpcdFx0ICAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjYqKjpcbi0gKlx0XHQgIEluZGljYXRlIHRoZSBuZXcgSVAgaGVhZGVyIHZlcnNpb24gYWZ0ZXIgZGVjYXBzdWxhdGluZyB0aGUgb3V0ZXJcbi0gKlx0XHQgIElQIGhlYWRlci4gVXNlZCB3aGVuIHRoZSBpbm5lciBhbmQgb3V0ZXIgSVAgdmVyc2lvbnMgYXJlIGRpZmZlcmVudC5cbisgKlx0XHQgIEluZGljYXRlIHRoZSBuZXcgSVAgaGVhZGVyIHZlcnNpb24gYWZ0ZXIgZGVjYXBzdWxhdGluZyB0aGVcbisgKlx0XHQgIG91dGVyIElQIGhlYWRlci4gVXNlZCB3aGVuIHRoZSBpbm5lciBhbmQgb3V0ZXIgSVAgdmVyc2lvbnNcbisgKlx0XHQgIGFyZSBkaWZmZXJlbnQuIFRoZXNlIGZsYWdzIG9ubHkgdHJpZ2dlciBhIHByb3RvY29sIGNoYW5nZVxuKyAqXHRcdCAgd2l0aG91dCBjbGVhcmluZyBhbnkgdHVubmVsLXNwZWNpZmljIEdTTyBmbGFncy5cbisgKlxuKyAqXHRcdCogKipCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUqKjpcbisgKlx0XHQgIENsZWFyIEdSRSB0dW5uZWwgR1NPIGZsYWdzIChTS0JfR1NPX0dSRSBhbmQgU0tCX0dTT19HUkVfQ1NVTSlcbisgKlx0XHQgIHdoZW4gZGVjYXBzdWxhdGluZyBhIEdSRSB0dW5uZWwuXG4rICpcbisgKlx0XHQqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKio6XG4rICpcdFx0ICBDbGVhciBVRFAgdHVubmVsIEdTTyBmbGFncyAoU0tCX0dTT19VRFBfVFVOTkVMIGFuZFxuKyAqXHRcdCAgU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0pIHdoZW4gZGVjYXBzdWxhdGluZyBhIFVEUCB0dW5uZWwuXG4rICpcbisgKlx0XHQqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0Kio6XG4rICpcdFx0ICBDbGVhciBJUElQL1NJVCB0dW5uZWwgR1NPIGZsYWcgKFNLQl9HU09fSVBYSVA0KSB3aGVuIGRlY2Fwc3VsYXRpbmdcbisgKlx0XHQgIGEgdHVubmVsIHdpdGggYW4gb3V0ZXIgSVB2NCBoZWFkZXIgKElQdjQtaW4tSVB2NCBvciBJUHY2LWluLUlQdjQpLlxuKyAqXG4rICpcdFx0KiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNioqOlxuKyAqXHRcdCAgQ2xlYXIgSVB2NiBlbmNhcHN1bGF0aW9uIHR1bm5lbCBHU08gZmxhZyAoU0tCX0dTT19JUFhJUDYpIHdoZW5cbisgKlx0XHQgIGRlY2Fwc3VsYXRpbmcgYSB0dW5uZWwgd2l0aCBhbiBvdXRlciBJUHY2IGhlYWRlciAoSVB2Ni1pbi1JUHY2XG4rICpcdFx0ICBvciBJUHY0LWluLUlQdjYpLlxuKyAqXG4rICpcdFx0V2hlbiB1c2luZyB0aGUgZGVjYXBzdWxhdGlvbiBmbGFncyBhYm92ZSwgdGhlIHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uXG4rICpcdFx0ZmxhZyBpcyBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgaWYgYWxsIHR1bm5lbC1zcGVjaWZpYyBHU08gZmxhZ3NcbisgKlx0XHQoU0tCX0dTT19VRFBfVFVOTkVMLCBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSwgU0tCX0dTT19HUkUsXG4rICpcdFx0U0tCX0dTT19HUkVfQ1NVTSwgU0tCX0dTT19JUFhJUDQsIFNLQl9HU09fSVBYSVA2KSBoYXZlIGJlZW5cbisgKlx0XHRyZW1vdmVkIGZyb20gdGhlIHBhY2tldC4gVGhpcyBoYW5kbGVzIGNhc2VzIHdoZXJlIGFsbCB0dW5uZWxcbisgKlx0XHRsYXllcnMgaGF2ZSBiZWVuIGRlY2Fwc3VsYXRlZC5cbiAgKlxuICAqIFx0XHRBIGNhbGwgdG8gdGhpcyBoZWxwZXIgaXMgc3VzY2VwdGlibGUgdG8gY2hhbmdlIHRoZSB1bmRlcmx5aW5nXG4gICogXHRcdHBhY2tldCBidWZmZXIuIFRoZXJlZm9yZSwgYXQgbG9hZCB0aW1lLCBhbGwgY2hlY2tzIG9uIHBvaW50ZXJzXG5AQCAtNjI4Myw3ICs2MzA5LDcgQEAgZW51bSB7XG4gfTtcbiBcbiAvKiBCUEZfRlVOQ19za2JfYWRqdXN0X3Jvb20gZmxhZ3MuICovXG4tZW51bSB7XG4rZW51bSBicGZfYWRqX3Jvb21fZmxhZ3Mge1xuIFx0QlBGX0ZfQURKX1JPT01fRklYRURfR1NPXHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyAwKSxcbiBcdEJQRl9GX0FESl9ST09NX0VOQ0FQX0wzX0lQVjRcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDEpLFxuIFx0QlBGX0ZfQURKX1JPT01fRU5DQVBfTDNfSVBWNlx0PSAoMVVMTCBcdTAwM2NcdTAwM2MgMiksXG5AQCAtNjI5Myw2ICs2MzE5LDEwIEBAIGVudW0ge1xuIFx0QlBGX0ZfQURKX1JPT01fRU5DQVBfTDJfRVRIXHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyA2KSxcbiBcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjRcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDcpLFxuIFx0QlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNlx0PSAoMVVMTCBcdTAwM2NcdTAwM2MgOCksXG4rXHRCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkVcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDkpLFxuK1x0QlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQXHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyAxMCksXG4rXHRCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDRcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDExKSxcbitcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNlx0PSAoMVVMTCBcdTAwM2NcdTAwM2MgMTIpLFxuIH07XG4gXG4gZW51bSB7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggMzQyMzczNDEyNGE1Yi4uODllZmZmZjNiYzUyNSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTU2LDYgKzU2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29ja19yZXVzZXBvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9idXN5X3BvbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y3AuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9ncmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC94ZnJtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdWRwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfdHJhY2UuaFx1MDAzZVxuQEAgLTM1NzIsMTQgKzM1NzMsMjcgQEAgc3RhdGljIHUzMiBicGZfc2tiX25ldF9iYXNlX2xlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuICNkZWZpbmUgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTS1x0KEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQgfCBcXFxuIFx0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNilcbiBcbi0jZGVmaW5lIEJQRl9GX0FESl9ST09NX01BU0tcdFx0KEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTyB8IFxcXG4tXHRcdFx0XHRcdCBCUEZfRl9BREpfUk9PTV9FTkNBUF9MM19NQVNLIHwgXFxcbisjZGVmaW5lIEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X01BU0tcdChCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9VRFAgfCBcXFxuK1x0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFKVxuK1xuKyNkZWZpbmUgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTS1x0KEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCB8IFxcXG4rXHRcdFx0XHRcdCBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYpXG4rXG4rI2RlZmluZSBCUEZfRl9BREpfUk9PTV9FTkNBUF9NQVNLXHQoQlBGX0ZfQURKX1JPT01fRU5DQVBfTDNfTUFTSyB8IFxcXG4gXHRcdFx0XHRcdCBCUEZfRl9BREpfUk9PTV9FTkNBUF9MNF9HUkUgfCBcXFxuIFx0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fRU5DQVBfTDRfVURQIHwgXFxcbiBcdFx0XHRcdFx0IEJQRl9GX0FESl9ST09NX0VOQ0FQX0wyX0VUSCB8IFxcXG4gXHRcdFx0XHRcdCBCUEZfRl9BREpfUk9PTV9FTkNBUF9MMiggXFxcbi1cdFx0XHRcdFx0ICBCUEZfQURKX1JPT01fRU5DQVBfTDJfTUFTSykgfCBcXFxuLVx0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSylcbitcdFx0XHRcdFx0ICBCUEZfQURKX1JPT01fRU5DQVBfTDJfTUFTSykpXG4rXG4rI2RlZmluZSBCUEZfRl9BREpfUk9PTV9ERUNBUF9NQVNLXHQoQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSyB8IFxcXG4rXHRcdFx0XHRcdCBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLIHwgXFxcbitcdFx0XHRcdFx0IEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0spXG4rXG4rI2RlZmluZSBCUEZfRl9BREpfUk9PTV9NQVNLXHRcdChCUEZfRl9BREpfUk9PTV9GSVhFRF9HU08gfCBcXFxuK1x0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fRU5DQVBfTUFTSyB8IFxcXG4rXHRcdFx0XHRcdCBCUEZfRl9BREpfUk9PTV9ERUNBUF9NQVNLIHwgXFxcbitcdFx0XHRcdFx0IEJQRl9GX0FESl9ST09NX05PX0NTVU1fUkVTRVQpXG4gXG4gc3RhdGljIGludCBicGZfc2tiX25ldF9ncm93KHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvZmYsIHUzMiBsZW5fZGlmZixcbiBcdFx0XHQgICAgdTY0IGZsYWdzKVxuQEAgLTM3MDIsOCArMzcxNiw4IEBAIHN0YXRpYyBpbnQgYnBmX3NrYl9uZXRfc2hyaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvZmYsIHUzMiBsZW5fZGlmZixcbiBcdGJvb2wgZGVjYXAgPSBmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSztcbiBcdGludCByZXQ7XG4gXG4tXHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IH4oQlBGX0ZfQURKX1JPT01fRklYRURfR1NPIHxcbi1cdFx0XHQgICAgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSyB8XG4rXHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IH4oQlBGX0ZfQURKX1JPT01fREVDQVBfTUFTSyB8XG4rXHRcdFx0ICAgICAgIEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTyB8XG4gXHRcdFx0ICAgICAgIEJQRl9GX0FESl9ST09NX05PX0NTVU1fUkVTRVQpKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG5AQCAtMzc0MCw5ICszNzU0LDQ4IEBAIHN0YXRpYyBpbnQgYnBmX3NrYl9uZXRfc2hyaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvZmYsIHUzMiBsZW5fZGlmZixcbiBcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTykpXG4gXHRcdFx0c2tiX2luY3JlYXNlX2dzb19zaXplKHNoaW5mbywgbGVuX2RpZmYpO1xuIFxuK1x0XHQvKiBTZWxlY3RpdmUgR1NPIGZsYWcgY2xlYXJpbmcgYmFzZWQgb24gZGVjYXAgdHlwZS5cbitcdFx0ICogT25seSBjbGVhciB0aGUgZmxhZ3MgZm9yIHRoZSB0dW5uZWwgbGF5ZXIgYmVpbmcgcmVtb3ZlZC5cbitcdFx0ICovXG4rXHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoc2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNiAoU0tCX0dTT19VRFBfVFVOTkVMIHxcbitcdFx0XHRcdFx0IFNLQl9HU09fVURQX1RVTk5FTF9DU1VNKSkpXG4rXHRcdFx0c2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNj0gfihTS0JfR1NPX1VEUF9UVU5ORUwgfFxuK1x0XHRcdFx0XHQgICAgICBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSk7XG4rXHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoc2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNiAoU0tCX0dTT19HUkUgfCBTS0JfR1NPX0dSRV9DU1VNKSkpXG4rXHRcdFx0c2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNj0gfihTS0JfR1NPX0dSRSB8XG4rXHRcdFx0XHRcdCAgICAgIFNLQl9HU09fR1JFX0NTVU0pO1xuK1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDQpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKHNoaW5mby1cdTAwM2Vnc29fdHlwZSBcdTAwMjYgU0tCX0dTT19JUFhJUDQpKVxuK1x0XHRcdHNoaW5mby1cdTAwM2Vnc29fdHlwZSBcdTAwMjY9IH5TS0JfR1NPX0lQWElQNDtcbitcdFx0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIChzaGluZm8tXHUwMDNlZ3NvX3R5cGUgXHUwMDI2IFNLQl9HU09fSVBYSVA2KSlcbitcdFx0XHRzaGluZm8tXHUwMDNlZ3NvX3R5cGUgXHUwMDI2PSB+U0tCX0dTT19JUFhJUDY7XG4rXG4rXHRcdC8qIENsZWFyIGVuY2Fwc3VsYXRpb24gZmxhZyBvbmx5IHdoZW4gbm8gdHVubmVsIEdTTyBmbGFncyByZW1haW4gKi9cbitcdFx0aWYgKGZsYWdzIFx1MDAyNiAoQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSyB8XG4rXHRcdFx0ICAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKSkge1xuK1x0XHRcdGlmICghKHNoaW5mby1cdTAwM2Vnc29fdHlwZSBcdTAwMjYgKFNLQl9HU09fVURQX1RVTk5FTCB8XG4rXHRcdFx0XHRcdFx0ICBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSB8XG4rXHRcdFx0XHRcdFx0ICBTS0JfR1NPX0dSRSB8XG4rXHRcdFx0XHRcdFx0ICBTS0JfR1NPX0dSRV9DU1VNIHxcbitcdFx0XHRcdFx0XHQgIFNLQl9HU09fSVBYSVA0IHxcbitcdFx0XHRcdFx0XHQgIFNLQl9HU09fSVBYSVA2IHxcbitcdFx0XHRcdFx0XHQgIFNLQl9HU09fRVNQKSkpXG4rXHRcdFx0XHRpZiAoc2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24pXG4rXHRcdFx0XHRcdHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uID0gMDtcbitcdFx0fVxuK1xuIFx0XHQvKiBIZWFkZXIgbXVzdCBiZSBjaGVja2VkLCBhbmQgZ3NvX3NlZ3MgcmVjb21wdXRlZC4gKi9cbiBcdFx0c2hpbmZvLVx1MDAzZWdzb190eXBlIHw9IFNLQl9HU09fRE9ER1k7XG4gXHRcdHNoaW5mby1cdTAwM2Vnc29fc2VncyA9IDA7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBGb3Igbm9uLUdTTyBwYWNrZXRzLCBjbGVhciBlbmNhcHN1bGF0aW9uIGlmIGRlY2FwIGZsYWdzIGFyZSBzZXQgKi9cbitcdFx0aWYgKChmbGFncyBcdTAwMjYgKEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X01BU0sgfFxuK1x0XHRcdCAgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0spKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uKVxuK1x0XHRcdHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uID0gMDtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTM4MDIsOCArMzg1NSw3IEBAIEJQRl9DQUxMXzQoYnBmX3NrYl9hZGp1c3Rfcm9vbSwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBzMzIsIGxlbl9kaWZmLFxuIFx0dTMyIG9mZjtcbiBcdGludCByZXQ7XG4gXG4tXHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IH4oQlBGX0ZfQURKX1JPT01fTUFTSyB8XG4tXHRcdFx0ICAgICAgIEJQRl9GX0FESl9ST09NX05PX0NTVU1fUkVTRVQpKSlcbitcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgfkJQRl9GX0FESl9ST09NX01BU0spKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdGlmICh1bmxpa2VseShsZW5fZGlmZl9hYnMgXHUwMDNlIDB4ZmZmVSkpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuQEAgLTM4MjIsMjAgKzM4NzQsNTMgQEAgQlBGX0NBTExfNChicGZfc2tiX2FkanVzdF9yb29tLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHMzMiwgbGVuX2RpZmYsXG4gXHRcdHJldHVybiAtRU5PVFNVUFA7XG4gXHR9XG4gXG4tXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX01BU0spIHtcbitcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTUFTSykge1xuK1x0XHR1MzIgbGVuX2RlY2FwX21pbiA9IDA7XG4rXG4gXHRcdGlmICghc2hyaW5rKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0XHRzd2l0Y2ggKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19NQVNLKSB7XG4tXHRcdGNhc2UgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNDpcbitcdFx0LyogUmVqZWN0IG11dHVhbGx5IGV4Y2x1c2l2ZSBkZWNhcCBmbGFnIHBhaXJzLiAqL1xuK1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19NQVNLKSA9PVxuK1x0XHQgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSylcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSykgPT1cbitcdFx0ICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X01BU0spXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0spID09XG4rXHRcdCAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHQvKiBSZWplY3QgbXV0dWFsbHkgZXhjbHVzaXZlIGRlY2FwIHR1bm5lbCB0eXBlIGZsYWdzLiAqL1xuK1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTSykpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSylcbitcdFx0XHRsZW5fZGVjYXBfbWluICs9IGJwZl9za2JfbmV0X2Jhc2VfbGVuKHNrYik7XG4rXG4rXHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKVxuK1x0XHRcdGxlbl9kZWNhcF9taW4gKz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuK1xuK1x0XHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRSlcbitcdFx0XHRsZW5fZGVjYXBfbWluICs9IHNpemVvZihzdHJ1Y3QgZ3JlX2Jhc2VfaGRyKTtcbitcbitcdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDQpXG4rXHRcdFx0bGVuX2RlY2FwX21pbiArPSBzaXplb2Yoc3RydWN0IGlwaGRyKTtcbitcbitcdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYpXG4rXHRcdFx0bGVuX2RlY2FwX21pbiArPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpO1xuK1xuK1x0XHRpZiAobGVuX2RpZmZfYWJzIFx1MDAzYyBsZW5fZGVjYXBfbWluKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQpXG4gXHRcdFx0bGVuX21pbiA9IHNpemVvZihzdHJ1Y3QgaXBoZHIpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjY6XG4rXG4rXHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNilcbiBcdFx0XHRsZW5fbWluID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0fVxuIFx0fVxuIFxuIFx0bGVuX2N1ciA9IHNrYi1cdTAwM2VsZW4gLSBza2JfbmV0d29ya19vZmZzZXQoc2tiKTtcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbmluZGV4IGZmZDk2ZThiOTIwYmQuLjczMmIzNWNjMDhkMWMgMTAwNjQ0XG4tLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbisrKyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTMwMzgsOCArMzAzOCwzNCBAQCB1bmlvbiBicGZfYXR0ciB7XG4gICpcbiAgKlx0XHQqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNCoqLFxuICAqXHRcdCAgKipCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY2Kio6XG4tICpcdFx0ICBJbmRpY2F0ZSB0aGUgbmV3IElQIGhlYWRlciB2ZXJzaW9uIGFmdGVyIGRlY2Fwc3VsYXRpbmcgdGhlIG91dGVyXG4tICpcdFx0ICBJUCBoZWFkZXIuIFVzZWQgd2hlbiB0aGUgaW5uZXIgYW5kIG91dGVyIElQIHZlcnNpb25zIGFyZSBkaWZmZXJlbnQuXG4rICpcdFx0ICBJbmRpY2F0ZSB0aGUgbmV3IElQIGhlYWRlciB2ZXJzaW9uIGFmdGVyIGRlY2Fwc3VsYXRpbmcgdGhlXG4rICpcdFx0ICBvdXRlciBJUCBoZWFkZXIuIFVzZWQgd2hlbiB0aGUgaW5uZXIgYW5kIG91dGVyIElQIHZlcnNpb25zXG4rICpcdFx0ICBhcmUgZGlmZmVyZW50LiBUaGVzZSBmbGFncyBvbmx5IHRyaWdnZXIgYSBwcm90b2NvbCBjaGFuZ2VcbisgKlx0XHQgIHdpdGhvdXQgY2xlYXJpbmcgYW55IHR1bm5lbC1zcGVjaWZpYyBHU08gZmxhZ3MuXG4rICpcbisgKlx0XHQqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFKio6XG4rICpcdFx0ICBDbGVhciBHUkUgdHVubmVsIEdTTyBmbGFncyAoU0tCX0dTT19HUkUgYW5kIFNLQl9HU09fR1JFX0NTVU0pXG4rICpcdFx0ICB3aGVuIGRlY2Fwc3VsYXRpbmcgYSBHUkUgdHVubmVsLlxuKyAqXG4rICpcdFx0KiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCoqOlxuKyAqXHRcdCAgQ2xlYXIgVURQIHR1bm5lbCBHU08gZmxhZ3MgKFNLQl9HU09fVURQX1RVTk5FTCBhbmRcbisgKlx0XHQgIFNLQl9HU09fVURQX1RVTk5FTF9DU1VNKSB3aGVuIGRlY2Fwc3VsYXRpbmcgYSBVRFAgdHVubmVsLlxuKyAqXG4rICpcdFx0KiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCoqOlxuKyAqXHRcdCAgQ2xlYXIgSVBJUC9TSVQgdHVubmVsIEdTTyBmbGFnIChTS0JfR1NPX0lQWElQNCkgd2hlbiBkZWNhcHN1bGF0aW5nXG4rICpcdFx0ICBhIHR1bm5lbCB3aXRoIGFuIG91dGVyIElQdjQgaGVhZGVyIChJUHY0LWluLUlQdjQgb3IgSVB2Ni1pbi1JUHY0KS5cbisgKlxuKyAqXHRcdCogKipCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYqKjpcbisgKlx0XHQgIENsZWFyIElQdjYgZW5jYXBzdWxhdGlvbiB0dW5uZWwgR1NPIGZsYWcgKFNLQl9HU09fSVBYSVA2KSB3aGVuXG4rICpcdFx0ICBkZWNhcHN1bGF0aW5nIGEgdHVubmVsIHdpdGggYW4gb3V0ZXIgSVB2NiBoZWFkZXIgKElQdjYtaW4tSVB2NlxuKyAqXHRcdCAgb3IgSVB2NC1pbi1JUHY2KS5cbisgKlxuKyAqXHRcdFdoZW4gdXNpbmcgdGhlIGRlY2Fwc3VsYXRpb24gZmxhZ3MgYWJvdmUsIHRoZSBza2ItXHUwMDNlZW5jYXBzdWxhdGlvblxuKyAqXHRcdGZsYWcgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkIGlmIGFsbCB0dW5uZWwtc3BlY2lmaWMgR1NPIGZsYWdzXG4rICpcdFx0KFNLQl9HU09fVURQX1RVTk5FTCwgU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0sIFNLQl9HU09fR1JFLFxuKyAqXHRcdFNLQl9HU09fR1JFX0NTVU0sIFNLQl9HU09fSVBYSVA0LCBTS0JfR1NPX0lQWElQNikgaGF2ZSBiZWVuXG4rICpcdFx0cmVtb3ZlZCBmcm9tIHRoZSBwYWNrZXQuIFRoaXMgaGFuZGxlcyBjYXNlcyB3aGVyZSBhbGwgdHVubmVsXG4rICpcdFx0bGF5ZXJzIGhhdmUgYmVlbiBkZWNhcHN1bGF0ZWQuXG4gICpcbiAgKiBcdFx0QSBjYWxsIHRvIHRoaXMgaGVscGVyIGlzIHN1c2NlcHRpYmxlIHRvIGNoYW5nZSB0aGUgdW5kZXJseWluZ1xuICAqIFx0XHRwYWNrZXQgYnVmZmVyLiBUaGVyZWZvcmUsIGF0IGxvYWQgdGltZSwgYWxsIGNoZWNrcyBvbiBwb2ludGVyc1xuQEAgLTYyODMsNyArNjMwOSw3IEBAIGVudW0ge1xuIH07XG4gXG4gLyogQlBGX0ZVTkNfc2tiX2FkanVzdF9yb29tIGZsYWdzLiAqL1xuLWVudW0ge1xuK2VudW0gYnBmX2Fkal9yb29tX2ZsYWdzIHtcbiBcdEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTT1x0PSAoMVVMTCBcdTAwM2NcdTAwM2MgMCksXG4gXHRCUEZfRl9BREpfUk9PTV9FTkNBUF9MM19JUFY0XHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyAxKSxcbiBcdEJQRl9GX0FESl9ST09NX0VOQ0FQX0wzX0lQVjZcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDIpLFxuQEAgLTYyOTMsNiArNjMxOSwxMCBAQCBlbnVtIHtcbiBcdEJQRl9GX0FESl9ST09NX0VOQ0FQX0wyX0VUSFx0PSAoMVVMTCBcdTAwM2NcdTAwM2MgNiksXG4gXHRCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0XHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyA3KSxcbiBcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjZcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDgpLFxuK1x0QlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFXHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyA5KSxcbitcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUFx0PSAoMVVMTCBcdTAwM2NcdTAwM2MgMTApLFxuK1x0QlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0XHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyAxMSksXG4rXHRCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDZcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDEyKSxcbiB9O1xuIFxuIGVudW0ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfdGNfdHVubmVsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3RjX3R1bm5lbC5jXG5pbmRleCAxYWE3Yzk0NjM5ODBiLi42N2JhMjdkNjkzNDc0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF90Y190dW5uZWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF90Y190dW5uZWwuY1xuQEAgLTQzOCw3ICs0MzgsNiBAQCBzdGF0aWMgaW50IHNldHVwKHZvaWQpXG4gXHRTWVMoZmFpbF9jbG9zZV9uc19jbGllbnQsIFwiaXAgbGluayBhZGQgJXMgdHlwZSB2ZXRoIHBlZXIgbmFtZSAlc1wiLFxuIFx0ICAgIFwidmV0aDEgbXR1IDE1MDAgbmV0bnMgXCIgQ0xJRU5UX05TIFwiIGFkZHJlc3MgXCIgTUFDX0FERFJfVkVUSDEsXG4gXHQgICAgXCJ2ZXRoMiBtdHUgMTUwMCBuZXRucyBcIiBTRVJWRVJfTlMgXCIgYWRkcmVzcyBcIiBNQUNfQUREUl9WRVRIMik7XG4tXHRTWVMoZmFpbF9jbG9zZV9uc19jbGllbnQsIFwiZXRodG9vbCAtSyB2ZXRoMSB0c28gb2ZmXCIpO1xuIFx0U1lTKGZhaWxfY2xvc2VfbnNfY2xpZW50LCBcImlwIGxpbmsgc2V0IHZldGgxIHVwXCIpO1xuIFx0bnN0b2tlbl9zZXJ2ZXIgPSBvcGVuX25ldG5zKFNFUlZFUl9OUyk7XG4gXHRpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbl9zZXJ2ZXIsIFwib3BlbiBzZXJ2ZXIgbnNcIikpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfdHVubmVsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y190dW5uZWwuY1xuaW5kZXggNzM3NmRmNDA1YTZiZS4uODUzYmNhOTYyOTEwMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3R1bm5lbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y190dW5uZWwuY1xuQEAgLTYsNiArNiw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2VuZGlhbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9jb3JlX3JlYWQuaFx1MDAzZVxuICNpbmNsdWRlIFwiYnBmX3RyYWNpbmdfbmV0LmhcIlxuICNpbmNsdWRlIFwiYnBmX2NvbXBpbGVyLmhcIlxuIFxuQEAgLTM3LDYgKzM4LDIyIEBAIHN0cnVjdCB2eGxhbmhkcl9fX2xvY2FsIHtcbiBcbiAjZGVmaW5lXHRFWFRQUk9UT19WWExBTlx0MHgxXG4gXG4rI2RlZmluZSBTS0JfR1NPX1VEUF9UVU5ORUxfTUFTS1x0KFNLQl9HU09fVURQX1RVTk5FTCB8XHRcdFx0XFxcbitcdFx0XHRcdCBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSlcbitcbisjZGVmaW5lIFNLQl9HU09fVFVOTkVMX01BU0tcdChTS0JfR1NPX1VEUF9UVU5ORUxfTUFTSyB8XHRcdFxcXG4rXHRcdFx0XHQgU0tCX0dTT19HUkUgfFx0XHRcdFx0XFxcbitcdFx0XHRcdCBTS0JfR1NPX0dSRV9DU1VNIHxcdFx0XHRcXFxuK1x0XHRcdFx0IFNLQl9HU09fSVBYSVA0IHxcdFx0XHRcXFxuK1x0XHRcdFx0IFNLQl9HU09fSVBYSVA2IHxcdFx0XHRcXFxuK1x0XHRcdFx0IFNLQl9HU09fRVNQKVxuK1xuKyNkZWZpbmUgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTS1x0KEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCB8XHRcXFxuK1x0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFKVxuK1xuKyNkZWZpbmUgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTS1x0KEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCB8XHRcXFxuK1x0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KVxuK1xuICNkZWZpbmVcdFZYTEFOX0ZMQUdTICAgICBicGZfaHRvbmwoMVx1MDAzY1x1MDAzYzI3KVxuICNkZWZpbmVcdFZOSV9JRFx0XHQxXG4gI2RlZmluZVx0VlhMQU5fVk5JXHRicGZfaHRvbmwoVk5JX0lEIFx1MDAzY1x1MDAzYyA4KVxuQEAgLTU4OSw5ICs2MDYsMTIgQEAgaW50IF9fZW5jYXBfaXA2dnhsYW5fZXRoKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiBcdFx0cmV0dXJuIFRDX0FDVF9PSztcbiB9XG4gXG4tc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8pXG4rc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8sXG4rXHRcdFx0ICBfX3U2NCBpcHhpcF9mbGFnKVxuIHtcbiBcdF9fdTY0IGZsYWdzID0gQlBGX0ZfQURKX1JPT01fRklYRURfR1NPO1xuK1x0c3RydWN0IHNrX2J1ZmYgKmtza2I7XG4rXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm87XG4gXHRzdHJ1Y3QgaXB2Nl9vcHRfaGRyIGlwNl9vcHRfaGRyO1xuIFx0c3RydWN0IGdyZV9oZHIgZ3JlaDtcbiBcdHN0cnVjdCB1ZHBoZHIgdWRwaDtcbkBAIC01OTksMTAgKzYxOSwxMiBAQCBzdGF0aWMgaW50IGRlY2FwX2ludGVybmFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiwgaW50IG9mZiwgaW50IGxlbiwgY2hhciBwcm90bylcbiBcbiBcdHN3aXRjaCAocHJvdG8pIHtcbiBcdGNhc2UgSVBQUk9UT19JUElQOlxuLVx0XHRmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0O1xuK1x0XHRmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0IHxcbitcdFx0XHQgaXB4aXBfZmxhZztcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElQUFJPVE9fSVBWNjpcbi1cdFx0ZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNjtcbitcdFx0ZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNiB8XG4rXHRcdFx0IGlweGlwX2ZsYWc7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBORVhUSERSX0RFU1Q6XG4gXHRcdGlmIChicGZfc2tiX2xvYWRfYnl0ZXMoc2tiLCBvZmYgKyBsZW4sIFx1MDAyNmlwNl9vcHRfaGRyLFxuQEAgLTYxMCwxMCArNjMyLDEyIEBAIHN0YXRpYyBpbnQgZGVjYXBfaW50ZXJuYWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiLCBpbnQgb2ZmLCBpbnQgbGVuLCBjaGFyIHByb3RvKVxuIFx0XHRcdHJldHVybiBUQ19BQ1RfT0s7XG4gXHRcdHN3aXRjaCAoaXA2X29wdF9oZHIubmV4dGhkcikge1xuIFx0XHRjYXNlIElQUFJPVE9fSVBJUDpcbi1cdFx0XHRmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0O1xuK1x0XHRcdGZsYWdzIHw9IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQgfFxuK1x0XHRcdFx0IGlweGlwX2ZsYWc7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgSVBQUk9UT19JUFY2OlxuLVx0XHRcdGZsYWdzIHw9IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjY7XG4rXHRcdFx0ZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNiB8XG4rXHRcdFx0XHQgaXB4aXBfZmxhZztcbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHRyZXR1cm4gVENfQUNUX09LO1xuQEAgLTYyMSw2ICs2NDUsMTEgQEAgc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8pXG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBJUFBST1RPX0dSRTpcbiBcdFx0b2xlbiArPSBzaXplb2Yoc3RydWN0IGdyZV9oZHIpO1xuK1x0XHRpZiAoIWJwZl9jb3JlX2VudW1fdmFsdWVfZXhpc3RzKGVudW0gYnBmX2Fkal9yb29tX2ZsYWdzLFxuK1x0XHRcdFx0XHRcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRSkpXG4rXHRcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuK1x0XHRmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkU7XG4rXG4gXHRcdGlmIChicGZfc2tiX2xvYWRfYnl0ZXMoc2tiLCBvZmYgKyBsZW4sIFx1MDAyNmdyZWgsIHNpemVvZihncmVoKSkgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIFRDX0FDVF9PSztcbiBcdFx0c3dpdGNoIChicGZfbnRvaHMoZ3JlaC5wcm90b2NvbCkpIHtcbkBAIC02MzQsNiArNjYzLDEwIEBAIHN0YXRpYyBpbnQgZGVjYXBfaW50ZXJuYWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiLCBpbnQgb2ZmLCBpbnQgbGVuLCBjaGFyIHByb3RvKVxuIFx0XHRicmVhaztcbiBcdGNhc2UgSVBQUk9UT19VRFA6XG4gXHRcdG9sZW4gKz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuK1x0XHRpZiAoIWJwZl9jb3JlX2VudW1fdmFsdWVfZXhpc3RzKGVudW0gYnBmX2Fkal9yb29tX2ZsYWdzLFxuK1x0XHRcdFx0XHRcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCkpXG4rXHRcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuK1x0XHRmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9VRFA7XG4gXHRcdGlmIChicGZfc2tiX2xvYWRfYnl0ZXMoc2tiLCBvZmYgKyBsZW4sIFx1MDAyNnVkcGgsIHNpemVvZih1ZHBoKSkgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIFRDX0FDVF9PSztcbiBcdFx0c3dpdGNoIChicGZfbnRvaHModWRwaC5kZXN0KSkge1xuQEAgLTY1NSw2ICs2ODgsNDAgQEAgc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8pXG4gXHRpZiAoYnBmX3NrYl9hZGp1c3Rfcm9vbShza2IsIC1vbGVuLCBCUEZfQURKX1JPT01fTUFDLCBmbGFncykpXG4gXHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbiBcbitcdGtza2IgPSBicGZfY2FzdF90b19rZXJuX2N0eChza2IpO1xuK1x0c2hpbmZvID0gYnBmX2NvcmVfY2FzdChrc2tiLVx1MDAzZWhlYWQgKyBrc2tiLVx1MDAzZWVuZCwgc3RydWN0IHNrYl9zaGFyZWRfaW5mbyk7XG4rXHRpZiAoc2hpbmZvLVx1MDAzZWdzb19zaXplKSB7XG4rXHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoc2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNiBTS0JfR1NPX1VEUF9UVU5ORUxfTUFTSykpXG4rXHRcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuK1xuK1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKHNoaW5mby1cdTAwM2Vnc29fdHlwZSBcdTAwMjYgKFNLQl9HU09fR1JFIHwgU0tCX0dTT19HUkVfQ1NVTSkpKVxuK1x0XHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbitcbitcdFx0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0KSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIChzaGluZm8tXHUwMDNlZ3NvX3R5cGUgXHUwMDI2IFNLQl9HU09fSVBYSVA0KSlcbitcdFx0XHRyZXR1cm4gVENfQUNUX1NIT1Q7XG4rXG4rXHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNikgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoc2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNiBTS0JfR1NPX0lQWElQNikpXG4rXHRcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuK1xuK1x0XHRpZiAoZmxhZ3MgXHUwMDI2IChCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLIHxcbitcdFx0XHQgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0spKSB7XG4rXHRcdFx0aWYgKChzaGluZm8tXHUwMDNlZ3NvX3R5cGUgXHUwMDI2IFNLQl9HU09fVFVOTkVMX01BU0spIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAha3NrYi1cdTAwM2VlbmNhcHN1bGF0aW9uKVxuK1x0XHRcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuK1x0XHRcdGlmICghKHNoaW5mby1cdTAwM2Vnc29fdHlwZSBcdTAwMjYgU0tCX0dTT19UVU5ORUxfTUFTSykgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIGtza2ItXHUwMDNlZW5jYXBzdWxhdGlvbilcbitcdFx0XHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbitcdFx0fVxuK1x0fSBlbHNlIGlmICgoZmxhZ3MgXHUwMDI2IChCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLIHxcbitcdFx0XHQgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0spKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAga3NrYi1cdTAwM2VlbmNhcHN1bGF0aW9uKSB7XG4rXHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbitcdH1cbitcbiBcdHJldHVybiBUQ19BQ1RfT0s7XG4gfVxuIFxuQEAgLTY2Miw2ICs3MjksMTAgQEAgc3RhdGljIGludCBkZWNhcF9pcHY0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiB7XG4gXHRzdHJ1Y3QgaXBoZHIgaXBoX291dGVyO1xuIFxuK1x0aWYgKCFicGZfY29yZV9lbnVtX3ZhbHVlX2V4aXN0cyhlbnVtIGJwZl9hZGpfcm9vbV9mbGFncyxcbitcdFx0XHRcdFx0QlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0KSlcbitcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuK1xuIFx0aWYgKGJwZl9za2JfbG9hZF9ieXRlcyhza2IsIEVUSF9ITEVOLCBcdTAwMjZpcGhfb3V0ZXIsXG4gXHRcdFx0ICAgICAgIHNpemVvZihpcGhfb3V0ZXIpKSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIFRDX0FDVF9PSztcbkBAIC02NzAsMTkgKzc0MSwyNSBAQCBzdGF0aWMgaW50IGRlY2FwX2lwdjQoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuIFx0XHRyZXR1cm4gVENfQUNUX09LO1xuIFxuIFx0cmV0dXJuIGRlY2FwX2ludGVybmFsKHNrYiwgRVRIX0hMRU4sIHNpemVvZihpcGhfb3V0ZXIpLFxuLVx0XHRcdCAgICAgIGlwaF9vdXRlci5wcm90b2NvbCk7XG4rXHRcdFx0ICAgICAgaXBoX291dGVyLnByb3RvY29sLFxuK1x0XHRcdCAgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgZGVjYXBfaXB2NihzdHJ1Y3QgX19za19idWZmICpza2IpXG4ge1xuIFx0c3RydWN0IGlwdjZoZHIgaXBoX291dGVyO1xuIFxuK1x0aWYgKCFicGZfY29yZV9lbnVtX3ZhbHVlX2V4aXN0cyhlbnVtIGJwZl9hZGpfcm9vbV9mbGFncyxcbitcdFx0XHRcdFx0QlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KSlcbitcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuK1xuIFx0aWYgKGJwZl9za2JfbG9hZF9ieXRlcyhza2IsIEVUSF9ITEVOLCBcdTAwMjZpcGhfb3V0ZXIsXG4gXHRcdFx0ICAgICAgIHNpemVvZihpcGhfb3V0ZXIpKSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIFRDX0FDVF9PSztcbiBcbiBcdHJldHVybiBkZWNhcF9pbnRlcm5hbChza2IsIEVUSF9ITEVOLCBzaXplb2YoaXBoX291dGVyKSxcbi1cdFx0XHQgICAgICBpcGhfb3V0ZXIubmV4dGhkcik7XG4rXHRcdFx0ICAgICAgaXBoX291dGVyLm5leHRoZHIsXG4rXHRcdFx0ICAgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KTtcbiB9XG4gXG4gU0VDKFwidGNcIilcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjUxOjE4LjkwNzE0Njk0MVoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDUyODY1OTk0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBQYXRjaCBmb3IgYGJwZl9za2JfYWRqdXN0X3Jvb21gKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBpbnRyb2R1Y2luZyBzb21lIG5ldyBmbGFncyBmb3IgdGhlIGBicGZfc2tiX2FkanVzdF9yb29tYCBoZWxwZXIgaW4gQlBGLiBTcGVjaWZpY2FsbHksIHRoZXNlIGZsYWdzOiBgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFYCwgYEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUGAsIGBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDRgLCBhbmQgYEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNmAuIEl0IHNlZW1zIHRoZXNlIGFyZSBhbGwgYWJvdXQgc2VsZWN0aXZlbHkgY2xlYXJpbmcgR1NPIHR1bm5lbCBmbGFncyB3aGVuIHdlJ3JlIGRlY2Fwc3VsYXRpbmcgcGFja2V0cywgd2hpY2ggbWFrZXMgc2Vuc2UuIFdlIGNhbiBzZWUgdGhpcyBsb2dpYyBhcHBsaWVkIHdpdGhpbiBgYnBmX3NrYl9uZXRfc2hyaW5rYCBhbmQgYGJwZl9za2JfYWRqdXN0X3Jvb21gLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgc28gbGV0J3MgZGlnIGludG8gdGhlIGRldGFpbHMuIEkgc2VlIHRoYXQgYGJwZl9za2JfbmV0X3Nocmlua2AgaXMgZG9pbmcgY29uZGl0aW9uYWwgR1NPIGZsYWcgY2xlYXJpbmcgYmFzZWQgb24gdGhlIFwiZGVjYXAgdHlwZVwiLiBJdCdzIG9ubHkgY2xlYXJpbmcgdGhlIEdTTyBmbGFncyB0aGF0IGFyZSByZWxldmFudCB0byB0aGUgbGF5ZXIgYmVpbmcgcmVtb3ZlZCwgd2hpY2ggaXMgZ29vZC4gVGhlbiBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgaXMgYmVpbmcgbW9kaWZpZWQgdG8gY2FsY3VsYXRlIGBsZW5fZGVjYXBfbWluYCBhbmQgdmFsaWRhdGUgdGhhdCB0aGUgY2hhbmdlIGluIGxlbmd0aCBpcyBzdWZmaWNpZW50IGZvciB0aGUgZGVjYXBzdWxhdGlvbi5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBpbnZvbHZlIG1vZGlmeWluZyBgc2hpbmZvLVx1MDAzZWdzb190eXBlYCBhbmQgYHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uYCBiYXNlZCBvbiB0aGVzZSBuZXcgZmxhZ3MuIEknbSBmb2N1c2luZyBvbiB3aGV0aGVyIHRoZXJlJ3MgYW55IGNoYW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MsIGluZm9ybWF0aW9uIGxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBiZWluZyBpbnRyb2R1Y2VkLiBGcm9tIHdoYXQgSSBzZWUsIG5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBzZW50IHRvIHVzZXJzcGFjZS4gVGhlcmUncyBubyBmYW5jeSBuZXcgYWxsb2NhdGlvbiBvZiBjb21wbGV4IHN0cnVjdHVyZXMsIGFuZCB0aGUgY2hhbmdlIGlzIGxpbWl0ZWQgdG8gYml0d2lzZSBvcGVyYXRpb25zIG9uIGBnc29fdHlwZWAgYW5kIGBlbmNhcHN1bGF0aW9uYC4gSXQgYWxzbyBjaGVja3MgYGxlbl9kaWZmX2Fic2AgYWdhaW5zdCB0aGUgbWluaW11bSBsZW5ndGggdG8gcmVtb3ZlLlxuXG5BbHJpZ2h0LCBzbyB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgc3RyYWlnaHRmb3J3YXJkIGJpdHdpc2Ugb3BlcmF0aW9ucyBvbiBleGlzdGluZyBmaWVsZHMsIGFuZCB0aGVyZSdzIGEgbGVuZ3RoIGNoZWNrIGJlaW5nIGRvbmUuIFRoaXMgc2hvdWxkIHByZXZlbnQgYW55IG91dC1vZi1ib3VuZHMgcmVhZHMuIEkgdGhpbmsgd2UgYXJlIGdvb2QgaGVyZSwgYXMgS01TQU4gc2hvdWxkbid0IGJlIG5lZWRlZCBiZWNhdXNlIEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIHNob3VsZCBoYW5kbGUgdGhlIHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuXG5cbkxldCBtZSBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUuIEknbGwgZG91YmxlLWNoZWNrIHdoYXQgYGJwZl9za2JfbmV0X2Jhc2VfbGVuYCBkb2VzLCBqdXN0IGluIGNhc2UgdGhhdCdzIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFoLCBpdCBqdXN0IHJlYWRzIGBza2ItXHUwMDNlcHJvdG9jb2xgIGFuZCByZXR1cm5zIHRoZSBiYXNlIGhlYWRlciBsZW5ndGguIEl0IGxvb2tzIGxpa2UgdGhlIGBsZW5fZGlmZl9hYnNgIGNoZWNrIGluIGBicGZfc2tiX2FkanVzdF9yb29tYCBlbnN1cmVzIHdlJ3JlIHNocmlua2luZyB0aGUgcGFja2V0IGJ5IGF0IGxlYXN0IHRoZSByZXF1aXJlZCBhbW91bnQsIGFuZCBLQVNBTiBzaG91bGQgaGFuZGxlIGFueXRoaW5nIHRoYXQgc2xpcHMgdGhyb3VnaC5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgTmVlZHNLTVNBTiBzaG91bGQgYmUgZmFsc2UuIFRoZSBjaGFuZ2VzIHNlZW0gbG9jYWxpemVkIGFuZCBzYWZlLiBUaGUgcGF0Y2ggaXMgbWFuaXB1bGF0aW5nIGV4aXN0aW5nIEJQRiBoZWxwZXJzIHRvIHNlbGVjdGl2ZWx5IGNsZWFyIHNvbWUgZXhpc3RpbmcgZmxhZ3MgZHVyaW5nIHBhY2tldCBkZWNhcHN1bGF0aW9uLCB0aGVyZSBhcmUgYXBwcm9wcmlhdGUgc2FmZXR5IGNoZWNrcyBpbiBwbGFjZSwgYW5kIHRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIGFueSBkYXRhIHN0cnVjdHVyZSB0aGF0IHdvdWxkIHBvdGVudGlhbGx5IGFsbG93IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBiZSByZWFkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDIyNiwiT3V0cHV0VG9rZW5zIjoyMjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDU3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6NTE6MzMuNDM1ODEwODE5WiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBmbGFncyBmb3IgdGhlIGBicGZfc2tiX2FkanVzdF9yb29tYCBCUEYgaGVscGVyIHRvIHNlbGVjdGl2ZWx5IGNsZWFyIEdTTyB0dW5uZWwgZmxhZ3MgYW5kIHRoZSBgc2tiLVxcdTAwM2VlbmNhcHN1bGF0aW9uYCBmbGFnIGR1cmluZyBwYWNrZXQgZGVjYXBzdWxhdGlvbi4gVGhlIGNoYW5nZXMgY29uc2lzdCBvZiBiaXR3aXNlIG9wZXJhdGlvbnMgb24gZXhpc3RpbmcgYHNrYl9zaGFyZWRfaW5mb2AgZmllbGRzIChgZ3NvX3R5cGVgKSBhbmQgYHNrYmAgZmllbGRzIChgZW5jYXBzdWxhdGlvbmApLCBhcyB3ZWxsIGFzIGxlbmd0aCB2YWxpZGF0aW9uIGNoZWNrcyB0byBlbnN1cmUgdGhlIHBhY2tldCBpcyBzaHJ1bmsgYnkgYXQgbGVhc3QgdGhlIHNpemUgb2YgdGhlIGRlY2Fwc3VsYXRlZCBoZWFkZXJzLlxcblxcblRoZXNlIG1vZGlmaWNhdGlvbnMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGR1ZSB0byBpbmNvcnJlY3QgbGVuZ3RoIGNhbGN1bGF0aW9ucykgd291bGQgYmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBmbGFncyBmb3IgdGhlIGBicGZfc2tiX2FkanVzdF9yb29tYCBCUEYgaGVscGVyIHRvIHNlbGVjdGl2ZWx5IGNsZWFyIEdTTyB0dW5uZWwgZmxhZ3MgYW5kIHRoZSBgc2tiLVxcdTAwM2VlbmNhcHN1bGF0aW9uYCBmbGFnIGR1cmluZyBwYWNrZXQgZGVjYXBzdWxhdGlvbi4gVGhlIGNoYW5nZXMgY29uc2lzdCBvZiBiaXR3aXNlIG9wZXJhdGlvbnMgb24gZXhpc3RpbmcgYHNrYl9zaGFyZWRfaW5mb2AgZmllbGRzIChgZ3NvX3R5cGVgKSBhbmQgYHNrYmAgZmllbGRzIChgZW5jYXBzdWxhdGlvbmApLCBhcyB3ZWxsIGFzIGxlbmd0aCB2YWxpZGF0aW9uIGNoZWNrcyB0byBlbnN1cmUgdGhlIHBhY2tldCBpcyBzaHJ1bmsgYnkgYXQgbGVhc3QgdGhlIHNpemUgb2YgdGhlIGRlY2Fwc3VsYXRlZCBoZWFkZXJzLlxcblxcblRoZXNlIG1vZGlmaWNhdGlvbnMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGR1ZSB0byBpbmNvcnJlY3QgbGVuZ3RoIGNhbGN1bGF0aW9ucykgd291bGQgYmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow6bzl4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 16:34:46 +0000 UTC FinishedAt: 2026-08-12 16:51:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "07cb86aa50816b070b99c89bf948762ef035a1f2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET_CLS_BPF", "NET_ACT_BPF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "07cb86aa50816b070b99c89bf948762ef035a1f2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET_CLS_BPF", "NET_ACT_BPF" ], "series_id": "773bf86d-a93d-43a0-b4a4-e84e9b2becf4" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_skb_adjust_room" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQlBGJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfQlBGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3NrYl9hZGp1c3Rfcm9vbSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGZsYWdzIGZvciB0aGUgYGJwZl9za2JfYWRqdXN0X3Jvb21gIEJQRiBoZWxwZXIgdG8gc2VsZWN0aXZlbHkgY2xlYXIgR1NPIHR1bm5lbCBmbGFncyBhbmQgdGhlIGBza2ItXHUwMDNlZW5jYXBzdWxhdGlvbmAgZmxhZyBkdXJpbmcgcGFja2V0IGRlY2Fwc3VsYXRpb24uIFRoZSBjaGFuZ2VzIGNvbnNpc3Qgb2YgYml0d2lzZSBvcGVyYXRpb25zIG9uIGV4aXN0aW5nIGBza2Jfc2hhcmVkX2luZm9gIGZpZWxkcyAoYGdzb190eXBlYCkgYW5kIGBza2JgIGZpZWxkcyAoYGVuY2Fwc3VsYXRpb25gKSwgYXMgd2VsbCBhcyBsZW5ndGggdmFsaWRhdGlvbiBjaGVja3MgdG8gZW5zdXJlIHRoZSBwYWNrZXQgaXMgc2hydW5rIGJ5IGF0IGxlYXN0IHRoZSBzaXplIG9mIHRoZSBkZWNhcHN1bGF0ZWQgaGVhZGVycy5cblxuVGhlc2UgbW9kaWZpY2F0aW9ucyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvIG5vdCBleHBvc2Uga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZSwgYW5kIGRvIG5vdCBpbnZvbHZlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgZHVlIHRvIGluY29ycmVjdCBsZW5ndGggY2FsY3VsYXRpb25zKSB3b3VsZCBiZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG5ldyBmbGFncyB0byB0aGUgYnBmX3NrYl9hZGp1c3Rfcm9vbSBCUEYgaGVscGVyIHRvIGNsZWFyIHR1bm5lbC1zcGVjaWZpYyBHU08gZmxhZ3MgZHVyaW5nIGRlY2Fwc3VsYXRpb24uIFRoaXMgbW9kaWZpZXMgY29yZSBCUEYgbmV0d29ya2luZyBsb2dpYyByZWFjaGFibGUgdmlhIFRDIEJQRiBwcm9ncmFtcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjo0OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY1M2I3NWRiMGQ2NDNlMTU0MGI4ZWE4YjE5YmFjMGIzMjhjY2EwOWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxNjo0OTowMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbmluZGV4IGZmZDk2ZThiOTIwYmQuLjczMmIzNWNjMDhkMWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTMwMzgsOCAmIzQzOzMwMzgsMzQgQEAgdW5pb24gYnBmX2F0dHIge1xuICAqXG4gICpcdFx0KiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQqKixcbiAgKlx0XHQgICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNioqOlxuLSAqXHRcdCAgSW5kaWNhdGUgdGhlIG5ldyBJUCBoZWFkZXIgdmVyc2lvbiBhZnRlciBkZWNhcHN1bGF0aW5nIHRoZSBvdXRlclxuLSAqXHRcdCAgSVAgaGVhZGVyLiBVc2VkIHdoZW4gdGhlIGlubmVyIGFuZCBvdXRlciBJUCB2ZXJzaW9ucyBhcmUgZGlmZmVyZW50LlxuJiM0MzsgKlx0XHQgIEluZGljYXRlIHRoZSBuZXcgSVAgaGVhZGVyIHZlcnNpb24gYWZ0ZXIgZGVjYXBzdWxhdGluZyB0aGVcbiYjNDM7ICpcdFx0ICBvdXRlciBJUCBoZWFkZXIuIFVzZWQgd2hlbiB0aGUgaW5uZXIgYW5kIG91dGVyIElQIHZlcnNpb25zXG4mIzQzOyAqXHRcdCAgYXJlIGRpZmZlcmVudC4gVGhlc2UgZmxhZ3Mgb25seSB0cmlnZ2VyIGEgcHJvdG9jb2wgY2hhbmdlXG4mIzQzOyAqXHRcdCAgd2l0aG91dCBjbGVhcmluZyBhbnkgdHVubmVsLXNwZWNpZmljIEdTTyBmbGFncy5cbiYjNDM7ICpcbiYjNDM7ICpcdFx0KiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRSoqOlxuJiM0MzsgKlx0XHQgIENsZWFyIEdSRSB0dW5uZWwgR1NPIGZsYWdzIChTS0JfR1NPX0dSRSBhbmQgU0tCX0dTT19HUkVfQ1NVTSlcbiYjNDM7ICpcdFx0ICB3aGVuIGRlY2Fwc3VsYXRpbmcgYSBHUkUgdHVubmVsLlxuJiM0MzsgKlxuJiM0MzsgKlx0XHQqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKio6XG4mIzQzOyAqXHRcdCAgQ2xlYXIgVURQIHR1bm5lbCBHU08gZmxhZ3MgKFNLQl9HU09fVURQX1RVTk5FTCBhbmRcbiYjNDM7ICpcdFx0ICBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSkgd2hlbiBkZWNhcHN1bGF0aW5nIGEgVURQIHR1bm5lbC5cbiYjNDM7ICpcbiYjNDM7ICpcdFx0KiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCoqOlxuJiM0MzsgKlx0XHQgIENsZWFyIElQSVAvU0lUIHR1bm5lbCBHU08gZmxhZyAoU0tCX0dTT19JUFhJUDQpIHdoZW4gZGVjYXBzdWxhdGluZ1xuJiM0MzsgKlx0XHQgIGEgdHVubmVsIHdpdGggYW4gb3V0ZXIgSVB2NCBoZWFkZXIgKElQdjQtaW4tSVB2NCBvciBJUHY2LWluLUlQdjQpLlxuJiM0MzsgKlxuJiM0MzsgKlx0XHQqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2Kio6XG4mIzQzOyAqXHRcdCAgQ2xlYXIgSVB2NiBlbmNhcHN1bGF0aW9uIHR1bm5lbCBHU08gZmxhZyAoU0tCX0dTT19JUFhJUDYpIHdoZW5cbiYjNDM7ICpcdFx0ICBkZWNhcHN1bGF0aW5nIGEgdHVubmVsIHdpdGggYW4gb3V0ZXIgSVB2NiBoZWFkZXIgKElQdjYtaW4tSVB2NlxuJiM0MzsgKlx0XHQgIG9yIElQdjQtaW4tSVB2NikuXG4mIzQzOyAqXG4mIzQzOyAqXHRcdFdoZW4gdXNpbmcgdGhlIGRlY2Fwc3VsYXRpb24gZmxhZ3MgYWJvdmUsIHRoZSBza2ItXHUwMDNlZW5jYXBzdWxhdGlvblxuJiM0MzsgKlx0XHRmbGFnIGlzIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCBpZiBhbGwgdHVubmVsLXNwZWNpZmljIEdTTyBmbGFnc1xuJiM0MzsgKlx0XHQoU0tCX0dTT19VRFBfVFVOTkVMLCBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSwgU0tCX0dTT19HUkUsXG4mIzQzOyAqXHRcdFNLQl9HU09fR1JFX0NTVU0sIFNLQl9HU09fSVBYSVA0LCBTS0JfR1NPX0lQWElQNikgaGF2ZSBiZWVuXG4mIzQzOyAqXHRcdHJlbW92ZWQgZnJvbSB0aGUgcGFja2V0LiBUaGlzIGhhbmRsZXMgY2FzZXMgd2hlcmUgYWxsIHR1bm5lbFxuJiM0MzsgKlx0XHRsYXllcnMgaGF2ZSBiZWVuIGRlY2Fwc3VsYXRlZC5cbiAgKlxuICAqIFx0XHRBIGNhbGwgdG8gdGhpcyBoZWxwZXIgaXMgc3VzY2VwdGlibGUgdG8gY2hhbmdlIHRoZSB1bmRlcmx5aW5nXG4gICogXHRcdHBhY2tldCBidWZmZXIuIFRoZXJlZm9yZSwgYXQgbG9hZCB0aW1lLCBhbGwgY2hlY2tzIG9uIHBvaW50ZXJzXG5AQCAtNjI4Myw3ICYjNDM7NjMwOSw3IEBAIGVudW0ge1xuIH07XG4gXG4gLyogQlBGX0ZVTkNfc2tiX2FkanVzdF9yb29tIGZsYWdzLiAqL1xuLWVudW0ge1xuJiM0MztlbnVtIGJwZl9hZGpfcm9vbV9mbGFncyB7XG4gXHRCUEZfRl9BREpfUk9PTV9GSVhFRF9HU09cdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDApLFxuIFx0QlBGX0ZfQURKX1JPT01fRU5DQVBfTDNfSVBWNFx0PSAoMVVMTCBcdTAwM2NcdTAwM2MgMSksXG4gXHRCUEZfRl9BREpfUk9PTV9FTkNBUF9MM19JUFY2XHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyAyKSxcbkBAIC02MjkzLDYgJiM0Mzs2MzE5LDEwIEBAIGVudW0ge1xuIFx0QlBGX0ZfQURKX1JPT01fRU5DQVBfTDJfRVRIXHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyA2KSxcbiBcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjRcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDcpLFxuIFx0QlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNlx0PSAoMVVMTCBcdTAwM2NcdTAwM2MgOCksXG4mIzQzO1x0QlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFXHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyA5KSxcbiYjNDM7XHRCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9VRFBcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDEwKSxcbiYjNDM7XHRCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDRcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDExKSxcbiYjNDM7XHRCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDZcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDEyKSxcbiB9O1xuIFxuIGVudW0ge1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDM0MjM3MzQxMjRhNWIuLjg5ZWZmZmYzYmM1MjUgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC01Niw2ICYjNDM7NTYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9zb2NrX3JldXNlcG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2J1c3lfcG9sbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9ncmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC94ZnJtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdWRwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfdHJhY2UuaFx1MDAzZVxuQEAgLTM1NzIsMTQgJiM0MzszNTczLDI3IEBAIHN0YXRpYyB1MzIgYnBmX3NrYl9uZXRfYmFzZV9sZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAjZGVmaW5lIEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX01BU0tcdChCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0IHwgXFxcbiBcdFx0XHRcdFx0IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjYpXG4gXG4tI2RlZmluZSBCUEZfRl9BREpfUk9PTV9NQVNLXHRcdChCUEZfRl9BREpfUk9PTV9GSVhFRF9HU08gfCBcXFxuLVx0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fRU5DQVBfTDNfTUFTSyB8IFxcXG4mIzQzOyNkZWZpbmUgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTS1x0KEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFKVxuJiM0MztcbiYjNDM7I2RlZmluZSBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLXHQoQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0IHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEJQRl9GX0FESl9ST09NX0VOQ0FQX01BU0tcdChCUEZfRl9BREpfUk9PTV9FTkNBUF9MM19NQVNLIHwgXFxcbiBcdFx0XHRcdFx0IEJQRl9GX0FESl9ST09NX0VOQ0FQX0w0X0dSRSB8IFxcXG4gXHRcdFx0XHRcdCBCUEZfRl9BREpfUk9PTV9FTkNBUF9MNF9VRFAgfCBcXFxuIFx0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fRU5DQVBfTDJfRVRIIHwgXFxcbiBcdFx0XHRcdFx0IEJQRl9GX0FESl9ST09NX0VOQ0FQX0wyKCBcXFxuLVx0XHRcdFx0XHQgIEJQRl9BREpfUk9PTV9FTkNBUF9MMl9NQVNLKSB8IFxcXG4tXHRcdFx0XHRcdCBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19NQVNLKVxuJiM0MztcdFx0XHRcdFx0ICBCUEZfQURKX1JPT01fRU5DQVBfTDJfTUFTSykpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEJQRl9GX0FESl9ST09NX0RFQ0FQX01BU0tcdChCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19NQVNLIHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLIHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKVxuJiM0MztcbiYjNDM7I2RlZmluZSBCUEZfRl9BREpfUk9PTV9NQVNLXHRcdChCUEZfRl9BREpfUk9PTV9GSVhFRF9HU08gfCBcXFxuJiM0MztcdFx0XHRcdFx0IEJQRl9GX0FESl9ST09NX0VOQ0FQX01BU0sgfCBcXFxuJiM0MztcdFx0XHRcdFx0IEJQRl9GX0FESl9ST09NX0RFQ0FQX01BU0sgfCBcXFxuJiM0MztcdFx0XHRcdFx0IEJQRl9GX0FESl9ST09NX05PX0NTVU1fUkVTRVQpXG4gXG4gc3RhdGljIGludCBicGZfc2tiX25ldF9ncm93KHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvZmYsIHUzMiBsZW5fZGlmZixcbiBcdFx0XHQgICAgdTY0IGZsYWdzKVxuQEAgLTM3MDIsOCAmIzQzOzM3MTYsOCBAQCBzdGF0aWMgaW50IGJwZl9za2JfbmV0X3NocmluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgb2ZmLCB1MzIgbGVuX2RpZmYsXG4gXHRib29sIGRlY2FwID0gZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX01BU0s7XG4gXHRpbnQgcmV0O1xuIFxuLVx0aWYgKHVubGlrZWx5KGZsYWdzIFx1MDAyNiB+KEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTyB8XG4tXHRcdFx0ICAgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX01BU0sgfFxuJiM0MztcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgfihCUEZfRl9BREpfUk9PTV9ERUNBUF9NQVNLIHxcbiYjNDM7XHRcdFx0ICAgICAgIEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTyB8XG4gXHRcdFx0ICAgICAgIEJQRl9GX0FESl9ST09NX05PX0NTVU1fUkVTRVQpKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG5AQCAtMzc0MCw5ICYjNDM7Mzc1NCw0OCBAQCBzdGF0aWMgaW50IGJwZl9za2JfbmV0X3NocmluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgb2ZmLCB1MzIgbGVuX2RpZmYsXG4gXHRcdGlmICghKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9GSVhFRF9HU08pKVxuIFx0XHRcdHNrYl9pbmNyZWFzZV9nc29fc2l6ZShzaGluZm8sIGxlbl9kaWZmKTtcbiBcbiYjNDM7XHRcdC8qIFNlbGVjdGl2ZSBHU08gZmxhZyBjbGVhcmluZyBiYXNlZCBvbiBkZWNhcCB0eXBlLlxuJiM0MztcdFx0ICogT25seSBjbGVhciB0aGUgZmxhZ3MgZm9yIHRoZSB0dW5uZWwgbGF5ZXIgYmVpbmcgcmVtb3ZlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAoc2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNiAoU0tCX0dTT19VRFBfVFVOTkVMIHxcbiYjNDM7XHRcdFx0XHRcdCBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSkpKVxuJiM0MztcdFx0XHRzaGluZm8tXHUwMDNlZ3NvX3R5cGUgXHUwMDI2PSB+KFNLQl9HU09fVURQX1RVTk5FTCB8XG4mIzQzO1x0XHRcdFx0XHQgICAgICBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSk7XG4mIzQzO1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIChzaGluZm8tXHUwMDNlZ3NvX3R5cGUgXHUwMDI2IChTS0JfR1NPX0dSRSB8IFNLQl9HU09fR1JFX0NTVU0pKSlcbiYjNDM7XHRcdFx0c2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNj0gfihTS0JfR1NPX0dSRSB8XG4mIzQzO1x0XHRcdFx0XHQgICAgICBTS0JfR1NPX0dSRV9DU1VNKTtcbiYjNDM7XHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgKHNoaW5mby1cdTAwM2Vnc29fdHlwZSBcdTAwMjYgU0tCX0dTT19JUFhJUDQpKVxuJiM0MztcdFx0XHRzaGluZm8tXHUwMDNlZ3NvX3R5cGUgXHUwMDI2PSB+U0tCX0dTT19JUFhJUDQ7XG4mIzQzO1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIChzaGluZm8tXHUwMDNlZ3NvX3R5cGUgXHUwMDI2IFNLQl9HU09fSVBYSVA2KSlcbiYjNDM7XHRcdFx0c2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNj0gflNLQl9HU09fSVBYSVA2O1xuJiM0MztcbiYjNDM7XHRcdC8qIENsZWFyIGVuY2Fwc3VsYXRpb24gZmxhZyBvbmx5IHdoZW4gbm8gdHVubmVsIEdTTyBmbGFncyByZW1haW4gKi9cbiYjNDM7XHRcdGlmIChmbGFncyBcdTAwMjYgKEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X01BU0sgfFxuJiM0MztcdFx0XHQgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0spKSB7XG4mIzQzO1x0XHRcdGlmICghKHNoaW5mby1cdTAwM2Vnc29fdHlwZSBcdTAwMjYgKFNLQl9HU09fVURQX1RVTk5FTCB8XG4mIzQzO1x0XHRcdFx0XHRcdCAgU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0gfFxuJiM0MztcdFx0XHRcdFx0XHQgIFNLQl9HU09fR1JFIHxcbiYjNDM7XHRcdFx0XHRcdFx0ICBTS0JfR1NPX0dSRV9DU1VNIHxcbiYjNDM7XHRcdFx0XHRcdFx0ICBTS0JfR1NPX0lQWElQNCB8XG4mIzQzO1x0XHRcdFx0XHRcdCAgU0tCX0dTT19JUFhJUDYgfFxuJiM0MztcdFx0XHRcdFx0XHQgIFNLQl9HU09fRVNQKSkpXG4mIzQzO1x0XHRcdFx0aWYgKHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uKVxuJiM0MztcdFx0XHRcdFx0c2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24gPSAwO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0LyogSGVhZGVyIG11c3QgYmUgY2hlY2tlZCwgYW5kIGdzb19zZWdzIHJlY29tcHV0ZWQuICovXG4gXHRcdHNoaW5mby1cdTAwM2Vnc29fdHlwZSB8PSBTS0JfR1NPX0RPREdZO1xuIFx0XHRzaGluZm8tXHUwMDNlZ3NvX3NlZ3MgPSAwO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBGb3Igbm9uLUdTTyBwYWNrZXRzLCBjbGVhciBlbmNhcHN1bGF0aW9uIGlmIGRlY2FwIGZsYWdzIGFyZSBzZXQgKi9cbiYjNDM7XHRcdGlmICgoZmxhZ3MgXHUwMDI2IChCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLIHxcbiYjNDM7XHRcdFx0ICAgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTSykpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uKVxuJiM0MztcdFx0XHRza2ItXHUwMDNlZW5jYXBzdWxhdGlvbiA9IDA7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0zODAyLDggJiM0MzszODU1LDcgQEAgQlBGX0NBTExfNChicGZfc2tiX2FkanVzdF9yb29tLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHMzMiwgbGVuX2RpZmYsXG4gXHR1MzIgb2ZmO1xuIFx0aW50IHJldDtcbiBcbi1cdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgfihCUEZfRl9BREpfUk9PTV9NQVNLIHxcbi1cdFx0XHQgICAgICAgQlBGX0ZfQURKX1JPT01fTk9fQ1NVTV9SRVNFVCkpKVxuJiM0MztcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgfkJQRl9GX0FESl9ST09NX01BU0spKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdGlmICh1bmxpa2VseShsZW5fZGlmZl9hYnMgXHUwMDNlIDB4ZmZmVSkpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuQEAgLTM4MjIsMjAgJiM0MzszODc0LDUzIEBAIEJQRl9DQUxMXzQoYnBmX3NrYl9hZGp1c3Rfcm9vbSwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBzMzIsIGxlbl9kaWZmLFxuIFx0XHRyZXR1cm4gLUVOT1RTVVBQO1xuIFx0fVxuIFxuLVx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19NQVNLKSB7XG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9NQVNLKSB7XG4mIzQzO1x0XHR1MzIgbGVuX2RlY2FwX21pbiA9IDA7XG4mIzQzO1xuIFx0XHRpZiAoIXNocmluaylcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdFx0c3dpdGNoIChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSykge1xuLVx0XHRjYXNlIEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQ6XG4mIzQzO1x0XHQvKiBSZWplY3QgbXV0dWFsbHkgZXhjbHVzaXZlIGRlY2FwIGZsYWcgcGFpcnMuICovXG4mIzQzO1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19NQVNLKSA9PVxuJiM0MztcdFx0ICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX01BU0spXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X01BU0spID09XG4mIzQzO1x0XHQgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSylcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTSykgPT1cbiYjNDM7XHRcdCAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBSZWplY3QgbXV0dWFsbHkgZXhjbHVzaXZlIGRlY2FwIHR1bm5lbCB0eXBlIGZsYWdzLiAqL1xuJiM0MztcdFx0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLKVxuJiM0MztcdFx0XHRsZW5fZGVjYXBfbWluICYjNDM7PSBicGZfc2tiX25ldF9iYXNlX2xlbihza2IpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKVxuJiM0MztcdFx0XHRsZW5fZGVjYXBfbWluICYjNDM7PSBzaXplb2Yoc3RydWN0IHVkcGhkcik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUpXG4mIzQzO1x0XHRcdGxlbl9kZWNhcF9taW4gJiM0Mzs9IHNpemVvZihzdHJ1Y3QgZ3JlX2Jhc2VfaGRyKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNClcbiYjNDM7XHRcdFx0bGVuX2RlY2FwX21pbiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcGhkcik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYpXG4mIzQzO1x0XHRcdGxlbl9kZWNhcF9taW4gJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGxlbl9kaWZmX2FicyBcdTAwM2MgbGVuX2RlY2FwX21pbilcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0KVxuIFx0XHRcdGxlbl9taW4gPSBzaXplb2Yoc3RydWN0IGlwaGRyKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY2OlxuJiM0MztcbiYjNDM7XHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNilcbiBcdFx0XHRsZW5fbWluID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0fVxuIFx0fVxuIFxuIFx0bGVuX2N1ciA9IHNrYi1cdTAwM2VsZW4gLSBza2JfbmV0d29ya19vZmZzZXQoc2tiKTtcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbmluZGV4IGZmZDk2ZThiOTIwYmQuLjczMmIzNWNjMDhkMWMgMTAwNjQ0XG4tLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTMwMzgsOCAmIzQzOzMwMzgsMzQgQEAgdW5pb24gYnBmX2F0dHIge1xuICAqXG4gICpcdFx0KiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQqKixcbiAgKlx0XHQgICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNioqOlxuLSAqXHRcdCAgSW5kaWNhdGUgdGhlIG5ldyBJUCBoZWFkZXIgdmVyc2lvbiBhZnRlciBkZWNhcHN1bGF0aW5nIHRoZSBvdXRlclxuLSAqXHRcdCAgSVAgaGVhZGVyLiBVc2VkIHdoZW4gdGhlIGlubmVyIGFuZCBvdXRlciBJUCB2ZXJzaW9ucyBhcmUgZGlmZmVyZW50LlxuJiM0MzsgKlx0XHQgIEluZGljYXRlIHRoZSBuZXcgSVAgaGVhZGVyIHZlcnNpb24gYWZ0ZXIgZGVjYXBzdWxhdGluZyB0aGVcbiYjNDM7ICpcdFx0ICBvdXRlciBJUCBoZWFkZXIuIFVzZWQgd2hlbiB0aGUgaW5uZXIgYW5kIG91dGVyIElQIHZlcnNpb25zXG4mIzQzOyAqXHRcdCAgYXJlIGRpZmZlcmVudC4gVGhlc2UgZmxhZ3Mgb25seSB0cmlnZ2VyIGEgcHJvdG9jb2wgY2hhbmdlXG4mIzQzOyAqXHRcdCAgd2l0aG91dCBjbGVhcmluZyBhbnkgdHVubmVsLXNwZWNpZmljIEdTTyBmbGFncy5cbiYjNDM7ICpcbiYjNDM7ICpcdFx0KiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRSoqOlxuJiM0MzsgKlx0XHQgIENsZWFyIEdSRSB0dW5uZWwgR1NPIGZsYWdzIChTS0JfR1NPX0dSRSBhbmQgU0tCX0dTT19HUkVfQ1NVTSlcbiYjNDM7ICpcdFx0ICB3aGVuIGRlY2Fwc3VsYXRpbmcgYSBHUkUgdHVubmVsLlxuJiM0MzsgKlxuJiM0MzsgKlx0XHQqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKio6XG4mIzQzOyAqXHRcdCAgQ2xlYXIgVURQIHR1bm5lbCBHU08gZmxhZ3MgKFNLQl9HU09fVURQX1RVTk5FTCBhbmRcbiYjNDM7ICpcdFx0ICBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSkgd2hlbiBkZWNhcHN1bGF0aW5nIGEgVURQIHR1bm5lbC5cbiYjNDM7ICpcbiYjNDM7ICpcdFx0KiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCoqOlxuJiM0MzsgKlx0XHQgIENsZWFyIElQSVAvU0lUIHR1bm5lbCBHU08gZmxhZyAoU0tCX0dTT19JUFhJUDQpIHdoZW4gZGVjYXBzdWxhdGluZ1xuJiM0MzsgKlx0XHQgIGEgdHVubmVsIHdpdGggYW4gb3V0ZXIgSVB2NCBoZWFkZXIgKElQdjQtaW4tSVB2NCBvciBJUHY2LWluLUlQdjQpLlxuJiM0MzsgKlxuJiM0MzsgKlx0XHQqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2Kio6XG4mIzQzOyAqXHRcdCAgQ2xlYXIgSVB2NiBlbmNhcHN1bGF0aW9uIHR1bm5lbCBHU08gZmxhZyAoU0tCX0dTT19JUFhJUDYpIHdoZW5cbiYjNDM7ICpcdFx0ICBkZWNhcHN1bGF0aW5nIGEgdHVubmVsIHdpdGggYW4gb3V0ZXIgSVB2NiBoZWFkZXIgKElQdjYtaW4tSVB2NlxuJiM0MzsgKlx0XHQgIG9yIElQdjQtaW4tSVB2NikuXG4mIzQzOyAqXG4mIzQzOyAqXHRcdFdoZW4gdXNpbmcgdGhlIGRlY2Fwc3VsYXRpb24gZmxhZ3MgYWJvdmUsIHRoZSBza2ItXHUwMDNlZW5jYXBzdWxhdGlvblxuJiM0MzsgKlx0XHRmbGFnIGlzIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCBpZiBhbGwgdHVubmVsLXNwZWNpZmljIEdTTyBmbGFnc1xuJiM0MzsgKlx0XHQoU0tCX0dTT19VRFBfVFVOTkVMLCBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSwgU0tCX0dTT19HUkUsXG4mIzQzOyAqXHRcdFNLQl9HU09fR1JFX0NTVU0sIFNLQl9HU09fSVBYSVA0LCBTS0JfR1NPX0lQWElQNikgaGF2ZSBiZWVuXG4mIzQzOyAqXHRcdHJlbW92ZWQgZnJvbSB0aGUgcGFja2V0LiBUaGlzIGhhbmRsZXMgY2FzZXMgd2hlcmUgYWxsIHR1bm5lbFxuJiM0MzsgKlx0XHRsYXllcnMgaGF2ZSBiZWVuIGRlY2Fwc3VsYXRlZC5cbiAgKlxuICAqIFx0XHRBIGNhbGwgdG8gdGhpcyBoZWxwZXIgaXMgc3VzY2VwdGlibGUgdG8gY2hhbmdlIHRoZSB1bmRlcmx5aW5nXG4gICogXHRcdHBhY2tldCBidWZmZXIuIFRoZXJlZm9yZSwgYXQgbG9hZCB0aW1lLCBhbGwgY2hlY2tzIG9uIHBvaW50ZXJzXG5AQCAtNjI4Myw3ICYjNDM7NjMwOSw3IEBAIGVudW0ge1xuIH07XG4gXG4gLyogQlBGX0ZVTkNfc2tiX2FkanVzdF9yb29tIGZsYWdzLiAqL1xuLWVudW0ge1xuJiM0MztlbnVtIGJwZl9hZGpfcm9vbV9mbGFncyB7XG4gXHRCUEZfRl9BREpfUk9PTV9GSVhFRF9HU09cdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDApLFxuIFx0QlBGX0ZfQURKX1JPT01fRU5DQVBfTDNfSVBWNFx0PSAoMVVMTCBcdTAwM2NcdTAwM2MgMSksXG4gXHRCUEZfRl9BREpfUk9PTV9FTkNBUF9MM19JUFY2XHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyAyKSxcbkBAIC02MjkzLDYgJiM0Mzs2MzE5LDEwIEBAIGVudW0ge1xuIFx0QlBGX0ZfQURKX1JPT01fRU5DQVBfTDJfRVRIXHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyA2KSxcbiBcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjRcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDcpLFxuIFx0QlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNlx0PSAoMVVMTCBcdTAwM2NcdTAwM2MgOCksXG4mIzQzO1x0QlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFXHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyA5KSxcbiYjNDM7XHRCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9VRFBcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDEwKSxcbiYjNDM7XHRCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDRcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDExKSxcbiYjNDM7XHRCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDZcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDEyKSxcbiB9O1xuIFxuIGVudW0ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfdGNfdHVubmVsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3RjX3R1bm5lbC5jXG5pbmRleCAxYWE3Yzk0NjM5ODBiLi42N2JhMjdkNjkzNDc0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF90Y190dW5uZWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF90Y190dW5uZWwuY1xuQEAgLTQzOCw3ICYjNDM7NDM4LDYgQEAgc3RhdGljIGludCBzZXR1cCh2b2lkKVxuIFx0U1lTKGZhaWxfY2xvc2VfbnNfY2xpZW50LCBcJiMzNDtpcCBsaW5rIGFkZCAlcyB0eXBlIHZldGggcGVlciBuYW1lICVzXCYjMzQ7LFxuIFx0ICAgIFwmIzM0O3ZldGgxIG10dSAxNTAwIG5ldG5zIFwmIzM0OyBDTElFTlRfTlMgXCYjMzQ7IGFkZHJlc3MgXCYjMzQ7IE1BQ19BRERSX1ZFVEgxLFxuIFx0ICAgIFwmIzM0O3ZldGgyIG10dSAxNTAwIG5ldG5zIFwmIzM0OyBTRVJWRVJfTlMgXCYjMzQ7IGFkZHJlc3MgXCYjMzQ7IE1BQ19BRERSX1ZFVEgyKTtcbi1cdFNZUyhmYWlsX2Nsb3NlX25zX2NsaWVudCwgXCYjMzQ7ZXRodG9vbCAtSyB2ZXRoMSB0c28gb2ZmXCYjMzQ7KTtcbiBcdFNZUyhmYWlsX2Nsb3NlX25zX2NsaWVudCwgXCYjMzQ7aXAgbGluayBzZXQgdmV0aDEgdXBcJiMzNDspO1xuIFx0bnN0b2tlbl9zZXJ2ZXIgPSBvcGVuX25ldG5zKFNFUlZFUl9OUyk7XG4gXHRpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbl9zZXJ2ZXIsIFwmIzM0O29wZW4gc2VydmVyIG5zXCYjMzQ7KSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y190dW5uZWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3R1bm5lbC5jXG5pbmRleCA3Mzc2ZGY0MDVhNmJlLi44NTNiY2E5NjI5MTAzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfdHVubmVsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3R1bm5lbC5jXG5AQCAtNiw2ICYjNDM7Niw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2VuZGlhbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfY29yZV9yZWFkLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDticGZfdHJhY2luZ19uZXQuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2JwZl9jb21waWxlci5oXCYjMzQ7XG4gXG5AQCAtMzcsNiAmIzQzOzM4LDIyIEBAIHN0cnVjdCB2eGxhbmhkcl9fX2xvY2FsIHtcbiBcbiAjZGVmaW5lXHRFWFRQUk9UT19WWExBTlx0MHgxXG4gXG4mIzQzOyNkZWZpbmUgU0tCX0dTT19VRFBfVFVOTkVMX01BU0tcdChTS0JfR1NPX1VEUF9UVU5ORUwgfFx0XHRcdFxcXG4mIzQzO1x0XHRcdFx0IFNLQl9HU09fVURQX1RVTk5FTF9DU1VNKVxuJiM0MztcbiYjNDM7I2RlZmluZSBTS0JfR1NPX1RVTk5FTF9NQVNLXHQoU0tCX0dTT19VRFBfVFVOTkVMX01BU0sgfFx0XHRcXFxuJiM0MztcdFx0XHRcdCBTS0JfR1NPX0dSRSB8XHRcdFx0XHRcXFxuJiM0MztcdFx0XHRcdCBTS0JfR1NPX0dSRV9DU1VNIHxcdFx0XHRcXFxuJiM0MztcdFx0XHRcdCBTS0JfR1NPX0lQWElQNCB8XHRcdFx0XFxcbiYjNDM7XHRcdFx0XHQgU0tCX0dTT19JUFhJUDYgfFx0XHRcdFxcXG4mIzQzO1x0XHRcdFx0IFNLQl9HU09fRVNQKVxuJiM0MztcbiYjNDM7I2RlZmluZSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLXHQoQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQIHxcdFxcXG4mIzQzO1x0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFKVxuJiM0MztcbiYjNDM7I2RlZmluZSBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLXHQoQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0IHxcdFxcXG4mIzQzO1x0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KVxuJiM0MztcbiAjZGVmaW5lXHRWWExBTl9GTEFHUyAgICAgYnBmX2h0b25sKDFcdTAwM2NcdTAwM2MyNylcbiAjZGVmaW5lXHRWTklfSURcdFx0MVxuICNkZWZpbmVcdFZYTEFOX1ZOSVx0YnBmX2h0b25sKFZOSV9JRCBcdTAwM2NcdTAwM2MgOClcbkBAIC01ODksOSAmIzQzOzYwNiwxMiBAQCBpbnQgX19lbmNhcF9pcDZ2eGxhbl9ldGgoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuIFx0XHRyZXR1cm4gVENfQUNUX09LO1xuIH1cbiBcbi1zdGF0aWMgaW50IGRlY2FwX2ludGVybmFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiwgaW50IG9mZiwgaW50IGxlbiwgY2hhciBwcm90bylcbiYjNDM7c3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8sXG4mIzQzO1x0XHRcdCAgX191NjQgaXB4aXBfZmxhZylcbiB7XG4gXHRfX3U2NCBmbGFncyA9IEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTztcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqa3NrYjtcbiYjNDM7XHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm87XG4gXHRzdHJ1Y3QgaXB2Nl9vcHRfaGRyIGlwNl9vcHRfaGRyO1xuIFx0c3RydWN0IGdyZV9oZHIgZ3JlaDtcbiBcdHN0cnVjdCB1ZHBoZHIgdWRwaDtcbkBAIC01OTksMTAgJiM0Mzs2MTksMTIgQEAgc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8pXG4gXG4gXHRzd2l0Y2ggKHByb3RvKSB7XG4gXHRjYXNlIElQUFJPVE9fSVBJUDpcbi1cdFx0ZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNDtcbiYjNDM7XHRcdGZsYWdzIHw9IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQgfFxuJiM0MztcdFx0XHQgaXB4aXBfZmxhZztcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElQUFJPVE9fSVBWNjpcbi1cdFx0ZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNjtcbiYjNDM7XHRcdGZsYWdzIHw9IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjYgfFxuJiM0MztcdFx0XHQgaXB4aXBfZmxhZztcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIE5FWFRIRFJfREVTVDpcbiBcdFx0aWYgKGJwZl9za2JfbG9hZF9ieXRlcyhza2IsIG9mZiAmIzQzOyBsZW4sIFx1MDAyNmlwNl9vcHRfaGRyLFxuQEAgLTYxMCwxMCAmIzQzOzYzMiwxMiBAQCBzdGF0aWMgaW50IGRlY2FwX2ludGVybmFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiwgaW50IG9mZiwgaW50IGxlbiwgY2hhciBwcm90bylcbiBcdFx0XHRyZXR1cm4gVENfQUNUX09LO1xuIFx0XHRzd2l0Y2ggKGlwNl9vcHRfaGRyLm5leHRoZHIpIHtcbiBcdFx0Y2FzZSBJUFBST1RPX0lQSVA6XG4tXHRcdFx0ZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNDtcbiYjNDM7XHRcdFx0ZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNCB8XG4mIzQzO1x0XHRcdFx0IGlweGlwX2ZsYWc7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgSVBQUk9UT19JUFY2OlxuLVx0XHRcdGZsYWdzIHw9IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjY7XG4mIzQzO1x0XHRcdGZsYWdzIHw9IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjYgfFxuJiM0MztcdFx0XHRcdCBpcHhpcF9mbGFnO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdHJldHVybiBUQ19BQ1RfT0s7XG5AQCAtNjIxLDYgJiM0Mzs2NDUsMTEgQEAgc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8pXG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBJUFBST1RPX0dSRTpcbiBcdFx0b2xlbiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBncmVfaGRyKTtcbiYjNDM7XHRcdGlmICghYnBmX2NvcmVfZW51bV92YWx1ZV9leGlzdHMoZW51bSBicGZfYWRqX3Jvb21fZmxhZ3MsXG4mIzQzO1x0XHRcdFx0XHRcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRSkpXG4mIzQzO1x0XHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbiYjNDM7XHRcdGZsYWdzIHw9IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRTtcbiYjNDM7XG4gXHRcdGlmIChicGZfc2tiX2xvYWRfYnl0ZXMoc2tiLCBvZmYgJiM0MzsgbGVuLCBcdTAwMjZncmVoLCBzaXplb2YoZ3JlaCkpIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiBUQ19BQ1RfT0s7XG4gXHRcdHN3aXRjaCAoYnBmX250b2hzKGdyZWgucHJvdG9jb2wpKSB7XG5AQCAtNjM0LDYgJiM0Mzs2NjMsMTAgQEAgc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8pXG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBJUFBST1RPX1VEUDpcbiBcdFx0b2xlbiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuJiM0MztcdFx0aWYgKCFicGZfY29yZV9lbnVtX3ZhbHVlX2V4aXN0cyhlbnVtIGJwZl9hZGpfcm9vbV9mbGFncyxcbiYjNDM7XHRcdFx0XHRcdFx0QlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKSlcbiYjNDM7XHRcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuJiM0MztcdFx0ZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQO1xuIFx0XHRpZiAoYnBmX3NrYl9sb2FkX2J5dGVzKHNrYiwgb2ZmICYjNDM7IGxlbiwgXHUwMDI2dWRwaCwgc2l6ZW9mKHVkcGgpKSBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gVENfQUNUX09LO1xuIFx0XHRzd2l0Y2ggKGJwZl9udG9ocyh1ZHBoLmRlc3QpKSB7XG5AQCAtNjU1LDYgJiM0Mzs2ODgsNDAgQEAgc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8pXG4gXHRpZiAoYnBmX3NrYl9hZGp1c3Rfcm9vbShza2IsIC1vbGVuLCBCUEZfQURKX1JPT01fTUFDLCBmbGFncykpXG4gXHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbiBcbiYjNDM7XHRrc2tiID0gYnBmX2Nhc3RfdG9fa2Vybl9jdHgoc2tiKTtcbiYjNDM7XHRzaGluZm8gPSBicGZfY29yZV9jYXN0KGtza2ItXHUwMDNlaGVhZCAmIzQzOyBrc2tiLVx1MDAzZWVuZCwgc3RydWN0IHNrYl9zaGFyZWRfaW5mbyk7XG4mIzQzO1x0aWYgKHNoaW5mby1cdTAwM2Vnc29fc2l6ZSkge1xuJiM0MztcdFx0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAoc2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNiBTS0JfR1NPX1VEUF9UVU5ORUxfTUFTSykpXG4mIzQzO1x0XHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIChzaGluZm8tXHUwMDNlZ3NvX3R5cGUgXHUwMDI2IChTS0JfR1NPX0dSRSB8IFNLQl9HU09fR1JFX0NTVU0pKSlcbiYjNDM7XHRcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuJiM0MztcbiYjNDM7XHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgKHNoaW5mby1cdTAwM2Vnc29fdHlwZSBcdTAwMjYgU0tCX0dTT19JUFhJUDQpKVxuJiM0MztcdFx0XHRyZXR1cm4gVENfQUNUX1NIT1Q7XG4mIzQzO1xuJiM0MztcdFx0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAoc2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNiBTS0JfR1NPX0lQWElQNikpXG4mIzQzO1x0XHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZmxhZ3MgXHUwMDI2IChCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLIHxcbiYjNDM7XHRcdFx0ICAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKSkge1xuJiM0MztcdFx0XHRpZiAoKHNoaW5mby1cdTAwM2Vnc29fdHlwZSBcdTAwMjYgU0tCX0dTT19UVU5ORUxfTUFTSykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICAha3NrYi1cdTAwM2VlbmNhcHN1bGF0aW9uKVxuJiM0MztcdFx0XHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbiYjNDM7XHRcdFx0aWYgKCEoc2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNiBTS0JfR1NPX1RVTk5FTF9NQVNLKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgIGtza2ItXHUwMDNlZW5jYXBzdWxhdGlvbilcbiYjNDM7XHRcdFx0XHRyZXR1cm4gVENfQUNUX1NIT1Q7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIGlmICgoZmxhZ3MgXHUwMDI2IChCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLIHxcbiYjNDM7XHRcdFx0ICAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICBrc2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24pIHtcbiYjNDM7XHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIFRDX0FDVF9PSztcbiB9XG4gXG5AQCAtNjYyLDYgJiM0Mzs3MjksMTAgQEAgc3RhdGljIGludCBkZWNhcF9pcHY0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiB7XG4gXHRzdHJ1Y3QgaXBoZHIgaXBoX291dGVyO1xuIFxuJiM0MztcdGlmICghYnBmX2NvcmVfZW51bV92YWx1ZV9leGlzdHMoZW51bSBicGZfYWRqX3Jvb21fZmxhZ3MsXG4mIzQzO1x0XHRcdFx0XHRCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDQpKVxuJiM0MztcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuJiM0MztcbiBcdGlmIChicGZfc2tiX2xvYWRfYnl0ZXMoc2tiLCBFVEhfSExFTiwgXHUwMDI2aXBoX291dGVyLFxuIFx0XHRcdCAgICAgICBzaXplb2YoaXBoX291dGVyKSkgXHUwMDNjIDApXG4gXHRcdHJldHVybiBUQ19BQ1RfT0s7XG5AQCAtNjcwLDE5ICYjNDM7NzQxLDI1IEBAIHN0YXRpYyBpbnQgZGVjYXBfaXB2NChzdHJ1Y3QgX19za19idWZmICpza2IpXG4gXHRcdHJldHVybiBUQ19BQ1RfT0s7XG4gXG4gXHRyZXR1cm4gZGVjYXBfaW50ZXJuYWwoc2tiLCBFVEhfSExFTiwgc2l6ZW9mKGlwaF9vdXRlciksXG4tXHRcdFx0ICAgICAgaXBoX291dGVyLnByb3RvY29sKTtcbiYjNDM7XHRcdFx0ICAgICAgaXBoX291dGVyLnByb3RvY29sLFxuJiM0MztcdFx0XHQgICAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDQpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGRlY2FwX2lwdjYoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHN0cnVjdCBpcHY2aGRyIGlwaF9vdXRlcjtcbiBcbiYjNDM7XHRpZiAoIWJwZl9jb3JlX2VudW1fdmFsdWVfZXhpc3RzKGVudW0gYnBmX2Fkal9yb29tX2ZsYWdzLFxuJiM0MztcdFx0XHRcdFx0QlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KSlcbiYjNDM7XHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbiYjNDM7XG4gXHRpZiAoYnBmX3NrYl9sb2FkX2J5dGVzKHNrYiwgRVRIX0hMRU4sIFx1MDAyNmlwaF9vdXRlcixcbiBcdFx0XHQgICAgICAgc2l6ZW9mKGlwaF9vdXRlcikpIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gVENfQUNUX09LO1xuIFxuIFx0cmV0dXJuIGRlY2FwX2ludGVybmFsKHNrYiwgRVRIX0hMRU4sIHNpemVvZihpcGhfb3V0ZXIpLFxuLVx0XHRcdCAgICAgIGlwaF9vdXRlci5uZXh0aGRyKTtcbiYjNDM7XHRcdFx0ICAgICAgaXBoX291dGVyLm5leHRoZHIsXG4mIzQzO1x0XHRcdCAgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNik7XG4gfVxuIFxuIFNFQyhcJiMzNDt0Y1wmIzM0OylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TkVUX0NMU19CUEYmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9CUEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc2tiX2FkanVzdF9yb29tJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbmV3IGZsYWdzIHRvIHRoZSBicGZfc2tiX2FkanVzdF9yb29tIEJQRiBoZWxwZXIgdG8gY2xlYXIgdHVubmVsLXNwZWNpZmljIEdTTyBmbGFncyBkdXJpbmcgZGVjYXBzdWxhdGlvbi4gVGhpcyBtb2RpZmllcyBjb3JlIEJQRiBuZXR3b3JraW5nIGxvZ2ljIHJlYWNoYWJsZSB2aWEgVEMgQlBGIHByb2dyYW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjUzYjc1ZGIwZDY0M2UxNTQwYjhlYThiMTliYWMwYjMyOGNjYTA5ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDE2OjQ5OjAwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCmluZGV4IGZmZDk2ZThiOTIwYmQuLjczMmIzNWNjMDhkMWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKQEAgLTMwMzgsOCAmIzQzOzMwMzgsMzQgQEAgdW5pb24gYnBmX2F0dHIgewogICoKICAqCQkqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNCoqLAogICoJCSAgKipCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY2Kio6Ci0gKgkJICBJbmRpY2F0ZSB0aGUgbmV3IElQIGhlYWRlciB2ZXJzaW9uIGFmdGVyIGRlY2Fwc3VsYXRpbmcgdGhlIG91dGVyCi0gKgkJICBJUCBoZWFkZXIuIFVzZWQgd2hlbiB0aGUgaW5uZXIgYW5kIG91dGVyIElQIHZlcnNpb25zIGFyZSBkaWZmZXJlbnQuCiYjNDM7ICoJCSAgSW5kaWNhdGUgdGhlIG5ldyBJUCBoZWFkZXIgdmVyc2lvbiBhZnRlciBkZWNhcHN1bGF0aW5nIHRoZQomIzQzOyAqCQkgIG91dGVyIElQIGhlYWRlci4gVXNlZCB3aGVuIHRoZSBpbm5lciBhbmQgb3V0ZXIgSVAgdmVyc2lvbnMKJiM0MzsgKgkJICBhcmUgZGlmZmVyZW50LiBUaGVzZSBmbGFncyBvbmx5IHRyaWdnZXIgYSBwcm90b2NvbCBjaGFuZ2UKJiM0MzsgKgkJICB3aXRob3V0IGNsZWFyaW5nIGFueSB0dW5uZWwtc3BlY2lmaWMgR1NPIGZsYWdzLgomIzQzOyAqCiYjNDM7ICoJCSogKipCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUqKjoKJiM0MzsgKgkJICBDbGVhciBHUkUgdHVubmVsIEdTTyBmbGFncyAoU0tCX0dTT19HUkUgYW5kIFNLQl9HU09fR1JFX0NTVU0pCiYjNDM7ICoJCSAgd2hlbiBkZWNhcHN1bGF0aW5nIGEgR1JFIHR1bm5lbC4KJiM0MzsgKgomIzQzOyAqCQkqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKio6CiYjNDM7ICoJCSAgQ2xlYXIgVURQIHR1bm5lbCBHU08gZmxhZ3MgKFNLQl9HU09fVURQX1RVTk5FTCBhbmQKJiM0MzsgKgkJICBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSkgd2hlbiBkZWNhcHN1bGF0aW5nIGEgVURQIHR1bm5lbC4KJiM0MzsgKgomIzQzOyAqCQkqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0Kio6CiYjNDM7ICoJCSAgQ2xlYXIgSVBJUC9TSVQgdHVubmVsIEdTTyBmbGFnIChTS0JfR1NPX0lQWElQNCkgd2hlbiBkZWNhcHN1bGF0aW5nCiYjNDM7ICoJCSAgYSB0dW5uZWwgd2l0aCBhbiBvdXRlciBJUHY0IGhlYWRlciAoSVB2NC1pbi1JUHY0IG9yIElQdjYtaW4tSVB2NCkuCiYjNDM7ICoKJiM0MzsgKgkJKiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNioqOgomIzQzOyAqCQkgIENsZWFyIElQdjYgZW5jYXBzdWxhdGlvbiB0dW5uZWwgR1NPIGZsYWcgKFNLQl9HU09fSVBYSVA2KSB3aGVuCiYjNDM7ICoJCSAgZGVjYXBzdWxhdGluZyBhIHR1bm5lbCB3aXRoIGFuIG91dGVyIElQdjYgaGVhZGVyIChJUHY2LWluLUlQdjYKJiM0MzsgKgkJICBvciBJUHY0LWluLUlQdjYpLgomIzQzOyAqCiYjNDM7ICoJCVdoZW4gdXNpbmcgdGhlIGRlY2Fwc3VsYXRpb24gZmxhZ3MgYWJvdmUsIHRoZSBza2ItJmd0O2VuY2Fwc3VsYXRpb24KJiM0MzsgKgkJZmxhZyBpcyBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgaWYgYWxsIHR1bm5lbC1zcGVjaWZpYyBHU08gZmxhZ3MKJiM0MzsgKgkJKFNLQl9HU09fVURQX1RVTk5FTCwgU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0sIFNLQl9HU09fR1JFLAomIzQzOyAqCQlTS0JfR1NPX0dSRV9DU1VNLCBTS0JfR1NPX0lQWElQNCwgU0tCX0dTT19JUFhJUDYpIGhhdmUgYmVlbgomIzQzOyAqCQlyZW1vdmVkIGZyb20gdGhlIHBhY2tldC4gVGhpcyBoYW5kbGVzIGNhc2VzIHdoZXJlIGFsbCB0dW5uZWwKJiM0MzsgKgkJbGF5ZXJzIGhhdmUgYmVlbiBkZWNhcHN1bGF0ZWQuCiAgKgogICogCQlBIGNhbGwgdG8gdGhpcyBoZWxwZXIgaXMgc3VzY2VwdGlibGUgdG8gY2hhbmdlIHRoZSB1bmRlcmx5aW5nCiAgKiAJCXBhY2tldCBidWZmZXIuIFRoZXJlZm9yZSwgYXQgbG9hZCB0aW1lLCBhbGwgY2hlY2tzIG9uIHBvaW50ZXJzCkBAIC02MjgzLDcgJiM0Mzs2MzA5LDcgQEAgZW51bSB7CiB9OwogCiAvKiBCUEZfRlVOQ19za2JfYWRqdXN0X3Jvb20gZmxhZ3MuICovCi1lbnVtIHsKJiM0MztlbnVtIGJwZl9hZGpfcm9vbV9mbGFncyB7CiAJQlBGX0ZfQURKX1JPT01fRklYRURfR1NPCT0gKDFVTEwgJmx0OyZsdDsgMCksCiAJQlBGX0ZfQURKX1JPT01fRU5DQVBfTDNfSVBWNAk9ICgxVUxMICZsdDsmbHQ7IDEpLAogCUJQRl9GX0FESl9ST09NX0VOQ0FQX0wzX0lQVjYJPSAoMVVMTCAmbHQ7Jmx0OyAyKSwKQEAgLTYyOTMsNiAmIzQzOzYzMTksMTAgQEAgZW51bSB7CiAJQlBGX0ZfQURKX1JPT01fRU5DQVBfTDJfRVRICT0gKDFVTEwgJmx0OyZsdDsgNiksCiAJQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNAk9ICgxVUxMICZsdDsmbHQ7IDcpLAogCUJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjYJPSAoMVVMTCAmbHQ7Jmx0OyA4KSwKJiM0MzsJQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFCT0gKDFVTEwgJmx0OyZsdDsgOSksCiYjNDM7CUJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUAk9ICgxVUxMICZsdDsmbHQ7IDEwKSwKJiM0MzsJQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0CT0gKDFVTEwgJmx0OyZsdDsgMTEpLAomIzQzOwlCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYJPSAoMVVMTCAmbHQ7Jmx0OyAxMiksCiB9OwogCiBlbnVtIHsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmMKaW5kZXggMzQyMzczNDEyNGE1Yi4uODllZmZmZjNiYzUyNSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZmlsdGVyLmMKQEAgLTU2LDYgJiM0Mzs1Niw3IEBACiAjaW5jbHVkZSAmbHQ7bmV0L3NvY2tfcmV1c2Vwb3J0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2J1c3lfcG9sbC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC90Y3AuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L2dyZS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC94ZnJtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3VkcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JwZl90cmFjZS5oJmd0OwpAQCAtMzU3MiwxNCAmIzQzOzM1NzMsMjcgQEAgc3RhdGljIHUzMiBicGZfc2tiX25ldF9iYXNlX2xlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogI2RlZmluZSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19NQVNLCShCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0IHwgXAogCQkJCQkgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNikKIAotI2RlZmluZSBCUEZfRl9BREpfUk9PTV9NQVNLCQkoQlBGX0ZfQURKX1JPT01fRklYRURfR1NPIHwgXAotCQkJCQkgQlBGX0ZfQURKX1JPT01fRU5DQVBfTDNfTUFTSyB8IFwKJiM0MzsjZGVmaW5lIEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X01BU0sJKEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCB8IFwKJiM0MzsJCQkJCSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUpCiYjNDM7CiYjNDM7I2RlZmluZSBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLCShCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDQgfCBcCiYjNDM7CQkJCQkgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KQomIzQzOwomIzQzOyNkZWZpbmUgQlBGX0ZfQURKX1JPT01fRU5DQVBfTUFTSwkoQlBGX0ZfQURKX1JPT01fRU5DQVBfTDNfTUFTSyB8IFwKIAkJCQkJIEJQRl9GX0FESl9ST09NX0VOQ0FQX0w0X0dSRSB8IFwKIAkJCQkJIEJQRl9GX0FESl9ST09NX0VOQ0FQX0w0X1VEUCB8IFwKIAkJCQkJIEJQRl9GX0FESl9ST09NX0VOQ0FQX0wyX0VUSCB8IFwKIAkJCQkJIEJQRl9GX0FESl9ST09NX0VOQ0FQX0wyKCBcCi0JCQkJCSAgQlBGX0FESl9ST09NX0VOQ0FQX0wyX01BU0spIHwgXAotCQkJCQkgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSykKJiM0MzsJCQkJCSAgQlBGX0FESl9ST09NX0VOQ0FQX0wyX01BU0spKQomIzQzOwomIzQzOyNkZWZpbmUgQlBGX0ZfQURKX1JPT01fREVDQVBfTUFTSwkoQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSyB8IFwKJiM0MzsJCQkJCSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLIHwgXAomIzQzOwkJCQkJIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0spCiYjNDM7CiYjNDM7I2RlZmluZSBCUEZfRl9BREpfUk9PTV9NQVNLCQkoQlBGX0ZfQURKX1JPT01fRklYRURfR1NPIHwgXAomIzQzOwkJCQkJIEJQRl9GX0FESl9ST09NX0VOQ0FQX01BU0sgfCBcCiYjNDM7CQkJCQkgQlBGX0ZfQURKX1JPT01fREVDQVBfTUFTSyB8IFwKJiM0MzsJCQkJCSBCUEZfRl9BREpfUk9PTV9OT19DU1VNX1JFU0VUKQogCiBzdGF0aWMgaW50IGJwZl9za2JfbmV0X2dyb3coc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG9mZiwgdTMyIGxlbl9kaWZmLAogCQkJICAgIHU2NCBmbGFncykKQEAgLTM3MDIsOCAmIzQzOzM3MTYsOCBAQCBzdGF0aWMgaW50IGJwZl9za2JfbmV0X3NocmluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgb2ZmLCB1MzIgbGVuX2RpZmYsCiAJYm9vbCBkZWNhcCA9IGZsYWdzICZhbXA7IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX01BU0s7CiAJaW50IHJldDsKIAotCWlmICh1bmxpa2VseShmbGFncyAmYW1wOyB+KEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTyB8Ci0JCQkgICAgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSyB8CiYjNDM7CWlmICh1bmxpa2VseShmbGFncyAmYW1wOyB+KEJQRl9GX0FESl9ST09NX0RFQ0FQX01BU0sgfAomIzQzOwkJCSAgICAgICBCUEZfRl9BREpfUk9PTV9GSVhFRF9HU08gfAogCQkJICAgICAgIEJQRl9GX0FESl9ST09NX05PX0NTVU1fUkVTRVQpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTM3NDAsOSAmIzQzOzM3NTQsNDggQEAgc3RhdGljIGludCBicGZfc2tiX25ldF9zaHJpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG9mZiwgdTMyIGxlbl9kaWZmLAogCQlpZiAoIShmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9GSVhFRF9HU08pKQogCQkJc2tiX2luY3JlYXNlX2dzb19zaXplKHNoaW5mbywgbGVuX2RpZmYpOwogCiYjNDM7CQkvKiBTZWxlY3RpdmUgR1NPIGZsYWcgY2xlYXJpbmcgYmFzZWQgb24gZGVjYXAgdHlwZS4KJiM0MzsJCSAqIE9ubHkgY2xlYXIgdGhlIGZsYWdzIGZvciB0aGUgdHVubmVsIGxheWVyIGJlaW5nIHJlbW92ZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICgoZmxhZ3MgJmFtcDsgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKHNoaW5mby0mZ3Q7Z3NvX3R5cGUgJmFtcDsgKFNLQl9HU09fVURQX1RVTk5FTCB8CiYjNDM7CQkJCQkgU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0pKSkKJiM0MzsJCQlzaGluZm8tJmd0O2dzb190eXBlICZhbXA7PSB+KFNLQl9HU09fVURQX1RVTk5FTCB8CiYjNDM7CQkJCQkgICAgICBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSk7CiYjNDM7CQlpZiAoKGZsYWdzICZhbXA7IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRSkgJmFtcDsmYW1wOwomIzQzOwkJICAgIChzaGluZm8tJmd0O2dzb190eXBlICZhbXA7IChTS0JfR1NPX0dSRSB8IFNLQl9HU09fR1JFX0NTVU0pKSkKJiM0MzsJCQlzaGluZm8tJmd0O2dzb190eXBlICZhbXA7PSB+KFNLQl9HU09fR1JFIHwKJiM0MzsJCQkJCSAgICAgIFNLQl9HU09fR1JFX0NTVU0pOwomIzQzOwkJaWYgKChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDQpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoc2hpbmZvLSZndDtnc29fdHlwZSAmYW1wOyBTS0JfR1NPX0lQWElQNCkpCiYjNDM7CQkJc2hpbmZvLSZndDtnc29fdHlwZSAmYW1wOz0gflNLQl9HU09fSVBYSVA0OwomIzQzOwkJaWYgKChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoc2hpbmZvLSZndDtnc29fdHlwZSAmYW1wOyBTS0JfR1NPX0lQWElQNikpCiYjNDM7CQkJc2hpbmZvLSZndDtnc29fdHlwZSAmYW1wOz0gflNLQl9HU09fSVBYSVA2OwomIzQzOwomIzQzOwkJLyogQ2xlYXIgZW5jYXBzdWxhdGlvbiBmbGFnIG9ubHkgd2hlbiBubyB0dW5uZWwgR1NPIGZsYWdzIHJlbWFpbiAqLwomIzQzOwkJaWYgKGZsYWdzICZhbXA7IChCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLIHwKJiM0MzsJCQkgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0spKSB7CiYjNDM7CQkJaWYgKCEoc2hpbmZvLSZndDtnc29fdHlwZSAmYW1wOyAoU0tCX0dTT19VRFBfVFVOTkVMIHwKJiM0MzsJCQkJCQkgIFNLQl9HU09fVURQX1RVTk5FTF9DU1VNIHwKJiM0MzsJCQkJCQkgIFNLQl9HU09fR1JFIHwKJiM0MzsJCQkJCQkgIFNLQl9HU09fR1JFX0NTVU0gfAomIzQzOwkJCQkJCSAgU0tCX0dTT19JUFhJUDQgfAomIzQzOwkJCQkJCSAgU0tCX0dTT19JUFhJUDYgfAomIzQzOwkJCQkJCSAgU0tCX0dTT19FU1ApKSkKJiM0MzsJCQkJaWYgKHNrYi0mZ3Q7ZW5jYXBzdWxhdGlvbikKJiM0MzsJCQkJCXNrYi0mZ3Q7ZW5jYXBzdWxhdGlvbiA9IDA7CiYjNDM7CQl9CiYjNDM7CiAJCS8qIEhlYWRlciBtdXN0IGJlIGNoZWNrZWQsIGFuZCBnc29fc2VncyByZWNvbXB1dGVkLiAqLwogCQlzaGluZm8tJmd0O2dzb190eXBlIHw9IFNLQl9HU09fRE9ER1k7CiAJCXNoaW5mby0mZ3Q7Z3NvX3NlZ3MgPSAwOwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogRm9yIG5vbi1HU08gcGFja2V0cywgY2xlYXIgZW5jYXBzdWxhdGlvbiBpZiBkZWNhcCBmbGFncyBhcmUgc2V0ICovCiYjNDM7CQlpZiAoKGZsYWdzICZhbXA7IChCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLIHwKJiM0MzsJCQkgICAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKSkgJmFtcDsmYW1wOwomIzQzOwkJICAgIHNrYi0mZ3Q7ZW5jYXBzdWxhdGlvbikKJiM0MzsJCQlza2ItJmd0O2VuY2Fwc3VsYXRpb24gPSAwOwogCX0KIAogCXJldHVybiAwOwpAQCAtMzgwMiw4ICYjNDM7Mzg1NSw3IEBAIEJQRl9DQUxMXzQoYnBmX3NrYl9hZGp1c3Rfcm9vbSwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBzMzIsIGxlbl9kaWZmLAogCXUzMiBvZmY7CiAJaW50IHJldDsKIAotCWlmICh1bmxpa2VseShmbGFncyAmYW1wOyB+KEJQRl9GX0FESl9ST09NX01BU0sgfAotCQkJICAgICAgIEJQRl9GX0FESl9ST09NX05PX0NTVU1fUkVTRVQpKSkKJiM0MzsJaWYgKHVubGlrZWx5KGZsYWdzICZhbXA7IH5CUEZfRl9BREpfUk9PTV9NQVNLKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKHVubGlrZWx5KGxlbl9kaWZmX2FicyAmZ3Q7IDB4ZmZmVSkpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMzgyMiwyMCAmIzQzOzM4NzQsNTMgQEAgQlBGX0NBTExfNChicGZfc2tiX2FkanVzdF9yb29tLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHMzMiwgbGVuX2RpZmYsCiAJCXJldHVybiAtRU5PVFNVUFA7CiAJfQogCi0JaWYgKGZsYWdzICZhbXA7IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX01BU0spIHsKJiM0MzsJaWYgKGZsYWdzICZhbXA7IEJQRl9GX0FESl9ST09NX0RFQ0FQX01BU0spIHsKJiM0MzsJCXUzMiBsZW5fZGVjYXBfbWluID0gMDsKJiM0MzsKIAkJaWYgKCFzaHJpbmspCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlzd2l0Y2ggKGZsYWdzICZhbXA7IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX01BU0spIHsKLQkJY2FzZSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0OgomIzQzOwkJLyogUmVqZWN0IG11dHVhbGx5IGV4Y2x1c2l2ZSBkZWNhcCBmbGFnIHBhaXJzLiAqLwomIzQzOwkJaWYgKChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19NQVNLKSA9PQomIzQzOwkJICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX01BU0spCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQlpZiAoKGZsYWdzICZhbXA7IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X01BU0spID09CiYjNDM7CQkgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSykKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCWlmICgoZmxhZ3MgJmFtcDsgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTSykgPT0KJiM0MzsJCSAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJLyogUmVqZWN0IG11dHVhbGx5IGV4Y2x1c2l2ZSBkZWNhcCB0dW5uZWwgdHlwZSBmbGFncy4gKi8KJiM0MzsJCWlmICgoZmxhZ3MgJmFtcDsgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSykgJmFtcDsmYW1wOwomIzQzOwkJICAgIChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCWlmIChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLKQomIzQzOwkJCWxlbl9kZWNhcF9taW4gJiM0Mzs9IGJwZl9za2JfbmV0X2Jhc2VfbGVuKHNrYik7CiYjNDM7CiYjNDM7CQlpZiAoZmxhZ3MgJmFtcDsgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKQomIzQzOwkJCWxlbl9kZWNhcF9taW4gJiM0Mzs9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKJiM0MzsKJiM0MzsJCWlmIChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUpCiYjNDM7CQkJbGVuX2RlY2FwX21pbiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBncmVfYmFzZV9oZHIpOwomIzQzOwomIzQzOwkJaWYgKGZsYWdzICZhbXA7IEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCkKJiM0MzsJCQlsZW5fZGVjYXBfbWluICYjNDM7PSBzaXplb2Yoc3RydWN0IGlwaGRyKTsKJiM0MzsKJiM0MzsJCWlmIChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYpCiYjNDM7CQkJbGVuX2RlY2FwX21pbiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKJiM0MzsKJiM0MzsJCWlmIChsZW5fZGlmZl9hYnMgJmx0OyBsZW5fZGVjYXBfbWluKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJaWYgKGZsYWdzICZhbXA7IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQpCiAJCQlsZW5fbWluID0gc2l6ZW9mKHN0cnVjdCBpcGhkcik7Ci0JCQlicmVhazsKLQkJY2FzZSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY2OgomIzQzOwomIzQzOwkJaWYgKGZsYWdzICZhbXA7IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjYpCiAJCQlsZW5fbWluID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KIAl9CiAKIAlsZW5fY3VyID0gc2tiLSZndDtsZW4gLSBza2JfbmV0d29ya19vZmZzZXQoc2tiKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaAppbmRleCBmZmQ5NmU4YjkyMGJkLi43MzJiMzVjYzA4ZDFjIDEwMDY0NAotLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCkBAIC0zMDM4LDggJiM0MzszMDM4LDM0IEBAIHVuaW9uIGJwZl9hdHRyIHsKICAqCiAgKgkJKiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQqKiwKICAqCQkgICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNioqOgotICoJCSAgSW5kaWNhdGUgdGhlIG5ldyBJUCBoZWFkZXIgdmVyc2lvbiBhZnRlciBkZWNhcHN1bGF0aW5nIHRoZSBvdXRlcgotICoJCSAgSVAgaGVhZGVyLiBVc2VkIHdoZW4gdGhlIGlubmVyIGFuZCBvdXRlciBJUCB2ZXJzaW9ucyBhcmUgZGlmZmVyZW50LgomIzQzOyAqCQkgIEluZGljYXRlIHRoZSBuZXcgSVAgaGVhZGVyIHZlcnNpb24gYWZ0ZXIgZGVjYXBzdWxhdGluZyB0aGUKJiM0MzsgKgkJICBvdXRlciBJUCBoZWFkZXIuIFVzZWQgd2hlbiB0aGUgaW5uZXIgYW5kIG91dGVyIElQIHZlcnNpb25zCiYjNDM7ICoJCSAgYXJlIGRpZmZlcmVudC4gVGhlc2UgZmxhZ3Mgb25seSB0cmlnZ2VyIGEgcHJvdG9jb2wgY2hhbmdlCiYjNDM7ICoJCSAgd2l0aG91dCBjbGVhcmluZyBhbnkgdHVubmVsLXNwZWNpZmljIEdTTyBmbGFncy4KJiM0MzsgKgomIzQzOyAqCQkqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFKio6CiYjNDM7ICoJCSAgQ2xlYXIgR1JFIHR1bm5lbCBHU08gZmxhZ3MgKFNLQl9HU09fR1JFIGFuZCBTS0JfR1NPX0dSRV9DU1VNKQomIzQzOyAqCQkgIHdoZW4gZGVjYXBzdWxhdGluZyBhIEdSRSB0dW5uZWwuCiYjNDM7ICoKJiM0MzsgKgkJKiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCoqOgomIzQzOyAqCQkgIENsZWFyIFVEUCB0dW5uZWwgR1NPIGZsYWdzIChTS0JfR1NPX1VEUF9UVU5ORUwgYW5kCiYjNDM7ICoJCSAgU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0pIHdoZW4gZGVjYXBzdWxhdGluZyBhIFVEUCB0dW5uZWwuCiYjNDM7ICoKJiM0MzsgKgkJKiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCoqOgomIzQzOyAqCQkgIENsZWFyIElQSVAvU0lUIHR1bm5lbCBHU08gZmxhZyAoU0tCX0dTT19JUFhJUDQpIHdoZW4gZGVjYXBzdWxhdGluZwomIzQzOyAqCQkgIGEgdHVubmVsIHdpdGggYW4gb3V0ZXIgSVB2NCBoZWFkZXIgKElQdjQtaW4tSVB2NCBvciBJUHY2LWluLUlQdjQpLgomIzQzOyAqCiYjNDM7ICoJCSogKipCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYqKjoKJiM0MzsgKgkJICBDbGVhciBJUHY2IGVuY2Fwc3VsYXRpb24gdHVubmVsIEdTTyBmbGFnIChTS0JfR1NPX0lQWElQNikgd2hlbgomIzQzOyAqCQkgIGRlY2Fwc3VsYXRpbmcgYSB0dW5uZWwgd2l0aCBhbiBvdXRlciBJUHY2IGhlYWRlciAoSVB2Ni1pbi1JUHY2CiYjNDM7ICoJCSAgb3IgSVB2NC1pbi1JUHY2KS4KJiM0MzsgKgomIzQzOyAqCQlXaGVuIHVzaW5nIHRoZSBkZWNhcHN1bGF0aW9uIGZsYWdzIGFib3ZlLCB0aGUgc2tiLSZndDtlbmNhcHN1bGF0aW9uCiYjNDM7ICoJCWZsYWcgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkIGlmIGFsbCB0dW5uZWwtc3BlY2lmaWMgR1NPIGZsYWdzCiYjNDM7ICoJCShTS0JfR1NPX1VEUF9UVU5ORUwsIFNLQl9HU09fVURQX1RVTk5FTF9DU1VNLCBTS0JfR1NPX0dSRSwKJiM0MzsgKgkJU0tCX0dTT19HUkVfQ1NVTSwgU0tCX0dTT19JUFhJUDQsIFNLQl9HU09fSVBYSVA2KSBoYXZlIGJlZW4KJiM0MzsgKgkJcmVtb3ZlZCBmcm9tIHRoZSBwYWNrZXQuIFRoaXMgaGFuZGxlcyBjYXNlcyB3aGVyZSBhbGwgdHVubmVsCiYjNDM7ICoJCWxheWVycyBoYXZlIGJlZW4gZGVjYXBzdWxhdGVkLgogICoKICAqIAkJQSBjYWxsIHRvIHRoaXMgaGVscGVyIGlzIHN1c2NlcHRpYmxlIHRvIGNoYW5nZSB0aGUgdW5kZXJseWluZwogICogCQlwYWNrZXQgYnVmZmVyLiBUaGVyZWZvcmUsIGF0IGxvYWQgdGltZSwgYWxsIGNoZWNrcyBvbiBwb2ludGVycwpAQCAtNjI4Myw3ICYjNDM7NjMwOSw3IEBAIGVudW0gewogfTsKIAogLyogQlBGX0ZVTkNfc2tiX2FkanVzdF9yb29tIGZsYWdzLiAqLwotZW51bSB7CiYjNDM7ZW51bSBicGZfYWRqX3Jvb21fZmxhZ3MgewogCUJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTwk9ICgxVUxMICZsdDsmbHQ7IDApLAogCUJQRl9GX0FESl9ST09NX0VOQ0FQX0wzX0lQVjQJPSAoMVVMTCAmbHQ7Jmx0OyAxKSwKIAlCUEZfRl9BREpfUk9PTV9FTkNBUF9MM19JUFY2CT0gKDFVTEwgJmx0OyZsdDsgMiksCkBAIC02MjkzLDYgJiM0Mzs2MzE5LDEwIEBAIGVudW0gewogCUJQRl9GX0FESl9ST09NX0VOQ0FQX0wyX0VUSAk9ICgxVUxMICZsdDsmbHQ7IDYpLAogCUJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQJPSAoMVVMTCAmbHQ7Jmx0OyA3KSwKIAlCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY2CT0gKDFVTEwgJmx0OyZsdDsgOCksCiYjNDM7CUJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRQk9ICgxVUxMICZsdDsmbHQ7IDkpLAomIzQzOwlCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9VRFAJPSAoMVVMTCAmbHQ7Jmx0OyAxMCksCiYjNDM7CUJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNAk9ICgxVUxMICZsdDsmbHQ7IDExKSwKJiM0MzsJQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2CT0gKDFVTEwgJmx0OyZsdDsgMTIpLAogfTsKIAogZW51bSB7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3RjX3R1bm5lbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF90Y190dW5uZWwuYwppbmRleCAxYWE3Yzk0NjM5ODBiLi42N2JhMjdkNjkzNDc0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3RjX3R1bm5lbC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfdGNfdHVubmVsLmMKQEAgLTQzOCw3ICYjNDM7NDM4LDYgQEAgc3RhdGljIGludCBzZXR1cCh2b2lkKQogCVNZUyhmYWlsX2Nsb3NlX25zX2NsaWVudCwgJiMzNDtpcCBsaW5rIGFkZCAlcyB0eXBlIHZldGggcGVlciBuYW1lICVzJiMzNDssCiAJICAgICYjMzQ7dmV0aDEgbXR1IDE1MDAgbmV0bnMgJiMzNDsgQ0xJRU5UX05TICYjMzQ7IGFkZHJlc3MgJiMzNDsgTUFDX0FERFJfVkVUSDEsCiAJICAgICYjMzQ7dmV0aDIgbXR1IDE1MDAgbmV0bnMgJiMzNDsgU0VSVkVSX05TICYjMzQ7IGFkZHJlc3MgJiMzNDsgTUFDX0FERFJfVkVUSDIpOwotCVNZUyhmYWlsX2Nsb3NlX25zX2NsaWVudCwgJiMzNDtldGh0b29sIC1LIHZldGgxIHRzbyBvZmYmIzM0Oyk7CiAJU1lTKGZhaWxfY2xvc2VfbnNfY2xpZW50LCAmIzM0O2lwIGxpbmsgc2V0IHZldGgxIHVwJiMzNDspOwogCW5zdG9rZW5fc2VydmVyID0gb3Blbl9uZXRucyhTRVJWRVJfTlMpOwogCWlmICghQVNTRVJUX09LX1BUUihuc3Rva2VuX3NlcnZlciwgJiMzNDtvcGVuIHNlcnZlciBucyYjMzQ7KSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3R1bm5lbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfdHVubmVsLmMKaW5kZXggNzM3NmRmNDA1YTZiZS4uODUzYmNhOTYyOTEwMyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfdHVubmVsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfdHVubmVsLmMKQEAgLTYsNiAmIzQzOzYsNyBAQAogCiAjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YnBmL2JwZl9lbmRpYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9jb3JlX3JlYWQuaCZndDsKICNpbmNsdWRlICYjMzQ7YnBmX3RyYWNpbmdfbmV0LmgmIzM0OwogI2luY2x1ZGUgJiMzNDticGZfY29tcGlsZXIuaCYjMzQ7CiAKQEAgLTM3LDYgJiM0MzszOCwyMiBAQCBzdHJ1Y3QgdnhsYW5oZHJfX19sb2NhbCB7CiAKICNkZWZpbmUJRVhUUFJPVE9fVlhMQU4JMHgxCiAKJiM0MzsjZGVmaW5lIFNLQl9HU09fVURQX1RVTk5FTF9NQVNLCShTS0JfR1NPX1VEUF9UVU5ORUwgfAkJCVwKJiM0MzsJCQkJIFNLQl9HU09fVURQX1RVTk5FTF9DU1VNKQomIzQzOwomIzQzOyNkZWZpbmUgU0tCX0dTT19UVU5ORUxfTUFTSwkoU0tCX0dTT19VRFBfVFVOTkVMX01BU0sgfAkJXAomIzQzOwkJCQkgU0tCX0dTT19HUkUgfAkJCQlcCiYjNDM7CQkJCSBTS0JfR1NPX0dSRV9DU1VNIHwJCQlcCiYjNDM7CQkJCSBTS0JfR1NPX0lQWElQNCB8CQkJXAomIzQzOwkJCQkgU0tCX0dTT19JUFhJUDYgfAkJCVwKJiM0MzsJCQkJIFNLQl9HU09fRVNQKQomIzQzOwomIzQzOyNkZWZpbmUgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSwkoQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQIHwJXAomIzQzOwkJCQkJIEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRSkKJiM0MzsKJiM0MzsjZGVmaW5lIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0sJKEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCB8CVwKJiM0MzsJCQkJCSBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYpCiYjNDM7CiAjZGVmaW5lCVZYTEFOX0ZMQUdTICAgICBicGZfaHRvbmwoMSZsdDsmbHQ7MjcpCiAjZGVmaW5lCVZOSV9JRAkJMQogI2RlZmluZQlWWExBTl9WTkkJYnBmX2h0b25sKFZOSV9JRCAmbHQ7Jmx0OyA4KQpAQCAtNTg5LDkgJiM0Mzs2MDYsMTIgQEAgaW50IF9fZW5jYXBfaXA2dnhsYW5fZXRoKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKIAkJcmV0dXJuIFRDX0FDVF9PSzsKIH0KIAotc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8pCiYjNDM7c3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8sCiYjNDM7CQkJICBfX3U2NCBpcHhpcF9mbGFnKQogewogCV9fdTY0IGZsYWdzID0gQlBGX0ZfQURKX1JPT01fRklYRURfR1NPOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqa3NrYjsKJiM0MzsJc3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2hpbmZvOwogCXN0cnVjdCBpcHY2X29wdF9oZHIgaXA2X29wdF9oZHI7CiAJc3RydWN0IGdyZV9oZHIgZ3JlaDsKIAlzdHJ1Y3QgdWRwaGRyIHVkcGg7CkBAIC01OTksMTAgJiM0Mzs2MTksMTIgQEAgc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8pCiAKIAlzd2l0Y2ggKHByb3RvKSB7CiAJY2FzZSBJUFBST1RPX0lQSVA6Ci0JCWZsYWdzIHw9IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQ7CiYjNDM7CQlmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0IHwKJiM0MzsJCQkgaXB4aXBfZmxhZzsKIAkJYnJlYWs7CiAJY2FzZSBJUFBST1RPX0lQVjY6Ci0JCWZsYWdzIHw9IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjY7CiYjNDM7CQlmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY2IHwKJiM0MzsJCQkgaXB4aXBfZmxhZzsKIAkJYnJlYWs7CiAJY2FzZSBORVhUSERSX0RFU1Q6CiAJCWlmIChicGZfc2tiX2xvYWRfYnl0ZXMoc2tiLCBvZmYgJiM0MzsgbGVuLCAmYW1wO2lwNl9vcHRfaGRyLApAQCAtNjEwLDEwICYjNDM7NjMyLDEyIEBAIHN0YXRpYyBpbnQgZGVjYXBfaW50ZXJuYWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiLCBpbnQgb2ZmLCBpbnQgbGVuLCBjaGFyIHByb3RvKQogCQkJcmV0dXJuIFRDX0FDVF9PSzsKIAkJc3dpdGNoIChpcDZfb3B0X2hkci5uZXh0aGRyKSB7CiAJCWNhc2UgSVBQUk9UT19JUElQOgotCQkJZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNDsKJiM0MzsJCQlmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0IHwKJiM0MzsJCQkJIGlweGlwX2ZsYWc7CiAJCQlicmVhazsKIAkJY2FzZSBJUFBST1RPX0lQVjY6Ci0JCQlmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY2OwomIzQzOwkJCWZsYWdzIHw9IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjYgfAomIzQzOwkJCQkgaXB4aXBfZmxhZzsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcmV0dXJuIFRDX0FDVF9PSzsKQEAgLTYyMSw2ICYjNDM7NjQ1LDExIEBAIHN0YXRpYyBpbnQgZGVjYXBfaW50ZXJuYWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiLCBpbnQgb2ZmLCBpbnQgbGVuLCBjaGFyIHByb3RvKQogCQlicmVhazsKIAljYXNlIElQUFJPVE9fR1JFOgogCQlvbGVuICYjNDM7PSBzaXplb2Yoc3RydWN0IGdyZV9oZHIpOwomIzQzOwkJaWYgKCFicGZfY29yZV9lbnVtX3ZhbHVlX2V4aXN0cyhlbnVtIGJwZl9hZGpfcm9vbV9mbGFncywKJiM0MzsJCQkJCQlCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUpKQomIzQzOwkJCXJldHVybiBUQ19BQ1RfU0hPVDsKJiM0MzsJCWZsYWdzIHw9IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRTsKJiM0MzsKIAkJaWYgKGJwZl9za2JfbG9hZF9ieXRlcyhza2IsIG9mZiAmIzQzOyBsZW4sICZhbXA7Z3JlaCwgc2l6ZW9mKGdyZWgpKSAmbHQ7IDApCiAJCQlyZXR1cm4gVENfQUNUX09LOwogCQlzd2l0Y2ggKGJwZl9udG9ocyhncmVoLnByb3RvY29sKSkgewpAQCAtNjM0LDYgJiM0Mzs2NjMsMTAgQEAgc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8pCiAJCWJyZWFrOwogCWNhc2UgSVBQUk9UT19VRFA6CiAJCW9sZW4gJiM0Mzs9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKJiM0MzsJCWlmICghYnBmX2NvcmVfZW51bV92YWx1ZV9leGlzdHMoZW51bSBicGZfYWRqX3Jvb21fZmxhZ3MsCiYjNDM7CQkJCQkJQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKSkKJiM0MzsJCQlyZXR1cm4gVENfQUNUX1NIT1Q7CiYjNDM7CQlmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9VRFA7CiAJCWlmIChicGZfc2tiX2xvYWRfYnl0ZXMoc2tiLCBvZmYgJiM0MzsgbGVuLCAmYW1wO3VkcGgsIHNpemVvZih1ZHBoKSkgJmx0OyAwKQogCQkJcmV0dXJuIFRDX0FDVF9PSzsKIAkJc3dpdGNoIChicGZfbnRvaHModWRwaC5kZXN0KSkgewpAQCAtNjU1LDYgJiM0Mzs2ODgsNDAgQEAgc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8pCiAJaWYgKGJwZl9za2JfYWRqdXN0X3Jvb20oc2tiLCAtb2xlbiwgQlBGX0FESl9ST09NX01BQywgZmxhZ3MpKQogCQlyZXR1cm4gVENfQUNUX1NIT1Q7CiAKJiM0MzsJa3NrYiA9IGJwZl9jYXN0X3RvX2tlcm5fY3R4KHNrYik7CiYjNDM7CXNoaW5mbyA9IGJwZl9jb3JlX2Nhc3Qoa3NrYi0mZ3Q7aGVhZCAmIzQzOyBrc2tiLSZndDtlbmQsIHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pOwomIzQzOwlpZiAoc2hpbmZvLSZndDtnc29fc2l6ZSkgewomIzQzOwkJaWYgKChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9VRFApICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoc2hpbmZvLSZndDtnc29fdHlwZSAmYW1wOyBTS0JfR1NPX1VEUF9UVU5ORUxfTUFTSykpCiYjNDM7CQkJcmV0dXJuIFRDX0FDVF9TSE9UOwomIzQzOwomIzQzOwkJaWYgKChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoc2hpbmZvLSZndDtnc29fdHlwZSAmYW1wOyAoU0tCX0dTT19HUkUgfCBTS0JfR1NPX0dSRV9DU1VNKSkpCiYjNDM7CQkJcmV0dXJuIFRDX0FDVF9TSE9UOwomIzQzOwomIzQzOwkJaWYgKChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDQpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoc2hpbmZvLSZndDtnc29fdHlwZSAmYW1wOyBTS0JfR1NPX0lQWElQNCkpCiYjNDM7CQkJcmV0dXJuIFRDX0FDVF9TSE9UOwomIzQzOwomIzQzOwkJaWYgKChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoc2hpbmZvLSZndDtnc29fdHlwZSAmYW1wOyBTS0JfR1NPX0lQWElQNikpCiYjNDM7CQkJcmV0dXJuIFRDX0FDVF9TSE9UOwomIzQzOwomIzQzOwkJaWYgKGZsYWdzICZhbXA7IChCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLIHwKJiM0MzsJCQkgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0spKSB7CiYjNDM7CQkJaWYgKChzaGluZm8tJmd0O2dzb190eXBlICZhbXA7IFNLQl9HU09fVFVOTkVMX01BU0spICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgIWtza2ItJmd0O2VuY2Fwc3VsYXRpb24pCiYjNDM7CQkJCXJldHVybiBUQ19BQ1RfU0hPVDsKJiM0MzsJCQlpZiAoIShzaGluZm8tJmd0O2dzb190eXBlICZhbXA7IFNLQl9HU09fVFVOTkVMX01BU0spICZhbXA7JmFtcDsKJiM0MzsJCQkgICAga3NrYi0mZ3Q7ZW5jYXBzdWxhdGlvbikKJiM0MzsJCQkJcmV0dXJuIFRDX0FDVF9TSE9UOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgaWYgKChmbGFncyAmYW1wOyAoQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSyB8CiYjNDM7CQkJICAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKSkgJmFtcDsmYW1wOwomIzQzOwkJICAga3NrYi0mZ3Q7ZW5jYXBzdWxhdGlvbikgewomIzQzOwkJcmV0dXJuIFRDX0FDVF9TSE9UOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIFRDX0FDVF9PSzsKIH0KIApAQCAtNjYyLDYgJiM0Mzs3MjksMTAgQEAgc3RhdGljIGludCBkZWNhcF9pcHY0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaXBoZHIgaXBoX291dGVyOwogCiYjNDM7CWlmICghYnBmX2NvcmVfZW51bV92YWx1ZV9leGlzdHMoZW51bSBicGZfYWRqX3Jvb21fZmxhZ3MsCiYjNDM7CQkJCQlCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDQpKQomIzQzOwkJcmV0dXJuIFRDX0FDVF9TSE9UOwomIzQzOwogCWlmIChicGZfc2tiX2xvYWRfYnl0ZXMoc2tiLCBFVEhfSExFTiwgJmFtcDtpcGhfb3V0ZXIsCiAJCQkgICAgICAgc2l6ZW9mKGlwaF9vdXRlcikpICZsdDsgMCkKIAkJcmV0dXJuIFRDX0FDVF9PSzsKQEAgLTY3MCwxOSAmIzQzOzc0MSwyNSBAQCBzdGF0aWMgaW50IGRlY2FwX2lwdjQoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQogCQlyZXR1cm4gVENfQUNUX09LOwogCiAJcmV0dXJuIGRlY2FwX2ludGVybmFsKHNrYiwgRVRIX0hMRU4sIHNpemVvZihpcGhfb3V0ZXIpLAotCQkJICAgICAgaXBoX291dGVyLnByb3RvY29sKTsKJiM0MzsJCQkgICAgICBpcGhfb3V0ZXIucHJvdG9jb2wsCiYjNDM7CQkJICAgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0KTsKIH0KIAogc3RhdGljIGludCBkZWNhcF9pcHY2KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaXB2NmhkciBpcGhfb3V0ZXI7CiAKJiM0MzsJaWYgKCFicGZfY29yZV9lbnVtX3ZhbHVlX2V4aXN0cyhlbnVtIGJwZl9hZGpfcm9vbV9mbGFncywKJiM0MzsJCQkJCUJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNikpCiYjNDM7CQlyZXR1cm4gVENfQUNUX1NIT1Q7CiYjNDM7CiAJaWYgKGJwZl9za2JfbG9hZF9ieXRlcyhza2IsIEVUSF9ITEVOLCAmYW1wO2lwaF9vdXRlciwKIAkJCSAgICAgICBzaXplb2YoaXBoX291dGVyKSkgJmx0OyAwKQogCQlyZXR1cm4gVENfQUNUX09LOwogCiAJcmV0dXJuIGRlY2FwX2ludGVybmFsKHNrYiwgRVRIX0hMRU4sIHNpemVvZihpcGhfb3V0ZXIpLAotCQkJICAgICAgaXBoX291dGVyLm5leHRoZHIpOwomIzQzOwkJCSAgICAgIGlwaF9vdXRlci5uZXh0aGRyLAomIzQzOwkJCSAgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNik7CiB9CiAKIFNFQygmIzM0O3RjJiMzNDspCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjI5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldyBCUEYgUGF0Y2gqKgoKT2theSwgc28gd2UgaGF2ZSB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBzb21lIG5ldyBmbGFncyBmb3IgYGJwZl9za2JfYWRqdXN0X3Jvb21gOiBgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFYCwgYEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUGAsIGBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDRgLCBhbmQgYEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNmAuIEl0IHNlZW1zIHRoZXNlIGFyZSBzcGVjaWZpY2FsbHkgZm9yIGNsZWFyaW5nIHR1bm5lbC1yZWxhdGVkIEdTTyBmbGFncyBkdXJpbmcgZGVjYXBzdWxhdGlvbi4gU3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgdGhlIGdvYWwgaXMgY2xlYXIuCgpUaGUgcGF0Y2ggdG91Y2hlcyBgYnBmX3NrYl9uZXRfc2hyaW5rYCBhbmQgYGJwZl9za2JfYWRqdXN0X3Jvb21gIHdpdGhpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBUaGF0JiMzOTtzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgQlBGIG5ldHdvcmtpbmcgY29yZSwgd2hpY2ggaW5zdGFudGx5IHJhaXNlcyBhIGZsYWcuIEl0JiMzOTtzIGRlZmluaXRlbHkgaW4gYSBob3QgcGF0aCBhbmQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFdlIGFic29sdXRlbHkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyByb2NrIHNvbGlkLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBleGFjdCBjYWxsIHBvaW50cy4gYGJwZl9za2JfYWRqdXN0X3Jvb21gIGlzIGEgQlBGIGhlbHBlciwgc28gaXQmIzM5O3MgaW52b2tlZCBieSBCUEYgcHJvZ3JhbXMsIHdoaWNoIG1lYW5zIHRoZSBoZWxwZXIgZnVuY3Rpb24gaXRzZWxmLCBpLmUuLCBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgKEJQRl9DQUxMXzQpLCBpcyB0aGUgdGFyZ2V0LiBIYW5nIG9uLCBhcmVuJiMzOTt0IEJQRiBoZWxwZXJzIHVzdWFsbHkgZGVjbGFyZWQgc3RhdGljYWxseSBvciB2aWEgbWFjcm9zPyBHb29kIHByYWN0aWNlIHNheXMgY2hlY2sgdGhlIHNvdXJjZS4gSSBuZWVkIHRvIGJlIHN1cmUgd2hlcmUgYGJwZl9za2JfYWRqdXN0X3Jvb21gIGlzIGFjdHVhbGx5IGRlZmluZWQgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc2tiX2FkanVzdF9yb29tJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MjA5Mz1CUEZfQ0FMTF8yKGJwZl9jc3VtX2xldmVsLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHU2NCwgbGV2ZWwpXG5uZXQvY29yZS9maWx0ZXIuYy0yMDk0LXtcbm5ldC9jb3JlL2ZpbHRlci5jOjIwOTU6XHQvKiBUaGUgaW50ZXJmYWNlIGlzIHRvIGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBicGZfc2tiX2FkanVzdF9yb29tKClcbm5ldC9jb3JlL2ZpbHRlci5jLTIwOTYtXHQgKiBmb3IgZW5jYXAvZGVjYXAgb2YgcGFja2V0IGhlYWRlcnMgd2hlbiBCUEZfRl9BREpfUk9PTV9OT19DU1VNX1JFU0VUXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MzgzNz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIHNrX3NrYl9hZGp1c3Rfcm9vbV9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0zODQ2LVxubmV0L2NvcmUvZmlsdGVyLmM6Mzg0NzpCUEZfQ0FMTF80KGJwZl9za2JfYWRqdXN0X3Jvb20sIHN0cnVjdCBza19idWZmICosIHNrYiwgczMyLCBsZW5fZGlmZixcbm5ldC9jb3JlL2ZpbHRlci5jLTM4NDgtXHQgICB1MzIsIG1vZGUsIHU2NCwgZmxhZ3MpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzk0MS1cbm5ldC9jb3JlL2ZpbHRlci5jOjM5NDI6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2FkanVzdF9yb29tX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6Mzk0MzpcdC5mdW5jXHRcdD0gYnBmX3NrYl9hZGp1c3Rfcm9vbSxcbm5ldC9jb3JlL2ZpbHRlci5jLTM5NDQtXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODYzNj10Y19jbHNfYWN0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODY2OS1cdGNhc2UgQlBGX0ZVTkNfc2tiX2FkanVzdF9yb29tOlxubmV0L2NvcmUvZmlsdGVyLmM6ODY3MDpcdFx0cmV0dXJuIFx1MDAyNmJwZl9za2JfYWRqdXN0X3Jvb21fcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYy04NjcxLVx0Y2FzZSBCUEZfRlVOQ19za2JfY2hhbmdlX3RhaWw6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MDUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gdGhlIGBicGZfc2tiX2FkanVzdF9yb29tYCBGdW5jdGlvbioqCgpSaWdodCwgc28gSSBzZWUgYSBmdW5jdGlvbiBkZWZpbml0aW9uOiBgQlBGX0NBTExfNChicGZfc2tiX2FkanVzdF9yb29tLCAuLi4pYC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIE5vdywga25vd2luZyBob3cgdGhpbmdzIGFyZSBpbiB0aGUga2VybmVsLCB0aGUgYWN0dWFsIGV4cG9ydGVkIHN5bWJvbCBJJiMzOTttIGxpa2VseSB0byBzZWUgd2hlbiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIHNvdXJjZSBjb2RlIG1pZ2h0IGJlIGBfX19fYnBmX3NrYl9hZGp1c3Rfcm9vbWAgb3IganVzdCBwbGFpbiBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAuIFRoZSBuYW1pbmcgY29udmVudGlvbnMgYXJlIHVzdWFsbHkgZmFpcmx5IHByZWRpY3RhYmxlLCBzbyB0aGF0JiMzOTtzIGEgZ29vZCBhc3N1bXB0aW9uIHRvIGhhdmUuCgpUaGUgbmV4dCBsb2dpY2FsIHN0ZXAsIGJlZm9yZSBJIGRpZyBhbnkgZGVlcGVyIGludG8gdGhlIGZ1bmN0aW9uIGl0c2VsZiwgaXMgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIGNoZWNrIGV4YWN0bHkgKmhvdyogYEJQRl9DQUxMXzRgIGlzIGRlZmluZWQuIFVuZGVyc3RhbmRpbmcgdGhhdCBtYWNybyB3aWxsIGdpdmUgbWUgdml0YWwgY29udGV4dDogd2hhdCBpdCBleHBhbmRzIHRvLCBob3cgdGhlIGFyZ3VtZW50cyBhcmUgcGFzc2VkLCBhbmQgdWx0aW1hdGVseSBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgQlBGIGluZnJhc3RydWN0dXJlLiBLbm93aW5nIHRoZSBtYWNybyBkZWZpbml0aW9uIGlzIGtleSB0byB1bnBhY2tpbmcgdGhlIHdob2xlIHRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmaW5lIEJQRl9DQUxMXzQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc1MQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwmIzM5O3MgQlBGIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IG15IGJlYXJpbmdzLiBHaXZlbiB3aGF0IEkmIzM5O20gd29ya2luZyBvbiwgSSBrbm93IHRoZSBjcnVjaWFsIGRlZmluaXRpb25zIGFuZCBzdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gQmVya2VsZXkgUGFja2V0IEZpbHRlciAoQlBGKSBhcmUgZ29pbmcgdG8gYmUgaW4gb25lIG9mIHR3byBwbGFjZXMsIG1vc3QgbGlrZWx5LiBNeSBmaXJzdCBzdG9wIGhhcyB0byBiZSBlaXRoZXIgYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgIG9yLCBwZXJoYXBzIG1vcmUgZGlyZWN0bHksIGBpbmNsdWRlL2xpbnV4L2JwZi5oYC4gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aG9zZSBoZWFkZXJzLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCB0cmVhc3VyZXMgYXdhaXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmaW5lIEJQRl9DQUxMXzQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTQwOT1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX2F0b21pY19pc19sb2FkX2FjcShjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02NTgtI2RlZmluZSBCUEZfQ0FMTF8zKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMywgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2NTk6I2RlZmluZSBCUEZfQ0FMTF80KG5hbWUsIC4uLilcdEJQRl9DQUxMX3goNCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02NjAtI2RlZmluZSBCUEZfQ0FMTF81KG5hbWUsIC4uLilcdEJQRl9DQUxMX3goNSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTEzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgJiMzNDtMZXQmIzM5O3Mgc2VlIGBCUEZfQ0FMTF94YCwmIzM0OyBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBhbiBleHBlcnQgaW4gYSByZWxldmFudCBmaWVsZCAoYXNzdW1pbmcgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgQlBGIGluIGEgbmV0d29ya2luZyBvciBzeXN0ZW1zIGNvbnRleHQpOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIENvcmUqKgoKUmlnaHQsIGBCUEZfQ0FMTF94YC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIEJQRiBoZWxwZXIgZnVuY3Rpb24gY2FsbC4gVGhlIGBCUEZfQ0FMTF9gIHByZWZpeCBpcyBhIGRlYWQgZ2l2ZWF3YXkuIFRoZSAmIzM0O3gmIzM0OyBpcyB0aGUgY3J1Y2lhbCBwYXJ0LCBvZiBjb3Vyc2UuIEl0IHNpZ25pZmllcyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBzcGVjaWZpYyBoZWxwZXIsIGxpa2VseSBvbmUgdGhhdCYjMzk7cyBiZWVuIGNvbXBpbGVkIGluLgoKTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgcnVubmluZyB0aHJvdWdoIHRoZSBwb3NzaWJpbGl0aWVzLiBXaGF0JiMzOTtzIHRoZSBjb250ZXh0PyBXaGF0JiMzOTtzIHRoZSBwcm9ncmFtIHR5cGU/IElzIHRoaXMgYSB0cmFjZXBvaW50LCBhIHNvY2tldCBmaWx0ZXIsIGEgWERQIHByb2dyYW0sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgdHlwZSBvZiBwcm9ncmFtIHdpbGwgZ3JlYXRseSBpbmZsdWVuY2UgdGhlIGF2YWlsYWJsZSBoZWxwZXIgZnVuY3Rpb25zIGFuZCB0aGUgcmVnaXN0ZXJzIEkgaGF2ZSBhdCBteSBkaXNwb3NhbC4KCkkmIzM5O20gcHJvYmFibHkgZ29pbmcgdG8gbmVlZCB0byBsb29rIHVwIGBCUEZfQ0FMTF94YCBpbiB0aGUga2VybmVsIGRvY3VtZW50YXRpb24gb3IgdGhlIHJlbGV2YW50IGhlYWRlcnMgdG8gbmFpbCBkb3duIHRoZSBleGFjdCBmdW5jdGlvbi4gS25vd2luZyAqd2hpY2gqIGBCUEZfQ0FMTF9gIHdlJiMzOTtyZSBsb29raW5nIGF0IGlzIHRoZSBrZXkuIFRoZSAqeCogdGVsbHMgbWUgd2hpY2ggb25lIHRvIGNoZWNrLCBhbmQgYWxzbyB3aGF0IGFyZ3VtZW50cyBpdCB0YWtlcywgYW5kIHdoYXQgaXRzIHJldHVybiB2YWx1ZSBpcy4gSXMgaXQgYSBoZWxwZXIgZm9yIHJlYWRpbmcgYSBwYWNrZXQmIzM5O3MgbWV0YWRhdGEsIG1hbmlwdWxhdGluZyBhIHNvY2tldCwgYWNjZXNzaW5nIGEgdXNlciBzcGFjZSBkYXRhIHN0cnVjdHVyZSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/CgpJJiMzOTtsbCBiZSB0aGlua2luZyBhYm91dCBwb3NzaWJsZSBlZGdlIGNhc2VzLiBEb2VzIGl0IGhhdmUgYW55IGVycm9yIGNvZGVzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSByZXR1cm4gdmFsdWU/IElzIGl0IHNhZmUgdG8gY2FsbCB0aGlzIGhlbHBlciBmcm9tIHdoZXJlIHRoaXMgcHJvZ3JhbSBpcyBydW5uaW5nPyBJZiBpdCBpcyBhIHRyYWNlcG9pbnQsIGhvdyBpcyBpdCBkZWFsaW5nIHdpdGggY29uY3VycmVuY3kgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnM/IElzIGl0IHN1YmplY3QgdG8gcHJpdmlsZWdlIGlzc3Vlcz8KCkFsc28sIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IGNvbmNlcm5zPyBXaGF0IGFyZSB0aGUgaW5wdXRzLCBhbmQgYXJlIHRoZXkgc2FuaXRpemVkPyBDYW4gaXQgYmUgZXhwbG9pdGVkIGluIHNvbWUgd2F5PyBXaGF0JiMzOTtzIHRoZSBpbXBhY3Qgb24gcGVyZm9ybWFuY2U/IEkmIzM5O2xsIGJlIHdhbnRpbmcgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgQlBGX0NBTExfeGAgYWZmZWN0cyB0aGUgb3ZlcmFsbCBCUEYgcHJvZ3JhbSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBrZXJuZWwgYW5kIHRoZSBzdXJyb3VuZGluZyBlbnZpcm9ubWVudC4gU28gbWFueSBkZXRhaWxzIHRvIHF1aWNrbHkgcmVjYWxsIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgQlBGX0NBTExfeCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9maWx0ZXIuaD00MDk9c3RhdGljIGlubGluZSBib29sIGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjQxLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2NDI6I2RlZmluZSBCUEZfQ0FMTF94KHgsIGF0dHIsIG5hbWUsIC4uLilcdFx0XHRcdFx0ICAgICAgIFxcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTY0My1cdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcdFx0XHRcdFx0XHQgICAgICAgXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3MjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipCUEYgRnVuY3Rpb24gUG9pbnRlciBNYWdpYyoqCgpBbHJpZ2h0LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLi4uIHRoZSBgQlBGX0NBTExfeGAgbWFjcm8gZmFtaWx5Li4uIHRoYXQmIzM5O3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZywgaXNuJiMzOTt0IGl0PyBJJiMzOTttIGFsbW9zdCBjZXJ0YWluIHRoYXQgd2hhdCB0aGVzZSBtYWNyb3MgYXJlIGRvaW5nIHVuZGVyIHRoZSBob29kIGlzIGdlbmVyYXRpbmcgdHdvIHRoaW5nczogYSAmIzM0O2hpZGRlbiYjMzQ7IHN5bWJvbCwgcGVyaGFwcyBuYW1lZCBzb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIGBfX19fIyNuYW1lYCAob3IgYSBzaW1pbGFyLCBjb21waWxlci1nZW5lcmF0ZWQgY29uc3RydWN0KSwgYW5kIHRoZW4sIGFsb25nc2lkZSB0aGF0LCB0aGUgaW50ZW5kZWQgYG5hbWVgIGl0c2VsZi4gVGhlICYjMzQ7aGlkZGVuJiMzNDsgbmFtZSB3b3VsZCBsaWtlbHkgYmUgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBCUEYgZnVuY3Rpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZXhhY3QgbWFuZ2xpbmcgcnVsZXMsIGJ1dCB0aGF0JiMzOTtzIHRoZSBiYXNpYyBwYXR0ZXJuIEkmIzM5O20gcmVjYWxsaW5nLCB0aGF0IHRoZSBleHBhbmRlZCBtYWNybyByZXN1bHRzIGluIHRob3NlIHR3byBwYXJ0cyBiZWluZyBjcmVhdGVkIG9yLCBtb3JlIHNwZWNpZmljYWxseSwgdGhlIG1hY3JvIGNvbnN0cnVjdHMgdGhlIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4gSSBuZWVkIHRvIHJldmlzaXQgdGhlIHByZWNpc2UgbWVjaGFuaWNzIG9mIHdoeSB0aGF04oCZcyB0aGUgd2F5IHdlIGhhbmRsZSB0aGUgZnVuY3Rpb24gY2FsbHMsIGJ1dCB0aGUgZ29hbCBpcyB0byBtYWtlIGEgd2F5IHRvIHVzZSBhIEJQRiBmdW5jdGlvbiBjYWxsIGluIHRoZSB1c2VyIHNwYWNlIGNvZGUgd2l0aCBhIGtub3duIGZ1bmN0aW9uLCB3aGlsZSBhbHNvIGRvaW5nIEJQRiB0aGluZ3MgdW5kZXIgdGhlIGhvb2QuIFNvIHRoZSBoaWRkZW4gbmFtZSBpcyB0aGUgaW50ZXJuYWwgcmVmZXJlbmNlLCBhbmQgdGhlIG1vcmUgc3RhbmRhcmQgbmFtZSBpcyB0aGUgb25lIHRoYXQmIzM5O3MgZXhwb3J0ZWQgc28gd2UgY2FuIGFjdHVhbGx5IGNhbGwgaXQgZnJvbSB1c2VyIHNwYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgQlBGX0NBTExfeCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9maWx0ZXIuaD00MDk9c3RhdGljIGlubGluZSBib29sIGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjQxLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2NDI6I2RlZmluZSBCUEZfQ0FMTF94KHgsIGF0dHIsIG5hbWUsIC4uLilcdFx0XHRcdFx0ICAgICAgIFxcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTY0My1cdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcdFx0XHRcdFx0XHQgICAgICAgXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNzQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgY3VycmVudCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGVCUEYgRmlsdGVyIFN0cnVjdHVyZXMqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIGVCUEYgZmlsdGVyIGNvbnN0cnVjdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzcGVjaWZpYyBwb2ludCDigJMgdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpbHRlciBzdHJ1Y3R1cmUgaXRzZWxmLiBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgdG8gYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNjQyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGxheW91dCBvZiB0aGlzIHN0cnVjdDogdGhlIGBzb2NrX2ZpbHRlcmAgYXJyYXkgYW5kIGl0cyBhc3NvY2lhdGVkIG1ldGFkYXRhLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRldGFpbHMgaXMgY3J1Y2lhbCB0byB0cmFjaW5nIGhvdyBmaWx0ZXIgcHJvZ3JhbXMgYXJlIHJlcHJlc2VudGVkIGluIG1lbW9yeSBhbmQgaG93IHRoZSBKSVQgY29tcGlsZXIsIG9yIGludGVycHJldGVyLCB3aWxsIHVsdGltYXRlbHkgcHJvY2VzcyB0aGVtLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHNlZWluZyBob3cgdGhlIGluc3RydWN0aW9uIHBvaW50ZXJzLCBjb25zdGFudHMgYW5kIGp1bXBzIGFyZSBlbmNvZGVkIHdpdGhpbiBlYWNoIGluc3RydWN0aW9uIG9mIHRoZSBhcnJheS4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgaW50ZXJuYWwgY29tbWVudHMgYXJlIHVwIHRvIGRhdGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9maWx0ZXIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjM1Olx0I2RlZmluZSBfX0JQRl9ERUNMX0FSR1ModCwgYSkgdCAgIGFcbiA2MzY6XHQjZGVmaW5lIF9fQlBGX0RFQ0xfUkVHUyh0LCBhKSB1NjQgYVxuIDYzNzpcdFxuIDYzODpcdCNkZWZpbmUgX19CUEZfUEFEKG4pXHRcdFx0XHRcdFx0XHQgICAgICAgXFxcbiA2Mzk6XHRcdF9fQlBGX01BUChuLCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX04sIHU2NCwgX191cl8xLCB1NjQsIF9fdXJfMiwgICAgICAgXFxcbiA2NDA6XHRcdFx0ICB1NjQsIF9fdXJfMywgdTY0LCBfX3VyXzQsIHU2NCwgX191cl81KVxuIDY0MTpcdFxuIDY0MjpcdCNkZWZpbmUgQlBGX0NBTExfeCh4LCBhdHRyLCBuYW1lLCAuLi4pXHRcdFx0XHRcdCAgICAgICBcXFxuIDY0MzpcdFx0c3RhdGljIF9fYWx3YXlzX2lubGluZVx0XHRcdFx0XHRcdCAgICAgICBcXFxuIDY0NDpcdFx0dTY0IF9fX18jI25hbWUoX19CUEZfTUFQKHgsIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfViwgX19WQV9BUkdTX18pKTsgICBcXFxuIDY0NTpcdFx0dHlwZWRlZiB1NjQgKCpidGZfIyNuYW1lKShfX0JQRl9NQVAoeCwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9WLCBfX1ZBX0FSR1NfXykpOyBcXFxuIDY0NjpcdFx0YXR0ciB1NjQgbmFtZShfX0JQRl9SRUcoeCwgX19CUEZfREVDTF9SRUdTLCBfX0JQRl9OLCBfX1ZBX0FSR1NfXykpOyAgICBcXFxuIDY0NzpcdFx0YXR0ciB1NjQgbmFtZShfX0JQRl9SRUcoeCwgX19CUEZfREVDTF9SRUdTLCBfX0JQRl9OLCBfX1ZBX0FSR1NfXykpICAgICBcXFxuIDY0ODpcdFx0e1x0XHRcdFx0XHRcdFx0XHQgICAgICAgXFxcbiA2NDk6XHRcdFx0cmV0dXJuICgoYnRmXyMjbmFtZSlfX19fIyNuYW1lKShfX0JQRl9NQVAoeCxfX0JQRl9DQVNULF9fQlBGX04sX19WQV9BUkdTX18pKTtcXFxuIDY1MDpcdFx0fVx0XHRcdFx0XHRcdFx0XHQgICAgICAgXFxcbiA2NTE6XHRcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcdFx0XHRcdFx0XHQgICAgICAgXFxcbiA2NTI6XHRcdHU2NCBfX19fIyNuYW1lKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSlcbiA2NTM6XHRcbiA2NTQ6XHQjZGVmaW5lIF9fTk9BVFRSXG4gNjU1Olx0I2RlZmluZSBCUEZfQ0FMTF8wKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuIDY1NjpcdCNkZWZpbmUgQlBGX0NBTExfMShuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDEsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiA2NTc6XHQjZGVmaW5lIEJQRl9DQUxMXzIobmFtZSwgLi4uKVx0QlBGX0NBTExfeCgyLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG4gNjU4Olx0I2RlZmluZSBCUEZfQ0FMTF8zKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMywgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuIDY1OTpcdCNkZWZpbmUgQlBGX0NBTExfNChuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDQsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiA2NjA6XHQjZGVmaW5lIEJQRl9DQUxMXzUobmFtZSwgLi4uKVx0QlBGX0NBTExfeCg1LCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG4gNjYxOlx0XG4gNjYyOlx0I2RlZmluZSBOT1RSQUNFX0JQRl9DQUxMXzEobmFtZSwgLi4uKVx0QlBGX0NBTExfeCgxLCBub3RyYWNlLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiA2NjM6XHRcbiA2NjQ6XHQjZGVmaW5lIGJwZl9jdHhfcmFuZ2UoVFlQRSwgTUVNQkVSKVx0XHRcdFx0XHRcdFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0Mjc0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgdGhlIGBicGZfc2tiX2FkanVzdF9yb29tYCBQYXRjaCoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQgZGVmaW5lcyBgbmFtZWAgYXMgYGJwZl9za2JfYWRqdXN0X3Jvb21gLCBhbmQgYF9fX19icGZfc2tiX2FkanVzdF9yb29tYCB3aGljaCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljIF9fYWx3YXlzX2lubGluZWAuIFRoZXJlZm9yZSwgdGhlIGtlcm5lbCBzeW1ib2wgaXRzZWxmLCB0aGUgb25lIGFjdHVhbGx5IGV4cG9zZWQgdG8gdGhlIEJQRiBwcm9ncmFtcywgaXMgaW5kZWVkIGBicGZfc2tiX2FkanVzdF9yb29tYC4gVGhhdCBtdWNoIGlzIGNsZWFyLgoKSSBzZWUgYWxzbyB0aGF0IHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgYnBmX3NrYl9uZXRfc2hyaW5rYC4gSSBzaG91bGQgcXVpY2tseSB2ZXJpZnkgaWYgdGhhdCBmdW5jdGlvbiBpcyBhbHNvIHN0YXRpYyBiZWNhdXNlIHRoYXQgd291bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBjaGFuZ2VzIGludGVyYWN0LiBZZXAsIGBicGZfc2tiX25ldF9zaHJpbmtgIGlzIGRlY2xhcmVkIGBzdGF0aWMgaW50YC4gT2theSwgc28gYGJwZl9za2JfYWRqdXN0X3Jvb21gIGlzIGNsZWFybHkgdGhlIGtleSBlbnRyeSBwb2ludC4KCk5vdywgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuIEFyZSB0aGVyZSBhbnkgcGFydGljdWxhciBgQ09ORklHYCBvcHRpb25zIHRoYXQgYXJlIG5lY2Vzc2FyeSBvciBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZT8gVGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgbmV0L2NvcmUvZmlsdGVyLmNgLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBsb29rLiBJdCYjMzk7cyBjb21waWxlZCB3aGVuIGVpdGhlciBgQ09ORklHX0JQRl9TWVNDQUxMYCBvciBgQ09ORklHX05FVGAgaXMgZW5hYmxlZC4gVGhhdCBtYWtlcyBzZW5zZS4gSSYjMzk7bGwgdGFrZSBhIHF1aWNrIHBlZWsgYXQgYG5ldC9jb3JlL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBjb21waWxhdGlvbiBkZXBlbmRlbmNpZXMgYW5kIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWx0ZXJcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9MTI9b2JqLXlcdFx0ICAgICAmIzQzOz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XHRcdFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVx0XHRcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5MzMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IGFuZCBQdXJwb3NlIG9mIGBmaWx0ZXIub2AqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgZmlsdGVyLm9gIGlzIGFsd2F5cyBidWlsdCB3aGVuIHRoZSBgbmV0L2NvcmUvYCBtb2R1bGUgaXMgZW5hYmxlZCwgd2hpY2ggaW1wbGllcyBgQ09ORklHX05FVD15YC4gVGhhdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHByZXJlcXVpc2l0ZS4gTXkgaW50ZXJlc3QgaGVyZSBpcyBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBuZXcgQlBGIGZsYWdzIOKAkyBgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFYCwgYEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUGAsIGBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDRgLCBhbmQgYEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNmAg4oCTIGZpdCBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4KCkl0JiMzOTtzIGNsZWFyIHRoZXkgYXJlIHNpbXBseSBuZXcgb3B0aW9ucyBmb3IgdGhlIGV4aXN0aW5nIGBicGZfc2tiX2FkanVzdF9yb29tYCBoZWxwZXIuIFRoYXQgdGVsbHMgbWUgdGhpcyBpc24mIzM5O3QgYSByYWRpY2FsIHNoaWZ0LCBidXQgYW4gZW5oYW5jZW1lbnQgdG8gYW4gZXhpc3RpbmcgZnVuY3Rpb25hbGl0eS4gTm93IEkgbmVlZCB0byByZWNhbGwgd2hlcmUgYGJwZl9za2JfYWRqdXN0X3Jvb21gIGlzIGJlaW5nICp1c2VkKi4gUmlnaHQsIGl0IGlzIHBhcnQgb2YgdGhlIGNvbnRleHQgZm9yIEJQRiBwcm9ncmFtcyB3aXRoIGVpdGhlciB0aGUgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYCBvciBgQlBGX1BST0dfVFlQRV9TQ0hFRF9BQ1RgIHR5cGVzIOKAkyBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSB0cmFmZmljIGNvbnRyb2wgKHRjKSBmcmFtZXdvcmsuIFRvIHNvbGlkaWZ5IHRoaXMsIGxldCBtZSBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgdGNfY2xzX2FjdF9mdW5jX3Byb3RvYCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBUaGF0IHNob3VsZCBjbGFyaWZ5IHRoZSBleGFjdCBpbnRlZ3JhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNfY2xzX2FjdF9mdW5jX3Byb3RvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9ODYzNT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcbm5ldC9jb3JlL2ZpbHRlci5jOjg2MzY6dGNfY2xzX2FjdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxubmV0L2NvcmUvZmlsdGVyLmMtODYzNy17XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTE1MTg9Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgdGNfY2xzX2FjdF92ZXJpZmllcl9vcHMgPSB7XG5uZXQvY29yZS9maWx0ZXIuYzoxMTUxOTpcdC5nZXRfZnVuY19wcm90b1x0XHQ9IHRjX2Nsc19hY3RfZnVuY19wcm90byxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTIwLVx0LmlzX3ZhbGlkX2FjY2Vzc1x0PSB0Y19jbHNfYWN0X2lzX3ZhbGlkX2FjY2VzcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2ODUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqVEMgQlBGIGFuZCBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgLSBDb25maWd1cmF0aW9uIENoZWNrKioKCkFscmlnaHQsIHNvIGBicGZfc2tiX2FkanVzdF9yb29tYCBpcyBhcHBhcmVudGx5IGFjY2Vzc2libGUgd2l0aGluIFRDIEJQRiBwcm9ncmFtcyBub3cuIFRoYXTigJlzIGdvb2QgdG8ga25vdy4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHZlcmlmeSB0aGlzIGFuZCBnZXQgaXQgdXAgYW5kIHJ1bm5pbmcuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBlbmFibGVkIGZvciBUQyBCUEYgdG8gd29yayBjb3JyZWN0bHkgd2l0aCB0aGlzIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEkga25vdyBJJiMzOTtsbCBuZWVkIGBDT05GSUdfQlBGX1NZU0NBTEw9eWAsIGFuZCB0aGVuIGVpdGhlciBgQ09ORklHX05FVF9DTFNfQlBGPXlgIG9yIGBDT05GSUdfTkVUX0FDVF9CUEY9eWAgKG9yIHBvdGVudGlhbGx5IGBDT05GSUdfTkVUX1NDSF9JTkdSRVNTPXlgLCBvciBvdGhlcnMgdGhhdCBlbmFibGUgQlBGIGZ1bmN0aW9uYWxpdHkpLiAKClNvLCBteSBpbW1lZGlhdGUgbmV4dCB0YXNrIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIG1pbmltYWwgc2V0IG9mIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkIHRvIHRlc3QgdGhpcyBwcm9wZXJseSB3aXRoaW4gYSBUQyBCUEYgZW52aXJvbm1lbnQuIEkgbmVlZCB0byBkZWx2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlncyBhbmQgZG9jdW1lbnRhdGlvbiB0byBkZXRlcm1pbmUgdGhlIG9wdGltYWwgY29uZmlndXJhdGlvbiBmb3IgYSBzaW1wbGUgdGVzdCBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y19jbHNfYWN0X3ZlcmlmaWVyX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTExNTE0PWNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgc2tfZmlsdGVyX3Byb2dfb3BzID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExNTE3LVxubmV0L2NvcmUvZmlsdGVyLmM6MTE1MTg6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgdGNfY2xzX2FjdF92ZXJpZmllcl9vcHMgPSB7XG5uZXQvY29yZS9maWx0ZXIuYy0xMTUxOS1cdC5nZXRfZnVuY19wcm90b1x0XHQ9IHRjX2Nsc19hY3RfZnVuY19wcm90byxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxNjcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2UgYXJlIG15IGluaXRpYWwgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgdGhlIFVzYWdlIG9mIGB0Y19jbHNfYWN0X3ZlcmlmaWVyX29wc2AqKgoKQWxyaWdodCwgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIGB0Y19jbHNfYWN0X3ZlcmlmaWVyX29wc2Agc3RydWN0dXJlLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZmlndXJlIG91dCAqd2hlcmUqIGl0JiMzOTtzIGFjdHVhbGx5IGJlaW5nIHV0aWxpemVkLiBVbmRlcnN0YW5kaW5nIGl0cyBkZXBlbmRlbmNpZXMgYW5kIHRoZSBjb2RlIHRoYXQgaW50ZXJhY3RzIHdpdGggaXQgaXMgcGFyYW1vdW50IHRvIGdyYXNwaW5nIGl0cyBvdmVyYWxsIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2Ugd2l0aGluIHRoZSBjb2RlYmFzZS4gSXMgaXQgcGFydCBvZiBhIHNwZWNpZmljIHN1YnN5c3RlbSwgb3IgaXMgaXQgaW50ZWdyYXRlZCBtb3JlIGJyb2FkbHk/IFRoaXMgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uIHdpbGwgc2V0IHRoZSBzdGFnZSBmb3IgYW55IGZ1cnRoZXIgYW5hbHlzaXMgSSYjMzk7bGwgbmVlZCB0byBkby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y19jbHNfYWN0X3ZlcmlmaWVyX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzOTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwmIzM5O3MgVHJhZmZpYyBDb250cm9sIFZlcmlmaWVyKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgdHJhZmZpYyBjb250cm9sIHZlcmlmaWVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBzb3VyY2UgY29kZSB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYG5ldC9jb3JlL2ZpbHRlci5jYC4gVGhhdCBmaWxlIHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBsb29rIGZvciB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHRjX2Nsc19hY3RfdmVyaWZpZXJfb3BzYC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBoYW5kbGUgdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzIHRoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCB2YWxpZGF0ZXMgYWN0aW9ucyBhbmQgY2xhc3NpZmllcnMgd2l0aGluIHRoZSB0cmFmZmljIGNvbnRyb2wgZnJhbWV3b3JrLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNfY2xzX2FjdF92ZXJpZmllcl9vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz0xMTUxND1jb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIHNrX2ZpbHRlcl9wcm9nX29wcyA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTUxNy1cbm5ldC9jb3JlL2ZpbHRlci5jOjExNTE4OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIHRjX2Nsc19hY3RfdmVyaWZpZXJfb3BzID0ge1xubmV0L2NvcmUvZmlsdGVyLmMtMTE1MTktXHQuZ2V0X2Z1bmNfcHJvdG9cdFx0PSB0Y19jbHNfYWN0X2Z1bmNfcHJvdG8sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzM0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIEJQRiBUeXBlIERlZmluaXRpb25zKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuZGFtZW50YWwgZGF0YSB0eXBlcyB1c2VkIHdpdGhpbiB0aGUgQlBGIGZyYW1ld29yay4gVGhhdCBtZWFucyBteSBpbW1lZGlhdGUgZm9jdXMgc2hvdWxkIGJlIHRoZSBgaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaGAgaGVhZGVyIGZpbGUuIEl0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBidWlsZGluZyBibG9ja3Mgb2YgYW55IEJQRiBwcm9ncmFtLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBkZWZpbml0aW9ucyBmb3IgdGhpbmdzIGxpa2UgYF9fdTMyYCwgYF9fczY0YCwgdmFyaW91cyBzdHJ1Y3R1cmVzIHVzZWQgZm9yIEJQRiBtYXBzLCBhbmQgYW55dGhpbmcgZWxzZSByZWxhdGVkIHRvIGRhdGEgcmVwcmVzZW50YXRpb25zIGF0IHRoZSBrZXJuZWwgbGV2ZWwgdGhhdCBCUEYgaW50ZXJhY3RzIHdpdGguIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgdXNlIG9mIHRoZXNlIHR5cGVzIHdpdGhpbiBrZXJuZWwgY29udGV4dHMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4uLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIHByb3ZpZGUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBtb3JlIGNvbXBsZXggZXhwbG9yYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjX2Nsc19hY3RfdmVyaWZpZXJfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdHlwZXMuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTgzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCYjMzk7cyBCUEYgSGVhZGVyKioKCkFscmlnaHQsIHRpbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZ2V0IGJhY2sgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSBCUEYgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSB0aGUga2VybmVsJiMzOTtzIGRlZmluaXRpb24uIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBjb3JuZXJzdG9uZTogSSBuZWVkIHRvIG9wZW4gYW5kIGNhcmVmdWxseSBleGFtaW5lIHRoZSBgaW5jbHVkZS9saW51eC9icGYuaGAgaGVhZGVyIGZpbGUuIEl0JiMzOTtzIHRoZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcywgY29uc3RhbnRzLCBhbmQgbWFjcm9zIHRoYXQgdW5kZXJwaW4gdGhlIGVudGlyZSBlQlBGIGZyYW1ld29yay4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKnJlYWxseSogaGFwcGVucy4gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiB0aGUgdmFyaW91cyBlbnVtIGFuZCBzdHJ1Y3QgZGVmaW5pdGlvbnMgZm9yIGNvbnRleHQuIEdvdHRhIG1ha2Ugc3VyZSBub3RoaW5nIGZ1bmRhbWVudGFsIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUgSSB3YXMgdGhpcyBkZWVwLiBJIG5lZWQgYSBjbGVhciBtZW50YWwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y19jbHNfYWN0X3ZlcmlmaWVyX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzIyMgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgTGludXgga2VybmVsIGNvZGU6CgoqKkRpdmluZyBpbnRvIHRoZSBUcmFmZmljIENvbnRyb2wgVmVyaWZpZXIgT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBmb3IgYHRjX2Nsc19hY3RfdmVyaWZpZXJfb3BzYC4gTmF0dXJhbGx5LCBnaXZlbiBteSBleHBlcmllbmNlLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBuYXZpZ2F0ZSB0aGUga2VybmVsIHNvdXJjZSB0cmVlIGRpcmVjdGx5LiBUaGUgc3RhbmRhcmQgcGxhY2UgdG8gYmVnaW4gbG9va2luZyBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBUcmFmZmljIENvbnRyb2wgaXMgdXN1YWxseSB0aGUgYGluY2x1ZGUvbGludXgvYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3Mgd2hlcmUgYSBsb3Qgb2YgdGhlIGNvcmUgc3RydWN0dXJlcywgbWFjcm9zLCBhbmQgZnVuY3Rpb24gcHJvdG90eXBlcyByZWxhdGVkIHRvIHRoZSBrZXJuZWwmIzM5O3MgaW50ZXJuYWwgQVBJcyByZXNpZGUuIEl04oCZcyB0aGUgbG9naWNhbCBmaXJzdCBzdG9wLCBhbmQgdGhlIHBhdGggb2YgbGVhc3QgcmVzaXN0YW5jZSB3aGVuIGRlYWxpbmcgd2l0aCBkZWZpbml0aW9ucyBsaWtlIHRoaXMgb25lLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNfY2xzX2FjdF92ZXJpZmllcl9vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDQyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2Agb3IgYSBzaW1pbGFyIGZpbGUgZGVhbGluZyB3aXRoIEJQRiBzeXNjYWxsIGhhbmRsaW5nLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIHBsYWNlIHRvIHN0YXJ0IHdoZW4gSSYjMzk7bSBsb29raW5nIGF0IEJQRiBwcm9ncmFtIHR5cGVzLiBCdXQgaG9sZCBvbi4uLiBhIHF1aWNrIGNyb3NzLXJlZmVyZW5jZSBtaWdodCBiZSBzbWFydGVyLiBJIHNob3VsZCBjaGVjayB3aGVyZSBgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFNgIGlzIGFjdHVhbGx5ICpkZWZpbmVkKi4gUmlnaHQsIGBicGZfdHlwZXMuaGAuIEFoLCB0aGVyZSBpdCBpcy4gSXQgbWFwcyBgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFNgIGRpcmVjdGx5IHRvIGB0Y19jbHNfYWN0YC4gRXhjZWxsZW50LiBUaGF0IGhlbHBzIG5hcnJvdyBkb3duIHRoZSBzZWFyY2ggY29uc2lkZXJhYmx5LiBLbm93aW5nIHRoYXQgY29ubmVjdGlvbiBpcyBrZXkuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNfY2xzX2FjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdHlwZXMuaD01PUJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLCBza19maWx0ZXIsXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTYtXHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6NzpCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCB0Y19jbHNfYWN0LFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC04LVx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjk6QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1NDSEVEX0FDVCwgdGNfY2xzX2FjdCxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMTAtXHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4OTcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipCUEYgUHJvZ3JhbSBUeXBlIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IGVCUEYgcHJvZ3JhbXMgYXJlIGhhbmRsZWQgaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHdpdGggcmVnYXJkIHRvIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2AgYW5kIGBCUEZfUFJPR19UWVBFX1NDSEVEX0FDVGAuIFJpZ2h0LCBgdGNfY2xzX2FjdGAgaXMgdGhlIGtleSBmdW5jdGlvbiB1c2VkIHRvIG1hbmFnZSB0aG9zZSwgd2hpY2ggSSBrbmV3LiBOb3csIGxldCBtZSByZW1pbmQgbXlzZWxmIC0gdGhlc2UgYXJlIGRlZmluaXRlbHkgZW5hYmxlZCBieSBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYWxzbyBgQ09ORklHX05FVGAsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEhtbSwgSSB3b25kZXIgaWYgd2UgbmVlZCBgQ09ORklHX05FVF9DTFNfQlBGYD8gSSBoYXZlIGEgZmVlbGluZyBpdCBtaWdodCBiZSwgYnV0IGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGJlIGNlcnRhaW4sIHNvIGl0JiMzOTtzIGJlc3QgdG8gdmVyaWZ5IHRoaXMuIEFscmlnaHQsIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBjb2RlLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBpbiBgbmV0L3NjaGVkL2Nsc19icGYuY2AgdG8gYmUgY29tcGxldGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjbHNfYnBmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9NTYyPWNvbmZpZyBORVRfQ0xTX0JQRlxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTU2OS1cdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxubmV0L3NjaGVkL0tjb25maWc6NTcwOlx0ICBiZSBjYWxsZWQgY2xzX2JwZi5cbm5ldC9zY2hlZC9LY29uZmlnLTU3MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzMTUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgY29uc2lkZXJpbmcgSSBuZWVkIHRvIGdldCB0aGlzIEJQRiBwcm9ncmFtIHVwIGFuZCBydW5uaW5nOgoKKipCUEYgUHJvZ3JhbSBEZXBsb3ltZW50ICZhbXA7IFRlc3RpbmcgQ29uc2lkZXJhdGlvbnMqKgoKQWxyaWdodCwgc28gdG8gYWN0dWFsbHkgaW50ZWdyYXRlIHRoaXMgQlBGIHByb2dyYW0gd2l0aCBhIFRyYWZmaWMgQ29udHJvbCAoVEMpIGhvb2ssIGl0JiMzOTtzIHByZXR0eSBjbGVhciBJJiMzOTttIGdvaW5nIHRvIG5lZWQgZWl0aGVyIGBDT05GSUdfTkVUX0NMU19CUEZgIG9yIGBDT05GSUdfTkVUX1NDSF9JTkdSRVNTYCBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlnLiBUaGF0IG1ha2VzIHNlbnNlLCB0aG9zZSBhcmUgdGhlIG5lY2Vzc2FyeSBidWlsZGluZyBibG9ja3MgZm9yIHRoYXQga2luZCBvZiBhdHRhY2htZW50LgoKSG93ZXZlciwgYW5kIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgaWYgSSYjMzk7bSBqdXN0IGxvb2tpbmcgdG8gbG9hZCB0aGUgcHJvZ3JhbSBhbmQgdGVzdCBpdHMgKmV4ZWN1dGlvbiogdXNpbmcgc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyLCBieXBhc3NpbmcgdGhlIFRDIGhvb2sgZm9yIG5vdywgaXQgc2VlbXMgSSBjYW4gYWNoaWV2ZSB0aGF0IHdpdGggYEJQRl9QUk9HX1JVTmAgLSBwcm9iYWJseSB0aHJvdWdoIGEgZnVuY3Rpb24gbGlrZSBgYnBmX3Byb2dfdGVzdF9ydW5gLiBUaGF0IHdvdWxkIGJlIGEgZ29vZCBpbml0aWFsIHZhbGlkYXRpb24gc3RlcC4KCk5vdywgZm9yIHRoYXQgYGJwZl9wcm9nX3Rlc3RfcnVuYCBwYXRoIHRvIHdvcmssIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfTkVUYCBhcmUgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4gVGhhdCBzZWVtcyByZWFzb25hYmxlLCBhcyB0aGVzZSBhcmUgdGhlIGZ1bmRhbWVudGFscyBmb3IgdGhlIEJQRiBzeXN0ZW0gY2FsbCBpbnRlcmZhY2UgYW5kIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0aWVzLCByZXNwZWN0aXZlbHkuCgpGaW5hbGx5LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBicGZfcHJvZ190ZXN0X3J1bmAgc3VwcG9ydHMgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYCBzcGVjaWZpY2FsbHkuIFdlIGNhbiYjMzk7dCBhc3N1bWUgdGhhdCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgd29yaywgdGhlIHNwZWNpZmljIHByb2dyYW0gdHlwZSBtaWdodCBuZWVkIGV4cGxpY2l0IHN1cHBvcnQuIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhhdCBmdW5jdGlvbiB0byBtYWtlIHN1cmUuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRl9QUk9HX1RZUEVfU0NIRURfQ0xTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JwZi90ZXN0X3J1bi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icGYvdGVzdF9ydW4uYz0xMDM1PWludCBicGZfcHJvZ190ZXN0X3J1bl9za2Ioc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTEwNjAtXHRzd2l0Y2ggKHByb2ctXHUwMDNldHlwZSkge1xubmV0L2JwZi90ZXN0X3J1bi5jOjEwNjE6XHRjYXNlIEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTOlxubmV0L2JwZi90ZXN0X3J1bi5jLTEwNjItXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0NIRURfQUNUOlxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYz0xODg4PXN0YXRpYyBpbnQgX19pbml0IGJwZl9wcm9nX3Rlc3RfcnVuX2luaXQodm9pZClcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTkwMi1cdHJldCA9IHJlZ2lzdGVyX2J0Zl9mbW9kcmV0X2lkX3NldChcdTAwMjZicGZfdGVzdF9tb2RpZnlfcmV0dXJuX3NldCk7XG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTkwMzpcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCBcdTAwMjZicGZfcHJvZ190ZXN0X2tmdW5jX3NldCk7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTkwNC1cdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVFJBQ0lORywgXHUwMDI2YnBmX3Byb2dfdGVzdF9rZnVuY19zZXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTE4MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIFNLQiBBZGp1c3RtZW50IGFuZCBHU08gRmxhZ3MgZm9yIFN5emthbGxlciBUZXN0aW5nKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IHRlc3QgdGhlIGBicGZfc2tiX2FkanVzdF9yb29tYCBCUEYgaGVscGVyLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIGl0cyBpbnRlcmFjdGlvbiB3aXRoIEdTTyBmbGFncyBhbmQgZW5jYXBzdWxhdGlvbi4gVGhlIGdvb2QgbmV3cyBpcyB0aGF0IGBicGZfcHJvZ190ZXN0X3J1bl9za2JgIGRvZXMgaW5kZWVkIHN1cHBvcnQgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYCwgd2hpY2ggaXMgZ3JlYXQuIEFuZCwgc2luY2Ugd2UgaGF2ZSBgQ09ORklHX0JQRl9TWVNDQUxMYCwgdGhhdCYjMzk7cyBhIGtleSBzdGFydGluZyBwb2ludC4KCkJ1dCB0aGVuIEkgcmVtZW1iZXJlZCBgYnBmX3NrYl9uZXRfc2hyaW5rYCwgYW5kIGhvdyBpdCBjbGVhcnMgYHNrYi0mZ3Q7ZW5jYXBzdWxhdGlvbmAsIHBsdXMgdGhvc2UgY3J1Y2lhbCBHU08gZmxhZ3M6IGBTS0JfR1NPX1VEUF9UVU5ORUxgLCBgU0tCX0dTT19HUkVgLCBhbmQgdGhlIHJlc3QuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgd2UgY2FuIHRlc3QgdGhlc2Ugc2NlbmFyaW9zLiBJIHNlZSB0aGF0IHRob3NlIGZsYWdzIGFyZSBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYCwgc28gSSYjMzk7bGwga2VlcCB0aGF0IGluIG1pbmQuCgpOb3csIG15IG1pbmQgZ29lcyB0byB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlc2UgdHVubmVscy4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBjb25maWdzIEkgc2hvdWxkIHdhdGNoIG91dCBmb3IgcmVsYXRlZCB0byBHUkUsIFVEUCB0dW5uZWxzLCBJUElQLCBhbmQgU0lUPyBUaGUgcGF0Y2ggcG9pbnRzIHRvIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y190dW5uZWwuY2AsIHdoaWNoIHVzZXMgdGhlIGBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkVgLCBldGMuIGZsYWdzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UgY2FuIGNyZWF0ZSBTS0JzIHdpdGggdGhlc2UgR1NPIHR5cGVzIHVzaW5nIHN5emthbGxlci4gU3l6a2FsbGVyIGNvdWxkIHVzZSBgdHVuYC9gdGFwYCBvciBgdmV0aGAgYW5kIHNlbmQgcGFja2V0cywgYnV0LCBpZiBpdCYjMzk7cyB1c2luZyBgYnBmX3Byb2dfdGVzdF9ydW5gLCB0aGVuIHRoZSBxdWVzdGlvbiBpcywgaG93IGRvZXMgaXQgc2V0IHRoZXNlIEdTTyBmbGFncyBpbiBhIGNyYWZ0ZWQgU0tCPwoKSSB0aG91Z2h0IGBicGZfcHJvZ190ZXN0X3J1bl9za2JgIG1pZ2h0IGxldCBtZSBzZXQgYHNoaW5mbyhza2IpLSZndDtnc29fdHlwZWAgZGlyZWN0bHksIGJ1dCBpdCBsb29rcyBsaWtlIHRoYXQmIzM5O3Mgbm90IHRoZSBjYXNlLiBJdCBtYXkgYmUgc2V0IGlmIGl0IGdvZXMgdGhyb3VnaCB0aGUga2VybmVsIHN0YWNrLiBIb3dldmVyLCB3YWl0LCBpdCBqdXN0IGNsaWNrZWQhIFN5emthbGxlciAqY2FuKiBpbmplY3QgcGFja2V0cyB2aWEgYHR1bmAgb3IgYHBhY2tldGAgc29ja2V0cyB0aGF0IHVzZSBgVk5FVF9IRFJgLCBhbmQgdGhpcyAqZG9lcyogYWxsb3cgc2V0dGluZyBHU08gZmxhZ3MhIFllcywgdGhlIGB2aXJ0aW9fbmV0X2hkcmAgZ2l2ZXMgYWNjZXNzLiBTbywgdGhhdCBtZWFucyBjcmVhdGluZyBTS0JzIHdpdGggYFNLQl9HU09fVURQX1RVTk5FTGAgc2hvdWxkIGJlIGZhaXJseSBlYXN5LgoKSSBzZWUgdGhhdCBzeXprYWxsZXIgYWxyZWFkeSBlbmFibGVzIGBDT05GSUdfVFVOYCwgc28gdGhhdCYjMzk7cyBhIHBvc2l0aXZlLiBXaGF0IGFib3V0IGBDT05GSUdfTkVUX0lQR1JFYCwgYENPTkZJR19JUFY2X1NJVGAsIGFuZCBgQ09ORklHX0lQVjZfVFVOTkVMYD8gVGhleSBtaWdodCBiZSB1c2VmdWwgaWYgc3l6a2FsbGVyIHRyaWVzIHRvIHRyaWdnZXIgdGhpcyB2aWEgYWN0dWFsIHR1bm5lbCBkZXZpY2VzLCBidXQgc2luY2UgdGhpcyBpcyBhIEJQRiBoZWxwZXIsIHN5emthbGxlciB3aWxsIGp1c3QgY2FsbCB0aGUgQlBGIGhlbHBlciBkaXJlY3RseSBvbiB3aGF0ZXZlciBTS0IgaXQgaGFzLiBTbyBpdCBzb3VuZHMgbGlrZSB0aGUgbWFpbiB0YXJnZXQgaXMgdGhlIGBicGZfc2tiX2FkanVzdF9yb29tYCBoZWxwZXIgaXRzZWxmLgoKVGhlcmVmb3JlLCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2UgZnVuY3Rpb25zOiBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgYW5kIGBicGZfc2tiX25ldF9zaHJpbmtgIOKAkyB3aGljaCBpcyBsaWtlbHkgaW5saW5lZCBvciBkaXJlY3RseSBwYXJ0IG9mIHRoZSBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgZnVuY3Rpb24uIEkgd2lsbCBjaGVjayB3aGV0aGVyIGBicGZfc2tiX25ldF9zaHJpbmtgIGlzIGlubGluZWQsIGp1c3QgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3NrYl9uZXRfc2hyaW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MzU5OD1zdGF0aWMgaW50IGJwZl9za2JfbmV0X2dyb3coc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG9mZiwgdTMyIGxlbl9kaWZmLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTM3MTItXG5uZXQvY29yZS9maWx0ZXIuYzozNzEzOnN0YXRpYyBpbnQgYnBmX3NrYl9uZXRfc2hyaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvZmYsIHUzMiBsZW5fZGlmZixcbm5ldC9jb3JlL2ZpbHRlci5jLTM3MTQtXHRcdFx0ICAgICAgdTY0IGZsYWdzKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTM4NDc9QlBGX0NBTExfNChicGZfc2tiX2FkanVzdF9yb29tLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHMzMiwgbGVuX2RpZmYsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzkzMi1cbm5ldC9jb3JlL2ZpbHRlci5jOjM5MzM6XHRyZXQgPSBzaHJpbmsgPyBicGZfc2tiX25ldF9zaHJpbmsoc2tiLCBvZmYsIGxlbl9kaWZmX2FicywgZmxhZ3MpIDpcbm5ldC9jb3JlL2ZpbHRlci5jLTM5MzQtXHRcdCAgICAgICBicGZfc2tiX25ldF9ncm93KHNrYiwgb2ZmLCBsZW5fZGlmZl9hYnMsIGZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5NDEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgRnVuY3Rpb24gQ2FsbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiBjYWxsIOKAkyBpdCYjMzk7cyBzdGF0aWMsIHNvIHRoZXJlJiMzOTtzIGEgZ29vZCBjaGFuY2UgdGhlIGNvbXBpbGVyIG1pZ2h0IGlubGluZSBpdC4gVGhhdCYjMzk7cyB0aGUgZmlyc3QgdGhpbmcgdG8gY29uc2lkZXIuIFRoZXJlZm9yZSwgbXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gYGJwZl9za2JfYWRqdXN0X3Jvb21gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4KCk5vdywgbGV0JiMzOTtzIHNlZS4gUmlnaHQsIHRoZSBzeW1ib2wgbmFtZSBmb3IgYEJQRl9DQUxMXzQoYnBmX3NrYl9hZGp1c3Rfcm9vbSwgLi4uKWAgaXMgYWN0dWFsbHkgdHdvLWZvbGQ6IHdlIGhhdmUgdGhlIHdyYXBwZXIsIGp1c3QgYGJwZl9za2JfYWRqdXN0X3Jvb21gLCBhbmQgdGhlIGlubGluZSB2ZXJzaW9uIGlzIGBfX19fYnBmX3NrYl9hZGp1c3Rfcm9vbWAuIEdlbmVyYWxseSwgaW4gYSBrZXJuZWwgY29udGV4dCwgdGhlIHdyYXBwZXIsIHRoZSBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgdmVyc2lvbiwgKmlzbiYjMzk7dCogaW5saW5lZCBhbmQgc28gc2hvdWxkIGJlIHJlYWRpbHkgdmlzaWJsZSBpbiBga2FsbHN5bXNgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIHByb2JhYmx5IGZpbmQgdGhlIGNyb3NzIHJlZmVyZW5jZXMuCgpIb2xkIG9uIGEgc2Vjb25kLi4udGhpcyBwYXRjaCBhbHNvIHRvdWNoZXMgYGJwZl9za2JfbmV0X2Jhc2VfbGVuYCwgc28gSSYjMzk7bGwgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCB0b28uIEkgY2FuJiMzOTt0IGp1c3QgaXNvbGF0ZSBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgaW4gdGhpcyBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3NrYl9uZXRfYmFzZV9sZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz0zNTUwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9jaGFuZ2VfdHlwZV9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0zNTU3LVxubmV0L2NvcmUvZmlsdGVyLmM6MzU1ODpzdGF0aWMgdTMyIGJwZl9za2JfbmV0X2Jhc2VfbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvY29yZS9maWx0ZXIuYy0zNTU5LXtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0zODQ3PUJQRl9DQUxMXzQoYnBmX3NrYl9hZGp1c3Rfcm9vbSwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBzMzIsIGxlbl9kaWZmLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTM4NTAtXHR1MzIgbGVuX2N1ciwgbGVuX2RpZmZfYWJzID0gYWJzKGxlbl9kaWZmKTtcbm5ldC9jb3JlL2ZpbHRlci5jOjM4NTE6XHR1MzIgbGVuX21pbiA9IGJwZl9za2JfbmV0X2Jhc2VfbGVuKHNrYik7XG5uZXQvY29yZS9maWx0ZXIuYy0zODUyLVx0dTMyIGxlbl9tYXggPSBCUEZfU0tCX01BWF9MRU47XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzg2OC1cdGNhc2UgQlBGX0FESl9ST09NX05FVDpcbm5ldC9jb3JlL2ZpbHRlci5jOjM4Njk6XHRcdG9mZiAmIzQzOz0gYnBmX3NrYl9uZXRfYmFzZV9sZW4oc2tiKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTM4NzAtXHRcdGJyZWFrO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTM5MDEtXHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSylcbm5ldC9jb3JlL2ZpbHRlci5jOjM5MDI6XHRcdFx0bGVuX2RlY2FwX21pbiAmIzQzOz0gYnBmX3NrYl9uZXRfYmFzZV9sZW4oc2tiKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTM5MDMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODI3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNjY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIEFkanVzdG1lbnQgb2YgU0tCIERhdGEqKgoKT2theSwgc28gYGJwZl9za2JfbmV0X2Jhc2VfbGVuYCBpcyBzdGF0aWMsIHdoaWNoIG1lYW5zIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IHRvIGNvbnNpZGVyIGlzIGBicGZfc2tiX2FkanVzdF9yb29tYC4gTGV0JiMzOTtzIGNvbmZpcm0gYW55IG90aGVyIGZpbGVzIGltcGFjdGVkLiBBbHJpZ2h0LCBsb29rcyBsaWtlIGNoYW5nZXMgZXh0ZW5kIHRvOiBgaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oYCwgYG5ldC9jb3JlL2ZpbHRlci5jYCwgYHRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaGAsIGFuZCBzb21lIHNlbGZ0ZXN0IGZpbGVzLgoKU3BlY2lmaWNhbGx5LCBpbiB0aGUga2VybmVsIHNvdXJjZSwgdGhlIG9ubHkgbW9kaWZpY2F0aW9uIHJlc2lkZXMgd2l0aGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIEFuZCB0aGVzZSBjaGFuZ2VzIGFyZSBjb25jZW50cmF0ZWQgd2l0aGluIGBicGZfc2tiX25ldF9zaHJpbmtgIGFuZCwgb2YgY291cnNlLCBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAsIGFzIGJvdGggYXJlIHBhcnQgb2YgdGhlIGJyb2FkZXIgYGJwZl9za2JfYWRqdXN0X3Jvb21gIEJQRiBoZWxwZXIuIFRoZXJlZm9yZSwgYGJwZl9za2JfYWRqdXN0X3Jvb21gIGlzIG91ciBzeW1ib2wgb2YgaW50ZXJlc3Qg4oCTIGFuZCB0aGUgZm9jdXMuCgpIYW5nIG9uLCBpcyBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgcmVhbGx5IHRoZSBwcmVjaXNlIHN5bWJvbD8gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHdpdGggYG5tYCBvciBqdXN0IGFzc3VtZSBiYXNlZCBvbiB0aGUgYEJQRl9DQUxMXzRgIG1hY3JvIGRlZmluaXRpb24gd2UmIzM5O3ZlIGVuY291bnRlcmVkIGVhcmxpZXIuIFllcCwgYWZ0ZXIgY29uc2lkZXJpbmcgdGhlIG1hY3JvIGV4cGFuc2lvbiwgaXQgc2VlbXMgY29ycmVjdC4gVGhlIGZ1bmN0aW9uIG5hbWVkIGlzIGBicGZfc2tiX2FkanVzdF9yb29tYCwgd2hpY2gsIGJhc2VkIG9uIHRoZSBgQlBGX0NBTExfNGAgZGVmaW5pdGlvbiwgaXMgbm9uLXN0YXRpYyBhbmQsIHRoZXJlZm9yZSwgZ2xvYmFsLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgZ2l2ZW47IGl0JiMzOTtzIG5lY2Vzc2FyeSBmb3IgQlBGLiBgQ09ORklHX05FVGAgaXMgcmVxdWlyZWQgZHVlIHRvIGBuZXQvY29yZS9maWx0ZXIuY2AmIzM5O3MgcHJlc2VuY2UuIEhtbSwgYXJlIHRoZXJlIGFueSBvdGhlciBjcnVjaWFsIGNvbmZpZ3VyYXRpb25zPwoKVGhlIHBhdGNoIHNlZW1zIHRvIGVuYWJsZSBoYW5kbGluZyBvZiBHUkUsIFVEUCwgSVBJUCwgYW5kIFNJVCB0dW5uZWxzIOKAkyBkZWNhcHN1bGF0aW9uLCBzcGVjaWZpY2FsbHkuIFNvLCBkb2VzIGl0IGRlcGVuZCBvbiBjb25maWd1cmF0aW9ucyBsaWtlIGBDT05GSUdfTkVUX0lQR1JFYCBvciBgQ09ORklHX0lQVjZfU0lUYD8gTm8sIHRoZSBCUEYgaGVscGVyIGlzIGp1c3QgbWFuaXB1bGF0aW5nIHRoZSBTS0IgZGF0YSBhbmQgY2xlYXJpbmcgR1NPIGZsYWdzLiBJdCYjMzk7cyBub3QgYWN0dWFsbHkgY2FsbGluZyBpbnRvIEdSRSBvciBTSVQgbW9kdWxlcy4gSXQgdXRpbGl6ZXMgYHNpemVvZmAgZm9yIGhlYWRlcnMgbGlrZSBgc3RydWN0IGdyZV9iYXNlX2hkcmAsIGBzdHJ1Y3QgdWRwaGRyYCwgYHN0cnVjdCBpcGhkcmAsIGFuZCBgc3RydWN0IGlwdjZoZHJgLiBUaGVzZSBhcmUgZGVmaW5lZCBpbiBzdGFuZGFyZCBpbmNsdWRlIGZpbGVzIChgbGludXgvZ3JlLmhgLCBgbGludXgvdWRwLmhgLCBgbGludXgvaXAuaGAsIGBsaW51eC9pcHY2LmhgKSwgd2hpY2ggYXJlIGFsd2F5cyBhdmFpbGFibGUuIEFoLCB3YWl0LCBgJmx0O25ldC9jb3JlL2ZpbHRlci5jJmd0O2AgaW5jbHVkZXMgYCZsdDtuZXQvZ3JlLmgmZ3Q7YC4gTGV0IG1lIHF1aWNrbHkgY29uZmlybSBpZiB0aGF0IGhlYWRlciByZXF1aXJlcyBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiB0byBiZSBhY3RpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldC9ncmUuaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jLTU4LSNpbmNsdWRlIFx1MDAzY25ldC90Y3AuaFx1MDAzZVxubmV0L2NvcmUvZmlsdGVyLmM6NTk6I2luY2x1ZGUgXHUwMDNjbmV0L2dyZS5oXHUwMDNlXG5uZXQvY29yZS9maWx0ZXIuYy02MC0jaW5jbHVkZSBcdTAwM2NuZXQveGZybS5oXHUwMDNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTY5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBDb25maWd1cmF0aW9uIENvbnVuZHJ1bSoqCgpBbHJpZ2h0LCBzbyBpdCBsb29rcyBsaWtlIHRoaXMgaXMganVzdCBhYm91dCBpbmNsdWRpbmcgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgaGVhZGVycy4gU2ltcGxlIGVub3VnaC4gV2UgZGVmaW5pdGVseSBuZWVkIGBCUEZfU1lTQ0FMTGAgYW5kLCBzaW5jZSBgTkVUYCBpcyBmb3VuZGF0aW9uYWwsIHdlIGNhbiBqdXN0IGZvY3VzIG9uIHRoYXQgZmlyc3Qgb25lLiBIb2xkIG9uIGEgc2VjLCB0aG91Z2guIFNob3VsZCBJIGFsc28gaW5jbHVkZSBgQ09ORklHX05FVF9DTFNfQlBGYCBvciBgQ09ORklHX05FVF9BQ1RfQlBGYD8KCkkgZGlkIGNoZWNrIGVhcmxpZXIsIGFuZCBgYnBmX3Byb2dfdGVzdF9ydW5gIHNlZW1zIHRvIGRpcmVjdGx5IHN1cHBvcnQgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYC4gQnV0IHN5emthbGxlci4uLml0IG1pZ2h0IHVzZSBgdGNgIHVuZGVyIHRoZSBob29kIHRvIGF0dGFjaCB0aGUgcHJvZ3JhbS4gVGhlIGBzeXpfYnBmYCBkZXNjcmlwdGlvbnMgaW4gc3l6a2FsbGVyICpkbyogcmVmZXJlbmNlIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2AuIExldCYjMzk7cyBqdXN0IGJlIHRob3JvdWdoIGFuZCBjaGVjayB3aGV0aGVyIHN5emthbGxlciAqbmVlZHMqIGBORVRfQ0xTX0JQRmAgdG8gcnVuIHRoZSB0ZXN0IGNvcnJlY3RseS4KCkJlc3QgcHJhY3RpY2UgZGljdGF0ZXMgaGF2aW5nIGBORVRfQ0xTX0JQRmAgZW5hYmxlZCBhbnl3YXksIHNvIGxldCYjMzk7cyBnbyBhaGVhZCBhbmQgaW5jbHVkZSB0aGF0LiBBbmQgZm9yIGdvb2QgbWVhc3VyZSwgbGV0JiMzOTtzIGFsc28gYWRkIGBORVRfQUNUX0JQRmAuIEl0JiMzOTtzIGFsd2F5cyBiZXR0ZXIgdG8gYmUgaW5jbHVzaXZlLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHRoaXMga2luZCBvZiBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0NMU19CUEYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz01NTA9Y29uZmlnIE5FVF9DTFNfQ0dST1VQXG4tLVxubmV0L3NjaGVkL0tjb25maWctNTYxLVxubmV0L3NjaGVkL0tjb25maWc6NTYyOmNvbmZpZyBORVRfQ0xTX0JQRlxubmV0L3NjaGVkL0tjb25maWctNTYzLVx0dHJpc3RhdGUgXCYjMzQ7QlBGLWJhc2VkIGNsYXNzaWZpZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM3NjMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZDoKCioqRGl2aW5nIGludG8gTmV0d29yayBBY3Rpdml0eSB3aXRoIEJQRioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBoYW5kcy1vbi4gV2hlbiBJIHNlZSB0aGF0IG5vdGF0aW9uLCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyAmIzM0O0xldCYjMzk7cyBjaGVjayBgTkVUX0FDVF9CUEZgJiMzNDsuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIGFzc2VzcyBob3cgd2UgYXJlIGludGVyYWN0aW5nIHdpdGggdGhlIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgaG9va3MgcmVsYXRlZCB0byBuZXR3b3JrIGFjdGl2aXR5LiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHBlcmZvcm1hbmNlIG1vbml0b3JpbmcsIHBlcmhhcHMgc29tZSBzZWN1cml0eSBhbmFseXNpcywgb3IgZXZlbiBkZWVwZXIgcGFja2V0IG1hbmlwdWxhdGlvbi4gSSB3aWxsIG5vdyBleGFtaW5lIHRoaXMgc3BlY2lmaWMgZGF0YSBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbnMgcmVsYXRlZCB0byBuZXR3b3JrIGFjdGlvbnMuIFRoaXMgY291bGQgYmUgaW4gdGhlIGNvbnRleHQgb2YgdHJhZmZpYyBzaGFwaW5nLCBpbnRydXNpb24gZGV0ZWN0aW9uLCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIG9yIGFueSBudW1iZXIgb2YgbmV0d29yay1yZWxhdGVkIHRhc2tzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGRhdGEgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9BQ1RfQlBGJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9ODMwPWNvbmZpZyBORVRfQUNUX1ZMQU5cbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy04NDAtXG5uZXQvc2NoZWQvS2NvbmZpZzo4NDE6Y29uZmlnIE5FVF9BQ1RfQlBGXG5uZXQvc2NoZWQvS2NvbmZpZy04NDItXHR0cmlzdGF0ZSBcJiMzNDtCUEYgYmFzZWQgYWN0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MDU3CgkJCQkJCQlvdXRwdXQ6IDExNAoJCQkJCQkJdGhvdWdodHM6IDI0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSBpdHMgcG90ZW50aWFsIGltcGFjdCBhbmQgd2hldGhlciBpdCB3YXJyYW50cyBmdXJ0aGVyIHNjcnV0aW55LCBlc3BlY2lhbGx5IHRocm91Z2ggZnV6emluZy4gTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzIHRoYXQgSSBuZWVkIHRvIGFkZCBgQlBGX1NZU0NBTExgLCBgTkVUX0NMU19CUEZgLCBhbmQgYE5FVF9BQ1RfQlBGYCB0byBteSBtZW50YWwgY2hlY2tsaXN0IGZvciB0aGlzIGFyZWEuCgpGaXJzdCwgbGV0IG1lIGNvbmZpcm0gbXkgaW5pdGlhbCBvYnNlcnZhdGlvbi4gKmJwZl9za2JfYWRqdXN0X3Jvb20qIHNlZW1zIHRvIGJlIHRoZSBvbmx5IGZ1bmN0aW9uIG1vZGlmaWVkIGRpcmVjdGx5LiBZZXAsIGxvb2tzIGxpa2UgaXQuIEdvb2QuIFRoaXMgaXMgbXkgZm9jYWwgcG9pbnQuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBuZXcgZmxhZ3Mgd2l0aGluIGBicGZfc2tiX2FkanVzdF9yb29tYCwgc3BlY2lmaWNhbGx5IGZvciBjbGVhcmluZyB0dW5uZWwtc3BlY2lmaWMgR2VuZXJpYyBTZWdtZW50YXRpb24gT2ZmbG9hZCAoR1NPKSBmbGFncyBkdXJpbmcgZGVjYXBzdWxhdGlvbi4gVGhpcyBzY3JlYW1zICYjMzQ7bmV0d29ya2luZyBCUEYmIzM0OyB0byBtZS4KCkZ1bmN0aW9uYWxseSwgdGhpcyBpbXBhY3RzIHRoZSBjb3JlIEJQRiBuZXR3b3JraW5nIGxvZ2ljLCBhbmQgY3JpdGljYWxseSwgdGhpcyBjaGFuZ2UgKmlzKiB1c2VyLXNwYWNlIHJlYWNoYWJsZSB2aWEgQlBGIHByb2dyYW1zLCBwcmltYXJpbHkgVHJhZmZpYyBDb250cm9sIChUQykgQlBGIHByb2dyYW1zLiBCZWNhdXNlIG9mIGl0cyBwbGFjZSBpbiB0aGUgY29udHJvbCBwbGFuZSwgaXQmIzM5O3Mgd29ydGggZnV6emluZy4gVGhlIGludGVycGxheSB3aXRoIEdTTyBtYWtlcyBpdCBldmVuIG1vcmUgaW50ZXJlc3RpbmcgZm9yIG1lLgoKQWxyaWdodCwgdGltZSB0byBkaXN0aWxsIHRoaXMuIE15IHN1bW1hcnkgaXM6CgoqICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZSAtIFRoaXMgaXMgYSBjaGFuZ2UgdG8gYSBjcml0aWNhbCBCUEYgaGVscGVyIHJlYWNoYWJsZSB2aWEgdXNlci1zcGFjZS4KKiAgICoqRm9jdXNTeW1ib2xzOioqIGBicGZfc2tiX2FkanVzdF9yb29tYCAtIFRoaXMgaXMgdGhlIGNlbnRyYWwgZnVuY3Rpb24gYWZmZWN0ZWQuCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYEJQRl9TWVNDQUxMYCwgYE5FVF9DTFNfQlBGYCwgYE5FVF9BQ1RfQlBGYCAtIFRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSByZWxldmFudCB0byBlbmFibGluZyB0aGlzIGZ1bmN0aW9uYWxpdHkuCiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgZmxhZ3MgdG8gdGhlIGBicGZfc2tiX2FkanVzdF9yb29tYCBCUEYgaGVscGVyIGZvciBjbGVhcmluZyB0dW5uZWwtc3BlY2lmaWMgR1NPIGZsYWdzIGR1cmluZyBkZWNhcHN1bGF0aW9uLiBUaGlzIGNoYW5nZXMgY29yZSBCUEYgbmV0d29ya2luZyBsb2dpYyBhY2Nlc3NpYmxlIHRocm91Z2ggVEMgQlBGIHByb2dyYW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TkVUX0NMU19CUEYmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9CUEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc2tiX2FkanVzdF9yb29tJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbmV3IGZsYWdzIHRvIHRoZSBicGZfc2tiX2FkanVzdF9yb29tIEJQRiBoZWxwZXIgdG8gY2xlYXIgdHVubmVsLXNwZWNpZmljIEdTTyBmbGFncyBkdXJpbmcgZGVjYXBzdWxhdGlvbi4gVGhpcyBtb2RpZmllcyBjb3JlIEJQRiBuZXR3b3JraW5nIGxvZ2ljIHJlYWNoYWJsZSB2aWEgVEMgQlBGIHByb2dyYW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0JQRiYjMzQ7LAogICAgJiMzNDtORVRfQUNUX0JQRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9za2JfYWRqdXN0X3Jvb20mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBuZXcgZmxhZ3MgdG8gdGhlIGJwZl9za2JfYWRqdXN0X3Jvb20gQlBGIGhlbHBlciB0byBjbGVhciB0dW5uZWwtc3BlY2lmaWMgR1NPIGZsYWdzIGR1cmluZyBkZWNhcHN1bGF0aW9uLiBUaGlzIG1vZGlmaWVzIGNvcmUgQlBGIG5ldHdvcmtpbmcgbG9naWMgcmVhY2hhYmxlIHZpYSBUQyBCUEYgcHJvZ3JhbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgZmxhZ3MgZm9yIHRoZSBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgQlBGIGhlbHBlciB0byBzZWxlY3RpdmVseSBjbGVhciBHU08gdHVubmVsIGZsYWdzIGFuZCB0aGUgYHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uYCBmbGFnIGR1cmluZyBwYWNrZXQgZGVjYXBzdWxhdGlvbi4gVGhlIGNoYW5nZXMgY29uc2lzdCBvZiBiaXR3aXNlIG9wZXJhdGlvbnMgb24gZXhpc3RpbmcgYHNrYl9zaGFyZWRfaW5mb2AgZmllbGRzIChgZ3NvX3R5cGVgKSBhbmQgYHNrYmAgZmllbGRzIChgZW5jYXBzdWxhdGlvbmApLCBhcyB3ZWxsIGFzIGxlbmd0aCB2YWxpZGF0aW9uIGNoZWNrcyB0byBlbnN1cmUgdGhlIHBhY2tldCBpcyBzaHJ1bmsgYnkgYXQgbGVhc3QgdGhlIHNpemUgb2YgdGhlIGRlY2Fwc3VsYXRlZCBoZWFkZXJzLlxuXG5UaGVzZSBtb2RpZmljYXRpb25zIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBkdWUgdG8gaW5jb3JyZWN0IGxlbmd0aCBjYWxjdWxhdGlvbnMpIHdvdWxkIGJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY1M2I3NWRiMGQ2NDNlMTU0MGI4ZWE4YjE5YmFjMGIzMjhjY2EwOWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAxNjo0OTowMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaAppbmRleCBmZmQ5NmU4YjkyMGJkLi43MzJiMzVjYzA4ZDFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCkBAIC0zMDM4LDggJiM0MzszMDM4LDM0IEBAIHVuaW9uIGJwZl9hdHRyIHsKICAqCiAgKgkJKiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQqKiwKICAqCQkgICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNioqOgotICoJCSAgSW5kaWNhdGUgdGhlIG5ldyBJUCBoZWFkZXIgdmVyc2lvbiBhZnRlciBkZWNhcHN1bGF0aW5nIHRoZSBvdXRlcgotICoJCSAgSVAgaGVhZGVyLiBVc2VkIHdoZW4gdGhlIGlubmVyIGFuZCBvdXRlciBJUCB2ZXJzaW9ucyBhcmUgZGlmZmVyZW50LgomIzQzOyAqCQkgIEluZGljYXRlIHRoZSBuZXcgSVAgaGVhZGVyIHZlcnNpb24gYWZ0ZXIgZGVjYXBzdWxhdGluZyB0aGUKJiM0MzsgKgkJICBvdXRlciBJUCBoZWFkZXIuIFVzZWQgd2hlbiB0aGUgaW5uZXIgYW5kIG91dGVyIElQIHZlcnNpb25zCiYjNDM7ICoJCSAgYXJlIGRpZmZlcmVudC4gVGhlc2UgZmxhZ3Mgb25seSB0cmlnZ2VyIGEgcHJvdG9jb2wgY2hhbmdlCiYjNDM7ICoJCSAgd2l0aG91dCBjbGVhcmluZyBhbnkgdHVubmVsLXNwZWNpZmljIEdTTyBmbGFncy4KJiM0MzsgKgomIzQzOyAqCQkqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFKio6CiYjNDM7ICoJCSAgQ2xlYXIgR1JFIHR1bm5lbCBHU08gZmxhZ3MgKFNLQl9HU09fR1JFIGFuZCBTS0JfR1NPX0dSRV9DU1VNKQomIzQzOyAqCQkgIHdoZW4gZGVjYXBzdWxhdGluZyBhIEdSRSB0dW5uZWwuCiYjNDM7ICoKJiM0MzsgKgkJKiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCoqOgomIzQzOyAqCQkgIENsZWFyIFVEUCB0dW5uZWwgR1NPIGZsYWdzIChTS0JfR1NPX1VEUF9UVU5ORUwgYW5kCiYjNDM7ICoJCSAgU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0pIHdoZW4gZGVjYXBzdWxhdGluZyBhIFVEUCB0dW5uZWwuCiYjNDM7ICoKJiM0MzsgKgkJKiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCoqOgomIzQzOyAqCQkgIENsZWFyIElQSVAvU0lUIHR1bm5lbCBHU08gZmxhZyAoU0tCX0dTT19JUFhJUDQpIHdoZW4gZGVjYXBzdWxhdGluZwomIzQzOyAqCQkgIGEgdHVubmVsIHdpdGggYW4gb3V0ZXIgSVB2NCBoZWFkZXIgKElQdjQtaW4tSVB2NCBvciBJUHY2LWluLUlQdjQpLgomIzQzOyAqCiYjNDM7ICoJCSogKipCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYqKjoKJiM0MzsgKgkJICBDbGVhciBJUHY2IGVuY2Fwc3VsYXRpb24gdHVubmVsIEdTTyBmbGFnIChTS0JfR1NPX0lQWElQNikgd2hlbgomIzQzOyAqCQkgIGRlY2Fwc3VsYXRpbmcgYSB0dW5uZWwgd2l0aCBhbiBvdXRlciBJUHY2IGhlYWRlciAoSVB2Ni1pbi1JUHY2CiYjNDM7ICoJCSAgb3IgSVB2NC1pbi1JUHY2KS4KJiM0MzsgKgomIzQzOyAqCQlXaGVuIHVzaW5nIHRoZSBkZWNhcHN1bGF0aW9uIGZsYWdzIGFib3ZlLCB0aGUgc2tiLSZndDtlbmNhcHN1bGF0aW9uCiYjNDM7ICoJCWZsYWcgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkIGlmIGFsbCB0dW5uZWwtc3BlY2lmaWMgR1NPIGZsYWdzCiYjNDM7ICoJCShTS0JfR1NPX1VEUF9UVU5ORUwsIFNLQl9HU09fVURQX1RVTk5FTF9DU1VNLCBTS0JfR1NPX0dSRSwKJiM0MzsgKgkJU0tCX0dTT19HUkVfQ1NVTSwgU0tCX0dTT19JUFhJUDQsIFNLQl9HU09fSVBYSVA2KSBoYXZlIGJlZW4KJiM0MzsgKgkJcmVtb3ZlZCBmcm9tIHRoZSBwYWNrZXQuIFRoaXMgaGFuZGxlcyBjYXNlcyB3aGVyZSBhbGwgdHVubmVsCiYjNDM7ICoJCWxheWVycyBoYXZlIGJlZW4gZGVjYXBzdWxhdGVkLgogICoKICAqIAkJQSBjYWxsIHRvIHRoaXMgaGVscGVyIGlzIHN1c2NlcHRpYmxlIHRvIGNoYW5nZSB0aGUgdW5kZXJseWluZwogICogCQlwYWNrZXQgYnVmZmVyLiBUaGVyZWZvcmUsIGF0IGxvYWQgdGltZSwgYWxsIGNoZWNrcyBvbiBwb2ludGVycwpAQCAtNjI4Myw3ICYjNDM7NjMwOSw3IEBAIGVudW0gewogfTsKIAogLyogQlBGX0ZVTkNfc2tiX2FkanVzdF9yb29tIGZsYWdzLiAqLwotZW51bSB7CiYjNDM7ZW51bSBicGZfYWRqX3Jvb21fZmxhZ3MgewogCUJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTwk9ICgxVUxMICZsdDsmbHQ7IDApLAogCUJQRl9GX0FESl9ST09NX0VOQ0FQX0wzX0lQVjQJPSAoMVVMTCAmbHQ7Jmx0OyAxKSwKIAlCUEZfRl9BREpfUk9PTV9FTkNBUF9MM19JUFY2CT0gKDFVTEwgJmx0OyZsdDsgMiksCkBAIC02MjkzLDYgJiM0Mzs2MzE5LDEwIEBAIGVudW0gewogCUJQRl9GX0FESl9ST09NX0VOQ0FQX0wyX0VUSAk9ICgxVUxMICZsdDsmbHQ7IDYpLAogCUJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQJPSAoMVVMTCAmbHQ7Jmx0OyA3KSwKIAlCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY2CT0gKDFVTEwgJmx0OyZsdDsgOCksCiYjNDM7CUJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRQk9ICgxVUxMICZsdDsmbHQ7IDkpLAomIzQzOwlCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9VRFAJPSAoMVVMTCAmbHQ7Jmx0OyAxMCksCiYjNDM7CUJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNAk9ICgxVUxMICZsdDsmbHQ7IDExKSwKJiM0MzsJQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2CT0gKDFVTEwgJmx0OyZsdDsgMTIpLAogfTsKIAogZW51bSB7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDM0MjM3MzQxMjRhNWIuLjg5ZWZmZmYzYmM1MjUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC01Niw2ICYjNDM7NTYsNyBAQAogI2luY2x1ZGUgJmx0O25ldC9zb2NrX3JldXNlcG9ydC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9idXN5X3BvbGwuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvdGNwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9ncmUuaCZndDsKICNpbmNsdWRlICZsdDtuZXQveGZybS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC91ZHAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9icGZfdHJhY2UuaCZndDsKQEAgLTM1NzIsMTQgJiM0MzszNTczLDI3IEBAIHN0YXRpYyB1MzIgYnBmX3NrYl9uZXRfYmFzZV9sZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKICNkZWZpbmUgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSwkoQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNCB8IFwKIAkJCQkJIEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjYpCiAKLSNkZWZpbmUgQlBGX0ZfQURKX1JPT01fTUFTSwkJKEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTyB8IFwKLQkJCQkJIEJQRl9GX0FESl9ST09NX0VOQ0FQX0wzX01BU0sgfCBcCiYjNDM7I2RlZmluZSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLCShCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9VRFAgfCBcCiYjNDM7CQkJCQkgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFKQomIzQzOwomIzQzOyNkZWZpbmUgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTSwkoQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0IHwgXAomIzQzOwkJCQkJIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNikKJiM0MzsKJiM0MzsjZGVmaW5lIEJQRl9GX0FESl9ST09NX0VOQ0FQX01BU0sJKEJQRl9GX0FESl9ST09NX0VOQ0FQX0wzX01BU0sgfCBcCiAJCQkJCSBCUEZfRl9BREpfUk9PTV9FTkNBUF9MNF9HUkUgfCBcCiAJCQkJCSBCUEZfRl9BREpfUk9PTV9FTkNBUF9MNF9VRFAgfCBcCiAJCQkJCSBCUEZfRl9BREpfUk9PTV9FTkNBUF9MMl9FVEggfCBcCiAJCQkJCSBCUEZfRl9BREpfUk9PTV9FTkNBUF9MMiggXAotCQkJCQkgIEJQRl9BREpfUk9PTV9FTkNBUF9MMl9NQVNLKSB8IFwKLQkJCQkJIEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX01BU0spCiYjNDM7CQkJCQkgIEJQRl9BREpfUk9PTV9FTkNBUF9MMl9NQVNLKSkKJiM0MzsKJiM0MzsjZGVmaW5lIEJQRl9GX0FESl9ST09NX0RFQ0FQX01BU0sJKEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX01BU0sgfCBcCiYjNDM7CQkJCQkgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSyB8IFwKJiM0MzsJCQkJCSBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKQomIzQzOwomIzQzOyNkZWZpbmUgQlBGX0ZfQURKX1JPT01fTUFTSwkJKEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTyB8IFwKJiM0MzsJCQkJCSBCUEZfRl9BREpfUk9PTV9FTkNBUF9NQVNLIHwgXAomIzQzOwkJCQkJIEJQRl9GX0FESl9ST09NX0RFQ0FQX01BU0sgfCBcCiYjNDM7CQkJCQkgQlBGX0ZfQURKX1JPT01fTk9fQ1NVTV9SRVNFVCkKIAogc3RhdGljIGludCBicGZfc2tiX25ldF9ncm93KHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvZmYsIHUzMiBsZW5fZGlmZiwKIAkJCSAgICB1NjQgZmxhZ3MpCkBAIC0zNzAyLDggJiM0MzszNzE2LDggQEAgc3RhdGljIGludCBicGZfc2tiX25ldF9zaHJpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG9mZiwgdTMyIGxlbl9kaWZmLAogCWJvb2wgZGVjYXAgPSBmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19NQVNLOwogCWludCByZXQ7CiAKLQlpZiAodW5saWtlbHkoZmxhZ3MgJmFtcDsgfihCUEZfRl9BREpfUk9PTV9GSVhFRF9HU08gfAotCQkJICAgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX01BU0sgfAomIzQzOwlpZiAodW5saWtlbHkoZmxhZ3MgJmFtcDsgfihCUEZfRl9BREpfUk9PTV9ERUNBUF9NQVNLIHwKJiM0MzsJCQkgICAgICAgQlBGX0ZfQURKX1JPT01fRklYRURfR1NPIHwKIAkJCSAgICAgICBCUEZfRl9BREpfUk9PTV9OT19DU1VNX1JFU0VUKSkpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0zNzQwLDkgJiM0MzszNzU0LDQ4IEBAIHN0YXRpYyBpbnQgYnBmX3NrYl9uZXRfc2hyaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvZmYsIHUzMiBsZW5fZGlmZiwKIAkJaWYgKCEoZmxhZ3MgJmFtcDsgQlBGX0ZfQURKX1JPT01fRklYRURfR1NPKSkKIAkJCXNrYl9pbmNyZWFzZV9nc29fc2l6ZShzaGluZm8sIGxlbl9kaWZmKTsKIAomIzQzOwkJLyogU2VsZWN0aXZlIEdTTyBmbGFnIGNsZWFyaW5nIGJhc2VkIG9uIGRlY2FwIHR5cGUuCiYjNDM7CQkgKiBPbmx5IGNsZWFyIHRoZSBmbGFncyBmb3IgdGhlIHR1bm5lbCBsYXllciBiZWluZyByZW1vdmVkLgomIzQzOwkJICovCiYjNDM7CQlpZiAoKGZsYWdzICZhbXA7IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCkgJmFtcDsmYW1wOwomIzQzOwkJICAgIChzaGluZm8tJmd0O2dzb190eXBlICZhbXA7IChTS0JfR1NPX1VEUF9UVU5ORUwgfAomIzQzOwkJCQkJIFNLQl9HU09fVURQX1RVTk5FTF9DU1VNKSkpCiYjNDM7CQkJc2hpbmZvLSZndDtnc29fdHlwZSAmYW1wOz0gfihTS0JfR1NPX1VEUF9UVU5ORUwgfAomIzQzOwkJCQkJICAgICAgU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0pOwomIzQzOwkJaWYgKChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoc2hpbmZvLSZndDtnc29fdHlwZSAmYW1wOyAoU0tCX0dTT19HUkUgfCBTS0JfR1NPX0dSRV9DU1VNKSkpCiYjNDM7CQkJc2hpbmZvLSZndDtnc29fdHlwZSAmYW1wOz0gfihTS0JfR1NPX0dSRSB8CiYjNDM7CQkJCQkgICAgICBTS0JfR1NPX0dSRV9DU1VNKTsKJiM0MzsJCWlmICgoZmxhZ3MgJmFtcDsgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0KSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKHNoaW5mby0mZ3Q7Z3NvX3R5cGUgJmFtcDsgU0tCX0dTT19JUFhJUDQpKQomIzQzOwkJCXNoaW5mby0mZ3Q7Z3NvX3R5cGUgJmFtcDs9IH5TS0JfR1NPX0lQWElQNDsKJiM0MzsJCWlmICgoZmxhZ3MgJmFtcDsgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKHNoaW5mby0mZ3Q7Z3NvX3R5cGUgJmFtcDsgU0tCX0dTT19JUFhJUDYpKQomIzQzOwkJCXNoaW5mby0mZ3Q7Z3NvX3R5cGUgJmFtcDs9IH5TS0JfR1NPX0lQWElQNjsKJiM0MzsKJiM0MzsJCS8qIENsZWFyIGVuY2Fwc3VsYXRpb24gZmxhZyBvbmx5IHdoZW4gbm8gdHVubmVsIEdTTyBmbGFncyByZW1haW4gKi8KJiM0MzsJCWlmIChmbGFncyAmYW1wOyAoQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSyB8CiYjNDM7CQkJICAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKSkgewomIzQzOwkJCWlmICghKHNoaW5mby0mZ3Q7Z3NvX3R5cGUgJmFtcDsgKFNLQl9HU09fVURQX1RVTk5FTCB8CiYjNDM7CQkJCQkJICBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSB8CiYjNDM7CQkJCQkJICBTS0JfR1NPX0dSRSB8CiYjNDM7CQkJCQkJICBTS0JfR1NPX0dSRV9DU1VNIHwKJiM0MzsJCQkJCQkgIFNLQl9HU09fSVBYSVA0IHwKJiM0MzsJCQkJCQkgIFNLQl9HU09fSVBYSVA2IHwKJiM0MzsJCQkJCQkgIFNLQl9HU09fRVNQKSkpCiYjNDM7CQkJCWlmIChza2ItJmd0O2VuY2Fwc3VsYXRpb24pCiYjNDM7CQkJCQlza2ItJmd0O2VuY2Fwc3VsYXRpb24gPSAwOwomIzQzOwkJfQomIzQzOwogCQkvKiBIZWFkZXIgbXVzdCBiZSBjaGVja2VkLCBhbmQgZ3NvX3NlZ3MgcmVjb21wdXRlZC4gKi8KIAkJc2hpbmZvLSZndDtnc29fdHlwZSB8PSBTS0JfR1NPX0RPREdZOwogCQlzaGluZm8tJmd0O2dzb19zZWdzID0gMDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIEZvciBub24tR1NPIHBhY2tldHMsIGNsZWFyIGVuY2Fwc3VsYXRpb24gaWYgZGVjYXAgZmxhZ3MgYXJlIHNldCAqLwomIzQzOwkJaWYgKChmbGFncyAmYW1wOyAoQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSyB8CiYjNDM7CQkJICAgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTSykpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBza2ItJmd0O2VuY2Fwc3VsYXRpb24pCiYjNDM7CQkJc2tiLSZndDtlbmNhcHN1bGF0aW9uID0gMDsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTM4MDIsOCAmIzQzOzM4NTUsNyBAQCBCUEZfQ0FMTF80KGJwZl9za2JfYWRqdXN0X3Jvb20sIHN0cnVjdCBza19idWZmICosIHNrYiwgczMyLCBsZW5fZGlmZiwKIAl1MzIgb2ZmOwogCWludCByZXQ7CiAKLQlpZiAodW5saWtlbHkoZmxhZ3MgJmFtcDsgfihCUEZfRl9BREpfUk9PTV9NQVNLIHwKLQkJCSAgICAgICBCUEZfRl9BREpfUk9PTV9OT19DU1VNX1JFU0VUKSkpCiYjNDM7CWlmICh1bmxpa2VseShmbGFncyAmYW1wOyB+QlBGX0ZfQURKX1JPT01fTUFTSykpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmICh1bmxpa2VseShsZW5fZGlmZl9hYnMgJmd0OyAweGZmZlUpKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTM4MjIsMjAgJiM0MzszODc0LDUzIEBAIEJQRl9DQUxMXzQoYnBmX3NrYl9hZGp1c3Rfcm9vbSwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBzMzIsIGxlbl9kaWZmLAogCQlyZXR1cm4gLUVOT1RTVVBQOwogCX0KIAotCWlmIChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19NQVNLKSB7CiYjNDM7CWlmIChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9NQVNLKSB7CiYjNDM7CQl1MzIgbGVuX2RlY2FwX21pbiA9IDA7CiYjNDM7CiAJCWlmICghc2hyaW5rKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJc3dpdGNoIChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19NQVNLKSB7Ci0JCWNhc2UgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNDoKJiM0MzsJCS8qIFJlamVjdCBtdXR1YWxseSBleGNsdXNpdmUgZGVjYXAgZmxhZyBwYWlycy4gKi8KJiM0MzsJCWlmICgoZmxhZ3MgJmFtcDsgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSykgPT0KJiM0MzsJCSAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19NQVNLKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJaWYgKChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLKSA9PQomIzQzOwkJICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X01BU0spCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQlpZiAoKGZsYWdzICZhbXA7IEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0spID09CiYjNDM7CQkgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTSykKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCS8qIFJlamVjdCBtdXR1YWxseSBleGNsdXNpdmUgZGVjYXAgdHVubmVsIHR5cGUgZmxhZ3MuICovCiYjNDM7CQlpZiAoKGZsYWdzICZhbXA7IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X01BU0spICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoZmxhZ3MgJmFtcDsgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTSykpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQlpZiAoZmxhZ3MgJmFtcDsgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSykKJiM0MzsJCQlsZW5fZGVjYXBfbWluICYjNDM7PSBicGZfc2tiX25ldF9iYXNlX2xlbihza2IpOwomIzQzOwomIzQzOwkJaWYgKGZsYWdzICZhbXA7IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCkKJiM0MzsJCQlsZW5fZGVjYXBfbWluICYjNDM7PSBzaXplb2Yoc3RydWN0IHVkcGhkcik7CiYjNDM7CiYjNDM7CQlpZiAoZmxhZ3MgJmFtcDsgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFKQomIzQzOwkJCWxlbl9kZWNhcF9taW4gJiM0Mzs9IHNpemVvZihzdHJ1Y3QgZ3JlX2Jhc2VfaGRyKTsKJiM0MzsKJiM0MzsJCWlmIChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDQpCiYjNDM7CQkJbGVuX2RlY2FwX21pbiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcGhkcik7CiYjNDM7CiYjNDM7CQlpZiAoZmxhZ3MgJmFtcDsgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KQomIzQzOwkJCWxlbl9kZWNhcF9taW4gJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7CiYjNDM7CiYjNDM7CQlpZiAobGVuX2RpZmZfYWJzICZsdDsgbGVuX2RlY2FwX21pbikKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCWlmIChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0KQogCQkJbGVuX21pbiA9IHNpemVvZihzdHJ1Y3QgaXBoZHIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNjoKJiM0MzsKJiM0MzsJCWlmIChmbGFncyAmYW1wOyBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY2KQogCQkJbGVuX21pbiA9IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9CiAJfQogCiAJbGVuX2N1ciA9IHNrYi0mZ3Q7bGVuIC0gc2tiX25ldHdvcmtfb2Zmc2V0KHNrYik7CmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKaW5kZXggZmZkOTZlOGI5MjBiZC4uNzMyYjM1Y2MwOGQxYyAxMDA2NDQKLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaApAQCAtMzAzOCw4ICYjNDM7MzAzOCwzNCBAQCB1bmlvbiBicGZfYXR0ciB7CiAgKgogICoJCSogKipCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0KiosCiAgKgkJICAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjYqKjoKLSAqCQkgIEluZGljYXRlIHRoZSBuZXcgSVAgaGVhZGVyIHZlcnNpb24gYWZ0ZXIgZGVjYXBzdWxhdGluZyB0aGUgb3V0ZXIKLSAqCQkgIElQIGhlYWRlci4gVXNlZCB3aGVuIHRoZSBpbm5lciBhbmQgb3V0ZXIgSVAgdmVyc2lvbnMgYXJlIGRpZmZlcmVudC4KJiM0MzsgKgkJICBJbmRpY2F0ZSB0aGUgbmV3IElQIGhlYWRlciB2ZXJzaW9uIGFmdGVyIGRlY2Fwc3VsYXRpbmcgdGhlCiYjNDM7ICoJCSAgb3V0ZXIgSVAgaGVhZGVyLiBVc2VkIHdoZW4gdGhlIGlubmVyIGFuZCBvdXRlciBJUCB2ZXJzaW9ucwomIzQzOyAqCQkgIGFyZSBkaWZmZXJlbnQuIFRoZXNlIGZsYWdzIG9ubHkgdHJpZ2dlciBhIHByb3RvY29sIGNoYW5nZQomIzQzOyAqCQkgIHdpdGhvdXQgY2xlYXJpbmcgYW55IHR1bm5lbC1zcGVjaWZpYyBHU08gZmxhZ3MuCiYjNDM7ICoKJiM0MzsgKgkJKiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRSoqOgomIzQzOyAqCQkgIENsZWFyIEdSRSB0dW5uZWwgR1NPIGZsYWdzIChTS0JfR1NPX0dSRSBhbmQgU0tCX0dTT19HUkVfQ1NVTSkKJiM0MzsgKgkJICB3aGVuIGRlY2Fwc3VsYXRpbmcgYSBHUkUgdHVubmVsLgomIzQzOyAqCiYjNDM7ICoJCSogKipCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9VRFAqKjoKJiM0MzsgKgkJICBDbGVhciBVRFAgdHVubmVsIEdTTyBmbGFncyAoU0tCX0dTT19VRFBfVFVOTkVMIGFuZAomIzQzOyAqCQkgIFNLQl9HU09fVURQX1RVTk5FTF9DU1VNKSB3aGVuIGRlY2Fwc3VsYXRpbmcgYSBVRFAgdHVubmVsLgomIzQzOyAqCiYjNDM7ICoJCSogKipCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDQqKjoKJiM0MzsgKgkJICBDbGVhciBJUElQL1NJVCB0dW5uZWwgR1NPIGZsYWcgKFNLQl9HU09fSVBYSVA0KSB3aGVuIGRlY2Fwc3VsYXRpbmcKJiM0MzsgKgkJICBhIHR1bm5lbCB3aXRoIGFuIG91dGVyIElQdjQgaGVhZGVyIChJUHY0LWluLUlQdjQgb3IgSVB2Ni1pbi1JUHY0KS4KJiM0MzsgKgomIzQzOyAqCQkqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2Kio6CiYjNDM7ICoJCSAgQ2xlYXIgSVB2NiBlbmNhcHN1bGF0aW9uIHR1bm5lbCBHU08gZmxhZyAoU0tCX0dTT19JUFhJUDYpIHdoZW4KJiM0MzsgKgkJICBkZWNhcHN1bGF0aW5nIGEgdHVubmVsIHdpdGggYW4gb3V0ZXIgSVB2NiBoZWFkZXIgKElQdjYtaW4tSVB2NgomIzQzOyAqCQkgIG9yIElQdjQtaW4tSVB2NikuCiYjNDM7ICoKJiM0MzsgKgkJV2hlbiB1c2luZyB0aGUgZGVjYXBzdWxhdGlvbiBmbGFncyBhYm92ZSwgdGhlIHNrYi0mZ3Q7ZW5jYXBzdWxhdGlvbgomIzQzOyAqCQlmbGFnIGlzIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCBpZiBhbGwgdHVubmVsLXNwZWNpZmljIEdTTyBmbGFncwomIzQzOyAqCQkoU0tCX0dTT19VRFBfVFVOTkVMLCBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSwgU0tCX0dTT19HUkUsCiYjNDM7ICoJCVNLQl9HU09fR1JFX0NTVU0sIFNLQl9HU09fSVBYSVA0LCBTS0JfR1NPX0lQWElQNikgaGF2ZSBiZWVuCiYjNDM7ICoJCXJlbW92ZWQgZnJvbSB0aGUgcGFja2V0LiBUaGlzIGhhbmRsZXMgY2FzZXMgd2hlcmUgYWxsIHR1bm5lbAomIzQzOyAqCQlsYXllcnMgaGF2ZSBiZWVuIGRlY2Fwc3VsYXRlZC4KICAqCiAgKiAJCUEgY2FsbCB0byB0aGlzIGhlbHBlciBpcyBzdXNjZXB0aWJsZSB0byBjaGFuZ2UgdGhlIHVuZGVybHlpbmcKICAqIAkJcGFja2V0IGJ1ZmZlci4gVGhlcmVmb3JlLCBhdCBsb2FkIHRpbWUsIGFsbCBjaGVja3Mgb24gcG9pbnRlcnMKQEAgLTYyODMsNyAmIzQzOzYzMDksNyBAQCBlbnVtIHsKIH07CiAKIC8qIEJQRl9GVU5DX3NrYl9hZGp1c3Rfcm9vbSBmbGFncy4gKi8KLWVudW0gewomIzQzO2VudW0gYnBmX2Fkal9yb29tX2ZsYWdzIHsKIAlCUEZfRl9BREpfUk9PTV9GSVhFRF9HU08JPSAoMVVMTCAmbHQ7Jmx0OyAwKSwKIAlCUEZfRl9BREpfUk9PTV9FTkNBUF9MM19JUFY0CT0gKDFVTEwgJmx0OyZsdDsgMSksCiAJQlBGX0ZfQURKX1JPT01fRU5DQVBfTDNfSVBWNgk9ICgxVUxMICZsdDsmbHQ7IDIpLApAQCAtNjI5Myw2ICYjNDM7NjMxOSwxMCBAQCBlbnVtIHsKIAlCUEZfRl9BREpfUk9PTV9FTkNBUF9MMl9FVEgJPSAoMVVMTCAmbHQ7Jmx0OyA2KSwKIAlCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0CT0gKDFVTEwgJmx0OyZsdDsgNyksCiAJQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNgk9ICgxVUxMICZsdDsmbHQ7IDgpLAomIzQzOwlCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUJPSAoMVVMTCAmbHQ7Jmx0OyA5KSwKJiM0MzsJQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQCT0gKDFVTEwgJmx0OyZsdDsgMTApLAomIzQzOwlCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDQJPSAoMVVMTCAmbHQ7Jmx0OyAxMSksCiYjNDM7CUJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNgk9ICgxVUxMICZsdDsmbHQ7IDEyKSwKIH07CiAKIGVudW0gewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF90Y190dW5uZWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfdGNfdHVubmVsLmMKaW5kZXggMWFhN2M5NDYzOTgwYi4uNjdiYTI3ZDY5MzQ3NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF90Y190dW5uZWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3RjX3R1bm5lbC5jCkBAIC00MzgsNyAmIzQzOzQzOCw2IEBAIHN0YXRpYyBpbnQgc2V0dXAodm9pZCkKIAlTWVMoZmFpbF9jbG9zZV9uc19jbGllbnQsICYjMzQ7aXAgbGluayBhZGQgJXMgdHlwZSB2ZXRoIHBlZXIgbmFtZSAlcyYjMzQ7LAogCSAgICAmIzM0O3ZldGgxIG10dSAxNTAwIG5ldG5zICYjMzQ7IENMSUVOVF9OUyAmIzM0OyBhZGRyZXNzICYjMzQ7IE1BQ19BRERSX1ZFVEgxLAogCSAgICAmIzM0O3ZldGgyIG10dSAxNTAwIG5ldG5zICYjMzQ7IFNFUlZFUl9OUyAmIzM0OyBhZGRyZXNzICYjMzQ7IE1BQ19BRERSX1ZFVEgyKTsKLQlTWVMoZmFpbF9jbG9zZV9uc19jbGllbnQsICYjMzQ7ZXRodG9vbCAtSyB2ZXRoMSB0c28gb2ZmJiMzNDspOwogCVNZUyhmYWlsX2Nsb3NlX25zX2NsaWVudCwgJiMzNDtpcCBsaW5rIHNldCB2ZXRoMSB1cCYjMzQ7KTsKIAluc3Rva2VuX3NlcnZlciA9IG9wZW5fbmV0bnMoU0VSVkVSX05TKTsKIAlpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbl9zZXJ2ZXIsICYjMzQ7b3BlbiBzZXJ2ZXIgbnMmIzM0OykpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y190dW5uZWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3R1bm5lbC5jCmluZGV4IDczNzZkZjQwNWE2YmUuLjg1M2JjYTk2MjkxMDMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3R1bm5lbC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3R1bm5lbC5jCkBAIC02LDYgJiM0Mzs2LDcgQEAKIAogI2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwogI2luY2x1ZGUgJmx0O2JwZi9icGZfZW5kaWFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfY29yZV9yZWFkLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2JwZl90cmFjaW5nX25ldC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7YnBmX2NvbXBpbGVyLmgmIzM0OwogCkBAIC0zNyw2ICYjNDM7MzgsMjIgQEAgc3RydWN0IHZ4bGFuaGRyX19fbG9jYWwgewogCiAjZGVmaW5lCUVYVFBST1RPX1ZYTEFOCTB4MQogCiYjNDM7I2RlZmluZSBTS0JfR1NPX1VEUF9UVU5ORUxfTUFTSwkoU0tCX0dTT19VRFBfVFVOTkVMIHwJCQlcCiYjNDM7CQkJCSBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSkKJiM0MzsKJiM0MzsjZGVmaW5lIFNLQl9HU09fVFVOTkVMX01BU0sJKFNLQl9HU09fVURQX1RVTk5FTF9NQVNLIHwJCVwKJiM0MzsJCQkJIFNLQl9HU09fR1JFIHwJCQkJXAomIzQzOwkJCQkgU0tCX0dTT19HUkVfQ1NVTSB8CQkJXAomIzQzOwkJCQkgU0tCX0dTT19JUFhJUDQgfAkJCVwKJiM0MzsJCQkJIFNLQl9HU09fSVBYSVA2IHwJCQlcCiYjNDM7CQkJCSBTS0JfR1NPX0VTUCkKJiM0MzsKJiM0MzsjZGVmaW5lIEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X01BU0sJKEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCB8CVwKJiM0MzsJCQkJCSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUpCiYjNDM7CiYjNDM7I2RlZmluZSBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLCShCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDQgfAlcCiYjNDM7CQkJCQkgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KQomIzQzOwogI2RlZmluZQlWWExBTl9GTEFHUyAgICAgYnBmX2h0b25sKDEmbHQ7Jmx0OzI3KQogI2RlZmluZQlWTklfSUQJCTEKICNkZWZpbmUJVlhMQU5fVk5JCWJwZl9odG9ubChWTklfSUQgJmx0OyZsdDsgOCkKQEAgLTU4OSw5ICYjNDM7NjA2LDEyIEBAIGludCBfX2VuY2FwX2lwNnZ4bGFuX2V0aChzdHJ1Y3QgX19za19idWZmICpza2IpCiAJCXJldHVybiBUQ19BQ1RfT0s7CiB9CiAKLXN0YXRpYyBpbnQgZGVjYXBfaW50ZXJuYWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiLCBpbnQgb2ZmLCBpbnQgbGVuLCBjaGFyIHByb3RvKQomIzQzO3N0YXRpYyBpbnQgZGVjYXBfaW50ZXJuYWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiLCBpbnQgb2ZmLCBpbnQgbGVuLCBjaGFyIHByb3RvLAomIzQzOwkJCSAgX191NjQgaXB4aXBfZmxhZykKIHsKIAlfX3U2NCBmbGFncyA9IEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTzsKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKmtza2I7CiYjNDM7CXN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNoaW5mbzsKIAlzdHJ1Y3QgaXB2Nl9vcHRfaGRyIGlwNl9vcHRfaGRyOwogCXN0cnVjdCBncmVfaGRyIGdyZWg7CiAJc3RydWN0IHVkcGhkciB1ZHBoOwpAQCAtNTk5LDEwICYjNDM7NjE5LDEyIEBAIHN0YXRpYyBpbnQgZGVjYXBfaW50ZXJuYWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiLCBpbnQgb2ZmLCBpbnQgbGVuLCBjaGFyIHByb3RvKQogCiAJc3dpdGNoIChwcm90bykgewogCWNhc2UgSVBQUk9UT19JUElQOgotCQlmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0OwomIzQzOwkJZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNCB8CiYjNDM7CQkJIGlweGlwX2ZsYWc7CiAJCWJyZWFrOwogCWNhc2UgSVBQUk9UT19JUFY2OgotCQlmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY2OwomIzQzOwkJZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNiB8CiYjNDM7CQkJIGlweGlwX2ZsYWc7CiAJCWJyZWFrOwogCWNhc2UgTkVYVEhEUl9ERVNUOgogCQlpZiAoYnBmX3NrYl9sb2FkX2J5dGVzKHNrYiwgb2ZmICYjNDM7IGxlbiwgJmFtcDtpcDZfb3B0X2hkciwKQEAgLTYxMCwxMCAmIzQzOzYzMiwxMiBAQCBzdGF0aWMgaW50IGRlY2FwX2ludGVybmFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiwgaW50IG9mZiwgaW50IGxlbiwgY2hhciBwcm90bykKIAkJCXJldHVybiBUQ19BQ1RfT0s7CiAJCXN3aXRjaCAoaXA2X29wdF9oZHIubmV4dGhkcikgewogCQljYXNlIElQUFJPVE9fSVBJUDoKLQkJCWZsYWdzIHw9IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQ7CiYjNDM7CQkJZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNCB8CiYjNDM7CQkJCSBpcHhpcF9mbGFnOwogCQkJYnJlYWs7CiAJCWNhc2UgSVBQUk9UT19JUFY2OgotCQkJZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNjsKJiM0MzsJCQlmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY2IHwKJiM0MzsJCQkJIGlweGlwX2ZsYWc7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXJldHVybiBUQ19BQ1RfT0s7CkBAIC02MjEsNiAmIzQzOzY0NSwxMSBAQCBzdGF0aWMgaW50IGRlY2FwX2ludGVybmFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiwgaW50IG9mZiwgaW50IGxlbiwgY2hhciBwcm90bykKIAkJYnJlYWs7CiAJY2FzZSBJUFBST1RPX0dSRToKIAkJb2xlbiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBncmVfaGRyKTsKJiM0MzsJCWlmICghYnBmX2NvcmVfZW51bV92YWx1ZV9leGlzdHMoZW51bSBicGZfYWRqX3Jvb21fZmxhZ3MsCiYjNDM7CQkJCQkJQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFKSkKJiM0MzsJCQlyZXR1cm4gVENfQUNUX1NIT1Q7CiYjNDM7CQlmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkU7CiYjNDM7CiAJCWlmIChicGZfc2tiX2xvYWRfYnl0ZXMoc2tiLCBvZmYgJiM0MzsgbGVuLCAmYW1wO2dyZWgsIHNpemVvZihncmVoKSkgJmx0OyAwKQogCQkJcmV0dXJuIFRDX0FDVF9PSzsKIAkJc3dpdGNoIChicGZfbnRvaHMoZ3JlaC5wcm90b2NvbCkpIHsKQEAgLTYzNCw2ICYjNDM7NjYzLDEwIEBAIHN0YXRpYyBpbnQgZGVjYXBfaW50ZXJuYWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiLCBpbnQgb2ZmLCBpbnQgbGVuLCBjaGFyIHByb3RvKQogCQlicmVhazsKIAljYXNlIElQUFJPVE9fVURQOgogCQlvbGVuICYjNDM7PSBzaXplb2Yoc3RydWN0IHVkcGhkcik7CiYjNDM7CQlpZiAoIWJwZl9jb3JlX2VudW1fdmFsdWVfZXhpc3RzKGVudW0gYnBmX2Fkal9yb29tX2ZsYWdzLAomIzQzOwkJCQkJCUJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCkpCiYjNDM7CQkJcmV0dXJuIFRDX0FDVF9TSE9UOwomIzQzOwkJZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQOwogCQlpZiAoYnBmX3NrYl9sb2FkX2J5dGVzKHNrYiwgb2ZmICYjNDM7IGxlbiwgJmFtcDt1ZHBoLCBzaXplb2YodWRwaCkpICZsdDsgMCkKIAkJCXJldHVybiBUQ19BQ1RfT0s7CiAJCXN3aXRjaCAoYnBmX250b2hzKHVkcGguZGVzdCkpIHsKQEAgLTY1NSw2ICYjNDM7Njg4LDQwIEBAIHN0YXRpYyBpbnQgZGVjYXBfaW50ZXJuYWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiLCBpbnQgb2ZmLCBpbnQgbGVuLCBjaGFyIHByb3RvKQogCWlmIChicGZfc2tiX2FkanVzdF9yb29tKHNrYiwgLW9sZW4sIEJQRl9BREpfUk9PTV9NQUMsIGZsYWdzKSkKIAkJcmV0dXJuIFRDX0FDVF9TSE9UOwogCiYjNDM7CWtza2IgPSBicGZfY2FzdF90b19rZXJuX2N0eChza2IpOwomIzQzOwlzaGluZm8gPSBicGZfY29yZV9jYXN0KGtza2ItJmd0O2hlYWQgJiM0Mzsga3NrYi0mZ3Q7ZW5kLCBzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvKTsKJiM0MzsJaWYgKHNoaW5mby0mZ3Q7Z3NvX3NpemUpIHsKJiM0MzsJCWlmICgoZmxhZ3MgJmFtcDsgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKHNoaW5mby0mZ3Q7Z3NvX3R5cGUgJmFtcDsgU0tCX0dTT19VRFBfVFVOTkVMX01BU0spKQomIzQzOwkJCXJldHVybiBUQ19BQ1RfU0hPVDsKJiM0MzsKJiM0MzsJCWlmICgoZmxhZ3MgJmFtcDsgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKHNoaW5mby0mZ3Q7Z3NvX3R5cGUgJmFtcDsgKFNLQl9HU09fR1JFIHwgU0tCX0dTT19HUkVfQ1NVTSkpKQomIzQzOwkJCXJldHVybiBUQ19BQ1RfU0hPVDsKJiM0MzsKJiM0MzsJCWlmICgoZmxhZ3MgJmFtcDsgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0KSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKHNoaW5mby0mZ3Q7Z3NvX3R5cGUgJmFtcDsgU0tCX0dTT19JUFhJUDQpKQomIzQzOwkJCXJldHVybiBUQ19BQ1RfU0hPVDsKJiM0MzsKJiM0MzsJCWlmICgoZmxhZ3MgJmFtcDsgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKHNoaW5mby0mZ3Q7Z3NvX3R5cGUgJmFtcDsgU0tCX0dTT19JUFhJUDYpKQomIzQzOwkJCXJldHVybiBUQ19BQ1RfU0hPVDsKJiM0MzsKJiM0MzsJCWlmIChmbGFncyAmYW1wOyAoQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSyB8CiYjNDM7CQkJICAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKSkgewomIzQzOwkJCWlmICgoc2hpbmZvLSZndDtnc29fdHlwZSAmYW1wOyBTS0JfR1NPX1RVTk5FTF9NQVNLKSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgICFrc2tiLSZndDtlbmNhcHN1bGF0aW9uKQomIzQzOwkJCQlyZXR1cm4gVENfQUNUX1NIT1Q7CiYjNDM7CQkJaWYgKCEoc2hpbmZvLSZndDtnc29fdHlwZSAmYW1wOyBTS0JfR1NPX1RVTk5FTF9NQVNLKSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgIGtza2ItJmd0O2VuY2Fwc3VsYXRpb24pCiYjNDM7CQkJCXJldHVybiBUQ19BQ1RfU0hPVDsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIGlmICgoZmxhZ3MgJmFtcDsgKEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X01BU0sgfAomIzQzOwkJCSAgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTSykpICZhbXA7JmFtcDsKJiM0MzsJCSAgIGtza2ItJmd0O2VuY2Fwc3VsYXRpb24pIHsKJiM0MzsJCXJldHVybiBUQ19BQ1RfU0hPVDsKJiM0MzsJfQomIzQzOwogCXJldHVybiBUQ19BQ1RfT0s7CiB9CiAKQEAgLTY2Miw2ICYjNDM7NzI5LDEwIEBAIHN0YXRpYyBpbnQgZGVjYXBfaXB2NChzdHJ1Y3QgX19za19idWZmICpza2IpCiB7CiAJc3RydWN0IGlwaGRyIGlwaF9vdXRlcjsKIAomIzQzOwlpZiAoIWJwZl9jb3JlX2VudW1fdmFsdWVfZXhpc3RzKGVudW0gYnBmX2Fkal9yb29tX2ZsYWdzLAomIzQzOwkJCQkJQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0KSkKJiM0MzsJCXJldHVybiBUQ19BQ1RfU0hPVDsKJiM0MzsKIAlpZiAoYnBmX3NrYl9sb2FkX2J5dGVzKHNrYiwgRVRIX0hMRU4sICZhbXA7aXBoX291dGVyLAogCQkJICAgICAgIHNpemVvZihpcGhfb3V0ZXIpKSAmbHQ7IDApCiAJCXJldHVybiBUQ19BQ1RfT0s7CkBAIC02NzAsMTkgJiM0Mzs3NDEsMjUgQEAgc3RhdGljIGludCBkZWNhcF9pcHY0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKIAkJcmV0dXJuIFRDX0FDVF9PSzsKIAogCXJldHVybiBkZWNhcF9pbnRlcm5hbChza2IsIEVUSF9ITEVOLCBzaXplb2YoaXBoX291dGVyKSwKLQkJCSAgICAgIGlwaF9vdXRlci5wcm90b2NvbCk7CiYjNDM7CQkJICAgICAgaXBoX291dGVyLnByb3RvY29sLAomIzQzOwkJCSAgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCk7CiB9CiAKIHN0YXRpYyBpbnQgZGVjYXBfaXB2NihzdHJ1Y3QgX19za19idWZmICpza2IpCiB7CiAJc3RydWN0IGlwdjZoZHIgaXBoX291dGVyOwogCiYjNDM7CWlmICghYnBmX2NvcmVfZW51bV92YWx1ZV9leGlzdHMoZW51bSBicGZfYWRqX3Jvb21fZmxhZ3MsCiYjNDM7CQkJCQlCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYpKQomIzQzOwkJcmV0dXJuIFRDX0FDVF9TSE9UOwomIzQzOwogCWlmIChicGZfc2tiX2xvYWRfYnl0ZXMoc2tiLCBFVEhfSExFTiwgJmFtcDtpcGhfb3V0ZXIsCiAJCQkgICAgICAgc2l6ZW9mKGlwaF9vdXRlcikpICZsdDsgMCkKIAkJcmV0dXJuIFRDX0FDVF9PSzsKIAogCXJldHVybiBkZWNhcF9pbnRlcm5hbChza2IsIEVUSF9ITEVOLCBzaXplb2YoaXBoX291dGVyKSwKLQkJCSAgICAgIGlwaF9vdXRlci5uZXh0aGRyKTsKJiM0MzsJCQkgICAgICBpcGhfb3V0ZXIubmV4dGhkciwKJiM0MzsJCQkgICAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYpOwogfQogCiBTRUMoJiMzNDt0YyYjMzQ7KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyMjYKCQkJCQkJCW91dHB1dDogMjIyCgkJCQkJCQl0aG91Z2h0czogMTA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBQYXRjaCBmb3IgYGJwZl9za2JfYWRqdXN0X3Jvb21gKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBpbnRyb2R1Y2luZyBzb21lIG5ldyBmbGFncyBmb3IgdGhlIGBicGZfc2tiX2FkanVzdF9yb29tYCBoZWxwZXIgaW4gQlBGLiBTcGVjaWZpY2FsbHksIHRoZXNlIGZsYWdzOiBgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFYCwgYEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUGAsIGBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDRgLCBhbmQgYEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNmAuIEl0IHNlZW1zIHRoZXNlIGFyZSBhbGwgYWJvdXQgc2VsZWN0aXZlbHkgY2xlYXJpbmcgR1NPIHR1bm5lbCBmbGFncyB3aGVuIHdlJiMzOTtyZSBkZWNhcHN1bGF0aW5nIHBhY2tldHMsIHdoaWNoIG1ha2VzIHNlbnNlLiBXZSBjYW4gc2VlIHRoaXMgbG9naWMgYXBwbGllZCB3aXRoaW4gYGJwZl9za2JfbmV0X3Nocmlua2AgYW5kIGBicGZfc2tiX2FkanVzdF9yb29tYC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zLCBzbyBsZXQmIzM5O3MgZGlnIGludG8gdGhlIGRldGFpbHMuIEkgc2VlIHRoYXQgYGJwZl9za2JfbmV0X3Nocmlua2AgaXMgZG9pbmcgY29uZGl0aW9uYWwgR1NPIGZsYWcgY2xlYXJpbmcgYmFzZWQgb24gdGhlICYjMzQ7ZGVjYXAgdHlwZSYjMzQ7LiBJdCYjMzk7cyBvbmx5IGNsZWFyaW5nIHRoZSBHU08gZmxhZ3MgdGhhdCBhcmUgcmVsZXZhbnQgdG8gdGhlIGxheWVyIGJlaW5nIHJlbW92ZWQsIHdoaWNoIGlzIGdvb2QuIFRoZW4gYGJwZl9za2JfYWRqdXN0X3Jvb21gIGlzIGJlaW5nIG1vZGlmaWVkIHRvIGNhbGN1bGF0ZSBgbGVuX2RlY2FwX21pbmAgYW5kIHZhbGlkYXRlIHRoYXQgdGhlIGNoYW5nZSBpbiBsZW5ndGggaXMgc3VmZmljaWVudCBmb3IgdGhlIGRlY2Fwc3VsYXRpb24uCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGludm9sdmUgbW9kaWZ5aW5nIGBzaGluZm8tJmd0O2dzb190eXBlYCBhbmQgYHNrYi0mZ3Q7ZW5jYXBzdWxhdGlvbmAgYmFzZWQgb24gdGhlc2UgbmV3IGZsYWdzLiBJJiMzOTttIGZvY3VzaW5nIG9uIHdoZXRoZXIgdGhlcmUmIzM5O3MgYW55IGNoYW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MsIGluZm9ybWF0aW9uIGxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBiZWluZyBpbnRyb2R1Y2VkLiBGcm9tIHdoYXQgSSBzZWUsIG5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBzZW50IHRvIHVzZXJzcGFjZS4gVGhlcmUmIzM5O3Mgbm8gZmFuY3kgbmV3IGFsbG9jYXRpb24gb2YgY29tcGxleCBzdHJ1Y3R1cmVzLCBhbmQgdGhlIGNoYW5nZSBpcyBsaW1pdGVkIHRvIGJpdHdpc2Ugb3BlcmF0aW9ucyBvbiBgZ3NvX3R5cGVgIGFuZCBgZW5jYXBzdWxhdGlvbmAuIEl0IGFsc28gY2hlY2tzIGBsZW5fZGlmZl9hYnNgIGFnYWluc3QgdGhlIG1pbmltdW0gbGVuZ3RoIHRvIHJlbW92ZS4KCkFscmlnaHQsIHNvIHRoZSBtb2RpZmljYXRpb25zIGFyZSBzdHJhaWdodGZvcndhcmQgYml0d2lzZSBvcGVyYXRpb25zIG9uIGV4aXN0aW5nIGZpZWxkcywgYW5kIHRoZXJlJiMzOTtzIGEgbGVuZ3RoIGNoZWNrIGJlaW5nIGRvbmUuIFRoaXMgc2hvdWxkIHByZXZlbnQgYW55IG91dC1vZi1ib3VuZHMgcmVhZHMuIEkgdGhpbmsgd2UgYXJlIGdvb2QgaGVyZSwgYXMgS01TQU4gc2hvdWxkbiYjMzk7dCBiZSBuZWVkZWQgYmVjYXVzZSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBzaG91bGQgaGFuZGxlIHRoZSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLgoKTGV0IG1lIGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIG1ha2Ugc3VyZS4gSSYjMzk7bGwgZG91YmxlLWNoZWNrIHdoYXQgYGJwZl9za2JfbmV0X2Jhc2VfbGVuYCBkb2VzLCBqdXN0IGluIGNhc2UgdGhhdCYjMzk7cyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBaCwgaXQganVzdCByZWFkcyBgc2tiLSZndDtwcm90b2NvbGAgYW5kIHJldHVybnMgdGhlIGJhc2UgaGVhZGVyIGxlbmd0aC4gSXQgbG9va3MgbGlrZSB0aGUgYGxlbl9kaWZmX2Fic2AgY2hlY2sgaW4gYGJwZl9za2JfYWRqdXN0X3Jvb21gIGVuc3VyZXMgd2UmIzM5O3JlIHNocmlua2luZyB0aGUgcGFja2V0IGJ5IGF0IGxlYXN0IHRoZSByZXF1aXJlZCBhbW91bnQsIGFuZCBLQVNBTiBzaG91bGQgaGFuZGxlIGFueXRoaW5nIHRoYXQgc2xpcHMgdGhyb3VnaC4KClRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IE5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlLiBUaGUgY2hhbmdlcyBzZWVtIGxvY2FsaXplZCBhbmQgc2FmZS4gVGhlIHBhdGNoIGlzIG1hbmlwdWxhdGluZyBleGlzdGluZyBCUEYgaGVscGVycyB0byBzZWxlY3RpdmVseSBjbGVhciBzb21lIGV4aXN0aW5nIGZsYWdzIGR1cmluZyBwYWNrZXQgZGVjYXBzdWxhdGlvbiwgdGhlcmUgYXJlIGFwcHJvcHJpYXRlIHNhZmV0eSBjaGVja3MgaW4gcGxhY2UsIGFuZCB0aGVyZSBhcmUgbm8gY2hhbmdlcyB0byBhbnkgZGF0YSBzdHJ1Y3R1cmUgdGhhdCB3b3VsZCBwb3RlbnRpYWxseSBhbGxvdyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYmUgcmVhZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgZmxhZ3MgZm9yIHRoZSBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgQlBGIGhlbHBlciB0byBzZWxlY3RpdmVseSBjbGVhciBHU08gdHVubmVsIGZsYWdzIGFuZCB0aGUgYHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uYCBmbGFnIGR1cmluZyBwYWNrZXQgZGVjYXBzdWxhdGlvbi4gVGhlIGNoYW5nZXMgY29uc2lzdCBvZiBiaXR3aXNlIG9wZXJhdGlvbnMgb24gZXhpc3RpbmcgYHNrYl9zaGFyZWRfaW5mb2AgZmllbGRzIChgZ3NvX3R5cGVgKSBhbmQgYHNrYmAgZmllbGRzIChgZW5jYXBzdWxhdGlvbmApLCBhcyB3ZWxsIGFzIGxlbmd0aCB2YWxpZGF0aW9uIGNoZWNrcyB0byBlbnN1cmUgdGhlIHBhY2tldCBpcyBzaHJ1bmsgYnkgYXQgbGVhc3QgdGhlIHNpemUgb2YgdGhlIGRlY2Fwc3VsYXRlZCBoZWFkZXJzLlxuXG5UaGVzZSBtb2RpZmljYXRpb25zIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBkdWUgdG8gaW5jb3JyZWN0IGxlbmd0aCBjYWxjdWxhdGlvbnMpIHdvdWxkIGJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBmbGFncyBmb3IgdGhlIGBicGZfc2tiX2FkanVzdF9yb29tYCBCUEYgaGVscGVyIHRvIHNlbGVjdGl2ZWx5IGNsZWFyIEdTTyB0dW5uZWwgZmxhZ3MgYW5kIHRoZSBgc2tiLVx1MDAzZWVuY2Fwc3VsYXRpb25gIGZsYWcgZHVyaW5nIHBhY2tldCBkZWNhcHN1bGF0aW9uLiBUaGUgY2hhbmdlcyBjb25zaXN0IG9mIGJpdHdpc2Ugb3BlcmF0aW9ucyBvbiBleGlzdGluZyBgc2tiX3NoYXJlZF9pbmZvYCBmaWVsZHMgKGBnc29fdHlwZWApIGFuZCBgc2tiYCBmaWVsZHMgKGBlbmNhcHN1bGF0aW9uYCksIGFzIHdlbGwgYXMgbGVuZ3RoIHZhbGlkYXRpb24gY2hlY2tzIHRvIGVuc3VyZSB0aGUgcGFja2V0IGlzIHNocnVuayBieSBhdCBsZWFzdCB0aGUgc2l6ZSBvZiB0aGUgZGVjYXBzdWxhdGVkIGhlYWRlcnMuXG5cblRoZXNlIG1vZGlmaWNhdGlvbnMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGR1ZSB0byBpbmNvcnJlY3QgbGVuZ3RoIGNhbGN1bGF0aW9ucykgd291bGQgYmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6NDk6MDEuMjU3NjQxNzg5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyMTc4MjAyNTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRfQ0xTX0JQRlwiLFxuICAgIFwiTkVUX0FDVF9CUEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc2tiX2FkanVzdF9yb29tXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBmbGFncyBmb3IgdGhlIGBicGZfc2tiX2FkanVzdF9yb29tYCBCUEYgaGVscGVyIHRvIHNlbGVjdGl2ZWx5IGNsZWFyIEdTTyB0dW5uZWwgZmxhZ3MgYW5kIHRoZSBgc2tiLVxcdTAwM2VlbmNhcHN1bGF0aW9uYCBmbGFnIGR1cmluZyBwYWNrZXQgZGVjYXBzdWxhdGlvbi4gVGhlIGNoYW5nZXMgY29uc2lzdCBvZiBiaXR3aXNlIG9wZXJhdGlvbnMgb24gZXhpc3RpbmcgYHNrYl9zaGFyZWRfaW5mb2AgZmllbGRzIChgZ3NvX3R5cGVgKSBhbmQgYHNrYmAgZmllbGRzIChgZW5jYXBzdWxhdGlvbmApLCBhcyB3ZWxsIGFzIGxlbmd0aCB2YWxpZGF0aW9uIGNoZWNrcyB0byBlbnN1cmUgdGhlIHBhY2tldCBpcyBzaHJ1bmsgYnkgYXQgbGVhc3QgdGhlIHNpemUgb2YgdGhlIGRlY2Fwc3VsYXRlZCBoZWFkZXJzLlxcblxcblRoZXNlIG1vZGlmaWNhdGlvbnMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGR1ZSB0byBpbmNvcnJlY3QgbGVuZ3RoIGNhbGN1bGF0aW9ucykgd291bGQgYmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG5ldyBmbGFncyB0byB0aGUgYnBmX3NrYl9hZGp1c3Rfcm9vbSBCUEYgaGVscGVyIHRvIGNsZWFyIHR1bm5lbC1zcGVjaWZpYyBHU08gZmxhZ3MgZHVyaW5nIGRlY2Fwc3VsYXRpb24uIFRoaXMgbW9kaWZpZXMgY29yZSBCUEYgbmV0d29ya2luZyBsb2dpYyByZWFjaGFibGUgdmlhIFRDIEJQRiBwcm9ncmFtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6NDk6MDEuMjU3NjQ4MTQ5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzM4ODgwNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmNTNiNzVkYjBkNjQzZTE1NDBiOGVhOGIxOWJhYzBiMzI4Y2NhMDllXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDEyIDE2OjQ5OjAwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxcbmluZGV4IGZmZDk2ZThiOTIwYmQuLjczMmIzNWNjMDhkMWMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuQEAgLTMwMzgsOCArMzAzOCwzNCBAQCB1bmlvbiBicGZfYXR0ciB7XFxuICAqXFxuICAqXFx0XFx0KiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQqKixcXG4gICpcXHRcXHQgICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNioqOlxcbi0gKlxcdFxcdCAgSW5kaWNhdGUgdGhlIG5ldyBJUCBoZWFkZXIgdmVyc2lvbiBhZnRlciBkZWNhcHN1bGF0aW5nIHRoZSBvdXRlclxcbi0gKlxcdFxcdCAgSVAgaGVhZGVyLiBVc2VkIHdoZW4gdGhlIGlubmVyIGFuZCBvdXRlciBJUCB2ZXJzaW9ucyBhcmUgZGlmZmVyZW50LlxcbisgKlxcdFxcdCAgSW5kaWNhdGUgdGhlIG5ldyBJUCBoZWFkZXIgdmVyc2lvbiBhZnRlciBkZWNhcHN1bGF0aW5nIHRoZVxcbisgKlxcdFxcdCAgb3V0ZXIgSVAgaGVhZGVyLiBVc2VkIHdoZW4gdGhlIGlubmVyIGFuZCBvdXRlciBJUCB2ZXJzaW9uc1xcbisgKlxcdFxcdCAgYXJlIGRpZmZlcmVudC4gVGhlc2UgZmxhZ3Mgb25seSB0cmlnZ2VyIGEgcHJvdG9jb2wgY2hhbmdlXFxuKyAqXFx0XFx0ICB3aXRob3V0IGNsZWFyaW5nIGFueSB0dW5uZWwtc3BlY2lmaWMgR1NPIGZsYWdzLlxcbisgKlxcbisgKlxcdFxcdCogKipCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUqKjpcXG4rICpcXHRcXHQgIENsZWFyIEdSRSB0dW5uZWwgR1NPIGZsYWdzIChTS0JfR1NPX0dSRSBhbmQgU0tCX0dTT19HUkVfQ1NVTSlcXG4rICpcXHRcXHQgIHdoZW4gZGVjYXBzdWxhdGluZyBhIEdSRSB0dW5uZWwuXFxuKyAqXFxuKyAqXFx0XFx0KiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCoqOlxcbisgKlxcdFxcdCAgQ2xlYXIgVURQIHR1bm5lbCBHU08gZmxhZ3MgKFNLQl9HU09fVURQX1RVTk5FTCBhbmRcXG4rICpcXHRcXHQgIFNLQl9HU09fVURQX1RVTk5FTF9DU1VNKSB3aGVuIGRlY2Fwc3VsYXRpbmcgYSBVRFAgdHVubmVsLlxcbisgKlxcbisgKlxcdFxcdCogKipCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDQqKjpcXG4rICpcXHRcXHQgIENsZWFyIElQSVAvU0lUIHR1bm5lbCBHU08gZmxhZyAoU0tCX0dTT19JUFhJUDQpIHdoZW4gZGVjYXBzdWxhdGluZ1xcbisgKlxcdFxcdCAgYSB0dW5uZWwgd2l0aCBhbiBvdXRlciBJUHY0IGhlYWRlciAoSVB2NC1pbi1JUHY0IG9yIElQdjYtaW4tSVB2NCkuXFxuKyAqXFxuKyAqXFx0XFx0KiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNioqOlxcbisgKlxcdFxcdCAgQ2xlYXIgSVB2NiBlbmNhcHN1bGF0aW9uIHR1bm5lbCBHU08gZmxhZyAoU0tCX0dTT19JUFhJUDYpIHdoZW5cXG4rICpcXHRcXHQgIGRlY2Fwc3VsYXRpbmcgYSB0dW5uZWwgd2l0aCBhbiBvdXRlciBJUHY2IGhlYWRlciAoSVB2Ni1pbi1JUHY2XFxuKyAqXFx0XFx0ICBvciBJUHY0LWluLUlQdjYpLlxcbisgKlxcbisgKlxcdFxcdFdoZW4gdXNpbmcgdGhlIGRlY2Fwc3VsYXRpb24gZmxhZ3MgYWJvdmUsIHRoZSBza2ItXFx1MDAzZWVuY2Fwc3VsYXRpb25cXG4rICpcXHRcXHRmbGFnIGlzIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCBpZiBhbGwgdHVubmVsLXNwZWNpZmljIEdTTyBmbGFnc1xcbisgKlxcdFxcdChTS0JfR1NPX1VEUF9UVU5ORUwsIFNLQl9HU09fVURQX1RVTk5FTF9DU1VNLCBTS0JfR1NPX0dSRSxcXG4rICpcXHRcXHRTS0JfR1NPX0dSRV9DU1VNLCBTS0JfR1NPX0lQWElQNCwgU0tCX0dTT19JUFhJUDYpIGhhdmUgYmVlblxcbisgKlxcdFxcdHJlbW92ZWQgZnJvbSB0aGUgcGFja2V0LiBUaGlzIGhhbmRsZXMgY2FzZXMgd2hlcmUgYWxsIHR1bm5lbFxcbisgKlxcdFxcdGxheWVycyBoYXZlIGJlZW4gZGVjYXBzdWxhdGVkLlxcbiAgKlxcbiAgKiBcXHRcXHRBIGNhbGwgdG8gdGhpcyBoZWxwZXIgaXMgc3VzY2VwdGlibGUgdG8gY2hhbmdlIHRoZSB1bmRlcmx5aW5nXFxuICAqIFxcdFxcdHBhY2tldCBidWZmZXIuIFRoZXJlZm9yZSwgYXQgbG9hZCB0aW1lLCBhbGwgY2hlY2tzIG9uIHBvaW50ZXJzXFxuQEAgLTYyODMsNyArNjMwOSw3IEBAIGVudW0ge1xcbiB9O1xcbiBcXG4gLyogQlBGX0ZVTkNfc2tiX2FkanVzdF9yb29tIGZsYWdzLiAqL1xcbi1lbnVtIHtcXG4rZW51bSBicGZfYWRqX3Jvb21fZmxhZ3Mge1xcbiBcXHRCUEZfRl9BREpfUk9PTV9GSVhFRF9HU09cXHQ9ICgxVUxMIFxcdTAwM2NcXHUwMDNjIDApLFxcbiBcXHRCUEZfRl9BREpfUk9PTV9FTkNBUF9MM19JUFY0XFx0PSAoMVVMTCBcXHUwMDNjXFx1MDAzYyAxKSxcXG4gXFx0QlBGX0ZfQURKX1JPT01fRU5DQVBfTDNfSVBWNlxcdD0gKDFVTEwgXFx1MDAzY1xcdTAwM2MgMiksXFxuQEAgLTYyOTMsNiArNjMxOSwxMCBAQCBlbnVtIHtcXG4gXFx0QlBGX0ZfQURKX1JPT01fRU5DQVBfTDJfRVRIXFx0PSAoMVVMTCBcXHUwMDNjXFx1MDAzYyA2KSxcXG4gXFx0QlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNFxcdD0gKDFVTEwgXFx1MDAzY1xcdTAwM2MgNyksXFxuIFxcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjZcXHQ9ICgxVUxMIFxcdTAwM2NcXHUwMDNjIDgpLFxcbitcXHRCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkVcXHQ9ICgxVUxMIFxcdTAwM2NcXHUwMDNjIDkpLFxcbitcXHRCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9VRFBcXHQ9ICgxVUxMIFxcdTAwM2NcXHUwMDNjIDEwKSxcXG4rXFx0QlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0XFx0PSAoMVVMTCBcXHUwMDNjXFx1MDAzYyAxMSksXFxuK1xcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNlxcdD0gKDFVTEwgXFx1MDAzY1xcdTAwM2MgMTIpLFxcbiB9O1xcbiBcXG4gZW51bSB7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcXG5pbmRleCAzNDIzNzM0MTI0YTViLi44OWVmZmZmM2JjNTI1IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXFxuKysrIGIvbmV0L2NvcmUvZmlsdGVyLmNcXG5AQCAtNTYsNiArNTYsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3NvY2tfcmV1c2Vwb3J0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvYnVzeV9wb2xsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvdGNwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvZ3JlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQveGZybS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3VkcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmX3RyYWNlLmhcXHUwMDNlXFxuQEAgLTM1NzIsMTQgKzM1NzMsMjcgQEAgc3RhdGljIHUzMiBicGZfc2tiX25ldF9iYXNlX2xlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAjZGVmaW5lIEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX01BU0tcXHQoQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNCB8IFxcXFxcXG4gXFx0XFx0XFx0XFx0XFx0IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjYpXFxuIFxcbi0jZGVmaW5lIEJQRl9GX0FESl9ST09NX01BU0tcXHRcXHQoQlBGX0ZfQURKX1JPT01fRklYRURfR1NPIHwgXFxcXFxcbi1cXHRcXHRcXHRcXHRcXHQgQlBGX0ZfQURKX1JPT01fRU5DQVBfTDNfTUFTSyB8IFxcXFxcXG4rI2RlZmluZSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLXFx0KEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRSlcXG4rXFxuKyNkZWZpbmUgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTS1xcdChCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDQgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYpXFxuK1xcbisjZGVmaW5lIEJQRl9GX0FESl9ST09NX0VOQ0FQX01BU0tcXHQoQlBGX0ZfQURKX1JPT01fRU5DQVBfTDNfTUFTSyB8IFxcXFxcXG4gXFx0XFx0XFx0XFx0XFx0IEJQRl9GX0FESl9ST09NX0VOQ0FQX0w0X0dSRSB8IFxcXFxcXG4gXFx0XFx0XFx0XFx0XFx0IEJQRl9GX0FESl9ST09NX0VOQ0FQX0w0X1VEUCB8IFxcXFxcXG4gXFx0XFx0XFx0XFx0XFx0IEJQRl9GX0FESl9ST09NX0VOQ0FQX0wyX0VUSCB8IFxcXFxcXG4gXFx0XFx0XFx0XFx0XFx0IEJQRl9GX0FESl9ST09NX0VOQ0FQX0wyKCBcXFxcXFxuLVxcdFxcdFxcdFxcdFxcdCAgQlBGX0FESl9ST09NX0VOQ0FQX0wyX01BU0spIHwgXFxcXFxcbi1cXHRcXHRcXHRcXHRcXHQgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSylcXG4rXFx0XFx0XFx0XFx0XFx0ICBCUEZfQURKX1JPT01fRU5DQVBfTDJfTUFTSykpXFxuK1xcbisjZGVmaW5lIEJQRl9GX0FESl9ST09NX0RFQ0FQX01BU0tcXHQoQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSyB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X01BU0sgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKVxcbitcXG4rI2RlZmluZSBCUEZfRl9BREpfUk9PTV9NQVNLXFx0XFx0KEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTyB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IEJQRl9GX0FESl9ST09NX0VOQ0FQX01BU0sgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBCUEZfRl9BREpfUk9PTV9ERUNBUF9NQVNLIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgQlBGX0ZfQURKX1JPT01fTk9fQ1NVTV9SRVNFVClcXG4gXFxuIHN0YXRpYyBpbnQgYnBmX3NrYl9uZXRfZ3JvdyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgb2ZmLCB1MzIgbGVuX2RpZmYsXFxuIFxcdFxcdFxcdCAgICB1NjQgZmxhZ3MpXFxuQEAgLTM3MDIsOCArMzcxNiw4IEBAIHN0YXRpYyBpbnQgYnBmX3NrYl9uZXRfc2hyaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvZmYsIHUzMiBsZW5fZGlmZixcXG4gXFx0Ym9vbCBkZWNhcCA9IGZsYWdzIFxcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSztcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdGlmICh1bmxpa2VseShmbGFncyBcXHUwMDI2IH4oQlBGX0ZfQURKX1JPT01fRklYRURfR1NPIHxcXG4tXFx0XFx0XFx0ICAgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX01BU0sgfFxcbitcXHRpZiAodW5saWtlbHkoZmxhZ3MgXFx1MDAyNiB+KEJQRl9GX0FESl9ST09NX0RFQ0FQX01BU0sgfFxcbitcXHRcXHRcXHQgICAgICAgQlBGX0ZfQURKX1JPT01fRklYRURfR1NPIHxcXG4gXFx0XFx0XFx0ICAgICAgIEJQRl9GX0FESl9ST09NX05PX0NTVU1fUkVTRVQpKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbkBAIC0zNzQwLDkgKzM3NTQsNDggQEAgc3RhdGljIGludCBicGZfc2tiX25ldF9zaHJpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG9mZiwgdTMyIGxlbl9kaWZmLFxcbiBcXHRcXHRpZiAoIShmbGFncyBcXHUwMDI2IEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTykpXFxuIFxcdFxcdFxcdHNrYl9pbmNyZWFzZV9nc29fc2l6ZShzaGluZm8sIGxlbl9kaWZmKTtcXG4gXFxuK1xcdFxcdC8qIFNlbGVjdGl2ZSBHU08gZmxhZyBjbGVhcmluZyBiYXNlZCBvbiBkZWNhcCB0eXBlLlxcbitcXHRcXHQgKiBPbmx5IGNsZWFyIHRoZSBmbGFncyBmb3IgdGhlIHR1bm5lbCBsYXllciBiZWluZyByZW1vdmVkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIChzaGluZm8tXFx1MDAzZWdzb190eXBlIFxcdTAwMjYgKFNLQl9HU09fVURQX1RVTk5FTCB8XFxuK1xcdFxcdFxcdFxcdFxcdCBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSkpKVxcbitcXHRcXHRcXHRzaGluZm8tXFx1MDAzZWdzb190eXBlIFxcdTAwMjY9IH4oU0tCX0dTT19VRFBfVFVOTkVMIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0pO1xcbitcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgKHNoaW5mby1cXHUwMDNlZ3NvX3R5cGUgXFx1MDAyNiAoU0tCX0dTT19HUkUgfCBTS0JfR1NPX0dSRV9DU1VNKSkpXFxuK1xcdFxcdFxcdHNoaW5mby1cXHUwMDNlZ3NvX3R5cGUgXFx1MDAyNj0gfihTS0JfR1NPX0dSRSB8XFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIFNLQl9HU09fR1JFX0NTVU0pO1xcbitcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0KSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgKHNoaW5mby1cXHUwMDNlZ3NvX3R5cGUgXFx1MDAyNiBTS0JfR1NPX0lQWElQNCkpXFxuK1xcdFxcdFxcdHNoaW5mby1cXHUwMDNlZ3NvX3R5cGUgXFx1MDAyNj0gflNLQl9HU09fSVBYSVA0O1xcbitcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgKHNoaW5mby1cXHUwMDNlZ3NvX3R5cGUgXFx1MDAyNiBTS0JfR1NPX0lQWElQNikpXFxuK1xcdFxcdFxcdHNoaW5mby1cXHUwMDNlZ3NvX3R5cGUgXFx1MDAyNj0gflNLQl9HU09fSVBYSVA2O1xcbitcXG4rXFx0XFx0LyogQ2xlYXIgZW5jYXBzdWxhdGlvbiBmbGFnIG9ubHkgd2hlbiBubyB0dW5uZWwgR1NPIGZsYWdzIHJlbWFpbiAqL1xcbitcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiAoQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSyB8XFxuK1xcdFxcdFxcdCAgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTSykpIHtcXG4rXFx0XFx0XFx0aWYgKCEoc2hpbmZvLVxcdTAwM2Vnc29fdHlwZSBcXHUwMDI2IChTS0JfR1NPX1VEUF9UVU5ORUwgfFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIFNLQl9HU09fVURQX1RVTk5FTF9DU1VNIHxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBTS0JfR1NPX0dSRSB8XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgU0tCX0dTT19HUkVfQ1NVTSB8XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgU0tCX0dTT19JUFhJUDQgfFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIFNLQl9HU09fSVBYSVA2IHxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBTS0JfR1NPX0VTUCkpKVxcbitcXHRcXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2VlbmNhcHN1bGF0aW9uKVxcbitcXHRcXHRcXHRcXHRcXHRza2ItXFx1MDAzZWVuY2Fwc3VsYXRpb24gPSAwO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHQvKiBIZWFkZXIgbXVzdCBiZSBjaGVja2VkLCBhbmQgZ3NvX3NlZ3MgcmVjb21wdXRlZC4gKi9cXG4gXFx0XFx0c2hpbmZvLVxcdTAwM2Vnc29fdHlwZSB8PSBTS0JfR1NPX0RPREdZO1xcbiBcXHRcXHRzaGluZm8tXFx1MDAzZWdzb19zZWdzID0gMDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogRm9yIG5vbi1HU08gcGFja2V0cywgY2xlYXIgZW5jYXBzdWxhdGlvbiBpZiBkZWNhcCBmbGFncyBhcmUgc2V0ICovXFxuK1xcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiAoQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSyB8XFxuK1xcdFxcdFxcdCAgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0spKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgc2tiLVxcdTAwM2VlbmNhcHN1bGF0aW9uKVxcbitcXHRcXHRcXHRza2ItXFx1MDAzZWVuY2Fwc3VsYXRpb24gPSAwO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMzgwMiw4ICszODU1LDcgQEAgQlBGX0NBTExfNChicGZfc2tiX2FkanVzdF9yb29tLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHMzMiwgbGVuX2RpZmYsXFxuIFxcdHUzMiBvZmY7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRpZiAodW5saWtlbHkoZmxhZ3MgXFx1MDAyNiB+KEJQRl9GX0FESl9ST09NX01BU0sgfFxcbi1cXHRcXHRcXHQgICAgICAgQlBGX0ZfQURKX1JPT01fTk9fQ1NVTV9SRVNFVCkpKVxcbitcXHRpZiAodW5saWtlbHkoZmxhZ3MgXFx1MDAyNiB+QlBGX0ZfQURKX1JPT01fTUFTSykpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRpZiAodW5saWtlbHkobGVuX2RpZmZfYWJzIFxcdTAwM2UgMHhmZmZVKSlcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuQEAgLTM4MjIsMjAgKzM4NzQsNTMgQEAgQlBGX0NBTExfNChicGZfc2tiX2FkanVzdF9yb29tLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHMzMiwgbGVuX2RpZmYsXFxuIFxcdFxcdHJldHVybiAtRU5PVFNVUFA7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX01BU0spIHtcXG4rXFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTUFTSykge1xcbitcXHRcXHR1MzIgbGVuX2RlY2FwX21pbiA9IDA7XFxuK1xcbiBcXHRcXHRpZiAoIXNocmluaylcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRcXHRzd2l0Y2ggKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSykge1xcbi1cXHRcXHRjYXNlIEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQ6XFxuK1xcdFxcdC8qIFJlamVjdCBtdXR1YWxseSBleGNsdXNpdmUgZGVjYXAgZmxhZyBwYWlycy4gKi9cXG4rXFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX01BU0spID09XFxuK1xcdFxcdCAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19NQVNLKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLKSA9PVxcbitcXHRcXHQgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSylcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTSykgPT1cXG4rXFx0XFx0ICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0spXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0LyogUmVqZWN0IG11dHVhbGx5IGV4Y2x1c2l2ZSBkZWNhcCB0dW5uZWwgdHlwZSBmbGFncy4gKi9cXG4rXFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X01BU0spIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAoZmxhZ3MgXFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLKVxcbitcXHRcXHRcXHRsZW5fZGVjYXBfbWluICs9IGJwZl9za2JfbmV0X2Jhc2VfbGVuKHNrYik7XFxuK1xcbitcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9VRFApXFxuK1xcdFxcdFxcdGxlbl9kZWNhcF9taW4gKz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xcbitcXG4rXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFKVxcbitcXHRcXHRcXHRsZW5fZGVjYXBfbWluICs9IHNpemVvZihzdHJ1Y3QgZ3JlX2Jhc2VfaGRyKTtcXG4rXFxuK1xcdFxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNClcXG4rXFx0XFx0XFx0bGVuX2RlY2FwX21pbiArPSBzaXplb2Yoc3RydWN0IGlwaGRyKTtcXG4rXFxuK1xcdFxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNilcXG4rXFx0XFx0XFx0bGVuX2RlY2FwX21pbiArPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpO1xcbitcXG4rXFx0XFx0aWYgKGxlbl9kaWZmX2FicyBcXHUwMDNjIGxlbl9kZWNhcF9taW4pXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNClcXG4gXFx0XFx0XFx0bGVuX21pbiA9IHNpemVvZihzdHJ1Y3QgaXBoZHIpO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY2OlxcbitcXG4rXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNilcXG4gXFx0XFx0XFx0bGVuX21pbiA9IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRsZW5fY3VyID0gc2tiLVxcdTAwM2VsZW4gLSBza2JfbmV0d29ya19vZmZzZXQoc2tiKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuaW5kZXggZmZkOTZlOGI5MjBiZC4uNzMyYjM1Y2MwOGQxYyAxMDA2NDRcXG4tLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcXG4rKysgYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcXG5AQCAtMzAzOCw4ICszMDM4LDM0IEBAIHVuaW9uIGJwZl9hdHRyIHtcXG4gICpcXG4gICpcXHRcXHQqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNCoqLFxcbiAgKlxcdFxcdCAgKipCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY2Kio6XFxuLSAqXFx0XFx0ICBJbmRpY2F0ZSB0aGUgbmV3IElQIGhlYWRlciB2ZXJzaW9uIGFmdGVyIGRlY2Fwc3VsYXRpbmcgdGhlIG91dGVyXFxuLSAqXFx0XFx0ICBJUCBoZWFkZXIuIFVzZWQgd2hlbiB0aGUgaW5uZXIgYW5kIG91dGVyIElQIHZlcnNpb25zIGFyZSBkaWZmZXJlbnQuXFxuKyAqXFx0XFx0ICBJbmRpY2F0ZSB0aGUgbmV3IElQIGhlYWRlciB2ZXJzaW9uIGFmdGVyIGRlY2Fwc3VsYXRpbmcgdGhlXFxuKyAqXFx0XFx0ICBvdXRlciBJUCBoZWFkZXIuIFVzZWQgd2hlbiB0aGUgaW5uZXIgYW5kIG91dGVyIElQIHZlcnNpb25zXFxuKyAqXFx0XFx0ICBhcmUgZGlmZmVyZW50LiBUaGVzZSBmbGFncyBvbmx5IHRyaWdnZXIgYSBwcm90b2NvbCBjaGFuZ2VcXG4rICpcXHRcXHQgIHdpdGhvdXQgY2xlYXJpbmcgYW55IHR1bm5lbC1zcGVjaWZpYyBHU08gZmxhZ3MuXFxuKyAqXFxuKyAqXFx0XFx0KiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRSoqOlxcbisgKlxcdFxcdCAgQ2xlYXIgR1JFIHR1bm5lbCBHU08gZmxhZ3MgKFNLQl9HU09fR1JFIGFuZCBTS0JfR1NPX0dSRV9DU1VNKVxcbisgKlxcdFxcdCAgd2hlbiBkZWNhcHN1bGF0aW5nIGEgR1JFIHR1bm5lbC5cXG4rICpcXG4rICpcXHRcXHQqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKio6XFxuKyAqXFx0XFx0ICBDbGVhciBVRFAgdHVubmVsIEdTTyBmbGFncyAoU0tCX0dTT19VRFBfVFVOTkVMIGFuZFxcbisgKlxcdFxcdCAgU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0pIHdoZW4gZGVjYXBzdWxhdGluZyBhIFVEUCB0dW5uZWwuXFxuKyAqXFxuKyAqXFx0XFx0KiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCoqOlxcbisgKlxcdFxcdCAgQ2xlYXIgSVBJUC9TSVQgdHVubmVsIEdTTyBmbGFnIChTS0JfR1NPX0lQWElQNCkgd2hlbiBkZWNhcHN1bGF0aW5nXFxuKyAqXFx0XFx0ICBhIHR1bm5lbCB3aXRoIGFuIG91dGVyIElQdjQgaGVhZGVyIChJUHY0LWluLUlQdjQgb3IgSVB2Ni1pbi1JUHY0KS5cXG4rICpcXG4rICpcXHRcXHQqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2Kio6XFxuKyAqXFx0XFx0ICBDbGVhciBJUHY2IGVuY2Fwc3VsYXRpb24gdHVubmVsIEdTTyBmbGFnIChTS0JfR1NPX0lQWElQNikgd2hlblxcbisgKlxcdFxcdCAgZGVjYXBzdWxhdGluZyBhIHR1bm5lbCB3aXRoIGFuIG91dGVyIElQdjYgaGVhZGVyIChJUHY2LWluLUlQdjZcXG4rICpcXHRcXHQgIG9yIElQdjQtaW4tSVB2NikuXFxuKyAqXFxuKyAqXFx0XFx0V2hlbiB1c2luZyB0aGUgZGVjYXBzdWxhdGlvbiBmbGFncyBhYm92ZSwgdGhlIHNrYi1cXHUwMDNlZW5jYXBzdWxhdGlvblxcbisgKlxcdFxcdGZsYWcgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkIGlmIGFsbCB0dW5uZWwtc3BlY2lmaWMgR1NPIGZsYWdzXFxuKyAqXFx0XFx0KFNLQl9HU09fVURQX1RVTk5FTCwgU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0sIFNLQl9HU09fR1JFLFxcbisgKlxcdFxcdFNLQl9HU09fR1JFX0NTVU0sIFNLQl9HU09fSVBYSVA0LCBTS0JfR1NPX0lQWElQNikgaGF2ZSBiZWVuXFxuKyAqXFx0XFx0cmVtb3ZlZCBmcm9tIHRoZSBwYWNrZXQuIFRoaXMgaGFuZGxlcyBjYXNlcyB3aGVyZSBhbGwgdHVubmVsXFxuKyAqXFx0XFx0bGF5ZXJzIGhhdmUgYmVlbiBkZWNhcHN1bGF0ZWQuXFxuICAqXFxuICAqIFxcdFxcdEEgY2FsbCB0byB0aGlzIGhlbHBlciBpcyBzdXNjZXB0aWJsZSB0byBjaGFuZ2UgdGhlIHVuZGVybHlpbmdcXG4gICogXFx0XFx0cGFja2V0IGJ1ZmZlci4gVGhlcmVmb3JlLCBhdCBsb2FkIHRpbWUsIGFsbCBjaGVja3Mgb24gcG9pbnRlcnNcXG5AQCAtNjI4Myw3ICs2MzA5LDcgQEAgZW51bSB7XFxuIH07XFxuIFxcbiAvKiBCUEZfRlVOQ19za2JfYWRqdXN0X3Jvb20gZmxhZ3MuICovXFxuLWVudW0ge1xcbitlbnVtIGJwZl9hZGpfcm9vbV9mbGFncyB7XFxuIFxcdEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTT1xcdD0gKDFVTEwgXFx1MDAzY1xcdTAwM2MgMCksXFxuIFxcdEJQRl9GX0FESl9ST09NX0VOQ0FQX0wzX0lQVjRcXHQ9ICgxVUxMIFxcdTAwM2NcXHUwMDNjIDEpLFxcbiBcXHRCUEZfRl9BREpfUk9PTV9FTkNBUF9MM19JUFY2XFx0PSAoMVVMTCBcXHUwMDNjXFx1MDAzYyAyKSxcXG5AQCAtNjI5Myw2ICs2MzE5LDEwIEBAIGVudW0ge1xcbiBcXHRCUEZfRl9BREpfUk9PTV9FTkNBUF9MMl9FVEhcXHQ9ICgxVUxMIFxcdTAwM2NcXHUwMDNjIDYpLFxcbiBcXHRCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0XFx0PSAoMVVMTCBcXHUwMDNjXFx1MDAzYyA3KSxcXG4gXFx0QlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNlxcdD0gKDFVTEwgXFx1MDAzY1xcdTAwM2MgOCksXFxuK1xcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRVxcdD0gKDFVTEwgXFx1MDAzY1xcdTAwM2MgOSksXFxuK1xcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUFxcdD0gKDFVTEwgXFx1MDAzY1xcdTAwM2MgMTApLFxcbitcXHRCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDRcXHQ9ICgxVUxMIFxcdTAwM2NcXHUwMDNjIDExKSxcXG4rXFx0QlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2XFx0PSAoMVVMTCBcXHUwMDNjXFx1MDAzYyAxMiksXFxuIH07XFxuIFxcbiBlbnVtIHtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF90Y190dW5uZWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfdGNfdHVubmVsLmNcXG5pbmRleCAxYWE3Yzk0NjM5ODBiLi42N2JhMjdkNjkzNDc0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfdGNfdHVubmVsLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3RjX3R1bm5lbC5jXFxuQEAgLTQzOCw3ICs0MzgsNiBAQCBzdGF0aWMgaW50IHNldHVwKHZvaWQpXFxuIFxcdFNZUyhmYWlsX2Nsb3NlX25zX2NsaWVudCwgXFxcImlwIGxpbmsgYWRkICVzIHR5cGUgdmV0aCBwZWVyIG5hbWUgJXNcXFwiLFxcbiBcXHQgICAgXFxcInZldGgxIG10dSAxNTAwIG5ldG5zIFxcXCIgQ0xJRU5UX05TIFxcXCIgYWRkcmVzcyBcXFwiIE1BQ19BRERSX1ZFVEgxLFxcbiBcXHQgICAgXFxcInZldGgyIG10dSAxNTAwIG5ldG5zIFxcXCIgU0VSVkVSX05TIFxcXCIgYWRkcmVzcyBcXFwiIE1BQ19BRERSX1ZFVEgyKTtcXG4tXFx0U1lTKGZhaWxfY2xvc2VfbnNfY2xpZW50LCBcXFwiZXRodG9vbCAtSyB2ZXRoMSB0c28gb2ZmXFxcIik7XFxuIFxcdFNZUyhmYWlsX2Nsb3NlX25zX2NsaWVudCwgXFxcImlwIGxpbmsgc2V0IHZldGgxIHVwXFxcIik7XFxuIFxcdG5zdG9rZW5fc2VydmVyID0gb3Blbl9uZXRucyhTRVJWRVJfTlMpO1xcbiBcXHRpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbl9zZXJ2ZXIsIFxcXCJvcGVuIHNlcnZlciBuc1xcXCIpKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y190dW5uZWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3R1bm5lbC5jXFxuaW5kZXggNzM3NmRmNDA1YTZiZS4uODUzYmNhOTYyOTEwMyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y190dW5uZWwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3R1bm5lbC5jXFxuQEAgLTYsNiArNiw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2VuZGlhbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9jb3JlX3JlYWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImJwZl90cmFjaW5nX25ldC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiYnBmX2NvbXBpbGVyLmhcXFwiXFxuIFxcbkBAIC0zNyw2ICszOCwyMiBAQCBzdHJ1Y3QgdnhsYW5oZHJfX19sb2NhbCB7XFxuIFxcbiAjZGVmaW5lXFx0RVhUUFJPVE9fVlhMQU5cXHQweDFcXG4gXFxuKyNkZWZpbmUgU0tCX0dTT19VRFBfVFVOTkVMX01BU0tcXHQoU0tCX0dTT19VRFBfVFVOTkVMIHxcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdCBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSlcXG4rXFxuKyNkZWZpbmUgU0tCX0dTT19UVU5ORUxfTUFTS1xcdChTS0JfR1NPX1VEUF9UVU5ORUxfTUFTSyB8XFx0XFx0XFxcXFxcbitcXHRcXHRcXHRcXHQgU0tCX0dTT19HUkUgfFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0IFNLQl9HU09fR1JFX0NTVU0gfFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0IFNLQl9HU09fSVBYSVA0IHxcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdCBTS0JfR1NPX0lQWElQNiB8XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHRcXHQgU0tCX0dTT19FU1ApXFxuK1xcbisjZGVmaW5lIEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X01BU0tcXHQoQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQIHxcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUpXFxuK1xcbisjZGVmaW5lIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0tcXHQoQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0IHxcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYpXFxuK1xcbiAjZGVmaW5lXFx0VlhMQU5fRkxBR1MgICAgIGJwZl9odG9ubCgxXFx1MDAzY1xcdTAwM2MyNylcXG4gI2RlZmluZVxcdFZOSV9JRFxcdFxcdDFcXG4gI2RlZmluZVxcdFZYTEFOX1ZOSVxcdGJwZl9odG9ubChWTklfSUQgXFx1MDAzY1xcdTAwM2MgOClcXG5AQCAtNTg5LDkgKzYwNiwxMiBAQCBpbnQgX19lbmNhcF9pcDZ2eGxhbl9ldGgoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRyZXR1cm4gVENfQUNUX09LO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGRlY2FwX2ludGVybmFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiwgaW50IG9mZiwgaW50IGxlbiwgY2hhciBwcm90bylcXG4rc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8sXFxuK1xcdFxcdFxcdCAgX191NjQgaXB4aXBfZmxhZylcXG4ge1xcbiBcXHRfX3U2NCBmbGFncyA9IEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTztcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKmtza2I7XFxuK1xcdHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNoaW5mbztcXG4gXFx0c3RydWN0IGlwdjZfb3B0X2hkciBpcDZfb3B0X2hkcjtcXG4gXFx0c3RydWN0IGdyZV9oZHIgZ3JlaDtcXG4gXFx0c3RydWN0IHVkcGhkciB1ZHBoO1xcbkBAIC01OTksMTAgKzYxOSwxMiBAQCBzdGF0aWMgaW50IGRlY2FwX2ludGVybmFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiwgaW50IG9mZiwgaW50IGxlbiwgY2hhciBwcm90bylcXG4gXFxuIFxcdHN3aXRjaCAocHJvdG8pIHtcXG4gXFx0Y2FzZSBJUFBST1RPX0lQSVA6XFxuLVxcdFxcdGZsYWdzIHw9IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQ7XFxuK1xcdFxcdGZsYWdzIHw9IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQgfFxcbitcXHRcXHRcXHQgaXB4aXBfZmxhZztcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgSVBQUk9UT19JUFY2Olxcbi1cXHRcXHRmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY2O1xcbitcXHRcXHRmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY2IHxcXG4rXFx0XFx0XFx0IGlweGlwX2ZsYWc7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIE5FWFRIRFJfREVTVDpcXG4gXFx0XFx0aWYgKGJwZl9za2JfbG9hZF9ieXRlcyhza2IsIG9mZiArIGxlbiwgXFx1MDAyNmlwNl9vcHRfaGRyLFxcbkBAIC02MTAsMTAgKzYzMiwxMiBAQCBzdGF0aWMgaW50IGRlY2FwX2ludGVybmFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiwgaW50IG9mZiwgaW50IGxlbiwgY2hhciBwcm90bylcXG4gXFx0XFx0XFx0cmV0dXJuIFRDX0FDVF9PSztcXG4gXFx0XFx0c3dpdGNoIChpcDZfb3B0X2hkci5uZXh0aGRyKSB7XFxuIFxcdFxcdGNhc2UgSVBQUk9UT19JUElQOlxcbi1cXHRcXHRcXHRmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0O1xcbitcXHRcXHRcXHRmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0IHxcXG4rXFx0XFx0XFx0XFx0IGlweGlwX2ZsYWc7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIElQUFJPVE9fSVBWNjpcXG4tXFx0XFx0XFx0ZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNjtcXG4rXFx0XFx0XFx0ZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNiB8XFxuK1xcdFxcdFxcdFxcdCBpcHhpcF9mbGFnO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZGVmYXVsdDpcXG4gXFx0XFx0XFx0cmV0dXJuIFRDX0FDVF9PSztcXG5AQCAtNjIxLDYgKzY0NSwxMSBAQCBzdGF0aWMgaW50IGRlY2FwX2ludGVybmFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiwgaW50IG9mZiwgaW50IGxlbiwgY2hhciBwcm90bylcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgSVBQUk9UT19HUkU6XFxuIFxcdFxcdG9sZW4gKz0gc2l6ZW9mKHN0cnVjdCBncmVfaGRyKTtcXG4rXFx0XFx0aWYgKCFicGZfY29yZV9lbnVtX3ZhbHVlX2V4aXN0cyhlbnVtIGJwZl9hZGpfcm9vbV9mbGFncyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0QlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFKSlcXG4rXFx0XFx0XFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xcbitcXHRcXHRmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkU7XFxuK1xcbiBcXHRcXHRpZiAoYnBmX3NrYl9sb2FkX2J5dGVzKHNrYiwgb2ZmICsgbGVuLCBcXHUwMDI2Z3JlaCwgc2l6ZW9mKGdyZWgpKSBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiBUQ19BQ1RfT0s7XFxuIFxcdFxcdHN3aXRjaCAoYnBmX250b2hzKGdyZWgucHJvdG9jb2wpKSB7XFxuQEAgLTYzNCw2ICs2NjMsMTAgQEAgc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8pXFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIElQUFJPVE9fVURQOlxcbiBcXHRcXHRvbGVuICs9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcXG4rXFx0XFx0aWYgKCFicGZfY29yZV9lbnVtX3ZhbHVlX2V4aXN0cyhlbnVtIGJwZl9hZGpfcm9vbV9mbGFncyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0QlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKSlcXG4rXFx0XFx0XFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xcbitcXHRcXHRmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9VRFA7XFxuIFxcdFxcdGlmIChicGZfc2tiX2xvYWRfYnl0ZXMoc2tiLCBvZmYgKyBsZW4sIFxcdTAwMjZ1ZHBoLCBzaXplb2YodWRwaCkpIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cmV0dXJuIFRDX0FDVF9PSztcXG4gXFx0XFx0c3dpdGNoIChicGZfbnRvaHModWRwaC5kZXN0KSkge1xcbkBAIC02NTUsNiArNjg4LDQwIEBAIHN0YXRpYyBpbnQgZGVjYXBfaW50ZXJuYWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiLCBpbnQgb2ZmLCBpbnQgbGVuLCBjaGFyIHByb3RvKVxcbiBcXHRpZiAoYnBmX3NrYl9hZGp1c3Rfcm9vbShza2IsIC1vbGVuLCBCUEZfQURKX1JPT01fTUFDLCBmbGFncykpXFxuIFxcdFxcdHJldHVybiBUQ19BQ1RfU0hPVDtcXG4gXFxuK1xcdGtza2IgPSBicGZfY2FzdF90b19rZXJuX2N0eChza2IpO1xcbitcXHRzaGluZm8gPSBicGZfY29yZV9jYXN0KGtza2ItXFx1MDAzZWhlYWQgKyBrc2tiLVxcdTAwM2VlbmQsIHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pO1xcbitcXHRpZiAoc2hpbmZvLVxcdTAwM2Vnc29fc2l6ZSkge1xcbitcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgKHNoaW5mby1cXHUwMDNlZ3NvX3R5cGUgXFx1MDAyNiBTS0JfR1NPX1VEUF9UVU5ORUxfTUFTSykpXFxuK1xcdFxcdFxcdHJldHVybiBUQ19BQ1RfU0hPVDtcXG4rXFxuK1xcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAoc2hpbmZvLVxcdTAwM2Vnc29fdHlwZSBcXHUwMDI2IChTS0JfR1NPX0dSRSB8IFNLQl9HU09fR1JFX0NTVU0pKSlcXG4rXFx0XFx0XFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xcbitcXG4rXFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIChzaGluZm8tXFx1MDAzZWdzb190eXBlIFxcdTAwMjYgU0tCX0dTT19JUFhJUDQpKVxcbitcXHRcXHRcXHRyZXR1cm4gVENfQUNUX1NIT1Q7XFxuK1xcbitcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgKHNoaW5mby1cXHUwMDNlZ3NvX3R5cGUgXFx1MDAyNiBTS0JfR1NPX0lQWElQNikpXFxuK1xcdFxcdFxcdHJldHVybiBUQ19BQ1RfU0hPVDtcXG4rXFxuK1xcdFxcdGlmIChmbGFncyBcXHUwMDI2IChCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLIHxcXG4rXFx0XFx0XFx0ICAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKSkge1xcbitcXHRcXHRcXHRpZiAoKHNoaW5mby1cXHUwMDNlZ3NvX3R5cGUgXFx1MDAyNiBTS0JfR1NPX1RVTk5FTF9NQVNLKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgIWtza2ItXFx1MDAzZWVuY2Fwc3VsYXRpb24pXFxuK1xcdFxcdFxcdFxcdHJldHVybiBUQ19BQ1RfU0hPVDtcXG4rXFx0XFx0XFx0aWYgKCEoc2hpbmZvLVxcdTAwM2Vnc29fdHlwZSBcXHUwMDI2IFNLQl9HU09fVFVOTkVMX01BU0spIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICBrc2tiLVxcdTAwM2VlbmNhcHN1bGF0aW9uKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gVENfQUNUX1NIT1Q7XFxuK1xcdFxcdH1cXG4rXFx0fSBlbHNlIGlmICgoZmxhZ3MgXFx1MDAyNiAoQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSyB8XFxuK1xcdFxcdFxcdCAgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTSykpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgIGtza2ItXFx1MDAzZWVuY2Fwc3VsYXRpb24pIHtcXG4rXFx0XFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xcbitcXHR9XFxuK1xcbiBcXHRyZXR1cm4gVENfQUNUX09LO1xcbiB9XFxuIFxcbkBAIC02NjIsNiArNzI5LDEwIEBAIHN0YXRpYyBpbnQgZGVjYXBfaXB2NChzdHJ1Y3QgX19za19idWZmICpza2IpXFxuIHtcXG4gXFx0c3RydWN0IGlwaGRyIGlwaF9vdXRlcjtcXG4gXFxuK1xcdGlmICghYnBmX2NvcmVfZW51bV92YWx1ZV9leGlzdHMoZW51bSBicGZfYWRqX3Jvb21fZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdFxcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCkpXFxuK1xcdFxcdHJldHVybiBUQ19BQ1RfU0hPVDtcXG4rXFxuIFxcdGlmIChicGZfc2tiX2xvYWRfYnl0ZXMoc2tiLCBFVEhfSExFTiwgXFx1MDAyNmlwaF9vdXRlcixcXG4gXFx0XFx0XFx0ICAgICAgIHNpemVvZihpcGhfb3V0ZXIpKSBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiBUQ19BQ1RfT0s7XFxuQEAgLTY3MCwxOSArNzQxLDI1IEBAIHN0YXRpYyBpbnQgZGVjYXBfaXB2NChzdHJ1Y3QgX19za19idWZmICpza2IpXFxuIFxcdFxcdHJldHVybiBUQ19BQ1RfT0s7XFxuIFxcbiBcXHRyZXR1cm4gZGVjYXBfaW50ZXJuYWwoc2tiLCBFVEhfSExFTiwgc2l6ZW9mKGlwaF9vdXRlciksXFxuLVxcdFxcdFxcdCAgICAgIGlwaF9vdXRlci5wcm90b2NvbCk7XFxuK1xcdFxcdFxcdCAgICAgIGlwaF9vdXRlci5wcm90b2NvbCxcXG4rXFx0XFx0XFx0ICAgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0KTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBkZWNhcF9pcHY2KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4ge1xcbiBcXHRzdHJ1Y3QgaXB2NmhkciBpcGhfb3V0ZXI7XFxuIFxcbitcXHRpZiAoIWJwZl9jb3JlX2VudW1fdmFsdWVfZXhpc3RzKGVudW0gYnBmX2Fkal9yb29tX2ZsYWdzLFxcbitcXHRcXHRcXHRcXHRcXHRCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYpKVxcbitcXHRcXHRyZXR1cm4gVENfQUNUX1NIT1Q7XFxuK1xcbiBcXHRpZiAoYnBmX3NrYl9sb2FkX2J5dGVzKHNrYiwgRVRIX0hMRU4sIFxcdTAwMjZpcGhfb3V0ZXIsXFxuIFxcdFxcdFxcdCAgICAgICBzaXplb2YoaXBoX291dGVyKSkgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gVENfQUNUX09LO1xcbiBcXG4gXFx0cmV0dXJuIGRlY2FwX2ludGVybmFsKHNrYiwgRVRIX0hMRU4sIHNpemVvZihpcGhfb3V0ZXIpLFxcbi1cXHRcXHRcXHQgICAgICBpcGhfb3V0ZXIubmV4dGhkcik7XFxuK1xcdFxcdFxcdCAgICAgIGlwaF9vdXRlci5uZXh0aGRyLFxcbitcXHRcXHRcXHQgICAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYpO1xcbiB9XFxuIFxcbiBTRUMoXFxcInRjXFxcIilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6NDk6MDEuNjkyMjUwMjc0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTM3MjE0Mjk0NzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRfQ0xTX0JQRlwiLFxuICAgIFwiTkVUX0FDVF9CUEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc2tiX2FkanVzdF9yb29tXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBuZXcgZmxhZ3MgdG8gdGhlIGJwZl9za2JfYWRqdXN0X3Jvb20gQlBGIGhlbHBlciB0byBjbGVhciB0dW5uZWwtc3BlY2lmaWMgR1NPIGZsYWdzIGR1cmluZyBkZWNhcHN1bGF0aW9uLiBUaGlzIG1vZGlmaWVzIGNvcmUgQlBGIG5ldHdvcmtpbmcgbG9naWMgcmVhY2hhYmxlIHZpYSBUQyBCUEYgcHJvZ3JhbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY1M2I3NWRiMGQ2NDNlMTU0MGI4ZWE4YjE5YmFjMGIzMjhjY2EwOWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxNjo0OTowMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuaW5kZXggZmZkOTZlOGI5MjBiZC4uNzMyYjM1Y2MwOGQxYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5AQCAtMzAzOCw4ICszMDM4LDM0IEBAIHVuaW9uIGJwZl9hdHRyIHtcbiAgKlxuICAqXHRcdCogKipCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0KiosXG4gICpcdFx0ICAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjYqKjpcbi0gKlx0XHQgIEluZGljYXRlIHRoZSBuZXcgSVAgaGVhZGVyIHZlcnNpb24gYWZ0ZXIgZGVjYXBzdWxhdGluZyB0aGUgb3V0ZXJcbi0gKlx0XHQgIElQIGhlYWRlci4gVXNlZCB3aGVuIHRoZSBpbm5lciBhbmQgb3V0ZXIgSVAgdmVyc2lvbnMgYXJlIGRpZmZlcmVudC5cbisgKlx0XHQgIEluZGljYXRlIHRoZSBuZXcgSVAgaGVhZGVyIHZlcnNpb24gYWZ0ZXIgZGVjYXBzdWxhdGluZyB0aGVcbisgKlx0XHQgIG91dGVyIElQIGhlYWRlci4gVXNlZCB3aGVuIHRoZSBpbm5lciBhbmQgb3V0ZXIgSVAgdmVyc2lvbnNcbisgKlx0XHQgIGFyZSBkaWZmZXJlbnQuIFRoZXNlIGZsYWdzIG9ubHkgdHJpZ2dlciBhIHByb3RvY29sIGNoYW5nZVxuKyAqXHRcdCAgd2l0aG91dCBjbGVhcmluZyBhbnkgdHVubmVsLXNwZWNpZmljIEdTTyBmbGFncy5cbisgKlxuKyAqXHRcdCogKipCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUqKjpcbisgKlx0XHQgIENsZWFyIEdSRSB0dW5uZWwgR1NPIGZsYWdzIChTS0JfR1NPX0dSRSBhbmQgU0tCX0dTT19HUkVfQ1NVTSlcbisgKlx0XHQgIHdoZW4gZGVjYXBzdWxhdGluZyBhIEdSRSB0dW5uZWwuXG4rICpcbisgKlx0XHQqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKio6XG4rICpcdFx0ICBDbGVhciBVRFAgdHVubmVsIEdTTyBmbGFncyAoU0tCX0dTT19VRFBfVFVOTkVMIGFuZFxuKyAqXHRcdCAgU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0pIHdoZW4gZGVjYXBzdWxhdGluZyBhIFVEUCB0dW5uZWwuXG4rICpcbisgKlx0XHQqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0Kio6XG4rICpcdFx0ICBDbGVhciBJUElQL1NJVCB0dW5uZWwgR1NPIGZsYWcgKFNLQl9HU09fSVBYSVA0KSB3aGVuIGRlY2Fwc3VsYXRpbmdcbisgKlx0XHQgIGEgdHVubmVsIHdpdGggYW4gb3V0ZXIgSVB2NCBoZWFkZXIgKElQdjQtaW4tSVB2NCBvciBJUHY2LWluLUlQdjQpLlxuKyAqXG4rICpcdFx0KiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNioqOlxuKyAqXHRcdCAgQ2xlYXIgSVB2NiBlbmNhcHN1bGF0aW9uIHR1bm5lbCBHU08gZmxhZyAoU0tCX0dTT19JUFhJUDYpIHdoZW5cbisgKlx0XHQgIGRlY2Fwc3VsYXRpbmcgYSB0dW5uZWwgd2l0aCBhbiBvdXRlciBJUHY2IGhlYWRlciAoSVB2Ni1pbi1JUHY2XG4rICpcdFx0ICBvciBJUHY0LWluLUlQdjYpLlxuKyAqXG4rICpcdFx0V2hlbiB1c2luZyB0aGUgZGVjYXBzdWxhdGlvbiBmbGFncyBhYm92ZSwgdGhlIHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uXG4rICpcdFx0ZmxhZyBpcyBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgaWYgYWxsIHR1bm5lbC1zcGVjaWZpYyBHU08gZmxhZ3NcbisgKlx0XHQoU0tCX0dTT19VRFBfVFVOTkVMLCBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSwgU0tCX0dTT19HUkUsXG4rICpcdFx0U0tCX0dTT19HUkVfQ1NVTSwgU0tCX0dTT19JUFhJUDQsIFNLQl9HU09fSVBYSVA2KSBoYXZlIGJlZW5cbisgKlx0XHRyZW1vdmVkIGZyb20gdGhlIHBhY2tldC4gVGhpcyBoYW5kbGVzIGNhc2VzIHdoZXJlIGFsbCB0dW5uZWxcbisgKlx0XHRsYXllcnMgaGF2ZSBiZWVuIGRlY2Fwc3VsYXRlZC5cbiAgKlxuICAqIFx0XHRBIGNhbGwgdG8gdGhpcyBoZWxwZXIgaXMgc3VzY2VwdGlibGUgdG8gY2hhbmdlIHRoZSB1bmRlcmx5aW5nXG4gICogXHRcdHBhY2tldCBidWZmZXIuIFRoZXJlZm9yZSwgYXQgbG9hZCB0aW1lLCBhbGwgY2hlY2tzIG9uIHBvaW50ZXJzXG5AQCAtNjI4Myw3ICs2MzA5LDcgQEAgZW51bSB7XG4gfTtcbiBcbiAvKiBCUEZfRlVOQ19za2JfYWRqdXN0X3Jvb20gZmxhZ3MuICovXG4tZW51bSB7XG4rZW51bSBicGZfYWRqX3Jvb21fZmxhZ3Mge1xuIFx0QlBGX0ZfQURKX1JPT01fRklYRURfR1NPXHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyAwKSxcbiBcdEJQRl9GX0FESl9ST09NX0VOQ0FQX0wzX0lQVjRcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDEpLFxuIFx0QlBGX0ZfQURKX1JPT01fRU5DQVBfTDNfSVBWNlx0PSAoMVVMTCBcdTAwM2NcdTAwM2MgMiksXG5AQCAtNjI5Myw2ICs2MzE5LDEwIEBAIGVudW0ge1xuIFx0QlBGX0ZfQURKX1JPT01fRU5DQVBfTDJfRVRIXHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyA2KSxcbiBcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjRcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDcpLFxuIFx0QlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNlx0PSAoMVVMTCBcdTAwM2NcdTAwM2MgOCksXG4rXHRCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkVcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDkpLFxuK1x0QlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQXHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyAxMCksXG4rXHRCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDRcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDExKSxcbitcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNlx0PSAoMVVMTCBcdTAwM2NcdTAwM2MgMTIpLFxuIH07XG4gXG4gZW51bSB7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggMzQyMzczNDEyNGE1Yi4uODllZmZmZjNiYzUyNSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTU2LDYgKzU2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29ja19yZXVzZXBvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9idXN5X3BvbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y3AuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9ncmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC94ZnJtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdWRwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfdHJhY2UuaFx1MDAzZVxuQEAgLTM1NzIsMTQgKzM1NzMsMjcgQEAgc3RhdGljIHUzMiBicGZfc2tiX25ldF9iYXNlX2xlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuICNkZWZpbmUgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTS1x0KEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQgfCBcXFxuIFx0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNilcbiBcbi0jZGVmaW5lIEJQRl9GX0FESl9ST09NX01BU0tcdFx0KEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTyB8IFxcXG4tXHRcdFx0XHRcdCBCUEZfRl9BREpfUk9PTV9FTkNBUF9MM19NQVNLIHwgXFxcbisjZGVmaW5lIEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X01BU0tcdChCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9VRFAgfCBcXFxuK1x0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFKVxuK1xuKyNkZWZpbmUgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTS1x0KEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCB8IFxcXG4rXHRcdFx0XHRcdCBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYpXG4rXG4rI2RlZmluZSBCUEZfRl9BREpfUk9PTV9FTkNBUF9NQVNLXHQoQlBGX0ZfQURKX1JPT01fRU5DQVBfTDNfTUFTSyB8IFxcXG4gXHRcdFx0XHRcdCBCUEZfRl9BREpfUk9PTV9FTkNBUF9MNF9HUkUgfCBcXFxuIFx0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fRU5DQVBfTDRfVURQIHwgXFxcbiBcdFx0XHRcdFx0IEJQRl9GX0FESl9ST09NX0VOQ0FQX0wyX0VUSCB8IFxcXG4gXHRcdFx0XHRcdCBCUEZfRl9BREpfUk9PTV9FTkNBUF9MMiggXFxcbi1cdFx0XHRcdFx0ICBCUEZfQURKX1JPT01fRU5DQVBfTDJfTUFTSykgfCBcXFxuLVx0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSylcbitcdFx0XHRcdFx0ICBCUEZfQURKX1JPT01fRU5DQVBfTDJfTUFTSykpXG4rXG4rI2RlZmluZSBCUEZfRl9BREpfUk9PTV9ERUNBUF9NQVNLXHQoQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSyB8IFxcXG4rXHRcdFx0XHRcdCBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLIHwgXFxcbitcdFx0XHRcdFx0IEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0spXG4rXG4rI2RlZmluZSBCUEZfRl9BREpfUk9PTV9NQVNLXHRcdChCUEZfRl9BREpfUk9PTV9GSVhFRF9HU08gfCBcXFxuK1x0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fRU5DQVBfTUFTSyB8IFxcXG4rXHRcdFx0XHRcdCBCUEZfRl9BREpfUk9PTV9ERUNBUF9NQVNLIHwgXFxcbitcdFx0XHRcdFx0IEJQRl9GX0FESl9ST09NX05PX0NTVU1fUkVTRVQpXG4gXG4gc3RhdGljIGludCBicGZfc2tiX25ldF9ncm93KHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvZmYsIHUzMiBsZW5fZGlmZixcbiBcdFx0XHQgICAgdTY0IGZsYWdzKVxuQEAgLTM3MDIsOCArMzcxNiw4IEBAIHN0YXRpYyBpbnQgYnBmX3NrYl9uZXRfc2hyaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvZmYsIHUzMiBsZW5fZGlmZixcbiBcdGJvb2wgZGVjYXAgPSBmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSztcbiBcdGludCByZXQ7XG4gXG4tXHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IH4oQlBGX0ZfQURKX1JPT01fRklYRURfR1NPIHxcbi1cdFx0XHQgICAgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSyB8XG4rXHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IH4oQlBGX0ZfQURKX1JPT01fREVDQVBfTUFTSyB8XG4rXHRcdFx0ICAgICAgIEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTyB8XG4gXHRcdFx0ICAgICAgIEJQRl9GX0FESl9ST09NX05PX0NTVU1fUkVTRVQpKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG5AQCAtMzc0MCw5ICszNzU0LDQ4IEBAIHN0YXRpYyBpbnQgYnBmX3NrYl9uZXRfc2hyaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvZmYsIHUzMiBsZW5fZGlmZixcbiBcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTykpXG4gXHRcdFx0c2tiX2luY3JlYXNlX2dzb19zaXplKHNoaW5mbywgbGVuX2RpZmYpO1xuIFxuK1x0XHQvKiBTZWxlY3RpdmUgR1NPIGZsYWcgY2xlYXJpbmcgYmFzZWQgb24gZGVjYXAgdHlwZS5cbitcdFx0ICogT25seSBjbGVhciB0aGUgZmxhZ3MgZm9yIHRoZSB0dW5uZWwgbGF5ZXIgYmVpbmcgcmVtb3ZlZC5cbitcdFx0ICovXG4rXHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoc2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNiAoU0tCX0dTT19VRFBfVFVOTkVMIHxcbitcdFx0XHRcdFx0IFNLQl9HU09fVURQX1RVTk5FTF9DU1VNKSkpXG4rXHRcdFx0c2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNj0gfihTS0JfR1NPX1VEUF9UVU5ORUwgfFxuK1x0XHRcdFx0XHQgICAgICBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSk7XG4rXHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoc2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNiAoU0tCX0dTT19HUkUgfCBTS0JfR1NPX0dSRV9DU1VNKSkpXG4rXHRcdFx0c2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNj0gfihTS0JfR1NPX0dSRSB8XG4rXHRcdFx0XHRcdCAgICAgIFNLQl9HU09fR1JFX0NTVU0pO1xuK1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDQpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKHNoaW5mby1cdTAwM2Vnc29fdHlwZSBcdTAwMjYgU0tCX0dTT19JUFhJUDQpKVxuK1x0XHRcdHNoaW5mby1cdTAwM2Vnc29fdHlwZSBcdTAwMjY9IH5TS0JfR1NPX0lQWElQNDtcbitcdFx0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIChzaGluZm8tXHUwMDNlZ3NvX3R5cGUgXHUwMDI2IFNLQl9HU09fSVBYSVA2KSlcbitcdFx0XHRzaGluZm8tXHUwMDNlZ3NvX3R5cGUgXHUwMDI2PSB+U0tCX0dTT19JUFhJUDY7XG4rXG4rXHRcdC8qIENsZWFyIGVuY2Fwc3VsYXRpb24gZmxhZyBvbmx5IHdoZW4gbm8gdHVubmVsIEdTTyBmbGFncyByZW1haW4gKi9cbitcdFx0aWYgKGZsYWdzIFx1MDAyNiAoQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSyB8XG4rXHRcdFx0ICAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKSkge1xuK1x0XHRcdGlmICghKHNoaW5mby1cdTAwM2Vnc29fdHlwZSBcdTAwMjYgKFNLQl9HU09fVURQX1RVTk5FTCB8XG4rXHRcdFx0XHRcdFx0ICBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSB8XG4rXHRcdFx0XHRcdFx0ICBTS0JfR1NPX0dSRSB8XG4rXHRcdFx0XHRcdFx0ICBTS0JfR1NPX0dSRV9DU1VNIHxcbitcdFx0XHRcdFx0XHQgIFNLQl9HU09fSVBYSVA0IHxcbitcdFx0XHRcdFx0XHQgIFNLQl9HU09fSVBYSVA2IHxcbitcdFx0XHRcdFx0XHQgIFNLQl9HU09fRVNQKSkpXG4rXHRcdFx0XHRpZiAoc2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24pXG4rXHRcdFx0XHRcdHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uID0gMDtcbitcdFx0fVxuK1xuIFx0XHQvKiBIZWFkZXIgbXVzdCBiZSBjaGVja2VkLCBhbmQgZ3NvX3NlZ3MgcmVjb21wdXRlZC4gKi9cbiBcdFx0c2hpbmZvLVx1MDAzZWdzb190eXBlIHw9IFNLQl9HU09fRE9ER1k7XG4gXHRcdHNoaW5mby1cdTAwM2Vnc29fc2VncyA9IDA7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBGb3Igbm9uLUdTTyBwYWNrZXRzLCBjbGVhciBlbmNhcHN1bGF0aW9uIGlmIGRlY2FwIGZsYWdzIGFyZSBzZXQgKi9cbitcdFx0aWYgKChmbGFncyBcdTAwMjYgKEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X01BU0sgfFxuK1x0XHRcdCAgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0spKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uKVxuK1x0XHRcdHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uID0gMDtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTM4MDIsOCArMzg1NSw3IEBAIEJQRl9DQUxMXzQoYnBmX3NrYl9hZGp1c3Rfcm9vbSwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBzMzIsIGxlbl9kaWZmLFxuIFx0dTMyIG9mZjtcbiBcdGludCByZXQ7XG4gXG4tXHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IH4oQlBGX0ZfQURKX1JPT01fTUFTSyB8XG4tXHRcdFx0ICAgICAgIEJQRl9GX0FESl9ST09NX05PX0NTVU1fUkVTRVQpKSlcbitcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgfkJQRl9GX0FESl9ST09NX01BU0spKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdGlmICh1bmxpa2VseShsZW5fZGlmZl9hYnMgXHUwMDNlIDB4ZmZmVSkpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuQEAgLTM4MjIsMjAgKzM4NzQsNTMgQEAgQlBGX0NBTExfNChicGZfc2tiX2FkanVzdF9yb29tLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHMzMiwgbGVuX2RpZmYsXG4gXHRcdHJldHVybiAtRU5PVFNVUFA7XG4gXHR9XG4gXG4tXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX01BU0spIHtcbitcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTUFTSykge1xuK1x0XHR1MzIgbGVuX2RlY2FwX21pbiA9IDA7XG4rXG4gXHRcdGlmICghc2hyaW5rKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0XHRzd2l0Y2ggKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19NQVNLKSB7XG4tXHRcdGNhc2UgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNDpcbitcdFx0LyogUmVqZWN0IG11dHVhbGx5IGV4Y2x1c2l2ZSBkZWNhcCBmbGFnIHBhaXJzLiAqL1xuK1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19NQVNLKSA9PVxuK1x0XHQgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSylcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSykgPT1cbitcdFx0ICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X01BU0spXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0spID09XG4rXHRcdCAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHQvKiBSZWplY3QgbXV0dWFsbHkgZXhjbHVzaXZlIGRlY2FwIHR1bm5lbCB0eXBlIGZsYWdzLiAqL1xuK1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTSykpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSylcbitcdFx0XHRsZW5fZGVjYXBfbWluICs9IGJwZl9za2JfbmV0X2Jhc2VfbGVuKHNrYik7XG4rXG4rXHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKVxuK1x0XHRcdGxlbl9kZWNhcF9taW4gKz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuK1xuK1x0XHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRSlcbitcdFx0XHRsZW5fZGVjYXBfbWluICs9IHNpemVvZihzdHJ1Y3QgZ3JlX2Jhc2VfaGRyKTtcbitcbitcdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDQpXG4rXHRcdFx0bGVuX2RlY2FwX21pbiArPSBzaXplb2Yoc3RydWN0IGlwaGRyKTtcbitcbitcdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYpXG4rXHRcdFx0bGVuX2RlY2FwX21pbiArPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpO1xuK1xuK1x0XHRpZiAobGVuX2RpZmZfYWJzIFx1MDAzYyBsZW5fZGVjYXBfbWluKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQpXG4gXHRcdFx0bGVuX21pbiA9IHNpemVvZihzdHJ1Y3QgaXBoZHIpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjY6XG4rXG4rXHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNilcbiBcdFx0XHRsZW5fbWluID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0fVxuIFx0fVxuIFxuIFx0bGVuX2N1ciA9IHNrYi1cdTAwM2VsZW4gLSBza2JfbmV0d29ya19vZmZzZXQoc2tiKTtcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbmluZGV4IGZmZDk2ZThiOTIwYmQuLjczMmIzNWNjMDhkMWMgMTAwNjQ0XG4tLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbisrKyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTMwMzgsOCArMzAzOCwzNCBAQCB1bmlvbiBicGZfYXR0ciB7XG4gICpcbiAgKlx0XHQqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNCoqLFxuICAqXHRcdCAgKipCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY2Kio6XG4tICpcdFx0ICBJbmRpY2F0ZSB0aGUgbmV3IElQIGhlYWRlciB2ZXJzaW9uIGFmdGVyIGRlY2Fwc3VsYXRpbmcgdGhlIG91dGVyXG4tICpcdFx0ICBJUCBoZWFkZXIuIFVzZWQgd2hlbiB0aGUgaW5uZXIgYW5kIG91dGVyIElQIHZlcnNpb25zIGFyZSBkaWZmZXJlbnQuXG4rICpcdFx0ICBJbmRpY2F0ZSB0aGUgbmV3IElQIGhlYWRlciB2ZXJzaW9uIGFmdGVyIGRlY2Fwc3VsYXRpbmcgdGhlXG4rICpcdFx0ICBvdXRlciBJUCBoZWFkZXIuIFVzZWQgd2hlbiB0aGUgaW5uZXIgYW5kIG91dGVyIElQIHZlcnNpb25zXG4rICpcdFx0ICBhcmUgZGlmZmVyZW50LiBUaGVzZSBmbGFncyBvbmx5IHRyaWdnZXIgYSBwcm90b2NvbCBjaGFuZ2VcbisgKlx0XHQgIHdpdGhvdXQgY2xlYXJpbmcgYW55IHR1bm5lbC1zcGVjaWZpYyBHU08gZmxhZ3MuXG4rICpcbisgKlx0XHQqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFKio6XG4rICpcdFx0ICBDbGVhciBHUkUgdHVubmVsIEdTTyBmbGFncyAoU0tCX0dTT19HUkUgYW5kIFNLQl9HU09fR1JFX0NTVU0pXG4rICpcdFx0ICB3aGVuIGRlY2Fwc3VsYXRpbmcgYSBHUkUgdHVubmVsLlxuKyAqXG4rICpcdFx0KiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCoqOlxuKyAqXHRcdCAgQ2xlYXIgVURQIHR1bm5lbCBHU08gZmxhZ3MgKFNLQl9HU09fVURQX1RVTk5FTCBhbmRcbisgKlx0XHQgIFNLQl9HU09fVURQX1RVTk5FTF9DU1VNKSB3aGVuIGRlY2Fwc3VsYXRpbmcgYSBVRFAgdHVubmVsLlxuKyAqXG4rICpcdFx0KiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCoqOlxuKyAqXHRcdCAgQ2xlYXIgSVBJUC9TSVQgdHVubmVsIEdTTyBmbGFnIChTS0JfR1NPX0lQWElQNCkgd2hlbiBkZWNhcHN1bGF0aW5nXG4rICpcdFx0ICBhIHR1bm5lbCB3aXRoIGFuIG91dGVyIElQdjQgaGVhZGVyIChJUHY0LWluLUlQdjQgb3IgSVB2Ni1pbi1JUHY0KS5cbisgKlxuKyAqXHRcdCogKipCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYqKjpcbisgKlx0XHQgIENsZWFyIElQdjYgZW5jYXBzdWxhdGlvbiB0dW5uZWwgR1NPIGZsYWcgKFNLQl9HU09fSVBYSVA2KSB3aGVuXG4rICpcdFx0ICBkZWNhcHN1bGF0aW5nIGEgdHVubmVsIHdpdGggYW4gb3V0ZXIgSVB2NiBoZWFkZXIgKElQdjYtaW4tSVB2NlxuKyAqXHRcdCAgb3IgSVB2NC1pbi1JUHY2KS5cbisgKlxuKyAqXHRcdFdoZW4gdXNpbmcgdGhlIGRlY2Fwc3VsYXRpb24gZmxhZ3MgYWJvdmUsIHRoZSBza2ItXHUwMDNlZW5jYXBzdWxhdGlvblxuKyAqXHRcdGZsYWcgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkIGlmIGFsbCB0dW5uZWwtc3BlY2lmaWMgR1NPIGZsYWdzXG4rICpcdFx0KFNLQl9HU09fVURQX1RVTk5FTCwgU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0sIFNLQl9HU09fR1JFLFxuKyAqXHRcdFNLQl9HU09fR1JFX0NTVU0sIFNLQl9HU09fSVBYSVA0LCBTS0JfR1NPX0lQWElQNikgaGF2ZSBiZWVuXG4rICpcdFx0cmVtb3ZlZCBmcm9tIHRoZSBwYWNrZXQuIFRoaXMgaGFuZGxlcyBjYXNlcyB3aGVyZSBhbGwgdHVubmVsXG4rICpcdFx0bGF5ZXJzIGhhdmUgYmVlbiBkZWNhcHN1bGF0ZWQuXG4gICpcbiAgKiBcdFx0QSBjYWxsIHRvIHRoaXMgaGVscGVyIGlzIHN1c2NlcHRpYmxlIHRvIGNoYW5nZSB0aGUgdW5kZXJseWluZ1xuICAqIFx0XHRwYWNrZXQgYnVmZmVyLiBUaGVyZWZvcmUsIGF0IGxvYWQgdGltZSwgYWxsIGNoZWNrcyBvbiBwb2ludGVyc1xuQEAgLTYyODMsNyArNjMwOSw3IEBAIGVudW0ge1xuIH07XG4gXG4gLyogQlBGX0ZVTkNfc2tiX2FkanVzdF9yb29tIGZsYWdzLiAqL1xuLWVudW0ge1xuK2VudW0gYnBmX2Fkal9yb29tX2ZsYWdzIHtcbiBcdEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTT1x0PSAoMVVMTCBcdTAwM2NcdTAwM2MgMCksXG4gXHRCUEZfRl9BREpfUk9PTV9FTkNBUF9MM19JUFY0XHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyAxKSxcbiBcdEJQRl9GX0FESl9ST09NX0VOQ0FQX0wzX0lQVjZcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDIpLFxuQEAgLTYyOTMsNiArNjMxOSwxMCBAQCBlbnVtIHtcbiBcdEJQRl9GX0FESl9ST09NX0VOQ0FQX0wyX0VUSFx0PSAoMVVMTCBcdTAwM2NcdTAwM2MgNiksXG4gXHRCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0XHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyA3KSxcbiBcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjZcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDgpLFxuK1x0QlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFXHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyA5KSxcbitcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUFx0PSAoMVVMTCBcdTAwM2NcdTAwM2MgMTApLFxuK1x0QlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0XHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyAxMSksXG4rXHRCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDZcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDEyKSxcbiB9O1xuIFxuIGVudW0ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfdGNfdHVubmVsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3RjX3R1bm5lbC5jXG5pbmRleCAxYWE3Yzk0NjM5ODBiLi42N2JhMjdkNjkzNDc0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF90Y190dW5uZWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF90Y190dW5uZWwuY1xuQEAgLTQzOCw3ICs0MzgsNiBAQCBzdGF0aWMgaW50IHNldHVwKHZvaWQpXG4gXHRTWVMoZmFpbF9jbG9zZV9uc19jbGllbnQsIFwiaXAgbGluayBhZGQgJXMgdHlwZSB2ZXRoIHBlZXIgbmFtZSAlc1wiLFxuIFx0ICAgIFwidmV0aDEgbXR1IDE1MDAgbmV0bnMgXCIgQ0xJRU5UX05TIFwiIGFkZHJlc3MgXCIgTUFDX0FERFJfVkVUSDEsXG4gXHQgICAgXCJ2ZXRoMiBtdHUgMTUwMCBuZXRucyBcIiBTRVJWRVJfTlMgXCIgYWRkcmVzcyBcIiBNQUNfQUREUl9WRVRIMik7XG4tXHRTWVMoZmFpbF9jbG9zZV9uc19jbGllbnQsIFwiZXRodG9vbCAtSyB2ZXRoMSB0c28gb2ZmXCIpO1xuIFx0U1lTKGZhaWxfY2xvc2VfbnNfY2xpZW50LCBcImlwIGxpbmsgc2V0IHZldGgxIHVwXCIpO1xuIFx0bnN0b2tlbl9zZXJ2ZXIgPSBvcGVuX25ldG5zKFNFUlZFUl9OUyk7XG4gXHRpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbl9zZXJ2ZXIsIFwib3BlbiBzZXJ2ZXIgbnNcIikpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfdHVubmVsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y190dW5uZWwuY1xuaW5kZXggNzM3NmRmNDA1YTZiZS4uODUzYmNhOTYyOTEwMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3R1bm5lbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y190dW5uZWwuY1xuQEAgLTYsNiArNiw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2VuZGlhbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9jb3JlX3JlYWQuaFx1MDAzZVxuICNpbmNsdWRlIFwiYnBmX3RyYWNpbmdfbmV0LmhcIlxuICNpbmNsdWRlIFwiYnBmX2NvbXBpbGVyLmhcIlxuIFxuQEAgLTM3LDYgKzM4LDIyIEBAIHN0cnVjdCB2eGxhbmhkcl9fX2xvY2FsIHtcbiBcbiAjZGVmaW5lXHRFWFRQUk9UT19WWExBTlx0MHgxXG4gXG4rI2RlZmluZSBTS0JfR1NPX1VEUF9UVU5ORUxfTUFTS1x0KFNLQl9HU09fVURQX1RVTk5FTCB8XHRcdFx0XFxcbitcdFx0XHRcdCBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSlcbitcbisjZGVmaW5lIFNLQl9HU09fVFVOTkVMX01BU0tcdChTS0JfR1NPX1VEUF9UVU5ORUxfTUFTSyB8XHRcdFxcXG4rXHRcdFx0XHQgU0tCX0dTT19HUkUgfFx0XHRcdFx0XFxcbitcdFx0XHRcdCBTS0JfR1NPX0dSRV9DU1VNIHxcdFx0XHRcXFxuK1x0XHRcdFx0IFNLQl9HU09fSVBYSVA0IHxcdFx0XHRcXFxuK1x0XHRcdFx0IFNLQl9HU09fSVBYSVA2IHxcdFx0XHRcXFxuK1x0XHRcdFx0IFNLQl9HU09fRVNQKVxuK1xuKyNkZWZpbmUgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTS1x0KEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCB8XHRcXFxuK1x0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFKVxuK1xuKyNkZWZpbmUgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTS1x0KEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCB8XHRcXFxuK1x0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KVxuK1xuICNkZWZpbmVcdFZYTEFOX0ZMQUdTICAgICBicGZfaHRvbmwoMVx1MDAzY1x1MDAzYzI3KVxuICNkZWZpbmVcdFZOSV9JRFx0XHQxXG4gI2RlZmluZVx0VlhMQU5fVk5JXHRicGZfaHRvbmwoVk5JX0lEIFx1MDAzY1x1MDAzYyA4KVxuQEAgLTU4OSw5ICs2MDYsMTIgQEAgaW50IF9fZW5jYXBfaXA2dnhsYW5fZXRoKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiBcdFx0cmV0dXJuIFRDX0FDVF9PSztcbiB9XG4gXG4tc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8pXG4rc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8sXG4rXHRcdFx0ICBfX3U2NCBpcHhpcF9mbGFnKVxuIHtcbiBcdF9fdTY0IGZsYWdzID0gQlBGX0ZfQURKX1JPT01fRklYRURfR1NPO1xuK1x0c3RydWN0IHNrX2J1ZmYgKmtza2I7XG4rXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm87XG4gXHRzdHJ1Y3QgaXB2Nl9vcHRfaGRyIGlwNl9vcHRfaGRyO1xuIFx0c3RydWN0IGdyZV9oZHIgZ3JlaDtcbiBcdHN0cnVjdCB1ZHBoZHIgdWRwaDtcbkBAIC01OTksMTAgKzYxOSwxMiBAQCBzdGF0aWMgaW50IGRlY2FwX2ludGVybmFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiwgaW50IG9mZiwgaW50IGxlbiwgY2hhciBwcm90bylcbiBcbiBcdHN3aXRjaCAocHJvdG8pIHtcbiBcdGNhc2UgSVBQUk9UT19JUElQOlxuLVx0XHRmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0O1xuK1x0XHRmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0IHxcbitcdFx0XHQgaXB4aXBfZmxhZztcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElQUFJPVE9fSVBWNjpcbi1cdFx0ZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNjtcbitcdFx0ZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNiB8XG4rXHRcdFx0IGlweGlwX2ZsYWc7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBORVhUSERSX0RFU1Q6XG4gXHRcdGlmIChicGZfc2tiX2xvYWRfYnl0ZXMoc2tiLCBvZmYgKyBsZW4sIFx1MDAyNmlwNl9vcHRfaGRyLFxuQEAgLTYxMCwxMCArNjMyLDEyIEBAIHN0YXRpYyBpbnQgZGVjYXBfaW50ZXJuYWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiLCBpbnQgb2ZmLCBpbnQgbGVuLCBjaGFyIHByb3RvKVxuIFx0XHRcdHJldHVybiBUQ19BQ1RfT0s7XG4gXHRcdHN3aXRjaCAoaXA2X29wdF9oZHIubmV4dGhkcikge1xuIFx0XHRjYXNlIElQUFJPVE9fSVBJUDpcbi1cdFx0XHRmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0O1xuK1x0XHRcdGZsYWdzIHw9IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQgfFxuK1x0XHRcdFx0IGlweGlwX2ZsYWc7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgSVBQUk9UT19JUFY2OlxuLVx0XHRcdGZsYWdzIHw9IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjY7XG4rXHRcdFx0ZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNiB8XG4rXHRcdFx0XHQgaXB4aXBfZmxhZztcbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHRyZXR1cm4gVENfQUNUX09LO1xuQEAgLTYyMSw2ICs2NDUsMTEgQEAgc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8pXG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBJUFBST1RPX0dSRTpcbiBcdFx0b2xlbiArPSBzaXplb2Yoc3RydWN0IGdyZV9oZHIpO1xuK1x0XHRpZiAoIWJwZl9jb3JlX2VudW1fdmFsdWVfZXhpc3RzKGVudW0gYnBmX2Fkal9yb29tX2ZsYWdzLFxuK1x0XHRcdFx0XHRcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRSkpXG4rXHRcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuK1x0XHRmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkU7XG4rXG4gXHRcdGlmIChicGZfc2tiX2xvYWRfYnl0ZXMoc2tiLCBvZmYgKyBsZW4sIFx1MDAyNmdyZWgsIHNpemVvZihncmVoKSkgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIFRDX0FDVF9PSztcbiBcdFx0c3dpdGNoIChicGZfbnRvaHMoZ3JlaC5wcm90b2NvbCkpIHtcbkBAIC02MzQsNiArNjYzLDEwIEBAIHN0YXRpYyBpbnQgZGVjYXBfaW50ZXJuYWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiLCBpbnQgb2ZmLCBpbnQgbGVuLCBjaGFyIHByb3RvKVxuIFx0XHRicmVhaztcbiBcdGNhc2UgSVBQUk9UT19VRFA6XG4gXHRcdG9sZW4gKz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuK1x0XHRpZiAoIWJwZl9jb3JlX2VudW1fdmFsdWVfZXhpc3RzKGVudW0gYnBmX2Fkal9yb29tX2ZsYWdzLFxuK1x0XHRcdFx0XHRcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCkpXG4rXHRcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuK1x0XHRmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9VRFA7XG4gXHRcdGlmIChicGZfc2tiX2xvYWRfYnl0ZXMoc2tiLCBvZmYgKyBsZW4sIFx1MDAyNnVkcGgsIHNpemVvZih1ZHBoKSkgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIFRDX0FDVF9PSztcbiBcdFx0c3dpdGNoIChicGZfbnRvaHModWRwaC5kZXN0KSkge1xuQEAgLTY1NSw2ICs2ODgsNDAgQEAgc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8pXG4gXHRpZiAoYnBmX3NrYl9hZGp1c3Rfcm9vbShza2IsIC1vbGVuLCBCUEZfQURKX1JPT01fTUFDLCBmbGFncykpXG4gXHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbiBcbitcdGtza2IgPSBicGZfY2FzdF90b19rZXJuX2N0eChza2IpO1xuK1x0c2hpbmZvID0gYnBmX2NvcmVfY2FzdChrc2tiLVx1MDAzZWhlYWQgKyBrc2tiLVx1MDAzZWVuZCwgc3RydWN0IHNrYl9zaGFyZWRfaW5mbyk7XG4rXHRpZiAoc2hpbmZvLVx1MDAzZWdzb19zaXplKSB7XG4rXHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoc2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNiBTS0JfR1NPX1VEUF9UVU5ORUxfTUFTSykpXG4rXHRcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuK1xuK1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKHNoaW5mby1cdTAwM2Vnc29fdHlwZSBcdTAwMjYgKFNLQl9HU09fR1JFIHwgU0tCX0dTT19HUkVfQ1NVTSkpKVxuK1x0XHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbitcbitcdFx0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0KSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIChzaGluZm8tXHUwMDNlZ3NvX3R5cGUgXHUwMDI2IFNLQl9HU09fSVBYSVA0KSlcbitcdFx0XHRyZXR1cm4gVENfQUNUX1NIT1Q7XG4rXG4rXHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNikgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoc2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNiBTS0JfR1NPX0lQWElQNikpXG4rXHRcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuK1xuK1x0XHRpZiAoZmxhZ3MgXHUwMDI2IChCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLIHxcbitcdFx0XHQgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0spKSB7XG4rXHRcdFx0aWYgKChzaGluZm8tXHUwMDNlZ3NvX3R5cGUgXHUwMDI2IFNLQl9HU09fVFVOTkVMX01BU0spIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAha3NrYi1cdTAwM2VlbmNhcHN1bGF0aW9uKVxuK1x0XHRcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuK1x0XHRcdGlmICghKHNoaW5mby1cdTAwM2Vnc29fdHlwZSBcdTAwMjYgU0tCX0dTT19UVU5ORUxfTUFTSykgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIGtza2ItXHUwMDNlZW5jYXBzdWxhdGlvbilcbitcdFx0XHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbitcdFx0fVxuK1x0fSBlbHNlIGlmICgoZmxhZ3MgXHUwMDI2IChCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLIHxcbitcdFx0XHQgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0spKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAga3NrYi1cdTAwM2VlbmNhcHN1bGF0aW9uKSB7XG4rXHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbitcdH1cbitcbiBcdHJldHVybiBUQ19BQ1RfT0s7XG4gfVxuIFxuQEAgLTY2Miw2ICs3MjksMTAgQEAgc3RhdGljIGludCBkZWNhcF9pcHY0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiB7XG4gXHRzdHJ1Y3QgaXBoZHIgaXBoX291dGVyO1xuIFxuK1x0aWYgKCFicGZfY29yZV9lbnVtX3ZhbHVlX2V4aXN0cyhlbnVtIGJwZl9hZGpfcm9vbV9mbGFncyxcbitcdFx0XHRcdFx0QlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0KSlcbitcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuK1xuIFx0aWYgKGJwZl9za2JfbG9hZF9ieXRlcyhza2IsIEVUSF9ITEVOLCBcdTAwMjZpcGhfb3V0ZXIsXG4gXHRcdFx0ICAgICAgIHNpemVvZihpcGhfb3V0ZXIpKSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIFRDX0FDVF9PSztcbkBAIC02NzAsMTkgKzc0MSwyNSBAQCBzdGF0aWMgaW50IGRlY2FwX2lwdjQoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuIFx0XHRyZXR1cm4gVENfQUNUX09LO1xuIFxuIFx0cmV0dXJuIGRlY2FwX2ludGVybmFsKHNrYiwgRVRIX0hMRU4sIHNpemVvZihpcGhfb3V0ZXIpLFxuLVx0XHRcdCAgICAgIGlwaF9vdXRlci5wcm90b2NvbCk7XG4rXHRcdFx0ICAgICAgaXBoX291dGVyLnByb3RvY29sLFxuK1x0XHRcdCAgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgZGVjYXBfaXB2NihzdHJ1Y3QgX19za19idWZmICpza2IpXG4ge1xuIFx0c3RydWN0IGlwdjZoZHIgaXBoX291dGVyO1xuIFxuK1x0aWYgKCFicGZfY29yZV9lbnVtX3ZhbHVlX2V4aXN0cyhlbnVtIGJwZl9hZGpfcm9vbV9mbGFncyxcbitcdFx0XHRcdFx0QlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KSlcbitcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuK1xuIFx0aWYgKGJwZl9za2JfbG9hZF9ieXRlcyhza2IsIEVUSF9ITEVOLCBcdTAwMjZpcGhfb3V0ZXIsXG4gXHRcdFx0ICAgICAgIHNpemVvZihpcGhfb3V0ZXIpKSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIFRDX0FDVF9PSztcbiBcbiBcdHJldHVybiBkZWNhcF9pbnRlcm5hbChza2IsIEVUSF9ITEVOLCBzaXplb2YoaXBoX291dGVyKSxcbi1cdFx0XHQgICAgICBpcGhfb3V0ZXIubmV4dGhkcik7XG4rXHRcdFx0ICAgICAgaXBoX291dGVyLm5leHRoZHIsXG4rXHRcdFx0ICAgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KTtcbiB9XG4gXG4gU0VDKFwidGNcIilcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjQ5OjAxLjY5MjI1MTQ4NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3NDk5Mzc3NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV3IEJQRiBQYXRjaCoqXG5cbk9rYXksIHNvIHdlIGhhdmUgdGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMgc29tZSBuZXcgZmxhZ3MgZm9yIGBicGZfc2tiX2FkanVzdF9yb29tYDogYEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRWAsIGBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9VRFBgLCBgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0YCwgYW5kIGBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDZgLiBJdCBzZWVtcyB0aGVzZSBhcmUgc3BlY2lmaWNhbGx5IGZvciBjbGVhcmluZyB0dW5uZWwtcmVsYXRlZCBHU08gZmxhZ3MgZHVyaW5nIGRlY2Fwc3VsYXRpb24uIFN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIHRoZSBnb2FsIGlzIGNsZWFyLlxuXG5UaGUgcGF0Y2ggdG91Y2hlcyBgYnBmX3NrYl9uZXRfc2hyaW5rYCBhbmQgYGJwZl9za2JfYWRqdXN0X3Jvb21gIHdpdGhpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBUaGF0J3MgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIHRoZSBCUEYgbmV0d29ya2luZyBjb3JlLCB3aGljaCBpbnN0YW50bHkgcmFpc2VzIGEgZmxhZy4gSXQncyBkZWZpbml0ZWx5IGluIGEgaG90IHBhdGggYW5kIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBXZSBhYnNvbHV0ZWx5IG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgcm9jayBzb2xpZC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGV4YWN0IGNhbGwgcG9pbnRzLiBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgaXMgYSBCUEYgaGVscGVyLCBzbyBpdCdzIGludm9rZWQgYnkgQlBGIHByb2dyYW1zLCB3aGljaCBtZWFucyB0aGUgaGVscGVyIGZ1bmN0aW9uIGl0c2VsZiwgaS5lLiwgYGJwZl9za2JfYWRqdXN0X3Jvb21gIChCUEZfQ0FMTF80KSwgaXMgdGhlIHRhcmdldC4gSGFuZyBvbiwgYXJlbid0IEJQRiBoZWxwZXJzIHVzdWFsbHkgZGVjbGFyZWQgc3RhdGljYWxseSBvciB2aWEgbWFjcm9zPyBHb29kIHByYWN0aWNlIHNheXMgY2hlY2sgdGhlIHNvdXJjZS4gSSBuZWVkIHRvIGJlIHN1cmUgd2hlcmUgYGJwZl9za2JfYWRqdXN0X3Jvb21gIGlzIGFjdHVhbGx5IGRlZmluZWQgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyMjksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjo0OTowOC40NDIxOTIxNzJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxMDE0NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3NrYl9hZGp1c3Rfcm9vbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz0yMDkzPUJQRl9DQUxMXzIoYnBmX2NzdW1fbGV2ZWwsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTY0LCBsZXZlbClcXG5uZXQvY29yZS9maWx0ZXIuYy0yMDk0LXtcXG5uZXQvY29yZS9maWx0ZXIuYzoyMDk1OlxcdC8qIFRoZSBpbnRlcmZhY2UgaXMgdG8gYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGJwZl9za2JfYWRqdXN0X3Jvb20oKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTIwOTYtXFx0ICogZm9yIGVuY2FwL2RlY2FwIG9mIHBhY2tldCBoZWFkZXJzIHdoZW4gQlBGX0ZfQURKX1JPT01fTk9fQ1NVTV9SRVNFVFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MzgzNz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIHNrX3NrYl9hZGp1c3Rfcm9vbV9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTM4NDYtXFxubmV0L2NvcmUvZmlsdGVyLmM6Mzg0NzpCUEZfQ0FMTF80KGJwZl9za2JfYWRqdXN0X3Jvb20sIHN0cnVjdCBza19idWZmICosIHNrYiwgczMyLCBsZW5fZGlmZixcXG5uZXQvY29yZS9maWx0ZXIuYy0zODQ4LVxcdCAgIHUzMiwgbW9kZSwgdTY0LCBmbGFncylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTM5NDEtXFxubmV0L2NvcmUvZmlsdGVyLmM6Mzk0MjpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfYWRqdXN0X3Jvb21fcHJvdG8gPSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6Mzk0MzpcXHQuZnVuY1xcdFxcdD0gYnBmX3NrYl9hZGp1c3Rfcm9vbSxcXG5uZXQvY29yZS9maWx0ZXIuYy0zOTQ0LVxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04NjM2PXRjX2Nsc19hY3RfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg2NjktXFx0Y2FzZSBCUEZfRlVOQ19za2JfYWRqdXN0X3Jvb206XFxubmV0L2NvcmUvZmlsdGVyLmM6ODY3MDpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za2JfYWRqdXN0X3Jvb21fcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmMtODY3MS1cXHRjYXNlIEJQRl9GVU5DX3NrYl9jaGFuZ2VfdGFpbDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6NDk6MDguNDg3MzA0Nzg4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwMTk3MTg2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgRnVuY3Rpb24qKlxuXG5SaWdodCwgc28gSSBzZWUgYSBmdW5jdGlvbiBkZWZpbml0aW9uOiBgQlBGX0NBTExfNChicGZfc2tiX2FkanVzdF9yb29tLCAuLi4pYC4gVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gTm93LCBrbm93aW5nIGhvdyB0aGluZ3MgYXJlIGluIHRoZSBrZXJuZWwsIHRoZSBhY3R1YWwgZXhwb3J0ZWQgc3ltYm9sIEknbSBsaWtlbHkgdG8gc2VlIHdoZW4gSSdtIGxvb2tpbmcgYXQgdGhlIHNvdXJjZSBjb2RlIG1pZ2h0IGJlIGBfX19fYnBmX3NrYl9hZGp1c3Rfcm9vbWAgb3IganVzdCBwbGFpbiBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAuIFRoZSBuYW1pbmcgY29udmVudGlvbnMgYXJlIHVzdWFsbHkgZmFpcmx5IHByZWRpY3RhYmxlLCBzbyB0aGF0J3MgYSBnb29kIGFzc3VtcHRpb24gdG8gaGF2ZS5cblxuVGhlIG5leHQgbG9naWNhbCBzdGVwLCBiZWZvcmUgSSBkaWcgYW55IGRlZXBlciBpbnRvIHRoZSBmdW5jdGlvbiBpdHNlbGYsIGlzIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBjaGVjayBleGFjdGx5ICpob3cqIGBCUEZfQ0FMTF80YCBpcyBkZWZpbmVkLiBVbmRlcnN0YW5kaW5nIHRoYXQgbWFjcm8gd2lsbCBnaXZlIG1lIHZpdGFsIGNvbnRleHQ6IHdoYXQgaXQgZXhwYW5kcyB0bywgaG93IHRoZSBhcmd1bWVudHMgYXJlIHBhc3NlZCwgYW5kIHVsdGltYXRlbHkgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIEJQRiBpbmZyYXN0cnVjdHVyZS4gS25vd2luZyB0aGUgbWFjcm8gZGVmaW5pdGlvbiBpcyBrZXkgdG8gdW5wYWNraW5nIHRoZSB3aG9sZSB0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0MDUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjo0OToxMi4zODkyNzg2MDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyNDA2MTUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBCUEZfQ0FMTF80XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjQ5OjEyLjQzNDUzMDIxN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODc1Njk2NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwncyBCUEYgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBteSBiZWFyaW5ncy4gR2l2ZW4gd2hhdCBJJ20gd29ya2luZyBvbiwgSSBrbm93IHRoZSBjcnVjaWFsIGRlZmluaXRpb25zIGFuZCBzdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gQmVya2VsZXkgUGFja2V0IEZpbHRlciAoQlBGKSBhcmUgZ29pbmcgdG8gYmUgaW4gb25lIG9mIHR3byBwbGFjZXMsIG1vc3QgbGlrZWx5LiBNeSBmaXJzdCBzdG9wIGhhcyB0byBiZSBlaXRoZXIgYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgIG9yLCBwZXJoYXBzIG1vcmUgZGlyZWN0bHksIGBpbmNsdWRlL2xpbnV4L2JwZi5oYC4gSSdsbCBzdGFydCB3aXRoIHRob3NlIGhlYWRlcnMuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgdHJlYXN1cmVzIGF3YWl0IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc1MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjQ5OjE1LjYyMjEwMjM5NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjg3Nzk5NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIEJQRl9DQUxMXzRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaD00MDk9c3RhdGljIGlubGluZSBib29sIGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02NTgtI2RlZmluZSBCUEZfQ0FMTF8zKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDMsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjY1OTojZGVmaW5lIEJQRl9DQUxMXzQobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goNCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjYwLSNkZWZpbmUgQlBGX0NBTExfNShuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCg1LCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjQ5OjE1Ljc1MDg4OTkyM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MTU3ODY4NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiBcIkxldCdzIHNlZSBgQlBGX0NBTExfeGAsXCIgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgYW4gZXhwZXJ0IGluIGEgcmVsZXZhbnQgZmllbGQgKGFzc3VtaW5nIHdlJ3JlIHRhbGtpbmcgYWJvdXQgQlBGIGluIGEgbmV0d29ya2luZyBvciBzeXN0ZW1zIGNvbnRleHQpOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgQ29yZSoqXG5cblJpZ2h0LCBgQlBGX0NBTExfeGAuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UncmUgbG9va2luZyBhdCBhIEJQRiBoZWxwZXIgZnVuY3Rpb24gY2FsbC4gVGhlIGBCUEZfQ0FMTF9gIHByZWZpeCBpcyBhIGRlYWQgZ2l2ZWF3YXkuIFRoZSBcInhcIiBpcyB0aGUgY3J1Y2lhbCBwYXJ0LCBvZiBjb3Vyc2UuIEl0IHNpZ25pZmllcyB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHNwZWNpZmljIGhlbHBlciwgbGlrZWx5IG9uZSB0aGF0J3MgYmVlbiBjb21waWxlZCBpbi5cblxuTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgcnVubmluZyB0aHJvdWdoIHRoZSBwb3NzaWJpbGl0aWVzLiBXaGF0J3MgdGhlIGNvbnRleHQ/IFdoYXQncyB0aGUgcHJvZ3JhbSB0eXBlPyBJcyB0aGlzIGEgdHJhY2Vwb2ludCwgYSBzb2NrZXQgZmlsdGVyLCBhIFhEUCBwcm9ncmFtLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIHR5cGUgb2YgcHJvZ3JhbSB3aWxsIGdyZWF0bHkgaW5mbHVlbmNlIHRoZSBhdmFpbGFibGUgaGVscGVyIGZ1bmN0aW9ucyBhbmQgdGhlIHJlZ2lzdGVycyBJIGhhdmUgYXQgbXkgZGlzcG9zYWwuXG5cbkknbSBwcm9iYWJseSBnb2luZyB0byBuZWVkIHRvIGxvb2sgdXAgYEJQRl9DQUxMX3hgIGluIHRoZSBrZXJuZWwgZG9jdW1lbnRhdGlvbiBvciB0aGUgcmVsZXZhbnQgaGVhZGVycyB0byBuYWlsIGRvd24gdGhlIGV4YWN0IGZ1bmN0aW9uLiBLbm93aW5nICp3aGljaCogYEJQRl9DQUxMX2Agd2UncmUgbG9va2luZyBhdCBpcyB0aGUga2V5LiBUaGUgKngqIHRlbGxzIG1lIHdoaWNoIG9uZSB0byBjaGVjaywgYW5kIGFsc28gd2hhdCBhcmd1bWVudHMgaXQgdGFrZXMsIGFuZCB3aGF0IGl0cyByZXR1cm4gdmFsdWUgaXMuIElzIGl0IGEgaGVscGVyIGZvciByZWFkaW5nIGEgcGFja2V0J3MgbWV0YWRhdGEsIG1hbmlwdWxhdGluZyBhIHNvY2tldCwgYWNjZXNzaW5nIGEgdXNlciBzcGFjZSBkYXRhIHN0cnVjdHVyZSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/XG5cbkknbGwgYmUgdGhpbmtpbmcgYWJvdXQgcG9zc2libGUgZWRnZSBjYXNlcy4gRG9lcyBpdCBoYXZlIGFueSBlcnJvciBjb2Rlcz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgcmV0dXJuIHZhbHVlPyBJcyBpdCBzYWZlIHRvIGNhbGwgdGhpcyBoZWxwZXIgZnJvbSB3aGVyZSB0aGlzIHByb2dyYW0gaXMgcnVubmluZz8gSWYgaXQgaXMgYSB0cmFjZXBvaW50LCBob3cgaXMgaXQgZGVhbGluZyB3aXRoIGNvbmN1cnJlbmN5IGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zPyBJcyBpdCBzdWJqZWN0IHRvIHByaXZpbGVnZSBpc3N1ZXM/XG5cbkFsc28sIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IGNvbmNlcm5zPyBXaGF0IGFyZSB0aGUgaW5wdXRzLCBhbmQgYXJlIHRoZXkgc2FuaXRpemVkPyBDYW4gaXQgYmUgZXhwbG9pdGVkIGluIHNvbWUgd2F5PyBXaGF0J3MgdGhlIGltcGFjdCBvbiBwZXJmb3JtYW5jZT8gSSdsbCBiZSB3YW50aW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYEJQRl9DQUxMX3hgIGFmZmVjdHMgdGhlIG92ZXJhbGwgQlBGIHByb2dyYW0gYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsIGFuZCB0aGUgc3Vycm91bmRpbmcgZW52aXJvbm1lbnQuIFNvIG1hbnkgZGV0YWlscyB0byBxdWlja2x5IHJlY2FsbCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTIxMTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjo0OToyMS40NjY2Nzk0ODhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzOTA0NzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBCUEZfQ0FMTF94XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvZmlsdGVyLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaD00MDk9c3RhdGljIGlubGluZSBib29sIGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02NDEtXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2NDI6I2RlZmluZSBCUEZfQ0FMTF94KHgsIGF0dHIsIG5hbWUsIC4uLilcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjQzLVxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjo0OToyMS41MTA1OTI1NTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk5OTg2NzU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQlBGIEZ1bmN0aW9uIFBvaW50ZXIgTWFnaWMqKlxuXG5BbHJpZ2h0LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLi4uIHRoZSBgQlBGX0NBTExfeGAgbWFjcm8gZmFtaWx5Li4uIHRoYXQncyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLCBpc24ndCBpdD8gSSdtIGFsbW9zdCBjZXJ0YWluIHRoYXQgd2hhdCB0aGVzZSBtYWNyb3MgYXJlIGRvaW5nIHVuZGVyIHRoZSBob29kIGlzIGdlbmVyYXRpbmcgdHdvIHRoaW5nczogYSBcImhpZGRlblwiIHN5bWJvbCwgcGVyaGFwcyBuYW1lZCBzb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIGBfX19fIyNuYW1lYCAob3IgYSBzaW1pbGFyLCBjb21waWxlci1nZW5lcmF0ZWQgY29uc3RydWN0KSwgYW5kIHRoZW4sIGFsb25nc2lkZSB0aGF0LCB0aGUgaW50ZW5kZWQgYG5hbWVgIGl0c2VsZi4gVGhlIFwiaGlkZGVuXCIgbmFtZSB3b3VsZCBsaWtlbHkgYmUgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBCUEYgZnVuY3Rpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZXhhY3QgbWFuZ2xpbmcgcnVsZXMsIGJ1dCB0aGF0J3MgdGhlIGJhc2ljIHBhdHRlcm4gSSdtIHJlY2FsbGluZywgdGhhdCB0aGUgZXhwYW5kZWQgbWFjcm8gcmVzdWx0cyBpbiB0aG9zZSB0d28gcGFydHMgYmVpbmcgY3JlYXRlZCBvciwgbW9yZSBzcGVjaWZpY2FsbHksIHRoZSBtYWNybyBjb25zdHJ1Y3RzIHRoZSBhcHByb3ByaWF0ZSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuIEkgbmVlZCB0byByZXZpc2l0IHRoZSBwcmVjaXNlIG1lY2hhbmljcyBvZiB3aHkgdGhhdOKAmXMgdGhlIHdheSB3ZSBoYW5kbGUgdGhlIGZ1bmN0aW9uIGNhbGxzLCBidXQgdGhlIGdvYWwgaXMgdG8gbWFrZSBhIHdheSB0byB1c2UgYSBCUEYgZnVuY3Rpb24gY2FsbCBpbiB0aGUgdXNlciBzcGFjZSBjb2RlIHdpdGggYSBrbm93biBmdW5jdGlvbiwgd2hpbGUgYWxzbyBkb2luZyBCUEYgdGhpbmdzIHVuZGVyIHRoZSBob29kLiBTbyB0aGUgaGlkZGVuIG5hbWUgaXMgdGhlIGludGVybmFsIHJlZmVyZW5jZSwgYW5kIHRoZSBtb3JlIHN0YW5kYXJkIG5hbWUgaXMgdGhlIG9uZSB0aGF0J3MgZXhwb3J0ZWQgc28gd2UgY2FuIGFjdHVhbGx5IGNhbGwgaXQgZnJvbSB1c2VyIHNwYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjcyNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjQ5OjI1LjUxMDQ2MjgyOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4MDk1ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIEJQRl9DQUxMX3hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTQwOT1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX2F0b21pY19pc19sb2FkX2FjcShjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTY0MS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjY0MjojZGVmaW5lIEJQRl9DQUxMX3goeCwgYXR0ciwgbmFtZSwgLi4uKVxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02NDMtXFx0c3RhdGljIF9fYWx3YXlzX2lubGluZVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjQ5OjI1LjU1NTI3Njc0M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDUyMTY2NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGN1cnJlbnQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGVCUEYgRmlsdGVyIFN0cnVjdHVyZXMqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGZvY3VzaW5nIG9uIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiBlQlBGIGZpbHRlciBjb25zdHJ1Y3Rpb24gd2l0aGluIHRoZSBrZXJuZWwuIExldCdzIHN0YXJ0IHdpdGggYSBzcGVjaWZpYyBwb2ludCDigJMgdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpbHRlciBzdHJ1Y3R1cmUgaXRzZWxmLiBJJ20gaGVhZGluZyBzdHJhaWdodCB0byBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA2NDIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgbGF5b3V0IG9mIHRoaXMgc3RydWN0OiB0aGUgYHNvY2tfZmlsdGVyYCBhcnJheSBhbmQgaXRzIGFzc29jaWF0ZWQgbWV0YWRhdGEuIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGV0YWlscyBpcyBjcnVjaWFsIHRvIHRyYWNpbmcgaG93IGZpbHRlciBwcm9ncmFtcyBhcmUgcmVwcmVzZW50ZWQgaW4gbWVtb3J5IGFuZCBob3cgdGhlIEpJVCBjb21waWxlciwgb3IgaW50ZXJwcmV0ZXIsIHdpbGwgdWx0aW1hdGVseSBwcm9jZXNzIHRoZW0uIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgaG93IHRoZSBpbnN0cnVjdGlvbiBwb2ludGVycywgY29uc3RhbnRzIGFuZCBqdW1wcyBhcmUgZW5jb2RlZCB3aXRoaW4gZWFjaCBpbnN0cnVjdGlvbiBvZiB0aGUgYXJyYXkuIExldCdzIHNlZSBpZiB0aGUgaW50ZXJuYWwgY29tbWVudHMgYXJlIHVwIHRvIGRhdGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTc0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6NDk6MjkuNjA3NDQ2MTgyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2ZpbHRlci5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYzNSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYzNTpcXHQjZGVmaW5lIF9fQlBGX0RFQ0xfQVJHUyh0LCBhKSB0ICAgYVxcbiA2MzY6XFx0I2RlZmluZSBfX0JQRl9ERUNMX1JFR1ModCwgYSkgdTY0IGFcXG4gNjM3OlxcdFxcbiA2Mzg6XFx0I2RlZmluZSBfX0JQRl9QQUQobilcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiA2Mzk6XFx0XFx0X19CUEZfTUFQKG4sIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfTiwgdTY0LCBfX3VyXzEsIHU2NCwgX191cl8yLCAgICAgICBcXFxcXFxuIDY0MDpcXHRcXHRcXHQgIHU2NCwgX191cl8zLCB1NjQsIF9fdXJfNCwgdTY0LCBfX3VyXzUpXFxuIDY0MTpcXHRcXG4gNjQyOlxcdCNkZWZpbmUgQlBGX0NBTExfeCh4LCBhdHRyLCBuYW1lLCAuLi4pXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjQzOlxcdFxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiA2NDQ6XFx0XFx0dTY0IF9fX18jI25hbWUoX19CUEZfTUFQKHgsIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfViwgX19WQV9BUkdTX18pKTsgICBcXFxcXFxuIDY0NTpcXHRcXHR0eXBlZGVmIHU2NCAoKmJ0Zl8jI25hbWUpKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSk7IFxcXFxcXG4gNjQ2OlxcdFxcdGF0dHIgdTY0IG5hbWUoX19CUEZfUkVHKHgsIF9fQlBGX0RFQ0xfUkVHUywgX19CUEZfTiwgX19WQV9BUkdTX18pKTsgICAgXFxcXFxcbiA2NDc6XFx0XFx0YXR0ciB1NjQgbmFtZShfX0JQRl9SRUcoeCwgX19CUEZfREVDTF9SRUdTLCBfX0JQRl9OLCBfX1ZBX0FSR1NfXykpICAgICBcXFxcXFxuIDY0ODpcXHRcXHR7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjQ5OlxcdFxcdFxcdHJldHVybiAoKGJ0Zl8jI25hbWUpX19fXyMjbmFtZSkoX19CUEZfTUFQKHgsX19CUEZfQ0FTVCxfX0JQRl9OLF9fVkFfQVJHU19fKSk7XFxcXFxcbiA2NTA6XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIDY1MTpcXHRcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjUyOlxcdFxcdHU2NCBfX19fIyNuYW1lKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSlcXG4gNjUzOlxcdFxcbiA2NTQ6XFx0I2RlZmluZSBfX05PQVRUUlxcbiA2NTU6XFx0I2RlZmluZSBCUEZfQ0FMTF8wKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDAsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG4gNjU2OlxcdCNkZWZpbmUgQlBGX0NBTExfMShuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgxLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuIDY1NzpcXHQjZGVmaW5lIEJQRl9DQUxMXzIobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMiwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbiA2NTg6XFx0I2RlZmluZSBCUEZfQ0FMTF8zKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDMsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG4gNjU5OlxcdCNkZWZpbmUgQlBGX0NBTExfNChuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCg0LCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuIDY2MDpcXHQjZGVmaW5lIEJQRl9DQUxMXzUobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goNSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbiA2NjE6XFx0XFxuIDY2MjpcXHQjZGVmaW5lIE5PVFJBQ0VfQlBGX0NBTExfMShuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgxLCBub3RyYWNlLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG4gNjYzOlxcdFxcbiA2NjQ6XFx0I2RlZmluZSBicGZfY3R4X3JhbmdlKFRZUEUsIE1FTUJFUilcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjQ5OjI5LjYwNzU3NTk3MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Njc2MDE3MzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGUgYGJwZl9za2JfYWRqdXN0X3Jvb21gIFBhdGNoKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQgZGVmaW5lcyBgbmFtZWAgYXMgYGJwZl9za2JfYWRqdXN0X3Jvb21gLCBhbmQgYF9fX19icGZfc2tiX2FkanVzdF9yb29tYCB3aGljaCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljIF9fYWx3YXlzX2lubGluZWAuIFRoZXJlZm9yZSwgdGhlIGtlcm5lbCBzeW1ib2wgaXRzZWxmLCB0aGUgb25lIGFjdHVhbGx5IGV4cG9zZWQgdG8gdGhlIEJQRiBwcm9ncmFtcywgaXMgaW5kZWVkIGBicGZfc2tiX2FkanVzdF9yb29tYC4gVGhhdCBtdWNoIGlzIGNsZWFyLlxuXG5JIHNlZSBhbHNvIHRoYXQgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBicGZfc2tiX25ldF9zaHJpbmtgLiBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBpZiB0aGF0IGZ1bmN0aW9uIGlzIGFsc28gc3RhdGljIGJlY2F1c2UgdGhhdCB3b3VsZCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIGNoYW5nZXMgaW50ZXJhY3QuIFllcCwgYGJwZl9za2JfbmV0X3Nocmlua2AgaXMgZGVjbGFyZWQgYHN0YXRpYyBpbnRgLiBPa2F5LCBzbyBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgaXMgY2xlYXJseSB0aGUga2V5IGVudHJ5IHBvaW50LlxuXG5Ob3csIEkgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzLiBBcmUgdGhlcmUgYW55IHBhcnRpY3VsYXIgYENPTkZJR2Agb3B0aW9ucyB0aGF0IGFyZSBuZWNlc3Nhcnkgb3IgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2U/IFRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgYG5ldC9jb3JlL2ZpbHRlci5jYCwgc28gdGhhdCdzIHdoZXJlIEkgbmVlZCB0byBsb29rLiBJdCdzIGNvbXBpbGVkIHdoZW4gZWl0aGVyIGBDT05GSUdfQlBGX1NZU0NBTExgIG9yIGBDT05GSUdfTkVUYCBpcyBlbmFibGVkLiBUaGF0IG1ha2VzIHNlbnNlLiBJJ2xsIHRha2UgYSBxdWljayBwZWVrIGF0IGBuZXQvY29yZS9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgY29tcGlsYXRpb24gZGVwZW5kZW5jaWVzIGFuZCBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDI3NCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjQ5OjM5LjI4MzU5NjA2NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg1OTI1NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmlsdGVyXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTEyPW9iai15XFx0XFx0ICAgICArPSBkZXYubyBkZXZfYXBpLm8gZGV2X2FkZHJfbGlzdHMubyBkc3QubyBuZXRldmVudC5vIFxcXFxcXG5uZXQvY29yZS9NYWtlZmlsZToxMzpcXHRcXHRcXHRuZWlnaGJvdXIubyBydG5ldGxpbmsubyB1dGlscy5vIGxpbmtfd2F0Y2gubyBmaWx0ZXIubyBcXFxcXFxubmV0L2NvcmUvTWFrZWZpbGUtMTQtXFx0XFx0XFx0c29ja19kaWFnLm8gZGV2X2lvY3RsLm8gdHNvLm8gc29ja19yZXVzZXBvcnQubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjQ5OjM5LjM3MjE5Njg2NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTI4NTk3OTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeSBhbmQgUHVycG9zZSBvZiBgZmlsdGVyLm9gKipcblxuT2theSwgc28gaXQgbG9va3MgbGlrZSBgZmlsdGVyLm9gIGlzIGFsd2F5cyBidWlsdCB3aGVuIHRoZSBgbmV0L2NvcmUvYCBtb2R1bGUgaXMgZW5hYmxlZCwgd2hpY2ggaW1wbGllcyBgQ09ORklHX05FVD15YC4gVGhhdCdzIGEgZnVuZGFtZW50YWwgcHJlcmVxdWlzaXRlLiBNeSBpbnRlcmVzdCBoZXJlIGlzIGluIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIG5ldyBCUEYgZmxhZ3Mg4oCTIGBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkVgLCBgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQYCwgYEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNGAsIGFuZCBgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2YCDigJMgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5JdCdzIGNsZWFyIHRoZXkgYXJlIHNpbXBseSBuZXcgb3B0aW9ucyBmb3IgdGhlIGV4aXN0aW5nIGBicGZfc2tiX2FkanVzdF9yb29tYCBoZWxwZXIuIFRoYXQgdGVsbHMgbWUgdGhpcyBpc24ndCBhIHJhZGljYWwgc2hpZnQsIGJ1dCBhbiBlbmhhbmNlbWVudCB0byBhbiBleGlzdGluZyBmdW5jdGlvbmFsaXR5LiBOb3cgSSBuZWVkIHRvIHJlY2FsbCB3aGVyZSBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgaXMgYmVpbmcgKnVzZWQqLiBSaWdodCwgaXQgaXMgcGFydCBvZiB0aGUgY29udGV4dCBmb3IgQlBGIHByb2dyYW1zIHdpdGggZWl0aGVyIHRoZSBgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFNgIG9yIGBCUEZfUFJPR19UWVBFX1NDSEVEX0FDVGAgdHlwZXMg4oCTIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHRyYWZmaWMgY29udHJvbCAodGMpIGZyYW1ld29yay4gVG8gc29saWRpZnkgdGhpcywgbGV0IG1lIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGB0Y19jbHNfYWN0X2Z1bmNfcHJvdG9gIGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIFRoYXQgc2hvdWxkIGNsYXJpZnkgdGhlIGV4YWN0IGludGVncmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDkzMywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjo0OTo0NS45MDA3OTc0NzdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MjM0MzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjX2Nsc19hY3RfZnVuY19wcm90b1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz04NjM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKlxcbm5ldC9jb3JlL2ZpbHRlci5jOjg2MzY6dGNfY2xzX2FjdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg2Mzcte1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTE1MTg9Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgdGNfY2xzX2FjdF92ZXJpZmllcl9vcHMgPSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE1MTk6XFx0LmdldF9mdW5jX3Byb3RvXFx0XFx0PSB0Y19jbHNfYWN0X2Z1bmNfcHJvdG8sXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE1MjAtXFx0LmlzX3ZhbGlkX2FjY2Vzc1xcdD0gdGNfY2xzX2FjdF9pc192YWxpZF9hY2Nlc3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjQ5OjQ1Ljk0NTAzNzUxMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTkzNzQwNDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqVEMgQlBGIGFuZCBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgLSBDb25maWd1cmF0aW9uIENoZWNrKipcblxuQWxyaWdodCwgc28gYGJwZl9za2JfYWRqdXN0X3Jvb21gIGlzIGFwcGFyZW50bHkgYWNjZXNzaWJsZSB3aXRoaW4gVEMgQlBGIHByb2dyYW1zIG5vdy4gVGhhdOKAmXMgZ29vZCB0byBrbm93LiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdmVyaWZ5IHRoaXMgYW5kIGdldCBpdCB1cCBhbmQgcnVubmluZy5cblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmlnaHQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZCBmb3IgVEMgQlBGIHRvIHdvcmsgY29ycmVjdGx5IHdpdGggdGhpcyBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBJIGtub3cgSSdsbCBuZWVkIGBDT05GSUdfQlBGX1NZU0NBTEw9eWAsIGFuZCB0aGVuIGVpdGhlciBgQ09ORklHX05FVF9DTFNfQlBGPXlgIG9yIGBDT05GSUdfTkVUX0FDVF9CUEY9eWAgKG9yIHBvdGVudGlhbGx5IGBDT05GSUdfTkVUX1NDSF9JTkdSRVNTPXlgLCBvciBvdGhlcnMgdGhhdCBlbmFibGUgQlBGIGZ1bmN0aW9uYWxpdHkpLiBcblxuU28sIG15IGltbWVkaWF0ZSBuZXh0IHRhc2sgaXMgdG8gZmlndXJlIG91dCB0aGUgbWluaW1hbCBzZXQgb2YgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQgdG8gdGVzdCB0aGlzIHByb3Blcmx5IHdpdGhpbiBhIFRDIEJQRiBlbnZpcm9ubWVudC4gSSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGtlcm5lbCBjb25maWdzIGFuZCBkb2N1bWVudGF0aW9uIHRvIGRldGVybWluZSB0aGUgb3B0aW1hbCBjb25maWd1cmF0aW9uIGZvciBhIHNpbXBsZSB0ZXN0IGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1Njg1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6NDk6NTEuNTM4NzgxMDc5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDE5MjI2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y19jbHNfYWN0X3ZlcmlmaWVyX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz0xMTUxND1jb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIHNrX2ZpbHRlcl9wcm9nX29wcyA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTE3LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExNTE4OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIHRjX2Nsc19hY3RfdmVyaWZpZXJfb3BzID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTE5LVxcdC5nZXRfZnVuY19wcm90b1xcdFxcdD0gdGNfY2xzX2FjdF9mdW5jX3Byb3RvLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjo0OTo1MS41ODI5Nzg3ODRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcwMzQzNDY1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2UgYXJlIG15IGluaXRpYWwgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgVXNhZ2Ugb2YgYHRjX2Nsc19hY3RfdmVyaWZpZXJfb3BzYCoqXG5cbkFscmlnaHQsIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcyBgdGNfY2xzX2FjdF92ZXJpZmllcl9vcHNgIHN0cnVjdHVyZS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGZpZ3VyZSBvdXQgKndoZXJlKiBpdCdzIGFjdHVhbGx5IGJlaW5nIHV0aWxpemVkLiBVbmRlcnN0YW5kaW5nIGl0cyBkZXBlbmRlbmNpZXMgYW5kIHRoZSBjb2RlIHRoYXQgaW50ZXJhY3RzIHdpdGggaXQgaXMgcGFyYW1vdW50IHRvIGdyYXNwaW5nIGl0cyBvdmVyYWxsIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2Ugd2l0aGluIHRoZSBjb2RlYmFzZS4gSXMgaXQgcGFydCBvZiBhIHNwZWNpZmljIHN1YnN5c3RlbSwgb3IgaXMgaXQgaW50ZWdyYXRlZCBtb3JlIGJyb2FkbHk/IFRoaXMgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uIHdpbGwgc2V0IHRoZSBzdGFnZSBmb3IgYW55IGZ1cnRoZXIgYW5hbHlzaXMgSSdsbCBuZWVkIHRvIGRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE2NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjQ5OjU2LjI4NjQxNjQ2N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0MzE0MjYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjX2Nsc19hY3RfdmVyaWZpZXJfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjo0OTo1Ni4zMzI4NTQ1MDNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5NTQ2MDAzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsJ3MgVHJhZmZpYyBDb250cm9sIFZlcmlmaWVyKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSB0cmFmZmljIGNvbnRyb2wgdmVyaWZpZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgaW1wbGVtZW50ZWQuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYG5ldC9jb3JlL2ZpbHRlci5jYC4gVGhhdCBmaWxlIHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBsb29rIGZvciB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHRjX2Nsc19hY3RfdmVyaWZpZXJfb3BzYC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSByZWxldmFudCBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyB0aGF0IGhhbmRsZSB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MgdGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIHZhbGlkYXRlcyBhY3Rpb25zIGFuZCBjbGFzc2lmaWVycyB3aXRoaW4gdGhlIHRyYWZmaWMgY29udHJvbCBmcmFtZXdvcmsuIExldCdzIHNlZSB3aGF0IHdlIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzkzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6NDk6NTkuNzI4MzE2OTU3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY1MzU5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y19jbHNfYWN0X3ZlcmlmaWVyX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz0xMTUxND1jb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIHNrX2ZpbHRlcl9wcm9nX29wcyA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTE3LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExNTE4OmNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIHRjX2Nsc19hY3RfdmVyaWZpZXJfb3BzID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTE5LVxcdC5nZXRfZnVuY19wcm90b1xcdFxcdD0gdGNfY2xzX2FjdF9mdW5jX3Byb3RvLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjo0OTo1OS43NzM5NzcyOTJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc4MTgzNDA3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIEJQRiBUeXBlIERlZmluaXRpb25zKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBkYXRhIHR5cGVzIHVzZWQgd2l0aGluIHRoZSBCUEYgZnJhbWV3b3JrLiBUaGF0IG1lYW5zIG15IGltbWVkaWF0ZSBmb2N1cyBzaG91bGQgYmUgdGhlIGBpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oYCBoZWFkZXIgZmlsZS4gSXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYnVpbGRpbmcgYmxvY2tzIG9mIGFueSBCUEYgcHJvZ3JhbS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBkZWZpbml0aW9ucyBmb3IgdGhpbmdzIGxpa2UgYF9fdTMyYCwgYF9fczY0YCwgdmFyaW91cyBzdHJ1Y3R1cmVzIHVzZWQgZm9yIEJQRiBtYXBzLCBhbmQgYW55dGhpbmcgZWxzZSByZWxhdGVkIHRvIGRhdGEgcmVwcmVzZW50YXRpb25zIGF0IHRoZSBrZXJuZWwgbGV2ZWwgdGhhdCBCUEYgaW50ZXJhY3RzIHdpdGguIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB1c2Ugb2YgdGhlc2UgdHlwZXMgd2l0aGluIGtlcm5lbCBjb250ZXh0cy4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS4uLiBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gcHJvdmlkZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIG1vcmUgY29tcGxleCBleHBsb3JhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzM0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6NTA6MDMuNTU1ODE0MDExWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTkyNDE4NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNfY2xzX2FjdF92ZXJpZmllcl9vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6NTA6MDMuNjAxNzQ4NjM3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNTA0NDkwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwncyBCUEYgSGVhZGVyKipcblxuQWxyaWdodCwgdGltZSB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBnZXQgYmFjayBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgdGhlIEJQRiBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBrZXJuZWwncyBkZWZpbml0aW9uLiBMZXQncyBzdGFydCB3aXRoIHRoZSBjb3JuZXJzdG9uZTogSSBuZWVkIHRvIG9wZW4gYW5kIGNhcmVmdWxseSBleGFtaW5lIHRoZSBgaW5jbHVkZS9saW51eC9icGYuaGAgaGVhZGVyIGZpbGUuIEl0J3MgdGhlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzLCBjb25zdGFudHMsIGFuZCBtYWNyb3MgdGhhdCB1bmRlcnBpbiB0aGUgZW50aXJlIGVCUEYgZnJhbWV3b3JrLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAqcmVhbGx5KiBoYXBwZW5zLiBJIG5lZWQgdG8gcXVpY2tseSBzY2FuIHRoZSB2YXJpb3VzIGVudW0gYW5kIHN0cnVjdCBkZWZpbml0aW9ucyBmb3IgY29udGV4dC4gR290dGEgbWFrZSBzdXJlIG5vdGhpbmcgZnVuZGFtZW50YWwgaGFzIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgdGltZSBJIHdhcyB0aGlzIGRlZXAuIEkgbmVlZCBhIGNsZWFyIG1lbnRhbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk4MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjUwOjA4Ljk1MjIwMDY2NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2MTA2MjUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjX2Nsc19hY3RfdmVyaWZpZXJfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjUwOjA4Ljk5ODgyMDAwOVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjQ0MDM4NTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBMaW51eCBrZXJuZWwgY29kZTpcblxuKipEaXZpbmcgaW50byB0aGUgVHJhZmZpYyBDb250cm9sIFZlcmlmaWVyIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBmb3IgYHRjX2Nsc19hY3RfdmVyaWZpZXJfb3BzYC4gTmF0dXJhbGx5LCBnaXZlbiBteSBleHBlcmllbmNlLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBuYXZpZ2F0ZSB0aGUga2VybmVsIHNvdXJjZSB0cmVlIGRpcmVjdGx5LiBUaGUgc3RhbmRhcmQgcGxhY2UgdG8gYmVnaW4gbG9va2luZyBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBUcmFmZmljIENvbnRyb2wgaXMgdXN1YWxseSB0aGUgYGluY2x1ZGUvbGludXgvYCBkaXJlY3RvcnkuIFRoYXQncyB3aGVyZSBhIGxvdCBvZiB0aGUgY29yZSBzdHJ1Y3R1cmVzLCBtYWNyb3MsIGFuZCBmdW5jdGlvbiBwcm90b3R5cGVzIHJlbGF0ZWQgdG8gdGhlIGtlcm5lbCdzIGludGVybmFsIEFQSXMgcmVzaWRlLiBJdOKAmXMgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RvcCwgYW5kIHRoZSBwYXRoIG9mIGxlYXN0IHJlc2lzdGFuY2Ugd2hlbiBkZWFsaW5nIHdpdGggZGVmaW5pdGlvbnMgbGlrZSB0aGlzIG9uZS4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjIyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6NTA6MTUuNjQyODYxMDAyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjI3OTEyMSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNfY2xzX2FjdF92ZXJpZmllcl9vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjUwOjE1LjcyNTE0NzMzM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjAxMTgzNjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2Agb3IgYSBzaW1pbGFyIGZpbGUgZGVhbGluZyB3aXRoIEJQRiBzeXNjYWxsIGhhbmRsaW5nLiBUaGF0J3MgdXN1YWxseSB0aGUgcGxhY2UgdG8gc3RhcnQgd2hlbiBJJ20gbG9va2luZyBhdCBCUEYgcHJvZ3JhbSB0eXBlcy4gQnV0IGhvbGQgb24uLi4gYSBxdWljayBjcm9zcy1yZWZlcmVuY2UgbWlnaHQgYmUgc21hcnRlci4gSSBzaG91bGQgY2hlY2sgd2hlcmUgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYCBpcyBhY3R1YWxseSAqZGVmaW5lZCouIFJpZ2h0LCBgYnBmX3R5cGVzLmhgLiBBaCwgdGhlcmUgaXQgaXMuIEl0IG1hcHMgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYCBkaXJlY3RseSB0byBgdGNfY2xzX2FjdGAuIEV4Y2VsbGVudC4gVGhhdCBoZWxwcyBuYXJyb3cgZG93biB0aGUgc2VhcmNoIGNvbnNpZGVyYWJseS4gS25vd2luZyB0aGF0IGNvbm5lY3Rpb24gaXMga2V5LiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0NDIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjo1MDoyNS4zMjYzMzUyMjFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTAzNTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjX2Nsc19hY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTU9QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsIHNrX2ZpbHRlcixcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTYtXFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaDo3OkJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIHRjX2Nsc19hY3QsXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC04LVxcdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6OTpCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfU0NIRURfQUNULCB0Y19jbHNfYWN0LFxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMTAtXFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjUwOjI1LjM3MTQ0MjMzNloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzI1NDE5MzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkJQRiBQcm9ncmFtIFR5cGUgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IGVCUEYgcHJvZ3JhbXMgYXJlIGhhbmRsZWQgaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHdpdGggcmVnYXJkIHRvIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2AgYW5kIGBCUEZfUFJPR19UWVBFX1NDSEVEX0FDVGAuIFJpZ2h0LCBgdGNfY2xzX2FjdGAgaXMgdGhlIGtleSBmdW5jdGlvbiB1c2VkIHRvIG1hbmFnZSB0aG9zZSwgd2hpY2ggSSBrbmV3LiBOb3csIGxldCBtZSByZW1pbmQgbXlzZWxmIC0gdGhlc2UgYXJlIGRlZmluaXRlbHkgZW5hYmxlZCBieSBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYWxzbyBgQ09ORklHX05FVGAsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEhtbSwgSSB3b25kZXIgaWYgd2UgbmVlZCBgQ09ORklHX05FVF9DTFNfQlBGYD8gSSBoYXZlIGEgZmVlbGluZyBpdCBtaWdodCBiZSwgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gYmUgY2VydGFpbiwgc28gaXQncyBiZXN0IHRvIHZlcmlmeSB0aGlzLiBBbHJpZ2h0LCBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBjb2RlLiBJJ2xsIHRha2UgYSBsb29rIGluIGBuZXQvc2NoZWQvY2xzX2JwZi5jYCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODk3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6NTA6MzAuMDk2ODY0ODc3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjkzMzY3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjbHNfYnBmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTU2Mj1jb25maWcgTkVUX0NMU19CUEZcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTU2OS1cXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG5uZXQvc2NoZWQvS2NvbmZpZzo1NzA6XFx0ICBiZSBjYWxsZWQgY2xzX2JwZi5cXG5uZXQvc2NoZWQvS2NvbmZpZy01NzEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjUwOjMwLjE0MzgwNzIzM1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjk0MzE0MzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgY29uc2lkZXJpbmcgSSBuZWVkIHRvIGdldCB0aGlzIEJQRiBwcm9ncmFtIHVwIGFuZCBydW5uaW5nOlxuXG4qKkJQRiBQcm9ncmFtIERlcGxveW1lbnQgXHUwMDI2IFRlc3RpbmcgQ29uc2lkZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyB0byBhY3R1YWxseSBpbnRlZ3JhdGUgdGhpcyBCUEYgcHJvZ3JhbSB3aXRoIGEgVHJhZmZpYyBDb250cm9sIChUQykgaG9vaywgaXQncyBwcmV0dHkgY2xlYXIgSSdtIGdvaW5nIHRvIG5lZWQgZWl0aGVyIGBDT05GSUdfTkVUX0NMU19CUEZgIG9yIGBDT05GSUdfTkVUX1NDSF9JTkdSRVNTYCBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlnLiBUaGF0IG1ha2VzIHNlbnNlLCB0aG9zZSBhcmUgdGhlIG5lY2Vzc2FyeSBidWlsZGluZyBibG9ja3MgZm9yIHRoYXQga2luZCBvZiBhdHRhY2htZW50LlxuXG5Ib3dldmVyLCBhbmQgdGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLCBpZiBJJ20ganVzdCBsb29raW5nIHRvIGxvYWQgdGhlIHByb2dyYW0gYW5kIHRlc3QgaXRzICpleGVjdXRpb24qIHVzaW5nIHNvbWV0aGluZyBsaWtlIHN5emthbGxlciwgYnlwYXNzaW5nIHRoZSBUQyBob29rIGZvciBub3csIGl0IHNlZW1zIEkgY2FuIGFjaGlldmUgdGhhdCB3aXRoIGBCUEZfUFJPR19SVU5gIC0gcHJvYmFibHkgdGhyb3VnaCBhIGZ1bmN0aW9uIGxpa2UgYGJwZl9wcm9nX3Rlc3RfcnVuYC4gVGhhdCB3b3VsZCBiZSBhIGdvb2QgaW5pdGlhbCB2YWxpZGF0aW9uIHN0ZXAuXG5cbk5vdywgZm9yIHRoYXQgYGJwZl9wcm9nX3Rlc3RfcnVuYCBwYXRoIHRvIHdvcmssIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfTkVUYCBhcmUgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4gVGhhdCBzZWVtcyByZWFzb25hYmxlLCBhcyB0aGVzZSBhcmUgdGhlIGZ1bmRhbWVudGFscyBmb3IgdGhlIEJQRiBzeXN0ZW0gY2FsbCBpbnRlcmZhY2UgYW5kIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0aWVzLCByZXNwZWN0aXZlbHkuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYGJwZl9wcm9nX3Rlc3RfcnVuYCBzdXBwb3J0cyBgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFNgIHNwZWNpZmljYWxseS4gV2UgY2FuJ3QgYXNzdW1lIHRoYXQgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IHdvcmssIHRoZSBzcGVjaWZpYyBwcm9ncmFtIHR5cGUgbWlnaHQgbmVlZCBleHBsaWNpdCBzdXBwb3J0LiBJIHNob3VsZCBwcm9iYWJseSBkaWcgaW50byB0aGUgc291cmNlIGNvZGUgZm9yIHRoYXQgZnVuY3Rpb24gdG8gbWFrZSBzdXJlLiBUaGF0J3MgYSBjcml0aWNhbCBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzE1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjUwOjM1LjQzODEyNDkyNVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM1MzY1NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JwZi90ZXN0X3J1bi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icGYvdGVzdF9ydW4uYz0xMDM1PWludCBicGZfcHJvZ190ZXN0X3J1bl9za2Ioc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTA2MC1cXHRzd2l0Y2ggKHByb2ctXFx1MDAzZXR5cGUpIHtcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTA2MTpcXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTOlxcbm5ldC9icGYvdGVzdF9ydW4uYy0xMDYyLVxcdGNhc2UgQlBGX1BST0dfVFlQRV9TQ0hFRF9BQ1Q6XFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTg4OD1zdGF0aWMgaW50IF9faW5pdCBicGZfcHJvZ190ZXN0X3J1bl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTkwMi1cXHRyZXQgPSByZWdpc3Rlcl9idGZfZm1vZHJldF9pZF9zZXQoXFx1MDAyNmJwZl90ZXN0X21vZGlmeV9yZXR1cm5fc2V0KTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTkwMzpcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXFx1MDAyNmJwZl9wcm9nX3Rlc3Rfa2Z1bmNfc2V0KTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTkwNC1cXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1RSQUNJTkcsIFxcdTAwMjZicGZfcHJvZ190ZXN0X2tmdW5jX3NldCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjUwOjM1LjQ4MTY2NTM2MVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTY2OTcwMDUxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIFNLQiBBZGp1c3RtZW50IGFuZCBHU08gRmxhZ3MgZm9yIFN5emthbGxlciBUZXN0aW5nKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBlZmZlY3RpdmVseSB0ZXN0IHRoZSBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgQlBGIGhlbHBlciwgZXNwZWNpYWxseSBjb25zaWRlcmluZyBpdHMgaW50ZXJhY3Rpb24gd2l0aCBHU08gZmxhZ3MgYW5kIGVuY2Fwc3VsYXRpb24uIFRoZSBnb29kIG5ld3MgaXMgdGhhdCBgYnBmX3Byb2dfdGVzdF9ydW5fc2tiYCBkb2VzIGluZGVlZCBzdXBwb3J0IGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2AsIHdoaWNoIGlzIGdyZWF0LiBBbmQsIHNpbmNlIHdlIGhhdmUgYENPTkZJR19CUEZfU1lTQ0FMTGAsIHRoYXQncyBhIGtleSBzdGFydGluZyBwb2ludC5cblxuQnV0IHRoZW4gSSByZW1lbWJlcmVkIGBicGZfc2tiX25ldF9zaHJpbmtgLCBhbmQgaG93IGl0IGNsZWFycyBgc2tiLVx1MDAzZWVuY2Fwc3VsYXRpb25gLCBwbHVzIHRob3NlIGNydWNpYWwgR1NPIGZsYWdzOiBgU0tCX0dTT19VRFBfVFVOTkVMYCwgYFNLQl9HU09fR1JFYCwgYW5kIHRoZSByZXN0LiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHdlIGNhbiB0ZXN0IHRoZXNlIHNjZW5hcmlvcy4gSSBzZWUgdGhhdCB0aG9zZSBmbGFncyBhcmUgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAsIHNvIEknbGwga2VlcCB0aGF0IGluIG1pbmQuXG5cbk5vdywgbXkgbWluZCBnb2VzIHRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGVzZSB0dW5uZWxzLiBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGNvbmZpZ3MgSSBzaG91bGQgd2F0Y2ggb3V0IGZvciByZWxhdGVkIHRvIEdSRSwgVURQIHR1bm5lbHMsIElQSVAsIGFuZCBTSVQ/IFRoZSBwYXRjaCBwb2ludHMgdG8gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3R1bm5lbC5jYCwgd2hpY2ggdXNlcyB0aGUgYEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRWAsIGV0Yy4gZmxhZ3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3ZSBjYW4gY3JlYXRlIFNLQnMgd2l0aCB0aGVzZSBHU08gdHlwZXMgdXNpbmcgc3l6a2FsbGVyLiBTeXprYWxsZXIgY291bGQgdXNlIGB0dW5gL2B0YXBgIG9yIGB2ZXRoYCBhbmQgc2VuZCBwYWNrZXRzLCBidXQsIGlmIGl0J3MgdXNpbmcgYGJwZl9wcm9nX3Rlc3RfcnVuYCwgdGhlbiB0aGUgcXVlc3Rpb24gaXMsIGhvdyBkb2VzIGl0IHNldCB0aGVzZSBHU08gZmxhZ3MgaW4gYSBjcmFmdGVkIFNLQj9cblxuSSB0aG91Z2h0IGBicGZfcHJvZ190ZXN0X3J1bl9za2JgIG1pZ2h0IGxldCBtZSBzZXQgYHNoaW5mbyhza2IpLVx1MDAzZWdzb190eXBlYCBkaXJlY3RseSwgYnV0IGl0IGxvb2tzIGxpa2UgdGhhdCdzIG5vdCB0aGUgY2FzZS4gSXQgbWF5IGJlIHNldCBpZiBpdCBnb2VzIHRocm91Z2ggdGhlIGtlcm5lbCBzdGFjay4gSG93ZXZlciwgd2FpdCwgaXQganVzdCBjbGlja2VkISBTeXprYWxsZXIgKmNhbiogaW5qZWN0IHBhY2tldHMgdmlhIGB0dW5gIG9yIGBwYWNrZXRgIHNvY2tldHMgdGhhdCB1c2UgYFZORVRfSERSYCwgYW5kIHRoaXMgKmRvZXMqIGFsbG93IHNldHRpbmcgR1NPIGZsYWdzISBZZXMsIHRoZSBgdmlydGlvX25ldF9oZHJgIGdpdmVzIGFjY2Vzcy4gU28sIHRoYXQgbWVhbnMgY3JlYXRpbmcgU0tCcyB3aXRoIGBTS0JfR1NPX1VEUF9UVU5ORUxgIHNob3VsZCBiZSBmYWlybHkgZWFzeS5cblxuSSBzZWUgdGhhdCBzeXprYWxsZXIgYWxyZWFkeSBlbmFibGVzIGBDT05GSUdfVFVOYCwgc28gdGhhdCdzIGEgcG9zaXRpdmUuIFdoYXQgYWJvdXQgYENPTkZJR19ORVRfSVBHUkVgLCBgQ09ORklHX0lQVjZfU0lUYCwgYW5kIGBDT05GSUdfSVBWNl9UVU5ORUxgPyBUaGV5IG1pZ2h0IGJlIHVzZWZ1bCBpZiBzeXprYWxsZXIgdHJpZXMgdG8gdHJpZ2dlciB0aGlzIHZpYSBhY3R1YWwgdHVubmVsIGRldmljZXMsIGJ1dCBzaW5jZSB0aGlzIGlzIGEgQlBGIGhlbHBlciwgc3l6a2FsbGVyIHdpbGwganVzdCBjYWxsIHRoZSBCUEYgaGVscGVyIGRpcmVjdGx5IG9uIHdoYXRldmVyIFNLQiBpdCBoYXMuIFNvIGl0IHNvdW5kcyBsaWtlIHRoZSBtYWluIHRhcmdldCBpcyB0aGUgYGJwZl9za2JfYWRqdXN0X3Jvb21gIGhlbHBlciBpdHNlbGYuXG5cblRoZXJlZm9yZSwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIGZ1bmN0aW9uczogYGJwZl9za2JfYWRqdXN0X3Jvb21gIGFuZCBgYnBmX3NrYl9uZXRfc2hyaW5rYCDigJMgd2hpY2ggaXMgbGlrZWx5IGlubGluZWQgb3IgZGlyZWN0bHkgcGFydCBvZiB0aGUgYGJwZl9za2JfYWRqdXN0X3Jvb21gIGZ1bmN0aW9uLiBJIHdpbGwgY2hlY2sgd2hldGhlciBgYnBmX3NrYl9uZXRfc2hyaW5rYCBpcyBpbmxpbmVkLCBqdXN0IHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTgwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjUwOjQ3LjE1MTM2ODA1NFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4MzY1NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3NrYl9uZXRfc2hyaW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTM1OTg9c3RhdGljIGludCBicGZfc2tiX25ldF9ncm93KHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvZmYsIHUzMiBsZW5fZGlmZixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTM3MTItXFxubmV0L2NvcmUvZmlsdGVyLmM6MzcxMzpzdGF0aWMgaW50IGJwZl9za2JfbmV0X3NocmluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgb2ZmLCB1MzIgbGVuX2RpZmYsXFxubmV0L2NvcmUvZmlsdGVyLmMtMzcxNC1cXHRcXHRcXHQgICAgICB1NjQgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0zODQ3PUJQRl9DQUxMXzQoYnBmX3NrYl9hZGp1c3Rfcm9vbSwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBzMzIsIGxlbl9kaWZmLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMzkzMi1cXG5uZXQvY29yZS9maWx0ZXIuYzozOTMzOlxcdHJldCA9IHNocmluayA/IGJwZl9za2JfbmV0X3Nocmluayhza2IsIG9mZiwgbGVuX2RpZmZfYWJzLCBmbGFncykgOlxcbm5ldC9jb3JlL2ZpbHRlci5jLTM5MzQtXFx0XFx0ICAgICAgIGJwZl9za2JfbmV0X2dyb3coc2tiLCBvZmYsIGxlbl9kaWZmX2FicywgZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjo1MDo0Ny4xOTgyMDk1MTlaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUyMzE0NzQxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtlcm5lbCBGdW5jdGlvbiBDYWxsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiBjYWxsIOKAkyBpdCdzIHN0YXRpYywgc28gdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoZSBjb21waWxlciBtaWdodCBpbmxpbmUgaXQuIFRoYXQncyB0aGUgZmlyc3QgdGhpbmcgdG8gY29uc2lkZXIuIFRoZXJlZm9yZSwgbXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gYGJwZl9za2JfYWRqdXN0X3Jvb21gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBiZWluZyB1c2VkLlxuXG5Ob3csIGxldCdzIHNlZS4gUmlnaHQsIHRoZSBzeW1ib2wgbmFtZSBmb3IgYEJQRl9DQUxMXzQoYnBmX3NrYl9hZGp1c3Rfcm9vbSwgLi4uKWAgaXMgYWN0dWFsbHkgdHdvLWZvbGQ6IHdlIGhhdmUgdGhlIHdyYXBwZXIsIGp1c3QgYGJwZl9za2JfYWRqdXN0X3Jvb21gLCBhbmQgdGhlIGlubGluZSB2ZXJzaW9uIGlzIGBfX19fYnBmX3NrYl9hZGp1c3Rfcm9vbWAuIEdlbmVyYWxseSwgaW4gYSBrZXJuZWwgY29udGV4dCwgdGhlIHdyYXBwZXIsIHRoZSBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgdmVyc2lvbiwgKmlzbid0KiBpbmxpbmVkIGFuZCBzbyBzaG91bGQgYmUgcmVhZGlseSB2aXNpYmxlIGluIGBrYWxsc3ltc2AuIFRoYXQncyB3aGVyZSBJJ2xsIHByb2JhYmx5IGZpbmQgdGhlIGNyb3NzIHJlZmVyZW5jZXMuXG5cbkhvbGQgb24gYSBzZWNvbmQuLi50aGlzIHBhdGNoIGFsc28gdG91Y2hlcyBgYnBmX3NrYl9uZXRfYmFzZV9sZW5gLCBzbyBJJ2xsIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgdG9vLiBJIGNhbid0IGp1c3QgaXNvbGF0ZSBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgaW4gdGhpcyBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5NDEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6NTA6NTEuNzIxMzU5NDkyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQxMTExNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc2tiX25ldF9iYXNlX2xlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz0zNTUwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9jaGFuZ2VfdHlwZV9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTM1NTctXFxubmV0L2NvcmUvZmlsdGVyLmM6MzU1ODpzdGF0aWMgdTMyIGJwZl9za2JfbmV0X2Jhc2VfbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2NvcmUvZmlsdGVyLmMtMzU1OS17XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0zODQ3PUJQRl9DQUxMXzQoYnBmX3NrYl9hZGp1c3Rfcm9vbSwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBzMzIsIGxlbl9kaWZmLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMzg1MC1cXHR1MzIgbGVuX2N1ciwgbGVuX2RpZmZfYWJzID0gYWJzKGxlbl9kaWZmKTtcXG5uZXQvY29yZS9maWx0ZXIuYzozODUxOlxcdHUzMiBsZW5fbWluID0gYnBmX3NrYl9uZXRfYmFzZV9sZW4oc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0zODUyLVxcdHUzMiBsZW5fbWF4ID0gQlBGX1NLQl9NQVhfTEVOO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMzg2OC1cXHRjYXNlIEJQRl9BREpfUk9PTV9ORVQ6XFxubmV0L2NvcmUvZmlsdGVyLmM6Mzg2OTpcXHRcXHRvZmYgKz0gYnBmX3NrYl9uZXRfYmFzZV9sZW4oc2tiKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0zODcwLVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMzkwMS1cXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLKVxcbm5ldC9jb3JlL2ZpbHRlci5jOjM5MDI6XFx0XFx0XFx0bGVuX2RlY2FwX21pbiArPSBicGZfc2tiX25ldF9iYXNlX2xlbihza2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTM5MDMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjUwOjUxLjc2NTc3NTk3N1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5ODA0NjAwODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIEFkanVzdG1lbnQgb2YgU0tCIERhdGEqKlxuXG5Pa2F5LCBzbyBgYnBmX3NrYl9uZXRfYmFzZV9sZW5gIGlzIHN0YXRpYywgd2hpY2ggbWVhbnMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgdG8gY29uc2lkZXIgaXMgYGJwZl9za2JfYWRqdXN0X3Jvb21gLiBMZXQncyBjb25maXJtIGFueSBvdGhlciBmaWxlcyBpbXBhY3RlZC4gQWxyaWdodCwgbG9va3MgbGlrZSBjaGFuZ2VzIGV4dGVuZCB0bzogYGluY2x1ZGUvdWFwaS9saW51eC9icGYuaGAsIGBuZXQvY29yZS9maWx0ZXIuY2AsIGB0b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhgLCBhbmQgc29tZSBzZWxmdGVzdCBmaWxlcy5cblxuU3BlY2lmaWNhbGx5LCBpbiB0aGUga2VybmVsIHNvdXJjZSwgdGhlIG9ubHkgbW9kaWZpY2F0aW9uIHJlc2lkZXMgd2l0aGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIEFuZCB0aGVzZSBjaGFuZ2VzIGFyZSBjb25jZW50cmF0ZWQgd2l0aGluIGBicGZfc2tiX25ldF9zaHJpbmtgIGFuZCwgb2YgY291cnNlLCBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAsIGFzIGJvdGggYXJlIHBhcnQgb2YgdGhlIGJyb2FkZXIgYGJwZl9za2JfYWRqdXN0X3Jvb21gIEJQRiBoZWxwZXIuIFRoZXJlZm9yZSwgYGJwZl9za2JfYWRqdXN0X3Jvb21gIGlzIG91ciBzeW1ib2wgb2YgaW50ZXJlc3Qg4oCTIGFuZCB0aGUgZm9jdXMuXG5cbkhhbmcgb24sIGlzIGBicGZfc2tiX2FkanVzdF9yb29tYCByZWFsbHkgdGhlIHByZWNpc2Ugc3ltYm9sPyBMZXQgbWUgcXVpY2tseSB2ZXJpZnkgd2l0aCBgbm1gIG9yIGp1c3QgYXNzdW1lIGJhc2VkIG9uIHRoZSBgQlBGX0NBTExfNGAgbWFjcm8gZGVmaW5pdGlvbiB3ZSd2ZSBlbmNvdW50ZXJlZCBlYXJsaWVyLiBZZXAsIGFmdGVyIGNvbnNpZGVyaW5nIHRoZSBtYWNybyBleHBhbnNpb24sIGl0IHNlZW1zIGNvcnJlY3QuIFRoZSBmdW5jdGlvbiBuYW1lZCBpcyBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAsIHdoaWNoLCBiYXNlZCBvbiB0aGUgYEJQRl9DQUxMXzRgIGRlZmluaXRpb24sIGlzIG5vbi1zdGF0aWMgYW5kLCB0aGVyZWZvcmUsIGdsb2JhbC5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBnaXZlbjsgaXQncyBuZWNlc3NhcnkgZm9yIEJQRi4gYENPTkZJR19ORVRgIGlzIHJlcXVpcmVkIGR1ZSB0byBgbmV0L2NvcmUvZmlsdGVyLmNgJ3MgcHJlc2VuY2UuIEhtbSwgYXJlIHRoZXJlIGFueSBvdGhlciBjcnVjaWFsIGNvbmZpZ3VyYXRpb25zP1xuXG5UaGUgcGF0Y2ggc2VlbXMgdG8gZW5hYmxlIGhhbmRsaW5nIG9mIEdSRSwgVURQLCBJUElQLCBhbmQgU0lUIHR1bm5lbHMg4oCTIGRlY2Fwc3VsYXRpb24sIHNwZWNpZmljYWxseS4gU28sIGRvZXMgaXQgZGVwZW5kIG9uIGNvbmZpZ3VyYXRpb25zIGxpa2UgYENPTkZJR19ORVRfSVBHUkVgIG9yIGBDT05GSUdfSVBWNl9TSVRgPyBObywgdGhlIEJQRiBoZWxwZXIgaXMganVzdCBtYW5pcHVsYXRpbmcgdGhlIFNLQiBkYXRhIGFuZCBjbGVhcmluZyBHU08gZmxhZ3MuIEl0J3Mgbm90IGFjdHVhbGx5IGNhbGxpbmcgaW50byBHUkUgb3IgU0lUIG1vZHVsZXMuIEl0IHV0aWxpemVzIGBzaXplb2ZgIGZvciBoZWFkZXJzIGxpa2UgYHN0cnVjdCBncmVfYmFzZV9oZHJgLCBgc3RydWN0IHVkcGhkcmAsIGBzdHJ1Y3QgaXBoZHJgLCBhbmQgYHN0cnVjdCBpcHY2aGRyYC4gVGhlc2UgYXJlIGRlZmluZWQgaW4gc3RhbmRhcmQgaW5jbHVkZSBmaWxlcyAoYGxpbnV4L2dyZS5oYCwgYGxpbnV4L3VkcC5oYCwgYGxpbnV4L2lwLmhgLCBgbGludXgvaXB2Ni5oYCksIHdoaWNoIGFyZSBhbHdheXMgYXZhaWxhYmxlLiBBaCwgd2FpdCwgYFx1MDAzY25ldC9jb3JlL2ZpbHRlci5jXHUwMDNlYCBpbmNsdWRlcyBgXHUwMDNjbmV0L2dyZS5oXHUwMDNlYC4gTGV0IG1lIHF1aWNrbHkgY29uZmlybSBpZiB0aGF0IGhlYWRlciByZXF1aXJlcyBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiB0byBiZSBhY3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxODI3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjUxOjAxLjU3MDM3OTk1M1oiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzOTIzOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0L2dyZS5oXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jLTU4LSNpbmNsdWRlIFxcdTAwM2NuZXQvdGNwLmhcXHUwMDNlXFxubmV0L2NvcmUvZmlsdGVyLmM6NTk6I2luY2x1ZGUgXFx1MDAzY25ldC9ncmUuaFxcdTAwM2VcXG5uZXQvY29yZS9maWx0ZXIuYy02MC0jaW5jbHVkZSBcXHUwMDNjbmV0L3hmcm0uaFxcdTAwM2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6NTE6MDEuNjE4Nzc5ODU4WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NDM0NTExNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKipcblxuQWxyaWdodCwgc28gaXQgbG9va3MgbGlrZSB0aGlzIGlzIGp1c3QgYWJvdXQgaW5jbHVkaW5nIHRoZSBuZWNlc3Nhcnkga2VybmVsIGhlYWRlcnMuIFNpbXBsZSBlbm91Z2guIFdlIGRlZmluaXRlbHkgbmVlZCBgQlBGX1NZU0NBTExgIGFuZCwgc2luY2UgYE5FVGAgaXMgZm91bmRhdGlvbmFsLCB3ZSBjYW4ganVzdCBmb2N1cyBvbiB0aGF0IGZpcnN0IG9uZS4gSG9sZCBvbiBhIHNlYywgdGhvdWdoLiBTaG91bGQgSSBhbHNvIGluY2x1ZGUgYENPTkZJR19ORVRfQ0xTX0JQRmAgb3IgYENPTkZJR19ORVRfQUNUX0JQRmA/XG5cbkkgZGlkIGNoZWNrIGVhcmxpZXIsIGFuZCBgYnBmX3Byb2dfdGVzdF9ydW5gIHNlZW1zIHRvIGRpcmVjdGx5IHN1cHBvcnQgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYC4gQnV0IHN5emthbGxlci4uLml0IG1pZ2h0IHVzZSBgdGNgIHVuZGVyIHRoZSBob29kIHRvIGF0dGFjaCB0aGUgcHJvZ3JhbS4gVGhlIGBzeXpfYnBmYCBkZXNjcmlwdGlvbnMgaW4gc3l6a2FsbGVyICpkbyogcmVmZXJlbmNlIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2AuIExldCdzIGp1c3QgYmUgdGhvcm91Z2ggYW5kIGNoZWNrIHdoZXRoZXIgc3l6a2FsbGVyICpuZWVkcyogYE5FVF9DTFNfQlBGYCB0byBydW4gdGhlIHRlc3QgY29ycmVjdGx5LlxuXG5CZXN0IHByYWN0aWNlIGRpY3RhdGVzIGhhdmluZyBgTkVUX0NMU19CUEZgIGVuYWJsZWQgYW55d2F5LCBzbyBsZXQncyBnbyBhaGVhZCBhbmQgaW5jbHVkZSB0aGF0LiBBbmQgZm9yIGdvb2QgbWVhc3VyZSwgbGV0J3MgYWxzbyBhZGQgYE5FVF9BQ1RfQlBGYC4gSXQncyBhbHdheXMgYmV0dGVyIHRvIGJlIGluY2x1c2l2ZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB0aGlzIGtpbmQgb2YgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxNjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6NTE6MDcuMzYyMjM0OTY1WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTMxMDE1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0NMU19CUEZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9NTUwPWNvbmZpZyBORVRfQ0xTX0NHUk9VUFxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNTYxLVxcbm5ldC9zY2hlZC9LY29uZmlnOjU2Mjpjb25maWcgTkVUX0NMU19CUEZcXG5uZXQvc2NoZWQvS2NvbmZpZy01NjMtXFx0dHJpc3RhdGUgXFxcIkJQRi1iYXNlZCBjbGFzc2lmaWVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjo1MTowNy40MDc1NDg1MVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDM3NDg0MjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZDpcblxuKipEaXZpbmcgaW50byBOZXR3b3JrIEFjdGl2aXR5IHdpdGggQlBGKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgaGFuZHMtb24uIFdoZW4gSSBzZWUgdGhhdCBub3RhdGlvbiwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgXCJMZXQncyBjaGVjayBgTkVUX0FDVF9CUEZgXCIuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIGFzc2VzcyBob3cgd2UgYXJlIGludGVyYWN0aW5nIHdpdGggdGhlIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgaG9va3MgcmVsYXRlZCB0byBuZXR3b3JrIGFjdGl2aXR5LiBJJ20gdGhpbmtpbmcgYWJvdXQgcGVyZm9ybWFuY2UgbW9uaXRvcmluZywgcGVyaGFwcyBzb21lIHNlY3VyaXR5IGFuYWx5c2lzLCBvciBldmVuIGRlZXBlciBwYWNrZXQgbWFuaXB1bGF0aW9uLiBJIHdpbGwgbm93IGV4YW1pbmUgdGhpcyBzcGVjaWZpYyBkYXRhIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9ucyByZWxhdGVkIHRvIG5ldHdvcmsgYWN0aW9ucy4gVGhpcyBjb3VsZCBiZSBpbiB0aGUgY29udGV4dCBvZiB0cmFmZmljIHNoYXBpbmcsIGludHJ1c2lvbiBkZXRlY3Rpb24sIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgb3IgYW55IG51bWJlciBvZiBuZXR3b3JrLXJlbGF0ZWQgdGFza3MuIExldCdzIHNlZSB3aGF0IHRoZSBkYXRhIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzYzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6NTE6MTAuNDQ1MDM1NjI2WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTIwNjQxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0FDVF9CUEZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9ODMwPWNvbmZpZyBORVRfQUNUX1ZMQU5cXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTg0MC1cXG5uZXQvc2NoZWQvS2NvbmZpZzo4NDE6Y29uZmlnIE5FVF9BQ1RfQlBGXFxubmV0L3NjaGVkL0tjb25maWctODQyLVxcdHRyaXN0YXRlIFxcXCJCUEYgYmFzZWQgYWN0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjo1MToxMC40OTAyNDcxODFaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODMzOTQ1MzM1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgaXRzIHBvdGVudGlhbCBpbXBhY3QgYW5kIHdoZXRoZXIgaXQgd2FycmFudHMgZnVydGhlciBzY3J1dGlueSwgZXNwZWNpYWxseSB0aHJvdWdoIGZ1enppbmcuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcyB0aGF0IEkgbmVlZCB0byBhZGQgYEJQRl9TWVNDQUxMYCwgYE5FVF9DTFNfQlBGYCwgYW5kIGBORVRfQUNUX0JQRmAgdG8gbXkgbWVudGFsIGNoZWNrbGlzdCBmb3IgdGhpcyBhcmVhLlxuXG5GaXJzdCwgbGV0IG1lIGNvbmZpcm0gbXkgaW5pdGlhbCBvYnNlcnZhdGlvbi4gKmJwZl9za2JfYWRqdXN0X3Jvb20qIHNlZW1zIHRvIGJlIHRoZSBvbmx5IGZ1bmN0aW9uIG1vZGlmaWVkIGRpcmVjdGx5LiBZZXAsIGxvb2tzIGxpa2UgaXQuIEdvb2QuIFRoaXMgaXMgbXkgZm9jYWwgcG9pbnQuXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIG5ldyBmbGFncyB3aXRoaW4gYGJwZl9za2JfYWRqdXN0X3Jvb21gLCBzcGVjaWZpY2FsbHkgZm9yIGNsZWFyaW5nIHR1bm5lbC1zcGVjaWZpYyBHZW5lcmljIFNlZ21lbnRhdGlvbiBPZmZsb2FkIChHU08pIGZsYWdzIGR1cmluZyBkZWNhcHN1bGF0aW9uLiBUaGlzIHNjcmVhbXMgXCJuZXR3b3JraW5nIEJQRlwiIHRvIG1lLlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgaW1wYWN0cyB0aGUgY29yZSBCUEYgbmV0d29ya2luZyBsb2dpYywgYW5kIGNyaXRpY2FsbHksIHRoaXMgY2hhbmdlICppcyogdXNlci1zcGFjZSByZWFjaGFibGUgdmlhIEJQRiBwcm9ncmFtcywgcHJpbWFyaWx5IFRyYWZmaWMgQ29udHJvbCAoVEMpIEJQRiBwcm9ncmFtcy4gQmVjYXVzZSBvZiBpdHMgcGxhY2UgaW4gdGhlIGNvbnRyb2wgcGxhbmUsIGl0J3Mgd29ydGggZnV6emluZy4gVGhlIGludGVycGxheSB3aXRoIEdTTyBtYWtlcyBpdCBldmVuIG1vcmUgaW50ZXJlc3RpbmcgZm9yIG1lLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpc3RpbGwgdGhpcy4gTXkgc3VtbWFyeSBpczpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUgLSBUaGlzIGlzIGEgY2hhbmdlIHRvIGEgY3JpdGljYWwgQlBGIGhlbHBlciByZWFjaGFibGUgdmlhIHVzZXItc3BhY2UuXG4qICAgKipGb2N1c1N5bWJvbHM6KiogYGJwZl9za2JfYWRqdXN0X3Jvb21gIC0gVGhpcyBpcyB0aGUgY2VudHJhbCBmdW5jdGlvbiBhZmZlY3RlZC5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYEJQRl9TWVNDQUxMYCwgYE5FVF9DTFNfQlBGYCwgYE5FVF9BQ1RfQlBGYCAtIFRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSByZWxldmFudCB0byBlbmFibGluZyB0aGlzIGZ1bmN0aW9uYWxpdHkuXG4qICAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGZsYWdzIHRvIHRoZSBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgQlBGIGhlbHBlciBmb3IgY2xlYXJpbmcgdHVubmVsLXNwZWNpZmljIEdTTyBmbGFncyBkdXJpbmcgZGVjYXBzdWxhdGlvbi4gVGhpcyBjaGFuZ2VzIGNvcmUgQlBGIG5ldHdvcmtpbmcgbG9naWMgYWNjZXNzaWJsZSB0aHJvdWdoIFRDIEJQRiBwcm9ncmFtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwNTcsIk91dHB1dFRva2VucyI6MTE0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjUxOjE4LjgyOTcwMjk1OVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2ODM5NDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUX0NMU19CUEZcIixcbiAgICBcIk5FVF9BQ1RfQlBGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3NrYl9hZGp1c3Rfcm9vbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbmV3IGZsYWdzIHRvIHRoZSBicGZfc2tiX2FkanVzdF9yb29tIEJQRiBoZWxwZXIgdG8gY2xlYXIgdHVubmVsLXNwZWNpZmljIEdTTyBmbGFncyBkdXJpbmcgZGVjYXBzdWxhdGlvbi4gVGhpcyBtb2RpZmllcyBjb3JlIEJQRiBuZXR3b3JraW5nIGxvZ2ljIHJlYWNoYWJsZSB2aWEgVEMgQlBGIHByb2dyYW1zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRfQ0xTX0JQRlwiLFxuICAgIFwiTkVUX0FDVF9CUEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc2tiX2FkanVzdF9yb29tXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBuZXcgZmxhZ3MgdG8gdGhlIGJwZl9za2JfYWRqdXN0X3Jvb20gQlBGIGhlbHBlciB0byBjbGVhciB0dW5uZWwtc3BlY2lmaWMgR1NPIGZsYWdzIGR1cmluZyBkZWNhcHN1bGF0aW9uLiBUaGlzIG1vZGlmaWVzIGNvcmUgQlBGIG5ldHdvcmtpbmcgbG9naWMgcmVhY2hhYmxlIHZpYSBUQyBCUEYgcHJvZ3JhbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjUxOjE4LjkwNjU0ODc1MVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1MjkyODQ2NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjo1MToxOC45MDcxNDYwMzFaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQ1Mjg2ODM1OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGZsYWdzIGZvciB0aGUgYGJwZl9za2JfYWRqdXN0X3Jvb21gIEJQRiBoZWxwZXIgdG8gc2VsZWN0aXZlbHkgY2xlYXIgR1NPIHR1bm5lbCBmbGFncyBhbmQgdGhlIGBza2ItXFx1MDAzZWVuY2Fwc3VsYXRpb25gIGZsYWcgZHVyaW5nIHBhY2tldCBkZWNhcHN1bGF0aW9uLiBUaGUgY2hhbmdlcyBjb25zaXN0IG9mIGJpdHdpc2Ugb3BlcmF0aW9ucyBvbiBleGlzdGluZyBgc2tiX3NoYXJlZF9pbmZvYCBmaWVsZHMgKGBnc29fdHlwZWApIGFuZCBgc2tiYCBmaWVsZHMgKGBlbmNhcHN1bGF0aW9uYCksIGFzIHdlbGwgYXMgbGVuZ3RoIHZhbGlkYXRpb24gY2hlY2tzIHRvIGVuc3VyZSB0aGUgcGFja2V0IGlzIHNocnVuayBieSBhdCBsZWFzdCB0aGUgc2l6ZSBvZiB0aGUgZGVjYXBzdWxhdGVkIGhlYWRlcnMuXFxuXFxuVGhlc2UgbW9kaWZpY2F0aW9ucyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvIG5vdCBleHBvc2Uga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZSwgYW5kIGRvIG5vdCBpbnZvbHZlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgZHVlIHRvIGluY29ycmVjdCBsZW5ndGggY2FsY3VsYXRpb25zKSB3b3VsZCBiZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY1M2I3NWRiMGQ2NDNlMTU0MGI4ZWE4YjE5YmFjMGIzMjhjY2EwOWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxNjo0OTowMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuaW5kZXggZmZkOTZlOGI5MjBiZC4uNzMyYjM1Y2MwOGQxYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5AQCAtMzAzOCw4ICszMDM4LDM0IEBAIHVuaW9uIGJwZl9hdHRyIHtcbiAgKlxuICAqXHRcdCogKipCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0KiosXG4gICpcdFx0ICAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjYqKjpcbi0gKlx0XHQgIEluZGljYXRlIHRoZSBuZXcgSVAgaGVhZGVyIHZlcnNpb24gYWZ0ZXIgZGVjYXBzdWxhdGluZyB0aGUgb3V0ZXJcbi0gKlx0XHQgIElQIGhlYWRlci4gVXNlZCB3aGVuIHRoZSBpbm5lciBhbmQgb3V0ZXIgSVAgdmVyc2lvbnMgYXJlIGRpZmZlcmVudC5cbisgKlx0XHQgIEluZGljYXRlIHRoZSBuZXcgSVAgaGVhZGVyIHZlcnNpb24gYWZ0ZXIgZGVjYXBzdWxhdGluZyB0aGVcbisgKlx0XHQgIG91dGVyIElQIGhlYWRlci4gVXNlZCB3aGVuIHRoZSBpbm5lciBhbmQgb3V0ZXIgSVAgdmVyc2lvbnNcbisgKlx0XHQgIGFyZSBkaWZmZXJlbnQuIFRoZXNlIGZsYWdzIG9ubHkgdHJpZ2dlciBhIHByb3RvY29sIGNoYW5nZVxuKyAqXHRcdCAgd2l0aG91dCBjbGVhcmluZyBhbnkgdHVubmVsLXNwZWNpZmljIEdTTyBmbGFncy5cbisgKlxuKyAqXHRcdCogKipCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUqKjpcbisgKlx0XHQgIENsZWFyIEdSRSB0dW5uZWwgR1NPIGZsYWdzIChTS0JfR1NPX0dSRSBhbmQgU0tCX0dTT19HUkVfQ1NVTSlcbisgKlx0XHQgIHdoZW4gZGVjYXBzdWxhdGluZyBhIEdSRSB0dW5uZWwuXG4rICpcbisgKlx0XHQqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKio6XG4rICpcdFx0ICBDbGVhciBVRFAgdHVubmVsIEdTTyBmbGFncyAoU0tCX0dTT19VRFBfVFVOTkVMIGFuZFxuKyAqXHRcdCAgU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0pIHdoZW4gZGVjYXBzdWxhdGluZyBhIFVEUCB0dW5uZWwuXG4rICpcbisgKlx0XHQqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0Kio6XG4rICpcdFx0ICBDbGVhciBJUElQL1NJVCB0dW5uZWwgR1NPIGZsYWcgKFNLQl9HU09fSVBYSVA0KSB3aGVuIGRlY2Fwc3VsYXRpbmdcbisgKlx0XHQgIGEgdHVubmVsIHdpdGggYW4gb3V0ZXIgSVB2NCBoZWFkZXIgKElQdjQtaW4tSVB2NCBvciBJUHY2LWluLUlQdjQpLlxuKyAqXG4rICpcdFx0KiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNioqOlxuKyAqXHRcdCAgQ2xlYXIgSVB2NiBlbmNhcHN1bGF0aW9uIHR1bm5lbCBHU08gZmxhZyAoU0tCX0dTT19JUFhJUDYpIHdoZW5cbisgKlx0XHQgIGRlY2Fwc3VsYXRpbmcgYSB0dW5uZWwgd2l0aCBhbiBvdXRlciBJUHY2IGhlYWRlciAoSVB2Ni1pbi1JUHY2XG4rICpcdFx0ICBvciBJUHY0LWluLUlQdjYpLlxuKyAqXG4rICpcdFx0V2hlbiB1c2luZyB0aGUgZGVjYXBzdWxhdGlvbiBmbGFncyBhYm92ZSwgdGhlIHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uXG4rICpcdFx0ZmxhZyBpcyBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgaWYgYWxsIHR1bm5lbC1zcGVjaWZpYyBHU08gZmxhZ3NcbisgKlx0XHQoU0tCX0dTT19VRFBfVFVOTkVMLCBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSwgU0tCX0dTT19HUkUsXG4rICpcdFx0U0tCX0dTT19HUkVfQ1NVTSwgU0tCX0dTT19JUFhJUDQsIFNLQl9HU09fSVBYSVA2KSBoYXZlIGJlZW5cbisgKlx0XHRyZW1vdmVkIGZyb20gdGhlIHBhY2tldC4gVGhpcyBoYW5kbGVzIGNhc2VzIHdoZXJlIGFsbCB0dW5uZWxcbisgKlx0XHRsYXllcnMgaGF2ZSBiZWVuIGRlY2Fwc3VsYXRlZC5cbiAgKlxuICAqIFx0XHRBIGNhbGwgdG8gdGhpcyBoZWxwZXIgaXMgc3VzY2VwdGlibGUgdG8gY2hhbmdlIHRoZSB1bmRlcmx5aW5nXG4gICogXHRcdHBhY2tldCBidWZmZXIuIFRoZXJlZm9yZSwgYXQgbG9hZCB0aW1lLCBhbGwgY2hlY2tzIG9uIHBvaW50ZXJzXG5AQCAtNjI4Myw3ICs2MzA5LDcgQEAgZW51bSB7XG4gfTtcbiBcbiAvKiBCUEZfRlVOQ19za2JfYWRqdXN0X3Jvb20gZmxhZ3MuICovXG4tZW51bSB7XG4rZW51bSBicGZfYWRqX3Jvb21fZmxhZ3Mge1xuIFx0QlBGX0ZfQURKX1JPT01fRklYRURfR1NPXHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyAwKSxcbiBcdEJQRl9GX0FESl9ST09NX0VOQ0FQX0wzX0lQVjRcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDEpLFxuIFx0QlBGX0ZfQURKX1JPT01fRU5DQVBfTDNfSVBWNlx0PSAoMVVMTCBcdTAwM2NcdTAwM2MgMiksXG5AQCAtNjI5Myw2ICs2MzE5LDEwIEBAIGVudW0ge1xuIFx0QlBGX0ZfQURKX1JPT01fRU5DQVBfTDJfRVRIXHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyA2KSxcbiBcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjRcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDcpLFxuIFx0QlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNlx0PSAoMVVMTCBcdTAwM2NcdTAwM2MgOCksXG4rXHRCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkVcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDkpLFxuK1x0QlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQXHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyAxMCksXG4rXHRCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDRcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDExKSxcbitcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNlx0PSAoMVVMTCBcdTAwM2NcdTAwM2MgMTIpLFxuIH07XG4gXG4gZW51bSB7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggMzQyMzczNDEyNGE1Yi4uODllZmZmZjNiYzUyNSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTU2LDYgKzU2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29ja19yZXVzZXBvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9idXN5X3BvbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y3AuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9ncmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC94ZnJtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdWRwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfdHJhY2UuaFx1MDAzZVxuQEAgLTM1NzIsMTQgKzM1NzMsMjcgQEAgc3RhdGljIHUzMiBicGZfc2tiX25ldF9iYXNlX2xlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuICNkZWZpbmUgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTS1x0KEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQgfCBcXFxuIFx0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNilcbiBcbi0jZGVmaW5lIEJQRl9GX0FESl9ST09NX01BU0tcdFx0KEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTyB8IFxcXG4tXHRcdFx0XHRcdCBCUEZfRl9BREpfUk9PTV9FTkNBUF9MM19NQVNLIHwgXFxcbisjZGVmaW5lIEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X01BU0tcdChCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9VRFAgfCBcXFxuK1x0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFKVxuK1xuKyNkZWZpbmUgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTS1x0KEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCB8IFxcXG4rXHRcdFx0XHRcdCBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYpXG4rXG4rI2RlZmluZSBCUEZfRl9BREpfUk9PTV9FTkNBUF9NQVNLXHQoQlBGX0ZfQURKX1JPT01fRU5DQVBfTDNfTUFTSyB8IFxcXG4gXHRcdFx0XHRcdCBCUEZfRl9BREpfUk9PTV9FTkNBUF9MNF9HUkUgfCBcXFxuIFx0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fRU5DQVBfTDRfVURQIHwgXFxcbiBcdFx0XHRcdFx0IEJQRl9GX0FESl9ST09NX0VOQ0FQX0wyX0VUSCB8IFxcXG4gXHRcdFx0XHRcdCBCUEZfRl9BREpfUk9PTV9FTkNBUF9MMiggXFxcbi1cdFx0XHRcdFx0ICBCUEZfQURKX1JPT01fRU5DQVBfTDJfTUFTSykgfCBcXFxuLVx0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSylcbitcdFx0XHRcdFx0ICBCUEZfQURKX1JPT01fRU5DQVBfTDJfTUFTSykpXG4rXG4rI2RlZmluZSBCUEZfRl9BREpfUk9PTV9ERUNBUF9NQVNLXHQoQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSyB8IFxcXG4rXHRcdFx0XHRcdCBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLIHwgXFxcbitcdFx0XHRcdFx0IEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0spXG4rXG4rI2RlZmluZSBCUEZfRl9BREpfUk9PTV9NQVNLXHRcdChCUEZfRl9BREpfUk9PTV9GSVhFRF9HU08gfCBcXFxuK1x0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fRU5DQVBfTUFTSyB8IFxcXG4rXHRcdFx0XHRcdCBCUEZfRl9BREpfUk9PTV9ERUNBUF9NQVNLIHwgXFxcbitcdFx0XHRcdFx0IEJQRl9GX0FESl9ST09NX05PX0NTVU1fUkVTRVQpXG4gXG4gc3RhdGljIGludCBicGZfc2tiX25ldF9ncm93KHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvZmYsIHUzMiBsZW5fZGlmZixcbiBcdFx0XHQgICAgdTY0IGZsYWdzKVxuQEAgLTM3MDIsOCArMzcxNiw4IEBAIHN0YXRpYyBpbnQgYnBmX3NrYl9uZXRfc2hyaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvZmYsIHUzMiBsZW5fZGlmZixcbiBcdGJvb2wgZGVjYXAgPSBmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSztcbiBcdGludCByZXQ7XG4gXG4tXHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IH4oQlBGX0ZfQURKX1JPT01fRklYRURfR1NPIHxcbi1cdFx0XHQgICAgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSyB8XG4rXHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IH4oQlBGX0ZfQURKX1JPT01fREVDQVBfTUFTSyB8XG4rXHRcdFx0ICAgICAgIEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTyB8XG4gXHRcdFx0ICAgICAgIEJQRl9GX0FESl9ST09NX05PX0NTVU1fUkVTRVQpKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG5AQCAtMzc0MCw5ICszNzU0LDQ4IEBAIHN0YXRpYyBpbnQgYnBmX3NrYl9uZXRfc2hyaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvZmYsIHUzMiBsZW5fZGlmZixcbiBcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTTykpXG4gXHRcdFx0c2tiX2luY3JlYXNlX2dzb19zaXplKHNoaW5mbywgbGVuX2RpZmYpO1xuIFxuK1x0XHQvKiBTZWxlY3RpdmUgR1NPIGZsYWcgY2xlYXJpbmcgYmFzZWQgb24gZGVjYXAgdHlwZS5cbitcdFx0ICogT25seSBjbGVhciB0aGUgZmxhZ3MgZm9yIHRoZSB0dW5uZWwgbGF5ZXIgYmVpbmcgcmVtb3ZlZC5cbitcdFx0ICovXG4rXHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoc2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNiAoU0tCX0dTT19VRFBfVFVOTkVMIHxcbitcdFx0XHRcdFx0IFNLQl9HU09fVURQX1RVTk5FTF9DU1VNKSkpXG4rXHRcdFx0c2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNj0gfihTS0JfR1NPX1VEUF9UVU5ORUwgfFxuK1x0XHRcdFx0XHQgICAgICBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSk7XG4rXHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoc2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNiAoU0tCX0dTT19HUkUgfCBTS0JfR1NPX0dSRV9DU1VNKSkpXG4rXHRcdFx0c2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNj0gfihTS0JfR1NPX0dSRSB8XG4rXHRcdFx0XHRcdCAgICAgIFNLQl9HU09fR1JFX0NTVU0pO1xuK1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDQpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKHNoaW5mby1cdTAwM2Vnc29fdHlwZSBcdTAwMjYgU0tCX0dTT19JUFhJUDQpKVxuK1x0XHRcdHNoaW5mby1cdTAwM2Vnc29fdHlwZSBcdTAwMjY9IH5TS0JfR1NPX0lQWElQNDtcbitcdFx0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIChzaGluZm8tXHUwMDNlZ3NvX3R5cGUgXHUwMDI2IFNLQl9HU09fSVBYSVA2KSlcbitcdFx0XHRzaGluZm8tXHUwMDNlZ3NvX3R5cGUgXHUwMDI2PSB+U0tCX0dTT19JUFhJUDY7XG4rXG4rXHRcdC8qIENsZWFyIGVuY2Fwc3VsYXRpb24gZmxhZyBvbmx5IHdoZW4gbm8gdHVubmVsIEdTTyBmbGFncyByZW1haW4gKi9cbitcdFx0aWYgKGZsYWdzIFx1MDAyNiAoQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSyB8XG4rXHRcdFx0ICAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKSkge1xuK1x0XHRcdGlmICghKHNoaW5mby1cdTAwM2Vnc29fdHlwZSBcdTAwMjYgKFNLQl9HU09fVURQX1RVTk5FTCB8XG4rXHRcdFx0XHRcdFx0ICBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSB8XG4rXHRcdFx0XHRcdFx0ICBTS0JfR1NPX0dSRSB8XG4rXHRcdFx0XHRcdFx0ICBTS0JfR1NPX0dSRV9DU1VNIHxcbitcdFx0XHRcdFx0XHQgIFNLQl9HU09fSVBYSVA0IHxcbitcdFx0XHRcdFx0XHQgIFNLQl9HU09fSVBYSVA2IHxcbitcdFx0XHRcdFx0XHQgIFNLQl9HU09fRVNQKSkpXG4rXHRcdFx0XHRpZiAoc2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24pXG4rXHRcdFx0XHRcdHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uID0gMDtcbitcdFx0fVxuK1xuIFx0XHQvKiBIZWFkZXIgbXVzdCBiZSBjaGVja2VkLCBhbmQgZ3NvX3NlZ3MgcmVjb21wdXRlZC4gKi9cbiBcdFx0c2hpbmZvLVx1MDAzZWdzb190eXBlIHw9IFNLQl9HU09fRE9ER1k7XG4gXHRcdHNoaW5mby1cdTAwM2Vnc29fc2VncyA9IDA7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBGb3Igbm9uLUdTTyBwYWNrZXRzLCBjbGVhciBlbmNhcHN1bGF0aW9uIGlmIGRlY2FwIGZsYWdzIGFyZSBzZXQgKi9cbitcdFx0aWYgKChmbGFncyBcdTAwMjYgKEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X01BU0sgfFxuK1x0XHRcdCAgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0spKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uKVxuK1x0XHRcdHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uID0gMDtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTM4MDIsOCArMzg1NSw3IEBAIEJQRl9DQUxMXzQoYnBmX3NrYl9hZGp1c3Rfcm9vbSwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBzMzIsIGxlbl9kaWZmLFxuIFx0dTMyIG9mZjtcbiBcdGludCByZXQ7XG4gXG4tXHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IH4oQlBGX0ZfQURKX1JPT01fTUFTSyB8XG4tXHRcdFx0ICAgICAgIEJQRl9GX0FESl9ST09NX05PX0NTVU1fUkVTRVQpKSlcbitcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgfkJQRl9GX0FESl9ST09NX01BU0spKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdGlmICh1bmxpa2VseShsZW5fZGlmZl9hYnMgXHUwMDNlIDB4ZmZmVSkpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuQEAgLTM4MjIsMjAgKzM4NzQsNTMgQEAgQlBGX0NBTExfNChicGZfc2tiX2FkanVzdF9yb29tLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHMzMiwgbGVuX2RpZmYsXG4gXHRcdHJldHVybiAtRU5PVFNVUFA7XG4gXHR9XG4gXG4tXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX01BU0spIHtcbitcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTUFTSykge1xuK1x0XHR1MzIgbGVuX2RlY2FwX21pbiA9IDA7XG4rXG4gXHRcdGlmICghc2hyaW5rKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0XHRzd2l0Y2ggKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19NQVNLKSB7XG4tXHRcdGNhc2UgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNDpcbitcdFx0LyogUmVqZWN0IG11dHVhbGx5IGV4Y2x1c2l2ZSBkZWNhcCBmbGFnIHBhaXJzLiAqL1xuK1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19NQVNLKSA9PVxuK1x0XHQgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfTUFTSylcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSykgPT1cbitcdFx0ICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X01BU0spXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0spID09XG4rXHRcdCAgICBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUF9NQVNLKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHQvKiBSZWplY3QgbXV0dWFsbHkgZXhjbHVzaXZlIGRlY2FwIHR1bm5lbCB0eXBlIGZsYWdzLiAqL1xuK1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTSykpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTSylcbitcdFx0XHRsZW5fZGVjYXBfbWluICs9IGJwZl9za2JfbmV0X2Jhc2VfbGVuKHNrYik7XG4rXG4rXHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfVURQKVxuK1x0XHRcdGxlbl9kZWNhcF9taW4gKz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuK1xuK1x0XHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRSlcbitcdFx0XHRsZW5fZGVjYXBfbWluICs9IHNpemVvZihzdHJ1Y3QgZ3JlX2Jhc2VfaGRyKTtcbitcbitcdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDQpXG4rXHRcdFx0bGVuX2RlY2FwX21pbiArPSBzaXplb2Yoc3RydWN0IGlwaGRyKTtcbitcbitcdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYpXG4rXHRcdFx0bGVuX2RlY2FwX21pbiArPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpO1xuK1xuK1x0XHRpZiAobGVuX2RpZmZfYWJzIFx1MDAzYyBsZW5fZGVjYXBfbWluKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQpXG4gXHRcdFx0bGVuX21pbiA9IHNpemVvZihzdHJ1Y3QgaXBoZHIpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjY6XG4rXG4rXHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNilcbiBcdFx0XHRsZW5fbWluID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0fVxuIFx0fVxuIFxuIFx0bGVuX2N1ciA9IHNrYi1cdTAwM2VsZW4gLSBza2JfbmV0d29ya19vZmZzZXQoc2tiKTtcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbmluZGV4IGZmZDk2ZThiOTIwYmQuLjczMmIzNWNjMDhkMWMgMTAwNjQ0XG4tLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbisrKyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTMwMzgsOCArMzAzOCwzNCBAQCB1bmlvbiBicGZfYXR0ciB7XG4gICpcbiAgKlx0XHQqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNCoqLFxuICAqXHRcdCAgKipCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY2Kio6XG4tICpcdFx0ICBJbmRpY2F0ZSB0aGUgbmV3IElQIGhlYWRlciB2ZXJzaW9uIGFmdGVyIGRlY2Fwc3VsYXRpbmcgdGhlIG91dGVyXG4tICpcdFx0ICBJUCBoZWFkZXIuIFVzZWQgd2hlbiB0aGUgaW5uZXIgYW5kIG91dGVyIElQIHZlcnNpb25zIGFyZSBkaWZmZXJlbnQuXG4rICpcdFx0ICBJbmRpY2F0ZSB0aGUgbmV3IElQIGhlYWRlciB2ZXJzaW9uIGFmdGVyIGRlY2Fwc3VsYXRpbmcgdGhlXG4rICpcdFx0ICBvdXRlciBJUCBoZWFkZXIuIFVzZWQgd2hlbiB0aGUgaW5uZXIgYW5kIG91dGVyIElQIHZlcnNpb25zXG4rICpcdFx0ICBhcmUgZGlmZmVyZW50LiBUaGVzZSBmbGFncyBvbmx5IHRyaWdnZXIgYSBwcm90b2NvbCBjaGFuZ2VcbisgKlx0XHQgIHdpdGhvdXQgY2xlYXJpbmcgYW55IHR1bm5lbC1zcGVjaWZpYyBHU08gZmxhZ3MuXG4rICpcbisgKlx0XHQqICoqQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFKio6XG4rICpcdFx0ICBDbGVhciBHUkUgdHVubmVsIEdTTyBmbGFncyAoU0tCX0dTT19HUkUgYW5kIFNLQl9HU09fR1JFX0NTVU0pXG4rICpcdFx0ICB3aGVuIGRlY2Fwc3VsYXRpbmcgYSBHUkUgdHVubmVsLlxuKyAqXG4rICpcdFx0KiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCoqOlxuKyAqXHRcdCAgQ2xlYXIgVURQIHR1bm5lbCBHU08gZmxhZ3MgKFNLQl9HU09fVURQX1RVTk5FTCBhbmRcbisgKlx0XHQgIFNLQl9HU09fVURQX1RVTk5FTF9DU1VNKSB3aGVuIGRlY2Fwc3VsYXRpbmcgYSBVRFAgdHVubmVsLlxuKyAqXG4rICpcdFx0KiAqKkJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCoqOlxuKyAqXHRcdCAgQ2xlYXIgSVBJUC9TSVQgdHVubmVsIEdTTyBmbGFnIChTS0JfR1NPX0lQWElQNCkgd2hlbiBkZWNhcHN1bGF0aW5nXG4rICpcdFx0ICBhIHR1bm5lbCB3aXRoIGFuIG91dGVyIElQdjQgaGVhZGVyIChJUHY0LWluLUlQdjQgb3IgSVB2Ni1pbi1JUHY0KS5cbisgKlxuKyAqXHRcdCogKipCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDYqKjpcbisgKlx0XHQgIENsZWFyIElQdjYgZW5jYXBzdWxhdGlvbiB0dW5uZWwgR1NPIGZsYWcgKFNLQl9HU09fSVBYSVA2KSB3aGVuXG4rICpcdFx0ICBkZWNhcHN1bGF0aW5nIGEgdHVubmVsIHdpdGggYW4gb3V0ZXIgSVB2NiBoZWFkZXIgKElQdjYtaW4tSVB2NlxuKyAqXHRcdCAgb3IgSVB2NC1pbi1JUHY2KS5cbisgKlxuKyAqXHRcdFdoZW4gdXNpbmcgdGhlIGRlY2Fwc3VsYXRpb24gZmxhZ3MgYWJvdmUsIHRoZSBza2ItXHUwMDNlZW5jYXBzdWxhdGlvblxuKyAqXHRcdGZsYWcgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkIGlmIGFsbCB0dW5uZWwtc3BlY2lmaWMgR1NPIGZsYWdzXG4rICpcdFx0KFNLQl9HU09fVURQX1RVTk5FTCwgU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0sIFNLQl9HU09fR1JFLFxuKyAqXHRcdFNLQl9HU09fR1JFX0NTVU0sIFNLQl9HU09fSVBYSVA0LCBTS0JfR1NPX0lQWElQNikgaGF2ZSBiZWVuXG4rICpcdFx0cmVtb3ZlZCBmcm9tIHRoZSBwYWNrZXQuIFRoaXMgaGFuZGxlcyBjYXNlcyB3aGVyZSBhbGwgdHVubmVsXG4rICpcdFx0bGF5ZXJzIGhhdmUgYmVlbiBkZWNhcHN1bGF0ZWQuXG4gICpcbiAgKiBcdFx0QSBjYWxsIHRvIHRoaXMgaGVscGVyIGlzIHN1c2NlcHRpYmxlIHRvIGNoYW5nZSB0aGUgdW5kZXJseWluZ1xuICAqIFx0XHRwYWNrZXQgYnVmZmVyLiBUaGVyZWZvcmUsIGF0IGxvYWQgdGltZSwgYWxsIGNoZWNrcyBvbiBwb2ludGVyc1xuQEAgLTYyODMsNyArNjMwOSw3IEBAIGVudW0ge1xuIH07XG4gXG4gLyogQlBGX0ZVTkNfc2tiX2FkanVzdF9yb29tIGZsYWdzLiAqL1xuLWVudW0ge1xuK2VudW0gYnBmX2Fkal9yb29tX2ZsYWdzIHtcbiBcdEJQRl9GX0FESl9ST09NX0ZJWEVEX0dTT1x0PSAoMVVMTCBcdTAwM2NcdTAwM2MgMCksXG4gXHRCUEZfRl9BREpfUk9PTV9FTkNBUF9MM19JUFY0XHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyAxKSxcbiBcdEJQRl9GX0FESl9ST09NX0VOQ0FQX0wzX0lQVjZcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDIpLFxuQEAgLTYyOTMsNiArNjMxOSwxMCBAQCBlbnVtIHtcbiBcdEJQRl9GX0FESl9ST09NX0VOQ0FQX0wyX0VUSFx0PSAoMVVMTCBcdTAwM2NcdTAwM2MgNiksXG4gXHRCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0XHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyA3KSxcbiBcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjZcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDgpLFxuK1x0QlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFXHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyA5KSxcbitcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUFx0PSAoMVVMTCBcdTAwM2NcdTAwM2MgMTApLFxuK1x0QlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0XHQ9ICgxVUxMIFx1MDAzY1x1MDAzYyAxMSksXG4rXHRCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDZcdD0gKDFVTEwgXHUwMDNjXHUwMDNjIDEyKSxcbiB9O1xuIFxuIGVudW0ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfdGNfdHVubmVsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3RjX3R1bm5lbC5jXG5pbmRleCAxYWE3Yzk0NjM5ODBiLi42N2JhMjdkNjkzNDc0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF90Y190dW5uZWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF90Y190dW5uZWwuY1xuQEAgLTQzOCw3ICs0MzgsNiBAQCBzdGF0aWMgaW50IHNldHVwKHZvaWQpXG4gXHRTWVMoZmFpbF9jbG9zZV9uc19jbGllbnQsIFwiaXAgbGluayBhZGQgJXMgdHlwZSB2ZXRoIHBlZXIgbmFtZSAlc1wiLFxuIFx0ICAgIFwidmV0aDEgbXR1IDE1MDAgbmV0bnMgXCIgQ0xJRU5UX05TIFwiIGFkZHJlc3MgXCIgTUFDX0FERFJfVkVUSDEsXG4gXHQgICAgXCJ2ZXRoMiBtdHUgMTUwMCBuZXRucyBcIiBTRVJWRVJfTlMgXCIgYWRkcmVzcyBcIiBNQUNfQUREUl9WRVRIMik7XG4tXHRTWVMoZmFpbF9jbG9zZV9uc19jbGllbnQsIFwiZXRodG9vbCAtSyB2ZXRoMSB0c28gb2ZmXCIpO1xuIFx0U1lTKGZhaWxfY2xvc2VfbnNfY2xpZW50LCBcImlwIGxpbmsgc2V0IHZldGgxIHVwXCIpO1xuIFx0bnN0b2tlbl9zZXJ2ZXIgPSBvcGVuX25ldG5zKFNFUlZFUl9OUyk7XG4gXHRpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbl9zZXJ2ZXIsIFwib3BlbiBzZXJ2ZXIgbnNcIikpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfdHVubmVsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y190dW5uZWwuY1xuaW5kZXggNzM3NmRmNDA1YTZiZS4uODUzYmNhOTYyOTEwMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3R1bm5lbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y190dW5uZWwuY1xuQEAgLTYsNiArNiw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2VuZGlhbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9jb3JlX3JlYWQuaFx1MDAzZVxuICNpbmNsdWRlIFwiYnBmX3RyYWNpbmdfbmV0LmhcIlxuICNpbmNsdWRlIFwiYnBmX2NvbXBpbGVyLmhcIlxuIFxuQEAgLTM3LDYgKzM4LDIyIEBAIHN0cnVjdCB2eGxhbmhkcl9fX2xvY2FsIHtcbiBcbiAjZGVmaW5lXHRFWFRQUk9UT19WWExBTlx0MHgxXG4gXG4rI2RlZmluZSBTS0JfR1NPX1VEUF9UVU5ORUxfTUFTS1x0KFNLQl9HU09fVURQX1RVTk5FTCB8XHRcdFx0XFxcbitcdFx0XHRcdCBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSlcbitcbisjZGVmaW5lIFNLQl9HU09fVFVOTkVMX01BU0tcdChTS0JfR1NPX1VEUF9UVU5ORUxfTUFTSyB8XHRcdFxcXG4rXHRcdFx0XHQgU0tCX0dTT19HUkUgfFx0XHRcdFx0XFxcbitcdFx0XHRcdCBTS0JfR1NPX0dSRV9DU1VNIHxcdFx0XHRcXFxuK1x0XHRcdFx0IFNLQl9HU09fSVBYSVA0IHxcdFx0XHRcXFxuK1x0XHRcdFx0IFNLQl9HU09fSVBYSVA2IHxcdFx0XHRcXFxuK1x0XHRcdFx0IFNLQl9HU09fRVNQKVxuK1xuKyNkZWZpbmUgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfTUFTS1x0KEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCB8XHRcXFxuK1x0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFKVxuK1xuKyNkZWZpbmUgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVBfTUFTS1x0KEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCB8XHRcXFxuK1x0XHRcdFx0XHQgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KVxuK1xuICNkZWZpbmVcdFZYTEFOX0ZMQUdTICAgICBicGZfaHRvbmwoMVx1MDAzY1x1MDAzYzI3KVxuICNkZWZpbmVcdFZOSV9JRFx0XHQxXG4gI2RlZmluZVx0VlhMQU5fVk5JXHRicGZfaHRvbmwoVk5JX0lEIFx1MDAzY1x1MDAzYyA4KVxuQEAgLTU4OSw5ICs2MDYsMTIgQEAgaW50IF9fZW5jYXBfaXA2dnhsYW5fZXRoKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiBcdFx0cmV0dXJuIFRDX0FDVF9PSztcbiB9XG4gXG4tc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8pXG4rc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8sXG4rXHRcdFx0ICBfX3U2NCBpcHhpcF9mbGFnKVxuIHtcbiBcdF9fdTY0IGZsYWdzID0gQlBGX0ZfQURKX1JPT01fRklYRURfR1NPO1xuK1x0c3RydWN0IHNrX2J1ZmYgKmtza2I7XG4rXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm87XG4gXHRzdHJ1Y3QgaXB2Nl9vcHRfaGRyIGlwNl9vcHRfaGRyO1xuIFx0c3RydWN0IGdyZV9oZHIgZ3JlaDtcbiBcdHN0cnVjdCB1ZHBoZHIgdWRwaDtcbkBAIC01OTksMTAgKzYxOSwxMiBAQCBzdGF0aWMgaW50IGRlY2FwX2ludGVybmFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiwgaW50IG9mZiwgaW50IGxlbiwgY2hhciBwcm90bylcbiBcbiBcdHN3aXRjaCAocHJvdG8pIHtcbiBcdGNhc2UgSVBQUk9UT19JUElQOlxuLVx0XHRmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0O1xuK1x0XHRmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0IHxcbitcdFx0XHQgaXB4aXBfZmxhZztcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElQUFJPVE9fSVBWNjpcbi1cdFx0ZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNjtcbitcdFx0ZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNiB8XG4rXHRcdFx0IGlweGlwX2ZsYWc7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBORVhUSERSX0RFU1Q6XG4gXHRcdGlmIChicGZfc2tiX2xvYWRfYnl0ZXMoc2tiLCBvZmYgKyBsZW4sIFx1MDAyNmlwNl9vcHRfaGRyLFxuQEAgLTYxMCwxMCArNjMyLDEyIEBAIHN0YXRpYyBpbnQgZGVjYXBfaW50ZXJuYWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiLCBpbnQgb2ZmLCBpbnQgbGVuLCBjaGFyIHByb3RvKVxuIFx0XHRcdHJldHVybiBUQ19BQ1RfT0s7XG4gXHRcdHN3aXRjaCAoaXA2X29wdF9oZHIubmV4dGhkcikge1xuIFx0XHRjYXNlIElQUFJPVE9fSVBJUDpcbi1cdFx0XHRmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MM19JUFY0O1xuK1x0XHRcdGZsYWdzIHw9IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjQgfFxuK1x0XHRcdFx0IGlweGlwX2ZsYWc7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgSVBQUk9UT19JUFY2OlxuLVx0XHRcdGZsYWdzIHw9IEJQRl9GX0FESl9ST09NX0RFQ0FQX0wzX0lQVjY7XG4rXHRcdFx0ZmxhZ3MgfD0gQlBGX0ZfQURKX1JPT01fREVDQVBfTDNfSVBWNiB8XG4rXHRcdFx0XHQgaXB4aXBfZmxhZztcbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHRyZXR1cm4gVENfQUNUX09LO1xuQEAgLTYyMSw2ICs2NDUsMTEgQEAgc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8pXG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBJUFBST1RPX0dSRTpcbiBcdFx0b2xlbiArPSBzaXplb2Yoc3RydWN0IGdyZV9oZHIpO1xuK1x0XHRpZiAoIWJwZl9jb3JlX2VudW1fdmFsdWVfZXhpc3RzKGVudW0gYnBmX2Fkal9yb29tX2ZsYWdzLFxuK1x0XHRcdFx0XHRcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X0dSRSkpXG4rXHRcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuK1x0XHRmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkU7XG4rXG4gXHRcdGlmIChicGZfc2tiX2xvYWRfYnl0ZXMoc2tiLCBvZmYgKyBsZW4sIFx1MDAyNmdyZWgsIHNpemVvZihncmVoKSkgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIFRDX0FDVF9PSztcbiBcdFx0c3dpdGNoIChicGZfbnRvaHMoZ3JlaC5wcm90b2NvbCkpIHtcbkBAIC02MzQsNiArNjYzLDEwIEBAIHN0YXRpYyBpbnQgZGVjYXBfaW50ZXJuYWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiLCBpbnQgb2ZmLCBpbnQgbGVuLCBjaGFyIHByb3RvKVxuIFx0XHRicmVhaztcbiBcdGNhc2UgSVBQUk9UT19VRFA6XG4gXHRcdG9sZW4gKz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuK1x0XHRpZiAoIWJwZl9jb3JlX2VudW1fdmFsdWVfZXhpc3RzKGVudW0gYnBmX2Fkal9yb29tX2ZsYWdzLFxuK1x0XHRcdFx0XHRcdEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCkpXG4rXHRcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuK1x0XHRmbGFncyB8PSBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9VRFA7XG4gXHRcdGlmIChicGZfc2tiX2xvYWRfYnl0ZXMoc2tiLCBvZmYgKyBsZW4sIFx1MDAyNnVkcGgsIHNpemVvZih1ZHBoKSkgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIFRDX0FDVF9PSztcbiBcdFx0c3dpdGNoIChicGZfbnRvaHModWRwaC5kZXN0KSkge1xuQEAgLTY1NSw2ICs2ODgsNDAgQEAgc3RhdGljIGludCBkZWNhcF9pbnRlcm5hbChzdHJ1Y3QgX19za19idWZmICpza2IsIGludCBvZmYsIGludCBsZW4sIGNoYXIgcHJvdG8pXG4gXHRpZiAoYnBmX3NrYl9hZGp1c3Rfcm9vbShza2IsIC1vbGVuLCBCUEZfQURKX1JPT01fTUFDLCBmbGFncykpXG4gXHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbiBcbitcdGtza2IgPSBicGZfY2FzdF90b19rZXJuX2N0eChza2IpO1xuK1x0c2hpbmZvID0gYnBmX2NvcmVfY2FzdChrc2tiLVx1MDAzZWhlYWQgKyBrc2tiLVx1MDAzZWVuZCwgc3RydWN0IHNrYl9zaGFyZWRfaW5mbyk7XG4rXHRpZiAoc2hpbmZvLVx1MDAzZWdzb19zaXplKSB7XG4rXHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoc2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNiBTS0JfR1NPX1VEUF9UVU5ORUxfTUFTSykpXG4rXHRcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuK1xuK1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9HUkUpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKHNoaW5mby1cdTAwM2Vnc29fdHlwZSBcdTAwMjYgKFNLQl9HU09fR1JFIHwgU0tCX0dTT19HUkVfQ1NVTSkpKVxuK1x0XHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbitcbitcdFx0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0KSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIChzaGluZm8tXHUwMDNlZ3NvX3R5cGUgXHUwMDI2IFNLQl9HU09fSVBYSVA0KSlcbitcdFx0XHRyZXR1cm4gVENfQUNUX1NIT1Q7XG4rXG4rXHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNikgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoc2hpbmZvLVx1MDAzZWdzb190eXBlIFx1MDAyNiBTS0JfR1NPX0lQWElQNikpXG4rXHRcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuK1xuK1x0XHRpZiAoZmxhZ3MgXHUwMDI2IChCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLIHxcbitcdFx0XHQgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0spKSB7XG4rXHRcdFx0aWYgKChzaGluZm8tXHUwMDNlZ3NvX3R5cGUgXHUwMDI2IFNLQl9HU09fVFVOTkVMX01BU0spIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAha3NrYi1cdTAwM2VlbmNhcHN1bGF0aW9uKVxuK1x0XHRcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuK1x0XHRcdGlmICghKHNoaW5mby1cdTAwM2Vnc29fdHlwZSBcdTAwMjYgU0tCX0dTT19UVU5ORUxfTUFTSykgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIGtza2ItXHUwMDNlZW5jYXBzdWxhdGlvbilcbitcdFx0XHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbitcdFx0fVxuK1x0fSBlbHNlIGlmICgoZmxhZ3MgXHUwMDI2IChCUEZfRl9BREpfUk9PTV9ERUNBUF9MNF9NQVNLIHxcbitcdFx0XHQgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQX01BU0spKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAga3NrYi1cdTAwM2VlbmNhcHN1bGF0aW9uKSB7XG4rXHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbitcdH1cbitcbiBcdHJldHVybiBUQ19BQ1RfT0s7XG4gfVxuIFxuQEAgLTY2Miw2ICs3MjksMTAgQEAgc3RhdGljIGludCBkZWNhcF9pcHY0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiB7XG4gXHRzdHJ1Y3QgaXBoZHIgaXBoX291dGVyO1xuIFxuK1x0aWYgKCFicGZfY29yZV9lbnVtX3ZhbHVlX2V4aXN0cyhlbnVtIGJwZl9hZGpfcm9vbV9mbGFncyxcbitcdFx0XHRcdFx0QlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA0KSlcbitcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuK1xuIFx0aWYgKGJwZl9za2JfbG9hZF9ieXRlcyhza2IsIEVUSF9ITEVOLCBcdTAwMjZpcGhfb3V0ZXIsXG4gXHRcdFx0ICAgICAgIHNpemVvZihpcGhfb3V0ZXIpKSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIFRDX0FDVF9PSztcbkBAIC02NzAsMTkgKzc0MSwyNSBAQCBzdGF0aWMgaW50IGRlY2FwX2lwdjQoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuIFx0XHRyZXR1cm4gVENfQUNUX09LO1xuIFxuIFx0cmV0dXJuIGRlY2FwX2ludGVybmFsKHNrYiwgRVRIX0hMRU4sIHNpemVvZihpcGhfb3V0ZXIpLFxuLVx0XHRcdCAgICAgIGlwaF9vdXRlci5wcm90b2NvbCk7XG4rXHRcdFx0ICAgICAgaXBoX291dGVyLnByb3RvY29sLFxuK1x0XHRcdCAgICAgIEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgZGVjYXBfaXB2NihzdHJ1Y3QgX19za19idWZmICpza2IpXG4ge1xuIFx0c3RydWN0IGlwdjZoZHIgaXBoX291dGVyO1xuIFxuK1x0aWYgKCFicGZfY29yZV9lbnVtX3ZhbHVlX2V4aXN0cyhlbnVtIGJwZl9hZGpfcm9vbV9mbGFncyxcbitcdFx0XHRcdFx0QlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KSlcbitcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuK1xuIFx0aWYgKGJwZl9za2JfbG9hZF9ieXRlcyhza2IsIEVUSF9ITEVOLCBcdTAwMjZpcGhfb3V0ZXIsXG4gXHRcdFx0ICAgICAgIHNpemVvZihpcGhfb3V0ZXIpKSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIFRDX0FDVF9PSztcbiBcbiBcdHJldHVybiBkZWNhcF9pbnRlcm5hbChza2IsIEVUSF9ITEVOLCBzaXplb2YoaXBoX291dGVyKSxcbi1cdFx0XHQgICAgICBpcGhfb3V0ZXIubmV4dGhkcik7XG4rXHRcdFx0ICAgICAgaXBoX291dGVyLm5leHRoZHIsXG4rXHRcdFx0ICAgICAgQlBGX0ZfQURKX1JPT01fREVDQVBfSVBYSVA2KTtcbiB9XG4gXG4gU0VDKFwidGNcIilcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjUxOjE4LjkwNzE0Njk0MVoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDUyODY1OTk0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBQYXRjaCBmb3IgYGJwZl9za2JfYWRqdXN0X3Jvb21gKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBpbnRyb2R1Y2luZyBzb21lIG5ldyBmbGFncyBmb3IgdGhlIGBicGZfc2tiX2FkanVzdF9yb29tYCBoZWxwZXIgaW4gQlBGLiBTcGVjaWZpY2FsbHksIHRoZXNlIGZsYWdzOiBgQlBGX0ZfQURKX1JPT01fREVDQVBfTDRfR1JFYCwgYEJQRl9GX0FESl9ST09NX0RFQ0FQX0w0X1VEUGAsIGBCUEZfRl9BREpfUk9PTV9ERUNBUF9JUFhJUDRgLCBhbmQgYEJQRl9GX0FESl9ST09NX0RFQ0FQX0lQWElQNmAuIEl0IHNlZW1zIHRoZXNlIGFyZSBhbGwgYWJvdXQgc2VsZWN0aXZlbHkgY2xlYXJpbmcgR1NPIHR1bm5lbCBmbGFncyB3aGVuIHdlJ3JlIGRlY2Fwc3VsYXRpbmcgcGFja2V0cywgd2hpY2ggbWFrZXMgc2Vuc2UuIFdlIGNhbiBzZWUgdGhpcyBsb2dpYyBhcHBsaWVkIHdpdGhpbiBgYnBmX3NrYl9uZXRfc2hyaW5rYCBhbmQgYGJwZl9za2JfYWRqdXN0X3Jvb21gLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgc28gbGV0J3MgZGlnIGludG8gdGhlIGRldGFpbHMuIEkgc2VlIHRoYXQgYGJwZl9za2JfbmV0X3Nocmlua2AgaXMgZG9pbmcgY29uZGl0aW9uYWwgR1NPIGZsYWcgY2xlYXJpbmcgYmFzZWQgb24gdGhlIFwiZGVjYXAgdHlwZVwiLiBJdCdzIG9ubHkgY2xlYXJpbmcgdGhlIEdTTyBmbGFncyB0aGF0IGFyZSByZWxldmFudCB0byB0aGUgbGF5ZXIgYmVpbmcgcmVtb3ZlZCwgd2hpY2ggaXMgZ29vZC4gVGhlbiBgYnBmX3NrYl9hZGp1c3Rfcm9vbWAgaXMgYmVpbmcgbW9kaWZpZWQgdG8gY2FsY3VsYXRlIGBsZW5fZGVjYXBfbWluYCBhbmQgdmFsaWRhdGUgdGhhdCB0aGUgY2hhbmdlIGluIGxlbmd0aCBpcyBzdWZmaWNpZW50IGZvciB0aGUgZGVjYXBzdWxhdGlvbi5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBpbnZvbHZlIG1vZGlmeWluZyBgc2hpbmZvLVx1MDAzZWdzb190eXBlYCBhbmQgYHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uYCBiYXNlZCBvbiB0aGVzZSBuZXcgZmxhZ3MuIEknbSBmb2N1c2luZyBvbiB3aGV0aGVyIHRoZXJlJ3MgYW55IGNoYW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MsIGluZm9ybWF0aW9uIGxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBiZWluZyBpbnRyb2R1Y2VkLiBGcm9tIHdoYXQgSSBzZWUsIG5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBzZW50IHRvIHVzZXJzcGFjZS4gVGhlcmUncyBubyBmYW5jeSBuZXcgYWxsb2NhdGlvbiBvZiBjb21wbGV4IHN0cnVjdHVyZXMsIGFuZCB0aGUgY2hhbmdlIGlzIGxpbWl0ZWQgdG8gYml0d2lzZSBvcGVyYXRpb25zIG9uIGBnc29fdHlwZWAgYW5kIGBlbmNhcHN1bGF0aW9uYC4gSXQgYWxzbyBjaGVja3MgYGxlbl9kaWZmX2Fic2AgYWdhaW5zdCB0aGUgbWluaW11bSBsZW5ndGggdG8gcmVtb3ZlLlxuXG5BbHJpZ2h0LCBzbyB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgc3RyYWlnaHRmb3J3YXJkIGJpdHdpc2Ugb3BlcmF0aW9ucyBvbiBleGlzdGluZyBmaWVsZHMsIGFuZCB0aGVyZSdzIGEgbGVuZ3RoIGNoZWNrIGJlaW5nIGRvbmUuIFRoaXMgc2hvdWxkIHByZXZlbnQgYW55IG91dC1vZi1ib3VuZHMgcmVhZHMuIEkgdGhpbmsgd2UgYXJlIGdvb2QgaGVyZSwgYXMgS01TQU4gc2hvdWxkbid0IGJlIG5lZWRlZCBiZWNhdXNlIEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIHNob3VsZCBoYW5kbGUgdGhlIHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuXG5cbkxldCBtZSBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUuIEknbGwgZG91YmxlLWNoZWNrIHdoYXQgYGJwZl9za2JfbmV0X2Jhc2VfbGVuYCBkb2VzLCBqdXN0IGluIGNhc2UgdGhhdCdzIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFoLCBpdCBqdXN0IHJlYWRzIGBza2ItXHUwMDNlcHJvdG9jb2xgIGFuZCByZXR1cm5zIHRoZSBiYXNlIGhlYWRlciBsZW5ndGguIEl0IGxvb2tzIGxpa2UgdGhlIGBsZW5fZGlmZl9hYnNgIGNoZWNrIGluIGBicGZfc2tiX2FkanVzdF9yb29tYCBlbnN1cmVzIHdlJ3JlIHNocmlua2luZyB0aGUgcGFja2V0IGJ5IGF0IGxlYXN0IHRoZSByZXF1aXJlZCBhbW91bnQsIGFuZCBLQVNBTiBzaG91bGQgaGFuZGxlIGFueXRoaW5nIHRoYXQgc2xpcHMgdGhyb3VnaC5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgTmVlZHNLTVNBTiBzaG91bGQgYmUgZmFsc2UuIFRoZSBjaGFuZ2VzIHNlZW0gbG9jYWxpemVkIGFuZCBzYWZlLiBUaGUgcGF0Y2ggaXMgbWFuaXB1bGF0aW5nIGV4aXN0aW5nIEJQRiBoZWxwZXJzIHRvIHNlbGVjdGl2ZWx5IGNsZWFyIHNvbWUgZXhpc3RpbmcgZmxhZ3MgZHVyaW5nIHBhY2tldCBkZWNhcHN1bGF0aW9uLCB0aGVyZSBhcmUgYXBwcm9wcmlhdGUgc2FmZXR5IGNoZWNrcyBpbiBwbGFjZSwgYW5kIHRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIGFueSBkYXRhIHN0cnVjdHVyZSB0aGF0IHdvdWxkIHBvdGVudGlhbGx5IGFsbG93IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBiZSByZWFkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDIyNiwiT3V0cHV0VG9rZW5zIjoyMjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDU3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6NTE6MzMuNDM1ODEwODE5WiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBmbGFncyBmb3IgdGhlIGBicGZfc2tiX2FkanVzdF9yb29tYCBCUEYgaGVscGVyIHRvIHNlbGVjdGl2ZWx5IGNsZWFyIEdTTyB0dW5uZWwgZmxhZ3MgYW5kIHRoZSBgc2tiLVxcdTAwM2VlbmNhcHN1bGF0aW9uYCBmbGFnIGR1cmluZyBwYWNrZXQgZGVjYXBzdWxhdGlvbi4gVGhlIGNoYW5nZXMgY29uc2lzdCBvZiBiaXR3aXNlIG9wZXJhdGlvbnMgb24gZXhpc3RpbmcgYHNrYl9zaGFyZWRfaW5mb2AgZmllbGRzIChgZ3NvX3R5cGVgKSBhbmQgYHNrYmAgZmllbGRzIChgZW5jYXBzdWxhdGlvbmApLCBhcyB3ZWxsIGFzIGxlbmd0aCB2YWxpZGF0aW9uIGNoZWNrcyB0byBlbnN1cmUgdGhlIHBhY2tldCBpcyBzaHJ1bmsgYnkgYXQgbGVhc3QgdGhlIHNpemUgb2YgdGhlIGRlY2Fwc3VsYXRlZCBoZWFkZXJzLlxcblxcblRoZXNlIG1vZGlmaWNhdGlvbnMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGR1ZSB0byBpbmNvcnJlY3QgbGVuZ3RoIGNhbGN1bGF0aW9ucykgd291bGQgYmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBmbGFncyBmb3IgdGhlIGBicGZfc2tiX2FkanVzdF9yb29tYCBCUEYgaGVscGVyIHRvIHNlbGVjdGl2ZWx5IGNsZWFyIEdTTyB0dW5uZWwgZmxhZ3MgYW5kIHRoZSBgc2tiLVxcdTAwM2VlbmNhcHN1bGF0aW9uYCBmbGFnIGR1cmluZyBwYWNrZXQgZGVjYXBzdWxhdGlvbi4gVGhlIGNoYW5nZXMgY29uc2lzdCBvZiBiaXR3aXNlIG9wZXJhdGlvbnMgb24gZXhpc3RpbmcgYHNrYl9zaGFyZWRfaW5mb2AgZmllbGRzIChgZ3NvX3R5cGVgKSBhbmQgYHNrYmAgZmllbGRzIChgZW5jYXBzdWxhdGlvbmApLCBhcyB3ZWxsIGFzIGxlbmd0aCB2YWxpZGF0aW9uIGNoZWNrcyB0byBlbnN1cmUgdGhlIHBhY2tldCBpcyBzaHJ1bmsgYnkgYXQgbGVhc3QgdGhlIHNpemUgb2YgdGhlIGRlY2Fwc3VsYXRlZCBoZWFkZXJzLlxcblxcblRoZXNlIG1vZGlmaWNhdGlvbnMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGR1ZSB0byBpbmNvcnJlY3QgbGVuZ3RoIGNhbGN1bGF0aW9ucykgd291bGQgYmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow6bzl4[1] Phase: Succeeded StartedAt: 2026-08-12 16:51:44 +0000 UTC FinishedAt: 2026-08-12 16:51:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bzl4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-12 16:51:44 +0000 UTC FinishedAt: 2026-08-12 16:51:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bzl4[2] Phase: Succeeded StartedAt: 2026-08-12 16:51:44 +0000 UTC FinishedAt: 2026-08-12 20:30:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bzl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_adjust_room"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"773bf86d-a93d-43a0-b4a4-e84e9b2becf4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-12 16:51:44 +0000 UTC FinishedAt: 2026-08-12 20:30:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_adjust_room"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"773bf86d-a93d-43a0-b4a4-e84e9b2becf4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6bzl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_adjust_room"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"773bf86d-a93d-43a0-b4a4-e84e9b2becf4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-12 16:51:44 +0000 UTC FinishedAt: 2026-08-12 16:51:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bzl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_adjust_room"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"773bf86d-a93d-43a0-b4a4-e84e9b2becf4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-12 16:51:44 +0000 UTC FinishedAt: 2026-08-12 16:51:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},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-workflow6bzl4/series-workflow6bzl4-convert-artifact-3598121888/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6bzl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_adjust_room"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"773bf86d-a93d-43a0-b4a4-e84e9b2becf4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-12 16:51:54 +0000 UTC FinishedAt: 2026-08-12 17:08:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bzl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_adjust_room"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"773bf86d-a93d-43a0-b4a4-e84e9b2becf4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-12 16:51:54 +0000 UTC FinishedAt: 2026-08-12 17:08:19 +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:*9f2cd078-2113-458c-990a-091e61b2924f,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-workflow6bzl4/series-workflow6bzl4-convert-artifact-3598121888/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": "6b014913-056b-4e35-a0ad-8d7987e05d0a", "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-workflow6bzl4/series-workflow6bzl4-build-action-3991394918/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6bzl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_adjust_room"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"773bf86d-a93d-43a0-b4a4-e84e9b2becf4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-12 16:51:54 +0000 UTC FinishedAt: 2026-08-12 17:08:09 +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:*9f2cd078-2113-458c-990a-091e61b2924f,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-workflow6bzl4/series-workflow6bzl4-convert-artifact-3598121888/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": "6b014913-056b-4e35-a0ad-8d7987e05d0a", "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-workflow6bzl4/series-workflow6bzl4-build-action-3991394918/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6bzl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_adjust_room"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"773bf86d-a93d-43a0-b4a4-e84e9b2becf4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-12 17:08:19 +0000 UTC FinishedAt: 2026-08-12 17:08:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bzl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_adjust_room"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"773bf86d-a93d-43a0-b4a4-e84e9b2becf4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-12 17:08:19 +0000 UTC FinishedAt: 2026-08-12 17:08:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bzl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_adjust_room"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"773bf86d-a93d-43a0-b4a4-e84e9b2becf4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-12 17:08:19 +0000 UTC FinishedAt: 2026-08-12 17:08:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bzl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_adjust_room"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"773bf86d-a93d-43a0-b4a4-e84e9b2becf4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-12 17:08:19 +0000 UTC FinishedAt: 2026-08-12 17:08:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"773bf86d-a93d-43a0-b4a4-e84e9b2becf4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},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-workflow6bzl4/series-workflow6bzl4-convert-artifact-2773798599/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6bzl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_adjust_room"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"773bf86d-a93d-43a0-b4a4-e84e9b2becf4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-12 17:08:29 +0000 UTC FinishedAt: 2026-08-12 17:10:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bzl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_adjust_room"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"773bf86d-a93d-43a0-b4a4-e84e9b2becf4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-12 17:08:29 +0000 UTC FinishedAt: 2026-08-12 17:10:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6b014913-056b-4e35-a0ad-8d7987e05d0a,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-workflow6bzl4/series-workflow6bzl4-build-action-3991394918/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-workflow6bzl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_adjust_room"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"773bf86d-a93d-43a0-b4a4-e84e9b2becf4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-12 17:10:36 +0000 UTC FinishedAt: 2026-08-12 17:10:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bzl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_adjust_room"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"773bf86d-a93d-43a0-b4a4-e84e9b2becf4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-12 17:10:36 +0000 UTC FinishedAt: 2026-08-12 17:10:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bzl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_adjust_room"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"773bf86d-a93d-43a0-b4a4-e84e9b2becf4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-12 17:10:36 +0000 UTC FinishedAt: 2026-08-12 17:27:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bzl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_adjust_room"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"773bf86d-a93d-43a0-b4a4-e84e9b2becf4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-12 17:10:36 +0000 UTC FinishedAt: 2026-08-12 17:27:02 +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:*9f2cd078-2113-458c-990a-091e61b2924f,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-workflow6bzl4/series-workflow6bzl4-convert-artifact-2773798599/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": "a82d02a8-bc06-4f04-ac36-1772d31fada1", "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-workflow6bzl4/series-workflow6bzl4-build-action-2251361867/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6bzl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_adjust_room"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"773bf86d-a93d-43a0-b4a4-e84e9b2becf4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-12 17:10:36 +0000 UTC FinishedAt: 2026-08-12 17:26:52 +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:*9f2cd078-2113-458c-990a-091e61b2924f,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-workflow6bzl4/series-workflow6bzl4-convert-artifact-2773798599/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": "a82d02a8-bc06-4f04-ac36-1772d31fada1", "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-workflow6bzl4/series-workflow6bzl4-build-action-2251361867/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6bzl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_adjust_room"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"773bf86d-a93d-43a0-b4a4-e84e9b2becf4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-12 17:27:02 +0000 UTC FinishedAt: 2026-08-12 17:27:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bzl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_adjust_room"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"773bf86d-a93d-43a0-b4a4-e84e9b2becf4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-12 17:27:02 +0000 UTC FinishedAt: 2026-08-12 17:27:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bzl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_adjust_room"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"773bf86d-a93d-43a0-b4a4-e84e9b2becf4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-12 17:27:02 +0000 UTC FinishedAt: 2026-08-12 17:28:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bzl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_adjust_room"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"773bf86d-a93d-43a0-b4a4-e84e9b2becf4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-12 17:27:02 +0000 UTC FinishedAt: 2026-08-12 17:28:44 +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:*a82d02a8-bc06-4f04-ac36-1772d31fada1,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-workflow6bzl4/series-workflow6bzl4-build-action-2251361867/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-workflow6bzl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_adjust_room"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"773bf86d-a93d-43a0-b4a4-e84e9b2becf4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-12 17:28:54 +0000 UTC FinishedAt: 2026-08-12 20:30:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bzl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_adjust_room"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"773bf86d-a93d-43a0-b4a4-e84e9b2becf4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-12 17:28:54 +0000 UTC FinishedAt: 2026-08-12 20:30:42 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_adjust_room"],"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:*6b014913-056b-4e35-a0ad-8d7987e05d0a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a82d02a8-bc06-4f04-ac36-1772d31fada1,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-workflow6bzl4/series-workflow6bzl4-build-action-3991394918/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-workflow6bzl4/series-workflow6bzl4-build-action-2251361867/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6bzl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_adjust_room"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"773bf86d-a93d-43a0-b4a4-e84e9b2becf4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-12 17:28:54 +0000 UTC FinishedAt: 2026-08-12 17:29:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bzl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_adjust_room"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"773bf86d-a93d-43a0-b4a4-e84e9b2becf4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-12 17:28:54 +0000 UTC FinishedAt: 2026-08-12 17:29:06 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_adjust_room"],"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-workflow6bzl4/series-workflow6bzl4-convert-artifact-2940592800/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6bzl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_adjust_room"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"773bf86d-a93d-43a0-b4a4-e84e9b2becf4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-12 17:28:54 +0000 UTC FinishedAt: 2026-08-12 17:28:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bzl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_adjust_room"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"773bf86d-a93d-43a0-b4a4-e84e9b2becf4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-12 17:28:54 +0000 UTC FinishedAt: 2026-08-12 17:28:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bzl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_adjust_room"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"773bf86d-a93d-43a0-b4a4-e84e9b2becf4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-12 17:28:54 +0000 UTC FinishedAt: 2026-08-12 17:28:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bzl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_adjust_room"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"773bf86d-a93d-43a0-b4a4-e84e9b2becf4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-12 17:29:14 +0000 UTC FinishedAt: 2026-08-12 20:30:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bzl4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_adjust_room"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"07cb86aa50816b070b99c89bf948762ef035a1f2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_CLS_BPF","NET_ACT_BPF"],"series_id":"773bf86d-a93d-43a0-b4a4-e84e9b2becf4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-12 17:29:14 +0000 UTC FinishedAt: 2026-08-12 20:30:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6b014913-056b-4e35-a0ad-8d7987e05d0a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a82d02a8-bc06-4f04-ac36-1772d31fada1,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-workflow6bzl4/series-workflow6bzl4-build-action-3991394918/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-workflow6bzl4/series-workflow6bzl4-build-action-2251361867/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-workflow6bzl4/series-workflow6bzl4-convert-artifact-2940592800/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,}